Browse Source

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

dev_DY_CC
郑勃旭 7 months ago
parent
commit
d1c1ceb9b8
  1. BIN
      .vs/WMS/v17/.wsuo
  2. 39
      .vs/WMS/v17/DocumentLayout.json
  3. 7
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumUnplannedIssueType.cs
  4. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDTO.cs
  5. 36
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDetailDTO.cs
  6. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs
  7. 62
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs
  8. 424
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs
  9. 28
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs
  10. 161
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs
  11. 12
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs
  12. 37
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobDetail.cs
  13. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs
  14. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs
  15. 30
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs

BIN
.vs/WMS/v17/.wsuo

Binary file not shown.

39
.vs/WMS/v17/DocumentLayout.json

@ -0,0 +1,39 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\89237\\source\\repos\\WMS\\",
"Documents": [],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
},
{
"$type": "Bookmark",
"Name": "ST:131:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
},
{
"$type": "Bookmark",
"Name": "ST:130:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
},
{
"$type": "Bookmark",
"Name": "ST:133:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
},
{
"$type": "Bookmark",
"Name": "ST:132:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
}
]
}
]
}
]
}

7
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumUnplannedIssueType.cs

@ -12,4 +12,11 @@ public enum EnumUnplannedIssueType
Raw = 1,//原料 非生产领料 Raw = 1,//原料 非生产领料
[Display(Name = "线边 非生产领料")] [Display(Name = "线边 非生产领料")]
Wip =2,//线边 非生产领料 Wip =2,//线边 非生产领料
[Display(Name = "OA 非生产领料")]
OA = 3,//原料 非生产领料
[Display(Name = "导入 非生产领料")]
IMPORT = 4,//原料 非生产领料
} }

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDTO.cs

@ -1,7 +1,9 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -48,4 +50,11 @@ public class UnplannedIssueJobDTO : SfsJobDTOBase<UnplannedIssueJobDetailDTO>
[StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string OANumber { get; set; } public string OANumber { get; set; }
/// <summary>
/// 实际明细
/// </summary>
[Display(Name = "实际明细")]
public List<UnplannedIssueJobFacDetailDTO> FacDetails;
} }

36
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDetailDTO.cs

@ -35,3 +35,39 @@ public class UnplannedIssueJobDetailDTO : SfsJobRecommendFromDetailDTOBase
[Display(Name = "说明")] [Display(Name = "说明")]
public string Explain { get; set; } public string Explain { get; set; }
} }
public class UnplannedIssueJobFacDetailDTO : SfsJobRecommendFromDetailDTOBase
{
/// <summary>
/// 原因代码
/// </summary>
[Display(Name = "原因代码")]
public string ReasonCode { get; set; }
/// <summary>
/// 专案
/// </summary>
[Display(Name = "专案")]
public string CaseCode { get; set; }
/// <summary>
/// 项目分类
/// </summary>
[Display(Name = "项目分类")]
public string ProjCapacityCode { get; set; }
/// <summary>
/// 次交易码
/// </summary>
[Display(Name = "次交易码")]
public string OnceBusiCode { get; set; }
/// <summary>
/// 说明
/// </summary>
[Display(Name = "说明")]
public string Explain { get; set; }
}

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs

