diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDetailReportMaiDanJianBBAC.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDetailReportMaiDanJianBBAC.cs
index ab47a201..e559a40f 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDetailReportMaiDanJianBBAC.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDetailReportMaiDanJianBBAC.cs
@@ -16,5 +16,11 @@ namespace Win.Sfs.SettleAccount.Reports
[Display(Name = "生产码")]
[ExporterHeader(DisplayName = "索引号")]
public override string PN { get; set; }
+ ///
+ /// 生产码类型
+ ///
+ [Display(Name = "生产码类型")]
+ [ExporterHeader(DisplayName = "生产码类型")]
+ public string CodeType { get; set; }
}
}
diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDiff.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDiff.cs
index 71634a42..49561c69 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDiff.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Domain/Reports/SaSeCompareDiff.cs
@@ -122,6 +122,10 @@ namespace Win.Sfs.SettleAccount.Reports
/// 是否更新匹配类型
///
public bool IsUpdateMappingType { get; set; } = true;
+ ///
+ /// 生产码类型
+ ///
+ public string CodeType { get; set; }
}
///
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 06c042c0..7259bb52 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
@@ -1,18 +1,11 @@
using System;
-using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
-using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Linq.Dynamic.Core;
-using System.Runtime.CompilerServices;
-using EFCore.BulkExtensions;
-using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.SignalR;
using Microsoft.OpenApi.Extensions;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
-using SettleAccount.Bases;
using SettleAccount.Domain.BQ;
using SettleAccount.Job.SignalR;
using Shouldly;
@@ -80,7 +73,8 @@ namespace SettleAccount.Job.Services.Report
var seStartDateTime = DateTime.Parse(strSeStartDateTime);
var seEndDateTime = DateTime.Parse(strSeEndDateTime);
var filename = exportName.FirstOrDefault();
- var pubSaSeCompareDiffs = GetSaSeCompareDataJis(EnumBusinessType.MaiDanJianBBAC, version, seStartDateTime, seEndDateTime);
+ //var pubSaSeCompareDiffs = GetSaSeCompareDataJis(EnumBusinessType.MaiDanJianBBAC, version, seStartDateTime, seEndDateTime);
+ var pubSaSeCompareDiffs = GetSaSeCompareDataJis(version, seStartDateTime, seEndDateTime);
HandlePubSaSeCompareDiffList(pubSaSeCompareDiffs);
@@ -130,6 +124,141 @@ namespace SettleAccount.Job.Services.Report
return id.ToString();
}
+ ///
+ /// 获取结算、发运比对数据
+ ///
+ ///
+ /// 获取全量有结算无发运的数据
+ /// 获取全量无结算有发运的数据
+ /// 获取当期有结算有发运的数据
+ ///
+ public List GetSaSeCompareDataJis(int version, DateTime seStartDateTime, DateTime seEndDateTime)
+ {
+ //结算
+ 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),
+ CodeType = groupItem.Max(t => t.ProductionCodeType)
+ };
+ var saGroupByMappingType = from sa in _settleAccountDbContext.Set()
+ where sa.BusinessType == businessType && sa.MappingType == EnumMappingType.None
+ 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),
+ CodeType = groupItem.Max(t => t.ProductionCodeType)
+ };
+ 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),
+ CodeType = groupItem.Max(t => t.ProductionCodeType)
+ };
+ //发运
+ 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.ToLoc),
+ ToErpLocCode = groupItem.Max(t => t.ErpToLoc),
+ CodeType = groupItem.Max(t => t.CodeType)
+ };
+
+ //有结算无发运
+ var haveSaNotHaveSeList = (from sa in saGroupByMappingType
+ 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,
+ CodeType = sa.CodeType
+ }).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,
+ CodeType = se.CodeType
+ }).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,
+ CodeType = sa.CodeType
+ }).ToList();
+ return haveSaHaveSeList.Union(haveSaNotHaveSeList).Union(notHaveSaHaveSeList).ToList();
+ }
+
///
/// 三次比对
///
@@ -149,16 +278,18 @@ namespace SettleAccount.Job.Services.Report
//无结算有发运
var notHaveSaHaveSes = saSeCompareDiffs.FindAll(t => t.Category == EnumPubSaSeCompareCategory.NotHaveSaHaveSe);
- var haveSaNotHaveSeHashCodes = haveSaNotHaveSes.OrderBy(t => t.CustomerPartCode).GroupBy(t => t.PN).Select(t => new
+ var haveSaNotHaveSeHashCodes = haveSaNotHaveSes.OrderBy(t => t.CustomerPartCode).GroupBy(t => new { t.CodeType, t.PN }).Select(t => new
{
- PN = t.Key,
+ t.Key.CodeType,
+ t.Key.PN,
PartCodeHashCode = t.Select(t => t.CustomerPartCode).Aggregate((current, index) => $"{current};{index}").GetHashCode(),
QtyHashCode = t.Select(t => t.SAQty.ToString()).Aggregate((current, index) => $"{current};{index}")
}).ToList();
- var notHaveSaHaveSeHashCodes = notHaveSaHaveSes.OrderBy(t => t.CustomerPartCode).GroupBy(t => t.PN).Select(t => new
+ var notHaveSaHaveSeHashCodes = notHaveSaHaveSes.OrderBy(t => t.CustomerPartCode).GroupBy(t => new { t.CodeType, t.PN }).Select(t => new
{
- PN = t.Key,
+ t.Key.CodeType,
+ t.Key.PN,
PartCodeHashCode = t.Select(t => t.CustomerPartCode).Aggregate((current, index) => $"{current};{index}").GetHashCode(),
QtyHashCode = t.Select(t => t.SEQty.ToString()).Aggregate((current, index) => $"{current};{index}")
}).ToList();
@@ -168,7 +299,7 @@ namespace SettleAccount.Job.Services.Report
haveSaNotHaveSeHashCodes.ForEach(haveSaNotHaveSeHashCode =>
{
- var matchPN = notHaveSaHaveSeHashCodes.FirstOrDefault(t => t.PartCodeHashCode == haveSaNotHaveSeHashCode.PartCodeHashCode && t.QtyHashCode == haveSaNotHaveSeHashCode.QtyHashCode && matchPNs.ContainsKey(t.PN) == false);
+ var matchPN = notHaveSaHaveSeHashCodes.FirstOrDefault(t => t.CodeType == haveSaNotHaveSeHashCode.CodeType && t.PartCodeHashCode == haveSaNotHaveSeHashCode.PartCodeHashCode && t.QtyHashCode == haveSaNotHaveSeHashCode.QtyHashCode && matchPNs.ContainsKey(t.PN) == false);
if (matchPN != null)
{
@@ -204,7 +335,8 @@ namespace SettleAccount.Job.Services.Report
PartCodeDesc = haveSaNotHaveSe.PartCodeDesc,
FactoryPartCode = haveSaNotHaveSe.FactoryPartCode,
ReplaceFactoryPartCode = haveSaNotHaveSe.ReplaceFactoryPartCode,
- IsUpdateMappingType = false
+ IsUpdateMappingType = false,
+ CodeType = haveSaNotHaveSe.CodeType
}).ToList();
threeMatchHaveSaHaveSes.AddRange(threeMatchHaveSaHaveSesItem);
}