Răsfoiți Sursa

新增移动端考试语音查询

wangliang 2 ani în urmă
părinte
comite
473ba09f27

+ 1 - 1
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamActivityController.java

@@ -190,7 +190,7 @@ public class TEExamActivityController {
         teAudio.setEnable(enable);
         teAudio.updateInfo(tbUser.getId());
         teAudioService.updateById(teAudio);
-        cacheService.updateExamAudioCache(teAudio.getId());
+//        cacheService.updateExamAudioCache(teAudio.getId());
         return ResultUtil.ok(true);
     }
 

+ 65 - 0
themis-business/src/main/java/com/qmth/themis/business/bean/result/TEAudioResult.java

@@ -0,0 +1,65 @@
+package com.qmth.themis.business.bean.result;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.themis.business.entity.TEAudio;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 场次音频result
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/9/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class TEAudioResult extends TEAudio implements Serializable {
+
+    @ApiModelProperty(value = "执行时间")
+    private Long execTime;
+
+    @ApiModelProperty(value = "考试开始时间")
+    private Long startTime;
+
+    @ApiModelProperty(value = "考试结束时间")
+    private Long finishTime;
+
+    @ApiModelProperty(value = "附件md5")
+    private String attachmentMd5;
+
+    public String getAttachmentMd5() {
+        return attachmentMd5;
+    }
+
+    public void setAttachmentMd5(String attachmentMd5) {
+        this.attachmentMd5 = attachmentMd5;
+    }
+
+    public Long getExecTime() {
+        return execTime;
+    }
+
+    public void setExecTime(Long execTime) {
+        this.execTime = execTime;
+    }
+
+    public Long getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Long startTime) {
+        this.startTime = startTime;
+    }
+
+    public Long getFinishTime() {
+        return finishTime;
+    }
+
+    public void setFinishTime(Long finishTime) {
+        this.finishTime = finishTime;
+    }
+}

+ 4 - 4
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -96,17 +96,17 @@ public class SystemConstant {
     public static final String FORM_USER_ID = "formUserId";
     public static final String OPER = "oper";
     public static final String EXAM = "exam";
-    public static final String EXEC_TIME = "execTime";
-    public static final String REAL_EXEC_TIME = "realExecTime";
+//    public static final String EXEC_TIME = "execTime";
+//    public static final String REAL_EXEC_TIME = "realExecTime";
     public static final String INSERT = "insert";
     public static final String DELETE = "delete";
-    public static final Long EXAM_AUDIO_BEFORE_TIME = 3000L;
+//    public static final Long EXAM_AUDIO_BEFORE_TIME = 3000L;
     public static final Long BEFORE_AUDIO_ATTACHMENT_Id = 1L;
     public static final Long AFTER_AUDIO_ATTACHMENT_Id = 2L;
     public static final Integer BEFORE_AUDIO_SECOND = 300;
     public static final Integer AFTER_AUDIO_SECOND = 600;
     public static final String AUTH_INFO_CACHE = "auth:info:cache";
-    public static final String EXAM_AUDIO_CACHE = "exam:audio:cache";
+//    public static final String EXAM_AUDIO_CACHE = "exam:audio:cache";
     public static final String ATTACHMENT_CACHE = "attachment:cache";
     public volatile static Searcher SEARCHER = null;
     public static final String SYS_CONFIG_KEY_CHARSETS = "sys.txt.charset";

+ 12 - 1
themis-business/src/main/java/com/qmth/themis/business/dao/TEAudioMapper.java

@@ -2,8 +2,11 @@ package com.qmth.themis.business.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.themis.business.bean.result.TEAudioResult;
 import com.qmth.themis.business.entity.TEAudio;
+import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -23,5 +26,13 @@ public interface TEAudioMapper extends BaseMapper<TEAudio> {
      * @param activityId
      * @return
      */
-    IPage<TEAudio> query(IPage<Map> iPage, Long activityId);
+    IPage<TEAudio> query(IPage<Map> iPage, @Param("activityId") Long activityId);
+
+    /**
+     * 根据场次id查询音频信息
+     *
+     * @param activityId
+     * @return
+     */
+    List<TEAudioResult> queryResult(@Param("activityId") Long activityId);
 }

+ 0 - 12
themis-business/src/main/java/com/qmth/themis/business/entity/TEAudio.java

@@ -70,10 +70,6 @@ public class TEAudio extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private String attachmentName;
 
-    @ApiModelProperty(value = "附件md5")
-    @TableField(exist = false)
-    private String attachmentMd5;
-
     public TEAudio() {
 
     }
@@ -100,14 +96,6 @@ public class TEAudio extends BaseEntity implements Serializable {
         }
     }
 
-    public String getAttachmentMd5() {
-        return attachmentMd5;
-    }
-
-    public void setAttachmentMd5(String attachmentMd5) {
-        this.attachmentMd5 = attachmentMd5;
-    }
-
     public void insertInfo(Long userId) {
         setId(UidUtil.nextId());
         setCreateId(userId);

+ 22 - 22
themis-business/src/main/java/com/qmth/themis/business/service/CacheService.java

@@ -192,28 +192,28 @@ public interface CacheService {
      */
     public void removeAuthInfoCache(String code);
 
-    /**
-     * 添加考试语音缓存
-     *
-     * @param id
-     * @return
-     */
-    public TEAudio examAudioCache(Long id);
-
-    /**
-     * 修改考试语音缓存
-     *
-     * @param id
-     * @return
-     */
-    public TEAudio updateExamAudioCache(Long id);
-
-    /**
-     * 删除考试语音缓存
-     *
-     * @param id
-     */
-    public void removeExamAudioCache(Long id);
+//    /**
+//     * 添加考试语音缓存
+//     *
+//     * @param id
+//     * @return
+//     */
+//    public TEAudio examAudioCache(Long id);
+//
+//    /**
+//     * 修改考试语音缓存
+//     *
+//     * @param id
+//     * @return
+//     */
+//    public TEAudio updateExamAudioCache(Long id);
+//
+//    /**
+//     * 删除考试语音缓存
+//     *
+//     * @param id
+//     */
+//    public void removeExamAudioCache(Long id);
 
     /**
      * 添加附件缓存

+ 11 - 1
themis-business/src/main/java/com/qmth/themis/business/service/TEAudioService.java

@@ -2,9 +2,11 @@ package com.qmth.themis.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.themis.business.bean.result.TEAudioResult;
 import com.qmth.themis.business.entity.TEAudio;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -24,7 +26,7 @@ public interface TEAudioService extends IService<TEAudio> {
      * @param activityId
      * @return
      */
-    IPage<TEAudio> query(IPage<Map> iPage, @Param("activityId") Long activityId);
+    IPage<TEAudio> query(IPage<Map> iPage, Long activityId);
 
 //    /**
 //     * 发送语音mq消息
@@ -32,4 +34,12 @@ public interface TEAudioService extends IService<TEAudio> {
 //     * @param teAudio
 //     */
 //    public void sendAudioMessage(TEAudio teAudio);
+
+    /**
+     * 根据场次id查询音频信息
+     *
+     * @param activityId
+     * @return
+     */
+    List<TEAudioResult> query(Long activityId);
 }

+ 34 - 34
themis-business/src/main/java/com/qmth/themis/business/service/impl/CacheServiceImpl.java

@@ -404,40 +404,40 @@ public class CacheServiceImpl implements CacheService {
 
     }
 
-    /**
-     * 添加考试语音缓存
-     *
-     * @param id
-     * @return
-     */
-    @Override
-    @Cacheable(value = SystemConstant.EXAM_AUDIO_CACHE, key = "#p0", unless = "#result == null")
-    public TEAudio examAudioCache(Long id) {
-        return teAudioService.getById(id);
-    }
-
-    /**
-     * 修改考试语音缓存
-     *
-     * @param id
-     * @return
-     */
-    @Override
-    @CachePut(value = SystemConstant.EXAM_AUDIO_CACHE, key = "#p0", unless = "#result == null")
-    public TEAudio updateExamAudioCache(Long id) {
-        return teAudioService.getById(id);
-    }
-
-    /**
-     * 删除考试语音缓存
-     *
-     * @param id
-     */
-    @Override
-    @CacheEvict(value = SystemConstant.EXAM_AUDIO_CACHE, key = "#p0")
-    public void removeExamAudioCache(Long id) {
-
-    }
+//    /**
+//     * 添加考试语音缓存
+//     *
+//     * @param id
+//     * @return
+//     */
+//    @Override
+//    @Cacheable(value = SystemConstant.EXAM_AUDIO_CACHE, key = "#p0", unless = "#result == null")
+//    public TEAudio examAudioCache(Long id) {
+//        return teAudioService.getById(id);
+//    }
+//
+//    /**
+//     * 修改考试语音缓存
+//     *
+//     * @param id
+//     * @return
+//     */
+//    @Override
+//    @CachePut(value = SystemConstant.EXAM_AUDIO_CACHE, key = "#p0", unless = "#result == null")
+//    public TEAudio updateExamAudioCache(Long id) {
+//        return teAudioService.getById(id);
+//    }
+//
+//    /**
+//     * 删除考试语音缓存
+//     *
+//     * @param id
+//     */
+//    @Override
+//    @CacheEvict(value = SystemConstant.EXAM_AUDIO_CACHE, key = "#p0")
+//    public void removeExamAudioCache(Long id) {
+//
+//    }
 
     /**
      * 添加附件缓存

+ 13 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEAudioServiceImpl.java

@@ -2,6 +2,7 @@ package com.qmth.themis.business.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.themis.business.bean.result.TEAudioResult;
 import com.qmth.themis.business.dao.TEAudioMapper;
 import com.qmth.themis.business.entity.TEAudio;
 import com.qmth.themis.business.service.TEAudioService;
@@ -10,6 +11,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -54,6 +56,17 @@ public class TEAudioServiceImpl extends ServiceImpl<TEAudioMapper, TEAudio> impl
         return teAudioMapper.query(iPage, activityId);
     }
 
+    /**
+     * 根据场次id查询音频信息
+     *
+     * @param activityId
+     * @return
+     */
+    @Override
+    public List<TEAudioResult> query(Long activityId) {
+        return teAudioMapper.queryResult(activityId);
+    }
+
 //    /**
 //     * 发送语音mq消息
 //     *

+ 31 - 2
themis-business/src/main/resources/mapper/TEAudioMapper.xml

@@ -49,10 +49,39 @@
         tea.update_time as updateTime
         from
         t_e_audio tea
-        <where> 1 = 1
+        <where>1 = 1
             <if test="activityId != null and activityId != ''">
                 and tea.activity_id = #{activityId}
             </if>
-        </where>) t
+        </where>
+        ) t
+    </select>
+
+    <select id="queryResult" resultType="com.qmth.themis.business.bean.result.TEAudioResult">
+        select
+            tea.id,
+            tea.org_id as orgId,
+            tea.activity_id as activityId,
+            tea.attachment_id as attachmentId,
+            tea.content,
+            tea.enable,
+            tea.audio_default as audioDefault,
+            tea.`type`,
+            (case
+                 when tea.`type` = 'BEFORE'
+                     then teea.start_time - (tea.play_time * 1000)
+                 else teea.finish_time - (tea.play_time * 1000)
+                end) as execTime,
+            teea.start_time as startTime,
+            teea.finish_time as finishTime
+        from
+            t_e_audio tea
+                join t_e_exam_activity teea on
+                teea.id = tea.activity_id
+        <where>1 = 1
+            <if test="activityId != null and activityId != ''">
+                and tea.activity_id = #{activityId}
+            </if>
+        </where>
     </select>
 </mapper>

