This commit is contained in:
王思川 2022-11-18 10:42:03 +08:00
parent 3f7474c9ed
commit 67a8c1e947
11 changed files with 150 additions and 72 deletions

View File

@ -0,0 +1,29 @@
from sqlalchemy.orm import Session
from App.Model import RatingConfigModel as Model
from Utils.UniqueCoder.TimeSerialNumUtils import create_time_serial_num
def create_process_table(db: Session, mongodb, _id, content):
item = Model.ScoreCardProcessTable()
item.id = create_time_serial_num()
item.scorecard_id = _id
obj_id = mongodb.insert_data(dbname="打分卡配置", sheet="流程表", data=content)
item.obj_id = obj_id
db.add(item)
db.commit()
return True
def delete_process_table(db: Session, mongodb, _id):
item = db.query(Model.ScoreCardProcessTable).filter_by(scorecard_id=_id).first()
mongodb.delete_data_by_id(dbname="打分卡配置", sheet="流程表", _id=item.obj_id)
db.query(Model.ScoreCardProcessTable).filter_by(id=item.id).delete()
db.commit()
return True
def get_process_table(db: Session, mongodb, _id):
item = db.query(Model.ScoreCardProcessTable).filter_by(scorecard_id=_id).first()
data = mongodb.find_data_by_id(dbname="打分卡配置", sheet="流程表", _id=item.obj_id)
return data

View File

@ -4,6 +4,8 @@ from sqlalchemy.orm import Session
from App.Model import RatingConfigModel as Model
from App.Schema import ScoreCardSchema as Schema
from App.Schema import CategorySchema
from Utils.DataBase.MongoHelperUtils import MongoHelper
from Utils.UniqueCoder.MysqlColumnIDUtils import set_next_id
@ -61,3 +63,9 @@ def search_scorecard(db: Session, schema: Schema.SearchScoreCardReqBody):
).count()
return items, count
def get_sub_table_data(mongodb: MongoHelper, tablename: str, obj_id: str):
CategorySchema.GetSubTableDataQueryBody(**{"tablename": tablename, "obj_id": obj_id})
item = mongodb.find_data_by_id(dbname="打分卡配置", sheet=tablename, _id=obj_id)
return item.get("data")

View File

@ -2,7 +2,6 @@ from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.orm import relationship
from sqlalchemy import Column, String, ForeignKey
from Utils.DataBase.MongoHelperUtils import get_mongodb
from Utils.DataBase.SqlAlchemyUtils import Base, engine
@ -23,23 +22,6 @@ class ScoreCard(Base):
process_table = relationship("ScoreCardProcessTable", backref="scorecard", uselist=False)
scorecard_dp_ac_auth = relationship("ScoreCardDpAcAuth", back_populates="scorecard")
def search_result_format(self):
__dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns}
__dict.update({"major_category": self.major_category.__str__()})
__dict.update({"subcategory": self.subcategory.__str__()})
__dict.pop("subcategory_id")
__dict.pop("description")
return __dict
def dict(self):
__dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns}
__dict.update({"major_category": self.major_category.__str__()})
__dict.update({"subcategory": self.subcategory.__str__()})
__dict.update({"data_table": None if not self.data_table else self.data_table.dict()})
__dict.update({"index_table": None if not self.index_table else self.index_table.dict()})
__dict.update({"rank_table": None if not self.rank_table else self.rank_table.dict()})
return __dict
class ScoreCardDataTable(Base):
__tablename__ = "scorecard_data_table"
@ -48,11 +30,6 @@ class ScoreCardDataTable(Base):
obj_id = Column(String(24))
scorecard_id = Column(String(16), ForeignKey("scorecard.id"))
def dict(self):
mongodb = get_mongodb()
item = mongodb.find_data_by_id(dbname="打分卡配置", sheet="数据表", _id=self.obj_id)
return item.get("data")
class ScoreCardIndexTable(Base):
__tablename__ = "scorecard_index_table"
@ -61,11 +38,6 @@ class ScoreCardIndexTable(Base):
obj_id = Column(String(24))
scorecard_id = Column(String(16), ForeignKey("scorecard.id"))
def dict(self):
mongodb = get_mongodb()
item = mongodb.find_data_by_id(dbname="打分卡配置", sheet="指标表", _id=self.obj_id)
return item.get("data")
class ScoreCardRankTable(Base):
__tablename__ = "scorecard_rank_table"
@ -74,11 +46,6 @@ class ScoreCardRankTable(Base):
obj_id = Column(String(24))
scorecard_id = Column(String(16), ForeignKey("scorecard.id"))
def dict(self):
mongodb = get_mongodb()
item = mongodb.find_data_by_id(dbname="打分卡配置", sheet="评级表", _id=self.obj_id)
return item.get("data")
class ScoreCardProcessTable(Base):
__tablename__ = "scorecard_process_table"

View File

@ -5,7 +5,7 @@ from sqlalchemy.orm import Session
from App.Crud import ScoreCardCrud, DataTableCrud
from Utils.AccessControl.AccessUtil import rbac
from Utils.DataBase.MongoHelperUtils import get_mongodb
from Utils.DataBase.MongoHelperUtils import get_mongodb, MongoHelper
from Utils.DataBase.SqlAlchemyUtils import get_db
router = APIRouter(
@ -16,7 +16,7 @@ router = APIRouter(
@router.post("/create", summary="新建数据表")
async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db)):
async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
@ -26,27 +26,19 @@ async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get
_file = await file.read()
content = json.loads(_file.decode('utf-8'))
mongodb = get_mongodb()
DataTableCrud.create_data_table(db=db, mongodb=mongodb, _id=_id, content={"data": content})
mongodb.client.close()
return {"info": "Success"}
@router.post("/delete", summary="删除数据表")
def func(_id: str, db: Session = Depends(get_db)):
def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
if not item.data_table:
raise HTTPException(status_code=202, detail="DataTable Not Found")
mongodb = get_mongodb()
DataTableCrud.delete_data_table(db=db, mongodb=mongodb, _id=_id)
mongodb.client.close()
return {"info": "Success"}

View File

@ -5,7 +5,7 @@ from sqlalchemy.orm import Session
from App.Crud import ScoreCardCrud, IndexTableCrud
from Utils.AccessControl.AccessUtil import rbac
from Utils.DataBase.MongoHelperUtils import get_mongodb
from Utils.DataBase.MongoHelperUtils import get_mongodb, MongoHelper
from Utils.DataBase.SqlAlchemyUtils import get_db
router = APIRouter(
@ -16,7 +16,7 @@ router = APIRouter(
@router.post("/create", summary="新建指标表")
async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db)):
async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
@ -26,27 +26,19 @@ async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get
_file = await file.read()
content = json.loads(_file.decode('utf-8'))
mongodb = get_mongodb()
IndexTableCrud.create_index_table(db=db, mongodb=mongodb, _id=_id, content={"data": content})
mongodb.client.close()
return {"info": "Success"}
@router.post("/delete", summary="删除指标表")
def func(_id: str, db: Session = Depends(get_db)):
def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
if not item.index_table:
raise HTTPException(status_code=202, detail="IndexTable Not Found")
mongodb = get_mongodb()
IndexTableCrud.delete_index_table(db=db, mongodb=mongodb, _id=_id)
mongodb.client.close()
return {"info": "Success"}

View File

@ -0,0 +1,57 @@
import json
from fastapi import APIRouter, Depends, HTTPException, UploadFile, File
from sqlalchemy.orm import Session
from App.Crud import ScoreCardCrud, ProcessTableCrud
from Utils.AccessControl.AccessUtil import rbac
from Utils.DataBase.MongoHelperUtils import MongoHelper, get_mongodb
from Utils.DataBase.SqlAlchemyUtils import get_db
router = APIRouter(
tags=["打分卡流程表"],
prefix="/api/model_store/scorecard/process_table",
dependencies=[Depends(rbac)]
)
@router.post("/create", summary="新建流程表")
async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
if item.process_table:
raise HTTPException(status_code=202, detail="ProcessTable Already Existed")
_file = await file.read()
content = json.loads(_file.decode('utf-8'))
ProcessTableCrud.create_process_table(db=db, mongodb=mongodb, _id=_id, content={"data": content})
return {"info": "Success"}
@router.post("/delete", summary="删除流程表")
def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
if not item.process_table:
raise HTTPException(status_code=202, detail="ProcessTable Not Found")
ProcessTableCrud.delete_process_table(db=db, mongodb=mongodb, _id=_id)
return {"info": "Success"}
@router.post("/view", summary="查看流程表")
def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
if not item.process_table:
raise HTTPException(status_code=202, detail="ProcessTable Not Found")
item = ProcessTableCrud.get_process_table(db=db, mongodb=mongodb, _id=_id)
return item.get("data")

View File

@ -5,7 +5,7 @@ from sqlalchemy.orm import Session
from App.Crud import ScoreCardCrud, RankTableCrud
from Utils.AccessControl.AccessUtil import rbac
from Utils.DataBase.MongoHelperUtils import get_mongodb
from Utils.DataBase.MongoHelperUtils import get_mongodb, MongoHelper
from Utils.DataBase.SqlAlchemyUtils import get_db
router = APIRouter(
@ -16,7 +16,7 @@ router = APIRouter(
@router.post("/create", summary="新建评级表")
async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db)):
async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
@ -26,27 +26,19 @@ async def func(_id: str, file: UploadFile = File(...), db: Session = Depends(get
_file = await file.read()
content = json.loads(_file.decode('utf-8'))
mongodb = get_mongodb()
RankTableCrud.create_rank_table(db=db, mongodb=mongodb, _id=_id, content={"data": content})
mongodb.client.close()
return {"info": "Success"}
@router.post("/delete", summary="删除评级表")
def func(_id: str, db: Session = Depends(get_db)):
def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)):
item = ScoreCardCrud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
if not item.rank_table:
raise HTTPException(status_code=202, detail="RankTable Not Found")
mongodb = get_mongodb()
RankTableCrud.delete_rank_table(db=db, mongodb=mongodb, _id=_id)
mongodb.client.close()
return {"info": "Success"}

