修改评级逻辑

This commit is contained in:
wcq 2023-08-04 16:59:19 +08:00
parent 05b348b2d9
commit 46280dc9f6
8 changed files with 165 additions and 30 deletions

View File

@ -34,7 +34,21 @@ def load_bj_model_dict():
def company_rate_add(db: Session, data: schemas.CompanyRateAddInfo):
file_info = FormFileCrud.file_get(db, data.file_md)
item = CompanyRate(**data.dict())
item.file_data_state = "未上传"
item.rate_state = '未评级'
item.publish_state = '未披露'
db.add(item)
db.commit()
db.refresh(item)
marge_data_to_db(db, item.id)
db.refresh(item)
return item
def company_rate_file_data_load(db: Session, item_id, file_md):
item = db.query(CompanyRate).filter(CompanyRate.id == item_id).first()
file_info = FormFileCrud.file_get(db, file_md)
wj_data = None
try:
file_path = file_info.file_url
@ -43,16 +57,11 @@ def company_rate_add(db: Session, data: schemas.CompanyRateAddInfo):
print_error(e)
sys.stderr.write(str(e))
raise HTTPException(detail='文件解析错误,请重新上传', status_code=301)
item = CompanyRate(**data.dict())
item.wj_data = wj_data
item.man_data = deepcopy(wj_data)
item.rate_state = '未评级'
item.publish_state = '未披露'
db.add(item)
item.file_md = file_md
item.file_data_state = "已就绪"
db.commit()
db.refresh(item)
marge_data_to_db(db, item.id)
db.refresh(item)
return item
@ -122,6 +131,7 @@ def load_api_data_to_db(db: Session, item_id):
if item:
item.api_data = json.dumps(load_api_data(item.company_name))
marge_data_by_item(db, item)
item.api_data_state="已就绪"
db.commit()
db.refresh(item)
return item
@ -147,15 +157,15 @@ def check_none_in_dict_recursive(dictionary):
def marge_data_by_item(db: Session, item):
wj_data = json_parse(item.wj_data)
# wj_data = json_parse(item.wj_data)
api_data = json_parse(item.api_data)
man_data = json_parse(item.man_data)
# man_data = json_parse(item.man_data)
# mgr_data = {**bj_model_dict, **wj_data, **api_data, **{k: v for k, v in man_data.items() if v is not None}}
# item.mgr_data = json.dumps(mgr_data)
mgr_data_state = '已就绪'
item.api_data_state = '未就绪' if check_none_in_dict_recursive(wj_data) else "已就绪"
item.man_data_state = '未就绪' if check_none_in_dict_recursive(man_data) else "已就绪"
item.mgr_data_state = "已就绪" if (item.api_data_state == '已就绪' and item.man_data_state == '已就绪') else "未就绪"
item.api_data_state = '未就绪' if check_none_in_dict_recursive(api_data) else "已就绪"
# item.man_data_state = '未就绪' if check_none_in_dict_recursive(man_data) else "已就绪"
item.mgr_data_state = "已就绪" if (item.api_data_state == '已就绪' and item.file_data_state == '已就绪') else "未就绪"
db.commit()

View File

@ -48,7 +48,7 @@ def load_api_data(company_name):
成立年限 = datetime.now().year - datetime.fromtimestamp(
企业基本信息['estiblishTime'] / 1000).year if 企业基本信息 else 0
企业类型 = '有限责任公司' if '有限责任' in 企业基本信息['companyOrgType'].split("(")[0] else '股份制公司'
企业类型 = '有限责任公司' if 企业基本信息 and '有限责任' in 企业基本信息['companyOrgType'].split("(")[0] else '股份制公司'
开庭公告_劳动争议 = len(
[item["caseReason"] for item in filter_bg(司法风险['ktAnnouncementList'], company_name) if
@ -95,3 +95,40 @@ def load_api_data(company_name):
"严重违法": 严重违法数量
}
return data
def load_report_need_data(company_name):
工商信息, _ = tianyancha_api.get("工商信息", {"keyword": company_name})
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'],
"主要产品": '',
"历史沿革": '',
"股权结构": '',
"高管构成": '',
"企业资质": '',
"企业商标": '',
"企业专利": '',
"企业软件著作权": '',
"企业供应商": '',
"企业招投标情况": ''
}
return data

View File

