Browse Source

线边仓调整

集成Redis
郑渤旭[Irelia] 2 years ago
parent
commit
ad991b59a5
  1. 153
      be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql
  2. 3
      be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs
  3. 41
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDTO.cs
  4. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDetailDTO.cs
  5. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/IWipWarehouseAdjustNoteAppService.cs
  6. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteDetailInput.cs
  7. 48
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteEditInput.cs
  8. 71
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteImportInput.cs
  9. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNotePermissions.cs
  10. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs
  11. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDTO.cs
  12. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDetailDTO.cs
  13. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestAppService.cs
  14. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestDetailInput.cs
  15. 26
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestEditInput.cs
  16. 54
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestImportInput.cs
  17. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestPermissions.cs
  18. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Win_in.Sfs.Wms.Store.Application.Contracts.csproj
  19. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs
  20. 136
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteAppService.cs
  21. 88
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteAutoMapperProfile.cs
  22. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs
  23. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/SupplierAsns/SupplierAsnAppService.cs
  24. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs
  25. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs
  26. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs
  27. 148
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestAppService.cs
  28. 77
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestAutoMapperProfile.cs
  29. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs
  30. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Win_in.Sfs.Wms.Store.Application.csproj
  31. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/IWipWarehouseAdjustNoteManager.cs
  32. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/IWipWarehouseAdjustNoteRepository.cs
  33. 65
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/WipWarehouseAdjustNote.cs
  34. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/WipWarehouseAdjustNoteDetail.cs
  35. 118
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/WipWarehouseAdjustNoteManager.cs
  36. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestManager.cs
  37. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestRepository.cs
  38. 25
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequest.cs
  39. 30
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestDetail.cs
  40. 80
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestManager.cs
  41. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs
  42. 52
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteDbContextModelCreatingExtensions.cs
  43. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteEfCoreRepository.cs
  44. 52
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestDbContextModelCreatingExtensions.cs
  45. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestEfCoreRepository.cs
  46. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs
  47. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContextModelCreatingExtensions.cs
  48. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs
  49. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/TransferNoteAutoMapperProfile.cs
  50. 26
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/WipWarehouseAdjustNoteAutoMapperProfile.cs
  51. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/WipWarehouseAdjustRequestAutoMapperProfile.cs
  52. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionReturnJobEventHandler.cs
  53. 95
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/WipWarehouseAdjustRequestEventHandler.cs
  54. 40
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/StoreEventAutoMapperProfile.cs
  55. 128
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/WipWarehouseAdjustNoteEventHandler.cs

153
be/Hosts/Wms.Host/Win_in.Sfs.Wms.Store.HttpApi.Host/scripts/db.Microsoft.EntityFrameworkCore.SqlServer.StoreDbContext.sql

@ -1863,6 +1863,52 @@ CREATE TABLE [Store_WarehouseTransferNote] (
) )
CREATE TABLE [Store_WipWarehouseAdjustNote] (
[Id] uniqueidentifier NOT NULL,
[Type] nvarchar(64) NULL,
[RequestNumber] nvarchar(max) NULL,
[JobNumber] nvarchar(64) NULL,
[Confirmed] bit NOT NULL,
[ConfirmTime] datetime2 NULL,
[ExtraProperties] nvarchar(max) NULL,
[ConcurrencyStamp] nvarchar(40) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[TenantId] uniqueidentifier NULL,
[Remark] nvarchar(3072) NULL,
[Worker] nvarchar(max) NULL,
[Number] nvarchar(64) NOT NULL,
[ActiveDate] datetime2 NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustNote] PRIMARY KEY ([Id])
)
CREATE TABLE [Store_WipWarehouseAdjustRequest] (
[Id] uniqueidentifier NOT NULL,
[Type] nvarchar(64) NULL,
[ExtraProperties] nvarchar(max) NULL,
[ConcurrencyStamp] nvarchar(40) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[TenantId] uniqueidentifier NULL,
[Remark] nvarchar(3072) NULL,
[Worker] nvarchar(max) NULL,
[Number] nvarchar(64) NOT NULL,
[ActiveDate] datetime2 NOT NULL,
[AutoSubmit] bit NOT NULL,
[AutoAgree] bit NOT NULL,
[AutoHandle] bit NOT NULL,
[AutoCompleteJob] bit NOT NULL,
[DirectCreateNote] bit NOT NULL,
[RequestStatus] nvarchar(64) NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustRequest] PRIMARY KEY ([Id])
)
CREATE TABLE [Store_WorkOrder] ( CREATE TABLE [Store_WorkOrder] (
[Id] uniqueidentifier NOT NULL, [Id] uniqueidentifier NOT NULL,
[WorkOrderId] nvarchar(64) NULL, [WorkOrderId] nvarchar(64) NULL,
@ -5069,6 +5115,98 @@ CREATE TABLE [Store_WarehouseTransferNoteDetail] (
) )
CREATE TABLE [Store_WipWarehouseAdjustNoteDetail] (
[Id] uniqueidentifier NOT NULL,
[Reason] nvarchar(64) NULL,
[ReasonCode] nvarchar(max) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[MasterID] uniqueidentifier NOT NULL,
[TenantId] uniqueidentifier NULL,
[Number] nvarchar(64) NOT NULL,
[Remark] nvarchar(3072) NULL,
[ItemName] nvarchar(64) NULL,
[ItemDesc1] nvarchar(64) NULL,
[ItemDesc2] nvarchar(64) NULL,
[ItemCode] nvarchar(64) NOT NULL,
[Uom] nvarchar(64) NOT NULL,
[Qty] decimal(18,6) NOT NULL,
[StdPackQty] decimal(18,6) NOT NULL,
[FromPackingCode] nvarchar(450) NULL,
[ToPackingCode] nvarchar(max) NULL,
[FromContainerCode] nvarchar(max) NULL,
[ToContainerCode] nvarchar(max) NULL,
[FromLot] nvarchar(max) NULL,
[ToLot] nvarchar(max) NULL,
[SupplierBatch] nvarchar(64) NULL,
[ArriveDate] datetime2 NOT NULL,
[ProduceDate] datetime2 NOT NULL,
[ExpireDate] datetime2 NOT NULL,
[FromLocationCode] nvarchar(64) NOT NULL,
[FromLocationArea] nvarchar(64) NULL,
[FromLocationGroup] nvarchar(64) NULL,
[FromLocationErpCode] nvarchar(64) NOT NULL,
[FromWarehouseCode] nvarchar(64) NOT NULL,
[FromStatus] nvarchar(64) NOT NULL,
[ToLocationCode] nvarchar(64) NOT NULL,
[ToLocationArea] nvarchar(64) NULL,
[ToLocationGroup] nvarchar(64) NULL,
[ToLocationErpCode] nvarchar(64) NOT NULL,
[ToWarehouseCode] nvarchar(64) NOT NULL,
[ToStatus] nvarchar(64) NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustNoteDetail] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Store_WipWarehouseAdjustNoteDetail_Store_WipWarehouseAdjustNote_MasterID] FOREIGN KEY ([MasterID]) REFERENCES [Store_WipWarehouseAdjustNote] ([Id]) ON DELETE CASCADE
)
CREATE TABLE [Store_WipWarehouseAdjustRequestDetail] (
[Id] uniqueidentifier NOT NULL,
[Reason] nvarchar(max) NULL,
[ReasonCode] nvarchar(max) NULL,
[CreationTime] datetime2 NOT NULL,
[CreatorId] uniqueidentifier NULL,
[LastModificationTime] datetime2 NULL,
[LastModifierId] uniqueidentifier NULL,
[MasterID] uniqueidentifier NOT NULL,
[TenantId] uniqueidentifier NULL,
[Number] nvarchar(64) NOT NULL,
[Remark] nvarchar(3072) NULL,
[ItemName] nvarchar(64) NULL,
[ItemDesc1] nvarchar(64) NULL,
[ItemDesc2] nvarchar(64) NULL,
[ItemCode] nvarchar(64) NOT NULL,
[Uom] nvarchar(64) NOT NULL,
[Qty] decimal(18,6) NOT NULL,
[StdPackQty] decimal(18,6) NOT NULL,
[FromPackingCode] nvarchar(max) NULL,
[ToPackingCode] nvarchar(max) NULL,
[FromContainerCode] nvarchar(max) NULL,
[ToContainerCode] nvarchar(max) NULL,
[FromLot] nvarchar(max) NULL,
[ToLot] nvarchar(max) NULL,
[SupplierBatch] nvarchar(64) NULL,
[ArriveDate] datetime2 NOT NULL,
[ProduceDate] datetime2 NOT NULL,
[ExpireDate] datetime2 NOT NULL,
[FromLocationCode] nvarchar(64) NOT NULL,
[FromLocationArea] nvarchar(64) NULL,
[FromLocationGroup] nvarchar(64) NULL,
[FromLocationErpCode] nvarchar(64) NOT NULL,
[FromWarehouseCode] nvarchar(64) NOT NULL,
[FromStatus] nvarchar(64) NOT NULL,
[ToLocationCode] nvarchar(64) NOT NULL,
[ToLocationArea] nvarchar(64) NULL,
[ToLocationGroup] nvarchar(64) NULL,
[ToLocationErpCode] nvarchar(64) NOT NULL,
[ToWarehouseCode] nvarchar(64) NOT NULL,
[ToStatus] nvarchar(64) NOT NULL,
CONSTRAINT [PK_Store_WipWarehouseAdjustRequestDetail] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Store_WipWarehouseAdjustRequestDetail_Store_WipWarehouseAdjustRequest_MasterID] FOREIGN KEY ([MasterID]) REFERENCES [Store_WipWarehouseAdjustRequest] ([Id]) ON DELETE CASCADE
)
CREATE TABLE [Store_WorkOrderDetail] ( CREATE TABLE [Store_WorkOrderDetail] (
[Id] uniqueidentifier NOT NULL, [Id] uniqueidentifier NOT NULL,
[EffectiveDate] datetime2 NOT NULL, [EffectiveDate] datetime2 NOT NULL,
@ -5699,6 +5837,21 @@ CREATE INDEX [IX_Store_WarehouseTransferNoteDetail_MasterID] ON [Store_Warehouse
CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode] ON [Store_WarehouseTransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode]) WHERE [FromPackingCode] IS NOT NULL CREATE UNIQUE INDEX [IX_Store_WarehouseTransferNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode] ON [Store_WarehouseTransferNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode]) WHERE [FromPackingCode] IS NOT NULL
CREATE UNIQUE INDEX [IX_Store_WipWarehouseAdjustNote_Number] ON [Store_WipWarehouseAdjustNote] ([Number])
CREATE INDEX [IX_Store_WipWarehouseAdjustNoteDetail_MasterID] ON [Store_WipWarehouseAdjustNoteDetail] ([MasterID])
CREATE UNIQUE INDEX [IX_Store_WipWarehouseAdjustNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode_FromStatus_ToStatus] ON [Store_WipWarehouseAdjustNoteDetail] ([Number], [FromPackingCode], [FromLocationCode], [ToLocationCode], [FromStatus], [ToStatus]) WHERE [FromPackingCode] IS NOT NULL
CREATE UNIQUE INDEX [IX_Store_WipWarehouseAdjustRequest_Number] ON [Store_WipWarehouseAdjustRequest] ([Number])
CREATE INDEX [IX_Store_WipWarehouseAdjustRequestDetail_MasterID] ON [Store_WipWarehouseAdjustRequestDetail] ([MasterID])
CREATE UNIQUE INDEX [IX_Store_WorkOrder_Number] ON [Store_WorkOrder] ([Number]) CREATE UNIQUE INDEX [IX_Store_WorkOrder_Number] ON [Store_WorkOrder] ([Number])

