Переглянути джерело

1、优化统计
2、增加学生实习记录接口

rayson 4 місяців тому
батько
коміт
ba813f0b6b
16 змінених файлів з 221 додано та 35 видалено
  1. 53 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/person/AppRecruitStudentController.java
  2. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/analysis/RecruitAnalysisPageReqVO.java
  3. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/contact/EnterpriseRegisterContactsReqVO.java
  4. 28 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPracticeRecordDetailRespVO.java
  5. 0 11
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/person/student/StudentPracticeRecordPageReqVO.java
  6. 0 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterpriseMapper.java
  7. 0 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/enterprise/EnterpriseUserBindMapper.java
  8. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/interview/InterviewInviteMapper.java
  9. 2 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobAdvertisedMapper.java
  10. 4 5
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/job/JobCvRelMapper.java
  11. 0 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/PersonInfoMapper.java
  12. 65 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeRecordMapper.java
  13. 0 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/user/MdeUserMapper.java
  14. 19 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordService.java
  15. 42 7
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordServiceImpl.java
  16. 3 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/util/RecruitAnalysisUtils.java

+ 53 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/recruit/person/AppRecruitStudentController.java

@@ -0,0 +1,53 @@
+package com.citu.module.menduner.system.controller.app.recruit.person;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.pojo.PageResult;
+import com.citu.framework.security.core.annotations.PreAuthenticated;
+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.person.student.StudentPracticeRecordDetailRespVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
+import com.citu.module.menduner.system.service.person.student.StudentPracticeRecordService;
+import com.citu.module.menduner.system.service.person.student.StudentService;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+import java.util.List;
+import java.util.Map;
+
+import static com.citu.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "招聘端 - 学生信息")
+@RestController
+@RequestMapping("/menduner/system/recruit/student")
+@Validated
+public class AppRecruitStudentController {
+
+    @Resource
+    private StudentService service;
+    @Resource
+    private StudentPracticeRecordService studentPracticeRecordService;
+
+
+    @PreAuthenticated
+    @GetMapping("/get/record-status/count")
+    @Operation(summary = "获得学生实习记录状态统计")
+    public CommonResult<List<CommonRespVO>> getStatusCount(RecruitAnalysisPageReqVO reqVO) {
+        return success(studentPracticeRecordService.getStatusCount(reqVO));
+    }
+
+    @PreAuthenticated
+    @GetMapping("/page")
+    @Operation(summary = "获得学生实习记录分页")
+    public CommonResult<PageResult<StudentPracticeRecordDetailRespVO>> page
+            (StudentPracticeRecordPageReqVO pageReqVO) {
+        return success(studentPracticeRecordService.page(pageReqVO));
+    }
+
+}

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

@@ -31,4 +31,7 @@ public class RecruitAnalysisPageReqVO extends TimeRangeBasePageReqVO {
 
     @Schema(description = "职位状态")
     private String jobStatus;
+
+    @Schema(description = "公共状态")
+    private String status;
 }

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/base/contact/EnterpriseRegisterContactsReqVO.java

