news 2026/7/29 3:31:11

项目中的企业审核

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
项目中的企业审核

一、今日完成开发功能

  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="验证码")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 3:30:45

Tec-2实验平台入门:微程序控制器原理与计算机组成实践

1. 项目概述:Tec-2实验平台与计算机组成原理的桥梁如果你正在学习计算机组成原理,并且课程要求完成一个名为“Tec-2”的课设,那么恭喜你,你即将接触到这门课程中最核心、也最富挑战性的实践环节。Tec-2,或者更完整的称…

作者头像 李华
网站建设 2026/7/29 3:30:28

STM32入门指南:从芯片选型到开发环境搭建与第一个工程实践

1. 从零开始:为什么是STM32? 如果你刚接触嵌入式开发,或者从51单片机、Arduino转向更复杂的项目,那么“STM32”这个名字大概率会频繁出现在你的视野里。它不是一个具体的芯片型号,而是一个庞大的家族,由意法…

作者头像 李华
网站建设 2026/7/29 3:30:26

machine 同轴度公差带

分类 X2T1、点的同心度(平面同心度)定义如图所示,在同一平面内,公差带为直径 φt、与基准点同心的圆形区域。理解1如图所示,被测外圆的圆心,必须落在直径 φ0.01、以基准圆心 A 为中心的圆内。注意现行国标…

作者头像 李华
网站建设 2026/7/29 3:29:58

网络打印机安全风险剖析:从PJL/PostScript渗透到内网防护实践

1. 项目概述:当打印机成为内网的“后门”在大多数人的认知里,打印机就是个安安静静放在角落,负责把电子文档变成纸质文件的工具。然而,在网络安全从业者眼中,一台接入内网的网络打印机,其潜在风险可能远超一…

作者头像 李华
网站建设 2026/7/29 3:29:40

天辛大师发问互联网精神,AI如何解决厄尔尼诺现象

当太平洋东部的海水异常升温,当亚马孙雨林遭遇百年不遇的干旱,当澳大利亚的山火燃烧了整整六个月,我们正站在地球气候系统崩溃的边缘。厄尔尼诺不再是遥远的气候术语,而是每个普通人都能感受到的生存危机。在这个关键时刻&#xf…

作者头像 李华
网站建设 2026/7/29 3:28:45

概率论与数理统计-参数估计

文章目录1. 教材pdf截图2. llm总结(人工校验过)1. 教材pdf截图 参数估计分为: 点估计和区间估计 2. llm总结(人工校验过) 估计值,估计量的概念, 有偏,无偏的概念 估计值(Estimate):你抽了一次样本,代入公式算出来的具体数字。比…

作者头像 李华