3
be/Modules/Shared/src/Win_in.Sfs.Shared.Application/SfsCrudWithDetailsAppServiceBase.cs

@ -558,7 +558,7 @@ public abstract class SfsCrudWithDetailsAppServiceBase<TEntity, TEntityDto, TReq
if (entityDict.Any()) if (entityDict.Any())
{ {
//加工数据 //加工数据
entityDict=await ImportProcessingEntityAsync(entityDict); entityDict=await ImportProcessingEntityAsync(entityDict).ConfigureAwait(false);
// 调用批量验证 // 调用批量验证
var entityListStatus = await ValidateImportEntities(entityDict).ConfigureAwait(false); var entityListStatus = await ValidateImportEntities(entityDict).ConfigureAwait(false);
@ -655,6 +655,7 @@ public abstract class SfsCrudWithDetailsAppServiceBase<TEntity, TEntityDto, TReq
/// <returns></returns> /// <returns></returns>
protected virtual async Task<Dictionary<TEntity, EntityState>> ImportProcessingEntityAsync(Dictionary<TEntity, EntityState> dictionary) protected virtual async Task<Dictionary<TEntity, EntityState>> ImportProcessingEntityAsync(Dictionary<TEntity, EntityState> dictionary)
{ {
await Task.CompletedTask.ConfigureAwait(false);
return dictionary; return dictionary;
} }

41
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDTO.cs

@ -0,0 +1,41 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整-实体DTO
/// </summary>
public class WipWarehouseAdjustNoteDTO : SfsStoreDTOBase<WipWarehouseAdjustNoteDetailDTO>, IHasNumber
{
/// <summary>
/// 线边仓调整申请单号
/// </summary>
[Display(Name = "线边仓调整申请单号")]
public string RequestNumber { get; set; }
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 调整类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
/// <summary>
/// 已确认
/// </summary>
[Display(Name = "已确认")]
public bool Confirmed { get; set; }
/// <summary>
/// 确认时间
/// </summary>
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/DTOs/WipWarehouseAdjustNoteDetailDTO.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整记录-明细表
/// </summary>
public class WipWarehouseAdjustNoteDetailDTO : SfsStoreDetailWithFromToDTOBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

17
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/IWipWarehouseAdjustNoteAppService.cs

@ -0,0 +1,17 @@
using System;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IWipWarehouseAdjustNoteAppService :
ISfsStoreMasterReadOnlyAppServiceBase<WipWarehouseAdjustNoteDTO, SfsStoreRequestInputBase,
WipWarehouseAdjustNoteDetailDTO, SfsStoreRequestInputBase>
{
Task<WipWarehouseAdjustNoteDTO> ConfirmAsync(Guid id);
/// <summary>
/// 新增实体
/// </summary>
/// <param name="input">CreateInput</param>
Task<WipWarehouseAdjustNoteDTO> CreateAsync(WipWarehouseAdjustNoteEditInput input);
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteDetailInput.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边仓调整-明细表DTO
/// </summary>
public class WipWarehouseAdjustNoteDetailInput : SfsStoreDetailWithFromToInputBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

48
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteEditInput.cs

@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 新增和更新基础DTO
/// </summary>
public class WipWarehouseAdjustNoteEditInput : SfsStoreCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 已确认
/// </summary>
[Display(Name = "已确认")]
public bool Confirmed { get; set; }
#endregion
#region Update
/// <summary>
/// 确认时间
/// </summary>
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
#endregion
/// <summary>
/// 线边仓调整申请单号
/// </summary>
[Display(Name = "线边仓调整申请单号")]
public string RequestNumber { get; set; }
/// <summary>
/// 任务ID
/// </summary>
[Display(Name = "任务ID")]
public string JobNumber { get; set; }
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
[Display(Name = "详情")]
public List<WipWarehouseAdjustNoteDetailInput> Details { get; set; } = new List<WipWarehouseAdjustNoteDetailInput>();
}

71
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/Inputs/WipWarehouseAdjustNoteImportInput.cs

@ -0,0 +1,71 @@
using System;
using System.ComponentModel.DataAnnotations;
using DocumentFormat.OpenXml.Drawing;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class WipWarehouseAdjustNoteImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调拨类型")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "调拨类型")]
[ExporterHeader(DisplayName = "调拨类型")]
[ValueMapping("区域内调拨(储位内移库)", EnumTransSubType.Transfer_Inside)]
public string Type { get; set; }
/// <summary>
/// 已确认
/// </summary>
[Display(Name = "已确认")]
[ImporterHeader(IsIgnore = true)]
[Required(ErrorMessage = "{0}是必填项")]
public bool Confirmed { get; set; }
/// <summary>
/// 物料号
/// </summary>
[Display(Name = "物料号")]
[Required(ErrorMessage = "{0}是必填项")]
public string ItemCode { get; set; }
/// <summary>
/// 调拨数量
/// </summary>
[Display(Name = "调拨数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { get; set; }
/// <summary>
/// 调出库位
/// </summary>
[Display(Name = "调出库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string FromLocationCode { get; set; }
/// <summary>
/// 调入库位
/// </summary>
[Display(Name = "调入库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string ToLocationCode { get; set; }
/// <summary>
/// 箱码
/// </summary>
[Display(Name = "箱码")]
[Required(ErrorMessage = "{0}是必填项")]
public string PackingCode { get; set; }
/// <summary>
/// 状态
/// </summary>
[Display(Name = "状态")]
[Required(ErrorMessage = "{0}是必填项")]
public EnumInventoryStatus Status { get; set; }
}

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNotePermissions.cs

@ -0,0 +1,21 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class WipWarehouseAdjustNotePermissions
{
public const string Default = StorePermissions.GroupName + "." + nameof(WipWarehouseAdjustNote);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
public static void AddWipWarehouseAdjustNotePermission(this PermissionGroupDefinition permissionGroup)
{
var WipWarehouseAdjustNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(WipWarehouseAdjustNote)));
WipWarehouseAdjustNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
WipWarehouseAdjustNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
WipWarehouseAdjustNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Permissions/StorePermissionDefinitionProvider.cs

@ -79,6 +79,9 @@ public class StorePermissionDefinitionProvider : PermissionDefinitionProvider
storeGroup.AddReportPermission(); storeGroup.AddReportPermission();
storeGroup.AddDashboardPermission(); storeGroup.AddDashboardPermission();
storeGroup.AddWipWarehouseAdjustRequestPermission();
storeGroup.AddWipWarehouseAdjustNotePermission();
#region Jobs #region Jobs
storeGroup.AddPurchaseReceiptJobPermission(); storeGroup.AddPurchaseReceiptJobPermission();

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDTO.cs

@ -0,0 +1,15 @@
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整-实体DTO
/// </summary>
public class WipWarehouseAdjustRequestDTO : SfsStoreRequestDTOBase<WipWarehouseAdjustRequestDetailDTO>, IHasNumber
{
/// <summary>
/// 调整类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/DTOs/WipWarehouseAdjustRequestDetailDTO.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 线边调整-明细表
/// </summary>
public class WipWarehouseAdjustRequestDetailDTO : SfsStoreDetailWithFromToDTOBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestAppService.cs

@ -0,0 +1,7 @@
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IWipWarehouseAdjustRequestAppService
: ISfsStoreRequestMasterAppServiceBase<WipWarehouseAdjustRequestDTO, SfsStoreRequestInputBase,
WipWarehouseAdjustRequestEditInput, WipWarehouseAdjustRequestDetailDTO, SfsStoreRequestInputBase>
{
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestDetailInput.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 库存转移记录-明细表
/// </summary>
public class WipWarehouseAdjustRequestDetailInput : SfsStoreDetailWithFromToInputBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

26
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestEditInput.cs

@ -0,0 +1,26 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
/// <summary>
/// 新增和更新基础DTO
/// </summary>
public class WipWarehouseAdjustRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<WipWarehouseAdjustRequestDetailInput> Details { get; set; }
#endregion
}

54
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/Inputs/WipWarehouseAdjustRequestImportInput.cs

@ -0,0 +1,54 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class WipWarehouseAdjustRequestImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 调整类型
/// </summary>
[Display(Name = "调整类型")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "调整类型")]
[ExporterHeader(DisplayName = "调整类型")]
[ValueMapping("线边仓调整", EnumTransSubType.CountAdjust_WIP)]
public string Type { get; set; }
/// <summary>
/// 物品编号
/// </summary>
[Display(Name = "物料号")]
[Required(ErrorMessage = "{0}是必填项")]
public string ItemCode { get; set; }
/// <summary>
/// 调整数量
/// </summary>
[Display(Name = "调拨数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { get; set; }
/// <summary>
/// 调整库位
/// </summary>
[Display(Name = "调整库位")]
[Required(ErrorMessage = "{0}是必填项")]
public string FromLocationCode { get; set; }
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestPermissions.cs

@ -0,0 +1,24 @@
using Volo.Abp.Authorization.Permissions;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public static class WipWarehouseAdjustRequestPermissions
{
public const string Default = StorePermissions.GroupName + "." + nameof(WipWarehouseAdjustRequest);
public const string Create = Default + "." + StorePermissions.CreateStr;
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
public static void AddWipWarehouseAdjustRequestPermission(this PermissionGroupDefinition permissionGroup)
{
var WipWarehouseAdjustRequestPermission = permissionGroup.AddPermission(Default,
StorePermissionDefinitionProvider.L(nameof(WipWarehouseAdjustRequest)));
WipWarehouseAdjustRequestPermission.AddChild(Create,
StorePermissionDefinitionProvider.L(StorePermissions.CreateStr));
WipWarehouseAdjustRequestPermission.AddChild(Update,
StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr));
WipWarehouseAdjustRequestPermission.AddChild(Delete,
StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr));
}
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Win_in.Sfs.Wms.Store.Application.Contracts.csproj

@ -42,10 +42,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Notes" />
<Folder Include="Orders" /> <Folder Include="Orders" />
<Folder Include="Plans" /> <Folder Include="Plans" />
<Folder Include="Requests" />
</ItemGroup> </ItemGroup>
</Project> </Project>

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/PurchaseReceiptJobs/PurchaseReceiptJobAppService.cs

@ -173,7 +173,6 @@ public class PurchaseReceiptJobAppService :
/// 按Id获取实体 不走缓存 /// 按Id获取实体 不走缓存
/// </summary> /// </summary>
/// <param name="id">实体Id</param> /// <param name="id">实体Id</param>
/// <param name="noCache"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("no-cache/{id}")] [HttpGet("no-cache/{id}")]
public virtual async Task<PurchaseReceiptJobDTO> GetNoCacheAsync(Guid id) public virtual async Task<PurchaseReceiptJobDTO> GetNoCacheAsync(Guid id)

136
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteAppService.cs

@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
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;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 线边调整记录
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}wip-warehouse-adjust-note")]
public class WipWarehouseAdjustNoteAppService : SfsStoreWithDetailsAppServiceBase
<WipWarehouseAdjustNote, WipWarehouseAdjustNoteDTO, SfsStoreRequestInputBase, WipWarehouseAdjustNoteEditInput, WipWarehouseAdjustNoteDetail,
WipWarehouseAdjustNoteDetailDTO, SfsStoreRequestInputBase, WipWarehouseAdjustNoteImportInput>,
IWipWarehouseAdjustNoteAppService
{
private readonly IWipWarehouseAdjustNoteManager _WipWarehouseAdjustNoteManager;
private readonly IBalanceAppService _balanceAppService;
private readonly ILocationAppService _locationAppService;
public WipWarehouseAdjustNoteAppService(
IWipWarehouseAdjustNoteRepository repository,
IWipWarehouseAdjustNoteManager WipWarehouseAdjustNoteManager,
IBalanceAppService balanceAppService,
ILocationAppService locationAppService) : base(repository)
{
_WipWarehouseAdjustNoteManager = WipWarehouseAdjustNoteManager;
_balanceAppService = balanceAppService;
_locationAppService = locationAppService;
}
#region 东阳使用
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<WipWarehouseAdjustNote, EntityState>> ImportProcessingEntityAsync(
Dictionary<WipWarehouseAdjustNote, EntityState> dictionary)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var WipWarehouseAdjustNote in addList)
{
if (WipWarehouseAdjustNote.Type == EnumTransSubType.Transfer_Inside.GetDisplayName()) //储位内调拨
{
WipWarehouseAdjustNote.Type = EnumTransSubType.Transfer_Inside.ToString();//重点 需要转换
foreach (var detail in WipWarehouseAdjustNote.Details)
{
var balanceDto = await _balanceAppService.GetByItemLocationAndPackingAsync(detail.FromPackingCode,
detail.ItemCode, detail.FromLocationCode).ConfigureAwait(false);
var toLocationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
detail.ItemCode = balanceDto.ItemCode;
detail.ArriveDate = balanceDto.ArriveDate;
detail.ItemDesc1 = balanceDto.ItemDesc1;
detail.ItemDesc2 = balanceDto.ItemDesc2;
detail.ItemName = balanceDto.ItemName;
detail.ProduceDate = balanceDto.ProduceDate;
detail.Qty = balanceDto.Qty;
detail.Uom = balanceDto.Uom;
detail.ExpireDate = balanceDto.ExpireDate;
detail.StdPackQty = balanceDto.StdPackQty;
detail.SupplierBatch = balanceDto.SupplierBatch;
detail.FromLocationArea = balanceDto.LocationArea;
detail.FromContainerCode = balanceDto.ContainerCode;
detail.FromLocationErpCode = balanceDto.LocationErpCode;
detail.FromLocationGroup = balanceDto.LocationGroup;
detail.FromPackingCode = balanceDto.PackingCode;
detail.FromLocationArea = balanceDto.LocationArea;
detail.FromStatus = balanceDto.Status;
detail.FromWarehouseCode = balanceDto.WarehouseCode;
detail.FromLot = balanceDto.Lot;
detail.ToLocationArea = toLocationDto.AreaCode;
detail.ToLocationErpCode = toLocationDto.LocationGroupCode;
detail.ToLocationGroup = toLocationDto.LocationGroupCode;
detail.ToWarehouseCode = toLocationDto.WarehouseCode;
detail.ToContainerCode = balanceDto.ContainerCode;
detail.ToPackingCode = balanceDto.PackingCode;
detail.ToLocationArea = balanceDto.LocationArea;
detail.ToStatus = balanceDto.Status;
detail.ToLot = balanceDto.Lot;
}
}
}
return dictionary;
}
/// <summary>
/// 确认对应的记录单
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("confirm/{id}")]
public virtual async Task<WipWarehouseAdjustNoteDTO> ConfirmAsync(Guid id)
{
var entity = await _WipWarehouseAdjustNoteManager.ConfirmAsync(id).ConfigureAwait(false);
var dto = ObjectMapper.Map<WipWarehouseAdjustNote, WipWarehouseAdjustNoteDTO>(entity);
return dto;
}
/// <summary>
/// 新增实体
/// </summary>
/// <param name="input">CreateInput</param>
[HttpPost("")]
public override async Task<WipWarehouseAdjustNoteDTO> CreateAsync(WipWarehouseAdjustNoteEditInput input)
{
var entity = ObjectMapper.Map<WipWarehouseAdjustNoteEditInput, WipWarehouseAdjustNote>(input);
entity=await _WipWarehouseAdjustNoteManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<WipWarehouseAdjustNote, WipWarehouseAdjustNoteDTO>(entity);
return dto;
}
#endregion
}

88
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteAutoMapperProfile.cs

@ -0,0 +1,88 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application;
public partial class StoreApplicationAutoMapperProfile : Profile
{
private void WipWarehouseAdjustNoteMapperProfile()
{
CreateMap<WipWarehouseAdjustNote, WipWarehouseAdjustNoteDTO>()
.ReverseMap();
CreateMap<WipWarehouseAdjustNoteEditInput, WipWarehouseAdjustNote>()
.IgnoreAuditedObjectProperties()
;
CreateMap<WipWarehouseAdjustNoteDetailInput, WipWarehouseAdjustNoteDetail>()
.IgnoreAuditedObjectProperties()
;
CreateMap<WipWarehouseAdjustNoteDetailDTO, WipWarehouseAdjustNoteDetail>();
CreateMap<WipWarehouseAdjustNoteDetail, WipWarehouseAdjustNoteDetailDTO>();
CreateMap<WipWarehouseAdjustNoteEditInput, WipWarehouseAdjustNote>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.Id)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.Remark)
.Ignore(x => x.TenantId)
.Ignore(x => x.ConcurrencyStamp)
;
CreateMap<WipWarehouseAdjustNoteDetailInput, WipWarehouseAdjustNoteDetail>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.MasterID)
.Ignore(x => x.TenantId)
.Ignore(x => x.Number)
.Ignore(x => x.Id);
CreateMap<WipWarehouseAdjustNoteImportInput, WipWarehouseAdjustNote>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.ConfirmTime)
.Ignore(x => x.RequestNumber)
.Ignore(x => x.JobNumber)
.Ignore(x => x.ActiveDate)
.Ignore(x => x.Remark)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
.Ignore(x => x.Details)
.Ignore(x => x.TenantId)
.Ignore(x => x.Number)
.Ignore(x => x.Id);
CreateMap<WipWarehouseAdjustNoteImportInput, WipWarehouseAdjustNoteDetail>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.ToPackingCode, y => y.MapFrom(d => d.PackingCode))
.ForMember(x => x.FromPackingCode, y => y.MapFrom(d => d.PackingCode))
.ForMember(x => x.FromStatus, y => y.MapFrom(d => d.Status))
.ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status))
.Ignore(x => x.FromLocationGroup)
.Ignore(x => x.FromLocationArea)
.Ignore(x => x.FromLocationErpCode)
.Ignore(x => x.FromWarehouseCode)
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ToLocationErpCode)
.Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.Reason)
.Ignore(x => x.SupplierBatch).Ignore(x => x.ArriveDate).Ignore(x => x.ProduceDate).Ignore(x => x.ExpireDate)
.Ignore(x => x.Remark)
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2)
.Ignore(x => x.FromContainerCode)
.Ignore(x => x.ToContainerCode)
.Ignore(x => x.FromLot)
.Ignore(x => x.ToLot)
.Ignore(x => x.StdPackQty)
.Ignore(x => x.Uom)
.Ignore(x => x.MasterID)
.Ignore(x => x.TenantId)
.Ignore(x => x.Number)
.Ignore(x => x.Id);
}
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs

@ -26,7 +26,6 @@ public class PurchaseOrderAppService :
private readonly IPurchaseOrderManager _purchaseOrderManager; private readonly IPurchaseOrderManager _purchaseOrderManager;
private readonly ISupplierAppService _supplierAppService; private readonly ISupplierAppService _supplierAppService;
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IPurchaseReceiptJobAppService _purchaseReceiptJobAppService;
public PurchaseOrderAppService( public PurchaseOrderAppService(
IPurchaseOrderRepository repository, IPurchaseOrderRepository repository,

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Plans/SupplierAsns/SupplierAsnAppService.cs

@ -73,7 +73,7 @@ public class SupplierAsnAppService :
/// <summary> /// <summary>
/// 生成ASN订单号 /// 生成ASN订单号
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="activeDate"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("generate-supplierasn-number")] [HttpPost("generate-supplierasn-number")]
public async Task<string> GenerateSupplierAsnNumberAsync(DateTime activeDate) public async Task<string> GenerateSupplierAsnNumberAsync(DateTime activeDate)
@ -101,7 +101,7 @@ public class SupplierAsnAppService :
{ {
var entities = await _repository.GetListAsync( var entities = await _repository.GetListAsync(
p => p.PlanArriveDate.Year == DateTime.Now.Year && p.PlanArriveDate.Month == DateTime.Now.Month && p => p.PlanArriveDate.Year == DateTime.Now.Year && p.PlanArriveDate.Month == DateTime.Now.Month &&
p.PlanArriveDate.Day == DateTime.Now.Day, true); p.PlanArriveDate.Day == DateTime.Now.Day, true).ConfigureAwait(false);
return ObjectMapper.Map<List<SupplierAsn>, List<SupplierAsnDTO>>(entities); return ObjectMapper.Map<List<SupplierAsn>, List<SupplierAsnDTO>>(entities);
} }

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductReceiptRequests/ProductReceiptRequestAppService.cs

@ -86,7 +86,6 @@ public class ProductReceiptRequestAppService :
/// 赋值详情 /// 赋值详情
/// </summary> /// </summary>
/// <param name="detail"></param> /// <param name="detail"></param>
/// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
private async Task SetDetailPropertiesAsync(ProductReceiptRequestDetail detail) private async Task SetDetailPropertiesAsync(ProductReceiptRequestDetail detail)
{ {

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductRecycleRequests/ProductRecycleRequestAppService.cs

@ -37,7 +37,6 @@ public class ProductRecycleRequestAppService :
private readonly IProductRecycleRequestManager _productRecycleRequestManager; private readonly IProductRecycleRequestManager _productRecycleRequestManager;
private readonly IBomAppService _bomApp; private readonly IBomAppService _bomApp;
private readonly IItemStoreRelationAppService _itemStoreRelationApp; private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IBalanceAppService _balanceAppService; private readonly IBalanceAppService _balanceAppService;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly ITransactionTypeAppService _transactionTypeAppService;
@ -46,7 +45,10 @@ public class ProductRecycleRequestAppService :
IProductRecycleRequestRepository repository, IProductRecycleRequestRepository repository,
IProductRecycleRequestManager productRecycleRequestManager, IProductRecycleRequestManager productRecycleRequestManager,
IBomAppService bomApp, IBomAppService bomApp,
IItemStoreRelationAppService itemStoreRelationApp, ILocationAppService locationAppService, IBalanceAppService balanceAppService, ITransactionTypeAppService transactionTypeAppService) IItemStoreRelationAppService itemStoreRelationApp,
ILocationAppService locationAppService,
IBalanceAppService balanceAppService,
ITransactionTypeAppService transactionTypeAppService)
: base(repository, productRecycleRequestManager) : base(repository, productRecycleRequestManager)
{ {
_productRecycleRequestManager = productRecycleRequestManager; _productRecycleRequestManager = productRecycleRequestManager;

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/PurchaseReturnRequests/PurchaseReturnRequestAppService.cs

@ -268,7 +268,7 @@ public class PurchaseReturnRequestAppService :
/// <param name="transactionType"></param> /// <param name="transactionType"></param>
/// <param name="item"></param> /// <param name="item"></param>
/// <param name="location"></param> /// <param name="location"></param>
/// <param name="dataRowErrorInfo"></param> /// <param name="validationRresult"></param>
/// <exception cref="UserFriendlyException"></exception> /// <exception cref="UserFriendlyException"></exception>
/// <exception cref="ArgumentOutOfRangeException"></exception> /// <exception cref="ArgumentOutOfRangeException"></exception>
private static void CheckTransactionType( private static void CheckTransactionType(

148
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestAppService.cs

@ -0,0 +1,148 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
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;
namespace Win_in.Sfs.Wms.Store.Application;
/// <summary>
/// 调拨转移记录
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}wip-warehouse-adjust-request")]
public class WipWarehouseAdjustRequestAppService : SfsStoreRequestAppServiceBase
<WipWarehouseAdjustRequest,
WipWarehouseAdjustRequestDTO,
SfsStoreRequestInputBase,
WipWarehouseAdjustRequestEditInput,
WipWarehouseAdjustRequestDetail,
WipWarehouseAdjustRequestDetailDTO,
SfsStoreRequestInputBase,
WipWarehouseAdjustRequestImportInput>,
IWipWarehouseAdjustRequestAppService
{
private readonly IWipWarehouseAdjustRequestManager _WipWarehouseAdjustRequestManager;
private readonly IBalanceAppService _balanceAppService;
private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService;
public WipWarehouseAdjustRequestAppService(
IWipWarehouseAdjustRequestRepository repository,
IWipWarehouseAdjustRequestManager WipWarehouseAdjustRequestManager,
IBalanceAppService balanceAppService,
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService) : base(repository, WipWarehouseAdjustRequestManager)
{
_WipWarehouseAdjustRequestManager = WipWarehouseAdjustRequestManager;
_balanceAppService = balanceAppService;
_locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService;
}
#region 东阳使用
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<WipWarehouseAdjustRequest, EntityState>> ImportProcessingEntityAsync(
Dictionary<WipWarehouseAdjustRequest, EntityState> dictionary)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var WipWarehouseAdjustRequest in addList)
{
WipWarehouseAdjustRequest.Worker = CurrentUser.GetUserName();
WipWarehouseAdjustRequest.CreatorId = CurrentUser.Id;
await SetEntityPropertiesAsync(WipWarehouseAdjustRequest, EnumTransSubType.CountAdjust_WIP).ConfigureAwait(false);
foreach (var detail in WipWarehouseAdjustRequest.Details)
{
detail.ToLocationCode = detail.FromLocationCode;//调整库位一致
var itemBasicDto =await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
var toLocationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode)
.ConfigureAwait(false);
var fromLocationDto = await _locationAppService.GetByCodeAsync(detail.FromLocationCode)
.ConfigureAwait(false);
detail.ItemCode = itemBasicDto.Code;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
detail.Qty = detail.Qty;
detail.FromLocationErpCode = fromLocationDto.ErpLocationCode;
detail.FromLocationGroup = fromLocationDto.LocationGroupCode;
detail.FromLocationArea = fromLocationDto.AreaCode;
detail.FromWarehouseCode = fromLocationDto.WarehouseCode;
detail.ToLocationErpCode = toLocationDto.ErpLocationCode;
detail.ToLocationGroup = toLocationDto.LocationGroupCode;
detail.ToLocationArea = toLocationDto.AreaCode;
detail.ToWarehouseCode = toLocationDto.WarehouseCode;
detail.FromPackingCode = string.Empty;
detail.FromContainerCode = string.Empty;
detail.ToPackingCode = string.Empty;
detail.ToContainerCode = string.Empty;
detail.FromStatus = EnumInventoryStatus.OK;
detail.ToStatus = EnumInventoryStatus.OK;
detail.FromLot = string.Empty;
detail.ToLot = string.Empty;
}
}
return dictionary;
}
private async Task SetEntityPropertiesAsync(WipWarehouseAdjustRequest entity, EnumTransSubType subType)
{
var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Adjust, subType)
.ConfigureAwait(false);
entity.Worker = CurrentUser.GetUserName();
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
/// <summary>
/// 新增实体
/// </summary>
/// <param name="input">CreateInput</param>
public override async Task<WipWarehouseAdjustRequestDTO> CreateAsync(WipWarehouseAdjustRequestEditInput input)
{
var entity = ObjectMapper.Map<WipWarehouseAdjustRequestEditInput, WipWarehouseAdjustRequest>(input);
await _WipWarehouseAdjustRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<WipWarehouseAdjustRequest, WipWarehouseAdjustRequestDTO>(entity);
return dto;
}
#endregion
}

77
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestAutoMapperProfile.cs

@ -0,0 +1,77 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application;
public partial class StoreApplicationAutoMapperProfile : Profile
{
private void WipWarehouseAdjustRequestMapperProfile()
{
CreateMap<WipWarehouseAdjustRequest, WipWarehouseAdjustRequestDTO>()
.ReverseMap();
CreateMap<WipWarehouseAdjustRequestDetailDTO, WipWarehouseAdjustRequestDetail>();
CreateMap<WipWarehouseAdjustRequestDetail, WipWarehouseAdjustRequestDetailDTO>();
CreateMap<WipWarehouseAdjustRequestDetailInput, WipWarehouseAdjustRequestDetail>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.MasterID)
.Ignore(x => x.TenantId)
.Ignore(x => x.Number)
.Ignore(x => x.Id);
CreateMap<WipWarehouseAdjustRequestImportInput, WipWarehouseAdjustRequest>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.ActiveDate)
.Ignore(x => x.Remark)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
.Ignore(x => x.RequestStatus)
.Ignore(x => x.Details)
.Ignore(x => x.TenantId)
.Ignore(x => x.Number)
.Ignore(x => x.Id);
CreateMap<WipWarehouseAdjustRequestImportInput, WipWarehouseAdjustRequestDetail>()
.IgnoreAuditedObjectProperties()
.Ignore(x=>x.ToPackingCode)
.Ignore(x => x.FromPackingCode)
.Ignore(x => x.FromStatus)
.Ignore(x => x.ToStatus)
.Ignore(x => x.FromLocationGroup)
.Ignore(x => x.FromLocationArea)
.Ignore(x => x.FromLocationErpCode)
.Ignore(x => x.FromWarehouseCode)
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ToLocationErpCode)
.Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.SupplierBatch).Ignore(x => x.ArriveDate).Ignore(x => x.ProduceDate).Ignore(x => x.ExpireDate)
.Ignore(x => x.Remark)
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2)
.Ignore(x => x.FromContainerCode)
.Ignore(x => x.ToContainerCode)
.Ignore(x => x.FromLot)
.Ignore(x => x.ToLot)
.Ignore(x => x.StdPackQty)
.Ignore(x => x.Uom)
.Ignore(x => x.MasterID)
.Ignore(x => x.TenantId)
.Ignore(x => x.Number)
.Ignore(x => x.Id);
CreateMap<WipWarehouseAdjustRequestEditInput, WipWarehouseAdjustRequest>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.Id)
.Ignore(x => x.Number)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.Remark)
.Ignore(x => x.TenantId)
;
}
}

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/StoreApplicationAutoMapperProfile.cs

