From b129d9bd29fc381bc5ccc6bca9da8bd284d23cd9 Mon Sep 17 00:00:00 2001 From: mahao Date: Thu, 31 Aug 2023 13:57:56 +0800 Subject: [PATCH] =?UTF-8?q?JISHBPO=E5=90=8C=E6=AD=A5=E5=8F=91=E8=BF=90?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=AF=84=E5=94=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/BQ/Syncs/HandSeSyncAppService.cs | 4 +- .../BQ/Syncs/JisBBACSeSyncAppService.cs | 12 +- .../BQ/Syncs/JisBBACSeSyncBaseAppService.cs | 202 ++++++++---------- .../BQ/Syncs/JisHBPOSeSyncAppService.cs | 11 +- .../BQ/Syncs/JisHBPOSeSyncBaseAppService.cs | 198 ++++++++--------- .../Entities/BQ/Syncs/JitSeSyncAppService.cs | 10 +- .../BQ/Syncs/MaiDanBBACSeSyncAppService.cs | 12 +- .../BQ/Syncs/MaiDanHBPOSeSyncAppService.cs | 10 +- .../Entities/BQ/Syncs/SeSyncExtendManager.cs | 2 +- 9 files changed, 189 insertions(+), 272 deletions(-) diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/HandSeSyncAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/HandSeSyncAppService.cs index 35b19fd1..f88aa7b5 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/HandSeSyncAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/HandSeSyncAppService.cs @@ -32,7 +32,7 @@ public class HandSeSyncAppService : ApplicationService public virtual async Task SyncAsync([FromBody] EnumBusinessType businessType) { using var scope = this._applicationServices.CreateScope(); - IInvocable jitSeSyncAppService = businessType switch + IInvocable seSyncAppService = businessType switch { EnumBusinessType.JisBBAC => scope.ServiceProvider.GetRequiredService(), EnumBusinessType.JisHBPO => scope.ServiceProvider.GetRequiredService(), @@ -44,6 +44,6 @@ public class HandSeSyncAppService : ApplicationService EnumBusinessType.YinDuJian => scope.ServiceProvider.GetRequiredService(), _ => throw new ArgumentOutOfRangeException(nameof(businessType), $"Not expected direction value: {businessType}"), }; - await jitSeSyncAppService.Invoke().ConfigureAwait(false); + await seSyncAppService.Invoke().ConfigureAwait(false); } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncAppService.cs index 3ff636a0..a9be0342 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncAppService.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using SettleAccount.Domain.BQ; -using Win.Sfs.SettleAccount.Entities.BQ.Managers; +using Volo.Abp.Uow; using Win.Sfs.SettleAccount.Entities.BQ.Vmi; using Win.Sfs.SettleAccount.EntityFrameworkCore; -using Win.Sfs.Shared.RepositoryBase; namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs; @@ -24,11 +22,8 @@ public class JisBBACSeSyncAppService : JisBBACSeSyncBaseAppService, IJobService public JisBBACSeSyncAppService( WMSBJBMPTDbContext wmsBJBMPTContext, SettleAccountDbContext settleAccountDbContext, - INormalEfCoreRepository syncPositionFlagRepository, - INormalEfCoreRepository jisSeDetailRepository, - MaterialRelationshipManager materialRelationshipManager, - VmiAppService vmiService - ) : base(wmsBJBMPTContext, settleAccountDbContext, syncPositionFlagRepository, jisSeDetailRepository, materialRelationshipManager, vmiService) + SeSyncExtendManager syncExtendManager + ) : base(wmsBJBMPTContext, settleAccountDbContext, syncExtendManager) { base.SeSyncConfigInfo = new SeSyncConfig() { @@ -43,6 +38,7 @@ public class JisBBACSeSyncAppService : JisBBACSeSyncBaseAppService, IJobService }; } + [UnitOfWork(IsDisabled = true)] public async Task Invoke(IServiceProvider serviceProvider) { await this.Invoke().ConfigureAwait(false); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncBaseAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncBaseAppService.cs index 65fa1450..4824580e 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncBaseAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisBBACSeSyncBaseAppService.cs @@ -1,14 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; using System.Threading.Tasks; using Coravel.Invocable; using EFCore.BulkExtensions; +using LinqToDB; using Microsoft.AspNetCore.Mvc; using SettleAccount.Domain.BQ; using Volo.Abp.Application.Services; -using Win.Sfs.SettleAccount.Entities.BQ.Managers; using Win.Sfs.SettleAccount.EntityFrameworkCore; using Win.Sfs.SettleAccount.MaterialRelationships; using Win.Sfs.Shared.RepositoryBase; @@ -25,28 +24,14 @@ public class JisBBACSeSyncBaseAppService : ApplicationService, IInvocable /// WMS数据上下文 /// private readonly WMSBJBMPTDbContext _wmsBJBMPTContext; - /// /// 数据上下文 /// private readonly SettleAccountDbContext _settleAccountDbContext; - /// - /// 同步位置标记 + /// 发运同步扩展 /// - private readonly INormalEfCoreRepository _syncPositionFlagRepository; - - /// - /// Jis发运数据仓储 - /// - private readonly INormalEfCoreRepository _jisSeDetailRepository; - - /// - /// 客户零件关系领域 - /// - private readonly MaterialRelationshipManager _materialRelationshipManager; - - //private readonly IVmiService _vmiService; + private readonly SeSyncExtendManager _syncExtendManager; /// /// 构造 @@ -54,17 +39,11 @@ public class JisBBACSeSyncBaseAppService : ApplicationService, IInvocable public JisBBACSeSyncBaseAppService( WMSBJBMPTDbContext wmsBJBMPTContext, SettleAccountDbContext settleAccountDbContext, - INormalEfCoreRepository syncPositionFlagRepository, - INormalEfCoreRepository jisSeDetailRepository, - MaterialRelationshipManager materialRelationshipManager, - VmiAppService vmiService) + SeSyncExtendManager syncExtendManager) { _wmsBJBMPTContext = wmsBJBMPTContext; _settleAccountDbContext = settleAccountDbContext; - _syncPositionFlagRepository = syncPositionFlagRepository; - _jisSeDetailRepository = jisSeDetailRepository; - _materialRelationshipManager = materialRelationshipManager; - //_vmiService = vmiService; + _syncExtendManager = syncExtendManager; } /// @@ -80,7 +59,6 @@ public class JisBBACSeSyncBaseAppService : ApplicationService, IInvocable return; } await SyncJitRecordAsync().ConfigureAwait(false); - await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false); await SyncJisRecordAsync().ConfigureAwait(false); } @@ -97,53 +75,27 @@ public class JisBBACSeSyncBaseAppService : ApplicationService, IInvocable var deliverSubBillTypes = SeSyncConfigInfo.SyncDeliverSubBillTypes; //业务类别 var businessType = SeSyncConfigInfo.BusinessType; - - Expression> predicate = (t) => t.DeliverBillType == deliverBillType && deliverSubBillTypes.Contains(t.DeliverSubBillType); - var syncPositionFlag = await _syncPositionFlagRepository.FindAsync(t => t.TableName == syncTableName).ConfigureAwait(false); - if (syncPositionFlag != null) - { - predicate = (t) => t.UID > int.Parse(syncPositionFlag.Position) && t.DeliverBillType == deliverBillType && deliverSubBillTypes.Contains(t.DeliverSubBillType); - } - - //WMS发运记录 - var wmsSeRecords = _wmsBJBMPTContext.TM_BJBMPT_JIT_RECORD.Where(predicate).OrderBy(b => b.UID).Take(100000).ToList(); - var jisSeDetails = ObjectMapper.Map, List>(wmsSeRecords); - if (jisSeDetails.Any()) + var seed = 0; + while (seed < 10) { - //客户零件号和厂内零件号 - var luRePartCodes = jisSeDetails.Where(t => !string.IsNullOrEmpty(t.LU) && !string.IsNullOrEmpty(t.FactoryPartCode)).Select(t => new { t.LU, t.FactoryPartCode }).Distinct().ToList(); - if (luRePartCodes.Any()) + seed++; + var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); + var syncPosition = syncPositionFlag?.Position ?? "0"; + + //WMS发运记录 + var wmsSeRecords = _wmsBJBMPTContext.TM_BJBMPT_JIT_RECORD + .Where(t => t.UID > int.Parse(syncPosition)) + .Where(t => t.DeliverBillType == deliverBillType) + .Where(t => deliverSubBillTypes.Contains(t.DeliverSubBillType)) + .OrderBy(b => b.UID).Take(100_000).ToList(); + var jisSeDetails = ObjectMapper.Map, List>(wmsSeRecords); + if (jisSeDetails.Any()) { - var materialRelationships = luRePartCodes.Select(t => new MaterialRelationship(GuidGenerator.Create(), t.FactoryPartCode, "", t.LU, businessType)); - await this.AddNewMaterialRelationships(materialRelationships).ConfigureAwait(false); - } - - jisSeDetails.ForEach(t => - { - t.SetId(GuidGenerator.Create()); - t.BusinessType = businessType; - t.CustomerPartCodeNoSpace = t.LU.Replace(" ", ""); - t.KeyCode = t.PN + t.LU; - if (t.BillTime != null) - { - t.Version = int.Parse(t.BillTime?.ToString("yyyyMM")); - } - }); - await _settleAccountDbContext.BulkInsertAsync(jisSeDetails).ConfigureAwait(false); - - if (syncPositionFlag != null) - { - syncPositionFlag.Position = wmsSeRecords.Last().UID.ToString(); - await _syncPositionFlagRepository.UpdateAsync(syncPositionFlag).ConfigureAwait(false); + await SeDataPutInStorageAsync(jisSeDetails, false).ConfigureAwait(false); } else { - syncPositionFlag = new SyncPositionFlag() - { - TableName = syncTableName, - Position = wmsSeRecords.Last().UID.ToString() - }; - await _syncPositionFlagRepository.InsertAsync(syncPositionFlag).ConfigureAwait(false); + break; } } } @@ -161,74 +113,90 @@ public class JisBBACSeSyncBaseAppService : ApplicationService, IInvocable var deliverSubBillTypes = SeSyncConfigInfo.SyncDeliverSubBillTypes; //业务类别 var businessType = SeSyncConfigInfo.BusinessType; + var seed = 0; + while (seed < 10) + { + seed++; + var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); + var syncPosition = syncPositionFlag?.Position ?? "0"; + + //WMS发运记录 + var wmsSeRecords = _wmsBJBMPTContext.TM_BJBMPT_JIS_RECORD + .Where(t => t.UID > int.Parse(syncPosition)) + .Where(t => t.DeliverBillType == deliverBillType) + .Where(t => deliverSubBillTypes.Contains(t.DeliverSubBillType)) + .OrderBy(b => b.UID).Take(100_000).ToList(); + var jisSeDetails = ObjectMapper.Map, List>(wmsSeRecords); + if (jisSeDetails.Any()) + { + await SeDataPutInStorageAsync(jisSeDetails, true).ConfigureAwait(false); + } + else + { + break; + } + } + } + + /// + /// 发运数据入库 + /// + private async Task SeDataPutInStorageAsync(List seDetails, bool isJisTable) + { + //同步表名称 + var syncTableName = isJisTable ? SeSyncConfigInfo.SyncTableName + + "_Jis" : SeSyncConfigInfo.SyncTableName + "_Jit"; + //业务类别 + var businessType = SeSyncConfigInfo.BusinessType; - Expression> predicate = (t) => t.DeliverBillType == deliverBillType && deliverSubBillTypes.Contains(t.DeliverSubBillType); - var syncPositionFlag = await _syncPositionFlagRepository.FindAsync(t => t.TableName == syncTableName).ConfigureAwait(false); - if (syncPositionFlag != null) + //客户零件号和厂内零件号 + var luRePartCodes = seDetails.Where(t => !string.IsNullOrEmpty(t.LU) && !string.IsNullOrEmpty(t.FactoryPartCode)).Select(t => new { t.LU, t.FactoryPartCode }).Distinct().ToList(); + if (luRePartCodes.Any()) { - predicate = (t) => t.UID > int.Parse(syncPositionFlag.Position) && t.DeliverBillType == deliverBillType && deliverSubBillTypes.Contains(t.DeliverSubBillType); + var materialRelationships = luRePartCodes.Select(t => new MaterialRelationship(GuidGenerator.Create(), t.FactoryPartCode, "", t.LU, businessType)); + await _syncExtendManager.AddNewMaterialRelationshipsAsync(materialRelationships).ConfigureAwait(false); } - //WMS发运数据 - var wmsRecords = _wmsBJBMPTContext.TM_BJBMPT_JIS_RECORD.Where(predicate).OrderBy(b => b.UID).Take(100000).ToList(); - var jisSeDetails = ObjectMapper.Map, List>(wmsRecords); - if (jisSeDetails.Any()) + seDetails.ForEach(t => { - //客户零件号和厂内零件号 - var luRePartCodes = jisSeDetails.Where(t => !string.IsNullOrEmpty(t.LU) && !string.IsNullOrEmpty(t.FactoryPartCode)).Select(t => new { t.LU, t.FactoryPartCode }).Distinct().ToList(); - if (luRePartCodes.Any()) + t.SetId(GuidGenerator.Create()); + t.BusinessType = businessType; + t.CustomerPartCodeNoSpace = t.LU.Replace(" ", ""); + t.KeyCode = t.PN + t.LU; + if (t.BillTime != null) { - var materialRelationships = luRePartCodes.Select(t => new MaterialRelationship(GuidGenerator.Create(), t.FactoryPartCode, "", t.LU, businessType)); - await this.AddNewMaterialRelationships(materialRelationships).ConfigureAwait(false); + t.Version = int.Parse(t.BillTime?.ToString("yyyyMM")); } + }); + var syncPosition = seDetails.Last().UID.ToString(); - jisSeDetails.ForEach(t => - { - t.SetId(GuidGenerator.Create()); - t.BusinessType = businessType; - t.CustomerPartCodeNoSpace = t.LU.Replace(" ", ""); - t.KeyCode = t.PN + t.LU; - if (t.BillTime != null) - { - t.Version = int.Parse(t.BillTime?.ToString("yyyyMM")); - } - }); - await _settleAccountDbContext.BulkInsertAsync(jisSeDetails).ConfigureAwait(false); - + using var transaction = await _settleAccountDbContext.Database.BeginTransactionAsync().ConfigureAwait(false); + try + { + var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); if (syncPositionFlag != null) { - syncPositionFlag.Position = wmsRecords.Last().UID.ToString(); - await _syncPositionFlagRepository.UpdateAsync(syncPositionFlag).ConfigureAwait(false); + syncPositionFlag.Position = syncPosition; + _settleAccountDbContext.Update(syncPositionFlag); } else { syncPositionFlag = new SyncPositionFlag() { TableName = syncTableName, - Position = wmsRecords.Last().UID.ToString() + Position = syncPosition }; - await _syncPositionFlagRepository.InsertAsync(syncPositionFlag).ConfigureAwait(false); ; + _settleAccountDbContext.Add(syncPositionFlag); } + await _settleAccountDbContext.BulkInsertAsync(seDetails).ConfigureAwait(false); + await _syncExtendManager.JisSeDetailsSaveConsignAsync(seDetails, isJisTable).ConfigureAwait(false); + await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false); + await transaction.CommitAsync().ConfigureAwait(false); } - } - - /// - /// 添加零件关系 - /// - public async Task AddNewMaterialRelationships(IEnumerable materialRelationships) - { - //新客户零件号和厂内零件号 - var noHaveLuRePartCodes = from item1 in materialRelationships - join item2 in _settleAccountDbContext.Set() - on new { item1.ErpMaterialCode, item1.SettleMaterialCode } equals new { item2.ErpMaterialCode, item2.SettleMaterialCode } - into temp - from item3 in temp.DefaultIfEmpty() - where item3 == null - select item1; - - if (noHaveLuRePartCodes.Any()) + catch (Exception) { - await _settleAccountDbContext.BulkInsertAsync(noHaveLuRePartCodes.ToList()).ConfigureAwait(false); + await transaction.RollbackAsync().ConfigureAwait(false); + throw; } } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncAppService.cs index 25484aba..86bf1454 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncAppService.cs @@ -1,14 +1,10 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using SettleAccount.Domain.BQ; using Volo.Abp.Uow; -using Win.Sfs.SettleAccount.Entities.BQ.Managers; using Win.Sfs.SettleAccount.Entities.BQ.Vmi; using Win.Sfs.SettleAccount.EntityFrameworkCore; -using Win.Sfs.Shared.RepositoryBase; namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs; @@ -24,11 +20,8 @@ public class JisHBPOSeSyncAppService : JisHBPOSeSyncBaseAppService, IJobService public JisHBPOSeSyncAppService( WMSBJBMPTDbContext wmsBJBMPTContext, SettleAccountDbContext settleAccountDbContext, - INormalEfCoreRepository syncPositionFlagRepository, - INormalEfCoreRepository jisSeDetailRepository, - MaterialRelationshipManager materialRelationshipManager, SeSyncExtendManager syncExtendManager - ) : base(wmsBJBMPTContext, settleAccountDbContext, syncPositionFlagRepository, jisSeDetailRepository, materialRelationshipManager, syncExtendManager) + ) : base(wmsBJBMPTContext, settleAccountDbContext, syncExtendManager) { base.SeSyncConfigInfo = new SeSyncConfig() { @@ -43,7 +36,7 @@ public class JisHBPOSeSyncAppService : JisHBPOSeSyncBaseAppService, IJobService }; } - [UnitOfWork(IsDisabled = false)] + [UnitOfWork(IsDisabled = true)] public virtual async Task Invoke(IServiceProvider serviceProvider) { await this.Invoke().ConfigureAwait(false); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncBaseAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncBaseAppService.cs index c472303b..58628561 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncBaseAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JisHBPOSeSyncBaseAppService.cs @@ -1,17 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; -using System.LinqAsync; using System.Threading.Tasks; using Coravel.Invocable; using EFCore.BulkExtensions; +using LinqToDB; using Microsoft.AspNetCore.Mvc; -using Org.BouncyCastle.Asn1.Cmp; using SettleAccount.Domain.BQ; using Volo.Abp.Application.Services; -using Win.Sfs.SettleAccount.Entities.BQ.Managers; -using Win.Sfs.SettleAccount.Entities.MaterialRelationships; using Win.Sfs.SettleAccount.EntityFrameworkCore; using Win.Sfs.SettleAccount.MaterialRelationships; using Win.Sfs.Shared.RepositoryBase; @@ -28,26 +24,10 @@ public class JisHBPOSeSyncBaseAppService : ApplicationService, IInvocable /// WMS数据上下文 /// private readonly WMSBJBMPTDbContext _wmsBJBMPTContext; - /// /// 数据上下文 /// private readonly SettleAccountDbContext _settleAccountDbContext; - - /// - /// 同步位置标记 - /// - private readonly INormalEfCoreRepository _syncPositionFlagRepository; - - /// - /// Jis发运数据仓储 - /// - private readonly INormalEfCoreRepository _jisSeDetailRepository; - - /// - /// 客户零件关系领域 - /// - private readonly MaterialRelationshipManager _materialRelationshipManager; /// /// 发运同步扩展 /// @@ -59,17 +39,12 @@ public class JisHBPOSeSyncBaseAppService : ApplicationService, IInvocable public JisHBPOSeSyncBaseAppService( WMSBJBMPTDbContext wmsBJBMPTContext, SettleAccountDbContext settleAccountDbContext, - INormalEfCoreRepository syncPositionFlagRepository, - INormalEfCoreRepository jisSeDetailRepository, - MaterialRelationshipManager materialRelationshipManager, SeSyncExtendManager syncExtendManager) { _wmsBJBMPTContext = wmsBJBMPTContext; _settleAccountDbContext = settleAccountDbContext; - _syncPositionFlagRepository = syncPositionFlagRepository; - _jisSeDetailRepository = jisSeDetailRepository; - _materialRelationshipManager = materialRelationshipManager; _syncExtendManager = syncExtendManager; + _syncExtendManager._settleAccountDbContext = settleAccountDbContext; } /// @@ -78,7 +53,7 @@ public class JisHBPOSeSyncBaseAppService : ApplicationService, IInvocable public SeSyncConfig SeSyncConfigInfo { get; set; } [HttpPost] - public async Task Invoke() + public virtual async Task Invoke() { if (SeSyncConfigInfo == null) { @@ -101,64 +76,27 @@ public class JisHBPOSeSyncBaseAppService : ApplicationService, IInvocable var deliverSubBillTypes = SeSyncConfigInfo.SyncDeliverSubBillTypes; //业务类别 var businessType = SeSyncConfigInfo.BusinessType; - - var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); - var syncPosition = syncPositionFlag?.Position ?? "0"; - - Expression> predicate = (t) => t.UID > int.Parse(syncPositionFlag.Position) && t.DeliverBillType == deliverBillType && deliverSubBillTypes.Contains(t.DeliverSubBillType); - //WMS发运记录 - var wmsSeRecords = _wmsBJBMPTContext.TM_BJBMPT_JIT_RECORD.Where(predicate).OrderBy(b => b.UID).Take(100_000).ToList(); - var jisSeDetails = ObjectMapper.Map, List>(wmsSeRecords); - if (jisSeDetails.Any()) + var seed = 0; + while (seed < 10) { - //客户零件号和厂内零件号 - var luRePartCodes = jisSeDetails.Where(t => !string.IsNullOrEmpty(t.LU) && !string.IsNullOrEmpty(t.FactoryPartCode)).Select(t => new { t.LU, t.FactoryPartCode }).Distinct().ToList(); - if (luRePartCodes.Any()) + seed++; + var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); + var syncPosition = syncPositionFlag?.Position ?? "0"; + + //WMS发运记录 + var wmsSeRecords = _wmsBJBMPTContext.TM_BJBMPT_JIT_RECORD + .Where(t => t.UID > int.Parse(syncPosition)) + .Where(t => t.DeliverBillType == deliverBillType) + .Where(t => deliverSubBillTypes.Contains(t.DeliverSubBillType)) + .OrderBy(b => b.UID).Take(100_000).ToList(); + var jisSeDetails = ObjectMapper.Map, List>(wmsSeRecords); + if (jisSeDetails.Any()) { - var materialRelationships = luRePartCodes.Select(t => new MaterialRelationship(GuidGenerator.Create(), t.FactoryPartCode, "", t.LU, businessType)); - await _syncExtendManager.AddNewMaterialRelationshipsAsync(materialRelationships).ConfigureAwait(false); + await SeDataPutInStorageAsync(jisSeDetails, false).ConfigureAwait(false); } - - jisSeDetails.ForEach(t => - { - t.SetId(GuidGenerator.Create()); - t.BusinessType = businessType; - t.CustomerPartCodeNoSpace = t.LU.Replace(" ", ""); - t.KeyCode = t.PN + t.LU; - if (t.BillTime != null) - { - t.Version = int.Parse(t.BillTime?.ToString("yyyyMM")); - } - }); - - var syncPositionNew = jisSeDetails.Last().UID.ToString(); - - using var transaction = await _settleAccountDbContext.Database.BeginTransactionAsync().ConfigureAwait(false); - try - { - if (syncPositionFlag != null) - { - syncPositionFlag.Position = syncPositionNew; - _settleAccountDbContext.Update(syncPositionFlag); - } - else - { - syncPositionFlag = new SyncPositionFlag() - { - TableName = syncTableName, - Position = syncPositionNew - }; - _settleAccountDbContext.Add(syncPositionFlag); - } - await _settleAccountDbContext.BulkInsertAsync(jisSeDetails).ConfigureAwait(false); - await _syncExtendManager.JisSeDetailsSaveConsignAsync(jisSeDetails, false).ConfigureAwait(false); - await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false); - await transaction.CommitAsync().ConfigureAwait(false); - } - catch (Exception) + else { - await transaction.RollbackAsync().ConfigureAwait(false); - throw; + break; } } } @@ -176,54 +114,90 @@ public class JisHBPOSeSyncBaseAppService : ApplicationService, IInvocable var deliverSubBillTypes = SeSyncConfigInfo.SyncDeliverSubBillTypes; //业务类别 var businessType = SeSyncConfigInfo.BusinessType; + var seed = 0; + while (seed < 10) + { + seed++; + var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); + var syncPosition = syncPositionFlag?.Position ?? "0"; + + //WMS发运记录 + var wmsRecords = _wmsBJBMPTContext.TM_BJBMPT_JIS_RECORD + .Where(t => t.UID > int.Parse(syncPosition)) + .Where(t => t.DeliverBillType == deliverBillType) + .Where(t => deliverSubBillTypes.Contains(t.DeliverSubBillType)) + .OrderBy(b => b.UID).Take(100_000).ToList(); + var jisSeDetails = ObjectMapper.Map, List>(wmsRecords); + if (jisSeDetails.Any()) + { + await SeDataPutInStorageAsync(jisSeDetails, true).ConfigureAwait(false); + } + else + { + break; + } + } + } - Expression> predicate = (t) => t.DeliverBillType == deliverBillType && deliverSubBillTypes.Contains(t.DeliverSubBillType); - var syncPositionFlag = await _syncPositionFlagRepository.FindAsync(t => t.TableName == syncTableName).ConfigureAwait(false); - if (syncPositionFlag != null) + /// + /// 发运数据入库 + /// + private async Task SeDataPutInStorageAsync(List seDetails, bool isJisTable) + { + //同步表名称 + var syncTableName = isJisTable ? SeSyncConfigInfo.SyncTableName + + "_Jis" : SeSyncConfigInfo.SyncTableName + "_Jit"; + //业务类别 + var businessType = SeSyncConfigInfo.BusinessType; + + //客户零件号和厂内零件号 + var luRePartCodes = seDetails.Where(t => !string.IsNullOrEmpty(t.LU) && !string.IsNullOrEmpty(t.FactoryPartCode)).Select(t => new { t.LU, t.FactoryPartCode }).Distinct().ToList(); + if (luRePartCodes.Any()) { - predicate = (t) => t.UID > int.Parse(syncPositionFlag.Position) && t.DeliverBillType == deliverBillType && deliverSubBillTypes.Contains(t.DeliverSubBillType); + var materialRelationships = luRePartCodes.Select(t => new MaterialRelationship(GuidGenerator.Create(), t.FactoryPartCode, "", t.LU, businessType)); + await _syncExtendManager.AddNewMaterialRelationshipsAsync(materialRelationships).ConfigureAwait(false); } - //WMS发运数据 - var wmsRecords = _wmsBJBMPTContext.TM_BJBMPT_JIS_RECORD.Where(predicate).OrderBy(b => b.UID).Take(100000).ToList(); - var jisSeDetails = ObjectMapper.Map, List>(wmsRecords); - if (jisSeDetails.Any()) + seDetails.ForEach(t => { - //客户零件号和厂内零件号 - var luRePartCodes = jisSeDetails.Where(t => !string.IsNullOrEmpty(t.LU) && !string.IsNullOrEmpty(t.FactoryPartCode)).Select(t => new { t.LU, t.FactoryPartCode }).Distinct().ToList(); - if (luRePartCodes.Any()) + t.SetId(GuidGenerator.Create()); + t.BusinessType = businessType; + t.CustomerPartCodeNoSpace = t.LU.Replace(" ", ""); + t.KeyCode = t.PN + t.LU; + if (t.BillTime != null) { - var materialRelationships = luRePartCodes.Select(t => new MaterialRelationship(GuidGenerator.Create(), t.FactoryPartCode, "", t.LU, businessType)); - await _syncExtendManager.AddNewMaterialRelationshipsAsync(materialRelationships).ConfigureAwait(false); + t.Version = int.Parse(t.BillTime?.ToString("yyyyMM")); } + }); + var syncPosition = seDetails.Last().UID.ToString(); - jisSeDetails.ForEach(t => - { - t.SetId(GuidGenerator.Create()); - t.BusinessType = businessType; - t.CustomerPartCodeNoSpace = t.LU.Replace(" ", ""); - t.KeyCode = t.PN + t.LU; - if (t.BillTime != null) - { - t.Version = int.Parse(t.BillTime?.ToString("yyyyMM")); - } - }); - await _settleAccountDbContext.BulkInsertAsync(jisSeDetails).ConfigureAwait(false); - + using var transaction = await _settleAccountDbContext.Database.BeginTransactionAsync().ConfigureAwait(false); + try + { + var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); if (syncPositionFlag != null) { - syncPositionFlag.Position = wmsRecords.Last().UID.ToString(); - await _syncPositionFlagRepository.UpdateAsync(syncPositionFlag).ConfigureAwait(false); + syncPositionFlag.Position = syncPosition; + _settleAccountDbContext.Update(syncPositionFlag); } else { syncPositionFlag = new SyncPositionFlag() { TableName = syncTableName, - Position = wmsRecords.Last().UID.ToString() + Position = syncPosition }; - await _syncPositionFlagRepository.InsertAsync(syncPositionFlag).ConfigureAwait(false); + _settleAccountDbContext.Add(syncPositionFlag); } + await _settleAccountDbContext.BulkInsertAsync(seDetails).ConfigureAwait(false); + await _syncExtendManager.JisSeDetailsSaveConsignAsync(seDetails, isJisTable).ConfigureAwait(false); + await _settleAccountDbContext.SaveChangesAsync().ConfigureAwait(false); + await transaction.CommitAsync().ConfigureAwait(false); + } + catch (Exception) + { + await transaction.RollbackAsync().ConfigureAwait(false); + throw; } } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JitSeSyncAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JitSeSyncAppService.cs index 061a7505..72db204a 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JitSeSyncAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/JitSeSyncAppService.cs @@ -49,10 +49,6 @@ public class JitSeSyncAppService : ApplicationService, IInvocable /// 发运同步配置 /// public SeSyncConfig SeSyncConfigInfo { get; set; } - /// - /// Seed - /// - public int Seed { get; set; } [HttpPost] public async Task Invoke() @@ -69,10 +65,10 @@ public class JitSeSyncAppService : ApplicationService, IInvocable var deliverSubBillTypes = SeSyncConfigInfo.SyncDeliverSubBillTypes; //业务类别 var businessType = SeSyncConfigInfo.BusinessType; - - while (Seed < 10) + var seed = 0; + while (seed < 10) { - Seed++; + seed++; var syncPositionFlag = await _settleAccountDbContext.Set().FirstOrDefaultAsync(t => t.TableName == syncTableName).ConfigureAwait(false); var syncPosition = syncPositionFlag?.Position ?? "0"; diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanBBACSeSyncAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanBBACSeSyncAppService.cs index 68b632b5..607ac8c5 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanBBACSeSyncAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanBBACSeSyncAppService.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using SettleAccount.Domain.BQ; -using Win.Sfs.SettleAccount.Entities.BQ.Managers; +using Volo.Abp.Uow; using Win.Sfs.SettleAccount.Entities.BQ.Vmi; using Win.Sfs.SettleAccount.EntityFrameworkCore; -using Win.Sfs.Shared.RepositoryBase; namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs; @@ -24,11 +22,8 @@ public class MaiDanBBACSeSyncAppService : JisBBACSeSyncBaseAppService, IJobServi public MaiDanBBACSeSyncAppService( WMSBJBMPTDbContext wmsBJBMPTContext, SettleAccountDbContext settleAccountDbContext, - INormalEfCoreRepository syncPositionFlagRepository, - INormalEfCoreRepository jisSeDetailRepository, - MaterialRelationshipManager materialRelationshipManager, - VmiAppService vmiService - ) : base(wmsBJBMPTContext, settleAccountDbContext, syncPositionFlagRepository, jisSeDetailRepository, materialRelationshipManager, vmiService) + SeSyncExtendManager syncExtendManager + ) : base(wmsBJBMPTContext, settleAccountDbContext, syncExtendManager) { base.SeSyncConfigInfo = new SeSyncConfig() { @@ -43,6 +38,7 @@ public class MaiDanBBACSeSyncAppService : JisBBACSeSyncBaseAppService, IJobServi }; } + [UnitOfWork(IsDisabled = true)] public async Task Invoke(IServiceProvider serviceProvider) { await this.Invoke().ConfigureAwait(false); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanHBPOSeSyncAppService.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanHBPOSeSyncAppService.cs index d0cf401f..a9837c7e 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanHBPOSeSyncAppService.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/MaiDanHBPOSeSyncAppService.cs @@ -2,12 +2,9 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using SettleAccount.Domain.BQ; using Volo.Abp.Uow; -using Win.Sfs.SettleAccount.Entities.BQ.Managers; using Win.Sfs.SettleAccount.Entities.BQ.Vmi; using Win.Sfs.SettleAccount.EntityFrameworkCore; -using Win.Sfs.Shared.RepositoryBase; namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs; @@ -23,11 +20,8 @@ public class MaiDanHBPOSeSyncAppService : JisHBPOSeSyncBaseAppService, IJobServi public MaiDanHBPOSeSyncAppService( WMSBJBMPTDbContext wmsBJBMPTContext, SettleAccountDbContext settleAccountDbContext, - INormalEfCoreRepository syncPositionFlagRepository, - INormalEfCoreRepository jisSeDetailRepository, - MaterialRelationshipManager materialRelationshipManager, SeSyncExtendManager syncExtendManager - ) : base(wmsBJBMPTContext, settleAccountDbContext, syncPositionFlagRepository, jisSeDetailRepository, materialRelationshipManager, syncExtendManager) + ) : base(wmsBJBMPTContext, settleAccountDbContext, syncExtendManager) { base.SeSyncConfigInfo = new SeSyncConfig() { @@ -42,7 +36,7 @@ public class MaiDanHBPOSeSyncAppService : JisHBPOSeSyncBaseAppService, IJobServi }; } - [UnitOfWork(IsDisabled = false)] + [UnitOfWork(IsDisabled = true)] public async Task Invoke(IServiceProvider serviceProvider) { await this.Invoke().ConfigureAwait(false); diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs index 26108f16..e03aea72 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/SeSyncExtendManager.cs @@ -37,7 +37,7 @@ public class SeSyncExtendManager : DomainService //新客户零件号和厂内零件号 var noHaveLuRePartCodes = from item1 in materialRelationships join item2 in _settleAccountDbContext.Set() - on new { item1.ErpMaterialCode, item1.SettleMaterialCode } equals new { item2.ErpMaterialCode, item2.SettleMaterialCode } + on new { item1.ErpMaterialCode, item1.SettleMaterialCode, item1.BusinessType } equals new { item2.ErpMaterialCode, item2.SettleMaterialCode, item2.BusinessType } into temp from item3 in temp.DefaultIfEmpty() where item3 == null