@ -1,4 +1,5 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -6,4 +7,7 @@ public interface IUnplannedIssueJobAppService
: ISfsJobAppServiceBase<UnplannedIssueJobDTO, SfsJobRequestInputBase, UnplannedIssueJobCheckInput, UnplannedIssueJobEditInput> : ISfsJobAppServiceBase<UnplannedIssueJobDTO, SfsJobRequestInputBase, UnplannedIssueJobCheckInput, UnplannedIssueJobEditInput>
{ {
Task CancelByRequestNumberAsync(string number); Task CancelByRequestNumberAsync(string number);
Task CreateByRecommendAsync(UnplannedIssueRequest requestDto);
} }

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

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -55,3 +56,64 @@ public class UnplannedIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInput
public string OANumber { get; set; } public string OANumber { get; set; }
} }
public class UnplannedIssueRequestImportDto
{
/// <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; }
[Display(Name = "数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { 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; }
}

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

@ -1,6 +1,21 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Irony;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Omu.ValueInjecter;
using Volo.Abp;
using Volo.Abp.Data;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
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;
@ -15,13 +30,21 @@ public class UnplannedIssueJobAppService
IUnplannedIssueJobAppService IUnplannedIssueJobAppService
{ {
private readonly IUnplannedIssueJobManager _unplannedIssueJobManager; private readonly IUnplannedIssueJobManager _unplannedIssueJobManager;
private readonly ILocationAppService _locationAppService;
private readonly IBalanceAppService _balanceAppService;
private readonly IExpectOutAppService _expectOutAppService;
public UnplannedIssueJobAppService( public UnplannedIssueJobAppService(
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService
) : base(repository, unplannedIssueJobManager) ) : base(repository, unplannedIssueJobManager)
{ {
_unplannedIssueJobManager = unplannedIssueJobManager; _unplannedIssueJobManager = unplannedIssueJobManager;
} _locationAppService = locationAppService;
_balanceAppService = balanceAppService;
_expectOutAppService = expectOutAppService;
}
/// <summary> /// <summary>
/// 根据申请单号作废任务 /// 根据申请单号作废任务
@ -38,133 +61,270 @@ public class UnplannedIssueJobAppService
} }
} }
///// <summary>
///// 根据储位推荐 /// <summary>
///// </summary> /// 根据储位推荐
///// <returns></returns> /// </summary>
//[HttpPost("create-by-recommend")] /// <returns></returns>
//public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto) [HttpPost("create-by-recommend")]
//{ public async Task CreateByRecommendAsync(UnplannedIssueRequest requestDto)
// List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>(); {
// var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false); List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>();
// await _repository.InsertManyAsync(jobs).ConfigureAwait(false); var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
// var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false); await _unplannedIssueJobManager.AddManyAsync(jobs).ConfigureAwait(false);
// await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); //await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false);
//} var first = jobs.FirstOrDefault();
var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
//private async Task<List<UnplannedReceiptJob>> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List<BalanceDTO> useBalancesOut) foreach (var itm in outEditInputs)
//{ {
// List<UnplannedReceiptJob> jobs = new EditableList<UnplannedReceiptJob>(); itm.JobNumber = first.Number;
}
// foreach (var requestDtoDetail in requestDto.Details) await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
// { }
// var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false);
// var input = new RecommendBalanceRequestInput
// {
// ItemCode = requestDtoDetail.ItemCode, private List<BalanceDTO> DeductInventory(List<BalanceDTO> inventory, decimal quantityToDeduct)
// Qty = requestDtoDetail.Qty, {
// Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, List<BalanceDTO> balanceDTOs = new List<BalanceDTO>();
// Locations = locationCodes.Select(p => p.Code).ToList(), decimal totalDeducted = 0;
// IsPackingCode = false foreach (var item in inventory)
// }; {
// var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted);
// usableList = usableList item.Qty -= availableToDeduct;
// .OrderBy(p => p.Lot) totalDeducted += availableToDeduct;
// .ThenBy(p => p.PutInTime) BalanceDTO dto = new BalanceDTO();
// .ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料 dto.InjectFrom(item);
// .ThenBy(p => p.LocationCode) dto.Qty = availableToDeduct;
// .ThenBy(p => p.PackingCode) balanceDTOs.Add(dto);
// .ToList(); // 如果已经扣减达到所需数量,退出循环
if (totalDeducted >= quantityToDeduct)
// decimal qty = 0; {
// //实际要用库存 break;
// List<BalanceDTO> useBalances = new List<BalanceDTO>(); }
// foreach (var balanceDto in usableList) }
// { // 返回实际扣减的库存数量
// if (qty >= requestDtoDetail.Qty) return balanceDTOs;
// { }
// break;
// }
// if (qty + balanceDto.Qty > requestDtoDetail.Qty)
// {
// qty += requestDtoDetail.Qty - balanceDto.Qty;
// }
// else
// {
// qty += balanceDto.Qty;
// }
// useBalances.Add(balanceDto); private async Task<List<UnplannedIssueJob>> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List<BalanceDTO> useBalancesOut)
// useBalancesOut.Add(balanceDto); {
// } List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>();
// foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细
// { {
// var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).ConfigureAwait(false);//获取存放库位
// var job = new UnplannedReceiptJob(); var input = new RecommendBalanceRequestInput
{
// job.UnplannedReceiptRequestNumber = requestDto.Number; ItemCode = requestDtoDetail.ItemCode,
// job.JobType = EnumJobType.UnplannedReceiptJob; Qty = requestDtoDetail.Qty,
// job.JobStatus = EnumJobStatus.Open; Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
// job.IsAutoComplete = false; Locations = locationCodes.Select(p => p.Code).ToList(),
// job.OANumber = requestDto.OANumber; IsPackingCode = false
// job.Details = new List<UnplannedReceiptJobDetail>(); };
// job.WarehouseCode = balanceDtoGroup.First().WarehouseCode; var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存
usableList = usableList
// foreach (var balanceDto in balanceDtoGroup) .OrderBy(p => p.Lot)
// { .ThenBy(p => p.PutInTime)
// var jobDetail = new UnplannedReceiptJobDetail(); .ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料
// jobDetail.CaseCode = requestDtoDetail.CaseCode; .ThenBy(p => p.LocationCode)
// jobDetail.Explain = requestDtoDetail.Explain; .ThenBy(p => p.PackingCode)
// jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode; .ToList();
// jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode;
// jobDetail.ReasonCode = requestDtoDetail.ReasonCode; decimal qty = 0;
// jobDetail.ItemCode = requestDtoDetail.ItemCode; //实际要用库存
// jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1; List<BalanceDTO> useBalances = new List<BalanceDTO>();
// jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2; var returnlist=DeductInventory(usableList, requestDtoDetail.Qty);
// jobDetail.ItemName = requestDtoDetail.ItemName; useBalances.AddRange(returnlist);
// jobDetail.RecommendArriveDate = balanceDto.ArriveDate; useBalancesOut.AddRange(returnlist);
// jobDetail.RecommendContainerCode = string.Empty;
// jobDetail.RecommendExpireDate = balanceDto.ExpireDate;
// jobDetail.RecommendLot = balanceDto.Lot;
// jobDetail.RecommendPackingCode = balanceDto.PackingCode; //foreach (var balanceDto in usableList)
// jobDetail.RecommendProduceDate = balanceDto.ProduceDate; //{
// jobDetail.RecommendQty = balanceDto.Qty; // decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty);
// jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; // balanceDto.Qty -= availableToDeduct;
// jobDetail.RecommendToLocationArea = balanceDto.LocationArea; // qty += availableToDeduct;
// jobDetail.RecommendToLocationCode = balanceDto.LocationCode; // if (qty >= balanceDto.Qty)
// jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode; // break;
// jobDetail.RecommendToLocationGroup = balanceDto.LocationGroup; // if (qty >= requestDtoDetail.Qty)
// jobDetail.RecommendToWarehouseCode = balanceDto.WarehouseCode; // {
// break;
// job.Details.Add(jobDetail); // }
// } // if (qty + balanceDto.Qty > requestDtoDetail.Qty)
// {
// if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的 // qty += requestDtoDetail.Qty - balanceDto.Qty;
// { // }
// await SendDimensionalStorehouseAsync().ConfigureAwait(false); // else
// job.JobStatus = EnumJobStatus.Wait; // {
// } // qty += balanceDto.Qty;
// }
// jobs.Add(job); // if (qty > 0)
// } // {
// } // useBalances.Add(balanceDto);
// useBalancesOut.Add(balanceDto);
// return jobs; // }
//} //}
if (returnlist.Count == 0)
//private async Task<List<ExpectOutEditInput>> BuildExpectOutAsync(List<BalanceDTO> balanceDtos) {
//{ throw new UserFriendlyException("库存余额不够!");
// return ObjectMapper.Map<List<BalanceDTO>, List<ExpectOutEditInput>>(balanceDtos); }
//}
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode))
///// <summary> {
///// 给立体库发送 var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false);
///// </summary> var job = new UnplannedIssueJob();
///// <returns></returns> job.SetId(GuidGenerator.Create());
//public async Task SendDimensionalStorehouseAsync() job.UnplannedIssueRequestNumber= requestDto.Number;
//{ job.JobType = EnumJobType.UnplannedIssueJob;
// throw new System.NotImplementedException(); job.JobStatus = EnumJobStatus.Open;
//} job.IsAutoComplete = false;
job.OANumber = requestDto.OANumber;
job.Number =await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true);
job.Details = new List<UnplannedIssueJobDetail>();
job.FacDetails = new List<UnplannedIssueJobFacDetail>();
job.WarehouseCode = balanceDtoGroup.First().WarehouseCode;
foreach (var balanceDto in balanceDtoGroup)
{
var jobDetail = new UnplannedIssueJobDetail();
jobDetail.Number = job.Number;
jobDetail.SetIdAndNumber(GuidGenerator,job.Id,job.Number);
jobDetail.CaseCode = requestDtoDetail.CaseCode;
jobDetail.Explain = requestDtoDetail.Explain;
jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode;
jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode;
//jobDetail.ReasonCode = requestDtoDetail.ReasonCode;
jobDetail.ItemCode = requestDtoDetail.ItemCode;
jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1;
jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2;
jobDetail.ItemName = requestDtoDetail.ItemName;
jobDetail.RecommendArriveDate = balanceDto.ArriveDate;
jobDetail.RecommendContainerCode = string.Empty;
jobDetail.RecommendExpireDate = balanceDto.ExpireDate;
jobDetail.RecommendLot = balanceDto.Lot;
jobDetail.RecommendPackingCode = balanceDto.PackingCode;
jobDetail.RecommendProduceDate = balanceDto.ProduceDate;
jobDetail.RecommendQty = balanceDto.Qty;
jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch;
jobDetail.StdPackQty = requestDtoDetail.StdPackQty;
jobDetail.RecommendPackingCode = balanceDto.PackingCode;
jobDetail.HandledPackingCode = balanceDto.PackingCode;
jobDetail.RecommendFromLocationArea = balanceDto.LocationArea;
jobDetail.RecommendFromLocationCode = balanceDto.LocationCode;
jobDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode;
jobDetail.RecommendFromLocationGroup = balanceDto.LocationGroup;
jobDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode;
jobDetail.HandledQty = balanceDto.Qty;
var jobfacDetail = new UnplannedIssueJobFacDetail();
jobfacDetail.Number = job.Number;
jobfacDetail.SetIdAndNumber(GuidGenerator, job.Id, job.Number);
jobfacDetail.CaseCode = requestDtoDetail.CaseCode;
jobfacDetail.Explain = requestDtoDetail.Explain;
jobfacDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode;
jobfacDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode;
//jobfacDetail.ReasonCode = requestDtoDetail.ReasonCode;
jobfacDetail.ItemCode = requestDtoDetail.ItemCode;
jobfacDetail.ItemDesc1 = requestDtoDetail.ItemDesc1;
jobfacDetail.ItemDesc2 = requestDtoDetail.ItemDesc2;
jobfacDetail.ItemName = requestDtoDetail.ItemName;
jobfacDetail.RecommendArriveDate = balanceDto.ArriveDate;
jobfacDetail.RecommendContainerCode = string.Empty;
jobfacDetail.RecommendExpireDate = balanceDto.ExpireDate;
jobfacDetail.RecommendLot = balanceDto.Lot;
jobfacDetail.RecommendPackingCode = balanceDto.PackingCode;
jobfacDetail.RecommendProduceDate = balanceDto.ProduceDate;
jobfacDetail.RecommendQty = balanceDto.Qty;
jobfacDetail.RecommendSupplierBatch = balanceDto.SupplierBatch;
jobfacDetail.StdPackQty = requestDtoDetail.StdPackQty;
jobfacDetail.RecommendPackingCode = balanceDto.PackingCode;
jobfacDetail.HandledPackingCode = balanceDto.PackingCode;
jobfacDetail.RecommendFromLocationArea = balanceDto.LocationArea;
jobfacDetail.RecommendFromLocationCode = balanceDto.LocationCode;
jobfacDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode;
jobfacDetail.RecommendFromLocationGroup = balanceDto.LocationGroup;
jobfacDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode;
jobfacDetail.HandledQty = balanceDto.Qty;
job.Details.Add(jobDetail);
job.FacDetails.Add(jobfacDetail);
}
if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的
{
await SendDimensionalStorehouseAsync().ConfigureAwait(false);
job.JobStatus = EnumJobStatus.Wait;
}
jobs.Add(job);
}
}
return jobs;
}
private async Task<List<ExpectOutEditInput>> BuildExpectOutAsync(List<BalanceDTO> balanceDtos)
{
return ObjectMapper.Map<List<BalanceDTO>, List<ExpectOutEditInput>>(balanceDtos);
}
/// <summary>
/// 给立体库发送
/// </summary>
/// <returns></returns>
private async Task SendDimensionalStorehouseAsync()
{
throw new System.NotImplementedException();
}
/// <summary>
/// 创建补料记录实体
/// </summary>
/// <param name="coatingIssueJobDto"></param>
/// <returns></returns>
private async Task<UnplannedIssueNoteEditInput> BuildUnplannedIssueNoteAsync(UnplannedIssueJob unplannedIssueJobDto)
{
//var createInput =
// ObjectMapper.Map<UnplannedIssueJob, UnplannedIssueNoteEditInput>(unplannedIssueJobDto);
var issuenote = new UnplannedIssueNoteEditInput();
issuenote.DeptCode = unplannedIssueJobDto.DeptCode;
issuenote.DeptName = unplannedIssueJobDto.DeptName;
issuenote.BuildDate = unplannedIssueJobDto.BuildDate;
issuenote.UnplannedIssueRequestNumber = unplannedIssueJobDto.UnplannedIssueRequestNumber;
issuenote.JobNumber = unplannedIssueJobDto.Number;
issuenote.UnplannedIssueType = issuenote.UnplannedIssueType;
issuenote.OANumber = issuenote.OANumber;
issuenote.Details = new List<UnplannedIssueNoteDetailInput>();
foreach (var detail in unplannedIssueJobDto.FacDetails)
{
var entity=new UnplannedIssueNoteDetailInput();
entity.InjectFrom(detail);
entity.Qty = detail.HandledQty;
issuenote.Details.Add(entity);
}
await Task.CompletedTask.ConfigureAwait(false);
return issuenote;
}
} }

