TransmitterSwitchInfo.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. #ifndef TRANSMITTERSWITCHINFO_H
  2. #define TRANSMITTERSWITCHINFO_H
  3. #include <QDate>
  4. #include <QString>
  5. #include <QMap>
  6. #include <QObject>
  7. #include "nlohmann/json.hpp"
  8. #define nJson nlohmann::json
  9. extern const QMap<int, QString> g_mapTrack;
  10. /**
  11. * @brief 支持的发射机类型
  12. *
  13. */
  14. const QMap<int, QString> g_DevTypeInfo = {
  15. {955, "衢州台发射机"}
  16. };
  17. /* EQM数据库中的主备 */
  18. enum class enum_DeviceMB : int
  19. {
  20. Dev_Main = 0, /* 主设备 */
  21. Dev_Backup = 1, /* 备设备 */
  22. Dev_Contingency = 2 /* 应急设备 */
  23. };
  24. enum class enum_Action : int
  25. {
  26. Act_ON = 1, /* 开机 */
  27. Act_OFF = 2, /* 关机 */
  28. };
  29. /**
  30. * @brief UI样式
  31. *
  32. */
  33. enum class enum_UIStyle
  34. {
  35. UI_Light = 0, /* 亮色 */
  36. UI_Dark = 1 /* 暗色 */
  37. };
  38. /**
  39. * @brief tExecPlanConfig表格的关键字
  40. *
  41. */
  42. enum class enum_ExecPlanConfig : int
  43. {
  44. DefaultPlan = 1, /* 执行计划 */
  45. ExecMode = 2, /* 执行模式 */
  46. IsChanged = 3 /* 是否修改 */
  47. };
  48. /**
  49. * @brief 默认计划选项
  50. *
  51. */
  52. enum class enum_DefaultPlan : int
  53. {
  54. DefaultPlan_ON = 0, /* 默认计划关 */
  55. DefaultPlan_OFF = 1 /* 默认计划开 */
  56. };
  57. /**
  58. * @brief WebAPI初始化数据
  59. *
  60. */
  61. struct InitData
  62. {
  63. QString url; /* WebAPI地址 */
  64. QString serverID; /* 服务器ID */
  65. QString serverKey; /* 服务器Key */
  66. InitData& operator=(const InitData& data)
  67. {
  68. url = data.url;
  69. serverID = data.serverID;
  70. serverKey = data.serverKey;
  71. return *this;
  72. }
  73. };
  74. /**
  75. * @brief 配置键值对
  76. * key1 : 默认执行计划开关
  77. * key2 : 执行模式
  78. *
  79. */
  80. struct ConfigData
  81. {
  82. int key; /* 键 */
  83. int value; /* 值 */
  84. QDateTime updateTime; /* 更新时间 */
  85. QString notes; /* 备注 */
  86. ConfigData() : key(0), value(0), updateTime(QDateTime::currentDateTime()), notes("") {}
  87. ConfigData(const ConfigData& data)
  88. {
  89. key = data.key;
  90. value = data.value;
  91. updateTime = data.updateTime;
  92. notes = data.notes;
  93. }
  94. ConfigData& operator=(const ConfigData& data)
  95. {
  96. key = data.key;
  97. value = data.value;
  98. updateTime = data.updateTime;
  99. notes = data.notes;
  100. return *this;
  101. }
  102. };
  103. #define CfgData ConfigDataContainer::getInstance()
  104. /**
  105. * @brief 全局键值对容器
  106. *
  107. */
  108. class ConfigDataContainer
  109. {
  110. private:
  111. ConfigDataContainer() {}
  112. ConfigDataContainer(const ConfigDataContainer& data) = delete;
  113. ConfigDataContainer& operator=(const ConfigDataContainer& data) = delete;
  114. public:
  115. /* 配置的键值对的说明 */
  116. const QMap<int, QString> KeyNotes = {
  117. {static_cast<int>(enum_ExecPlanConfig::DefaultPlan), "默认执行计划开关,0关,1开"},
  118. {static_cast<int>(enum_ExecPlanConfig::ExecMode), "执行模式,0按时刻,1按天"},
  119. {static_cast<int>(enum_ExecPlanConfig::IsChanged), "是否更新,0未修改,1修改"}
  120. };
  121. public:
  122. ~ConfigDataContainer() {}
  123. static ConfigDataContainer& getInstance()
  124. {
  125. static ConfigDataContainer data;
  126. return data;
  127. }
  128. /* 添加一个配置 */
  129. void updateConfigData(const ConfigData& data);
  130. /* 获取一个配置 */
  131. ConfigData& getConfigData(int key);
  132. /* 查找一个配置是否在不在 */
  133. bool findConfigData(int key);
  134. /* 删除一个配置 */
  135. void deleteConfigData(int key);
  136. /* 获取容器 */
  137. QMap<int, ConfigData>& getMapConfigData() { return m_mapConfigData; }
  138. private:
  139. QMap<int, ConfigData> m_mapConfigData; /* 配置信息,key是配置的键 */
  140. };
  141. /**
  142. * @brief 执行计划条目信息
  143. *
  144. */
  145. struct ExecPlanItemInfo
  146. {
  147. int ExecType; /* 执行类型,0按时刻,1按天 */
  148. int WeekDay; /* 周几,数据库里是1-7一周,周8是特殊日 */
  149. QDate date; /* 日期 */
  150. QTime execTime; /* 执行时间 */
  151. QString devName; /* 设备名称 */
  152. int actionID; /* 动作ID */
  153. QString actionName; /* 执行的动作 */
  154. ExecPlanItemInfo();
  155. ExecPlanItemInfo(const ExecPlanItemInfo& item);
  156. ExecPlanItemInfo& operator=(const ExecPlanItemInfo& item);
  157. };
  158. /**
  159. * @brief 存储一个设备类型及端口参数,即这个设备支持哪些端口,在配置页面选择设备的时候使用
  160. * 如:“衢州台发射机”支持哪些端口
  161. */
  162. struct DevTypeInfo
  163. {
  164. DevTypeInfo();
  165. ~DevTypeInfo() {}
  166. DevTypeInfo& operator=(const DevTypeInfo& devInfo);
  167. QString devTypeName; /* 设备类型名称,如:衢州台发射机,非必须的 */
  168. QMap<int, QString> devAction; /* 设备支持的动作,如开机、关机等 */
  169. QMap<enum_DeviceMB, QString> devType_MB; /* 同一中设备允许存在的个数,如主/备或其他标记方式,这里用不到 */
  170. int PTTypeCode; /* 设备类型编号,在EQM数据库中的类型,如发射机是955 */
  171. };
  172. /**
  173. * @brief 软件支持的设备类型信息
  174. *
  175. */
  176. class MapDevType
  177. {
  178. MapDevType();
  179. MapDevType(const MapDevType& devType) = delete;
  180. MapDevType& operator=(const MapDevType& devType) = delete;
  181. public:
  182. ~MapDevType() {}
  183. static MapDevType& getInstance()
  184. {
  185. static MapDevType instance;
  186. return instance;
  187. }
  188. /* 添加支持的设备类型 */
  189. void initDevType();
  190. /* 获取某一个发射机类型 */
  191. DevTypeInfo getDevType(int PTTypeCode);
  192. /* 获取设备类型信息 */
  193. QMap<int, DevTypeInfo>& getMapDevType() { return m_mapDevType; }
  194. private:
  195. QMap<int, DevTypeInfo> m_mapDevType; /* 设备类型信息,int是发射机的PTTypeCode */
  196. };
  197. #define DevTypeContainer MapDevType::getInstance()
  198. /**
  199. * @brief 配置完成后的信息,给一个类型的设备创建了名字,并存储了设备类型和参数信息
  200. */
  201. struct DeviceInfo
  202. {
  203. DeviceInfo();
  204. ~DeviceInfo() {}
  205. DeviceInfo(const DeviceInfo& devInfo);
  206. DeviceInfo& operator=(const DeviceInfo& devInfo);
  207. QString devName; /* 自定义的设备名称 */
  208. DevTypeInfo DevType; /* 该设备的类型 */
  209. // QPair<enum_DeviceMB, QString> devTypeMB; /* 该设备是主设备还是备用设备 */
  210. int DID; /* 设备ID */
  211. int DTID; /* 设备类型ID */
  212. int MPID; /* 监测点ID */
  213. int PTTypeCode; /* 端口类型编码 */
  214. int ChannelID; /* 通道ID */
  215. };
  216. class MapDevice
  217. {
  218. MapDevice();
  219. MapDevice(const MapDevice& dev) = delete;
  220. MapDevice& operator=(const MapDevice& dev) = delete;
  221. public:
  222. ~MapDevice() {}
  223. static MapDevice& getInstance()
  224. {
  225. static MapDevice instance;
  226. return instance;
  227. }
  228. /* 添加一个设备 */
  229. void addDevice(const DeviceInfo& devInfo);
  230. /* 获取一个设备 */
  231. DeviceInfo getDevice(const QString& devName);
  232. /* 查找一个设备 */
  233. bool findDevice(const QString& devName);
  234. /* 根据设备名称获取设备动作 */
  235. bool getDevAction(const QString& devName, QMap<int, QString>& devAction);
  236. /* 删除一个设备 */
  237. void deleteDevice(const QString& devName);
  238. /* 获取容器 */
  239. QMap<QString, DeviceInfo>& getMapDevice() { return m_mapDevice; }
  240. private:
  241. QMap<QString, DeviceInfo> m_mapDevice; /* 设备信息,key是设备名称 */
  242. };
  243. #define DeviceContainer MapDevice::getInstance()
  244. /**
  245. * @brief 执行计划页面的全局配置信息
  246. *
  247. */
  248. class ExecPlanGlobalConfig : public QObject
  249. {
  250. Q_OBJECT
  251. ExecPlanGlobalConfig();
  252. ExecPlanGlobalConfig(const ExecPlanGlobalConfig& config) = delete;
  253. ExecPlanGlobalConfig& operator=(const ExecPlanGlobalConfig& config) = delete;
  254. public:
  255. ~ExecPlanGlobalConfig() {}
  256. static ExecPlanGlobalConfig& getInstance()
  257. {
  258. static ExecPlanGlobalConfig config;
  259. return config;
  260. }
  261. /* 设置样式表路径 */
  262. // void setQSSPath(const QString& qssPath);
  263. /* 获取样式表路径 */
  264. QString getQSSPath();
  265. /* 换肤,修改样式表 */
  266. void setUIStyle(enum_UIStyle style);
  267. /* 获取当前UI风格 */
  268. enum_UIStyle getUIStyle() { return m_UIStyle; }
  269. signals:
  270. /* 样式表改变了 */
  271. void signal_qssChanged();
  272. /* OneIten样式表改变了 */
  273. void signal_oneItemQssChanged(const QString& qssPath);
  274. private:
  275. QString m_qssPath; /* 样式表路径 */
  276. const QString m_lightQSS = "/white"; /* 亮色样式表路径 */
  277. const QString m_darkQSS = "/black"; /* 暗色样式表路径 */
  278. enum_UIStyle m_UIStyle; /* 当前UI样式 */
  279. };
  280. #define EPConfig ExecPlanGlobalConfig::getInstance()
  281. #endif /* TRANSMITTERSWITCHINFO_H */