Просмотр исходного кода

1、增加同步boss职位类型接口
2、增加同步boos行业信息接口

rayson 1 год назад
Родитель
Сommit
ada31818fd
21 измененных файлов с 233 добавлено и 32 удалено
  1. 13 0
      citu-framework/citu-spring-boot-starter-mybatis/src/main/java/com/citu/framework/mybatis/core/query/LambdaQueryWrapperX.java
  2. 16 0
      menduner/menduner-system-biz/Dockerfile2
  3. 6 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/industry/IndustryController.java
  4. 8 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/position/PositionController.java
  5. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/area/AreaMapper.java
  6. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/certificate/CertificateMapper.java
  7. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/cvattachment/CvAttachmentMapper.java
  8. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/eduexp/EduExpMapper.java
  9. 9 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/industry/IndustryMapper.java
  10. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/major/MajorMapper.java
  11. 11 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/position/PositionMapper.java
  12. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/school/SchoolMapper.java
  13. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/userinfo/UserInfoMapper.java
  14. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/userskill/UserSkillMapper.java
  15. 3 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/workexp/WorkExpMapper.java
  16. 5 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/industry/IndustryService.java
  17. 59 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/industry/IndustryServiceImpl.java
  18. 5 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionService.java
  19. 62 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionServiceImpl.java
  20. 17 0
      menduner/menduner-system-biz/src/main/resources/mapper/industry/IndustryMapper.xml
  21. 5 0
      menduner/menduner-system-biz/src/main/resources/mapper/position/PositionMapper.xml

+ 13 - 0
citu-framework/citu-spring-boot-starter-mybatis/src/main/java/com/citu/framework/mybatis/core/query/LambdaQueryWrapperX.java

@@ -24,6 +24,19 @@ public class LambdaQueryWrapperX<T> extends LambdaQueryWrapper<T> {
         }
         return this;
     }
+    public LambdaQueryWrapperX<T> likeLeftIfPresent(SFunction<T, ?> column, String val) {
+        if (StringUtils.hasText(val)) {
+            return (LambdaQueryWrapperX<T>) super.likeLeft(column, val);
+        }
+        return this;
+    }
+
+    public LambdaQueryWrapperX<T> likeRightIfPresent(SFunction<T, ?> column, String val) {
+        if (StringUtils.hasText(val)) {
+            return (LambdaQueryWrapperX<T>) super.likeRight(column, val);
+        }
+        return this;
+    }
 
     public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Collection<?> values) {
         if (ObjectUtil.isAllNotEmpty(values) && !ArrayUtil.isEmpty(values)) {

+ 16 - 0
menduner/menduner-system-biz/Dockerfile2

@@ -0,0 +1,16 @@
+## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性
+## 感谢复旦核博士的建议!灰子哥,牛皮!
+FROM adoptopenjdk/openjdk11
+
+## 将后端项目的 Jar 文件,复制到镜像中
+COPY ./target/citu-module-crm-biz.jar app.jar
+
+## 设置 TZ 时区
+## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
+ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"
+
+## 暴露后端项目的 48089 端口
+EXPOSE 48089
+
+## 启动后端项目
+CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar

+ 6 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/industry/IndustryController.java

@@ -101,4 +101,10 @@ public class IndustryController {
                 BeanUtils.toBean(list, IndustryRespVO.class));
     }
 
+    @GetMapping("/sync/boss")
+    @Operation(summary = "同步Boss行业信息")
+    public void syncBossIndustry() {
+        industryService.syncBossIndustry();
+    }
+
 }

+ 8 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/position/PositionController.java

@@ -15,6 +15,7 @@ import com.citu.module.menduner.system.service.position.PositionService;
 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.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -24,6 +25,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 import static com.citu.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static com.citu.framework.common.pojo.CommonResult.success;
@@ -37,6 +39,7 @@ public class PositionController {
     @Resource
     private PositionService positionService;
 
+
     @PostMapping("/create")
     @Operation(summary = "创建职位信息")
     @PreAuthorize("@ss.hasPermission('menduner:system:position:create')")
@@ -99,4 +102,9 @@ public class PositionController {
                 BeanUtils.toBean(list, PositionRespVO.class));
     }
 
+    @GetMapping("/sync/boss")
+    @Operation(summary = "同步Boss职位类型")
+    public void syncBossPosition() {
+        positionService.syncBossPosition();
+    }
 }

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

@@ -20,7 +20,7 @@ public interface AreaMapper extends BaseMapperX<AreaDO> {
 
     default PageResult<AreaDO> selectPage(AreaPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<AreaDO>()
-                .likeIfPresent(AreaDO::getName, reqVO.getName())
+                .likeRightIfPresent(AreaDO::getName, reqVO.getName())
                 .eqIfPresent(AreaDO::getType, reqVO.getType())
                 .eqIfPresent(AreaDO::getParentId, reqVO.getParentId())
                 .betweenIfPresent(AreaDO::getCreateTime, reqVO.getCreateTime())
@@ -30,7 +30,7 @@ public interface AreaMapper extends BaseMapperX<AreaDO> {
 
     default List<AreaDO> selectList(AreaListReqVO reqVO) {
         return selectList(new LambdaQueryWrapperX<AreaDO>()
-                .likeIfPresent(AreaDO::getName, reqVO.getName())
+                .likeRightIfPresent(AreaDO::getName, reqVO.getName())
                 .eqIfPresent(AreaDO::getType, reqVO.getType())
                 .eqIfPresent(AreaDO::getParentId, reqVO.getParentId())
                 .betweenIfPresent(AreaDO::getCreateTime, reqVO.getCreateTime())

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/certificate/CertificateMapper.java

@@ -17,8 +17,8 @@ public interface CertificateMapper extends BaseMapperX<CertificateDO> {
 
     default PageResult<CertificateDO> selectPage(CertificatePageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<CertificateDO>()
-                .likeIfPresent(CertificateDO::getNameCn, reqVO.getNameCn())
-                .likeIfPresent(CertificateDO::getNameEn, reqVO.getNameEn())
+                .likeRightIfPresent(CertificateDO::getNameCn, reqVO.getNameCn())
+                .likeRightIfPresent(CertificateDO::getNameEn, reqVO.getNameEn())
                 .eqIfPresent(CertificateDO::getParentId, reqVO.getParentId())
                 .eqIfPresent(CertificateDO::getLevel, reqVO.getLevel())
                 .betweenIfPresent(CertificateDO::getCreateTime, reqVO.getCreateTime())

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

@@ -18,7 +18,7 @@ public interface CvAttachmentMapper extends BaseMapperX<CvAttachmentDO> {
     default PageResult<CvAttachmentDO> selectPage(CvAttachmentPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<CvAttachmentDO>()
                 .eqIfPresent(CvAttachmentDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(CvAttachmentDO::getTitle, reqVO.getTitle())
+                .likeRightIfPresent(CvAttachmentDO::getTitle, reqVO.getTitle())
                 .eqIfPresent(CvAttachmentDO::getUrl, reqVO.getUrl())
                 .betweenIfPresent(CvAttachmentDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(CvAttachmentDO::getId));

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/eduexp/EduExpMapper.java

@@ -19,11 +19,11 @@ public interface EduExpMapper extends BaseMapperX<EduExpDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<EduExpDO>()
                 .eqIfPresent(EduExpDO::getUserId, reqVO.getUserId())
                 .eqIfPresent(EduExpDO::getSchoolId, reqVO.getSchoolId())
-                .likeIfPresent(EduExpDO::getSchoolName, reqVO.getSchoolName())
+                .likeRightIfPresent(EduExpDO::getSchoolName, reqVO.getSchoolName())
                 .eqIfPresent(EduExpDO::getEducationType, reqVO.getEducationType())
                 .eqIfPresent(EduExpDO::getEducationSystemType, reqVO.getEducationSystemType())
                 .eqIfPresent(EduExpDO::getMajorId, reqVO.getMajorId())
-                .eqIfPresent(EduExpDO::getMajor, reqVO.getMajor())
+                .likeRightIfPresent(EduExpDO::getMajor, reqVO.getMajor())
                 .betweenIfPresent(EduExpDO::getStartTime, reqVO.getStartTime())
                 .betweenIfPresent(EduExpDO::getEndTime, reqVO.getEndTime())
                 .eqIfPresent(EduExpDO::getContent, reqVO.getContent())

+ 9 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/industry/IndustryMapper.java

@@ -21,18 +21,23 @@ public interface IndustryMapper extends BaseMapperX<IndustryDO> {
 
     default PageResult<IndustryDO> selectPage(IndustryPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<IndustryDO>()
-                .eqIfPresent(IndustryDO::getNameCn, reqVO.getNameCn())
-                .eqIfPresent(IndustryDO::getNameEn, reqVO.getNameEn())
+                .likeRightIfPresent(IndustryDO::getNameCn, reqVO.getNameCn())
+                .likeRightIfPresent(IndustryDO::getNameEn, reqVO.getNameEn())
                 .betweenIfPresent(IndustryDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(IndustryDO::getUpdateTime));
     }
 
     default List<IndustryDO> selectList(IndustryListReqVO reqVO) {
         return selectList(new LambdaQueryWrapperX<IndustryDO>()
-                .eqIfPresent(IndustryDO::getNameCn, reqVO.getNameCn())
-                .eqIfPresent(IndustryDO::getNameEn, reqVO.getNameEn())
+                .likeRightIfPresent(IndustryDO::getNameCn, reqVO.getNameCn())
+                .likeRightIfPresent(IndustryDO::getNameEn, reqVO.getNameEn())
                 .betweenIfPresent(IndustryDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(IndustryDO::getUpdateTime));
     }
 
+    /**
+     * 清空行业数据
+     **/
+    Integer truncate();
+
 }

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/major/MajorMapper.java

@@ -17,8 +17,8 @@ public interface MajorMapper extends BaseMapperX<MajorDO> {
 
     default PageResult<MajorDO> selectPage(MajorPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<MajorDO>()
-                .eqIfPresent(MajorDO::getNameCn, reqVO.getNameCn())
-                .eqIfPresent(MajorDO::getNameEn, reqVO.getNameEn())
+                .likeRightIfPresent(MajorDO::getNameCn, reqVO.getNameCn())
+                .likeRightIfPresent(MajorDO::getNameEn, reqVO.getNameEn())
                 .eqIfPresent(MajorDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(MajorDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(MajorDO::getId));

+ 11 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/position/PositionMapper.java

@@ -20,22 +20,27 @@ public interface PositionMapper extends BaseMapperX<PositionDO> {
 
     default PageResult<PositionDO> selectPage(PositionPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<PositionDO>()
-                .eqIfPresent(PositionDO::getNameCn, reqVO.getNameCn())
-                .eqIfPresent(PositionDO::getNameEn, reqVO.getNameEn())
+                .likeRightIfPresent(PositionDO::getNameCn, reqVO.getNameCn())
+                .likeRightIfPresent(PositionDO::getNameEn, reqVO.getNameEn())
                 .eqIfPresent(PositionDO::getParentId, reqVO.getParentId())
                 .eqIfPresent(PositionDO::getLevel, reqVO.getLevel())
                 .betweenIfPresent(PositionDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(PositionDO::getId));
+                .orderByAsc(PositionDO::getId));
     }
 
     default List<PositionDO> selectList(PositionListReqVO reqVO) {
         return selectList(new LambdaQueryWrapperX<PositionDO>()
-                .eqIfPresent(PositionDO::getNameCn, reqVO.getNameCn())
-                .eqIfPresent(PositionDO::getNameEn, reqVO.getNameEn())
+                .likeRightIfPresent(PositionDO::getNameCn, reqVO.getNameCn())
+                .likeRightIfPresent(PositionDO::getNameEn, reqVO.getNameEn())
                 .eqIfPresent(PositionDO::getParentId, reqVO.getParentId())
                 .eqIfPresent(PositionDO::getLevel, reqVO.getLevel())
                 .betweenIfPresent(PositionDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(PositionDO::getId));
+                .orderByAsc(PositionDO::getId));
     }
 
+    /**
+     * 清空职位数据
+     **/
+    Integer truncate();
+
 }

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

@@ -19,7 +19,7 @@ public interface SchoolMapper extends BaseMapperX<SchoolDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<SchoolDO>()
                 .likeIfPresent(SchoolDO::getName, reqVO.getName())
                 .eqIfPresent(SchoolDO::getAreaId, reqVO.getAreaId())
-                .eqIfPresent(SchoolDO::getAddress, reqVO.getAddress())
+                .likeRightIfPresent(SchoolDO::getAddress, reqVO.getAddress())
                 .eqIfPresent(SchoolDO::getLongitude, reqVO.getLongitude())
                 .eqIfPresent(SchoolDO::getLatitude, reqVO.getLatitude())
                 .eqIfPresent(SchoolDO::getStatus, reqVO.getStatus())

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/userinfo/UserInfoMapper.java

@@ -18,11 +18,11 @@ public interface UserInfoMapper extends BaseMapperX<UserInfoDO> {
     default PageResult<UserInfoDO> selectPage(UserInfoPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<UserInfoDO>()
                 .eqIfPresent(UserInfoDO::getUserId, reqVO.getUserId())
-                .likeIfPresent(UserInfoDO::getName, reqVO.getName())
+                .likeRightIfPresent(UserInfoDO::getName, reqVO.getName())
                 .eqIfPresent(UserInfoDO::getSex, reqVO.getSex())
                 .eqIfPresent(UserInfoDO::getAvatar, reqVO.getAvatar())
-                .eqIfPresent(UserInfoDO::getPhone, reqVO.getPhone())
-                .eqIfPresent(UserInfoDO::getEmail, reqVO.getEmail())
+                .likeRightIfPresent(UserInfoDO::getPhone, reqVO.getPhone())
+                .likeRightIfPresent(UserInfoDO::getEmail, reqVO.getEmail())
                 .eqIfPresent(UserInfoDO::getWxCode, reqVO.getWxCode())
                 .eqIfPresent(UserInfoDO::getBirthday, reqVO.getBirthday())
                 .eqIfPresent(UserInfoDO::getMaritalStatus, reqVO.getMaritalStatus())

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

@@ -18,7 +18,7 @@ public interface UserSkillMapper extends BaseMapperX<UserSkillDO> {
     default PageResult<UserSkillDO> selectPage(UserSkillPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<UserSkillDO>()
                 .eqIfPresent(UserSkillDO::getUserId, reqVO.getUserId())
-                .likeIfPresent(UserSkillDO::getName, reqVO.getName())
+                .likeRightIfPresent(UserSkillDO::getName, reqVO.getName())
                 .eqIfPresent(UserSkillDO::getLevel, reqVO.getLevel())
                 .betweenIfPresent(UserSkillDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(UserSkillDO::getId));

+ 3 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/workexp/WorkExpMapper.java

@@ -19,11 +19,11 @@ public interface WorkExpMapper extends BaseMapperX<WorkExpDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<WorkExpDO>()
                 .eqIfPresent(WorkExpDO::getUserId, reqVO.getUserId())
                 .eqIfPresent(WorkExpDO::getEnterpriseId, reqVO.getEnterpriseId())
-                .likeIfPresent(WorkExpDO::getEnterpriseName, reqVO.getEnterpriseName())
+                .likeRightIfPresent(WorkExpDO::getEnterpriseName, reqVO.getEnterpriseName())
                 .eqIfPresent(WorkExpDO::getIndustryId, reqVO.getIndustryId())
-                .likeIfPresent(WorkExpDO::getDeptName, reqVO.getDeptName())
+                .likeRightIfPresent(WorkExpDO::getDeptName, reqVO.getDeptName())
                 .eqIfPresent(WorkExpDO::getPositionId, reqVO.getPositionId())
-                .likeIfPresent(WorkExpDO::getPositionName, reqVO.getPositionName())
+                .likeRightIfPresent(WorkExpDO::getPositionName, reqVO.getPositionName())
                 .betweenIfPresent(WorkExpDO::getStartTime, reqVO.getStartTime())
                 .betweenIfPresent(WorkExpDO::getEndTime, reqVO.getEndTime())
                 .eqIfPresent(WorkExpDO::getPayType, reqVO.getPayType())

+ 5 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/industry/IndustryService.java

@@ -62,4 +62,9 @@ public interface IndustryService {
      */
     List<IndustryDO> getIndustryList(IndustryListReqVO pageReqVO);
 
+    /**
+     * 同步boss行业数据
+     */
+    void syncBossIndustry();
+
 }

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

@@ -7,14 +7,16 @@ import com.citu.module.menduner.system.controller.admin.industry.vo.IndustryPage
 import com.citu.module.menduner.system.controller.admin.industry.vo.IndustrySaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.industry.IndustryDO;
 import com.citu.module.menduner.system.dal.mysql.industry.IndustryMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
-
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
-
-import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.INDUSTRY_NOT_EXISTS;
@@ -25,6 +27,7 @@ import static com.citu.module.menduner.system.enums.ErrorCodeConstants.INDUSTRY_
  *
  * @author Rayson
  */
+@Slf4j
 @Service
 @Validated
 public class IndustryServiceImpl implements IndustryService {
@@ -32,6 +35,10 @@ public class IndustryServiceImpl implements IndustryService {
     @Resource
     private IndustryMapper industryMapper;
 
+
+    @Resource
+    private RestTemplate restTemplate;
+
     @Override
     public Long createIndustry(IndustrySaveReqVO createReqVO) {
         // 插入
@@ -78,4 +85,53 @@ public class IndustryServiceImpl implements IndustryService {
     public List<IndustryDO> getIndustryList(IndustryListReqVO pageReqVO) {
         return industryMapper.selectList(pageReqVO);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void syncBossIndustry() {
+        String url = "https://www.zhipin.com/wapi/zpCommon/data/industry.json";
+        ResponseEntity<Map> responseEntity = restTemplate.getForEntity(url, Map.class);
+        log.debug("[httpRequest][RequestType({}) 的响应结果({})", responseEntity);
+        if (!responseEntity.getStatusCode().is2xxSuccessful()) {
+            log.error("同步Boss职位类型错误");
+        }
+        // 获取响应体中的数据
+        Map<String, Object> responseBody = responseEntity.getBody();
+        List<Map<String, Object>> zpData = (List<Map<String, Object>>) responseBody.get("zpData");
+
+        // 清空数据
+        industryMapper.truncate();
+        // 解析JSON数据并构建对象列表
+        for (Map<String, Object> industry : zpData) {
+            parseAndSaveIndustry(industry, null, 1);
+        }
+
+    }
+
+    /**
+     * @param industry 职位对象
+     * @param parentId 上级职位code
+     * @param level    当前层级
+     * @return void
+     * @description 递归解析position
+     * @author rayson
+     * @date 2024/5/8 上午11:47
+     **/
+    private void parseAndSaveIndustry(Map<String, Object> industry, Long parentId, int level) {
+        if (null == parentId) {
+            parentId = 0L;
+        }
+        String name = industry.get("name").toString();
+        IndustryDO obj = IndustryDO.builder().nameCn(name).parentId(parentId).level(level).build();
+
+        industryMapper.insert(obj);
+
+        // 解析子集并保存
+        List<Map<String, Object>> subLevelModelList = (List<Map<String, Object>>) industry.get("subLevelModelList");
+        if (null != subLevelModelList) {
+            for (Map<String, Object> subLevel : subLevelModelList) {
+                parseAndSaveIndustry(subLevel, obj.getId(), obj.getLevel() + 1);
+            }
+        }
+    }
 }

+ 5 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/position/PositionService.java

@@ -59,4 +59,9 @@ public interface PositionService {
      * @return 职位信息分页
      */
     List<PositionDO> getPositionList(PositionListReqVO pageReqVO);
+
+    /**
+     * 同步boss职位类型
+     */
+    void syncBossPosition();
 }

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

@@ -7,13 +7,16 @@ import com.citu.module.menduner.system.controller.admin.position.vo.PositionPage
 import com.citu.module.menduner.system.controller.admin.position.vo.PositionSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.position.PositionDO;
 import com.citu.module.menduner.system.dal.mysql.position.PositionMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
-
-import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.POSITION_NOT_EXISTS;
@@ -23,6 +26,7 @@ import static com.citu.module.menduner.system.enums.ErrorCodeConstants.POSITION_
  *
  * @author Rayson
  */
+@Slf4j
 @Service
 @Validated
 public class PositionServiceImpl implements PositionService {
@@ -30,7 +34,39 @@ public class PositionServiceImpl implements PositionService {
     @Resource
     private PositionMapper positionMapper;
 
+
+    @Resource
+    private RestTemplate restTemplate;
+
+    /**
+     * @param position 职位对象
+     * @param parentId 上级职位code
+     * @param level    当前层级
+     * @return void
+     * @description 递归解析position
+     * @author rayson
+     * @date 2024/5/8 上午11:47
+     **/
+    private void parseAndSavePosition(Map<String, Object> position, Long parentId, int level) {
+        if (null == parentId) {
+            parentId = 0L;
+        }
+        String name = position.get("name").toString();
+        PositionDO obj = PositionDO.builder().nameCn(name).parentId(parentId).level(level).build();
+
+        positionMapper.insert(obj);
+
+        // 解析子集并保存
+        List<Map<String, Object>> subLevelModelList = (List<Map<String, Object>>) position.get("subLevelModelList");
+        if (null != subLevelModelList) {
+            for (Map<String, Object> subLevel : subLevelModelList) {
+                parseAndSavePosition(subLevel, obj.getId(), obj.getLevel() + 1);
+            }
+        }
+    }
+
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Long createPosition(PositionSaveReqVO createReqVO) {
         // 插入
         PositionDO position = BeanUtils.toBean(createReqVO, PositionDO.class);
@@ -76,4 +112,28 @@ public class PositionServiceImpl implements PositionService {
     public List<PositionDO> getPositionList(PositionListReqVO pageReqVO) {
         return positionMapper.selectList(pageReqVO);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void syncBossPosition() {
+        String url = "https://www.zhipin.com/wapi/zpCommon/data/getCityShowPosition";
+        ResponseEntity<Map> responseEntity = restTemplate.getForEntity(url, Map.class);
+        log.debug("[httpRequest][RequestType({}) 的响应结果({})", responseEntity);
+        if (!responseEntity.getStatusCode().is2xxSuccessful()) {
+            log.error("同步Boss职位类型错误");
+        }
+        // 获取响应体中的数据
+        Map<String, Object> responseBody = responseEntity.getBody();
+        Map<String, Object> zpData = (Map<String, Object>) responseBody.get("zpData");
+        List<Map<String, Object>> positionList = (List<Map<String, Object>>) zpData.get("position");
+
+        // 清空数据
+        positionMapper.truncate();
+        // 解析JSON数据并构建对象列表
+        for (Map<String, Object> position : positionList) {
+            parseAndSavePosition(position, null, 1);
+        }
+
+
+    }
 }

+ 17 - 0
menduner/menduner-system-biz/src/main/resources/mapper/industry/IndustryMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.citu.module.menduner.system.dal.mysql.industry.IndustryMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+
+
+    <select id="truncate" resultType="java.lang.Integer">
+        TRUNCATE TABLE mde_industry
+    </select>
+</mapper>

+ 5 - 0
menduner/menduner-system-biz/src/main/resources/mapper/position/PositionMapper.xml

@@ -9,4 +9,9 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+
+
+    <select id="truncate" resultType="java.lang.Integer">
+        TRUNCATE TABLE mde_position
+    </select>
 </mapper>