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

Boss直聘--企业管理中注册

一、分析业务需要完成哪些需求

通过以上界面分析可知我们需要创建以下模型:

from enum import IntEnum from tortoise import fields from tortoise.models import Model # ===================== 枚举定义 ===================== class AccountStatus(IntEnum): """账号状态""" NORMAL = 0 # 正常 PENDING_AUDIT = 1 # 待审核 BANNED = 2 # 封禁 class AuthType(IntEnum): """认证类型""" NO_AUTH = 0 # 0:无认证 ENTERPRISE_AUTH = 1 # 1:企业认证 LICENSE_AUTH = 2 # 2:营业执照认证 ENTERPRISE_LICENSE_AUTH = 3 # 3:企业认证+营业执照认证 class RiskLevel(IntEnum): """风险等级""" LOW = 1 # 低风险 MID = 2 # 中风险 HIGH = 3 # 高风险 class BlackListStatus(IntEnum): """黑名单状态""" NOT_BANNED = 0 # 未封禁 BANNED = 1 # 封禁 class AuditType(IntEnum): """审核类型""" NEW_ENTERPRISE_AUTH = 1 # 新企业认证 QUALITY_UPDATE = 2 # 资质更新 INFO_CHANGE = 3 # 信息变更 # ===================== 企业模型 ===================== class Enterprise(Model): """企业表""" id = fields.IntField(pk=True, description="主键ID") enterprise_name = fields.CharField(max_length=255, description="企业名称") enterprise_code = fields.CharField(max_length=100, unique=True, description="企业Code") # 外键:城市ID,关联城市表(自行创建City模型) city = fields.ForeignKeyField( null=True, to="models.City", related_name="enterprises", on_delete=fields.RESTRICT, description="城市ID" ) account_status = fields.IntEnumField( enum_type=AccountStatus, description="账号状态:0正常,1待审核,2封禁" ) create_time = fields.DatetimeField(auto_now_add=True, description="创建时间") auth_time = fields.DatetimeField(null=True, description="认证时间") auth_type = fields.IntEnumField(null=True,enum_type=AuthType, description="认证类型") risk_level = fields.IntEnumField(null=True,enum_type=RiskLevel, description="风险等级") blacklist_status = fields.IntEnumField(enum_type=BlackListStatus, description="黑名单状态") complaint_count = fields.IntField(default=0, description="投诉次数") company_website = fields.CharField(max_length=512, null=True, description="公司网站") email = fields.CharField(max_length=128, null=True, description="电子邮箱") audit_type = fields.IntEnumField(enum_type=AuditType, description="审核类型") submit_time = fields.DatetimeField(null=True, description="提交时间") class Meta: table = "t_enterprise" table_description = "企业表" def __str__(self): return f"<Enterprise {self.enterprise_name}>" from enum import IntEnum from tortoise import fields from tortoise.models import Model # -------------------------- 枚举定义 -------------------------- class RegisterStatus(IntEnum): """登记状态""" CONTINUE = 1 # 存续 IN_BUSINESS = 2 # 在业 OPEN = 3 # 开业 SUSPENDED = 4 # 停业 LIQUIDATION = 5 # 清算 REVOKED = 6 # 吊销 CANCELLED = 7 # 注销 class CompanyScale(IntEnum): """公司规模""" SCALE_0_20 = 1 # 0-20人 SCALE_20_99 = 2 # 20-99人 SCALE_100_499 = 3 # 100-499人 SCALE_500_999 = 4 # 500-999人 SCALE_1000_9999 = 5 # 1000-9999人 SCALE_10000_PLUS = 6 # 10000人以上 class FinancingStage(IntEnum): """融资阶段,允许为空""" ANGEL = 1 # 天使轮 A_ROUND = 2 # A轮 B_ROUND = 3 # B轮 C_ROUND = 4 # C轮 D_PLUS = 5 # D轮及以上 LISTED = 6 # 已上市 NO_NEED_FUND = 7 # 不需要融资 # -------------------------- 企业信息表模型 -------------------------- class EnterpriseInfo(Model): """企业信息表,关联主企业表""" id = fields.IntField(pk=True, description="主键ID") enterprise_name = fields.CharField(max_length=255, description="企业名称") unified_social_credit_code = fields.CharField(max_length=50, unique=True, description="统一社会信用代码") legal_representative = fields.CharField(max_length=100, description="法人代表") registered_capital = fields.CharField(max_length=100, description="注册资本") establish_date = fields.DateField(null=True, description="成立日期") register_status = fields.IntEnumField(enum_type=RegisterStatus, description="登记状态") # 所属行业 外键(行业字典表 Industry) industry = fields.ForeignKeyField( to="models.IndustryPosition", related_name="enterprise_info_list", on_delete=fields.RESTRICT, description="所属行业ID" ) company_scale = fields.IntEnumField(enum_type=CompanyScale, description="公司规模") financing_stage = fields.IntEnumField(enum_type=FinancingStage, null=True, description="融资阶段(可为空)") headquarters_address = fields.CharField(max_length=512, description="总部地址") business_scope = fields.TextField(description="经营范围") # # 关联【企业表】外键(对上一张图的 Enterprise 模型) # enterprise = fields.ForeignKeyField( # model_name="models.Enterprise", # related_name="enterprise_info", # on_delete=fields.CASCADE, # unique=True, # description="企业表ID,一对一关联" # ) enterprise_id = fields.IntField(null=True, description="企业ID") class Meta: table = "t_enterprise_info" table_description = "企业信息表" def __str__(self): return f"<EnterpriseInfo {self.enterprise_name}>" from tortoise import fields from tortoise.models import Model class EnterpriseQualification(Model): """资质材料表""" id = fields.IntField(pk=True, description="主键ID") contact_name = fields.CharField(max_length=100, description="联系人姓名") contact_phone = fields.CharField(max_length=32, description="联系电话") contact_email = fields.CharField(max_length=128, description="联系邮箱") business_license_url = fields.CharField(max_length=512, null=True, description="营业执照图片url") legal_id_front_url = fields.CharField(max_length=512, null=True, description="法人身份证(正面)图片url") legal_id_back_url = fields.CharField(max_length=512, null=True, description="法人身份证(反面)图片url") org_code_cert = fields.CharField(max_length=256, null=True, description="组织机构代码证") # 关联企业主表 Enterprise,一对一关系 # enterprise = fields.ForeignKeyField( # model_name="models.Enterprise", # related_name="qualification", # on_delete=fields.CASCADE, # unique=True, # description="企业表ID" # ) enterprise_id = fields.IntField(null=True, description="企业ID") class Meta: table = "t_enterprise_qualification" table_description = "资质材料表" def __str__(self): return f"<EnterpriseQualification contact:{self.contact_name}>"

二、完成业务分析与逻辑设计

可知我们需要完成图片上传,以及完成注册逻辑。通过分析可知我们需要进行三表创建。通过以下逻辑进行完成:

import uuid from fastapi import UploadFile from tortoise.timezone import now from tortoise.transactions import in_transaction from app.models import Enterprise from app.models.enterprise import AuditType, AccountStatus, BlackListStatus, EnterpriseInfo, EnterpriseQualification from app.schemas.enterprise import EnterpriseCreateRequest from app.utils.oss_util import AliyunOSSTool class EnterpriseService: @staticmethod async def save_enterprisr_info(form:EnterpriseCreateRequest, business_license_file :UploadFile , legal_id_front_file: UploadFile , legal_id_back_file: UploadFile): async with in_transaction() as conn: enterprise = await Enterprise.create( enterprise_name=form.enterprise_name, enterprise_code=str(uuid.uuid4()), account_status=AccountStatus.PENDING_AUDIT, blacklist_status=BlackListStatus.NOT_BANNED, audit_type=AuditType.NEW_ENTERPRISE_AUTH, submit_time = now(), using_db=conn ) await EnterpriseInfo.create( enterprise_name = form.enterprise_name, unified_social_credit_code = form.unified_social_credit_code, legal_representative = form.legal_representative, registered_capital = form.registered_capital, establish_date = form.establish_date, register_status = form.register_status, industry_id = form.industry_id, company_scale = form.company_scale, financing_stage = form.financing_stage, headquarters_address = form.headquarters_address, business_scope = form.business_scope, enterprise_id = enterprise.id, using_db=conn ) business_license_file_content = await business_license_file.read() business_license_file_filename = business_license_file.filename oss = AliyunOSSTool() is_success,success_res = oss.upload_single_file( business_license_file_content, business_license_file_filename, oss_path="enterprise/" ) if not is_success: raise Exception("上传营业执照图片失败") legal_id_front_file_content = await legal_id_front_file.read() legal_id_front_file_filename = legal_id_front_file.filename is_success2,success_res2 = oss.upload_single_file( legal_id_front_file_content, legal_id_front_file_filename, oss_path="enterprise/" ) if not is_success2: raise Exception("上传法人身份证正面图片失败") legal_id_back_file_content = await legal_id_back_file.read() legal_id_back_file_filename = legal_id_back_file.filename is_success3,success_res3 = oss.upload_single_file( legal_id_back_file_content, legal_id_back_file_filename, oss_path="enterprise/" ) if not is_success3: raise Exception("上传法人身份证反面图片失败") await EnterpriseQualification.create( contact_name = form.contact_name, contact_phone = form.contact_phone, contact_email = form.contact_email, business_license_url = success_res["access_url"], legal_id_front_url = success_res2["access_url"], legal_id_back_url = success_res3["access_url"], org_code_cert = form.org_code_cert, enterprise_id = enterprise.id, using_db=conn )

