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