Browse Source

增加收容数标包管理功能

dev_DY_CC
周红军 1 year ago
parent
commit
4ad3e33a90
  1. 4
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ContainerJobController.cs
  2. 47
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/DTOs/ItemContainerDTO.cs
  3. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs
  4. 53
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerEditInput.cs
  5. 64
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/Inputs/ItemContainerImportInput.cs
  6. 21
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/ItemContainerPermissions.cs
  7. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs
  8. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
  9. 69
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
  10. 33
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAutoMapperProfile.cs
  11. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerManager.cs
  12. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/IItemContainerRepository.cs
  13. 46
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainer.cs
  14. 31
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ItemContainers/ItemContainerManager.cs
  15. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs
  16. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
  17. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
  18. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs
  19. 36
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerDbContextModelCreatingExtensions.cs
  20. 32
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ItemContainers/ItemContainerEfCoreRepository.cs
  21. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ContainerJobs/Inputs/ContainerJobEditInput.cs
  22. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ContainerNotes/Inputs/ContainerNoteEditInput.cs
  23. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ContainerRequests/Inputs/ContainerRequestEditInput.cs
  24. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ContainerRequests/ContainerRequestAppService.cs
  25. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ContainerJobs/ContainerJob.cs
  26. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ContainerNotes/ContainerNote.cs
  27. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ContainerRequests/ContainerRequest.cs
  28. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ContainerJobAutoMapperProfile.cs
  29. 22
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/ContainerNoteAutoMapperProfile.cs
  30. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ContainerRequestMapperProfile.cs
  31. 72
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ContainerRequestEventHandler.cs

4
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ContainerJobController.cs

@ -112,9 +112,13 @@ public class ContainerJobController : AbpController
if(!string.IsNullOrEmpty(item.SpecificationsType))
{
var dictName = dtos.Items.FirstOrDefault(t => t.Code == item.SpecificationsType);
if(dictName != null)
{
item.SpecificationsTypeName = dictName.Name;
}
}
}

