Browse Source

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

dev_DY_CC
郑勃旭 6 months ago
parent
commit
2d82e08c0f
  1. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/DTOs/UnplannedIssueRequestDTO.cs
  2. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs
  3. 77
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestImportInput.cs
  4. 78
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs
  5. 293
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs
  6. 54
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs
  7. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/UnplannedIssueRequests/UnplannedIssueRequest.cs
  8. 32
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/DTOs/UnplannedIssueRequestDTO.cs

@ -40,6 +40,10 @@ public class UnplannedIssueRequestDTO : SfsStoreRequestDTOBase<UnplannedIssueReq
[Display(Name = "OA单据号")] [Display(Name = "OA单据号")]
public string OANumber { get; set; } public string OANumber { get; set; }
} }
public class RetUnplannedIssueRequestDTO public class RetUnplannedIssueRequestDTO
{ {

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs

@ -93,7 +93,7 @@ public class UnplannedIssueRequestImportDto
/// </summary> /// </summary>
[Display(Name = "调出库位")] [Display(Name = "调出库位")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
public string LocationErpCode { get; set; } public string FromLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 专案 /// 专案
/// </summary> /// </summary>

77
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestImportInput.cs

@ -36,9 +36,10 @@ public class UnplannedIssueRequestImportInput : SfsStoreImportInputBase
/// <summary> /// <summary>
/// 调出库位 /// 调出库位
/// </summary> /// </summary>
[Display(Name = "调出库位")] [Display(Name = "储位")]
[Required(ErrorMessage = "调出库位不能为空")] [Required(ErrorMessage = "储位不能为空")]
public string LocationErpCode { get; set; }
public string FromErpLocationCode { get; set; }
/// <summary> /// <summary>
/// 专案 /// 专案
@ -91,76 +92,6 @@ public class UnplannedIssueRequestImportInput : SfsStoreImportInputBase
///// <summary>
///// 部门代码
///// </summary>
//[Display(Name = "部门代码")]
//public string DeptCode { get; set; }
///// <summary>
///// 部门名称
///// </summary>
//[Display(Name = "部门名称")]
//public string DeptName { get; set; }
///// <summary>
///// 料号
///// </summary>
//[Display(Name = "料号")]
//[Required(ErrorMessage = "{0}是必填项")]
//public string ItemCode { get; set; }
///// <summary>
///// 数量
///// </summary>
//[Display(Name = "数量")]
//[Required(ErrorMessage = "{0}是必填项")]
//public decimal Qty { get; set; }
///// <summary>
///// 单位
///// </summary>
//[Display(Name = "单位")]
//public string Uom { get; set; }
///// <summary>
///// 调出库位
///// </summary>
//[Display(Name = "调出库位")]
//[Required(ErrorMessage = "{0}是必填项")]
//public string LocationErpCode { get; set; }
///// <summary>
///// 专案
///// </summary>
//[Display(Name = "专案")]
//[Required(ErrorMessage = "{0}是必填项")]
//public string CaseCode { get; set; }
///// <summary>
///// 项目分类
///// </summary>
//[Display(Name = "项目分类")]
//[Required(ErrorMessage = "{0}是必填项")]
//public string ProjCapacityCode { get; set; }
///// <summary>
///// 次交易码
///// </summary>
//[Display(Name = "次交易码")]
//[Required(ErrorMessage = "{0}是必填项")]
//public string OnceBusiCode { get; set; }
///// <summary>
///// 说明
///// </summary>
//[Display(Name = "说明")]
//public string Explain { get; set; }

78
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs

@ -89,10 +89,20 @@ public class UnplannedIssueJobAppService
{ {
List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>(); List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>();
var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false); var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
if (useBalancesOut.Count == 0)
{
throw new UserFriendlyException($"请求单号{requestDto.Number},无推荐库位请检查是否又库存!");
}
await _unplannedIssueJobManager.AddManyAsync(jobs).ConfigureAwait(false); await _unplannedIssueJobManager.AddManyAsync(jobs).ConfigureAwait(false);
//await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false); //await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false);
var first = jobs.FirstOrDefault(); var first = jobs.FirstOrDefault();
var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false); var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
foreach (var itm in outEditInputs) foreach (var itm in outEditInputs)
{ {
itm.JobNumber = first.Number; itm.JobNumber = first.Number;
@ -114,9 +124,11 @@ public class UnplannedIssueJobAppService
private async Task<List<BalanceDTO>> DeductInventory(List<BalanceDTO> inventory, decimal quantityToDeduct, EnumLocationType enumLocationType) private async Task<Tuple<List<BalanceDTO>,List<BalanceDTO>>> DeductInventory(List<BalanceDTO> inventory, decimal quantityToDeduct, EnumLocationType enumLocationType)
{ {
List<BalanceDTO> balanceDTOs = new List<BalanceDTO>(); List<BalanceDTO> balanceDTOs = new List<BalanceDTO>();
List<BalanceDTO> unbalanceDTOs = new List<BalanceDTO>();
decimal totalDeducted = 0; decimal totalDeducted = 0;
foreach (var item in inventory) foreach (var item in inventory)
@ -128,16 +140,25 @@ public class UnplannedIssueJobAppService
{ {
var locationDto = await _locationAppService.GetByCodeAsync(item.LocationCode).ConfigureAwait(false); var locationDto = await _locationAppService.GetByCodeAsync(item.LocationCode).ConfigureAwait(false);
BalanceDTO dto = new BalanceDTO(); BalanceDTO dto = new BalanceDTO();
BalanceDTO undto = new BalanceDTO();
dto.InjectFrom(item);
dto.Qty = availableToDeduct;
balanceDTOs.Add(dto);
if (enumLocationType == EnumLocationType.RAW) if (enumLocationType == EnumLocationType.RAW)
{ {
dto.InjectFrom(item);
dto.Qty = availableToDeduct; undto.InjectFrom(item);
balanceDTOs.Add(dto); unbalanceDTOs.Add(dto);
} }
else else
{ {
dto.InjectFrom(item);
balanceDTOs.Add(dto); undto.InjectFrom(item);
undto.Qty = availableToDeduct;
unbalanceDTOs.Add(dto);
} }
} }
@ -147,8 +168,12 @@ public class UnplannedIssueJobAppService
break; break;
} }
} }
Tuple<List<BalanceDTO>, List<BalanceDTO>> tuple = new Tuple<List<BalanceDTO>, List<BalanceDTO>>( balanceDTOs,unbalanceDTOs);
// 返回实际扣减的库存数量 // 返回实际扣减的库存数量
return balanceDTOs; return tuple;
} }
@ -277,8 +302,9 @@ public class UnplannedIssueJobAppService
//实际要用库存 //实际要用库存
List<BalanceDTO> useBalances = new List<BalanceDTO>(); List<BalanceDTO> useBalances = new List<BalanceDTO>();
var returnlist=await DeductInventory(usableList, requestDtoDetail.Qty, locationDto.Type).ConfigureAwait(false); var returnlist=await DeductInventory(usableList, requestDtoDetail.Qty, locationDto.Type).ConfigureAwait(false);
useBalances.AddRange(returnlist);
useBalancesOut.AddRange(returnlist); useBalances.AddRange(returnlist.Item1);
useBalancesOut.AddRange(returnlist.Item2);
@ -307,9 +333,11 @@ public class UnplannedIssueJobAppService
// useBalancesOut.Add(balanceDto); // useBalancesOut.Add(balanceDto);
// } // }
//} //}
if (returnlist.Count == 0) if (returnlist.Item1.Count == 0)
{ {
Errors.Add($"{""+requestDto.Number+":"+requestDtoDetail.ItemCode + "" + requestDtoDetail.Qty.ToString()}"); _logger.LogError($"{"" + requestDto.Number + ":" + requestDtoDetail.ItemCode + "" + requestDtoDetail.Qty.ToString()}");
// Errors.Add($"{"非生产领料"+requestDto.Number+"零件号:"+requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty.ToString()}");
continue;
} }
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode))
{ {
@ -322,7 +350,6 @@ public class UnplannedIssueJobAppService
else else
{ {
job.UnplannedIssueType = EnumUnplannedIssueType.Wip; job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
} }
job.SetId(GuidGenerator.Create()); job.SetId(GuidGenerator.Create());
@ -397,13 +424,13 @@ public class UnplannedIssueJobAppService
jobs.Add(job); jobs.Add(job);
} }
} }
if (Errors.Count > 0) //if (Errors.Count > 0)
{ //{
foreach (var itm in Errors) // foreach (var itm in Errors)
{ // {
_logger.LogError(itm); // _logger.LogError(itm);
} // }
} //}
return jobs; return jobs;
} }
@ -474,6 +501,15 @@ public class UnplannedIssueJobAppService
public override async Task<UnplannedIssueJobDTO> CompleteAsync(Guid id, UnplannedIssueJobDTO dto) public override async Task<UnplannedIssueJobDTO> CompleteAsync(Guid id, UnplannedIssueJobDTO dto)
{ {
var job = await _repository.GetAsync(id).ConfigureAwait(false); var job = await _repository.GetAsync(id).ConfigureAwait(false);
var facQuery=job.FacDetails.GroupBy(p => new { p.ItemCode }).Select(p=>new {ItemCode= p.Key.ItemCode,Qty= p.Sum(itm=>itm.RecommendQty) });
var query=dto.Details.GroupBy(p => new { p.ItemCode }).Select(p => new { ItemCode = p.Key.ItemCode, Qty = p.Sum(itm => itm.HandledQty) });
var errorQuery = from itm in facQuery join itm1 in query on itm.ItemCode equals itm1.ItemCode where itm1.Qty < itm.Qty select itm.ItemCode ;
var errorList = errorQuery.ToList();
if (errorList.Count > 0)
{
throw new UserFriendlyException($"零件{string.Join(",",errorList)}实际数量大于推荐数量!");
}
var handleDto = new UnplannedIssueJobDTO(); var handleDto = new UnplannedIssueJobDTO();
//using (var uow = _unitOfWorkManager.Begin()) //using (var uow = _unitOfWorkManager.Begin())
//{ //{
@ -486,9 +522,7 @@ public class UnplannedIssueJobAppService
var handleEntity = ObjectMapper.Map<UnplannedIssueJobDTO, UnplannedIssueJob>(dto); var handleEntity = ObjectMapper.Map<UnplannedIssueJobDTO, UnplannedIssueJob>(dto);
var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false); var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false);
handleDto = ObjectMapper.Map<UnplannedIssueJob, UnplannedIssueJobDTO>(handleResult); handleDto = ObjectMapper.Map<UnplannedIssueJob, UnplannedIssueJobDTO>(handleResult);
await _expectOutAppService.RemoveAsync(dto.Number).ConfigureAwait(false); await _expectOutAppService.RemoveAsync(job.Number).ConfigureAwait(false);
handleResult.CompleteUserName = dto.Worker; handleResult.CompleteUserName = dto.Worker;
handleResult.JobStatus = EnumJobStatus.Done; handleResult.JobStatus = EnumJobStatus.Done;