@ -1,7 +1,7 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from context.common import common_db, CompanyUserTokenDataModel, company_user_auth_util
from context.common import common_db, CompanyUserTokenDataModel, company_user_auth_util, auth_util
from . import schemas
from . import crud
from utils.sqlalchemy_common_utils import QueryParams, query_common
@ -19,6 +19,20 @@ def company_rate_add(req: schemas.CompanyRateAddReq, db: Session = Depends(commo
return schemas.CompanyRateAddRes(**item.to_dict())
@router.post("/company_rate/create", summary="创建公司评级", response_model=schemas.CompanyRateAddRes)
def company_rate_add(req: schemas.CompanyRateAddReq, db: Session = Depends(common_db.get_db),
token_data: auth_util.tokenDataModel = Depends(auth_util.token_data_depend)):
item = crud.company_rate_add(db, req)
return schemas.CompanyRateAddRes(**item.to_dict())
@router.post("/company_rate/upload_file", summary="问卷数据上传")
def company_rate_file_data_load(req: schemas.CompanyRateFileDataLoadReq, db: Session = Depends(common_db.get_db),
token_data: auth_util.tokenDataModel = Depends(auth_util.token_data_depend)):
item = crud.company_rate_file_data_load(db, req.id, req.file_md)
return "成功"
@router.post("/company_rate/delete", summary="删除公司评级数据")
def company_rate_delete(req: schemas.CompanyRateDeleteReq, db: Session = Depends(common_db.get_db)):
crud.company_rate_delete(db, req.id)

View File

@ -56,6 +56,11 @@ class CompanyRateAddReq(CompanyRateAddInfo):
pass
class CompanyRateFileDataLoadReq(BaseModel):
id: int
file_md: str
class CompanyRateAddRes(CompanyRateInfo):
pass

View File

@ -4,7 +4,7 @@ from fastapi import APIRouter, UploadFile, File, Depends, HTTPException, Header
from sqlalchemy.orm import Session
from . import crud
from utils.common_utils import file_md5
from context.common import common_db, company_user_auth_util, CompanyUserTokenDataModel
from context.common import common_db, company_user_auth_util, CompanyUserTokenDataModel, auth_util
from . import schemas
from base64 import b64decode
@ -17,9 +17,9 @@ allow_file_type = {
@router.post('/license_file_upload', response_model=schemas.FormFileInfo, summary='营业执照文件上传')
def license_file_upload(name: str = Header(None), file: UploadFile = File(...),
db: Session = Depends(common_db.get_db)
# token_data: CompanyUserTokenDataModel = Depends(company_user_auth_util.token_data_depend)
):
db: Session = Depends(common_db.get_db)
# token_data: CompanyUserTokenDataModel = Depends(company_user_auth_util.token_data_depend)
):
if name:
name = b64decode(name.encode('utf-8')).decode('utf-8')
mime_type = file.content_type
@ -48,9 +48,9 @@ def license_file_upload(name: str = Header(None), file: UploadFile = File(...),
user_id = ""
form_file = crud.add_file(db,
schemas.FormFileCreate(md=file_md, file_name=name or file.filename,
mime_type=mime_type,
user_id=user_id, common_type=common_type,
file_url=file_url))
mime_type=mime_type,
user_id=user_id, common_type=common_type,
file_url=file_url))
return form_file.to_dict()
@ -89,9 +89,50 @@ def form_file_upload(name: str = Header(None), file: UploadFile = File(...),
# user_id = ""
form_file = crud.add_file(db,
schemas.FormFileCreate(md=file_md, file_name=name or file.filename,
mime_type=mime_type,
user_id=user_id, common_type=common_type,
file_url=file_url))
mime_type=mime_type,
user_id=user_id, common_type=common_type,
file_url=file_url))
return form_file.to_dict()
@router.post('/form_file_upload_admin', response_model=schemas.FormFileInfo, summary='表单文件上传')
def form_file_upload(name: str = Header(None), file: UploadFile = File(...),
db: Session = Depends(common_db.get_db),
token_data: auth_util.tokenDataModel = Depends(auth_util.token_data_depend)
):
if name:
name = b64decode(name.encode('utf-8')).decode('utf-8')
mime_type = file.content_type
if mime_type != 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
raise Exception('不允许上传该类型文件')
common_type, file_type = file.content_type.split('/')
# if common_type not in allow_file_type:
# raise Exception('不允许上传该类型文件')
content_start = file.file.read(10240)
file_md = file_md5(content_start)
save_path = Path(f"static/upload_files/{common_type}/{file_type}")
file_save_path = save_path / file_md
file_url = f'/static/upload_files/{common_type}/{file_type}/{file_md}'
if not os.path.exists(save_path):
os.makedirs(save_path)
form_file = crud.get_file_by_md(db, file_md)
if not form_file:
if not os.path.exists(file_save_path):
with open(file_save_path, 'wb') as f:
f.write(content_start)
while True:
content = file.file.read(10240)
if content:
f.write(content)
else:
break
user_id = token_data.id
# user_id = ""
form_file = crud.add_file(db,
schemas.FormFileCreate(md=file_md, file_name=name or file.filename,
mime_type=mime_type,
user_id=user_id, common_type=common_type,
file_url=file_url))
return form_file.to_dict()

View File

@ -13,3 +13,4 @@ jurigged~=0.5.5
python-jose
sqlalchemy_utils
numpy~=1.25.2
openpyxl

View File

@ -157,6 +157,10 @@ api_config = {
"企业三要素": {
"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"
}
}

View File

@ -47,9 +47,10 @@ def parse_file_data_interface(file_path):
continue
return {
"问卷数据": questionnaire_dict,
"财报数据": financial_dict
}
"问卷数据": questionnaire_dict,
"财报数据": financial_dict
}
def parse_file_data_interface2(file_path):
file_data = {
@ -110,7 +111,7 @@ def parse_file_data_interface2(file_path):
},
"财报数据": {
"2021年末": {
"数据是否经过审计":"",
"数据是否经过审计": "",
"财务数据": "2021年末",
"资产负债表": None,
"总资产": 6478468.9,
@ -169,6 +170,29 @@ def bj_rate_interface(rate_data):
return data
def smebiz_create_flow(id):
print(f"创建评级流程:{id}")
return id
res = rq.post('http://127.0.0.1:8010/api/model_management/new_process_file', json.dumps(
{"pid": id, "model_name": "中小商业企业信用模型"}), timeout=8)
def smebiz_post_wj_data(pid, data):
res = rq.post('http://127.0.0.1:8010/api/model_management/upload_reference_data', json.dumps(
{"pid": pid, "data": data}), timeout=8)
print(res)
def smebiz_rate_interface(pid):
"""
中小商业企业评级接口
"""
res = rq.post('http://127.0.0.1:8010/api/model_management/score_result', json.dumps(
{"pid": pid}), timeout=8)
data = res.json()
return data
def bj_finance_cal_interface(data):
"""
财报指标计算接口
@ -177,4 +201,3 @@ def bj_finance_cal_interface(data):
{"name": '保健服务业信誉评级模型', "index": data}), timeout=8)
data = res.json()
return data