Browse Source

fixbug质量统计曲线统计同列表显示

xiatian 10 months ago
parent
commit
4d42584a09

+ 12 - 9
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java

@@ -1,7 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 
-import cn.com.qmth.stmms.biz.exam.model.Marker;
-import cn.com.qmth.stmms.common.enums.MarkStatus;
+import java.util.List;
 
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -9,7 +8,8 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
-import java.util.List;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.common.enums.MarkStatus;
 
 public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>, JpaSpecificationExecutor<Marker> {
 
@@ -19,6 +19,9 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     @Query("select count(m) from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
     public long countByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number);
 
+    @Query("select m from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3 and m.finishCount>0")
+    public List<Marker> findByExamIdAndSubjectCodeAndGroupNumberMarked(int examId, String subjectCode, int number);
+
     public List<Marker> findByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number,
             Pageable page);
 
@@ -44,12 +47,12 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
             + "where m.id=?1")
     public void updateQualityById(Integer id, int finishCount, int validCount, double avgSpeed, double avgScore,
             double stdevScore);
-    
+
     @Modifying
     @Query("update Marker m set m.finishCountNa=?2, m.validCountNa=?3, m.avgSpeedNa=?4, m.avgScoreNa=?5, m.stdevScoreNa=?6 "
             + "where m.id=?1")
-    public void updateQualityNoArbitrateById(Integer id, int finishCount, int validCount, double avgSpeed, double avgScore,
-            double stdevScore);
+    public void updateQualityNoArbitrateById(Integer id, int finishCount, int validCount, double avgSpeed,
+            double avgScore, double stdevScore);
 
     @Modifying
     @Query("update Marker m set m.finishCount=null, m.validCount=null, m.avgSpeed=null, m.avgScore=null, m.stdevScore=null "
@@ -70,8 +73,8 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     @Query("select count(m) from Marker m where m.userId=?1")
     public long countByUserId(Integer userId);
 
-    public List<Marker> findByExamIdAndSubjectCodeAndUserIdAndEnable(Integer examId, String subjectCode,
-            Integer userId, boolean enable);
+    public List<Marker> findByExamIdAndSubjectCodeAndUserIdAndEnable(Integer examId, String subjectCode, Integer userId,
+            boolean enable);
 
     @Modifying
     @Query(value = "update eb_marker m set m.reject_count=?2 where m.id=?1", nativeQuery = true)
@@ -85,6 +88,6 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
 
     @Modifying
     @Query(value = "update eb_marker m set m.reject_count=ifnull(m.reject_count,0)+1 where m.id=?1", nativeQuery = true)
-	public void addRejectCountById(Integer markerId);
+    public void addRejectCountById(Integer markerId);
 
 }

+ 5 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java

@@ -1,12 +1,12 @@
 package cn.com.qmth.stmms.biz.exam.service;
 
+import java.util.List;
+import java.util.Set;
+
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
 
-import java.util.List;
-import java.util.Set;
-
 public interface MarkerService {
 
     Marker save(Marker marker);
@@ -47,4 +47,6 @@ public interface MarkerService {
     void updateEnableByUserId(Integer userId, boolean enable);
 
     void resetById(Integer id);
+
+    List<Marker> findByExamAndSubjectAndGroupMarked(int examId, String subjectCode, int number);
 }

+ 19 - 13
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java

@@ -42,8 +42,8 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     @Autowired
     private MarkLibraryDao libraryDao;
 
-//    @Autowired
-//    private MarkGroupService groupService;
+    // @Autowired
+    // private MarkGroupService groupService;
 
     @Autowired
     private UserDao userDao;
@@ -70,6 +70,11 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         return markerDao.findByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, number, null);
     }
 