@ -23,6 +23,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
PutawayRequestAutoMapperProfile(); PutawayRequestAutoMapperProfile();
CountAdjustRequestAutoMapperProfile(); CountAdjustRequestAutoMapperProfile();
ScrapRequestAutoMapperProfile(); ScrapRequestAutoMapperProfile();
WipWarehouseAdjustRequestMapperProfile();
#endregion #endregion
@ -78,6 +79,8 @@ public partial class StoreApplicationAutoMapperProfile : Profile
TransferNoteMapperProfile(); TransferNoteMapperProfile();
NoOkConvertOkNoteAutoMapperProfile(); NoOkConvertOkNoteAutoMapperProfile();
InventoryInitialNoteAutoMapperProfile(); InventoryInitialNoteAutoMapperProfile();
WipWarehouseAdjustNoteMapperProfile();
#endregion #endregion
#region Jobs #region Jobs

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Win_in.Sfs.Wms.Store.Application.csproj

@ -22,6 +22,7 @@
<PackageReference Include="Volo.Abp.AutoMapper" Version="5.3.5" /> <PackageReference Include="Volo.Abp.AutoMapper" Version="5.3.5" />
<PackageReference Include="Volo.Abp.Ddd.Application" Version="5.3.5" /> <PackageReference Include="Volo.Abp.Ddd.Application" Version="5.3.5" />
<PackageReference Include="Volo.Abp.SettingManagement.Application" Version="5.3.5" /> <PackageReference Include="Volo.Abp.SettingManagement.Application" Version="5.3.5" />
<ProjectReference Include="..\..\..\BaseData\src\Win_in.Sfs.Basedata.Application\Win_in.Sfs.Basedata.Application.csproj" />
<ProjectReference Include="..\..\..\Shared\src\Win_in.Sfs.Shared.Application\Win_in.Sfs.Shared.Application.csproj" /> <ProjectReference Include="..\..\..\Shared\src\Win_in.Sfs.Shared.Application\Win_in.Sfs.Shared.Application.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Wms.Store.Application.Contracts\Win_in.Sfs.Wms.Store.Application.Contracts.csproj" /> <ProjectReference Include="..\Win_in.Sfs.Wms.Store.Application.Contracts\Win_in.Sfs.Wms.Store.Application.Contracts.csproj" />
<ProjectReference Include="..\Win_in.Sfs.Wms.Store.Domain\Win_in.Sfs.Wms.Store.Domain.csproj" /> <ProjectReference Include="..\Win_in.Sfs.Wms.Store.Domain\Win_in.Sfs.Wms.Store.Domain.csproj" />

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/IWipWarehouseAdjustNoteManager.cs

