he2802 3 лет назад
Родитель
Сommit
49e703fdd7
16 измененных файлов с 243 добавлено и 38 удалено
  1. 0 2
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassStudentController.java
  2. 1 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/bank/QuestionController.java
  3. 21 3
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/redis/RedisCache.java
  4. 54 0
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java
  5. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionQueryBo.java
  6. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java
  7. 96 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  8. 4 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsQueryBo.java
  9. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/TodayExamTobVo.java
  10. 3 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/TodayExamWeekRecordDetailVo.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodVo.java
  12. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsVo.java
  13. 13 9
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  14. 14 0
      zhongzheng-system/src/main/resources/mapper/modules/bank/QuestionMapper.xml
  15. 3 0
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml
  16. 20 9
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

+ 0 - 2
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassStudentController.java

@@ -99,7 +99,6 @@ public class ClassStudentController extends BaseController {
     public TableDataInfo<GoodsStudyRecordVo> list(UserQueryBo bo) {
         startPage();
         List<GoodsStudyRecordVo> list = iUserStudyRecordService.queryGoods(bo);
-
         return getDataTable(list);
     }
 
@@ -112,7 +111,6 @@ public class ClassStudentController extends BaseController {
     public TableDataInfo<GoodsStudyRecordVo> listLive(UserQueryBo bo) {
         startPage();
         List<GoodsStudyRecordVo> list = iUserStudyRecordService.queryLiveGoods(bo);
-
         return getDataTable(list);
     }
 

+ 1 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/bank/QuestionController.java

@@ -195,4 +195,5 @@ public class QuestionController extends BaseController {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         return AjaxResult.success(iQuestionService.getTodayExamWeekRecord(goodsId,loginUser.getUser().getUserId()));
     }
+
 }

+ 21 - 3
zhongzheng-common/src/main/java/com/zhongzheng/common/core/redis/RedisCache.java

@@ -3,6 +3,8 @@ package com.zhongzheng.common.core.redis;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
+import cn.hutool.core.lang.Validator;
+import com.zhongzheng.common.utils.ServletUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,7 +51,13 @@ public class RedisCache
      */
     public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
     {
-        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        String unionKey = key;
+        if(Validator.isNotEmpty(tenantId)){
+            unionKey = tenantId + key;
+        }
+        redisTemplate.opsForValue().set(unionKey, value, timeout, timeUnit);
+
     }
 
     /**
@@ -86,7 +94,12 @@ public class RedisCache
     public <T> T getCacheObject(final String key)
     {
         ValueOperations<String, T> operation = redisTemplate.opsForValue();
-        return operation.get(key);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        String unionKey = key;
+        if(Validator.isNotEmpty(tenantId)){
+            unionKey = tenantId + key;
+        }
+        return operation.get(unionKey);
     }
 
     /**
@@ -96,7 +109,12 @@ public class RedisCache
      */
     public boolean deleteObject(final String key)
     {
-        return redisTemplate.delete(key);
+        String tenantId = ServletUtils.getRequest().getHeader("TenantId");
+        String unionKey = key;
+        if(Validator.isNotEmpty(tenantId)){
+            unionKey = tenantId + key;
+        }
+        return redisTemplate.delete(unionKey);
     }
 
     /**

+ 54 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java

@@ -7,6 +7,8 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 import cn.hutool.core.lang.Validator;
 import org.apache.commons.lang3.RandomStringUtils;
@@ -245,6 +247,58 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return cal.getTime().getTime()/1000;
     }
 
+    /**
+     * 根据当前日期获得所在周的日期区间(周一和周日日期)
+     */
+    public static Map<String, Long> getTimeInterval(Date date){
+        Map<String, Long> map = new HashMap<>();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
+        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
+        if(1 == dayWeek){
+            cal.add(Calendar.DAY_OF_MONTH,-1);
+        }
+        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
+        cal.setFirstDayOfWeek(Calendar.MONDAY);
+        // 获得当前日期是一个星期的第几天
+        int day = cal.get(Calendar.DAY_OF_WEEK);
+        // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
+        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
+        Long imptimeBegin = cal.getTime().getTime();
+        cal.add(Calendar.DATE,6);
+        Long imptimeEnd = cal.getTime().getTime();
+        map.put("start", imptimeBegin/1000);
+        map.put("end", imptimeEnd/1000);
+        return map;
+    }
+
+
+    /**
+     * 根据当前日期获得上周的日期区间(上周周一和周日日期)
+     */
+    public static Map<String, Long> getLastTimeInterval(Date date){
+        Map<String, Long> map = new HashMap<>();
+        Calendar calendar1 = Calendar.getInstance();
+        Calendar calendar2 = Calendar.getInstance();
+        calendar1.setTime(date);
+        calendar2.setTime(date);
+        int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK) - 1;
+        if(dayOfWeek <= 0){
+            dayOfWeek = 7;
+        }
+        int offset1 = 1 - dayOfWeek;
+        int offset2 = 7 - dayOfWeek;
+        calendar1.add(Calendar.DATE, offset1 - 7);
+        calendar2.add(Calendar.DATE, offset2 - 7);
+        // last Monday
+        Long lastBeginDate = calendar1.getTime().getTime();
+        // last Sunday
+        Long lastEndDate = calendar2.getTime().getTime();
+        map.put("laststart", lastBeginDate/1000);
+        map.put("lastend", lastEndDate/1000);
+        return map;
+    }
 
     /**
      * 获取日期格式订单号

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/bo/QuestionQueryBo.java

@@ -91,4 +91,7 @@ public class QuestionQueryBo extends BaseEntity {
 	/** 导入顺序 */
 	@ApiModelProperty("导入顺序")
 	private Integer importSort;
+	/** 商品服务期校验字段 */
+	@ApiModelProperty("商品服务期校验字段:1,未过期 2,已过期")
+	private Integer serviceCheck;
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IQuestionService.java

@@ -96,4 +96,5 @@ public interface IQuestionService extends IService<Question> {
 	List<TodayExamTobVo> getTodayExamTob(Long goodsId, Long userId);
 
 	TodayExamWeekRecordDetailVo getTodayExamWeekRecord(Long goodsId, Long userId);
+
 }

+ 96 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -33,10 +33,7 @@ import com.zhongzheng.modules.exam.bo.ExamKnowledgeAddBo;
 import com.zhongzheng.modules.exam.bo.ExamKnowledgeBusinessAddBo;
 import com.zhongzheng.modules.exam.domain.ExamKnowledge;
 import com.zhongzheng.modules.exam.service.IExamKnowledgeService;
-import com.zhongzheng.modules.goods.bo.BankGoodsExamAddBo;
-import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
-import com.zhongzheng.modules.goods.bo.TodayExamTobVo;
-import com.zhongzheng.modules.goods.bo.TodayExamWeekRecordDetailVo;
+import com.zhongzheng.modules.goods.bo.*;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.domain.GoodsExamTime;
 import com.zhongzheng.modules.goods.service.IGoodsExamTimeService;
@@ -73,9 +70,15 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+import javax.imageio.ImageIO;
+import javax.xml.bind.DatatypeConverter;
+import java.awt.*;
+import java.awt.image.BufferedImage;
 import java.io.*;
+import java.net.URL;
 import java.text.NumberFormat;
 import java.util.*;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -1892,22 +1895,107 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
             vo.setUserId(k);
             vo.setRecordCount(v.size());
             User user = iUserService.getById(k);
