From 4d0a006f41038f7dcf88bfc76a6a56636e507c34 Mon Sep 17 00:00:00 2001 From: mahao Date: Fri, 14 Apr 2023 13:27:42 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=B8=8A=E6=B5=B7=E4=B8=9C=E9=98=B3?= =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E5=90=8C=E6=AD=A5=E9=95=BF=E6=98=A5=E4=B8=9C?= =?UTF-8?q?=E9=98=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AsnTimeWindowController.cs | 32 +- .../Controllers/MaterialRequestController.cs | 199 +++++----- .../Controllers/PlanAndActualController.cs | 262 +++++++------ .../Controllers/PurchaseReceiptController.cs | 352 ++++++++++-------- .../IPurchaseReceiptJobAppService.cs | 6 + .../InspectNotes/IInspectNoteAppService.cs | 2 + .../IPurchaseOrderAppService.cs | 2 + .../SupplierAsns/ISupplierAsnAppService.cs | 2 + .../PurchaseReceiptJobAppService.cs | 15 + .../InspectNotes/InspectNoteAppService.cs | 25 ++ .../PurchaseOrders/PurchaseOrderAppService.cs | 18 + .../SupplierAsns/SupplierAsnAppService.cs | 9 + .../Notes/InspectNotes/InspectNoteDetail.cs | 6 + 13 files changed, 534 insertions(+), 396 deletions(-) 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/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/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/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; } } From 062fab0067e34485a73aef53b833b832e15c2696 Mon Sep 17 00:00:00 2001 From: "mingliang.tang" Date: Fri, 14 Apr 2023 13:36:06 +0800 Subject: [PATCH 2/6] =?UTF-8?q?WMS-TYRP=E5=9B=9E=E6=94=B6=E6=96=99?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Outgoing/ItemTransformNoteConverter.cs | 139 ++++++++++++++++++ .../Outgoing/TyrpOutgoingBackgroundWorker.cs | 4 + ...s.Wms.DataExchange.Fawtyg.TyrpAgent.csproj | 1 + .../Enums/EnumOutgoingDataType.cs | 1 + .../ItemTransformNoteDetailExchangeDto.cs | 45 ++++++ .../ItemTransformNoteExchangeDto.cs | 30 ++++ .../DTOs/ItemTransformNoteDTO.cs | 5 +- .../DTOs/ItemTransformNoteDetailDTO.cs | 6 +- .../Transactions/ScrapNoteEventHandler.cs | 1 - 9 files changed, 229 insertions(+), 3 deletions(-) create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ItemTransformNoteConverter.cs create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteDetailExchangeDto.cs create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemTransformNote/ItemTransformNoteExchangeDto.cs 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/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/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.Event/Transactions/ScrapNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ScrapNoteEventHandler.cs index 5501481a8..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; From 8a0c77959a3ce68dd0cc8a33704125a3a8132d8c Mon Sep 17 00:00:00 2001 From: "rongguo.jia" Date: Fri, 14 Apr 2023 14:44:29 +0800 Subject: [PATCH 3/6] =?UTF-8?q?[fix]DeliverRequestFis=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Bases/SfsStoreRequestAppServiceBase.cs | 3 ++- .../DeliverRequestFisAppService.cs | 24 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreRequestAppServiceBase.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreRequestAppServiceBase.cs index e82144b3a..7bed7b52d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreRequestAppServiceBase.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Bases/SfsStoreRequestAppServiceBase.cs @@ -157,7 +157,8 @@ public abstract class SfsStoreRequestAppServiceBase CompleteByNumberAsync(string number) { var entity = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false); - Check.NotNull(entity, typeof(TEntity).Name); + if (entity == null) return null; + // Check.NotNull(entity, typeof(TEntity).Name); var result = await _requestManager.CompleteAsync(entity).ConfigureAwait(false); var dto = ObjectMapper.Map(result); return dto; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs index 84975add6..5dd549d4c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs @@ -35,14 +35,14 @@ public class DeliverRequestFisAppService : public DeliverRequestFisAppService( IDeliverRequestRepository repository, - IDeliverRequestManager DeliverRequestManager, + IDeliverRequestManager deliverRequestManager, IAreaAppService areaApp, ICustomerAppService customerApp, ICustomerAddressAppService customerAddressApp ) - : base(repository, DeliverRequestManager) + : base(repository, deliverRequestManager) { - _deliverRequestManager = DeliverRequestManager; + _deliverRequestManager = deliverRequestManager; _areaApp = areaApp; _customerApp = customerApp; _customerAddressApp = customerAddressApp; @@ -60,6 +60,24 @@ public class DeliverRequestFisAppService : return base.GetPagedListByFilterAsync(sfsRequestInput, includeDetails, cancellationToken); } + + /// + /// 【创建】发货申请 + /// + /// + /// + [HttpPost("")] + //[Authorize(DeliverRequestPermissions.Create)] + public override async Task CreateAsync(DeliverRequestEditInput input) + { + var entity = ObjectMapper.Map(input); + + await _deliverRequestManager.CreateAsync(entity).ConfigureAwait(false); + + var dto = ObjectMapper.Map(entity); + return dto; + } + #region import protected virtual async Task CheckImportInputBusinessAsync( From 97dacca3da1249387f3780f62edf735bd3d41d2d Mon Sep 17 00:00:00 2001 From: mahao Date: Fri, 14 Apr 2023 15:49:57 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=AE=A1=E9=87=8F=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=BF=85=E5=A1=AB=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Uoms/Inputs/UomImportInput.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Uoms/Inputs/UomImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Uoms/Inputs/UomImportInput.cs index 43aadd97c..ee648999a 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Uoms/Inputs/UomImportInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Uoms/Inputs/UomImportInput.cs @@ -19,6 +19,7 @@ public class UomImportInput : SfsBaseDataImportInputBase /// 名称 /// [Display(Name = "名称")] + [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public string Name { get; set; } From f3925ba1c2425b2148a53327a79d5d2a1c246860 Mon Sep 17 00:00:00 2001 From: "rongguo.jia" Date: Fri, 14 Apr 2023 17:45:44 +0800 Subject: [PATCH 5/6] =?UTF-8?q?[fix]ApiFox=E8=B0=83=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87:=E6=88=90=E5=93=81=E5=8F=91=E8=B4=A7=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=09api/wms/store/deliver-request/list=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=E6=88=90=E5=93=81=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E4=BB=BB=E5=8A=A1=09api/wms/store/deliver-job/list=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=E6=88=90?= =?UTF-8?q?=E5=93=81=E5=8F=91=E8=B4=A7=E8=AE=B0=E5=BD=95=09api/wms/store/d?= =?UTF-8?q?eliver-note/list-for-normal=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20FIS=E5=8F=91=E8=B4=A7=E7=94=B3=E8=AF=B7=09api/wm?= =?UTF-8?q?s/store/deliver-request-fis/list=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20FIS=E5=8F=91=E8=B4=A7=E8=AE=B0=E5=BD=95=09?= =?UTF-8?q?api/wms/store/deliver-note/list-for-fis=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=E5=AE=A2=E6=88=B7=E9=80=80=E6=8B=86?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=09api/wms/store/product-recycle-request/list?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E9=80=80=E6=8B=86=E8=AE=B0=E5=BD=95=09api/wms/store/p?= =?UTF-8?q?roduct-recycle-note/list=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=E7=94=9F=E4=BA=A7=E9=80=80=E5=BA=93=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=09api/wms/store/production-return-request/list=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E9=80=80=E8=B4=A7=E4=BB=BB=E5=8A=A1=09api/wms/store/production?= =?UTF-8?q?-return-job/list=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E7=94=9F=E4=BA=A7=E9=80=80=E5=BA=93=E8=AE=B0=E5=BD=95=09?= =?UTF-8?q?api/wms/store/production-return-note/list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...FrameworkCore.SqlServer.StoreDbContext.sql | 95 ++++++++++++++++++- .../Controllers/Stores/L7Controller.cs | 2 +- .../DeliverNotes/IDeliverNoteAppService.cs | 26 +++++ .../IProductRecycleNoteAppService.cs | 1 - .../ProductRecycleNoteAppService.cs | 17 ---- .../ProductionReturnNoteAppService.cs | 2 +- ...roductionReturnRequestAutoMapperProfile.cs | 1 - .../ProductionReturnJobAutoMapperProfile.cs | 7 +- ....cs => ProductionReturnJobEventHandler.cs} | 2 +- 9 files changed, 125 insertions(+), 28 deletions(-) rename be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/{ProductionReturnStoreEventHandler.cs => ProductionReturnJobEventHandler.cs} (98%) 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 472671bb6..f10be54b4 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 @@ -3069,6 +3069,7 @@ CREATE TABLE [Store_InspectNoteDetail] ( [Weight] nvarchar(max) NULL, [OtherPropertyJson] nvarchar(max) NULL, [StdPackQty] decimal(18,6) NOT NULL, + [InspectDate] datetime2 NOT NULL, [CreationTime] datetime2 NOT NULL, [CreatorId] uniqueidentifier NULL, [LastModificationTime] datetime2 NULL, @@ -5614,4 +5615,96 @@ 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], [ \ No newline at end of file +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]) + + diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/L7Controller.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/L7Controller.cs index a3b534eaa..6b6a9fd09 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/L7Controller.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/L7Controller.cs @@ -54,7 +54,7 @@ public class L7Controller : AbpController [HttpPost("create-product-recycle-note-with-l7")] public virtual async Task CreateProductRecycleNoteWithL7Async(ProductRecycleNoteEditInput input) { - return await _productRecycleNoteAppService.CreateWithL7Async(input).ConfigureAwait(false); + return await _productRecycleNoteAppService.CreateAsync(input).ConfigureAwait(false); } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/IDeliverNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/IDeliverNoteAppService.cs index eb39e36ee..b0aab9524 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/IDeliverNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/IDeliverNoteAppService.cs @@ -1,4 +1,9 @@ +using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.Application.Dtos; +using Win_in.Sfs.Shared.Application.Contracts; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -9,4 +14,25 @@ public interface IDeliverNoteAppService : Task CreateWithL7Async(DeliverNoteEditInput input); + Task> GetForFisListAsync( + SfsStoreRequestInputBase sfsRequestDTO, + bool includeDetails = false, + CancellationToken cancellationToken = default); + + Task> GetForNormalListAsync( + SfsStoreRequestInputBase sfsRequestDTO, + bool includeDetails = false, + CancellationToken cancellationToken = default); + + Task> GetForRAWListAsync( + SfsStoreRequestInputBase sfsRequestDTO, + bool includeDetails = false, + CancellationToken cancellationToken = default); + + + Task ExportForNormalAsync(SfsStoreRequestInputBase requestInput); + + Task ExportForRAWAsync(SfsExportRequestInput requestInput); + + Task SumPrintAsync(string number); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/IProductRecycleNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/IProductRecycleNoteAppService.cs index 8a4425a1e..426677c67 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/IProductRecycleNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/IProductRecycleNoteAppService.cs @@ -7,5 +7,4 @@ public interface IProductRecycleNoteAppService : { Task CreateAsync(ProductRecycleNoteEditInput input); - Task CreateWithL7Async(ProductRecycleNoteEditInput input); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs index 36e876a07..db384ee8f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs @@ -54,23 +54,6 @@ public class ProductRecycleNoteAppService : return dto; } - /// - /// 新增退货接口 - /// - /// - /// - [HttpPost("create-with-l7")] - public virtual async Task CreateWithL7Async(ProductRecycleNoteEditInput input) - { - var entity = ObjectMapper.Map(input); - - await _productRecycleNoteManager.CreateAsync(entity).ConfigureAwait(false); - - var dto = ObjectMapper.Map(entity); - - return dto; - } - [HttpGet("note-and-back-flush/{id}")] public virtual async Task GetNoteAndBackFlushAsync(Guid id) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs index 302071a0f..35db79092 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs @@ -28,7 +28,7 @@ public class ProductionReturnNoteAppService : } /// - /// 新增接口 + /// 新增实体 /// /// /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAutoMapperProfile.cs index 1f074962d..18c6c170f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAutoMapperProfile.cs @@ -20,7 +20,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile CreateMap() .IgnoreAuditedObjectProperties() - .Ignore(x => x.ToWarehouseCode) .Ignore(x => x.MasterID) .Ignore(x => x.TenantId) .Ignore(x => x.Number) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductionReturnJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductionReturnJobAutoMapperProfile.cs index 2bef49393..f75b41476 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductionReturnJobAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductionReturnJobAutoMapperProfile.cs @@ -52,9 +52,6 @@ public partial class StoreEventAutoMapperProfile : Profile CreateMap() .MapExpectInOutTo() - .Ignore(x => x.LocationArea) - .Ignore(x => x.LocationGroup) - .Ignore(x => x.WarehouseCode) .Ignore(x => x.SerialNumber) .Ignore(x => x.Worker) .Ignore(x => x.ExtraProperties) @@ -63,10 +60,10 @@ public partial class StoreEventAutoMapperProfile : Profile CreateMap() .MapExpectInOutTo() .ForMember(x => x.LocationCode, y => y.MapFrom(d => d.FromLocationCode)) + .ForMember(x => x.LocationArea, y => y.MapFrom(d => d.FromLocationArea)) + .ForMember(x => x.LocationGroup, y => y.MapFrom(d => d.FromLocationGroup)) .ForMember(x => x.LocationErpCode, y => y.MapFrom(d => d.FromLocationErpCode)) .ForMember(x => x.WarehouseCode, y => y.MapFrom(d => d.FromWarehouseCode)) - .Ignore(x => x.LocationArea) - .Ignore(x => x.LocationGroup) .Ignore(x => x.SerialNumber) .Ignore(x => x.Worker) .Ignore(x => x.ExtraProperties); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductionReturnStoreEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductionReturnJobEventHandler.cs similarity index 98% rename from be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductionReturnStoreEventHandler.cs rename to be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductionReturnJobEventHandler.cs index 4c80640e3..5635bf206 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductionReturnStoreEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductionReturnJobEventHandler.cs @@ -9,7 +9,7 @@ using Win_in.Sfs.Wms.Store.Event.Inventories; namespace Win_in.Sfs.Wms.Store.Event.ExpectInOuts; -public class ProductionReturnStoreEventHandler : +public class ProductionReturnJobEventHandler : StoreExpectInOutEventHandlerBase , ILocalEventHandler> , ILocalEventHandler> From 00b8b260874a67f79b98796a176f44afa5366873 Mon Sep 17 00:00:00 2001 From: "rongguo.jia" Date: Fri, 14 Apr 2023 18:12:29 +0800 Subject: [PATCH 6/6] =?UTF-8?q?[fix]ApiFox=E8=B0=83=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87=20=E7=BA=BF=E8=BE=B9=E4=BB=93=E7=BC=B4=E5=BA=93?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=09api/wms/store/product-receipt-request/by-t?= =?UTF-8?q?ype/ProductReceipt=5FWIP=20=E7=BA=BF=E8=BE=B9=E4=BB=93=E7=BC=B4?= =?UTF-8?q?=E5=BA=93=E8=AE=B0=E5=BD=95=09api/wms/store/product-receipt-not?= =?UTF-8?q?e/by-type/ProductReceipt=5FWIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Inputs/ProductReceiptRequestEditInput.cs | 3 ++- .../ProductReceiptRequestAppService.cs | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductReceiptRequests/Inputs/ProductReceiptRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductReceiptRequests/Inputs/ProductReceiptRequestEditInput.cs index 09f948138..b91d9c807 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductReceiptRequests/Inputs/ProductReceiptRequestEditInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductReceiptRequests/Inputs/ProductReceiptRequestEditInput.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -70,7 +71,7 @@ public class ProductReceiptRequestEditInput : SfsStoreRequestCreateOrUpdateInput /// 类型 /// [Display(Name = "类型")] - public string EnumProductReceiptType { get; set; } + public EnumProductReceiptType Type { get; set; } /// /// 明细列表 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs index 5a388cefe..54689060c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs @@ -6,12 +6,14 @@ using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using DocumentFormat.OpenXml.Office.CustomUI; +using FluentValidation; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Domain.Entities; +using Volo.Abp.Validation; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain; @@ -176,7 +178,12 @@ public class ProductReceiptRequestAppService : bool includeDetails = false, CancellationToken cancellationToken = default) { - Expression> expression = p => p.Type.ToString() == type; + if (!EnumProductReceiptType.TryParse(type, true, out EnumProductReceiptType enumType)) + { + throw new AbpValidationException($"type {type} is not valid"); + } + + Expression> expression = p => p.Type == enumType; if (requestInput.Condition.Filters?.Count > 0) { expression = expression.And(requestInput.Condition.Filters.ToLambda());