using System; using System.Collections.Generic; using System.IdentityModel.Protocols.WSTrust; using System.Threading.Tasks; using HH.WCS.Mobox3.AnGang.util; using HH.WCS.Mobox3.AnGang.core; using HH.WCS.Mobox3.AnGang.models; using Newtonsoft.Json; using static HH.WCS.Mobox3.AnGang.api.ApiModel; using static System.Net.WebRequestMethods; namespace HH.WCS.Mobox3.AnGang.dispatch { /// /// 国自调度辅助类 /// public class GZRobot { private static readonly HttpHelper apiHelper = new HttpHelper(); private static readonly string baseUrl = Settings.RCSApiUrl;//配置文件获取国自调度地址 //private static readonly string logName = "guozi"; public static List GetIO() { var result = apiHelper.Get(baseUrl + "api/engine/view/iostates/"); var data = JsonConvert.DeserializeObject>(result); return data.data; } public static void UpdateIOState() { var data = new { data = new List() }; var result = apiHelper.Post(baseUrl + "api/engine/tasks/iostates/", JsonConvert.SerializeObject(data)); var dataResult = JsonConvert.DeserializeObject>(result); } // DOC 1. 创建订单 WMS->RCS public static int CreateOrder(string taskNo, int priority, string param, string ts = "churuku", string created_user = "hanhe") { LogHelper.Info($"CreateOrder参数信息:taskNo:{taskNo},priority:{priority},param:{param},ts:{ts},created_user:{created_user}", "API"); var msg = ""; var orderId = 0; var data = new OrderInfo() { order_name = taskNo, priority = priority, dead_line = DateTime.Now, ts_name = ts, parameters = param, created_user = created_user }; var request = JsonConvert.SerializeObject(data); var response = apiHelper.Post(baseUrl + "api/om/order/", request); LogHelper.Info($"CreateOrder:url:{baseUrl}api/om/order/,request:{request}", "API"); msg = $"[guozi-CreateOrder] request={request} response={response}"; Console.WriteLine(msg); if (response != "") { try { var dataResult = JsonConvert.DeserializeObject>(response); // 原代码部分 //if (dataResult.code == 0) { // orderId = dataResult.data[0].in_order_id; //} // 尊重文档的版本 // 返回参数中,code目前不再使用,可通过msg字段判断是否成功,如果msg为”success”则表示成功,否则为报错信息或不存在。http code为422时候的报错为系统报错,其中的msg无法全部获取。 // SELFNOTE: 直接调用HttpHelper.Post方法,无法获取header,暂时不考虑 if (dataResult.msg == "success") { orderId = dataResult.data[0].in_order_id; } } catch (Exception ex) { } } else { msg = "[guozi-CreateOrder]创建订单失败"; Console.WriteLine(msg); LogHelper.Info($"创建订单失败", "API"); } return orderId; } public static bool CancelOrder(int orderId) { bool result = false; string msg = ""; var request = new CancelOrderInfo() { order_list = new List(orderId) }; var response = apiHelper.Post(baseUrl + "api/om/order/cancel/", JsonConvert.SerializeObject(request)); msg = $"[guozi-CancelOrder] request={request};response={response}"; Console.WriteLine(msg); if (response != "") { var dataResult = JsonConvert.DeserializeObject>(response); if (dataResult.code == 0) { result = true; } } else { msg = "[guozi-CancelOrder]取消订单失败"; Console.WriteLine(msg); } return result; } // DOC 2. 取消订单 WMS->RCS public static bool CancelGZOrder(int orderId) { bool result = false; string msg = ""; List requests = new List(); var request = new CancelGZOrderInfo() { order_id = orderId, order_command_type_id = 2 }; requests.Add(request); var response = apiHelper.Put(baseUrl + "api/om/order/order-command/", JsonConvert.SerializeObject(requests)); msg = $"[guozi-CancelOrder] request={requests};response={response}"; if (response != "") { var dataResult = JsonConvert.DeserializeObject(response); // 原代码版本 //if (dataResult.code == 0) { // msg = "[guozi-CancelOrder]取消订单成功"; // Console.WriteLine(msg); // result = true; // return result; //} // 尊重文档的版本 if (dataResult.msg == "success") { // 目前只取消一个任务,成功无需再检查success_list和error_list Console.WriteLine("[guozi-CancelOrder]取消订单成功"); result = true; return result; } } else { msg = "[guozi-CancelOrder]取消订单失败"; Console.WriteLine(msg); } return result; } // DOC 3. 订单状态推送 RCS->WMS /// /// 订单状态反馈 /// /// public static GzResult orderStatusReport(orderStatusReportParme model) { LogHelper.Info("RCS国自AGV任务状态回报:" + JsonConvert.SerializeObject(model), "HosttoagvTask"); GzResult result = new GzResult(); AgvTaskState agv = new AgvTaskState(); if (model == null) { result.resultCode = 1; result.orderID = model.orderID; result.msg = "返回订单状态失败"; } switch (model.orderStatus) { case "active": agv.state = 1; break; case "waiting": agv.state = 1; break; case "source_finish": //取货完成 agv.state = 4; break; case "dest_finish": //卸货完成 agv.state = 6; break; case "finish": agv.state = 2; break; case "manually_finish": agv.state = 2; break; case "cancel_finish": agv.state = 7; break; case "error": agv.state = 7; break; default: agv.state = 0; break; } if (agv.state != 0) { agv.task_no = model.orderName; agv.forklift_no = model.agvIDList; WCSCore.OperateAgvTaskStatus(agv); } else { result.resultCode = 2; result.orderID = model.orderID; result.msg = "反馈订单状态失败,orderStatus参数不正确"; LogHelper.Info(result.msg, "API"); return result; } result.resultCode = 0; result.msg = "返回订单状态成功"; result.orderID = model.orderID; LogHelper.Info("orderStatusReport返回信息" + JsonConvert.SerializeObject(result), "API"); return result; } public class CancelGZOrderInfo { public int order_id { get; set; } public int order_command_type_id { get; set; } } public static QueryOrderResult QueryOrder(int id) { // var result = new QueryOrderResult() { agv_list = new List { 0 } }; string msg = ""; var response = apiHelper.Get(baseUrl + $"/api/om/order/{id}/"); msg = $"[guozi-QueryOrderResult] request={id};response={response}"; Console.WriteLine(msg); if (response != "") { var data = JsonConvert.DeserializeObject>(response); result = data.data[0]; } else { msg = "[guozi-QueryOrderResult]查询订单信息失败"; Console.WriteLine(msg); } return result; } // DOC 6. 交互表查询 /// /// 获取交互信息 /// /// 1任务状态 2开门或交管 3目的点 /// /// public static List QueryInteractInfo(int typeId, string status = "active") { //string aaa = "{\"app_name\": \"Gouzi client\", \"version\": \"1.0.0\", \"code\": 0, \"msg\": \"success\", \"data\": [{\"interaction_info_id\": 233, \"interaction_info_name\": \"TN2012030001\", \"interaction_info_desp\": null, \"interaction_info_type_id\": 3, \"value_json\": {\"state\": \"4\"}, \"info_status\": \"active\", \"return_value\": null}]}"; //var data = JsonConvert.DeserializeObject>(aaa); var list = new List(); string msg = ""; var result = apiHelper.Get(baseUrl + $"api/om/interaction_info/find_by_type/?type_id={typeId}&info_status={status}"); if (!string.IsNullOrEmpty(result)) { Console.WriteLine(result); // {"app_name": "Gouzi client", "version": "1.0.0", "code": 0, "msg": "success", "data": [{"interaction_info_id": 230, "interaction_info_name": "2", "interaction_info_desp": null, "interaction_info_type_id": 3, "value_json": {"state": "4"}, "info_status": "active", "return_value": null}, {"interaction_info_id": 231, "interaction_info_name": "2", "interaction_info_desp": null, "interaction_info_type_id": 3, "value_json": {"state": "6"}, "info_status": "active", "return_value": null}, {"interaction_info_id": 232, "interaction_info_name": "2", "interaction_info_desp": null, "interaction_info_type_id": 3, "value_json": {"state": "2"}, "info_status": "active", "return_value": null}, {"interaction_info_id": 233, "interaction_info_name": "TN2012030001", "interaction_info_desp": null, "interaction_info_type_id": 3, "value_json": {"state": "4"}, "info_status": "active", "return_value": null}]} try { var data = JsonConvert.DeserializeObject>(result); if (data.data != null) { list = data.data; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } else { msg = "[guozi-QueryInteractInfo]读取交互信息失败"; Console.WriteLine(msg); } return list; } // DOC 6. 交互表查询(更新终点货位) public static bool UpdateInteractInfo(UpdateInteractInfo interactInfo) { string msg = ""; var result = false; var request = JsonConvert.SerializeObject(interactInfo); var response = apiHelper.Post(baseUrl + "api/om/interaction_info/update/", request); msg = $"[mes-UpdateInteractInfo] request={request};response={response}"; if (response != "") { var dataResult = JsonConvert.DeserializeObject>(response); result = dataResult.code == 0; } else { msg = "[guozi-UpdateInteractInfo]更新交互信息失败"; Console.WriteLine(msg); } return result; } // DOC 5. 称重信息查询 public static List CustomBuf() { var res = new List(); string msg = ""; var result = apiHelper.Get(baseUrl + $"/api/engine/agvs/custom-buf/"); if (!string.IsNullOrEmpty(result)) { Console.WriteLine(result); try { var data = JsonConvert.DeserializeObject>(result); if (data.data != null) { res = data.data; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } else { msg = "[guozi-CustomBuf]读取交互信息失败"; Console.WriteLine(msg); } return res; } } public class CustomData { public string agv_id { get; set; } public string parameter_varchar200_up { get; set; } public string parameter_varchar200_down { get; set; } } public class gzResult { public string app_name { get; set; } public string version { get; set; } public int code { get; set; } public string msg { get; set; } public List data { get; set; } } public class IOState { public int io_id { get; set; } public string io_name { get; set; } public string io_type_id { get; set; } public string io_type { get; set; } public int io_status_id { get; set; } public string io_status_type { get; set; } public string parameter_definition_int4_1 { get; set; } public int io_value_int4_1 { get; set; } public string parameter_definition_int4_2 { get; set; } public int io_value_int4_2 { get; set; } public string parameter_definition_int4_3 { get; set; } public int io_value_int4_3 { get; set; } public string parameter_definition_int4_4 { get; set; } public int io_value_int4_4 { get; set; } public string parameter_definition_json { get; set; } public string io_value_json { get; set; } } public class IOSateInfo { public int io_id { get; set; } public int io_status_id { get; set; } public int io_value_int4_1 { get; set; } public int io_value_int4_2 { get; set; } public int io_value_int4_3 { get; set; } public int io_value_int4_4 { get; set; } public string io_value_json { get; set; } } public class IOStatesInfoResult { public List success_list { get; set; } public List error_list { get; set; } public class ResultInfo { public int io_id { get; set; } } } public class OrderInfo { public string order_name { get; set; } public int priority { get; set; } public DateTime dead_line { get; set; } public string ts_name { get; set; } public string parameters { get; set; }//{\"dock\":1} public string created_user { get; set; } } public class OrderInfoResult { public int in_order_id { get; set; } } public class CancelOrderInfo { public List order_list { get; set; } } public class CancelOrderInfoResult { public List success_list { get; set; } public List error_list { get; set; } public class ResultInfo { public int order_id { get; set; } } } public class cancle { public List success_list { get; set; } public List error_list { get; set; } } public class success_list { public int order_id { get; set; } } public class error_list { } public class CancelGZOrderResult { public string app_name { get; set; } public string version { get; set; } public int code { get; set; } public string msg { get; set; } public cancle data { get; set; } public List success_list { get; set; } public List error_list { get; set; } } public class QueryOrderResult { public int order_id { get; set; } public string order_name { get; set; } public int priority { get; set; } public DateTime dead_line { get; set; } public string ts_id { get; set; } public string parameters { get; set; }//{"TN_LocationName":"3-2-B", "PalletType":1}", public string trigger { get; set; } public string command { get; set; } public string status { get; set; } public List agv_list { get; set; } public string current_task { get; set; } public string current_dest { get; set; } public string current_opt { get; set; } public string current_omi { get; set; } public DateTime create_time { get; set; } public DateTime? active_time { get; set; } public DateTime? finished_time { get; set; } public DateTime? cancel_time { get; set; } public string response_timespan { get; set; } public string execute_timespa { get; set; } public string total_timespan { get; set; } } public class InteractInfoResult { public int interaction_info_id { get; set; } public string interaction_info_name { get; set; } public string interaction_info_desp { get; set; } public int interaction_info_type_id { get; set; } public object value_json { get; set; }//{"dock": 1}, public string info_status { get; set; } public string return_value { get; set; } } public class UpdateInteractInfo { public int interaction_info_id { get; set; } public string type_name { get; set; } = "GET_DST"; public string info_status { get; set; } public string return_value { get; set; } = ""; } public class interaction_state { public string state { get; set; } } public class interaction_door { public string door { get; set; } } public class interaction_bit { public string order { get; set; } } }