编写管理端接口

This commit is contained in:
wcq 2023-09-08 16:07:58 +08:00
parent 11875d46a1
commit 4ceb73e96a
11 changed files with 88 additions and 30 deletions

View File

@ -224,6 +224,8 @@ class CertWorkNode(Base, SalBase):
status: Mapped[NodeState] = mapped_column(Enum(NodeState), status: Mapped[NodeState] = mapped_column(Enum(NodeState),
default=NodeState.incomplete, comment="服务状态") default=NodeState.incomplete, comment="服务状态")
remark: Mapped[str] = mapped_column(TEXT, nullable=True, comment="备注") remark: Mapped[str] = mapped_column(TEXT, nullable=True, comment="备注")
cert_create_time: Mapped[datetime] = mapped_column(DateTime, nullable=True,
comment='证书创建时间')
create_time: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), nullable=True, create_time: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), nullable=True,
comment='创建时间') comment='创建时间')
finish_time: Mapped[datetime] = mapped_column(DateTime, nullable=True, comment='完成时间') finish_time: Mapped[datetime] = mapped_column(DateTime, nullable=True, comment='完成时间')

View File

@ -4,6 +4,7 @@ from utils.pydantic_utils import AllOptional
from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from utils.sqlalchemy_common_utils import QueryParams, QueryInclude
from datetime import date, datetime from datetime import date, datetime
from ...schemas import NodeState from ...schemas import NodeState
from ..upload_file.schemas import UploadFileInfo
class CertWorkNodeId(BaseModel): class CertWorkNodeId(BaseModel):
@ -13,10 +14,11 @@ class CertWorkNodeId(BaseModel):
class CertWorkNodeAdd(BaseModel): class CertWorkNodeAdd(BaseModel):
serve_id: str serve_id: str
file_id: Optional[str] = None file_id: Optional[str] = None
file: Optional[dict] = None file: Optional[UploadFileInfo] = None
status: Optional[NodeState] = NodeState.incomplete status: Optional[NodeState] = NodeState.incomplete
remark: Optional[str] = None remark: Optional[str] = None
create_time: Optional[datetime] = None create_time: Optional[datetime] = None
cert_create_time: Optional[datetime] = None
finish_time: Optional[datetime] = None finish_time: Optional[datetime] = None

View File

@ -3,6 +3,7 @@ from pydantic import BaseModel
from utils.pydantic_utils import AllOptional from utils.pydantic_utils import AllOptional
from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from utils.sqlalchemy_common_utils import QueryParams, QueryInclude
from datetime import date, datetime from datetime import date, datetime
from ..company_index.schemas import CompanyIndexInfo
class CompanyUserId(BaseModel): class CompanyUserId(BaseModel):
@ -11,7 +12,7 @@ class CompanyUserId(BaseModel):
class CompanyUserAdd(BaseModel): class CompanyUserAdd(BaseModel):
name: str name: str
company: Optional[dict] = None company: Optional[CompanyIndexInfo] = None
email: Optional[str] = None email: Optional[str] = None
phone: Optional[str] = None phone: Optional[str] = None
passwd: str passwd: str

View File

@ -5,6 +5,7 @@ from ...schemas import NodeState
from utils.pydantic_utils import AllOptional from utils.pydantic_utils import AllOptional
from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from utils.sqlalchemy_common_utils import QueryParams, QueryInclude
from datetime import date, datetime from datetime import date, datetime
from ..upload_file.schemas import UploadFileInfo
class RatePostDataCheckNodeId(BaseModel): class RatePostDataCheckNodeId(BaseModel):
@ -14,7 +15,7 @@ class RatePostDataCheckNodeId(BaseModel):
class RatePostDataCheckNodeAdd(BaseModel): class RatePostDataCheckNodeAdd(BaseModel):
serve_id: str serve_id: str
data: Optional[dict] = {} data: Optional[dict] = {}
file: Optional[dict] = None file: Optional[UploadFileInfo] = None
file_id: Optional[str] = None file_id: Optional[str] = None
parsed_data: Optional[dict] = {} parsed_data: Optional[dict] = {}
status: Optional[NodeState] = NodeState.incomplete status: Optional[NodeState] = NodeState.incomplete

View File

@ -50,3 +50,6 @@ def make_rate_serve_id(db: Session):
if db.query(RateServe).filter(RateServe.serve_id == new_id).first(): if db.query(RateServe).filter(RateServe.serve_id == new_id).first():
raise HTTPException(status_code=303, detail='创建服务ID失败') raise HTTPException(status_code=303, detail='创建服务ID失败')
return f"XP{time_str}{''.join(choices(string.ascii_uppercase, k=5))}" return f"XP{time_str}{''.join(choices(string.ascii_uppercase, k=5))}"

View File

@ -32,19 +32,19 @@ def rate_serve_get(req: schemas.RateServeGetReq, db: Session = Depends(get_db)):
item = crud.rate_serve_get(db, req) item = crud.rate_serve_get(db, req)
if not item: if not item:
raise HTTPException(detail="未查询到信息", status_code=404) raise HTTPException(detail="未查询到信息", status_code=404)
data = item.to_dict() data = item.to_full_dict()
for key in rate_flow_nodes: # for key in rate_flow_nodes:
node = getattr(item, key) # node = getattr(item, key)
if node: # if node:
# 每个节点有一个to_lite_dict方法 # # 每个节点有一个to_lite_dict方法
data[key] = node.to_lite_dict() # data[key] = node.to_lite_dict()
return schemas.RateServeGetRes(**data) return schemas.RateServeGetRes(**data)
@router.post("/query", summary="查询评级服务", response_model=schemas.RateServeQueryRes) @router.post("/query", summary="查询评级服务", response_model=schemas.RateServeQueryRes)
def rate_serve_query(req: schemas.RateServeQueryReq, db: Session = Depends(get_db)): def rate_serve_query(req: schemas.RateServeQueryReq, db: Session = Depends(get_db)):
count, query = crud.rate_serve_query(db, req) count, query = crud.rate_serve_query(db, req)
items = [schemas.RateServeInfo(**item.to_full_dict(include=req.include, items = [schemas.RateServeInfoLite(**item.to_full_dict(include=req.include,
ex_include=req.ex_include, ex_include=req.ex_include,
relation_use_id=req.relation_use_id)) for item in query] relation_use_id=req.relation_use_id)) for item in query]
return schemas.RateServeQueryRes(count=count, items=items) return schemas.RateServeQueryRes(count=count, items=items)

View File

@ -4,6 +4,13 @@ from utils.pydantic_utils import AllOptional
from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from utils.sqlalchemy_common_utils import QueryParams, QueryInclude
from datetime import date, datetime from datetime import date, datetime
from ...schemas import RateServeState, NodeState from ...schemas import RateServeState, NodeState
from ..rate_post_data_check_node.schemas import RatePostDataCheckNodeInfo
from ..rate_data_preparation_node.schemas import RateDataPreparationNodeInfo
from ..rate_work_node.schemas import RateWorkNodeInfo
from ..report_work_node.schemas import ReportWorkNodeInfo
from ..cert_work_node.schemas import CertWorkNodeInfo
from ..company_index.schemas import CompanyIndexInfo
from ..company_user.schemas import CompanyUserInfo
class RateServeId(BaseModel): class RateServeId(BaseModel):
@ -11,10 +18,10 @@ class RateServeId(BaseModel):
class RateServeAddWithoutNode(BaseModel): class RateServeAddWithoutNode(BaseModel):
# apply_user: Optional[dict] = None # apply_user: Optional[CompanyUserInfo] = None
apply_user_id: str apply_user_id: str
company_id: str company_id: str
company: Optional[Dict] = None company: Optional[CompanyIndexInfo] = None
project: Optional[str] = None project: Optional[str] = None
status: Optional[RateServeState] = RateServeState.examining status: Optional[RateServeState] = RateServeState.examining
create_time: Optional[datetime] = None create_time: Optional[datetime] = None
@ -29,11 +36,11 @@ class LiteNode(BaseModel):
class RateServeAdd(RateServeAddWithoutNode): class RateServeAdd(RateServeAddWithoutNode):
rate_post_data_check_node: Optional[dict] = None rate_post_data_check_node: Optional[RatePostDataCheckNodeInfo] = None
rate_data_preparation_node: Optional[dict] = None rate_data_preparation_node: Optional[RateDataPreparationNodeInfo] = None
rate_work_node: Optional[dict] = None rate_work_node: Optional[RateWorkNodeInfo] = None
report_work_node: Optional[dict] = None report_work_node: Optional[ReportWorkNodeInfo] = None
cert_work_node: Optional[dict] = None cert_work_node: Optional[CertWorkNodeInfo] = None
class RateServeAddLite(RateServeAddWithoutNode): class RateServeAddLite(RateServeAddWithoutNode):
@ -114,7 +121,7 @@ class RateServeQueryReq(RateServeQuery):
class RateServeQueryRes(BaseModel): class RateServeQueryRes(BaseModel):
count: int count: int
items: List[RateServeInfo] items: List[RateServeInfoLite]
pass pass

View File

@ -0,0 +1,26 @@
class RateServeFlow:
@staticmethod
def pass_node(node_name):
pass
class RateServeFlowNodeCheck:
@staticmethod
def rate_post_data_check_node(self):
pass
@staticmethod
def rate_data_preparation_node(self):
pass
@staticmethod
def rate_work_node(self):
pass
@staticmethod
def report_work_node(self):
pass
@staticmethod
def cert_work_node(self):
pass

View File

