Эх сурвалжийг харах

merge from release_v4.1.3

deason 2 жил өмнө
parent
commit
7d5328d56e

+ 13 - 2
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/ExamScoreDataCloudServiceProvider.java

@@ -38,6 +38,8 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.json.JSONException;
 import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Example;
 import org.springframework.data.domain.Page;
@@ -59,6 +61,8 @@ import java.util.stream.Collectors;
 @RequestMapping("${$rmp.cloud.oe}/examScoreData")
 public class ExamScoreDataCloudServiceProvider extends ControllerSupport implements ExamScoreDataCloudService {
 
+    private static final Logger log = LoggerFactory.getLogger(ExamScoreDataCloudServiceProvider.class);
+
     private static final long serialVersionUID = 8280332746440316604L;
 
     @Autowired
@@ -246,6 +250,14 @@ public class ExamScoreDataCloudServiceProvider extends ControllerSupport impleme
      */
     private Boolean isLivenessPass(String faceLivenessResult) {
         if (StringUtils.isNotBlank(faceLivenessResult)) {
+            // 兼容C端学生端情况,人脸真实性值只存在0或1两种值
+            if ("0".equals(faceLivenessResult)) {
+                return false;
+            }
+            if ("1".equals(faceLivenessResult)) {
+                return true;
+            }
+
             JSONObject jsonObject;
             try {
                 jsonObject = new JSONObject(faceLivenessResult);
@@ -268,10 +280,9 @@ public class ExamScoreDataCloudServiceProvider extends ControllerSupport impleme
                     }
                 }
             } catch (JSONException e) {
-                e.printStackTrace();
+                log.error(e.getMessage(), e);
                 return false;
             }
-
         }
         return false;
     }

+ 32 - 0
examcloud-core-oe-admin-base/src/main/java/cn/com/qmth/examcloud/core/oe/admin/base/jpa/SqlWrapper.java