@@ -25,6 +25,6 @@ public class EnterpriseRegisterContactsReqVO {
 
     @Schema(description = "新密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "buzhidao")
     @NotEmpty(message = "{1_100_021_014}")
-    @Length(min = 8, max = 16, message = "{1_100_021_015}")
+    @Length(min = 8, max = 36, message = "{1_100_021_015}")
     private String password;
 }

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

@@ -0,0 +1,28 @@
+package com.citu.module.menduner.system.controller.base.person.student;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.citu.module.menduner.system.controller.base.enterprise.vo.EnterpriseBaseSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.job.JobAdvertisedSimpleRespVO;
+import com.citu.module.menduner.system.controller.base.person.info.PersonSimpleRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 学生实习记录详情 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class StudentPracticeRecordDetailRespVO extends StudentPracticeRecordRespVO {
+
+    @Schema(description = "人才信息")
+    private PersonSimpleRespVO person;
+
+    @Schema(description = "学生信息")
+    private StudentRespVO student;
+
+    @Schema(description = "招聘企业信息")
+    private EnterpriseBaseSimpleRespVO enterprise;
+
+    @Schema(description = "招聘职位信息")
+    private JobAdvertisedSimpleRespVO job;
+
+}

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

@@ -18,14 +18,6 @@ import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DA
 @ToString(callSuper = true)
 public class StudentPracticeRecordPageReqVO extends PageParam {
 
-    @Schema(description = "用户id", example = "26596")
-    private Long userId;
-
-    @Schema(description = "人才id", example = "32718")
-    private Long personId;
-
-    @Schema(description = "学生id", example = "29238")
-    private Long studentId;
 
     @Schema(description = "企业id", example = "14881")
     private Long enterpriseId;
@@ -47,8 +39,5 @@ public class StudentPracticeRecordPageReqVO extends PageParam {
     @Schema(description = "状态", example = "2")
     private String status;
 
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
 
 }

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

@@ -205,7 +205,6 @@ public interface EnterpriseMapper extends BaseMapperX<EnterpriseDO> {
         wrapper.betweenIfPresent(EnterpriseDO::getCreateTime, startTime, endTime);
 
         RecruitAnalysisUtils.applyTimeGrouping(wrapper, EnterpriseDO::getCreateTime, reqVO.getType());
-        wrapper.orderByDesc("`key`");
 
         return selectJoinList(CommonRespVO.class, wrapper);
     }

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

@@ -273,8 +273,6 @@ public interface EnterpriseUserBindMapper extends BaseMapperX<EnterpriseUserBind
         wrapper.betweenIfPresent(EnterpriseUserBindDO::getCreateTime, startTime, endTime);
 
         RecruitAnalysisUtils.applyTimeGrouping(wrapper, EnterpriseUserBindDO::getCreateTime, reqVO.getType());
-        wrapper.orderByDesc("`key`");
-
         return selectJoinList(CommonRespVO.class, wrapper);
     }
 

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

@@ -215,7 +215,7 @@ public interface InterviewInviteMapper extends BaseMapperX<InterviewInviteDO> {
                 ConversationStatusEnum.ENTRY.getStatus(), ConversationStatusEnum.SETTLEMENT.getStatus());
         wrapper.groupBy(InterviewInviteDO::getConversationStatus);
 
-        wrapper.orderByDesc("`key`");
+        wrapper.orderByAsc("`key`");
         return selectJoinList(CommonRespVO.class, wrapper);
     }
 

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

@@ -295,6 +295,8 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
                 .eqIfPresent(JobAdvertisedDO::getEduType, reqVO.getEduType())
                 .eqIfPresent(JobAdvertisedDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(JobAdvertisedDO::getHire, reqVO.getHire())
+                .eqIfPresent(JobAdvertisedDO::getEnterpriseId, enterpriseId)
+                .eqIfPresent(JobAdvertisedDO::getUserId, userId)
                 .betweenIfPresent(JobAdvertisedDO::getCreateTime, reqVO.getCreateTime());
 
         query.notIn(CollUtil.isNotEmpty(reqVO.getFilterNotJobIds()),JobAdvertisedDO::getId, reqVO.getFilterNotJobIds());
@@ -604,7 +606,6 @@ public interface JobAdvertisedMapper extends BaseMapperX<JobAdvertisedDO> {
         wrapper.eqIfPresent(JobAdvertisedDO::getStatus, reqVO.getJobStatus());
 
         RecruitAnalysisUtils.applyTimeGrouping(wrapper, JobAdvertisedDO::getCreateTime, reqVO.getType());
-        wrapper.orderByDesc("`key`");
 
         return selectJoinList(CommonRespVO.class, wrapper);
     }

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

@@ -267,7 +267,7 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         wrapper.eqIfPresent(JobCvRelDO::getEnterpriseId, reqVO.getEnterpriseId());
         wrapper.inIfPresent(JobCvRelDO::getPublishUserId, reqVO.getUserId());
         wrapper.groupBy(PersonInfoDO::getSex);
-        wrapper.orderByDesc("`key`");
+        wrapper.orderByAsc("`key`");
         return selectJoinList(CommonRespVO.class, wrapper);
     }
 
