|
|
#region << 版 本 注 释 >>
|
|
|
|
|
|
/*--------------------------------------------------------------------
|
|
|
|* 版权所有 (c) 2026 WenJY 保留所有权利。
|
|
|
|* CLR版本:4.0.30319.42000
|
|
|
|* 机器名称:Mr.Wen's MacBook Pro
|
|
|
|* 命名空间:Sln.Wcs.Business
|
|
|
|* 唯一标识:9A0B1C2D-3E4F-5A6B-7C8D-9E0F1A2B3C4D
|
|
|
|*
|
|
|
|* 创建者:WenJY
|
|
|
|* 电子邮箱:
|
|
|
|* 创建时间:2026-05-15 15:40:00
|
|
|
|* 版本:V1.0.0
|
|
|
|* 描述:通用仓储任务业务扩展示例
|
|
|
|* 展示如何继承 StoreTaskBusiness 定制特定业务逻辑
|
|
|
|* 实际使用时,复制此类并修改为具体业务名称
|
|
|
|*
|
|
|
|*--------------------------------------------------------------------
|
|
|
|* 修改人:
|
|
|
|* 时间:
|
|
|
|* 修改说明:
|
|
|
|*
|
|
|
|* 版本:V1.0.0
|
|
|
|*--------------------------------------------------------------------*/
|
|
|
|
|
|
#endregion << 版 本 注 释 >>
|
|
|
|
|
|
using Sln.Wcs.Business.Domain.Dto.CreateTask;
|
|
|
using Sln.Wcs.Business.Domain.Dto.FilterLocation;
|
|
|
using Sln.Wcs.Business.Domain.Dto.ValidateMaterial;
|
|
|
using Sln.Wcs.Business.Domain.Enum;
|
|
|
using Sln.Wcs.Repository.service;
|
|
|
|
|
|
namespace Sln.Wcs.Business;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 通用仓储任务业务扩展基类
|
|
|
/// 当某个业务场景需要定制特殊逻辑时,继承此类
|
|
|
/// </summary>
|
|
|
/// <typeparam name="TValidateMaterialDto">物料校验DTO类型</typeparam>
|
|
|
public abstract class StoreTaskBusinessEx<TValidateMaterialDto> : StoreTaskBusiness
|
|
|
where TValidateMaterialDto : ValidateMaterialDto
|
|
|
{
|
|
|
protected StoreTaskBusinessEx(
|
|
|
IBasePathInfoService basePathInfoService,
|
|
|
ILiveTaskQueueService liveTaskQueueService,
|
|
|
IBaseStoreInfoService baseStoreInfoService)
|
|
|
: base(basePathInfoService, liveTaskQueueService, baseStoreInfoService)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 重写物料校验(示例)
|
|
|
/// </summary>
|
|
|
public override ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto)
|
|
|
{
|
|
|
// 调用子类自定义的校验逻辑
|
|
|
return ValidateMaterialCore((TValidateMaterialDto)validateMaterialDto);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 子类实现具体的物料校验逻辑
|
|
|
/// </summary>
|
|
|
protected abstract ValidateMaterialResultDto ValidateMaterialCore(TValidateMaterialDto validateMaterialDto);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// =============================================================
|
|
|
/// 以下为具体业务扩展示例(使用时取消注释并修改)
|
|
|
/// =============================================================
|
|
|
|
|
|
|
|
|
// ===== 示例1:包材入库特殊业务 =====
|
|
|
//public class MaterialInStoreEx : StoreTaskBusiness
|
|
|
//{
|
|
|
// public MaterialInStoreEx(
|
|
|
// IBasePathInfoService basePathInfoService,
|
|
|
// ILiveTaskQueueService liveTaskQueueService,
|
|
|
// IBaseStoreInfoService baseStoreInfoService)
|
|
|
// : base(basePathInfoService, liveTaskQueueService, baseStoreInfoService)
|
|
|
// {
|
|
|
// }
|
|
|
//
|
|
|
// /// <summary>
|
|
|
// /// 重写任务编号生成规则(包材特殊规则)
|
|
|
// /// </summary>
|
|
|
// protected override string GenerateTaskCode()
|
|
|
// {
|
|
|
// // 示例:包材入库任务编号以 "M" 开头
|
|
|
// return "M" + DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(100, 999);
|
|
|
// }
|
|
|
//
|
|
|
// /// <summary>
|
|
|
// /// 重写入库成功的消息
|
|
|
// /// </summary>
|
|
|
// protected override string GetTaskSuccessMessage(string taskCode, string pathName, TaskTypeEnum taskType, TaskCategoryEnum taskCategory)
|
|
|
// {
|
|
|
// return $"包材入库任务创建成功(特殊规则):{taskCode};关联路径:{pathName}";
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
// ===== 示例2:成品出库特殊业务 =====
|
|
|
//public class ProductOutStoreEx : StoreTaskBusiness
|
|
|
//{
|
|
|
// public ProductOutStoreEx(
|
|
|
// IBasePathInfoService basePathInfoService,
|
|
|
// ILiveTaskQueueService liveTaskQueueService,
|
|
|
// IBaseStoreInfoService baseStoreInfoService)
|
|
|
// : base(basePathInfoService, liveTaskQueueService, baseStoreInfoService)
|
|
|
// {
|
|
|
// }
|
|
|
//
|
|
|
// /// <summary>
|
|
|
// /// 重写库位查询条件(成品出库需要特殊校验)
|
|
|
// /// </summary>
|
|
|
// protected override Expression<Func<BaseLocationInfo, bool>> GetLocationWhere(FilterLocationDto filterLocationDto, int locationStatus)
|
|
|
// {
|
|
|
// // 成品出库可能有额外的有效期校验等
|
|
|
// return x => x.materialCode == filterLocationDto.materialCode &&
|
|
|
// x.locationStatus == locationStatus &&
|
|
|
// x.isFlag == 1 &&
|
|
|
// x.remark != "冻结"; // 排除冻结库位
|
|
|
// }
|
|
|
//
|
|
|
// /// <summary>
|
|
|
// /// 重写任务编号生成规则(成品特殊规则)
|
|
|
// /// </summary>
|
|
|
// protected override string GenerateTaskCode()
|
|
|
// {
|
|
|
// // 示例:成品出库任务编号以 "P" 开头
|
|
|
// return "P" + DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(100, 999);
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
// ===== 示例3:托盘入库特殊业务 =====
|
|
|
//public class PalletInStoreEx : StoreTaskBusiness
|
|
|
//{
|
|
|
// public PalletInStoreEx(
|
|
|
// IBasePathInfoService basePathInfoService,
|
|
|
// ILiveTaskQueueService liveTaskQueueService,
|
|
|
// IBaseStoreInfoService baseStoreInfoService)
|
|
|
// : base(basePathInfoService, liveTaskQueueService, baseStoreInfoService)
|
|
|
// {
|
|
|
// }
|
|
|
//
|
|
|
// /// <summary>
|
|
|
// /// 重写创建任务参数校验(托盘可能有重量校验)
|
|
|
// /// </summary>
|
|
|
// protected override void ValidateCreateTaskParams(CreateTaskDto createTaskDto)
|
|
|
// {
|
|
|
// base.ValidateCreateTaskParams(createTaskDto);
|
|
|
//
|
|
|
// // 添加托盘特有的校验逻辑
|
|
|
// // if (createTaskDto.Weight > 1000) throw new InvalidOperationException("托盘重量超限");
|
|
|
// }
|
|
|
//}
|