Переглянути джерело

班级报告

tags/正式版本
雍文秀 2 роки тому
джерело
коміт
93ce6c6792

+ 9
- 1
sexam/src/main/java/com/xhkjedu/sexam/service/report/EReportClassService.java Переглянути файл

@@ -7,9 +7,11 @@ import com.xhkjedu.sexam.mapper.reportclass.ERclassMapper;
7 7
 import com.xhkjedu.sexam.mapper.reportclass.ERclassRankMapper;
8 8
 import com.xhkjedu.sexam.mapper.reportclass.EReportClassMapper;
9 9
 import com.xhkjedu.sexam.mapper.reportstu.ERstudentMapper;
10
+import com.xhkjedu.sexam.mapper.system.UserMapper;
10 11
 import com.xhkjedu.sexam.model.reportstu.ERstudent;
11 12
 import com.xhkjedu.sexam.vo.report.ERPaperVo;
12 13
 import com.xhkjedu.sexam.vo.report.ERankParamVo;
14
+import com.xhkjedu.sexam.vo.system.UserVo;
13 15
 import com.xhkjedu.utils.N_Utils;
14 16
 import org.springframework.stereotype.Service;
15 17
 import org.springframework.transaction.annotation.Transactional;
@@ -19,6 +21,7 @@ import java.util.ArrayList;
19 21
 import java.util.HashMap;
20 22
 import java.util.List;
21 23
 import java.util.Map;
24
+import java.util.stream.Collectors;
22 25
 
