changes
This commit is contained in:
parent
f48361023a
commit
cb7e348fd5
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue