TransmitterSwitchInfo.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  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. DefaultPlan = 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 WebAPI初始化数据
  75. *
  76. */
  77. struct InitData
  78. {
  79. QString url; /* WebAPI地址 */
  80. QString serverID; /* 服务器ID */
  81. QString serverKey; /* 服务器Key */
  82. InitData& operator=(const InitData& data)
  83. {
  84. url = data.url;
  85. serverID = data.serverID;
  86. serverKey = data.serverKey;
  87. return *this;
  88. }
  89. };
  90. /**
  91. * @brief 配置键值对
  92. * key1 : 默认执行计划开关
  93. * key2 : 执行模式
  94. *
  95. */
  96. struct ConfigData
  97. {
  98. int key; /* 键 */
  99. int value; /* 值 */
  100. QDateTime updateTime; /* 更新时间 */
  101. QString notes; /* 备注 */
  102. ConfigData() : key(0), value(0), updateTime(QDateTime::currentDateTime()), notes("") {}
  103. ConfigData(const ConfigData& data)
  104. {
  105. key = data.key;
  106. value = data.value;
  107. updateTime = data.updateTime;
  108. notes = data.notes;
  109. }
  110. ConfigData& operator=(const ConfigData& data)
  111. {
  112. key = data.key;
  113. value = data.value;
  114. updateTime = data.updateTime;
  115. notes = data.notes;
  116. return *this;
  117. }
  118. };
  119. #define CfgData ConfigDataContainer::getInstance()
  120. /**
  121. * @brief 全局键值对容器
  122. *
  123. */
  124. class ConfigDataContainer
  125. {
  126. private:
  127. ConfigDataContainer() {}
  128. ConfigDataContainer(const ConfigDataContainer& data) = delete;
  129. ConfigDataContainer& operator=(const ConfigDataContainer& data) = delete;
  130. public:
  131. /* 配置的键值对的说明 */
  132. const QMap<int, QString> KeyNotes = {
  133. {static_cast<int>(enum_ExecPlanConfig::DefaultPlan), "默认执行计划开关,0关,1开"},
  134. {static_cast<int>(enum_ExecPlanConfig::ExecMode), "执行模式,0按时刻,1按天"},
  135. {static_cast<int>(enum_ExecPlanConfig::IsChanged), "是否更新,0未修改,1修改"}
  136. };
  137. public:
  138. ~ConfigDataContainer() {}
  139. static ConfigDataContainer& getInstance()
  140. {
  141. static ConfigDataContainer data;
  142. return data;
  143. }
  144. /* 添加一个配置 */
  145. void updateConfigData(const ConfigData& data);
  146. /* 获取一个配置 */
  147. ConfigData& getConfigData(int key);
  148. /* 查找一个配置是否在不在 */
  149. bool findConfigData(int key);
  150. /* 删除一个配置 */
  151. void deleteConfigData(int key);
  152. /* 获取容器 */
  153. QMap<int, ConfigData>& getMapConfigData() { return m_mapConfigData; }
  154. private:
  155. QMap<int, ConfigData> m_mapConfigData; /* 配置信息,key是配置的键 */
  156. };
  157. /**
  158. * @brief 执行计划条目信息
  159. *
  160. */
  161. struct ExecPlanItemInfo
  162. {
  163. int ChannelID; /* 频率ID */
  164. int ExecType; /* 执行类型,0按时刻,1按天 */
  165. enum_WeekDay WeekDay; /* 周几,数据库里是1-7一周,周8是特殊日 */
  166. QDateTime dateTime; /* 时间和日期 */
  167. QString devName; /* 设备名称 */
  168. int actionID; /* 动作ID */
  169. QString actionName; /* 执行的动作 */
  170. ExecPlanItemInfo();
  171. ExecPlanItemInfo(const ExecPlanItemInfo& item);
  172. ExecPlanItemInfo& operator=(const ExecPlanItemInfo& item);
  173. };
  174. /**
  175. * @brief 频率信息
  176. *
  177. */
  178. struct ChannelInfo
  179. {
  180. int ChannelID = -1; /* 通道ID */
  181. QString ChannelName; /* 通道名称 */
  182. ChannelInfo() {}
  183. ChannelInfo(const ChannelInfo& channel);
  184. ChannelInfo& operator=(const ChannelInfo& channel);
  185. };
  186. #define ChnContainer MapChannel::getInstance()
  187. class MapChannel
  188. {
  189. MapChannel() {}
  190. MapChannel(const MapChannel& channel) = delete;
  191. MapChannel& operator=(const MapChannel& channel) = delete;
  192. public:
  193. ~MapChannel() {}
  194. static MapChannel& getInstance()
  195. {
  196. static MapChannel instance;
  197. return instance;
  198. }
  199. /* 添加一个频率 */
  200. void addChannel(const ChannelInfo& channelInfo);
  201. /* 获取一个频率 */
  202. ChannelInfo getChannel(int channelID);
  203. /* 获取容器 */
  204. QMap<int, ChannelInfo>& getMapChannel() { return m_mapChannel; }
  205. private:
  206. QMap<int, ChannelInfo> m_mapChannel; /* 频率信息,key是通道ID */
  207. };
  208. /**
  209. * @brief 存储一个设备类型及端口参数,即这个设备支持哪些端口,在配置页面选择设备的时候使用
  210. * 如:“衢州台发射机”支持哪些端口
  211. */
  212. struct DevTypeInfo
  213. {
  214. DevTypeInfo();
  215. ~DevTypeInfo() {}
  216. DevTypeInfo& operator=(const DevTypeInfo& devInfo);
  217. QString devTypeName; /* 设备类型名称,如:衢州台发射机,非必须的 */
  218. QMap<int, QString> devAction; /* 设备支持的动作,如开机、关机等 */
  219. QMap<enum_DeviceMB, QString> devType_MB; /* 同一中设备允许存在的个数,如主/备或其他标记方式,这里用不到 */
  220. int PTTypeCode; /* 设备类型编号,在EQM数据库中的类型,如发射机是955 */
  221. };
  222. #define DevTypeContainer MapDevType::getInstance()
  223. /**
  224. * @brief 软件支持的设备类型信息
  225. *
  226. */
  227. class MapDevType
  228. {
  229. MapDevType();
  230. MapDevType(const MapDevType& devType) = delete;
  231. MapDevType& operator=(const MapDevType& devType) = delete;
  232. public:
  233. ~MapDevType() {}
  234. static MapDevType& getInstance()
  235. {
  236. static MapDevType instance;
  237. return instance;
  238. }
  239. /* 添加支持的设备类型 */
  240. void initDevType();
  241. /* 获取某一个发射机类型 */
  242. DevTypeInfo getDevType(int PTTypeCode);
  243. /* 获取设备类型信息 */
  244. QMap<int, DevTypeInfo>& getMapDevType() { return m_mapDevType; }
  245. private:
  246. QMap<int, DevTypeInfo> m_mapDevType; /* 设备类型信息,int是发射机的PTTypeCode */
  247. };
  248. /**
  249. * @brief 配置完成后的信息,给一个类型的设备创建了名字,并存储了设备类型和参数信息
  250. */
  251. struct DeviceInfo
  252. {
  253. DeviceInfo();
  254. ~DeviceInfo() {}
  255. DeviceInfo(const DeviceInfo& devInfo);
  256. DeviceInfo& operator=(const DeviceInfo& devInfo);
  257. QString devName; /* 自定义的设备名称 */
  258. DevTypeInfo DevType; /* 该设备的类型 */
  259. // QPair<enum_DeviceMB, QString> devTypeMB; /* 该设备是主设备还是备用设备 */
  260. int DID; /* 设备ID */
  261. int DTID; /* 设备类型ID */
  262. int MPID; /* 监测点ID */
  263. int PTTypeCode; /* 端口类型编码 */
  264. int ChannelID; /* 通道ID */
  265. };
  266. #define DeviceContainer MapDevice::getInstance()
  267. class MapDevice
  268. {
  269. MapDevice();
  270. MapDevice(const MapDevice& dev) = delete;
  271. MapDevice& operator=(const MapDevice& dev) = delete;
  272. public:
  273. ~MapDevice() {}
  274. static MapDevice& getInstance()
  275. {
  276. static MapDevice instance;
  277. return instance;
  278. }
  279. /* 添加一个设备 */
  280. void addDevice(const DeviceInfo& devInfo);
  281. /* 获取一个设备 */
  282. DeviceInfo getDevice(const QString& devName);
  283. /* 查找一个设备 */
  284. bool findDevice(const QString& devName);
  285. /* 根据设备名称获取设备动作 */
  286. bool getDevAction(const QString& devName, QMap<int, QString>& devAction);
  287. /* 删除一个设备 */
  288. void deleteDevice(const QString& devName);
  289. /* 获取容器 */
  290. QMap<QString, DeviceInfo>& getMapDevice() { return m_mapDevice; }
  291. private:
  292. QMap<QString, DeviceInfo> m_mapDevice; /* 设备信息,key是设备名称 */
  293. };
  294. #endif /* TRANSMITTERSWITCHINFO_H */