Browse Source

1、增加人才-项目经历
2、增加人才-培训经历
3、增加热门地区接口

rayson 1 year ago
parent
commit
673a828fdf
45 changed files with 1481 additions and 25 deletions
  1. 7 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  2. 27 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/AreaController.java
  3. 23 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/vo/AreaHotReqVO.java
  4. 29 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/vo/AreaHotRespVO.java
  5. 9 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/ProjectExpController.java
  6. 39 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/vo/ProjectExpPageReqVO.java
  7. 44 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/vo/ProjectExpRespVO.java
  8. 30 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/vo/ProjectExpSaveReqVO.java
  9. 93 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/trainexp/TrainExpController.java
  10. 41 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/trainexp/vo/TrainExpPageReqVO.java
  11. 48 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/trainexp/vo/TrainExpRespVO.java
  12. 33 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/trainexp/vo/TrainExpSaveReqVO.java
  13. 7 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/area/AppAreaController.java
  14. 29 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/area/vo/AppAreaHotRespVO.java
  15. 30 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/area/vo/AppHotAreaRespVO.java
  16. 9 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/AppEnterpriseController.java
  17. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/vo/AppEnterpriseAddressRespVO.java
  18. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/vo/AppEnterpriseBusinessRespVO.java
  19. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/vo/AppEnterpriseRespVO.java
  20. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/vo/AppEnterpriseSearchReqVO.java
  21. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/vo/AppEnterpriseSimpleRespVO.java
  22. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/AppJobAdvertisedController.java
  23. 1 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedDetailRespVO.java
  24. 4 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedSimpleRespVO.java
  25. 43 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/area/AreaHotDO.java
  26. 53 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/projectexp/ProjectExpDO.java
  27. 56 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/trainexp/TrainExpDO.java
  28. 19 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/area/AreaHotMapper.java
  29. 4 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/area/AreaMapper.java
  30. 28 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/projectexp/ProjectExpMapper.java
  31. 29 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/trainexp/TrainExpMapper.java
  32. 18 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/area/AreaService.java
  33. 79 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/area/AreaServiceImpl.java
  34. 11 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/EnterpriseService.java
  35. 29 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/EnterpriseServiceImpl.java
  36. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedService.java
  37. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java
  38. 55 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/projectexp/ProjectExpService.java
  39. 74 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/projectexp/ProjectExpServiceImpl.java
  40. 55 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/trainexp/TrainExpService.java
  41. 71 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/trainexp/TrainExpServiceImpl.java
  42. 151 0
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/projectexp/ProjectExpServiceImplTest.java
  43. 149 0
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/trainexp/TrainExpServiceImplTest.java
  44. 3 1
      menduner/menduner-system-biz/src/test/resources/sql/clean.sql
  45. 32 1
      menduner/menduner-system-biz/src/test/resources/sql/create_tables.sql

+ 7 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java

@@ -21,6 +21,7 @@ public interface ErrorCodeConstants {
 
     // ========== 地区 1_100_004_000 ==========
     ErrorCode MDE_AREA_NOT_EXISTS = new ErrorCode(1_100_004_001, "地区不存在");
+    ErrorCode MDE_AREA_HOT_EXISTS = new ErrorCode(1_100_004_002, "热门地区已存在,请勿重复添加");
 
     // ========== 简历附件 1_100_005_000 ==========
     ErrorCode MDE_CV_ATTACHMENT_NOT_EXISTS = new ErrorCode(1_100_005_001, "简历附件不存在");
@@ -121,4 +122,10 @@ public interface ErrorCodeConstants {
     // ========== 门墩儿-人才-招聘职位收藏 1_200_014_000 ==========
     ErrorCode PERSON_JOB_COLLECTION_NOT_EXISTS = new ErrorCode(1_200_014_001, "招聘职位收藏不存在");
     ErrorCode PERSON_JOB_COLLECTION_EXISTS = new ErrorCode(1_200_014_002, "职位已收藏,请勿重复点击");
+
+    // ========== 门墩儿-培训经历 1_200_015_000 ==========
+    ErrorCode TRAIN_EXP_NOT_EXISTS = new ErrorCode(1_200_015_001, "培训经历不存在");
+
+    // ========== 门墩儿-项目经历 1_200_016_000 ==========
+    ErrorCode PROJECT_EXP_NOT_EXISTS = new ErrorCode(1_200_016_001, "项目经历不存在");
 }

+ 27 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/AreaController.java

@@ -6,10 +6,7 @@ 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.admin.area.vo.AreaListReqVO;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaPageReqVO;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaRespVO;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaSaveReqVO;
+import com.citu.module.menduner.system.controller.admin.area.vo.*;
 import com.citu.module.menduner.system.dal.dataobject.area.AreaDO;
 import com.citu.module.menduner.system.service.area.AreaService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -99,5 +96,31 @@ public class AreaController {
                 BeanUtils.toBean(list, AreaRespVO.class));
     }
 
+    @PostMapping("/hot/create")
+    @Operation(summary = "新增热门地区")
+    @PreAuthorize("@ss.hasPermission('menduner:system:area:create')")
+    public CommonResult<Long> createHotArea(@Valid @RequestBody AreaHotReqVO reqVO) {
+        return success(areaService.createHotArea(reqVO));
+    }
+
+
+    @DeleteMapping("/hot/remove")
+    @Operation(summary = "移除热门地区")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:area:delete')")
+    public CommonResult<Boolean> removeHotArea(@RequestParam("id") Long id) {
+        areaService.removeHotArea(id);
+        return success(true);
+    }
+
+
+    @GetMapping("/hot/list")
+    @Operation(summary = "获取热门地区列表")
+    @PreAuthorize("@ss.hasPermission('menduner:system:area:query')")
+    public CommonResult<List<AreaHotRespVO>> getAreaList() {
+        List<AreaHotRespVO> list = areaService.getHotAreaList();
+        return success(list);
+    }
+
 
 }

+ 23 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/vo/AreaHotReqVO.java

@@ -0,0 +1,23 @@
+package com.citu.module.menduner.system.controller.admin.area.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 热门地区 Request VO")
+@Data
+public class AreaHotReqVO {
+
+    @Schema(description = "id", example = "28186")
+    private Long id;
+
+    @Schema(description = "区域id", example = "1231")
+    private Long areaId;
+
+    @Schema(description = "顺序", example = "1")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "2")
+    private String remark;
+
+
+}

