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
}
}