From 8c1098fcca697080b379911f01c9d5dff6dfdc29 Mon Sep 17 00:00:00 2001 From: mahao Date: Wed, 23 Aug 2023 11:28:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=B5=8B=E8=AF=95=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BQ/Syncs/JisBBACSeEdiCompareAppService.cs | 2 +- .../BQ/Syncs/JisHBPOSeEdiCompareAppService.cs | 2 +- .../BQ/TB_RePartsRelationship_SERVICE.cs | 45 ++-- .../MaterialRelationshipAppService.cs | 6 +- .../Reports/PubSaSeCompareDiff.cs | 71 ++----- .../Report/PubSaSeCompareDapperRepository.cs | 1 - .../Report/PubSaSeCompareExportService.cs | 196 +++++++++++++++--- .../Win.Sfs.Shared/Filter/FilterExtensions.cs | 2 +- 8 files changed, 214 insertions(+), 111 deletions(-) diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeEdiCompareAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeEdiCompareAppService.cs index a727dc1f..06272d11 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeEdiCompareAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeEdiCompareAppService.cs @@ -40,7 +40,7 @@ public class JisBBACSeEdiCompareAppService : ApplicationService, IInvocable { var seDetailGroup = db.Set().Where(t => t.IsHaveEdiData == false).GroupBy(t => new { t.PN, t.LU }).Select(t => new { t.Key.PN, t.Key.LU }); var ediDetailGroup = db.Set().Where(t => t.IsDeleted == false && t.IsHaveSeData == false).GroupBy(t => new { t.PN, t.LU }).Select(t => new { t.Key.PN, t.Key.LU }); - var keyCodes = seDetailGroup.Join(ediDetailGroup, a => new { a.PN, a.LU }, b => new { b.PN, b.LU }, (se, edi) => new { se.PN, se.LU }); + var keyCodes = seDetailGroup.Join(ediDetailGroup, a => new { a.PN, a.LU }, b => new { b.PN, b.LU }, (se, edi) => new { se.PN, se.LU }).Take(10000).ToList(); if (keyCodes.Any()) { var seDetails = db.Set().Join(keyCodes, a => new { a.PN, a.LU }, b => new { b.PN, b.LU }, (a, b) => a); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeEdiCompareAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeEdiCompareAppService.cs index 3fce2653..edda83f5 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeEdiCompareAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeEdiCompareAppService.cs @@ -57,7 +57,7 @@ public class JisHBPOSeEdiCompareAppService : ApplicationService, IInvocable { var seDetailGroup = db.Set().Where(t => t.IsHaveEdiData == false).GroupBy(t => new { t.PN, t.LU }).Select(t => new { t.Key.PN, t.Key.LU }); var ediDetailGroup = db.Set().Where(t => t.IsDeleted == false && t.IsHaveSeData == false).GroupBy(t => new { t.PN, t.LU }).Select(t => new { t.Key.PN, t.Key.LU }); - var keyCodes = seDetailGroup.Join(ediDetailGroup, a => new { a.PN, a.LU }, b => new { b.PN, b.LU }, (se, edi) => new { se.PN, se.LU }); + var keyCodes = seDetailGroup.Join(ediDetailGroup, a => new { a.PN, a.LU }, b => new { b.PN, b.LU }, (se, edi) => new { se.PN, se.LU }).Take(10000).ToList(); if (keyCodes.Any()) { var seDetails = db.Set().Join(keyCodes, a => new { a.PN, a.LU }, b => new { b.PN, b.LU }, (a, b) => a); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/TB_RePartsRelationship_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/TB_RePartsRelationship_SERVICE.cs index b40a9378..5792be1e 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/TB_RePartsRelationship_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/TB_RePartsRelationship_SERVICE.cs @@ -1,13 +1,13 @@ -using DocumentFormat.OpenXml.Spreadsheet; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SettleAccount.Domain.BQ; using Shouldly; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Caching; using Win.Abp.Snowflakes; @@ -15,7 +15,6 @@ using Win.Sfs.BaseData.ImportExcelCommon; using Win.Sfs.SettleAccount.CommonManagers; using Win.Sfs.SettleAccount.Constant; using Win.Sfs.SettleAccount.Entities.BQ.Dtos; -using Win.Sfs.SettleAccount.Entities.Prices; using Win.Sfs.SettleAccount.ExcelImporter; using Win.Sfs.SettleAccount.ExportReports; using Win.Sfs.SettleAccount.MaterialRelationships; @@ -61,37 +60,37 @@ public class TB_RePartsRelationship_SERVICE : SettleAccountApplicationBase ImportAsync([FromForm] IFormFileCollection files) { ExportImporter _exportImporter = new ExportImporter(); - var result = await _exportImporter.UploadExcelImport(files, _excelImportService); + var result = await _exportImporter.UploadExcelImport(files, _excelImportService).ConfigureAwait(false); var _ls = ObjectMapper.Map, List>(result); List _errorList = new List(); var checkList = new List(); if (_ls.Count > 0) { - //导入的替换零件号 - var tbRePartsRelationshipLus = _ls.Select(t => t.LU); - var haveLu = (await _materialRelationshipRepository.GetListAsync(t => tbRePartsRelationshipLus.Contains(t.SettleMaterialCode) == false)).Select(t => t.SettleMaterialCode); - //导入不存在的零件号 - var exceptLus = tbRePartsRelationshipLus.Except(haveLu).ToList(); + //导入文件中的厂内零件号 + var tbRePartsRelationshipLus = _ls.Select(t => new { lu = new List { t.LU, t.RepLU } }).SelectMany(t => t.lu).Distinct(); + var haveLus = _materialRelationshipRepository.Where(t => tbRePartsRelationshipLus.Contains(t.ErpMaterialCode)).Select(t => t.ErpMaterialCode).Distinct().ToList(); + + //导入不存在的厂内零件号 + var exceptLus = tbRePartsRelationshipLus.Except(haveLus); exceptLus.ForEach(exceptLu => { - checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Format("客户物料号{0}不存在,无法替换", exceptLu), string.Empty)); + checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Format("厂内零件号{0}不存在", exceptLu), string.Empty)); }); var query = from arc in _ls group arc by new { arc.LU } into g where g.Count() > 1 - select g; foreach (var itm in query) { - checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Format("客户物料号{0}有重复", itm.Key.LU), string.Empty)); + checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Format("厂内零件号{0}有重复", itm.Key.LU), string.Empty)); } } if (checkList.Count > 0) { - string fileName = await ExportErrorReportAsync(checkList); + string fileName = await ExportErrorReportAsync(checkList).ConfigureAwait(false); return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, fileName = fileName }); } foreach (var itm in _ls) @@ -100,11 +99,11 @@ public class TB_RePartsRelationship_SERVICE : SettleAccountApplicationBase ExportAsync(RequestDto input) { string fileName = $"客户替换件关系_{Guid.NewGuid()}.xlsx"; - var entities = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true); + var entities = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true).ConfigureAwait(false); var dtos = ObjectMapper.Map, List>(entities); ExportImporter _exportImporter = new ExportImporter(); - var result = await _exportImporter.ExcelExporter(dtos); + var result = await _exportImporter.ExcelExporter(dtos).ConfigureAwait(false); result.ShouldNotBeNull(); - await _excelImportService.SaveBlobAsync(new SaveExcelImportInputDto { Name = fileName, Content = result }); + await _excelImportService.SaveBlobAsync(new SaveExcelImportInputDto { Name = fileName, Content = result }).ConfigureAwait(false); return fileName; } #endregion @@ -136,8 +135,8 @@ public class TB_RePartsRelationship_SERVICE : SettleAccountApplicationBase> GetListAsync(RequestDto input) { - var entities = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount, true); - var totalCount = await _repository.GetCountByFilterAsync(input.Filters); + var entities = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, input.MaxResultCount, input.SkipCount, true).ConfigureAwait(false); + var totalCount = await _repository.GetCountByFilterAsync(input.Filters).ConfigureAwait(false); var dtos = ObjectMapper.Map, List>(entities); return new PagedResultDto(totalCount, dtos); } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/MaterialRelationships/MaterialRelationshipAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/MaterialRelationships/MaterialRelationshipAppService.cs index a4e1a608..c381f71c 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/MaterialRelationships/MaterialRelationshipAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/MaterialRelationships/MaterialRelationshipAppService.cs @@ -101,14 +101,14 @@ public class MaterialRelationshipAppService : SettleAccountApplicationBase ExportAsync(RequestDto input) { string fileName = $"客户零件关系_{Guid.NewGuid()}.xlsx"; - var entities = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true); + var entities = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, 0, true).ConfigureAwait(false); var dtos = ObjectMapper.Map, List>(entities); ExportImporter _exportImporter = new ExportImporter(); - var result = await _exportImporter.ExcelExporter(dtos); + var result = await _exportImporter.ExcelExporter(dtos).ConfigureAwait(false); result.ShouldNotBeNull(); - await _excelImportService.SaveBlobAsync(new SaveExcelImportInputDto { Name = fileName, Content = result }); + await _excelImportService.SaveBlobAsync(new SaveExcelImportInputDto { Name = fileName, Content = result }).ConfigureAwait(false); return fileName; } #endregion diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/PubSaSeCompareDiff.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/PubSaSeCompareDiff.cs index 46a65036..d2d7e08b 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/PubSaSeCompareDiff.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/PubSaSeCompareDiff.cs @@ -47,16 +47,6 @@ public class PubSaSeCompareDiff [Display(Name = "发货数量")] public decimal SEQty { get; set; } /// - /// 差异数量 - /// - [Display(Name = "差异数量")] - public decimal DiffQty => SAQty - SEQty; - /// - /// 匹配类型 - /// - [Display(Name = "匹配类型")] - public string MateType { get; set; } - /// /// 定价 /// [Display(Name = "定价")] @@ -121,6 +111,10 @@ public class PubSaSeCompareDiff /// 是否已经移除 /// public bool IsRemove { get; set; } + /// + /// 是否替换了厂内零件号 + /// + public bool IsReplace { get; set; } } /// @@ -207,55 +201,49 @@ public class PubSaSeCompareDetailExport2 [Display(Name = "结算数量")] [ExporterHeader(DisplayName = "结算数量")] public decimal SAQty { get; set; } - /// /// 发货数量 /// [Display(Name = "发货数量")] [ExporterHeader(DisplayName = "WMS发货数量")] public decimal SEQty { get; set; } - /// /// 差异数量 /// [ExporterHeader(DisplayName = "差异数量")] public decimal DiffQty { set; get; } - /// /// 匹配类型 /// [Display(Name = "匹配类型")] [ExporterHeader(DisplayName = "是否完全匹配")] - public string MateType { get; set; } - + [ValueMapping("是", true)] + [ValueMapping("否", false)] + public bool MateType => DiffQty == 0; /// /// 定价 /// [Display(Name = "定价")] [ExporterHeader(DisplayName = "定价")] public decimal FixPrice { get; set; } - /// /// 日顺序号 /// [Display(Name = "日顺序号")] [ExporterHeader(DisplayName = "日顺序号")] public string SeqNumber { get; set; } - /// /// PJIS日顺序号 /// [Display(Name = "PJIS日顺序号")] [ExporterHeader(DisplayName = "PJIS日顺序号")] public string PJISSeqNumber { get; set; } - /// /// WMS目标库位 /// [Display(Name = "WMS目标库位")] [ExporterHeader(DisplayName = "WMS目标库位")] public string ToLocCode { get; set; } - /// /// ERP目标库位 /// @@ -432,34 +420,31 @@ public class PubSaSeCompareDetailExportZhiGongJianBBAC : PubSaSeCompareDetailExp [Display(Name = "发货数量")] [ExporterHeader(DisplayName = "WMS发货数量")] public decimal SEQty { get; set; } - /// /// 差异数量 /// [ExporterHeader(DisplayName = "差异数量")] public decimal DiffQty => SAQty - SEQty; - /// /// 匹配类型 /// [Display(Name = "匹配类型")] [ExporterHeader(DisplayName = "是否完全匹配")] - public string MateType { get; set; } - + [ValueMapping("是", true)] + [ValueMapping("否", false)] + public bool MateType => DiffQty == 0; /// /// 定价 /// [Display(Name = "定价")] [ExporterHeader(DisplayName = "定价")] public decimal FixPrice { get; set; } - /// /// WMS目标库位 /// [Display(Name = "WMS目标库位")] [ExporterHeader(DisplayName = "WMS目标库位")] public string ToLocCode { get; set; } - /// /// ERP目标库位 /// @@ -486,14 +471,12 @@ public class PubSaSeCompareDetailExportZhiGongJianHBPO : PubSaSeCompareDetailExp [ValueMapping("有结算无发运", 2)] [ValueMapping("无结算有发运", 3)] public EnumPubSaSeCompareCategory Category { get; set; } - /// /// Wms发货单号 /// [Display(Name = "Wms发货单号")] [ExporterHeader(DisplayName = "交货单号")] public string WmsBillNum { get; set; } - /// /// 发货日期 /// @@ -537,48 +520,43 @@ public class PubSaSeCompareDetailExportZhiGongJianHBPO : PubSaSeCompareDetailExp [Display(Name = "客户下线时间")] [ExporterHeader(DisplayName = "客户下线时间")] public DateTime CustomerOfflineTime { get; set; } - /// /// 结算数量 /// [Display(Name = "结算数量")] [ExporterHeader(DisplayName = "结算数量")] public decimal SAQty { get; set; } - /// /// 发货数量 /// [Display(Name = "发货数量")] [ExporterHeader(DisplayName = "WMS发货数量")] public decimal SEQty { get; set; } - /// /// 差异数量 /// [ExporterHeader(DisplayName = "差异数量")] public decimal DiffQty => SAQty - SEQty; - /// /// 匹配类型 /// [Display(Name = "匹配类型")] [ExporterHeader(DisplayName = "是否完全匹配")] - public string MateType { get; set; } - + [ValueMapping("是", true)] + [ValueMapping("否", false)] + public bool MateType => DiffQty == 0; /// /// 定价 /// [Display(Name = "定价")] [ExporterHeader(DisplayName = "定价")] public decimal FixPrice { get; set; } - /// /// WMS目标库位 /// [Display(Name = "WMS目标库位")] [ExporterHeader(DisplayName = "WMS目标库位")] public string ToLocCode { get; set; } - /// /// ERP目标库位 /// @@ -670,34 +648,31 @@ public class PubSaSeCompareDetailExportMaiDanJianHBPO : PubSaSeCompareDetailExpo [Display(Name = "发货数量")] [ExporterHeader(DisplayName = "WMS发货数量")] public decimal SEQty { get; set; } - /// /// 差异数量 /// [ExporterHeader(DisplayName = "差异数量")] public decimal DiffQty => SAQty - SEQty; - /// /// 匹配类型 /// [Display(Name = "匹配类型")] [ExporterHeader(DisplayName = "是否完全匹配")] - public string MateType { get; set; } - + [ValueMapping("是", true)] + [ValueMapping("否", false)] + public bool MateType => DiffQty == 0; /// /// 定价 /// [Display(Name = "定价")] [ExporterHeader(DisplayName = "定价")] public decimal FixPrice { get; set; } - /// /// WMS目标库位 /// [Display(Name = "WMS目标库位")] [ExporterHeader(DisplayName = "WMS目标库位")] public string ToLocCode { get; set; } - /// /// ERP目标库位 /// @@ -782,41 +757,37 @@ public class PubSaSeCompareDetailExportBeiJian : PubSaSeCompareDetailExport, IPu [Display(Name = "结算数量")] [ExporterHeader(DisplayName = "结算数量")] public decimal SAQty { get; set; } - /// /// 发货数量 /// [Display(Name = "发货数量")] [ExporterHeader(DisplayName = "WMS发货数量")] public decimal SEQty { get; set; } - /// /// 差异数量 /// [ExporterHeader(DisplayName = "差异数量")] public decimal DiffQty => SAQty - SEQty; - /// /// 匹配类型 /// [Display(Name = "匹配类型")] [ExporterHeader(DisplayName = "是否完全匹配")] - public string MateType { get; set; } - + [ValueMapping("是", true)] + [ValueMapping("否", false)] + public bool MateType => DiffQty == 0; /// /// 定价 /// [Display(Name = "定价")] [ExporterHeader(DisplayName = "定价")] public decimal FixPrice { get; set; } - /// /// WMS目标库位 /// [Display(Name = "WMS目标库位")] [ExporterHeader(DisplayName = "WMS目标库位")] public string ToLocCode { get; set; } - /// /// ERP目标库位 /// @@ -916,7 +887,9 @@ public class PubSaSeCompareDetailExportYinDuJian : PubSaSeCompareDetailExport, I /// [Display(Name = "匹配类型")] [ExporterHeader(DisplayName = "是否完全匹配")] - public string MateType { get; set; } + [ValueMapping("是", true)] + [ValueMapping("否", false)] + public bool MateType => DiffQty == 0; /// /// 定价 /// diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/PubSaSeCompareDapperRepository.cs b/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/PubSaSeCompareDapperRepository.cs index f337e0c0..245c375a 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/PubSaSeCompareDapperRepository.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Report/PubSaSeCompareDapperRepository.cs @@ -45,7 +45,6 @@ public class PubSaSeCompareDapperRepository : DapperRepository private readonly IHubContext _hubContext; - + /// + /// DbContext + /// + private readonly SettleAccountDbContext _settleAccountDbContext; /// /// 替换件关系仓储 /// @@ -63,6 +66,7 @@ namespace SettleAccount.Job.Services.Report /// public PubSaSeCompareExportService( IHubContext hubContext, + SettleAccountDbContext settleAccountDbContext, INormalEfCoreRepository tbRePartsRelationshipRepository, INormalEfCoreRepository pubSeCDetailRepository, PubSaSeCompareDapperRepository pubSaSeCompareDapperRepository, @@ -70,6 +74,7 @@ namespace SettleAccount.Job.Services.Report IObjectMapper objectMapper) { _hubContext = hubContext; + _settleAccountDbContext = settleAccountDbContext; _tbRePartsRelationshipRepository = tbRePartsRelationshipRepository; _pubSeCDetailRepository = pubSeCDetailRepository; _pubSaSeCompareDapperRepository = pubSaSeCompareDapperRepository; @@ -104,7 +109,8 @@ namespace SettleAccount.Job.Services.Report businessTypeDisplayName = attributeOfType.Name; } var filename = exportName.FirstOrDefault(); - var pubSaSeCompareDiffs = _pubSaSeCompareDapperRepository.GetDetailDiffReportList(strBusinessType, version, seStartDateTime, seEndDateTime); + //var pubSaSeCompareDiffs = _pubSaSeCompareDapperRepository.GetDetailDiffReportList(strBusinessType, version, seStartDateTime, seEndDateTime); + var pubSaSeCompareDiffs = GetSaSeCompareData(businessType, int.Parse(version), DateTime.Parse(seStartDateTime), DateTime.Parse(seEndDateTime)); pubSaSeCompareDiffs.ForEach(p => { @@ -155,30 +161,77 @@ namespace SettleAccount.Job.Services.Report var secondMatchHaveSaHaveSes = new List(); #region 二次对比 - ////二次对比(替换零件号) - //var repLUs = notHaveSaHaveSes.Select(t => t.SeLU).Distinct().ToList(); - //var tbRePartsRelationships = _tbRePartsRelationshipRepository.GetListAsync(t => repLUs.Contains(t.RepLU) && t.BusinessType == businessType).Result; + //二次对比(替换无结算有发运数据的厂内零件号) + var repFactoryPartCodes = notHaveSaHaveSes.Select(t => t.FactoryPartCode).Distinct().ToList(); - //tbRePartsRelationships.ForEach(tbRePartsRelationship => - //{ - // notHaveSaHaveSes.FindAll(t => t.SeLU == tbRePartsRelationship.RepLU).ForEach(t => - // { - // t.ReplaceLU = tbRePartsRelationship.LU; - // }); - //}); + var tbRePartsRelationships = _settleAccountDbContext.Set().Where(t => repFactoryPartCodes.Contains(t.LU) && t.BusinessType == businessType).ToList(); + //var tbRePartsRelationshipsOld = _tbRePartsRelationshipRepository.GetListAsync(t => repFactoryPartCodes.Contains(t.LU) && t.BusinessType == businessType).Result; + + tbRePartsRelationships.ForEach(tbRePartsRelationship => + { + notHaveSaHaveSes.FindAll(t => t.FactoryPartCode == tbRePartsRelationship.LU).ForEach(t => + { + t.ReplaceFactoryPartCode = tbRePartsRelationship.RepLU; + t.IsReplace = true; + }); + }); - //var haveSaNotHaveSeLUPNs = haveSaNotHaveSes.Select(t => new { t.ReplaceLU, t.PN }); - //var notHaveSaHaveSeLUPNs = notHaveSaHaveSes.Select(t => new { t.ReplaceLU, t.PN }); - ////二次匹配 匹配上的零件号 - //var secondMatchLUPNs = haveSaNotHaveSeLUPNs.Intersect(notHaveSaHaveSeLUPNs); - //if (secondMatchLUPNs.Any() == true) + //获取二次比对上的数据 + secondMatchHaveSaHaveSes = (from notHaveSaHaveSe in notHaveSaHaveSes + join haveSaNotHaveSe in haveSaNotHaveSes + on new { notHaveSaHaveSe.PN, notHaveSaHaveSe.ReplaceFactoryPartCode } equals new { haveSaNotHaveSe.PN, haveSaNotHaveSe.ReplaceFactoryPartCode } + where notHaveSaHaveSe.IsReplace == true + select new PubSaSeCompareDiff() + { + WmsBillNum = notHaveSaHaveSe.WmsBillNum, + ShippingDate = notHaveSaHaveSe.ShippingDate, + SeqNumber = notHaveSaHaveSe.SeqNumber, + PJISSeqNumber = notHaveSaHaveSe.PJISSeqNumber, + CustomerOfflineTime = haveSaNotHaveSe.CustomerOfflineTime, + SAQty = haveSaNotHaveSe.SAQty, + SEQty = notHaveSaHaveSe.SEQty, + FixPrice = haveSaNotHaveSe.FixPrice, + PN = haveSaNotHaveSe.PN, + ToLocCode = notHaveSaHaveSe.ToLocCode, + ToErpLocCode = notHaveSaHaveSe.ToErpLocCode, + Category = EnumPubSaSeCompareCategory.HaveSaHaveSe, + SeCustomerPartCode = notHaveSaHaveSe.SeCustomerPartCode, + SeFactoryPartCode = notHaveSaHaveSe.SeFactoryPartCode, + SaCustomerPartCode = haveSaNotHaveSe.SaCustomerPartCode, + SaFactoryPartCode = haveSaNotHaveSe.SaFactoryPartCode, + CustomerPartCode = notHaveSaHaveSe.CustomerPartCode, + PartCodeDesc = notHaveSaHaveSe.PartCodeDesc, + FactoryPartCode = notHaveSaHaveSe.FactoryPartCode, + ReplaceFactoryPartCode = notHaveSaHaveSe.ReplaceFactoryPartCode + }).ToList(); + if (secondMatchHaveSaHaveSes.Any()) + { + //二次匹配 匹配上的厂内零件号、PN + var secondMatchFPartCodePNs = secondMatchHaveSaHaveSes.Select(t => new { t.ReplaceFactoryPartCode, t.PN }); + pubSaSeCompareDiffs.RemoveAll(t => secondMatchFPartCodePNs.Contains(new { t.ReplaceFactoryPartCode, t.PN })); + pubSaSeCompareDiffs.AddRange(secondMatchHaveSaHaveSes); + //二次对比比对上的数据入库 + var pubSeCDetailEntitys = _objectMapper.Map, List>(secondMatchHaveSaHaveSes); + _settleAccountDbContext.Set().AddRange(pubSeCDetailEntitys); + //_pubSeCDetailRepository.InsertManyAsync(pubSeCDetailEntitys); + } + + //var haveSaNotHaveSeFPartCodePNs = haveSaNotHaveSes.Select(t => new { t.ReplaceFactoryPartCode, t.PN }); + //var notHaveSaHaveSeFPartCodePNs = notHaveSaHaveSes.Select(t => new { t.ReplaceFactoryPartCode, t.PN }); + ////二次匹配 匹配上的厂内零件号、PN + //var secondMatchFPartCodePNs = haveSaNotHaveSeFPartCodePNs.Intersect(notHaveSaHaveSeFPartCodePNs); + //if (secondMatchFPartCodePNs.Any() == true) //{ - // pubSaSeCompareDiffs.RemoveAll(t => secondMatchLUPNs.Contains(new { t.ReplaceLU, t.PN })); + // pubSaSeCompareDiffs.RemoveAll(t => secondMatchFPartCodePNs.Contains(new { t.ReplaceFactoryPartCode, t.PN })); - // foreach (var secondMatchLUPN in secondMatchLUPNs) + // foreach (var secondMatchFPartCodePN in secondMatchFPartCodePNs) // { - // var haveSaNotHaveSe = haveSaNotHaveSes.FirstOrDefault(t => t.ReplaceLU == secondMatchLUPN.ReplaceLU && t.PN == secondMatchLUPN.PN); - // var notHaveSaHaveSe = notHaveSaHaveSes.FirstOrDefault(t => t.ReplaceLU == secondMatchLUPN.ReplaceLU && t.PN == secondMatchLUPN.PN); + // var haveSaNotHaveSe = haveSaNotHaveSes.FirstOrDefault(t => t.ReplaceFactoryPartCode == secondMatchFPartCodePN.ReplaceFactoryPartCode && t.PN == secondMatchFPartCodePN.PN); + // var notHaveSaHaveSe = notHaveSaHaveSes.FirstOrDefault(t => t.ReplaceFactoryPartCode == secondMatchFPartCodePN.ReplaceFactoryPartCode && t.PN == secondMatchFPartCodePN.PN); + // if (haveSaNotHaveSe != null && notHaveSaHaveSe != null) + // { + + // } // secondMatchHaveSaHaveSes.Add(new PubSaSeCompareDiff() // { // WmsBillNum = notHaveSaHaveSe.WmsBillNum, @@ -202,15 +255,6 @@ namespace SettleAccount.Job.Services.Report // }); // } //} - - ////二次对比比对上的数据入库 - //if (secondMatchHaveSaHaveSes.Count > 0) - //{ - // pubSaSeCompareDiffs.AddRange(secondMatchHaveSaHaveSes); - - // var pubSeCDetailEntitys = _objectMapper.Map, List>(secondMatchHaveSaHaveSes); - // _pubSeCDetailRepository.InsertManyAsync(pubSeCDetailEntitys); - //} #endregion if (string.IsNullOrEmpty(lu) == false) @@ -221,6 +265,7 @@ namespace SettleAccount.Job.Services.Report { pubSaSeCompareDiffs = pubSaSeCompareDiffs.FindAll(p => p.PN == pn); } + pubSaSeCompareDiffs = pubSaSeCompareDiffs.OrderBy(t => t.Category).ToList(); var excelExporter = new ExcelExporter(); #region 根据业务分类转换不同导出Dto @@ -272,6 +317,94 @@ namespace SettleAccount.Job.Services.Report } #region 私有方法 + /// + /// 获取结算与发运比对数据 + /// + public List GetSaSeCompareData(EnumBusinessType businessType, int version, DateTime seStartDateTime, DateTime seEndDateTime) + { + //结算 + var saGroup = from sa in _settleAccountDbContext.Set() + where sa.BusinessType == businessType && sa.Version == version + group sa by new { sa.PN, sa.LU } into groupItem + select new + { + groupItem.Key.PN, + groupItem.Key.LU, + Qty = groupItem.Sum(t => t.Qty), + Price = groupItem.Max(t => t.Price), + SettleDate = groupItem.Max(t => t.SettleDate), + PartCode = groupItem.Max(t => t.PartCode), + }; + //发运 + var seGroup = from se in _settleAccountDbContext.Set() + where se.BusinessType == businessType && se.BillTime >= seStartDateTime && se.BillTime <= seEndDateTime + group se by new { se.PN, se.LU } into groupItem + select new + { + groupItem.Key.PN, + groupItem.Key.LU, + Qty = groupItem.Sum(t => t.Qty), + WmsBillNum = groupItem.Max(t => t.WmsBillNum), + ShippingDate = groupItem.Max(t => t.ShippingDate), + FactoryPartCode = groupItem.Max(t => t.FactoryPartCode), + ToLocCode = groupItem.Max(t => t.ToLocCode), + ToErpLocCode = groupItem.Max(t => t.ToErpLocCode) + }; + //印度件LU对比 + if (businessType == EnumBusinessType.YinDuJian) + { + saGroup = from sa in _settleAccountDbContext.Set() + where sa.BusinessType == businessType && sa.Version == version + group sa by new { sa.LU } into groupItem + select new + { + PN = "", + groupItem.Key.LU, + Qty = groupItem.Sum(t => t.Qty), + Price = groupItem.Max(t => t.Price), + SettleDate = groupItem.Max(t => t.SettleDate), + PartCode = groupItem.Max(t => t.PartCode), + }; + seGroup = from se in _settleAccountDbContext.Set() + where se.BusinessType == businessType && se.BillTime >= seStartDateTime && se.BillTime <= seEndDateTime + group se by new { se.LU } into groupItem + select new + { + PN = "", + groupItem.Key.LU, + Qty = groupItem.Sum(t => t.Qty), + WmsBillNum = groupItem.Max(t => t.WmsBillNum), + ShippingDate = groupItem.Max(t => t.ShippingDate), + FactoryPartCode = groupItem.Max(t => t.FactoryPartCode), + ToLocCode = groupItem.Max(t => t.ToLocCode), + ToErpLocCode = groupItem.Max(t => t.ToErpLocCode) + }; + } + + var saSeCompareList = (from sa in saGroup + join se in seGroup + on new { sa.PN, sa.LU } equals new { se.PN, se.LU } + select new PubSaSeCompareDiff() + { + WmsBillNum = se.WmsBillNum, + ShippingDate = se.ShippingDate, + CustomerOfflineTime = sa.SettleDate, + SAQty = sa.Qty, + SEQty = se.Qty, + FixPrice = sa.Price, + ToLocCode = se.ToLocCode, + ToErpLocCode = se.ToErpLocCode, + SeCustomerPartCode = se.LU, + SeFactoryPartCode = se.FactoryPartCode, + SaCustomerPartCode = sa.LU, + SaFactoryPartCode = sa.PartCode + }).ToList(); + + return saSeCompareList; + } + /// + /// 创建导出文件结构 + /// public ExcelExporter BindExcelExporter(List pubSaSeCompareDetailExports, string businessTypeDisplayName) where T : PubSaSeCompareDetailExport, IPubSaSeCompareDetailExport, new() { //结算核对汇总 @@ -328,8 +461,7 @@ namespace SettleAccount.Job.Services.Report .Append(haveSaNotHaveSeExports, $"{businessTypeDisplayName}有结算无发货明细输出") .SeparateBySheet() - .Append(haveSaNotHaveSeSumExports, $"{businessTypeDisplayName}有结算无发货汇总输出") - .SeparateBySheet(); + .Append(haveSaNotHaveSeSumExports, $"{businessTypeDisplayName}有结算无发货汇总输出"); } private void Notify() diff --git a/code/src/Shared/Win.Sfs.Shared/Filter/FilterExtensions.cs b/code/src/Shared/Win.Sfs.Shared/Filter/FilterExtensions.cs index 51f5fdfa..b1c6c7b9 100644 --- a/code/src/Shared/Win.Sfs.Shared/Filter/FilterExtensions.cs +++ b/code/src/Shared/Win.Sfs.Shared/Filter/FilterExtensions.cs @@ -40,7 +40,7 @@ namespace Win.Sfs.Shared.Filter { if (!typeof(T).GetProperties().Any(o => o.Name.ToLowerInvariant() == filterCondition.Column.ToLowerInvariant())) { - break; + continue; } var tempCondition = CreateLambda(filterCondition); if (condition == null)