@ -5,6 +5,7 @@ from mods.rate.schemas import NodeState
from utils.pydantic_utils import AllOptional from utils.pydantic_utils import AllOptional
from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from utils.sqlalchemy_common_utils import QueryParams, QueryInclude
from datetime import date, datetime from datetime import date, datetime
from ..upload_file.schemas import UploadFileInfo
class ReportWorkNodeId(BaseModel): class ReportWorkNodeId(BaseModel):
@ -14,11 +15,11 @@ class ReportWorkNodeId(BaseModel):
class ReportWorkNodeAdd(BaseModel): class ReportWorkNodeAdd(BaseModel):
serve_id: str serve_id: str
origin_file_id: Optional[str] = None origin_file_id: Optional[str] = None
origin_file: Optional[dict] = None origin_file: Optional[UploadFileInfo] = None
origin_create_time: Optional[datetime] = None origin_create_time: Optional[datetime] = None
create_time: Optional[datetime] = None create_time: Optional[datetime] = None
final_file_id: Optional[str] = None final_file_id: Optional[str] = None
final_file: Optional[dict] = None final_file: Optional[UploadFileInfo] = None
final_create_time: Optional[datetime] = None final_create_time: Optional[datetime] = None
status: Optional[NodeState] = NodeState.incomplete status: Optional[NodeState] = NodeState.incomplete
remark: Optional[str] = None remark: Optional[str] = None

View File

@ -22,3 +22,6 @@ def sheet_parse(sheet_file, wb_config=rate_wb_config):
else: else:
pass pass
return wb_data return wb_data

View File

@ -11,6 +11,7 @@ from .mods.post.router import router as post_router
from .mods.department.router import router as department_router from .mods.department.router import router as department_router
from .mods.auth_rule.router import router as auth_rule_router from .mods.auth_rule.router import router as auth_rule_router
from . import schemas from . import schemas
from .mods.user.schemas import UserInfo
router = APIRouter(prefix="/user") router = APIRouter(prefix="/user")
router.include_router(user_router) router.include_router(user_router)
@ -19,7 +20,7 @@ router.include_router(department_router)
router.include_router(auth_rule_router) router.include_router(auth_rule_router)
@router.post("/get_login_verify_code", tags=["用户登录"], summary="获取登录验证码") @router.post("/get_login_verify_code", tags=["用户登录"], summary="获取登录验证码接口")
def get_login_verify_code(body: schemas.GetLoginVerifyCodeReq, db: Session = Depends(get_db)): def get_login_verify_code(body: schemas.GetLoginVerifyCodeReq, db: Session = Depends(get_db)):
try: try:
account = body.account account = body.account
@ -44,7 +45,7 @@ def get_login_verify_code(body: schemas.GetLoginVerifyCodeReq, db: Session = Dep
return {"msg": f"验证码已发送至{'邮箱' if account_type == 'email' else '手机'},请查看", "state": 1} return {"msg": f"验证码已发送至{'邮箱' if account_type == 'email' else '手机'},请查看", "state": 1}
@router.post('/login_by_verify_code', tags=["用户登录"], summary='验证码登录') @router.post('/login_by_verify_code', tags=["用户登录"], summary='验证码登录接口')
def login_by_verify_code(req: schemas.LoginByVerifyCode, def login_by_verify_code(req: schemas.LoginByVerifyCode,
db: Session = Depends(get_db)): db: Session = Depends(get_db)):
account = req.account account = req.account
@ -70,7 +71,7 @@ def login_by_verify_code(req: schemas.LoginByVerifyCode,
return {'token': token, 'user_info': user_data} return {'token': token, 'user_info': user_data}
@router.post('/refresh_token', tags=["用户登录"], summary='刷新token') @router.post('/refresh_token', tags=["用户登录"], summary='token刷新接口')
def refresh_token(token: AdminUserTokenDataModel = Depends(auth_util.token_data_depend), db: Session = Depends(get_db)): def refresh_token(token: AdminUserTokenDataModel = Depends(auth_util.token_data_depend), db: Session = Depends(get_db)):
user = db.query(User).filter(User.id == token.id).first() user = db.query(User).filter(User.id == token.id).first()
if not user: if not user:
@ -81,3 +82,14 @@ def refresh_token(token: AdminUserTokenDataModel = Depends(auth_util.token_data_
token_data = auth_util.tokenDataModel(**user_data).dict() token_data = auth_util.tokenDataModel(**user_data).dict()
token = auth_util.create_token(token_data) token = auth_util.create_token(token_data)
return {'token': token, 'user_info': user_data} return {'token': token, 'user_info': user_data}
@router.post('/get_user_info', tags=["用户登录"], summary='用户信息获取接口', response_model=UserInfo)
def func(token: AdminUserTokenDataModel = Depends(auth_util.token_data_depend), db: Session = Depends(get_db)):
user = db.query(User).filter(User.id == token.id).first()
if not user:
raise HTTPException(detail="账号未录入系统", status_code=303)
auth_data = user_crud.get_user_auth(user)
user_data = user.to_full_dict(relation_use_id=True)
user_data["auth_data"] = auth_data
return user_data