28
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs

@ -1,14 +1,26 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Kittings.Inputs;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; 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;
using Win_in.Sfs.Shared.Application.Contracts.ExportAndImport;
using System.Linq;
namespace Win_in.Sfs.Wms.Store.Application; namespace Win_in.Sfs.Wms.Store.Application;
[AllowAnonymous]
[Authorize] //[Authorize]
[Route($"{StoreConsts.RootPath}unplanned-issue-request")] [Route($"{StoreConsts.RootPath}unplanned-issue-request")]
public abstract class UnplannedIssueRequestAppService : public abstract class UnplannedIssueRequestAppService :
@ -18,13 +30,18 @@ public abstract class UnplannedIssueRequestAppService :
{ {
private readonly IUnplannedIssueRequestManager _unplannedIssueRequestManager; private readonly IUnplannedIssueRequestManager _unplannedIssueRequestManager;
protected readonly IExportImportService _excelService;
public UnplannedIssueRequestAppService( public UnplannedIssueRequestAppService(
IUnplannedIssueRequestRepository repository, IUnplannedIssueRequestRepository repository,
IUnplannedIssueRequestManager unplannedIssueRequestManager IUnplannedIssueRequestManager unplannedIssueRequestManager,
IExportImportService excelService
) : base(repository, unplannedIssueRequestManager) ) : base(repository, unplannedIssueRequestManager)
{ {
_unplannedIssueRequestManager = unplannedIssueRequestManager; _unplannedIssueRequestManager = unplannedIssueRequestManager;
_excelService = excelService;
} }
/// <summary> /// <summary>
@ -59,4 +76,9 @@ public abstract class UnplannedIssueRequestAppService :
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity); var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity);
return dto; return dto;
} }
} }

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

