Browse Source

添加WCS提供的接口代码

master
志铭 吕 3 months ago
parent
commit
0f9840ffb2
  1. 2
      Model/CGetInfo.cs
  2. 14
      Model/MDevice.cs
  3. 4
      WcfControlMonitorHost_JNWCS.sln
  4. 2543
      WcfControlMonitorLib/CCallService.cs
  5. 23
      WcfControlMonitorLib/CDisassembleTask.cs
  6. 43
      WcfControlMonitorLib/CStaticClass.cs
  7. 38
      WcfControlMonitorLib/SControlMonitor.cs
  8. 477
      webapi/WindowsFormsApp1/APIChannel.cs

2
Model/CGetInfo.cs

@ -1031,6 +1031,7 @@ namespace Model
_DeviceInfo[deviceinfo.DeviceIndex].Battery_Status = deviceinfo.Battery_Status;//
_DeviceInfo[deviceinfo.DeviceIndex].Mile = deviceinfo.Mile;//À¼Öݽðͨ20190622
_DeviceInfo[deviceinfo.DeviceIndex].Time = deviceinfo.Time;//À¼Öݽðͨ20190622
// _DeviceInfo[deviceinfo.DeviceIndex].F_IsAGVIOStation = deviceinfo.F_IsAGVIOStation;//山东时代20250313
}
}
/// <summary>
@ -1090,6 +1091,7 @@ namespace Model
_DeviceInfo[deviceinfo.DeviceIndex].Battery_Status = deviceinfo.Battery_Status;//
_DeviceInfo[deviceinfo.DeviceIndex].Mile = deviceinfo.Mile;//À¼Öݽðͨ20190622
_DeviceInfo[deviceinfo.DeviceIndex].Time = deviceinfo.Time;//À¼Öݽðͨ20190622
_DeviceInfo[deviceinfo.DeviceIndex].F_IsAGVIOStation= deviceinfo.F_IsAGVIOStation;//山东时代20250313
}
}
public static void SetDeviceMessage(Model.MDevice deviceinfo)

14
Model/MDevice.cs

@ -675,7 +675,16 @@ namespace Model
get { return _time; }
set { _time = value; }
}
//20120820
//20120820\
int _isAGViostation;
/// <summary>
/// 是否AGV对接设备
/// </summary>
public int F_IsAGVIOStation
{
get { return _isAGViostation; }
set { _isAGViostation = value; }
}
}
/// <summary>
/// 本类用于传送给客户端数据时使用
@ -861,8 +870,7 @@ namespace Model
get { return _time; }
set { _time = value; }
}
}
}

4
WcfControlMonitorHost_JNWCS.sln

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30523.141
# Visual Studio Version 17
VisualStudioVersion = 17.7.34202.233
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{781FC713-2D42-4A22-97E5-7B051C734ACB}"
EndProject

2543
WcfControlMonitorLib/CCallService.cs

File diff suppressed because it is too large

23
WcfControlMonitorLib/CDisassembleTask.cs

