BaseStudentAssessmentInspectionServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package com.xjrsoft.module.student.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.alibaba.excel.EasyExcel;
  4. import com.alibaba.excel.support.ExcelTypeEnum;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.github.yulichang.base.MPJBaseServiceImpl;
  8. import com.github.yulichang.toolkit.MPJWrappers;
  9. import com.xjrsoft.common.enums.ScoreTypeEnum;
  10. import com.xjrsoft.common.model.result.RT;
  11. import com.xjrsoft.common.utils.VoToColumnUtil;
  12. import com.xjrsoft.module.base.entity.BaseClass;
  13. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  14. import com.xjrsoft.module.evaluate.vo.ResultViewingExcelVo;
  15. import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionMobilePageDto;
  16. import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionPageDto;
  17. import com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto;
  18. import com.xjrsoft.module.student.entity.BaseStudentAssessmentClassRelation;
  19. import com.xjrsoft.module.student.entity.BaseStudentAssessmentInspection;
  20. import com.xjrsoft.module.student.entity.BaseStudentAssessmentStudentRelation;
  21. import com.xjrsoft.module.student.mapper.BaseStudentAssessmentClassRelationMapper;
  22. import com.xjrsoft.module.student.mapper.BaseStudentAssessmentInspectionMapper;
  23. import com.xjrsoft.module.student.mapper.BaseStudentAssessmentStudentRelationMapper;
  24. import com.xjrsoft.module.student.service.IBaseStudentAssessmentInspectionService;
  25. import com.xjrsoft.module.student.vo.*;
  26. import com.xjrsoft.module.system.entity.File;
  27. import com.xjrsoft.module.system.service.IFileService;
  28. import com.xjrsoft.module.teacher.entity.XjrUser;
  29. import lombok.AllArgsConstructor;
  30. import org.springframework.http.ResponseEntity;
  31. import org.springframework.stereotype.Service;
  32. import java.io.ByteArrayOutputStream;
  33. import java.util.List;
  34. import java.util.Map;
  35. import java.util.stream.Collectors;
  36. /**
  37. * @title: 学生班级巡查考核
  38. * @Author dzx
  39. * @Date: 2023-11-16
  40. * @Version 1.0
  41. */
  42. @Service
  43. @AllArgsConstructor
  44. public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceImpl<BaseStudentAssessmentInspectionMapper, BaseStudentAssessmentInspection> implements IBaseStudentAssessmentInspectionService {
  45. private final BaseStudentAssessmentInspectionMapper assessmentInspectionMapper;
  46. private final BaseStudentAssessmentStudentRelationMapper assessmentStudentRelationMapper;
  47. private final BaseStudentAssessmentClassRelationMapper assessmentClassRelationMapper;
  48. private final BaseClassMapper baseClassMapper;
  49. private final IFileService fileService;
  50. @Override
  51. public Page<BaseStudentAssessmentInspectionPageVo> getPage(Page<BaseStudentAssessmentInspectionPageDto> page, BaseStudentAssessmentInspectionPageDto dto) {
  52. Page<BaseStudentAssessmentInspectionPageVo> result = assessmentInspectionMapper.getPage(page, dto);
  53. // 处理加减分
  54. result.getRecords().forEach((node) -> {
  55. if (node.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  56. node.setScore(node.getScore() * -1);
  57. }
  58. });
  59. return result;
  60. }
  61. @Override
  62. public BaseStudentAssessmentInspectionVo getInfo(Long id) {
  63. BaseStudentAssessmentInspectionVo result = assessmentInspectionMapper.getInfo(id);
  64. // 处理加减分
  65. if (result.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  66. result.setScore(result.getScore() * -1);
  67. }
  68. // 获取班级信息
  69. List<BaseStudentAssessmentClassListVo> baseStudentAssessmentClassListVos = assessmentClassRelationMapper.selectJoinList(BaseStudentAssessmentClassListVo.class,
  70. MPJWrappers.<BaseStudentAssessmentClassRelation>lambdaJoin()
  71. .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentAssessmentClassRelation::getClassId)
  72. .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId)
  73. .eq(BaseStudentAssessmentClassRelation::getBaseStudentAssessmentInspectionId, id)
  74. .select(BaseStudentAssessmentClassRelation::getId)
  75. .selectAs(BaseClass::getName, BaseStudentAssessmentClassListVo::getClassName)
  76. .selectAs(XjrUser::getName, BaseStudentAssessmentClassListVo::getTeacherName)
  77. .selectAs(XjrUser::getMobile, BaseStudentAssessmentClassListVo::getMobile)
  78. .select(BaseStudentAssessmentClassRelation.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentAssessmentClassRelation.class).contains(x.getProperty()))
  79. );
  80. result.setClassList(baseStudentAssessmentClassListVos);
  81. // 获取学生信息
  82. List<BaseStudentAssessmentStudentRelation> baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList(
  83. Wrappers.<BaseStudentAssessmentStudentRelation>query().lambda()
  84. .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getId())
  85. );
  86. result.setStudentList(baseStudentAssessmentStudentRelations);
  87. // 获取文件列表
  88. result.setFileInfos(fileService.list(Wrappers.<File>query().lambda().eq(File::getFolderId, result.getFileId())));
  89. return result;
  90. }
  91. @Override
  92. public Page<BaseStudentAssessmentInspectionMobilePageVo> getMobilePage(Page<BaseStudentAssessmentInspectionMobilePageDto> page, BaseStudentAssessmentInspectionMobilePageDto dto) {
  93. if (dto.getClassIds() == null || dto.getClassIds().size() == 0) {
  94. // 获取当前用户所管班级
  95. List<Long> classIds = baseClassMapper.selectList(
  96. Wrappers.<BaseClass>query().lambda()
  97. .eq(BaseClass::getTeacherId, StpUtil.getLoginIdAsLong())
  98. .select(BaseClass::getId)
  99. ).stream().map(BaseClass::getId).collect(Collectors.toList());
  100. dto.setClassIds(classIds);
  101. }
  102. if (dto.getClassIds() == null || dto.getClassIds().size() == 0) {
  103. return null;
  104. }
  105. Page<BaseStudentAssessmentInspectionMobilePageVo> result = assessmentInspectionMapper.getMobilePage(page, dto);
  106. // 处理加减分
  107. result.getRecords().forEach((node) -> {
  108. if (node.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  109. node.setScore(node.getScore() * -1);
  110. }
  111. });
  112. return result;
  113. }
  114. @Override
  115. public BaseStudentAssessmentInspectionMobileVo getMobileInfo(Long id) {
  116. BaseStudentAssessmentInspectionMobileVo result = assessmentInspectionMapper.getMobileInfo(id);
  117. // 处理加减分
  118. if (result.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) {
  119. result.setScore(result.getScore() * -1);
  120. }
  121. // 获取学生信息
  122. List<BaseStudentAssessmentStudentRelation> baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList(
  123. Wrappers.<BaseStudentAssessmentStudentRelation>query().lambda()
  124. .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getBaseStudentAssessmentInspectionId())
  125. .eq(BaseStudentAssessmentStudentRelation::getClassId, result.getClassId())
  126. );
  127. result.setStudentList(baseStudentAssessmentStudentRelations);
  128. result.setStudentCount(baseStudentAssessmentStudentRelations.size());
  129. // 获取文件列表
  130. result.setFileInfos(fileService.list(Wrappers.<File>query().lambda().eq(File::getFolderId, result.getFileId())));
  131. return result;
  132. }
  133. @Override
  134. public ResponseEntity<byte[]> getQuantitativeAssessmentExcelByte(QuantitativeAssessmentExcelDto dto) {
  135. String fileName = "StudentAssessmentInspection" + ExcelTypeEnum.XLSX.getValue();
  136. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  137. //TODO 学生个人行为原始数据
  138. //求所有的个人行为集合
  139. List<StudentIndividualBehaviorExcelVo> studentIndividualBehaviorExcelVoList = assessmentInspectionMapper.getStudentIndividualBehaviorExcelVoList(dto);
  140. Map<Long, List<StudentIndividualBehaviorExcelVo>> studentIndividualBehaviorExcelVoListMap = studentIndividualBehaviorExcelVoList.stream()
  141. .collect(Collectors.groupingBy(StudentIndividualBehaviorExcelVo::getStudentUserId));
  142. //未合并
  143. EasyExcel.write(bot, ResultViewingExcelVo.class)
  144. .automaticMergeHead(false)
  145. .excelType(ExcelTypeEnum.XLSX)
  146. .sheet("学生个人行为")
  147. .doWrite(studentIndividualBehaviorExcelVoList);
  148. //TODO 班级常规管理原始数据
  149. //TODO 获奖原始数据
  150. //TODO 班级量化考核统计表总
  151. return RT.fileStream(bot.toByteArray(), fileName);
  152. }
  153. }