diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
index b0754f55c..2e7ede825 100644
Binary files a/.vs/slnx.sqlite and b/.vs/slnx.sqlite differ
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs
index 830f91326..a766181d0 100644
--- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs
@@ -492,21 +492,36 @@ public class BalanceController : AbpController
///
///
///
+ ///
///
[HttpPost("get-recommend-balance")]
- public async Task> GetRecommendBalance(string itemCode,string productLine)
+ public async Task> GetRecommendBalance(string itemCode,string productLine,bool isPackingCode)
{
var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync(productLine, itemCode).ConfigureAwait(false);
+ var locationList = new List();
+ if (productionLineItemDto.RawLocationCodeListJson != null&&
+ productionLineItemDto.RawLocationCodeListJson.Length > 0)
+ {
+ var temp=JsonSerializer.Deserialize>(productionLineItemDto.RawLocationCodeListJson);
+ locationList.AddRange(temp);
+ }
+
+ if (productionLineItemDto.ProductLocationCodeListJson != null &&
+ productionLineItemDto.ProductLocationCodeListJson.Length > 0)
+ {
+ var temp = JsonSerializer.Deserialize>(productionLineItemDto.ProductLocationCodeListJson);
+ locationList.AddRange(temp);
+ }
+
//获取可用库存
var input = new RecommendBalanceRequestInput
{
ItemCode = itemCode,
Qty = decimal.MaxValue,
Statuses = new EditableList { EnumInventoryStatus.OK },
- Locations =
- JsonSerializer.Deserialize>(productionLineItemDto.RawLocationCodeListJson),
- IsPackingCode = true
+ Locations = locationList,
+ IsPackingCode = isPackingCode
};
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobController.cs
index 2efe34c7d..3826740d3 100644
--- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobController.cs
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobController.cs
@@ -240,7 +240,7 @@ public class IssueJobController : AbpController
[HttpGet("check-job-exist")]
public virtual async Task> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode)
{
- return await _issueJobAppService.CheckJobExistByItemCodeAndLocationCode(itemCode, locationCode).ConfigureAwait(false);
+ return await _issueJobAppService.CheckJobExistByItemCodeAndLocationCodeAsync(itemCode, locationCode).ConfigureAwait(false);
}
///
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/AssembleIssueJobsController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/AssembleIssueJobsController.cs
new file mode 100644
index 000000000..b39bd3b49
--- /dev/null
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/AssembleIssueJobsController.cs
@@ -0,0 +1,188 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.AspNetCore.Mvc;
+using Win_in.Sfs.Auth.Application.Contracts;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Wms.Store.Application.Contracts;
+
+namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs.IssueJobs;
+
+///
+/// 装配叫料PDA任务
+///
+[ApiController]
+[Route($"{PdaHostConst.ROOT_ROUTE}job/assemble-issue")]
+public class AssembleIssueJobsController : AbpController
+{
+ private readonly IAssembleIssueJobAppService _assembleIssueJobAppService;
+
+ private readonly IUserWorkGroupAppService _userWorkGroupAppService;
+
+ public AssembleIssueJobsController(IAssembleIssueJobAppService assembleIssueJobAppService, IUserWorkGroupAppService userWorkGroupAppService)
+ {
+ _assembleIssueJobAppService = assembleIssueJobAppService;
+ _userWorkGroupAppService = userWorkGroupAppService;
+ }
+
+ ///
+ /// 获取列表
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("list")]
+ public virtual async Task> GetListAsync(int pageSize, int pageIndex,
+ bool isFinished)
+ {
+ var status = new List();
+ if (isFinished)
+ {
+ status.Add((int)EnumJobStatus.Done);
+ }
+ else
+ {
+ status.Add((int)EnumJobStatus.Open);
+ status.Add((int)EnumJobStatus.Wait);
+ status.Add((int)EnumJobStatus.Doing);
+ status.Add((int)EnumJobStatus.Partial);
+ }
+
+ var jsonStatus = JsonSerializer.Serialize(status);
+
+ var request = new SfsJobRequestInputBase
+ {
+ MaxResultCount = pageSize,
+ SkipCount = (pageIndex - 1) * pageSize,
+ Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
+ Condition = new Condition
+ {
+ Filters = new List { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
+ }
+ };
+
+ var list = await _assembleIssueJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
+
+ return list;
+ }
+
+ ///
+ /// 承接任务
+ ///
+ ///
+ ///
+ [HttpPost("take/{id}")]
+ public virtual async Task TakeAsync(Guid id)
+ {
+ await _assembleIssueJobAppService.AcceptAsync(id).ConfigureAwait(false);
+ }
+
+ ///
+ /// 取消承接任务
+ ///
+ ///
+ ///
+ [HttpPost("cancel-take/{id}")]
+ public virtual async Task CancelTakeAsync(Guid id)
+ {
+ await _assembleIssueJobAppService.CancelAcceptAsync(id).ConfigureAwait(false);
+ }
+
+ ///
+ /// 执行任务明细
+ ///
+ ///
+ [HttpPost("ExecuteDetail/{masterId}")]
+ public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, AssembleIssueJobDetailDTO issueJobDetailDto)
+ {
+ await _assembleIssueJobAppService.ExecuteDetailAsync(masterId, detailId, issueJobDetailDto).ConfigureAwait(false);
+ }
+
+ ///
+ /// 获取任务数量
+ ///
+ ///
+ [HttpGet("count")]
+ public virtual async Task> CountAsync()
+ {
+ var status = new List
+ {
+ (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial, (int)EnumJobStatus.Wait
+ };
+ var jsonStatus = JsonSerializer.Serialize(status);
+
+ var request = new SfsJobRequestInputBase
+ {
+ Sorting = $"{nameof(InspectJobDTO.Priority)} ASC",
+ Condition = new Condition
+ {
+ Filters = new List
+ {
+ //new(nameof(InspectJobDTO.WorkGroupCode),jsonCodes,"In"),
+ new(nameof(InspectJobDTO.JobStatus), jsonStatus, "In")
+ }
+ }
+ };
+
+ var count = await _assembleIssueJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false);
+
+ return Ok(count);
+ }
+
+ ///
+ /// 获取任务详情
+ ///
+ ///
+ ///
+ [HttpGet("{id}")]
+ public virtual async Task> GetAsync(Guid id)
+ {
+ var result = await _assembleIssueJobAppService.GetAsync(id).ConfigureAwait(false);
+ return Ok(result);
+ }
+
+ ///
+ /// 根据Job Number 获取盘点任务列表
+ ///
+ ///
+ ///
+ [HttpGet("by-number/{jobNumber}")]
+ public virtual async Task> GetByNumberAsync(string jobNumber)
+ {
+ var jobDto = await _assembleIssueJobAppService.GetByNumberAsync(jobNumber).ConfigureAwait(false);
+ if (jobDto == null)
+ {
+ throw new UserFriendlyException($"未找到编号为 {jobNumber} 的任务");
+ }
+
+ var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
+ if (!wlgCodes.Contains(jobDto.WorkGroupCode))
+ {
+ return new NotFoundObjectResult($"任务属于工作组 {jobDto.WorkGroupCode}");
+ }
+
+ if (jobDto.JobStatus == EnumJobStatus.Doing && jobDto.AcceptUserId != CurrentUser.Id)
+ {
+ return new NotFoundObjectResult($"任务正在被 {jobDto.AcceptUserName} 处理");
+ }
+
+ return jobDto;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("by-request-number/{requestNumber}")]
+ public virtual async Task> GetByRequestNumberAsync(string requestNumber)
+ {
+ return await _assembleIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
+ }
+}
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/CoatingIssueJobsController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/CoatingIssueJobsController.cs
new file mode 100644
index 000000000..a098b5477
--- /dev/null
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/CoatingIssueJobsController.cs
@@ -0,0 +1,188 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.AspNetCore.Mvc;
+using Win_in.Sfs.Auth.Application.Contracts;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Wms.Store.Application.Contracts;
+
+namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs.IssueJobs;
+
+///
+/// 涂装叫料PDA任务
+///
+[ApiController]
+[Route($"{PdaHostConst.ROOT_ROUTE}job/coating-issue")]
+public class CoatingIssueJobsController : AbpController
+{
+ private readonly ICoatingIssueJobAppService _coatingIssueJobAppService;
+
+ private readonly IUserWorkGroupAppService _userWorkGroupAppService;
+
+ public CoatingIssueJobsController(ICoatingIssueJobAppService coatingIssueJobAppService, IUserWorkGroupAppService userWorkGroupAppService)
+ {
+ _coatingIssueJobAppService = coatingIssueJobAppService;
+ _userWorkGroupAppService = userWorkGroupAppService;
+ }
+
+ ///
+ /// 获取列表
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("list")]
+ public virtual async Task> GetListAsync(int pageSize, int pageIndex,
+ bool isFinished)
+ {
+ var status = new List();
+ if (isFinished)
+ {
+ status.Add((int)EnumJobStatus.Done);
+ }
+ else
+ {
+ status.Add((int)EnumJobStatus.Open);
+ status.Add((int)EnumJobStatus.Wait);
+ status.Add((int)EnumJobStatus.Doing);
+ status.Add((int)EnumJobStatus.Partial);
+ }
+
+ var jsonStatus = JsonSerializer.Serialize(status);
+
+ var request = new SfsJobRequestInputBase
+ {
+ MaxResultCount = pageSize,
+ SkipCount = (pageIndex - 1) * pageSize,
+ Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
+ Condition = new Condition
+ {
+ Filters = new List { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
+ }
+ };
+
+ var list = await _coatingIssueJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
+
+ return list;
+ }
+
+ ///
+ /// 承接任务
+ ///
+ ///
+ ///
+ [HttpPost("take/{id}")]
+ public virtual async Task TakeAsync(Guid id)
+ {
+ await _coatingIssueJobAppService.AcceptAsync(id).ConfigureAwait(false);
+ }
+
+ ///
+ /// 取消承接任务
+ ///
+ ///
+ ///
+ [HttpPost("cancel-take/{id}")]
+ public virtual async Task CancelTakeAsync(Guid id)
+ {
+ await _coatingIssueJobAppService.CancelAcceptAsync(id).ConfigureAwait(false);
+ }
+
+ ///
+ /// 执行任务明细
+ ///
+ ///
+ [HttpPost("ExecuteDetail/{masterId}")]
+ public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, CoatingIssueJobDetailDTO issueJobDetailDto)
+ {
+ await _coatingIssueJobAppService.ExecuteDetailAsync(masterId, detailId, issueJobDetailDto).ConfigureAwait(false);
+ }
+
+ ///
+ /// 获取任务数量
+ ///
+ ///
+ [HttpGet("count")]
+ public virtual async Task> CountAsync()
+ {
+ var status = new List
+ {
+ (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial, (int)EnumJobStatus.Wait
+ };
+ var jsonStatus = JsonSerializer.Serialize(status);
+
+ var request = new SfsJobRequestInputBase
+ {
+ Sorting = $"{nameof(InspectJobDTO.Priority)} ASC",
+ Condition = new Condition
+ {
+ Filters = new List
+ {
+ //new(nameof(InspectJobDTO.WorkGroupCode),jsonCodes,"In"),
+ new(nameof(InspectJobDTO.JobStatus), jsonStatus, "In")
+ }
+ }
+ };
+
+ var count = await _coatingIssueJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false);
+
+ return Ok(count);
+ }
+
+ ///
+ /// 获取任务详情
+ ///
+ ///
+ ///
+ [HttpGet("{id}")]
+ public virtual async Task> GetAsync(Guid id)
+ {
+ var result = await _coatingIssueJobAppService.GetAsync(id).ConfigureAwait(false);
+ return Ok(result);
+ }
+
+ ///
+ /// 根据Job Number 获取盘点任务列表
+ ///
+ ///
+ ///
+ [HttpGet("by-number/{jobNumber}")]
+ public virtual async Task> GetByNumberAsync(string jobNumber)
+ {
+ var jobDto = await _coatingIssueJobAppService.GetByNumberAsync(jobNumber).ConfigureAwait(false);
+ if (jobDto == null)
+ {
+ throw new UserFriendlyException($"未找到编号为 {jobNumber} 的任务");
+ }
+
+ var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
+ if (!wlgCodes.Contains(jobDto.WorkGroupCode))
+ {
+ return new NotFoundObjectResult($"任务属于工作组 {jobDto.WorkGroupCode}");
+ }
+
+ if (jobDto.JobStatus == EnumJobStatus.Doing && jobDto.AcceptUserId != CurrentUser.Id)
+ {
+ return new NotFoundObjectResult($"任务正在被 {jobDto.AcceptUserName} 处理");
+ }
+
+ return jobDto;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("by-request-number/{requestNumber}")]
+ public virtual async Task> GetByRequestNumberAsync(string requestNumber)
+ {
+ return await _coatingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
+ }
+}
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs
index ec1fa3df7..ad37cc954 100644
--- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs
@@ -14,6 +14,7 @@ using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs.IssueJobs;
///
+/// kitting叫料PDA任务
///
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}job/kitting-issue")]
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/AssembleRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/AssembleRequestController.cs
new file mode 100644
index 000000000..cb0b38707
--- /dev/null
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/AssembleRequestController.cs
@@ -0,0 +1,135 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.AspNetCore.Mvc;
+using Win_in.Sfs.Auth.Application.Contracts;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Wms.Store.Application.Contracts;
+
+namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
+
+///
+/// 装配叫料请求
+///
+[ApiController]
+[Route($"{PdaHostConst.ROOT_ROUTE}store/assemble-request")]
+public class AssembleRequestController : AbpController
+{
+ private readonly IAssembleIssueRequestAppService _assembleIssueRequestAppService;
+
+ private readonly IUserWorkGroupAppService _userWorkGroupAppService;
+
+ ///
+ ///
+ ///
+ public AssembleRequestController(IAssembleIssueRequestAppService assembleIssueRequestAppService,
+ IUserWorkGroupAppService userWorkGroupAppService)
+ {
+ _assembleIssueRequestAppService = assembleIssueRequestAppService;
+ _userWorkGroupAppService = userWorkGroupAppService;
+ }
+
+ ///
+ /// 装配叫料申请
+ ///
+ ///
+ ///
+ [HttpPost("")]
+ public virtual async Task CreateAsync(AssembleIssueRequestEditInput input)
+ {
+ await _assembleIssueRequestAppService.CreateAndHandleAsync(input).ConfigureAwait(false);
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("list")]
+ public virtual async Task> GetListAsync(int pageSize, int pageIndex,
+ bool isFinished)
+ {
+ var status = new List();
+ if (isFinished)
+ {
+ status.Add((int)EnumRequestStatus.Completed);
+ }
+ else
+ {
+ status.Add((int)EnumRequestStatus.Partial);
+ status.Add((int)EnumRequestStatus.Handling);
+ status.Add((int)EnumRequestStatus.New);
+ }
+
+ var jsonStatus = JsonSerializer.Serialize(status);
+
+ var request = new SfsStoreRequestInputBase
+ {
+ MaxResultCount = pageSize,
+ SkipCount = (pageIndex - 1) * pageSize,
+ Sorting = $"{nameof(AssembleIssueRequestDTO.CreationTime)} ASC",
+ Condition = new Condition
+ {
+ Filters = new List { new(nameof(AssembleIssueRequestDTO.RequestStatus), jsonStatus, "In") }
+ }
+ };
+
+ var list = await _assembleIssueRequestAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
+
+ return list;
+ }
+
+ ///
+ ///
+ ///
+ [HttpPost("handle/{id}")]
+ public virtual async Task HandleAsync(Guid id)
+ {
+ await _assembleIssueRequestAppService.HandleAsync(id).ConfigureAwait(false);
+ }
+
+ ///
+ /// 根据Job Number 获取盘点任务列表
+ ///
+ ///
+ ///
+ [HttpGet("by-number/{requestNumber}")]
+ public virtual async Task> GetByNumberAsync(string requestNumber)
+ {
+ var jobDto = await _assembleIssueRequestAppService.GetByNumberAsync(requestNumber).ConfigureAwait(false);
+ if (jobDto == null)
+ {
+ throw new UserFriendlyException($"未找到编号为 {requestNumber} 的请求");
+ }
+
+ return jobDto;
+ }
+
+ ///
+ /// 获取任务详情
+ ///
+ ///
+ ///
+ [HttpGet("{id}")]
+ public virtual async Task> GetAsync(Guid id)
+ {
+ var result = await _assembleIssueRequestAppService.GetAsync(id).ConfigureAwait(false);
+ return Ok(result);
+ }
+
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("IsHasNewJob")]
+ public virtual async Task IsHasNewJobAsync(string requestNumber, List jobNumber)
+ {
+ return await _assembleIssueRequestAppService.IsHasNewJobAsync(requestNumber, jobNumber).ConfigureAwait(false);
+ }
+}
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/CoatingRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/CoatingRequestController.cs
new file mode 100644
index 000000000..cf49a633c
--- /dev/null
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/CoatingRequestController.cs
@@ -0,0 +1,135 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.AspNetCore.Mvc;
+using Win_in.Sfs.Auth.Application.Contracts;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Wms.Store.Application.Contracts;
+
+namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
+
+///
+/// 涂装叫料请求
+///
+[ApiController]
+[Route($"{PdaHostConst.ROOT_ROUTE}store/coating-request")]
+public class CoatingRequestController : AbpController
+{
+ private readonly ICoatingIssueRequestAppService _coatingIssueRequestAppService;
+
+ private readonly IUserWorkGroupAppService _userWorkGroupAppService;
+
+ ///
+ ///
+ ///
+ public CoatingRequestController(ICoatingIssueRequestAppService coatingIssueRequestAppService,
+ IUserWorkGroupAppService userWorkGroupAppService)
+ {
+ _coatingIssueRequestAppService = coatingIssueRequestAppService;
+ _userWorkGroupAppService = userWorkGroupAppService;
+ }
+
+ ///
+ /// 涂装叫料申请
+ ///
+ ///
+ ///
+ [HttpPost("")]
+ public virtual async Task CreateAsync(CoatingIssueRequestEditInput input)
+ {
+ await _coatingIssueRequestAppService.CreateAndHandleAsync(input).ConfigureAwait(false);
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("list")]
+ public virtual async Task> GetListAsync(int pageSize, int pageIndex,
+ bool isFinished)
+ {
+ var status = new List();
+ if (isFinished)
+ {
+ status.Add((int)EnumRequestStatus.Completed);
+ }
+ else
+ {
+ status.Add((int)EnumRequestStatus.Partial);
+ status.Add((int)EnumRequestStatus.Handling);
+ status.Add((int)EnumRequestStatus.New);
+ }
+
+ var jsonStatus = JsonSerializer.Serialize(status);
+
+ var request = new SfsStoreRequestInputBase
+ {
+ MaxResultCount = pageSize,
+ SkipCount = (pageIndex - 1) * pageSize,
+ Sorting = $"{nameof(CoatingIssueRequestDTO.CreationTime)} ASC",
+ Condition = new Condition
+ {
+ Filters = new List { new(nameof(CoatingIssueRequestDTO.RequestStatus), jsonStatus, "In") }
+ }
+ };
+
+ var list = await _coatingIssueRequestAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
+
+ return list;
+ }
+
+ ///
+ ///
+ ///
+ [HttpPost("handle/{id}")]
+ public virtual async Task HandleAsync(Guid id)
+ {
+ await _coatingIssueRequestAppService.HandleAsync(id).ConfigureAwait(false);
+ }
+
+ ///
+ /// 根据Job Number 获取盘点任务列表
+ ///
+ ///
+ ///
+ [HttpGet("by-number/{requestNumber}")]
+ public virtual async Task> GetByNumberAsync(string requestNumber)
+ {
+ var jobDto = await _coatingIssueRequestAppService.GetByNumberAsync(requestNumber).ConfigureAwait(false);
+ if (jobDto == null)
+ {
+ throw new UserFriendlyException($"未找到编号为 {requestNumber} 的请求");
+ }
+
+ return jobDto;
+ }
+
+ ///
+ /// 获取任务详情
+ ///
+ ///
+ ///
+ [HttpGet("{id}")]
+ public virtual async Task> GetAsync(Guid id)
+ {
+ var result = await _coatingIssueRequestAppService.GetAsync(id).ConfigureAwait(false);
+ return Ok(result);
+ }
+
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("IsHasNewJob")]
+ public virtual async Task IsHasNewJobAsync(string requestNumber, List jobNumber)
+ {
+ return await _coatingIssueRequestAppService.IsHasNewJobAsync(requestNumber, jobNumber).ConfigureAwait(false);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs
index fdfb1d4cf..669965707 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Locations/ILocationAppService.cs
@@ -32,4 +32,5 @@ public interface ILocationAppService
Task> GetListByTypesAndErpCodeAsync(List types, string erpCode);
Task> GetListByTypesAndErpCodeAsync(List types, string erpCode,string locCode);
Task> GetListByErpLocationCodes(List ErpLocationCodes);
+ Task GetFirstRowOneAsync();
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs
index 1ad9ec748..1625440b5 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Locations/LocationAppService.cs
@@ -1,12 +1,14 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
+using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories;
+using Volo.Abp.ObjectMapping;
using Volo.Abp.Validation;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
@@ -220,6 +222,14 @@ public class LocationAppService
return ObjectMapper.Map, List>(list);
}
+ [HttpGet("get-first-row-one")]
+ public virtual async Task GetFirstRowOneAsync()
+ {
+ var first = await _repository.GetListAsync(p => p.RowCode == 1).ConfigureAwait(false);
+
+ return ObjectMapper.Map(first.FirstOrDefault());
+ }
+
protected override async Task ValidateImportModelAsync(LocationImportInput importInput, List validationRresult)
{
await base.ValidateImportModelAsync(importInput, validationRresult).ConfigureAwait(false);
diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs
index e5361fa7d..4993474fb 100644
--- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs
+++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs
@@ -47,4 +47,5 @@ public interface IExpectOutAppService
decimal qty);
Task RemoveByNumberAsync(string number);
+ Task UpdateLocationByPackingCodeAsync(string packingCode,string locationCode);
}
diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs
index 1f93d1907..efbf3d6c5 100644
--- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs
+++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs
@@ -5,7 +5,9 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
+using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
+using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Basedata.SplitPackings.Commons;
using Win_in.Sfs.Shared.Application.Contracts;
@@ -27,14 +29,15 @@ public class ExpectOutAppService
, IExpectOutAppService
{
private readonly IExpectOutManager _expectOutManager;
+ private readonly ILocationAppService _locationAppService;
public ExpectOutAppService(
IExpectOutRepository repository,
- IExpectOutManager expectOutManager
- ) : base(repository)
+ IExpectOutManager expectOutManager, ILocationAppService locationAppService) : base(repository)
{
_expectOutManager = expectOutManager;
+ _locationAppService = locationAppService;
}
[HttpPost("remove")]
@@ -64,7 +67,7 @@ public class ExpectOutAppService
if (expectOut != null)
{
expectOut.Qty -= qty;
- if (expectOut.Qty == 0)
+ if (expectOut.Qty <= 0)
{
await _repository.DeleteAsync(expectOut).ConfigureAwait(false);
}
@@ -274,4 +277,25 @@ public class ExpectOutAppService
{
return await _repository.GetListAsync(p => p.JobNumber == input.Number && p.PackingCode == input.FromPackingCode && p.Qty == input.FromQty && p.LocationCode == input.FromLocationCode).ConfigureAwait(false);
}
+
+ [HttpPost("Update-Location-By-PackingCode")]
+ public virtual async Task UpdateLocationByPackingCodeAsync(string packingCode,string locationCode)
+ {
+ var expectOut=await _repository.FindAsync(p=>p.PackingCode== packingCode).ConfigureAwait(false);
+
+ if (expectOut != null)
+ {
+ var locationDto=await _locationAppService.GetByCodeAsync(locationCode).ConfigureAwait(false);
+
+ expectOut.LocationCode = locationDto.Code;
+ expectOut.LocationArea = locationDto.AreaCode;
+ expectOut.LocationErpCode = locationDto.ErpLocationCode;
+ expectOut.WarehouseCode = locationDto.WarehouseCode;
+ expectOut.LocationGroup = locationDto.LocationGroupCode;
+
+ await _repository.UpdateAsync(expectOut).ConfigureAwait(false);
+ }
+
+ return ObjectMapper.Map(expectOut);
+ }
}
diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
index d29f32c3a..c0569f598 100644
--- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
@@ -214,8 +214,10 @@ public enum EnumTransSubType
///
[Display(Name = "导入盘点计划")]
ExcelInCountPlan = 6002,
-
-
-
+ ///
+ /// 立库出库
+ ///
+ [Display(Name = "立库出库")]
+ Depot_Out = 1510
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/IGaoTongAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/IGaoTongAppService.cs
index 13399f076..24cebd522 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/IGaoTongAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/GaoTongs/IGaoTongAppService.cs
@@ -26,4 +26,12 @@ public interface IGaoTongAppService : IApplicationService
/// 位置码列表
/// 库位信息列表
Task> GetLocationInfoByPositionCode(LocationCodeInfoEditInput input);
+
+ ///
+ /// 人工拣选反馈富维东阳WMS【我方提供】【出库、立库系统直接出库、通知我方】
+ /// 人工拣选出库缴库完成,高通WMS反馈到富维东阳WMS
+ ///
+ ///
+ ///
+ Task ManualSelection(ZuPanEditInput input);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobPermissions.cs
index def0b7ecd..e3827f3b2 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobPermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobPermissions.cs
@@ -16,10 +16,10 @@ public static class AssembleIssueJobPermissions
public static void AddAssembleIssueJobPermission(this PermissionGroupDefinition permissionGroup)
{
- var AssembleIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleIssueJob)));
- AssembleIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- AssembleIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- AssembleIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
+ var assembleIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleIssueJob)));
+ assembleIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ assembleIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ assembleIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
permissionGroup.AddPermission(AutoAssembleIssueJob, StorePermissionDefinitionProvider.L(nameof(AutoAssembleIssueJob)));
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/DTOs/AssembleIssueJobDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/DTOs/AssembleIssueJobDTO.cs
index 791161af2..e05f8d4b4 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/DTOs/AssembleIssueJobDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/DTOs/AssembleIssueJobDTO.cs
@@ -36,4 +36,6 @@ public class AssembleIssueJobDTO : SfsJobDTOBase
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
+ public EnumIssueSendType EnumIssueSendType { get; set; }
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/IAssembleIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/IAssembleIssueJobAppService.cs
index c922d9050..ab78d78ac 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/IAssembleIssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/IAssembleIssueJobAppService.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@@ -8,8 +9,15 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IAssembleIssueJobAppService
: ISfsJobAppServiceBase
{
- Task CancelByMaterialRequestAsync(string assembleNumber);
+ Task CancelByMaterialRequestAsync(string requestNumber);
Task> GetByRequestNumberAsync(string requestNumber);
+ ///
+ /// 执行任务明细
+ ///
+ ///
+ Task ExecuteDetailAsync(Guid masterId, Guid detailId, AssembleIssueJobDetailDTO issueJobDetailDto);
+
+ Task CompleteAsync(Guid id);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/Inputs/AssembleIssueJobEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/Inputs/AssembleIssueJobEditInput.cs
index 92f6458ff..fdf1a372d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/Inputs/AssembleIssueJobEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/AssembleIssueJobs/Inputs/AssembleIssueJobEditInput.cs
@@ -58,12 +58,13 @@ public class AssembleIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCre
[Display(Name = "任务明细")]
[Required(ErrorMessage = "{0}是必填项")]
public List Details { get; set; } = new();
-
///
/// 使用在途库
///
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
+
+ public EnumIssueSendType EnumIssueSendType { get; set; }
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs
index ec6f854f9..2f60d007b 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobPermissions.cs
@@ -1,7 +1,5 @@
using Volo.Abp.Authorization.Permissions;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@@ -15,9 +13,10 @@ public static class CoatingIssueJobPermissions
public static void AddCoatingIssueJobPermission(this PermissionGroupDefinition permissionGroup)
{
- var IssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(IssueJob)));
- IssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- IssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- IssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
+ var coatingIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueJob)));
+ coatingIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ coatingIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ coatingIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
+
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs
index 09951837e..6521709ea 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/DTOs/CoatingIssueJobDTO.cs
@@ -1,15 +1,14 @@
-using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
+using Microsoft.EntityFrameworkCore;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
///
-/// 发料任务
+/// 涂装叫料任务
///
-[Display(Name = "发料任务")]
+[Display(Name = "涂装叫料任务")]
public class CoatingIssueJobDTO : SfsJobDTOBase
{
///
@@ -17,37 +16,25 @@ public class CoatingIssueJobDTO : SfsJobDTOBase
///
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
-
///
- /// 生产线
+ /// 生产线
///
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
///
- /// 要货单号
+ /// 要货单号
///
[Display(Name = "要货单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
- public string MaterialRequestNumber { get; set; }
+ public string CoatingRequestNumber { get; set; }
///
- /// 使用在途库
+ /// 使用在途库
///
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
+ public EnumIssueSendType EnumIssueSendType { get; set; }
}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs
index 698d8a199..3f3f7d933 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobAppService.cs
@@ -1,15 +1,30 @@
+using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface ICoatingIssueJobAppService
: ISfsJobAppServiceBase
{
- Task CancelByMaterialRequestAsync(string coatingIssueNumber);
+ Task CancelByMaterialRequestAsync(string requestNumber);
Task> GetByRequestNumberAsync(string requestNumber);
+
+ ///
+ /// 执行任务明细
+ ///
+ ///
+ Task ExecuteDetailAsync(Guid masterId, Guid detailId, CoatingIssueJobDetailDTO issueJobDetailDto);
+
+ Task CompleteAsync(Guid id);
+
+ ///
+ /// 请求点了完成,任务全部都完成
+ ///
+ ///
+ ///
+ Task CompleteByRequestNumberAsync(string requestNumber);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs
index 2c5c3dd6d..1cb969449 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobCheckInput.cs
@@ -1,6 +1,4 @@
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-
-namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueJobCheckInput : SfsJobCheckInputBase
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs
index 64622363b..fb3b69639 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/CoatingIssueJobs/Inputs/CoatingIssueJobEditInput.cs
@@ -4,9 +4,8 @@ using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput
{
@@ -24,7 +23,7 @@ public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea
[Display(Name = "要货单号")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
- public string MaterialRequestNumber { get; set; }
+ public string KittingRequestNumber { get; set; }
///
/// 叫料类型
@@ -59,12 +58,13 @@ public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCrea
[Display(Name = "任务明细")]
[Required(ErrorMessage = "{0}是必填项")]
public List Details { get; set; } = new();
-
///
/// 使用在途库
///
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
+
+ public EnumIssueSendType EnumIssueSendType { get; set; }
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IssueJobs/IIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IssueJobs/IIssueJobAppService.cs
index 306f0df4e..d496a4530 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IssueJobs/IIssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/IssueJobs/IIssueJobAppService.cs
@@ -8,7 +8,7 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IIssueJobAppService
: ISfsJobAppServiceBase
{
- Task> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode);
+ Task> CheckJobExistByItemCodeAndLocationCodeAsync(string itemCode, string locationCode);
Task CancelByMaterialRequestAsync(string materialNumber);
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs
index 42c4c5ab1..7e1ffddea 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs
@@ -1,23 +1,27 @@
-using System;
+using System;
using System.Collections.Generic;
-using System.Threading;
using System.Threading.Tasks;
-using Volo.Abp.Application.Dtos;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IKittingIssueJobAppService
- : ISfsJobAppServiceBase
+ : ISfsJobAppServiceBase
{
- Task CancelByMaterialRequestAsync(string requestNumber);
-
Task> GetByRequestNumberAsync(string requestNumber);
///
- /// 执行任务明细
+ /// 执行任务明细
///
///
- Task ExecuteDetailAsync(Guid masterId,Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto);
+ Task ExecuteDetailAsync(Guid masterId, Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto);
Task CompleteAsync(Guid id);
+
+ ///
+ /// 请求点了完成,任务全部都完成
+ ///
+ ///
+ ///
+ Task CompleteByRequestNumberAsync(string requestNumber);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs
index 01f485728..29957979f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobPermissions.cs
@@ -14,11 +14,10 @@ public static class KittingIssueJobPermissions
public static void AddKittingIssueJobPermission(this PermissionGroupDefinition permissionGroup)
{
- var KittingIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(KittingIssueJob)));
- KittingIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- KittingIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- KittingIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
-
+ var kittingIssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(KittingIssueJob)));
+ kittingIssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ kittingIssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ kittingIssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/TransferLibJobs/ITransferLibJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/TransferLibJobs/ITransferLibJobAppService.cs
index d98931e79..b023b698b 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/TransferLibJobs/ITransferLibJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/TransferLibJobs/ITransferLibJobAppService.cs
@@ -1,7 +1,11 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface ITransferLibJobAppService
: ISfsJobAppServiceBase
{
-
+ Task> GetByRequestNumberAsync(string requestNumber);
+ Task CompleteByRequestAsync(string requestNumber);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNotePermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNotePermissions.cs
index 8624c5c4b..7902ff771 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNotePermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNotePermissions.cs
@@ -5,26 +5,19 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class AssembleIssueNotePermissions
{
-
public const string Default = StorePermissions.GroupName + "." + nameof(AssembleIssueNote);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
- //自动发料记录
- public const string AutoAssembleIssueNote = StorePermissions.GroupName + "." + nameof(AutoAssembleIssueNote);
- //直接发料
- public const string DirectAssembleIssueNote = StorePermissions.GroupName + "." + nameof(DirectAssembleIssueNote);
public static void AddAssembleIssueNotePermission(this PermissionGroupDefinition permissionGroup)
{
- var AssembleIssueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleIssueNote)));
- AssembleIssueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- AssembleIssueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- AssembleIssueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
+ var assembleIssueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleIssueNote)));
+ assembleIssueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ assembleIssueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ assembleIssueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
- permissionGroup.AddPermission(AutoAssembleIssueNote, StorePermissionDefinitionProvider.L(nameof(AutoAssembleIssueNote)));
- permissionGroup.AddPermission(DirectAssembleIssueNote, StorePermissionDefinitionProvider.L(nameof(DirectAssembleIssueNote)));
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/DTOs/AssembleIssueNoteDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/DTOs/AssembleIssueNoteDTO.cs
index 5662ecd0b..e071a27f0 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/DTOs/AssembleIssueNoteDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/DTOs/AssembleIssueNoteDTO.cs
@@ -44,4 +44,5 @@ public class AssembleIssueNoteDTO : SfsStoreDTOBase,
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
+ public EnumIssueSendType EnumIssueSendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/IAssembleIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/IAssembleIssueNoteAppService.cs
index 9e08af906..adcc01df6 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/IAssembleIssueNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/IAssembleIssueNoteAppService.cs
@@ -12,5 +12,4 @@ public interface IAssembleIssueNoteAppService : ISfsStoreMasterReadOnlyAppServic
Task ConfirmAsync(Guid id);
-
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteEditInput.cs
index ac5e63b64..491308905 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteEditInput.cs
@@ -27,7 +27,7 @@ public class AssembleIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
///
[Display(Name = "任务ID")]
[Required(ErrorMessage = "{0}是必填项")]
- public string JobNumber { get; set; }
+ public string JobNumber { get; set; }
///
/// 明细列表
@@ -52,5 +52,7 @@ public class AssembleIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
///
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
+
+ public EnumIssueSendType EnumIssueSendType { get; set; }
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteImportInput.cs
index 6c43288f4..04b31439f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteImportInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/AssembleIssueNotes/Inputs/AssembleIssueNoteImportInput.cs
@@ -31,4 +31,6 @@ public class AssembleIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumb
[Display(Name = "使用在途库")]
[Required(ErrorMessage = "{0}是必填项")]
public bool UseOnTheWayLocation { get; set; }
+
+ public EnumIssueSendType EnumIssueSendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs
index 9f497fc34..6db9df722 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNotePermissions.cs
@@ -1,31 +1,20 @@
using Volo.Abp.Authorization.Permissions;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
-namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class CoatingIssueNotePermissions
{
-
- public const string Default = StorePermissions.GroupName + "." + nameof(IssueNote);
+ public const string Default = StorePermissions.GroupName + "." + nameof(CoatingIssueNote);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
- //自动发料记录
- public const string AutoIssueNote = StorePermissions.GroupName + "." + nameof(AutoIssueNote);
-
- //直接发料
- public const string DirectIssueNote = StorePermissions.GroupName + "." + nameof(DirectIssueNote);
-
public static void AddCoatingIssueNotePermission(this PermissionGroupDefinition permissionGroup)
{
- var issueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(IssueNote)));
- issueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- issueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- issueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
-
- permissionGroup.AddPermission(AutoIssueNote, StorePermissionDefinitionProvider.L(nameof(AutoIssueNote)));
- permissionGroup.AddPermission(DirectIssueNote, StorePermissionDefinitionProvider.L(nameof(DirectIssueNote)));
+ var coatingIssueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueNote)));
+ coatingIssueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ coatingIssueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ coatingIssueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs
index df2738704..0dac7ee44 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/DTOs/CoatingIssueNoteDTO.cs
@@ -2,12 +2,12 @@ using System;
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.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueNoteDTO : SfsStoreDTOBase, IHasJobNumber, IHasRequestNumber
{
+
///
/// 任务ID
///
@@ -19,6 +19,7 @@ public class CoatingIssueNoteDTO : SfsStoreDTOBase, I
///
[Display(Name = "请求代码")]
public string RequestNumber { get; set; }
+
///
/// 叫料类型
///
@@ -42,4 +43,6 @@ public class CoatingIssueNoteDTO : SfsStoreDTOBase, I
///
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
+
+ public EnumIssueSendType EnumIssueSendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs
index 20bb6f3c5..a877db99c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteAppService.cs
@@ -3,15 +3,12 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface ICoatingIssueNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase
{
Task CreateAsync(CoatingIssueNoteEditInput input);
Task ConfirmAsync(Guid id);
-
-
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs
index a306ad9d6..0f38c7030 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteEditInput.cs
@@ -2,9 +2,8 @@ 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.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
{
@@ -28,7 +27,7 @@ public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
///
[Display(Name = "任务ID")]
[Required(ErrorMessage = "{0}是必填项")]
- public string JobNumber { get; set; }
+ public string JobNumber { get; set; }
///
/// 明细列表
@@ -53,5 +52,7 @@ public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
///
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
+
+ public EnumIssueSendType EnumIssueSendType { get; set; }
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs
index 7c40b7379..3dd357936 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/CoatingIssueNotes/Inputs/CoatingIssueNoteImportInput.cs
@@ -1,8 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber
{
@@ -32,4 +31,6 @@ public class CoatingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumbe
[Display(Name = "使用在途库")]
[Required(ErrorMessage = "{0}是必填项")]
public bool UseOnTheWayLocation { get; set; }
+
+ public EnumIssueSendType EnumIssueSendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs
index db775120e..4b64a1f56 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/IKittingIssueNoteAppService.cs
@@ -10,7 +10,5 @@ public interface IKittingIssueNoteAppService : ISfsStoreMasterReadOnlyAppService
{
Task CreateAsync(KittingIssueNoteEditInput input);
- Task ConfirmAsync(Guid id);
-
-
+ Task ConfirmAsync(Guid id);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs
index 9a633fdd9..2ced39bab 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/KittingIssueNotes/KittingIssueNotePermissions.cs
@@ -5,20 +5,16 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class KittingIssueNotePermissions
{
-
public const string Default = StorePermissions.GroupName + "." + nameof(KittingIssueNote);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
- public const string Delete = Default + "." + StorePermissions.DeleteStr;
-
-
+ public const string Delete = Default + "." + StorePermissions.DeleteStr;
public static void AddKittingIssueNotePermission(this PermissionGroupDefinition permissionGroup)
{
- var injectionNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(KittingIssueNote)));
- injectionNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- injectionNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- injectionNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
-
+ var kittingIssueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(KittingIssueNote)));
+ kittingIssueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ kittingIssueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ kittingIssueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs
index beeaa8c94..ba0036681 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs
@@ -29,13 +29,15 @@ public class StorePermissionDefinitionProvider : PermissionDefinitionProvider
storeGroup.AddMaterialRequestPermission();
storeGroup.AddInjectionIssueRequestPermission();
storeGroup.AddKittingIssueRequestPermission();
+ storeGroup.AddCoatingIssueRequestPermission();
storeGroup.AddAssembleIssueRequestPermission();
storeGroup.AddThirdLocationRequestPermission();
storeGroup.AddContainerRequestPermission();
storeGroup.AddIssueNotePermission();
storeGroup.AddInjectionIssueNotePermission();
storeGroup.AddAssembleIssueNotePermission();
- storeGroup.AddKittingIssueNotePermission();
+ storeGroup.AddCoatingIssueNotePermission();
+ storeGroup.AddKittingIssueNotePermission();
storeGroup.AddThirdLocationNotePermission();
storeGroup.AddContainerNotePermission();
storeGroup.AddUnplannedReceiptNotePermission();
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/AssembleIssueRequestPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/AssembleIssueRequestPermissions.cs
index 582e47097..588253297 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/AssembleIssueRequestPermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/AssembleIssueRequestPermissions.cs
@@ -10,15 +10,13 @@ public static class AssembleIssueRequestPermissions
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
-
public static void AddAssembleIssueRequestPermission(this PermissionGroupDefinition permissionGroup)
{
- var AssembleIssueRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleIssueRequest)));
- AssembleIssueRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- AssembleIssueRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- AssembleIssueRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
-
+ var assembleIssueRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleIssueRequest)));
+ assembleIssueRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ assembleIssueRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ assembleIssueRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDTO.cs
index de36cc057..a8a2d45fa 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDTO.cs
@@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@@ -8,8 +9,7 @@ public class AssembleIssueRequestDTO : SfsStoreRequestDTOBase
[Display(Name = "叫料类型")]
- public string Type { get; set; }
-
+ public EnumIssueRequestType IssueRequestType { get; set; }
///
/// 是否使用在途库
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDetailDTO.cs
index b83de6cb9..534e25fb6 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDetailDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/DTOs/AssembleIssueRequestDetailDTO.cs
@@ -8,49 +8,92 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class AssembleIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
{
+ #region 目标库位信息
+
+ ///
+ /// 目标库位
+ ///
+ [Display(Name = "目标库位")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ToLocationCode { get; set; }
+
+ ///
+ /// 目标库区
+ ///
+ [Display(Name = "目标库区")]
+ public string ToLocationArea { get; set; }
+
///
- /// 已发数量
+ /// 目标库位组
+ ///
+ [Display(Name = "目标库位组")]
+ public string ToLocationGroup { get; set; }
+
+ ///
+ /// 目标ERP储位
+ ///
+ [Display(Name = "目标ERP储位")]
+ public string ToLocationErpCode { get; set; }
+
+ ///
+ /// 目标仓库
+ ///
+ [Display(Name = "目标仓库")]
+ public string ToWarehouseCode { get; set; }
+
+ #endregion
+
+ ///
+ /// 生产线
+ ///
+ public string ProdLine { get; set; }
+
+ ///
+ /// 已发数量
///
- [Display(Name = "已发数量")]
public decimal IssuedQty { get; set; }
///
- /// 已收数量
+ /// 已收数量
///
- [Display(Name = "已收数量")]
public decimal ReceivedQty { get; set; }
///
- /// 明细状态
+ /// 明细状态
///
- [Display(Name = "明细状态")]
public EnumStatus Status { get; set; }
///
- /// 请求未发
+ /// 请求未发 还未发送的数量
///
- [Display(Name = "请求未发")]
[NotMapped]
public decimal ToBeIssuedQty => Qty - IssuedQty;
///
- /// 已发未收
+ /// 已发未收
///
- [Display(Name = "已发未收")]
[NotMapped]
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
///
- /// 请求未收
+ /// 请求未收
///
- [Display(Name = "请求未收")]
[NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty;
///
- /// 需求箱数量
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
+
+ ///
+ /// 需求箱数量
///
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
-
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/IAssembleIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/IAssembleIssueRequestAppService.cs
index 1a4a83ad6..8ad90aad7 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/IAssembleIssueRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/IAssembleIssueRequestAppService.cs
@@ -10,4 +10,6 @@ public interface IAssembleIssueRequestAppService
{
Task CreateAndHandleAsync(AssembleIssueRequestEditInput input);
+ Task UpdateStatusCompletedAsync(string number);
+ Task IsHasNewJobAsync(string requestNumber, List jobNumber);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestEditInput.cs
index 3de838e38..55f171b01 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestEditInput.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@@ -9,10 +10,10 @@ public class AssembleIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputB
#region Base
///
- /// 叫料类型
+ /// 叫料类型
///
[Display(Name = "叫料类型")]
- public string Type { get; set; }
+ public EnumIssueRequestType IssueRequestType { get; set; }
///
/// 使用在途库
@@ -24,7 +25,7 @@ public class AssembleIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputB
/// 明细列表
///
[Display(Name = "明细列表")]
- public List Details { get; set; } = new List();
+ public List Details { get; set; } = new List();
#endregion
#region Create
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs
index 6f6470dc3..27fb71914 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/AssembleIssueRequests/Inputs/AssembleIssueRequestImportInput.cs
@@ -1,22 +1,18 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
-[Display(Name = "叫料申请")]
+[Display(Name = "叫料申请导入")]
public class AssembleIssueRequestImportInput : SfsStoreImportInputBase
{
-
///
- /// 叫料类型
+ /// 叫料类型
///
[Display(Name = "叫料类型")]
- [Required(ErrorMessage = "{0}是必填项")]
- [ImporterHeader(Name = "叫料类型")]
- [ExporterHeader(DisplayName = "叫料类型")]
- [ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)]
- public string Type { get; set; }
+ public EnumIssueRequestType IssueRequestType { get; set; }
///
/// 物品代码
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDetailDTO.cs
deleted file mode 100644
index 1a60286f0..000000000
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDetailDTO.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using Win_in.Sfs.Shared.Domain;
-using Win_in.Sfs.Shared.Domain.Shared;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
-
-public class CoatingIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
-
-{
- ///
- /// 已发数量
- ///
- [Display(Name = "已发数量")]
- public decimal IssuedQty { get; set; }
-
- ///
- /// 已收数量
- ///
- [Display(Name = "已收数量")]
- public decimal ReceivedQty { get; set; }
-
- ///
- /// 明细状态
- ///
- [Display(Name = "明细状态")]
- public EnumStatus Status { get; set; }
-
- ///
- /// 请求未发
- ///
- [Display(Name = "请求未发")]
- [NotMapped]
- public decimal ToBeIssuedQty => Qty - IssuedQty;
-
- ///
- /// 已发未收
- ///
- [Display(Name = "已发未收")]
- [NotMapped]
- public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
-
- ///
- /// 请求未收
- ///
- [Display(Name = "请求未收")]
- [NotMapped]
- public decimal NotFinishQty => Qty - ReceivedQty;
-
- ///
- /// 需求箱数量
- ///
- [Display(Name = "需求箱数量")]
- public decimal BoxQty { get; set; }
-
-}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs
index 684172de3..433c5a609 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestPermissions.cs
@@ -1,27 +1,20 @@
using Volo.Abp.Authorization.Permissions;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+using Win_in.Sfs.Wms.Store.Domain;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class CoatingIssueRequestPermissions
{
-
public const string Default = StorePermissions.GroupName + "." + nameof(CoatingIssueRequest);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
- //自动叫料申请
- public const string AutoMaterialRequest = StorePermissions.GroupName + "." + nameof(AutoMaterialRequest);
-
public static void AddCoatingIssueRequestPermission(this PermissionGroupDefinition permissionGroup)
{
- var MaterialRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueRequest)));
- MaterialRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
- MaterialRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
- MaterialRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
-
- permissionGroup.AddPermission(AutoMaterialRequest, StorePermissionDefinitionProvider.L(nameof(AutoMaterialRequest)));
+ var coatingIssueRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingIssueRequest)));
+ coatingIssueRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
+ coatingIssueRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
+ coatingIssueRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDTO.cs
similarity index 83%
rename from be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDTO.cs
rename to be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDTO.cs
index b15802513..e65a27014 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDTO.cs
@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueRequestDTO : SfsStoreRequestDTOBase, IHasNumber
{
@@ -9,8 +9,7 @@ public class CoatingIssueRequestDTO : SfsStoreRequestDTOBase
[Display(Name = "叫料类型")]
- public string Type { get; set; }
-
+ public EnumIssueRequestType IssueRequestType { get; set; }
///
/// 是否使用在途库
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDetailDTO.cs
new file mode 100644
index 000000000..616bc4947
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/DTOS/CoatingIssueRequestDetailDTO.cs
@@ -0,0 +1,99 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
+
+public class CoatingIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
+{
+ #region 目标库位信息
+
+ ///
+ /// 目标库位
+ ///
+ [Display(Name = "目标库位")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ToLocationCode { get; set; }
+
+ ///
+ /// 目标库区
+ ///
+ [Display(Name = "目标库区")]
+ public string ToLocationArea { get; set; }
+
+ ///
+ /// 目标库位组
+ ///
+ [Display(Name = "目标库位组")]
+ public string ToLocationGroup { get; set; }
+
+ ///
+ /// 目标ERP储位
+ ///
+ [Display(Name = "目标ERP储位")]
+ public string ToLocationErpCode { get; set; }
+
+ ///
+ /// 目标仓库
+ ///
+ [Display(Name = "目标仓库")]
+ public string ToWarehouseCode { get; set; }
+
+ #endregion
+
+ ///
+ /// 生产线
+ ///
+ public string ProdLine { get; set; }
+
+ ///
+ /// 已发数量
+ ///
+ public decimal IssuedQty { get; set; }
+
+ ///
+ /// 已收数量
+ ///
+ public decimal ReceivedQty { get; set; }
+
+ ///
+ /// 明细状态
+ ///
+ public EnumStatus Status { get; set; }
+
+ ///
+ /// 请求未发 还未发送的数量
+ ///
+ [NotMapped]
+ public decimal ToBeIssuedQty => Qty - IssuedQty;
+
+ ///
+ /// 已发未收
+ ///
+ [NotMapped]
+ public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
+
+ ///
+ /// 请求未收
+ ///
+ [NotMapped]
+ public decimal NotFinishQty => Qty - ReceivedQty;
+
+ ///
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
+
+ ///
+ /// 需求箱数量
+ ///
+ [Display(Name = "需求箱数量")]
+ public decimal BoxQty { get; set; }
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs
index ac9f958ff..54bb032f1 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/ICoatingIssueRequestAppService.cs
@@ -1,15 +1,16 @@
+using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface ICoatingIssueRequestAppService
: ISfsStoreRequestMasterAppServiceBase
{
- Task CreateAndHandleAsync(CoatingIssueRequestEditInput input);
-
+ Task CreateAndHandleAsync(CoatingIssueRequestEditInput input);
+ Task UpdateStatusCompletedAsync(string number);
+ Task IsHasNewJobAsync(string requestNumber, List jobNumber);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestDetailInput.cs
similarity index 95%
rename from be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDetailInput.cs
rename to be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestDetailInput.cs
index fbb5165b3..d76fc8ad4 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestDetailInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestDetailInput.cs
@@ -2,9 +2,8 @@ using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueRequestDetailInput : SfsStoreDetailWithQtyInputBase
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestEditInput.cs
similarity index 78%
rename from be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestEditInput.cs
rename to be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestEditInput.cs
index e6f879431..0511073bf 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestEditInput.cs
@@ -1,19 +1,19 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class CoatingIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{
#region Base
///
- /// 叫料类型
+ /// 叫料类型
///
[Display(Name = "叫料类型")]
- public string Type { get; set; }
+ public EnumIssueRequestType IssueRequestType { get; set; }
///
/// 使用在途库
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs
similarity index 71%
rename from be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestImportInput.cs
rename to be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs
index 097ed69be..e96fc3f72 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/CoatingIssueRequestImportInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/CoatingIssueRequests/Inputs/CoatingIssueRequestImportInput.cs
@@ -1,23 +1,18 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
-[Display(Name = "叫料申请")]
+[Display(Name = "喷涂叫料申请导入")]
public class CoatingIssueRequestImportInput : SfsStoreImportInputBase
{
-
///
- /// 叫料类型
+ /// 叫料类型
///
[Display(Name = "叫料类型")]
- [Required(ErrorMessage = "{0}是必填项")]
- [ImporterHeader(Name = "叫料类型")]
- [ExporterHeader(DisplayName = "叫料类型")]
- [ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)]
- public string Type { get; set; }
+ public EnumIssueRequestType IssueRequestType { get; set; }
///
/// 物品代码
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferLibRequests/ITransferLibRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferLibRequests/ITransferLibRequestAppService.cs
index c42656894..191365e01 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferLibRequests/ITransferLibRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/TransferLibRequests/ITransferLibRequestAppService.cs
@@ -17,4 +17,7 @@ public interface ITransferLibRequestAppService
Task> GetListForCustomAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false,
CancellationToken cancellationToken = default);
+ Task CompleteByJobAsync(string requestNumber);
+ Task CancelByCallRequestNumberAsync(string callRequestNumber);
+ Task CompleteByCallRequestNumberAsync(string callRequestNumber);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAppService.cs
index aece5cf16..80143b4d8 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/GaoTongs/GaoTongAppService.cs
@@ -162,5 +162,102 @@ public class GaoTongAppService : ApplicationService, IGaoTongAppService
}).ToList();
return ret;
}
+
+ ///
+ /// 人工拣选反馈富维东阳WMS【我方提供】【出库、立库系统直接出库、通知我方】
+ /// 人工拣选出库缴库完成,高通WMS反馈到富维东阳WMS
+ ///
+ ///
+ ///
+ [HttpPost("manual-selection")]
+ public async Task ManualSelection(ZuPanEditInput input)
+ {
+ GaoTongResultDTO ret = new GaoTongResultDTO();
+ try
+ {
+ ItemBasicDTO itemBasicObj = await _itemBasicAppService.GetByCodeAsync(input.ItemCode).ConfigureAwait(false);
+ if (itemBasicObj == null)
+ {
+ throw new UserFriendlyException($"{input.ItemCode}在Item表不存在!");
+ }
+
+ TransferNoteEditInput transferNoteEditInput = new TransferNoteEditInput();
+ transferNoteEditInput.TenantId = null;
+ transferNoteEditInput.Remark = String.Empty;
+ transferNoteEditInput.Worker = _currentUser.UserName;
+ transferNoteEditInput.ActiveDate = CommonHelper.CurTime;
+ transferNoteEditInput.Type = EnumTransSubType.Depot_Out.ToString(); //喷涂完工转储
+ transferNoteEditInput.UseOnTheWayLocation = false;
+ //transferNoteEditInput.number
+ //transferNoteEditInput.CallServerName
+ //transferNoteEditInput.Confirmed = true;
+ //transferNoteEditInput.ConfirmTime = CommonHelper.CurTime;
+ if (transferNoteEditInput.Details == null)
+ {
+ transferNoteEditInput.Details = new List();
+ }
+ TransferNoteDetailInput detailObj = new TransferNoteDetailInput();
+ transferNoteEditInput.Details.Add(detailObj);
+ detailObj.Remark = "";
+ detailObj.ItemCode = input.ItemCode;
+ detailObj.ItemName = itemBasicObj.Name;
+ detailObj.ItemDesc1 = itemBasicObj.Desc1;
+ detailObj.ItemDesc2 = itemBasicObj.Desc2;
+ detailObj.Uom = itemBasicObj.BasicUom;
+ detailObj.Qty = input.Qty.TryToDecimalZero();
+ detailObj.StdPackQty = itemBasicObj.StdPackQty;
+
+ #region 去箱、去批、去托
+ detailObj.FromPackingCode = String.Empty;
+ detailObj.ToPackingCode = String.Empty;
+ detailObj.FromContainerCode = String.Empty;
+ detailObj.ToContainerCode = String.Empty;
+ detailObj.FromLot = String.Empty;
+ detailObj.ToLot = String.Empty;
+ #endregion
+
+ detailObj.SupplierBatch = String.Empty;
+ detailObj.ArriveDate = CommonHelper.CurTime;
+ detailObj.ProduceDate = CommonHelper.CurTime;
+ detailObj.ExpireDate = DateTime.MaxValue;
+ var fromLocationObj = await _locationAppService.GetByCodeAsync(input.FromLocationCode).ConfigureAwait(false);
+ if (fromLocationObj == null)
+ {
+ throw new UserFriendlyException($"{input.FromLocationCode}在Location表不存在!");
+ }
+ detailObj.FromLocationCode = input.FromLocationCode;
+ detailObj.FromLocationArea = fromLocationObj.AreaCode;
+ detailObj.FromLocationGroup = fromLocationObj.LocationGroupCode;
+ detailObj.FromLocationErpCode = fromLocationObj.ErpLocationCode;
+ detailObj.FromWarehouseCode = fromLocationObj.WarehouseCode;
+ var toLocationObj = await _locationAppService.GetByCodeAsync(input.ToLocationCode).ConfigureAwait(false);
+ if (toLocationObj == null)
+ {
+ throw new UserFriendlyException($"{input.ToLocationCode}在Location表不存在!");
+ }
+ detailObj.ToLocationCode = input.ToLocationCode;
+ detailObj.ToLocationArea = toLocationObj.AreaCode;
+ detailObj.ToLocationGroup = toLocationObj.LocationGroupCode;
+ detailObj.ToLocationErpCode = toLocationObj.ErpLocationCode;
+ detailObj.ToWarehouseCode = toLocationObj.WarehouseCode;
+ detailObj.FromStatus = EnumInventoryStatus.OK;
+ detailObj.ToStatus = EnumInventoryStatus.OK;
+ detailObj.OnTheWayLocationCode = String.Empty;
+ detailObj.Reason = "";
+ var temp = await _transferNoteAppService.CreateAsync(transferNoteEditInput).ConfigureAwait(false);
+ ret.Code = GaoTongResultStatus.Success;
+ ret.Message = "接收成功";
+ ret.OperateTime = CommonHelper.CurTimeStr;
+ return ret;
+ }
+ catch (Exception ex)
+ {
+ ret.Code = GaoTongResultStatus.Failure;
+ ret.Message = "ManualSelection执行失败:" + ex.Message;
+ ret.OperateTime = CommonHelper.CurTimeStr;
+ return ret;
+ }
+ }
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs
index b28529921..5ce16111c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobAppService.cs
@@ -3,21 +3,29 @@ using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
+using System.Net.Http.Headers;
+using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using MyNamespace;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Shared.Domain;
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;
+using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy;
using Win_in.Sfs.Wms.Store.Notes;
+using Win_in.Sfs.Wms.Store.Options;
namespace Win_in.Sfs.Wms.Store.Application;
@@ -28,17 +36,36 @@ public class AssembleIssueJobAppService
AssembleIssueJobCheckInput, AssembleIssueJobEditInput>,
IAssembleIssueJobAppService, ITransferLibCallback
{
- private readonly IAssembleIssueJobManager _assembleJobManager;
+ private readonly IAssembleIssueJobManager _assembleIssueJobManager;
private readonly ILocationAppService _locationAppService;
private readonly ITransferLibJobAppService _transferLibJobAppService;
+ private readonly IAssembleIssueNoteAppService _assembleIssueNoteAppService;
+ private readonly IExpectOutAppService _expectOutAppService;
+ private readonly IHttpClientFactory _httpClientFactory;
+ private readonly IOptions _options;
+
+ protected IAssembleIssueRequestAppService AssembleIssueRequestAppService =>
+ LazyServiceProvider.LazyGetRequiredService();
public AssembleIssueJobAppService(
- IAssembleIssueJobRepository repository, IAssembleIssueJobManager assembleJobManager,
- ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService) : base(repository, assembleJobManager)
+ IAssembleIssueJobRepository repository, IAssembleIssueJobManager assembleIssueJobManager,
+ ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService,
+ IAssembleIssueNoteAppService assembleIssueNoteAppService, IExpectOutAppService expectOutAppService
+ , IHttpClientFactory httpClientFactory
+ , IOptions options
+
+
+
+ ) : base(
+ repository, assembleIssueJobManager)
{
- _assembleJobManager = assembleJobManager;
+ _assembleIssueJobManager = assembleIssueJobManager;
_locationAppService = locationAppService;
_transferLibJobAppService = transferLibJobAppService;
+ _assembleIssueNoteAppService = assembleIssueNoteAppService;
+ _expectOutAppService = expectOutAppService;
+ _httpClientFactory = httpClientFactory;
+ _options = options;
}
[HttpPost("add-many")]
@@ -47,17 +74,183 @@ public class AssembleIssueJobAppService
foreach (var input in inputs)
{
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false);
+ await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
+ }
+
+ var assembleIssueJobDtos = await base.CreateManyAsync(inputs).ConfigureAwait(false);
+ foreach (var assembleIssueJobDto in assembleIssueJobDtos)
+ {
+ await CheckDimensionalStorehouseAsync(assembleIssueJobDto).ConfigureAwait(false);
}
- return await base.CreateManyAsync(inputs).ConfigureAwait(false);
+ return assembleIssueJobDtos;
}
[HttpPost("")]
public override async Task CreateAsync(AssembleIssueJobEditInput input)
{
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false);
+ await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
+
+ var assembleIssueJobDto = await base.CreateAsync(input).ConfigureAwait(false);
+ await CheckDimensionalStorehouseAsync(assembleIssueJobDto).ConfigureAwait(false);
+
+ return assembleIssueJobDto;
+ }
+
+ [HttpPost("invalid")]
+ public override async Task CancelAsync(Guid id)
+ {
+ var injectionJob = await _repository.GetAsync(id).ConfigureAwait(false);
+ if (injectionJob == null)
+ {
+ throw new UserFriendlyException($"未找到ID为 {id} 的任务");
+ }
+
+ await _assembleIssueJobManager.CancelAsync(injectionJob).ConfigureAwait(false);
+ }
+
+ [HttpPost("cancel-by-request/{requestNumber}")]
+ public virtual async Task CancelByMaterialRequestAsync(string requestNumber)
+ {
+ var entities = await _repository.GetListAsync(p => p.AssembleRequestNumber == requestNumber)
+ .ConfigureAwait(false);
+ foreach (var entity in entities)
+ {
+ await _assembleIssueJobManager.CancelAsync(entity).ConfigureAwait(false);
+ }
+ }
- return await base.CreateAsync(input).ConfigureAwait(false);
+ [HttpPost("by-request-number/{requestNumber}")]
+ public virtual async Task> GetByRequestNumberAsync(string requestNumber)
+ {
+ var entitys = await _repository.GetListAsync(p => p.AssembleRequestNumber == requestNumber)
+ .ConfigureAwait(false);
+ return ObjectMapper.Map, List>(entitys);
+ }
+
+ ///
+ /// 库移回调
+ ///
+ ///
+ ///
+ [HttpPost("Do-Call-Back")]
+ public async Task DoTransferLibCallbackAsync(TransferLibJobDTO dto)
+ {
+ var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false);
+
+ var transferLibJobDto = await _transferLibJobAppService.GetByNumberAsync(dto.Number).ConfigureAwait(false);
+
+ var transferLibNoteDetail = dto.Details.First();
+
+ var jobDetail = job.Details.First();
+ job.JobStatus = EnumJobStatus.Open;
+
+ jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate;
+ jobDetail.TransferLibFromContainerCode = transferLibNoteDetail.HandledFromContainerCode;
+ jobDetail.TransferLibFromExpireDate = transferLibNoteDetail.HandledFromExpireDate;
+ jobDetail.TransferLibFromLocationArea = transferLibNoteDetail.HandledFromLocationArea;
+ jobDetail.TransferLibFromLocationCode = transferLibNoteDetail.HandledFromLocationCode;
+ jobDetail.TransferLibFromLocationErpCode = transferLibNoteDetail.HandledFromLocationErpCode;
+ jobDetail.TransferLibFromLocationGroup = transferLibNoteDetail.HandledFromLocationGroup;
+ jobDetail.TransferLibFromLot = transferLibNoteDetail.HandledFromLot;
+ jobDetail.TransferLibFromPackingCode = transferLibNoteDetail.HandledFromPackingCode;
+ jobDetail.TransferLibFromProduceDate = transferLibNoteDetail.HandledFromProduceDate;
+ jobDetail.TransferLibFromQty = transferLibNoteDetail.HandledFromQty;
+ jobDetail.TransferLibFromSupplierBatch = transferLibNoteDetail.HandledFromSupplierBatch;
+ jobDetail.TransferLibFromWarehouseCode = transferLibNoteDetail.HandledFromWarehouseCode;
+
+ jobDetail.TransferLibToArriveDate = transferLibNoteDetail.HandledToArriveDate;
+ jobDetail.TransferLibToContainerCode = transferLibNoteDetail.HandledToContainerCode;
+ jobDetail.TransferLibToExpireDate = transferLibNoteDetail.HandledToExpireDate;
+ jobDetail.TransferLibToLocationArea = transferLibNoteDetail.HandledToLocationArea;
+ jobDetail.TransferLibToLocationCode = transferLibNoteDetail.HandledToLocationCode;
+ jobDetail.TransferLibToLocationErpCode = transferLibNoteDetail.HandledToLocationErpCode;
+ jobDetail.TransferLibToLocationGroup = transferLibNoteDetail.HandledToLocationGroup;
+ jobDetail.TransferLibToLot = transferLibNoteDetail.HandledToLot;
+ jobDetail.TransferLibToPackingCode = transferLibNoteDetail.HandledToPackingCode;
+ jobDetail.TransferLibToProduceDate = transferLibNoteDetail.HandledToProduceDate;
+ jobDetail.TransferLibToQty = transferLibNoteDetail.HandledToQty;
+ jobDetail.TransferLibToSupplierBatch = transferLibNoteDetail.HandledToSupplierBatch;
+ jobDetail.TransferLibToWarehouseCode = transferLibNoteDetail.HandledToWarehouseCode;
+
+ await _repository.UpdateAsync(job).ConfigureAwait(false);
+ }
+
+ ///
+ /// 执行任务明细
+ ///
+ ///
+ [HttpPost("ExecuteDetail/{masterId}")]
+ public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, AssembleIssueJobDetailDTO issueJobDetailDto)
+ {
+ var assembleIssueJob = await _repository.GetAsync(masterId).ConfigureAwait(false);
+ assembleIssueJob.JobStatus = EnumJobStatus.Doing;
+
+ var assembleIssueJobDto = ObjectMapper.Map(assembleIssueJob);
+ assembleIssueJobDto.Details = new List { issueJobDetailDto };
+ var assembleIssueNoteEditInput = await BuildAssembleIssueNoteAsync(assembleIssueJobDto).ConfigureAwait(false);
+ await _assembleIssueNoteAppService.CreateAsync(assembleIssueNoteEditInput).ConfigureAwait(false);
+
+ var issueJobDetail = ObjectMapper.Map(issueJobDetailDto);
+ var entityDetail = assembleIssueJob.Details.Find(p => p.Id == detailId);
+ issueJobDetail.HandledFromQty = entityDetail.HandledFromQty;
+ issueJobDetail.HandledToQty = entityDetail.HandledToQty;
+
+ issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty;
+ issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty;
+ assembleIssueJob.Details = new EditableList() { issueJobDetail };
+
+ if (assembleIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成
+ {
+ await UpdateRequestAndjobStatusDoneAsync(assembleIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ }
+ else
+ {
+ var detail = assembleIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id);
+ if (issueJobDetail.HandledToQty >= detail.RequestQty)
+ {
+ await UpdateRequestAndjobStatusDoneAsync(assembleIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ }
+ }
+
+ await _repository.UpdateAsync(assembleIssueJob).ConfigureAwait(false);
+ }
+
+ [HttpPost("CompleteAsync/{id}")]
+ public async Task CompleteAsync(Guid id)
+ {
+ var assembleIssueJob = await _repository.FindAsync(id).ConfigureAwait(false);
+
+ assembleIssueJob.JobStatus = EnumJobStatus.Done;
+
+ await _expectOutAppService.RemoveByNumberAndInventoryAsync(assembleIssueJob.Number,
+ assembleIssueJob.Details.First().ItemCode,
+ assembleIssueJob.Details.First().HandledToLocationCode, assembleIssueJob.Details.First().HandledToPackingCode,
+ assembleIssueJob.Details.First().Status, assembleIssueJob.Details.First().HandledToLot,
+ assembleIssueJob.Details.First().HandledToQty).ConfigureAwait(false);
+
+ await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false);
+
+ await _repository.UpdateAsync(assembleIssueJob).ConfigureAwait(false);
+ }
+
+ #region 私有
+
+ ///
+ /// 创建补料记录实体
+ ///
+ ///
+ ///
+ private async Task BuildAssembleIssueNoteAsync(AssembleIssueJobDTO assembleIssueJobDto)
+ {
+ var assembleIssueNoteCreateInput =
+ ObjectMapper.Map(assembleIssueJobDto);
+ assembleIssueNoteCreateInput.JobNumber = assembleIssueJobDto.Number;
+
+ await Task.CompletedTask.ConfigureAwait(false);
+
+ return assembleIssueNoteCreateInput;
}
///
@@ -75,7 +268,9 @@ public class AssembleIssueJobAppService
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
{
input.JobStatus = EnumJobStatus.Wait;
-
+ }
+ else if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode == 1)
+ {
jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate;
jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode;
jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate;
@@ -93,101 +288,247 @@ public class AssembleIssueJobAppService
jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate;
jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode;
jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate;
- jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.RecommendToLocationArea;
- jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.RecommendToLocationCode;
- jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.RecommendToLocationErpCode;
- jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.RecommendToLocationGroup;
jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot;
jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode;
jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate;
jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty;
jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch;
- jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.RecommendToWarehouseCode;
+ jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.TransferLibFromWarehouseCode;
+ jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.TransferLibFromLocationArea;
+ jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.TransferLibFromLocationCode;
+ jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.TransferLibFromLocationErpCode;
+ jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.TransferLibFromLocationGroup;
}
}
- [HttpPost("cancel-by-request/{assembleRequestNumber}")]
- public virtual async Task CancelByMaterialRequestAsync(string assembleNumber)
+ ///
+ /// 判断是不是在立体库
+ ///
+ ///
+ ///
+ private async Task CheckDimensionalStorehouseAsync(AssembleIssueJobEditInput input)
{
- var entities = await _repository.GetListAsync(p => p.AssembleRequestNumber == assembleNumber)
+ var jobDetailInputdetail = input.Details.FirstOrDefault();
+
+ var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
- foreach (var entity in entities)
+
+ if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
- await _assembleJobManager.CancelAsync(entity).ConfigureAwait(false);
+ input.JobStatus = EnumJobStatus.Wait;
}
}
- [HttpPost("invalid")]
- public override async Task CancelAsync(Guid id)
+ ///
+ /// 判断是不是在立体库
+ ///
+ ///
+ ///
+ private async Task CheckDimensionalStorehouseAsync(AssembleIssueJobDTO assembleIssueJobDto)
{
- var assembleJob = await _repository.GetAsync(id).ConfigureAwait(false);
- if (assembleJob == null)
+ var jobDetailInputdetail = assembleIssueJobDto.Details.FirstOrDefault();
+
+ var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
+ .ConfigureAwait(false);
+
+ if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
- throw new UserFriendlyException($"未找到ID为 {id} 的任务");
+ //TODO 立体库
+ var ret = await SyncIssueJobStereoAsync(new List { assembleIssueJobDto }, loctionDto.Code).ConfigureAwait(false);
+ if (ret.Code != "1")
+ {
+ throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}");
+ }
}
- await _assembleJobManager.CancelAsync(assembleJob).ConfigureAwait(false);
+
}
- [HttpPost("by-request-number/{requestNumber}")]
- public virtual async Task> GetByRequestNumberAsync(string requestNumber)
+ ///
+ /// 修改当前任务状态 和 该任务的请求状态
+ ///
+ ///
+ ///
+ ///
+ ///
+ private async Task UpdateRequestAndjobStatusDoneAsync(AssembleIssueJob assembleIssueJob,
+ AssembleIssueJobDetailDTO assembleIssueJobDetailDto, decimal handledToQty)
{
- var entitys = await _repository.GetListAsync(p => p.AssembleRequestNumber == requestNumber)
+ if (assembleIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None
+ or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中
+ {
+ throw new UserFriendlyException(
+ $"任务状态错误:编号为【{assembleIssueJob.Number}】的任务状态为【{assembleIssueJob.JobStatus.GetDisplayName()}】");
+ }
+
+ assembleIssueJob.JobStatus = EnumJobStatus.Done;
+
+ await _expectOutAppService.RemoveByNumberAndInventoryAsync(assembleIssueJob.Number,
+ assembleIssueJobDetailDto.ItemCode,
+ assembleIssueJobDetailDto.HandledToLocationCode, assembleIssueJobDetailDto.HandledToPackingCode,
+ assembleIssueJobDetailDto.Status, assembleIssueJobDetailDto.HandledToLot,
+ handledToQty).ConfigureAwait(false);
+
+ //await _expectOutAppService.RemoveByNumberAsync(assembleIssueJob.Number).ConfigureAwait(false);
+
+ await AssembleIssueRequestAppService.UpdateStatusCompletedAsync(assembleIssueJob.AssembleRequestNumber)
.ConfigureAwait(false);
- return ObjectMapper.Map, List>(entitys);
+
+ await Task.CompletedTask.ConfigureAwait(false);
}
- [HttpPost("Do-Call-Back")]
- public async Task DoTransferLibCallbackAsync(TransferLibJobDTO dto)
- {
- var job = await _repository.FindAsync(p => p.Number == dto.JobNumber).ConfigureAwait(false);
- //todo 等云峰写好换成真实的
- var transferLibJobDto = await _transferLibJobAppService.GetByNumberAsync("AAA").ConfigureAwait(false);
- var transferLibNote = new TransferLibNote();
- var transferLibNoteDetail = transferLibNote.Details.First();
- var jobDetail = job.Details.First();
- job.JobStatus = EnumJobStatus.Open;
+ ///
+ /// 立体库同步
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("sync-issue-job-stereo")]
- jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate;
- jobDetail.TransferLibFromContainerCode = transferLibNoteDetail.HandledFromContainerCode;
- jobDetail.TransferLibFromExpireDate = transferLibNoteDetail.HandledFromExpireDate;
- jobDetail.TransferLibFromLocationArea = transferLibNoteDetail.HandledFromLocationArea;
- jobDetail.TransferLibFromLocationCode = transferLibNoteDetail.HandledFromLocationCode;
- jobDetail.TransferLibFromLocationErpCode = transferLibNoteDetail.HandledFromLocationErpCode;
- jobDetail.TransferLibFromLocationGroup = transferLibNoteDetail.HandledFromLocationGroup;
- jobDetail.TransferLibFromLot = transferLibNoteDetail.HandledFromLot;
- jobDetail.TransferLibFromPackingCode = transferLibNoteDetail.HandledFromPackingCode;
- jobDetail.TransferLibFromProduceDate = transferLibNoteDetail.HandledFromProduceDate;
- jobDetail.TransferLibFromQty = transferLibNoteDetail.HandledFromQty;
- jobDetail.TransferLibFromSupplierBatch = transferLibNoteDetail.HandledFromSupplierBatch;
- jobDetail.TransferLibFromWarehouseCode = transferLibNoteDetail.HandledFromWarehouseCode;
+ public async Task SyncIssueJobStereoAsync(List input, string p_loc)
+ {
+ ReusltObject ret = new ReusltObject();
+ ret.Code = "1";
+ ret.Message = "操作成功";
+ ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
+ try
+ {
+ List IssueJobToRestoDetailDTOs = new List();
+ IssueJobToRestoDTO main = new IssueJobToRestoDTO();
+ main.OperatorName = CurrentUser.UserName;
+ foreach (var job in input)
+ {
+ foreach (var jobitem in job.Details)
+ {
+ IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO()
+ {
+ Count = jobitem.HandledToQty,
+ ProductNo = jobitem.ItemCode,
+ NeedSite = p_loc,
+ WorkNo = job.Number,
+ TaskNo = job.Number
+ });
+ }
+ }
+ main.Details = IssueJobToRestoDetailDTOs;
+ var httpclient = _httpClientFactory.CreateClient();
+#if DEBUG
- jobDetail.TransferLibToArriveDate = transferLibNoteDetail.HandledToArriveDate;
- jobDetail.TransferLibToContainerCode = transferLibNoteDetail.HandledToContainerCode;
- jobDetail.TransferLibToExpireDate = transferLibNoteDetail.HandledToExpireDate;
- jobDetail.TransferLibToLocationArea = transferLibNoteDetail.HandledToLocationArea;
- jobDetail.TransferLibToLocationCode = transferLibNoteDetail.HandledToLocationCode;
- jobDetail.TransferLibToLocationErpCode = transferLibNoteDetail.HandledToLocationErpCode;
- jobDetail.TransferLibToLocationGroup = transferLibNoteDetail.HandledToLocationGroup;
- jobDetail.TransferLibToLot = transferLibNoteDetail.HandledToLot;
- jobDetail.TransferLibToPackingCode = transferLibNoteDetail.HandledToPackingCode;
- jobDetail.TransferLibToProduceDate = transferLibNoteDetail.HandledToProduceDate;
- jobDetail.TransferLibToQty = transferLibNoteDetail.HandledToQty;
- jobDetail.TransferLibToSupplierBatch = transferLibNoteDetail.HandledToSupplierBatch;
- jobDetail.TransferLibToWarehouseCode = transferLibNoteDetail.HandledToWarehouseCode;
+ string json = System.Text.Json.JsonSerializer.Serialize(main);
+ _options.Value.Address = "http://localhost:59094/";//测试地址
+ _options.Value.Token = "";//测试token
+ _options.Value.UserName = "";//测试用户名
+ _options.Value.Password = "";//测试密码
- await _repository.UpdateAsync(job).ConfigureAwait(false);
+#endif
+ if (!string.IsNullOrEmpty(_options.Value.Token))
+ {
+ var token = _options.Value.Token;
+ httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
+ }
+ if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password))
+ {
+ var username = _options.Value.UserName;
+ var password = _options.Value.Password;
+ httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($"{username}:{password}")));
+ }
+
+ IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
+ ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ ret = new ReusltObject();
+ ret.Code = "2";
+ ret.Message = ex.Message;
+ ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
+ }
+
+ return ret;
- return;
}
- [HttpPost("test")]
- public virtual async Task Test()
+ [HttpPost("receive-issue-job-stereo")]
+ public virtual async Task SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input)
{
- Console.WriteLine("FuAZCZXVZXVXZVZ");
- await Task.CompletedTask;
+
+#if DEBUG
+ var json = System.Text.Json.JsonSerializer.Serialize(input);
+#endif
+ List errors = new List();
+ var ret = new ReusltObject()
+ {
+ Code = "1",
+ OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
+ Message = "操作成功"
+ };
+ try
+ {
+
+ if (input.Jobs.Count > 0)
+ {
+ var jobs = input.Jobs;
+ var numbers = jobs.Select(p => p.JobNumber);
+ var query = _repository.WithDetails()
+ .Where(p => numbers.Contains(p.Number));
+ var entities = query.ToList();
+ var dtos = ObjectMapper.Map, List>(entities);
+ if (input.Jobs.Count == entities.Count)
+ {
+ errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n");
+ }
+ foreach (var itm in dtos)
+ {
+ var first = jobs.FirstOrDefault(p => p.JobNumber == itm.Number);
+ var itmDetails = itm.Details.ToList();
+ List details = new List();
+ foreach (var detail in first.Details)
+ {
+ var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
+ AssembleIssueJobDetailDTO dto = new AssembleIssueJobDetailDTO();
+ dto.HandledFromLocationCode = entity.HandledFromLocationCode;
+ dto.HandledToLocationCode = entity.HandledToLocationCode;
+ dto.ItemCode = detail.ItemCode;
+ dto.RecommendFromQty = detail.Qty;
+ dto.RecommendToQty = detail.Qty;
+ dto.HandledFromQty = detail.Qty;
+ dto.HandledToQty = detail.Qty;
+ dto.Status = entity.Status;
+ details.Add(dto);
+ }
+ itm.Details = details;
+ await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
+ }
+ }
+ else
+ {
+ errors.Add("立体库确认单据里无数据! \n");
+ }
+ }
+ catch (Exception ex)
+ {
+ ret = new ReusltObject()
+ {
+ Code = "2",
+ OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
+ Message = ex.Message
+ };
+ return ret;
+ }
+ if (errors.Count > 0)
+ {
+
+ ret = new ReusltObject()
+ {
+ Code = "2",
+ OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
+ Message = string.Join(",", errors.ToArray())
+ };
+ }
+ return ret;
}
+ #endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs
index f3bef2def..fff12a59c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAppService.cs
@@ -1,26 +1,20 @@
using System;
using System.Collections.Generic;
-using System.Data;
using System.Linq;
-using System.Linq.Expressions;
using System.Net.Http;
-using System.Threading;
+using System.Net.Http.Headers;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
-using DocumentFormat.OpenXml.Spreadsheet;
using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using MyNamespace;
-using Omu.ValueInjecter;
using Volo.Abp;
-using Volo.Abp.Application.Dtos;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
-using Win_in.Sfs.Basedata.Domain.Shared;
-using Win_in.Sfs.Shared.Domain;
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;
@@ -28,6 +22,8 @@ using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy;
using Win_in.Sfs.Wms.Store.Notes;
using Win_in.Sfs.Wms.Store.Options;
+using static IdentityModel.ClaimComparer;
+using static Volo.Abp.Identity.Settings.IdentitySettingNames;
namespace Win_in.Sfs.Wms.Store.Application;
@@ -41,94 +37,91 @@ public class CoatingIssueJobAppService
private readonly ICoatingIssueJobManager _coatingIssueJobManager;
private readonly ILocationAppService _locationAppService;
private readonly ITransferLibJobAppService _transferLibJobAppService;
+ private readonly ICoatingIssueNoteAppService _coatingIssueNoteAppService;
+ private readonly IExpectOutAppService _expectOutAppService;
private readonly IHttpClientFactory _httpClientFactory;
private readonly IOptions _options;
+
+ protected ICoatingIssueRequestAppService CoatingIssueRequestAppService =>
+ LazyServiceProvider.LazyGetRequiredService();
+
public CoatingIssueJobAppService(
ICoatingIssueJobRepository repository, ICoatingIssueJobManager coatingIssueJobManager,
- ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService
+ ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService,
+ ICoatingIssueNoteAppService coatingIssueNoteAppService, IExpectOutAppService expectOutAppService
, IHttpClientFactory httpClientFactory
, IOptions options
- ) : base(repository, coatingIssueJobManager)
+
+
+
+ ) : base(
+ repository, coatingIssueJobManager)
{
_coatingIssueJobManager = coatingIssueJobManager;
_locationAppService = locationAppService;
_transferLibJobAppService = transferLibJobAppService;
+ _coatingIssueNoteAppService = coatingIssueNoteAppService;
+ _expectOutAppService = expectOutAppService;
_httpClientFactory = httpClientFactory;
- _options=options;
+ _options = options;
}
[HttpPost("add-many")]
public override async Task> CreateManyAsync(List inputs)
{
-
-
-
foreach (var input in inputs)
{
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false);
+ await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
}
- return await base.CreateManyAsync(inputs).ConfigureAwait(false);
+ var coatingIssueJobDtos = await base.CreateManyAsync(inputs).ConfigureAwait(false);
+ foreach (var coatingIssueJobDto in coatingIssueJobDtos)
+ {
+ await CheckDimensionalStorehouseAsync(coatingIssueJobDto).ConfigureAwait(false);
+ }
+
+ return coatingIssueJobDtos;
}
[HttpPost("")]
public override async Task CreateAsync(CoatingIssueJobEditInput input)
{
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false);
+ await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
+
+ var coatingIssueJobDto = await base.CreateAsync(input).ConfigureAwait(false);
+ await CheckDimensionalStorehouseAsync(coatingIssueJobDto).ConfigureAwait(false);
- return await base.CreateAsync(input).ConfigureAwait(false);
+ return coatingIssueJobDto;
}
- ///
- /// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值
- ///
- ///
- ///
- private async Task CheckMinRowAndSetStatusAsync(CoatingIssueJobEditInput input)
+ [HttpPost("invalid")]
+ public override async Task CancelAsync(Guid id)
{
- var jobDetailInputdetail = input.Details.FirstOrDefault();
-
- var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
- .ConfigureAwait(false);
-
- if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
+ var kittingJob = await _repository.GetAsync(id).ConfigureAwait(false);
+ if (kittingJob == null)
{
- input.JobStatus = EnumJobStatus.Wait;
-
- jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate;
- jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode;
- jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate;
- jobDetailInputdetail.TransferLibFromLocationArea = jobDetailInputdetail.RecommendFromLocationArea;
- jobDetailInputdetail.TransferLibFromLocationCode = jobDetailInputdetail.RecommendFromLocationCode;
- jobDetailInputdetail.TransferLibFromLocationErpCode = jobDetailInputdetail.RecommendFromLocationErpCode;
- jobDetailInputdetail.TransferLibFromLocationGroup = jobDetailInputdetail.RecommendFromLocationGroup;
- jobDetailInputdetail.TransferLibFromLot = jobDetailInputdetail.RecommendFromLot;
- jobDetailInputdetail.TransferLibFromPackingCode = jobDetailInputdetail.RecommendFromPackingCode;
- jobDetailInputdetail.TransferLibFromProduceDate = jobDetailInputdetail.RecommendFromProduceDate;
- jobDetailInputdetail.TransferLibFromQty = jobDetailInputdetail.RecommendFromQty;
- jobDetailInputdetail.TransferLibFromSupplierBatch = jobDetailInputdetail.RecommendFromSupplierBatch;
- jobDetailInputdetail.TransferLibFromWarehouseCode = jobDetailInputdetail.RecommendFromWarehouseCode;
+ throw new UserFriendlyException($"未找到ID为 {id} 的任务");
+ }
- jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate;
- jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode;
- jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate;
- jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.RecommendToLocationArea;
- jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.RecommendToLocationCode;
- jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.RecommendToLocationErpCode;
- jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.RecommendToLocationGroup;
- jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot;
- jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode;
- jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate;
- jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty;
- jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch;
- jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.RecommendToWarehouseCode;
+ if (kittingJob.JobStatus == EnumJobStatus.Open || kittingJob.JobStatus == EnumJobStatus.Partial ||
+ kittingJob.JobStatus == EnumJobStatus.Wait)
+ {
+ throw new UserFriendlyException($"任务状态不是{kittingJob.JobStatus == EnumJobStatus.Open}、" +
+ $"{kittingJob.JobStatus == EnumJobStatus.Partial}、" +
+ $"{kittingJob.JobStatus == EnumJobStatus.Wait}");
}
+
+ await _expectOutAppService.RemoveByNumberAsync(kittingJob.Number).ConfigureAwait(false);
+ kittingJob.JobStatus = EnumJobStatus.Cancelled;
+ await _repository.UpdateAsync(kittingJob).ConfigureAwait(false);
}
[HttpPost("cancel-by-request/{requestNumber}")]
public virtual async Task CancelByMaterialRequestAsync(string requestNumber)
{
- var entities = await _repository.GetListAsync(p => p.MaterialRequestNumber == requestNumber)
+ var entities = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber)
.ConfigureAwait(false);
foreach (var entity in entities)
{
@@ -136,38 +129,33 @@ public class CoatingIssueJobAppService
}
}
- [HttpPost("invalid")]
- public override async Task CancelAsync(Guid id)
- {
- var coatingIssueJob = await _repository.GetAsync(id).ConfigureAwait(false);
- if (coatingIssueJob == null)
- {
- throw new UserFriendlyException($"未找到ID为 {id} 的任务");
- }
-
- await _coatingIssueJobManager.CancelAsync(coatingIssueJob).ConfigureAwait(false);
- }
-
[HttpPost("by-request-number/{requestNumber}")]
public virtual async Task> GetByRequestNumberAsync(string requestNumber)
{
- var entitys = await _repository.GetListAsync(p => p.MaterialRequestNumber == requestNumber)
+ var entitys = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber)
.ConfigureAwait(false);
return ObjectMapper.Map, List>(entitys);
}
+ ///
+ /// 库移回调
+ ///
+ ///
+ ///
[HttpPost("Do-Call-Back")]
public async Task DoTransferLibCallbackAsync(TransferLibJobDTO dto)
{
- var job = await _repository.FindAsync(p => p.Number == dto.JobNumber).ConfigureAwait(false);
+ var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false);
- //todo 等云峰写好换成真实的
- var transferLibJobDto = await _transferLibJobAppService.GetByNumberAsync("AAA").ConfigureAwait(false);
- var transferLibNote = new TransferLibNote();
+ if (job.JobStatus != EnumJobStatus.Wait)
+ {
+ throw new UserFriendlyException($"任务状态不是{EnumJobStatus.Wait.GetDisplayName()}");
+ }
- var transferLibNoteDetail = transferLibNote.Details.First();
+ var transferLibNoteDetail = dto.Details.First();
var jobDetail = job.Details.First();
+
job.JobStatus = EnumJobStatus.Open;
jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate;
@@ -199,133 +187,391 @@ public class CoatingIssueJobAppService
jobDetail.TransferLibToWarehouseCode = transferLibNoteDetail.HandledToWarehouseCode;
await _repository.UpdateAsync(job).ConfigureAwait(false);
+ }
+
+ ///
+ /// 执行任务明细
+ ///
+ ///
+ [HttpPost("ExecuteDetail/{masterId}")]
+ public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, CoatingIssueJobDetailDTO issueJobDetailDto)
+ {
+ var coatingIssueJob = await _repository.GetAsync(masterId).ConfigureAwait(false);
+ coatingIssueJob.JobStatus = EnumJobStatus.Doing;
+
+ var coatingIssueJobDto = ObjectMapper.Map(coatingIssueJob);
+ coatingIssueJobDto.Details = new List { issueJobDetailDto };
+ var coatingIssueNoteEditInput = await BuildCoatingIssueNoteAsync(coatingIssueJobDto).ConfigureAwait(false);
+ await _coatingIssueNoteAppService.CreateAsync(coatingIssueNoteEditInput).ConfigureAwait(false);
+
+ var issueJobDetail = ObjectMapper.Map(issueJobDetailDto);
+ var entityDetail = coatingIssueJob.Details.Find(p => p.Id == detailId);
+ issueJobDetail.HandledFromQty = entityDetail.HandledFromQty;
+ issueJobDetail.HandledToQty = entityDetail.HandledToQty;
+
+ issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty;
+ issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty;
+ coatingIssueJob.Details = new EditableList() { issueJobDetail };
+
+ if (coatingIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成
+ {
+ await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ }
+ else
+ {
+ var detail = coatingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id);
+ if (issueJobDetail.HandledToQty >= detail.RequestQty)
+ {
+ await UpdateRequestAndjobStatusDoneAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ }
+ else
+ {
+ await RemoveExpectOutAsync(coatingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ }
+ }
+
+ await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false);
+ }
+
+ ///
+ /// 完成任务
+ ///
+ ///
+ ///
+ [HttpPost("Complete/{id}")]
+ public async Task CompleteAsync(Guid id)
+ {
+ var coatingIssueJob = await _repository.FindAsync(id).ConfigureAwait(false);
+
+ coatingIssueJob.JobStatus = EnumJobStatus.Done;
+
+ await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false);
+
+ await CoatingIssueRequestAppService.UpdateStatusCompletedAsync(coatingIssueJob.CoatingRequestNumber).ConfigureAwait(false);
+ await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false);
+ }
+
+ ///
+ /// 请求点了完成,任务全部都完成
+ ///
+ ///
+ ///
+ [HttpPost("complete-by-request/{requestNumber}")]
+ public async Task CompleteByRequestNumberAsync(string requestNumber)
+ {
+ var coatingIssueJobs = await _repository.GetListAsync(p => p.CoatingRequestNumber == requestNumber).ConfigureAwait(false);
+
+ foreach (var coatingIssueJob in coatingIssueJobs)
+ {
+ coatingIssueJob.JobStatus = EnumJobStatus.Done;
+ await _repository.UpdateAsync(coatingIssueJob).ConfigureAwait(false);
+ await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false);
+ }
+ }
+
+ #region 立库
+
+ ///
+ /// 立体库同步
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("sync-issue-job-stereo")]
+
+ public async Task SyncIssueJobStereoAsync(List input, string p_loc)
+ {
+ ReusltObject ret = new ReusltObject();
+ ret.Code = "1";
+ ret.Message = "操作成功";
+ ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
+ try
+ {
+ List IssueJobToRestoDetailDTOs = new List();
+ IssueJobToRestoDTO main = new IssueJobToRestoDTO();
+ main.OperatorName = CurrentUser.UserName;
+ foreach (var job in input)
+ {
+ foreach (var jobitem in job.Details)
+ {
+ IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO()
+ {
+ Count = jobitem.HandledToQty,
+ ProductNo = jobitem.ItemCode,
+ NeedSite = p_loc,
+ WorkNo = job.Number,
+ TaskNo = job.Number
+ });
+ }
+ }
+ main.Details = IssueJobToRestoDetailDTOs;
+ var httpclient = _httpClientFactory.CreateClient();
+#if DEBUG
+
+ string json = System.Text.Json.JsonSerializer.Serialize(main);
+ _options.Value.Address = "http://localhost:59094/";//测试地址
+ _options.Value.Token = "";//测试token
+ _options.Value.UserName = "";//测试用户名
+ _options.Value.Password = "";//测试密码
+
+#endif
+ if (!string.IsNullOrEmpty(_options.Value.Token))
+ {
+ var token = _options.Value.Token;
+ httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
+ }
+ if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password))
+ {
+ var username = _options.Value.UserName;
+ var password = _options.Value.Password;
+ httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($"{username}:{password}")));
+ }
+
+ IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
+ ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ ret = new ReusltObject();
+ ret.Code = "2";
+ ret.Message = ex.Message;
+ ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
+ }
+
+ return ret;
+
+ }
+
+ [HttpPost("receive-issue-job-stereo")]
+ public virtual async Task SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input)
+ {
+
+#if DEBUG
+ var json = System.Text.Json.JsonSerializer.Serialize(input);
+#endif
+ List errors = new List();
+ var ret = new ReusltObject()
+ {
+ Code = "1",
+ OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
+ Message = "操作成功"
+ };
+ try
+ {
+
+ if (input.Jobs.Count > 0)
+ {
+ var jobs = input.Jobs;
+ var numbers = jobs.Select(p => p.JobNumber);
+ var query = _repository.WithDetails()
+ .Where(p => numbers.Contains(p.Number));
+ var entities = query.ToList();
+ var dtos = ObjectMapper.Map, List>(entities);
+ if (input.Jobs.Count == entities.Count)
+ {
+ errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n");
+ }
+ foreach (var itm in dtos)
+ {
+ var first = jobs.FirstOrDefault(p => p.JobNumber == itm.Number);
+ var itmDetails = itm.Details.ToList();
+ List details = new List();
+ foreach (var detail in first.Details)
+ {
+ var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
+ CoatingIssueJobDetailDTO dto = new CoatingIssueJobDetailDTO();
+ dto.HandledFromLocationCode = entity.HandledFromLocationCode;
+ dto.HandledToLocationCode = entity.HandledToLocationCode;
+ dto.ItemCode = detail.ItemCode;
+ dto.RecommendFromQty = detail.Qty;
+ dto.RecommendToQty = detail.Qty;
+ dto.HandledFromQty = detail.Qty;
+ dto.HandledToQty = detail.Qty;
+ dto.Status = entity.Status;
+ details.Add(dto);
+ }
+ itm.Details = details;
+ await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
+ }
+ }
+ else
+ {
+ errors.Add("立体库确认单据里无数据! \n");
+ }
+ }
+ catch (Exception ex)
+ {
+ ret = new ReusltObject()
+ {
+ Code = "2",
+ OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
+ Message = ex.Message
+ };
+ return ret;
+ }
+ if (errors.Count > 0)
+ {
+
+ ret = new ReusltObject()
+ {
+ Code = "2",
+ OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
+ Message = string.Join(",", errors.ToArray())
+ };
+ }
+ return ret;
+ }
+
+ #endregion
+
+ #region 私有
+
+ ///
+ /// 创建补料记录实体
+ ///
+ ///
+ ///
+ private async Task BuildCoatingIssueNoteAsync(CoatingIssueJobDTO coatingIssueJobDto)
+ {
+ var coatingIssueNoteCreateInput =
+ ObjectMapper.Map(coatingIssueJobDto);
+ coatingIssueNoteCreateInput.JobNumber = coatingIssueJobDto.Number;
+
+ await Task.CompletedTask.ConfigureAwait(false);
+
+ return coatingIssueNoteCreateInput;
+ }
+
+ ///
+ /// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值
+ ///
+ ///
+ ///
+ private async Task CheckMinRowAndSetStatusAsync(CoatingIssueJobEditInput input)
+ {
+ var jobDetailInputdetail = input.Details.FirstOrDefault();
+
+ var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
+ .ConfigureAwait(false);
+
+ if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
+ {
+ input.JobStatus = EnumJobStatus.Wait;
+ }
+ else if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode == 1)
+ {
+ jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate;
+ jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode;
+ jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate;
+ jobDetailInputdetail.TransferLibFromLocationArea = jobDetailInputdetail.RecommendFromLocationArea;
+ jobDetailInputdetail.TransferLibFromLocationCode = jobDetailInputdetail.RecommendFromLocationCode;
+ jobDetailInputdetail.TransferLibFromLocationErpCode = jobDetailInputdetail.RecommendFromLocationErpCode;
+ jobDetailInputdetail.TransferLibFromLocationGroup = jobDetailInputdetail.RecommendFromLocationGroup;
+ jobDetailInputdetail.TransferLibFromLot = jobDetailInputdetail.RecommendFromLot;
+ jobDetailInputdetail.TransferLibFromPackingCode = jobDetailInputdetail.RecommendFromPackingCode;
+ jobDetailInputdetail.TransferLibFromProduceDate = jobDetailInputdetail.RecommendFromProduceDate;
+ jobDetailInputdetail.TransferLibFromQty = jobDetailInputdetail.RecommendFromQty;
+ jobDetailInputdetail.TransferLibFromSupplierBatch = jobDetailInputdetail.RecommendFromSupplierBatch;
+ jobDetailInputdetail.TransferLibFromWarehouseCode = jobDetailInputdetail.RecommendFromWarehouseCode;
+
+ jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate;
+ jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode;
+ jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate;
+ jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot;
+ jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode;
+ jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate;
+ jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty;
+ jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch;
+ jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.TransferLibFromWarehouseCode;
+ jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.TransferLibFromLocationArea;
+ jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.TransferLibFromLocationCode;
+ jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.TransferLibFromLocationErpCode;
+ jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.TransferLibFromLocationGroup;
+ }
+ }
+
+ ///
+ /// 判断是不是在立体库
+ ///
+ ///
+ ///
+ private async Task CheckDimensionalStorehouseAsync(CoatingIssueJobEditInput input)
+ {
+ var jobDetailInputdetail = input.Details.FirstOrDefault();
+
+ var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
+ .ConfigureAwait(false);
+
+ if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
+ {
+ input.JobStatus = EnumJobStatus.Wait;
+ }
+ }
- return;
+ ///
+ /// 判断是不是在立体库
+ ///
+ ///
+ ///
+ private async Task CheckDimensionalStorehouseAsync(CoatingIssueJobDTO coatingIssueJobDto)
+ {
+ var jobDetailInputdetail = coatingIssueJobDto.Details.FirstOrDefault();
+
+ var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
+ .ConfigureAwait(false);
+
+ if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
+ {
+ //TODO 立体库
+ var ret = await SyncIssueJobStereoAsync(new List { coatingIssueJobDto }, loctionDto.Code).ConfigureAwait(false);
+ if (ret.Code != "1")
+ {
+ throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}");
+ }
+ }
+
+
+ }
+
+ ///
+ /// 修改当前任务状态 和 该任务的请求状态
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private async Task UpdateRequestAndjobStatusDoneAsync(CoatingIssueJob coatingIssueJob,
+ CoatingIssueJobDetailDTO coatingIssueJobDetailDto, decimal handledToQty)
+ {
+ if (coatingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None
+ or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中
+ {
+ throw new UserFriendlyException(
+ $"任务状态错误:编号为【{coatingIssueJob.Number}】的任务状态为【{coatingIssueJob.JobStatus.GetDisplayName()}】");
+ }
+
+ coatingIssueJob.JobStatus = EnumJobStatus.Done;
+
+ await RemoveExpectOutAsync(coatingIssueJob, coatingIssueJobDetailDto, handledToQty).ConfigureAwait(false);
+
+ //await _expectOutAppService.RemoveByNumberAsync(coatingIssueJob.Number).ConfigureAwait(false);
+
+ await CoatingIssueRequestAppService.UpdateStatusCompletedAsync(coatingIssueJob.CoatingRequestNumber)
+ .ConfigureAwait(false);
+
+ await Task.CompletedTask.ConfigureAwait(false);
}
+ private async Task RemoveExpectOutAsync(CoatingIssueJob coatingIssueJob, CoatingIssueJobDetailDTO coatingIssueJobDetailDto,
+ decimal handledToQty)
+ {
+ await _expectOutAppService.RemoveByNumberAndInventoryAsync(coatingIssueJob.Number,
+ coatingIssueJobDetailDto.ItemCode,
+ coatingIssueJobDetailDto.HandledToLocationCode, coatingIssueJobDetailDto.HandledToPackingCode,
+ coatingIssueJobDetailDto.Status, coatingIssueJobDetailDto.HandledToLot,
+ handledToQty).ConfigureAwait(false);
+ }
- //[HttpPost("sync-issue-job-stereo")]
- //public virtual async Task SyncCoatingJobStereoAsync(List input)
- //{
-
- // ReusltObject ret=new ReusltObject();
- // ret.Code = "1";
- // ret.Message = "操作成功";
- // ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
-
- // List IssueJobToRestoDetailDTOs = new List();
- // IssueJobToRestoDTO main=new IssueJobToRestoDTO();
- // main.OperatorName=CurrentUser.UserName;
- // foreach (var job in input)
- // {
- // foreach (var jobitem in job.Details)
- // {
- // IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO()
- // {
- // Count=jobitem.HandledToQty,
- // ProductNo=jobitem.ItemCode,
- // NeedSite=jobitem.HandledToLocationCode,
- // WorkNo=job.Number,
- // TaskNo=job.Number
- // });
- // }
- // }
- // main.Details=IssueJobToRestoDetailDTOs;
-
- // #region
- // IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, _httpClientFactory.CreateClient());
- // ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
- // #endregion
- // return ret;
-
- //}
-
-
-
-
- //[HttpPost("receive-issue-job-stereo")]
- //public virtual async Task SyncReciveCoatingJobStereoAsync(IssueRequestFromRestoDTO input)
- //{
- // List errors = new List();
- // var ret=new ReusltObject()
- // {
- // Code = "1",
- // OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
- // Message = "操作成功"
- // };
- // try
- // {
- // if (input.Jobs.Count > 0)
- // {
- // var inputs = input.Jobs;
- // var numbers = inputs.Select(p => p.JobNumber);
- // var query = _repository.WithDetails()
- // .Where(p => numbers.Contains(p.Number));
- // var entities = query.ToList();
-
- // if (input.Jobs.Count == entities.Count) {
- // errors.Add("出库任务和WMS出库任务不符,请核对! \n");
- // }
- // var dtos = ObjectMapper.Map, List>(entities);
- // foreach (var itm in dtos)
- // {
- // var first = inputs.FirstOrDefault(p => p.JobNumber == itm.Number);
-
- // var itmDetails = itm.Details;
- // List details = new List();
- // foreach (var detail in first.Details)
- // {
- // var entity=itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
- // CoatingIssueJobDetailDTO dto = new CoatingIssueJobDetailDTO();
- // dto.HandledFromLocationCode = entity.HandledFromContainerCode;
- // dto.HandledToLocationCode = entity.HandledToLocationCode;
- // dto.ItemCode = detail.ItemCode;
- // dto.RecommendFromQty = detail.Qty;
- // dto.RecommendToQty = detail.Qty;
- // dto.HandledFromQty = detail.Qty;
- // dto.HandledToQty = detail.Qty;
- // details.Add(dto);
- // }
- // itm.Details = details;
- // await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
- // }
-
- // }
- // else
- // {
- // errors.Add("立体库确认单据里无数据! \n");
- // }
- // }
- // catch (Exception ex)
- // {
- // ret=new ReusltObject()
- // {
- // Code = "2",
- // OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
- // Message = ex.Message
- // };
- // return ret;
- // }
-
- // if (errors.Count > 0)
- // {
-
- // ret= new ReusltObject()
- // {
- // Code = "2",
- // OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
- // Message = string.Join(",",errors.ToArray())
- // };
- // }
- // return ret;
- //}
-
-
-
-
-
-
-
-
-
+ #endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs
index 3a3a961e5..ab712ae9c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobAutoMapperProfile.cs
@@ -2,7 +2,6 @@ using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
namespace Win_in.Sfs.Wms.Store.Application;
@@ -13,8 +12,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap()
.ReverseMap();
- //CreateMap();
-
CreateMap()
;
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs
index f1e5d8d17..d3ee9c10d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/IssueJobAppService.cs
@@ -43,7 +43,7 @@ public class IssueJobAppService
///
[Authorize]
[HttpGet("check-job-exist")]
- public virtual async Task> CheckJobExistByItemCodeAndLocationCode(string itemCode,
+ public virtual async Task> CheckJobExistByItemCodeAndLocationCodeAsync(string itemCode,
string locationCode)
{
var entities = await _repository.GetListAsync(c =>
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
index 782d22947..6376a2716 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
+using System.Text;
+using System.Text.Json;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization;
@@ -10,7 +12,6 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using MyNamespace;
using Volo.Abp;
-using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
@@ -18,12 +19,9 @@ 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;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
using Win_in.Sfs.Wms.Store.Jobs.IssueJobs.proxy;
using Win_in.Sfs.Wms.Store.Notes;
using Win_in.Sfs.Wms.Store.Options;
-using static IdentityModel.ClaimComparer;
-using static Volo.Abp.Identity.Settings.IdentitySettingNames;
namespace Win_in.Sfs.Wms.Store.Application;
@@ -36,10 +34,10 @@ public class KittingIssueJobAppService
{
private readonly IKittingIssueJobManager _kittingIssueJobManager;
private readonly ILocationAppService _locationAppService;
- private readonly ITransferLibJobAppService _transferLibJobAppService;
private readonly IKittingIssueNoteAppService _kittingIssueNoteAppService;
private readonly IExpectOutAppService _expectOutAppService;
private readonly IHttpClientFactory _httpClientFactory;
+ private readonly ITransferLibRequestAppService _transferLibRequestAppService;
private readonly IOptions _options;
protected IKittingIssueRequestAppService KittingIssueRequestAppService =>
@@ -47,23 +45,19 @@ public class KittingIssueJobAppService
public KittingIssueJobAppService(
IKittingIssueJobRepository repository, IKittingIssueJobManager kittingIssueJobManager,
- ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService,
+ ILocationAppService locationAppService,
IKittingIssueNoteAppService kittingIssueNoteAppService, IExpectOutAppService expectOutAppService
, IHttpClientFactory httpClientFactory
- , IOptions options
-
-
-
- ) : base(
+ , IOptions options, ITransferLibRequestAppService transferLibRequestAppService) : base(
repository, kittingIssueJobManager)
{
_kittingIssueJobManager = kittingIssueJobManager;
_locationAppService = locationAppService;
- _transferLibJobAppService = transferLibJobAppService;
_kittingIssueNoteAppService = kittingIssueNoteAppService;
_expectOutAppService = expectOutAppService;
_httpClientFactory = httpClientFactory;
_options = options;
+ _transferLibRequestAppService = transferLibRequestAppService;
}
[HttpPost("add-many")]
@@ -75,12 +69,12 @@ public class KittingIssueJobAppService
await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
}
- var kittingIssueJobDtos=await base.CreateManyAsync(inputs).ConfigureAwait(false);
+ var kittingIssueJobDtos = await base.CreateManyAsync(inputs).ConfigureAwait(false);
foreach (var kittingIssueJobDto in kittingIssueJobDtos)
{
await CheckDimensionalStorehouseAsync(kittingIssueJobDto).ConfigureAwait(false);
}
-
+
return kittingIssueJobDtos;
}
@@ -90,7 +84,7 @@ public class KittingIssueJobAppService
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false);
await CheckDimensionalStorehouseAsync(input).ConfigureAwait(false);
- var kittingIssueJobDto=await base.CreateAsync(input).ConfigureAwait(false);
+ var kittingIssueJobDto = await base.CreateAsync(input).ConfigureAwait(false);
await CheckDimensionalStorehouseAsync(kittingIssueJobDto).ConfigureAwait(false);
return kittingIssueJobDto;
@@ -99,23 +93,31 @@ public class KittingIssueJobAppService
[HttpPost("invalid")]
public override async Task CancelAsync(Guid id)
{
- var injectionJob = await _repository.GetAsync(id).ConfigureAwait(false);
- if (injectionJob == null)
+ var kittingJob = await _repository.GetAsync(id).ConfigureAwait(false);
+ if (kittingJob == null)
{
throw new UserFriendlyException($"未找到ID为 {id} 的任务");
}
- await _kittingIssueJobManager.CancelAsync(injectionJob).ConfigureAwait(false);
- }
+ if (kittingJob.JobStatus == EnumJobStatus.Open ||
+ kittingJob.JobStatus == EnumJobStatus.Partial ||
+ kittingJob.JobStatus == EnumJobStatus.Wait||
+ kittingJob.JobStatus == EnumJobStatus.Doing)
+ {
+ await _expectOutAppService.RemoveByNumberAsync(kittingJob.Number).ConfigureAwait(false);
+ await _transferLibRequestAppService.CancelByCallRequestNumberAsync(kittingJob.KittingRequestNumber)
+ .ConfigureAwait(false);
- [HttpPost("cancel-by-request/{requestNumber}")]
- public virtual async Task CancelByMaterialRequestAsync(string requestNumber)
- {
- var entities = await _repository.GetListAsync(p => p.KittingRequestNumber == requestNumber)
- .ConfigureAwait(false);
- foreach (var entity in entities)
+ kittingJob.JobStatus = EnumJobStatus.Cancelled;
+ await _repository.UpdateAsync(kittingJob).ConfigureAwait(false);
+ }
+ else
{
- await _kittingIssueJobManager.CancelAsync(entity).ConfigureAwait(false);
+ throw new UserFriendlyException($"任务状态不是" +
+ $"{EnumJobStatus.Open.GetDisplayName()}、" +
+ $"{EnumJobStatus.Partial.GetDisplayName()}、" +
+ $"{EnumJobStatus.Doing.GetDisplayName()}、" +
+ $"{EnumJobStatus.Wait.GetDisplayName()}");
}
}
@@ -137,11 +139,15 @@ public class KittingIssueJobAppService
{
var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false);
- var transferLibJobDto = await _transferLibJobAppService.GetByNumberAsync(dto.Number).ConfigureAwait(false);
+ if (job.JobStatus != EnumJobStatus.Wait)
+ {
+ throw new UserFriendlyException($"任务状态不是{EnumJobStatus.Wait.GetDisplayName()}");
+ }
var transferLibNoteDetail = dto.Details.First();
var jobDetail = job.Details.First();
+
job.JobStatus = EnumJobStatus.Open;
jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate;
@@ -190,49 +196,237 @@ public class KittingIssueJobAppService
var kittingIssueNoteEditInput = await BuildKittingIssueNoteAsync(kittingIssueJobDto).ConfigureAwait(false);
await _kittingIssueNoteAppService.CreateAsync(kittingIssueNoteEditInput).ConfigureAwait(false);
- var issueJobDetail=ObjectMapper.Map(issueJobDetailDto);
- var entityDetail=kittingIssueJob.Details.Find(p => p.Id == detailId);
+ var issueJobDetail = ObjectMapper.Map(issueJobDetailDto);
+ var entityDetail = kittingIssueJob.Details.Find(p => p.Id == detailId);
issueJobDetail.HandledFromQty = entityDetail.HandledFromQty;
issueJobDetail.HandledToQty = entityDetail.HandledToQty;
issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty;
issueJobDetail.HandledFromQty += issueJobDetailDto.HandledFromQty;
- kittingIssueJob.Details = new EditableList() { issueJobDetail };
+ kittingIssueJob.Details = new EditableList { issueJobDetail };
if (kittingIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成
{
- await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ if (issueJobDetailDto.RecommendToPackingCode != issueJobDetailDto.HandledToPackingCode)
+ {
+ await CheckPackingCodeIsUserAsync(issueJobDetailDto.HandledToPackingCode, kittingIssueJob.Number).ConfigureAwait(false);
+ }
+
+ await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty)
+ .ConfigureAwait(false);
+ await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
}
else
{
var detail = kittingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id);
if (issueJobDetail.HandledToQty >= detail.RequestQty)
{
- await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto,
+ issueJobDetailDto.HandledToQty).ConfigureAwait(false);
+ }
+ else
+ {
+ await RemoveExpectOutAsync(kittingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty)
+ .ConfigureAwait(false);
}
}
await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false);
}
- [HttpPost("CompleteAsync/{id}")]
+ ///
+ /// 完成任务
+ ///
+ ///
+ ///
+ [HttpPost("Complete/{id}")]
public async Task CompleteAsync(Guid id)
{
- var kittingIssueJob=await _repository.FindAsync(id).ConfigureAwait(false);
+ var kittingIssueJob = await _repository.FindAsync(id).ConfigureAwait(false);
kittingIssueJob.JobStatus = EnumJobStatus.Done;
- await _expectOutAppService.RemoveByNumberAndInventoryAsync(kittingIssueJob.Number,
- kittingIssueJob.Details.First().ItemCode,
- kittingIssueJob.Details.First().HandledToLocationCode, kittingIssueJob.Details.First().HandledToPackingCode,
- kittingIssueJob.Details.First().Status, kittingIssueJob.Details.First().HandledToLot,
- kittingIssueJob.Details.First().HandledToQty).ConfigureAwait(false);
-
await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
+ await KittingIssueRequestAppService.UpdateStatusCompletedAsync(kittingIssueJob.KittingRequestNumber)
+ .ConfigureAwait(false);
+ await _transferLibRequestAppService.CancelByCallRequestNumberAsync(kittingIssueJob.KittingRequestNumber)
+ .ConfigureAwait(false);
+
await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false);
}
+ ///
+ /// 请求点了完成,任务全部都完成
+ ///
+ ///
+ ///
+ [HttpPost("complete-by-request/{requestNumber}")]
+ public async Task CompleteByRequestNumberAsync(string requestNumber)
+ {
+ var kittingIssueJobs = await _repository.GetListAsync(p => p.KittingRequestNumber == requestNumber)
+ .ConfigureAwait(false);
+
+ foreach (var kittingIssueJob in kittingIssueJobs)
+ {
+ kittingIssueJob.JobStatus = EnumJobStatus.Done;
+ await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false);
+ await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
+ await _transferLibRequestAppService.CancelByCallRequestNumberAsync(kittingIssueJob.KittingRequestNumber)
+ .ConfigureAwait(false);
+ }
+ }
+
+ #region 立库
+
+ ///
+ /// 立体库同步
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("sync-issue-job-stereo")]
+ public async Task SyncIssueJobStereoAsync(List input, string p_loc)
+ {
+ var ret = new ReusltObject();
+ ret.Code = "1";
+ ret.Message = "操作成功";
+ ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
+ try
+ {
+ var IssueJobToRestoDetailDTOs = new List();
+ var main = new IssueJobToRestoDTO();
+ main.OperatorName = CurrentUser.UserName;
+ foreach (var job in input)
+ {
+ foreach (var jobitem in job.Details)
+ {
+ IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO
+ {
+ Count = jobitem.HandledToQty,
+ ProductNo = jobitem.ItemCode,
+ NeedSite = p_loc,
+ WorkNo = job.Number,
+ TaskNo = job.Number
+ });
+ }
+ }
+
+ main.Details = IssueJobToRestoDetailDTOs;
+ var httpclient = _httpClientFactory.CreateClient();
+#if DEBUG
+
+ var json = JsonSerializer.Serialize(main);
+ _options.Value.Address = "http://localhost:59094/"; //测试地址
+ _options.Value.Token = ""; //测试token
+ _options.Value.UserName = ""; //测试用户名
+ _options.Value.Password = ""; //测试密码
+
+#endif
+ if (!string.IsNullOrEmpty(_options.Value.Token))
+ {
+ var token = _options.Value.Token;
+ httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
+ }
+
+ if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password))
+ {
+ var username = _options.Value.UserName;
+ var password = _options.Value.Password;
+ httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
+ Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}")));
+ }
+
+ var client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
+ ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ ret = new ReusltObject();
+ ret.Code = "2";
+ ret.Message = ex.Message;
+ ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
+ }
+
+ return ret;
+ }
+
+ [HttpPost("receive-issue-job-stereo")]
+ public virtual async Task SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input)
+ {
+#if DEBUG
+ var json = JsonSerializer.Serialize(input);
+#endif
+ var errors = new List();
+ var ret = new ReusltObject { Code = "1", OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), Message = "操作成功" };
+ try
+ {
+ if (input.Jobs.Count > 0)
+ {
+ var jobs = input.Jobs;
+ var numbers = jobs.Select(p => p.JobNumber);
+ var query = _repository.WithDetails()
+ .Where(p => numbers.Contains(p.Number));
+ var entities = query.ToList();
+ var dtos = ObjectMapper.Map, List>(entities);
+ if (input.Jobs.Count == entities.Count)
+ {
+ errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n");
+ }
+
+ foreach (var itm in dtos)
+ {
+ var first = jobs.FirstOrDefault(p => p.JobNumber == itm.Number);
+ var itmDetails = itm.Details.ToList();
+ var details = new List();
+ foreach (var detail in first.Details)
+ {
+ var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
+ var dto = new KittingIssueJobDetailDTO();
+ dto.HandledFromLocationCode = entity.HandledFromLocationCode;
+ dto.HandledToLocationCode = entity.HandledToLocationCode;
+ dto.ItemCode = detail.ItemCode;
+ dto.RecommendFromQty = detail.Qty;
+ dto.RecommendToQty = detail.Qty;
+ dto.HandledFromQty = detail.Qty;
+ dto.HandledToQty = detail.Qty;
+ dto.Status = entity.Status;
+ details.Add(dto);
+ }
+
+ itm.Details = details;
+ await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
+ }
+ }
+ else
+ {
+ errors.Add("立体库确认单据里无数据! \n");
+ }
+ }
+ catch (Exception ex)
+ {
+ ret = new ReusltObject
+ {
+ Code = "2", OperateTime = DateTime.Now.ToString("yyyy-MM-dd"), Message = ex.Message
+ };
+ return ret;
+ }
+
+ if (errors.Count > 0)
+ {
+ ret = new ReusltObject
+ {
+ Code = "2",
+ OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
+ Message = string.Join(",", errors.ToArray())
+ };
+ }
+
+ return ret;
+ }
+
+ #endregion
+
#region 私有
///
@@ -332,25 +526,25 @@ public class KittingIssueJobAppService
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
//TODO 立体库
- var ret = await SyncIssueJobStereoAsync(new List { kittingIssueJobDto }, loctionDto.Code).ConfigureAwait(false);
+ var ret = await SyncIssueJobStereoAsync(new List { kittingIssueJobDto },
+ loctionDto.Code).ConfigureAwait(false);
if (ret.Code != "1")
{
throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}");
}
}
-
-
}
///
- /// 修改当前任务状态 和 该任务的请求状态
+ /// 修改当前任务状态 和 该任务的请求状态
///
///
///
+ ///
///
///
private async Task UpdateRequestAndjobStatusDoneAsync(KittingIssueJob kittingIssueJob,
- KittingIssueJobDetailDTO kittingIssueJobDetailDto,decimal handledToQty)
+ KittingIssueJobDetailDTO kittingIssueJobDetailDto, decimal handledToQty)
{
if (kittingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None
or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中
@@ -361,11 +555,7 @@ public class KittingIssueJobAppService
kittingIssueJob.JobStatus = EnumJobStatus.Done;
- await _expectOutAppService.RemoveByNumberAndInventoryAsync(kittingIssueJob.Number,
- kittingIssueJobDetailDto.ItemCode,
- kittingIssueJobDetailDto.HandledToLocationCode, kittingIssueJobDetailDto.HandledToPackingCode,
- kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot,
- handledToQty).ConfigureAwait(false);
+ await RemoveExpectOutAsync(kittingIssueJob, kittingIssueJobDetailDto, handledToQty).ConfigureAwait(false);
//await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
@@ -375,157 +565,33 @@ public class KittingIssueJobAppService
await Task.CompletedTask.ConfigureAwait(false);
}
-
-
-
///
- /// 立体库同步
+ /// 判断实际TO的箱码是否被占用
///
- ///
- ///
+ ///
+ ///
///
- [HttpPost("sync-issue-job-stereo")]
-
- public async Task SyncIssueJobStereoAsync(List input,string p_loc)
+ ///
+ private async Task CheckPackingCodeIsUserAsync(string packingCode,string jobNumber)
{
- ReusltObject ret = new ReusltObject();
- ret.Code = "1";
- ret.Message = "操作成功";
- ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
- try
+ var list = await _expectOutAppService.GetListByPackingCodeAsync(packingCode).ConfigureAwait(false);
+ list=list.Where(p => p.JobNumber != jobNumber).ToList();
+ if (list.Any())
{
- List IssueJobToRestoDetailDTOs = new List();
- IssueJobToRestoDTO main = new IssueJobToRestoDTO();
- main.OperatorName = CurrentUser.UserName;
- foreach (var job in input)
- {
- foreach (var jobitem in job.Details)
- {
- IssueJobToRestoDetailDTOs.Add(new IssueJobToRestoDetailDTO()
- {
- Count = jobitem.HandledToQty,
- ProductNo = jobitem.ItemCode,
- NeedSite = p_loc,
- WorkNo = job.Number,
- TaskNo = job.Number
- });
- }
- }
- main.Details = IssueJobToRestoDetailDTOs;
- var httpclient = _httpClientFactory.CreateClient();
-#if DEBUG
-
- string json= System.Text.Json.JsonSerializer.Serialize(main);
- _options.Value.Address = "http://localhost:59094/";//测试地址
- _options.Value.Token = "";//测试token
- _options.Value.UserName = "";//测试用户名
- _options.Value.Password = "";//测试密码
-
-#endif
- if (!string.IsNullOrEmpty(_options.Value.Token))
- {
- var token = _options.Value.Token;
- httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",token );
- }
- if (!string.IsNullOrEmpty(_options.Value.UserName) && !string.IsNullOrEmpty(_options.Value.Password))
- {
- var username = _options.Value.UserName;
- var password = _options.Value.Password;
- httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes($"{username}:{password}")));
- }
-
- IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
- ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
- }
- catch(Exception ex) {
- ret = new ReusltObject();
- ret.Code = "2";
- ret.Message=ex.Message;
- ret.OperateTime = DateTime.Now.ToString("yyyy-MM-dd");
+ throw new UserFriendlyException($"任务号【{list.First().JobNumber}】已占用,【{packingCode}】箱码");
}
-
- return ret;
-
}
- [HttpPost("receive-issue-job-stereo")]
- public virtual async Task SyncReciveIssueJobStereoAsync(IssueRequestFromRestoDTO input)
+ private async Task RemoveExpectOutAsync(KittingIssueJob kittingIssueJob,
+ KittingIssueJobDetailDTO kittingIssueJobDetailDto,
+ decimal handledToQty)
{
-
-#if DEBUG
- var json= System.Text.Json.JsonSerializer.Serialize(input);
-#endif
- List errors = new List();
- var ret = new ReusltObject()
- {
- Code = "1",
- OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
- Message = "操作成功"
- };
- try
- {
-
- if (input.Jobs.Count > 0)
- {
- var jobs = input.Jobs;
- var numbers = jobs.Select(p => p.JobNumber);
- var query = _repository.WithDetails()
- .Where(p => numbers.Contains(p.Number));
- var entities = query.ToList();
- var dtos = ObjectMapper.Map, List>(entities);
- if (input.Jobs.Count == entities.Count)
- {
- errors.Add("立体库提交出库任务和WMS任务不符,请核对! \n");
- }
- foreach (var itm in dtos)
- {
- var first = jobs.FirstOrDefault(p => p.JobNumber == itm.Number);
- var itmDetails= itm.Details.ToList();
- List details = new List();
- foreach (var detail in first.Details)
- {
- var entity = itmDetails.FirstOrDefault(p => p.ItemCode == detail.ItemCode);
- KittingIssueJobDetailDTO dto = new KittingIssueJobDetailDTO();
- dto.HandledFromLocationCode = entity.HandledFromLocationCode;
- dto.HandledToLocationCode = entity.HandledToLocationCode;
- dto.ItemCode = detail.ItemCode;
- dto.RecommendFromQty = detail.Qty;
- dto.RecommendToQty = detail.Qty;
- dto.HandledFromQty = detail.Qty;
- dto.HandledToQty = detail.Qty;
- dto.Status =entity.Status;
- details.Add(dto);
- }
- itm.Details = details;
- await CompleteAsync(itm.Id, itm).ConfigureAwait(false);
- }
- }
- else
- {
- errors.Add("立体库确认单据里无数据! \n");
- }
- }
- catch (Exception ex)
- {
- ret = new ReusltObject()
- {
- Code = "2",
- OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
- Message = ex.Message
- };
- return ret;
- }
- if (errors.Count > 0)
- {
-
- ret = new ReusltObject()
- {
- Code = "2",
- OperateTime = DateTime.Now.ToString("yyyy-MM-dd"),
- Message = string.Join(",", errors.ToArray())
- };
- }
- return ret;
+ await _expectOutAppService.RemoveByNumberAndInventoryAsync(kittingIssueJob.Number,
+ kittingIssueJobDetailDto.ItemCode,
+ kittingIssueJobDetailDto.HandledToLocationCode, kittingIssueJobDetailDto.HandledToPackingCode,
+ kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot,
+ handledToQty).ConfigureAwait(false);
}
+
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs
index 37689d407..ea33a207d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs
@@ -1,12 +1,14 @@
using System;
-using System.Reflection;
+using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@@ -16,23 +18,31 @@ namespace Win_in.Sfs.Wms.Store.Application;
[Authorize]
[Route($"{StoreConsts.RootPath}transfer-lib-job")]
-
public class TransferLibJobAppService
- : SfsJobAppServiceBase,
- ITransferLibJobAppService
+ : SfsJobAppServiceBase,
+ ITransferLibJobAppService
{
private readonly IServiceProvider _serviceProvider;
private readonly ILocationAppService _locationAppService;
+ private readonly IExpectOutAppService _expectOutAppService;
+
+ protected ITransferLibRequestAppService TransferLibRequestAppService =>
+ LazyServiceProvider.LazyGetRequiredService();
public TransferLibJobAppService(
- ITransferLibJobRepository repository, ITransferLibJobManager TransferLibJobManager, IServiceProvider serviceProvider, ILocationAppService locationAppService) : base(repository, TransferLibJobManager)
+ ITransferLibJobRepository repository, ITransferLibJobManager TransferLibJobManager,
+ IServiceProvider serviceProvider, ILocationAppService locationAppService,
+ IExpectOutAppService expectOutAppService) : base(repository,
+ TransferLibJobManager)
{
_serviceProvider = serviceProvider;
_locationAppService = locationAppService;
+ _expectOutAppService = expectOutAppService;
}
///
- /// 新移库完成任务
+ /// 新移库完成任务
///
///
///
@@ -41,32 +51,41 @@ public class TransferLibJobAppService
[UnitOfWork]
public override async Task CompleteAsync(Guid id, TransferLibJobDTO dto)
{
- string methodPrefix = "TransferLibJobAppService.CompleteAsync - ";
+ var methodPrefix = "TransferLibJobAppService.CompleteAsync - ";
if (dto.CallServerName.IsNullOrEmpty())
{
throw new UserFriendlyException($"{methodPrefix}CallServerName 不能为空");
}
+
if (dto.CallBusinessType.IsNullOrEmpty())
{
throw new UserFriendlyException($"{methodPrefix}CallBusinessType 不能为空");
}
+
if (dto.CallRequestNumber.IsNullOrEmpty())
{
throw new UserFriendlyException($"{methodPrefix}CallRequestNumber 不能为空");
}
+
if (dto.CallJobNumber.IsNullOrEmpty())
{
throw new UserFriendlyException($"{methodPrefix}CallJobNumber 不能为空");
}
#region 校验
+
foreach (var detailObj in dto.Details)
{
+ if (detailObj.RecommendToPackingCode != detailObj.HandledToPackingCode)
+ {
+ await CheckPackingCodeIsUserAsync(detailObj.HandledToPackingCode, dto.CallJobNumber).ConfigureAwait(false);
+ }
+
if (detailObj.IsPackingCodeFrom)
{
if (detailObj.RecommendFromPackingCode != detailObj.HandledFromPackingCode)
{
- throw new UserFriendlyException($"触发校验:推荐From箱码必须等于实际From箱码");
+ throw new UserFriendlyException("触发校验:推荐From箱码必须等于实际From箱码");
}
}
@@ -74,7 +93,7 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendToPackingCode != detailObj.HandledToPackingCode)
{
- throw new UserFriendlyException($"触发校验:推荐To箱码必须等于实际To箱码");
+ throw new UserFriendlyException("触发校验:推荐To箱码必须等于实际To箱码");
}
}
@@ -82,7 +101,7 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendFromLot != detailObj.HandledFromLot)
{
- throw new UserFriendlyException($"触发校验:推荐From批次必须等于实际From批次");
+ throw new UserFriendlyException("触发校验:推荐From批次必须等于实际From批次");
}
}
@@ -90,9 +109,10 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendToLot != detailObj.HandledToLot)
{
- throw new UserFriendlyException($"触发校验:推荐To批次必须等于实际To批次");
+ throw new UserFriendlyException("触发校验:推荐To批次必须等于实际To批次");
}
}
+
//if (detailObj.IsItemCodeFrom)
//if (detailObj.IsItemCodeTo)
//if (detailObj.IsStatusFrom)
@@ -101,7 +121,7 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendFromLocationCode != detailObj.HandledFromLocationCode)
{
- throw new UserFriendlyException($"触发校验:推荐From库位必须等于实际From库位");
+ throw new UserFriendlyException("触发校验:推荐From库位必须等于实际From库位");
}
}
@@ -109,7 +129,7 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendToLocationCode != detailObj.HandledToLocationCode)
{
- throw new UserFriendlyException($"触发校验:推荐To库位必须等于实际To库位");
+ throw new UserFriendlyException("触发校验:推荐To库位必须等于实际To库位");
}
}
@@ -117,7 +137,7 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendFromLocationGroup != detailObj.HandledFromLocationGroup)
{
- throw new UserFriendlyException($"触发校验:推荐From库位组必须等于实际From库位组");
+ throw new UserFriendlyException("触发校验:推荐From库位组必须等于实际From库位组");
}
}
@@ -125,14 +145,15 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendToLocationGroup != detailObj.HandledToLocationGroup)
{
- throw new UserFriendlyException($"触发校验:推荐To库位组必须等于实际To库位组");
+ throw new UserFriendlyException("触发校验:推荐To库位组必须等于实际To库位组");
}
}
+
if (detailObj.IsLocationAreaFrom)
{
if (detailObj.RecommendFromLocationArea != detailObj.HandledFromLocationArea)
{
- throw new UserFriendlyException($"触发校验:推荐From库区必须等于实际From库区");
+ throw new UserFriendlyException("触发校验:推荐From库区必须等于实际From库区");
}
}
@@ -140,14 +161,15 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendToLocationArea != detailObj.HandledToLocationArea)
{
- throw new UserFriendlyException($"触发校验:推荐To库区必须等于实际To库区");
+ throw new UserFriendlyException("触发校验:推荐To库区必须等于实际To库区");
}
}
+
if (detailObj.IsLocationErpCodeFrom)
{
if (detailObj.RecommendFromLocationErpCode != detailObj.HandledFromLocationErpCode)
{
- throw new UserFriendlyException($"触发校验:推荐From ERP库区必须等于实际From ERP库区");
+ throw new UserFriendlyException("触发校验:推荐From ERP库区必须等于实际From ERP库区");
}
}
@@ -155,24 +177,27 @@ public class TransferLibJobAppService
{
if (detailObj.RecommendToLocationErpCode != detailObj.HandledToLocationErpCode)
{
- throw new UserFriendlyException($"触发校验:推荐To ERP库区必须等于实际To ERP库区");
+ throw new UserFriendlyException("触发校验:推荐To ERP库区必须等于实际To ERP库区");
}
}
+
if (detailObj.IsQtyFrom)
{
if (detailObj.RecommendFromQty != detailObj.HandledFromQty)
{
- throw new UserFriendlyException($"触发校验:推荐From数量必须等于实际From数量");
+ throw new UserFriendlyException("触发校验:推荐From数量必须等于实际From数量");
}
}
+
if (detailObj.IsQtyTo)
{
if (detailObj.RecommendToQty != detailObj.HandledToQty)
{
- throw new UserFriendlyException($"触发校验:推荐To数量必须等于实际To数量");
+ throw new UserFriendlyException("触发校验:推荐To数量必须等于实际To数量");
}
}
}
+
#endregion
foreach (var detail in dto.Details)
@@ -180,8 +205,10 @@ public class TransferLibJobAppService
detail.HandledFromContainerCode = string.Empty;
detail.HandledToContainerCode = string.Empty;
- var fromLocationDto=await _locationAppService.GetByCodeAsync(detail.HandledFromLocationCode).ConfigureAwait(false);
- var toLocationDto=await _locationAppService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false);
+ var fromLocationDto = await _locationAppService.GetByCodeAsync(detail.HandledFromLocationCode)
+ .ConfigureAwait(false);
+ var toLocationDto =
+ await _locationAppService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false);
detail.HandledFromLocationArea = fromLocationDto.AreaCode;
detail.HandledFromLocationCode = fromLocationDto.Code;
@@ -190,7 +217,7 @@ public class TransferLibJobAppService
detail.HandledFromWarehouseCode = fromLocationDto.WarehouseCode;
detail.HandledToLocationArea = toLocationDto.AreaCode;
- detail.HandledToLocationCode = toLocationDto.Code ;
+ detail.HandledToLocationCode = toLocationDto.Code;
detail.HandledToLocationErpCode = toLocationDto.ErpLocationCode;
detail.HandledToLocationGroup = toLocationDto.LocationGroupCode;
detail.HandledToWarehouseCode = toLocationDto.WarehouseCode;
@@ -199,23 +226,85 @@ public class TransferLibJobAppService
var ret = await base.CompleteAsync(id, dto).ConfigureAwait(false);
if (ret != null)
{
- Type ty = Type.GetType(dto.CallServerName);
+ var ty = Type.GetType(dto.CallServerName);
if (ty == null)
{
throw new UserFriendlyException($"{methodPrefix}没有找到类型为{dto.CallServerName}的对象");
}
+
var instance = _serviceProvider.GetService(ty);
if (instance == null)
{
throw new UserFriendlyException($"{methodPrefix}类型为{dto.CallServerName}的对象创建失败");
}
- ITransferLibCallback transferLibCallback = (ITransferLibCallback)instance;
+
+ var transferLibCallback = (ITransferLibCallback)instance;
if (transferLibCallback == null)
{
throw new UserFriendlyException($"{methodPrefix}类型为{dto.CallServerName}的对象没有实现ITransferLibCallback接口");
}
+
await transferLibCallback.DoTransferLibCallbackAsync(dto).ConfigureAwait(false);
}
+
+ await TransferLibRequestAppService.CompleteByJobAsync(dto.RequestNumber).ConfigureAwait(false);
+
return ret;
}
+
+ [HttpPost("get-by-request/{requestNumber}")]
+ [UnitOfWork]
+ public async Task> GetByRequestNumberAsync(string requestNumber)
+ {
+ var list = await _repository.GetListAsync(p => p.RequestNumber == requestNumber).ConfigureAwait(false);
+
+ return ObjectMapper.Map, List>(list);
+ }
+
+ public override async Task CancelAcceptAsync(Guid id)
+ {
+ var job = await _repository.FindAsync(p => p.Id == id).ConfigureAwait(false);
+
+ if (job.JobStatus == EnumJobStatus.Open || job.JobStatus == EnumJobStatus.Partial ||
+ job.JobStatus == EnumJobStatus.Doing || job.JobStatus == EnumJobStatus.Wait)
+ {
+ await _repository.UpdateAsync(job).ConfigureAwait(false);
+ }
+
+ await _expectOutAppService.RemoveByNumberAsync(job.Number).ConfigureAwait(false);
+ }
+
+ [HttpPost("complete-by-request/{requestNumber}")]
+ [UnitOfWork]
+ public async Task CompleteByRequestAsync(string requestNumber)
+ {
+ var list = await _repository.GetListAsync(p => p.RequestNumber == requestNumber).ConfigureAwait(false);
+
+ foreach (var job in list)
+ {
+ if (job.JobStatus == EnumJobStatus.Open || job.JobStatus == EnumJobStatus.Partial ||
+ job.JobStatus == EnumJobStatus.Doing || job.JobStatus == EnumJobStatus.Wait)
+ {
+ await _repository.UpdateAsync(job).ConfigureAwait(false);
+ await _expectOutAppService.RemoveByNumberAsync(job.Number).ConfigureAwait(false);
+ }
+ }
+ }
+
+ ///
+ /// 判断实际TO的箱码是否被占用
+ ///
+ ///
+ ///
+ ///
+ ///
+ private async Task CheckPackingCodeIsUserAsync(string packingCode, string jobNumber)
+ {
+ var list = await _expectOutAppService.GetListByPackingCodeAsync(packingCode).ConfigureAwait(false);
+ list = list.Where(p => p.JobNumber != jobNumber).ToList();
+ if (list.Any())
+ {
+ throw new UserFriendlyException($"任务号【{list.First().JobNumber}】已占用,【{packingCode}】箱码");
+ }
+ }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteAppService.cs
index 36ce2a342..ec42d0293 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNoteAppService.cs
@@ -18,20 +18,20 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
[Authorize]
-[Route($"{StoreConsts.RootPath}assemble-note")]
+[Route($"{StoreConsts.RootPath}assemble-issue-note")]
public class AssembleIssueNoteAppService :
SfsStoreWithDetailsAppServiceBase,
IAssembleIssueNoteAppService
{
- private readonly IAssembleIssueNoteManager _assembleNoteManager;
+ private readonly IAssembleIssueNoteManager _assembleIssueNoteManager;
public AssembleIssueNoteAppService(
IAssembleIssueNoteRepository repository,
- IAssembleIssueNoteManager assembleNoteManager
+ IAssembleIssueNoteManager assembleIssueNoteManager
) : base(repository)
{
- _assembleNoteManager = assembleNoteManager;
+ _assembleIssueNoteManager = assembleIssueNoteManager;
}
[HttpPost("")]
@@ -39,7 +39,7 @@ public class AssembleIssueNoteAppService :
public override async Task CreateAsync(AssembleIssueNoteEditInput input)
{
var entity = ObjectMapper.Map(input);
- await _assembleNoteManager.CreateAsync(entity).ConfigureAwait(false);
+ await _assembleIssueNoteManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map(entity);
return dto;
}
@@ -52,10 +52,11 @@ public class AssembleIssueNoteAppService :
[HttpPost("confirm/{id}")]
public virtual async Task ConfirmAsync(Guid id)
{
- var assembleNote= await _repository.GetAsync(id).ConfigureAwait(false);
- assembleNote.Confirmed = true;
- assembleNote=await _repository.UpdateAsync(assembleNote).ConfigureAwait(false);
- await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData(assembleNote), false).ConfigureAwait(false);
- return ObjectMapper.Map(assembleNote);
+ var assembleIssueNote = await _repository.GetAsync(id).ConfigureAwait(false);
+ assembleIssueNote.Confirmed = true;
+ assembleIssueNote = await _repository.UpdateAsync(assembleIssueNote).ConfigureAwait(false);
+ await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData(assembleIssueNote), false).ConfigureAwait(false);
+ return ObjectMapper.Map(assembleIssueNote);
}
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs
index 9259126d2..e028685eb 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAppService.cs
@@ -14,12 +14,11 @@ using Win_in.Sfs.Shared.Event;
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.Wms.Store.Notes.IssueNotes;
namespace Win_in.Sfs.Wms.Store.Application;
[Authorize]
-[Route($"{StoreConsts.RootPath}coating-note")]
+[Route($"{StoreConsts.RootPath}coating-issue-note")]
public class CoatingIssueNoteAppService :
SfsStoreWithDetailsAppServiceBase,
@@ -60,6 +59,4 @@ public class CoatingIssueNoteAppService :
return ObjectMapper.Map(coatingIssueNote);
}
-
-
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs
index 360a0df6d..83451121d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/CoatingIssueNotes/CoatingIssueNoteAutoMapperProfile.cs
@@ -2,8 +2,6 @@ using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
-using Win_in.Sfs.Wms.Store.Notes.IssueNotes;
-
namespace Win_in.Sfs.Wms.Store.Application;
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs
index e673737eb..c6cfdc159 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/AssembleIssueRequests/AssembleIssueRequestAppService.cs
@@ -1,7 +1,11 @@
using System;
+using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
+using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using NUglify.Helpers;
using Volo.Abp;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
@@ -12,39 +16,38 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application;
///
-/// 装配叫料
+/// 装配叫料申请
///
[Authorize]
-[Route($"{StoreConsts.RootPath}assemble-request")]
-public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase,
IAssembleIssueRequestAppService
{
- private readonly IAssembleIssueRequestManager _assembleRequestManager;
+ private readonly IAssembleIssueRequestManager _assembleIssueRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IProductionLineAppService _productionLineAppService;
+ private readonly IAssembleIssueJobAppService _assembleIssueJobAppService;
+
private readonly ITransactionTypeAppService _transactionTypeAppService;
public AssembleIssueRequestAppService(
IAssembleIssueRequestRepository repository,
- IAssembleIssueRequestManager assembleRequestManager,
+ IAssembleIssueRequestManager assembleIssueRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService,
- ITransactionTypeAppService transactionTypeAppService
- )
- : base(repository, assembleRequestManager)
+ ITransactionTypeAppService transactionTypeAppService, IAssembleIssueJobAppService assembleIssueJobAppService)
+ : base(repository, assembleIssueRequestManager)
{
- _assembleRequestManager = assembleRequestManager;
+ _assembleIssueRequestManager = assembleIssueRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService;
@@ -52,13 +55,12 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase HandleAsync(Guid id)
{
- await Task.CompletedTask.ConfigureAwait(false);
- return null;
+ return await base.HandleAsync(id).ConfigureAwait(false);
}
[HttpPost("")]
@@ -72,18 +74,21 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase(input);
- var result = await _assembleRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false);
+ var result = await _assembleIssueRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map(result);
@@ -127,16 +133,210 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase CreateAndHandleAsync(AssembleIssueRequestEditInput input)
{
- var assembleRequestDto = await CreateAsync(input).ConfigureAwait(false);
+ var assembleIssueRequestDto = await CreateAsync(input).ConfigureAwait(false);
- await HandleAsync(assembleRequestDto.Id).ConfigureAwait(false);
+ //await HandleAsync(assembleIssueRequestDto.Id).ConfigureAwait(false);
+
+ return assembleIssueRequestDto;
+ }
+
+ public override async Task CancelAsync(Guid id)
+ {
+ var request = await _repository.GetAsync(id).ConfigureAwait(false);
+
+ var list = await _assembleIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
+ if (list.Any())
+ {
+ foreach (var assembleIssueJobDto in list)
+ {
+ if (assembleIssueJobDto.JobStatus == EnumJobStatus.Open ||
+ assembleIssueJobDto.JobStatus == EnumJobStatus.Partial ||
+ assembleIssueJobDto.JobStatus == EnumJobStatus.Doing ||
+ assembleIssueJobDto.JobStatus == EnumJobStatus.Wait)
+ {
+ await _assembleIssueJobAppService.CancelAsync(assembleIssueJobDto.Id).ConfigureAwait(false);
+ }
+ }
+ }
- return assembleRequestDto;
+ return await base.CancelAsync(id).ConfigureAwait(false);
}
+ [HttpPost("UpdateStatusCompleted")]
+ public async Task UpdateStatusCompletedAsync(string number)
+ {
+ var assembleIssueRequest = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
+
+ await UpdateAssembleIssueRequestDetailQtyAsync(assembleIssueRequest, new EditableList()).ConfigureAwait(false);
+
+ var assembleIssueJobDtos = await _assembleIssueJobAppService.GetByRequestNumberAsync(assembleIssueRequest.Number).ConfigureAwait(false);
+
+ if (assembleIssueJobDtos.Any(p =>
+ p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing ||
+ p.JobStatus == EnumJobStatus.Partial))
+ {
+ return;
+ }
+ else
+ {
+ bool flag = true;
+
+ foreach (var detail in assembleIssueRequest.Details)
+ {
+ if (detail.Qty >= detail.IssuedQty)
+ {
+ flag = false;
+ return;
+ }
+ }
+
+ if (flag)
+ {
+ CheckStatus(EnumRequestStatus.Completed, assembleIssueRequest.RequestStatus);
+ assembleIssueRequest.RequestStatus = EnumRequestStatus.Completed;
+ await _repository.UpdateAsync(assembleIssueRequest).ConfigureAwait(false);
+ }
+ }
+ }
+
+ ///
+ /// 修改请求的 已发 已收数量
+ ///
+ ///
+ ///
+ ///
+ private async Task UpdateAssembleIssueRequestDetailQtyAsync(AssembleIssueRequest assembleIssueRequest,
+ List addAssembleIssueJobDtos)
+ {
+ //原有任务
+ var existAssembleIssueJobDtos = await _assembleIssueJobAppService.GetByRequestNumberAsync(assembleIssueRequest.Number)
+ .ConfigureAwait(false);
+
+ //新增的任务和已有的任务总和
+ var allAssembleIssueJobDtos = new List();
+ allAssembleIssueJobDtos.AddRange(addAssembleIssueJobDtos);
+ allAssembleIssueJobDtos.AddRange(existAssembleIssueJobDtos);
+
+ var groupByItemCodeLocationCode = assembleIssueRequest.Details.GroupBy(p =>
+ new { p.ItemCode, p.ToLocationCode });
+ foreach (var group in groupByItemCodeLocationCode)
+ {
+ foreach (var requestDetail in group)
+ {
+ //所有已发数量
+ decimal allIssuedQty = 0;
+
+ //所有已发数量
+ decimal allReceivedQty = 0;
+
+ foreach (var allAssembleIssueJobDto in allAssembleIssueJobDtos)
+ {
+ var jobDetailDtos = allAssembleIssueJobDto.Details.Where(p =>
+ p.ItemCode == group.Key.ItemCode && p.RequestLocationCode == group.Key.ToLocationCode);
+ //所有已发数量
+ allIssuedQty += jobDetailDtos.Sum(p => p.RequestQty);
+ //所有已发数量
+ allReceivedQty += jobDetailDtos.Sum(p => p.HandledToQty);
+ }
+
+ requestDetail.IssuedQty += allIssuedQty;
+ requestDetail.ReceivedQty += allReceivedQty;
+ }
+ }
+
+ await _repository.UpdateAsync(assembleIssueRequest).ConfigureAwait(false);
+ }
+
+ [HttpPost("IsHasNewJob")]
+ public async Task IsHasNewJobAsync(string requestNumber, List jobNumber)
+ {
+ var joblIssueJobDtos = await _assembleIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
+ if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
+ {
+ var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
+
+ var difference = jobNumberList.Except(jobNumber);
+ if (difference.Any())
+ {
+ var result = "已生成任务号";
+ difference.ForEach(p => result += "【" + p + "】");
+ result += "的任务";
+ return result;
+ }
+ else
+ {
+ return "无任务生成,请检查库存";
+ }
+ }
+ else
+ {
+ return "无任务生成,请检查库存";
+ }
+ }
#region 校验
+ private void CheckStatus(EnumRequestStatus targetStatus, EnumRequestStatus nowStatus)
+ {
+ var validSourceStatuses = new List();
+ switch (targetStatus)
+ {
+ case EnumRequestStatus.None:
+ break;
+ case EnumRequestStatus.New:
+ break;
+ case EnumRequestStatus.Reviewing:
+ validSourceStatuses = new List { EnumRequestStatus.New };
+ break;
+ case EnumRequestStatus.Refused:
+ validSourceStatuses = new List { EnumRequestStatus.Reviewing };
+ break;
+ case EnumRequestStatus.Agreed:
+ validSourceStatuses = new List { EnumRequestStatus.Reviewing };
+ break;
+ case EnumRequestStatus.Handling:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Agreed, EnumRequestStatus.Partial,
+ };
+ break;
+ case EnumRequestStatus.Completed:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial,
+ };
+ break;
+ case EnumRequestStatus.Cancelled:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed,
+ };
+ break;
+ case EnumRequestStatus.Abort:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial,
+ };
+ break;
+ case EnumRequestStatus.Partial:
+ {
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial,
+ };
+ break;
+ }
+ default:
+ throw new ArgumentOutOfRangeException(nameof(targetStatus), targetStatus, null);
+ }
+
+ if (!validSourceStatuses.Contains(nowStatus))
+ {
+ throw new UserFriendlyException(
+ $"当前状态为 {nowStatus.GetDisplayName()} ,无法变更为 {targetStatus.GetDisplayName()}");
+ }
+ }
+
private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode)
{
if (itemBasicDto == null)
@@ -158,5 +358,13 @@ public class AssembleIssueRequestAppService : SfsStoreRequestAppServiceBase
-/// 喷涂叫料
+/// 喷涂叫料申请
///
[Authorize]
-[Route($"{StoreConsts.RootPath}coating-request")]
+[Route($"{StoreConsts.RootPath}coating-issue-request")]
public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase,
ICoatingIssueRequestAppService
{
- private readonly ICoatingIssueRequestManager _coatingMaterialRequestManager;
+ private readonly ICoatingIssueRequestManager _coatingIssueRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService;
- private readonly IProductionLineAppService _productionLineAppService;
+ private readonly IProductionLineAppService _productionLineAppService;
+ private readonly ICoatingIssueJobAppService _coatingIssueJobAppService;
+
private readonly ITransactionTypeAppService _transactionTypeAppService;
public CoatingIssueRequestAppService(
ICoatingIssueRequestRepository repository,
- ICoatingIssueRequestManager coatingMaterialRequestManager,
+ ICoatingIssueRequestManager coatingIssueRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService,
IProductionLineAppService productionLineAppService,
- ITransactionTypeAppService transactionTypeAppService
- )
- : base(repository, coatingMaterialRequestManager)
+ ITransactionTypeAppService transactionTypeAppService, ICoatingIssueJobAppService coatingIssueJobAppService)
+ : base(repository, coatingIssueRequestManager)
{
- _coatingMaterialRequestManager = coatingMaterialRequestManager;
+ _coatingIssueRequestManager = coatingIssueRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService;
- _productionLineAppService = productionLineAppService;
+ _productionLineAppService = productionLineAppService;
+
_transactionTypeAppService = transactionTypeAppService;
+ _coatingIssueJobAppService = coatingIssueJobAppService;
}
public override async Task HandleAsync(Guid id)
{
- await Task.CompletedTask.ConfigureAwait(false);
- return null;
+ return await base.HandleAsync(id).ConfigureAwait(false);
}
-
-
[HttpPost("")]
public override async Task CreateAsync(CoatingIssueRequestEditInput input)
{
@@ -86,18 +74,22 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase(input);
- var result = await _coatingMaterialRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false);
+ var result = await _coatingIssueRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map(result);
@@ -122,13 +115,14 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase
- /// 赋值Request业务属性
+ /// 赋值Request业务属性
///
///
///
private async Task SetRequestAutoPropertiesAsync(CoatingIssueRequestEditInput entity)
{
- var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
+ var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
+ .ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
@@ -140,15 +134,239 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase CreateAndHandleAsync(CoatingIssueRequestEditInput input)
{
- var coatingMaterialRequestDto = await CreateAsync(input).ConfigureAwait(false);
+ var coatingIssueRequestDto = await CreateAsync(input).ConfigureAwait(false);
+
+ //await HandleAsync(coatingIssueRequestDto.Id).ConfigureAwait(false);
+
+ return coatingIssueRequestDto;
+ }
+
+ public override async Task CancelAsync(Guid id)
+ {
+ var request = await _repository.GetAsync(id).ConfigureAwait(false);
+
+ var list = await _coatingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
+ if (list.Any())
+ {
+ foreach (var coatingIssueJobDto in list)
+ {
+ if (coatingIssueJobDto.JobStatus == EnumJobStatus.Open ||
+ coatingIssueJobDto.JobStatus == EnumJobStatus.Partial ||
+ coatingIssueJobDto.JobStatus == EnumJobStatus.Doing ||
+ coatingIssueJobDto.JobStatus == EnumJobStatus.Wait)
+ {
+ await _coatingIssueJobAppService.CancelAsync(coatingIssueJobDto.Id).ConfigureAwait(false);
+ }
+ }
+ }
+
+ if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
+ request.RequestStatus == EnumRequestStatus.New)
+ {
+ request.RequestStatus = EnumRequestStatus.Cancelled;
+ await _repository.UpdateAsync(request).ConfigureAwait(false);
+ }
+ else
+ {
+ throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
+ }
+
+ return ObjectMapper.Map(request);
+ }
+
+ [HttpPost("UpdateStatusCompleted")]
+ public async Task UpdateStatusCompletedAsync(string number)
+ {
+ var coatingIssueRequest = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
+
+ await UpdateCoatingIssueRequestDetailQtyAsync(coatingIssueRequest, new EditableList())
+ .ConfigureAwait(false);
+
+ var coatingIssueJobDtos = await _coatingIssueJobAppService.GetByRequestNumberAsync(coatingIssueRequest.Number)
+ .ConfigureAwait(false);
+
+ if (coatingIssueJobDtos.Any(p =>
+ p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing ||
+ p.JobStatus == EnumJobStatus.Partial))
+ {
+ return;
+ }
+
+ var flag = true;
+
+ foreach (var detail in coatingIssueRequest.Details)
+ {
+ if (detail.Qty >= detail.IssuedQty)
+ {
+ flag = false;
+ return;
+ }
+ }
+
+ if (flag)
+ {
+ CheckStatus(EnumRequestStatus.Completed, coatingIssueRequest.RequestStatus);
+ coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
+ await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false);
+ }
+ }
+
+ ///
+ /// 修改请求的 已发 已收数量
+ ///
+ ///
+ ///
+ ///
+ private async Task UpdateCoatingIssueRequestDetailQtyAsync(CoatingIssueRequest coatingIssueRequest,
+ List addCoatingIssueJobDtos)
+ {
+ //原有任务
+ var existCoatingIssueJobDtos = await _coatingIssueJobAppService
+ .GetByRequestNumberAsync(coatingIssueRequest.Number)
+ .ConfigureAwait(false);
+
+ //新增的任务和已有的任务总和
+ var allCoatingIssueJobDtos = new List();
+ allCoatingIssueJobDtos.AddRange(addCoatingIssueJobDtos);
+ allCoatingIssueJobDtos.AddRange(existCoatingIssueJobDtos);
+
+ var groupByItemCodeLocationCode = coatingIssueRequest.Details.GroupBy(p =>
+ new { p.ItemCode, p.ToLocationCode });
+ foreach (var group in groupByItemCodeLocationCode)
+ {
+ foreach (var requestDetail in group)
+ {
+ //所有已发数量
+ decimal allIssuedQty = 0;
+
+ //所有已发数量
+ decimal allReceivedQty = 0;
+
+ foreach (var allCoatingIssueJobDto in allCoatingIssueJobDtos)
+ {
+ var jobDetailDtos = allCoatingIssueJobDto.Details.Where(p =>
+ p.ItemCode == group.Key.ItemCode && p.RequestLocationCode == group.Key.ToLocationCode);
+ //所有已发数量
+ allIssuedQty += jobDetailDtos.Sum(p => p.RequestQty);
+ //所有已发数量
+ allReceivedQty += jobDetailDtos.Sum(p => p.HandledToQty);
+ }
+
+ requestDetail.IssuedQty += allIssuedQty;
+ requestDetail.ReceivedQty += allReceivedQty;
+ }
+ }
+
+ await _repository.UpdateAsync(coatingIssueRequest).ConfigureAwait(false);
+ }
+
+ [HttpPost("IsHasNewJob")]
+ public async Task IsHasNewJobAsync(string requestNumber, List jobNumber)
+ {
+ var joblIssueJobDtos =
+ await _coatingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
+ if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
+ {
+ var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
+
+ var difference = jobNumberList.Except(jobNumber);
+ if (difference.Any())
+ {
+ var result = "已生成任务号";
+ difference.ForEach(p => result += "【" + p + "】");
+ result += "的任务";
+ return result;
+ }
+
+ return "无任务生成,请检查库存";
+ }
+
+ return "无任务生成,请检查库存";
+ }
+
+ public override async Task CompleteAsync(Guid id)
+ {
+ var coatingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
+ if (coatingIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
+ coatingIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
+ coatingIssueRequest.RequestStatus == EnumRequestStatus.New)
+ {
+ coatingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
+ }
+ else
+ {
+ throw new UserFriendlyException($"【{coatingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
+ }
- await HandleAsync(coatingMaterialRequestDto.Id).ConfigureAwait(false);
+ await _coatingIssueJobAppService.CompleteByRequestNumberAsync(coatingIssueRequest.Number).ConfigureAwait(false);
- return coatingMaterialRequestDto;
+ return ObjectMapper.Map(await _repository.UpdateAsync(coatingIssueRequest)
+ .ConfigureAwait(false));
}
#region 校验
+ private void CheckStatus(EnumRequestStatus targetStatus, EnumRequestStatus nowStatus)
+ {
+ var validSourceStatuses = new List();
+ switch (targetStatus)
+ {
+ case EnumRequestStatus.None:
+ break;
+ case EnumRequestStatus.New:
+ break;
+ case EnumRequestStatus.Reviewing:
+ validSourceStatuses = new List { EnumRequestStatus.New };
+ break;
+ case EnumRequestStatus.Refused:
+ validSourceStatuses = new List { EnumRequestStatus.Reviewing };
+ break;
+ case EnumRequestStatus.Agreed:
+ validSourceStatuses = new List { EnumRequestStatus.Reviewing };
+ break;
+ case EnumRequestStatus.Handling:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Agreed, EnumRequestStatus.Partial
+ };
+ break;
+ case EnumRequestStatus.Completed:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial
+ };
+ break;
+ case EnumRequestStatus.Cancelled:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed
+ };
+ break;
+ case EnumRequestStatus.Abort:
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial
+ };
+ break;
+ case EnumRequestStatus.Partial:
+ {
+ validSourceStatuses = new List
+ {
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial
+ };
+ break;
+ }
+ default:
+ throw new ArgumentOutOfRangeException(nameof(targetStatus), targetStatus, null);
+ }
+
+ if (!validSourceStatuses.Contains(nowStatus))
+ {
+ throw new UserFriendlyException(
+ $"当前状态为 {nowStatus.GetDisplayName()} ,无法变更为 {targetStatus.GetDisplayName()}");
+ }
+ }
+
private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode)
{
if (itemBasicDto == null)
@@ -164,9 +382,18 @@ public class CoatingIssueRequestAppService : SfsStoreRequestAppServiceBase CancelAsync(Guid id)
{
- var request=await _repository.GetAsync(id).ConfigureAwait(false);
+ var request = await _repository.GetAsync(id).ConfigureAwait(false);
- var list=await _kittingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
+ var list = await _kittingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var kittingIssueJobDto in list)
@@ -159,44 +160,55 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase(request);
}
[HttpPost("UpdateStatusCompleted")]
public async Task UpdateStatusCompletedAsync(string number)
{
- var kittingIssueRequest=await _repository.FindAsync(p=>p.Number== number).ConfigureAwait(false);
+ var kittingIssueRequest = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
- await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest,new EditableList()).ConfigureAwait(false);
+ await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest, new EditableList())
+ .ConfigureAwait(false);
- var kittingIssueJobDtos=await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false);
+ var kittingIssueJobDtos = await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number)
+ .ConfigureAwait(false);
if (kittingIssueJobDtos.Any(p =>
p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing ||
- p.JobStatus == EnumJobStatus.Partial) )
+ p.JobStatus == EnumJobStatus.Partial))
{
return;
}
- else
- {
- bool flag = true;
- foreach (var detail in kittingIssueRequest.Details)
- {
- if (detail.Qty >= detail.IssuedQty)
- {
- flag = false;
- return;
- }
- }
+ var flag = true;
- if (flag)
+ foreach (var detail in kittingIssueRequest.Details)
+ {
+ if (detail.Qty >= detail.IssuedQty)
{
- CheckStatus(EnumRequestStatus.Completed, kittingIssueRequest.RequestStatus);
- kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
- await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false);
+ flag = false;
+ return;
}
}
+
+ if (flag)
+ {
+ CheckStatus(EnumRequestStatus.Completed, kittingIssueRequest.RequestStatus);
+ kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
+ await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false);
+ }
}
///
@@ -209,7 +221,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase addKittingIssueJobDtos)
{
//原有任务
- var existKittingIssueJobDtos = await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number)
+ var existKittingIssueJobDtos = await _kittingIssueJobAppService
+ .GetByRequestNumberAsync(kittingIssueRequest.Number)
.ConfigureAwait(false);
//新增的任务和已有的任务总和
@@ -248,9 +261,10 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase IsHasNewJobAsync(string requestNumber,List jobNumber)
+ public async Task IsHasNewJobAsync(string requestNumber, List jobNumber)
{
- var joblIssueJobDtos=await _kittingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
+ var joblIssueJobDtos =
+ await _kittingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{
var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
@@ -259,19 +273,35 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase result+="【"+p+"】");
+ difference.ForEach(p => result += "【" + p + "】");
result += "的任务";
return result;
}
- else
- {
- return "无任务生成,请检查库存";
- }
+
+ return "无任务生成,请检查库存";
+ }
+
+ return "无任务生成,请检查库存";
+ }
+
+ public override async Task CompleteAsync(Guid id)
+ {
+ var kittingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
+ if (kittingIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
+ kittingIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
+ kittingIssueRequest.RequestStatus == EnumRequestStatus.New)
+ {
+ kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
- return "无任务生成,请检查库存";
+ throw new UserFriendlyException($"【{kittingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
}
+
+ await _kittingIssueJobAppService.CompleteByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false);
+
+ return ObjectMapper.Map(await _repository.UpdateAsync(kittingIssueRequest)
+ .ConfigureAwait(false));
}
#region 校验
@@ -297,32 +327,32 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase
{
- EnumRequestStatus.Agreed, EnumRequestStatus.Partial,
+ EnumRequestStatus.Agreed, EnumRequestStatus.Partial
};
break;
case EnumRequestStatus.Completed:
validSourceStatuses = new List
{
- EnumRequestStatus.Handling, EnumRequestStatus.Partial,
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial
};
break;
case EnumRequestStatus.Cancelled:
validSourceStatuses = new List
{
- EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed,
+ EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed
};
break;
case EnumRequestStatus.Abort:
validSourceStatuses = new List
{
- EnumRequestStatus.Handling, EnumRequestStatus.Partial,
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial
};
break;
case EnumRequestStatus.Partial:
{
validSourceStatuses = new List
{
- EnumRequestStatus.Handling, EnumRequestStatus.Partial,
+ EnumRequestStatus.Handling, EnumRequestStatus.Partial
};
break;
}
@@ -354,7 +384,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBasep.CallRequestNumber==callRequestNumber).ConfigureAwait(false);
+ foreach (var request in list)
+ {
+ await CancelAsync(request.Id).ConfigureAwait(false);
+ }
+ }
+
+ [HttpPost("Complete-By-CallRequestNumber")]
+ public async Task CompleteByCallRequestNumberAsync(string callRequestNumber)
+ {
+ var list = await _repository.GetListAsync(p => p.CallRequestNumber == callRequestNumber).ConfigureAwait(false);
+ foreach (var request in list)
+ {
+ await CompleteAsync(request.Id).ConfigureAwait(false);
+ }
+ }
+
+ public override async Task CancelAsync(Guid id)
+ {
+ var request = await _repository.GetAsync(id).ConfigureAwait(false);
+
+ var list = await _transferLibJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
+ if (list.Any())
+ {
+ foreach (var kittingIssueJobDto in list)
+ {
+ if (kittingIssueJobDto.JobStatus == EnumJobStatus.Open ||
+ kittingIssueJobDto.JobStatus == EnumJobStatus.Partial ||
+ kittingIssueJobDto.JobStatus == EnumJobStatus.Doing ||
+ kittingIssueJobDto.JobStatus == EnumJobStatus.Wait)
+ {
+ await _transferLibJobAppService.CancelAsync(kittingIssueJobDto.Id).ConfigureAwait(false);
+ }
+ }
+ }
+
+ if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
+ request.RequestStatus == EnumRequestStatus.New)
+ {
+ request.RequestStatus = EnumRequestStatus.Cancelled;
+ await _repository.UpdateAsync(request).ConfigureAwait(false);
+ }
+ else
+ {
+ throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
+ }
+
+ return ObjectMapper.Map(request);
+ }
+
+ public override async Task CompleteAsync(Guid id)
+ {
+ var request = await _repository.FindAsync(p => p.Id == id).ConfigureAwait(false);
+
+ if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
+ request.RequestStatus == EnumRequestStatus.New)
+ {
+ request.RequestStatus = EnumRequestStatus.Completed;
+ await _repository.UpdateAsync(request).ConfigureAwait(false);
+ }
+ else
+ {
+ throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
+ }
+
+ await _transferLibJobAppService.CompleteByRequestAsync(request.Number).ConfigureAwait(false);
+
+ return ObjectMapper.Map(request);
+ }
+
+ [HttpPost("Complete-By-Job")]
+ public async Task CompleteByJobAsync(string requestNumber)
+ {
+ var request = await _repository.FindAsync(p => p.Number == requestNumber).ConfigureAwait(false);
+
+ if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
+ request.RequestStatus == EnumRequestStatus.New)
+ {
+ request.RequestStatus = EnumRequestStatus.Completed;
+ await _repository.UpdateAsync(request).ConfigureAwait(false);
+ }
+ else
+ {
+ if (request.RequestStatus != EnumRequestStatus.Completed)
+ {
+ throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
+ }
+ }
+ }
///
/// 【创建】库移请求
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJob.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJob.cs
index c51492a35..4448b1291 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJob.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJob.cs
@@ -13,7 +13,6 @@ namespace Win_in.Sfs.Wms.Store.Domain;
[Display(Name = "装配发料任务")]
public class AssembleIssueJob : SfsJobAggregateRootBase
{
-
///
/// 叫料类型
///
@@ -44,6 +43,6 @@ public class AssembleIssueJob : SfsJobAggregateRootBase
///
[IgnoreUpdate]
public override List Details { get; set; } = new List();
-
+ public EnumIssueSendType EnumIssueSendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobDetail.cs
index fd8a045b0..f14d1f76c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobDetail.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobDetail.cs
@@ -8,7 +8,6 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class AssembleIssueJobDetail : SfsDetailEntityBase
{
-
#region 库存基础信息
///
@@ -522,4 +521,5 @@ public class AssembleIssueJobDetail : SfsDetailEntityBase
{
this.Id = id;
}
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobManager.cs
index 043623119..f7cab0c71 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/AssembleIssueJobs/AssembleIssueJobManager.cs
@@ -18,7 +18,9 @@ public class AssembleIssueJobManager : SfsJobManagerBase
/// 涂装发料任务
@@ -23,26 +22,23 @@ public class CoatingIssueJob : SfsJobAggregateRootBase
///
/// 生产线
///
- [IgnoreUpdate]
public string ProdLine { get; set; }
///
- /// 要货单号
+ /// 要料单号
///
- [IgnoreUpdate]
- public string MaterialRequestNumber { get; set; }
+ public string CoatingRequestNumber { get; set; }
///
/// 使用在途库
///
[Display(Name = "使用在途库")]
- [IgnoreUpdate]
public bool UseOnTheWayLocation { get; set; }
///
/// 任务明细
///
- [IgnoreUpdate]
- public override List Details { get; set; } = new List();
+ public override List Details { get; set; } = new List();
+ public EnumIssueSendType EnumIssueSendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs
index 63e971b43..58352f238 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobDetail.cs
@@ -8,7 +8,6 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class CoatingIssueJobDetail : SfsDetailEntityBase
{
-
#region 库存基础信息
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs
index a8c38adc9..c57029b71 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/CoatingIssueJobManager.cs
@@ -10,7 +10,6 @@ using Volo.Abp.Users;
using Volo.Abp.Validation;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
namespace Win_in.Sfs.Wms.Store.Domain;
@@ -18,14 +17,14 @@ public class CoatingIssueJobManager : SfsJobManagerBase
@@ -38,7 +37,6 @@ public class CoatingIssueJobManager : SfsJobManagerBase CompleteAsync(CoatingIssueJob input, ICurrentUser user)
{
var entity = await Repository.FindAsync(input.Id).ConfigureAwait(false);
-
var inputDetail = input.Details.First();
var detail = entity.Details.First();
@@ -54,7 +52,6 @@ public class CoatingIssueJobManager : SfsJobManagerBase
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs
index fb7c9e112..67e324295 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingIssueJobRepository.cs
@@ -1,6 +1,4 @@
-using Win_in.Sfs.Wms.Store.Domain;
-
-namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
+namespace Win_in.Sfs.Wms.Store.Domain;
public interface ICoatingIssueJobRepository : ISfsJobRepositoryBase
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingssueExtension.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingssueExtension.cs
deleted file mode 100644
index f31192512..000000000
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/CoatingIssueJobs/ICoatingssueExtension.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using Volo.Abp.Timing;
-using Win_in.Sfs.Shared.Domain.Shared;
-using Win_in.Sfs.Wms.Store.Domain;
-
-namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
-
-public static class CoatingIssueExtension
-{
- // public static IssueJob SetDetails(this IssueJob job,IGuidGenerator guidGenerator, LocationDTO location)
- // {
- // foreach (var detail in job.Details)
- // {
- // detail.SetIdAndNumber(guidGenerator,job.Id,job.Number);
- // detail.RecommendLocationCode = location.Code;
- // detail.SetBatch(detail.RecommendBatch);
- // }
- // return job;
- // }
-
- public static IssueJob Init(this IssueJob job)
- {
- job.JobType = EnumJobType.IssueJob;
- job.JobStatus = EnumJobStatus.Open;
- return job;
- }
-
- public static IssueJob SetWorkGroup(this IssueJob job, string warehouseCode, string workGroupCode, string groupCode)
- {
- job.WorkGroupCode = workGroupCode;
- job.WarehouseCode = warehouseCode;
- job.ProdLine = groupCode;
- return job;
- }
-
- public static IssueJob SetWorker(this IssueJob job, string worker)
- {
- job.Worker = worker;
- return job;
- }
-
- public static IssueJob SetPriority(this IssueJob job, IClock clock)
- {
- job.Priority = PriorityHelper.GetPriority(clock);
- job.PriorityIncrement = 1;
- return job;
- }
-
- // public static IssueJob SetIdAndNumber(this IssueJob job,IGuidGenerator guidGenerator, ISnowflakeIdGenerator numberGenerator)
- // {
- // var number = (numberGenerator.CreateAsync().GetAwaiter().GetResult()).ToString();
- // job.SetIdAndNumber(guidGenerator, number);
- // return job;
- // }
-
-}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNote.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNote.cs
index 60310d53e..16d55eed2 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNote.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/AssembleIssueNotes/AssembleIssueNote.cs
@@ -21,12 +21,9 @@ public class AssembleIssueNote : SfsStoreAggregateRootBase
/// 明细列表
///
- [IgnoreUpdate]
public override List Details { get; set; } = new List();
- [IgnoreUpdate]
public string RequestNumber { get; set; }
-
///
/// 叫料类型
///
@@ -36,14 +33,12 @@ public class AssembleIssueNote : SfsStoreAggregateRootBase
/// 使用在途库
///
- [IgnoreUpdate]
public bool UseOnTheWayLocation { get; set; }
///
/// 确认时间
///
[Display(Name = "确认时间")]
- [IgnoreUpdate]
public DateTime? ConfirmTime { get; set; }
///
@@ -52,6 +47,8 @@ public class AssembleIssueNote : SfsStoreAggregateRootBase
-/// 喷涂叫料申请
+/// 涂装叫料记录
///
public class CoatingIssueNote : SfsStoreAggregateRootBase, IHasJobNumber, IHasRequestNumber
{
@@ -22,12 +21,9 @@ public class CoatingIssueNote : SfsStoreAggregateRootBase
/// 明细列表
///
- [IgnoreUpdate]
public override List Details { get; set; } = new List();
- [IgnoreUpdate]
public string RequestNumber { get; set; }
-
///
/// 叫料类型
///
@@ -37,14 +33,12 @@ public class CoatingIssueNote : SfsStoreAggregateRootBase
/// 使用在途库
///
- [IgnoreUpdate]
public bool UseOnTheWayLocation { get; set; }
///
/// 确认时间
///
[Display(Name = "确认时间")]
- [IgnoreUpdate]
public DateTime? ConfirmTime { get; set; }
///
@@ -53,6 +47,8 @@ public class CoatingIssueNote : SfsStoreAggregateRootBase, ICoatingIssueNoteManager
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs
index 35fbcd208..af4d43f9d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteManager.cs
@@ -1,8 +1,7 @@
using System;
using System.Threading.Tasks;
-using Win_in.Sfs.Wms.Store.Domain;
-namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+namespace Win_in.Sfs.Wms.Store.Domain;
public interface ICoatingIssueNoteManager : ISfsStoreManager
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs
index 267b6b1f8..ec4d9f2a5 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/CoatingIssueNotes/ICoatingIssueNoteRepository.cs
@@ -1,6 +1,4 @@
-using Win_in.Sfs.Wms.Store.Domain;
-
-namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+namespace Win_in.Sfs.Wms.Store.Domain;
public interface ICoatingIssueNoteRepository : ISfsStoreRepositoryBase
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequest.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequest.cs
index 678218ee2..f8cf8f37f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequest.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequest.cs
@@ -11,7 +11,7 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class AssembleIssueRequest : SfsStoreRequestAggregateRootBase
{
///
- /// 叫料类型
+ /// 叫料类型
///
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
@@ -20,10 +20,5 @@ public class AssembleIssueRequest : SfsStoreRequestAggregateRootBase
public bool UseOnTheWayLocation { get; set; }
-
- ///
- /// 明细列表
- ///
- [IgnoreUpdate]
- public override List Details { get; set; } = new List();
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestDetail.cs
index eef610f9d..0a811be58 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestDetail.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestDetail.cs
@@ -11,7 +11,6 @@ namespace Win_in.Sfs.Wms.Store.Domain;
///
public class AssembleIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{
-
#region 目标库位信息
///
@@ -47,6 +46,7 @@ public class AssembleIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasT
#endregion
+
///
/// 生产线
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs
index c1e38f15f..f4e0adb6d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestManager.cs
@@ -14,29 +14,24 @@ public class AssembleIssueRequestManager
, IAssembleIssueRequestManager
{
private readonly IAssembleIssueRequestRepository _repository;
-
public AssembleIssueRequestManager(
IAssembleIssueRequestRepository repository
-
- ) : base(repository)
+ ) : base(repository)
{
_repository = repository;
-
}
- #region 东阳V2
-
- #endregion
-
///
- /// 创建
+ /// 创建 同时 直接赋值Number 为了返回Number
///
///
///
public virtual async Task CreateByNumberAsync(AssembleIssueRequest entity)
{
- var number = string.IsNullOrEmpty(entity.Number) ? await GenerateNumberAsync(nameof(AssembleIssueRequest), entity.ActiveDate).ConfigureAwait(false) : entity.Number;
+ var number = string.IsNullOrEmpty(entity.Number)
+ ? await GenerateNumberAsync(nameof(AssembleIssueRequest), entity.ActiveDate).ConfigureAwait(false)
+ : entity.Number;
entity.SetIdAndNumberWithDetails(GuidGenerator, number);
entity.Submit();
entity.Agree();
@@ -47,7 +42,6 @@ public class AssembleIssueRequestManager
return entity;
}
-
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);
@@ -56,23 +50,9 @@ public class AssembleIssueRequestManager
await CompleteAsync(entity).ConfigureAwait(false);
}
}
-
-
- #region 导入
- ///
- /// 执行导入
- ///
- public virtual async Task ImportDataAsync(List mergeEntities, List deleteEntities = null)
+ public Task ImportDataAsync(List entities, List deleteEntities = null)
{
- if (deleteEntities != null && deleteEntities.Count > 0)
- {
- await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
- }
-
- await CreateManyAsync(mergeEntities).ConfigureAwait(false);
+ throw new System.NotImplementedException();
}
-
- #endregion
-
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs
index 1cbce661a..ccb0274f7 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequest.cs
@@ -2,9 +2,8 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
-using Win_in.Sfs.Wms.Store.Domain;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Domain;
///
/// 喷涂叫料申请
@@ -21,11 +20,4 @@ public class CoatingIssueRequest : SfsStoreRequestAggregateRootBase
public bool UseOnTheWayLocation { get; set; }
-
- ///
- /// 明细列表
- ///
- [IgnoreUpdate]
- public override List Details { get; set; } = new List();
-
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs
index 8dee468c5..3600e4a38 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestDetail.cs
@@ -3,13 +3,11 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
-using Win_in.Sfs.Wms.Store.Domain;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Domain;
public class CoatingIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{
-
#region 目标库位信息
///
@@ -45,6 +43,7 @@ public class CoatingIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasTo
#endregion
+
///
/// 生产线
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs
index e806acc61..26615b133 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/CoatingIssueRequestManager.cs
@@ -1,40 +1,34 @@
-using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
-using DocumentFormat.OpenXml.Math;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Event;
-using Win_in.Sfs.Wms.Store.Domain;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
-using static Win_in.Sfs.Wms.Store.Domain.Shared.StoreSettings;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Domain;
public class CoatingIssueRequestManager
: SfsStoreRequestManagerBase
, ICoatingIssueRequestManager
{
private readonly ICoatingIssueRequestRepository _repository;
-
public CoatingIssueRequestManager(
ICoatingIssueRequestRepository repository
- , ICoatingIssueJobRepository issueJobRepository
- ) : base(repository)
+ ) : base(repository)
{
_repository = repository;
-
}
///
- /// 创建
+ /// 创建 同时 直接赋值Number 为了返回Number
///
///
///
public virtual async Task CreateByNumberAsync(CoatingIssueRequest entity)
{
- var number = string.IsNullOrEmpty(entity.Number) ? await GenerateNumberAsync(nameof(CoatingIssueRequest), entity.ActiveDate).ConfigureAwait(false) : entity.Number;
+ var number = string.IsNullOrEmpty(entity.Number)
+ ? await GenerateNumberAsync(nameof(CoatingIssueRequest), entity.ActiveDate).ConfigureAwait(false)
+ : entity.Number;
entity.SetIdAndNumberWithDetails(GuidGenerator, number);
entity.Submit();
entity.Agree();
@@ -44,7 +38,7 @@ public class CoatingIssueRequestManager
await _repository.InsertAsync(entity).ConfigureAwait(false);
return entity;
}
-
+
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);
@@ -53,23 +47,9 @@ public class CoatingIssueRequestManager
await CompleteAsync(entity).ConfigureAwait(false);
}
}
-
- #region Import
- ///
- /// 执行导入
- ///
- public virtual async Task ImportDataAsync(List mergeEntities, List deleteEntities = null)
+ public Task ImportDataAsync(List entities, List deleteEntities = null)
{
- if (deleteEntities != null && deleteEntities.Count > 0)
- {
- await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
- }
-
- await CreateManyAsync(mergeEntities).ConfigureAwait(false);
+ throw new System.NotImplementedException();
}
-
- #endregion
-
}
-
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs
index cc47111f5..9354bccb8 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestManager.cs
@@ -1,10 +1,8 @@
using System.Threading.Tasks;
-using Win_in.Sfs.Wms.Store.Domain;
-
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
-
using Win_in.Sfs.Shared.Domain;
+namespace Win_in.Sfs.Wms.Store.Domain;
+
public interface ICoatingIssueRequestManager : ISfsStoreRequestManager,
IBulkImportService
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs
index 4fab6934a..c4d746009 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/CoatingIssuelRequests/ICoatingIssueRequestRepository.cs
@@ -1,7 +1,6 @@
using Win_in.Sfs.Shared.Domain;
-using Win_in.Sfs.Wms.Store.Domain;
-namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
+namespace Win_in.Sfs.Wms.Store.Domain;
public interface ICoatingIssueRequestRepository : ISfsStoreRepositoryBase,
ISfsBulkRepositoryBase
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs
index 7038db0fd..9c47ade9b 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs
@@ -2,10 +2,6 @@ using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.Store.Domain;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
-using Win_in.Sfs.Wms.Store.Notes.IssueNotes;
-using Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
-
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
[ConnectionStringName(StoreDbProperties.ConnectionStringName)]
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs
index 304324f4f..36a81f0f4 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobDbContextModelCreatingExtensions.cs
@@ -3,7 +3,6 @@ using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.EntityFrameworkCore;
using Win_in.Sfs.Wms.Store.Domain;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
@@ -22,7 +21,7 @@ public static class CoatingIssueJobDbContextModelCreatingExtensions
//Configure Job base properties
b.ConfigureJob();
//Properties
- b.Property(q => q.MaterialRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.CoatingRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.JobType).HasConversion();
b.Property(q => q.JobStatus).HasConversion();
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs
index c8239166a..ef96924b9 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/CoatingIssueJob/CoatingIssueJobEfCoreRepository.cs
@@ -1,5 +1,5 @@
using Volo.Abp.EntityFrameworkCore;
-using Win_in.Sfs.Wms.Store.Jobs.IssueJobs;
+using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240514023713_20240514.Designer.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240514023713_20240514.Designer.cs
new file mode 100644
index 000000000..9a6fb9b0a
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240514023713_20240514.Designer.cs
@@ -0,0 +1,32164 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+using Win_in.Sfs.Wms.Store.EntityFrameworkCore;
+
+#nullable disable
+
+namespace Win_in.Sfs.Wms.Store.Migrations
+{
+ [DbContext(typeof(StoreDbContext))]
+ [Migration("20240514023713_20240514")]
+ partial class _20240514
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
+ .HasAnnotation("ProductVersion", "6.0.13")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
+
+ modelBuilder.Entity("Win_in.Sfs.Wms.Store.Domain.AssembleIssueJob", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AcceptTime")
+ .HasColumnType("datetime2");
+
+ b.Property("AcceptUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AcceptUserName")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("AssembleRequestNumber")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("CompleteTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CompleteUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CompleteUserName")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("EnumIssueSendType")
+ .HasColumnType("int");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IsAutoComplete")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("IssueRequestType")
+ .HasColumnType("int");
+
+ b.Property("JobDescription")
+ .HasMaxLength(1024)
+ .HasColumnType("nvarchar(1024)");
+
+ b.Property("JobStatus")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("JobType")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Number")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("Priority")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasDefaultValue(0);
+
+ b.Property("PriorityIncrement")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasDefaultValue(0);
+
+ b.Property("ProdLine")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("Remark")
+ .HasMaxLength(3072)
+ .HasColumnType("nvarchar(3072)")
+ .HasColumnName("Remark");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("UpStreamJobNumber")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("UseOnTheWayLocation")
+ .HasColumnType("bit");
+
+ b.Property("WarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("WorkGroupCode")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("Worker")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Number")
+ .IsUnique();
+
+ b.ToTable("Job_AssembleIssueJob", (string)null);
+ });
+
+ modelBuilder.Entity("Win_in.Sfs.Wms.Store.Domain.AssembleIssueJobDetail", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("HandledFromArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledFromContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledFromLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromLocationCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromPackingCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledFromQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("HandledFromSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledToContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledToLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToLocationCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToPackingCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledToQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("HandledToSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ItemCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ItemDesc1")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ItemDesc2")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ItemName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("MasterID")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Number")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("OnTheWayLocationCode")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("PositionCode")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("ProdLine")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("RecommendFromArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("RecommendFromContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("RecommendFromLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromLocationCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromPackingCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("RecommendFromQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("RecommendFromSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendFromWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("RecommendToContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("RecommendToLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToLocationCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToPackingCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("RecommendToQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("RecommendToSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendToWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecommendType")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("Remark")
+ .HasMaxLength(3072)
+ .HasColumnType("nvarchar(3072)")
+ .HasColumnName("Remark");
+
+ b.Property("RequestLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RequestLocationCode")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("RequestLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RequestLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RequestQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("RequestWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("StdPackQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("TransferLibFromArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TransferLibFromContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TransferLibFromLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromLocationCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromPackingCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TransferLibFromQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("TransferLibFromSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibFromWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TransferLibToContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TransferLibToLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToLocationCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToPackingCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TransferLibToQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("TransferLibToSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TransferLibToWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Uom")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("MasterID");
+
+ b.ToTable("Job_AssembleIssueJobDetail", (string)null);
+ });
+
+ modelBuilder.Entity("Win_in.Sfs.Wms.Store.Domain.AssembleIssueNote", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ActiveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("ConfirmTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Confirmed")
+ .HasColumnType("bit");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("EnumIssueSendType")
+ .HasColumnType("int");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("IssueRequestType")
+ .HasColumnType("int");
+
+ b.Property("JobNumber")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("JobNumber");
+
+ b.Property("LastModificationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("LastModificationTime");
+
+ b.Property("LastModifierId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("LastModifierId");
+
+ b.Property("Number")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("Number");
+
+ b.Property("Remark")
+ .HasMaxLength(3072)
+ .HasColumnType("nvarchar(3072)")
+ .HasColumnName("Remark");
+
+ b.Property("RequestNumber")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("UseOnTheWayLocation")
+ .HasColumnType("bit");
+
+ b.Property("Worker")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Number")
+ .IsUnique();
+
+ b.ToTable("Store_AssembleIssueNote", (string)null);
+ });
+
+ modelBuilder.Entity("Win_in.Sfs.Wms.Store.Domain.AssembleIssueNoteDetail", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreationTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("CreationTime");
+
+ b.Property("CreatorId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("CreatorId");
+
+ b.Property("HandledFromArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledFromContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledFromLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromLocationCode")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("HandledFromLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromPackingCode")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("HandledFromProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledFromQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("HandledFromSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledFromWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToArriveDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledToContainerCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToExpireDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledToLocationArea")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToLocationCode")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("HandledToLocationErpCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToLocationGroup")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToLot")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToPackingCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToProduceDate")
+ .HasColumnType("datetime2");
+
+ b.Property("HandledToQty")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("HandledToSupplierBatch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HandledToWarehouseCode")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ItemCode")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("ItemCode");
+
+ b.Property("ItemDesc1")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("ItemDesc1");
+
+ b.Property("ItemDesc2")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("ItemDesc2");
+
+ b.Property