#region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2026 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:Mr.Wen's MacBook Pro * 命名空间:Sln.Wcs.Business * 唯一标识:A6C78343-F3B7-49DB-A582-768186595E02 * * 创建者:WenJY * 电子邮箱: * 创建时间:2026-05-06 18:13:10 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using System.Linq.Expressions; using Sln.Wcs.Business.Domain.Dto.CreateTask; using Sln.Wcs.Business.Domain.Dto.FilterLocation; using Sln.Wcs.Business.Domain.Dto.SaveTask; using Sln.Wcs.Business.Domain.Dto.ValidateMaterial; using Sln.Wcs.Business.Domain.Enum; using Sln.Wcs.Business.Domain.Model.CreateTask; using Sln.Wcs.Business.Domain.Model.FilterLocation; using Sln.Wcs.Business.Domain.Model.SaveTask; using Sln.Wcs.Model.Domain; using Sln.Wcs.Repository.service; namespace Sln.Wcs.Business.InStore; /// /// 包材入库 /// public class MaterialInStore:BaseBusiness { private readonly IBasePathInfoService _basePathInfoService; private readonly ILiveTaskQueueService _liveTaskQueueService; private readonly IBaseStoreInfoService _baseStoreInfoService; public MaterialInStore(IBasePathInfoService basePathInfoService, ILiveTaskQueueService liveTaskQueueService, IBaseStoreInfoService baseStoreInfoService) { _basePathInfoService = basePathInfoService; _liveTaskQueueService = liveTaskQueueService; _baseStoreInfoService = baseStoreInfoService; } public override ValidateMaterialResultDto ValidateMaterial(ValidateMaterialDto validateMaterialDto) { throw new NotImplementedException(); } /// /// 创建任务 /// /// /// /// public override CreateTaskResultDto CreateTask(CreateTaskDto createTaskDto) { CreateTaskResultDto resultDto = new CreateTaskResultDto(); try { #region CreateTaskDto 参数校验 if (string.IsNullOrEmpty(createTaskDto.materialCode)) { throw new InvalidOperationException($"物料编号不允许为 NULL"); } if (string.IsNullOrEmpty(createTaskDto.palletBarcode)) { throw new InvalidOperationException($"托盘条码不允许为 NULL"); } if (string.IsNullOrEmpty(createTaskDto.startPoint) || string.IsNullOrEmpty(createTaskDto.endPoint)) { throw new InvalidOperationException($"起始位置、终点位置不允许为 NULL"); } #endregion createTaskDto.taskType = TaskTypeEnum.InStore; createTaskDto.taskCategory = TaskCategoryEnum.Material; //获取包材入库路径 Expression> exp = x=>x.startPoint == createTaskDto.startPoint && x.endPoint == createTaskDto.endPoint && x.pathType == (int)createTaskDto.taskType && x.pathCategory == (int)createTaskDto.taskCategory; BasePathInfo pathInfo = _basePathInfoService.GetBasePathInfo(exp).FirstOrDefault() ?? throw new InvalidOperationException($"包材入库输送路径为 NULL"); #region 路径转为任务 string taskCode = "2026050700001"; //需根据现场实际定义生成规则 List taskDetails = pathInfo.pathDetails.Select( item => base.LiveTaskDetailWrapper(taskCode,createTaskDto,item)).ToList(); var taskQueue = base.LiveTaskQueueWrapper(taskCode, createTaskDto, pathInfo); taskQueue.taskSteps = taskDetails.Count; taskQueue.taskDetails = taskDetails; #endregion resultDto.code = BusinessStatusEnum.成功; resultDto.msg = $"包材入库任务创建成功:{taskCode};关联路径:{pathInfo.pathName}"; resultDto.data = new CreateTaskResultModel() { taskCode = taskCode, taskQueue = taskQueue, taskDetails = taskDetails, }; } catch (Exception e) { resultDto.code = BusinessStatusEnum.方法执行异常; resultDto.msg = e.Message; } return resultDto; } /// /// 筛选库位 /// /// /// /// public override FilterLocationResultDto FilterLocation(FilterLocationDto filterLocationDto) { FilterLocationResultDto resultDto = new FilterLocationResultDto(); try { #region 参数校验 if (string.IsNullOrEmpty(filterLocationDto.materialCode)) { throw new InvalidOperationException($"物料编号不允许为 NULL"); } #endregion Expression> storeWhere = x => x.storeType == (int)StoreTypeEnum.Material; Expression> locationWhere = x=>x.materialCode==filterLocationDto.materialCode && x.locationStatus == 0 && x.isFlag == 1; List storeInfos = _baseStoreInfoService.GetBasePathInfo(storeWhere,locationWhere); //先对仓库进行排序 BaseStoreInfo? storeInfo = storeInfos.Where(s => s.locationInfos.Count > 0).OrderBy(x=>x.storeCode).FirstOrDefault() ?? throw new ArgumentNullException($"未获取到可用仓库"); BaseLocationInfo? locationInfo = storeInfo.locationInfos.OrderBy(x => x.locationRows).ThenBy(x=>x.locationColumns).ThenBy(x=>x.locationLayers).FirstOrDefault() ?? throw new ArgumentNullException($"目标仓库:{storeInfo.storeName}中未获取到可用库位"); resultDto.code = BusinessStatusEnum.成功; resultDto.msg = "执行完成"; resultDto.data = new FilterLocationResultModel() { storeInfo = storeInfo, locationInfos = storeInfo.locationInfos, locationInfo = locationInfo, }; } catch (Exception e) { resultDto.code = BusinessStatusEnum.方法执行异常; resultDto.msg = e.Message; } return resultDto; } /// /// 保存任务 /// /// /// public override SaveTaskResultDto SaveTask(SaveTaskDto saveTaskDto) { SaveTaskResultDto resultDto = new SaveTaskResultDto(); try { var inRes = _liveTaskQueueService.InsertTaskQueue(saveTaskDto.taskQueue); resultDto.code = BusinessStatusEnum.成功; resultDto.msg = "执行完成"; resultDto.data = new SaveTaskResultModel() { isRes = inRes }; } catch (Exception e) { resultDto.code = BusinessStatusEnum.方法执行异常; resultDto.msg = e.Message; } return resultDto; } }