import uuid
from datetime import datetime, timezone, timedelta
import falcon
import mysql.connector
import simplejson as json
from core.useractivity import user_logger, admin_control, access_control
import config
class MicrogridCollection:
@staticmethod
def __init__():
""""Initializes MicrogridCollection"""
pass
@staticmethod
def on_options(req, resp):
resp.status = falcon.HTTP_200
@staticmethod
def on_get(req, resp):
access_control(req)
cnx = mysql.connector.connect(**config.myems_system_db)
cursor = cnx.cursor()
query = (" SELECT id, name, uuid "
" FROM tbl_contacts ")
cursor.execute(query)
rows_contacts = cursor.fetchall()
contact_dict = dict()
if rows_contacts is not None and len(rows_contacts) > 0:
for row in rows_contacts:
contact_dict[row[0]] = {"id": row[0],
"name": row[1],
"uuid": row[2]}
query = (" SELECT id, name, uuid "
" FROM tbl_cost_centers ")
cursor.execute(query)
rows_cost_centers = cursor.fetchall()
cost_center_dict = dict()
if rows_cost_centers is not None and len(rows_cost_centers) > 0:
for row in rows_cost_centers:
cost_center_dict[row[0]] = {"id": row[0],
"name": row[1],
"uuid": row[2]}
query = (" SELECT id, name, uuid, "
" address, postal_code, latitude, longitude, capacity, "
" contact_id, cost_center_id, serial_number, svg, description "
" FROM tbl_microgrids "
" ORDER BY id ")
cursor.execute(query)
rows_microgrids = cursor.fetchall()
result = list()
if rows_microgrids is not None and len(rows_microgrids) > 0:
for row in rows_microgrids:
contact = contact_dict.get(row[8], None)
cost_center = cost_center_dict.get(row[9], None)
meta_result = {"id": row[0],
"name": row[1],
"uuid": row[2],
"address": row[3],
"postal_code": row[4],
"latitude": row[5],
"longitude": row[6],
"capacity": row[7],
"contact": contact,
"cost_center": cost_center,
"serial_number": row[10],
"svg": row[11],
"description": row[12],
"qrcode": 'microgrid:' + row[2]}
result.append(meta_result)
cursor.close()
cnx.close()
resp.text = json.dumps(result)
@staticmethod
@user_logger
def on_post(req, resp):
"""Handles POST requests"""
admin_control(req)
try:
raw_json = req.stream.read().decode('utf-8')
except Exception as ex:
raise falcon.HTTPError(status=falcon.HTTP_400,
title='API.BAD_REQUEST',
description='API.FAILED_TO_READ_REQUEST_STREAM')
new_values = json.loads(raw_json)
if 'name' not in new_values['data'].keys() or \
not isinstance(new_values['data']['name'], str) or \
len(str.strip(new_values['data']['name'])) == 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_MICROGRID_NAME')
name = str.strip(new_values['data']['name'])
if 'address' not in new_values['data'].keys() or \
not isinstance(new_values['data']['address'], str) or \
len(str.strip(new_values['data']['address'])) == 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_ADDRESS_VALUE')
address = str.strip(new_values['data']['address'])
if 'postal_code' not in new_values['data'].keys() or \
not isinstance(new_values['data']['postal_code'], str) or \
len(str.strip(new_values['data']['postal_code'])) == 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_POSTAL_CODE_VALUE')
postal_code = str.strip(new_values['data']['postal_code'])
if 'latitude' not in new_values['data'].keys() or \
not (isinstance(new_values['data']['latitude'], float) or
isinstance(new_values['data']['latitude'], int)) or \
new_values['data']['latitude'] < -90.0 or \
new_values['data']['latitude'] > 90.0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_LATITUDE_VALUE')
latitude = new_values['data']['latitude']
if 'longitude' not in new_values['data'].keys() or \
not (isinstance(new_values['data']['longitude'], float) or
isinstance(new_values['data']['longitude'], int)) or \
new_values['data']['longitude'] < -180.0 or \
new_values['data']['longitude'] > 180.0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_LONGITUDE_VALUE')
longitude = new_values['data']['longitude']
if 'capacity' not in new_values['data'].keys() or \
not (isinstance(new_values['data']['capacity'], float) or
isinstance(new_values['data']['capacity'], int)) or \
new_values['data']['capacity'] <= 0.0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_CAPACITY_VALUE')
capacity = new_values['data']['capacity']
if 'contact_id' not in new_values['data'].keys() or \
not isinstance(new_values['data']['contact_id'], int) or \
new_values['data']['contact_id'] <= 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_CONTACT_ID')
contact_id = new_values['data']['contact_id']
if 'cost_center_id' not in new_values['data'].keys() or \
not isinstance(new_values['data']['cost_center_id'], int) or \
new_values['data']['cost_center_id'] <= 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_COST_CENTER_ID')
cost_center_id = new_values['data']['cost_center_id']
if 'serial_number' not in new_values['data'].keys() or \
not isinstance(new_values['data']['serial_number'], str) or \
len(str.strip(new_values['data']['serial_number'])) == 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_SERIAL_NUMBER')
serial_number = str.strip(new_values['data']['serial_number'])
if 'svg' not in new_values['data'].keys() or \
not isinstance(new_values['data']['svg'], str) or \
len(str.strip(new_values['data']['svg'])) == 0:
raise falcon.HTTPError(status=falcon.HTTP_400, title='API.BAD_REQUEST',
description='API.INVALID_SVG')
svg = str.strip(new_values['data']['svg'])
if
没有合适的资源?快使用搜索试试~ 我知道了~
MyEMS开源能源管理系统v4.1.0源代码
共2000个文件
js:1554个
py:295个
sql:85个
需积分: 0 2 下载量 154 浏览量
2024-02-08
11:06:08
上传
评论 2
收藏 74.34MB ZIP 举报
温馨提示
MyEMS开源能源管理系统用于建筑、工厂、商场、医院、园区的电、水、气等能源数据采集、分析、报表,还有光伏、储能、充电桩、微电网、设备控制、故障诊断、工单管理、人工智能优化等可选功能。资深专业团队开发维护,保障长期支持。用开源助力实现碳达峰碳中和目标! “技术上游”“源头厂家”“基础软件”“自主可控”“架构清晰”“运行稳定” 【官网】 https://myems.io
资源推荐
资源详情
资源评论
收起资源包目录
MyEMS开源能源管理系统v4.1.0源代码 (2000个子文件)
theme-dark-rtl.css 381KB
theme-dark.css 381KB
theme-rtl.css 367KB
theme.css 366KB
font-awesome.css 37KB
mapbox-gl.2.14.1.css 35KB
font-awesome.min.css 30KB
fonts-swap.css 19KB
fonts.css 19KB
daterangepicker.min.css 6KB
tree-icon.css 4KB
loading-bar.css 3KB
jquery.justifiedgallery.css 2KB
jquery.justifiedgallery.min.css 1KB
integralui.checkbox.css 975B
angular-csp.css 343B
jquery-jvectormap-2.0.2.css 0B
index.html 618B
angular.js 1.31MB
datatables.min.js 1.13MB
i18n.js 839KB
angular-ui-router.js 476KB
highcharts.js 290KB
jquery-ui.min.js 248KB
fullcalendar.js 231KB
fullcalendar.min.js 200KB
angular.min.js 173KB
angular-animate.js 153KB
d3.v3.js 141KB
jquery-jvectormap-world-mill-en.js 141KB
angular-mocks.js 132KB
dropzone.js 131KB
jquery.flot.js 120KB
jstree.min.js 115KB
angular-ui-router.min.js 115KB
ui-bootstrap-tpls-1.1.2.min.js 112KB
jquery-jvectormap-2.0.2.min.js 102KB
lang-all.js 102KB
rickshaw.min.js 75KB
bootstrap.js 74KB
moment.min.js 60KB
ocLazyLoad.js 58KB
markdown.js 58KB
angular-parse-ext.js 57KB
jquery.validate.min.js 56KB
qrcode.js 55KB
daterangepicker.js 52KB
CombinedEquipmentEfficiency.js 51KB
Chart.min.js 50KB
chosen.jquery.js 49KB
SpaceEnergyCategory.js 48KB
EquipmentEfficiency.js 48KB
CombinedEquipmentEnergyCategory.js 47KB
ShopfloorEnergyCategory.js 46KB
angular-datepicker.js 46KB
TenantEnergyCategory.js 46KB
StoreEnergyCategory.js 46KB
angular-route.js 46KB
footable.all.min.js 45KB
select.min.js 44KB
bootstrap-markdown.js 43KB
CombinedEquipmentCarbon.js 42KB
CombinedEquipmentCost.js 42KB
jquery.sparkline.min.js 42KB
SpaceCarbon.js 42KB
SpaceCost.js 42KB
angular-message-format.js 41KB
CombinedEquipmentIncome.js 41KB
CombinedEquipmentLoad.js 39KB
CombinedEquipmentStatistics.js 39KB
EquipmentEnergyCategory.js 39KB
ShopfloorCarbon.js 39KB
slick.min.js 39KB
ShopfloorCost.js 39KB
TenantCarbon.js 39KB
CombinedEquipmentSaving.js 39KB
StoreCarbon.js 39KB
EquipmentCarbon.js 39KB
TenantCost.js 39KB
StoreCost.js 39KB
EquipmentCost.js 39KB
bootstrap.min.js 39KB
ShopfloorStatistics.js 38KB
CombinedEquipmentEnergyItem.js 38KB
TenantStatistics.js 38KB
StoreStatistics.js 38KB
angular-resource.js 37KB
EquipmentIncome.js 37KB
ShopfloorSaving.js 37KB
TenantSaving.js 37KB
SpaceIncome.js 37KB
StoreSaving.js 37KB
EquipmentStatistics.js 36KB
EquipmentSaving.js 36KB
ShopfloorLoad.js 36KB
CombinedEquipmentOutput.js 36KB
TenantLoad.js 36KB
StoreLoad.js 36KB
SpaceSaving.js 36KB
ShopfloorEnergyItem.js 36KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
MyEMS
- 粉丝: 3
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功