Commit 5d1b0a1f by 陶然

优化统计

parent 6713b1a2
......@@ -613,10 +613,10 @@ namespace Kivii.Finances.Transforms
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("查询结束日期不可小于开始日期!");
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<Payment>();
var queryAccount = conn.From<Account>();
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
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.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 => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.AmountSplited, o.AmountInvoice,o.AmountUsed,o.Amount });
......@@ -752,7 +752,7 @@ namespace Kivii.Finances.Transforms
[Api(Description = "已结算未收费")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class SettlementUnPayedAnalysis : RestfulExecution<Settlement>
public class SettlementPayAnalysis : RestfulExecution<Settlement>
{
public Guid OwnerKvid { get; set; }
public List<Guid> OwnerKvids { get; set; }
......@@ -766,34 +766,85 @@ namespace Kivii.Finances.Transforms
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("查询结束日期不可小于开始日期!");
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);
if (OwnerKvids.IsNullOrEmpty()) OwnerKvids = new List<Guid>();
if (OwnerKvid != Guid.Empty) OwnerKvids.Add(OwnerKvid);
var conn = KiviiContext.GetOpenedDbConnection<Settlement>();
var sqlExpress = conn.From<Settlement>();
sqlExpress.Where(o => o.OffsetKvid == Guid.Empty);
sqlExpress.And(o => o.OperateTime >= BeginTime && o.OperateTime < EndTime);
sqlExpress.And(o => o.AmountPayment < o.Amount || o.AmountPayment == 0);
sqlExpress.And(o => o.CreateTime >= beginTime && o.CreateTime < endTime);
//sqlExpress.And(o => o.AmountPayment < o.Amount || o.AmountPayment == 0);
if (!OwnerKvids.IsNullOrEmpty()) sqlExpress.And(o => Sql.In(o.OwnerKvid, OwnerKvids));
//if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
sqlExpress.Select(o => new { o.AmountPayment, o.Amount });
var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Payment>();
var rtns = new StatisticResponse<Settlement>();
rtns.BeginTime = BeginTime;
rtns.EndTime = EndTime;
rtns.Description = "已结算未收费";
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.TotalQuantityUnpaid = results.Count();
rtns.TotalQuantityUnpaid = results.Count(o => o.AmountPayment == 0 || o.AmountPayment < o.Amount);
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 = "发票分析")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class InvoiceAnalysis : RestfulExecution<Invoice>
......@@ -815,14 +866,14 @@ namespace Kivii.Finances.Transforms
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("查询结束日期不可小于开始日期!");
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));
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);
......
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