diff --git a/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs b/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs index 72ed54a9..52bc3231 100644 --- a/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs +++ b/ds-wms-service/DS.Module.Core/Constants/MultiLanguageConst.cs @@ -692,6 +692,9 @@ public static class MultiLanguageConst [Description("请通过用户管理功能设置证件号码后再提交开票")] public const string DrawerIDNumberIsNull = "Drawer_IDNumber_IsNull"; + + [Description("税率不一致,禁止提交")] + public const string InconsistentTaxRates= "Inconsistent_Tax_Rates"; #endregion #region 预订舱API diff --git a/ds-wms-service/DS.WMS.Core/Invoice/Dtos/InvoiceDto.cs b/ds-wms-service/DS.WMS.Core/Invoice/Dtos/InvoiceDto.cs index 84300bbb..cb870a9b 100644 --- a/ds-wms-service/DS.WMS.Core/Invoice/Dtos/InvoiceDto.cs +++ b/ds-wms-service/DS.WMS.Core/Invoice/Dtos/InvoiceDto.cs @@ -168,6 +168,11 @@ namespace DS.WMS.Core.Invoice.Dtos /// public string? TaxID { get; set; } + /// + /// 客户纳税人识别号 + /// + public string? CustomerTaxID { get; set; } + /// /// 客户地址 /// diff --git a/ds-wms-service/DS.WMS.Core/Invoice/Entity/Invoice.cs b/ds-wms-service/DS.WMS.Core/Invoice/Entity/Invoice.cs index 7bd93c2c..9dc039de 100644 --- a/ds-wms-service/DS.WMS.Core/Invoice/Entity/Invoice.cs +++ b/ds-wms-service/DS.WMS.Core/Invoice/Entity/Invoice.cs @@ -158,16 +158,16 @@ namespace DS.WMS.Core.Invoice.Entity public string? TaxID { get; set; } /// - /// 客户地址 + /// 客户纳税人识别号 /// - [SugarColumn(ColumnDescription = "客户地址", Length = 200, IsNullable = true)] - public string? CustomerAddress { get; set; } + [SugarColumn(ColumnDescription = "客户纳税人识别号", Length = 60, IsNullable = true)] + public string? CustomerTaxID { get; set; } /// - /// 客户电话 + /// 客户地址电话 /// - [SugarColumn(ColumnDescription = "客户电话", Length = 20, IsNullable = true)] - public string? CustomerPhone { get; set; } + [SugarColumn(ColumnDescription = "客户地址电话", Length = 200, IsNullable = true)] + public string? CustomerAddressTel { get; set; } /// /// 客户银行名称 diff --git a/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceIssuanceService.cs b/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceIssuanceService.cs index c52fab4c..dd31f7d2 100644 --- a/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceIssuanceService.cs +++ b/ds-wms-service/DS.WMS.Core/Invoice/Method/InvoiceIssuanceService.cs @@ -59,8 +59,8 @@ namespace DS.WMS.Core.Invoice.Method email = x.Email, buyerTaxNum = x.TaxID, buyerName = x.InvoiceHeader, - buyerAddress = x.CustomerAddress, - buyerTel = x.CustomerPhone, + buyerAddress = x.CustomerAddressTel, + buyerTel = "", gmfkhh = x.CustomerBankName, gmfzh = x.CustomerAccount, skyhmc = x.BankName, 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 92e2e886..90b1da59 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 @@ -5,6 +5,7 @@ using DS.WMS.Core.Application.Dtos; using DS.WMS.Core.Application.Entity; using DS.WMS.Core.Application.Method; 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.Sys.Entity; @@ -152,8 +153,6 @@ namespace DS.WMS.Core.Invoice.Method public async Task> SaveAsync(InvoiceRequest request) { var invoice = request.Invoice; - if (invoice.InvoiceDate == default) - invoice.InvoiceDate = DateTime.Now; if (invoice.Currency.IsNullOrEmpty()) invoice.Currency = FeeCurrency.RMB_CODE; @@ -172,14 +171,21 @@ namespace DS.WMS.Core.Invoice.Method if (!result.Succeeded) return DataResult.Failed(result.Message, result.MultiCode); + if (invoice.InvoiceDate == default) + invoice.InvoiceDate = DateTime.Now; + + invoice.OperatorId ??= long.Parse(User.UserId); + //按发票申请 if (request.Applications != null && request.Applications.Count > 0) { var ids = request.Applications.Select(x => x.ApplicationId); var details = await TenantDb.Queryable() .InnerJoin((x, y) => x.ApplicationId == y.Id) - .Where((x, y) => ids.Contains(x.ApplicationId) && x.Category == DetailCategory.InvoiceApplication) - .Select((x, y) => new + .LeftJoin((x, y, z) => y.CustomerId == z.ClientId && z.Currency == invoice.Currency && + z.IsInvoiceDefault.GetValueOrDefault()) + .Where((x, y, z) => ids.Contains(x.ApplicationId) && x.Category == DetailCategory.InvoiceApplication) + .Select((x, y, z) => new { x.Id, x.ApplicationId, @@ -194,26 +200,56 @@ namespace DS.WMS.Core.Invoice.Method x.OriginalCurrency, x.ProcessedAmount, x.OriginalProcessedAmount, - y.CustomerId + + y.CustomerId, + y.TaxRate, + y.TaxID, + y.InvoiceHeader, + y.CustomerAddTel, + y.SaleDeptId, + y.PushMode, + y.CellPhoneNO, + y.Email, + + z.BankAccountNo, + z.BankName }).ToListAsync(); - invoice.Details ??= new List(details.Count); + //税率不一致 + if (details.GroupBy(x => x.TaxRate).Select(x => x.Key).Count() > 1) + return DataResult.FailedWithDesc(nameof(MultiLanguageConst.InvoiceCustomerOnlyOne)); + invoice.Details ??= new List(details.Count); foreach (var item in details) { - if (request.Invoice.CustomerId == 0) + if (invoice.CustomerId == 0) { - request.Invoice.CustomerId = item.CustomerId; - request.Invoice.CustomerName = item.CustomerName; + invoice.CustomerId = item.CustomerId; + invoice.CustomerName = item.CustomerName; + invoice.TaxRate = item.TaxRate; + invoice.InvoiceHeader = item.InvoiceHeader; + invoice.CustomerTaxID = item.TaxID; + invoice.CustomerAddressTel = item.CustomerAddTel; + invoice.CustomerAccount = item.BankAccountNo; + invoice.CustomerBankName = item.BankName; + invoice.SaleDeptId = item.SaleDeptId; + invoice.PushMode = item.PushMode; + invoice.CellPhoneNO = item.CellPhoneNO; + invoice.Email = item.Email; } - else if (request.Invoice.CustomerId != item.CustomerId) //校验开票单位是否一致 + else if (invoice.CustomerId != item.CustomerId) //校验开票单位是否一致 { return DataResult.FailedWithDesc(nameof(MultiLanguageConst.InvoiceCustomerOnlyOne)); } + else if (invoice.TaxRate != item.TaxRate) //校验税率是否一致 + { + return DataResult.FailedWithDesc(nameof(MultiLanguageConst.InconsistentTaxRates)); + } + //需转换为费用明细 var detail = new ApplicationDetail { - ApplicationId = request.Invoice.Id, + ApplicationId = invoice.Id, RefId = item.ApplicationId, DetailId = item.Id, RecordId = item.RecordId, @@ -222,7 +258,7 @@ namespace DS.WMS.Core.Invoice.Method FeeId = item.FeeId, FeeName = item.FeeName, FeeType = item.FeeType, - Currency = FeeCurrency.RMB_CODE, + Currency = invoice.Currency, OriginalCurrency = item.Currency, ApplyAmount = item.ApplyAmount - item.ProcessedAmount, OriginalAmount = item.OriginalAmount - item.OriginalProcessedAmount @@ -250,6 +286,12 @@ namespace DS.WMS.Core.Invoice.Method invoice.CustomerName = first.CustomerName; } + var ids = request.Details.Select(x => x.RecordId).Distinct(); + var fees = await TenantDb.Queryable().Where(x => ids.Contains(x.Id)).Select(x => new { x.Id, x.TaxRate }).ToListAsync(); + //税率不一致 + if (fees.GroupBy(x => x.TaxRate).Select(x => x.Key).Count() > 1 || (invoice.Id > 0 && invoice.TaxRate != fees[0].TaxRate)) + return DataResult.FailedWithDesc(nameof(MultiLanguageConst.InvoiceCustomerOnlyOne)); + //将请求明细转换为数据库的费用明细 invoice.Details = request.Details.Select(x => new ApplicationDetail { @@ -269,6 +311,41 @@ 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; + } + } + + //补充销方信息 + invoice.TaxID = await Db.Queryable().Where(x => x.Id == User.OrgId).Select(x => x.LicenseCode).FirstAsync(); + var orgBank = await Db.Queryable().Where(x => x.LinkId == User.OrgId && x.Currency == invoice.Currency).OrderByDescending(x => x.IsDefault).Select(x => new + { + x.BankAccountNo, + x.BankName + }).FirstAsync(); + if (orgBank != null) + { + invoice.BankName = orgBank.BankName; + invoice.Account = orgBank.BankAccountNo; } if (invoice.Details?.Count > 0) @@ -301,9 +378,8 @@ namespace DS.WMS.Core.Invoice.Method //创建时需要生成申请单编号 var sequence = CommonService.Value.GetSequenceNext(); if (!sequence.Succeeded) - { return DataResult.Failed(sequence.Message, MultiLanguageConst.SequenceSetNotExist); - } + invoice.BillNO = sequence.Data; //关联导航属性插入 await TenantDb.InsertNav(invoice).Include(x => x.Details).ExecuteCommandAsync(); @@ -313,25 +389,20 @@ namespace DS.WMS.Core.Invoice.Method buildOption = BuildOption.Update; await TenantDb.Updateable(invoice).UpdateColumns(x => new { - x.InvoiceNO, x.InvoiceDate, - x.Account, - x.BankName, - //x.Currency, x.ReceiptCurrency, - x.CustomerId, - x.CustomerName, x.AutualCustomerName, - x.InvoiceHeader, - x.CustomerAddress, - x.CustomerPhone, - x.CustomerBankName, - x.CustomerAccount, x.OperatorId, - x.TaxID, - x.TaxRate, - x.OrgId, - x.SaleDeptId + x.SaleDeptId, + x.Category, + x.CategoryCode, + x.IsOverseasInvoice, + x.Payee, + x.Checker, + x.PushMode, + x.CellPhoneNO, + x.Email, + x.Note }).ExecuteCommandAsync(); if (invoice.Details?.Count > 0) 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 a6b9dd3a..e62cf9a9 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 - False|2024-09-19T06:15:42.9318446Z||;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-08-09T09:18:05.8484398+08:00||;True|2024-08-09T08:45:38.7858906+08:00||;True|2024-08-05T11:37:07.3133020+08:00||;True|2024-07-24T16:45:58.2272340+08:00||;True|2024-07-24T15:48:52.0128987+08:00||;True|2024-07-23T17:41:01.7494842+08:00||;True|2024-07-23T17:25:11.8773492+08:00||;True|2024-07-23T17:07:16.5460273+08:00||;True|2024-07-22T08:59:23.3235603+08:00||;True|2024-07-12T17:35:11.1225017+08:00||;True|2024-07-11T11:40:17.3581147+08:00||;True|2024-07-04T17:20:50.0175739+08:00||;True|2024-07-02T11:26:14.2092751+08:00||;True|2024-07-02T09:21:51.3513605+08:00||;True|2024-07-01T17:47:56.0407256+08:00||;True|2024-07-01T16:42:55.7374984+08:00||;True|2024-07-01T15:49:58.9266967+08:00||;True|2024-07-01T14:35:48.1117178+08:00||;True|2024-07-01T11:41:52.2969338+08:00||;True|2024-07-01T11:13:02.6561160+08:00||;True|2024-06-28T15:28:43.1470725+08:00||;True|2024-06-28T15:16:20.1999596+08:00||;True|2024-06-28T15:14:56.2534743+08:00||;True|2024-06-28T15:02:41.3033806+08:00||;True|2024-06-28T13:37:28.2462742+08:00||;True|2024-06-28T11:06:30.7400535+08:00||;True|2024-06-26T15:24:17.1939896+08:00||;True|2024-06-26T14:33:06.3530466+08:00||;True|2024-06-26T09:45:24.4055568+08:00||;True|2024-06-25T15:45:57.6052473+08:00||;True|2024-06-25T10:17:17.7408916+08:00||;False|2024-06-25T10:16:23.5639654+08:00||;False|2024-06-25T10:15:28.3857721+08:00||;False|2024-06-25T10:10:59.5536995+08:00||;False|2024-06-25T10:07:10.4050937+08:00||;True|2024-06-24T15:22:18.2672769+08:00||;True|2024-06-24T15:01:04.8153621+08:00||;False|2024-06-24T15:00:29.9618848+08:00||;True|2024-06-24T14:07:19.9401637+08:00||;False|2024-06-24T14:06:36.1250570+08:00||;True|2024-06-21T15:13:57.4273503+08:00||;True|2024-06-21T15:04:37.8218608+08:00||;True|2024-06-21T14:12:48.0266638+08:00||;True|2024-06-21T13:52:30.0950155+08:00||;True|2024-06-20T11:02:42.9508506+08:00||;True|2024-06-19T11:43:01.1899282+08:00||;True|2024-06-19T11:23:01.2938141+08:00||;True|2024-06-18T08:51:21.6222152+08:00||;True|2024-06-17T09:20:35.0804494+08:00||;True|2024-06-17T08:41:58.1319484+08:00||;True|2024-06-17T08:38:09.0137102+08:00||;True|2024-06-14T15:19:45.7395180+08:00||;True|2024-06-14T14:38:49.7094421+08:00||;True|2024-06-14T14:27:39.2815370+08:00||;True|2024-06-14T09:42:21.5397525+08:00||;True|2024-06-13T16:03:39.8475642+08:00||;True|2024-06-13T14:12:10.1725629+08:00||;True|2024-06-13T10:46:52.6971321+08:00||;True|2024-06-11T17:03:44.8328978+08:00||;True|2024-06-06T17:41:51.1810315+08:00||;True|2024-06-06T10:57:27.8273617+08:00||;True|2024-06-04T14:23:21.3742450+08:00||;True|2024-05-31T17:01:42.4717460+08:00||;True|2024-05-31T13:56:03.0734064+08:00||;True|2024-05-31T08:45:52.3549394+08:00||; + True|2024-09-19T08:08:21.7225571Z||;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-08-09T09:18:05.8484398+08:00||;True|2024-08-09T08:45:38.7858906+08:00||;True|2024-08-05T11:37:07.3133020+08:00||;True|2024-07-24T16:45:58.2272340+08:00||;True|2024-07-24T15:48:52.0128987+08:00||;True|2024-07-23T17:41:01.7494842+08:00||;True|2024-07-23T17:25:11.8773492+08:00||;True|2024-07-23T17:07:16.5460273+08:00||;True|2024-07-22T08:59:23.3235603+08:00||;True|2024-07-12T17:35:11.1225017+08:00||;True|2024-07-11T11:40:17.3581147+08:00||;True|2024-07-04T17:20:50.0175739+08:00||;True|2024-07-02T11:26:14.2092751+08:00||;True|2024-07-02T09:21:51.3513605+08:00||;True|2024-07-01T17:47:56.0407256+08:00||;True|2024-07-01T16:42:55.7374984+08:00||;True|2024-07-01T15:49:58.9266967+08:00||;True|2024-07-01T14:35:48.1117178+08:00||;True|2024-07-01T11:41:52.2969338+08:00||;True|2024-07-01T11:13:02.6561160+08:00||;True|2024-06-28T15:28:43.1470725+08:00||;True|2024-06-28T15:16:20.1999596+08:00||;True|2024-06-28T15:14:56.2534743+08:00||;True|2024-06-28T15:02:41.3033806+08:00||;True|2024-06-28T13:37:28.2462742+08:00||;True|2024-06-28T11:06:30.7400535+08:00||;True|2024-06-26T15:24:17.1939896+08:00||;True|2024-06-26T14:33:06.3530466+08:00||;True|2024-06-26T09:45:24.4055568+08:00||;True|2024-06-25T15:45:57.6052473+08:00||;True|2024-06-25T10:17:17.7408916+08:00||;False|2024-06-25T10:16:23.5639654+08:00||;False|2024-06-25T10:15:28.3857721+08:00||;False|2024-06-25T10:10:59.5536995+08:00||;False|2024-06-25T10:07:10.4050937+08:00||;True|2024-06-24T15:22:18.2672769+08:00||;True|2024-06-24T15:01:04.8153621+08:00||;False|2024-06-24T15:00:29.9618848+08:00||;True|2024-06-24T14:07:19.9401637+08:00||;False|2024-06-24T14:06:36.1250570+08:00||;True|2024-06-21T15:13:57.4273503+08:00||;True|2024-06-21T15:04:37.8218608+08:00||;True|2024-06-21T14:12:48.0266638+08:00||;True|2024-06-21T13:52:30.0950155+08:00||;True|2024-06-20T11:02:42.9508506+08:00||;True|2024-06-19T11:43:01.1899282+08:00||;True|2024-06-19T11:23:01.2938141+08:00||;True|2024-06-18T08:51:21.6222152+08:00||;True|2024-06-17T09:20:35.0804494+08:00||;True|2024-06-17T08:41:58.1319484+08:00||;True|2024-06-17T08:38:09.0137102+08:00||;True|2024-06-14T15:19:45.7395180+08:00||;True|2024-06-14T14:38:49.7094421+08:00||;True|2024-06-14T14:27:39.2815370+08:00||;True|2024-06-14T09:42:21.5397525+08:00||;True|2024-06-13T16:03:39.8475642+08:00||;True|2024-06-13T14:12:10.1725629+08:00||;True|2024-06-13T10:46:52.6971321+08:00||;True|2024-06-11T17:03:44.8328978+08:00||;True|2024-06-06T17:41:51.1810315+08:00||;True|2024-06-06T10:57:27.8273617+08:00||;True|2024-06-04T14:23:21.3742450+08:00||;True|2024-05-31T17:01:42.4717460+08:00||;True|2024-05-31T13:56:03.0734064+08:00||; \ No newline at end of file