Browse Source

学生成绩录入

dzx 2 months ago
parent
commit
ca5a15f8f9

+ 7 - 2
src/main/java/com/xjrsoft/module/xycxedu/controller/ExamPlanController.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
@@ -140,8 +141,12 @@ public class ExamPlanController {
     @GetMapping(value = "/plan-list")
     @ApiOperation(value="查询所有考试计划")
     @SaCheckPermission("examplan:detail")
-    public RT<List<ExamPlanListVo>> allPlan(){
-        List<ExamPlan> list = examPlanService.list();
+    public RT<List<ExamPlanListVo>> allPlan(@Valid ExamPlanPageDto dto){
+        List<ExamPlan> list = examPlanService.list(
+                new QueryWrapper<ExamPlan>().lambda()
+                        .eq(ExamPlan::getSemesterId, dto.getSemesterId())
+                        .eq(ExamPlan::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
         List<ExamPlanListVo> listVos = BeanUtil.copyToList(list, ExamPlanListVo.class);
         return RT.ok(listVos);
     }

+ 2 - 0
src/main/java/com/xjrsoft/module/xycxedu/dto/ExamSubjectScoreEnterImportDto.java

@@ -5,6 +5,8 @@ import com.xjrsoft.common.annotation.Required;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.Valid;
+
 
 /**
 * @title: 成绩录入

+ 55 - 42
src/main/java/com/xjrsoft/module/xycxedu/service/impl/ExamSubjectScoreEnterServiceImpl.java

@@ -3,12 +3,14 @@ package com.xjrsoft.module.xycxedu.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.exception.ExcelDataConvertException;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.ArchivesStatusEnum;
 import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseCourseSubject;
 import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
@@ -73,53 +75,64 @@ public class ExamSubjectScoreEnterServiceImpl extends MPJBaseServiceImpl<ExamSub
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean importData(Long id, MultipartFile file) throws IOException {
-        ExamSubjectScoreEnter enter = this.getById(id);
-        List<ExamSubjectScoreEnterImportDto> dataList = EasyExcel.read(file.getInputStream()).headRowNumber(3).head(ExamSubjectScoreEnterImportDto.class).sheet().doReadSync();
-        List<BaseCourseSubject> classList = courseSubjectService.list(
-                new QueryWrapper<BaseCourseSubject>().lambda()
-                        .eq(BaseCourseSubject::getDeleteMark, DeleteMark.NODELETE.getCode())
-        );
-        Map<Long, String> courseSubjectMaps = classList.stream().collect(Collectors.toMap(BaseCourseSubject::getId, BaseCourseSubject::getName));
+        try {
+            ExamSubjectScoreEnter enter = this.getById(id);
+            List<ExamSubjectScoreEnterImportDto> dataList = EasyExcel.read(file.getInputStream()).headRowNumber(3).head(ExamSubjectScoreEnterImportDto.class).sheet().doReadSync();
+            List<BaseCourseSubject> classList = courseSubjectService.list(
+                    new QueryWrapper<BaseCourseSubject>().lambda()
+                            .eq(BaseCourseSubject::getDeleteMark, DeleteMark.NODELETE.getCode())
+            );
+            Map<Long, String> courseSubjectMaps = classList.stream().collect(Collectors.toMap(BaseCourseSubject::getId, BaseCourseSubject::getName));
 
-        List<String> credentialNumbers = dataList.stream().filter(x -> StrUtil.isNotEmpty(x.getCredentialNumber())).map(ExamSubjectScoreEnterImportDto::getCredentialNumber).collect(Collectors.toList());
-        if(credentialNumbers.isEmpty()){
-            return true;
-        }
-        List<User> userList = userService.list(
-                new QueryWrapper<User>().lambda()
-                        .eq(User::getDeleteMark, DeleteMark.NODELETE.getCode())
-                        .in(User::getCredentialNumber, credentialNumbers)
-        );
-        Map<String, Long> userMaps = userList.stream().collect(Collectors.toMap(User::getCredentialNumber, User::getId));
+            List<String> credentialNumbers = dataList.stream().filter(x -> StrUtil.isNotEmpty(x.getCredentialNumber())).map(ExamSubjectScoreEnterImportDto::getCredentialNumber).collect(Collectors.toList());
+            if(credentialNumbers.isEmpty()){
+                return true;
+            }
+            List<User> userList = userService.list(
+                    new MPJLambdaWrapper<User>()
+                            .select(User::getId)
+                            .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
+                            .innerJoin(ExamSubjectScore.class, ExamSubjectScore::getUserId, User::getId)
+                            .eq(User::getDeleteMark, DeleteMark.NODELETE.getCode())
+
+                            .in(User::getCredentialNumber, credentialNumbers)
+            );
+            Map<String, Long> userMaps = userList.stream().collect(Collectors.toMap(User::getCredentialNumber, User::getId));
 
-        List<ExamSubjectScore> scoreList = scoreService.list(
-                new QueryWrapper<ExamSubjectScore>().lambda()
-                        .eq(ExamSubjectScore::getExamSubjectScoreEnterId, enter.getId())
-                        .eq(ExamSubjectScore::getDeleteMark, DeleteMark.NODELETE.getCode())
-        );
+            List<ExamSubjectScore> scoreList = scoreService.list(
+                    new QueryWrapper<ExamSubjectScore>().lambda()
+                            .eq(ExamSubjectScore::getExamSubjectScoreEnterId, enter.getId())
+                            .eq(ExamSubjectScore::getDeleteMark, DeleteMark.NODELETE.getCode())
+            );
 
-        Map<Long, ExamSubjectScore> listMap = scoreList.stream().collect(Collectors.toMap(ExamSubjectScore::getUserId, x -> x));
-
-        List<ExamSubjectScore> updateList = new ArrayList<>();
-        for (ExamSubjectScoreEnterImportDto importVo : dataList) {
-            Long userId = userMaps.get(importVo.getCredentialNumber());
-            ExamSubjectScore examSubjectScores = listMap.get(userId);
-            examSubjectScores.setCourseSubjectId(enter.getCourseSubjectId());
-            examSubjectScores.setScore(importVo.getScore()==null?null:Float.parseFloat(importVo.getScore()));
-            examSubjectScores.setSemesterId(enter.getSemesterId());
-            examSubjectScores.setExamSubjectScoreEnterId(enter.getId());
-            examSubjectScores.setSemesterId(enter.getSemesterId());
-            examSubjectScores.setClassRanking(importVo.getClassRanking());
-            examSubjectScores.setGradeRanking(importVo.getGradeRanking());
-            examSubjectScores.setCoursename(courseSubjectMaps.get(enter.getCourseSubjectId()));
-            examSubjectScores.setMilexamid(enter.getExamPlanId());
-            updateList.add(examSubjectScores);
-        }
+            Map<Long, ExamSubjectScore> listMap = scoreList.stream().collect(Collectors.toMap(ExamSubjectScore::getUserId, x -> x));
+
+            List<ExamSubjectScore> updateList = new ArrayList<>();
+            for (ExamSubjectScoreEnterImportDto importVo : dataList) {
+                Long userId = userMaps.get(importVo.getCredentialNumber());
+                ExamSubjectScore examSubjectScores = listMap.get(userId);
+                examSubjectScores.setCourseSubjectId(enter.getCourseSubjectId());
+                examSubjectScores.setScore(importVo.getScore()==null?null:Float.parseFloat(importVo.getScore()));
+                examSubjectScores.setSemesterId(enter.getSemesterId());
+                examSubjectScores.setExamSubjectScoreEnterId(enter.getId());
+                examSubjectScores.setSemesterId(enter.getSemesterId());
+                examSubjectScores.setClassRanking(importVo.getClassRanking());
+                examSubjectScores.setGradeRanking(importVo.getGradeRanking());
+                examSubjectScores.setCoursename(courseSubjectMaps.get(enter.getCourseSubjectId()));
+                examSubjectScores.setMilexamid(enter.getExamPlanId());
+                updateList.add(examSubjectScores);
+            }
 
-        if(!updateList.isEmpty()){
-            scoreService.updateBatchById(updateList);
+            if(!updateList.isEmpty()){
+                scoreService.updateBatchById(updateList);
+            }
+        }catch (Exception e){
+            if(e.getClass().equals(ExcelDataConvertException.class)){
+                throw new MyException("班级排名和年级排名只能填写数字,请检查");
+            }else{
+                throw new MyException("导入出错,请联系管理员");
+            }
         }
-
         return true;
     }