Browse Source

Merge branch 'dev_DY_CC' of http://dev.ccwin-in.com:3000/BoXu.Zheng/WZC2 into dev_DY_CC

dev_DY_CC
赵新宇 1 year ago
parent
commit
288803a014
  1. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Dapper.Fawtyg.Tyrp/DataExchangeDapperFawtygModule.cs
  2. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp/ErpLocation/locmout.cs
  3. 25
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml
  4. 25
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/DTOs/ErpLocationItemDTO.cs
  5. 21
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/ErpLocationItemPermissions.cs
  6. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/IErpLocationItemAppService.cs
  7. 15
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemEditInput.cs
  8. 27
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ErpLocationItems/Inputs/ErpLocationItemImportInput.cs
  9. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Permissions/BasedataPermissionDefinitionProvider.cs
  10. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/PositionCodePermissions.cs
  11. 4
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj
  12. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
  13. 86
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAppService.cs
  14. 33
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ErpLocationItems/ErpLocationItemAutoMapperProfile.cs
  15. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs
  16. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAutoMapperProfile.cs
  17. 21
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItem.cs
  18. 31
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/ErpLocationItemManager.cs
  19. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemManager.cs
  20. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ErpLocationItems/IErpLocationItemRepository.cs
  21. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeManager.cs
  22. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeRepository.cs
  23. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCode.cs
  24. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCodeManager.cs
  25. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Settings/BasedataSettings.cs
  26. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContext.cs
  27. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
  28. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
  29. 35
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemDbContextModelCreatingExtensions.cs
  30. 25
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ErpLocationItems/ErpLocationItemEfCoreRepository.cs
  31. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/IBasedataDbContext.cs
  32. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs
  33. 0
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeEfCoreRepository.cs
  34. 24
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  35. 43
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductionReturnNotes/ProductionReturnNoteAppService.cs
  36. 85
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ProductionReturnRequests/ProductionReturnRequestAppService.cs
  37. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ProductionReturnJobEventHandler.cs
  38. 116
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ProductionReturnRequestEventHandler.cs
  39. 3
      build/src/docker/publish/conf/settings/appsettings.Development.json

1
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.Customers;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Dictpjs; 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.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.InterfaceCalendars;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Products; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.Products;
using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices; using Win_in.Sfs.Wms.DataExchange.LinqToDB.Fawtyg.Tyrp.PurchasePrices;