23 26
 /**
24 27
  * @author ywx
@@ -42,6 +45,8 @@ public class EReportClassService {
42 45
     private EReportSchoolMapper eReportSchoolMapper;
43 46
     @Resource
44 47
     private EPaperStudentMapper ePaperStudentMapper;
48
+    @Resource
49
+    private UserMapper userMapper;
45 50
 
46 51
     //考试概况-学科成绩
47 52
     public List<Map> listXkCj(Integer examid, Integer classid) {
@@ -68,7 +73,10 @@ public class EReportClassService {
68 73
         eReportSchoolMapper.delByExamAndSubjectId(examid, subjectid, ranktype);//删除考试等级报告
69 74
         List<ERPaperVo> papers = eReportSchoolMapper.listByExamAndSubjectId(examid, subjectid);//考试试卷
70 75
         List<ERstudent> students = ePaperStudentMapper.listByExamAndSubjectId(examid, subjectid);//考试试卷学生
71
-        eReportGenerateService.setClassGradeRank(examid, papers, students, rank.getRranks(), createid);//生成考试等级报告
76
+        List<Integer> userids = students.stream().map(ERstudent::getStudentid).distinct().collect(Collectors.toList());
77
+        List<UserVo> users = userMapper.listNameByUserIds(userids);
78
+        Map<Integer, String> userMap = users.stream().collect(Collectors.toMap(UserVo::getUserid, UserVo::getUsername));
79
+        eReportGenerateService.setClassGradeRank(examid, papers, students, rank.getRranks(), createid, userMap);//生成考试等级报告
72 80
         return eRclassRankMapper.listByExamId(rank);//考试等级报告列表
73 81
     }
74 82
 

+ 71
- 67
sexam/src/main/java/com/xhkjedu/sexam/service/report/EReportGenerateService.java Переглянути файл

@@ -304,8 +304,11 @@ public class EReportGenerateService {
304 304
         eRstudentMapper.insertList(classSubjectStudents);
305 305
 
306 306
 //        setClassQuestion(examid, subjects, classes);//题型试题
307
-        setClassGradeRankAll(examid, papers, classSubjectStudents, createid);//班级等级分布
308
-        setAction(examid, subjectMap);//行为分析
307
+        List<Integer> userids = students.stream().map(ERstudent::getStudentid).distinct().collect(Collectors.toList());
308
+        List<UserVo> users = userMapper.listNameByUserIds(userids);
309
+        Map<Integer, String> userMap = users.stream().collect(Collectors.toMap(UserVo::getUserid, UserVo::getUsername));
310
+        setClassGradeRankAll(examid, papers, classSubjectStudents, createid, userMap);//班级等级分布
311
+        setAction(examid, subjectMap, userMap);//行为分析
309 312
     }
310 313
 
311 314
     //班级科目平均分排名
@@ -330,16 +333,16 @@ public class EReportGenerateService {
330 333
     }
331 334
 
332 335
     //行为分析
333
-    private void setAction(Integer examid, Map<String, String> subjectMap) {
336
+    private void setAction(Integer examid, Map<String, String> subjectMap, Map<Integer, String> userMap) {
334 337
         List<ERstudentAction> studentActions = new ArrayList<>();
335 338
         List<ERclassAction> classActions = new ArrayList<>();
336 339
         //违纪行为
337 340
         List<Map> bads = eReportGenerateMapper.listBadActionByExamId(examid);
338 341
         Integer actiontype = 1;
339
-        setActions(examid, subjectMap, studentActions, classActions, bads, actiontype);
342
+        setActions(examid, subjectMap, studentActions, classActions, bads, actiontype, userMap);
340 343
         List<Map> goods = eReportGenerateMapper.listGoodActionByExamId(examid);
341 344
         actiontype = 2;
342
-        setActions(examid, subjectMap, studentActions, classActions, goods, actiontype);
345
+        setActions(examid, subjectMap, studentActions, classActions, goods, actiontype, userMap);
343 346
         if (N_Utils.isListEmpty(studentActions)) return;
344 347
         eRstudentActionMapper.insertList(studentActions);
345 348
         eRclassActionMapper.insertList(classActions);
@@ -348,7 +351,7 @@ public class EReportGenerateService {
348 351
     //处理行为数据
349 352
     private void setActions(Integer examid, Map<String, String> subjectMap
350 353
             , List<ERstudentAction> studentActions, List<ERclassAction> classActions
351
-            , List<Map> actions, Integer actiontype) {
354
+            , List<Map> actions, Integer actiontype, Map<Integer, String> userMap) {
352 355
         if (N_Utils.isListNotEmpty(actions)) {
353 356
             for (Map action : actions) {
354 357
                 action.put("subjectname", subjectMap.get(action.get("subjectid")));
@@ -359,12 +362,25 @@ public class EReportGenerateService {
359 362
             for (Map.Entry<Integer, List<Map>> entry : ccollect.entrySet()) {
360 363
                 List<Map> subjects = new ArrayList<>();
361 364
                 Map<String, List<Map>> scollect = entry.getValue().stream().collect(Collectors.groupingBy(s -> s.get("subjectid").toString()));
365
+                int znum = entry.getValue().size();//总人数
362 366
                 for (Map.Entry<String, List<Map>> sentry : scollect.entrySet()) {
363 367
                     List<Map> list = sentry.getValue();
364 368
                     Map subject = new HashMap();
365 369
                     subject.put("subjectid", sentry.getKey());
366 370
                     subject.put("subjectname", list.get(0).get("subjectname"));
367
-                    subject.put("num", list.size());
371
+                    int num = list.size();
372
+                    subject.put("num", num);
373
+                    subject.put("nrate", N_Utils.getIntegerDivideAndMulitiply(num, znum));
374
+                    List<Map> students=new ArrayList<>();
375
+                    for (Map s : list) {
376
+                        Map stu=new HashMap();
377
+                        Integer studentid = (Integer) s.get("studentid");
378
+                        stu.put("studentid", studentid);
379
+                        stu.put("num", s.get("num"));
380
+                        stu.put("studentname", userMap.get(studentid));
381
+                        students.add(stu);
382
+                    }
383
+                    subject.put("students", students);
368 384
                     subjects.add(subject);
369 385
                 }
370 386
                 ERclassAction ca = new ERclassAction();
@@ -398,13 +414,14 @@ public class EReportGenerateService {
398 414
     }
399 415
 
400 416
     //班级等级分布
401
-    private void setClassGradeRankAll(Integer examid, List<ERPaperVo> papers, List<ERstudent> students, Integer createid) {
402
-        setClassGradeRank(examid, papers, students, setRrank(1), createid);//班级等级分布--等级
403
-        setClassGradeRank(examid, papers, students, setRrank(2), createid);//班级等级分布--分数段
404
-        setClassGradeRank(examid, papers, students, setRrank(3), createid);//班级等级分布--临界分
405
-        setClassGradeRank(examid, papers, students, setRrank(4), createid);//班级等级分布--临界名次
406
-        setClassGradeRank(examid, papers, students, setRrank(5), createid);//班级等级分布--优秀年级前
407
-        setClassGradeRank(examid, papers, students, setRrank(6), createid);//班级等级分布--学困年级后
417
+    private void setClassGradeRankAll(Integer examid, List<ERPaperVo> papers, List<ERstudent> students
418
+            , Integer createid, Map<Integer, String> userMap) {
419
+        setClassGradeRank(examid, papers, students, setRrank(1), createid, userMap);//班级等级分布--等级
420
+        setClassGradeRank(examid, papers, students, setRrank(2), createid, userMap);//班级等级分布--分数段
421
+        setClassGradeRank(examid, papers, students, setRrank(3), createid, userMap);//班级等级分布--临界分
422
+        setClassGradeRank(examid, papers, students, setRrank(4), createid, userMap);//班级等级分布--临界名次
423
+        setClassGradeRank(examid, papers, students, setRrank(5), createid, userMap);//班级等级分布--优秀年级前
424
+        setClassGradeRank(examid, papers, students, setRrank(6), createid, userMap);//班级等级分布--学困年级后
408 425
     }
409 426
 
410 427
     //等级初始值设置
@@ -478,11 +495,7 @@ public class EReportGenerateService {
478 495
 
479 496
     //班级等级分布
480 497
     public void setClassGradeRank(Integer examid, List<ERPaperVo> papers, List<ERstudent> students
481
-            , List<ERrank> rranks, Integer createid) {
482
-        List<Integer> userids = students.stream().map(ERstudent::getStudentid).distinct().collect(Collectors.toList());
483
-        List<UserVo> users = userMapper.listNameByUserIds(userids);
484
-        Map<Integer, String> userMap = users.stream().collect(Collectors.toMap(UserVo::getUserid, UserVo::getUsername));
485
-
498
+            , List<ERrank> rranks, Integer createid, Map<Integer, String> userMap) {
486 499
         Map<String, Double> scoreMap = papers.stream().collect(Collectors.toMap(p -> p.getSubjectid(), p -> p.getPscore()));//考试总分
487 500
         Double pscore;//试卷总分
488 501
 
@@ -523,22 +536,20 @@ public class EReportGenerateService {
523 536
                     }
524 537
 
525 538
                     //全部班级统计
526
-                    for (Map.Entry<String, List<ERstudent>> entry : qbbjcollect.entrySet()) {
527
-                        Integer classid = 0;
528
-                        List<ERstudent> list = entry.getValue();
529
-                        setDjTj(examid, userMap, rclassRankList, rrank, rankrange, subjectid, classid, list);
530
-                        IntSummaryStatistics statistics = list.stream().mapToInt(s -> s.getSchoolrank()).summaryStatistics();
531
-                        rrank1.setLinescore(statistics.getMax());
532
-                        rrank1.setFloatscore(statistics.getMin());
533
-                    }
539
+                    Integer classid = 0;
540
+                    List<ERstudent> list = qbbjcollect.get(subjectid);
541
+                    setDjTj(examid, userMap, rclassRankList, rrank, rankrange, subjectid, classid, list);
542
+                    IntSummaryStatistics statistics = list.stream().mapToInt(s -> s.getSchoolrank()).summaryStatistics();
543
+                    rrank1.setLinescore(statistics.getMax());
544
+                    rrank1.setFloatscore(statistics.getMin());
534 545
                     rrankList.add(rrank1);
535 546
 
536 547
                     //班级科目统计
537 548
                     Map<Integer, List<ERstudent>> ccollect = students.stream().filter(s -> s.getSubjectid().equals(subjectid))
538 549
                             .collect(Collectors.groupingBy(s -> s.getClassid()));
539 550
                     for (Map.Entry<Integer, List<ERstudent>> entry : ccollect.entrySet()) {
540
-                        Integer classid = entry.getKey();
541
-                        List<ERstudent> list = entry.getValue();
551
+                        classid = entry.getKey();
552
+                        list = entry.getValue();
542 553
                         setDjTj(examid, userMap, rclassRankList, rrank, rankrange, subjectid, classid, list);
543 554
                     }
544 555
                 }
@@ -553,6 +564,7 @@ public class EReportGenerateService {
553 564
                 Integer cnum = ExamUtil.divUp(pscore, linescore);
554 565
                 for (Integer i = 1; i <= cnum; i++) {
555 566
                     ERrank rrank = new ERrank();
567
+                    rrank.setSubjectid(subjectid);
556 568
                     rrank.setRanktype(ranktype);
557 569
                     rrank.setSubjectid(subjectid);
558 570
                     double maxscore = ExamUtil.mul(i, linescore);
@@ -574,18 +586,16 @@ public class EReportGenerateService {
574 586
                     rrankList.add(rrank1);
575 587
 
576 588
                     //全部班级统计
577
-                    for (Map.Entry<String, List<ERstudent>> entry : qbbjcollect.entrySet()) {
578
-                        Integer classid = 0;
579
-                        List<ERstudent> list = entry.getValue();
580
-                        setFdTj(examid, userMap, rclassRankList, cnum, i, rrank, rankrange, classid, list);
581
-                    }
589
+                    Integer classid = 0;
590
+                    List<ERstudent> list = qbbjcollect.get(subjectid);
591
+                    setFdTj(examid, userMap, rclassRankList, cnum, i, rrank, rankrange, classid, list);
582 592
 
583 593
                     //班级科目统计
584 594
                     Map<Integer, List<ERstudent>> ccollect = students.stream().filter(s -> s.getSubjectid().equals(subjectid))
585 595
                             .collect(Collectors.groupingBy(s -> s.getClassid()));
586 596
                     for (Map.Entry<Integer, List<ERstudent>> entry : ccollect.entrySet()) {
587
-                        Integer classid = entry.getKey();
588
-                        List<ERstudent> list = entry.getValue();
597
+                        classid = entry.getKey();
598
+                        list = entry.getValue();
589 599
                         setFdTj(examid, userMap, rclassRankList, cnum, i, rrank, rankrange, classid, list);
590 600
                     }
591 601
                 }
@@ -617,18 +627,16 @@ public class EReportGenerateService {
617 627
                 rrankList.add(rrank1);
618 628
 
619 629
                 //全部班级统计
620
-                for (Map.Entry<String, List<ERstudent>> entry : qbbjcollect.entrySet()) {
621
-                    Integer classid = 0;
622
-                    List<ERstudent> list = entry.getValue();
623
-                    setLjfTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
624
-                }
630
+                Integer classid = 0;
631
+                List<ERstudent> list = qbbjcollect.get(subjectid);
632
+                setLjfTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
625 633
 
626 634
                 //班级科目统计
627 635
                 Map<Integer, List<ERstudent>> ccollect = students.stream().filter(s -> s.getSubjectid().equals(subjectid))
628 636
                         .collect(Collectors.groupingBy(s -> s.getClassid()));
629 637
                 for (Map.Entry<Integer, List<ERstudent>> entry : ccollect.entrySet()) {
630
-                    Integer classid = entry.getKey();
631
-                    List<ERstudent> list = entry.getValue();
638
+                    classid = entry.getKey();
639
+                    list = entry.getValue();
632 640
                     setLjfTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
633 641
                 }
634 642
             }
@@ -658,18 +666,16 @@ public class EReportGenerateService {
658 666
                 rrankList.add(rrank1);
659 667
 
660 668
                 //全部班级统计
661
-                for (Map.Entry<String, List<ERstudent>> entry : qbbjcollect.entrySet()) {
662
-                    Integer classid = 0;
663
-                    List<ERstudent> list = entry.getValue();
664
-                    setLjmcTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
665
-                }
669
+                Integer classid = 0;
670
+                List<ERstudent> list = qbbjcollect.get(subjectid);
671
+                setLjmcTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
666 672
 
667 673
                 //班级科目统计
668 674
                 Map<Integer, List<ERstudent>> ccollect = students.stream().filter(s -> s.getSubjectid().equals(subjectid))
669 675
                         .collect(Collectors.groupingBy(s -> s.getClassid()));
670 676
                 for (Map.Entry<Integer, List<ERstudent>> entry : ccollect.entrySet()) {
671
-                    Integer classid = entry.getKey();
672
-                    List<ERstudent> list = entry.getValue();
677
+                    classid = entry.getKey();
678
+                    list = entry.getValue();
673 679
                     setLjmcTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
674 680
                 }
675 681
             }
@@ -689,18 +695,16 @@ public class EReportGenerateService {
689 695
                 BeanUtils.copyProperties(rrank, rrank1);
690 696
                 rrankList.add(rrank1);
691 697
                 //全部班级统计
692
-                for (Map.Entry<String, List<ERstudent>> entry : qbbjcollect.entrySet()) {
693
-                    Integer classid = 0;
694
-                    List<ERstudent> list = entry.getValue();
695
-                    setNjqTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
696
-                }
698
+                Integer classid = 0;
699
+                List<ERstudent> list = qbbjcollect.get(subjectid);
700
+                setNjqTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
697 701
 
698 702
                 //班级科目统计
699 703
                 Map<Integer, List<ERstudent>> ccollect = students.stream().filter(s -> s.getSubjectid().equals(subjectid))
700 704
                         .collect(Collectors.groupingBy(s -> s.getClassid()));
701 705
                 for (Map.Entry<Integer, List<ERstudent>> entry : ccollect.entrySet()) {
702
-                    Integer classid = entry.getKey();
703
-                    List<ERstudent> list = entry.getValue();
706
+                    classid = entry.getKey();
707
+                    list = entry.getValue();
704 708
                     setNjqTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
705 709
                 }
706 710
             }
@@ -718,21 +722,20 @@ public class EReportGenerateService {
718 722
                 rrank.setSubjectid(subjectid);
719 723
                 ERrank rrank1 = new ERrank();
720 724
                 BeanUtils.copyProperties(rrank, rrank1);
725
+                rrank1.setMaxscore(null);
721 726
                 rrankList.add(rrank1);
722 727
                 //全部班级统计
723
-                for (Map.Entry<String, List<ERstudent>> entry : qbbjcollect.entrySet()) {
724
-                    Integer classid = 0;
725
-                    List<ERstudent> list = entry.getValue();
726
-                    rrank.setMaxscore(getMaxScore(list, linescore));
727
-                    setNjhTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
728
-                }
728
+                Integer classid = 0;
729
+                List<ERstudent> list = qbbjcollect.get(subjectid);
730
+                rrank.setMaxscore(getMaxScore(list, linescore));
731
+                setNjhTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
729 732
 
730 733
                 //班级科目统计
731 734
                 Map<Integer, List<ERstudent>> ccollect = students.stream().filter(s -> s.getSubjectid().equals(subjectid))
732 735
                         .collect(Collectors.groupingBy(s -> s.getClassid()));
733 736
                 for (Map.Entry<Integer, List<ERstudent>> entry : ccollect.entrySet()) {
734
-                    Integer classid = entry.getKey();
735
-                    List<ERstudent> list = entry.getValue();
737
+                    classid = entry.getKey();
738
+                    list = entry.getValue();
736 739
                     rrank.setMaxscore(getMaxScore(list, linescore));
737 740
                     setNjhTj(examid, userMap, rclassRankList, rrank, rankrange, classid, subjectid, list);
738 741
                 }
@@ -887,6 +890,7 @@ public class EReportGenerateService {
887 890
         ERclassRank gr = new ERclassRank();
888 891
         gr.setExamid(examid);
889 892
         gr.setClassid(classid);
893
+        gr.setSubjectid(rrank.getSubjectid());
890 894
         gr.setRanktype(rrank.getRanktype());
891 895
         gr.setRankname(rrank.getRankname());
892 896
         List<ERstudent> list2;
@@ -921,8 +925,8 @@ public class EReportGenerateService {
921 925
         cr.setRanktype(rrank.getRanktype());
922 926
         cr.setRankname(rankname);
923 927
         List<ERstudent> list2;
924
-        double finalMinscore = rrank.getMaxscore();
925
-        double finalMaxscore = rrank.getMinscore();
928
+        double finalMinscore = rrank.getMinscore();
929
+        double finalMaxscore = rrank.getMaxscore();
926 930
         if (rankname.equals("A")) {
927 931
             list2 = list.stream().filter(s -> s.getScore().compareTo(finalMinscore) != -1).collect(Collectors.toList());
928 932
         } else {

+ 8
- 1
sexam/src/main/java/com/xhkjedu/sexam/service/report/EReportSchoolService.java Переглянути файл

@@ -7,10 +7,12 @@ import com.xhkjedu.sexam.mapper.report.ERsubjectMapper;
7 7
 import com.xhkjedu.sexam.mapper.reportclass.ERclassMapper;
8 8
 import com.xhkjedu.sexam.mapper.reportclass.ERclassRankMapper;
9 9
 import com.xhkjedu.sexam.mapper.reportstu.ERstudentMapper;
10
+import com.xhkjedu.sexam.mapper.system.UserMapper;
10 11
 import com.xhkjedu.sexam.model.reportstu.ERstudent;
11 12
 import com.xhkjedu.sexam.model.reportstu.ERstudentAction;
12 13
 import com.xhkjedu.sexam.vo.report.ERPaperVo;
13 14
 import com.xhkjedu.sexam.vo.report.ERankParamVo;
15
+import com.xhkjedu.sexam.vo.system.UserVo;
14 16
 import org.springframework.stereotype.Service;
15 17
 import org.springframework.transaction.annotation.Transactional;
16 18
 
@@ -44,6 +46,8 @@ public class EReportSchoolService {
44 46
     private EReportSchoolMapper eReportSchoolMapper;
45 47
     @Resource
46 48
     private EPaperStudentMapper ePaperStudentMapper;
49
+    @Resource
50
+    private UserMapper userMapper;
47 51
 
48 52
     //考试概况
49 53
     public Map getKsGk(Integer examid) {
@@ -95,7 +99,10 @@ public class EReportSchoolService {
95 99
         eReportSchoolMapper.delByExamAndSubjectId(examid, subjectid, ranktype);//删除考试等级报告
96 100
         List<ERPaperVo> papers = eReportSchoolMapper.listByExamAndSubjectId(examid, subjectid);//考试试卷
97 101
         List<ERstudent> students = ePaperStudentMapper.listByExamAndSubjectId(examid, subjectid);//考试试卷学生
98
-        eReportGenerateService.setClassGradeRank(examid, papers, students, rank.getRranks(), createid);//生成考试等级报告
102
+        List<Integer> userids = students.stream().map(ERstudent::getStudentid).distinct().collect(Collectors.toList());
103
+        List<UserVo> users = userMapper.listNameByUserIds(userids);
104
+        Map<Integer, String> userMap = users.stream().collect(Collectors.toMap(UserVo::getUserid, UserVo::getUsername));
105
+        eReportGenerateService.setClassGradeRank(examid, papers, students, rank.getRranks(), createid, userMap);//生成考试等级报告
99 106
         return eRclassRankMapper.listByExamId(rank);//考试等级报告列表
100 107
     }
101 108
 

Завантаження…
Відмінити
Зберегти