diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 000000000..8d5c24c89 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\WZC2.sln", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/PullTask/PullTask.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/PullTask/PullTask.cs index a00d40b80..0fc592abd 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/PullTask/PullTask.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/PullTask/PullTask.cs @@ -19,7 +19,7 @@ public class PullTask : Entity /// /// 数量 /// - public decimal Planqty { get; set; } + public string Planqty { get; set; } /// /// 单号 /// diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/PullTask/PullTaskDbContextModelCreatingExtensions.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/PullTask/PullTaskDbContextModelCreatingExtensions.cs index 0c955f22e..77c9c9330 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/PullTask/PullTaskDbContextModelCreatingExtensions.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/PullTask/PullTaskDbContextModelCreatingExtensions.cs @@ -20,7 +20,7 @@ public static class PullTaskDbContextModelCreatingExtensions b.Property(q => q.no).HasMaxLength(255); b.Property(q => q.Itemno).HasMaxLength(255); b.Property(q => q.Plant).HasMaxLength(255); - b.Property(q => q.Planqty).HasPrecision(18, 2); + b.Property(q => q.Planqty).HasMaxLength(255); b.Property(q => q.Yl1); }); diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs index ea92dcf1d..097550573 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs @@ -5,6 +5,7 @@ using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; +using Org.BouncyCastle.Asn1.Pkcs; using Volo.Abp.ObjectMapping; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; @@ -77,6 +78,7 @@ public class MesOutConverter : IIncomingConverter wmsProductReceiptNote.WorkShop = "";//车间 wmsProductReceiptNote.Worker = _configuration["Authentication:username"];//操作人 wmsProductReceiptNote.ReceiptType = EnumReceiptType.MesScanReceipt;//完工收货方式 + wmsProductReceiptNote.WarehouseCode = ""; wmsProductReceiptNote.Details = new List(); foreach (var incomingFromExternal in group.ToList()) @@ -86,20 +88,24 @@ public class MesOutConverter : IIncomingConverter wmsProductReceiptNoteDetail.Lot = ""; //排序批次 wmsProductReceiptNoteDetail.PackingCode = "";//箱标签 wmsProductReceiptNoteDetail.Status = EnumInventoryStatus.OK; + wmsProductReceiptNoteDetail.WarehouseCode = ""; + wmsProductReceiptNoteDetail.LocationArea = ""; + wmsProductReceiptNoteDetail.LocationGroup = ""; var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, wmsProductReceiptNoteDetail.LocationErpCode).ConfigureAwait(false); if (loc != null) { wmsProductReceiptNoteDetail.LocationCode = loc[0].Code; } -; try + try { var item = await _itemBasicAppService.GetByCodeAsync(wmsProductReceiptNoteDetail.ItemCode).ConfigureAwait(false); if (item != null) { wmsProductReceiptNoteDetail.ItemName = item.Name; - wmsProductReceiptNoteDetail.ItemDesc1 = item.Desc1; - wmsProductReceiptNoteDetail.ItemDesc2 = item.Desc2; - wmsProductReceiptNoteDetail.Uom = item.BasicUom; + wmsProductReceiptNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; + wmsProductReceiptNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; + wmsProductReceiptNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; + } } catch (Exception) diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskConverter.cs index 9c452e010..06d94bf12 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskConverter.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskConverter.cs @@ -11,6 +11,7 @@ using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest; using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; @@ -77,16 +78,16 @@ public class PullTaskConverter : IIncomingConverter foreach (var incomingFromExternal in group.ToList()) { var materialRequest = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); - var wmsMaterialRequestDetail = _objectMapper.Map(materialRequest.Detail); + var wmsMaterialRequestDetail = _objectMapper.Map(materialRequest.Detail); var item = await _itemBasicAppService.GetByCodeAsync(wmsMaterialRequestDetail.ItemCode).ConfigureAwait(false); try { if (item != null) { wmsMaterialRequestDetail.ItemName = item.Name; - wmsMaterialRequestDetail.ItemDesc1 = item.Desc1; - wmsMaterialRequestDetail.ItemDesc2 = item.Desc2; - wmsMaterialRequestDetail.Uom = item.BasicUom; + wmsMaterialRequestDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; + wmsMaterialRequestDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; + wmsMaterialRequestDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; } } catch (Exception) diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskReader.cs index 1faa0b6f8..5996e66ef 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/PullTaskReader.cs @@ -29,6 +29,7 @@ public class PullTaskReader : IReader } public virtual async Task> ReadAsync() + { //从MES读取待处理PullTask var toBeProcessedPillTasks = await _pullTaskManager.GetToBeProcessedListAsync().ConfigureAwait(false); @@ -101,7 +102,7 @@ public class PullTaskReader : IReader var materialRequestDetail = new MaterialRequestDetailExchangeDto() { ItemCode = pullTask.Itemno, - Qty = pullTask.Planqty, + Qty = decimal.Parse(pullTask.Planqty), ToLocationCode = pullTask.Plant, }; diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs index 11d70263a..2475f2b77 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs @@ -85,15 +85,15 @@ public class ScrapConverter : IIncomingConverter wmsScrapDetail.FromPackingCode = ""; wmsScrapDetail.FromLot = ""; wmsScrapDetail.FromWarehouseCode = ""; - wmsScrapDetail.ToWarehouseCode = ""; - wmsScrapDetail.Uom = ""; - wmsScrapDetail.FromStatus = EnumInventoryStatus.OK; - var item = await _itemBasicAppService.GetByCodeAsync(wmsScrapDetail.ItemCode).ConfigureAwait(false); + wmsScrapDetail.ToWarehouseCode = ""; + wmsScrapDetail.FromStatus = EnumInventoryStatus.OK; + var item = await _itemBasicAppService.GetByCodeAsync(wmsScrapDetail.ItemCode).ConfigureAwait(false); if (item != null) { - wmsScrapDetail.ItemName = item.Name; - wmsScrapDetail.ItemDesc1 = item.Desc1; - wmsScrapDetail.ItemDesc2 = item.Desc2; + wmsScrapDetail.ItemName = item.Name; + wmsScrapDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; + wmsScrapDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; + wmsScrapDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; } wmsScarp.Details.Add(wmsScrapDetail); diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/MesAgentModule.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/MesAgentModule.cs index 388c48ee8..2a845ffc5 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/MesAgentModule.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/MesAgentModule.cs @@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Polly; using Volo.Abp; +using Volo.Abp.Account; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.BackgroundJobs; @@ -39,7 +40,8 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent; typeof(DataExchangeDomainModule), typeof(DataExchangeEntityFrameworkCoreModule), typeof(DataExchangeDomainFawtygMesModule), - typeof(DataExchangeEntityFrameworkCoreFawtygModule) + typeof(DataExchangeEntityFrameworkCoreFawtygModule), + typeof(AbpAccountApplicationContractsModule) )] public class MesAgentModule : AbpModule { @@ -153,13 +155,13 @@ public class MesAgentModule : AbpModule typeof(LabelApplicationContractsModule).Assembly, "Label" ); - } - - public override async Task OnApplicationInitializationAsync( - ApplicationInitializationContext context) + } + public override void OnApplicationInitialization( + ApplicationInitializationContext context) { - await context.AddBackgroundWorkerAsync().ConfigureAwait(false); - await context.AddBackgroundWorkerAsync().ConfigureAwait(false); - } + context.AddBackgroundWorkerAsync(); + //context.AddBackgroundWorkerAsync(); + } } + diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.csproj b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.csproj index 464b89db6..47d6bcd34 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.csproj +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.csproj @@ -11,6 +11,7 @@ + diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ItemTransformNoteConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ItemTransformNoteConverter.cs new file mode 100644 index 000000000..8e25bb6a7 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ItemTransformNoteConverter.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Auth.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; +using Win_in.Sfs.Wms.DataExchange.Domain.Shared; +using Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing; + + public class ItemTransformNoteConverter : IOutgoingConverter + { + private readonly IOutgoingFromWmsManager _outgoingFromWmsManager; + private readonly IOutgoingToExternalManager _outgoingToExternalManager; + private readonly ISupplierAsnAppService _supplierAsnAppService; + private readonly IDepartmentAppService _departmentAppService; + private readonly IObjectMapper _objectMapper; + + public ItemTransformNoteConverter( + IOutgoingFromWmsManager outgoingFromWmsManager + , IOutgoingToExternalManager outgoingToExternalManager + , ISupplierAsnAppService supplierAsnAppService + , IDepartmentAppService departmentAppService + , IObjectMapper objectMapper + ) + { + _outgoingFromWmsManager = outgoingFromWmsManager; + _outgoingToExternalManager = outgoingToExternalManager; + _supplierAsnAppService = supplierAsnAppService; + _departmentAppService = departmentAppService; + _objectMapper = objectMapper; + } + + public virtual async Task> ConvertAsync() + { + var outgoingToExternalList = new List(); + var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.Item_Transform, EnumSystemType.ERP).ConfigureAwait(false); + foreach (var outgoingFromWms in outgoingFromWmsList) + { + var wmsCountAdjust = JsonSerializer.Deserialize(outgoingFromWms.DataContent); + if (Enum.Parse(wmsCountAdjust.Type) == EnumTransSubType.Item_Transform) + { + var department = await _departmentAppService.GetByUsernameAsync(wmsCountAdjust.Worker).ConfigureAwait(false); + var departmentCode = department == null ? "" : department.Code; + var details = wmsCountAdjust.Details.GroupBy(r => new { r.ItemCode, r.ToItemCode, r.LocationErpCode, r.ToLocationCode }).Select(p => new ItemTransformNoteDetailExchangeDto { ToQty = p.Sum(itm => itm.ToQty), FromQty = p.Sum(itm => itm.FromQty), ItemCode = p.Key.ItemCode, ToItemCode = p.Key.ToItemCode, LocationErpCode = p.Key.LocationErpCode, ReasonCode = String.Join("、", p.Select(x => x.ReasonCode).ToArray()) }); + foreach (var detail in details) + { + List ItemTransform = new List(); + ItemTransformNoteDetailExchangeDto ItemTrans = new ItemTransformNoteDetailExchangeDto(); + ItemTrans.ItemCode = detail.ItemCode; + ItemTrans.LocationErpCode = detail.LocationErpCode; + ItemTrans.FromQty = detail.FromQty - detail.FromQty - detail.FromQty; + ItemTrans.ReasonCode = detail.ReasonCode; + ItemTransform.Add(ItemTrans); + ItemTransformNoteDetailExchangeDto ItemTranss = new ItemTransformNoteDetailExchangeDto(); + ItemTranss.ItemCode = detail.ToItemCode; + ItemTranss.LocationErpCode = detail.LocationErpCode; + ItemTranss.FromQty = detail.ToQty; + ItemTranss.ReasonCode = detail.ReasonCode; + ItemTransform.Add(ItemTranss); + foreach (var Item in ItemTransform) + { + var outgoingToExternal = new OutgoingToExternal() + { + DataType = outgoingFromWms.DataType, + DataAction = outgoingFromWms.DataAction, + SourceSystem = EnumSystemType.WMS.ToString(), + SourceDataId = wmsCountAdjust.Number, + SourceDataGroupCode = wmsCountAdjust.Number, + SourceDataDetailCode = Item.ItemCode, + Writer = nameof(TyrpOutgoingBackgroundWorker), + DestinationSystem = EnumSystemType.ERP.ToString(), + DestinationDataId = "", + }; + outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); + var exchangeIssue = await BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, Item).ConfigureAwait(false); + outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue); + var arrive = BuildIssue(exchangeIssue, departmentCode); + outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive); + + outgoingToExternalList.Add(outgoingToExternal); + } + + } + } + } + await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false); ; + //将outgoingFromWms数据归档 + await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false); ; + return outgoingToExternalList; + //插入到中间表OutgoingToExternal + } + + private CountAdjust BuildIssue(ItemTransformNoteExchangeDto exchangeCountAdjust, string departmentCode) + { + var detail = exchangeCountAdjust.Detail; + string asdtype = ""; + if (Enum.Parse(exchangeCountAdjust.Type) == EnumTransSubType.Item_Transform) + { + asdtype = "4003"; + } + var counta = new CountAdjust() + { + mesout_asd_refc = departmentCode, + mesout_asd_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"), + mesout_asd_type = asdtype, + mesout_asd_part = detail.ItemCode, + mesout_asd_date = exchangeCountAdjust.ActiveDate.ToString("yyyyMMdd"), + mesout_asd_loc = detail.LocationErpCode, + mesout_asd_code = detail.ReasonCode, + mesout_asd_qty = detail.FromQty, + mesout_asd_user = exchangeCountAdjust.Worker, + mesout_asd_k = string.Empty, + mesout_asd_stat = "Y" + + }; + + + return counta; + + } + + private async Task BuildPurchaseReceiptExchangeDtoAsync( + ItemTransformNoteDTO wmsCountAdjust, ItemTransformNoteDetailExchangeDto wmsCountAdjustDetail) + { + + var exchangeCountAdjust = _objectMapper.Map(wmsCountAdjust); + + exchangeCountAdjust.Detail = wmsCountAdjustDetail; + return exchangeCountAdjust; + } + } + diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs index 0344a59ed..52ca1123a 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs @@ -120,6 +120,10 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase var scrapNoteList = await scrapNoteConvert.ConvertAsync().ConfigureAwait(false); await countadjustWriter.WriteAsync(scrapNoteList).ConfigureAwait(false); + Logger.LogInformation($"Write ItemTransformNote");//回收料调整单 + var ItemTransformNoteConvert = workerContext.ServiceProvider.GetRequiredService(); + var ItemTransformNoteList = await ItemTransformNoteConvert.ConvertAsync().ConfigureAwait(false); + await countadjustWriter.WriteAsync(ItemTransformNoteList).ConfigureAwait(false); Logger.LogInformation($"Completed: Handling {Outgoing}"); } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.csproj b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.csproj index bdec28966..f7135a83a 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.csproj +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.csproj @@ -31,6 +31,7 @@ + diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs index 798adcc81..cc783226f 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs @@ -30,6 +30,7 @@ public enum EnumOutgoingDataType RecycledMaterialReceipt = 22, ScrapNote = 23, ProductRecycle = 24, + Item_Transform = 25 } public enum EnumExchangeTableType { diff --git a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/AsnTimeWindowController.cs b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/AsnTimeWindowController.cs index 939f02642..be8a7352b 100644 --- a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/AsnTimeWindowController.cs +++ b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/AsnTimeWindowController.cs @@ -8,6 +8,7 @@ using Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; +using System.Diagnostics.Metrics; using System.Linq; using Win_in.Sfs.Basedata.Application.Contracts; @@ -29,28 +30,28 @@ public class AsnTimeWindowController : AbpController [HttpGet("asn-time-window")] public virtual async Task> GetAsnTimeWindowsAsync() { - return await GetAsnTimeWindowDashboardsAsync().ConfigureAwait(false); + return await GetAsnTimeWindowDashboardsAsync(); } private async Task> GetAsnTimeWindowDashboardsAsync() { - var supplierAsns = await GetSupplierAsnsAsync().ConfigureAwait(false); + var supplierAsns = await this.GetSupplierAsnsAsync(); var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); - var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); + var suppliers = await GetSuppliersAsync(supplierCodes); var asnNumbers = supplierAsns.Select(t => t.Number); - var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers).ConfigureAwait(false); + var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers); - return ConvertToAsnTimeWindowDashboards( + return this.ConvertToAsnTimeWindowDashboards( supplierAsns, suppliers, purchaseReceiptNotes); } - private static List ConvertToAsnTimeWindowDashboards( + private List ConvertToAsnTimeWindowDashboards( List supplierAsns, List suppliers, List purchaseReceiptNotes) @@ -70,16 +71,12 @@ public class AsnTimeWindowController : AbpController var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); if (supplier == null) - { continue; - } supplierShortName = supplier.ShortName; if (dtos.Exists(t => t.TimeSpan == timeSpan && t.SupplierShortName == supplierShortName)) - { continue; - } var purchaseReceiptNote = purchaseReceiptNotes.FirstOrDefault(t => t.AsnNumber == supplierAsn.Number); @@ -111,17 +108,26 @@ public class AsnTimeWindowController : AbpController endTime.AddDays(-1); } - return await _supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime).ConfigureAwait(false); + return await this._supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime); } private async Task> GetSuppliersAsync(IEnumerable codes) { - return await _supplierApp.GetByCodesAsync(codes).ConfigureAwait(false); + return await this._supplierApp.GetByCodesAsync(codes); } private async Task> GetPurchaseReceiptNotesAsync(IEnumerable asnNumbers) { - return await _purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); + return await this._purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers); } + /// + /// + /// + /// + [HttpGet("get-server-date-time")] + public virtual async Task GetServerDate() + { + return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + } } diff --git a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/MaterialRequestController.cs b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/MaterialRequestController.cs index c3ff248e8..3e1eea770 100644 --- a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/MaterialRequestController.cs +++ b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/MaterialRequestController.cs @@ -2,151 +2,156 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Label.Application.Contracts; using Win_in.Sfs.Wms.Dashboard.Host.Models; -namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; - -using System.Linq; - -using NUglify.Helpers; +namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers +{ + using System.Linq; -using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Wms.Store.Application.Contracts; + using NUglify.Helpers; -[ApiController] -[Route($"{PdaHostConst.ROOT_ROUTE}material-request")] + using Win_in.Sfs.Shared.Domain.Shared; + using Win_in.Sfs.Wms.Inventory.Application.Contracts; + using Win_in.Sfs.Wms.Store.Application.Contracts; + using static IdentityServer4.Models.IdentityResources; -public class MaterialRequestController : AbpController -{ - private readonly IMaterialRequestAppService _materialRequestApp; + [ApiController] + [Route($"{PdaHostConst.ROOT_ROUTE}material-request")] - private readonly IIssueNoteAppService _issueNoteApp; - public MaterialRequestController(IMaterialRequestAppService materialRequestApp, IIssueNoteAppService issueNoteApp) + public class MaterialRequestController : AbpController { - _materialRequestApp = materialRequestApp; - _issueNoteApp = issueNoteApp; - } + private readonly IMaterialRequestAppService _materialRequestApp; - [HttpGet("un-handled-order-sum")] - public virtual async Task GetUnHandledOrderSumAsync() - { - var dto = new MaterialRequestUnHandledOrderSumDto(); + private readonly IIssueNoteAppService _issueNoteApp; + public MaterialRequestController(IMaterialRequestAppService materialRequestApp, IIssueNoteAppService issueNoteApp) + { + _materialRequestApp = materialRequestApp; + _issueNoteApp = issueNoteApp; + } - var list = await GetMaterialRequestAsync().ConfigureAwait(false); + [HttpGet("un-handled-order-sum")] + public virtual async Task GetUnHandledOrderSumAsync() + { + var dto = new MaterialRequestUnHandledOrderSumDto(); - dto.Sum = list.Where(t => t.RequestStatus == EnumRequestStatus.New).Count(); + var list = await GetMaterialRequestAsync(); - return dto; - } + dto.Sum = list.Where(t => t.RequestStatus == EnumRequestStatus.New).Count(); - [HttpGet("un-issued-item-qty-sum")] - public virtual async Task GetUnIssuedItemQtySumAsync() - { - var dto = new MaterialRequestUnIssuedItemQtySumDto(); + return dto; + } - var list = await GetMaterialRequestAsync().ConfigureAwait(false); + [HttpGet("un-issued-item-qty-sum")] + public virtual async Task GetUnIssuedItemQtySumAsync() + { + var dto = new MaterialRequestUnIssuedItemQtySumDto(); - dto.Sum = list.Where(t => t.RequestStatus != EnumRequestStatus.New) - .Sum(t => t.Details.Sum(t1 => t1.Qty - t1.IssuedQty)); + var list = await GetMaterialRequestAsync(); - return dto; - } + dto.Sum = list.Where(t => t.RequestStatus != EnumRequestStatus.New) + .Sum(t => t.Details.Sum(t1 => t1.Qty - t1.IssuedQty)); - [HttpGet("un-received-item-qty-by-item-list")] - public virtual async Task> - GetUnIssuedItemQtySumByItemListAsync() - { - var dtos = new List(); + return dto; + } - var list = await GetMaterialRequestAsync().ConfigureAwait(false); + [HttpGet("un-received-item-qty-by-item-list")] + public virtual async Task> + GetUnIssuedItemQtySumByItemListAsync() + { + var dtos = new List(); + + var list = await GetMaterialRequestAsync(); - var details = new List(); + var details = new List(); - list.Where(t => t.RequestStatus != EnumRequestStatus.New).ForEach( - item => + list.Where(t => t.RequestStatus != EnumRequestStatus.New).ForEach( + item => { item.Details.ForEach( detail => + { + if (detail.IssuedQty - detail.ReceivedQty > 0) { - if (detail.IssuedQty - detail.ReceivedQty > 0) - { - details.Add(detail); - } - }); + details.Add(detail); + } + }); }); - dtos = details.GroupBy(t => t.ItemCode).Select( - item => new MaterialRequestUnReceivedItemQtyByItemDto() - { - ItemCode = item.Key, - Sum = item.Sum(t => t.IssuedQty - t.ReceivedQty) - }).ToList(); + dtos = details.GroupBy(t => t.ItemCode).Select( + item => new MaterialRequestUnReceivedItemQtyByItemDto() + { + ItemCode = item.Key, + Sum = item.Sum(t => t.IssuedQty - t.ReceivedQty) + }).ToList(); - return dtos; - } + return dtos; + } - [HttpGet("item-qty-by-received-status-list")] - public virtual async Task> GetItemQtyByReceivedStatusListAsync() - { - var dtos = new List(); + [HttpGet("item-qty-by-received-status-list")] + public virtual async Task> GetItemQtyByReceivedStatusListAsync() + { + var dtos = new List(); - var ToBeIssuedQty = 0.0M; + var ToBeIssuedQty = 0.0M; - var ToBeReceivedQty = 0.0M; + var ToBeReceivedQty = 0.0M; - var Received = 0.0M; + var Received = 0.0M; - var list = await GetMaterialRequestAsync().ConfigureAwait(false); + var list = await GetMaterialRequestAsync(); - list.ForEach( - item => + list.ForEach( + item => { ToBeIssuedQty += item.Details.Sum(t => t.ToBeIssuedQty); ToBeReceivedQty += item.Details.Sum(t => t.ToBeReceivedQty); Received += item.Details.Sum(t => t.ReceivedQty); }); - dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求未发", Sum = ToBeIssuedQty }); - dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "已发未收", Sum = ToBeReceivedQty }); - dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求已收", Sum = Received }); - - return dtos; - } - [HttpGet("un-received-item-list")] - public virtual async Task> GetUnReceivedItemListAsync() - { - var dtos = new List(); + dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求未发", Sum = ToBeIssuedQty }); + dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "已发未收", Sum = ToBeReceivedQty }); + dtos.Add(new MaterialRequestItemQtyByReceivedStatusDto() { ReceivedStatus = "请求已收", Sum = Received }); - var notes = await GetIssueNotesAsync().ConfigureAwait(false); + return dtos; + } - foreach (var note in notes) + [HttpGet("un-received-item-list")] + public virtual async Task> GetUnReceivedItemListAsync() { - foreach (var noteDetail in note.Details) + var dtos = new List(); + + var notes = await this.GetIssueNotesAsync(); + + foreach (var note in notes) { - var dto = new MaterialRequestUnReceivedItemDto(); + foreach (var noteDetail in note.Details) + { + var dto = new MaterialRequestUnReceivedItemDto(); - dto.Number = note.RequestNumber; - dto.ItemCode = noteDetail.ItemCode; - dto.ItemDesc1 = noteDetail.ItemDesc1; - dto.PackingCode = noteDetail.FromPackingCode; - dto.IssuedQty = noteDetail.Qty; - dto.IssuedTime = note.ActiveDate; + dto.Number = note.RequestNumber; + dto.ItemCode = noteDetail.ItemCode; + dto.ItemDesc1 = noteDetail.ItemDesc1; + dto.PackingCode = noteDetail.FromPackingCode; + dto.IssuedQty = noteDetail.Qty; + dto.IssuedTime = note.ActiveDate; - dtos.Add(dto); + dtos.Add(dto); + } } - } - return dtos; - } + return dtos; + } - private async Task> GetIssueNotesAsync() - { - return await _issueNoteApp.GetListUnConfirmedByTypeAsync(EnumTransSubType.Issue_WIP.ToString()).ConfigureAwait(false); - } + private async Task> GetIssueNotesAsync() + { + return await this._issueNoteApp.GetListUnConfirmedByTypeAsync(EnumTransSubType.Issue_WIP.ToString()); + } - private async Task> GetMaterialRequestAsync() - { - return await _materialRequestApp.GetListByTypeAsync(EnumTransSubType.Issue_WIP.ToString()).ConfigureAwait(false); + private async Task> GetMaterialRequestAsync() + { + return await this._materialRequestApp.GetListByTypeAsync(EnumTransSubType.Issue_WIP.ToString()); + } } } diff --git a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PlanAndActualController.cs b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PlanAndActualController.cs index 0dc46b18f..d54bb4b54 100644 --- a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PlanAndActualController.cs +++ b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PlanAndActualController.cs @@ -1,174 +1,194 @@ -using System; using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Serilog; using Volo.Abp.AspNetCore.Mvc; -using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Wms.Dashboard.Host.Models; +using System; +using System.Linq; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Application.Contracts; -namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; - -[ApiController] -[Route($"{PdaHostConst.ROOT_ROUTE}plan-and-actual")] - -public class PlanAndActualController : AbpController +namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers { - private readonly ISupplierAsnAppService _supplierAsnApp; - private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteApp; - private readonly IPutawayNoteAppService _putawayNoteApp; - private readonly ISupplierAppService _supplierApp; - private readonly IItemSafetyStockAppService _itemSafetyStockApp; - public PlanAndActualController(ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteApp, IPutawayNoteAppService putawayNoteApp, ISupplierAppService supplierApp, IItemSafetyStockAppService itemSafetyStockApp) - { - _supplierAsnApp = supplierAsnApp; - _purchaseReceiptNoteApp = purchaseReceiptNoteApp; - _putawayNoteApp = putawayNoteApp; - _supplierApp = supplierApp; - _itemSafetyStockApp = itemSafetyStockApp; - } + [ApiController] + [Route($"{PdaHostConst.ROOT_ROUTE}plan-and-actual")] - [HttpGet("plan-actual-list")] - public virtual async Task> GetPlanAndActualListAsync() + public class PlanAndActualController : AbpController { - return await GetPlanAndActualDashboardsAsync().ConfigureAwait(false); - } + private readonly ISupplierAsnAppService _supplierAsnApp; + private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteApp; + private readonly IPutawayNoteAppService _putawayNoteApp; + private readonly ISupplierAppService _supplierApp; + private readonly IItemSafetyStockAppService _itemSafetyStockApp; + private readonly IPurchaseOrderAppService _purchaseOrderApp; + private readonly IPurchaseReceiptJobAppService _purchaseReceiptJobApp; + + public PlanAndActualController(ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteApp, IPutawayNoteAppService putawayNoteApp, ISupplierAppService supplierApp, IItemSafetyStockAppService itemSafetyStockApp, IPurchaseOrderAppService purchaseOrderApp, IPurchaseReceiptJobAppService purchaseReceiptJobApp) + { + _supplierAsnApp = supplierAsnApp; + _purchaseReceiptNoteApp = purchaseReceiptNoteApp; + _putawayNoteApp = putawayNoteApp; + _supplierApp = supplierApp; + _itemSafetyStockApp = itemSafetyStockApp; + _purchaseOrderApp = purchaseOrderApp; + _purchaseReceiptJobApp = purchaseReceiptJobApp; + } - private async Task> GetPlanAndActualDashboardsAsync() - { - var supplierAsns = await GetSupplierAsnsAsync().ConfigureAwait(false); - var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); + [HttpGet("plan-actual-list")] + public virtual async Task> GetPlanAndActualListAsync() + { + return await GetPlanAndActualDashboardsAsync(); + } - var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); + private async Task> GetPlanAndActualDashboardsAsync() + { + var supplierAsns = await this.GetSupplierAsnsAsync(); - var asnNumbers = supplierAsns.Select(t => t.Number); + var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); - var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers).ConfigureAwait(false); + var suppliers = await GetSuppliersAsync(supplierCodes); - var putawayNotes = await GetPutawayNotesAsync(asnNumbers).ConfigureAwait(false); + var asnNumbers = supplierAsns.Select(t => t.Number); - var itemSafetyStorks = await GetItemSafetyStocksAsync(supplierAsns).ConfigureAwait(false); + var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers); - return ConvertToPlanAndActualDashboards( - supplierAsns, - suppliers, - purchaseReceiptNotes, - putawayNotes, - itemSafetyStorks); - } + var putawayNotes = await this.GetPutawayNotesAsync(asnNumbers); - private static List ConvertToPlanAndActualDashboards(List supplierAsns, List suppliers, List purchaseReceiptNotes, List putawayNotes, List itemSafetyStorks) - { - var dtos = new List(); + var itemSafetyStorks = await this.GetItemSafetyStocksAsync(supplierAsns); + + return await this.ConvertToPlanAndActualDashboards( + supplierAsns, + suppliers, + purchaseReceiptNotes, + putawayNotes, + itemSafetyStorks); + } - foreach (var supplierAsn in supplierAsns) + private async Task> ConvertToPlanAndActualDashboards(List supplierAsns, List suppliers, List purchaseReceiptNotes, List putawayNotes, List itemSafetyStorks) { - var purchaseReceipts = purchaseReceiptNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); - var putaways = putawayNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); + var dtos = new List(); - var supplierShortName = string.Empty; + foreach (var supplierAsn in supplierAsns) + { + var purchaseReceipts = purchaseReceiptNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); + var putaways = putawayNotes.FindAll(t => t.AsnNumber == supplierAsn.Number); - var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); + var supplierShortName = string.Empty; - if (supplier == null) - { - continue; - } + var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); - supplierShortName = supplier.ShortName; + if (supplier == null) + continue; - foreach (var detail in supplierAsn.Details) - { - var dto = dtos.FirstOrDefault(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode); + supplierShortName = supplier.ShortName; - if (dto == null) + foreach (var detail in supplierAsn.Details) { - dto = new PlanAndActualDashboardDto(); + var dto = dtos.FirstOrDefault(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode); - dto.SupplierShortName = supplierShortName; - dto.ItemCode = detail.ItemCode; - dto.ItemDesc1 = detail.ItemDesc1; - dto.ItemName = detail.ItemName; + if (dto == null) + { + dto = new PlanAndActualDashboardDto(); - var itemSafetyStork = itemSafetyStorks.FirstOrDefault(t => t.ItemCode == detail.ItemCode); + dto.SupplierShortName = supplierShortName; + dto.ItemCode = detail.ItemCode; + dto.ItemDesc1 = detail.ItemDesc1; + dto.ItemName = detail.ItemName; - if (itemSafetyStork != null) - { - dto.MaxQty = itemSafetyStork.MaxStock; - dto.MinQty = itemSafetyStork.MinStock; - } + var itemSafetyStork = itemSafetyStorks.FirstOrDefault(t => t.ItemCode == detail.ItemCode); - dto.ReceiptNoteCount = CountReceiptNoteCount(purchaseReceipts, detail.ItemCode, detail.Lot); - dto.ReceiptQty = CountReceiptQty(purchaseReceipts, detail.ItemCode, detail.Lot); - dto.PutawayQty = CountPutawayQty(putawayNotes, detail.ItemCode, detail.Lot); + if (itemSafetyStork != null) + { + dto.MaxQty = itemSafetyStork.MaxStock; + dto.MinQty = itemSafetyStork.MinStock; + } - dtos.Add(dto); - } + var purchaseOrderDtos = await _purchaseOrderApp.GetListBySupplierCodeAsync(supplierAsn.SupplierCode, detail.ItemCode); + var supllierAsn = await _supplierAsnApp.GetForTodayListAsync(); + var poNumberList = supllierAsn.Select(p => p.PoNumber).ToList(); - dto.SupplierAsnCount += 1; + purchaseOrderDtos = purchaseOrderDtos.Where(p => poNumberList.Contains(p.Number)).ToList(); - dto.PlanArriveQty += detail.Qty; - } - } - return dtos.OrderBy(t => t.SupplierShortName).ToList(); - } + decimal allPutawayQty = 0; + decimal allReceiptQty = 0; + decimal allPlanArriveQty = 0; - private static decimal CountPutawayQty(List putawayNotes, string itemCode, string lot) - { - return putawayNotes.Sum(t => t.Details.Where(t => t.ItemCode == itemCode && t.ToLot == lot).Sum(t => t.Qty)); - } + foreach (var purchaseOrderDTO in purchaseOrderDtos) + { + allPutawayQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.PutAwayQty); + allReceiptQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.ReceivedQty); + allPlanArriveQty += purchaseOrderDTO.Details.Where(p => p.ItemCode == detail.ItemCode).Sum(p => p.ShippedQty); + } - private static decimal CountReceiptQty(List purchaseReceipts, string itemCode, string lot) - { - return purchaseReceipts.Sum(t => t.Details.Where(t => t.ItemCode == itemCode && t.HandledLot == lot).Sum(t => t.Qty)); - } + dto.PutawayQty = allPutawayQty; + dto.PlanArriveQty = allPlanArriveQty; + dto.ReceiptQty = allReceiptQty; - private static int CountReceiptNoteCount(List purchaseReceipts, string itemCode, string lot) - { - return purchaseReceipts.Sum(t => t.Details.Count(t => t.ItemCode == itemCode && t.Lot == lot)); - } + dtos.Add(dto); + } - private async Task> GetSupplierAsnsAsync() - { - var startTime = DateTime.Today.AddHours(DashboardConst.AsnReceiptTimeLimitHour); + var purchaseReceiptJobDtos = await _purchaseReceiptJobApp.GetListBySupplierCodeOnTodayAsync(supplierAsn.SupplierCode); + + dto.ReceiptNoteCount = purchaseReceiptJobDtos.Count(p => p.JobStatus == EnumJobStatus.Done); - var endTime = startTime.AddDays(1).AddSeconds(-1); + dto.SupplierAsnCount = purchaseReceiptJobDtos.Count(); + } + } + + return dtos.OrderBy(t => t.SupplierShortName).ToList(); + } - if (DateTime.Now.Hour < DashboardConst.AsnReceiptTimeLimitHour) + private decimal CountReceiptQty(List purchaseReceipts, string itemCode) { - startTime.AddDays(-1); - endTime.AddDays(-1); + return purchaseReceipts.Sum(t => t.Details.Where(t => t.ItemCode == itemCode).Sum(t => t.Qty)); } - return await _supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime).ConfigureAwait(false); - } + private int CountReceiptNoteCount(List purchaseReceipts, string itemCode) + { + return purchaseReceipts.Sum(t => t.Details.Count(t => t.ItemCode == itemCode)); + } - private async Task> GetSuppliersAsync(IEnumerable codes) - { - return await _supplierApp.GetByCodesAsync(codes).ConfigureAwait(false); - } + private async Task> GetSupplierAsnsAsync() + { + var startTime = DateTime.Today.AddHours(DashboardConst.AsnReceiptTimeLimitHour); - private async Task> GetPurchaseReceiptNotesAsync(IEnumerable asnNumbers) - { - return await _purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); - } + var endTime = startTime.AddDays(1).AddSeconds(-1); - private async Task> GetPutawayNotesAsync(IEnumerable asnNumbers) - { - return await _putawayNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); - } - private async Task> GetItemSafetyStocksAsync(List supplierAsns) - { - var itemCodes = new List(); + if (DateTime.Now.Hour < DashboardConst.AsnReceiptTimeLimitHour) + { + startTime.AddDays(-1); + endTime.AddDays(-1); + } - supplierAsns.ForEach(t => { itemCodes.AddRange(t.Details.Select(t => t.ItemCode).ToList()); }); + return await this._supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime); + } - var itemSafetyStorks = await _itemSafetyStockApp.GetByItemCodesAsync(itemCodes).ConfigureAwait(false); - return itemSafetyStorks; + private async Task> GetSuppliersAsync(IEnumerable codes) + { + return await this._supplierApp.GetByCodesAsync(codes); + } + + private async Task> GetPurchaseReceiptNotesAsync(IEnumerable asnNumbers) + { + return await this._purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers); + } + + private async Task> GetPutawayNotesAsync(IEnumerable asnNumbers) + { + return await this._putawayNoteApp.GetListByAsnNumbers(asnNumbers); + } + private async Task> GetItemSafetyStocksAsync(List supplierAsns) + { + var itemCodes = new List(); + + supplierAsns.ForEach(t => { itemCodes.AddRange(t.Details.Select(t => t.ItemCode).ToList()); }); + + var itemSafetyStorks = await this._itemSafetyStockApp.GetByItemCodesAsync(itemCodes); + return itemSafetyStorks; + } } } diff --git a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PurchaseReceiptController.cs b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PurchaseReceiptController.cs index d4ff0307c..6ecbf7f47 100644 --- a/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PurchaseReceiptController.cs +++ b/be/Hosts/Win_in.Sfs.Wms.Dashboard.Host/Controllers/PurchaseReceiptController.cs @@ -5,233 +5,255 @@ using Volo.Abp.AspNetCore.Mvc; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Wms.Dashboard.Host.Models; -namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; - -using System.Linq; +namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers +{ + using System; + using System.Linq; -using Win_in.Sfs.Label.Application.Contracts; -using Win_in.Sfs.Shared.Domain.Shared; -using Win_in.Sfs.Wms.Inventory.Application.Contracts; -using Win_in.Sfs.Wms.Store.Application.Contracts; + using Volo.Abp; -[ApiController] -[Route($"{PdaHostConst.ROOT_ROUTE}purchase-receipt")] + using Win_in.Sfs.Label.Application.Contracts; + using Win_in.Sfs.Label.Domain; + using Win_in.Sfs.Shared.Domain.Shared; + using Win_in.Sfs.Wms.Inventory.Application.Contracts; + using Win_in.Sfs.Wms.Store.Application.Contracts; -public class PurchaseReceiptController : AbpController -{ - private readonly IBalanceAppService _balanceApp; - private readonly IInventoryLabelAppService _labelService; - private readonly ISupplierAppService _supplierApp; - private readonly ISupplierAsnAppService _supplierAsnApp; + [ApiController] + [Route($"{PdaHostConst.ROOT_ROUTE}purchase-receipt")] - public PurchaseReceiptController(IBalanceAppService balanceApp, IInventoryLabelAppService labelService, ISupplierAppService supplierApp, ISupplierAsnAppService supplierAsnApp) + public class PurchaseReceiptController : AbpController { - this._balanceApp = balanceApp; - this._labelService = labelService; - this._supplierApp = supplierApp; - this._supplierAsnApp = supplierAsnApp; - } + private readonly IBalanceAppService _balanceApp; + private readonly IInventoryLabelAppService _labelService; + private readonly ISupplierAppService _supplierApp; + private readonly ISupplierAsnAppService _supplierAsnApp; + private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteAppService; + private readonly IInspectNoteAppService _inspectNoteAppService; + + public PurchaseReceiptController(IBalanceAppService balanceApp, IInventoryLabelAppService labelService, ISupplierAppService supplierApp, ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService, IInspectNoteAppService inspectNoteAppService) + { + this._balanceApp = balanceApp; + this._labelService = labelService; + this._supplierApp = supplierApp; + this._supplierAsnApp = supplierAsnApp; + _purchaseReceiptNoteAppService = purchaseReceiptNoteAppService; + _inspectNoteAppService = inspectNoteAppService; + } - [HttpGet("receipt-sum-qty")] - public virtual async Task GetReceiptSumQtyAsync() - { - var dto = new PurchaseReceiptSumQtyDashboardDto(); + /// + /// 未上架数量 + /// + /// + [HttpGet("no-put-away-sum-qty")] + public virtual async Task GetNoPutAwaySumQtyAsync() + { + var dto = new PurchaseReceiptSumQtyDashboardDto(); - var items = await GetPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); + var items = await GetPurchaseReceiptItemDashboardAsync(); - dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; + dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; - return dto; - } + return dto; + } - [HttpGet("receipt-count-by-supplier")] - public virtual async Task> GetReceiptCountBySupplierQtyAsync() - { - var items = await GetPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); + /// + /// 未上架汇总 + /// + /// + [HttpGet("no-put-away-by-supplier")] + public virtual async Task> GetNoPutAwayBySupplierAsync() + { + var items = await GetPurchaseReceiptItemDashboardAsync(); - var dtos = items.GroupBy(t => t.SupplierShortName) - .Select( - t => new PurchaseReceiptCountBySupplierDashboardDto - { - SupplierShortName = t.Key, - Qty = t.Sum(t1 => t1.Qty) - }).OrderBy(t => t.SupplierShortName).ToList(); + var dtos = items.GroupBy(t => t.SupplierShortName) + .Select( + t => new PurchaseReceiptCountBySupplierDashboardDto + { + SupplierShortName = t.Key, + Qty = t.Sum(t1 => t1.Qty) + }).OrderBy(t => t.SupplierShortName).ToList(); - return dtos; - } + return dtos; + } - [HttpGet("receipt-item-list")] - public virtual async Task> GetReceiptItemListAsync() - { - return await GetPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); - } + /// + /// 未上架明细 + /// + /// + [HttpGet("no-put-away-item-list")] + public virtual async Task> GetReceiptItemListAsync() + { + return await GetPurchaseReceiptItemDashboardAsync(); + } - [HttpGet("un-receipt-sum-qty")] - public virtual async Task GetUnReceiptSumQtyAsync() - { - var dto = new PurchaseReceiptSumQtyDashboardDto(); + [HttpGet("un-receipt-sum-qty")] + public virtual async Task GetUnReceiptSumQtyAsync() + { + var dto = new PurchaseReceiptSumQtyDashboardDto(); - var items = await GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); + var items = await this.GetUnPurchaseReceiptItemDashboardAsync(); - dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; + dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; - return dto; - } + return dto; + } - [HttpGet("un-receipt-count-by-supplier")] - public virtual async Task> GetUnReceiptCountBySupplierQtyAsync() - { - var items = await GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); + [HttpGet("un-receipt-count-by-supplier")] + public virtual async Task> GetUnReceiptCountBySupplierQtyAsync() + { + var items = await GetUnPurchaseReceiptItemDashboardAsync(); - var dtos = items.GroupBy(t => t.SupplierShortName) - .Select( - t => new PurchaseReceiptCountBySupplierDashboardDto - { - SupplierShortName = t.Key, - Qty = t.Sum(t1 => t1.Qty) - }).OrderBy(t => t.SupplierShortName).ToList(); + var dtos = items.GroupBy(t => t.SupplierShortName) + .Select( + t => new PurchaseReceiptCountBySupplierDashboardDto + { + SupplierShortName = t.Key, + Qty = t.Sum(t1 => t1.Qty) + }).OrderBy(t => t.SupplierShortName).ToList(); - return dtos; - } + return dtos; + } - [HttpGet("un-receipt-item-list")] - public virtual async Task> GetUnReceiptItemListAsync() - { - return await GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); - } + [HttpGet("un-receipt-item-list")] + public virtual async Task> GetUnReceiptItemListAsync() + { + return await this.GetUnPurchaseReceiptItemDashboardAsync(); + } - private async Task> GetPurchaseReceiptItemDashboardAsync() - { - var balances = await GetBalancesAsync("INSPECT", EnumInventoryStatus.OK).ConfigureAwait(false); + private async Task> GetPurchaseReceiptItemDashboardAsync() + { + var inspectNoteDetailDto = await _inspectNoteAppService.GetInspectNoteDetailByToDayTaskAsync(); + var packingCodeList = inspectNoteDetailDto.Where(p => p.Status == EnumInventoryStatus.OK).Select(p => p.PackingCode).ToList(); + var balances = await _balanceApp.GetListByPackingCodesAsync(packingCodeList); + balances = balances.Where(p => p.LocationCode == "INSPECT").ToList(); - var packingcodes = balances.Select(t => t.PackingCode).Distinct(); + //var balances = await GetBalancesAsync("INSPECT", EnumInventoryStatus.OK); - var labels = await GetLabelsAsync(packingcodes).ConfigureAwait(false); + var packingcodes = balances.Select(t => t.PackingCode).Distinct(); - var supplierCodes = labels.Select(t => t.SupplierCode).Distinct(); + var labels = await GetLabelsAsync(packingcodes); - var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); + var supplierCodes = labels.Select(t => t.SupplierCode).Distinct(); - return ConvertToPurchaseReceiptItemDashboard(balances, labels, suppliers); - } + var suppliers = await GetSuppliersAsync(supplierCodes); - private static List ConvertToPurchaseReceiptItemDashboard( - List balances, - List labels, - List suppliers) - { - var dtos = new List(); + return ConvertToPurchaseReceiptItemDashboard(balances, labels, suppliers); + } - foreach (var balance in balances) + private List ConvertToPurchaseReceiptItemDashboard( + List balances, + List labels, + List suppliers) { - var supplierShortName = string.Empty; + var dtos = new List(); - var label = labels.FirstOrDefault(t => t.Code == balance.PackingCode); - - if (label == null) + foreach (var balance in balances) { - continue; - } + var supplierShortName = string.Empty; - var supplier = suppliers.FirstOrDefault(t => t != null && t.Code == label.SupplierCode); + var label = labels.FirstOrDefault(t => t.Code == balance.PackingCode); - if (supplier == null) - { - continue; - } + if (label == null) + continue; - supplierShortName = supplier.ShortName; + var supplier = suppliers.FirstOrDefault(t => t != null && t.Code == label.SupplierCode); - var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == balance.ItemCode); + if (supplier == null) + continue; - if (dto == null) - { - dto = new PurchaseReceiptItemDashboardDto(); + supplierShortName = supplier.ShortName; - dto.SupplierShortName = supplierShortName; - dto.ItemCode = balance.ItemCode; - dto.ItemDesc1 = balance.ItemDesc1; - dto.Qty = 0; + var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == balance.ItemCode); - dtos.Add(dto); - } + if (dto == null) + { + dto = new PurchaseReceiptItemDashboardDto(); - dto.Qty += balance.Qty; - } + dto.SupplierShortName = supplierShortName; + dto.ItemCode = balance.ItemCode; + dto.ItemDesc1 = balance.ItemDesc1; + dto.Qty = 0; - return dtos.OrderBy(t => t.SupplierShortName).ToList(); - } + dtos.Add(dto); + } - private async Task> GetBalancesAsync(string locationCode, EnumInventoryStatus status) - { - return await _balanceApp.GetListByLocationCodeAndStatusAsync(locationCode, status).ConfigureAwait(false); - } - private async Task> GetLabelsAsync(IEnumerable codes) - { - return await _labelService.GetByCodesAsync(codes).ConfigureAwait(false); - } - private async Task> GetSuppliersAsync(IEnumerable codes) - { - return await _supplierApp.GetByCodesAsync(codes).ConfigureAwait(false); - } + dto.Qty += balance.Qty; + } - private async Task> GetSupplierAsnsAsync() - { - return await _supplierAsnApp.GetForTodayUnReceivedListAsync().ConfigureAwait(false); - } + return dtos.OrderBy(t => t.SupplierShortName).ToList(); + } - private static List ConvertToUnPurchaseReceiptItemDashboard( - List supplierAsns, - List suppliers) - { - var dtos = new List(); + private async Task> GetBalancesAsync(string locationCode, EnumInventoryStatus status) + { + return await this._balanceApp.GetListByLocationCodeAndStatusAsync(locationCode, status); + } + private async Task> GetLabelsAsync(IEnumerable codes) + { + return await this._labelService.GetByCodesAsync(codes); + } + private async Task> GetSuppliersAsync(IEnumerable codes) + { + return await this._supplierApp.GetByCodesAsync(codes); + } - foreach (var supplierAsn in supplierAsns) + private async Task> GetSupplierAsnsAsync() { - var supplierShortName = string.Empty; + return await this._supplierAsnApp.GetForTodayUnReceivedListAsync(); + } - var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); + private List ConvertToUnPurchaseReceiptItemDashboard( + List supplierAsns, + List suppliers) + { + var dtos = new List(); - if (supplier == null) + foreach (var supplierAsn in supplierAsns) { - continue; - } + var supplierShortName = string.Empty; - supplierShortName = supplier.ShortName; + var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); - foreach (var detail in supplierAsn.Details) - { - var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode); + if (supplier == null) + continue; - if (dto == null) + supplierShortName = supplier.ShortName; + + foreach (var detail in supplierAsn.Details) { - dto = new PurchaseReceiptItemDashboardDto(); + var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode); - dto.SupplierShortName = supplierShortName; - dto.ItemCode = detail.ItemCode; - dto.ItemDesc1 = detail.ItemDesc1; - dto.Qty = 0; + if (dto == null) + { + dto = new PurchaseReceiptItemDashboardDto(); - dtos.Add(dto); - } + dto.SupplierShortName = supplierShortName; + dto.ItemCode = detail.ItemCode; + dto.ItemDesc1 = detail.ItemDesc1; + dto.Qty = 0; + + dtos.Add(dto); + } - dto.Qty += detail.Qty; + dto.Qty += detail.Qty; + } } - } - return dtos.OrderBy(t => t.SupplierShortName).ToList(); - } + return dtos.OrderBy(t => t.SupplierShortName).ToList(); + } - private async Task> GetUnPurchaseReceiptItemDashboardAsync() - { - var dtos = new List(); + private async Task> GetUnPurchaseReceiptItemDashboardAsync() + { + var dtos = new List(); - var supplierAsns = await GetSupplierAsnsAsync().ConfigureAwait(false); + var supplierAsns = await this.GetSupplierAsnsAsync(); - var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); + var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); - var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); + var suppliers = await GetSuppliersAsync(supplierCodes); - return ConvertToUnPurchaseReceiptItemDashboard(supplierAsns, suppliers); + return this.ConvertToUnPurchaseReceiptItemDashboard(supplierAsns, suppliers); + } } + + } diff --git a/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql b/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql index 8cbecdc09..472671bb6 100644 --- a/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql +++ b/be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql @@ -5614,96 +5614,4 @@ CREATE UNIQUE INDEX [IX_Store_ScrapNote_Number] ON [Store_ScrapNote] ([Number]) CREATE INDEX [IX_Store_ScrapNoteDetail_MasterID] ON [Store_ScrapNoteDetail] ([MasterID]) -CREATE UNIQUE INDEX [IX_Store_ScrapNoteDetail_Number_ItemCode_FromPackingCode_FromLocationCode_ToLocationCode_FromLot_FromStatus] ON [Store_ScrapNoteDetail] ([Number], [ItemCode], [FromPackingCode], [FromLocationCode], [ToLocationCode], [FromLot], [FromStatus]) WHERE [FromPackingCode] IS NOT NULL AND [FromLot] IS NOT NULL - - -CREATE UNIQUE INDEX [IX_Store_ScrapRequest_Number] ON [Store_ScrapRequest] ([Number]) - - -CREATE INDEX [IX_Store_ScrapRequestDetail_MasterID] ON [Store_ScrapRequestDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_ScrapRequestDetail_Number_ItemCode_LocationCode] ON [Store_ScrapRequestDetail] ([Number], [ItemCode], [LocationCode]) - - -CREATE UNIQUE INDEX [IX_Store_SupplierAsn_Number] ON [Store_SupplierAsn] ([Number]) - - -CREATE INDEX [IX_Store_SupplierAsn_SupplierCode] ON [Store_SupplierAsn] ([SupplierCode]) - - -CREATE INDEX [IX_Store_SupplierAsnDetail_MasterID] ON [Store_SupplierAsnDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_SupplierAsnDetail_Number_ItemCode_PackingCode] ON [Store_SupplierAsnDetail] ([Number], [ItemCode], [PackingCode]) - - -CREATE UNIQUE INDEX [IX_Store_TransferNote_Number] ON [Store_TransferNote] ([Number]) - - -CREATE INDEX [IX_Store_TransferNoteDetail_MasterID] ON [Store_TransferNoteDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_TransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode_FromStatus_ToStatus] ON [Store_TransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode], [FromStatus], [ToStatus]) WHERE [FromPackingCode] IS NOT NULL - - -CREATE UNIQUE INDEX [IX_Store_TransferRequest_Number] ON [Store_TransferRequest] ([Number]) - - -CREATE INDEX [IX_Store_TransferRequestDetail_MasterID] ON [Store_TransferRequestDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_UnplannedIssueNote_Number] ON [Store_UnplannedIssueNote] ([Number]) - - -CREATE INDEX [IX_Store_UnplannedIssueNoteDetail_MasterID] ON [Store_UnplannedIssueNoteDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_UnplannedIssueNoteDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedIssueNoteDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL - - -CREATE UNIQUE INDEX [IX_Store_UnplannedIssueRequest_Number] ON [Store_UnplannedIssueRequest] ([Number]) - - -CREATE INDEX [IX_Store_UnplannedIssueRequestDetail_MasterID] ON [Store_UnplannedIssueRequestDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_UnplannedIssueRequestDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedIssueRequestDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL - - -CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptNote_Number] ON [Store_UnplannedReceiptNote] ([Number]) - - -CREATE INDEX [IX_Store_UnplannedReceiptNoteDetail_MasterID] ON [Store_UnplannedReceiptNoteDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptNoteDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedReceiptNoteDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL - - -CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptRequest_Number] ON [Store_UnplannedReceiptRequest] ([Number]) - - -CREATE INDEX [IX_Store_UnplannedReceiptRequestDetail_MasterID] ON [Store_UnplannedReceiptRequestDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_UnplannedReceiptRequestDetail_Number_PackingCode_ItemCode_Lot_Status] ON [Store_UnplannedReceiptRequestDetail] ([Number], [PackingCode], [ItemCode], [Lot], [Status]) WHERE [Lot] IS NOT NULL - - -CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNote_Number] ON [Store_WarehouseTransferNote] ([Number]) - - -CREATE INDEX [IX_Store_WarehouseTransferNoteDetail_MasterID] ON [Store_WarehouseTransferNoteDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode] ON [Store_WarehouseTransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode]) WHERE [FromPackingCode] IS NOT NULL - - -CREATE UNIQUE INDEX [IX_Store_WorkOrder_Number] ON [Store_WorkOrder] ([Number]) - - -CREATE INDEX [IX_Store_WorkOrderDetail_MasterID] ON [Store_WorkOrderDetail] ([MasterID]) - - -CREATE UNIQUE INDEX [IX_Store_WorkOrderDetail_Number_ItemCode] ON [Store_WorkOrderDetail] ([Number], [ItemCode]) - - +CREATE UNIQUE INDEX [IX_Store_ScrapNoteDetail_Number_ItemCode_FromPackingCode_FromLocationCode_ToLocationCode_FromLot_FromStatus] ON [Store_ScrapNoteDetail] ([Number], [ItemCode], [FromPackingCode], [FromLocationCode], [ToLocationCode], [ \ No newline at end of file diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteDetailExchangeDto.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteDetailExchangeDto.cs new file mode 100644 index 000000000..211d70c8c --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteDetailExchangeDto.cs @@ -0,0 +1,45 @@ + +using System.ComponentModel.DataAnnotations; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote; + +public class ItemTransformNoteDetailExchangeDto +{ + /// + /// 物品代码 + /// + [Display(Name = "物品代码")] + public string ItemCode { get; set; } + /// + /// ERP库位 + /// + [Display(Name = "ERP库位")] + public string LocationErpCode { get; set; } + /// + /// 原因代码 + /// + [Display(Name = "原因代码")] + public string ReasonCode { get; set; } + /// + /// 调整数量 + /// + [Display(Name = "来源数量")] + public decimal FromQty { get; set; } + /// + /// 目标数量 + /// + [Display(Name = "目标数量")] + public decimal ToQty { get; set; } + /// + /// 目标库位 + /// + [Display(Name = "目标库位")] + [Required(ErrorMessage = "{0}是必填项")] + public string ToLocationCode { get; set; } + /// + /// 目标物品代码 + /// + [Display(Name = "目标物品代码")] + public string ToItemCode { get; set; } + +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteExchangeDto.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteExchangeDto.cs new file mode 100644 index 000000000..64c529b77 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteExchangeDto.cs @@ -0,0 +1,30 @@ +using System; +using System.ComponentModel.DataAnnotations; +namespace Win_in.Sfs.Wms.DataExchange.WMS.ItemTransformNote; + +public class ItemTransformNoteExchangeDto +{ + /// + /// 单据号 + /// + public string Number { get; set; } + /// + /// 生效日期 + /// + public DateTime ActiveDate { get; set; } = DateTime.Now.Date; + /// + /// 操作员 + /// + public string Worker { get; set; } + + /// + /// 类型 + /// + public string Type { get; set; } + + /// + /// 明细 + /// + [Display(Name = "明细")] + public ItemTransformNoteDetailExchangeDto Detail { get; set; } = new(); +} diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs index e30d65560..68b010434 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/TransferLogs/TransferLogAppService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Wms.Inventory.Application.Contracts; @@ -23,15 +24,17 @@ public class TransferLogAppService { private readonly ITransferLogManager _transferLogManager; private readonly IInterfaceCalendarAclService _interfaceCalendarAclService; + private readonly ILocationAppService _locationAppService; public TransferLogAppService( ITransferLogRepository repository , ITransferLogManager transferLogManager , IInterfaceCalendarAclService interfaceCalendarAclService - ) : base(repository) + , ILocationAppService locationAppService) : base(repository) { _transferLogManager = transferLogManager; _interfaceCalendarAclService = interfaceCalendarAclService; + _locationAppService = locationAppService; } [HttpPost("add")] diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreDetailWithFromToInputBase.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreDetailWithFromToInputBase.cs index 0994791e5..9839fd7a7 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreDetailWithFromToInputBase.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Bases/Inputs/SfsStoreDetailWithFromToInputBase.cs @@ -149,5 +149,6 @@ public abstract class SfsStoreDetailWithFromToInputBase /// [Display(Name = "目标库存状态")] public EnumInventoryStatus ToStatus { get; set; } + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs index 1b26733b8..791a05915 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobAppService.cs @@ -48,4 +48,10 @@ public interface IPurchaseReceiptJobAppService /// /// Task GetNoCacheAsync(Guid id); + + /// + /// 根据收货编号获取收货任务 + /// + /// + Task> GetListBySupplierCodeOnTodayAsync(string supplierCode); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/InspectNotes/IInspectNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/InspectNotes/IInspectNoteAppService.cs index eead05bf0..ea5242e09 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/InspectNotes/IInspectNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/InspectNotes/IInspectNoteAppService.cs @@ -21,4 +21,6 @@ public interface IInspectNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase /// /// Task> CreateSummaryDetailAndDetailByIdAsync(Guid id, InspectNoteEditInput input); + + Task> GetInspectNoteDetailByToDayTaskAsync(); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDTO.cs index 10c1b8257..bf96e9680 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDTO.cs @@ -19,5 +19,8 @@ public class ItemTransformNoteDTO : SfsStoreDTOBase, [Display(Name = "任务单号")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public string JobNumber { get; set; } - + /// + /// 调整类型 + /// + public string Type { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDetailDTO.cs index 12cd97405..6357fe2fd 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ItemTransformNotes/DTOs/ItemTransformNoteDetailDTO.cs @@ -214,7 +214,11 @@ public class ItemTransformNoteDetailDTO : SfsStoreDetailDTOBase /// [Display(Name = "目标ERP储位")] public string ToLocationErpCode { get; set; } - + /// + /// ERP库位 + /// + [Display(Name = "ERP库位")] + public string LocationErpCode { get; set; } /// /// 目标仓库 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs index 9c7fee755..c50180570 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Orders/PurchaseOrders/IPurchaseOrderAppService.cs @@ -37,4 +37,6 @@ public interface IPurchaseOrderAppService /// /// Task> CreateManyAsync(List inputs); + + Task> GetListBySupplierCodeAsync(string supplierCode, string itemCode); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/ISupplierAsnAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/ISupplierAsnAppService.cs index 2500f94f8..440cf5973 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/ISupplierAsnAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Plans/SupplierAsns/ISupplierAsnAppService.cs @@ -34,4 +34,6 @@ public interface ISupplierAsnAppService Task GenerateSupplierAsnNumberAsync(DateTime activeDate); Task UpdateStatusAsync(string asnNumber, EnumSupplierAsnStatus status); + + Task> GetForTodayListAsync(); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs index 22b45c3bf..a72b629b6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs @@ -191,6 +191,21 @@ public class PurchaseReceiptJobAppService : return ObjectMapper.Map(entity); } + /// + /// 根据供应商编号获取收货任务 + /// + /// + [HttpPost("get-by-supplier-code-on-today/{supplierCode}")] + public virtual async Task> GetListBySupplierCodeOnTodayAsync(string supplierCode) + { + var purchaseReceiptJobs = await _repository.GetListAsync(p => + p.SupplierCode == supplierCode && + p.PlanArriveDate.Year == DateTime.Now.Year && + p.PlanArriveDate.Month == DateTime.Now.Month && + p.PlanArriveDate.Day == DateTime.Now.Day); + var dto = ObjectMapper.Map, List>(purchaseReceiptJobs); + return dto; + } #endregion /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/InspectNotes/InspectNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/InspectNotes/InspectNoteAppService.cs index 83f622f60..8c4bcb8a4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/InspectNotes/InspectNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/InspectNotes/InspectNoteAppService.cs @@ -87,4 +87,29 @@ public class InspectNoteAppService : SfsStoreWithDetailsAppServiceBase< return ObjectMapper.Map, List>(inspectNotes); } + + [HttpPost("detail-list/by-to-day")] + public virtual async Task> GetInspectNoteDetailByToDayTaskAsync() + { + var entitys = await _repository.GetListAsync( + p => p.Details.Any( + y => y.InspectDate.Year == DateTime.Now.Year + && y.InspectDate.Month == DateTime.Now.Month + && y.InspectDate.Day == DateTime.Now.Day), true + ).ConfigureAwait(false); + + List list = new List(); + + + foreach (var entity in entitys) + { + list.AddRange(entity.Details.Where(y => y.InspectDate.Year == DateTime.Now.Year + && y.InspectDate.Month == DateTime.Now.Month + && y.InspectDate.Day == DateTime.Now.Day)); + } + + var detailDtos = ObjectMapper.Map, List>(list); + + return detailDtos; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductReceiptNotes/ProductReceiptNoteAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductReceiptNotes/ProductReceiptNoteAutoMapperProfile.cs index 63469e1e2..cb730c146 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductReceiptNotes/ProductReceiptNoteAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductReceiptNotes/ProductReceiptNoteAutoMapperProfile.cs @@ -11,7 +11,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile { CreateMap() .ReverseMap(); - + CreateMap() .IgnoreAuditedObjectProperties() .Ignore(x => x.ProdLine) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs index e386edc0c..8c91beb97 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs @@ -256,4 +256,22 @@ public class PurchaseOrderAppService : return dtos; } + + [HttpGet("get-list-by-supplier-code-and-item-code")] + public virtual async Task> GetListBySupplierCodeAsync(string supplierCode, string itemCode) + { + var entitys = await _repository.GetListAsync(p => p.Details.Any(y => y.ItemCode == itemCode) && p.SupplierCode == supplierCode); + + List list = new List(); + + foreach (var entity in entitys) + { + var purchaseOrder = await _repository.GetAsync(entity.Id); + list.Add(purchaseOrder); + } + + var dtos = ObjectMapper.Map, List>(list); + + return dtos; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/SupplierAsns/SupplierAsnAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/SupplierAsns/SupplierAsnAppService.cs index b57a4890e..e9ac75db2 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/SupplierAsns/SupplierAsnAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/SupplierAsns/SupplierAsnAppService.cs @@ -96,6 +96,15 @@ public class SupplierAsnAppService : await _repository.UpdateAsync(supplierAsn).ConfigureAwait(false); } + [HttpGet("list-for-today")] + public virtual async Task> GetForTodayListAsync() + { + var entities = await _repository.GetListAsync( + p => p.PlanArriveDate.Year == DateTime.Now.Year && p.PlanArriveDate.Month == DateTime.Now.Month && + p.PlanArriveDate.Day == DateTime.Now.Day, true); + + return ObjectMapper.Map, List>(entities); + } #endregion diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/InspectNotes/InspectNoteDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/InspectNotes/InspectNoteDetail.cs index 6c4886b40..e91cbe0db 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/InspectNotes/InspectNoteDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/InspectNotes/InspectNoteDetail.cs @@ -1,3 +1,4 @@ +using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Win_in.Sfs.Shared.Domain; @@ -161,4 +162,9 @@ public class InspectNoteDetail : SfsStoreDetailWithLotPackingLocationStatusEntit [Column(TypeName = "decimal(18,6)")] public decimal StdPackQty { get; set; } + /// + /// 质检时间 + /// + [Display(Name = "质检时间")] + public DateTime InspectDate { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/IssueJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/IssueJobAutoMapperProfile.cs index d78170183..9075447bc 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/IssueJobAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/IssueJobAutoMapperProfile.cs @@ -56,37 +56,37 @@ public partial class StoreEventAutoMapperProfile : Profile ; CreateMap() - .MapExpectInOutFrom() + .MapExpectInOutFrom() .Ignore(x => x.Worker) .Ignore(x => x.SerialNumber) .Ignore(x => x.ExtraProperties); CreateMap() + .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.MaterialRequestNumber)) .Ignore(x => x.Confirmed) .Ignore(x => x.JobNumber) - .Ignore(x => x.RequestNumber) .Ignore(x => x.ActiveDate) ; CreateMap() - .Ignore(x => x.IssueTime) - .Ignore(x => x.FromPackingCode) - .Ignore(x => x.ToPackingCode) - .Ignore(x => x.FromContainerCode) - .Ignore(x => x.ToContainerCode) - .Ignore(x => x.FromLot) - .Ignore(x => x.ToLot) - .Ignore(x => x.SupplierBatch) - .Ignore(x => x.ArriveDate) - .Ignore(x => x.ProduceDate) - .Ignore(x => x.ExpireDate) - .Ignore(x => x.FromLocationCode) - .Ignore(x => x.FromLocationArea) - .Ignore(x => x.FromLocationGroup) - .Ignore(x => x.FromLocationErpCode) - .Ignore(x => x.FromWarehouseCode) - .Ignore(x => x.FromStatus) - .Ignore(x => x.ToStatus) - .Ignore(x => x.Qty) + .ForMember(x => x.Qty, y => y.MapFrom(d => d.HandledQty)) + .ForMember(x => x.IssueTime, y => y.MapFrom(d => DateTime.Now)) + .ForMember(x => x.FromPackingCode, y => y.MapFrom(d =>d.HandledPackingCode)) + .ForMember(x => x.ToPackingCode, y => y.MapFrom(d => d.HandledPackingCode)) + .ForMember(x => x.FromContainerCode, y => y.MapFrom(d => d.HandledContainerCode)) + .ForMember(x => x.ToContainerCode, y => y.MapFrom(d => d.HandledContainerCode)) + .ForMember(x => x.FromLot, y => y.MapFrom(d => d.HandledLot)) + .ForMember(x => x.ToLot, y => y.MapFrom(d => d.HandledLot)) + .ForMember(x => x.SupplierBatch, y => y.MapFrom(d => d.HandledSupplierBatch)) + .ForMember(x => x.ArriveDate, y => y.MapFrom(d => d.HandledArriveDate)) + .ForMember(x => x.ProduceDate, y => y.MapFrom(d => d.HandledProduceDate)) + .ForMember(x => x.ExpireDate, y => y.MapFrom(d => d.ExpiredTime)) + .ForMember(x => x.FromLocationCode, y => y.MapFrom(d => d.HandledFromLocationCode)) + .ForMember(x => x.FromLocationArea, y => y.MapFrom(d => d.HandledFromLocationArea)) + .ForMember(x => x.FromLocationGroup, y => y.MapFrom(d => d.HandledFromLocationGroup)) + .ForMember(x => x.FromLocationErpCode, y => y.MapFrom(d => d.HandledFromLocationErpCode)) + .ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.HandledFromWarehouseCode)) + .ForMember(x => x.FromStatus, y => y.MapFrom(d => d.Status)) + .ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status)) ; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/IHasLocationDtoExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/IHasLocationDtoExtensions.cs index 388c601e5..8bfaac66e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/IHasLocationDtoExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/IHasLocationDtoExtensions.cs @@ -26,7 +26,7 @@ public static class IHasLocationExtensions { var location = await locationAclService.GetByCodeAsync(hasFromTolocation.FromLocationCode).ConfigureAwait(false); if (location != null) - { + { hasFromTolocation.FromLocationErpCode = location.ErpLocationCode; if (string.IsNullOrEmpty(hasFromTolocation.FromWarehouseCode)) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs index 89d439cfb..845a07a72 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs @@ -187,6 +187,7 @@ public class MaterialRequestEventHandler job.WarehouseCode = fromLocation.WarehouseCode; job.ProdLine = fromLocation.LocationGroupCode; job.Worker = materialRequest.Worker; + job.MaterialRequestNumber = materialRequest.Number; return job; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/IssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/IssueNoteEventHandler.cs index 1ec0f954a..e77ff9309 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/IssueNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/IssueNoteEventHandler.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading.Tasks; using Volo.Abp.EventBus; using Volo.Abp.Uow; +using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; @@ -20,6 +21,13 @@ public class IssueNoteEventHandler { private const EnumTransType TransType = EnumTransType.Issue; + private readonly ILocationAppService _locationAppService; + + public IssueNoteEventHandler(ILocationAppService locationAppService) + { + _locationAppService = locationAppService; + } + [UnitOfWork] public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData) { @@ -68,7 +76,7 @@ public class IssueNoteEventHandler private async Task AddTransferLogsAsync(List inputList) { - var transferLogs = new List(); + var transferLogs = new List(); transferLogs.AddRange(inputList); @@ -83,42 +91,48 @@ public class IssueNoteEventHandler { var transferLog = ObjectMapper.Map(detail); + LocationDTO fromLocationDTO = null; + LocationDTO toLocationDTO = null; + if (issueNote.UseOnTheWayLocation) { - var location = await LocationAclService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); + var location = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); switch (route) { case EnumTransferRoute.SourceToOnTheWay: - detail.ToLocationCode = detail.OnTheWayLocationCode; - detail.ToLocationErpCode = location.ErpLocationCode; - detail.ToWarehouseCode = location.WarehouseCode; - detail.ToLocationArea = location.AreaCode; + fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); + + toLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); break; case EnumTransferRoute.OnTheWayToDestination: - detail.FromLocationCode = detail.OnTheWayLocationCode; - detail.FromLocationErpCode = location.ErpLocationCode; - detail.FromWarehouseCode = location.WarehouseCode; - detail.FromLocationArea = location.AreaCode; + fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); + + toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); + + await RemovePackingCodeAndContainerCodeAndLotAsync(transferLog).ConfigureAwait(false); break; case EnumTransferRoute.SourceToDestination: default: throw new ArgumentOutOfRangeException(nameof(route), route, null); } } - - if (issueNote.UseOnTheWayLocation) + else { - transferLog.FromLocationCode = detail.OnTheWayLocationCode; - var location = await LocationAclService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); - transferLog.FromLocationGroup = location.LocationGroupCode; - transferLog.FromLocationArea = location.AreaCode; - transferLog.FromLocationErpCode = location.ErpLocationCode; - transferLog.FromWarehouseCode=location.WarehouseCode; + fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); + toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); } - transferLog.TransType = TransType; + transferLog.FromLocationCode = fromLocationDTO.Code; + transferLog.FromLocationArea = fromLocationDTO.AreaCode; + transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode; + transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode; + + transferLog.ToLocationCode = toLocationDTO.Code; + transferLog.ToLocationArea = toLocationDTO.AreaCode; + transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode; + transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode; transferLog.TransSubType = Enum.Parse(issueNote.RequestType); - transferLog.Worker = issueNote.Worker; + transferLog.TransType = TransType; transferLog.DocNumber = issueNote.Number; transferLog.JobNumber = issueNote.JobNumber; @@ -128,4 +142,17 @@ public class IssueNoteEventHandler return transferLogs; } + private async Task RemovePackingCodeAndContainerCodeAndLotAsync(TransferLogEditInput transferLogCreateInput) + { + transferLogCreateInput.ToPackingCode = ""; + transferLogCreateInput.ToLot = ""; + transferLogCreateInput.ToContainerCode = ""; + + transferLogCreateInput.FromPackingCode = ""; + transferLogCreateInput.FromLot = ""; + transferLogCreateInput.FromContainerCode = ""; + + + } + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs index da4d933d9..981f42265 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs @@ -7,7 +7,6 @@ using Volo.Abp.Uow; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Inventory.Application.Contracts; -using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Event.Transaction; @@ -74,7 +73,7 @@ public class ScrapNoteEventHandler transferLog.Worker = scrapNote.Worker; transferLog.DocNumber = scrapNote.Number; transferLog.JobNumber = scrapNote.JobNumber; - + transferLogs.Add(transferLog); }