diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs
index a45bb22d..da6f8436 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application.Contracts/Entities/BQ/Dtos/PUB_SA_DTO.cs
@@ -162,9 +162,11 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Dtos
///
/// 地点
///
- [Display(Name = "地点")]
- [ImporterHeader(Name = "地点")]
+ [Display(Name = "目标库位")]
+ [ImporterHeader(Name = "目标库位")]
[Required(ErrorMessage = "{0}不能为空")]
+ [ValueMapping("CC004", "CN1")]
+ [ValueMapping("CC172", "CN5")]
public string Place { get; set; }
}
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 4fe6af24..89ecf60d 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
@@ -48,6 +48,7 @@ using Win.Sfs.Shared.RepositoryBase;
using static Dm.parser.LVal;
using static LinqToDB.Sql;
using Win.Sfs.Shared.Filter;
+using Polly;
namespace Win.Sfs.SettleAccount.Entities.BQ
{
@@ -208,7 +209,17 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
invoiceGrps.ForEach(t => t.State = SettleBillState.已提交QAD);
await _exChangeCenterDbContext.SaveChangesAsync().ConfigureAwait(false);
- await _settleAccountDbContext.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) =>
+ {
+ Console.WriteLine($"执行失败,第 {retryCount} 次重试");
+ });
+ await retryPolicyAsync.ExecuteAsync(async () => await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false)).ConfigureAwait(false);
}
await Task.CompletedTask.ConfigureAwait(false);
@@ -355,13 +366,13 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
INVOICE_GRP_DETAIL_DTO entity = new INVOICE_GRP_DETAIL_DTO();
var condition = input.Filters.FirstOrDefault(p => p.Column == "invbillNum");
- if( condition==null )
- {
- input.Filters.Add(new FilterCondition("InvoiceState", "1", EnumFilterAction.Equal, EnumFilterLogic.And));
+ if (condition == null)
+ {
+ input.Filters.Add(new FilterCondition("InvoiceState", "1", EnumFilterAction.Equal, EnumFilterLogic.And));
}
var invs = await _repository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, input.SkipCount).ConfigureAwait(false);
-
+
var m = await _mRepository.GetListByFilterAsync(input.Filters, input.Sorting, int.MaxValue, input.SkipCount).ConfigureAwait(false);
var mdtos = ObjectMapper.Map, List>(m);
@@ -617,7 +628,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
}
-
+
diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs
index 2a6a2bfe..c641c170 100644
--- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs
+++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_SA_SERVICE.cs
@@ -135,7 +135,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
version = pubSaImportRequestDto.Version;
businessType = pubSaImportRequestDto.BusinessType;
site = pubSaImportRequestDto.Site;
- switch (pubSaImportRequestDto.BusinessType)
+ switch (businessType)
{
case EnumBusinessType.ZhiGongJianBBAC:
result = await ImportZhiGongJianBBACAsync(pubSaImportRequestDto.Files).ConfigureAwait(false);
@@ -301,7 +301,29 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
importPubSaDetails = HandleSaDetails(importPubSaDetails);
#region 数据校验
- var checkList = await CheckAsync(importPubSaDetails).ConfigureAwait(false);
+ var place = importPubSaDetails.FirstOrDefault().Place;
+ if (place != "CN1" && place != "CN5")
+ {
+ return new JsonResult(new { Code = 400, Message = $"目标库位值【{place}】无效" });
+ }
+ //数据校验
+ var checkList = new List();
+ //结算分组号
+ var pubSaGroupNums = importPubSaDetails.Select(t => t.GroupNum).Distinct();
+ //已存在的结算分组号
+ var havPubSaGroupNums = (await _pubSaDetailRepository.GetListAsync(t => t.Place == place && pubSaGroupNums.Contains(t.GroupNum)).ConfigureAwait(false)).Select(t => t.GroupNum).Distinct();
+ if (havPubSaGroupNums.Any() == true)
+ {
+ foreach (var item in havPubSaGroupNums)
+ {
+ checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, $"结算分组号{item}已存在", string.Empty));
+ }
+ }
+
+ if (!checkList.Any())
+ {
+ checkList.AddRange(await CheckMaterialRelationshipAsync(importPubSaDetails).ConfigureAwait(false));
+ }
if (checkList.Count > 0)
{
string fileName = await ExportErrorReportAsync(checkList).ConfigureAwait(false);
@@ -404,23 +426,40 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
if (!checkList.Any())
{
//验证客户对应厂内零件号是否存在
- //导入的零件号集合
- var importPubSaLUs = pubSaDetails.Select(t => t.LU).Distinct();
- var materialRelationshipEntitys = await _materialRelationshipRepository.GetListAsync(t => t.BusinessType == businessType && importPubSaLUs.Contains(t.SettleMaterialCode)).ConfigureAwait(false);
- var materialRelationshipEntitySettleMaterialCodes = materialRelationshipEntitys.Select(t => t.SettleMaterialCode).Distinct();
-
- //不存在的客户零件号(差集)
- var noExistSettleMaterialCodes = importPubSaLUs.Except(materialRelationshipEntitySettleMaterialCodes);
- noExistSettleMaterialCodes.ForEach(t =>
- {
- checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, $"客户零件号【{t}】对应厂内零件号系统中不存在", string.Empty));
- });
+ checkList.AddRange(await CheckMaterialRelationshipAsync(pubSaDetails).ConfigureAwait(false));
}
return checkList;
#endregion
}
+ ///
+ /// 数据校验
+ ///
+ ///
+ /// 验证客户-厂内零件号关系是否已存在
+ ///
+ private async Task> CheckMaterialRelationshipAsync(List pubSaDetails)
+ {
+ #region 数据校验
+ //数据校验
+ var checkList = new List();
+ //验证客户对应厂内零件号是否存在
+ //导入的零件号集合
+ var importPubSaLUs = pubSaDetails.Select(t => t.LU).Distinct();
+ var materialRelationshipEntitys = await _materialRelationshipRepository.GetListAsync(t => t.BusinessType == businessType && importPubSaLUs.Contains(t.SettleMaterialCode)).ConfigureAwait(false);
+ var materialRelationshipEntitySettleMaterialCodes = materialRelationshipEntitys.Select(t => t.SettleMaterialCode).Distinct();
+
+ //不存在的客户零件号(差集)
+ var noExistSettleMaterialCodes = importPubSaLUs.Except(materialRelationshipEntitySettleMaterialCodes);
+ noExistSettleMaterialCodes.ForEach(t =>
+ {
+ checkList.Add(new ErrorExportDto(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, $"客户零件号【{t}】对应厂内零件号系统中不存在", string.Empty));
+ });
+ return checkList;
+ #endregion
+ }
+
///
/// 处理结算数据
///