Gqingci 2 hafta önce
ebeveyn
işleme
eebe216a8b
22 değiştirilmiş dosya ile 1790 ekleme ve 46 silme
  1. 2 1
      ruoyi-admin/src/main/resources/application-dev.yml
  2. 3 1
      ruoyi-admin/src/main/resources/application.yml
  3. 5 1
      ruoyi-modules/ruoyi-main/pom.xml
  4. 10 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/MainPostApplyController.java
  5. 296 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalAuthController.java
  6. 80 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalCompanyController.java
  7. 48 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalOssController.java
  8. 1 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainPostApply.java
  9. 85 2
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainCompanyApplyBo.java
  10. 1 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainPostApplyBo.java
  11. 3 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainPostApplyVo.java
  12. 32 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/IMainCompanyApplyService.java
  13. 4 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/IMainPostApplyService.java
  14. 4 38
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainAuditServiceImpl.java
  15. 122 0
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainCompanyApplyServiceImpl.java
  16. 84 1
      ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainPostApplyServiceImpl.java
  17. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysIndustryMapper.java
  18. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysIndustrySkillMapper.java
  19. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTagMapper.java
  20. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java
  21. 5 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java
  22. 998 0
      sj.sql

+ 2 - 1
ruoyi-admin/src/main/resources/application-dev.yml

@@ -96,7 +96,8 @@ spring:
 spring.data:
   redis:
     # 地址
-    host: localhost
+    host: 192.168.194.130
+    password: 123456
     # 端口,默认为6379
     port: 6379
     # 数据库索引

+ 3 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -125,7 +125,9 @@ tenant:
   # 排除表
   excludes:
     - sys_menu
-
+    - sys_tag
+    - sys_industry
+    - sys_industry_skill
     - sys_tenant_package
     - sys_role_dept
     - sys_role_menu

+ 5 - 1
ruoyi-modules/ruoyi-main/pom.xml

@@ -3,7 +3,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    @d:/yp_pro/sj-backend/ruoyi-modules/ruoyi-main/pom.xml:6-10
+
     <parent>
         <groupId>org.dromara</groupId>
         <artifactId>ruoyi-modules</artifactId>
@@ -57,6 +57,10 @@
             <groupId>com.microsoft.sqlserver</groupId>
             <artifactId>mssql-jdbc</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-ratelimiter</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 10 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/MainPostApplyController.java

@@ -41,6 +41,16 @@ public class MainPostApplyController extends BaseController {
         return toAjax(mainPostApplyService.updateByBo(bo));
     }
 
+    @PostMapping("/publish/{id}")
+    public R<Void> publish(@NotNull(message = "主键不能为空") @PathVariable Long id) {
+        return toAjax(mainPostApplyService.publish(id));
+    }
+
+    @PostMapping("/unpublish/{id}")
+    public R<Void> unpublish(@NotNull(message = "主键不能为空") @PathVariable Long id) {
+        return toAjax(mainPostApplyService.unpublish(id));
+    }
+
     @DeleteMapping("/{ids}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
         return toAjax(mainPostApplyService.deleteWithValidByIds(Arrays.asList(ids), true));

+ 296 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalAuthController.java

@@ -0,0 +1,296 @@
+package org.dromara.main.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.stp.parameter.SaLoginParameter;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Opt;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RandomUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import jakarta.validation.constraints.NotBlank;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.constant.Constants;
+import org.dromara.common.core.constant.GlobalConstants;
+import org.dromara.common.core.constant.SystemConstants;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.dto.PostDTO;
+import org.dromara.common.core.domain.dto.RoleDTO;
+import org.dromara.common.core.domain.model.LoginUser;
+import org.dromara.common.core.domain.model.SmsLoginBody;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.core.utils.ValidatorUtils;
+import org.dromara.common.ratelimiter.annotation.RateLimiter;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.main.domain.bo.MainCompanyApplyBo;
+import org.dromara.main.domain.vo.MainCompanyApplyVo;
+import org.dromara.main.service.IMainCompanyApplyService;
+import org.dromara.sms4j.api.SmsBlend;
+import org.dromara.sms4j.api.entity.SmsResponse;
+import org.dromara.sms4j.core.factory.SmsFactory;
+import org.dromara.system.domain.SysUser;
+import org.dromara.system.domain.vo.SysClientVo;
+import org.dromara.system.domain.vo.SysDeptVo;
+import org.dromara.system.domain.vo.SysPostVo;
+import org.dromara.system.domain.vo.SysRoleVo;
+import org.dromara.system.domain.vo.SysTenantVo;
+import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.system.service.ISysClientService;
+import org.dromara.system.service.ISysDeptService;
+import org.dromara.system.service.ISysPermissionService;
+import org.dromara.system.service.ISysPostService;
+import org.dromara.system.service.ISysRoleService;
+import org.dromara.system.service.ISysTenantService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 门户认证Controller(公开接口,无需登录)
+ *
+ * @author sj
+ */
+@Slf4j
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/portal/auth")
+public class PortalAuthController extends BaseController {
+
+    private final IMainCompanyApplyService mainCompanyApplyService;
+    private final ISysClientService clientService;
+    private final ISysTenantService tenantService;
+    private final ISysPermissionService permissionService;
+    private final ISysRoleService roleService;
+    private final ISysPostService postService;
+    private final ISysDeptService deptService;
+    private final SysUserMapper userMapper;
+
+    @Value("${spring.profiles.active:}")
+    private String activeProfile;
+
+    /**
+     * 发送短信验证码
+     *
+     * @param phonenumber 手机号
+     */
+    @SaIgnore
+    @RateLimiter(key = "#phonenumber", time = 60, count = 1)
+    @GetMapping("/sms/code")
+    public R<Void> smsCode(@NotBlank(message = "手机号不能为空") String phonenumber) {
+        String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
+        String code = RandomUtil.randomNumbers(4);
+        // 验证码缓存5分钟
+        RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
+
+        if ("dev".equalsIgnoreCase(activeProfile)) {
+            log.info("开发环境短信验证码: phone={}, code={}", phonenumber, code);
+            return R.ok();
+        }
+
+        // 发送短信验证码
+        // 验证码模板id 需要在短信服务商配置
+        String templateId = "";
+        LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
+        map.put("code", code);
+
+        try {
+            SmsBlend smsBlend = SmsFactory.getSmsBlend("config1");
+            SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, templateId, map);
+            if (!smsResponse.isSuccess()) {
+                log.error("验证码短信发送异常 => {}", smsResponse);
+                return R.fail(smsResponse.getData().toString());
+            }
+        } catch (Exception e) {
+            log.error("验证码短信发送异常 => {}", e.getMessage());
+            throw new ServiceException("短信发送失败,请稍后重试");
+        }
+
+        return R.ok();
+    }
+
+    /**
+     * 门户短信登录
+     */
+    @SaIgnore
+    @PostMapping("/smsLogin")
+    public R<Map<String, Object>> smsLogin(@Validated @RequestBody SmsLoginBody loginBody) {
+        ValidatorUtils.validate(loginBody);
+
+        String clientId = loginBody.getClientId();
+        String grantType = loginBody.getGrantType();
+        if (!"sms".equalsIgnoreCase(grantType)) {
+            return R.fail("授权类型错误");
+        }
+
+        SysClientVo client = clientService.queryByClientId(clientId);
+        if (ObjectUtil.isNull(client) || !StringUtils.contains(client.getGrantType(), grantType)) {
+            log.info("门户登录客户端异常 clientId={}, grantType={}", clientId, grantType);
+            return R.fail("客户端配置不存在或未开启短信认证");
+        }
+        if (!SystemConstants.NORMAL.equals(client.getStatus())) {
+            return R.fail("客户端已被停用");
+        }
+
+        MainCompanyApplyVo companyApply = queryLatestCompanyApply(loginBody.getPhonenumber());
+        if (companyApply == null) {
+            return R.fail("该手机号未注册企业账号");
+        }
+
+        Integer applyStatus = companyApply.getApplyStatus();
+        Map<String, Object> result = new HashMap<>(4);
+
+        if (!Integer.valueOf(2).equals(applyStatus)) {
+            result.put("auditStatus", Integer.valueOf(3).equals(applyStatus) ? 2 : 0);
+            result.put("company", companyApply);
+            return R.ok(result);
+        }
+
+        try {
+            SysUserVo employee = queryUserByPhone(loginBody.getPhonenumber());
+            if (employee == null) {
+                return R.fail("登录账号不存在,请联系管理员");
+            }
+            if (!SystemConstants.NORMAL.equals(employee.getStatus())) {
+                return R.fail("登录账号已被停用");
+            }
+
+            validateSmsCode(loginBody.getPhonenumber(), loginBody.getSmsCode());
+            LoginUser loginUser = buildLoginUser(employee, client);
+            issueToken(loginUser, client);
+            RedisUtils.deleteObject(GlobalConstants.CAPTCHA_CODE_KEY + loginBody.getPhonenumber());
+
+            SysTenantVo company = null;
+            if (StringUtils.isNotBlank(companyApply.getTenantId())) {
+                company = tenantService.queryByTenantId(companyApply.getTenantId());
+            }
+
+            result.put("auditStatus", 1);
+            result.put("token", StpUtil.getTokenValue());
+            result.put("clientId", client.getClientId());
+            result.put("employee", employee);
+            result.put("company", ObjectUtil.defaultIfNull(company, companyApply));
+            return R.ok(result);
+        } catch (ServiceException e) {
+            throw e;
+        } catch (Exception e) {
+            log.error("门户短信登录失败: {}", e.getMessage(), e);
+            throw new ServiceException("登录失败,请稍后重试");
+        }
+    }
+
+    /**
+     * 获取当前登录信息
+     */
+    @GetMapping("/getInfo")
+    public R<Map<String, Object>> getInfo() {
+        Long userId = LoginHelper.getUserId();
+        if (userId == null) {
+            return R.fail("未登录或token已失效");
+        }
+
+        SysUserVo employee = userMapper.selectVoById(userId);
+        if (employee == null) {
+            return R.fail("用户信息不存在");
+        }
+
+        SysTenantVo company = null;
+        if (StringUtils.isNotBlank(employee.getTenantId())) {
+            company = tenantService.queryByTenantId(employee.getTenantId());
+        }
+
+        Map<String, Object> result = new HashMap<>(2);
+        result.put("employee", employee);
+        result.put("company", company);
+        return R.ok(result);
+    }
+
+    /**
+     * 退出登录
+     */
+    @SaIgnore
+    @PostMapping("/logout")
+    public R<Void> logout() {
+        try {
+            if (LoginHelper.isLogin()) {
+                StpUtil.logout();
+            }
+        } catch (Exception e) {
+            log.warn("门户退出登录异常: {}", e.getMessage());
+        }
+        return R.ok();
+    }
+
+    private MainCompanyApplyVo queryLatestCompanyApply(String phonenumber) {
+        MainCompanyApplyBo bo = new MainCompanyApplyBo();
+        bo.setMobile(phonenumber);
+        List<MainCompanyApplyVo> list = mainCompanyApplyService.queryList(bo);
+        return list.isEmpty() ? null : list.get(0);
+    }
+
+    private SysUserVo queryUserByPhone(String phonenumber) {
+        return userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>()
+            .eq(SysUser::getPhonenumber, phonenumber)
+            .last("limit 1"));
+    }
+
+    private void validateSmsCode(String phonenumber, String smsCode) {
+        String cacheKey = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
+        String cachedCode = RedisUtils.getCacheObject(cacheKey);
+        if (StringUtils.isBlank(cachedCode)) {
+            throw new ServiceException("验证码已过期,请重新获取");
+        }
+        if (!StringUtils.equals(cachedCode, smsCode)) {
+            throw new ServiceException("验证码错误");
+        }
+    }
+
+    private LoginUser buildLoginUser(SysUserVo user, SysClientVo client) {
+        LoginUser loginUser = new LoginUser();
+        Long userId = user.getUserId();
+        loginUser.setTenantId(user.getTenantId());
+        loginUser.setUserId(userId);
+        loginUser.setDeptId(user.getDeptId());
+        loginUser.setUsername(user.getUserName());
+        loginUser.setNickname(user.getNickName());
+        loginUser.setUserType(user.getUserType());
+        loginUser.setMenuPermission(permissionService.getMenuPermission(userId));
+        loginUser.setRolePermission(permissionService.getRolePermission(userId));
+        loginUser.setClientKey(client.getClientKey());
+        loginUser.setDeviceType(client.getDeviceType());
+        if (ObjectUtil.isNotNull(user.getDeptId())) {
+            Opt<SysDeptVo> deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById);
+            loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY));
+            loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY));
+        }
+        List<SysRoleVo> roles = roleService.selectRolesByUserId(userId);
+        List<SysPostVo> posts = postService.selectPostsByUserId(userId);
+        loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
+        loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class));
+        return loginUser;
+    }
+
+    private void issueToken(LoginUser loginUser, SysClientVo client) {
+        SaLoginParameter model = new SaLoginParameter();
+        model.setDeviceType(client.getDeviceType());
+        model.setTimeout(client.getTimeout());
+        model.setActiveTimeout(client.getActiveTimeout());
+        model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
+        LoginHelper.login(loginUser, model);
+    }
+}

