Commit a4d0ea53 by 陶然

统计接口优化

parent 7a98359e
......@@ -401,7 +401,7 @@ namespace Kivii.Finances.Transforms
public Guid OwnerKvid { get; set; }
public List<Guid> OwnerKvids { get; set; }
public AnalysisType Type { get; set; }
//public AnalysisType Type { get; set; }
public DateTime BeginTime { get; set; }
......@@ -424,194 +424,223 @@ 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.OperateTime >= BeginTime && o.OperateTime < EndTime);
if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
//if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
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;
foreach (var item in results)
{
item.Summary = item.OperateTime.ToString("yyyy-MM");
}
if (Type == AnalysisType.Depart)
{
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.AmountInvoice = kv.Sum(o => o.AmountInvoice);
rtn.QuantityInvoice = kv.Count(o => o.Amount == o.AmountInvoice);
rtn.AmountUsed = kv.Sum(o => o.AmountUsed);
rtn.QuantityUsed = kv.Count(o => o.Amount == o.AmountUsed);
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.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
//foreach (var item in results)
//{
// item.Summary = item.OperateTime.ToString("yyyy-MM");
//}
//if (Type == AnalysisType.Depart)
//{
sqlExpress.GroupBy(o => o.OwnerName);
sqlExpress.Select(o => new
{
var group = results.GroupBy(o => o.Summary);
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.AmountInvoice = kv.Sum(o => o.AmountInvoice);
rtn.QuantityInvoice = kv.Count(o => o.Amount == o.AmountInvoice);
rtn.AmountUsed = kv.Sum(o => o.AmountUsed);
rtn.QuantityUsed = kv.Count(o => o.Amount == o.AmountUsed);
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.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,
Amount = Sql.Sum(o.Amount),
Quantity = Sql.Count(o.Kvid),
AmountInvoice = Sql.Sum(o.AmountInvoice),
QuantityInvoice = Sql.Sum(o.AmountInvoice == o.Amount ? 1 : 0),
AmountUsed = Sql.Sum(o.AmountUsed),
QuantityUsed = Sql.Sum(o.AmountUsed == o.Amount ? 1 : 0),
AmountSplit = Sql.Sum(o.Amount),
QuantitySplit = Sql.Count(o.Kvid)
});
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.AmountInvoice = kv.Sum(o => o.AmountInvoice);
// rtn.QuantityInvoice = kv.Count(o => o.Amount == o.AmountInvoice);
// rtn.AmountUsed = kv.Sum(o => o.AmountUsed);
// rtn.QuantityUsed = kv.Count(o => o.Amount == o.AmountUsed);
// 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.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
//{
// sqlExpress.GroupBy(o => o.OperateTime.ToString("yyyy-MM"));
// sqlExpress.Select(o => new
// {
// Summary = o.OperateTime.ToString("yyyy-MM"),
// Amount = Sql.Sum(o.Amount),
// Quantity = Sql.Count(o.Kvid),
// AmountInvoice = Sql.Sum(o.AmountInvoice),
// QuantityInvoice = Sql.Sum(o.AmountInvoice == o.Amount ? 1 : 0),
// AmountUsed = Sql.Sum(o.AmountUsed),
// QuantityUsed = Sql.Sum(o.AmountUsed == o.Amount ? 1 : 0),
// AmountSplit = Sql.Sum(o.Amount),
// QuantitySplit = Sql.Count(o.Kvid)
// });
// rtns.Results = conn.Select<Analysis>(sqlExpress);
// //var group = results.GroupBy(o => o.Summary);
// //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.AmountInvoice = kv.Sum(o => o.AmountInvoice);
// // rtn.QuantityInvoice = kv.Count(o => o.Amount == o.AmountInvoice);
// // rtn.AmountUsed = kv.Sum(o => o.AmountUsed);
// // rtn.QuantityUsed = kv.Count(o => o.Amount == o.AmountUsed);
// // 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.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);
// //}
//}
rtns.Total = rtns.Results.Count;
return rtns;
}
}
[Api(Description = "结算分析")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class SettlementPayedAnalysis : RestfulExecution<Settlement>
{
public Guid OwnerKvid { get; set; }
public List<Guid> OwnerKvids { get; set; }
//[Api(Description = "结算分析")]
//[RequiresAnyRole(SystemRoles.Everyone)]
//public class SettlementPayedAnalysis : RestfulExecution<Settlement>
//{
// public Guid OwnerKvid { get; set; }
// public List<Guid> OwnerKvids { get; set; }
public AnalysisType Type { get; set; } = AnalysisType.Depart;//按时间,部门,类型分析
// public AnalysisType Type { get; set; } = AnalysisType.Depart;//按时间,部门,类型分析
public DateTime BeginTime { 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 != Guid.Empty) 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);
// public DateTime EndTime { get; set; }
// public override object OnExecution(IRequest req, IResponse res)
// {
// if (OwnerKvids.IsNullOrEmpty()) OwnerKvids = new List<Guid>();
// if (OwnerKvid != Guid.Empty) 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);
BeginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd"));
EndTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
if (EndTime < BeginTime) throw new Exception("查询结束日期不可小于开始日期!");
// BeginTime = DateTime.Parse(BeginTime.ToString("yyyy-MM-dd"));
// EndTime = DateTime.Parse(EndTime.ToString("yyyy-MM-dd"));
// if (EndTime < BeginTime) throw new Exception("查询结束日期不可小于开始日期!");
var conn = KiviiContext.GetOpenedDbConnection<Settlement>();
var sqlExpress = conn.From<Settlement>();
//sqlExpress.Where(o => o.OffsetKvid == Guid.Empty);
sqlExpress.Where(o => o.CreateTime >= BeginTime && o.CreateTime < EndTime);
if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
//if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
sqlExpress.OrderBy(o => o.CreateTime);
sqlExpress.Select(o => new { o.OwnerKvid, o.OwnerName, o.Type, o.AmountPlan, o.Amount, o.AmountPayment, o.OperateTime, o.CreateTime });
var results = conn.Select(sqlExpress);
// var conn = KiviiContext.GetOpenedDbConnection<Settlement>();
// var sqlExpress = conn.From<Settlement>();
// //sqlExpress.Where(o => o.OffsetKvid == Guid.Empty);
// sqlExpress.Where(o => o.CreateTime >= BeginTime && o.CreateTime < EndTime);
// if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
// //if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
// sqlExpress.OrderBy(o => o.CreateTime);
// sqlExpress.Select(o => new { o.OwnerKvid, o.OwnerName, o.Type, o.AmountPlan, o.Amount, o.AmountPayment, o.OperateTime, o.CreateTime });
// var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Settlement>();
if (results.IsNullOrEmpty()) return rtns;
rtns.Results = new List<Settlement>();
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
foreach (var item in results)
{
item.Summary = item.CreateTime.ToString("yyyy-MM");
}
if (Type == AnalysisType.Depart)
{
var group = results.GroupBy(o => o.OwnerName);
foreach (var kv in group)
{
var summary = kv.Key;
if (kv.Key == "Report") summary = "报告费";
if (kv.Key == "Service") summary = "服务费";
if (kv.Key == "Express") summary = "快递费";
if (kv.Key == "Certificate") summary = "证书费";
if (kv.Key == "Tag") summary = "挂签费";
if (kv.Key == "SoftwareSupervision") summary = "软件监理费";
if (kv.Key == "SoftwareCostEvaluation") summary = "软件造价评估费";
if (kv.Key == "Authentication") summary = "认证费";
if (kv.Key == "Train") summary = "培训费";
var rtn = new Settlement();
rtn.Summary = summary;
rtn.Amount = kv.Sum(o => o.Amount);
rtn.AmountPayment = kv.Sum(o => o.AmountPayment);
rtn.AmountPlan = kv.Sum(o => o.AmountPlan);
rtn.Status = kv.Count();//结算数量
rtn.Category = kv.Where(o => o.Amount == o.AmountPayment).Count().ToString();//已收款的结算数量
rtns.Results.Add(rtn);
}
}
else if (Type == AnalysisType.Month)
{
var group = results.GroupBy(o => o.Summary);
foreach (var kv in group)
{
var summary = kv.Key;
if (kv.Key == "Report") summary = "报告费";
if (kv.Key == "Service") summary = "服务费";
if (kv.Key == "Express") summary = "快递费";
if (kv.Key == "Certificate") summary = "证书费";
if (kv.Key == "Tag") summary = "挂签费";
if (kv.Key == "SoftwareSupervision") summary = "软件监理费";
if (kv.Key == "SoftwareCostEvaluation") summary = "软件造价评估费";
if (kv.Key == "Authentication") summary = "认证费";
if (kv.Key == "Train") summary = "培训费";
var rtn = new Settlement();
rtn.Summary = summary;
rtn.Amount = kv.Sum(o => o.Amount);
rtn.AmountPayment = kv.Sum(o => o.AmountPayment);
rtn.AmountPlan = kv.Sum(o => o.AmountPlan);
rtn.Status = kv.Count();
rtn.Category = kv.Where(o => o.Amount == o.AmountPayment).Count().ToString();//已收款的结算数量
rtns.Results.Add(rtn);
}
}
else
{
var group = results.GroupBy(o => o.Type);
foreach (var kv in group)
{
var summary = kv.Key;
if (kv.Key == "Report") summary = "报告费";
if (kv.Key == "Service") summary = "服务费";
if (kv.Key == "Express") summary = "快递费";
if (kv.Key == "Certificate") summary = "证书费";
if (kv.Key == "Tag") summary = "挂签费";
if (kv.Key == "SoftwareSupervision") summary = "软件监理费";
if (kv.Key == "SoftwareCostEvaluation") summary = "软件造价评估费";
if (kv.Key == "Authentication") summary = "认证费";
if (kv.Key == "Train") summary = "培训费";
var rtn = new Settlement();
rtn.Summary = summary;
rtn.Amount = kv.Sum(o => o.Amount);
rtn.AmountPayment = kv.Sum(o => o.AmountPayment);
rtn.AmountPlan = kv.Sum(o => o.AmountPlan);
rtn.Status = kv.Count();
rtn.Category = kv.Where(o => o.Amount == o.AmountPayment).Count().ToString();//已收款的结算数量
rtns.Results.Add(rtn);
}
}
// var rtns = new StatisticResponse<Settlement>();
// if (results.IsNullOrEmpty()) return rtns;
// rtns.Results = new List<Settlement>();
// rtns.BeginTime = BeginTime;
// rtns.EndTime = EndTime;
// foreach (var item in results)
// {
// item.Summary = item.CreateTime.ToString("yyyy-MM");
// }
// if (Type == AnalysisType.Depart)
// {
// var group = results.GroupBy(o => o.OwnerName);
// foreach (var kv in group)
// {
// var summary = kv.Key;
// if (kv.Key == "Report") summary = "报告费";
// if (kv.Key == "Service") summary = "服务费";
// if (kv.Key == "Express") summary = "快递费";
// if (kv.Key == "Certificate") summary = "证书费";
// if (kv.Key == "Tag") summary = "挂签费";
// if (kv.Key == "SoftwareSupervision") summary = "软件监理费";
// if (kv.Key == "SoftwareCostEvaluation") summary = "软件造价评估费";
// if (kv.Key == "Authentication") summary = "认证费";
// if (kv.Key == "Train") summary = "培训费";
// var rtn = new Settlement();
// rtn.Summary = summary;
// rtn.Amount = kv.Sum(o => o.Amount);
// rtn.AmountPayment = kv.Sum(o => o.AmountPayment);
// rtn.AmountPlan = kv.Sum(o => o.AmountPlan);
// rtn.Status = kv.Count();//结算数量
// rtn.Category = kv.Where(o => o.Amount == o.AmountPayment).Count().ToString();//已收款的结算数量
// rtns.Results.Add(rtn);
// }
// }
// else if (Type == AnalysisType.Month)
// {
// var group = results.GroupBy(o => o.Summary);
// foreach (var kv in group)
// {
// var summary = kv.Key;
// if (kv.Key == "Report") summary = "报告费";
// if (kv.Key == "Service") summary = "服务费";
// if (kv.Key == "Express") summary = "快递费";
// if (kv.Key == "Certificate") summary = "证书费";
// if (kv.Key == "Tag") summary = "挂签费";
// if (kv.Key == "SoftwareSupervision") summary = "软件监理费";
// if (kv.Key == "SoftwareCostEvaluation") summary = "软件造价评估费";
// if (kv.Key == "Authentication") summary = "认证费";
// if (kv.Key == "Train") summary = "培训费";
// var rtn = new Settlement();
// rtn.Summary = summary;
// rtn.Amount = kv.Sum(o => o.Amount);
// rtn.AmountPayment = kv.Sum(o => o.AmountPayment);
// rtn.AmountPlan = kv.Sum(o => o.AmountPlan);
// rtn.Status = kv.Count();
// rtn.Category = kv.Where(o => o.Amount == o.AmountPayment).Count().ToString();//已收款的结算数量
// rtns.Results.Add(rtn);
// }
// }
// else
// {
// var group = results.GroupBy(o => o.Type);
// foreach (var kv in group)
// {
// var summary = kv.Key;
// if (kv.Key == "Report") summary = "报告费";
// if (kv.Key == "Service") summary = "服务费";
// if (kv.Key == "Express") summary = "快递费";
// if (kv.Key == "Certificate") summary = "证书费";
// if (kv.Key == "Tag") summary = "挂签费";
// if (kv.Key == "SoftwareSupervision") summary = "软件监理费";
// if (kv.Key == "SoftwareCostEvaluation") summary = "软件造价评估费";
// if (kv.Key == "Authentication") summary = "认证费";
// if (kv.Key == "Train") summary = "培训费";
// var rtn = new Settlement();
// rtn.Summary = summary;
// rtn.Amount = kv.Sum(o => o.Amount);
// rtn.AmountPayment = kv.Sum(o => o.AmountPayment);
// rtn.AmountPlan = kv.Sum(o => o.AmountPlan);
// rtn.Status = kv.Count();
// rtn.Category = kv.Where(o => o.Amount == o.AmountPayment).Count().ToString();//已收款的结算数量
// rtns.Results.Add(rtn);
// }
// }
return rtns;
}
}
// return rtns;
// }
//}
//[Api(Description = "待开票流水")]
//[RequiresAnyRole(SystemRoles.Everyone)]
......
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