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