+    @Override
+    public List<Marker> findByExamAndSubjectAndGroupMarked(int examId, String subjectCode, int number) {
+        return markerDao.findByExamIdAndSubjectCodeAndGroupNumberMarked(examId, subjectCode, number);
+    }
+
     @Override
     public long countByExam(int examId) {
         return markerDao.countByExamId(examId);
@@ -129,7 +134,7 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
             @Override
             public Predicate toPredicate(Root<Marker> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
                 List<Predicate> predicates = new LinkedList<Predicate>();
-                if (query.getMarked() != null&&query.getMarked()) {
+                if (query.getMarked() != null && query.getMarked()) {
                     predicates.add(cb.gt(root.get("finishCount"), 0));
                 }
                 if (query.getId() != null) {
@@ -173,8 +178,8 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
                         predicates.add(cb.equal(root.get("userId"), 0));
                     }
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ? cb.conjunction()
+                        : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
@@ -186,7 +191,8 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     }
 
     @Override
-    public Marker findByExamAndSubjectAndNumberAndUserId(int examId, String subjectCode, Integer number, Integer userId) {
+    public Marker findByExamAndSubjectAndNumberAndUserId(int examId, String subjectCode, Integer number,
+            Integer userId) {
         return markerDao.findByExamIdAndSubjectCodeAndGroupNumberAndUserId(examId, subjectCode, number, userId);
     }
 
@@ -255,12 +261,12 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
 
     @Override
     public void updateRejectCountById(Integer markerId) {
-//        Marker marker = markerDao.findOne(markerId);
-//        int rejectCount = 1;
-//        if (marker.getRejectCount() != null) {
-//            rejectCount = marker.getRejectCount() + 1;
-//        }
-//        markerDao.updateRejectCountById(markerId, rejectCount);
+        // Marker marker = markerDao.findOne(markerId);
+        // int rejectCount = 1;
+        // if (marker.getRejectCount() != null) {
+        // rejectCount = marker.getRejectCount() + 1;
+        // }
+        // markerDao.updateRejectCountById(markerId, rejectCount);
         markerDao.addRejectCountById(markerId);
 
     }
@@ -273,7 +279,7 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
 
     @Override
     public void resetById(Integer id) {
-       this.markerDao.resetById(id);
+        this.markerDao.resetById(id);
     }
 
 }

+ 80 - 42
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkQualityController.java

@@ -105,40 +105,39 @@ public class MarkQualityController extends BaseExamController {
         List<MarkGroup> groupList = groupService.findByExamAndSubject(examId, query.getSubjectCode());
         if (query.getSubjectCode() != null) {
             query = markerService.findByQuery(query);
-            model.addAttribute(
-                    "running",
-                    lockService.isLocked(LockType.BATCH_QUALITY,
-                            getLockKey(examId, query.getSubjectCode(), query.getGroupNumber())));
+            model.addAttribute("running", lockService.isLocked(LockType.BATCH_QUALITY,
+                    getLockKey(examId, query.getSubjectCode(), query.getGroupNumber())));
             for (Marker marker : query.getResult()) {
                 marker.setUser(userService.findById(marker.getUserId()));
                 MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
                 group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                         marker.getSubjectCode(), false, group.getNumber()));
                 marker.setGroup(group);
-                if(marker.getFinishCount()==null) {
-                	marker.setFinishCount(0);
+                if (marker.getFinishCount() == null) {
+                    marker.setFinishCount(0);
                 }
-                if(marker.getFinishCountNa()==null) {
-                	marker.setFinishCountNa(0);
+                if (marker.getFinishCountNa() == null) {
+                    marker.setFinishCountNa(0);
                 }
-                if(marker.getRejectCount()==null) {
-                	marker.setRejectCount(0);
+                if (marker.getRejectCount() == null) {
+                    marker.setRejectCount(0);
                 }
-                if(query.getNoArbitrate()!=null&&query.getNoArbitrate()) {
-            		marker.setFinishCount(marker.getFinishCountNa());
-            		marker.setValidCount(marker.getValidCountNa());
-            		marker.setAvgScore(marker.getAvgScoreNa());
-            		marker.setAvgSpeed(marker.getAvgSpeedNa());
-            		marker.setStdevScore(marker.getStdevScoreNa());
-                	marker.setArbitrateCount(0);
-                	marker.setArbitrateRatio("0%");
-                }else {
-                	marker.setArbitrateCount(marker.getFinishCount()-marker.getFinishCountNa());
-                	if(marker.getFinishCount()==0) {
-                		marker.setArbitrateRatio("0%");
-                	}else {
-                		marker.setArbitrateRatio(Calculator.percentage(marker.getArbitrateCount(), marker.getFinishCount(), 2));
-                	}
+                if (query.getNoArbitrate() != null && query.getNoArbitrate()) {
+                    marker.setFinishCount(marker.getFinishCountNa());
+                    marker.setValidCount(marker.getValidCountNa());
+                    marker.setAvgScore(marker.getAvgScoreNa());
+                    marker.setAvgSpeed(marker.getAvgSpeedNa());
+                    marker.setStdevScore(marker.getStdevScoreNa());
+                    marker.setArbitrateCount(0);
+                    marker.setArbitrateRatio("0%");
+                } else {
+                    marker.setArbitrateCount(marker.getFinishCount() - marker.getFinishCountNa());
+                    if (marker.getFinishCount() == 0) {
+                        marker.setArbitrateRatio("0%");
+                    } else {
+                        marker.setArbitrateRatio(
+                                Calculator.percentage(marker.getArbitrateCount(), marker.getFinishCount(), 2));
+                    }
                 }
             }
         }
@@ -157,8 +156,8 @@ public class MarkQualityController extends BaseExamController {
         if (group != null) {
             final String lockKey = getLockKey(examId, subjectCode, groupNumber);
             if (lockService.trylock(LockType.BATCH_QUALITY, lockKey)) {
-                taskExecutor.submit(new MarkQualityThread(markerService.findByExamAndSubjectAndGroup(examId,
-                        subjectCode, groupNumber), lockKey));
+                taskExecutor.submit(new MarkQualityThread(
+                        markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber), lockKey));
             }
             redirectAttributes.addAttribute("groupNumber", groupNumber);
         }
@@ -173,17 +172,35 @@ public class MarkQualityController extends BaseExamController {
     @Logging(menu = "查询给分曲线", type = LogType.QUERY)
     @RequestMapping("/chart")
     public String chart(HttpServletRequest request, Model model, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber) {
+            @RequestParam Integer groupNumber, @RequestParam(required = false) Boolean marked,
+            @RequestParam(required = false) Boolean noArbitrate) {
         int examId = getSessionExamId(request);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         if (group != null) {
             List<MarkerVO> list = new ArrayList<MarkerVO>();
-            List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
-            List<Double> scores = libraryService.findScore(examId, subjectCode, groupNumber, LibraryStatus.MARKED,
-                    LibraryStatus.INSPECTED);
+            List<Marker> markers = null;
+            if (marked != null && marked) {
+                markers = markerService.findByExamAndSubjectAndGroupMarked(examId, subjectCode, groupNumber);
+            } else {
+                markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
+            }
+            List<Double> scores = null;
+            if (noArbitrate != null && noArbitrate) {
+                scores = libraryService.findScore(examId, subjectCode, groupNumber, LibraryStatus.MARKED,
+                        LibraryStatus.INSPECTED);
+            } else {
+                scores = libraryService.findScore(examId, subjectCode, groupNumber, LibraryStatus.MARKED,
+                        LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
+            }
             for (Marker marker : markers) {
-                List<Object[]> libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber,
-                        marker.getId(), LibraryStatus.MARKED, LibraryStatus.INSPECTED);
+                List<Object[]> libraries = null;
+                if (noArbitrate != null && noArbitrate) {
+                    libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
+                            LibraryStatus.MARKED, LibraryStatus.INSPECTED);
+                } else {
+                    libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
+                            LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
+                }
                 Map<Double, Long> scoreCount = new HashMap<Double, Long>();
                 for (Object[] array : libraries) {
                     Double score = (Double) array[0];
@@ -198,8 +215,9 @@ public class MarkQualityController extends BaseExamController {
                 vo.setScoreCount(scoreCount);
                 list.add(vo);
             }
-            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
-                    false, group.getNumber()));
+            // group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
+            // subjectCode,
+            // false, group.getNumber()));
             model.addAttribute("scores", scores);
             model.addAttribute("markers", list);
             model.addAttribute("group", group);
@@ -207,23 +225,40 @@ public class MarkQualityController extends BaseExamController {
         model.addAttribute("subject", subjectService.find(examId, subjectCode));
         model.addAttribute("subjectCode", subjectCode);
         model.addAttribute("groupNumber", groupNumber);
+        model.addAttribute("marked", marked);
+        model.addAttribute("noArbitrate", noArbitrate);
         return "modules/exam/qualityChart";
     }
 
     @RequestMapping("/getChart")
     @ResponseBody
     public List<MarkerVO> getChart(HttpServletRequest request, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber) {
+            @RequestParam Integer groupNumber, @RequestParam(required = false) Boolean marked,
+            @RequestParam(required = false) Boolean noArbitrate) {
         int examId = getSessionExamId(request);
         List<MarkerVO> list = new ArrayList<MarkerVO>();
-        List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
+        List<Marker> markers = null;
+        if (marked != null && marked) {
+            markers = markerService.findByExamAndSubjectAndGroupMarked(examId, subjectCode, groupNumber);
+        } else {
+            markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
+        }
         for (Marker marker : markers) {
-            List<Object[]> libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
-                    LibraryStatus.MARKED, LibraryStatus.INSPECTED);
+            List<Object[]> libraries = null;
+            if (noArbitrate != null && noArbitrate) {
+                libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
+                        LibraryStatus.MARKED, LibraryStatus.INSPECTED);
+            } else {
+                libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
+                        LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
+            }
             MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
             query.setMarkerId(marker.getId());
             query.addStatus(LibraryStatus.MARKED);
             query.addStatus(LibraryStatus.INSPECTED);
+            if (noArbitrate == null || !noArbitrate) {
+                query.addStatus(LibraryStatus.ARBITRATED);
+            }
             long totalCount = libraryService.countByQuery(query);
             Map<Double, Double> scorePercent = new HashMap<Double, Double>();
             for (Object[] array : libraries) {
@@ -252,7 +287,7 @@ public class MarkQualityController extends BaseExamController {
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
     public List<Task> getTask(HttpServletRequest request, @RequestParam Integer markerId,
             @RequestParam Double markerScore, @RequestParam(required = false) Integer pageNumber,
-            @RequestParam(required = false) Integer pageSize) {
+            @RequestParam(required = false) Integer pageSize, @RequestParam(required = false) Boolean noArbitrate) {
         Marker marker = markerService.findById(markerId);
         List<Task> list = new ArrayList<>();
         MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
@@ -264,6 +299,9 @@ public class MarkQualityController extends BaseExamController {
             query.setMarkerId(marker.getId());
             query.addStatus(LibraryStatus.MARKED);
             query.addStatus(LibraryStatus.INSPECTED);
+            if (noArbitrate == null || !noArbitrate) {
+                query.addStatus(LibraryStatus.ARBITRATED);
+            }
             query.setGroupNumber(marker.getGroupNumber());
             query.setMarkerScore(markerScore);
             if (pageNumber != null) {
@@ -278,8 +316,8 @@ public class MarkQualityController extends BaseExamController {
         } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
             // 试评查找给分历史记录
             List<TrialLibrary> historyList = new ArrayList<TrialLibrary>();
-            historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                    marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, null, markerScore);
+            historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                    marker.getId(), pageNumber, pageSize, null, markerScore);
             for (TrialLibrary library : historyList) {
                 Task task = taskService.build(library);
                 list.add(task);

+ 7 - 3
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/qualityChart.jsp

@@ -11,7 +11,7 @@
 <body>
     <ul class="nav nav-tabs">
         <li class="active"><a href="#">${subject.code}-${subject.name}&nbsp;&nbsp;${group.number}-${group.title}</a></li>
-        <li><a href="${ctx}/admin/exam/quality?subjectCode=${subject.code}&groupNumber=${group.number}">返回</a></li>
+        <li><a href="${ctx}/admin/exam/quality?subjectCode=${subject.code}&groupNumber=${group.number}&marked=${marked}&noArbitrate=${noArbitrate}">返回</a></li>
     </ul>
 	<tags:message content="${message}"/>
 	<div id="main" style="width: 800px;height:400px;"></div>
@@ -44,6 +44,8 @@
 <script type="text/javascript">
 var groupNumber='${groupNumber}';
 var subjectCode='${subjectCode}';
+var marked='${marked}';
+var noArbitrate='${noArbitrate}';
 var markerArray= [] ;
 var nameList = [];
 var scores = ${scores};
@@ -51,7 +53,8 @@ var scores = ${scores};
 for(var i=0;scores< scores.length;i++){
 	scoreArray.push(scores[i]);
 } */
-$.post('${ctx}/admin/exam/quality/getChart', {subjectCode: subjectCode,groupNumber:groupNumber}, function(result){
+$.post('${ctx}/admin/exam/quality/getChart', {subjectCode: subjectCode,groupNumber:groupNumber
+	,marked:marked,noArbitrate:noArbitrate}, function(result){
 	for(var i=0;i<result.length;i++){
         var marker = result[i];
         var scorePercents= [];
@@ -109,7 +112,8 @@ $.post('${ctx}/admin/exam/quality/getChart', {subjectCode: subjectCode,groupNumb
 	myChart.setOption(option);
 });
 function openTab(markerId,markerScore){
-    window.open('${ctx}/web/admin/exam/quality?subjectCode='+subjectCode+'&markerId='+markerId+'&markerScore='+markerScore,"_blank");    
+    window.open('${ctx}/web/admin/exam/quality?subjectCode='+subjectCode+'&markerId='+markerId
+    		+'&markerScore='+markerScore+"&noArbitrate="+noArbitrate,"_blank");    
 }
 </script>	
 </body>

+ 4 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/qualityList.jsp

@@ -147,6 +147,8 @@ $('#update-button').click(function(){
 $('#chart-button').click(function(){
     var subjectCode = $('#subject-select').val();
     var groupNumber = $('#group-select').val();
+    var marked = $('#marked').get(0).checked;
+    var noArbitrate = $('#noArbitrate').get(0).checked;
     if(subjectCode=='') {
         alert('请选择对应的科目及分组,再查看给分曲线。');
         return false;
@@ -155,7 +157,8 @@ $('#chart-button').click(function(){
         alert('请选择对应的科目及分组,再查看给分曲线。');
         return false;
     }
-    $(this).attr('href','${ctx}/admin/exam/quality/chart?subjectCode='+subjectCode+'&groupNumber='+groupNumber);
+    var url=
+    $(this).attr('href','${ctx}/admin/exam/quality/chart?subjectCode='+subjectCode+'&groupNumber='+groupNumber+"&marked="+marked+"&noArbitrate="+noArbitrate);
     return true;
 });
 function page(n,s){