FormCharging.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #include "FormCharging.h"
  2. #include "ui_FormCharging.h"
  3. #include "ConfigManager.h"
  4. #include "LanguageManager.h"
  5. #include <QDebug>
  6. #include "Globals.h"
  7. #include "GeneralInterface.h"
  8. #include "LoggerHelper.h"
  9. FormCharging::FormCharging(int gun_id, QWidget *parent)
  10. : QWidget(parent)
  11. , ui(new Ui::FormCharging)
  12. , m_gun_id(gun_id)
  13. {
  14. ui->setupUi(this);
  15. m_tcu_cfg = ConfigManager::instance()->tcu_cfg();
  16. m_ccu_cfg = ConfigManager::instance()->ccu_cfg();
  17. m_currentGunNum = m_ccu_cfg.GUN_Numb;
  18. initWidget();
  19. initConnect();
  20. }
  21. FormCharging::~FormCharging()
  22. {
  23. delete ui;
  24. }
  25. void FormCharging::initWidget()
  26. {
  27. setChargingBackground();
  28. setPowerBackground();
  29. setDurationBackground();
  30. setPriceBackground();
  31. setVoltageBackground();
  32. setCurrentBackground();
  33. setStopBtnBackground();
  34. }
  35. void FormCharging::initConnect()
  36. {
  37. connect(ui->stop, &QToolButton::clicked, this, [this]() { emit stopCharging(); });
  38. connect(LanguageManager::instance(), &LanguageManager::languageChanged, this, [this]() { ui->retranslateUi(this); });
  39. connect(GLOBALS, &Globals::chargeInfoValueChanged, this, &FormCharging::chargeInfoValueChanged);
  40. connect(GLOBALS, &Globals::ccuConfigValueChanged, this, [this](const CCU_CFG& ccu_cfg) {
  41. m_ccu_cfg = ccu_cfg;
  42. if (m_currentGunNum == m_ccu_cfg.GUN_Numb) return;
  43. refreshChargingBackground();
  44. });
  45. connect(GLOBALS, &Globals::tcuConfigValueChanged, this, [this](const TCU_CFG& tcu_cfg) {
  46. m_tcu_cfg = tcu_cfg;
  47. auto isOnce = (m_ccu_cfg.GUN_Numb == 1 ? true : false);
  48. setOnceLayoutStrect(isOnce);
  49. });
  50. }
  51. void FormCharging::setBackgroundImage(QLabel *label, const QString &imageurl)
  52. {
  53. if (!label) {
  54. LOG_WARNING("Invalid label pointer");
  55. return;
  56. }
  57. QPixmap pixmap(imageurl);
  58. if (!pixmap.isNull()) {
  59. label->setAlignment(Qt::AlignCenter);
  60. label->setPixmap(pixmap);
  61. } else {
  62. LOG_WARNING("Failed to load background image:" + imageurl);
  63. }
  64. }
  65. void FormCharging::setChargingBackground()
  66. {
  67. charging_bg_image = new QLabel();
  68. ui->charging_layout->addWidget(charging_bg_image,
  69. 0,
  70. 0,
  71. ui->charging_layout->rowCount(),
  72. ui->charging_layout->columnCount());
  73. setBackgroundImage(charging_bg_image, ":/images/charging/charging_background.png");
  74. charging_bg_image->setAlignment(Qt::AlignCenter);
  75. charging_bg_image->lower();
  76. // charging_bg_image->setScaledContents(true);
  77. }
  78. void FormCharging::refreshChargingBackground()
  79. {
  80. if (m_ccu_cfg.GUN_Numb == m_currentGunNum) return;
  81. bool isOnce;
  82. if (m_ccu_cfg.GUN_Numb == 1) {
  83. setBackgroundImage(charging_bg_image, ":/images/charging/charging_background_once.png");
  84. } else if (m_ccu_cfg.GUN_Numb == 2) {
  85. setBackgroundImage(charging_bg_image, ":/images/charging/charging_background.png");
  86. }
  87. isOnce = (m_ccu_cfg.GUN_Numb == 1 ? true : false);
  88. setOnceLayoutStrect(isOnce);
  89. }
  90. void FormCharging::setPowerBackground()
  91. {
  92. power_bg_image = new QLabel();
  93. ui->power_layout->addWidget(power_bg_image,
  94. 0,
  95. 0,
  96. ui->power_layout->rowCount(),
  97. ui->power_layout->columnCount());
  98. setBackgroundImage(power_bg_image, ":/images/charging/label_charging_background.png");
  99. power_bg_image->lower();
  100. power_bg_image->setScaledContents(true);
  101. }
  102. void FormCharging::setDurationBackground()
  103. {
  104. duration_bg_image = new QLabel();
  105. ui->duration_layout->addWidget(duration_bg_image,
  106. 0,
  107. 0,
  108. ui->duration_layout->rowCount(),
  109. ui->duration_layout->columnCount());
  110. setBackgroundImage(duration_bg_image, ":/images/charging/label_charging_background.png");
  111. duration_bg_image->lower();
  112. duration_bg_image->setScaledContents(true);
  113. }
  114. void FormCharging::setPriceBackground()
  115. {
  116. price_bg_image = new QLabel();
  117. ui->price_layout->addWidget(price_bg_image,
  118. 0,
  119. 0,
  120. ui->price_layout->rowCount(),
  121. ui->price_layout->columnCount());
  122. setBackgroundImage(price_bg_image, ":/images/charging/label_charging_background.png");
  123. price_bg_image->lower();
  124. price_bg_image->setScaledContents(true);
  125. }
  126. void FormCharging::setVoltageBackground()
  127. {
  128. voltage_bg_image = new QLabel();
  129. ui->voltage_layout->addWidget(voltage_bg_image,
  130. 0,
  131. 0,
  132. ui->voltage_layout->rowCount(),
  133. ui->voltage_layout->columnCount());
  134. setBackgroundImage(voltage_bg_image, ":/images/charging/label_charging_background.png");
  135. voltage_bg_image->lower();
  136. voltage_bg_image->setScaledContents(true);
  137. }
  138. void FormCharging::setCurrentBackground()
  139. {
  140. current_bg_image = new QLabel();
  141. ui->current_layout->addWidget(current_bg_image,
  142. 0,
  143. 0,
  144. ui->current_layout->rowCount(),
  145. ui->current_layout->columnCount());
  146. setBackgroundImage(current_bg_image, ":/images/charging/label_charging_background.png");
  147. current_bg_image->lower();
  148. current_bg_image->setScaledContents(true);
  149. }
  150. void FormCharging::setStopBtnBackground()
  151. {
  152. stop_btn_bg_image = new QLabel();
  153. ui->stop_layout->addWidget(stop_btn_bg_image,
  154. 0,
  155. 0,
  156. ui->stop_layout->rowCount(),
  157. ui->stop_layout->columnCount());
  158. setBackgroundImage(stop_btn_bg_image, ":/images/charging/stop_charging.png");
  159. stop_btn_bg_image->lower();
  160. stop_btn_bg_image->setScaledContents(true);
  161. }
  162. void FormCharging::setOnceLayoutStrect(bool isOnce)
  163. {
  164. setChargeLayoutStrect(isOnce);
  165. setSocLayoutStrect(isOnce);
  166. }
  167. void FormCharging::setChargeLayoutStrect(bool isOnce)
  168. {
  169. if (isOnce) {
  170. ui->charging_layout->setRowStretch(0, m_tcu_cfg.charge_layout_strect.once_row_strect[0]);
  171. ui->charging_layout->setRowStretch(1, m_tcu_cfg.charge_layout_strect.once_row_strect[1]);
  172. ui->charging_layout->setRowStretch(2, m_tcu_cfg.charge_layout_strect.once_row_strect[2]);
  173. ui->charging_layout->setColumnStretch(0, m_tcu_cfg.charge_layout_strect.once_column_strect[0]);
  174. ui->charging_layout->setColumnStretch(1, m_tcu_cfg.charge_layout_strect.once_column_strect[1]);
  175. ui->charging_layout->setColumnStretch(2, m_tcu_cfg.charge_layout_strect.once_column_strect[2]);
  176. ui->charging_layout->setColumnStretch(3, m_tcu_cfg.charge_layout_strect.once_column_strect[3]);
  177. ui->charging_layout->setColumnStretch(4, m_tcu_cfg.charge_layout_strect.once_column_strect[4]);
  178. } else {
  179. ui->charging_layout->setRowStretch(0, m_tcu_cfg.charge_layout_strect.row_strect[0]);
  180. ui->charging_layout->setRowStretch(1, m_tcu_cfg.charge_layout_strect.row_strect[1]);
  181. ui->charging_layout->setRowStretch(2, m_tcu_cfg.charge_layout_strect.row_strect[2]);
  182. ui->charging_layout->setColumnStretch(0, m_tcu_cfg.charge_layout_strect.column_strect[0]);
  183. ui->charging_layout->setColumnStretch(1, m_tcu_cfg.charge_layout_strect.column_strect[1]);
  184. ui->charging_layout->setColumnStretch(2, m_tcu_cfg.charge_layout_strect.column_strect[2]);
  185. ui->charging_layout->setColumnStretch(3, m_tcu_cfg.charge_layout_strect.column_strect[3]);
  186. ui->charging_layout->setColumnStretch(4, m_tcu_cfg.charge_layout_strect.column_strect[4]);
  187. }
  188. }
  189. void FormCharging::setSocLayoutStrect(bool isOnce)
  190. {
  191. if (isOnce) {
  192. ui->soc_layout->setRowStretch(0, m_tcu_cfg.soc_layout_strect.once_row_strect[0]);
  193. ui->soc_layout->setRowStretch(1, m_tcu_cfg.soc_layout_strect.once_row_strect[1]);
  194. ui->soc_layout->setRowStretch(2, m_tcu_cfg.soc_layout_strect.once_row_strect[2]);
  195. ui->soc_layout->setColumnStretch(0, m_tcu_cfg.soc_layout_strect.once_column_strect[0]);
  196. ui->soc_layout->setColumnStretch(1, m_tcu_cfg.soc_layout_strect.once_column_strect[1]);
  197. ui->soc_layout->setColumnStretch(2, m_tcu_cfg.soc_layout_strect.once_column_strect[2]);
  198. } else {
  199. ui->soc_layout->setRowStretch(0, m_tcu_cfg.soc_layout_strect.row_strect[0]);
  200. ui->soc_layout->setRowStretch(1, m_tcu_cfg.soc_layout_strect.row_strect[1]);
  201. ui->soc_layout->setRowStretch(2, m_tcu_cfg.soc_layout_strect.row_strect[2]);
  202. ui->soc_layout->setColumnStretch(0, m_tcu_cfg.soc_layout_strect.column_strect[0]);
  203. ui->soc_layout->setColumnStretch(1, m_tcu_cfg.soc_layout_strect.column_strect[1]);
  204. ui->soc_layout->setColumnStretch(2, m_tcu_cfg.soc_layout_strect.column_strect[2]);
  205. }
  206. }
  207. QString FormCharging::getPowerConsumption(const uint32_t &start_power, const uint32_t &cur_power)
  208. {
  209. double power_consum = (cur_power / 10.0) - (start_power / 10.0);
  210. return QString("%1/Kwh").arg(QString::number(power_consum, 'f', 2));
  211. }
  212. QString FormCharging::getTimeConsum(const uint32_t &start_time, const uint32_t &cur_time)
  213. {
  214. int difference = qAbs(static_cast<int>(cur_time - start_time));
  215. QTime time(0, 0, 0);
  216. time = time.addSecs(difference);
  217. return time.toString("hh:mm:ss");
  218. }
  219. QString FormCharging::getExpenditure(const double &power_consum, const bool &is_cross_timezone)
  220. {
  221. if (is_cross_timezone) { // 充电中跨时区
  222. // 后续根据时区单价进行计算
  223. } else { // 充电过程中未跨时区
  224. // 根据当前时段获取当前单价进行计算
  225. auto price = 1.0;
  226. return QString(tr("$%1")).arg(QString::number(power_consum * price, 'f', 2));
  227. }
  228. return QString("");
  229. }
  230. void FormCharging::chargeInfoValueChanged(const CHARGING_INFO &info)
  231. {
  232. if (m_gun_id == info.GUNID) {
  233. auto power_consumption = getPowerConsumption(info.startKW, info.now_KW);
  234. auto time_consum = getTimeConsum(info.startUTC, info.now_UTC);
  235. auto price = getExpenditure((info.now_KW - info.startKW) / 10.0, GeneralInterface::isCrossTime(info.startUTC, info.now_UTC));
  236. auto soc = QString("%1%").arg(QString::number(info.SOC / 10.0, 'f', 1));
  237. auto voltage = QString("%1V").arg(QString::number(info.voltage / 10.0, 'f', 2));
  238. auto current = QString("%1A").arg(QString::number(info.current / 10.0, 'f', 2));
  239. ui->power_consumption->setText(power_consumption);
  240. ui->duration->setText(time_consum);
  241. ui->price->setText(price);
  242. ui->soc->setText(soc);
  243. ui->voltage->setText(voltage);
  244. ui->current->setText(current);
  245. }
  246. }
  247. void FormCharging::setGun_id(int newGun_id)
  248. {
  249. m_gun_id = newGun_id;
  250. }