Browse Source

退拆业务修改

dev_DY_CC
lvzb 1 year ago
parent
commit
dcc7b54cfb
  1. 6
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs
  2. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDTO.cs
  3. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobDetailDTO.cs
  4. 44
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/DTOs/ProductRecycleJobMaterialDetailDto.cs
  5. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/IProductRecycleJobAppService.cs
  6. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ProductRecycleJobs/Inputs/ProductRecycleJobEditInput.cs
  7. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDTO.cs
  8. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs
  9. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/Inputs/ProductRecycleNoteEditInput.cs
  10. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ProductRecycleRequests/IProductRecycleRequestAppService.cs
  11. 36
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAppService.cs
  12. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ProductRecycleJobs/ProductRecycleJobAutoMapperProfile.cs
  13. 31
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs
  14. 31
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs
  15. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAutoMapperProfile.cs
  16. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs
  17. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs
  18. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobDetail.cs
  19. 27
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs
  20. 45
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobMaterialDetail.cs
  21. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductRecycleNotes/ProductRecycleNote.cs
  22. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ProductRecycleJobs/ProductRecycleJobDbContextModelCreatingExtensions.cs
  23. 52
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ProductRecycleJobAutoMapperProfile.cs
  24. 80
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/ExpectInOuts/ProductRecycleJobEventHandler.cs
  25. 129
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductRecycleJobEventHandler.cs
  26. 75
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionRecycleJobEventHandler.cs
  27. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/ProductReceiptNoteEventHandler.cs
  28. 22
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs
  29. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs
  30. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ProductRecycleNoteEventHandler.cs

6
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Job/EnumJobStatus.cs

@ -29,6 +29,12 @@ public enum EnumJobStatus
[Display(Name = "完成")] [Display(Name = "完成")]
Done = 3, Done = 3,
/// <summary>
/// 部分完成
/// </summary>
[Display(Name = "部分完成")]
Partial = 4,
/// <summary> /// <summary>
/// 关闭 /// 关闭
/// </summary> /// </summary>

7
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 System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
[Display(Name = "客户退拆任务")] [Display(Name = "客户退拆任务")]
public class ProductRecycleJobDTO : SfsJobDTOBase<ProductRecycleJobDetailDTO> public class ProductRecycleJobDTO : SfsJobDTOBase<ProductRecycleJobDetailDTO>
{ {
/// <summary>
/// 客户退拆申请单号
/// </summary>
[Display(Name = "客户退拆申请单号")]
public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 车间 /// 车间
/// </summary> /// </summary>

3
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;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Volo.Abp.Data; using Volo.Abp.Data;
@ -87,4 +88,6 @@ public class ProductRecycleJobDetailDTO : SfsJobRecommendToDetailDTOBase
/// </summary> /// </summary>
public string WarehouseCode { get; set; } public string WarehouseCode { get; set; }
public List<ProductRecycleJobMaterialDetailDto> MaterialDetails { get; set; } = new List<ProductRecycleJobMaterialDetailDto>();
} }

