杨前锦
2025-06-13 b7308bba3d7ffad271ce7fc7a93c8c45d76be87d
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/dispatch/NDC.cs
New file
@@ -0,0 +1,164 @@
using HH.WCS.Mobox3.FJJT.util;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace HH.WCS.Mobox3.FJJT.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 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='Func' Value='1' />
                <Param Name='Data' Value='7' />
                <Param Name='ItemHeight' Value='1' />
                <Param Name='CntrType' Value='12' />
                <Param Name='FromCol' Value='2' />
                <Param Name='ToCol' Value='111' />
              </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 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 {
                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 GetReqStr(int ts, Dictionary<string, string> param) {
            //< Order  TS = '60'  Pri = '" + mst.CN_N_PRIORITY.ToString() + "' From = '" + start.CN_N_AGV_TN_Location + "' To = '" + end.CN_N_AGV_TN_Location + "'  No = '" + mst.S_CODE + "_1' Ext1 = '1' Ext2 = '" + Constants.TN_MID_COMMANDEQ_CALLAGVOrderCommandType + "'  N_CNTR_COUNT = ''   FRow = '" + sFloor + "'  TRow = '" + eFloor + "' />
            var sb = new StringBuilder();
            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();
        }
        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.AddNewOrder(bufin);
                LogHelper.Info($"AddNewOrder req={bufin} res={result}", "NDC");
                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 AGVResult CancelOrder(int ts, Dictionary<string, string> param) {
            //< Req >< Order No = 'TN2302020001' >< Param Name = 'IsForce' Value = '1' /></ Order ></ Req >
            var bufin = 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 = '18' Param1 = '12' /></ 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; }
        }
    }
}