浏览代码

1、增加招聘会统计接口
2、切分分析内容记录功能

rayson 4 月之前
父节点
当前提交
be7bd88bdd
共有 31 个文件被更改,包括 752 次插入38 次删除
  1. 14 0
      menduner/menduner-common/src/main/java/com/citu/module/menduner/common/util/LoginUserContext.java
  2. 1 1
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/cv/ConversationStatusEnum.java
  3. 17 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/person/PersonTypeEnum.java
  4. 67 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/fair/FairAnalysisController.java
  5. 37 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/share/ShareController.java
  6. 24 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppPersonResumeController.java
  7. 29 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/student/AppStudentSaveReqVO.java
  8. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/fair/AppRecruitFairController.java
  9. 5 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/analysis/RecruitAnalysisPageReqVO.java
  10. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairJobInfoPageReqVO.java
  11. 4 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairRespVO.java
  12. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairSaveReqVO.java
  13. 33 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/analysis/FairEnterpriseAnalysisReqVO.java
  14. 30 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/analysis/FairUserAnalysisReqVO.java
  15. 0 14
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentSaveReqVO.java
  16. 4 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/fair/FairDO.java
  17. 55 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/share/ShareDO.java
  18. 1 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/fair/FairDetailMapper.java
  19. 21 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/interview/InterviewInviteMapper.java
  20. 1 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobCvRelMapper.java
  21. 5 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentMapper.java
  22. 32 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/share/ShareMapper.java
  23. 48 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairAnalysisService.java
  24. 100 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairAnalysisServiceImpl.java
  25. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairService.java
  26. 11 7
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedService.java
  27. 34 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobAdvertisedServiceImpl.java
  28. 16 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoService.java
  29. 55 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/info/PersonInfoServiceImpl.java
  30. 36 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/share/ShareService.java
  31. 62 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/share/ShareServiceImpl.java

+ 14 - 0
menduner/menduner-common/src/main/java/com/citu/module/menduner/common/util/LoginUserContext.java

@@ -108,6 +108,20 @@ public class LoginUserContext {
         return Long.valueOf(loginUser.getInfo().get(LoginUser.INFO_KEY_DATA_ID));
     }
 
+    /**
+     * 获取当前登录的用户的企业id
+     **/
+    public static Long getEnterpriseId4() {
+        LoginUser loginUser = get2();
+        if(null == loginUser) {
+            return null;
+        }
+        if (!checkEnterprise(loginUser)) {
+            return null;
+        }
+        return Long.valueOf(loginUser.getInfo().get(LoginUser.INFO_KEY_DATA_ID));
+    }
+
     /**
      * 效验当前用户企业信息是否存在
      **/

+ 1 - 1
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/cv/ConversationStatusEnum.java

@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 /**
- * 会话状态(0 邀约 | 已入职 | 已结算 )
+ * 会话状态(0 邀约 | 1已入职 | 2已结算 )
  **/
 @Getter
 @AllArgsConstructor

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

@@ -0,0 +1,17 @@
+package com.citu.module.menduner.system.enums.person;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 人才类型(0求职者 1学生)
+ **/
+@Getter
+@AllArgsConstructor
+public enum PersonTypeEnum {
+    QUESTIONER("0", "求职者"),
+    STUDENT("1", "学生");
+
+    private final String type;
+    private final String name;
+}

+ 67 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/fair/FairAnalysisController.java

@@ -0,0 +1,67 @@
+package com.citu.module.menduner.system.controller.admin.fair;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitInterviewInviteAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitJobCvRelAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.fair.JobFairJobInfoRespVO;
+import com.citu.module.menduner.system.controller.base.fair.analysis.FairEnterpriseAnalysisReqVO;
+import com.citu.module.menduner.system.controller.base.fair.analysis.FairUserAnalysisReqVO;
+import com.citu.module.menduner.system.service.fair.FairAnalysisService;
+import io.swagger.v3.oas.annotations.Operation;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 招聘会数据分析")
+@RestController
+@RequestMapping("/menduner/system/job-fair/analysis")
+@Validated
+public class FairAnalysisController {
+
+    @Resource
+    private FairAnalysisService fairAnalysisService;
+
+    @GetMapping("/enterprise/job")
+    @Operation(summary = "企业职位的情况")
+    public CommonResult<PageResult<JobFairJobInfoRespVO>> enterpriseJobPage
+            (@Valid FairEnterpriseAnalysisReqVO reqVO) {
+        return success(fairAnalysisService.enterpriseJobPage(reqVO));
+    }
+
+    @GetMapping("/enterprise/job/cv-rel")
+    @Operation(summary = "企业职位投递的简历情况")
+    public CommonResult<PageResult<RecruitJobCvRelAnalysisRespVO>> enterpriseJobCVRel
+            (@Valid FairEnterpriseAnalysisReqVO reqVO) {
+        return success(fairAnalysisService.enterpriseJobCVRel(reqVO));
+    }
+
+    @GetMapping("/enterprise/interview-invite")
+    @Operation(summary = "企业职位面试的情况 or 入职情况")
+    public CommonResult<PageResult<RecruitInterviewInviteAnalysisRespVO>> enterpriseInterview
+            (@Valid FairEnterpriseAnalysisReqVO reqVO) {
+        return success(fairAnalysisService.enterpriseInterview(reqVO));
+    }
+
+    @GetMapping("/user/job/cv-rel")
+    @Operation(summary = "用户投递的简历情况")
+    public CommonResult<PageResult<RecruitJobCvRelAnalysisRespVO>> userJobCVRel
+            (@Valid FairUserAnalysisReqVO reqVO) {
+        return success(fairAnalysisService.userJobCVRel(reqVO));
+    }
+
+    @GetMapping("/user/interview-invite")
+    @Operation(summary = "用户面试的情况 or 入职情况")
+    public CommonResult<PageResult<RecruitInterviewInviteAnalysisRespVO>> userInterview
+            (@Valid FairUserAnalysisReqVO reqVO) {
+        return success(fairAnalysisService.userInterview(reqVO));
+    }
+}

