| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- package com.xjrsoft.module.student.service.impl;
- import cn.dev33.satoken.stp.StpUtil;
- import com.alibaba.excel.EasyExcel;
- import com.alibaba.excel.ExcelWriter;
- import com.alibaba.excel.support.ExcelTypeEnum;
- import com.alibaba.excel.write.metadata.WriteSheet;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- 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.github.yulichang.wrapper.MPJLambdaWrapper;
- import com.xjrsoft.common.enums.ScoreTypeEnum;
- import com.xjrsoft.common.model.result.RT;
- import com.xjrsoft.common.utils.VoToColumnUtil;
- import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
- import com.xjrsoft.module.base.entity.BaseClass;
- import com.xjrsoft.module.base.mapper.BaseClassMapper;
- import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionMobilePageDto;
- import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionPageDto;
- import com.xjrsoft.module.student.dto.CalssQuantitativeAssessmentPageDto;
- import com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto;
- import com.xjrsoft.module.student.dto.QuantitativeAssessmentSingleScoreDto;
- import com.xjrsoft.module.student.entity.BaseClassMajorSet;
- import com.xjrsoft.module.student.entity.BaseStudentAssessmentCategory;
- 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.entity.BaseStudentSchoolRoll;
- import com.xjrsoft.module.student.mapper.BaseStudentAssessmentCategoryMapper;
- 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.mapper.BaseStudentSchoolRollMapper;
- import com.xjrsoft.module.student.service.IBaseStudentAssessmentInspectionService;
- import com.xjrsoft.module.student.vo.BaseStudentAssessmentClassListVo;
- import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionMobilePageVo;
- import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionMobileVo;
- import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionPageVo;
- import com.xjrsoft.module.student.vo.BaseStudentAssessmentInspectionVo;
- import com.xjrsoft.module.student.vo.CalssQuantitativeAssessmentPageVo;
- import com.xjrsoft.module.student.vo.QuantitativeAssessmentSingleScoreVo;
- import com.xjrsoft.module.student.vo.QuantitativeAssessmentSubTableExcelVo;
- 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 org.springframework.transaction.annotation.Transactional;
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- import java.io.ByteArrayOutputStream;
- import java.util.ArrayList;
- import java.util.HashMap;
- 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<BaseStudentAssessmentInspectionMapper, BaseStudentAssessmentInspection> implements IBaseStudentAssessmentInspectionService {
- private final BaseStudentAssessmentInspectionMapper assessmentInspectionMapper;
- private final BaseStudentAssessmentCategoryMapper baseStudentAssessmentCategoryMapper;
- private final BaseStudentAssessmentStudentRelationMapper assessmentStudentRelationMapper;
- private final BaseStudentAssessmentClassRelationMapper assessmentClassRelationMapper;
- private final BaseClassMapper baseClassMapper;
- private final BaseStudentSchoolRollMapper baseStudentSchoolRollMapper;
- private final IFileService fileService;
- @Override
- public Page<BaseStudentAssessmentInspectionPageVo> getPage(Page<BaseStudentAssessmentInspectionPageDto> page, BaseStudentAssessmentInspectionPageDto dto) {
- Page<BaseStudentAssessmentInspectionPageVo> 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<BaseStudentAssessmentClassListVo> baseStudentAssessmentClassListVos = assessmentClassRelationMapper.selectJoinList(BaseStudentAssessmentClassListVo.class,
- MPJWrappers.<BaseStudentAssessmentClassRelation>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<BaseStudentAssessmentStudentRelation> baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList(
- Wrappers.<BaseStudentAssessmentStudentRelation>query().lambda()
- .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getId())
- );
- result.setStudentList(baseStudentAssessmentStudentRelations);
- // 获取文件列表
- result.setFileInfos(fileService.list(Wrappers.<File>query().lambda().eq(File::getFolderId, result.getFileId())));
- return result;
- }
- @Override
- public Page<BaseStudentAssessmentInspectionMobilePageVo> getMobilePage(Page<BaseStudentAssessmentInspectionMobilePageDto> page, BaseStudentAssessmentInspectionMobilePageDto dto) {
- if (dto.getClassIds() == null || dto.getClassIds().size() == 0) {
- // 获取当前用户所管班级
- List<Long> classIds = baseClassMapper.selectList(
- Wrappers.<BaseClass>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<BaseStudentAssessmentInspectionMobilePageVo> 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<BaseStudentAssessmentStudentRelation> baseStudentAssessmentStudentRelations = assessmentStudentRelationMapper.selectList(
- Wrappers.<BaseStudentAssessmentStudentRelation>query().lambda()
- .eq(BaseStudentAssessmentStudentRelation::getBaseStudentAssessmentInspectionId, result.getBaseStudentAssessmentInspectionId())
- .eq(BaseStudentAssessmentStudentRelation::getClassId, result.getClassId())
- );
- result.setStudentList(baseStudentAssessmentStudentRelations);
- result.setStudentCount(baseStudentAssessmentStudentRelations.size());
- // 获取文件列表
- result.setFileInfos(fileService.list(Wrappers.<File>query().lambda().eq(File::getFolderId, result.getFileId())));
- return result;
- }
- @Override
- public ResponseEntity<byte[]> getQuantitativeAssessmentExcelByte(QuantitativeAssessmentExcelDto dto) {
- //导出的文件名,字节流
- String fileName = "StudentAssessmentInspection" + ExcelTypeEnum.XLSX.getValue();
- ByteArrayOutputStream bot = new ByteArrayOutputStream();
- //获取需要导出的子表
- List<Long> baseStudentAssessmentCategoryIdList = new ArrayList<>();
- baseStudentAssessmentCategoryIdList.add(1727155216239882240L);
- baseStudentAssessmentCategoryIdList.add(1727154864019009536L);
- LambdaQueryWrapper<BaseStudentAssessmentCategory> baseStudentAssessmentCategoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
- baseStudentAssessmentCategoryLambdaQueryWrapper
- .in(BaseStudentAssessmentCategory::getId, baseStudentAssessmentCategoryIdList);
- List<BaseStudentAssessmentCategory> baseStudentAssessmentCategorieList = baseStudentAssessmentCategoryMapper.selectList(baseStudentAssessmentCategoryLambdaQueryWrapper);
- //导出子表
- if(baseStudentAssessmentCategorieList.size() > 0){
- //需要合并的列
- int[] mergeColumeIndex = {0, 1, 2, 3, 4};
- ExcelMergeUtil excelFillCellMergeStrategy = new ExcelMergeUtil(1, mergeColumeIndex);
- //开始处理写入
- try (ExcelWriter excelWriter = EasyExcel.write(bot, QuantitativeAssessmentSubTableExcelVo.class).registerWriteHandler(excelFillCellMergeStrategy).build()) {
- int no = 0;
- for (BaseStudentAssessmentCategory bsac : baseStudentAssessmentCategorieList) {
- dto.setBaseStudentAssessmentCategoryId(bsac.getId());
- //sheet名
- String sheetName = bsac.getName();
- WriteSheet writeSheet = EasyExcel.writerSheet(no++, sheetName ).build();
- //求所有的个人行为集合
- List<QuantitativeAssessmentSubTableExcelVo> quantitativeAssessmentSubTableExcelVoList = assessmentInspectionMapper.getQuantitativeAssessmentSubTableExcelVoList(dto);
- excelWriter.write(quantitativeAssessmentSubTableExcelVoList, writeSheet);
- }
- //TODO 班级量化考核统计表总
- }
- /*for (BaseStudentAssessmentCategory bsac : baseStudentAssessmentCategorieList) {
- dto.setBaseStudentAssessmentCategoryId(bsac.getId());
- //sheet名
- String sheetName = bsac.getName();
- //求所有的个人行为集合
- List<QuantitativeAssessmentSubTableExcelVo> quantitativeAssessmentSubTableExcelVoList = assessmentInspectionMapper.getQuantitativeAssessmentSubTableExcelVoList(dto);
- //需要合并的列
- int[] mergeColumeIndex = {0, 1, 2, 3, 4};
- //写字节流
- ExcelMergeUtil excelFillCellMergeStrategy = new ExcelMergeUtil(1, mergeColumeIndex);
- EasyExcel.write(bot, QuantitativeAssessmentSubTableExcelVo.class)
- .registerWriteHandler(excelFillCellMergeStrategy)
- .sheet(sheetName)
- .doWrite(quantitativeAssessmentSubTableExcelVoList);
- }*/
- }
- return RT.fileStream(bot.toByteArray(), fileName);
- }
- @Override
- public IPage<CalssQuantitativeAssessmentPageVo> getCalssQuantitativeAssessmentPage(Page<CalssQuantitativeAssessmentPageDto> page, CalssQuantitativeAssessmentPageDto dto) {
- //以班级为数据的基础进行数据的填充
- MPJLambdaWrapper<BaseClass> baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>();
- baseClassMPJLambdaWrapper
- .selectAs(BaseClass::getTeacherId, CalssQuantitativeAssessmentPageVo::getHeadTeacherId)
- .selectAs(XjrUser::getUserName, CalssQuantitativeAssessmentPageVo::getOa)
- .selectAs(XjrUser::getName, CalssQuantitativeAssessmentPageVo::getHeadTeacherName)
- .selectAs(BaseClass::getId, CalssQuantitativeAssessmentPageVo::getClassId)
- .selectAs(BaseClass::getName, CalssQuantitativeAssessmentPageVo::getClassName)
- .selectAs(BaseClassMajorSet::getTotalStudent, CalssQuantitativeAssessmentPageVo::getStudentNum)
- .selectAs(BaseClass::getIsGraduate, CalssQuantitativeAssessmentPageVo::getClassStatus)
- .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId)
- .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, BaseClass::getId)
- .disableSubLogicDel();
- IPage<CalssQuantitativeAssessmentPageVo> resultPage = baseClassMapper.selectJoinPage(page, CalssQuantitativeAssessmentPageVo.class, baseClassMPJLambdaWrapper);
- //当前数据记录班级id
- List<Long> classIdList = new ArrayList<>();
- for(CalssQuantitativeAssessmentPageVo c: resultPage.getRecords()){
- classIdList.add(Long.parseLong(c.getClassId()));
- }
- if(classIdList.size() > 0){
- //学生个人行为
- List<QuantitativeAssessmentSingleScoreVo> individualBehaviorList = assessmentInspectionMapper.getIndividualBehaviorList(new QuantitativeAssessmentSingleScoreDto(){{
- setClassIdList(classIdList);
- }});
- Map<Long , QuantitativeAssessmentSingleScoreVo> individualBehaviorMap = new HashMap<>();
- for (QuantitativeAssessmentSingleScoreVo q : individualBehaviorList) {
- individualBehaviorMap.put(q.getClassId(), q);
- }
- //常规管理
- List<QuantitativeAssessmentSingleScoreVo> conventionalManagementList = assessmentInspectionMapper.getConventionalManagementList(new QuantitativeAssessmentSingleScoreDto(){{
- setClassIdList(classIdList);
- }});
- Map<Long , QuantitativeAssessmentSingleScoreVo> conventionalManagementMap = new HashMap<>();
- for (QuantitativeAssessmentSingleScoreVo q : conventionalManagementList) {
- conventionalManagementMap.put(q.getClassId(), q);
- }
- //获奖及荣誉奖彰
- List<QuantitativeAssessmentSingleScoreVo> awardsAndHonorableList = assessmentInspectionMapper.getAwardsAndHonorList(new QuantitativeAssessmentSingleScoreDto(){{
- setClassIdList(classIdList);
- }});
- Map<Long , QuantitativeAssessmentSingleScoreVo> awardsAndHonorableMap = new HashMap<>();
- for (QuantitativeAssessmentSingleScoreVo q : awardsAndHonorableList) {
- awardsAndHonorableMap.put(q.getClassId(), q);
- }
- //准军事化考核
- List<QuantitativeAssessmentSingleScoreVo> paramilitaryList = assessmentInspectionMapper.getParamilitaryList(new QuantitativeAssessmentSingleScoreDto(){{
- setClassIdList(classIdList);
- }});
- Map<Long , QuantitativeAssessmentSingleScoreVo> paramilitaryMap = new HashMap<>();
- for (QuantitativeAssessmentSingleScoreVo q : paramilitaryList) {
- awardsAndHonorableMap.put(q.getClassId(), q);
- }
- //将结果写进对应的班级里
- for(CalssQuantitativeAssessmentPageVo c: resultPage.getRecords()){
- Long classId = Long.parseLong(c.getClassId());
- if(individualBehaviorMap.get(classId) != null){
- c.setStuPersonalBehaviorSubScore(individualBehaviorMap.get(classId).getScore());
- ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
- String geRenXingWeiGongShi = "sumSubScore/itemCount";
- /*int totalScore = scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()).getTotalScore();
- int itemCount = scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()).getItemCount();
- double res = 0;
- String newStr1 = zonghezhishu.replace("totalScore", ""+totalScore);
- String newStr2 = newStr1.replace("itemCount", ""+itemCount);
- try{
- res = Double.parseDouble(engine.eval(newStr2).toString());
- }catch (ScriptException s){
- }
- // 创建一个DecimalFormat对象,指定小数位数为两位
- DecimalFormat decimalFormat = new DecimalFormat("#.00");
- // 格式化double值为字符串
- String formattedNumber = decimalFormat.format(res);*/
- }
- if(conventionalManagementMap.get(classId) != null){
- c.setClassConventionalManageSubScore(conventionalManagementMap.get(classId).getScore());
- }
- if(awardsAndHonorableMap.get(classId) != null){
- c.setHonorSumScore(awardsAndHonorableMap.get(classId).getScore());
- }
- }
- }
- return resultPage;
- }
- @Override
- @Transactional
- public Boolean dataHandle(Long id) {
- //获取考核记录
- BaseStudentAssessmentInspection baseStudentAssessmentInspection = this.getById(id);
- if(baseStudentAssessmentInspection != null){
- //同步数据到考核关联班级表
- if(baseStudentAssessmentInspection.getAssessmentType() != null
- && baseStudentAssessmentInspection.getAssessmentType().equals("class")
- && baseStudentAssessmentInspection.getClassIds() != null
- && !baseStudentAssessmentInspection.getClassIds().equals("")){
- String[] classIds = baseStudentAssessmentInspection.getClassIds().split(",");
- for (String classId: classIds) {
- assessmentClassRelationMapper.insert(new BaseStudentAssessmentClassRelation(){{
- setClassId(Long.parseLong(classId));
- setBaseStudentAssessmentInspectionId(baseStudentAssessmentInspection.getId());
- QueryWrapper<BaseStudentAssessmentClassRelation> queryWrapperSortcode = new QueryWrapper<>();
- queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
- BaseStudentAssessmentClassRelation b = assessmentClassRelationMapper.selectOne(queryWrapperSortcode);
- setSortCode(b.getSortCode() + 1);
- }});
- }
- }
- //同步数据到考核关联学生表
- if(baseStudentAssessmentInspection.getAssessmentType() != null
- && baseStudentAssessmentInspection.getAssessmentType().equals("personal")
- && baseStudentAssessmentInspection.getStudentUserIds() != null
- && !baseStudentAssessmentInspection.getStudentUserIds().equals("")){
- String[] studentIds = baseStudentAssessmentInspection.getStudentUserIds().split(",");
- for (String studentId: studentIds) {
- assessmentStudentRelationMapper.insert(new BaseStudentAssessmentStudentRelation(){{
- MPJLambdaWrapper<BaseStudentSchoolRoll> baseStudentSchoolRollMPJLambdaWrapper = new MPJLambdaWrapper<>();
- baseStudentSchoolRollMPJLambdaWrapper
- .select(BaseStudentSchoolRoll::getId)
- .select(BaseStudentSchoolRoll.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentSchoolRoll.class).contains(x.getProperty()))
- .eq(BaseStudentSchoolRoll::getUserId, studentId);
- BaseStudentSchoolRoll baseStudentSchoolRoll = baseStudentSchoolRollMapper.selectOne(baseStudentSchoolRollMPJLambdaWrapper);
- if(baseStudentSchoolRoll != null){
- setClassId(baseStudentSchoolRoll.getClassId());
- }
- setUserId(Long.parseLong(studentId));
- setBaseStudentAssessmentInspectionId(baseStudentAssessmentInspection.getId());
- QueryWrapper<BaseStudentAssessmentStudentRelation> queryWrapperSortcode = new QueryWrapper<>();
- queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
- BaseStudentAssessmentStudentRelation b = assessmentStudentRelationMapper.selectOne(queryWrapperSortcode);
- setSortCode(b.getSortCode() + 1);
- }});
- }
- }
- }
- return true;
- }
- }
|