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();
+ //});
+
+
+
}
}