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 d3611ab0..6e2abfac 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 { @@ -117,12 +118,12 @@ namespace Win.Sfs.SettleAccount.Entities.BQ /// 提交到QAD /// /// - /// 已扣减发票提交到QAD - /// 查询状态为已扣减的数据 - /// 判断ParentInvbillNum是否有数据 - /// 有数据查询出对应发票数据状态为已提交QAD(置换成负数据)需要提交到QAD - /// 已扣减的数据提交到QAD - /// 成功提交后修改状态为已提交QAD + /// * 已扣减发票提交到QAD + /// * 查询状态为已扣减的数据 + /// * 判断ParentInvbillNum是否有数据 + /// * 有数据查询出对应发票数据状态为已提交QAD(置换成负数据)需要提交到QAD + /// * 已扣减的数据提交到QAD + /// * 成功提交后修改状态为已提交QAD /// [HttpPost] public virtual async Task SubmitToQad(List invbillNums) @@ -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); @@ -576,11 +587,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ .GroupBy(p => new { p.LU, p.SettleGroupNum }) .Select(p => new JIT_UNSETTLED_DETAIL_DTO { LU = p.Key.LU, GroupNum = p.Key.SettleGroupNum, Qty = p.Sum(itm => itm.Qty.Value) }); entity.JIT_UNSETTLED_DETAIL = unsettledList.ToList().OrderBy(p => p.GroupNum).ThenBy(p => p.LU).ToList(); - - entity.INVOICE_MAP_GROUP =mdtos; - - - } if (first.BusinessType == EnumBusinessType.JisHBPO || first.BusinessType == EnumBusinessType.JisBBAC || first.BusinessType == EnumBusinessType.ZhiGongJianHBPO) { @@ -622,7 +628,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ } - + @@ -744,13 +750,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { _excel.Append(jitunsettle, "未结零件汇总"); } - if (m != null) - { - _excel.Append(m, "发票结算分组对应"); - } - - - } //jis业务,发票分组对应关系,未结数据,调整数据 if (first.BusinessType == EnumBusinessType.JisBBAC || first.BusinessType == EnumBusinessType.JisHBPO || first.BusinessType == EnumBusinessType.ZhiGongJianHBPO) 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 + } + /// /// 处理结算数据 ///