Commit 5d1b0a1f by 陶然

优化统计

parent 6713b1a2
...@@ -613,10 +613,10 @@ namespace Kivii.Finances.Transforms ...@@ -613,10 +613,10 @@ namespace Kivii.Finances.Transforms
if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay); if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay);
BeginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd")); var beginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd"));
EndTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd")); var endTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (EndTime < BeginTime) throw new Exception("查询结束日期不可小于开始日期!"); if (endTime < beginTime) throw new Exception("查询结束日期不可小于开始日期!");
if (endTime == beginTime) endTime = endTime.AddDays(1);
var conn = KiviiContext.GetOpenedDbConnection<Payment>(); var conn = KiviiContext.GetOpenedDbConnection<Payment>();
var queryAccount = conn.From<Account>(); var queryAccount = conn.From<Account>();
queryAccount.Where(o => o.OrganizationKvid == KiviiContext.CurrentMember.OrganizationKvid && Sql.In(o.Type, AccountType.Balance, AccountType.Cash, AccountType.Pos)); queryAccount.Where(o => o.OrganizationKvid == KiviiContext.CurrentMember.OrganizationKvid && Sql.In(o.Type, AccountType.Balance, AccountType.Cash, AccountType.Pos));
...@@ -624,7 +624,7 @@ namespace Kivii.Finances.Transforms ...@@ -624,7 +624,7 @@ namespace Kivii.Finances.Transforms
var sqlExpress = conn.From<Payment>(); var sqlExpress = conn.From<Payment>();
sqlExpress.Where(o => o.RootKvid == o.Kvid && o.OffsetKvid == Guid.Empty && Sql.In(o.Type, PaymentType.AliPay, PaymentType.WeChat, PaymentType.Bank, PaymentType.Cash, PaymentType.Pos)); sqlExpress.Where(o => o.RootKvid == o.Kvid && o.OffsetKvid == Guid.Empty && Sql.In(o.Type, PaymentType.AliPay, PaymentType.WeChat, PaymentType.Bank, PaymentType.Cash, PaymentType.Pos));
sqlExpress.And(o => o.OperateTime >= BeginTime && o.OperateTime < EndTime); sqlExpress.And(o => o.OperateTime >= beginTime && o.OperateTime < endTime);
//sqlExpress.And(o => o.AmountSplited == 0 || o.AmountSplited < o.Amount); //sqlExpress.And(o => o.AmountSplited == 0 || o.AmountSplited < o.Amount);
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount))); sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.AmountSplited, o.AmountInvoice,o.AmountUsed,o.Amount }); sqlExpress.Select(o => new { o.AmountSplited, o.AmountInvoice,o.AmountUsed,o.Amount });
...@@ -752,7 +752,7 @@ namespace Kivii.Finances.Transforms ...@@ -752,7 +752,7 @@ namespace Kivii.Finances.Transforms
[Api(Description = "已结算未收费")] [Api(Description = "已结算未收费")]
[RequiresAnyRole(SystemRoles.Everyone)] [RequiresAnyRole(SystemRoles.Everyone)]
public class SettlementUnPayedAnalysis : RestfulExecution<Settlement> public class SettlementPayAnalysis : RestfulExecution<Settlement>
{ {
public Guid OwnerKvid { get; set; } public Guid OwnerKvid { get; set; }
public List<Guid> OwnerKvids { get; set; } public List<Guid> OwnerKvids { get; set; }
...@@ -766,34 +766,85 @@ namespace Kivii.Finances.Transforms ...@@ -766,34 +766,85 @@ namespace Kivii.Finances.Transforms
if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay); if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay);
BeginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd")); var beginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd"));
EndTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd")); var endTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (EndTime < BeginTime) throw new Exception("查询结束日期不可小于开始日期!"); if (endTime < beginTime) throw new Exception("查询结束日期不可小于开始日期!");
if (endTime == beginTime) endTime = endTime.AddDays(1);
if (OwnerKvids.IsNullOrEmpty()) OwnerKvids = new List<Guid>(); if (OwnerKvids.IsNullOrEmpty()) OwnerKvids = new List<Guid>();
if (OwnerKvid != Guid.Empty) OwnerKvids.Add(OwnerKvid); if (OwnerKvid != Guid.Empty) OwnerKvids.Add(OwnerKvid);
var conn = KiviiContext.GetOpenedDbConnection<Settlement>(); var conn = KiviiContext.GetOpenedDbConnection<Settlement>();
var sqlExpress = conn.From<Settlement>(); var sqlExpress = conn.From<Settlement>();
sqlExpress.Where(o => o.OffsetKvid == Guid.Empty); sqlExpress.Where(o => o.OffsetKvid == Guid.Empty);
sqlExpress.And(o => o.OperateTime >= BeginTime && o.OperateTime < EndTime); sqlExpress.And(o => o.CreateTime >= beginTime && o.CreateTime < endTime);
sqlExpress.And(o => o.AmountPayment < o.Amount || o.AmountPayment == 0); //sqlExpress.And(o => o.AmountPayment < o.Amount || o.AmountPayment == 0);
if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids)); if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
//if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid); //if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
sqlExpress.Select(o => new { o.AmountPayment, o.Amount }); sqlExpress.Select(o => new { o.AmountPayment, o.Amount });
var results = conn.Select(sqlExpress); var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Payment>(); var rtns = new StatisticResponse<Settlement>();
rtns.BeginTime = BeginTime; rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime; rtns.EndTime = EndTime;
rtns.Description = "已结算未收费";
if (results.IsNullOrEmpty()) return rtns; if (results.IsNullOrEmpty()) return rtns;
rtns.Total = results.Count();
rtns.TotalAmount = results.Sum(o => o.Amount);
rtns.TotalAmountPayment = results.Sum(o => o.AmountPayment);
rtns.TotalQuantityPayment = results.Count(o => o.AmountPayment == o.Amount);
rtns.TotalAmountUnpaid = results.Sum(o => o.Amount - o.AmountPayment); rtns.TotalAmountUnpaid = results.Sum(o => o.Amount - o.AmountPayment);
rtns.TotalQuantityUnpaid = results.Count(); rtns.TotalQuantityUnpaid = results.Count(o => o.AmountPayment == 0 || o.AmountPayment < o.Amount);
return rtns; return rtns;
} }
} }
[Api(Description = "发票操作分析")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class InvoiceOperateAnalysis : RestfulExecution<Invoice>
{
public Guid OwnerKvid { get; set; }
public List<Guid> OwnerKvids { get; set; }
public DateTime BeginTime { get; set; }
public DateTime EndTime { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
if (OwnerKvids.IsNullOrEmpty()) OwnerKvids = new List<Guid>();
if (OwnerKvid != null) OwnerKvids.Add(OwnerKvid);
int monthDay = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay);
var beginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd"));
var endTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (endTime < beginTime) throw new Exception("查询结束日期不可小于开始日期!");
if (endTime == beginTime) endTime = endTime.AddDays(1);
var conn = KiviiContext.GetOpenedDbConnection<Invoice>();
var sqlExpress = conn.From<Invoice>();
sqlExpress.Where(o => o.RootKvid == o.Kvid && o.Type != "Relation");
sqlExpress.And(o => (o.OperateTime >= beginTime && o.OperateTime < endTime));
if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
//if (OwnerKvid != null) sqlExpress.And(o => o.OwnerKvid == OwnerKvid.Value);
sqlExpress.OrderBy(o => o.OwnerName);
sqlExpress.Select(o => new { o.OwnerKvid, o.OwnerName, o.OffsetKvid, o.Amount, o.AmountPayment, o.AmountUsed, o.OperateTime, o.CreateTime, o.Type });
var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Invoice>();
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
if (results.IsNullOrEmpty()) return rtns;
rtns.Total = results.Where(o => o.Amount > 0).Count();
rtns.TotalAmount = results.Where(o => o.Amount > 0).Sum(o => o.Amount);
rtns.TotalAmountPayment = results.Where(o => o.Amount > 0).Sum(o => o.AmountPayment);
rtns.TotalQuantityPayment = results.Count(o => o.Amount > 0 && o.AmountPayment == o.Amount);
rtns.TotalAmountUnpaid = results.Where(o => o.Amount > 0).Sum(o => o.Amount - o.AmountPayment);
rtns.TotalQuantityUnpaid = results.Count(o => o.Amount > 0 && o.AmountPayment < o.Amount);
rtns.TotalAmountOffset=results.Where(o => o.Amount <= 0).Sum(o => o.Amount);
rtns.TotalQuantityOffset = results.Count(o => o.Amount <= 0);
return rtns;
}
}
[Api(Description = "发票分析")] [Api(Description = "发票分析")]
[RequiresAnyRole(SystemRoles.Everyone)] [RequiresAnyRole(SystemRoles.Everyone)]
public class InvoiceAnalysis : RestfulExecution<Invoice> public class InvoiceAnalysis : RestfulExecution<Invoice>
...@@ -815,14 +866,14 @@ namespace Kivii.Finances.Transforms ...@@ -815,14 +866,14 @@ namespace Kivii.Finances.Transforms
if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); if (BeginTime == DateTime.MinValue) BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay); if (EndTime == DateTime.MinValue) EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, monthDay);
BeginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd")); var beginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd"));
EndTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd")); var endTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (EndTime < BeginTime) throw new Exception("查询结束日期不可小于开始日期!"); if (endTime < beginTime) throw new Exception("查询结束日期不可小于开始日期!");
if (endTime == beginTime) endTime = endTime.AddDays(1);
var conn = KiviiContext.GetOpenedDbConnection<Invoice>(); var conn = KiviiContext.GetOpenedDbConnection<Invoice>();
var sqlExpress = conn.From<Invoice>(); var sqlExpress = conn.From<Invoice>();
sqlExpress.Where(o => o.RootKvid == o.Kvid && o.Type != "Relation"); sqlExpress.Where(o => o.RootKvid == o.Kvid && o.Type != "Relation");
sqlExpress.And(o => (o.OperateTime >= BeginTime && o.OperateTime < EndTime)); sqlExpress.And(o => (o.OperateTime >= beginTime && o.OperateTime < endTime));
if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids)); if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
//if (OwnerKvid != null) sqlExpress.And(o => o.OwnerKvid == OwnerKvid.Value); //if (OwnerKvid != null) sqlExpress.And(o => o.OwnerKvid == OwnerKvid.Value);
sqlExpress.OrderBy(o => o.OwnerName); sqlExpress.OrderBy(o => o.OwnerName);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment