Selaa lähdekoodia

修改扫描端上传缺考考生为上传文件

yin 9 kuukautta sitten
vanhempi
commit
e9e0265fe0

+ 6 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -119,8 +119,8 @@ public interface ExamStudentDao extends JpaRepository<ExamStudent, Integer>, Jpa
     public void updateManualAbsent(int examId, String examNumber, boolean manualAbsent);
 
     @Modifying
-    @Query("update ExamStudent s set s.manualAbsent=?3 where s.examId=?1 and s.examNumber in ?2")
-    public void updateManualAbsent(int examId, List<String> examNumber, boolean manualAbsent);
+    @Query("update ExamStudent s set s.manualAbsent=?2 where s.id in ?1")
+    public void updateManualAbsent(List<Integer> examNumber, boolean manualAbsent);
 
     @Modifying
     @Query("update ExamStudent s set s.sheetCount=?2, s.sliceCount=?3, s.answers=?4, s.batchCode=?5, s.paperType=?6,"
@@ -321,4 +321,8 @@ public interface ExamStudentDao extends JpaRepository<ExamStudent, Integer>, Jpa
     @Query("select s.id from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.subjectiveStatus =?3 and s.upload=?4 and s.absent=?5 and s.breach=?6  ")
     List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId,
             String subjectCode, SubjectiveStatus status, boolean uplaod, boolean absent, boolean breach);
+
+    @Query("select s from ExamStudent s where s.examId=?1 and s.examNumber in ?2")
+    List<ExamStudent> findByExamIdAndExamNumberIn(Integer examId, List<String> examNumberIn);
+
 }

+ 4 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -81,8 +81,6 @@ public interface ExamStudentService {
 
     void updateManualAbsent(int examId, String examNumber, boolean manualAbsent);
 
-    void updateManualAbsent(int examId, List<String> examNumberIn, boolean manualAbsent);
-
     void clearManualAbsent(int examId);
 
     void updateException(int id, boolean exception);
@@ -230,4 +228,8 @@ public interface ExamStudentService {
 	long countAllUploadByExamId(Integer examId);
 
     List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId, String subjectCode, SubjectiveStatus status,boolean isuplaod,boolean absent,boolean breach);
+
+    List<ExamStudent> findByExamIdAndExamNumberIn(Integer examId, List<String> examNumberIn);
+
+    void updateManualAbsent(List<Integer> studentIds, boolean manualAbsent);
 }

+ 7 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -497,8 +497,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
 
     @Override
     @Transactional
-    public void updateManualAbsent(int examId, List<String> examNumberIn, boolean manualAbsent) {
-        studentDao.updateManualAbsent(examId, examNumberIn, manualAbsent);
+    public void updateManualAbsent(List<Integer> ids, boolean manualAbsent) {
+        studentDao.updateManualAbsent(ids, manualAbsent);
     }
 
     @Override
@@ -1297,6 +1297,11 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         return studentDao.findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(examId, subjectCode, status,uplaod,absent,breach);
     }
 