我们创建了一个依赖来进行插值,方便后续代码的调用:

async def get_enterprise_form( enterprise_name=Form(..., description="企业名称"), unified_social_credit_code=Form(..., description="统一社会信用代码"), legal_representative=Form(..., description="法人代表"), registered_capital=Form(..., description="注册资本"), establish_date=Form(None, description="成立日期"), register_status=Form(..., description="登记状态"), industry_id=Form(..., description="所属行业"), company_scale=Form(..., description="公司规模"), financing_stage=Form(None, description="融资阶段(可为空)"), headquarters_address=Form(..., description="总部地址"), business_scope=Form(..., description="经营范围"), # enterprise_id= Form(None, description="企业ID") contact_name=Form(..., description="联系人姓名"), contact_phone=Form(..., description="联系电话"), contact_email=Form(..., description="联系邮箱"), org_code_cert = Form(None, description="组织机构代码证") ): return EnterpriseCreateRequest( enterprise_name=enterprise_name, unified_social_credit_code=unified_social_credit_code, legal_representative=legal_representative, registered_capital=registered_capital, establish_date=establish_date, register_status=register_status, industry_id=industry_id, company_scale=company_scale, financing_stage=financing_stage, headquarters_address=headquarters_address, business_scope=business_scope, # enterprise_id=enterprise_id, contact_name=contact_name, contact_phone=contact_phone, contact_email=contact_email, org_code_cert=org_code_cert, )

书写接口代码:

from fastapi import Depends, UploadFile, File, APIRouter, Query from app.core.depends import get_enterprise_form from app.schemas.enterprise import EnterpriseCreateRequest from app.services.enterprise_service import EnterpriseService enterprise_router = APIRouter( prefix="/enterprise", tags=["企业管理"], ) @enterprise_router.post("/save", summary="保存企业信息") async def save_enterprisr_info(form:EnterpriseCreateRequest=Depends(get_enterprise_form), business_license_file :UploadFile = File(None,description="营业执照图片"), legal_id_front_file: UploadFile = File(None, description="法人身份证(正面)图片url"), legal_id_back_file: UploadFile = File(None, description="法人身份证(反面)图片")): res = await EnterpriseService.save_enterprisr_info(form,business_license_file,legal_id_front_file,legal_id_back_file) return {"code":1,"msg":"保存成功"}

三、总结

通过以上业务的书写,我们完成企业的注册,让企业处于待审核状态。

http://www.jsqmd.com/news/1285200/

相关文章:

  • 从零打造极简LED时钟:ESP32+DS3231+SK6812硬件设计与嵌入式开发全解析
  • C++ std::map::at函数深度解析:安全访问、异常处理与工程实践
  • 人工势场法在机器人路径规划中的原理与优化实践
  • 纯C++实现信号槽机制:从回调函数到事件驱动的优雅跨越
  • 基于C51单片机的红外避障与循迹智能小车:从硬件选型到控制算法实战
  • 系统集成项目管理实战:从十大知识领域到五大过程组的应用解析
  • AMD显卡本地部署AI大模型:Ollama+ROCm实战指南
  • 如何在Blender中实现3MF格式完整导入导出:面向新手的终极解决方案
  • Python爬虫实战:大学排名数据抓取与可视化分析系统
  • Unity Meta Quest MR开发:Scene API实现虚拟与现实碰撞交互
  • STM32F407串口DMA收发实战:标准库配置与环形缓冲区实现
  • C++跨平台文件拷贝实战:超越std::filesystem的健壮实现
  • Python脚本运行全解析:从交互式到命令行与IDE的三种核心方法
  • 终极指南:如何用HF Patch彻底改变你的《恋活!》游戏体验
  • 光码保险箱:基于红外通信与嵌入式系统的非接触式物理安全方案
  • 网站访问慢、偶尔打不开?教你用专业测速工具定位真实原因
  • HTTP与HTTPS核心原理:从明文传输到加密握手与性能优化
  • 机床检测全维度解析:从精度标准到智能检测技术的产业深度报告
  • BMC PSL remote_close()函数解析与批量管理实践
  • DIY桌面级3D激光扫描仪:从硬件搭建到点云生成全流程解析
  • 我review了一份Vibe Coding写的前端代码——能跑,但5个地方迟早要命
  • JMeter测试计划搭建:从核心组件到高效性能测试实践
  • Formlabs软件更新深度解析:草稿模式与智能支撑如何提升3D打印效率
  • C++二进制与位运算实战:从原理到性能优化与调试技巧
  • 想学渗透测试,这十个黑客论坛你得先认全
  • 龙嘴壶气势从哪来?先看壶身站得稳不稳
  • FPGA时序约束实战:set_max_delay与set_min_delay深度解析与应用
  • 2026最新Qoder替代产品推荐深度评测
  • 如何快速掌握AI文献助手:面向研究者的完整指南
  • 网络安全(黑客)自学