|
@@ -9,7 +9,7 @@ from sqlalchemy.orm import Session
|
|
|
from werkzeug.datastructures import FileStorage
|
|
|
|
|
|
from app.defines import StatesCode, Module, OperationType
|
|
|
-from app.modle.device import DeviceType, SecurityDevice
|
|
|
+from app.modle.device import DeviceType, SecurityDevice, EnergyDeviceType
|
|
|
from app.utils.jwt_util import login_required
|
|
|
from app.utils.save_log import save_log
|
|
|
from app.utils.util import to_dict
|
|
@@ -26,7 +26,7 @@ device_type.add_argument(name='name', type=str, location='form', required=False,
|
|
|
|
|
|
@ns.route('/device_type')
|
|
|
class DeviceTypeApi(Resource):
|
|
|
- method_decorators = [login_required]
|
|
|
+ # method_decorators = [login_required]
|
|
|
|
|
|
@ns.doc(id='device_list', description='设备类别列表')
|
|
|
@ns.expect(device_type_list)
|
|
@@ -65,7 +65,8 @@ class DeviceTypeApi(Resource):
|
|
|
try:
|
|
|
with Session(current_app.engine) as session:
|
|
|
stmt = insert(DeviceType).values(
|
|
|
- type_name=device_name
|
|
|
+ type_name=device_name,
|
|
|
+ device_ids=json.dumps([])
|
|
|
)
|
|
|
session.execute(stmt)
|
|
|
session.commit()
|
|
@@ -105,25 +106,68 @@ class DeviceTypeApi(Resource):
|
|
|
save_log(request, Module.DEVICE, OperationType.UPDATE, StatesCode.UNKNOWN_ERROR)
|
|
|
return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
|
|
|
|
|
|
+ @ns.doc(id='delete_device', description='删除设备类别')
|
|
|
+ @ns.expect(device_type)
|
|
|
+ def delete(self):
|
|
|
+ """删除设备类别"""
|
|
|
+
|
|
|
+ device_type_id = request.form.get('id')
|
|
|
+
|
|
|
+ if device_type_id is None:
|
|
|
+ return jsonify(code=StatesCode.PARA_ERROR, message='设备类别id不能为空')
|
|
|
+
|
|
|
+ try:
|
|
|
+ with Session(current_app.engine) as session:
|
|
|
+ stmt = delete(DeviceType).where(DeviceType.id == device_type_id)
|
|
|
+ session.execute(stmt)
|
|
|
+ session.commit()
|
|
|
+
|
|
|
+ save_log(request, Module.DEVICE, OperationType.DELETE, StatesCode.SUCCESS)
|
|
|
+
|
|
|
+ return jsonify(code=StatesCode.SUCCESS, message='成功')
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ save_log(request, Module.DEVICE, OperationType.DELETE, StatesCode.UNKNOWN_ERROR)
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
|
|
|
+
|
|
|
+
|
|
|
+@ns.route('/device_kind')
|
|
|
+class DeviceKindApi(Resource):
|
|
|
+ @ns.doc(description='设备种类列表')
|
|
|
+ def get(self):
|
|
|
+ """获取设备种类"""
|
|
|
+ try:
|
|
|
+ with Session(current_app.engine) as session:
|
|
|
+ stmt = select(EnergyDeviceType)
|
|
|
+ results = session.execute(stmt).scalars().all()
|
|
|
+
|
|
|
+ save_log(request, Module.DEVICE, OperationType.INQUIRE, StatesCode.SUCCESS)
|
|
|
+
|
|
|
+ return jsonify(code=StatesCode.SUCCESS, message='成功', data=to_dict(results))
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ save_log(request, Module.DEVICE, OperationType.INQUIRE, StatesCode.UNKNOWN_ERROR)
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
|
|
|
+
|
|
|
|
|
|
device_list = reqparse.RequestParser(bundle_errors=True)
|
|
|
device_list.add_argument(name='id', type=str, location='args', required=False, help='设备类别id')
|
|
|
-device_list.add_argument(name='name', type=str, location='args', required=False, help='过滤设备名')
|
|
|
+# device_list.add_argument(name='name', type=str, location='args', required=False, help='过滤设备名')
|
|
|
device_list.add_argument(name='page_size', type=int, location='args', required=False, help='每页记录数量,默认:20')
|
|
|
device_list.add_argument(name='page', type=int, location='args', required=False, help='第几页')
|
|
|
|
|
|
|
|
|
@ns.route('/device_list')
|
|
|
class DeviceListApi(Resource):
|
|
|
- method_decorators = [login_required]
|
|
|
+ # method_decorators = [login_required]
|
|
|
|
|
|
- @ns.doc(id='device_list', description='设备列表')
|
|
|
+ @ns.doc(id='device_list', description='根据类别获取设备列表')
|
|
|
@ns.expect(device_list)
|
|
|
def get(self):
|
|
|
- """获取设备列表"""
|
|
|
+ """根据类别获取设备列表"""
|
|
|
|
|
|
device_type_id = request.args.get('id')
|
|
|
- device_name = request.args.get('name')
|
|
|
+ # device_name = request.args.get('name')
|
|
|
page_size = int(request.args.get('page_size', 20))
|
|
|
page = int(request.args.get('page', 1))
|
|
|
|
|
@@ -132,14 +176,15 @@ class DeviceListApi(Resource):
|
|
|
|
|
|
try:
|
|
|
with Session(current_app.engine) as session:
|
|
|
- stmt = select(SecurityDevice).where(SecurityDevice.device_group == device_type_id)
|
|
|
-
|
|
|
- if device_name:
|
|
|
- stmt = stmt.where(SecurityDevice.device_name.like("%{}%".format(device_name)))
|
|
|
+ stmt = select(DeviceType.device_ids).where(DeviceType.id == device_type_id)
|
|
|
+ device_ids = session.execute(stmt).scalars().first()
|
|
|
|
|
|
- stmt = stmt.offset(page_size * (page - 1)).limit(page_size)
|
|
|
-
|
|
|
- results = session.execute(stmt).scalars().all()
|
|
|
+ if device_ids:
|
|
|
+ stmt = select(SecurityDevice).where(SecurityDevice.id.in_(json.loads(device_ids))).offset(
|
|
|
+ page_size * (page - 1)).limit(page_size)
|
|
|
+ results = session.execute(stmt).scalars().all()
|
|
|
+ else:
|
|
|
+ results = []
|
|
|
|
|
|
save_log(request, Module.DEVICE, OperationType.INQUIRE, StatesCode.SUCCESS)
|
|
|
|
|
@@ -153,24 +198,31 @@ class DeviceListApi(Resource):
|
|
|
device = reqparse.RequestParser(bundle_errors=True)
|
|
|
device.add_argument(name='id', type=str, location='args', required=True, help='设备id')
|
|
|
|
|
|
+add_device = reqparse.RequestParser(bundle_errors=True)
|
|
|
+add_device.add_argument(name='device_ids', type=str, location='form', required=False, help='设备ids')
|
|
|
+add_device.add_argument(name='device_type_id', type=str, location='form', required=False, help='设备类别id')
|
|
|
+
|
|
|
+delete_device = reqparse.RequestParser(bundle_errors=True)
|
|
|
+delete_device.add_argument(name='device_id', type=str, location='form', required=False, help='设备id')
|
|
|
+delete_device.add_argument(name='device_type_id', type=str, location='form', required=False, help='设备类别id')
|
|
|
+
|
|
|
+
|
|
|
device_details = reqparse.RequestParser(bundle_errors=True)
|
|
|
device_details.add_argument(name='id', type=str, location='form', required=False, help='设备id')
|
|
|
device_details.add_argument(name='device_name', type=str, location='form', required=False, help='设备名称')
|
|
|
device_details.add_argument(name='device_id', type=str, location='form', required=False, help='设备id')
|
|
|
device_details.add_argument(name='device_type', type=str, location='form', required=False, help='设备类型(1-摄像头)')
|
|
|
device_details.add_argument(name='device_location', type=str, location='form', required=False, help='设备位置')
|
|
|
-device_details.add_argument(name='device_age', type=str, location='form', required=False, help='设备年限')
|
|
|
-device_details.add_argument(name='company_id', type=str, location='form', required=False, help='所属单位ID')
|
|
|
-device_details.add_argument(name='user_id', type=str, location='form', required=False, help='设备责任人')
|
|
|
-device_details.add_argument(name='device_group', type=str, location='form', required=False, help='设备分组')
|
|
|
+device_details.add_argument(name='loop_detail', type=str, location='form', required=False, help='回路地址')
|
|
|
+device_details.add_argument(name='gateway_code', type=str, location='form', required=False, help='所属单位ID')
|
|
|
+device_details.add_argument(name='gateway_ip', type=str, location='form', required=False, help='网关服务器')
|
|
|
+device_details.add_argument(name='usage', type=str, location='form', required=False, help='用途')
|
|
|
device_details.add_argument(name='status', type=str, location='form', required=False, help='设备状态(1-开启)')
|
|
|
-device_details.add_argument(name='floor_id', type=str, location='form', required=False, help='楼层id')
|
|
|
-device_details.add_argument(name='third_id', type=str, location='form', required=False, help='')
|
|
|
|
|
|
|
|
|
@ns.route('/device')
|
|
|
class DeviceApi(Resource):
|
|
|
- method_decorators = [login_required]
|
|
|
+ # method_decorators = [login_required]
|
|
|
|
|
|
@ns.doc(id='device', description='设备详情')
|
|
|
@ns.expect(device)
|
|
@@ -195,39 +247,25 @@ class DeviceApi(Resource):
|
|
|
save_log(request, Module.DEVICE, OperationType.INQUIRE, StatesCode.UNKNOWN_ERROR)
|
|
|
return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
|
|
|
|
|
|
- @ns.doc(id='add_device', description='添加设备详情')
|
|
|
- @ns.expect(device_details)
|
|
|
+ @ns.doc(id='add_device', description='添加设备')
|
|
|
+ @ns.expect(add_device)
|
|
|
def post(self):
|
|
|
"""添加设备"""
|
|
|
+ device_ids = request.form.get('device_ids')
|
|
|
+ device_type_id = request.form.get('device_type_id', [])
|
|
|
|
|
|
- device_name = request.form.get('device_name')
|
|
|
- device_id = request.form.get('device_id')
|
|
|
- device_type = request.form.get('device_type')
|
|
|
- device_location = request.form.get('device_location')
|
|
|
- device_age = request.form.get('device_age')
|
|
|
- company_id = request.form.get('company_id')
|
|
|
- user_id = request.form.get('user_id')
|
|
|
- device_group = request.form.get('device_group')
|
|
|
- status = request.form.get('status')
|
|
|
- floor_id = request.form.get('floor_id')
|
|
|
- third_id = request.form.get('third_id')
|
|
|
-
|
|
|
- if device_name is None:
|
|
|
- return jsonify(code=StatesCode.PARA_ERROR, message='设备名称不能为空')
|
|
|
+ if device_ids is None:
|
|
|
+ return jsonify(code=StatesCode.PARA_ERROR, message='设备id不能为空')
|
|
|
try:
|
|
|
with Session(current_app.engine) as session:
|
|
|
- stmt = insert(SecurityDevice).values(
|
|
|
- device_name=device_name,
|
|
|
- device_id=device_id,
|
|
|
- device_type=device_type,
|
|
|
- device_location=device_location,
|
|
|
- device_age=device_age,
|
|
|
- company_id=company_id,
|
|
|
- user_id=user_id,
|
|
|
- device_group=device_group,
|
|
|
- status=status,
|
|
|
- floor_id=floor_id,
|
|
|
- third_id=third_id
|
|
|
+ res = session.execute(
|
|
|
+ select(DeviceType.device_ids).where(DeviceType.id == device_type_id)
|
|
|
+ ).scalars().first()
|
|
|
+ res = json.loads(res)
|
|
|
+ res.extend(json.loads(device_ids))
|
|
|
+
|
|
|
+ stmt = update(DeviceType).where(DeviceType.id == device_type_id).values(
|
|
|
+ device_ids=json.dumps(res)
|
|
|
)
|
|
|
session.execute(stmt)
|
|
|
session.commit()
|
|
@@ -250,13 +288,11 @@ class DeviceApi(Resource):
|
|
|
device_id = request.form.get('device_id')
|
|
|
device_type = request.form.get('device_type')
|
|
|
device_location = request.form.get('device_location')
|
|
|
- device_age = request.form.get('device_age')
|
|
|
- company_id = request.form.get('company_id')
|
|
|
- user_id = request.form.get('user_id')
|
|
|
- device_group = request.form.get('device_group')
|
|
|
+ loop_detail = request.form.get('device_age')
|
|
|
+ gateway_code = request.form.get('company_id')
|
|
|
+ gateway_ip = request.form.get('user_id')
|
|
|
+ usage = request.form.get('device_group')
|
|
|
status = request.form.get('status')
|
|
|
- floor_id = request.form.get('floor_id')
|
|
|
- third_id = request.form.get('third_id')
|
|
|
|
|
|
if device_name is None:
|
|
|
return jsonify(code=StatesCode.PARA_ERROR, message='设备名称不能为空')
|
|
@@ -267,13 +303,12 @@ class DeviceApi(Resource):
|
|
|
device_id=device_id,
|
|
|
device_type=device_type,
|
|
|
device_location=device_location,
|
|
|
- device_age=device_age,
|
|
|
- company_id=company_id,
|
|
|
- user_id=user_id,
|
|
|
- device_group=device_group,
|
|
|
+ loop_detail=loop_detail,
|
|
|
+ gateway_code=gateway_code,
|
|
|
+ gateway_ip=gateway_ip,
|
|
|
+ usage=usage,
|
|
|
status=status,
|
|
|
- floor_id=floor_id,
|
|
|
- third_id=third_id
|
|
|
+
|
|
|
)
|
|
|
session.execute(stmt)
|
|
|
session.commit()
|
|
@@ -287,18 +322,33 @@ class DeviceApi(Resource):
|
|
|
return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
|
|
|
|
|
|
@ns.doc(id='delete_device', description='删除设备')
|
|
|
- @ns.expect(device_details)
|
|
|
+ @ns.expect(delete_device)
|
|
|
def delete(self):
|
|
|
"""删除设备"""
|
|
|
|
|
|
- id = request.form.get('id')
|
|
|
+ device_id = request.form.get('device_id')
|
|
|
+ device_type_id = request.form.get('device_type_id')
|
|
|
|
|
|
- if id is None:
|
|
|
- return jsonify(code=StatesCode.PARA_ERROR, message='设备id不能为空')
|
|
|
+ if device_id is not None or device_type_id is not None:
|
|
|
+ device_id = int(device_id)
|
|
|
+ else:
|
|
|
+ return jsonify(code=StatesCode.PARA_ERROR, message='设备id和设备类别不能为空')
|
|
|
|
|
|
try:
|
|
|
with Session(current_app.engine) as session:
|
|
|
- stmt = delete(SecurityDevice).where(SecurityDevice.id == id)
|
|
|
+
|
|
|
+ res = session.execute(
|
|
|
+ select(DeviceType.device_ids).where(DeviceType.id == device_type_id)
|
|
|
+ ).scalars().first()
|
|
|
+ res = json.loads(res)
|
|
|
+ if device_id in res:
|
|
|
+ res.remove(device_id)
|
|
|
+ else:
|
|
|
+ return jsonify(code=StatesCode.PARA_ERROR, message='设备类别:%s下无此设备' % device_type_id)
|
|
|
+
|
|
|
+ stmt = update(DeviceType).where(DeviceType.id == device_type_id).values(
|
|
|
+ device_ids=json.dumps(res)
|
|
|
+ )
|
|
|
session.execute(stmt)
|
|
|
session.commit()
|
|
|
|
|
@@ -311,32 +361,41 @@ class DeviceApi(Resource):
|
|
|
return jsonify(code=StatesCode.UNKNOWN_ERROR, message=str(e))
|
|
|
|
|
|
|
|
|
-batch_delete_user = reqparse.RequestParser(bundle_errors=True)
|
|
|
-batch_delete_user.add_argument(name='devices_id', type=str, required=True, location='form', help='设备id列表')
|
|
|
+batch_delete_device = reqparse.RequestParser(bundle_errors=True)
|
|
|
+batch_delete_device.add_argument(name='device_ids', type=str, required=False, location='form', help='设备id列表')
|
|
|
+batch_delete_device.add_argument(name='device_type_id', type=str, location='form', required=False, help='设备类别id')
|
|
|
|
|
|
|
|
|
@ns.route('/batch_delete_device')
|
|
|
class BatchDeleteDeviceApi(Resource):
|
|
|
- method_decorators = [login_required]
|
|
|
+ # method_decorators = [login_required]
|
|
|
|
|
|
@ns.doc(id='batch_delete_device', description='批量删除设备')
|
|
|
- @ns.expect(batch_delete_user)
|
|
|
+ @ns.expect(batch_delete_device)
|
|
|
def delete(self):
|
|
|
"""批量删除设备"""
|
|
|
- device_id = request.form.get('devices_id')
|
|
|
+ device_ids = request.form.get('device_ids')
|
|
|
+ device_type_id = request.form.get('device_type_id')
|
|
|
|
|
|
- if device_id is not None:
|
|
|
- device_id = json.loads(device_id)
|
|
|
+ if device_ids is not None or device_type_id is not None:
|
|
|
+ device_ids = json.loads(device_ids)
|
|
|
+ device_type_id = int(device_type_id)
|
|
|
else:
|
|
|
- return jsonify(code=StatesCode.UNKNOWN_ERROR, message='设备id不能为空')
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message='设备id和设备类别id不能为空')
|
|
|
|
|
|
try:
|
|
|
with Session(current_app.engine) as session:
|
|
|
- stmt = select(SecurityDevice).where(SecurityDevice.id.in_(device_id))
|
|
|
- results = session.execute(stmt).scalars().all()
|
|
|
+ res = session.execute(
|
|
|
+ select(DeviceType.device_ids).where(DeviceType.id == device_type_id)
|
|
|
+ ).scalars().first()
|
|
|
+ res = json.loads(res)
|
|
|
+ for device_id in device_ids:
|
|
|
+ res.remove(device_id)
|
|
|
|
|
|
- for result in results:
|
|
|
- session.delete(result)
|
|
|
+ stmt = update(DeviceType).where(DeviceType.id == device_type_id).values(
|
|
|
+ device_ids=json.dumps(res)
|
|
|
+ )
|
|
|
+ session.execute(stmt)
|
|
|
session.commit()
|
|
|
|
|
|
save_log(request, Module.DEVICE, OperationType.BATCH_DELETE, StatesCode.SUCCESS)
|
|
@@ -355,7 +414,7 @@ import_device.add_argument(name='group_id', type=str, required=True, location='f
|
|
|
|
|
|
@ns.route('/import_device')
|
|
|
class ImportDeviceApi(Resource):
|
|
|
- method_decorators = [login_required]
|
|
|
+ # method_decorators = [login_required]
|
|
|
|
|
|
@ns.doc(id='import_device', description='导入模版下载')
|
|
|
def get(self):
|