Browse Source

优化代码

dev_DY_CC
郑勃旭 1 year ago
parent
commit
79e1107189
  1. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/IAssembleIssueJobAppService.cs
  2. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs
  3. 434
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs
  4. 157
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs
  5. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs
  6. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
  7. 254
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs
  8. 259
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs
  9. 233
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs
  10. 207
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/IAssembleIssueJobAppService.cs

@ -9,8 +9,6 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IAssembleIssueJobAppService public interface IAssembleIssueJobAppService
: ISfsJobAppServiceBase<AssembleIssueJobDTO, SfsJobRequestInputBase, AssembleIssueJobCheckInput, AssembleIssueJobEditInput> : ISfsJobAppServiceBase<AssembleIssueJobDTO, SfsJobRequestInputBase, AssembleIssueJobCheckInput, AssembleIssueJobEditInput>
{ {
Task CancelByMaterialRequestAsync(string requestNumber);
Task<List<AssembleIssueJobDTO>> GetByRequestNumberAsync(string requestNumber); Task<List<AssembleIssueJobDTO>> GetByRequestNumberAsync(string requestNumber);
/// <summary> /// <summary>
@ -20,4 +18,11 @@ public interface IAssembleIssueJobAppService
Task ExecuteDetailAsync(Guid masterId, Guid detailId, AssembleIssueJobDetailDTO issueJobDetailDto); Task ExecuteDetailAsync(Guid masterId, Guid detailId, AssembleIssueJobDetailDTO issueJobDetailDto);
Task CompleteAsync(Guid id); Task CompleteAsync(Guid id);
/// <summary>
/// 请求点了完成,任务全部都完成
/// </summary>
/// <param name="requestNumber"></param>
/// <returns></returns>
Task CompleteByRequestNumberAsync(string requestNumber);
} }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs

@ -9,8 +9,6 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface ICoatingIssueJobAppService public interface ICoatingIssueJobAppService
: ISfsJobAppServiceBase<CoatingIssueJobDTO, SfsJobRequestInputBase, CoatingIssueJobCheckInput, CoatingIssueJobEditInput> : ISfsJobAppServiceBase<CoatingIssueJobDTO, SfsJobRequestInputBase, CoatingIssueJobCheckInput, CoatingIssueJobEditInput>
{ {
Task CancelByMaterialRequestAsync(string requestNumber);
Task<List<CoatingIssueJobDTO>> GetByRequestNumberAsync(string requestNumber); Task<List<CoatingIssueJobDTO>> GetByRequestNumberAsync(string requestNumber);
/// <summary> /// <summary>

434
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs

@ -1,11 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using System.Net.Http.Headers;
using System.Net.Http; using System.Net.Http;
using System.Threading; using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter; using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -13,10 +12,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using MyNamespace; using MyNamespace;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Inventory.Application.Contracts;
@ -38,10 +34,10 @@ public class AssembleIssueJobAppService
{ {
private readonly IAssembleIssueJobManager _assembleIssueJobManager; private readonly IAssembleIssueJobManager _assembleIssueJobManager;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly ITransferLibJobAppService _transferLibJobAppService;
private readonly IAssembleIssueNoteAppService _assembleIssueNoteAppService; private readonly IAssembleIssueNoteAppService _assembleIssueNoteAppService;
private readonly IExpectOutAppService _expectOutAppService; private readonly IExpectOutAppService _expectOutAppService;
private readonly IHttpClientFactory _httpClientFactory; private readonly IHttpClientFactory _httpClientFactory;
private readonly ITransferLibRequestAppService _transferLibRequestAppService;
private readonly IOptions<RestoOptions> _options; private readonly IOptions<RestoOptions> _options;
protected IAssembleIssueRequestAppService AssembleIssueRequestAppService => protected IAssembleIssueRequestAppService AssembleIssueRequestAppService =>
@ -49,23 +45,19 @@ public class AssembleIssueJobAppService
public AssembleIssueJobAppService( public AssembleIssueJobAppService(
IAssembleIssueJobRepository repository, IAssembleIssueJobManager assembleIssueJobManager, IAssembleIssueJobRepository repository, IAssembleIssueJobManager assembleIssueJobManager,
ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService, ILocationAppService locationAppService,
IAssembleIssueNoteAppService assembleIssueNoteAppService, IExpectOutAppService expectOutAppService IAssembleIssueNoteAppService assembleIssueNoteAppService, IExpectOutAppService expectOutAppService
, IHttpClientFactory httpClientFactory , IHttpClientFactory httpClientFactory
, IOptions<RestoOptions> options , IOptions<RestoOptions> options, ITransferLibRequestAppService transferLibRequestAppService) : base(
) : base(
repository, assembleIssueJobManager) repository, assembleIssueJobManager)
{ {
_assembleIssueJobManager = assembleIssueJobManager; _assembleIssueJobManager = assembleIssueJobManager;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_transferLibJobAppService = transferLibJobAppService;
_assembleIssueNoteAppService = assembleIssueNoteAppService; _assembleIssueNoteAppService = assembleIssueNoteAppService;
_expectOutAppService = expectOutAppService; _expectOutAppService = expectOutAppService;
_httpClientFactory = httpClientFactory; _httpClientFactory = httpClientFactory;
_options = options; _options = options;
_transferLibRequestAppService = transferLibRequestAppService;
} }
[HttpPost("add-many")] [HttpPost("add-many")]
@ -101,23 +93,31 @@ public class AssembleIssueJobAppService
[HttpPost("invalid")] [HttpPost("invalid")]
public override async Task CancelAsync(Guid id) public override async Task CancelAsync(Guid id)
{ {
var injectionJob = await _repository.GetAsync(id).ConfigureAwait(false); var assembleJob = await _repository.GetAsync(id).ConfigureAwait(false);
if (injectionJob == null) if (assembleJob == null)
{ {
throw new UserFriendlyException($"未找到ID为 {id} 的任务"); throw new UserFriendlyException($"未找到ID为 {id} 的任务");
} }
await _assembleIssueJobManager.CancelAsync(injectionJob).ConfigureAwait(false); if (assembleJob.JobStatus == EnumJobStatus.Open ||
} assembleJob.JobStatus == EnumJobStatus.Partial ||
assembleJob.JobStatus == EnumJobStatus.Wait ||
[HttpPost("cancel-by-request/{requestNumber}")] assembleJob.JobStatus == EnumJobStatus.Doing)
public virtual async Task CancelByMaterialRequestAsync(string requestNumber)
{ {
var entities = await _repository.GetListAsync(p => p.AssembleRequestNumber == requestNumber) await _expectOutAppService.RemoveByNumberAsync(assembleJob.Number).ConfigureAwait(false);
await _transferLibRequestAppService.CancelByCallRequestNumberAsync(assembleJob.AssembleRequestNumber)
.ConfigureAwait(false); .ConfigureAwait(false);
foreach (var entity in entities)
assembleJob.JobStatus = EnumJobStatus.Cancelled;
await _repository.UpdateAsync(assembleJob).ConfigureAwait(false);
}
else
{ {
await _assembleIssueJobManager.CancelAsync(entity).ConfigureAwait(false); throw new UserFriendlyException($"任务状态不是" +
$"{EnumJobStatus.Open.GetDisplayName()}、" +
$"{EnumJobStatus.Partial.GetDisplayName()}、" +
$"{EnumJobStatus.Doing.GetDisplayName()}、" +
$"{EnumJobStatus.Wait.GetDisplayName()}");
} }
} }
@ -139,11 +139,15 @@ public class AssembleIssueJobAppService
{ {
var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false); var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false);
var transferLibJobDto = await _transferLibJobAppService.GetByNumberAsync(dto.Number).ConfigureAwait(false); if (job.JobStatus != EnumJobStatus.Wait)
{
throw new UserFriendlyException($"任务状态不是{EnumJobStatus.Wait.GetDisplayName()}");
}
var transferLibNoteDetail = dto.Details.First(); var transferLibNoteDetail = dto.Details.First();
var jobDetail = job.Details.First(); var jobDetail = job.Details.First();
job.JobStatus = EnumJobStatus.Open; job.JobStatus = EnumJobStatus.Open;
jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate; jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate;
@ -199,24 +203,43 @@ public class AssembleIssueJobAppService
issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty; issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty;
issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty; issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty;
assembleIssueJob.Details = new EditableList<AssembleIssueJobDetail>() { issueJobDetail }; assembleIssueJob.Details = new EditableList<AssembleIssueJobDetail> { issueJobDetail };
if (assembleIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成 if (assembleIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成
{ {
await UpdateRequestAndjobStatusDoneAsync(assembleIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); if (issueJobDetailDto.RecommendToPackingCode != issueJobDetailDto.HandledToPackingCode)
{
await CheckPackingCodeIsUserAsync(issueJobDetailDto.HandledToPackingCode, assembleIssueJob.Number)
.ConfigureAwait(false);
}
await UpdateRequestAndjobStatusDoneAsync(assembleIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty)
.ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false);
} }
else else
{ {
var detail = assembleIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id); var detail = assembleIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id);
if (issueJobDetail.HandledToQty >= detail.RequestQty) if (issueJobDetail.HandledToQty >= detail.RequestQty)
{ {
await UpdateRequestAndjobStatusDoneAsync(assembleIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); await UpdateRequestAndjobStatusDoneAsync(assembleIssueJob, issueJobDetailDto,
issueJobDetailDto.HandledToQty).ConfigureAwait(false);
}
else
{
await RemoveExpectOutAsync(assembleIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty)
.ConfigureAwait(false);
} }
} }
await _repository.UpdateAsync(assembleIssueJob).ConfigureAwait(false); await _repository.UpdateAsync(assembleIssueJob).ConfigureAwait(false);
} }
/// <summary>
/// 完成任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("Complete/{id}")] [HttpPost("Complete/{id}")]
public async Task CompleteAsync(Guid id) public async Task CompleteAsync(Guid id)
{ {
@ -224,17 +247,187 @@ public class AssembleIssueJobAppService
assembleIssueJob.JobStatus = EnumJobStatus.Done; assembleIssueJob.JobStatus = EnumJobStatus.Done;
await _expectOutAppService.RemoveByNumberAndInventoryAsync(assembleIssueJob.Number,
assembleIssueJob.Details.First().ItemCode,
assembleIssueJob.Details.First().HandledToLocationCode, assembleIssueJob.Details.First().HandledToPackingCode,
assembleIssueJob.Details.First().Status, assembleIssueJob.Details.First().HandledToLot,
assembleIssueJob.Details.First().HandledToQty).ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false); await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false);
await AssembleIssueRequestAppService.UpdateStatusCompletedAsync(assembleIssueJob.AssembleRequestNumber)
.ConfigureAwait(false);
await _transferLibRequestAppService.CancelByCallRequestNumberAsync(assembleIssueJob.AssembleRequestNumber)
.ConfigureAwait(false);
await _repository.UpdateAsync(assembleIssueJob).ConfigureAwait(false);
}
/// <summary>
/// 请求点了完成,任务全部都完成
/// </summary>
/// <param name="requestNumber"></param>
/// <returns></returns>
[HttpPost("complete-by-request/{requestNumber}")]
public async Task CompleteByRequestNumberAsync(string requestNumber)
{
var assembleIssueJobs = await _repository.GetListAsync(p => p.AssembleRequestNumber == requestNumber)
.ConfigureAwait(false);
foreach (var assembleIssueJob in assembleIssueJobs)
{
assembleIssueJob.JobStatus = EnumJobStatus.Done;
await _repository.UpdateAsync(assembleIssueJob).ConfigureAwait(false); await _repository.UpdateAsync(assembleIssueJob).ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false);
await _transferLibRequestAppService.CancelByCallRequestNumberAsync(assembleIssueJob.AssembleRequestNumber)
.ConfigureAwait(false);
}
} }
#region 立库
/// <summary>
/// 立体库同步
/// </summary>
/// <param name="input"></param>
/// <param name="pLoc"></param>
/// <returns></returns>
[HttpPost("sync-issue-job-stereo")]
public async Task<ReusltObject> SyncIssueJobStereoAsync(List<AssembleIssueJobDTO> input, string pLoc)
{
var ret = new ReusltObject();
ret.Code = "1";
ret.Message = "操作成功";
ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
try
{
var IssueJobToRestoDetailDTOs = new List<IssueJobToRestoDetailDTO>();
var main = new IssueJobToRestoDTO();
main.OperatorName = CurrentUser.UserName;
foreach (var job in input)
{
foreach (var jobitem in job.Details)
{
IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO
{
Count = jobitem.HandledToQty,
ProductNo = jobitem.ItemCode,
NeedSite = pLoc,
WorkNo = job.Number,
TaskNo = job.Number
});
}
}
main.Details = IssueJobToRestoDetailDTOs;
var httpclient = _httpClientFactory.CreateClient();
#if DEBUG
var json = JsonSerializer.Serialize(main);
_options.Value.Address = "http://localhost:59094/"; //测试地址
_options.Value.Token = ""; //测试token
_options.Value.UserName = ""; //测试用户名
_options.Value.Password = ""; //测试密码
#endif
if (!string.IsNullOrEmpty(_options.Value.Token))
{
var token = _options.Value.Token;
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password))
{
var username = _options.Value.UserName;
var password = _options.Value.Password;
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")));
}
var client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
}
catch (Exception ex)
{
ret = new ReusltObject();
ret.Code = "2";
ret.Message = ex.Message;
ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
}
return ret;
}
[HttpPost("receive-issue-job-stereo")]
public virtual async Task<ReusltObject> SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input)
{
#if DEBUG
var json = JsonSerializer.Serialize(input);
#endif
var errors = new List<string>();
var ret = new ReusltObject { Code = "1", OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), Message = "操作成功" };
try
{
if (input.Jobs.Count > 0)
{
var jobs = input.Jobs;
var numbers = jobs.Select(p => p.JobNumber);
var query = _repository.WithDetails()
.Where(p => numbers.Contains(p.Number));
var entities = query.ToList();
var dtos = ObjectMapper.Map<List<AssembleIssueJob>, List<AssembleIssueJobDTO>>(entities);
if (input.Jobs.Count == entities.Count)
{
errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n");
}
foreach (var itm in dtos)
{
var first = jobs.FirstOrDefault(p => p.JobNumber == itm.Number);
var itmDetails = itm.Details.ToList();
var details = new List<AssembleIssueJobDetailDTO>();
foreach (var detail in first.Details)
{
var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
var dto = new AssembleIssueJobDetailDTO();
dto.HandledFromLocationCode = entity.HandledFromLocationCode;
dto.HandledToLocationCode = entity.HandledToLocationCode;
dto.ItemCode = detail.ItemCode;
dto.RecommendFromQty = detail.Qty;
dto.RecommendToQty = detail.Qty;
dto.HandledFromQty = detail.Qty;
dto.HandledToQty = detail.Qty;
dto.Status = entity.Status;
details.Add(dto);
}
itm.Details = details;
await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
}
}
else
{
errors.Add("立体库确认单据里无数据! \n");
}
}
catch (Exception ex)
{
ret = new ReusltObject
{
Code = "2", OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), Message = ex.Message
};
return ret;
}
if (errors.Count > 0)
{
ret = new ReusltObject
{
Code = "2",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = string.Join(",", errors.ToArray())
};
}
return ret;
}
#endregion
#region 私有 #region 私有
/// <summary> /// <summary>
@ -334,14 +527,13 @@ public class AssembleIssueJobAppService
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse) if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{ {
//TODO 立体库 //TODO 立体库
var ret = await SyncIssueJobStereoAsync(new List<AssembleIssueJobDTO> { assembleIssueJobDto }, loctionDto.Code).ConfigureAwait(false); var ret = await SyncIssueJobStereoAsync(new List<AssembleIssueJobDTO> { assembleIssueJobDto },
loctionDto.Code).ConfigureAwait(false);
if (ret.Code != "1") if (ret.Code != "1")
{ {
throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}"); throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}");
} }
} }
} }
/// <summary> /// <summary>
@ -349,6 +541,7 @@ public class AssembleIssueJobAppService
/// </summary> /// </summary>
/// <param name="assembleIssueJob"></param> /// <param name="assembleIssueJob"></param>
/// <param name="assembleIssueJobDetailDto"></param> /// <param name="assembleIssueJobDetailDto"></param>
/// <param name="handledToQty"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="UserFriendlyException"></exception> /// <exception cref="UserFriendlyException"></exception>
private async Task UpdateRequestAndjobStatusDoneAsync(AssembleIssueJob assembleIssueJob, private async Task UpdateRequestAndjobStatusDoneAsync(AssembleIssueJob assembleIssueJob,
@ -363,11 +556,7 @@ public class AssembleIssueJobAppService
assembleIssueJob.JobStatus = EnumJobStatus.Done; assembleIssueJob.JobStatus = EnumJobStatus.Done;
await _expectOutAppService.RemoveByNumberAndInventoryAsync(assembleIssueJob.Number, await RemoveExpectOutAsync(assembleIssueJob, assembleIssueJobDetailDto, handledToQty).ConfigureAwait(false);
assembleIssueJobDetailDto.ItemCode,
assembleIssueJobDetailDto.HandledToLocationCode, assembleIssueJobDetailDto.HandledToPackingCode,
assembleIssueJobDetailDto.Status, assembleIssueJobDetailDto.HandledToLot,
handledToQty).ConfigureAwait(false);
//await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false); //await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false);
@ -377,158 +566,33 @@ public class AssembleIssueJobAppService
await Task.CompletedTask.ConfigureAwait(false); await Task.CompletedTask.ConfigureAwait(false);
} }
/// <summary> /// <summary>
/// 立体库同步 /// 判断实际TO的箱码是否被占用
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="packingCode"></param>
/// <param name="p_loc"></param> /// <param name="jobNumber"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("sync-issue-job-stereo")] /// <exception cref="UserFriendlyException"></exception>
private async Task CheckPackingCodeIsUserAsync(string packingCode, string jobNumber)
public async Task<ReusltObject> SyncIssueJobStereoAsync(List<AssembleIssueJobDTO> input, string p_loc)
{
ReusltObject ret = new ReusltObject();
ret.Code = "1";
ret.Message = "操作成功";
ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
try
{
List<IssueJobToRestoDetailDTO> IssueJobToRestoDetailDTOs = new List<IssueJobToRestoDetailDTO>();
IssueJobToRestoDTO main = new IssueJobToRestoDTO();
main.OperatorName = CurrentUser.UserName;
foreach (var job in input)
{
foreach (var jobitem in job.Details)
{
IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO()
{
Count = jobitem.HandledToQty,
ProductNo = jobitem.ItemCode,
NeedSite = p_loc,
WorkNo = job.Number,
TaskNo = job.Number
});
}
}
main.Details = IssueJobToRestoDetailDTOs;
var httpclient = _httpClientFactory.CreateClient();
#if DEBUG
string json = System.Text.Json.JsonSerializer.Serialize(main);
_options.Value.Address = "http://localhost:59094/";//测试地址
_options.Value.Token = "";//测试token
_options.Value.UserName = "";//测试用户名
_options.Value.Password = "";//测试密码
#endif
if (!string.IsNullOrEmpty(_options.Value.Token))
{
var token = _options.Value.Token;
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password))
{ {
var username = _options.Value.UserName; var list = await _expectOutAppService.GetListByPackingCodeAsync(packingCode).ConfigureAwait(false);
var password = _options.Value.Password; list = list.Where(p => p.JobNumber != jobNumber).ToList();
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($"{username}:{password}"))); if (list.Any())
}
IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
}
catch (Exception ex)
{ {
ret = new ReusltObject(); throw new UserFriendlyException($"任务号【{list.First().JobNumber}】的任务,已占用【{packingCode}】箱码的库存。");
ret.Code = "2";
ret.Message = ex.Message;
ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
} }
return ret;
} }
[HttpPost("receive-issue-job-stereo")] private async Task RemoveExpectOutAsync(AssembleIssueJob assembleIssueJob,
public virtual async Task<ReusltObject> SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input) AssembleIssueJobDetailDTO assembleIssueJobDetailDto,
{ decimal handledToQty)
#if DEBUG
var json = System.Text.Json.JsonSerializer.Serialize(input);
#endif
List<string> errors = new List<string>();
var ret = new ReusltObject()
{
Code = "1",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = "操作成功"
};
try
{
if (input.Jobs.Count > 0)
{ {
var jobs = input.Jobs; await _expectOutAppService.RemoveByNumberAndInventoryAsync(assembleIssueJob.Number,
var numbers = jobs.Select(p => p.JobNumber); assembleIssueJobDetailDto.ItemCode,
var query = _repository.WithDetails() assembleIssueJobDetailDto.HandledToLocationCode, assembleIssueJobDetailDto.HandledToPackingCode,
.Where(p => numbers.Contains(p.Number)); assembleIssueJobDetailDto.Status, assembleIssueJobDetailDto.HandledToLot,
var entities = query.ToList(); handledToQty).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<AssembleIssueJob>, List<AssembleIssueJobDTO>>(entities);
if (input.Jobs.Count == entities.Count)
{
errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n");
}
foreach (var itm in dtos)
{
var first = jobs.FirstOrDefault<IssueJobFromRestoDTO>(p => p.JobNumber == itm.Number);
var itmDetails = itm.Details.ToList();
List<AssembleIssueJobDetailDTO> details = new List<AssembleIssueJobDetailDTO>();
foreach (var detail in first.Details)
{
var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
AssembleIssueJobDetailDTO dto = new AssembleIssueJobDetailDTO();
dto.HandledFromLocationCode = entity.HandledFromLocationCode;
dto.HandledToLocationCode = entity.HandledToLocationCode;
dto.ItemCode = detail.ItemCode;
dto.RecommendFromQty = detail.Qty;
dto.RecommendToQty = detail.Qty;
dto.HandledFromQty = detail.Qty;
dto.HandledToQty = detail.Qty;
dto.Status = entity.Status;
details.Add(dto);
}
itm.Details = details;
await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
}
}
else
{
errors.Add("立体库确认单据里无数据! \n");
}
}
catch (Exception ex)
{
ret = new ReusltObject()
{
Code = "2",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = ex.Message
};
return ret;
} }
if (errors.Count > 0)
{
ret = new ReusltObject()
{
Code = "2",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = string.Join(",", errors.ToArray())
};
}
return ret;
}
#endregion #endregion
} }

157
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter; using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -10,7 +12,6 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using MyNamespace; using MyNamespace;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
@ -18,12 +19,9 @@ using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain.Shared;
using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy; using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy;
using Win_in.Sfs.Wms.Store.Notes; using Win_in.Sfs.Wms.Store.Notes;
using Win_in.Sfs.Wms.Store.Options; using Win_in.Sfs.Wms.Store.Options;
using static IdentityModel.ClaimComparer;
using static Volo.Abp.Identity.Settings.IdentitySettingNames;
namespace Win_in.Sfs.Wms.Store.Application; namespace Win_in.Sfs.Wms.Store.Application;
@ -36,10 +34,10 @@ public class CoatingIssueJobAppService
{ {
private readonly ICoatingIssueJobManager _coatingIssueJobManager; private readonly ICoatingIssueJobManager _coatingIssueJobManager;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly ITransferLibJobAppService _transferLibJobAppService;
private readonly ICoatingIssueNoteAppService _coatingIssueNoteAppService; private readonly ICoatingIssueNoteAppService _coatingIssueNoteAppService;
private readonly IExpectOutAppService _expectOutAppService; private readonly IExpectOutAppService _expectOutAppService;
private readonly IHttpClientFactory _httpClientFactory; private readonly IHttpClientFactory _httpClientFactory;
private readonly ITransferLibRequestAppService _transferLibRequestAppService;
private readonly IOptions<RestoOptions> _options; private readonly IOptions<RestoOptions> _options;
protected ICoatingIssueRequestAppService CoatingIssueRequestAppService => protected ICoatingIssueRequestAppService CoatingIssueRequestAppService =>
@ -47,23 +45,19 @@ public class CoatingIssueJobAppService
public CoatingIssueJobAppService( public CoatingIssueJobAppService(
ICoatingIssueJobRepository repository, ICoatingIssueJobManager coatingIssueJobManager, ICoatingIssueJobRepository repository, ICoatingIssueJobManager coatingIssueJobManager,
ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService, ILocationAppService locationAppService,
ICoatingIssueNoteAppService coatingIssueNoteAppService, IExpectOutAppService expectOutAppService ICoatingIssueNoteAppService coatingIssueNoteAppService, IExpectOutAppService expectOutAppService
, IHttpClientFactory httpClientFactory , IHttpClientFactory httpClientFactory
, IOptions<RestoOptions> options , IOptions<RestoOptions> options, ITransferLibRequestAppService transferLibRequestAppService) : base(
) : base(
repository, coatingIssueJobManager) repository, coatingIssueJobManager)
{ {
_coatingIssueJobManager = coatingIssueJobManager; _coatingIssueJobManager = coatingIssueJobManager;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_transferLibJobAppService = transferLibJobAppService;
_coatingIssueNoteAppService = coatingIssueNoteAppService; _coatingIssueNoteAppService = coatingIssueNoteAppService;
_expectOutAppService = expectOutAppService; _expectOutAppService = expectOutAppService;
_httpClientFactory = httpClientFactory; _httpClientFactory = httpClientFactory;
_options = options; _options = options;
_transferLibRequestAppService = transferLibRequestAppService;
} }
[HttpPost("add-many")] [HttpPost("add-many")]
@ -105,27 +99,25 @@ public class CoatingIssueJobAppService
throw new UserFriendlyException($"未找到ID为 {id} 的任务"); throw new UserFriendlyException($"未找到ID为 {id} 的任务");
} }
if (coatingJob.JobStatus == EnumJobStatus.Open || coatingJob.JobStatus == EnumJobStatus.Partial || if (coatingJob.JobStatus == EnumJobStatus.Open ||
coatingJob.JobStatus == EnumJobStatus.Wait) coatingJob.JobStatus == EnumJobStatus.Partial ||
coatingJob.JobStatus == EnumJobStatus.Wait ||
coatingJob.JobStatus == EnumJobStatus.Doing)
{ {
throw new UserFriendlyException($"任务状态不是{coatingJob.JobStatus == EnumJobStatus.Open}、" +
$"{coatingJob.JobStatus == EnumJobStatus.Partial}、" +
$"{coatingJob.JobStatus == EnumJobStatus.Wait}");
}
await _expectOutAppService.RemoveByNumberAsync(coatingJob.Number).ConfigureAwait(false); await _expectOutAppService.RemoveByNumberAsync(coatingJob.Number).ConfigureAwait(false);
await _transferLibRequestAppService.CancelByCallRequestNumberAsync(coatingJob.CoatingRequestNumber)
.ConfigureAwait(false);
coatingJob.JobStatus = EnumJobStatus.Cancelled; coatingJob.JobStatus = EnumJobStatus.Cancelled;
await _repository.UpdateAsync(coatingJob).ConfigureAwait(false); await _repository.UpdateAsync(coatingJob).ConfigureAwait(false);
} }
else
[HttpPost("cancel-by-request/{requestNumber}")]
public virtual async Task CancelByMaterialRequestAsync(string requestNumber)
{
var entities = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber)
.ConfigureAwait(false);
foreach (var entity in entities)
{ {
await _coatingIssueJobManager.CancelAsync(entity).ConfigureAwait(false); throw new UserFriendlyException($"任务状态不是" +
$"{EnumJobStatus.Open.GetDisplayName()}、" +
$"{EnumJobStatus.Partial.GetDisplayName()}、" +
$"{EnumJobStatus.Doing.GetDisplayName()}、" +
$"{EnumJobStatus.Wait.GetDisplayName()}");
} }
} }
@ -211,22 +203,32 @@ public class CoatingIssueJobAppService
issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty; issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty;
issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty; issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty;
coatingIssueJob.Details = new EditableList<CoatingIssueJobDetail>() { issueJobDetail }; coatingIssueJob.Details = new EditableList<CoatingIssueJobDetail> { issueJobDetail };
if (coatingIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成 if (coatingIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成
{ {
await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); if (issueJobDetailDto.RecommendToPackingCode != issueJobDetailDto.HandledToPackingCode)
{
await CheckPackingCodeIsUserAsync(issueJobDetailDto.HandledToPackingCode, coatingIssueJob.Number)
.ConfigureAwait(false);
}
await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty)
.ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false);
} }
else else
{ {
var detail = coatingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id); var detail = coatingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id);
if (issueJobDetail.HandledToQty >= detail.RequestQty) if (issueJobDetail.HandledToQty >= detail.RequestQty)
{ {
await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto,
issueJobDetailDto.HandledToQty).ConfigureAwait(false);
} }
else else
{ {
await RemoveExpectOutAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); await RemoveExpectOutAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty)
.ConfigureAwait(false);
} }
} }
@ -247,7 +249,11 @@ public class CoatingIssueJobAppService
await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false); await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false);
await CoatingIssueRequestAppService.UpdateStatusCompletedAsync(coatingIssueJob.CoatingRequestNumber).ConfigureAwait(false); await CoatingIssueRequestAppService.UpdateStatusCompletedAsync(coatingIssueJob.CoatingRequestNumber)
.ConfigureAwait(false);
await _transferLibRequestAppService.CancelByCallRequestNumberAsync(coatingIssueJob.CoatingRequestNumber)
.ConfigureAwait(false);
await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false); await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false);
} }
@ -259,13 +265,16 @@ public class CoatingIssueJobAppService
[HttpPost("complete-by-request/{requestNumber}")] [HttpPost("complete-by-request/{requestNumber}")]
public async Task CompleteByRequestNumberAsync(string requestNumber) public async Task CompleteByRequestNumberAsync(string requestNumber)
{ {
var coatingIssueJobs = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber).ConfigureAwait(false); var coatingIssueJobs = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber)
.ConfigureAwait(false);
foreach (var coatingIssueJob in coatingIssueJobs) foreach (var coatingIssueJob in coatingIssueJobs)
{ {
coatingIssueJob.JobStatus = EnumJobStatus.Done; coatingIssueJob.JobStatus = EnumJobStatus.Done;
await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false); await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false); await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false);
await _transferLibRequestAppService.CancelByCallRequestNumberAsync(coatingIssueJob.CoatingRequestNumber)
.ConfigureAwait(false);
} }
} }
@ -275,40 +284,40 @@ public class CoatingIssueJobAppService
/// 立体库同步 /// 立体库同步
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <param name="p_loc"></param> /// <param name="pLoc"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("sync-issue-job-stereo")] [HttpPost("sync-issue-job-stereo")]
public async Task<ReusltObject> SyncIssueJobStereoAsync(List<CoatingIssueJobDTO> input, string pLoc)
public async Task<ReusltObject> SyncIssueJobStereoAsync(List<CoatingIssueJobDTO> input, string p_loc)
{ {
ReusltObject ret = new ReusltObject(); var ret = new ReusltObject();
ret.Code = "1"; ret.Code = "1";
ret.Message = "操作成功"; ret.Message = "操作成功";
ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd"); ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
try try
{ {
List<IssueJobToRestoDetailDTO> IssueJobToRestoDetailDTOs = new List<IssueJobToRestoDetailDTO>(); var IssueJobToRestoDetailDTOs = new List<IssueJobToRestoDetailDTO>();
IssueJobToRestoDTO main = new IssueJobToRestoDTO(); var main = new IssueJobToRestoDTO();
main.OperatorName = CurrentUser.UserName; main.OperatorName = CurrentUser.UserName;
foreach (var job in input) foreach (var job in input)
{ {
foreach (var jobitem in job.Details) foreach (var jobitem in job.Details)
{ {
IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO() IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO
{ {
Count = jobitem.HandledToQty, Count = jobitem.HandledToQty,
ProductNo = jobitem.ItemCode, ProductNo = jobitem.ItemCode,
NeedSite = p_loc, NeedSite = pLoc,
WorkNo = job.Number, WorkNo = job.Number,
TaskNo = job.Number TaskNo = job.Number
}); });
} }
} }
main.Details = IssueJobToRestoDetailDTOs; main.Details = IssueJobToRestoDetailDTOs;
var httpclient = _httpClientFactory.CreateClient(); var httpclient = _httpClientFactory.CreateClient();
#if DEBUG #if DEBUG
string json = System.Text.Json.JsonSerializer.Serialize(main); var json = JsonSerializer.Serialize(main);
_options.Value.Address = "http://localhost:59094/"; //测试地址 _options.Value.Address = "http://localhost:59094/"; //测试地址
_options.Value.Token = ""; //测试token _options.Value.Token = ""; //测试token
_options.Value.UserName = ""; //测试用户名 _options.Value.UserName = ""; //测试用户名
@ -320,14 +329,16 @@ public class CoatingIssueJobAppService
var token = _options.Value.Token; var token = _options.Value.Token;
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
} }
if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password)) if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password))
{ {
var username = _options.Value.UserName; var username = _options.Value.UserName;
var password = _options.Value.Password; var password = _options.Value.Password;
httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($"{username}:{password}"))); httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")));
} }
IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient); var client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
@ -339,26 +350,18 @@ public class CoatingIssueJobAppService
} }
return ret; return ret;
} }
[HttpPost("receive-issue-job-stereo")] [HttpPost("receive-issue-job-stereo")]
public virtual async Task<ReusltObject> SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input) public virtual async Task<ReusltObject> SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input)
{ {
#if DEBUG #if DEBUG
var json = System.Text.Json.JsonSerializer.Serialize(input); var json = JsonSerializer.Serialize(input);
#endif #endif
List<string> errors = new List<string>(); var errors = new List<string>();
var ret = new ReusltObject() var ret = new ReusltObject { Code = "1", OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), Message = "操作成功" };
{
Code = "1",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = "操作成功"
};
try try
{ {
if (input.Jobs.Count > 0) if (input.Jobs.Count > 0)
{ {
var jobs = input.Jobs; var jobs = input.Jobs;
@ -371,15 +374,16 @@ public class CoatingIssueJobAppService
{ {
errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n"); errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n");
} }
foreach (var itm in dtos) foreach (var itm in dtos)
{ {
var first = jobs.FirstOrDefault<IssueJobFromRestoDTO>(p => p.JobNumber == itm.Number); var first = jobs.FirstOrDefault(p => p.JobNumber == itm.Number);
var itmDetails = itm.Details.ToList(); var itmDetails = itm.Details.ToList();
List<CoatingIssueJobDetailDTO> details = new List<CoatingIssueJobDetailDTO>(); var details = new List<CoatingIssueJobDetailDTO>();
foreach (var detail in first.Details) foreach (var detail in first.Details)
{ {
var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode); var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
CoatingIssueJobDetailDTO dto = new CoatingIssueJobDetailDTO(); var dto = new CoatingIssueJobDetailDTO();
dto.HandledFromLocationCode = entity.HandledFromLocationCode; dto.HandledFromLocationCode = entity.HandledFromLocationCode;
dto.HandledToLocationCode = entity.HandledToLocationCode; dto.HandledToLocationCode = entity.HandledToLocationCode;
dto.ItemCode = detail.ItemCode; dto.ItemCode = detail.ItemCode;
@ -390,6 +394,7 @@ public class CoatingIssueJobAppService
dto.Status = entity.Status; dto.Status = entity.Status;
details.Add(dto); details.Add(dto);
} }
itm.Details = details; itm.Details = details;
await CompleteAsync(itm.Id, itm).ConfigureAwait(false); await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
} }
@ -401,24 +406,23 @@ public class CoatingIssueJobAppService
} }
catch (Exception ex) catch (Exception ex)
{ {
ret = new ReusltObject() ret = new ReusltObject
{ {
Code = "2", Code = "2", OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), Message = ex.Message
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = ex.Message
}; };
return ret; return ret;
} }
if (errors.Count > 0) if (errors.Count > 0)
{ {
ret = new ReusltObject
ret = new ReusltObject()
{ {
Code = "2", Code = "2",
OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
Message = string.Join(",", errors.ToArray()) Message = string.Join(",", errors.ToArray())
}; };
} }
return ret; return ret;
} }
@ -523,14 +527,13 @@ public class CoatingIssueJobAppService
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse) if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{ {
//TODO 立体库 //TODO 立体库
var ret = await SyncIssueJobStereoAsync(new List<CoatingIssueJobDTO> { coatingIssueJobDto }, loctionDto.Code).ConfigureAwait(false); var ret = await SyncIssueJobStereoAsync(new List<CoatingIssueJobDTO> { coatingIssueJobDto },
loctionDto.Code).ConfigureAwait(false);
if (ret.Code != "1") if (ret.Code != "1")
{ {
throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}"); throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}");
} }
} }
} }
/// <summary> /// <summary>
@ -563,7 +566,25 @@ public class CoatingIssueJobAppService
await Task.CompletedTask.ConfigureAwait(false); await Task.CompletedTask.ConfigureAwait(false);
} }
private async Task RemoveExpectOutAsync(CoatingIssueJob coatingIssueJob, CoatingIssueJobDetailDTO coatingIssueJobDetailDto, /// <summary>
/// 判断实际TO的箱码是否被占用
/// </summary>
/// <param name="packingCode"></param>
/// <param name="jobNumber"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private async Task CheckPackingCodeIsUserAsync(string packingCode, string jobNumber)
{
var list = await _expectOutAppService.GetListByPackingCodeAsync(packingCode).ConfigureAwait(false);
list = list.Where(p => p.JobNumber != jobNumber).ToList();
if (list.Any())
{
throw new UserFriendlyException($"任务号【{list.First().JobNumber}】的任务,已占用【{packingCode}】箱码的库存。");
}
}
private async Task RemoveExpectOutAsync(CoatingIssueJob coatingIssueJob,
CoatingIssueJobDetailDTO coatingIssueJobDetailDto,
decimal handledToQty) decimal handledToQty)
{ {
await _expectOutAppService.RemoveByNumberAndInventoryAsync(coatingIssueJob.Number, await _expectOutAppService.RemoveByNumberAndInventoryAsync(coatingIssueJob.Number,

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobAppService.cs

@ -283,10 +283,10 @@ public class InjectionIssueJobAppService
/// 立体库同步 /// 立体库同步
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <param name="p_loc"></param> /// <param name="pLoc"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("sync-issue-job-stereo")] [HttpPost("sync-issue-job-stereo")]
public async Task<ReusltObject> SyncIssueJobStereoAsync(List<InjectionIssueJobDTO> input, string p_loc) public async Task<ReusltObject> SyncIssueJobStereoAsync(List<InjectionIssueJobDTO> input, string pLoc)
{ {
var ret = new ReusltObject(); var ret = new ReusltObject();
ret.Code = "1"; ret.Code = "1";
@ -305,7 +305,7 @@ public class InjectionIssueJobAppService
{ {
Count = jobitem.HandledToQty, Count = jobitem.HandledToQty,
ProductNo = jobitem.ItemCode, ProductNo = jobitem.ItemCode,
NeedSite = p_loc, NeedSite = pLoc,
WorkNo = job.Number, WorkNo = job.Number,
TaskNo = job.Number TaskNo = job.Number
}); });

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs

@ -283,10 +283,10 @@ public class KittingIssueJobAppService
/// 立体库同步 /// 立体库同步
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <param name="p_loc"></param> /// <param name="pLoc"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("sync-issue-job-stereo")] [HttpPost("sync-issue-job-stereo")]
public async Task<ReusltObject> SyncIssueJobStereoAsync(List<KittingIssueJobDTO> input, string p_loc) public async Task<ReusltObject> SyncIssueJobStereoAsync(List<KittingIssueJobDTO> input, string pLoc)
{ {
var ret = new ReusltObject(); var ret = new ReusltObject();
ret.Code = "1"; ret.Code = "1";
@ -305,7 +305,7 @@ public class KittingIssueJobAppService
{ {
Count = jobitem.HandledToQty, Count = jobitem.HandledToQty,
ProductNo = jobitem.ItemCode, ProductNo = jobitem.ItemCode,
NeedSite = p_loc, NeedSite = pLoc,
WorkNo = job.Number, WorkNo = job.Number,
TaskNo = job.Number TaskNo = job.Number
}); });

254
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs

@ -9,6 +9,7 @@ using NUglify.Helpers;
using Volo.Abp; using Volo.Abp;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -20,40 +21,34 @@ namespace Win_in.Sfs.Wms.Store.Application;
/// </summary> /// </summary>
[Authorize] [Authorize]
[Route($"{StoreConsts.RootPath}assemble-issue-request")] [Route($"{StoreConsts.RootPath}assemble-issue-request")]
public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<AssembleIssueRequest, AssembleIssueRequestDTO, public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<AssembleIssueRequest,
SfsStoreRequestInputBase, AssembleIssueRequestEditInput, AssembleIssueRequestDetail, AssembleIssueRequestDetailDTO, AssembleIssueRequestDTO,
SfsStoreRequestInputBase, AssembleIssueRequestEditInput, AssembleIssueRequestDetail,
AssembleIssueRequestDetailDTO,
SfsStoreRequestInputBase, AssembleIssueRequestImportInput>, SfsStoreRequestInputBase, AssembleIssueRequestImportInput>,
IAssembleIssueRequestAppService IAssembleIssueRequestAppService
{ {
private readonly IAssembleIssueRequestManager _assembleIssueRequestManager; private readonly IAssembleIssueRequestManager _assembleIssueRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineAppService _productionLineAppService;
private readonly IAssembleIssueJobAppService _assembleIssueJobAppService; private readonly IAssembleIssueJobAppService _assembleIssueJobAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly ITransactionTypeAppService _transactionTypeAppService;
public AssembleIssueRequestAppService( public AssembleIssueRequestAppService(
IAssembleIssueRequestRepository repository, IAssembleIssueRequestRepository repository,
IAssembleIssueRequestManager assembleIssueRequestManager, IAssembleIssueRequestManager assembleIssueRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService, ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService, IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService, IAssembleIssueJobAppService assembleIssueJobAppService) ITransactionTypeAppService transactionTypeAppService,
IAssembleIssueJobAppService assembleIssueJobAppService)
: base(repository, assembleIssueRequestManager) : base(repository, assembleIssueRequestManager)
{ {
_assembleIssueRequestManager = assembleIssueRequestManager; _assembleIssueRequestManager = assembleIssueRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService; _productionLineAppService = productionLineAppService;
_transactionTypeAppService = transactionTypeAppService; _transactionTypeAppService = transactionTypeAppService;
_assembleIssueJobAppService = assembleIssueJobAppService; _assembleIssueJobAppService = assembleIssueJobAppService;
} }
@ -63,6 +58,61 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
return await base.HandleAsync(id).ConfigureAwait(false); return await base.HandleAsync(id).ConfigureAwait(false);
} }
public override async Task<AssembleIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _assembleIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var assembleIssueJobDto in list)
{
if (assembleIssueJobDto.JobStatus == EnumJobStatus.Open ||
assembleIssueJobDto.JobStatus == EnumJobStatus.Partial ||
assembleIssueJobDto.JobStatus == EnumJobStatus.Doing ||
assembleIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _assembleIssueJobAppService.CancelAsync(assembleIssueJobDto.Id).ConfigureAwait(false);
}
}
}
if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<AssembleIssueRequest, AssembleIssueRequestDTO>(request);
}
public override async Task<AssembleIssueRequestDTO> CompleteAsync(Guid id)
{
var assembleIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (assembleIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
assembleIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
assembleIssueRequest.RequestStatus == EnumRequestStatus.New)
{
assembleIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
throw new UserFriendlyException($"【{assembleIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
await _assembleIssueJobAppService.CompleteByRequestNumberAsync(assembleIssueRequest.Number)
.ConfigureAwait(false);
return ObjectMapper.Map<AssembleIssueRequest, AssembleIssueRequestDTO>(await _repository
.UpdateAsync(assembleIssueRequest)
.ConfigureAwait(false));
}
[HttpPost("")] [HttpPost("")]
public override async Task<AssembleIssueRequestDTO> CreateAsync(AssembleIssueRequestEditInput input) public override async Task<AssembleIssueRequestDTO> CreateAsync(AssembleIssueRequestEditInput input)
{ {
@ -81,7 +131,8 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
CheckLocation(toLocationDto, detailInput.ToLocationCode); CheckLocation(toLocationDto, detailInput.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false); var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detailInput.ItemCode); CheckItemBasic(itemBasicDto, detailInput.ItemCode);
var productionLineDto = await _productionLineAppService.GetByLocationCodeAsync(detailInput.ToLocationCode).ConfigureAwait(false); var productionLineDto = await _productionLineAppService.GetByLocationCodeAsync(detailInput.ToLocationCode)
.ConfigureAwait(false);
CheckProductionLine(productionLineDto, detailInput.ProdLine); CheckProductionLine(productionLineDto, detailInput.ProdLine);
detailInput.ProdLine = productionLineDto.Code; detailInput.ProdLine = productionLineDto.Code;
@ -100,7 +151,7 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
//因为是刚创建的 所以发料数一定是0 //因为是刚创建的 所以发料数一定是0
detailInput.IssuedQty = 0; detailInput.IssuedQty = 0;
detailInput.RecommendType = EnumRecommendType.SEMI; detailInput.RecommendType = EnumRecommendType.KITTING;
} }
await SetRequestAutoPropertiesAsync(input).ConfigureAwait(false); await SetRequestAutoPropertiesAsync(input).ConfigureAwait(false);
@ -113,23 +164,6 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
return dto; return dto;
} }
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(AssembleIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
[HttpPost("create-and-handle")] [HttpPost("create-and-handle")]
public async Task<AssembleIssueRequestDTO> CreateAndHandleAsync(AssembleIssueRequestEditInput input) public async Task<AssembleIssueRequestDTO> CreateAndHandleAsync(AssembleIssueRequestEditInput input)
{ {
@ -140,36 +174,17 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
return assembleIssueRequestDto; return assembleIssueRequestDto;
} }
public override async Task<AssembleIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _assembleIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var assembleIssueJobDto in list)
{
if (assembleIssueJobDto.JobStatus == EnumJobStatus.Open ||
assembleIssueJobDto.JobStatus == EnumJobStatus.Partial ||
assembleIssueJobDto.JobStatus == EnumJobStatus.Doing ||
assembleIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _assembleIssueJobAppService.CancelAsync(assembleIssueJobDto.Id).ConfigureAwait(false);
}
}
}
return await base.CancelAsync(id).ConfigureAwait(false);
}
[HttpPost("UpdateStatusCompleted")] [HttpPost("UpdateStatusCompleted")]
public async Task UpdateStatusCompletedAsync(string number) public async Task UpdateStatusCompletedAsync(string number)
{ {
var assembleIssueRequest = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false); var assembleIssueRequest = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
await UpdateAssembleIssueRequestDetailQtyAsync(assembleIssueRequest, new EditableList<AssembleIssueJobDTO>()).ConfigureAwait(false); await UpdateAssembleIssueRequestDetailQtyAsync(assembleIssueRequest, new EditableList<AssembleIssueJobDTO>())
.ConfigureAwait(false);
var assembleIssueJobDtos = await _assembleIssueJobAppService.GetByRequestNumberAsync(assembleIssueRequest.Number).ConfigureAwait(false); var assembleIssueJobDtos = await _assembleIssueJobAppService
.GetByRequestNumberAsync(assembleIssueRequest.Number)
.ConfigureAwait(false);
if (assembleIssueJobDtos.Any(p => if (assembleIssueJobDtos.Any(p =>
p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing || p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing ||
@ -177,26 +192,61 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
{ {
return; return;
} }
else
{
bool flag = true;
foreach (var detail in assembleIssueRequest.Details) foreach (var detail in assembleIssueRequest.Details)
{ {
if (detail.Qty >= detail.IssuedQty) if (detail.Qty >= detail.IssuedQty)
{ {
flag = false;
return; return;
} }
} }
if (flag)
{
CheckStatus(EnumRequestStatus.Completed, assembleIssueRequest.RequestStatus); CheckStatus(EnumRequestStatus.Completed, assembleIssueRequest.RequestStatus);
assembleIssueRequest.RequestStatus = EnumRequestStatus.Completed; assembleIssueRequest.RequestStatus = EnumRequestStatus.Completed;
await _repository.UpdateAsync(assembleIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(assembleIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")]
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos =
await _assembleIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
return "无任务生成,请检查库存";
}
return "无任务生成,请检查库存";
} }
#region 私有
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(AssembleIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
} }
/// <summary> /// <summary>
@ -209,7 +259,8 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
List<AssembleIssueJobDTO> addAssembleIssueJobDtos) List<AssembleIssueJobDTO> addAssembleIssueJobDtos)
{ {
//原有任务 //原有任务
var existAssembleIssueJobDtos = await _assembleIssueJobAppService.GetByRequestNumberAsync(assembleIssueRequest.Number) var existAssembleIssueJobDtos = await _assembleIssueJobAppService
.GetByRequestNumberAsync(assembleIssueRequest.Number)
.ConfigureAwait(false); .ConfigureAwait(false);
//新增的任务和已有的任务总和 //新增的任务和已有的任务总和
@ -247,32 +298,7 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
await _repository.UpdateAsync(assembleIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(assembleIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")] #endregion
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos = await _assembleIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
else
{
return "无任务生成,请检查库存";
}
}
else
{
return "无任务生成,请检查库存";
}
}
#region 校验 #region 校验
@ -297,32 +323,32 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
case EnumRequestStatus.Handling: case EnumRequestStatus.Handling:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Agreed, EnumRequestStatus.Partial, EnumRequestStatus.Agreed, EnumRequestStatus.Partial
}; };
break; break;
case EnumRequestStatus.Completed: case EnumRequestStatus.Completed:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Handling, EnumRequestStatus.Partial, EnumRequestStatus.Handling, EnumRequestStatus.Partial
}; };
break; break;
case EnumRequestStatus.Cancelled: case EnumRequestStatus.Cancelled:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed, EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed
}; };
break; break;
case EnumRequestStatus.Abort: case EnumRequestStatus.Abort:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Handling, EnumRequestStatus.Partial, EnumRequestStatus.Handling, EnumRequestStatus.Partial
}; };
break; break;
case EnumRequestStatus.Partial: case EnumRequestStatus.Partial:
{ {
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Handling, EnumRequestStatus.Partial, EnumRequestStatus.Handling, EnumRequestStatus.Partial
}; };
break; break;
} }
@ -354,7 +380,8 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
if (locationDto.Type != EnumLocationType.WIP) if (locationDto.Type != EnumLocationType.WIP)
{ {
throw new UserFriendlyException($"库位代码【{locationCode}】不是【{EnumLocationType.WIP.GetDisplayName()}】类型"); throw new UserFriendlyException(
$"库位代码【{locationCode}】不是【{EnumLocationType.WIP.GetDisplayName()}】类型");
} }
} }
@ -367,4 +394,43 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase<Asse
} }
#endregion #endregion
#region 视觉使用
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
[HttpPost("get-uncompleted-request")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> pList)
{
var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
var list = await _repository.GetListAsync(p =>
p.RequestStatus != EnumRequestStatus.Completed && p.IssueRequestType == EnumIssueRequestType.Vision)
.ConfigureAwait(false);
foreach (var itm in list)
{
var query = from detail in itm.Details
join citm in pList on new
{
detail.ItemCode,
locCode = detail.ToLocationCode,
areaCode = detail.PositionCode
} equals
new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode }
select new UnCompletedRequestDto
{
ItemCode = detail.ItemCode,
LocCode = detail.ToLocationCode,
PositionCode = detail.PositionCode
};
returnList.AddRange(query.ToList());
}
return returnList;
}
#endregion
} }

