Procházet zdrojové kódy

1、增加人才地图相关接口

rayson před 7 měsíci
rodič
revize
5ce95eba63
30 změnil soubory, kde provedl 1434 přidání a 46 odebrání
  1. 8 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/ErrorCodeConstants.java
  2. 13 13
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/eduexp/EducationTypeEnum.java
  3. 29 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/person/MaritalStatusEnum.java
  4. 94 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/talent/TalentMapEduExpController.java
  5. 94 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/talent/TalentMapInfoController.java
  6. 94 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/talent/TalentMapWorkExpController.java
  7. 23 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/TalentMapDetailRespVO.java
  8. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/edu/TalentMapEduExpPageReqVO.java
  9. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/edu/TalentMapEduExpRespVO.java
  10. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/edu/TalentMapEduExpSaveReqVO.java
  11. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/info/TalentMapInfoPageReqVO.java
  12. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/info/TalentMapInfoRespVO.java
  13. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/info/TalentMapInfoSaveReqVO.java
  14. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/talent/TalentMapEduExpDO.java
  15. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/talent/TalentMapInfoDO.java
  16. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/unfit/UnfitCandidateDO.java
  17. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/talent/TalentMapInfoMapper.java
  18. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/unfit/UnfitCandidateMapper.java
  19. 13 12
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/resume/OnlineResumeServiceImpl.java
  20. 56 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/talent/TalentMapEduExpService.java
  21. 72 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/talent/TalentMapEduExpServiceImpl.java
  22. 56 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/talent/TalentMapInfoService.java
  23. 72 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/talent/TalentMapInfoServiceImpl.java
  24. 56 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/talent/TalentMapWorkExpService.java
  25. 72 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/talent/TalentMapWorkExpServiceImpl.java
  26. 172 0
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/talent/TalentMapEduExpServiceImplTest.java
  27. 212 0
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/talent/TalentMapInfoServiceImplTest.java
  28. 180 0
      menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/talent/TalentMapWorkExpServiceImplTest.java
  29. 4 1
      menduner/menduner-system-biz/src/test/resources/sql/clean.sql
  30. 95 1
      menduner/menduner-system-biz/src/test/resources/sql/create_tables.sql

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

@@ -593,4 +593,12 @@ public interface ErrorCodeConstants {
     // ========== 页面内容 1_100_058_000 ==========
     ErrorCode WEB_CONTENT_NOT_EXISTS = new ErrorCode(1_100_058_001, "页面内容不存在");
 
+    // ========== 人才地图-人才基本信息 1_100_059_000 ==========
+    ErrorCode TALENT_MAP_INFO_NOT_EXISTS = new ErrorCode(1_100_059_001, "人才地图-人才基本信息不存在");
+
+    // ========== 人才地图-工作经历 1_100_060_000 ==========
+    ErrorCode TALENT_MAP_WORK_EXP_NOT_EXISTS = new ErrorCode(1_100_060_001, "人才地图-工作经历不存在");
+
+    // ========== 人才地图-人才教育经历 1_100_061_000 ==========
+    ErrorCode TALENT_MAP_EDU_EXP_NOT_EXISTS = new ErrorCode(1_100_061_001, "人才地图-人才教育经历不存在");
 }

+ 13 - 13
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/eduexp/EducationTypeEnum.java

