|
@@ -24,8 +24,7 @@ FormTxDefaultProfileDetail::~FormTxDefaultProfileDetail()
|
|
|
|
|
|
bool FormTxDefaultProfileDetail::returnParent()
|
|
|
{
|
|
|
- updateData();
|
|
|
- return ConfigManager::instance()->saveConfig(CHARGING_PROFILE, QVariant::fromValue(m_profile_infos));
|
|
|
+ return updateData();
|
|
|
}
|
|
|
|
|
|
void FormTxDefaultProfileDetail::initWidget()
|
|
@@ -38,6 +37,11 @@ void FormTxDefaultProfileDetail::initWidget()
|
|
|
m_limit_dialog->setParent(this);
|
|
|
m_limit_dialog->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
|
|
m_limit_dialog->setWindowModality(Qt::WindowModal);
|
|
|
+
|
|
|
+ m_weekday_dialog.reset(new DialogWeekDayDetail());
|
|
|
+ m_weekday_dialog->setParent(this);
|
|
|
+ m_weekday_dialog->setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
|
|
+ m_weekday_dialog->setWindowModality(Qt::WindowModal);
|
|
|
}
|
|
|
|
|
|
void FormTxDefaultProfileDetail::initConnect()
|
|
@@ -71,6 +75,7 @@ void FormTxDefaultProfileDetail::initConnect()
|
|
|
break;
|
|
|
case ChargingProfiles::RecurrencyKind::WEEKLY_ID:
|
|
|
ui->stackedWidget->setCurrentWidget(ui->weekly);
|
|
|
+ refreshWeeklyData();
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
@@ -90,19 +95,13 @@ void FormTxDefaultProfileDetail::initConnect()
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- connect(ui->add_limit, &QPushButton::clicked, this, [this](){
|
|
|
-
|
|
|
- });
|
|
|
-
|
|
|
- connect(ui->delete_limit, &QPushButton::clicked, this, [this]() {
|
|
|
-
|
|
|
- });
|
|
|
-
|
|
|
- connect(ui->save_limit, &QPushButton::clicked, this, [this]() {
|
|
|
-
|
|
|
- });
|
|
|
+ connect(ui->add_limit, &QPushButton::clicked, this, &FormTxDefaultProfileDetail::addBtnClicked);
|
|
|
+ connect(ui->delete_limit, &QPushButton::clicked, this, &FormTxDefaultProfileDetail::deleteBtnClicked);
|
|
|
|
|
|
connect(ui->dailyTablewidget, &QTableWidget::itemDoubleClicked, this, &FormTxDefaultProfileDetail::dialyTableWidgetClicked);
|
|
|
+ connect(ui->weeklyListwidget, &QListWidget::itemDoubleClicked, this, &FormTxDefaultProfileDetail::weekdayTableWidgetDoubleClicked);
|
|
|
+
|
|
|
+ connect(m_weekday_dialog.data(), &DialogWeekDayDetail::valueChanged, this, [this]() { setIsModify(true); });
|
|
|
}
|
|
|
|
|
|
void FormTxDefaultProfileDetail::initComboBox()
|
|
@@ -152,75 +151,41 @@ void FormTxDefaultProfileDetail::refreshData()
|
|
|
|
|
|
void FormTxDefaultProfileDetail::refreshGeneralData()
|
|
|
{
|
|
|
- QMap<int, QVariant> stackLevelData = m_profile_infos_map.value(m_gun_id).value<QMap<int, QVariant>>();
|
|
|
- auto maxStackLevel = GeneralInterface::getMaxElecment(stackLevelData.keys());
|
|
|
- if (maxStackLevel < 0) return;
|
|
|
- QMap<QString, QVariant> purposeData = stackLevelData.value(maxStackLevel).value<QMap<QString, QVariant>>();
|
|
|
- foreach (const auto& purpose, purposeData.keys()) {
|
|
|
- if (purpose == ui->chargingProfilePurpose->text()) {
|
|
|
- QMap<QString, QVariant> kindData = purposeData.value(purpose).value<QMap<QString, QVariant>>();
|
|
|
- if (kindData.count() == 1) {
|
|
|
- ui->chargingProfileKind->setCurrentText(kindData.firstKey());
|
|
|
- QMap<QString, QVariant> recurrencyData = kindData.value(kindData.firstKey()).value<QMap<QString, QVariant>>();
|
|
|
- if (recurrencyData.count() == 1) {
|
|
|
- ui->recurrencyKind->setCurrentText(recurrencyData.firstKey());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ if (m_profile_info.connectorId != m_gun_id) return;
|
|
|
+ if (m_profile_info.chargingProfilePurpose != ui->chargingProfilePurpose->text()) return;
|
|
|
+ ui->chargingProfileKind->setCurrentText(m_profile_info.chargingProfileKind);
|
|
|
+ ui->recurrencyKind->setCurrentText(m_profile_info.recurrencyKind);
|
|
|
}
|
|
|
|
|
|
void FormTxDefaultProfileDetail::refreshDailyData()
|
|
|
{
|
|
|
- QMap<int, QVariant> stackLevelData = m_profile_infos_map.value(m_gun_id).value<QMap<int, QVariant>>();
|
|
|
- auto maxStackLevel = GeneralInterface::getMaxElecment(stackLevelData.keys());
|
|
|
- if (maxStackLevel < 0) return;
|
|
|
- auto dailyList = getProfileInfoMap(m_profile_infos_map,
|
|
|
- m_gun_id,
|
|
|
- maxStackLevel,
|
|
|
- ui->chargingProfilePurpose->text(),
|
|
|
- ChargingProfiles::Kind::RECURRING,
|
|
|
- ChargingProfiles::RecurrencyKind::DAILY);
|
|
|
+ ui->startTime->setDateTime(QDateTime::fromString(m_profile_info.chargingSchedule.startTime, Qt::ISODate));
|
|
|
+
|
|
|
ui->dailyTablewidget->clearContents();
|
|
|
ui->dailyTablewidget->setRowCount(0);
|
|
|
- for (const auto& daily : std::as_const(dailyList)) {
|
|
|
+ foreach (const auto& duration_info, m_profile_info.chargingSchedule.chargingSchedulePeriod) {
|
|
|
QString limitStr = "";
|
|
|
- if (daily.chargingSchedule.chargingRateUnit == ChargingProfiles::UnitType::AMPERE) {
|
|
|
- limitStr = QString("%1 A").arg(QString::number(daily.chargingSchedule.chargingSchedulePeriod[0].limit / 10000.0, 'f', 2));
|
|
|
- } else if (daily.chargingSchedule.chargingRateUnit == ChargingProfiles::UnitType::WATT) {
|
|
|
- limitStr = QString("%1 KW").arg(QString::number(daily.chargingSchedule.chargingSchedulePeriod[0].limit / 10000.0, 'f', 2));
|
|
|
+ if (m_profile_info.chargingSchedule.chargingRateUnit == ChargingProfiles::UnitType::AMPERE) {
|
|
|
+ limitStr = QString("%1 A").arg(QString::number(duration_info.limit / 1000.0, 'f', 2));
|
|
|
+ } else if (m_profile_info.chargingSchedule.chargingRateUnit == ChargingProfiles::UnitType::WATT) {
|
|
|
+ limitStr = QString("%1 KW").arg(QString::number(duration_info.limit / 1000.0, 'f', 2));
|
|
|
}
|
|
|
- appendRowTableWidget(QDateTime::fromString(daily.chargingSchedule.startTime, Qt::ISODateWithMs).toString("HH:mm:ss"),
|
|
|
- QString::number(daily.chargingSchedule.duration),
|
|
|
- daily.chargingSchedule.chargingRateUnit,
|
|
|
+ QString startPeriod = GeneralInterface::getCurrentDate(duration_info.startPeriod);
|
|
|
+ appendRowTableWidget(startPeriod,
|
|
|
+ m_profile_info.chargingSchedule.chargingRateUnit,
|
|
|
limitStr);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void FormTxDefaultProfileDetail::refreshWeeklyData()
|
|
|
{
|
|
|
-
|
|
|
+ ui->startTime->setDateTime(QDateTime::fromString(m_profile_info.chargingSchedule.startTime, Qt::ISODate));
|
|
|
}
|
|
|
|
|
|
void FormTxDefaultProfileDetail::refreshDefaultData()
|
|
|
-{
|
|
|
- QMap<int, QVariant> stackLevelData = m_profile_infos_map.value(m_gun_id).value<QMap<int, QVariant>>();
|
|
|
- auto maxStackLevel = GeneralInterface::getMaxElecment(stackLevelData.keys());
|
|
|
- if (maxStackLevel < 0) return;
|
|
|
- auto dailyList = getProfileInfoMap(m_profile_infos_map,
|
|
|
- m_gun_id,
|
|
|
- maxStackLevel,
|
|
|
- ui->chargingProfilePurpose->text(),
|
|
|
- ChargingProfiles::Kind::RECURRING,
|
|
|
- ChargingProfiles::RecurrencyKind::DAILY);
|
|
|
-
|
|
|
- ui->startTime->setDateTime(QDateTime::fromString(dailyList[0].chargingSchedule.startTime, Qt::ISODateWithMs));
|
|
|
- ui->duration->setText(QString::number(dailyList[0].chargingSchedule.duration));
|
|
|
- ui->chargingRateUnit->setCurrentText(dailyList[0].chargingSchedule.chargingRateUnit);
|
|
|
- ui->limit->setText(QString::number(dailyList[0].chargingSchedule.chargingSchedulePeriod[0].limit / 10000.0, 'f', 2));
|
|
|
-}
|
|
|
+{}
|
|
|
|
|
|
-void FormTxDefaultProfileDetail::appendRowTableWidget(const QString &startTime, const QString &duration, const QString &limitType, const QString &limit)
|
|
|
+void FormTxDefaultProfileDetail::appendRowTableWidget(const QString &startTime, const QString &limitType, const QString &limit)
|
|
|
{
|
|
|
auto row = ui->dailyTablewidget->rowCount();
|
|
|
ui->dailyTablewidget->insertRow(row);
|
|
@@ -229,104 +194,317 @@ void FormTxDefaultProfileDetail::appendRowTableWidget(const QString &startTime,
|
|
|
startTimeItem->setTextAlignment(Qt::AlignCenter);
|
|
|
ui->dailyTablewidget->setItem(row, 0, startTimeItem);
|
|
|
|
|
|
- auto durationItem = new QTableWidgetItem(duration);
|
|
|
- durationItem->setTextAlignment(Qt::AlignCenter);
|
|
|
- ui->dailyTablewidget->setItem(row, 1, durationItem);
|
|
|
-
|
|
|
auto limitTypeItem = new QTableWidgetItem(limitType);
|
|
|
limitTypeItem->setTextAlignment(Qt::AlignCenter);
|
|
|
- ui->dailyTablewidget->setItem(row, 2, limitTypeItem);
|
|
|
+ ui->dailyTablewidget->setItem(row, 1, limitTypeItem);
|
|
|
|
|
|
auto limitItem = new QTableWidgetItem(limit);
|
|
|
limitItem->setTextAlignment(Qt::AlignCenter);
|
|
|
- ui->dailyTablewidget->setItem(row, 3, limitItem);
|
|
|
+ ui->dailyTablewidget->setItem(row, 2, limitItem);
|
|
|
|
|
|
ui->dailyTablewidget->setRowHeight(row, 60);
|
|
|
}
|
|
|
|
|
|
-void FormTxDefaultProfileDetail::updateData()
|
|
|
+bool FormTxDefaultProfileDetail::updateData()
|
|
|
{
|
|
|
- m_profile_infos.chargingProfiles = GeneralInterface::chargingProfileMapToList(m_profile_infos_map);
|
|
|
+ CHARGING_PROFILES profile_infos = ConfigManager::instance()->charging_profiles();
|
|
|
+ for(int index = 0; index < profile_infos.chargingProfiles.size(); index ++) {
|
|
|
+ if (profile_infos.chargingProfiles[index].chargingProfilePurpose == m_profile_info.chargingProfilePurpose &&
|
|
|
+ profile_infos.chargingProfiles[index].chargingProfileId == m_profile_info.chargingProfileId) {
|
|
|
+ profile_infos.chargingProfiles[index] = m_profile_info;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return ConfigManager::instance()->saveConfig(CHARGING_PROFILE, QVariant::fromValue(profile_infos));
|
|
|
}
|
|
|
|
|
|
-QMap<int, QVariant> FormTxDefaultProfileDetail::getProfileInfoMap(const QMap<int, QVariant> &map, const int &connectorId)
|
|
|
+QList<charging_profiles_detail_info_t> FormTxDefaultProfileDetail::getProfileInfo(const QList<charging_profiles_detail_info_t> &dataList,
|
|
|
+ const int &connectorId,
|
|
|
+ const QString &purpose,
|
|
|
+ const QString &kind,
|
|
|
+ const QString &recurrencyKind)
|
|
|
{
|
|
|
- return map.value(connectorId).value<QMap<int, QVariant>>();
|
|
|
+ QList<charging_profiles_detail_info_t> result;
|
|
|
+ if (dataList.isEmpty()) return result;
|
|
|
+
|
|
|
+ auto ret = isExistByRecurrencyKind(dataList, connectorId, purpose, kind, recurrencyKind);
|
|
|
+ if (!ret) return result;
|
|
|
+
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (data.connectorId == connectorId &&
|
|
|
+ data.chargingProfilePurpose == purpose &&
|
|
|
+ data.chargingProfileKind == kind &&
|
|
|
+ data.recurrencyKind == recurrencyKind) {
|
|
|
+ result.append(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
-QMap<QString, QVariant> FormTxDefaultProfileDetail::getProfileInfoMap(const QMap<int, QVariant> &map, const int &connectorId, const int &stackLevel)
|
|
|
+charging_profiles_detail_info_t FormTxDefaultProfileDetail::getMaxStackLevel(const QList<charging_profiles_detail_info_t> &dataList)
|
|
|
{
|
|
|
- QMap<int, QVariant> connectorIdMap = map.value(connectorId).value<QMap<int, QVariant>>();
|
|
|
- QMap<QString, QVariant> stackLevelMap = connectorIdMap.value(stackLevel).value<QMap<QString, QVariant>>();
|
|
|
- return stackLevelMap;
|
|
|
+ int maxStackLevel = -1;
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (maxStackLevel < data.stackLevel){
|
|
|
+ maxStackLevel = data.stackLevel;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (maxStackLevel == data.stackLevel){
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return charging_profiles_detail_info_t();
|
|
|
}
|
|
|
|
|
|
-QMap<QString, QVariant> FormTxDefaultProfileDetail::getProfileInfoMap(const QMap<int, QVariant> &map, const int &connectorId, const int &stackLevel, const QString &purpose)
|
|
|
+charging_profiles_detail_info_t FormTxDefaultProfileDetail::getProfileInfo(const QList<charging_profiles_detail_info_t> &dataList,
|
|
|
+ const int &connectorId,
|
|
|
+ const QString &purpose,
|
|
|
+ const QString &recurrencyKind,
|
|
|
+ const QString &kind,
|
|
|
+ const int &stackLevel)
|
|
|
{
|
|
|
- QMap<int, QVariant> connectorIdMap = map.value(connectorId).value<QMap<int, QVariant>>();
|
|
|
- QMap<QString, QVariant> stackLevelMap = connectorIdMap.value(stackLevel).value<QMap<QString, QVariant>>();
|
|
|
- QMap<QString, QVariant> purposeMap = stackLevelMap.value(purpose).value<QMap<QString, QVariant>>();
|
|
|
- return purposeMap;
|
|
|
+ charging_profiles_detail_info_t result;
|
|
|
+ if (dataList.isEmpty()) return result;
|
|
|
+
|
|
|
+ if (!isExistByStackLevel(dataList, connectorId, purpose, recurrencyKind, kind, stackLevel)) return result;
|
|
|
+
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (data.connectorId == connectorId &&
|
|
|
+ data.stackLevel == stackLevel &&
|
|
|
+ data.chargingProfilePurpose == purpose &&
|
|
|
+ data.chargingProfileKind == kind &&
|
|
|
+ data.recurrencyKind == recurrencyKind) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
-QMap<QString, QVariant> FormTxDefaultProfileDetail::getProfileInfoMap(const QMap<int, QVariant> &map, const int &connectorId, const int &stackLevel, const QString &purpose, const QString &kind)
|
|
|
+void FormTxDefaultProfileDetail::updateData(QList<charging_profiles_detail_info_t> &dataList, const charging_profiles_detail_info_t &data, const int &connectorId, const QString &purpose, const QString &kind, const QString &recurrencyKind, const int &stackLevel)
|
|
|
{
|
|
|
- QMap<int, QVariant> connectorIdMap = map.value(connectorId).value<QMap<int, QVariant>>();
|
|
|
- QMap<QString, QVariant> stackLevelMap = connectorIdMap.value(stackLevel).value<QMap<QString, QVariant>>();
|
|
|
- QMap<QString, QVariant> purposeMap = stackLevelMap.value(purpose).value<QMap<QString, QVariant>>();
|
|
|
- QMap<QString, QVariant> kindMap = purposeMap.value(kind).value<QMap<QString, QVariant>>();
|
|
|
- return kindMap;
|
|
|
+ for (int i = dataList.size() - 1; i >= 0; --i) {
|
|
|
+ const charging_profiles_detail_info_t &oldData = dataList.at(i);
|
|
|
+ if (oldData.connectorId == connectorId &&
|
|
|
+ oldData.stackLevel == stackLevel &&
|
|
|
+ oldData.chargingProfilePurpose == purpose &&
|
|
|
+ oldData.chargingProfileKind == kind &&
|
|
|
+ oldData.recurrencyKind == recurrencyKind) {
|
|
|
+ dataList.removeAt(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dataList.append(data);
|
|
|
}
|
|
|
|
|
|
-QList<charging_profiles_detail_info_t> FormTxDefaultProfileDetail::getProfileInfoMap(const QMap<int, QVariant> &map, const int &connectorId, const int &stackLevel, const QString &purpose, const QString &kind, const QString &recurrencyKind)
|
|
|
+bool FormTxDefaultProfileDetail::isExistByConnectorId(const QList<charging_profiles_detail_info_t> &dataList, const int &connectorId)
|
|
|
{
|
|
|
- QList<charging_profiles_detail_info_t> result;
|
|
|
- QMap<int, QVariant> connectorIdMap = map.value(connectorId).value<QMap<int, QVariant>>();
|
|
|
- QMap<QString, QVariant> stackLevelMap = connectorIdMap.value(stackLevel).value<QMap<QString, QVariant>>();
|
|
|
- QMap<QString, QVariant> purposeMap = stackLevelMap.value(purpose).value<QMap<QString, QVariant>>();
|
|
|
- QMap<QString, QVariant> kindMap = purposeMap.value(kind).value<QMap<QString, QVariant>>();
|
|
|
- QVariantList recurrencyKindMap = kindMap.value(recurrencyKind).value<QVariantList>();
|
|
|
-
|
|
|
- foreach (const auto& data, recurrencyKindMap) {
|
|
|
- result.append(data.value<charging_profiles_detail_info_t>());
|
|
|
+ if (dataList.isEmpty()) return false;
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (data.connectorId == connectorId) return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool FormTxDefaultProfileDetail::isExistByPurpose(const QList<charging_profiles_detail_info_t> &dataList, const int &connectorId, const QString &purpose)
|
|
|
+{
|
|
|
+ if (dataList.isEmpty()) return false;
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (data.connectorId == connectorId &&
|
|
|
+ data.chargingProfilePurpose == purpose) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool FormTxDefaultProfileDetail::isExistByKind(const QList<charging_profiles_detail_info_t> &dataList, const int &connectorId, const QString &purpose, const QString &kind)
|
|
|
+{
|
|
|
+ if (dataList.isEmpty()) return false;
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (data.connectorId == connectorId &&
|
|
|
+ data.chargingProfilePurpose == purpose &&
|
|
|
+ data.chargingProfileKind == kind) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool FormTxDefaultProfileDetail::isExistByRecurrencyKind(const QList<charging_profiles_detail_info_t> &dataList, const int &connectorId, const QString &purpose, const QString &kind, const QString &recurrencyKind)
|
|
|
+{
|
|
|
+ if (dataList.isEmpty()) return false;
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ auto ret = (data.connectorId == connectorId &&
|
|
|
+ data.chargingProfilePurpose == purpose &&
|
|
|
+ data.chargingProfileKind == kind &&
|
|
|
+ data.recurrencyKind == recurrencyKind);
|
|
|
+ if (ret) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+bool FormTxDefaultProfileDetail::isExistByStackLevel(const QList<charging_profiles_detail_info_t> &dataList, const int &connectorId, const QString &purpose, const QString &kind, const QString &recurrencyKind, const int &stackLevel)
|
|
|
+{
|
|
|
+ if (dataList.isEmpty()) return false;
|
|
|
+ foreach (const auto& data, dataList) {
|
|
|
+ if (data.connectorId == connectorId &&
|
|
|
+ data.chargingProfilePurpose == purpose &&
|
|
|
+ data.chargingProfileKind == kind &&
|
|
|
+ data.recurrencyKind == recurrencyKind &&
|
|
|
+ data.stackLevel == stackLevel) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+QList<charging_schedule_period_info_t> FormTxDefaultProfileDetail::getDayOfWeekLimitList(const QList<charging_schedule_period_info_t> &dataList, const QString &startTime, const int &curDay)
|
|
|
+{
|
|
|
+ QList<charging_schedule_period_info_t> result;
|
|
|
+ foreach (const auto& data, std::as_const(dataList)) {
|
|
|
+ if (isDayOfWeek(startTime, curDay, data.startPeriod)) {
|
|
|
+ result.append(data);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+bool FormTxDefaultProfileDetail::isDayOfWeek(const QString &startTime, const int &curDay, const int &seconds)
|
|
|
+{
|
|
|
+ // 1. 解析开始时间
|
|
|
+ QDateTime startDt = QDateTime::fromString(startTime, Qt::ISODate);
|
|
|
+ startDt.setTimeSpec(Qt::UTC); // 若有Z,确保为UTC
|
|
|
+
|
|
|
+ // 2. 计算目标时间
|
|
|
+ QDateTime targetDt = startDt.addSecs(seconds);
|
|
|
+
|
|
|
+ // 3. 判断目标时间是否为指定周几
|
|
|
+ return targetDt.date().dayOfWeek() == curDay;
|
|
|
+}
|
|
|
+
|
|
|
+void FormTxDefaultProfileDetail::updateWeekPeriodList(QList<charging_schedule_period_info_t> &dataList, const QList<charging_schedule_period_info_t> &newDataList, const QString &startTime, const int &curDay)
|
|
|
+{
|
|
|
+ for(int row = dataList.size() - 1; row >= 0; --row) {
|
|
|
+ if (isDayOfWeek(startTime, curDay, dataList[row].startPeriod)) {
|
|
|
+ dataList.removeAt(row);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ dataList.append(newDataList);
|
|
|
+
|
|
|
+ GeneralInterface::sortByStartPeriod(dataList);
|
|
|
+}
|
|
|
+
|
|
|
+int FormTxDefaultProfileDetail::indexOfWeekPeriodList(const QList<charging_schedule_period_info_t> &dataList, const charging_schedule_period_info_t &data)
|
|
|
+{
|
|
|
+ for (int index = 0; index < dataList.size(); index ++) {
|
|
|
+ if (dataList[index].startPeriod == data.startPeriod) {
|
|
|
+ return index;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return -1;
|
|
|
+}
|
|
|
+
|
|
|
void FormTxDefaultProfileDetail::dialyTableWidgetClicked(QTableWidgetItem *item)
|
|
|
{
|
|
|
- QMap<int, QVariant> stackLevelData = m_profile_infos_map.value(m_gun_id).value<QMap<int, QVariant>>();
|
|
|
- auto maxStackLevel = GeneralInterface::getMaxElecment(stackLevelData.keys());
|
|
|
- if (maxStackLevel < 0) return;
|
|
|
- auto dailyList = getProfileInfoMap(m_profile_infos_map,
|
|
|
- m_gun_id,
|
|
|
- maxStackLevel,
|
|
|
- ui->chargingProfilePurpose->text(),
|
|
|
- ChargingProfiles::Kind::RECURRING,
|
|
|
- ChargingProfiles::RecurrencyKind::DAILY);
|
|
|
Limit limit_info;
|
|
|
- limit_info.startTime = dailyList[item->row()].chargingSchedule.startTime;
|
|
|
- limit_info.duration = dailyList[item->row()].chargingSchedule.duration;
|
|
|
- limit_info.unit = dailyList[item->row()].chargingSchedule.chargingRateUnit;
|
|
|
- limit_info.limit = dailyList[item->row()].chargingSchedule.chargingSchedulePeriod[0].limit;
|
|
|
+ limit_info.startPeriod = m_profile_info.chargingSchedule.chargingSchedulePeriod[item->row()].startPeriod;
|
|
|
+ limit_info.unit = m_profile_info.chargingSchedule.chargingRateUnit;
|
|
|
+ limit_info.limit = m_profile_info.chargingSchedule.chargingSchedulePeriod[item->row()].limit;
|
|
|
|
|
|
m_limit_dialog->setLimit_info(limit_info);
|
|
|
auto ret = m_limit_dialog->exec();
|
|
|
if (ret == QDialog::Accepted) {
|
|
|
auto result = m_limit_dialog->limit_info();
|
|
|
+ m_profile_info.chargingSchedule.chargingSchedulePeriod[item->row()].startPeriod = result.startPeriod;
|
|
|
+ m_profile_info.chargingSchedule.chargingRateUnit = result.unit;
|
|
|
+ m_profile_info.chargingSchedule.chargingSchedulePeriod[item->row()].limit = result.limit;
|
|
|
+
|
|
|
+ m_profile_info.chargingSchedule.startTime = ui->startTime->dateTime().toString(Qt::ISODate);
|
|
|
+
|
|
|
+ refreshDailyData();
|
|
|
+ setIsModify(true);
|
|
|
+ emit valueChanged();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void FormTxDefaultProfileDetail::weekdayTableWidgetDoubleClicked(QListWidgetItem *item)
|
|
|
+{
|
|
|
+ ui->startTime->setDateTime(QDateTime::fromString(m_profile_info.chargingSchedule.startTime, Qt::ISODate));
|
|
|
+ GeneralInfo generalInfo;
|
|
|
+ generalInfo.startTime = m_profile_info.chargingSchedule.startTime;
|
|
|
+ generalInfo.curDay = ui->weeklyListwidget->row(item) + 1;
|
|
|
+ generalInfo.chargingRateUnit = m_profile_info.chargingSchedule.chargingRateUnit;
|
|
|
+ m_weekday_dialog->setGeneralInfo(generalInfo);
|
|
|
+
|
|
|
+ auto dayOfWeekList = getDayOfWeekLimitList(m_profile_info.chargingSchedule.chargingSchedulePeriod, generalInfo.startTime, generalInfo.curDay);
|
|
|
+ m_weekday_dialog->setInfo_list(dayOfWeekList);
|
|
|
+ auto ret = m_weekday_dialog->exec();
|
|
|
+ if (ret == QDialog::Accepted) {
|
|
|
+ auto limitList = m_weekday_dialog->info_list();
|
|
|
+ updateWeekPeriodList(m_profile_info.chargingSchedule.chargingSchedulePeriod, limitList, generalInfo.startTime, generalInfo.curDay);
|
|
|
+ setIsModify(true);
|
|
|
+ emit valueChanged();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void FormTxDefaultProfileDetail::addBtnClicked()
|
|
|
+{
|
|
|
+ m_limit_dialog->clear();
|
|
|
+ auto ret = m_limit_dialog->exec();
|
|
|
+ if (ret == QDialog::Accepted) {
|
|
|
+ auto result = m_limit_dialog->limit_info();
|
|
|
+
|
|
|
+ charging_schedule_period_info_t info;
|
|
|
+ info.startPeriod = result.startPeriod;
|
|
|
+ info.limit = result.limit;
|
|
|
+ m_profile_info.chargingSchedule.chargingSchedulePeriod.append(info);
|
|
|
+
|
|
|
+ GeneralInterface::sortByStartPeriod(m_profile_info.chargingSchedule.chargingSchedulePeriod);
|
|
|
+
|
|
|
+ refreshDailyData();
|
|
|
+ setIsModify(true);
|
|
|
+ emit valueChanged();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void FormTxDefaultProfileDetail::deleteBtnClicked()
|
|
|
+{
|
|
|
+ auto row = ui->dailyTablewidget->currentRow();
|
|
|
+ if (row < 0) return;
|
|
|
+ if (row > m_profile_info.chargingSchedule.chargingSchedulePeriod.size()) return;
|
|
|
+ m_profile_info.chargingSchedule.chargingSchedulePeriod.removeAt(row);
|
|
|
+
|
|
|
+ refreshDailyData();
|
|
|
+ setIsModify(true);
|
|
|
+ emit valueChanged();
|
|
|
+}
|
|
|
+
|
|
|
void FormTxDefaultProfileDetail::showEvent(QShowEvent *event)
|
|
|
{
|
|
|
setIsModify(false);
|
|
|
- m_profile_infos = ConfigManager::instance()->charging_profiles();
|
|
|
- m_profile_infos_map = GeneralInterface::chargingProfileToMap(m_profile_infos.chargingProfiles);
|
|
|
refreshData();
|
|
|
BaseWidget::showEvent(event);
|
|
|
}
|
|
|
|
|
|
+charging_profiles_detail_info_t FormTxDefaultProfileDetail::profile_info() const
|
|
|
+{
|
|
|
+ return m_profile_info;
|
|
|
+}
|
|
|
+
|
|
|
+void FormTxDefaultProfileDetail::setProfile_info(charging_profiles_detail_info_t newProfile_info)
|
|
|
+{
|
|
|
+ m_profile_info = newProfile_info;
|
|
|
+}
|
|
|
+
|
|
|
void FormTxDefaultProfileDetail::setGun_id(int newGun_id)
|
|
|
{
|
|
|
m_gun_id = newGun_id;
|