259
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/CoatingIssueRequests/CoatingIssueRequestAppService.cs

@ -9,6 +9,7 @@ using NUglify.Helpers;
using Volo.Abp; using Volo.Abp;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -20,40 +21,34 @@ namespace Win_in.Sfs.Wms.Store.Application;
/// </summary> /// </summary>
[Authorize] [Authorize]
[Route($"{StoreConsts.RootPath}coating-issue-request")] [Route($"{StoreConsts.RootPath}coating-issue-request")]
public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<CoatingIssueRequest, CoatingIssueRequestDTO, public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<CoatingIssueRequest,
SfsStoreRequestInputBase, CoatingIssueRequestEditInput, CoatingIssueRequestDetail, CoatingIssueRequestDetailDTO, CoatingIssueRequestDTO,
SfsStoreRequestInputBase, CoatingIssueRequestEditInput, CoatingIssueRequestDetail,
CoatingIssueRequestDetailDTO,
SfsStoreRequestInputBase, CoatingIssueRequestImportInput>, SfsStoreRequestInputBase, CoatingIssueRequestImportInput>,
ICoatingIssueRequestAppService ICoatingIssueRequestAppService
{ {
private readonly ICoatingIssueRequestManager _coatingIssueRequestManager; private readonly ICoatingIssueRequestManager _coatingIssueRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineAppService _productionLineAppService;
private readonly ICoatingIssueJobAppService _coatingIssueJobAppService; private readonly ICoatingIssueJobAppService _coatingIssueJobAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly ITransactionTypeAppService _transactionTypeAppService;
public CoatingIssueRequestAppService( public CoatingIssueRequestAppService(
ICoatingIssueRequestRepository repository, ICoatingIssueRequestRepository repository,
ICoatingIssueRequestManager coatingIssueRequestManager, ICoatingIssueRequestManager coatingIssueRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService, ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService, IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService, ICoatingIssueJobAppService coatingIssueJobAppService) ITransactionTypeAppService transactionTypeAppService,
ICoatingIssueJobAppService coatingIssueJobAppService)
: base(repository, coatingIssueRequestManager) : base(repository, coatingIssueRequestManager)
{ {
_coatingIssueRequestManager = coatingIssueRequestManager; _coatingIssueRequestManager = coatingIssueRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService; _productionLineAppService = productionLineAppService;
_transactionTypeAppService = transactionTypeAppService; _transactionTypeAppService = transactionTypeAppService;
_coatingIssueJobAppService = coatingIssueJobAppService; _coatingIssueJobAppService = coatingIssueJobAppService;
} }
@ -63,6 +58,61 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
return await base.HandleAsync(id).ConfigureAwait(false); return await base.HandleAsync(id).ConfigureAwait(false);
} }
public override async Task<CoatingIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _coatingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var coatingIssueJobDto in list)
{
if (coatingIssueJobDto.JobStatus == EnumJobStatus.Open ||
coatingIssueJobDto.JobStatus == EnumJobStatus.Partial ||
coatingIssueJobDto.JobStatus == EnumJobStatus.Doing ||
coatingIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _coatingIssueJobAppService.CancelAsync(coatingIssueJobDto.Id).ConfigureAwait(false);
}
}
}
if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<CoatingIssueRequest, CoatingIssueRequestDTO>(request);
}
public override async Task<CoatingIssueRequestDTO> CompleteAsync(Guid id)
{
var coatingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (coatingIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
coatingIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
coatingIssueRequest.RequestStatus == EnumRequestStatus.New)
{
coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
throw new UserFriendlyException($"【{coatingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
await _coatingIssueJobAppService.CompleteByRequestNumberAsync(coatingIssueRequest.Number)
.ConfigureAwait(false);
return ObjectMapper.Map<CoatingIssueRequest, CoatingIssueRequestDTO>(await _repository
.UpdateAsync(coatingIssueRequest)
.ConfigureAwait(false));
}
[HttpPost("")] [HttpPost("")]
public override async Task<CoatingIssueRequestDTO> CreateAsync(CoatingIssueRequestEditInput input) public override async Task<CoatingIssueRequestDTO> CreateAsync(CoatingIssueRequestEditInput input)
{ {
@ -101,7 +151,7 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
//因为是刚创建的 所以发料数一定是0 //因为是刚创建的 所以发料数一定是0
detailInput.IssuedQty = 0; detailInput.IssuedQty = 0;
detailInput.RecommendType = EnumRecommendType.SEMI; detailInput.RecommendType = EnumRecommendType.KITTING;
} }
await SetRequestAutoPropertiesAsync(input).ConfigureAwait(false); await SetRequestAutoPropertiesAsync(input).ConfigureAwait(false);
@ -114,23 +164,6 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
return dto; return dto;
} }
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(CoatingIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
[HttpPost("create-and-handle")] [HttpPost("create-and-handle")]
public async Task<CoatingIssueRequestDTO> CreateAndHandleAsync(CoatingIssueRequestEditInput input) public async Task<CoatingIssueRequestDTO> CreateAndHandleAsync(CoatingIssueRequestEditInput input)
{ {
@ -141,39 +174,6 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
return coatingIssueRequestDto; return coatingIssueRequestDto;
} }
public override async Task<CoatingIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _coatingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var coatingIssueJobDto in list)
{
if (coatingIssueJobDto.JobStatus == EnumJobStatus.Open ||
coatingIssueJobDto.JobStatus == EnumJobStatus.Partial ||
coatingIssueJobDto.JobStatus == EnumJobStatus.Doing ||
coatingIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _coatingIssueJobAppService.CancelAsync(coatingIssueJobDto.Id).ConfigureAwait(false);
}
}
}
if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<CoatingIssueRequest, CoatingIssueRequestDTO>(request);
}
[HttpPost("UpdateStatusCompleted")] [HttpPost("UpdateStatusCompleted")]
public async Task UpdateStatusCompletedAsync(string number) public async Task UpdateStatusCompletedAsync(string number)
{ {
@ -182,7 +182,8 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
await UpdateCoatingIssueRequestDetailQtyAsync(coatingIssueRequest, new EditableList<CoatingIssueJobDTO>()) await UpdateCoatingIssueRequestDetailQtyAsync(coatingIssueRequest, new EditableList<CoatingIssueJobDTO>())
.ConfigureAwait(false); .ConfigureAwait(false);
var coatingIssueJobDtos = await _coatingIssueJobAppService.GetByRequestNumberAsync(coatingIssueRequest.Number) var coatingIssueJobDtos = await _coatingIssueJobAppService
.GetByRequestNumberAsync(coatingIssueRequest.Number)
.ConfigureAwait(false); .ConfigureAwait(false);
if (coatingIssueJobDtos.Any(p => if (coatingIssueJobDtos.Any(p =>
@ -192,23 +193,60 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
return; return;
} }
var flag = true;
foreach (var detail in coatingIssueRequest.Details) foreach (var detail in coatingIssueRequest.Details)
{ {
if (detail.Qty >= detail.IssuedQty) if (detail.Qty >= detail.IssuedQty)
{ {
flag = false;
return; return;
} }
} }
if (flag)
{
CheckStatus(EnumRequestStatus.Completed, coatingIssueRequest.RequestStatus); CheckStatus(EnumRequestStatus.Completed, coatingIssueRequest.RequestStatus);
coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed; coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")]
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos =
await _coatingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
return "无任务生成,请检查库存";
}
return "无任务生成,请检查库存";
}
#region 私有
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(CoatingIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
} }
/// <summary> /// <summary>
@ -260,49 +298,7 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")] #endregion
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos =
await _coatingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
return "无任务生成,请检查库存";
}
return "无任务生成,请检查库存";
}
public override async Task<CoatingIssueRequestDTO> CompleteAsync(Guid id)
{
var coatingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (coatingIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
coatingIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
coatingIssueRequest.RequestStatus == EnumRequestStatus.New)
{
coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
throw new UserFriendlyException($"【{coatingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
await _coatingIssueJobAppService.CompleteByRequestNumberAsync(coatingIssueRequest.Number).ConfigureAwait(false);
return ObjectMapper.Map<CoatingIssueRequest, CoatingIssueRequestDTO>(await _repository.UpdateAsync(coatingIssueRequest)
.ConfigureAwait(false));
}
#region 校验 #region 校验
@ -398,4 +394,43 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase<Coati
} }
#endregion #endregion
#region 视觉使用
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
[HttpPost("get-uncompleted-request")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> pList)
{
var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
var list = await _repository.GetListAsync(p =>
p.RequestStatus != EnumRequestStatus.Completed && p.IssueRequestType == EnumIssueRequestType.Vision)
.ConfigureAwait(false);
foreach (var itm in list)
{
var query = from detail in itm.Details
join citm in pList on new
{
detail.ItemCode,
locCode = detail.ToLocationCode,
areaCode = detail.PositionCode
} equals
new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode }
select new UnCompletedRequestDto
{
ItemCode = detail.ItemCode,
LocCode = detail.ToLocationCode,
PositionCode = detail.PositionCode
};
returnList.AddRange(query.ToList());
}
return returnList;
}
#endregion
} }