44
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
{
/// <summary>
/// 零件代码
/// </summary>
public string ItemCode { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal Qty { get; set; }
/// <summary>
/// 库位代码
/// </summary>
public string LocationCode { get; set; }
/// <summary>
/// 库区
/// </summary>
public string LocationArea { get; set; }
/// <summary>
/// 库位组
/// </summary>
public string LocationGroup { get; set; }
/// <summary>
/// ERP库位代码
/// </summary>
public string LocationErpCode { get; set; }
/// <summary>
/// 仓库代码
/// </summary>
public string WarehouseCode { get; set; }
}

1
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; using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;

6
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<ProductRecycleJobDetailInput> public class ProductRecycleJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<ProductRecycleJobDetailInput>
{ {
#region Create #region Create
/// <summary>
/// 申请单号
/// </summary>
[Display(Name = "申请单号")]
public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 车间 /// 车间
/// </summary> /// </summary>

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDTO.cs

@ -11,9 +11,14 @@ using System.Collections.Generic;
/// </summary> /// </summary>
public class ProductRecycleNoteDTO : SfsStoreDTOBase<ProductRecycleNoteDetailDTO>, IHasNumber public class ProductRecycleNoteDTO : SfsStoreDTOBase<ProductRecycleNoteDetailDTO>, IHasNumber
{ {
[Display(Name = "成品回收申请单号")] [Display(Name = "客户退拆申请单号")]
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary>
/// 客户退拆任务单号
/// </summary>
[Display(Name = "客户退拆任务单号")]
public string JobNumber { get; set; }
/// <summary> /// <summary>
/// 回收时间 /// 回收时间
/// </summary> /// </summary>

1
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; using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Notes.ProductRecycleNotes.DTOs; namespace Win_in.Sfs.Wms.Store.Notes.ProductRecycleNotes.DTOs;
[Display(Name = "客户退拆明细")]
public class ProductRecycleNoteDetailExtendDto public class ProductRecycleNoteDetailExtendDto
{ {

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/Inputs/ProductRecycleNoteEditInput.cs

@ -39,7 +39,6 @@ public class ProductRecycleNoteEditInput : SfsStoreCreateOrUpdateInputBase
/// </summary> /// </summary>
[Display(Name = "申请单号")] [Display(Name = "申请单号")]
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 任务单号 /// 任务单号
/// </summary> /// </summary>

3
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; using Win_in.Sfs.Shared.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -6,5 +7,5 @@ public interface IProductRecycleRequestAppService
: ISfsStoreRequestMasterAppServiceBase<ProductRecycleRequestDTO, SfsStoreRequestInputBase, ProductRecycleRequestEditInput, ProductRecycleRequestDetailDTO, SfsStoreRequestInputBase> : ISfsStoreRequestMasterAppServiceBase<ProductRecycleRequestDTO, SfsStoreRequestInputBase, ProductRecycleRequestEditInput, ProductRecycleRequestDetailDTO, SfsStoreRequestInputBase>
, ISfsCheckStatusAppService , ISfsCheckStatusAppService
{ {
Task UpdateStatusByNumberAsync(string number);
} }

36
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 System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; 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.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -16,13 +20,39 @@ public class ProductRecycleJobAppService
{ {
private readonly IProductRecycleJobManager _productRecycleJobManager; private readonly IProductRecycleJobManager _productRecycleJobManager;
private readonly IProductRecycleRequestAppService _productRecycleRequestAppService;
public ProductRecycleJobAppService( public ProductRecycleJobAppService(
IProductRecycleJobRepository repository, IProductRecycleJobManager productRecycleJobManager) IProductRecycleJobRepository repository, IProductRecycleJobManager productRecycleJobManager,
IProductRecycleRequestAppService productRecycleRequestAppService)
: base(repository, productRecycleJobManager) : base(repository, productRecycleJobManager)
{ {
_productRecycleJobManager = productRecycleJobManager; _productRecycleJobManager = productRecycleJobManager;
_productRecycleRequestAppService = productRecycleRequestAppService;
} }
/// <summary>
/// 完成任务
/// </summary>
/// <param name="id"></param>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost("handle/{id}")]
[UnitOfWork]
public override async Task<ProductRecycleJobDTO> CompleteAsync(Guid id, ProductRecycleJobDTO dto)
{
var handleEntity = ObjectMapper.Map<ProductRecycleJobDTO, ProductRecycleJob>(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<ProductRecycleJob, ProductRecycleJobDTO>(handleResult);
return handleDto;
}
} }

9
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 Volo.Abp.AutoMapper;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Jobs.ProductRecycleJobs;
namespace Win_in.Sfs.Wms.Store.Application; namespace Win_in.Sfs.Wms.Store.Application;
@ -12,9 +13,12 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<ProductRecycleJob, ProductRecycleJobDTO>() CreateMap<ProductRecycleJob, ProductRecycleJobDTO>()
.ReverseMap(); .ReverseMap();
CreateMap<ProductRecycleJobDetail, ProductRecycleJobDetailDTO>() CreateMap<ProductRecycleJobDetailDTO,ProductRecycleJobDetail>()
.AfterMap((x, y) => y.ExecutedQty += x.Qty)//已完成数量进行累计
.ReverseMap(); .ReverseMap();
CreateMap<ProductRecycleJobDetail, ProductRecycleJobDetailDTO>()
.ReverseMap();
CreateMap<ProductRecycleJobEditInput, ProductRecycleJob>(); CreateMap<ProductRecycleJobEditInput, ProductRecycleJob>();
CreateMap<ProductRecycleJobDetailInput, ProductRecycleJobDetail>() CreateMap<ProductRecycleJobDetailInput, ProductRecycleJobDetail>()
@ -26,6 +30,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<ProductRecycleJobDetailDTO, ProductRecycleJobDetail>() CreateMap<ProductRecycleJobDetailDTO, ProductRecycleJobDetail>()
; ;
CreateMap<ProductRecycleJobMaterialDetailDto, ProductRecycleJobMaterialDetail>()
;
} }
} }

31
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(); 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<ProductRecycleNoteDetailExtendDto> exportlist=new List<ProductRecycleNoteDetailExtendDto>(); List<ProductRecycleNoteDetailExtendDto> exportlist=new List<ProductRecycleNoteDetailExtendDto>();
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, ItemCode = m_item.ItemCode,
LocCode = itm.LocationCode, LocCode = m_item.LocationCode,
Reason = string.Empty, Reason = String.Join(',', itm.Details.Where(p=>!string.IsNullOrEmpty(p.ReasonCode)).SelectMany(r=>r.ReasonCode)),
Qty = itm.Qty, Qty = m_item.Qty,
Type = "客户退拆" Type = "客户退拆"
}); });
}
} }
return ExportImportService.Export(exportlist);
return ExportImportService.Export(exports);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -222,7 +221,7 @@ public class ProductRecycleNoteAppService :
dto.LocationCode = nabfDetail.LocationCode; dto.LocationCode = nabfDetail.LocationCode;
dto.WorkHour = nabfDetail.WorkHour; dto.WorkHour = nabfDetail.WorkHour;
dto.RawItemCode = nabfDetail.RawItemCode; dto.RawItemCode = nabfDetail.RawItemCode;
dto.RawQty = nabfDetail.Qty; dto.RawQty = nabfDetail.RawQty;
dto.RawLocationCode = nabfDetail.RawLocationCode; dto.RawLocationCode = nabfDetail.RawLocationCode;
result.Add(dto); result.Add(dto);

