xiatian 7 miesięcy temu
rodzic
commit
6880a99405

+ 5 - 5
pom.xml

@@ -30,11 +30,6 @@
             <groupId>com.qmth.boot</groupId>
             <artifactId>starter-api</artifactId>
             <version>${qmth-boot-version}</version>
-        </dependency>
-        		<dependency>
-            <groupId>com.qmth.boot</groupId>
-            <artifactId>core-security</artifactId>
-            <version>${qmth-boot-version}</version>
         </dependency>
         <dependency>
             <groupId>com.qmth.boot</groupId>
@@ -56,6 +51,11 @@
 		    <artifactId>core-cache</artifactId>
 		    <version>${qmth-boot-version}</version>
 		</dependency>
+		<dependency>
+		    <groupId>com.qmth.boot</groupId>
+		    <artifactId>core-solar</artifactId>
+		    <version>1.0.5</version>
+		</dependency>
 
         <!-- Swagger jars start -->
         <dependency>

+ 63 - 62
src/main/java/cn/com/qmth/markingaudit/dao/MonitorDao.java

@@ -1,62 +1,63 @@
-package cn.com.qmth.markingaudit.dao;
-
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
-
-import cn.com.qmth.markingaudit.bean.AkInfo;
-import cn.com.qmth.markingaudit.bean.ExamDataQuery;
-import cn.com.qmth.markingaudit.bean.ExamDataVo;
-import cn.com.qmth.markingaudit.bean.InspectDataInfo;
-import cn.com.qmth.markingaudit.bean.InspectDataQuery;
-import cn.com.qmth.markingaudit.bean.InspectDataVo;
-import cn.com.qmth.markingaudit.bean.LoginDataQuery;
-import cn.com.qmth.markingaudit.bean.LoginDataVo;
-import cn.com.qmth.markingaudit.bean.MarkingScoreDataQuery;
-import cn.com.qmth.markingaudit.bean.MarkingScoreDataVo;
-import cn.com.qmth.markingaudit.bean.MarkingScoreInfo;
-import cn.com.qmth.markingaudit.bean.MarkingScoreOperateInfo;
-import cn.com.qmth.markingaudit.bean.QuestionDataQuery;
-import cn.com.qmth.markingaudit.bean.QuestionDataVo;
-import cn.com.qmth.markingaudit.bean.RejectDataQuery;
-import cn.com.qmth.markingaudit.bean.RejectDataVo;
-import cn.com.qmth.markingaudit.bean.ScoreDataQuery;
-import cn.com.qmth.markingaudit.bean.ScoreDataVo;
-import cn.com.qmth.markingaudit.bean.StudentDataQuery;
-import cn.com.qmth.markingaudit.bean.StudentDataVo;
-import cn.com.qmth.markingaudit.bean.SubjectDataQuery;
-import cn.com.qmth.markingaudit.bean.SubjectDataVo;
-
-public interface MonitorDao {
-
-    List<ExamDataVo> examData(@Param("req") ExamDataQuery req);
-
-    List<StudentDataVo> studentData(@Param("req") StudentDataQuery req);
-
-    Integer getExamIdByIdAndSchoolCode(@Param("examId") Integer examId, @Param("schoolCode") String schoolCode);
-
-    List<QuestionDataVo> questionData(@Param("req") QuestionDataQuery req);
-
-    List<SubjectDataVo> subjectData(@Param("req") SubjectDataQuery req);
-
-    List<MarkingScoreDataVo> markingScoreData(@Param("req") MarkingScoreDataQuery req);
-
-    List<MarkingScoreInfo> markingScoreInfo(@Param("ids") List<Integer> ids);
-
-    List<MarkingScoreOperateInfo> markingScoreOperateInfo(@Param("ids") List<Integer> ids);
-
-    List<InspectDataVo> inspectData(@Param("req") InspectDataQuery req);
-
-    List<InspectDataInfo> inspectDataInfo(@Param("ids") List<Integer> ids);
-
-    List<RejectDataVo> rejectData(@Param("req") RejectDataQuery req);
-
-    List<ScoreDataVo> scoreData(@Param("req") ScoreDataQuery req);
-
-    Integer getSchoolId(@Param("schoolCode") String schoolCode);
-
-    List<LoginDataVo> loginData(@Param("req") LoginDataQuery req);
-
-    AkInfo getAk(@Param("schoolCode") String schoolCode);
-
-}
+package cn.com.qmth.markingaudit.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.qmth.boot.core.solar.model.OrgInfo;
+
+import cn.com.qmth.markingaudit.bean.ExamDataQuery;
+import cn.com.qmth.markingaudit.bean.ExamDataVo;
+import cn.com.qmth.markingaudit.bean.InspectDataInfo;
+import cn.com.qmth.markingaudit.bean.InspectDataQuery;
+import cn.com.qmth.markingaudit.bean.InspectDataVo;
+import cn.com.qmth.markingaudit.bean.LoginDataQuery;
+import cn.com.qmth.markingaudit.bean.LoginDataVo;
+import cn.com.qmth.markingaudit.bean.MarkingScoreDataQuery;
+import cn.com.qmth.markingaudit.bean.MarkingScoreDataVo;
+import cn.com.qmth.markingaudit.bean.MarkingScoreInfo;
+import cn.com.qmth.markingaudit.bean.MarkingScoreOperateInfo;
+import cn.com.qmth.markingaudit.bean.QuestionDataQuery;
+import cn.com.qmth.markingaudit.bean.QuestionDataVo;
+import cn.com.qmth.markingaudit.bean.RejectDataQuery;
+import cn.com.qmth.markingaudit.bean.RejectDataVo;
+import cn.com.qmth.markingaudit.bean.ScoreDataQuery;
+import cn.com.qmth.markingaudit.bean.ScoreDataVo;
+import cn.com.qmth.markingaudit.bean.StudentDataQuery;
+import cn.com.qmth.markingaudit.bean.StudentDataVo;
+import cn.com.qmth.markingaudit.bean.SubjectDataQuery;
+import cn.com.qmth.markingaudit.bean.SubjectDataVo;
+
+public interface MonitorDao {
+
+    List<ExamDataVo> examData(@Param("req") ExamDataQuery req);
+
+    List<StudentDataVo> studentData(@Param("req") StudentDataQuery req);
+
+    Integer getExamIdByIdAndSchoolCode(@Param("examId") Integer examId, @Param("schoolCode") String schoolCode);
+
+    List<QuestionDataVo> questionData(@Param("req") QuestionDataQuery req);
+
+    List<SubjectDataVo> subjectData(@Param("req") SubjectDataQuery req);
+
+    List<MarkingScoreDataVo> markingScoreData(@Param("req") MarkingScoreDataQuery req);
+
+    List<MarkingScoreInfo> markingScoreInfo(@Param("ids") List<Integer> ids);
+
+    List<MarkingScoreOperateInfo> markingScoreOperateInfo(@Param("ids") List<Integer> ids);
+
+    List<InspectDataVo> inspectData(@Param("req") InspectDataQuery req);
+
+    List<InspectDataInfo> inspectDataInfo(@Param("ids") List<Integer> ids);
+
+    List<RejectDataVo> rejectData(@Param("req") RejectDataQuery req);
+
+    List<ScoreDataVo> scoreData(@Param("req") ScoreDataQuery req);
+
+    Integer getSchoolId(@Param("schoolCode") String schoolCode);
+
+    List<LoginDataVo> loginData(@Param("req") LoginDataQuery req);
+
+    OrgInfo getOrgInfo(@Param("schoolCode") String schoolCode);
+
+}

