diff --git a/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs b/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs index 8c660154..90d8556c 100644 --- a/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs +++ b/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs @@ -705,6 +705,9 @@ public static class MultiLanguageConst [Description("税率不一致,禁止提交")] public const string InconsistentTaxRates= "Inconsistent_Tax_Rates"; + + [Description("发票或其明细已进入结算流程,请先取消结算后再删除")] + public const string InvoiceIsSettled = "Invoice_Is_Settled"; #endregion #region 预订舱API diff --git a/ds-wms-service/DS.WMS.Core/Application/Dtos/BizOperation.cs b/ds-wms-service/DS.WMS.Core/Application/Dtos/BizOperation.cs index bc2bc811..679644f4 100644 --- a/ds-wms-service/DS.WMS.Core/Application/Dtos/BizOperation.cs +++ b/ds-wms-service/DS.WMS.Core/Application/Dtos/BizOperation.cs @@ -51,6 +51,11 @@ namespace DS.WMS.Core.Application.Dtos /// public long CustomerId { get; set; } + /// + /// 费用对象名称 + /// + public string? CustomerName { get; set; } + /// /// 汇率信息 /// diff --git a/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationServiceBase.cs b/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationServiceBase.cs index 7e58c1bb..ad4cad2b 100644 --- a/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationServiceBase.cs +++ b/ds-wms-service/DS.WMS.Core/Application/Method/ApplicationServiceBase.cs @@ -1,8 +1,7 @@ -using DS.WMS.Core.Application.Dtos; +using System.Linq.Expressions; +using DS.WMS.Core.Application.Dtos; using DS.WMS.Core.Application.Entity; -using DS.WMS.Core.Code.Entity; using DS.WMS.Core.Fee.Entity; -using System.Linq.Expressions; using DS.WMS.Core.Fee.Method; using DS.WMS.Core.Op.Entity; using SqlSugar; @@ -35,8 +34,7 @@ namespace DS.WMS.Core.Application.Method .InnerJoin((d, f) => d.RecordId == f.Id) .LeftJoin((d, f, s) => f.BusinessId == s.Id && f.BusinessType == BusinessType.OceanShippingExport) .WhereIF(expr1 != null, expr1) - .LeftJoin((d, f, s, cs) => s.SourceId == cs.Id) - .Select((d, f, s, cs) => new ApplicationDetailDto + .Select((d, f, s) => new ApplicationDetailDto { //---------------明细表-------------- Id = d.Id, @@ -45,7 +43,6 @@ namespace DS.WMS.Core.Application.Method RefId = d.RefId, RecordId = d.RecordId, FeeType = d.FeeType, - CustomerName = d.CustomerName, FeeId = d.FeeId, FeeName = d.FeeName, Currency = d.Currency, @@ -60,19 +57,19 @@ namespace DS.WMS.Core.Application.Method Amount = f.Amount, AccTaxRate = f.AccTaxRate, CustomerId = f.CustomerId,//费用对象ID + CustomerName = f.CustomerName, OrderAmount = f.OrderAmount, InvoiceAmount = f.InvoiceAmount, SettlementAmount = f.SettlementAmount, OrderSettlementAmount = f.OrderSettlementAmount, OrderInvSettlementAmount = f.OrderInvSettlementAmount, + BusinessId = f.BusinessId, + BusinessType = f.BusinessType, //---------------业务表-------------- - BusinessId = s.Id, - BusinessType = BusinessType.OceanShippingExport, AccountDate = s.AccountDate, CntrTotal = s.CntrTotal, CustomerNo = s.CustomerNo, ClientName = s.CustomerName, //委托单位 - //DischargePort = s.DischargePort, ETD = s.ETD, HBLNO = s.HBLNO, LoadPort = s.LoadPort, @@ -82,8 +79,7 @@ namespace DS.WMS.Core.Application.Method Vessel = s.Vessel,//船名 Voyage = s.Voyno,//航次 BookingNo = s.BookingNo, - //---------------附加表-------------- - SourceName = cs.SourceName + SourceName = s.SourceName }); //海运进口 diff --git a/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs b/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs index 35f4f095..fb0bf74e 100644 --- a/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs +++ b/ds-wms-service/DS.WMS.Core/Fee/Interface/IFeeRecordService.cs @@ -15,7 +15,7 @@ public interface IFeeRecordService /// /// /// - Task>> GetListByPageAsync(PageRequest request); + Task>> GetListAsync(PageRequest request); /// /// 根据查询条件获取费用数据 diff --git a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs index 8ed74d29..6240e9b8 100644 --- a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs +++ b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs @@ -42,11 +42,26 @@ namespace DS.WMS.Core.Fee.Method /// /// /// - public async Task>> GetListByPageAsync(PageRequest request) + public async Task>> GetListAsync(PageRequest request) { long UserId = long.Parse(User.UserId); //序列化查询条件 var whereList = request.GetConditionalModels(Db); + + //传递业务查询条件检测 + string? bsId = null; + foreach (var item in whereList) + { + if (item is ConditionalModel conditionModel && string.Equals(conditionModel.FieldName, nameof(FeeRecord.BusinessId), StringComparison.OrdinalIgnoreCase)) + { + bsId = conditionModel.FieldValue; + break; + } + } + //未指定业务ID,返回空 + if (string.IsNullOrEmpty(bsId)) + return DataResult>.Success([]); + var data = await TenantDb.Queryable() .Where(x => x.IsOpen || (!x.IsOpen && x.CreateBy == UserId)) .Where(whereList) diff --git a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeTemplateService.cs b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeTemplateService.cs index c0897132..c2af53cc 100644 --- a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeTemplateService.cs +++ b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeTemplateService.cs @@ -57,7 +57,7 @@ namespace DS.WMS.Core.Fee.Method if (req.Id == 0) { if (tenantDb.Queryable() - .Where(x => x.OpType == req.OpType && x.FeeType == req.FeeType).Any()) + .Where(x => x.OpType == req.OpType && x.FeeType == req.FeeType && x.TemplateName == req.TemplateName).Any()) { return DataResult.Failed("费用模板已存在!", MultiLanguageConst.FeeTemplateExist); } diff --git a/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs b/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs index e9e17bf5..c374e073 100644 --- a/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs +++ b/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs @@ -337,18 +337,6 @@ public class ClientInfoService : ServiceBase, IClientInfoService CreateTime = dtNow, }); - //client.Contacts.Add(new InfoClientContact - //{ - // Name = model.ContactName, - // Address = model.Address, - // Email = model.Email, - // Mobile = model.Phone, - // Tel = model.Tel, - // QQ = model.QQ, - // IsDefault = true, - // OrgId = client.OrgId - //}); - clients.Add(client); } @@ -362,17 +350,14 @@ public class ClientInfoService : ServiceBase, IClientInfoService foreach (var item in client.AccountDates) item.ClientId = client.Id; - - //foreach (var item in client.Contacts) - // item.ClientId = client.Id; } + var tags = clients.Select(x => x.ClientTag).ToList(); + await TenantDb.Fastest().BulkMergeAsync(tags); + var accountDates = clients.SelectMany(x => x.AccountDates).ToList(); await TenantDb.Fastest().BulkMergeAsync(accountDates); - //var contacts = clients.SelectMany(x => x.Contacts).ToList(); - //await TenantDb.Fastest().BulkMergeAsync(contacts); - await TenantDb.Ado.CommitTranAsync(); return DataResult.Success; } diff --git a/ds-wms-service/DS.WMS.Core/Invoice/Method/GeneralInvoiceService.cs b/ds-wms-service/DS.WMS.Core/Invoice/Method/GeneralInvoiceService.cs index 5415fbbf..680a549b 100644 --- a/ds-wms-service/DS.WMS.Core/Invoice/Method/GeneralInvoiceService.cs +++ b/ds-wms-service/DS.WMS.Core/Invoice/Method/GeneralInvoiceService.cs @@ -105,12 +105,15 @@ namespace DS.WMS.Core.Invoice.Method OriginalCurrency = x.OriginalCurrency, //原始币别 ExchangeRate = x.ExchangeRate, //折算汇率 OriginalAmount = x.OriginalAmount, //原始金额 - SaleName = x.SaleName, + CustomerNo = x.CustomerNo, MBLNO = x.MBLNO, + HBLNO = x.HBLNO, + SaleName = x.SaleName, ClientName = x.ClientName, ETD = x.ETD, SourceName = x.SourceName, + AuditTime = y.AuditTime }).ToListAsync(); @@ -146,7 +149,7 @@ namespace DS.WMS.Core.Invoice.Method protected override Task PostSaveAsync(Entity.Invoice invoice) { - return Task.Factory.StartNew(UpdateInvoiceApplications, new List { invoice }); + return RefreshApplicationStatus([invoice], null); } protected override async Task OnDeleteDetailAsync(List invoices, DeleteOption deleteOption) @@ -205,42 +208,59 @@ namespace DS.WMS.Core.Invoice.Method protected override Task PostDeleteAsync(List invoices, DeleteOption deleteOption) { - return Task.Factory.StartNew(UpdateInvoiceApplications, invoices); + ////获取关联的发票申请的ID + //var ids = invoices.SelectMany(x => x.Details).Where(x => x.RefId.HasValue).Select(x => x.RefId.GetValueOrDefault()).Distinct(); + //if (deleteOption == DeleteOption.Entire) + //{ + // return TenantDb.Updateable() + // .SetColumns(x => x.Status == InvoiceApplicationStatus.AuditPassed) + // .Where(x => ids.Contains(x.Id)) + // .ExecuteCommandAsync(); + //} + //else if (deleteOption == DeleteOption.DetailOnly) + //{ + // //获取关联的发票申请的明细ID + // var ids2 = invoices.SelectMany(x => x.Details).Where(x => x.DetailId.HasValue).Select(x => x.DetailId.GetValueOrDefault()).Distinct(); + + //} + + //return Task.CompletedTask; + + return RefreshApplicationStatus(invoices, deleteOption); } //更新发票申请的状态 - void UpdateInvoiceApplications(object? state) + private async Task RefreshApplicationStatus(List invoices, DeleteOption? deleteOption) { - var list = state as IEnumerable; - if (list == null || !list.Any()) + if (invoices == null || !invoices.Any()) return; - var ids = list.SelectMany(x => x.Details).Where(x => x.RefId.HasValue).Select(x => x.RefId.GetValueOrDefault()).Distinct().ToList(); - var appDetails = TenantDb.Queryable().Where(d => ids.Contains(d.ApplicationId)) + //获取关联的发票申请的ID + var ids = invoices.SelectMany(x => x.Details).Where(x => x.RefId.HasValue).Select(x => x.RefId.GetValueOrDefault()).Distinct().ToList(); + var appDetails = await TenantDb.Queryable().Where(d => ids.Contains(d.ApplicationId)) .Select(d => new ApplicationDetail { Id = d.Id, + Category = d.Category, ApplicationId = d.ApplicationId, OriginalAmount = d.OriginalAmount, OriginalProcessedAmount = d.OriginalProcessedAmount - }).ToList(); + }).ToListAsync(); List list2 = new(ids.Count); foreach (var id in ids) { var entity = new InvoiceApplication { Id = id }; - var inv = list.FirstOrDefault(x => x.Details.Any(y => y.RefId == id)); - entity.AcutalInvoiceNO = inv?.InvoiceNO; - var details = appDetails.FindAll(x => x.ApplicationId == id); + if (details.All(x => x.OriginalAmount == x.OriginalAmount - x.OriginalProcessedAmount)) { - entity.Status = InvoiceApplicationStatus.Invoiced; + entity.Status = deleteOption.HasValue ? InvoiceApplicationStatus.AuditPassed : InvoiceApplicationStatus.Invoiced; list2.Add(entity); } else if (details.All(x => x.OriginalAmount - x.OriginalProcessedAmount == 0)) { - entity.Status = InvoiceApplicationStatus.AuditPassed; + entity.Status = deleteOption == null ? InvoiceApplicationStatus.Invoiced : InvoiceApplicationStatus.AuditPassed; list2.Add(entity); } else if (details.Exists(x => x.OriginalAmount != x.OriginalAmount - x.OriginalProcessedAmount)) @@ -250,7 +270,8 @@ namespace DS.WMS.Core.Invoice.Method } } - TenantDb.Updateable(list2).UpdateColumns(x => new { x.Status, x.AcutalInvoiceNO }).ExecuteCommand(); + await TenantDb.Updateable(list2).UpdateColumns(x => new { x.Status }).ExecuteCommandAsync(); } + } } diff --git a/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceService`1.cs b/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceService`1.cs index 57513e11..934eaeb2 100644 --- a/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceService`1.cs +++ b/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceService`1.cs @@ -9,13 +9,11 @@ using DS.WMS.Core.Fee.Entity; using DS.WMS.Core.Info.Entity; using DS.WMS.Core.Invoice.Dtos; using DS.WMS.Core.Invoice.Interface; +using DS.WMS.Core.Settlement.Entity; using DS.WMS.Core.Sys.Entity; using DS.WMS.Core.Sys.Interface; -using LanguageExt.Pretty; using Mapster; -using Masuit.Tools.Models; using Microsoft.Extensions.DependencyInjection; -using Org.BouncyCastle.Asn1.Cmp; using SqlSugar; namespace DS.WMS.Core.Invoice.Method @@ -227,7 +225,8 @@ namespace DS.WMS.Core.Invoice.Method if (invoice.PushModeValues.Length > 0) invoice.PushMode = string.Join(",", invoice.PushModeValues.Select(x => (int)x)); - if (request.Invoice.Mode == InvoiceMode.Applcation && request.Applications != null && request.Applications.Count > 0) //按发票申请开出 + //按申请开票 + if (request.Invoice.Mode == InvoiceMode.Applcation && request.Applications?.Count > 0) { var ids = request.Applications.Select(x => x.ApplicationId); var details = await TenantDb.Queryable() @@ -339,21 +338,36 @@ namespace DS.WMS.Core.Invoice.Method invoice.Details.Add(detail); } + DataResult result2; + //执行开票金额分配 + foreach (var app in request.Applications) + { + var details2 = invoice.Details.Where(x => x.RefId == app.ApplicationId).OrderBy(x => x.ApplyAmount).ToList(); + if (app.AmountRMB.HasValue) + { + result2 = AssignAmount(details2.FindAll(x => x.OriginalCurrency == FeeCurrency.RMB_CODE), app.AmountRMB.Value); + if (!result2.Succeeded) + return DataResult.Failed(result2.Message, result2.MultiCode); + } + + if (app.AmountUSD.HasValue) + { + result2 = AssignAmount(details2.FindAll(x => x.OriginalCurrency == FeeCurrency.USD_CODE), app.AmountUSD.Value); + if (!result2.Succeeded) + return DataResult.Failed(result2.Message, result2.MultiCode); + } - ////执行开票金额分配 - //foreach (var app in request.Applications) - //{ - // var details2 = invoice.Details.Where(x => x.RefId == app.ApplicationId).OrderBy(x => x.ApplyAmount).ToList(); - // if (app.AmountRMB.HasValue) - // { - // var result2 = AssignAmount(details2.FindAll(x => x.OriginalCurrency == FeeCurrency.RMB_CODE), app.AmountRMB.Value); - // if (!result2.Succeeded) - // return DataResult.Failed(result2.Message, result2.MultiCode); - // } + if (app.AmountOther.HasValue) + { + result2 = AssignAmount(details2.FindAll(x => x.OriginalCurrency != FeeCurrency.RMB_CODE && x.OriginalCurrency != FeeCurrency.USD_CODE), app.AmountOther.Value); + if (!result2.Succeeded) + return DataResult.Failed(result2.Message, result2.MultiCode); + } - //} + } } - else if (request.Invoice.Mode == InvoiceMode.Free) //自由开票 + //自由开票 + else if (request.Invoice.Mode == InvoiceMode.Free) { if (request.BizList?.Count > 0) { @@ -409,32 +423,32 @@ namespace DS.WMS.Core.Invoice.Method OriginalAmount = x.OriginalAmount, OriginalCurrency = x.OriginalCurrency ?? (invoice.Currency.IsNullOrEmpty() ? x.Currency : invoice.Currency), }).ToList(); - - //补充购方信息 - invoice.CustomerTaxID = await TenantDb.Queryable().Where(x => x.Id == invoice.CustomerId).Select(x => x.TaxNo).FirstAsync(); - var header = await TenantDb.Queryable().Where(x => x.RelativeId == invoice.CustomerId) - .OrderByDescending(x => x.Id).FirstAsync(); - if (header != null) - { - invoice.InvoiceHeader = header.Header; - invoice.CustomerAddressTel = header.AddressTel; - } - var clientBank = await TenantDb.Queryable().Where(x => x.ClientId == invoice.CustomerId && x.Currency == invoice.Currency) - .OrderByDescending(x => x.IsInvoiceDefault).Select(x => new - { - x.Account, - x.BankName - }).FirstAsync(); - if (clientBank != null) - { - invoice.CustomerAccount = clientBank.Account; - invoice.CustomerBankName = clientBank.BankName; - } } } if (invoice.Id == 0) { + //补充购方信息 + invoice.CustomerTaxID = await TenantDb.Queryable().Where(x => x.Id == invoice.CustomerId).Select(x => x.TaxNo).FirstAsync(); + var header = await TenantDb.Queryable().Where(x => x.RelativeId == invoice.CustomerId) + .OrderByDescending(x => x.Id).FirstAsync(); + if (header != null) + { + invoice.InvoiceHeader = header.Header; + invoice.CustomerAddressTel = header.AddressTel; + } + var clientBank = await TenantDb.Queryable().Where(x => x.ClientId == invoice.CustomerId && x.Currency == invoice.Currency) + .OrderByDescending(x => x.IsInvoiceDefault).Select(x => new + { + x.Account, + x.BankName + }).FirstAsync(); + if (clientBank != null) + { + invoice.CustomerAccount = clientBank.Account; + invoice.CustomerBankName = clientBank.BankName; + } + //补充销方信息 var org = await Db.Queryable().Where(x => x.Id == User.OrgId).Select(x => new { x.OrgFullName, x.LicenseCode }).FirstAsync(); if (org != null) @@ -877,6 +891,10 @@ namespace DS.WMS.Core.Invoice.Method if (invoices.Any(x => !string.IsNullOrEmpty(x.ApiCode))) return DataResult.FailedWithDesc(nameof(MultiLanguageConst.InvoiceIsIssued)); + var ids = invoices.Select(x => x.Id); + if (TenantDb.Queryable().Any(x => ids.Contains(x.RefId.Value) && x.Category == DetailCategory.InvoiceSettlement)) + return DataResult.FailedWithDesc(nameof(MultiLanguageConst.InvoiceIsSettled)); + return DataResult.Success; } @@ -888,12 +906,12 @@ namespace DS.WMS.Core.Invoice.Method /// protected virtual async Task OnDeleteDetailAsync(List invoices, DeleteOption deleteOption) { - var appIds = invoices.Select(x => x.Id); + var ids = invoices.Select(x => x.Id); if (deleteOption == DeleteOption.DetailOnly) { var excludeIds = invoices.SelectMany(x => x.Details).Select(x => x.Id); - var details = await TenantDb.Queryable().Where(x => appIds.Contains(x.ApplicationId) && !excludeIds.Contains(x.Id)) + var details = await TenantDb.Queryable().Where(x => ids.Contains(x.ApplicationId) && !excludeIds.Contains(x.Id)) .Select(x => new ApplicationDetail { Id = x.Id, @@ -919,7 +937,7 @@ namespace DS.WMS.Core.Invoice.Method else if (deleteOption == DeleteOption.Entire) { //删除发票主表则同时删除对应发票明细 - await TenantDb.Deleteable().Where(x => appIds.Contains(x.ApplicationId)).ExecuteCommandAsync(); + await TenantDb.Deleteable().Where(x => ids.Contains(x.ApplicationId)).ExecuteCommandAsync(); } foreach (var item in invoices) diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Dtos/ApplicationSettlementDto.cs b/ds-wms-service/DS.WMS.Core/Settlement/Dtos/ApplicationSettlementDto.cs index 004fe28b..b7222d69 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Dtos/ApplicationSettlementDto.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Dtos/ApplicationSettlementDto.cs @@ -1,6 +1,5 @@ using System.Runtime.Serialization; using DS.WMS.Core.Application.Dtos; -using SqlSugar; namespace DS.WMS.Core.Settlement.Dtos { @@ -161,18 +160,18 @@ namespace DS.WMS.Core.Settlement.Dtos /// /// 结算明细(发票开出/收、付费申请) /// - public List? SettlementDetails { get; set; } + public List? SettlementDetails { get; set; } } /// - /// 付费自由结算返回明细 + /// 自由结算返回明细 /// - public class FreeSettlement + public class FreeSettlementDto : ApplicationSettlementDto { /// /// 结算明细 /// - public new List? Details { get; set; } + public new List? SettlementDetails { get; set; } /// /// 结算金额合计 diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDetailDto.cs b/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDetailGroup.cs similarity index 51% rename from ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDetailDto.cs rename to ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDetailGroup.cs index 9722c288..b30881fc 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDetailDto.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDetailGroup.cs @@ -1,13 +1,12 @@ using System.Runtime.Serialization; -using DS.Module.Core; -using DS.WMS.Core.Op.Entity; +using DS.WMS.Core.Application.Dtos; namespace DS.WMS.Core.Settlement.Dtos { /// - /// 结算明细DTO + /// 结算(分组)明细DTO /// - public class SettlementDetailDto + public class SettlementDetailGroup { /// /// 申请/发票ID @@ -122,85 +121,10 @@ namespace DS.WMS.Core.Settlement.Dtos } /// - /// 付费自由结算明细DTO + /// 结算费用明细DTO /// - public class FreeSettlementDetailDto + public class SettlementDetailDto : ApplicationDetailDto { - /// - /// ID - /// - public long Id { get; set; } - - /// - /// 费用记录ID - /// - public long RecordId { get; set; } - - /// - /// 业务ID - /// - public long BusinessId { get; set; } - - /// - /// 业务类型 - /// - public BusinessType BusinessType { get; set; } - - /// - /// 主提单号 - /// - public string? MBLNO { get; set; } - - /// - /// 分提单号 - /// - public string? HBLNO { get; set; } - - /// - /// 委托编号 - /// - public string? CustomerNo { get; set; } - - /// - /// 委托单位 - /// - public string? ClientName { get; set; } - - /// - /// 开船日期 - /// - public DateTime? ETD { get; set; } - - /// - /// 业务来源 - /// - public string? SourceName { get; set; } - - /// - /// 揽货人 - /// - public string? Sale { get; set; } - - /// - /// 会计期间 - /// - public string? AccountDate { get; set; } - - /// - /// 船名 - /// - public string? Vessel { get; set; } - - /// - /// 航次 - /// - public string? Voyage { get; set; } - - /// - /// 船公司 - /// - public string? Carrier { get; set; } - /// /// 经营单位 /// @@ -211,59 +135,9 @@ namespace DS.WMS.Core.Settlement.Dtos /// public string? CustomNo { get; set; } - /// - /// 客户/费用对象名称 - /// - public string? CustomerName { get; set; } - - /// - /// 费用名称 - /// - public string? FeeName { get; set; } - - /// - /// 费用类型 - /// - public FeeType FeeType { get; set; } - - /// - /// 结算金额 - /// - public decimal ApplyAmount { get; set; } - - /// - /// 币别 - /// - public string Currency { get; set; } - - /// - /// 折算汇率 - /// - public decimal? ExchangeRate { get; set; } - - /// - /// 原始汇率 - /// - public decimal? OriginalRate { get; set; } - - /// - /// 原始币别 - /// - public string OriginalCurrency { get; set; } - - /// - /// 原始金额 - /// - public decimal OriginalAmount { get; set; } - /// /// 更改单 /// public string? ChangeOrder { get; set; } - - /// - /// 备注 - /// - public string? Note { get; set; } } } diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDto.cs b/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDto.cs index 42c1af40..bfc7c50f 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDto.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Dtos/SettlementDto.cs @@ -89,9 +89,14 @@ namespace DS.WMS.Core.Settlement.Dtos public string BillTypeText => BillType.GetDescription(); /// - /// 结算银行账户 + /// 机构银行ID /// - public string? Account { get; set; } + public long? OrgBankId { get; set; } + + /// + /// 机构银行名称账号 + /// + public string? OrgBankName { get; set; } /// /// 结算业务类别 diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Entity/ApplicationSettlement.cs b/ds-wms-service/DS.WMS.Core/Settlement/Entity/ApplicationSettlement.cs index b5752784..585739e4 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Entity/ApplicationSettlement.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Entity/ApplicationSettlement.cs @@ -6,7 +6,7 @@ namespace DS.WMS.Core.Settlement.Entity /// /// 结算表 /// - [SugarTable("application_payment_settlement", TableDescription = "结算表")] + [SugarTable("application_settlement", TableDescription = "结算表")] public class ApplicationSettlement : SettlementBase { /// diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Entity/SettlementBase.cs b/ds-wms-service/DS.WMS.Core/Settlement/Entity/SettlementBase.cs index 464202b1..a38a633f 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Entity/SettlementBase.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Entity/SettlementBase.cs @@ -53,10 +53,10 @@ namespace DS.WMS.Core.Settlement.Entity public decimal Amount { get; set; } /// - /// 结算银行账户 + /// 机构银行账户ID /// - [SugarColumn(ColumnDescription = "结算银行账户", Length = 50, IsNullable = true)] - public string? Account { get; set; } + [SugarColumn(ColumnDescription = "机构银行账户ID", IsNullable = true)] + public long? OrgBankId { get; set; } /// /// 结算业务类别 diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Interface/IApplicationSettlementService.cs b/ds-wms-service/DS.WMS.Core/Settlement/Interface/IApplicationSettlementService.cs index 8226e22e..eb905519 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Interface/IApplicationSettlementService.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Interface/IApplicationSettlementService.cs @@ -29,7 +29,7 @@ namespace DS.WMS.Core.Settlement.Interface /// /// /// - Task>> GetDetailsAsync(PageRequest request); + Task>> GetDetailsAsync(PageRequest request); /// /// 获取付费申请分页列表 diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Interface/IFreeSettlementService.cs b/ds-wms-service/DS.WMS.Core/Settlement/Interface/IFreeSettlementService.cs index 06977c33..7f3426f5 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Interface/IFreeSettlementService.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Interface/IFreeSettlementService.cs @@ -30,20 +30,20 @@ namespace DS.WMS.Core.Settlement.Interface /// /// 结算单ID /// - Task> GetAsync(long id); + Task> GetAsync(long id); /// /// 获取结算明细 /// /// /// - Task> GetDetailsAsync(PageRequest request); + Task> GetDetailsAsync(PageRequest request); /// /// 根据业务编号及类型获取该票业务的币别 /// /// 业务ID与业务类型 /// - Task>> GetCurrenciesAsync(params FeeClient[] items); + Task>> GetCurrenciesAsync(List items); } } diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Method/ApplicationSettlementService.cs b/ds-wms-service/DS.WMS.Core/Settlement/Method/ApplicationSettlementService.cs index 001e1ca8..9fb4a4e0 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Method/ApplicationSettlementService.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Method/ApplicationSettlementService.cs @@ -95,6 +95,14 @@ namespace DS.WMS.Core.Settlement.Method if (model != null) { + if (model.SaleDeptId.HasValue) + model.SaleDeptName = await Db.Queryable().Where(x => x.Id == model.SaleDeptId.Value) + .Select(x => x.OrgName).FirstAsync(); + + if (model.OrgBankId.HasValue) + model.OrgBankName = await TenantDb.Queryable().Where(x => x.Id == model.OrgBankId.Value) + .Select(x => x.BankName + " " + x.BankAccountNo).FirstAsync(); + model.SettlementDetails = await GetSettlementDetails(id); if (model.SettlementDetails.Count > 0) { @@ -117,7 +125,7 @@ namespace DS.WMS.Core.Settlement.Method /// /// /// - protected override async Task> GetSettlementDetails(long id) + protected override async Task> GetSettlementDetails(long id) { var list = await TenantDb.Queryable() .InnerJoin((i, d1) => i.Id == d1.ApplicationId) @@ -125,7 +133,7 @@ namespace DS.WMS.Core.Settlement.Method .Where((i, d1, d2) => d2.ApplicationId == id && d2.Category == DetailCategory.PaidApplication && d1.Category == DetailCategory.ChargeApplication) .GroupBy((i, d1, d2) => i.Id) - .Select((i, d1, d2) => new SettlementDetailDto + .Select((i, d1, d2) => new SettlementDetailGroup { SettlementAmount = SqlFunc.Subqueryable().Where(d3 => d3.ApplicationId == i.Id).Sum(d3 => d3.ApplyAmount), ApplicationNOList = SqlFunc.Subqueryable().Where(a => a.Id == d1.RefId).ToList(a => a.ApplicationNO) @@ -212,10 +220,10 @@ namespace DS.WMS.Core.Settlement.Method /// /// /// - public async Task>> GetDetailsAsync(PageRequest request) + public async Task>> GetDetailsAsync(PageRequest request) { var details = await GetSettlementDetails(request.OtherQueryCondition); - return DataResult>.Success(details); + return DataResult>.Success(details); } /// diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Method/FreeSettlementService.cs b/ds-wms-service/DS.WMS.Core/Settlement/Method/FreeSettlementService.cs index f1c2b5c9..b63484ce 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Method/FreeSettlementService.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Method/FreeSettlementService.cs @@ -187,7 +187,7 @@ namespace DS.WMS.Core.Settlement.Method /// /// 业务ID与业务类型 /// - public async Task>> GetCurrenciesAsync(params FeeClient[] items) + public async Task>> GetCurrenciesAsync(List items) { var bizIds = items.Select(x => x.Id).Distinct(); var types = items.Select(x => x.BusinessType).Distinct(); @@ -205,19 +205,17 @@ namespace DS.WMS.Core.Settlement.Method f.ExchangeRate }).ToListAsync(); - var currencies = list.GroupBy(x => new { x.BusinessId, x.BusinessType, x.CustomerId }).Select(x => new FeeClient + foreach (var item in items) { - Id = x.Key.BusinessId, - BusinessType = x.Key.BusinessType, - CustomerId = x.Key.CustomerId, - ExchangeRates = x.GroupBy(y => y.Currency).Select(y => new CurrencyExchangeRate - { - Currency = y.Key, - ExchangeRate = x.Where(z => z.Currency == y.Key).Select(z => z.ExchangeRate).FirstOrDefault() - }).ToList() - }).ToList(); + item.ExchangeRates = list.Where(x => x.BusinessId == item.Id && x.BusinessType == item.BusinessType && x.CustomerId == item.CustomerId) + .GroupBy(x => x.Currency).Select(x => new CurrencyExchangeRate + { + Currency = x.Key, + ExchangeRate = x.First().ExchangeRate + }).ToList(); + } - return DataResult>.Success(currencies); + return DataResult>.Success(items); } /// @@ -225,56 +223,33 @@ namespace DS.WMS.Core.Settlement.Method /// /// 结算单ID /// - public async Task> GetAsync(long id) + public async Task> GetAsync(long id) { - var model = await TenantDb.Queryable().Select(x => new ApplicationSettlementDto + var model = await TenantDb.Queryable().Select(x => new FreeSettlementDto + { + SettlementTypeName = x.SettlementType.StlName, //结算方式 + CustomerBankName = x.CustomerBank.BankName, + CustomerAccount = x.CustomerBank.Account + }, true).FirstAsync(x => x.Id == id && x.Mode == SettlementMode.FreeSettlement); + + if (model != null) { - Id = x.Id, - ApplicationNO = x.ApplicationNO, //申请编号 - SettlementNO = x.SettlementNO, //结算单号 - CustomerId = x.CustomerId, //结算单位 - CustomerName = x.CustomerName, - Mode = x.Mode, //结算类型 - SettlementDate = x.SettlementDate, //结算日期 - SettlementTypeId = x.SettlementTypeId, //结算方式 - CustomerBankId = x.CustomerBankId, //客户银行 - Account = x.Account, //客户账户 - Currency = x.Currency, //币别 - Amount = x.Amount, //金额 - ExchangeRate = x.ExchangeRate, //汇率 - IsLocked = x.IsLocked, //锁定状态 - SaleDeptId = x.SaleDeptId, //所属分部 - BillType = x.BillType, //单据类型 - Category = x.Category, //业务类别 - LedgerVoucherNO = x.LedgerVoucherNO, //总账凭证号 - RelativeNO = x.RelativeNO, //相关号码 - InvoiceAmount = x.InvoiceAmount, - InvoiceDate = x.InvoiceDate, - InvoiceNO = x.InvoiceNO, - Note = x.Note, //备注 - - AccountAmount = x.AccountAmount, //记账资料 - AccountCurrency = x.AccountCurrency, - AccountRate = x.AccountRate, - PrePayAmount = x.PrePayAmount, //预付支资料 - PrePayCurrency = x.PrePayCurrency, - PrePayRate = x.PrePayRate, - AHSRAmount = x.AHSRAmount, //实收支资料 - AHSRCurrency = x.AHSRCurrency, - AHSRRate = x.AHSRRate, - FinancialAmount = x.FinancialAmount,//财务费用 - FinancialCurrency = x.FinancialCurrency, - FinancialRate = x.FinancialRate, - AdvanceAmount = x.AdvanceAmount, //预收支资料 - AdvanceCurrency = x.AdvanceCurrency, - AdvanceRate = x.AdvanceRate, - }).FirstAsync(x => x.Id == id && x.Mode == SettlementMode.FreeSettlement); - - var templist = await TenantDb.Queryable().Where(x => x.ApplicationId == id).ToListAsync(); - - model.SettlementDetails = templist.Adapt>(); - - return DataResult.Success(model); + if (model.SaleDeptId.HasValue) + model.SaleDeptName = await Db.Queryable().Where(x => x.Id == model.SaleDeptId.Value) + .Select(x => x.OrgName).FirstAsync(); + + if (model.OrgBankId.HasValue) + model.OrgBankName = await TenantDb.Queryable().Where(x => x.Id == model.OrgBankId.Value) + .Select(x => x.BankName + " " + x.BankAccountNo).FirstAsync(); + + model.SettlementDetails = await CreateApplicationDetailQuery((d, f, s) => d.ApplicationId == id) + .Select(x => new SettlementDetailDto + { + + }, true).ToListAsync(); + } + + return DataResult.Success(model); } /// @@ -282,12 +257,12 @@ namespace DS.WMS.Core.Settlement.Method /// /// /// - public async Task> GetDetailsAsync(PageRequest request) + public async Task> GetDetailsAsync(PageRequest request) { - var model = new FreeSettlement(); - model.Details = await TenantDb.Queryable().Where(x => x.ApplicationId == request.OtherQueryCondition && x.Category == DetailCategory.PaidFreeSettlement) + var model = new FreeSettlementDto(); + model.SettlementDetails = await TenantDb.Queryable().Where(x => x.ApplicationId == request.OtherQueryCondition && x.Category == DetailCategory.PaidFreeSettlement) .InnerJoin((d, f) => d.RecordId == f.Id) - .Select((d, f) => new FreeSettlementDetailDto + .Select((d, f) => new SettlementDetailDto { Id = d.Id, RecordId = f.Id, @@ -304,7 +279,7 @@ namespace DS.WMS.Core.Settlement.Method Currency = d.Currency }).ToListAsync(); - var gList = model.Details.GroupBy(x => x.BusinessType); + var gList = model.SettlementDetails.GroupBy(x => x.BusinessType); foreach (var g in gList) { var ids = g.Select(x => x.BusinessId); @@ -342,7 +317,7 @@ namespace DS.WMS.Core.Settlement.Method item.ClientName = biz.ClientName; item.ETD = biz.ETD; item.SourceName = biz.SourceName; - item.Sale = biz.Sale; + item.SaleName = biz.Sale; item.AccountDate = biz.AccountDate; item.Vessel = biz.Vessel; item.Voyage = biz.Voyage; @@ -359,14 +334,14 @@ namespace DS.WMS.Core.Settlement.Method } } - model.SummaryItems = model.Details.GroupBy(x => new { x.FeeType, x.Currency }).Select(x => new SummaryItem + model.SummaryItems = model.SettlementDetails.GroupBy(x => new { x.FeeType, x.Currency }).Select(x => new SummaryItem { FeeType = x.Key.FeeType, Currency = x.Key.Currency, Amount = x.Sum(y => y.ApplyAmount) }).ToList(); - return DataResult.Success(model); + return DataResult.Success(model); } protected override async Task PreSaveAsync(ApplicationSettlement settlement) diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Method/InvoiceSettlementService.cs b/ds-wms-service/DS.WMS.Core/Settlement/Method/InvoiceSettlementService.cs index a040dc73..2984acd7 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Method/InvoiceSettlementService.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Method/InvoiceSettlementService.cs @@ -48,6 +48,10 @@ namespace DS.WMS.Core.Settlement.Method model.SaleDeptName = await Db.Queryable().Where(x => x.Id == model.SaleDeptId.Value) .Select(x => x.OrgName).FirstAsync(); + if (model.OrgBankId.HasValue) + model.OrgBankName = await TenantDb.Queryable().Where(x => x.Id == model.OrgBankId.Value) + .Select(x => x.BankName + " " + x.BankAccountNo).FirstAsync(); + model.SettlementDetails = await GetSettlementDetails(id); if (model.SettlementDetails.Count > 0) { @@ -188,7 +192,7 @@ namespace DS.WMS.Core.Settlement.Method /// /// /// - protected override async Task> GetSettlementDetails(long id) + protected override async Task> GetSettlementDetails(long id) { var list = await TenantDb.Queryable() .InnerJoin((i, d1) => i.Id == d1.ApplicationId) @@ -196,7 +200,7 @@ namespace DS.WMS.Core.Settlement.Method .Where((i, d1, d2) => d2.ApplicationId == id && d2.Category == DetailCategory.InvoiceSettlement && d1.Category == DetailCategory.InvoiceIssuance) .GroupBy((i, d1, d2) => i.Id) - .Select((i, d1, d2) => new SettlementDetailDto + .Select((i, d1, d2) => new SettlementDetailGroup { Id = i.Id, InvoiceApplyAmount = i.ApplyAmount, diff --git a/ds-wms-service/DS.WMS.Core/Settlement/Method/SettlementService`1.cs b/ds-wms-service/DS.WMS.Core/Settlement/Method/SettlementService`1.cs index 1c092ae0..9b2ba878 100644 --- a/ds-wms-service/DS.WMS.Core/Settlement/Method/SettlementService`1.cs +++ b/ds-wms-service/DS.WMS.Core/Settlement/Method/SettlementService`1.cs @@ -1,9 +1,11 @@ -using DS.Module.Core; +using System.Linq.Expressions; +using DS.Module.Core; using DS.Module.Core.Enums; using DS.Module.Core.Extensions; using DS.WMS.Core.Application.Entity; using DS.WMS.Core.Fee.Entity; using DS.WMS.Core.Fee.Method; +using DS.WMS.Core.Op.Entity; using DS.WMS.Core.Settlement.Dtos; using DS.WMS.Core.Settlement.Entity; using DS.WMS.Core.Settlement.Interface; @@ -230,7 +232,7 @@ namespace DS.WMS.Core.Settlement.Method if (doc == null) return DataResult.Failed("结算单据与费用明细不一致"); - var exchange = doc.ExchangeRates?.Find(x => x.Currency == settlement.Currency); + var exchange = doc.ExchangeRates?.Find(x => x.Currency == detail.OriginalCurrency); if (exchange == null) return DataResult.Failed($"未传入结算币别 {settlement.Currency} 与费用原币别 {detail.OriginalCurrency} 之间的汇率信息"); @@ -243,9 +245,11 @@ namespace DS.WMS.Core.Settlement.Method //执行结算费用分配 foreach (var doc in request.Documents) { - var details2 = details1.Where(x => x.RefId == doc.Id).OrderBy(x => x.ApplyAmount).ToList(); + var details2 = settlement.Mode != SettlementMode.FreeSettlement ? + details1.Where(x => x.RefId == doc.Id).OrderBy(x => x.ApplyAmount) : + details1.Where(x => x.BusinessId == doc.Id && x.BusinessType == doc.BusinessType && x.CustomerName == doc.CustomerName).OrderBy(x => x.ApplyAmount); - var rmbDetails = details2.FindAll(x => x.Currency == FeeCurrency.RMB_CODE); + var rmbDetails = details2.Where(x => x.Currency == FeeCurrency.RMB_CODE); var totalRMB = rmbDetails.Sum(x => x.ApplyAmount); doc.SettlementRMB ??= totalRMB; @@ -265,7 +269,7 @@ namespace DS.WMS.Core.Settlement.Method } } - var usdDetails = details2.FindAll(x => x.Currency == FeeCurrency.USD_CODE); + var usdDetails = details2.Where(x => x.Currency == FeeCurrency.USD_CODE); var totalUSD = usdDetails.Sum(x => x.ApplyAmount); doc.SettlementUSD ??= totalUSD; @@ -285,7 +289,7 @@ namespace DS.WMS.Core.Settlement.Method } } - var otherDetails = details2.FindAll(x => x.Currency != FeeCurrency.RMB_CODE && x.Currency != FeeCurrency.USD_CODE); + var otherDetails = details2.Where(x => x.Currency != FeeCurrency.RMB_CODE && x.Currency != FeeCurrency.USD_CODE); var total = rmbDetails.Sum(x => x.ApplyAmount); doc.SettlementOther ??= total; @@ -624,9 +628,80 @@ namespace DS.WMS.Core.Settlement.Method DataResult.Success : DataResult.FailedWithDesc(nameof(MultiLanguageConst.Operation_Failed)); } - protected virtual Task> GetSettlementDetails(long id) + /// + /// 返回针对结算费用明细及其关联业务的查询对象 + /// + /// 关联条件1 + /// 查询对象 + protected virtual ISugarQueryable CreateApplicationDetailQuery( + Expression>? expr1 = null) + { + //海运出口 + var query1 = TenantDb.Queryable() + .InnerJoin((d, f) => d.RecordId == f.Id) + .LeftJoin((d, f, s) => f.BusinessId == s.Id && f.BusinessType == BusinessType.OceanShippingExport) + .WhereIF(expr1 != null, expr1) + .Select((d, f, s) => new SettlementDetailDto + { + //---------------明细表-------------- + Id = d.Id, + ApplicationId = d.ApplicationId, + DetailId = d.DetailId, + RefId = d.RefId, + RecordId = d.RecordId, + FeeType = d.FeeType, + FeeId = d.FeeId, + FeeName = d.FeeName, + Currency = d.Currency, + ApplyAmount = d.ApplyAmount, + ExchangeRate = d.ExchangeRate, + OriginalAmount = d.OriginalAmount, + OriginalCurrency = d.OriginalCurrency, + ProcessedAmount = d.ProcessedAmount, + OriginalProcessedAmount = d.OriginalProcessedAmount, + //---------------费用表-------------- + OriginalRate = f.ExchangeRate, + Amount = f.Amount, + AccTaxRate = f.AccTaxRate, + CustomerId = f.CustomerId,//费用对象ID + CustomerName = f.CustomerName, + OrderAmount = f.OrderAmount, + InvoiceAmount = f.InvoiceAmount, + SettlementAmount = f.SettlementAmount, + OrderSettlementAmount = f.OrderSettlementAmount, + OrderInvSettlementAmount = f.OrderInvSettlementAmount, + BusinessId = f.BusinessId, + BusinessType = f.BusinessType, + Note = f.Note, + //---------------业务表-------------- + AccountDate = s.AccountDate, + CntrTotal = s.CntrTotal, + CustomerNo = s.CustomerNo, + ClientName = s.CustomerName, //委托单位 + ETD = s.ETD, + MBLNO = s.MBLNO, + HBLNO = s.HBLNO, + LoadPort = s.LoadPort, + SaleDeptId = s.SaleDeptId, + SaleName = s.Sale,//揽货人 + Carrier = s.Carrier, + Vessel = s.Vessel,//船名 + Voyage = s.Voyno,//航次 + BookingNo = s.BookingNo, + SourceName = s.SourceName, + Enterprise = s.Enterprise, + CustomNo = s.CustomNo + }); + + //海运进口 + + + return TenantDb.UnionAll(new List> { query1 }); + } + + protected virtual Task> GetSettlementDetails(long id) { - return Task.FromResult(new List()); + return Task.FromResult(new List()); } } diff --git a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs index cf5f9781..cf8014ff 100644 --- a/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs +++ b/ds-wms-service/DS.WMS.Core/TaskPlat/Method/TaskManageService.cs @@ -2077,7 +2077,9 @@ namespace DS.WMS.Core.TaskPlat.Method bc.PROCESS_DATE, bc.PRICE_CALCULATION_DATE }).Distinct(); +#if DEBUG var sql = queryableTemp.ToSqlString(); +#endif result = await queryableTemp.ToQueryPageAsync(querySearch.PageCondition); return result; @@ -2620,9 +2622,9 @@ namespace DS.WMS.Core.TaskPlat.Method s.CntrTotal, }).Distinct(); - +#if DEBUG var sql = queryableTemp.ToSqlString(); - +#endif result = await queryableTemp.ToQueryPageAsync(querySearch.PageCondition); return result; @@ -2723,21 +2725,28 @@ namespace DS.WMS.Core.TaskPlat.Method var taskTypeStr = taskType.ToString(); var taskStatusStr = TaskStatusEnum.Cancel.ToString(); - long? parentId = null; + List? orderParentIdList = null; if (!string.IsNullOrEmpty(queryDto.BusinessNo)) { - var parentIdTemp = await queryable.Context.Queryable().ClearFilter(typeof(IOrgId)).Where(x => x.HBLNO == queryDto.BusinessNo).Select(x => x.ParentId).FirstAsync(); - parentId = parentIdTemp == 0 ? null : parentIdTemp; + orderParentIdList = (await queryable.Context.Queryable() + .ClearFilter(typeof(IOrgId)) + .Where(x => x.ParentId != 0 && x.HBLNO.Contains(queryDto.BusinessNo)) + .Select(x => x.ParentId) + .ToListAsync()) + .Distinct().ToList(); ; } + var isHasOrderParentIdList = orderParentIdList != null; + queryable.Where(whereList) .Where((t, a) => t.STATUS != taskStatusStr && t.Deleted == false) .WhereIF(taskType != null, (t, a) => t.TASK_TYPE == taskTypeStr) - .WhereIF(!string.IsNullOrEmpty(queryDto.BusinessNo), (t, a, bc, s) => ((t.MBL_NO != null && queryDto.BusinessNo == t.MBL_NO) || (s.MBLNO != null && queryDto.BusinessNo == s.MBLNO)) - || queryDto.BusinessNo == s.CustomerNo - || queryDto.BusinessNo == s.BookingNo - || queryDto.BusinessNo == s.CustomerNum - || (parentId != null && s.Id == parentId)) + .WhereIF(!string.IsNullOrEmpty(queryDto.BusinessNo), (t, a, bc, s) => ((!string.IsNullOrEmpty(s.MBLNO) && s.MBLNO.Contains(queryDto.BusinessNo)) || (string.IsNullOrEmpty(s.MBLNO) && t.MBL_NO.Contains(queryDto.BusinessNo))) // 如果订单提单号不为空使用订单提单号查询,否则使用任务上的提单号查询 + || s.CustomerNo.Contains(queryDto.BusinessNo) + || s.BookingNo.Contains(queryDto.BusinessNo) + || s.CustomerNum.Contains(queryDto.BusinessNo) + || t.TASK_NO.Contains(queryDto.BusinessNo) + || (isHasOrderParentIdList == true && orderParentIdList!.Contains(s.Id))) .WhereIF(taskStatLevel == TaskStatLevelEnum.PUBLIC, (t, a) => t.IS_PUBLIC == 1 && t.STATUS == queryDto.Status) .WhereIF(taskStatLevel == TaskStatLevelEnum.PERSON, (t, a) => t.IS_PUBLIC == 0 && (a.UserId == userId) // 2024-8-14 只显示自己需要审批的任务,自己创建的任务不显示,所以去掉t.CreateBy == userId || @@ -2787,25 +2796,31 @@ namespace DS.WMS.Core.TaskPlat.Method var userId = long.Parse(user.UserId); queryable.ClearFilter(typeof(IOrgId)); - long? parentId = null; + List? orderParentIdList = null; var taskTypeStr = taskType.ToString(); var taskStatusStr = TaskStatusEnum.Cancel.ToString(); if (!string.IsNullOrEmpty(queryDto.BusinessNo)) { - var parentIdTemp = await queryable.Context.Queryable().ClearFilter(typeof(IOrgId)).Where(x => x.HBLNO == queryDto.BusinessNo).Select(x => x.ParentId).FirstAsync(); - parentId = parentIdTemp == 0 ? null : parentIdTemp; + orderParentIdList = (await queryable.Context.Queryable() + .ClearFilter(typeof(IOrgId)) + .Where(x => x.ParentId != 0 && x.HBLNO.Contains(queryDto.BusinessNo)) + .Select(x => x.ParentId) + .ToListAsync()) + .Distinct().ToList(); } + var isHasOrderParentIdList = orderParentIdList != null; queryable.Where(whereList) .Where((t, a) => t.STATUS != taskStatusStr && t.Deleted == false) .WhereIF(taskType != null, (t, a) => t.TASK_TYPE == taskTypeStr) - .WhereIF(!string.IsNullOrEmpty(queryDto.BusinessNo), (t, a, s) => ((!string.IsNullOrEmpty(s.MBLNO) && queryDto.BusinessNo == s.MBLNO) || (string.IsNullOrEmpty(s.MBLNO) && queryDto.BusinessNo == t.MBL_NO)) - || queryDto.BusinessNo == s.CustomerNo - || queryDto.BusinessNo == s.CustomerNum - || queryDto.BusinessNo == s.BookingNo - || (parentId != null && s.Id == parentId)) + .WhereIF(!string.IsNullOrEmpty(queryDto.BusinessNo), (t, a, s) => ((!string.IsNullOrEmpty(s.MBLNO) && s.MBLNO.Contains(queryDto.BusinessNo)) || (string.IsNullOrEmpty(s.MBLNO) && t.MBL_NO.Contains(queryDto.BusinessNo))) // 如果订单提单号不为空使用订单提单号查询,否则使用任务上的提单号查询 + || s.CustomerNo.Contains(queryDto.BusinessNo) + || s.CustomerNum.Contains(queryDto.BusinessNo) + || s.BookingNo.Contains(queryDto.BusinessNo) + || t.TASK_NO.Contains(queryDto.BusinessNo) + || (isHasOrderParentIdList == true && orderParentIdList!.Contains(s.Id))) .WhereIF(!string.IsNullOrEmpty(queryDto.PortLoadCode), (t, a, s) => queryDto.PortLoadCode == s.LoadPortCode) .WhereIF(!string.IsNullOrEmpty(queryDto.PortDischargeCode), (t, a, s) => queryDto.PortDischargeCode == s.DischargePortCode) @@ -2913,12 +2928,17 @@ namespace DS.WMS.Core.TaskPlat.Method var userId = long.Parse(user.UserId); var cancelStr = TaskStatusEnum.Cancel.ToString(); - long? parentId = null; + List? orderParentIdList = null; if (!string.IsNullOrEmpty(queryDto.OtherQueryCondition.BusinessNo)) { - var parentIdTemp = await tenantDb.Queryable().ClearFilter(typeof(IOrgId)).Where(x => x.HBLNO == queryDto.OtherQueryCondition.BusinessNo).Select(x => x.ParentId).FirstAsync(); - parentId = parentIdTemp == 0 ? null : parentIdTemp; + orderParentIdList = (await tenantDb.Queryable() + .ClearFilter(typeof(IOrgId)) + .Where(x => x.ParentId != 0 && x.HBLNO.Contains(queryDto.OtherQueryCondition.BusinessNo)) + .Select(x => x.ParentId) + .ToListAsync()) + .Distinct().ToList(); } + var isHasOrderParentIdList = orderParentIdList != null; long[]? portLoadTaskIdList = []; if (!string.IsNullOrEmpty(queryDto.OtherQueryCondition.PortLoadCode)) @@ -2974,11 +2994,12 @@ namespace DS.WMS.Core.TaskPlat.Method .LeftJoin((a, t, s) => t.OUT_BS_NO == s.Id) .Where(whereList) .WhereIF(!string.IsNullOrEmpty(queryDto.OtherQueryCondition.BusinessNo), - (a, t, s) => ((!string.IsNullOrEmpty(s.MBLNO) && queryDto.OtherQueryCondition.BusinessNo == s.MBLNO) || (string.IsNullOrEmpty(s.MBLNO) && queryDto.OtherQueryCondition.BusinessNo == t.MBL_NO)) - || queryDto.OtherQueryCondition.BusinessNo == s.CustomerNo - || queryDto.OtherQueryCondition.BusinessNo == s.BookingNo - || queryDto.OtherQueryCondition.BusinessNo == s.CustomerNum - || (parentId != null && s.Id == parentId)) + (a, t, s) => ((!string.IsNullOrEmpty(s.MBLNO) && s.MBLNO.Contains(queryDto.OtherQueryCondition.BusinessNo)) || (string.IsNullOrEmpty(s.MBLNO) && t.MBL_NO.Contains(queryDto.OtherQueryCondition.BusinessNo))) // 如果订单提单号不为空使用订单提单号查询,否则使用任务上的提单号查询 + || s.CustomerNo.Contains(queryDto.OtherQueryCondition.BusinessNo) + || s.BookingNo.Contains(queryDto.OtherQueryCondition.BusinessNo) + || s.CustomerNum.Contains(queryDto.OtherQueryCondition.BusinessNo) + || t.TASK_NO.Contains(queryDto.OtherQueryCondition.BusinessNo) + || (isHasOrderParentIdList == true && orderParentIdList!.Contains(s.Id))) .WhereIF(!string.IsNullOrEmpty(queryDto.OtherQueryCondition.PortLoadCode), (t, a, s) => queryDto.OtherQueryCondition.PortLoadCode == s.LoadPortCode || portLoadTaskIdList.Contains(t.Id)) .WhereIF(!string.IsNullOrEmpty(queryDto.OtherQueryCondition.PortDischargeCode), (t, a, s) => queryDto.OtherQueryCondition.PortDischargeCode == s.DischargePortCode || portDischargeTaskIdList.Contains(t.Id)) .GroupBy((a, t) => new { t.TASK_TYPE, t.STATUS, a.Status, }) @@ -2989,7 +3010,9 @@ namespace DS.WMS.Core.TaskPlat.Method TStatus = t.STATUS, AStatus = a.Status }); +#if DEBUG var sql2 = underlingQueryable.ToSqlString(); +#endif underlingGroupList = await underlingQueryable.ToListAsync(); #region 下属 @@ -3069,16 +3092,16 @@ namespace DS.WMS.Core.TaskPlat.Method .LeftJoin((t, a, s) => t.OUT_BS_NO == s.Id) .Where(whereList) .Where((t, a) => t.STATUS != cancelStr && t.Deleted == false) - .Where((t, a) => t.IS_PUBLIC == 1 || (t.IS_PUBLIC == 0 && a.Status != null && (a.UserId == userId))) // 2024-8-14 只显示自己需要审批的任务,自己创建的任务不显示,所以去掉t.CreateBy == userId || + .Where((t, a) => t.IS_PUBLIC == 1 || (t.IS_PUBLIC == 0 && a.UserId == userId)) // 2024-8-14 只显示自己需要审批的任务,自己创建的任务不显示,所以去掉t.CreateBy == userId || .WhereIF(!string.IsNullOrEmpty(queryDto.OtherQueryCondition.BusinessNo), - (t, a, s) => ((!string.IsNullOrEmpty(s.MBLNO) && queryDto.OtherQueryCondition.BusinessNo == s.MBLNO) || (string.IsNullOrEmpty(s.MBLNO) && queryDto.OtherQueryCondition.BusinessNo == t.MBL_NO)) - || queryDto.OtherQueryCondition.BusinessNo == s.CustomerNo - || queryDto.OtherQueryCondition.BusinessNo == s.BookingNo - || queryDto.OtherQueryCondition.BusinessNo == s.CustomerNum - || (parentId != null && s.Id == parentId)) + (t, a, s) => ((!string.IsNullOrEmpty(s.MBLNO) && s.MBLNO.Contains(queryDto.OtherQueryCondition.BusinessNo)) || (string.IsNullOrEmpty(s.MBLNO) && t.MBL_NO.Contains(queryDto.OtherQueryCondition.BusinessNo))) // 如果订单提单号不为空使用订单提单号查询,否则使用任务上的提单号查询 + || s.CustomerNo.Contains(queryDto.OtherQueryCondition.BusinessNo) + || s.BookingNo.Contains(queryDto.OtherQueryCondition.BusinessNo) + || s.CustomerNum.Contains(queryDto.OtherQueryCondition.BusinessNo) + || t.TASK_NO.Contains(queryDto.OtherQueryCondition.BusinessNo) + || (isHasOrderParentIdList == true && orderParentIdList!.Contains(s.Id))) .WhereIF(!string.IsNullOrEmpty(queryDto.OtherQueryCondition.PortLoadCode), (t, a, s) => queryDto.OtherQueryCondition.PortLoadCode == s.LoadPortCode || portLoadTaskIdList.Contains(t.Id)) .WhereIF(!string.IsNullOrEmpty(queryDto.OtherQueryCondition.PortDischargeCode), (t, a, s) => queryDto.OtherQueryCondition.PortDischargeCode == s.DischargePortCode || portDischargeTaskIdList.Contains(t.Id)) - .GroupBy((t, a) => new { t.TASK_TYPE, t.STATUS, a.Status, t.IS_PUBLIC }) .Select((t, a) => new TaskGroupTotal() { @@ -3089,8 +3112,9 @@ namespace DS.WMS.Core.TaskPlat.Method //IsExcept = t.IS_EXCEPT, IsPublic = t.IS_PUBLIC }); - +#if DEBUG var sql = queryable.ToSqlString(); +#endif var groupList = await queryable.ToListAsync(); //var exceptList = groupList diff --git a/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs b/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs index fad2a03a..5070c846 100644 --- a/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs +++ b/ds-wms-service/DS.WMS.FeeApi/Controllers/FeeRecordController.cs @@ -34,7 +34,7 @@ namespace DS.WMS.FeeApi.Controllers [Route("GetList")] public async Task>> GetListAsync([FromBody] PageRequest request) { - return await _feeService.GetListByPageAsync(request); + return await _feeService.GetListAsync(request); } /// diff --git a/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentFreeSettlementController.cs b/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentFreeSettlementController.cs index 40db7b12..8cc1530f 100644 --- a/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentFreeSettlementController.cs +++ b/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentFreeSettlementController.cs @@ -53,7 +53,7 @@ namespace DS.WMS.FeeApi.Controllers /// 结算单ID /// [HttpGet, Route("Get")] - public async Task> GetAsync(long id) + public async Task> GetAsync(long id) { return await _service.GetAsync(id); } @@ -65,7 +65,7 @@ namespace DS.WMS.FeeApi.Controllers /// /// 注意!!需要指定结算单ID,通过 OtherQueryCondition 传入 [HttpPost, Route("GetDetails")] - public async Task> GetDetailsAsync(PageRequest request) + public async Task> GetDetailsAsync(PageRequest request) { return await _service.GetDetailsAsync(request); } @@ -88,7 +88,7 @@ namespace DS.WMS.FeeApi.Controllers /// 业务ID与业务类型 /// [HttpPost, Route("GetCurrencies")] - public async Task>> GetCurrenciesAsync([FromBody] FeeClient[] items) + public async Task>> GetCurrenciesAsync([FromBody] List items) { return await _service.GetCurrenciesAsync(items); } diff --git a/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentSettlementController.cs b/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentSettlementController.cs index c54fc3eb..53e34675 100644 --- a/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentSettlementController.cs +++ b/ds-wms-service/DS.WMS.FeeApi/Controllers/PaymentSettlementController.cs @@ -53,7 +53,7 @@ namespace DS.WMS.FeeApi.Controllers /// /// 注意!!若要指定结算单ID,通过 OtherQueryCondition 传入 [HttpPost, Route("GetDetails")] - public async Task>> GetDetailsAsync(PageRequest request) + public async Task>> GetDetailsAsync(PageRequest request) { return await _service.GetDetailsAsync(request); } diff --git a/ds-wms-service/DS.WMS.FeeApi/Program.cs b/ds-wms-service/DS.WMS.FeeApi/Program.cs index 1d2f9e67..36ae7877 100644 --- a/ds-wms-service/DS.WMS.FeeApi/Program.cs +++ b/ds-wms-service/DS.WMS.FeeApi/Program.cs @@ -61,7 +61,7 @@ app.UsePublicMiddlewares(); app.UseHangfireServer(); app.UseJobMiddlewares(); -JobMiddleware.RegisterJob(j => j.GenerateFeesAsync(), Cron.Daily(23, 30)); +//JobMiddleware.RegisterJob(j => j.GenerateFeesAsync(), Cron.Daily(23, 30)); app.Run(); \ No newline at end of file diff --git a/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user b/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user index 19c60b33..be1b0555 100644 --- a/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user +++ b/ds-wms-service/DS.WMS.FeeApi/Properties/PublishProfiles/FolderProfile1.pubxml.user @@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. <_PublishTargetUrl>D:\Publish\DS8\FeeApi - True|2024-10-15T09:39:40.4090324Z||;True|2024-10-15T17:06:43.0181578+08:00||;True|2024-10-15T15:07:38.9601925+08:00||;True|2024-10-12T13:33:32.4412583+08:00||;True|2024-10-11T17:00:54.0916209+08:00||;True|2024-10-11T10:54:50.3307087+08:00||;True|2024-10-11T10:45:07.8181500+08:00||;True|2024-10-11T10:40:44.2066046+08:00||;True|2024-10-11T10:21:25.7226983+08:00||;True|2024-10-11T10:09:05.5257478+08:00||;True|2024-10-10T14:58:29.1228618+08:00||;True|2024-10-10T14:05:59.4501659+08:00||;True|2024-10-10T11:08:58.9765455+08:00||;True|2024-10-08T17:59:07.5583287+08:00||;True|2024-09-27T19:01:59.6945760+08:00||;True|2024-09-27T18:45:48.2812860+08:00||;True|2024-09-27T18:10:25.5697467+08:00||;True|2024-09-27T17:39:06.3169139+08:00||;True|2024-09-27T17:30:14.1043193+08:00||;True|2024-09-27T16:02:09.0703159+08:00||;True|2024-09-27T15:53:05.1789245+08:00||;True|2024-09-27T15:32:52.1934490+08:00||;True|2024-09-27T13:51:24.9197626+08:00||;True|2024-09-27T13:48:17.2817346+08:00||;True|2024-09-27T11:51:46.8193040+08:00||;True|2024-09-27T10:58:33.1059648+08:00||;True|2024-09-27T10:37:35.0336563+08:00||;False|2024-09-27T10:31:52.6302264+08:00||;True|2024-09-26T19:50:15.5513195+08:00||;True|2024-09-26T19:47:14.0781788+08:00||;True|2024-09-26T19:01:26.5428388+08:00||;True|2024-09-26T18:35:28.7455319+08:00||;True|2024-09-26T18:24:30.8084807+08:00||;True|2024-09-26T18:20:47.3005460+08:00||;True|2024-09-26T18:04:39.8012913+08:00||;True|2024-09-26T17:48:13.8526872+08:00||;True|2024-09-26T16:08:20.1746970+08:00||;True|2024-09-26T16:01:01.1501975+08:00||;False|2024-09-26T16:00:34.1516745+08:00||;True|2024-09-26T14:33:03.4007570+08:00||;True|2024-09-25T19:14:27.8906774+08:00||;True|2024-09-25T18:57:40.1435131+08:00||;True|2024-09-25T17:38:44.0915841+08:00||;True|2024-09-25T15:33:58.4630618+08:00||;True|2024-09-25T15:10:31.3022063+08:00||;False|2024-09-25T14:14:40.9640545+08:00||;True|2024-09-25T10:09:32.2558600+08:00||;True|2024-09-25T09:59:17.1525160+08:00||;False|2024-09-25T09:57:58.7265103+08:00||;False|2024-09-25T09:53:36.7732713+08:00||;False|2024-09-24T18:40:10.0166224+08:00||;True|2024-09-24T08:59:56.1995425+08:00||;True|2024-09-23T18:07:54.7222163+08:00||;True|2024-09-23T17:23:57.7568406+08:00||;True|2024-09-23T16:28:49.3169826+08:00||;True|2024-09-23T15:57:31.8052490+08:00||;True|2024-09-23T11:47:21.1445419+08:00||;True|2024-09-23T09:24:36.0732229+08:00||;True|2024-09-21T11:59:19.0549926+08:00||;True|2024-09-21T11:24:32.4451752+08:00||;True|2024-09-21T10:39:11.5297411+08:00||;True|2024-09-20T18:24:31.7827684+08:00||;True|2024-09-19T17:55:53.1666689+08:00||;True|2024-09-19T17:42:47.9061485+08:00||;True|2024-09-19T16:08:21.7225571+08:00||;False|2024-09-19T14:15:42.9318446+08:00||;True|2024-09-19T11:20:03.5567568+08:00||;True|2024-09-18T11:35:18.1509724+08:00||;True|2024-09-18T09:08:59.1152574+08:00||;True|2024-09-14T15:48:22.9374486+08:00||;True|2024-09-14T15:42:19.0503983+08:00||;True|2024-09-14T11:51:53.3339222+08:00||;True|2024-09-14T11:41:38.3542237+08:00||;True|2024-09-14T11:19:13.1037012+08:00||;True|2024-09-13T14:31:12.4598160+08:00||;True|2024-09-13T10:44:56.1241214+08:00||;False|2024-09-13T10:44:26.6088271+08:00||;False|2024-09-13T10:44:06.1615137+08:00||;False|2024-09-13T10:43:19.2432517+08:00||;False|2024-09-13T10:38:18.1663387+08:00||;True|2024-09-06T18:49:17.9435308+08:00||;True|2024-09-06T17:01:39.6646353+08:00||;True|2024-09-06T10:27:36.9990456+08:00||;True|2024-09-06T09:48:23.4236094+08:00||;True|2024-09-05T13:57:23.8452431+08:00||;True|2024-09-05T10:21:34.6675149+08:00||;True|2024-09-05T09:12:44.5610882+08:00||;True|2024-09-04T10:07:38.3707398+08:00||;True|2024-09-04T09:52:47.0574599+08:00||;True|2024-09-03T16:41:23.7516960+08:00||;True|2024-09-03T15:22:31.8718097+08:00||;True|2024-09-03T10:01:09.7656702+08:00||;False|2024-09-03T09:46:46.8956531+08:00||;True|2024-09-02T17:07:41.0268500+08:00||;True|2024-09-02T13:50:22.0203254+08:00||;True|2024-09-02T13:34:23.3441546+08:00||;True|2024-08-30T11:25:14.7431645+08:00||;True|2024-08-29T16:38:26.3491372+08:00||;True|2024-08-29T16:32:31.8580864+08:00||;False|2024-08-29T16:30:41.4763198+08:00||; + True|2024-10-16T06:12:58.1754214Z||;True|2024-10-16T14:08:06.5805581+08:00||;True|2024-10-16T11:55:29.8273176+08:00||;True|2024-10-15T17:39:40.4090324+08:00||;True|2024-10-15T17:06:43.0181578+08:00||;True|2024-10-15T15:07:38.9601925+08:00||;True|2024-10-12T13:33:32.4412583+08:00||;True|2024-10-11T17:00:54.0916209+08:00||;True|2024-10-11T10:54:50.3307087+08:00||;True|2024-10-11T10:45:07.8181500+08:00||;True|2024-10-11T10:40:44.2066046+08:00||;True|2024-10-11T10:21:25.7226983+08:00||;True|2024-10-11T10:09:05.5257478+08:00||;True|2024-10-10T14:58:29.1228618+08:00||;True|2024-10-10T14:05:59.4501659+08:00||;True|2024-10-10T11:08:58.9765455+08:00||;True|2024-10-08T17:59:07.5583287+08:00||;True|2024-09-27T19:01:59.6945760+08:00||;True|2024-09-27T18:45:48.2812860+08:00||;True|2024-09-27T18:10:25.5697467+08:00||;True|2024-09-27T17:39:06.3169139+08:00||;True|2024-09-27T17:30:14.1043193+08:00||;True|2024-09-27T16:02:09.0703159+08:00||;True|2024-09-27T15:53:05.1789245+08:00||;True|2024-09-27T15:32:52.1934490+08:00||;True|2024-09-27T13:51:24.9197626+08:00||;True|2024-09-27T13:48:17.2817346+08:00||;True|2024-09-27T11:51:46.8193040+08:00||;True|2024-09-27T10:58:33.1059648+08:00||;True|2024-09-27T10:37:35.0336563+08:00||;False|2024-09-27T10:31:52.6302264+08:00||;True|2024-09-26T19:50:15.5513195+08:00||;True|2024-09-26T19:47:14.0781788+08:00||;True|2024-09-26T19:01:26.5428388+08:00||;True|2024-09-26T18:35:28.7455319+08:00||;True|2024-09-26T18:24:30.8084807+08:00||;True|2024-09-26T18:20:47.3005460+08:00||;True|2024-09-26T18:04:39.8012913+08:00||;True|2024-09-26T17:48:13.8526872+08:00||;True|2024-09-26T16:08:20.1746970+08:00||;True|2024-09-26T16:01:01.1501975+08:00||;False|2024-09-26T16:00:34.1516745+08:00||;True|2024-09-26T14:33:03.4007570+08:00||;True|2024-09-25T19:14:27.8906774+08:00||;True|2024-09-25T18:57:40.1435131+08:00||;True|2024-09-25T17:38:44.0915841+08:00||;True|2024-09-25T15:33:58.4630618+08:00||;True|2024-09-25T15:10:31.3022063+08:00||;False|2024-09-25T14:14:40.9640545+08:00||;True|2024-09-25T10:09:32.2558600+08:00||;True|2024-09-25T09:59:17.1525160+08:00||;False|2024-09-25T09:57:58.7265103+08:00||;False|2024-09-25T09:53:36.7732713+08:00||;False|2024-09-24T18:40:10.0166224+08:00||;True|2024-09-24T08:59:56.1995425+08:00||;True|2024-09-23T18:07:54.7222163+08:00||;True|2024-09-23T17:23:57.7568406+08:00||;True|2024-09-23T16:28:49.3169826+08:00||;True|2024-09-23T15:57:31.8052490+08:00||;True|2024-09-23T11:47:21.1445419+08:00||;True|2024-09-23T09:24:36.0732229+08:00||;True|2024-09-21T11:59:19.0549926+08:00||;True|2024-09-21T11:24:32.4451752+08:00||;True|2024-09-21T10:39:11.5297411+08:00||;True|2024-09-20T18:24:31.7827684+08:00||;True|2024-09-19T17:55:53.1666689+08:00||;True|2024-09-19T17:42:47.9061485+08:00||;True|2024-09-19T16:08:21.7225571+08:00||;False|2024-09-19T14:15:42.9318446+08:00||;True|2024-09-19T11:20:03.5567568+08:00||;True|2024-09-18T11:35:18.1509724+08:00||;True|2024-09-18T09:08:59.1152574+08:00||;True|2024-09-14T15:48:22.9374486+08:00||;True|2024-09-14T15:42:19.0503983+08:00||;True|2024-09-14T11:51:53.3339222+08:00||;True|2024-09-14T11:41:38.3542237+08:00||;True|2024-09-14T11:19:13.1037012+08:00||;True|2024-09-13T14:31:12.4598160+08:00||;True|2024-09-13T10:44:56.1241214+08:00||;False|2024-09-13T10:44:26.6088271+08:00||;False|2024-09-13T10:44:06.1615137+08:00||;False|2024-09-13T10:43:19.2432517+08:00||;False|2024-09-13T10:38:18.1663387+08:00||;True|2024-09-06T18:49:17.9435308+08:00||;True|2024-09-06T17:01:39.6646353+08:00||;True|2024-09-06T10:27:36.9990456+08:00||;True|2024-09-06T09:48:23.4236094+08:00||;True|2024-09-05T13:57:23.8452431+08:00||;True|2024-09-05T10:21:34.6675149+08:00||;True|2024-09-05T09:12:44.5610882+08:00||;True|2024-09-04T10:07:38.3707398+08:00||;True|2024-09-04T09:52:47.0574599+08:00||;True|2024-09-03T16:41:23.7516960+08:00||;True|2024-09-03T15:22:31.8718097+08:00||;True|2024-09-03T10:01:09.7656702+08:00||;False|2024-09-03T09:46:46.8956531+08:00||;True|2024-09-02T17:07:41.0268500+08:00||;True|2024-09-02T13:50:22.0203254+08:00||;True|2024-09-02T13:34:23.3441546+08:00||;True|2024-08-30T11:25:14.7431645+08:00||; \ No newline at end of file