wangliang 5 년 전
부모
커밋
52aafa6d91

+ 29 - 4
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamController.java

@@ -2,13 +2,18 @@ package com.qmth.themis.backend.api;
 
 import com.qmth.themis.backend.util.ServletUtil;
 import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.entity.TBOrg;
 import com.qmth.themis.business.entity.TBUser;
 import com.qmth.themis.business.entity.TEExam;
+import com.qmth.themis.business.enums.FieldUniqueEnum;
 import com.qmth.themis.business.service.TEExamService;
 import com.qmth.themis.business.util.JacksonUtil;
+import com.qmth.themis.common.contanst.Constants;
+import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
 import io.swagger.annotations.*;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -38,11 +43,31 @@ public class TEExamController {
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
     public Result save(@ApiParam(value = "考试批次信息", required = true) @RequestBody TEExam teExam, HttpServletRequest request) throws NoSuchAlgorithmException {
-        TBUser tbUser = (TBUser) ServletUtil.getRequestAccount(request);
-        if (Objects.nonNull(teExam.getId())) {
-            teExam.setUpdateId(tbUser.getId());
+        try {
+            TBUser tbUser = (TBUser) ServletUtil.getRequestAccount(request);
+            TBOrg tbOrg = (TBOrg) ServletUtil.getRequestOrg(request);
+            if (Objects.nonNull(tbOrg)) {
+                teExam.setOrgId(tbOrg.getId());
+            }
+            if (Objects.nonNull(teExam.getId())) {
+                teExam.setUpdateId(tbUser.getId());
+            } else {
+                teExam.setId(Constants.idGen.next());
+                teExam.setCreateId(tbUser.getId());
+            }
+            teExamService.saveOrUpdate(teExam);
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (e instanceof DuplicateKeyException) {
+                String errorColumn = e.getCause().toString();
+                String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
+                throw new BusinessException("机构id[" + teExam.getOrgId() + "]下的" + FieldUniqueEnum.convertToCode(columnStr) + "数据不允许重复插入");
+            } else if (e instanceof BusinessException) {
+                throw new BusinessException(e.getMessage());
+            } else {
+                throw new RuntimeException(e);
+            }
         }
-        teExamService.saveOrUpdate(teExam);
         return ResultUtil.ok(JacksonUtil.parseJson(SystemConstant.SUCCESS));
     }
 }

+ 1 - 0
themis-backend/src/main/java/com/qmth/themis/backend/interceptor/AuthInterceptor.java

@@ -110,6 +110,7 @@ public class AuthInterceptor implements HandlerInterceptor {
                     if (Objects.isNull(authDto)) {
                         authDto = ehcacheService.addAccountCache(userId);
                     }
+                    request.setAttribute(SystemConstant.ORG, authDto.getTbOrg());
                     //系统管理员拥有所有权限
                     if (authDto.getRoleCodes().contains(RoleEnum.SUPER_ADMIN.name())) {
                         return true;

+ 11 - 1
themis-backend/src/main/java/com/qmth/themis/backend/util/ServletUtil.java

@@ -125,7 +125,7 @@ public class ServletUtil {
     }
 
     /**
-     * 获取请求的Account
+     * 获取请求的account
      *
      * @param httpRequest
      * @return
@@ -133,4 +133,14 @@ public class ServletUtil {
     public static Object getRequestAccount(HttpServletRequest httpRequest) {
         return httpRequest.getAttribute(SystemConstant.ACCOUNT);
     }
+
+    /**
+     * 获取请求的org
+     *
+     * @param httpRequest
+     * @return
+     */
+    public static Object getRequestOrg(HttpServletRequest httpRequest) {
+        return httpRequest.getAttribute(SystemConstant.ORG);
+    }
 }

+ 28 - 4
themis-business/src/main/java/com/qmth/themis/business/entity/common/Exam.java

@@ -50,11 +50,11 @@ public class Exam extends BaseEntity {
     @TableField(value = "short_code")
     private String shortCode;
 
-    @ApiModelProperty(value = "提前多长时间开始候考()")
+    @ApiModelProperty(value = "提前多长时间开始候考(分钟)")
     @TableField(value = "prepare_seconds")
     private Integer prepareSeconds;
 
-    @ApiModelProperty(value = "最短考试时长,相当于考试冻结时间()")
+    @ApiModelProperty(value = "最短考试时长,相当于考试冻结时间(分钟)")
     @TableField(value = "min_duration_seconds")
     private Integer minDurationSeconds;
 
@@ -126,11 +126,11 @@ public class Exam extends BaseEntity {
     @TableField(value = "archived")
     private Integer archived;
 
-    @ApiModelProperty(value = "允许开考开放时长(),相当于迟到时间")
+    @ApiModelProperty(value = "允许开考开放时长(分钟),相当于迟到时间")
     @TableField(value = "opening_seconds")
     private Integer openingSeconds;
 
-    @ApiModelProperty(value = "最大考试时长")
+    @ApiModelProperty(value = "最大考试时长(分钟)")
     @TableField(value = "max_duration_seconds")
     private Integer maxDurationSeconds;
 
@@ -182,6 +182,30 @@ public class Exam extends BaseEntity {
     @TableField(value = "score_status")
     private Integer scoreStatus;
 
+    @ApiModelProperty(value = "是否启用开考口令,0:不启用,1:启用")
+    @TableField(value = "enable_short_code")
+    private Integer enableShortCode;
+
+    @ApiModelProperty(value = "是否允许断点续考,0:不允许,1:允许")
+    @TableField(value = "enable_break")
+    private Integer enableBreak;
+
+    public Integer getEnableBreak() {
+        return enableBreak;
+    }
+
+    public void setEnableBreak(Integer enableBreak) {
+        this.enableBreak = enableBreak;
+    }
+
+    public Integer getEnableShortCode() {
+        return enableShortCode;
+    }
+
+    public void setEnableShortCode(Integer enableShortCode) {
+        this.enableShortCode = enableShortCode;
+    }
+
     public Integer getMode() {
         return mode;
     }

+ 56 - 0
themis-business/src/main/java/com/qmth/themis/business/enums/FieldUniqueEnum.java

@@ -0,0 +1,56 @@
+package com.qmth.themis.business.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 唯一约束字段转换
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/7/13
+ */
+public enum FieldUniqueEnum {
+
+    /**
+     * 考试批次编码
+     */
+    t_e_exam_orgId_code_Idx("批次编码");
+
+    private String code;
+
+    private FieldUniqueEnum(String code) {
+        this.code = code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToName(String value) {
+        if (Objects.equals(value.trim(), t_e_exam_orgId_code_Idx.code)) {
+            return t_e_exam_orgId_code_Idx.name();
+        } else {
+            return t_e_exam_orgId_code_Idx.name();
+        }
+    }
+
+    /**
+     * 状态转换 toCode
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToCode(String value) {
+        if (Objects.equals(value.trim(), t_e_exam_orgId_code_Idx.name())) {
+            return t_e_exam_orgId_code_Idx.code;
+        } else {
+            return t_e_exam_orgId_code_Idx.code;
+        }
+    }
+}

+ 1 - 1
themis-business/src/main/resources/mapper/TEExamActivityMapper.xml

@@ -32,7 +32,7 @@
           `create_id` bigint DEFAULT NULL COMMENT '创建人id',
           `update_id` bigint DEFAULT NULL COMMENT '更新人id',
           PRIMARY KEY (`id`),
-          UNIQUE KEY `${tableName}_code_Idx` (`code`)
+          UNIQUE KEY `${tableName}_orgId_code_Idx` (`org_id`,`code`)
         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考试场次'
     </update>