@@ -298,7 +298,7 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         wrapper.eqIfPresent(JobCvRelDO::getEnterpriseId, reqVO.getEnterpriseId());
         wrapper.inIfPresent(JobCvRelDO::getPublishUserId, reqVO.getUserId());
         wrapper.groupBy("`key`");
-        wrapper.orderByDesc("`key`");
+        wrapper.orderByAsc("`key`");
         return selectJoinList(CommonRespVO.class, wrapper);
     }
 
@@ -318,7 +318,7 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         wrapper.eqIfPresent(JobCvRelDO::getEnterpriseId, reqVO.getEnterpriseId());
         wrapper.inIfPresent(JobCvRelDO::getPublishUserId, reqVO.getUserId());
         wrapper.groupBy(PersonInfoDO::getExpType);
-        wrapper.orderByDesc("`key`");
+        wrapper.orderByAsc("`key`");
         return selectJoinList(CommonRespVO.class, wrapper);
     }
 
@@ -338,7 +338,7 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         wrapper.eqIfPresent(JobCvRelDO::getEnterpriseId, reqVO.getEnterpriseId());
         wrapper.inIfPresent(JobCvRelDO::getPublishUserId, reqVO.getUserId());
         wrapper.groupBy(PersonInfoDO::getEduType);
-        wrapper.orderByDesc("`key`");
+        wrapper.orderByAsc("`key`");
 
         return selectJoinList(CommonRespVO.class, wrapper);
     }
@@ -360,7 +360,6 @@ public interface JobCvRelMapper extends BaseMapperX<JobCvRelDO> {
         wrapper.eqIfPresent(JobCvRelDO::getStatus, reqVO.getJobStatus());
 
         RecruitAnalysisUtils.applyTimeGrouping(wrapper, JobCvRelDO::getCreateTime, reqVO.getType());
-        wrapper.orderByDesc("`key`");
 
         return selectJoinList(CommonRespVO.class, wrapper);
     }

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

@@ -278,7 +278,6 @@ public interface PersonInfoMapper extends BaseMapperX<PersonInfoDO> {
         wrapper.betweenIfPresent(PersonInfoDO::getCreateTime, startTime, endTime);
 
         RecruitAnalysisUtils.applyTimeGrouping(wrapper, PersonInfoDO::getCreateTime, reqVO.getType());
-        wrapper.orderByDesc("`key`");
 
         return selectJoinList(CommonRespVO.class, wrapper);
     }

+ 65 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/mysql/person/StudentPracticeRecordMapper.java

@@ -4,10 +4,23 @@ package com.citu.module.menduner.system.dal.mysql.person;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
+import com.citu.module.menduner.system.controller.base.CommonRespVO;
+import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
+import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordDetailRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
+import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
+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.dataobject.person.StudentPracticeRecordDO;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
  * 学生实习记录 Mapper
  *