31
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 System.ComponentModel.DataAnnotations;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Inventory.Domain; using Win_in.Sfs.Wms.Inventory.Domain;
@ -88,6 +89,13 @@ public class ProductRecycleRequestAppService :
await Task.CompletedTask.ConfigureAwait(false); await Task.CompletedTask.ConfigureAwait(false);
throw new NotImplementedException(); 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 东阳 #region 东阳
@ -97,22 +105,21 @@ public class ProductRecycleRequestAppService :
foreach (var productRecycleRequest in addList) foreach (var productRecycleRequest in addList)
{ {
await SetRequestAutoPropertiesAsync(productRecycleRequest) await SetRequestAutoPropertiesAsync(productRecycleRequest).ConfigureAwait(false);
.ConfigureAwait(false);
productRecycleRequest.Worker = CurrentUser.GetUserName(); productRecycleRequest.Worker = CurrentUser.GetUserName();
foreach (var detail in productRecycleRequest.Details) foreach (var detail in productRecycleRequest.Details)
{ {
//var balance = await _balanceAppService.GetByItemLocationAndPackingAsync( var balance = await _balanceAppService.GetByItemLocationAndPackingAsync(
// string.Empty, string.Empty,
// detail.ItemCode, detail.ItemCode,
// detail.LocationCode).ConfigureAwait(false); detail.LocationCode).ConfigureAwait(false);
//if (balance != null) if (balance != null)
//{ {
// detail.Status = balance.Status; detail.Status = balance.Status;
//} }
detail.Status = EnumInventoryStatus.OK; // detail.Status = EnumInventoryStatus.OK;
var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode) var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode)
.ConfigureAwait(false); .ConfigureAwait(false);

1
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); .Ignore(x => x.Remark);
CreateMap<ProductRecycleRequest, ProductRecycleJobEditInput>() CreateMap<ProductRecycleRequest, ProductRecycleJobEditInput>()
.ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.Number))
.ReverseMap(); .ReverseMap();
CreateMap<ProductRecycleRequestDetail, ProductRecycleJobDetailInput>() CreateMap<ProductRecycleRequestDetail, ProductRecycleJobDetailInput>()

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/IProductRecycleJobManager.cs

