Commit 7a98359e by 陶然

统计接口优化

parent efb17e08
......@@ -13,12 +13,13 @@ namespace Kivii.Finances.Transforms
[Api(Description = "今日流水操作统计")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class PaymentAcceptStatistic:RestfulExecution<Payment>
public class PaymentAcceptStatistic : RestfulExecution<Payment>
{
public DateTime BeginTime { get; set; }//日期筛选为创建日期,默认统计今日导入系统中的流水信息
public DateTime EndTime { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
int monthDay = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
......@@ -29,6 +30,9 @@ namespace Kivii.Finances.Transforms
var endTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (endTime < beginTime) throw new Exception("查询结束日期不可小于开始日期!");
if (endTime == beginTime) endTime = endTime.AddDays(1);
var rtns = new StatisticResponse<Analysis>();
var conn = KiviiContext.GetOpenedDbConnection<Payment>();
var queryAccount = conn.From<Account>();
queryAccount.Where(o => o.OrganizationKvid == KiviiContext.CurrentMember.OrganizationKvid && Sql.In(o.Type, AccountType.Balance, AccountType.Cash, AccountType.Pos));
......@@ -39,24 +43,44 @@ namespace Kivii.Finances.Transforms
sqlExpress.And(o => o.CreateTime >= beginTime && o.CreateTime < endTime);
//sqlExpress.And(o => o.AmountSplited == 0 || o.AmountSplited < o.Amount);
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.AmountSplited, o.AmountInvoice, o.AmountUsed, o.Amount });
var results = conn.Select(sqlExpress);
//if (IsTest)
//{
var rtns = new StatisticResponse<Analysis>();
sqlExpress.Select(o => new
{
Total = Sql.Count(o.Kvid),
TotalAmount = Sql.Sum(o.Amount),
TotalAmountSplited = Sql.Sum(o.Amount - o.AmountSplited),
TotalAmountInvoice = Sql.Sum(o.Amount - o.AmountInvoice),
TotalAmountUsed = Sql.Sum(o.Amount - o.AmountUsed),
TotalQuantitySplited = Sql.Sum((o.AmountSplited == 0 || o.AmountSplited < o.Amount) ? 1 : 0),
TotalQuantityInvoice = Sql.Sum((o.AmountInvoice == 0 || o.AmountInvoice < o.Amount) ? 1 : 0),
TotalQuantityUsed = Sql.Sum((o.AmountUsed == 0 || o.AmountUsed < o.Amount) ? 1 : 0)
});
rtns = conn.Single<StatisticResponse<Analysis>>(sqlExpress);
rtns.Results = new List<Analysis>();
//rtns.Description = "待认领流水";
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
if (results.IsNullOrEmpty()) return rtns;
rtns.Total = results.Count();
rtns.TotalAmount = results.Sum(o => o.Amount);
rtns.TotalAmountSplited = results.Sum(o => o.Amount - o.AmountSplited);
rtns.TotalQuantitySplited = results.Where(o => o.AmountSplited == 0 || o.AmountSplited < o.Amount).Count();
rtns.TotalAmountInvoice = results.Sum(o => o.Amount - o.AmountInvoice);
rtns.TotalQuantityInvoice = results.Where(o => o.AmountInvoice == 0 || o.AmountInvoice < o.Amount).Count();
rtns.TotalAmountUsed = results.Sum(o => o.Amount - o.AmountUsed);
rtns.TotalQuantityUsed = results.Where(o => o.AmountUsed == 0 || o.AmountUsed < o.Amount).Count();
return rtns;
//}
//sqlExpress.Select(o => new { o.AmountSplited, o.AmountInvoice, o.AmountUsed, o.Amount });
//var results = conn.Select(sqlExpress);
//rtns.Results = new List<Analysis>();
////rtns.Description = "待认领流水";
//rtns.BeginTime = BeginTime;
//rtns.EndTime = EndTime;
//if (results.IsNullOrEmpty()) return rtns;
//rtns.Total = results.Count();
//rtns.TotalAmount = results.Sum(o => o.Amount);
//rtns.TotalAmountSplited = results.Sum(o => o.Amount - o.AmountSplited);
//rtns.TotalQuantitySplited = results.Where(o => o.AmountSplited == 0 || o.AmountSplited < o.Amount).Count();
//rtns.TotalAmountInvoice = results.Sum(o => o.Amount - o.AmountInvoice);
//rtns.TotalQuantityInvoice = results.Where(o => o.AmountInvoice == 0 || o.AmountInvoice < o.Amount).Count();
//rtns.TotalAmountUsed = results.Sum(o => o.Amount - o.AmountUsed);
//rtns.TotalQuantityUsed = results.Where(o => o.AmountUsed == 0 || o.AmountUsed < o.Amount).Count();
//return rtns;
}
}
......@@ -73,6 +97,8 @@ namespace Kivii.Finances.Transforms
public DateTime EndTime { get; set; }
//public bool IsTest { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
int monthDay = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
......@@ -92,15 +118,15 @@ namespace Kivii.Finances.Transforms
queryAccount.Select(o => o.Kvid);
var sqlExpress = conn.From<Payment>();
sqlExpress.Where(o => o.OffsetKvid == Guid.Empty && Sql.In(o.Type, PaymentType.WeChat, PaymentType.Cash, PaymentType.AliPay, PaymentType.Pos, PaymentType.Split, PaymentType.Refund, PaymentType.UnBiz));
sqlExpress.Where(o => o.OffsetKvid == Guid.Empty && Sql.In(o.Type, PaymentType.WeChat, PaymentType.Cash, PaymentType.AliPay, PaymentType.Pos, PaymentType.Split));
sqlExpress.And(o => o.CreateTime >= beginTime && o.CreateTime < endTime);
if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.OrderBy(o => o.OwnerName);
sqlExpress.Select(o => new { o.OwnerKvid, o.OwnerName, o.Amount, o.AmountInvoice, o.AmountUsed, o.OperateTime, o.CreateTime, o.Type });
var results = conn.Select(sqlExpress);
//sqlExpress.Select(o => new { o.OwnerKvid, o.OwnerName, o.Amount, o.AmountInvoice, o.AmountUsed, o.OperateTime, o.CreateTime, o.Type });
//var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Analysis>();
if (results.IsNullOrEmpty()) return rtns;
//if (results.IsNullOrEmpty()) return rtns;
rtns.Results = new List<Analysis>();
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
......@@ -108,48 +134,85 @@ namespace Kivii.Finances.Transforms
//传入部门信息就按照部门group
if (GroupByOwner)
{
var group = results.GroupBy(o => o.OwnerName);
foreach (var kv in group)
sqlExpress.GroupBy(o => o.OwnerName);
sqlExpress.Select(o => new
{
var rtn = new Analysis();
rtn.Summary = kv.Key;
rtn.Amount = kv.Sum(o => o.Amount);
rtn.Quantity = kv.Count();
rtn.AmountSplit = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.Amount);
rtn.QuantitySplit = kv.Count(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos);
rtn.AmountInvoice = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountInvoice);
rtn.QuantityInvoice = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountInvoice);
rtn.AmountNotInvoice = rtn.AmountSplit - rtn.AmountInvoice;
rtn.QuantityNotInvoice = rtn.QuantitySplit - rtn.QuantityInvoice;
rtn.AmountUsed = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountUsed);
rtn.QuantityUsed = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountUsed);
rtn.AmountNotUsed = rtn.AmountSplit - rtn.AmountUsed;
rtn.QuantityNotUsed = rtn.QuantitySplit - rtn.QuantityUsed;
rtn.AmountRefund = kv.Where(o => o.Type == PaymentType.Refund).Sum(o => o.Amount);
rtn.QuantityRefund = kv.Count(o => o.Type == PaymentType.Refund);
rtn.AmountUnBiz = kv.Where(o => o.Type == PaymentType.UnBiz).Sum(o => o.Amount);
rtn.QuantityUnBiz = kv.Count(o => o.Type == PaymentType.UnBiz);
rtns.Results.Add(rtn);
}
Summary = o.OwnerName,
Quantity = Sql.Count(o.Kvid),
Amount = Sql.Sum(o.Amount),
AmountSplit = Sql.Sum(o.Amount),
QuantitySplit = Sql.Count(o.Kvid),
AmountInvoice = Sql.Sum(o.AmountInvoice),
QuantityInvoice = Sql.Sum(o.Amount == o.AmountInvoice ? 1 : 0),
AmountNotInvoice = Sql.Sum(o.Amount - o.AmountInvoice),
QuantityNotInvoice = Sql.Sum(o.AmountInvoice < o.Amount ? 1 : 0),
AmountUsed = Sql.Sum(o.AmountUsed),
QuantityUsed = Sql.Sum(o.AmountUsed == o.Amount ? 1 : 0),
AmountNotUsed = Sql.Sum(o.Amount - o.AmountUsed),
QuantityNotUsed = Sql.Sum(o.AmountUsed < o.Amount ? 1 : 0)
});
rtns.Results = conn.Select<Analysis>(sqlExpress);
//var group = results.GroupBy(o => o.OwnerName);
//foreach (var kv in group)
//{
// var rtn = new Analysis();
// rtn.Summary = kv.Key;
// rtn.Amount = kv.Sum(o => o.Amount);
// rtn.Quantity = kv.Count();
// rtn.AmountSplit = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.Amount);
// rtn.QuantitySplit = kv.Count(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos);
// rtn.AmountInvoice = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountInvoice);
// rtn.QuantityInvoice = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountInvoice);
// rtn.AmountNotInvoice = rtn.AmountSplit - rtn.AmountInvoice;
// rtn.QuantityNotInvoice = rtn.QuantitySplit - rtn.QuantityInvoice;
// rtn.AmountUsed = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountUsed);
// rtn.QuantityUsed = kv.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountUsed);
// rtn.AmountNotUsed = rtn.AmountSplit - rtn.AmountUsed;
// rtn.QuantityNotUsed = rtn.QuantitySplit - rtn.QuantityUsed;
// rtn.AmountRefund = kv.Where(o => o.Type == PaymentType.Refund).Sum(o => o.Amount);
// rtn.QuantityRefund = kv.Count(o => o.Type == PaymentType.Refund);
// rtn.AmountUnBiz = kv.Where(o => o.Type == PaymentType.UnBiz).Sum(o => o.Amount);
// rtn.QuantityUnBiz = kv.Count(o => o.Type == PaymentType.UnBiz);
// rtns.Results.Add(rtn);
//}
}
else
{
rtns.TotalAmount = results.Sum(o => o.Amount);
rtns.TotalQuantity = results.Count();
rtns.TotalAmountSplited = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.Amount);
rtns.TotalQuantitySplited = results.Count(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos);
rtns.TotalAmountInvoice = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountInvoice);
rtns.TotalQuantityInvoice = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountInvoice);
rtns.TotalAmountNotInvoice = rtns.TotalAmountSplited - rtns.TotalAmountInvoice;
rtns.TotalQuantityNotInvoice = rtns.TotalQuantitySplited - rtns.TotalQuantityInvoice;
rtns.TotalAmountUsed = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountUsed);
rtns.TotalQuantityUsed = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountUsed);
rtns.TotalAmountNotUsed = rtns.TotalAmountSplited - rtns.TotalAmountUsed;
rtns.TotalQuantityNotUsed = rtns.TotalQuantitySplited - rtns.TotalQuantityUsed;
rtns.TotalAmountRefund = results.Where(o => o.Type == PaymentType.Refund).Sum(o => o.Amount);
rtns.TotalQuantityRefund = results.Count(o => o.Type == PaymentType.Refund);
rtns.TotalAmountUnBiz = results.Where(o => o.Type == PaymentType.UnBiz).Sum(o => o.Amount);
rtns.TotalQuantityUnBiz = results.Count(o => o.Type == PaymentType.UnBiz);
sqlExpress.Select(o => new
{
TotalQuantity = Sql.Count(o.Kvid),
TotalAmount = Sql.Sum(o.Amount),
TotalAmountSplited = Sql.Sum(o.Amount),
TotalQuantitySplited = Sql.Count(o.Kvid),
TotalAmountInvoice = Sql.Sum(o.AmountInvoice),
TotalQuantityInvoice = Sql.Sum(o.Amount == o.AmountInvoice ? 1 : 0),
TotalAmountNotInvoice = Sql.Sum(o.Amount - o.AmountInvoice),
TotalQuantityNotInvoice = Sql.Sum(o.AmountInvoice < o.Amount ? 1 : 0),
TotalAmountUsed = Sql.Sum(o.AmountUsed),
TotalQuantityUsed = Sql.Sum(o.AmountUsed == o.Amount ? 1 : 0),
TotalAmountNotUsed = Sql.Sum(o.Amount - o.AmountUsed),
TotalQuantityNotUsed = Sql.Sum(o.AmountUsed < o.Amount ? 1 : 0)
});
rtns = conn.Single<StatisticResponse<Analysis>>(sqlExpress);
rtns.Results = new List<Analysis>();
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
//rtns.TotalAmount = results.Sum(o => o.Amount);
//rtns.TotalQuantity = results.Count();
//rtns.TotalAmountSplited = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.Amount);
//rtns.TotalQuantitySplited = results.Count(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos);
//rtns.TotalAmountInvoice = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountInvoice);
//rtns.TotalQuantityInvoice = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountInvoice);
//rtns.TotalAmountNotInvoice = rtns.TotalAmountSplited - rtns.TotalAmountInvoice;
//rtns.TotalQuantityNotInvoice = rtns.TotalQuantitySplited - rtns.TotalQuantityInvoice;
//rtns.TotalAmountUsed = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Sum(o => o.AmountUsed);
//rtns.TotalQuantityUsed = results.Where(o => o.Type == PaymentType.Split || o.Type == PaymentType.WeChat || o.Type == PaymentType.Cash || o.Type == PaymentType.AliPay || o.Type == PaymentType.Pos).Count(o => o.Amount == o.AmountUsed);
//rtns.TotalAmountNotUsed = rtns.TotalAmountSplited - rtns.TotalAmountUsed;
//rtns.TotalQuantityNotUsed = rtns.TotalQuantitySplited - rtns.TotalQuantityUsed;
//rtns.TotalAmountRefund = results.Where(o => o.Type == PaymentType.Refund).Sum(o => o.Amount);
//rtns.TotalQuantityRefund = results.Count(o => o.Type == PaymentType.Refund);
//rtns.TotalAmountUnBiz = results.Where(o => o.Type == PaymentType.UnBiz).Sum(o => o.Amount);
//rtns.TotalQuantityUnBiz = results.Count(o => o.Type == PaymentType.UnBiz);
}
return rtns;
}
......@@ -173,6 +236,8 @@ namespace Kivii.Finances.Transforms
var endTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (endTime < beginTime) throw new Exception("查询结束日期不可小于开始日期!");
if (endTime == beginTime) endTime = endTime.AddDays(1);
var rtns = new StatisticResponse<Analysis>();
var conn = KiviiContext.GetOpenedDbConnection<Payment>();
var queryAccount = conn.From<Account>();
queryAccount.Where(o => o.OrganizationKvid == KiviiContext.CurrentMember.OrganizationKvid && Sql.In(o.Type, AccountType.Balance, AccountType.Cash, AccountType.Pos));
......@@ -183,24 +248,25 @@ namespace Kivii.Finances.Transforms
sqlExpress.And(o => o.OperateTime >= beginTime && o.OperateTime < endTime);
//sqlExpress.And(o => o.AmountSplited == 0 || o.AmountSplited < o.Amount);
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.AmountSplited, o.AmountInvoice, o.AmountUsed, o.Amount });
var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Analysis>();
sqlExpress.Select(o => new
{
Total = Sql.Count(o.Kvid),
TotalQuantity = Sql.Count(o.Kvid),
TotalAmount = Sql.Sum(o.Amount),
TotalAmountNotSplited = Sql.Sum(o.Amount - o.AmountSplited),
TotalQuantityNotSplited = Sql.Sum(o.AmountSplited < o.Amount ? 1 : 0),
TotalAmountNotInvoice = Sql.Sum(o.Amount - o.AmountInvoice),
TotalQuantityNotInvoice = Sql.Sum(o.AmountInvoice < o.Amount ? 1 : 0),
TotalAmountNotUsed = Sql.Sum(o.Amount - o.AmountUsed),
TotalQuantityNotUsed = Sql.Sum(o.AmountUsed < o.Amount ? 1 : 0)
});
rtns = conn.Single<StatisticResponse<Analysis>>(sqlExpress);
rtns.Results = new List<Analysis>();
//rtns.Description = "待认领流水";
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
if (results.IsNullOrEmpty()) return rtns;
rtns.Total = results.Count();
rtns.TotalAmount = results.Sum(o => o.Amount);
rtns.TotalAmountSplited = results.Sum(o => o.Amount - o.AmountSplited);
rtns.TotalQuantitySplited = results.Where(o => o.AmountSplited == 0 || o.AmountSplited < o.Amount).Count();
rtns.TotalAmountInvoice = results.Sum(o => o.Amount - o.AmountInvoice);
rtns.TotalQuantityInvoice = results.Where(o => o.AmountInvoice == 0 || o.AmountInvoice < o.Amount).Count();
rtns.TotalAmountUsed = results.Sum(o => o.Amount - o.AmountUsed);
rtns.TotalQuantityUsed = results.Where(o => o.AmountUsed == 0 || o.AmountUsed < o.Amount).Count();
return rtns;
}
}
......
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