当前位置: 首页 > news >正文

项目中的企业审核

一、今日完成开发功能

  1. 企业列表分页查询接口
  2. 企业详情查询接口
  3. 企业信息审核接口
  4. 企业短信验证码登录接口

二、业务完整代码

1. EnterpriseService 业务服务代码

python

运行

import math import logging from app.models.enterprise import Enterprise, EnterpriseInfo, EnterpriseQualification, EnterpriseReview from app.core.constant import AccountStatus from app.core.utils import now from app.core.redis import redis_client from app.schemas.enterprise_schema import EnterpriseReviewCreateRequest, LoginMobileRequest logger = logging.getLogger(__name__) class EnterpriseService: @staticmethod async def select_enterprise_list(page, page_size, enterprise_name, submit_time_start, submit_time_end): query_enterprise = Enterprise.all() if enterprise_name: query_enterprise = query_enterprise.filter(enterprise_name__icontains=enterprise_name) if submit_time_start: query_enterprise = query_enterprise.filter(submit_time__gte=submit_time_start) if submit_time_end: query_enterprise = query_enterprise.filter(submit_time__lte=submit_time_end) total_count = await query_enterprise.count() total_page = math.ceil(total_count / page_size) offset = (page - 1) * page_size query_enterprise = query_enterprise.offset(offset).limit(page_size) enterprise_list = [] for enterprise in await query_enterprise: enterprise_id = enterprise.id enterpriseinfo = await EnterpriseInfo.get_or_none(enterprise_id=enterprise_id).prefetch_related("industry") enterprise_qualification = await EnterpriseQualification.get_or_none(enterprise_id=enterprise_id) res_dict = { "enterprise": enterprise, "enterpriseinfo": enterpriseinfo, "enterprise_qualification": enterprise_qualification, "industry": enterpriseinfo.industry.name } enterprise_list.append(res_dict) return { "code": 1, "message": "查询成功", "data": { "total_count": total_count, "total_page": total_page, "page": page, "page_size": page_size, "enterprise_list": enterprise_list } } @staticmethod async def select_enterprise_by_id(enterprise_id): enterprise = await Enterprise.get_or_none(id=enterprise_id) enterpriseinfo = await EnterpriseInfo.get_or_none(enterprise_id=enterprise_id).prefetch_related("industry") enterprise_qualification = await EnterpriseQualification.get_or_none(enterprise_id=enterprise_id) return { "code": 1, "message": "查询成功", "data": { "enterprise": enterprise, "enterpriseinfo": enterpriseinfo, "enterprise_qualification": enterprise_qualification, "industry": enterpriseinfo.industry.name } } @staticmethod async def review_enterprise(enterpriseReviewCreateRequest: EnterpriseReviewCreateRequest): enterprise_id = enterpriseReviewCreateRequest.enterprise_id enterprise_review = await EnterpriseReview.get_or_none(enterprise_id=enterprise_id) if enterprise_review is None: await EnterpriseReview.create( enterprise_id=enterprise_id, review_result=enterpriseReviewCreateRequest.review_result, review_reason=enterpriseReviewCreateRequest.review_reason, remark=enterpriseReviewCreateRequest.remark, review_time=now() ) else: enterprise_review.review_result = enterpriseReviewCreateRequest.review_result if enterpriseReviewCreateRequest.review_result else enterprise_review.review_result enterprise_review.review_reason = enterpriseReviewCreateRequest.review_reason if enterpriseReviewCreateRequest.review_reason else enterprise_review.review_reason enterprise_review.remark = enterpriseReviewCreateRequest.remark if enterpriseReviewCreateRequest.remark else enterprise_review.remark enterprise_review.review_time = now() await enterprise_review.save() if enterpriseReviewCreateRequest.review_result == 1: enterprise = await Enterprise.get_or_none(id=enterprise_id) enterprise.account_status = AccountStatus.NORMAL await enterprise.save() @staticmethod async def login(loginMobileRequest): enterprise_qualifications = await EnterpriseQualification.filter(contact_phone=loginMobileRequest.mobile) if enterprise_qualifications is None: raise Exception("手机号不存在") for enterprise_qualification in enterprise_qualifications: enterprise_id = enterprise_qualification.enterprise_id logger.info(f"enterprise_id: {enterprise_id}") enterprise_review = await EnterpriseReview.get_or_none(enterprise_id=enterprise_id) logger.info(f"enterprise_review: {enterprise_review}") if enterprise_review.review_result == 1: # 审核通过 key = f"boss-api:enterprise-login:sms:{loginMobileRequest.mobile}" redis_code = redis_client.get(key) if redis_code is None: raise Exception("验证码已过期") if redis_code != loginMobileRequest.code: raise Exception("验证码错误") access_token, refresh_token = create_token(str(enterprise_id), loginMobileRequest.mobile) logger.info(f"生成 access_token:{access_token}") logger.info(f"生成 refresh_token:{refresh_token}") redis_client.delete(key) return { "enterprise_access_token": access_token, "enterprise_refresh_token": refresh_token, } raise Exception("账号未审核通过")

2. 企业路由接口 enterprise_api.py

python

运行

