from datetime import datetime from typing import Optional from pydantic import BaseModel, ConfigDict, Field class EmployeeCreateOrUpdateSchema(BaseModel): """ 创建员工请求 必填字段: - enterprise_id: 企业ID - name: 员工姓名 - employee_no: 员工工号 - identity_type: 身份类型 - identity: 身份标识 """ enterprise_id: str = Field(description="企业ID") employee_id: Optional[str] = Field(default=None, description="员工ID") employee_name: Optional[str] = Field(default=None, max_length=128, description="员工姓名") employee_no: Optional[str] = Field(default=None, max_length=64, description="员工工号") identity_type: Optional[str] = Field(default=None, description="身份类型: ALIPAY_USER_ID/ALIPAY_LOGON_ID/ENTERPRISE_USER_ID") identity: Optional[str] = Field(default=None, description="身份标识") identity_open_id: Optional[str] = Field(default=None, description="员工openId") employee_mobile: Optional[str] = Field(default=None, max_length=32, description="员工手机号") employee_email: Optional[str] = Field(default=None, max_length=128, description="员工邮箱") employee_cert_type: Optional[str] = Field(default=None, description="证件类型: IDENTITY_CARD/PASSPORT/DRIVER_LICENSE") employee_cert_no: Optional[str] = Field(default=None, max_length=64, description="证件号码") iot_check_type: Optional[str] = Field(default=None, description="IoT核身方式") department_ids: Optional[list[str]] = Field(default=None, description="部门ID列表") accounting_entity_ids: Optional[list[str]] = Field(default=None, description="核算主体ID列表") label_names: Optional[list[str]] = Field(default=None, description="标签名称列表") sign_return_url: Optional[str] = Field(default=None, description="签约跳转URL") create_share_code: Optional[bool] = Field(default=False, description="是否创建分享码") sign_url_carry_info: Optional[bool] = Field(default=False, description="签约链接是否携带信息") profiles: Optional[dict] = Field(default=None, description="扩展参数") status: Optional[str] = Field(default=None, description="状态") department_list: Optional[list] = Field(default=None, description="部门列表") role_list: Optional[list] = Field(default=None, description="角色列表") class EmployeeOutSchema(BaseModel): """员工响应模型""" model_config = ConfigDict(from_attributes=True) # id: int = Field(description="主键ID") employee_id: Optional[str] = Field(default=None, description="员工ID(业务主键)") enterprise_id: Optional[str] = Field(default=None, description="企业ID") employee_name: Optional[str] = Field(default=None, description="员工姓名") employee_no: Optional[str] = Field(default=None, description="员工工号") identity_type: Optional[str] = Field(default=None, description="身份类型") identity: Optional[str] = Field(default=None, description="身份标识") identity_open_id: Optional[str] = Field(default=None, description="员工openId") employee_mobile: Optional[str] = Field(default=None, description="员工手机号") employee_email: Optional[str] = Field(default=None, description="员工邮箱") employee_cert_type: Optional[str] = Field(default=None, description="证件类型") employee_cert_no: Optional[str] = Field(default=None, description="证件号码") status: str = Field(description="状态") iot_check_type: Optional[str] = Field(default=None, description="IoT核身方式") department_ids: Optional[list] = Field(default=None, description="部门ID列表") accounting_entity_ids: Optional[list] = Field(default=None, description="核算主体ID列表") label_names: Optional[list] = Field(default=None, description="标签名称列表") sign_return_url: Optional[str] = Field(default=None, description="签约跳转URL") create_share_code: Optional[bool] = Field(default=None, description="是否创建分享码") sign_url_carry_info: Optional[bool] = Field(default=None, description="签约链接是否携带信息") sign_url: Optional[str] = Field(default=None, description="邀请链接") share_code: Optional[str] = Field(default=None, description="分享码") profiles: Optional[dict] = Field(default=None, description="扩展参数") withholding_sign_str: Optional[str] = Field(default=None, description="代扣签约串") free_sign_token: Optional[str] = Field(default=None, description="免登签约token") created_time: Optional[datetime] = Field(default=None, description="创建时间") updated_time: Optional[datetime] = Field(default=None, description="更新时间") class EmployeeListOutSchema(BaseModel): """员工列表响应""" model_config = ConfigDict(from_attributes=True) id: int = Field(description="主键ID") employee_id: Optional[str] = Field(default=None, description="员工ID") enterprise_id: Optional[str] = Field(default=None, description="企业ID") employee_name: Optional[str] = Field(default=None, description="员工姓名") employee_no: Optional[str] = Field(default=None, description="员工工号") status: str = Field(description="状态") employee_mobile: Optional[str] = Field(default=None, description="员工手机号") user_id: Optional[int] = Field(default=None, description="关联的系统用户ID") created_time: Optional[datetime] = Field(default=None, description="创建时间") class EmployeeOperationOutSchema(BaseModel): """员工操作响应""" model_config = ConfigDict(from_attributes=True) employee_id: Optional[str] = Field(default=None, description="员工ID(业务主键)") sign_url: Optional[str] = Field(default=None, description="签约链接") share_code: Optional[str] = Field(default=None, description="分享码") iot_unique_id: Optional[str] = Field(default=None, description="IoT唯一ID") class EmployeeInviteQuerySchema(BaseModel): """获取员工签约激活链接请求""" enterprise_id: str = Field(description="企业ID") employee_id: Optional[str] = Field(default=None, description="员工ID") page_content_code: Optional[str] = Field(default=None, description="页面内容code") withholding_sign_str: Optional[str] = Field(default=None, description="代扣签约串") create_share_code: Optional[str] = Field(default="N", description="是否生成签约吱口令: Y/N") class EmployeeInviteQueryOutSchema(BaseModel): """获取员工签约激活链接响应""" enterprise_id: str = Field(description="企业ID") sign_url: str = Field(description="邀请链接") mini_app_sign_url: str = Field(description="支付宝其它小程序跳入企业码小程序签约链接") share_code: Optional[str] = Field(default=None, description="签约吱口令")