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
|
{
|
/// <summary>
|
/// 验证接口参数
|
/// </summary>
|
public class ParameterVerifyBLL : DapperBaseBLL
|
{
|
private static string _className = "HH.BWMS.BLL.External.ParameterVerify";
|
|
#region 验证入库业务参数 + VerifyInWorkArea
|
|
/// <summary>
|
/// 验证入库业务参数
|
/// </summary>
|
/// <param name="executeInWorkAreaPara"></param>
|
/// <returns></returns>
|
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<TN_WM_TASKDAL>().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<TN_AB_STOCK_LOCATIONDAL>().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<HH.WMS.BLL.Basic.TN_WM_LOCATION_EXTBLL>().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<HH.WMS.BLL.Basic.TN_WM_LOCATION_EXTBLL>().UpdateState(executeInWorkAreaPara.InWorkAreaEntity.startBit, "预出库锁定", "");
|
if (lockResult.Success)
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
//添加货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().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
|
/// <summary>
|
/// 验证出库业务参数
|
/// </summary>
|
/// <param name="executeOutWorkAreaPara"></param>
|
/// <returns></returns>
|
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<TN_AB_STOCK_LOCATIONDAL>().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<TN_WM_LOCATION_EXTBLL>().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<TN_WM_LOCATION_EXTBLL>().UpdateState(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "预入库锁定", "正常");
|
if (lockResult.Success)
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeOutWorkAreaPara.OutWorkAreaEntity.endBit);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().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
|
}
|
}
|