@ -1,10 +1,12 @@
using System; using System;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Users;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
public interface IProductRecycleJobManager : IJobManager<ProductRecycleJob> public interface IProductRecycleJobManager : IJobManager<ProductRecycleJob>
{ {
Task<ProductRecycleJob> CompleteAsync(ProductRecycleJob entityinput, ProductRecycleJob entity, ICurrentUser user);
Task<ProductRecycleJob> GetAsync(Expression<Func<ProductRecycleJob, bool>> expression); Task<ProductRecycleJob> GetAsync(Expression<Func<ProductRecycleJob, bool>> expression);
} }

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJob.cs

@ -1,8 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Threading.Tasks; using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Wms.Store.Jobs.ProductRecycleJobs;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
@ -12,6 +14,11 @@ namespace Win_in.Sfs.Wms.Store.Domain;
[Display(Name = "产品退拆任务")] [Display(Name = "产品退拆任务")]
public class ProductRecycleJob : SfsJobAggregateRootBase<ProductRecycleJobDetail> public class ProductRecycleJob : SfsJobAggregateRootBase<ProductRecycleJobDetail>
{ {
/// <summary>
/// 退拆请求单号
/// </summary>
[IgnoreUpdate]
public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 车间 /// 车间
/// </summary> /// </summary>
@ -30,6 +37,8 @@ public class ProductRecycleJob : SfsJobAggregateRootBase<ProductRecycleJobDetail
[IgnoreUpdate] [IgnoreUpdate]
public override List<ProductRecycleJobDetail> Details { get; set; } = new List<ProductRecycleJobDetail>(); public override List<ProductRecycleJobDetail> Details { get; set; } = new List<ProductRecycleJobDetail>();
/// <summary> /// <summary>
/// 设置任务明细的实际库位和实际数量 /// 设置任务明细的实际库位和实际数量
/// </summary> /// </summary>

15
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 System.ComponentModel.DataAnnotations;
using Volo.Abp.Data; using Volo.Abp.Data;
using Win_in.Sfs.Shared.Domain.Shared; 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; namespace Win_in.Sfs.Wms.Store.Domain;
@ -71,6 +73,13 @@ public class ProductRecycleJobDetail : SfsJobRecommendToDetailEntityBase
[Column(TypeName = "decimal(18,6)")] [Column(TypeName = "decimal(18,6)")]
public decimal Qty { get; set; } public decimal Qty { get; set; }
/// <summary>
/// 已完成数量
/// </summary>
[Display(Name = "数量")]
[Column(TypeName = "decimal(18,6)")]
public decimal ExecutedQty { get; set; }
/// <summary> /// <summary>
/// 扩展属性 /// 扩展属性
/// </summary> /// </summary>
@ -85,4 +94,10 @@ public class ProductRecycleJobDetail : SfsJobRecommendToDetailEntityBase
/// 仓库代码 /// 仓库代码
/// </summary> /// </summary>
public string WarehouseCode { get; set; } public string WarehouseCode { get; set; }
/// <summary>
/// 子零件明细列表
/// </summary>
[NotMapped]
public List<ProductRecycleJobMaterialDetail> MaterialDetails { get; set; } = new List<ProductRecycleJobMaterialDetail>();
} }

27
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ProductRecycleJobs/ProductRecycleJobManager.cs

@ -57,5 +57,32 @@ public class ProductRecycleJobManager : SfsJobManagerBase<ProductRecycleJob, Pro
{ {
return await Repository.FindAsync(expression).ConfigureAwait(false); return await Repository.FindAsync(expression).ConfigureAwait(false);
} }
public async Task<ProductRecycleJob> 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);
}
} }