View File

@ -5,6 +5,7 @@ from App.Crud import ScoreCardCrud as Crud
from App.Crud import CategoryCrud
from App.Schema import ScoreCardSchema as Schema
from Utils.AccessControl.AccessUtil import rbac
from Utils.DataBase.MongoHelperUtils import MongoHelper, get_mongodb
from Utils.DataBase.SqlAlchemyUtils import get_db
router = APIRouter(
@ -14,6 +15,17 @@ router = APIRouter(
)
def scorecard_to_dict(scorecard, mongodb: MongoHelper):
__dict = {c.name: getattr(scorecard, c.name, None) for c in scorecard.__table__.columns}
__dict.update({"major_category": scorecard.major_category.__str__()})
__dict.update({"subcategory": scorecard.subcategory.__str__()})
__dict.update({"data_table": None if not scorecard.data_table else Crud.get_sub_table_data(mongodb, "数据表", scorecard.data_table.obj_id)})
__dict.update({"index_table": None if not scorecard.index_table else Crud.get_sub_table_data(mongodb, "指标表", scorecard.index_table.obj_id)})
__dict.update({"rank_table": None if not scorecard.rank_table else Crud.get_sub_table_data(mongodb, "评级表", scorecard.rank_table.obj_id)})
__dict.update({"process_table": None if not scorecard.process_table else Crud.get_sub_table_data(mongodb, "流程表", scorecard.process_table.obj_id)})
return __dict
@router.post("/create", summary="新建打分卡")
def func(schema: Schema.CreateScoreCardReqBody, db: Session = Depends(get_db)):
item = Crud.get_scorecard_by_name(db=db, name=schema.name)
@ -67,18 +79,26 @@ def func(_id: str, schema: Schema.EditScoreCardReqBody, db: Session = Depends(ge
@router.get("/view", summary="查看打分卡")
def func(_id: str, db: Session = Depends(get_db)):
def func(_id: str, db: Session = Depends(get_db), mongodb=Depends(get_mongodb)):
item = Crud.get_scorecard_by_id(db=db, _id=_id)
if not item:
raise HTTPException(status_code=404, detail="ScoreCard Not Found")
return item.dict()
return scorecard_to_dict(item, mongodb=mongodb)
@router.post("/search", summary="查询打分卡", response_model=Schema.SearchScoreCardResBody)
def func(schema: Schema.SearchScoreCardReqBody, db: Session = Depends(get_db)):
scorecards, total = Crud.search_scorecard(db=db, schema=schema)
items = [scorecard.search_result_format() for scorecard in scorecards]
def search_result_format(obj):
__dict = {c.name: getattr(obj, c.name, None) for c in obj.__table__.columns}
__dict.update({"major_category": obj.major_category.__str__()})
__dict.update({"subcategory": obj.subcategory.__str__()})
__dict.pop("subcategory_id")
__dict.pop("description")
return __dict
items = [search_result_format(scorecard) for scorecard in scorecards]
return {"items": items, "total": total}

View File

@ -1,9 +1,17 @@
from enum import Enum
from typing import List
from pydantic import BaseModel
from Utils.Schemas.CommonSchema import EditBaseModel
class SubTableNameEnum(Enum):
enum01 = "数据表"
enum02 = "指标表"
enum03 = "评级表"
enum04 = "流程表"
class CreateScoreCardDpAcAuthReqBody(BaseModel):
department_id: str = None
scorecard_id: str = None
@ -41,3 +49,11 @@ class SearchScoreCardResItem(BaseModel):
class SearchScoreCardResBody(BaseModel):
items: List[SearchScoreCardResItem] = []
total: int = 0
class GetSubTableDataQueryBody(BaseModel):
tablename: SubTableNameEnum = None
obj_id: str = None
class Config:
use_enum_values = True

View File

@ -44,5 +44,8 @@ class MongoHelper:
def get_mongodb():
db = MongoHelper("test")
return db
try:
db = MongoHelper("test")
yield db
finally:
db.client.close()

View File

@ -1,7 +1,8 @@
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from App.Router import ScoreCardRouter, CategoryRouter, DataTableRouter, IndexTableRouter, RankTableRouter
from App.Router import ScoreCardRouter, CategoryRouter, DataTableRouter, IndexTableRouter, RankTableRouter, \
ProcessTableRouter
app = FastAPI(
title="模型仓库",
@ -22,3 +23,4 @@ app.include_router(CategoryRouter.router)
app.include_router(DataTableRouter.router)
app.include_router(IndexTableRouter.router)
app.include_router(RankTableRouter.router)
app.include_router(ProcessTableRouter.router)