kazelee
2025-05-27 49efcc39ef399f8f3b170f6b06ffc2177643f1b2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
using System;
using System.Collections.Generic;
using System.IO;
 
using HH.WCS.Mobox3.DSZSH.util;
 
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
 
namespace HH.WCS.Mobox3.DSZSH {
    public class Settings
    {
        public static string WebApiUrl { get; set; }
        public static string NdcApiUrl { get; set; }
        public static string SqlServer { get; set; }
        public static string TcpServerIp { get; set; }
        public static int TcpServerPort { get; set; }
        public static List<Config.Area> Areas { get; set; } = new List<Config.Area>();
        public static List<Config.Task> Tasks { get; set; } = new List<Config.Task>();
        public static List<Config.ProductionLine> ProductionLines { get; set; } = new List<Config.ProductionLine>();
        public static List<Config.ProdAgvSite> ProdAgvSites { get; set; } = new List<Config.ProdAgvSite>();
        /// <summary>
        /// 库区字典(加载后就不变)
        /// </summary>
        public static Dictionary<string, List<string>> AreaMap { get; set; } = new Dictionary<string, List<string>>();
 
        /// <summary>
        /// 任务字典(加载后就不变)
        /// </summary>
        public static Dictionary<string, Config.Task> TaskMap { get; set; } = new Dictionary<string, Config.Task>();
 
        public static Dictionary<string, int> AgvSite_ProdLineCodeMap { get; set; } = new Dictionary<string, int>();
 
        public static void Init() {
            // 加载配置文件
            LoadJson();
 
            // 针对 Areas 进行转换:将 Config 的 List 加载到 Dict 中
            LoadAreas();
 
            // 针对 Tasks 进行转换
            LoadTasks();
        }
 
        private static void LoadJson() {
            LogHelper.Info("加载配置文件信息 开始");
            // JSON 文件路径
            string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "./config/config.json");
 
            try {
                // 读取 JSON 文件内容
                string jsonContent = File.ReadAllText(filePath);
 
                // 反序列化为 Config 对象
                var root = JsonConvert.DeserializeObject<Config.Root>(jsonContent);
 
                WebApiUrl = root.WebApiUrl;
                NdcApiUrl = root.NdcApiUrl;
                SqlServer = root.SqlServer;
                TcpServerIp = root.TcpServerIp;
                TcpServerPort = root.TcpServerPort;
                Areas = root.Areas;
                Tasks = root.Tasks;
                ProductionLines = root.ProductionLines;
 
                ProdAgvSites = root.ProdAgvSite;
                foreach (var item in ProdAgvSites) {
                    AgvSite_ProdLineCodeMap.Add(item.Code, item.ProdId);
                }
 
            }   
            catch (FileNotFoundException) {
                LogHelper.Info("JSON 文件未找到");
            }
            catch (JsonException ex) {
                LogHelper.Info($"JSON 解析错误: {ex.Message}");
            }
            catch (Exception ex) {
                LogHelper.Info($"发生错误: {ex.Message}");
            }
            LogHelper.Info("加载配置文件信息 完成");
        }
 
        private static void LoadAreas() {
            foreach (var area in Areas) {
                AreaMap.Add(area.Name, area.Codes);
            }
        }
 
        private static void LoadTasks() {
            foreach (var task in Tasks) {
                TaskMap.Add(task.Name, task);
            }
        }
 
        private static void LoadProdLines() {
            //var db = new SqlHelper<object>().GetInstance();
            //for (int  i = 0;  i < ProductionLines.Count;  i++) {
            //    var line = ProductionLines[i];
            //    // 通过OnLoc OffLoc找到AGVsite然后写入字典
            //}
        }
 
    }
 
    // [Convert JSON to C# Classes Online - Json2CSharp Toolkit](https://json2csharp.com/)
 
    public class Config {
 
        // Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
        public class Area {
            public string Name { get; set; }
            public List<string> Codes { get; set; }
        }
 
        public class ProdAgvSite {
            public string Code { get; set; }
            public int ProdId { get; set; }
        }
 
        public class ProductionLine {
            public string Id { get; set; }
            public string Name { get; set; }
            public string PlcIp { get; set; }
            public int PlcPort { get; set; }
            public int SlaveId { get; set; }
            public List<string> OnLoc { get; set; }
            public List<string> OffLoc { get; set; }
        }
 
        public class Root {
            public string WebApiUrl { get; set; }
            public string NdcApiUrl { get; set; }
            public string SqlServer { get; set; }
            public string TcpServerIp { get; set; }
            public int TcpServerPort { get; set; }
            public List<Area> Areas { get; set; }
            public List<Task> Tasks { get; set; }
            public List<ProductionLine> ProductionLines { get; set; }
            public List<ProdAgvSite> ProdAgvSite { get; set; }
        }
 
        public class Task {
            public string Name { get; set; }
            public List<string> StartAreas { get; set; }
            public List<string> EndAreas { get; set; }
        }
 
 
    }
 
    public class AreaName {
        public const string 包装区 = "包装区";
        public const string 操作区 = "操作区";
 
        public const string 空托存放区 = "空托存放区";
 
        public const string 货架区 = "货架区";
        public const string 空箱存放区 = "空箱存放区";
        public const string 满托存放区 = "满托存放区";
        public const string 满箱存放区 = "满箱存放区";
 
        public const string 人工_AGV接驳区 = "人工-AGV接驳区";
        public const string 空托盘接驳区 = "空托盘接驳区";
        public const string 空箱接驳区 = "空箱接驳区";
    }
 
    public class TaskName {
        public const string 好运箱_满箱下线入库 = "好运箱-满箱下线入库";
        public const string 好运箱_空箱上线 = "好运箱-空箱上线";
        public const string 好运箱_空箱入库 = "好运箱-空箱入库";
        public const string 好运箱_空箱绑定 = "好运箱-空箱绑定";
        public const string 成品胶出库 = "成品胶出库";
        public const string 托盘_满托下线入库 = "托盘-满托下线入库";
        public const string 托盘_空托上线 = "托盘-空托上线";
        public const string 托盘_空托入库 = "托盘-空托入库";
        public const string 托盘_空托绑定 = "托盘-空托绑定";
        public const string 抽检_不合格移库 = "抽检-不合格移库";
        public const string 抽检_出库 = "抽检-出库";
        public const string 抽检_合格回库 = "抽检-合格回库";
        public const string 移库 = "移库";
        public const string 尾箱回库 = "尾箱回库";
 
    }
 
}