@@ -11,14 +11,14 @@ import lombok.Getter;
 public enum EducationTypeEnum {
 
 
-//    PRIMARY_SCHOOL("0","初中及以下"),
+    //    PRIMARY_SCHOOL("0","初中及以下"),
 //    JUNIOR_HIGH_SCHOOL("1","中专/中技"),
 //    HIGH_SCHOOL("2","高中"),
-    COLLEGE("3","大专"),
-    BACHELOR("4","本科"),
-    MASTER("5","硕士"),
-    DOCTOR("6","博士"),
-    OTHER("99","其他");
+    COLLEGE("3", "大专"),
+    BACHELOR("4", "本科"),
+    MASTER("5", "硕士"),
+    DOCTOR("6", "博士"),
+    OTHER("99", "其他");
 
     /**
      * 类型
@@ -38,23 +38,23 @@ public enum EducationTypeEnum {
     }
 
     public static EducationTypeEnum getEnumByOcrName(String eduDegreeNorm) {
-        if(null==eduDegreeNorm){
+        if (null == eduDegreeNorm) {
             return OTHER;
         }
-        eduDegreeNorm = eduDegreeNorm.replaceAll(" ","");
-        if("大专".equals(eduDegreeNorm)){
+        eduDegreeNorm = eduDegreeNorm.replaceAll(" ", "");
+        if ("大专".equals(eduDegreeNorm)) {
             return COLLEGE;
         }
-        if("本科".equals(eduDegreeNorm)){
+        if ("本科".equals(eduDegreeNorm)) {
             return BACHELOR;
         }
-        if("研究生".equals(eduDegreeNorm)){
+        if ("研究生".equals(eduDegreeNorm)) {
             return BACHELOR;
         }
-        if("硕士研究生".equals(eduDegreeNorm)){
+        if ("硕士研究生".equals(eduDegreeNorm)) {
             return MASTER;
         }
-        if("博士研究生".equals(eduDegreeNorm)){
+        if ("博士研究生".equals(eduDegreeNorm)) {
             return DOCTOR;
         }
         return OTHER;

+ 29 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/person/MaritalStatusEnum.java

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.system.enums.person;
+
+import com.citu.module.menduner.system.enums.eduexp.EducationTypeEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 婚姻状态(0未婚 | 1已婚 | 2离异 | 3暂不透露)
+ **/
+@Getter
+@AllArgsConstructor
+public enum MaritalStatusEnum {
+    SINGLE("0", "未婚"),
+    MARRIED("1", "已婚"),
+    DIVORCED("2", "离异"),
+    NOT_DISCLOSED("3", "暂不透露");
+
+    private final String type;
+    private final String name;
+
+    public static MaritalStatusEnum getEnumByName(String name) {
+        for (MaritalStatusEnum maritalStatusEnum : MaritalStatusEnum.values()) {
+            if (maritalStatusEnum.getName().equals(name)) {
+                return maritalStatusEnum;
+            }
+        }
+        return NOT_DISCLOSED;
+    }
+}

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

@@ -0,0 +1,94 @@
+package com.citu.module.menduner.system.controller.admin.talent;
+
+
+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.talent.edu.TalentMapEduExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpRespVO;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapEduExpDO;
+import com.citu.module.menduner.system.service.talent.TalentMapEduExpService;
+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/talent-map-edu-exp")
+@Validated
+public class TalentMapEduExpController {
+
+    @Resource
+    private TalentMapEduExpService talentMapEduExpService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建人才地图-人才教育经历")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-edu-exp:create')")
+    public CommonResult<Long> createTalentMapEduExp(@Valid @RequestBody TalentMapEduExpSaveReqVO createReqVO) {
+        return success(talentMapEduExpService.createTalentMapEduExp(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新人才地图-人才教育经历")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-edu-exp:update')")
+    public CommonResult<Boolean> updateTalentMapEduExp(@Valid @RequestBody TalentMapEduExpSaveReqVO updateReqVO) {
+        talentMapEduExpService.updateTalentMapEduExp(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除人才地图-人才教育经历")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-edu-exp:delete')")
+    public CommonResult<Boolean> deleteTalentMapEduExp(@RequestParam("id") Long id) {
+        talentMapEduExpService.deleteTalentMapEduExp(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得人才地图-人才教育经历")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-edu-exp:query')")
+    public CommonResult<TalentMapEduExpRespVO> getTalentMapEduExp(@RequestParam("id") Long id) {
+        TalentMapEduExpDO talentMapEduExp = talentMapEduExpService.getTalentMapEduExp(id);
+        return success(BeanUtils.toBean(talentMapEduExp, TalentMapEduExpRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得人才地图-人才教育经历分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-edu-exp:query')")
+    public CommonResult<PageResult<TalentMapEduExpRespVO>> getTalentMapEduExpPage(@Valid TalentMapEduExpPageReqVO pageReqVO) {
+        PageResult<TalentMapEduExpDO> pageResult = talentMapEduExpService.getTalentMapEduExpPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, TalentMapEduExpRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出人才地图-人才教育经历 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-edu-exp:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTalentMapEduExpExcel(@Valid TalentMapEduExpPageReqVO pageReqVO,
+                                           HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<TalentMapEduExpDO> list = talentMapEduExpService.getTalentMapEduExpPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "人才地图-人才教育经历.xls", "数据", TalentMapEduExpRespVO.class,
+                BeanUtils.toBean(list, TalentMapEduExpRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,94 @@
+package com.citu.module.menduner.system.controller.admin.talent;
+
+
+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.talent.info.TalentMapInfoPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoRespVO;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapInfoDO;
+import com.citu.module.menduner.system.service.talent.TalentMapInfoService;
+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/talent-map-info")
+@Validated
+public class TalentMapInfoController {
+
+    @Resource
+    private TalentMapInfoService talentMapInfoService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建人才地图-人才基本信息")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-info:create')")
+    public CommonResult<Long> createTalentMapInfo(@Valid @RequestBody TalentMapInfoSaveReqVO createReqVO) {
+        return success(talentMapInfoService.createTalentMapInfo(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新人才地图-人才基本信息")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-info:update')")
+    public CommonResult<Boolean> updateTalentMapInfo(@Valid @RequestBody TalentMapInfoSaveReqVO updateReqVO) {
+        talentMapInfoService.updateTalentMapInfo(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除人才地图-人才基本信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-info:delete')")
+    public CommonResult<Boolean> deleteTalentMapInfo(@RequestParam("id") Long id) {
+        talentMapInfoService.deleteTalentMapInfo(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得人才地图-人才基本信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-info:query')")
+    public CommonResult<TalentMapInfoRespVO> getTalentMapInfo(@RequestParam("id") Long id) {
+        TalentMapInfoDO talentMapInfo = talentMapInfoService.getTalentMapInfo(id);
+        return success(BeanUtils.toBean(talentMapInfo, TalentMapInfoRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得人才地图-人才基本信息分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-info:query')")
+    public CommonResult<PageResult<TalentMapInfoRespVO>> getTalentMapInfoPage(@Valid TalentMapInfoPageReqVO pageReqVO) {
+        PageResult<TalentMapInfoDO> pageResult = talentMapInfoService.getTalentMapInfoPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, TalentMapInfoRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出人才地图-人才基本信息 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-info:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTalentMapInfoExcel(@Valid TalentMapInfoPageReqVO pageReqVO,
+                                         HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<TalentMapInfoDO> list = talentMapInfoService.getTalentMapInfoPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "人才地图-人才基本信息.xls", "数据", TalentMapInfoRespVO.class,
+                BeanUtils.toBean(list, TalentMapInfoRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,94 @@
+package com.citu.module.menduner.system.controller.admin.talent;
+
+
+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.talent.work.TalentMapWorkExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpRespVO;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapWorkExpDO;
+import com.citu.module.menduner.system.service.talent.TalentMapWorkExpService;
+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/talent-map-work-exp")
+@Validated
+public class TalentMapWorkExpController {
+
+    @Resource
+    private TalentMapWorkExpService talentMapWorkExpService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建人才地图-工作经历")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-work-exp:create')")
+    public CommonResult<Long> createTalentMapWorkExp(@Valid @RequestBody TalentMapWorkExpSaveReqVO createReqVO) {
+        return success(talentMapWorkExpService.createTalentMapWorkExp(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新人才地图-工作经历")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-work-exp:update')")
+    public CommonResult<Boolean> updateTalentMapWorkExp(@Valid @RequestBody TalentMapWorkExpSaveReqVO updateReqVO) {
+        talentMapWorkExpService.updateTalentMapWorkExp(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除人才地图-工作经历")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-work-exp:delete')")
+    public CommonResult<Boolean> deleteTalentMapWorkExp(@RequestParam("id") Long id) {
+        talentMapWorkExpService.deleteTalentMapWorkExp(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得人才地图-工作经历")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-work-exp:query')")
+    public CommonResult<TalentMapWorkExpRespVO> getTalentMapWorkExp(@RequestParam("id") Long id) {
+        TalentMapWorkExpDO talentMapWorkExp = talentMapWorkExpService.getTalentMapWorkExp(id);
+        return success(BeanUtils.toBean(talentMapWorkExp, TalentMapWorkExpRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得人才地图-工作经历分页")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-work-exp:query')")
+    public CommonResult<PageResult<TalentMapWorkExpRespVO>> getTalentMapWorkExpPage(@Valid TalentMapWorkExpPageReqVO pageReqVO) {
+        PageResult<TalentMapWorkExpDO> pageResult = talentMapWorkExpService.getTalentMapWorkExpPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, TalentMapWorkExpRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出人才地图-工作经历 Excel")
+    @PreAuthorize("@ss.hasPermission('menduner:system:talent-map-work-exp:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportTalentMapWorkExpExcel(@Valid TalentMapWorkExpPageReqVO pageReqVO,
+                                            HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<TalentMapWorkExpDO> list = talentMapWorkExpService.getTalentMapWorkExpPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "人才地图-工作经历.xls", "数据", TalentMapWorkExpRespVO.class,
+                BeanUtils.toBean(list, TalentMapWorkExpRespVO.class));
+    }
+
+}

+ 23 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/TalentMapDetailRespVO.java

@@ -0,0 +1,23 @@
+package com.citu.module.menduner.system.controller.base.talent;
+
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpRespVO;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoRespVO;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "menduner - 人才地图详情信息 Response VO")
+@Data
+public class TalentMapDetailRespVO {
+
+    @Schema(description = "人才信息")
+    private TalentMapInfoRespVO person;
+
+    @Schema(description = "人才教育经历")
+    private List<TalentMapEduExpRespVO> eduList;
+
+    @Schema(description = "人才工作经历")
+    private List<TalentMapWorkExpRespVO> workList;
+}

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/edu/TalentMapEduExpPageReqVO.java

@@ -40,7 +40,7 @@ public class TalentMapEduExpPageReqVO extends PageParam {
     private String educationSystemTypeStr;
 
     @Schema(description = "是否国外")
-    private Integer abroad;
+    private Boolean abroad;
 
     @Schema(description = "专业id", example = "26395")
     private Long majorId;

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/edu/TalentMapEduExpRespVO.java

@@ -46,7 +46,7 @@ public class TalentMapEduExpRespVO {
 
     @Schema(description = "是否国外")
     @ExcelProperty("是否国外")
-    private Integer abroad;
+    private Boolean abroad;
 
     @Schema(description = "专业id", example = "26395")
     @ExcelProperty("专业id")

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/edu/TalentMapEduExpSaveReqVO.java

@@ -36,7 +36,7 @@ public class TalentMapEduExpSaveReqVO {
     private String educationSystemTypeStr;
 
     @Schema(description = "是否国外")
-    private Integer abroad;
+    private Boolean abroad;
 
     @Schema(description = "专业id", example = "26395")
     private Long majorId;

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/info/TalentMapInfoPageReqVO.java

@@ -9,7 +9,7 @@ import java.time.LocalDateTime;
 
 import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
-@Schema(description = "管理后台 - 门墩儿-人才地图-人才基本信息分页 Request VO")
+@Schema(description = "管理后台 - 人才地图-人才基本信息分页 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
@@ -37,7 +37,7 @@ public class TalentMapInfoPageReqVO extends PageParam {
     private String wxCode;
 
     @Schema(description = "是否党员")
-    private Integer partyMember;
+    private Boolean partyMember;
 
     @Schema(description = "国籍")
     private String nationality;
@@ -74,7 +74,7 @@ public class TalentMapInfoPageReqVO extends PageParam {
     private String eduType;
 
     @Schema(description = "是否有筹备经验")
-    private Integer prepareExp;
+    private Boolean prepareExp;
 
     @Schema(description = "配偶家乡id", example = "9408")
     private Long spouseHometownId;

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/info/TalentMapInfoRespVO.java

@@ -8,7 +8,7 @@ import lombok.Data;
 
 import java.time.LocalDateTime;
 
-@Schema(description = "管理后台 - 门墩儿-人才地图-人才基本信息 Response VO")
+@Schema(description = "管理后台 - 人才地图-人才基本信息 Response VO")
 @Data
 @ExcelIgnoreUnannotated
 public class TalentMapInfoRespVO {
@@ -59,7 +59,7 @@ public class TalentMapInfoRespVO {
 
     @Schema(description = "是否党员")
     @ExcelProperty("是否党员")
-    private Integer partyMember;
+    private Boolean partyMember;
 
     @Schema(description = "国籍")
     @ExcelProperty("国籍")
@@ -111,7 +111,7 @@ public class TalentMapInfoRespVO {
 
     @Schema(description = "是否有筹备经验")
     @ExcelProperty("是否有筹备经验")
-    private Integer prepareExp;
+    private Boolean prepareExp;
 
     @Schema(description = "意向工作城市")
     @ExcelProperty("意向工作城市")

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/talent/info/TalentMapInfoSaveReqVO.java

@@ -5,7 +5,7 @@ import lombok.Data;
 
 import java.time.LocalDateTime;
 
-@Schema(description = "管理后台 - 门墩儿-人才地图-人才基本信息新增/修改 Request VO")
+@Schema(description = "管理后台 - 人才地图-人才基本信息新增/修改 Request VO")
 @Data
 public class TalentMapInfoSaveReqVO {
 
@@ -43,7 +43,7 @@ public class TalentMapInfoSaveReqVO {
     private LocalDateTime birthday;
 
     @Schema(description = "是否党员")
-    private Integer partyMember;
+    private Boolean partyMember;
 
     @Schema(description = "国籍")
     private String nationality;
@@ -82,7 +82,7 @@ public class TalentMapInfoSaveReqVO {
     private String eduType;
 
     @Schema(description = "是否有筹备经验")
-    private Integer prepareExp;
+    private Boolean prepareExp;
 
     @Schema(description = "意向工作城市")
     private String interestedAreaIdList;

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/talent/TalentMapEduExpDO.java

@@ -60,7 +60,7 @@ public class TalentMapEduExpDO extends TenantBaseDO {
     /**
      * 是否国外
      */
-    private Integer abroad;
+    private Boolean abroad;
     /**
      * 专业id
      */

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/talent/TalentMapInfoDO.java

@@ -10,7 +10,7 @@ import java.time.LocalDateTime;
 import java.util.List;
 
 /**
- * 门墩儿-人才地图-人才基本信息 DO
+ * 人才地图-人才基本信息 DO
  *
  * @author Rayson
  */
@@ -75,7 +75,7 @@ public class TalentMapInfoDO extends TenantBaseDO {
     /**
      * 是否党员
      */
-    private Integer partyMember;
+    private Boolean partyMember;
     /**
      * 国籍
      */
@@ -131,7 +131,7 @@ public class TalentMapInfoDO extends TenantBaseDO {
     /**
      * 是否有筹备经验
      */
-    private Integer prepareExp;
+    private Boolean prepareExp;
     /**
      * 意向工作城市
      */

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/unfit/UnfitCandidateDO.java

@@ -8,7 +8,7 @@ import com.citu.framework.tenant.core.db.TenantBaseDO;
 import lombok.*;
 
 /**
- * 门墩儿-不合适的候选人 DO
+ * 不合适的候选人 DO
  *
  * @author Rayson
  */

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

@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
 
 
 /**
- * 门墩儿-人才地图-人才基本信息 Mapper
+ * 人才地图-人才基本信息 Mapper
  *
  * @author Rayson
  */

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

@@ -14,7 +14,7 @@ import com.citu.module.menduner.system.dal.dataobject.unfit.UnfitCandidateDO;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
- * 门墩儿-不合适的候选人 Mapper
+ * 不合适的候选人 Mapper
  *
  * @author menduner
  */

+ 13 - 12
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/resume/OnlineResumeServiceImpl.java

@@ -12,6 +12,7 @@ import com.citu.module.menduner.system.controller.base.resume.resumesdk.*;
 import com.citu.module.menduner.system.controller.base.trainexp.TrainExpRespVO;
 import com.citu.module.menduner.system.controller.base.workexp.WorkExpRespVO;
 import com.citu.module.menduner.system.enums.eduexp.EducationTypeEnum;
+import com.citu.module.menduner.system.enums.person.MaritalStatusEnum;
 import com.citu.module.menduner.system.enums.workexp.ExpTypeEnum;
 import com.citu.module.menduner.system.service.area.AreaService;
 import org.apache.commons.lang3.StringUtils;
@@ -33,7 +34,7 @@ public class OnlineResumeServiceImpl implements OnlineResumeService {
 
 
     @Resource
-    AreaService areaService;
+    private AreaService areaService;
     @Resource
     private TenResumeService tenResumeService;
 
@@ -61,7 +62,7 @@ public class OnlineResumeServiceImpl implements OnlineResumeService {
         // TODO resp.interestedList 大概率取不出,但是可以填positionName
         resp.setInterestedList(temResumeResVoConvertToJobInterestedRespVO(temResumeResVo));
         // TODO resp.skillList 完全配不出格式,先不用管
-//        resp.setSkillList()
+        // resp.setSkillList()
         // TODO resp.eduList 可填schoolName、educationType(EducationTypeEnum)、major、startTime、endTime
         resp.setEduList(temResumeResVoConvertToEduExpRespVO(temResumeResVo));
         // TODO resp.workList 可填enterpriseName、positionName、startTime、endTime、content
@@ -90,15 +91,15 @@ public class OnlineResumeServiceImpl implements OnlineResumeService {
         if (StringUtils.isNotBlank(temResumeResVo.getMaritalStatus())) {
             String maritalStatus = temResumeResVo.getMaritalStatus().replaceAll(" ", "");
             Map<String, String> maritalStatusMap = new HashMap<>();
-            maritalStatusMap.put("未婚", "0");
-            maritalStatusMap.put("未结婚", "0");
-            maritalStatusMap.put("未婚未育", "0");
-            maritalStatusMap.put("暂未结婚", "0");
-            maritalStatusMap.put("已婚", "1");
-            maritalStatusMap.put("已经结婚", "1");
-            maritalStatusMap.put("已结婚", "1");
-            maritalStatusMap.put("已婚已育", "1");
-            personInfoRespVO.setMaritalStatus(maritalStatusMap.getOrDefault(maritalStatus, "3"));
+            maritalStatusMap.put("未婚", MaritalStatusEnum.SINGLE.getType());
+            maritalStatusMap.put("未结婚", MaritalStatusEnum.SINGLE.getType());
+            maritalStatusMap.put("未婚未育", MaritalStatusEnum.SINGLE.getType());
+            maritalStatusMap.put("暂未结婚",MaritalStatusEnum.SINGLE.getType());
+            maritalStatusMap.put("已婚", MaritalStatusEnum.MARRIED.getType());
+            maritalStatusMap.put("已经结婚", MaritalStatusEnum.MARRIED.getType());
+            maritalStatusMap.put("已结婚", MaritalStatusEnum.MARRIED.getType());
+            maritalStatusMap.put("已婚已育",MaritalStatusEnum.MARRIED.getType());
+            personInfoRespVO.setMaritalStatus(maritalStatusMap.getOrDefault(maritalStatus, MaritalStatusEnum.NOT_DISCLOSED.getType()));
         }
 
         if (StringUtils.isNotBlank(temResumeResVo.getCityNorm())) {
@@ -134,7 +135,7 @@ public class OnlineResumeServiceImpl implements OnlineResumeService {
             personInfoRespVO.setFirstWorkTime(convertDate(temResumeResVo.getWorkStartTimeInf()));
         }
         personInfoRespVO.setAdvantage(temResumeResVo.getContMyDesc());
-        personInfoRespVO.setEduType(temResumeResVo.getDegree());
+        personInfoRespVO.setEduType(EducationTypeEnum.getEnumByOcrName(temResumeResVo.getDegree()).getType());
         String type = ExpTypeEnum.getOCREnumByYear(temResumeResVo.getWorkYearNorm()).getType();
         String type2 = ExpTypeEnum.getOCREnumByYear(temResumeResVo.getWorkYearInf()).getType();
         personInfoRespVO.setExpType(null == type ? type2 : null);// expect_work_year 期望工作年限

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

@@ -0,0 +1,56 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapEduExpDO;
+
+import javax.validation.Valid;
+
+/**
+ * 人才地图-人才教育经历 Service 接口
+ *
+ * @author Rayson
+ */
+public interface TalentMapEduExpService {
+
+    /**
+     * 创建人才地图-人才教育经历
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createTalentMapEduExp(@Valid TalentMapEduExpSaveReqVO createReqVO);
+
+    /**
+     * 更新人才地图-人才教育经历
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateTalentMapEduExp(@Valid TalentMapEduExpSaveReqVO updateReqVO);
+
+    /**
+     * 删除人才地图-人才教育经历
+     *
+     * @param id 编号
+     */
+    void deleteTalentMapEduExp(Long id);
+
+    /**
+     * 获得人才地图-人才教育经历
+     *
+     * @param id 编号
+     * @return 人才地图-人才教育经历
+     */
+    TalentMapEduExpDO getTalentMapEduExp(Long id);
+
+    /**
+     * 获得人才地图-人才教育经历分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 人才地图-人才教育经历分页
+     */
+    PageResult<TalentMapEduExpDO> getTalentMapEduExpPage(TalentMapEduExpPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,72 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapEduExpDO;
+import com.citu.module.menduner.system.dal.mysql.talent.TalentMapEduExpMapper;
+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.TALENT_MAP_EDU_EXP_NOT_EXISTS;
+
+/**
+ * 人才地图-人才教育经历 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class TalentMapEduExpServiceImpl implements TalentMapEduExpService {
+
+    @Resource
+    private TalentMapEduExpMapper talentMapEduExpMapper;
+
+    @Override
+    public Long createTalentMapEduExp(TalentMapEduExpSaveReqVO createReqVO) {
+        // 插入
+        TalentMapEduExpDO talentMapEduExp = BeanUtils.toBean(createReqVO, TalentMapEduExpDO.class);
+        talentMapEduExpMapper.insert(talentMapEduExp);
+        // 返回
+        return talentMapEduExp.getId();
+    }
+
+    @Override
+    public void updateTalentMapEduExp(TalentMapEduExpSaveReqVO updateReqVO) {
+        // 校验存在
+        validateTalentMapEduExpExists(updateReqVO.getId());
+        // 更新
+        TalentMapEduExpDO updateObj = BeanUtils.toBean(updateReqVO, TalentMapEduExpDO.class);
+        talentMapEduExpMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteTalentMapEduExp(Long id) {
+        // 校验存在
+        validateTalentMapEduExpExists(id);
+        // 删除
+        talentMapEduExpMapper.deleteById(id);
+    }
+
+    private void validateTalentMapEduExpExists(Long id) {
+        if (talentMapEduExpMapper.selectById(id) == null) {
+            throw exception(TALENT_MAP_EDU_EXP_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public TalentMapEduExpDO getTalentMapEduExp(Long id) {
+        return talentMapEduExpMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<TalentMapEduExpDO> getTalentMapEduExpPage(TalentMapEduExpPageReqVO pageReqVO) {
+        return talentMapEduExpMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,56 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapInfoDO;
+
+import javax.validation.Valid;
+
+/**
+ * 人才地图-人才基本信息 Service 接口
+ *
+ * @author Rayson
+ */
+public interface TalentMapInfoService {
+
+    /**
+     * 创建人才地图-人才基本信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createTalentMapInfo(@Valid TalentMapInfoSaveReqVO createReqVO);
+
+    /**
+     * 更新人才地图-人才基本信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateTalentMapInfo(@Valid TalentMapInfoSaveReqVO updateReqVO);
+
+    /**
+     * 删除人才地图-人才基本信息
+     *
+     * @param id 编号
+     */
+    void deleteTalentMapInfo(Long id);
+
+    /**
+     * 获得人才地图-人才基本信息
+     *
+     * @param id 编号
+     * @return 人才地图-人才基本信息
+     */
+    TalentMapInfoDO getTalentMapInfo(Long id);
+
+    /**
+     * 获得人才地图-人才基本信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 人才地图-人才基本信息分页
+     */
+    PageResult<TalentMapInfoDO> getTalentMapInfoPage(TalentMapInfoPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,72 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapInfoDO;
+import com.citu.module.menduner.system.dal.mysql.talent.TalentMapInfoMapper;
+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.TALENT_MAP_INFO_NOT_EXISTS;
+
+/**
+ * 人才地图-人才基本信息 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class TalentMapInfoServiceImpl implements TalentMapInfoService {
+
+    @Resource
+    private TalentMapInfoMapper talentMapInfoMapper;
+
+    @Override
+    public Long createTalentMapInfo(TalentMapInfoSaveReqVO createReqVO) {
+        // 插入
+        TalentMapInfoDO talentMapInfo = BeanUtils.toBean(createReqVO, TalentMapInfoDO.class);
+        talentMapInfoMapper.insert(talentMapInfo);
+        // 返回
+        return talentMapInfo.getId();
+    }
+
+    @Override
+    public void updateTalentMapInfo(TalentMapInfoSaveReqVO updateReqVO) {
+        // 校验存在
+        validateTalentMapInfoExists(updateReqVO.getId());
+        // 更新
+        TalentMapInfoDO updateObj = BeanUtils.toBean(updateReqVO, TalentMapInfoDO.class);
+        talentMapInfoMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteTalentMapInfo(Long id) {
+        // 校验存在
+        validateTalentMapInfoExists(id);
+        // 删除
+        talentMapInfoMapper.deleteById(id);
+    }
+
+    private void validateTalentMapInfoExists(Long id) {
+        if (talentMapInfoMapper.selectById(id) == null) {
+            throw exception(TALENT_MAP_INFO_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public TalentMapInfoDO getTalentMapInfo(Long id) {
+        return talentMapInfoMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<TalentMapInfoDO> getTalentMapInfoPage(TalentMapInfoPageReqVO pageReqVO) {
+        return talentMapInfoMapper.selectPage(pageReqVO);
+    }
+
+}

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

@@ -0,0 +1,56 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapWorkExpDO;
+
+import javax.validation.Valid;
+
+/**
+ * 人才地图-工作经历 Service 接口
+ *
+ * @author Rayson
+ */
+public interface TalentMapWorkExpService {
+
+    /**
+     * 创建人才地图-工作经历
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createTalentMapWorkExp(@Valid TalentMapWorkExpSaveReqVO createReqVO);
+
+    /**
+     * 更新人才地图-工作经历
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateTalentMapWorkExp(@Valid TalentMapWorkExpSaveReqVO updateReqVO);
+
+    /**
+     * 删除人才地图-工作经历
+     *
+     * @param id 编号
+     */
+    void deleteTalentMapWorkExp(Long id);
+
+    /**
+     * 获得人才地图-工作经历
+     *
+     * @param id 编号
+     * @return 人才地图-工作经历
+     */
+    TalentMapWorkExpDO getTalentMapWorkExp(Long id);
+
+    /**
+     * 获得人才地图-工作经历分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 人才地图-工作经历分页
+     */
+    PageResult<TalentMapWorkExpDO> getTalentMapWorkExpPage(TalentMapWorkExpPageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,72 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.common.util.object.BeanUtils;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapWorkExpDO;
+import com.citu.module.menduner.system.dal.mysql.talent.TalentMapWorkExpMapper;
+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.TALENT_MAP_WORK_EXP_NOT_EXISTS;
+
+/**
+ * 人才地图-工作经历 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class TalentMapWorkExpServiceImpl implements TalentMapWorkExpService {
+
+    @Resource
+    private TalentMapWorkExpMapper talentMapWorkExpMapper;
+
+    @Override
+    public Long createTalentMapWorkExp(TalentMapWorkExpSaveReqVO createReqVO) {
+        // 插入
+        TalentMapWorkExpDO talentMapWorkExp = BeanUtils.toBean(createReqVO, TalentMapWorkExpDO.class);
+        talentMapWorkExpMapper.insert(talentMapWorkExp);
+        // 返回
+        return talentMapWorkExp.getId();
+    }
+
+    @Override
+    public void updateTalentMapWorkExp(TalentMapWorkExpSaveReqVO updateReqVO) {
+        // 校验存在
+        validateTalentMapWorkExpExists(updateReqVO.getId());
+        // 更新
+        TalentMapWorkExpDO updateObj = BeanUtils.toBean(updateReqVO, TalentMapWorkExpDO.class);
+        talentMapWorkExpMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteTalentMapWorkExp(Long id) {
+        // 校验存在
+        validateTalentMapWorkExpExists(id);
+        // 删除
+        talentMapWorkExpMapper.deleteById(id);
+    }
+
+    private void validateTalentMapWorkExpExists(Long id) {
+        if (talentMapWorkExpMapper.selectById(id) == null) {
+            throw exception(TALENT_MAP_WORK_EXP_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public TalentMapWorkExpDO getTalentMapWorkExp(Long id) {
+        return talentMapWorkExpMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<TalentMapWorkExpDO> getTalentMapWorkExpPage(TalentMapWorkExpPageReqVO pageReqVO) {
+        return talentMapWorkExpMapper.selectPage(pageReqVO);
+    }
+
+}

+ 172 - 0
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/talent/TalentMapEduExpServiceImplTest.java

@@ -0,0 +1,172 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.test.core.ut.BaseDbUnitTest;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.edu.TalentMapEduExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapEduExpDO;
+import com.citu.module.menduner.system.dal.mysql.talent.TalentMapEduExpMapper;
+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.TALENT_MAP_EDU_EXP_NOT_EXISTS;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link TalentMapEduExpServiceImpl} 的单元测试类
+ *
+ * @author Rayson
+ */
+@Import(TalentMapEduExpServiceImpl.class)
+public class TalentMapEduExpServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private TalentMapEduExpServiceImpl talentMapEduExpService;
+
+    @Resource
+    private TalentMapEduExpMapper talentMapEduExpMapper;
+
+    @Test
+    public void testCreateTalentMapEduExp_success() {
+        // 准备参数
+        TalentMapEduExpSaveReqVO createReqVO = randomPojo(TalentMapEduExpSaveReqVO.class).setId(null);
+
+        // 调用
+        Long talentMapEduExpId = talentMapEduExpService.createTalentMapEduExp(createReqVO);
+        // 断言
+        assertNotNull(talentMapEduExpId);
+        // 校验记录的属性是否正确
+        TalentMapEduExpDO talentMapEduExp = talentMapEduExpMapper.selectById(talentMapEduExpId);
+        assertPojoEquals(createReqVO, talentMapEduExp, "id");
+    }
+
+    @Test
+    public void testUpdateTalentMapEduExp_success() {
+        // mock 数据
+        TalentMapEduExpDO dbTalentMapEduExp = randomPojo(TalentMapEduExpDO.class);
+        talentMapEduExpMapper.insert(dbTalentMapEduExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        TalentMapEduExpSaveReqVO updateReqVO = randomPojo(TalentMapEduExpSaveReqVO.class, o -> {
+            o.setId(dbTalentMapEduExp.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        talentMapEduExpService.updateTalentMapEduExp(updateReqVO);
+        // 校验是否更新正确
+        TalentMapEduExpDO talentMapEduExp = talentMapEduExpMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, talentMapEduExp);
+    }
+
+    @Test
+    public void testUpdateTalentMapEduExp_notExists() {
+        // 准备参数
+        TalentMapEduExpSaveReqVO updateReqVO = randomPojo(TalentMapEduExpSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> talentMapEduExpService.updateTalentMapEduExp(updateReqVO), TALENT_MAP_EDU_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteTalentMapEduExp_success() {
+        // mock 数据
+        TalentMapEduExpDO dbTalentMapEduExp = randomPojo(TalentMapEduExpDO.class);
+        talentMapEduExpMapper.insert(dbTalentMapEduExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbTalentMapEduExp.getId();
+
+        // 调用
+        talentMapEduExpService.deleteTalentMapEduExp(id);
+        // 校验数据不存在了
+        assertNull(talentMapEduExpMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteTalentMapEduExp_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> talentMapEduExpService.deleteTalentMapEduExp(id), TALENT_MAP_EDU_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetTalentMapEduExpPage() {
+        // mock 数据
+        TalentMapEduExpDO dbTalentMapEduExp = randomPojo(TalentMapEduExpDO.class, o -> { // 等会查询到
+            o.setPersonId(null);
+            o.setSchoolId(null);
+            o.setSchoolName(null);
+            o.setEducationType(null);
+            o.setEducationTypeStr(null);
+            o.setEducationSystemType(null);
+            o.setEducationSystemTypeStr(null);
+            o.setAbroad(null);
+            o.setMajorId(null);
+            o.setMajor(null);
+            o.setStartTime(null);
+            o.setEndTime(null);
+            o.setCreateTime(null);
+        });
+        talentMapEduExpMapper.insert(dbTalentMapEduExp);
+        // 测试 personId 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setPersonId(null)));
+        // 测试 schoolId 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setSchoolId(null)));
+        // 测试 schoolName 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setSchoolName(null)));
+        // 测试 educationType 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setEducationType(null)));
+        // 测试 educationTypeStr 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setEducationTypeStr(null)));
+        // 测试 educationSystemType 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setEducationSystemType(null)));
+        // 测试 educationSystemTypeStr 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setEducationSystemTypeStr(null)));
+        // 测试 abroad 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setAbroad(null)));
+        // 测试 majorId 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setMajorId(null)));
+        // 测试 major 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setMajor(null)));
+        // 测试 startTime 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setStartTime(null)));
+        // 测试 endTime 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setEndTime(null)));
+        // 测试 createTime 不匹配
+        talentMapEduExpMapper.insert(cloneIgnoreId(dbTalentMapEduExp, o -> o.setCreateTime(null)));
+        // 准备参数
+        TalentMapEduExpPageReqVO reqVO = new TalentMapEduExpPageReqVO();
+        reqVO.setPersonId(null);
+        reqVO.setSchoolId(null);
+        reqVO.setSchoolName(null);
+        reqVO.setEducationType(null);
+        reqVO.setEducationTypeStr(null);
+        reqVO.setEducationSystemType(null);
+        reqVO.setEducationSystemTypeStr(null);
+        reqVO.setAbroad(null);
+        reqVO.setMajorId(null);
+        reqVO.setMajor(null);
+        reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+        reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+        // 调用
+        PageResult<TalentMapEduExpDO> pageResult = talentMapEduExpService.getTalentMapEduExpPage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbTalentMapEduExp, pageResult.getList().get(0));
+    }
+
+}

+ 212 - 0
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/talent/TalentMapInfoServiceImplTest.java

@@ -0,0 +1,212 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.test.core.ut.BaseDbUnitTest;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.info.TalentMapInfoSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapInfoDO;
+import com.citu.module.menduner.system.dal.mysql.talent.TalentMapInfoMapper;
+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.TALENT_MAP_INFO_NOT_EXISTS;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link TalentMapInfoServiceImpl} 的单元测试类
+ *
+ * @author Rayson
+ */
+@Import(TalentMapInfoServiceImpl.class)
+public class TalentMapInfoServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private TalentMapInfoServiceImpl talentMapInfoService;
+
+    @Resource
+    private TalentMapInfoMapper talentMapInfoMapper;
+
+    @Test
+    public void testCreateTalentMapInfo_success() {
+        // 准备参数
+        TalentMapInfoSaveReqVO createReqVO = randomPojo(TalentMapInfoSaveReqVO.class).setId(null);
+
+        // 调用
+        Long talentMapInfoId = talentMapInfoService.createTalentMapInfo(createReqVO);
+        // 断言
+        assertNotNull(talentMapInfoId);
+        // 校验记录的属性是否正确
+        TalentMapInfoDO talentMapInfo = talentMapInfoMapper.selectById(talentMapInfoId);
+        assertPojoEquals(createReqVO, talentMapInfo, "id");
+    }
+
+    @Test
+    public void testUpdateTalentMapInfo_success() {
+        // mock 数据
+        TalentMapInfoDO dbTalentMapInfo = randomPojo(TalentMapInfoDO.class);
+        talentMapInfoMapper.insert(dbTalentMapInfo);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        TalentMapInfoSaveReqVO updateReqVO = randomPojo(TalentMapInfoSaveReqVO.class, o -> {
+            o.setId(dbTalentMapInfo.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        talentMapInfoService.updateTalentMapInfo(updateReqVO);
+        // 校验是否更新正确
+        TalentMapInfoDO talentMapInfo = talentMapInfoMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, talentMapInfo);
+    }
+
+    @Test
+    public void testUpdateTalentMapInfo_notExists() {
+        // 准备参数
+        TalentMapInfoSaveReqVO updateReqVO = randomPojo(TalentMapInfoSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> talentMapInfoService.updateTalentMapInfo(updateReqVO), TALENT_MAP_INFO_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteTalentMapInfo_success() {
+        // mock 数据
+        TalentMapInfoDO dbTalentMapInfo = randomPojo(TalentMapInfoDO.class);
+        talentMapInfoMapper.insert(dbTalentMapInfo);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbTalentMapInfo.getId();
+
+        // 调用
+        talentMapInfoService.deleteTalentMapInfo(id);
+        // 校验数据不存在了
+        assertNull(talentMapInfoMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteTalentMapInfo_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> talentMapInfoService.deleteTalentMapInfo(id), TALENT_MAP_INFO_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetTalentMapInfoPage() {
+        // mock 数据
+        TalentMapInfoDO dbTalentMapInfo = randomPojo(TalentMapInfoDO.class, o -> { // 等会查询到
+            o.setUserId(null);
+            o.setName(null);
+            o.setForeignName(null);
+            o.setSex(null);
+            o.setPhone(null);
+            o.setEmail(null);
+            o.setWxCode(null);
+            o.setPartyMember(null);
+            o.setNationality(null);
+            o.setMaritalStatus(null);
+            o.setAreaId(null);
+            o.setAreaStr(null);
+            o.setRegId(null);
+            o.setRegStr(null);
+            o.setJobType(null);
+            o.setJobStatus(null);
+            o.setFirstWorkTime(null);
+            o.setExpType(null);
+            o.setEduType(null);
+            o.setPrepareExp(null);
+            o.setSpouseHometownId(null);
+            o.setSpouseHometownStr(null);
+            o.setCreateTime(null);
+        });
+        talentMapInfoMapper.insert(dbTalentMapInfo);
+        // 测试 userId 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setUserId(null)));
+        // 测试 name 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setName(null)));
+        // 测试 foreignName 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setForeignName(null)));
+        // 测试 sex 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setSex(null)));
+        // 测试 phone 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setPhone(null)));
+        // 测试 email 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setEmail(null)));
+        // 测试 wxCode 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setWxCode(null)));
+        // 测试 partyMember 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setPartyMember(null)));
+        // 测试 nationality 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setNationality(null)));
+        // 测试 maritalStatus 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setMaritalStatus(null)));
+        // 测试 areaId 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setAreaId(null)));
+        // 测试 areaStr 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setAreaStr(null)));
+        // 测试 regId 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setRegId(null)));
+        // 测试 regStr 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setRegStr(null)));
+        // 测试 jobType 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setJobType(null)));
+        // 测试 jobStatus 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setJobStatus(null)));
+        // 测试 firstWorkTime 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setFirstWorkTime(null)));
+        // 测试 expType 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setExpType(null)));
+        // 测试 eduType 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setEduType(null)));
+        // 测试 prepareExp 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setPrepareExp(null)));
+        // 测试 spouseHometownId 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setSpouseHometownId(null)));
+        // 测试 spouseHometownStr 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setSpouseHometownStr(null)));
+        // 测试 createTime 不匹配
+        talentMapInfoMapper.insert(cloneIgnoreId(dbTalentMapInfo, o -> o.setCreateTime(null)));
+        // 准备参数
+        TalentMapInfoPageReqVO reqVO = new TalentMapInfoPageReqVO();
+        reqVO.setUserId(null);
+        reqVO.setName(null);
+        reqVO.setForeignName(null);
+        reqVO.setSex(null);
+        reqVO.setPhone(null);
+        reqVO.setEmail(null);
+        reqVO.setWxCode(null);
+        reqVO.setPartyMember(null);
+        reqVO.setNationality(null);
+        reqVO.setMaritalStatus(null);
+        reqVO.setAreaId(null);
+        reqVO.setAreaStr(null);
+        reqVO.setRegId(null);
+        reqVO.setRegStr(null);
+        reqVO.setJobType(null);
+        reqVO.setJobStatus(null);
+        reqVO.setFirstWorkTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+        reqVO.setExpType(null);
+        reqVO.setEduType(null);
+        reqVO.setPrepareExp(null);
+        reqVO.setSpouseHometownId(null);
+        reqVO.setSpouseHometownStr(null);
+        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+        // 调用
+        PageResult<TalentMapInfoDO> pageResult = talentMapInfoService.getTalentMapInfoPage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbTalentMapInfo, pageResult.getList().get(0));
+    }
+
+}

+ 180 - 0
menduner/menduner-system-biz/src/test/java/com/citu/module/menduner/system/service/talent/TalentMapWorkExpServiceImplTest.java

@@ -0,0 +1,180 @@
+package com.citu.module.menduner.system.service.talent;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.test.core.ut.BaseDbUnitTest;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpPageReqVO;
+import com.citu.module.menduner.system.controller.base.talent.work.TalentMapWorkExpSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.talent.TalentMapWorkExpDO;
+import com.citu.module.menduner.system.dal.mysql.talent.TalentMapWorkExpMapper;
+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.TALENT_MAP_WORK_EXP_NOT_EXISTS;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link TalentMapWorkExpServiceImpl} 的单元测试类
+ *
+ * @author Rayson
+ */
+@Import(TalentMapWorkExpServiceImpl.class)
+public class TalentMapWorkExpServiceImplTest extends BaseDbUnitTest {
+
+    @Resource
+    private TalentMapWorkExpServiceImpl talentMapWorkExpService;
+
+    @Resource
+    private TalentMapWorkExpMapper talentMapWorkExpMapper;
+
+    @Test
+    public void testCreateTalentMapWorkExp_success() {
+        // 准备参数
+        TalentMapWorkExpSaveReqVO createReqVO = randomPojo(TalentMapWorkExpSaveReqVO.class).setId(null);
+
+        // 调用
+        Long talentMapWorkExpId = talentMapWorkExpService.createTalentMapWorkExp(createReqVO);
+        // 断言
+        assertNotNull(talentMapWorkExpId);
+        // 校验记录的属性是否正确
+        TalentMapWorkExpDO talentMapWorkExp = talentMapWorkExpMapper.selectById(talentMapWorkExpId);
+        assertPojoEquals(createReqVO, talentMapWorkExp, "id");
+    }
+
+    @Test
+    public void testUpdateTalentMapWorkExp_success() {
+        // mock 数据
+        TalentMapWorkExpDO dbTalentMapWorkExp = randomPojo(TalentMapWorkExpDO.class);
+        talentMapWorkExpMapper.insert(dbTalentMapWorkExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        TalentMapWorkExpSaveReqVO updateReqVO = randomPojo(TalentMapWorkExpSaveReqVO.class, o -> {
+            o.setId(dbTalentMapWorkExp.getId()); // 设置更新的 ID
+        });
+
+        // 调用
+        talentMapWorkExpService.updateTalentMapWorkExp(updateReqVO);
+        // 校验是否更新正确
+        TalentMapWorkExpDO talentMapWorkExp = talentMapWorkExpMapper.selectById(updateReqVO.getId()); // 获取最新的
+        assertPojoEquals(updateReqVO, talentMapWorkExp);
+    }
+
+    @Test
+    public void testUpdateTalentMapWorkExp_notExists() {
+        // 准备参数
+        TalentMapWorkExpSaveReqVO updateReqVO = randomPojo(TalentMapWorkExpSaveReqVO.class);
+
+        // 调用, 并断言异常
+        assertServiceException(() -> talentMapWorkExpService.updateTalentMapWorkExp(updateReqVO), TALENT_MAP_WORK_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    public void testDeleteTalentMapWorkExp_success() {
+        // mock 数据
+        TalentMapWorkExpDO dbTalentMapWorkExp = randomPojo(TalentMapWorkExpDO.class);
+        talentMapWorkExpMapper.insert(dbTalentMapWorkExp);// @Sql: 先插入出一条存在的数据
+        // 准备参数
+        Long id = dbTalentMapWorkExp.getId();
+
+        // 调用
+        talentMapWorkExpService.deleteTalentMapWorkExp(id);
+        // 校验数据不存在了
+        assertNull(talentMapWorkExpMapper.selectById(id));
+    }
+
+    @Test
+    public void testDeleteTalentMapWorkExp_notExists() {
+        // 准备参数
+        Long id = randomLongId();
+
+        // 调用, 并断言异常
+        assertServiceException(() -> talentMapWorkExpService.deleteTalentMapWorkExp(id), TALENT_MAP_WORK_EXP_NOT_EXISTS);
+    }
+
+    @Test
+    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+    public void testGetTalentMapWorkExpPage() {
+        // mock 数据
+        TalentMapWorkExpDO dbTalentMapWorkExp = randomPojo(TalentMapWorkExpDO.class, o -> { // 等会查询到
+            o.setPersonId(null);
+            o.setBloc(null);
+            o.setBrand(null);
+            o.setEnterpriseId(null);
+            o.setEnterpriseName(null);
+            o.setType(null);
+            o.setCurrentlyEmployed(null);
+            o.setIndustryId(null);
+            o.setDeptName(null);
+            o.setPositionId(null);
+            o.setPositionName(null);
+            o.setStartTime(null);
+            o.setEndTime(null);
+            o.setCurrencyType(null);
+            o.setCreateTime(null);
+        });
+        talentMapWorkExpMapper.insert(dbTalentMapWorkExp);
+        // 测试 personId 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setPersonId(null)));
+        // 测试 bloc 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setBloc(null)));
+        // 测试 brand 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setBrand(null)));
+        // 测试 enterpriseId 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setEnterpriseId(null)));
+        // 测试 enterpriseName 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setEnterpriseName(null)));
+        // 测试 type 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setType(null)));
+        // 测试 currentlyEmployed 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setCurrentlyEmployed(null)));
+        // 测试 industryId 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setIndustryId(null)));
+        // 测试 deptName 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setDeptName(null)));
+        // 测试 positionId 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setPositionId(null)));
+        // 测试 positionName 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setPositionName(null)));
+        // 测试 startTime 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setStartTime(null)));
+        // 测试 endTime 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setEndTime(null)));
+        // 测试 currencyType 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setCurrencyType(null)));
+        // 测试 createTime 不匹配
+        talentMapWorkExpMapper.insert(cloneIgnoreId(dbTalentMapWorkExp, o -> o.setCreateTime(null)));
+        // 准备参数
+        TalentMapWorkExpPageReqVO reqVO = new TalentMapWorkExpPageReqVO();
+        reqVO.setPersonId(null);
+        reqVO.setBloc(null);
+        reqVO.setBrand(null);
+        reqVO.setEnterpriseId(null);
+        reqVO.setEnterpriseName(null);
+        reqVO.setType(null);
+        reqVO.setCurrentlyEmployed(null);
+        reqVO.setIndustryId(null);
+        reqVO.setDeptName(null);
+        reqVO.setPositionId(null);
+        reqVO.setPositionName(null);
+        reqVO.setStartTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+        reqVO.setEndTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+        reqVO.setCurrencyType(null);
+        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+        // 调用
+        PageResult<TalentMapWorkExpDO> pageResult = talentMapWorkExpService.getTalentMapWorkExpPage(reqVO);
+        // 断言
+        assertEquals(1, pageResult.getTotal());
+        assertEquals(1, pageResult.getList().size());
+        assertPojoEquals(dbTalentMapWorkExp, pageResult.getList().get(0));
+    }
+
+}

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

@@ -46,4 +46,7 @@ DELETE FROM "mde_enterprise_package";
 DELETE FROM "mde_enterprise_entitlement";
 DELETE FROM "mde_morning_news";
 DELETE FROM "mde_job_fair";
-DELETE FROM "mde_web_content";
+DELETE FROM "mde_web_content";
+DELETE FROM "mde_talent_map_info";
+DELETE FROM "mde_talent_map_work_exp";
+DELETE FROM "mde_talent_map_edu_exp";

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

@@ -839,4 +839,98 @@ CREATE TABLE IF NOT EXISTS "mde_web_content" (
     "deleted" bit NOT NULL DEFAULT FALSE,
     "tenant_id" bigint NOT NULL,
     PRIMARY KEY ("id")
-) COMMENT '页面内容';
+) COMMENT '页面内容';
+
+CREATE TABLE IF NOT EXISTS "mde_talent_map_info" (
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "user_id" bigint,
+    "resume_url" varchar,
+    "name" varchar,
+    "foreign_name" varchar,
+    "sex" varchar,
+    "avatar" varchar,
+    "phone" varchar,
+    "email" varchar,
+    "wx_code" varchar,
+    "birthday" varchar,
+    "party_member" int,
+    "nationality" varchar,
+    "marital_status" varchar,
+    "area_id" bigint,
+    "area_str" varchar,
+    "reg_id" bigint,
+    "reg_str" varchar,
+    "job_type" varchar,
+    "job_status" varchar,
+    "first_work_time" varchar,
+    "advantage" varchar,
+    "exp_type" varchar,
+    "edu_type" varchar,
+    "prepare_exp" int,
+    "interested_area_id_list" varchar,
+    "tag_list" varchar,
+    "spouse_hometown_id" bigint,
+    "spouse_hometown_str" varchar,
+    "child_age" 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,
+    "tenant_id" bigint NOT NULL,
+    PRIMARY KEY ("id")
+) COMMENT '人才地图-人才基本信息';
+
+CREATE TABLE IF NOT EXISTS "mde_talent_map_work_exp" (
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "person_id" bigint,
+    "bloc" varchar,
+    "brand" varchar,
+    "enterprise_id" bigint,
+    "enterprise_name" varchar NOT NULL,
+    "type" varchar,
+    "currently_employed" int,
+    "industry_id" bigint,
+    "dept_name" varchar,
+    "position_id" bigint,
+    "position_name" varchar NOT NULL,
+    "start_time" varchar,
+    "end_time" varchar,
+    "content" varchar,
+    "achievement" varchar,
+    "pay" varchar,
+    "pay_unit" varchar,
+    "currency_type" varchar,
+    "skill_list" 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,
+    "tenant_id" bigint NOT NULL,
+    PRIMARY KEY ("id")
+) COMMENT '人才地图-工作经历';
+
+CREATE TABLE IF NOT EXISTS "mde_talent_map_edu_exp" (
+    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+    "person_id" bigint,
+    "school_id" bigint,
+    "school_name" varchar,
+    "education_type" varchar,
+    "education_type_str" varchar,
+    "education_system_type" varchar,
+    "education_system_type_str" varchar,
+    "abroad" int,
+    "major_id" bigint,
+    "major" varchar,
+    "start_time" varchar NOT NULL,
+    "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,
+    "tenant_id" bigint NOT NULL,
+    PRIMARY KEY ("id")
+) COMMENT '人才地图-人才教育经历';