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&tjHSIWbI)!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();
}