ALineManager.cs 11.6 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
    { 
         
        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 void 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();
                        break;
                    }
                    valueList.Add(item);
                }
            }
        }
        public static bool Init()
        {
            try
            {
                if (!isInit)
                {
                    Dictionary<int, MoveEquip_Config> moveECMap = null;
                    Dictionary<int, FeedingEquip_Config> feedingECMap = null;
                    Dictionary<int, ProvidingEquip_Config> providingECMap = 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>();
                    providingECMap = new Dictionary<int, ProvidingEquip_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;
                    }
                    CheckEnum(typeof(LineMoveStep));
                    CheckEnum(typeof(LineStatus));
                    CheckEnum(typeof(LineRunStatus));

                    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");
                            MoveEquip_Config moveConfig = CSVConfigReader.LoadMoveConfig(i,DeviceType.MoveEquip, config);
                            int subType = i;
                          //  moveConfig.SetIO(subType);
                            moveECMap.Add(i, moveConfig);
                          //  allConfigMap.Add(subType, 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 providingEquipCount = ConfigAppSettings.GetIntValue(Setting_Init.Line_providingEquip_count);
                        string providingEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_ProvidingEquip);
                        for (int i = 1; i <= providingEquipCount; i++)
                        {
                            int subType = 200 + i;
                            string config = appPath + providingEquipConfig.Replace(".csv", "_" + i + ".csv");
                            ProvidingEquip_Config moveConfig = CSVConfigReader.LoadProvidingConfig(subType,DeviceType.ProvidingEquip, config); 
                            moveConfig.SetIO(subType);
                            providingECMap.Add(subType, moveConfig);
                            allConfigMap.Add(subType, moveConfig);
                        }

                        int dislineCount = ConfigAppSettings.GetIntValue(Setting_Init.Line_dischargeLine_count);
                        string dischargeLineConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_DischargeLine);
                        for (int i = 1; i <= dislineCount; i++)
                        {
                            int subType = 300 + i;
                            string config = appPath + dischargeLineConfig.Replace(".csv", "_" + i + ".csv");
                            DischargeLine_Config moveConfig = CSVConfigReader.LoadDischargeLineConfig(subType,DeviceType.DischargeLine, config); 
                            moveConfig.SetIO(subType);
                            disChargeLineMap.Add(subType, moveConfig);
                            allConfigMap.Add(subType, moveConfig);
                        }
                        Config.SetIO(1000);
                        Line = new LineBean(Config, moveECMap, feedingECMap, providingECMap, disChargeLineMap);
                        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 configStr = appPath + moveEquipConfig.Replace(".csv", "_" + config.Id.ToString().PadLeft(2,'0') + ".csv"); 
                allConfigMap[config.Id] = config;
                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 SaveProvidingEquipConfig(ProvidingEquip_Config config)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;
                string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_ProvidingEquip);
                int id = config.Id - 200;
                string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + id + ".csv");  
                allConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveConfig(configStr, config,typeof(ProvidingEquip_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configStr);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:"+ ex);
            }
        }

        public static void SaveDischargeLineConfig(DischargeLine_Config config)
        {
            try
            {
                //位置配置到文件中
                string appPath = Application.StartupPath;
                string moveEquipConfig = ConfigAppSettings.GetValue(Setting_Init.ConfigPath_DischargeLine);
                int id = config.Id - 300;
                string configStr = appPath + moveEquipConfig.Replace(".csv", "_" + id + ".csv");
              //  disChargeLineMap[config.Id] = config;
                allConfigMap[config.Id] = config;
                bool result = CSVConfigReader.SaveConfig(configStr, config, typeof(DischargeLine_Config));
                if (!result)
                {
                    LogUtil.error("保存配置文件失败:" + configStr);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("出错:"+ ex);
            }
        }
    }
}