4
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 class locmout : Entity
{ {
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public string locmout_loc { get; set; } public string locmout_loc { get; set; }
/// <summary> /// <summary>
/// 位类型 /// 位类型
/// </summary> /// </summary>
public string locmout_stat2 { get; set; } public string locmout_stat2 { get; set; }

25
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml

@ -606,6 +606,31 @@
物品代码 物品代码
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Code">
<summary>
代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Name">
<summary>
名称
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Description">
<summary>
描述
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.Type">
<summary>
类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ErpLocation.ErpLocationExchangeDto.WarehouseCode">
<summary>
仓库代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InterfaceCalendar.InterfaceCalendarExchangeDto.Enabled"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InterfaceCalendar.InterfaceCalendarExchangeDto.Enabled">
<summary> <summary>
是否可用 是否可用

25
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
{
/// <summary>
/// 物料代码
/// </summary>
[Display(Name = "物料代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
/// <summary>
/// 储位代码
/// </summary>
[Display(Name = "储位代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ErpLocationCode { get; set; }
}

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

11
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<ErpLocationItemDTO, SfsBaseDataRequestInputBase, ErpLocationItemEditInput>, ISfsUpsertAppService<ErpLocationItemEditInput>
{
Task<ErpLocationItemDTO> CheckItemErpLocationIsAvailable(string itemCode, string erpLocationCode);
Task<List<ErpLocationItemDTO>> GetListByItemCodeAsync(string itemCode);
}

15
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 public class ErpLocationItemEditInput : SfsBaseDataCreateOrUpdateInputBase
{ {
/// <summary> /// <summary>
/// 储位代码 /// 物料代码
/// </summary> /// </summary>
[Display(Name = "储位代码")] [Display(Name = "物料代码")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ErpLoactionCode { get; set; } public string ItemCode { get; set; }
/// <summary> /// <summary>
/// 物料代码 /// 储位代码
/// </summary> /// </summary>
[Display(Name = "物料代码")] [Display(Name = "储位代码")]
[Required(ErrorMessage = "{0}是必填项")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; } public string ErpLocationCode { get; set; }
} }

27
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
{
/// <summary>
/// 物料代码
/// </summary>
[Key]
[Display(Name = "物料代码")]
[Required(ErrorMessage = "{0}不能为空")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ItemCode { get; set; }
/// <summary>
/// 储位代码
/// </summary>
[Display(Name = "储位代码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ErpLocationCode { get; set; }
}

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.AddItemBasicPermission();
basedataGroup.AddItemCategoryPermission(); basedataGroup.AddItemCategoryPermission();
basedataGroup.AddItemPackPermission(); basedataGroup.AddItemPackPermission();
basedataGroup.AddErpLocationItemPermission();
basedataGroup.AddItemContainerPermission(); basedataGroup.AddItemContainerPermission();
basedataGroup.AddCategoryPermission(); basedataGroup.AddCategoryPermission();
basedataGroup.AddPositionCodePermission(); basedataGroup.AddPositionCodePermission();

1
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 static class PositionCodePermissions
{ {
public const string Default = BasedataPermissions.GroupName + "." + nameof(PositionCode); public const string Default = BasedataPermissions.GroupName + "." + nameof(PositionCode);
public const string Create = Default + "." + BasedataPermissions.CreateStr; public const string Create = Default + "." + BasedataPermissions.CreateStr;
public const string Update = Default + "." + BasedataPermissions.UpdateStr; public const string Update = Default + "." + BasedataPermissions.UpdateStr;

4
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj

@ -25,8 +25,4 @@
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="ErpLocationItems\DTOs\" />
</ItemGroup>
</Project> </Project>

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs

@ -27,6 +27,7 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
ItemBasicAutoMapperProfile(); ItemBasicAutoMapperProfile();
ItemCategoryAutoMapperProfile(); ItemCategoryAutoMapperProfile();
ItemPackAutoMapperProfile(); ItemPackAutoMapperProfile();
ErpLocationItemAutoMapperProfile();
ItemContainerAutoMapperProfile(); ItemContainerAutoMapperProfile();
ItemStoreRelationAutoMapperProfile(); ItemStoreRelationAutoMapperProfile();
ItemSafetyStockAutoMapperProfile(); ItemSafetyStockAutoMapperProfile();

86
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<ErpLocationItem, ErpLocationItemDTO, SfsBaseDataRequestInputBase, ErpLocationItemEditInput, ErpLocationItemImportInput>
, IErpLocationItemAppService
{
private readonly IErpLocationItemManager _manager;
private new readonly IErpLocationItemRepository _repository;
public ErpLocationItemAppService(
IErpLocationItemRepository repository
, IDistributedCache<ErpLocationItemDTO> cache
, IErpLocationItemManager manager
, IItemBasicAppService itemBasicAppService) : base(repository, cache)
{
base.CreatePolicyName = ErpLocationItemPermissions.Create;
base.UpdatePolicyName = ErpLocationItemPermissions.Update;
base.DeletePolicyName = ErpLocationItemPermissions.Delete;
_repository = repository;
_manager = manager;
}
/// <summary>
/// 检查物料和储位对应关系是否存在
/// </summary>
/// <param name="itemCode"></param>
/// <param name="erpLocationCode"></param>
/// <returns></returns>
[HttpGet("check-item-erplocation-is-available")]
public virtual async Task<ErpLocationItemDTO> 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<ErpLocationItem, ErpLocationItemDTO>(entity);
return dto;
}
[HttpPost("upsert")]
public virtual async Task UpsertAsync(ErpLocationItemEditInput input)
{
var entity = ObjectMapper.Map<ErpLocationItemEditInput, ErpLocationItem>(input);
await _repository.UpsertAsync(entity).ConfigureAwait(false);
}
[HttpGet("list/by-item")]
public virtual async Task<List<ErpLocationItemDTO>> GetListByItemCodeAsync(string itemCode)
{
var entities = await _repository.GetListAsync(c => c.ItemCode == itemCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<ErpLocationItem>, List<ErpLocationItemDTO>>(entities);
return dtos;
}
}

33
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<ErpLocationItem, ErpLocationItemDTO>()
.ReverseMap();
CreateMap<ErpLocationItemImportInput, ErpLocationItem>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.TenantId)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
;
CreateMap<ErpLocationItemEditInput, ErpLocationItem>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.TenantId)
.Ignore(x=>x.Id)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.ConcurrencyStamp)
;
CreateMap<ErpLocationItemEditInput, ErpLocationItem>()
.IgnoreAuditedObjectProperties()
.Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id);
}
}

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAutoMapperProfile.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAutoMapperProfile.cs

21
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
{
/// <summary>
/// 物料代码
/// </summary>
[IgnoreUpdate]
public string ItemCode { get; set; }
/// <summary>
/// 储位代码
/// </summary>
[IgnoreUpdate]
public string ErpLocationCode { get; set; }
}

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

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

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

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeManager.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeManager.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/IPositionCodeRepository.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/IPositionCodeRepository.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCode.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCodeManager.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCodes/PositionCodeManager.cs

7
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 LocationTypes = Default + "." + nameof(LocationTypes);
public const string NotFoundReturnInfinity = Default + "." + nameof(NotFoundReturnInfinity); 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 public static class ItemQuality
{ {
private const string Default = GroupName + "." + nameof(ItemQuality); private const string Default = GroupName + "." + nameof(ItemQuality);

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<ItemBasic> ItemBasics { get; set; }
public DbSet<ItemCategory> ItemCategories { get; set; } public DbSet<ItemCategory> ItemCategories { get; set; }
public DbSet<ItemPack> ItemPacks { get; set; } public DbSet<ItemPack> ItemPacks { get; set; }
public DbSet<ErpLocationItem> ErpLocationItems { get; set; }
public DbSet<ItemContainer> ItemContainers { get; set; } public DbSet<ItemContainer> ItemContainers { get; set; }
public DbSet<ItemStoreRelation> ItemStoreRelations { get; set; } public DbSet<ItemStoreRelation> ItemStoreRelations { get; set; }
public DbSet<ItemSafetyStock> ItemSafetyStocks { get; set; } public DbSet<ItemSafetyStock> ItemSafetyStocks { 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.ConfigureItemBasic(options);
builder.ConfigureItemCategory(options); builder.ConfigureItemCategory(options);
builder.ConfigureItemPack(options); builder.ConfigureItemPack(options);
builder.ConfigureErpLocationItem(options);
builder.ConfigureItemContainer(options); builder.ConfigureItemContainer(options);
builder.ConfigureItemStoreRelation(options); builder.ConfigureItemStoreRelation(options);
builder.ConfigureItemSafetyStock(options); builder.ConfigureItemSafetyStock(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<IItemBasicRepository, ItemBasicEfCoreRepository>();
context.Services.AddTransient<IItemCategoryRepository, ItemCategoryEfCoreRepository>(); context.Services.AddTransient<IItemCategoryRepository, ItemCategoryEfCoreRepository>();
context.Services.AddTransient<IItemPackRepository, ItemPackEfCoreRepository>(); context.Services.AddTransient<IItemPackRepository, ItemPackEfCoreRepository>();
context.Services.AddTransient<IErpLocationItemRepository, ErpLocationItemEfCoreRepository>();
context.Services.AddTransient<IItemContainerRepository, ItemContainerEfCoreRepository>(); context.Services.AddTransient<IItemContainerRepository, ItemContainerEfCoreRepository>();
context.Services.AddTransient<IItemStoreRelationRepository, ItemStoreRelationEfCoreRepository>(); context.Services.AddTransient<IItemStoreRelationRepository, ItemStoreRelationEfCoreRepository>();
context.Services.AddTransient<IItemSafetyStockRepository, ItemSafetyStockEfCoreRepository>(); context.Services.AddTransient<IItemSafetyStockRepository, ItemSafetyStockEfCoreRepository>();

35
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<ErpLocationItem>(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();
});
}
}

25
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<BasedataDbContext, ErpLocationItem>, IErpLocationItemRepository, ISfsBulkRepositoryBase<ErpLocationItem>
{
public ErpLocationItemEfCoreRepository(IDbContextProvider<BasedataDbContext> 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);
}
}
}

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

@ -36,6 +36,7 @@ public interface IBasedataDbContext : IEfCoreDbContext
public DbSet<ItemBasic> ItemBasics { get; } public DbSet<ItemBasic> ItemBasics { get; }
public DbSet<ItemCategory> ItemCategories { get; } public DbSet<ItemCategory> ItemCategories { get; }
public DbSet<ItemPack> ItemPacks { get; } public DbSet<ItemPack> ItemPacks { get; }
public DbSet<ErpLocationItem> ErpLocationItems { get; }
public DbSet<ItemContainer> ItemContainers { get; } public DbSet<ItemContainer> ItemContainers { get; }
public DbSet<PositionCode> PositionCodes { get; } public DbSet<PositionCode> PositionCodes { get; }
public DbSet<ItemStoreRelation> ItemStoreRelations { get; } public DbSet<ItemStoreRelation> ItemStoreRelations { get; }

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeDbContextModelCreatingExtensions.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeDbContextModelCreatingExtensions.cs

0
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCode/PositionCodeEfCoreRepository.cs → be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/PositionCodes/PositionCodeEfCoreRepository.cs

24
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 IItemBasicAclService _itemBasicAclService;
private readonly ILocationAclService _locationAclService; private readonly ILocationAclService _locationAclService;
private readonly IItemStoreRelationAclService _itemStoreRelationAclService; private readonly IItemStoreRelationAclService _itemStoreRelationAclService;
private readonly IErpLocationItemAppService _erpLocationItemAppService;
private readonly ISettingManager _settingManager; private readonly ISettingManager _settingManager;
private readonly IExpectInRepository _expectInRepository; private readonly IExpectInRepository _expectInRepository;
private readonly IExpectOutRepository _expectOutRepository; private readonly IExpectOutRepository _expectOutRepository;
@ -41,6 +42,7 @@ public class BalanceManager : DomainService, IBalanceManager
, IExpectOutRepository expectOutRepository , IExpectOutRepository expectOutRepository
, IItemStoreRelationAclService itemStoreRelationAclService , IItemStoreRelationAclService itemStoreRelationAclService
, ISettingManager settingManager , ISettingManager settingManager
,IErpLocationItemAppService erpLocationItemAppService
) )
{ {
_objectMapper = objectMapper; _objectMapper = objectMapper;
@ -51,6 +53,7 @@ public class BalanceManager : DomainService, IBalanceManager
_itemStoreRelationAclService = itemStoreRelationAclService; _itemStoreRelationAclService = itemStoreRelationAclService;
_settingManager = settingManager; _settingManager = settingManager;
_expectOutRepository = expectOutRepository; _expectOutRepository = expectOutRepository;
_erpLocationItemAppService= erpLocationItemAppService;
} }
#region Modify #region Modify
@ -83,7 +86,8 @@ public class BalanceManager : DomainService, IBalanceManager
//检查是否存在物料存储关系 //检查是否存在物料存储关系
await CheckItemStoreRelationAsync(transaction, location).ConfigureAwait(false); await CheckItemStoreRelationAsync(transaction, location).ConfigureAwait(false);
//校验开账信息
await CheckErpLocationItemAsync(transaction).ConfigureAwait(false);
//获取已存在库存 //获取已存在库存
var existBalance = await GetFirstAsync( var existBalance = await GetFirstAsync(
transaction.PackingCode, transaction.PackingCode,
@ -150,6 +154,21 @@ public class BalanceManager : DomainService, IBalanceManager
throw new UserFriendlyException($"未找到零件【{transaction.ItemCode}】与库位【{transaction.LocationCode}】的映射关系"); throw new UserFriendlyException($"未找到零件【{transaction.ItemCode}】与库位【{transaction.LocationCode}】的映射关系");
} }
} }
/// <summary>
/// 校验开账信息
/// </summary>
/// <param name="transaction"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
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}】的开账信息");
}
}
/// <summary> /// <summary>
/// 出库形式 /// 出库形式
@ -178,6 +197,9 @@ public class BalanceManager : DomainService, IBalanceManager
//TODO 物品状态判断 //TODO 物品状态判断
item.CheckStatus(validStatusList: new List<EnumItemStatus>()); item.CheckStatus(validStatusList: new List<EnumItemStatus>());
//校验开账信息
await CheckErpLocationItemAsync(transaction).ConfigureAwait(false);
var existBalance = await GetFirstAsync( var existBalance = await GetFirstAsync(
transaction.PackingCode, transaction.PackingCode,
transaction.ItemCode, transaction.ItemCode,

43
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 System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; 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.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -18,13 +22,19 @@ public class ProductionReturnNoteAppService :
IProductionReturnNoteAppService IProductionReturnNoteAppService
{ {
private readonly IProductionReturnNoteManager _ProductionReturnNoteManager; private readonly IProductionReturnNoteManager _ProductionReturnNoteManager;
private readonly ILocationAppService _locationAppService;
private readonly IItemStoreRelationAppService _itemStoreRelationAppService;
public ProductionReturnNoteAppService( public ProductionReturnNoteAppService(
IProductionReturnNoteRepository repository IProductionReturnNoteRepository repository
, IProductionReturnNoteManager ProductionReturnNoteManager , IProductionReturnNoteManager ProductionReturnNoteManager
) : base(repository) , ILocationAppService locationAppService
, IItemStoreRelationAppService itemStoreRelationAppService
) : base(repository)
{ {
_ProductionReturnNoteManager = ProductionReturnNoteManager; _ProductionReturnNoteManager = ProductionReturnNoteManager;
_locationAppService = locationAppService;
_itemStoreRelationAppService = itemStoreRelationAppService;
} }
/// <summary> /// <summary>
@ -42,6 +52,37 @@ public class ProductionReturnNoteAppService :
return dto; return dto;
} }
/// <summary>
/// 新增实体(原材料生产退库)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("create-yl")]
//[Authorize(ProductionReturnNotePermissions.Create)]
public async Task<ProductionReturnNoteDTO> 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<ProductionReturnNoteEditInput, ProductionReturnNote>(input);
await _ProductionReturnNoteManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<ProductionReturnNote, ProductionReturnNoteDTO>(entity);
return dto;
}
} }