@ -997,14 +997,7 @@ namespace WcfControlMonitorLib
for (int i = 0; i < dvM.Count; i++)
{//20090928
#region 首先选择此堆垛机所有入库任务,判断那个能执行
#region 20210302_上海晟碟,所有换层任务无条件优先拆分
//sql.Remove(0, sql.Length);
//sql.Append(
// "SELECT * FROM T_Manage_Task WHERE FIntoStepOK='0' AND (FCONTROLTASKTYPE = 5 OR FCONTROLTASKTYPE = 6)");
#endregion
//20101124
sql.Remove(0, sql.Length);
@ -1216,10 +1209,16 @@ namespace WcfControlMonitorLib
sql.Remove(0, sql.Length);
sql.Append("update T_Monitor_Task set F_MonitorTaskLevel=9 where F_MonitorTaskLevel<>100 and F_ManageTASKKINDINDEX=").Append(
dv[j]["F_ManageTaskKindIndex"]).Append(" and F_ManageTaskIndex=").Append(dv[j]["FID"]);
dbo.ExceSQL(sql.ToString());
//20100323
//20101028增加出库关联
if (deviceInfo != null)
dboM.ExceSQL(sql.ToString());
#region 拆分成功后修改IOControl表对应任务的状态 lzm20250311
sql.Remove(0, sql.Length);
sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where MANAGE_ID=").Append(dv[j]["FID"]);
dbo.ExceSQL(sql.ToString());
#endregion
//20100323
//20101028增加出库关联
if (deviceInfo != null)
{
if (deviceInfo.IfCorrelDoubleFork == "1")
{

43
WcfControlMonitorLib/CStaticClass.cs

@ -114,12 +114,11 @@ namespace WcfControlMonitorLib
//20091107
static string _ManageServiceAddress = "http://127.0.0.1:8080/WCS_OUT_MOVE";
static string _ManageServiceAddressTwo = "http://127.0.0.1:8080/WCS_OUT_MOVE";
static string _ManageServiceAddressThree = "http://127.0.0.1:8080/WCS_OUT_MOVE";
//static string _ManageServiceAddress = "http://192.168.39.10:8080/yapp/wms";
//static string _ManageServiceAddress = "http://192.168.39.10:8080/";
//static string _ManageServiceAddress = "http://localhost:44301";
static string _ManageServiceAddress = "http://ip:端口/lcs/thirdParty/taskStatusReport";//WCS 任务执行过程,将任务执行的状态回传给 LCS 系统。
static string _ManageServiceAddress2 = "http://ip:端口/lcs/thirdParty/inboundApply";//当入库的作业需要经过外部扫码设备触发分配库位或校验是否能入库时,WCS 通过此 接口向 LCS 申请。
static string _ManageServiceAddress3 = "http://ip:端口/lcs/thirdParty/wcsTaskInfo";//WCS 通知 LCS 调用 AGV 取货
static string _ManageServiceAddress4 = "https://ip:端口/api/lcs/thirdParty/requestRescore";//WCS 通过该接口请求 LCS 对目标库位进行重新分配。
static string _ManageServiceAddress5 = "https://ip:端口/api/lcs/thirdParty/autoMoveOut";//WCS 请求 WMS 判断外排是否需要自动移库
public static string ManageServiceAddress
{
@ -134,28 +133,48 @@ namespace WcfControlMonitorLib
}
public static string ManageServiceAddressTwo
{
get { return CStaticClass._ManageServiceAddressTwo; }
get { return CStaticClass._ManageServiceAddress2; }
set
{
if (value != "")
{
CStaticClass._ManageServiceAddressTwo = value;
CStaticClass._ManageServiceAddress2 = value;
}
}
}
public static string ManageServiceAddressThree
{
get { return CStaticClass._ManageServiceAddressThree; }
get { return CStaticClass._ManageServiceAddress3; }
set
{
if (value != "")
{
CStaticClass._ManageServiceAddressThree = value;
CStaticClass._ManageServiceAddress3 = value;
}
}
}
public static string ManageServiceAddressFour
{
get { return CStaticClass._ManageServiceAddress4; }
set
{
if (value != "")
{
CStaticClass._ManageServiceAddress4 = value;
}
}
}
public static string ManageServiceAddressFive
{
get { return CStaticClass._ManageServiceAddress5; }
set
{
if (value != "")
{
CStaticClass._ManageServiceAddress5 = value;
}
}
}
static string _movedDeviceAheadTrigger = "1";
/// <summary>
/// 移动设备是否被提前触发将取

38
WcfControlMonitorLib/SControlMonitor.cs

@ -11,6 +11,8 @@ using CommLayerFactory;
using System.IO;
using System.Threading;
using CommonUtils;
using System.Runtime.InteropServices.ComTypes;
namespace WcfControlMonitorLib
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
@ -662,7 +664,6 @@ namespace WcfControlMonitorLib
for (int ik = 1; ik < barbyte.GetLength(0); ik++)
{
barcodesb.Append(Convert.ToChar(barbyte[ik]));
}
string barcode = barcodesb.ToString();
int dcode = Convert.ToInt32(dv[i]["F_BindingDevice"]);
@ -670,7 +671,7 @@ namespace WcfControlMonitorLib
{
return;
}
if ((barcode == "\0\0\0\0\0\0\0\0\0\0") || (barcode == "?/////////") || (barcode == "1111111111"))
if ((barcode == "\0\0\0\0\0\0\0\0\0\0") || (barcode == "?/////////") || (barcode == "111111"))
{
#region 没扫到码送出到指定位置//20101208
StringBuilder aheadDetect = new StringBuilder();
@ -5336,12 +5337,12 @@ namespace WcfControlMonitorLib
return false;
}
}
#region I/O点字节集合采集分解
#region I/O点字节集合采集分解 lzm 20250313 添加字段 F_IsAGViostation
if (splitbyteValue != null)
{
Array.Copy(splitbyteValue, CStaticClass.MutiReadSubscriptionDeviceSplitReturns[deviceindex.ToString()], splitbyteValue.Length);
dvsp = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte FROM T_Base_Device WHERE f_controldevice='1' and (F_DeviceKindIndex <>31) AND(F_DeviceKindIndex <>33) AND (F_S7Connection = '{0}') AND (F_DBW2Address IS NOT NULL and F_SplitByte IS NOT NULL and F_SplitByte >={1} and F_SplitByte <{1}+{2}) ORDER BY F_DBW2Address", S7Connection, SplitBytebegin, SplitByteLength)).Tables[0].DefaultView;//20151120,增加字段是否需要服务端处理设备的订阅
dvsp = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_IsAGVIOStation FROM T_Base_Device WHERE f_controldevice='1' and (F_DeviceKindIndex <>31) AND(F_DeviceKindIndex <>33) AND (F_S7Connection = '{0}') AND (F_DBW2Address IS NOT NULL and F_SplitByte IS NOT NULL and F_SplitByte >={1} and F_SplitByte <{1}+{2}) ORDER BY F_DBW2Address", S7Connection, SplitBytebegin, SplitByteLength)).Tables[0].DefaultView;//20151120,增加字段是否需要服务端处理设备的订阅
for (int i = 0; i < dvsp.Count; i++)
{
devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dvsp[i]["F_DeviceIndex"]));
@ -5356,6 +5357,7 @@ namespace WcfControlMonitorLib
devinfo.SplitByte_5 = (splitbyteValue[delta] & 32) == 32 ? 1 : 0;
devinfo.SplitByte_6 = (splitbyteValue[delta] & 64) == 64 ? 1 : 0;
devinfo.SplitByte_7 = (splitbyteValue[delta] & 128) == 128 ? 1 : 0;
devinfo.F_IsAGVIOStation = Convert.ToInt32(dvsp[i]["F_IsAGVIOStation"]);
Model.CGetInfo.SetDeviceInfo(devinfo);
CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs(devinfo);
OnDeviceState("SControlMonitor.DealWithDeviceState", csce);
@ -5763,6 +5765,7 @@ namespace WcfControlMonitorLib
#region 类输送机
case 2:
devinfo.SplitByte_0 = (devicestates[tempdb2addr + 4] & 1) == 1 ? 1 : 0;
devinfo.SplitByte_1 = (devicestates[tempdb2addr + 4] & 2) == 2 ? 1 : 0;
devinfo.SplitByte_2 = (devicestates[tempdb2addr + 4] & 4) == 4 ? 1 : 0;
@ -5795,16 +5798,29 @@ namespace WcfControlMonitorLib
sss.Append("**条码:").Append(bc).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号:" + taskindex).Append(task23);
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到输送机机状态", devidx.ToString(), sss.ToString());
}
//20170212
if (state <= 0)//20140305|| taskindex <= 0
}
//20170212
if (state <= 0)//20140305|| taskindex <= 0
{
continue;
}
#region AGV取放货的输送线状态实时跟新 PLC断开连接后,改值不会变更,可能存在BUG,需要加以限制
if (devinfo.F_IsAGVIOStation == 1) {
var signal = devinfo.SplitByte_0 == 1 ? true : false;//1有货,0无光电感应
var runstate = devinfo.RunState == 0 ? true : false;
if (!signal && runstate)
{//空闲,无货
sql.Remove(0, sql.Length);
sql.Append("update T_AGVIOStation set F_AGVIOStatus=1 where F_DeviceIndex=").Append(devinfo.DeviceIndex);
dbo.ExecuteSql(sql.ToString());
}
else {
sql.Remove(0, sql.Length);
sql.Append("update T_AGVIOStation set F_AGVIOStatus=0 where F_DeviceIndex=").Append(devinfo.DeviceIndex);
dbo.ExecuteSql(sql.ToString());
}
}
#endregion
if ((taskindex2 > 0 || taskindex3 > 0) && (state == 2) && devinfo.IfCorrelDoubleFork == "1")
{
#region 根据电气报告三叉关联,配三叉

477
webapi/WindowsFormsApp1/APIChannel.cs

@ -15,6 +15,13 @@ using Nancy.Helpers;
using DBFactory;
using System.Data;
using System.Diagnostics.Eventing.Reader;
using System.Data.SqlClient;
using WcfInterfaceServer.Properties;
using System.Runtime;
using System.Collections;
using System.Configuration;
using System.Xml;
using static WcfControlMonitorLib.CCallService;
namespace WindowsFormsApp1
{
@ -30,9 +37,9 @@ namespace WindowsFormsApp1
{
//_server = new NancyHost(new Bootstrapper(), new Uri("http://192.168.39.10:8080"));
_server = new NancyHost(new Bootstrapper(), new Uri(address));
_server.Start();
_server.Start();
}
public APIChannel()
{
@ -53,6 +60,8 @@ namespace WindowsFormsApp1
#region WMS调用, 在此处理,出库以及移库任务 多条任务 任务下发
Post["/api/wcs/thirdParty/receiveWmsTask", true] = async (x, ct) =>
{
dbo.TransBegin(IsolationLevel.ReadCommitted);
try
{
var body = this.Request.Body;
@ -75,19 +84,15 @@ namespace WindowsFormsApp1
int isOk = 0;
// CCallService.OUT_MOVE_RES outReturn = new CCallService.OUT_MOVE_RES();
foreach (var task in outdata)
{
{
IO_CONTROL outtask = new IO_CONTROL(task, wms_wcs.msgTime, task.taskType, wms_wcs.priority.ToString());
if (outtask.Insert_IOCONTROL() == true)
{
outReturn.data += "ID'" + task.taskId.ToString() + "'任务正常:";
}
else
if (outtask.Insert_IOCONTROL() == false)
{
isOk++;
outReturn.data += "ID'" + task.taskId.ToString() + "'任务下发失败:";
}
}
if (isOk == 0)
{
outReturn.code = 0;
@ -103,16 +108,18 @@ namespace WindowsFormsApp1
}
returnJson = Model.JsonHelper.Serializer(outReturn);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", returnJson, "");
dbo.TransCommit();
return returnJson;
}
catch (Exception ex) {
string errorjson = Model.JsonHelper.Serializer(new
{
code =1,
code = 1,
msg = "WCS解析json异常",
data = ex.Message.ToString()
});
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
dbo.TransRollback();
return errorjson;
}
};
@ -121,112 +128,338 @@ namespace WindowsFormsApp1
#region WMS调用, 在此处理,取消任务 单条形式
Post["/api/wcs/thirdParty/cancelWmsTask", true] = async (x, ct) =>
{
var body = this.Request.Body;
int length = (int)body.Length;
byte[] data = new byte[length];
body.Read(data, 0, length);
string jsonStr = System.Text.Encoding.Default.GetString(data);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "收到报文", jsonStr.ToString(), "");
CCallService.WMS_WCS_PARAM_CANCEL wms_wcs_cancel = Model.JsonHelper.Deserialize<CCallService.WMS_WCS_PARAM_CANCEL>(jsonStr);
CCallService.WCS_WMS_PARAM_CANCEL wcs_wms_cancel = new CCallService.WCS_WMS_PARAM_CANCEL(); //返回的报文
string err = string.Empty;
string returnJson = string.Empty;
DataView dv = new DataView();
if (wms_wcs_cancel != null)
try
{
switch (wms_wcs_cancel.method)
var body = this.Request.Body;
int length = (int)body.Length;
byte[] data = new byte[length];
body.Read(data, 0, length);
string jsonStr = System.Text.Encoding.Default.GetString(data);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "收到报文", jsonStr.ToString(), "");
CCallService.WMS_WCS_PARAM_Priority wms_wcs_cancel = Model.JsonHelper.Deserialize<CCallService.WMS_WCS_PARAM_Priority>(jsonStr);
CCallService.WCS_WMS_PARAM_Priority wcs_wms_cancel = new CCallService.WCS_WMS_PARAM_Priority(); //返回的报文
string err = string.Empty;
string returnJson = string.Empty;
DataView dv = new DataView();
if (wms_wcs_cancel != null)
{
case "wms_request_cancel": //WMS取消任务
CCallService.CANCEL_DATA canceldata = new CCallService.CANCEL_DATA();
canceldata = wms_wcs_cancel.data;
CCallService.CANCEL_RES_DATA cancelReturn = new CCallService.CANCEL_RES_DATA();
string sql = "select * from t_manage_task where FID = '" + canceldata.taskId + "' and FPALLETBARCODE = '" + canceldata.containerCode + "'";
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
if (dv.Count == 1)
//CCallService.CANCEL_DATA canceldata = new CCallService.CANCEL_DATA();
//canceldata = wms_wcs_cancel.data;
// CCallService.CANCEL_RES_DATA cancelReturn = new CCallService.CANCEL_RES_DATA();
string sql = "select * from t_manage_task where FID = '" + wms_wcs_cancel.taskId + "'";
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
if (dv.Count == 1)
{
int stepOk = Convert.ToInt32(dv[0]["FIntoStepOK"]);//拆分下发
if (stepOk == 0)//未拆分
{
int stepOk = Convert.ToInt32(dv[0]["FIntoStepOK"]);
if (stepOk == 0)
try
{
try
sql = "delete from t_manage_task where FMANAGEID = '" + wms_wcs_cancel.taskId + "'";
int count = dbo.ExecuteSql(sql);
if (count > 0)
{
sql = "delete from t_manage_task where FMANAGEID = '" + canceldata.taskId + "' and FPALLETBARCODE = '" + canceldata.containerCode + "'";
int count = dbo.ExecuteSql(sql);
if (count > 0)
{
cancelReturn.code = "00";
cancelReturn.msg = "取消任务成功!";
cancelReturn.taskId = cancelReturn.taskId;
}
else
{
cancelReturn.code = "01";
cancelReturn.msg = "取消任务失败,WCS无法删除任务!";
cancelReturn.taskId = cancelReturn.taskId;
}
wcs_wms_cancel.code = 0;
wcs_wms_cancel.msg = "";
wcs_wms_cancel.data = "";
}
catch (Exception ex)
else
{
cancelReturn.code = "01";
cancelReturn.msg = "取消任务失败,WCS无法删除任务!";
cancelReturn.taskId = cancelReturn.taskId;
wcs_wms_cancel.code = 1;
wcs_wms_cancel.msg = "取消任务失败,WCS无法删除任务!";
wcs_wms_cancel.data = "数据库删除数据失败";
}
}
else
catch (Exception ex)
{
cancelReturn.code = "01";
cancelReturn.msg = "取消任务失败,任务已执行!";
cancelReturn.taskId = cancelReturn.taskId;
wcs_wms_cancel.code = 1;
wcs_wms_cancel.msg = "取消任务失败,WCS无法删除任务!";
wcs_wms_cancel.data = "";
}
}
else if (dv.Count == 0)
else
{
cancelReturn.code = "00";
cancelReturn.msg = "取消任务成功,WCS中无此任务!" + canceldata.taskId;
cancelReturn.taskId = cancelReturn.taskId;
wcs_wms_cancel.code = 1;
wcs_wms_cancel.msg = "取消任务失败,任务已执行!";
wcs_wms_cancel.data = "";
}
}
else if (dv.Count == 0)
{
wcs_wms_cancel.code = 0;
wcs_wms_cancel.msg = "取消任务成功,WCS中无此任务!" + wms_wcs_cancel.taskId;
wcs_wms_cancel.data = "";
}
else
{
wcs_wms_cancel.code = 1;
wcs_wms_cancel.msg = "取消任务失败,WCS中有多条相同任务!";
wcs_wms_cancel.data = "";
}
}
returnJson = Model.JsonHelper.Serializer(wcs_wms_cancel);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", returnJson, "");
return returnJson;
}
catch (Exception ex)
{
string errorjson = Model.JsonHelper.Serializer(new
{
code = 1,
msg = "WCS解析json异常",
data = ex.Message.ToString()
});
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
return errorjson;
}
};
#endregion
#region WMS调用, 在此处理,任务优先级 单条形式
Post["/api/wcs/thirdParty/changePriorityWmsTask", true] = async (x, ct) =>
{
try
{
var body = this.Request.Body;
int length = (int)body.Length;
byte[] data = new byte[length];
body.Read(data, 0, length);
string jsonStr = System.Text.Encoding.Default.GetString(data);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "收到报文", jsonStr.ToString(), "");
CCallService.WMS_WCS_PARAM_Priority wms_wcs_cancel = Model.JsonHelper.Deserialize<CCallService.WMS_WCS_PARAM_Priority>(jsonStr);
CCallService.WCS_WMS_PARAM_CANCEL wcs_wms_cancel = new CCallService.WCS_WMS_PARAM_CANCEL(); //返回的报文
string returnJson = string.Empty;
DataView dv = new DataView();
if (wms_wcs_cancel != null)
{
//CCallService.CANCEL_DATA canceldata = new CCallService.CANCEL_DATA();
//canceldata = wms_wcs_cancel.data;
// CCallService.CANCEL_RES_DATA cancelReturn = new CCallService.CANCEL_RES_DATA();
string sql = "select * from t_manage_task where FID = '" + wms_wcs_cancel.taskId + "'";
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
if (dv.Count == 1)
{
string sql1 = "updata t_manage_task set F_MonitorTaskLevel="+ wms_wcs_cancel.priority+ " where FID = '" + wms_wcs_cancel.taskId + "'";
int count = dbo.ExecuteSql(sql1);
if (count > 0)
{
wcs_wms_cancel.code = 0;
wcs_wms_cancel.msg = "";
wcs_wms_cancel.data = null;
}
else
{
cancelReturn.code = "01";
cancelReturn.msg = "取消任务失败,WCS中有多条相同任务!相同的条码:" + canceldata.containerCode;
cancelReturn.taskId = cancelReturn.taskId;
wcs_wms_cancel.code = 1;
wcs_wms_cancel.msg = "调整失败,WCS数据库无法调整任务!";
wcs_wms_cancel.data = null;
}
wcs_wms_cancel.data = cancelReturn;
wcs_wms_cancel.timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
wcs_wms_cancel.method = wms_wcs_cancel.method;
break;
}
else if (dv.Count > 1)
{
wcs_wms_cancel.code = 1;
wcs_wms_cancel.msg = "任务优先级调整失败,存在多条相同任务号的任务!";
wcs_wms_cancel.data = "数据库删除数据失败";
}
else {
wcs_wms_cancel.code = 1;
wcs_wms_cancel.msg = "任务优先级调整失败,不存在任务!";
wcs_wms_cancel.data = "数据库删除数据失败";
}
}
return returnJson;
}
catch (Exception ex)
{
string errorjson = Model.JsonHelper.Serializer(new
{
code = 1,
msg = "WCS解析json异常",
data = ex.Message.ToString()
});
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
return errorjson;
}
};
#endregion
#region WMS调用, 在此处理,入库任务 单条形式
Post["/api/wcs/thirdParty/deliverWmsInTask", true] = async (x, ct) =>
{
try
{
var body = this.Request.Body;
int length = (int)body.Length;
byte[] data = new byte[length];
body.Read(data, 0, length);
string jsonStr = System.Text.Encoding.Default.GetString(data);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "收到报文", jsonStr.ToString(), "");
default:
CCallService.WMS_WCS_PARAM_IN wms_wcs = Model.JsonHelper.Deserialize<CCallService.WMS_WCS_PARAM_IN>(jsonStr);
CCallService.WCS_WMS_PARAM_IN wcs_wms = new CCallService.WCS_WMS_PARAM_IN(); //返回的报文
string errorjson = Model.JsonHelper.Serializer(new
{
method = wms_wcs_cancel.method,
timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
data = new
{
code = "11",
msg = "WCS解析jason异常"
}
});
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", errorjson, "");
return errorjson;
}
string err = string.Empty;
string returnJson = string.Empty;
DataView dv = new DataView();
if (wms_wcs != null)
{
IO_CONTROL ruku = new IO_CONTROL(wms_wcs, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), wms_wcs.priority);
if (ruku.Insert_IOCONTROL() == true)
{
wcs_wms.code = 0;
wcs_wms.msg = "";
wcs_wms.data = null;
}
else
{
wcs_wms.code = 1;
wcs_wms.msg = "入库任务接收失败!" + ruku.error_code;
wcs_wms.data = null;
}
}
returnJson = Model.JsonHelper.Serializer(wcs_wms);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", returnJson, "");
return returnJson;
}
catch (Exception ex) {
string errorjson = Model.JsonHelper.Serializer(new
{
code = 1,
msg = "WCS解析json异常",
data = ex.Message.ToString()
});
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
return errorjson;
}
};
#endregion
#region WMS调用, 在此处理,WCS 允许 AGV 可取可放
Post["/api/wcs/thirdParty/getStationStatus", true] = async (x, ct) =>
{
try
{
var body = this.Request.Body;
int length = (int)body.Length;
byte[] data = new byte[length];
body.Read(data, 0, length);
string jsonStr = System.Text.Encoding.Default.GetString(data);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "收到报文", jsonStr.ToString(), "");
CCallService.LCS_WCS_AGVStationStauts wms_wcs = Model.JsonHelper.Deserialize<CCallService.LCS_WCS_AGVStationStauts>(jsonStr);
CCallService.LCS_WCS_AGVStationStautsBack wcs_wms = new CCallService.LCS_WCS_AGVStationStautsBack(); //返回的报文
returnJson = Model.JsonHelper.Serializer(wcs_wms_cancel);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", returnJson, "");
return returnJson;
string err = string.Empty;
string returnJson = string.Empty;
DataView dv = new DataView();
if (wms_wcs != null)
{
StringBuilder sql = new StringBuilder();
sql.Clear();
sql.Append("select * from T_AGVIOStation where F_DeviceIndex=").Append(wms_wcs.toStation);
DataView dataBackmsg = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dataBackmsg.Count > 0) {
wcs_wms.code = 0;
wcs_wms.msg = "";
LCS_WCS_AGVStationStautsBackData msg = new LCS_WCS_AGVStationStautsBackData();
msg.taskId = wms_wcs.taskId;
//msg.taskId = dataBackmsg[0]["F_TaskID"].ToString();
wcs_wms.data = msg;
}
else {
wcs_wms.code = 1;
wcs_wms.msg = $"WCS未找到站台{wms_wcs.toStation}信息";
}
}
returnJson = Model.JsonHelper.Serializer(wcs_wms);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", returnJson, "");
return returnJson;
}
catch (Exception ex)
{
string errorjson = Model.JsonHelper.Serializer(new
{
code = 1,
msg = "WCS解析json异常",
data = ex.Message.ToString()
});
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
return errorjson;
}
};
#endregion
#region WMS调用, LCS 返回 AGV 取放货状态给 WCS 8接口
Post["/api/wcs/thirdParty/submitAgvStatus", true] = async (x, ct) =>
{
try
{
var body = this.Request.Body;
int length = (int)body.Length;
byte[] data = new byte[length];
body.Read(data, 0, length);
string jsonStr = System.Text.Encoding.Default.GetString(data);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "收到报文", jsonStr.ToString(), "");
CCallService.LCS_WCS_AGVStatus wms_wcs = Model.JsonHelper.Deserialize<CCallService.LCS_WCS_AGVStatus>(jsonStr);
CCallService.LCS_WCS_AGVStatusBack wcs_wms = new CCallService.LCS_WCS_AGVStatusBack(); //返回的报文
string err = string.Empty;
string returnJson = string.Empty;
DataView dv = new DataView();
if (wms_wcs != null)
{
StringBuilder sql = new StringBuilder();
sql.Clear();
sql.Append("select * from T_AGVIOStation where F_DeviceIndex=").Append(wms_wcs.toStation);
DataView dataBackmsg = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dataBackmsg.Count > 0)
{
int status = 0;//1AGV运动中,2AGV已离开,或者动作完成
if (wms_wcs.agvTaskStatus == 23 || wms_wcs.agvTaskStatus == 21 || wms_wcs.agvTaskStatus == 56)
{
status = 2;
}
else {
status = 1;
}
wcs_wms.code = 0;
wcs_wms.msg = "";
sql.Clear();
sql.Append("update T_AGVIOStation set F_AGVStatus = ").Append(status). Append(" F_TaskID=").Append(wms_wcs.taskId).Append(" where F_DeviceIndex=").Append(wms_wcs.toStation);
dbo.ExceSQL(sql.ToString());
LCS_WCS_AGVStatusBackData msg = new LCS_WCS_AGVStatusBackData();
msg.taskId = wms_wcs.taskId;
wcs_wms.data = msg;
}
else
{
wcs_wms.code = 1;
wcs_wms.msg = $"WCS未找到站台{wms_wcs.toStation}信息";
}
}
returnJson = Model.JsonHelper.Serializer(wcs_wms);
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", returnJson, "");
return returnJson;
}
catch (Exception ex)
{
string errorjson = Model.JsonHelper.Serializer(new
{
code = 1,
msg = "WCS解析json异常",
data = ex.Message.ToString()
});
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
return errorjson;
}
};
#endregion
#region test
//Post["/STATUS", true] = async (x, ct) =>
//{
@ -307,7 +540,44 @@ namespace WindowsFormsApp1
}
/// <summary>
/// 通过读取XML文档获得DBFactory.dll.config的内容
/// </summary>
/// <returns>appSettings所有key的值</returns>
private static IDictionary GetConfig()
{
// Open and parse configuration file for specified
// assembly, returning collection to caller for future
// use outside of this class.
//
try
{
Assembly asm = Assembly.GetCallingAssembly();
string cfgFile = asm.Location + ".config";
const string nodeName = "appSettings";
XmlDocument doc = new XmlDocument();
doc.Load(cfgFile);//20100726
XmlNodeList nodes = doc.GetElementsByTagName(nodeName);
foreach (XmlNode node in nodes)
{
if (node.LocalName == nodeName)
{
DictionarySectionHandler handler = new DictionarySectionHandler();
return (IDictionary)handler.Create(null, null, node);
}
}
}
catch (Exception ex)
{
throw (ex);
}
return (null);
}
#region 向 IO_CONTROL 插入出库倒库任务等
public class IO_CONTROL
{
@ -320,6 +590,7 @@ namespace WindowsFormsApp1
int control_type;
string warehouse ="1";
string tasklevel;
int needAgv = 0;
public StringBuilder error_code = new StringBuilder();
StringBuilder sql = new StringBuilder();
@ -344,20 +615,29 @@ namespace WindowsFormsApp1
string dTime1 = DateTime.Now.ToString("u");
begintime = dTime1.Substring(0, dTime1.Length - 1);
tasklevel = level;
needAgv = outdata.carryType == 2 ? 1 : 0;
}
public IO_CONTROL(CCallService.IN_DATA indata, string time)//入库
public IO_CONTROL(CCallService.WMS_WCS_PARAM_IN indata, string time, string level)//入库
{
error_code.Clear();
wms_id = indata.taskId;
relative_id = -1;
barcode = indata.containerCode;
startdevice = indata.sourceAddress;
enddevice = indata.targetAddress;
if (indata.taskType == 2 || indata.taskType == 3)
{ //起点是库位
// startdevice = outdata.startRow.ToString("D2") + "-" + outdata.startColumn.ToString("D2") + "-" + outdata.startLayer.ToString("D2");
enddevice = indata.endNode;
}
else if (indata.taskType == 1 || indata.taskType == 4) //终点是库位
{
startdevice = indata.startNode;
enddevice = indata.endRow.ToString("D2") + "-" + indata.endColumn.ToString("D2") + "-" + indata.endLayer.ToString("D2");
}
control_type = 1;
string dTime1 = DateTime.Now.ToString("u");
begintime = dTime1.Substring(0, dTime1.Length - 1);
tasklevel = indata.tasklevel;
tasklevel = level;
}
//检查参数是否正确
@ -480,7 +760,7 @@ namespace WindowsFormsApp1
error_code.Append(";").Append(all_checking["START_GATE_NOT_EXIST"].des); //起点站台不存在
}
}
#region 校验代码需优化20250310
if (control_type == 3) //移库任务
{
if (this.startdevice.Length != 8)
@ -517,7 +797,7 @@ namespace WindowsFormsApp1
}
}
#endregion
#endregion
//检查托盘码
@ -540,9 +820,10 @@ namespace WindowsFormsApp1
try
{
sql.Clear();
sql.Append(string.Format("INSERT INTO IO_CONTROL (CONTROL_ID, RELATIVE_CONTROL_ID, MANAGE_ID, STOCK_BARCODE, CONTROL_TASK_TYPE, CONTROL_TASK_LEVEL, START_WAREHOUSE_CODE, START_DEVICE_CODE, END_WAREHOUSE_CODE, END_DEVICE_CODE, CONTROL_BEGIN_TIME,CONTROL_STATUS) " +
sql.Append(string.Format("INSERT INTO IO_CONTROL (CONTROL_ID, RELATIVE_CONTROL_ID, MANAGE_ID, STOCK_BARCODE, CONTROL_TASK_TYPE, CONTROL_TASK_LEVEL," +
" START_WAREHOUSE_CODE, START_DEVICE_CODE, END_WAREHOUSE_CODE, END_DEVICE_CODE, CONTROL_BEGIN_TIME,CONTROL_STATUS,NeedAgv) " +
"VALUES( {0},'{1}','{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}',{11})",
wms_id, -1, 0, barcode, control_type, tasklevel, warehouse, startdevice, warehouse, enddevice, begintime,0));
wms_id, -1, 0, barcode, control_type, tasklevel, warehouse, startdevice, warehouse, enddevice, begintime,0,needAgv));
dbo.ExceSQL(sql.ToString());
return true;
}

Loading…
Cancel
Save