using NX_CommonClassLibrary; using NX_DbClassLibrary; using NX_LogClassLibrary; using NX_ModelClassLibrary.BaseModel; using NX_ModelClassLibrary.CrnModel; using NX_ModelClassLibrary.CustomEnum; using NX_ModelClassLibrary.TranModel; using NX_ModelClassLibrary.WcsDispatch; using NX_ModelClassLibrary.WmsTask; using NX_WcsDal.CommonBusiness; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NX_WcsDal.WcsDispatch { public class TaskResponse_Dal { #region 单例模式 /// /// 单例模式对象 /// private static TaskResponse_Dal _instance = null; private static readonly object lockObj = new object(); /// /// 单例模式方法 /// public static TaskResponse_Dal Instance { get { if (_instance == null) { lock (lockObj) { if (_instance == null) { _instance = new TaskResponse_Dal(); } } } return _instance; } } #endregion public WcsTranCmdMd GetFinishedWcsTranCmdOfPalletCode(string trayCode, string palletCode, string eLocNo) { try { string sqlQueryCrnUnFinishedCmd = $@" SELECT TOP 1 A.TRAN_CMD_ID, A.NEWID, A.TASK_NO, A.CMD_NO, A.TRAY_CODE, A.PALLET_CODE, A.TRAY_STATUS, A.TRAN_DEV_NO, A.SLOC_NO, A.SPLC_NO, A.ELOC_NO, A.EPLC_NO, A.CMD_TYPE, A.ACTIVE_TYPE, A.CMD_PRIORITY, A.CMD_STATUS, A.CMD_LOG, A.ERR_FLAG, A.ERR_LOG, A.CREATE_BY, B.USER_CODE CreateCode, B.USER_NAME CreateName, A.CREATE_TIME, A.EXECUTE_TIME, A.FINISH_TIME, A.UPDATE_BY, C.USER_CODE UpdateCode, C.USER_NAME UpdateName, A.UPDATE_TIME, A.DATA_VERSION, A.REMARKS1, A.REMARKS2, A.REMARKS3, A.REMARKS4, A.REMARKS5 FROM WCS_TRAN_CMD A LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID WHERE A.TRAY_CODE = '{trayCode}' AND A.PALLET_CODE = '{palletCode}' AND A.CMD_STATUS = '{(int)TranCmdStatusEnum.完成}' AND A.ELOC_NO = '{eLocNo}' "; DataTable dt = LeadDbHelperSQLServer.Query(sqlQueryCrnUnFinishedCmd).Tables[0]; if (dt != null && dt.Rows.Count > 0) { DataRow item = dt.Rows[0]; WcsTranCmdMd tmpMd = ColumnToClassPropertyHelper.ColumnToClassProperty(dt.Columns, item); return tmpMd; } else { return null; } } catch (Exception ex) { LogHelper.WriteLog($"根据托盘号获取未完成的堆垛机指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err); return null; } } public WcsCrnCmdMd GetFinishedWcsCrnCmdOfPalletCode(string palletCode,string trayCode) { try { string sqlQueryCrnUnFinishedCmd = $@" SELECT TOP 1 A.CRN_CMD_ID, A.NEWID, A.TASK_NO, A.CMD_NO, A.TRAY_CODE, A.PALLET_CODE, A.TRAY_STATUS, A.CRN_DEV_NO, A.CRN_FORK_DEV_NO, A.SBIN_NO, A.SBIN_ROW, A.SBIN_COL, A.SBIN_LAYER, A.S_EXTENSION_GROUP, A.S_EXTENSION_IDX, A.EBIN_NO, A.EBIN_ROW, A.EBIN_COL, A.EBIN_LAYER, A.E_EXTENSION_GROUP, A.E_EXTENSION_IDX, A.CMD_TYPE, A.ACTIVE_TYPE, A.CMD_PRIORITY, A.CMD_STATUS, A.CMD_LOG, A.ERR_FLAG, A.ERR_LOG, A.CREATE_BY, B.USER_CODE CreateCode, B.USER_NAME CreateName, A.CREATE_TIME, A.EXECUTE_TIME, A.FINISH_TIME, A.UPDATE_BY, C.USER_CODE UpdateCode, C.USER_NAME UpdateName, A.UPDATE_TIME, A.DATA_VERSION, A.REMARKS1, A.REMARKS2, A.REMARKS3, A.REMARKS4, A.REMARKS5 FROM WCS_CRN_CMD A LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID WHERE A.TRAY_CODE = '{trayCode}' AND A.PALLET_CODE = '{palletCode}' AND A.CMD_STATUS = '{(int)CrnCmdStatusEnum.完成}' "; DataTable dt = LeadDbHelperSQLServer.Query(sqlQueryCrnUnFinishedCmd).Tables[0]; if (dt != null && dt.Rows.Count > 0) { DataRow item = dt.Rows[0]; WcsCrnCmdMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty(dt.Columns, item); return retMd; } else { return null; } } catch (Exception ex) { LogHelper.WriteLog($"根据托盘号获取完成的堆垛机指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err); return null; } } public void UpdateWmsTaskElocNo(WmsTskTaskMd taskMd) { try { string sql = $@"update WMS_TSK_TASK set ELOC_CODE = '{taskMd.ElocCode}' where TASK_ID = '{taskMd.TaskId}'"; LeadDbHelperSQLServer.ExecuteSql(sql) ; } catch (Exception ex) { LogHelper.WriteLog($"更新WMS大任务的终点数据时发生异常!【{ex.Message}】", LogTypeEnum.Err); } } public WmsTskTaskMd GetUnfinishWmsTaskOfTaskNo(string taskNo) { try { string sqlGetUnfinishWmsTask = $@" SELECT TOP 1 A.TASK_ID, A.NEWID, A.WAREHOUSE_CODE, A.WAREHOUSE_NAME, A.TASK_NO, A.TRAY_CODE, A.PALLET_CODE, A.TRAY_LOADED_TYPE, A.SLOC_CODE, A.ELOC_CODE, A.CLOC_CODE, A.TASK_TYPE, A.TASK_MSG, A.ERR_FLAG, A.TASK_PRIORITY, A.TASK_STATUS, A.SBIN_CODE, A.EBIN_CODE, A.CMD_NO, A.ROUTE_CODE, A.CREATE_BY, B.USER_CODE CreateCode, B.USER_NAME CreateName, A.CREATE_TIME, A.UPDATE_BY, C.USER_CODE UpdateCode, C.USER_NAME UpdateName, A.UPDATE_TIME, A.DATA_VERSION, A.REMARKS1, A.REMARKS2, A.REMARKS3, A.REMARKS4, A.REMARKS5 FROM WMS_TSK_TASK A LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID WHERE A.TASK_NO = '{taskNo}' AND A.TASK_STATUS < '{(int)WmsTaskStatusEnum.任务完成}' "; DataTable dtGetUnfinishWmsTask = LeadDbHelperSQLServer.Query(sqlGetUnfinishWmsTask).Tables[0]; if (dtGetUnfinishWmsTask != null && dtGetUnfinishWmsTask.Rows.Count > 0) { DataRow item = dtGetUnfinishWmsTask.Rows[0]; WmsTskTaskMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty(dtGetUnfinishWmsTask.Columns, item); return retMd; } else { return null; } } catch (Exception ex) { LogHelper.WriteLog($"根据托盘号获取WMS未完成的大任务数据发生异常!【{ex.Message}】", LogTypeEnum.Err); return null; } } public BasBinMd GetBinMdOfCodeAndType(string binCode, BasBinTypeEnum basBinType) { try { string sqlGetBinMdOfCodeAndType = $@" SELECT TOP 1 A.*, B.USER_CODE CreateCode, B.USER_NAME CreateName, C.USER_CODE UpdateCode, C.USER_NAME UpdateName FROM BAS_BIN A LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID WHERE A.USED_FLAG = 1 AND A.DEL_FLAG = 0 AND A.BIN_CODE = '{binCode}' AND A.BIN_TYPE = '{(int)basBinType}' "; DataTable dt = LeadDbHelperSQLServer.Query(sqlGetBinMdOfCodeAndType).Tables[0]; if (dt != null && dt.Rows.Count > 0) { DataRow item = dt.Rows[0]; BasBinMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty(dt.Columns, item); return retMd; } else { return null; } } catch (Exception ex) { LogHelper.WriteLog($"获取库位类型:【{basBinType}】库位号:【{binCode}】的详细库位信息发生异常!【{ex.Message}】", LogTypeEnum.Err); return null; } } public BasBinMd GetBinMdOfCode(string binCode) { try { string sqlGetBinMdOfCodeAndType = $@" SELECT TOP 1 A.*, B.USER_CODE CreateCode, B.USER_NAME CreateName, C.USER_CODE UpdateCode, C.USER_NAME UpdateName FROM BAS_BIN A LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID WHERE A.USED_FLAG = 1 AND A.DEL_FLAG = 0 AND A.BIN_CODE = '{binCode}' "; DataTable dt = LeadDbHelperSQLServer.Query(sqlGetBinMdOfCodeAndType).Tables[0]; if (dt != null && dt.Rows.Count > 0) { DataRow item = dt.Rows[0]; BasBinMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty(dt.Columns, item); return retMd; } else { return null; } } catch (Exception ex) { LogHelper.WriteLog($"获取库位号:【{binCode}】的详细库位信息发生异常!【{ex.Message}】", LogTypeEnum.Err); return null; } } public BasNextLocRouteMd GetRouteMsg(BasWcsLocMd sLocNo, BasWcsLocMd eLocNo) { try { string sqlGetRoute = $@"SELECT * FROM dbo.FN_GetAllNextRoute('{sLocNo.LocCode}','{eLocNo.LocCode}')"; DataTable dt = LeadDbHelperSQLServer.Query(sqlGetRoute).Tables[0]; if (dt != null && dt.Rows.Count > 0) { DataRow item = dt.Rows[0]; BasNextLocRouteMd nextLocRouteMd = ColumnToClassPropertyHelper.ColumnToClassProperty(dt.Columns, item); return nextLocRouteMd; } else { return null; } } catch (Exception ex) { LogHelper.WriteLog($"获取起点站台:【{sLocNo.LocCode}】到终点站台:【{eLocNo.LocCode}】的路径信息发生异常!【{ex.Message}】", LogTypeEnum.Err); return null; } } public int InsertCrnCmdAndUpdateWmsTask(WmsTskTaskMd wmsTskTaskMd, BasBinMd emptyBin, BasBinMd inBinMd, BasNextLocRouteMd locRouteMd) { try { string cmdNo = BasCommon_Dal.Instance.GetSysSequence("Cmd_No"); string sqlInsertCrnCmd = $@" INSERT INTO [dbo].[WCS_CRN_CMD] ( [TASK_NO], [CMD_NO], [TRAY_CODE], [PALLET_CODE], [TRAY_STATUS], [CRN_DEV_NO], [CRN_FORK_DEV_NO], [SBIN_NO], [SBIN_ROW], [SBIN_COL], [SBIN_LAYER], [S_EXTENSION_GROUP], [S_EXTENSION_IDX], [EBIN_NO], [EBIN_ROW], [EBIN_COL], [EBIN_LAYER], [E_EXTENSION_GROUP], [E_EXTENSION_IDX], [CMD_TYPE], [ACTIVE_TYPE], [CMD_PRIORITY], [CMD_STATUS], [CMD_LOG], [ERR_FLAG], [ERR_LOG], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( '{wmsTskTaskMd.TaskNo}', '{cmdNo}', '{wmsTskTaskMd.TrayCode}', '{wmsTskTaskMd.PalletCode}', '{(int)wmsTskTaskMd.TrayLoadedType}', '{locRouteMd.DevNo}', '{locRouteMd.DevNo}', '{inBinMd.BinCode}', '{inBinMd.BinRow}', '{inBinMd.BinColumn}', '{inBinMd.BinLayer}', '{inBinMd.EXTENSION_GROUP}', '{inBinMd.EXTENSION_IDX}', '{emptyBin.BinCode}', '{emptyBin.BinRow}', '{emptyBin.BinColumn}', '{emptyBin.BinLayer}', '{emptyBin.EXTENSION_GROUP}', '{emptyBin.EXTENSION_IDX}', '{CrnCmdTypeEnum.IN}', '{(int)CrnActiveTypeEnum.取放货}', 100, '{(int)CrnCmdStatusEnum.初始创建}', NULL, '{(int)WcsCmdErrFlagEnum.正常}', NULL, '{wmsTskTaskMd.UpdateBy}', getdate(), '{wmsTskTaskMd.UpdateBy}', getdate(), 0, NULL, NULL, NULL, NULL, NULL ); "; string sqlUpdateWmsTask = $@" UPDATE WMS_TSK_TASK SET CLOC_CODE = '{locRouteMd.SlocNo}', SBIN_CODE = '{inBinMd.BinCode}', EBIN_CODE = '{emptyBin.BinCode}', CMD_NO = '{cmdNo}', ROUTE_CODE = '{locRouteMd.SectionNo}', TASK_STATUS = '{(int)WmsTaskStatusEnum.指令执行中}', UPDATE_TIME = GETDATE() WHERE TASK_ID = '{wmsTskTaskMd.TaskId}' "; List sqlLst = new List { sqlUpdateWmsTask, sqlInsertCrnCmd }; int row = LeadDbHelperSQLServer.ExecuteSqlTran(sqlLst); return row; } catch (Exception ex) { LogHelper.WriteLog($"修改WMS大任务状态、新增堆垛机指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err); return 0; } } public void UpdateMoveWmsTaskAndBalance(WmsTskTaskMd wmsTskTaskMd) { try { string sqlUodateWmsTaskToTargetLoc = $@" UPDATE WMS_TSK_TASK SET TASK_STATUS = '{(int)WmsTaskStatusEnum.任务完成}', UPDATE_TIME = GETDATE() WHERE TASK_ID = '{wmsTskTaskMd.TaskId}' "; string sqlUpdateSbinBalacne = $@" UPDATE WMS_STK_BALANCE SET BALANCE_STATUS = '99', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_CODE = '{wmsTskTaskMd.TrayCode}' AND BALANCE_STATUS = 66 AND BIN_CODE = '{wmsTskTaskMd.SbinCode}' "; string sqlUpdateEbinBalacne = $@" UPDATE WMS_STK_BALANCE SET BALANCE_STATUS = '55', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_CODE = '{wmsTskTaskMd.TrayCode}' AND BALANCE_STATUS = 66 AND BIN_CODE = '{wmsTskTaskMd.EbinCode}' "; List sqlList = new List(); sqlList.Add(sqlUodateWmsTaskToTargetLoc); sqlList.Add(sqlUpdateSbinBalacne); sqlList.Add(sqlUpdateEbinBalacne); LeadDbHelperSQLServer.ExecuteSqlTran(sqlList); } catch (Exception ex) { LogHelper.WriteLog($"更新WMS内伸货位移库大任务完成状态时发生异常!【{ex.Message}】", LogTypeEnum.Err); } } public int UpdateWmsTaskToTargetLoc(WmsTskTaskMd wmsTskTaskMd) { try { string sqlUodateWmsTaskToTargetLoc = $@" UPDATE WMS_TSK_TASK SET TASK_STATUS = '{(int)WmsTaskStatusEnum.托盘到目标}', UPDATE_TIME = GETDATE() WHERE TASK_ID = '{wmsTskTaskMd.TaskId}' "; int row = LeadDbHelperSQLServer.ExecuteSql(sqlUodateWmsTaskToTargetLoc); return row; } catch (Exception ex) { LogHelper.WriteLog($"修改WMS大任务状态为托盘到目标时发生异常!【{ex.Message}】", LogTypeEnum.Err); return 0; } } public int InsertTranCmdAndUpdateWmsTask(WmsTskTaskMd wmsTskTaskMd, BasWcsLocMd sLocNo, BasWcsLocMd eLocNo, BasNextLocRouteMd locRouteMd) { try { string cmdNo = BasCommon_Dal.Instance.GetSysSequence("Cmd_No"); string sqlInsertTranCmd = $@" INSERT INTO [dbo].[WCS_TRAN_CMD] ( [TASK_NO], [CMD_NO], [TRAY_CODE], [PALLET_CODE], [TRAY_STATUS], [TRAN_DEV_NO], [SLOC_NO], [SPLC_NO], [ELOC_NO], [EPLC_NO], [CMD_TYPE], [ACTIVE_TYPE], [CMD_PRIORITY], [CMD_STATUS], [CMD_LOG], [ERR_FLAG], [ERR_LOG], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( '{wmsTskTaskMd.TaskNo}', '{cmdNo}', '{wmsTskTaskMd.TrayCode}', '{wmsTskTaskMd.PalletCode}', '{(int)wmsTskTaskMd.TrayLoadedType}', '{locRouteMd.DevNo}', '{sLocNo.LocCode}', '{sLocNo.LocCode}', '{eLocNo.LocCode}', '{eLocNo.LocCode}', '{(int)TranCmdTypeEnum.TRANSFER}', '{(int)TranActiveTypeEnum.直行}', 100, '{(int)TranCmdStatusEnum.初始创建}', NULL, '{(int)WcsCmdErrFlagEnum.正常}', NULL, '{wmsTskTaskMd.UpdateBy}', getdate(), {wmsTskTaskMd.UpdateBy}, getdate(), 0, NULL, NULL, NULL, NULL, NULL ); "; string sqlUpdateWmsTask = $@" UPDATE WMS_TSK_TASK SET CLOC_CODE = '{locRouteMd.SlocNo}', CMD_NO = '{cmdNo}', ROUTE_CODE = '{locRouteMd.SectionNo}', TASK_STATUS = '{(int)WmsTaskStatusEnum.指令执行中}', UPDATE_TIME = GETDATE() WHERE TASK_ID = '{wmsTskTaskMd.TaskId}' "; List sqlLst = new List { sqlUpdateWmsTask, sqlInsertTranCmd }; int row = LeadDbHelperSQLServer.ExecuteSqlTran(sqlLst); return row; } catch (Exception ex) { LogHelper.WriteLog($"修改WMS大任务状态、新增输送线指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err); return 0; } } } }