@@ -18,16 +31,12 @@ public interface StudentPracticeRecordMapper extends BaseMapperX<StudentPractice
 
     default PageResult<StudentPracticeRecordDO> selectPage(StudentPracticeRecordPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<StudentPracticeRecordDO>()
-                .eqIfPresent(StudentPracticeRecordDO::getUserId, reqVO.getUserId())
-                .eqIfPresent(StudentPracticeRecordDO::getPersonId, reqVO.getPersonId())
-                .eqIfPresent(StudentPracticeRecordDO::getStudentId, reqVO.getStudentId())
                 .eqIfPresent(StudentPracticeRecordDO::getEnterpriseId, reqVO.getEnterpriseId())
                 .eqIfPresent(StudentPracticeRecordDO::getJobId, reqVO.getJobId())
                 .eqIfPresent(StudentPracticeRecordDO::getJobFairId, reqVO.getJobFairId())
                 .betweenIfPresent(StudentPracticeRecordDO::getStartTime, reqVO.getStartTime())
                 .betweenIfPresent(StudentPracticeRecordDO::getEndTime, reqVO.getEndTime())
                 .eqIfPresent(StudentPracticeRecordDO::getStatus, reqVO.getStatus())
-                .betweenIfPresent(StudentPracticeRecordDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(StudentPracticeRecordDO::getId));
     }
 
@@ -35,4 +44,56 @@ public interface StudentPracticeRecordMapper extends BaseMapperX<StudentPractice
         return selectOne(StudentPracticeRecordDO::getInviteId, inviteId);
     }
 
+
+    /**
+     * 招聘端-企业分页查询实习的学生信息
+     */
+    default PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordPageReqVO reqVO) {
+        MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper =
+                new MPJLambdaWrapperX<>();
+        wrapper.selectAll(StudentPracticeRecordDO.class);
+        wrapper.selectAssociation(PersonInfoDO.class, StudentPracticeRecordDetailRespVO::getPerson);
+        wrapper.selectAssociation(StudentDO.class, StudentPracticeRecordDetailRespVO::getStudent);
+        wrapper.selectAssociation(EnterpriseDO.class,StudentPracticeRecordDetailRespVO::getEnterprise);
+        wrapper.selectAssociation(JobAdvertisedDO.class,StudentPracticeRecordDetailRespVO::getJob);
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentPracticeRecordDO::getPersonId);
+        wrapper.innerJoin(StudentDO.class, StudentDO::getId, StudentPracticeRecordDO::getStudentId);
+        wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, StudentPracticeRecordDO::getEnterpriseId);
+        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, StudentPracticeRecordDO::getJobId);
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getJobId, reqVO.getJobId());
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getJobFairId, reqVO.getJobFairId());
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getEnterpriseId, reqVO.getEnterpriseId());
+        wrapper.betweenIfPresent(StudentPracticeRecordDO::getStartTime, reqVO.getStartTime());
+        wrapper.betweenIfPresent(StudentPracticeRecordDO::getEndTime, reqVO.getEndTime());
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getStatus, reqVO.getStatus());
+
+        return selectJoinPage(reqVO, StudentPracticeRecordDetailRespVO.class, wrapper);
+    }
+
+    /**
+     * 实习记录状态统计
+     **/
+    default List<CommonRespVO> getStatusCount
+    (RecruitAnalysisPageReqVO reqVO, LocalDateTime startTime, LocalDateTime endTime) {
+        MPJLambdaWrapperX<StudentPracticeRecordDO> wrapper = new MPJLambdaWrapperX<>();
+        wrapper.selectAs(StudentPracticeRecordDO::getStatus, "`key`");
+        wrapper.selectCount(StudentPracticeRecordDO::getId, CommonRespVO::getValue);
+
+        wrapper.innerJoin(PersonInfoDO.class, PersonInfoDO::getId, StudentPracticeRecordDO::getPersonId);
+        wrapper.innerJoin(StudentDO.class, StudentDO::getId, StudentPracticeRecordDO::getStudentId);
+        wrapper.innerJoin(EnterpriseDO.class, EnterpriseDO::getId, StudentPracticeRecordDO::getEnterpriseId);
+        wrapper.innerJoin(JobAdvertisedDO.class, JobAdvertisedDO::getId, StudentPracticeRecordDO::getJobId);
+
+        wrapper.betweenIfPresent(StudentPracticeRecordDO::getCreateTime, startTime, endTime);
+
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getJobId, reqVO.getJobId());
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getStatus, reqVO.getStatus());
+        wrapper.eqIfPresent(StudentPracticeRecordDO::getEnterpriseId, reqVO.getEnterpriseId());
+        wrapper.inIfPresent(StudentPracticeRecordDO::getUserId, reqVO.getUserId());
+        wrapper.groupBy(StudentPracticeRecordDO::getStatus);
+        wrapper.orderByAsc("`key`");
+
+        return selectJoinList(CommonRespVO.class, wrapper);
+    }
+
 }

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