+ 29 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/area/vo/AreaHotRespVO.java

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.system.controller.admin.area.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 热门地区 Response VO")
+@Data
+public class AreaHotRespVO {
+
+    @Schema(description = "id", example = "28186")
+    private Long id;
+
+    @Schema(description = "区域id", example = "1231")
+    private Long areaId;
+
+    @Schema(description = "区域名称", example = "芋艿")
+    private String name;
+
+    @Schema(description = "区域类型", example = "2")
+    private Integer type;
+
+    @Schema(description = "顺序", example = "1")
+    private Integer sort;
+
+    @Schema(description = "备注", example = "2")
+    private String remark;
+
+
+}

+ 9 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/ProjectExpController.java

@@ -0,0 +1,9 @@
+package com.citu.module.menduner.system.controller.admin.projectexp;
+
+/**
+ * @author rayson
+ * @description ProjectExpController
+ * @create 2024/5/21 下午2:49
+ **/
+public class ProjectExpController {
+}

+ 39 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/vo/ProjectExpPageReqVO.java

@@ -0,0 +1,39 @@
+package com.citu.module.menduner.system.controller.admin.projectexp.vo;
+
+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.LocalDate;
+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 ProjectExpPageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "20881")
+    private Long userId;
+
+    @Schema(description = "项目名称", example = "王五")
+    private String name;
+
+    @Schema(description = "项目开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] startTime;
+
+    @Schema(description = "项目结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] endTime;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 44 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/vo/ProjectExpRespVO.java

@@ -0,0 +1,44 @@
+package com.citu.module.menduner.system.controller.admin.projectexp.vo;
+
+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.LocalDate;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 门墩儿-项目经历 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ProjectExpRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6114")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "用户id", example = "20881")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @Schema(description = "项目名称", example = "王五")
+    @ExcelProperty("项目名称")
+    private String name;
+
+    @Schema(description = "项目开始时间")
+    @ExcelProperty("项目开始时间")
+    private LocalDate startTime;
+
+    @Schema(description = "项目结束时间")
+    @ExcelProperty("项目结束时间")
+    private LocalDate endTime;
+
+    @Schema(description = "描述内容")
+    @ExcelProperty("描述内容")
+    private String content;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 30 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/projectexp/vo/ProjectExpSaveReqVO.java

@@ -0,0 +1,30 @@
+package com.citu.module.menduner.system.controller.admin.projectexp.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Schema(description = "管理后台 - 门墩儿-项目经历新增/修改 Request VO")
+@Data
+public class ProjectExpSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6114")
+    private Long id;
+
+    @Schema(description = "用户id", example = "20881")
+    private Long userId;
+
+    @Schema(description = "项目名称", example = "王五")
+    private String name;
+
+    @Schema(description = "项目开始时间")
+    private LocalDate startTime;
+
+    @Schema(description = "项目结束时间")
+    private LocalDate endTime;
+
+    @Schema(description = "描述内容")
+    private String content;
+
+}

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

@@ -0,0 +1,93 @@
+package com.citu.module.menduner.system.controller.admin.trainexp;
+
+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.admin.trainexp.vo.TrainExpPageReqVO;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpRespVO;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.trainexp.TrainExpDO;
+import com.citu.module.menduner.system.service.trainexp.TrainExpService;
+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/train-exp")
+@Validated
+public class TrainExpController {
+
+    @Resource
+    private TrainExpService trainExpService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建门墩儿-培训经历")
+    @PreAuthorize("@ss.hasPermission('menduner:system:train-exp:create')")
+    public CommonResult<Long> createTrainExp(@Valid @RequestBody TrainExpSaveReqVO createReqVO) {
+        return success(trainExpService.createTrainExp(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新门墩儿-培训经历")
+    @PreAuthorize("@ss.hasPermission('menduner:system:train-exp:update')")
+    public CommonResult<Boolean> updateTrainExp(@Valid @RequestBody TrainExpSaveReqVO updateReqVO) {
+        trainExpService.updateTrainExp(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除门墩儿-培训经历")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:train-exp:delete')")
+    public CommonResult<Boolean> deleteTrainExp(@RequestParam("id") Long id) {
+        trainExpService.deleteTrainExp(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得门墩儿-培训经历")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:train-exp:query')")
+    public CommonResult<TrainExpRespVO> getTrainExp(@RequestParam("id") Long id) {
+        TrainExpDO trainExp = trainExpService.getTrainExp(id);
+        return success(BeanUtils.toBean(trainExp, TrainExpRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得门墩儿-培训经历分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:train-exp:query')")
+    public CommonResult<PageResult<TrainExpRespVO>> getTrainExpPage(@Valid TrainExpPageReqVO pageReqVO) {
+        PageResult<TrainExpDO> pageResult = trainExpService.getTrainExpPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, TrainExpRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出门墩儿-培训经历 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:train-exp:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTrainExpExcel(@Valid TrainExpPageReqVO pageReqVO,
+                                    HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<TrainExpDO> list = trainExpService.getTrainExpPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "门墩儿-培训经历.xls", "数据", TrainExpRespVO.class,
+                BeanUtils.toBean(list, TrainExpRespVO.class));
+    }
+
+}

+ 41 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/trainexp/vo/TrainExpPageReqVO.java

@@ -0,0 +1,41 @@
+package com.citu.module.menduner.system.controller.admin.trainexp.vo;
+
+import lombok.*;
+
+import java.time.LocalDate;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.citu.framework.common.pojo.PageParam;
+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 TrainExpPageReqVO extends PageParam {
+
+    @Schema(description = "用户id", example = "2483")
+    private Long userId;
+
+    @Schema(description = "培训开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] startTime;
+
+    @Schema(description = "培训结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] endTime;
+
+    @Schema(description = "培训机构名称", example = "芋艿")
+    private String orgName;
+
+    @Schema(description = "培训课程")
+    private String course;
+
+    @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/admin/trainexp/vo/TrainExpRespVO.java

@@ -0,0 +1,48 @@
+package com.citu.module.menduner.system.controller.admin.trainexp.vo;
+
+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.LocalDate;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 门墩儿-培训经历 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class TrainExpRespVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27649")
+    @ExcelProperty("id")
+    private Long id;
+
+    @Schema(description = "用户id", example = "2483")
+    @ExcelProperty("用户id")
+    private Long userId;
+
+    @Schema(description = "培训开始时间")
+    @ExcelProperty("培训开始时间")
+    private LocalDate startTime;
+
+    @Schema(description = "培训结束时间")
+    @ExcelProperty("培训结束时间")
+    private LocalDate endTime;
+
+    @Schema(description = "培训机构名称", example = "芋艿")
+    @ExcelProperty("培训机构名称")
+    private String orgName;
+
+    @Schema(description = "培训课程")
+    @ExcelProperty("培训课程")
+    private String course;
+
+    @Schema(description = "描述说明")
+    @ExcelProperty("描述说明")
+    private String content;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 33 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/trainexp/vo/TrainExpSaveReqVO.java

@@ -0,0 +1,33 @@
+package com.citu.module.menduner.system.controller.admin.trainexp.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Schema(description = "管理后台 - 门墩儿-培训经历新增/修改 Request VO")
+@Data
+public class TrainExpSaveReqVO {
+
+    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27649")
+    private Long id;
+
+    @Schema(description = "用户id", example = "2483")
+    private Long userId;
+
+    @Schema(description = "培训开始时间")
+    private LocalDate startTime;
+
+    @Schema(description = "培训结束时间")
+    private LocalDate endTime;
+
+    @Schema(description = "培训机构名称", example = "芋艿")
+    private String orgName;
+
+    @Schema(description = "培训课程")
+    private String course;
+
+    @Schema(description = "描述说明")
+    private String content;
+
+}

+ 7 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/area/AppAreaController.java

@@ -6,6 +6,7 @@ import com.citu.module.menduner.system.controller.admin.area.vo.AreaListReqVO;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaChildrenRespVO;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaListReqVO;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaSimpleRespVO;
+import com.citu.module.menduner.system.controller.app.area.vo.AppHotAreaRespVO;
 import com.citu.module.menduner.system.service.area.AreaService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -53,4 +54,10 @@ public class AppAreaController {
         return success(list);
     }
 
+    @GetMapping("/get/hot")
+    @Operation(summary = "获取热门地区")
+    public CommonResult<List<AppHotAreaRespVO>> getHotArea() {
+        List<AppHotAreaRespVO> list = areaService.getHotArea();
+        return success(list);
+    }
 }

+ 29 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/area/vo/AppAreaHotRespVO.java

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.system.controller.app.area.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "menduner - 热门地区 Response VO")
+@Data
+public class AppAreaHotRespVO {
+
+    @Schema(description = "id", example = "28186")
+    private Long id;
+
+    @Schema(description = "区域id", example = "1231")
+    private Long areaId;
+
+    @Schema(description = "区域名称", example = "芋艿")
+    private String name;
+
+    @Schema(description = "区域类型", example = "2")
+    private Integer type;
+
+    @Schema(description = "备注", example = "2")
+    private String remark;
+
+    @Schema(description = "顺序", example = "1")
+    private Integer sort;
+
+
+}

+ 30 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/area/vo/AppHotAreaRespVO.java

@@ -0,0 +1,30 @@
+package com.citu.module.menduner.system.controller.app.area.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "menduner -  热门地区列表 Response VO")
+@Data
+public class AppHotAreaRespVO {
+
+    @Schema(description = "id", example = "28186")
+    private Long id;
+
+    @Schema(description = "名字", example = "芋艿")
+    private String name;
+
+    @Schema(description = "区域类型", example = "2")
+    private Integer type;
+
+    @Schema(description = "顺序", example = "1")
+    private Integer sort;
+
+    @Schema(description = "父级编号", example = "6080")
+    private Long parentId;
+
+    @Schema(description = "备注", example = "2")
+    private String remark;
+
+
+
+}

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

@@ -1,8 +1,11 @@
 package com.citu.module.menduner.system.controller.app.enterprise;
 
 import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseClickReqVO;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseDetailRespVO;
+import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSearchReqVO;
+import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
 import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -39,5 +42,11 @@ public class AppEnterpriseController {
         return success(enterpriseService.getEnterpriseDetail(id));
     }
 
+    @GetMapping("/search")
+    @Operation(summary = "搜索企业")
+    public CommonResult<PageResult<AppEnterpriseSimpleRespVO>> search(@Valid AppEnterpriseSearchReqVO reqVO) {
+        return success(enterpriseService.search(reqVO));
+    }
+
 
 }

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

@@ -35,4 +35,7 @@ public class AppEnterpriseAddressRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
 }

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

@@ -63,4 +63,7 @@ public class AppEnterpriseBusinessRespVO {
     @Schema(description = "创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
 }

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

@@ -71,4 +71,7 @@ public class AppEnterpriseRespVO {
     @Schema(description = "创建时间")
     private LocalDateTime createTime;
 
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
 }

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/enterprise/vo/AppEnterpriseSearchReqVO.java

@@ -6,10 +6,10 @@ import lombok.Data;
 import java.util.List;
 
 @Data
-@Schema(description = "menduner - 首页-企业搜索 Response VO")
+@Schema(description = "menduner - 首页-企业搜索 Request VO")
 public class AppEnterpriseSearchReqVO {
 
-    @Schema(description = "企业称", example = "xx科技有限公司")
+    @Schema(description = "企业称", example = "xx科技有限公司")
     private String name;
 
     @Schema(description = "公司地点", example = "[]")

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

@@ -3,6 +3,7 @@ package com.citu.module.menduner.system.controller.app.enterprise.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 @Data
@@ -33,5 +34,7 @@ public class AppEnterpriseSimpleRespVO {
     @Schema(description = "公司福利", example = "[]")
     private List<String> welfareList;
 
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
 
 }

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

@@ -74,10 +74,10 @@ public class AppJobAdvertisedController {
         return success(respVO);
     }
 
-    @GetMapping("/get/search")
+    @GetMapping("/search")
     @Operation(summary = "根据条件搜索招聘职位")
-    public CommonResult<PageResult<AppJobAdvertisedSearchRespVO>> getAcquaintedJobAdvertised(@Valid AppJobAdvertisedSearchPageReqVO pageReqVO) {
-        PageResult<AppJobAdvertisedSearchRespVO> respVO = jobAdvertisedService.getAcquaintedJobAdvertised(pageReqVO);
+    public CommonResult<PageResult<AppJobAdvertisedSearchRespVO>> search(@Valid AppJobAdvertisedSearchPageReqVO pageReqVO) {
+        PageResult<AppJobAdvertisedSearchRespVO> respVO = jobAdvertisedService.search(pageReqVO);
         return success(respVO);
     }
 

+ 1 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedDetailRespVO.java

@@ -93,4 +93,5 @@ public class AppJobAdvertisedDetailRespVO {
     private AppEnterpriseUserContactRespVO contact;
 
 
+
 }

+ 4 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/job/vo/AppJobAdvertisedSimpleRespVO.java

@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 @Schema(description = "menduner - 首页-职位简易 Response VO")
@@ -39,4 +40,7 @@ public class AppJobAdvertisedSimpleRespVO {
 
     @Schema(description = "职位标签", example = "[xx,xx]")
     private List<String> tagList;
+
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
 }

+ 43 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/area/AreaHotDO.java

@@ -0,0 +1,43 @@
+package com.citu.module.menduner.system.dal.dataobject.area;
+
+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 io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * 热门地区 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_area_hot")
+@KeySequence("mde_area_hot_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AreaHotDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 区域id
+     */
+    private Long areaId;
+    /**
+     * 顺序
+     */
+    private Integer sort;
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 53 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/projectexp/ProjectExpDO.java

@@ -0,0 +1,53 @@
+package com.citu.module.menduner.system.dal.dataobject.projectexp;
+
+import lombok.*;
+
+import java.time.LocalDate;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.citu.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 门墩儿-项目经历 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_project_exp")
+@KeySequence("mde_project_exp_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectExpDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 项目名称
+     */
+    private String name;
+    /**
+     * 项目开始时间
+     */
+    private LocalDate startTime;
+    /**
+     * 项目结束时间
+     */
+    private LocalDate endTime;
+    /**
+     * 描述内容
+     */
+    private String content;
+
+}

+ 56 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/trainexp/TrainExpDO.java

@@ -0,0 +1,56 @@
+package com.citu.module.menduner.system.dal.dataobject.trainexp;
+
+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.*;
+
+import java.time.LocalDate;
+
+/**
+ * 门墩儿-培训经历 DO
+ *
+ * @author Rayson
+ */
+@TableName("mde_train_exp")
+@KeySequence("mde_train_exp_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TrainExpDO extends BaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 培训开始时间
+     */
+    private LocalDate startTime;
+    /**
+     * 培训结束时间
+     */
+    private LocalDate endTime;
+    /**
+     * 培训机构名称
+     */
+    private String orgName;
+    /**
+     * 培训课程
+     */
+    private String course;
+    /**
+     * 描述说明
+     */
+    private String content;
+
+}

+ 19 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/area/AreaHotMapper.java

@@ -0,0 +1,19 @@
+package com.citu.module.menduner.system.dal.mysql.area;
+
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.module.menduner.system.dal.dataobject.area.AreaHotDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 热门地区 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface AreaHotMapper extends BaseMapperX<AreaHotDO> {
+
+    default AreaHotDO selectByAreaId(Long areaId) {
+        return selectOne(AreaHotDO::getAreaId, areaId);
+    }
+
+}

+ 4 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/area/AreaMapper.java

@@ -49,8 +49,11 @@ public interface AreaMapper extends BaseMapperX<AreaDO> {
                 .orderByAsc(AreaDO::getId));
 
     }
-
     default List<AreaDO> selectListByParentId(Collection<Long> parentIds) {
         return selectList(AreaDO::getParentId, parentIds);
     }
+
+    default List<AreaDO> selectListByIdList(List<Long> ids) {
+        return selectList(AreaDO::getId, ids);
+    }
 }

+ 28 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/projectexp/ProjectExpMapper.java

@@ -0,0 +1,28 @@
+package com.citu.module.menduner.system.dal.mysql.projectexp;
+
+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.admin.projectexp.vo.ProjectExpPageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.projectexp.ProjectExpDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 门墩儿-项目经历 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface ProjectExpMapper extends BaseMapperX<ProjectExpDO> {
+
+    default PageResult<ProjectExpDO> selectPage(ProjectExpPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ProjectExpDO>()
+                .eqIfPresent(ProjectExpDO::getUserId, reqVO.getUserId())
+                .likeIfPresent(ProjectExpDO::getName, reqVO.getName())
+                .betweenIfPresent(ProjectExpDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(ProjectExpDO::getEndTime, reqVO.getEndTime())
+                .betweenIfPresent(ProjectExpDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ProjectExpDO::getId));
+    }
+
+}

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

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.system.dal.mysql.trainexp;
+
+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.admin.trainexp.vo.TrainExpPageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.trainexp.TrainExpDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 门墩儿-培训经历 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface TrainExpMapper extends BaseMapperX<TrainExpDO> {
+
+    default PageResult<TrainExpDO> selectPage(TrainExpPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<TrainExpDO>()
+                .eqIfPresent(TrainExpDO::getUserId, reqVO.getUserId())
+                .betweenIfPresent(TrainExpDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(TrainExpDO::getEndTime, reqVO.getEndTime())
+                .likeIfPresent(TrainExpDO::getOrgName, reqVO.getOrgName())
+                .likeIfPresent(TrainExpDO::getCourse, reqVO.getCourse())
+                .betweenIfPresent(TrainExpDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(TrainExpDO::getId));
+    }
+
+}

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

@@ -1,12 +1,11 @@
 package com.citu.module.menduner.system.service.area;
 
 import com.citu.framework.common.pojo.PageResult;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaListReqVO;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaPageReqVO;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaSaveReqVO;
+import com.citu.module.menduner.system.controller.admin.area.vo.*;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaChildrenRespVO;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaListReqVO;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaSimpleRespVO;
+import com.citu.module.menduner.system.controller.app.area.vo.AppHotAreaRespVO;
 import com.citu.module.menduner.system.dal.dataobject.area.AreaDO;
 
 import javax.validation.Valid;
@@ -92,9 +91,23 @@ public interface AreaService {
      **/
     List<AppAreaSimpleRespVO> getAreaList(AppAreaListReqVO reqVO);
 
+    /**
+     * 获取热门城市列表
+     **/
+    List<AreaHotRespVO> getHotAreaList();
+
+    /**
+     * 新增热门城市
+     **/
+    Long createHotArea(AreaHotReqVO reqVO);
+
+    /**
+     * 根据id移除热门城市
+     **/
+    void removeHotArea(Long id);
+
     /**
      * 获取热门城市
-     *
      **/
-    List<AppAreaSimpleRespVO> getHotArea();
+    List<AppHotAreaRespVO> getHotArea();
 }

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

@@ -3,19 +3,19 @@ package com.citu.module.menduner.system.service.area;
 import cn.hutool.core.collection.CollUtil;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaListReqVO;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaPageReqVO;
-import com.citu.module.menduner.system.controller.admin.area.vo.AreaSaveReqVO;
+import com.citu.module.menduner.system.controller.admin.area.vo.*;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaChildrenRespVO;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaListReqVO;
 import com.citu.module.menduner.system.controller.app.area.vo.AppAreaSimpleRespVO;
+import com.citu.module.menduner.system.controller.app.area.vo.AppHotAreaRespVO;
 import com.citu.module.menduner.system.convert.AreaConvert;
 import com.citu.module.menduner.system.dal.dataobject.area.AreaDO;
+import com.citu.module.menduner.system.dal.dataobject.area.AreaHotDO;
+import com.citu.module.menduner.system.dal.mysql.area.AreaHotMapper;
 import com.citu.module.menduner.system.dal.mysql.area.AreaMapper;
 import com.citu.module.menduner.system.dal.redis.RedisKeyConstants;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -25,6 +25,7 @@ import java.util.stream.Collectors;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.framework.common.util.collection.CollectionUtils.convertSet;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_AREA_HOT_EXISTS;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_AREA_NOT_EXISTS;
 
 /**
@@ -39,6 +40,9 @@ public class AreaServiceImpl implements AreaService {
     @Resource
     private AreaMapper areaMapper;
 
+    @Resource
+    private AreaHotMapper hotMapper;
+
     @Override
     public Long createArea(AreaSaveReqVO createReqVO) {
         // 插入
@@ -158,7 +162,76 @@ public class AreaServiceImpl implements AreaService {
     }
 
     @Override
-    public List<AppAreaSimpleRespVO> getHotArea() {
-        return Collections.emptyList();
+    public List<AppHotAreaRespVO> getHotArea() {
+        List<AreaHotDO> hotList = hotMapper.selectList();
+        if (CollUtil.isEmpty(hotList)) {
+            return null;
+        }
+        List<AreaDO> areaList = areaMapper.selectListByIdList(hotList.stream().map(AreaHotDO::getAreaId).collect(Collectors.toList()));
+        if (CollUtil.isEmpty(areaList)) {
+            return null;
+        }
+        List<AppHotAreaRespVO> list = new ArrayList<>();
+        areaList.forEach(area -> {
+            AppHotAreaRespVO respVO = new AppHotAreaRespVO();
+            respVO.setId(area.getId());
+            respVO.setName(area.getName());
+            respVO.setType(area.getType());
+            respVO.setParentId(area.getParentId());
+            AreaHotDO hot = hotList.stream().filter(c -> c.getAreaId().equals(area.getId())).findFirst().orElse(null);
+            if (null != hot) {
+                respVO.setRemark(hot.getRemark());
+                respVO.setSort(hot.getSort());
+            }
+            list.add(respVO);
+        });
+        Collections.sort(list, Comparator.comparingInt(p -> p.getSort()));
+        return list;
+    }
+
+    @Override
+    public List<AreaHotRespVO> getHotAreaList() {
+        List<AreaHotDO> hotList = hotMapper.selectList();
+        if (CollUtil.isEmpty(hotList)) {
+            return null;
+        }
+        List<AreaDO> areaList = areaMapper.selectListByIdList(hotList.stream().map(AreaHotDO::getAreaId).collect(Collectors.toList()));
+        if (CollUtil.isEmpty(areaList)) {
+            return null;
+        }
+        List<AreaHotRespVO> list = new ArrayList<>();
+        areaList.forEach(area -> {
+            AreaHotRespVO respVO = new AreaHotRespVO();
+            respVO.setId(area.getId());
+            respVO.setAreaId(area.getId());
+            respVO.setName(area.getName());
+            respVO.setType(area.getType());
+            AreaHotDO hot = hotList.stream().filter(c -> c.getAreaId().equals(area.getId())).findFirst().orElse(null);
+            if (null != hot) {
+                respVO.setRemark(hot.getRemark());
+            }
+            list.add(respVO);
+
+        });
+        Collections.sort(list, Comparator.comparingInt(p -> p.getSort()));
+        return list;
+    }
+
+    @Override
+    public Long createHotArea(AreaHotReqVO reqVO) {
+        AreaHotDO hot = hotMapper.selectByAreaId(reqVO.getAreaId());
+        if (null != hot) {
+            throw exception(MDE_AREA_HOT_EXISTS);
+        }
+        // 插入
+        AreaHotDO hotDO = BeanUtils.toBean(reqVO, AreaHotDO.class);
+        hotMapper.insert(hotDO);
+        // 返回
+        return hotDO.getId();
+    }
+
+    @Override
+    public void removeHotArea(Long id) {
+        hotMapper.deleteById(id);
     }
 }

+ 11 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/EnterpriseService.java

@@ -6,6 +6,8 @@ import com.citu.module.menduner.system.controller.admin.enterprise.vo.Enterprise
 import com.citu.module.menduner.system.controller.admin.enterprise.vo.EnterpriseSaveReqVO;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseClickReqVO;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseDetailRespVO;
+import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSearchReqVO;
+import com.citu.module.menduner.system.controller.app.enterprise.vo.AppEnterpriseSimpleRespVO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 
 import javax.validation.Valid;
@@ -89,8 +91,17 @@ public interface EnterpriseService {
 
     /**
      * 根据企业id查询企业详情
+     *
      * @param id
      * @return 企业详情
      **/
     AppEnterpriseDetailRespVO getEnterpriseDetail(Long id);
+
+    /**
+     * 根据查询条件分页搜索
+     *
+     * @param reqVO 查询条件
+     * @return 分页简易企业对象
+     **/
+    PageResult<AppEnterpriseSimpleRespVO> search(AppEnterpriseSearchReqVO reqVO);
 }

+ 29 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/EnterpriseServiceImpl.java

@@ -10,6 +10,7 @@ import com.citu.module.menduner.system.controller.admin.enterprise.vo.Enterprise
 import com.citu.module.menduner.system.controller.admin.enterprise.vo.EnterprisePageReqVO;
 import com.citu.module.menduner.system.controller.admin.enterprise.vo.EnterpriseSaveReqVO;
 import com.citu.module.menduner.system.controller.app.enterprise.vo.*;
+import com.citu.module.menduner.system.controller.app.job.vo.AppEnterpriseJobHomeRespVO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseMapper;
 import com.citu.module.menduner.system.dal.redis.RedisKeyConstants;
@@ -187,4 +188,32 @@ public class EnterpriseServiceImpl implements EnterpriseService {
         respVO.setJobAdvertisedCount(67);
         return respVO;
     }
+
+    @Override
+    public PageResult<AppEnterpriseSimpleRespVO> search(AppEnterpriseSearchReqVO reqVO) {
+        PageResult<AppEnterpriseSimpleRespVO> result=new PageResult<>();
+        List<AppEnterpriseSimpleRespVO> list =new ArrayList<>();
+        AppEnterpriseSimpleRespVO respVO = new AppEnterpriseSimpleRespVO();
+        respVO.setId(1L);
+        respVO.setAnotherName("门墩儿科技");
+        respVO.setIndustryId(1L);
+        respVO.setScale(0);
+        respVO.setFinancingStatus(0);
+        respVO.setLogoUrl("https://www.menduner.com/static/img/loginlogo2.7924c12.png");
+
+        AppEnterpriseSimpleRespVO respVO2 = new AppEnterpriseSimpleRespVO();
+        respVO2.setId(2L);
+        respVO2.setAnotherName("门墩儿科技222");
+        respVO2.setIndustryId(2L);
+        respVO2.setScale(1);
+        respVO2.setFinancingStatus(1);
+        respVO2.setLogoUrl("https://www.menduner.com/static/img/loginlogo2.7924c12.png");
+        list.add(respVO);
+        list.add(respVO2);
+
+        result.setList(list);
+        result.setTotal(2L);
+
+        return result;
+    }
 }

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedService.java

@@ -108,7 +108,7 @@ public interface JobAdvertisedService {
      * 根据条件搜索职位
      * @return 门墩儿-招聘职位列表
      **/
-    PageResult<AppJobAdvertisedSearchRespVO> getAcquaintedJobAdvertised(AppJobAdvertisedSearchPageReqVO reqVO);
+    PageResult<AppJobAdvertisedSearchRespVO> search(AppJobAdvertisedSearchPageReqVO reqVO);
 
     /**
      * 根据企业id统计职位类型的数量

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

@@ -447,7 +447,7 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     }
 
     @Override
-    public PageResult<AppJobAdvertisedSearchRespVO> getAcquaintedJobAdvertised(AppJobAdvertisedSearchPageReqVO reqVO) {
+    public PageResult<AppJobAdvertisedSearchRespVO> search(AppJobAdvertisedSearchPageReqVO reqVO) {
 
         PageResult<AppJobAdvertisedSearchRespVO> result =new PageResult<>();
         List<AppJobAdvertisedSearchRespVO> list =new ArrayList<>();

+ 55 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/projectexp/ProjectExpService.java

@@ -0,0 +1,55 @@
+package com.citu.module.menduner.system.service.projectexp;
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.admin.projectexp.vo.ProjectExpPageReqVO;
+import com.citu.module.menduner.system.controller.admin.projectexp.vo.ProjectExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.projectexp.ProjectExpDO;
+
+import javax.validation.Valid;
+
+/**
+ * 门墩儿-项目经历 Service 接口
+ *
+ * @author Rayson
+ */
+public interface ProjectExpService {
+
+    /**
+     * 创建门墩儿-项目经历
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createProjectExp(@Valid ProjectExpSaveReqVO createReqVO);
+
+    /**
+     * 更新门墩儿-项目经历
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateProjectExp(@Valid ProjectExpSaveReqVO updateReqVO);
+
+    /**
+     * 删除门墩儿-项目经历
+     *
+     * @param id 编号
+     */
+    void deleteProjectExp(Long id);
+
+    /**
+     * 获得门墩儿-项目经历
+     *
+     * @param id 编号
+     * @return 门墩儿-项目经历
+     */
+    ProjectExpDO getProjectExp(Long id);
+
+    /**
+     * 获得门墩儿-项目经历分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 门墩儿-项目经历分页
+     */
+    PageResult<ProjectExpDO> getProjectExpPage(ProjectExpPageReqVO pageReqVO);
+
+}

+ 74 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/projectexp/ProjectExpServiceImpl.java

@@ -0,0 +1,74 @@
+package com.citu.module.menduner.system.service.projectexp;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.citu.module.menduner.system.controller.admin.projectexp.vo.*;
+import com.citu.module.menduner.system.dal.dataobject.projectexp.ProjectExpDO;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.pojo.PageParam;
+import com.citu.framework.common.util.object.BeanUtils;
+
+import com.citu.module.menduner.system.dal.mysql.projectexp.ProjectExpMapper;
+
+import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
+
+/**
+ * 门墩儿-项目经历 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class ProjectExpServiceImpl implements ProjectExpService {
+
+    @Resource
+    private ProjectExpMapper projectExpMapper;
+
+    @Override
+    public Long createProjectExp(ProjectExpSaveReqVO createReqVO) {
+        // 插入
+        ProjectExpDO projectExp = BeanUtils.toBean(createReqVO, ProjectExpDO.class);
+        projectExpMapper.insert(projectExp);
+        // 返回
+        return projectExp.getId();
+    }
+
+    @Override
+    public void updateProjectExp(ProjectExpSaveReqVO updateReqVO) {
+        // 校验存在
+        validateProjectExpExists(updateReqVO.getId());
+        // 更新
+        ProjectExpDO updateObj = BeanUtils.toBean(updateReqVO, ProjectExpDO.class);
+        projectExpMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteProjectExp(Long id) {
+        // 校验存在
+        validateProjectExpExists(id);
+        // 删除
+        projectExpMapper.deleteById(id);
+    }
+
+    private void validateProjectExpExists(Long id) {
+        if (projectExpMapper.selectById(id) == null) {
+            throw exception(PROJECT_EXP_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public ProjectExpDO getProjectExp(Long id) {
+        return projectExpMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ProjectExpDO> getProjectExpPage(ProjectExpPageReqVO pageReqVO) {
+        return projectExpMapper.selectPage(pageReqVO);
+    }
+
+}

+ 55 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/trainexp/TrainExpService.java

@@ -0,0 +1,55 @@
+package com.citu.module.menduner.system.service.trainexp;
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpPageReqVO;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.trainexp.TrainExpDO;
+
+import javax.validation.Valid;
+
+/**
+ * 门墩儿-培训经历 Service 接口
+ *
+ * @author Rayson
+ */
+public interface TrainExpService {
+
+    /**
+     * 创建门墩儿-培训经历
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createTrainExp(@Valid TrainExpSaveReqVO createReqVO);
+
+    /**
+     * 更新门墩儿-培训经历
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateTrainExp(@Valid TrainExpSaveReqVO updateReqVO);
+
+    /**
+     * 删除门墩儿-培训经历
+     *
+     * @param id 编号
+     */
+    void deleteTrainExp(Long id);
+
+    /**
+     * 获得门墩儿-培训经历
+     *
+     * @param id 编号
+     * @return 门墩儿-培训经历
+     */
+    TrainExpDO getTrainExp(Long id);
+
+    /**
+     * 获得门墩儿-培训经历分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 门墩儿-培训经历分页
+     */
+    PageResult<TrainExpDO> getTrainExpPage(TrainExpPageReqVO pageReqVO);
+
+}

+ 71 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/trainexp/TrainExpServiceImpl.java

@@ -0,0 +1,71 @@
+package com.citu.module.menduner.system.service.trainexp;
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpPageReqVO;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.trainexp.TrainExpDO;
+import com.citu.module.menduner.system.dal.mysql.trainexp.TrainExpMapper;
+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.TRAIN_EXP_NOT_EXISTS;
+
+/**
+ * 门墩儿-培训经历 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class TrainExpServiceImpl implements TrainExpService {
+
+    @Resource
+    private TrainExpMapper trainExpMapper;
+
+    @Override
+    public Long createTrainExp(TrainExpSaveReqVO createReqVO) {
+        // 插入
+        TrainExpDO trainExp = BeanUtils.toBean(createReqVO, TrainExpDO.class);
+        trainExpMapper.insert(trainExp);
+        // 返回
+        return trainExp.getId();
+    }
+
+    @Override
+    public void updateTrainExp(TrainExpSaveReqVO updateReqVO) {
+        // 校验存在
+        validateTrainExpExists(updateReqVO.getId());
+        // 更新
+        TrainExpDO updateObj = BeanUtils.toBean(updateReqVO, TrainExpDO.class);
+        trainExpMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteTrainExp(Long id) {
+        // 校验存在
+        validateTrainExpExists(id);
+        // 删除
+        trainExpMapper.deleteById(id);
+    }
+
+    private void validateTrainExpExists(Long id) {
+        if (trainExpMapper.selectById(id) == null) {
+            throw exception(TRAIN_EXP_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public TrainExpDO getTrainExp(Long id) {
+        return trainExpMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<TrainExpDO> getTrainExpPage(TrainExpPageReqVO pageReqVO) {
+        return trainExpMapper.selectPage(pageReqVO);
+    }
+
+}

+ 151 - 0
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/projectexp/ProjectExpServiceImplTest.java

@@ -0,0 +1,151 @@
+package com.citu.module.menduner.system.service.projectexp;
+
+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.controller.admin.projectexp.vo.*;
+import com.citu.module.menduner.system.dal.dataobject.projectexp.ProjectExpDO;
+import com.citu.module.menduner.system.dal.mysql.projectexp.ProjectExpMapper;
+import com.citu.framework.common.pojo.PageResult;
+
+import javax.annotation.Resource;
+import org.springframework.context.annotation.Import;
+
+import java.time.LocalDate;
+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 ProjectExpServiceImpl} 的单元测试类
+ *
+ * @author Rayson
+ */
+@Import(ProjectExpServiceImpl.class)
+public class ProjectExpServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private ProjectExpServiceImpl projectExpService;
+
+    @Resource
+    private ProjectExpMapper projectExpMapper;
+
+    @Test
+    public void testCreateProjectExp_success() {
+        // 准备参数
+        ProjectExpSaveReqVO createReqVO = randomPojo(ProjectExpSaveReqVO.class).setId(null);
+
+        // 调用
+        Long projectExpId = projectExpService.createProjectExp(createReqVO);
+        // 断言
+        assertNotNull(projectExpId);
+        // 校验记录的属性是否正确
+        ProjectExpDO projectExp = projectExpMapper.selectById(projectExpId);
+        assertPojoEquals(createReqVO, projectExp, "id");
+    }
+
+    @Test
+    public void testUpdateProjectExp_success() {
+        // mock 数据
+        ProjectExpDO dbProjectExp = randomPojo(ProjectExpDO.class);
+        projectExpMapper.insert(dbProjectExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        ProjectExpSaveReqVO updateReqVO = randomPojo(ProjectExpSaveReqVO.class, o -> {
+            o.setId(dbProjectExp.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        projectExpService.updateProjectExp(updateReqVO);
+        // 校验是否更新正确
+        ProjectExpDO projectExp = projectExpMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, projectExp);
+    }
+
+    @Test
+    public void testUpdateProjectExp_notExists() {
+        // 准备参数
+        ProjectExpSaveReqVO updateReqVO = randomPojo(ProjectExpSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> projectExpService.updateProjectExp(updateReqVO), PROJECT_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteProjectExp_success() {
+        // mock 数据
+        ProjectExpDO dbProjectExp = randomPojo(ProjectExpDO.class);
+        projectExpMapper.insert(dbProjectExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbProjectExp.getId();
+
+        // 调用
+        projectExpService.deleteProjectExp(id);
+        // 校验数据不存在了
+        assertNull(projectExpMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteProjectExp_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> projectExpService.deleteProjectExp(id), PROJECT_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetProjectExpPage() {
+        // mock 数据
+        ProjectExpDO dbProjectExp = randomPojo(ProjectExpDO.class, o -> { // 等会查询到
+            o.setUserId(null);
+            o.setName(null);
+            o.setStartTime(null);
+            o.setEndTime(null);
+            o.setCreateTime(null);
+        });
+        projectExpMapper.insert(dbProjectExp);
+        // 测试 userId 不匹配
+        projectExpMapper.insert(cloneIgnoreId(dbProjectExp, o -> o.setUserId(null)));
+        // 测试 name 不匹配
+        projectExpMapper.insert(cloneIgnoreId(dbProjectExp, o -> o.setName(null)));
+        // 测试 startTime 不匹配
+        projectExpMapper.insert(cloneIgnoreId(dbProjectExp, o -> o.setStartTime(null)));
+        // 测试 endTime 不匹配
+        projectExpMapper.insert(cloneIgnoreId(dbProjectExp, o -> o.setEndTime(null)));
+        // 测试 createTime 不匹配
+        projectExpMapper.insert(cloneIgnoreId(dbProjectExp, o -> o.setCreateTime(null)));
+        // 准备参数
+        ProjectExpPageReqVO reqVO = new ProjectExpPageReqVO();
+        reqVO.setUserId(null);
+        reqVO.setName(null);
+        reqVO.setStartTime(buildBetweenDate(2023, 2, 1, 2023, 2, 28));
+        reqVO.setEndTime(buildBetweenDate(2023, 2, 1, 2023, 2, 28));
+        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+        // 调用
+        PageResult<ProjectExpDO> pageResult = projectExpService.getProjectExpPage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbProjectExp, pageResult.getList().get(0));
+    }
+    public static LocalDate[] buildBetweenDate(int year1, int mouth1, int day1,
+                                               int year2, int mouth2, int day2) {
+        return new LocalDate[]{LocalDate.of(year1, mouth1, day1), LocalDate.of(year2, mouth2, day2)};
+    }
+}

+ 149 - 0
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/trainexp/TrainExpServiceImplTest.java

@@ -0,0 +1,149 @@
+package com.citu.module.menduner.system.service.trainexp;
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.test.core.ut.BaseDbUnitTest;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpPageReqVO;
+import com.citu.module.menduner.system.controller.admin.trainexp.vo.TrainExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.trainexp.TrainExpDO;
+import com.citu.module.menduner.system.dal.mysql.trainexp.TrainExpMapper;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.annotation.Import;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+
+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.TRAIN_EXP_NOT_EXISTS;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link TrainExpServiceImpl} 的单元测试类
+ *
+ * @author Rayson
+ */
+@Import(TrainExpServiceImpl.class)
+public class TrainExpServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private TrainExpServiceImpl trainExpService;
+
+    @Resource
+    private TrainExpMapper trainExpMapper;
+
+    public static LocalDate[] buildBetweenDate(int year1, int mouth1, int day1,
+                                               int year2, int mouth2, int day2) {
+        return new LocalDate[]{LocalDate.of(year1, mouth1, day1), LocalDate.of(year2, mouth2, day2)};
+    }
+
+    @Test
+    public void testCreateTrainExp_success() {
+        // 准备参数
+        TrainExpSaveReqVO createReqVO = randomPojo(TrainExpSaveReqVO.class).setId(null);
+
+        // 调用
+        Long trainExpId = trainExpService.createTrainExp(createReqVO);
+        // 断言
+        assertNotNull(trainExpId);
+        // 校验记录的属性是否正确
+        TrainExpDO trainExp = trainExpMapper.selectById(trainExpId);
+        assertPojoEquals(createReqVO, trainExp, "id");
+    }
+
+    @Test
+    public void testUpdateTrainExp_success() {
+        // mock 数据
+        TrainExpDO dbTrainExp = randomPojo(TrainExpDO.class);
+        trainExpMapper.insert(dbTrainExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        TrainExpSaveReqVO updateReqVO = randomPojo(TrainExpSaveReqVO.class, o -> {
+            o.setId(dbTrainExp.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        trainExpService.updateTrainExp(updateReqVO);
+        // 校验是否更新正确
+        TrainExpDO trainExp = trainExpMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, trainExp);
+    }
+
+    @Test
+    public void testUpdateTrainExp_notExists() {
+        // 准备参数
+        TrainExpSaveReqVO updateReqVO = randomPojo(TrainExpSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> trainExpService.updateTrainExp(updateReqVO), TRAIN_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteTrainExp_success() {
+        // mock 数据
+        TrainExpDO dbTrainExp = randomPojo(TrainExpDO.class);
+        trainExpMapper.insert(dbTrainExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbTrainExp.getId();
+
+        // 调用
+        trainExpService.deleteTrainExp(id);
+        // 校验数据不存在了
+        assertNull(trainExpMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteTrainExp_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> trainExpService.deleteTrainExp(id), TRAIN_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetTrainExpPage() {
+        // mock 数据
+        TrainExpDO dbTrainExp = randomPojo(TrainExpDO.class, o -> { // 等会查询到
+            o.setUserId(null);
+            o.setStartTime(null);
+            o.setEndTime(null);
+            o.setOrgName(null);
+            o.setCourse(null);
+            o.setCreateTime(null);
+        });
+        trainExpMapper.insert(dbTrainExp);
+        // 测试 userId 不匹配
+        trainExpMapper.insert(cloneIgnoreId(dbTrainExp, o -> o.setUserId(null)));
+        // 测试 startTime 不匹配
+        trainExpMapper.insert(cloneIgnoreId(dbTrainExp, o -> o.setStartTime(null)));
+        // 测试 endTime 不匹配
+        trainExpMapper.insert(cloneIgnoreId(dbTrainExp, o -> o.setEndTime(null)));
+        // 测试 orgName 不匹配
+        trainExpMapper.insert(cloneIgnoreId(dbTrainExp, o -> o.setOrgName(null)));
+        // 测试 course 不匹配
+        trainExpMapper.insert(cloneIgnoreId(dbTrainExp, o -> o.setCourse(null)));
+        // 测试 createTime 不匹配
+        trainExpMapper.insert(cloneIgnoreId(dbTrainExp, o -> o.setCreateTime(null)));
+        // 准备参数
+        TrainExpPageReqVO reqVO = new TrainExpPageReqVO();
+        reqVO.setUserId(null);
+        reqVO.setStartTime(buildBetweenDate(2023, 2, 1, 2023, 2, 28));
+        reqVO.setEndTime(buildBetweenDate(2023, 2, 1, 2023, 2, 28));
+        reqVO.setOrgName(null);
+        reqVO.setCourse(null);
+        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+        // 调用
+        PageResult<TrainExpDO> pageResult = trainExpService.getTrainExpPage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbTrainExp, pageResult.getList().get(0));
+    }
+
+}

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

@@ -20,4 +20,6 @@ DELETE FROM "mde_enterprise_post";
 DELETE FROM "mde_enterprise_user_look";
 DELETE FROM "mde_person_enterprise_attention";
 DELETE FROM "mde_person_browse_record";
-DELETE FROM "mde_person_job_collection";
+DELETE FROM "mde_person_job_collection";
+DELETE FROM "mde_train_exp";
+DELETE FROM "mde_project_exp";

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

@@ -424,4 +424,35 @@ CREATE TABLE IF NOT EXISTS "mde_person_job_collection" (
     "deleted" bit NOT NULL DEFAULT FALSE,
     "tenant_id" bigint NOT NULL,
     PRIMARY KEY ("id")
-) COMMENT '门墩儿-人才-招聘职位收藏表';
+) COMMENT '门墩儿-人才-招聘职位收藏表';
+
+CREATE TABLE IF NOT EXISTS "mde_train_exp" (
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "user_id" bigint,
+    "start_time" varchar,
+    "end_time" varchar,
+    "org_name" varchar,
+    "course" varchar,
+    "content" varchar,
+    "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,
+    PRIMARY KEY ("id")
+) COMMENT '门墩儿-培训经历表';
+
+CREATE TABLE IF NOT EXISTS "mde_project_exp" (
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "user_id" bigint,
+    "name" varchar,
+    "start_time" varchar,
+    "end_time" varchar,
+    "content" varchar,
+    "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,
+    PRIMARY KEY ("id")
+) COMMENT '门墩儿-项目经历表';