+ 37 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/share/ShareController.java

@@ -0,0 +1,37 @@
+package com.citu.module.menduner.system.controller.app.common.share;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.menduner.system.service.share.ShareService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.Map;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "公共 - 分享内容")
+@RestController
+@RequestMapping("/menduner/system/share")
+@Validated
+public class ShareController {
+
+    @Resource
+    private ShareService service;
+
+    @GetMapping("/get")
+    @Operation(summary = "根据key获取分享内容")
+    public CommonResult<Object> get(@RequestParam("key") String key) {
+        return success(service.get(key));
+    }
+
+    @PostMapping("/share")
+    @Operation(summary = "保存分享内容")
+    public CommonResult<String> share(@Valid @RequestBody Map<String, Object> map) {
+        return success(service.share(map, null));
+    }
+
+}

+ 24 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/AppPersonResumeController.java

@@ -2,10 +2,12 @@ package com.citu.module.menduner.system.controller.app.jobhunt.person;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.idempotent.core.annotation.Idempotent;
 import com.citu.framework.idempotent.core.keyresolver.impl.UserIdempotentKeyResolver;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.framework.signature.core.annotation.ApiSignature;
+import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.cvattachment.AppCvAttachmentRespVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.cvattachment.AppCvAttachmentSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.eduexp.AppEduExpRespVO;
@@ -20,23 +22,25 @@ import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppP
 import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppPersonInfoTagReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.skill.AppPersonSkillRespVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.skill.AppPersonSkillSaveReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.person.student.AppStudentSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.trainexp.AppTrainExpRespVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.trainexp.AppTrainExpSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.vo.AppResumeSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.workexp.AppWorkExpRespVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.workexp.AppWorkExpSaveReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentRespVO;
 import com.citu.module.menduner.system.convert.*;
 import com.citu.module.menduner.system.dal.dataobject.cvattachment.CvAttachmentDO;
 import com.citu.module.menduner.system.dal.dataobject.eduexp.EduExpDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobInterestedDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonSkillDO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
 import com.citu.module.menduner.system.dal.dataobject.projectexp.ProjectExpDO;
 import com.citu.module.menduner.system.dal.dataobject.trainexp.TrainExpDO;
 import com.citu.module.menduner.system.dal.dataobject.workexp.WorkExpDO;
 import com.citu.module.menduner.system.service.cvattachment.CvAttachmentService;
 import com.citu.module.menduner.system.service.eduexp.EduExpService;
 import com.citu.module.menduner.system.service.job.JobInterestedService;
-import com.citu.module.menduner.system.service.person.PersonIntegrationService;
 import com.citu.module.menduner.system.service.person.ResumeService;
 import com.citu.module.menduner.system.service.person.info.PersonInfoService;
 import com.citu.module.menduner.system.service.person.skill.PersonSkillService;
@@ -121,6 +125,25 @@ public class AppPersonResumeController {
         return success(personInfoService.saveSimple(reqVO));
     }
 
+    @PreAuthenticated
+    @PostMapping("/student/save")
+    @Operation(summary = "保存学生基本信息")
+    @Idempotent(keyResolver = UserIdempotentKeyResolver.class)
+    public CommonResult<Boolean> saveStudentInfo(@Valid @RequestBody AppStudentSaveReqVO reqVO) {
+        personInfoService.saveStudentInfo(reqVO);
+        return success(true);
+    }
+
+    @PreAuthenticated
+    @PostMapping("/student/get")
+    @Operation(summary = "获取学生基本信息")
+    @Idempotent(keyResolver = UserIdempotentKeyResolver.class)
+    public CommonResult<StudentRespVO> getStudentInfo() {
+        StudentDO student =
+                personInfoService.getStudentInfo(LoginUserContext.getUserId());
+        return success(BeanUtils.toBean(student, StudentRespVO.class));
+    }
+
 
     @PreAuthenticated
     @PostMapping("/tag/update")

+ 29 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/jobhunt/person/student/AppStudentSaveReqVO.java

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.system.controller.app.jobhunt.person.student;
+
+import com.citu.module.menduner.system.controller.base.person.student.StudentSaveReqVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDateTime;
+
+@Data
+@Schema(description = "menduner - 求职端学生保存 Response VO")
+public class AppStudentSaveReqVO extends StudentSaveReqVO {
+
+    @Schema(description = "真实姓名", example = "王五")
+    private String name;
+
+    @Schema(description = "头像地址")
+    private String avatar;
+
+    @Schema(description = "用户性别")
+    private String sex;
+
+    @Schema(description = "出生日期")
+    private LocalDateTime birthday;
+
+    @Schema(description = "联系手机号")
+    private String phone;
+
+}

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/fair/AppRecruitFairController.java