@@ -134,7 +134,6 @@ public interface MdeUserMapper extends BaseMapperX<MdeUserDO> {
         wrapper.betweenIfPresent(MdeUserDO::getCreateTime, startTime, endTime);
 
         RecruitAnalysisUtils.applyTimeGrouping(wrapper, MdeUserDO::getCreateTime, reqVO.getType());
-        wrapper.orderByDesc("`key`");
 
         return selectJoinList(CommonRespVO.class, wrapper);
     }

+ 19 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordService.java

@@ -2,11 +2,16 @@ package com.citu.module.menduner.system.service.person.student;
 
 
 import com.citu.framework.common.pojo.PageResult;
+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.person.student.StudentPracticeRecordDetailRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeRecordDO;
 
 import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 学生实习记录 Service 接口
@@ -53,4 +58,18 @@ public interface StudentPracticeRecordService {
      */
     PageResult<StudentPracticeRecordDO> getStudentPracticeRecordPage(StudentPracticeRecordPageReqVO pageReqVO);
 
+
+    // ========== 招聘端 ==========
+    /**
+     * 获得学生实习记录状态统计
+     * @param reqVO 分页查询
+     */
+    List<CommonRespVO> getStatusCount(RecruitAnalysisPageReqVO reqVO);
+    /**
+     * 获得学生实习记录分页
+     *
+     * @param reqVO 分页查询
+     * @return 学生实习记录分页
+     */
+    PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordPageReqVO reqVO);
 }

+ 42 - 7
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/person/student/StudentPracticeRecordServiceImpl.java

@@ -3,17 +3,30 @@ package com.citu.module.menduner.system.service.person.student;
 
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
+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.person.student.StudentPracticeRecordDetailRespVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordPageReqVO;
 import com.citu.module.menduner.system.controller.base.person.student.StudentPracticeRecordSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.person.StudentPracticeRecordDO;
 import com.citu.module.menduner.system.dal.mysql.person.StudentPracticeRecordMapper;
+import com.citu.module.menduner.system.enums.eduexp.EducationTypeEnum;
+import com.citu.module.menduner.system.enums.person.StudentPracticeStatusEnum;
 import org.springframework.stereotype.Service;
 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;
