using HH.WCS.QingXigongchang.util;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Xml;
|
|
namespace HH.WCS.QingXigongchang.dispatch
|
{
|
public class NDC
|
{
|
private static HostToAGV callClient = null;
|
static NDC()
|
{
|
callClient = new HostToAGV();
|
//callClient.Url = "http://192.168.1.146:9988/HostToAGV.cgi";
|
callClient.Url = Settings.HostToAgvServerUrl;
|
}
|
|
private static string GetReqStr(int ts, Dictionary<string, string> param)
|
{
|
//< Order TS = '60' Pri = '" + mst.CN_N_PRIORITY.ToString() + "' From = '" + start.CN_N_AGV_LOCATION + "' To = '" + end.CN_N_AGV_LOCATION + "' No = '" + mst.S_TASK_NO + "_1' Ext1 = '1' Ext2 = '" + Constants.TN_MID_COMMANDEQ_CALLAGVOrderCommandType + "' N_CNTR_COUNT = '' FRow = '" + sFloor + "' TRow = '" + eFloor + "' />
|
var sb = new StringBuilder();
|
if (ts == 164)
|
{
|
sb.Append($"<Req><Order ");
|
if (ts != 0)
|
{
|
sb.Append($"TS='{ts}'");
|
}
|
foreach (var kv in param)
|
{
|
sb.Append($" {kv.Key}='{kv.Value}'");
|
}
|
sb.Append("/></Req>");
|
return sb.ToString();
|
}
|
|
var sb1 = new StringBuilder();
|
sb.Append($"<Req><Order ");
|
if (ts != 0)
|
{
|
sb.Append($"TS='{ts}'");
|
}
|
foreach (var kv in param)
|
{
|
if (kv.Key == "Pri" || kv.Key == "No")
|
sb.Append($" {kv.Key}='{kv.Value}'");
|
else
|
sb1.Append($"<Param Name='{kv.Key}' Value='{kv.Value}' />");
|
}
|
sb.Append(">").Append(sb1).Append("</Order></Req>");
|
return sb.ToString();
|
}
|
public static AGVResult AddNewOrder(int ts, Dictionary<string, string> param)
|
{
|
//< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
|
var bufin = GetReqStr(ts, param);
|
|
try
|
{
|
var result = callClient.OrderAdd(bufin);
|
LogHelper.Info($"AddNewOrder req={bufin} res={result}", "NDC");
|
//LogHelper.Info(result.bufout, "ts");
|
return GetResult(result);
|
}
|
catch (Exception e)
|
{
|
LogHelper.Info($"AddNewOrder req={bufin} res={e.Message}", "NDC");
|
return new AGVResult { Res = new Res { ErrCode = -1, ErrInfo = e.Message } };
|
}
|
}
|
public static bool AddTaskNew(int ts, int pri, string taskNo, Dictionary<string, string> dic)
|
{
|
var res = NDC.AddNewOrderNew(ts, pri, taskNo, dic);
|
if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
public static AGVResult AddNewOrderNew(int ts, int pri, string taskNo, Dictionary<string, string> param)
|
{
|
//< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
|
|
var bufin = GetReqStrNew(ts, pri, taskNo, param);
|
|
try
|
{
|
LogHelper.Info($"任务下发结果 OrderAdd req={bufin}", "NDC");
|
var result = callClient.OrderAdd(bufin);
|
LogHelper.Info($"任务下发结果 OrderAdd req={bufin} res={result}", "NDC");
|
// Console.WriteLine($"任务下发结果 OrderAdd req={bufin} res={result}");
|
//LogHelper.Info(result.bufout, "ts");
|
return GetResult(result);
|
}
|
catch (Exception e)
|
{
|
LogHelper.Info($"任务下发失败 OrderAdd req={bufin} res={e.Message}", "NDC");
|
//Console.WriteLine($"任务下发失败 AddNewOrder req={bufin} res={e.Message}");
|
return new AGVResult { Res = new Res { ErrCode = -1, ErrInfo = e.Message } };
|
}
|
|
}
|
private static string GetReqStrNew(int ts, int pri, string taskNo, Dictionary<string, string> param)
|
{
|
/*<Req>
|
<Order TS='5' Pri='80' No='666' NoCallback='0' Ext1='' Ext2='' Ext3=''>
|
<Param Name='From' Value='10' />
|
<Param Name='To' Value='20' />
|
<Param Name='FRow' Value='1' />
|
<Param Name='TRow' Value='7' />
|
<Param Name='DispInfo' Value='1' />
|
<Param Name='CtrlVal' Value='12' />
|
<Param Name='ChgTo' Value='2' />
|
<Param Name='Flow' Value='111' />
|
<Param Name='Tlow' Value='222' />
|
</Order>
|
</Req>*/
|
var sb = new StringBuilder();
|
sb.Append($"<Req><Order TS='{ts}' Pri='{pri}' No='{taskNo}'>");
|
|
foreach (var kv in param)
|
{
|
sb.Append($"<Param Name='{kv.Key}' Value='{kv.Value}'/>");
|
}
|
sb.Append("</Order></Req>");
|
return sb.ToString();
|
}
|
|
public static AGVResult CancelOrder(int ts, Dictionary<string, string> param, string RORDERs = "")
|
{
|
//< Req >< Order No = 'TN2302020001' >< Param Name = 'IsForce' Value = '1' /></ Order ></ Req >
|
var bufin = GetReqStr(ts, param);
|
if (!string.IsNullOrEmpty(RORDERs))
|
bufin = RORDERs;// GetReqStr(ts, param);
|
try
|
{
|
var result = callClient.CancelOrder(bufin);
|
LogHelper.Info($"CancelOrder req={bufin} res={result}", "NDC");
|
return GetResult(result);
|
}
|
catch (Exception e)
|
{
|
LogHelper.Info($"CancelOrder req={bufin} res={e.Message}", "NDC");
|
return new AGVResult
|
{
|
Res = new Res
|
{
|
ErrCode = -1,
|
ErrInfo = e.Message
|
}
|
};
|
}
|
}
|
public static AGVResult StartNewOrderWithQCmd(int ts, Dictionary<string, string> param)
|
{
|
//lpn: <Order TS='41' Pri='' ExtDeviceNo='{0}' CtrlVal='{1}' DispInfo='{2}' No='{3}' Ext1='' Ext2='' N_CNTR_COUNT='' />
|
//traccif: <Order TS='164' From='2' To='2' ExtDeviceNo='" + lockNo + "' No='" + DateTime.Now.Ticks.ToString() + "' />
|
//lock: <Order TS='170' CtrlVal='" + CtrlVal + "' ExtDeviceNo='" + roadway + "' No='" + DateTime.Now.Ticks.ToString() + "' />
|
var bufin = GetReqStr(ts, param);
|
try
|
{
|
var r = callClient.StartNewOrderWithQCmd(bufin);
|
LogHelper.Info($"StartNewOrderWithQCmd req={bufin} res={r}", "NDC");
|
return GetResult(r);
|
}
|
catch (Exception e)
|
{
|
LogHelper.Info($"StartNewOrderWithQCmd req={bufin} res={e.Message}", "NDC");
|
return new AGVResult
|
{
|
Res = new Res
|
{
|
ErrCode = -1,
|
ErrInfo = e.Message
|
}
|
};
|
}
|
}
|
public static AGVResult ChangeOrder(Dictionary<string, string> param)
|
{
|
//< Req >< Order No = 'TN2302020002' ParamNo = '1' Param1 = '1' /></ Req >
|
var bufin = GetReqStr(0, param);
|
try
|
{
|
var r = callClient.ChangeOrder(bufin);
|
LogHelper.Info($"ChangeOrder req={bufin} res={r}", "NDC");
|
return GetResult(r);
|
}
|
catch (Exception e)
|
{
|
LogHelper.Info($"ChangeOrder req={bufin} res={e.Message}", "NDC");
|
return new AGVResult
|
{
|
Res = new Res
|
{
|
ErrCode = -1,
|
ErrInfo = e.Message
|
}
|
};
|
}
|
}
|
private static AGVResult GetResult(string bufout)
|
{
|
//<Res><ErrCode>0</ErrCode><Result>11</Result></Res>
|
XmlDocument xml = new XmlDocument();
|
xml.LoadXml(bufout);
|
var json = JsonConvert.SerializeXmlNode(xml);
|
return JsonConvert.DeserializeObject<AGVResult>(json);
|
}
|
public class AGVResult
|
{
|
public Res Res { get; set; }
|
}
|
public class Res
|
{
|
public int ErrCode { get; set; }
|
public string ErrInfo { get; set; }
|
}
|
}
|
}
|