diff --git a/CompanyObject/CompanyImpl.py b/CompanyObject/CompanyImpl.py index 2e421b0..c3a5c0a 100644 --- a/CompanyObject/CompanyImpl.py +++ b/CompanyObject/CompanyImpl.py @@ -189,4 +189,29 @@ class CompanyImpl(Company): financial_analysis.delta_to_industry = self.dict_to_set(instance=FinancialAnalysis.CompareToIndustry.FinancialIndex, data=result['财务得分较同行差异']) financial_analysis.index_details = self.instance_list_to_set(instance=FinancialAnalysis.CompareToIndustry.FinancialAnalysisDetails, data=result['指标详情']) - self.financial_analysis = financial_analysis \ No newline at end of file + self.financial_analysis = financial_analysis + + def get_operating_risk(self): + """获取经营风险分析数据""" + + result = self.db.find_single_data_with_single_sort( + "企业数据", + "经营风险分析", + {"企业ID": self.cid}, + ["评价ID", "更新日期", "风险级别", "风险分数", "列入失信名单", "合规风险", "经营风险", "周边风险", "变更记录"], + {"更新日期": -1} + ) + + if result: + operating_risk = OperatingRisk() + operating_risk.rid = result['评价ID'] + operating_risk.update_time = result["更新日期"] + operating_risk.risk_level = result['风险级别'] + operating_risk.risk_score = result['风险分数'] + operating_risk.in_untrustworthy_list = result['列入失信名单'] + operating_risk.compliance_risk = self.instance_list_to_set(instance=OperatingRisk().InfluenceObj, data=result['合规风险']) + operating_risk.operating_risk = self.instance_list_to_set(instance=OperatingRisk().InfluenceObj, data=result['经营风险']) + operating_risk.peripheral_risk = self.instance_list_to_set(instance=OperatingRisk().DetailObj, data=result['周边风险']) + operating_risk.change_records = self.instance_list_to_set(instance=OperatingRisk().InfluenceObj, data=result['变更记录']) + + self.operating_risk_analysis = operating_risk diff --git a/CompanyObject/CompanyObj.py b/CompanyObject/CompanyObj.py index b2ec723..634a70f 100644 --- a/CompanyObject/CompanyObj.py +++ b/CompanyObject/CompanyObj.py @@ -415,11 +415,72 @@ class FinancialAnalysis(SpecObject): return _dict_ +class OperatingRisk(SpecObject): + """经营风险""" + + class InfluenceObj(SpecObject): + """影响统计""" + name = ValidateAttr(field='name', type=str) + total = ValidateAttr(field='total', type=int) + influence = ValidateAttr(field='influence', type=str) + + fields_map = { + "name": "类型", + "total": "数量", + "influence": "影响" + } + + class DetailObj(SpecObject): + """详细统计""" + name = ValidateAttr(field='name', type=str) + total = ValidateAttr(field='total', type=int) + detail = ValidateAttr(field='detail', type=list) + + fields_map = { + "name": "类型", + "total": "数量", + "detail": "详情" + } + + cid = ValidateAttr(field='cid', type=str, length=8, default=None) + update_time = ValidateAttr(field='update_time', func=Validate.time_format) + rid = ValidateAttr(field='rid', type=str, length=8, default='') + risk_level = ValidateAttr(field='risk_level', type=str, in_list=['高', '较高', '中等', '警示', '低'], default='') + risk_score = ValidateAttr(field='risk_score', type=[int, float], default='') + in_untrustworthy_list = ValidateAttr(field='in_untrustworthy_list', type=str, in_list=["是", "否"], default='') + compliance_risk = ValidateAttr(field='compliance_risk', instance_list=InfluenceObj) + operating_risk = ValidateAttr(field='operating_risk', instance_list=InfluenceObj) + peripheral_risk = ValidateAttr(field='peripheral_risk', instance_list=DetailObj) + change_records = ValidateAttr(field='change_records', instance_list=InfluenceObj) + + fields_map = { + "cid": "企业ID", + "update_time": "更新日期", + "rid": "评价ID", + "risk_level": "风险级别", + "risk_score": "风险分数", + "in_untrustworthy_list": "列入失信名单", + "compliance_risk": "合规风险统计", + "operating_risk": "经营风险统计", + "peripheral_risk": "周边风险统计", + "change_records": "变更记录统计" + } + + def dict_to_return(self): + _dict_ = self.dict_to_show(columns=["更新日期", "风险分数", "风险级别", "列入失信名单", "合规风险统计", "经营风险统计", "周边风险统计", "变更记录统计"]) + _dict_["合规风险"] = _dict_.pop("合规风险统计") + _dict_["经营风险"] = _dict_.pop("经营风险统计") + _dict_["周边风险"] = _dict_.pop("周边风险统计") + _dict_["变更记录"] = _dict_.pop("变更记录统计") + return _dict_ + + class Company(SpecObject): """企业""" cid = ValidateAttr(field='cid', type=str, length=8) name = ValidateAttr(field='name', type=str) + update_time = ValidateAttr(field='update_time', type=dict) industry_l1 = ValidateAttr(field='industry_l1', type=str) industry_l2 = ValidateAttr(field='industry_l2', type=str) basic_info = ValidateAttr(field='basic_info', type=BasicInfo) @@ -428,7 +489,7 @@ class Company(SpecObject): cc_rating_result = ValidateAttr(field='cc_rating_result', type=CCRating) esg_rating_result = ValidateAttr(field='esg_rating_result', type=ESGRating) financial_analysis = ValidateAttr(field="financial_analysis", type=FinancialAnalysis) - update_time = ValidateAttr(field='update_time', type=dict) + operating_risk_analysis = ValidateAttr(field="operating_risk_analysis", type=OperatingRisk) fields_map = { "cid": "企业ID", @@ -441,6 +502,7 @@ class Company(SpecObject): "cc_rating_result": "综信评价结果", "esg_rating_result": "ESG评价结果", "financial_analysis": "财务要素分析", + "operating_risk_analysis": "经营风险分析", "update_time": "更新时间" } @@ -461,3 +523,6 @@ class Company(SpecObject): def get_financial_analysis(self): """财务要素分析""" + + def get_operating_risk(self): + """经营风险分析""" diff --git a/CompanyObject/CompanyRoutes.py b/CompanyObject/CompanyRoutes.py index 858a5fb..8a7ea4d 100644 --- a/CompanyObject/CompanyRoutes.py +++ b/CompanyObject/CompanyRoutes.py @@ -113,4 +113,18 @@ def financial_elements_route(**kwargs): @company_route.route('/operating_risk', methods=['GET']) @verify_token def operating_risk_route(**kwargs): - return {"info": "查询结果", "result": {}}, 200 + """经营风险分析""" + try: + impl = CompanyImpl() + impl.cid = kwargs['cid'] + impl.get_operating_risk() + if impl.operating_risk_analysis: + result = impl.operating_risk_analysis.dict_to_return() + return {"info": "查询结果", "result": result}, 200 + else: + return {"info": "查询结果", "result": {}}, 200 + except ReturnConditionCheckFailed as e: + e.log_error() + return {"info": e.failed_info}, e.status_code + # except KeyError: + # return {"info": "参数异常"}, 400 diff --git a/DBHelper/MongoHelper.py b/DBHelper/MongoHelper.py index 5ed2256..dc25953 100644 --- a/DBHelper/MongoHelper.py +++ b/DBHelper/MongoHelper.py @@ -229,14 +229,3 @@ class MongoHelper: """ fs = GridFS(self.client[param1], param2) fs.delete(ObjectId(param3)) - - def insert_single_data(self, param1, param2, param3): - """ - 插入一条数据 - param1: str 数据库 - param2: str 数据集 - param3: obj 插入数据 - return: None - """ - collection = self.client[param1][param2] - collection.insert_one(param3) \ No newline at end of file