Merge branch 'main' of https://gitlab.fecribd.com/pengsen/rating_process
This commit is contained in:
commit
e4f319cf4f
|
@ -1,7 +1,9 @@
|
|||
import datetime
|
||||
import math
|
||||
import re
|
||||
import pandas as pd
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Header
|
||||
from fastapi import APIRouter, Depends, HTTPException, Header, UploadFile, File
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from App.Crud import RatingFlowCrud as Crud
|
||||
|
@ -13,6 +15,7 @@ from App.Schemas.RatingFlowSchema import Participant
|
|||
from Utils.AccessControl.AccessUtil import rbac
|
||||
from Utils.Authentication.TokenUtil import decode_token
|
||||
from Utils.Common.RegisterUtils import request_to_get, request_to_post
|
||||
from Utils.Common.Utils import CommonUtils
|
||||
from Utils.DataBase.MongoHelperUtils import get_mongodb, MongoHelper
|
||||
from Utils.DataBase.SqlAlchemyUtils import get_db
|
||||
|
||||
|
@ -287,6 +290,83 @@ def func(rating_flow_id: str, year: int, db: Session = Depends(get_db), mongodb:
|
|||
return input_data
|
||||
|
||||
|
||||
@router.post("/import/excel_data", summary='导入excel数据', tags=["评级节点"])
|
||||
async def func(rating_flow_id: str, year: int, excel: UploadFile = File(...), db: Session = Depends(get_db),
|
||||
mongodb: MongoHelper = Depends(get_mongodb)):
|
||||
rf_item = Crud.get_rating_flow(db=db, rating_flow_id=rating_flow_id)
|
||||
if not rf_item:
|
||||
raise HTTPException(status_code=404, detail="评级流程不存在")
|
||||
|
||||
# 获取打分卡; scorecard: 打分卡
|
||||
scorecard = request_to_get(
|
||||
url='http://test.fecribd.com/api/model_store/scorecard/view?_id={}'.format(rf_item.scorecard_id)
|
||||
)
|
||||
if not scorecard:
|
||||
raise HTTPException(status_code=404, detail="打分卡不存在")
|
||||
|
||||
# 获取数据表; data_table: 数据表
|
||||
data_table = scorecard.get('data_table')
|
||||
if not data_table:
|
||||
raise HTTPException(status_code=404, detail="数据表不存在")
|
||||
|
||||
# 填报数据格式; 注: 只有结构没有数据; input_data: 填报数据
|
||||
input_data = dict()
|
||||
fmt_years = ['{}00'.format(int(rf_item.report_date.__str__()[:4]) - i) for i in range(year)]
|
||||
for sheet_name, columns in data_table.items():
|
||||
input_data.update({sheet_name: {}})
|
||||
for fmt_year in fmt_years:
|
||||
input_data[sheet_name].update({fmt_year: {}})
|
||||
for column in columns:
|
||||
input_data[sheet_name][fmt_year].update({column: None})
|
||||
|
||||
# 读取excel数据
|
||||
contents = await excel.read()
|
||||
data = pd.read_excel(contents, skiprows=2)
|
||||
sheet = data.iloc[0, 0]
|
||||
data = pd.read_excel(contents, skiprows=3)
|
||||
# 行数
|
||||
row = data.shape[0]
|
||||
# 列数
|
||||
col = data.shape[1]
|
||||
finance_list = list()
|
||||
# 财报数据
|
||||
for num in range(1, col):
|
||||
finance_dict = dict()
|
||||
for row_num in range(row):
|
||||
try:
|
||||
if isinstance(data.iloc[row_num, 0], float):
|
||||
finance_dict['截止日期'] = data.iloc[row_num, num].strftime("%Y-%m-%d")
|
||||
continue
|
||||
if isinstance(data.iloc[row_num, num], datetime.datetime):
|
||||
finance_dict[data.iloc[row_num, 0].strip()] = data.iloc[row_num, num].strftime("%Y-%m-%d")
|
||||
else:
|
||||
finance_dict[data.iloc[row_num, 0].strip()] = data.iloc[row_num, num]
|
||||
except AttributeError:
|
||||
if isinstance(data.iloc[row_num, num], datetime.datetime):
|
||||
try:
|
||||
finance_dict[data.iloc[row_num, 0].strip()] = data.iloc[row_num, num].strftime("%Y-%m-%d")
|
||||
except AttributeError:
|
||||
finance_dict[data.iloc[row_num, 0]] = data.iloc[row_num, num].strftime("%Y-%m-%d")
|
||||
else:
|
||||
finance_dict[data.iloc[row_num, 0]] = data.iloc[row_num, num]
|
||||
|
||||
for name, info in input_data.items():
|
||||
if name in sheet:
|
||||
for date, content in info.items():
|
||||
year = CommonUtils.date_conversion(finance_dict['截止日期'])
|
||||
if date == year:
|
||||
for key, value in content.items():
|
||||
try:
|
||||
if math.isnan(finance_dict[key]):
|
||||
content[key] = None
|
||||
else:
|
||||
content[key] = finance_dict[key]
|
||||
except KeyError:
|
||||
content[key] = None
|
||||
|
||||
return input_data
|
||||
|
||||
|
||||
@router.get("/import/index_data", summary="导入定性定量指标", tags=["评级节点"])
|
||||
def func(rating_flow_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
|
||||
# 获取流程信息; 检查流程是否存在; rf_item: 流程对象
|
||||
|
@ -703,7 +783,7 @@ def func(rating_flow_id: str, db: Session = Depends(get_db), mongodb: MongoHelpe
|
|||
if not rank_table:
|
||||
raise HTTPException(status_code=404, detail="评级表不存在")
|
||||
external_support = rank_table.get('外部支持')
|
||||
if not rank_table:
|
||||
if not external_support:
|
||||
raise HTTPException(status_code=404, detail="外部支持数据不存在")
|
||||
support_type = external_support.get('类型')
|
||||
if not support_type:
|
||||
|
|
Loading…
Reference in New Issue