diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs
index 55467616b..a2de366d0 100644
--- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs
@@ -29,6 +29,12 @@ public enum EnumJobStatus
[Display(Name = "完成")]
Done = 3,
+ ///
+ /// 部分完成
+ ///
+ [Display(Name = "部分完成")]
+ Partial = 4,
+
///
/// 关闭
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDTO.cs
index 12e3f745f..d1eaffa3c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDTO.cs
@@ -1,12 +1,17 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
[Display(Name = "客户退拆任务")]
public class ProductRecycleJobDTO : SfsJobDTOBase
-{
-
+{
+ ///
+ /// 客户退拆申请单号
+ ///
+ [Display(Name = "客户退拆申请单号")]
+ public string RequestNumber { get; set; }
///
/// 车间
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDetailDTO.cs
index 32f7be931..796767d08 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDetailDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDetailDTO.cs
@@ -1,3 +1,4 @@
+using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Volo.Abp.Data;
@@ -87,4 +88,6 @@ public class ProductRecycleJobDetailDTO : SfsJobRecommendToDetailDTOBase
///
public string WarehouseCode { get; set; }
+
+ public List MaterialDetails { get; set; } = new List();
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobMaterialDetailDto.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobMaterialDetailDto.cs
new file mode 100644
index 000000000..0e40333fd
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobMaterialDetailDto.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+
+namespace Win_in.Sfs.Wms.Store.Application.Contracts;
+public class ProductRecycleJobMaterialDetailDto : EntityDto
+{
+ ///
+ /// 零件代码
+ ///
+ public string ItemCode { get; set; }
+
+ ///
+ /// 数量
+ ///
+ public decimal Qty { get; set; }
+ ///
+ /// 库位代码
+ ///
+ public string LocationCode { get; set; }
+
+ ///
+ /// 库区
+ ///
+ public string LocationArea { get; set; }
+
+ ///
+ /// 库位组
+ ///
+ public string LocationGroup { get; set; }
+
+ ///
+ /// ERP库位代码
+ ///
+ public string LocationErpCode { get; set; }
+
+ ///
+ /// 仓库代码
+ ///
+ public string WarehouseCode { get; set; }
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/IProductRecycleJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/IProductRecycleJobAppService.cs
index c68fa097a..3af319f51 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/IProductRecycleJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/IProductRecycleJobAppService.cs
@@ -1,3 +1,4 @@
+using System;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@@ -6,5 +7,5 @@ public interface IProductRecycleJobAppService
: ISfsJobAppServiceBase
{
-
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/Inputs/ProductRecycleJobEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/Inputs/ProductRecycleJobEditInput.cs
index 759bd3f2b..2eb10ae1c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/Inputs/ProductRecycleJobEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/Inputs/ProductRecycleJobEditInput.cs
@@ -9,7 +9,11 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ProductRecycleJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput
{
#region Create
-
+ ///
+ /// 申请单号
+ ///
+ [Display(Name = "申请单号")]
+ public string RequestNumber { get; set; }
///
/// 车间
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDTO.cs
index 25fdd5741..87290ae8d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDTO.cs
@@ -11,9 +11,14 @@ using System.Collections.Generic;
///
public class ProductRecycleNoteDTO : SfsStoreDTOBase, IHasNumber
{
- [Display(Name = "成品回收申请单号")]
+ [Display(Name = "客户退拆申请单号")]
public string RequestNumber { get; set; }
+ ///
+ /// 客户退拆任务单号
+ ///
+ [Display(Name = "客户退拆任务单号")]
+ public string JobNumber { get; set; }
///
/// 回收时间
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs
index 2d249d85e..dccc68a82 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs
@@ -6,6 +6,7 @@ using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Notes.ProductRecycleNotes.DTOs;
+[Display(Name = "客户退拆明细")]
public class ProductRecycleNoteDetailExtendDto
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/Inputs/ProductRecycleNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/Inputs/ProductRecycleNoteEditInput.cs
index 2e37699de..3ae270b21 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/Inputs/ProductRecycleNoteEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/Inputs/ProductRecycleNoteEditInput.cs
@@ -39,7 +39,6 @@ public class ProductRecycleNoteEditInput : SfsStoreCreateOrUpdateInputBase
///
[Display(Name = "申请单号")]
public string RequestNumber { get; set; }
-
///
/// 任务单号
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductRecycleRequests/IProductRecycleRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductRecycleRequests/IProductRecycleRequestAppService.cs
index db13f4970..f10e2620c 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductRecycleRequests/IProductRecycleRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductRecycleRequests/IProductRecycleRequestAppService.cs
@@ -1,3 +1,4 @@
+using System.Threading.Tasks;
using Win_in.Sfs.Shared.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@@ -6,5 +7,5 @@ public interface IProductRecycleRequestAppService
: ISfsStoreRequestMasterAppServiceBase
, ISfsCheckStatusAppService
{
-
+ Task UpdateStatusByNumberAsync(string number);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAppService.cs
index a7842a0b5..241b1b062 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAppService.cs
@@ -1,6 +1,10 @@
+using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Volo.Abp.Uow;
+using Volo.Abp;
+using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@@ -16,13 +20,39 @@ public class ProductRecycleJobAppService
{
private readonly IProductRecycleJobManager _productRecycleJobManager;
+ private readonly IProductRecycleRequestAppService _productRecycleRequestAppService;
public ProductRecycleJobAppService(
- IProductRecycleJobRepository repository, IProductRecycleJobManager productRecycleJobManager)
+ IProductRecycleJobRepository repository, IProductRecycleJobManager productRecycleJobManager,
+ IProductRecycleRequestAppService productRecycleRequestAppService)
: base(repository, productRecycleJobManager)
{
_productRecycleJobManager = productRecycleJobManager;
+ _productRecycleRequestAppService = productRecycleRequestAppService;
}
+ ///
+ /// 完成任务
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("handle/{id}")]
+ [UnitOfWork]
+ public override async Task CompleteAsync(Guid id, ProductRecycleJobDTO dto)
+ {
+ var handleEntity = ObjectMapper.Map(dto);
+ var job = await _repository.GetAsync(id).ConfigureAwait(false);
+ if (job.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None or EnumJobStatus.Done)//需要考虑下 多次提交的问题 所以不判断 进行中
+ {
+ throw new UserFriendlyException($"任务状态错误:编号为【{job.Number}】的任务已经【{job.JobStatus.GetDisplayName()}】");
+ }
-
-
+ var handleResult = await _productRecycleJobManager.CompleteAsync(handleEntity, job, CurrentUser).ConfigureAwait(false);
+ //判断申请是否执行完成
+ if(job.JobStatus== EnumJobStatus.Done)
+ {
+ await _productRecycleRequestAppService.UpdateStatusByNumberAsync(job.RequestNumber).ConfigureAwait(false);
+ }
+ var handleDto = ObjectMapper.Map(handleResult);
+ return handleDto;
+ }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAutoMapperProfile.cs
index 7d0d297b9..151cb791e 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAutoMapperProfile.cs
@@ -2,6 +2,7 @@ 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.ProductRecycleJobs;
namespace Win_in.Sfs.Wms.Store.Application;
@@ -12,9 +13,12 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap()
.ReverseMap();
- CreateMap()
- .ReverseMap();
+ CreateMap()
+ .AfterMap((x, y) => y.ExecutedQty += x.Qty)//已完成数量进行累计
+ .ReverseMap();
+ CreateMap()
+ .ReverseMap();
CreateMap();
CreateMap()
@@ -26,6 +30,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap()
;
-
+ CreateMap()
+ ;
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs
index 3801b40c8..f0bf40fd4 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs
@@ -107,29 +107,28 @@ public class ProductRecycleNoteAppService :
var items = pagedResult.Items.ToList();
- await SetNoteAndBackFlushDetailsAsync(pagedResult.Items.ToList()).ConfigureAwait(false);
+ //await SetNoteAndBackFlushDetailsAsync(pagedResult.Items.ToList()).ConfigureAwait(false);
- var exports = BuildProductRecycleNoteAndBackFlushDetailExport(items);
+ // var exports = BuildProductRecycleNoteAndBackFlushDetailExport(items);
List exportlist=new List();
- foreach (var itm in exports)
+ foreach (var itm in items)
{
- exportlist.Add(new ProductRecycleNoteDetailExtendDto()
+ foreach (var m_item in itm.MaterialDetails)
{
+ exportlist.Add(new ProductRecycleNoteDetailExtendDto()
+ {
- ItemCode = itm.ItemCode,
- LocCode = itm.LocationCode,
- Reason = string.Empty,
- Qty = itm.Qty,
- Type = "客户退拆"
-
-
+ ItemCode = m_item.ItemCode,
+ LocCode = m_item.LocationCode,
+ Reason = String.Join(',', itm.Details.Where(p=>!string.IsNullOrEmpty(p.ReasonCode)).SelectMany(r=>r.ReasonCode)),
+ Qty = m_item.Qty,
+ Type = "客户退拆"
- });
+ });
+ }
}
-
-
- return ExportImportService.Export(exports);
+ return ExportImportService.Export(exportlist);
}
catch (Exception ex)
{
@@ -222,7 +221,7 @@ public class ProductRecycleNoteAppService :
dto.LocationCode = nabfDetail.LocationCode;
dto.WorkHour = nabfDetail.WorkHour;
dto.RawItemCode = nabfDetail.RawItemCode;
- dto.RawQty = nabfDetail.Qty;
+ dto.RawQty = nabfDetail.RawQty;
dto.RawLocationCode = nabfDetail.RawLocationCode;
result.Add(dto);
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs
index b008dcd02..471b7068a 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs
@@ -19,6 +19,7 @@ namespace Win_in.Sfs.Wms.Store.Application;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
+using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Inventory.Domain;
@@ -88,6 +89,13 @@ public class ProductRecycleRequestAppService :
await Task.CompletedTask.ConfigureAwait(false);
throw new NotImplementedException();
}
+ [HttpPost("update-status")]
+ public virtual async Task UpdateStatusByNumberAsync(string number)
+ {
+ var item=await _productRecycleRequestManager.GetByNumberAsync(number).ConfigureAwait(false);
+ item.RequestStatus = EnumRequestStatus.Completed;
+ await _productRecycleRequestManager.UpdateAsync(item).ConfigureAwait(false);
+ }
#region 东阳
@@ -97,22 +105,21 @@ public class ProductRecycleRequestAppService :
foreach (var productRecycleRequest in addList)
{
- await SetRequestAutoPropertiesAsync(productRecycleRequest)
- .ConfigureAwait(false);
+ await SetRequestAutoPropertiesAsync(productRecycleRequest).ConfigureAwait(false);
productRecycleRequest.Worker = CurrentUser.GetUserName();
foreach (var detail in productRecycleRequest.Details)
{
- //var balance = await _balanceAppService.GetByItemLocationAndPackingAsync(
- // string.Empty,
- // detail.ItemCode,
- // detail.LocationCode).ConfigureAwait(false);
-
- //if (balance != null)
- //{
- // detail.Status = balance.Status;
- //}
- detail.Status = EnumInventoryStatus.OK;
+ var balance = await _balanceAppService.GetByItemLocationAndPackingAsync(
+ string.Empty,
+ detail.ItemCode,
+ detail.LocationCode).ConfigureAwait(false);
+
+ if (balance != null)
+ {
+ detail.Status = balance.Status;
+ }
+ // detail.Status = EnumInventoryStatus.OK;
var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode)
.ConfigureAwait(false);
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAutoMapperProfile.cs
index fc94e67c3..b400d4a9a 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAutoMapperProfile.cs
@@ -62,6 +62,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.Remark);
CreateMap()
+ .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.Number))
.ReverseMap();
CreateMap()
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs
index 1efc5bb08..77a990577 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs
@@ -1,10 +1,12 @@
using System;
using System.Linq.Expressions;
using System.Threading.Tasks;
+using Volo.Abp.Users;
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IProductRecycleJobManager : IJobManager
{
+ Task CompleteAsync(ProductRecycleJob entityinput, ProductRecycleJob entity, ICurrentUser user);
Task GetAsync(Expression> expression);
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs
index 99c3ebc7c..029ce70ef 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs
@@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities;
+using Win_in.Sfs.Wms.Store.Jobs.ProductRecycleJobs;
namespace Win_in.Sfs.Wms.Store.Domain;
@@ -12,6 +14,11 @@ namespace Win_in.Sfs.Wms.Store.Domain;
[Display(Name = "产品退拆任务")]
public class ProductRecycleJob : SfsJobAggregateRootBase
{
+ ///
+ /// 退拆请求单号
+ ///
+ [IgnoreUpdate]
+ public string RequestNumber { get; set; }
///
/// 车间
///
@@ -30,6 +37,8 @@ public class ProductRecycleJob : SfsJobAggregateRootBase Details { get; set; } = new List();
+
+
///
/// 设置任务明细的实际库位和实际数量
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobDetail.cs
index b8d8827f6..2d8321d0b 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobDetail.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobDetail.cs
@@ -2,6 +2,8 @@ using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Data;
using Win_in.Sfs.Shared.Domain.Shared;
+using System.Collections.Generic;
+using Win_in.Sfs.Wms.Store.Jobs.ProductRecycleJobs;
namespace Win_in.Sfs.Wms.Store.Domain;
@@ -71,6 +73,13 @@ public class ProductRecycleJobDetail : SfsJobRecommendToDetailEntityBase
[Column(TypeName = "decimal(18,6)")]
public decimal Qty { get; set; }
+ ///
+ /// 已完成数量
+ ///
+ [Display(Name = "数量")]
+ [Column(TypeName = "decimal(18,6)")]
+ public decimal ExecutedQty { get; set; }
+
///
/// 扩展属性
///
@@ -85,4 +94,10 @@ public class ProductRecycleJobDetail : SfsJobRecommendToDetailEntityBase
/// 仓库代码
///
public string WarehouseCode { get; set; }
+
+ ///
+ /// 子零件明细列表
+ ///
+ [NotMapped]
+ public List MaterialDetails { get; set; } = new List();
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs
index f27a29a7c..3e1e1cfb5 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs
@@ -57,5 +57,32 @@ public class ProductRecycleJobManager : SfsJobManagerBase CompleteAsync(ProductRecycleJob entityinput, ProductRecycleJob entity, ICurrentUser user)
+ {
+ await entity.CompleteAsync(user.Id, user.Name, Clock.Now).ConfigureAwait(false);
+ //判断是否部分完成
+ bool isDone = true;
+ foreach (var item in entity.Details)
+ {
+ var detail= entityinput.Details.FirstOrDefault(r=> r.ItemCode==item.ItemCode);
+ if (detail != null)
+ {
+ item.ExecutedQty += detail.Qty;
+ }
+ }
+ var ExecutedItem = entity.Details.Where(r => r.ExecutedQty != r.Qty).ToList();
+ if (ExecutedItem.Count > 0) isDone = false;
+ if (!isDone)
+ {
+ entity.JobStatus=EnumJobStatus.Partial;
+ }
+ await PublishCompletedAsync(entityinput).ConfigureAwait(false);
+
+ entity.Remark = entityinput.Remark;//返给前台记录用于下载记录excle
+
+ return await Repository.UpdateAsync(entity).ConfigureAwait(false);
+ }
+
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobMaterialDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobMaterialDetail.cs
new file mode 100644
index 000000000..308cb7ba2
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobMaterialDetail.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Win_in.Sfs.Wms.Store.Jobs.ProductRecycleJobs;
+public class ProductRecycleJobMaterialDetail
+{
+
+ ///
+ /// 零件代码
+ ///
+ public string ItemCode { get; set; }
+
+ ///
+ /// 数量
+ ///
+ public decimal Qty { get; set; }
+ ///
+ /// 库位代码
+ ///
+ public string LocationCode { get; set; }
+
+ ///
+ /// 库区
+ ///
+ public string LocationArea { get; set; }
+
+ ///
+ /// 库位组
+ ///
+ public string LocationGroup { get; set; }
+
+ ///
+ /// ERP库位代码
+ ///
+ public string LocationErpCode { get; set; }
+
+ ///
+ /// 仓库代码
+ ///
+ public string WarehouseCode { get; set; }
+
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductRecycleNotes/ProductRecycleNote.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductRecycleNotes/ProductRecycleNote.cs
index 9552ec325..ba500154b 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductRecycleNotes/ProductRecycleNote.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductRecycleNotes/ProductRecycleNote.cs
@@ -15,6 +15,11 @@ public class ProductRecycleNote : SfsStoreAggregateRootBase
[IgnoreUpdate]
public string RequestNumber { get; set; }
+ ///
+ /// 退拆任务单号
+ ///
+ [IgnoreUpdate]
+ public string JobNumber { get; set; }
///
/// 回收时间
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ProductRecycleJobs/ProductRecycleJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ProductRecycleJobs/ProductRecycleJobDbContextModelCreatingExtensions.cs
index de07c7b69..a6d678b4f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ProductRecycleJobs/ProductRecycleJobDbContextModelCreatingExtensions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ProductRecycleJobs/ProductRecycleJobDbContextModelCreatingExtensions.cs
@@ -1,5 +1,6 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
+using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.EntityFrameworkCore;
using Win_in.Sfs.Wms.Store.Domain;
@@ -22,7 +23,9 @@ public static class ProductRecycleJobDbContextModelCreatingExtensions
b.ConfigureJob();
//Properties
b.Property(q => q.Workshop).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
- b.Property(q => q.Shift).HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.Shift).HasMaxLength(SfsPropertyConst.CodeLength);
+
+ b.Property(q => q.ExtraProperties).HasPrecision(18, 6);
//Relations
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
//Indexes
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductRecycleJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductRecycleJobAutoMapperProfile.cs
new file mode 100644
index 000000000..4a02f6459
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductRecycleJobAutoMapperProfile.cs
@@ -0,0 +1,52 @@
+using System;
+using AutoMapper;
+using Volo.Abp.AutoMapper;
+using Win_in.Sfs.Shared.Application;
+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;
+
+namespace Win_in.Sfs.Wms.Store.Event;
+public partial class StoreEventAutoMapperProfile : Profile
+{
+ private void ProductRecycleJobAutoMapperProfile()
+ {
+ CreateMap()
+ .ForMember(x => x.JobNumber, y => y.MapFrom(d => d.Number))
+ .ForMember(x => x.RecycleTime, y => y.MapFrom(d => d.CompleteTime))
+ .ForMember(x => x.ActiveDate, y => y.MapFrom(d => DateTime.Now))
+ .Ignore(x => x.MaterialDetails)
+ ;
+
+ CreateMap()
+ .Ignore(x => x.StdPackQty)
+ .Ignore(x => x.ContainerCode)
+ .Ignore(x => x.PackingCode)
+ .Ignore(x => x.SupplierBatch)
+ .Ignore(x => x.ArriveDate)
+ .Ignore(x => x.ProduceDate)
+ .Ignore(x => x.ExpireDate)
+ .Ignore(x => x.Lot)
+ .Ignore(x => x.ReasonCode)
+ .AfterMap((x, y) => y.Lot = string.Empty)
+ .AfterMap((x, y) => y.PackingCode = string.Empty)
+ ;
+ CreateMap()
+ .MapExpectInOutTo()
+ .Ignore(x => x.SerialNumber)
+ .Ignore(x => x.Worker)
+ .Ignore(x => x.ExtraProperties)
+ ;
+ CreateMap()
+ .MapExpectInOutTo()
+ .ForMember(x => x.LocationCode, y => y.MapFrom(d => d.RecommendToLocationCode))
+ .ForMember(x => x.LocationArea, y => y.MapFrom(d => d.RecommendToLocationArea))
+ .ForMember(x => x.LocationGroup, y => y.MapFrom(d => d.RecommendToLocationGroup))
+ .ForMember(x => x.LocationErpCode, y => y.MapFrom(d => d.RecommendToLocationErpCode))
+ .ForMember(x => x.WarehouseCode, y => y.MapFrom(d => d.RecommendToWarehouseCode))
+ .Ignore(x => x.SerialNumber)
+ .Ignore(x => x.Worker)
+ .Ignore(x => x.ExtraProperties);
+ }
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductRecycleJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductRecycleJobEventHandler.cs
new file mode 100644
index 000000000..52e28261e
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductRecycleJobEventHandler.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.EventBus;
+using Volo.Abp.Uow;
+using Win_in.Sfs.Shared.Event;
+using Win_in.Sfs.Wms.Inventory.Application.Contracts;
+using Win_in.Sfs.Wms.Store.Domain;
+using Win_in.Sfs.Wms.Store.Event.Inventories;
+
+namespace Win_in.Sfs.Wms.Store.Event.ExpectInOuts;
+
+public class ProductRecycleJobEventHandler :
+ StoreExpectInOutEventHandlerBase
+ , ILocalEventHandler>
+ , ILocalEventHandler>>
+ , ILocalEventHandler>
+ , ILocalEventHandler>
+{
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData)
+ {
+ var entity = eventData.Entity;
+
+ if (!entity.IsAutoComplete)
+ {
+ await AddExpectOutsAsync(new List() { entity }).ConfigureAwait(false);
+ }
+ }
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCreatedEntityEventData> eventData)
+ {
+ var entities = eventData.Entity;
+ foreach (var entity in entities)
+ {
+ await AddExpectOutsAsync(new List() { entity }).ConfigureAwait(false);
+ }
+ }
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCompletedEntityEventData eventData)
+ {
+ var entity = eventData.Entity;
+
+ await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false);
+ }
+
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCancelledEntityEventData eventData)
+ {
+ var entity = eventData.Entity;
+
+ await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false);
+ }
+
+ private async Task AddExpectOutsAsync(List entities)
+ {
+ var expectOuts = new List();
+ foreach (var entity in entities)
+ {
+ var entityExpectOuts = BuildExpectOutInventoryAsync(entity);
+ expectOuts.AddRange(entityExpectOuts);
+ }
+ await ExpectOutAppService.AddManyAsync(expectOuts).ConfigureAwait(false);
+ }
+
+ private List BuildExpectOutInventoryAsync(ProductRecycleJob purchaseReturnJob)
+ {
+ var inputs = ObjectMapper.Map, List>(purchaseReturnJob.Details);
+ foreach (var input in inputs)
+ {
+ input.WarehouseCode = purchaseReturnJob.WarehouseCode;
+ input.Worker = purchaseReturnJob.Worker;
+ input.JobNumber = purchaseReturnJob.Number;
+ }
+
+ return inputs;
+ }
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductRecycleJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductRecycleJobEventHandler.cs
new file mode 100644
index 000000000..5afef7af4
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductRecycleJobEventHandler.cs
@@ -0,0 +1,129 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.EventBus;
+using Volo.Abp.Uow;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Shared.Domain.Shared;
+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.Jobs.ProductRecycleJobs;
+
+
+namespace Win_in.Sfs.Wms.Store.Event.BusinessJob;
+
+
+public class ProductRecycleJobEventHandler :
+ StoreEventHandlerBase
+, ILocalEventHandler>
+, ILocalEventHandler>
+{
+ private readonly IProductRecycleNoteAppService _productRecycleNoteAppService;
+ private readonly IBomAppService _bomApp;
+ public ProductRecycleJobEventHandler(
+ IProductRecycleNoteAppService productRecycleNoteAppService,
+ IBomAppService bomApp
+ )
+ {
+ _productRecycleNoteAppService = productRecycleNoteAppService;
+ _bomApp=bomApp;
+ }
+
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData)
+ {
+ var entity = eventData.Entity;
+
+ if (entity.IsAutoComplete)
+ {
+ entity.CompleteTime = Clock.Now;
+ entity.JobStatus = EnumJobStatus.Done;
+
+ foreach (var detail in eventData.Entity.Details)
+ {
+ detail.SetHandledFromRecommend();
+ }
+
+ var note = await BuildProductRecycleNoteAsync(entity).ConfigureAwait(false);
+ await _productRecycleNoteAppService.CreateAsync(note).ConfigureAwait(false);
+ }
+ }
+
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCompletedEntityEventData eventData)
+ {
+ var entity = eventData.Entity;
+
+ var ProductRecycleNote = await BuildProductRecycleNoteAsync(entity).ConfigureAwait(false);
+ var dto= await _productRecycleNoteAppService.CreateAsync(ProductRecycleNote).ConfigureAwait(false);
+ eventData.Entity.Remark = dto.Number;//返给前台记录用于下载记录excle
+ }
+ private async Task BuildProductRecycleNoteAsync(ProductRecycleJob job)
+ {
+ var createInput = ObjectMapper.Map(job);
+
+ createInput.MaterialDetails = await BuildMaterialDetailsAsync(job).ConfigureAwait(false);
+
+ return createInput;
+ }
+
+ private async Task> BuildMaterialDetailsAsync(ProductRecycleJob request)
+ {
+ var materialDetailInputs = new List();
+ foreach (var detail in request.Details)
+ {
+ var materialdetails = detail.MaterialDetails;
+ var componentItemCode = materialdetails.Select(p => p.ItemCode).Distinct().ToList();
+ var items = await ItemBasicAclService.GetByCodesAsync(componentItemCode).ConfigureAwait(false);
+
+ foreach (var materialdetail in materialdetails)
+ {
+ var item = items.FirstOrDefault(p => p.Code == materialdetail.ItemCode);
+ var detailInput = BuildMaterialDetailInput(materialdetail, item, detail);
+
+ materialDetailInputs.Add(detailInput);
+ }
+ }
+
+ return materialDetailInputs;
+ }
+
+ private static ProductRecycleMaterialDetailInput BuildMaterialDetailInput(ProductRecycleJobMaterialDetail materialdetail, ItemBasicDTO item,
+ ProductRecycleJobDetail detail)
+ {
+ var detailInput = new ProductRecycleMaterialDetailInput
+ {
+ ProductPackingCode = string.Empty,
+ ProductItemCode = detail.ItemCode,
+ ProductItemName = detail.ItemName,
+ ProductItemDesc1 = detail.ItemDesc1,
+ ProductItemDesc2 = detail.ItemDesc2,
+ ProductLot = string.Empty,
+ PackingCode = string.Empty,
+ ItemCode = materialdetail.ItemCode,
+ Qty = materialdetail.Qty ,
+ Uom = detail.Uom,
+ BomVersion = detail.BomVersion,
+ LocationCode = materialdetail.LocationCode,
+ LocationErpCode = materialdetail.LocationErpCode,
+ WarehouseCode = materialdetail.WarehouseCode,
+ Lot = string.Empty,
+ Status = EnumInventoryStatus.OK,
+ LocationArea = materialdetail.LocationArea,
+ LocationGroup = materialdetail.LocationGroup,
+ };
+
+ if (item != null)
+ {
+ detailInput.ItemName = item.Name;
+ detailInput.ItemDesc1 = item.Desc1;
+ detailInput.ItemDesc2 = item.Desc2;
+ detailInput.StdPackQty = item.StdPackQty;
+ }
+
+ return detailInput;
+ }
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionRecycleJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionRecycleJobEventHandler.cs
deleted file mode 100644
index 8e6c7fc5b..000000000
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionRecycleJobEventHandler.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using Volo.Abp.EventBus;
-using Volo.Abp.Uow;
-using Win_in.Sfs.Shared.Domain.Shared;
-using Win_in.Sfs.Shared.Event;
-using Win_in.Sfs.Wms.Store.Application.Contracts;
-using Win_in.Sfs.Wms.Store.Domain;
-
-namespace Win_in.Sfs.Wms.Store.Event.BusinessJob;
-
-
-public class ProductionRecycleJobEventHandler :
- StoreEventHandlerBase
-, ILocalEventHandler>
-, ILocalEventHandler>
-{
- private readonly IProductRecycleNoteAppService _productRecycleNoteAppService;
-
- public ProductionRecycleJobEventHandler(
- IProductRecycleNoteAppService productRecycleNoteAppService
- )
- {
- _productRecycleNoteAppService = productRecycleNoteAppService;
- }
-
- [UnitOfWork]
- public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData)
- {
- var entity = eventData.Entity;
-
- if (entity.IsAutoComplete)
- {
- entity.CompleteTime = Clock.Now;
- entity.JobStatus = EnumJobStatus.Done;
-
- foreach (var detail in eventData.Entity.Details)
- {
- detail.SetHandledFromRecommend();
- }
-
- var note = BuildProductionReturnNote(entity);
- await _productRecycleNoteAppService.CreateAsync(note).ConfigureAwait(false);
- }
- }
-
- [UnitOfWork]
- public virtual async Task HandleEventAsync(SfsCompletedEntityEventData eventData)
- {
- var entity = eventData.Entity;
-
- var productRecycleNote = BuildProductionReturnNote(entity);
- await _productRecycleNoteAppService.CreateAsync(productRecycleNote).ConfigureAwait(false);
-
- }
-
- private ProductRecycleNoteEditInput BuildProductionReturnNote(ProductRecycleJob entity)
- {
- var input = ObjectMapper.Map(entity);
-
-
- input.Details = new List();
-
- foreach (var detail in entity.Details.Where(detail => detail.HandledQty != 0))
- {
- var inputDetail = ObjectMapper.Map(detail);
-
- input.Details.Add(inputDetail);
- }
-
- return input;
- }
-}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs
index 57683fbff..7b67fbf8f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs
@@ -9,6 +9,7 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest;
+using System.Runtime.InteropServices;
using Win_in.Sfs.Wms.Store.Application.Contracts;
public class ProductReceiptNoteEventHandler
@@ -22,14 +23,18 @@ public class ProductReceiptNoteEventHandler
//private readonly IProductReceiptRequestAppService _productReceiptRequestApp;
private readonly IProductReceiptRequestManager _productReceiptRequestManager;
+ private readonly IDeliverRequestAppService _deliverRequestAppService;
+
public ProductReceiptNoteEventHandler(
IPutawayJobAppService putawayJobAppService
//, IProductReceiptRequestAppService productReceiptRequestApp
- , IProductReceiptRequestManager productReceiptRequestManager)
+ , IProductReceiptRequestManager productReceiptRequestManager,
+IDeliverRequestAppService deliverRequestAppService)
{
_putawayJobAppService = putawayJobAppService;
//_productReceiptRequestApp = productReceiptRequestApp;
_productReceiptRequestManager = productReceiptRequestManager;
+ _deliverRequestAppService = deliverRequestAppService;
}
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData)
@@ -95,6 +100,8 @@ public class ProductReceiptNoteEventHandler
public virtual async Task HandleEventAsync(SfsHandledEntityEventData eventData)
{
- throw new System.NotImplementedException();
+ var productReceiptNote = eventData.Entity;
+ var input = ObjectMapper.Map(productReceiptNote);
+ await _deliverRequestAppService.CreateAsync(input).ConfigureAwait(false);
}
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs
index d2c3ca821..9b82cb14f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs
@@ -74,8 +74,6 @@ public class ProductRecycleRequestEventHandler
var entitys = eventData.Entity;
foreach (var entity in entitys)
{
- entity.AutoAgree = true;
- entity.DirectCreateNote = false;
if (entity.AutoSubmit)
{
await _productRecycleRequestManager.SubmitAsync(entity).ConfigureAwait(false);
@@ -158,16 +156,16 @@ public class ProductRecycleRequestEventHandler
ProductRecycleRequestDetail productRecycleRequestDetail, TransactionTypeDTO transactionType)
{
var jobDetails = new List();
- //var input = new RecommendBalanceRequestInput()
- //{
- // ItemCode = productRecycleRequestDetail.ItemCode,
- // Qty = productRecycleRequestDetail.Qty,
- // LocationTypes = transactionType.OutLocationTypes,
- // LocationAreas = new List { productRecycleRequestDetail.LocationArea },
- // Statuses = transactionType.OutInventoryStatuses,
- //};
+ var input = new RecommendBalanceRequestInput()
+ {
+ ItemCode = productRecycleRequestDetail.ItemCode,
+ Qty = productRecycleRequestDetail.Qty,
+ LocationTypes = transactionType.OutLocationTypes,
+ LocationAreas = new List { productRecycleRequestDetail.LocationArea },
+ Statuses = transactionType.OutInventoryStatuses,
+ };
//获取推荐库存
- var recommendList = await _balanceAppService.GetListByItemCodeAsync(productRecycleRequestDetail.ItemCode).ConfigureAwait(false);
+ var recommendList = await _balanceAppService.GetRecommendBalancesAsync(input).ConfigureAwait(false);
//没有推荐库存时 跳过此明细 不生成任务
if (recommendList.Count != 0)
{
@@ -193,6 +191,8 @@ public class ProductRecycleRequestEventHandler
detail.RecommendToLocationErpCode = balance.LocationErpCode;
detail.RecommendToLocationCode = balance.LocationCode;
+ detail.RecommendToLocationGroup = balance.LocationGroup;
+ detail.RecommendToLocationArea= balance.LocationArea;
detail.RecommendPackingCode = balance.PackingCode;
detail.RecommendContainerCode = balance.ContainerCode;
detail.RecommendSupplierBatch = balance.SupplierBatch;
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs
index 40de8aa9b..08d4809bf 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs
@@ -39,6 +39,7 @@ public partial class StoreEventAutoMapperProfile : Profile
ProductionReturnJobAutoMapperProfile();
ProductReceiveJobAutoMapperProfile();
PurchaseReceiptJobAutoMapperProfile();
+ ProductRecycleJobAutoMapperProfile();
PurchaseReturnJobAutoMapperProfile();
PutawayJobAutoMapperProfile();
UnplannedIssueJobAutoMapperProfile();
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ProductRecycleNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ProductRecycleNoteEventHandler.cs
index 9e2163502..a7377bd77 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ProductRecycleNoteEventHandler.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ProductRecycleNoteEventHandler.cs
@@ -32,9 +32,9 @@ public class ProductRecycleNoteEventHandler
var entity = eventData.Entity;
await AddTransactionsOfProductAsync(entity).ConfigureAwait(false);
- if (!string.IsNullOrEmpty(entity.RequestNumber))
+ if (!string.IsNullOrEmpty(entity.Number))
{
- await _requestAppService.CompleteByNumberAsync(entity.RequestNumber).ConfigureAwait(false);
+ await _requestAppService.CompleteByNumberAsync(entity.Number).ConfigureAwait(false);
}
}
@@ -54,9 +54,9 @@ public class ProductRecycleNoteEventHandler
{
await AddTransactionsOfProductAsync(entity).ConfigureAwait(false);
- if (!string.IsNullOrEmpty(entity.RequestNumber))
+ if (!string.IsNullOrEmpty(entity.Number))
{
- await _requestAppService.CompleteByNumberAsync(entity.RequestNumber).ConfigureAwait(false);
+ await _requestAppService.CompleteByNumberAsync(entity.Number).ConfigureAwait(false);
}
}