From 815baf45d5a88cc0edc113baf2eed44766725d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Thu, 17 Apr 2025 08:55:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E5=8D=88=E8=AE=A9=E6=8A=8ABBACJIT=20?= =?UTF-8?q?=20asn=E5=BC=80=E7=A5=A8=E5=8F=98=E6=9B=B4=E4=B8=BA=E9=9B=B6?= =?UTF-8?q?=E4=BB=B6=E5=BC=80=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SettleAccount.HttpApi.Host/Program.cs | 1 + .../appsettings.json | 3 +- .../Bases/CAN_SA_SERVICE.cs | 2 +- .../Entities/BQ/PUB_CAN_SA_SERVICE.cs | 6 +- .../Entities/BQ/Managers/INV_MNG.cs | 341 +++++++++++++++++- .../SettleAccountEntityFrameworkCoreModule.cs | 2 +- 6 files changed, 337 insertions(+), 18 deletions(-) diff --git a/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/Program.cs b/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/Program.cs index 8da74465..b8032103 100644 --- a/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/Program.cs +++ b/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/Program.cs @@ -20,6 +20,7 @@ namespace Win.Sfs.SettleAccount Log.Logger = new LoggerConfiguration() .WriteTo.Async(c => c.Console()) .WriteTo.Async(c => c.File("../Logs/logs.txt" + , rollingInterval: RollingInterval.Day , rollOnFileSizeLimit: true , fileSizeLimitBytes: 30 * 1024 * 1024)) diff --git a/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/appsettings.json b/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/appsettings.json index c6c08c43..7f87d175 100644 --- a/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/appsettings.json +++ b/code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/appsettings.json @@ -5,8 +5,7 @@ "ConnectionStrings": { "Default": "Server=dev.ccwin-in.com,13326;Database=BJABP;User ID=sa;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True", "SettleAccountService": "Server=dev.ccwin-in.com,13326;Database=BQ_SA;User ID=sa;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True;", - "ExChangeCenterService": "Server=dev.ccwin-in.com,13326;Database=ExchangeCenter;User ID=sa;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True;", - "WMSBJBMPT": "Server=dev.ccwin-in.com,13326;Database=ExchangeCenter;User ID=sa;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True;" + "ExChangeCenterService":"Server=dev.ccwin-in.com,13326;Database=BQ_SA;User ID=sa;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True;" //"WMSBJBMPT": "Server=WIN-33SNP5V4K0L,1433;Database=WMS_BJBMPT_2;User ID=sa;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True;" diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/CAN_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/CAN_SA_SERVICE.cs index 7ae323ba..2af364c7 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/CAN_SA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/CAN_SA_SERVICE.cs @@ -231,7 +231,7 @@ namespace Win.Sfs.SettleAccount.Bases invlist = await _invmng.MakeInvoice(p_list, p_adjlist, dtos, p_version, p_invGroupNum, string.Empty, businessType, true).ConfigureAwait(false); break; case EnumBusinessType.ZhiGongJianBBAC: - invlist = await _invmng.FirstInvoice(p_list, p_adjlist, dtos, p_notlist, p_version, p_invGroupNum, string.Empty, businessType).ConfigureAwait(false);//重开可以变多张发票 + invlist = await _invmng.BBACJitFirstInvoice(p_list, p_adjlist, dtos, p_notlist, p_version, p_invGroupNum, string.Empty, businessType).ConfigureAwait(false);//重开可以变多张发票 break; case EnumBusinessType.ZhiGongJianHBPO: invlist = await _invmng.FirstInvoice(p_list, p_adjlist, dtos, p_notlist, p_version, p_invGroupNum, string.Empty, businessType).ConfigureAwait(false);//重开可以变多张发票 diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_CAN_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_CAN_SA_SERVICE.cs index 6214819b..4e0cbb8a 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_CAN_SA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_CAN_SA_SERVICE.cs @@ -1,3 +1,4 @@ + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -128,7 +129,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ priceList.Add(new PriceList() { LU = itm.LU, BeginTime = itm.BeginDate, EndTime = itm.EndDate, Price = itm.Price, ClientCode = "1041", ContractNo = itm.ContractNo }); } } - break; default: priceList = _priceRepository.Where(p => p.IsCancel == false && p.ClientCode == main.Site).ToList();//价格单 @@ -185,10 +185,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ entitys = entitys.OrderBy(p => p.IndexNum).ToList(); var dto1s = ObjectMapper.Map, List>(entitys); - - - - var q = from d in dto1s join p in priceList diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs index a591a91a..59523d72 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs @@ -1038,6 +1038,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers { smalllist.Add(itm); } + } var groupList = new List(); var notDetialList = new List(); @@ -1600,13 +1601,26 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers - + /// + /// + /// + /// + /// 所有实体 + /// + /// 有价格dto + /// + /// + /// + /// + /// + /// [UnitOfWork(false)] - public async Task> FirstInvoice(List p_list, List p_adjlist, List dtos, List p_notlist, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType) + + public async Task> BBACJitFirstInvoice(List p_list, List p_adjlist, List dtos, List p_notlist, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType) where TDetail : SA_CAN_BASE { List _invls = new List(); - var _query = dtos.GroupBy(p => new { p.GroupNum }).Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => itm.Amt) }); + var _query = dtos.GroupBy(p => new { p.PartCode }).Select(p => new { GroupNum = p.Key.PartCode, Amt = p.Sum(itm => itm.Amt) }); Dictionary dic = new Dictionary();//原本 Dictionary copyDic = new Dictionary();//变换数组副本 foreach (var itm in _query.ToList()) @@ -1634,7 +1648,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers invoiceGroupNumList.Add(itm.Key); continue; } - sum += _itm1.Value; if (sum > 10000000) { @@ -1652,9 +1665,294 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers { int count = 1; + foreach (var _itm1 in copyDic) + { + if (itm.Key == _itm1.Key)//相同结算分组项不计算,已初始化 + { + invoiceGroupNumList.Add(itm.Key); + continue; + } - + if (count > 14) + { + break; + } + sum += _itm1.Value; + if (sum > 10000000) + { + break; + } + invoiceGroupNumList.Add(_itm1.Key);//所有条件都满足添加发票和结算分组对应关系 + count++; + + } + invoiceMap.Add(invoiceBillNum, invoiceGroupNumList);//记录发票对应关系 + foreach (var rem in invoiceGroupNumList)//移除 + { + copyDic.Remove(rem); + } + } + } + } + if (invoiceMap.Keys.Count > 0) + { + var groupList = new List(); + var notDetialList = new List(); + var detailList = new List(); + var invlist = new List(); + var salist = new List(); + var adjlist = new List(); + List lsby = new List(); + var grouplist = p_list.Select(p => p.PartCode).Distinct().ToList();//可结分组 + lsby.AddRange(grouplist); + var nolist = p_notlist.Where(p => !grouplist.Contains(p.GroupNum)).Select(p => p.GroupNum).ToList();//不可结分组 + int count = invoiceMap.Keys.Count;//计算第几张发票计数器 + + int i = 1; + foreach (var itm in invoiceMap)//分组影响和 + { + var key = itm.Key;//发票票号 + var ls = itm.Value;//结算分组号列表 + //反向查找结算数据 + var invdetails = p_list.Where(p => ls.Contains(p.PartCode)).ToList(); + foreach (var detail in invdetails) + { + detail.InvbillNum = key; + salist.Add(detail); + } + if (!string.IsNullOrEmpty(p_parentInvBillNum)) + { + //反向查找调整数据 + var adjdetails = p_adjlist.Where(p => ls.Contains(p.GroupNum)).ToList(); + foreach (var detail in adjdetails) + { + detail.InvBillNum = key; + adjlist.Add(detail); + } + } + var detailDtos = dtos.Where(p => ls.Contains(p.PartCode)).GroupBy(p => new { p.InvGroupNum, p.PartCode, p.Price, p.BeginDate, p.EndDate, p.ContractDocID, p.LU })//明细 + .Select(itm => new + { + PartCode = itm.Key.PartCode, + InvGroupNum = itm.Key.InvGroupNum, + LU = itm.Key.LU, + ContactDocID = itm.Key.ContractDocID, + Price = itm.Key.Price, + Amt = Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2), + Tax = Math.Round(Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2) * 0.13m, 2),//税 + TaxAmt = Math.Round(Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2) * 0.13m, 2) + Math.Round(itm.Sum(k => k.Qty) * itm.Key.Price, 2),//税后进 + + Qty = itm.Sum(k => k.Qty), + BeginDate = itm.Key.BeginDate, + EndDate = itm.Key.EndDate + }).ToList(); + decimal amt = detailDtos.Sum(k => k.Amt);//金额 + decimal txtAmt = detailDtos.Sum(k => k.TaxAmt);//税后金额 + decimal realAmt = detailDtos.Sum(k => k.Tax);//税额 + + var mapList = new List(); + foreach (var groupnum in ls) + { + mapList.Add(new INVOICE_MAP_GROUP( + guid: GuidGenerator.Create(), + version: p_version, + invbillNum: key, + invGroupNum: p_InvGroupNum, + settleGroupNum: groupnum, + amt: 0, + extend1: string.Empty, + extend2: string.Empty + ) + ); + } + if (mapList.Count > 0) + { + groupList.AddRange(mapList); + } + List _entityDetailList = new List(); + foreach (var detail in detailDtos) + { + _entityDetailList.Add( + new INVOICE_WAIT_DETAIL( + guid: GuidGenerator.Create(), + version: p_version, + invbillNum: key, + invGroupNum: p_InvGroupNum, + lU: detail.LU, + qty: detail.Qty, + bussiessType: businessType, + amt: detail.Amt, + pRICE: detail.Price, + extend1: detail.ContactDocID, + extend2: string.Empty, + beginDate: detail.BeginDate, + endDate: detail.EndDate, + partcode: detail.PartCode + )); + } + if (_entityDetailList.Count > 0) + { + detailList.AddRange(_entityDetailList); + } + var innotls = new List(); + var sq = dtos.Where(p => itm.Value.Contains(p.PartCode)).GroupBy(p => new { p.LU, p.GroupNum }) + .Select(p => new { version = p_version, LU = p.Key.LU, Qty = p.Sum(itm => itm.Qty), InvBillNum = itm.Key, GroupNum = p.Key.GroupNum }); + + foreach (var sitm in sq) + { + innotls.Add(new INVOICE_NOT_SETTLE( + guid: GuidGenerator.Create(), + version: p_version, + invGroupNum: p_InvGroupNum, + settleGroupNum: sitm.GroupNum, + lU: sitm.LU, + lU1: sitm.LU, + extend1: "可结算", + extend2: string.Empty, + qty: sitm.Qty, + p_invbillnum: itm.Key + )); + } + if (innotls.Count > 0) + { + notDetialList.AddRange(innotls); + } + if (p_notlist != null && p_notlist.Count > 0) + { + var innotls1 = new List(); + var groupnum = itm.Value; + if (count == i)//最后一张发票追加 + { + groupnum.AddRange(nolist);//追加完全不可结 + } + var notls = p_notlist.GroupBy(p => new { p.GroupNum, p.LU }) + .Select(p => new { GroupNum = p.Key.GroupNum, LU = p.Key.LU, Qty = p.Sum(itm => itm.Qty), InvBillNum = itm.Key }); + foreach (var nitm in notls) + { + innotls1.Add(new INVOICE_NOT_SETTLE( + guid: GuidGenerator.Create(), + version: p_version, + invGroupNum: p_InvGroupNum, + settleGroupNum: nitm.GroupNum, + lU: nitm.LU, + lU1: nitm.LU, + extend1: "不可结算", + extend2: string.Empty, + qty: nitm.Qty, + p_invbillnum: itm.Key + )); + } + if (innotls.Count > 0) + { + notDetialList.AddRange(innotls1); + } + } + var invbill = new INVOICE_GRP + (guid: GuidGenerator.Create(), + realnvBillNum: string.Empty, + invbillNum: key, + amt: amt, + taxAmt: txtAmt, + fileName: string.Empty, + businessType: businessType, + invGroupNum: p_InvGroupNum, + state: SettleBillState.已开票, + invoiceBillState: InvoiceBillState.正常, + tax: 0.13m, + parent: !string.IsNullOrEmpty(p_parentInvBillNum)?p_parentInvBillNum:string.Empty, + preTaxDiff: 0, + taxDiff: 0, + clientCode: string.Empty, + realAmt: realAmt + + ); + string site = dtos.Where(p => !string.IsNullOrEmpty(p.Site)).FirstOrDefault().Site; + string clientCode = string.Empty; + switch (site) + { + case "1040": + clientCode = "C001"; + break; + case "1046": + clientCode = "C171"; + break; + default: + clientCode = "C004"; + break; + } + invbill.ClientCode = clientCode; + invbill.Site = dtos.FirstOrDefault().Site; + invbill.CreationTime =DateTime.MinValue; + invbill.LastModificationTime = DateTime.Now; + invlist.Add(invbill); + i++; + } + //using (var transaction = _repository.DbContext.Database.BeginTransaction()) + //{ + // try + // { + // 执行批量数据操作 + if (salist.Count > 0) + { + await _repository.DbContext.BulkUpdateAsync(salist).ConfigureAwait(false); + } + await _repository.DbContext.BulkInsertAsync(invlist).ConfigureAwait(false); + await _repository.DbContext.BulkInsertAsync(groupList).ConfigureAwait(false); + await _repository.DbContext.BulkInsertAsync(detailList).ConfigureAwait(false); + if (adjlist.Count > 0) + { + await _repository.DbContext.BulkInsertAsync(adjlist).ConfigureAwait(false); + } + if (notDetialList.Count > 0) + { + await _repository.DbContext.BulkInsertAsync(notDetialList).ConfigureAwait(false); + } + // 提交事务 + // transaction.Commit(); + // } + // catch (Exception) + // { + // // 回滚事务 + // transaction.Rollback(); + // throw; + // } + //} + _invls = invlist.Select(p => p.InvbillNum).ToList(); + } + return _invls; + } + + + + [UnitOfWork(false)] + public async Task> FirstInvoice(List p_list, List p_adjlist, List dtos, List p_notlist, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType) + where TDetail : SA_CAN_BASE + { + List _invls = new List(); + + var _query = dtos.GroupBy(p => new { p.GroupNum }).Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => itm.Amt) }); + + Dictionary dic = new Dictionary();//原本 + Dictionary copyDic = new Dictionary();//变换数组副本 + foreach (var itm in _query.ToList()) + { + dic.Add(itm.GroupNum, itm.Amt); + copyDic.Add(itm.GroupNum, itm.Amt); + } + Dictionary> invoiceMap = new Dictionary>(); + var first = p_list.FirstOrDefault(); + foreach (var itm in dic) + { + string invoiceBillNum = OrderNumberGenerator.GenerateOrderNumber("INV"); + List invoiceGroupNumList = new List();//每个发票对应的结算分组号 + List List = new List(); + decimal sum = itm.Value;//初始分组合计金额 + // List luList = dtos.Where(p => p.GroupNum == itm.Key).Select(p => p.LU).Distinct().ToList(); //初始LU种类 + if (copyDic.ContainsKey(itm.Key) == true)//是否存在分组 + { + if (first.BusinessType == EnumBusinessType.JisBBAC || first.BusinessType == EnumBusinessType.ZhiGongJianHBPO || first.BusinessType == EnumBusinessType.ZhiGongJianBBAC) + { foreach (var _itm1 in copyDic) { if (itm.Key == _itm1.Key)//相同结算分组项不计算,已初始化 @@ -1663,14 +1961,36 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers continue; } - + sum += _itm1.Value; + if (sum > 10000000) + { + break; + } + invoiceGroupNumList.Add(_itm1.Key);//所有条件都满足添加发票和结算分组对应关系 + } + invoiceMap.Add(invoiceBillNum, invoiceGroupNumList);//记录发票对应关系 + foreach (var rem in invoiceGroupNumList)//移除 + { + copyDic.Remove(rem); + } + } + else + { + int count = 1; + foreach (var _itm1 in copyDic) + { + if (itm.Key == _itm1.Key)//相同结算分组项不计算,已初始化 + { + invoiceGroupNumList.Add(itm.Key); + continue; + } if (count > 14) { break; } - + sum += _itm1.Value; if (sum > 10000000) { @@ -1853,7 +2173,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers state: SettleBillState.已开票, invoiceBillState: InvoiceBillState.正常, tax: 0.13m, - parent: !string.IsNullOrEmpty(p_parentInvBillNum)?p_parentInvBillNum:string.Empty, + parent: !string.IsNullOrEmpty(p_parentInvBillNum) ? p_parentInvBillNum : string.Empty, preTaxDiff: 0, taxDiff: 0, clientCode: string.Empty, @@ -1876,7 +2196,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers } invbill.ClientCode = clientCode; invbill.Site = dtos.FirstOrDefault().Site; - invbill.CreationTime =DateTime.MinValue; + invbill.CreationTime = DateTime.MinValue; invbill.LastModificationTime = DateTime.Now; invlist.Add(invbill); i++; @@ -1916,6 +2236,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers return _invls; } + + + /// /// hbpojis /// diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/EntityFrameworkCore/SettleAccountEntityFrameworkCoreModule.cs b/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/EntityFrameworkCore/SettleAccountEntityFrameworkCoreModule.cs index ef722c22..4c289b9c 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/EntityFrameworkCore/SettleAccountEntityFrameworkCoreModule.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/EntityFrameworkCore/SettleAccountEntityFrameworkCoreModule.cs @@ -79,7 +79,7 @@ namespace Win.Sfs.SettleAccount context.Services.AddTransient(typeof(IBranchEfCoreRepository<,>), typeof(SettleAccountBranchEfCoreRepository<,>)); context.Services.AddTransient(typeof(ISettleAccountBranchEfCoreRepository<,>), - typeof(SettleAccountBranchEfCoreRepository<,>)); + typeof(SettleAccountBranchEfCoreRepository<,>)); //context.Services.AddTransient(typeof(SettleAccountRepository<>)); }