45
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
{
/// <summary>
/// 零件代码
/// </summary>
public string ItemCode { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal Qty { get; set; }
/// <summary>
/// 库位代码
/// </summary>
public string LocationCode { get; set; }
/// <summary>
/// 库区
/// </summary>
public string LocationArea { get; set; }
/// <summary>
/// 库位组
/// </summary>
public string LocationGroup { get; set; }
/// <summary>
/// ERP库位代码
/// </summary>
public string LocationErpCode { get; set; }
/// <summary>
/// 仓库代码
/// </summary>
public string WarehouseCode { get; set; }
}

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ProductRecycleNotes/ProductRecycleNote.cs

@ -15,6 +15,11 @@ public class ProductRecycleNote : SfsStoreAggregateRootBase<ProductRecycleNoteDe
/// </summary> /// </summary>
[IgnoreUpdate] [IgnoreUpdate]
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary>
/// 退拆任务单号
/// </summary>
[IgnoreUpdate]
public string JobNumber { get; set; }
/// <summary> /// <summary>
/// 回收时间 /// 回收时间

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ProductRecycleJobs/ProductRecycleJobDbContextModelCreatingExtensions.cs

@ -1,5 +1,6 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.EntityFrameworkCore; using Win_in.Sfs.Shared.EntityFrameworkCore;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
@ -23,6 +24,8 @@ public static class ProductRecycleJobDbContextModelCreatingExtensions
//Properties //Properties
b.Property(q => q.Workshop).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); 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 //Relations
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
//Indexes //Indexes

52
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<ProductRecycleJob, ProductRecycleNoteEditInput>()
.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<ProductRecycleJobDetail, ProductRecycleNoteDetailInput>()
.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<ProductRecycleJobDetail, ExpectOutEditInput>()
.MapExpectInOutTo()
.Ignore(x => x.SerialNumber)
.Ignore(x => x.Worker)
.Ignore(x => x.ExtraProperties)
;
CreateMap<ProductRecycleJobDetail, ExpectInEditInput>()
.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);
}
}

80
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<SfsCreatedEntityEventData<ProductRecycleJob>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<ProductRecycleJob>>>
, ILocalEventHandler<SfsCompletedEntityEventData<ProductRecycleJob>>
, ILocalEventHandler<SfsCancelledEntityEventData<ProductRecycleJob>>
{
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<ProductRecycleJob> eventData)
{
var entity = eventData.Entity;
if (!entity.IsAutoComplete)
{
await AddExpectOutsAsync(new List<ProductRecycleJob>() { entity }).ConfigureAwait(false);
}
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<ProductRecycleJob>> eventData)
{
var entities = eventData.Entity;
foreach (var entity in entities)
{
await AddExpectOutsAsync(new List<ProductRecycleJob>() { entity }).ConfigureAwait(false);
}
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCompletedEntityEventData<ProductRecycleJob> eventData)
{
var entity = eventData.Entity;
await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCancelledEntityEventData<ProductRecycleJob> eventData)
{
var entity = eventData.Entity;
await ExpectOutAppService.RemoveAsync(entity.Number).ConfigureAwait(false);
}
private async Task AddExpectOutsAsync(List<ProductRecycleJob> entities)
{
var expectOuts = new List<ExpectOutEditInput>();
foreach (var entity in entities)
{
var entityExpectOuts = BuildExpectOutInventoryAsync(entity);
expectOuts.AddRange(entityExpectOuts);
}
await ExpectOutAppService.AddManyAsync(expectOuts).ConfigureAwait(false);
}
private List<ExpectOutEditInput> BuildExpectOutInventoryAsync(ProductRecycleJob purchaseReturnJob)
{
var inputs = ObjectMapper.Map<List<ProductRecycleJobDetail>, List<ExpectOutEditInput>>(purchaseReturnJob.Details);
foreach (var input in inputs)
{
input.WarehouseCode = purchaseReturnJob.WarehouseCode;
input.Worker = purchaseReturnJob.Worker;
input.JobNumber = purchaseReturnJob.Number;
}
return inputs;
}
}

