using HH.WCS.XiaoMi.api;
using HH.WCS.XiaoMi.core;
using HH.WCS.XiaoMi.LISTA.dispatch;
using HH.WCS.XiaoMi.process;
using HH.WCS.XiaoMi.util;
using HH.WCS.XiaoMi.wms;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using static HH.WCS.XiaoMi.api.ApiModel;
using static HH.WCS.XiaoMi.LISTA.dispatch.XMWcsHelper;
namespace HH.WCS.XiaoMi.dispatch
{
///
/// 国自调度辅助类
///
public class GZRobot
{
private static readonly HttpHelper apiHelper = new HttpHelper();
private static readonly string baseUrl = Settings.GZSeverUrl;
//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);
}
public static int CreateOrder(string taskNo, int priority, string param, string ts = "p2p") {
var msg = "";
var orderId = 0;
var data = new OrderInfo() { order_name = taskNo, priority = priority, dead_line = DateTime.Now, ts_name = ts, parameters = param };
var request = JsonConvert.SerializeObject(data);
var response = apiHelper.Post(baseUrl + "api/om/order/", request);
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;
}
}
catch (Exception ex) {
}
}
else {
msg = "[guozi-CreateOrder]创建订单失败";
Console.WriteLine(msg);
}
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;
}
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;
}
///
/// 获取交互信息
///
/// 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;
}
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;
}
///
/// 订单状态反馈
///
///
///
public static GzResult orderStatusReport(orderStatusReportParme model)
{
GzResult result = new GzResult();
AgvTaskState agv = new AgvTaskState();
if (model == null)
{
result.resultCode = 1;
result.orderID = 0;
result.msg = "返回订单状态失败,参数为空";
}
switch (model.orderStatus)
{
case "active":
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.No = model.orderName;
agv.ForkliftNo = model.agvIDList;
WCSCore.OperateAgvTaskStatus(agv);
////小米状态上报
//xiaoMiRequestApi(model);
}
result.resultCode = 0;
result.msg = "返回订单状态成功";
result.orderID = model.orderID;
LogHelper.Info("orderStatusReport 返回" + JsonConvert.SerializeObject(result), "API");
return result;
}
///
/// agv申请绕路
///
///
///
public static GzResult applyReroute(orderReroute model)
{
GzResult result = new GzResult();
try
{
var wcsTask = WCSHelper.GetTask(model.orderName);
if (wcsTask == null)
{
result.resultCode = 1;
result.msg = "订单不存在!";
return result;
}
if (model.orderType == 1)
{
//1表示是否申请绕路
var endLoc = LocationHelper.GetLoc(wcsTask.S_END_LOC);
LogHelper.Info($"applyReroute 申请是否绕路货位参数{JsonConvert.SerializeObject(endLoc)}");
if (endLoc.N_CURRENT_NUM == 0&& endLoc.S_LOCK_STATE=="入库锁")
{
result.resultCode = 0;
result.success = true;
result.msg = "目标货位已空";
return result;
}
else
{
result.resultCode = 1;
result.success = false;
result.msg = "目标货位为满";
return result;
}
}
else
{
//2表示申请目标库位
var apply = new ApplyModel() { wcsTaskCode = wcsTask.S_WORKSHOP_NO };
#region 写死测试用
if (!string.IsNullOrEmpty("HC43"))
{
result.resultCode = 0;
result.msg = "目标库位已申请";
result.orderData = "HC43";
//任务表补上
var db = new SqlHelper().GetInstance();
var task = db.Queryable().Where(a => a.S_CODE == model.orderName).First();
LogHelper.Info($"task参数======={JsonConvert.SerializeObject(task)}");
var endLoc = LocationHelper.GetLocation("HC43");
LogHelper.Info($"endLoc参数======={JsonConvert.SerializeObject(endLoc)}");
task.S_END_LOC = "HC43";
task.S_END_AREA = endLoc.S_AREA_CODE;
var res = db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA }).ExecuteCommand() > 0;
//锁住终点货位
LogHelper.Info($"task2参数======={JsonConvert.SerializeObject(task)}");
LocationHelper.LockLoc("HC43", 1);
if (!res)
{
result.resultCode = 1;
result.success = false;
result.msg = $"终点库位{task.S_END_LOC}更新失败";
}
LogHelper.Info($"result参数======={JsonConvert.SerializeObject(result)}");
return result;
}
#endregion
//var db = new SqlHelper