TransmitterSwitchInfo.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  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. enum class enum_OnOff : int
  18. {
  19. Off = 0, /* 关机 */
  20. On = 1 /* 开机 */
  21. };
  22. const QMap<int, QString> g_ActionName
  23. {
  24. {static_cast<int>(enum_OnOff::On), "开机"},
  25. {static_cast<int>(enum_OnOff::Off), "关机"}
  26. };
  27. /* EQM数据库中的主备 */
  28. enum class enum_DeviceMB : int
  29. {
  30. Dev_Main = 0, /* 主设备 */
  31. Dev_Backup = 1, /* 备设备 */
  32. Dev_Contingency = 2 /* 应急设备 */
  33. };
  34. enum class enum_Action : int
  35. {
  36. Act_ON = 1, /* 开机 */
  37. Act_OFF = 2, /* 关机 */
  38. };
  39. /**
  40. * @brief tExecPlanConfig表格的关键字
  41. *
  42. */
  43. enum class enum_ExecPlanConfig : int
  44. {
  45. OpenPlan = 1, /* 执行计划 */
  46. ExecMode = 2, /* 执行模式 */
  47. IsChanged = 3 /* 是否修改 */
  48. };
  49. /**
  50. * @brief 默认计划选项
  51. *
  52. */
  53. enum class enum_DefaultPlan : int
  54. {
  55. DefaultPlan_ON = 0, /* 默认计划关 */
  56. DefaultPlan_OFF = 1 /* 默认计划开 */
  57. };
  58. /**
  59. * @brief 周几枚举
  60. *
  61. */
  62. enum class enum_WeekDay : int
  63. {
  64. WeekDay_Mon = 1, /* 周一 */
  65. WeekDay_Tue = 2, /* 周二 */
  66. WeekDay_Wed = 3, /* 周三 */
  67. WeekDay_Thu = 4, /* 周四 */
  68. WeekDay_Fri = 5, /* 周五 */
  69. WeekDay_Sat = 6, /* 周六 */
  70. WeekDay_Sun = 7, /* 周日 */
  71. WeekDay_Special = 8 /* 特殊日 */
  72. };
  73. /**
  74. * @brief 用户权限枚举
  75. *
  76. */
  77. enum class eUserPermission : int
  78. {
  79. User_Administrator = 0, /* 管理员 */
  80. User_Normal = 1, /* 普通用户 */
  81. User_IsESM8C = 5 /* ESM8C上位机使用 */
  82. };
  83. /**
  84. * @brief WebAPI初始化数据
  85. * 说明:
  86. * 1、userPermission 0-3 表示用户权限,4表示WebAPI地址,,5表示是ESM8C上位机使用,传入的是MQTT地址信息
  87. * url WebAPI地址或MQTT地址
  88. * serverID 服务器ID或MQTT端口
  89. *
  90. */
  91. struct InitData
  92. {
  93. int userPermission = 0; /* 用户权限,0管理员,1普通用户 */
  94. QString url; /* WebAPI地址 */
  95. QString serverID; /* 服务器ID */
  96. QString serverKey; /* 服务器Key */
  97. InitData& operator=(const InitData& data)
  98. {
  99. userPermission = data.userPermission;
  100. url = data.url;
  101. serverID = data.serverID;
  102. serverKey = data.serverKey;
  103. return *this;
  104. }
  105. };
  106. /**
  107. * @brief 配置键值对
  108. * key1 : 默认执行计划开关
  109. * key2 : 执行模式
  110. *
  111. */
  112. struct ConfigData
  113. {
  114. int key; /* 键 */
  115. int value; /* 值 */
  116. QDateTime updateTime; /* 更新时间 */
  117. QString notes; /* 备注 */
  118. ConfigData() : key(0), value(0), updateTime(QDateTime::currentDateTime()), notes("") {}
  119. ConfigData(const ConfigData& data)
  120. {
  121. key = data.key;
  122. value = data.value;
  123. updateTime = data.updateTime;
  124. notes = data.notes;
  125. }
  126. ConfigData& operator=(const ConfigData& data)
  127. {
  128. key = data.key;
  129. value = data.value;
  130. updateTime = data.updateTime;
  131. notes = data.notes;
  132. return *this;
  133. }
  134. };
  135. #define CfgData ConfigDataContainer::getInstance()
  136. /**
  137. * @brief 全局键值对容器
  138. *
  139. */
  140. class ConfigDataContainer
  141. {
  142. private:
  143. ConfigDataContainer() {}
  144. ConfigDataContainer(const ConfigDataContainer& data) = delete;
  145. ConfigDataContainer& operator=(const ConfigDataContainer& data) = delete;
  146. public:
  147. /* 配置的键值对的说明 */
  148. const QMap<int, QString> KeyNotes = {
  149. {static_cast<int>(enum_ExecPlanConfig::OpenPlan), "默认执行计划开关,0关,1开"},
  150. {static_cast<int>(enum_ExecPlanConfig::ExecMode), "执行模式,0按时刻,1按天"},
  151. {static_cast<int>(enum_ExecPlanConfig::IsChanged), "是否更新,0未修改,1修改"}
  152. };
  153. public:
  154. ~ConfigDataContainer() {}
  155. static ConfigDataContainer& getInstance()
  156. {
  157. static ConfigDataContainer data;
  158. return data;
  159. }
  160. /* 添加一个配置 */
  161. void updateConfigData(const ConfigData& data);
  162. /* 获取一个配置 */
  163. ConfigData& getConfigData(int key);
  164. /* 查找一个配置是否在不在 */
  165. bool findConfigData(int key);
  166. /* 删除一个配置 */
  167. void deleteConfigData(int key);
  168. /* 获取容器 */
  169. QMap<int, ConfigData>& getMapConfigData() { return m_mapConfigData; }
  170. private:
  171. QMap<int, ConfigData> m_mapConfigData; /* 配置信息,key是配置的键 */
  172. };
  173. /**
  174. * @brief 执行计划条目信息
  175. *
  176. */
  177. struct OnePlanItemInfo
  178. {
  179. int ChannelID; /* 频率ID */
  180. QString ChannelName; /* 频率名称 */
  181. enum_WeekDay onWeekDay; /* 周几,数据库里是1-7一周,周8是特殊日 */
  182. QDateTime onDateTime; /* 时间和日期 */
  183. enum_WeekDay offWeekDay; /* 周几,数据库里是1-7一周,周8是特殊日 */
  184. QDateTime offDateTime; /* 时间和日期 */
  185. OnePlanItemInfo();
  186. OnePlanItemInfo(const OnePlanItemInfo& item);
  187. OnePlanItemInfo& operator=(const OnePlanItemInfo& item);
  188. };
  189. /**
  190. * @brief 频率信息
  191. *
  192. */
  193. struct ChannelInfo
  194. {
  195. int ChannelID = -1; /* 通道ID */
  196. QString ChannelName; /* 通道名称 */
  197. ChannelInfo() {}
  198. ChannelInfo(const ChannelInfo& channel);
  199. ChannelInfo& operator=(const ChannelInfo& channel);
  200. };
  201. #define ChnContainer MapChannel::getInstance()
  202. class MapChannel
  203. {
  204. MapChannel() {}
  205. MapChannel(const MapChannel& channel) = delete;
  206. MapChannel& operator=(const MapChannel& channel) = delete;
  207. public:
  208. ~MapChannel() {}
  209. static MapChannel& getInstance()
  210. {
  211. static MapChannel instance;
  212. return instance;
  213. }
  214. /* 添加一个频率 */
  215. void addChannel(const ChannelInfo& channelInfo);
  216. /* 获取一个频率 */
  217. ChannelInfo getChannel(int channelID);
  218. /* 获取容器 */
  219. QMap<int, ChannelInfo>& getMapChannel() { return m_mapChannel; }
  220. /* 删除除了设置频率外的其他频率信息 */
  221. void deleteOtherChannel(int channelID);
  222. /* 清空所有的频率 */
  223. void clearAllChannel() { m_mapChannel.clear(); }
  224. private:
  225. QMap<int, ChannelInfo> m_mapChannel; /* 频率信息,key是通道ID */
  226. };
  227. /**
  228. * @brief 存储一个设备类型及端口参数,即这个设备支持哪些端口,在配置页面选择设备的时候使用
  229. * 如:“衢州台发射机”支持哪些端口
  230. */
  231. struct DevTypeInfo
  232. {
  233. DevTypeInfo();
  234. ~DevTypeInfo() {}
  235. DevTypeInfo& operator=(const DevTypeInfo& devInfo);
  236. QString devTypeName; /* 设备类型名称,如:衢州台发射机,非必须的 */
  237. QMap<int, QString> devAction; /* 设备支持的动作,如开机、关机等 */
  238. QMap<enum_DeviceMB, QString> devType_MB; /* 同一中设备允许存在的个数,如主/备或其他标记方式,这里用不到 */
  239. int PTTypeCode; /* 设备类型编号,在EQM数据库中的类型,如发射机是955 */
  240. };
  241. #define DevTypeContainer MapDevType::getInstance()
  242. /**
  243. * @brief 软件支持的设备类型信息
  244. *
  245. */
  246. class MapDevType
  247. {
  248. MapDevType();
  249. MapDevType(const MapDevType& devType) = delete;
  250. MapDevType& operator=(const MapDevType& devType) = delete;
  251. public:
  252. ~MapDevType() {}
  253. static MapDevType& getInstance()
  254. {
  255. static MapDevType instance;
  256. return instance;
  257. }
  258. /* 添加支持的设备类型 */
  259. void initDevType();
  260. /* 获取某一个发射机类型 */
  261. DevTypeInfo getDevType(int PTTypeCode);
  262. /* 获取设备类型信息 */
  263. QMap<int, DevTypeInfo>& getMapDevType() { return m_mapDevType; }
  264. private:
  265. QMap<int, DevTypeInfo> m_mapDevType; /* 设备类型信息,int是发射机的PTTypeCode */
  266. };
  267. /**
  268. * @brief 配置完成后的信息,给一个类型的设备创建了名字,并存储了设备类型和参数信息
  269. */
  270. struct DeviceInfo
  271. {
  272. DeviceInfo();
  273. ~DeviceInfo() {}
  274. DeviceInfo(const DeviceInfo& devInfo);
  275. DeviceInfo& operator=(const DeviceInfo& devInfo);
  276. QString devName; /* 自定义的设备名称 */
  277. DevTypeInfo DevType; /* 该设备的类型 */
  278. // QPair<enum_DeviceMB, QString> devTypeMB; /* 该设备是主设备还是备用设备 */
  279. int DID; /* 设备ID */
  280. int DTID; /* 设备类型ID */
  281. int MPID; /* 监测点ID */
  282. int PTTypeCode; /* 端口类型编码 */
  283. int ChannelID; /* 通道ID */
  284. };
  285. #define DeviceContainer MapDevice::getInstance()
  286. class MapDevice
  287. {
  288. MapDevice();
  289. MapDevice(const MapDevice& dev) = delete;
  290. MapDevice& operator=(const MapDevice& dev) = delete;
  291. public:
  292. ~MapDevice() {}
  293. static MapDevice& getInstance()
  294. {
  295. static MapDevice instance;
  296. return instance;
  297. }
  298. /* 添加一个设备 */
  299. void addDevice(const DeviceInfo& devInfo);
  300. /* 获取一个设备 */
  301. DeviceInfo getDevice(const QString& devName);
  302. /* 查找一个设备 */
  303. bool findDevice(const QString& devName);
  304. /* 根据设备名称获取设备动作 */
  305. bool getDevAction(const QString& devName, QMap<int, QString>& devAction);
  306. /* 删除一个设备 */
  307. void deleteDevice(const QString& devName);
  308. /* 获取容器 */
  309. QMap<QString, DeviceInfo>& getMapDevice() { return m_mapDevice; }
  310. private:
  311. QMap<QString, DeviceInfo> m_mapDevice; /* 设备信息,key是设备名称 */
  312. };
  313. /**
  314. * @brief 模版结构体
  315. *
  316. */
  317. struct OneTemplateInfo
  318. {
  319. ChannelInfo channelInfo; /* 频率信息 */
  320. QString templateName; /* 模版名称 */
  321. OneTemplateInfo() : channelInfo(), templateName("") {}
  322. OneTemplateInfo(const OneTemplateInfo& info);
  323. OneTemplateInfo& operator=(const OneTemplateInfo& info);
  324. bool operator<(const OneTemplateInfo& info) const;
  325. bool operator==(const OneTemplateInfo& info) const;
  326. };
  327. /**
  328. * @brief 用于传输执行计划相关的信息
  329. *
  330. */
  331. struct ExecPlanInfo
  332. {
  333. int ChannelID = -1; /* 频率ID */
  334. QString ChannelName; /* 频率名称 */
  335. QString DatabasePath; /* 数据库路径 */
  336. ExecPlanInfo& operator=(const ExecPlanInfo& info)
  337. {
  338. ChannelID = info.ChannelID;
  339. ChannelName = info.ChannelName;
  340. DatabasePath = info.DatabasePath;
  341. return *this;
  342. }
  343. };
  344. /**
  345. * @brief 页面的其他配置信息
  346. *
  347. */
  348. struct ExecPlanConfig
  349. {
  350. int isUsingPlan; /* 是否使用执行计划,0不使用,1使用 */
  351. int execMdoe; /* 执行模式,0按时刻,1按天 */
  352. };
  353. /**
  354. * @brief 全局信息,主要是一些全局标志位
  355. *
  356. */
  357. #define GInfo GlobalInfo::getInstance()
  358. class GlobalInfo
  359. {
  360. private:
  361. GlobalInfo();
  362. GlobalInfo(const GlobalInfo& info) = delete;
  363. GlobalInfo& operator=(const GlobalInfo& info) = delete;
  364. public:
  365. static GlobalInfo& getInstance()
  366. {
  367. static GlobalInfo instance;
  368. return instance;
  369. }
  370. ~GlobalInfo() {}
  371. /* 设置单频率模式 */
  372. void setOneFrequency(bool oneFrequency) { m_oneFrequency = oneFrequency; }
  373. /* 获取单频率模式 */
  374. bool isOneFrequency() const { return m_oneFrequency; }
  375. /* 设置是否使用在线数据库 */
  376. void setOnlineDB(bool isOnlineDB) { m_isOnlineDB = isOnlineDB; }
  377. /* 获取是否使用在线数据库 */
  378. bool isOnlineDB() const { return m_isOnlineDB; }
  379. /* 设置频率信息 */
  380. void setChannelInfo(const ChannelInfo& channel) { channelInfo = channel; }
  381. /* 获取频率信息 */
  382. ChannelInfo getChannelInfo() const { return channelInfo; }
  383. /* 设置数据库路径 */
  384. void setDatabasePath(const QString& path) { DatabasePath = path; }
  385. /* 获取数据库路径 */
  386. QString getDatabasePath() const { return DatabasePath; }
  387. /* 设置权限 */
  388. void setUserPermission(eUserPermission permission) { m_userPermission = permission; }
  389. /* 获取权限 */
  390. eUserPermission getUserPermission() const { return m_userPermission; }
  391. private:
  392. bool m_oneFrequency = false; /* 单频率模式 */
  393. bool m_isOnlineDB = true; /* 是否在线数据库 */
  394. eUserPermission m_userPermission = eUserPermission::User_Administrator; /* 用户权限,默认普通用户 */
  395. ChannelInfo channelInfo; /* 频率信息 */
  396. QString DatabasePath; /* 数据库路径 */
  397. };
  398. #endif /* TRANSMITTERSWITCHINFO_H */