def get(self, proj_id): result = {"result": "NG"} project = CtrlProject() content = project.get_proj_group(proj_id) if content: result = {"result": "OK", 'content': content} return result
def get_model_ref_model(self, data_json): from app.ctrl.ctrl_project import CtrlProject from app.ctrl.ctrl_group import CtrlGroup proj_id = data_json.get('proj_id') accessToken = data_json.get('accessToken') username = data_json.get('username') try: if username in ("Admin", "Test_PMO", "Test_PL", "Test_GL"): model_list = CtrlProject().get_leaf_model(proj_id) else: project_root = CtrlGroup().get_project_root( accessToken, proj_id) if not project_root: return None, "您不在该项目体制中!" pmo = project_root.get('pmo') pl_username = project_root.get('username') if username == pmo.get('userName'): model_list = CtrlProject().get_leaf_model(proj_id) elif pl_username == username: model_list = CtrlProject().get_leaf_model(proj_id) else: group_members = project_root.get('group_members') model_list = self.get_gl_model_list( group_members, username) data_list = [] for model in model_list: model_id = model.get('model_id') model_ref = self.get_model_ref(proj_id, model_id) model['model_ref'] = model_ref model['model_list'] = [] # 前端要求加的 data_list.append(model) return data_list, None except Exception as e: current_app.logger.error('%s' % str(e)) return None, "服务异常!请联系管理员!"
def post(self): data = request.get_json(force=True) accessToken = data.get('accessToken') proj_id = data.get('proj_id') page = data.get('page') size = data.get('size') condition = data.get('condition') manager = data.get('manager') result = {"result": "NG", "content": [], "error": ''} project = CtrlProject() error = project.synchronize_project(accessToken) if error: result['error'] = error return result count, proj_info_list = project.get(proj_id, manager, page, size, condition) if proj_info_list: if page and size: result = { "result": "OK", "content": proj_info_list, "count": count } else: result = {"result": "OK", "content": proj_info_list} return result
def put(self, proj_id): result = {"result": "NG"} data = request.get_json(force=True) project = CtrlProject() proj_id, message = project.update(proj_id, data) if proj_id: result = {"result": "OK", "error": message} else: result["error"] = message return result
def post(self): result = {"result": "NG"} data = request.get_json(force=True) project = CtrlProject() proj_id, message = project.add_proj_group(data) if proj_id: result = {"result": "OK", 'content': proj_id} else: result["error"] = message return result
def delete(self, proj_id, commit_user): result = {"result": "NG", "error": ''} project = CtrlProject() flag, message = project.delete(proj_id, commit_user) if flag: result = {"result": "OK"} from app.db import cache cache.delete('get_model_tree') # 删除缓存 else: result["error"] = message return result
def post(self): data = request.get_json(force=True) accessToken = data.get('accessToken') manager = data.get('manager') project = CtrlProject() result = {"result": "NG", "content": []} project_list = project.get_cactus_project(accessToken, manager) if project_list: result["result"] = 'OK' result["content"] = project_list return result
def post(self): result = {"result": "NG"} data = request.get_json(force=True) project = CtrlProject() proj_id, message = project.add(data) if proj_id: result = {"result": "OK", 'content': proj_id} from app.db import cache cache.delete('get_model_tree') # 删除缓存 else: result["error"] = message return result
def save_import_file(self, request_data): if not request_data.files: return False, '没有上传文件!' upload_file = request_data.files["file"] param = request_data.form proj_id = param.get("proj_id") filename = upload_file.filename zip_name, zip_extension = os.path.splitext(filename) if zip_extension != ".zip": return False, '请上传zip文件!' res, msg = CtrlProject().get_one_proj_by_id(proj_id) if not res: return res, msg proj_name = msg.get("proj_name") only_file_id = self.get_next_seq() unzip_path = os.path.join('static', proj_name, str(only_file_id)) if not os.path.exists(os.path.join(current_app.root_path, unzip_path)): os.makedirs(os.path.join(current_app.root_path, unzip_path)) local_file_path = os.path.join(current_app.root_path, unzip_path, filename) upload_file.save(local_file_path) z = zipfile.ZipFile(local_file_path, 'r') z.extractall(path=os.path.join(current_app.root_path, unzip_path)) z.close() json_file_list = self.find_json_file_path( os.path.join(unzip_path, zip_name)) try: for json_file in json_file_list: ImportJson().import_json(proj_id, json_file) db.session.commit() return True, '' except Exception as e: db.session.rollback() current_app.logger.error('%s' % e) return False, "服务异常!请联系管理员!"
def get(self): result = {"result": "OK", "content": []} res = CtrlProject().get_proj_list() if res: result["result"] = "OK" result["content"] = res return result
def do_export(self, proj_id=None, model_id=None, doc_type=None, doc_id=None): msg, file_path = '', '' _, proj_list = CtrlProject().get(proj_id) if proj_list: self.proj_name = proj_list[0].get("proj_name") else: msg = '指定的项目不存在!' return False, msg, file_path if doc_id: # 导出一个文档 doc_data = CtrlDsDoc().get_doc(doc_id, detail=False) if not doc_data: msg = '不存在文档。doc_id = %s' % doc_id return False, msg, file_path doc_type = doc_data.get("doc_type") export_obj = ExportFactory.create(self.proj_name, doc_type) unique = str(Utillity.get_nextval('doc_export_seq')) out_dir = os.path.join(EXPORT_ROOT_DIR, unique) file_path = export_obj.do_export(out_dir, doc_id) return True, msg, file_path elif doc_type: # 模块下的基本设计or详细设计 doc_type = doc_type.upper() if not model_id: msg = '没有指定Model.' return False, msg, file_path if not proj_id: msg = '没有指定项目.' return False, msg, file_path if doc_type not in DOC_TYPE_DIR: msg = '指定的文档类型不对. type=%s' % doc_type return False, msg, file_path model = self._get_model(model_id) if model: model_name = model.get("title") else: msg = '指定的Model不对.' return False, msg, file_path unique = str(Utillity.get_nextval('doc_export_seq')) root_dir = os.path.join(EXPORT_ROOT_DIR, unique, DOC_TYPE_DIR.get(doc_type)) model_name = model_name.replace(' ', '_') out_dir = os.path.join(root_dir, model_name) export_obj = ExportFactory.create(self.proj_name, doc_type) for doc_info in self._get_docs(proj_id, model_id, doc_type): doc_id = doc_info.get("doc_id") export_obj.do_export(out_dir, doc_id) # 压缩文件夹 file_path = zip_file([out_dir], root_dir, '%s.zip' % model_name) return True, msg, file_path elif model_id: # 模块下的所有文档 if not proj_id: msg = '没有指定项目.' return False, msg, file_path return self._export_model_docs(proj_id, model_id) elif proj_id: # 项目下的所有文档 return self._export_proj_docs(proj_id) return True, msg, file_path
def delete(self, proj_id): result = {"result": "NG"} proj_id, message = CtrlProject().delete_proj_by_id(proj_id) if proj_id: result = {"result": "OK", 'content': proj_id} else: result["error"] = message return result
def get(self, proj_id): result = {"result": "NG"} res, msg = CtrlProject().get_one_proj_by_id(proj_id) if res: result["result"] = "OK" result["content"] = msg else: result["content"] = msg return result
def get(self, page=None, size=None, proj_id=None, condition=None, manager=None): result = {"result": "NG", "content": []} project = CtrlProject() count, proj_info_list = project.get(proj_id, page, size, condition, manager) if proj_info_list: if page and size: result = { "result": "OK", "content": proj_info_list, "count": count } else: result = {"result": "OK", "content": proj_info_list} return result
def post(self): result = {"result": "NG"} data = request.get_json(force=True) if data: proj_id, message = CtrlProject().change_proj_by_id(data) if proj_id: result = {"result": "OK", 'content': message} else: result["error"] = message else: result["error"] = "请不要传空数据" return result
def post(self): result = {"result": "NG"} data = request.get_json(force=True) if data: res, message = CtrlProject().add_project(data) if res: result = {"result": "OK", 'content': message} else: result["error"] = message else: result["error"] = "请不要传空数据" return result
def get_all_model_sub(self, proj_id): from app.ctrl.ctrl_project import CtrlProject model_list = CtrlProject().get_models(proj_id) data_list = [] model_id_list = [] for model in model_list: model_id = model.get('model_id') model.pop('parent_title') if model_id in model_id_list: continue model_id_list.append(model_id) data_list.append(model) return data_list
def get_cactus_fw(self, accessToken, manager): from app.ctrl.ctrl_project import CtrlProject cactus_fw_list = [] fw_list = self.get_fw_by_manager(manager) fw_ids = [] for fw in fw_list: fw_ids.append(fw.get('fw_id')) cactus_list = CtrlProject().get_project_from_cactus(accessToken) for cactus in cactus_list: if manager == cactus.get('manager'): fw_id = cactus.get('fw_id') if fw_id not in fw_ids: framework_json = { 'fw_id': fw_id, 'fw_name': cactus.get('fw_name'), 'manager': manager } cactus_fw_list.append(framework_json) return cactus_fw_list
def import_model(self, proj_name): proj_list = CtrlProject().get_project_byname(proj_name) if proj_list: proj_info = proj_list[0] proj_id = proj_info.get(Project.proj_id.name) # 读取框架的Layer信息 arcitecture_obj = Architecture(current_app.config["ARCHITECTURE_SRV"]) layers = arcitecture_obj.get_all_layers(proj_name) if not layers: return False, '框架服务器没有项目%s的模块信息。' % proj_name model_df = arcitecture_obj.layer2df(layers) model_df = model_df[LAYER_COLS] # 去重,并改为小写 new_model_df, lower_model_df = self.my_drop_duplicates(model_df) # 获取当前模块信息 curr_df = self.get_project_models(proj_id) curr_df = self.tree_2_record_df(curr_df) curr_df, lower_curr_df = self.my_drop_duplicates(curr_df) # 转为小写 diff_df = self.difference(lower_curr_df, lower_model_df) modules = self.get_exist_doc_modules(diff_df, proj_id) if modules: msg = '以下模块存设计书,请先清除设计书,再删除模块。\n' msg += '\n'.join(modules) return False, msg # ## TODO@hcz:删除项目下的旧模块 db.session.query(ProjectModel).filter( ProjectModel.proj_id == proj_id).delete() db.session.query(ProjectModelRel).filter( ProjectModelRel.proj_id == proj_id).delete() # 生成模块编号 # model_id_dict = self._get_model_dict(model_df) # db.session.commit() # add 项目 model self._add_proj_model(new_model_df, proj_id) # 保存 db.session.commit() return True, 'OK' else: current_app.logger.error('Dose not Exist Project. %s' % proj_name) return False, '没有项目%s. 请PL先添加项目%s' % (proj_name, proj_name)
def export_drbfm(self, proj_id, doc_id): from app.ctrl.ctrl_project import CtrlProject from app.export_doc.export_factory import ExportDrbfmFactory from app.ctrl.ctrl_ds_doc import CtrlDsDoc msg, file_path = '', '' _, proj_list = CtrlProject().get(proj_id) if proj_list: proj_name = proj_list[0].get("proj_name") else: msg = '指定的项目不存在!' return msg, file_path out_dir = os.path.join("export_root", "drbfm") drbfm_data = self.get_drbfm_new(doc_id) export_obj = ExportDrbfmFactory.create(proj_name) doc_data = CtrlDsDoc().get_doc(doc_id) if doc_data: doc_name = doc_data.get('title') else: msg = '该文档不存在!' return msg, file_path export_obj.drbfm_data = drbfm_data file_path = export_obj.write_drbfm_data(out_dir, doc_name) return msg, file_path
def get_fw_project(self, fw_id): project_list = CtrlProject().get_proj_by_fw(fw_id) return project_list