From 492d318a7127af75aa5f010421d5bf5a06d4380f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Wed, 9 Oct 2024 17:31:37 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Inputs/UnplannedIssueRequestEditInput.cs | 50 +++ .../UnplannedIssueJobAppService.cs | 352 +++++++++++------- .../UnplannedIssueRequestAppService.cs | 55 ++- ...lannedIssueRequestForDongyangAppService.cs | 140 ++++++- .../UnplannedIssueJobs/UnplannedIssueJob.cs | 11 + .../UnplannedIssueJobDetail.cs | 37 ++ .../UnplannedIssueJobManager.cs | 2 +- ...ssueJobDbContextModelCreatingExtensions.cs | 21 ++ 8 files changed, 521 insertions(+), 147 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs index b4b108ba5..d7b026c96 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs +++ b/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 +{ + + /// + /// 料号 + /// + [Display(Name = "料号")] + [Required(ErrorMessage = "{0}是必填项")] + public string ItemCode { get; set; } + [Display(Name = "数量")] + [Required(ErrorMessage = "{0}是必填项")] + public decimal Qty { get; set; } + /// + /// 调出库位 + /// + [Display(Name = "调出库位")] + [Required(ErrorMessage = "{0}是必填项")] + public string LocationErpCode { get; set; } + /// + /// 专案 + /// + [Display(Name = "专案")] + [Required(ErrorMessage = "{0}是必填项")] + public string CaseCode { get; set; } + /// + /// 项目分类 + /// + [Display(Name = "项目分类")] + [Required(ErrorMessage = "{0}是必填项")] + public string ProjCapacityCode { get; set; } + + /// + /// 次交易码 + /// + [Display(Name = "次交易码")] + [Required(ErrorMessage = "{0}是必填项")] + public string OnceBusiCode { get; set; } + /// + /// 说明 + /// + [Display(Name = "说明")] + public string Explain { get; set; } +} + + + + + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index 9eeb6fd15..f4f1f1a54 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/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; @@ -15,13 +28,21 @@ public class UnplannedIssueJobAppService IUnplannedIssueJobAppService { - private readonly IUnplannedIssueJobManager _unplannedIssueJobManager; + 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; + + } /// /// 根据申请单号作废任务 @@ -38,133 +59,200 @@ public class UnplannedIssueJobAppService } } - ///// - ///// 根据储位推荐 - ///// - ///// - //[HttpPost("create-by-recommend")] - //public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto) - //{ - // List useBalancesOut = new EditableList(); - // 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> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List useBalancesOut) - //{ - // List jobs = new EditableList(); - - // 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.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 useBalances = new List(); - // 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(); - // 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; - // 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> BuildExpectOutAsync(List balanceDtos) - //{ - // return ObjectMapper.Map, List>(balanceDtos); - //} - - ///// - ///// 给立体库发送 - ///// - ///// - //public async Task SendDimensionalStorehouseAsync() - //{ - // throw new System.NotImplementedException(); - //} + + /// + /// 根据储位推荐 + /// + /// + [HttpPost("create-by-recommend")] + public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto) + { + List useBalancesOut = new EditableList(); + 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> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List useBalancesOut) + { + List jobs = new EditableList(); + + 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.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 useBalances = new List(); + 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(); + job.FacDetails = new List(); + 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); + 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> BuildExpectOutAsync(List balanceDtos) + { + return ObjectMapper.Map, List>(balanceDtos); + } + + /// + /// 给立体库发送 + /// + /// + public async Task SendDimensionalStorehouseAsync() + { + throw new System.NotImplementedException(); + } + /// + /// 创建补料记录实体 + /// + /// + /// + private async Task BuildUnplannedIssueNoteAsync(UnplannedIssueJob unplannedIssueJobDto) + { + //var createInput = + // ObjectMapper.Map(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(); + 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; + } + + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs index 563028731..a13eac32b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs +++ b/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; } /// @@ -59,4 +76,36 @@ public abstract class UnplannedIssueRequestAppService : var dto = ObjectMapper.Map(entity); return dto; } + + [HttpPost("import")] + [Consumes("multipart/form-data")] + + public override async Task 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(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 errors = new List(); + + //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 = "" }); + } + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index a0678442f..2d88eecfd 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/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, - ITransactionTypeAclService transactionTypeAclService - ) : base(repository, unplannedIssueRequestManager) + IDepartmentAppService departmentApp, IBalanceAppService balanceAppService, ILocationAppService locationAppService, IExportImportService excelService, + ITransactionTypeAclService transactionTypeAclService + ) : 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) - //{ - // entity.DirectCreateNote = true; - //} - //else - //{ - - //} await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false); var dto = ObjectMapper.Map(entity); return dto; } + /// + /// 自定义导入接口 + /// + /// + /// + /// + /// + [HttpPost("import-dongyang")] + public async Task 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(inputFileBytes).ToList(); + await CreateByDYOAsync(importList).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); + } + } + + + /// + /// OA接口 + /// + /// + /// + [HttpPost("create-dongyang")] + + public async Task CreateByAsync(List p_list) + { + + return await CreateByDYOAsync(p_list, true).ConfigureAwait(false); + } + + + + + protected async Task CreateByDYOAsync(List 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 detailList = new List(); + 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(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; + + } + + + + + + + + + /// /// 用来重写 导入数据时可以加工数据 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs index 7090ef78a..eea6611b1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs @@ -53,6 +53,17 @@ public class UnplannedIssueJob : SfsJobAggregateRootBase Details { get; set; } = new List(); + + /// + /// 任务明细 + /// + [IgnoreUpdate] + public List FacDetails { get; set; } = new List(); + + + + + /// /// 设置任务明细的实际库位和实际数量 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobDetail.cs index b582ac4af..2c8b04501 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobDetail.cs +++ b/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(); + /// + /// 说明 + /// + [Display(Name = "说明")] + public string Explain { get; set; } +} +public class UnplannedIssueJobFacDetail : SfsJobRecommendFromDetailEntityBase, IHasExtraProperties +{ + /// + /// 原因代码 + /// + public string ReasonCode { get; set; } + + /// + /// 专案 + /// + [Display(Name = "专案")] + public string CaseCode { get; set; } + + /// + /// 项目分类 + /// + [Display(Name = "项目分类")] + public string ProjCapacityCode { get; set; } + + /// + /// 次交易码 + /// + [Display(Name = "次交易码")] + public string OnceBusiCode { get; set; } + + /// + /// 扩展属性 + /// + public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary(); + + /// /// 说明 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs index 1f01d454f..b065dcbf9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJobManager.cs @@ -35,7 +35,7 @@ public class UnplannedIssueJobManager : SfsJobManagerBase new { q.PackingCode }).IsUnique(); }); + //builder.Entity(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(); + //}); + + + } } From f3d05af16d596b846e4f79c9eb05aea4dbcf67e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Sat, 12 Oct 2024 08:49:44 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS/v17/.wsuo | Bin 0 -> 16896 bytes .vs/WMS/v17/DocumentLayout.json | 39 ++++++ .../Enums/Store/EnumUnplannedIssueType.cs | 7 + .../DTOs/UnplannedIssueJobDTO.cs | 9 ++ .../DTOs/UnplannedIssueJobDetailDTO.cs | 36 +++++ .../IUnplannedIssueJobAppService.cs | 4 + .../Inputs/UnplannedIssueRequestEditInput.cs | 12 ++ .../UnplannedIssueJobAppService.cs | 124 ++++++++++++++---- ...lannedIssueRequestForDongyangAppService.cs | 17 ++- .../UnplannedIssueJobs/UnplannedIssueJob.cs | 3 +- ...ssueJobDbContextModelCreatingExtensions.cs | 32 ++--- .../UnplannedIssueRequestEventHandler.cs | 30 ++++- 12 files changed, 261 insertions(+), 52 deletions(-) create mode 100644 .vs/WMS/v17/.wsuo create mode 100644 .vs/WMS/v17/DocumentLayout.json diff --git a/.vs/WMS/v17/.wsuo b/.vs/WMS/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..308a39d56d5652d44c099d669d184b6114e54e83 GIT binary patch literal 16896 zcmeHOUyK_^86T%DPzsci5}+;VsfwzivWIuQ_S!*Im%B?zP_7}pOH!y&*+2H>5?_3> zFX=_lHy)4>&mbWLNUcB!Aywi9gpjCs0;E)xcmW>TKJZXgs(1n+n(+J0?AT-9?t0I@ zUjE=Yt#@~JX1`~2gF@Hn%^~|*W9VM|9$->j(v#J|8jB6=y_suw%m8BY;o6NS`(@eELgg;;|O6dLOU|Z4Hp0-!_Z5Vag5u zUvKSs;ZqLvaEpK$0Mo1Zqu+a0VmuV*@Rmex-A~_V#(+=%lQdu%hCh!vG%$w?@W$J~ z2r2PJ)U`3kjf5FFz(3bbU6XhHO@)j0f0gs&tZ!Ym>gk7doLG6sC&J`MhplI9VjAX2;|agn|f zxqd-@qDNHdCRao_c0qz z+MjYa34Hni?B5?_V-Bym%cS$q4Jf0bqTOJFN$LhidT-wf2Ij|s#N78Jg>;|CwIB|Q zx;PCDL;csqa}^rjf$sP4+=cGb-e?`)>7O$;uER%Lg08HOJq704o)upkyMLc=#~Xrn zn=&MX$;qej&XJE55h$B~R_`tQ$?U`D)UqrN-Sh5|$G`jgV=w>p=U4Z?boSm8;?>{$ z^OIdwRPFQqGIm=6ZCkJ` zYke^ONDF;@uVizN~ z=tY%kMIu$YOB`oyPGIwF-dbKcT*TiueBZI{vTs{8&vq=g>;+b>=z3NZ1fCuGP8dbb z3-g~tbGu}-gWU|Bq7%6m#s|n^DYR^Y3{U7qYmfK~>5;0C|PAG)@H0l_0GWI_ON>C!18|n7E z#QqGb@V}UE)cZ^QFX>OF|6|5jOVY3K<4njb=+FGaML>?klbC}qvt)xF={WH(^XZf} zmMr*ZlfjfdZm^0FF7T5cfL%q9wlAt($6Qgvs%rHW3vASdT(Ied{;b@)oZYi?m_O- zbDPCXh&^KBwfAiG^Pn5;39---^sdR(b=aGv`dPU~?m@F1_nuYWvu~A5{?z%}I%cmk zh&J$}*0mq&T8Y;+2;G4)c7%)H8m?06Z0g8FGBd~#Df=oTtMV-0oET%5rBu_dD!%FK zo4U+?XgZOHE=e3RCOI!@#_ZJ}CZ2(YY;pymCDSIY-sH#Ro>|;Si}IflD^dD)QSyV2 z`7sJ3ceL^%a^{3@?c!>eFg7D+#_Lwstvr=@K?qa$S(m}l)(>WyxZvC z#22;+7GNDTRp%+rjo^uNZ&c%CSiXFzJ-5petw3wnp^@UuVo;uZ zN&j;_>80KK@5B((C`2hpvp2d=dYg0&tj&#HSIWbI)!AW(d(rG)jb2>Ity_0dv znC0v7ItN?iw|kTo?ldV*A}&|)rmPPwp^BG&cGF-}TNv5{GkVedMsM@=n`X9Yv`^O7 z$*oQP)2n2@BN|~#)M&}JbOrQY2i@tzlJd-S(g*Y5l`$)9#{WfFKU!2~2wZ6~Jy_1F z^r}j+eQjct5-egBcCv=Hw)D2>dAU+kFv4j|h}4vQZ*LTIogY@QX+LAD@)bUyI{2gg zZpc~Mfahb5wDdM$a!xh;vK?)_hp$c4(Pk@8at*Um*=O>82yL=~Hm#o3X2xKvkZrYZ zZ%mWsq%%FF3OIqk#HAI1XGZ+o7UdQgaa7Dq5ng zp|z*?t2}$=t$%gXNONEJ_#?F@GyZoLviWATXOm`wsO|UO@}CE70>q>Z$Ord~=zDMX z476_3G-STw{KPcudjQl@^tc#-o6(w%n0VfS`!>vQj zg|wGJ6Y5z;Lm_HhXoLvQKJ)SV7}I zYyBqt6JclrG1j^)qXe;md?9158bdDhVBd0eY62A)P<9jXRb0I zF@8CO9iPDykX?8KXW)}F%QGu~vqoojjpfDPJ^OCVG@=tzFpSHXiG4MaNhHn=D literal 0 HcmV?d00001 diff --git a/.vs/WMS/v17/DocumentLayout.json b/.vs/WMS/v17/DocumentLayout.json new file mode 100644 index 000000000..a80109f71 --- /dev/null +++ b/.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}" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumUnplannedIssueType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumUnplannedIssueType.cs index b3f978c88..57d1d6c01 100644 --- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumUnplannedIssueType.cs +++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumUnplannedIssueType.cs @@ -12,4 +12,11 @@ public enum EnumUnplannedIssueType Raw = 1,//原料 非生产领料 [Display(Name = "线边 非生产领料")] Wip =2,//线边 非生产领料 + [Display(Name = "OA 非生产领料")] + OA = 3,//原料 非生产领料 + [Display(Name = "导入 非生产领料")] + IMPORT = 4,//原料 非生产领料 + + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDTO.cs index 5eaedb099..2738abfcd 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDTO.cs @@ -1,7 +1,9 @@ using System; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -48,4 +50,11 @@ public class UnplannedIssueJobDTO : SfsJobDTOBase [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] public string OANumber { get; set; } + /// + /// 实际明细 + /// + [Display(Name = "实际明细")] + public List FacDetails; + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDetailDTO.cs index c5e5a72ba..06803f8fa 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/DTOs/UnplannedIssueJobDetailDTO.cs +++ b/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 = "说明")] public string Explain { get; set; } } + +public class UnplannedIssueJobFacDetailDTO : SfsJobRecommendFromDetailDTOBase +{ + /// + /// 原因代码 + /// + [Display(Name = "原因代码")] + public string ReasonCode { get; set; } + + /// + /// 专案 + /// + [Display(Name = "专案")] + public string CaseCode { get; set; } + + /// + /// 项目分类 + /// + [Display(Name = "项目分类")] + public string ProjCapacityCode { get; set; } + + /// + /// 次交易码 + /// + [Display(Name = "次交易码")] + public string OnceBusiCode { get; set; } + + /// + /// 说明 + /// + [Display(Name = "说明")] + public string Explain { get; set; } +} + + + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs index c8e90b994..7b698d394 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedIssueJobs/IUnplannedIssueJobAppService.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -6,4 +7,7 @@ public interface IUnplannedIssueJobAppService : ISfsJobAppServiceBase { Task CancelByRequestNumberAsync(string number); + + Task CreateByRecommendAsync(UnplannedIssueRequest requestDto); + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs index d7b026c96..4f5bbe640 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/UnplannedIssueRequests/Inputs/UnplannedIssueRequestEditInput.cs +++ b/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.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; namespace Win_in.Sfs.Wms.Store.Application.Contracts; @@ -59,6 +60,17 @@ public class UnplannedIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInput public class UnplannedIssueRequestImportDto { + /// + /// 部门代码 + /// + [Display(Name = "部门代码")] + public string DeptCode { get; set; } + + /// + /// 部门名称 + /// + [Display(Name = "部门名称")] + public string DeptName { get; set; } /// /// 料号 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index f4f1f1a54..8edbbf73c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -7,6 +8,7 @@ using Irony; using Microsoft.AspNetCore.Authorization; 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; @@ -65,17 +67,47 @@ public class UnplannedIssueJobAppService /// /// [HttpPost("create-by-recommend")] - public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto) + public async Task CreateByRecommendAsync(UnplannedIssueRequest requestDto) { List useBalancesOut = new EditableList(); var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false); - await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false); + 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; + } await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); } - + + public List DeductInventory(List inventory, decimal quantityToDeduct) + { + List balanceDTOs = new List(); + decimal totalDeducted = 0; + foreach (var item in inventory) + { + decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); + item.Qty -= availableToDeduct; + totalDeducted += availableToDeduct; + BalanceDTO dto = new BalanceDTO(); + dto.InjectFrom(item); + dto.Qty = availableToDeduct; + balanceDTOs.Add(dto); + // 如果已经扣减达到所需数量,退出循环 + if (totalDeducted >= quantityToDeduct) + { + break; + } + } + // 返回实际扣减的库存数量 + return balanceDTOs; + } + + @@ -83,13 +115,16 @@ public class UnplannedIssueJobAppService - private async Task> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List useBalancesOut) + + + + private async Task> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List useBalancesOut) { List jobs = new EditableList(); foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细 { - var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false);//获取存放库位 + var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).ConfigureAwait(false);//获取存放库位 var input = new RecommendBalanceRequestInput { ItemCode = requestDtoDetail.ItemCode, @@ -98,6 +133,8 @@ public class UnplannedIssueJobAppService Locations = locationCodes.Select(p => p.Code).ToList(), IsPackingCode = false }; + + var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存 usableList = usableList .OrderBy(p => p.Lot) @@ -110,35 +147,60 @@ public class UnplannedIssueJobAppService decimal qty = 0; //实际要用库存 List useBalances = new List(); - 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); + + var returnlist=DeductInventory(usableList, requestDtoDetail.Qty); + + + + + useBalances.AddRange(returnlist); + useBalancesOut.AddRange(returnlist); + + + + //foreach (var balanceDto in usableList) + //{ + // decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty); + // balanceDto.Qty -= availableToDeduct; + // qty += availableToDeduct; + // if (qty >= balanceDto.Qty) + // break; + // if (qty >= requestDtoDetail.Qty) + // { + // break; + // } + // if (qty + balanceDto.Qty > requestDtoDetail.Qty) + // { + // qty += requestDtoDetail.Qty - balanceDto.Qty; + // } + // else + // { + // qty += balanceDto.Qty; + // } + // if (qty > 0) + // { + // useBalances.Add(balanceDto); + // useBalancesOut.Add(balanceDto); + // } + //} + if (returnlist.Count == 0) + { + throw new UserFriendlyException("库存余额不够!"); } foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) { var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); var job = new UnplannedIssueJob(); - + job.SetId(GuidGenerator.Create()); job.UnplannedIssueRequestNumber= requestDto.Number; job.JobType = EnumJobType.UnplannedIssueJob; job.JobStatus = EnumJobStatus.Open; job.IsAutoComplete = false; job.OANumber = requestDto.OANumber; + job.Number =await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); + job.Details = new List(); job.FacDetails = new List(); job.WarehouseCode = balanceDtoGroup.First().WarehouseCode; @@ -146,11 +208,15 @@ public class UnplannedIssueJobAppService 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.ReasonCode = requestDtoDetail.ReasonCode; jobDetail.ItemCode = requestDtoDetail.ItemCode; jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1; jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2; @@ -165,11 +231,14 @@ public class UnplannedIssueJobAppService jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; 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.ReasonCode = requestDtoDetail.ReasonCode; jobfacDetail.ItemCode = requestDtoDetail.ItemCode; jobfacDetail.ItemDesc1 = requestDtoDetail.ItemDesc1; jobfacDetail.ItemDesc2 = requestDtoDetail.ItemDesc2; @@ -182,6 +251,8 @@ public class UnplannedIssueJobAppService jobfacDetail.RecommendProduceDate = balanceDto.ProduceDate; jobfacDetail.RecommendQty = balanceDto.Qty; jobfacDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; + + //jobDetail.recommendRecommendToLocationArea = balanceDto.LocationArea; //jobDetail.RecommendToLocationCode = balanceDto.LocationCode; //jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode; @@ -190,8 +261,11 @@ public class UnplannedIssueJobAppService job.Details.Add(jobDetail); job.FacDetails.Add(jobfacDetail); - } + + + + //job.SetProperty("details", System.Text.Json.JsonSerializer.Serialize(job.Details)); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 2d88eecfd..b02c2ccaa 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -93,7 +93,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA await file.OpenReadStream().CopyToAsync(ms).ConfigureAwait(false); var inputFileBytes = ms.GetAllBytes(); var importList = _excelService.Import(inputFileBytes).ToList(); - await CreateByDYOAsync(importList).ConfigureAwait(false); + await CreateByDYOAsync(importList, EnumUnplannedIssueType.IMPORT).ConfigureAwait(false); //if (errors.Count > 0) @@ -123,16 +123,23 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA public async Task CreateByAsync(List p_list) { - return await CreateByDYOAsync(p_list, true).ConfigureAwait(false); + return await CreateByDYOAsync(p_list, EnumUnplannedIssueType.OA, true).ConfigureAwait(false); } - protected async Task CreateByDYOAsync(List p_list, bool isAutoSubmit=false) + protected async Task CreateByDYOAsync(List 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; @@ -142,8 +149,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA List detailList = new List(); foreach (var itm in p_list) { - var detail = new UnplannedIssueRequestDetail(); - + var detail = new UnplannedIssueRequestDetail(); detail.ItemCode = itm.ItemCode; detail.Qty = itm.Qty; detail.LocationErpCode = itm.LocationErpCode; @@ -151,7 +157,6 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA detail.WarehouseCode ="Random"; detail.LocationGroup ="Random"; detail.LocationArea = "Random"; - await SetDetailPropertiesAsync(detail).ConfigureAwait(false); detailList.Add(detail); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs index eea6611b1..922a5f395 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/UnplannedIssueJobs/UnplannedIssueJob.cs +++ b/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.Threading.Tasks; using Volo.Abp.Data; +using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; @@ -59,7 +60,7 @@ public class UnplannedIssueJob : SfsJobAggregateRootBase [IgnoreUpdate] public List FacDetails { get; set; } = new List(); - + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs index 7c59346fa..6a02063b6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs @@ -48,24 +48,24 @@ public static class UnplannedIssueJobDbContextModelCreatingExtensions //Indexes //b.HasIndex(q => new { q.PackingCode }).IsUnique(); }); - //builder.Entity(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 + builder.Entity(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 + //Relations + //None - // //Indexes - // //b.HasIndex(q => new { q.PackingCode }).IsUnique(); - //}); + //Indexes + //b.HasIndex(q => new { q.PackingCode }).IsUnique(); + }); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs index 233965ef9..db0b9bf9f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/UnplannedIssueRequestEventHandler.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; +using System.Text.Json.Nodes; using System.Threading.Tasks; +using Omu.ValueInjecter; using Volo.Abp.Domain.Entities; using Volo.Abp.EventBus; using Volo.Abp.ObjectMapping; @@ -93,8 +95,21 @@ public class UnplannedIssueRequestEventHandler } else { - var job = await BuildUnplannedIssueJobCreateInputAsync(entity).ConfigureAwait(false); - await _unplannedIssueJobApp.CreateAsync(job).ConfigureAwait(false); + 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); + } + } } public virtual async Task HandleEventAsync(SfsRefusedEntityEventData eventData) @@ -171,19 +186,26 @@ public class UnplannedIssueRequestEventHandler { await Task.CompletedTask.ConfigureAwait(false); var createInput = ObjectMapper.Map(entity); + + + + createInput.UnplannedIssueRequestNumber = entity.Number; createInput.JobType = EnumJobType.UnplannedIssueJob; createInput.JobStatus = EnumJobStatus.Open; createInput.IsAutoComplete = entity.AutoCompleteJob; + createInput.Worker = string.IsNullOrEmpty(createInput.Worker)?"导入":createInput.Worker; + createInput.Details = new List(); foreach (var inputDetail in entity.Details) { var detail = ObjectMapper.Map(inputDetail); - + 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.WarehouseCode = createInput.Details[0].RecommendFromWarehouseCode; From a1ef0d27cc740e3b74f51cd38c1ed596f30c7e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Sat, 12 Oct 2024 10:49:58 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnplannedIssueJobAppService.cs | 46 +++++++++---------- .../UnplannedIssueRequestAppService.cs | 29 +----------- ...lannedIssueRequestForDongyangAppService.cs | 18 +++++++- ...ssueJobDbContextModelCreatingExtensions.cs | 3 ++ 4 files changed, 43 insertions(+), 53 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index 8edbbf73c..d17fe8e41 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -133,8 +133,6 @@ public class UnplannedIssueJobAppService Locations = locationCodes.Select(p => p.Code).ToList(), IsPackingCode = false }; - - var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);//获取推荐库存 usableList = usableList .OrderBy(p => p.Lot) @@ -147,13 +145,7 @@ public class UnplannedIssueJobAppService decimal qty = 0; //实际要用库存 List useBalances = new List(); - - var returnlist=DeductInventory(usableList, requestDtoDetail.Qty); - - - - useBalances.AddRange(returnlist); useBalancesOut.AddRange(returnlist); @@ -200,7 +192,6 @@ public class UnplannedIssueJobAppService job.IsAutoComplete = false; job.OANumber = requestDto.OANumber; job.Number =await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); - job.Details = new List(); job.FacDetails = new List(); job.WarehouseCode = balanceDtoGroup.First().WarehouseCode; @@ -229,6 +220,17 @@ public class UnplannedIssueJobAppService 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(); @@ -251,25 +253,21 @@ public class UnplannedIssueJobAppService jobfacDetail.RecommendProduceDate = balanceDto.ProduceDate; jobfacDetail.RecommendQty = balanceDto.Qty; jobfacDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; + jobfacDetail.StdPackQty = requestDtoDetail.StdPackQty; + jobfacDetail.RecommendPackingCode = balanceDto.PackingCode; + jobfacDetail.HandledPackingCode = balanceDto.PackingCode; - - //jobDetail.recommendRecommendToLocationArea = balanceDto.LocationArea; - //jobDetail.RecommendToLocationCode = balanceDto.LocationCode; - //jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode; - //jobDetail.RecommendToLocationGroup = balanceDto.LocationGroup; - //jobDetail.RecommendToWarehouseCode = balanceDto.WarehouseCode; + 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); - } - - - - - - //job.SetProperty("details", System.Text.Json.JsonSerializer.Serialize(job.Details)); - - + } if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的 { await SendDimensionalStorehouseAsync().ConfigureAwait(false); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs index a13eac32b..a46cd917a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestAppService.cs @@ -77,34 +77,7 @@ public abstract class UnplannedIssueRequestAppService : return dto; } - [HttpPost("import")] - [Consumes("multipart/form-data")] - - public override async Task 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(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 errors = new List(); - - //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 = "" }); - } + diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index b02c2ccaa..463d655ff 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -137,8 +137,8 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA { throw new UserFriendlyException("导入内容为空请填写!"); } + var first = p_list.FirstOrDefault(); - request.UnplannedIssueType = type; request.SetId(GuidGenerator.Create()); request.AutoCompleteJob = false; @@ -146,17 +146,33 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA request.AutoAgree = false; request.AutoHandle = false; request.DirectCreateNote = false; + request.DeptCode = first.DeptCode; + request.DeptName = first.DeptName; + + + List detailList = new List(); 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); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs index 6a02063b6..a4ffa4a30 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/UnplannedIssueJobs/UnplannedIssueJobDbContextModelCreatingExtensions.cs +++ b/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); //Relations b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); + b.HasMany(q => q.FacDetails).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); + + //Indexes b.HasIndex(q => new { q.Number }).IsUnique(); }); From dd21f530204b0f718a108aebe97c1980ae2ba537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Sat, 12 Oct 2024 11:36:26 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs index d17fe8e41..ce0a0f5b4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs @@ -84,7 +84,7 @@ public class UnplannedIssueJobAppService - public List DeductInventory(List inventory, decimal quantityToDeduct) + private List DeductInventory(List inventory, decimal quantityToDeduct) { List balanceDTOs = new List(); decimal totalDeducted = 0; @@ -290,7 +290,7 @@ public class UnplannedIssueJobAppService /// 给立体库发送 /// /// - public async Task SendDimensionalStorehouseAsync() + private async Task SendDimensionalStorehouseAsync() { throw new System.NotImplementedException(); }