-            vo.setUserName(user.getNickname());
+            vo.setUserName(user.getRealname());
+            vo.setAvatar(user.getAvatar());
+            voList.add(vo);
         });
         return voList.stream().sorted(Comparator.comparing(TodayExamTobVo::getRecordCount).reversed()).collect(Collectors.toList());
     }
 
     @Override
     public TodayExamWeekRecordDetailVo getTodayExamWeekRecord(Long goodsId, Long userId) {
-       //获取每日一练的打卡记录
+        //获取每日一练的打卡记录
         List<UserSpecialExamRecord> recordList = userSpecialExamRecordService
                 .list(new LambdaQueryWrapper<UserSpecialExamRecord>()
                 .eq(UserSpecialExamRecord::getUserId, userId)
                 .eq(UserSpecialExamRecord::getGoodsId, goodsId));
-
-        return null;
+        if (CollectionUtils.isEmpty(recordList)){
+            return null;
+        }
+        List<UserExamRecord> userExamRecordList = new ArrayList<>();
+        //做题记录
+        recordList.forEach(item -> {
+            List<UserExamRecord> list = iUserExamRecordService.list(new LambdaQueryWrapper<UserExamRecord>()
+                    .eq(UserExamRecord::getGoodsId, goodsId)
+                    .eq(UserExamRecord::getUserId, userId)
+                    .eq(ObjectUtils.isNotNull(item.getModuleExamId()) && item.getModuleExamId() != 0, UserExamRecord::getModuleExamId, item.getModuleExamId())
+                    .eq(ObjectUtils.isNotNull(item.getChapterExamId()) && item.getChapterExamId() != 0, UserExamRecord::getChapterExamId, item.getChapterExamId())
+                    .eq(UserExamRecord::getExamId, item.getExamId())
+                    .ge(UserExamRecord::getCreateTime,item.getRecordTime())
+                    .le(UserExamRecord::getChapterExamId,item.getRecordTime() + (24*60*60))
+                    .eq(UserExamRecord::getStatus,1));
+            userExamRecordList.addAll(list);
+        });
+        //做题数和正确率
+        Long doNum = 0L;
+        Long rightNum = 0L;
+        List<UserExamRecord> weekRecord = new ArrayList<>();
+        List<UserExamRecord> lastWeekRecord = new ArrayList<>();
+        //本周和上周的时间
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        Long time = 24*60*60L;
+        Map<String, Long> timeInterval = DateUtils.getTimeInterval(cal.getTime());
+        Long start = timeInterval.get("start");
+        Long end = timeInterval.get("end") + time;
+        Map<String, Long> lastTimeInterval = DateUtils.getLastTimeInterval(cal.getTime());
+        Long laststart = lastTimeInterval.get("laststart");
+        Long lastEnd = lastTimeInterval.get("lastend")+ time;
+        for (UserExamRecord record : userExamRecordList) {
+            doNum += record.getAllQuestionNum();
+            rightNum += record.getRightQuestionNum();
+            //本周记录
+            if (record.getCreateTime() > start && record.getCreateTime() < end){
+                weekRecord.add(record);
+            }else if (record.getCreateTime() > laststart && record.getCreateTime() < lastEnd){
+                //上周记录
+                lastWeekRecord.add(record);
+            }
+        }
+        TodayExamWeekRecordDetailVo result = new TodayExamWeekRecordDetailVo();
+        result.setDoNum(doNum);
+        result.setAccuracyAvg(getPercent(rightNum.intValue(),doNum.intValue()));
+        //本周
+        if (CollectionUtils.isNotEmpty(weekRecord)){
+            List<TodayExamWeekRecordVo> voList = new ArrayList<>();
+            Long todayTime = DateUtils.getTodayZeroTime() + time;
+            Long startTime = start;
+            while ( startTime < todayTime){
+                Long endTime = startTime + time;
+                List<UserExamRecord> records = new ArrayList<>();
+                for (UserExamRecord record : weekRecord) {
+                    if (record.getCreateTime() >= startTime && record.getCreateTime() <= endTime){
+                        records.add(record);
+                    }
+                }
+                if (CollectionUtils.isNotEmpty(records)){
+                    TodayExamWeekRecordVo vo = new TodayExamWeekRecordVo();
+                    vo.setExamCount(records.size());
+                    Exam exam = iExamService.getById(records.get(0).getExamId());
+                    vo.setExamId(exam.getExamId());
+                    vo.setExamName(exam.getExamName());
+                    vo.setExamTime(startTime);
+                    voList.add(vo);
+                }
+                startTime += time;
+            }
+            result.setResultList(voList);
+            Long doSum = weekRecord.stream().mapToLong(UserExamRecord::getAllQuestionNum).sum();
+            Long rightSum = weekRecord.stream().mapToLong(UserExamRecord::getRightQuestionNum).sum();
+            result.setWeekAccuracyDoNum(doSum);
+            result.setWeekAccuracyAvg(getPercent(rightSum.intValue(),doSum.intValue()));
+        }
+        //上周
+        if (CollectionUtils.isNotEmpty(lastWeekRecord)){
+            Long lastSum = lastWeekRecord.stream().mapToLong(UserExamRecord::getAllQuestionNum).sum();
+            Long lastRigheSum = lastWeekRecord.stream().mapToLong(UserExamRecord::getRightQuestionNum).sum();
+            result.setLastWeekAccuracyDoNum(lastSum);
+            result.setLastWeekAccuracyAvg(getPercent(lastRigheSum.intValue(),lastSum.intValue()));
+        }
+        return result;
     }
 
