package com.xjrsoft.module.student.service.impl; import cn.dev33.satoken.stp.StpUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.toolkit.MPJWrappers; import com.xjrsoft.common.enums.ScoreTypeEnum; import com.xjrsoft.common.model.result.RT; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.base.entity.BaseClass; import com.xjrsoft.module.base.mapper.BaseClassMapper; import com.xjrsoft.module.evaluate.vo.ResultViewingExcelVo; import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionMobilePageDto; import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionPageDto; import com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto; import com.xjrsoft.module.student.entity.BaseStudentAssessmentClassRelation; import com.xjrsoft.module.student.entity.BaseStudentAssessmentInspection; import com.xjrsoft.module.student.entity.BaseStudentAssessmentStudentRelation; import com.xjrsoft.module.student.mapper.BaseStudentAssessmentClassRelationMapper; import com.xjrsoft.module.student.mapper.BaseStudentAssessmentInspectionMapper; import com.xjrsoft.module.student.mapper.BaseStudentAssessmentStudentRelationMapper; import com.xjrsoft.module.student.service.IBaseStudentAssessmentInspectionService; import com.xjrsoft.module.student.vo.*; import com.xjrsoft.module.system.entity.File; import com.xjrsoft.module.system.service.IFileService; import com.xjrsoft.module.teacher.entity.XjrUser; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.io.ByteArrayOutputStream; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @title: 学生班级巡查考核 * @Author dzx * @Date: 2023-11-16 * @Version 1.0 */ @Service @AllArgsConstructor public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceImpl implements IBaseStudentAssessmentInspectionService { private final BaseStudentAssessmentInspectionMapper assessmentInspectionMapper; private final BaseStudentAssessmentStudentRelationMapper assessmentStudentRelationMapper; private final BaseStudentAssessmentClassRelationMapper assessmentClassRelationMapper; private final BaseClassMapper baseClassMapper; private final IFileService fileService; @Override public Page getPage(Page page, BaseStudentAssessmentInspectionPageDto dto) { Page result = assessmentInspectionMapper.getPage(page, dto); // 处理加减分 result.getRecords().forEach((node) -> { if (node.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) { node.setScore(node.getScore() * -1); } }); return result; } @Override public BaseStudentAssessmentInspectionVo getInfo(Long id) { BaseStudentAssessmentInspectionVo result = assessmentInspectionMapper.getInfo(id); // 处理加减分 if (result.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) { result.setScore(result.getScore() * -1); } // 获取班级信息 List baseStudentAssessmentClassListVos = assessmentClassRelationMapper.selectJoinList(BaseStudentAssessmentClassListVo.class, MPJWrappers.lambdaJoin() .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentAssessmentClassRelation::getClassId) .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId) .eq(BaseStudentAssessmentClassRelation::getBaseStudentAssessmentInspectionId, id) .select(BaseStudentAssessmentClassRelation::getId) .selectAs(BaseClass::getName, BaseStudentAssessmentClassListVo::getClassName) .selectAs(XjrUser::getName, BaseStudentAssessmentClassListVo::getTeacherName) .selectAs(XjrUser::getMobile, BaseStudentAssessmentClassListVo::getMobile) .select(BaseStudentAssessmentClassRelation.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentAssessmentClassRelation.class).contains(x.getProperty())) ); result.setClassList(baseStudentAssessmentClassListVos); // 获取学生信息 List baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList( Wrappers.query().lambda() .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getId()) ); result.setStudentList(baseStudentAssessmentStudentRelations); // 获取文件列表 result.setFileInfos(fileService.list(Wrappers.query().lambda().eq(File::getFolderId, result.getFileId()))); return result; } @Override public Page getMobilePage(Page page, BaseStudentAssessmentInspectionMobilePageDto dto) { if (dto.getClassIds() == null || dto.getClassIds().size() == 0) { // 获取当前用户所管班级 List classIds = baseClassMapper.selectList( Wrappers.query().lambda() .eq(BaseClass::getTeacherId, StpUtil.getLoginIdAsLong()) .select(BaseClass::getId) ).stream().map(BaseClass::getId).collect(Collectors.toList()); dto.setClassIds(classIds); } if (dto.getClassIds() == null || dto.getClassIds().size() == 0) { return null; } Page result = assessmentInspectionMapper.getMobilePage(page, dto); // 处理加减分 result.getRecords().forEach((node) -> { if (node.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) { node.setScore(node.getScore() * -1); } }); return result; } @Override public BaseStudentAssessmentInspectionMobileVo getMobileInfo(Long id) { BaseStudentAssessmentInspectionMobileVo result = assessmentInspectionMapper.getMobileInfo(id); // 处理加减分 if (result.getScoreType().equals(ScoreTypeEnum.ScoreMinus.getCode())) { result.setScore(result.getScore() * -1); } // 获取学生信息 List baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList( Wrappers.query().lambda() .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getBaseStudentAssessmentInspectionId()) .eq(BaseStudentAssessmentStudentRelation::getClassId, result.getClassId()) ); result.setStudentList(baseStudentAssessmentStudentRelations); result.setStudentCount(baseStudentAssessmentStudentRelations.size()); // 获取文件列表 result.setFileInfos(fileService.list(Wrappers.query().lambda().eq(File::getFolderId, result.getFileId()))); return result; } @Override public ResponseEntity getQuantitativeAssessmentExcelByte(QuantitativeAssessmentExcelDto dto) { String fileName = "StudentAssessmentInspection" + ExcelTypeEnum.XLSX.getValue(); ByteArrayOutputStream bot = new ByteArrayOutputStream(); //TODO 学生个人行为原始数据 //求所有的个人行为集合 List studentIndividualBehaviorExcelVoList = assessmentInspectionMapper.getStudentIndividualBehaviorExcelVoList(dto); Map> studentIndividualBehaviorExcelVoListMap = studentIndividualBehaviorExcelVoList.stream() .collect(Collectors.groupingBy(StudentIndividualBehaviorExcelVo::getStudentUserId)); //未合并 EasyExcel.write(bot, ResultViewingExcelVo.class) .automaticMergeHead(false) .excelType(ExcelTypeEnum.XLSX) .sheet("学生个人行为") .doWrite(studentIndividualBehaviorExcelVoList); //TODO 班级常规管理原始数据 //TODO 获奖原始数据 //TODO 班级量化考核统计表总 return RT.fileStream(bot.toByteArray(), fileName); } }