@ -0,0 +1,11 @@
using System;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IWipWarehouseAdjustNoteManager :
ISfsStoreManager<WipWarehouseAdjustNote, WipWarehouseAdjustNoteDetail>, IBulkImportService<WipWarehouseAdjustNote>
{
Task<WipWarehouseAdjustNote> ConfirmAsync(Guid id);
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/IWipWarehouseAdjustNoteRepository.cs

@ -0,0 +1,8 @@
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IWipWarehouseAdjustNoteRepository : ISfsStoreRepositoryBase<WipWarehouseAdjustNote>,
ISfsBulkRepositoryBase<WipWarehouseAdjustNote>
{
}

65
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/WipWarehouseAdjustNote.cs

@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 盘点差异调整记录
/// </summary>
public class WipWarehouseAdjustNote : SfsStoreAggregateRootBase<WipWarehouseAdjustNoteDetail>, IHasJobNumber
{
/// <summary>
/// 调整类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
/// <summary>
/// 任务ID
/// </summary>
[IgnoreUpdate]
public string RequestNumber { get; set; }
/// <summary>
/// 任务ID
/// </summary>
[IgnoreUpdate]
public string JobNumber { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<WipWarehouseAdjustNoteDetail> Details { get; set; } = new();
/// <summary>
/// 已确认
/// </summary>
[Display(Name = "已确认")]
public bool Confirmed { get; set; }
/// <summary>
/// 确认时间
/// </summary>
[Display(Name = "确认时间")]
[IgnoreUpdate]
public DateTime? ConfirmTime { get; set; }
public void Confirm(DateTime confirmTime)
{
CheckStatus(Confirmed);
Confirmed = true;
ConfirmTime = confirmTime;
}
private static void CheckStatus(bool confirmed)
{
if (confirmed)
{
throw new UserFriendlyException("当前状态为 【已确认】 ,无法再次确认!");
}
}
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/WipWarehouseAdjustNoteDetail.cs

@ -0,0 +1,24 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 盘点差异调整记录-明细表
/// </summary>
public class WipWarehouseAdjustNoteDetail : SfsStoreDetailWithFromToEntityBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
}

118
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/WipWarehouseAdjustNote/WipWarehouseAdjustNoteManager.cs

@ -0,0 +1,118 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Volo.Abp;
using Volo.Abp.Uow;
using Win_in.Sfs.Shared.Event;
namespace Win_in.Sfs.Wms.Store.Domain;
public class WipWarehouseAdjustNoteManager : SfsStoreManagerBase<WipWarehouseAdjustNote, WipWarehouseAdjustNoteDetail>,
IWipWarehouseAdjustNoteManager
{
private readonly IWipWarehouseAdjustNoteRepository _repository;
public WipWarehouseAdjustNoteManager(
IWipWarehouseAdjustNoteRepository repository
) : base(repository)
{
_repository = repository;
}
[UnitOfWork]
public virtual async Task<WipWarehouseAdjustNote> ConfirmAsync(Guid id)
{
var entity = await Repository.FindAsync(id).ConfigureAwait(false);
Check.NotNull(entity, EntityClassName);
entity.Confirm(Clock.Now);
await PublishConfirmedAsync(entity).ConfigureAwait(false);
return await Repository.UpdateAsync(entity).ConfigureAwait(false);
}
private async Task PublishConfirmedAsync(WipWarehouseAdjustNote entity)
{
try
{
await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData<WipWarehouseAdjustNote>(entity), false)
.ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogDebug($"{nameof(WipWarehouseAdjustNote)} Confirmed Event:{ex.Message}", null);
Console.WriteLine(ex.Source);
throw;
}
}
/// <summary>
/// 执行导入
/// </summary>
public virtual async Task ImportDataAsync(List<WipWarehouseAdjustNote> mergeEntities,
List<WipWarehouseAdjustNote> deleteEntities = null)
{
if (deleteEntities != null && deleteEntities.Count > 0)
{
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
}
foreach (var entity in mergeEntities)
{
entity.SetIdAndNumberWithDetails(GuidGenerator,
await GenerateNumberAsync(nameof(WipWarehouseAdjustNote), Clock.Now).ConfigureAwait(false));
}
await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
var insertDetails = new List<WipWarehouseAdjustNoteDetail>();
foreach (var item in mergeEntities)
{
await SetDetailAsync(item.Details).ConfigureAwait(false);
insertDetails.AddRange(item.Details);
}
await _repository.BulkInsertAsync(insertDetails).ConfigureAwait(false);
}
private async Task SetDetailAsync(List<WipWarehouseAdjustNoteDetail> details)
{
foreach (var detail in details)
{
var item = await ItemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
Check.NotNull(item, "物品代码", $"物品 {detail.ItemCode} 不存在");
if (item != null)
{
detail.ItemName = item.Name;
detail.ItemDesc1 = item.Desc1;
detail.ItemDesc2 = item.Desc2;
}
var balance = await BalanceAppService.GetByItemLocationPackingAndStatusAsync(detail.FromPackingCode,
detail.ItemCode, detail.FromLocationCode, detail.FromStatus).ConfigureAwait(false);
Check.NotNull(balance, "库存",
$"不存在箱码为{detail.FromPackingCode},零件编码为{detail.ItemCode},库位为{detail.FromLocationCode},状态为{detail.FromStatus}的库存!");
detail.SupplierBatch = balance.SupplierBatch;
detail.ArriveDate = balance.ArriveDate;
detail.ProduceDate = balance.ProduceDate;
detail.ExpireDate = balance.ExpireDate;
//通过箱码和库位获取库存信息
detail.FromStatus = balance.Status;
detail.FromLot = balance.Lot;
detail.FromWarehouseCode = balance.WarehouseCode;
detail.FromContainerCode = balance.ContainerCode;
detail.ToLot = balance.Lot;
detail.ToWarehouseCode = balance.WarehouseCode;
detail.ToContainerCode = balance.ContainerCode;
detail.ToStatus = balance.Status;
}
}
}

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestManager.cs

@ -0,0 +1,9 @@
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Domain;
public interface IWipWarehouseAdjustRequestManager :
ISfsStoreRequestManager<WipWarehouseAdjustRequest, WipWarehouseAdjustRequestDetail>,
IBulkImportService<WipWarehouseAdjustRequest>
{
}

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/IWipWarehouseAdjustRequestRepository.cs

@ -0,0 +1,9 @@
using System;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Domain
{
public interface IWipWarehouseAdjustRequestRepository : ISfsStoreRepositoryBase<WipWarehouseAdjustRequest>, ISfsBulkRepositoryBase<WipWarehouseAdjustRequest>
{
}
}

25
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequest.cs

@ -0,0 +1,25 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 调拨申请
/// </summary>
public class WipWarehouseAdjustRequest : SfsStoreRequestAggregateRootBase<WipWarehouseAdjustRequestDetail>
{
/// <summary>
/// 调整类型
/// </summary>
[Display(Name = "调整类型")]
public string Type { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<WipWarehouseAdjustRequestDetail> Details { get; set; } = new List<WipWarehouseAdjustRequestDetail>();
}

30
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestDetail.cs

@ -0,0 +1,30 @@
using System.ComponentModel.DataAnnotations;
using System.Text.Json;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 线边库存调整调整明细
/// </summary>
public class WipWarehouseAdjustRequestDetail : SfsStoreDetailWithFromToEntityBase
{
/// <summary>
/// 原因
/// </summary>
[Display(Name = "调整原因")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Reason { get; set; }
/// <summary>
/// 调整代码
/// </summary>
[Display(Name = "原因代码")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ReasonCode { get; set; }
public override string ToString()
{
return JsonSerializer.Serialize(this);
}
}

80
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestManager.cs

@ -0,0 +1,80 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
namespace Win_in.Sfs.Wms.Store.Domain;
public class WipWarehouseAdjustRequestManager :
SfsStoreRequestManagerBase<WipWarehouseAdjustRequest, WipWarehouseAdjustRequestDetail>,
IWipWarehouseAdjustRequestManager
{
private readonly IWipWarehouseAdjustRequestRepository _repository;
public WipWarehouseAdjustRequestManager(
IWipWarehouseAdjustRequestRepository repository
) : base(repository)
{
_repository = repository;
}
/// <summary>
/// 执行导入
/// </summary>
public virtual async Task ImportDataAsync(List<WipWarehouseAdjustRequest> WipWarehouseAdjustRequests,
List<WipWarehouseAdjustRequest> deleteEntities = null)
{
if (deleteEntities != null && deleteEntities.Count > 0)
{
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
}
_ = new List<WipWarehouseAdjustRequestDetail>();
foreach (var item in WipWarehouseAdjustRequests)
{
await BuildDetailAsync(item.Details).ConfigureAwait(false);
}
await CreateManyAsync(WipWarehouseAdjustRequests).ConfigureAwait(false);
}
private async Task BuildDetailAsync(List<WipWarehouseAdjustRequestDetail> details)
{
foreach (var detail in details)
{
var item = await ItemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
Check.NotNull(item, "物品代码", $"物品 {detail.ItemCode} 不存在");
if (item != null)
{
detail.ItemName = item.Name;
detail.ItemDesc1 = item.Desc1;
detail.ItemDesc2 = item.Desc2;
}
var balance = await BalanceAppService.GetByItemLocationPackingAndStatusAsync(detail.FromPackingCode,
detail.ItemCode, detail.FromLocationCode, detail.FromStatus).ConfigureAwait(false);
Check.NotNull(balance, "库存",
$"不存在箱码为{detail.FromPackingCode},零件编码为{detail.ItemCode},库位为{detail.FromLocationCode},状态为{detail.FromStatus}的库存!");
detail.SupplierBatch = balance.SupplierBatch;
detail.ArriveDate = balance.ArriveDate;
detail.ProduceDate = balance.ProduceDate;
detail.ExpireDate = balance.ExpireDate;
//通过箱码和库位获取库存信息
detail.FromStatus = balance.Status;
detail.FromLot = balance.Lot;
detail.FromWarehouseCode = balance.WarehouseCode;
detail.FromContainerCode = balance.ContainerCode;
detail.ToLot = balance.Lot;
detail.ToWarehouseCode = balance.WarehouseCode;
detail.ToContainerCode = balance.ContainerCode;
detail.ToStatus = balance.Status;
}
}
}

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/IStoreDbContext.cs

@ -29,6 +29,7 @@ public interface IStoreDbContext : IEfCoreDbContext
public DbSet<ProductRecycleRequest> ProductRecycleRequests { get; } public DbSet<ProductRecycleRequest> ProductRecycleRequests { get; }
public DbSet<ScrapRequest> ScrapRequests { get; } public DbSet<ScrapRequest> ScrapRequests { get; }
public DbSet<CountAdjustRequest> CountAdjustRequests { get; } public DbSet<CountAdjustRequest> CountAdjustRequests { get; }
public DbSet<WipWarehouseAdjustRequest> WipWarehouseAdjustRequests { get; }
#endregion #endregion
@ -82,7 +83,7 @@ public interface IStoreDbContext : IEfCoreDbContext
public DbSet<CustomerReturnNote> CustomerReturnNotes { get; } public DbSet<CustomerReturnNote> CustomerReturnNotes { get; }
public DbSet<ContainerBindNote> ContainerBindNotes { get; } public DbSet<ContainerBindNote> ContainerBindNotes { get; }
public DbSet<NoOkConvertOkNote> NoOkConvertOkNotes { get; } public DbSet<NoOkConvertOkNote> NoOkConvertOkNotes { get; }
public DbSet<WipWarehouseAdjustNote> WipWarehouseAdjustNotes { get; }
#endregion #endregion
#region Jobs #region Jobs

52
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteDbContextModelCreatingExtensions.cs

@ -0,0 +1,52 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
public static class WipWarehouseAdjustNoteDbContextModelCreatingExtensions
{
public static void ConfigureWipWarehouseAdjustNote(this ModelBuilder builder, StoreModelBuilderConfigurationOptions options)
{
builder.Entity<WipWarehouseAdjustNote>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + nameof(WipWarehouseAdjustNote), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsStoreBase();
//Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
//Relations
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
//Indexes
b.HasIndex(q => new { q.Number }).IsUnique();
});
builder.Entity<WipWarehouseAdjustNoteDetail>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + nameof(WipWarehouseAdjustNoteDetail), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsStoreBase();
//Configure Sfs store detail properties
b.ConfigureSfsStoreDetailBase();
//Properties
b.Property(q => q.Reason).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.FromStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
b.Property(q => q.ToStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations
//Indexes
b.HasIndex(q => new { q.Number, q.FromPackingCode, q.FromLocationCode, q.ToLocationCode, q.FromStatus, q.ToStatus }).IsUnique();
});
}
}

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/WipWarehouseAdjustNotes/WipWarehouseAdjustNoteEfCoreRepository.cs

@ -0,0 +1,11 @@
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
public class WipWarehouseAdjustNoteEfCoreRepository : SfsStoreEfCoreRepositoryBase<StoreDbContext, WipWarehouseAdjustNote>, IWipWarehouseAdjustNoteRepository
{
public WipWarehouseAdjustNoteEfCoreRepository(IDbContextProvider<StoreDbContext> dbContextProvider) : base(dbContextProvider)
{
}
}

52
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestDbContextModelCreatingExtensions.cs

@ -0,0 +1,52 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
public static class WipWarehouseAdjustRequestDbContextModelCreatingExtensions
{
public static void ConfigureWipWarehouseAdjustRequest(this ModelBuilder builder, StoreModelBuilderConfigurationOptions options)
{
builder.Entity<WipWarehouseAdjustRequest>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + nameof(WipWarehouseAdjustRequest), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsStoreBase();
//Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
//Indexes
b.HasIndex(q => new { q.Number }).IsUnique();
});
builder.Entity<WipWarehouseAdjustRequestDetail>(b =>
{
//Configure table & schema name
b.ToTable(options.TablePrefix + nameof(WipWarehouseAdjustRequestDetail), options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Configure Sfs base properties
b.ConfigureSfsStoreBase();
//Configure Sfs store detail properties
b.ConfigureSfsStoreDetailBase();
//Properties
b.Property(q => q.FromStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
b.Property(q => q.ToStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations
//Indexes
});
}
}

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/WipWarehouseAdjustRequests/WipWarehouseAdjustRequestEfCoreRepository.cs

@ -0,0 +1,13 @@
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore;
public class WipWarehouseAdjustRequestEfCoreRepository :
SfsStoreEfCoreRepositoryBase<StoreDbContext, WipWarehouseAdjustRequest>, IWipWarehouseAdjustRequestRepository
{
public WipWarehouseAdjustRequestEfCoreRepository(IDbContextProvider<StoreDbContext> dbContextProvider) : base(
dbContextProvider)
{
}
}

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContext.cs

@ -28,6 +28,7 @@ public class StoreDbContext : AbpDbContext<StoreDbContext>, IStoreDbContext
public DbSet<ProductRecycleRequest> ProductRecycleRequests { get; set; } public DbSet<ProductRecycleRequest> ProductRecycleRequests { get; set; }
public DbSet<ScrapRequest> ScrapRequests { get; set; } public DbSet<ScrapRequest> ScrapRequests { get; set; }
public DbSet<CountAdjustRequest> CountAdjustRequests { get; set; } public DbSet<CountAdjustRequest> CountAdjustRequests { get; set; }
public DbSet<WipWarehouseAdjustRequest> WipWarehouseAdjustRequests { get; set; }
#endregion #endregion
@ -81,7 +82,7 @@ public class StoreDbContext : AbpDbContext<StoreDbContext>, IStoreDbContext
public DbSet<CustomerReturnNote> CustomerReturnNotes { get; set; } public DbSet<CustomerReturnNote> CustomerReturnNotes { get; set; }
public DbSet<ContainerBindNote> ContainerBindNotes { get; set; } public DbSet<ContainerBindNote> ContainerBindNotes { get; set; }
public DbSet<NoOkConvertOkNote> NoOkConvertOkNotes { get; set; } public DbSet<NoOkConvertOkNote> NoOkConvertOkNotes { get; set; }
public DbSet<WipWarehouseAdjustNote> WipWarehouseAdjustNotes { get; set; }
#endregion #endregion
#region Jobs #region Jobs

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreDbContextModelCreatingExtensions.cs

@ -59,6 +59,7 @@ public static class StoreDbContextModelCreatingExtensions
builder.ConfigurePutawayRequest(options); builder.ConfigurePutawayRequest(options);
builder.ConfigureScrapRequest(options); builder.ConfigureScrapRequest(options);
builder.ConfigureCountAdjustRequest(options); builder.ConfigureCountAdjustRequest(options);
builder.ConfigureWipWarehouseAdjustRequest(options);
#endregion #endregion
@ -95,6 +96,7 @@ public static class StoreDbContextModelCreatingExtensions
builder.ConfigureContainerBindNote(options); builder.ConfigureContainerBindNote(options);
builder.ConfigureNoOkConvertOKNote(options); builder.ConfigureNoOkConvertOKNote(options);
builder.ConfigureInventoryInitialNote(options); builder.ConfigureInventoryInitialNote(options);
builder.ConfigureWipWarehouseAdjustNote(options);
#endregion #endregion

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/StoreEntityFrameworkCoreModule.cs

@ -63,6 +63,7 @@ public class StoreEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient<IPutawayRequestRepository, PutawayRequestEfCoreRepository>(); context.Services.AddTransient<IPutawayRequestRepository, PutawayRequestEfCoreRepository>();
context.Services.AddTransient<IScrapRequestRepository, ScrapRequestEfCoreRepository>(); context.Services.AddTransient<IScrapRequestRepository, ScrapRequestEfCoreRepository>();
context.Services.AddTransient<ICountAdjustRequestRepository, CountAdjustRequestEfCoreRepository>(); context.Services.AddTransient<ICountAdjustRequestRepository, CountAdjustRequestEfCoreRepository>();
context.Services.AddTransient<IWipWarehouseAdjustRequestRepository, WipWarehouseAdjustRequestEfCoreRepository>();
#endregion #endregion
@ -100,6 +101,7 @@ public class StoreEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient<IInventoryInitialNoteRepository, InventoryInitialNoteEfCoreRepository>(); context.Services.AddTransient<IInventoryInitialNoteRepository, InventoryInitialNoteEfCoreRepository>();
context.Services.AddTransient<IContainerBindNoteRepository, ContainerBindNoteEfCoreRepository>(); context.Services.AddTransient<IContainerBindNoteRepository, ContainerBindNoteEfCoreRepository>();
context.Services.AddTransient<INoOkConvertOkNoteRepository, NoOkConvertOkNoteEfCoreRepository>(); context.Services.AddTransient<INoOkConvertOkNoteRepository, NoOkConvertOkNoteEfCoreRepository>();
context.Services.AddTransient<IWipWarehouseAdjustNoteRepository, WipWarehouseAdjustNoteEfCoreRepository>();
#endregion #endregion
@ -189,6 +191,8 @@ public class StoreEntityFrameworkCoreModule : AbpModule
orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details)); orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details));
options.Entity<CountAdjustRequest>(orderOptions => options.Entity<CountAdjustRequest>(orderOptions =>
orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details)); orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details));
options.Entity<WipWarehouseAdjustRequest>(orderOptions =>
orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details));
#endregion #endregion
@ -260,6 +264,8 @@ public class StoreEntityFrameworkCoreModule : AbpModule
orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details)); orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details));
options.Entity<InventoryInitialNote>(orderOptions => options.Entity<InventoryInitialNote>(orderOptions =>
orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details)); orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details));
options.Entity<WipWarehouseAdjustNote>(orderOptions =>
orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details));
#endregion #endregion

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/TransferNoteAutoMapperProfile.cs

