TransmitterSwitchInfo.h 9.0 KB

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