StoreManager.cs 8.6 KB
using log4net;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text; 
using System.Windows.Forms;

namespace OnlineStore.DeviceLibrary
{
    public class StoreManager
    {
        public static bool HasDisableDoorControl = ConfigAppSettings.GetIntValue(Setting_Init.HasDisableDoorControl).Equals(1);
          
        private static string api_communication = "service/store/communication";	//流水线状态通信接口
        //private static string api_nextFeeder = "service/store/nextFeeder";	// 出库站位列表切换接口

        public static string api_inventory = "rest/api/v2/mes/inventory";//获取单个或全总SMD-BOX 中的实时库存信息
        public static string api_stackOut = "rest/api/v2/mes/stackOut";//本接⼜提供物料出库功能,可⼀次性出单/多盘物料

        //        取消任务地址:   /cancelPutInTask      //参数: barcode
        private static string Addr_cancelPutInTask = "service/store/cancelPutInTask";

        public static readonly ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        public static AC_SA_BoxBean Store = null;
        public static AUTO_SA_Config Config = null;
        private static bool isInit = false;
        public static bool IsConnectServer=!ConfigAppSettings.GetValue(Setting_Init.http_server).Equals("");
        public StoreManager()
        {
        } 
        public static void CheckEnum(Type type)
        {
            if (type.IsEnum)
            {
                List<int> valueList = new List<int>();
                foreach (int item in Enum.GetValues(type))
                {
                    if (valueList.Contains(item))
                    {
                        LogUtil.error(LOGGER, type.Name + "枚举值:" + item + "重复存在,请检查代码!");
                        Application.Exit();
                        break;
                    }
                    valueList.Add(item);
                }
            }
        }
        public static AC_SA_BoxBean InitStore()
        {
            try
            {
                if (!isInit)
                {
                    string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
                    if (server.Equals(""))
                    {
                        IsConnectServer = false;
                    }
                    else
                    {
                        //IsConnectServer = true;
                    }
                    CheckEnum(typeof(StoreMoveStep));
                    CheckEnum(typeof(StoreStatus));
                    CheckEnum(typeof(StoreRunStatus));

                    isInit = true;
                    string storeType = ConfigAppSettings.GetValue(Setting_Init.Store_Type);
                    LogUtil.info(LOGGER, "配置的料仓 类型=" + storeType + ",开始加载料仓配置");
                    if (storeType == StoreType.AUTO_SA_Config)
                    {
                        string appPath = Application.StartupPath; 
                        string CID = ConfigAppSettings.GetValue(Setting_Init.Store_CID);
                        string linefilePath = appPath + ConfigAppSettings.GetValue(Setting_Init.Store_ConfigPath);

                        StoreConfig storeConfig = CSVConfigReader.LoadConfig(1, CID, StoreType.AUTO_SA_Config, linefilePath);
                        string positionConfigFile = appPath + ConfigAppSettings.GetValue(Setting_Init.Store_Position_Config);

                        if (File.Exists(positionConfigFile))
                        {
                            LogUtil.info(LOGGER, "加载位置文件:" + positionConfigFile);
                            CSVPositionReader<AutoStorePosition>.ReloadCSVFile(positionConfigFile);
                        }
                        Config = (AUTO_SA_Config)storeConfig;
                        Store = new AC_SA_BoxBean(Config);
                        Store.CID = CID;
                        LogUtil.info(LOGGER, "加载料仓完成!"); 
                        return Store;
                    }
                }
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:", ex);
                MessageBox.Show(ex.ToString(), "加载配置错误(请检查配置)");
                Application.Exit();
            }
            return Store;
        } 
        public static void UpdateBoxConfig(AUTO_SA_Config storeConfig)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;

                string configFile = appPath + ConfigAppSettings.GetValue(Setting_Init.Store_ConfigPath);
                bool result = CSVConfigReader.SaveBoxPosition(configFile, storeConfig);
                if (!result)
                {
                    LOGGER.Error("保存配置文件失败:" + configFile);
                }
                Store.Config = storeConfig;
                Store.MoveAxisConfig();
            }
            catch (Exception ex)
            {
                LOGGER.Error("出错:", ex);
            }
        }
        public static string GetPostApi(string host)
        { 
            host = GetHostUrl(host);
            return host + api_communication;
        }

        public static string GetAPI(string api, Dictionary<string, string> paramsMap = null)
        {
            string host = GetHostUrl("");
            if (paramsMap == null || paramsMap.Count <= 0)
            {
                return host + api;
            }
            string path = host + api.Trim() + "?";
            foreach (string paramName in paramsMap.Keys)
            {
                string par = System.Web.HttpUtility.UrlEncode(paramsMap[paramName], System.Text.Encoding.UTF8);
                path += paramName + "=" + par + "&";
            }
            path = path.Substring(0, path.Length - 1);
            return path;
        }

        private static string GetHostUrl(string host)
        {
            if (host == "")
            {
                host = ConfigAppSettings.GetValue(Setting_Init.http_server);
            }
            if (!host.StartsWith("http://"))
            {
                host = "http://" + host;
            }
            if (!host.EndsWith("/"))
            {
                host = host + "/";
            }
            return host;
        }



        public static string cancelPutInTask(string barcode)
        {
            string msg = "";
            try
            {
                string serverAddr = ConfigAppSettings.GetValue(Setting_Init.http_server);
                if (string.IsNullOrEmpty(serverAddr))
                {
                    LogUtil.error("cancelPutInTask   [" + barcode + "] :未找到服务器地址");
                    return msg;
                }

                Dictionary<string, string> paramMap = new Dictionary<string, string>();
                paramMap.Add("barcode", barcode);

                string server = GetAPI(Addr_cancelPutInTask, paramMap);
                DateTime startTime = DateTime.Now;
                string resultStr = HttpHelper.Post(server, "");
                LogUtil.info("cancelPutInTask    " + FormUtil.GetSpanStr(DateTime.Now - startTime) + "  【" + server + "】【" + resultStr + "】");
                //【http://192.168.21.62/myproject/service/store/cancelPutInTask?barcode=%3d1%2b0x0-7x8%3dIAC%3b6010A0243701%3b2031%3bNA%3b4000%3bVBR20BP02341%3b%23%23】
                //【{"code":0,"msg":"ok","data":true}】
                ReviceData data = JsonHelper.DeserializeJsonToObject<ReviceData>(resultStr);

                if (data == null)
                {
                    return msg = " cancelPutInTask【 " + barcode + "】 没有收到服务器反馈";
                }
                else if (data.code.Equals(0).Equals(false))
                {
                    return msg = " cancelPutInTask【 " + barcode + "】   :" + data.msg;
                }

                return "";
            }
            catch (Exception ex)
            {
                LogUtil.error(" " + ex.ToString());
            }
            return msg;
        }

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

        public string msg { get; set; }

        public object data { get; set; }
    }
    public class APIInfo
    {
        //[{"LOC":"1","RI":"A100007","QTY":1000,"PN":"pn"},{"LOC":"2","RI":"A100015","QTY":1000,"PN":"pn"}]

        public int LOC=1;
        public string  RI = "";
        public string QTY = "";
        public string PN = "";

    }
}