From c9aa2a1f2355bc5212aaf8c424f01cdfae2fc93f Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Mon, 22 Mar 2021 18:13:16 +0800 Subject: [PATCH 1/9] added last_run_datetime and next_run_datetime to rule in admin UI --- admin/app/translations.js | 12 +++++++++--- admin/views/fdd/rule.html | 8 ++++++-- admin/views/fdd/rule.model.html | 19 ++++++++++++++++++- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/admin/app/translations.js b/admin/app/translations.js index 9b78a045..93afe6ec 100644 --- a/admin/app/translations.js +++ b/admin/app/translations.js @@ -100,9 +100,11 @@ function config($translateProvider) { PRIORITY: 'Priority', CHANNEL: 'Channel', IS_ENABLED: 'Is Enabled', + LAST_RUN_DATETIME: 'Last Run Datetime', + NEXT_RUN_DATETIME: 'Next Run Datetime', EXPRESSION: 'Expression', MESSAGE_TEMPLATE: 'Message Template', - DES_EXPRESSION: 'Click "Edit" for details', + CLICK_EDIT_FOR_DETAILS: 'Click "Edit" for details', SMS_ALARM_LIST: 'SMS Alarm List', RECIPIENT_NAME: 'Recipient Name', @@ -1151,9 +1153,11 @@ function config($translateProvider) { PRIORITY: '报警优先级', CHANNEL: '报警通道', IS_ENABLED: '报警开关', + LAST_RUN_DATETIME: '上次运行时间', + NEXT_RUN_DATETIME: '下次运行时间', EXPRESSION: '表达式', MESSAGE_TEMPLATE: '消息模板', - DES_EXPRESSION: '点击"修改"查看详情', + CLICK_EDIT_FOR_DETAILS: '点击"修改"查看详情', SMS_ALARM_LIST: '短信报警列表', RECIPIENT_NAME: '接收人', @@ -2199,9 +2203,11 @@ function config($translateProvider) { PRIORITY: 'Alarmpriorität', CHANNEL: 'Alarmkanal', IS_ENABLED: 'Alarmschalter', + LAST_RUN_DATETIME: 'Letzter Lauf Datetime', + NEXT_RUN_DATETIME: 'Nächster Lauf Datetime', EXPRESSION: 'Ausdruck', MESSAGE_TEMPLATE: 'Nachrichtenvorlage', - DES_EXPRESSION: 'Klicken Sie auf "Bearbeiten"', + CLICK_EDIT_FOR_DETAILS: 'Klicken Sie auf "Bearbeiten"', SMS_ALARM_LIST: 'SMS-Alarmliste', RECIPIENT_NAME: 'Empfänger', diff --git a/admin/views/fdd/rule.html b/admin/views/fdd/rule.html index fc6b8db0..9b74e43c 100644 --- a/admin/views/fdd/rule.html +++ b/admin/views/fdd/rule.html @@ -16,6 +16,8 @@ {{'FDD.PRIORITY' | translate}} {{'FDD.CHANNEL' | translate}} {{'FDD.IS_ENABLED' | translate}} + {{'FDD.LAST_RUN_DATETIME' | translate}} + {{'FDD.NEXT_RUN_DATETIME' | translate}} {{'FDD.EXPRESSION' | translate}} {{'FDD.MESSAGE_TEMPLATE' | translate}} {{'SETTING.ACTION' | translate}} @@ -31,8 +33,10 @@ {{ rule.priority }} {{ rule.channel }} {{ rule.is_enabled==true?'SETTING.ON':'SETTING.OFF' | translate}} - {{'FDD.DES_EXPRESSION' | translate}} - {{ rule.message_template }} + {{ rule.last_run_datetime | date:'yyyy-MM-ddTHH:mm:ss'}} + {{ rule.next_run_datetime | date:'yyyy-MM-ddTHH:mm:ss'}} + {{'FDD.CLICK_EDIT_FOR_DETAILS' | translate}} + {{'FDD.CLICK_EDIT_FOR_DETAILS' | translate}} {{'SETTING.EDIT' | translate}} {{'SETTING.DELETE' | translate}} diff --git a/admin/views/fdd/rule.model.html b/admin/views/fdd/rule.model.html index 578f9758..361bde1d 100644 --- a/admin/views/fdd/rule.model.html +++ b/admin/views/fdd/rule.model.html @@ -18,20 +18,36 @@
- @@ -42,6 +58,7 @@
+
{{'SETTING.INPUT_NAME' | translate}}
+
+
+ +
+ - +
+
+
-
+
- - - - - - - - - - -
- - -
-
-
-
+
diff --git a/myems-api/core/rule.py b/myems-api/core/rule.py index e1c64102..0667cf10 100644 --- a/myems-api/core/rule.py +++ b/myems-api/core/rule.py @@ -143,13 +143,13 @@ class RuleCollection: description='API.RULE_NAME_IS_ALREADY_IN_USE') add_row = (" INSERT INTO tbl_rules " - " (name, uuid, fdd_code, category, priority, " + " (name, uuid, category, fdd_code, priority, " " channel, expression, message_template, is_enabled) " " VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) ") cursor.execute(add_row, (name, str(uuid.uuid4()), - fdd_code, category, + fdd_code, priority, channel, expression, @@ -183,7 +183,7 @@ class RuleItem: cursor = cnx.cursor(dictionary=True) query = (" SELECT id, name, uuid, " - " fdd_code, category, priority, " + " category, fdd_code, priority, " " channel, expression, message_template, " " is_enabled, last_run_datetime_utc, next_run_datetime_utc " " FROM tbl_rules " @@ -204,7 +204,7 @@ class RuleItem: next_run_datetime = row['next_run_datetime_utc'].replace(tzinfo=timezone.utc).timestamp() * 1000 result = {"id": row['id'], "name": row['name'], "uuid": row['uuid'], - "fdd_code": row['fdd_code'], "category": row['category'], "priority": row['priority'], + "category": row['category'], "fdd_code": row['fdd_code'], "priority": row['priority'], "channel": row['channel'], "expression": row['expression'], "message_template": row['message_template'].replace("
", ""), "is_enabled": bool(row['is_enabled']), @@ -342,13 +342,13 @@ class RuleItem: description='API.RULE_NAME_IS_ALREADY_IN_USE') update_row = (" UPDATE tbl_rules " - " SET name = %s, fdd_code = %s, category = %s, priority = %s, " + " SET name = %s, category = %s, fdd_code = %s, priority = %s, " " channel = %s, expression = %s, message_template = %s, " " is_enabled = %s " " WHERE id = %s ") cursor.execute(update_row, (name, - fdd_code, category, + fdd_code, priority, channel, expression, From 58cc086cc632532658bfa27aab8d139528ffed94 Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 23 Mar 2021 11:32:07 +0800 Subject: [PATCH 3/9] fixed typo in database --- database/myems_system_db.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/myems_system_db.sql b/database/myems_system_db.sql index 10629e9e..85903178 100644 --- a/database/myems_system_db.sql +++ b/database/myems_system_db.sql @@ -792,7 +792,7 @@ CREATE INDEX `tbl_meters_index_3` ON `myems_system_db`.`tbl_meters` (`energy_ -- USE `myems_system_db`; -- INSERT INTO `myems_system_db`.`tbl_meters` --- (`id`, `name`, `uuid`, `energy_category_id`, `is_counted`, `max_hourly_value`, `cost_center_id`, `energy_item_id`, `master_meter_id`, `description`) +-- (`id`, `name`, `uuid`, `energy_category_id`, `is_counted`, `hourly_low_limit`, `hourly_high_limit`, `cost_center_id`, `energy_item_id`, `master_meter_id`, `description`) -- VALUES -- (1, '示例表1', '5ca47bc5-22c2-47fc-b906-33222191ea40', 1, true, 0.000, 999.999, 1, 1, null, 'meter1'), -- (2, '示例表2', '5ca47bc5-22c2-47fc-b906-33222191ea40', 1, true, 0.000, 999.999, 1, 1, 1, 'meter2'), From f38d7e3691ae1d0e1cd061dc9cc6e9ab57dbc5ea Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 23 Mar 2021 15:20:32 +0800 Subject: [PATCH 4/9] fixed NoneType issue in SpaceEfficiency Report API --- myems-api/reports/spaceefficiency.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/myems-api/reports/spaceefficiency.py b/myems-api/reports/spaceefficiency.py index b39314e6..afdd3e2f 100644 --- a/myems-api/reports/spaceefficiency.py +++ b/myems-api/reports/spaceefficiency.py @@ -652,7 +652,7 @@ class Reporting: (reporting_input[energy_category_id]['subtotal'] - base_input[energy_category_id]['subtotal']) / base_input[energy_category_id]['subtotal'] - if base_input[energy_category_id]['subtotal'] > 0.0 else None) + if base_input[energy_category_id]['subtotal'] > Decimal(0.0) else None) result['reporting_period_output'] = dict() result['reporting_period_output']['names'] = list() @@ -717,7 +717,10 @@ class Reporting: result['reporting_period_efficiency']['cumulations'].append(reporting_cumulation) result['reporting_period_efficiency']['increment_rates'].append( - ((reporting_cumulation - base_cumulation) / base_cumulation if (base_cumulation > Decimal(0.0)) + ((reporting_cumulation - base_cumulation) / base_cumulation + if (reporting_cumulation is not None and + base_cumulation is not None and + base_cumulation > Decimal(0.0)) else None) ) From c7559e04703792188a6a9ab501fdc0a7f0f92920 Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 23 Mar 2021 15:42:31 +0800 Subject: [PATCH 5/9] fixed NoneType error in SpaceLoad report in API --- myems-api/excelexporters/spaceload.py | 12 ++++++++---- myems-api/reports/spaceload.py | 9 ++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/myems-api/excelexporters/spaceload.py b/myems-api/excelexporters/spaceload.py index dfaf9e1d..07233d69 100644 --- a/myems-api/excelexporters/spaceload.py +++ b/myems-api/excelexporters/spaceload.py @@ -204,7 +204,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['averages'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['averages'][i], 2) \ + if reporting_period_data['averages'][i] is not None else 'N/A' current_row_number += 1 @@ -218,7 +219,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['averages_per_unit_area'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['averages_per_unit_area'][i], 2) \ + if reporting_period_data['averages_per_unit_area'][i] is not None else 'N/A' current_row_number += 1 @@ -267,7 +269,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['maximums'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['maximums'][i], 2) \ + if reporting_period_data['maximums'][i] is not None else 'N/A' current_row_number += 1 @@ -281,7 +284,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['maximums_per_unit_area'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['maximums_per_unit_area'][i], 2) \ + if reporting_period_data['maximums_per_unit_area'][i] is not None else 'N/A' current_row_number += 1 diff --git a/myems-api/reports/spaceload.py b/myems-api/reports/spaceload.py index 96bf3851..77837326 100644 --- a/myems-api/reports/spaceload.py +++ b/myems-api/reports/spaceload.py @@ -524,13 +524,15 @@ class Reporting: else None) result['reporting_period']['averages_increment_rate'].append( (reporting[energy_category_id]['average'] - base[energy_category_id]['average']) / - base[energy_category_id]['average'] if (base[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] if (reporting[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] is not None and base[energy_category_id]['average'] > Decimal(0.0)) else None) result['reporting_period']['maximums'].append(reporting[energy_category_id]['maximum']) result['reporting_period']['maximums_increment_rate'].append( (reporting[energy_category_id]['maximum'] - base[energy_category_id]['maximum']) / - base[energy_category_id]['maximum'] if (base[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] if (reporting[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] is not None and base[energy_category_id]['maximum'] > Decimal(0.0)) else None) result['reporting_period']['maximums_per_unit_area'].append( @@ -542,7 +544,8 @@ class Reporting: result['reporting_period']['factors'].append(reporting[energy_category_id]['factor']) result['reporting_period']['factors_increment_rate'].append( (reporting[energy_category_id]['factor'] - base[energy_category_id]['factor']) / - base[energy_category_id]['factor'] if (base[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] if (reporting[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] is not None and base[energy_category_id]['factor'] > Decimal(0.0)) else None) From 9538ffc1e322cc3e9b9e6d50561f744a0a57eb3e Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 23 Mar 2021 15:48:44 +0800 Subject: [PATCH 6/9] fixed NoneType error in EquipmentLoad Report API --- myems-api/reports/equipmentload.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/myems-api/reports/equipmentload.py b/myems-api/reports/equipmentload.py index 71091a23..1674e4c3 100644 --- a/myems-api/reports/equipmentload.py +++ b/myems-api/reports/equipmentload.py @@ -500,19 +500,22 @@ class Reporting: result['reporting_period']['averages'].append(reporting[energy_category_id]['average']) result['reporting_period']['averages_increment_rate'].append( (reporting[energy_category_id]['average'] - base[energy_category_id]['average']) / - base[energy_category_id]['average'] if (base[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] if (reporting[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] is not None and base[energy_category_id]['average'] > Decimal(0.0)) else None) result['reporting_period']['maximums'].append(reporting[energy_category_id]['maximum']) result['reporting_period']['maximums_increment_rate'].append( (reporting[energy_category_id]['maximum'] - base[energy_category_id]['maximum']) / - base[energy_category_id]['maximum'] if (base[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] if (reporting[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] is not None and base[energy_category_id]['maximum'] > Decimal(0.0)) else None) result['reporting_period']['factors'].append(reporting[energy_category_id]['factor']) result['reporting_period']['factors_increment_rate'].append( (reporting[energy_category_id]['factor'] - base[energy_category_id]['factor']) / - base[energy_category_id]['factor'] if (base[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] if (reporting[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] is not None and base[energy_category_id]['factor'] > Decimal(0.0)) else None) From 6a1b986f56b22ca8cfb3f250ef9a84418bd1cb23 Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 23 Mar 2021 15:54:48 +0800 Subject: [PATCH 7/9] fixed NoneType error in TenantLoad Report API --- myems-api/excelexporters/tenantload.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/myems-api/excelexporters/tenantload.py b/myems-api/excelexporters/tenantload.py index 6969079e..0118835d 100644 --- a/myems-api/excelexporters/tenantload.py +++ b/myems-api/excelexporters/tenantload.py @@ -205,7 +205,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['averages'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['averages'][i], 2) \ + if reporting_period_data['averages'][i] is not None else 'N/A' current_row_number += 1 @@ -219,7 +220,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['averages_per_unit_area'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['averages_per_unit_area'][i], 2) \ + if reporting_period_data['averages_per_unit_area'][i] is not None else 'N/A' current_row_number += 1 @@ -268,7 +270,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['maximums'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['maximums'][i], 2) \ + if reporting_period_data['maximums'][i] is not None else 'N/A' current_row_number += 1 @@ -282,7 +285,8 @@ def generate_excel(report, name, reporting_start_datetime_local, reporting_end_d ws[col + str(current_row_number)].font = name_font ws[col + str(current_row_number)].alignment = c_c_alignment ws[col + str(current_row_number)].border = f_border - ws[col + str(current_row_number)] = round(reporting_period_data['maximums_per_unit_area'][i], 2) + ws[col + str(current_row_number)] = round(reporting_period_data['maximums_per_unit_area'][i], 2) \ + if reporting_period_data['maximums_per_unit_area'][i] is not None else 'N/A' current_row_number += 1 From 1448c17749e2884f7b5a5d6e0db8fc74cc3ec424 Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 23 Mar 2021 15:58:50 +0800 Subject: [PATCH 8/9] fixed NoneType error in StoreLoad report API --- myems-api/reports/storeload.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/myems-api/reports/storeload.py b/myems-api/reports/storeload.py index 7bc04fc3..6ab5c27a 100644 --- a/myems-api/reports/storeload.py +++ b/myems-api/reports/storeload.py @@ -524,13 +524,15 @@ class Reporting: else None) result['reporting_period']['averages_increment_rate'].append( (reporting[energy_category_id]['average'] - base[energy_category_id]['average']) / - base[energy_category_id]['average'] if (base[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] if (reporting[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] is not None and base[energy_category_id]['average'] > Decimal(0.0)) else None) result['reporting_period']['maximums'].append(reporting[energy_category_id]['maximum']) result['reporting_period']['maximums_increment_rate'].append( (reporting[energy_category_id]['maximum'] - base[energy_category_id]['maximum']) / - base[energy_category_id]['maximum'] if (base[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] if (reporting[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] is not None and base[energy_category_id]['maximum'] > Decimal(0.0)) else None) result['reporting_period']['maximums_per_unit_area'].append( @@ -542,7 +544,8 @@ class Reporting: result['reporting_period']['factors'].append(reporting[energy_category_id]['factor']) result['reporting_period']['factors_increment_rate'].append( (reporting[energy_category_id]['factor'] - base[energy_category_id]['factor']) / - base[energy_category_id]['factor'] if (base[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] if (reporting[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] is not None and base[energy_category_id]['factor'] > Decimal(0.0)) else None) From 7a864230683e0eada80aa98a985d254941cb352b Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Tue, 23 Mar 2021 16:01:44 +0800 Subject: [PATCH 9/9] fixed NoneType error in CombinedEquipmentLoad report in API --- myems-api/reports/combinedequipmentload.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/myems-api/reports/combinedequipmentload.py b/myems-api/reports/combinedequipmentload.py index 0751dc6e..58be6f08 100644 --- a/myems-api/reports/combinedequipmentload.py +++ b/myems-api/reports/combinedequipmentload.py @@ -507,19 +507,22 @@ class Reporting: result['reporting_period']['averages'].append(reporting[energy_category_id]['average']) result['reporting_period']['averages_increment_rate'].append( (reporting[energy_category_id]['average'] - base[energy_category_id]['average']) / - base[energy_category_id]['average'] if (base[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] if (reporting[energy_category_id]['average'] is not None and + base[energy_category_id]['average'] is not None and base[energy_category_id]['average'] > Decimal(0.0)) else None) result['reporting_period']['maximums'].append(reporting[energy_category_id]['maximum']) result['reporting_period']['maximums_increment_rate'].append( (reporting[energy_category_id]['maximum'] - base[energy_category_id]['maximum']) / - base[energy_category_id]['maximum'] if (base[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] if (reporting[energy_category_id]['maximum'] is not None and + base[energy_category_id]['maximum'] is not None and base[energy_category_id]['maximum'] > Decimal(0.0)) else None) result['reporting_period']['factors'].append(reporting[energy_category_id]['factor']) result['reporting_period']['factors_increment_rate'].append( (reporting[energy_category_id]['factor'] - base[energy_category_id]['factor']) / - base[energy_category_id]['factor'] if (base[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] if (reporting[energy_category_id]['factor'] is not None and + base[energy_category_id]['factor'] is not None and base[energy_category_id]['factor'] > Decimal(0.0)) else None)