Commit 7724a15b by 陶然

优化

parent 892da3d6
......@@ -14,6 +14,20 @@ namespace Kivii.Finances.Entities
{
#region 账户所有人,禁止更新
[IgnoreUpdate]
[DefaultEmptyGuid]
public Guid BizKvid { get; set; }
[ApiMember(Description = "业务流水号")]
[IgnoreUpdate]
[StringLength(200)]
public string BizId { get; set; }
[ApiMember(Description = "业务类型")]
[IgnoreUpdate]
[StringLength(100)]
public string BizType { get; set; }
[IgnoreUpdate]
[DefaultEmptyGuid, Required]
public Guid OwnerKvid { get; set; }
......
using Kivii.DataAnnotations;
using System;
namespace Kivii.Finances.Entities
{
......@@ -6,6 +7,22 @@ namespace Kivii.Finances.Entities
[Alias(Configs.TableNameInvoiceTitle)]
public class InvoiceTitle:Entity, IEntityInAssemblyDb
{
#region 关联信息Biz 内部设置
[IgnoreUpdate]
[DefaultEmptyGuid]
public Guid BizKvid { get; set; }
[ApiMember(Description = "业务流水号")]
[IgnoreUpdate]
[StringLength(200)]
public string BizId { get; set; }
[ApiMember(Description = "业务类型")]
[IgnoreUpdate]
[StringLength(100)]
public string BizType { get; set; }
#endregion
[ApiMember(Description = "公司名称")]
[StringLength(50), Required,Unique]
public string CompanyName { get; set; }
......
......@@ -31,14 +31,14 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Kivii.Common.V4.5, Version=5.6.2021.10200, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Kivii.Common.5.6.2021.10200\lib\net45\Kivii.Common.V4.5.dll</HintPath>
<Reference Include="Kivii.Common.V4.5, Version=5.6.2022.4000, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Kivii.Common.5.6.2022.4000\lib\net45\Kivii.Common.V4.5.dll</HintPath>
</Reference>
<Reference Include="Kivii.Core.V4.5, Version=5.6.2021.10200, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Kivii.Core.5.6.2021.10200\lib\net45\Kivii.Core.V4.5.dll</HintPath>
<Reference Include="Kivii.Core.V4.5, Version=5.6.2022.4000, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Kivii.Core.5.6.2022.4000\lib\net45\Kivii.Core.V4.5.dll</HintPath>
</Reference>
<Reference Include="Kivii.Linq.V4.5, Version=5.6.2021.10190, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Kivii.Linq.5.6.2021.10190\lib\net45\Kivii.Linq.V4.5.dll</HintPath>
<Reference Include="Kivii.Linq.V4.5, Version=5.6.2022.4011, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Kivii.Linq.5.6.2022.4011\lib\net45\Kivii.Linq.V4.5.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
......@@ -98,9 +98,6 @@
<Compile Include="Transforms\RestfulStatistic.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Content\codes\App.Const.Finances.js" />
<EmbeddedResource Include="Content\codes\Classic.Control.Kivii.Finances.AccountDetail.List.js" />
<EmbeddedResource Include="Content\codes\Classic.Control.Kivii.Finances.Bill.Form.js" />
......@@ -212,5 +209,8 @@
<EmbeddedResource Include="Content\codet\Classic.View.Kivii.Finances.Statistic.Invoice.js" />
<EmbeddedResource Include="Content\codet\Classic.View.Kivii.Finances.Statistic.Settlement.js" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
......@@ -127,7 +127,10 @@ namespace Kivii.Finances.Transforms
public override bool OnPreRestfulDelete(IRequest req, IResponse res, IDbConnection dbConnection, IRestfulDeleteResponse<Bill> rtns)
{
dbConnection.Exists<Bill>(o => Sql.In(o.Kvid, Kvids) && o.AmountPayment == o.Amount).ThrowIfTrue("此账单已归档付款登记,无法删除");
_trans = dbConnection.OpenTransaction();
//if (dbConnection is LinqConnection && (dbConnection as LinqConnection).DbTransaction == null)
//{
_trans = dbConnection.OpenTransaction();
//}
return base.OnPreRestfulDelete(req, res, dbConnection, rtns);
}
......@@ -138,11 +141,11 @@ namespace Kivii.Finances.Transforms
var deleteBillDetails = dbConnection.From<BillDetail>().Update(o => o.Status).Where(o => Sql.In(o.BillKvid, Kvids));
dbConnection.UpdateOnly<BillDetail>(new BillDetail { Status = -1 }, deleteBillDetails);
_trans.Commit();
_trans?.Commit();
}
catch (Exception ex)
{
_trans.Rollback();
_trans?.Rollback();
throw ex;
}
return base.OnPostRestfulDelete(req, res, dbConnection, rtns);
......
......@@ -34,15 +34,13 @@ namespace Kivii.Finances.Transforms
var typeCashs = Items.Where(o => o.Type == PaymentType.Cash).ToList();
var typePoss = Items.Where(o => o.Type == PaymentType.Pos).ToList();
var serialNumbers = typeBanks.ConvertAll(o => o.SerialNumber);
serialNumbers.AddRange(typeCashs.ConvertAll(o => o.SerialNumber));
serialNumbers.AddRange(typePoss.ConvertAll(o => o.SerialNumber));
var serialNumbers = Items.ConvertAll(o => o.SerialNumber);
serialNumbers.RemoveAll(o => o.IsNullOrEmpty());
var conn = KiviiContext.GetOpenedDbConnection<Payment>();
var accountBalance = CurrencyUnit.CNY.GetBalanceAccount();
var existPayments = conn.Select<Payment>(o => Sql.In(o.SerialNumber, serialNumbers));
List<Payment> existPayments = null;
if (!serialNumbers.IsNullOrEmpty()) existPayments = conn.Select<Payment>(o => Sql.In(o.SerialNumber, serialNumbers));
var allAccountDetails = new List<AccountDetail>();
var allAcceptPayments = new List<Payment>();
var allAcceptPays = new List<Pay>();
......@@ -52,11 +50,18 @@ namespace Kivii.Finances.Transforms
{
foreach (var item in typeBanks)
{
#region 验证是否为重复项
if (!existPayments.IsNullOrEmpty())
{
var exist = existPayments.FirstOrDefault(o => o.SerialNumber == item.SerialNumber);
if (exist != null) continue;
}
else
{
var exist = conn.Single<Payment>(o => o.PayerName == item.PayerName && o.OperateTime == item.OperateTime && o.Amount == item.Amount && o.RootKvid == o.Kvid);
if (exist != null) continue;
}
#endregion
if (item.Amount <= 0) continue;
//Account account = null;
//if (item.PayerAccountKvid != Guid.Empty) account = accounts.FirstOrDefault(o => o.Kvid == item.PayerAccountKvid);
......@@ -98,11 +103,18 @@ namespace Kivii.Finances.Transforms
if (cashAccount == null) throw new Exception("未找到当前登录人的现金账户!");
foreach (var item in typeCashs)
{
#region 验证是否为重复项
if (!existPayments.IsNullOrEmpty())
{
var exist = existPayments.FirstOrDefault(o => o.SerialNumber == item.SerialNumber);
if (exist != null) continue;
}
else
{
var exist = conn.Single<Payment>(o => o.PayerName == item.PayerName && o.OperateTime == item.OperateTime && o.Amount == item.Amount && o.RootKvid == o.Kvid);
if (exist != null) continue;
}
#endregion
if (item.Amount <= 0) continue;
var itemKvid = Guid.NewGuid();
item.AmountInvoice = 0;
......@@ -139,11 +151,18 @@ namespace Kivii.Finances.Transforms
if (posAccount == null) throw new Exception("未找到当前登录人的刷卡账户!");
foreach (var item in typePoss)
{
#region 验证是否为重复项
if (!existPayments.IsNullOrEmpty())
{
var exist = existPayments.FirstOrDefault(o => o.SerialNumber == item.SerialNumber);
if (exist != null) continue;
}
else
{
var exist = conn.Single<Payment>(o => o.PayerName == item.PayerName && o.OperateTime == item.OperateTime && o.Amount == item.Amount && o.RootKvid == o.Kvid);
if (exist != null) continue;
}
#endregion
if (item.Amount <= 0) continue;
var itemKvid = Guid.NewGuid();
item.AmountInvoice = 0;
......
......@@ -9,6 +9,33 @@ using System.Threading.Tasks;
namespace Kivii.Finances.Transforms
{
public class StatisticResponse<T> : RestfulQueryResponse<T>
{
public string Description { get; set; }
public decimal TotalAmount { get; set; }
public decimal TotalAmountInvoice { get; set; }
public decimal TotalAmountUsed { get; set; }
public decimal TotalAmountPayment { get; set; }
public decimal TotalAmountUnpaid { get; set; }
public decimal TotalAmountOffset { get; set; }
public decimal TotalQuantity { get; set; }
public decimal TotalQuantityInvoice { get; set; }
public decimal TotalQuantityUsed { get; set; }
public decimal TotalQuantityPayment { get; set; }
public decimal TotalQuantityUnpaid { get; set; }
public decimal TotalQuantityOffset { get; set; }
}
//分析维度
public enum AnalysisType
{
Depart=0,//部门
Month,//月份
Type//类型
}
[Api(Description = "发票统计")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class InvoiceStatistic : RestfulExecution<Invoice>
......@@ -181,7 +208,7 @@ namespace Kivii.Finances.Transforms
public DateTime EndTime { get; set; }
public OwnerType OwnerType { get; set; } = OwnerType.Unsupport;
public Guid OwnerKvid { get; set; }
public bool? IsPayee { get; set; }//查收款还是付款
......@@ -201,6 +228,7 @@ namespace Kivii.Finances.Transforms
var conn = KiviiContext.GetOpenedDbConnection<Payment>();
var dynamicParams = Request.GetRequestParams();
if (dynamicParams.ContainsKey("OwnerKvid")) dynamicParams.Remove("OwnerKvid");
var autoQuery = Request.TryResolve<IAutoQueryDb>();
autoQuery.IncludeTotal = true;
var request = new RestfulQuery<Payment>();
......@@ -208,9 +236,11 @@ namespace Kivii.Finances.Transforms
var sqlExpress = autoQuery.CreateQuery(Request, conn, request, dynamicParams);
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));
if (OwnerType == OwnerType.Organization) sqlExpress.And(o => o.OwnerKvid == KiviiContext.CurrentMember.OrganizationKvid || o.OwnerKvid == Guid.Empty);
if (OwnerType == OwnerType.Department) sqlExpress.And(o => o.OwnerKvid == KiviiContext.CurrentMember.DepartmentKvid || o.OwnerKvid == Guid.Empty);
if (OwnerType == OwnerType.Member) sqlExpress.And(o => o.OwnerKvid == KiviiContext.CurrentMember.Kvid || o.OwnerKvid == Guid.Empty);
sqlExpress.And(o => o.OperateTime >= BeginTime && o.OperateTime < EndTime);
if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid || o.OwnerKvid == Guid.Empty);
//if (OwnerType == OwnerType.Organization) sqlExpress.And(o => o.OwnerKvid == KiviiContext.CurrentMember.OrganizationKvid || o.OwnerKvid == Guid.Empty);
//if (OwnerType == OwnerType.Department) sqlExpress.And(o => o.OwnerKvid == KiviiContext.CurrentMember.DepartmentKvid || o.OwnerKvid == Guid.Empty);
//if (OwnerType == OwnerType.Member) sqlExpress.And(o => o.OwnerKvid == KiviiContext.CurrentMember.Kvid || o.OwnerKvid == Guid.Empty);
if (IsPayee != null)
{
var queryAccount = conn.From<Account>();
......@@ -244,21 +274,271 @@ namespace Kivii.Finances.Transforms
}
}
public class StatisticResponse<T>:RestfulQueryResponse<T>
[Api(Description = "到账认领分析")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class PaymentSplitAnalysis : RestfulExecution<Payment>
{
public decimal TotalAmount { get; set; }
public decimal TotalAmountInvoice { get; set; }
public decimal TotalAmountUsed { get; set; }
public decimal TotalAmountPayment { get; set; }
public decimal TotalAmountUnpaid { get; set; }
public decimal TotalAmountOffset { get; set; }
public Guid OwnerKvid { get; set; }
public decimal TotalQuantity { get; set; }
public decimal TotalQuantityInvoice { get; set; }
public decimal TotalQuantityUsed { get; set; }
public decimal TotalQuantityPayment { get; set; }
public decimal TotalQuantityUnpaid { get; set; }
public decimal TotalQuantityOffset { get; set; }
public AnalysisType Type { get; set; } = AnalysisType.Depart;//按时间分析,否则按部门分析
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);
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 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));
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.And(o => o.OperateTime >= BeginTime && o.OperateTime < EndTime);
if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.OwnerKvid, o.OwnerName, o.Amount, o.AmountInvoice, o.AmountUsed, o.OperateTime, o.CreateTime });
var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Payment>();
if (results.IsNullOrEmpty()) return rtns;
rtns.Results = new List<Payment>();
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 Payment();
rtn.Summary = kv.Key;
rtn.Amount = kv.Sum(o => o.Amount);
rtn.AmountInvoice = kv.Sum(o => o.AmountInvoice);
rtn.AmountUsed = kv.Sum(o => o.AmountUsed);
rtn.Status = kv.Count();
rtns.Results.Add(rtn);
}
}
else
{
var group = results.GroupBy(o => o.Summary);
foreach (var kv in group)
{
var rtn = new Payment();
rtn.Summary = kv.Key;
rtn.Amount = kv.Sum(o => o.Amount);
rtn.AmountInvoice = kv.Sum(o => o.AmountInvoice);
rtn.AmountUsed = kv.Sum(o => o.AmountUsed);
rtn.Status = kv.Count();
rtns.Results.Add(rtn);
}
}
return rtns;
}
}
[Api(Description = "结算分析")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class SettlementPayedAnalysis : RestfulExecution<Settlement>
{
public Guid OwnerKvid { get; set; }
public AnalysisType Type { get; set; } = AnalysisType.Depart;//按时间,部门,类型分析
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);
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 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 (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
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>();
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 rtn = new Settlement();
rtn.Summary = kv.Key;
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();
rtns.Results.Add(rtn);
}
}
else if(Type==AnalysisType.Month)
{
var group = results.GroupBy(o => o.Summary);
foreach (var kv in group)
{
var rtn = new Settlement();
rtn.Summary = kv.Key;
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();
rtns.Results.Add(rtn);
}
}
else
{
var group = results.GroupBy(o => o.Type);
foreach (var kv in group)
{
var summary = kv.Key == "Report" ? "报告费" : (kv.Key == "Service" ? "服务费" : (kv.Key == "Express" ? "快递费" : kv.Key));
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();
rtns.Results.Add(rtn);
}
}
return rtns;
}
}
[Api(Description = "待认领流水")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class PaymentUnSplitAnalysis : RestfulExecution<Payment>
{
public override object OnExecution(IRequest req, IResponse res)
{
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));
queryAccount.Select(o => o.Kvid);
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.AmountSplited == 0 || o.AmountSplited < o.Amount);
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.AmountSplited, o.Amount });
var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Payment>();
rtns.Description = "待认领流水";
if (results.IsNullOrEmpty()) return rtns;
rtns.TotalAmount = results.Sum(o => o.Amount - o.AmountSplited);
rtns.TotalQuantity = results.Count();
return rtns;
}
}
[Api(Description = "待开票流水")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class PaymentUnInvoiceAnalysis : RestfulExecution<Payment>
{
public Guid OwnerKvid { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
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));
queryAccount.Select(o => o.Kvid);
var sqlExpress = conn.From<Payment>();
sqlExpress.Where(o =>o.OffsetKvid == Guid.Empty && Sql.In(o.Type, PaymentType.AliPay, PaymentType.WeChat, PaymentType.Split, PaymentType.Cash, PaymentType.Pos));
if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
sqlExpress.And(o => o.AmountInvoice == 0 || o.AmountInvoice < o.Amount);
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.AmountInvoice, o.Amount });
var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Payment>();
rtns.Description = "待开票流水";
if (results.IsNullOrEmpty()) return rtns;
rtns.TotalAmount = results.Sum(o => o.Amount - o.AmountInvoice);
rtns.TotalQuantity = results.Count();
return rtns;
}
}
[Api(Description = "待使用流水")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class PaymentUnUsedAnalysis : RestfulExecution<Payment>
{
public Guid OwnerKvid { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
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));
queryAccount.Select(o => o.Kvid);
var sqlExpress = conn.From<Payment>();
sqlExpress.Where(o =>o.OffsetKvid == Guid.Empty && Sql.In(o.Type, PaymentType.AliPay, PaymentType.WeChat, PaymentType.Split, PaymentType.Cash, PaymentType.Pos));
if (OwnerKvid != Guid.Empty) sqlExpress.And(o => o.OwnerKvid == OwnerKvid);
sqlExpress.And(o => o.AmountUsed == 0 || o.AmountUsed < o.Amount);
sqlExpress.And(o => (Sql.In(o.PayerAccountKvid, queryAccount)));
sqlExpress.Select(o => new { o.AmountUsed, o.Amount });
var results = conn.Select(sqlExpress);
var rtns = new StatisticResponse<Payment>();
rtns.Description = "待使用流水";
if (results.IsNullOrEmpty()) return rtns;
rtns.TotalAmount = results.Sum(o => o.Amount - o.AmountUsed);
rtns.TotalQuantity = results.Count();
return rtns;
}
}
[Api(Description = "已结算未收费")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class SettlementUnPayedAnalysis : RestfulExecution<Settlement>
{
public Guid OwnerKvid { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
var conn = KiviiContext.GetOpenedDbConnection<Settlement>();
var sqlExpress = conn.From<Settlement>();
sqlExpress.Where(o => o.OffsetKvid == Guid.Empty);
sqlExpress.And(o => o.AmountPayment < o.Amount || o.AmountPayment == 0);
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>();
rtns.Description = "已结算未收费";
if (results.IsNullOrEmpty()) return rtns;
rtns.TotalAmount = results.Sum(o => o.Amount - o.AmountPayment);
rtns.TotalQuantity = results.Count();
return rtns;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Kivii.Common" version="5.6.2021.10200" targetFramework="net45" />
<package id="Kivii.Core" version="5.6.2021.10200" targetFramework="net45" />
<package id="Kivii.Linq" version="5.6.2021.10190" targetFramework="net45" />
<package id="Kivii.Common" version="5.6.2022.4000" targetFramework="net45" />
<package id="Kivii.Core" version="5.6.2022.4000" targetFramework="net45" />
<package id="Kivii.Linq" version="5.6.2022.4011" targetFramework="net45" />
</packages>
\ No newline at end of file
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