47
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
{
/// <summary>
/// 收容器代码
/// </summary>
[Display(Name = "收容器代码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerCode { get; set; }
/// <summary>
/// 收容器名称
/// </summary>
[Display(Name = "收容器名称")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerName { get; set; }
/// <summary>
/// 收容器类型
/// </summary>
[Display(Name = "收容器类型")]
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerType { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
/// <summary>
/// 收容器计量单位
/// </summary>
[Display(Name = "收容器计量单位")]
public string BasicUom { get; set; }
/// <summary>
/// 收容器数量
/// </summary>
[Display(Name = "收容器数量")]
public decimal Qty { get; set; }
}

11
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<ItemContainerDTO, SfsBaseDataRequestInputBase, ItemContainerEditInput>, ISfsUpsertAppService<ItemContainerEditInput>
{
Task<List<ItemContainerDTO>> GetListByItemCodeAsync(string itemCode);
Task UpsertAndItemBasicUomAsync(string itemCode,decimal stdPackQty);
}

53
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
/// <summary>
/// 收容器名称
/// </summary>
[Display(Name = "收容器名称")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerName { get; set; }
/// <summary>
/// 收容器类型
/// </summary>
[Display(Name = "收容器类型")]
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerType { get; set; }
/// <summary>
/// 收容器计量单位
/// </summary>
[Display(Name = "收容器计量单位")]
public string BasicUom { get; set; }
/// <summary>
/// 收容器数量
/// </summary>
[Display(Name = "收容器数量")]
public decimal Qty { get; set; }
#endregion
#region Create
/// <summary>
/// 收容器代码
/// </summary>
[Display(Name = "收容器代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerCode { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
#endregion
}

64
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
{
/// <summary>
/// 收容器代码
/// </summary>
[Key]
[Display(Name = "收容器代码")]
[Required(ErrorMessage = "{0}不能为空")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerCode { get; set; }
/// <summary>
/// 收容器名称
/// </summary>
[Display(Name = "收容器名称")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ContainerName { get; set; }
/// <summary>
/// 收容器类型
/// </summary>
[Display(Name = "收容器类型")]
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
[ValueMapping("EA", "EA")]
[ValueMapping("Box", "Box")]
[ValueMapping("Pallet", "Pallet")]
public string ContainerType { get; set; }
/// <summary>
/// 物品编号
/// </summary>
[Key]
[Display(Name = "物品编号")]
[Required(ErrorMessage = "物品编号不能为空")]
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
/// <summary>
/// 收容器计量单位
/// </summary>
[Display(Name = "收容器计量单位")]
public string BasicUom { get; set; }
/// <summary>
/// 收容器数量
/// </summary>
[Display(Name = "收容器数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { get; set; }
/// <summary>
/// 备注
/// </summary>
[Display(Name = "备注")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Remark { get; set; }
}

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

1
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();

1
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();

69
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<ItemContainer, ItemContainerDTO, SfsBaseDataRequestInputBase, ItemContainerEditInput, ItemContainerImportInput>
, IItemContainerAppService
{
private readonly IItemContainerManager _manager;
private new readonly IItemContainerRepository _repository;
public ItemContainerAppService(
IItemContainerRepository repository
, IDistributedCache<ItemContainerDTO> 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<ItemContainerEditInput, ItemContainer>(input);
await _repository.UpsertAsync(entity).ConfigureAwait(false);
}
[HttpGet("list/by-item")]
public virtual async Task<List<ItemContainerDTO>> GetListByItemCodeAsync(string itemCode)
{
var entities = await _repository.GetListAsync(c => c.ItemCode == itemCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<ItemContainer>, List<ItemContainerDTO>>(entities);
return dtos;
}
protected override async Task ValidateImportModelAsync(ItemContainerImportInput importInput, List<ValidationResult> 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);
}
}

33
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<ItemContainer, ItemContainerDTO>()
.ReverseMap();
CreateMap<ItemContainerImportInput, ItemContainer>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.TenantId)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
;
CreateMap<ItemContainerEditInput, ItemContainer>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.TenantId)
.Ignore(x=>x.Id)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
;
CreateMap<ItemContainerEditInput, ItemContainer>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id);
}
}

9
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<ItemContainer>
{
}

9
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<ItemContainer>, ISfsBulkRepositoryBase<ItemContainer>
{
Task UpsertAsync(ItemContainer entity);
}

46
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
{
/// <summary>
/// 收容器代码
/// </summary>
[IgnoreUpdate]
public string ContainerCode { get; set; }
/// <summary>
/// 收容器名称
/// </summary>
public string ContainerName { get; set; }
/// <summary>
/// 收容器类型
/// </summary>
public string ContainerType { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[IgnoreUpdate]
public string ItemCode { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
[MaxLength(SfsPropertyConst.CodeLength)]
public string BasicUom { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
[Column(TypeName = "decimal(18,6)")]
public decimal Qty { get; set; }
}

31
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;
}
/// <summary>
/// 执行导入
/// </summary>
public virtual async Task ImportDataAsync(List<ItemContainer> mergeEntities, List<ItemContainer> deleteEntities = null)
{
if (deleteEntities != null && deleteEntities.Count > 0)
{
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
}
await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
}
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs

@ -36,6 +36,7 @@ public class BasedataDbContext : AbpDbContext<BasedataDbContext>, IBasedataDbCon
public DbSet<ItemBasic> ItemBasics { get; set; }
public DbSet<ItemCategory> ItemCategories { get; set; }
public DbSet<ItemPack> ItemPacks { get; set; }
public DbSet<ItemContainer> ItemContainers { get; set; }
public DbSet<ItemStoreRelation> ItemStoreRelations { get; set; }
public DbSet<ItemSafetyStock> ItemSafetyStocks { get; set; }
public DbSet<Category> Categories { get; set; }

1
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);

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs

@ -51,6 +51,7 @@ public class BasedataEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient<IItemBasicRepository, ItemBasicEfCoreRepository>();
context.Services.AddTransient<IItemCategoryRepository, ItemCategoryEfCoreRepository>();
context.Services.AddTransient<IItemPackRepository, ItemPackEfCoreRepository>();
context.Services.AddTransient<IItemContainerRepository, ItemContainerEfCoreRepository>();
context.Services.AddTransient<IItemStoreRelationRepository, ItemStoreRelationEfCoreRepository>();
context.Services.AddTransient<IItemSafetyStockRepository, ItemSafetyStockEfCoreRepository>();
context.Services.AddTransient<ICategoryRepository, CategoryEfCoreRepository>();

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs

@ -36,6 +36,8 @@ public interface IBasedataDbContext : IEfCoreDbContext
public DbSet<ItemBasic> ItemBasics { get; }
public DbSet<ItemCategory> ItemCategories { get; }
public DbSet<ItemPack> ItemPacks { get; }
public DbSet<ItemContainer> ItemContainers { get; }
public DbSet<PositionCode> PositionCodes { get; }
public DbSet<ItemStoreRelation> ItemStoreRelations { get; }
public DbSet<ItemSafetyStock> ItemSafetyStocks { get; }
public DbSet<Category> Categories { get; }

36
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<ItemContainer>(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();
});
}
}

32
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<BasedataDbContext, ItemContainer>, IItemContainerRepository, ISfsBulkRepositoryBase<ItemContainer>
{
public ItemContainerEfCoreRepository(IDbContextProvider<BasedataDbContext> 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;
}
}
}

9
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<ContainerJobDetailInput>
public class ContainerJobEditInput : SfsJobCreateUpdateInputBase
{
#region Create
@ -60,11 +60,6 @@ public class ContainerJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateI
[Required(ErrorMessage = "{0}是必填项")]
public bool IsAutoComplete { get; set; }
/// <summary>
/// 任务明细
/// </summary>
[Display(Name = "任务明细")]
[Required(ErrorMessage = "{0}是必填项")]
public List<ContainerJobDetailInput> Details { get; set; } = new();
#endregion
}

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ContainerNotes/Inputs/ContainerNoteEditInput.cs

@ -58,12 +58,6 @@ public class ContainerNoteEditInput : SfsStoreCreateOrUpdateInputBase
[StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string SpecificationsType { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<ContainerNoteDetailInput> Details { get; set; }
#endregion
}

3
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<ContainerRequestDetailInput> Details { get; set; }
#endregion
}

3
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<ContainerRequestDTO> 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<ContainerRequestEditInput, ContainerRequest>(input);

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ContainerJobs/ContainerJob.cs

@ -37,11 +37,6 @@ public class ContainerJob : SfsJobAggregateRootBase<ContainerJobDetail>
[IgnoreUpdate]
public string SpecificationsType { get; set; }
/// <summary>
/// 任务明细
/// </summary>
[IgnoreUpdate]
public override List<ContainerJobDetail> Details { get; set; } = new List<ContainerJobDetail>();
/// <summary>
/// 设置任务明细的实际库位和实际数量

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ContainerNotes/ContainerNote.cs

@ -55,11 +55,6 @@ public class ContainerNote : SfsStoreAggregateRootBase<ContainerNoteDetail>, IHa
[Display(Name = "确认时间")]
public DateTime? ConfirmTime { get; set; }
/// <summary>
/// 任务明细
/// </summary>
[IgnoreUpdate]
public override List<ContainerNoteDetail> Details { get; set; } = new();
public void Confirm(DateTime confirmTime)
{

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ContainerRequests/ContainerRequest.cs

@ -29,9 +29,4 @@ public class ContainerRequest : SfsStoreRequestAggregateRootBase<ContainerReques
[IgnoreUpdate]
public string SpecificationsType { get; set; }
/// <summary>
/// 任务明细
/// </summary>
[IgnoreUpdate]
public override List<ContainerRequestDetail> Details { get; set; } = new();
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ContainerJobAutoMapperProfile.cs

@ -15,7 +15,6 @@ public partial class StoreEventAutoMapperProfile : Profile
.Ignore(x => x.Confirmed)
.Ignore(x => x.ConfirmTime)
.Ignore(x => x.ActiveDate)
.Ignore(x => x.Details)
;
}

22
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<ContainerNoteDetail, TransferLogEditInput>()
.Ignore(x => x.DocNumber)
.Ignore(x => x.JobNumber)
.Ignore(x => x.Worker)
.Ignore(x => x.TransType)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.TransSubType)
;
}
}

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ContainerRequestMapperProfile.cs