+ 51 - 50
src/main/java/cn/com/qmth/markingaudit/service/MonitorService.java

@@ -1,50 +1,51 @@
-package cn.com.qmth.markingaudit.service;
-
-import java.util.List;
-
-import cn.com.qmth.markingaudit.bean.AkInfo;
-import cn.com.qmth.markingaudit.bean.ExamDataQuery;
-import cn.com.qmth.markingaudit.bean.ExamDataVo;
-import cn.com.qmth.markingaudit.bean.InspectDataQuery;
-import cn.com.qmth.markingaudit.bean.InspectDataVo;
-import cn.com.qmth.markingaudit.bean.LoginDataQuery;
-import cn.com.qmth.markingaudit.bean.LoginDataVo;
-import cn.com.qmth.markingaudit.bean.MarkingScoreDataQuery;
-import cn.com.qmth.markingaudit.bean.MarkingScoreDataVo;
-import cn.com.qmth.markingaudit.bean.QuestionDataQuery;
-import cn.com.qmth.markingaudit.bean.QuestionDataVo;
-import cn.com.qmth.markingaudit.bean.RejectDataQuery;
-import cn.com.qmth.markingaudit.bean.RejectDataVo;
-import cn.com.qmth.markingaudit.bean.ScoreDataQuery;
-import cn.com.qmth.markingaudit.bean.ScoreDataVo;
-import cn.com.qmth.markingaudit.bean.StudentDataQuery;
-import cn.com.qmth.markingaudit.bean.StudentDataVo;
-import cn.com.qmth.markingaudit.bean.SubjectDataQuery;
-import cn.com.qmth.markingaudit.bean.SubjectDataVo;
-
-/**
- * 类注释
- */
-public interface MonitorService {
-
-    List<ExamDataVo> examData(ExamDataQuery req);
-
-    List<StudentDataVo> studentData(StudentDataQuery req);
-
-    List<SubjectDataVo> subjectData(SubjectDataQuery req);
-
-    List<QuestionDataVo> questionData(QuestionDataQuery req);
-
-    List<MarkingScoreDataVo> markingScoreData(MarkingScoreDataQuery req);
-
-    List<InspectDataVo> inspectData(InspectDataQuery req);
-
-    List<RejectDataVo> rejectData(RejectDataQuery req);
-
-    List<ScoreDataVo> scoreData(ScoreDataQuery req);
-
-    List<LoginDataVo> loginData(LoginDataQuery req);
-
-    AkInfo getAk(String schoolCode);
-
-}
+package cn.com.qmth.markingaudit.service;
+
+import java.util.List;
+
+import com.qmth.boot.core.solar.model.OrgInfo;
+
+import cn.com.qmth.markingaudit.bean.ExamDataQuery;
+import cn.com.qmth.markingaudit.bean.ExamDataVo;
+import cn.com.qmth.markingaudit.bean.InspectDataQuery;
+import cn.com.qmth.markingaudit.bean.InspectDataVo;
+import cn.com.qmth.markingaudit.bean.LoginDataQuery;
+import cn.com.qmth.markingaudit.bean.LoginDataVo;
+import cn.com.qmth.markingaudit.bean.MarkingScoreDataQuery;
+import cn.com.qmth.markingaudit.bean.MarkingScoreDataVo;
+import cn.com.qmth.markingaudit.bean.QuestionDataQuery;
+import cn.com.qmth.markingaudit.bean.QuestionDataVo;
+import cn.com.qmth.markingaudit.bean.RejectDataQuery;
+import cn.com.qmth.markingaudit.bean.RejectDataVo;
+import cn.com.qmth.markingaudit.bean.ScoreDataQuery;
+import cn.com.qmth.markingaudit.bean.ScoreDataVo;
+import cn.com.qmth.markingaudit.bean.StudentDataQuery;
+import cn.com.qmth.markingaudit.bean.StudentDataVo;
+import cn.com.qmth.markingaudit.bean.SubjectDataQuery;
+import cn.com.qmth.markingaudit.bean.SubjectDataVo;
+
+/**
+ * 类注释
+ */
+public interface MonitorService {
+
+    List<ExamDataVo> examData(ExamDataQuery req);
+
+    List<StudentDataVo> studentData(StudentDataQuery req);
+
+    List<SubjectDataVo> subjectData(SubjectDataQuery req);
+
+    List<QuestionDataVo> questionData(QuestionDataQuery req);
+
+    List<MarkingScoreDataVo> markingScoreData(MarkingScoreDataQuery req);
+
+    List<InspectDataVo> inspectData(InspectDataQuery req);
+
+    List<RejectDataVo> rejectData(RejectDataQuery req);
+
+    List<ScoreDataVo> scoreData(ScoreDataQuery req);
+
+    List<LoginDataVo> loginData(LoginDataQuery req);
+
+    OrgInfo getOrgInfo(String schoolCode);
+
+}

+ 6 - 7
src/main/java/cn/com/qmth/markingaudit/service/impl/AuthServiceImpl.java

@@ -8,13 +8,12 @@ import org.springframework.stereotype.Service;
 import com.qmth.boot.core.exception.StatusException;
 import com.qmth.boot.core.security.annotation.AuthorizationComponent;
 import com.qmth.boot.core.security.service.AuthorizationService;
+import com.qmth.boot.core.solar.model.OrgInfo;
 import com.qmth.boot.tools.signature.SignatureType;
 
-import cn.com.qmth.markingaudit.bean.AkInfo;
 import cn.com.qmth.markingaudit.service.MonitorService;
 import cn.com.qmth.markingaudit.support.AccessInfo;
 import cn.com.qmth.markingaudit.support.CustConstants;
-import cn.com.qmth.markingaudit.utils.AuthorizationCreateUtil;
 
 @Service
 @AuthorizationComponent(prefix = { CustConstants.URI_PREFIX }, type = SignatureType.SECRET)