+
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRange;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.STUDENT_PRACTICE_RECORD_NOT_EXISTS;
+import static com.citu.module.menduner.system.util.RecruitAnalysisUtils.packBarCount;
 
 /**
  * 学生实习记录 Service 实现类
@@ -25,13 +38,13 @@ import static com.citu.module.menduner.system.enums.ErrorCodeConstants.STUDENT_P
 public class StudentPracticeRecordServiceImpl implements StudentPracticeRecordService {
 
     @Resource
-    private StudentPracticeRecordMapper studentPracticeRecordMapper;
+    private StudentPracticeRecordMapper mapper;
 
     @Override
     public Long createStudentPracticeRecord(StudentPracticeRecordSaveReqVO createReqVO) {
         // 插入
         StudentPracticeRecordDO studentPracticeRecord = BeanUtils.toBean(createReqVO, StudentPracticeRecordDO.class);
-        studentPracticeRecordMapper.insert(studentPracticeRecord);
+        mapper.insert(studentPracticeRecord);
         // 返回
         return studentPracticeRecord.getId();
     }
@@ -42,7 +55,7 @@ public class StudentPracticeRecordServiceImpl implements StudentPracticeRecordSe
         validateStudentPracticeRecordExists(updateReqVO.getId());
         // 更新
         StudentPracticeRecordDO updateObj = BeanUtils.toBean(updateReqVO, StudentPracticeRecordDO.class);
-        studentPracticeRecordMapper.updateById(updateObj);
+        mapper.updateById(updateObj);
     }
 
     @Override
@@ -50,23 +63,45 @@ public class StudentPracticeRecordServiceImpl implements StudentPracticeRecordSe
         // 校验存在
         validateStudentPracticeRecordExists(id);
         // 删除
-        studentPracticeRecordMapper.deleteById(id);
+        mapper.deleteById(id);
     }
 
     private void validateStudentPracticeRecordExists(Long id) {
-        if (studentPracticeRecordMapper.selectById(id) == null) {
+        if (mapper.selectById(id) == null) {
             throw exception(STUDENT_PRACTICE_RECORD_NOT_EXISTS);
         }
     }
 
     @Override
     public StudentPracticeRecordDO getStudentPracticeRecord(Long id) {
-        return studentPracticeRecordMapper.selectById(id);
+        return mapper.selectById(id);
     }
 
     @Override
     public PageResult<StudentPracticeRecordDO> getStudentPracticeRecordPage(StudentPracticeRecordPageReqVO pageReqVO) {
-        return studentPracticeRecordMapper.selectPage(pageReqVO);
+        return mapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public List<CommonRespVO> getStatusCount(RecruitAnalysisPageReqVO reqVO) {
+        LocalDateTime[] timeRange = generateDateTimeRange(reqVO);
+        List<CommonRespVO> result = mapper.getStatusCount(reqVO, timeRange[0], timeRange[1]);
+        // 填充
+        for (StudentPracticeStatusEnum value : StudentPracticeStatusEnum.values()) {
+            CommonRespVO respVO = result.stream()
+                    .filter(c -> value.getStatus().equals(c.getKey())).findFirst().orElse(null);
+            if (null == respVO) {
+                CommonRespVO newResp = new CommonRespVO();
+                newResp.setKey(value.getStatus());
+                newResp.setValue(0L);
+                result.add(newResp);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public PageResult<StudentPracticeRecordDetailRespVO> page(StudentPracticeRecordPageReqVO reqVO) {
+        return mapper.page(reqVO);
+    }
 }

+ 3 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/util/RecruitAnalysisUtils.java

@@ -58,6 +58,7 @@ public class RecruitAnalysisUtils {
             case TYPE_24_HOURS:
                 wrapper.selectFunc("DATE_FORMAT(%s, '%%m-%%d %%H:00')", arg -> arg.accept(column), "`key`");
                 wrapper.groupBy("DATE_FORMAT(create_time, '%Y-%m-%d-%H')");
+                wrapper.orderByAsc("DATE_FORMAT(create_time, '%Y-%m-%d-%H')");
                 break;
             case ALL:
             case TYPE_RECENT_7_DAYS:
@@ -68,10 +69,12 @@ public class RecruitAnalysisUtils {
             case TYPE_CUSTOM:
                 wrapper.selectFunc("DATE_FORMAT(%s, '%%m-%%d')", arg -> arg.accept(column), "`key`");
                 wrapper.groupBy("DATE_FORMAT(create_time, '%Y-%m-%d')");
+                wrapper.orderByAsc("DATE_FORMAT(create_time, '%Y-%m-%d')");
                 break;
             case TYPE_YEAR:
                 wrapper.selectFunc("DATE_FORMAT(%s, '%%y年%%m月')", arg -> arg.accept(column), "`key`");
                 wrapper.groupBy("DATE_FORMAT(create_time, '%y-%m')");
+                wrapper.orderByAsc("DATE_FORMAT(create_time, '%Y-%m')");
                 break;
             default:
                 // wrapper.selectFunc("DATE_FORMAT(%s, '%%Y年')", arg -> arg.accept(column), "`key`");