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