Răsfoiți Sursa

音频播放次数改名

xiatian 4 ani în urmă
părinte
comite
186089394a
16 a modificat fișierele cu 243 adăugiri și 45 ștergeri
  1. 2 2
      themis-backend/src/main/java/com/qmth/themis/backend/api/TBUserController.java
  2. 2 2
      themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamPaperController.java
  3. 5 5
      themis-business/src/main/java/com/qmth/themis/business/bean/exam/ExamPrepareBean.java
  4. 113 0
      themis-business/src/main/java/com/qmth/themis/business/bean/exam/ExamResumeBean.java
  5. 5 5
      themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamCourseCacheBean.java
  6. 6 6
      themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamPaperCacheBean.java
  7. 32 4
      themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamStudentAnswerCacheBean.java
  8. 6 6
      themis-business/src/main/java/com/qmth/themis/business/entity/TEExamCourse.java
  9. 6 6
      themis-business/src/main/java/com/qmth/themis/business/entity/TEExamPaper.java
  10. 8 0
      themis-business/src/main/java/com/qmth/themis/business/service/TEExamService.java
  11. 1 1
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamCourseServiceImpl.java
  12. 1 1
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamPaperServiceImpl.java
  13. 33 1
      themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java
  14. 4 4
      themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamPaperImportTemplete.java
  15. 2 2
      themis-business/src/main/resources/db/init.sql
  16. 17 0
      themis-exam/src/main/java/com/qmth/themis/exam/api/TEExamController.java

+ 2 - 2
themis-backend/src/main/java/com/qmth/themis/backend/api/TBUserController.java