129
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<SfsCreatedEntityEventData<ProductRecycleJob>>
, ILocalEventHandler<SfsCompletedEntityEventData<ProductRecycleJob>>
{
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<ProductRecycleJob> 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<ProductRecycleJob> 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<ProductRecycleNoteEditInput> BuildProductRecycleNoteAsync(ProductRecycleJob job)
{
var createInput = ObjectMapper.Map<ProductRecycleJob, ProductRecycleNoteEditInput>(job);
createInput.MaterialDetails = await BuildMaterialDetailsAsync(job).ConfigureAwait(false);
return createInput;
}
private async Task<List<ProductRecycleMaterialDetailInput>> BuildMaterialDetailsAsync(ProductRecycleJob request)
{
var materialDetailInputs = new List<ProductRecycleMaterialDetailInput>();
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;
}
}

75
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionRecycleJobEventHandler.cs

@ -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<SfsCreatedEntityEventData<ProductRecycleJob>>
, ILocalEventHandler<SfsCompletedEntityEventData<ProductRecycleJob>>
{
private readonly IProductRecycleNoteAppService _productRecycleNoteAppService;
public ProductionRecycleJobEventHandler(
IProductRecycleNoteAppService productRecycleNoteAppService
)
{
_productRecycleNoteAppService = productRecycleNoteAppService;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<ProductRecycleJob> 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<ProductRecycleJob> eventData)
{
var entity = eventData.Entity;
var productRecycleNote = BuildProductionReturnNote(entity);
await _productRecycleNoteAppService.CreateAsync(productRecycleNote).ConfigureAwait(false);
}
private ProductRecycleNoteEditInput BuildProductionReturnNote(ProductRecycleJob entity)
{
var input = ObjectMapper.Map<ProductRecycleJob, ProductRecycleNoteEditInput>(entity);
input.Details = new List<ProductRecycleNoteDetailInput>();
foreach (var detail in entity.Details.Where(detail => detail.HandledQty != 0))
{
var inputDetail = ObjectMapper.Map<ProductRecycleJobDetail, ProductRecycleNoteDetailInput>(detail);
input.Details.Add(inputDetail);
}
return input;
}
}

11
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; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest;
using System.Runtime.InteropServices;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
public class ProductReceiptNoteEventHandler public class ProductReceiptNoteEventHandler
@ -22,14 +23,18 @@ public class ProductReceiptNoteEventHandler
//private readonly IProductReceiptRequestAppService _productReceiptRequestApp; //private readonly IProductReceiptRequestAppService _productReceiptRequestApp;
private readonly IProductReceiptRequestManager _productReceiptRequestManager; private readonly IProductReceiptRequestManager _productReceiptRequestManager;
private readonly IDeliverRequestAppService _deliverRequestAppService;
public ProductReceiptNoteEventHandler( public ProductReceiptNoteEventHandler(
IPutawayJobAppService putawayJobAppService IPutawayJobAppService putawayJobAppService
//, IProductReceiptRequestAppService productReceiptRequestApp //, IProductReceiptRequestAppService productReceiptRequestApp
, IProductReceiptRequestManager productReceiptRequestManager) , IProductReceiptRequestManager productReceiptRequestManager,
IDeliverRequestAppService deliverRequestAppService)
{ {
_putawayJobAppService = putawayJobAppService; _putawayJobAppService = putawayJobAppService;
//_productReceiptRequestApp = productReceiptRequestApp; //_productReceiptRequestApp = productReceiptRequestApp;
_productReceiptRequestManager = productReceiptRequestManager; _productReceiptRequestManager = productReceiptRequestManager;
_deliverRequestAppService = deliverRequestAppService;
} }
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<ProductReceiptNote> eventData) public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<ProductReceiptNote> eventData)
@ -95,6 +100,8 @@ public class ProductReceiptNoteEventHandler
public virtual async Task HandleEventAsync(SfsHandledEntityEventData<ProductReceiptNote> eventData) public virtual async Task HandleEventAsync(SfsHandledEntityEventData<ProductReceiptNote> eventData)
{ {
throw new System.NotImplementedException(); var productReceiptNote = eventData.Entity;
var input = ObjectMapper.Map<ProductReceiptNote, DeliverRequestEditInput>(productReceiptNote);
await _deliverRequestAppService.CreateAsync(input).ConfigureAwait(false);
} }
} }

22
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductRecycleRequestEventHandler.cs

@ -74,8 +74,6 @@ public class ProductRecycleRequestEventHandler
var entitys = eventData.Entity; var entitys = eventData.Entity;
foreach (var entity in entitys) foreach (var entity in entitys)
{ {
entity.AutoAgree = true;
entity.DirectCreateNote = false;
if (entity.AutoSubmit) if (entity.AutoSubmit)
{ {
await _productRecycleRequestManager.SubmitAsync(entity).ConfigureAwait(false); await _productRecycleRequestManager.SubmitAsync(entity).ConfigureAwait(false);
@ -158,16 +156,16 @@ public class ProductRecycleRequestEventHandler
ProductRecycleRequestDetail productRecycleRequestDetail, TransactionTypeDTO transactionType) ProductRecycleRequestDetail productRecycleRequestDetail, TransactionTypeDTO transactionType)
{ {
var jobDetails = new List<ProductRecycleJobDetailInput>(); var jobDetails = new List<ProductRecycleJobDetailInput>();
//var input = new RecommendBalanceRequestInput() var input = new RecommendBalanceRequestInput()
//{ {
// ItemCode = productRecycleRequestDetail.ItemCode, ItemCode = productRecycleRequestDetail.ItemCode,
// Qty = productRecycleRequestDetail.Qty, Qty = productRecycleRequestDetail.Qty,
// LocationTypes = transactionType.OutLocationTypes, LocationTypes = transactionType.OutLocationTypes,
// LocationAreas = new List<string> { productRecycleRequestDetail.LocationArea }, LocationAreas = new List<string> { productRecycleRequestDetail.LocationArea },
// Statuses = transactionType.OutInventoryStatuses, Statuses = transactionType.OutInventoryStatuses,
//}; };
//获取推荐库存 //获取推荐库存
var recommendList = await _balanceAppService.GetListByItemCodeAsync(productRecycleRequestDetail.ItemCode).ConfigureAwait(false); var recommendList = await _balanceAppService.GetRecommendBalancesAsync(input).ConfigureAwait(false);
//没有推荐库存时 跳过此明细 不生成任务 //没有推荐库存时 跳过此明细 不生成任务
if (recommendList.Count != 0) if (recommendList.Count != 0)
{ {
@ -193,6 +191,8 @@ public class ProductRecycleRequestEventHandler
detail.RecommendToLocationErpCode = balance.LocationErpCode; detail.RecommendToLocationErpCode = balance.LocationErpCode;
detail.RecommendToLocationCode = balance.LocationCode; detail.RecommendToLocationCode = balance.LocationCode;
detail.RecommendToLocationGroup = balance.LocationGroup;
detail.RecommendToLocationArea= balance.LocationArea;
detail.RecommendPackingCode = balance.PackingCode; detail.RecommendPackingCode = balance.PackingCode;
detail.RecommendContainerCode = balance.ContainerCode; detail.RecommendContainerCode = balance.ContainerCode;
detail.RecommendSupplierBatch = balance.SupplierBatch; detail.RecommendSupplierBatch = balance.SupplierBatch;

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs

@ -39,6 +39,7 @@ public partial class StoreEventAutoMapperProfile : Profile
ProductionReturnJobAutoMapperProfile(); ProductionReturnJobAutoMapperProfile();
ProductReceiveJobAutoMapperProfile(); ProductReceiveJobAutoMapperProfile();
PurchaseReceiptJobAutoMapperProfile(); PurchaseReceiptJobAutoMapperProfile();
ProductRecycleJobAutoMapperProfile();
PurchaseReturnJobAutoMapperProfile(); PurchaseReturnJobAutoMapperProfile();
PutawayJobAutoMapperProfile(); PutawayJobAutoMapperProfile();
UnplannedIssueJobAutoMapperProfile(); UnplannedIssueJobAutoMapperProfile();

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ProductRecycleNoteEventHandler.cs

@ -32,9 +32,9 @@ public class ProductRecycleNoteEventHandler
var entity = eventData.Entity; var entity = eventData.Entity;
await AddTransactionsOfProductAsync(entity).ConfigureAwait(false); 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); 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);
} }
} }

Loading…
Cancel
Save