2022-11-11 15:21:19 +08:00
|
|
|
import datetime
|
|
|
|
import math
|
|
|
|
import pandas as pd
|
|
|
|
from fastapi import APIRouter, Depends, UploadFile, File, HTTPException
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
2022-11-17 15:18:34 +08:00
|
|
|
from APPData.Crud import CompanyCrud, BalanceCrud
|
|
|
|
from Utils.DataBase.MongoHelperUtils import get_mongodb
|
2022-11-11 15:21:19 +08:00
|
|
|
from Utils.DataBase.SqlAlchemyUtils import get_db
|
2022-11-17 15:18:34 +08:00
|
|
|
from Utils.TycApi.CommonUtil import CommonUtils
|
2022-11-11 15:21:19 +08:00
|
|
|
|
|
|
|
router = APIRouter(
|
|
|
|
tags=["资产负债表"],
|
|
|
|
prefix="/api/balance_sheet"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/upload", summary="上传数据")
|
|
|
|
async def func01(name: str, excel: UploadFile = File(...), db: Session = Depends(get_db)):
|
|
|
|
# 根据name查询企业是否存在
|
|
|
|
data = CompanyCrud.get_company_by_name(db=db, name=name)
|
|
|
|
if not data:
|
|
|
|
# 不能存在新建企业再返回cid
|
|
|
|
data = CompanyCrud.create_company_by_name(db=db, name=name)
|
|
|
|
cid = data.id
|
|
|
|
contents = await excel.read()
|
|
|
|
data = pd.read_excel(contents, skiprows=3)
|
|
|
|
# 行数
|
|
|
|
row = data.shape[0]
|
|
|
|
# 列数
|
|
|
|
col = data.shape[1]
|
|
|
|
# 财报数据
|
|
|
|
for num in range(1, col):
|
|
|
|
finance_dict = dict()
|
|
|
|
finance_dict['企业ID'] = cid
|
2022-11-17 15:18:34 +08:00
|
|
|
finance_dict['更新时间'] = CommonUtils.get_current_time()
|
2022-11-11 15:21:19 +08:00
|
|
|
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 key, value in finance_dict.items():
|
|
|
|
try:
|
|
|
|
if math.isnan(value):
|
|
|
|
finance_dict[key] = None
|
|
|
|
except TypeError:
|
|
|
|
continue
|
2022-11-17 15:18:34 +08:00
|
|
|
mongodb = get_mongodb()
|
|
|
|
BalanceCrud.create_balance_by_id(db=db, mongodb=mongodb, _id=cid, reportdate=finance_dict['截止日期'],
|
|
|
|
condition={"企业ID": cid, "截止日期": finance_dict['截止日期']}, content=finance_dict)
|
|
|
|
mongodb.client.close()
|
2022-11-11 15:21:19 +08:00
|
|
|
return {"info": "Success"}
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/view", summary="查看数据")
|
2022-11-17 15:18:34 +08:00
|
|
|
def func02(cid: str, db: Session = Depends(get_db)):
|
|
|
|
mongodb = get_mongodb()
|
2022-11-11 15:21:19 +08:00
|
|
|
# 查询mysql数据库中的_id
|
|
|
|
db_item = CompanyCrud.get_company_by_id(db, _id=cid)
|
|
|
|
if not db_item:
|
|
|
|
raise HTTPException(status_code=204, detail="Company Not Found")
|
|
|
|
# 根据_id查询mongodb数据库
|
2022-11-17 15:18:34 +08:00
|
|
|
data = BalanceCrud.find_balance_by_id(db=db, mongodb=mongodb, _id=cid)
|
2022-11-11 15:21:19 +08:00
|
|
|
return data
|