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 查询输送单元扭转指引
///
/// 查询输送单元扭转指引
///
/// 对象编码
/// 物料编码
/// 分页索引
/// 分页大小
///
public List GetSearchList(string strWhere, string strOrder, int pageIndex, int pageSize, out int totalPages, out int totalRows)
{
return CreateDAL().GetSearchList(strWhere, strOrder, pageSize, pageIndex, out totalPages, out totalRows);
}
public DataTable GetTaskEntity(string taskNo)
{
DataTable dt = CreateDAL().GetTaskEntity(taskNo);
return dt;
}
///
/// 获取流转任务对象列表
///
///
///
/// [HanHe(xdl)] CREATED 2018/04/28
public List GetTransportTaskList(string strWhere)
{
return CreateDAL().GetTransportTaskList(strWhere);
}
public TN_WM_TRANSPORT_TASKEntity GetTransportTask(string taskNo)
{
TN_WM_TRANSPORT_TASKEntity dt = CreateDAL().GetTransportTask(taskNo);
return dt;
}
#endregion
#region 改变任务状态 - 开始
///
/// 改变任务状态 - 开始
///
/// 主键
/// 状态
///
public SqlExecuteResult Start(string taskNo, string taskState)
{
SqlExecuteResult result = new SqlExecuteResult();
return DAOManager.ExecuteTransaction(trans =>
{
result = CreateDAL().UpdateState(taskNo, taskState, trans);
if (!result.Success)
{
DAOManager.RollbackTransaction(trans);
return result;
}
if (taskState == "执行中")
{
result = CreateDAL().UpdateStartTime(taskNo, trans);
if (!result.Success)
{
DAOManager.RollbackTransaction(trans);
return result;
}
}
return result;
});
}
#endregion
///
/// PDA专用 生成任务
///
///
///
///
///
///
///
///
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().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().GetModel(startPosition);
AutoBomStockAreaEntity startArea = CreateDAL().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().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().Add(new List() { transEntity }, trans);
if (!result.Success)
{
DAOManager.RollbackTransaction(trans);
return result;
}
if (startArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
{
CreateDAL().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().GetModel(startPosition);
BLLCreator.Create().AddStateChange(startPosition, "正常", "预出库锁定", "PDA生成任务锁定起点货位", "PDA", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
}
}
}
if (endArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
{
CreateDAL().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().GetModel(endPosition);
BLLCreator.Create().AddStateChange(endPosition, "正常", "预入库锁定", "PDA生成任务锁定终点货位", "PDA", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
}
}
}
if (result.Success && SendAms)
{
result = new InfRequest().SendTask(new List() { 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 改道
///
/// 改道
///
///
///
///
///
///
public SqlExecuteResult UpdateWay(string taskNo, string location, string updateArea, string type)
{
SqlExecuteResult result = new SqlExecuteResult();
TN_WM_TRANSPORT_TASKEntity taskEntity = CreateDAL().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().UpdateTaskPostion(taskNo, location, updateArea, type, trans);
if (!result.Success)
{
DAOManager.RollbackTransaction(trans);
return result;
}
if (result.Success)
{
//将原来的货位置为正常
result = CreateDAL().UpdateLocationNormal(oriLocation, "正常", trans);
AutoBomLocationEntity locationModel = DALCreator.Create().GetModel(oriLocation);
BLLCreator.Create().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().GetTaskByNo(taskNo);
//起点、终点是否已经解绑
//var startIsBindObjLocation = CreateDAL().GetModel(transportTask.CN_S_START_BIT, transportTask.CN_S_CIR_OBJ_CODE);
//var endIsBindObjLocation = CreateDAL().GetModel(transportTask.CN_S_END_BIT, transportTask.CN_S_CIR_OBJ_CODE);
//起点、终点是否属于当前任务号
var startIsCurrentTask = CreateDAL().GetModel(" CN_S_LOCATION_CODE='" + transportTask.CN_S_START_BIT + "' AND CN_S_TASK_NO='" + taskNo + "' ");
var endIsCurrentTask = CreateDAL().GetModel(" CN_S_LOCATION_CODE='" + transportTask.CN_S_END_BIT + "' AND CN_S_TASK_NO='" + taskNo + "' ");
//托盘物料关联
var trayItemRel = CreateDAL().GetItemRelModel(" CN_S_TRAY_CODE='" + transportTask.CN_S_CIR_OBJ_CODE + "' ");
//更新任务状态
sqlResult = CreateDAL().UpdateState(taskNo, taskState, trans);
if (taskState.Equals("完成"))
{
if (transportTask.CN_S_TASK_TYPE.Equals("入库"))
{
}
}
else if (taskState.Equals("取消"))
{
}
return sqlResult;
});
return CreateDAL().ExecuteTransaction(taskNo, taskState);
}
public SqlExecuteResult UpdateTaskAuto(string taskNo, string taskState)
{
return CreateDAL().UpdateTaskAuto(taskNo, taskState, null);
}
}
}