From 5e9eedfdb0b6176876044a6dc0b26ca0a6817d7a Mon Sep 17 00:00:00 2001 From: zhaoxinyu <89237069@qq.com> Date: Mon, 6 May 2024 11:13:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AuthServer.Host/appsettings.json | 2 +- .../BaseService.Host/appsettings.json | 2 +- .../Entities/BQ/Dtos/INVOICE_GRP_DTO.cs | 3 + .../Bases/CAN_SA_SERVICE.cs | 10 +- .../Entities/BQ/INVOICE_SERVICE.cs | 8 +- .../Entities/BQ/PUB_CAN_SA_SERVICE.cs | 25 +- .../Entities/BQ/Managers/INV_MNG.cs | 450 ++++++++++++++---- .../Entities/BQ/Managers/PUB_NOT_SA_MNG.cs | 49 +- 8 files changed, 443 insertions(+), 106 deletions(-) diff --git a/code/src/AuthServer/AuthServer.Host/appsettings.json b/code/src/AuthServer/AuthServer.Host/appsettings.json index 3ca1ebb1..012d4641 100644 --- a/code/src/AuthServer/AuthServer.Host/appsettings.json +++ b/code/src/AuthServer/AuthServer.Host/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=dev.ccwin-in.com,13319;Database=BJABP;User ID=ccwin-in;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True" + "Default": "Server=dev.ccwin-in.com,13326;Database=BJABP;User ID=ccwin-in;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True" //"Default": "Server=localhost;Database=BJABP;User ID=sa;Password=aA123456!;Trusted_Connection=False;TrustServerCertificate=True" }, "CorsOrigins": "http://localhost:9527,http://dev.ccwin-in.com:10588,http://localhost:44307", diff --git a/code/src/Modules/BaseService/BaseService.Host/appsettings.json b/code/src/Modules/BaseService/BaseService.Host/appsettings.json index 5901cf11..ada24b5e 100644 --- a/code/src/Modules/BaseService/BaseService.Host/appsettings.json +++ b/code/src/Modules/BaseService/BaseService.Host/appsettings.json @@ -10,7 +10,7 @@ }, "ConnectionStrings": { //"Default": "Server=localhost;Database=BJABP;User ID=sa;Password=aA123456!;Trusted_Connection=False;TrustServerCertificate=True", - "Default": "Server=dev.ccwin-in.com,13319;Database=BJABP;User ID=ccwin-in;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True" + "Default": "Server=dev.ccwin-in.com,13326;Database=BJABP;User ID=ccwin-in;Password=Microsoft@2022;Trusted_Connection=False;TrustServerCertificate=True" }, "ElasticSearch": { "Url": "http://localhost:9200" diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/INVOICE_GRP_DTO.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/INVOICE_GRP_DTO.cs index 636c7b0f..2da7b7ca 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/INVOICE_GRP_DTO.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/INVOICE_GRP_DTO.cs @@ -321,6 +321,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Dtos [Display(Name = "数量")] public decimal Qty { set; get; } + [Display(Name = "状态")] + public string State { set; get; } + } public class MAIDAN_HBPO_UNSETTLED_DETAIL_DTO 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 46bc23cc..076e78ed 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 @@ -152,7 +152,7 @@ namespace Win.Sfs.SettleAccount.Bases /// 版本号 /// 发票分组 /// 原发票号 - protected async Task SecInvoice(List p_list, List p_adjlist, List dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType) where TDetail : SA_CAN_BASE + protected async Task SecInvoice(List p_list, List p_adjlist, List dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType, List p_notlist = null) where TDetail : SA_CAN_BASE { List invlist = new List(); @@ -166,19 +166,19 @@ namespace Win.Sfs.SettleAccount.Bases invlist = await _invmng.MakeInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, false).ConfigureAwait(false); break; case EnumBusinessType.ZhiGongJianBBAC: - invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType).ConfigureAwait(false);//重开可以变多张发票 + invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType,p_notlist).ConfigureAwait(false);//重开可以变多张发票 break; case EnumBusinessType.ZhiGongJianHBPO: - invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType).ConfigureAwait(false); + invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, p_notlist).ConfigureAwait(false); break; case EnumBusinessType.BeiJian: invlist = await _invmng.BJInvoice(p_list, p_adjlist, dtos, new List(), p_version, p_InvGroupNum, string.Empty, businessType, false).ConfigureAwait(false); break; case EnumBusinessType.JisBBAC: - invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType).ConfigureAwait(false); + invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, p_notlist).ConfigureAwait(false); break; case EnumBusinessType.JisHBPO: - invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType).ConfigureAwait(false); + invlist = await _invmng.SecInvoice(p_list, p_adjlist, dtos, p_version, p_InvGroupNum, string.Empty, businessType, p_notlist).ConfigureAwait(false); break; case EnumBusinessType.YinDuJian: invlist = await _invmng.JITInvoice(p_list, p_adjlist, dtos, new List(), p_version, p_InvGroupNum, string.Empty, businessType, false).ConfigureAwait(false);//重开可以变多张发票 diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/INVOICE_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/INVOICE_SERVICE.cs index 3a5801a8..e51bf76a 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/INVOICE_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/INVOICE_SERVICE.cs @@ -941,8 +941,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ //var part = mquery.ToList().Select(p => p.SettleGroupNum).Distinct().ToList();//发票对应分组号 //var unsettled = all.Where(p => !part.Contains(p));//排除发票对应分组号,都为不可结 var unsettledList = sdtos - .GroupBy(p => new { p.LU, p.SettleGroupNum }) - .Select(p => new JIT_UNSETTLED_DETAIL_DTO { LU = p.Key.LU, GroupNum = p.Key.SettleGroupNum, Qty = p.Sum(itm => itm.Qty.Value) }); + .GroupBy(p => new { p.LU, p.SettleGroupNum,p.Extend1 }) + .Select(p => new JIT_UNSETTLED_DETAIL_DTO { LU = p.Key.LU, GroupNum = p.Key.SettleGroupNum, Qty = p.Sum(itm => itm.Qty.Value), State=p.Key.Extend1 }); entity.JIT_UNSETTLED_DETAIL = unsettledList.ToList().OrderBy(p => p.GroupNum).ThenBy(p => p.LU).ToList(); } if (first.BusinessType == EnumBusinessType.JisHBPO || first.BusinessType == EnumBusinessType.JisBBAC || first.BusinessType == EnumBusinessType.ZhiGongJianHBPO) @@ -1060,7 +1060,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ } #endregion // 发票分组 - if (first.BusinessType == EnumBusinessType.JisBBAC || first.BusinessType == EnumBusinessType.JisHBPO || first.BusinessType == EnumBusinessType.ZhiGongJianHBPO || first.BusinessType == EnumBusinessType.ZhiGongJianBBAC ) + if (first.BusinessType == EnumBusinessType.JisBBAC || first.BusinessType == EnumBusinessType.JisHBPO || first.BusinessType == EnumBusinessType.ZhiGongJianHBPO ) { if (m != null) { @@ -1082,7 +1082,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ _excel.Append(hbpounsettle, "未结零件汇总"); } } - if ( first.BusinessType == EnumBusinessType.YinDuJian) + if ( first.BusinessType == EnumBusinessType.YinDuJian || first.BusinessType == EnumBusinessType.ZhiGongJianBBAC) { if (jitunsettle != null) { 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 801088cd..5af0f2e4 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 @@ -211,7 +211,30 @@ namespace Win.Sfs.SettleAccount.Entities.BQ } else//二次开票 { - await SecInvoice(entitys, new List(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType).ConfigureAwait(false); + var groupNums = dtos.Select(p => p.GroupNum).Distinct(); + var notQuery = await _notRepository.Where(p => groupNums.Contains(p.GroupNum)).ToListAsync().ConfigureAwait(false); + var notlist = notQuery.Select(p => new TEMP_NOT_SA_DETAIL + { + KeyCode = p.KeyCode, + Version = p.Version, + SettleBillNum = p.SettleBillNum, + LU = p.LU, + PN = p.PN, + Site = p.Site, + Qty = p.Qty, + Price = p.Price, + BusinessType = p.BusinessType, + IsReturn = "", + InvGroupNum = p.InvGroupNum, + SettleDate = p.SettleDate, + GroupNum = p.GroupNum, + ContractDocID = string.Empty, + PartCode = p.PartCode + + }).ToList();//不能结算 + + + await SecInvoice(entitys, new List(), dtos, main.Version, main.InvGroupNum, string.Empty, main.BusinessType,notlist).ConfigureAwait(false); } } } 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 bd712c99..8a3a1afe 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 @@ -1014,8 +1014,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers /// 发票分组 /// 原发票号 [UnitOfWork(false)] - public async Task> SecInvoice(List p_list, List p_ajdlist, List dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType) - where TDetail : SA_CAN_BASE + public async Task> SecInvoice(List p_list, List p_ajdlist, List dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType, List p_notlist = null) + where TDetail : SA_CAN_BASE { List _invls = new List(); var groups1 = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV @@ -1028,7 +1028,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers Price = p.Key.Price, BeginDate = p.Key.BeginDate, EndDate = p.Key.EndDate - }).ToList();//汇总记录不出现重复值 var groups = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV { @@ -1040,30 +1039,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers ContractDocID = p.Key.ContractDocID, BeginDate = p.Key.BeginDate, EndDate = p.Key.EndDate - }).ToList();//汇总记录不出现重复值 - - - //var t1 = groups1.GroupBy(p => p.LU).Select(p => new { LU = p.Key, Amt = p.Sum(itm => itm.Qty * itm.Price) }).OrderByDescending(p => p.Amt).ToList(); - //var group= t1.Where(p => p.Amt > 10000000).ToList(); - - ////var t1 = groups1.GroupBy(p => p.LU).Select(p => new { LU = p.Key, Amt = p.Sum(itm => itm.Qty * itm.Price) }).OrderByDescending(p => p.Amt).ToList(); - ////var t2 = groups.GroupBy(p => p.LU).Select(p => new { LU = p.Key, Amt = p.Sum(itm => itm.Qty * itm.Price) }).OrderByDescending(p => p.Amt).ToList(); - ////foreach (var itm in t1) - ////{ - - ////} - ////foreach (var itm in t2) - ////{ - - ////} - - - - - - - Dictionary> invoiceMap = new Dictionary>();//发票和发票明细关系 foreach (var group in groups) { @@ -1086,39 +1062,45 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers && group.BeginDate == group1.BeginDate && group.EndDate == group1.EndDate && group1.ContractDocID == group.ContractDocID + && group1.Price == group.Price + && group1.Qty == group.Qty + && group1.Amt == group.Amt ) { tempList.Add(group1); partCount++;//符合条件加入到零件中 continue; } - partCount++; - if (partCount > 30) - { - continue; - } + sum += group1.Amt; if (sum > 10000000) { break; } - sum += group1.Amt; tempList.Add(group1); } invoiceMap.Add(invoiceBillNum, tempList); + + var query = from itm in groups1 //更新分组 join itm1 in tempList - on new { itm.LU, itm.BeginDate, itm.EndDate, itm.ContractDocID, itm.PartCode } - equals new { itm1.LU, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID, itm1.PartCode } into temp - from tm in temp + on + new { itm.LU, itm.BeginDate, itm.EndDate, itm.ContractDocID, itm.PartCode, itm.Qty, itm.Price, itm.Amt } + equals + new { itm1.LU, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID, itm1.PartCode, itm1.Qty, itm1.Price, itm1.Amt } + into temp + from tm in temp.DefaultIfEmpty() where tm == null select new TMEP_INV { LU = itm.LU, Amt = itm.Amt, Qty = itm.Qty, + Price = itm.Price, BeginDate = itm.BeginDate, ContractDocID = itm.ContractDocID, - EndDate = itm.EndDate + EndDate = itm.EndDate, + PartCode = itm.PartCode, + }; groups1 = query.ToList(); } @@ -1131,6 +1113,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers var invlist = new List(); var salist = new List(); var adjlist = new List(); + int count = invoiceMap.Keys.Count;//计算第几张发票计数器 + int i = 1; foreach (var group in invoiceMap) { var key = group.Key;//发票票号 @@ -1138,9 +1122,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers //反向查找结算数据 var query = from itm in dtos join itm1 in ls - on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate } + on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate, itm.ContractDocID } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID } join itm2 in p_list on new { itm.PartCode, itm.PN, itm.SettleDate } equals new { itm2.PartCode, itm2.PN, itm2.SettleDate } - select itm2; + select itm2;//反向更新可计算数据 foreach (var itm in query) { itm.InvbillNum = key; @@ -1157,7 +1141,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers foreach (var itm in query1) { itm.InvBillNum = key; - itm.InvGroupNum = dtos.FirstOrDefault().InvGroupNum; adjlist.Add(itm); } } @@ -1186,30 +1169,67 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers { detailList.AddRange(_entityDetailList); } - - List amtList = new List(); - foreach (var itm in detailList) + #region 发票不能结算的明细 + var innotls = new List(); + var sq = query.GroupBy(p => new { p.LU, p.GroupNum }) + .Select(p => new { version = p_version, LU = p.Key.LU, Qty = p.Sum(itm => itm.Qty), InvBillNum = group.Key, GroupNum = p.Key.GroupNum }); + foreach (var sitm in sq) { - amtList.Add(new tempAmt1() - { - Amt = itm.Amt, - Tax = Math.Round(itm.Amt * 0.13m, 2), - TaxAmt = itm.Amt + Math.Round(itm.Amt * 0.13m, 2) - }); + 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: group.Key + )); } - decimal amt = amtList.Sum(k => k.Amt);//金额 - decimal txtAmt = amtList.Sum(k => k.TaxAmt);//税后金额 - decimal readAmt = amtList.Sum(k => k.Tax);//税额 + if (innotls.Count > 0) + { + notDetialList.AddRange(innotls); + } + if (p_notlist != null && p_notlist.Count > 0) + { + var innotls1 = new List(); - //decimal amt = detailList.Sum(k => k.Amt);//金额 - //decimal txtAmt = detailList.Sum(k => k.Amt) + Math.Round(detailList.Sum(k => k.Amt) * 0.13m, 2);//税后金额 - //decimal readAmt = Math.Round(detailList.Sum(k => k.Amt) * 0.13m, 2);//税额 + var grouplist = query.Select(p => p.GroupNum).ToList(); - var contractList = ls.Select(p => p.ContractDocID).Distinct(); - var _groupList = dtos.Where(p => contractList.Contains(p.ContractDocID)).GroupBy(p => new { p.GroupNum }) - .Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => itm.Amt) }).Distinct(); - List group1 = new List(); + var notlist = p_notlist.Where(p => grouplist.Contains(p.GroupNum)); + + foreach (var nitm in notlist) + { + 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: group.Key + )); + } + if (innotls.Count > 0) + { + notDetialList.AddRange(innotls1); + } + } + #endregion + decimal amt = ls.Sum(k => k.Amt);//金额 + decimal txtAmt = Math.Round(amt * 0.13m, 2);//税后金额 + decimal readAmt = amt + Math.Round(amt * 0.13m, 2);//税额 + + //var contractList = ls.Select(p => p.ContractDocID).Distinct(); + var _groupList = query.GroupBy(p => new { p.GroupNum }) + .Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => Math.Round(itm.Qty * itm.Price, 2)) }).Distinct(); + List group1 = new List(); foreach (var en in _groupList) { group1.Add( @@ -1227,7 +1247,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers { groupList.AddRange(group1); } - var lst = dtos.Where(p => !string.IsNullOrEmpty(p.Site)).ToList(); string site = lst.FirstOrDefault().Site; string clientCode = string.Empty; @@ -1244,47 +1263,310 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers break; } - 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: p_parentInvBillNum, - preTaxDiff: 0, - taxDiff: 0, - clientCode: string.Empty, - realAmt: readAmt - ); + 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: p_parentInvBillNum, + preTaxDiff: 0, + taxDiff: 0, + clientCode: string.Empty, + realAmt: readAmt + ); invbill.ClientCode = clientCode; invbill.CreationTime = DateTime.MinValue; - invbill.Site = dtos.FirstOrDefault().Site; invbill.LastModificationTime = DateTime.Now; + invbill.Site = dtos.FirstOrDefault().Site; invlist.Add(invbill); } - await _repository.DbContext.BulkInsertAsync(invlist).ConfigureAwait(false); - await _repository.DbContext.BulkInsertAsync(groupList).ConfigureAwait(false); - await _repository.DbContext.BulkInsertAsync(detailList).ConfigureAwait(false); + + var dbcontxt = await _repository.GetDbContextAsync().ConfigureAwait(false); + //_dbcontext.BulkInsert(invlist); + //_dbcontext.BulkInsert(groupList); + //_dbcontext.BulkInsert(detailList); + //_dbcontext.BulkInsert(notDetialList); + //if (salist.Count > 0) + //{ + // _dbcontext.BulkUpdate(salist); + //} + //if (adjlist.Count > 0) + //{ + // _dbcontext.BulkUpdate(adjlist); + //} + await dbcontxt.BulkInsertAsync(invlist).ConfigureAwait(false); + await dbcontxt.BulkInsertAsync(groupList).ConfigureAwait(false); + await dbcontxt.BulkInsertAsync(detailList).ConfigureAwait(false); + await dbcontxt.BulkInsertAsync(notDetialList).ConfigureAwait(false); if (salist.Count > 0) { - await _repository.DbContext.BulkUpdateAsync(salist).ConfigureAwait(false); + await dbcontxt.BulkUpdateAsync(salist).ConfigureAwait(false); } if (adjlist.Count > 0) { - await _repository.DbContext.BulkUpdateAsync(adjlist).ConfigureAwait(false); + await dbcontxt.BulkUpdateAsync(adjlist).ConfigureAwait(false); } //await _repository.DbContext.BulkInsertAsync(notDetialList); _invls = invlist.Select(p => p.InvbillNum).ToList(); } return _invls; - } + + //public async Task> SecInvoice(List p_list, List p_ajdlist, List dtos, int p_version, string p_InvGroupNum, string p_parentInvBillNum, EnumBusinessType businessType) + // where TDetail : SA_CAN_BASE + //{ + // List _invls = new List(); + // var groups1 = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV + // { + // PartCode = p.Key.PartCode, + // LU = p.Key.LU, + // Amt = p.Sum(itm => itm.Amt), + // Qty = p.Sum(itm => itm.Qty), + // ContractDocID = p.Key.ContractDocID, + // Price = p.Key.Price, + // BeginDate = p.Key.BeginDate, + // EndDate = p.Key.EndDate + + // }).ToList();//汇总记录不出现重复值 + // var groups = dtos.GroupBy(p => new { p.PartCode, p.LU, p.Price, p.BeginDate, p.EndDate, p.ContractDocID }).Select(p => new TMEP_INV + // { + // PartCode = p.Key.PartCode, + // LU = p.Key.LU, + // Amt = p.Sum(itm => itm.Amt), + // Qty = p.Sum(itm => itm.Qty), + // Price = p.Key.Price, + // ContractDocID = p.Key.ContractDocID, + // BeginDate = p.Key.BeginDate, + // EndDate = p.Key.EndDate + // }).ToList();//汇总记录不出现重复值 + // Dictionary> invoiceMap = new Dictionary>();//发票和发票明细关系 + // foreach (var group in groups) + // { + // int i = groups1.Count(p => p.LU == group.LU + // && p.PartCode == group.PartCode + // && p.BeginDate == group.BeginDate + // && p.EndDate == group.EndDate + // && p.ContractDocID == group.ContractDocID + // ); + // if (i > 0) + // { + // string invoiceBillNum = OrderNumberGenerator.GenerateOrderNumber("CINV"); + // List tempList = new List(); + // decimal sum = group.Amt;//初始合计金额 + // int partCount = 0; + // foreach (var group1 in groups1) + // { + // if (group.LU == group1.LU + // && group.PartCode == group1.PartCode + // && group.BeginDate == group1.BeginDate + // && group.EndDate == group1.EndDate + // && group1.ContractDocID == group.ContractDocID + // ) + // { + // tempList.Add(group1); + // partCount++;//符合条件加入到零件中 + // continue; + // } + // //partCount++; + // //if (partCount > 30) + // //{ + // // continue; + // //} + // if (sum > 10000000) + // { + // break; + // } + // sum += group1.Amt; + // tempList.Add(group1); + // } + // invoiceMap.Add(invoiceBillNum, tempList); + // var query = from itm in groups1 //更新分组 + // join itm1 in tempList + // on new { itm.LU, itm.BeginDate, itm.EndDate, itm.ContractDocID, itm.PartCode } + // equals new { itm1.LU, itm1.BeginDate, itm1.EndDate, itm1.ContractDocID, itm1.PartCode } into temp + // from tm in temp + // where tm == null + // select new TMEP_INV + // { + // LU = itm.LU, + // Amt = itm.Amt, + // Qty = itm.Qty, + // BeginDate = itm.BeginDate, + // ContractDocID = itm.ContractDocID, + // EndDate = itm.EndDate + // }; + // groups1 = query.ToList(); + // } + // } + // if (invoiceMap.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(); + // foreach (var group in invoiceMap) + // { + // var key = group.Key;//发票票号 + // var ls = group.Value;//发票明细 + // //反向查找结算数据 + // var query = from itm in dtos + // join itm1 in ls + // on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate } + // join itm2 in p_list on new { itm.PartCode, itm.PN, itm.SettleDate } equals new { itm2.PartCode, itm2.PN, itm2.SettleDate } + // select itm2; + // foreach (var itm in query) + // { + // itm.InvbillNum = key; + // salist.Add(itm); + // } + // if (!string.IsNullOrEmpty(p_parentInvBillNum)) + // { + // //反向查找调整数据 + // var query1 = from itm in dtos + // join itm1 in ls + // on new { itm.LU, itm.PartCode, itm.BeginDate, itm.EndDate } equals new { itm1.LU, itm1.PartCode, itm1.BeginDate, itm1.EndDate } + // join itm2 in p_ajdlist on new { itm.PartCode, itm.PN, itm.SettleDate } equals new { itm2.PartCode, itm2.PN, itm2.SettleDate } + // select itm2; + // foreach (var itm in query1) + // { + // itm.InvBillNum = key; + // itm.InvGroupNum = dtos.FirstOrDefault().InvGroupNum; + // adjlist.Add(itm); + // } + // } + // List _entityDetailList = new List(); + // foreach (var detail in ls) + // { + // _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.ContractDocID, + // extend2: string.Empty, + // beginDate: detail.BeginDate, + // endDate: detail.EndDate, + // partcode: detail.PartCode + // )); + // } + // if (_entityDetailList.Count > 0) + // { + // detailList.AddRange(_entityDetailList); + // } + + // List amtList = new List(); + // foreach (var itm in detailList) + // { + // amtList.Add(new tempAmt1() + // { + // Amt = itm.Amt, + // Tax = Math.Round(itm.Amt * 0.13m, 2), + // TaxAmt = itm.Amt + Math.Round(itm.Amt * 0.13m, 2) + // }); + // } + // decimal amt = amtList.Sum(k => k.Amt);//金额 + // decimal txtAmt = amtList.Sum(k => k.TaxAmt);//税后金额 + // decimal readAmt = amtList.Sum(k => k.Tax);//税额 + + // //decimal amt = detailList.Sum(k => k.Amt);//金额 + // //decimal txtAmt = detailList.Sum(k => k.Amt) + Math.Round(detailList.Sum(k => k.Amt) * 0.13m, 2);//税后金额 + // //decimal readAmt = Math.Round(detailList.Sum(k => k.Amt) * 0.13m, 2);//税额 + + // var contractList = ls.Select(p => p.ContractDocID).Distinct(); + // var _groupList = dtos.Where(p => contractList.Contains(p.ContractDocID)).GroupBy(p => new { p.GroupNum }) + // .Select(p => new { GroupNum = p.Key.GroupNum, Amt = p.Sum(itm => itm.Amt) }).Distinct(); + // List group1 = new List(); + + // foreach (var en in _groupList) + // { + // group1.Add( + // new INVOICE_MAP_GROUP( + // guid: GuidGenerator.Create(), + // version: p_version, + // invbillNum: key, + // invGroupNum: p_InvGroupNum, + // settleGroupNum: en.GroupNum, + // amt: en.Amt, + // extend1: string.Empty, + // extend2: string.Empty)); + // } + // if (group1.Count > 0) + // { + // groupList.AddRange(group1); + // } + + // var lst = dtos.Where(p => !string.IsNullOrEmpty(p.Site)).ToList(); + // string site = lst.FirstOrDefault().Site; + // string clientCode = string.Empty; + // switch (site) + // { + // case "1040": + // clientCode = "C001"; + // break; + // case "1046": + // clientCode = "C171"; + // break; + // default: + // clientCode = "C004"; + // break; + + // } + // 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: p_parentInvBillNum, + // preTaxDiff: 0, + // taxDiff: 0, + // clientCode: string.Empty, + // realAmt: readAmt + // ); + // invbill.ClientCode = clientCode; + // invbill.CreationTime = DateTime.MinValue; + // invbill.Site = dtos.FirstOrDefault().Site; + // invbill.LastModificationTime = DateTime.Now; + // invlist.Add(invbill); + // } + // await _repository.DbContext.BulkInsertAsync(invlist).ConfigureAwait(false); + // await _repository.DbContext.BulkInsertAsync(groupList).ConfigureAwait(false); + // await _repository.DbContext.BulkInsertAsync(detailList).ConfigureAwait(false); + // if (salist.Count > 0) + // { + // await _repository.DbContext.BulkUpdateAsync(salist).ConfigureAwait(false); + // } + // if (adjlist.Count > 0) + // { + // await _repository.DbContext.BulkUpdateAsync(adjlist).ConfigureAwait(false); + // } + // //await _repository.DbContext.BulkInsertAsync(notDetialList); + // _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 diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs index 3e17c1aa..31821327 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs @@ -69,6 +69,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers List errors = new List(); var entityList = new List(); var notList = new List(); + var deletenotList = new List(); var billList = new List(); List billDetails = new List(); var query = p_list.Select(p => p.BusinessType).Distinct().ToList(); @@ -104,10 +105,12 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers { priceList = _priceRepository.Where(p => p.IsCancel == false).ToList();//价格单 } + + if (first.BusinessType == EnumBusinessType.ZhiGongJianBBAC || first.BusinessType == EnumBusinessType.YinDuJian) { var ls = p_list.Select(p => p.GroupNum).Distinct().ToList(); - var notlist = _notRepository.Where(p => ls.Contains(p.GroupNum) && p.BusinessType==first.BusinessType).ToList();//JIT_ASN整发 + var notlist = _notRepository.Where(p => ls.Contains(p.GroupNum) && p.BusinessType==first.BusinessType).AsNoTracking().ToList();//JIT_ASN整发 if (first.BusinessType == EnumBusinessType.ZhiGongJianBBAC) { var subqueryA = (from a in notlist @@ -146,12 +149,35 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers }) on new { tmp1.GroupNum, tmp1.SettleBillNum } equals new { tmp2.GroupNum, tmp2.SettleBillNum } select tmp1;//不可结 - var jit1 = result.Where(p => p.Site == "1040").ToList(); - var jit2 = result.Where(p => p.Site == "1046").ToList(); + List priceLists = new List(); + foreach (var itm in notlist) + { + + var priceListEntity = priceList.Where(p => p.IsCancel == false) + .Where(t => t.LU == itm.LU) + .Where(t => itm.SettleDate >= t.BeginTime && itm.SettleDate <= t.EndTime && t.ClientCode == itm.Site) + .OrderByDescending(t => t.Date) + .ThenByDescending(t => t.CreationTime) + .FirstOrDefault(); + + if (priceListEntity != null) + { + itm.Price = priceListEntity.Price; + } + else + { + itm.Price = 0; + } + + } + + var result1 = notlist.Where(p=>p.Price!=0); + var jit1 = result1.Where(p => p.Site == "1040").ToList(); + var jit2 = result1.Where(p => p.Site == "1046").ToList(); var jit3 = result.Where(p => p.Site == "1041").ToList(); if (jit1.Count > 0) { - notlist.AddRange(jit1); + deletenotList.AddRange(jit1); var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); var entity = new PUB_CAN_SA(); entity.SetId(Guid.NewGuid()); @@ -175,7 +201,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers pN: itm.PN, site: itm.Site, qty: itm.Qty, - price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, + price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "1040").Price, businessType: itm.BusinessType, settleDate: itm.SettleDate, groupNum: itm.GroupNum, @@ -191,7 +217,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers } if (jit2.Count > 0) { - notlist.AddRange(jit2); + deletenotList.AddRange(jit2); var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); var entity = new PUB_CAN_SA(); entity.SetId(Guid.NewGuid()); @@ -215,7 +241,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers pN: itm.PN, site: itm.Site, qty: itm.Qty, - price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, + price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "1046").Price, businessType: itm.BusinessType, settleDate: itm.SettleDate, groupNum: itm.GroupNum, @@ -231,7 +257,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers } if (jit3.Count > 0) { - notlist.AddRange(jit3); + deletenotList.AddRange(jit3); var billNumber = OrderNumberGenerator.GenerateOrderNumber("N"); var entity = new PUB_CAN_SA(); entity.SetId(Guid.NewGuid()); @@ -255,7 +281,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers pN: itm.PN, site: itm.Site, qty: itm.Qty, - price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == first.Site).Price, + price: priceList.FirstOrDefault(p => itm.SettleDate >= p.BeginTime && itm.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == "1041").Price, businessType: itm.BusinessType, settleDate: itm.SettleDate, groupNum: itm.GroupNum, @@ -269,7 +295,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers entityList.Add(detailEntity); } } - await _repository.DbContext.BulkDeleteAsync(notlist).ConfigureAwait(false); + await _repository.DbContext.BulkDeleteAsync(deletenotList).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(billList).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(entityList).ConfigureAwait(false); } @@ -430,6 +456,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers } } + + + await _repository.DbContext.BulkDeleteAsync(notList).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(billList).ConfigureAwait(false); await _repository.DbContext.BulkInsertAsync(entityList).ConfigureAwait(false);