Browse Source

位置码测试问题修复

dev_DY_CC
周红军 1 year ago
parent
commit
a3af15d361
  1. 3
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeEditInput.cs
  2. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeImportInput.cs
  3. 124
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs
  4. 12
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs
  5. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/Inputs/ProductRecycleJobEditInput.cs
  6. 34
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs
  7. 14
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAutoMapperProfile.cs
  8. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs
  9. 136
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs

3
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeEditInput.cs

@ -13,6 +13,7 @@ public class PositionCodeEditInput : SfsBaseDataCreateOrUpdateInputBase
/// 物料号
/// </summary>
[Display(Name = "物料号")]
[Required(ErrorMessage = "{0}是必填项")]
public string PartCode { get; set; }
/// <summary>
/// 物料名称
@ -33,6 +34,7 @@ public class PositionCodeEditInput : SfsBaseDataCreateOrUpdateInputBase
/// 库位
/// </summary>
[Display(Name = "库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string LocationCode { get; set; }
/// <summary>
/// 库位名称
@ -48,6 +50,7 @@ public class PositionCodeEditInput : SfsBaseDataCreateOrUpdateInputBase
/// 类型
/// </summary>
[Display(Name = "类型")]
[Required(ErrorMessage = "{0}是必填项")]
public EnumRecommendType Type { get; set; }
#endregion

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeImportInput.cs

@ -8,10 +8,10 @@ namespace Win_in.Sfs.Basedata.Application.Contracts;
public class PositionCodeImportInput : SfsBaseDataImportInputBase
{
/// <summary>
///
/// 位置
/// </summary>
[Key]
[Display(Name = "码")]
[Display(Name = "位置码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
[Required(ErrorMessage = "{0}是必填项")]
public string Code { get; set; }
@ -20,6 +20,7 @@ public class PositionCodeImportInput : SfsBaseDataImportInputBase
/// </summary>
[Display(Name = "物料号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
[Required(ErrorMessage = "{0}是必填项")]
public string PartCode { get; set; }
/// <summary>
/// 物料名称
@ -44,6 +45,7 @@ public class PositionCodeImportInput : SfsBaseDataImportInputBase
/// </summary>
[Display(Name = "库位")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
[Required(ErrorMessage = "{0}是必填项")]
public string LocationCode { get; set; }
/// <summary>
/// 库位名称
@ -55,7 +57,6 @@ public class PositionCodeImportInput : SfsBaseDataImportInputBase
/// 标包数量
/// </summary>
[Display(Name = "标包数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal StdPackQty { get; set; }
/// <summary>
/// 类型

124
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs

@ -1,12 +1,17 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Vml.Office;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
@ -23,18 +28,27 @@ public class PositionCodeAppService
, IPositionCodeAppService
{
private readonly IPositionCodeManager _manager;
private new readonly IPositionCodeRepository _repository;
public PositionCodeAppService(IPositionCodeRepository repository, IDistributedCache<PositionCodeDTO> cache, IPositionCodeManager manager) : base(repository, cache)
private new readonly IPositionCodeRepository _repository;
public PositionCodeAppService(IPositionCodeRepository repository,
IDistributedCache<PositionCodeDTO> cache, IPositionCodeManager manager) : base(repository, cache)
{
base.CreatePolicyName = CategoryPermissions.Create;
base.UpdatePolicyName = CategoryPermissions.Update;
base.DeletePolicyName = CategoryPermissions.Delete;
_manager = manager;
_repository = repository;
}
}
/// <summary>
/// 用来重写 新增实体
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("")]
[UnitOfWork]
public override async Task<PositionCodeDTO> CreateAsync(PositionCodeEditInput input)
@ -53,33 +67,82 @@ public class PositionCodeAppService
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在");
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.Type != "10C02")
{
throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为原料");
}
input.PartName = itemBasic.Name;
input.PartDesc = itemBasic.Desc1;
input.BasicUom = itemBasic.BasicUom;
input.StdPackQty = itemBasic.StdPackQty;
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
//如果类型选择为原料,库位的类型必须为原料库位
if (input.Type == EnumRecommendType.W && location.Type != EnumLocationType.RAW)
{
throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位");
}
input.LocationName = location.Name;
if(input.Code.Contains('W'))
if(input.Type== EnumRecommendType.None)
{
input.Type = EnumRecommendType.W;
throw new UserFriendlyException($"{input.Type} 位置码类型不正确");
}
else if (input.Code.Contains('Q'))
return await base.CreateAsync(input).ConfigureAwait(false);
}
/// <summary>
/// 用来重写 更新实体
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPut]
[Route("{id}")]
public override async Task<PositionCodeDTO> UpdateAsync(Guid id, PositionCodeEditInput input)
{
var entity = await _repository.GetAsync(id).ConfigureAwait(false);
if (entity == null)
{
input.Type = EnumRecommendType.Q;
throw new UserFriendlyException($"{id} 未找到位置码信息");
}
else if(input.Code.Contains('K'))
var itemEntity = await _repository.FirstOrDefaultAsync(p => p.PartCode == input.PartCode && p.Code!=input.Code).ConfigureAwait(false);
if (itemEntity != null)
{
throw new UserFriendlyException($"{input.PartCode} 物品已存在");
}
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在");
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.Type != "10C02")
{
input.Type = EnumRecommendType.K;
throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为原料");
}
else
entity.PartName = itemBasic.Name;
entity.PartDesc = itemBasic.Desc1;
entity.BasicUom = itemBasic.BasicUom;
entity.StdPackQty = itemBasic.StdPackQty;
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
//如果类型选择为原料,库位的类型必须为原料库位
if (input.Type == EnumRecommendType.W && location.Type!= EnumLocationType.RAW)
{
input.Type = EnumRecommendType.None;
throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位");
}
entity.LocationName = location.Name;
await _repository.UpdateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<PositionCode, PositionCodeDTO>(entity);
return dto;
return await base.CreateAsync(input).ConfigureAwait(false);
}
/// <summary>
@ -94,11 +157,48 @@ public class PositionCodeAppService
foreach (var positionCode in addList)
{
var itemBasic = await ItemBasicAppService.GetByCodeAsync(positionCode.PartCode).ConfigureAwait(false);
positionCode.PartName = itemBasic.Name;
positionCode.PartDesc = itemBasic.Desc1;
positionCode.BasicUom = itemBasic.BasicUom;
positionCode.StdPackQty = itemBasic.StdPackQty;
positionCode.Code = positionCode.Type + positionCode.Code;
positionCode.CreatorId= CurrentUser.Id;
var location = await LocationAppService.GetByCodeAsync(positionCode.LocationCode).ConfigureAwait(false);
positionCode.LocationName = location.Name;
}
return dictionary;
}
private async Task CheckPositionCodeInputAsync(PositionCodeImportInput input, List<ValidationResult> validationRresult)
{
var itemEntity = await _repository.FirstOrDefaultAsync(p => p.PartCode == input.PartCode && p.Code != input.Code).ConfigureAwait(false);
if (itemEntity != null)
{
validationRresult.Add(new ValidationResult($"物品代码{input.PartCode}已存在", new string[] { "物品代码" }));
}
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.Type != "10C02")
{
validationRresult.Add(new ValidationResult($"物品代码{input.PartCode} 物料号类型必须为原料", new string[] { "物料号类型" }));
}
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
//如果类型选择为原料,库位的类型必须为原料库位
if (input.Type==EnumRecommendType.W && location.Type != EnumLocationType.RAW)
{
validationRresult.Add(new ValidationResult($"库位代码{input.LocationCode} 库位的类型必须为原料库位", new string[] { "库位类型" }));
}
}
protected override async Task ValidateImportModelAsync(PositionCodeImportInput importInput, List<ValidationResult> validationRresult)
{
await base.ValidateImportModelAsync(importInput, validationRresult).ConfigureAwait(false);
await CheckPositionCodeInputAsync(importInput, validationRresult).ConfigureAwait(false);
await base.CheckItemBasicItemCodeAsync(importInput.PartCode, validationRresult).ConfigureAwait(false);
await base.CheckRawLocationAsync(importInput.LocationCode, validationRresult).ConfigureAwait(false);
}
}

12
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs

@ -13,20 +13,20 @@ public enum EnumRecommendType
None = 0,
/// <summary>
/// 位置码
/// 原料
/// </summary>
[Display(Name = "位置码")]
[Display(Name = "原料")]
W = 1,
/// <summary>
/// 器具
/// 器具
/// </summary>
[Display(Name = "器具")]
[Display(Name = "器具")]
Q = 2,
/// <summary>
/// Kitting箱码
/// kitting区
/// </summary>
[Display(Name = "Kitting箱码")]
[Display(Name = "Kitting")]
K = 3
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/Inputs/ProductRecycleJobEditInput.cs

@ -10,6 +10,13 @@ public class ProductRecycleJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCr
{
#region Create
/// <summary>
/// 车间
/// </summary>
[Display(Name = "车间")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Workshop { get; set; }
/// <summary>
/// 上游任务编号
/// </summary>

34
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs

@ -21,6 +21,7 @@ using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Inventory.Domain;
/// <summary>
/// 产品退拆申请
@ -102,15 +103,16 @@ public class ProductRecycleRequestAppService :
foreach (var detail in productRecycleRequest.Details)
{
var balance = await _balanceAppService.GetByItemLocationAndPackingAsync(
string.Empty,
detail.ItemCode,
detail.LocationCode).ConfigureAwait(false);
//var balance = await _balanceAppService.GetByItemLocationAndPackingAsync(
// string.Empty,
// detail.ItemCode,
// detail.LocationCode).ConfigureAwait(false);
if (balance != null)
{
detail.Status = balance.Status;
}
//if (balance != null)
//{
// detail.Status = balance.Status;
//}
detail.Status = EnumInventoryStatus.OK;
var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode)
.ConfigureAwait(false);
@ -188,15 +190,15 @@ public class ProductRecycleRequestAppService :
detail.RawLocationGroup = rawLocation.LocationGroupCode;
}
var balance = await BalanceAclService.GetByItemLocationAndPackingAsync(
string.Empty,
detail.ItemCode,
detail.LocationCode).ConfigureAwait(false);
//var balance = await BalanceAclService.GetByItemLocationAndPackingAsync(
// string.Empty,
// detail.ItemCode,
// detail.LocationCode).ConfigureAwait(false);
if (balance != null)
{
detail.Status = balance.Status;
}
//if (balance != null)
//{
// detail.Status = balance.Status;
//}
}
#endregion

14
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAutoMapperProfile.cs

@ -1,5 +1,6 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
@ -25,8 +26,11 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<ProductRecycleRequestEditInput, ProductRecycleRequest>();
CreateMap<ProductRecycleRequestDetail, ProductRecycleJobDetailInput>()
.ReverseMap();
CreateMap<PreparationPlan, PreparationPlanEditInput>();
CreateMap<ProductRecycleRequestImportInput, ProductRecycleRequest>()
.IgnoreAuditedObjectProperties()
@ -56,5 +60,13 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.Number)
.Ignore(x => x.Id)
.Ignore(x => x.Remark);
CreateMap<ProductRecycleRequest, ProductRecycleJobEditInput>()
.ReverseMap();
CreateMap<ProductRecycleRequestDetail, ProductRecycleJobDetailInput>()
.ReverseMap();
}
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs

@ -92,6 +92,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
IssueJobAutoMapperProfile();
JisDeliverJobAutoMapperProfile();
ProductReceiveJobAutoMapperProfile();
ProductRecycleJobAutoMapperProfile();
PurchaseReceiptJobAutoMapperProfile();
PurchaseReturnJobAutoMapperProfile();
PutawayJobAutoMapperProfile();

136
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs

@ -12,6 +12,9 @@ using Win_in.Sfs.Wms.Store.Event.BusinessRequest;
namespace Win_in.Sfs.Wms.Store.Event.Stores;
using Application.Contracts;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using static Win_in.Sfs.Wms.Store.Domain.Shared.StoreSettings;
public class ProductRecycleRequestEventHandler
: StoreEventHandlerBase
@ -19,21 +22,32 @@ public class ProductRecycleRequestEventHandler
, ILocalEventHandler<SfsCreatedEntityEventData<ProductRecycleRequest>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<ProductRecycleRequest>>>
{
private readonly IProductRecycleJobAppService _productRecycleJobAppService;
private readonly IProductRecycleNoteAppService _productRecycleNoteApp;
private readonly IBackFlushNoteAppService _backFlushNoteApp;
private readonly IBomAppService _bomApp;
private readonly IProductRecycleRequestManager _productRecycleRequestManager;
private readonly IBalanceAppService _balanceAppService;
private readonly ILocationAppService _locationAppService;
public ProductRecycleRequestEventHandler(
IProductRecycleNoteAppService productRecycleNoteApp,
IBalanceAppService balanceAppService,
ILocationAppService locationAppService,
IBackFlushNoteAppService backFlushNoteApp,
IBomAppService bomApp, IProductRecycleRequestManager
productRecycleRequestManager)
IBomAppService bomApp,
IProductRecycleRequestManager productRecycleRequestManager,
IProductRecycleJobAppService productRecycleJobAppService
)
{
_productRecycleNoteApp = productRecycleNoteApp;
_backFlushNoteApp = backFlushNoteApp;
_bomApp = bomApp;
_productRecycleRequestManager = productRecycleRequestManager;
_balanceAppService = balanceAppService;
_locationAppService = locationAppService;
_productRecycleJobAppService = productRecycleJobAppService;
}
/// <summary>
@ -60,6 +74,8 @@ public class ProductRecycleRequestEventHandler
var entitys = eventData.Entity;
foreach (var entity in entitys)
{
entity.AutoAgree = true;
entity.DirectCreateNote = false;
if (entity.AutoSubmit)
{
await _productRecycleRequestManager.SubmitAsync(entity).ConfigureAwait(false);
@ -78,14 +94,124 @@ public class ProductRecycleRequestEventHandler
await _productRecycleNoteApp.CreateAsync(productRecycle).ConfigureAwait(false);
// var backFlushs = await BuildFlushNotesAsync(entity);
//
// await _backFlushNoteApp.CreateManyAsync(backFlushs);
}
else
{
var productRecycleJobs = await BuildProductRecycleJobsAsync(entity).ConfigureAwait(false);
await _productRecycleJobAppService.CreateManyAsync(productRecycleJobs).ConfigureAwait(false);
}
}
#region 私有
private async Task<List<ProductRecycleJobEditInput>> BuildProductRecycleJobsAsync(ProductRecycleRequest request)
{
var jobs = new List<ProductRecycleJobEditInput>();
var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.ProductRecycle, EnumTransSubType.None).ConfigureAwait(false);//库存事务
var job = ObjectMapper.Map<ProductRecycleRequest, ProductRecycleJobEditInput>(request);
//job.Details = new List<ProductRecycleJobDetailInput>();
foreach (var detail in request.Details)
{
//创建详情
var jobDetails = await BuildProductRecycleInputsAsync(request, detail, transactionType).ConfigureAwait(false);
if (!jobDetails.Any())
{
continue;
}
var fromLocationCode = jobDetails[0].LocationCode;
var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false);
job = BuildProductRecycleJobCreateInput(request, fromLocation);
job.Details.Clear();
jobs.Add(job);
job.Details.AddRange(jobDetails);
}
return jobs;
}
private ProductRecycleJobEditInput BuildProductRecycleJobCreateInput(ProductRecycleRequest productRecycleRequest, LocationDTO fromLocation)
{
ProductRecycleJobEditInput job;
job = ObjectMapper.Map<ProductRecycleRequest, ProductRecycleJobEditInput>(productRecycleRequest);
job.JobType = EnumJobType.ProductionReturnJob;
job.JobStatus = EnumJobStatus.Open;
job.WorkGroupCode = fromLocation.WorkGroupCode;
job.WarehouseCode = fromLocation.WarehouseCode;
job.Worker = productRecycleRequest.Worker;
job.Workshop= fromLocation.AreaCode;
if (job.Worker==null)
{
job.Worker = "admin";
}
//job.MaterialRequestNumber = productRecycleRequest.Number;
return job;
}
private async Task<List<ProductRecycleJobDetailInput>> BuildProductRecycleInputsAsync(ProductRecycleRequest productRecycleRequest,
ProductRecycleRequestDetail productRecycleRequestDetail, TransactionTypeDTO transactionType)
{
var jobDetails = new List<ProductRecycleJobDetailInput>();
//var input = new RecommendBalanceRequestInput()
//{
// ItemCode = productRecycleRequestDetail.ItemCode,
// Qty = productRecycleRequestDetail.Qty,
// LocationTypes = transactionType.OutLocationTypes,
// LocationAreas = new List<string> { productRecycleRequestDetail.LocationArea },
// Statuses = transactionType.OutInventoryStatuses,
//};
//获取推荐库存
var recommendList = await _balanceAppService.GetListByItemCodeAsync(productRecycleRequestDetail.ItemCode).ConfigureAwait(false);
//没有推荐库存时 跳过此明细 不生成任务
if (recommendList.Count != 0)
{
foreach (var recommend in recommendList)
{
if(recommend.LocationCode== productRecycleRequestDetail.LocationCode)
{
var detail = await BuildProductRecycleJobDetailAsync(productRecycleRequestDetail, recommend).ConfigureAwait(false);
jobDetails.Add(detail);
}
}
}
return jobDetails;
}
private async Task<ProductRecycleJobDetailInput> BuildProductRecycleJobDetailAsync(ProductRecycleRequestDetail productRecycleRequestDetail, BalanceDTO balance)
{
var detail = ObjectMapper.Map<ProductRecycleRequestDetail, ProductRecycleJobDetailInput>(productRecycleRequestDetail);
detail.RecommendToLocationErpCode = balance.LocationErpCode;
detail.RecommendToLocationCode = balance.LocationCode;
detail.RecommendPackingCode = balance.PackingCode;
detail.RecommendContainerCode = balance.ContainerCode;
detail.RecommendSupplierBatch = balance.SupplierBatch;
detail.RecommendProduceDate = balance.ProduceDate;
detail.RecommendExpireDate = balance.ExpireDate;
detail.RecommendLot = balance.Lot;
detail.RecommendProduceDate = balance.ProduceDate;
detail.RecommendArriveDate = balance.ArriveDate;
detail.RecommendQty = balance.Qty;
detail.Uom = balance.Uom;
await Task.CompletedTask.ConfigureAwait(false);
return detail;
}
private async Task<ProductRecycleNoteEditInput> BuildProductRecycleNoteAsync(ProductRecycleRequest request)
{
var createInput = ObjectMapper.Map<ProductRecycleRequest, ProductRecycleNoteEditInput>(request);

Loading…
Cancel
Save