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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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("托盘重量超限");
// }
//}