@ -32,15 +32,14 @@ public partial class StoreEventAutoMapperProfile : Profile
.Ignore(x => x.CompleteUserId)
.Ignore(x => x.CompleteUserName)
.Ignore(x => x.CompleteTime)
.Ignore(x => x.Details)
;
CreateMap<ContainerRequest, ContainerNoteEditInput>()
.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<BalanceDTO, ContainerNoteDetailInput>()
.ForMember(x => x.FromContainerCode, y => y.MapFrom(d => d.ContainerCode))

72
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ContainerRequestEventHandler.cs

@ -125,33 +125,32 @@ public class ContainerRequestEventHandler
{
var createInput = ObjectMapper.Map<ContainerRequest, ContainerNoteEditInput>(request);
ContainerNoteDetailInput detail=new ContainerNoteDetailInput();
//createInput.Details = new List<ContainerNoteDetailInput>();
//detail.ToLocationCode = request.RequestLocationCode;
ContainerNoteDetailInput detail=new ContainerNoteDetailInput();
createInput.Details = new List<ContainerNoteDetailInput>();
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;
//}
//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);
createInput.Details.Add(detail);
////if (container != null)
////{
//// detail.ItemCode = container.Code;
////}
//createInput.Details.Add(detail);
return createInput;
}
@ -165,24 +164,21 @@ public class ContainerRequestEventHandler
createInput.WarehouseCode = "T8";
ContainerJobDetailInput detail=new ContainerJobDetailInput();
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";
//ContainerJobDetailInput detail=new ContainerJobDetailInput();
createInput.Details.Add(detail);
//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";
//createInput.Details.Add(detail);
return createInput ;
}

Loading…
Cancel
Save