From 8148d1dfcca23a68789f5ae959f8a3f8b5f45d94 Mon Sep 17 00:00:00 2001 From: liuyunfeng Date: Wed, 6 Mar 2024 13:33:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A03=E4=B8=AA=E6=9B=B4=E6=96=B0=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=9A=84=E6=8B=86=E7=AE=B1=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Stores/TransferNoteController.cs | 28 ++++ .../Commons/CommonHelper.cs | 8 ++ .../Jobs/InspectJobs/IInspectJobAppService.cs | 7 + .../Jobs/IssueJobs/IIssueJobAppService.cs | 7 + .../IPurchaseReceiptJobAppService.cs | 15 ++ .../TransferNotes/ITransferNoteAppService.cs | 24 ++++ .../SplitPacking_UpdateJobDetailInput.cs | 38 +++++ .../IPurchaseReceiptRequestAppService.cs | 17 +++ .../Jobs/InspectJobs/InspectJobAppService.cs | 34 +++++ .../Jobs/IssueJobs/IssueJobAppService.cs | 32 +++++ .../PurchaseReceiptJobAppService.cs | 48 +++++++ .../TransferNotes/TransferNoteAppService.cs | 136 +++++++++++++----- .../PurchaseReceiptRequestAppService.cs | 46 ++++++ .../Jobs/InspectJobs/InspectJob.cs | 1 + .../Jobs/InspectJobs/InspectJobDetail.cs | 7 + .../Jobs/IssueJobs/IssueJobDetail.cs | 4 + .../IPurchaseReceiptJobManager.cs | 4 + .../PurchaseReceiptJobDetail.cs | 7 + .../PurchaseReceiptJobManager.cs | 12 ++ .../PurchaseReceiptRequestDetail.cs | 7 + 20 files changed, 450 insertions(+), 32 deletions(-) create mode 100644 be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/Inputs/SplitPacking_UpdateJobDetailInput.cs diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferNoteController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferNoteController.cs index 87891bec2..dfcc5ce45 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferNoteController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferNoteController.cs @@ -156,4 +156,32 @@ public class TransferNoteController : AbpController return await _transferNoteAppService.SplitPackingAsync(transferNoteEditInput).ConfigureAwait(false); } + /// + /// 采购收货拆箱,同时更新、插入PurchaseReceipt任务表、申请表 + /// + /// + /// + /// + [HttpPost("split-packing-purchase-receipt")] + public async Task SplitPacking_PurchaseReceiptAsync(TransferNoteEditInput transferNoteEditInput, [FromQuery] SplitPacking_UpdateJobDetailInput updateJobDetailInput) + { + var ret = await _transferNoteAppService.SplitPacking_PurchaseReceiptAsync(transferNoteEditInput, updateJobDetailInput).ConfigureAwait(false); + return ret; + } + + /// + /// 发料拆箱,同时更新、插入Inspect任务表(没有找到申请表//??) + /// + /// + /// + /// + [HttpPost("split-packing-issue")] + public async Task SplitPacking_IssueAsync(TransferNoteEditInput transferNoteEditInput, [FromQuery] SplitPacking_UpdateJobDetailInput updateJobDetailInput) + { + var ret = await _transferNoteAppService.SplitPacking_IssueAsync(transferNoteEditInput, updateJobDetailInput).ConfigureAwait(false); + return ret; + } + + + } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs index 4f8e1c8b5..1859b5324 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs @@ -20,4 +20,12 @@ public sealed class CommonHelper var ret = JsonConvert.DeserializeObject(json); return ret; } + + public static DateTime CurTime + { + get + { + return DateTime.Now; + } + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/InspectJobs/IInspectJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/InspectJobs/IInspectJobAppService.cs index 2bc8a2f43..65fe5830a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/InspectJobs/IInspectJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/InspectJobs/IInspectJobAppService.cs @@ -43,4 +43,11 @@ public interface IInspectJobAppService Task CancelByInspectRequestAsync(string inspectRequestNumber); Task GetInspectNoteDetailByPackingCodeAsync(string packingCode); + + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input); + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs index 1b9ad5f7d..306f0df4e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IIssueJobAppService.cs @@ -16,4 +16,11 @@ public interface IIssueJobAppService bool includeDetails = false, CancellationToken cancellationToken = default); Task> GetByRequestNumberAsync(string requestNumber); + + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input); + } 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 027134838..921906b69 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 @@ -46,4 +46,19 @@ public interface IPurchaseReceiptJobAppService /// /// Task> GetListBySupplierCodeOnTodayAsync(string supplierCode); + + /// + /// 根据number取列表 + /// + /// + /// + Task> GetListByNumberAsync(string number); + + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input); + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/ITransferNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/ITransferNoteAppService.cs index fc797cf4f..aceb3662a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/ITransferNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/ITransferNoteAppService.cs @@ -63,4 +63,28 @@ public interface ITransferNoteAppService : Task> GetSplitPackingTransferListAsync( SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, CancellationToken cancellationToken = default); + + /// + /// 采购收货拆箱,同时更新、插入PurchaseReceipt任务表、申请表 + /// + /// + /// + /// + Task SplitPacking_PurchaseReceiptAsync(TransferNoteEditInput transferNoteEditInput, SplitPacking_UpdateJobDetailInput updateJobDetailInput); + + /// + /// 质检拆箱,同时更新、插入Inspect任务表(不更新申请表) + /// + /// + /// + /// + Task SplitPacking_InspectAsync(TransferNoteEditInput transferNoteEditInput, SplitPacking_UpdateJobDetailInput updateJobDetailInput); + + /// + /// 发料拆箱,同时更新、插入Inspect任务表(没有找到申请表//??) + /// + /// + /// + /// + Task SplitPacking_IssueAsync(TransferNoteEditInput transferNoteEditInput, SplitPacking_UpdateJobDetailInput updateJobDetailInput); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/Inputs/SplitPacking_UpdateJobDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/Inputs/SplitPacking_UpdateJobDetailInput.cs new file mode 100644 index 000000000..61a8befe6 --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/TransferNotes/Inputs/SplitPacking_UpdateJobDetailInput.cs @@ -0,0 +1,38 @@ +using System.ComponentModel.DataAnnotations; + +namespace Win_in.Sfs.Wms.Store.Application.Contracts; + +/// +/// +/// +public class SplitPacking_UpdateJobDetailInput +{ + /// + /// 主表number + /// + [Required(ErrorMessage = "{0}是必填项")] + public string Number { get; set; } + /// + /// 子表from标签 + /// + [Required(ErrorMessage = "{0}是必填项")] + public string FromPackingCode { get; set; } + /// + /// from数量 + /// + [Required(ErrorMessage = "{0}是必填项")] + [Range(1, 99999, ErrorMessage = "{0}值范围在1至99999之间")] + public decimal FromQty { get; set; } + /// + /// 子表的to标签 + /// + [Required(ErrorMessage = "{0}是必填项")] + public string ToPackingCode { get; set; } + /// + /// to数量 + /// + [Required(ErrorMessage = "{0}是必填项")] + [Range(1, 99999, ErrorMessage = "{0}值范围在1至99999之间")] + public decimal ToQty { get; set; } + +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReceiptRequests/IPurchaseReceiptRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReceiptRequests/IPurchaseReceiptRequestAppService.cs index 8cb796843..9bb0ff309 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReceiptRequests/IPurchaseReceiptRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReceiptRequests/IPurchaseReceiptRequestAppService.cs @@ -39,4 +39,21 @@ public interface IPurchaseReceiptRequestAppService /// Task UpdatePurchaseReceiptRequestAsync(string number, EnumRequestStatus enumRequestStatus); + + /// + /// 根据number取列表 + /// + /// + /// + Task> GetListByNumberAsync(string number); + + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + /// + Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input, string packingCode); + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs index 1f534b9e1..677079a54 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/InspectJobs/InspectJobAppService.cs @@ -4,7 +4,9 @@ using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Volo.Abp; using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.FileStorage.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; @@ -160,6 +162,38 @@ public class InspectJobAppService return dto; } + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + [HttpPost("save-detail-split-packing")] + public virtual async Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input) + { + InspectJob job = await _repository.FindAsync(p => p.Number == input.Number).ConfigureAwait(false); + InspectJobDetail detail = job.Details.FirstOrDefault(p => p.PackingCode == input.FromPackingCode && p.InspectQty == input.FromQty); + if (detail == null) + { + throw new UserFriendlyException($"根据PackingCode={input.FromPackingCode}取InspectDetail表为空!"); + } + //插入目标箱 + var newDetail = CommonHelper.CloneObj(detail); + newDetail.SetId(GuidGenerator.Create()); + newDetail.PackingCode = input.ToPackingCode; + newDetail.ReceiveQty = input.ToQty; + newDetail.InspectQty = input.ToQty; + newDetail.GoodQty = input.ToQty; + //newDetail.CreationTime = CommonHelper.CurTime; + job.Details.Add(newDetail); + //修改源箱 + detail.ReceiveQty = input.FromQty - input.ToQty; + detail.InspectQty = input.FromQty - input.ToQty; + detail.GoodQty = input.FromQty - input.ToQty; + var entity = await _repository.UpdateAsync(job).ConfigureAwait(false); + var ret = ObjectMapper.Map(entity); + return ret; + } + + //[HttpPost("pick-inspect")] //public virtual async Task AddPickInspectJobAsync(InspectJobCreateInput input) //{ diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs index 6ec183a2b..6439fc1e8 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Application.Contracts; @@ -159,6 +160,37 @@ public class IssueJobAppService return ObjectMapper.Map, List>(entitys); } + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + [HttpPost("save-detail-split-packing")] + public virtual async Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input) + { + var job = await _repository.FindAsync(p => p.Number == input.Number).ConfigureAwait(false); + IssueJobDetail detail = job.Details.FirstOrDefault(p => p.HandledPackingCode == input.FromPackingCode && p.HandledQty == input.FromQty); + if (detail == null) + { + throw new UserFriendlyException($"根据HandledPackingCode={input.FromPackingCode}取IssueJobDetail表为空!"); + } + //插入目标箱 + var newDetail = CommonHelper.CloneObj(detail); + newDetail.SetId(GuidGenerator.Create()); + newDetail.RecommendPackingCode = input.ToPackingCode; + newDetail.RecommendQty = input.ToQty; + newDetail.HandledPackingCode = input.ToPackingCode; + newDetail.HandledQty = input.ToQty; + //newDetail.CreationTime = CommonHelper.CurTime; + job.Details.Add(newDetail); + //修改源箱 + detail.RecommendQty = input.FromQty - input.ToQty; + detail.HandledQty = input.FromQty - input.ToQty; + var entity = await _repository.UpdateAsync(job).ConfigureAwait(false); + var ret = ObjectMapper.Map(entity); + return ret; + } + + /* /// /// 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 2c646ae7e..75d502fb6 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 @@ -5,7 +5,9 @@ using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Volo.Abp; using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.FileStorage.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Application.Contracts; @@ -214,6 +216,52 @@ public class PurchaseReceiptJobAppService : return dto; } + /// + /// 根据number取列表 + /// + /// + /// + [HttpGet("get-list-by-number")] + public async Task> GetListByNumberAsync(string number) + { + var entity = await _repository.GetListAsync(itm => itm.Number == number).ConfigureAwait(false); + var dto = ObjectMapper.Map, List>(entity); + return dto; + } + + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + [HttpPost("save-detail-split-packing")] + public virtual async Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input) + { + var job = await _repository.FindAsync(p => p.Number == input.Number).ConfigureAwait(false); + PurchaseReceiptJobDetail detail = job.Details.FirstOrDefault(p => p.HandledPackingCode == input.FromPackingCode && p.HandledQty == input.FromQty); + if (detail == null) + { + throw new UserFriendlyException($"根据HandledPackingCode={input.FromPackingCode}取ReceiptRequestDetail表为空!"); + } + //插入目标箱 + var newDetail = CommonHelper.CloneObj(detail); + newDetail.SetId(GuidGenerator.Create()); + newDetail.RecommendPackingCode = input.ToPackingCode; + newDetail.RecommendQty = input.ToQty; + newDetail.HandledPackingCode = input.ToPackingCode; + newDetail.HandledQty = input.ToQty; + //newDetail.CreationTime = CommonHelper.CurTime; + job.Details.Add(newDetail); + //修改源箱 + detail.RecommendQty = input.FromQty - input.ToQty; + detail.HandledQty = input.FromQty - input.ToQty; + var entity = await _repository.UpdateAsync(job).ConfigureAwait(false); + var ret = ObjectMapper.Map(entity); + return ret; + } + + + + ///// ///// 取消请求 ///// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs index 3188e6c7b..f2ee44369 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs @@ -33,18 +33,32 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase private readonly IBalanceAppService _balanceAppService; private readonly ILocationAppService _locationAppService; private readonly ISplitPackingRecAppService _splitPackingRecAppService; + private readonly IPurchaseReceiptJobAppService _purchaseReceiptJobAppService; + private readonly IPurchaseReceiptRequestAppService _purchaseReceiptRequestAppService; //采购收货 + private readonly IInspectJobAppService _inspectJobAppService; //质检 + private readonly IIssueJobAppService _issueJobAppService; //发料 + + public TransferNoteAppService( ITransferNoteRepository repository, ITransferNoteManager transferNoteManager, IBalanceAppService balanceAppService, ILocationAppService locationAppService, - ISplitPackingRecAppService splitPackingRecAppService) : base(repository) + ISplitPackingRecAppService splitPackingRecAppService, + IPurchaseReceiptJobAppService purchaseReceiptJobAppService, + IPurchaseReceiptRequestAppService purchaseReceiptRequestAppService, + IInspectJobAppService inspectJobAppService, + IIssueJobAppService issueJobAppService) : base(repository) { _transferNoteManager = transferNoteManager; _balanceAppService = balanceAppService; _locationAppService = locationAppService; _splitPackingRecAppService = splitPackingRecAppService; + _purchaseReceiptJobAppService = purchaseReceiptJobAppService; + _purchaseReceiptRequestAppService = purchaseReceiptRequestAppService; + _inspectJobAppService = inspectJobAppService; + _issueJobAppService = issueJobAppService; } #region 东阳使用 @@ -126,36 +140,7 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase public async Task SplitPackingAsync(TransferNoteEditInput transferNoteEditInput) { //插入拆箱记录表 - foreach (var inputDetail in transferNoteEditInput.Details) - { - List recLst = new List(); - SplitPackingRecEditInput packRec = new SplitPackingRecEditInput(); - packRec.OprType = OprTypeEnum.SplitBox; - packRec.FromPackingCode = inputDetail.FromPackingCode; - //packRec.FromTopPackingCode = inputDetail.; - packRec.FromStdPackQty = inputDetail.StdPackQty; - packRec.FromUom = inputDetail.Uom; - packRec.FromQty = inputDetail.Qty; - packRec.ToPackingCode = inputDetail.ToPackingCode; - //packRec.ToTopPackingCode = inputDetail.; - packRec.ToStdPackQty = inputDetail.StdPackQty; - packRec.ToUom = inputDetail.Uom; - packRec.ToQty = inputDetail.Qty; - packRec.ItemCode = inputDetail.ItemCode; - packRec.ItemName = inputDetail.ItemName; - packRec.ItemDesc1 = inputDetail.ItemDesc1; - packRec.ItemDesc2 = inputDetail.ItemDesc2; - packRec.FromLot = inputDetail.FromLot; - packRec.ToLot = inputDetail.ToLot; - //packRec.PurchaseInfo_PoNumber = inputDetail.; // 采购订单 - //packRec.PurchaseInfo_AsnNumber = inputDetail.; //供应商发货单 - //packRec.ArrivalNoticNumber = inputDetail.; //到货通知 - //packRec.TaskOrderNumber = inputDetail.; //任务单 - //packRec.ReceiptRecNumber = inputDetail.; //收货记录单 - //packRec.PutOnShelfNumber = inputDetail.; //上架单 - recLst.Add(packRec); - await _splitPackingRecAppService.BatchInsertAsync(recLst).ConfigureAwait(false); - } + await WriteSplitPackingRec(transferNoteEditInput).ConfigureAwait(false); //更新库存 transferNoteEditInput.Type = EnumTransSubType.Transfer_SplitPacking.ToString(); return await CreateAsync(transferNoteEditInput).ConfigureAwait(false); @@ -389,5 +374,92 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase return dto; } - + /// + /// 插入拆箱记录表 + /// + /// + /// + private async Task WriteSplitPackingRec(TransferNoteEditInput transferNoteEditInput) + { + List recLst = new List(); + foreach (var inputDetail in transferNoteEditInput.Details) + { + SplitPackingRecEditInput packRec = new SplitPackingRecEditInput(); + packRec.OprType = OprTypeEnum.SplitBox; + packRec.FromPackingCode = inputDetail.FromPackingCode; + //packRec.FromTopPackingCode = inputDetail.; + packRec.FromStdPackQty = inputDetail.StdPackQty; + packRec.FromUom = inputDetail.Uom; + packRec.FromQty = inputDetail.Qty; + packRec.ToPackingCode = inputDetail.ToPackingCode; + //packRec.ToTopPackingCode = inputDetail.; + packRec.ToStdPackQty = inputDetail.StdPackQty; + packRec.ToUom = inputDetail.Uom; + packRec.ToQty = inputDetail.Qty; + packRec.ItemCode = inputDetail.ItemCode; + packRec.ItemName = inputDetail.ItemName; + packRec.ItemDesc1 = inputDetail.ItemDesc1; + packRec.ItemDesc2 = inputDetail.ItemDesc2; + packRec.FromLot = inputDetail.FromLot; + packRec.ToLot = inputDetail.ToLot; + //packRec.PurchaseInfo_PoNumber = inputDetail.; // 采购订单 + //packRec.PurchaseInfo_AsnNumber = inputDetail.; //供应商发货单 + //packRec.ArrivalNoticNumber = inputDetail.; //到货通知 + //packRec.TaskOrderNumber = inputDetail.; //任务单 + //packRec.ReceiptRecNumber = inputDetail.; //收货记录单 + //packRec.PutOnShelfNumber = inputDetail.; //上架单 + recLst.Add(packRec); + } + var ret = await _splitPackingRecAppService.BatchInsertAsync(recLst).ConfigureAwait(false); + return ret; + } + + /// + /// 采购收货拆箱,同时更新、插入PurchaseReceipt任务表、申请表 + /// + /// + /// + /// + [HttpPost("split-packing-purchase-receipt")] + public async Task SplitPacking_PurchaseReceiptAsync(TransferNoteEditInput transferNoteEditInput, [FromQuery] SplitPacking_UpdateJobDetailInput updateJobDetailInput) + { + var jobRet = await _purchaseReceiptJobAppService.SaveDetail_SplitPackingAsync(updateJobDetailInput).ConfigureAwait(false); + var requestRet = await _purchaseReceiptRequestAppService.SaveDetail_SplitPackingAsync(updateJobDetailInput, jobRet.PurchaseReceiptRequestNumber).ConfigureAwait(false); + bool ret = await WriteSplitPackingRec(transferNoteEditInput).ConfigureAwait(false); //采购收货-目检-拆箱时,还没有入库,不涉及库存操作 + return ret; + } + + /// + /// 质检拆箱,同时更新、插入Inspect任务表(不更新申请表) + /// + /// + /// + /// + [HttpPost("split-packing-inspect")] + public async Task SplitPacking_InspectAsync(TransferNoteEditInput transferNoteEditInput, [FromQuery] SplitPacking_UpdateJobDetailInput updateJobDetailInput) + { + var jobRet = await _inspectJobAppService.SaveDetail_SplitPackingAsync(updateJobDetailInput).ConfigureAwait(false); + var ret = await SplitPackingAsync(transferNoteEditInput).ConfigureAwait(false); //库存操作 + return ret; + } + + /// + /// 发料拆箱,同时更新、插入Inspect任务表(没有找到申请表//??) + /// + /// + /// + /// + [HttpPost("split-packing-issue")] + public async Task SplitPacking_IssueAsync(TransferNoteEditInput transferNoteEditInput, [FromQuery] SplitPacking_UpdateJobDetailInput updateJobDetailInput) + { + var jobRet = await _issueJobAppService.SaveDetail_SplitPackingAsync(updateJobDetailInput).ConfigureAwait(false); + var ret = await SplitPackingAsync(transferNoteEditInput).ConfigureAwait(false); //库存操作 + return ret; + } + + + + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs index 59210677d..2c0039268 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestAppService.cs @@ -4,9 +4,11 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Volo.Abp; using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.Label.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Application.Contracts; @@ -142,4 +144,48 @@ public class PurchaseReceiptRequestAppService : { throw new NotImplementedException(); } + + /// + /// 根据number取列表 + /// + /// + /// + [HttpGet("get-list-by-number")] + public async Task> GetListByNumberAsync(string number) + { + var entity = await _repository.GetListAsync(itm => itm.Number == number).ConfigureAwait(false); + var dto = ObjectMapper.Map, List>(entity); + return dto; + } + + /// + /// 保存拆箱时涉及的明细修改 + /// + /// + /// + /// + [HttpGet("save-detail-split-packing")] + public virtual async Task SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input, string packingCode) + { + var request = await _repository.FindAsync(p => p.Number == packingCode).ConfigureAwait(false); + PurchaseReceiptRequestDetail detail = request.Details.FirstOrDefault(p => p.PackingCode == input.FromPackingCode && p.Qty == input.FromQty); + if (detail == null) + { + throw new UserFriendlyException($"根据PackingCode={input.FromPackingCode}取ReceiptRequestDetail表为空!"); + } + //插入目标箱 + var newDetail = CommonHelper.CloneObj(detail); + newDetail.SetId(GuidGenerator.Create()); + newDetail.PackingCode = input.ToPackingCode; + newDetail.Qty = input.ToQty; + //newDetail.CreationTime = CommonHelper.CurTime; + request.Details.Add(newDetail); + //修改源箱 + detail.Qty = input.FromQty - input.ToQty; + var entity = await _repository.UpdateAsync(request).ConfigureAwait(false); + var ret = ObjectMapper.Map(entity); + return ret; + } + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJob.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJob.cs index 8e4165387..4f5a09fad 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJob.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJob.cs @@ -144,4 +144,5 @@ public class InspectJob : SfsJobAggregateRootBase { Number = number; } + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobDetail.cs index 07b445d27..85d50803d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/InspectJobs/InspectJobDetail.cs @@ -1,3 +1,4 @@ +using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Win_in.Sfs.Shared.Domain; @@ -115,4 +116,10 @@ public class InspectJobDetail : SfsJobDetailEntityBase /// [Display(Name = "其他属性Json")] public string OtherPropertyJson { get; set; } + + public virtual void SetId(Guid id) + { + this.Id = id; + } + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobDetail.cs index 3e426bfa8..160e7d6f3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/IssueJobDetail.cs @@ -101,4 +101,8 @@ public class IssueJobDetail : SfsJobRecommendFromDetailEntityBase, IHasToLocatio /// public EnumRecommendType RecommendType { get; set; } + public void SetId(Guid id) + { + this.Id = id; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobManager.cs index 5976b0943..914b42d92 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/IPurchaseReceiptJobManager.cs @@ -1,5 +1,9 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + namespace Win_in.Sfs.Wms.Store.Domain; public interface IPurchaseReceiptJobManager : IJobManager { + Task> GetListByNumberAsync(string number); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobDetail.cs index 7ffb4d379..fb1d28694 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobDetail.cs @@ -59,4 +59,11 @@ public class PurchaseReceiptJobDetail : SfsJobRecommendToDetailEntityBase, IHasP [Display(Name = "供应商包装")] public decimal SupplierPackQty { get; set; } + public void SetId(Guid id) + { + this.Id = id; + } + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobManager.cs index 11d85fc8d..f87404a63 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobManager.cs @@ -110,4 +110,16 @@ public class PurchaseReceiptJobManager : SfsJobManagerBase c.Details.Any(p => p.RecommendPackingCode == packingCode) && c.JobStatus != EnumJobStatus.Closed && c.JobStatus != EnumJobStatus.Cancelled, true).ConfigureAwait(false); } + + /// + /// 根据number取列表 + /// + /// + /// + public async Task> GetListByNumberAsync(string number) + { + var result = await Repository.GetListAsync(c => c.Number == number).ConfigureAwait(false); + return result; + } + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDetail.cs index 0bc5acf14..a15477c2a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReceiptRequests/PurchaseReceiptRequestDetail.cs @@ -1,3 +1,4 @@ +using System; using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Domain; @@ -35,4 +36,10 @@ public class PurchaseReceiptRequestDetail : SfsStoreDetailWithLotPackingQtyEntit /// [Display(Name = "推荐ERP储位")] public string RecommendErpCode { get; set; } + + + public void SetId(Guid id) + { + this.Id = Id; + } }