From dfcbfe430bf6a5f40f46f5d9cf8ecd5d3e9359ff Mon Sep 17 00:00:00 2001 From: mahao Date: Mon, 11 Sep 2023 14:34:51 +0800 Subject: [PATCH 1/2] up --- .../MaiDanBBACSaSeCompareExportService.cs | 86 +------ .../MaiDanHBPOSaSeCompareExportService.cs | 86 +------ .../Report/PubSaSeCompareExportService.cs | 237 ++++++------------ .../Report/SaSeCompareExportBaseService.cs | 135 +++++++++- 4 files changed, 209 insertions(+), 335 deletions(-) diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs index f3d83a47..853699be 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs @@ -72,7 +72,8 @@ namespace SettleAccount.Job.Services.Report var seStartDateTime = DateTime.Parse(strSeStartDateTime); var seEndDateTime = DateTime.Parse(strSeEndDateTime); var filename = exportName.FirstOrDefault(); - var pubSaSeCompareDiffs = GetSaSeCompareData(version, seStartDateTime, seEndDateTime); + //var pubSaSeCompareDiffs = GetSaSeCompareData(version, seStartDateTime, seEndDateTime); + var pubSaSeCompareDiffs = GetSaSeCompareDataJis(EnumBusinessType.MaiDanJianBBAC, version, seStartDateTime, seEndDateTime); HandlePubSaSeCompareDiffList(pubSaSeCompareDiffs); @@ -93,6 +94,7 @@ namespace SettleAccount.Job.Services.Report #region 结算数据处理 HandleSaDetails(pubSaSeCompareDiffs, businessType, version); + HandleSaDetailsMain(pubSaSeCompareDiffs, businessType, version); #endregion if (string.IsNullOrEmpty(lu) == false) @@ -115,87 +117,5 @@ namespace SettleAccount.Job.Services.Report Notify(); return id.ToString(); } - - #region 私有方法 - /// - /// 获取结算与发运比对数据 - /// - public List GetSaSeCompareData(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.CustomerPartCodeNoSpace } into groupItem - select new - { - groupItem.Key.PN, - groupItem.Key.CustomerPartCodeNoSpace, - Qty = groupItem.Sum(t => t.Qty), - LU = groupItem.Max(t => t.LU), - 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.CustomerPartCodeNoSpace } into groupItem - select new - { - groupItem.Key.PN, - groupItem.Key.CustomerPartCodeNoSpace, - Qty = groupItem.Sum(t => t.Qty), - LU = groupItem.Max(t => t.LU), - WmsBillNum = groupItem.Max(t => t.WmsBillNum), - ShippingDate = groupItem.Max(t => t.ShippingDate), - FactoryPartCode = groupItem.Max(t => t.FactoryPartCode), - ToLoc = groupItem.Max(t => t.ToLoc), - ErpToLoc = groupItem.Max(t => t.ErpToLoc) - }; - var saSeCompareLeft = from sa in saGroup - join se in seGroup - on new { sa.PN, sa.CustomerPartCodeNoSpace } equals new { se.PN, se.CustomerPartCodeNoSpace } - into temp - from se in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - PN = sa.PN, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLoc, - ToErpLocCode = se.ErpToLoc, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU, - }; - var saSeCompareRight = from se in seGroup - join sa in saGroup - on new { se.PN, se.CustomerPartCodeNoSpace } equals new { sa.PN, sa.CustomerPartCodeNoSpace } - into temp - from sa in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - PN = se.PN, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLoc, - ToErpLocCode = se.ErpToLoc, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU ?? se.LU - }; - var saSeCompareFullJoin = saSeCompareLeft.Union(saSeCompareRight).ToList(); - return saSeCompareFullJoin; - } - #endregion } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs index 42d1f5cf..5bbb8c18 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs @@ -72,7 +72,8 @@ namespace SettleAccount.Job.Services.Report var seStartDateTime = DateTime.Parse(strSeStartDateTime); var seEndDateTime = DateTime.Parse(strSeEndDateTime); var filename = exportName.FirstOrDefault(); - var pubSaSeCompareDiffs = GetSaSeCompareData(version, seStartDateTime, seEndDateTime); + //var pubSaSeCompareDiffs = GetSaSeCompareData(version, seStartDateTime, seEndDateTime); + var pubSaSeCompareDiffs = GetSaSeCompareDataJis(EnumBusinessType.MaiDanJianHBPO, version, seStartDateTime, seEndDateTime); HandlePubSaSeCompareDiffList(pubSaSeCompareDiffs); @@ -93,6 +94,7 @@ namespace SettleAccount.Job.Services.Report #region 结算数据处理 HandleSaDetails(pubSaSeCompareDiffs, businessType, version); + HandleSaDetailsMain(pubSaSeCompareDiffs, businessType, version); #endregion if (string.IsNullOrEmpty(lu) == false) @@ -115,87 +117,5 @@ namespace SettleAccount.Job.Services.Report Notify(); return id.ToString(); } - - #region 私有方法 - /// - /// 获取结算与发运比对数据 - /// - public List GetSaSeCompareData(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.CustomerPartCodeNoSpace } into groupItem - select new - { - groupItem.Key.PN, - groupItem.Key.CustomerPartCodeNoSpace, - Qty = groupItem.Sum(t => t.Qty), - LU = groupItem.Max(t => t.LU), - 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.CustomerPartCodeNoSpace } into groupItem - select new - { - groupItem.Key.PN, - groupItem.Key.CustomerPartCodeNoSpace, - Qty = groupItem.Sum(t => t.Qty), - LU = groupItem.Max(t => t.LU), - WmsBillNum = groupItem.Max(t => t.WmsBillNum), - ShippingDate = groupItem.Max(t => t.ShippingDate), - FactoryPartCode = groupItem.Max(t => t.FactoryPartCode), - ToLoc = groupItem.Max(t => t.ToLoc), - ErpToLoc = groupItem.Max(t => t.ErpToLoc) - }; - var saSeCompareLeft = from sa in saGroup - join se in seGroup - on new { sa.PN, sa.CustomerPartCodeNoSpace } equals new { se.PN, se.CustomerPartCodeNoSpace } - into temp - from se in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - PN = sa.PN, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLoc, - ToErpLocCode = se.ErpToLoc, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU - }; - var saSeCompareRight = from se in seGroup - join sa in saGroup - on new { se.PN, se.LU } equals new { sa.PN, sa.LU } - into temp - from sa in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - PN = se.PN, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLoc, - ToErpLocCode = se.ErpToLoc, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU ?? se.LU - }; - var saSeCompareFullJoin = saSeCompareLeft.Union(saSeCompareRight).ToList(); - return saSeCompareFullJoin; - } - #endregion } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/PubSaSeCompareExportService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/PubSaSeCompareExportService.cs index f2ff3796..5d26eb4c 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/PubSaSeCompareExportService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/PubSaSeCompareExportService.cs @@ -6,6 +6,7 @@ using System.Linq; using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.SignalR; using Microsoft.OpenApi.Extensions; +using SettleAccount.Bases; using SettleAccount.Domain.BQ; using SettleAccount.Job.SignalR; using ShardingCore.Extensions; @@ -34,18 +35,6 @@ namespace SettleAccount.Job.Services.Report /// private readonly SettleAccountDbContext _settleAccountDbContext; /// - /// 替换件关系仓储 - /// - private readonly INormalEfCoreRepository _tbRePartsRelationshipRepository; - /// - /// PUB二次比对仓储 - /// - private readonly INormalEfCoreRepository _pubSeCDetailRepository; - /// - /// Pub结算发运对比Dapper - /// - private readonly PubSaSeCompareDapperRepository _pubSaSeCompareDapperRepository; - /// /// 文件容器 /// private readonly IBlobContainer _fileContainer; @@ -60,16 +49,10 @@ namespace SettleAccount.Job.Services.Report public PubSaSeCompareExportService( IHubContext hubContext, SettleAccountDbContext settleAccountDbContext, - INormalEfCoreRepository tbRePartsRelationshipRepository, - INormalEfCoreRepository pubSeCDetailRepository, - PubSaSeCompareDapperRepository pubSaSeCompareDapperRepository, IBlobContainer fileContainer, IObjectMapper objectMapper) : base(hubContext, settleAccountDbContext) { _settleAccountDbContext = settleAccountDbContext; - _tbRePartsRelationshipRepository = tbRePartsRelationshipRepository; - _pubSeCDetailRepository = pubSeCDetailRepository; - _pubSaSeCompareDapperRepository = pubSaSeCompareDapperRepository; _fileContainer = fileContainer; _objectMapper = objectMapper; } @@ -102,7 +85,7 @@ namespace SettleAccount.Job.Services.Report } var filename = exportName.FirstOrDefault(); //var pubSaSeCompareDiffs = _pubSaSeCompareDapperRepository.GetDetailDiffReportList(strBusinessType, version, seStartDateTime, seEndDateTime); - var pubSaSeCompareDiffs = GetSaSeCompareData(businessType, version, DateTime.Parse(seStartDateTime), DateTime.Parse(seEndDateTime)); + var pubSaSeCompareDiffs = GetSaSeCompareData(businessType, version); HandlePubSaSeCompareDiffList(pubSaSeCompareDiffs); @@ -123,7 +106,6 @@ namespace SettleAccount.Job.Services.Report #region 结算数据处理 HandleSaDetails(pubSaSeCompareDiffs, businessType, version); - HandleSaDetailsMain(pubSaSeCompareDiffs, businessType, version); #endregion @@ -183,99 +165,12 @@ namespace SettleAccount.Job.Services.Report /// /// 获取比对数据 /// - [Obsolete] - private List GetSaSeCompareDataOld(EnumBusinessType businessType, int version, DateTime seStartDateTime, DateTime seEndDateTime) - { - //印度件LU对比 - if (businessType == EnumBusinessType.YinDuJian) - { - return GetSaSeCompareDataYinDu(version, seStartDateTime, seEndDateTime); - } - //结算 - var saGroup = from sa in _settleAccountDbContext.Set() - where sa.BusinessType == businessType && sa.Version == version - group sa by new { sa.PN, sa.CustomerPartCodeNoSpace } into groupItem - select new - { - groupItem.Key.PN, - groupItem.Key.CustomerPartCodeNoSpace, - Qty = groupItem.Sum(t => t.Qty), - LU = groupItem.Max(t => t.LU), - 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.CustomerPartCodeNoSpace } into groupItem - select new - { - groupItem.Key.PN, - groupItem.Key.CustomerPartCodeNoSpace, - Qty = groupItem.Sum(t => t.Qty), - LU = groupItem.Max(t => t.LU), - 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 saSeCompareLeft = from sa in saGroup - join se in seGroup - on new { sa.PN, sa.CustomerPartCodeNoSpace } equals new { se.PN, se.CustomerPartCodeNoSpace } - into temp - from se in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - PN = sa.PN, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLocCode, - ToErpLocCode = se.ToErpLocCode, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU - }; - var saSeCompareRight = from se in seGroup - join sa in saGroup - on new { se.PN, se.CustomerPartCodeNoSpace } equals new { sa.PN, sa.CustomerPartCodeNoSpace } - into temp - from sa in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - PN = se.PN, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLocCode, - ToErpLocCode = se.ToErpLocCode, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU ?? se.LU - }; - - var saSeCompareFullJoin = saSeCompareLeft.Union(saSeCompareRight).ToList(); - return saSeCompareFullJoin; - } - - /// - /// 获取比对数据 - /// - private List GetSaSeCompareData(EnumBusinessType businessType, int version, DateTime seStartDateTime, DateTime seEndDateTime) + private List GetSaSeCompareData(EnumBusinessType businessType, int version) { //印度件LU对比 if (businessType == EnumBusinessType.YinDuJian) { - return GetSaSeCompareDataYinDu(version, seStartDateTime, seEndDateTime); + return GetSaSeCompareDataYinDu(version); } //结算 var saGroup = from sa in _settleAccountDbContext.Set() @@ -289,7 +184,7 @@ namespace SettleAccount.Job.Services.Report Version = groupItem.Max(t => t.Version), LU = groupItem.Max(t => t.LU), SettleDate = groupItem.Max(t => t.SettleDate), - PartCode = groupItem.Max(t => t.PartCode), + PartCode = groupItem.Max(t => t.PartCode) }; var saGroupByVersion = from sa in _settleAccountDbContext.Set() where sa.BusinessType == businessType && sa.Version == version @@ -302,7 +197,7 @@ namespace SettleAccount.Job.Services.Report Version = groupItem.Max(t => t.Version), LU = groupItem.Max(t => t.LU), SettleDate = groupItem.Max(t => t.SettleDate), - PartCode = groupItem.Max(t => t.PartCode), + PartCode = groupItem.Max(t => t.PartCode) }; //发运 var seGroup = from se in _settleAccountDbContext.Set() @@ -384,21 +279,35 @@ namespace SettleAccount.Job.Services.Report /// /// 获取比对数据 /// - private List GetSaSeCompareDataYinDu(int version, DateTime seStartDateTime, DateTime seEndDateTime) + private List GetSaSeCompareDataYinDu(int version) { + //结算 var saGroup = from sa in _settleAccountDbContext.Set() - where sa.BusinessType == EnumBusinessType.YinDuJian && sa.Version == version + where sa.BusinessType == EnumBusinessType.YinDuJian group sa by new { sa.CustomerPartCodeNoSpace } into groupItem select new { groupItem.Key.CustomerPartCodeNoSpace, Qty = groupItem.Sum(t => t.Qty), + Version = groupItem.Max(t => t.Version), LU = groupItem.Max(t => t.LU), SettleDate = groupItem.Max(t => t.SettleDate), - PartCode = groupItem.Max(t => t.PartCode), + PartCode = groupItem.Max(t => t.PartCode) }; + var saGroupByVersion = from sa in _settleAccountDbContext.Set() + where sa.BusinessType == EnumBusinessType.YinDuJian && sa.Version == version + group sa by new { sa.CustomerPartCodeNoSpace } into groupItem + select new + { + groupItem.Key.CustomerPartCodeNoSpace, + Qty = groupItem.Sum(t => t.Qty), + Version = groupItem.Max(t => t.Version), + LU = groupItem.Max(t => t.LU), + SettleDate = groupItem.Max(t => t.SettleDate), + PartCode = groupItem.Max(t => t.PartCode) + }; + //发运 var seGroup = from se in _settleAccountDbContext.Set() - where se.BusinessType == EnumBusinessType.YinDuJian && se.BillTime >= seStartDateTime && se.BillTime <= seEndDateTime group se by new { se.CustomerPartCodeNoSpace } into groupItem select new { @@ -412,48 +321,62 @@ namespace SettleAccount.Job.Services.Report ToErpLocCode = groupItem.Max(t => t.ToErpLocCode) }; - var saSeCompareLeft = from sa in saGroup - join se in seGroup - on sa.CustomerPartCodeNoSpace equals se.CustomerPartCodeNoSpace - into temp - from se in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLocCode, - ToErpLocCode = se.ToErpLocCode, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU - }; - var saSeCompareRight = from se in seGroup - join sa in saGroup - on se.CustomerPartCodeNoSpace equals sa.CustomerPartCodeNoSpace - into temp - from sa in temp.DefaultIfEmpty() - select new SaSeCompareDiff() - { - WmsBillNum = se.WmsBillNum, - ShippingDate = se.ShippingDate, - CustomerOfflineTime = sa.SettleDate, - SAQty = sa.Qty, - SEQty = se.Qty, - ToLocCode = se.ToLocCode, - ToErpLocCode = se.ToErpLocCode, - SeCustomerPartCode = se.CustomerPartCodeNoSpace, - SeFactoryPartCode = se.FactoryPartCode, - SaCustomerPartCode = sa.CustomerPartCodeNoSpace, - SaFactoryPartCode = sa.PartCode, - CustomerPartCode = sa.LU ?? se.LU - }; - var saSeCompareFullJoin = saSeCompareLeft.Union(saSeCompareRight).ToList(); - return saSeCompareFullJoin; + //有结算无发运 + var haveSaNotHaveSeList = (from sa in saGroup + join se in seGroup + on sa.CustomerPartCodeNoSpace equals se.CustomerPartCodeNoSpace + into temp + from se in temp.DefaultIfEmpty() + where se.CustomerPartCodeNoSpace == null + select new SaSeCompareDiff() + { + Version = sa.Version, + CustomerOfflineTime = sa.SettleDate, + SAQty = sa.Qty, + SaCustomerPartCode = sa.CustomerPartCodeNoSpace, + SaFactoryPartCode = sa.PartCode, + CustomerPartCode = sa.LU + }).ToList(); + //无结算有发运 + var notHaveSaHaveSeList = (from se in seGroup + join sa in saGroup + on se.CustomerPartCodeNoSpace equals sa.CustomerPartCodeNoSpace + into temp + from sa in temp.DefaultIfEmpty() + where sa.CustomerPartCodeNoSpace == null + select new SaSeCompareDiff() + { + WmsBillNum = se.WmsBillNum, + ShippingDate = se.ShippingDate, + SEQty = se.Qty, + ToLocCode = se.ToLocCode, + ToErpLocCode = se.ToErpLocCode, + SeCustomerPartCode = se.CustomerPartCodeNoSpace, + SeFactoryPartCode = se.FactoryPartCode, + CustomerPartCode = se.LU + }).ToList(); + + //有结算有发运 + var haveSaHaveSeList = (from sa in saGroupByVersion + from se in seGroup + where sa.CustomerPartCodeNoSpace == se.CustomerPartCodeNoSpace + select new SaSeCompareDiff() + { + Version = sa.Version, + WmsBillNum = se.WmsBillNum, + ShippingDate = se.ShippingDate, + CustomerOfflineTime = sa.SettleDate, + SAQty = sa.Qty, + SEQty = se.Qty, + ToLocCode = se.ToLocCode, + ToErpLocCode = se.ToErpLocCode, + SeCustomerPartCode = se.CustomerPartCodeNoSpace, + SeFactoryPartCode = se.FactoryPartCode, + SaCustomerPartCode = sa.CustomerPartCodeNoSpace, + SaFactoryPartCode = sa.PartCode, + CustomerPartCode = sa.LU + }).ToList(); + return haveSaHaveSeList.Union(haveSaNotHaveSeList).Union(notHaveSaHaveSeList).ToList(); } #endregion } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SaSeCompareExportBaseService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SaSeCompareExportBaseService.cs index 4ab4e2b9..7e660bcc 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SaSeCompareExportBaseService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/SaSeCompareExportBaseService.cs @@ -1,10 +1,10 @@ +using System; using System.Collections.Generic; using System.Linq; using EFCore.BulkExtensions; using Magicodes.ExporterAndImporter.Core.Extension; using Magicodes.ExporterAndImporter.Excel; using Microsoft.AspNetCore.SignalR; -using Microsoft.EntityFrameworkCore; using SettleAccount.Bases; using SettleAccount.Domain.BQ; using SettleAccount.Job.SignalR; @@ -35,9 +35,120 @@ namespace SettleAccount.Job.Services.Report _settleAccountDbContext = settleAccountDbContext; } - public virtual void HandlePubSaSeCompareDiffList(List pubSaSeCompareDiffs) + /// + /// 获取结算、发运比对数据 + /// + public List GetSaSeCompareDataJis(EnumBusinessType businessType, int version, DateTime seStartDateTime, DateTime seEndDateTime) + where TSaDetail : SA_BASE + where TSeDetail : JisSeBase + { + //结算 + var saGroup = from sa in _settleAccountDbContext.Set() + where sa.BusinessType == businessType + group sa by new { sa.PN, sa.CustomerPartCodeNoSpace } into groupItem + select new + { + groupItem.Key.PN, + groupItem.Key.CustomerPartCodeNoSpace, + Qty = groupItem.Sum(t => t.Qty), + Version = groupItem.Max(t => t.Version), + LU = groupItem.Max(t => t.LU), + SettleDate = groupItem.Max(t => t.SettleDate), + PartCode = groupItem.Max(t => t.PartCode) + }; + var saGroupByVersion = from sa in _settleAccountDbContext.Set() + where sa.BusinessType == businessType && sa.Version == version + group sa by new { sa.PN, sa.CustomerPartCodeNoSpace } into groupItem + select new + { + groupItem.Key.PN, + groupItem.Key.CustomerPartCodeNoSpace, + Qty = groupItem.Sum(t => t.Qty), + Version = groupItem.Max(t => t.Version), + LU = groupItem.Max(t => t.LU), + SettleDate = groupItem.Max(t => t.SettleDate), + PartCode = groupItem.Max(t => t.PartCode) + }; + //发运 + var seGroup = from se in _settleAccountDbContext.Set() + group se by new { se.PN, se.CustomerPartCodeNoSpace } into groupItem + select new + { + groupItem.Key.PN, + groupItem.Key.CustomerPartCodeNoSpace, + Qty = groupItem.Sum(t => t.Qty), + LU = groupItem.Max(t => t.LU), + WmsBillNum = groupItem.Max(t => t.WmsBillNum), + ShippingDate = groupItem.Max(t => t.ShippingDate), + FactoryPartCode = groupItem.Max(t => t.FactoryPartCode), + ToLocCode = groupItem.Max(t => t.ToLoc), + ToErpLocCode = groupItem.Max(t => t.ErpToLoc) + }; + + //有结算无发运 + var haveSaNotHaveSeList = (from sa in saGroup + join se in seGroup + on new { sa.PN, sa.CustomerPartCodeNoSpace } equals new { se.PN, se.CustomerPartCodeNoSpace } + into temp + from se in temp.DefaultIfEmpty() + where se.PN == null + select new SaSeCompareDiff() + { + Version = sa.Version, + CustomerOfflineTime = sa.SettleDate, + PN = sa.PN, + SAQty = sa.Qty, + SaCustomerPartCode = sa.CustomerPartCodeNoSpace, + SaFactoryPartCode = sa.PartCode, + CustomerPartCode = sa.LU + }).ToList(); + //无结算有发运 + var notHaveSaHaveSeList = (from se in seGroup + join sa in saGroup + on new { se.PN, se.CustomerPartCodeNoSpace } equals new { sa.PN, sa.CustomerPartCodeNoSpace } + into temp + from sa in temp.DefaultIfEmpty() + where sa.PN == null + select new SaSeCompareDiff() + { + WmsBillNum = se.WmsBillNum, + ShippingDate = se.ShippingDate, + PN = se.PN, + SEQty = se.Qty, + ToLocCode = se.ToLocCode, + ToErpLocCode = se.ToErpLocCode, + SeCustomerPartCode = se.CustomerPartCodeNoSpace, + SeFactoryPartCode = se.FactoryPartCode, + CustomerPartCode = se.LU + }).ToList(); + + //有结算有发运 + var haveSaHaveSeList = (from sa in saGroupByVersion + from se in seGroup + where sa.PN == se.PN && sa.CustomerPartCodeNoSpace == se.CustomerPartCodeNoSpace + select new SaSeCompareDiff() + { + Version = sa.Version, + WmsBillNum = se.WmsBillNum, + ShippingDate = se.ShippingDate, + CustomerOfflineTime = sa.SettleDate, + PN = sa.PN, + SAQty = sa.Qty, + SEQty = se.Qty, + ToLocCode = se.ToLocCode, + ToErpLocCode = se.ToErpLocCode, + SeCustomerPartCode = se.CustomerPartCodeNoSpace, + SeFactoryPartCode = se.FactoryPartCode, + SaCustomerPartCode = sa.CustomerPartCodeNoSpace, + SaFactoryPartCode = sa.PartCode, + CustomerPartCode = sa.LU + }).ToList(); + return haveSaHaveSeList.Union(haveSaNotHaveSeList).Union(notHaveSaHaveSeList).ToList(); + } + + public virtual void HandlePubSaSeCompareDiffList(List saSeCompareDiffs) { - pubSaSeCompareDiffs.ForEach(p => + saSeCompareDiffs.ForEach(p => { p.Category = (string.IsNullOrEmpty(p.SaCustomerPartCode), string.IsNullOrEmpty(p.SeCustomerPartCode)) switch { @@ -77,16 +188,16 @@ namespace SettleAccount.Job.Services.Report /// /// 二次比对 /// - public virtual List HandleSecondCompare(List pubSaSeCompareDiffs, EnumBusinessType businessType) + public virtual List HandleSecondCompare(List saSeCompareDiffs, EnumBusinessType businessType) { //二次匹配上的记录 var secondMatchHaveSaHaveSes = new List(); //有结算无发运 和 无结算有发运 - var haveSaNotHaveSeUnionNotHaveSaHaveSes = pubSaSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaNotHaveSe || t.Category == EnumPubSaSeCompareCategory.NotHaveSaHaveSe); + var haveSaNotHaveSeUnionNotHaveSaHaveSes = saSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaNotHaveSe || t.Category == EnumPubSaSeCompareCategory.NotHaveSaHaveSe); //有结算无发运 - var haveSaNotHaveSes = pubSaSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaNotHaveSe); + var haveSaNotHaveSes = saSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaNotHaveSe); //无结算有发运 - var notHaveSaHaveSes = pubSaSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.NotHaveSaHaveSe); + var notHaveSaHaveSes = saSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.NotHaveSaHaveSe); //二次对比(替换发运数据的厂内零件号) var repFactoryPartCodes = haveSaNotHaveSeUnionNotHaveSaHaveSes.Select(t => t.FactoryPartCode).Distinct().ToList(); @@ -133,12 +244,12 @@ namespace SettleAccount.Job.Services.Report /// 结算数据处理 /// 写入库位、替换零件号 /// - public virtual void HandleSaDetails(List pubSaSeCompareDiffs, EnumBusinessType businessType, int version) + public virtual void HandleSaDetails(List saSeCompareDiffs, EnumBusinessType businessType, int version) where TCanSa : SA_CAN_BASE where TNotSa : SA_NOT_BASE { //写入库位、替换零件号 - var haveSaHaveSes = pubSaSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaHaveSe); + var haveSaHaveSes = saSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaHaveSe); if (haveSaHaveSes.Any()) { //可结算单 @@ -174,12 +285,12 @@ namespace SettleAccount.Job.Services.Report } /// - /// 处理发运数据 + /// 处理结算数据 /// 结算、发运对比上的数据修改结算数据状态 /// - public virtual void HandleSaDetailsMain(List pubSaSeCompareDiffs, EnumBusinessType businessType, int version) where T : SA_BASE + public virtual void HandleSaDetailsMain(List saSeCompareDiffs, EnumBusinessType businessType, int version) where T : SA_BASE { - var haveSaHaveSes = pubSaSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaHaveSe); + var haveSaHaveSes = saSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.HaveSaHaveSe); if (haveSaHaveSes.Any()) { //结算详情 From ee68f0af2e971ab8647b41bb182bd37703754f68 Mon Sep 17 00:00:00 2001 From: mahao Date: Mon, 11 Sep 2023 14:35:30 +0800 Subject: [PATCH 2/2] up --- .../Services/Report/MaiDanBBACSaSeCompareExportService.cs | 1 - .../Services/Report/MaiDanHBPOSaSeCompareExportService.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs index 853699be..66c8f827 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanBBACSaSeCompareExportService.cs @@ -72,7 +72,6 @@ namespace SettleAccount.Job.Services.Report var seStartDateTime = DateTime.Parse(strSeStartDateTime); var seEndDateTime = DateTime.Parse(strSeEndDateTime); var filename = exportName.FirstOrDefault(); - //var pubSaSeCompareDiffs = GetSaSeCompareData(version, seStartDateTime, seEndDateTime); var pubSaSeCompareDiffs = GetSaSeCompareDataJis(EnumBusinessType.MaiDanJianBBAC, version, seStartDateTime, seEndDateTime); HandlePubSaSeCompareDiffList(pubSaSeCompareDiffs); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs index 5bbb8c18..a443cf23 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Job/Services/Report/MaiDanHBPOSaSeCompareExportService.cs @@ -72,7 +72,6 @@ namespace SettleAccount.Job.Services.Report var seStartDateTime = DateTime.Parse(strSeStartDateTime); var seEndDateTime = DateTime.Parse(strSeEndDateTime); var filename = exportName.FirstOrDefault(); - //var pubSaSeCompareDiffs = GetSaSeCompareData(version, seStartDateTime, seEndDateTime); var pubSaSeCompareDiffs = GetSaSeCompareDataJis(EnumBusinessType.MaiDanJianHBPO, version, seStartDateTime, seEndDateTime); HandlePubSaSeCompareDiffList(pubSaSeCompareDiffs);