YuanPan il y a 7 ans
Parent
commit
7ed540ab40

+ 22 - 22
stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java

@@ -31,50 +31,50 @@ public class AuthApi {
     @Autowired
     @Autowired
     private WorkRepo workRepo;
     private WorkRepo workRepo;
 
 
-    @RequestMapping(value = "login",method = RequestMethod.POST)
+    @RequestMapping(value = "login", method = RequestMethod.POST)
     public MarkUser login(@RequestBody MarkUser user, HttpServletRequest request) {
     public MarkUser login(@RequestBody MarkUser user, HttpServletRequest request) {
         MarkUser domain = null;
         MarkUser domain = null;
-        if(loginConfig.getLoginName().equals(user.getLoginName()) &&
-                loginConfig.getPassword().equals(user.getPassword())){
-            domain = new MarkUser(loginConfig.getLoginName(), loginConfig.getPassword(),null,null,"系统管理员", Role.ADMIN);
-        }else{
+        if (loginConfig.getLoginName().equals(user.getLoginName()) &&
+                loginConfig.getPassword().equals(user.getPassword())) {
+            domain = new MarkUser(loginConfig.getLoginName(), loginConfig.getPassword(), null, null, "系统管理员", Role.ADMIN);
+        } else {
             Work activeWork = workRepo.findByActiveTrue();
             Work activeWork = workRepo.findByActiveTrue();
             String loginName = activeWork.getId() + "-" + user.getLoginName();
             String loginName = activeWork.getId() + "-" + user.getLoginName();
             domain = markUserRepo.findByLoginName(loginName);
             domain = markUserRepo.findByLoginName(loginName);
-	        if (domain == null) {
-	            throw new RuntimeException("用户不存在");
-	        }
-	        if (!user.getPassword().equals(domain.getPassword())) {
-	            throw new RuntimeException("用户或密码错误");
-	        }
-	        if (!domain.isEnabled()) {
-	            throw new RuntimeException("用户被禁用");
-	        }
-	        domain.setSessionId(request.getSession().getId());
-	        markUserRepo.save(domain);
+            if (domain == null) {
+                throw new RuntimeException("用户不存在");
+            }
+            if (!user.getPassword().equals(domain.getPassword())) {
+                throw new RuntimeException("用户或密码错误");
+            }
+            if (!domain.isEnabled()) {
+                throw new RuntimeException("用户被禁用");
+            }
+            domain.setSessionId(request.getSession().getId());
+            markUserRepo.save(domain);
         }
         }
         HttpSession session = request.getSession();
         HttpSession session = request.getSession();
         String token = (String) request.getSession().getAttribute("token");
         String token = (String) request.getSession().getAttribute("token");
-        if(!StringUtils.isEmpty(token)){
-        	session.setAttribute("token", null);
+        if (!StringUtils.isEmpty(token)) {
+            session.setAttribute("token", null);
         }
         }
         session.setAttribute("token", new Date().getTime() + "#" + domain.getLoginName());
         session.setAttribute("token", new Date().getTime() + "#" + domain.getLoginName());
         return domain;
         return domain;
     }
     }
 
 
-    @RequestMapping(value = "/logout",method = RequestMethod.DELETE)
-    public void logout(HttpServletRequest request){
+    @RequestMapping(value = "/logout", method = RequestMethod.DELETE)
+    public void logout(HttpServletRequest request) {
         HttpSession session = request.getSession();
         HttpSession session = request.getSession();
         session.setAttribute("token", null);
         session.setAttribute("token", null);
     }
     }
 
 
     @RequestMapping(value = "/{domain}/password", method = RequestMethod.PATCH)
     @RequestMapping(value = "/{domain}/password", method = RequestMethod.PATCH)
     public void pwd(@PathVariable MarkUser domain, @RequestBody MarkUser markUser) {
     public void pwd(@PathVariable MarkUser domain, @RequestBody MarkUser markUser) {
-        if(markUser.getPassword() == null || markUser.getPassword().length() < 6){
+        if (markUser.getPassword() == null || markUser.getPassword().length() < 6) {
             throw new RuntimeException("密码长度不能小于6位");
             throw new RuntimeException("密码长度不能小于6位");
         }
         }
         domain.setPassword(markUser.getPassword());
         domain.setPassword(markUser.getPassword());
-        domain.setPwChangedCount(markUser.getPwChangedCount()+1);
+        domain.setPwChangedCount(markUser.getPwChangedCount() + 1);
         markUserRepo.save(domain);
         markUserRepo.save(domain);
     }
     }
 }
 }

+ 73 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/InspectRangeApi.java

@@ -0,0 +1,73 @@
+package cn.com.qmth.stmms.ms.admin.api;
+
+import cn.com.qmth.stmms.ms.admin.service.InspectRangeService;
+import cn.com.qmth.stmms.ms.core.domain.InspectRange;
+import cn.com.qmth.stmms.ms.core.repository.InspectRangeRepo;
+import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Created by yuanpan on 2017/10/19.
+ */
+@RestController
+@RequestMapping("api/admin/inspect-range")
+public class InspectRangeApi {
+
+    @Autowired
+    private InspectRangeRepo inspectRangeRepo;
+
+
+    @Autowired
+    private InspectRangeService inspectRangeService;
+
+    @Autowired
+    private PaperRepo paperRepo;
+
+    @GetMapping
+    public List<InspectRange> list(@RequestParam Long workId) {
+        return inspectRangeRepo.findByWorkId(workId);
+    }
+
+    @PostMapping
+    public void create(@RequestBody InspectRange inspectRange) {
+
+        InspectRange.InspectRangeType type = inspectRange.getType();
+        Integer condition = inspectRange.getCondition();
+        Long workId = inspectRange.getWorkId();
+
+        if (type == null || condition == null || workId == null) {
+            throw new RuntimeException("接口参数缺失");
+        }
+
+        //判断是否已经全部打分完成了
+        long unfinishedPaperCount = paperRepo.countByWorkIdAndScoreIsNull(workId);
+
+        if (unfinishedPaperCount > 0) {
+            throw new RuntimeException("打分还没有完成,不能进行抽查工作。");
+        }
+
+        inspectRangeService.save(inspectRange);
+
+    }
+
+    @PutMapping(value = "{domain}")
+    public void update(@PathVariable InspectRange domain, @RequestBody InspectRange inspectRange) {
+        domain.setCondition(inspectRange.getCondition());
+        domain.setEnabled(inspectRange.getEnabled());
+        domain.setType(inspectRange.getType());
+        inspectRangeService.save(domain);
+
+    }
+
+
+    //@PatchMapping(value = "{domain}/start")
+    @RequestMapping(value = "{domain}/start",method = RequestMethod.PATCH)
+    public void start(@PathVariable InspectRange domain) {
+
+        domain.setEnabled(true);
+        inspectRangeService.save(domain);
+    }
+}