293
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs

@ -4,6 +4,8 @@ using System.ComponentModel.DataAnnotations;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using DocumentFormat.OpenXml.Bibliography;
using DocumentFormat.OpenXml.Office2016.Excel;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -83,7 +85,6 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
entity.AutoHandle = true; entity.AutoHandle = true;
entity.DirectCreateNote = false; entity.DirectCreateNote = false;
await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false); await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity); var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity);
@ -96,52 +97,95 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
/// <param name="file"></param> /// <param name="file"></param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="UserFriendlyException"></exception> /// <exception cref="UserFriendlyException"></exception>
[HttpPost("import-dongyang")] //[HttpPost("import-dongyang")]
public async Task<IActionResult> ImportDYAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file) //public async Task<IActionResult> ImportDYAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file)
{ //{
// try
try // {
{ // using var ms = new MemoryStream();
// await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false);
// var inputFileBytes = ms.GetAllBytes();
// var importList = _excelService.Import<UnplannedIssueRequestImportDto>(inputFileBytes).ToList();
// await CreateByDYOAsync(importList).ConfigureAwait(false);
// List<UnplannedIssueRequestImportDto> errorsList = new List<UnplannedIssueRequestImportDto>();
// foreach (var itm in importList)
// {
// if (string.IsNullOrEmpty(itm.CaseCode)
// || string.IsNullOrEmpty(itm.ItemCode)
// || itm.Qty == 0
// || string.IsNullOrEmpty(itm.ProjCapacityCode)
// || string.IsNullOrEmpty(itm.FromLocationErpCode)
// )
// {
// itm.Explain = "此项错误";
// errorsList.Add(itm);
// }
// }
// if (errorsList.Count > 0)
// {
// var fileContent = _excelService.Export(errorsList);
// return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName = fileContent.FileDownloadName };
// }
// var fileContent1 = _excelService.Export(importList);
// return new JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName });
// }
// catch (Exception e)
// {
// throw new UserFriendlyException(e.Message);
// }
//}
//[HttpPost("import")]
//[Consumes("multipart/form-data")]
////[UnitOfWork]
//public override async Task<IActionResult> ImportAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file)
//{
// try
// {
// using var ms = new MemoryStream();
// await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false);
// var inputFileBytes = ms.GetAllBytes();
// var importList = _excelService.Import<UnplannedIssueRequestImportInput>(inputFileBytes).ToList();
// await CreateByDYOAsync(importList).ConfigureAwait(false);
// List<UnplannedIssueRequestImportInput> errorsList = new List<UnplannedIssueRequestImportInput>();
// foreach (var itm in importList)
// {
// if (string.IsNullOrEmpty(itm.CaseCode)
// || string.IsNullOrEmpty(itm.ItemCode)
// || itm.Qty == 0
// || string.IsNullOrEmpty(itm.ProjCapacityCode)
// || string.IsNullOrEmpty(itm.FromErpLocationCode)
// )
// {
// itm.Explain = "此项错误";
// errorsList.Add(itm);
// }
// }
// if (errorsList.Count > 0)
// {
// var fileContent = _excelService.Export(errorsList);
// return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName = fileContent.FileDownloadName };
// }
// var fileContent1 = _excelService.Export(importList);
// return new JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName });
// }
// catch (Exception e)
// {
// throw new UserFriendlyException(e.Message);
// }
//}
using var ms = new MemoryStream();
await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false);
var inputFileBytes = ms.GetAllBytes();
var importList = _excelService.Import<UnplannedIssueRequestImportDto>(inputFileBytes).ToList();
await CreateByDYOAsync(importList, EnumUnplannedIssueType.IMPORT).ConfigureAwait(false);
List<UnplannedIssueRequestImportDto> errorsList = new List<UnplannedIssueRequestImportDto>();
foreach (var itm in importList)
{
if (string.IsNullOrEmpty(itm.CaseCode)
|| string.IsNullOrEmpty(itm.ItemCode)
|| itm.Qty == 0
|| string.IsNullOrEmpty(itm.ProjCapacityCode)
|| string.IsNullOrEmpty(itm.LocationErpCode)
)
{
itm.Explain = "此项错误";
errorsList.Add(itm);
}
}
if (errorsList.Count > 0)
{
var fileContent = _excelService.Export(errorsList);
return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName =fileContent.FileDownloadName };
}
var fileContent1 = _excelService.Export(importList);
return new JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName });
}
catch (Exception e)
{
throw new UserFriendlyException(e.Message);
}
}
@ -189,7 +233,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
UnplannedIssueRequestDTO request = new UnplannedIssueRequestDTO(); UnplannedIssueRequestDTO request = new UnplannedIssueRequestDTO();
try try
{ {
return await CreateByDYOAsync(p_list, EnumUnplannedIssueType.OA, true).ConfigureAwait(false); return await CreateByDYOAsync(p_list, true).ConfigureAwait(false);
} }
catch (Exception e) catch (Exception e)
{ {
@ -202,8 +246,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
protected async Task<UnplannedIssueRequestDTO> CreateByDYOAsync(List<UnplannedIssueRequestImportDto> p_list, bool isAutoSubmit = false)
protected async Task<UnplannedIssueRequestDTO> CreateByDYOAsync(List<UnplannedIssueRequestImportDto> p_list, EnumUnplannedIssueType type, bool isAutoSubmit=false)
{ {
UnplannedIssueRequest request = new UnplannedIssueRequest(); UnplannedIssueRequest request = new UnplannedIssueRequest();
if (p_list.Count == 0) if (p_list.Count == 0)
@ -212,7 +255,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
} }
var first = p_list.FirstOrDefault(); var first = p_list.FirstOrDefault();
request.UnplannedIssueType = type;
request.SetId(GuidGenerator.Create()); request.SetId(GuidGenerator.Create());
request.AutoCompleteJob = false; request.AutoCompleteJob = false;
request.AutoSubmit = isAutoSubmit; request.AutoSubmit = isAutoSubmit;
@ -221,8 +264,60 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
request.DirectCreateNote = false; request.DirectCreateNote = false;
request.DeptCode = first.DeptCode; request.DeptCode = first.DeptCode;
request.DeptName = first.DeptName; request.DeptName = first.DeptName;
request.BuildDate = DateTime.Now;
request.OANumber = first.OANumber;
await SetEntityPropertiesAsync(request).ConfigureAwait(false);
List<UnplannedIssueRequestDetail> detailList = new List<UnplannedIssueRequestDetail>();
foreach (var itm in p_list)
{
var detail = new UnplannedIssueRequestDetail();
detail.ItemCode = itm.ItemCode;
detail.Qty = itm.Qty;
detail.LocationErpCode = itm.FromLocationErpCode;
detail.LocationCode = "Random";
detail.WarehouseCode = "Random";
detail.LocationGroup = "Random";
detail.LocationArea = "Random";
detail.CaseCode = first.CaseCode;
detail.ProjCapacityCode = first.ProjCapacityCode;
detail.OnceBusiCode = first.OnceBusiCode;
detail.Explain = first.Explain;
detail.ExpireDate = DateTime.MaxValue;
await SetDetailPropertiesAsync(detail).ConfigureAwait(false);
detailList.Add(detail);
}
request.Details = detailList;
await _unplannedIssueRequestManager.CreateAsync(request).ConfigureAwait(false);
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(request);
return dto;
}
protected async Task<UnplannedIssueRequestDTO> CreateByDYOAsync(List<UnplannedIssueRequestImportInput> p_list, bool isAutoSubmit=false)
{
UnplannedIssueRequest request = new UnplannedIssueRequest();
if (p_list.Count == 0)
{
throw new UserFriendlyException("导入内容为空请填写!");
}
var first = p_list.FirstOrDefault();
request.SetId(GuidGenerator.Create());
request.AutoCompleteJob = false;
request.AutoSubmit = isAutoSubmit;
request.AutoAgree = false;
request.AutoHandle = false;
request.DirectCreateNote = false;
request.BuildDate= DateTime.Now; request.BuildDate= DateTime.Now;
request.OANumber=first.OANumber;
await SetEntityPropertiesAsync(request).ConfigureAwait(false); await SetEntityPropertiesAsync(request).ConfigureAwait(false);
List<UnplannedIssueRequestDetail> detailList = new List<UnplannedIssueRequestDetail>(); List<UnplannedIssueRequestDetail> detailList = new List<UnplannedIssueRequestDetail>();
@ -232,7 +327,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
detail.ItemCode = itm.ItemCode; detail.ItemCode = itm.ItemCode;
detail.Qty = itm.Qty; detail.Qty = itm.Qty;
detail.LocationErpCode = itm.LocationErpCode; detail.LocationErpCode = itm.FromErpLocationCode;
detail.LocationCode = "Random"; detail.LocationCode = "Random";
detail.WarehouseCode ="Random"; detail.WarehouseCode ="Random";
detail.LocationGroup ="Random"; detail.LocationGroup ="Random";
@ -242,8 +337,6 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
detail.OnceBusiCode = first.OnceBusiCode; detail.OnceBusiCode = first.OnceBusiCode;
detail.Explain = first.Explain; detail.Explain = first.Explain;
await SetDetailPropertiesAsync(detail).ConfigureAwait(false); await SetDetailPropertiesAsync(detail).ConfigureAwait(false);
detailList.Add(detail); detailList.Add(detail);
} }
@ -314,11 +407,27 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
// $"不是{EnumUnplannedReceiptType.Wip.GetDisplayName()}" + // $"不是{EnumUnplannedReceiptType.Wip.GetDisplayName()}" +
// $"或{EnumUnplannedReceiptType.Raw.GetDisplayName()}】"); // $"或{EnumUnplannedReceiptType.Raw.GetDisplayName()}】");
//} //}
//unplannedReceiptRequest.UnplannedIssueType = type;
unplannedReceiptRequest.AutoCompleteJob = false;
unplannedReceiptRequest.AutoSubmit = true;
unplannedReceiptRequest.AutoAgree = false;
unplannedReceiptRequest.AutoHandle = false;
unplannedReceiptRequest.DirectCreateNote = false;
unplannedReceiptRequest.BuildDate = DateTime.Now;
await SetRequestAutoPropertiesAsync(unplannedReceiptRequest).ConfigureAwait(false); await SetRequestAutoPropertiesAsync(unplannedReceiptRequest).ConfigureAwait(false);
await SetEntityPropertiesAsync(unplannedReceiptRequest).ConfigureAwait(false); await SetEntityPropertiesAsync(unplannedReceiptRequest).ConfigureAwait(false);
foreach (var detail in unplannedReceiptRequest.Details) foreach (var detail in unplannedReceiptRequest.Details)
{ {
detail.LocationErpCode = unplannedReceiptRequest.FromErpLocationCode;
detail.LocationCode = "Random";
detail.WarehouseCode = "Random";
detail.LocationGroup = "Random";
detail.LocationArea = "Random";
//detail.CaseCode = unplannedReceiptRequest.CaseCode;
//detail.ProjCapacityCode = first.ProjCapacityCode;
//detail.OnceBusiCode = first.OnceBusiCode;
//detail.Explain = first.Explain;
await SetDetailPropertiesAsync(detail).ConfigureAwait(false); await SetDetailPropertiesAsync(detail).ConfigureAwait(false);
} }
} }
@ -386,74 +495,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
detail.LocationArea = location.AreaCode; detail.LocationArea = location.AreaCode;
detail.LocationCode = location.Code; detail.LocationCode = location.Code;
} }
//string packingcode = string.Empty;
//if(type!= EnumUnplannedIssueType.Wip)
//{
// packingcode = detail.PackingCode;
//}
//var balance = await _balanceAppService.GetByItemLocationAndPackingAsync(
// packingcode,
// detail.ItemCode,
// detail.LocationCode).ConfigureAwait(false);
//if (balance != null)
//{
// detail.SupplierBatch = balance.SupplierBatch;
// detail.ArriveDate = balance.ArriveDate;
// detail.ProduceDate = balance.ProduceDate;
// detail.ExpireDate = balance.ExpireDate;
// detail.Lot = balance.Lot;
// detail.ContainerCode = balance.ContainerCode;
// detail.PackingCode = balance.PackingCode;
// detail.Qty = detail.Qty;
// detail.Status = balance.Status;
//}
//if (!string.IsNullOrEmpty(detail))
//{
// var dict = await DictAppService.GetByCodeAsync(nameof(input.OnceBusiCode)).ConfigureAwait(false);
// if (dict.Items != null && dict.Items.Count > 0)
// {
// var item = dict.Items.FirstOrDefault(t => t.Code == input.OnceBusiCode);
// Check.NotNull(item, "次交易码", "次交易码不存在");
// detail.SetProperty("OnceBusiCode", item.Code);
// detail.SetProperty("OnceBusiName", item.Name);
// }
//}
//if (!string.IsNullOrEmpty(input.CaseCode))
//{
// var dict = await DictAppService.GetByCodeAsync(nameof(input.CaseCode)).ConfigureAwait(false);
// if (dict.Items != null && dict.Items.Count > 0)
// {
// var item = dict.Items.FirstOrDefault(t => t.Code == input.CaseCode);
// Check.NotNull(item, "专案代码", "专案代码不存在");
// detail.SetProperty("CaseCode", item.Code);
// detail.SetProperty("CaseName", item.Name);
// }
//}
//if (!string.IsNullOrEmpty(input.ProjCapacityCode))
//{
// var dict = await DictAppService.GetByCodeAsync(nameof(input.ProjCapacityCode)).ConfigureAwait(false);
// if (dict.Items != null && dict.Items.Count > 0)
// {
// var item = dict.Items.FirstOrDefault(t => t.Code == input.ProjCapacityCode);
// Check.NotNull(item, "项目分类代码", "项目分类代码不存在");
// detail.SetProperty("ProjCapacityCode", item.Code);
// detail.SetProperty("ProjCapacityName", item.Name);
// }
//}
} }
@ -511,16 +553,19 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
} }
} }
protected async Task<BalanceDTO> CheckBalanceAsync(UnplannedIssueRequestImportInput importInput, List<ValidationResult> validationRresult) protected async Task<BalanceDTO> CheckBalanceAsync(UnplannedIssueRequestImportInput importInput, List<ValidationResult> validationRresult)
{ {
var balance = await BalanceAclService.GetByItemLocationAndPackingAsync( var balance = await BalanceAclService.GetByItemLocationAndPackingAsync(
string.Empty, string.Empty,
importInput.ItemCode, importInput.ItemCode,
importInput.LocationErpCode).ConfigureAwait(false); importInput.FromErpLocationCode).ConfigureAwait(false);
if (balance == null) if (balance == null)
{ {
validationRresult.Add(new ValidationResult($"ERP料号{importInput.ItemCode}在库位{importInput.LocationErpCode}没有库存记录", new string[] { "库存余额" })); validationRresult.Add(new ValidationResult($"ERP料号{importInput.ItemCode}在库位{importInput.FromErpLocationCode}没有库存记录", new string[] { "库存余额" }));
} }
else else
{ {
@ -568,7 +613,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
protected override async Task ValidateImportModelAsync(UnplannedIssueRequestImportInput model, List<ValidationResult> validationRresult) protected override async Task ValidateImportModelAsync(UnplannedIssueRequestImportInput model, List<ValidationResult> validationRresult)
{ {
_ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false); _ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false);
await CheckErpLocationAsync(model.LocationErpCode, validationRresult).ConfigureAwait(false); await CheckErpLocationAsync(model.FromErpLocationCode, validationRresult).ConfigureAwait(false);
await CheckOnceBusiCodeAsync(model, validationRresult).ConfigureAwait(false);//次交易码 await CheckOnceBusiCodeAsync(model, validationRresult).ConfigureAwait(false);//次交易码
//await CheckCaseCodeAsync(model, validationRresult).ConfigureAwait(false);//专案代码 //await CheckCaseCodeAsync(model, validationRresult).ConfigureAwait(false);//专案代码

54
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs

@ -7,20 +7,27 @@ using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office.CustomUI; using DocumentFormat.OpenXml.Office.CustomUI;
using DocumentFormat.OpenXml.Office2010.Excel; using DocumentFormat.OpenXml.Office2010.Excel;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users; using Volo.Abp.Users;
using Volo.Abp.Validation; using Volo.Abp.Validation;
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.Inventory.Domain;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
public class UnplannedIssueJobManager : SfsJobManagerBase<UnplannedIssueJob, UnplannedIssueJobDetail>, IUnplannedIssueJobManager public class UnplannedIssueJobManager : SfsJobManagerBase<UnplannedIssueJob, UnplannedIssueJobDetail>, IUnplannedIssueJobManager
{ {
private readonly IBalanceRepository _balanceRepository;
public UnplannedIssueJobManager( public UnplannedIssueJobManager(
IBalanceRepository balanceRepository,
IUnplannedIssueJobRepository repository IUnplannedIssueJobRepository repository
) : base(repository) ) : base(repository)
{ {
_balanceRepository = balanceRepository;
} }
/// <summary> /// <summary>
@ -40,21 +47,42 @@ public class UnplannedIssueJobManager : SfsJobManagerBase<UnplannedIssueJob, Unp
entity.CompleteUserName = input.CompleteUserName; entity.CompleteUserName = input.CompleteUserName;
entity.CompleteUserId = input.CompleteUserId; entity.CompleteUserId = input.CompleteUserId;
var first= entity.FacDetails.FirstOrDefault();
foreach (var detail in input.Details)
var first= entity.FacDetails.FirstOrDefault();
if (input.UnplannedIssueType == EnumUnplannedIssueType.Raw)
{ {
detail.SetIdAndNumber(GuidGenerator, input.Id, input.Number); foreach (var detail in input.Details)
detail.ReasonCode = first.ReasonCode; {
detail.CaseCode = first.CaseCode; detail.SetIdAndNumber(GuidGenerator, input.Id, input.Number);
detail.ProjCapacityCode = first.ProjCapacityCode; detail.ReasonCode = first.ReasonCode;
detail.OnceBusiCode = first.OnceBusiCode; detail.CaseCode = first.CaseCode;
detail.Explain = first.Explain; detail.ProjCapacityCode = first.ProjCapacityCode;
detail.Status = EnumInventoryStatus.OK; detail.OnceBusiCode = first.OnceBusiCode;
detail.Explain = first.Explain;
entity.AddDetail(detail); detail.Status = EnumInventoryStatus.OK;
//发料子任务 赋值实际转移 entity.AddDetail(detail);
//发料子任务 赋值实际转移
}
}
else
{
foreach (var detail in input.Details)
{
detail.SetIdAndNumber(GuidGenerator, input.Id, input.Number);
detail.ReasonCode = first.ReasonCode;
detail.CaseCode = first.CaseCode;
detail.ProjCapacityCode = first.ProjCapacityCode;
detail.OnceBusiCode = first.OnceBusiCode;
detail.Explain = first.Explain;
detail.Status = EnumInventoryStatus.OK;
detail.RecommendArriveDate = DateTime.Now;
detail.RecommendProduceDate = DateTime.Now;
detail.RecommendExpireDate = DateTime.MaxValue;
entity.AddDetail(detail);
//发料子任务 赋值实际转移
}
} }
return await base.CompleteAsync(entity, user).ConfigureAwait(false); return await base.CompleteAsync(entity, user).ConfigureAwait(false);
} }

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/UnplannedIssueRequests/UnplannedIssueRequest.cs

@ -44,4 +44,15 @@ public class UnplannedIssueRequest : SfsStoreRequestAggregateRootBase<UnplannedI
[Display(Name = "OA单据号")] [Display(Name = "OA单据号")]
public string OANumber { get; set; } public string OANumber { get; set; }
/// <summary>
/// 储位
/// </summary>
[Display(Name = "储位")]
public string FromErpLocationCode { get; set; }
} }

32
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs

@ -88,29 +88,29 @@ public class UnplannedIssueRequestEventHandler
//{ //{
// entity.RequestStatus = EnumRequestStatus.Completed; // entity.RequestStatus = EnumRequestStatus.Completed;
//} //}
if (entity.DirectCreateNote) //if (entity.DirectCreateNote)
{ //{
var note = await BuildUnplannedIssueNoteCreateInputAsync(entity).ConfigureAwait(false); // var note = await BuildUnplannedIssueNoteCreateInputAsync(entity).ConfigureAwait(false);
await _unplannedIssueNoteAppService.CreateAsync(note).ConfigureAwait(false); // await _unplannedIssueNoteAppService.CreateAsync(note).ConfigureAwait(false);
} //}
else //else
{ //{
if (entity.UnplannedIssueType == EnumUnplannedIssueType.OA || entity.UnplannedIssueType == EnumUnplannedIssueType.IMPORT) //if (entity.UnplannedIssueType == EnumUnplannedIssueType.OA || entity.UnplannedIssueType == EnumUnplannedIssueType.IMPORT)
{ //{
//var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false); //var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false);
var request= new UnplannedIssueRequest(); var request= new UnplannedIssueRequest();
request.InjectFrom(entity); request.InjectFrom(entity);
await _unplannedIssueJobApp.CreateByRecommendAsync(request).ConfigureAwait(false); await _unplannedIssueJobApp.CreateByRecommendAsync(request).ConfigureAwait(false);
} //}
else //else
{ //{
var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false); // var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false);
await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false); // await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false);
} //}
} //}
} }
public virtual async Task HandleEventAsync(SfsRefusedEntityEventData<UnplannedIssueRequest> eventData) public virtual async Task HandleEventAsync(SfsRefusedEntityEventData<UnplannedIssueRequest> eventData)
{ {

Loading…
Cancel
Save