Procházet zdrojové kódy

1、增加企业邀请模块
2、增加企业邀请模块记录

rayson před 1 rokem
rodič
revize
0ddf872c29
43 změnil soubory, kde provedl 1464 přidání a 98 odebrání
  1. 8 3
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/ErrorCodeConstants.java
  2. 5 5
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventMetricSaveReqVO.java
  3. 3 3
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordSaveReqVO.java
  4. 8 4
      menduner/menduner-reward-biz/src/main/resources/i18n/messages_en_US.properties
  5. 8 4
      menduner/menduner-reward-biz/src/main/resources/i18n/messages_zh_CN.properties
  6. 34 4
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  7. 94 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteController.java
  8. 93 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteRecordController.java
  9. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/AppJobCvRelController.java
  10. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelRespVO.java
  11. 9 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/AppPersonResumeController.java
  12. 4 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/person/cv/AppAdminJobCvRelPageReqVO.java
  13. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vo/EnterpriseSimpleRespVO.java
  14. 37 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInvitePageReqVO.java
  15. 43 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRecordPageReqVO.java
  16. 48 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRecordRespVO.java
  17. 40 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRecordSaveReqVO.java
  18. 44 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRespVO.java
  19. 37 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteSaveReqVO.java
  20. 51 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/invite/EnterpriseInviteDO.java
  21. 55 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/invite/EnterpriseInviteRecordDO.java
  22. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterpriseUserBindMapper.java
  23. 29 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/invite/EnterpriseInviteMapper.java
  24. 31 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/invite/EnterpriseInviteRecordMapper.java
  25. 51 21
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobAdvertisedMapper.java
  26. 4 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobCvRelMapper.java
  27. 21 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/redis/RedisKeyConstants.java
  28. 0 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/framework/datapermission/config/DataPermissionConfiguration.java
  29. 5 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/area/AreaServiceImpl.java
  30. 24 9
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/industry/IndustryServiceImpl.java
  31. 56 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteRecordService.java
  32. 72 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteRecordServiceImpl.java
  33. 56 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteService.java
  34. 72 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteServiceImpl.java
  35. 41 19
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java
  36. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobCvRelServiceImpl.java
  37. 7 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoService.java
  38. 12 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoServiceImpl.java
  39. 17 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionServiceImpl.java
  40. 148 0
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteRecordServiceImplTest.java
  41. 148 0
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteServiceImplTest.java
  42. 3 1
      menduner/menduner-system-biz/src/test/resources/sql/clean.sql
  43. 35 1
      menduner/menduner-system-biz/src/test/resources/sql/create_tables.sql

+ 8 - 3
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/ErrorCodeConstants.java

@@ -45,11 +45,16 @@ public interface ErrorCodeConstants {
     //========== 签到记录 1_110_004_000 ==========
     ErrorCode SIGN_IN_RECORD_TODAY_EXISTS = new ErrorCode(1_110_004_001, "今日已签到,请勿重复签到");
 
-    // ========== 占位  1_110_005_000 ============
+    // ==========  事件记录  1_110_005_000 ============
+    ErrorCode EVENT_RECORD_NOT_EXISTS = new ErrorCode(1_110_005_001, "事件记录不存在");
+    ErrorCode EVENT_URL_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_005_001, "事件地址不能为空");
+    ErrorCode DATE_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_005_002, "日期不能为空");
 
     // ========== 事件指标 1_110_006_000 ==========
     ErrorCode EVENT_METRIC_NOT_EXISTS = new ErrorCode(1_110_006_001, "事件指标不存在");
+    ErrorCode EVENT_METRIC_NAME_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_002, "指标名称不能为空");
+    ErrorCode EVENT_METRIC_VALUE_NAME_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_003, "指标值名称不能为空");
+    ErrorCode EVENT_METRIC_CATEGORY_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_004, "指标分类不能为空");
+    ErrorCode EVENT_METRIC_VALUE_TYPE_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_006_005, "指标值类型不能为空");
 
-    // ========== 事件记录 1_110_007_000 ==========
-    ErrorCode EVENT_RECORD_NOT_EXISTS = new ErrorCode(1_110_007_001, "事件记录不存在");
 }

+ 5 - 5
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventMetricSaveReqVO.java

