added associated equipment data to combinedequipmentstatistics report in API
parent
4bd5b175f4
commit
8ae8d33618
|
@ -408,6 +408,65 @@ def generate_excel(report,
|
||||||
ser.marker.size = 5
|
ser.marker.size = 5
|
||||||
ws.add_chart(line, 'B' + str(analysis_end_row_number + 6 * i))
|
ws.add_chart(line, 'B' + str(analysis_end_row_number + 6 * i))
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
|
||||||
|
has_associated_equipment_flag = True
|
||||||
|
|
||||||
|
if "associated_equipment" not in report.keys() or \
|
||||||
|
"energy_category_names" not in report['associated_equipment'].keys() or \
|
||||||
|
len(report['associated_equipment']["energy_category_names"]) == 0 \
|
||||||
|
or 'associated_equipment_names_array' not in report['associated_equipment'].keys() \
|
||||||
|
or report['associated_equipment']['associated_equipment_names_array'] is None \
|
||||||
|
or len(report['associated_equipment']['associated_equipment_names_array']) == 0 \
|
||||||
|
or len(report['associated_equipment']['associated_equipment_names_array'][0]) == 0:
|
||||||
|
has_associated_equipment_flag = False
|
||||||
|
|
||||||
|
if has_associated_equipment_flag:
|
||||||
|
associated_equipment = report['associated_equipment']
|
||||||
|
|
||||||
|
current_row_number = detailed_start_row_number + 4 + time_len
|
||||||
|
|
||||||
|
ws['B' + str(current_row_number)].font = title_font
|
||||||
|
ws['B' + str(current_row_number)] = name + ' 相关设备数据'
|
||||||
|
|
||||||
|
current_row_number += 1
|
||||||
|
table_start_row_number = current_row_number
|
||||||
|
|
||||||
|
ws.row_dimensions[current_row_number].height = 60
|
||||||
|
ws['B' + str(current_row_number)].fill = table_fill
|
||||||
|
ws['B' + str(current_row_number)].font = name_font
|
||||||
|
ws['B' + str(current_row_number)].alignment = c_c_alignment
|
||||||
|
ws['B' + str(current_row_number)].border = f_border
|
||||||
|
ws['B' + str(current_row_number)] = '相关设备'
|
||||||
|
ca_len = len(associated_equipment['energy_category_names'])
|
||||||
|
|
||||||
|
for i in range(0, ca_len):
|
||||||
|
row = chr(ord('C') + i)
|
||||||
|
ws[row + str(current_row_number)].fill = table_fill
|
||||||
|
ws[row + str(current_row_number)].font = name_font
|
||||||
|
ws[row + str(current_row_number)].alignment = c_c_alignment
|
||||||
|
ws[row + str(current_row_number)].border = f_border
|
||||||
|
ws[row + str(current_row_number)] = \
|
||||||
|
reporting_period_data['names'][i] + " (" + reporting_period_data['units'][i] + ")"
|
||||||
|
|
||||||
|
associated_equipment_len = len(associated_equipment['associated_equipment_names_array'][0])
|
||||||
|
|
||||||
|
for i in range(0, associated_equipment_len):
|
||||||
|
current_row_number += 1
|
||||||
|
row = str(current_row_number)
|
||||||
|
|
||||||
|
ws['B' + row].font = title_font
|
||||||
|
ws['B' + row].alignment = c_c_alignment
|
||||||
|
ws['B' + row] = associated_equipment['associated_equipment_names_array'][0][i]
|
||||||
|
ws['B' + row].border = f_border
|
||||||
|
|
||||||
|
for j in range(0, ca_len):
|
||||||
|
col = chr(ord('C') + j)
|
||||||
|
ws[col + row].font = title_font
|
||||||
|
ws[col + row].alignment = c_c_alignment
|
||||||
|
ws[col + row] = round(associated_equipment['subtotals_array'][j][i], 2)
|
||||||
|
ws[col + row].border = f_border
|
||||||
|
|
||||||
filename = str(uuid.uuid4()) + '.xlsx'
|
filename = str(uuid.uuid4()) + '.xlsx'
|
||||||
wb.save(filename)
|
wb.save(filename)
|
||||||
|
|
||||||
|
|
|
@ -23,11 +23,13 @@ class Reporting:
|
||||||
# Step 2: query the combined equipment
|
# Step 2: query the combined equipment
|
||||||
# Step 3: query energy categories
|
# Step 3: query energy categories
|
||||||
# Step 4: query associated points
|
# Step 4: query associated points
|
||||||
# Step 5: query base period energy input
|
# Step 5: query associated equipments
|
||||||
# Step 6: query reporting period energy input
|
# Step 6: query base period energy input
|
||||||
# Step 7: query tariff data
|
# Step 7: query reporting period energy input
|
||||||
# Step 8: query associated points data
|
# Step 8: query tariff data
|
||||||
# Step 9: construct the report
|
# Step 9: query associated points data
|
||||||
|
# Step 10: query associated equipments energy input
|
||||||
|
# Step 11: construct the report
|
||||||
####################################################################################################################
|
####################################################################################################################
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def on_get(req, resp):
|
def on_get(req, resp):
|
||||||
|
@ -70,7 +72,7 @@ class Reporting:
|
||||||
try:
|
try:
|
||||||
base_start_datetime_utc = datetime.strptime(base_start_datetime_local,
|
base_start_datetime_utc = datetime.strptime(base_start_datetime_local,
|
||||||
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
||||||
timedelta(minutes=timezone_offset)
|
timedelta(minutes=timezone_offset)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
description="API.INVALID_BASE_PERIOD_START_DATETIME")
|
description="API.INVALID_BASE_PERIOD_START_DATETIME")
|
||||||
|
@ -81,7 +83,7 @@ class Reporting:
|
||||||
try:
|
try:
|
||||||
base_end_datetime_utc = datetime.strptime(base_end_datetime_local,
|
base_end_datetime_utc = datetime.strptime(base_end_datetime_local,
|
||||||
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
||||||
timedelta(minutes=timezone_offset)
|
timedelta(minutes=timezone_offset)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
description="API.INVALID_BASE_PERIOD_END_DATETIME")
|
description="API.INVALID_BASE_PERIOD_END_DATETIME")
|
||||||
|
@ -99,7 +101,7 @@ class Reporting:
|
||||||
try:
|
try:
|
||||||
reporting_start_datetime_utc = datetime.strptime(reporting_start_datetime_local,
|
reporting_start_datetime_utc = datetime.strptime(reporting_start_datetime_local,
|
||||||
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
||||||
timedelta(minutes=timezone_offset)
|
timedelta(minutes=timezone_offset)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
description="API.INVALID_REPORTING_PERIOD_START_DATETIME")
|
description="API.INVALID_REPORTING_PERIOD_START_DATETIME")
|
||||||
|
@ -112,7 +114,7 @@ class Reporting:
|
||||||
try:
|
try:
|
||||||
reporting_end_datetime_utc = datetime.strptime(reporting_end_datetime_local,
|
reporting_end_datetime_utc = datetime.strptime(reporting_end_datetime_local,
|
||||||
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
'%Y-%m-%dT%H:%M:%S').replace(tzinfo=timezone.utc) - \
|
||||||
timedelta(minutes=timezone_offset)
|
timedelta(minutes=timezone_offset)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
raise falcon.HTTPError(falcon.HTTP_400, title='API.BAD_REQUEST',
|
||||||
description="API.INVALID_REPORTING_PERIOD_END_DATETIME")
|
description="API.INVALID_REPORTING_PERIOD_END_DATETIME")
|
||||||
|
@ -235,7 +237,20 @@ class Reporting:
|
||||||
point_list.append({"id": row[0], "name": row[1], "units": row[2], "object_type": row[3]})
|
point_list.append({"id": row[0], "name": row[1], "units": row[2], "object_type": row[3]})
|
||||||
|
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
# Step 5: query base period energy input
|
# Step 5: query associated equipments
|
||||||
|
################################################################################################################
|
||||||
|
associated_equipment_list = list()
|
||||||
|
cursor_system.execute(" SELECT e.id, e.name "
|
||||||
|
" FROM tbl_equipments e,tbl_combined_equipments_equipments ee"
|
||||||
|
" WHERE ee.combined_equipment_id = %s AND e.id = ee.equipment_id"
|
||||||
|
" ORDER BY id ", (combined_equipment['id'],))
|
||||||
|
rows_associated_equipments = cursor_system.fetchall()
|
||||||
|
if rows_associated_equipments is not None and len(rows_associated_equipments) > 0:
|
||||||
|
for row in rows_associated_equipments:
|
||||||
|
associated_equipment_list.append({"id": row[0], "name": row[1]})
|
||||||
|
|
||||||
|
################################################################################################################
|
||||||
|
# Step 6: query base period energy input
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
base = dict()
|
base = dict()
|
||||||
if energy_category_set is not None and len(energy_category_set) > 0:
|
if energy_category_set is not None and len(energy_category_set) > 0:
|
||||||
|
@ -295,7 +310,7 @@ class Reporting:
|
||||||
base[energy_category_id]['subtotal'] += actual_value
|
base[energy_category_id]['subtotal'] += actual_value
|
||||||
|
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
# Step 6: query reporting period energy input
|
# Step 7: query reporting period energy input
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
reporting = dict()
|
reporting = dict()
|
||||||
if energy_category_set is not None and len(energy_category_set) > 0:
|
if energy_category_set is not None and len(energy_category_set) > 0:
|
||||||
|
@ -355,7 +370,7 @@ class Reporting:
|
||||||
reporting[energy_category_id]['subtotal'] += actual_value
|
reporting[energy_category_id]['subtotal'] += actual_value
|
||||||
|
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
# Step 7: query tariff data
|
# Step 8: query tariff data
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
parameters_data = dict()
|
parameters_data = dict()
|
||||||
parameters_data['names'] = list()
|
parameters_data['names'] = list()
|
||||||
|
@ -381,7 +396,7 @@ class Reporting:
|
||||||
parameters_data['values'].append(tariff_value_list)
|
parameters_data['values'].append(tariff_value_list)
|
||||||
|
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
# Step 8: query associated points data
|
# Step 9: query associated points data
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
for point in point_list:
|
for point in point_list:
|
||||||
point_values = []
|
point_values = []
|
||||||
|
@ -446,7 +461,37 @@ class Reporting:
|
||||||
parameters_data['values'].append(point_values)
|
parameters_data['values'].append(point_values)
|
||||||
|
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
# Step 9: construct the report
|
# Step 10: query associated equipments energy input
|
||||||
|
################################################################################################################
|
||||||
|
associated_equipment_data = dict()
|
||||||
|
|
||||||
|
if energy_category_set is not None and len(energy_category_set) > 0:
|
||||||
|
for energy_category_id in energy_category_set:
|
||||||
|
associated_equipment_data[energy_category_id] = dict()
|
||||||
|
associated_equipment_data[energy_category_id]['associated_equipment_names'] = list()
|
||||||
|
associated_equipment_data[energy_category_id]['subtotals'] = list()
|
||||||
|
for associated_equipment in associated_equipment_list:
|
||||||
|
associated_equipment_data[energy_category_id]['associated_equipment_names'].append(
|
||||||
|
associated_equipment['name'])
|
||||||
|
|
||||||
|
cursor_energy.execute(" SELECT SUM(actual_value) "
|
||||||
|
" FROM tbl_equipment_input_category_hourly "
|
||||||
|
" WHERE equipment_id = %s "
|
||||||
|
" AND energy_category_id = %s "
|
||||||
|
" AND start_datetime_utc >= %s "
|
||||||
|
" AND start_datetime_utc < %s "
|
||||||
|
" ORDER BY start_datetime_utc ",
|
||||||
|
(associated_equipment['id'],
|
||||||
|
energy_category_id,
|
||||||
|
reporting_start_datetime_utc,
|
||||||
|
reporting_end_datetime_utc))
|
||||||
|
row_subtotal = cursor_energy.fetchone()
|
||||||
|
|
||||||
|
subtotal = Decimal(0.0) if (row_subtotal is None or row_subtotal[0] is None) else row_subtotal[0]
|
||||||
|
associated_equipment_data[energy_category_id]['subtotals'].append(subtotal)
|
||||||
|
|
||||||
|
################################################################################################################
|
||||||
|
# Step 11: construct the report
|
||||||
################################################################################################################
|
################################################################################################################
|
||||||
if cursor_system:
|
if cursor_system:
|
||||||
cursor_system.close()
|
cursor_system.close()
|
||||||
|
@ -566,6 +611,22 @@ class Reporting:
|
||||||
"values": parameters_data['values']
|
"values": parameters_data['values']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result['associated_equipment'] = dict()
|
||||||
|
result['associated_equipment']['energy_category_names'] = list()
|
||||||
|
result['associated_equipment']['units'] = list()
|
||||||
|
result['associated_equipment']['associated_equipment_names_array'] = list()
|
||||||
|
result['associated_equipment']['subtotals_array'] = list()
|
||||||
|
if energy_category_set is not None and len(energy_category_set) > 0:
|
||||||
|
for energy_category_id in energy_category_set:
|
||||||
|
result['associated_equipment']['energy_category_names'].append(
|
||||||
|
energy_category_dict[energy_category_id]['name'])
|
||||||
|
result['associated_equipment']['units'].append(
|
||||||
|
energy_category_dict[energy_category_id]['unit_of_measure'])
|
||||||
|
result['associated_equipment']['associated_equipment_names_array'].append(
|
||||||
|
associated_equipment_data[energy_category_id]['associated_equipment_names'])
|
||||||
|
result['associated_equipment']['subtotals_array'].append(
|
||||||
|
associated_equipment_data[energy_category_id]['subtotals'])
|
||||||
|
|
||||||
# export result to Excel file and then encode the file to base64 string
|
# export result to Excel file and then encode the file to base64 string
|
||||||
result['excel_bytes_base64'] = excelexporters.combinedequipmentstatistics.export(result,
|
result['excel_bytes_base64'] = excelexporters.combinedequipmentstatistics.export(result,
|
||||||
combined_equipment['name'],
|
combined_equipment['name'],
|
||||||
|
|
Loading…
Reference in New Issue