using Common;
|
using Model;
|
using Newtonsoft.Json;
|
using NLog;
|
using NPOI.XWPF.UserModel;
|
using Org.BouncyCastle.Asn1.X509;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Net.WebSockets;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace BLL.DAL
|
{
|
[Obsolete]
|
public class DALWcsMessage
|
{
|
#region 标准版数据交互
|
|
/// <summary>
|
/// 获取与设备交互信息
|
/// </summary>
|
/// <returns></returns>
|
public DataTable GetPlcInfos(string level, string plcIP, string dbNumber)
|
{
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append($"select * from WCSPlcInfo where isDel = 0 ");
|
if (level != "")
|
{
|
sqlString.Append($"and Level = '{level}' ");
|
}
|
if (plcIP != "")
|
{
|
sqlString.Append($"and plcIP = '{plcIP}' ");
|
}
|
if (dbNumber != "")
|
{
|
sqlString.Append($"and dbNumber = '{dbNumber}' ");
|
}
|
sqlString.Append(";");
|
|
return DataFactory.SqlDataBaseDB1().GetDataTableBySQL(sqlString);
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "系统错误:");
|
}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 获取任务信息
|
/// </summary>
|
/// <param name="status">0 等待执行 1 正在执行 2 执行完成 3 异常结束 4 任务取消 5 防断电执行</param>
|
/// <param name="type">0 入库任务 1 出库任务 2 移库任务</param>
|
/// <param name="palletNo">托盘号</param>
|
/// <returns></returns>
|
public DataTable GetWCSTasks(string status, string type, string palletNo = "", string startRoadway = "", string endRoadway = "")
|
{
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select top 1 * from WCSTasks ");
|
sqlString.Append($"where Status in ({status}) and IsDel = '0' ");
|
if (palletNo != "")
|
{
|
sqlString.Append($" and palletNo = '{palletNo}' ");
|
}
|
if (startRoadway != "")
|
{
|
sqlString.Append($" and startRoadway = '{startRoadway}' ");
|
}
|
if (endRoadway == "111")
|
{
|
|
}
|
else if (endRoadway != "")
|
{
|
sqlString.Append($" and endRoadway = '{endRoadway}' ");
|
}
|
if (type != "")
|
{
|
sqlString.Append($" and Type in ({type}) ");
|
}
|
if (endRoadway == "111")
|
{
|
sqlString.Append(" order by Levels,CreateTime desc; ");
|
}
|
else if (endRoadway != "111")
|
{
|
sqlString.Append(" order by Levels desc,CreateTime asc; ");
|
}
|
|
return DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "系统错误:");
|
}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 根据托盘号获取组盘信息
|
/// </summary>
|
/// <param name="palletNo"></param>
|
/// <returns></returns>
|
public DataRow GetWcsPalletBind(string palletNo)
|
{
|
try
|
{
|
//select Top 1 * from WCSPalletBind where PalletNo = 'T2300017'
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Clear();
|
sqlString.Append("select Top 1 * from WCSPalletBind ");
|
sqlString.Append($" where palletNo = '{palletNo}' ");
|
sqlString.Append(" order by CreateTime desc ");
|
DataRow aa = DataFactory.SqlDataBase().GetDataRowBySQL(sqlString);
|
return aa;
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "系统错误:");
|
}
|
return null;
|
}
|
|
/// <summary>
|
/// 获取空托盘任务信息
|
/// </summary>
|
/// <param name="status">0 等待执行 1 正在执行 2 执行完成 3 异常结束 4 任务取消 5 防断电执行</param>
|
/// <param name="type">0 入库任务 1 出库任务 2 移库任务</param>
|
/// <param name="lotNo">批次号</param>
|
/// <returns></returns>
|
public DataTable GetWCSSupallTasks(string status, string type, string lotNo = "")
|
{
|
bool bl = false;
|
try
|
{
|
//获取空托盘入库任务
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select top 1 * from WCSTasks ");
|
sqlString.Append($"where Status = '{status}' and IsDel = '0' ");
|
if (lotNo != "")
|
{
|
sqlString.Append($" and LotNo = '{lotNo}' ");
|
}
|
if (type != "")
|
{
|
sqlString.Append($" and Type = '{type}' ");
|
}
|
|
sqlString.Append(" and StartRoadway != '' order by Levels desc,CreateTime asc; ");
|
var taskList = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
//获取数据后清空sqlString
|
sqlString.Clear();
|
//修改空托盘入库任务改为出库任务
|
sqlString.Append($"Update WCSTasks set Type);");
|
int rowCount = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
if (rowCount > 0)
|
{
|
bl = true;
|
return taskList;
|
}
|
return null;
|
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "系统错误:");
|
}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 获取指定入口货物信息
|
/// </summary>
|
/// <param name="conveyor">入库口</param>
|
/// <returns></returns>
|
public DataTable GetWCSConveyorInfo(string conveyor = "")
|
{
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select * from WCSConveyorInfo ");
|
sqlString.Append("where Status = '1' and IsDel = '0' and isEndLot = '0' ");
|
if (!string.IsNullOrWhiteSpace(conveyor))
|
{
|
sqlString.Append($" and Conveyor = '{conveyor}';");
|
}
|
|
return DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "系统错误:");
|
}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 存储托盘组托信息
|
/// </summary>
|
/// <param name="model">组托信息</param>
|
/// <returns>true:成功 false:失败</returns>
|
public bool AddWCSPalletBind(WCSPalletBind model)
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append(@"INSERT INTO WCSPalletBind
|
( LocatNo , PalletNo , SkuQty , SkuWeight , Status , ErrorMsg
|
, TaskType , SkuType , SubPallet , LotNo , LotText , SupplierLot , IsBale ,
|
IsBelt ) VALUES (");
|
sqlString.Append($"'{model.LocatNo}','{model.PalletNo}','{model.SkuQty}','{model.SkuWeight}','{model.Status}',");
|
sqlString.Append($"'{model.ErrorMsg}','{model.TaskType}','{model.SkuType}','{model.SubPallet}','{model.LotNo}',");
|
sqlString.Append($"'{model.LotText}','{model.SupplierLot}','{model.IsBale}','{model.IsBelt}');");
|
int rowCount = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
if (rowCount > 0)
|
{
|
bl = true;
|
}
|
}
|
catch (Exception ex)
|
{
|
// 记录日志文件
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "SetWCSPalletBind存储组盘信息失败");
|
|
return bl;
|
|
}
|
|
return bl;
|
}
|
|
/// <summary>
|
/// 调用WMS接口获取储位地址
|
/// </summary>
|
/// <param name="PalletNo">托盘号</param>
|
/// <param name="model">组盘信息</param>
|
/// <param name="endLocat">目标工位号(取货工位)</param>
|
/// <returns>返回wms反馈的信息</returns>
|
public string GetLocation(string palletNo, WCSPalletBind model, ref string endLocat)
|
{
|
try
|
{
|
string returnStr = "";
|
StringBuilder sqlString = new StringBuilder();
|
// 先判断此托盘的任务是否已生成任务
|
sqlString.Append("select * from WCSTasks where Status in ('0','1') and Type = '0' ");
|
sqlString.Append($"and PalletNo = '{palletNo}' and isdel = '0';");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
if (dt == null || dt.Rows.Count <= 0)
|
{
|
string json = JsonConvert.SerializeObject(model);
|
var response = Utility.Extra.HttpHelper.DoPost("http://192.168.220.137:8081/api/DownAPi/RequestLocation", json);
|
//var response = Utility.Extra.HttpHelper.DoPost("http://localhost:13243/api/DownAPi/RequestLocation", json);
|
ResponseTasks taskModels = JsonConvert.DeserializeObject<ResponseTasks>(response);
|
//Logger logger = LogManager.GetCurrentClassLogger();
|
//logger.Error("申请储位原因:", response);
|
if (taskModels.Success == "0")
|
{
|
// 永远只返回一条信息,因为是集合所以用循环插入写法;
|
DALWMSApi dal = new DALWMSApi();
|
WCSTasks task = taskModels.TaskList;
|
|
// 添加任务信息
|
task.StartLocat = model.StationNum;
|
task.LotNo = model.LotNo;
|
task.SupplierLot = model.SupplierLot;
|
task.PalletType = model.SubPallet == "0" ? "0" : "1";
|
WCSResultModel result = dal.AddWcsTask(task);
|
if (result.stateCode == "1")
|
{
|
endLocat = task.EndRoadway;
|
returnStr = "托盘号:" + palletNo + "\n" + "储位地址:" + task.EndLocat + "\n";
|
// 插入组托信息
|
this.AddWCSPalletBind(model);
|
|
// 插入任务明细表
|
WCSTasksMonitor tasksMonitor = new WCSTasksMonitor();
|
tasksMonitor.TaskNo = task.TaskNo;
|
tasksMonitor.PlcId = int.Parse(model.PlcId);
|
tasksMonitor.PlcName = model.StationNum;
|
tasksMonitor.StartLocat = model.StationNum;
|
tasksMonitor.InteractiveMsg = $"{palletNo}:向WMS申请储位信息成功";
|
tasksMonitor.PalletNo = palletNo;
|
tasksMonitor.EndLocat = task.EndLocat;
|
tasksMonitor.Status = "2"; // 执行完成
|
this.AddWCSTasksMonitor(tasksMonitor);
|
}
|
else
|
{
|
returnStr = "-1:" + result.errMsg;
|
return returnStr;
|
}
|
|
}
|
else
|
{
|
returnStr = "-1:" + taskModels.Message;
|
return returnStr;
|
}
|
}
|
else
|
{
|
endLocat = dt.Rows[0]["EndRoadway"].ToString();
|
}
|
|
// 确定取货工位
|
switch (endLocat)
|
{
|
case "R11":
|
endLocat = "2";
|
break;
|
case "R12":
|
endLocat = "6";
|
break;
|
case "R13":
|
endLocat = "10";
|
break;
|
}
|
|
// 记录日志文件
|
returnStr = endLocat;
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(returnStr, "申请储位");
|
|
return returnStr;
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "程序异常:申请储位失败!");
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 调用WMS接口申请空托盘垛
|
/// </summary>
|
/// <param name="skuNo">物料号</param>
|
/// <param name="endLocat">送货工位号</param>
|
/// <returns></returns>
|
public string GetSupperPalletLocation(out string palletNo1,string skuNo = "", string endLocat = "")
|
{
|
try
|
{
|
palletNo1 = "";
|
string returnStr = "";
|
StringBuilder sqlString = new StringBuilder();
|
//string sku = skuNo + ";" + endLocat;
|
var data = new
|
{
|
SkuNo = skuNo,
|
EndLocat = endLocat,
|
};
|
sqlString.Clear();
|
string json = JsonConvert.SerializeObject(data);
|
var response = Utility.Extra.HttpHelper.DoPost("http://192.168.220.137:8081/api/DownAPi/PalletLocation", json);
|
//var response = Utility.Extra.HttpHelper.DoPost("http://localhost:13243/api/DownAPi/PalletLocation", json);
|
var taskModels = JsonConvert.DeserializeObject<Tasks>(response);
|
|
|
if (taskModels.Success == "0")
|
{
|
if (taskModels.Message == "任务已申请!")
|
{
|
return null;
|
}
|
// 永远只返回一条信息,因为是集合所以用循环插入写法;
|
DALWMSApi dal = new DALWMSApi();
|
foreach (var item in taskModels.TaskList)
|
{
|
WCSTasks task = item;
|
//根据托盘号获取
|
|
// 添加任务信息
|
task.EndLocat = item.EndLocat != "" ? item.EndLocat : skuNo == "100099" ? "41" : skuNo == "100098" || skuNo == "100096" ? "23" : "33";
|
task.LotNo = "";
|
task.SupplierLot = "";
|
task.PalletType = "";
|
WCSResultModel result = dal.AddWcsTask(task);
|
if (result.stateCode == "1")
|
{
|
endLocat = task.EndRoadway;
|
returnStr = "托盘号:" + task.PalletNo + "\n" + "储位地址:" + task.StartLocat + "\n";
|
|
// 插入任务明细表
|
WCSTasksMonitor tasksMonitor = new WCSTasksMonitor();
|
tasksMonitor.TaskNo = task.TaskNo;
|
tasksMonitor.PlcId = 0;
|
tasksMonitor.PlcName = "";
|
tasksMonitor.StartLocat = task.StartLocat;
|
tasksMonitor.InteractiveMsg = $"{task.PalletNo}:向WMS申请空托盘信息成功";
|
tasksMonitor.PalletNo = task.PalletNo;
|
palletNo1 = task.PalletNo;
|
tasksMonitor.EndLocat = task.EndLocat;
|
tasksMonitor.Status = "2"; // 执行完成
|
this.AddWCSTasksMonitor(tasksMonitor);
|
}
|
else
|
{
|
returnStr = "-1:" + result.errMsg;
|
return returnStr;
|
}
|
|
// 确定取货工位
|
switch (task.StartRoadway)
|
{
|
case "R11":
|
endLocat = "3";
|
break;
|
case "R12":
|
endLocat = "4";
|
break;
|
case "R13":
|
endLocat = "11";
|
break;
|
}
|
|
// 记录日志文件
|
returnStr += "目标位置:" + endLocat + "\n";
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(returnStr, "申请空托盘");
|
|
|
}
|
|
return returnStr;
|
|
|
}
|
else
|
{
|
returnStr = "-1:" + taskModels.Message;
|
return returnStr;
|
}
|
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "程序异常:申请空托盘失败!");
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 获取报警基础信息
|
/// </summary>
|
/// <returns>报警信息基础表</returns>
|
public DataTable GetWcsAlarmInfo()
|
{
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select * from WCSAlarmInfo order by PlcIP;");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
return dt;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 更新任务状态
|
/// </summary>
|
/// <param name="palletNo">托盘号</param>
|
/// <param name="StateValue">任务状态</param>
|
/// <returns>true:成功 flase:失败</returns>
|
public bool SetWCSTasks(string palletNo, string StateValue, string EndLocatNo)
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("Update WCSTasks set FinishDate = '" + DateTime.Now + "', Status = '" + StateValue + "' ");
|
//判断目标工位是否为空
|
if (!string.IsNullOrEmpty(EndLocatNo))
|
{
|
sqlString.Append($" ,EndLocat = '{EndLocatNo}'");
|
}
|
sqlString.Append(" where PalletNo = '" + palletNo + "' and Status not in ('3','2','4');");
|
int rowCount = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
if (rowCount > 0)
|
{
|
bl = true;
|
}
|
|
return bl;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 插入任务明细表
|
/// </summary>
|
/// <param name="model">任务明细信息</param>
|
public bool AddWCSTasksMonitor(WCSTasksMonitor model)
|
{
|
bool bl = false;
|
StringBuilder sqlString = new StringBuilder();
|
try
|
{
|
// 判断任务号是否位""
|
if (model.TaskNo == "")
|
{
|
// 根据托盘号获取对应的任务号
|
sqlString.Append($"select TaskNo from WCSTasks where Status = '1' and IsDel = '0' and PalletNo = '{model.PalletNo}';");
|
DataRow row = DataFactory.SqlDataBase().GetDataRowBySQL(sqlString);
|
if (row != null)
|
{
|
model.TaskNo = row["TaskNo"].ToString();
|
}
|
}
|
|
if (model.TaskNo == "")
|
{
|
return bl;
|
}
|
|
// 插入任务明细表
|
sqlString.Clear();
|
sqlString.Append(@"INSERT INTO WCSTasksMonitor
|
( TaskNo , PlcId , PlcName , StartLocat , EndLocat , InteractiveMsg
|
, ErrorMsg,PalletNo,Status,IsDel ) VALUES (");
|
sqlString.Append($"'{model.TaskNo}',{model.PlcId},'{model.PlcName}','{model.StartLocat}','{model.EndLocat}',");
|
sqlString.Append($"'{model.InteractiveMsg}','{model.ErrorMsg}','{model.PalletNo}','{model.Status}','0');");
|
int rowCount = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
if (rowCount > 0)
|
{
|
bl = true;
|
}
|
}
|
catch (Exception ex)
|
{
|
// 记录日志文件
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "AddWCSTasksMonitor添加任务明细失败!");
|
|
return bl;
|
}
|
|
return bl;
|
}
|
|
/// <summary>
|
/// 调用WMS接口反馈任务接口
|
/// </summary>
|
/// <param name="model">任务完成状态</param>
|
/// <returns></returns>
|
public bool RequestTasks(TaskReques model)
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
string json = JsonConvert.SerializeObject(model);
|
var response = Utility.Extra.HttpHelper.DoPost("http://192.168.220.137:8081/api/DownAPi/ReceiveWcsSignal", json);
|
//var response = Utility.Extra.HttpHelper.DoPost("http://localhost:13243/api/DownAPi/ReceiveWcsSignal", json);
|
var response1 = JsonConvert.DeserializeObject(response);
|
ResponseTasks taskModels = JsonConvert.DeserializeObject<ResponseTasks>(response1.ToString());
|
if (taskModels.StatusCode == "0")
|
{
|
|
sqlString.Append($"Update WCSTasks set IsSuccess = '0' where TaskNo = '{model.taskNo}';");
|
DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
bl = true;
|
|
|
}
|
else
|
{
|
sqlString.Append($"Update WCSTasks set IsSuccess = '1',Information='{taskModels.Message}' where TaskNo = '{model.taskNo}';");
|
DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
}
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, $"{model.taskNo}:程序异常:任务反馈失败!");
|
}
|
|
return bl;
|
}
|
#endregion
|
|
|
#region 07版本,标准版弄好后删除
|
/// <summary>
|
/// 判断WCS是否自动模式 链接DB1
|
/// </summary>
|
/// <returns>true:自动模式 false:手动模式</returns>
|
public bool GetIsWcsAutoDB1()
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select code from [dbo].[Dictionary] where TypeName = 'WCSAuto';");
|
DataRow row = DataFactory.SqlDataBaseDB1().GetDataRowBySQL(sqlString);
|
if (row != null)
|
{
|
if (row["code"].ToString() == "0")
|
{
|
bl = true;
|
}
|
}
|
|
return bl;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
|
/// <summary>
|
/// 判断WCS是否自动模式 链接db2
|
/// </summary>
|
/// <returns>true:自动模式 false:手动模式</returns>
|
public bool GetIsWcsAutoDB2()
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select code from [dbo].[Dictionary] where TypeName = 'WCSAuto';");
|
DataRow row = DataFactory.SqlDataBaseDB2().GetDataRowBySQL(sqlString);
|
if (row != null)
|
{
|
if (row["code"].ToString() == "0")
|
{
|
bl = true;
|
}
|
}
|
|
return bl;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 获取未完成的任务自动
|
/// </summary>
|
/// <param name="state">任务状态0:未下发 1:已下发 3:已完成</param>
|
/// <returns>任务信息</returns>
|
public DataTable GetWmsTasks(string state, string taskType, string Palno = "")
|
{
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select top 1 * from TaskMonitor ");
|
sqlString.Append("where State = '" + state + "' and Source = 'WMS' and IsDel = '0' ");
|
if (Palno != "")
|
{
|
sqlString.Append(" and Palno = '" + Palno + "' ");
|
}
|
sqlString.Append(" and taskType = '" + taskType + "' ");
|
sqlString.Append(" order by PriorityLevel desc,CreateTime asc; ");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
if (dt == null || dt.Rows.Count == 0)
|
{
|
return null;
|
}
|
|
return dt;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 根据出入库口获取正在执行的出入库任务
|
/// </summary>
|
/// <param name="InitialAddre">通道口</param>
|
/// <param name="taskType">in:入库 out:出库</param>
|
/// <returns>true:不存在任务 false:存在任务</returns>
|
public bool GetTasks(string InitialAddre, string taskType)
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select * from TaskMonitor ");
|
sqlString.Append("where State = '1' and Source = 'WMS' and IsDel = '0' ");
|
sqlString.Append("and taskType = '" + taskType + "' and InitialAddre = '" + InitialAddre + "' ");
|
sqlString.Append("order by PriorityLevel desc,CreateTime asc; ");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
if (dt == null || dt.Rows.Count == 0)
|
{
|
bl = true;
|
}
|
|
return bl;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 创建任务
|
/// </summary>
|
/// <param name="taskModel">任务表实体类</param>
|
public int SetTaskMonitor(TaskMonitorDto taskModel)
|
{
|
try
|
{
|
int isSucceed = 0;
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append(@"INSERT INTO TaskMonitor(TaskNo,TaskType,InitialAddre
|
, Palno, TargetAddre, State, IsSucceed, ErrorStr, PriorityLevel, Source
|
, Demo, CreateTime, IsDel) values ('");
|
sqlString.Append(taskModel.TaskNo + "','" + taskModel.TaskType + "','" + taskModel.InitialAddre + "','");
|
sqlString.Append(taskModel.Palno + "','" + taskModel.TargetAddre + "',0,'0','0','0','WMS','',GETDATE(),'0')");
|
int rowCount = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
if (rowCount > 0)
|
{
|
return isSucceed;
|
}
|
else
|
{
|
return -1;
|
}
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 更新任务状态
|
/// </summary>
|
/// <param name="TrayCode">托盘号</param>
|
/// <param name="StateValue">任务状态</param>
|
/// <returns>true:成功 flase:失败</returns>
|
public bool SetWmsTasks(string TrayCode, string StateValue)
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("Update TaskMonitor set State = '" + StateValue + "' where Palno = '" + TrayCode + "' and State != '3';");
|
int rowCount = DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
if (rowCount > 0)
|
{
|
bl = true;
|
}
|
|
return bl;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 获取报警基础信息
|
/// </summary>
|
/// <returns>报警信息基础表</returns>
|
public DataTable GetErrorInfor()
|
{
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select * from [CS_AlarmInfo] order by M;");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
return dt;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 向报警表写入错误信息
|
/// </summary>
|
public void SetErrorMessage(string errorType, string errorCode, string messageStr)
|
{
|
try
|
{
|
// State: 0=未处理 1=已处理
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("insert into CS_Alarm (Name,ErrorCode,AlarmName,State) ");
|
sqlString.Append("VALUES ('" + errorType + "','" + errorCode + "','" + messageStr + "','0');");
|
DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 判断当前报警信息是否已存在
|
/// </summary>
|
/// <param name="errorCode">MB点位</param>
|
/// <returns>false:不存在 true:已存在</returns>
|
public bool GetErrorMessage(string errorCode)
|
{
|
bool bl = false;
|
try
|
{
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("select count(*) from CS_Alarm where errorCode = '" + errorCode + "';");
|
DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sqlString);
|
if (dt.Rows[0][0].ToString() != "0")
|
{
|
bl = true;
|
}
|
|
return bl;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 删除跺机和运输线所有报警信息
|
/// </summary>
|
public void DelErrorMessage()
|
{
|
try
|
{
|
// State: 0=未处理 1=已处理
|
StringBuilder sqlString = new StringBuilder();
|
sqlString.Append("delete from CS_Alarm;");
|
DataFactory.SqlDataBase().ExecuteBySql(sqlString);
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 通知wms任务完成
|
/// </summary>
|
/// <param name="palNo">托盘号</param>
|
/// <param name="locationCode">储位地址</param>
|
/// <param name="taskType">任务类型 1 入库任务 2:出库任务</param>
|
public void WcsinWms(string palNo, string locationCode, string taskType)
|
{
|
try
|
{
|
string returnStr = "";
|
DALWMSApi api = new DALWMSApi();
|
var LocationModel = new ApiLocationModel();
|
if (taskType == "1")
|
{
|
// 入库完成
|
LocationModel = api.PutStorage(palNo, locationCode);
|
}
|
else
|
{
|
// 出库完成
|
LocationModel = api.OutStorage(palNo, locationCode);
|
}
|
|
if (LocationModel.Code == "01")
|
{
|
returnStr = "托盘号:'" + palNo + "'任务完成";
|
}
|
else
|
{
|
this.SetErrorMessage(LocationModel.OutMode, LocationModel.Code, palNo + "任务失败!");
|
returnStr = "托盘号:'" + palNo + "'任务失败";
|
//switch (LocationModel.Code)
|
//{
|
// case "-11": returnStr = palNo + ":-11参数错误!"; break;
|
// case "-101": returnStr = palNo + ":-101无组盘信息!"; break;
|
// case "-102": returnStr = palNo + ":-102非仓库托盘"; break;
|
// default: break;
|
//}
|
}
|
|
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 调用WMS接口获取储位地址
|
/// </summary>
|
/// <param name="Palno">托盘号</param>
|
/// <returns>返回wms反馈的信息</returns>
|
public string GetLocation(string palNo, string height, string inPort)
|
{
|
try
|
{
|
string returnStr = "";
|
// 向WMS申请储位
|
LocationInfo location = new LocationInfo();
|
location.palNo = palNo;
|
location.height = int.Parse(height);
|
string json = JsonConvert.SerializeObject(location);
|
DALWMSApi api = new DALWMSApi();
|
var LocationModel = api.GetLocation(palNo, int.Parse(height));
|
// Liudl 2022-12-31 Edit 接口调用改为程序内部调用
|
//var response = Utility.Extra.HttpHelper.DoPost("192.168.1.35:57061/api/WMSApi/getLocation", json);
|
//ApiLocationModel LocationModel = JsonConvert.DeserializeObject<ApiLocationModel>(response);
|
// 判断储位是否申请成功 01:成功 -11:参数错误 -101:没有组盘信息 -102:没有此托盘
|
if (LocationModel.Code == "01")
|
{
|
// 生成入库任务,插入任务表
|
TaskMonitorDto taskModel = new TaskMonitorDto();
|
taskModel.TaskNo = "in";
|
taskModel.TaskType = "in";
|
taskModel.InitialAddre = inPort;
|
taskModel.Palno = palNo;
|
taskModel.TargetAddre = LocationModel.LocationCode;
|
taskModel.State = "0";
|
taskModel.IsSucceed = LocationModel.Code;
|
taskModel.ErrorStr = LocationModel.OutMode;
|
taskModel.PriorityLevel = 0;
|
taskModel.Source = "WMS";
|
taskModel.IsDel = 0;
|
|
this.SetTaskMonitor(taskModel);
|
|
returnStr = "托盘号:'" + palNo + "'申请储位成功,储位地址为:'" + LocationModel.LocationCode + "'";
|
}
|
else
|
{
|
// 向led屏幕插入信息 Liudl 未完成
|
// 插入报警信息
|
this.SetErrorMessage(LocationModel.OutMode, LocationModel.Code, palNo + "申请储位地址失败!");
|
switch (LocationModel.Code)
|
{
|
case "-11": returnStr = palNo + ":-S11参数错误!"; break;
|
case "-101": returnStr = palNo + ":-S101无组盘信息!"; break;
|
case "-102": returnStr = palNo + ":-S102非仓库托盘"; break;
|
default: break;
|
}
|
}
|
|
// 记录日志文件
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(returnStr, "申请储位");
|
|
return returnStr;
|
}
|
catch (Exception ex)
|
{
|
Logger logger = LogManager.GetCurrentClassLogger();
|
logger.Error(ex.Message, "程序异常:申请储位失败!");
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 判断此托盘是否已分配任务
|
/// </summary>
|
/// <param name="palNo">托盘号</param>
|
/// <returns></returns>
|
public string IsTaskMonitor(string palNo)
|
{
|
string Location = "";
|
try
|
{
|
StringBuilder strSQL = new StringBuilder();
|
strSQL.Append($"select TargetAddre from TaskMonitor where Palno ='{palNo}' and TaskType = 'in' and IsDel = '0' and State <> '3';");
|
DataTable dtI = DataFactory.SqlDataBase().GetDataTableBySQL(strSQL);
|
if (dtI != null && dtI.Rows.Count > 0)
|
{
|
Location = "托盘号:'" + palNo + "'申请储位成功,储位地址为:'" + dtI.Rows[0]["TargetAddre"] + "'";
|
}
|
|
return Location;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
#endregion
|
}
|
|
/// <summary>
|
/// 返回wms实体类
|
/// </summary>
|
public class ExportLibraryDto
|
{
|
/// <summary>
|
/// 任务号
|
/// </summary>
|
public string TaskNo { get; set; }
|
/// <summary>
|
/// 任务类型
|
/// </summary>
|
public string TaskType { get; set; }
|
/// <summary>
|
/// 托盘编码
|
/// </summary>
|
public string StockCode { get; set; }
|
/// <summary>
|
/// 储位编码
|
/// </summary>
|
public string SlotCode { get; set; }
|
/// <summary>
|
/// 目标地址(可能是仓库口、可能是移库后的储位)
|
/// </summary>
|
public string TargetPosition { get; set; }
|
/// <summary>
|
/// 托盘要经过的巷道口
|
/// </summary>
|
public string LaneWayPosition { get; set; }
|
/// <summary>
|
/// 目标储位经过的巷道口
|
/// </summary>
|
public string TargetLaneWayPosition { get; set; }
|
|
public int Order { get; set; }
|
|
}
|
|
/// <summary>
|
/// 任务监控实体类
|
/// </summary>
|
public class TaskMonitorDto
|
{
|
/// <summary>
|
/// 任务号
|
/// </summary>
|
public string TaskNo { get; set; }
|
/// <summary>
|
/// 任务类型
|
/// </summary>
|
public string TaskType { get; set; }
|
/// <summary>
|
/// 托盘编码
|
/// </summary>
|
public string Palno { get; set; }
|
/// <summary>
|
/// 起始地址
|
/// </summary>
|
public string InitialAddre { get; set; }
|
/// <summary>
|
/// 目标地址
|
/// </summary>
|
public string TargetAddre { get; set; }
|
|
/// <summary>
|
/// 状态 01等待 02进行中 03已完成
|
/// </summary>
|
public string State { get; set; }
|
|
/// <summary>
|
/// 是否成功
|
/// </summary>
|
public string IsSucceed { get; set; }
|
|
/// <summary>
|
/// 错误信息
|
/// </summary>
|
public string ErrorStr { get; set; }
|
|
/// <summary>
|
/// 优先级
|
/// </summary>
|
public int? PriorityLevel { get; set; }
|
|
/// <summary>
|
/// 来源
|
/// </summary>
|
public string Source { get; set; }
|
|
/// <summary>
|
/// 是否成功
|
/// </summary>
|
public string Demo { get; set; }
|
|
/// <summary>
|
/// 是否删除
|
/// </summary>
|
public int? IsDel { get; set; }
|
}
|
|
/// <summary>
|
/// 申请储位实体类
|
/// </summary>
|
public class LocationInfo
|
{
|
/// <summary>
|
/// 托盘号
|
/// </summary>
|
public string palNo { get; set; }
|
/// <summary>
|
/// 高度
|
/// </summary>
|
public int height { get; set; }
|
}
|
|
}
|