ALineManager.cs 11.3 KB
using log4net;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OnlineStore.DeviceLibrary
{
    public class LineManager
    {

        public static bool DisLeftOutLine = false ;
        public static bool DisRightOutLine = false ;

        public static bool UseBuzzer = ConfigAppSettings.GetIntValue(Setting_Init.UseBuzzer).Equals(1);
        private static bool isInit = false;
        public static bool IsConnectServer = !ConfigAppSettings.GetValue(Setting_Init.http_server).Equals("");

        public static LineBean Line = null;
        public static Line_Config Config = null; 
        public static Dictionary<int, DeviceConfig> allConfigMap = null;
        public LineManager()
        {
        }
        public static bool  CheckEnum(Type type)
        {
            if (type.IsEnum)
            { 
                List<int> valueList = new List<int>();
                Array array = Enum.GetValues(type);
                foreach (int item in array)
                {
                    if (valueList.Contains(item))
                    {
                        LogUtil.error(  type.Name + "枚举值:" + item + "重复存在,请检查代码!程序退出。");
                        Application.Exit();
                        return false;
                        break;
                    }
                    valueList.Add(item);
                }
            }
            return true;
        }
        public static bool Init()
        {
            try
            {
                if (!isInit)
                {
                    Dictionary<int, MoveEquip_Config> moveECMap = null;
                    Dictionary<int, FeedingEquip_Config> feedingECMap = null;
                    Dictionary<int, HYEquip_Config> HYECMap = null;
                    //Dictionary<int, DischargeLine_Config> disChargeLineMap = null;

                    DeviceConfig.SubDIList = new Dictionary<int, Dictionary<string, ConfigIO>>();
                    DeviceConfig.SubDOList = new Dictionary<int, Dictionary<string, ConfigIO>>();
                    DeviceConfig.ProIOIpMap = new Dictionary<string, string>();
                    DeviceConfig.ProRFIpMap = new Dictionary<string, string>();

                    moveECMap = new Dictionary<int, MoveEquip_Config>();
                    feedingECMap = new Dictionary<int, FeedingEquip_Config>();
                    HYECMap = new Dictionary<int, HYEquip_Config>();
                    //disChargeLineMap = new Dictionary<int, DischargeLine_Config>();
                    allConfigMap = new Dictionary<int, DeviceConfig>();
                    string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
                    if (server.Equals(""))
                    {
                        IsConnectServer = false;
                    }
                    else
                    {
                        IsConnectServer = true;
                    }
                    if (!CheckEnum(typeof(LineMoveStep))){
                        return false; }
                    if (!CheckEnum(typeof(LineStatus)))
                    {
                        return false;
                    }
                    if (!CheckEnum(typeof(LineRunStatus))){
                        return false;
                    }

                    isInit = true;
                    string lineType = ConfigAppSettings.GetValue(Setting_Init.Line_Type);
                    LogUtil.info("  类型=" + lineType + ",开始加载 配置");
                    if (lineType == DeviceType.Line)
                    {
                        string appPath = Application.StartupPath;
                        string CID = ConfigAppSettings.GetValue(Setting_Init.Line_CID);
                        string linefilePath = appPath + ConfigAppSettings.GetValue(Setting_Init.ConfigPath_Line);

                        Config = CSVConfigReader.LoadLineConfig(0, CID, DeviceType.Line, linefilePath);
                        allConfigMap.Add(0, Config);
                        int moveEquipCount = ConfigAppSettings.GetIntValue(Setting_Init.Line_moveEquip_count);
                        string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_MoveEquip);
                        for (int i = 1; i <= moveEquipCount; i++)
                        {
                            string nameStr = i.ToString().PadLeft(2, '0');
                            string config = appPath + moveEquipConfig.Replace(".csv", "_" + nameStr + ".csv");
                            if (!File.Exists(config))
                            {
                                config = appPath + moveEquipConfig;
                            }
                            MoveEquip_Config moveConfig = CSVConfigReader.LoadMoveConfig(i, DeviceType.MoveEquip, config);
                            int subType = i; 
                            moveECMap.Add(i, moveConfig); 
                        }
                        foreach (int i in moveECMap.Keys)
                        {
                            int subType = i;
                            moveECMap[i].SetIO(subType);
                            allConfigMap.Add(subType, moveECMap[i]);
                        }
                        int feedingEquipCount = ConfigAppSettings.GetIntValue(Setting_Init.Line_feedingEquip_count);
                        string feedingEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_FeedingEquip);
                        for (int i = 1; i <= feedingEquipCount; i++)
                        {
                            int subType = 100 + i;
                            string config = appPath + feedingEquipConfig.Replace(".csv", "_" + i + ".csv");
                            FeedingEquip_Config moveConfig = CSVConfigReader.LoadFeedingConfig(subType, DeviceType.FeedingEquip, config);
                            moveConfig.SetIO(subType);
                            feedingECMap.Add(subType, moveConfig);
                            allConfigMap.Add(subType, moveConfig);
                        }

                        int hyEquipCount = ConfigAppSettings.GetIntValue(Setting_Init.Line_HYEquip_count);
                        string hyEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_HYEquip);
                        for (int i = 1; i <= hyEquipCount; i++)
                        {
                            int subType = 200 + i;
                            string nameStr = i.ToString().PadLeft(2, '0');

                            string config = appPath + hyEquipConfig.Replace(".csv", "_" + nameStr + ".csv");
                            if (!File.Exists(config))
                            {
                                config = appPath + hyEquipConfig;
                            }
                            HYEquip_Config moveConfig = CSVConfigReader.LoadHYConfig(subType, DeviceType.HYEquip, config);
                            moveConfig.LoadParam();
                            moveConfig.SetIO(subType);
                            HYECMap.Add(subType, moveConfig);
                            allConfigMap.Add(subType, moveConfig);
                        }
                         
                        Config.SetIO(1000);
                        Line = new LineBean(Config, moveECMap, feedingECMap, HYECMap);
                        LogUtil.info("加载 完成!");
                        return true;
                    }
                }
                else if (Line != null)
                {
                    return true;
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:", ex);
                MessageBox.Show(ex.ToString(), "加载配置错误(请检查配置)");
                Application.Exit();
            }
            return false;
        }
         
      
        public static void SaveMoveEquipConfig(MoveEquip_Config config)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;
                string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_MoveEquip);

                string configBase = appPath + moveEquipConfig;
                string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + config.Id.ToString().PadLeft(2,'0') + ".csv"); 
                allConfigMap[config.Id] = config;
                if (!File.Exists(configStr))
                {
                    LogUtil.info("复制配置文件【" + configBase + "】->【" + configStr + "】");
                    File.Copy(configBase, configStr);
                }
                bool result = CSVConfigReader.SaveConfig(configStr, config,typeof(MoveEquip_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configStr);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:",ex);
            }
        }
        public static void SaveFeedingEquipConfig(FeedingEquip_Config config)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;
                string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_FeedingEquip);

                int id = config.Id - 100;
                string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + id+ ".csv"); 
                allConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveConfig(configStr, config,typeof(FeedingEquip_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configStr);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:",ex);
            }
        }
        public static void SaveHYEquipConfig(HYEquip_Config config)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;
                string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_HYEquip);
                int id = config.Id - 200;
                string configBase = appPath + moveEquipConfig;
                string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + id + ".csv");
                if (!File.Exists(configStr))
                {
                    LogUtil.info("复制配置文件【" + configBase + "】->【" + configStr + "】");
                    File.Copy(configBase, configStr);
                }
                allConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveConfig(configStr, config,typeof(HYEquip_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configStr);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:",ex);
            }
        }

        private static List<int> trayHeightList = new List<int>() { 8, 12, 16, 24, 32, 44, 56 };
        public static List<int> GetTrayList()
        {
            return trayHeightList;
        }
    }
}