@ -1,16 +1,24 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Omu.ValueInjecter;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Users; using Volo.Abp.Users;
using Win_in.Sfs.Auth.Application.Contracts; using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Kittings.Inputs;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts.ExportAndImport;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
@ -28,13 +36,14 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
private readonly IBalanceAppService _balanceAppService; private readonly IBalanceAppService _balanceAppService;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly ITransactionTypeAclService _transactionTypeAclService; private readonly ITransactionTypeAclService _transactionTypeAclService;
//private readonly IExportImportService _excelService;
public UnplannedIssueRequestForDongyangAppService(IUnplannedIssueRequestRepository repository, public UnplannedIssueRequestForDongyangAppService(IUnplannedIssueRequestRepository repository,
IUnplannedIssueRequestManager unplannedIssueRequestManager, IUnplannedIssueRequestManager unplannedIssueRequestManager,
IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService, IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService, IExportImportService excelService,
ITransactionTypeAclService transactionTypeAclService ITransactionTypeAclService transactionTypeAclService
) : base(repository, unplannedIssueRequestManager) ) : base( repository, unplannedIssueRequestManager, excelService)
{ {
_unplannedIssueRequestManager = unplannedIssueRequestManager; _unplannedIssueRequestManager = unplannedIssueRequestManager;
_departmentApp = departmentApp; _departmentApp = departmentApp;
@ -62,19 +71,149 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
entity.AutoAgree = true; entity.AutoAgree = true;
entity.AutoHandle = true; entity.AutoHandle = true;
entity.DirectCreateNote = false; entity.DirectCreateNote = false;
//if (entity.UnplannedIssueType == EnumUnplannedIssueType.Wip)
//{
// entity.DirectCreateNote = true;
//}
//else
//{
//}
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);
return dto; return dto;
} }
/// <summary>
/// 自定义导入接口
/// </summary>
/// <param name="requestInput"></param>
/// <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
{
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);
//if (errors.Count > 0)
//{
// var fileContent = _excelService.Export(errors);
// return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName = "错误信息" };
//}
var fileContent1 = _excelService.Export(importList);
// return new TestResult(fileContent1.FileContents, ExportImportService.ContentType) { FileDownloadName = "Kitting导入文件" };
return new JsonResult(new { Code = 200, FileDownloadName = fileContent1.FileDownloadName });
}
catch (Exception e)
{
throw new UserFriendlyException(e.Message);
}
}
/// <summary>
/// OA接口
/// </summary>
/// <param name="p_list"></param>
/// <returns></returns>
[HttpPost("create-dongyang")]
public async Task<UnplannedIssueRequestDTO> CreateByAsync(List<UnplannedIssueRequestImportDto> p_list)
{
return await CreateByDYOAsync(p_list, EnumUnplannedIssueType.OA, true).ConfigureAwait(false);
}
protected async Task<UnplannedIssueRequestDTO> CreateByDYOAsync(List<UnplannedIssueRequestImportDto> p_list, EnumUnplannedIssueType type, 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;
request.AutoAgree = false;
request.AutoHandle = false;
request.DirectCreateNote = false;
request.DeptCode = first.DeptCode;
request.DeptName = first.DeptName;
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.LocationErpCode;
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;
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;
}
private async Task SetDetailPropertiesAsync(UnplannedIssueRequestDetail detail)
{
var itemBasic = await ItemBasicAclService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasic, detail.ItemCode);
//await CheckOnceBusiCodeAsync(detail).ConfigureAwait(false);
if (itemBasic != null)
{
detail.ItemCode = itemBasic.Code;
detail.ItemName = itemBasic.Name;
detail.ItemDesc1 = itemBasic.Desc1;
detail.ItemDesc2 = itemBasic.Desc2;
detail.StdPackQty = itemBasic.StdPackQty;
detail.Uom = itemBasic.BasicUom;
}
string packingcode = string.Empty;
packingcode =string.IsNullOrEmpty(detail.PackingCode)?"99999999":detail.PackingCode;
detail.PackingCode = packingcode;
}
/// <summary> /// <summary>
/// 用来重写 导入数据时可以加工数据 /// 用来重写 导入数据时可以加工数据
/// </summary> /// </summary>