from fastapi import APIRouter, Query from app.services.enterprise_service import EnterpriseService from app.schemas.enterprise_schema import EnterpriseReviewCreateRequest, LoginMobileRequest enterprise_router = APIRouter(prefix="/enterprise", tags=["企业管理"]) @enterprise_router.get("/list", summary="查询企业列表", description="查询企业列表") async def query_enterprise_list(page: int = Query(1, title="页码", description="页码", ge=1), page_size: int = Query(10, title="每页数量", description="每页数量", ge=10, le=50), enterprise_name: str = Query(None, title="企业名称", description="企业名称"), submit_time_start: str = Query(None, title="提交时间开始", description="提交时间开始"), submit_time_end: str = Query(None, title="提交时间结束", description="提交时间结束"), ): """ 查询企业列表 """ res = await EnterpriseService.select_enterprise_list(page, page_size, enterprise_name, submit_time_start, submit_time_end) return { "code": 1, "message": "查询成功", "data": res } @enterprise_router.get("/detail/{enterprise_id}", summary="查询企业详情", description="查询企业详情") async def query_enterprise_detail(enterprise_id: int): """ 查询企业详情 """ res = await EnterpriseService.select_enterprise_by_id(enterprise_id) return { "code": 1, "message": "查询成功", "data": res } @enterprise_router.post("/review", summary="企业审核", description="企业审核") async def review_enterprise(enterpriseReviewCreateRequest: EnterpriseReviewCreateRequest): """ 企业审核 """ res = await EnterpriseService.review_enterprise(enterpriseReviewCreateRequest) return { "code": 1, "message": "审核成功", "data": res } @enterprise_router.post("/login", summary="企业登录", description="企业登录") async def login(loginMobileRequest: LoginMobileRequest): res = await EnterpriseService.login(loginMobileRequest) return { "code": 1, "message": "登录成功", "data": res }

3. 数据库模型 EnterpriseReview

python

运行

from tortoise import Model, fields class EnterpriseReview(Model): """企业审核表""" id = fields.IntField(pk=True, description="主键ID") review_result = fields.IntField(null=True, description="审核结果(1:通过,2:驳回)") review_reason = fields.CharField(max_length=512, null=True, description="拒绝原因") # 备注说明 remark = fields.TextField(null=True, description="备注说明") # 审核时间 audit_time = fields.DatetimeField(null=True, description="审核时间") # 审核人 audit_user = fields.CharField(max_length=100, null=True, description="审核人") # 关联企业主表 Enterprise,一对一关系 enterprise_id = fields.IntField(null=True, description="企业ID") class Meta: table = "t_enterprise_review" table_description = "企业审核表"

4. 请求实体 Schema

python

运行

from pydantic import BaseModel, Field class EnterpriseReviewCreateRequest(BaseModel): review_result: int = Field(..., description="审核结果(1:通过,2:驳回)") review_reason: str | None = Field(None, description="拒绝原因") # 备注说明 remark: str | None = Field(None, description="备注说明") # 关联企业主表 Enterprise,一对一关系 enterprise_id: int = Field(..., description="企业ID") class LoginMobileRequest(BaseModel): mobile: str = Field(..., description="手机号") code: str = Field(..., description="验证码")
http://www.cnnetsun.cn/news/3720949.html

相关文章:

  • Tec-2实验平台入门:微程序控制器原理与计算机组成实践
  • STM32入门指南:从芯片选型到开发环境搭建与第一个工程实践
  • machine 同轴度公差带
  • 网络打印机安全风险剖析:从PJL/PostScript渗透到内网防护实践
  • 天辛大师发问互联网精神,AI如何解决厄尔尼诺现象
  • 概率论与数理统计-参数估计
  • AI写作助手核心技术解析与创意激发实践
  • 网盘下载加速实战:多线程与直链解析技术详解
  • 缠论可视化终极指南:3步让通达信变身智能缠论分析助手
  • SQLines数据库迁移工具:免费开源的终极跨平台转换解决方案
  • 《怪物猎人世界》太刀进阶指南:从气刃系统到实战登龙
  • 从生成到推理
  • VMD-BiLSTM电力负荷预测模型Matlab实现
  • SpringBoot+Vue3全栈实战:从零搭建视频点播网站
  • Verilog实现Sobel边缘检测:FPGA图像处理流水线设计实战
  • 合泰单片机IO口操作实战:从寄存器配置到LED与按键驱动
  • 步进电机从原理到实战:选型、驱动与控制全解析
  • Unity项目迁移与依赖管理:从版本兼容到成功运行的完整指南
  • LeetCode 第42题 接雨水
  • Android Fastboot命令全解析:从原理到实战,解锁设备底层控制权
  • 从按键消抖到状态机:嵌入式GPIO输入与事件驱动设计实战
  • 全球拼图式停车系统市场发展模式及前景战略分析报告2026年版
  • GraphRAG 和 LightRAG 详解:原理、对比与选型
  • Java集合框架:ArrayList创建方式全解析与性能优化实践
  • 黑客圈都在聊什么,带你盘点全球十大知名安全社区
  • 【AI媒体内容生产终极指南】:20年实战总结的7大避坑法则与3步提效公式
  • 从零搭建AI Agent:基于LangChain与RAG的工程实践指南
  • 技术提问九大准则:从无效沟通到高效协作的实践指南
  • 计算机毕业设计之基于SpringBoot的地铁站点查询系统
  • 20260728 交付文档定稿与音频子系统理解