You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
5.6 KiB
C#

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
|* (c) 2026 WenJY
|* CLR4.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("托盘重量超限");
// }
//}