+ 5 - 8
themis-exam/src/main/java/com/qmth/themis/exam/api/TEMobileController.java

@@ -1,14 +1,13 @@
 package com.qmth.themis.exam.api;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.themis.business.bean.exam.AnswerReadyParamBean;
 import com.qmth.themis.business.bean.exam.AnswerReadyResponseBean;
 import com.qmth.themis.business.bean.exam.MobileAnswerSubmitParamBean;
 import com.qmth.themis.business.bean.exam.MobileAnswerSubmitReponseBean;
 import com.qmth.themis.business.bean.mobile.MobileAuthorizationBean;
 import com.qmth.themis.business.bean.mobile.MobileAuthorizationParamBean;
+import com.qmth.themis.business.bean.result.TEAudioResult;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.MobileAuthCacheUtil;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
@@ -16,7 +15,6 @@ import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.entity.TBAttachment;
-import com.qmth.themis.business.entity.TEAudio;
 import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.MobileModeEnum;
 import com.qmth.themis.business.enums.MqTagEnum;
@@ -212,12 +210,12 @@ public class TEMobileController {
     @RequestMapping(value = "/exam/audio/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "试卷信息")})
     public Result examAudioQuery(@ApiParam(value = "考试id", required = true) @RequestParam Long recordId) {
-        List<TEAudio> teAudioList = null;
+        List<TEAudioResult> teAudioList = null;
         ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
         if (Objects.nonNull(examRecordStatusEnum)) {
-            IPage<TEAudio> teAudioIPage = teAudioService.query(new Page<>(SystemConstant.PAGE_NUMBER_MIN, SystemConstant.SELECT_PAGE_SIZE_MAX), ExamRecordCacheUtil.getExamActivityId(recordId));
-            if (Objects.nonNull(teAudioIPage) && !CollectionUtils.isEmpty(teAudioIPage.getRecords())) {
-                for (TEAudio t : teAudioIPage.getRecords()) {
+            teAudioList = teAudioService.query(ExamRecordCacheUtil.getExamActivityId(recordId));
+            if (!CollectionUtils.isEmpty(teAudioList)) {
+                for (TEAudioResult t : teAudioList) {
                     if (Objects.nonNull(t.getAttachmentId())) {
                         TBAttachment tbAttachment = cacheService.attachmentCache(t.getAttachmentId());
                         if (Objects.nonNull(tbAttachment) && Objects.nonNull(tbAttachment.getRemark())) {
@@ -228,7 +226,6 @@ public class TEMobileController {
                         t.setAttachmentMd5(tbAttachment.getMd5());
                     }
                 }
-                teAudioList = teAudioIPage.getRecords();
             }
         }
         return ResultUtil.ok(teAudioList);