@@ -16,32 +16,59 @@ import java.util.Collection;
  * @since: 2018/8/28
  */
 public class SqlWrapper {
+
     private static final String SELECT = "SELECT ";
+
     private static final String UPDATE = "UPDATE ";
+
     private static final String DELETE = "DELETE ";
+
     private static final String SET = " SET ";
+
     private static final String COUNT = " COUNT ";
+
     private static final String SUM = " SUM ";
+
     private static final String DISTINCT = " DISTINCT ";
+
     private static final String FROM = " FROM ";
+
     private static final String WHERE = " WHERE ";
+
     private static final String INNER_JOIN = " INNER JOIN ";
+
     private static final String LEFT_JOIN = " LEFT JOIN ";
+
     private static final String UNION_ALL = " UNION ALL ";
+
     private static final String UNION = " UNION ";
+
     private static final String ON = " ON ";
+
     private static final String AS = " AS ";
+
     private static final String AND = " AND ";
+
     private static final String OR = " OR ";
+
     private static final String LIKE = " LIKE ";
+
     private static final String IN = " IN ";
+
     private static final String NOT_IN = " NOT IN ";
+
     private static final String IS_NULL = " IS NULL ";
+
     private static final String IS_NOT_NULL = " IS NOT NULL ";
+
     private static final String GROUP_BY = " GROUP BY ";
+
     private static final String ORDER_BY = " ORDER BY ";
+
     private static final String ASC = " ASC ";
+
     private static final String DESC = " DESC ";
+
     private static final String HAVING = " HAVING ";
 
     private StringBuilder sql = new StringBuilder();
@@ -127,6 +154,11 @@ public class SqlWrapper {
         return this;
     }
 
+    public SqlWrapper rightLike(String fieldName, CharSequence value) {
+        sql.append(fieldName).append(LIKE).append("'").append(value).append("%'");
+        return this;
+    }
+
     public SqlWrapper like(String fieldName, CharSequence value) {
         sql.append(fieldName).append(LIKE).append("'%").append(value).append("%'");
         return this;

+ 14 - 0
examcloud-core-oe-admin-dao/src/main/java/cn/com/qmth/examcloud/core/oe/admin/dao/entity/ExamFaceLiveVerifyEntity.java

@@ -3,6 +3,8 @@ package cn.com.qmth.examcloud.core.oe.admin.dao.entity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.enums.FaceLiveVerifyStatus;
 import cn.com.qmth.examcloud.web.jpa.JpaEntity;
 
+import java.util.Date;
+
 import javax.persistence.*;
 
 /**
@@ -65,6 +67,10 @@ public class ExamFaceLiveVerifyEntity extends JpaEntity {
      */
     @Column(length = 500)
     private String errorMsg;
+    
+	@Column(nullable = false, updatable = false)
+	@Temporal(TemporalType.TIMESTAMP)
+	private Date creationTime;
 
     public Long getId() {
         return id;
@@ -138,4 +144,12 @@ public class ExamFaceLiveVerifyEntity extends JpaEntity {
         this.errorMsg = errorMsg;
     }
 
+	public Date getCreationTime() {
+		return creationTime;
+	}
+
+	public void setCreationTime(Date creationTime) {
+		this.creationTime = creationTime;
+	}
+
 }

+ 4 - 4
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamAuditServiceImpl.java

@@ -343,13 +343,13 @@ public class ExamAuditServiceImpl implements ExamAuditService {
             wrapper.and().eq("record.exam_stage_id", query.getExamStageId());
         }
         if (StringUtils.isNotBlank(query.getStudentCode())) {
-            wrapper.and().like("record.student_code", query.getStudentCode());
+            wrapper.and().rightLike("record.student_code", query.getStudentCode());
         }
         if (StringUtils.isNotBlank(query.getStudentName())) {
-            wrapper.and().like("record.student_name", query.getStudentName());
+            wrapper.and().rightLike("record.student_name", query.getStudentName());
         }
         if (StringUtils.isNotBlank(query.getIdentityNumber())) {
-            wrapper.and().like("record.identity_number", query.getIdentityNumber());
+            wrapper.and().rightLike("record.identity_number", query.getIdentityNumber());
         }
         if (query.getCourseId() != null) {
             wrapper.and().eq("record.course_id", query.getCourseId());
@@ -367,7 +367,7 @@ public class ExamAuditServiceImpl implements ExamAuditService {
             wrapper.and().eq("audit.discipline_type", query.getDisciplineType());
         }
         if (StringUtils.isNoneBlank(query.getAuditUserName())) {
-            wrapper.and().like("audit.audit_user_name", query.getAuditUserName());
+            wrapper.and().rightLike("audit.audit_user_name", query.getAuditUserName());
         }
 
         if (StringUtils.isNotBlank(query.getStartTime()) && StringUtils.isNotBlank(query.getEndTime())) {

+ 9 - 2
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamCaptureServiceImpl.java

@@ -249,6 +249,14 @@ public class ExamCaptureServiceImpl implements ExamCaptureService {
 
     private boolean isFaceLivenessPass(String faceLivenessResult) {
         if (StringUtils.isNotBlank(faceLivenessResult)) {
+            // 兼容C端学生端情况,人脸真实性值只存在0或1两种值
+            if ("0".equals(faceLivenessResult)) {
+                return false;
+            }
+            if ("1".equals(faceLivenessResult)) {
+                return true;
+            }
+
             JSONObject jsonObject;
             try {
                 jsonObject = new JSONObject(faceLivenessResult);
@@ -271,10 +279,9 @@ public class ExamCaptureServiceImpl implements ExamCaptureService {
                     }
                 }
             } catch (JSONException e) {
-                LOG.error("json格式转换失败", e);
+                LOG.error(e.getMessage(), e);
                 return false;
             }
-
         }
         return false;
     }

+ 4 - 4
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamRecordServiceImpl.java

@@ -463,19 +463,19 @@ public class ExamRecordServiceImpl implements ExamRecordService {
         }
 
         if (StringUtils.isNotBlank(query.getStudentCode())) {
-            sql.append(" and record_data.student_code LIKE '%" + query.getStudentCode() + "%'");
+            sql.append(" and record_data.student_code LIKE '" + query.getStudentCode() + "%'");
         }
         if (StringUtils.isNotBlank(query.getStudentName())) {
-            sql.append(" and record_data.student_name LIKE '%" + query.getStudentName() + "%'");
+            sql.append(" and record_data.student_name LIKE '" + query.getStudentName() + "%'");
         }
         if (StringUtils.isNotBlank(query.getIdentityNumber())) {
             sql.append(" and record_data.identity_number LIKE '" + query.getIdentityNumber() + "%'");
         }
         if (StringUtils.isNotBlank(query.getInfoCollector())) {
-            sql.append(" and record_data.info_collector LIKE '%" + query.getInfoCollector() + "%'");
+            sql.append(" and record_data.info_collector LIKE '" + query.getInfoCollector() + "%'");
         }
         if (StringUtils.isNotBlank(query.getAuditUserName())) {
-            sql.append(" and audit.audit_user_name LIKE '%" + query.getAuditUserName() + "%'");
+            sql.append(" and audit.audit_user_name LIKE '" + query.getAuditUserName() + "%'");
         }
         if (query.getCourseId() != null) {
             sql.append(" and record_data.course_id = " + query.getCourseId());

+ 9 - 22
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamScoreServiceImpl.java

@@ -238,10 +238,10 @@ public class ExamScoreServiceImpl implements ExamScoreService {
             sql.append(" and exam_stage_id=" + query.getExamStageId());
         }
         if (StringUtils.isNotBlank(query.getStudentCode())) {
-            sql.append(" and student_code LIKE '%" + query.getStudentCode() + "%'");
+            sql.append(" and student_code LIKE '" + query.getStudentCode() + "%'");
         }
         if (StringUtils.isNotBlank(query.getStudentName())) {
-            sql.append(" and student_name LIKE '%" + query.getStudentName() + "%'");
+            sql.append(" and student_name LIKE '" + query.getStudentName() + "%'");
         }
         if (StringUtils.isNotBlank(query.getIdentityNumber())) {
             sql.append(" and identity_number LIKE '" + query.getIdentityNumber() + "%'");
@@ -314,10 +314,10 @@ public class ExamScoreServiceImpl implements ExamScoreService {
             sql.append(" and exam_stage_id=" + query.getExamStageId());
         }
         if (StringUtils.isNotBlank(query.getStudentCode())) {
-            sql.append(" and student_code LIKE '%" + query.getStudentCode() + "%'");
+            sql.append(" and student_code LIKE '" + query.getStudentCode() + "%'");
         }
         if (StringUtils.isNotBlank(query.getStudentName())) {
-            sql.append(" and student_name LIKE '%" + query.getStudentName() + "%'");
+            sql.append(" and student_name LIKE '" + query.getStudentName() + "%'");
         }
         if (StringUtils.isNotBlank(query.getIdentityNumber())) {
             sql.append(" and identity_number LIKE '" + query.getIdentityNumber() + "%'");
@@ -692,10 +692,10 @@ public class ExamScoreServiceImpl implements ExamScoreService {
 
         //超过可考次数,始终为可考次数+1
         if (usedExamNum > canExamTimes) {
-            return canExamTimes;
+            return canExamTimes + 1;
         }
 
-        return usedExamNum;
+        return usedExamNum + 1;
     }
 
     private boolean isExamRecordEnded(ExamRecordData examRecordData) {
@@ -740,7 +740,7 @@ public class ExamScoreServiceImpl implements ExamScoreService {
             // 所有客观题的试题ID列表
             List<ExamQuestionEntity> examQuestions = examRecordQuestion.getExamQuestionEntities();
             Set<String> objectiveQuestionIds = examQuestions.stream()
-                    .filter(e -> isObjective(e.getQuestionType()))
+                    .filter(e -> QuestionType.isObjective(e.getQuestionType()))
                     .map(ExamQuestionEntity::getQuestionId)
                     .collect(Collectors.toSet());
 
@@ -757,7 +757,7 @@ public class ExamScoreServiceImpl implements ExamScoreService {
                         .collect(Collectors.toList());
 
                 for (ExamQuestionEntity e : questionUnits) {
-                    if (isObjective(e.getQuestionType())) {
+                    if (QuestionType.isObjective(e.getQuestionType())) {
                         totalObjective++;
                     }
                 }
@@ -784,7 +784,7 @@ public class ExamScoreServiceImpl implements ExamScoreService {
 
                 for (int i = 0; i < questionUnits.size(); i++) {
                     ExamQuestionEntity curQuestion = questionUnits.get(i);
-                    if (!isObjective(curQuestion.getQuestionType())) {
+                    if (!QuestionType.isObjective(curQuestion.getQuestionType())) {
                         // 跳过套题内主观题
                         continue;
                     }
@@ -844,17 +844,4 @@ public class ExamScoreServiceImpl implements ExamScoreService {
         }
     }
 
-    /**
-     * 是否为客观题
-     */
-    public static boolean isObjective(QuestionType type) {
-        if (type == null) {
-            return false;
-        }
-
-        return QuestionType.SINGLE_CHOICE == type
-                || QuestionType.MULTIPLE_CHOICE == type
-                || QuestionType.TRUE_OR_FALSE == type;
-    }
-
 }

+ 7 - 7
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamStudentServiceImpl.java

@@ -499,16 +499,16 @@ public class ExamStudentServiceImpl implements ExamStudentService {
             sql.append(" and exam_stage_id = " + query.getExamStageId());
         }
         if (StringUtils.isNotBlank(query.getStudentCode())) {
-            sql.append(" and student_code LIKE '%" + query.getStudentCode() + "%'");
+            sql.append(" and student_code LIKE '" + query.getStudentCode() + "%'");
         }
         if (StringUtils.isNotBlank(query.getStudentName())) {
-            sql.append(" and student_name LIKE '%" + query.getStudentName() + "%'");
+            sql.append(" and student_name LIKE '" + query.getStudentName() + "%'");
         }
         if (StringUtils.isNotBlank(query.getIdentityNumber())) {
             sql.append(" and identity_number LIKE '" + query.getIdentityNumber() + "%'");
         }
         if (StringUtils.isNotBlank(query.getInfoCollector())) {
-            sql.append(" and info_collector LIKE '%" + query.getInfoCollector() + "%'");
+            sql.append(" and info_collector LIKE '" + query.getInfoCollector() + "%'");
         }
         if (query.getCourseId() != null) {
             sql.append(" and course_id=" + query.getCourseId());
@@ -705,10 +705,10 @@ public class ExamStudentServiceImpl implements ExamStudentService {
         }
 
         if (StringUtils.isNotBlank(query.getStudentCode())) {
-            sql.append(" and t.student_code LIKE '%" + query.getStudentCode() + "%'");
+            sql.append(" and t.student_code LIKE '" + query.getStudentCode() + "%'");
         }
         if (StringUtils.isNotBlank(query.getStudentName())) {
-            sql.append(" and t.student_name LIKE '%" + query.getStudentName() + "%'");
+            sql.append(" and t.student_name LIKE '" + query.getStudentName() + "%'");
         }
         if (StringUtils.isNotBlank(query.getIdentityNumber())) {
             sql.append(" and t.identity_number LIKE '" + query.getIdentityNumber() + "%'");
@@ -784,10 +784,10 @@ public class ExamStudentServiceImpl implements ExamStudentService {
             sql.append(" and student.org_id = " + query.getOrgId());
         }
         if (StringUtils.isNotBlank(query.getStudentCode())) {
-            sql.append(" and student.student_code LIKE '%" + query.getStudentCode() + "%'");
+            sql.append(" and student.student_code LIKE '" + query.getStudentCode() + "%'");
         }
         if (StringUtils.isNotBlank(query.getStudentName())) {
-            sql.append(" and student.student_name LIKE '%" + query.getStudentName() + "%'");
+            sql.append(" and student.student_name LIKE '" + query.getStudentName() + "%'");
         }
         if (StringUtils.isNotBlank(query.getIdentityNumber())) {
             sql.append(" and student.identity_number LIKE '" + query.getIdentityNumber() + "%'");