using HH.WMS.Common;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Algorithm;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.External;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Common;
|
using HH.WMS.Entitys.External;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WMS.BLL.External
|
{
|
public class TN_WM_TRANSPORT_TASKBLL : BaseBLL
|
{
|
#region 查询输送单元扭转指引
|
/// <summary>
|
/// 查询输送单元扭转指引
|
/// </summary>
|
/// <param name="ObjNo">对象编码</param>
|
/// <param name="ItemCode">物料编码</param>
|
/// <param name="pageIndex">分页索引</param>
|
/// <param name="pageSize">分页大小</param>
|
/// <returns></returns>
|
public List<TN_WM_TRANSPORT_TASKEntity> GetSearchList(string strWhere, string strOrder, int pageIndex, int pageSize, out int totalPages, out int totalRows)
|
{
|
return CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetSearchList(strWhere, strOrder, pageSize, pageIndex, out totalPages, out totalRows);
|
}
|
public DataTable GetTaskEntity(string taskNo)
|
{
|
DataTable dt = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTaskEntity(taskNo);
|
return dt;
|
}
|
/// <summary>
|
/// 获取流转任务对象列表
|
/// </summary>
|
/// <param name="strWhere"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(xdl)] CREATED 2018/04/28</history>
|
public List<TN_WM_TRANSPORT_TASKEntity> GetTransportTaskList(string strWhere)
|
{
|
return CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTransportTaskList(strWhere);
|
}
|
public TN_WM_TRANSPORT_TASKEntity GetTransportTask(string taskNo)
|
{
|
TN_WM_TRANSPORT_TASKEntity dt = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTransportTask(taskNo);
|
return dt;
|
}
|
#endregion
|
|
#region 改变任务状态 - 开始
|
/// <summary>
|
/// 改变任务状态 - 开始
|
/// </summary>
|
/// <param name="lstGuid">主键</param>
|
/// <param name="taskState">状态</param>
|
/// <returns></returns>
|
public SqlExecuteResult Start(string taskNo, string taskState)
|
{
|
SqlExecuteResult result = new SqlExecuteResult();
|
|
return DAOManager.ExecuteTransaction(trans =>
|
{
|
result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateState(taskNo, taskState, trans);
|
if (!result.Success)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return result;
|
}
|
if (taskState == "执行中")
|
{
|
result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateStartTime(taskNo, trans);
|
if (!result.Success)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return result;
|
}
|
}
|
return result;
|
});
|
}
|
#endregion
|
|
/// <summary>
|
/// PDA专用 生成任务
|
/// </summary>
|
/// <param name="startPosition"></param>
|
/// <param name="endPosition"></param>
|
/// <param name="taskPriority"></param>
|
/// <param name="objLocationEntity"></param>
|
/// <param name="taskNo"></param>
|
/// <param name="SendAms"></param>
|
/// <returns></returns>
|
public SqlExecuteResult CreateTransTask(string startPosition, string endPosition, string taskPriority, string tranType, TN_WM_B_OBJ_LOCATIONEntity objLocationEntity, string taskNo = "", bool SendAms = true)
|
{
|
try
|
{
|
TN_WM_TRANSPORT_TASKEntity transEntity = new TN_WM_TRANSPORT_TASKEntity();
|
if (string.IsNullOrEmpty(taskNo))
|
{
|
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_TransTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(taskNo))
|
{
|
return new SqlExecuteResult() { Exception = new Exception("未获取到任务号") };
|
}
|
}
|
transEntity.CN_S_TASK_NO = taskNo;
|
transEntity.CN_S_STATE = Constants.TaskStateList[Constants.TaskExecState_NoExec];
|
transEntity.CN_T_CREATE = transEntity.CN_T_MODIFY = DateTime.Now.ToString();
|
transEntity.CN_S_TASK_TYPE = tranType;
|
|
transEntity.CN_S_CIR_OBJ = "托盘";
|
if (objLocationEntity == null)
|
{
|
var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
transEntity.CN_S_CIR_OBJ_CODE = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
|
}
|
else
|
{
|
transEntity.CN_S_CIR_OBJ_CODE = objLocationEntity.CN_S_OBJ_CODE;
|
}
|
transEntity.CN_S_START_BIT = startPosition;
|
transEntity.CN_S_END_BIT = endPosition;
|
transEntity.CN_C_EXECUTED = "N";
|
transEntity.CN_N_PRIORITY = int.Parse(taskPriority);
|
transEntity.CN_S_PROJECT_CODE = "xme001";
|
AutoBomLocationEntity endEntity = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetModel(endPosition);
|
if (endEntity != null)
|
{
|
transEntity.CN_S_END_AREA = endEntity.CN_S_AREA_CODE;
|
}
|
else
|
{
|
return new SqlExecuteResult() { Exception = new Exception("结束点在mongo中不存在!") };
|
}
|
AutoBomLocationEntity startEntity = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetModel(startPosition);
|
AutoBomStockAreaEntity startArea = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(startPosition);
|
|
if (startEntity != null)
|
{
|
transEntity.CN_S_START_AREA = startEntity.CN_S_AREA_CODE;
|
}
|
else
|
{
|
return new SqlExecuteResult() { Exception = new Exception(" 起点在mongo中不存在!") };
|
}
|
AutoBomStockAreaEntity endArea = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(endPosition);
|
transEntity.CN_S_STOCK_CODE = startArea.CN_S_STOCK_CODE;
|
transEntity.CN_S_START_AREA_TYPE = startArea.CN_S_STRUCTURE;
|
transEntity.CN_S_END_AREA_TYPE = endArea.CN_S_STRUCTURE;
|
transEntity.CN_C_START_IS_CONTROL_QTY = startArea.CN_C_IS_CONTROL_QTY;
|
transEntity.CN_C_END_IS_CONTROL_QTY = endArea.CN_C_IS_CONTROL_QTY;
|
transEntity.CN_S_START_CONTROL_INV = startArea.CN_C_IS_INVENTORY;
|
transEntity.CN_S_END_CONTROL_INV = endArea.CN_C_IS_INVENTORY;
|
//transEntity.
|
// transEntity.
|
SqlExecuteResult result = DAOManager.ExecuteTransaction(trans =>
|
{
|
result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().Add(new List<TN_WM_TRANSPORT_TASKEntity>() { transEntity }, trans);
|
if (!result.Success)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return result;
|
}
|
if (startArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(startPosition, Constants.Location_State_OutLock, Constants.Location_State_Normal, taskNo, trans);
|
if (!result.Success)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return result;
|
}
|
else
|
{
|
|
if (result.Row <= 0)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return new SqlExecuteResult() { Exception = new Exception("更新起点货位状态的时候,影响行数为0!请连接管理员") };
|
}
|
else
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(startPosition);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(startPosition, "正常", "预出库锁定", "PDA生成任务锁定起点货位", "PDA", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
|
|
}
|
|
}
|
}
|
|
if (endArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(endPosition, Constants.Location_State_InLock, Constants.Location_State_Normal, taskNo, null);
|
|
if (!result.Success)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return result;
|
}
|
else
|
{
|
|
if (result.Row <= 0)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return new SqlExecuteResult() { Exception = new Exception("更新终点货位状态的时候,影响行数为0!请连接管理员") };
|
}
|
else
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(endPosition);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(endPosition, "正常", "预入库锁定", "PDA生成任务锁定终点货位", "PDA", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
|
}
|
|
}
|
}
|
if (result.Success && SendAms)
|
{
|
result = new InfRequest().SendTask(new List<TN_WM_TRANSPORT_TASKEntity>() { transEntity });
|
Log.Info("CreateTransTask-SendAms", JsonConvert.SerializeObject(result));
|
}
|
|
return result;
|
});
|
return result;
|
}
|
catch (Exception ex)
|
{
|
Log.Info("CreateTransTask-CreateTransTask", ex.Message + ex.StackTrace.ToString());
|
return new SqlExecuteResult() { Exception = ex };
|
}
|
}
|
|
|
|
|
|
#region 改道
|
/// <summary>
|
/// 改道
|
/// </summary>
|
/// <param name="taskNo"></param>
|
/// <param name="location"></param>
|
/// <param name="updateArea"></param>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public SqlExecuteResult UpdateWay(string taskNo, string location, string updateArea, string type)
|
{
|
SqlExecuteResult result = new SqlExecuteResult();
|
TN_WM_TRANSPORT_TASKEntity taskEntity = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTaskByNo(taskNo);
|
//待修改的原来的货位
|
string oriLocation = type.Equals("start") ? taskEntity.CN_S_START_BIT : taskEntity.CN_S_END_BIT;
|
string guid = Guid.NewGuid().ToString();
|
return DAOManager.ExecuteTransaction(trans =>
|
{
|
result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateTaskPostion(taskNo, location, updateArea, type, trans);
|
if (!result.Success)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return result;
|
}
|
if (result.Success)
|
{
|
//将原来的货位置为正常
|
result = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationNormal(oriLocation, "正常", trans);
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(oriLocation);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(oriLocation, "", "正常", "AMS调用改道接口成功后将原货位设置为正常", "AMS", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
|
if (!result.Success)
|
{
|
DAOManager.RollbackTransaction(trans);
|
return result;
|
}
|
}
|
|
return result;
|
});
|
}
|
#endregion
|
|
public SqlExecuteResult ExecuteTransaction(string taskNo, string taskState)
|
{
|
var result = DAOManager.ExecuteTransaction(trans => {
|
var sqlResult = new SqlExecuteResult();
|
var transportTask = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTaskByNo(taskNo);
|
|
//起点、终点是否已经解绑
|
//var startIsBindObjLocation = CreateDAL<TN_WM_B_OBJ_LOCATIONDAL>().GetModel(transportTask.CN_S_START_BIT, transportTask.CN_S_CIR_OBJ_CODE);
|
//var endIsBindObjLocation = CreateDAL<TN_WM_B_OBJ_LOCATIONDAL>().GetModel(transportTask.CN_S_END_BIT, transportTask.CN_S_CIR_OBJ_CODE);
|
//起点、终点是否属于当前任务号
|
var startIsCurrentTask = CreateDAL<TN_WM_LOCATION_EXTDAL>().GetModel(" CN_S_LOCATION_CODE='" + transportTask.CN_S_START_BIT + "' AND CN_S_TASK_NO='" + taskNo + "' ");
|
var endIsCurrentTask = CreateDAL<TN_WM_LOCATION_EXTDAL>().GetModel(" CN_S_LOCATION_CODE='" + transportTask.CN_S_END_BIT + "' AND CN_S_TASK_NO='" + taskNo + "' ");
|
//托盘物料关联
|
var trayItemRel = CreateDAL<HH.WMS.DAL.External.TN_WM_B_TRAY_ITEM_RELDAL>().GetItemRelModel(" CN_S_TRAY_CODE='" + transportTask.CN_S_CIR_OBJ_CODE + "' ");
|
|
//更新任务状态
|
sqlResult = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateState(taskNo, taskState, trans);
|
|
if (taskState.Equals("完成"))
|
{
|
if (transportTask.CN_S_TASK_TYPE.Equals("入库"))
|
{
|
|
}
|
}
|
else if (taskState.Equals("取消"))
|
{
|
|
}
|
|
return sqlResult;
|
});
|
|
return CreateDAL<ExecuteStateDAL>().ExecuteTransaction(taskNo, taskState);
|
}
|
public SqlExecuteResult UpdateTaskAuto(string taskNo, string taskState)
|
{
|
return CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateTaskAuto(taskNo, taskState, null);
|
}
|
}
|
}
|