diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReturnRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReturnRequestController.cs new file mode 100644 index 000000000..0df247f7f --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/PurchaseReturnRequestController.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Pda.Models; +using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Wms.Store.Domain; + +namespace Win_in.Sfs.Wms.Pda.Controllers.Stores; + +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}store/purchase-return-request")] +public class PurchaseReturnRequestController : AbpController +{ + private readonly IPurchaseReturnRequestAppService _purchaseReturnRequestAppService; + private readonly ITransactionTypeAppService _transactionTypeAppService; + public PurchaseReturnRequestController(IPurchaseReturnRequestAppService purchaseReturnRequestAppService, + ITransactionTypeAppService transactionTypeAppService + ) + { + _purchaseReturnRequestAppService = purchaseReturnRequestAppService; + _transactionTypeAppService = transactionTypeAppService; + } + + /// + /// 创建退货申请 + /// + [HttpPost("create-many")] + public virtual async Task CreateManyAsync(List input) + { + List entitys = new List(); + var groups = input.GroupBy(r => r.AsnNumber).ToList(); + foreach (var group in groups) + { + var list = group.ToList(); + var entity = ObjectMapper.Map(list[0]); + await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); + entity.Details = new List(); + foreach (var item in list) + { + var detail = ObjectMapper.Map(list[0]); + entity.Details.Add(detail); + } + entitys.Add(entity); + } + await _purchaseReturnRequestAppService.CreateManyAsync(entitys).ConfigureAwait(false); ; + } + + /// + /// 赋值Request业务属性 + /// + /// + /// + private async Task SetRequestAutoPropertiesAsync(PurchaseReturnRequestEditInput entity) + { + var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.PurchaseReturn, EnumTransSubType.None).ConfigureAwait(false); + + Check.NotNull(tranType, "事务类型", "事务类型不存在"); + + entity.AutoCompleteJob = tranType.AutoCompleteJob; + entity.AutoSubmit = tranType.AutoSubmitRequest; + entity.AutoAgree = tranType.AutoAgreeRequest; + entity.AutoHandle = tranType.AutoHandleRequest; + entity.DirectCreateNote = tranType.DirectCreateNote; + } +} diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/PdaHostAutoMapperProfile.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/PdaHostAutoMapperProfile.cs index bb3482baa..862e848b7 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/PdaHostAutoMapperProfile.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/PdaHostAutoMapperProfile.cs @@ -2,6 +2,7 @@ using AutoMapper; using Volo.Abp.AutoMapper; using Win_in.Sfs.Wms.Pda.Controllers.Jobs; using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Pda; @@ -19,6 +20,15 @@ public class PdaHostAutoMapperProfile : Profile .Ignore(x => x.TimeWindow) .Ignore(x => x.SupplierName) ; + CreateMap() + .Ignore(x => x.ReturnType) + .Ignore(x => x.ReturnTime) + .Ignore(x => x.ActiveDate) + .Ignore(x => x.Details) + .Ignore(x => x.TenantId) + .Ignore(x => x.Remark) + .Ignore(x => x.ExtraProperties); + CreateMap(); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReturnRequests/IPurchaseReturnRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReturnRequests/IPurchaseReturnRequestAppService.cs index 9fea10b59..76ad6e798 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReturnRequests/IPurchaseReturnRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReturnRequests/IPurchaseReturnRequestAppService.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; +using System.Threading.Tasks; using Win_in.Sfs.Shared.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -7,5 +9,5 @@ public interface IPurchaseReturnRequestAppService , ISfsCheckStatusAppService { - + Task> CreateManyAsync(List inputs); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReturnRequests/Inputs/PurchaseReturnRequestPdaInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReturnRequests/Inputs/PurchaseReturnRequestPdaInput.cs new file mode 100644 index 000000000..b00091f9b --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/PurchaseReturnRequests/Inputs/PurchaseReturnRequestPdaInput.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DocumentFormat.OpenXml.Wordprocessing; +using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Shared; + +namespace Win_in.Sfs.Wms.Store.Application.Contracts; +public class PurchaseReturnRequestPdaInput : SfsStoreDetailWithLotPackingQtyLocationStatusInputBase, IHasPoLine +{ + /// + /// 收货单号 + /// + [Display(Name = "收货单号")] + public string RpNumber { get; set; } + + /// + /// 发货单号 + /// + [Display(Name = "发货单号")] + public string AsnNumber { get; set; } + + /// + /// 订单号 + /// + [Display(Name = "订单号")] + public string PoNumber { get; set; } + + /// + /// 供应商代码 + /// + [Display(Name = "供应商代码")] + public string SupplierCode { get; set; } + + /// + /// 退货类型 + /// + [Display(Name = "退货类型")] + public EnumPurchaseReturnType ReturnType { get; set; } = EnumPurchaseReturnType.AfterPuton; + + /// + /// 订单行 + /// + [Display(Name = "订单行")] + public string PoLine { get; set; } + + /// + /// 供应商包装 + /// + [Display(Name = "供应商包装")] + public decimal SupplierPackQty { get; set; } + +} diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs index 4632ad53d..4b033f9bc 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Domain.Entities; +using Volo.Abp.ObjectMapping; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Label.Application.Contracts; using Win_in.Sfs.Label.Domain; @@ -77,6 +78,24 @@ public class PurchaseReturnRequestAppService : return dto; } + /// + /// 【创建】采购退货申请(批量) + /// + /// + /// + [HttpPost("create-many")] + public async Task> CreateManyAsync(List inputs) + { + var entitys = ObjectMapper.Map< List, List< PurchaseReturnRequest> >(inputs); + + await _purchaseReturnRequestManager.CreateManyAsync(entitys).ConfigureAwait(false); + + var dto = ObjectMapper.Map< List, List< PurchaseReturnRequestDTO> >(entitys); + return dto; + } + + + [HttpPost("check-status")] public virtual async Task CheckStatusAsync(string number) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAutoMapperProfile.cs index 52ac6afb3..75841ab08 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAutoMapperProfile.cs @@ -20,7 +20,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile .Ignore(x => x.TenantId) .Ignore(x => x.Number) .Ignore(x => x.Id); - + CreateMap(); CreateMap() .Ignore(x => x.ReturnType) .Ignore(x => x.ReturnTime) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReturnRequests/PurchaseReturnRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReturnRequests/PurchaseReturnRequestManager.cs index 1ae7436ae..6db0da0ca 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReturnRequests/PurchaseReturnRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/PurchaseReturnRequests/PurchaseReturnRequestManager.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Threading.Tasks; +using Volo.Abp.Uow; using Win_in.Sfs.Shared.Domain.Shared; namespace Win_in.Sfs.Wms.Store.Domain; @@ -15,7 +16,25 @@ public class PurchaseReturnRequestManager : SfsStoreRequestManagerBase> CreateManyAsync(List entities) + { + var results = new List(); + foreach (var entity in entities) + { + entity.SetIdAndNumberWithDetails(GuidGenerator, await GenerateNumberAsync(typeof(PurchaseReturnRequest).Name, entity.ActiveDate).ConfigureAwait(false)); + PurchaseReturnRequest result; + if (entity.AutoSubmit) + { + result = await SubmitAsync(entity).ConfigureAwait(false); + } + else + { + result = await Repository.InsertAsync(entity).ConfigureAwait(false); + } + results.Add(result); + } + return entities; + } /// /// 执行导入 ///