@@ -14,26 +14,26 @@ public class EventMetricSaveReqVO {
     private Long id;
 
     @Schema(description = "指标名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
-    @NotEmpty(message = "指标名称不能为空")
+    @NotEmpty(message = "{1_110_006_002}")
     private String name;
 
     @Schema(description = "指标值名称", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotEmpty(message = "指标值名称不能为空")
+    @NotEmpty(message = "{1_110_006_003}")
     private String value;
 
     @Schema(description = "指标分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "指标分类不能为空")
+    @NotNull(message = "{1_110_006_004}")
     private Integer type;
 
     @Schema(description = "备注说明", example = "随便")
     private String remark;
 
     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotEmpty(message = "状态不能为空")
+    @NotEmpty(message = "{1_110_000_001}")
     private String status;
 
     @Schema(description = "指标值类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "指标值类型不能为空")
+    @NotNull(message = "{1_110_006_005}")
     private Integer valueType;
 
 }

+ 3 - 3
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordSaveReqVO.java

@@ -15,15 +15,15 @@ public class EventRecordSaveReqVO {
     private Long id;
 
     @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4194")
-    @NotEmpty(message = "用户id不能为空")
+    @NotEmpty(message = "{1_110_000_003}")
     private Long userId;
 
     @Schema(description = "事件地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
-    @NotEmpty(message = "事件地址不能为空")
+    @NotEmpty(message = "{1_110_005_001}")
     private String url;
 
     @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "日期不能为空")
+    @NotNull(message = "{1_110_005_002}")
     private LocalDateTime date;
 
     @Schema(description = "总次数", example = "20502")

+ 8 - 4
menduner/menduner-reward-biz/src/main/resources/i18n/messages_en_US.properties

@@ -39,9 +39,13 @@
 1_110_003_005=Reward points cannot be less than 0
 # ========== 签到记录 1_110_004_000 ==========
 1_110_004_001=Checked in today, please do not sign in again
-# ========== 占位  1_110_005_000 ============
-
+# ========== 事件记录  1_110_005_000 ============
+1_110_005_001=Event record does not exist
+1_110_005_002=Event address cannot be empty
+1_110_005_003=Date cannot be empty
 # ========== 事件指标 1_110_006_000 ==========
 1_110_006_001=Event indicator does not exist
-# ========== 事件记录 1_110_007_000 ==========
-1_110_007_001=Event record does not exist
+1_110_006_002=Indicator name cannot be empty
+1_110_006_003=Indicator value name cannot be empty
+1_110_006_004=Indicator classification cannot be empty
+1_110_006_005=Indicator value type cannot be empty

+ 8 - 4
menduner/menduner-reward-biz/src/main/resources/i18n/messages_zh_CN.properties

@@ -39,9 +39,13 @@
 1_110_003_005=奖励积分不能小于 0
 # ========== 签到记录 1_110_004_000 ==========
 1_110_004_001=今日已签到,请勿重复签到
-# ========== 占位  1_110_005_000 ============
-
+# ========== 事件记录  1_110_005_000 ============
+1_110_005_001=事件记录不存在
+1_110_005_002=事件地址不能为空
+1_110_005_003=日期不能为空
 # ========== 事件指标 1_110_006_000 ==========
 1_110_006_001=事件指标不存在
-# ========== 事件记录 1_110_007_000 ==========
-1_110_007_001=事件记录不存在
+1_110_006_002=指标名称不能为空
+1_110_006_003=指标值名称不能为空
+1_110_006_004=指标分类不能为空
+1_110_006_005=指标值类型不能为空

+ 34 - 4
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -28,7 +28,7 @@ public interface ErrorCodeConstants {
 
 
     // ========== 人员信息-个人档案 1_100_001_000 ==========
-    ErrorCode MDE_USER_INFO_NOT_EXISTS = new ErrorCode(1_100_001_001, "人员信息-个人档案不存在");
+    ErrorCode MDE_USER_INFO_NOT_EXISTS = new ErrorCode(1_100_001_001, "个人档案不存在");
     ErrorCode MDE_PERSON_ADVANTAGE_NOT_EXISTS = new ErrorCode(1_100_001_002, "个人优势不能为空");
     ErrorCode MDE_PERSON_NAME_NOT_EXISTS = new ErrorCode(1_100_001_003, "真实姓名不能为空");
     ErrorCode MDE_PERSON_PHONE_NOT_EXISTS = new ErrorCode(1_100_001_004, "联系手机号不能为空");
@@ -159,7 +159,6 @@ public interface ErrorCodeConstants {
     ErrorCode MDE_AUTH_TOKEN_NOT_NULL = new ErrorCode(1_100_017_018, "访问令牌不能为空");
 
 
-
     // ========== 角色模块 1_100_018_000 ==========
     ErrorCode MDE_ROLE_NOT_EXISTS = new ErrorCode(1_100_018_001, "角色不存在");
     ErrorCode MDE_ROLE_NAME_DUPLICATE = new ErrorCode(1_100_018_002, "已经存在名为【{}】的角色");
@@ -317,8 +316,10 @@ public interface ErrorCodeConstants {
     // ========== 众聘-佣金比例 1_100_037_000 ==========
     ErrorCode HIRE_COMMISSION_RATIO_NOT_EXISTS = new ErrorCode(1_100_037_001, "佣金比例不存在");
     ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_NULL = new ErrorCode(1_100_037_002, "佣金比例不能为空");
-    ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_LESS_THAN_ZERO = new ErrorCode(1_100_037_003, "佣金比例不能小于0");
-    ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_MORE_THAN_ONE = new ErrorCode(1_100_037_004, "佣金比例合计不能小于或大于100%");
+    ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_LESS_THAN_ZERO =
+            new ErrorCode(1_100_037_003, "佣金比例不能小于0");
+    ErrorCode HIRE_COMMISSION_RATIO_RATE_NOT_MORE_THAN_ONE =
+            new ErrorCode(1_100_037_004, "佣金比例合计不能小于或大于100%");
 
     // ========== 用户账户 1_100_038_000 ==========
     ErrorCode USER_ACCOUNT_NOT_EXISTS = new ErrorCode(1_100_038_001, "用户账户不存在");
@@ -330,4 +331,33 @@ public interface ErrorCodeConstants {
     ErrorCode USER_BALANCE_NOT_ENOUGH = new ErrorCode(1_100_039_004, "用户余额不足");
     ErrorCode USER_BALANCE_CAN_NOT_BE_EMPTY = new ErrorCode(1_100_039_005, "变动余额不能为空");
 
+    // ========== 企业邀请码 1_100_040_000 ==========
+    ErrorCode ENTERPRISE_INVITE_NOT_EXISTS = new ErrorCode(1_100_040_001, "企业邀请码不存在");
+    ErrorCode ENTERPRISE_INVITE_ENTERPRISE_ID_NOT_NULL = new ErrorCode(1_100_040_002, "企业id不能为空");
+    ErrorCode ENTERPRISE_INVITE_USER_ID_NOT_NULL = new ErrorCode(1_100_040_003, "用户编号不能为空");
+    ErrorCode ENTERPRISE_INVITE_TYPE_NOT_NULL = new ErrorCode(1_100_040_004, "类型不能为空");
+    ErrorCode ENTERPRISE_INVITE_CODE_NOT_NULL = new ErrorCode(1_100_040_005, "邀请码不能为空");
+    ErrorCode ENTERPRISE_INVITE_INVALID_DAYS_NOT_NULL = new ErrorCode(1_100_040_006, "失效天数不能为空");
+
+    // ========== 企业邀请记录 1_100_041_000 ==========
+    ErrorCode ENTERPRISE_INVITE_RECORD_NOT_EXISTS = new ErrorCode(1_100_041_001, "企业邀请记录不存在");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_INVITE_ENTERPRISE_ID_NOT_NULL =
+            new ErrorCode(1_100_041_002, "受邀企业id不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_USER_ID_NOT_NULL =
+            new ErrorCode(1_100_041_003, "受邀用户编号不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_INVITE_ENTERPRISE_ID_NOT_NULL2 =
+            new ErrorCode(1_100_041_004, "邀请企业id不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_USER_ID_NOT_NULL2 =
+            new ErrorCode(1_100_041_005, "邀请用户编号不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_TYPE_NOT_NULL =
+            new ErrorCode(1_100_041_006, "类型(0 邀请同事 | 1 邀请子公司)不能为空");
+
+    ErrorCode ENTERPRISE_INVITE_RECORD_CODE_NOT_NULL =
+            new ErrorCode(1_100_041_007, "邀请码不能为空");
+
 }

+ 94 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteController.java

@@ -0,0 +1,94 @@
+package com.citu.module.menduner.system.controller.admin.invite;
+
+
+import com.citu.framework.apilog.core.annotation.ApiAccessLog;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInvitePageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRespVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteDO;
+import com.citu.module.menduner.system.service.invite.EnterpriseInviteService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 门墩儿-企业邀请码")
+@RestController
+@RequestMapping("/menduner/system/enterprise-invite")
+@Validated
+public class EnterpriseInviteController {
+
+    @Resource
+    private EnterpriseInviteService enterpriseInviteService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建门墩儿-企业邀请码")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:create')")
+    public CommonResult<Long> createEnterpriseInvite(@Valid @RequestBody EnterpriseInviteSaveReqVO createReqVO) {
+        return success(enterpriseInviteService.createEnterpriseInvite(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新门墩儿-企业邀请码")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:update')")
+    public CommonResult<Boolean> updateEnterpriseInvite(@Valid @RequestBody EnterpriseInviteSaveReqVO updateReqVO) {
+        enterpriseInviteService.updateEnterpriseInvite(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除门墩儿-企业邀请码")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:delete')")
+    public CommonResult<Boolean> deleteEnterpriseInvite(@RequestParam("id") Long id) {
+        enterpriseInviteService.deleteEnterpriseInvite(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得门墩儿-企业邀请码")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:query')")
+    public CommonResult<EnterpriseInviteRespVO> getEnterpriseInvite(@RequestParam("id") Long id) {
+        EnterpriseInviteDO enterpriseInvite = enterpriseInviteService.getEnterpriseInvite(id);
+        return success(BeanUtils.toBean(enterpriseInvite, EnterpriseInviteRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得门墩儿-企业邀请码分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:query')")
+    public CommonResult<PageResult<EnterpriseInviteRespVO>> getEnterpriseInvitePage(@Valid EnterpriseInvitePageReqVO pageReqVO) {
+        PageResult<EnterpriseInviteDO> pageResult = enterpriseInviteService.getEnterpriseInvitePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, EnterpriseInviteRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出门墩儿-企业邀请码 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportEnterpriseInviteExcel(@Valid EnterpriseInvitePageReqVO pageReqVO,
+                                            HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<EnterpriseInviteDO> list = enterpriseInviteService.getEnterpriseInvitePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "门墩儿-企业邀请码.xls", "数据", EnterpriseInviteRespVO.class,
+                BeanUtils.toBean(list, EnterpriseInviteRespVO.class));
+    }
+
+}

+ 93 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/invite/EnterpriseInviteRecordController.java

@@ -0,0 +1,93 @@
+package com.citu.module.menduner.system.controller.admin.invite;
+
+import com.citu.framework.apilog.core.annotation.ApiAccessLog;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.framework.excel.core.util.ExcelUtils;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordRespVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteRecordDO;
+import com.citu.module.menduner.system.service.invite.EnterpriseInviteRecordService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 企业邀请记录")
+@RestController
+@RequestMapping("/menduner/system/enterprise-invite-record")
+@Validated
+public class EnterpriseInviteRecordController {
+
+    @Resource
+    private EnterpriseInviteRecordService enterpriseInviteRecordService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建企业邀请记录")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:create')")
+    public CommonResult<Long> createEnterpriseInviteRecord(@Valid @RequestBody EnterpriseInviteRecordSaveReqVO createReqVO) {
+        return success(enterpriseInviteRecordService.createEnterpriseInviteRecord(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新企业邀请记录")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:update')")
+    public CommonResult<Boolean> updateEnterpriseInviteRecord(@Valid @RequestBody EnterpriseInviteRecordSaveReqVO updateReqVO) {
+        enterpriseInviteRecordService.updateEnterpriseInviteRecord(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除企业邀请记录")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:delete')")
+    public CommonResult<Boolean> deleteEnterpriseInviteRecord(@RequestParam("id") Long id) {
+        enterpriseInviteRecordService.deleteEnterpriseInviteRecord(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得企业邀请记录")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:query')")
+    public CommonResult<EnterpriseInviteRecordRespVO> getEnterpriseInviteRecord(@RequestParam("id") Long id) {
+        EnterpriseInviteRecordDO enterpriseInviteRecord = enterpriseInviteRecordService.getEnterpriseInviteRecord(id);
+        return success(BeanUtils.toBean(enterpriseInviteRecord, EnterpriseInviteRecordRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得企业邀请记录分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:query')")
+    public CommonResult<PageResult<EnterpriseInviteRecordRespVO>> getEnterpriseInviteRecordPage(@Valid EnterpriseInviteRecordPageReqVO pageReqVO) {
+        PageResult<EnterpriseInviteRecordDO> pageResult = enterpriseInviteRecordService.getEnterpriseInviteRecordPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, EnterpriseInviteRecordRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出企业邀请记录 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:enterprise-invite-record:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportEnterpriseInviteRecordExcel(@Valid EnterpriseInviteRecordPageReqVO pageReqVO,
+                                                  HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<EnterpriseInviteRecordDO> list = enterpriseInviteRecordService.getEnterpriseInviteRecordPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "企业邀请记录.xls", "数据", EnterpriseInviteRecordRespVO.class,
+                BeanUtils.toBean(list, EnterpriseInviteRecordRespVO.class));
+    }
+
+}

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/AppJobCvRelController.java

@@ -44,7 +44,7 @@ public class AppJobCvRelController {
         return success(true);
     }
     @PostMapping("/hire/recommend/send")
-    @Operation(summary = "众聘推荐投递简历")
+    @Operation(summary = "众聘分享-投递简历")
     public CommonResult<Boolean> send(@Valid @RequestBody AppHireJobCvRelReqVO reqVO) {
         jobCvRelService.send(reqVO);
         return success(true);
@@ -52,7 +52,7 @@ public class AppJobCvRelController {
 
     @PreAuthenticated
     @GetMapping("/page")
-    @Operation(summary = "获取推荐邀请投递的职位信息")
+    @Operation(summary = "众聘分享-获取邀请投递的职位信息")
     public CommonResult<PageResult<AppHireJobCvRelRespVO>> page
             (@Valid AppHireJobCvRelQueryReqVO pageReqVO) {
         return success(jobCvRelService.page(pageReqVO));
@@ -60,7 +60,7 @@ public class AppJobCvRelController {
 
     @PreAuthenticated
     @GetMapping("/get/commend/count")
-    @Operation(summary = "获取推荐职位投递状态数量")
+    @Operation(summary = "众聘分享-获取推荐职位投递状态数量")
     public CommonResult<List<CommonRespVO>> getRecommendCount() {
         return success(jobCvRelService.getRecommendCount());
     }

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/hire/AppHireJobCvRelRespVO.java

@@ -20,7 +20,7 @@ public class AppHireJobCvRelRespVO extends HireJobCvRelRespVO {
     private JobAdvertisedSimpleRespVO job;
 
     @Schema(description = "投递人员信息")
-    private PersonSimpleRespVO recommendPerson;
+    private PersonSimpleRespVO sendPerson;
 
     @Schema(description = "投递企业信息")
     private EnterpriseSimpleRespVO enterprise;

+ 9 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/person/AppPersonResumeController.java

@@ -85,6 +85,15 @@ public class AppPersonResumeController {
         return success(personInfoService.saveInfo(reqVO));
     }
 
+
+    @PreAuthenticated
+    @PostMapping("/avatar/update")
+    @Operation(summary = "修改人才头像")
+    public CommonResult<Boolean> uploadAvatar(@RequestParam("avatar") String avatar) {
+        personInfoService.uploadAvatar(avatar);
+        return success(true);
+    }
+
     @PreAuthenticated
     @PostMapping("/info/simple/save")
     @Operation(summary = "保存简易基本信息")

+ 4 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/appadmin/person/cv/AppAdminJobCvRelPageReqVO.java

@@ -8,6 +8,10 @@ import lombok.Data;
 @Data
 public class AppAdminJobCvRelPageReqVO extends AppAdminPersonPageReqVO {
 
+
+    @Schema(description = "简历投递类型",example = "1")
+    private String type;
+
     @Schema(description = "简历投递状态",example = "1")
     private String status;
 

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/enterprise/vo/EnterpriseSimpleRespVO.java

@@ -17,6 +17,9 @@ public class EnterpriseSimpleRespVO {
     @Schema(description = "企业名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
     private String name;
 
+    @Schema(description = "企业别称", example = "xx科技")
+    private String anotherName;
+
     @Schema(description = "父企业 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long parentId;
 

+ 37 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInvitePageReqVO.java

@@ -0,0 +1,37 @@
+package com.citu.module.menduner.system.controller.base.invite;
+
+
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 门墩儿-企业邀请码分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class EnterpriseInvitePageReqVO extends PageParam {
+
+    @Schema(description = "企业id", example = "3851")
+    private Long enterpriseId;
+
+    @Schema(description = "用户编号", example = "16089")
+    private Long userId;
+
+    @Schema(description = "类型(0 邀请同事 | 1 邀请子公司)", example = "2")
+    private String type;
+
+    @Schema(description = "唯一标识")
+    private String code;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 43 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRecordPageReqVO.java

@@ -0,0 +1,43 @@
+package com.citu.module.menduner.system.controller.base.invite;
+
+
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 企业邀请记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class EnterpriseInviteRecordPageReqVO extends PageParam {
+
+    @Schema(description = "受邀企业id", example = "7577")
+    private Long enterpriseId;
+
+    @Schema(description = "受邀用户编号", example = "25133")
+    private Long userId;
+
+    @Schema(description = "邀请企业id", example = "16162")
+    private Long inviteEnterpriseId;
+
+    @Schema(description = "邀请用户编号", example = "22337")
+    private Long inviteUserId;
+
+    @Schema(description = "类型(0 邀请同事 | 1 邀请子公司)", example = "1")
+    private String type;
+
+    @Schema(description = "邀请码")
+    private String code;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 48 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRecordRespVO.java

@@ -0,0 +1,48 @@
+package com.citu.module.menduner.system.controller.base.invite;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 企业邀请记录 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class EnterpriseInviteRecordRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28234")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "受邀企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7577")
+    @ExcelProperty("受邀企业id")
+    private Long enterpriseId;
+
+    @Schema(description = "受邀用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25133")
+    @ExcelProperty("受邀用户编号")
+    private Long userId;
+
+    @Schema(description = "邀请企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16162")
+    @ExcelProperty("邀请企业id")
+    private Long inviteEnterpriseId;
+
+    @Schema(description = "邀请用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22337")
+    @ExcelProperty("邀请用户编号")
+    private Long inviteUserId;
+
+    @Schema(description = "类型(0 邀请同事 | 1 邀请子公司)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("类型(0 邀请同事 | 1 邀请子公司)")
+    private String type;
+
+    @Schema(description = "邀请码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("邀请码")
+    private String code;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 40 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRecordSaveReqVO.java

@@ -0,0 +1,40 @@
+package com.citu.module.menduner.system.controller.base.invite;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 企业邀请记录新增/修改 Request VO")
+@Data
+public class EnterpriseInviteRecordSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28234")
+    private Long id;
+
+    @Schema(description = "受邀企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7577")
+    @NotNull(message = "{1_100_041_002}")
+    private Long enterpriseId;
+
+    @Schema(description = "受邀用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25133")
+    @NotNull(message = "{1_100_041_003}")
+    private Long userId;
+
+    @Schema(description = "邀请企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16162")
+    @NotNull(message = "{1_100_041_004}")
+    private Long inviteEnterpriseId;
+
+    @Schema(description = "邀请用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22337")
+    @NotNull(message = "{1_100_041_005}")
+    private Long inviteUserId;
+
+    @Schema(description = "类型(0 邀请同事 | 1 邀请子公司)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotEmpty(message = "{1_100_041_006}")
+    private String type;
+
+    @Schema(description = "邀请码", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "{1_100_041_007}")
+    private String code;
+
+}

+ 44 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteRespVO.java

@@ -0,0 +1,44 @@
+package com.citu.module.menduner.system.controller.base.invite;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 门墩儿-企业邀请码 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class EnterpriseInviteRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1606")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3851")
+    @ExcelProperty("企业id")
+    private Long enterpriseId;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "16089")
+    @ExcelProperty("用户编号")
+    private Long userId;
+
+    @Schema(description = "类型(0 邀请同事 | 1 邀请子公司)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("类型(0 邀请同事 | 1 邀请子公司)")
+    private String type;
+
+    @Schema(description = "唯一标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("唯一标识")
+    private String code;
+
+    @Schema(description = "失效天数", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("失效天数")
+    private Integer expireDay;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 37 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/invite/EnterpriseInviteSaveReqVO.java

@@ -0,0 +1,37 @@
+package com.citu.module.menduner.system.controller.base.invite;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 门墩儿-企业邀请码新增/修改 Request VO")
+@Data
+public class EnterpriseInviteSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1606")
+    private Long id;
+
+    @Schema(description = "企业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3851")
+    @NotNull(message = "{1_100_040_002}")
+    private Long enterpriseId;
+
+    @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "16089")
+    @NotNull(message = "{1_100_040_003}")
+    private Long userId;
+
+    @Schema(description = "类型(0 邀请同事 | 1 邀请子公司)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotEmpty(message = "{1_100_040_004}")
+    private String type;
+
+    @Schema(description = "唯一标识", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "{1_100_040_005}")
+    private String code;
+
+    @Schema(description = "失效天数", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "{1_100_040_006}")
+    private Integer expireDay;
+
+}

+ 51 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/invite/EnterpriseInviteDO.java

@@ -0,0 +1,51 @@
+package com.citu.module.menduner.system.dal.dataobject.invite;
+
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+import lombok.*;
+
+/**
+ * 门墩儿-企业邀请码 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_enterprise_invite")
+@KeySequence("mde_enterprise_invite_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnterpriseInviteDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 企业id
+     */
+    private Long enterpriseId;
+    /**
+     * 用户编号
+     */
+    private Long userId;
+    /**
+     * 类型(0 邀请同事 | 1 邀请子公司)
+     */
+    private String type;
+    /**
+     * 唯一标识
+     */
+    private String code;
+    /**
+     * 失效天数
+     */
+    private Integer expireDay;
+
+}

+ 55 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/invite/EnterpriseInviteRecordDO.java

@@ -0,0 +1,55 @@
+package com.citu.module.menduner.system.dal.dataobject.invite;
+
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+import lombok.*;
+
+/**
+ * 企业邀请记录 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_enterprise_invite_record")
+@KeySequence("mde_enterprise_invite_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EnterpriseInviteRecordDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 受邀企业id
+     */
+    private Long enterpriseId;
+    /**
+     * 受邀用户编号
+     */
+    private Long userId;
+    /**
+     * 邀请企业id
+     */
+    private Long inviteEnterpriseId;
+    /**
+     * 邀请用户编号
+     */
+    private Long inviteUserId;
+    /**
+     * 类型(0 邀请同事 | 1 邀请子公司)
+     */
+    private String type;
+    /**
+     * 邀请码
+     */
+    private String code;
+
+}

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterpriseUserBindMapper.java

@@ -82,7 +82,7 @@ public interface EnterpriseUserBindMapper extends BaseMapperX<EnterpriseUserBind
         wrapper.selectAs(EnterpriseDO::getLogoUrl, AppAdminUserRespVO::getLogoUrl);
 
         wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, EnterpriseUserBindDO::getEnterpriseId);
-        wrapper.innerJoin(EnterprisePostDO.class, EnterprisePostDO::getId, EnterpriseUserBindDO::getPostId);
+        wrapper.leftJoin(EnterprisePostDO.class, EnterprisePostDO::getId, EnterpriseUserBindDO::getPostId);
 
         wrapper.eq(EnterpriseDO::getId, enterpriseId);
         wrapper.eq(EnterpriseUserBindDO::getEnterpriseId, enterpriseId);

+ 29 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/invite/EnterpriseInviteMapper.java

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.system.dal.mysql.invite;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInvitePageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 门墩儿-企业邀请码 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface EnterpriseInviteMapper extends BaseMapperX<EnterpriseInviteDO> {
+
+    default PageResult<EnterpriseInviteDO> selectPage(EnterpriseInvitePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<EnterpriseInviteDO>()
+                .eqIfPresent(EnterpriseInviteDO::getEnterpriseId, reqVO.getEnterpriseId())
+                .eqIfPresent(EnterpriseInviteDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(EnterpriseInviteDO::getType, reqVO.getType())
+                .eqIfPresent(EnterpriseInviteDO::getCode, reqVO.getCode())
+                .betweenIfPresent(EnterpriseInviteDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(EnterpriseInviteDO::getId));
+    }
+
+}

+ 31 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/invite/EnterpriseInviteRecordMapper.java

@@ -0,0 +1,31 @@
+package com.citu.module.menduner.system.dal.mysql.invite;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordPageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteRecordDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 企业邀请记录 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface EnterpriseInviteRecordMapper extends BaseMapperX<EnterpriseInviteRecordDO> {
+
+    default PageResult<EnterpriseInviteRecordDO> selectPage(EnterpriseInviteRecordPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<EnterpriseInviteRecordDO>()
+                .eqIfPresent(EnterpriseInviteRecordDO::getEnterpriseId, reqVO.getEnterpriseId())
+                .eqIfPresent(EnterpriseInviteRecordDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(EnterpriseInviteRecordDO::getInviteEnterpriseId, reqVO.getInviteEnterpriseId())
+                .eqIfPresent(EnterpriseInviteRecordDO::getInviteUserId, reqVO.getInviteUserId())
+                .eqIfPresent(EnterpriseInviteRecordDO::getType, reqVO.getType())
+                .eqIfPresent(EnterpriseInviteRecordDO::getCode, reqVO.getCode())
+                .betweenIfPresent(EnterpriseInviteRecordDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(EnterpriseInviteRecordDO::getId));
+    }
+
+}

+ 51 - 21
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobAdvertisedMapper.java

@@ -7,6 +7,7 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
+import com.citu.module.menduner.system.controller.app.job.vo.AppEnterpriseJobHomeRespVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedHomeRespVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedPageReqVO;
 import com.citu.module.menduner.system.controller.app.job.vo.AppJobAdvertisedRespVO;
@@ -52,21 +53,11 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
                 .eq(JobAdvertisedDO::getStatus, MendunerStatusEnum.ENABLE.getStatus()));
     }
 
-    default List<JobAdvertisedDO> selectByEnterpriseId(Long enterpriseId) {
-        return selectList(new LambdaQueryWrapperX<JobAdvertisedDO>()
-                .eq(JobAdvertisedDO::getEnterpriseId, enterpriseId)
-                .eq(JobAdvertisedDO::getStatus, MendunerStatusEnum.ENABLE.getStatus()));
-    }
-
     default List<JobAdvertisedDO> selectByEnterpriseIdAndNotExpireTime(Long enterpriseId) {
         LambdaQueryWrapperX<JobAdvertisedDO> query = new LambdaQueryWrapperX<>();
         query.eq(JobAdvertisedDO::getEnterpriseId, enterpriseId);
         query.eq(JobAdvertisedDO::getStatus, MendunerStatusEnum.ENABLE.getStatus());
-        query.and(wrapper -> wrapper
-                .ge(JobAdvertisedDO::getExpireTime, LocalDateTime.now())
-                .or()
-                .isNull(JobAdvertisedDO::getExpireTime)
-        );
+        notExpireTime(query);
         return selectList(query);
     }
 
@@ -89,11 +80,7 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
         query.eqIfPresent(JobAdvertisedDO::getTop, reqVO.getTop());
 
 
-        query.and(wrapper -> wrapper
-                .ge(JobAdvertisedDO::getExpireTime, LocalDateTime.now())
-                .or()
-                .isNull(JobAdvertisedDO::getExpireTime)
-        );
+        notExpireTime(query);
 
         if (AppJobAdvertisedPageReqVO.RECOMMEND.equals(reqVO.getMark())) {
             // 推荐
@@ -112,6 +99,26 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
         return selectJoinPage(reqVO, AppJobAdvertisedHomeRespVO.class, query);
     }
 
+
+    /**
+     * 获取发布过职位的企业信息
+     *
+     * @param pageParam 分页
+     * @return PageResult<AppEnterpriseSimpleRespVO>
+     **/
+    default PageResult<AppEnterpriseJobHomeRespVO> getEnterpriseJobPage(PageParam pageParam) {
+        MPJLambdaWrapperX<JobAdvertisedDO> query = new MPJLambdaWrapperX<>();
+        query.selectAssociation(EnterpriseDO.class, AppEnterpriseJobHomeRespVO::getEnterprise);
+        query.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, JobAdvertisedDO::getEnterpriseId);
+        query.eq(EnterpriseDO::getStatus, MendunerStatusEnum.ENABLE.getStatus());
+        query.eq(JobAdvertisedDO::getStatus, MendunerStatusEnum.ENABLE.getStatus());
+        notExpireTime(query);
+        query.orderByDesc(JobAdvertisedDO::getUpdateTime);
+        query.groupBy(JobAdvertisedDO::getEnterpriseId);
+        return selectJoinPage(pageParam, AppEnterpriseJobHomeRespVO.class, query);
+
+    }
+
     default PageResult<AppJobAdvertisedRespVO> selectByIdListPage(PageParam pageParam, List<Long> ids) {
         MPJLambdaWrapperX<JobAdvertisedDO> query = new MPJLambdaWrapperX<>();
         query.selectAssociation(JobAdvertisedDO.class, AppJobAdvertisedRespVO::getJob);
@@ -122,6 +129,16 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
         return selectJoinPage(pageParam, AppJobAdvertisedRespVO.class, query);
     }
 
+
+    default List<JobAdvertisedDO> selectByEnterpriseIdList(List<Long> ids) {
+        LambdaQueryWrapper<JobAdvertisedDO> query = new LambdaQueryWrapperX<JobAdvertisedDO>();
+        query.in(JobAdvertisedDO::getEnterpriseId, ids);
+        query.eq(JobAdvertisedDO::getStatus, MendunerStatusEnum.ENABLE.getStatus());
+        notExpireTime(query);
+        return selectList(query);
+    }
+
+
     default PageResult<JobAdvertisedDO> selectPage(AppAdminJobPageReqVO reqVO) {
         LambdaQueryWrapper<JobAdvertisedDO> query = new LambdaQueryWrapperX<JobAdvertisedDO>()
                 .eqIfPresent(JobAdvertisedDO::getAreaId, reqVO.getAreaId())
@@ -140,11 +157,7 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
             // 获取过期的数据 当前时间小于过期时间
             query.le(JobAdvertisedDO::getExpireTime, LocalDateTime.now());
         } else {
-            query.and(wrapper -> wrapper
-                    .ge(JobAdvertisedDO::getExpireTime, LocalDateTime.now())
-                    .or()
-                    .isNull(JobAdvertisedDO::getExpireTime)
-            );
+            notExpireTime(query);
         }
         return selectPage(reqVO, query);
     }
@@ -158,4 +171,21 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
     }
 
 
+    default void notExpireTime(LambdaQueryWrapper<JobAdvertisedDO> query) {
+        query.and(wrapper -> wrapper
+                .ge(JobAdvertisedDO::getExpireTime, LocalDateTime.now())
+                .or()
+                .isNull(JobAdvertisedDO::getExpireTime)
+        );
+    }
+
+    default void notExpireTime(MPJLambdaWrapperX<JobAdvertisedDO> query) {
+        query.and(wrapper -> wrapper
+                .ge(JobAdvertisedDO::getExpireTime, LocalDateTime.now())
+                .or()
+                .isNull(JobAdvertisedDO::getExpireTime)
+        );
+    }
+
+
 }

+ 4 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobCvRelMapper.java

@@ -54,6 +54,7 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         // 招聘职位的条件
         wrapper.eqIfExists(JobCvRelDO::getJobId, reqVO.getJobId());
         wrapper.eqIfPresent(JobCvRelDO::getStatus, reqVO.getStatus());
+        wrapper.eqIfExists(JobCvRelDO::getType, reqVO.getType());
 
         // 投递的职位 inner 人才信息
         wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
@@ -73,14 +74,14 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         MPJLambdaWrapperX<JobCvRelDO> wrapper = new MPJLambdaWrapperX<>();
         wrapper.selectAsClass(JobCvRelDO.class, AppHireJobCvRelRespVO.class);
         wrapper.selectAssociation(JobAdvertisedDO.class, AppHireJobCvRelRespVO::getJob);
-        wrapper.selectAssociation(PersonInfoDO.class, AppHireJobCvRelRespVO::getRecommendPerson);
+        wrapper.selectAssociation(PersonInfoDO.class, AppHireJobCvRelRespVO::getSendPerson);
         wrapper.selectAssociation(EnterpriseDO.class, AppHireJobCvRelRespVO::getEnterprise);
         // 投递的职位 inner 招聘职位
         wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, JobCvRelDO::getJobId);
         // 投递的职位 inner 企业信息
         wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, JobAdvertisedDO::getEnterpriseId);
-        // 投递的职位 inner 人才信息 (推荐人)
-        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getRecommendUserId);
+        // 投递的职位 inner 人才信息 (投递人)
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getUserId, JobCvRelDO::getUserId);
 
         wrapper.eq(JobCvRelDO::getRecommendUserId, userId);
         wrapper.eq(JobCvRelDO::getStatus, reqVO.getStatus());

+ 21 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/redis/RedisKeyConstants.java

@@ -56,6 +56,14 @@ public interface RedisKeyConstants {
      */
     String MDE_AREA_LIST ="mde_area_list";
 
+    /**
+     * 区域树信息的缓存
+     * <p>
+     * KEY 格式:mde_area_tree:{id}
+     * VALUE 数据类型:String 区域编号集合
+     */
+    String MDE_AREA_TREE ="mde_area_tree";
+
     /**
      * 热门区域信息的缓存
      * <p>
@@ -65,13 +73,22 @@ public interface RedisKeyConstants {
     String MDE_AREA_HOT_LIST ="mde_area_hot_list";
 
     /**
-     * 指定职位的所有子区域信息的缓存
+     * 指定职位的所有子信息的缓存
      * <p>
      * KEY 格式:mde_position_children:{id}
      * VALUE 数据类型:String 子职位编号集合
      */
     String MDE_POSITION_CHILDREN ="mde_position_children";
 
+
+    /**
+     *  职位数信息的缓存
+     * <p>
+     * KEY 格式:mde_position_tree:{id}
+     * VALUE 数据类型:String 子职位编号集合
+     */
+    String MDE_POSITION_TREE ="mde_position_tree";
+
     /**
      * 指定行业的所有子行业信息的缓存
      * <p>
@@ -81,12 +98,12 @@ public interface RedisKeyConstants {
     String MDE_INDUSTRY_CHILDREN ="mde_industry_children";
 
     /**
-     * 指定行业的所有子行业信息的缓存
+     * 行业树信息缓存
      * <p>
-     * KEY 格式:mde_industry:{id}
+     * KEY 格式:mde_industry_tree:{id}
      * VALUE 数据类型:String 子行业编号集合
      */
-    String MDE_INDUSTRY ="mde_industry";
+    String MDE_INDUSTRY_TREE ="mde_industry_tree";
 
     /**
      * 指定技能的所有子技能信息的缓存

+ 0 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/framework/datapermission/config/DataPermissionConfiguration.java

@@ -39,9 +39,6 @@ public class DataPermissionConfiguration {
             // 企业岗位表 where  enterprise_id = xx
             rule.addDataColumn(EnterprisePostDO.class, "enterprise_id");
 
-            // 众聘 简历投递表 where publish_user_id = xx and enterprise_id = xx
-            rule.addUserColumn(HireJobCvRelDO.class, "publish_user_id");
-            rule.addDataColumn(HireJobCvRelDO.class, "enterprise_id");
         };
     }
 }

+ 5 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/area/AreaServiceImpl.java

@@ -57,7 +57,8 @@ public class AreaServiceImpl implements AreaService {
     @CacheEvict(cacheNames = {
             RedisKeyConstants.MDE_AREA_CHILDREN,
             RedisKeyConstants.MDE_AREA_LIST,
-            RedisKeyConstants.MDE_AREA_IDS
+            RedisKeyConstants.MDE_AREA_IDS,
+            RedisKeyConstants.MDE_AREA_TREE
     },
             allEntries = true) // allEntries 清空所有缓存,因为操作一个区域,涉及到多个缓存
     public void updateArea(AreaSaveReqVO updateReqVO) {
@@ -72,7 +73,8 @@ public class AreaServiceImpl implements AreaService {
     @CacheEvict(cacheNames = {
             RedisKeyConstants.MDE_AREA_CHILDREN,
             RedisKeyConstants.MDE_AREA_LIST,
-            RedisKeyConstants.MDE_AREA_IDS
+            RedisKeyConstants.MDE_AREA_IDS,
+            RedisKeyConstants.MDE_AREA_TREE
     },
             allEntries = true) // allEntries 清空所有缓存,因为操作一个区域,涉及到多个缓存
     public void deleteArea(Long id) {
@@ -137,6 +139,7 @@ public class AreaServiceImpl implements AreaService {
     }
 
     @Override
+    @Cacheable(cacheNames = RedisKeyConstants.MDE_AREA_TREE, key = "#reqVO", unless = "#result.size==0")
     public List<AppAreaChildrenRespVO> getArea(AppAreaListReqVO reqVO) {
         List<AreaDO> areaList = areaMapper.selectList(reqVO);
         if (null == areaList) {

+ 24 - 9
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/industry/IndustryServiceImpl.java

@@ -4,13 +4,12 @@ import cn.hutool.core.collection.CollUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
-import com.citu.module.menduner.system.controller.app.position.vo.AppPositionChildrenRespVO;
-import com.citu.module.menduner.system.controller.base.industry.IndustryListReqVO;
-import com.citu.module.menduner.system.controller.base.industry.IndustryPageReqVO;
-import com.citu.module.menduner.system.controller.base.industry.IndustrySaveReqVO;
 import com.citu.module.menduner.system.controller.app.industry.vo.AppIndustryChildrenRespVO;
 import com.citu.module.menduner.system.controller.app.industry.vo.AppIndustryListReqVO;
 import com.citu.module.menduner.system.controller.app.industry.vo.AppIndustrySimpleRespVO;
+import com.citu.module.menduner.system.controller.base.industry.IndustryListReqVO;
+import com.citu.module.menduner.system.controller.base.industry.IndustryPageReqVO;
+import com.citu.module.menduner.system.controller.base.industry.IndustrySaveReqVO;
 import com.citu.module.menduner.system.convert.IndustryConvert;
 import com.citu.module.menduner.system.dal.dataobject.industry.IndustryDO;
 import com.citu.module.menduner.system.dal.mysql.industry.IndustryMapper;
@@ -50,7 +49,11 @@ public class IndustryServiceImpl implements IndustryService {
     private RestTemplate restTemplate;
 
     @Override
-    @CacheEvict(cacheNames = RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+    @CacheEvict(cacheNames =
+            {
+                    RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+                    RedisKeyConstants.MDE_INDUSTRY_TREE
+            },
             allEntries = true)
     public Long createIndustry(IndustrySaveReqVO createReqVO) {
         // 插入
@@ -61,7 +64,11 @@ public class IndustryServiceImpl implements IndustryService {
     }
 
     @Override
-    @CacheEvict(cacheNames = RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+    @CacheEvict(cacheNames =
+            {
+                    RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+                    RedisKeyConstants.MDE_INDUSTRY_TREE
+            },
             allEntries = true)
     public void updateIndustry(IndustrySaveReqVO updateReqVO) {
         // 校验存在
@@ -72,7 +79,11 @@ public class IndustryServiceImpl implements IndustryService {
     }
 
     @Override
-    @CacheEvict(cacheNames = RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+    @CacheEvict(cacheNames =
+            {
+                    RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+                    RedisKeyConstants.MDE_INDUSTRY_TREE
+            },
             allEntries = true)
     public void deleteIndustry(Long id) {
         // 校验存在
@@ -104,7 +115,11 @@ public class IndustryServiceImpl implements IndustryService {
 
     @Override
     @DSTransactional // 单机+多数据源方案,使用 @DSTransactional 保证本地事务,以及数据源的切换
-    @CacheEvict(cacheNames = RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+    @CacheEvict(cacheNames =
+            {
+                    RedisKeyConstants.MDE_INDUSTRY_CHILDREN,
+                    RedisKeyConstants.MDE_INDUSTRY_TREE
+            },
             allEntries = true)
     public void syncBossIndustry() {
         log.info(" ========== 开始解析同步BOSS行业信息到数据库 ========== ");
@@ -157,7 +172,7 @@ public class IndustryServiceImpl implements IndustryService {
 
     @Override
     /** 30分钟过期一次 {@link TimeoutRedisCacheManager} **/
-    @Cacheable(cacheNames = RedisKeyConstants.MDE_INDUSTRY+"#30m", key = "#reqVO", unless = "#result.size==0")
+    @Cacheable(cacheNames = RedisKeyConstants.MDE_INDUSTRY_TREE + "#30m", key = "#reqVO", unless = "#result.size==0")
     public List<AppIndustryChildrenRespVO> getIndustry(AppIndustryListReqVO reqVO) {
         List<IndustryDO> list = industryMapper.selectList(reqVO);
         if (null == list) {

+ 56 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteRecordService.java

@@ -0,0 +1,56 @@
+package com.citu.module.menduner.system.service.invite;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteRecordDO;
+
+import javax.validation.Valid;
+
+/**
+ * 企业邀请记录 Service 接口
+ *
+ * @author Rayson
+ */
+public interface EnterpriseInviteRecordService {
+
+    /**
+     * 创建企业邀请记录
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createEnterpriseInviteRecord(@Valid EnterpriseInviteRecordSaveReqVO createReqVO);
+
+    /**
+     * 更新企业邀请记录
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateEnterpriseInviteRecord(@Valid EnterpriseInviteRecordSaveReqVO updateReqVO);
+
+    /**
+     * 删除企业邀请记录
+     *
+     * @param id 编号
+     */
+    void deleteEnterpriseInviteRecord(Long id);
+
+    /**
+     * 获得企业邀请记录
+     *
+     * @param id 编号
+     * @return 企业邀请记录
+     */
+    EnterpriseInviteRecordDO getEnterpriseInviteRecord(Long id);
+
+    /**
+     * 获得企业邀请记录分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 企业邀请记录分页
+     */
+    PageResult<EnterpriseInviteRecordDO> getEnterpriseInviteRecordPage(EnterpriseInviteRecordPageReqVO pageReqVO);
+
+}

+ 72 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteRecordServiceImpl.java

@@ -0,0 +1,72 @@
+package com.citu.module.menduner.system.service.invite;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteRecordDO;
+import com.citu.module.menduner.system.dal.mysql.invite.EnterpriseInviteRecordMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_INVITE_RECORD_NOT_EXISTS;
+
+/**
+ * 企业邀请记录 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class EnterpriseInviteRecordServiceImpl implements EnterpriseInviteRecordService {
+
+    @Resource
+    private EnterpriseInviteRecordMapper enterpriseInviteRecordMapper;
+
+    @Override
+    public Long createEnterpriseInviteRecord(EnterpriseInviteRecordSaveReqVO createReqVO) {
+        // 插入
+        EnterpriseInviteRecordDO enterpriseInviteRecord = BeanUtils.toBean(createReqVO, EnterpriseInviteRecordDO.class);
+        enterpriseInviteRecordMapper.insert(enterpriseInviteRecord);
+        // 返回
+        return enterpriseInviteRecord.getId();
+    }
+
+    @Override
+    public void updateEnterpriseInviteRecord(EnterpriseInviteRecordSaveReqVO updateReqVO) {
+        // 校验存在
+        validateEnterpriseInviteRecordExists(updateReqVO.getId());
+        // 更新
+        EnterpriseInviteRecordDO updateObj = BeanUtils.toBean(updateReqVO, EnterpriseInviteRecordDO.class);
+        enterpriseInviteRecordMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteEnterpriseInviteRecord(Long id) {
+        // 校验存在
+        validateEnterpriseInviteRecordExists(id);
+        // 删除
+        enterpriseInviteRecordMapper.deleteById(id);
+    }
+
+    private void validateEnterpriseInviteRecordExists(Long id) {
+        if (enterpriseInviteRecordMapper.selectById(id) == null) {
+            throw exception(ENTERPRISE_INVITE_RECORD_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public EnterpriseInviteRecordDO getEnterpriseInviteRecord(Long id) {
+        return enterpriseInviteRecordMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<EnterpriseInviteRecordDO> getEnterpriseInviteRecordPage(EnterpriseInviteRecordPageReqVO pageReqVO) {
+        return enterpriseInviteRecordMapper.selectPage(pageReqVO);
+    }
+
+}

+ 56 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteService.java

@@ -0,0 +1,56 @@
+package com.citu.module.menduner.system.service.invite;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInvitePageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteDO;
+
+import javax.validation.Valid;
+
+/**
+ * 门墩儿-企业邀请码 Service 接口
+ *
+ * @author Rayson
+ */
+public interface EnterpriseInviteService {
+
+    /**
+     * 创建门墩儿-企业邀请码
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createEnterpriseInvite(@Valid EnterpriseInviteSaveReqVO createReqVO);
+
+    /**
+     * 更新门墩儿-企业邀请码
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateEnterpriseInvite(@Valid EnterpriseInviteSaveReqVO updateReqVO);
+
+    /**
+     * 删除门墩儿-企业邀请码
+     *
+     * @param id 编号
+     */
+    void deleteEnterpriseInvite(Long id);
+
+    /**
+     * 获得门墩儿-企业邀请码
+     *
+     * @param id 编号
+     * @return 门墩儿-企业邀请码
+     */
+    EnterpriseInviteDO getEnterpriseInvite(Long id);
+
+    /**
+     * 获得门墩儿-企业邀请码分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 门墩儿-企业邀请码分页
+     */
+    PageResult<EnterpriseInviteDO> getEnterpriseInvitePage(EnterpriseInvitePageReqVO pageReqVO);
+
+}

+ 72 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteServiceImpl.java

@@ -0,0 +1,72 @@
+package com.citu.module.menduner.system.service.invite;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInvitePageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteDO;
+import com.citu.module.menduner.system.dal.mysql.invite.EnterpriseInviteMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_INVITE_NOT_EXISTS;
+
+/**
+ * 门墩儿-企业邀请码 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class EnterpriseInviteServiceImpl implements EnterpriseInviteService {
+
+    @Resource
+    private EnterpriseInviteMapper enterpriseInviteMapper;
+
+    @Override
+    public Long createEnterpriseInvite(EnterpriseInviteSaveReqVO createReqVO) {
+        // 插入
+        EnterpriseInviteDO enterpriseInvite = BeanUtils.toBean(createReqVO, EnterpriseInviteDO.class);
+        enterpriseInviteMapper.insert(enterpriseInvite);
+        // 返回
+        return enterpriseInvite.getId();
+    }
+
+    @Override
+    public void updateEnterpriseInvite(EnterpriseInviteSaveReqVO updateReqVO) {
+        // 校验存在
+        validateEnterpriseInviteExists(updateReqVO.getId());
+        // 更新
+        EnterpriseInviteDO updateObj = BeanUtils.toBean(updateReqVO, EnterpriseInviteDO.class);
+        enterpriseInviteMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteEnterpriseInvite(Long id) {
+        // 校验存在
+        validateEnterpriseInviteExists(id);
+        // 删除
+        enterpriseInviteMapper.deleteById(id);
+    }
+
+    private void validateEnterpriseInviteExists(Long id) {
+        if (enterpriseInviteMapper.selectById(id) == null) {
+            throw exception(ENTERPRISE_INVITE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public EnterpriseInviteDO getEnterpriseInvite(Long id) {
+        return enterpriseInviteMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<EnterpriseInviteDO> getEnterpriseInvitePage(EnterpriseInvitePageReqVO pageReqVO) {
+        return enterpriseInviteMapper.selectPage(pageReqVO);
+    }
+
+}

+ 41 - 19
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java

@@ -27,7 +27,6 @@ import com.citu.module.menduner.system.enums.account.BalanceBizTypeEnum;
 import com.citu.module.menduner.system.enums.account.PointBizTypeEnum;
 import com.citu.module.menduner.system.mq.producer.ESProducer;
 import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
-import com.citu.module.menduner.system.service.enterprise.account.EnterpriseAccountService;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
 import com.citu.module.menduner.system.service.record.EnterpriseAccountRecordService;
 import com.citu.module.menduner.system.util.ESOperateEnum;
@@ -150,18 +149,41 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
 
     @Override
     public PageResult<AppEnterpriseJobHomeRespVO> getHotEnterpriseJobPage(PageParam pageParam) {
-        PageResult<AppEnterpriseJobHomeRespVO> result = new PageResult<>();
-        PageResult<AppEnterpriseSimpleRespVO> enterpriseSimplePage = enterpriseService.getEnterpriseSimplePage(pageParam);
-        result.setTotal(enterpriseSimplePage.getTotal());
-        List<AppEnterpriseJobHomeRespVO> list = new ArrayList<>();
-        enterpriseSimplePage.getList().forEach(enterprise -> {
-            AppEnterpriseJobHomeRespVO respVO = new AppEnterpriseJobHomeRespVO();
-            respVO.setEnterprise(enterprise);
-            List<JobAdvertisedDO> jobList = jobAdvertisedMapper.selectByEnterpriseId(enterprise.getId());
-            respVO.setJobList(JobAdvertisedConvert.INSTANCE.convertListSimple(jobList));
-            list.add(respVO);
+//        PageResult<AppEnterpriseJobHomeRespVO> result = new PageResult<>();
+//        PageResult<AppEnterpriseSimpleRespVO> enterpriseSimplePage = enterpriseService.getEnterpriseSimplePage(pageParam);
+//        result.setTotal(enterpriseSimplePage.getTotal());
+//        List<AppEnterpriseJobHomeRespVO> list = new ArrayList<>();
+//        enterpriseSimplePage.getList().forEach(enterprise -> {
+//            AppEnterpriseJobHomeRespVO respVO = new AppEnterpriseJobHomeRespVO();
+//            respVO.setEnterprise(enterprise);
+//            List<JobAdvertisedDO> jobList = jobAdvertisedMapper.selectByEnterpriseId(enterprise.getId());
+//            respVO.setJobList(JobAdvertisedConvert.INSTANCE.convertListSimple(jobList));
+//            list.add(respVO);
+//        });
+//        result.setList(list);
+        PageResult<AppEnterpriseJobHomeRespVO> result =
+                jobAdvertisedMapper.getEnterpriseJobPage(pageParam);
+        if (result.getList().isEmpty()) {
+            return result;
+        }
+        // 企业 id 集合
+        List<Long> idList = result.getList().stream().map(c -> c.getEnterprise().getId())
+                .collect(Collectors.toList());
+
+        // 一次性获取相关企业的数据
+        Map<Long, List<JobAdvertisedDO>> jobMap = jobAdvertisedMapper
+                .selectByEnterpriseIdList(idList)
+                .stream()
+                .collect(Collectors.groupingBy(JobAdvertisedDO::getEnterpriseId));
+
+        result.getList().forEach(resp -> {
+            resp.setJobList(
+                    // 填充
+                    JobAdvertisedConvert.INSTANCE.convertListSimple(
+                            jobMap.get(resp.getEnterprise().getId())
+                    )
+            );
         });
-        result.setList(list);
         return result;
     }
 
@@ -274,13 +296,13 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
                          AppAdminJobSaveReqVO reqVO) {
         if (reqVO.getHire()) {
             if (null != reqVO.getHirePrice()) {
-            //                // 计算需要支付的额外费用(如果是新职位,就是全额;如果是修改,就是差额)
-            //                boolean result = enterpriseAccountService
-            //                        .checkBalance(enterpriseId, userId, reqVO.getHirePrice());
-            //                if (!result) {
-            //                    // 余额不足
-            //                    throw exception(MDE_ENTERPRISE_ACCOUNT_BALANCE_NOT_ENOUGH);
-            //                }
+                //                // 计算需要支付的额外费用(如果是新职位,就是全额;如果是修改,就是差额)
+                //                boolean result = enterpriseAccountService
+                //                        .checkBalance(enterpriseId, userId, reqVO.getHirePrice());
+                //                if (!result) {
+                //                    // 余额不足
+                //                    throw exception(MDE_ENTERPRISE_ACCOUNT_BALANCE_NOT_ENOUGH);
+                //                }
             }
             if (null != reqVO.getHirePoint()) {
                 // 积分

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobCvRelServiceImpl.java

@@ -43,7 +43,7 @@ public class JobCvRelServiceImpl implements JobCvRelService {
     private JobCvRelMapper jobCvRelMapper;
 
     @Resource
-    private JobAdvertisedMapper jobAdvertisedMapper;
+    private JobAdvertisedService jobAdvertisedService;
 
     @Override
     public Long createJobCvRel(JobCvRelSaveReqVO createReqVO) {
@@ -93,7 +93,7 @@ public class JobCvRelServiceImpl implements JobCvRelService {
     @DSTransactional
     public void send(AppJobCvRelReqVO reqVO) {
         // 效验职位是否关闭
-        JobAdvertisedDO job = jobAdvertisedMapper.selectById(reqVO.getJobId());
+        JobAdvertisedDO job = jobAdvertisedService.getJobAdvertised(reqVO.getJobId());
         if (MendunerStatusEnum.DISABLE.getStatus().equals(job.getStatus())) {
             throw exception(JOB_CV_REL_JOB_STOP_DELIVERY);
         }
@@ -116,7 +116,7 @@ public class JobCvRelServiceImpl implements JobCvRelService {
     @DSTransactional
     public void send(AppHireJobCvRelReqVO reqVO) {
         // 效验职位是否关闭
-        JobAdvertisedDO job = jobAdvertisedMapper.selectById(reqVO.getJobId());
+        JobAdvertisedDO job = jobAdvertisedService.getJobAdvertised(reqVO.getJobId());
         if (MendunerStatusEnum.DISABLE.getStatus().equals(job.getStatus())) {
             throw exception(JOB_CV_REL_JOB_STOP_DELIVERY);
         }

+ 7 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoService.java

@@ -8,6 +8,7 @@ import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoSaveReqVO;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.validation.Valid;
 
@@ -72,6 +73,12 @@ public interface PersonInfoService {
      */
     boolean saveInfo(@Valid @RequestBody AppPersonInfoSaveReqVO reqVO);
 
+    /**
+     * 修改人才头像
+     *
+     * @param avatar 头像地址
+     */
+    void uploadAvatar(String avatar);
     /**
      * 保存简历简易基本信息
      *

+ 12 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoServiceImpl.java

@@ -98,6 +98,18 @@ public class PersonInfoServiceImpl implements PersonInfoService {
         return true;
     }
 
+    @Override
+    @DSTransactional
+    public void uploadAvatar(String avatar) {
+        Long userId = LoginUserContext.getUserId();
+        PersonInfoDO info = personInfoMapper.selectOne(PersonInfoDO::getUserId, userId);
+        if (null == info) {
+            throw exception(MDE_USER_INFO_NOT_EXISTS);
+        }
+        info.setAvatar(avatar);
+        personInfoMapper.updateById(info);
+    }
+
     @Override
     @DSTransactional
     public boolean saveSimple(AppPersonInfoSaveSimpleReqVO reqVO) {

+ 17 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionServiceImpl.java

@@ -63,7 +63,7 @@ public class PositionServiceImpl implements PositionService {
      * @param position 职位对象
      * @param parentId 上级职位code
      * @param level    当前层级
-     * 递归解析position
+     *                 递归解析position
      **/
     private void parseAndSavePosition(Map<String, Object> position, Long parentId, int level) {
         if (null == parentId) {
@@ -85,7 +85,11 @@ public class PositionServiceImpl implements PositionService {
 
     @Override
     @DSTransactional // 单机+多数据源方案,使用 @DSTransactional 保证本地事务,以及数据源的切换
-    @CacheEvict(cacheNames = RedisKeyConstants.MDE_POSITION_CHILDREN,
+    @CacheEvict(cacheNames =
+            {
+                    RedisKeyConstants.MDE_POSITION_CHILDREN,
+                    RedisKeyConstants.MDE_POSITION_TREE
+            },
             allEntries = true)
     public Long createPosition(PositionSaveReqVO createReqVO) {
         // 插入
@@ -96,7 +100,11 @@ public class PositionServiceImpl implements PositionService {
     }
 
     @Override
-    @CacheEvict(cacheNames = RedisKeyConstants.MDE_POSITION_CHILDREN,
+    @CacheEvict(cacheNames =
+            {
+                    RedisKeyConstants.MDE_POSITION_CHILDREN,
+                    RedisKeyConstants.MDE_POSITION_TREE
+            },
             allEntries = true)
     public void updatePosition(PositionSaveReqVO updateReqVO) {
         // 校验存在
@@ -107,7 +115,11 @@ public class PositionServiceImpl implements PositionService {
     }
 
     @Override
-    @CacheEvict(cacheNames = RedisKeyConstants.MDE_POSITION_CHILDREN,
+    @CacheEvict(cacheNames =
+            {
+                    RedisKeyConstants.MDE_POSITION_CHILDREN,
+                    RedisKeyConstants.MDE_POSITION_TREE
+            },
             allEntries = true)
     public void deletePosition(Long id) {
         // 校验存在
@@ -169,6 +181,7 @@ public class PositionServiceImpl implements PositionService {
     }
 
     @Override
+    @Cacheable(cacheNames = RedisKeyConstants.MDE_POSITION_TREE, key = "#reqVO", unless = "#result.size==0")
     public List<AppPositionChildrenRespVO> getPosition(AppPositionListReqVO reqVO) {
         List<PositionDO> list = positionMapper.selectList(reqVO);
         if (null == list) {

+ 148 - 0
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteRecordServiceImplTest.java

@@ -0,0 +1,148 @@
+package com.citu.module.menduner.system.service.invite;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.test.core.ut.BaseDbUnitTest;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordPageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteRecordSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteRecordDO;
+import com.citu.module.menduner.system.dal.mysql.invite.EnterpriseInviteRecordMapper;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.annotation.Import;
+
+import javax.annotation.Resource;
+
+import static com.citu.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
+import static com.citu.framework.common.util.object.ObjectUtils.cloneIgnoreId;
+import static com.citu.framework.test.core.util.AssertUtils.assertPojoEquals;
+import static com.citu.framework.test.core.util.AssertUtils.assertServiceException;
+import static com.citu.framework.test.core.util.RandomUtils.randomLongId;
+import static com.citu.framework.test.core.util.RandomUtils.randomPojo;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.ENTERPRISE_INVITE_RECORD_NOT_EXISTS;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link EnterpriseInviteRecordServiceImpl} 的单元测试类
+ *
+ * @author Rayson
+ */
+@Import(EnterpriseInviteRecordServiceImpl.class)
+public class EnterpriseInviteRecordServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private EnterpriseInviteRecordServiceImpl enterpriseInviteRecordService;
+
+    @Resource
+    private EnterpriseInviteRecordMapper enterpriseInviteRecordMapper;
+
+    @Test
+    public void testCreateEnterpriseInviteRecord_success() {
+        // 准备参数
+        EnterpriseInviteRecordSaveReqVO createReqVO = randomPojo(EnterpriseInviteRecordSaveReqVO.class).setId(null);
+
+        // 调用
+        Long enterpriseInviteRecordId = enterpriseInviteRecordService.createEnterpriseInviteRecord(createReqVO);
+        // 断言
+        assertNotNull(enterpriseInviteRecordId);
+        // 校验记录的属性是否正确
+        EnterpriseInviteRecordDO enterpriseInviteRecord = enterpriseInviteRecordMapper.selectById(enterpriseInviteRecordId);
+        assertPojoEquals(createReqVO, enterpriseInviteRecord, "id");
+    }
+
+    @Test
+    public void testUpdateEnterpriseInviteRecord_success() {
+        // mock 数据
+        EnterpriseInviteRecordDO dbEnterpriseInviteRecord = randomPojo(EnterpriseInviteRecordDO.class);
+        enterpriseInviteRecordMapper.insert(dbEnterpriseInviteRecord);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        EnterpriseInviteRecordSaveReqVO updateReqVO = randomPojo(EnterpriseInviteRecordSaveReqVO.class, o -> {
+            o.setId(dbEnterpriseInviteRecord.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        enterpriseInviteRecordService.updateEnterpriseInviteRecord(updateReqVO);
+        // 校验是否更新正确
+        EnterpriseInviteRecordDO enterpriseInviteRecord = enterpriseInviteRecordMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, enterpriseInviteRecord);
+    }
+
+    @Test
+    public void testUpdateEnterpriseInviteRecord_notExists() {
+        // 准备参数
+        EnterpriseInviteRecordSaveReqVO updateReqVO = randomPojo(EnterpriseInviteRecordSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> enterpriseInviteRecordService.updateEnterpriseInviteRecord(updateReqVO), ENTERPRISE_INVITE_RECORD_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteEnterpriseInviteRecord_success() {
+        // mock 数据
+        EnterpriseInviteRecordDO dbEnterpriseInviteRecord = randomPojo(EnterpriseInviteRecordDO.class);
+        enterpriseInviteRecordMapper.insert(dbEnterpriseInviteRecord);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbEnterpriseInviteRecord.getId();
+
+        // 调用
+        enterpriseInviteRecordService.deleteEnterpriseInviteRecord(id);
+        // 校验数据不存在了
+        assertNull(enterpriseInviteRecordMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteEnterpriseInviteRecord_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> enterpriseInviteRecordService.deleteEnterpriseInviteRecord(id), ENTERPRISE_INVITE_RECORD_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetEnterpriseInviteRecordPage() {
+        // mock 数据
+        EnterpriseInviteRecordDO dbEnterpriseInviteRecord = randomPojo(EnterpriseInviteRecordDO.class, o -> { // 等会查询到
+            o.setEnterpriseId(null);
+            o.setUserId(null);
+            o.setInviteEnterpriseId(null);
+            o.setInviteUserId(null);
+            o.setType(null);
+            o.setCode(null);
+            o.setCreateTime(null);
+        });
+        enterpriseInviteRecordMapper.insert(dbEnterpriseInviteRecord);
+        // 测试 enterpriseId 不匹配
+        enterpriseInviteRecordMapper.insert(cloneIgnoreId(dbEnterpriseInviteRecord, o -> o.setEnterpriseId(null)));
+        // 测试 userId 不匹配
+        enterpriseInviteRecordMapper.insert(cloneIgnoreId(dbEnterpriseInviteRecord, o -> o.setUserId(null)));
+        // 测试 inviteEnterpriseId 不匹配
+        enterpriseInviteRecordMapper.insert(cloneIgnoreId(dbEnterpriseInviteRecord, o -> o.setInviteEnterpriseId(null)));
+        // 测试 inviteUserId 不匹配
+        enterpriseInviteRecordMapper.insert(cloneIgnoreId(dbEnterpriseInviteRecord, o -> o.setInviteUserId(null)));
+        // 测试 type 不匹配
+        enterpriseInviteRecordMapper.insert(cloneIgnoreId(dbEnterpriseInviteRecord, o -> o.setType(null)));
+        // 测试 code 不匹配
+        enterpriseInviteRecordMapper.insert(cloneIgnoreId(dbEnterpriseInviteRecord, o -> o.setCode(null)));
+        // 测试 createTime 不匹配
+        enterpriseInviteRecordMapper.insert(cloneIgnoreId(dbEnterpriseInviteRecord, o -> o.setCreateTime(null)));
+        // 准备参数
+        EnterpriseInviteRecordPageReqVO reqVO = new EnterpriseInviteRecordPageReqVO();
+        reqVO.setEnterpriseId(null);
+        reqVO.setUserId(null);
+        reqVO.setInviteEnterpriseId(null);
+        reqVO.setInviteUserId(null);
+        reqVO.setType(null);
+        reqVO.setCode(null);
+        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+        // 调用
+        PageResult<EnterpriseInviteRecordDO> pageResult = enterpriseInviteRecordService.getEnterpriseInviteRecordPage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbEnterpriseInviteRecord, pageResult.getList().get(0));
+    }
+
+}

+ 148 - 0
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/invite/EnterpriseInviteServiceImplTest.java

@@ -0,0 +1,148 @@
+package com.citu.module.menduner.system.service.invite;
+
+
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInvitePageReqVO;
+import com.citu.module.menduner.system.controller.base.invite.EnterpriseInviteSaveReqVO;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+import javax.annotation.Resource;
+
+import com.citu.framework.test.core.ut.BaseDbUnitTest;
+
+import com.citu.module.menduner.system.dal.dataobject.invite.EnterpriseInviteDO;
+import com.citu.module.menduner.system.dal.mysql.invite.EnterpriseInviteMapper;
+import com.citu.framework.common.pojo.PageResult;
+
+import javax.annotation.Resource;
+import org.springframework.context.annotation.Import;
+import java.util.*;
+import java.time.LocalDateTime;
+
+import static cn.hutool.core.util.RandomUtil.*;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
+import static com.citu.framework.test.core.util.AssertUtils.*;
+import static com.citu.framework.test.core.util.RandomUtils.*;
+import static com.citu.framework.common.util.date.LocalDateTimeUtils.*;
+import static com.citu.framework.common.util.object.ObjectUtils.*;
+import static com.citu.framework.common.util.date.DateUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+/**
+ * {@link EnterpriseInviteServiceImpl} 的单元测试类
+ *
+ * @author Rayson
+ */
+@Import(EnterpriseInviteServiceImpl.class)
+public class EnterpriseInviteServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private EnterpriseInviteServiceImpl enterpriseInviteService;
+
+    @Resource
+    private EnterpriseInviteMapper enterpriseInviteMapper;
+
+    @Test
+    public void testCreateEnterpriseInvite_success() {
+        // 准备参数
+        EnterpriseInviteSaveReqVO createReqVO = randomPojo(EnterpriseInviteSaveReqVO.class).setId(null);
+
+        // 调用
+        Long enterpriseInviteId = enterpriseInviteService.createEnterpriseInvite(createReqVO);
+        // 断言
+        assertNotNull(enterpriseInviteId);
+        // 校验记录的属性是否正确
+        EnterpriseInviteDO enterpriseInvite = enterpriseInviteMapper.selectById(enterpriseInviteId);
+        assertPojoEquals(createReqVO, enterpriseInvite, "id");
+    }
+
+    @Test
+    public void testUpdateEnterpriseInvite_success() {
+        // mock 数据
+        EnterpriseInviteDO dbEnterpriseInvite = randomPojo(EnterpriseInviteDO.class);
+        enterpriseInviteMapper.insert(dbEnterpriseInvite);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        EnterpriseInviteSaveReqVO updateReqVO = randomPojo(EnterpriseInviteSaveReqVO.class, o -> {
+            o.setId(dbEnterpriseInvite.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        enterpriseInviteService.updateEnterpriseInvite(updateReqVO);
+        // 校验是否更新正确
+        EnterpriseInviteDO enterpriseInvite = enterpriseInviteMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, enterpriseInvite);
+    }
+
+    @Test
+    public void testUpdateEnterpriseInvite_notExists() {
+        // 准备参数
+        EnterpriseInviteSaveReqVO updateReqVO = randomPojo(EnterpriseInviteSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> enterpriseInviteService.updateEnterpriseInvite(updateReqVO), ENTERPRISE_INVITE_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteEnterpriseInvite_success() {
+        // mock 数据
+        EnterpriseInviteDO dbEnterpriseInvite = randomPojo(EnterpriseInviteDO.class);
+        enterpriseInviteMapper.insert(dbEnterpriseInvite);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbEnterpriseInvite.getId();
+
+        // 调用
+        enterpriseInviteService.deleteEnterpriseInvite(id);
+        // 校验数据不存在了
+        assertNull(enterpriseInviteMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteEnterpriseInvite_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> enterpriseInviteService.deleteEnterpriseInvite(id), ENTERPRISE_INVITE_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetEnterpriseInvitePage() {
+        // mock 数据
+        EnterpriseInviteDO dbEnterpriseInvite = randomPojo(EnterpriseInviteDO.class, o -> { // 等会查询到
+            o.setEnterpriseId(null);
+            o.setUserId(null);
+            o.setType(null);
+            o.setCode(null);
+            o.setCreateTime(null);
+        });
+        enterpriseInviteMapper.insert(dbEnterpriseInvite);
+        // 测试 enterpriseId 不匹配
+        enterpriseInviteMapper.insert(cloneIgnoreId(dbEnterpriseInvite, o -> o.setEnterpriseId(null)));
+        // 测试 userId 不匹配
+        enterpriseInviteMapper.insert(cloneIgnoreId(dbEnterpriseInvite, o -> o.setUserId(null)));
+        // 测试 type 不匹配
+        enterpriseInviteMapper.insert(cloneIgnoreId(dbEnterpriseInvite, o -> o.setType(null)));
+        // 测试 code 不匹配
+        enterpriseInviteMapper.insert(cloneIgnoreId(dbEnterpriseInvite, o -> o.setCode(null)));
+        // 测试 createTime 不匹配
+        enterpriseInviteMapper.insert(cloneIgnoreId(dbEnterpriseInvite, o -> o.setCreateTime(null)));
+        // 准备参数
+        EnterpriseInvitePageReqVO reqVO = new EnterpriseInvitePageReqVO();
+        reqVO.setEnterpriseId(null);
+        reqVO.setUserId(null);
+        reqVO.setType(null);
+        reqVO.setCode(null);
+        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+        // 调用
+        PageResult<EnterpriseInviteDO> pageResult = enterpriseInviteService.getEnterpriseInvitePage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbEnterpriseInvite, pageResult.getList().get(0));
+    }
+
+}

+ 3 - 1
menduner/menduner-system-biz/src/test/resources/sql/clean.sql

@@ -29,4 +29,6 @@ DELETE FROM "mde_job_cv_rel";
 
 DELETE FROM "mde_hire_job_cv_rel";
 DELETE FROM "mde_hire_commission_ratio";
-DELETE FROM "mde_user_account";
+DELETE FROM "mde_user_account";
+DELETE FROM "mde_enterprise_invite";
+DELETE FROM "mde_enterprise_invite_record";

+ 35 - 1
menduner/menduner-system-biz/src/test/resources/sql/create_tables.sql

@@ -553,4 +553,38 @@ CREATE TABLE IF NOT EXISTS "mde_user_account" (
     "deleted" bit NOT NULL DEFAULT FALSE,
     "tenant_id" bigint NOT NULL,
     PRIMARY KEY ("id")
-) COMMENT '门墩儿-用户账户表';
+) COMMENT '门墩儿-用户账户表';
+
+-- 将该建表 SQL 语句,添加到 citu-module-menduner.system-biz 模块的 test/resources/sql/create_tables.sql 文件里
+CREATE TABLE IF NOT EXISTS "mde_enterprise_invite" (
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "enterprise_id" bigint NOT NULL,
+    "user_id" bigint NOT NULL,
+    "type" varchar NOT NULL,
+    "code" varchar NOT NULL,
+    "expire_day" int NOT NULL,
+    "creator" varchar DEFAULT '',
+    "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    "updater" varchar DEFAULT '',
+    "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    "deleted" bit NOT NULL DEFAULT FALSE,
+    "tenant_id" bigint NOT NULL,
+    PRIMARY KEY ("id")
+) COMMENT '门墩儿-企业邀请码表';
+
+CREATE TABLE IF NOT EXISTS "mde_enterprise_invite_record" (
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "enterprise_id" bigint NOT NULL,
+    "user_id" bigint NOT NULL,
+    "invite_enterprise_id" bigint NOT NULL,
+    "invite_user_id" bigint NOT NULL,
+    "type" varchar NOT NULL,
+    "code" varchar NOT NULL,
+    "creator" varchar DEFAULT '',
+    "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+    "updater" varchar DEFAULT '',
+    "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    "deleted" bit NOT NULL DEFAULT FALSE,
+    "tenant_id" bigint NOT NULL,
+    PRIMARY KEY ("id")
+) COMMENT '门墩儿-企业邀请记录表';