+ 80 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalCompanyController.java

@@ -0,0 +1,80 @@
+package org.dromara.main.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import jakarta.validation.constraints.NotBlank;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.main.domain.bo.MainCompanyApplyBo;
+import org.dromara.main.service.IMainCompanyApplyService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 企业入驻门户Controller(公开接口,无需登录)
+ *
+ * @author sj
+ */
+@SaIgnore
+@Slf4j
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/portal/company")
+public class PortalCompanyController extends BaseController {
+
+    private final IMainCompanyApplyService mainCompanyApplyService;
+
+    /**
+     * 企业入驻申请
+     */
+    @PostMapping("/apply")
+    public R<Void> apply(@RequestBody @Validated(AddGroup.class) MainCompanyApplyBo bo) {
+        return toAjax(mainCompanyApplyService.applyCompany(bo));
+    }
+
+    /**
+     * 检查企业名称是否已存在(前端实时校验用)
+     *
+     * @param companyName 企业名称
+     * @return true=唯一可用,false=已存在
+     */
+    @GetMapping("/checkName")
+    public R<Boolean> checkCompanyName(@RequestParam @NotBlank(message = "企业名称不能为空") String companyName) {
+        MainCompanyApplyBo bo = new MainCompanyApplyBo();
+        bo.setCompanyName(companyName);
+        boolean unique = mainCompanyApplyService.checkCompanyNameUnique(bo);
+        return R.ok(unique);
+    }
+
+    /**
+     * 检查统一社会信用代码是否已存在(前端实时校验用)
+     *
+     * @param creditCode 统一社会信用代码
+     * @return true=唯一可用,false=已存在
+     */
+    @GetMapping("/checkCreditCode")
+    public R<Boolean> checkCreditCode(@RequestParam @NotBlank(message = "统一社会信用代码不能为空") String creditCode) {
+        MainCompanyApplyBo bo = new MainCompanyApplyBo();
+        bo.setCreditCode(creditCode);
+        boolean unique = mainCompanyApplyService.checkCreditCodeUnique(bo);
+        return R.ok(unique);
+    }
+
+    /**
+     * 检查联系人手机号是否已被使用(前端实时校验用)
+     *
+     * @param contactPhone 联系人手机号
+     * @return true=唯一可用,false=已存在
+     */
+    @GetMapping("/checkPhone")
+    public R<Boolean> checkPhone(@RequestParam @NotBlank(message = "手机号不能为空") String contactPhone) {
+        MainCompanyApplyBo bo = new MainCompanyApplyBo();
+        bo.setMobile(contactPhone);
+        boolean unique = mainCompanyApplyService.checkMobileUnique(bo);
+        return R.ok(unique);
+    }
+}
+

+ 48 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/PortalOssController.java

@@ -0,0 +1,48 @@
+package org.dromara.main.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.hutool.core.util.ObjectUtil;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.system.domain.vo.SysOssUploadVo;
+import org.dromara.system.domain.vo.SysOssVo;
+import org.dromara.system.service.ISysOssService;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 门户文件上传Controller(公开接口,无需登录)
+ *
+ * @author sj
+ */
+@SaIgnore
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/portal/oss")
+public class PortalOssController extends BaseController {
+
+    private final ISysOssService ossService;
+
+    /**
+     * 上传文件(公开接口,无需登录)
+     *
+     * @param file 文件
+     */
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) {
+        if (ObjectUtil.isNull(file)) {
+            return R.fail("上传文件不能为空");
+        }
+        SysOssVo oss = ossService.upload(file);
+        SysOssUploadVo uploadVo = new SysOssUploadVo();
+        uploadVo.setUrl(oss.getUrl());
+        uploadVo.setFileName(oss.getOriginalName());
+        uploadVo.setOssId(oss.getOssId().toString());
+        return R.ok(uploadVo);
+    }
+}

