zoukankan      html  css  js  c++  java
  • 三、openTCS4.12 Http接口创建运输订单(可用于二次开发)

    openTCS官方提供关了Web API的文档
    http://www.opentcs.org/docs/4.12/developer/web-api/index.html
    在这里插入图片描述

    1.运输订单
      Get方法(可以在浏览器地址栏直接输入测试)
         http://127.0.0.1:55200/v1/transportOrders
       返回所有的运输订单:
         [ {
          “name” : “TOrder-0fa56142-3e0a-4702-8eef-39136c82b8f1”,
          “category” : “-”,
          “state” : “FINISHED”,
          “intendedVehicle” : null,
          “processingVehicle” : “AGV2”,
          “destinations” : [ {
          “locationName” : “WorkPlace”,
          “operation” : “Work”,
           “state” : “FINISHED”,
          “properties” : []
          }]
         },{
          “name” : “Move-24d8eb37-1251-426b-af41-4604511ff4c9”,
          “category” : “-”,
          “state” : “BEING_PROCESSED”,
          “intendedVehicle” : “AGV2”,
          “processingVehicle” : “AGV2”,
          “destinations” : [{
          “locationName” : “Point1”,
          “operation” : “MOVE”,
          “state” : “TRAVELLING”,
          “properties” : []
          }]
         }]
    2.根据订单号获取运输订单信息
      GET方法:
        http://127.0.0.1:55200/v1/transportOrders/{orderNum}
        例如
        http://127.0.0.1:55200/v1/transportOrders/TOrder-0fa56142-3e0a-4702-8eef-39136c82b8f1
      返回:
      {
       “name” : “TOrder-0fa56142-3e0a-4702-8eef-39136c82b8f1”,
       “category” : “-”,
        “state” : “FINISHED”,
        “intendedVehicle” : null,
        “processingVehicle” : “AGV2”,
        “destinations” : [ {
        “locationName” : “WorkPlace”,
        “operation” : “Work”,
        “state” : “FINISHED”,
        “properties” : []
        }]
      }

    3.创建订单
        Post方法:
            http://127.0.0.1:55200/v1/transportOrders/{orderNum}
            orderNum随机生成(建议用UUID)
            contentType为:application/json
            Post数据如下:
            创建运输订单
            {
                “intendedVehicle” : null,
                “destinations” : [ {
                    “locationName” : “Load1”,
                    “operation” : “Load”,
                    “properties” : [ ]
                }, {
                    “locationName” : “Unload1”,
                    “operation” : “Unload”,
                    “properties” : [ ]
                } ]
            }
            或者移动订单
            {
                “intendedVehicle” : “AGV1”,
                “destinations” : [ {
                “locationName” : “Point5”,
                “operation” : “MOVE”,
                “properties” : [ ]
            } ]
        }
        返回:
            Successful operation

    4.取消订单
      POST方法
        http://127.0.0.1:55200/v1/transportOrders/{orderNum}/withdrawal
      返回
        Successful operation

    5.获取小车信息
        GET方法
            http://127.0.0.1:55200/v1/vehicles
        返回:
        [ {
            “name” : “AGV1”,
            “properties” : {
                “tcs:preferredAdapterClass” : “org.opentcs.virtualvehicle.LoopbackCommunicationAdapterFactory”,
                “IP” :“192.168.1.100”,
                “Port” : “4001”
                },
                “length” : 1000,
                “energyLevelGood” : 90,
                “energyLevelCritical” : 30,
                “energyLevel” : 100,
                “integrationLevel” : “TO_BE_UTILIZED”,
                “procState” : “IDLE”,
                “transportOrder” : null,
                “currentPosition” : “0,5”,
                “state” : “IDLE”
                }, {
                    “name” : “AGV2”,
                “properties” : {
                    “tcs:preferredAdapterClass” : “org.opentcs.virtualvehicle.LoopbackCommunicationAdapterFactory”,
                    “IP” : “192.168.1.101”,
                    “Port” : “4001”
                },
                “length” : 1000,
                “energyLevelGood” : 90,
                “energyLevelCritical” : 30,
                “energyLevel” : 100,
                “integrationLevel” : “TO_BE_UTILIZED”,
                “procState” : “PROCESSING_ORDER”,
                “transportOrder” : “Move-24d8eb37-1251-426b-af41-4604511ff4c9”,
                “currentPosition” : “0,0”,
                “state” : “IDLE”
            }]

    6.根据小车编号获得小车信息
      GET方法
        http://127.0.0.1:55200/v1/vehicles/{vehicleName}
        例如
        http://127.0.0.1:55200/v1/vehicles/AGV1
      返回:
        {
            “name” : “AGV1”,
            “properties” : {
            “tcs:preferredAdapterClass” :         “org.opentcs.virtualvehicle.LoopbackCommunicationAdapterFactory”,
            “IP” : “192.168.1.100”,
            “Port” : “4001”
        },
        “length” : 1000,
        “energyLevelGood” : 90,
        “energyLevelCritical” : 30,
        “energyLevel” : 100,
        “integrationLevel” : “TO_BE_UTILIZED”,
        “procState” : “IDLE”,
        “transportOrder” : null,
        “currentPosition” : “0,5”,
        “state” : “IDLE”
        }

    7.取消正在执行任务的小车
        POST方法:
            http://127.0.0.1:55200/v1/vehicles/{vehicleName}/withdrawal
            例如
            http://127.0.0.1:55200/v1/vehicles/AGV1/withdrawal
        返回:
            Successful operation

    特别注意:
    在创建订单的时候,系统会报错
    在这里插入图片描述
    将OrderHandler第165行修改成如下即可
    在这里插入图片描述

    附C# Http操作工具类

    public class HttpMethods
        {
            private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
            /// <summary>
            /// get方法请求服务器
            /// </summary>
            /// <param name="url"></param>
            /// <param name="parametersDict"></param>
            /// <param name="timeout"></param>
            /// <returns></returns>
            public static string DoGet(string url, Dictionary<string, string> parametersDict, int? timeout)
            {
                if (parametersDict != null && parametersDict.Count != 0)
                {
                    if (!url.Contains("?"))
                        url = url + "?";
                    foreach (string key in parametersDict.Keys)
                    {
                        url = url + key + "=" + parametersDict[key] + "&";
                    }
                    url = url.Substring(0, url.Length - 1);
                }
                try
                {
                    HttpWebResponse response = CreateGetHttpResponse(url, timeout, null, null);
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader sReader = new StreamReader(responseStream))
                        {
                            return sReader.ReadToEnd();
                        }
                    }
                }
                catch (Exception exp)
                {
                    return null;
                }
            }
    
    
            /// <summary>  
            /// 创建GET方式的HTTP请求  
            /// </summary>  
            /// <param name="url">请求的URL</param>  
            /// <param name="timeout">请求的超时时间</param>  
            /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
            /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
            /// <returns></returns>  
            public static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieCollection cookies)
            {
                if (string.IsNullOrEmpty(url))
                {
                    throw new ArgumentNullException("url");
                }
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.Method = "GET";
                request.UserAgent = DefaultUserAgent;
                if (!string.IsNullOrEmpty(userAgent))
                {
                    request.UserAgent = userAgent;
                }
                if (timeout.HasValue)
                {
                    request.Timeout = timeout.Value;
                }
                if (cookies != null)
                {
                    request.CookieContainer = new CookieContainer();
                    request.CookieContainer.Add(cookies);
                }
                return request.GetResponse() as HttpWebResponse;
            }
    
            /// <summary>  
            /// 创建POST方式的HTTP请求  
            /// </summary>  
            /// <param name="url">请求的URL</param>  
            /// <param name="parameters">随同请求POST的参数名称及参数值字典</param>  
            /// <param name="timeout">请求的超时时间</param>  
            /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
            /// <param name="requestEncoding">发送HTTP请求时所用的编码</param>  
            /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
            /// <returns></returns>  
            public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies, string contentType)
            {
                if (string.IsNullOrEmpty(url))
                {
                    throw new ArgumentNullException("url");
                }
                if (requestEncoding == null)
                {
                    throw new ArgumentNullException("requestEncoding");
                }
                HttpWebRequest request = null;
                //如果是发送HTTPS请求  
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    request = WebRequest.Create(url) as HttpWebRequest;
                    request.ProtocolVersion = HttpVersion.Version10;
                }
                else
                {
                    request = WebRequest.Create(url) as HttpWebRequest;
                }
                request.Method = "POST";
                request.ContentType = contentType;
    
                if (!string.IsNullOrEmpty(userAgent))
                {
                    request.UserAgent = userAgent;
                }
                else
                {
                    request.UserAgent = DefaultUserAgent;
                }
    
                if (timeout.HasValue)
                {
                    request.Timeout = timeout.Value;
                }
                if (cookies != null)
                {
                    request.CookieContainer = new CookieContainer();
                    request.CookieContainer.Add(cookies);
                }
                //如果需要POST数据  
                if (!(parameters == null || parameters.Count == 0))
                {
                    StringBuilder buffer = new StringBuilder();
                    int i = 0;
                    foreach (string key in parameters.Keys)
                    {
                        if (i > 0)
                        {
                            buffer.AppendFormat("&{0}={1}", key, parameters[key]);
                        }
                        else
                        {
                            buffer.AppendFormat("{0}={1}", key, parameters[key]);
                        }
                        i++;
                    }
                    byte[] data = requestEncoding.GetBytes(buffer.ToString());
                    using (Stream stream = request.GetRequestStream())
                    {
                        stream.Write(data, 0, data.Length);
                    }
                }
                return request.GetResponse() as HttpWebResponse;
            }
    
    
            /// <summary>  
            /// 创建POST方式的HTTP请求  
            /// </summary>  
            /// <param name="url">请求的URL</param>  
            /// <param name="parameters">随同请求POST的参数名称及参数值字典</param>  
            /// <param name="timeout">请求的超时时间</param>  
            /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
            /// <param name="requestEncoding">发送HTTP请求时所用的编码</param>  
            /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
            /// <returns></returns>  
            public static HttpWebResponse CreatePostHttpResponse(string url, string data, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies, string contentType)
            {
                if (string.IsNullOrEmpty(url))
                {
                    throw new ArgumentNullException("url");
                }
                if (requestEncoding == null)
                {
                    throw new ArgumentNullException("requestEncoding");
                }
                HttpWebRequest request = null;
                //如果是发送HTTPS请求  
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    request = WebRequest.Create(url) as HttpWebRequest;
                    request.ProtocolVersion = HttpVersion.Version10;
                }
                else
                {
                    request = WebRequest.Create(url) as HttpWebRequest;
                }
                request.Method = "POST";
                request.ContentType = contentType;
    
                if (!string.IsNullOrEmpty(userAgent))
                {
                    request.UserAgent = userAgent;
                }
                else
                {
                    request.UserAgent = DefaultUserAgent;
                }
    
                if (timeout.HasValue)
                {
                    request.Timeout = timeout.Value;
                }
                if (cookies != null)
                {
                    request.CookieContainer = new CookieContainer();
                    request.CookieContainer.Add(cookies);
                }
                //如果需要POST数据  
                if (!data.IsNullOrEmpty())
                {
                    byte[] datas = requestEncoding.GetBytes(data);
                    using (Stream stream = request.GetRequestStream())
                    {
                        stream.Write(datas, 0, data.Length);
                    }
    
                }
                return request.GetResponse() as HttpWebResponse;
            }
    
            private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                return true; //总是接受  
            }
    
    
            /// <summary>
            /// Post方法请求服务器
            /// </summary>
            /// <param name="url"></param>
            /// <param name="parametersDict"></param>
            /// <param name="timeout"></param>
            /// <returns></returns>
            public static string DoPost(string url, Dictionary<string, string> parametersDict, int? timeout)
            {
                try
                {
                    HttpWebResponse response = CreatePostHttpResponse(url, parametersDict, timeout, null, Encoding.UTF8, null, "application/x-www-form-urlencoded");
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader sReader = new StreamReader(responseStream))
                        {
                            return sReader.ReadToEnd();
                        }
                    }
                }
                catch (Exception exp)
                {
                    return null;
                }
            }
    
            /// <summary>
            /// Post方法请求服务器
            /// </summary>
            /// <param name="url"></param>
            /// <param name="parametersDict"></param>
            /// <param name="timeout"></param>
            /// <returns></returns>
            public static string DoPostJson(string url, string data, int? timeout)
            {
                try
                {
                    HttpWebResponse response = CreatePostHttpResponse(url, data, timeout, null, Encoding.UTF8, null, "application/json");
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader sReader = new StreamReader(responseStream))
                        {
                            return sReader.ReadToEnd();
                        }
                    }
                }
                catch (Exception exp)
                {
                    return null;
                }
            }
        }
    

    调用方法如下:
    获得AGV信息

     string url = "http://127.0.0.1:55200/v1/vehicles";
     string retValue = HttpMethods.DoGet(url, null, 1000);
     //json解析
    

    创建订单如下:

    string data ="{"intendedVehicle":"AGV1","destinations":[{"locationName":"Point5","operation":"MOVE","properties":[ ]}]}";;
    string orderName = "TOrder-" + DateTime.Today.ToString("yyyyMMdd") + Guid.NewGuid().ToString().Replace("-", "").ToUpper().Substring(0, 10);
    string url = "http://127.0.0.1:55200/v1/transportOrders/" + orderName;
    string str = HttpMethods.DoPostJson(url, data, 1000);
    

    预知后事如何,请听下回分解

  • 相关阅读:
    leetcode 190 Reverse Bits
    vs2010 单文档MFC 通过加载位图文件作为客户区背景
    leetcode 198 House Robber
    记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
    逆序数2 HDOJ 1394 Minimum Inversion Number
    矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
    递推DP URAL 1586 Threeprime Numbers
    递推DP URAL 1167 Bicolored Horses
    递推DP URAL 1017 Staircases
    01背包 URAL 1073 Square Country
  • 原文地址:https://www.cnblogs.com/zjwno1/p/13097328.html
Copyright © 2011-2022 走看看