You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

282 lines
11 KiB
Python

# -*- coding: utf-8 -*-
import json
import logging
from sqlalchemy import text
10 months ago
from website import db_mysql, errors, consts
from website.handler import APIHandler, authenticated, operation_log
from website.util import shortuuid
from website.db.enterprise_busi_model import enterprise_busi_model as DB_BusiModel
11 months ago
from website.db.enterprise_busi_model import enterprise_busi_model_node_device as DB_BusiModelNodeDevice
from website.db.file import file as DB_File
class ListHandler(APIHandler):
"""
- 描述企业部署的业务模型列表
- 请求方式post
- 请求参数
> - pageNo
> - pageSize
> - entity_id, int, 企业id
- 返回值
```
{
"count": 123,
"data": [
{
"model_id": 123, # 模型id
"model_name": "xxx", # 模型名称
"create_time": "xxxx", # 创建时间
},
...
]
}
```
"""
@authenticated
10 months ago
@operation_log("企业管理", "业务模型", consts.op_type_list_str, "查询企业部署的业务模型列表", "")
def post(self):
11 months ago
pageNo = self.get_int_argument("pageNo", 1)
pageSize = self.get_int_argument("pageSize", 10)
entity_id = self.get_int_argument("entity_id")
if not entity_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
11 months ago
result = db_busimodel.list_enterprise_busi_model(entity_id=entity_id, page_no=pageNo, page_size=pageSize)
self.finish({"count": result["count"], "data": result["data"]})
class AddHandler(APIHandler):
"""
- 描述添加企业部署的业务模型
- 请求方式post
- 请求参数
> - entity_id, int, 企业id
> - name, string, 业务模型名称
> - comment, string, 简介
> - basemodel_ids, string, 基础模型id, 多个使用逗号分割
> - business_logic, string, 业务代码压缩包的md5
> - business_conf_file, string, 业务配置压缩包的文件md5
> - business_conf_param, string, 业务配置的参数json字符串eg: '{"a":1, "b":2}'
> - link_node_ids, string, 关联节点id, 多个节点逗号分割
- 返回值
"""
@authenticated
10 months ago
@operation_log("企业管理", "业务模型", consts.op_type_add_str, "添加企业部署的业务模型", "")
def post(self):
11 months ago
entity_id = self.get_int_argument("entity_id")
name = self.get_escaped_argument("name", "")
comment = self.get_escaped_argument("comment", "")
basemodel_ids = self.get_escaped_argument("basemodel_ids", "")
business_logic = self.get_escaped_argument("business_logic", "")
business_conf_file = self.get_escaped_argument("business_conf_file", "")
business_conf_param = self.get_escaped_argument("business_conf_param", "")
link_node_ids = self.get_escaped_argument("link_node_ids", "")
if not entity_id or not name or not basemodel_ids:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
if not business_logic:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务代码参数错误")
if not business_conf_file and not business_conf_param:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务配置参数错误")
if not link_node_ids:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "关联节点参数错误")
model_data = {
"entity_id": entity_id,
"name": name,
"comment": comment,
"basemodel_ids": basemodel_ids,
"business_logic": business_logic,
"business_conf_file": business_conf_file,
"business_conf_param": business_conf_param,
"link_node_ids": link_node_ids,
}
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
busimodel_id, busimodel_suid = db_busimodel.insert_busi_model(model_data)
model_node_data = {
"entity_id": entity_id,
"busimodel_id": busimodel_id,
"busimodel_suid": busimodel_suid,
"node_ids": link_node_ids
}
db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository()
db_model_node.insert_busi_model_nodes(model_node_data)
self.finish()
class InfoHandler(APIHandler):
"""
- 描述企业部署的业务模型详情
- 请求方式post
- 请求参数
> - id, int, 业务模型id
- 返回值
```
{
"name": "xxx",
"comment": "xxx",
"basemodel_list": "xxx,xx,xx",
"business_logic": "xxx",
"business_conf_file": "xxx",
"business_conf_param": "xxx",
"link_node_list": "xxx,xx,xx"
}
```
"""
@authenticated
10 months ago
@operation_log("企业管理", "业务模型", consts.op_type_list_str, "查询企业部署的业务模型详情")
def post(self):
11 months ago
busimodel_id = self.get_int_argument("id")
if not busimodel_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
11 months ago
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
busi_model_data = db_busimodel.get_busi_model_by_id(busimodel_id)
if not busi_model_data:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务模型不存在")
db_file = DB_File.FileRepository()
files = db_file.get_file_by_md5([busi_model_data.business_conf_file, busi_model_data.business_logic])
9 months ago
business_logic_name = ""
business_conf_name = ""
for item in files:
if item.md5_str == busi_model_data.business_logic:
business_logic_name = item.filename
else:
business_conf_name = item.filename
11 months ago
basemodel_list = json.loads(busi_model_data.base_models)
entity_suid = busi_model_data.entity_suid
db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository()
11 months ago
link_nodes = db_model_node.get_nodes_by_busi_model(busimodel_id, entity_suid)
link_node_list = []
for node in link_nodes:
11 months ago
link_node_list.append({"node_id": node["node_id"], "node_name": node["node_name"]})
self.finish({
"name": busi_model_data.name,
"comment": busi_model_data.comment,
11 months ago
"basemodel_list": basemodel_list, # 关联模型
"business_logic_name": business_logic_name, # 业务代码压缩包文件名
"business_logic_md5": busi_model_data.business_logic, # 业务代码压缩包md5
"business_conf_name": business_conf_name, # 业务参数配置文件名
"business_conf_md5": busi_model_data.business_conf_file, # 业务参数配置md5
"business_conf_param": busi_model_data.business_conf_param, # 业务参数配置的字段
11 months ago
"link_node_list": link_node_list # 关联节点的id多个id逗号分割
})
class EditHandler(APIHandler):
"""
- 描述企业部署的业务模型编辑
- 请求方式post
- 请求参数
> - id, int, 业务模型的id
> - name, string, 业务模型名称
> - comment, string, 简介
> - basemodel_ids, string, 基础模型id, 多个使用逗号分割
> - business_logic, string, 业务代码压缩包的md5
> - business_conf_file, string, 业务配置压缩包的文件md5
> - business_conf_param, string, 业务配置的参数json字符串eg: '{"a":1, "b":2}'
> - link_node_ids, string, 关联节点id, 多个节点逗号分割
- 返回值
"""
@authenticated
10 months ago
@operation_log("企业管理", "业务模型", consts.op_type_edit_str, "编辑企业部署的业务模型")
def post(self):
busimodel_id = self.get_int_argument("id")
if not busimodel_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
busi_model_data = db_busimodel.get_busi_model_by_id(busimodel_id)
if not busi_model_data:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务模型不存在")
name = self.get_escaped_argument("name", "")
comment = self.get_escaped_argument("comment", "")
basemodel_ids = self.get_escaped_argument("basemodel_ids", "")
business_logic = self.get_escaped_argument("business_logic", "")
business_conf_file = self.get_escaped_argument("business_conf_file", "")
business_conf_param = self.get_escaped_argument("business_conf_param", "")
link_node_ids = self.get_escaped_argument("link_node_ids", "")
if not name or not basemodel_ids:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
if not business_logic:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务代码参数错误")
if not business_conf_file and not business_conf_param:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "业务配置参数错误")
if not link_node_ids:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "关联节点参数错误")
# 更新业务模型
model_data = {
"id": busimodel_id,
"name": name,
"comment": comment,
"basemodel_ids": basemodel_ids,
"business_logic": business_logic,
"business_conf_file": business_conf_file,
"business_conf_param": business_conf_param,
"link_node_ids": link_node_ids,
}
db_busimodel.edit_busi_model(model_data)
# 获取业务模型的数据
busi_model = db_busimodel.get_busi_model_by_id(busimodel_id)
db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository()
# 删除关联节点
db_model_node.delete_by_busi_model_id(busimodel_id)
# 插入关联节点
model_node_data = {
"entity_id": busi_model.entity_id,
"busimodel_id": busimodel_id,
"busimodel_suid": busi_model.suid,
"node_ids": link_node_ids
}
db_model_node.insert_busi_model_nodes(model_node_data)
11 months ago
self.finish()
class DeleteHandler(APIHandler):
@authenticated
10 months ago
@operation_log("企业管理", "业务模型", consts.op_type_delete_str, "删除企业部署的业务模型")
11 months ago
def post(self):
busimodel_id = self.get_int_argument("id")
if not busimodel_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误")
db_con = DB_BusiModelNodeDevice.EnterpriseBusiModelNodeDeviceRepository()
one = db_con.get_one_by_busimodel(busimodel_id)
if one:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "该业务模型已关联设备,无法删除")
db_busimodel = DB_BusiModel.EnterpriseBusiModelRepository()
db_busimodel.delete_by_id(busimodel_id)
db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository()
db_model_node.delete_by_busi_model_id(busimodel_id)
self.finish()