@@ -104,7 +104,7 @@ public class AppRecruitFairController {
     @Operation(summary = "效验是否有权限参加招聘会")
     public CommonResult<Boolean> checkPermission(@RequestParam("jobFairId") Long jobFairId) {
         fairService.checkFairWhite(jobFairId);
-//        fairService.syncJob(jobFairId);
+        fairService.syncJob(jobFairId);
         return success(true);
     }
 

+ 5 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/analysis/RecruitAnalysisPageReqVO.java

@@ -4,14 +4,19 @@ import com.citu.module.menduner.common.dto.TimeRangeBasePageReqVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.List;
 
 @Schema(description = "menduner - 统计分析公共 Request VO")
 @Data
 @AllArgsConstructor
+@NoArgsConstructor
 public class RecruitAnalysisPageReqVO extends TimeRangeBasePageReqVO {
 
+    @Schema(description = "招聘会id", example = "1")
+    private Long jobFairId;
+
     @Schema(description = "企业id")
     private Long enterpriseId;
 
@@ -26,6 +31,4 @@ public class RecruitAnalysisPageReqVO extends TimeRangeBasePageReqVO {
 
     @Schema(description = "职位状态")
     private String jobStatus;
-
-
 }

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairJobInfoPageReqVO.java

@@ -20,6 +20,9 @@ public class JobFairJobInfoPageReqVO extends PageParam {
     @Schema(description = "企业id")
     private Long enterpriseId;
 
+    @Schema(description = "职位id")
+    private Long jobId;
+
     @Schema(description = "关键字")
     private String keyword;
 

+ 4 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairRespVO.java

@@ -86,6 +86,10 @@ public class JobFairRespVO {
     @ExcelProperty("分享背景图")
     private String shareImg;
 
+    @Schema(description = "内容背景图")
+    @ExcelProperty("内容背景图")
+    private String contentImg;
+
     @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("开始时间")
     private LocalDateTime startTime;

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/JobFairSaveReqVO.java

@@ -70,6 +70,9 @@ public class JobFairSaveReqVO {
     @Schema(description = "分享背景图")
     private String shareImg;
 
+    @Schema(description = "内容背景图")
+    private String contentImg;
+
     @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "开始时间不能为空")
     private LocalDateTime startTime;

+ 33 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/analysis/FairEnterpriseAnalysisReqVO.java

@@ -0,0 +1,33 @@
+package com.citu.module.menduner.system.controller.base.fair.analysis;
+
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "招聘会企业分析公共查询条件 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class FairEnterpriseAnalysisReqVO  extends PageParam {
+
+
+    @Schema(description = "招聘会id", example = "1")
+    private Long jobFairId;
+
+    @Schema(description = "企业id", example = "1")
+    private Long enterpriseId;
+
+    @Schema(description = "职位id", example = "1")
+    private Long jobId;
+
+    @Schema(description = "简历投递状态(0新投递|1已查看)", example = "1")
+    private String jobCvRelStatus;
+
+    @Schema(description = "面试状态(0待接受|1待面试|2即将面试|3已完成|4已反馈|5未能爽约|98拒绝|99已取消)", example = "1")
+    private String interviewInviteStatus;
+
+    @Schema(description = "面试会话状态(0邀约|1已入职|2已结算)", example = "1")
+    private String conversationStatus;
+}

+ 30 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/fair/analysis/FairUserAnalysisReqVO.java

@@ -0,0 +1,30 @@
+package com.citu.module.menduner.system.controller.base.fair.analysis;
+
+import com.citu.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "招聘会企业分析公共查询条件 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class FairUserAnalysisReqVO extends PageParam {
+
+
+    @Schema(description = "招聘会id", example = "1")
+    private Long jobFairId;
+
+    @Schema(description = "用户id", example = "1")
+    private Long userId;
+
+    @Schema(description = "简历投递状态(0新投递|1已查看)", example = "1")
+    private String jobCvRelStatus;
+
+    @Schema(description = "面试状态(0待接受|1待面试|2即将面试|3已完成|4已反馈|5未能爽约|98拒绝|99已取消)", example = "1")
+    private String interviewInviteStatus;
+
+    @Schema(description = "面试会话状态(0邀约|1已入职|2已结算)", example = "1")
+    private String conversationStatus;
+}

+ 0 - 14
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentSaveReqVO.java

@@ -13,23 +13,12 @@ public class StudentSaveReqVO {
     @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "58")
     private Long id;
 
-    @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29180")
-    @NotNull(message = "用户id不能为空")
-    private Long userId;
-
     @Schema(description = "人才id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18403")
-    @NotNull(message = "人才id不能为空")
     private Long personId;
 
-    @Schema(description = "学生毕业状态 0.未毕业 1.毕业", example = "1")
-    private String graduationStatus;
-
     @Schema(description = "0.待就业 1.就业", example = "1")
     private Integer status;
 
-    @Schema(description = "学生就业企业id", example = "12769")
-    private Long enterpriseId;
-
     @Schema(description = "学号")
     private String studentNo;
 
@@ -45,9 +34,6 @@ public class StudentSaveReqVO {
     @Schema(description = "身份证反面")
     private String idCardImg2;
 
-    @Schema(description = "学生认证状态 0.未认证 1.已认证 ", example = "1")
-    private String authStatus;
-
     @Schema(description = "学校id", example = "23869")
     private Long schoolId;
 

+ 4 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/fair/FairDO.java

@@ -103,6 +103,10 @@ public class FairDO extends TenantBaseDO {
      * 分享背景图
      */
     private String shareImg;
+    /**
+     * 内容背景图
+     */
+    private String contentImg;
     /**
      * 开始时间
      */

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

@@ -0,0 +1,55 @@
+package com.citu.module.menduner.system.dal.dataobject.share;
+
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.citu.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * 分享 DO
+ *
+ * @author Rayson
+ */
+@TableName(value = "mde_share", autoResultMap = true)
+@KeySequence("mde_share_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ShareDO extends TenantBaseDO {
+
+    /**
+     * id
+     */
+    @TableId
+    private Long id;
+    /**
+     * 用户id
+     */
+    private Long userId;
+    /**
+     * 企业id
+     */
+    private Long enterpriseId;
+    /**
+     * key
+     */
+    private String shareKey;
+    /**
+     * 内容
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private Map<String, Object> shareValue;
+    /**
+     * 过期时间
+     */
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
+    private LocalDateTime expireTime;
+
+}

+ 1 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/fair/FairDetailMapper.java

@@ -129,6 +129,7 @@ public interface FairDetailMapper extends BaseMapperX<FairDetailDO> {
         query.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, FairDetailDO::getEnterpriseId);
         query.eqIfPresent(FairDetailDO::getJobFairId, reqVO.getJobFairId());
         query.eqIfPresent(FairDetailDO::getEnterpriseId, reqVO.getEnterpriseId());
+        query.eqIfPresent(FairDetailDO::getJobId, reqVO.getJobId());
         query.likeIfExists(JobAdvertisedDO::getName, reqVO.getKeyword());
         query.eq(FairDetailDO::getStatus, JobFairStatusEnum.NORMAL.getStatus());
         if (null != reqVO.getPositionId()) {

+ 21 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/interview/InterviewInviteMapper.java

@@ -6,12 +6,12 @@ import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
 import com.citu.module.menduner.system.controller.app.jobhunt.interview.vo.AppInterviewInvitePageReqVO;
-import com.citu.module.menduner.system.controller.base.interview.InterviewInviteDetailRespVO;
 import com.citu.module.menduner.system.controller.app.recruit.interview.vo.AppRecruitInterviewInviteReqPageVO;
 import com.citu.module.menduner.system.controller.app.recruit.interview.vo.AppRecruitInterviewInviteRespVO;
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitInterviewInviteAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.interview.InterviewInviteDetailRespVO;
 import com.citu.module.menduner.system.controller.base.interview.InterviewInvitePageReqVO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseTalentPoolDO;
@@ -138,10 +138,10 @@ public interface InterviewInviteMapper extends BaseMapperX<InterviewInviteDO> {
         // 过滤不合适
         setUnfitCandidate(query);
 
-        query.leftJoin(EnterpriseTalentPoolDO.class,on->
+        query.leftJoin(EnterpriseTalentPoolDO.class, on ->
                 on.eq(EnterpriseTalentPoolDO::getUserId, InterviewInviteDO::getUserId)
                         .eq(EnterpriseTalentPoolDO::getEnterpriseId, enterpriseId)
-                );
+        );
 
         query.orderByDesc(InterviewInviteDO::getUpdateTime);
 
@@ -229,6 +229,19 @@ public interface InterviewInviteMapper extends BaseMapperX<InterviewInviteDO> {
      **/
     default PageResult<RecruitInterviewInviteAnalysisRespVO> getAnalysisDetail(
             RecruitAnalysisPageReqVO reqVO, LocalDateTime startTime, LocalDateTime endTime, String status) {
+        return getAnalysisDetail(reqVO, startTime, endTime, status, ConversationStatusEnum.INVITE.getStatus());
+    }
+
+    /**
+     * 面试邀约明细
+     *
+     * @param reqVO     公共条件
+     * @param startTime 开始时间
+     * @param endTime   结束时间
+     * @param status    面试状态
+     **/
+    default PageResult<RecruitInterviewInviteAnalysisRespVO> getAnalysisDetail(
+            RecruitAnalysisPageReqVO reqVO, LocalDateTime startTime, LocalDateTime endTime, String status, String conversationStatus) {
         MPJLambdaWrapperX<InterviewInviteDO> query = new MPJLambdaWrapperX<>();
         query.selectAll(InterviewInviteDO.class);
         query.selectAssociation(PersonInfoDO.class, AppRecruitInterviewInviteRespVO::getPerson);
@@ -243,7 +256,7 @@ public interface InterviewInviteMapper extends BaseMapperX<InterviewInviteDO> {
         query.inIfPresent(InterviewInviteDO::getInviteUserId, reqVO.getUserId());
         query.eqIfPresent(InterviewInviteDO::getJobId, reqVO.getJobId());
         query.eqIfPresent(InterviewInviteDO::getStatus, status);
-        query.eqIfPresent(InterviewInviteDO::getConversationStatus, ConversationStatusEnum.INVITE.getStatus());
+        query.eq(InterviewInviteDO::getConversationStatus, conversationStatus);
         query.between(null != startTime && null != endTime, JobCvRelDO::getCreateTime, startTime, endTime);
 
         query.orderByDesc(InterviewInviteDO::getUpdateTime);
@@ -251,8 +264,10 @@ public interface InterviewInviteMapper extends BaseMapperX<InterviewInviteDO> {
         return selectJoinPage(reqVO, RecruitInterviewInviteAnalysisRespVO.class, query);
     }
 
-    /** 效验该时间段是否其他用户预约 **/
-    default boolean checkExistsTime(Long id,Long enterpriseId,Long userId,Long jobId,LocalDateTime time) {
+    /**
+     * 效验该时间段是否其他用户预约
+     **/
+    default boolean checkExistsTime(Long id, Long enterpriseId, Long userId, Long jobId, LocalDateTime time) {
         return selectCount(new LambdaQueryWrapperX<InterviewInviteDO>()
                 .eqIfPresent(InterviewInviteDO::getId, id)
                 .eq(InterviewInviteDO::getEnterpriseId, enterpriseId)

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

@@ -347,6 +347,7 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
 
         wrapper.eqIfPresent(JobCvRelDO::getEnterpriseId, reqVO.getEnterpriseId());
         wrapper.inIfPresent(JobCvRelDO::getPublishUserId, reqVO.getUserId());
+        wrapper.eqIfPresent(JobCvRelDO::getJobFairId, reqVO.getJobFairId());
         wrapper.eqIfPresent(JobCvRelDO::getJobId, reqVO.getJobId());
         wrapper.eqIfPresent(JobCvRelDO::getStatus, status);
         wrapper.betweenIfPresent(JobCvRelDO::getCreateTime, startTime, endTime);

+ 5 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentMapper.java

@@ -6,6 +6,7 @@ import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPageReqVO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
+import com.citu.module.menduner.system.dal.dataobject.user.UserAccountDO;
 import org.apache.ibatis.annotations.Mapper;
 
 
@@ -42,4 +43,8 @@ public interface StudentMapper extends BaseMapperX<StudentDO> {
                 .orderByDesc(StudentDO::getId));
     }
 
+    default StudentDO selectByUserId(Long userId) {
+        return selectOne(new LambdaQueryWrapperX<StudentDO>().eq(StudentDO::getUserId, userId));
+    }
+
 }

+ 32 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/share/ShareMapper.java

@@ -0,0 +1,32 @@
+package com.citu.module.menduner.system.dal.mysql.share;
+
+import com.alibaba.fastjson.JSON;
+import com.citu.framework.mybatis.core.mapper.BaseMapperX;
+import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.module.menduner.system.dal.dataobject.share.ShareDO;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Map;
+
+/**
+ * 分享 Mapper
+ *
+ * @author Rayson
+ */
+@Mapper
+public interface ShareMapper extends BaseMapperX<ShareDO> {
+
+    default ShareDO selectByKey(String key) {
+        return selectOne(ShareDO::getShareKey, key);
+    }
+
+    default ShareDO selectByValue(Long userId, Long enterpriseId, Map<String, Object> value) {
+        LambdaQueryWrapperX<ShareDO> queryWrapper = new LambdaQueryWrapperX<>();
+        queryWrapper
+                .eqIfPresent(ShareDO::getUserId, userId)
+                .eqIfPresent(ShareDO::getEnterpriseId, enterpriseId)
+                .apply("JSON_CONTAINS(share_value, {0})", JSON.toJSONString(value));
+        return selectOne(queryWrapper);
+    }
+}

+ 48 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairAnalysisService.java

@@ -0,0 +1,48 @@
+package com.citu.module.menduner.system.service.fair;
+
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitInterviewInviteAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitJobCvRelAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.fair.JobFairJobInfoRespVO;
+import com.citu.module.menduner.system.controller.base.fair.analysis.FairEnterpriseAnalysisReqVO;
+import com.citu.module.menduner.system.controller.base.fair.analysis.FairUserAnalysisReqVO;
+
+/**
+ * 招聘会统计分析汇总 Service 接口
+ *
+ * @author Rayson
+ */
+public interface FairAnalysisService {
+
+    // ========== 企业 ==========
+
+    /**
+     * 企业职位的情况
+     **/
+    PageResult<JobFairJobInfoRespVO> enterpriseJobPage(FairEnterpriseAnalysisReqVO reqVO);
+
+    /**
+     * 企业职位投递的简历情况
+     **/
+    PageResult<RecruitJobCvRelAnalysisRespVO> enterpriseJobCVRel(FairEnterpriseAnalysisReqVO reqVO);
+
+    /**
+     * 企业职位面试的情况 or 入职情况
+     **/
+    PageResult<RecruitInterviewInviteAnalysisRespVO> enterpriseInterview(FairEnterpriseAnalysisReqVO reqVO);
+
+    // ========== 用户 ==========
+
+    /**
+     * 用户投递的简历情况
+     **/
+    PageResult<RecruitJobCvRelAnalysisRespVO> userJobCVRel(FairUserAnalysisReqVO reqVO);
+
+    /**
+     * 用户面试的情况 or 入职情况
+     **/
+    PageResult<RecruitInterviewInviteAnalysisRespVO> userInterview(FairUserAnalysisReqVO reqVO);
+
+
+}

+ 100 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairAnalysisServiceImpl.java

@@ -0,0 +1,100 @@
+package com.citu.module.menduner.system.service.fair;
+
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitInterviewInviteAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitJobCvRelAnalysisRespVO;
+import com.citu.module.menduner.system.controller.base.fair.JobFairJobInfoPageReqVO;
+import com.citu.module.menduner.system.controller.base.fair.JobFairJobInfoRespVO;
+import com.citu.module.menduner.system.controller.base.fair.analysis.FairEnterpriseAnalysisReqVO;
+import com.citu.module.menduner.system.controller.base.fair.analysis.FairUserAnalysisReqVO;
+import com.citu.module.menduner.system.dal.mysql.interview.InterviewInviteMapper;
+import com.citu.module.menduner.system.dal.mysql.job.JobCvRelMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+
+import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRange;
+
+/**
+ * 招聘会 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class FairAnalysisServiceImpl implements FairAnalysisService {
+
+    @Resource
+    private FairService fairService;
+    @Resource
+    private JobCvRelMapper jobCvRelMapper;
+    @Resource
+    private InterviewInviteMapper interviewInviteMapper;
+
+
+    @Override
+    public PageResult<JobFairJobInfoRespVO> enterpriseJobPage(FairEnterpriseAnalysisReqVO reqVO) {
+        JobFairJobInfoPageReqVO req = new JobFairJobInfoPageReqVO();
+        req.setJobFairId(reqVO.getJobFairId());
+        req.setEnterpriseId(reqVO.getEnterpriseId());
+        req.setJobId(reqVO.getJobId());
+        req.setPageNo(reqVO.getPageNo());
+        req.setPageSize(reqVO.getPageSize());
+        return fairService.getJobFairJobInfoPage(req);
+    }
+
+    @Override
+    public PageResult<RecruitJobCvRelAnalysisRespVO> enterpriseJobCVRel(FairEnterpriseAnalysisReqVO reqVO) {
+        RecruitAnalysisPageReqVO req = buildEnterpriseAnalysisReq(reqVO);
+        LocalDateTime[] timeRange = generateDateTimeRange(req);
+        return jobCvRelMapper.getAnalysisDetail(req, timeRange[0], timeRange[1], reqVO.getJobCvRelStatus());
+    }
+
+    @Override
+    public PageResult<RecruitInterviewInviteAnalysisRespVO> enterpriseInterview(FairEnterpriseAnalysisReqVO reqVO) {
+        RecruitAnalysisPageReqVO req = buildEnterpriseAnalysisReq(reqVO);
+        LocalDateTime[] timeRange = generateDateTimeRange(req);
+        return interviewInviteMapper.getAnalysisDetail(
+                req, timeRange[0], timeRange[1], reqVO.getInterviewInviteStatus(), reqVO.getConversationStatus());
+    }
+
+
+    private RecruitAnalysisPageReqVO buildEnterpriseAnalysisReq(FairEnterpriseAnalysisReqVO reqVO) {
+        RecruitAnalysisPageReqVO req = new RecruitAnalysisPageReqVO();
+        req.setJobFairId(reqVO.getJobFairId());
+        req.setEnterpriseId(reqVO.getEnterpriseId());
+        req.setJobId(reqVO.getJobId());
+        req.setPageNo(reqVO.getPageNo());
+        req.setPageSize(reqVO.getPageSize());
+        return req;
+    }
+
+
+    @Override
+    public PageResult<RecruitJobCvRelAnalysisRespVO> userJobCVRel(FairUserAnalysisReqVO reqVO) {
+        RecruitAnalysisPageReqVO req = buildUserAnalysisReq(reqVO);
+        LocalDateTime[] timeRange = generateDateTimeRange(req);
+        return jobCvRelMapper.getAnalysisDetail(req, timeRange[0], timeRange[1], reqVO.getJobCvRelStatus());
+    }
+
+    @Override
+    public PageResult<RecruitInterviewInviteAnalysisRespVO> userInterview(FairUserAnalysisReqVO reqVO) {
+        RecruitAnalysisPageReqVO req = buildUserAnalysisReq(reqVO);
+        LocalDateTime[] timeRange = generateDateTimeRange(req);
+        return interviewInviteMapper.getAnalysisDetail(
+                req, timeRange[0], timeRange[1], reqVO.getInterviewInviteStatus(), reqVO.getConversationStatus());
+    }
+
+    private RecruitAnalysisPageReqVO buildUserAnalysisReq(FairUserAnalysisReqVO reqVO) {
+        RecruitAnalysisPageReqVO req = new RecruitAnalysisPageReqVO();
+        req.setJobFairId(reqVO.getJobFairId());
+        req.setEnterpriseId(reqVO.getUserId());
+        req.setPageNo(reqVO.getPageNo());
+        req.setPageSize(reqVO.getPageSize());
+        return req;
+    }
+
+}

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/fair/FairService.java

@@ -136,4 +136,7 @@ public interface FairService {
      * 招聘会职位分页查询
      **/
     PageResult<JobFairJobInfoRespVO> getJobFairJobInfoPage(JobFairJobInfoPageReqVO reqVO);
+
+
+
 }

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

@@ -6,12 +6,15 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.module.menduner.system.controller.app.jobhunt.job.vo.AppJobAdvertisedHomeRespVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.job.vo.AppJobAdvertisedPageReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.job.vo.AppJobAdvertisedSimpleRespVO;
-import com.citu.module.menduner.system.controller.app.recruit.job.vo.*;
-import com.citu.module.menduner.system.controller.base.job.JobAdvertisedRenewalReqVO;
+import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobExtendRespVO;
+import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobExtendSaveReqVO;
+import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobRespVO;
+import com.citu.module.menduner.system.controller.app.recruit.job.vo.AppRecruitJobSaveReqVO;
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitJobAnalysisRespVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedPageReqVO;
+import com.citu.module.menduner.system.controller.base.job.JobAdvertisedRenewalReqVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedReqVO;
 import com.citu.module.menduner.system.controller.base.job.JobAdvertisedSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
@@ -89,7 +92,7 @@ public interface JobAdvertisedService {
      * @param source 职位来源
      * @param bizId  职位id
      **/
-    void closeJobAdvertised(String source,Long bizId);
+    void closeJobAdvertised(String source, Long bizId);
 
     /**
      * 根据职位来源和来源关联id启用职位
@@ -97,7 +100,7 @@ public interface JobAdvertisedService {
      * @param source 职位来源
      * @param bizId  职位id
      **/
-    void enableJobAdvertised(String source,Long bizId);
+    void enableJobAdvertised(String source, Long bizId);
 
     /**
      * 根据企业id和职位类型获取职位列表
@@ -237,10 +240,11 @@ public interface JobAdvertisedService {
      * 根据职位id获取职位扩展信息
      **/
     AppRecruitJobExtendRespVO getExtend(Long jobId);
+
     /**
      * 保存职位扩展信息
      **/
-     void saveExtend(AppRecruitJobExtendSaveReqVO reqVO);
+    void saveExtend(AppRecruitJobExtendSaveReqVO reqVO);
 
     // ========== 统计分析 ==========
 
@@ -267,7 +271,7 @@ public interface JobAdvertisedService {
     /**
      * 前N最多人发布的职位类型
      */
-    Map<String, Object[]> getPositionTypeNumTop(RecruitAnalysisPageReqVO reqVO,Integer topNum);
+    Map<String, Object[]> getPositionTypeNumTop(RecruitAnalysisPageReqVO reqVO, Integer topNum);
 
     /**
      * 发布职位统计
@@ -277,6 +281,6 @@ public interface JobAdvertisedService {
     /**
      * 最新发布的前N个职位
      */
-    List<RecruitJobAnalysisRespVO> getNewJob(RecruitAnalysisPageReqVO reqVO,Integer topNum);
+    List<RecruitJobAnalysisRespVO> getNewJob(RecruitAnalysisPageReqVO reqVO, Integer topNum);
 
 }

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

@@ -38,6 +38,7 @@ import com.citu.module.menduner.system.mq.producer.ESProducer;
 import com.citu.module.menduner.system.mq.producer.GraphProducer;
 import com.citu.module.menduner.system.service.area.AreaService;
 import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
+import com.citu.module.menduner.system.service.share.ShareService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Async;
@@ -47,10 +48,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -86,6 +84,8 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     @Resource
     private AreaService areaService;
     @Resource
+    private ShareService shareService;
+    @Resource
     private ESProducer esProducer;
     @Resource
     private GraphProducer producer;
@@ -691,6 +691,31 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
     @Override
     public Object getShareById(Long id) {
 
+//        Object data = shareService.get(key);
+//        if (null != data) {
+//            return data;
+//        }
+//        // 从缓存获取
+//        Map<Object, Object> value =redisTemplate.opsForHash().entries(key);
+//        if (value.isEmpty()) {
+//            return null;
+//        } else {
+//            // 缓存有数据
+//            // 获取缓存的剩余过期时间
+//            String key2 = JOB_SHARE + "_" + key;
+//            Long expireTime = redisTemplate.getExpire(key2, TimeUnit.SECONDS);
+//            if (expireTime == null || expireTime < 0) {
+//                expireTime = 0L;
+//            }
+//            // 将 Map<Object, Object> 转换为 Map<String, Object>
+//            Map<String, Object> stringKeyMap = new HashMap<>(value.size());
+//            for (Map.Entry<Object, Object> entry : value.entrySet()) {
+//                stringKeyMap.put(entry.getKey().toString(), entry.getValue());
+//            }
+//            // 最后一个参数是过期时间,单位是LocalDateTime
+//            shareService.share(key2, stringKeyMap,LocalDateTime.now().plusSeconds(expireTime));
+//            redisTemplate.delete(key2);
+//        }
         Map<Object, Object> value = redisTemplate.opsForHash().entries(JOB_SHARE + "_" + id);
 
         if (null == value || value.isEmpty()) {
@@ -698,11 +723,16 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
         }
 
         return value.get("data");
+
     }
 
     @Override
     public Long share(Map<String, Object> map) {
         // 生成一个唯一的ID
+//        long id = IdUtil.getSnowflakeNextId();
+//        String key = JOB_SHARE + "_" + id;
+//        return shareService.share(key,map, LocalDateTime.now().plusDays(30));
+        // 生成一个唯一的ID
         Long id = IdUtil.getSnowflakeNextId();
         String key = JOB_SHARE + "_" + id;
         // 将数据存入Redis哈希表
@@ -710,7 +740,6 @@ public class JobAdvertisedServiceImpl implements JobAdvertisedService {
 
         // 设置整个键的过期时间(例如:30天后过期)
         redisTemplate.expire(key, 30, TimeUnit.DAYS);
-
         return id;
     }
 

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

@@ -7,10 +7,12 @@ import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppP
 import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppPersonInfoSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppPersonInfoSaveSimpleReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppPersonInfoTagReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.person.student.AppStudentSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.vo.AppInvitePersonRespVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.validation.Valid;
@@ -128,4 +130,18 @@ public interface PersonInfoService {
      * 获取邀请的人才信息
      */
     PageResult<AppInvitePersonRespVO> getInvitePerson(PageParam pageParam);
+
+    /**
+     * 保存学生信息
+     *
+     * @param reqVO 姓名
+     */
+    void saveStudentInfo(AppStudentSaveReqVO reqVO);
+
+    /**
+     * 获取学生信息
+     *
+     * @param userId 用户id
+     */
+    StudentDO getStudentInfo(Long userId);
 }

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

@@ -14,12 +14,16 @@ import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppP
 import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppPersonInfoSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppPersonInfoSaveSimpleReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.resume.AppPersonInfoTagReqVO;
+import com.citu.module.menduner.system.controller.app.jobhunt.person.student.AppStudentSaveReqVO;
 import com.citu.module.menduner.system.controller.app.jobhunt.person.vo.AppInvitePersonRespVO;
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.info.PersonInfoSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
+import com.citu.module.menduner.system.dal.dataobject.person.StudentDO;
 import com.citu.module.menduner.system.dal.mysql.person.PersonInfoMapper;
+import com.citu.module.menduner.system.dal.mysql.person.StudentMapper;
+import com.citu.module.menduner.system.enums.person.PersonTypeEnum;
 import com.citu.module.menduner.system.enums.sync.SyncConstants;
 import com.citu.module.menduner.system.mq.producer.GraphProducer;
 import org.springframework.stereotype.Service;
@@ -28,7 +32,6 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -50,6 +53,8 @@ public class PersonInfoServiceImpl implements PersonInfoService {
     @Resource
     private PersonInfoMapper personInfoMapper;
 
+    @Resource
+    private StudentMapper studentMapper;
 
     @Resource
     private GraphProducer graphProducer;
@@ -268,4 +273,53 @@ public class PersonInfoServiceImpl implements PersonInfoService {
     public PageResult<AppInvitePersonRespVO> getInvitePerson(PageParam pageParam) {
         return personInfoMapper.queryInvitePersonByUserId(LoginUserContext.getUserId(), pageParam);
     }
+
+    @Override
+    @DSTransactional
+    public void saveStudentInfo(AppStudentSaveReqVO reqVO) {
+        if (StringUtils.hasText(reqVO.getPhone()) && !ValidationUtils.isMobile(reqVO.getPhone())) {
+            // 手机号不合法
+            throw exception(MDE_PERSON_PHONE_ERROR);
+        }
+
+        Long userId = LoginUserContext.getUserId();
+
+        StudentDO student = studentMapper.selectByUserId(userId);
+        StudentDO reqObj = BeanUtils.toBean(reqVO, StudentDO.class);
+        reqObj.setUserId(userId);
+        if (null == student) {
+            if (!StringUtils.hasText(reqVO.getName())) {
+                throw exception(MDE_PERSON_NAME_NOT_EXISTS);
+            }
+            if (!StringUtils.hasText(reqVO.getPhone())) {
+                throw exception(MDE_PERSON_PHONE_NOT_EXISTS);
+            }
+            // 新增
+            PersonInfoDO userInfo = PersonInfoDO.builder()
+                    .userId(userId)
+                    .type(PersonTypeEnum.STUDENT.getType())
+                    .avatar(reqVO.getAvatar())
+                    .name(reqVO.getName())
+                    .sex(reqVO.getSex())
+                    .birthday(reqVO.getBirthday())
+                    .phone(reqVO.getPhone())
+                    .build();
+            personInfoMapper.insert(userInfo);
+
+
+            reqObj.setPersonId(userInfo.getId());
+
+            studentMapper.insert(reqObj);
+
+        } else {
+            // 修改
+            reqObj.setId(student.getId());
+            studentMapper.updateById(reqObj);
+        }
+    }
+
+    @Override
+    public StudentDO getStudentInfo(Long userId) {
+        return studentMapper.selectByUserId(userId);
+    }
 }

+ 36 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/share/ShareService.java

@@ -0,0 +1,36 @@
+package com.citu.module.menduner.system.service.share;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * 分享内容 Service 接口
+ *
+ * @author Rayson
+ */
+public interface ShareService {
+
+
+    /**
+     * 根据key 获取分享内容参数
+     **/
+    Object get(String key);
+
+    /**
+     * 设置分享内容
+     *
+     * @param map        分享内容
+     * @param expireTime 过期时间
+     **/
+    String share(Map<String, Object> map, LocalDateTime expireTime);
+
+    /**
+     * 设置分享内容
+     *
+     * @param key        分享内容key
+     * @param map        分享内容
+     * @param expireTime 过期时间
+     **/
+    String share(String key,Map<String, Object> map, LocalDateTime expireTime);
+
+}

+ 62 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/share/ShareServiceImpl.java

@@ -0,0 +1,62 @@
+package com.citu.module.menduner.system.service.share;
+
+import cn.hutool.core.util.IdUtil;
+import com.citu.module.menduner.common.util.LoginUserContext;
+import com.citu.module.menduner.system.dal.dataobject.share.ShareDO;
+import com.citu.module.menduner.system.dal.mysql.share.ShareMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * 分享内容 Service 实现类
+ *
+ * @author Rayson
+ */
+@Service
+@Validated
+public class ShareServiceImpl implements ShareService {
+
+    @Resource
+    private ShareMapper shareMapper;
+
+    @Override
+    public Object get(String key) {
+        ShareDO share = shareMapper.selectByKey(key);
+        if (null == share) {
+            return null;
+        }
+        return share.getShareValue();
+    }
+
+    @Override
+    public String share(Map<String, Object> map, LocalDateTime expireTime) {
+        ShareDO share =
+                shareMapper.selectByValue(LoginUserContext.getUserId2(), LoginUserContext.getEnterpriseId4(), map);
+        if (null != share) {
+            return share.getShareKey();
+        }
+        //TODO 分享过期的处理
+
+        // 生成一个唯一的ID
+        long id = IdUtil.getSnowflakeNextId();
+        return share(Long.toString(id), map, expireTime);
+    }
+
+    @Override
+    public String share(String key, Map<String, Object> map, LocalDateTime expireTime) {
+        shareMapper.insert(ShareDO.builder()
+                .shareKey(key)
+                .userId(LoginUserContext.getUserId2())
+                .enterpriseId(LoginUserContext.getEnterpriseId4())
+                .shareValue(map)
+                .expireTime(expireTime)
+                .build()
+        );
+
+        return key;
+    }
+}