+    @Override
+    public List<ExamStudent> findByExamIdAndExamNumberIn(Integer examId, List<String> examNumberIn) {
+        return studentDao.findByExamIdAndExamNumberIn(examId,examNumberIn);
+    }
+
     @Override
     public long countSubjectiveByExamId(Integer examId) {
         Long count = studentDao.sumSubjectiveByExamId(examId);

+ 31 - 20
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java

@@ -8,9 +8,11 @@ import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.*;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
+import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
+import cn.com.qmth.stmms.biz.utils.BatchGetDataUtil;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
@@ -23,15 +25,18 @@ import com.google.common.base.Strings;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 
+import java.io.IOException;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.LinkedList;
@@ -61,6 +66,7 @@ public class ExamStudentController extends BaseApiController {
 
     @Autowired
     private FileService fileService;
+
     @Autowired
     private ExamSubjectService examSubjectService;
 
@@ -252,9 +258,9 @@ public class ExamStudentController extends BaseApiController {
     private JSONArray getInspector(Integer studentId) {
         List<InspectHistory> historyList = inspectHistoryService.findByStudentId(studentId);
         JSONArray array = new JSONArray();
-        if(!historyList.isEmpty()){
-            for (InspectHistory h: historyList) {
-                User u= userService.findById(h.getInspectorId());
+        if (!historyList.isEmpty()) {
+            for (InspectHistory h : historyList) {
+                User u = userService.findById(h.getInspectorId());
                 JSONObject obj = new JSONObject();
                 obj.accumulate("loginName", u.getLoginName());
                 obj.accumulate("name", u.getName());
@@ -306,7 +312,7 @@ public class ExamStudentController extends BaseApiController {
                 student = studentService.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode,
                         studentCode, examSeqCode);
             } else if (examId != null) {
-                student = studentService.findBySchoolIdAndExamIdAndSubjectCodeAndStudentCode( schoolId,examId,
+                student = studentService.findBySchoolIdAndExamIdAndSubjectCodeAndStudentCode(schoolId, examId,
                         subjectCode, studentCode);
             } else {
                 student = studentService.findBySchoolIdAndSubjectCodeAndStudentCode(schoolId, subjectCode, studentCode);
@@ -527,7 +533,7 @@ public class ExamStudentController extends BaseApiController {
     @RequestMapping(value = "/student/manualAbsent/{examId}", method = RequestMethod.POST)
     @ResponseBody
     public Object updateManualAbsent(HttpServletRequest request, @PathVariable Integer examId,
-            @RequestBody MenualAbsentDTO[] datas) {
+            @RequestParam MultipartFile file) {
         ApiUser user = RequestUtils.getApiUser(request);
         Exam exam = examService.findById(examId);
         JSONArray array = new JSONArray();
@@ -537,22 +543,27 @@ public class ExamStudentController extends BaseApiController {
             throw ApiException.EXAM_NOT_ACCESSIBLED;
         }
         studentService.clearManualAbsent(examId);
-        if (datas != null && datas.length > 0) {
-            List<String> examNumberIn = new ArrayList<>();
-            for (MenualAbsentDTO dto : datas) {
-                examNumberIn.add(dto.getExamNumber());
-            }
-            ExamStudentSearchQuery query  =new ExamStudentSearchQuery();
-            query.setExamId(examId);
-            query.setExamNumberIn(StringUtils.join(examNumberIn, ","));
-            query.setPageSize(Integer.MAX_VALUE);
-            query = studentService.findByQuery(query);
-            studentService.updateManualAbsent(examId, examNumberIn, true);
-            for (ExamStudent student :query.getResult()){
-                JSONObject obj = new JSONObject();
-                obj.accumulate("examNumber", student.getExamNumber());
-                array.add(obj);
+        List<String> lineList = null;
+        try {
+            lineList = IOUtils.readLines(file.getInputStream(), "UTF-8");
+            if (lineList != null && lineList.size() > 0) {
+                List<ExamStudent> studentList = new BatchGetDataUtil<ExamStudent, String>() {
+                    @Override
+                    protected List<ExamStudent> getData(List<String> dataList) {
+                        List<ExamStudent> list = studentService.findByExamIdAndExamNumberIn(examId, dataList);
+                        List<Integer> studentIds = list.stream().map(ExamStudent::getId).collect(Collectors.toList());
+                        studentService.updateManualAbsent(studentIds, true);
+                        return list;
+                    }
+                }.getDataForBatch(lineList, 500);
+                for (ExamStudent student : studentList) {
+                    JSONObject obj = new JSONObject();
+                    obj.accumulate("examNumber", student.getExamNumber());
+                    array.add(obj);
+                }
             }
+        } catch (IOException e) {
+            e.printStackTrace();
         }
         return array;
     }

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ScanController.java

@@ -205,7 +205,7 @@ public class ScanController extends BaseApiController {
      *
      * @param request
      * @param examId
-     * @param scStudentParameter
+     * @param refixStudents
      * @return
      */
     @Logging(menu = "扫描端-考生二次识别客观题上传", type = LogType.UPDATE)