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}的对象");
}
var instance = Activator.CreateInstance(ty, dto.CallBusinessType, dto.CallRequestNumber, dto.CallJobNumber);
var instance = Activator.CreateInstance(ty);
if (instance == null)
{
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.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -42,6 +43,8 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly IInjectionJobAppService _issueJobAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService;
public ThirdLocationRequestAppService(
IThirdLocationRequestRepository repository,
IThirdLocationRequestManager thirdLocationRequestManager,
@ -51,6 +54,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService,
IInjectionJobAppService issueJobAppService)
: base(repository, thirdLocationRequestManager)
{
@ -61,6 +65,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
_itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService;
_issueJobAppService = issueJobAppService;
_transactionTypeAppService = transactionTypeAppService;
}
@ -94,6 +99,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
detailInput.ProdLine = detailInput.ToLocationCode;
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode;
}
input.AutoSubmit = true;
@ -104,6 +110,21 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
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 dto = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(result);
@ -111,6 +132,24 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
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)]
[HttpPost("create-and-handle")]
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);
}
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 IProductionLineAppService _productionLineAppService;
private readonly IThirdLocationRequestManager _assembleRequestManager;
private readonly IThirdLocationRequestManager _thirdLocationRequestManager;
private readonly ILocationAppService _locationAppService;
private readonly IBalanceAppService _balanceAppService;
public ThirdLocationRequestEventHandler(
IThirdLocationJobAppService thirdLocationJobAppService
, IProductionLineAppService productionLineAppService
, IThirdLocationRequestManager assembleRequestManager
, IThirdLocationRequestManager thirdLocationRequestManager
, ILocationAppService locationAppService
, IBalanceAppService balanceAppService)
{
_thirdLocationJobAppService = thirdLocationJobAppService;
_productionLineAppService = productionLineAppService;
_assembleRequestManager = assembleRequestManager;
_thirdLocationRequestManager = thirdLocationRequestManager;
_locationAppService = locationAppService;
_balanceAppService = balanceAppService;
}
@ -54,7 +54,7 @@ public class ThirdLocationRequestEventHandler
//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)
{
await _assembleRequestManager.SubmitAsync(entity).ConfigureAwait(false);
await _thirdLocationRequestManager.SubmitAsync(entity).ConfigureAwait(false);
}
}
@ -116,23 +116,23 @@ public class ThirdLocationRequestEventHandler
#region 私有
private async Task<List<ThirdLocationJobEditInput>> BuildThirdLocationJobAsync
(ThirdLocationRequest assembleRequest)
(ThirdLocationRequest thirdLocationRequest)
{
var jobs = new List<ThirdLocationJobEditInput>();
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 assembleRequestDetails = assembleRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合
foreach (var assembleRequestDetail in assembleRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务
var thirdLocationRequestDetails = thirdLocationRequest.Details.Where(p => p.ToBeIssuedQty > 0);//所有还没发送物品的集合
foreach (var thirdLocationRequestDetail in thirdLocationRequestDetails)//如果有还有剩余未叫料的数量 则创建新的任务
{
var toLocation = toLocations.FirstOrDefault(p => p.Code == assembleRequestDetail.ToLocationCode);//判断目标库位是否存在
Check.NotNull(toLocation, "库位代码", $"库位 {assembleRequestDetail.ToLocationCode} 不存在");
var toLocation = toLocations.FirstOrDefault(p => p.Code == thirdLocationRequestDetail.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())
{
continue;
@ -141,22 +141,22 @@ public class ThirdLocationRequestEventHandler
var fromLocationCode = jobDetails[0].RecommendFromLocationCode;
var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false);
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);
}
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();
var openRequestDetails =
assembleRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList();
thirdLocationRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList();
if (!openRequestDetails.Any())
{
@ -168,7 +168,7 @@ public class ThirdLocationRequestEventHandler
if (enableMultipleCreateThirdLocationJob)
{
//assembleRequest.Partial();
//thirdLocationRequest.Partial();
}
else
{
@ -182,34 +182,34 @@ public class ThirdLocationRequestEventHandler
return jobs;
}
private ThirdLocationJobEditInput BuildThirdLocationJobCreateInput(ThirdLocationRequest assembleRequest, LocationDTO fromLocation)
private ThirdLocationJobEditInput BuildThirdLocationJobCreateInput(ThirdLocationRequest thirdLocationRequest, LocationDTO fromLocation)
{
ThirdLocationJobEditInput job;
job = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationJobEditInput>(assembleRequest);
job = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationJobEditInput>(thirdLocationRequest);
job.JobType = EnumJobType.IssueJob;
job.JobStatus = EnumJobStatus.Open;
job.WorkGroupCode = fromLocation.WorkGroupCode;
job.WarehouseCode = fromLocation.WarehouseCode;
job.ProdLine = fromLocation.LocationGroupCode;
job.Worker = assembleRequest.Worker;
job.Worker = thirdLocationRequest.Worker;
if (string.IsNullOrEmpty(job.Worker))
{
job.Worker = "admin";
}
job.RequestNumber = assembleRequest.Number;
job.RequestNumber = thirdLocationRequest.Number;
return job;
}
private async Task<List<ThirdLocationJobDetailInput>> BuildThirdLocationJobDetailInputsAsync(ThirdLocationRequest assembleRequest,
ThirdLocationRequestDetail assembleRequestDetail, TransactionTypeDTO transactionType, string toLocationGroupCode)
private async Task<List<ThirdLocationJobDetailInput>> BuildThirdLocationJobDetailInputsAsync(ThirdLocationRequest thirdLocationRequest,
ThirdLocationRequestDetail thirdLocationRequestDetail, TransactionTypeDTO transactionType, string toLocationGroupCode)
{
var jobDetails = new List<ThirdLocationJobDetailInput>();
var input = new RecommendBalanceRequestInput()
{
ItemCode = assembleRequestDetail.ItemCode,
Qty = assembleRequestDetail.ToBeIssuedQty,
ItemCode = thirdLocationRequestDetail.ItemCode,
Qty = thirdLocationRequestDetail.ToBeIssuedQty,
LocationTypes = transactionType.OutLocationTypes,
LocationAreas = new List<string> { assembleRequestDetail.FromLocationArea },
LocationAreas = new List<string> { thirdLocationRequestDetail.FromLocationArea },
Statuses = transactionType.OutInventoryStatuses,
};
//获取推荐库存
@ -220,8 +220,8 @@ public class ThirdLocationRequestEventHandler
foreach (var recommend in recommendList)
{
//拿走需求量
var detail = await BuildThirdLocationJobDetailAsync(assembleRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false);
if (assembleRequest.UseOnTheWayLocation)
var detail = await BuildThirdLocationJobDetailAsync(thirdLocationRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false);
if (thirdLocationRequest.UseOnTheWayLocation)
{
//获取在途库
var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false);
@ -230,26 +230,26 @@ public class ThirdLocationRequestEventHandler
}
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;
}
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);
var detail = ObjectMapper.Map<BalanceDTO, ThirdLocationJobDetailInput>(balance);
detail.RequestLocationCode = assembleRequestDetail.ToLocationCode;
detail.WorkStation = assembleRequestDetail.WorkStation;
detail.ExpiredTime = assembleRequestDetail.ExpiredTime;
detail.PositionCode = assembleRequestDetail.PositionCode;
detail.RecommendType = assembleRequestDetail.RecommendType;
detail.RequestLocationCode = thirdLocationRequestDetail.ToLocationCode;
detail.WorkStation = thirdLocationRequestDetail.WorkStation;
detail.ExpiredTime = thirdLocationRequestDetail.ExpiredTime;
detail.PositionCode = thirdLocationRequestDetail.PositionCode;
detail.RecommendType = thirdLocationRequestDetail.RecommendType;
detail.RecommendPackingCode = balance.PackingCode;
detail.RecommendContainerCode = balance.ContainerCode;
@ -267,10 +267,10 @@ public class ThirdLocationRequestEventHandler
detail.RecommendQty = balance.Qty;
detail.Uom = balance.Uom;
detail.ToLocationCode = assembleRequestDetail.ToLocationCode;
detail.ToLocationErpCode = assembleRequestDetail.ToLocationErpCode;
detail.ToLocationArea = assembleRequestDetail.ToLocationArea;
detail.ToWarehouseCode = assembleRequestDetail.ToWarehouseCode;
detail.ToLocationCode = thirdLocationRequestDetail.ToLocationCode;
detail.ToLocationErpCode = thirdLocationRequestDetail.ToLocationErpCode;
detail.ToLocationArea = thirdLocationRequestDetail.ToLocationArea;
detail.ToWarehouseCode = thirdLocationRequestDetail.ToWarehouseCode;
//detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code;
detail.ProdLine = toLocationGroupCode;

Loading…
Cancel
Save