+
     private String getPercent(Integer x,Integer y){
         Double d1 = x * 1.0;
         Double d2 = y * 1.0;

+ 4 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/GoodsQueryBo.java

@@ -23,9 +23,7 @@ import com.zhongzheng.common.core.domain.BaseEntity;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ApiModel("商品分页查询对象")
-public class
-
-GoodsQueryBo extends BaseEntity {
+public class GoodsQueryBo extends BaseEntity {
 
 	/** 分页大小 */
 	@ApiModelProperty("分页大小")
@@ -200,7 +198,9 @@ GoodsQueryBo extends BaseEntity {
 	private Long getUserNum;
     @ApiModelProperty("获取章数量 1")
     private Long chapterNum;
-
+	/** 商品服务期校验字段 */
+	@ApiModelProperty("商品服务期校验字段:1,未过期 2,已过期")
+	private Integer serviceCheck;
 
 
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/TodayExamTobVo.java

@@ -18,6 +18,9 @@ public class TodayExamTobVo implements Serializable {
     @ApiModelProperty("用户昵称")
     private String userName;
 
+    @ApiModelProperty("用户头像")
+    private String avatar;
+
     @ApiModelProperty("打卡次数")
     private Integer recordCount;
 

+ 3 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/TodayExamWeekRecordDetailVo.java

@@ -17,7 +17,7 @@ public class TodayExamWeekRecordDetailVo implements Serializable {
     private String accuracyAvg;
 
     @ApiModelProperty("累计做题数")
-    private Integer doNum;
+    private Long doNum;
 
     @ApiModelProperty("本周做题记录")
     private List<TodayExamWeekRecordVo> resultList;
@@ -29,8 +29,8 @@ public class TodayExamWeekRecordDetailVo implements Serializable {
     private String weekAccuracyAvg;
 
     @ApiModelProperty("上周的做题数")
-    private Integer lastWeekAccuracyDoNum;
+    private Long lastWeekAccuracyDoNum;
 
     @ApiModelProperty("本周的做题数")
-    private Integer weekAccuracyDoNum;
+    private Long weekAccuracyDoNum;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodVo.java

@@ -193,6 +193,8 @@ public class ClassPeriodVo implements Comparable<ClassPeriodVo> {
 	private String sectionName;
 	@ApiModelProperty("订单商品ID")
 	private Long orderGoodsId;
+	@ApiModelProperty("录播和回放的url地址")
+	private String recordingUrl;
 
 
 	@Override

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/vo/OrderGoodsVo.java

@@ -318,4 +318,9 @@ public class OrderGoodsVo {
 	private Long userStudyCount;
 	@ApiModelProperty("0不限制 2限制整个目录顺序")
 	private Integer goodsLearningOrder;
+	/** 学时 */
+	@ApiModelProperty("学时")
+	private BigDecimal classHours;
+	@ApiModelProperty("课程数量")
+	private Long courseNum;
 }

+ 13 - 9
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -310,14 +310,12 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         String key = "STUDY_Record_"+bo.getUserId();
         Long value = redisCache.getCacheObject(key);
         if(value!=null&&(Validator.isEmpty(bo.getStatus())||bo.getStatus()!=1)){
-            //非学完状态且带图片则防重复提交处理
-            if(Validator.isNotEmpty(bo.getPhoto())){
+            //非学完状态且带图片则防重复提交处理
+            if(Validator.isEmpty(bo.getPhoto())){
                 return 1;
             }
         }
-        if(Validator.isNotEmpty(bo.getPhoto())){
-            redisCache.setCacheObject(key,1L,3, TimeUnit.SECONDS);//3秒
-        }
+        redisCache.setCacheObject(key,1L,3, TimeUnit.SECONDS);//3秒
 
         CourseSectionVo courseSectionVo =iCourseSectionService.queryById(bo.getSectionId());
         if(courseSectionVo.getSectionType()==2&&Validator.isNotEmpty(bo.getPhoto())){  //直播有拍照即学完 第五阶段去掉这个需求
@@ -340,6 +338,7 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
             add.setStartTime(DateUtils.getNowTime().longValue() - add.getStudyDuration().longValue());
         }else{
             add.setStartTime(DateUtils.getNowTime().longValue());
+            add.setStudyDuration(0L);
         }
         add.setEndTime(DateUtils.getNowTime());
         if(Validator.isNotEmpty(first)&&Validator.isNotEmpty(first.getFirstStartTime())){
@@ -373,16 +372,21 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
                 //如果没有历史数据或者之前播放时长比现在晚,或者携带照片则新增观看记录
                 this.save(add);
             }else{
-                lastVo.setVideoCurrentTime(add.getVideoCurrentTime());
-                lastVo.setEndTime(add.getEndTime());
                 if(Validator.isNotEmpty(add.getStatus())&&add.getStatus()==1){
                     lastVo.setStatus(1);
                 }
+              /*  lastVo.setStudyDuration(lastVo.getStudyDuration().longValue()+add.getStudyDuration().longValue());
+                if(lastVo.getStudyDuration().longValue()>add.getVideoCurrentTime().longValue()){
+                    lastVo.setStudyDuration(add.getVideoCurrentTime());
+                }*/
                 if(lastVo.getVideoCurrentTime().longValue()<=add.getVideoCurrentTime().longValue()){
                     lastVo.setStudyDuration(lastVo.getStudyDuration().longValue()+(add.getVideoCurrentTime().longValue()-lastVo.getVideoCurrentTime().longValue()));
-                }else{
-                    lastVo.setStudyDuration(lastVo.getStudyDuration().longValue()+add.getStudyDuration().longValue());
                 }
+                if(lastVo.getStudyDuration().longValue()>add.getVideoCurrentTime().longValue()){
+                    lastVo.setStudyDuration(add.getVideoCurrentTime());
+                }
+                lastVo.setVideoCurrentTime(add.getVideoCurrentTime());
+                lastVo.setEndTime(add.getEndTime());
 
                 UserStudyRecord update = BeanUtil.toBean(lastVo, UserStudyRecord.class);
                 update.setUpdateTime(DateUtils.getNowTime());

+ 14 - 0
zhongzheng-system/src/main/resources/mapper/modules/bank/QuestionMapper.xml

@@ -531,6 +531,13 @@
         <if test="businessId != null and businessId != ''">
             AND g.business_id = #{businessId}
         </if>
+        <if test="serviceCheck != null and serviceCheck != '' and serviceCheck == 1">
+            AND UNIX_TIMESTAMP(NOW()) &gt;= og.service_start_time
+            AND UNIX_TIMESTAMP(NOW()) &lt;= og.service_end_time
+        </if>
+        <if test="serviceCheck != null and serviceCheck != '' and serviceCheck == 2">
+            AND UNIX_TIMESTAMP(NOW()) &gt; og.service_end_time
+        </if>
         UNION
         SELECT
         g.*,
@@ -572,6 +579,13 @@
         </if>
         <if test="businessId != null and businessId != ''">
             AND g.business_id = #{businessId}
+        </if>
+        <if test="serviceCheck != null and serviceCheck != '' and serviceCheck == 1">
+            AND UNIX_TIMESTAMP(NOW()) &gt;= og.service_start_time
+            AND UNIX_TIMESTAMP(NOW()) &lt;= og.service_end_time
+        </if>
+        <if test="serviceCheck != null and serviceCheck != '' and serviceCheck == 2">
+            AND UNIX_TIMESTAMP(NOW()) &gt; og.service_end_time
         </if>
             )un   ORDER BY un.order_create_time DESC
 

+ 3 - 0
zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml

@@ -101,6 +101,8 @@
         <result property="gradeId" column="grade_id"/>
         <result property="userStudyCount" column="user_study_count"/>
         <result property="goodsLearningOrder" column="goods_learning_order"/>
+        <result property="classHours" column="class_hours"/>
+        <result property="courseNum" column="course_num"/>
     </resultMap>
 
     <select id="selectListBybo" parameterType="com.zhongzheng.modules.order.bo.OrderGoodsQueryBo"
@@ -474,6 +476,7 @@
         us.apply_site_start_time as sub_apply_site_start_time,
         us.apply_site_end_time as sub_apply_site_end_time,
         us.apply_site_exam_time as sub_apply_site_exam_time,
+        (SELECT COUNT(1) FROM goods_course gc where gc.goods_id = g.goods_id) as course_num,
         og.study_count as user_study_count
         FROM
         order_goods og

+ 20 - 9
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

@@ -152,6 +152,7 @@
         <result property="liveEndTime" column="live_end_time"/>
         <result property="liveUrl" column="live_url"/>
         <result property="realDuration" column="real_duration"/>
+        <result property="recordingUrl" column="recording_url"/>
         <result property="sectionName" column="section_name"/>
     </resultMap>
 
@@ -328,7 +329,8 @@
         usr1.start_time,
         usr1.end_time,
         IFNULL(usr1.`status`,0) `status`,
-        usr1.video_current_time
+        usr1.video_current_time,
+        usr1.study_duration
         FROM
         course_menu m
         LEFT JOIN course_section s ON m.menu_id = s.section_id
@@ -337,7 +339,8 @@
         any_value ( usr.video_current_time ) video_current_time,
         any_value ( usr.end_time ) end_time,
         MAX ( usr.`status` ) `status`,
-        any_value ( usr.section_id ) section_id
+        any_value ( usr.section_id ) section_id,
+        IFNULL(SUM ( usr.study_duration ),0) study_duration
         FROM
         ( SELECT * FROM user_study_record WHERE 1=1
         AND module_id = 0
@@ -370,7 +373,8 @@
         usr1.start_time,
         usr1.end_time,
         IFNULL(usr1.`status`,0) `status`,
-        usr1.video_current_time
+        usr1.video_current_time,
+        usr1.study_duration
         FROM
         course_chapter_section c
         LEFT JOIN course_menu m on m.menu_id = c.chapter_id
@@ -381,7 +385,8 @@
         any_value ( usr.video_current_time ) video_current_time,
         any_value ( usr.end_time ) end_time,
         MAX ( usr.`status` ) `status`,
-        any_value ( usr.section_id ) section_id
+        any_value ( usr.section_id ) section_id,
+        IFNULL(SUM ( usr.study_duration ),0) study_duration
         FROM
         ( SELECT * FROM user_study_record WHERE 1=1
         <if test="userId != null and userId !=''">
@@ -412,7 +417,8 @@
         usr1.start_time,
         usr1.end_time,
         IFNULL(usr1.`status`,0) `status`,
-        usr1.video_current_time
+        usr1.video_current_time,
+        usr1.study_duration
         FROM
         course_chapter_section c
         LEFT JOIN course_module_chapter e on c.chapter_id = e.chapter_id
@@ -425,7 +431,8 @@
         any_value ( usr.video_current_time ) video_current_time,
         any_value ( usr.end_time ) end_time,
         MAX ( usr.`status` ) `status`,
-        any_value ( usr.section_id ) section_id
+        any_value ( usr.section_id ) section_id,
+        IFNULL(SUM ( usr.study_duration ),0) study_duration
         FROM
         ( SELECT * FROM user_study_record WHERE 1=1
 
@@ -501,11 +508,11 @@
         JOIN question_module_chapter a on e.major_id = a.module_exam_id LEFT JOIN question_chapter_exam h on
         a.chapter_exam_id = h.chapter_exam_id where e.goods_id = g.goods_id and e.type=1) FROM goods_attached a where
         a.goods_id=g.goods_id and a.type = 3) as exam_num,
-        (SELECT create_time FROM user_exam_record r where r.goods_id=g.goods_id AND r.user_id = #{userId} ORDER BY
+        (SELECT create_time FROM user_exam_record r where r.goods_id=g.goods_id AND r.do_mode = 1 AND r.user_id = #{userId} ORDER BY
         create_time ASC LIMIT 1) as start_time,
-        (SELECT create_time FROM user_exam_record r where r.goods_id=g.goods_id AND r.user_id = #{userId} ORDER BY
+        (SELECT create_time FROM user_exam_record r where r.goods_id=g.goods_id AND r.do_mode = 1 AND r.user_id = #{userId} ORDER BY
         create_time DESC LIMIT 1) as end_time,
-        (SELECT COUNT(DISTINCT exam_id) FROM user_exam_record r where r.goods_id=g.goods_id AND r.user_id = #{userId})
+        (SELECT COUNT(DISTINCT exam_id) FROM user_exam_record r where r.goods_id=g.goods_id AND r.do_mode = 1 AND r.user_id = #{userId})
         as stu_all_num,
         s.service_start_time,
         s.service_end_time
@@ -1190,6 +1197,7 @@
         NULL as live_end_time,
         NULL as live_url,
         NULL as real_duration,
+        NULL as recording_url,
         NULL as section_name
         FROM
         course_menu cm
@@ -1209,6 +1217,7 @@
         NULL as live_end_time,
         NULL as live_url,
         NULL as real_duration,
+        NULL as recording_url,
         NULL as section_name
         FROM
         course_menu cm
@@ -1227,6 +1236,7 @@
         cs.live_end_time,
         cs.live_url,
         cs.real_duration,
+        cs.recording_url,
         cs.name as section_name
         FROM
         course_menu cm
@@ -1249,6 +1259,7 @@
         cs.live_end_time,
         cs.live_url,
         cs.real_duration,
+        cs.recording_url,
         cs.name as section_name
         FROM
         course_chapter_section ccs