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. 79
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestImportInput.cs
  4. 80
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs
  5. 297
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs
  6. 58
      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单据号")]
public string OANumber { get; set; }
}
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>
[Display(Name = "调出库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string LocationErpCode { get; set; }
public string FromLocationErpCode { get; set; }
/// <summary>
/// 专案
/// </summary>

79
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>
[Display(Name = "调出库位")]
[Required(ErrorMessage = "调出库位不能为空")]
public string LocationErpCode { get; set; }
[Display(Name = "储位")]
[Required(ErrorMessage = "储位不能为空")]
public string FromErpLocationCode { get; set; }
/// <summary>
/// 专案
@ -89,77 +90,7 @@ public class UnplannedIssueRequestImportInput : SfsStoreImportInputBase
public string Explain { get; set; }
///// <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; }

80
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>();
var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
if (useBalancesOut.Count == 0)
{
throw new UserFriendlyException($"请求单号{requestDto.Number},无推荐库位请检查是否又库存!");
}
await _unplannedIssueJobManager.AddManyAsync(jobs).ConfigureAwait(false);
//await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false);
var first = jobs.FirstOrDefault();
var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
foreach (var itm in outEditInputs)
{
itm.JobNumber = first.Number;
@ -113,10 +123,12 @@ 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> unbalanceDTOs = new List<BalanceDTO>();
decimal totalDeducted = 0;
foreach (var item in inventory)
@ -128,16 +140,25 @@ public class UnplannedIssueJobAppService
{
var locationDto = await _locationAppService.GetByCodeAsync(item.LocationCode).ConfigureAwait(false);
BalanceDTO dto = new BalanceDTO();
BalanceDTO undto = new BalanceDTO();
dto.InjectFrom(item);
dto.Qty = availableToDeduct;
balanceDTOs.Add(dto);
if (enumLocationType == EnumLocationType.RAW)
{
dto.InjectFrom(item);
dto.Qty = availableToDeduct;
balanceDTOs.Add(dto);
undto.InjectFrom(item);
unbalanceDTOs.Add(dto);
}
else
{
dto.InjectFrom(item);
balanceDTOs.Add(dto);
undto.InjectFrom(item);
undto.Qty = availableToDeduct;
unbalanceDTOs.Add(dto);
}
}
@ -147,8 +168,12 @@ public class UnplannedIssueJobAppService
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>();
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);
// }
//}
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))
{
@ -322,7 +350,6 @@ public class UnplannedIssueJobAppService
else
{
job.UnplannedIssueType = EnumUnplannedIssueType.Wip;
}
job.SetId(GuidGenerator.Create());
@ -397,13 +424,13 @@ public class UnplannedIssueJobAppService
jobs.Add(job);
}
}
if (Errors.Count > 0)
{
foreach (var itm in Errors)
{
_logger.LogError(itm);
}
}
//if (Errors.Count > 0)
//{
// foreach (var itm in Errors)
// {
// _logger.LogError(itm);
// }
//}
return jobs;
}
@ -474,6 +501,15 @@ public class UnplannedIssueJobAppService
public override async Task<UnplannedIssueJobDTO> CompleteAsync(Guid id, UnplannedIssueJobDTO dto)
{
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();
//using (var uow = _unitOfWorkManager.Begin())
//{
@ -486,9 +522,7 @@ public class UnplannedIssueJobAppService
var handleEntity = ObjectMapper.Map<UnplannedIssueJobDTO, UnplannedIssueJob>(dto);
var handleResult = await _unplannedIssueJobManager.CompleteAsync(handleEntity, CurrentUser).ConfigureAwait(false);
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.JobStatus = EnumJobStatus.Done;

297
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.Linq;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Bibliography;
using DocumentFormat.OpenXml.Office2016.Excel;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@ -82,7 +84,6 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
entity.AutoAgree = true;
entity.AutoHandle = true;
entity.DirectCreateNote = false;
await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false);
@ -96,55 +97,98 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
/// <param name="file"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("import-dongyang")]
public async Task<IActionResult> ImportDYAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file)
{
try
{
//[HttpPost("import-dongyang")]
//public async Task<IActionResult> ImportDYAsync([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<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();
try
{
return await CreateByDYOAsync(p_list, EnumUnplannedIssueType.OA, true).ConfigureAwait(false);
return await CreateByDYOAsync(p_list, true).ConfigureAwait(false);
}
catch (Exception e)
{
@ -202,17 +246,16 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
protected async Task<UnplannedIssueRequestDTO> CreateByDYOAsync(List<UnplannedIssueRequestImportDto> p_list, EnumUnplannedIssueType type, bool isAutoSubmit=false)
protected async Task<UnplannedIssueRequestDTO> CreateByDYOAsync(List<UnplannedIssueRequestImportDto> p_list, bool isAutoSubmit = false)
{
UnplannedIssueRequest request = new UnplannedIssueRequest();
if (p_list.Count == 0)
{
throw new UserFriendlyException("导入内容为空请填写!");
}
var first = p_list.FirstOrDefault();
request.UnplannedIssueType = type;
request.SetId(GuidGenerator.Create());
request.AutoCompleteJob = false;
request.AutoSubmit = isAutoSubmit;
@ -221,8 +264,60 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
request.DirectCreateNote = false;
request.DeptCode = first.DeptCode;
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.OANumber=first.OANumber;
await SetEntityPropertiesAsync(request).ConfigureAwait(false);
List<UnplannedIssueRequestDetail> detailList = new List<UnplannedIssueRequestDetail>();
@ -232,7 +327,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
detail.ItemCode = itm.ItemCode;
detail.Qty = itm.Qty;
detail.LocationErpCode = itm.LocationErpCode;
detail.LocationErpCode = itm.FromErpLocationCode;
detail.LocationCode = "Random";
detail.WarehouseCode ="Random";
detail.LocationGroup ="Random";
@ -241,9 +336,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
detail.ProjCapacityCode = first.ProjCapacityCode;
detail.OnceBusiCode = first.OnceBusiCode;
detail.Explain = first.Explain;
await SetDetailPropertiesAsync(detail).ConfigureAwait(false);
detailList.Add(detail);
}
@ -314,11 +407,27 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
// $"不是{EnumUnplannedReceiptType.Wip.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 SetEntityPropertiesAsync(unplannedReceiptRequest).ConfigureAwait(false);
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);
}
}
@ -386,74 +495,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
detail.LocationArea = location.AreaCode;
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)
{
var balance = await BalanceAclService.GetByItemLocationAndPackingAsync(
string.Empty,
importInput.ItemCode,
importInput.LocationErpCode).ConfigureAwait(false);
importInput.FromErpLocationCode).ConfigureAwait(false);
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
{
@ -568,7 +613,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
protected override async Task ValidateImportModelAsync(UnplannedIssueRequestImportInput model, List<ValidationResult> validationRresult)
{
_ = 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 CheckCaseCodeAsync(model, validationRresult).ConfigureAwait(false);//专案代码

58
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.Office2010.Excel;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users;
using Volo.Abp.Validation;
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;
public class UnplannedIssueJobManager : SfsJobManagerBase<UnplannedIssueJob, UnplannedIssueJobDetail>, IUnplannedIssueJobManager
{
private readonly IBalanceRepository _balanceRepository;
public UnplannedIssueJobManager(
IBalanceRepository balanceRepository,
IUnplannedIssueJobRepository repository
) : base(repository)
{
_balanceRepository = balanceRepository;
}
/// <summary>
@ -39,23 +46,44 @@ public class UnplannedIssueJobManager : SfsJobManagerBase<UnplannedIssueJob, Unp
entity.DeptName = input.DeptName;
entity.CompleteUserName = input.CompleteUserName;
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);
detail.ReasonCode = first.ReasonCode;
detail.CaseCode = first.CaseCode;
detail.ProjCapacityCode = first.ProjCapacityCode;
detail.OnceBusiCode = first.OnceBusiCode;
detail.Explain = first.Explain;
detail.Status = EnumInventoryStatus.OK;
entity.AddDetail(detail);
//发料子任务 赋值实际转移
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;
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);
}

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单据号")]
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;
//}
if (entity.DirectCreateNote)
{
var note = await BuildUnplannedIssueNoteCreateInputAsync(entity).ConfigureAwait(false);
await _unplannedIssueNoteAppService.CreateAsync(note).ConfigureAwait(false);
}
else
{
if (entity.UnplannedIssueType == EnumUnplannedIssueType.OA || entity.UnplannedIssueType == EnumUnplannedIssueType.IMPORT)
{
//if (entity.DirectCreateNote)
//{
// var note = await BuildUnplannedIssueNoteCreateInputAsync(entity).ConfigureAwait(false);
// await _unplannedIssueNoteAppService.CreateAsync(note).ConfigureAwait(false);
//}
//else
//{
//if (entity.UnplannedIssueType == EnumUnplannedIssueType.OA || entity.UnplannedIssueType == EnumUnplannedIssueType.IMPORT)
//{
//var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false);
var request= new UnplannedIssueRequest();
request.InjectFrom(entity);
await _unplannedIssueJobApp.CreateByRecommendAsync(request).ConfigureAwait(false);
}
else
{
var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false);
await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false);
}
//}
//else
//{
// var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false);
// await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false);
//}
}
//}
}
public virtual async Task HandleEventAsync(SfsRefusedEntityEventData<UnplannedIssueRequest> eventData)
{

Loading…
Cancel
Save