@@ -361,7 +361,7 @@ public class TBUserController {
 //        teExamCourse.setOptionShuffle(1);
 //        teExamCourse.setPaperCount(1);
 //        teExamCourse.setHasAnswer(1);
-//        teExamCourse.setAudioPlayTime(1);
+//        teExamCourse.setAudioPlayCount(1);
 //        teExamCourseService.save(teExamCourse);
 //
 //        //考试试卷
@@ -379,7 +379,7 @@ public class TBUserController {
 //        teExamPaper.setAnswerPath("123");
 //        teExamPaper.setHasAudio(1);
 //        teExamPaper.setWeight(1D);
-//        teExamPaper.setAudioPlayTime(1);
+//        teExamPaper.setAudioPlayCount(1);
 //        teExamPaperService.save(teExamPaper);
 //
 //        //考生

+ 2 - 2
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamPaperController.java

@@ -127,7 +127,7 @@ public class TEExamPaperController {
             , @ApiParam(value = "批次ID", required = true) @RequestParam Long examId
             , @ApiParam(value = "客观题乱序", required = false) @RequestParam Boolean objectiveShuffle
             , @ApiParam(value = "选项乱序", required = false) @RequestParam Boolean optionShuffle
-            , @ApiParam(value = "音频播放次数", required = false) @RequestParam Integer audioPlayTime) {
+            , @ApiParam(value = "音频播放次数", required = false) @RequestParam Integer audioPlayCount) {
         if (file == null) {
             throw new BusinessException(ExceptionResultEnum.ATTACHMENT_IS_NULL);
         }
@@ -159,7 +159,7 @@ public class TEExamPaperController {
             }
             transMap.put("objectiveShuffle", objectiveShuffle);
             transMap.put("optionShuffle", optionShuffle);
-            transMap.put("audioPlayTime", audioPlayTime);
+            transMap.put("audioPlayCount", audioPlayCount);
             //mq发送消息start
             MqDto mqDto = new MqDto(dictionaryConfig.mqConfigDomain().getTaskTopic(), dictionaryConfig.mqConfigDomain().getTaskTopicExamPaperImportTag(), transMap, MqEnum.TASK_LOG, String.valueOf(tbTaskHistory.getId()), tbUser.getName());
             mqDtoService.assembleSendOneWayMsg(mqDto);

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

@@ -18,7 +18,7 @@ public class ExamPrepareBean {
 	@ApiModelProperty("是否有音频")
 	private Boolean hasAudio;
 	@ApiModelProperty("音频题播放次数")
-	private Integer audioPlayTime;
+	private Integer audioPlayCount;
 
 	public Long getRecordId() {
 		return recordId;
@@ -68,12 +68,12 @@ public class ExamPrepareBean {
 		this.hasAudio = hasAudio;
 	}
 
-	public Integer getAudioPlayTime() {
-		return audioPlayTime;
+	public Integer getAudioPlayCount() {
+		return audioPlayCount;
 	}
 
-	public void setAudioPlayTime(Integer audioPlayTime) {
-		this.audioPlayTime = audioPlayTime;
+	public void setAudioPlayCount(Integer audioPlayCount) {
+		this.audioPlayCount = audioPlayCount;
 	}
 
 }

+ 113 - 0
themis-business/src/main/java/com/qmth/themis/business/bean/exam/ExamResumeBean.java

@@ -0,0 +1,113 @@
+package com.qmth.themis.business.bean.exam;
+
+import java.util.List;
+import java.util.Map;
+
+import com.qmth.themis.business.cache.bean.ExamStudentAnswerCacheBean;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("断点恢复返回信息")
+public class ExamResumeBean {
+
+	@ApiModelProperty("考试时长(秒)")
+	private Integer durationSeconds;
+
+	@ApiModelProperty("试卷数据包下载地址")
+	private String paperUrl;
+
+	@ApiModelProperty("试卷结构下载地址")
+	private String structUrl;
+
+	@ApiModelProperty("是否包含音频")
+	private Boolean hasAudio;
+	
+	@ApiModelProperty("音频播放次数")
+	private Integer audioPlayCount;
+	
+	@ApiModelProperty("监控标识")
+	private String monitorKey;
+
+	@ApiModelProperty("个人试卷结构")
+	private String studentPaperStruct;
+
+	@ApiModelProperty("已上传作答")
+	private List<ExamStudentAnswerCacheBean> answerList;
+
+	@ApiModelProperty("")
+	private Map<String, Integer> audioLeftPlayCount;
+
+	public Integer getDurationSeconds() {
+		return durationSeconds;
+	}
+
+	public void setDurationSeconds(Integer durationSeconds) {
+		this.durationSeconds = durationSeconds;
+	}
+
+	public String getPaperUrl() {
+		return paperUrl;
+	}
+
+	public void setPaperUrl(String paperUrl) {
+		this.paperUrl = paperUrl;
+	}
+
+	public String getStructUrl() {
+		return structUrl;
+	}
+
+	public void setStructUrl(String structUrl) {
+		this.structUrl = structUrl;
+	}
+
+	public Boolean getHasAudio() {
+		return hasAudio;
+	}
+
+	public void setHasAudio(Boolean hasAudio) {
+		this.hasAudio = hasAudio;
+	}
+
+	public String getMonitorKey() {
+		return monitorKey;
+	}
+
+	public void setMonitorKey(String monitorKey) {
+		this.monitorKey = monitorKey;
+	}
+
+	public String getStudentPaperStruct() {
+		return studentPaperStruct;
+	}
+
+	public void setStudentPaperStruct(String studentPaperStruct) {
+		this.studentPaperStruct = studentPaperStruct;
+	}
+
+	public List<ExamStudentAnswerCacheBean> getAnswerList() {
+		return answerList;
+	}
+
+	public void setAnswerList(List<ExamStudentAnswerCacheBean> answerList) {
+		this.answerList = answerList;
+	}
+
+	public Map<String, Integer> getAudioLeftPlayCount() {
+		return audioLeftPlayCount;
+	}
+
+	public void setAudioLeftPlayCount(Map<String, Integer> audioLeftPlayCount) {
+		this.audioLeftPlayCount = audioLeftPlayCount;
+	}
+
+	public Integer getAudioPlayCount() {
+		return audioPlayCount;
+	}
+
+	public void setAudioPlayCount(Integer audioPlayCount) {
+		this.audioPlayCount = audioPlayCount;
+	}
+
+}

+ 5 - 5
themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamCourseCacheBean.java

@@ -35,7 +35,7 @@ public class ExamCourseCacheBean implements Serializable {
 	private Integer hasAnswer;
 
 	// 音频播放次数
-	private Integer audioPlayTime;
+	private Integer audioPlayCount;
 
 	// 试卷id
 	private List<Long> paperIds;
@@ -107,12 +107,12 @@ public class ExamCourseCacheBean implements Serializable {
 		this.hasAnswer = hasAnswer;
 	}
 
-	public Integer getAudioPlayTime() {
-		return audioPlayTime;
+	public Integer getAudioPlayCount() {
+		return audioPlayCount;
 	}
 
-	public void setAudioPlayTime(Integer audioPlayTime) {
-		this.audioPlayTime = audioPlayTime;
+	public void setAudioPlayCount(Integer audioPlayCount) {
+		this.audioPlayCount = audioPlayCount;
 	}
 
 	public List<Long> getPaperIds() {

+ 6 - 6
themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamPaperCacheBean.java

@@ -50,7 +50,7 @@ public class ExamPaperCacheBean implements Serializable {
 	private Double weight;
 
 	// 音频播放次数
-	private Integer audioPlayTime;
+	private Integer audioPlayCount;
 
 	public Long getId() {
 		return id;
@@ -172,14 +172,14 @@ public class ExamPaperCacheBean implements Serializable {
 		this.weight = weight;
 	}
 
-	public Integer getAudioPlayTime() {
-		return audioPlayTime;
+	public Integer getAudioPlayCount() {
+		return audioPlayCount;
 	}
 
-	public void setAudioPlayTime(Integer audioPlayTime) {
-		this.audioPlayTime = audioPlayTime;
+	public void setAudioPlayCount(Integer audioPlayCount) {
+		this.audioPlayCount = audioPlayCount;
 	}
-	
+
 	
 
 }

+ 32 - 4
themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamStudentAnswerCacheBean.java

@@ -4,20 +4,25 @@ import java.io.Serializable;
 
 public class ExamStudentAnswerCacheBean implements Serializable {
 
-
-
 	/**
 	 * 
 	 */
 	private static final long serialVersionUID = -7505986290431178431L;
 
+	// 大题号
+	private Integer mainNumber;
+	// 小题号
+	private Integer subNumber;
+	// 套题子题号
+	private Integer subIndex;
+
 	// 作答内容
 	private String content;
 
 	// 版本时间戳
 	private Long version;
-	
-	//作答时长 秒
+
+	// 作答时长 秒
 	private Integer duration;
 
 	public String getContent() {
@@ -44,6 +49,29 @@ public class ExamStudentAnswerCacheBean implements Serializable {
 		this.duration = duration;
 	}
 
+	public Integer getMainNumber() {
+		return mainNumber;
+	}
+
+	public void setMainNumber(Integer mainNumber) {
+		this.mainNumber = mainNumber;
+	}
+
+	public Integer getSubNumber() {
+		return subNumber;
+	}
+
+	public void setSubNumber(Integer subNumber) {
+		this.subNumber = subNumber;
+	}
+
+	public Integer getSubIndex() {
+		return subIndex;
+	}
 
+	public void setSubIndex(Integer subIndex) {
+		this.subIndex = subIndex;
+	}
 
+	
 }

+ 6 - 6
themis-business/src/main/java/com/qmth/themis/business/entity/TEExamCourse.java

@@ -51,8 +51,8 @@ public class TEExamCourse implements Serializable {
     private Integer hasAnswer;
 
     @ApiModelProperty(value = "音频播放次数")
-    @TableField(value = "audio_play_time")
-    private Integer audioPlayTime;
+    @TableField(value = "audio_play_count")
+    private Integer audioPlayCount;
 
     public static long getSerialVersionUID() {
         return serialVersionUID;
@@ -122,11 +122,11 @@ public class TEExamCourse implements Serializable {
         this.hasAnswer = hasAnswer;
     }
 
-    public Integer getAudioPlayTime() {
-        return audioPlayTime;
+    public Integer getAudioPlayCount() {
+        return audioPlayCount;
     }
 
-    public void setAudioPlayTime(Integer audioPlayTime) {
-        this.audioPlayTime = audioPlayTime;
+    public void setAudioPlayCount(Integer audioPlayCount) {
+        this.audioPlayCount = audioPlayCount;
     }
 }

+ 6 - 6
themis-business/src/main/java/com/qmth/themis/business/entity/TEExamPaper.java

@@ -64,8 +64,8 @@ public class TEExamPaper extends BaseEntity {
     private Double weight;
 
     @ApiModelProperty(value = "音频播放次数")
-    @TableField(value = "audio_play_time")
-    private Integer audioPlayTime;
+    @TableField(value = "audio_play_count")
+    private Integer audioPlayCount;
 
     @ApiModelProperty(value = "结构文件路径")
     @TableField(value = "struct_path")
@@ -187,11 +187,11 @@ public class TEExamPaper extends BaseEntity {
         this.weight = weight;
     }
 
-    public Integer getAudioPlayTime() {
-        return audioPlayTime;
+    public Integer getAudioPlayCount() {
+        return audioPlayCount;
     }
 
-    public void setAudioPlayTime(Integer audioPlayTime) {
-        this.audioPlayTime = audioPlayTime;
+    public void setAudioPlayCount(Integer audioPlayCount) {
+        this.audioPlayCount = audioPlayCount;
     }
 }

+ 8 - 0
themis-business/src/main/java/com/qmth/themis/business/service/TEExamService.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.themis.business.bean.exam.ExamFileUploadBean;
 import com.qmth.themis.business.bean.exam.ExamPrepareBean;
+import com.qmth.themis.business.bean.exam.ExamResumeBean;
 import com.qmth.themis.business.bean.exam.ExamStartBean;
 import com.qmth.themis.business.entity.TEExam;
 
@@ -108,4 +109,11 @@ public interface TEExamService extends IService<TEExam> {
 	 * @return
 	 */
 	public ExamFileUploadBean fileUpload(Long studentId, Long recordId, MultipartFile file, String suffix, String md5);
+
+	/**断点恢复
+	 * @param id
+	 * @param recordId
+	 * @return
+	 */
+	public ExamResumeBean resume(Long studentId, Long recordId);
 }

+ 1 - 1
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamCourseServiceImpl.java

@@ -81,7 +81,7 @@ public class TEExamCourseServiceImpl extends ServiceImpl<TEExamCourseMapper, TEE
 		ret.setOptionShuffle(ec.getOptionShuffle());
 		ret.setPaperCount(ec.getPaperCount());
 		ret.setHasAnswer(ec.getHasAnswer());
-		ret.setAudioPlayTime(ec.getAudioPlayTime());
+		ret.setAudioPlayCount(ec.getAudioPlayCount());
 		List<TEExamPaper> papers = teExamPaperMapper.findListByExamIdAndCourseCode(examId, courseCode);
 		if (papers != null && papers.size() > 0) {
 			List<Long> paperIds=new ArrayList<Long>();

+ 1 - 1
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamPaperServiceImpl.java

@@ -64,7 +64,7 @@ public class TEExamPaperServiceImpl extends ServiceImpl<TEExamPaperMapper, TEExa
 		ret.setNeedVoiceAnswer(ep.getNeedVoiceAnswer());
 		ret.setHasAudio(ep.getHasAudio());
 		ret.setWeight(ep.getWeight());
-		ret.setAudioPlayTime(ep.getAudioPlayTime());
+		ret.setAudioPlayCount(ep.getAudioPlayCount());
 		return ret;
 	}
 }

+ 33 - 1
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.themis.business.bean.exam.ExamFileUploadBean;
 import com.qmth.themis.business.bean.exam.ExamPrepareBean;
+import com.qmth.themis.business.bean.exam.ExamResumeBean;
 import com.qmth.themis.business.bean.exam.ExamStartBean;
 import com.qmth.themis.business.cache.RedisKeyHelper;
 import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
@@ -196,7 +197,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
 
 		ExamPrepareBean prepare = new ExamPrepareBean();
 		prepare.setRecordId(recordId);
-		prepare.setAudioPlayTime(ep.getAudioPlayTime());
+		prepare.setAudioPlayCount(ep.getAudioPlayCount());
 		prepare.setHasAudio((ep.getHasAudio() == null || ep.getHasAudio().intValue() == 0 ? false : true));
 		prepare.setObjectiveShuffle(
 				(ec.getObjectiveShuffle() == null || ec.getObjectiveShuffle().intValue() == 0 ? false : true));
@@ -323,6 +324,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
 				RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex));
 		if (answerCache == null) {
 			answerCache = new ExamStudentAnswerCacheBean();
+			answerCache.setMainNumber(mainNumber);
+			answerCache.setSubNumber(subNumber);
+			answerCache.setSubIndex(subIndex);
 			answerCache.setContent(answer);
 			answerCache.setVersion(version);
 			answerCache.setDuration(durationSeconds);
@@ -405,4 +409,32 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
 		return UUID.randomUUID().toString().replaceAll("-", "");
 	}
 
+	@Override
+	public ExamResumeBean resume(Long studentId, Long recordId) {
+		ExamRecordCacheBean er = (ExamRecordCacheBean) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId));
+		if (er == null) {
+			throw new BusinessException("未找到考试记录");
+		}
+		ExamStudentCacheBean es = (ExamStudentCacheBean) redisUtil
+				.get(RedisKeyHelper.examStudentCacheKey(er.getExamStudentId()));
+		if (es == null) {
+			throw new BusinessException("未找到考生");
+		}
+		if (studentId.equals(es.getStudentId())) {
+			throw new BusinessException("考试记录的学生Id和当前登录用户不一致");
+		}
+		ExamPaperCacheBean ep = teExamPaperService.getExamPaperCacheBean(er.getPaperId());
+		if (ep == null) {
+			throw new BusinessException("未找到试卷");
+		}
+		
+		ExamResumeBean ret=new ExamResumeBean();
+		ret.setDurationSeconds(er.getDurationSeconds());
+		ret.setPaperUrl(OssUtil.getUrlForPrivateBucket(systemConfig.getOssEnv(3), ep.getPaperPath()));
+		ret.setStructUrl(OssUtil.getUrlForPrivateBucket(systemConfig.getOssEnv(3), ep.getStructPath()));
+		ret.setHasAudio((ep.getHasAudio()!=null&&ep.getHasAudio().intValue()==1?true:false));
+		ret.setAudioPlayCount(ep.getAudioPlayCount());
+		return ret;
+	}
+
 }

+ 4 - 4
themis-business/src/main/java/com/qmth/themis/business/templete/impl/TaskExamPaperImportTemplete.java

@@ -116,17 +116,17 @@ public class TaskExamPaperImportTemplete implements TaskImportTemplete {
         }
         Boolean objectiveShuffle = (Boolean) map.get("objectiveShuffle");
         Boolean optionShuffle = (Boolean) map.get("optionShuffle");
-        Integer audioPlayTime = (Integer) map.get("audioPlayTime");
+        Integer audioPlayCount = (Integer) map.get("audioPlayCount");
         if (objectiveShuffle != null) {
             course.setObjectiveShuffle(objectiveShuffle ? 1 : 0);
         }
         if (optionShuffle != null) {
             course.setOptionShuffle(optionShuffle ? 1 : 0);
         }
-        if (audioPlayTime != null) {
-            course.setAudioPlayTime(audioPlayTime);
+        if (audioPlayCount != null) {
+            course.setAudioPlayCount(audioPlayCount);
         }
-        if (objectiveShuffle != null || optionShuffle != null || audioPlayTime != null) {
+        if (objectiveShuffle != null || optionShuffle != null || audioPlayCount != null) {
             teExamCourseService.saveOrUpdate(course);
         }
     }

+ 2 - 2
themis-business/src/main/resources/db/init.sql

@@ -658,7 +658,7 @@ CREATE TABLE `t_e_exam_course` (
   `option_shuffle` tinyint DEFAULT NULL COMMENT '是否选项乱序,针对一个科目进行设置,0:不开启,1:开启',
   `paper_count` int DEFAULT NULL COMMENT '已绑定试卷数量',
   `has_answer` tinyint DEFAULT NULL COMMENT '是否已补齐标答,0:否,1:是',
-  `audio_play_time` int DEFAULT NULL COMMENT '音频播放次数',
+  `audio_play_count` int DEFAULT NULL COMMENT '音频播放次数',
   PRIMARY KEY (`id`),
   UNIQUE KEY `t_e_exam_course_examId_courseCode_Idx` (`exam_id`,`course_code`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考试科目';
@@ -692,7 +692,7 @@ CREATE TABLE `t_e_exam_paper` (
   `answer_path` varchar(100) DEFAULT NULL COMMENT '标答路径',
   `has_audio` tinyint DEFAULT NULL COMMENT '题干包含音频,0:不包含,1:包含',
   `weight` double DEFAULT NULL COMMENT '调卷比例',
-  `audio_play_time` int DEFAULT NULL COMMENT '音频播放次数',
+  `audio_play_count` int DEFAULT NULL COMMENT '音频播放次数',
   `create_id` bigint DEFAULT NULL COMMENT '创建人id',
   `update_id` bigint DEFAULT NULL COMMENT '更新人id',
   `course_code` varchar(30) DEFAULT NULL COMMENT '科目编码',

+ 17 - 0
themis-exam/src/main/java/com/qmth/themis/exam/api/TEExamController.java

@@ -15,6 +15,7 @@ import org.springframework.web.multipart.MultipartFile;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.themis.business.bean.exam.ExamFileUploadBean;
 import com.qmth.themis.business.bean.exam.ExamPrepareBean;
+import com.qmth.themis.business.bean.exam.ExamResumeBean;
 import com.qmth.themis.business.bean.exam.ExamStartBean;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.entity.TEExam;
@@ -177,4 +178,20 @@ public class TEExamController {
 		}
 	}
 	
+	@ApiOperation(value = "断点恢复")
+	@RequestMapping(value = "/resume", method = RequestMethod.POST)
+	@ApiResponses({ @ApiResponse(code = 200, message = "试卷信息") })
+	public ExamResumeBean resume(@ApiParam(value = "考试记录ID", required = true) @RequestParam Long recordId) {
+		TEStudent teStudent = (TEStudent) ServletUtil.getRequestStudentAccount();
+		String lockKey = SystemConstant.REDIS_LOCK_STUDENT_PREFIX + teStudent.getId();
+		Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
+		if (!lock) {
+			throw new BusinessException(ExceptionResultEnum.REQUEST_AWAIT);
+		}
+		try {
+			return teExamService.resume(teStudent.getId(), recordId);
+		} finally {
+			redisUtil.releaseLock(lockKey);
+		}
+	}
 }