@@ -30,17 +29,17 @@ public class AuthServiceImpl implements AuthorizationService<AccessInfo> {
     public AccessInfo findByIdentity(String identity, SignatureType signatureType, String path) {
         String secret = caffeineCacheService.get(identity);
         if (secret == null) {
-            AkInfo ak = getAk(identity);
-            if (ak == null) {
+            OrgInfo org = getOrgInfo(identity);
+            if (org == null) {
                 throw new StatusException("未找到学校信息,code错误");
             }
-            secret = AuthorizationCreateUtil.buildApiSecret(ak.getAccessKey(), ak.getAccessSecret());
+            secret = org.getThirdPartySecret();
             caffeineCacheService.set(identity, secret, 5, TimeUnit.MINUTES);
         }
         return new AccessInfo(identity, secret);
     }
 
-    private AkInfo getAk(String schoolCode) {
-        return monitorService.getAk(schoolCode);
+    private OrgInfo getOrgInfo(String schoolCode) {
+        return monitorService.getOrgInfo(schoolCode);
     }
 }

+ 278 - 278
src/main/java/cn/com/qmth/markingaudit/service/impl/MonitorServiceImpl.java

@@ -1,279 +1,279 @@
-package cn.com.qmth.markingaudit.service.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.alibaba.fastjson.JSONObject;
-import com.qmth.boot.core.exception.StatusException;
-
-import cn.com.qmth.markingaudit.bean.AkInfo;
-import cn.com.qmth.markingaudit.bean.ExamDataQuery;
-import cn.com.qmth.markingaudit.bean.ExamDataVo;
-import cn.com.qmth.markingaudit.bean.InspectDataInfo;
-import cn.com.qmth.markingaudit.bean.InspectDataQuery;
-import cn.com.qmth.markingaudit.bean.InspectDataVo;
-import cn.com.qmth.markingaudit.bean.LoginDataQuery;
-import cn.com.qmth.markingaudit.bean.LoginDataVo;
-import cn.com.qmth.markingaudit.bean.MarkingScoreDataQuery;
-import cn.com.qmth.markingaudit.bean.MarkingScoreDataVo;
-import cn.com.qmth.markingaudit.bean.MarkingScoreInfo;
-import cn.com.qmth.markingaudit.bean.MarkingScoreOperateInfo;
-import cn.com.qmth.markingaudit.bean.QuestionDataQuery;
-import cn.com.qmth.markingaudit.bean.QuestionDataVo;
-import cn.com.qmth.markingaudit.bean.RejectDataQuery;
-import cn.com.qmth.markingaudit.bean.RejectDataVo;
-import cn.com.qmth.markingaudit.bean.ScoreDataQuery;
-import cn.com.qmth.markingaudit.bean.ScoreDataVo;
-import cn.com.qmth.markingaudit.bean.ScoreInfo;
-import cn.com.qmth.markingaudit.bean.StudentDataQuery;
-import cn.com.qmth.markingaudit.bean.StudentDataVo;
-import cn.com.qmth.markingaudit.bean.SubjectDataQuery;
-import cn.com.qmth.markingaudit.bean.SubjectDataVo;
-import cn.com.qmth.markingaudit.dao.MonitorDao;
-import cn.com.qmth.markingaudit.enums.SubjectiveStatus;
-import cn.com.qmth.markingaudit.service.MonitorService;
-
-@Service
-public class MonitorServiceImpl implements MonitorService {
-
-    @Autowired
-    private MonitorDao monitorDao;
-
-    @Override
-    public List<ExamDataVo> examData(ExamDataQuery req) {
-        Integer schoolId = monitorDao.getSchoolId(req.getSchoolCode());
-        if (schoolId == null) {
-            throw new StatusException("未找到学校信息");
-        }
-        req.setSchoolId(schoolId);
-        List<ExamDataVo> ret = monitorDao.examData(req);
-        if (CollectionUtils.isNotEmpty(ret)) {
-            for (ExamDataVo vo : ret) {
-                if (StringUtils.isNotBlank(vo.getSasConfig())) {
-                    JSONObject js = JSONObject.parseObject(vo.getSasConfig());
-                    if (js.containsKey("passScore")) {
-                        vo.setPassScore(js.getDouble("passScore"));
-                    }
-                    if (js.containsKey("excellentScore")) {
-                        vo.setExcellentScore(js.getDouble("excellentScore"));
-                    }
-                    vo.setSasConfig(null);
-                }
-            }
-        }
-        return ret;
-    }
-
-    @Override
-    public List<StudentDataVo> studentData(StudentDataQuery req) {
-        checkExamIdValid(req.getExamId(), req.getSchoolCode());
-        return monitorDao.studentData(req);
-    }
-
-    private void checkExamIdValid(Integer examId, String schoolCode) {
-        Integer id = monitorDao.getExamIdByIdAndSchoolCode(examId, schoolCode);
-        if (id == null) {
-            throw new StatusException("无效的考试id");
-        }
-    }
-
-    @Override
-    public List<SubjectDataVo> subjectData(SubjectDataQuery req) {
-        checkExamIdValid(req.getExamId(), req.getSchoolCode());
-        return monitorDao.subjectData(req);
-    }
-
-    @Override
-    public List<QuestionDataVo> questionData(QuestionDataQuery req) {
-        checkExamIdValid(req.getExamId(), req.getSchoolCode());
-        return monitorDao.questionData(req);
-    }
-
-    @Override
-    public List<MarkingScoreDataVo> markingScoreData(MarkingScoreDataQuery req) {
-        checkExamIdValid(req.getExamId(), req.getSchoolCode());
-        List<MarkingScoreDataVo> ret = monitorDao.markingScoreData(req);
-        if (CollectionUtils.isNotEmpty(ret)) {
-            List<Integer> ids = ret.stream().filter(e -> SubjectiveStatus.MARKED.equals(e.getSubjectiveStatus()))
-                    .map(e -> e.getDataId()).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(ids)) {
-                List<MarkingScoreInfo> infos = monitorDao.markingScoreInfo(ids);
-                if (CollectionUtils.isNotEmpty(infos)) {
-                    List<MarkingScoreOperateInfo> opinfos = monitorDao.markingScoreOperateInfo(ids);
-                    Map<String, List<MarkingScoreOperateInfo>> opmap = new HashMap<>();
-                    for (MarkingScoreOperateInfo info : opinfos) {
-                        String key = info.getStudentId() + "-" + info.getGroupNumber();
-                        List<MarkingScoreOperateInfo> tem = opmap.get(key);
-                        if (tem == null) {
-                            tem = new ArrayList<>();
-                            opmap.put(key, tem);
-                        }
-                        tem.add(info);
-                    }
-                    Map<Integer, List<MarkingScoreInfo>> map = new HashMap<>();
-                    for (MarkingScoreInfo info : infos) {
-                        String key = info.getStudentId() + "-" + info.getGroupNumber();
-                        fillOperateInfo(info, opmap.get(key));
-                        List<MarkingScoreInfo> tem = map.get(info.getStudentId());
-                        if (tem == null) {
-                            tem = new ArrayList<>();
-                            map.put(info.getStudentId(), tem);
-                        }
-                        tem.add(info);
-                    }
-                    for (MarkingScoreDataVo vo : ret) {
-                        vo.setExamInfo(map.get(vo.getDataId()));
-                    }
-                }
-            }
-        }
-        return ret;
-    }
-
-    private void fillOperateInfo(MarkingScoreInfo info, List<MarkingScoreOperateInfo> list) {
-        List<String> markerAcount = new ArrayList<>();
-        List<String> headAcount = new ArrayList<>();
-        List<String> markerTime = new ArrayList<>();
-        List<String> headerTime = new ArrayList<>();
-        for (MarkingScoreOperateInfo op : list) {
-            if (StringUtils.isNotBlank(op.getMarkerAccount())) {
-                markerAcount.add(op.getMarkerAccount());
-                markerTime.add(op.getMarkerTime());
-            }
-            if (StringUtils.isNotBlank(op.getHeaderAccount())) {
-                headAcount.add(op.getHeaderAccount());
-                headerTime.add(op.getHeaderTime());
-            }
-        }
-        if (CollectionUtils.isNotEmpty(headAcount)) {
-            info.setCreateTime(StringUtils.join(headerTime, ","));
-            info.setId(StringUtils.join(headAcount, ","));
-        } else {
-            info.setCreateTime(StringUtils.join(markerTime, ","));
-            info.setId(StringUtils.join(markerAcount, ","));
-        }
-    }
-
-    @Override
-    public List<InspectDataVo> inspectData(InspectDataQuery req) {
-        checkExamIdValid(req.getExamId(), req.getSchoolCode());
-        List<InspectDataVo> ret = monitorDao.inspectData(req);
-        if (CollectionUtils.isNotEmpty(ret)) {
-            List<Integer> ids = ret.stream().map(e -> e.getDataId()).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(ids)) {
-                List<InspectDataInfo> infos = monitorDao.inspectDataInfo(ids);
-                if (CollectionUtils.isNotEmpty(infos)) {
-                    Map<Integer, List<InspectDataInfo>> map = new HashMap<>();
-                    for (InspectDataInfo info : infos) {
-                        List<InspectDataInfo> tem = map.get(info.getStudentId());
-                        if (tem == null) {
-                            tem = new ArrayList<>();
-                            map.put(info.getStudentId(), tem);
-                        }
-                        tem.add(info);
-                    }
-                    for (InspectDataVo vo : ret) {
-                        vo.setExamInfo(map.get(vo.getDataId()));
-                    }
-                }
-            }
-        }
-        return ret;
-    }
-
-    @Override
-    public List<RejectDataVo> rejectData(RejectDataQuery req) {
-        checkExamIdValid(req.getExamId(), req.getSchoolCode());
-        return monitorDao.rejectData(req);
-    }
-
-    @Override
-    public List<ScoreDataVo> scoreData(ScoreDataQuery req) {
-        checkExamIdValid(req.getExamId(), req.getSchoolCode());
-        List<ScoreDataVo> ret = monitorDao.scoreData(req);
-        if (CollectionUtils.isNotEmpty(ret)) {
-            QuestionDataQuery qreq = new QuestionDataQuery();
-            qreq.setExamId(req.getExamId());
-            qreq.setSubjectCode(req.getSubjectCode());
-            List<QuestionDataVo> qs = monitorDao.questionData(qreq);
-            for (ScoreDataVo vo : ret) {
-                if (SubjectiveStatus.MARKED.equals(vo.getSubjectiveStatus())) {
-                    List<ScoreInfo> scores = new ArrayList<>();
-                    vo.setExamInfo(scores);
-                    int objectiveIndex = 0;
-                    int subjectiveIndex = 0;
-                    String[] objectiveStr = null;
-                    String[] subjectiveStr = null;
-                    if (StringUtils.isNotBlank(vo.getObjectiveScoreList())) {
-                        objectiveStr = vo.getObjectiveScoreList().split(";");
-                    }
-                    if (StringUtils.isNotBlank(vo.getSubjectiveScoreList())) {
-                        subjectiveStr = vo.getSubjectiveScoreList().split(";");
-                    }
-                    for (QuestionDataVo q : qs) {
-                        ScoreInfo score = new ScoreInfo();
-                        scores.add(score);
-                        if (q.getIsObjective()) {
-                            score.setMajorName(q.getMajorName());
-                            score.setMajorNo(q.getMajorNo());
-                            score.setMinorNo(q.getMinorNo());
-                            score.setScore(getObjectiveScore(objectiveStr, objectiveIndex));
-                            objectiveIndex++;
-                        } else {
-                            score.setMajorName(q.getMajorName());
-                            score.setMajorNo(q.getMajorNo());
-                            score.setMinorNo(q.getMinorNo());
-                            score.setScore(getSubjectiveScore(subjectiveStr, subjectiveIndex));
-                            subjectiveIndex++;
-                        }
-                    }
-                }
-                vo.setSubjectiveScoreList(null);
-                vo.setObjectiveScoreList(null);
-            }
-        }
-        return ret;
-    }
-
-    private Double getObjectiveScore(String[] scores, int index) {
-        if (scores == null) {
-            return 0.0;
-        }
-        if (index >= scores.length) {
-            return 0.0;
-        }
-        String[] tem = scores[index].split(":");
-        return Double.valueOf(tem[1]);
-    }
-
-    private Double getSubjectiveScore(String[] scores, int index) {
-        if (scores == null) {
-            return 0.0;
-        }
-        return Double.valueOf(scores[index]);
-    }
-
-    @Override
-    public List<LoginDataVo> loginData(LoginDataQuery req) {
-        Integer schoolId = monitorDao.getSchoolId(req.getSchoolCode());
-        if (schoolId == null) {
-            throw new StatusException("未找到学校信息");
-        }
-        req.setSchoolId(schoolId);
-        return monitorDao.loginData(req);
-    }
-
-    @Override
-    public AkInfo getAk(String schoolCode) {
-        return monitorDao.getAk(schoolCode);
-    }
-
+package cn.com.qmth.markingaudit.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.core.solar.model.OrgInfo;
+
+import cn.com.qmth.markingaudit.bean.ExamDataQuery;
+import cn.com.qmth.markingaudit.bean.ExamDataVo;
+import cn.com.qmth.markingaudit.bean.InspectDataInfo;
+import cn.com.qmth.markingaudit.bean.InspectDataQuery;
+import cn.com.qmth.markingaudit.bean.InspectDataVo;
+import cn.com.qmth.markingaudit.bean.LoginDataQuery;
+import cn.com.qmth.markingaudit.bean.LoginDataVo;
+import cn.com.qmth.markingaudit.bean.MarkingScoreDataQuery;
+import cn.com.qmth.markingaudit.bean.MarkingScoreDataVo;
+import cn.com.qmth.markingaudit.bean.MarkingScoreInfo;
+import cn.com.qmth.markingaudit.bean.MarkingScoreOperateInfo;
+import cn.com.qmth.markingaudit.bean.QuestionDataQuery;
+import cn.com.qmth.markingaudit.bean.QuestionDataVo;
+import cn.com.qmth.markingaudit.bean.RejectDataQuery;
+import cn.com.qmth.markingaudit.bean.RejectDataVo;
+import cn.com.qmth.markingaudit.bean.ScoreDataQuery;
+import cn.com.qmth.markingaudit.bean.ScoreDataVo;
+import cn.com.qmth.markingaudit.bean.ScoreInfo;
+import cn.com.qmth.markingaudit.bean.StudentDataQuery;
+import cn.com.qmth.markingaudit.bean.StudentDataVo;
+import cn.com.qmth.markingaudit.bean.SubjectDataQuery;
+import cn.com.qmth.markingaudit.bean.SubjectDataVo;
+import cn.com.qmth.markingaudit.dao.MonitorDao;
+import cn.com.qmth.markingaudit.enums.SubjectiveStatus;
+import cn.com.qmth.markingaudit.service.MonitorService;
+
+@Service
+public class MonitorServiceImpl implements MonitorService {
+
+    @Autowired
+    private MonitorDao monitorDao;
+
+    @Override
+    public List<ExamDataVo> examData(ExamDataQuery req) {
+        Integer schoolId = monitorDao.getSchoolId(req.getSchoolCode());
+        if (schoolId == null) {
+            throw new StatusException("未找到学校信息");
+        }
+        req.setSchoolId(schoolId);
+        List<ExamDataVo> ret = monitorDao.examData(req);
+        if (CollectionUtils.isNotEmpty(ret)) {
+            for (ExamDataVo vo : ret) {
+                if (StringUtils.isNotBlank(vo.getSasConfig())) {
+                    JSONObject js = JSONObject.parseObject(vo.getSasConfig());
+                    if (js.containsKey("passScore")) {
+                        vo.setPassScore(js.getDouble("passScore"));
+                    }
+                    if (js.containsKey("excellentScore")) {
+                        vo.setExcellentScore(js.getDouble("excellentScore"));
+                    }
+                    vo.setSasConfig(null);
+                }
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public List<StudentDataVo> studentData(StudentDataQuery req) {
+        checkExamIdValid(req.getExamId(), req.getSchoolCode());
+        return monitorDao.studentData(req);
+    }
+
+    private void checkExamIdValid(Integer examId, String schoolCode) {
+        Integer id = monitorDao.getExamIdByIdAndSchoolCode(examId, schoolCode);
+        if (id == null) {
+            throw new StatusException("无效的考试id");
+        }
+    }
+
+    @Override
+    public List<SubjectDataVo> subjectData(SubjectDataQuery req) {
+        checkExamIdValid(req.getExamId(), req.getSchoolCode());
+        return monitorDao.subjectData(req);
+    }
+
+    @Override
+    public List<QuestionDataVo> questionData(QuestionDataQuery req) {
+        checkExamIdValid(req.getExamId(), req.getSchoolCode());
+        return monitorDao.questionData(req);
+    }
+
+    @Override
+    public List<MarkingScoreDataVo> markingScoreData(MarkingScoreDataQuery req) {
+        checkExamIdValid(req.getExamId(), req.getSchoolCode());
+        List<MarkingScoreDataVo> ret = monitorDao.markingScoreData(req);
+        if (CollectionUtils.isNotEmpty(ret)) {
+            List<Integer> ids = ret.stream().filter(e -> SubjectiveStatus.MARKED.equals(e.getSubjectiveStatus()))
+                    .map(e -> e.getDataId()).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(ids)) {
+                List<MarkingScoreInfo> infos = monitorDao.markingScoreInfo(ids);
+                if (CollectionUtils.isNotEmpty(infos)) {
+                    List<MarkingScoreOperateInfo> opinfos = monitorDao.markingScoreOperateInfo(ids);
+                    Map<String, List<MarkingScoreOperateInfo>> opmap = new HashMap<>();
+                    for (MarkingScoreOperateInfo info : opinfos) {
+                        String key = info.getStudentId() + "-" + info.getGroupNumber();
+                        List<MarkingScoreOperateInfo> tem = opmap.get(key);
+                        if (tem == null) {
+                            tem = new ArrayList<>();
+                            opmap.put(key, tem);
+                        }
+                        tem.add(info);
+                    }
+                    Map<Integer, List<MarkingScoreInfo>> map = new HashMap<>();
+                    for (MarkingScoreInfo info : infos) {
+                        String key = info.getStudentId() + "-" + info.getGroupNumber();
+                        fillOperateInfo(info, opmap.get(key));
+                        List<MarkingScoreInfo> tem = map.get(info.getStudentId());
+                        if (tem == null) {
+                            tem = new ArrayList<>();
+                            map.put(info.getStudentId(), tem);
+                        }
+                        tem.add(info);
+                    }
+                    for (MarkingScoreDataVo vo : ret) {
+                        vo.setExamInfo(map.get(vo.getDataId()));
+                    }
+                }
+            }
+        }
+        return ret;
+    }
+
+    private void fillOperateInfo(MarkingScoreInfo info, List<MarkingScoreOperateInfo> list) {
+        List<String> markerAcount = new ArrayList<>();
+        List<String> headAcount = new ArrayList<>();
+        List<String> markerTime = new ArrayList<>();
+        List<String> headerTime = new ArrayList<>();
+        for (MarkingScoreOperateInfo op : list) {
+            if (StringUtils.isNotBlank(op.getMarkerAccount())) {
+                markerAcount.add(op.getMarkerAccount());
+                markerTime.add(op.getMarkerTime());
+            }
+            if (StringUtils.isNotBlank(op.getHeaderAccount())) {
+                headAcount.add(op.getHeaderAccount());
+                headerTime.add(op.getHeaderTime());
+            }
+        }
+        if (CollectionUtils.isNotEmpty(headAcount)) {
+            info.setCreateTime(StringUtils.join(headerTime, ","));
+            info.setId(StringUtils.join(headAcount, ","));
+        } else {
+            info.setCreateTime(StringUtils.join(markerTime, ","));
+            info.setId(StringUtils.join(markerAcount, ","));
+        }
+    }
+
+    @Override
+    public List<InspectDataVo> inspectData(InspectDataQuery req) {
+        checkExamIdValid(req.getExamId(), req.getSchoolCode());
+        List<InspectDataVo> ret = monitorDao.inspectData(req);
+        if (CollectionUtils.isNotEmpty(ret)) {
+            List<Integer> ids = ret.stream().map(e -> e.getDataId()).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(ids)) {
+                List<InspectDataInfo> infos = monitorDao.inspectDataInfo(ids);
+                if (CollectionUtils.isNotEmpty(infos)) {
+                    Map<Integer, List<InspectDataInfo>> map = new HashMap<>();
+                    for (InspectDataInfo info : infos) {
+                        List<InspectDataInfo> tem = map.get(info.getStudentId());
+                        if (tem == null) {
+                            tem = new ArrayList<>();
+                            map.put(info.getStudentId(), tem);
+                        }
+                        tem.add(info);
+                    }
+                    for (InspectDataVo vo : ret) {
+                        vo.setExamInfo(map.get(vo.getDataId()));
+                    }
+                }
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public List<RejectDataVo> rejectData(RejectDataQuery req) {
+        checkExamIdValid(req.getExamId(), req.getSchoolCode());
+        return monitorDao.rejectData(req);
+    }
+
+    @Override
+    public List<ScoreDataVo> scoreData(ScoreDataQuery req) {
+        checkExamIdValid(req.getExamId(), req.getSchoolCode());
+        List<ScoreDataVo> ret = monitorDao.scoreData(req);
+        if (CollectionUtils.isNotEmpty(ret)) {
+            QuestionDataQuery qreq = new QuestionDataQuery();
+            qreq.setExamId(req.getExamId());
+            qreq.setSubjectCode(req.getSubjectCode());
+            List<QuestionDataVo> qs = monitorDao.questionData(qreq);
+            for (ScoreDataVo vo : ret) {
+                if (SubjectiveStatus.MARKED.equals(vo.getSubjectiveStatus())) {
+                    List<ScoreInfo> scores = new ArrayList<>();
+                    vo.setExamInfo(scores);
+                    int objectiveIndex = 0;
+                    int subjectiveIndex = 0;
+                    String[] objectiveStr = null;
+                    String[] subjectiveStr = null;
+                    if (StringUtils.isNotBlank(vo.getObjectiveScoreList())) {
+                        objectiveStr = vo.getObjectiveScoreList().split(";");
+                    }
+                    if (StringUtils.isNotBlank(vo.getSubjectiveScoreList())) {
+                        subjectiveStr = vo.getSubjectiveScoreList().split(";");
+                    }
+                    for (QuestionDataVo q : qs) {
+                        ScoreInfo score = new ScoreInfo();
+                        scores.add(score);
+                        if (q.getIsObjective()) {
+                            score.setMajorName(q.getMajorName());
+                            score.setMajorNo(q.getMajorNo());
+                            score.setMinorNo(q.getMinorNo());
+                            score.setScore(getObjectiveScore(objectiveStr, objectiveIndex));
+                            objectiveIndex++;
+                        } else {
+                            score.setMajorName(q.getMajorName());
+                            score.setMajorNo(q.getMajorNo());
+                            score.setMinorNo(q.getMinorNo());
+                            score.setScore(getSubjectiveScore(subjectiveStr, subjectiveIndex));
+                            subjectiveIndex++;
+                        }
+                    }
+                }
+                vo.setSubjectiveScoreList(null);
+                vo.setObjectiveScoreList(null);
+            }
+        }
+        return ret;
+    }
+
+    private Double getObjectiveScore(String[] scores, int index) {
+        if (scores == null) {
+            return 0.0;
+        }
+        if (index >= scores.length) {
+            return 0.0;
+        }
+        String[] tem = scores[index].split(":");
+        return Double.valueOf(tem[1]);
+    }
+
+    private Double getSubjectiveScore(String[] scores, int index) {
+        if (scores == null) {
+            return 0.0;
+        }
+        return Double.valueOf(scores[index]);
+    }
+
+    @Override
+    public List<LoginDataVo> loginData(LoginDataQuery req) {
+        Integer schoolId = monitorDao.getSchoolId(req.getSchoolCode());
+        if (schoolId == null) {
+            throw new StatusException("未找到学校信息");
+        }
+        req.setSchoolId(schoolId);
+        return monitorDao.loginData(req);
+    }
+
+    @Override
+    public OrgInfo getOrgInfo(String schoolCode) {
+        return monitorDao.getOrgInfo(schoolCode);
+    }
+
 }

+ 20 - 23
src/main/java/cn/com/qmth/markingaudit/utils/AuthorizationCreateUtil.java

@@ -1,23 +1,20 @@
-package cn.com.qmth.markingaudit.utils;
-
-import java.security.NoSuchAlgorithmException;
-
-import com.qmth.boot.tools.codec.CodecUtils;
-import com.qmth.boot.tools.models.ByteArray;
-
-/**
- * 后台生成签名工具类
- */
-public class AuthorizationCreateUtil {
-
-    public static void main(String[] args) throws NoSuchAlgorithmException {
-        String accessKey = "0315b78010974ce4baedd8005dc2b834";
-        String accessSecret = "XwaMV27j1c39rHBBucSSJYvUmf7SGdNi";
-        System.out.println(buildApiSecret(accessKey, accessSecret));
-    }
-
-    public static String buildApiSecret(String accessKey, String accessSecret) {
-        return ByteArray.fromArray(CodecUtils.hmacsha256(accessKey.getBytes(), accessSecret.getBytes())).toHexString()
-                .toLowerCase();
-    }
-}
+package cn.com.qmth.markingaudit.utils;
+
+import java.security.NoSuchAlgorithmException;
+
+import com.qmth.boot.core.solar.model.OrgInfo;
+
+/**
+ * 后台生成签名工具类
+ */
+public class AuthorizationCreateUtil {
+
+    public static void main(String[] args) throws NoSuchAlgorithmException {
+        String accessKey = "0315b78010974ce4baedd8005dc2b834";
+        String accessSecret = "XwaMV27j1c39rHBBucSSJYvUmf7SGdNi";
+        OrgInfo org = new OrgInfo();
+        org.setAccessKey(accessKey);
+        org.setAccessSecret(accessSecret);
+        System.out.println(org.getThirdPartySecret());
+    }
+}

+ 153 - 153
src/main/resources/mapper/MonitorMapper.xml

@@ -1,153 +1,153 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.com.qmth.markingaudit.dao.MonitorDao">
-
-	<select id="getAk" resultType="cn.com.qmth.markingaudit.bean.AkInfo">
-		select s.access_key,s.access_secret
-		from b_school s 
-		where s.code=#{schoolCode}
-	</select>
-	
-	<select id="getSchoolId" resultType="int">
-		select s.id
-		from b_school s 
-		where s.code=#{schoolCode}
-	</select>
-	<select id="getExamIdByIdAndSchoolCode" resultType="int">
-		select t.id
-		from eb_exam t 
-		left join b_school s on t.school_id=s.id
-		where s.code=#{schoolCode}
-		and t.id=#{examId}
-	</select>
-	<select id="examData" resultType="cn.com.qmth.markingaudit.bean.ExamDataVo">
-		select t.id,t.name,t.type kind,t.exam_time,t.mark_start_time start_time
-		,t.mark_end_time end_time,t.create_time,t.sas_config,
-		t.id dataId
-		from eb_exam t 
-		where t.school_id=#{req.schoolId}
-		and t.id&gt;=#{req.startId}
-		order by t.id
-		limit #{req.pageSize}
-	</select>
-	
-	<select id="studentData" resultType="cn.com.qmth.markingaudit.bean.StudentDataVo">
-		select t.id dataId,t.name,t.exam_number cardNo,t.student_code studentId,
-		(case when t.is_absent=0 and t.is_upload=1 then 1 else 0 end) status
-		from eb_exam_student t 
-		where t.exam_id=#{req.examId}
-		and t.id&gt;=#{req.startId}
-		order by t.id
-		limit #{req.pageSize}
-	</select>
-	
-	<select id="questionData" resultType="cn.com.qmth.markingaudit.bean.QuestionDataVo">
-		select s.name,t.main_title majorName,t.main_number majorNo,t.sub_number minorNo,
-		t.total_score minorScore,t.is_objective
-		from eb_exam_question t 
-		left join eb_exam_subject s on t.exam_id=s.exam_id and t.subject_code=s.code
-		where t.exam_id=#{req.examId}
-		and t.subject_code=#{req.subjectCode}
-		order by t.main_number,t.sub_number
-	</select>
-	
-	<select id="subjectData" resultType="cn.com.qmth.markingaudit.bean.SubjectDataVo">
-		select t.name,t.code subjectCode
-		from eb_exam_subject t
-		where t.exam_id=#{req.examId}
-		order by t.code
-		 limit ${(req.pageNumber-1)*req.pageSize},#{req.pageSize}
-	</select>
-	
-	<select id="markingScoreData" resultType="cn.com.qmth.markingaudit.bean.MarkingScoreDataVo">
-		select t.id dataId,t.name,t.exam_number cardNo,t.subjective_status
-		from eb_exam_student t 
-		where t.exam_id=#{req.examId}
-		and t.subject_code=#{req.subjectCode}
-		and t.id&gt;=#{req.startId}
-		order by t.id
-		limit #{req.pageSize}
-	</select>
-	<select id="markingScoreInfo" resultType="cn.com.qmth.markingaudit.bean.MarkingScoreInfo">
-		select t.student_id,t.group_number,
-		f.main_title majorName,f.main_number majorNo,f.sub_number minorNo,t.score
-		from eb_subjective_score t 
-		left join eb_exam_question f on t.exam_id=f.exam_id and t.subject_code=f.subject_code 
-		and t.main_number=f.main_number and t.sub_number=f.sub_number and f.is_objective=0
-		where 1=1
-		and t.student_id in
-		<foreach collection="ids" item="item"
-			index="index" separator="," open="(" close=")">
-			#{item}
-		</foreach>
-		order by f.main_number,f.sub_number
-	</select>
-	<select id="markingScoreOperateInfo" resultType="cn.com.qmth.markingaudit.bean.MarkingScoreOperateInfo">
-		select t.student_id,t.group_number,t.marker_time,t.header_time,
-		mu.login_name markerAccount,hu.login_name headerAccount
-		from m_library t 
-		left join eb_marker m on t.marker_id=m.id
-		left join b_user mu on m.user_id=mu.id
-		left join b_user hu on t.header_id=hu.id
-		where 1=1
-		and t.student_id in
-		<foreach collection="ids" item="item"
-			index="index" separator="," open="(" close=")">
-			#{item}
-		</foreach>
-	</select>
-	
-	<select id="inspectData" resultType="cn.com.qmth.markingaudit.bean.InspectDataVo">
-		select t.id dataId,t.name,t.exam_number cardNo
-		from eb_exam_student t 
-		where t.exam_id=#{req.examId}
-		and t.subject_code=#{req.subjectCode}
-		and t.id&gt;=#{req.startId}
-		order by t.id
-		limit #{req.pageSize}
-	</select>
-
-	<select id="inspectDataInfo" resultType="cn.com.qmth.markingaudit.bean.InspectDataInfo">
-		select t.student_id,t.inspect_time createTime,u.login_name id,u.name loginName
-		from eb_inspect_history t 
-		left join b_user u on t.inspector_id=u.id
-		where 1=1
-		and t.student_id in
-		<foreach collection="ids" item="item"
-			index="index" separator="," open="(" close=")">
-			#{item}
-		</foreach>
-		order by t.inspect_round
-	</select>
-	<select id="rejectData" resultType="cn.com.qmth.markingaudit.bean.RejectDataVo">
-		select s.exam_number cardNo,t.id dataId,t.reason,t.create_time,u.login_name id,u.name loginName
-		from m_reject_history t
-		inner join eb_exam_student s on t.student_id=s.id
-		inner join b_user u on t.user_id=u.id
-		where t.exam_id=#{req.examId}
-		and t.subject_code=#{req.subjectCode}
-		and t.id&gt;=#{req.startId}
-		order by t.id
-		limit #{req.pageSize}
-	</select>
-	<select id="scoreData" resultType="cn.com.qmth.markingaudit.bean.ScoreDataVo">
-		select t.id dataId,t.objective_score+t.subjective_score total,t.exam_number cardNo,
-		t.subjective_status,t.objective_score_list,t.subjective_score_list
-		from eb_exam_student t 
-		where t.exam_id=#{req.examId}
-		and t.subject_code=#{req.subjectCode}
-		and t.id&gt;=#{req.startId}
-		order by t.id
-		limit #{req.pageSize}
-	</select>
-	<select id="loginData" resultType="cn.com.qmth.markingaudit.bean.LoginDataVo">
-		select t.id dataId,u.login_name id,u.name info,t.create_time
-		from eb_operation_log t 
-		left join b_user u on t.operator_id=u.id
-		where t.school_id=#{req.schoolId}
-		and t.menu='登录'
-		and t.id&gt;=#{req.startId}
-		order by t.id
-		limit #{req.pageSize}
-	</select>
-</mapper>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.qmth.markingaudit.dao.MonitorDao">
+
+	<select id="getOrgInfo" resultType="com.qmth.boot.core.solar.model.OrgInfo">
+		select s.id,s.code,s.name,s.access_key,s.access_secret
+		from b_school s 
+		where s.code=#{schoolCode}
+	</select>
+	
+	<select id="getSchoolId" resultType="int">
+		select s.id
+		from b_school s 
+		where s.code=#{schoolCode}
+	</select>
+	<select id="getExamIdByIdAndSchoolCode" resultType="int">
+		select t.id
+		from eb_exam t 
+		left join b_school s on t.school_id=s.id
+		where s.code=#{schoolCode}
+		and t.id=#{examId}
+	</select>
+	<select id="examData" resultType="cn.com.qmth.markingaudit.bean.ExamDataVo">
+		select t.id,t.name,t.type kind,t.exam_time,t.mark_start_time start_time
+		,t.mark_end_time end_time,t.create_time,t.sas_config,
+		t.id dataId
+		from eb_exam t 
+		where t.school_id=#{req.schoolId}
+		and t.id&gt;=#{req.startId}
+		order by t.id
+		limit #{req.pageSize}
+	</select>
+	
+	<select id="studentData" resultType="cn.com.qmth.markingaudit.bean.StudentDataVo">
+		select t.id dataId,t.name,t.exam_number cardNo,t.student_code studentId,
+		(case when t.is_absent=0 and t.is_upload=1 then 1 else 0 end) status
+		from eb_exam_student t 
+		where t.exam_id=#{req.examId}
+		and t.id&gt;=#{req.startId}
+		order by t.id
+		limit #{req.pageSize}
+	</select>
+	
+	<select id="questionData" resultType="cn.com.qmth.markingaudit.bean.QuestionDataVo">
+		select s.name,t.main_title majorName,t.main_number majorNo,t.sub_number minorNo,
+		t.total_score minorScore,t.is_objective
+		from eb_exam_question t 
+		left join eb_exam_subject s on t.exam_id=s.exam_id and t.subject_code=s.code
+		where t.exam_id=#{req.examId}
+		and t.subject_code=#{req.subjectCode}
+		order by t.main_number,t.sub_number
+	</select>
+	
+	<select id="subjectData" resultType="cn.com.qmth.markingaudit.bean.SubjectDataVo">
+		select t.name,t.code subjectCode
+		from eb_exam_subject t
+		where t.exam_id=#{req.examId}
+		order by t.code
+		 limit ${(req.pageNumber-1)*req.pageSize},#{req.pageSize}
+	</select>
+	
+	<select id="markingScoreData" resultType="cn.com.qmth.markingaudit.bean.MarkingScoreDataVo">
+		select t.id dataId,t.name,t.exam_number cardNo,t.subjective_status
+		from eb_exam_student t 
+		where t.exam_id=#{req.examId}
+		and t.subject_code=#{req.subjectCode}
+		and t.id&gt;=#{req.startId}
+		order by t.id
+		limit #{req.pageSize}
+	</select>
+	<select id="markingScoreInfo" resultType="cn.com.qmth.markingaudit.bean.MarkingScoreInfo">
+		select t.student_id,t.group_number,
+		f.main_title majorName,f.main_number majorNo,f.sub_number minorNo,t.score
+		from eb_subjective_score t 
+		left join eb_exam_question f on t.exam_id=f.exam_id and t.subject_code=f.subject_code 
+		and t.main_number=f.main_number and t.sub_number=f.sub_number and f.is_objective=0
+		where 1=1
+		and t.student_id in
+		<foreach collection="ids" item="item"
+			index="index" separator="," open="(" close=")">
+			#{item}
+		</foreach>
+		order by f.main_number,f.sub_number
+	</select>
+	<select id="markingScoreOperateInfo" resultType="cn.com.qmth.markingaudit.bean.MarkingScoreOperateInfo">
+		select t.student_id,t.group_number,t.marker_time,t.header_time,
+		mu.login_name markerAccount,hu.login_name headerAccount
+		from m_library t 
+		left join eb_marker m on t.marker_id=m.id
+		left join b_user mu on m.user_id=mu.id
+		left join b_user hu on t.header_id=hu.id
+		where 1=1
+		and t.student_id in
+		<foreach collection="ids" item="item"
+			index="index" separator="," open="(" close=")">
+			#{item}
+		</foreach>
+	</select>
+	
+	<select id="inspectData" resultType="cn.com.qmth.markingaudit.bean.InspectDataVo">
+		select t.id dataId,t.name,t.exam_number cardNo
+		from eb_exam_student t 
+		where t.exam_id=#{req.examId}
+		and t.subject_code=#{req.subjectCode}
+		and t.id&gt;=#{req.startId}
+		order by t.id
+		limit #{req.pageSize}
+	</select>
+
+	<select id="inspectDataInfo" resultType="cn.com.qmth.markingaudit.bean.InspectDataInfo">
+		select t.student_id,t.inspect_time createTime,u.login_name id,u.name loginName
+		from eb_inspect_history t 
+		left join b_user u on t.inspector_id=u.id
+		where 1=1
+		and t.student_id in
+		<foreach collection="ids" item="item"
+			index="index" separator="," open="(" close=")">
+			#{item}
+		</foreach>
+		order by t.inspect_round
+	</select>
+	<select id="rejectData" resultType="cn.com.qmth.markingaudit.bean.RejectDataVo">
+		select s.exam_number cardNo,t.id dataId,t.reason,t.create_time,u.login_name id,u.name loginName
+		from m_reject_history t
+		inner join eb_exam_student s on t.student_id=s.id
+		inner join b_user u on t.user_id=u.id
+		where t.exam_id=#{req.examId}
+		and t.subject_code=#{req.subjectCode}
+		and t.id&gt;=#{req.startId}
+		order by t.id
+		limit #{req.pageSize}
+	</select>
+	<select id="scoreData" resultType="cn.com.qmth.markingaudit.bean.ScoreDataVo">
+		select t.id dataId,t.objective_score+t.subjective_score total,t.exam_number cardNo,
+		t.subjective_status,t.objective_score_list,t.subjective_score_list
+		from eb_exam_student t 
+		where t.exam_id=#{req.examId}
+		and t.subject_code=#{req.subjectCode}
+		and t.id&gt;=#{req.startId}
+		order by t.id
+		limit #{req.pageSize}
+	</select>
+	<select id="loginData" resultType="cn.com.qmth.markingaudit.bean.LoginDataVo">
+		select t.id dataId,u.login_name id,u.name info,t.create_time
+		from eb_operation_log t 
+		left join b_user u on t.operator_id=u.id
+		where t.school_id=#{req.schoolId}
+		and t.menu='登录'
+		and t.id&gt;=#{req.startId}
+		order by t.id
+		limit #{req.pageSize}
+	</select>
+</mapper>