wangliang 2 лет назад
Родитель
Сommit
16552ac7aa

+ 20 - 1
themis-business/src/main/java/com/qmth/themis/business/bean/exam/ExamPrepareBean.java

@@ -21,27 +21,37 @@ public class ExamPrepareBean extends TEExamActivityDto implements Serializable {
 //	private String structUrl;
     @ApiModelProperty("是否开启客观题乱序")
     private Boolean objectiveShuffle;
+
     @ApiModelProperty("是否开启选项乱序")
     private Boolean optionShuffle;
+
     @ApiModelProperty("是否有音频")
     private Boolean hasAudio;
+
     @ApiModelProperty("音频题播放次数")
     private Integer audioPlayCount;
+
     @ApiModelProperty("监控标识,默认使用recordId")
     private String monitorKey;
+
     @ApiModelProperty("加入房间用户ID")
     private String monitorUserId;
+
     @ApiModelProperty("用户认证签名")
     private String monitorUserSig;
+
     @ApiModelProperty("腾讯云SDK APP ID")
     private String monitorAppId;
 
+    @ApiModelProperty(value = "是否允许考生发起语音通话,0:否,1:是")
+    private Integer examStudentCallEnable = 1;
+
     public ExamPrepareBean() {
 
     }
 
     public ExamPrepareBean(Long recordId, Boolean objectiveShuffle, Boolean optionShuffle, Boolean hasAudio, Integer audioPlayCount,
-                           String monitorKey, String monitorUserId, String monitorUserSig, String monitorAppId) {
+                           String monitorKey, String monitorUserId, String monitorUserSig, String monitorAppId, Integer examStudentCallEnable) {
         this.recordId = recordId;
         this.objectiveShuffle = objectiveShuffle;
         this.optionShuffle = optionShuffle;
@@ -51,6 +61,15 @@ public class ExamPrepareBean extends TEExamActivityDto implements Serializable {
         this.monitorUserId = monitorUserId;
         this.monitorUserSig = monitorUserSig;
         this.monitorAppId = monitorAppId;
+        this.examStudentCallEnable = examStudentCallEnable;
+    }
+
+    public Integer getExamStudentCallEnable() {
+        return examStudentCallEnable;
+    }
+
+    public void setExamStudentCallEnable(Integer examStudentCallEnable) {
+        this.examStudentCallEnable = examStudentCallEnable;
     }
 
     public String getMonitorAppId() {

+ 13 - 1
themis-business/src/main/java/com/qmth/themis/business/bean/exam/ExamResumeBean.java

@@ -42,13 +42,25 @@ public class ExamResumeBean extends TEExamActivityDto implements Serializable {
 
 	@ApiModelProperty("加入房间用户ID")
 	private String monitorUserId;
+
 	@ApiModelProperty("用户认证签名")
 	private String monitorUserSig;
 
 	@ApiModelProperty("腾讯云SDK APP ID")
 	private String monitorAppId;
 
-	public String getMonitorAppId() {
+    @ApiModelProperty(value = "是否允许考生发起语音通话,0:否,1:是")
+    private Integer examStudentCallEnable = 1;
+
+    public Integer getExamStudentCallEnable() {
+        return examStudentCallEnable;
+    }
+
+    public void setExamStudentCallEnable(Integer examStudentCallEnable) {
+        this.examStudentCallEnable = examStudentCallEnable;
+    }
+
+    public String getMonitorAppId() {
 		return monitorAppId;
 	}
 

+ 3 - 2
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -273,7 +273,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                         (ep.getHasAudio() == null || ep.getHasAudio().intValue() == 0 ? false : true),
                         ep.getAudioPlayCount(), ExamRecordCacheUtil.getMonitorKey(recordId), monitorUserId,
                         tencentYunUtil.getSign(monitorUserId, SystemConstant.TENCENT_EXPIRE_TIME),
-                        tencentYunUtil.getAppId());
+                        tencentYunUtil.getAppId(), examCache.getExamStudentCallEnable());
                 ExamRecordStatusEnum statusEnum = ExamRecordCacheUtil.getStatus(recordId);
                 boolean cache = false;
                 if (Objects.nonNull(statusEnum) && !Objects.equals(statusEnum, ExamRecordStatusEnum.RESUME_PREPARE)) {
@@ -351,7 +351,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                 (ep.getHasAudio() == null || ep.getHasAudio().intValue() == 0 ? false : true), ep.getAudioPlayCount(),
                 ExamRecordCacheUtil.getMonitorKey(recordId), monitorUserId,
                 tencentYunUtil.getSign(monitorUserId, SystemConstant.TENCENT_EXPIRE_TIME),
-                tencentYunUtil.getAppId());
+                tencentYunUtil.getAppId(), examCache.getExamStudentCallEnable());
 
         SysConfig sysConfig = themisCacheService.addSysConfigCache(SystemConstant.MONITOR_CONFIG_PREFIX);
         Optional.ofNullable(sysConfig).orElseThrow(() -> new BusinessException("未配置监控前缀"));
@@ -955,6 +955,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         ret.setMonitorKey(ExamRecordCacheUtil.getMonitorKey(recordId));
         ret.setMonitorUserId("s_" + tbSession.getId());
         ret.setMonitorUserSig(tencentYunUtil.getSign(ret.getMonitorUserId(), SystemConstant.TENCENT_EXPIRE_TIME));
+        ret.setExamStudentCallEnable(ec.getExamStudentCallEnable());
 
         ExamActivityCacheBean ac = teExamActivityService.getExamActivityCacheBean(es.getExamActivityId());
         ExamCourseCacheBean examCourseCacheBean = teExamCourseService

+ 21 - 21
themis-business/src/main/java/com/qmth/themis/business/templete/service/impl/TempleteLogicServiceImpl.java

@@ -161,33 +161,33 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         if (Objects.nonNull(roomCodeAndNameSet) && roomCodeAndNameSet.size() > 0) {
             Map<String, TBExamInvigilateUser> tbExamInvigilateUserMap = (Map<String, TBExamInvigilateUser>) map.get("tbExamInvigilateUserMap");
             AtomicInteger count = new AtomicInteger(0);
+            Map<String, String> roomCodeAndNameMap = new HashMap<>(roomCodeAndNameSet.size());
             roomCodeAndNameSet.forEach(s -> {
                 if (Objects.isNull(tbExamInvigilateUserMap) || (Objects.nonNull(tbExamInvigilateUserMap) && Objects.isNull(tbExamInvigilateUserMap.get(s)))) {
                     String[] strs = s.split(":");
-                    QueryWrapper<TBExamInvigilateUser> tbExamInvigilateUserQueryWrapper = new QueryWrapper<>();
-                    tbExamInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getOrgId, orgId)
-                            .eq(TBExamInvigilateUser::getExamId, Long.parseLong(strs[0]))
-                            .eq(TBExamInvigilateUser::getRoomCode, strs[1]);
-                    TBExamInvigilateUser tbExamInvigilateUser = tbExamInvigilateUserService.getOne(tbExamInvigilateUserQueryWrapper);
-                    tbExamInvigilateUser = Objects.isNull(tbExamInvigilateUser) ? new TBExamInvigilateUser(Long.parseLong(strs[0]), orgId, strs[1], strs[2]) : tbExamInvigilateUser;
-                    tbExamInvigilateUser.setRoomName(strs[2]);
-                    tbExamInvigilateUserList.add(tbExamInvigilateUser);
-
-                    QueryWrapper<TBExamInvigilateUserTemp> tbExamInvigilateUserTempQueryWrapper = new QueryWrapper<>();
-                    tbExamInvigilateUserTempQueryWrapper.lambda().eq(TBExamInvigilateUserTemp::getOrgId, orgId)
-                            .eq(TBExamInvigilateUserTemp::getExamId, Long.parseLong(strs[0]))
-                            .eq(TBExamInvigilateUserTemp::getRoomCode, strs[1]);
-
-                    map.put("dataRemark", "编码:" + strs[1] + ",名称:" + strs[2]);
-                    TBExamInvigilateUserTemp tbExamInvigilateUserTemp = tbExamInvigilateUserTempService.getOne(tbExamInvigilateUserTempQueryWrapper);
-                    tbExamInvigilateUserTemp = Objects.isNull(tbExamInvigilateUserTemp) ? new TBExamInvigilateUserTemp(Long.parseLong(strs[0]), orgId, strs[1], strs[2]) : tbExamInvigilateUserTemp;
-                    tbExamInvigilateUserTemp.setRoomName(strs[2]);
-                    tbExamInvigilateUserTempService.saveOrUpdate(tbExamInvigilateUserTemp);
-                    count.getAndIncrement();
+                    if (!roomCodeAndNameMap.containsKey(strs[0] + ":" + strs[1])) {
+                        TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(Long.parseLong(strs[0]), orgId, strs[1], strs[2]);
+                        tbExamInvigilateUserList.add(tbExamInvigilateUser);
+
+                        QueryWrapper<TBExamInvigilateUserTemp> tbExamInvigilateUserTempQueryWrapper = new QueryWrapper<>();
+                        tbExamInvigilateUserTempQueryWrapper.lambda().eq(TBExamInvigilateUserTemp::getExamId, Long.parseLong(strs[0]))
+                                .eq(TBExamInvigilateUserTemp::getOrgId, orgId)
+                                .eq(TBExamInvigilateUserTemp::getRoomCode, strs[1])
+                                .eq(TBExamInvigilateUserTemp::getRoomName, strs[2]);
+
+                        map.put("dataRemark", "编码:" + strs[1] + ",名称:" + strs[2]);
+                        TBExamInvigilateUserTemp tbExamInvigilateUserTemp = tbExamInvigilateUserTempService.getOne(tbExamInvigilateUserTempQueryWrapper);
+                        tbExamInvigilateUserTemp = Objects.isNull(tbExamInvigilateUserTemp) ? new TBExamInvigilateUserTemp(Long.parseLong(strs[0]), orgId, strs[1], strs[2]) : tbExamInvigilateUserTemp;
+                        tbExamInvigilateUserTempService.saveOrUpdate(tbExamInvigilateUserTemp);
+                        count.getAndIncrement();
+                        roomCodeAndNameMap.put(strs[0] + ":" + strs[1], strs[2]);
+                    } else {
+                        throw new BusinessException("考场代码'" + strs[1] + "'下考场名称不一致" + "[" + roomCodeAndNameMap.get(strs[0] + ":" + strs[1]) + "," + strs[2] + "]");
+                    }
                 }
             });
             if (!CollectionUtils.isEmpty(tbExamInvigilateUserList)) {
-                tbExamInvigilateUserService.saveOrUpdateBatch(tbExamInvigilateUserList);
+                tbExamInvigilateUserService.saveBatch(tbExamInvigilateUserList);
             }
             if (count.get() > 0) {
                 txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->创建了" + count + "条考场数据");