changes 披露评级公司接口

This commit is contained in:
彭森 2024-05-07 08:22:04 +08:00
parent da5535522e
commit 5d4e0b8e0b
12 changed files with 277 additions and 232 deletions

2
.idea/.gitignore vendored
View File

@ -1,3 +1,5 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# GitHub Copilot persisted chat sessions
/copilot/chatSessions

View File

@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (wd-smebiz)" project-jdk-type="Python SDK" />
<component name="Black">
<option name="sdkName" value="Python 3.10 (wd-smebiz)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (wd-smebiz)" project-jdk-type="Python SDK" />
</project>

View File

@ -6,7 +6,7 @@
<excludeFolder url="file://$MODULE_DIR$/venv" />
<excludeFolder url="file://$MODULE_DIR$/jurigged" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="jdk" jdkName="Python 3.10 (wd-smebiz)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">

View File

@ -2,21 +2,21 @@
host = 127.0.0.1
post = 3306
user = root
password = 12345
password = 123456
db = wd_smebiz
[postgresql]
host = 127.0.0.1
post = 5432
user = postgres
password = 12345
password = 950920
db = wd_smebiz
[postgresql_v2]
host = 127.0.0.1
post = 5432
user = postgres
password = 12345
password = 950920
db = wd_smebiz_v2
[redis]
@ -59,7 +59,7 @@ sys_name = wd-smebiz
;host = https://testapi.fecribd.com
[tianyancha]
token = 32737167-cb63-4ce9-9397-d66169488f51
token = f87e79d5-f74e-4df9-91b2-f27a5c7ee63a
[yujingtong]
token = 92229502BD4C4B3E934607D4C1C5E711

View File

@ -30,9 +30,6 @@ conf.read(Path(__file__).parent.parent / 'config' / f'common{"." + start_model i
encoding='utf-8-sig')
class CompanyUserTokenDataModel(BaseModel):
id: Optional[str]
company_id: Optional[str]

View File

