Пример #1
0
 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
Пример #2
0
 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, "服务异常!请联系管理员!"
Пример #3
0
 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
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
 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, "服务异常!请联系管理员!"
Пример #10
0
 def get(self):
     result = {"result": "OK", "content": []}
     res = CtrlProject().get_proj_list()
     if res:
         result["result"] = "OK"
         result["content"] = res
     return result
Пример #11
0
 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
Пример #12
0
 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
Пример #13
0
 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
Пример #14
0
 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
Пример #15
0
 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
Пример #16
0
 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
Пример #17
0
 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
Пример #18
0
 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
Пример #19
0
 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)
Пример #20
0
 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
Пример #21
0
 def get_fw_project(self, fw_id):
     project_list = CtrlProject().get_proj_by_fw(fw_id)
     return project_list