diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentMapper.java b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentMapper.java index ad8e38f3..0c3a931b 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentMapper.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/mapper/ClassStudentMapper.java @@ -2,11 +2,23 @@ package org.qinan.cedu.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.qinan.cedu.model.entity.ClassStudentDO; +import org.qinan.cedu.model.vo.ClassStudentStatVO; + +import java.util.List; /** * 班级学员 Mapper */ @Mapper public interface ClassStudentMapper extends BaseMapper { + + /** + * 按班级分组统计学员数量(涉及学员人员数、完成人员数) + * + * @param classIds 班级id集合 + * @return 各班级学员统计结果 + */ + List countByClassIds(@Param("classIds") List classIds); } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassManagementVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassManagementVO.java index 1f497017..4e82978c 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassManagementVO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassManagementVO.java @@ -93,4 +93,10 @@ public class ClassManagementVO extends BaseVO { */ @ApiModelProperty("试卷id") private String paperId; + + @ApiModelProperty("涉及学员人员数") + private Long studentCount; + + @ApiModelProperty("完成人员数") + private Long completedCount; } diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentStatVO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentStatVO.java new file mode 100644 index 00000000..978a3108 --- /dev/null +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/vo/ClassStudentStatVO.java @@ -0,0 +1,20 @@ +package org.qinan.cedu.model.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 班级学员数量统计结果 + */ +@Data +public class ClassStudentStatVO { + + @ApiModelProperty("班级id") + private Long classId; + + @ApiModelProperty("涉及学员人员数") + private Long studentCount; + + @ApiModelProperty("完成人员数") + private Long completedCount; +} diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java index 49a95646..15645f47 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java @@ -7,20 +7,27 @@ import org.qinan.cedu.convertor.ClassManagementConvertor; import org.qinan.cedu.enums.ClassStatusEnum; import org.qinan.cedu.enums.DeleteEnum; import org.qinan.cedu.mapper.ClassManagementMapper; +import org.qinan.cedu.mapper.ClassStudentMapper; import org.qinan.cedu.model.dto.ClassManagementDTO; import org.qinan.cedu.model.entity.ClassManagementDO; import org.qinan.cedu.model.query.ClassManagementPageQuery; import org.qinan.cedu.model.vo.ClassManagementVO; +import org.qinan.cedu.model.vo.ClassStudentStatVO; import org.qinan.cedu.service.ClassManagementService; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 班级管理服务实现 @@ -32,9 +39,12 @@ public class ClassManagementServiceImpl extends ServiceImpl pageQuery(ClassManagementPageQuery query) { - return this.lambdaQuery() + IPage page = this.lambdaQuery() .eq(ClassManagementDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) .like(StringUtils.hasText(query.getClassCode()), ClassManagementDO::getClassCode, query.getClassCode()) .like(StringUtils.hasText(query.getClassName()), ClassManagementDO::getClassName, query.getClassName()) @@ -45,6 +55,32 @@ public class ClassManagementServiceImpl extends ServiceImpl(query.getCurrent(), query.getSize())) .convert(classManagementConvertor::convertEToVo); + fillStudentCount(page.getRecords()); + return page; + } + + /** + * 填充当前页各班级的学员统计数(涉及学员人员数、完成人员数) + * + * @param records 当前页班级列表 + */ + private void fillStudentCount(List records) { + if (CollectionUtils.isEmpty(records)) { + return; + } + List classIds = records.stream() + .map(vo -> Long.valueOf(vo.getId())) + .collect(Collectors.toList()); + Map statMap = classStudentMapper.countByClassIds(classIds).stream() + .collect(Collectors.toMap(ClassStudentStatVO::getClassId, Function.identity())); + for (ClassManagementVO vo : records) { + ClassStudentStatVO stat = statMap.get(Long.valueOf(vo.getId())); + if (stat == null) { + continue; + } + vo.setStudentCount(stat.getStudentCount()); + vo.setCompletedCount(stat.getCompletedCount()); + } } @Override diff --git a/safety-cedu-service/src/main/resources/mapper/ClassStudentMapper.xml b/safety-cedu-service/src/main/resources/mapper/ClassStudentMapper.xml new file mode 100644 index 00000000..81c9cfaa --- /dev/null +++ b/safety-cedu-service/src/main/resources/mapper/ClassStudentMapper.xml @@ -0,0 +1,18 @@ + + + + + +