+ 1 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainPostApply.java

@@ -51,6 +51,7 @@ public class MainPostApply extends BaseEntity {
     private BigDecimal gradeB;
     private BigDecimal gradeC;
     private Integer applyStatus;
+    private String status;
     private Long auditId;
     private Long postId;
     private String rejectReason;

+ 85 - 2
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainCompanyApplyBo.java

@@ -1,26 +1,109 @@
 package org.dromara.main.domain.bo;
 
 import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.main.domain.MainCompanyApply;
 
+import java.io.Serial;
+
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = MainCompanyApply.class, reverseConvertGenerate = false)
 public class MainCompanyApplyBo extends BaseEntity {
 
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 申请ID
+     */
     private Long id;
+
+    /**
+     * 申请编号
+     */
     private String applyNo;
+
+    /**
+     * 企业名称
+     */
+    @NotBlank(message = "企业名称不能为空", groups = {AddGroup.class, EditGroup.class})
+    @Size(max = 100, message = "企业名称长度不能超过100个字符")
     private String companyName;
+
+    /**
+     * 官方邮箱
+     */
+    @NotBlank(message = "官方邮箱不能为空", groups = {AddGroup.class, EditGroup.class})
+    @Email(message = "邮箱格式不正确")
+    @Size(max = 100, message = "邮箱长度不能超过100个字符")
     private String officialAccount;
+
+    /**
+     * 办公地址
+     */
+    @NotBlank(message = "办公地址不能为空", groups = {AddGroup.class, EditGroup.class})
+    @Size(max = 200, message = "办公地址长度不能超过200个字符")
     private String officeAddress;
+
+    /**
+     * 统一社会信用代码
+     */
+    @NotBlank(message = "统一社会信用代码不能为空", groups = {AddGroup.class, EditGroup.class})
+    @Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", message = "统一社会信用代码格式不正确")
     private String creditCode;
-    private Long authLetter;
-    private Long avatar;
+
+    /**
+     * 委托招聘证明文件URL(前端传逗号分隔的字符串,如多个文件取第一个)
+     */
+    private String authLetter;
+    
+    /**
+     * 头像URL(OSS ID)
+     */
+    private String avatar;
+
+    /**
+     * 姓氏
+     */
+    @NotBlank(message = "姓氏不能为空", groups = {AddGroup.class, EditGroup.class})
+    @Size(max = 20, message = "姓氏长度不能超过20个字符")
     private String surname;
+
+    /**
+     * 名字
+     */
+    @Size(max = 50, message = "名字长度不能超过50个字符")
     private String name;
+
+    /**
+     * 手机号
+     */
+    @NotBlank(message = "手机号不能为空", groups = {AddGroup.class, EditGroup.class})
+    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
     private String mobile;
+
+    /**
+     * 申请状态(0-待审核 1-审核中 2-已通过 3-已驳回)
+     */
     private Integer applyStatus;
+    
+    /**
+     * 短信验证码(仅用于验证,不存入数据库)
+     */
+    @NotBlank(message = "验证码不能为空", groups = {AddGroup.class})
+    private String smsCode;
+
+    /**
+     * 搜索关键词
+     */
+    private String keyword;
 }

+ 1 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainPostApplyBo.java

@@ -47,4 +47,5 @@ public class MainPostApplyBo extends BaseEntity {
     private BigDecimal gradeB;
     private BigDecimal gradeC;
     private Integer applyStatus;
+    private String status;
 }

+ 3 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainPostApplyVo.java

@@ -113,6 +113,9 @@ public class MainPostApplyVo implements Serializable {
     @ExcelProperty(value = "申请状态")
     private Integer applyStatus;
 
+    @ExcelProperty(value = "发布状态")
+    private String status;
+
     @ExcelProperty(value = "审核ID")
     private Long auditId;
 

+ 32 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/IMainCompanyApplyService.java

@@ -21,4 +21,36 @@ public interface IMainCompanyApplyService {
     Boolean updateByBo(MainCompanyApplyBo bo);
 
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /**
+     * 校验企业名称唯一性
+     *
+     * @param bo 包含企业名称的Bo对象
+     * @return true=唯一可用,false=已存在
+     */
+    boolean checkCompanyNameUnique(MainCompanyApplyBo bo);
+
+    /**
+     * 校验统一社会信用代码唯一性
+     *
+     * @param bo 包含统一社会信用代码的Bo对象
+     * @return true=唯一可用,false=已存在
+     */
+    boolean checkCreditCodeUnique(MainCompanyApplyBo bo);
+
+    /**
+     * 校验手机号唯一性
+     *
+     * @param bo 包含手机号的Bo对象
+     * @return true=唯一可用,false=已存在
+     */
+    boolean checkMobileUnique(MainCompanyApplyBo bo);
+
+    /**
+     * 企业入驻申请(公开接口)
+     *
+     * @param bo 申请信息
+     * @return 是否成功
+     */
+    Boolean applyCompany(MainCompanyApplyBo bo);
 }

+ 4 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/IMainPostApplyService.java

@@ -20,5 +20,9 @@ public interface IMainPostApplyService {
 
     Boolean updateByBo(MainPostApplyBo bo);
 
+    Boolean publish(Long id);
+
+    Boolean unpublish(Long id);
+
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 }

+ 4 - 38
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainAuditServiceImpl.java

@@ -22,9 +22,7 @@ import org.dromara.main.mapper.MainAuditMapper;
 import org.dromara.main.mapper.MainCompanyApplyMapper;
 import org.dromara.main.mapper.MainPostApplyMapper;
 import org.dromara.main.service.IMainAuditService;
-import org.dromara.system.domain.bo.SysPostBo;
 import org.dromara.system.domain.bo.SysTenantBo;
-import org.dromara.system.service.ISysPostService;
 import org.dromara.system.service.ISysTenantService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -43,7 +41,6 @@ public class MainAuditServiceImpl implements IMainAuditService {
     private final MainCompanyApplyMapper companyApplyMapper;
     private final MainPostApplyMapper postApplyMapper;
     private final ISysTenantService tenantService;
-    private final ISysPostService sysPostService;
     @Override
     public TableDataInfo<MainAuditVo> queryPageList(MainAuditBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<MainAudit> lqw = buildQueryWrapper(bo);
@@ -129,8 +126,8 @@ public class MainAuditServiceImpl implements IMainAuditService {
                 // 企业审核通过 - 同步到 sys_tenant 表
                 syncCompanyToTenant(audit.getTargetId());
             } else if (audit.getAuditType() == 2) {
-                // 岗位审核通过 - 保存到 main_post_apply 表(标记为已通过)
-                syncPostApplyToSysPost(audit.getTargetId());
+                // 岗位审核通过 - 更新申请表状态
+                markPostApplyApproved(audit.getTargetId());
             }
         } catch (Exception e) {
             log.error("审核通过后数据同步失败", e);
@@ -186,43 +183,12 @@ public class MainAuditServiceImpl implements IMainAuditService {
         companyApplyMapper.updateById(companyApply);
     }
 
-    /**
-     * 将岗位申请标记为已通过
-     */
-    /**
-     * 将岗位申请数据同步到 sys_post 表
-     */
-    private void syncPostApplyToSysPost(Long applyId) {
-        // 1. 查询岗位申请信息
+    private void markPostApplyApproved(Long applyId) {
         MainPostApply postApply = postApplyMapper.selectById(applyId);
         if (postApply == null) {
             throw new ServiceException("岗位申请信息不存在");
         }
-
-        // 2. 检查是否已经同步过(避免重复)
-        if (postApply.getPostId() != null) {
-            return; // 已经有岗位ID,说明已同步过
-        }
-
-        // 3. 构建岗位对象
-        SysPostBo postBo = new SysPostBo();
-        postBo.setPostName(postApply.getPostName());
-        postBo.setPostCode(postApply.getApplyNo()); // 使用申请编号作为岗位编码
-        postBo.setPostCategory("1"); // 可根据需要设置岗位类别
-        postBo.setPostSort(0); // 默认排序
-        postBo.setStatus("0"); // 正常状态
-        postBo.setRemark(postApply.getPostDescription()); // 将岗位描述作为备注
-        postBo.setTenantId(postApply.getTenantId()); // 设置租户ID
-        postBo.setDeptId(100L);   //默认部门ID
-        // 4. 创建岗位
-        int result = sysPostService.insertPost(postBo);
-        if (result <= 0) {
-            throw new ServiceException("创建岗位失败");
-        }
-
-        // 5. 更新岗位申请表的 post_id 和 apply_status
-        postApply.setPostId(postBo.getPostId()); // 获取新创建的岗位ID
-        postApply.setApplyStatus(2); // 已通过
+        postApply.setApplyStatus(2);
         postApplyMapper.updateById(postApply);
     }
 

+ 122 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainCompanyApplyServiceImpl.java

@@ -1,19 +1,29 @@
 package org.dromara.main.service.impl;
 
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.constant.Constants;
+import org.dromara.common.core.constant.GlobalConstants;
+import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.main.domain.MainAudit;
 import org.dromara.main.domain.MainCompanyApply;
 import org.dromara.main.domain.bo.MainCompanyApplyBo;
 import org.dromara.main.domain.vo.MainCompanyApplyVo;
+import org.dromara.main.mapper.MainAuditMapper;
 import org.dromara.main.mapper.MainCompanyApplyMapper;
 import org.dromara.main.service.IMainCompanyApplyService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Collection;
 import java.util.List;
@@ -23,6 +33,7 @@ import java.util.List;
 public class MainCompanyApplyServiceImpl implements IMainCompanyApplyService {
 
     private final MainCompanyApplyMapper baseMapper;
+    private final MainAuditMapper mainAuditMapper;
 
     @Override
     public TableDataInfo<MainCompanyApplyVo> queryPageList(MainCompanyApplyBo bo, PageQuery pageQuery) {
@@ -78,4 +89,115 @@ public class MainCompanyApplyServiceImpl implements IMainCompanyApplyService {
 
     private void validEntityBeforeSave(MainCompanyApply entity) {
     }
+
+    @Override
+    public boolean checkCompanyNameUnique(MainCompanyApplyBo bo) {
+        LambdaQueryWrapper<MainCompanyApply> lqw = Wrappers.lambdaQuery();
+        lqw.eq(MainCompanyApply::getCompanyName, bo.getCompanyName());
+        lqw.ne(bo.getId() != null, MainCompanyApply::getId, bo.getId());
+        return baseMapper.selectCount(lqw) == 0;
+    }
+
+    @Override
+    public boolean checkCreditCodeUnique(MainCompanyApplyBo bo) {
+        LambdaQueryWrapper<MainCompanyApply> lqw = Wrappers.lambdaQuery();
+        lqw.eq(MainCompanyApply::getCreditCode, bo.getCreditCode());
+        lqw.ne(bo.getId() != null, MainCompanyApply::getId, bo.getId());
+        return baseMapper.selectCount(lqw) == 0;
+    }
+
+    @Override
+    public boolean checkMobileUnique(MainCompanyApplyBo bo) {
+        LambdaQueryWrapper<MainCompanyApply> lqw = Wrappers.lambdaQuery();
+        lqw.eq(MainCompanyApply::getMobile, bo.getMobile());
+        lqw.ne(bo.getId() != null, MainCompanyApply::getId, bo.getId());
+        return baseMapper.selectCount(lqw) == 0;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean applyCompany(MainCompanyApplyBo bo) {
+        // 1. 校验短信验证码
+        String smsKey = GlobalConstants.CAPTCHA_CODE_KEY + bo.getMobile();
+        String cachedCode = RedisUtils.getCacheObject(smsKey);
+        if (StringUtils.isBlank(cachedCode)) {
+            throw new ServiceException("验证码已过期,请重新获取");
+        }
+        if (!cachedCode.equals(bo.getSmsCode())) {
+            throw new ServiceException("验证码错误");
+        }
+        // 删除验证码
+        RedisUtils.deleteObject(smsKey);
+
+        // 2. 校验企业名称唯一性
+        if (!checkCompanyNameUnique(bo)) {
+            throw new ServiceException("企业名称已存在");
+        }
+
+        // 3. 校验统一社会信用代码唯一性
+        if (!checkCreditCodeUnique(bo)) {
+            throw new ServiceException("统一社会信用代码已存在");
+        }
+
+        // 4. 校验手机号唯一性
+        if (!checkMobileUnique(bo)) {
+            throw new ServiceException("联系人手机号已被使用");
+        }
+
+        // 5. 生成申请编号
+        String applyNo = generateApplyNo();
+
+        // 6. 创建申请记录
+        MainCompanyApply apply = new MainCompanyApply();
+        apply.setApplyNo(applyNo);
+        apply.setCompanyName(bo.getCompanyName());
+        apply.setOfficialAccount(bo.getOfficialAccount());
+        apply.setOfficeAddress(bo.getOfficeAddress());
+        apply.setCreditCode(bo.getCreditCode());
+        apply.setSurname(bo.getSurname());
+        apply.setName(bo.getName());
+        apply.setMobile(bo.getMobile());
+        apply.setApplyStatus(0); // 待审核
+        
+        // 处理 authLetter 字段(前端传的是逗号分隔的字符串,取第一个)
+        if (StringUtils.isNotBlank(bo.getAuthLetter())) {
+            String[] ossIds = bo.getAuthLetter().split(",");
+            if (ossIds.length > 0 && StringUtils.isNotBlank(ossIds[0])) {
+                apply.setAuthLetter(Long.valueOf(ossIds[0].trim()));
+            }
+        }
+        
+        // 处理 avatar 字段
+        if (StringUtils.isNotBlank(bo.getAvatar())) {
+            apply.setAvatar(Long.valueOf(bo.getAvatar().trim()));
+        }
+        
+        validEntityBeforeSave(apply);
+        boolean insertResult = baseMapper.insert(apply) > 0;
+        
+        if (insertResult) {
+            // 7. 创建审核记录
+            MainAudit audit = new MainAudit();
+            audit.setAuditType(1); // 公司审核
+            audit.setTargetId(apply.getId());
+            audit.setAuditResult(0); // 待审核
+            mainAuditMapper.insert(audit);
+            
+            // 更新申请表中的审核ID
+            apply.setAuditId(audit.getId());
+            baseMapper.updateById(apply);
+        }
+
+        return insertResult;
+    }
+
+    /**
+     * 生成申请编号
+     * 格式:AP + 年月日 + 6位随机数
+     */
+    private String generateApplyNo() {
+        String dateStr = cn.hutool.core.date.DateUtil.format(cn.hutool.core.date.DateUtil.date(), "yyyyMMdd");
+        String randomStr = RandomUtil.randomNumbers(6);
+        return "AP" + dateStr + randomStr;
+    }
 }

+ 84 - 1
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainPostApplyServiceImpl.java

@@ -9,12 +9,15 @@ import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.main.domain.MainAudit;
 import org.dromara.main.domain.MainPostApply;
 import org.dromara.main.domain.bo.MainPostApplyBo;
 import org.dromara.main.domain.vo.MainPostApplyVo;
+import org.dromara.main.mapper.MainAuditMapper;
 import org.dromara.main.mapper.MainPostApplyMapper;
 import org.dromara.main.service.IMainPostApplyService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Collection;
@@ -25,6 +28,7 @@ import java.util.List;
 public class MainPostApplyServiceImpl implements IMainPostApplyService {
 
     private final MainPostApplyMapper baseMapper;
+    private final MainAuditMapper mainAuditMapper;
 
     @Override
     public TableDataInfo<MainPostApplyVo> queryPageList(MainPostApplyBo bo, PageQuery pageQuery) {
@@ -45,21 +49,99 @@ public class MainPostApplyServiceImpl implements IMainPostApplyService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(MainPostApplyBo bo) {
         MainPostApply add = MapstructUtils.convert(bo, MainPostApply.class);
+        add.setApplyStatus(add.getApplyStatus() == null ? 0 : add.getApplyStatus());
+        add.setStatus(ObjectUtil.isNotNull(add.getStatus()) ? add.getStatus() : "0");
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
+            MainAudit audit = new MainAudit();
+            audit.setAuditType(2);
+            audit.setTargetId(add.getId());
+            audit.setAuditResult(0);
+            audit.setTenantId(add.getTenantId());
+            boolean auditFlag = mainAuditMapper.insert(audit) > 0;
+            if (!auditFlag) {
+                throw new ServiceException("创建岗位审核记录失败");
+            }
+
+            add.setAuditId(audit.getId());
+            boolean updateFlag = baseMapper.updateById(add) > 0;
+            if (!updateFlag) {
+                throw new ServiceException("回写岗位审核记录失败");
+            }
+
             bo.setId(add.getId());
         }
         return flag;
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean updateByBo(MainPostApplyBo bo) {
+        MainPostApply old = baseMapper.selectById(bo.getId());
+        if (old == null) {
+            throw new ServiceException("岗位申请信息不存在");
+        }
+
         MainPostApply update = MapstructUtils.convert(bo, MainPostApply.class);
+        update.setApplyStatus(0);
+        update.setStatus("0");
+        update.setRejectReason(null);
+        update.setAuditId(old.getAuditId());
+        update.setPostId(old.getPostId());
         validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
+        boolean flag = baseMapper.updateById(update) > 0;
+        if (!flag) {
+            return false;
+        }
+
+        if (old.getAuditId() != null) {
+            MainAudit audit = new MainAudit();
+            audit.setId(old.getAuditId());
+            audit.setAuditResult(0);
+            audit.setAuditRemark(null);
+            audit.setAuditTime(null);
+            audit.setAuditBy(null);
+            mainAuditMapper.updateById(audit);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean publish(Long id) {
+        MainPostApply postApply = baseMapper.selectById(id);
+        if (postApply == null) {
+            throw new ServiceException("岗位申请信息不存在");
+        }
+        if (!Integer.valueOf(2).equals(postApply.getApplyStatus())) {
+            throw new ServiceException("仅审核通过的岗位可发布");
+        }
+        if ("1".equals(postApply.getStatus())) {
+            return true;
+        }
+        postApply.setStatus("1");
+        return baseMapper.updateById(postApply) > 0;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean unpublish(Long id) {
+        MainPostApply postApply = baseMapper.selectById(id);
+        if (postApply == null) {
+            throw new ServiceException("岗位申请信息不存在");
+        }
+        if (!Integer.valueOf(2).equals(postApply.getApplyStatus())) {
+            throw new ServiceException("仅审核通过的岗位可取消发布");
+        }
+        if ("0".equals(postApply.getStatus())) {
+            return true;
+        }
+        postApply.setStatus("0");
+        return baseMapper.updateById(postApply) > 0;
     }
 
     @Override
@@ -108,4 +190,5 @@ public class MainPostApplyServiceImpl implements IMainPostApplyService {
             throw new ServiceException("能力C及格分必须在0-100之间");
         }
     }
+
 }

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysIndustryMapper.java

@@ -1,10 +1,12 @@
 package org.dromara.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.system.domain.SysIndustry;
 import org.dromara.system.domain.vo.SysIndustryVo;
 
 import java.util.List;
 
+@InterceptorIgnore(dataPermission = "true", tenantLine = "true")
 public interface SysIndustryMapper extends BaseMapperPlus<SysIndustry, SysIndustryVo> {
 }

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysIndustrySkillMapper.java

@@ -1,8 +1,10 @@
 package org.dromara.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.system.domain.SysIndustrySkill;
 import org.dromara.system.domain.vo.SysIndustrySkillVo;
 
+@InterceptorIgnore(dataPermission = "true", tenantLine = "true")
 public interface SysIndustrySkillMapper extends BaseMapperPlus<SysIndustrySkill, SysIndustrySkillVo> {
 }

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysTagMapper.java

@@ -1,9 +1,11 @@
 package org.dromara.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.system.domain.SysTag;
 import org.dromara.system.domain.vo.SysTagVo;
 
+@InterceptorIgnore(dataPermission = "true", tenantLine = "true")
 public interface SysTagMapper extends BaseMapperPlus<SysTag, SysTagVo> {
 
 }

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java

@@ -74,7 +74,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
         List<SysMenuVo> menuList;
         LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
         // 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单
-        if (!LoginHelper.isSuperAdmin(userId)) {
+        if (!LoginHelper.isSuperAdmin(userId) && !LoginHelper.isTenantAdmin()) {
             // 通过用户id获取角色id 通过角色id获取菜单id 然后in菜单
             wrapper.inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId));
         }

+ 5 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java

@@ -254,7 +254,11 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
     public int insertPost(SysPostBo bo) {
         SysPost post = MapstructUtils.convert(bo, SysPost.class);
         post.setPlatformId(PlatformUtils.getId());
-        return baseMapper.insert(post);
+        int rows = baseMapper.insert(post);
+        if (rows > 0) {
+            bo.setPostId(post.getPostId());
+        }
+        return rows;
     }
 
     /**

+ 998 - 0
sj.sql

@@ -0,0 +1,998 @@
+/*
+ Navicat Premium Dump SQL
+
+ Source Server         : sj
+ Source Server Type    : MySQL
+ Source Server Version : 80036 (8.0.36)
+ Source Host           : 116.62.136.107:4563
+ Source Schema         : sj
+
+ Target Server Type    : MySQL
+ Target Server Version : 80036 (8.0.36)
+ File Encoding         : 65001
+
+ Date: 30/03/2026 16:53:21
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for gen_table
+-- ----------------------------
+DROP TABLE IF EXISTS `gen_table`;
+CREATE TABLE `gen_table`  (
+  `table_id` bigint NOT NULL COMMENT '编号',
+  `data_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '数据源名称',
+  `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表名称',
+  `table_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '表描述',
+  `sub_table_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联子表的表名',
+  `sub_table_fk_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '子表关联的外键名',
+  `class_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '实体类名称',
+  `tpl_category` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'crud' COMMENT '使用的模板(crud单表操作 tree树表操作)',
+  `package_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成包路径',
+  `module_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成模块名',
+  `business_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成业务名',
+  `function_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成功能名',
+  `function_author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '生成功能作者',
+  `gen_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '生成代码方式(0zip压缩包 1自定义路径)',
+  `gen_path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '/' COMMENT '生成路径(不填默认项目路径)',
+  `options` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '其它生成选项',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`table_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for gen_table_column
+-- ----------------------------
+DROP TABLE IF EXISTS `gen_table_column`;
+CREATE TABLE `gen_table_column`  (
+  `column_id` bigint NOT NULL COMMENT '编号',
+  `table_id` bigint NULL DEFAULT NULL COMMENT '归属表编号',
+  `column_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列名称',
+  `column_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列描述',
+  `column_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '列类型',
+  `java_type` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'JAVA类型',
+  `java_field` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'JAVA字段名',
+  `is_pk` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否主键(1是)',
+  `is_increment` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否自增(1是)',
+  `is_required` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否必填(1是)',
+  `is_insert` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否为插入字段(1是)',
+  `is_edit` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否编辑字段(1是)',
+  `is_list` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否列表字段(1是)',
+  `is_query` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否查询字段(1是)',
+  `query_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'EQ' COMMENT '查询方式(等于、不等于、大于、小于、范围)',
+  `html_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
+  `dict_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型',
+  `sort` int NULL DEFAULT NULL COMMENT '排序',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`column_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '代码生成业务表字段' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_ability_config
+-- ----------------------------
+DROP TABLE IF EXISTS `main_ability_config`;
+CREATE TABLE `main_ability_config`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '能力配置ID',
+  `evaluation_id` bigint NOT NULL COMMENT '关联的测评ID',
+  `ability_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '能力名称',
+  `third_exam_info_id` bigint NULL DEFAULT NULL COMMENT '第三方考试ID',
+  `third_exam_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '第三方试卷名称',
+  `third_exam_time` int NULL DEFAULT NULL COMMENT '作答时长(分钟)',
+  `third_exam_pass_mark` decimal(10, 2) NULL DEFAULT NULL COMMENT '及格分',
+  `third_exam_total_score` decimal(10, 2) NULL DEFAULT NULL COMMENT '总分',
+  `sort_order` int NULL DEFAULT 0 COMMENT '排序',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_evaluation_id`(`evaluation_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '测评能力配置表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_audit
+-- ----------------------------
+DROP TABLE IF EXISTS `main_audit`;
+CREATE TABLE `main_audit`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '审核ID',
+  `audit_type` tinyint(1) NOT NULL COMMENT '审核类型(1-公司审核 2-岗位审核)',
+  `target_id` bigint NOT NULL COMMENT '审核目标ID(申请表ID)',
+  `audit_result` tinyint(1) NOT NULL DEFAULT 0 COMMENT '审核结果(0-待审核 1-已通过 2-未通过)',
+  `audit_remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '审核备注',
+  `deposit` decimal(10, 2) NULL DEFAULT NULL COMMENT '定金(仅岗位审核)',
+  `final_payment` decimal(10, 2) NULL DEFAULT NULL COMMENT '尾款(仅岗位审核)',
+  `audit_time` datetime NULL DEFAULT NULL COMMENT '审核时间',
+  `audit_by` bigint NULL DEFAULT NULL COMMENT '审核人',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '租户ID',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_audit_type`(`audit_type` ASC) USING BTREE,
+  INDEX `idx_target_id`(`target_id` ASC) USING BTREE,
+  INDEX `idx_audit_result`(`audit_result` ASC) USING BTREE,
+  INDEX `idx_audit_time`(`audit_time` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '审核信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_back_candidate
+-- ----------------------------
+DROP TABLE IF EXISTS `main_back_candidate`;
+CREATE TABLE `main_back_candidate`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '所属租户(企业ID)',
+  `student_id` bigint NOT NULL COMMENT '关联学员ID',
+  `source` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '来源渠道',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE,
+  INDEX `idx_student_id`(`student_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '企业候选人关系表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_back_category
+-- ----------------------------
+DROP TABLE IF EXISTS `main_back_category`;
+CREATE TABLE `main_back_category`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '分类名称',
+  `price` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '分类价格',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '1' COMMENT '状态(0停用 1正常)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '背调条款分类表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_back_clause
+-- ----------------------------
+DROP TABLE IF EXISTS `main_back_clause`;
+CREATE TABLE `main_back_clause`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `category_id` bigint NOT NULL COMMENT '所属分类ID',
+  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '条款名称',
+  `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '条款类型(字典:sys_clause_type)',
+  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '条款描述',
+  `price` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '条款单价',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '1' COMMENT '状态(0停用 1正常)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_category_id`(`category_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '背调条款表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_back_order
+-- ----------------------------
+DROP TABLE IF EXISTS `main_back_order`;
+CREATE TABLE `main_back_order`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `order_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '订单编号',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '下单租户(企业ID)',
+  `category_id` bigint NULL DEFAULT NULL COMMENT '背调套餐ID',
+  `category_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '套餐名称快照',
+  `total_amount` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '订单金额',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '订单状态(0待处理 1进行中 2已完成 3已退款)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `uk_order_no`(`order_no` ASC) USING BTREE,
+  INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '背调订单表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_back_record
+-- ----------------------------
+DROP TABLE IF EXISTS `main_back_record`;
+CREATE TABLE `main_back_record`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID',
+  `order_id` bigint NOT NULL COMMENT '关联订单ID',
+  `candidate_id` bigint NOT NULL COMMENT '关联企业候选人ID',
+  `status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '未完成' COMMENT '状态(完成、未完成、失败)',
+  `report_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '报告地址',
+  `finish_time` datetime NULL DEFAULT NULL COMMENT '完成时间',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_order_id`(`order_id` ASC) USING BTREE,
+  INDEX `idx_candidate_id`(`candidate_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '背调执行记录表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_company_apply
+-- ----------------------------
+DROP TABLE IF EXISTS `main_company_apply`;
+CREATE TABLE `main_company_apply`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '申请ID',
+  `apply_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '申请编号',
+  `company_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '企业名称',
+  `official_account` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '官方邮箱',
+  `office_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '办公地址',
+  `credit_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '统一社会信用代码',
+  `auth_letter` bigint NULL DEFAULT NULL COMMENT '委托招聘证明URL',
+  `avatar` bigint NULL DEFAULT NULL COMMENT '头像URL',
+  `surname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓氏',
+  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名字',
+  `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '手机号',
+  `apply_status` tinyint(1) NULL DEFAULT 0 COMMENT '申请状态(0-待审核 1-审核中 2-已通过 3-已驳回)',
+  `audit_id` bigint NULL DEFAULT NULL COMMENT '关联审核ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '租户ID',
+  `reject_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '驳回原因',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `uk_apply_no`(`apply_no` ASC) USING BTREE,
+  UNIQUE INDEX `uk_credit_code`(`credit_code` ASC) USING BTREE,
+  INDEX `idx_apply_status`(`apply_status` ASC) USING BTREE,
+  INDEX `idx_mobile`(`mobile` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '企业入驻申请表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_exam_evaluation
+-- ----------------------------
+DROP TABLE IF EXISTS `main_exam_evaluation`;
+CREATE TABLE `main_exam_evaluation`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '测评ID',
+  `evaluation_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '测评名称',
+  `grade` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '级别',
+  `position` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '岗位',
+  `position_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '岗位类型',
+  `tags` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '标签',
+  `main_image` bigint NULL DEFAULT NULL COMMENT '主图',
+  `image_album` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商品相册',
+  `detail` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '详情',
+  `price` decimal(10, 0) NULL DEFAULT NULL COMMENT '价格',
+  `on_time` date NULL DEFAULT NULL COMMENT '上架时间',
+  `down_time` date NULL DEFAULT NULL COMMENT '下架时间',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '状态',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE,
+  INDEX `idx_status`(`status` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2038515183890808834 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '测评管理表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_position
+-- ----------------------------
+DROP TABLE IF EXISTS `main_position`;
+CREATE TABLE `main_position`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户ID',
+  `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID',
+  `post_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位名称',
+  `post_description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '岗位描述',
+  `work_province` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工作省份',
+  `work_city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工作城市',
+  `work_district` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工作区县',
+  `work_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',
+  `post_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位类型(字典:main_position_type)',
+  `education_requirement` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学历要求',
+  `salary_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '薪资类型',
+  `salary_range` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '薪资范围',
+  `recruit_num` int NOT NULL COMMENT '招聘人数',
+  `registration_start_date` date NULL DEFAULT NULL COMMENT '报名开始时间',
+  `registration_end_date` date NULL DEFAULT NULL COMMENT '报名结束时间',
+  `is_urgent` tinyint(1) NULL DEFAULT 0 COMMENT '是否急招(0-否 1-是)',
+  `school_requirement` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学校要求(字典:main_education)',
+  `gender_requirement` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别要求(字典:sys_user_sex)',
+  `grade_requirement` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '年级要求(字典:main_experience)',
+  `arrival_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '到岗时间(字典:main_arrival_time)',
+  `internship_duration` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '实习时长(字典:main_internship_duration)',
+  `willing_to_travel` tinyint(1) NULL DEFAULT 0 COMMENT '是否愿意出差(0-否 1-是)',
+  `welfare_tags` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '福利标签',
+  `job_requirement` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '岗位要求',
+  `post_level` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位等级(字典:(main_position_level))',
+  `assessment_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '测评时长',
+  `grade_a` decimal(10, 2) NULL DEFAULT NULL COMMENT '能力A及格分',
+  `grade_b` decimal(10, 2) NULL DEFAULT NULL COMMENT '能力B及格分',
+  `grade_c` decimal(10, 2) NULL DEFAULT NULL COMMENT '能力C及格分',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位表(这是要发布出去的,与sys_post不同)' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_post_apply
+-- ----------------------------
+DROP TABLE IF EXISTS `main_post_apply`;
+CREATE TABLE `main_post_apply`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '申请ID',
+  `apply_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '申请编号',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户ID',
+  `post_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位名称',
+  `company_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '公司名称',
+  `post_description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '岗位描述',
+  `work_province` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工作省份',
+  `work_city` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工作城市',
+  `work_district` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工作区县',
+  `work_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址',
+  `post_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位类型(字典:main_position_type)',
+  `education_requirement` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学历要求',
+  `salary_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '薪资类型',
+  `salary_range` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '薪资范围',
+  `recruit_num` int NOT NULL COMMENT '招聘人数',
+  `registration_start_date` date NULL DEFAULT NULL COMMENT '报名开始时间',
+  `registration_end_date` date NULL DEFAULT NULL COMMENT '报名结束时间',
+  `is_urgent` tinyint(1) NULL DEFAULT 0 COMMENT '是否急招(0-否 1-是)',
+  `school_requirement` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学校要求(字典:main_education)',
+  `gender_requirement` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别要求(字典:sys_user_sex)',
+  `grade_requirement` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '年级要求(字典:main_experience)',
+  `arrival_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '到岗时间(字典:main_arrival_time)',
+  `internship_duration` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '实习时长(字典:main_internship_duration)',
+  `willing_to_travel` tinyint(1) NULL DEFAULT 0 COMMENT '是否愿意出差(0-否 1-是)',
+  `welfare_tags` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '福利标签',
+  `job_requirement` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '岗位要求',
+  `post_level` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位等级(字典:(main_position_level))',
+  `assessment_time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '测评时长',
+  `grade_a` decimal(10, 2) NULL DEFAULT NULL COMMENT '能力A及格分',
+  `grade_b` decimal(10, 2) NULL DEFAULT NULL COMMENT '能力B及格分',
+  `grade_c` decimal(10, 2) NULL DEFAULT NULL COMMENT '能力C及格分',
+  `apply_status` tinyint(1) NULL DEFAULT 0 COMMENT '申请状态(0-待审核 1-审核中 2-已通过 3-已驳回)',
+  `audit_id` bigint NULL DEFAULT NULL COMMENT '关联审核ID',
+  `post_id` bigint NULL DEFAULT NULL COMMENT '审核通过后的岗位ID',
+  `reject_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '驳回原因',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `uk_apply_no`(`apply_no` ASC) USING BTREE,
+  INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE,
+  INDEX `idx_apply_status`(`apply_status` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位发布申请表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for main_student
+-- ----------------------------
+DROP TABLE IF EXISTS `main_student`;
+CREATE TABLE `main_student`  (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '学员ID',
+  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '姓名',
+  `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '手机号',
+  `id_card_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '证件号码',
+  `unique_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '背调/测评唯一码',
+  `gender` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '性别(0男 1女 2未知)',
+  `avatar` bigint NULL DEFAULT NULL COMMENT '头像URL',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '000000' COMMENT '所属租户(默认平台)',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志(0存在 1删除)',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `uk_mobile`(`mobile` ASC) USING BTREE,
+  UNIQUE INDEX `uk_unique_code`(`unique_code` ASC) USING BTREE,
+  UNIQUE INDEX `uk_id_card`(`id_card_number` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '学员个人信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_client
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_client`;
+CREATE TABLE `sys_client`  (
+  `id` bigint NOT NULL COMMENT 'id',
+  `client_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端id',
+  `client_key` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端key',
+  `client_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端秘钥',
+  `grant_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授权类型',
+  `device_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备类型',
+  `active_timeout` int NULL DEFAULT 1800 COMMENT 'token活跃超时时间',
+  `timeout` int NULL DEFAULT 604800 COMMENT 'token固定超时',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统授权表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_config
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_config`;
+CREATE TABLE `sys_config`  (
+  `config_id` bigint NOT NULL COMMENT '参数主键',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数名称',
+  `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键名',
+  `config_value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键值',
+  `config_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`config_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_dept
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dept`;
+CREATE TABLE `sys_dept`  (
+  `dept_id` bigint NOT NULL COMMENT '部门id',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `parent_id` bigint NULL DEFAULT 0 COMMENT '父部门id',
+  `ancestors` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '祖级列表',
+  `dept_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称',
+  `dept_category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门类别编码',
+  `order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
+  `leader` bigint NULL DEFAULT NULL COMMENT '负责人',
+  `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话',
+  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '部门状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `platform_id` tinyint NOT NULL DEFAULT 0 COMMENT '平台ID 当前用户属于哪一个平台',
+  PRIMARY KEY (`dept_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_dict_data
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dict_data`;
+CREATE TABLE `sys_dict_data`  (
+  `dict_code` bigint NOT NULL COMMENT '字典编码',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `dict_sort` int NULL DEFAULT 0 COMMENT '字典排序',
+  `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签',
+  `dict_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典键值',
+  `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型',
+  `css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)',
+  `list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表格回显样式',
+  `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`dict_code`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_dict_type
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dict_type`;
+CREATE TABLE `sys_dict_type`  (
+  `dict_id` bigint NOT NULL COMMENT '字典主键',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典名称',
+  `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典类型',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`dict_id`) USING BTREE,
+  UNIQUE INDEX `tenant_id`(`tenant_id` ASC, `dict_type` ASC) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_industry
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_industry`;
+CREATE TABLE `sys_industry`  (
+  `industry_id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类ID',
+  `parent_id` bigint NULL DEFAULT 0 COMMENT '父ID (0一级, 非0二级)',
+  `industry_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称 (如: 互联网/开发)',
+  `order_num` int NULL DEFAULT 0 COMMENT '排序',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`industry_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1007 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '行业分类表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_industry_skill
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_industry_skill`;
+CREATE TABLE `sys_industry_skill`  (
+  `skill_id` bigint NOT NULL AUTO_INCREMENT COMMENT '职位ID',
+  `industry_id` bigint NOT NULL COMMENT '所属二级分类ID',
+  `skill_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '职位名称 (如: 前端/后端)',
+  `order_num` int NULL DEFAULT 0 COMMENT '排序',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`skill_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 146 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '行业职位表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_logininfor
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_logininfor`;
+CREATE TABLE `sys_logininfor`  (
+  `info_id` bigint NOT NULL COMMENT '访问ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户账号',
+  `client_key` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '客户端',
+  `device_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '设备类型',
+  `ipaddr` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录IP地址',
+  `login_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '登录地点',
+  `browser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '浏览器类型',
+  `os` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作系统',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '登录状态(0成功 1失败)',
+  `msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '提示消息',
+  `login_time` datetime NULL DEFAULT NULL COMMENT '访问时间',
+  PRIMARY KEY (`info_id`) USING BTREE,
+  INDEX `idx_sys_logininfor_s`(`status` ASC) USING BTREE,
+  INDEX `idx_sys_logininfor_lt`(`login_time` ASC) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu`;
+CREATE TABLE `sys_menu`  (
+  `menu_id` bigint NOT NULL COMMENT '菜单ID',
+  `menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单名称',
+  `parent_id` bigint NULL DEFAULT 0 COMMENT '父菜单ID',
+  `order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
+  `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '路由地址',
+  `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '组件路径',
+  `query_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '路由参数',
+  `is_frame` int NULL DEFAULT 1 COMMENT '是否为外链(0是 1否)',
+  `is_cache` int NULL DEFAULT 0 COMMENT '是否缓存(0缓存 1不缓存)',
+  `menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
+  `visible` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '显示状态(0显示 1隐藏)',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)',
+  `perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限标识',
+  `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '菜单图标',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
+  `platform_id` tinyint NOT NULL DEFAULT 0 COMMENT '平台ID 当前用户属于哪一个平台',
+  PRIMARY KEY (`menu_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_notice
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_notice`;
+CREATE TABLE `sys_notice`  (
+  `notice_id` bigint NOT NULL COMMENT '公告ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `notice_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '公告标题',
+  `notice_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '公告类型(1通知 2公告)',
+  `notice_content` longblob NULL COMMENT '公告内容',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`notice_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '通知公告表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_oper_log
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_oper_log`;
+CREATE TABLE `sys_oper_log`  (
+  `oper_id` bigint NOT NULL COMMENT '日志主键',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '模块标题',
+  `business_type` int NULL DEFAULT 0 COMMENT '业务类型(0其它 1新增 2修改 3删除)',
+  `method` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '方法名称',
+  `request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求方式',
+  `operator_type` int NULL DEFAULT 0 COMMENT '操作类别(0其它 1后台用户 2手机端用户)',
+  `oper_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作人员',
+  `dept_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '部门名称',
+  `oper_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求URL',
+  `oper_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '主机地址',
+  `oper_location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '操作地点',
+  `oper_param` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '请求参数',
+  `json_result` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '返回参数',
+  `status` int NULL DEFAULT 0 COMMENT '操作状态(0正常 1异常)',
+  `error_msg` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '错误消息',
+  `oper_time` datetime NULL DEFAULT NULL COMMENT '操作时间',
+  `cost_time` bigint NULL DEFAULT 0 COMMENT '消耗时间',
+  PRIMARY KEY (`oper_id`) USING BTREE,
+  INDEX `idx_sys_oper_log_bt`(`business_type` ASC) USING BTREE,
+  INDEX `idx_sys_oper_log_s`(`status` ASC) USING BTREE,
+  INDEX `idx_sys_oper_log_ot`(`oper_time` ASC) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志记录' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_oss
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_oss`;
+CREATE TABLE `sys_oss`  (
+  `oss_id` bigint NOT NULL COMMENT '对象存储主键',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件名',
+  `original_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '原名',
+  `file_suffix` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '文件后缀名',
+  `url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'URL地址',
+  `ext1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '扩展字段',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '上传人',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新人',
+  `service` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'minio' COMMENT '服务商',
+  PRIMARY KEY (`oss_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'OSS对象存储表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_oss_config
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_oss_config`;
+CREATE TABLE `sys_oss_config`  (
+  `oss_config_id` bigint NOT NULL COMMENT '主键',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `config_key` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配置key',
+  `access_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT 'accessKey',
+  `secret_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '秘钥',
+  `bucket_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '桶名称',
+  `prefix` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '前缀',
+  `endpoint` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '访问站点',
+  `domain` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '自定义域名',
+  `is_https` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'N' COMMENT '是否https(Y=是,N=否)',
+  `region` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '域',
+  `access_policy` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT '桶权限类型(0=private 1=public 2=custom)',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '是否默认(0=是,1=否)',
+  `ext1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '扩展字段',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`oss_config_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '对象存储配置表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_post
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_post`;
+CREATE TABLE `sys_post`  (
+  `post_id` bigint NOT NULL COMMENT '岗位ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `dept_id` bigint NOT NULL COMMENT '部门id',
+  `post_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位编码',
+  `post_category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位类别编码',
+  `post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '岗位名称',
+  `post_sort` int NOT NULL COMMENT '显示顺序',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态(0正常 1停用)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  `platform_id` tinyint NOT NULL DEFAULT 0 COMMENT '平台ID 当前用户属于哪一个平台',
+  PRIMARY KEY (`post_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '岗位信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role`;
+CREATE TABLE `sys_role`  (
+  `role_id` bigint NOT NULL COMMENT '角色ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称',
+  `role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色权限字符串',
+  `role_sort` int NOT NULL COMMENT '显示顺序',
+  `data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限 5:仅本人数据权限 6:部门及以下或本人数据权限)',
+  `menu_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '菜单树选择项是否关联显示',
+  `dept_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '部门树选择项是否关联显示',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  `platform_id` tinyint NOT NULL DEFAULT 0 COMMENT '平台ID 当前用户属于哪一个平台',
+  PRIMARY KEY (`role_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_role_dept
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_dept`;
+CREATE TABLE `sys_role_dept`  (
+  `role_id` bigint NOT NULL COMMENT '角色ID',
+  `dept_id` bigint NOT NULL COMMENT '部门ID',
+  PRIMARY KEY (`role_id`, `dept_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_role_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_menu`;
+CREATE TABLE `sys_role_menu`  (
+  `role_id` bigint NOT NULL COMMENT '角色ID',
+  `menu_id` bigint NOT NULL COMMENT '菜单ID',
+  PRIMARY KEY (`role_id`, `menu_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_social
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_social`;
+CREATE TABLE `sys_social`  (
+  `id` bigint NOT NULL COMMENT '主键',
+  `user_id` bigint NOT NULL COMMENT '用户ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户id',
+  `auth_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '平台+平台唯一id',
+  `source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户来源',
+  `open_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '平台编号唯一id',
+  `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登录账号',
+  `nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户昵称',
+  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
+  `avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址',
+  `access_token` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户的授权令牌',
+  `expire_in` int NULL DEFAULT NULL COMMENT '用户的授权令牌的有效期,部分平台可能没有',
+  `refresh_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '刷新令牌,部分平台可能没有',
+  `access_code` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '平台的授权信息,部分平台可能没有',
+  `union_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户的 unionid',
+  `scope` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授予的权限,部分平台可能没有',
+  `token_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '个别平台的授权信息,部分平台可能没有',
+  `id_token` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'id token,部分平台可能没有',
+  `mac_algorithm` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '小米平台用户的附带属性,部分平台可能没有',
+  `mac_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '小米平台用户的附带属性,部分平台可能没有',
+  `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户的授权code,部分平台可能没有',
+  `oauth_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Twitter平台用户的附带属性,部分平台可能没有',
+  `oauth_token_secret` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Twitter平台用户的附带属性,部分平台可能没有',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '社会化关系表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_tag`;
+CREATE TABLE `sys_tag`  (
+  `id` bigint NOT NULL COMMENT '主键ID',
+  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '标签名称',
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '标签说明',
+  `status` tinyint NULL DEFAULT 0 COMMENT '状态 (0:启用, 1:停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '标签定义表' ROW_FORMAT = DYNAMIC;
+
+-- ----------------------------
+-- Table structure for sys_tenant
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_tenant`;
+CREATE TABLE `sys_tenant`  (
+  `id` bigint NOT NULL COMMENT 'id',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户编号',
+  `contact_user_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系人',
+  `contact_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话',
+  `company_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业名称',
+  `email` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+  `logo` bigint NULL DEFAULT NULL COMMENT '企业logo',
+  `company_entrust_proof` bigint NULL DEFAULT NULL COMMENT '企业委托证明',
+  `license_number` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '统一社会信用代码',
+  `address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址',
+  `intro` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '企业简介',
+  `domain` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '域名',
+  `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  `package_id` bigint NULL DEFAULT NULL COMMENT '租户套餐编号',
+  `expire_time` datetime NULL DEFAULT NULL COMMENT '过期时间',
+  `account_count` int NULL DEFAULT -1 COMMENT '用户数量(-1不限制)',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '租户状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '租户表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_tenant_package
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_tenant_package`;
+CREATE TABLE `sys_tenant_package`  (
+  `package_id` bigint NOT NULL COMMENT '租户套餐id',
+  `package_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '套餐名称',
+  `menu_ids` varchar(3000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '关联菜单id',
+  `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  `menu_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '菜单树选择项是否关联显示',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`package_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '租户套餐表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_user
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user`;
+CREATE TABLE `sys_user`  (
+  `user_id` bigint NOT NULL COMMENT '用户ID',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID',
+  `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号',
+  `nick_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称',
+  `user_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'sys_user' COMMENT '用户类型(sys_user系统用户)',
+  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
+  `phonenumber` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码',
+  `sex` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
+  `avatar` bigint NULL DEFAULT NULL COMMENT '头像地址',
+  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码',
+  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '账号状态(0正常 1停用)',
+  `del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
+  `login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登录IP',
+  `login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+  `platform_id` tinyint NOT NULL DEFAULT 0 COMMENT '平台ID 当前用户属于哪一个平台',
+  PRIMARY KEY (`user_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_user_post
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_post`;
+CREATE TABLE `sys_user_post`  (
+  `user_id` bigint NOT NULL COMMENT '用户ID',
+  `post_id` bigint NOT NULL COMMENT '岗位ID',
+  PRIMARY KEY (`user_id`, `post_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for sys_user_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_role`;
+CREATE TABLE `sys_user_role`  (
+  `user_id` bigint NOT NULL COMMENT '用户ID',
+  `role_id` bigint NOT NULL COMMENT '角色ID',
+  PRIMARY KEY (`user_id`, `role_id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for test_demo
+-- ----------------------------
+DROP TABLE IF EXISTS `test_demo`;
+CREATE TABLE `test_demo`  (
+  `id` bigint NOT NULL COMMENT '主键',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `dept_id` bigint NULL DEFAULT NULL COMMENT '部门id',
+  `user_id` bigint NULL DEFAULT NULL COMMENT '用户id',
+  `order_num` int NULL DEFAULT 0 COMMENT '排序号',
+  `test_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'key键',
+  `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '值',
+  `version` int NULL DEFAULT 0 COMMENT '版本',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建人',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新人',
+  `del_flag` int NULL DEFAULT 0 COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试单表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for test_tree
+-- ----------------------------
+DROP TABLE IF EXISTS `test_tree`;
+CREATE TABLE `test_tree`  (
+  `id` bigint NOT NULL COMMENT '主键',
+  `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户编号',
+  `parent_id` bigint NULL DEFAULT 0 COMMENT '父id',
+  `dept_id` bigint NULL DEFAULT NULL COMMENT '部门id',
+  `user_id` bigint NULL DEFAULT NULL COMMENT '用户id',
+  `tree_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '值',
+  `version` int NULL DEFAULT 0 COMMENT '版本',
+  `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
+  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+  `create_by` bigint NULL DEFAULT NULL COMMENT '创建人',
+  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+  `update_by` bigint NULL DEFAULT NULL COMMENT '更新人',
+  `del_flag` int NULL DEFAULT 0 COMMENT '删除标志',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '测试树表' ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;