Browse Source

添加导入接口,

dev_DY_CC
赵新宇 7 months ago
parent
commit
492d318a71
  1. 50
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs
  2. 338
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs
  3. 55
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs
  4. 136
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs
  5. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs
  6. 37
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobDetail.cs
  7. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs
  8. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs

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

@ -55,3 +55,53 @@ public class UnplannedIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInput
public string OANumber { get; set; }
}
public class UnplannedIssueRequestImportDto
{
/// <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; }
}

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

@ -1,6 +1,19 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Irony;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Omu.ValueInjecter;
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.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -16,11 +29,19 @@ public class UnplannedIssueJobAppService
{
private readonly IUnplannedIssueJobManager _unplannedIssueJobManager;
private readonly ILocationAppService _locationAppService;
private readonly IBalanceAppService _balanceAppService;
private readonly IExpectOutAppService _expectOutAppService;
public UnplannedIssueJobAppService(
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService
) : base(repository, unplannedIssueJobManager)
{
_unplannedIssueJobManager = unplannedIssueJobManager;
_locationAppService = locationAppService;
_balanceAppService = balanceAppService;
_expectOutAppService = expectOutAppService;
}
/// <summary>
@ -38,133 +59,200 @@ public class UnplannedIssueJobAppService
}
}
///// <summary>
///// 根据储位推荐
///// </summary>
///// <returns></returns>
//[HttpPost("create-by-recommend")]
//public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto)
//{
// List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>();
// var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
// await _repository.InsertManyAsync(jobs).ConfigureAwait(false);
// var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
// await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
//}
//private async Task<List<UnplannedReceiptJob>> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List<BalanceDTO> useBalancesOut)
//{
// List<UnplannedReceiptJob> jobs = new EditableList<UnplannedReceiptJob>();
// foreach (var requestDtoDetail in requestDto.Details)
// {
// var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false);
// var input = new RecommendBalanceRequestInput
// {
// ItemCode = requestDtoDetail.ItemCode,
// Qty = requestDtoDetail.Qty,
// Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
// Locations = locationCodes.Select(p => p.Code).ToList(),
// IsPackingCode = false
// };
// var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
// usableList = usableList
// .OrderBy(p => p.Lot)
// .ThenBy(p => p.PutInTime)
// .ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料
// .ThenBy(p => p.LocationCode)
// .ThenBy(p => p.PackingCode)
// .ToList();
// decimal qty = 0;
// //实际要用库存
// List<BalanceDTO> useBalances = new List<BalanceDTO>();
// foreach (var balanceDto in usableList)
// {
// if (qty >= requestDtoDetail.Qty)
// {
// break;
// }
// if (qty + balanceDto.Qty > requestDtoDetail.Qty)
// {
// qty += requestDtoDetail.Qty - balanceDto.Qty;
// }
// else
// {
// qty += balanceDto.Qty;
// }
// useBalances.Add(balanceDto);
// useBalancesOut.Add(balanceDto);
// }
// foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode))
// {
// var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false);
// var job = new UnplannedReceiptJob();
// job.UnplannedReceiptRequestNumber = requestDto.Number;
// job.JobType = EnumJobType.UnplannedReceiptJob;
// job.JobStatus = EnumJobStatus.Open;
// job.IsAutoComplete = false;
// job.OANumber = requestDto.OANumber;
// job.Details = new List<UnplannedReceiptJobDetail>();
// job.WarehouseCode = balanceDtoGroup.First().WarehouseCode;
// foreach (var balanceDto in balanceDtoGroup)
// {
// var jobDetail = new UnplannedReceiptJobDetail();
// 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.RecommendToLocationArea = balanceDto.LocationArea;
/// <summary>
/// 根据储位推荐
/// </summary>
/// <returns></returns>
[HttpPost("create-by-recommend")]
public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto)
{
List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>();
var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false);
var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
}
private async Task<List<UnplannedIssueJob>> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List<BalanceDTO> useBalancesOut)
{
List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>();
foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细
{
var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false);//获取存放库位
var input = new RecommendBalanceRequestInput
{
ItemCode = requestDtoDetail.ItemCode,
Qty = requestDtoDetail.Qty,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = locationCodes.Select(p => p.Code).ToList(),
IsPackingCode = false
};
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存
usableList = usableList
.OrderBy(p => p.Lot)
.ThenBy(p => p.PutInTime)
.ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料
.ThenBy(p => p.LocationCode)
.ThenBy(p => p.PackingCode)
.ToList();
decimal qty = 0;
//实际要用库存
List<BalanceDTO> useBalances = new List<BalanceDTO>();
foreach (var balanceDto in usableList)
{
if (qty >= requestDtoDetail.Qty)
{
break;
}
if (qty + balanceDto.Qty > requestDtoDetail.Qty)
{
qty += requestDtoDetail.Qty - balanceDto.Qty;
}
else
{
qty += balanceDto.Qty;
}
useBalances.Add(balanceDto);
useBalancesOut.Add(balanceDto);
}
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode))
{
var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false);
var job = new UnplannedIssueJob();
job.UnplannedIssueRequestNumber= requestDto.Number;
job.JobType = EnumJobType.UnplannedIssueJob;
job.JobStatus = EnumJobStatus.Open;
job.IsAutoComplete = false;
job.OANumber = requestDto.OANumber;
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.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;
var jobfacDetail = new UnplannedIssueJobFacDetail();
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;
//jobDetail.recommendRecommendToLocationArea = balanceDto.LocationArea;
//jobDetail.RecommendToLocationCode = balanceDto.LocationCode;
//jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode;
//jobDetail.RecommendToLocationGroup = balanceDto.LocationGroup;
//jobDetail.RecommendToWarehouseCode = balanceDto.WarehouseCode;
// job.Details.Add(jobDetail);
// }
// 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>
//public async Task SendDimensionalStorehouseAsync()
//{
// throw new System.NotImplementedException();
//}
job.Details.Add(jobDetail);
job.FacDetails.Add(jobfacDetail);
}
//job.SetProperty("details", System.Text.Json.JsonSerializer.Serialize(job.Details));
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>
public 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;
}
}

