103 changed files with 40438 additions and 1314 deletions
@ -0,0 +1,38 @@ |
|||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划任务
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "注塑计划任务")] |
||||
|
public class InjectionPlanJobDTO : SfsJobDTOBase<InjectionPlanJobDetailDTO> |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "生产线")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 要货单号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "要货单号")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string InjectionPlanRequestNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "使用在途库")] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
} |
@ -0,0 +1,520 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Application.Contracts; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanJobDetailDTO : SfsDetailDTOBase |
||||
|
{ |
||||
|
#region 库存基础信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品名称
|
||||
|
/// </summary>
|
||||
|
public string ItemName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述1
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc1 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述2
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc2 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 标包数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "标包数量")] |
||||
|
[Column(TypeName = "decimal(18,6)")] |
||||
|
public decimal StdPackQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库存状态
|
||||
|
/// </summary>
|
||||
|
public EnumInventoryStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 计量单位
|
||||
|
/// </summary>
|
||||
|
public string Uom { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 请求信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库区
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库位组
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到仓库
|
||||
|
/// </summary>
|
||||
|
public string RequestWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 在途库库位
|
||||
|
/// </summary>
|
||||
|
public string OnTheWayLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐的类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求数量
|
||||
|
/// </summary>
|
||||
|
public decimal RequestQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public interface IInjectionPlanJobAppService |
||||
|
: ISfsJobAppServiceBase<InjectionPlanJobDTO, SfsJobRequestInputBase, InjectionPlanJobCheckInput, InjectionPlanJobEditInput> |
||||
|
{ |
||||
|
Task CancelByMaterialRequestAsync(string injectionNumber); |
||||
|
|
||||
|
Task<List<InjectionPlanJobDTO>> GetByRequestNumberAsync(string requestNumber); |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public static class InjectionPlanJobPermissions |
||||
|
{ |
||||
|
|
||||
|
public const string Default = StorePermissions.GroupName + "." + nameof(InjectionPlanJob); |
||||
|
public const string Create = Default + "." + StorePermissions.CreateStr; |
||||
|
public const string Update = Default + "." + StorePermissions.UpdateStr; |
||||
|
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
||||
|
|
||||
|
|
||||
|
public static void AddInjectionPlanJobPermission(this PermissionGroupDefinition permissionGroup) |
||||
|
{ |
||||
|
var injectionPlanJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(InjectionPlanJob))); |
||||
|
injectionPlanJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
||||
|
injectionPlanJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
||||
|
injectionPlanJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanJobCheckInput : SfsJobCheckInputBase |
||||
|
{ |
||||
|
|
||||
|
} |
@ -0,0 +1,520 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Application.Contracts; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanJobDetailInput : SfsDetailInputBase |
||||
|
{ |
||||
|
#region 库存基础信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品名称
|
||||
|
/// </summary>
|
||||
|
public string ItemName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述1
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc1 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述2
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc2 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 标包数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "标包数量")] |
||||
|
[Column(TypeName = "decimal(18,6)")] |
||||
|
public decimal StdPackQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库存状态
|
||||
|
/// </summary>
|
||||
|
public EnumInventoryStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 计量单位
|
||||
|
/// </summary>
|
||||
|
public string Uom { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 请求信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库区
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库位组
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到仓库
|
||||
|
/// </summary>
|
||||
|
public string RequestWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 在途库库位
|
||||
|
/// </summary>
|
||||
|
public string OnTheWayLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐的类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求数量
|
||||
|
/// </summary>
|
||||
|
public decimal RequestQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,66 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<InjectionPlanJobDetailInput> |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 上游任务编号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "上游任务编号")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string UpStreamJobNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 要货单号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "要货单号")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string InjectionPlanRequestNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 任务类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "任务类型")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public EnumJobType JobType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 是否自动完成
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "是否自动完成")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public bool IsAutoComplete { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 过期时间
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "过期时间")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public DateTime ExpiredTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 任务明细
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "任务明细")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public List<InjectionPlanJobDetailInput> Details { get; set; } = new(); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "使用在途库")] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
} |
@ -1,14 +1,27 @@ |
|||||
|
using System; |
||||
using System.Collections.Generic; |
using System.Collections.Generic; |
||||
using System.Threading; |
|
||||
using System.Threading.Tasks; |
using System.Threading.Tasks; |
||||
using Volo.Abp.Application.Dtos; |
|
||||
|
|
||||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
public interface IInjectionIssueJobAppService |
public interface IInjectionIssueJobAppService |
||||
: ISfsJobAppServiceBase<InjectionIssueJobDTO, SfsJobRequestInputBase, InjectionIssueJobCheckInput, InjectionIssueJobEditInput> |
: ISfsJobAppServiceBase<InjectionIssueJobDTO, SfsJobRequestInputBase, InjectionIssueJobCheckInput, |
||||
|
InjectionIssueJobEditInput> |
||||
{ |
{ |
||||
Task CancelByMaterialRequestAsync(string injectionNumber); |
|
||||
|
|
||||
Task<List<InjectionIssueJobDTO>> GetByRequestNumberAsync(string requestNumber); |
Task<List<InjectionIssueJobDTO>> GetByRequestNumberAsync(string requestNumber); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 执行任务明细
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
Task ExecuteDetailAsync(Guid masterId, Guid detailId, InjectionIssueJobDetailDTO issueJobDetailDto); |
||||
|
|
||||
|
Task CompleteAsync(Guid id); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求点了完成,任务全部都完成
|
||||
|
/// </summary>
|
||||
|
/// <param name="requestNumber"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task CompleteByRequestNumberAsync(string requestNumber); |
||||
} |
} |
||||
|
@ -0,0 +1,47 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanNoteDTO : SfsStoreDTOBase<InjectionPlanNoteDetailDTO>, IHasJobNumber, IHasRequestNumber |
||||
|
{ |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 任务ID
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "任务ID")] |
||||
|
public string JobNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求代码
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "请求代码")] |
||||
|
public string RequestNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "使用在途库")] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已确认
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "已确认")] |
||||
|
public bool Confirmed { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 确认时间
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "确认时间")] |
||||
|
public DateTime? ConfirmTime { get; set; } |
||||
|
|
||||
|
} |
@ -0,0 +1,520 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Application.Contracts; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanNoteDetailDTO : SfsDetailDTOBase |
||||
|
{ |
||||
|
#region 库存基础信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品名称
|
||||
|
/// </summary>
|
||||
|
public string ItemName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述1
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc1 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述2
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc2 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 标包数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "标包数量")] |
||||
|
[Column(TypeName = "decimal(18,6)")] |
||||
|
public decimal StdPackQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库存状态
|
||||
|
/// </summary>
|
||||
|
public EnumInventoryStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 计量单位
|
||||
|
/// </summary>
|
||||
|
public string Uom { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 请求信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库区
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库位组
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到仓库
|
||||
|
/// </summary>
|
||||
|
public string RequestWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 在途库库位
|
||||
|
/// </summary>
|
||||
|
public string OnTheWayLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐的类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求数量
|
||||
|
/// </summary>
|
||||
|
public decimal RequestQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public interface IInjectionPlanNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<InjectionPlanNoteDTO, |
||||
|
SfsStoreRequestInputBase, InjectionPlanNoteDetailDTO, SfsStoreRequestInputBase> |
||||
|
{ |
||||
|
Task<InjectionPlanNoteDTO> CreateAsync(InjectionPlanNoteEditInput input); |
||||
|
|
||||
|
Task<InjectionPlanNoteDTO> ConfirmAsync(Guid id); |
||||
|
|
||||
|
Task<InjectionPlanNoteDTO> ConfirmAsync(string number); |
||||
|
|
||||
|
Task<List<InjectionPlanNoteDTO>> GetListUnConfirmedByTypeAsync(EnumIssueRequestType issueRequestType); |
||||
|
|
||||
|
Task<PagedResultDto<InjectionPlanNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, |
||||
|
EnumIssueRequestType issueRequestType, bool includeDetails = false, |
||||
|
CancellationToken cancellationToken = default); |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public static class InjectionPlanNotePermissions |
||||
|
{ |
||||
|
|
||||
|
public const string Default = StorePermissions.GroupName + "." + nameof(InjectionPlanNote); |
||||
|
public const string Create = Default + "." + StorePermissions.CreateStr; |
||||
|
public const string Update = Default + "." + StorePermissions.UpdateStr; |
||||
|
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
||||
|
|
||||
|
public static void AddInjectionPlanNotePermission(this PermissionGroupDefinition permissionGroup) |
||||
|
{ |
||||
|
var injectionPlanNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(InjectionPlanNote))); |
||||
|
injectionPlanNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
||||
|
injectionPlanNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
||||
|
injectionPlanNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
||||
|
} |
||||
|
} |
@ -0,0 +1,520 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Application.Contracts; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanNoteDetailInput : SfsDetailInputBase |
||||
|
{ |
||||
|
#region 库存基础信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品名称
|
||||
|
/// </summary>
|
||||
|
public string ItemName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述1
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc1 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述2
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc2 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 标包数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "标包数量")] |
||||
|
[Column(TypeName = "decimal(18,6)")] |
||||
|
public decimal StdPackQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库存状态
|
||||
|
/// </summary>
|
||||
|
public EnumInventoryStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 计量单位
|
||||
|
/// </summary>
|
||||
|
public string Uom { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 请求信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库区
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库位组
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到仓库
|
||||
|
/// </summary>
|
||||
|
public string RequestWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 在途库库位
|
||||
|
/// </summary>
|
||||
|
public string OnTheWayLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐的类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求数量
|
||||
|
/// </summary>
|
||||
|
public decimal RequestQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,56 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanNoteEditInput : SfsStoreCreateOrUpdateInputBase |
||||
|
{ |
||||
|
#region Base
|
||||
|
/// <summary>
|
||||
|
/// 已确认
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "已确认")] |
||||
|
public bool Confirmed { get; set; } |
||||
|
#endregion
|
||||
|
|
||||
|
#region Create
|
||||
|
/// <summary>
|
||||
|
/// 发料记录号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "发料记录号")] |
||||
|
public string Number { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 任务ID
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "任务ID")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public string JobNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 明细列表
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "明细列表")] |
||||
|
public List<InjectionPlanNoteDetailInput> Details { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求号码
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "请求号码")] |
||||
|
public string RequestNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "使用在途库")] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 任务ID
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "任务ID")] |
||||
|
public string JobNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 车间
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "车间")] |
||||
|
public string Workshop { get; set; } |
||||
|
|
||||
|
public string RequestNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "使用在途库")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
} |
@ -0,0 +1,36 @@ |
|||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain.Entities; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanRequestDTO : SfsStoreRequestDTOBase<InjectionPlanRequestDetailDTO>, IHasNumber |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 是否使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "是否使用在途库")] |
||||
|
public bool IsUseOnTheWayLocation { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 可用来源库位Json集合
|
||||
|
/// </summary>
|
||||
|
public string FromLocationCodeJsonList { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 叫料库位
|
||||
|
/// </summary>
|
||||
|
public string ToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标ERP储位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标ERP储位")] |
||||
|
public string ToLocationErpCode { get; set; } |
||||
|
} |
@ -0,0 +1,99 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanRequestDetailDTO : SfsStoreDetailWithQtyDTOBase |
||||
|
{ |
||||
|
#region 目标库位信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库位")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string ToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库区
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库区")] |
||||
|
public string ToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库位组
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库位组")] |
||||
|
public string ToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标ERP储位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标ERP储位")] |
||||
|
public string ToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标仓库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标仓库")] |
||||
|
public string ToWarehouseCode { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已发数量
|
||||
|
/// </summary>
|
||||
|
public decimal IssuedQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已收数量
|
||||
|
/// </summary>
|
||||
|
public decimal ReceivedQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 明细状态
|
||||
|
/// </summary>
|
||||
|
public EnumStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求未发 还未发送的数量
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public decimal ToBeIssuedQty => Qty - IssuedQty; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已发未收
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求未收
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public decimal NotFinishQty => Qty - ReceivedQty; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求箱数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "需求箱数量")] |
||||
|
public decimal BoxQty { get; set; } |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Win_in.Sfs.Basedata.Application.Contracts; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public interface IInjectionPlanRequestAppService |
||||
|
: ISfsStoreRequestMasterAppServiceBase<InjectionPlanRequestDTO, SfsStoreRequestInputBase, InjectionPlanRequestEditInput, InjectionPlanRequestDetailDTO, SfsStoreRequestInputBase> |
||||
|
|
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 获取物品类别列表
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
Task<List<ItemBasicDTO>> GetItemCategoryListAsync(); |
||||
|
|
||||
|
|
||||
|
Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list); |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public static class InjectionPlanRequestPermissions |
||||
|
{ |
||||
|
|
||||
|
public const string Default = StorePermissions.GroupName + "." + nameof(InjectionPlanRequest); |
||||
|
public const string Create = Default + "." + StorePermissions.CreateStr; |
||||
|
public const string Update = Default + "." + StorePermissions.UpdateStr; |
||||
|
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
||||
|
|
||||
|
public static void AddInjectionPlanRequestPermission(this PermissionGroupDefinition permissionGroup) |
||||
|
{ |
||||
|
var injectionPlanRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(InjectionPlanRequest))); |
||||
|
injectionPlanRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
||||
|
injectionPlanRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
||||
|
injectionPlanRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,91 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanRequestDetailInput : SfsStoreDetailWithQtyInputBase |
||||
|
{ |
||||
|
#region 目标库位信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库位")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string ToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库区
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库区")] |
||||
|
public string ToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库位组
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库位组")] |
||||
|
public string ToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标ERP储位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标ERP储位")] |
||||
|
public string ToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标仓库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标仓库")] |
||||
|
public string ToWarehouseCode { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "生产线")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 状态
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "状态")] |
||||
|
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已发数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "已发数量")] |
||||
|
public decimal IssuedQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已收数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "已收数量")] |
||||
|
public decimal ReceivedQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 明细状态
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "明细状态")] |
||||
|
public EnumStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求箱数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "需求箱数量")] |
||||
|
public decimal BoxQty { get; set; } |
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
public class InjectionPlanRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "使用在途库")] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 明细列表
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "明细列表")] |
||||
|
public List<InjectionPlanRequestDetailInput> Details { get; set; } = new(); |
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
[Display(Name = "叫料申请")] |
||||
|
public class InjectionPlanRequestImportInput : SfsStoreImportInputBase |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "物品代码")] |
||||
|
[Required] |
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库位")] |
||||
|
[Required] |
||||
|
public string ToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 来源库区
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "调出库区")] |
||||
|
[Required] |
||||
|
public string FromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "数量")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public decimal Qty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 备注
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "备注")] |
||||
|
public string Remark { get; set; } |
||||
|
} |
@ -0,0 +1,187 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Data; |
||||
|
using System.Linq; |
||||
|
using System.Linq.Expressions; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Castle.Components.DictionaryAdapter; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Win_in.Sfs.Basedata.Application.Contracts; |
||||
|
using Win_in.Sfs.Basedata.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
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; |
||||
|
using Win_in.Sfs.Wms.Store.Notes; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划任务
|
||||
|
/// </summary>
|
||||
|
[Authorize] |
||||
|
[Route($"{StoreConsts.RootPath}injection-plan-job")] |
||||
|
public class InjectionPlanJobAppService |
||||
|
: SfsJobAppServiceBase<InjectionPlanJob, InjectionPlanJobDetail, InjectionPlanJobDTO, SfsJobRequestInputBase, |
||||
|
InjectionPlanJobCheckInput, InjectionPlanJobEditInput>, |
||||
|
IInjectionPlanJobAppService, ITransferLibCallback |
||||
|
{ |
||||
|
private readonly IInjectionPlanJobManager _injectionJobManager; |
||||
|
private readonly ILocationAppService _locationAppService; |
||||
|
private readonly ITransferLibJobAppService _transferLibJobAppService; |
||||
|
|
||||
|
public InjectionPlanJobAppService( |
||||
|
IInjectionPlanJobRepository repository, IInjectionPlanJobManager injectionJobManager, |
||||
|
ILocationAppService locationAppService, ITransferLibJobAppService transferLibJobAppService) : base(repository, injectionJobManager) |
||||
|
{ |
||||
|
_injectionJobManager = injectionJobManager; |
||||
|
_locationAppService = locationAppService; |
||||
|
_transferLibJobAppService = transferLibJobAppService; |
||||
|
} |
||||
|
|
||||
|
[HttpPost("add-many")] |
||||
|
public override async Task<List<InjectionPlanJobDTO>> CreateManyAsync(List<InjectionPlanJobEditInput> inputs) |
||||
|
{ |
||||
|
foreach (var input in inputs) |
||||
|
{ |
||||
|
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
return await base.CreateManyAsync(inputs).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
[HttpPost("")] |
||||
|
public override async Task<InjectionPlanJobDTO> CreateAsync(InjectionPlanJobEditInput input) |
||||
|
{ |
||||
|
await CheckMinRowAndSetStatusAsync(input).ConfigureAwait(false); |
||||
|
|
||||
|
return await base.CreateAsync(input).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task CheckMinRowAndSetStatusAsync(InjectionPlanJobEditInput input) |
||||
|
{ |
||||
|
var jobDetailInputdetail = input.Details.FirstOrDefault(); |
||||
|
|
||||
|
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode) |
||||
|
.ConfigureAwait(false); |
||||
|
|
||||
|
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1) |
||||
|
{ |
||||
|
input.JobStatus = EnumJobStatus.Wait; |
||||
|
|
||||
|
jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate; |
||||
|
jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode; |
||||
|
jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate; |
||||
|
jobDetailInputdetail.TransferLibFromLocationArea = jobDetailInputdetail.RecommendFromLocationArea; |
||||
|
jobDetailInputdetail.TransferLibFromLocationCode = jobDetailInputdetail.RecommendFromLocationCode; |
||||
|
jobDetailInputdetail.TransferLibFromLocationErpCode = jobDetailInputdetail.RecommendFromLocationErpCode; |
||||
|
jobDetailInputdetail.TransferLibFromLocationGroup = jobDetailInputdetail.RecommendFromLocationGroup; |
||||
|
jobDetailInputdetail.TransferLibFromLot = jobDetailInputdetail.RecommendFromLot; |
||||
|
jobDetailInputdetail.TransferLibFromPackingCode = jobDetailInputdetail.RecommendFromPackingCode; |
||||
|
jobDetailInputdetail.TransferLibFromProduceDate = jobDetailInputdetail.RecommendFromProduceDate; |
||||
|
jobDetailInputdetail.TransferLibFromQty = jobDetailInputdetail.RecommendFromQty; |
||||
|
jobDetailInputdetail.TransferLibFromSupplierBatch = jobDetailInputdetail.RecommendFromSupplierBatch; |
||||
|
jobDetailInputdetail.TransferLibFromWarehouseCode = jobDetailInputdetail.RecommendFromWarehouseCode; |
||||
|
|
||||
|
jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate; |
||||
|
jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode; |
||||
|
jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate; |
||||
|
jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.RecommendToLocationArea; |
||||
|
jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.RecommendToLocationCode; |
||||
|
jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.RecommendToLocationErpCode; |
||||
|
jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.RecommendToLocationGroup; |
||||
|
jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot; |
||||
|
jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode; |
||||
|
jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate; |
||||
|
jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty; |
||||
|
jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch; |
||||
|
jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.RecommendToWarehouseCode; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[HttpPost("cancel-by-request/{injectionNumber}")] |
||||
|
public virtual async Task CancelByMaterialRequestAsync(string injectionNumber) |
||||
|
{ |
||||
|
var entities = await _repository.GetListAsync(p => p.InjectionPlanRequestNumber == injectionNumber) |
||||
|
.ConfigureAwait(false); |
||||
|
foreach (var entity in entities) |
||||
|
{ |
||||
|
await _injectionJobManager.CancelAsync(entity).ConfigureAwait(false); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[HttpPost("invalid")] |
||||
|
public override async Task CancelAsync(Guid id) |
||||
|
{ |
||||
|
var injectionJob = await _repository.GetAsync(id).ConfigureAwait(false); |
||||
|
if (injectionJob == null) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"未找到ID为 {id} 的任务"); |
||||
|
} |
||||
|
|
||||
|
await _injectionJobManager.CancelAsync(injectionJob).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
[HttpPost("by-request-number/{requestNumber}")] |
||||
|
public virtual async Task<List<InjectionPlanJobDTO>> GetByRequestNumberAsync(string requestNumber) |
||||
|
{ |
||||
|
var entitys = await _repository.GetListAsync(p => p.InjectionPlanRequestNumber == requestNumber) |
||||
|
.ConfigureAwait(false); |
||||
|
return ObjectMapper.Map<List<InjectionPlanJob>, List<InjectionPlanJobDTO>>(entitys); |
||||
|
} |
||||
|
|
||||
|
[HttpPost("Do-Call-Back")] |
||||
|
public async Task DoTransferLibCallbackAsync(TransferLibJobDTO dto) |
||||
|
{ |
||||
|
var job = await _repository.FindAsync(p => p.Number == dto.CallJobNumber).ConfigureAwait(false); |
||||
|
|
||||
|
var transferLibJobDto= await _transferLibJobAppService.GetByNumberAsync(dto.Number).ConfigureAwait(false); |
||||
|
|
||||
|
var transferLibNoteDetail= dto.Details.First(); |
||||
|
|
||||
|
var jobDetail = job.Details.First(); |
||||
|
job.JobStatus = EnumJobStatus.Open; |
||||
|
|
||||
|
jobDetail.TransferLibFromArriveDate = transferLibNoteDetail.HandledFromArriveDate; |
||||
|
jobDetail.TransferLibFromContainerCode=transferLibNoteDetail.HandledFromContainerCode; |
||||
|
jobDetail.TransferLibFromExpireDate=transferLibNoteDetail.HandledFromExpireDate; |
||||
|
jobDetail.TransferLibFromLocationArea=transferLibNoteDetail.HandledFromLocationArea; |
||||
|
jobDetail.TransferLibFromLocationCode=transferLibNoteDetail.HandledFromLocationCode; |
||||
|
jobDetail.TransferLibFromLocationErpCode = transferLibNoteDetail.HandledFromLocationErpCode; |
||||
|
jobDetail.TransferLibFromLocationGroup=transferLibNoteDetail.HandledFromLocationGroup; |
||||
|
jobDetail.TransferLibFromLot=transferLibNoteDetail.HandledFromLot; |
||||
|
jobDetail.TransferLibFromPackingCode = transferLibNoteDetail.HandledFromPackingCode; |
||||
|
jobDetail.TransferLibFromProduceDate = transferLibNoteDetail.HandledFromProduceDate; |
||||
|
jobDetail.TransferLibFromQty=transferLibNoteDetail.HandledFromQty; |
||||
|
jobDetail.TransferLibFromSupplierBatch=transferLibNoteDetail.HandledFromSupplierBatch; |
||||
|
jobDetail.TransferLibFromWarehouseCode = transferLibNoteDetail.HandledFromWarehouseCode; |
||||
|
|
||||
|
jobDetail.TransferLibToArriveDate = transferLibNoteDetail.HandledToArriveDate; |
||||
|
jobDetail.TransferLibToContainerCode = transferLibNoteDetail.HandledToContainerCode; |
||||
|
jobDetail.TransferLibToExpireDate = transferLibNoteDetail.HandledToExpireDate; |
||||
|
jobDetail.TransferLibToLocationArea = transferLibNoteDetail.HandledToLocationArea; |
||||
|
jobDetail.TransferLibToLocationCode = transferLibNoteDetail.HandledToLocationCode; |
||||
|
jobDetail.TransferLibToLocationErpCode = transferLibNoteDetail.HandledToLocationErpCode; |
||||
|
jobDetail.TransferLibToLocationGroup = transferLibNoteDetail.HandledToLocationGroup; |
||||
|
jobDetail.TransferLibToLot = transferLibNoteDetail.HandledToLot; |
||||
|
jobDetail.TransferLibToPackingCode = transferLibNoteDetail.HandledToPackingCode; |
||||
|
jobDetail.TransferLibToProduceDate = transferLibNoteDetail.HandledToProduceDate; |
||||
|
jobDetail.TransferLibToQty = transferLibNoteDetail.HandledToQty; |
||||
|
jobDetail.TransferLibToSupplierBatch = transferLibNoteDetail.HandledToSupplierBatch; |
||||
|
jobDetail.TransferLibToWarehouseCode = transferLibNoteDetail.HandledToWarehouseCode; |
||||
|
|
||||
|
await _repository.UpdateAsync(job).ConfigureAwait(false); |
||||
|
|
||||
|
return; |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
using AutoMapper; |
||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application; |
||||
|
|
||||
|
public partial class StoreApplicationAutoMapperProfile : Profile |
||||
|
{ |
||||
|
private void InjectionPlanJobAutoMapperProfile() |
||||
|
{ |
||||
|
CreateMap<InjectionPlanJob, InjectionPlanJobDTO>() |
||||
|
.ReverseMap(); |
||||
|
|
||||
|
//CreateMap<InjectionPlanJobDTO, InjectionPlanJob>();
|
||||
|
|
||||
|
CreateMap<InjectionPlanJobDetail, InjectionPlanJobDetailDTO>() |
||||
|
; |
||||
|
|
||||
|
CreateMap<InjectionPlanJobDetailDTO, InjectionPlanJobDetail>() |
||||
|
; |
||||
|
|
||||
|
CreateMap<InjectionPlanJobDetailInput, InjectionPlanJobDetail>() |
||||
|
.IgnoreAuditedObjectProperties() |
||||
|
.Ignore(x => x.MasterID) |
||||
|
.Ignore(x => x.TenantId) |
||||
|
.Ignore(x => x.Number) |
||||
|
.Ignore(x => x.Id); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,112 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Linq.Expressions; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
using Win_in.Sfs.Shared.Event; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
using Win_in.Sfs.Wms.Store.Domain.Shared; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划记录
|
||||
|
/// </summary>
|
||||
|
[Authorize] |
||||
|
[Route($"{StoreConsts.RootPath}injection-plan-note")] |
||||
|
public class InjectionPlanNoteAppService : |
||||
|
SfsStoreWithDetailsAppServiceBase<InjectionPlanNote, InjectionPlanNoteDTO, SfsStoreRequestInputBase, InjectionPlanNoteEditInput, InjectionPlanNoteDetail, |
||||
|
InjectionPlanNoteDetailDTO, SfsStoreRequestInputBase, InjectionPlanNoteImportInput>, |
||||
|
IInjectionPlanNoteAppService |
||||
|
{ |
||||
|
private readonly IInjectionPlanNoteManager _injectionNoteManager; |
||||
|
|
||||
|
public InjectionPlanNoteAppService( |
||||
|
IInjectionPlanNoteRepository repository, |
||||
|
IInjectionPlanNoteManager injectionNoteManager |
||||
|
) : base(repository) |
||||
|
{ |
||||
|
_injectionNoteManager = injectionNoteManager; |
||||
|
} |
||||
|
|
||||
|
[HttpPost("")] |
||||
|
//[Authorize(InjectionPlanNotePermissions.Create)]
|
||||
|
public override async Task<InjectionPlanNoteDTO> CreateAsync(InjectionPlanNoteEditInput input) |
||||
|
{ |
||||
|
var entity = ObjectMapper.Map<InjectionPlanNoteEditInput, InjectionPlanNote>(input); |
||||
|
await _injectionNoteManager.CreateAsync(entity).ConfigureAwait(false); |
||||
|
var dto = ObjectMapper.Map<InjectionPlanNote, InjectionPlanNoteDTO>(entity); |
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 确认对应的记录单
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("confirm/{id}")] |
||||
|
public virtual async Task<InjectionPlanNoteDTO> ConfirmAsync(Guid id) |
||||
|
{ |
||||
|
var injectionNote= await _repository.GetAsync(id).ConfigureAwait(false); |
||||
|
injectionNote.Confirmed = true; |
||||
|
injectionNote=await _repository.UpdateAsync(injectionNote).ConfigureAwait(false); |
||||
|
await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData<InjectionPlanNote>(injectionNote), false).ConfigureAwait(false); |
||||
|
return ObjectMapper.Map<InjectionPlanNote, InjectionPlanNoteDTO>(injectionNote); |
||||
|
} |
||||
|
|
||||
|
[HttpPost("confirm-by-number/{number}")] |
||||
|
public virtual async Task<InjectionPlanNoteDTO> ConfirmAsync(string number) |
||||
|
{ |
||||
|
var entity = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false); |
||||
|
Check.NotNull(entity, nameof(InjectionPlanNote)); |
||||
|
var result = await _injectionNoteManager.ConfirmAsync(entity.Id).ConfigureAwait(false); |
||||
|
var dto = ObjectMapper.Map<InjectionPlanNote, InjectionPlanNoteDTO>(result); |
||||
|
return dto; |
||||
|
} |
||||
|
/// <summary>
|
||||
|
/// 根据叫料请求类型获取发料记录
|
||||
|
/// </summary>
|
||||
|
/// <param name="requestInput"></param>
|
||||
|
/// <param name="requestType">
|
||||
|
/// 叫料请求类型:
|
||||
|
/// 人工拉动:Issue_Manual;
|
||||
|
/// 线边拉动:Issue_WIP;
|
||||
|
/// </param>
|
||||
|
/// <param name="includeDetails"></param>
|
||||
|
/// <param name="cancellationToken"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("by-type/{requestType}")] |
||||
|
public virtual async Task<PagedResultDto<InjectionPlanNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, |
||||
|
EnumIssueRequestType issueRequestType, bool includeDetails = false, CancellationToken cancellationToken = default) |
||||
|
{ |
||||
|
Expression<Func<InjectionPlanNote, bool>> expression = p => p.IssueRequestType == issueRequestType; |
||||
|
if (requestInput.Condition.Filters?.Count > 0) |
||||
|
{ |
||||
|
expression = expression.And(requestInput.Condition.Filters.ToLambda<InjectionPlanNote>()); |
||||
|
} |
||||
|
|
||||
|
return await GetPagedListAsync(expression, requestInput.SkipCount, requestInput.MaxResultCount, |
||||
|
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
[HttpPost("list-by-type-and-un-confirmed")] |
||||
|
public virtual async Task<List<InjectionPlanNoteDTO>> GetListUnConfirmedByTypeAsync(EnumIssueRequestType issueRequestType) |
||||
|
{ |
||||
|
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.IssueRequestType == issueRequestType) |
||||
|
.ConfigureAwait(false); |
||||
|
|
||||
|
var dtos = ObjectMapper.Map<List<InjectionPlanNote>, List<InjectionPlanNoteDTO>>(entities); |
||||
|
|
||||
|
return dtos; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
using AutoMapper; |
||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application; |
||||
|
|
||||
|
public partial class StoreApplicationAutoMapperProfile : Profile |
||||
|
{ |
||||
|
private void InjectionPlanNoteAutoMapperProfile() |
||||
|
{ |
||||
|
CreateMap<InjectionPlanNote, InjectionPlanNoteDTO>() |
||||
|
.ReverseMap(); |
||||
|
|
||||
|
CreateMap<InjectionPlanNoteDetail, InjectionPlanNoteDetailDTO>(); |
||||
|
|
||||
|
CreateMap<InjectionPlanNoteDetailInput, InjectionPlanNoteDetail>() |
||||
|
.IgnoreAuditedObjectProperties() |
||||
|
.Ignore(x => x.MasterID) |
||||
|
.Ignore(x => x.TenantId) |
||||
|
.Ignore(x => x.Number) |
||||
|
.Ignore(x => x.Id); |
||||
|
|
||||
|
CreateMap<InjectionPlanNoteEditInput, InjectionPlanNote>() |
||||
|
.IgnoreAuditedObjectProperties() |
||||
|
.Ignore(x => x.TenantId) |
||||
|
.Ignore(x => x.Number) |
||||
|
.Ignore(x => x.Id); |
||||
|
; |
||||
|
} |
||||
|
} |
@ -0,0 +1,214 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
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.Shared.Domain.Shared.Enums.Store; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
using Win_in.Sfs.Wms.Store.Domain.Shared; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划申请
|
||||
|
/// </summary>
|
||||
|
[Authorize] |
||||
|
[Route($"{StoreConsts.RootPath}injection-plan-request")] |
||||
|
public class InjectionPlanRequestAppService : SfsStoreRequestAppServiceBase<InjectionPlanRequest, |
||||
|
InjectionPlanRequestDTO, |
||||
|
SfsStoreRequestInputBase, InjectionPlanRequestEditInput, InjectionPlanRequestDetail, |
||||
|
InjectionPlanRequestDetailDTO, |
||||
|
SfsStoreRequestInputBase, InjectionPlanRequestImportInput>, |
||||
|
IInjectionPlanRequestAppService |
||||
|
{ |
||||
|
private readonly IInjectionPlanRequestManager _injectionRequestManager; |
||||
|
private readonly ILocationAppService _locationAppService; |
||||
|
private readonly IItemBasicAppService _itemBasicAppService; |
||||
|
private readonly IItemContainerAppService _itemContainerAppService; |
||||
|
|
||||
|
private readonly ITransactionTypeAppService _transactionTypeAppService; |
||||
|
|
||||
|
public InjectionPlanRequestAppService( |
||||
|
IInjectionPlanRequestRepository repository, |
||||
|
IInjectionPlanRequestManager injectionRequestManager, |
||||
|
ILocationAppService locationAppService, |
||||
|
IItemBasicAppService itemBasicAppService, |
||||
|
IItemContainerAppService itemContainerAppService, |
||||
|
ITransactionTypeAppService transactionTypeAppService |
||||
|
) |
||||
|
: base(repository, injectionRequestManager) |
||||
|
{ |
||||
|
_injectionRequestManager = injectionRequestManager; |
||||
|
_locationAppService = locationAppService; |
||||
|
_itemBasicAppService = itemBasicAppService; |
||||
|
_itemContainerAppService = itemContainerAppService; |
||||
|
_transactionTypeAppService = transactionTypeAppService; |
||||
|
} |
||||
|
|
||||
|
public override async Task<InjectionPlanRequestDTO> HandleAsync(Guid id) |
||||
|
{ |
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
[HttpPost("")] |
||||
|
public override async Task<InjectionPlanRequestDTO> CreateAsync(InjectionPlanRequestEditInput input) |
||||
|
{ |
||||
|
foreach (var item in input.Details) |
||||
|
{ |
||||
|
if (item.Qty <= 0) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"{item.ItemCode} 物料的需求量必须大于0"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
foreach (var detailInput in input.Details) //赋值生产线
|
||||
|
{ |
||||
|
var toLocationDto = |
||||
|
await _locationAppService.GetByCodeAsync(detailInput.ToLocationCode).ConfigureAwait(false); |
||||
|
CheckLocation(toLocationDto, detailInput.ToLocationCode); |
||||
|
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false); |
||||
|
CheckItemBasic(itemBasicDto, detailInput.ItemCode); |
||||
|
|
||||
|
detailInput.ToLocationArea = toLocationDto.AreaCode; |
||||
|
detailInput.ToLocationGroup = toLocationDto.LocationGroupCode; |
||||
|
detailInput.ToWarehouseCode = toLocationDto.WarehouseCode; |
||||
|
detailInput.ProdLine = detailInput.ToLocationCode; |
||||
|
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode; |
||||
|
|
||||
|
detailInput.ItemDesc1 = itemBasicDto.Desc1; |
||||
|
detailInput.ItemDesc2 = itemBasicDto.Desc2; |
||||
|
detailInput.ItemName = itemBasicDto.Name; |
||||
|
|
||||
|
var itemContainerDto = await _itemContainerAppService.GetListByItemCodeAsync(detailInput.ItemCode) |
||||
|
.ConfigureAwait(false); |
||||
|
if (itemContainerDto.Count > 0) |
||||
|
{ |
||||
|
detailInput.Uom = itemContainerDto[0].BasicUom; |
||||
|
detailInput.Qty = itemContainerDto[0].Qty; |
||||
|
detailInput.StdPackQty = itemBasicDto.StdPackQty; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
detailInput.Uom = itemBasicDto.BasicUom; |
||||
|
detailInput.StdPackQty = itemBasicDto.StdPackQty; |
||||
|
detailInput.Qty = itemBasicDto.StdPackQty; |
||||
|
} |
||||
|
|
||||
|
detailInput.Status = EnumStatus.Open; |
||||
|
|
||||
|
//因为是刚创建的 所以发料数一定是0
|
||||
|
detailInput.IssuedQty = 0; |
||||
|
} |
||||
|
|
||||
|
await SetRequestAutoPropertiesAsync(input).ConfigureAwait(false); |
||||
|
var entity = ObjectMapper.Map<InjectionPlanRequestEditInput, InjectionPlanRequest>(input); |
||||
|
|
||||
|
var result = await _injectionRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false); |
||||
|
|
||||
|
var dto = ObjectMapper.Map<InjectionPlanRequest, InjectionPlanRequestDTO>(result); |
||||
|
|
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 赋值Request业务属性
|
||||
|
/// </summary>
|
||||
|
/// <param name="entity"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task SetRequestAutoPropertiesAsync(InjectionPlanRequestEditInput entity) |
||||
|
{ |
||||
|
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None) |
||||
|
.ConfigureAwait(false); |
||||
|
Check.NotNull(tranType, "事务类型", "事务类型不存在"); |
||||
|
entity.AutoSubmit = tranType.AutoSubmitRequest; |
||||
|
entity.AutoAgree = tranType.AutoAgreeRequest; |
||||
|
entity.AutoHandle = tranType.AutoHandleRequest; |
||||
|
entity.AutoCompleteJob = tranType.AutoCompleteJob; |
||||
|
entity.DirectCreateNote = tranType.DirectCreateNote; |
||||
|
} |
||||
|
|
||||
|
[HttpPost("create-and-handle")] |
||||
|
public async Task<InjectionPlanRequestDTO> CreateAndHandleAsync(InjectionPlanRequestEditInput input) |
||||
|
{ |
||||
|
var injectionRequestDto = await CreateAsync(input).ConfigureAwait(false); |
||||
|
|
||||
|
await HandleAsync(injectionRequestDto.Id).ConfigureAwait(false); |
||||
|
|
||||
|
return injectionRequestDto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取物品类别列表
|
||||
|
/// </summary>
|
||||
|
/// <param name="type"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet("list/item-category")] |
||||
|
public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync() |
||||
|
{ |
||||
|
var entities = await _itemBasicAppService.GetCategoryListAsync().ConfigureAwait(false); |
||||
|
|
||||
|
return entities; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取已完成的叫料单数量
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("get-uncompleted-request")] |
||||
|
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list) |
||||
|
{ |
||||
|
var returnList = new List<UnCompletedRequestDto>(); |
||||
|
//枚举类型查不到改成SQL查询
|
||||
|
var list = await _repository.GetListAsync(p => |
||||
|
p.RequestStatus != EnumRequestStatus.Completed && p.IssueRequestType == EnumIssueRequestType.Vision) |
||||
|
.ConfigureAwait(false); |
||||
|
foreach (var itm in list) |
||||
|
{ |
||||
|
var query = from detail in itm.Details |
||||
|
join citm in p_list on new |
||||
|
{ |
||||
|
detail.ItemCode, locCode = detail.ToLocationCode, areaCode = detail.PositionCode |
||||
|
} equals |
||||
|
new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode } |
||||
|
select new UnCompletedRequestDto |
||||
|
{ |
||||
|
ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode |
||||
|
}; |
||||
|
|
||||
|
returnList.AddRange(query.ToList()); |
||||
|
} |
||||
|
|
||||
|
return returnList; |
||||
|
} |
||||
|
|
||||
|
#region 校验
|
||||
|
|
||||
|
private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode) |
||||
|
{ |
||||
|
if (itemBasicDto == null) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"物品代码为【{itemCode}】不存在"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void CheckLocation(LocationDTO locationDto, string locationCode) |
||||
|
{ |
||||
|
if (locationDto == null) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"库位代码为【{locationCode}】不存在"); |
||||
|
} |
||||
|
|
||||
|
if (locationDto.Type != EnumLocationType.WIP) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"库位代码【{locationCode}】不是【{EnumLocationType.WIP.GetDisplayName()}】类型"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,65 @@ |
|||||
|
using AutoMapper; |
||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Application; |
||||
|
|
||||
|
public partial class StoreApplicationAutoMapperProfile : Profile |
||||
|
{ |
||||
|
private void InjectionPlanRequestAutoMapperProfile() |
||||
|
{ |
||||
|
CreateMap<InjectionPlanRequest, InjectionPlanRequestDTO>() |
||||
|
.ReverseMap(); |
||||
|
|
||||
|
CreateMap<InjectionPlanRequestDetail, InjectionPlanRequestDetailDTO>() |
||||
|
.ReverseMap(); |
||||
|
|
||||
|
CreateMap<InjectionPlanRequestDetailInput, InjectionPlanRequestDetail>() |
||||
|
.IgnoreAuditedObjectProperties() |
||||
|
.Ignore(x => x.MasterID) |
||||
|
.Ignore(x => x.TenantId) |
||||
|
.Ignore(x => x.Number) |
||||
|
.Ignore(x => x.Id); |
||||
|
|
||||
|
CreateMap<InjectionPlanRequestImportInput, InjectionPlanRequest>() |
||||
|
.IgnoreAuditedObjectProperties() |
||||
|
.Ignore(x => x.UseOnTheWayLocation) |
||||
|
.Ignore(x => x.Details) |
||||
|
.Ignore(x => x.Remark) |
||||
|
.Ignore(x => x.TenantId) |
||||
|
.Ignore(x => x.Number) |
||||
|
.Ignore(x => x.RequestStatus) |
||||
|
.Ignore(x => x.ConcurrencyStamp) |
||||
|
.Ignore(x => x.ExtraProperties) |
||||
|
.Ignore(x => x.ActiveDate) |
||||
|
.Ignore(x => x.Remark); |
||||
|
|
||||
|
CreateMap<InjectionPlanRequestImportInput, InjectionPlanRequestDetail>() |
||||
|
.IgnoreAuditedObjectProperties() |
||||
|
.ForMember(x => x.Status, y => y.MapFrom(t => EnumStatus.Open)) |
||||
|
.Ignore(x => x.ToLocationErpCode) |
||||
|
.Ignore(x => x.ToWarehouseCode) |
||||
|
.Ignore(x => x.ToLocationArea) |
||||
|
.Ignore(x => x.ToLocationGroup) |
||||
|
.Ignore(x => x.ItemName).Ignore(x => x.ItemDesc1).Ignore(x => x.ItemDesc2) |
||||
|
.Ignore(x => x.ProdLine) |
||||
|
.Ignore(x => x.IssuedQty) |
||||
|
.Ignore(x => x.ReceivedQty) |
||||
|
.Ignore(x => x.ToBeIssuedQty) |
||||
|
.Ignore(x => x.ToBeReceivedQty) |
||||
|
.Ignore(x => x.NotFinishQty) |
||||
|
.Ignore(x => x.StdPackQty) |
||||
|
.Ignore(x => x.Uom) |
||||
|
.Ignore(x => x.TenantId) |
||||
|
.Ignore(x => x.MasterID) |
||||
|
.Ignore(x => x.Number) |
||||
|
.Ignore(x => x.Id) |
||||
|
.Ignore(x => x.Remark); |
||||
|
CreateMap<InjectionPlanRequestEditInput, InjectionPlanRequest>() |
||||
|
.IgnoreAuditedObjectProperties() |
||||
|
.Ignore(x => x.RequestStatus) |
||||
|
.Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id); |
||||
|
} |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
using System; |
||||
|
using System.Linq.Expressions; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public interface IInjectionPlanJobManager : IJobManager<InjectionPlanJob> |
||||
|
{ |
||||
|
Task<InjectionPlanJob> GetAsync(Expression<Func<InjectionPlanJob, bool>> expression); |
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public interface IInjectionPlanJobRepository : ISfsJobRepositoryBase<InjectionPlanJob> |
||||
|
{ |
||||
|
|
||||
|
} |
@ -0,0 +1,44 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain.Entities; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划任务
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "注塑计划任务")] |
||||
|
public class InjectionPlanJob : SfsJobAggregateRootBase<InjectionPlanJobDetail> |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
[IgnoreUpdate] |
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑要料单号
|
||||
|
/// </summary>
|
||||
|
[IgnoreUpdate] |
||||
|
public string InjectionPlanRequestNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "使用在途库")] |
||||
|
[IgnoreUpdate] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 任务明细
|
||||
|
/// </summary>
|
||||
|
[IgnoreUpdate] |
||||
|
public override List<InjectionPlanJobDetail> Details { get; set; } = new(); |
||||
|
} |
@ -0,0 +1,531 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public class InjectionPlanJobDetail : SfsDetailEntityBase |
||||
|
{ |
||||
|
#region 库存基础信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "物品代码")] |
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品名称
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "物品名称")] |
||||
|
public string ItemName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述1
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "物品描述1")] |
||||
|
public string ItemDesc1 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述2
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "物品描述2")] |
||||
|
public string ItemDesc2 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 标包数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "标包数量")] |
||||
|
[Column(TypeName = "decimal(18,6)")] |
||||
|
public decimal StdPackQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库存状态
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "库存状态")] |
||||
|
public EnumInventoryStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 计量单位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "计量单位")] |
||||
|
public string Uom { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 请求信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库区
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库位组
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到仓库
|
||||
|
/// </summary>
|
||||
|
public string RequestWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 在途库库位
|
||||
|
/// </summary>
|
||||
|
public string OnTheWayLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐的类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求数量
|
||||
|
/// </summary>
|
||||
|
public decimal RequestQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
public void SetId(Guid id) |
||||
|
{ |
||||
|
Id = id; |
||||
|
} |
||||
|
} |
@ -0,0 +1,121 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.Linq; |
||||
|
using System.Linq.Expressions; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Users; |
||||
|
using Volo.Abp.Validation; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public class InjectionPlanJobManager : SfsJobManagerBase<InjectionPlanJob, InjectionPlanJobDetail>, IInjectionPlanJobManager |
||||
|
{ |
||||
|
private readonly IBalanceAppService _balanceAppService; |
||||
|
private readonly IExpectOutAppService _expectOutAppService; |
||||
|
|
||||
|
public InjectionPlanJobManager( |
||||
|
IInjectionPlanJobRepository repository, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService) : base(repository) |
||||
|
{ |
||||
|
_balanceAppService = balanceAppService; |
||||
|
_expectOutAppService = expectOutAppService; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 执行任务 发料任务
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <param name="user"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public override async Task<InjectionPlanJob> CompleteAsync(InjectionPlanJob input, ICurrentUser user) |
||||
|
{ |
||||
|
var entity = await Repository.FindAsync(input.Id).ConfigureAwait(false); |
||||
|
|
||||
|
var inputDetail = input.Details.First(); |
||||
|
var detail = entity.Details.First(); |
||||
|
|
||||
|
var expectOutDtos = await _expectOutAppService.GetListByItemCodeAndStatusAndPackingCodeAsync(detail.ItemCode, detail.HandledFromLocationCode, detail.HandledFromPackingCode, detail.Status, detail.HandledFromLot).ConfigureAwait(false); |
||||
|
if (expectOutDtos.Any()) |
||||
|
{ |
||||
|
throw new UserFriendlyException($" 箱码:{detail.HandledFromPackingCode}," + |
||||
|
$" 物品代码:{detail.ItemCode}," + |
||||
|
$" 库位代码:{detail.HandledFromLocationCode}," + |
||||
|
$" 状态:{detail.Status}," + |
||||
|
$" 批次:{detail.HandledFromLot}" + |
||||
|
$" 的库存被占用【预计出】"); |
||||
|
} |
||||
|
|
||||
|
var balanceDto=await _balanceAppService.GetRealQtyByPackingCodeAndItemCodeAndLocationCodeAndStatusAsync(inputDetail.HandledFromPackingCode, inputDetail.ItemCode, inputDetail.HandledFromLocationCode, inputDetail.Status, inputDetail.HandledFromLot).ConfigureAwait(false); |
||||
|
if (balanceDto.Qty <= 0) |
||||
|
{ |
||||
|
throw new UserFriendlyException($" 箱码:{detail.HandledFromPackingCode}," + |
||||
|
$" 物品代码:{detail.ItemCode}," + |
||||
|
$" 库位代码:{detail.HandledFromLocationCode}," + |
||||
|
$" 状态:{detail.Status}," + |
||||
|
$" 批次:{detail.HandledFromLot}" + |
||||
|
$" 的可用库存不大于0,现在为{balanceDto.Qty},请检查【库存数量】和【预计出】"); |
||||
|
} |
||||
|
|
||||
|
detail.HandledFromArriveDate = inputDetail.HandledFromArriveDate; |
||||
|
detail.HandledFromContainerCode = inputDetail.HandledFromContainerCode; |
||||
|
detail.HandledFromExpireDate = inputDetail.HandledFromExpireDate; |
||||
|
detail.HandledFromLocationArea = inputDetail.HandledFromLocationArea; |
||||
|
detail.HandledFromLocationCode = inputDetail.HandledFromLocationCode; |
||||
|
detail.HandledFromLocationErpCode = inputDetail.HandledFromLocationErpCode; |
||||
|
detail.HandledFromLocationGroup = inputDetail.HandledFromLocationGroup; |
||||
|
detail.HandledFromLot = inputDetail.HandledFromLot; |
||||
|
detail.HandledFromPackingCode = inputDetail.HandledFromPackingCode; |
||||
|
detail.HandledFromProduceDate = inputDetail.HandledFromProduceDate; |
||||
|
detail.HandledFromQty = inputDetail.HandledFromQty; |
||||
|
detail.HandledFromSupplierBatch = inputDetail.HandledFromSupplierBatch; |
||||
|
detail.HandledFromWarehouseCode = inputDetail.HandledFromWarehouseCode; |
||||
|
|
||||
|
detail.HandledToArriveDate = inputDetail.HandledToArriveDate; |
||||
|
detail.HandledToContainerCode = inputDetail.HandledToContainerCode; |
||||
|
detail.HandledToExpireDate = inputDetail.HandledToExpireDate; |
||||
|
detail.HandledToLocationArea = inputDetail.HandledToLocationArea; |
||||
|
detail.HandledToLocationCode = inputDetail.HandledToLocationCode; |
||||
|
detail.HandledToLocationErpCode = inputDetail.HandledToLocationErpCode; |
||||
|
detail.HandledToLocationGroup = inputDetail.HandledToLocationGroup; |
||||
|
detail.HandledToLot = inputDetail.HandledToLot; |
||||
|
detail.HandledToPackingCode = inputDetail.HandledToPackingCode; |
||||
|
detail.HandledToProduceDate = inputDetail.HandledToProduceDate; |
||||
|
detail.HandledToQty = inputDetail.HandledToQty; |
||||
|
detail.HandledToSupplierBatch = inputDetail.HandledToSupplierBatch; |
||||
|
detail.HandledToWarehouseCode = inputDetail.HandledToWarehouseCode; |
||||
|
|
||||
|
detail.HandledToPackingCode = string.Empty; |
||||
|
detail.HandledToLot = string.Empty; |
||||
|
detail.HandledToContainerCode = string.Empty; |
||||
|
|
||||
|
return await base.CompleteAsync(entity, user).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
public async Task<InjectionPlanJob> GetAsync(Expression<Func<InjectionPlanJob, bool>> expression) |
||||
|
{ |
||||
|
return await Repository.FindAsync(expression).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
#region 无用
|
||||
|
|
||||
|
public override Task<List<InjectionPlanJob>> GetWorkingListByPackingAsync(string packingCode) |
||||
|
{ |
||||
|
throw new NotImplementedException(); |
||||
|
} |
||||
|
|
||||
|
public override Task<List<InjectionPlanJob>> GetWorkingListByContainerAsync(string containerCode) |
||||
|
{ |
||||
|
throw new NotImplementedException(); |
||||
|
} |
||||
|
|
||||
|
public override void CheckDetails(InjectionPlanJob entity, AbpValidationResult result) |
||||
|
{ |
||||
|
throw new NotImplementedException(); |
||||
|
} |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public interface IInjectionPlanNoteManager : ISfsStoreManager<InjectionPlanNote, InjectionPlanNoteDetail> |
||||
|
{ |
||||
|
Task<InjectionPlanNote> ConfirmAsync(Guid id); |
||||
|
|
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public interface IInjectionPlanNoteRepository : ISfsStoreRepositoryBase<InjectionPlanNote> |
||||
|
{ |
||||
|
|
||||
|
} |
@ -0,0 +1,72 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Volo.Abp; |
||||
|
using Win_in.Sfs.Shared.Domain.Entities; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划记录
|
||||
|
/// </summary>
|
||||
|
public class InjectionPlanNote : SfsStoreAggregateRootBase<InjectionPlanNoteDetail>, IHasJobNumber, IHasRequestNumber |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 任务ID
|
||||
|
/// </summary>
|
||||
|
[IgnoreUpdate] |
||||
|
public string JobNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 明细列表
|
||||
|
/// </summary>
|
||||
|
[IgnoreUpdate] |
||||
|
public override List<InjectionPlanNoteDetail> Details { get; set; } = new List<InjectionPlanNoteDetail>(); |
||||
|
|
||||
|
[IgnoreUpdate] |
||||
|
public string RequestNumber { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
[IgnoreUpdate] |
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 确认时间
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "确认时间")] |
||||
|
[IgnoreUpdate] |
||||
|
public DateTime? ConfirmTime { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已确认
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "已确认")] |
||||
|
public bool Confirmed { get; set; } |
||||
|
|
||||
|
public void Confirm(DateTime confirmTime) |
||||
|
{ |
||||
|
|
||||
|
CheckStatus(Confirmed); |
||||
|
Confirmed = true; |
||||
|
ConfirmTime = confirmTime; |
||||
|
} |
||||
|
|
||||
|
private static void CheckStatus(bool confirmed) |
||||
|
{ |
||||
|
if (confirmed) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"当前状态为 【已确认】 ,无法再次确认!"); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,520 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public class InjectionPlanNoteDetail : SfsStoreDetailEntityBase |
||||
|
{ |
||||
|
#region 库存基础信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品名称
|
||||
|
/// </summary>
|
||||
|
public string ItemName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述1
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc1 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品描述2
|
||||
|
/// </summary>
|
||||
|
public string ItemDesc2 { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 标包数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "标包数量")] |
||||
|
[Column(TypeName = "decimal(18,6)")] |
||||
|
public decimal StdPackQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库存状态
|
||||
|
/// </summary>
|
||||
|
public EnumInventoryStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 计量单位
|
||||
|
/// </summary>
|
||||
|
public string Uom { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 请求信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库区
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到库位组
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RequestLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 到仓库
|
||||
|
/// </summary>
|
||||
|
public string RequestWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 在途库库位
|
||||
|
/// </summary>
|
||||
|
public string OnTheWayLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐的类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求数量
|
||||
|
/// </summary>
|
||||
|
public decimal RequestQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 推荐目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标托标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string RecommendToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string RecommendToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime RecommendToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库区
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标库位组
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string RecommendToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标仓库
|
||||
|
/// </summary>
|
||||
|
public string RecommendToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal RecommendToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移来源数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 库移目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标托标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标箱标签
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime TransferLibToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标批次排序
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库区
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标库位组
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标ERP库位
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标仓库
|
||||
|
/// </summary>
|
||||
|
public string TransferLibToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 库移目标数量
|
||||
|
/// </summary>
|
||||
|
public decimal TransferLibToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际来源
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledFromPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledFromSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledFromExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledFromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledFromWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledFromQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#region 实际目标
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际目标托标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToContainerCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际箱标签
|
||||
|
/// </summary>
|
||||
|
public string HandledToPackingCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次供应商批次
|
||||
|
/// </summary>
|
||||
|
public string HandledToSupplierBatch { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次到货时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToArriveDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次生产时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToProduceDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次过期时间
|
||||
|
/// </summary>
|
||||
|
public DateTime HandledToExpireDate { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际批次排序
|
||||
|
/// </summary>
|
||||
|
public string HandledToLot { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库区
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际库位组
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际ERP库位
|
||||
|
/// </summary>
|
||||
|
public string HandledToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际仓库
|
||||
|
/// </summary>
|
||||
|
public string HandledToWarehouseCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 实际数量
|
||||
|
/// </summary>
|
||||
|
public decimal HandledToQty { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,42 @@ |
|||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Uow; |
||||
|
using Win_in.Sfs.Shared.Event; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public class InjectionPlanNoteManager : SfsStoreManagerBase<InjectionPlanNote, InjectionPlanNoteDetail>, IInjectionPlanNoteManager |
||||
|
{ |
||||
|
|
||||
|
public InjectionPlanNoteManager( |
||||
|
IInjectionPlanNoteRepository repository |
||||
|
) : base(repository) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task<InjectionPlanNote> ConfirmAsync(Guid id) |
||||
|
{ |
||||
|
var entity = await Repository.FindAsync(id).ConfigureAwait(false); |
||||
|
Check.NotNull(entity, EntityClassName); |
||||
|
entity.Confirm(Clock.Now); |
||||
|
await PublishConfirmedAsync(entity).ConfigureAwait(false); |
||||
|
return await Repository.UpdateAsync(entity).ConfigureAwait(false); |
||||
|
} |
||||
|
private async Task PublishConfirmedAsync(InjectionPlanNote entity) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData<InjectionPlanNote>(entity), false).ConfigureAwait(false); |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Logger.LogDebug($"{nameof(InjectionPlanNote)} Confirmed Event:{ex.Message}", null); |
||||
|
Console.WriteLine(ex.Source); |
||||
|
throw; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public interface IInjectionPlanRequestManager : ISfsStoreRequestManager<InjectionPlanRequest, InjectionPlanRequestDetail>, |
||||
|
IBulkImportService<InjectionPlanRequest> |
||||
|
{ |
||||
|
|
||||
|
Task CompleteAsync(string number); |
||||
|
|
||||
|
Task<InjectionPlanRequest> CreateByNumberAsync(InjectionPlanRequest entity); |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public interface IInjectionPlanRequestRepository : ISfsStoreRepositoryBase<InjectionPlanRequest>, |
||||
|
ISfsBulkRepositoryBase<InjectionPlanRequest> |
||||
|
{ |
||||
|
|
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain.Entities; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划申请
|
||||
|
/// </summary>
|
||||
|
public class InjectionPlanRequest : SfsStoreRequestAggregateRootBase<InjectionPlanRequestDetail> |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 叫料类型
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "叫料类型")] |
||||
|
public EnumIssueRequestType IssueRequestType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 使用在途库
|
||||
|
/// </summary>
|
||||
|
public bool UseOnTheWayLocation { get; set; } |
||||
|
|
||||
|
} |
@ -0,0 +1,101 @@ |
|||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注塑计划申请明细
|
||||
|
/// </summary>
|
||||
|
public class InjectionPlanRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation |
||||
|
{ |
||||
|
#region 目标库位信息
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库位")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
public string ToLocationCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库区
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库区")] |
||||
|
public string ToLocationArea { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标库位组
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标库位组")] |
||||
|
public string ToLocationGroup { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标ERP储位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标ERP储位")] |
||||
|
public string ToLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标仓库
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标仓库")] |
||||
|
public string ToWarehouseCode { get; set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 生产线
|
||||
|
/// </summary>
|
||||
|
public string ProdLine { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已发数量
|
||||
|
/// </summary>
|
||||
|
public decimal IssuedQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已收数量
|
||||
|
/// </summary>
|
||||
|
public decimal ReceivedQty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 明细状态
|
||||
|
/// </summary>
|
||||
|
public EnumStatus Status { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求未发 还未发送的数量
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public decimal ToBeIssuedQty => Qty - IssuedQty; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已发未收
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 请求未收
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public decimal NotFinishQty => Qty - ReceivedQty; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 位置码
|
||||
|
/// </summary>
|
||||
|
public string PositionCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 推荐类型
|
||||
|
/// </summary>
|
||||
|
public EnumRecommendType RecommendType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 需求箱数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "需求箱数量")] |
||||
|
public decimal BoxQty { get; set; } |
||||
|
} |
@ -0,0 +1,77 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Event; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
public class InjectionPlanRequestManager |
||||
|
: SfsStoreRequestManagerBase<InjectionPlanRequest, InjectionPlanRequestDetail> |
||||
|
, IInjectionPlanRequestManager |
||||
|
{ |
||||
|
private readonly IInjectionPlanRequestRepository _repository; |
||||
|
private readonly IInjectionPlanJobRepository _injectionJobRepository; |
||||
|
|
||||
|
public InjectionPlanRequestManager( |
||||
|
IInjectionPlanRequestRepository repository |
||||
|
, IInjectionPlanJobRepository injectionJobRepository |
||||
|
) : base(repository) |
||||
|
{ |
||||
|
_repository = repository; |
||||
|
_injectionJobRepository = injectionJobRepository; |
||||
|
} |
||||
|
|
||||
|
#region 东阳V2
|
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建 同时 直接赋值Number 为了返回Number
|
||||
|
/// </summary>
|
||||
|
/// <param name="entity"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public virtual async Task<InjectionPlanRequest> CreateByNumberAsync(InjectionPlanRequest entity) |
||||
|
{ |
||||
|
var number = string.IsNullOrEmpty(entity.Number) |
||||
|
? await GenerateNumberAsync(nameof(InjectionPlanRequest), entity.ActiveDate).ConfigureAwait(false) |
||||
|
: entity.Number; |
||||
|
entity.SetIdAndNumberWithDetails(GuidGenerator, number); |
||||
|
entity.Submit(); |
||||
|
entity.Agree(); |
||||
|
entity.RequestStatus = EnumRequestStatus.Partial; |
||||
|
await LocalEventBus.PublishAsync(new SfsHandledEntityEventData<InjectionPlanRequest>(entity),false) |
||||
|
.ConfigureAwait(false); |
||||
|
await _repository.InsertAsync(entity).ConfigureAwait(false); |
||||
|
return entity; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task CompleteAsync(string number) |
||||
|
{ |
||||
|
var entity = await GetByNumberAsync(number).ConfigureAwait(false); |
||||
|
if (entity != null && !entity.Details.Any(p => p.ToBeIssuedQty > 0)) |
||||
|
{ |
||||
|
await CompleteAsync(entity).ConfigureAwait(false); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
#region 导入
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 执行导入
|
||||
|
/// </summary>
|
||||
|
public virtual async Task ImportDataAsync(List<InjectionPlanRequest> mergeEntities, |
||||
|
List<InjectionPlanRequest> deleteEntities = null) |
||||
|
{ |
||||
|
if (deleteEntities != null && deleteEntities.Count > 0) |
||||
|
{ |
||||
|
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
await CreateManyAsync(mergeEntities).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore.Modeling; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.EntityFrameworkCore; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; |
||||
|
|
||||
|
public static class InjectionPlanJobDbContextModelCreatingExtensions |
||||
|
{ |
||||
|
public static void ConfigureInjectionPlanJob(this ModelBuilder builder, StoreModelBuilderConfigurationOptions options) |
||||
|
{ |
||||
|
builder.Entity<InjectionPlanJob>(b => |
||||
|
{ |
||||
|
//Configure table & schema name
|
||||
|
b.ToTable(StoreDbProperties.JobDbTablePrefix + nameof(InjectionPlanJob), options.Schema); |
||||
|
//Configure ABP properties
|
||||
|
b.ConfigureByConvention(); |
||||
|
//Configure Sfs base properties
|
||||
|
b.ConfigureSfsBase(); |
||||
|
//Configure Job base properties
|
||||
|
b.ConfigureJob<InjectionPlanJob, InjectionPlanJobDetail>(); |
||||
|
//Properties
|
||||
|
b.Property(q => q.InjectionPlanRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.JobType).HasConversion<string>(); |
||||
|
b.Property(q => q.JobStatus).HasConversion<string>(); |
||||
|
//Relations
|
||||
|
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); |
||||
|
//Indexes
|
||||
|
b.HasIndex(q => new { q.Number }).IsUnique(); |
||||
|
}); |
||||
|
|
||||
|
builder.Entity<InjectionPlanJobDetail>(b => |
||||
|
{ |
||||
|
//Configure table & schema name
|
||||
|
b.ToTable(StoreDbProperties.JobDbTablePrefix + nameof(InjectionPlanJobDetail), options.Schema); |
||||
|
//Configure ABP properties
|
||||
|
b.ConfigureByConvention(); |
||||
|
//Configure Sfs base properties
|
||||
|
b.ConfigureSfsBase(); |
||||
|
//Configure Job base properties
|
||||
|
//b.ConfigureJobRecommendFromDetail();
|
||||
|
//Properties
|
||||
|
|
||||
|
b.Property(q => q.RequestLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength).IsRequired(false); |
||||
|
b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.CodeLength).HasConversion<string>(); |
||||
|
b.Property(q => q.Status).IsRequired().HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); |
||||
|
//Relations
|
||||
|
//None
|
||||
|
|
||||
|
//Indexes
|
||||
|
//b.HasIndex(q => new { q.PackingCode }).IsUnique();
|
||||
|
}); |
||||
|
} |
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; |
||||
|
|
||||
|
public class InjectionPlanJobEfCoreRepository : SfsJobEfCoreRepositoryBase<StoreDbContext, InjectionPlanJob>, IInjectionPlanJobRepository |
||||
|
{ |
||||
|
public InjectionPlanJobEfCoreRepository(IDbContextProvider<StoreDbContext> dbContextProvider) : base(dbContextProvider) |
||||
|
{ |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,67 @@ |
|||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
#nullable disable |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Migrations |
||||
|
{ |
||||
|
public partial class Update_CoatingIssue : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.RenameColumn( |
||||
|
name: "MaterialRequestNumber", |
||||
|
table: "Job_CoatingIssueJob", |
||||
|
newName: "CoatingRequestNumber"); |
||||
|
|
||||
|
migrationBuilder.AlterColumn<string>( |
||||
|
name: "PositionCode", |
||||
|
table: "Store_CoatingIssueRequestDetail", |
||||
|
type: "nvarchar(64)", |
||||
|
maxLength: 64, |
||||
|
nullable: true, |
||||
|
oldClrType: typeof(string), |
||||
|
oldType: "nvarchar(max)", |
||||
|
oldNullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<int>( |
||||
|
name: "EnumIssueSendType", |
||||
|
table: "Store_CoatingIssueNote", |
||||
|
type: "int", |
||||
|
nullable: false, |
||||
|
defaultValue: 0); |
||||
|
|
||||
|
migrationBuilder.AddColumn<int>( |
||||
|
name: "EnumIssueSendType", |
||||
|
table: "Job_CoatingIssueJob", |
||||
|
type: "int", |
||||
|
nullable: false, |
||||
|
defaultValue: 0); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "EnumIssueSendType", |
||||
|
table: "Store_CoatingIssueNote"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "EnumIssueSendType", |
||||
|
table: "Job_CoatingIssueJob"); |
||||
|
|
||||
|
migrationBuilder.RenameColumn( |
||||
|
name: "CoatingRequestNumber", |
||||
|
table: "Job_CoatingIssueJob", |
||||
|
newName: "MaterialRequestNumber"); |
||||
|
|
||||
|
migrationBuilder.AlterColumn<string>( |
||||
|
name: "PositionCode", |
||||
|
table: "Store_CoatingIssueRequestDetail", |
||||
|
type: "nvarchar(max)", |
||||
|
nullable: true, |
||||
|
oldClrType: typeof(string), |
||||
|
oldType: "nvarchar(64)", |
||||
|
oldMaxLength: 64, |
||||
|
oldNullable: true); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,56 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore.Modeling; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; |
||||
|
|
||||
|
public static class InjectionPlanNoteDbContextModelCreatingExtensions |
||||
|
{ |
||||
|
public static void ConfigureInjectionPlanNote(this ModelBuilder builder, StoreModelBuilderConfigurationOptions options) |
||||
|
{ |
||||
|
builder.Entity<InjectionPlanNote>(b => |
||||
|
{ |
||||
|
//Configure table & schema name
|
||||
|
b.ToTable(options.TablePrefix + nameof(InjectionPlanNote), options.Schema); |
||||
|
//Configure ABP properties
|
||||
|
b.ConfigureByConvention(); |
||||
|
//Configure Sfs base properties
|
||||
|
b.ConfigureSfsStoreBase(); |
||||
|
|
||||
|
//Properties
|
||||
|
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength); |
||||
|
|
||||
|
//Relations
|
||||
|
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); |
||||
|
|
||||
|
//Indexes
|
||||
|
b.HasIndex(q => new { q.Number }).IsUnique(); |
||||
|
}); |
||||
|
|
||||
|
builder.Entity<InjectionPlanNoteDetail>(b => |
||||
|
{ |
||||
|
//Configure table & schema name
|
||||
|
b.ToTable(options.TablePrefix + nameof(InjectionPlanNoteDetail), options.Schema); |
||||
|
//Configure ABP properties
|
||||
|
b.ConfigureByConvention(); |
||||
|
//Configure Sfs base properties
|
||||
|
b.ConfigureSfsStoreBase(); |
||||
|
//Configure Sfs store detail properties
|
||||
|
b.ConfigureSfsStoreDetailBase(); |
||||
|
|
||||
|
//Properties
|
||||
|
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.NameLength); |
||||
|
b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); |
||||
|
|
||||
|
//Relations
|
||||
|
|
||||
|
//Indexes
|
||||
|
b.HasIndex(q => new { q.Number, q.HandledFromPackingCode, q.HandledFromLocationCode, q.HandledToLocationCode }).IsUnique(); |
||||
|
b.HasIndex(q => new { q.HandledFromPackingCode }); |
||||
|
}); |
||||
|
} |
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; |
||||
|
|
||||
|
public class InjectionPlanNoteEfCoreRepository : SfsStoreEfCoreRepositoryBase<StoreDbContext, InjectionPlanNote>, IInjectionPlanNoteRepository |
||||
|
{ |
||||
|
public InjectionPlanNoteEfCoreRepository(IDbContextProvider<StoreDbContext> dbContextProvider) : base(dbContextProvider) |
||||
|
{ |
||||
|
} |
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore.Modeling; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; |
||||
|
|
||||
|
public static class InjectionPlanRequestDbContextModelCreatingExtensions |
||||
|
{ |
||||
|
public static void ConfigureInjectionPlanRequest(this ModelBuilder builder, StoreModelBuilderConfigurationOptions options) |
||||
|
{ |
||||
|
builder.Entity<InjectionPlanRequest>(b => |
||||
|
{ |
||||
|
//Configure table & schema name
|
||||
|
b.ToTable(options.TablePrefix + nameof(InjectionPlanRequest), options.Schema); |
||||
|
//Configure ABP properties
|
||||
|
b.ConfigureByConvention(); |
||||
|
//Configure Sfs base properties
|
||||
|
b.ConfigureSfsStoreBase(); |
||||
|
|
||||
|
//Properties
|
||||
|
b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); |
||||
|
|
||||
|
//Relations
|
||||
|
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); |
||||
|
|
||||
|
//Indexes
|
||||
|
b.HasIndex(q => new { q.Number }).IsUnique(); |
||||
|
}); |
||||
|
|
||||
|
builder.Entity<InjectionPlanRequestDetail>(b => |
||||
|
{ |
||||
|
//Configure table & schema name
|
||||
|
b.ToTable(options.TablePrefix + nameof(InjectionPlanRequestDetail), options.Schema); |
||||
|
//Configure ABP properties
|
||||
|
b.ConfigureByConvention(); |
||||
|
//Configure Sfs base properties
|
||||
|
b.ConfigureSfsStoreBase(); |
||||
|
//Configure Sfs store detail properties
|
||||
|
b.ConfigureSfsStoreDetailBase(); |
||||
|
//Properties
|
||||
|
b.Property(q => q.ToLocationCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.ToLocationErpCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.ToWarehouseCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.ToLocationArea).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.IssuedQty).HasPrecision(18, 6); |
||||
|
b.Property(q => q.ReceivedQty).HasPrecision(18, 6); |
||||
|
b.Property(q => q.Status).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); |
||||
|
b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength); |
||||
|
b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); |
||||
|
|
||||
|
//Relations
|
||||
|
|
||||
|
//Indexes
|
||||
|
b.HasIndex(q => new { q.Number, q.ItemCode, q.ToLocationCode }).IsUnique(); |
||||
|
b.HasIndex(q => new { q.ItemCode }); |
||||
|
}); |
||||
|
} |
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.EntityFrameworkCore; |
||||
|
|
||||
|
public class InjectionPlanRequestEfCoreRepository : SfsStoreEfCoreRepositoryBase<StoreDbContext, InjectionPlanRequest>, IInjectionPlanRequestRepository |
||||
|
{ |
||||
|
public InjectionPlanRequestEfCoreRepository(IDbContextProvider<StoreDbContext> dbContextProvider) : base(dbContextProvider) |
||||
|
{ |
||||
|
} |
||||
|
} |
0
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/InjectionRequests/InjectionIssueRequestDbContextModelCreatingExtensions.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestDbContextModelCreatingExtensions.cs
0
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/InjectionRequests/InjectionIssueRequestDbContextModelCreatingExtensions.cs → be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestDbContextModelCreatingExtensions.cs
@ -0,0 +1,37 @@ |
|||||
|
using System; |
||||
|
using AutoMapper; |
||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Win_in.Sfs.Shared.Application; |
||||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event; |
||||
|
|
||||
|
public partial class StoreEventAutoMapperProfile : Profile |
||||
|
{ |
||||
|
private void InjectionPlanJobAutoMapperProfile() |
||||
|
{ |
||||
|
|
||||
|
CreateMap<InjectionPlanJob, InjectionPlanNote>() |
||||
|
.ForMember(x => x.JobNumber, y => y.MapFrom(d => d.Number)) |
||||
|
.ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.InjectionPlanRequestNumber)) |
||||
|
.ForMember(x => x.ActiveDate, y => y.MapFrom(d => DateTime.Now)) |
||||
|
.ForMember(x => x.Worker, y => y.MapFrom(d => d.CompleteUserName)) |
||||
|
.Ignore(x => x.Confirmed) |
||||
|
.Ignore(x => x.Number) |
||||
|
.Ignore(x => x.ConfirmTime); |
||||
|
|
||||
|
CreateMap<InjectionPlanJobDetail, InjectionPlanNoteDetail>() |
||||
|
; |
||||
|
|
||||
|
CreateMap<InjectionPlanJob, InjectionPlanNoteEditInput>() |
||||
|
.ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.InjectionPlanRequestNumber)) |
||||
|
.Ignore(x => x.Confirmed) |
||||
|
.Ignore(x => x.JobNumber) |
||||
|
.Ignore(x => x.ActiveDate) |
||||
|
; |
||||
|
CreateMap<InjectionPlanJobDetail, InjectionPlanNoteDetailInput>() |
||||
|
; |
||||
|
} |
||||
|
} |
@ -0,0 +1,51 @@ |
|||||
|
using AutoMapper; |
||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event; |
||||
|
|
||||
|
public partial class StoreEventAutoMapperProfile : Profile |
||||
|
{ |
||||
|
private void InjectionPlanNoteAutoMapperProfile() |
||||
|
{ |
||||
|
CreateMap<InjectionPlanNoteDetail, TransferLogEditInput>() |
||||
|
.Ignore(x => x.DocNumber) |
||||
|
.Ignore(x => x.JobNumber) |
||||
|
.Ignore(x => x.Worker) |
||||
|
.Ignore(x => x.TransType) |
||||
|
.Ignore(x => x.ExtraProperties) |
||||
|
.Ignore(x => x.TransSubType) |
||||
|
|
||||
|
.ForMember(x => x.Qty, y => y.MapFrom(t => t.HandledToQty)) |
||||
|
.ForMember(x => x.SupplierBatch, y => y.MapFrom(t => t.HandledFromSupplierBatch)) |
||||
|
.ForMember(x => x.ArriveDate, y => y.MapFrom(t => t.HandledFromArriveDate)) |
||||
|
.ForMember(x => x.ProduceDate, y => y.MapFrom(t => t.HandledFromProduceDate)) |
||||
|
.ForMember(x => x.ExpireDate, y => y.MapFrom(t => t.HandledFromExpireDate)) |
||||
|
|
||||
|
.ForMember(x => x.FromPackingCode, y => y.MapFrom(t => t.HandledFromPackingCode)) |
||||
|
.ForMember(x => x.FromContainerCode, y => y.MapFrom(t => t.HandledFromContainerCode)) |
||||
|
|
||||
|
.ForMember(x => x.FromLot, y => y.MapFrom(t => t.HandledFromLot)) |
||||
|
.ForMember(x => x.FromStatus, y => y.MapFrom(t => t.Status)) |
||||
|
|
||||
|
.ForMember(x => x.FromLocationCode, y => y.MapFrom(t => t.HandledFromLocationCode)) |
||||
|
.ForMember(x => x.FromLocationGroup, y => y.MapFrom(t => t.HandledFromLocationGroup)) |
||||
|
.ForMember(x => x.FromLocationArea, y => y.MapFrom(t => t.HandledFromLocationArea)) |
||||
|
.ForMember(x => x.FromLocationErpCode, y => y.MapFrom(t => t.HandledFromLocationErpCode)) |
||||
|
.ForMember(x => x.FromWarehouseCode, y => y.MapFrom(t => t.HandledFromWarehouseCode)) |
||||
|
|
||||
|
.ForMember(x => x.ToLot, y => y.MapFrom(t => t.HandledToLot)) |
||||
|
.ForMember(x => x.ToStatus, y => y.MapFrom(t => t.Status)) |
||||
|
.ForMember(x => x.ToPackingCode, y => y.MapFrom(t => t.HandledToPackingCode)) |
||||
|
.ForMember(x => x.ToContainerCode, y => y.MapFrom(t => t.HandledToContainerCode)) |
||||
|
|
||||
|
.ForMember(x => x.ToLocationCode, y => y.MapFrom(t => t.HandledToLocationCode)) |
||||
|
.ForMember(x => x.ToLocationGroup, y => y.MapFrom(t => t.HandledToLocationGroup)) |
||||
|
.ForMember(x => x.ToLocationArea, y => y.MapFrom(t => t.HandledToLocationArea)) |
||||
|
.ForMember(x => x.ToLocationErpCode, y => y.MapFrom(t => t.HandledToLocationErpCode)) |
||||
|
.ForMember(x => x.ToWarehouseCode, y => y.MapFrom(t => t.HandledToWarehouseCode)) |
||||
|
|
||||
|
; |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
using AutoMapper; |
||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Win_in.Sfs.Shared.Application; |
||||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event; |
||||
|
|
||||
|
public partial class StoreEventAutoMapperProfile : Profile |
||||
|
{ |
||||
|
private void InjectionPlanRequestAutoMapperProfile() |
||||
|
{ |
||||
|
CreateMap<InjectionPlanRequest, InjectionPlanJobEditInput>() |
||||
|
.ForMember(x => x.InjectionPlanRequestNumber, y => y.MapFrom(d => d.Number)) |
||||
|
.Ignore(x => x.WarehouseCode) |
||||
|
.Ignore(x => x.UpStreamJobNumber) |
||||
|
.Ignore(x => x.JobType) |
||||
|
.Ignore(x => x.IsAutoComplete) |
||||
|
.Ignore(x => x.ExpiredTime) |
||||
|
.Ignore(x => x.JobDescription) |
||||
|
.Ignore(x => x.JobStatus) |
||||
|
.Ignore(x => x.WorkGroupCode) |
||||
|
.Ignore(x => x.Priority) |
||||
|
.Ignore(x => x.PriorityIncrement) |
||||
|
.Ignore(x => x.AcceptUserId) |
||||
|
.Ignore(x => x.AcceptTime) |
||||
|
.Ignore(x => x.AcceptUserName) |
||||
|
.Ignore(x => x.CompleteUserId) |
||||
|
.Ignore(x => x.CompleteUserName) |
||||
|
.Ignore(x => x.CompleteTime) |
||||
|
.Ignore(x => x.Details) |
||||
|
; |
||||
|
} |
||||
|
} |
@ -0,0 +1,224 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.EventBus; |
||||
|
using Volo.Abp.Uow; |
||||
|
using Win_in.Sfs.Basedata.Application.Contracts; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Event; |
||||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event.BusinessJob; |
||||
|
|
||||
|
public class InjectionPlanJobEventHandler : |
||||
|
StoreEventHandlerBase |
||||
|
, ILocalEventHandler<SfsCompletedEntityEventData<InjectionPlanJob>> |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<InjectionPlanJob>> |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<List<InjectionPlanJob>>> |
||||
|
{ |
||||
|
private readonly IInjectionPlanNoteAppService _injectionNoteAppService; |
||||
|
private readonly IExpectOutAppService _expectOutAppService; |
||||
|
private readonly ILocationAppService _locationAppService; |
||||
|
private readonly ITransferLibRequestAppService _transferLibRequestAppService; |
||||
|
|
||||
|
public InjectionPlanJobEventHandler(IInjectionPlanNoteAppService injectionNoteAppService, |
||||
|
IExpectOutAppService expectOutAppService, |
||||
|
ILocationAppService locationAppService, ITransferLibRequestAppService transferLibRequestAppService) |
||||
|
{ |
||||
|
_injectionNoteAppService = injectionNoteAppService; |
||||
|
_expectOutAppService = expectOutAppService; |
||||
|
_locationAppService = locationAppService; |
||||
|
_transferLibRequestAppService = transferLibRequestAppService; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 执行后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsCompletedEntityEventData<InjectionPlanJob> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
var injectionNote = await BuildInjectionPlanNoteAsync(entity).ConfigureAwait(false); |
||||
|
await _injectionNoteAppService.CreateAsync(injectionNote).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<InjectionPlanJob> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
|
||||
|
await CreateExpectOutAsync(entity).ConfigureAwait(false); |
||||
|
|
||||
|
await CreateTransferLibAsync(entity).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 批量创建后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<InjectionPlanJob>> eventData) |
||||
|
{ |
||||
|
var entitys = eventData.Entity; |
||||
|
|
||||
|
foreach (var entity in entitys) |
||||
|
{ |
||||
|
await CreateExpectOutAsync(entity).ConfigureAwait(false); |
||||
|
|
||||
|
await CreateTransferLibAsync(entity).ConfigureAwait(false); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#region 私有
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建预计出
|
||||
|
/// </summary>
|
||||
|
/// <param name="entity"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task CreateExpectOutAsync(InjectionPlanJob entity) |
||||
|
{ |
||||
|
var expectOutEditInputs = new List<ExpectOutEditInput>(); |
||||
|
foreach (var detail in entity.Details) |
||||
|
{ |
||||
|
var inputoExpectOutEditInput = new ExpectOutEditInput(); |
||||
|
inputoExpectOutEditInput.JobNumber = entity.Number; |
||||
|
inputoExpectOutEditInput.ItemCode = detail.ItemCode; |
||||
|
inputoExpectOutEditInput.Qty = detail.RecommendFromQty; |
||||
|
inputoExpectOutEditInput.LocationCode = detail.RecommendFromLocationCode; |
||||
|
inputoExpectOutEditInput.ArriveDate = detail.RecommendFromArriveDate; |
||||
|
inputoExpectOutEditInput.ContainerCode = detail.RecommendFromContainerCode; |
||||
|
inputoExpectOutEditInput.ExpireDate = detail.RecommendFromExpireDate; |
||||
|
inputoExpectOutEditInput.ItemDesc1 = detail.ItemDesc1; |
||||
|
inputoExpectOutEditInput.ItemDesc2 = detail.ItemDesc2; |
||||
|
inputoExpectOutEditInput.ItemName = detail.ItemName; |
||||
|
inputoExpectOutEditInput.LocationArea = detail.RecommendFromLocationArea; |
||||
|
inputoExpectOutEditInput.LocationGroup = detail.RecommendFromLocationGroup; |
||||
|
inputoExpectOutEditInput.LocationErpCode = detail.RecommendFromLocationErpCode; |
||||
|
inputoExpectOutEditInput.PackingCode = detail.RecommendFromPackingCode; |
||||
|
inputoExpectOutEditInput.Lot = detail.RecommendFromLot; |
||||
|
inputoExpectOutEditInput.ProduceDate = detail.RecommendFromProduceDate; |
||||
|
inputoExpectOutEditInput.Status = detail.Status; |
||||
|
inputoExpectOutEditInput.Uom = detail.Uom; |
||||
|
inputoExpectOutEditInput.SupplierBatch = detail.RecommendFromSupplierBatch; |
||||
|
inputoExpectOutEditInput.WarehouseCode = detail.RecommendFromWarehouseCode; |
||||
|
|
||||
|
expectOutEditInputs.Add(inputoExpectOutEditInput); |
||||
|
} |
||||
|
|
||||
|
await _expectOutAppService.AddManyAsync(expectOutEditInputs).ConfigureAwait(false); |
||||
|
|
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据是否在 第一层 来创建 是否生成库移任务
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task CreateTransferLibAsync(InjectionPlanJob injectionJob) |
||||
|
{ |
||||
|
if (!await IsMinRowAsync(injectionJob).ConfigureAwait(false)) |
||||
|
{ |
||||
|
foreach (var detail in injectionJob.Details) |
||||
|
{ |
||||
|
var input = new TransferLibRequestEditInput(); |
||||
|
input.CallBusinessType = nameof(IInjectionPlanJobAppService); |
||||
|
input.CallJobNumber = injectionJob.Number; |
||||
|
input.CallRequestNumber = injectionJob.InjectionPlanRequestNumber; |
||||
|
input.CallServerName = "Win_in.Sfs.Wms.Store.Application.InjectionPlanJobAppService"; |
||||
|
input.Type = "Transfer_Warehouse"; |
||||
|
input.UseOnTheWayLocation = true; |
||||
|
|
||||
|
var detailInput = new TransferLibRequestDetailInput(); |
||||
|
detailInput.CallBusinessType = nameof(IInjectionPlanJobAppService); |
||||
|
detailInput.CallRequestNumber = injectionJob.InjectionPlanRequestNumber; |
||||
|
detailInput.CallServerName = "Win_in.Sfs.Wms.Store.Application.InjectionPlanJobAppService"; |
||||
|
detailInput.CallJobNumber = injectionJob.Number; |
||||
|
|
||||
|
detailInput.JobStatus = EnumJobStatus.Open; |
||||
|
detailInput.ItemCode = detail.ItemCode; |
||||
|
detailInput.StdPackQty = detail.StdPackQty; |
||||
|
detailInput.Uom = detail.Uom; |
||||
|
detailInput.Status = detail.Status; |
||||
|
|
||||
|
detailInput.RecommendFromQty = detail.RecommendFromQty; |
||||
|
detailInput.RecommendFromLot = detail.RecommendFromLot; |
||||
|
detailInput.RecommendFromPackingCode = detailInput.RecommendFromPackingCode; |
||||
|
detailInput.RecommendToLot = detail.RecommendToLot; |
||||
|
|
||||
|
detailInput.RecommendFromArriveDate = detail.RecommendFromArriveDate; |
||||
|
detailInput.RecommendFromExpireDate = detail.RecommendFromExpireDate; |
||||
|
detailInput.RecommendFromProduceDate = detail.RecommendFromProduceDate; |
||||
|
detailInput.RecommendFromSupplierBatch = detail.RecommendFromSupplierBatch; |
||||
|
|
||||
|
detailInput.RecommendFromLocationCode = detail.RecommendFromLocationCode; |
||||
|
detailInput.RecommendFromLocationGroup = detail.RecommendFromLocationGroup; |
||||
|
detailInput.RecommendFromLocationArea = detail.RecommendFromLocationArea; |
||||
|
detailInput.RecommendFromLocationErpCode = detail.RecommendFromLocationErpCode; |
||||
|
detailInput.RecommendFromWarehouseCode = detail.RecommendFromWarehouseCode; |
||||
|
|
||||
|
detailInput.RecommendToQty = detail.RecommendToQty; |
||||
|
detailInput.RecommendToLot = detail.RecommendToLot; |
||||
|
detailInput.RecommendToPackingCode = detailInput.RecommendToPackingCode; |
||||
|
detailInput.RecommendToLot = detail.RecommendToLot; |
||||
|
|
||||
|
detailInput.RecommendToArriveDate = detail.RecommendToArriveDate; |
||||
|
detailInput.RecommendToExpireDate = detail.RecommendToExpireDate; |
||||
|
detailInput.RecommendToProduceDate = detail.RecommendToProduceDate; |
||||
|
detailInput.RecommendToSupplierBatch = detail.RecommendToSupplierBatch; |
||||
|
|
||||
|
detailInput.RecommendToLocationCode = detail.RecommendToLocationCode; |
||||
|
detailInput.RecommendToLocationGroup = detail.RecommendToLocationGroup; |
||||
|
detailInput.RecommendToLocationArea = detail.RecommendToLocationArea; |
||||
|
detailInput.RecommendToLocationErpCode = detail.RecommendToLocationErpCode; |
||||
|
detailInput.RecommendToWarehouseCode = detail.RecommendToWarehouseCode; |
||||
|
|
||||
|
await _transferLibRequestAppService.CreateAsync(input).ConfigureAwait(false); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建补料记录实体
|
||||
|
/// </summary>
|
||||
|
/// <param name="entity"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task<InjectionPlanNoteEditInput> BuildInjectionPlanNoteAsync(InjectionPlanJob entity) |
||||
|
{ |
||||
|
var injectionNoteCreateInput = ObjectMapper.Map<InjectionPlanJob, InjectionPlanNoteEditInput>(entity); |
||||
|
injectionNoteCreateInput.JobNumber = entity.Number; |
||||
|
|
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
|
||||
|
return injectionNoteCreateInput; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 判断是不是在最底层 如果不是则把状态变更为等待
|
||||
|
/// </summary>
|
||||
|
/// <param name="injectionJob"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task<bool> IsMinRowAsync(InjectionPlanJob injectionJob) |
||||
|
{ |
||||
|
var detail = injectionJob.Details.FirstOrDefault(); |
||||
|
|
||||
|
var loctionDto = await _locationAppService.GetByCodeAsync(detail.RecommendFromLocationCode) |
||||
|
.ConfigureAwait(false); |
||||
|
if (loctionDto.RowCode == 1) |
||||
|
{ |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,285 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text.Json; |
||||
|
using System.Threading.Tasks; |
||||
|
using Castle.Components.DictionaryAdapter; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.EventBus; |
||||
|
using Win_in.Sfs.Basedata.Application.Contracts; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Event; |
||||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; |
||||
|
|
||||
|
public class InjectionPlanRequestEventHandler |
||||
|
: StoreEventHandlerBase |
||||
|
, ILocalEventHandler<SfsHandledEntityEventData<InjectionPlanRequest>> |
||||
|
, ILocalEventHandler<SfsAbortedEntityEventData<InjectionPlanRequest>> |
||||
|
, ILocalEventHandler<SfsCompletedEntityEventData<InjectionPlanRequest>> |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<InjectionPlanRequest>> |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<List<InjectionPlanRequest>>> |
||||
|
{ |
||||
|
private readonly IInjectionPlanJobAppService _injectionJobAppService; |
||||
|
private readonly IProductionLineAppService _productionLineAppService; |
||||
|
private readonly IProductionLineItemAppService _productionLineItemAppService; |
||||
|
private readonly ILocationAppService _locationAppService; |
||||
|
private readonly IBalanceAppService _balanceAppService; |
||||
|
|
||||
|
public InjectionPlanRequestEventHandler( |
||||
|
IInjectionPlanJobAppService injectionJobAppService, IProductionLineAppService productionLineAppService, |
||||
|
ILocationAppService locationAppService, |
||||
|
IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService) |
||||
|
{ |
||||
|
_injectionJobAppService = injectionJobAppService; |
||||
|
_productionLineAppService = productionLineAppService; |
||||
|
_locationAppService = locationAppService; |
||||
|
_balanceAppService = balanceAppService; |
||||
|
_productionLineItemAppService = productionLineItemAppService; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData">Event data</param>
|
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<InjectionPlanRequest> eventData) |
||||
|
{ |
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 批量创建后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData">Event data</param>
|
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<InjectionPlanRequest>> eventData) |
||||
|
{ |
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 执行后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public virtual async Task HandleEventAsync(SfsHandledEntityEventData<InjectionPlanRequest> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
|
||||
|
List<InjectionPlanJobEditInput> injectionJobs = new EditableList<InjectionPlanJobEditInput>(); |
||||
|
|
||||
|
injectionJobs = await CreateInjectionPlanJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false); |
||||
|
|
||||
|
if (injectionJobs.Any()) |
||||
|
{ |
||||
|
await _injectionJobAppService.CreateManyAsync(injectionJobs).ConfigureAwait(false); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 驳回后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public virtual async Task HandleEventAsync(SfsAbortedEntityEventData<InjectionPlanRequest> eventData) |
||||
|
{ |
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 完成后
|
||||
|
/// </summary>
|
||||
|
/// <param name="eventData"></param>
|
||||
|
/// <returns></returns>
|
||||
|
public virtual async Task HandleEventAsync(SfsCompletedEntityEventData<InjectionPlanRequest> eventData) |
||||
|
{ |
||||
|
_ = eventData.Entity; |
||||
|
// await _injectionJobAppService.CompleteByInjectionPlanRequestAsync(entity.Number);
|
||||
|
|
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
#region 私有
|
||||
|
|
||||
|
#region 按箱叫料
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建注塑任务
|
||||
|
/// </summary>
|
||||
|
/// <param name="injectionRequest"></param>
|
||||
|
/// <returns></returns>
|
||||
|
/// <exception cref="UserFriendlyException"></exception>
|
||||
|
private async Task<List<InjectionPlanJobEditInput>> CreateInjectionPlanJobWithBoxQtyTypeAsync |
||||
|
(InjectionPlanRequest injectionRequest) |
||||
|
{ |
||||
|
var inputJobs = new List<InjectionPlanJobEditInput>(); |
||||
|
var inputExpectOutEditInput = new ExpectOutEditInput(); |
||||
|
//已用的库存的箱码集合
|
||||
|
var useBalanceList = new List<string>(); |
||||
|
|
||||
|
var groupByItemCodeAndLocationCode = |
||||
|
injectionRequest.Details.GroupBy(p => new { p.ItemCode, p.ToLocationCode }); |
||||
|
|
||||
|
foreach (var locationCodeItemCodeGroup in groupByItemCodeAndLocationCode) |
||||
|
{ |
||||
|
var inputDetails = injectionRequest.Details.Where(p => |
||||
|
p.ItemCode == locationCodeItemCodeGroup.Key.ItemCode && |
||||
|
p.ToLocationCode == locationCodeItemCodeGroup.Key.ToLocationCode); |
||||
|
var inputDetailTemplate = inputDetails.First(); |
||||
|
//获取请求下 这个零件和这个库位一个需要多少箱
|
||||
|
var sumBoxQty = inputDetails.Sum(p => p.BoxQty); |
||||
|
//获取生产线
|
||||
|
var productionLineDto = await _productionLineAppService |
||||
|
.GetByLocationCodeAsync(inputDetails.First().ToLocationCode).ConfigureAwait(false); |
||||
|
if (productionLineDto == null) |
||||
|
{ |
||||
|
throw new UserFriendlyException($"库位【{inputDetailTemplate.ToLocationCode}】没有对应的【生产线】"); |
||||
|
} |
||||
|
|
||||
|
var productLineCodeAndItemCode = await _productionLineItemAppService |
||||
|
.GetByProductLineCodeAndItemCodeAsync(productionLineDto.Code, inputDetailTemplate.ItemCode) |
||||
|
.ConfigureAwait(false); |
||||
|
if (productLineCodeAndItemCode == null) |
||||
|
{ |
||||
|
throw new UserFriendlyException( |
||||
|
$"物品代码【{inputDetailTemplate.ItemCode}】在生产线【{productionLineDto.Code}】中没有对应的【生产线物品关系】"); |
||||
|
} |
||||
|
|
||||
|
//获取可用库存
|
||||
|
var input = new RecommendBalanceRequestInput |
||||
|
{ |
||||
|
ItemCode = locationCodeItemCodeGroup.Key.ItemCode, |
||||
|
Qty = decimal.MaxValue, |
||||
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
||||
|
Locations = JsonSerializer.Deserialize<List<string>>(productLineCodeAndItemCode |
||||
|
.RawLocationCodeListJson) |
||||
|
}; |
||||
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); |
||||
|
usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode) && p.Qty != 0).ToList(); |
||||
|
if (usableList.Any()) |
||||
|
{ |
||||
|
for (var i = 0; i < sumBoxQty; i++) |
||||
|
{ |
||||
|
if (usableList.Any()) |
||||
|
{ |
||||
|
var firstUsable = usableList.First(); |
||||
|
useBalanceList.Add(firstUsable.PackingCode); |
||||
|
usableList.Remove(firstUsable); |
||||
|
|
||||
|
var injectionJobEditInput = |
||||
|
await BuildInjectionPlanJobCreateInputWithBoxQtyTypeAsync(injectionRequest, |
||||
|
inputDetailTemplate, |
||||
|
firstUsable) |
||||
|
.ConfigureAwait(false); |
||||
|
|
||||
|
inputJobs.Add(injectionJobEditInput); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return inputJobs; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 构造注塑任务
|
||||
|
/// </summary>
|
||||
|
/// <param name="injectionRequest"></param>
|
||||
|
/// <param name="injectionRequestDetail"></param>
|
||||
|
/// <param name="balanceDtos"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task<InjectionPlanJobEditInput> BuildInjectionPlanJobCreateInputWithBoxQtyTypeAsync( |
||||
|
InjectionPlanRequest injectionRequest, |
||||
|
InjectionPlanRequestDetail injectionRequestDetail, BalanceDTO balanceDtos) |
||||
|
{ |
||||
|
var job = ObjectMapper.Map<InjectionPlanRequest, InjectionPlanJobEditInput>(injectionRequest); |
||||
|
job.JobType = EnumJobType.IssueJob; |
||||
|
job.JobStatus = EnumJobStatus.Open; |
||||
|
job.WorkGroupCode = injectionRequestDetail.ToLocationGroup; |
||||
|
job.WarehouseCode = injectionRequestDetail.ToWarehouseCode; |
||||
|
job.Worker = injectionRequest.Worker; |
||||
|
job.InjectionPlanRequestNumber = injectionRequest.Number; |
||||
|
|
||||
|
job.Details.Add(await BuildInjectionPlanJobDetailWithBoxQtyTypeAsync(injectionRequestDetail, balanceDtos) |
||||
|
.ConfigureAwait(false)); |
||||
|
|
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
|
||||
|
return job; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 构造注塑任务明细
|
||||
|
/// </summary>
|
||||
|
/// <param name="injectionRequestDetail"></param>
|
||||
|
/// <param name="balance"></param>
|
||||
|
/// <param name="toLocationGroupCode"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private async Task<InjectionPlanJobDetailInput> BuildInjectionPlanJobDetailWithBoxQtyTypeAsync( |
||||
|
InjectionPlanRequestDetail injectionRequestDetail, BalanceDTO balance) |
||||
|
{ |
||||
|
var detail = new InjectionPlanJobDetailInput(); |
||||
|
detail.RequestLocationCode = injectionRequestDetail.ToLocationCode; |
||||
|
detail.RequestLocationGroup = injectionRequestDetail.ToLocationGroup; |
||||
|
detail.RequestLocationArea = injectionRequestDetail.ToLocationArea; |
||||
|
detail.RequestLocationErpCode = injectionRequestDetail.ToLocationErpCode; |
||||
|
detail.RequestWarehouseCode = injectionRequestDetail.ToWarehouseCode; |
||||
|
|
||||
|
detail.PositionCode = injectionRequestDetail.PositionCode; |
||||
|
detail.RecommendType = injectionRequestDetail.RecommendType; |
||||
|
detail.ProdLine = injectionRequestDetail.ToLocationCode; |
||||
|
|
||||
|
detail.ItemCode = injectionRequestDetail.ItemCode; |
||||
|
detail.ItemName = injectionRequestDetail.ItemName; |
||||
|
detail.ItemDesc1 = injectionRequestDetail.ItemDesc1; |
||||
|
detail.ItemDesc2 = injectionRequestDetail.ItemDesc2; |
||||
|
detail.StdPackQty = injectionRequestDetail.StdPackQty; |
||||
|
|
||||
|
detail.Status = EnumInventoryStatus.OK; |
||||
|
detail.Uom = balance.Uom; |
||||
|
|
||||
|
detail.RecommendFromPackingCode = balance.PackingCode; |
||||
|
detail.RecommendFromContainerCode = balance.ContainerCode; |
||||
|
detail.RecommendFromLot = balance.Lot; |
||||
|
|
||||
|
detail.RecommendFromQty = balance.Qty; |
||||
|
|
||||
|
detail.RecommendFromSupplierBatch = balance.SupplierBatch; |
||||
|
detail.RecommendFromProduceDate = balance.ProduceDate; |
||||
|
detail.RecommendFromExpireDate = balance.ExpireDate; |
||||
|
detail.RecommendFromProduceDate = balance.ProduceDate; |
||||
|
detail.RecommendFromArriveDate = balance.ArriveDate; |
||||
|
|
||||
|
detail.RecommendFromLocationArea = balance.LocationArea; |
||||
|
detail.RecommendFromLocationCode = balance.LocationCode; |
||||
|
detail.RecommendFromLocationErpCode = balance.LocationErpCode; |
||||
|
detail.RecommendFromLocationGroup = balance.LocationGroup; |
||||
|
detail.RecommendFromWarehouseCode = balance.WarehouseCode; |
||||
|
|
||||
|
detail.RecommendToPackingCode = balance.PackingCode; |
||||
|
detail.RecommendToContainerCode = balance.ContainerCode; |
||||
|
detail.RecommendToLot = balance.Lot; |
||||
|
|
||||
|
detail.RecommendToQty = balance.Qty; |
||||
|
|
||||
|
detail.RecommendToSupplierBatch = balance.SupplierBatch; |
||||
|
detail.RecommendToProduceDate = balance.ProduceDate; |
||||
|
detail.RecommendToExpireDate = balance.ExpireDate; |
||||
|
detail.RecommendToProduceDate = balance.ProduceDate; |
||||
|
detail.RecommendToArriveDate = balance.ArriveDate; |
||||
|
|
||||
|
detail.RecommendToLocationCode = injectionRequestDetail.ToLocationCode; |
||||
|
detail.RecommendToLocationErpCode = injectionRequestDetail.ToLocationErpCode; |
||||
|
detail.RecommendToLocationArea = injectionRequestDetail.ToLocationArea; |
||||
|
detail.RecommendToWarehouseCode = injectionRequestDetail.ToWarehouseCode; |
||||
|
detail.RecommendToLocationGroup = injectionRequestDetail.ToLocationGroup; |
||||
|
|
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
return detail; |
||||
|
} |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
#endregion
|
||||
|
} |
@ -0,0 +1,88 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.EventBus; |
||||
|
using Volo.Abp.Uow; |
||||
|
using Win_in.Sfs.Shared.Domain.Shared; |
||||
|
using Win_in.Sfs.Shared.Event; |
||||
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
||||
|
using Win_in.Sfs.Wms.Store.Domain; |
||||
|
using Win_in.Sfs.Wms.Store.Event.Transaction; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.Store.Event.Transactions; |
||||
|
|
||||
|
public class InjectionPlanNoteEventHandler |
||||
|
: StoreInventoryEventHandlerBase |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<InjectionPlanNote>> |
||||
|
, ILocalEventHandler<SfsCreatedEntityEventData<List<InjectionPlanNote>>> |
||||
|
, ILocalEventHandler<SfsConfirmedEntityEventData<InjectionPlanNote>> |
||||
|
{ |
||||
|
private const EnumTransType TransType = EnumTransType.Issue; |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<InjectionPlanNote> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
var route = entity.UseOnTheWayLocation |
||||
|
? EnumTransferRoute.SourceToOnTheWay |
||||
|
: EnumTransferRoute.SourceToDestination; |
||||
|
transferLogs.AddRange(await BuildTransferLogsAsync(entity).ConfigureAwait(false)); |
||||
|
|
||||
|
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<InjectionPlanNote>> eventData) |
||||
|
{ |
||||
|
var entities = eventData.Entity; |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
//如果要做库存事务汇总,可以修改此处
|
||||
|
foreach (var issueNote in entities) |
||||
|
{ |
||||
|
transferLogs.AddRange(await BuildTransferLogsAsync(issueNote).ConfigureAwait(false)); |
||||
|
} |
||||
|
|
||||
|
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task HandleEventAsync(SfsConfirmedEntityEventData<InjectionPlanNote> eventData) |
||||
|
{ |
||||
|
var entity = eventData.Entity; |
||||
|
|
||||
|
var inputList = await BuildTransferLogsAsync(entity) |
||||
|
.ConfigureAwait(false); |
||||
|
await AddTransferLogsAsync(inputList).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
private async Task AddTransferLogsAsync(List<TransferLogEditInput> inputList) |
||||
|
{ |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
|
||||
|
transferLogs.AddRange(inputList); |
||||
|
|
||||
|
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
private async Task<List<TransferLogEditInput>> BuildTransferLogsAsync(InjectionPlanNote issueNote) |
||||
|
{ |
||||
|
var transferLogs = new List<TransferLogEditInput>(); |
||||
|
foreach (var detail in issueNote.Details.Where(detail => detail.HandledToQty != 0)) |
||||
|
{ |
||||
|
var transferLog = ObjectMapper.Map<InjectionPlanNoteDetail, TransferLogEditInput>(detail); |
||||
|
|
||||
|
transferLog.TransSubType = EnumTransSubType.Issue_WIP; |
||||
|
transferLog.TransType = TransType; |
||||
|
transferLog.DocNumber = issueNote.Number; |
||||
|
transferLog.JobNumber = issueNote.JobNumber; |
||||
|
|
||||
|
transferLogs.Add(transferLog); |
||||
|
} |
||||
|
|
||||
|
await Task.CompletedTask.ConfigureAwait(false); |
||||
|
|
||||
|
return transferLogs; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue