HttpManager.cs 10.2 KB
using Common;
using Common.Communication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLib.BLL
{
    public class HttpManager
    {
        //http://localhost:8001/smf-core/service/store/innerBox/boxTakeAway?rfid=CN0020B
        static string baseUrl = AppConfigSetting.GetStrVal(Setting_Str.HttpServer, "http://localhost:8001/smf-core");
        static HttpClient httpClient = new HttpClient(baseUrl);
        /// <summary>
        /// 清除料箱与工单的绑定
        /// </summary>
        /// <param name="rfid"></param>
        /// <returns></returns>
        //public static bool ClearBoxBind(string rfid="")
        //{
        //    try
        //    {
        //        //if (string.IsNullOrEmpty(rfid)) return false;
        //        //HttpClient httpClient = new HttpClient(baseUrl);
        //        Dictionary<string, string> queryStr = new Dictionary<string, string>();
        //        queryStr.Add("rfid", rfid);
        //        string json = httpClient.Get("/service/store/innerBox/boxTakeAway", queryStr);
        //        RtnData rtnData = JsonHelper.DeserializeJsonToObject<RtnData>(json);
        //        LogUtil.Info($"清除料箱绑定:【{rfid}】【{json}】");
        //        if (rtnData != null)
        //        {
        //            return rtnData.code == 0;
        //        }
        //    }
        //    catch(Exception ex)
        //    {
        //        LogUtil.Error($"清除料箱绑定异常:【{rfid}】",ex);

        //    }
        //    return false;
        //}
        public static bool ClearBoxBind(string rfid,string source)
        {
            try
            {
                //if (string.IsNullOrEmpty(rfid)) return false;
                //HttpClient httpClient = new HttpClient(baseUrl);
                Dictionary<string, string> queryStr = new Dictionary<string, string>();
                queryStr.Add("rfid", rfid);
                queryStr.Add("source", source);
                string json = httpClient.Get("/service/store/innerBox/clearRfidInfo", queryStr);
                RtnData rtnData = JsonHelper.DeserializeJsonToObject<RtnData>(json);
                LogUtil.Info($"清理料箱信息:【{rfid}】【{json}】");
                if (rtnData != null)
                {
                    return rtnData.code == 0;
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error($"清理料箱信息:【{rfid}】", ex);

            }
            return false;
        }
        /// <summary>
        /// 料箱送入agv
        /// </summary>
        /// <param name="rfid"></param>
        /// <param name="boxTaskInfo"></param>
        /// <returns></returns>
        public static bool BoxToAgv(string rfid,string agvName)
        {
            try
            {
                if (string.IsNullOrEmpty(rfid)) return false;
                //HttpClient httpClient = new HttpClient(baseUrl);
                Dictionary<string, string> queryStr = new Dictionary<string, string>();
                queryStr.Add("rfid", rfid);
                string json = httpClient.Get("/service/store/innerBox/boxToAgv", queryStr);
                RtnData rtnData = JsonHelper.DeserializeJsonToObject<RtnData>(json);
                LogUtil.Info($"料箱送入agv:【{rfid}】【{agvName}】【{json}】");
                if (rtnData != null)
                {
                    return rtnData.code == 0;
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error($"料箱送入agv:【{rfid}】【{agvName}】", ex);

            }
            return false;
        }
        //public static bool GetBoxTarget(string rfid,out BoxTaskInfo boxTaskInfo)
        //{
        //    boxTaskInfo = null;
        //    try
        //    {
        //        if (string.IsNullOrEmpty(rfid)) return false;
        //        //HttpClient httpClient = new HttpClient(baseUrl);
        //        Dictionary<string, string> queryStr = new Dictionary<string, string>();
        //        queryStr.Add("rfid", rfid);
        //        string json = httpClient.Get("/service/store/innerBox/getBoxStatusInfo", queryStr);
        //        ServerData1 rtnData = JsonHelper.DeserializeJsonToObject<ServerData1>(json);
        //        LogUtil.Info($"获取料箱信息:【{rfid}】【{json}】");
        //        if (rtnData != null)
        //        {
        //            boxTaskInfo = rtnData.data;
        //            return rtnData.code == 0;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        LogUtil.Error($"获取料箱信息:【{rfid}】", ex);

        //    }
        //    return false;
        //}

        public static bool GetBoxTarget(string rfid, out BoxTaskInfo boxTaskInfo)
        {
            boxTaskInfo = null;
            try
            {
                if (string.IsNullOrEmpty(rfid)) return false;
                //HttpClient httpClient = new HttpClient(baseUrl);
                Dictionary<string, string> queryStr = new Dictionary<string, string>();
                queryStr.Add("rfid", rfid);
                string json = httpClient.Get("/service/store/innerBox/getAgvLineInfo", queryStr);
                ServerData1 rtnData = JsonHelper.DeserializeJsonToObject<ServerData1>(json);
                LogUtil.Info($"获取料箱信息:【{rfid}】【{json}】");
                if (rtnData != null)
                {
                    boxTaskInfo = rtnData.data;
                    return rtnData.code == 0;
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error($"获取料箱信息:【{rfid}】", ex);

            }
            return false;
        }
        static string Addr_GetNIOutInfo = "/service/store/innerBox/getNlOutInfo";
        public static bool getNIOutInfo(out string line)
        {
            line = "";
            try
            {
               
                //Dictionary<string, string> queryStr = new Dictionary<string, string>();
                //queryStr.Add("rfid", rfid);
                string json = httpClient.Get(Addr_GetNIOutInfo);
                ServerData4 rtnData = JsonHelper.DeserializeJsonToObject<ServerData4>(json);
                if (rtnData != null && rtnData.code==0)
                {
                    LogUtil.Debug($"获取料架单独出库信息:【{json}】");
                    line=rtnData.data.line;
                    return true;
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error($"获取料架单独出库信息", ex);

            }
            return false;
        }

        static string Addr_agvStatus = "/service/store/agvStatus/agvInfo";
        /// <summary>
        /// AGV状态上报
        /// </summary>
        /// <param name="agvStatuses"></param>
        /// <returns></returns>
        public static bool UpdateAgvStatus(List<AgvStatus> agvStatuses)
        {
            try
            {

                //Dictionary<string, string> queryStr = new Dictionary<string, string>();
                //queryStr.Add("rfid", rfid);
                string json = httpClient.Post(agvStatuses,Addr_agvStatus);
                RtnData rtnData = JsonHelper.DeserializeJsonToObject<RtnData>(json);
                if (rtnData != null && rtnData.code == 0)
                {
                    return true;
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error($"UpdateAgvStatus", ex);

            }
            return false;
        }
    }
    public class ServerData4
    {
        //{"code":0,"msg":"ok","data":"7"} 
        public int code { get; set; }

        public string msg { get; set; }

        public NIOutInfo data { get; set; }
    }
    public class NIOutInfo
    {
        public string line { get; set; }
    }
    public class ServerData1
    {
        public int code { get; set; }

        public string msg { get; set; }

        public BoxTaskInfo data { get; set; }
    }
    /// <summary>
    /// 箱子剩余数量
    /// </summary>
    public class BoxTaskInfo
    {
        public string outlet { get; set; }
        public string cid { get; set; }
        public string rfid { get; set; }
        /// <summary>
        /// 所属需求单剩余当前料仓未完成任务数
        /// </summary>
        public int remainTaskCount { get; set; } = -1;
        /// <summary>
        /// 所属需求单剩余料架任务数
        /// </summary>
        public int rackTaskCount { get; set; } = -1;
        /// <summary>
        /// 需求单号
        /// </summary>
        public string hSerial { get; set; } = "";
        /// <summary>
        /// 目的地
        /// </summary>
        public string line { get; set; } = "";
        /// <summary>
        /// 当前料箱隔口内侧已放入
        /// </summary>
        public int boxTCount { get; set; } = -1;
        public int boxBCount { get; set; } = -1;

        public string ToStr()
        {
            return $"内侧格口已有数量:{boxTCount},外侧格口已有数量;{boxBCount}; 需求单:{hSerial},剩余任务数={remainTaskCount}," +
                $"剩余料架数:{rackTaskCount},目的地:{line}";
        }
    }
    public class RtnData
    {
        //{
        //"code": 0,
        //"data": "",
        //"msg": "ok",
        //"msgKey": "smfcore.ok",
        //"okResult": true,
        //"params": []
        //}
        public int code { get; set; }
        public string data { get; set; }
        public string msg { get; set; }
    }
    public class AgvStatus
    {
        /// <summary>
        /// 小车名称
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 小车电量
        /// </summary>
        public string elec { get; set; }
        /// <summary>
        /// 小车位置
        /// </summary>
        public string loc { get; set; }
        /// <summary>
        /// 小车类型
        /// </summary>
        public int type { get; set; }
        /// <summary>
        /// 错误消息
        /// </summary>
        public string message { get; set; }
    }
}