85
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 IItemBasicAppService _itemBasicAppService;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IBalanceAppService _balanceAppservice; private readonly IBalanceAppService _balanceAppservice;
private readonly IItemStoreRelationAppService _itemStoreRelationAppService;
@ -45,8 +45,7 @@ public class ProductionReturnRequestAppService :
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
ILocationAppService locationAppService, ILocationAppService locationAppService,
IBalanceAppService _balanceAppservice IBalanceAppService _balanceAppservice
,IItemStoreRelationAppService itemStoreRelationAppService
) )
: base(repository, productionRequestReturnManager) : base(repository, productionRequestReturnManager)
{ {
@ -55,10 +54,13 @@ public class ProductionReturnRequestAppService :
_purchaseOrderApp = purchaseOrderApp; _purchaseOrderApp = purchaseOrderApp;
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_itemStoreRelationAppService = itemStoreRelationAppService;
} }
/// <summary> /// <summary>
/// 【创建】生成退料申请 /// 【创建】生成退料申请(半成品生产退库)
/// 立库生产退库调用CreateLiKuAsync
/// 原材料生产退库调用ProductionReturnNote的CreateYLAsync
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="input"></param>
/// <returns></returns> /// <returns></returns>
@ -66,22 +68,75 @@ public class ProductionReturnRequestAppService :
//[Authorize(ProductionReturnRequestPermissions.Create)] //[Authorize(ProductionReturnRequestPermissions.Create)]
public override async Task<ProductionReturnRequestDTO> CreateAsync(ProductionReturnRequestEditInput input) public override async Task<ProductionReturnRequestDTO> CreateAsync(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.SEMI);
if (allIsBCP == false)
//SfsInventoryRequestInputBase sfsRequestInput = new SfsInventoryRequestInputBase(); {
//sfsRequestInput.Condition 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<ProductionReturnRequestEditInput, ProductionReturnRequest>(input);
//var subType = Enum.Parse<EnumTransSubType>(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<ProductionReturnRequest, ProductionReturnRequestDTO>(entity);
return dto;
}
/// <summary>
/// 【创建】生成退料申请(立库生产退库)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("create-liku")]
//[Authorize(ProductionReturnRequestPermissions.Create)]
public async Task<ProductionReturnRequestDTO> 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<ProductionReturnRequestEditInput, ProductionReturnRequest>(input); var entity = ObjectMapper.Map<ProductionReturnRequestEditInput, ProductionReturnRequest>(input);
//var subType = Enum.Parse<EnumTransSubType>(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); await _productionReturnRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<ProductionReturnRequest, ProductionReturnRequestDTO>(entity); var dto = ObjectMapper.Map<ProductionReturnRequest, ProductionReturnRequestDTO>(entity);
return dto; return dto;
} }

