Browse Source

Merge branch 'dev_DY_CC' of http://dev.ccwin-in.com:3000/BoXu.Zheng/WZC2 into dev_DY_CC

dev_DY_CC
lvzb 1 year ago
parent
commit
4638bce460
  1. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs
  2. 39
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs
  3. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs
  4. 82
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs

@ -60,7 +60,7 @@ public class TransferLibJobAppService
{ {
throw new UserFriendlyException($"{methodPrefix}没有找到类型为{dto.CallServerName}的对象"); throw new UserFriendlyException($"{methodPrefix}没有找到类型为{dto.CallServerName}的对象");
} }
var instance = Activator.CreateInstance(ty, dto.CallBusinessType, dto.CallRequestNumber, dto.CallJobNumber); var instance = Activator.CreateInstance(ty);
if (instance == null) if (instance == null)
{ {
throw new UserFriendlyException($"{methodPrefix}类型为{dto.CallServerName}的对象创建失败"); throw new UserFriendlyException($"{methodPrefix}类型为{dto.CallServerName}的对象创建失败");

39
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs

@ -15,6 +15,7 @@ using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping; using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
@ -42,6 +43,8 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineAppService _productionLineAppService;
private readonly IInjectionJobAppService _issueJobAppService; private readonly IInjectionJobAppService _issueJobAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService;
public ThirdLocationRequestAppService( public ThirdLocationRequestAppService(
IThirdLocationRequestRepository repository, IThirdLocationRequestRepository repository,
IThirdLocationRequestManager thirdLocationRequestManager, IThirdLocationRequestManager thirdLocationRequestManager,
@ -51,6 +54,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
ILocationAppService locationAppService, ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService, IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService,
IInjectionJobAppService issueJobAppService) IInjectionJobAppService issueJobAppService)
: base(repository, thirdLocationRequestManager) : base(repository, thirdLocationRequestManager)
{ {
@ -61,6 +65,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService; _productionLineAppService = productionLineAppService;
_issueJobAppService = issueJobAppService; _issueJobAppService = issueJobAppService;
_transactionTypeAppService = transactionTypeAppService;
} }
@ -94,6 +99,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
detailInput.ProdLine = detailInput.ToLocationCode; detailInput.ProdLine = detailInput.ToLocationCode;
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode; detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode;
} }
input.AutoSubmit = true; input.AutoSubmit = true;
@ -104,6 +110,21 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
var entity = ObjectMapper.Map<ThirdLocationRequestEditInput, ThirdLocationRequest>(input); var entity = ObjectMapper.Map<ThirdLocationRequestEditInput, ThirdLocationRequest>(input);
foreach (var detail in entity.Details)
{
var toLocationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
detail.ToLocationArea = toLocationDto.AreaCode;
detail.ToLocationErpCode = toLocationDto.ErpLocationCode;
detail.ToLocationGroup = toLocationDto.LocationGroupCode;
detail.ToWarehouseCode = toLocationDto.WarehouseCode;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
}
var result = await _thirdLocationRequestManager.CreateAsync(entity).ConfigureAwait(false); var result = await _thirdLocationRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(result); var dto = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(result);
@ -111,6 +132,24 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
return dto; return dto;
} }
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(ThirdLocationRequestEditInput 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;
}
//[Authorize(ThirdLocationRequestPermissions.Create)] //[Authorize(ThirdLocationRequestPermissions.Create)]
[HttpPost("create-and-handle")] [HttpPost("create-and-handle")]
public async Task<ThirdLocationRequestDTO> CreateAndHandleAsync(ThirdLocationRequestEditInput input) public async Task<ThirdLocationRequestDTO> CreateAndHandleAsync(ThirdLocationRequestEditInput input)

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs

@ -43,4 +43,10 @@ public class TransferLibJobManager : SfsJobManagerBase<TransferLibJob, TransferL
{ {
await Repository.UpdateAsync(TransferLibJob).ConfigureAwait(false); await Repository.UpdateAsync(TransferLibJob).ConfigureAwait(false);
} }
public override async Task<TransferLibJob> CompleteAsync(TransferLibJob input, ICurrentUser user)
{
TransferLibJob entity = await Repository.FindAsync(input.Id).ConfigureAwait(false);
return await base.CompleteAsync(entity, user).ConfigureAwait(false);
}
} }