@ -9,13 +9,24 @@ public partial class StoreEventAutoMapperProfile : Profile
{ {
private void TransferNoteAutoMapperProfile() private void TransferNoteAutoMapperProfile()
{ {
CreateMap<TransferNoteDetail, TransferLogEditInput>() CreateMap<TransferNoteDetail, TransactionEditInput>()
.Ignore(x => x.ExtraProperties) .Ignore(x => x.ExtraProperties)
.Ignore(x => x.DocNumber) .Ignore(x => x.DocNumber)
.Ignore(x => x.JobNumber) .Ignore(x => x.JobNumber)
.Ignore(x => x.Worker) .Ignore(x => x.Worker)
.Ignore(x => x.TransType) .Ignore(x => x.TransType)
.Ignore(x => x.TransSubType) .Ignore(x => x.TransSubType)
.Ignore(x=>x.PackingCode)
.Ignore(x => x.Lot)
.Ignore(x => x.Status)
.Ignore(x => x.TransInOut)
.Ignore(x => x.LocationCode)
.Ignore(x => x.LocationGroup)
.Ignore(x => x.LocationErpCode)
.Ignore(x => x.LocationArea)
.Ignore(x => x.ContainerCode)
.Ignore(x => x.ManageType)
.Ignore(x => x.WarehouseCode)
; ;
} }

26
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/WipWarehouseAdjustNoteAutoMapperProfile.cs

@ -0,0 +1,26 @@
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.Domain;
namespace Win_in.Sfs.Wms.Store.Event
{
public partial class StoreEventAutoMapperProfile : Profile
{
private void WipWarehouseAdjustNoteAutoMapperProfile()
{
CreateMap<WipWarehouseAdjustNoteDetail, TransferLogEditInput>()
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.DocNumber)
.Ignore(x => x.JobNumber)
.Ignore(x => x.Worker)
.Ignore(x => x.TransType)
.Ignore(x => x.TransSubType)
;
}
}
}

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/WipWarehouseAdjustRequestAutoMapperProfile.cs

@ -0,0 +1,24 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
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 WipWarehouseAdjustRequestAutoMapperProfile()
{
CreateMap<WipWarehouseAdjustRequest, WipWarehouseAdjustNoteEditInput>()
.IgnoreAllPropertiesWithAnInaccessibleSetter()
.ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.Number))
.Ignore(x => x.JobNumber)
.Ignore(x => x.Confirmed)
.Ignore(x => x.ConfirmTime)
;
CreateMap<WipWarehouseAdjustRequestDetail, WipWarehouseAdjustNoteDetailInput>()
.IgnoreAllPropertiesWithAnInaccessibleSetter()
;
}
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionReturnJobEventHandler.cs

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;

95
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/WipWarehouseAdjustRequestEventHandler.cs

@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Bibliography;
using Volo.Abp.EventBus;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Event;
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.BusinessRequest;
public class WipWarehouseAdjustRequestEventHandler
: StoreEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<WipWarehouseAdjustRequest>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<WipWarehouseAdjustRequest>>>
, ILocalEventHandler<SfsHandledEntityEventData<WipWarehouseAdjustRequest>>
{
private readonly IWipWarehouseAdjustNoteAppService _wipWarehouseAdjustNoteAppService;
private readonly IWipWarehouseAdjustRequestManager _wipWarehouseAdjustRequestManager;
private readonly IBalanceAppService _balanceAppService;
public WipWarehouseAdjustRequestEventHandler(
IWipWarehouseAdjustNoteAppService wipWarehouseAdjustNoteAppService, IBalanceAppService balanceAppService, IWipWarehouseAdjustRequestManager wipWarehouseAdjustRequestManager)
{
_wipWarehouseAdjustNoteAppService = wipWarehouseAdjustNoteAppService;
_balanceAppService = balanceAppService;
_wipWarehouseAdjustRequestManager = wipWarehouseAdjustRequestManager;
}
/// <summary>
/// 创建后
/// </summary>
/// <param name="eventData">Event data</param>
public async Task HandleEventAsync(SfsCreatedEntityEventData<WipWarehouseAdjustRequest> eventData)
{
var entity = eventData.Entity;
if (entity.AutoSubmit)
{
await _wipWarehouseAdjustRequestManager.SubmitAsync(entity).ConfigureAwait(false);
}
}
/// <summary>
/// 批量创建后
/// </summary>
/// <param name="eventData">Event data</param>
public async Task HandleEventAsync(SfsCreatedEntityEventData<List<WipWarehouseAdjustRequest>> eventData)
{
var entitys = eventData.Entity;
foreach (var entity in entitys)
{
if (entity.AutoSubmit)
{
await _wipWarehouseAdjustRequestManager.SubmitAsync(entity).ConfigureAwait(false);
}
}
}
/// <summary>
/// 审批后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsHandledEntityEventData<WipWarehouseAdjustRequest> eventData)
{
var entity = eventData.Entity;
if (entity.DirectCreateNote)
{
var note = await BuildCountAdjustNoteCreateInputAsync(entity).ConfigureAwait(false);
await _wipWarehouseAdjustNoteAppService.CreateAsync(note).ConfigureAwait(false);
}
}
#region 私有
private async Task<WipWarehouseAdjustNoteEditInput> BuildCountAdjustNoteCreateInputAsync(
WipWarehouseAdjustRequest entity)
{
var createInput = ObjectMapper.Map<WipWarehouseAdjustRequest, WipWarehouseAdjustNoteEditInput>(entity);
createInput.JobNumber = string.Empty;
createInput.RequestNumber = entity.Number;
createInput.ActiveDate = Clock.Now;
return createInput;
}
#endregion
}

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

