diff --git a/mods/rate/models.py b/mods/rate/models.py index 6c7ec26..4788bf7 100644 --- a/mods/rate/models.py +++ b/mods/rate/models.py @@ -224,6 +224,8 @@ class CertWorkNode(Base, SalBase): status: Mapped[NodeState] = mapped_column(Enum(NodeState), default=NodeState.incomplete, 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, comment='创建时间') finish_time: Mapped[datetime] = mapped_column(DateTime, nullable=True, comment='完成时间') diff --git a/mods/rate/mods/cert_work_node/schemas.py b/mods/rate/mods/cert_work_node/schemas.py index a938b85..c8a1d87 100644 --- a/mods/rate/mods/cert_work_node/schemas.py +++ b/mods/rate/mods/cert_work_node/schemas.py @@ -4,6 +4,7 @@ from utils.pydantic_utils import AllOptional from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from datetime import date, datetime from ...schemas import NodeState +from ..upload_file.schemas import UploadFileInfo class CertWorkNodeId(BaseModel): @@ -13,10 +14,11 @@ class CertWorkNodeId(BaseModel): class CertWorkNodeAdd(BaseModel): serve_id: str file_id: Optional[str] = None - file: Optional[dict] = None + file: Optional[UploadFileInfo] = None status: Optional[NodeState] = NodeState.incomplete remark: Optional[str] = None create_time: Optional[datetime] = None + cert_create_time: Optional[datetime] = None finish_time: Optional[datetime] = None diff --git a/mods/rate/mods/company_user/schemas.py b/mods/rate/mods/company_user/schemas.py index ddf0991..fdcfcb7 100644 --- a/mods/rate/mods/company_user/schemas.py +++ b/mods/rate/mods/company_user/schemas.py @@ -3,6 +3,7 @@ from pydantic import BaseModel from utils.pydantic_utils import AllOptional from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from datetime import date, datetime +from ..company_index.schemas import CompanyIndexInfo class CompanyUserId(BaseModel): @@ -11,7 +12,7 @@ class CompanyUserId(BaseModel): class CompanyUserAdd(BaseModel): name: str - company: Optional[dict] = None + company: Optional[CompanyIndexInfo] = None email: Optional[str] = None phone: Optional[str] = None passwd: str diff --git a/mods/rate/mods/rate_post_data_check_node/schemas.py b/mods/rate/mods/rate_post_data_check_node/schemas.py index 7a483e8..1a4a9b5 100644 --- a/mods/rate/mods/rate_post_data_check_node/schemas.py +++ b/mods/rate/mods/rate_post_data_check_node/schemas.py @@ -5,6 +5,7 @@ from ...schemas import NodeState from utils.pydantic_utils import AllOptional from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from datetime import date, datetime +from ..upload_file.schemas import UploadFileInfo class RatePostDataCheckNodeId(BaseModel): @@ -13,14 +14,14 @@ class RatePostDataCheckNodeId(BaseModel): class RatePostDataCheckNodeAdd(BaseModel): serve_id: str - data: Optional[dict] = {} - file: Optional[dict] = None - file_id: Optional[str] = None - parsed_data: Optional[dict] = {} + data: Optional[dict] = {} + file: Optional[UploadFileInfo] = None + file_id: Optional[str] = None + parsed_data: Optional[dict] = {} status: Optional[NodeState] = NodeState.incomplete remark: Optional[str] = None - create_time: Optional[datetime] = None - finish_time: Optional[datetime] = None + create_time: Optional[datetime] = None + finish_time: Optional[datetime] = None class RatePostDataCheckNodeAddOptional(RatePostDataCheckNodeAdd, metaclass=AllOptional): diff --git a/mods/rate/mods/rate_serve/crud.py b/mods/rate/mods/rate_serve/crud.py index a793e71..bc5ae23 100644 --- a/mods/rate/mods/rate_serve/crud.py +++ b/mods/rate/mods/rate_serve/crud.py @@ -50,3 +50,6 @@ def make_rate_serve_id(db: Session): if db.query(RateServe).filter(RateServe.serve_id == new_id).first(): raise HTTPException(status_code=303, detail='创建服务ID失败') return f"XP{time_str}{''.join(choices(string.ascii_uppercase, k=5))}" + + + diff --git a/mods/rate/mods/rate_serve/router.py b/mods/rate/mods/rate_serve/router.py index 64cde32..b3d8964 100644 --- a/mods/rate/mods/rate_serve/router.py +++ b/mods/rate/mods/rate_serve/router.py @@ -32,21 +32,21 @@ def rate_serve_get(req: schemas.RateServeGetReq, db: Session = Depends(get_db)): item = crud.rate_serve_get(db, req) if not item: raise HTTPException(detail="未查询到信息", status_code=404) - data = item.to_dict() - for key in rate_flow_nodes: - node = getattr(item, key) - if node: - # 每个节点有一个to_lite_dict方法 - data[key] = node.to_lite_dict() + data = item.to_full_dict() + # for key in rate_flow_nodes: + # node = getattr(item, key) + # if node: + # # 每个节点有一个to_lite_dict方法 + # data[key] = node.to_lite_dict() return schemas.RateServeGetRes(**data) @router.post("/query", summary="查询评级服务", response_model=schemas.RateServeQueryRes) def rate_serve_query(req: schemas.RateServeQueryReq, db: Session = Depends(get_db)): count, query = crud.rate_serve_query(db, req) - items = [schemas.RateServeInfo(**item.to_full_dict(include=req.include, - ex_include=req.ex_include, - relation_use_id=req.relation_use_id)) for item in query] + items = [schemas.RateServeInfoLite(**item.to_full_dict(include=req.include, + ex_include=req.ex_include, + relation_use_id=req.relation_use_id)) for item in query] return schemas.RateServeQueryRes(count=count, items=items) ######### diff --git a/mods/rate/mods/rate_serve/schemas.py b/mods/rate/mods/rate_serve/schemas.py index bd617e8..9d5a3fc 100644 --- a/mods/rate/mods/rate_serve/schemas.py +++ b/mods/rate/mods/rate_serve/schemas.py @@ -4,6 +4,13 @@ from utils.pydantic_utils import AllOptional from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from datetime import date, datetime 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): @@ -11,10 +18,10 @@ class RateServeId(BaseModel): class RateServeAddWithoutNode(BaseModel): - # apply_user: Optional[dict] = None + # apply_user: Optional[CompanyUserInfo] = None apply_user_id: str company_id: str - company: Optional[Dict] = None + company: Optional[CompanyIndexInfo] = None project: Optional[str] = None status: Optional[RateServeState] = RateServeState.examining create_time: Optional[datetime] = None @@ -29,11 +36,11 @@ class LiteNode(BaseModel): class RateServeAdd(RateServeAddWithoutNode): - rate_post_data_check_node: Optional[dict] = None - rate_data_preparation_node: Optional[dict] = None - rate_work_node: Optional[dict] = None - report_work_node: Optional[dict] = None - cert_work_node: Optional[dict] = None + rate_post_data_check_node: Optional[RatePostDataCheckNodeInfo] = None + rate_data_preparation_node: Optional[RateDataPreparationNodeInfo] = None + rate_work_node: Optional[RateWorkNodeInfo] = None + report_work_node: Optional[ReportWorkNodeInfo] = None + cert_work_node: Optional[CertWorkNodeInfo] = None class RateServeAddLite(RateServeAddWithoutNode): @@ -114,7 +121,7 @@ class RateServeQueryReq(RateServeQuery): class RateServeQueryRes(BaseModel): count: int - items: List[RateServeInfo] + items: List[RateServeInfoLite] pass diff --git a/mods/rate/mods/rate_serve/utils.py b/mods/rate/mods/rate_serve/utils.py new file mode 100644 index 0000000..e9f1f67 --- /dev/null +++ b/mods/rate/mods/rate_serve/utils.py @@ -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 diff --git a/mods/rate/mods/report_work_node/schemas.py b/mods/rate/mods/report_work_node/schemas.py index 75e26e0..ef2ecaa 100644 --- a/mods/rate/mods/report_work_node/schemas.py +++ b/mods/rate/mods/report_work_node/schemas.py @@ -5,6 +5,7 @@ from mods.rate.schemas import NodeState from utils.pydantic_utils import AllOptional from utils.sqlalchemy_common_utils import QueryParams, QueryInclude from datetime import date, datetime +from ..upload_file.schemas import UploadFileInfo class ReportWorkNodeId(BaseModel): @@ -14,11 +15,11 @@ class ReportWorkNodeId(BaseModel): class ReportWorkNodeAdd(BaseModel): serve_id: str origin_file_id: Optional[str] = None - origin_file: Optional[dict] = None + origin_file: Optional[UploadFileInfo] = None origin_create_time: Optional[datetime] = None create_time: Optional[datetime] = None final_file_id: Optional[str] = None - final_file: Optional[dict] = None + final_file: Optional[UploadFileInfo] = None final_create_time: Optional[datetime] = None status: Optional[NodeState] = NodeState.incomplete remark: Optional[str] = None diff --git a/mods/rate/utils/rate_utils.py b/mods/rate/utils/rate_utils.py index f99d0d0..fbf1ce1 100644 --- a/mods/rate/utils/rate_utils.py +++ b/mods/rate/utils/rate_utils.py @@ -22,3 +22,6 @@ def sheet_parse(sheet_file, wb_config=rate_wb_config): else: pass return wb_data + + + diff --git a/mods/user/router.py b/mods/user/router.py index 0ea28ca..54fad86 100644 --- a/mods/user/router.py +++ b/mods/user/router.py @@ -11,6 +11,7 @@ from .mods.post.router import router as post_router from .mods.department.router import router as department_router from .mods.auth_rule.router import router as auth_rule_router from . import schemas +from .mods.user.schemas import UserInfo router = APIRouter(prefix="/user") router.include_router(user_router) @@ -19,7 +20,7 @@ router.include_router(department_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)): try: 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} -@router.post('/login_by_verify_code', tags=["用户登录"], summary='验证码登录') +@router.post('/login_by_verify_code', tags=["用户登录"], summary='验证码登录接口') def login_by_verify_code(req: schemas.LoginByVerifyCode, db: Session = Depends(get_db)): account = req.account @@ -70,7 +71,7 @@ def login_by_verify_code(req: schemas.LoginByVerifyCode, 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)): user = db.query(User).filter(User.id == token.id).first() 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 = auth_util.create_token(token_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