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 ;
}