55
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 Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
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.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
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;
[Authorize]
[AllowAnonymous]
//[Authorize]
[Route($"{StoreConsts.RootPath}unplanned-issue-request")]
public abstract class UnplannedIssueRequestAppService :
@ -18,13 +30,18 @@ public abstract class UnplannedIssueRequestAppService :
{
private readonly IUnplannedIssueRequestManager _unplannedIssueRequestManager;
protected readonly IExportImportService _excelService;
public UnplannedIssueRequestAppService(
IUnplannedIssueRequestRepository repository,
IUnplannedIssueRequestManager unplannedIssueRequestManager
IUnplannedIssueRequestManager unplannedIssueRequestManager,
IExportImportService excelService
) : base(repository, unplannedIssueRequestManager)
{
_unplannedIssueRequestManager = unplannedIssueRequestManager;
_excelService = excelService;
}
/// <summary>
@ -59,4 +76,36 @@ public abstract class UnplannedIssueRequestAppService :
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity);
return dto;
}
[HttpPost("import")]
[Consumes("multipart/form-data")]
public override async Task<IActionResult> ImportAsync([FromForm] SfsImportRequestInput requestInput, [Required] IFormFile file)
{
//var query = _repository.WithDetails().AsNoTracking();
using var ms = new MemoryStream();
await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false);
var inputFileBytes = ms.GetAllBytes();
var importList = _excelService.Import<UnplannedIssueRequestEditInput>(inputFileBytes);
//var checklist = importList.GroupBy(p => new { p.Code, p.ItemCode }).Where(g => g.Count() > 1).Select(p => new { Code = p.Key.Code, PartCode = p.Key.ItemCode });//导入重复报错 //检测是否导入重复
//List<KittingErrorDto> errors = new List<KittingErrorDto>();
//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 = "" });
}
}

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

@ -1,16 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Omu.ValueInjecter;
using Volo.Abp;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Users;
using Win_in.Sfs.Auth.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.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
@ -28,13 +36,14 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
private readonly IBalanceAppService _balanceAppService;
private readonly ILocationAppService _locationAppService;
private readonly ITransactionTypeAclService _transactionTypeAclService;
//private readonly IExportImportService _excelService;
public UnplannedIssueRequestForDongyangAppService(IUnplannedIssueRequestRepository repository,
IUnplannedIssueRequestManager unplannedIssueRequestManager,
IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService,
IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService, IExportImportService excelService,
ITransactionTypeAclService transactionTypeAclService
) : base(repository, unplannedIssueRequestManager)
) : base( repository, unplannedIssueRequestManager, excelService)
{
_unplannedIssueRequestManager = unplannedIssueRequestManager;
_departmentApp = departmentApp;
@ -62,19 +71,128 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
entity.AutoAgree = true;
entity.AutoHandle = true;
entity.DirectCreateNote = false;
//if (entity.UnplannedIssueType == EnumUnplannedIssueType.Wip)
await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity);
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).ConfigureAwait(false);
//if (errors.Count > 0)
//{
// entity.DirectCreateNote = true;
// var fileContent = _excelService.Export(errors);
// return new TestResult(fileContent.FileContents, ExportImportService.ContentType) { FileDownloadName = "错误信息" };
//}
//else
//{
//}
await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false);
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);
}
}
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity);
/// <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, true).ConfigureAwait(false);
}
protected async Task<UnplannedIssueRequestDTO> CreateByDYOAsync(List<UnplannedIssueRequestImportDto> p_list, bool isAutoSubmit=false)
{
UnplannedIssueRequest request = new UnplannedIssueRequest();
request.SetId(GuidGenerator.Create());
request.AutoCompleteJob = false;
request.AutoSubmit = isAutoSubmit;
request.AutoAgree = false;
request.AutoHandle = false;
request.DirectCreateNote = 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.LocationErpCode;
detail.LocationCode = "Random";
detail.WarehouseCode ="Random";
detail.LocationGroup ="Random";
detail.LocationArea = "Random";
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>

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

@ -53,6 +53,17 @@ public class UnplannedIssueJob : SfsJobAggregateRootBase<UnplannedIssueJobDetail
[IgnoreUpdate]
public override List<UnplannedIssueJobDetail> Details { get; set; } = new List<UnplannedIssueJobDetail>();
/// <summary>
/// 任务明细
/// </summary>
[IgnoreUpdate]
public List<UnplannedIssueJobFacDetail> FacDetails { get; set; } = new List<UnplannedIssueJobFacDetail>();
/// <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();
/// <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>

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.CompleteUserName = input.CompleteUserName;
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,

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

@ -48,5 +48,26 @@ public static class UnplannedIssueJobDbContextModelCreatingExtensions
//Indexes
//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();
//});
}
}

Loading…
Cancel
Save