using HH.WMS.BLL.Basic; using HH.WMS.Common.External; using HH.WMS.Common.Response; using HH.WMS.DAL; using HH.WMS.DAL.Algorithm; using HH.WMS.DAL.Basic; using HH.WMS.DAL.SysMgr; using HH.WMS.Entitys; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Common; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HH.WMS.BLL.External { /// /// 验证接口参数 /// public class ParameterVerifyBLL : DapperBaseBLL { private static string _className = "HH.BWMS.BLL.External.ParameterVerify"; #region 验证入库业务参数 + VerifyInWorkArea /// /// 验证入库业务参数 /// /// /// public static ExecuteInWorkAreaPara VerifyInWorkArea(ExecuteInWorkAreaPara executeInWorkAreaPara) { _className += ".VerifyInWorkArea"; if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == null) { executeInWorkAreaPara.InWorkAreaEntity.isTransport = "N"; } //物料编码_对象不为空时,必须存在物料编码 if (executeInWorkAreaPara.InWorkAreaEntity.data != null) if (executeInWorkAreaPara.InWorkAreaEntity.data.Any(entity => string.IsNullOrEmpty(entity.itemCode))) { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("物料编码为空" + JsonConvert.SerializeObject(executeInWorkAreaPara.InWorkAreaEntity.data), _className); return executeInWorkAreaPara; } //任务号_当任务号不为空时,系统判断任务号是否重复 if (!string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo)) { if (DALCreator.Create().GetTaskByTaskNo(executeInWorkAreaPara.InWorkAreaEntity.taskNo).Count > 0) { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("任务号" + executeInWorkAreaPara.InWorkAreaEntity.taskNo + "重复!", _className); return executeInWorkAreaPara; } } //起始库区 if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.startBit)) { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始位置不存在!" + executeInWorkAreaPara.InWorkAreaEntity.startBit, _className); return executeInWorkAreaPara; } else { //缓存起始库区实体 executeInWorkAreaPara.StartStockAreaEntity = DALCreator.Create().GetAreaModelByLocation(executeInWorkAreaPara.InWorkAreaEntity.startBit.Trim()); if (executeInWorkAreaPara.StartStockAreaEntity == null) { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始位置未找到对应的库区!" + executeInWorkAreaPara.InWorkAreaEntity.startBit, _className); return executeInWorkAreaPara; } // 检查货位状态 是转运且管控数量时使用 if (executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y") && executeInWorkAreaPara.InWorkAreaEntity.isTransport.Equals("Y")) { executeInWorkAreaPara.StartLocationExt = BLLCreator.Create().GetModel(" where CN_S_LOCATION_CODE = '" + executeInWorkAreaPara.InWorkAreaEntity.startBit.Trim() + "'").FirstOrDefault(); if (!executeInWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE.Equals("正常")) { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位状态为" + executeInWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE + ",货位不可用!", _className); return executeInWorkAreaPara; } if (!executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE.Equals("满")) { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位存储状态为" + executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE + ",货位不可用!", _className); return executeInWorkAreaPara; } //锁定起点货位 OperateResult lockResult = BLLCreator.Create().UpdateState(executeInWorkAreaPara.InWorkAreaEntity.startBit, "预出库锁定", ""); if (lockResult.Success) { AutoBomLocationEntity locationModel = DALCreator.Create().GetModel(executeInWorkAreaPara.InWorkAreaEntity.startBit); //添加货位状态变化 BLLCreator.Create().AddStateChange(executeInWorkAreaPara.InWorkAreaEntity.startBit, "正常", "预出库锁定", "入库并且转运需要锁定起点货位防止其他资源竞争", executeInWorkAreaPara.InWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE,null); executeInWorkAreaPara.RollbackLocations.Add(executeInWorkAreaPara.InWorkAreaEntity.startBit); } else { if (!lockResult.Success) { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "失败!详细原因为:" + lockResult.Msg, _className); } else { executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "失败!详细原因为:SqlExecuteResult影响行数为0", _className); } return executeInWorkAreaPara; } } //检查起点货位是否为报废状态 executeInWorkAreaPara.InWorkAreaEntity.startArea = executeInWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE; executeInWorkAreaPara.InWorkAreaEntity.startStock = executeInWorkAreaPara.StartStockAreaEntity.CN_S_STOCK_CODE; } return executeInWorkAreaPara; } #endregion #region 验证出库业务参数 + VerifyOutWorkArea /// /// 验证出库业务参数 /// /// /// public static ExecuteOutWorkAreaPara VerifyOutWorkArea(ExecuteOutWorkAreaPara executeOutWorkAreaPara) { if (executeOutWorkAreaPara.OutWorkAreaEntity == null) { executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("参数不合法,接收参数为null!", _className); return executeOutWorkAreaPara; } #region 检验终点库区 if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit)) { executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的目的位置不存在!", _className); return executeOutWorkAreaPara; } //获取终点库区信息 executeOutWorkAreaPara.EndStockAreaEntity = DALCreator.Create().GetAreaModelByLocation(executeOutWorkAreaPara.OutWorkAreaEntity.endBit.Trim()); if (executeOutWorkAreaPara.EndStockAreaEntity == null) { executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的目的位置未找到库区!", _className); return executeOutWorkAreaPara; } // 检查货位状态 是转运且管控数量时使用 if (executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y") && executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport.Equals("Y")) { executeOutWorkAreaPara.EndLocationExt = BLLCreator.Create().GetModel(executeOutWorkAreaPara.OutWorkAreaEntity.endBit.Trim()).FirstOrDefault(); if (!executeOutWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE.Equals("正常")) { executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位状态为" + executeOutWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE + ",货位不可用!", _className); return executeOutWorkAreaPara; } if (!executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE.Equals("空")) { executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位存储状态为" + executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE + ",货位不可用!", _className); return executeOutWorkAreaPara; } //锁定终点货位 OperateResult lockResult = BLLCreator.Create().UpdateState(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "预入库锁定", "正常"); if (lockResult.Success) { AutoBomLocationEntity locationModel = DALCreator.Create().GetModel(executeOutWorkAreaPara.OutWorkAreaEntity.endBit); BLLCreator.Create().AddStateChange(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "正常", "预入库锁定", "出库并且转运需要锁定终点货位防止其他资源竞争", executeOutWorkAreaPara.OutWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE,null); executeOutWorkAreaPara.RollLocations.Add(executeOutWorkAreaPara.OutWorkAreaEntity.endBit); } else { executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeOutWorkAreaPara.OutWorkAreaEntity.endBit + "失败!详细原因为:SqlExecuteResult返回false或影响row为0", _className); return executeOutWorkAreaPara; } } executeOutWorkAreaPara.OutWorkAreaEntity.startStock = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STOCK_CODE; executeOutWorkAreaPara.OutWorkAreaEntity.endArea = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_AREA_CODE; #endregion return executeOutWorkAreaPara; } #endregion } }