# -*- coding: utf-8 -*- import json import logging from sqlalchemy import text 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 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 @operation_log("企业管理", "业务模型", consts.op_type_list_str, "查询企业部署的业务模型列表", "") def post(self): 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() 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 @operation_log("企业管理", "业务模型", consts.op_type_add_str, "添加企业部署的业务模型", "") def post(self): 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 @operation_log("企业管理", "业务模型", consts.op_type_list_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, "业务模型不存在") db_file = DB_File.FileRepository() files = db_file.get_file_by_md5([busi_model_data.business_conf_file, busi_model_data.business_logic]) 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 basemodel_list = json.loads(busi_model_data.base_models) entity_suid = busi_model_data.entity_suid db_model_node = DB_BusiModel.EnterpriseBusiModelNodeRepository() link_nodes = db_model_node.get_nodes_by_busi_model(busimodel_id, entity_suid) link_node_list = [] for node in link_nodes: 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, "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, # 业务参数配置的字段 "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 @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) self.finish() class DeleteHandler(APIHandler): @authenticated @operation_log("企业管理", "业务模型", consts.op_type_delete_str, "删除企业部署的业务模型") 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()