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.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface IInjectionIssueJobAppService |
|||
: ISfsJobAppServiceBase<InjectionIssueJobDTO, SfsJobRequestInputBase, InjectionIssueJobCheckInput, InjectionIssueJobEditInput> |
|||
: ISfsJobAppServiceBase<InjectionIssueJobDTO, SfsJobRequestInputBase, InjectionIssueJobCheckInput, |
|||
InjectionIssueJobEditInput> |
|||
{ |
|||
Task CancelByMaterialRequestAsync(string injectionNumber); |
|||
|
|||
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
|
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue