From 4ad3e33a9085b565000cac3fa68919764425ab8c Mon Sep 17 00:00:00 2001
From: zhouhongjun <565221961@qq.com>
Date: Tue, 2 Apr 2024 10:36:09 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=B6=E5=AE=B9?=
=?UTF-8?q?=E6=95=B0=E6=A0=87=E5=8C=85=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Jobs/ContainerJobController.cs | 8 +-
.../ItemContainers/DTOs/ItemContainerDTO.cs | 47 ++++++++++++
.../IItemContainerAppService.cs | 11 +++
.../Inputs/ItemContainerEditInput.cs | 53 +++++++++++++
.../Inputs/ItemContainerImportInput.cs | 64 ++++++++++++++++
.../ItemContainerPermissions.cs | 21 ++++++
.../BasedataPermissionDefinitionProvider.cs | 1 +
.../BasedataApplicationAutoMapperProfile.cs | 1 +
.../ItemContainers/ItemContainerAppService.cs | 69 +++++++++++++++++
.../ItemContainerAutoMapperProfile.cs | 33 +++++++++
.../ItemContainers/IItemContainerManager.cs | 9 +++
.../IItemContainerRepository.cs | 9 +++
.../ItemContainers/ItemContainer.cs | 46 ++++++++++++
.../ItemContainers/ItemContainerManager.cs | 31 ++++++++
.../BasedataDbContext.cs | 1 +
...asedataDbContextModelCreatingExtensions.cs | 1 +
.../BasedataEntityFrameworkCoreModule.cs | 1 +
.../IBasedataDbContext.cs | 2 +
...ntainerDbContextModelCreatingExtensions.cs | 36 +++++++++
.../ItemContainerEfCoreRepository.cs | 32 ++++++++
.../Inputs/ContainerJobEditInput.cs | 9 +--
.../Inputs/ContainerNoteEditInput.cs | 8 +-
.../Inputs/ContainerRequestEditInput.cs | 3 +-
.../ContainerRequestAppService.cs | 3 +-
.../Jobs/ContainerJobs/ContainerJob.cs | 7 +-
.../Notes/ContainerNotes/ContainerNote.cs | 7 +-
.../ContainerRequests/ContainerRequest.cs | 7 +-
.../Jobs/ContainerJobAutoMapperProfile.cs | 3 +-
.../Notes/ContainerNoteAutoMapperProfile.cs | 22 ++++++
.../Requests/ContainerRequestMapperProfile.cs | 7 +-
.../Requests/ContainerRequestEventHandler.cs | 74 +++++++++----------
31 files changed, 544 insertions(+), 82 deletions(-)
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/DTOs/ItemContainerDTO.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerEditInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerImportInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/ItemContainerPermissions.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAutoMapperProfile.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerManager.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerRepository.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainer.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainerManager.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerDbContextModelCreatingExtensions.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerEfCoreRepository.cs
create mode 100644 be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/ContainerNoteAutoMapperProfile.cs
diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ContainerJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ContainerJobController.cs
index 758982be3..a01a2b9d3 100644
--- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ContainerJobController.cs
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ContainerJobController.cs
@@ -111,8 +111,12 @@ public class ContainerJobController : AbpController
{
if(!string.IsNullOrEmpty(item.SpecificationsType))
{
- var dictName= dtos.Items.FirstOrDefault(t => t.Code == item.SpecificationsType);
- item.SpecificationsTypeName = dictName.Name;
+ var dictName = dtos.Items.FirstOrDefault(t => t.Code == item.SpecificationsType);
+ if(dictName != null)
+ {
+ item.SpecificationsTypeName = dictName.Name;
+ }
+
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/DTOs/ItemContainerDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/DTOs/ItemContainerDTO.cs
new file mode 100644
index 000000000..a43c1ff30
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/DTOs/ItemContainerDTO.cs
@@ -0,0 +1,47 @@
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+[Display(Name = "物品收容器信息")]
+
+public class ItemContainerDTO : SfsBaseDataDTOBase
+{
+ ///
+ /// 收容器代码
+ ///
+ [Display(Name = "收容器代码")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerCode { get; set; }
+
+ ///
+ /// 收容器名称
+ ///
+ [Display(Name = "收容器名称")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerName { get; set; }
+ ///
+ /// 收容器类型
+ ///
+ [Display(Name = "收容器类型")]
+ [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerType { get; set; }
+ ///
+ /// 物品代码
+ ///
+ [Display(Name = "物品代码")]
+ [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ItemCode { get; set; }
+
+ ///
+ /// 收容器计量单位
+ ///
+ [Display(Name = "收容器计量单位")]
+ public string BasicUom { get; set; }
+
+ ///
+ /// 收容器数量
+ ///
+ [Display(Name = "收容器数量")]
+ public decimal Qty { get; set; }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs
new file mode 100644
index 000000000..783e1ab02
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs
@@ -0,0 +1,11 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Win_in.Sfs.Shared.Application.Contracts;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public interface IItemContainerAppService : ISfsBaseDataAppServiceBase, ISfsUpsertAppService
+{
+ Task> GetListByItemCodeAsync(string itemCode);
+ Task UpsertAndItemBasicUomAsync(string itemCode,decimal stdPackQty);
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerEditInput.cs
new file mode 100644
index 000000000..ce87fa288
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerEditInput.cs
@@ -0,0 +1,53 @@
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public class ItemContainerEditInput : SfsBaseDataCreateOrUpdateInputBase
+{
+ #region Base
+ ///
+ /// 收容器名称
+ ///
+ [Display(Name = "收容器名称")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerName { get; set; }
+
+ ///
+ /// 收容器类型
+ ///
+ [Display(Name = "收容器类型")]
+ [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerType { get; set; }
+
+ ///
+ /// 收容器计量单位
+ ///
+ [Display(Name = "收容器计量单位")]
+ public string BasicUom { get; set; }
+
+ ///
+ /// 收容器数量
+ ///
+ [Display(Name = "收容器数量")]
+ public decimal Qty { get; set; }
+ #endregion
+
+ #region Create
+ ///
+ /// 收容器代码
+ ///
+ [Display(Name = "收容器代码")]
+ [Required(ErrorMessage = "{0}是必填项")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerCode { get; set; }
+
+ ///
+ /// 物品代码
+ ///
+ [Display(Name = "物品代码")]
+ [Required(ErrorMessage = "{0}是必填项")]
+ [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ItemCode { get; set; }
+ #endregion
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerImportInput.cs
new file mode 100644
index 000000000..4cc761d6c
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerImportInput.cs
@@ -0,0 +1,64 @@
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Application.Contracts;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+[Display(Name = "物品收容器")]
+public class ItemContainerImportInput : SfsBaseDataImportInputBase
+{
+ ///
+ /// 收容器代码
+ ///
+ [Key]
+ [Display(Name = "收容器代码")]
+ [Required(ErrorMessage = "{0}不能为空")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerCode { get; set; }
+
+ ///
+ /// 收容器名称
+ ///
+ [Display(Name = "收容器名称")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ContainerName { get; set; }
+
+ ///
+ /// 收容器类型
+ ///
+ [Display(Name = "收容器类型")]
+ [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ [ValueMapping("EA", "EA")]
+ [ValueMapping("Box", "Box")]
+ [ValueMapping("Pallet", "Pallet")]
+ public string ContainerType { get; set; }
+
+ ///
+ /// 物品编号
+ ///
+ [Key]
+ [Display(Name = "物品编号")]
+ [Required(ErrorMessage = "物品编号不能为空")]
+ [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string ItemCode { get; set; }
+
+ ///
+ /// 收容器计量单位
+ ///
+ [Display(Name = "收容器计量单位")]
+ public string BasicUom { get; set; }
+
+ ///
+ /// 收容器数量
+ ///
+ [Display(Name = "收容器数量")]
+ [Required(ErrorMessage = "{0}是必填项")]
+ public decimal Qty { get; set; }
+
+ ///
+ /// 备注
+ ///
+ [Display(Name = "备注")]
+ [StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string Remark { get; set; }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/ItemContainerPermissions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/ItemContainerPermissions.cs
new file mode 100644
index 000000000..7ad3d1227
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/ItemContainerPermissions.cs
@@ -0,0 +1,21 @@
+using Volo.Abp.Authorization.Permissions;
+using Win_in.Sfs.Basedata.Domain;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public static class ItemContainerPermissions
+{
+
+ public const string Default = BasedataPermissions.GroupName + "." + nameof(ItemContainer);
+ public const string Create = Default + "." + BasedataPermissions.CreateStr;
+ public const string Update = Default + "." + BasedataPermissions.UpdateStr;
+ public const string Delete = Default + "." + BasedataPermissions.DeleteStr;
+
+ public static void AddItemContainerPermission(this PermissionGroupDefinition permissionGroup)
+ {
+ var itemContainerPermission = permissionGroup.AddPermission(Default, BasedataPermissionDefinitionProvider.L(nameof(ItemContainer)));
+ itemContainerPermission.AddChild(Create, BasedataPermissionDefinitionProvider.L(BasedataPermissions.CreateStr));
+ itemContainerPermission.AddChild(Update, BasedataPermissionDefinitionProvider.L(BasedataPermissions.UpdateStr));
+ itemContainerPermission.AddChild(Delete, BasedataPermissionDefinitionProvider.L(BasedataPermissions.DeleteStr));
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs
index 761725ba0..f4964079d 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs
@@ -35,6 +35,7 @@ public class BasedataPermissionDefinitionProvider : PermissionDefinitionProvider
basedataGroup.AddItemBasicPermission();
basedataGroup.AddItemCategoryPermission();
basedataGroup.AddItemPackPermission();
+ basedataGroup.AddItemContainerPermission();
basedataGroup.AddCategoryPermission();
basedataGroup.AddPositionCodePermission();
basedataGroup.AddWorkShopPermission();
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
index c5301da0f..703b60180 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
@@ -27,6 +27,7 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
ItemBasicAutoMapperProfile();
ItemCategoryAutoMapperProfile();
ItemPackAutoMapperProfile();
+ ItemContainerAutoMapperProfile();
ItemStoreRelationAutoMapperProfile();
ItemSafetyStockAutoMapperProfile();
LocationAutoMapperProfile();
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
new file mode 100644
index 000000000..79ff81b08
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
@@ -0,0 +1,69 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Threading.Tasks;
+
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp.Caching;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Basedata.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application;
+
+[Authorize]
+[Route($"{BasedataConsts.RootPath}item-container")]
+
+public class ItemContainerAppService
+ : SfsBaseDataAppServiceBase
+ , IItemContainerAppService
+{
+ private readonly IItemContainerManager _manager;
+ private new readonly IItemContainerRepository _repository;
+
+ public ItemContainerAppService(
+ IItemContainerRepository repository
+ , IDistributedCache cache
+ , IItemContainerManager manager
+ , IItemBasicAppService itemBasicAppService) : base(repository, cache)
+ {
+ base.CreatePolicyName = ItemContainerPermissions.Create;
+ base.UpdatePolicyName = ItemContainerPermissions.Update;
+ base.DeletePolicyName = ItemContainerPermissions.Delete;
+ _repository = repository;
+ _manager = manager;
+ }
+
+ [HttpPost("upsert")]
+ public virtual async Task UpsertAsync(ItemContainerEditInput input)
+ {
+ var entity = ObjectMapper.Map(input);
+ await _repository.UpsertAsync(entity).ConfigureAwait(false);
+ }
+
+ [HttpGet("list/by-item")]
+ public virtual async Task> GetListByItemCodeAsync(string itemCode)
+ {
+ var entities = await _repository.GetListAsync(c => c.ItemCode == itemCode).ConfigureAwait(false);
+ var dtos = ObjectMapper.Map, List>(entities);
+ return dtos;
+ }
+
+
+ protected override async Task ValidateImportModelAsync(ItemContainerImportInput importInput, List validationRresult)
+ {
+ await base.CheckItemBasicPackUomAsync(importInput.ItemCode, importInput.BasicUom, validationRresult).ConfigureAwait(false);
+ //await base.CheckItemContainerAsync(importInput.ContainerCode, validationRresult).ConfigureAwait(false);
+ }
+
+ [HttpPut("upsert-and-item-basic-std-pack")]
+ public async Task UpsertAndItemBasicUomAsync(string itemCode,decimal stdPackQty)
+ {
+ var itemContainers=await _repository.GetListAsync(p => p.ItemCode == itemCode).ConfigureAwait(false);
+ var entity=itemContainers.First();
+ entity.Qty = stdPackQty;
+ await _repository.UpsertAsync(entity).ConfigureAwait(false);
+ await ItemBasicAppService.UpsertStdPackQtyAsync(itemCode, stdPackQty).ConfigureAwait(false);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAutoMapperProfile.cs
new file mode 100644
index 000000000..e19b2260e
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAutoMapperProfile.cs
@@ -0,0 +1,33 @@
+using AutoMapper;
+using Volo.Abp.AutoMapper;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Basedata.Domain;
+
+namespace Win_in.Sfs.Basedata.Application;
+
+public partial class BasedataApplicationAutoMapperProfile : Profile
+{
+ private void ItemContainerAutoMapperProfile()
+ {
+ CreateMap()
+ .ReverseMap();
+
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ .Ignore(x => x.TenantId)
+ .Ignore(x => x.ExtraProperties)
+ .Ignore(x => x.ConcurrencyStamp)
+ ;
+
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ .Ignore(x => x.TenantId)
+ .Ignore(x=>x.Id)
+ .Ignore(x => x.ExtraProperties)
+ .Ignore(x => x.ConcurrencyStamp)
+ ;
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ .Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerManager.cs
new file mode 100644
index 000000000..83adc37e2
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerManager.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.Domain.Services;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public interface IItemContainerManager : IDomainService, IBulkImportService
+{
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerRepository.cs
new file mode 100644
index 000000000..d88876c21
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerRepository.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public interface IItemContainerRepository : ISfsBaseDataRepositoryBase, ISfsBulkRepositoryBase
+{
+ Task UpsertAsync(ItemContainer entity);
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainer.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainer.cs
new file mode 100644
index 000000000..67fc5c48e
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainer.cs
@@ -0,0 +1,46 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Win_in.Sfs.Shared.Domain.Entities;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public class ItemContainer : SfsBaseDataAggregateRootBase
+{
+ ///
+ /// 收容器代码
+ ///
+ [IgnoreUpdate]
+ public string ContainerCode { get; set; }
+
+ ///
+ /// 收容器名称
+ ///
+ public string ContainerName { get; set; }
+
+ ///
+ /// 收容器类型
+ ///
+ public string ContainerType { get; set; }
+
+ ///
+ /// 物品代码
+ ///
+ [IgnoreUpdate]
+ public string ItemCode { get; set; }
+
+ ///
+ /// 计量单位
+ ///
+ [Display(Name = "计量单位")]
+ [MaxLength(SfsPropertyConst.CodeLength)]
+ public string BasicUom { get; set; }
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ [Column(TypeName = "decimal(18,6)")]
+ public decimal Qty { get; set; }
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainerManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainerManager.cs
new file mode 100644
index 000000000..89579161d
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainerManager.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Services;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public class ItemContainerManager : DomainService, IItemContainerManager
+{
+ private readonly IItemContainerRepository _repository;
+
+ private readonly IItemBasicRepository _itemBasicRepository;
+
+ public ItemContainerManager(IItemContainerRepository repository, IItemBasicRepository itemBasicRepository)
+ {
+ _repository = repository;
+ _itemBasicRepository = itemBasicRepository;
+ }
+
+ ///
+ /// 执行导入
+ ///
+ public virtual async Task ImportDataAsync(List mergeEntities, List deleteEntities = null)
+ {
+ if (deleteEntities != null && deleteEntities.Count > 0)
+ {
+ await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
+ }
+
+ await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs
index 239048798..afd345a0e 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs
@@ -36,6 +36,7 @@ public class BasedataDbContext : AbpDbContext, IBasedataDbCon
public DbSet ItemBasics { get; set; }
public DbSet ItemCategories { get; set; }
public DbSet ItemPacks { get; set; }
+ public DbSet ItemContainers { get; set; }
public DbSet ItemStoreRelations { get; set; }
public DbSet ItemSafetyStocks { get; set; }
public DbSet Categories { get; set; }
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
index cb9249054..6b2cb3a9f 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
@@ -47,6 +47,7 @@ public static class BasedataDbContextModelCreatingExtensions
builder.ConfigureItemBasic(options);
builder.ConfigureItemCategory(options);
builder.ConfigureItemPack(options);
+ builder.ConfigureItemContainer(options);
builder.ConfigureItemStoreRelation(options);
builder.ConfigureItemSafetyStock(options);
builder.ConfigureCategory(options);
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
index c2fa0071a..117fa11d5 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
@@ -51,6 +51,7 @@ public class BasedataEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient();
context.Services.AddTransient();
context.Services.AddTransient();
+ context.Services.AddTransient();
context.Services.AddTransient();
context.Services.AddTransient();
context.Services.AddTransient();
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs
index c259efd44..383cc21d4 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs
@@ -36,6 +36,8 @@ public interface IBasedataDbContext : IEfCoreDbContext
public DbSet ItemBasics { get; }
public DbSet ItemCategories { get; }
public DbSet ItemPacks { get; }
+ public DbSet ItemContainers { get; }
+ public DbSet PositionCodes { get; }
public DbSet ItemStoreRelations { get; }
public DbSet ItemSafetyStocks { get; }
public DbSet Categories { get; }
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerDbContextModelCreatingExtensions.cs
new file mode 100644
index 000000000..b94ff820a
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerDbContextModelCreatingExtensions.cs
@@ -0,0 +1,36 @@
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore.Modeling;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Shared.EntityFrameworkCore;
+
+namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
+
+public static class ItemContainerDbContextModelCreatingExtensions
+{
+ public static void ConfigureItemContainer(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options)
+ {
+ builder.Entity(b =>
+ {
+ //Configure table & schema name
+ b.ToTable(options.TablePrefix + nameof(ItemContainer), options.Schema);
+ //Configure ABP properties
+ b.ConfigureByConvention();
+ //Configure Sfs base properties
+ b.ConfigureSfsBase();
+
+ //Properties
+
+ b.Property(q => q.ContainerCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.ItemCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.ContainerName).HasMaxLength(SfsPropertyConst.NameLength);
+ b.Property(q => q.ContainerType).HasMaxLength(SfsPropertyConst.NameLength);
+
+ //Relations
+ //None
+
+ //Indexes
+ b.HasIndex(q => new { q.ItemCode, q.ContainerCode }).IsUnique();
+ });
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerEfCoreRepository.cs
new file mode 100644
index 000000000..72106066c
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerEfCoreRepository.cs
@@ -0,0 +1,32 @@
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
+
+public class ItemContainerEfCoreRepository : SfsBaseDataEfCoreRepositoryBase, IItemContainerRepository, ISfsBulkRepositoryBase
+{
+ public ItemContainerEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider)
+ {
+
+ }
+
+ public virtual async Task UpsertAsync(ItemContainer entity)
+ {
+ var dbSet = await GetDbSetAsync().ConfigureAwait(false);
+ var exist = await dbSet.FirstOrDefaultAsync(p => p.ItemCode == entity.ItemCode).ConfigureAwait(false);
+ if (exist == null)
+ {
+ var insRet = await InsertAsync(entity).ConfigureAwait(false);
+ }
+ else
+ {
+ exist.ContainerName = entity.ContainerName;
+ exist.ContainerCode = entity.ContainerCode;
+ exist.BasicUom = entity.BasicUom;
+ exist.Qty = entity.Qty;
+ }
+ }
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ContainerJobs/Inputs/ContainerJobEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ContainerJobs/Inputs/ContainerJobEditInput.cs
index f688c14c4..48643221f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ContainerJobs/Inputs/ContainerJobEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ContainerJobs/Inputs/ContainerJobEditInput.cs
@@ -6,7 +6,7 @@ using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
-public class ContainerJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput
+public class ContainerJobEditInput : SfsJobCreateUpdateInputBase
{
#region Create
@@ -60,11 +60,6 @@ public class ContainerJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateI
[Required(ErrorMessage = "{0}是必填项")]
public bool IsAutoComplete { get; set; }
- ///
- /// 任务明细
- ///
- [Display(Name = "任务明细")]
- [Required(ErrorMessage = "{0}是必填项")]
- public List Details { get; set; } = new();
+
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ContainerNotes/Inputs/ContainerNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ContainerNotes/Inputs/ContainerNoteEditInput.cs
index 55420ab2a..50574b316 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ContainerNotes/Inputs/ContainerNoteEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ContainerNotes/Inputs/ContainerNoteEditInput.cs
@@ -57,13 +57,7 @@ public class ContainerNoteEditInput : SfsStoreCreateOrUpdateInputBase
[Display(Name = "器具规格")]
[StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string SpecificationsType { get; set; }
-
- ///
- /// 明细列表
- ///
- [Display(Name = "明细列表")]
- public List Details { get; set; }
-
+
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ContainerRequests/Inputs/ContainerRequestEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ContainerRequests/Inputs/ContainerRequestEditInput.cs
index 25d984db2..d00e56002 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ContainerRequests/Inputs/ContainerRequestEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ContainerRequests/Inputs/ContainerRequestEditInput.cs
@@ -30,7 +30,6 @@ public class ContainerRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
[Required(ErrorMessage = "{0}是必填项")]
public string SpecificationsType { get; set; }
- [Display(Name = "明细列表")]
- public List Details { get; set; }
+
#endregion
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs
index 8bcb88c9f..79f901e1f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs
@@ -56,10 +56,11 @@ public class ContainerRequestAppService :
[HttpPost("")]
public override async Task CreateAsync(ContainerRequestEditInput input)
{
- input.AutoCompleteJob = false;
+
input.AutoAgree = true;
input.AutoHandle = true;
input.AutoSubmit = true;
+ input.AutoCompleteJob = false;
input.DirectCreateNote = false;
var entity = ObjectMapper.Map(input);
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ContainerJobs/ContainerJob.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ContainerJobs/ContainerJob.cs
index 99e95973c..dabcfd882 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ContainerJobs/ContainerJob.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ContainerJobs/ContainerJob.cs
@@ -36,12 +36,7 @@ public class ContainerJob : SfsJobAggregateRootBase
///
[IgnoreUpdate]
public string SpecificationsType { get; set; }
-
- ///
- /// 任务明细
- ///
- [IgnoreUpdate]
- public override List Details { get; set; } = new List();
+
///
/// 设置任务明细的实际库位和实际数量
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ContainerNotes/ContainerNote.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ContainerNotes/ContainerNote.cs
index 79edc854b..200d68d17 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ContainerNotes/ContainerNote.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ContainerNotes/ContainerNote.cs
@@ -54,12 +54,7 @@ public class ContainerNote : SfsStoreAggregateRootBase, IHa
///
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
-
- ///
- /// 任务明细
- ///
- [IgnoreUpdate]
- public override List Details { get; set; } = new();
+
public void Confirm(DateTime confirmTime)
{
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ContainerRequests/ContainerRequest.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ContainerRequests/ContainerRequest.cs
index d2f13e5cb..446074d86 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ContainerRequests/ContainerRequest.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ContainerRequests/ContainerRequest.cs
@@ -28,10 +28,5 @@ public class ContainerRequest : SfsStoreRequestAggregateRootBase
[IgnoreUpdate]
public string SpecificationsType { get; set; }
-
- ///
- /// 任务明细
- ///
- [IgnoreUpdate]
- public override List Details { get; set; } = new();
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ContainerJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ContainerJobAutoMapperProfile.cs
index ae83fb30c..f1d3e5380 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ContainerJobAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ContainerJobAutoMapperProfile.cs
@@ -14,8 +14,7 @@ public partial class StoreEventAutoMapperProfile : Profile
.ForMember(x => x.JobNumber, y => y.MapFrom(d => d.Number))
.Ignore(x => x.Confirmed)
.Ignore(x => x.ConfirmTime)
- .Ignore(x => x.ActiveDate)
- .Ignore(x => x.Details)
+ .Ignore(x => x.ActiveDate)
;
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/ContainerNoteAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/ContainerNoteAutoMapperProfile.cs
new file mode 100644
index 000000000..3676ad795
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/ContainerNoteAutoMapperProfile.cs
@@ -0,0 +1,22 @@
+using AutoMapper;
+using Volo.Abp.AutoMapper;
+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 ContainerNoteAutoMapperProfile()
+ {
+ CreateMap()
+ .Ignore(x => x.DocNumber)
+ .Ignore(x => x.JobNumber)
+ .Ignore(x => x.Worker)
+ .Ignore(x => x.TransType)
+ .Ignore(x => x.ExtraProperties)
+ .Ignore(x => x.TransSubType)
+ ;
+ }
+
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ContainerRequestMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ContainerRequestMapperProfile.cs
index cddd0c9fd..4d67b8284 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ContainerRequestMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ContainerRequestMapperProfile.cs
@@ -31,16 +31,15 @@ public partial class StoreEventAutoMapperProfile : Profile
.Ignore(x => x.AcceptTime)
.Ignore(x => x.CompleteUserId)
.Ignore(x => x.CompleteUserName)
- .Ignore(x => x.CompleteTime)
- .Ignore(x => x.Details)
+ .Ignore(x => x.CompleteTime)
;
CreateMap()
.ForMember(x => x.ContainerRequestNumber, y => y.MapFrom(d => d.Number))
.Ignore(x => x.JobNumber)
.Ignore(x => x.Confirmed)
- .Ignore(x => x.ConfirmTime)
- .Ignore(x => x.Details);
+ .Ignore(x => x.ConfirmTime);
+
CreateMap()
.ForMember(x => x.FromContainerCode, y => y.MapFrom(d => d.ContainerCode))
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ContainerRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ContainerRequestEventHandler.cs
index 97219e3ee..d190cae40 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ContainerRequestEventHandler.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ContainerRequestEventHandler.cs
@@ -125,33 +125,32 @@ public class ContainerRequestEventHandler
{
var createInput = ObjectMapper.Map(request);
-
-
ContainerNoteDetailInput detail=new ContainerNoteDetailInput();
- createInput.Details = new List();
- detail.ToLocationCode = request.RequestLocationCode;
-
- detail.FromLocationCode = "123";
- detail.FromPackingCode = "123";
- detail.ToPackingCode = "123";
- detail.FromLot = "123";
- detail.ToLot = "123";
- detail.FromLocationErpCode = "123";
- detail.FromWarehouseCode = "123";
- detail.ToLocationErpCode = "123";
- detail.ToWarehouseCode = "123";
- detail.Uom = "123";
- detail.ItemCode = "123";
- detail.ItemName = "123";
-
- //var container = await _equipmentLocApp.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
-
- //if (container != null)
- //{
- // detail.ItemCode = container.Code;
- //}
- createInput.Details.Add(detail);
+ //createInput.Details = new List();
+ //detail.ToLocationCode = request.RequestLocationCode;
+
+ //detail.FromLocationCode = "123";
+ //detail.FromPackingCode = "123";
+ //detail.ToPackingCode = "123";
+ //detail.FromLot = "123";
+ //detail.ToLot = "123";
+ //detail.FromLocationErpCode = "123";
+ //detail.FromWarehouseCode = "123";
+ //detail.ToLocationErpCode = "123";
+ //detail.ToWarehouseCode = "123";
+ //detail.Uom = "123";
+ //detail.ItemCode = "123";
+ //detail.ItemName = "123";
+
+ ////var container = await _equipmentLocApp.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
+
+ ////if (container != null)
+ ////{
+ //// detail.ItemCode = container.Code;
+ ////}
+
+ //createInput.Details.Add(detail);
return createInput;
}
@@ -165,25 +164,22 @@ public class ContainerRequestEventHandler
createInput.WarehouseCode = "T8";
- ContainerJobDetailInput detail=new ContainerJobDetailInput();
+ //ContainerJobDetailInput detail=new ContainerJobDetailInput();
- detail.FromLocationCode = "123";
- detail.ToLocationCode = "123";
+ //detail.FromLocationCode = "123";
+ //detail.ToLocationCode = "123";
- detail.ItemCode = "123";
- detail.ItemName = "123";
- detail.RecommendPackingCode = "123";
- detail.RecommendLot = "123";
- detail.RecommendFromLocationCode = "123";
- detail.RecommendFromLocationErpCode = "123";
- detail.Uom = "123";
+ //detail.ItemCode = "123";
+ //detail.ItemName = "123";
+ //detail.RecommendPackingCode = "123";
+ //detail.RecommendLot = "123";
+ //detail.RecommendFromLocationCode = "123";
+ //detail.RecommendFromLocationErpCode = "123";
+ //detail.Uom = "123";
- createInput.Details.Add(detail);
-
-
+ //createInput.Details.Add(detail);
-
return createInput ;
}
From 405427b6f430f58f84ebc6bd4f9c35ae85031620 Mon Sep 17 00:00:00 2001
From: zhaoxinyu <89237069@qq.com>
Date: Tue, 2 Apr 2024 11:06:19 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=93=E5=AD=98?=
=?UTF-8?q?=E4=BA=8B=E5=8A=A1=E6=9E=9A=E4=B8=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Enums/Inventory/EnumTransSubType.cs | 9 +
.../Enums/Store/Types/EnumMesType.cs | 13 ++
.../Notes/MesNotes/DTOs/MesNoteDTO.cs | 8 +-
.../Notes/MesNotes/Inputs/MesNoteEditInput.cs | 11 +-
.../MesNotes/Inputs/MesNoteImportInput.cs | 4 +-
.../Notes/MesNotes/MesNote.cs | 3 +-
...MesNoteDbContextModelCreatingExtensions.cs | 2 +-
.../CoatingIssueNoteEventHandler.cs | 159 ++++++++++++++++++
8 files changed, 196 insertions(+), 13 deletions(-)
create mode 100644 be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumMesType.cs
create mode 100644 be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs
diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
index 57d1e43cd..2ca7b36ab 100644
--- a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Inventory/EnumTransSubType.cs
@@ -198,4 +198,13 @@ public enum EnumTransSubType
///
[Display(Name = "导入盘点计划")]
ExcelInCountPlan = 6002,
+ [Display(Name = "MES冻结")]
+ MesFreeze = 10001,
+ [Display(Name = "MES解冻")]
+ MesUnFreeze = 10002,
+ [Display(Name = "MES不合格")]
+ MesUnQualified = 10003
+
+
+
}
diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumMesType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumMesType.cs
new file mode 100644
index 000000000..da72d0acb
--- /dev/null
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/Types/EnumMesType.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Win_in.Sfs.Shared.Domain.Shared.Enums.Store.Types;
+public enum EnumMesType
+{
+ MesFreeze=10001,
+ MesUnFreeze=10002,
+ MesUnQualified=10003
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesNoteDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesNoteDTO.cs
index 06a7a4a5e..24ca29a90 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesNoteDTO.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/DTOs/MesNoteDTO.cs
@@ -12,15 +12,15 @@ public class MesNoteDTO : SfsStoreDTOBase, IHasNumber
public string JobNumber { get; set; }
///
- /// 报废类型
+ /// 类型
///
- [Display(Name = "报废类型")]
+ [Display(Name = "类型")]
public string Type { get; set; }
///
- /// 报废请求单号
+ /// 请求单号
///
- [Display(Name = "报废请求单号")]
+ [Display(Name = "请求单号")]
public string ScrapRequestNumber { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs
index 8f36d14c6..ee271489d 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteEditInput.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store.Types;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@@ -16,20 +17,20 @@ public class MesNoteEditInput : SfsStoreCreateOrUpdateInputBase
///
/// 报废记录号
///
- [Display(Name = "报废记录号")]
+ [Display(Name = "记录号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Number { get; set; }
///
- /// 报废请求单号
+ /// 请求单号
///
- [Display(Name = "报废请求单号")]
- public string ScrapRequestNumber { get; set; }
+ [Display(Name = "请求单号")]
+ public string MesRequestNumber { get; set; }
///
/// 报废类型
///
- [Display(Name = "报废类型")]
+ [Display(Name = "类型")]
public string Type { get; set; }
///
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteImportInput.cs
index 138e02958..5a56ab8c6 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteImportInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/Inputs/MesNoteImportInput.cs
@@ -14,7 +14,7 @@ public class MesNoteImportInput : SfsStoreImportInputBase
///
/// 报废请求单号
///
- [Display(Name = "报废请求单号")]
- public string ScrapRequestNumber { get; set; }
+ [Display(Name = "请求单号")]
+ public string MesRequestNumber { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/MesNotes/MesNote.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/MesNotes/MesNote.cs
index 22b6cae8b..8f08e2041 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/MesNotes/MesNote.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/MesNotes/MesNote.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Win_in.Sfs.Shared.Domain.Entities;
+using Win_in.Sfs.Shared.Domain.Shared.Enums.Store.Types;
namespace Win_in.Sfs.Wms.Store.Domain;
@@ -18,7 +19,7 @@ public class MesNote : SfsStoreAggregateRootBase, IHasJobNumber
/// 报废请求单号
///
[IgnoreUpdate]
- public string ScrapRequestNumber { get; set; }
+ public string MesRequestNumber { get; set; }
///
/// Mes类型
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/MesNotes/MesNoteDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/MesNotes/MesNoteDbContextModelCreatingExtensions.cs
index 27a3b4842..38d31326e 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/MesNotes/MesNoteDbContextModelCreatingExtensions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/MesNotes/MesNoteDbContextModelCreatingExtensions.cs
@@ -20,7 +20,7 @@ public static class MesNoteDbContextModelCreatingExtensions
//Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
- b.Property(q => q.ScrapRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.MesRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
//Relations
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs
new file mode 100644
index 000000000..e6c6f076d
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/CoatingIssueNoteEventHandler.cs
@@ -0,0 +1,159 @@
+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.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.Domain;
+using Win_in.Sfs.Wms.Store.Event.Transaction;
+using Win_in.Sfs.Wms.Store.Notes.IssueNotes;
+
+namespace Win_in.Sfs.Wms.Store.Event.Transactions;
+
+public class CoatingIssueNoteEventHandler
+ : StoreInventoryEventHandlerBase
+ , ILocalEventHandler>
+ , ILocalEventHandler>>
+ , ILocalEventHandler>
+{
+ private const EnumTransType TransType = EnumTransType.Issue;
+
+ private readonly ILocationAppService _locationAppService;
+
+ public CoatingIssueNoteEventHandler(ILocationAppService locationAppService)
+ {
+ _locationAppService = locationAppService;
+ }
+
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData)
+ {
+ var entity = eventData.Entity;
+ var transferLogs = new List();
+ var route = entity.UseOnTheWayLocation
+ ? EnumTransferRoute.SourceToOnTheWay
+ : EnumTransferRoute.SourceToDestination;
+ transferLogs.AddRange(await BuildTransferLogsAsync(entity, route).ConfigureAwait(false));
+
+ //如果是mes拉动 先发到在途
+ if (entity.RequestType == EnumMaterialRequestType.Issue_WIP.ToString())
+ {
+ route = EnumTransferRoute.SourceToOnTheWay;
+ }
+
+ await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
+ }
+
+ [UnitOfWork]
+ public virtual async Task HandleEventAsync(SfsCreatedEntityEventData> eventData)
+ {
+ var entities = eventData.Entity;
+ var transferLogs = new List();
+ //如果要做库存事务汇总,可以修改此处
+ foreach (var CoatingIssueNote in entities)
+ {
+ var route = CoatingIssueNote.UseOnTheWayLocation
+ ? EnumTransferRoute.SourceToOnTheWay
+ : EnumTransferRoute.SourceToDestination;
+ transferLogs.AddRange(await BuildTransferLogsAsync(CoatingIssueNote, route).ConfigureAwait(false));
+ }
+
+ await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
+ }
+
+ [UnitOfWork]
+
+ public virtual async Task HandleEventAsync(SfsConfirmedEntityEventData eventData)
+ {
+ var entity = eventData.Entity;
+
+ var inputList = await BuildTransferLogsAsync(entity, EnumTransferRoute.OnTheWayToDestination).ConfigureAwait(false);
+ await AddTransferLogsAsync(inputList).ConfigureAwait(false);
+ }
+
+ private async Task AddTransferLogsAsync(List inputList)
+ {
+ var transferLogs = new List();
+
+ transferLogs.AddRange(inputList);
+
+ await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
+
+ }
+
+ private async Task> BuildTransferLogsAsync(CoatingIssueNote CoatingIssueNote, EnumTransferRoute route)
+ {
+ var transferLogs = new List();
+ foreach (var detail in CoatingIssueNote.Details.Where(detail => detail.Qty != 0))
+ {
+ var transferLog = ObjectMapper.Map(detail);
+
+ LocationDTO fromLocationDTO = null;
+ LocationDTO toLocationDTO = null;
+
+ if (CoatingIssueNote.UseOnTheWayLocation)
+ {
+ var location = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
+ switch (route)
+ {
+ case EnumTransferRoute.SourceToOnTheWay:
+ fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
+
+ toLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
+ break;
+ case EnumTransferRoute.OnTheWayToDestination:
+ fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
+
+ toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
+
+ await RemovePackingCodeAndContainerCodeAndLotAsync(transferLog).ConfigureAwait(false);
+ break;
+ case EnumTransferRoute.SourceToDestination:
+ default:
+ throw new ArgumentOutOfRangeException(nameof(route), route, null);
+ }
+ }
+ else
+ {
+ fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
+ toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
+ }
+
+ transferLog.FromLocationCode = fromLocationDTO.Code;
+ transferLog.FromLocationArea = fromLocationDTO.AreaCode;
+ transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode;
+ transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode;
+
+ transferLog.ToLocationCode = toLocationDTO.Code;
+ transferLog.ToLocationArea = toLocationDTO.AreaCode;
+ transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode;
+ transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode;
+ transferLog.TransSubType = Enum.Parse(CoatingIssueNote.RequestType);
+ transferLog.TransType = TransType;
+ transferLog.DocNumber = CoatingIssueNote.Number;
+ transferLog.JobNumber = CoatingIssueNote.JobNumber;
+
+ transferLogs.Add(transferLog);
+ }
+
+ return transferLogs;
+ }
+
+ private async Task RemovePackingCodeAndContainerCodeAndLotAsync(TransferLogEditInput transferLogCreateInput)
+ {
+ transferLogCreateInput.ToPackingCode = "";
+ transferLogCreateInput.ToLot = "";
+ transferLogCreateInput.ToContainerCode = "";
+
+ transferLogCreateInput.FromPackingCode = "";
+ transferLogCreateInput.FromLot = "";
+ transferLogCreateInput.FromContainerCode = "";
+
+
+ }
+
+}
From fe954d1143e04ab7f8a6b6ebb3823aeac6b14436 Mon Sep 17 00:00:00 2001
From: zhouhongjun <565221961@qq.com>
Date: Tue, 2 Apr 2024 11:17:40 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E6=94=B6=E5=AE=B9=E5=99=A8=E6=A0=87?=
=?UTF-8?q?=E5=8C=85=E9=87=8D=E5=86=99=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=9F=BA=E7=A1=80=E6=A0=A1=E9=AA=8C?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ItemContainers/ItemContainerAppService.cs | 31 +++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
index 79ff81b08..a7210b64c 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
@@ -5,10 +5,14 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Volo.Abp;
using Volo.Abp.Caching;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application;
@@ -35,6 +39,33 @@ public class ItemContainerAppService
_manager = manager;
}
+ ///
+ /// 用来重写 新增实体
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("")]
+ [UnitOfWork]
+ public override async Task CreateAsync(ItemContainerEditInput input)
+ {
+ var existEntity = await _repository.FirstOrDefaultAsync(p=>p.ContainerCode==input.ContainerCode).ConfigureAwait(false);
+ if (existEntity != null)
+ {
+ throw new UserFriendlyException($"{input.ContainerCode} 已存在");
+ }
+
+ var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.ItemCode).ConfigureAwait(false);
+ Check.NotNull(itemBasic, "物品代码", $"物品 {input.ItemCode} 不存在");
+ if(itemBasic != null)
+ {
+ input.BasicUom = itemBasic.BasicUom;
+ }
+
+
+ return await base.CreateAsync(input).ConfigureAwait(false);
+ }
+
[HttpPost("upsert")]
public virtual async Task UpsertAsync(ItemContainerEditInput input)
{