15
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.ReturnTime=DateTime.Now;
input.Details = new List<ProductionReturnNoteDetailInput>(); input.Details = new List<ProductionReturnNoteDetailInput>();
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<ProductionReturnJobDetail, ProductionReturnNoteDetailInput>(detail); var inputDetail = ObjectMapper.Map<ProductionReturnJobDetail, ProductionReturnNoteDetailInput>(detail);
inputDetail.FromWarehouseCode = entity.WarehouseCode; inputDetail.FromWarehouseCode = entity.WarehouseCode;
inputDetail.ToWarehouseCode = 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); input.Details.Add(inputDetail);
} }

116
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 Microsoft.AspNetCore.Components.Forms;
using Omu.ValueInjecter; using Omu.ValueInjecter;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
@ -33,68 +34,65 @@ public class ProductionReturnRequestEventHandler
{ {
var entity = eventData.Entity; var entity = eventData.Entity;
//CreateMap<ProductionReturnRequest, ProductionReturnNoteEditInput>() if (entity.DirectCreateNote)
// .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<ProductionReturnRequestDetail, ProductionReturnNoteDetailInput>()
// .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<ProductionReturnNoteDetailInput> inputdetail = new List<ProductionReturnNoteDetailInput>();
foreach (var itm in entity.Details)
{ {
ProductionReturnNoteDetailInput detail=new ProductionReturnNoteDetailInput(); ProductionReturnNoteEditInput input = new ProductionReturnNoteEditInput();
detail.InjectFrom(itm); input.InjectFrom(entity);
inputdetail.Add(detail); input.ReturnTime = DateTime.Now;
input.ActiveDate = DateTime.Now;
input.JobNumber = input.Number;
List<ProductionReturnNoteDetailInput> inputdetail = new List<ProductionReturnNoteDetailInput>();
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<ProductionReturnJobDetailInput> inputdetail = new List<ProductionReturnJobDetailInput>();
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<ProductionReturnRequest> eventData) public virtual async Task HandleEventAsync(SfsAbortedEntityEventData<ProductionReturnRequest> eventData)

3
build/src/docker/publish/conf/settings/appsettings.Development.json

@ -114,7 +114,8 @@
"BaseUrl": "http://dev.ccwin-in.com:60083/" "BaseUrl": "http://dev.ccwin-in.com:60083/"
}, },
"BaseData": { "BaseData": {
"BaseUrl": "http://localhost:59094/" //"BaseUrl": "http://localhost:59094/"
"BaseUrl": "http://dev.ccwin-in.com:60084/"
}, },
"Default": { "Default": {
"BaseUrl": "http://dev.ccwin-in.com:60083/" "BaseUrl": "http://dev.ccwin-in.com:60083/"

Loading…
Cancel
Save