This commit is contained in:
P3ngSaM 2023-08-08 10:42:18 +08:00
parent f48361023a
commit cb7e348fd5
2 changed files with 253 additions and 6 deletions

View File

@ -5,6 +5,7 @@ import numpy as np
import openpyxl
import pandas as pd
import pythoncom
import xlrd
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, BackgroundTasks
@ -81,7 +82,7 @@ async def func(model_name: str = '中小商业企业信用模型', file: UploadF
return {"message": "文件更新成功", "file_id": str(result.get('模型ID'))}
@router.post("/new_process_file", summary="新建流程文件", tags=["流程文件管理"])
@router.post("/new_process_file", summary="新建流程文件", tags=["流程文件管理"], include_in_schema=False)
def func(pid: int = 123456, model_name: str = '中小商业企业信用模型',
mongo_db: MongoHelper = Depends(get_mongodb)):
# 根据模型名称查询该模型是否存在
@ -97,7 +98,7 @@ def func(pid: int = 123456, model_name: str = '中小商业企业信用模型',
return {"message": "流程文件新建成功", "file_id": str(file_id)}
@router.post("/delete_process_file", summary="删除流程文件", tags=["流程文件管理"])
@router.post("/delete_process_file", summary="删除流程文件", tags=["流程文件管理"], include_in_schema=False)
def func(pid: int = 123456, mongo_db: MongoHelper = Depends(get_mongodb)):
# 根据processid查询对应fid
result = mongo_db.search_data(db='中小商会企业信用评级', col='流程数据', cd={"流程ID": pid})
@ -140,7 +141,7 @@ async def func(model_name: str = '中小商业企业信用模型', mongo_db: Mon
return FileResponse(path, filename=file_name, media_type='application/octet-stream', background=task)
@router.post("/upload_questionnaire", summary="模型问卷上传", tags=["问卷管理"])
@router.post("/upload_questionnaire", summary="模型问卷上传", tags=["问卷管理"], include_in_schema=False)
async def func(background_tasks: BackgroundTasks, pid: int = 123456, file: UploadFile = File(...),
mongo_db: MongoHelper = Depends(get_mongodb)):
# 将上传的问卷文件保存到本地
@ -246,7 +247,112 @@ async def func(background_tasks: BackgroundTasks, model_name: str = '中小商
}
@router.post("/upload_reference_data", summary="提交背调数据", tags=["问卷管理"])
@router.post("/upload_model_data", summary="提交模型打分所需数据返回评级结果", tags=["评级结果"])
async def func(background_tasks: BackgroundTasks, schemas: ModelSchemas.ModelScoreData,
mongo_db: MongoHelper = Depends(get_mongodb)):
# 查询模型文件并保存在项目本地
result = mongo_db.search_data(db='中小商会企业信用评级', col='模型数据', cd={"模型名称": '中小商业企业信用模型'})
if not result:
raise HTTPException(status_code=404, detail="该模型不存在")
fid = result.get('模型ID')
file = mongo_db.get_file(db='中小商会企业信用评级', bucket='模型文件', fid=str(fid))
file_name = "{}.xlsx".format('中小商业企业信用模型')
path = os.path.join(os.getcwd(), 'Utils', 'File', 'generate', file_name)
myfile = open(path, mode='wb')
myfile.write(file)
wb = load_workbook(path)
# 将经营问卷填入文件
business_sheet = wb['经营问卷']
business_data = schemas.经营问卷.dict()
business_sheet_rows = business_sheet.max_row
for i in range(2, business_sheet_rows + 1):
key_cell = 'A{}'.format(i)
val_cell = 'D{}'.format(i)
cell_name = business_sheet[key_cell].value
if cell_name == '对外服务总次数(包括电话咨询、客户支持、产品售后等)':
value = business_data.get('对外服务总次数')
else:
value = business_data.get(cell_name)
business_sheet[val_cell] = value
# 财务问卷填入文件
financial_sheet = wb['财务问卷']
financial_data = schemas.财务问卷.dict()
financial_sheet_rows = financial_sheet.max_row - 5
for j in range(2, financial_sheet_rows + 1):
key_cell = 'B{}'.format(j)
val1_cell = 'C{}'.format(j)
val2_cell = 'D{}'.format(j)
val3_cell = 'E{}'.format(j)
cell_name = financial_sheet[key_cell].value
if cell_name == '减:累计折旧':
value = financial_data.get('累计折旧')
else:
value = financial_data.get(cell_name)
financial_sheet[val1_cell] = value[0]
financial_sheet[val2_cell] = value[1]
financial_sheet[val3_cell] = value[2]
audit = financial_data.get('是否审计')
financial_sheet['B35'] = audit
firm = financial_data.get('会计事务所')
financial_sheet['B36'] = firm
# 背调数据填入文件
backtrack_sheet = wb['背调接口']
backtrack_data = schemas.背调接口.dict()
backtrack_sheet_rows = backtrack_sheet.max_row
for i in range(2, backtrack_sheet_rows + 1):
key_cell = 'A{}'.format(i)
val_cell = 'C{}'.format(i)
cell_name = backtrack_sheet[key_cell].value
if cell_name == '开庭公告(被告-合同纠纷、劳动争议)':
value = backtrack_data.get('开庭公告被告合同纠纷劳动争议')
elif cell_name == '行政处罚(警告、通报批评、罚款)':
value = backtrack_data.get('行政处罚警告通报批评罚款')
elif cell_name == '行政处罚(没收违法所得、没收非法财务...':
value = backtrack_data.get('行政处罚没收违法所得没收非法财务')
else:
value = backtrack_data.get(cell_name)
backtrack_sheet[val_cell] = value
wb.save(path)
def just_open(filename):
# 解决读取公式计算数据为None的问题
pythoncom.CoInitialize()
xlApp = Dispatch("Excel.Application")
xlApp.Visible = False
xlApp.DisplayAlerts = 0
xlBook = xlApp.Workbooks.Open(filename)
xlBook.SaveAs(filename)
xlBook.Close()
just_open(path)
wb = openpyxl.load_workbook(path, data_only=True)
sheet_01 = wb['中小商业企业信用模型']
index_data = [
{"指标": row[2].value, "数值": row[3].value, "单位": row[4].value,
"权重": row[7].value, "得分": row[8].value} for row in sheet_01.iter_rows()]
index_data = index_data[2:42]
rating_result = {
"级别": sheet_01.cell(43, 6).value,
"总分": round(sheet_01.cell(43, 9).value, 2)
}
background_tasks.add_task(del_file, path)
return {
"message": "查询成功",
"data": {
"评级结果": rating_result,
"指标数值与得分": index_data
}
}
@router.post("/upload_reference_data", summary="提交背调数据", tags=["问卷管理"], include_in_schema=False)
async def func(background_tasks: BackgroundTasks, schemas: ModelSchemas.ReferencDataBody,
mongo_db: MongoHelper = Depends(get_mongodb)):
pid = schemas.pid
@ -296,7 +402,7 @@ async def func(background_tasks: BackgroundTasks, schemas: ModelSchemas.Referenc
return {"message": "上传成功"}
@router.post("/questionnaire_data", summary="查看问卷数据", tags=["问卷管理"])
@router.post("/questionnaire_data", summary="查看问卷数据", tags=["问卷管理"], include_in_schema=False)
async def func(pid: int = 123456, mongo_db: MongoHelper = Depends(get_mongodb)):
result = mongo_db.search_data(db='中小商会企业信用评级', col='流程数据', cd={"流程ID": pid})
if not result:
@ -362,7 +468,7 @@ async def func(pid: int = 123456, mongo_db: MongoHelper = Depends(get_mongodb)):
}
@router.post("/reference_data", summary="查看背调数据", tags=["问卷管理"])
@router.post("/reference_data", summary="查看背调数据", tags=["问卷管理"], include_in_schema=False)
async def func(pid: int = 123456, mongo_db: MongoHelper = Depends(get_mongodb)):
result = mongo_db.search_data(db='中小商会企业信用评级', col='流程数据', cd={"流程ID": pid})
if not result:

View File

@ -1,7 +1,148 @@
# -*- coding: utf-8 -*-
from enum import Enum
from typing import Optional, Union, List
from pydantic import BaseModel
class ReferencDataBody(BaseModel):
pid: int = 123456
referenc_data: list = []
class Business(BaseModel):
企业名称: str
联系人名称: str
股东性质: str
主营业务: str
高管平均从业年限: Union[int, float]
是否设置董事会: str
董事会人数: int
是否设置监事会: str
监事人数: int
年度公司股东或关联方给予公司的资金支持金额: Union[int, float]
管理人员人数: int
职能人员人数: int
销售人员人数: int
技术服务人员人数: int
本科及以上人员人数: int
专科及以下人员人数: int
年末员工总数: int
年度离职人数: int
年末在职员工年内参与培训人数: int
员工周均工作天数: Union[int, float]
员工日均工作时长: Union[int, float]
年度因公伤亡人次: int
人民币开户银行名称: str
人民币开户银行账号: str
外币开户银行名称: str
外币开户银行账号: str
贷款卡编号: str
经营场所建筑面积: str
经营场所位置: str
经营场所权属关系: str
拥有质量管理制度: str
拥有财务管理制度: str
拥有合同管理制度: str
拥有人力资源管理制度: str
工商信用记录: str
海关信用记录: str
银行信用记录: str
法院信用记录: str
生产安全信息: str
社会责任实施: str
销售产品金额: Union[int, float]
退回产品金额: Union[int, float]
发生过客户隐私泄露: str
对外服务总次数: int
客户有效投诉次数: int
投诉解决次数: int
投诉响应时间: Union[int, float]
class Financial(BaseModel):
货币资金: List[float]
应收账款: List[float]
其他应收款: List[float]
预付款项: List[float]
存货: List[float]
流动资产合计: List[float]
非流动资产合计: List[float]
固定资产原价: List[float]
累计折旧: List[float]
固定资产净额: List[float]
固定资产总计: List[float]
无形资产及其他资产合计: List[float]
资产总计: List[float]
短期借款: List[float]
应付票据: List[float]
应付账款: List[float]
预收账款: List[float]
应付利息: List[float]
其他应付款: List[float]
流动负债合计: List[float]
长期借款: List[float]
应付债券: List[float]
非流动负债合计: List[float]
负债合计: List[float]
未分配利润: List[float]
所有者权益合计: List[float]
营业收入: List[float]
营业成本: List[float]
利息费用: List[float]
净利润: List[float]
是否审计: str
会计事务所: str
class Backtrack(BaseModel):
企业中文名称: str
所属国民经济行业: str
英文名称: str
工商注册号: str
组织机构代码: str
统一社会信用代码: str
注册资本: str
企业类型: str
注册地址: str
成立日期: str
核准日期: str
营业期限终止日期: str
法定代表人: str
经营地址: str
邮政编码: str
联系电话: str
传真号码: str
电子邮箱: str
企业网址: str
经营范围: str
主要产品: str
历史沿革: str
股权结构: str
高管构成: str
企业资质: str
企业商标: str
企业专利: str
企业软件著作权: str
企业供应商: str
企业招投标情况: str
成立年限: Union[int, float]
近三年股东变更次数: int
最近10条企业舆情负面占比: float
开庭公告被告合同纠纷劳动争议: int
纳税信用等级: str
双随机抽查结果: str
经营异常: int
欠税公告: int
行政处罚警告通报批评罚款: int
行政处罚没收违法所得没收非法财务: int
被执行人: int
失信被执行人: int
税收违法: int
严重违法: int
class ModelScoreData(BaseModel):
经营问卷: Business
财务问卷: Financial
背调接口: Backtrack