diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs index 3f263033a..7012a79d3 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs @@ -11,6 +11,7 @@ using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Boms; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Customers; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Dictpjs; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocationItems; +using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.ErpLocations; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.InterfaceCalendars; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Products; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices; diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs index c71f0d524..c05205551 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs @@ -5,11 +5,11 @@ namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; public class locmout : Entity { /// - /// 库位 + /// 储位 /// public string locmout_loc { get; set; } /// - /// 库位类型 + /// 储位类型 /// public string locmout_stat2 { get; set; } diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml index 57f53ce60..c979bbb94 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml @@ -606,6 +606,31 @@ 物品代码 + + + 代码 + + + + + 名称 + + + + + 描述 + + + + + 类型 + + + + + 仓库代码 + + 是否可用 diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/DTOs/ErpLocationItemDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/DTOs/ErpLocationItemDTO.cs new file mode 100644 index 000000000..2876b32c7 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/DTOs/ErpLocationItemDTO.cs @@ -0,0 +1,25 @@ +using System.ComponentModel.DataAnnotations; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Basedata.Application.Contracts; + +[Display(Name = "物料和储位对应关系")] + +public class ErpLocationItemDTO : SfsBaseDataDTOBase +{ + /// + /// 物料代码 + /// + [Display(Name = "物料代码")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } + + /// + /// 储位代码 + /// + [Display(Name = "储位代码")] + [Required(ErrorMessage = "{0}是必填项")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ErpLocationCode { get; set; } +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/ErpLocationItemPermissions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/ErpLocationItemPermissions.cs new file mode 100644 index 000000000..9d992eb91 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/ErpLocationItemPermissions.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 ErpLocationItemPermissions +{ + + public const string Default = BasedataPermissions.GroupName + "." + nameof(ErpLocationItem); + public const string Create = Default + "." + BasedataPermissions.CreateStr; + public const string Update = Default + "." + BasedataPermissions.UpdateStr; + public const string Delete = Default + "." + BasedataPermissions.DeleteStr; + + public static void AddErpLocationItemPermission(this PermissionGroupDefinition permissionGroup) + { + var erpLocationItemPermission = permissionGroup.AddPermission(Default, BasedataPermissionDefinitionProvider.L(nameof(ErpLocationItem))); + erpLocationItemPermission.AddChild(Create, BasedataPermissionDefinitionProvider.L(BasedataPermissions.CreateStr)); + erpLocationItemPermission.AddChild(Update, BasedataPermissionDefinitionProvider.L(BasedataPermissions.UpdateStr)); + erpLocationItemPermission.AddChild(Delete, BasedataPermissionDefinitionProvider.L(BasedataPermissions.DeleteStr)); + } +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/IErpLocationItemAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/IErpLocationItemAppService.cs new file mode 100644 index 000000000..2023465c7 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/IErpLocationItemAppService.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 IErpLocationItemAppService : ISfsBaseDataAppServiceBase, ISfsUpsertAppService +{ + Task CheckItemErpLocationIsAvailable(string itemCode, string erpLocationCode); + Task> GetListByItemCodeAsync(string itemCode); +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs index 84af09533..b1146b608 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs @@ -6,18 +6,21 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public class ErpLocationItemEditInput : SfsBaseDataCreateOrUpdateInputBase { /// - /// 储位代码 + /// 物料代码 /// - [Display(Name = "储位代码")] + [Display(Name = "物料代码")] [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string ErpLoactionCode { get; set; } + public string ItemCode { get; set; } /// - /// 物料代码 + /// 储位代码 /// - [Display(Name = "物料代码")] + [Display(Name = "储位代码")] + [Required(ErrorMessage = "{0}是必填项")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string ItemCode { get; set; } + public string ErpLocationCode { get; set; } + + } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemImportInput.cs new file mode 100644 index 000000000..90c39292e --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemImportInput.cs @@ -0,0 +1,27 @@ +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 ErpLocationItemImportInput : SfsBaseDataImportInputBase +{ + /// + /// 物料代码 + /// + [Key] + [Display(Name = "物料代码")] + [Required(ErrorMessage = "{0}不能为空")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ItemCode { get; set; } + + /// + /// 储位代码 + /// + [Display(Name = "储位代码")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string ErpLocationCode { get; set; } + + +} 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 f4964079d..51e086b94 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.AddErpLocationItemPermission(); basedataGroup.AddItemContainerPermission(); basedataGroup.AddCategoryPermission(); basedataGroup.AddPositionCodePermission(); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/PositionCodePermissions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/PositionCodePermissions.cs index 596671428..a8b3de088 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/PositionCodePermissions.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/PositionCodePermissions.cs @@ -5,7 +5,6 @@ namespace Win_in.Sfs.Basedata.Application.Contracts; public static class PositionCodePermissions { - public const string Default = BasedataPermissions.GroupName + "." + nameof(PositionCode); public const string Create = Default + "." + BasedataPermissions.CreateStr; public const string Update = Default + "." + BasedataPermissions.UpdateStr; diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj index 0cb41fd37..84d9de372 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj @@ -25,8 +25,4 @@ - - - - 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 703b60180..03ec64de1 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(); + ErpLocationItemAutoMapperProfile(); ItemContainerAutoMapperProfile(); ItemStoreRelationAutoMapperProfile(); ItemSafetyStockAutoMapperProfile(); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs new file mode 100644 index 000000000..cb027a477 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs @@ -0,0 +1,86 @@ +using System; +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; +using Volo.Abp.Caching; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.ObjectMapping; +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; + +[Authorize] +[Route($"{BasedataConsts.RootPath}erplocation-item")] + +public class ErpLocationItemAppService + : SfsBaseDataAppServiceBase + , IErpLocationItemAppService +{ + private readonly IErpLocationItemManager _manager; + private new readonly IErpLocationItemRepository _repository; + + public ErpLocationItemAppService( + IErpLocationItemRepository repository + , IDistributedCache cache + , IErpLocationItemManager manager + , IItemBasicAppService itemBasicAppService) : base(repository, cache) + { + base.CreatePolicyName = ErpLocationItemPermissions.Create; + base.UpdatePolicyName = ErpLocationItemPermissions.Update; + base.DeletePolicyName = ErpLocationItemPermissions.Delete; + _repository = repository; + _manager = manager; + } + + /// + /// 检查物料和储位对应关系是否存在 + /// + /// + /// + /// + [HttpGet("check-item-erplocation-is-available")] + public virtual async Task CheckItemErpLocationIsAvailable(string itemCode,string erpLocationCode) + { + var entity = await _repository.FirstOrDefaultAsync(p => p.ItemCode == itemCode && p.ErpLocationCode== erpLocationCode).ConfigureAwait(false); + + if (entity == null) + { + if (await SettingManager.IsTrueAsync(BasedataSettings.ErpLocationItem.NotFoundReturnInfinity).ConfigureAwait(false)) + { + + entity = new ErpLocationItem() + { + ItemCode = itemCode, + ErpLocationCode= erpLocationCode + }; + + } + } + var dto = ObjectMapper.Map(entity); + return dto; + } + + [HttpPost("upsert")] + public virtual async Task UpsertAsync(ErpLocationItemEditInput 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; + } + +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAutoMapperProfile.cs new file mode 100644 index 000000000..a878e9cd4 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAutoMapperProfile.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 ErpLocationItemAutoMapperProfile() + { + 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.Application/PositionCode/PositionCodeAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAutoMapperProfile.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAutoMapperProfile.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAutoMapperProfile.cs diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItem.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItem.cs new file mode 100644 index 000000000..c28ccc858 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItem.cs @@ -0,0 +1,21 @@ +using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Entities; + +namespace Win_in.Sfs.Basedata.Domain; + +public class ErpLocationItem : SfsBaseDataAggregateRootBase +{ + /// + /// 物料代码 + /// + [IgnoreUpdate] + public string ItemCode { get; set; } + + /// + /// 储位代码 + /// + [IgnoreUpdate] + public string ErpLocationCode { get; set; } + + +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItemManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItemManager.cs new file mode 100644 index 000000000..eeb08b3be --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItemManager.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 ErpLocationItemManager : DomainService, IErpLocationItemManager +{ + private readonly IErpLocationItemRepository _repository; + + private readonly IItemBasicRepository _itemBasicRepository; + + public ErpLocationItemManager(IErpLocationItemRepository 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.Domain/ErpLocationItems/IErpLocationItemManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemManager.cs new file mode 100644 index 000000000..32cec86c4 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemManager.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Domain.Services; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Basedata.Domain; + +public interface IErpLocationItemManager : IDomainService, IBulkImportService +{ + +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemRepository.cs new file mode 100644 index 000000000..309280a20 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemRepository.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Basedata.Domain; + +public interface IErpLocationItemRepository : ISfsBaseDataRepositoryBase, ISfsBulkRepositoryBase +{ + public Task UpsertAsync(ErpLocationItem entity); +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeManager.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeManager.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeManager.cs diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeRepository.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeRepository.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeRepository.cs diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCode.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCode.cs diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCodeManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCodeManager.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCodeManager.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCodeManager.cs diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettings.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettings.cs index ef60e56e3..f7a0d9dd4 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettings.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettings.cs @@ -10,7 +10,12 @@ public static class BasedataSettings public const string LocationTypes = Default + "." + nameof(LocationTypes); public const string NotFoundReturnInfinity = Default + "." + nameof(NotFoundReturnInfinity); } - + public static class ErpLocationItem + { + private const string Default = GroupName + "." + nameof(ErpLocationItem); + public const string LocationTypes = Default + "." + nameof(LocationTypes); + public const string NotFoundReturnInfinity = Default + "." + nameof(NotFoundReturnInfinity); + } public static class ItemQuality { private const string Default = GroupName + "." + nameof(ItemQuality); 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 afd345a0e..d43aec3d1 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 ErpLocationItems { get; set; } public DbSet ItemContainers { get; set; } public DbSet ItemStoreRelations { get; set; } public DbSet ItemSafetyStocks { 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 6b2cb3a9f..b3d8b50a5 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.ConfigureErpLocationItem(options); builder.ConfigureItemContainer(options); builder.ConfigureItemStoreRelation(options); builder.ConfigureItemSafetyStock(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 117fa11d5..05750b3c9 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/ErpLocationItems/ErpLocationItemDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemDbContextModelCreatingExtensions.cs new file mode 100644 index 000000000..6d80b5a98 --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemDbContextModelCreatingExtensions.cs @@ -0,0 +1,35 @@ +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 ErpLocationItemDbContextModelCreatingExtensions +{ + public static void ConfigureErpLocationItem(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options) + { + builder.Entity(b => + { + //Configure table & schema name + b.ToTable(options.TablePrefix + nameof(ErpLocationItem), options.Schema); + //Configure ABP properties + b.ConfigureByConvention(); + //Configure Sfs base properties + b.ConfigureSfsBase(); + + //Properties + + b.Property(q => q.ItemCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.ErpLocationCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); + + + //Relations + //None + + //Indexes + b.HasIndex(q => new { q.ItemCode, q.ErpLocationCode }).IsUnique(); + }); + } +} diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemEfCoreRepository.cs new file mode 100644 index 000000000..e6358853d --- /dev/null +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemEfCoreRepository.cs @@ -0,0 +1,25 @@ +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 ErpLocationItemEfCoreRepository : SfsBaseDataEfCoreRepositoryBase, IErpLocationItemRepository, ISfsBulkRepositoryBase +{ + public ErpLocationItemEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + + } + + public virtual async Task UpsertAsync(ErpLocationItem entity) + { + var dbSet = await GetDbSetAsync().ConfigureAwait(false); + var exist = await dbSet.FirstOrDefaultAsync(p => p.ItemCode == entity.ItemCode&&p.ErpLocationCode == entity.ErpLocationCode).ConfigureAwait(false); + if (exist == null) + { + var insRet = await InsertAsync(entity).ConfigureAwait(false); + } + } +} 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 383cc21d4..8dcd0c307 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,7 @@ public interface IBasedataDbContext : IEfCoreDbContext public DbSet ItemBasics { get; } public DbSet ItemCategories { get; } public DbSet ItemPacks { get; } + public DbSet ErpLocationItems { get; } public DbSet ItemContainers { get; } public DbSet PositionCodes { get; } public DbSet ItemStoreRelations { get; } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeDbContextModelCreatingExtensions.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeEfCoreRepository.cs similarity index 100% rename from be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeEfCoreRepository.cs rename to be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeEfCoreRepository.cs diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs index cf9b64ad2..5eaf96cad 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs @@ -29,6 +29,7 @@ public class BalanceManager : DomainService, IBalanceManager private readonly IItemBasicAclService _itemBasicAclService; private readonly ILocationAclService _locationAclService; private readonly IItemStoreRelationAclService _itemStoreRelationAclService; + private readonly IErpLocationItemAppService _erpLocationItemAppService; private readonly ISettingManager _settingManager; private readonly IExpectInRepository _expectInRepository; private readonly IExpectOutRepository _expectOutRepository; @@ -41,6 +42,7 @@ public class BalanceManager : DomainService, IBalanceManager , IExpectOutRepository expectOutRepository , IItemStoreRelationAclService itemStoreRelationAclService , ISettingManager settingManager + ,IErpLocationItemAppService erpLocationItemAppService ) { _objectMapper = objectMapper; @@ -51,6 +53,7 @@ public class BalanceManager : DomainService, IBalanceManager _itemStoreRelationAclService = itemStoreRelationAclService; _settingManager = settingManager; _expectOutRepository = expectOutRepository; + _erpLocationItemAppService= erpLocationItemAppService; } #region Modify @@ -83,7 +86,8 @@ public class BalanceManager : DomainService, IBalanceManager //检查是否存在物料存储关系 await CheckItemStoreRelationAsync(transaction, location).ConfigureAwait(false); - + //校验开账信息 + await CheckErpLocationItemAsync(transaction).ConfigureAwait(false); //获取已存在库存 var existBalance = await GetFirstAsync( transaction.PackingCode, @@ -150,6 +154,21 @@ public class BalanceManager : DomainService, IBalanceManager throw new UserFriendlyException($"未找到零件【{transaction.ItemCode}】与库位【{transaction.LocationCode}】的映射关系"); } } + /// + /// 校验开账信息 + /// + /// + /// + /// + private async Task CheckErpLocationItemAsync(Transaction transaction) + { + var erpLocationItem =await _erpLocationItemAppService.CheckItemErpLocationIsAvailable( transaction.ItemCode, transaction.LocationErpCode).ConfigureAwait(false); + + if (erpLocationItem == null) + { + throw new UserFriendlyException($"未找到零件【{transaction.ItemCode}】与ERP储位【{transaction.LocationErpCode}】的开账信息"); + } + } /// /// 出库形式 @@ -178,6 +197,9 @@ public class BalanceManager : DomainService, IBalanceManager //TODO 物品状态判断 item.CheckStatus(validStatusList: new List()); + //校验开账信息 + await CheckErpLocationItemAsync(transaction).ConfigureAwait(false); + var existBalance = await GetFirstAsync( transaction.PackingCode, transaction.ItemCode, diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs index 5202e5882..d7159cea3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs @@ -1,6 +1,10 @@ +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain.Shared; @@ -18,13 +22,19 @@ public class ProductionReturnNoteAppService : IProductionReturnNoteAppService { private readonly IProductionReturnNoteManager _ProductionReturnNoteManager; + private readonly ILocationAppService _locationAppService; + private readonly IItemStoreRelationAppService _itemStoreRelationAppService; public ProductionReturnNoteAppService( IProductionReturnNoteRepository repository , IProductionReturnNoteManager ProductionReturnNoteManager - ) : base(repository) + , ILocationAppService locationAppService + , IItemStoreRelationAppService itemStoreRelationAppService + ) : base(repository) { _ProductionReturnNoteManager = ProductionReturnNoteManager; + _locationAppService = locationAppService; + _itemStoreRelationAppService = itemStoreRelationAppService; } /// @@ -42,6 +52,37 @@ public class ProductionReturnNoteAppService : return dto; } + /// + /// 新增实体(原材料生产退库) + /// + /// + /// + [HttpPost("create-yl")] + //[Authorize(ProductionReturnNotePermissions.Create)] + public async Task CreateYLAsync(ProductionReturnNoteEditInput input) + { + //校验目标库位 + var locCodeLst = input.Details.Select(itm => itm.ToLocationCode).ToList(); + var locLst = await _locationAppService.GetByCodesAsync(locCodeLst).ConfigureAwait(false); + bool allIsBCP = locLst.All(itm => itm.Type == EnumLocationType.RAW); + if (allIsBCP == false) + { + throw new UserFriendlyException("目标库位必须是原材料库位,不允许存在其它类型库位!"); + } + //校验物料和库存关系 + foreach (var item in input.Details) + { + var obj = await _itemStoreRelationAppService.GetFirstAsync(item.ItemCode, item.ToLocationCode).ConfigureAwait(false); + if (obj == null) + { + throw new UserFriendlyException($"物料{item.ItemCode}不能存在目标库位{item.ToLocationCode},物料库存关系表不存在!"); + } + } + var entity = ObjectMapper.Map(input); + await _ProductionReturnNoteManager.CreateAsync(entity).ConfigureAwait(false); + var dto = ObjectMapper.Map(entity); + return dto; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs index c8756eb35..ffa0f0d7c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs @@ -33,7 +33,7 @@ public class ProductionReturnRequestAppService : private readonly IItemBasicAppService _itemBasicAppService; private readonly ILocationAppService _locationAppService; private readonly IBalanceAppService _balanceAppservice; - + private readonly IItemStoreRelationAppService _itemStoreRelationAppService; @@ -45,8 +45,7 @@ public class ProductionReturnRequestAppService : IItemBasicAppService itemBasicAppService, ILocationAppService locationAppService, IBalanceAppService _balanceAppservice - - + ,IItemStoreRelationAppService itemStoreRelationAppService ) : base(repository, productionRequestReturnManager) { @@ -55,10 +54,13 @@ public class ProductionReturnRequestAppService : _purchaseOrderApp = purchaseOrderApp; _itemBasicAppService = itemBasicAppService; _locationAppService = locationAppService; + _itemStoreRelationAppService = itemStoreRelationAppService; } /// - /// 【创建】生成退料申请 + /// 【创建】生成退料申请(半成品生产退库) + /// 立库生产退库调用CreateLiKuAsync + /// 原材料生产退库调用ProductionReturnNote的CreateYLAsync /// /// /// @@ -66,22 +68,75 @@ public class ProductionReturnRequestAppService : //[Authorize(ProductionReturnRequestPermissions.Create)] public override async Task CreateAsync(ProductionReturnRequestEditInput input) { - - - - - - //SfsInventoryRequestInputBase sfsRequestInput = new SfsInventoryRequestInputBase(); - //sfsRequestInput.Condition - - + //校验目标库位 + var locCodeLst = input.Details.Select(itm => itm.ToLocationCode).ToList(); + var locLst = await _locationAppService.GetByCodesAsync(locCodeLst).ConfigureAwait(false); + bool allIsBCP = locLst.All(itm => itm.Type == EnumLocationType.SEMI); + if (allIsBCP == false) + { + throw new UserFriendlyException("目标库位必须是半成品库位,不允许存在其它类型库位!"); + } + //校验物料和库存关系 + foreach (var item in input.Details) + { + var obj = await _itemStoreRelationAppService.GetFirstAsync(item.ItemCode, item.ToLocationCode).ConfigureAwait(false); + if (obj == null) + { + throw new UserFriendlyException($"物料{item.ItemCode}不能存在目标库位{item.ToLocationCode},物料库存关系表不存在!"); + } + } + var entity = ObjectMapper.Map(input); + //var subType = Enum.Parse(input.Type); + //var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.TransferLib, subType).ConfigureAwait(false); + //entity.Type = ((int)subType).ToString(); + //entity.AutoCompleteJob = tranType.AutoCompleteJob; + //entity.AutoSubmit = tranType.AutoSubmitRequest; + //entity.AutoAgree = tranType.AutoAgreeRequest; + //entity.AutoHandle = tranType.AutoHandleRequest; + //entity.DirectCreateNote = tranType.DirectCreateNote; + await _productionReturnRequestManager.CreateAsync(entity).ConfigureAwait(false); + var dto = ObjectMapper.Map(entity); + return dto; + } + /// + /// 【创建】生成退料申请(立库生产退库) + /// + /// + /// + [HttpPost("create-liku")] + //[Authorize(ProductionReturnRequestPermissions.Create)] + public async Task CreateLiKuAsync(ProductionReturnRequestEditInput input) + { + //校验目标库位 //??没有立库类型 + //var locCodeLst = input.Details.Select(itm => itm.ToLocationCode).ToList(); + //var locLst = await _locationAppService.GetByCodesAsync(locCodeLst).ConfigureAwait(false); + //bool allIsBCP = locLst.All(itm => itm.Type == EnumLocationType.立库); + //if (allIsBCP == false) + //{ + // throw new UserFriendlyException("目标库位必须是立库,不允许存在其它类型库位!"); + //} + //校验物料和库存关系 + foreach (var item in input.Details) + { + var obj = await _itemStoreRelationAppService.GetFirstAsync(item.ItemCode, item.ToLocationCode).ConfigureAwait(false); + if (obj == null) + { + throw new UserFriendlyException($"物料{item.ItemCode}不能存在目标库位{item.ToLocationCode},物料库存关系表不存在!"); + } + } var entity = ObjectMapper.Map(input); - + //var subType = Enum.Parse(input.Type); + //var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.TransferLib, subType).ConfigureAwait(false); + //entity.Type = ((int)subType).ToString(); + //entity.AutoCompleteJob = tranType.AutoCompleteJob; + //entity.AutoSubmit = tranType.AutoSubmitRequest; + //entity.AutoAgree = tranType.AutoAgreeRequest; + //entity.AutoHandle = tranType.AutoHandleRequest; + //entity.DirectCreateNote = tranType.DirectCreateNote; await _productionReturnRequestManager.CreateAsync(entity).ConfigureAwait(false); - var dto = ObjectMapper.Map(entity); return dto; } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionReturnJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionReturnJobEventHandler.cs index 4690c9f2d..656d006b3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionReturnJobEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionReturnJobEventHandler.cs @@ -62,12 +62,23 @@ public class ProductionReturnJobEventHandler : input.ReturnTime=DateTime.Now; input.Details = new List(); - - foreach (var detail in entity.Details.Where(detail => detail.HandledQty != 0)) + foreach (var detail in entity.Details) //.Where(detail => detail.HandledQty != 0) { var inputDetail = ObjectMapper.Map(detail); inputDetail.FromWarehouseCode = entity.WarehouseCode; inputDetail.ToWarehouseCode = entity.WarehouseCode; + + inputDetail.ToLocationArea = detail.HandledToLocationArea; + inputDetail.ToLocationCode = detail.HandledToLocationCode; + inputDetail.ToLocationErpCode = detail.HandledToLocationErpCode; + inputDetail.ToLocationGroup = detail.HandledToLocationGroup; + inputDetail.ToLot = detail.HandledLot; + inputDetail.ToPackingCode = detail.HandledPackingCode; + inputDetail.ToWarehouseCode = detail.HandledToWarehouseCode; + inputDetail.Qty = detail.HandledQty; + inputDetail.HandledQty = detail.HandledQty; + inputDetail.StdPackQty = detail.StdPackQty; + inputDetail.ToStatus = detail.Status; input.Details.Add(inputDetail); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductionReturnRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductionReturnRequestEventHandler.cs index b964e2940..12364bc6e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductionReturnRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductionReturnRequestEventHandler.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Forms; using Omu.ValueInjecter; using Volo.Abp.EventBus; +using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Domain; @@ -33,68 +34,65 @@ public class ProductionReturnRequestEventHandler { var entity = eventData.Entity; - //CreateMap() - // .ForMember(x => x.JobNumber, y => y.MapFrom(d => d.Number)) - // .ForMember(x => x.ReturnTime, y => y.MapFrom(d => d.CreationTime)) - // .ForMember(x => x.Worker, y => y.MapFrom(d => d.Worker)) - // .ForMember(x => x.ActiveDate, y => y.MapFrom(d => DateTime.Now)) - // .Ignore(x => x.Number); - //CreateMap() - // .ForMember(x => x.FromPackingCode, y => y.MapFrom(d => d.FromPackingCode)) - // .ForMember(x => x.ToPackingCode, y => y.MapFrom(d => d.ToPackingCode)) - // .ForMember(x => x.SupplierBatch, y => y.MapFrom(d => d.SupplierBatch)) - // .ForMember(x => x.ArriveDate, y => y.MapFrom(d => d.ArriveDate)) - // .ForMember(x => x.ProduceDate, y => y.MapFrom(d => d.ProduceDate)) - // .ForMember(x => x.ExpireDate, y => y.MapFrom(d => d.ExpireDate)) - // .ForMember(x => x.FromLot, y => y.MapFrom(d => string.Empty)) - // .ForMember(x => x.ToLot, y => y.MapFrom(d => d.ToLot)) - // .ForMember(x => x.ToContainerCode, y => y.MapFrom(d => d.ToContainerCode)) - // .ForMember(x => x.FromContainerCode, y => y.MapFrom(d => d.FromContainerCode)) - // .ForMember(x => x.FromStatus, y => y.MapFrom(d => d.FromStatus)) - // .ForMember(x => x.ToStatus, y => y.MapFrom(d => d.ToStatus)) - // .ForMember(x => x.Qty, y => y.MapFrom(d => d.Qty)) - // .ForMember(x => x.FromLocationCode, y => y.MapFrom(d => d.FromLocationCode)) - // .ForMember(x => x.FromLocationArea, y => y.MapFrom(d => d.ToLocationArea)) - // .ForMember(x => x.FromLocationGroup, y => y.MapFrom(d => d.ToLocationGroup)) - // .ForMember(x => x.FromLocationErpCode, y => y.MapFrom(d => d.ToLocationErpCode)) - // .ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.ToWarehouseCode)) - // .ForMember(x => x.Qty, y => y.MapFrom(d => d.Qty)) - // .Ignore(x => x.ArriveDate) - // .Ignore(x => x.ToLocationCode) - // .Ignore(x => x.ToLocationArea) - // .Ignore(x => x.ToLocationGroup) - // .Ignore(x => x.ToLocationErpCode) - // .Ignore(x => x.ToWarehouseCode) - // .Ignore(x => x.HandledContainerCode) - // .Ignore(x => x.HandledPackingCode) - // .Ignore(x => x.HandledToLocationCode) - // .Ignore(x => x.HandledToLocationArea) - // .Ignore(x => x.HandledToLocationGroup) - // .Ignore(x => x.HandledToLocationErpCode) - // .Ignore(x => x.HandledToWarehouseCode) - // .Ignore(x => x.HandledExpireDate) - // .Ignore(x => x.HandledLot) - // .Ignore(x => x.HandledArriveDate) - // .Ignore(x => x.HandledProduceDate) - // .Ignore(x => x.HandledQty) - // .Ignore(x => x.HandledSupplierBatch); - - - ProductionReturnNoteEditInput input = new ProductionReturnNoteEditInput(); - input.InjectFrom(entity); - input.ReturnTime = DateTime.Now; - input.ActiveDate=DateTime.Now; - input.JobNumber = input.Number; - List inputdetail = new List(); - foreach (var itm in entity.Details) + if (entity.DirectCreateNote) { - ProductionReturnNoteDetailInput detail=new ProductionReturnNoteDetailInput(); - detail.InjectFrom(itm); - inputdetail.Add(detail); + ProductionReturnNoteEditInput input = new ProductionReturnNoteEditInput(); + input.InjectFrom(entity); + input.ReturnTime = DateTime.Now; + input.ActiveDate = DateTime.Now; + input.JobNumber = input.Number; + List inputdetail = new List(); + foreach (var itm in entity.Details) + { + ProductionReturnNoteDetailInput detail = new ProductionReturnNoteDetailInput(); + detail.InjectFrom(itm); + inputdetail.Add(detail); + } + input.Details = inputdetail.ToList(); + //插入记录 + await _productionReturnNoteApp.CreateAsync(input).ConfigureAwait(false); } - input.Details = inputdetail.ToList(); + else + { + ProductionReturnJobEditInput input = new ProductionReturnJobEditInput(); + input.InjectFrom(entity); + input.ProductionReturnRequestNumber = entity.Number; + input.JobType = EnumJobType.ProductionReturnJob; + input.JobStatus = EnumJobStatus.Open; + input.IsAutoComplete = entity.AutoCompleteJob; + List inputdetail = new List(); + foreach (var itm in entity.Details) + { + ProductionReturnJobDetailInput detail = new ProductionReturnJobDetailInput(); + detail.InjectFrom(itm); - await _productionReturnNoteApp.CreateAsync(input).ConfigureAwait(false); + detail.RecommendToLocationArea = itm.ToLocationArea; + detail.RecommendToLocationCode = itm.ToLocationCode; + detail.RecommendToLocationErpCode = itm.ToLocationErpCode; + detail.RecommendToLocationGroup = itm.ToLocationGroup; + detail.RecommendToWarehouseCode = itm.ToWarehouseCode; + detail.RecommendLot = itm.ToLot; + detail.RecommendPackingCode = itm.ToPackingCode; + detail.RecommendQty = itm.Qty; + + detail.HandledToLocationArea = itm.ToLocationArea; + detail.HandledToLocationCode = itm.ToLocationCode; + detail.HandledToLocationErpCode = itm.ToLocationErpCode; + detail.HandledToLocationGroup = itm.ToLocationGroup; + detail.HandledToWarehouseCode = itm.ToWarehouseCode; + detail.HandledLot = itm.ToLot; + detail.HandledPackingCode = itm.ToPackingCode; + detail.HandledQty = itm.Qty; + detail.StdPackQty = itm.StdPackQty; + detail.Status = itm.ToStatus; + inputdetail.Add(detail); + } + input.Details = inputdetail.ToList(); + input.WarehouseCode = entity.Details.Count > 0 ? entity.Details[0].ToWarehouseCode : " "; + //插入任务 + await _productionReturnJobApp.CreateAsync(input).ConfigureAwait(false); + } + entity.Complete(); } public virtual async Task HandleEventAsync(SfsAbortedEntityEventData eventData) diff --git a/build/src/docker/publish/conf/settings/appsettings.Development.json b/build/src/docker/publish/conf/settings/appsettings.Development.json index 675ae449e..d575183e9 100644 --- a/build/src/docker/publish/conf/settings/appsettings.Development.json +++ b/build/src/docker/publish/conf/settings/appsettings.Development.json @@ -114,7 +114,8 @@ "BaseUrl": "http://dev.ccwin-in.com:60083/" }, "BaseData": { - "BaseUrl": "http://localhost:59094/" + //"BaseUrl": "http://localhost:59094/" + "BaseUrl": "http://dev.ccwin-in.com:60084/" }, "Default": { "BaseUrl": "http://dev.ccwin-in.com:60083/"