#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;
///
/// 通用仓储任务业务扩展基类
/// 当某个业务场景需要定制特殊逻辑时,继承此类
///
/// 物料校验DTO类型
public abstract class StoreTaskBusinessEx : StoreTaskBusiness
where TValidateMaterialDto : ValidateMaterialDto
{
protected StoreTaskBusinessEx(
IBasePathInfoService basePathInfoService,
ILiveTaskQueueService liveTaskQueueService,
IBaseStoreInfoService baseStoreInfoService)
: base(basePathInfoService, liveTaskQueueService, baseStoreInfoService)
{
}
///
/// 重写物料校验(示例)
///
public override ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto)
{
// 调用子类自定义的校验逻辑
return ValidateMaterialCore((TValidateMaterialDto)validateMaterialDto);
}
///
/// 子类实现具体的物料校验逻辑
///
protected abstract ValidateMaterialResultDto ValidateMaterialCore(TValidateMaterialDto validateMaterialDto);
}
///
/// =============================================================
/// 以下为具体业务扩展示例(使用时取消注释并修改)
/// =============================================================
// ===== 示例1:包材入库特殊业务 =====
//public class MaterialInStoreEx : StoreTaskBusiness
//{
// public MaterialInStoreEx(
// IBasePathInfoService basePathInfoService,
// ILiveTaskQueueService liveTaskQueueService,
// IBaseStoreInfoService baseStoreInfoService)
// : base(basePathInfoService, liveTaskQueueService, baseStoreInfoService)
// {
// }
//
// ///
// /// 重写任务编号生成规则(包材特殊规则)
// ///
// protected override string GenerateTaskCode()
// {
// // 示例:包材入库任务编号以 "M" 开头
// return "M" + DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(100, 999);
// }
//
// ///
// /// 重写入库成功的消息
// ///
// 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)
// {
// }
//
// ///
// /// 重写库位查询条件(成品出库需要特殊校验)
// ///
// protected override Expression> GetLocationWhere(FilterLocationDto filterLocationDto, int locationStatus)
// {
// // 成品出库可能有额外的有效期校验等
// return x => x.materialCode == filterLocationDto.materialCode &&
// x.locationStatus == locationStatus &&
// x.isFlag == 1 &&
// x.remark != "冻结"; // 排除冻结库位
// }
//
// ///
// /// 重写任务编号生成规则(成品特殊规则)
// ///
// 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)
// {
// }
//
// ///
// /// 重写创建任务参数校验(托盘可能有重量校验)
// ///
// protected override void ValidateCreateTaskParams(CreateTaskDto createTaskDto)
// {
// base.ValidateCreateTaskParams(createTaskDto);
//
// // 添加托盘特有的校验逻辑
// // if (createTaskDto.Weight > 1000) throw new InvalidOperationException("托盘重量超限");
// }
//}