@ -13,6 +13,7 @@ from .utils import RateServeFlow, get_node_if_not_finished, RateUtils, get_node
from ...models import RateDataPreparationNode, RateServe, RateWorkNode, ReportWorkNode, CertWorkNode
from ...schemas import NodeState, RateServeState
from fastapi import UploadFile as FastApiUploadFile, Form
router = APIRouter(tags=["评级服务"], prefix='')
@ -225,10 +226,10 @@ def make_cert(db: Session = Depends(get_db)):
RateServe.status == RateServeState.rating).count()
publish = 0
published = 0
work_days = [(item.finish_time-item.create_time).total_seconds()/24/60/60 for item in db.query(
RateServe).filter(RateServe.finish_time > (datetime.now()-timedelta(days=15)))]
work_days = [(item.finish_time - item.create_time).total_seconds() / 24 / 60 / 60 for item in db.query(
RateServe).filter(RateServe.finish_time > (datetime.now() - timedelta(days=15)))]
average_work_day = round(
sum(work_days)/len(work_days), 1) if work_days else 0
sum(work_days) / len(work_days), 1) if work_days else 0
return {
"examining": examining,
"rating": rating,

View File

@ -468,6 +468,7 @@ class RateUtils:
产品信息, _ = tianyancha_api.get("产品信息", {"keyword": company_name})
资质证书, _ = tianyancha_api.get("资质证书", {"name": company_name})
股权结构图, _ = tianyancha_api.get("股权结构图", {"keyword": company_name})
高管构成, _ = tianyancha_api.get("高管信息", {"keyword": company_name})
知识产权, _ = tianyancha_api.get("知识产权", {"keyword": company_name})
供应商, _ = tianyancha_api.get("供应商", {"keyword": company_name})
企业招投标信息, _ = tianyancha_api.get("企业招投标信息", {"keyword": company_name}, page=1)
@ -529,7 +530,6 @@ class RateUtils:
"专科占比": str(int(business["专科及以下人员人数"] / business["年末员工总数"] * 100)) + '%',
"合计人数": str(business["年末员工总数"]),
"合计占比": "100%",
"高管构成": "--",
"人民币开户银行名称": business["人民币开户银行名称"],
"人民币开户银行账号": business["人民币开户银行账号"],
"外币开户银行名称": business["外币开户银行名称"],

View File

@ -44,7 +44,7 @@ def load_question_excel(excel_path):
# Load “经营问卷” data from Excel
business_data = pd.read_excel(excel_path, sheet_name="经营问卷")
business_data = business_data.where(pd.notna(business_data), None)
business_dict = {row["问题"]: row["填写(文本类无则不填写)"] for _, row in business_data.iterrows()}
business_dict = {row["问题"]: row["填写"] for _, row in business_data.iterrows()}
business_type = {row["问题"]: row["类型"] for _, row in business_data.iterrows()}
for k, v in business_dict.items():
if pd.isna(v):
@ -57,9 +57,9 @@ def load_question_excel(excel_path):
finance_data = finance_data.where(pd.notna(finance_data), None)
# Convert multi-year data into a nested dictionary format
finance_report_dict = {
"2020年": {},
"2021年": {},
"2022年": {},
"2023年": {},
}
report = None
for i, item in enumerate(finance_data['报表']):
@ -67,7 +67,7 @@ def load_question_excel(excel_path):
if item in ["单位"]:
continue
if item in ["是否审计", "会计事务所"]:
finance_report_dict[item] = nan_to_none(finance_data['科目'][i])
finance_report_dict[item] = nan_to_none(finance_data['2023年'][i])
continue
if item is not None:
@ -82,9 +82,9 @@ def load_question_excel(excel_path):
# "2022年": nan_to_none(finance_data['2022年'][i]),
# }
if subject:
finance_report_dict["2020年"][subject] = nan_to_none(finance_data['2020年'][i])
finance_report_dict["2021年"][subject] = nan_to_none(finance_data['2021年'][i])
finance_report_dict["2022年"][subject] = nan_to_none(finance_data['2022年'][i])
finance_report_dict["2023年"][subject] = nan_to_none(finance_data['2023年'][i])
if pd.isna(subject):
continue
@ -242,6 +242,7 @@ def load_report_need_data(db: Session, rate_id):
财务问卷 = json.loads(item.man_data)['财务问卷']
rate_res: RateRes = JsDict(json.loads(item.rate_data))
company_name = item.company_name
高管构成, _ = tianyancha_api.get("高管信息", {"keyword": company_name})
工商信息, _ = tianyancha_api.get("工商信息", {"keyword": company_name})
if not 工商信息:
raise HTTPException(status_code=404, detail="无公司数据")
@ -251,38 +252,6 @@ def load_report_need_data(db: Session, rate_id):
知识产权, _ = tianyancha_api.get("知识产权", {"keyword": company_name})
供应商, _ = tianyancha_api.get("供应商", {"keyword": company_name})
企业招投标信息, _ = tianyancha_api.get("企业招投标信息", {"keyword": company_name}, page=1)
# data = {
# "企业中文名称": company_name,
# "所属国民经济行业": 工商信息['industry'],
# "英文名称": 工商信息['property3'],
# "工商注册号": 工商信息['regNumber'],
# "组织机构代码": 工商信息['orgNumber'],
# "统一社会信用代码": 工商信息['creditCode'],
# "注册资本": 工商信息['regCapital'],
# "企业类型": 工商信息['companyOrgType'],
# "注册地址": 工商信息['regLocation'],
# "成立日期": 工商信息['estiblishTime'],
# "核准日期": 工商信息['approvedTime'],
# "营业期限终止日期": '',
# "法定代表人": 工商信息['punishList'][0]['legalPersonName'] if 工商信息['punishList'] else '',
# "经营地址": '',
# "邮政编码": 工商信息['reportList'][0]['postcode'] if 工商信息['reportList'] else '',
# "联系电话": 工商信息['reportList'][0]['phoneNumber'] if 工商信息['reportList'] else '',
# "传真号码": 工商信息['reportList'][0]['phoneNumber'] if 工商信息['reportList'] else '',
# "电子邮箱": 工商信息['reportList'][0]['email'] if 工商信息['reportList'] else '',
# "企业网址": '',
# "经营范围": 工商信息['businessScope'],
# "主要产品": '',
# "历史沿革": '',
# "股权结构": '',
# "高管构成": '',
# "企业资质": '',
# "企业商标": '',
# "企业专利": '',
# "企业软件著作权": '',
# "企业供应商": '',
# "企业招投标情况": ''
# }
data = {
"企业名称": company_name,
"年份": f"{num_to_chinese(datetime.now().year)[-2:]}",
@ -338,7 +307,7 @@ def load_report_need_data(db: Session, rate_id):
"专科占比": str(int(man_data["专科及以下人员人数"] / man_data["年末员工总数"] * 100)) + '%',
"合计人数": str(man_data["年末员工总数"]),
"合计占比": "100%",
"高管构成": "--",
"高管构成": 高管构成.get('result') if 高管构成 else '-',
"人民币开户银行名称": man_data["人民币开户银行名称"],
"人民币开户银行账号": man_data["人民币开户银行账号"],
"外币开户银行名称": man_data["外币开户银行名称"],
@ -395,9 +364,9 @@ def load_report_need_data(db: Session, rate_id):
} for item in 企业招投标信息
][0:30] if 企业招投标信息 else [],
"主要财务数据": {
"2023年": 财务问卷['2023年'],
"2022年": 财务问卷['2022年'],
"2021年": 财务问卷['2021年'],
"2020年": 财务问卷['2020年'],
}
}
@ -463,7 +432,7 @@ def pre_process_data(经营问卷, 财务问卷, 背调接口):
"背调接口": 背调接口
}
for key in ["2022年", "2021", "2020"]:
for key in ["2023年", "2022年", "2021"]:
for item in 财务问卷[key]:
if not data['财务问卷'].get(item):
data['财务问卷'][item] = []
@ -479,7 +448,7 @@ def sme_rate_interface(data):
打分
"""
res = rq.post(f'{conf["rate_utils"]["host"]}/api/model_score/model_score_reusult', json.dumps(
data), timeout=8)
data))
data = res.json()
radar_data = make_radar_data(data)
data['radar_data'] = radar_data
@ -494,7 +463,45 @@ def sme_rate_interface(data):
def make_radar_data(rate_data):
radar = {
"财务状况": [
"综合素质": [
"高管平均从业年限",
"管理制度文件类别数",
"管理人员比例",
"近三年股东变更次数",
"股东性质",
"董事会情况",
"监事会情况",
"专业委员会数量",
"经营年限"
],
"企业管理": [
"设置有财务管理制度",
"财务报表审计状态",
"因公伤亡人次",
"发生过客户隐私泄露",
"产品退回率",
"员工离职率",
"员工每周工作时长",
"培训人数占比"
],
"社会责任": [
"纳税信用等级",
"欠税公告",
"税收违法",
"服务投诉率",
"投诉响应时间",
"投诉解决率",
"经营异常",
"双随机抽查结果",
"行政处罚(警告、通报批评、罚款)",
"负面舆情占比",
"行政处罚(没收违法所得、没收非法财务...",
"严重违法",
"开庭公告(被告-合同纠纷、劳动争议)",
"被执行人",
"失信被执行人"
],
"效绩财务能力": [
"营业收入",
"净利率",
"资产负债率",
@ -504,45 +511,6 @@ def make_radar_data(rate_data):
"总资产周转次数",
"资产总额",
"股东支持力度"
],
"经营能力": [
"经营异常",
"双随机抽查结果",
"行政处罚(警告、通报批评、罚款)",
"负面舆情占比",
"高管平均从业年限",
"经营年限"
],
"内部治理": [
"管理制度文件类别数",
"管理人员比例",
"近三年股东变更次数",
"股东性质",
"董事会情况",
"监事会情况",
"设置有财务管理制度",
"财务报表审计状态"
],
"社会责任": [
"因公伤亡人次",
"发生过客户隐私泄露",
"产品退回率",
"员工离职率",
"员工每周工作时长",
"培训人数占比",
"服务投诉率",
"投诉响应时间",
"投诉解决率",
],
"守法守规": [
"被执行人",
"失信被执行人",
"纳税信用等级",
"欠税公告",
"税收违法",
"行政处罚(没收违法所得、没收非法财务...",
"严重违法",
"开庭公告(被告-合同纠纷、劳动争议)"
]
}
index_dic = {item['指标']: {"scope": item['得分'], "weight": item['权重']} for item in

View File

@ -172,7 +172,7 @@ def get_report(req: schemas.GetReport, db: Session = Depends(common_db.get_db),
data = load_report_need_data(db, req.id)
json.dump(data, open('ttt.json', 'w', encoding='utf-8'), ensure_ascii=False)
response = requests.post(f'{conf["rate_utils"]["host"]}/api/report_generation/generation', json.dumps(
data), timeout=15)
data))
# print(response.json())
return Response(content=response.content, headers=dict(response.headers))

View File

@ -14,7 +14,8 @@ class AuthRuleAdd(BaseModel):
category: str
class AuthRuleAddOptional(AuthRuleAdd, metaclass=AllOptional): pass
class AuthRuleAddOptional(AuthRuleAdd, metaclass=AllOptional):
pass
class AuthRuleInfo(AuthRuleId, AuthRuleAddOptional):

View File

@ -87,6 +87,72 @@
"type": "int",
"unit": "人"
},
{
"name": "专业委员会名称",
"key": "专业委员会名称",
"type": "string",
"unit": "-"
},
{
"name": "专业委员会数量",
"key": "专业委员会数量",
"type": "int",
"unit": "个"
},
{
"name": "生产人员人数",
"key": "生产人员人数",
"type": "int",
"unit": "人"
},
{
"name": "拥有投融资管理制度",
"key": "拥有投融资管理制度",
"type": "enum",
"config": {
"options": [
"是",
"否"
]
},
"unit": "-"
},
{
"name": "拥有信息披露制度",
"key": "拥有信息披露制度",
"type": "enum",
"config": {
"options": [
"是",
"否"
]
},
"unit": "-"
},
{
"name": "拥有合规管理制度",
"key": "拥有合规管理制度",
"type": "enum",
"config": {
"options": [
"是",
"否"
]
},
"unit": "-"
},
{
"name": "拥有数据管理制度",
"key": "拥有数据管理制度",
"type": "enum",
"config": {
"options": [
"是",
"否"
]
},
"unit": "-"
},
{
"name": "年度公司股东或关联方给予公司的资金支持金额",
"key": "年度公司股东或关联方给予公司的资金支持金额",

View File

@ -41,143 +41,150 @@ error_code_dic = {
}
api_config = {
"股权变更": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/ic/holderChange/2.0"
},
# 注意参数是name
"新闻舆情": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/ps/news/2.0"
},
"司法风险": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/cb/judicial/2.0"
},
"司法解析": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/judicialCase/2.0"
},
"资质证书": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/certificate/2.0"
},
"历史经营异常": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/hi/abnormal/2.0"
},
"双随机抽查": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/doubleRandomCheck/2.0"
},
"双随机抽查详情": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/doubleRandomCheckDetail/2.0"
},
"重要股东质押": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/stockPledge/shareholder/2.0"
},
"重要股东质押详情": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/mr/stockPledge/shareholder/detail/2.0"
},
"破产重整": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/bankruptcy/2.0"
},
"司法拍卖": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/judicialSale/3.0"
},
"企业基本信息": {
"type": "dict",
"url": "https://open.api.tianyancha.com/services/open/ic/baseinfo/normal"
},
"企业专利信息": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/ipr/patents/3.0"
},
"知识产权出质": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/v4/open/getPledgeReg"
}, "知识产权": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/cb/ipr/3.0"
},
"税务评级": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/taxCredit/2.0"
},
"进出口信用": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/m/importAndExport/2.0"
},
"税收违法": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/taxContravention/2.0"
},
"欠税公告": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/ownTax/2.0"
},
"行政许可": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/getAdministrativeLicense/2.0"
},
"行政处罚": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/punishmentInfo/3.0"
},
"经营异常": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/abnormal/2.0"
},
"严重违法": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/illegalinfo/2.0"
},
"终本案件": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/endCase/2.0"
},
"失信被执行人": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/v4/open/human/dishonest"
},
"被执行人": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/zhixinginfo/2.0"
},
"限制消费令": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/consumptionRestriction/2.0"
},
"质押比例": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/mr/stockPledge/ratio/2.0"
},
"企业三要素": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/ic/verify/2.0"
},
"工商信息": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/cb/ic/2.0"
},
"产品信息": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/appbkInfo/2.0"
}, "股权结构图": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/v4/open/equityRatio"
}, "供应商": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/m/supply/2.0"
}, "企业招投标信息": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/bids/2.0"
},
"股权变更": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/ic/holderChange/2.0"
},
"新闻舆情": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/ps/news/2.0"
},
"司法风险": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/cb/judicial/2.0"
},
"司法解析": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/judicialCase/2.0"
},
"资质证书": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/certificate/2.0"
},
"历史经营异常": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/hi/abnormal/2.0"
},
"双随机抽查": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/doubleRandomCheck/2.0"
},
"双随机抽查详情": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/doubleRandomCheckDetail/2.0"
},
"重要股东质押": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/stockPledge/shareholder/2.0"
},
"重要股东质押详情": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/mr/stockPledge/shareholder/detail/2.0"
},
"破产重整": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/bankruptcy/2.0"
},
"司法拍卖": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/judicialSale/3.0"
},
"企业基本信息": {
"type": "dict",
"url": "https://open.api.tianyancha.com/services/open/ic/baseinfo/normal"
},
"企业专利信息": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/ipr/patents/3.0"
},
"知识产权出质": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/v4/open/getPledgeReg"
},
"知识产权": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/cb/ipr/3.0"
},
"税务评级": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/taxCredit/2.0"
},
"进出口信用": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/m/importAndExport/2.0"
},
"税收违法": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/taxContravention/2.0"
},
"欠税公告": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/ownTax/2.0"
},
"行政许可": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/getAdministrativeLicense/2.0"
},
"行政处罚": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/punishmentInfo/3.0"
},
"经营异常": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/abnormal/2.0"
},
"严重违法": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/mr/illegalinfo/2.0"
},
"终本案件": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/endCase/2.0"
},
"失信被执行人": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/v4/open/human/dishonest"
},
"被执行人": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/zhixinginfo/2.0"
},
"限制消费令": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/jr/consumptionRestriction/2.0"
},
"质押比例": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/mr/stockPledge/ratio/2.0"
},
"企业三要素": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/ic/verify/2.0"
},
"工商信息": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/cb/ic/2.0"
},
"产品信息": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/appbkInfo/2.0"
},
"股权结构图": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/v4/open/equityRatio"
},
"供应商": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/m/supply/2.0"
},
"企业招投标信息": {
"type": "list",
"url": "http://open.api.tianyancha.com/services/open/m/bids/2.0"
},
"高管信息": {
"type": "dict",
"url": "http://open.api.tianyancha.com/services/open/pf/boss/2.0"
}
}