82
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs

@ -26,20 +26,20 @@ public class ThirdLocationRequestEventHandler
{ {
private readonly IThirdLocationJobAppService _thirdLocationJobAppService; private readonly IThirdLocationJobAppService _thirdLocationJobAppService;
private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineAppService _productionLineAppService;
private readonly IThirdLocationRequestManager _assembleRequestManager; private readonly IThirdLocationRequestManager _thirdLocationRequestManager;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IBalanceAppService _balanceAppService; private readonly IBalanceAppService _balanceAppService;
public ThirdLocationRequestEventHandler( public ThirdLocationRequestEventHandler(
IThirdLocationJobAppService thirdLocationJobAppService IThirdLocationJobAppService thirdLocationJobAppService
, IProductionLineAppService productionLineAppService , IProductionLineAppService productionLineAppService
, IThirdLocationRequestManager assembleRequestManager , IThirdLocationRequestManager thirdLocationRequestManager
, ILocationAppService locationAppService , ILocationAppService locationAppService
, IBalanceAppService balanceAppService) , IBalanceAppService balanceAppService)
{ {
_thirdLocationJobAppService = thirdLocationJobAppService; _thirdLocationJobAppService = thirdLocationJobAppService;
_productionLineAppService = productionLineAppService; _productionLineAppService = productionLineAppService;
_assembleRequestManager = assembleRequestManager; _thirdLocationRequestManager = thirdLocationRequestManager;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_balanceAppService = balanceAppService; _balanceAppService = balanceAppService;
} }
@ -54,7 +54,7 @@ public class ThirdLocationRequestEventHandler
//if (entity.AutoSubmit) //if (entity.AutoSubmit)
//{ //{
// await _assembleRequestManager.SubmitAsync(entity).ConfigureAwait(false); // await _thirdLocationRequestManager.SubmitAsync(entity).ConfigureAwait(false);
//} //}
} }
@ -69,7 +69,7 @@ public class ThirdLocationRequestEventHandler
{ {
if (entity.AutoSubmit) if (entity.AutoSubmit)
{ {
await _assembleRequestManager.SubmitAsync(entity).ConfigureAwait(false); await _thirdLocationRequestManager.SubmitAsync(entity).ConfigureAwait(false);
} }
} }
@ -116,23 +116,23 @@ public class ThirdLocationRequestEventHandler
#region 私有 #region 私有
private async Task<List<ThirdLocationJobEditInput>> BuildThirdLocationJobAsync private async Task<List<ThirdLocationJobEditInput>> BuildThirdLocationJobAsync
(ThirdLocationRequest assembleRequest) (ThirdLocationRequest thirdLocationRequest)
{ {
var jobs = new List<ThirdLocationJobEditInput>(); var jobs = new List<ThirdLocationJobEditInput>();
var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);//库存事务 var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);//库存事务
var toLocationCodes = assembleRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合 var toLocationCodes = thirdLocationRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合
var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合 var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合
var assembleRequestDetails = assembleRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合 var thirdLocationRequestDetails = thirdLocationRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合
foreach (var assembleRequestDetail in assembleRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务 foreach (var thirdLocationRequestDetail in thirdLocationRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务
{ {
var toLocation = toLocations.FirstOrDefault(p => p.Code == assembleRequestDetail.ToLocationCode);//判断目标库位是否存在 var toLocation = toLocations.FirstOrDefault(p => p.Code == thirdLocationRequestDetail.ToLocationCode);//判断目标库位是否存在
Check.NotNull(toLocation, "库位代码", $"库位 {assembleRequestDetail.ToLocationCode} 不存在"); Check.NotNull(toLocation, "库位代码", $"库位 {thirdLocationRequestDetail.ToLocationCode} 不存在");
//创建详情 //创建详情
var jobDetails = await BuildThirdLocationJobDetailInputsAsync(assembleRequest, assembleRequestDetail, transactionType, toLocation.LocationGroupCode).ConfigureAwait(false); var jobDetails = await BuildThirdLocationJobDetailInputsAsync(thirdLocationRequest, thirdLocationRequestDetail, transactionType, toLocation.LocationGroupCode).ConfigureAwait(false);
if (!jobDetails.Any()) if (!jobDetails.Any())
{ {
continue; continue;
@ -141,22 +141,22 @@ public class ThirdLocationRequestEventHandler
var fromLocationCode = jobDetails[0].RecommendFromLocationCode; var fromLocationCode = jobDetails[0].RecommendFromLocationCode;
var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false); var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false);
var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode); var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode);
if (job == null || job.Details.Any(p => p.ToLocationCode != assembleRequestDetail.ToLocationCode)) if (job == null || job.Details.Any(p => p.ToLocationCode != thirdLocationRequestDetail.ToLocationCode))
{ {
job = BuildThirdLocationJobCreateInput(assembleRequest, fromLocation); job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation);
jobs.Add(job); jobs.Add(job);
} }
job.Details.AddRange(jobDetails); job.Details.AddRange(jobDetails);
if (assembleRequestDetail.ToBeIssuedQty < 0) if (thirdLocationRequestDetail.ToBeIssuedQty < 0)
{ {
assembleRequestDetail.Status = EnumStatus.Close; thirdLocationRequestDetail.Status = EnumStatus.Close;
} }
} }
jobs = jobs.Where(p => p.Details.Any()).ToList(); jobs = jobs.Where(p => p.Details.Any()).ToList();
var openRequestDetails = var openRequestDetails =
assembleRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList(); thirdLocationRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList();
if (!openRequestDetails.Any()) if (!openRequestDetails.Any())
{ {
@ -168,7 +168,7 @@ public class ThirdLocationRequestEventHandler
if (enableMultipleCreateThirdLocationJob) if (enableMultipleCreateThirdLocationJob)
{ {
//assembleRequest.Partial(); //thirdLocationRequest.Partial();
} }
else else
{ {
@ -182,34 +182,34 @@ public class ThirdLocationRequestEventHandler
return jobs; return jobs;
} }
private ThirdLocationJobEditInput BuildThirdLocationJobCreateInput(ThirdLocationRequest assembleRequest, LocationDTO fromLocation) private ThirdLocationJobEditInput BuildThirdLocationJobCreateInput(ThirdLocationRequest thirdLocationRequest, LocationDTO fromLocation)
{ {
ThirdLocationJobEditInput job; ThirdLocationJobEditInput job;
job = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationJobEditInput>(assembleRequest); job = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationJobEditInput>(thirdLocationRequest);
job.JobType = EnumJobType.IssueJob; job.JobType = EnumJobType.IssueJob;
job.JobStatus = EnumJobStatus.Open; job.JobStatus = EnumJobStatus.Open;
job.WorkGroupCode = fromLocation.WorkGroupCode; job.WorkGroupCode = fromLocation.WorkGroupCode;
job.WarehouseCode = fromLocation.WarehouseCode; job.WarehouseCode = fromLocation.WarehouseCode;
job.ProdLine = fromLocation.LocationGroupCode; job.ProdLine = fromLocation.LocationGroupCode;
job.Worker = assembleRequest.Worker; job.Worker = thirdLocationRequest.Worker;
if (string.IsNullOrEmpty(job.Worker)) if (string.IsNullOrEmpty(job.Worker))
{ {
job.Worker = "admin"; job.Worker = "admin";
} }
job.RequestNumber = assembleRequest.Number; job.RequestNumber = thirdLocationRequest.Number;
return job; return job;
} }
private async Task<List<ThirdLocationJobDetailInput>> BuildThirdLocationJobDetailInputsAsync(ThirdLocationRequest assembleRequest, private async Task<List<ThirdLocationJobDetailInput>> BuildThirdLocationJobDetailInputsAsync(ThirdLocationRequest thirdLocationRequest,
ThirdLocationRequestDetail assembleRequestDetail, TransactionTypeDTO transactionType, string toLocationGroupCode) ThirdLocationRequestDetail thirdLocationRequestDetail, TransactionTypeDTO transactionType, string toLocationGroupCode)
{ {
var jobDetails = new List<ThirdLocationJobDetailInput>(); var jobDetails = new List<ThirdLocationJobDetailInput>();
var input = new RecommendBalanceRequestInput() var input = new RecommendBalanceRequestInput()
{ {
ItemCode = assembleRequestDetail.ItemCode, ItemCode = thirdLocationRequestDetail.ItemCode,
Qty = assembleRequestDetail.ToBeIssuedQty, Qty = thirdLocationRequestDetail.ToBeIssuedQty,
LocationTypes = transactionType.OutLocationTypes, LocationTypes = transactionType.OutLocationTypes,
LocationAreas = new List<string> { assembleRequestDetail.FromLocationArea }, LocationAreas = new List<string> { thirdLocationRequestDetail.FromLocationArea },
Statuses = transactionType.OutInventoryStatuses, Statuses = transactionType.OutInventoryStatuses,
}; };
//获取推荐库存 //获取推荐库存
@ -220,8 +220,8 @@ public class ThirdLocationRequestEventHandler
foreach (var recommend in recommendList) foreach (var recommend in recommendList)
{ {
//拿走需求量 //拿走需求量
var detail = await BuildThirdLocationJobDetailAsync(assembleRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false); var detail = await BuildThirdLocationJobDetailAsync(thirdLocationRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false);
if (assembleRequest.UseOnTheWayLocation) if (thirdLocationRequest.UseOnTheWayLocation)
{ {
//获取在途库 //获取在途库
var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false);
@ -230,26 +230,26 @@ public class ThirdLocationRequestEventHandler
} }
jobDetails.Add(detail); jobDetails.Add(detail);
assembleRequestDetail.IssuedQty += recommend.Qty; thirdLocationRequestDetail.IssuedQty += recommend.Qty;
//await _assembleRequestManager.UpdateDetailsAsync(assembleRequest).ConfigureAwait(false); //await _thirdLocationRequestManager.UpdateDetailsAsync(thirdLocationRequest).ConfigureAwait(false);
} }
} }
return jobDetails; return jobDetails;
} }
private async Task<ThirdLocationJobDetailInput> BuildThirdLocationJobDetailAsync(ThirdLocationRequestDetail assembleRequestDetail, BalanceDTO balance, string toLocationGroupCode) private async Task<ThirdLocationJobDetailInput> BuildThirdLocationJobDetailAsync(ThirdLocationRequestDetail thirdLocationRequestDetail, BalanceDTO balance, string toLocationGroupCode)
{ {
//ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false); //ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false);
var detail = ObjectMapper.Map<BalanceDTO, ThirdLocationJobDetailInput>(balance); var detail = ObjectMapper.Map<BalanceDTO, ThirdLocationJobDetailInput>(balance);
detail.RequestLocationCode = assembleRequestDetail.ToLocationCode; detail.RequestLocationCode = thirdLocationRequestDetail.ToLocationCode;
detail.WorkStation = assembleRequestDetail.WorkStation; detail.WorkStation = thirdLocationRequestDetail.WorkStation;
detail.ExpiredTime = assembleRequestDetail.ExpiredTime; detail.ExpiredTime = thirdLocationRequestDetail.ExpiredTime;
detail.PositionCode = assembleRequestDetail.PositionCode; detail.PositionCode = thirdLocationRequestDetail.PositionCode;
detail.RecommendType = assembleRequestDetail.RecommendType; detail.RecommendType = thirdLocationRequestDetail.RecommendType;
detail.RecommendPackingCode = balance.PackingCode; detail.RecommendPackingCode = balance.PackingCode;
detail.RecommendContainerCode = balance.ContainerCode; detail.RecommendContainerCode = balance.ContainerCode;
@ -267,10 +267,10 @@ public class ThirdLocationRequestEventHandler
detail.RecommendQty = balance.Qty; detail.RecommendQty = balance.Qty;
detail.Uom = balance.Uom; detail.Uom = balance.Uom;
detail.ToLocationCode = assembleRequestDetail.ToLocationCode; detail.ToLocationCode = thirdLocationRequestDetail.ToLocationCode;
detail.ToLocationErpCode = assembleRequestDetail.ToLocationErpCode; detail.ToLocationErpCode = thirdLocationRequestDetail.ToLocationErpCode;
detail.ToLocationArea = assembleRequestDetail.ToLocationArea; detail.ToLocationArea = thirdLocationRequestDetail.ToLocationArea;
detail.ToWarehouseCode = assembleRequestDetail.ToWarehouseCode; detail.ToWarehouseCode = thirdLocationRequestDetail.ToWarehouseCode;
//detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code; //detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code;
detail.ProdLine = toLocationGroupCode; detail.ProdLine = toLocationGroupCode;

Loading…
Cancel
Save