12
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Data; using Volo.Abp.Data;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
@ -53,6 +54,17 @@ public class UnplannedIssueJob : SfsJobAggregateRootBase<UnplannedIssueJobDetail
[IgnoreUpdate] [IgnoreUpdate]
public override List<UnplannedIssueJobDetail> Details { get; set; } = new List<UnplannedIssueJobDetail>(); public override List<UnplannedIssueJobDetail> Details { get; set; } = new List<UnplannedIssueJobDetail>();
/// <summary>
/// 任务明细
/// </summary>
[IgnoreUpdate]
public List<UnplannedIssueJobFacDetail> FacDetails { get; set; } = new List<UnplannedIssueJobFacDetail>();
/// <summary> /// <summary>
/// 设置任务明细的实际库位和实际数量 /// 设置任务明细的实际库位和实际数量
/// </summary> /// </summary>

37
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobDetail.cs

@ -35,6 +35,43 @@ public class UnplannedIssueJobDetail : SfsJobRecommendFromDetailEntityBase, IHas
public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary(); public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary();
/// <summary>
/// 说明
/// </summary>
[Display(Name = "说明")]
public string Explain { get; set; }
}
public class UnplannedIssueJobFacDetail : SfsJobRecommendFromDetailEntityBase, IHasExtraProperties
{
/// <summary>
/// 原因代码
/// </summary>
public string ReasonCode { get; set; }
/// <summary>
/// 专案
/// </summary>
[Display(Name = "专案")]
public string CaseCode { get; set; }
/// <summary>
/// 项目分类
/// </summary>
[Display(Name = "项目分类")]
public string ProjCapacityCode { get; set; }
/// <summary>
/// 次交易码
/// </summary>
[Display(Name = "次交易码")]
public string OnceBusiCode { get; set; }
/// <summary>
/// 扩展属性
/// </summary>
public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary();
/// <summary> /// <summary>
/// 说明 /// 说明
/// </summary> /// </summary>

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

@ -35,7 +35,7 @@ public class UnplannedIssueJobManager : SfsJobManagerBase<UnplannedIssueJob, Unp
entity.DeptName = input.DeptName; entity.DeptName = input.DeptName;
entity.CompleteUserName = input.CompleteUserName; entity.CompleteUserName = input.CompleteUserName;
entity.CompleteUserId = input.CompleteUserId; entity.CompleteUserId = input.CompleteUserId;
foreach (var detail in input.Details) foreach (var detail in input.FacDetails)
{ {
//发料子任务 赋值实际转移 //发料子任务 赋值实际转移
await entity.BuildDetail(detail.Id, detail.HandledFromLocationGroup, detail.HandledFromLocationArea,detail.HandledFromLocationCode, detail.HandledFromLocationErpCode, detail.HandledFromWarehouseCode, detail.HandledQty, detail.HandledSupplierBatch, detail.HandledArriveDate, detail.HandledProduceDate, detail.HandledExpireDate, await entity.BuildDetail(detail.Id, detail.HandledFromLocationGroup, detail.HandledFromLocationArea,detail.HandledFromLocationCode, detail.HandledFromLocationErpCode, detail.HandledFromWarehouseCode, detail.HandledQty, detail.HandledSupplierBatch, detail.HandledArriveDate, detail.HandledProduceDate, detail.HandledExpireDate,

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs

@ -26,6 +26,9 @@ public static class UnplannedIssueJobDbContextModelCreatingExtensions
b.Property(q => q.UnplannedIssueRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.UnplannedIssueRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
//Relations //Relations
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
b.HasMany(q => q.FacDetails).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
//Indexes //Indexes
b.HasIndex(q => new { q.Number }).IsUnique(); b.HasIndex(q => new { q.Number }).IsUnique();
}); });
@ -48,5 +51,26 @@ public static class UnplannedIssueJobDbContextModelCreatingExtensions
//Indexes //Indexes
//b.HasIndex(q => new { q.PackingCode }).IsUnique(); //b.HasIndex(q => new { q.PackingCode }).IsUnique();
}); });
builder.Entity<UnplannedIssueJobFacDetail>(b =>
{
//Configure table & schema name
b.ToTable(StoreDbProperties.JobDbTablePrefix + nameof(UnplannedIssueJobFacDetail), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsBase();
//Configure Job base properties
b.ConfigureJobRecommendFromDetail();
//Properties
//Relations
//None
//Indexes
//b.HasIndex(q => new { q.PackingCode }).IsUnique();
});
} }
} }

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