@ -24,6 +24,31 @@ public partial class StoreEventAutoMapperProfile : Profile
//到货单 //到货单
PurchaseReceiptRequestAutoMapperProfile(); PurchaseReceiptRequestAutoMapperProfile();
//线边调整
WipWarehouseAdjustRequestAutoMapperProfile();
#endregion
#region Jobs
CountJobAutoMapperProfile();
DeliverJobAutoMapperProfile();
InspectJobAutoMapperProfile();
IssueJobAutoMapperProfile();
JisDeliverJobAutoMapperProfile();
ProductionReturnJobAutoMapperProfile();
ProductReceiveJobAutoMapperProfile();
PurchaseReceiptJobAutoMapperProfile();
PurchaseReturnJobAutoMapperProfile();
PutawayJobAutoMapperProfile();
UnplannedIssueJobAutoMapperProfile();
UnplannedReceiptJobAutoMapperProfile();
#endregion
#region Notes
WipWarehouseAdjustNoteAutoMapperProfile();
#endregion #endregion
@ -69,21 +94,6 @@ public partial class StoreEventAutoMapperProfile : Profile
CountAdjustRequestAutoMapperProfile(); CountAdjustRequestAutoMapperProfile();
InventoryInitialNoteAutoMapperProfile(); InventoryInitialNoteAutoMapperProfile();
#region Jobs
CountJobAutoMapperProfile();
DeliverJobAutoMapperProfile();
InspectJobAutoMapperProfile();
IssueJobAutoMapperProfile();
JisDeliverJobAutoMapperProfile();
ProductionReturnJobAutoMapperProfile();
ProductReceiveJobAutoMapperProfile();
PurchaseReceiptJobAutoMapperProfile();
PurchaseReturnJobAutoMapperProfile();
PutawayJobAutoMapperProfile();
UnplannedIssueJobAutoMapperProfile();
UnplannedReceiptJobAutoMapperProfile();
#endregion
} }
} }

128
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/WipWarehouseAdjustNoteEventHandler.cs

@ -0,0 +1,128 @@
using System.Collections.Generic;
using System.Linq;
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.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Event.Transaction;
namespace Win_in.Sfs.Wms.Store.Event.BusinessNote;
public class WipWarehouseAdjustNoteEventHandler
: StoreInventoryEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<WipWarehouseAdjustNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<WipWarehouseAdjustNote>>>
{
private const EnumTransType TransType = EnumTransType.Adjust;
private const EnumTransSubType TransSubType = EnumTransSubType.CountAdjust_WIP;
private readonly IWipWarehouseAdjustRequestAppService _wipWarehouseAdjustRequestApp;
private readonly IItemBasicAppService _itemBasicAppService;
public WipWarehouseAdjustNoteEventHandler(
IWipWarehouseAdjustRequestAppService wipWarehouseAdjustRequestApp, IItemBasicAppService itemBasicAppService)
{
_wipWarehouseAdjustRequestApp = wipWarehouseAdjustRequestApp;
_itemBasicAppService = itemBasicAppService;
}
/// <summary>
/// 批量创建后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<WipWarehouseAdjustNote>> eventData)
{
var entities = eventData.Entity;
await AddTransactionsAsync(entities).ConfigureAwait(false);
foreach (var entity in entities.Where(entity => !string.IsNullOrEmpty(entity.RequestNumber)))
{
await _wipWarehouseAdjustRequestApp.CompleteByNumberAsync(entity.RequestNumber).ConfigureAwait(false);
}
}
/// <summary>
/// 创建后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<WipWarehouseAdjustNote> eventData)
{
var entities = new List<WipWarehouseAdjustNote> { eventData.Entity };
await AddTransactionsAsync(entities).ConfigureAwait(false);
foreach (var entity in entities.Where(entity => !string.IsNullOrEmpty(entity.RequestNumber)))
{
await _wipWarehouseAdjustRequestApp.CompleteByNumberAsync(entity.RequestNumber).ConfigureAwait(false);
}
}
#region 库存操作
private async Task AddTransactionsAsync(List<WipWarehouseAdjustNote> countAdjustNotes)
{
var transactions = new List<TransactionEditInput>();
//如果要做库存事务汇总,可以修改此处
foreach (var countAdjustNote in countAdjustNotes)
{
transactions.AddRange(await BuildTransactions(countAdjustNote).ConfigureAwait(false));
}
await TransactionAppService.AddManyAsync(transactions).ConfigureAwait(false);
}
private async Task<IEnumerable<TransactionEditInput>> BuildTransactions(WipWarehouseAdjustNote countAdjustNote)
{
var transactions = new List<TransactionEditInput>();
foreach (var detail in countAdjustNote.Details)
{
var itemBasicDto= await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
var transaction = new TransactionEditInput();
transaction.TransType = TransType;
transaction.TransSubType = TransSubType;
transaction.TransInOut = detail.Qty > 0 ? EnumTransInOut.In : EnumTransInOut.Out;
transaction.Worker = countAdjustNote.Worker;
transaction.DocNumber = countAdjustNote.Number;
transaction.JobNumber = string.Empty;
transaction.ItemCode = detail.ItemCode;
transaction.ItemDesc1=detail.ItemDesc1;
transaction.ItemDesc2=detail.ItemDesc2;
transaction.ItemName = detail.ItemName;
transaction.StdPackQty = detail.StdPackQty;
transaction.DocNumber = detail.Number;
transaction.Uom=detail.Uom;
transaction.PackingCode = detail.ToPackingCode;
transaction.Lot = detail.ToLot;
transaction.Qty=detail.Qty;
transaction.Status = detail.ToStatus;
transaction.LocationCode = detail.ToLocationCode;
transaction.LocationGroup = detail.ToLocationGroup;
transaction.LocationArea = detail.ToLocationArea;
transaction.LocationErpCode = detail.ToLocationErpCode;
transaction.LocationCode=detail.ToLocationCode;
transaction.ContainerCode = detail.ToContainerCode;
transaction.ManageType = itemBasicDto.ManageType;
transaction.WarehouseCode = detail.ToWarehouseCode;
transactions.Add(transaction);
}
return transactions;
}
#endregion
}
Loading…
Cancel
Save