233
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs

@ -21,40 +21,34 @@ namespace Win_in.Sfs.Wms.Store.Application;
/// </summary> /// </summary>
[Authorize] [Authorize]
[Route($"{StoreConsts.RootPath}injection-issue-request")] [Route($"{StoreConsts.RootPath}injection-issue-request")]
public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest, InjectionIssueRequestDTO, public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail, InjectionIssueRequestDetailDTO, InjectionIssueRequestDTO,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail,
InjectionIssueRequestDetailDTO,
SfsStoreRequestInputBase, InjectionIssueRequestImportInput>, SfsStoreRequestInputBase, InjectionIssueRequestImportInput>,
IInjectionIssueRequestAppService IInjectionIssueRequestAppService
{ {
private readonly IInjectionIssueRequestManager _injectionIssueRequestManager; private readonly IInjectionIssueRequestManager _injectionIssueRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineAppService _productionLineAppService;
private readonly IInjectionIssueJobAppService _injectionIssueJobAppService; private readonly IInjectionIssueJobAppService _injectionIssueJobAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly ITransactionTypeAppService _transactionTypeAppService;
public InjectionIssueRequestAppService( public InjectionIssueRequestAppService(
IInjectionIssueRequestRepository repository, IInjectionIssueRequestRepository repository,
IInjectionIssueRequestManager injectionIssueRequestManager, IInjectionIssueRequestManager injectionIssueRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService, ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService, IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService, IInjectionIssueJobAppService injectionIssueJobAppService) ITransactionTypeAppService transactionTypeAppService,
IInjectionIssueJobAppService injectionIssueJobAppService)
: base(repository, injectionIssueRequestManager) : base(repository, injectionIssueRequestManager)
{ {
_injectionIssueRequestManager = injectionIssueRequestManager; _injectionIssueRequestManager = injectionIssueRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService; _productionLineAppService = productionLineAppService;
_transactionTypeAppService = transactionTypeAppService; _transactionTypeAppService = transactionTypeAppService;
_injectionIssueJobAppService = injectionIssueJobAppService; _injectionIssueJobAppService = injectionIssueJobAppService;
} }
@ -64,6 +58,61 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
return await base.HandleAsync(id).ConfigureAwait(false); return await base.HandleAsync(id).ConfigureAwait(false);
} }
public override async Task<InjectionIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _injectionIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var injectionIssueJobDto in list)
{
if (injectionIssueJobDto.JobStatus == EnumJobStatus.Open ||
injectionIssueJobDto.JobStatus == EnumJobStatus.Partial ||
injectionIssueJobDto.JobStatus == EnumJobStatus.Doing ||
injectionIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _injectionIssueJobAppService.CancelAsync(injectionIssueJobDto.Id).ConfigureAwait(false);
}
}
}
if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<InjectionIssueRequest, InjectionIssueRequestDTO>(request);
}
public override async Task<InjectionIssueRequestDTO> CompleteAsync(Guid id)
{
var injectionIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (injectionIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
injectionIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
injectionIssueRequest.RequestStatus == EnumRequestStatus.New)
{
injectionIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
throw new UserFriendlyException($"【{injectionIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
await _injectionIssueJobAppService.CompleteByRequestNumberAsync(injectionIssueRequest.Number)
.ConfigureAwait(false);
return ObjectMapper.Map<InjectionIssueRequest, InjectionIssueRequestDTO>(await _repository
.UpdateAsync(injectionIssueRequest)
.ConfigureAwait(false));
}
[HttpPost("")] [HttpPost("")]
public override async Task<InjectionIssueRequestDTO> CreateAsync(InjectionIssueRequestEditInput input) public override async Task<InjectionIssueRequestDTO> CreateAsync(InjectionIssueRequestEditInput input)
{ {
@ -115,23 +164,6 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
return dto; return dto;
} }
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(InjectionIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
[HttpPost("create-and-handle")] [HttpPost("create-and-handle")]
public async Task<InjectionIssueRequestDTO> CreateAndHandleAsync(InjectionIssueRequestEditInput input) public async Task<InjectionIssueRequestDTO> CreateAndHandleAsync(InjectionIssueRequestEditInput input)
{ {
@ -142,39 +174,6 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
return injectionIssueRequestDto; return injectionIssueRequestDto;
} }
public override async Task<InjectionIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _injectionIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var injectionIssueJobDto in list)
{
if (injectionIssueJobDto.JobStatus == EnumJobStatus.Open ||
injectionIssueJobDto.JobStatus == EnumJobStatus.Partial ||
injectionIssueJobDto.JobStatus == EnumJobStatus.Doing ||
injectionIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _injectionIssueJobAppService.CancelAsync(injectionIssueJobDto.Id).ConfigureAwait(false);
}
}
}
if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<InjectionIssueRequest, InjectionIssueRequestDTO>(request);
}
[HttpPost("UpdateStatusCompleted")] [HttpPost("UpdateStatusCompleted")]
public async Task UpdateStatusCompletedAsync(string number) public async Task UpdateStatusCompletedAsync(string number)
{ {
@ -183,7 +182,8 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
await UpdateInjectionIssueRequestDetailQtyAsync(injectionIssueRequest, new EditableList<InjectionIssueJobDTO>()) await UpdateInjectionIssueRequestDetailQtyAsync(injectionIssueRequest, new EditableList<InjectionIssueJobDTO>())
.ConfigureAwait(false); .ConfigureAwait(false);
var injectionIssueJobDtos = await _injectionIssueJobAppService.GetByRequestNumberAsync(injectionIssueRequest.Number) var injectionIssueJobDtos = await _injectionIssueJobAppService
.GetByRequestNumberAsync(injectionIssueRequest.Number)
.ConfigureAwait(false); .ConfigureAwait(false);
if (injectionIssueJobDtos.Any(p => if (injectionIssueJobDtos.Any(p =>
@ -193,23 +193,60 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
return; return;
} }
var flag = true;
foreach (var detail in injectionIssueRequest.Details) foreach (var detail in injectionIssueRequest.Details)
{ {
if (detail.Qty >= detail.IssuedQty) if (detail.Qty >= detail.IssuedQty)
{ {
flag = false;
return; return;
} }
} }
if (flag)
{
CheckStatus(EnumRequestStatus.Completed, injectionIssueRequest.RequestStatus); CheckStatus(EnumRequestStatus.Completed, injectionIssueRequest.RequestStatus);
injectionIssueRequest.RequestStatus = EnumRequestStatus.Completed; injectionIssueRequest.RequestStatus = EnumRequestStatus.Completed;
await _repository.UpdateAsync(injectionIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(injectionIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")]
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos =
await _injectionIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
return "无任务生成,请检查库存";
}
return "无任务生成,请检查库存";
}
#region 私有
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(InjectionIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
} }
/// <summary> /// <summary>
@ -261,49 +298,7 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
await _repository.UpdateAsync(injectionIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(injectionIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")] #endregion
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos =
await _injectionIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
return "无任务生成,请检查库存";
}
return "无任务生成,请检查库存";
}
public override async Task<InjectionIssueRequestDTO> CompleteAsync(Guid id)
{
var injectionIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (injectionIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
injectionIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
injectionIssueRequest.RequestStatus == EnumRequestStatus.New)
{
injectionIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
throw new UserFriendlyException($"【{injectionIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
await _injectionIssueJobAppService.CompleteByRequestNumberAsync(injectionIssueRequest.Number).ConfigureAwait(false);
return ObjectMapper.Map<InjectionIssueRequest, InjectionIssueRequestDTO>(await _repository.UpdateAsync(injectionIssueRequest)
.ConfigureAwait(false));
}
#region 校验 #region 校验
@ -398,12 +393,16 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
} }
} }
#endregion
#region 视觉使用
/// <summary> /// <summary>
/// 获取已完成的叫料单数量 /// 获取已完成的叫料单数量
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost("get-uncompleted-request")] [HttpPost("get-uncompleted-request")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list) public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> pList)
{ {
var returnList = new List<UnCompletedRequestDto>(); var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询 //枚举类型查不到改成SQL查询
@ -413,18 +412,14 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
foreach (var itm in list) foreach (var itm in list)
{ {
var query = from detail in itm.Details var query = from detail in itm.Details
join citm in p_list on new join citm in pList on new
{ {
detail.ItemCode, detail.ItemCode, locCode = detail.ToLocationCode, areaCode = detail.PositionCode
locCode = detail.ToLocationCode,
areaCode = detail.PositionCode
} equals } equals
new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode } new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode }
select new UnCompletedRequestDto select new UnCompletedRequestDto
{ {
ItemCode = detail.ItemCode, ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode
LocCode = detail.ToLocationCode,
PositionCode = detail.PositionCode
}; };
returnList.AddRange(query.ToList()); returnList.AddRange(query.ToList());

207
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs

@ -26,34 +26,26 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
IKittingIssueRequestAppService IKittingIssueRequestAppService
{ {
private readonly IKittingIssueRequestManager _kittingIssueRequestManager; private readonly IKittingIssueRequestManager _kittingIssueRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService; private readonly IProductionLineAppService _productionLineAppService;
private readonly IKittingIssueJobAppService _kittingIssueJobAppService; private readonly IKittingIssueJobAppService _kittingIssueJobAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly ITransactionTypeAppService _transactionTypeAppService;
public KittingIssueRequestAppService( public KittingIssueRequestAppService(
IKittingIssueRequestRepository repository, IKittingIssueRequestRepository repository,
IKittingIssueRequestManager kittingIssueRequestManager, IKittingIssueRequestManager kittingIssueRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService, ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService, IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService, IKittingIssueJobAppService kittingIssueJobAppService) ITransactionTypeAppService transactionTypeAppService,
IKittingIssueJobAppService kittingIssueJobAppService)
: base(repository, kittingIssueRequestManager) : base(repository, kittingIssueRequestManager)
{ {
_kittingIssueRequestManager = kittingIssueRequestManager; _kittingIssueRequestManager = kittingIssueRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_productionLineAppService = productionLineAppService; _productionLineAppService = productionLineAppService;
_transactionTypeAppService = transactionTypeAppService; _transactionTypeAppService = transactionTypeAppService;
_kittingIssueJobAppService = kittingIssueJobAppService; _kittingIssueJobAppService = kittingIssueJobAppService;
} }
@ -63,6 +55,60 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
return await base.HandleAsync(id).ConfigureAwait(false); return await base.HandleAsync(id).ConfigureAwait(false);
} }
public override async Task<KittingIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _kittingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var kittingIssueJobDto in list)
{
if (kittingIssueJobDto.JobStatus == EnumJobStatus.Open ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Partial ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Doing ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _kittingIssueJobAppService.CancelAsync(kittingIssueJobDto.Id).ConfigureAwait(false);
}
}
}
if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<KittingIssueRequest, KittingIssueRequestDTO>(request);
}
public override async Task<KittingIssueRequestDTO> CompleteAsync(Guid id)
{
var kittingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (kittingIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
kittingIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
kittingIssueRequest.RequestStatus == EnumRequestStatus.New)
{
kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
throw new UserFriendlyException($"【{kittingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
await _kittingIssueJobAppService.CompleteByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false);
return ObjectMapper.Map<KittingIssueRequest, KittingIssueRequestDTO>(await _repository
.UpdateAsync(kittingIssueRequest)
.ConfigureAwait(false));
}
[HttpPost("")] [HttpPost("")]
public override async Task<KittingIssueRequestDTO> CreateAsync(KittingIssueRequestEditInput input) public override async Task<KittingIssueRequestDTO> CreateAsync(KittingIssueRequestEditInput input)
{ {
@ -114,23 +160,6 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
return dto; return dto;
} }
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(KittingIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
[HttpPost("create-and-handle")] [HttpPost("create-and-handle")]
public async Task<KittingIssueRequestDTO> CreateAndHandleAsync(KittingIssueRequestEditInput input) public async Task<KittingIssueRequestDTO> CreateAndHandleAsync(KittingIssueRequestEditInput input)
{ {
@ -141,39 +170,6 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
return kittingIssueRequestDto; return kittingIssueRequestDto;
} }
public override async Task<KittingIssueRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _kittingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var kittingIssueJobDto in list)
{
if (kittingIssueJobDto.JobStatus == EnumJobStatus.Open ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Partial ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Doing ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _kittingIssueJobAppService.CancelAsync(kittingIssueJobDto.Id).ConfigureAwait(false);
}
}
}
if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<KittingIssueRequest, KittingIssueRequestDTO>(request);
}
[HttpPost("UpdateStatusCompleted")] [HttpPost("UpdateStatusCompleted")]
public async Task UpdateStatusCompletedAsync(string number) public async Task UpdateStatusCompletedAsync(string number)
{ {
@ -192,23 +188,60 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
return; return;
} }
var flag = true;
foreach (var detail in kittingIssueRequest.Details) foreach (var detail in kittingIssueRequest.Details)
{ {
if (detail.Qty >= detail.IssuedQty) if (detail.Qty >= detail.IssuedQty)
{ {
flag = false;
return; return;
} }
} }
if (flag)
{
CheckStatus(EnumRequestStatus.Completed, kittingIssueRequest.RequestStatus); CheckStatus(EnumRequestStatus.Completed, kittingIssueRequest.RequestStatus);
kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed; kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")]
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos =
await _kittingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
return "无任务生成,请检查库存";
}
return "无任务生成,请检查库存";
}
#region 私有
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(KittingIssueRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
} }
/// <summary> /// <summary>
@ -260,49 +293,7 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false);
} }
[HttpPost("IsHasNewJob")] #endregion
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{
var joblIssueJobDtos =
await _kittingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
var difference = jobNumberList.Except(jobNumber);
if (difference.Any())
{
var result = "已生成任务号";
difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
return "无任务生成,请检查库存";
}
return "无任务生成,请检查库存";
}
public override async Task<KittingIssueRequestDTO> CompleteAsync(Guid id)
{
var kittingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (kittingIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
kittingIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
kittingIssueRequest.RequestStatus == EnumRequestStatus.New)
{
kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
throw new UserFriendlyException($"【{kittingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
await _kittingIssueJobAppService.CompleteByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false);
return ObjectMapper.Map<KittingIssueRequest, KittingIssueRequestDTO>(await _repository.UpdateAsync(kittingIssueRequest)
.ConfigureAwait(false));
}
#region 校验 #region 校验

Loading…
Cancel
Save