@ -1,5 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text.Json.Nodes;
using System.Threading.Tasks; using System.Threading.Tasks;
using Omu.ValueInjecter;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Volo.Abp.ObjectMapping; using Volo.Abp.ObjectMapping;
@ -93,8 +95,21 @@ public class UnplannedIssueRequestEventHandler
} }
else else
{ {
var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false); if (entity.UnplannedIssueType == EnumUnplannedIssueType.OA || entity.UnplannedIssueType == EnumUnplannedIssueType.IMPORT)
await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false); {
//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);
}
} }
} }
public virtual async Task HandleEventAsync(SfsRefusedEntityEventData<UnplannedIssueRequest> eventData) public virtual async Task HandleEventAsync(SfsRefusedEntityEventData<UnplannedIssueRequest> eventData)
@ -171,19 +186,26 @@ public class UnplannedIssueRequestEventHandler
{ {
await Task.CompletedTask.ConfigureAwait(false); await Task.CompletedTask.ConfigureAwait(false);
var createInput = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueJobEditInput>(entity); var createInput = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueJobEditInput>(entity);
createInput.UnplannedIssueRequestNumber = entity.Number; createInput.UnplannedIssueRequestNumber = entity.Number;
createInput.JobType = EnumJobType.UnplannedIssueJob; createInput.JobType = EnumJobType.UnplannedIssueJob;
createInput.JobStatus = EnumJobStatus.Open; createInput.JobStatus = EnumJobStatus.Open;
createInput.IsAutoComplete = entity.AutoCompleteJob; createInput.IsAutoComplete = entity.AutoCompleteJob;
createInput.Worker = string.IsNullOrEmpty(createInput.Worker)?"导入":createInput.Worker;
createInput.Details = new List<UnplannedIssueJobDetailInput>(); createInput.Details = new List<UnplannedIssueJobDetailInput>();
foreach (var inputDetail in entity.Details) foreach (var inputDetail in entity.Details)
{ {
var detail = ObjectMapper.Map<UnplannedIssueRequestDetail, UnplannedIssueJobDetailInput>(inputDetail); var detail = ObjectMapper.Map<UnplannedIssueRequestDetail, UnplannedIssueJobDetailInput>(inputDetail);
detail.ExtraProperties = inputDetail.ExtraProperties; detail.ExtraProperties = inputDetail.ExtraProperties;
detail.HandledLot = string.IsNullOrEmpty(detail.HandledLot) ? "导入" : detail.HandledLot;
detail.RecommendLot = string.IsNullOrEmpty(detail.RecommendLot) ? "导入" : detail.RecommendLot;
createInput.Details.Add(detail); createInput.Details.Add(detail);
} }
createInput.WarehouseCode = createInput.Details[0].RecommendFromWarehouseCode; createInput.WarehouseCode = createInput.Details[0].RecommendFromWarehouseCode;

Loading…
Cancel
Save