+ 38 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/InspectorApi.java

@@ -0,0 +1,38 @@
+package cn.com.qmth.stmms.ms.admin.api;
+
+import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
+import cn.com.qmth.stmms.ms.core.domain.user.Role;
+import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Created by yuanpan on 2017/10/16.
+ */
+@RestController
+@RequestMapping("api/admin/inspectors")
+public class InspectorApi {
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+    @GetMapping
+    public List<MarkUser> list(@RequestParam Long workId) {
+
+        return markUserRepo.findByWorkIdAndRole(workId, Role.INSPECTOR);
+    }
+
+    @PostMapping
+    public void create(@RequestBody MarkUser inspectUser) {
+
+        MarkUser inspector = markUserRepo.findByLoginName(inspectUser.getWorkId() + "-" + inspectUser.getLoginName());
+        if (inspector != null) {
+            throw new RuntimeException("该登录名已经存在");
+        }
+        inspectUser.setLoginName(inspectUser.getWorkId() + "-" + inspectUser.getLoginName());
+        markUserRepo.save(inspectUser);
+
+    }
+}

+ 69 - 28
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ScoreApi.java

@@ -19,6 +19,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.ui.ModelMap;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.math.BigInteger;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -47,37 +48,76 @@ public class ScoreApi {
 
 
     /**
     /**
      * 查询
      * 查询
-     * @param workId 评卷工作id
+     *
+     * @param workId     评卷工作id
      * @param examNumber 准考证号
      * @param examNumber 准考证号
      * @return
      * @return
      */
      */
-    @RequestMapping(value = "search/byExamNumber",method = RequestMethod.GET)
+    @RequestMapping(value = "search/byExamNumber", method = RequestMethod.GET)
     public ScoreCheckDTO getByExamNumber(@RequestParam Long workId,
     public ScoreCheckDTO getByExamNumber(@RequestParam Long workId,
-                                         @RequestParam String examNumber){
-        Student student = studentRepo.findByWorkIdAndExamNumber(workId,examNumber);
-        List<Paper> papers = paperRepo.findByWorkIdAndExamNumber(workId,examNumber);
-        return scoreAssembler.toDTO(student,papers);
+                                         @RequestParam String examNumber) {
+        Student student = studentRepo.findByWorkIdAndExamNumber(workId, examNumber);
+        List<Paper> papers = paperRepo.findByWorkIdAndExamNumber(workId, examNumber);
+        return scoreAssembler.toDTO(student, papers);
+    }
+
+    @RequestMapping(value = "search/byTotalScore", method = RequestMethod.GET)
+    public ResponseEntity getByTotalScore(@RequestParam final Long workId,
+                                          @RequestParam final Long totalScore) {
+//        List<Object[]> paperList = paperRepo.findByTotalScore(workId);
+//        List<String> examNumbers = paperList.stream().filter(p -> {
+//            Double t = (Double) p[1];
+//            return t.longValue() > totalScore;
+//        }).map(p -> {
+//            return (String) p[0];
+//        }).collect(Collectors.toList());
+//
+//        List<Paper> papers = paperRepo.findByWorkIdAndExamNumberIn(workId, examNumbers);
+//        return papers.stream().map(paper -> {
+//            String examNumber = paper.getExamNumber();
+//            Student student = studentRepo.findByWorkIdAndExamNumber(workId, examNumber);
+//            return scoreAssembler.toDTO(student, papers);
+//        }).collect(Collectors.toList());
+
+
+        List<ScoreCheckDTO> scoreDTOs = new ArrayList<>();
+        List<Paper> papers = paperRepo.findByWorkId(workId);
+        Map<String, List<Paper>> group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
+        group.forEach((k, v) -> {
+            //long ct = v.stream().mapToDouble(Paper::getScore).filter(s -> s >= hs).count();
+            long studentTotalScore = 0;
+            for (Paper p : v) {
+                studentTotalScore += p.getScore();
+            }
+            if (v.size() == 3 && studentTotalScore >= totalScore) {
+
+                Student student = studentRepo.findByWorkIdAndExamNumber(workId, k);
+                scoreDTOs.add(scoreAssembler.toDTO(student, v));
+            }
+        });
+        return ResponseEntity.ok(scoreDTOs);
     }
     }
 
 
     /**
     /**
      * 查询任务两科成绩高于hs,另外一颗低于ls
      * 查询任务两科成绩高于hs,另外一颗低于ls
+     *
      * @param workId 评卷工作id
      * @param workId 评卷工作id
-     * @param hs 高分
-     * @param ls 低分
+     * @param hs     高分
+     * @param ls     低分
      * @return
      * @return
      */
      */
-    @RequestMapping(value = "search/byRange",method = RequestMethod.GET)
+    @RequestMapping(value = "search/byRange", method = RequestMethod.GET)
     public ResponseEntity getByScoreRange(@RequestParam Long workId,
     public ResponseEntity getByScoreRange(@RequestParam Long workId,
                                           @RequestParam Double hs,
                                           @RequestParam Double hs,
-                                          @RequestParam Double ls){
+                                          @RequestParam Double ls) {
         List<ScoreCheckDTO> scoreDTOs = new ArrayList<>();
         List<ScoreCheckDTO> scoreDTOs = new ArrayList<>();
-        List<Paper> papers = paperRepo.findByScoreRange(hs,ls);
-        Map<String,List<Paper>> group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
-        group.forEach((k,v) -> {
+        List<Paper> papers = paperRepo.findByScoreRange(hs, ls);
+        Map<String, List<Paper>> group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
+        group.forEach((k, v) -> {
             long ct = v.stream().mapToDouble(Paper::getScore).filter(s -> s >= hs).count();
             long ct = v.stream().mapToDouble(Paper::getScore).filter(s -> s >= hs).count();
-            if(v.size() == 3 && ct == 2) {
+            if (v.size() == 3 && ct == 2) {
                 Student student = studentRepo.findByWorkIdAndExamNumber(workId, k);
                 Student student = studentRepo.findByWorkIdAndExamNumber(workId, k);
-                scoreDTOs.add(scoreAssembler.toDTO(student,v));
+                scoreDTOs.add(scoreAssembler.toDTO(student, v));
             }
             }
         });
         });
         return ResponseEntity.ok(scoreDTOs);
         return ResponseEntity.ok(scoreDTOs);
@@ -85,35 +125,36 @@ public class ScoreApi {
 
 
     /**
     /**
      * 更新分数
      * 更新分数
+     *
      * @param paperId 试卷id
      * @param paperId 试卷id
-     * @param body 分数
+     * @param body    分数
      * @return
      * @return
      */
      */
-    @RequestMapping(value = "update/{paperId}",method = RequestMethod.PUT)
-    public ResponseEntity updateScore(@PathVariable Long paperId, @RequestBody ModelMap body){
+    @RequestMapping(value = "update/{paperId}", method = RequestMethod.PUT)
+    public ResponseEntity updateScore(@PathVariable Long paperId, @RequestBody ModelMap body) {
         Paper paper = paperRepo.findOne(paperId);
         Paper paper = paperRepo.findOne(paperId);
-        if(paper == null || body.get("score") == null){
+        if (paper == null || body.get("score") == null) {
             return new ResponseEntity(HttpStatus.OK);
             return new ResponseEntity(HttpStatus.OK);
         }
         }
         Double score = Double.valueOf(body.get("score").toString());
         Double score = Double.valueOf(body.get("score").toString());
-        if(score >= 0 && score <= 100){
+        if (score >= 0 && score <= 100) {
             paper.setScore(score);
             paper.setScore(score);
             paperRepo.save(paper);
             paperRepo.save(paper);
         }
         }
         return new ResponseEntity(HttpStatus.OK);
         return new ResponseEntity(HttpStatus.OK);
     }
     }
 
 
-    @RequestMapping(value = "merge/{subject}",method = RequestMethod.GET)
-    public ResponseEntity merge(@PathVariable Subject subject){
+    @RequestMapping(value = "merge/{subject}", method = RequestMethod.GET)
+    public ResponseEntity merge(@PathVariable Subject subject) {
         Work activedWork = workRepo.findByActiveTrue();
         Work activedWork = workRepo.findByActiveTrue();
-        List<Paper> papers = paperRepo.findByWorkIdAndSubject(activedWork.getId(),subject);
+        List<Paper> papers = paperRepo.findByWorkIdAndSubject(activedWork.getId(), subject);
         Iterator<Paper> paperIterator = papers.iterator();
         Iterator<Paper> paperIterator = papers.iterator();
         long count = 0;
         long count = 0;
-        while (paperIterator.hasNext()){
+        while (paperIterator.hasNext()) {
             Paper paper = paperIterator.next();
             Paper paper = paperIterator.next();
-            List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(),MarkStage.SCORE);
+            List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.SCORE);
             long leftCount = markTasks.stream().filter(i -> i.getResult() == null).count();
             long leftCount = markTasks.stream().filter(i -> i.getResult() == null).count();
-            if(leftCount == 0){
+            if (leftCount == 0) {
                 OptionalDouble finalScore = markTasks.stream().map(m -> m.getResult())
                 OptionalDouble finalScore = markTasks.stream().map(m -> m.getResult())
                         .mapToInt(Integer::valueOf).average();
                         .mapToInt(Integer::valueOf).average();
                 double fs = Math.round(finalScore.orElse(0));
                 double fs = Math.round(finalScore.orElse(0));
@@ -121,8 +162,8 @@ public class ScoreApi {
                 paperRepo.save(paper);
                 paperRepo.save(paper);
                 count++;
                 count++;
             }
             }
-            if(count%500 == 0){
-                System.out.println(subject.toString() + ":" +count);
+            if (count % 500 == 0) {
+                System.out.println(subject.toString() + ":" + count);
             }
             }
         }
         }
         return ResponseEntity.ok(null);
         return ResponseEntity.ok(null);

+ 11 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/dto/StudentDTO.java

@@ -25,6 +25,10 @@ public class StudentDTO implements Serializable {
     @ExcelProperty(index = 5, name = "考场", type = 2)
     @ExcelProperty(index = 5, name = "考场", type = 2)
     private String examRoom;
     private String examRoom;
 
 
+    @ExcelProperty(index = 6, name = "生源地", type = 2)
+    private String sourceName;
+
+
     private Long workId;
     private Long workId;
 
 
     public Long getId() {
     public Long getId() {
@@ -83,4 +87,11 @@ public class StudentDTO implements Serializable {
         this.examRoom = examRoom;
         this.examRoom = examRoom;
     }
     }
 
 
+    public String getSourceName() {
+        return sourceName;
+    }
+
+    public void setSourceName(String sourceName) {
+        this.sourceName = sourceName;
+    }
 }
 }

+ 34 - 38
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -47,21 +47,17 @@ public class DataUploadService {
 
 
     @Autowired
     @Autowired
     private ImageCompressionConfig compressionConfig;
     private ImageCompressionConfig compressionConfig;
-    
+
     @Autowired
     @Autowired
     private MarkTaskRepo markTaskRepo;
     private MarkTaskRepo markTaskRepo;
 
 
     /**
     /**
      * 上传考生试卷数据
      * 上传考生试卷数据
-     * 
-     * @param studentId
-     *            考生id
-     * @param subject
-     *            科目
-     * @param in
-     *            图片文件输入流
-     * @param isManual
-     *            是否手工绑定
+     *
+     * @param studentId 考生id
+     * @param subject   科目
+     * @param in        图片文件输入流
+     * @param isManual  是否手工绑定
      * @throws IOException
      * @throws IOException
      */
      */
     @Transactional
     @Transactional
@@ -125,7 +121,7 @@ public class DataUploadService {
     }
     }
 
 
     @Transactional
     @Transactional
-    public List<ExcelError> uploadStudents(Long workId, boolean isAbsent, InputStream inputStream) {
+    public List<ExcelError> uploadStudents(Long workId, final boolean isAbsent, InputStream inputStream) {
         ExcelReader excelReader = new ExcelReader(StudentDTO.class);
         ExcelReader excelReader = new ExcelReader(StudentDTO.class);
         List<ExcelError> excelErrors = excelReader.reader(inputStream, new ExcelReaderHandle() {
         List<ExcelError> excelErrors = excelReader.reader(inputStream, new ExcelReaderHandle() {
 
 
@@ -136,8 +132,8 @@ public class DataUploadService {
                 String examNumber = dto.getExamNumber();
                 String examNumber = dto.getExamNumber();
                 //如果没有设置区域代码,用准考证前2位作为区域代码
                 //如果没有设置区域代码,用准考证前2位作为区域代码
                 String areaCode = null;
                 String areaCode = null;
-                if(dto.getAreaCode() == null || dto.getAreaCode().isEmpty()){
-                    areaCode = examNumber.substring(0,2);
+                if (dto.getAreaCode() == null || dto.getAreaCode().isEmpty()) {
+                    areaCode = examNumber.substring(0, 2);
                     dto.setAreaCode(areaCode);
                     dto.setAreaCode(areaCode);
                 }
                 }
 
 
@@ -151,31 +147,31 @@ public class DataUploadService {
                 Student student = studentRepo.findByWorkIdAndExamNumber(workId, dto.getExamNumber());
                 Student student = studentRepo.findByWorkIdAndExamNumber(workId, dto.getExamNumber());
                 if (student == null && !isAbsent) {
                 if (student == null && !isAbsent) {
                     student = new Student(dto.getName(), dto.getExamNumber(), dto.getAreaName(), dto.getAreaCode(),
                     student = new Student(dto.getName(), dto.getExamNumber(), dto.getAreaName(), dto.getAreaCode(),
-                            workId, dto.getExamRoom());
+                            workId, dto.getExamRoom(), dto.getSourceName());
                     studentRepo.save(student);
                     studentRepo.save(student);
-                }
-                else if(student != null){
+                } else if (student != null) {
                     if (isAbsent) {
                     if (isAbsent) {
-                    	student.setAbsent(isAbsent);
-                    	student.setUploadStatus("SX:0,SC:0,SM:0");
-                    	
-                    	/**
-                    	 * 查询该考生所有paper,若paper无任务则删除,有任务就保留
-                    	 */
-                    	List<Paper> papers = paperRepo.findByWorkIdAndExamNumber(workId, student.getExamNumber());
-                    	if(!papers.isEmpty()){
-                    		for (Paper paper : papers) {
-                    			Long count = markTaskRepo.countByPaperId(paper.getId());
-                    			if(count == 0){
-                    				paperRepo.delete(paper);
-                    			}
-                    		}
-						}
-                    }else{
+                        student.setAbsent(isAbsent);
+                        student.setUploadStatus("SX:0,SC:0,SM:0");
+
+                        /**
+                         * 查询该考生所有paper,若paper无任务则删除,有任务就保留
+                         */
+                        List<Paper> papers = paperRepo.findByWorkIdAndExamNumber(workId, student.getExamNumber());
+                        if (!papers.isEmpty()) {
+                            for (Paper paper : papers) {
+                                Long count = markTaskRepo.countByPaperId(paper.getId());
+                                if (count == 0) {
+                                    paperRepo.delete(paper);
+                                }
+                            }
+                        }
+                    } else {
                         student.setName(dto.getName());
                         student.setName(dto.getName());
                         student.setAreaCode(dto.getAreaCode());
                         student.setAreaCode(dto.getAreaCode());
                         student.setAreaName(dto.getAreaName());
                         student.setAreaName(dto.getAreaName());
                         student.setExamRoom(dto.getExamRoom());
                         student.setExamRoom(dto.getExamRoom());
+                        student.setSourceName(dto.getSourceName());
                     }
                     }
                     studentRepo.save(student);
                     studentRepo.save(student);
                 }
                 }
@@ -187,7 +183,7 @@ public class DataUploadService {
 
 
     /**
     /**
      * 清空考生数据 有上传数据无法清空
      * 清空考生数据 有上传数据无法清空
-     * 
+     *
      * @param workId
      * @param workId
      */
      */
     @Transactional
     @Transactional
@@ -201,11 +197,11 @@ public class DataUploadService {
     }
     }
 
 
     @Transactional
     @Transactional
-    public Paper savePaper(Student student,Subject subject,boolean isManual){
-        ExamQuestion examQuestion = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(student.getWorkId(),subject,student.getAreaCode());
-        Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(),subject,student.getExamNumber());
-        if(paper == null){
-            paper = new Paper(student.getWorkId(),null,subject,examQuestion,student,isManual);
+    public Paper savePaper(Student student, Subject subject, boolean isManual) {
+        ExamQuestion examQuestion = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(student.getWorkId(), subject, student.getAreaCode());
+        Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumber(student.getWorkId(), subject, student.getExamNumber());
+        if (paper == null) {
+            paper = new Paper(student.getWorkId(), null, subject, examQuestion, student, isManual);
         }
         }
         paper.setUploadedOn(new Date());
         paper.setUploadedOn(new Date());
         paperRepo.save(paper);
         paperRepo.save(paper);

+ 105 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/InspectRangeService.java

@@ -0,0 +1,105 @@
+package cn.com.qmth.stmms.ms.admin.service;
+
+import cn.com.qmth.stmms.ms.core.domain.InspectRange;
+import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.repository.InspectRangeRepo;
+import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Created by yuanpan on 2017/10/19.
+ */
+@Service
+public class InspectRangeService {
+
+    @Autowired
+    private InspectRangeRepo inspectRangeRepo;
+
+    @Autowired
+    private PaperRepo paperRepo;
+
+
+    @Transactional
+    public void save(InspectRange inspectRange) {
+
+        InspectRange.InspectRangeType type = inspectRange.getType();
+
+        Long workId = inspectRange.getWorkId();
+
+        List<Paper> papers = paperRepo.findByWorkId(workId);
+
+
+        List<String> examNumbers = new ArrayList<>();
+
+        Map<String, List<Paper>> group;
+        //根据抽查方式,计算出将要抽查的人数
+        switch (type) {
+            case ZF:
+                //根据总分查询
+                group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
+                group.forEach((examNumber, paperList) -> {
+                    int totalScore = paperList.stream().map(p -> p.getScore().intValue()).reduce((acc, item) -> acc + item).get();
+                    if (totalScore > inspectRange.getCondition()) {
+                        examNumbers.add(examNumber);
+                    }
+                });
+
+                break;
+            case DKFS:
+                //根据单科分数查询
+                group = papers.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
+                group.forEach((examNumber, paperList) -> {
+                    int maxScore = paperList.stream().map(p -> p.getScore().intValue()).max(Integer::compareTo).get();
+                    if (maxScore > inspectRange.getCondition()) {
+                        examNumbers.add(examNumber);
+                    }
+                });
+
+                break;
+            case SYD:
+                //根据生源地排名
+                group = papers.stream().collect(Collectors.groupingBy(Paper::getSourceName));
+
+                group.forEach((sourceName, paperList) -> {
+                    Map<String, List<Paper>> examNumberList = paperList.stream().collect(Collectors.groupingBy(Paper::getExamNumber));
+
+                    final List<Object[]> totalScoreList = new ArrayList<>();
+                    examNumberList.forEach((examNumber, studentPaperList) -> {
+                        int totalScore = studentPaperList.stream().map(p -> p.getScore().intValue()).reduce((acc, item) -> acc + item).get();
+                        totalScoreList.add(new Object[]{examNumber, totalScore});
+                    });
+
+                    totalScoreList.sort((o1, o2) -> {
+                        Integer t1 = (Integer) o1[1];
+                        Integer t2 = (Integer) o2[1];
+                        return t2.compareTo(t1);//分数从高到低排序
+                    });
+
+                    int studentCount = totalScoreList.size() > inspectRange.getCondition() ? inspectRange.getCondition() : totalScoreList.size();
+                    for (int i = 0; i < studentCount; i++) {
+                        Object examNumberInObject = totalScoreList.get(i)[0];
+                        examNumbers.add((String) examNumberInObject);
+                    }
+
+                });
+                break;
+        }
+
+        if (inspectRange.getId() != null) {
+            //如果是修改操作,要将先前标记的学生试卷改回来
+            paperRepo.resetInspectRange(inspectRange.getId());
+        }
+
+        //再重新标记
+        paperRepo.markInspectRange(inspectRange.getId(), examNumbers);
+
+        inspectRange.setStudentCount(examNumbers.size());
+        inspectRangeRepo.save(inspectRange);
+
+    }
+}

+ 81 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/InspectRange.java

@@ -0,0 +1,81 @@
+package cn.com.qmth.stmms.ms.core.domain;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * Created by yuanpan on 2017/10/19.
+ */
+@Entity
+public class InspectRange implements Serializable {
+    private static final long serialVersionUID = -8149790000466657234L;
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    private Long workId;
+
+    @Enumerated(value = EnumType.STRING)
+    private InspectRangeType type;
+
+    @Column(name = "`condition`")
+    private Integer condition;
+
+    private Integer studentCount;
+
+    private Boolean enabled;
+
+    public static enum InspectRangeType {
+        ZF, DKFS, SYD
+    }
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getWorkId() {
+        return workId;
+    }
+
+    public void setWorkId(Long workId) {
+        this.workId = workId;
+    }
+
+    public InspectRangeType getType() {
+        return type;
+    }
+
+    public void setType(InspectRangeType type) {
+        this.type = type;
+    }
+
+    public Integer getCondition() {
+        return condition;
+    }
+
+    public void setCondition(Integer condition) {
+        this.condition = condition;
+    }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+
+    public Boolean getEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(Boolean enabled) {
+        this.enabled = enabled;
+    }
+}

+ 46 - 9
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java

@@ -13,11 +13,11 @@ import java.util.Date;
  */
  */
 @Entity
 @Entity
 @Table(indexes = {
 @Table(indexes = {
-        @Index(name = "idx_paper_index",columnList = "idx"),
-        @Index(name = "idx_paper_exam_number",columnList = "examNumber"),
-        @Index(name = "idx_paper_area_code",columnList = "areaCode"),
-        @Index(name = "idx_paper_student_name",columnList = "studentName")})
-public class Paper implements Serializable{
+        @Index(name = "idx_paper_index", columnList = "idx"),
+        @Index(name = "idx_paper_exam_number", columnList = "examNumber"),
+        @Index(name = "idx_paper_area_code", columnList = "areaCode"),
+        @Index(name = "idx_paper_student_name", columnList = "studentName")})
+public class Paper implements Serializable {
 
 
     private static final long serialVersionUID = 3200579901138269179L;
     private static final long serialVersionUID = 3200579901138269179L;
     @Id
     @Id
@@ -59,6 +59,9 @@ public class Paper implements Serializable{
 
 
     private Double score;
     private Double score;
 
 
+    //抽查成绩
+    private Double inspectScore;
+
     /**
     /**
      * 是否仲裁状态
      * 是否仲裁状态
      */
      */
@@ -91,17 +94,25 @@ public class Paper implements Serializable{
      */
      */
     private boolean isTagged;
     private boolean isTagged;
 
 
+
+    //抽查范围ID
+    private Long inspectRange;
+
+    private String sourceName;//生源地
+
+
     public Paper(Long workId, Long idx, Subject subject, ExamQuestion examQuestion, Student student, boolean isManual) {
     public Paper(Long workId, Long idx, Subject subject, ExamQuestion examQuestion, Student student, boolean isManual) {
         this.workId = workId;
         this.workId = workId;
         this.idx = idx;
         this.idx = idx;
         this.studentName = student.getName();
         this.studentName = student.getName();
         String examNumber = student.getExamNumber();
         String examNumber = student.getExamNumber();
         this.examNumber = examNumber;
         this.examNumber = examNumber;
+        this.sourceName = student.getSourceName();
         this.subject = subject;
         this.subject = subject;
         this.questionId = examQuestion.getId();
         this.questionId = examQuestion.getId();
         this.areaCode = examQuestion.getAreaCode();
         this.areaCode = examQuestion.getAreaCode();
         this.questionName = examQuestion.getName();
         this.questionName = examQuestion.getName();
-        this.secretNumber = subject.ordinal() + examQuestion.getAreaCode() + examNumber.substring(3,examNumber.length());
+        this.secretNumber = subject.ordinal() + examQuestion.getAreaCode() + examNumber.substring(3, examNumber.length());
         this.isManual = isManual;
         this.isManual = isManual;
         this.uploadedOn = new Date();
         this.uploadedOn = new Date();
     }
     }
@@ -241,9 +252,10 @@ public class Paper implements Serializable{
 
 
     /**
     /**
      * 定档
      * 定档
+     *
      * @param level
      * @param level
      */
      */
-    public void determineLevel(String level){
+    public void determineLevel(String level) {
         this.setLevel(level);
         this.setLevel(level);
         this.setRejected(false);
         this.setRejected(false);
         this.setArbitrated(false);
         this.setArbitrated(false);
@@ -253,9 +265,10 @@ public class Paper implements Serializable{
 
 
     /**
     /**
      * 打回
      * 打回
+     *
      * @param redoLevel
      * @param redoLevel
      */
      */
-    public void reject(String redoLevel){
+    public void reject(String redoLevel) {
         this.setRejected(true);
         this.setRejected(true);
         this.setArbitrated(false);
         this.setArbitrated(false);
         this.setRedoLevel(redoLevel);
         this.setRedoLevel(redoLevel);
@@ -268,7 +281,7 @@ public class Paper implements Serializable{
     /**
     /**
      * 仲裁
      * 仲裁
      */
      */
-    public void arbitrate(){
+    public void arbitrate() {
         this.setRejected(false);
         this.setRejected(false);
         this.setArbitrated(true);
         this.setArbitrated(true);
         this.setLevel(null);
         this.setLevel(null);
@@ -322,4 +335,28 @@ public class Paper implements Serializable{
     public void setUploadedCount(int uploadedCount) {
     public void setUploadedCount(int uploadedCount) {
         this.uploadedCount = uploadedCount;
         this.uploadedCount = uploadedCount;
     }
     }
+
+    public Double getInspectScore() {
+        return inspectScore;
+    }
+
+    public void setInspectScore(Double inspectScore) {
+        this.inspectScore = inspectScore;
+    }
+
+    public Long getInspectRange() {
+        return inspectRange;
+    }
+
+    public void setInspectRange(Long inspectRange) {
+        this.inspectRange = inspectRange;
+    }
+
+    public String getSourceName() {
+        return sourceName;
+    }
+
+    public void setSourceName(String sourceName) {
+        this.sourceName = sourceName;
+    }
 }
 }

+ 40 - 25
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Student.java

@@ -9,9 +9,9 @@ import java.io.Serializable;
  */
  */
 @Entity
 @Entity
 @Table(indexes = {
 @Table(indexes = {
-        @Index(name = "idx_student_name",columnList = "name"),
-        @Index(name = "idx_student_examnumber",columnList = "examNumber")})
-public class Student implements Serializable{
+        @Index(name = "idx_student_name", columnList = "name"),
+        @Index(name = "idx_student_examnumber", columnList = "examNumber")})
+public class Student implements Serializable {
 
 
 
 
     private static final long serialVersionUID = -8190655998628521750L;
     private static final long serialVersionUID = -8190655998628521750L;
@@ -21,16 +21,22 @@ public class Student implements Serializable{
 
 
     private String name;
     private String name;
 
 
+
+    /**
+     * 生源地
+     */
+    private String sourceName;
+
     private String examNumber;
     private String examNumber;
 
 
     private String areaCode;
     private String areaCode;
-    
+
     private String areaName;
     private String areaName;
 
 
     private Long workId;
     private Long workId;
-    
+
     private boolean isAbsent = false;
     private boolean isAbsent = false;
-    
+
     private String examRoom;
     private String examRoom;
 
 
     /**
     /**
@@ -38,13 +44,14 @@ public class Student implements Serializable{
      */
      */
     private String uploadStatus = "SX:0,SC:0,SM:0";
     private String uploadStatus = "SX:0,SC:0,SM:0";
 
 
-    public Student(String name, String examNumber,String areaName, String areaCode,Long workId,String examRoom) {
+    public Student(String name, String examNumber, String areaName, String areaCode, Long workId, String examRoom, String sourceName) {
         this.name = name;
         this.name = name;
         this.examNumber = examNumber;
         this.examNumber = examNumber;
         this.areaName = areaName;
         this.areaName = areaName;
         this.areaCode = areaCode;
         this.areaCode = areaCode;
         this.workId = workId;
         this.workId = workId;
         this.examRoom = examRoom;
         this.examRoom = examRoom;
+        this.sourceName = sourceName;
     }
     }
 
 
     public Student() {
     public Student() {
@@ -90,29 +97,29 @@ public class Student implements Serializable{
         this.workId = workId;
         this.workId = workId;
     }
     }
 
 
-	public String getExamRoom() {
-		return examRoom;
-	}
+    public String getExamRoom() {
+        return examRoom;
+    }
 
 
-	public void setExamRoom(String examRoom) {
-		this.examRoom = examRoom;
-	}
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
 
 
-	public boolean isAbsent() {
-		return isAbsent;
-	}
+    public boolean isAbsent() {
+        return isAbsent;
+    }
 
 
-	public void setAbsent(boolean isAbsent) {
-		this.isAbsent = isAbsent;
-	}
+    public void setAbsent(boolean isAbsent) {
+        this.isAbsent = isAbsent;
+    }
 
 
-	public String getAreaName() {
-		return areaName;
-	}
+    public String getAreaName() {
+        return areaName;
+    }
 
 
-	public void setAreaName(String areaName) {
-		this.areaName = areaName;
-	}
+    public void setAreaName(String areaName) {
+        this.areaName = areaName;
+    }
 
 
     public String getUploadStatus() {
     public String getUploadStatus() {
         return uploadStatus;
         return uploadStatus;
@@ -121,4 +128,12 @@ public class Student implements Serializable{
     public void setUploadStatus(String uploadStatus) {
     public void setUploadStatus(String uploadStatus) {
         this.uploadStatus = uploadStatus;
         this.uploadStatus = uploadStatus;
     }
     }
+
+    public String getSourceName() {
+        return sourceName;
+    }
+
+    public void setSourceName(String sourceName) {
+        this.sourceName = sourceName;
+    }
 }
 }

+ 0 - 68
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/InspectUser.java

@@ -1,68 +0,0 @@
-package cn.com.qmth.stmms.ms.core.domain.user;
-
-import javax.persistence.Entity;
-import javax.validation.constraints.NotNull;
-
-/**
- * Created by yuanpan on 2017/10/13.
- */
-@Entity
-public class InspectUser extends AbstractUser {
-
-    private static final long serialVersionUID = 1520626334734138538L;
-
-    @NotNull
-    private Long workId;
-
-    @NotNull
-    private Boolean allowSC;
-
-    @NotNull
-    private Boolean allowSM;
-
-    @NotNull
-    private Boolean allowSX;
-
-    public InspectUser() {
-    }
-
-    public InspectUser(String loginName, String password, Long workId, Boolean allowSC, Boolean allowSM, Boolean allowSX) {
-        super(loginName, password);
-        this.workId = workId;
-        this.allowSC = allowSC;
-        this.allowSM = allowSM;
-        this.allowSX = allowSX;
-    }
-
-    public Long getWorkId() {
-        return workId;
-    }
-
-    public void setWorkId(Long workId) {
-        this.workId = workId;
-    }
-
-    public Boolean getAllowSC() {
-        return allowSC;
-    }
-
-    public void setAllowSC(Boolean allowSC) {
-        this.allowSC = allowSC;
-    }
-
-    public Boolean getAllowSM() {
-        return allowSM;
-    }
-
-    public void setAllowSM(Boolean allowSM) {
-        this.allowSM = allowSM;
-    }
-
-    public Boolean getAllowSX() {
-        return allowSX;
-    }
-
-    public void setAllowSX(Boolean allowSX) {
-        this.allowSX = allowSX;
-    }
-}

+ 36 - 4
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/MarkUser.java

@@ -10,11 +10,10 @@ import java.util.Random;
  * Created by zhengmin on 2016/10/4.
  * Created by zhengmin on 2016/10/4.
  */
  */
 @Entity
 @Entity
-public class MarkUser extends AbstractUser{
+public class MarkUser extends AbstractUser {
 
 
     private static final long serialVersionUID = -8261921661291192687L;
     private static final long serialVersionUID = -8261921661291192687L;
 
 
-    @NotNull
     @Enumerated(value = EnumType.STRING)
     @Enumerated(value = EnumType.STRING)
     private Subject subject;
     private Subject subject;
 
 
@@ -28,13 +27,22 @@ public class MarkUser extends AbstractUser{
 
 
     private MarkRight markRight;
     private MarkRight markRight;
 
 
+    @Column(name = "inspect_sc")
+    private Boolean inspectSC;
+
+    @Column(name = "inspect_sm")
+    private Boolean inspectSM;
+
+    @Column(name = "inspect_sx")
+    private Boolean inspectSX;
+
     public MarkUser(String loginName,
     public MarkUser(String loginName,
                     String password,
                     String password,
                     Long workId,
                     Long workId,
                     Subject subject,
                     Subject subject,
                     String name,
                     String name,
-                    Role role){
-        super(loginName,password);
+                    Role role) {
+        super(loginName, password);
         this.workId = workId;
         this.workId = workId;
         this.subject = subject;
         this.subject = subject;
         this.setName(name);
         this.setName(name);
@@ -91,4 +99,28 @@ public class MarkUser extends AbstractUser{
     public void setMarkRight(MarkRight markRight) {
     public void setMarkRight(MarkRight markRight) {
         this.markRight = markRight;
         this.markRight = markRight;
     }
     }
+
+    public Boolean getInspectSC() {
+        return inspectSC;
+    }
+
+    public void setInspectSC(Boolean inspectSC) {
+        this.inspectSC = inspectSC;
+    }
+
+    public Boolean getInspectSM() {
+        return inspectSM;
+    }
+
+    public void setInspectSM(Boolean inspectSM) {
+        this.inspectSM = inspectSM;
+    }
+
+    public Boolean getInspectSX() {
+        return inspectSX;
+    }
+
+    public void setInspectSX(Boolean inspectSX) {
+        this.inspectSX = inspectSX;
+    }
 }
 }

+ 16 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/InspectRangeRepo.java

@@ -0,0 +1,16 @@
+package cn.com.qmth.stmms.ms.core.repository;
+
+import cn.com.qmth.stmms.ms.core.domain.InspectRange;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by yuanpan on 2017/10/19.
+ */
+@Repository
+public interface InspectRangeRepo extends JpaRepository<InspectRange, Long> {
+
+    List<InspectRange> findByWorkId(Long workId);
+}

+ 43 - 19
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java

@@ -8,7 +8,9 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.stream.Stream;
 import java.util.stream.Stream;
@@ -16,10 +18,11 @@ import java.util.stream.Stream;
 /**
 /**
  * Created by zhengmin on 2016/9/23.
  * Created by zhengmin on 2016/9/23.
  */
  */
-public interface PaperRepo extends JpaRepository<Paper,Long>,JpaSpecificationExecutor<Paper>{
+public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationExecutor<Paper> {
 
 
     List<Paper> findByWorkIdAndSubject(Long workId, Subject subject);
     List<Paper> findByWorkIdAndSubject(Long workId, Subject subject);
-    List<Paper> findByWorkIdAndSubject(Long workId, Subject subject,Sort sort);
+
+    List<Paper> findByWorkIdAndSubject(Long workId, Subject subject, Sort sort);
 
 
     List<Paper> findByQuestionId(Long questionId, Sort sort);
     List<Paper> findByQuestionId(Long questionId, Sort sort);
 
 
@@ -27,25 +30,28 @@ public interface PaperRepo extends JpaRepository<Paper,Long>,JpaSpecificationExe
 
 
     /**
     /**
      * 统计各省各科试卷数量[areaCode,areaName,questionName,count]
      * 统计各省各科试卷数量[areaCode,areaName,questionName,count]
+     *
      * @param workId
      * @param workId
      * @return
      * @return
      */
      */
-    @Query(value = "SELECT q.`area_code`,q.`area_name`,p.`question_name`,COUNT(*) FROM paper p LEFT OUTER JOIN exam_question q ON p.`question_id` = q.`id` WHERE p.`work_id` = ? GROUP BY p.`question_id`,p.`question_name` ORDER BY p.`question_id` ",nativeQuery = true)
+    @Query(value = "SELECT q.`area_code`,q.`area_name`,p.`question_name`,COUNT(*) FROM paper p LEFT OUTER JOIN exam_question q ON p.`question_id` = q.`id` WHERE p.`work_id` = ? GROUP BY p.`question_id`,p.`question_name` ORDER BY p.`question_id` ", nativeQuery = true)
     List<Object[]> countGroupByQuestion(Long workId);
     List<Object[]> countGroupByQuestion(Long workId);
-    
+
     /**
     /**
      * 统计科目各试题已评数及总数(分档阶段)
      * 统计科目各试题已评数及总数(分档阶段)
+     *
      * @param workId
      * @param workId
      * @param subject
      * @param subject
      * @return
      * @return
      */
      */
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.level IS NULL,1,0)),COUNT(p.`question_id`) " +
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.level IS NULL,1,0)),COUNT(p.`question_id`) " +
             "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ?" +
             "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ?" +
-            "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`",nativeQuery = true)
-    List<Object[]> countGroupByQuestionForLevel(Long workId,String subject);
+            "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
+    List<Object[]> countGroupByQuestionForLevel(Long workId, String subject);
 
 
     /**
     /**
      * 统计科目指定试题的各档位数量
      * 统计科目指定试题的各档位数量
+     *
      * @param questionId
      * @param questionId
      * @return
      * @return
      */
      */
@@ -54,61 +60,79 @@ public interface PaperRepo extends JpaRepository<Paper,Long>,JpaSpecificationExe
             "SUM(IF(p.`is_arbitrated` = 1, 1, 0))" +
             "SUM(IF(p.`is_arbitrated` = 1, 1, 0))" +
             "FROM paper p " +
             "FROM paper p " +
             "WHERE p.`question_id` = ? " +
             "WHERE p.`question_id` = ? " +
-            "GROUP BY p.`level` ORDER BY p.`level`",nativeQuery = true)
+            "GROUP BY p.`level` ORDER BY p.`level`", nativeQuery = true)
     List<Object[]> countGroupByLevel(Long questionId);
     List<Object[]> countGroupByLevel(Long questionId);
-    
+
     /**
     /**
      * 统计科目各试题已评数及总数(打分阶段)
      * 统计科目各试题已评数及总数(打分阶段)
+     *
      * @param workId
      * @param workId
      * @return
      * @return
      */
      */
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.score IS NULL,1,0)),COUNT(p.`question_id`) " +
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.score IS NULL,1,0)),COUNT(p.`question_id`) " +
             "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ?" +
             "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ?" +
-            "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`",nativeQuery = true)
-	List<Object[]> countGroupByQuestionForScore(Long workId, String string);
-	
+            "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
+    List<Object[]> countGroupByQuestionForScore(Long workId, String string);
+
     /**
     /**
      * 统计科目未分档的试卷数
      * 统计科目未分档的试卷数
+     *
      * @param workId
      * @param workId
      * @param subject
      * @param subject
      * @return
      * @return
      */
      */
-    Long countByWorkIdAndSubjectAndLevelIsNull(Long workId,Subject subject);
+    Long countByWorkIdAndSubjectAndLevelIsNull(Long workId, Subject subject);
 
 
     long countByWorkIdAndScoreIsNull(Long workId);
     long countByWorkIdAndScoreIsNull(Long workId);
 
 
     Long countByWorkId(Long workId);
     Long countByWorkId(Long workId);
 
 
-    long countByWorkIdAndQuestionId(Long workId,Long questionId);
+    long countByWorkIdAndQuestionId(Long workId, Long questionId);
 
 
     /**
     /**
      * 统计同一个考生的paper数量
      * 统计同一个考生的paper数量
+     *
      * @param workId
      * @param workId
      * @param examNumber
      * @param examNumber
      * @return
      * @return
      */
      */
-    Long countByWorkIdAndExamNumber(Long workId,String examNumber);
+    Long countByWorkIdAndExamNumber(Long workId, String examNumber);
 
 
     /**
     /**
      * 查询指定试卷
      * 查询指定试卷
+     *
      * @param workId
      * @param workId
      * @param subject
      * @param subject
      * @param examNumber
      * @param examNumber
      * @return
      * @return
      */
      */
-    Paper findByWorkIdAndSubjectAndExamNumber(Long workId,Subject subject,String examNumber);
-    
+    Paper findByWorkIdAndSubjectAndExamNumber(Long workId, Subject subject, String examNumber);
+
     /**
     /**
      * 查询同一个考生的paper
      * 查询同一个考生的paper
+     *
      * @param workId
      * @param workId
      * @param examNumber
      * @param examNumber
      * @return
      * @return
      */
      */
-	List<Paper> findByWorkIdAndExamNumber(Long workId,String examNumber);
+    List<Paper> findByWorkIdAndExamNumber(Long workId, String examNumber);
+
+    List<Paper> findByWorkIdAndExamNumberIn(Long workId, List<String> examNumbers);
 
 
     @Query(value = "select p from Paper p where p.score >= ?1 or p.score <= ?2")
     @Query(value = "select p from Paper p where p.score >= ?1 or p.score <= ?2")
-    List<Paper> findByScoreRange(Double highScore,Double lowScore);
+    List<Paper> findByScoreRange(Double highScore, Double lowScore);
 
 
-    @Query(value = "SELECT p.`exam_number`,p.`student_name`,p.question_id,GROUP_CONCAT(score  ORDER BY p.`subject`) FROM paper p WHERE p.`work_id` = ? GROUP BY p.exam_number,p.`student_name`",nativeQuery = true)
+    @Query(value = "SELECT p.`exam_number`,p.`student_name`,p.question_id,GROUP_CONCAT(score  ORDER BY p.`subject`) FROM paper p WHERE p.`work_id` = ? GROUP BY p.exam_number,p.`student_name`", nativeQuery = true)
     List<Object[]> findScores(Long workId);
     List<Object[]> findScores(Long workId);
+
+    List<Paper> findByWorkId(Long workId);
+
+    @Modifying
+    @Query(nativeQuery = true, value = "update paper set inspect_range = null where inspect_range = :inspectRange")
+    void resetInspectRange(@Param("inspectRange") Long inspectRange);
+
+
+    @Modifying
+    @Query(value = "update Paper p set p.inspectRange = ?1 where p.examNumber in ?2")
+    void markInspectRange(Long inspectRange, List<String> examNumbers);
 }
 }

+ 6 - 4
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/StudentRepo.java

@@ -4,6 +4,8 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 
 import cn.com.qmth.stmms.ms.core.domain.Student;
 import cn.com.qmth.stmms.ms.core.domain.Student;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -11,12 +13,12 @@ import java.util.List;
  * @author ting.yin
  * @author ting.yin
  * @date 2016年10月27日
  * @date 2016年10月27日
  */
  */
-public interface StudentRepo extends JpaRepository<Student, Long>,JpaSpecificationExecutor<Student> {
+public interface StudentRepo extends JpaRepository<Student, Long>, JpaSpecificationExecutor<Student> {
 
 
-	Student findByWorkIdAndExamNumber(Long workId, String examNumber);
+    Student findByWorkIdAndExamNumber(Long workId, String examNumber);
 
 
-	void deleteByWorkId(Long workId);
+    void deleteByWorkId(Long workId);
 
 
-	List<Student> findByWorkId(Long workId);
+    List<Student> findByWorkId(Long workId);
 
 
 }
 }

+ 2 - 3
stmms-ms-main/src/main/resources/application.properties

@@ -25,7 +25,7 @@ logging.file=./logs/sys.log
 logging.level.org.springframework=ERROR
 logging.level.org.springframework=ERROR
 logging.level.org.hibernate=ERROR
 logging.level.org.hibernate=ERROR
 
 
-spring.jpa.show-sql=false
+spring.jpa.show-sql=true
 spring.jpa.hibernate.ddl-auto=update
 spring.jpa.hibernate.ddl-auto=update
 
 
 
 
@@ -48,5 +48,4 @@ sys.config.imageServer.port=9000
 #袁攀配置
 #袁攀配置
 web.upload-path=/Users/yuanpan/tmp/stmms-ms/static/
 web.upload-path=/Users/yuanpan/tmp/stmms-ms/static/
 spring.mvc.static-path-pattern=/**
 spring.mvc.static-path-pattern=/**
-spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\
-  classpath:/static/,classpath:/public/,file:${web.upload-path}
+spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}