From ca35c4c824646b78822a51c3d9636a4a4705b9f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Tue, 12 Dec 2023 13:56:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/BQ/INVOICE_SERVICE.cs | 233 ++++++------------ .../Entities/BQ/Syncs/BalanceSumService .cs | 8 - .../Entities/BQ/VmiAppService.cs | 129 +++++++--- .../Entities/BQ/InvoiceSyncQad.cs | 4 + .../Entities/BQ/TED_SAS_INVOICE.cs | 8 +- 5 files changed, 188 insertions(+), 194 deletions(-) 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 99923bfa..7448a199 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 @@ -5,6 +5,8 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; using System.Threading.Tasks; +using DocumentFormat.OpenXml.Office2013.Word; +using DocumentFormat.OpenXml.Presentation; using EFCore.BulkExtensions; using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Csv; @@ -12,8 +14,10 @@ using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Newtonsoft.Json; using Omu.ValueInjecter; using Polly; using SettleAccount.Domain.BQ; @@ -112,6 +116,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ /// * 成功提交后修改状态为已提交QAD /// [HttpPost] + [UnitOfWork(false)] public virtual async Task SubmitToQad(List invbillNums) { _globalConfigOptions.IsSyncInvoiceQadState = true; @@ -121,7 +126,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ } return new OkResult(); } - + [UnitOfWork(false)] /// /// 提交到QAD /// @@ -135,7 +140,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { var _detail = await _bbacMng.GetDetailAsync(invbillNum, EnumBusinessType.MaiDanJianBBAC).ConfigureAwait(false);//查出买单数量 - var invoiceGrpDetails = _settleAccountDbContext.Set() + var invoiceGrpDetails = _settleAccountDbContext.Set().AsNoTracking() .Where(t => t.InvbillNum == invbillNum) .ToList(); if (invoiceGrpDetails.Any()) @@ -156,32 +161,38 @@ namespace Win.Sfs.SettleAccount.Entities.BQ UpdateTime = DateTime.Now, }; List invdetials = new List(); - foreach (var itm in invoiceGrpDetails) + + + var invoiceGrpDetails1 = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(invoiceGrpDetails)); + foreach (var itm in invoiceGrpDetails1) { - itm.SetProperty("ErpToLoc",$"C{invoiceGrp.ClientCode}"); - invdetials.Add(itm);//添加发票明细 - var first = _detail.FirstOrDefault(p => p.ContractDocID == itm.Extend1 && p.PartCode == itm.PartCode ); - if (first == null) - { - continue; - } - itm.Qty = itm.Qty - first.Qty;//发票总数中去除 - itm.Amt = Math.Round(itm.Qty * itm.PRICE, 2); var inv = new INVOICE_WAIT_DETAIL();//添加买单件 inv.InjectFrom(itm); - inv.Qty= first.Qty; - inv.Amt = Math.Round(first.Qty * itm.PRICE, 2); - inv.BussiessType = EnumBusinessType.MaiDanJianBBAC; - if (invoiceGrp.Site == "1046") + var first = _detail.FirstOrDefault(p => p.ContractDocID == itm.Extend1 && p.PartCode == itm.PartCode); + if (first == null) { - inv.SetProperty("ErpToLoc", "CC16"); + inv.SetProperty("ErpToLoc", $"C{invoiceGrp.ClientCode}"); + invdetials.Add(itm);//添加发票明细 + continue; } - if (invoiceGrp.Site == "1040") + else { - inv.SetProperty("ErpToLoc", "CC11"); + if (itm.Qty > first.Qty) + { + inv.Qty = itm.Qty - first.Qty;//发票总数中去除 + inv.Amt = Math.Round(itm.Qty * itm.PRICE, 2); + } + inv.BussiessType = EnumBusinessType.MaiDanJianBBAC; + if (invoiceGrp.Site == "1046") + { + inv.SetProperty("ErpToLoc", "CC16"); + } + if (invoiceGrp.Site == "1040") + { + inv.SetProperty("ErpToLoc", "CC11"); + } + invdetials.Add(inv); } - invdetials.Add(inv); - } for (var i = 0; i < invdetials.Count; i++) { @@ -212,50 +223,39 @@ namespace Win.Sfs.SettleAccount.Entities.BQ }); } - var invbefore = invoiceGrp.TaxAmt + invoiceGrp.TaxDiff; - var invafter=tedSaInvs.Sum(p => p.InvoiceNetAmount) + tedSaInvs.Sum(p => p.InvoiceTaxAmount); - + var tedsaInvs1 = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(tedSaInvs)); + var invbefore = invoiceGrp.TaxAmt + invoiceGrp.TaxDiff; + var invafter = tedsaInvs1.Sum(p => p.InvoiceNetAmount) + tedsaInvs1.Sum(p => p.InvoiceTaxAmount); var invdiff = invbefore - invafter; - - - - tedSaInvs.FirstOrDefault(p => p.LINE == "2").InvoiceTaxAmount +=invdiff; - tedSaInvs.FirstOrDefault(p => p.LINE == "1").InvoiceTaxAmount += invoiceGrp.TaxDiff; - - - - + var line1 = tedsaInvs1.FirstOrDefault(p => p.LINE == "1"); + var line2 = tedsaInvs1.FirstOrDefault(p => p.LINE == "2"); + line2.InvoiceTaxAmount += invdiff; + line1.InvoiceTaxAmount += invoiceGrp.TaxDiff; //红冲发票提交QAD if (!string.IsNullOrEmpty(invoiceGrp.ParentInvbillNum)) { await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); } - - await _exChangeCenterDbContext.Set().AddAsync(teaTaskSub).ConfigureAwait(false); - await _exChangeCenterDbContext.Set().AddRangeAsync(tedSaInvs).ConfigureAwait(false); + await _exChangeCenterDbContext.BulkInsertAsync(new List() { teaTaskSub }).ConfigureAwait(false); + await _exChangeCenterDbContext.BulkInsertAsync(tedsaInvs1).ConfigureAwait(false); invoiceGrp.State = SettleBillState.已提交QAD; - //构建发票同步Qad状态表数据 + _repository.DbContext.BulkUpdateAsync(new List() { invoiceGrp }); await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); - await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false); - var retryPolicyAsync = Policy.Handle().WaitAndRetryAsync(new[] { - TimeSpan.FromSeconds(1), - TimeSpan.FromSeconds(5), - TimeSpan.FromSeconds(5), - TimeSpan.FromSeconds(5) - }, (exception, timeSpan, retryCount, context) => - { - _logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试"); - }); - await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); + //await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false); + // var retryPolicyAsync = Policy.Handle().WaitAndRetryAsync(new[] { + // TimeSpan.FromSeconds(1), + // TimeSpan.FromSeconds(5), + // TimeSpan.FromSeconds(5), + // TimeSpan.FromSeconds(5) + //}, (exception, timeSpan, retryCount, context) => + //{ + // _logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试"); + //}); + // await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); } - - - - - } else { @@ -279,9 +279,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ CreateTime = DateTime.Now, UpdateTime = DateTime.Now, }; - - - for (var i = 0; i < invoiceGrpDetails.Count; i++) { var invoiceGrpDetail = invoiceGrpDetails[i]; @@ -316,118 +313,42 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); } - - await _exChangeCenterDbContext.Set().AddAsync(teaTaskSub).ConfigureAwait(false); - await _exChangeCenterDbContext.Set().AddRangeAsync(tedSaInvs).ConfigureAwait(false); + //await _exChangeCenterDbContext.Set().AddAsync(teaTaskSub).ConfigureAwait(false); + //await _exChangeCenterDbContext.Set().AddRangeAsync(tedSaInvs).ConfigureAwait(false); + //invoiceGrp.State = SettleBillState.已提交QAD; + ////构建发票同步Qad状态表数据 + //await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); + await _exChangeCenterDbContext.BulkInsertAsync(new List() { teaTaskSub }).ConfigureAwait(false); + await _exChangeCenterDbContext.BulkInsertAsync(tedSaInvs).ConfigureAwait(false); invoiceGrp.State = SettleBillState.已提交QAD; - //构建发票同步Qad状态表数据 + _repository.DbContext.BulkUpdateAsync(new List() { invoiceGrp }); await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); - await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false); - var retryPolicyAsync = Policy.Handle().WaitAndRetryAsync(new[] { - TimeSpan.FromSeconds(1), - TimeSpan.FromSeconds(5), - TimeSpan.FromSeconds(5), - TimeSpan.FromSeconds(5) - }, (exception, timeSpan, retryCount, context) => - { - _logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试"); - }); - await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); - } - - - } + // await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false); + // var retryPolicyAsync = Policy.Handle().WaitAndRetryAsync(new[] { + // TimeSpan.FromSeconds(1), + // TimeSpan.FromSeconds(5), + // TimeSpan.FromSeconds(5), + // TimeSpan.FromSeconds(5) + //}, (exception, timeSpan, retryCount, context) => + //{ + // _logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试"); + //}); + // await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); + } + } - //if (invoiceGrp == null) - //{ - // return; - //} - //var invoiceGrpDetails = _settleAccountDbContext.Set() - // .Where(t => t.InvbillNum == invbillNum) - // .ToList(); - //if (invoiceGrpDetails.Any()) - //{ - // var tedSaInvs = new List(); - // var taskId = GuidGenerator.Create(); - // var teaTaskSub = new TEA_TASK_SUB() - // { - // GUID = taskId, - // TaskState = 0, - // TaskID = taskId, - // TableName = "TED_SAS_INVOICE", - // Creator = "SAS", - // Subscriber = "QAD", - // Domain = "BJBMPT", - // Site = "BJ02", - // CreateTime = DateTime.Now, - // UpdateTime = DateTime.Now, - // }; - - - - // for (var i = 0; i < invoiceGrpDetails.Count; i++) - // { - // var invoiceGrpDetail = invoiceGrpDetails[i]; + } - - // tedSaInvs.Add(new TED_SAS_INVOICE() - // { - // GUID = GuidGenerator.Create(), - // Dataid = GuidGenerator.Create(), - // Taskid = taskId, - // invoiceNumber = invoiceGrp.RealnvBillNum, - // sasInvoiceNumber = invoiceGrp.InvbillNum, - // Customer = invoiceGrp.ClientCode, - // BillTo = invoiceGrp.ClientCode, - // InvoiceDate = invoiceGrp.CreationTime, - // Site = "BJ02", - // PartNumber = invoiceGrpDetail.PartCode, - // InvoiceQuatity = invoiceGrpDetail.Qty, - // Price = invoiceGrpDetail.PRICE, - // InvoiceNetAmount = invoiceGrpDetail.Amt, - // InvoiceTaxAmount = Math.Round(invoiceGrpDetail.Amt * 0.13m, 2), - // TaxRate = 0.13m, - // Location = invoiceGrp.GetProperty("ErpToLoc",string.Empty), - // begintime = invoiceGrpDetail.BeginDate, - // endtime = invoiceGrpDetail.EndDate, - // domain = "BJBMPT", - // LINE = (i + 1).ToString() - // }); - // } - // tedSaInvs.FirstOrDefault().InvoiceTaxAmount += invoiceGrp.TaxDiff; - // //红冲发票提交QAD - // if (!string.IsNullOrEmpty(invoiceGrp.ParentInvbillNum)) - // { - // await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); - // } - // await _exChangeCenterDbContext.Set().AddAsync(teaTaskSub).ConfigureAwait(false); - // await _exChangeCenterDbContext.Set().AddRangeAsync(tedSaInvs).ConfigureAwait(false); - // invoiceGrp.State = SettleBillState.已提交QAD; - // //构建发票同步Qad状态表数据 - // await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); - // await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false); - // var retryPolicyAsync = Policy.Handle().WaitAndRetryAsync(new[] { - // TimeSpan.FromSeconds(1), - // TimeSpan.FromSeconds(5), - // TimeSpan.FromSeconds(5), - // TimeSpan.FromSeconds(5) - // }, (exception, timeSpan, retryCount, context) => - // { - // _logger.LogError($"提交到QAD,修改发票状态执行失败,第 {retryCount} 次重试"); - // }); - // await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false); - //} - } /// /// 红冲发票提交到QAD @@ -505,12 +426,14 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { var invoiceSyncQad = new InvoiceSyncQad(teaTaskSub.TaskID, invoiceNumber, sasInvoiceNumber) { + TableName = teaTaskSub.TableName, Domain = teaTaskSub.Domain, Site = teaTaskSub.Site, Customer = customer }; - await _settleAccountDbContext.Set().AddAsync(invoiceSyncQad).ConfigureAwait(false); + + await _settleAccountDbContext.BulkInsertAsync(new List() { invoiceSyncQad }); } /// diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/BalanceSumService .cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/BalanceSumService .cs index 59f510c2..a7389ca8 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/BalanceSumService .cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/BalanceSumService .cs @@ -48,21 +48,13 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs var _filename = exportName.FirstOrDefault(); var year = property.Where(p => p.Name == "Year").FirstOrDefault().Value; var list=_dapper.GetBalanceSum(year); - ExcelExporter _exporter = new ExcelExporter();//导出Excel var result = _exporter.Append(list.ToList(), "余额表") - - //.SeparateBySheet() //.Append(_reversels.ToList(), "有发货无结算对比") .ExportAppendDataAsByteArray(); result.ShouldNotBeNull(); _fileContainer.SaveAsync(_filename, result.Result, true); - - - - - return id.ToString(); } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs index 6419897a..7d0d3cc0 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs @@ -12,6 +12,7 @@ using System.Text.Json; using System.Threading.Tasks; using AutoMapper; using ClosedXML.Excel; +using Dapper; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Wordprocessing; using EFCore.BulkExtensions; @@ -197,23 +198,55 @@ namespace Win.Sfs.SettleAccount.Entities.BQ public async Task> Balance(RequestDto input) { + string sql = "select * from (\n" + +"SELECT t.VinCode,t.RealPartCode,t.ErptoLoc, ShippingTime, ReceiveTime,(isnull(t.[100],0) + isnull(t.[200],0) + isnull(t.[400],0) + isnull(t.[500],0)+isnull(t.[600],0)) SumQty,\n" + +"isnull(t.[100],0) ShippingQty,isnull(t.[200],0) SettleQty , isnull(t.[400],0) ReturnQty,isnull(t.[500],0) InputQty,isnull(t.[600],0) OutputQty\n" + +"FROM (\n" + +"SELECT VinCode, RealPartCode, ErpToLoc, [100], [200], [400], [500],[600]\n" + +"FROM (\n" + +"SELECT VinCode, RealPartCode, ErpToLoc, ChangedQty, LogType\n" + +"FROM Set_VmiLog\n" + +") AS src\n" + +"PIVOT (\n" + +"SUM(ChangedQty)\n" + +"FOR LogType IN ([100],[200],[400],[500],[600])\n" + +") AS piv\n" + +") AS t\n" + +"left JOIN (\n" + +"SELECT VinCode, RealPartCode, ErpToLoc, MAX(BillTime) shippingtime\n" + +"FROM Set_VmiLog\n" + +"WHERE LogType = 100\n" + +"GROUP BY VinCode, RealPartCode, ErpToLoc\n" + +") AS t1 ON t1.ErpToLoc = t.ErpToLoc AND t1.RealPartCode = t.RealPartCode AND t1.VinCode = t.VinCode\n" + +"left JOIN (\n" + +"SELECT VinCode, RealPartCode, ErpToLoc, MAX(BillTime) receivetime\n" + +"FROM Set_VmiLog\n" + +"WHERE LogType = 200\n" + +"GROUP BY VinCode, RealPartCode, ErpToLoc\n" + +") AS t2 ON t2.ErpToLoc = t.ErpToLoc AND t2.RealPartCode = t.RealPartCode AND t2.VinCode = t1.VinCode) temp55\n" + +"WHERE sumqty <> 0\n"; + + + + + var connectionString = this._serviceProvider.GetRequiredService().GetConnectionString("SettleAccountService"); var options = new DbContextOptionsBuilder().UseSqlServer(connectionString).Options; using var db = new SettleAccountDbContext(options); - var query = db.Set().FromSqlRaw("select * from Set_VmiLog"); - var filters = input.Filters.ToLambda(); + var query = db.Database.GetDbConnection().Query(sql).AsQueryable(); + var filters = input.Filters.ToLambda(); if (input.Filters.Count > 0) { - query = query.Where(input.Filters.ToLambda()); + query = query.Where(input.Filters.ToLambda()); } - query = string.IsNullOrEmpty(input.Sorting) ? query : DynamicQueryableExtensions.OrderBy(query, input.Sorting); - var query2 = query.GroupBy(o => new { o.ErpToLoc, o.RealPartCode, o.VinCode }).Select(o => new VmiBalanceNewDto { VinCode = o.Key.VinCode, ErpToLoc = o.Key.ErpToLoc, RealPartCode = o.Key.RealPartCode, Qty = o.Sum(o => o.ChangedQty), BillTime = o.Max(o => o.BillTime) }).Where(p => p.Qty != 0); - var totalCount = query2.Count(); + //query = string.IsNullOrEmpty(input.Sorting) ? query : DynamicQueryableExtensions.OrderBy(query, input.Sorting); + //var query2 = query.GroupBy(o => new { o.ErpToLoc, o.RealPartCode, o.VinCode }).Select(o => new VmiBalanceNewDto { VinCode = o.Key.VinCode, ErpToLoc = o.Key.ErpToLoc, RealPartCode = o.Key.RealPartCode, Qty = o.Sum(o => o.ChangedQty), BillTime = o.Max(o => o.BillTime) }).Where(p => p.Qty != 0); + var totalCount = query.Count(); //query = string.IsNullOrEmpty(input.Sorting) ? query : DynamicQueryableExtensions.OrderBy(query, input.Sorting); //var query2 = query.GroupBy(o => new { o.ErpToLoc, o.RealPartCode,o.VinCode }).Select(o => new VmiBalanceDto { VinCode = o.Key.VinCode, ErpToLoc = o.Key.ErpToLoc, RealPartCode = o.Key.RealPartCode, Qty = o.Sum(o => o.Qty),LastTime=o.Max(o=>o.ChangedTime) }); //var totalCount = query2.Count(); - var entities = await query2.PageBy(input.SkipCount, input.MaxResultCount).ToListAsync().ConfigureAwait(false); + var entities = query.PageBy(input.SkipCount, input.MaxResultCount).ToList(); //var entities = await _balanceRepository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount, true).ConfigureAwait(false); //var totalCount = await _balanceRepository.GetCountByFilterAsync(input.Filters).ConfigureAwait(false); return new PagedResultDto(totalCount, entities); @@ -225,26 +258,23 @@ namespace Win.Sfs.SettleAccount.Entities.BQ [HttpPost] public async Task BalanceExport(RequestDto input) { - - - - var connectionString = this._serviceProvider.GetRequiredService().GetConnectionString("SettleAccountService"); - var options = new DbContextOptionsBuilder().UseSqlServer(connectionString).Options; - using var db = new SettleAccountDbContext(options); - var query = db.Set().FromSqlRaw("select VinCode,ErpToLoc,RealPartCode,ChangedQty ,BillTime from Set_VmiLog"); - var filters = input.Filters.ToLambda(); - if (input.Filters.Count > 0) - { - query = query.Where(input.Filters.ToLambda()); - } - query = string.IsNullOrEmpty(input.Sorting) ? query : DynamicQueryableExtensions.OrderBy(query, input.Sorting); - var query2 = query.GroupBy(o => new { o.ErpToLoc, o.RealPartCode, o.VinCode }).Select(o => new VmiBalanceNewDto { VinCode = o.Key.VinCode, ErpToLoc = o.Key.ErpToLoc, RealPartCode = o.Key.RealPartCode, Qty = o.Sum(o => o.ChangedQty), BillTime = o.Max(o => o.BillTime) }).Where(p => p.Qty != 0); - var entities = query2.ToList(); + //var connectionString = this._serviceProvider.GetRequiredService().GetConnectionString("SettleAccountService"); + //var options = new DbContextOptionsBuilder().UseSqlServer(connectionString).Options; + //using var db = new SettleAccountDbContext(options); + //var query = db.Set().FromSqlRaw("select VinCode,ErpToLoc,RealPartCode,ChangedQty ,BillTime from Set_VmiLog"); + //var filters = input.Filters.ToLambda(); + //if (input.Filters.Count > 0) + //{ + // query = query.Where(input.Filters.ToLambda()); + //} + //query = string.IsNullOrEmpty(input.Sorting) ? query : DynamicQueryableExtensions.OrderBy(query, input.Sorting); + //var query2 = query.GroupBy(o => new { o.ErpToLoc, o.RealPartCode, o.VinCode }).Select(o => new VmiBalanceNewDto { VinCode = o.Key.VinCode, ErpToLoc = o.Key.ErpToLoc, RealPartCode = o.Key.RealPartCode, Qty = o.Sum(o => o.ChangedQty), BillTime = o.Max(o => o.BillTime) }).Where(p => p.Qty != 0); + //var entities = query2.ToList(); // var entities = await _balanceRepository.GetListByFilterAsync(input.Filters).ConfigureAwait(false); var fileName = $"库存余额_{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}.xlsx"; - var content = this.GetContent(entities, "库存余额"); - await _fileContainer.SaveAsync(fileName, content, true).ConfigureAwait(false); + //var content = this.GetContent(entities, "库存余额"); + //await _fileContainer.SaveAsync(fileName, content, true).ConfigureAwait(false); return fileName; } @@ -1335,15 +1365,54 @@ namespace Win.Sfs.SettleAccount.Entities.BQ [Display(Name = "厂内零件号", Order = 3)] public string RealPartCode { get; set; }//原始 - [Display(Name = "数量", Order = 4)] - public decimal Qty { get; set; } - - [Display(Name = "发运时间", Order = 5)] - public DateTime? BillTime { get; set; } - + [Display(Name = "最后发运入库时间", Order = 3)] + public DateTime? ShippingTime {set;get;} + [Display(Name = "最后结算出库时间", Order = 3)] + public DateTime? ReceiveTime { set; get; } + [Display(Name = "数量合计", Order = 3)] + public decimal? SumQty {set;get;} + [Display(Name = "发运数量", Order = 3)] + public decimal? ShippingQty {set;get;} + [Display(Name = "结算数量", Order = 3)] + public decimal? SettleQty {set;get;} + [Display(Name = "退货数量", Order = 3)] + public decimal? ReturnQty {set;get;} + [Display(Name = "调整入库", Order = 3)] + public decimal? InputQty {set;get;} + [Display(Name = "调整出库", Order = 3)] + public decimal? OutputQty { set; get; } } + public class VmiBalanceReqDto + { + [Display(Name = "生产码", Order = 1)] + public string VinCode { get; set; } + + [Display(Name = "ERP库位", Order = 2)] + public string ErpToLoc { get; set; } + + [Display(Name = "厂内零件号", Order = 3)] + public string RealPartCode { get; set; }//原始 + + //[Display(Name = "最后发运入库时间", Order = 3)] + //public DateTime? ShippingTime { set; get; } + //[Display(Name = "最后结算出库时间", Order = 3)] + //public DateTime? ReceiveTime { set; get; } + //[Display(Name = "数量合计", Order = 3)] + //public decimal? SumQty { set; get; } + //[Display(Name = "发运数量", Order = 3)] + //public decimal? ShippingQty { set; get; } + //[Display(Name = "结算数量", Order = 3)] + //public decimal? SettleQty { set; get; } + //[Display(Name = "退货数量", Order = 3)] + //public decimal? ReturnQty { set; get; } + //[Display(Name = "调整入库", Order = 3)] + //public decimal? InputQty { set; get; } + //[Display(Name = "调整出库", Order = 3)] + //public decimal? OutputQty { set; get; } + + } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/InvoiceSyncQad.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/InvoiceSyncQad.cs index ad9363b9..c7fa42bb 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/InvoiceSyncQad.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/InvoiceSyncQad.cs @@ -80,6 +80,10 @@ namespace SettleAccount.Domain.BQ SasInvoiceNumber = sasInvoiceNumber; } + public void SetId(Guid p_id) + { + Id = p_id; + } public void UpdateTaskState(int taskState) { TaskState = taskState; diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/TED_SAS_INVOICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/TED_SAS_INVOICE.cs index 5b58221e..a9939f52 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/TED_SAS_INVOICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/TED_SAS_INVOICE.cs @@ -1,12 +1,18 @@ using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.DirectoryServices.ActiveDirectory; +using System.Security.Policy; +using System.Threading.Tasks; using Magicodes.ExporterAndImporter.Core; - +using Win.Sfs.Shared; namespace Win.Sfs.SettleAccount.Entities.BQ { public class TED_SAS_INVOICE { + + + public int UID { get; set; } public string invoiceNumber { get; set; } public string sasInvoiceNumber { get; set; } From 44f96ae2ab2bd4179a97fda159ad3713351c2fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Tue, 12 Dec 2023 15:22:39 +0800 Subject: [PATCH 2/3] =?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 --- .../Entities/BQ/INVOICE_SERVICE.cs | 235 ++++++++++++++---- .../Entities/BQ/Syncs/SeSyncExtendManager.cs | 2 +- 2 files changed, 185 insertions(+), 52 deletions(-) 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 7448a199..99eb86bd 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 @@ -311,7 +311,15 @@ namespace Win.Sfs.SettleAccount.Entities.BQ //红冲发票提交QAD if (!string.IsNullOrEmpty(invoiceGrp.ParentInvbillNum)) { - await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); + if (invoiceGrp.BusinessType == EnumBusinessType.JisBBAC) + { + await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); + } + else + { + await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); + } + } //await _exChangeCenterDbContext.Set().AddAsync(teaTaskSub).ConfigureAwait(false); //await _exChangeCenterDbContext.Set().AddRangeAsync(tedSaInvs).ConfigureAwait(false); @@ -324,11 +332,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ _repository.DbContext.BulkUpdateAsync(new List() { invoiceGrp }); await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); - - - - - // await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false); // var retryPolicyAsync = Policy.Handle().WaitAndRetryAsync(new[] { // TimeSpan.FromSeconds(1), @@ -353,7 +356,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ /// /// 红冲发票提交到QAD /// - private async Task SubmitToQadHongChongAsync(string invbillNum) + private async Task SubmitToQadHongChongAsync(string invbillNum, List p_detail = null) { var invoiceGrp = _settleAccountDbContext.Set() .Where(t => t.State == SettleBillState.红冲发票) @@ -363,59 +366,189 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { return; } - var invoiceGrpDetails = _settleAccountDbContext.Set() + + if (p_detail != null && p_detail.Count > 0) + { + var _detail = p_detail.ToList(); + var invoiceGrpDetails = _settleAccountDbContext.Set().AsNoTracking() .Where(t => t.InvbillNum == invbillNum) .ToList(); + if (invoiceGrpDetails.Any()) + { + var tedSaInvs = new List(); + var taskId = GuidGenerator.Create(); + var teaTaskSub = new TEA_TASK_SUB() + { + GUID = taskId, + TaskState = 0, + TaskID = taskId, + TableName = "TED_SAS_INVOICE", + Creator = "SAS", + Subscriber = "QAD", + Domain = "BJBMPT", + Site = "BJ02", + CreateTime = DateTime.Now, + UpdateTime = DateTime.Now, + }; + List invdetials = new List(); + + var invoiceGrpDetails1 = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(invoiceGrpDetails)); + foreach (var itm in invoiceGrpDetails1) + { + var inv = new INVOICE_WAIT_DETAIL();//添加买单件 + inv.InjectFrom(itm); + var first = _detail.FirstOrDefault(p => p.ContractDocID == itm.Extend1 && p.PartCode == itm.PartCode); + if (first == null) + { + inv.SetProperty("ErpToLoc", $"C{invoiceGrp.ClientCode}"); + invdetials.Add(itm);//添加发票明细 + continue; + } + else + { + if (itm.Qty > first.Qty) + { + inv.Qty = itm.Qty - first.Qty;//发票总数中去除 + inv.Amt = Math.Round(itm.Qty * itm.PRICE, 2); + } + inv.BussiessType = EnumBusinessType.MaiDanJianBBAC; + if (invoiceGrp.Site == "1046") + { + inv.SetProperty("ErpToLoc", "CC16"); + } + if (invoiceGrp.Site == "1040") + { + inv.SetProperty("ErpToLoc", "CC11"); + } + invdetials.Add(inv); + } + } + for (var i = 0; i < invdetials.Count; i++) + { + var invoiceGrpDetail = invdetials[i]; - if (invoiceGrpDetails.Any()) + tedSaInvs.Add(new TED_SAS_INVOICE() + { + GUID = GuidGenerator.Create(), + Dataid = GuidGenerator.Create(), + Taskid = taskId, + invoiceNumber = invoiceGrp.RealnvBillNum, + sasInvoiceNumber = invoiceGrp.InvbillNum, + Customer = invoiceGrp.ClientCode, + BillTo = invoiceGrp.ClientCode, + InvoiceDate = invoiceGrp.CreationTime, + Site = "BJ02", + PartNumber = invoiceGrpDetail.PartCode, + InvoiceQuatity = invoiceGrpDetail.Qty, + Price = invoiceGrpDetail.PRICE, + InvoiceNetAmount = invoiceGrpDetail.Amt, + InvoiceTaxAmount = Math.Round(invoiceGrpDetail.Amt * 0.13m, 2), + TaxRate = 0.13m, + Location = invoiceGrpDetail.GetProperty("ErpToLoc", string.Empty), + begintime = invoiceGrpDetail.BeginDate, + endtime = invoiceGrpDetail.EndDate, + domain = "BJBMPT", + LINE = (i + 1).ToString() + }); + } + + var tedsaInvs1 = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(tedSaInvs)); + var invbefore = invoiceGrp.TaxAmt + invoiceGrp.TaxDiff; + var invafter = tedsaInvs1.Sum(p => p.InvoiceNetAmount) + tedsaInvs1.Sum(p => p.InvoiceTaxAmount); + var invdiff = invbefore - invafter; + var line1 = tedsaInvs1.FirstOrDefault(p => p.LINE == "1"); + var line2 = tedsaInvs1.FirstOrDefault(p => p.LINE == "2"); + line2.InvoiceTaxAmount += invdiff; + line1.InvoiceTaxAmount += invoiceGrp.TaxDiff; + //红冲发票提交QAD + if (!string.IsNullOrEmpty(invoiceGrp.ParentInvbillNum)) + { + await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); + } + await _exChangeCenterDbContext.BulkInsertAsync(new List() { teaTaskSub }).ConfigureAwait(false); + await _exChangeCenterDbContext.BulkInsertAsync(tedsaInvs1).ConfigureAwait(false); + invoiceGrp.State = SettleBillState.已提交QAD; + _repository.DbContext.BulkUpdateAsync(new List() { invoiceGrp }); + await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); + } + } + else { - var tedSaInvs = new List(); - var taskId = GuidGenerator.Create(); - var teaTaskSub = new TEA_TASK_SUB() - { - GUID = taskId, - TaskState = 0, - TaskID = taskId, - TableName = "TED_SAS_INVOICE", - Creator = "SAS", - Subscriber = "QAD", - Domain = "BJBMPT", - Site = "BJ02", - CreateTime = DateTime.Now, - UpdateTime = DateTime.Now, - }; - for (var i = 0; i < invoiceGrpDetails.Count; i++) + var invoiceGrpDetails = _settleAccountDbContext.Set() + .Where(t => t.InvbillNum == invbillNum) + .ToList(); + if (invoiceGrpDetails.Any()) { - var invoiceGrpDetail = invoiceGrpDetails[i]; - tedSaInvs.Add(new TED_SAS_INVOICE() + var tedSaInvs = new List(); + var taskId = GuidGenerator.Create(); + var teaTaskSub = new TEA_TASK_SUB() { - GUID = GuidGenerator.Create(), - Dataid = GuidGenerator.Create(), - Taskid = taskId, - invoiceNumber = invoiceGrp.RealnvBillNum, - sasInvoiceNumber = invoiceGrp.InvbillNum, - Customer = invoiceGrp.ClientCode, - BillTo = invoiceGrp.ClientCode, - InvoiceDate = invoiceGrp.CreationTime, + GUID = taskId, + TaskState = 0, + TaskID = taskId, + TableName = "TED_SAS_INVOICE", + Creator = "SAS", + Subscriber = "QAD", + Domain = "BJBMPT", Site = "BJ02", - PartNumber = invoiceGrpDetail.PartCode, - InvoiceQuatity = -invoiceGrpDetail.Qty, - Price = invoiceGrpDetail.PRICE, - InvoiceNetAmount = invoiceGrpDetail.Amt, - InvoiceTaxAmount = Math.Round(invoiceGrpDetail.Amt * 0.13m, 2), - TaxRate = 0.13m, - Location = $"C{invoiceGrp.ClientCode}", - begintime = invoiceGrpDetail.BeginDate, - endtime = invoiceGrpDetail.EndDate, - domain = "BJBMPT", - LINE = (i + 1).ToString() - }); + CreateTime = DateTime.Now, + UpdateTime = DateTime.Now, + }; + for (var i = 0; i < invoiceGrpDetails.Count; i++) + { + var invoiceGrpDetail = invoiceGrpDetails[i]; + + tedSaInvs.Add(new TED_SAS_INVOICE() + { + GUID = GuidGenerator.Create(), + Dataid = GuidGenerator.Create(), + Taskid = taskId, + invoiceNumber = invoiceGrp.RealnvBillNum, + sasInvoiceNumber = invoiceGrp.InvbillNum, + Customer = invoiceGrp.ClientCode, + BillTo = invoiceGrp.ClientCode, + InvoiceDate = invoiceGrp.CreationTime, + Site = "BJ02", + PartNumber = invoiceGrpDetail.PartCode, + InvoiceQuatity = invoiceGrpDetail.Qty, + Price = invoiceGrpDetail.PRICE, + InvoiceNetAmount = invoiceGrpDetail.Amt, + InvoiceTaxAmount = Math.Round(invoiceGrpDetail.Amt * 0.13m, 2), + TaxRate = 0.13m, + Location = invoiceGrp.GetProperty("ErpToLoc", string.Empty), + begintime = invoiceGrpDetail.BeginDate, + endtime = invoiceGrpDetail.EndDate, + domain = "BJBMPT", + LINE = (i + 1).ToString() + }); + } + tedSaInvs.FirstOrDefault().InvoiceTaxAmount += invoiceGrp.TaxDiff; + //红冲发票提交QAD + if (!string.IsNullOrEmpty(invoiceGrp.ParentInvbillNum)) + { + if (invoiceGrp.BusinessType == EnumBusinessType.JisBBAC) + { + await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); + } + else + { + await SubmitToQadHongChongAsync(invoiceGrp.ParentInvbillNum).ConfigureAwait(false); + } + + } + //await _exChangeCenterDbContext.Set().AddAsync(teaTaskSub).ConfigureAwait(false); + //await _exChangeCenterDbContext.Set().AddRangeAsync(tedSaInvs).ConfigureAwait(false); + //invoiceGrp.State = SettleBillState.已提交QAD; + ////构建发票同步Qad状态表数据 + //await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); + await _exChangeCenterDbContext.BulkInsertAsync(new List() { teaTaskSub }).ConfigureAwait(false); + await _exChangeCenterDbContext.BulkInsertAsync(tedSaInvs).ConfigureAwait(false); + invoiceGrp.State = SettleBillState.已提交QAD; + _repository.DbContext.BulkUpdateAsync(new List() { invoiceGrp }); + await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); + } - await _exChangeCenterDbContext.Set().AddAsync(teaTaskSub).ConfigureAwait(false); - await _exChangeCenterDbContext.Set().AddRangeAsync(tedSaInvs).ConfigureAwait(false); - //构建发票同步Qad状态表数据 - await BindInvoiceSyncQadAsync(teaTaskSub, invoiceGrp.RealnvBillNum, invoiceGrp.InvbillNum, invoiceGrp.ClientCode).ConfigureAwait(false); } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs index 95dff4dd..2e97bb2b 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs @@ -276,7 +276,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs else if (p_billtime >= lastYear.AddMonths(10) && p_billtime <= lastYear.AddMonths(11)) { version = $"{before.ToString()}11"; } else if (p_billtime >= lastYear.AddMonths(11) && p_billtime <= - DateTime.ParseExact(string.Format("{0}-01-{1} 07:59:59", next.ToString(), 01), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) + DateTime.ParseExact(string.Format("{0}-01-{1} 07:59:59", next.ToString(), "01"), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) ) { version = $"{before.ToString()}12"; From 3f045f963c8d1b12533fe48733b6fdbdf0004629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Tue, 12 Dec 2023 15:25:37 +0800 Subject: [PATCH 3/3] =?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 --- .../src/SettleAccount.Application/Entities/BQ/VmiAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs index 7d0d3cc0..fd48208f 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/VmiAppService.cs @@ -879,7 +879,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ else if (p_billtime >= lastYear.AddMonths(10) && p_billtime <= lastYear.AddMonths(11)) { version = $"{before.ToString()}11"; } else if (p_billtime >= lastYear.AddMonths(11) && p_billtime <= - DateTime.ParseExact(string.Format("{0}-01-{1} 07:59:59", next.ToString(), 01), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) + DateTime.ParseExact(string.Format("{0}-01-{1} 07:59:59", next.ToString(), "01"), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) ) { version = $"{before.ToString()}12";