Browse Source

Merge remote-tracking branch 'origin/master'

吴树波 1 week ago
parent
commit
8b1ee84070
17 changed files with 341 additions and 142 deletions
  1. 0 1
      fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java
  2. 7 2
      fs-company-app/src/main/java/com/fs/app/controller/QwWorkTaskController.java
  3. 2 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java
  4. 0 16
      fs-service-system/src/main/java/com/fs/course/param/newfs/FsCourseSortLinkParam.java
  5. 13 34
      fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java
  6. 21 0
      fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseVideoLinkParam.java
  7. 23 0
      fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseVideoUParam.java
  8. 8 0
      fs-service-system/src/main/java/com/fs/course/service/IFsCourseWatchLogService.java
  9. 26 1
      fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java
  10. 5 0
      fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java
  11. 3 3
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java
  12. 146 5
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  13. 24 0
      fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoLinkDetailsVO.java
  14. 3 0
      fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java
  15. 28 0
      fs-service-system/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml
  16. 31 74
      fs-user-app/src/main/java/com/fs/app/controller/CourseWxH5Controller.java
  17. 1 6
      fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

+ 0 - 1
fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -104,7 +104,6 @@ public class FsUserCourseVideoController extends AppBaseController {
     @ApiOperation("生成课程分享短链")
     public R createCourseSortLink(FsCourseSortLinkParam param) {
         FsCourseLinkCreateParam fsCourseLinkCreateParam = new FsCourseLinkCreateParam();
-        // todo 入参需要确认调整
         BeanUtils.copyProperties(param, fsCourseLinkCreateParam);
 
         R courseSortLink = fsUserCourseService.createCourseSortLink(fsCourseLinkCreateParam);

+ 7 - 2
fs-company-app/src/main/java/com/fs/app/controller/QwWorkTaskController.java

@@ -7,6 +7,7 @@ import com.fs.qw.domain.QwWorkTask;
 import com.fs.qw.service.IQwUserService;
 import com.fs.qw.service.IQwWorkTaskService;
 import com.fs.app.param.QwWorkTaskQueryParam;
+import com.fs.qw.vo.QwOptionsVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -15,6 +16,7 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
@@ -52,9 +54,12 @@ public class QwWorkTaskController extends AppBaseController {
     @Login
     @ApiOperation("销售下的企微用户")
     @GetMapping("/getMyQwUserList")
-    public R userList() {
+    public R userList(@RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                      @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
         Long userId = Long.parseLong(getUserId());
-        return R.ok().put("data", qwUserService.selectQwUserListOptionsVOByCompanyUserId(userId));
+        PageHelper.startPage(pageNum, pageSize);
+        List<QwOptionsVO> list = qwUserService.selectQwUserListOptionsVOByCompanyUserId(userId);
+        return R.ok().put("data", new PageInfo<>(list));
     }
 
 }

+ 2 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -310,4 +310,6 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
 
     @Select("select log_id from fs_course_watch_log where create_time < '2025-03-01'")
     List<Long> selectFsCourseWatchLogByLastmonth();
+
+    FsCourseWatchLog getWatchLogByFsUser(@Param("videoId") Long videoId, @Param("fsUserId") Long fsUserId);
 }

+ 0 - 16
fs-service-system/src/main/java/com/fs/course/param/newfs/FsCourseSortLinkParam.java

@@ -11,10 +11,6 @@ public class FsCourseSortLinkParam {
     @ApiModelProperty(value = "视频id")
     private Long videoId;
 
-    private String qwUserId;
-
-    private String corpId;
-
     @ApiModelProperty(value = "公司id")
     private Long companyId;
 
@@ -24,16 +20,4 @@ public class FsCourseSortLinkParam {
     @ApiModelProperty(value = "课程id")
     private Long courseId;
 
-    @ApiModelProperty(value = "标题")
-    private String title;
-
-    @ApiModelProperty(value = "封面")
-    private String imageUrl;
-
-    @ApiModelProperty(value = "描述")
-    private String desc;
-
-//    @ApiModelProperty(value = "跳转的链接地址,格式举例:/course/pages/xxx?course=")
-//    private String realLink;
-
 }

+ 13 - 34
fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java

@@ -1,55 +1,34 @@
 package com.fs.course.param.newfs;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 @Data
 public class FsUserCourseAddCompanyUserParam implements Serializable {
 
-
-    // todo 需要调整
-    /**
-    * 视频小节id
-    */
-    @NotNull(message = "视频参数不能为空")
+    @NotNull(message = "视频id不能为空")
+    @ApiModelProperty(value = "视频id")
     private Long videoId;
 
-
-    /**
-    * 登录的小程序id
-    */
+    @NotNull(message = "用户id不能为空")
+    @ApiModelProperty(value = "授权的用户id")
     private Long userId;
 
-    /**
-    * 公司id
-    */
-    private String corpId;
-
-    /**
-    *   companyUserId
-    */
+    @NotNull(message = "销售id不能为空")
+    @ApiModelProperty(value = "销售id")
     private Long companyUserId;
-    /**
-    * 公司id
-    */
+
+    @ApiModelProperty(value = "公司id")
     private Long companyId;
 
-    /**
-     * 视频课程id
-     */
-    @NotNull(message = "课程参数不能为空")
+    @ApiModelProperty(value = "课程id")
     private Long courseId;
 
-
-    private Integer sendType; //归属发送方式:1 个微  2 企微
-
-    private Integer linkType; //链接类型
-
-
-    private Long linkId;
-
-    private Integer isRoom;
+//    @ApiModelProperty(value = "归属发送方式:1 个微  2 企微 ,不用传")
+//    private Integer sendType; //归属发送方式:1 个微  2 企微
 
 }

+ 21 - 0
fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseVideoLinkParam.java

@@ -0,0 +1,21 @@
+package com.fs.course.param.newfs;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FsUserCourseVideoLinkParam implements Serializable {
+    @ApiModelProperty(value = "视频id")
+    private Long videoId;
+
+    @ApiModelProperty(value = "用户id")
+    private Long fsUserId;
+
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "链接类型,0:正常链接;1:应急链接")
+    private Integer linkType;
+}

+ 23 - 0
fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseVideoUParam.java

@@ -0,0 +1,23 @@
+package com.fs.course.param.newfs;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "更新看课时长的入参")
+public class FsUserCourseVideoUParam implements Serializable {
+    @NotNull(message = "时长不能为空")
+    private Long duration;
+
+    @NotNull(message = "视频id不能为空")
+    private Long videoId;
+
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
+
+    private Integer linkType;
+
+}

+ 8 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsCourseWatchLogService.java

@@ -115,4 +115,12 @@ public interface IFsCourseWatchLogService extends IService<FsCourseWatchLog> {
     int countByMap(Map<String, Object> params);
 
     void del();
+
+    /**
+     * 通过视频id和用户id获取看课记录
+     * @param videoId
+     * @param fsUserId
+     * @return
+     */
+    FsCourseWatchLog getWatchLogByFsUser(Long videoId, Long fsUserId);
 }

+ 26 - 1
fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java

@@ -4,9 +4,13 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.param.*;
+import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
+import com.fs.course.param.newfs.FsUserCourseVideoLinkParam;
+import com.fs.course.param.newfs.FsUserCourseVideoUParam;
 import com.fs.course.param.newfs.UserCourseVideoPageParam;
 import com.fs.course.vo.FsUserCourseVideoListUVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
+import com.fs.course.vo.newfs.FsUserCourseVideoLinkDetailsVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.course.vo.FsUserCourseVideoQVO;
 import com.fs.course.vo.FsUserCourseVideoVO;
@@ -115,6 +119,27 @@ public interface IFsUserCourseVideoService
      */
     List<FsUserVideoListVO> getListCourseVideo(UserCourseVideoPageParam param);
 
-    ResponseResult<Boolean> isAddCompanyUser(FsUserCourseVideoAddKfUParam param);
+    /**
+     * 判断是否添加销售
+     * @param param 入参
+     * @return 是/否 成功
+     */
+    ResponseResult<Boolean> isAddCompanyUser(FsUserCourseAddCompanyUserParam param);
+
+    /**
+     * 获取链接用户课程详情
+     * @param param 入参
+     */
+    ResponseResult<FsUserCourseVideoLinkDetailsVO> getLinkCourseVideoDetails(FsUserCourseVideoLinkParam param);
+
+
+    R addWatchLogByLink(FsUserCourseAddCompanyUserParam param);
+
+    /**
+     * 更新看课时长
+     * @param param 入参
+     * @return
+     */
+    R updateWatchDurationWx(FsUserCourseVideoUParam param);
 
 }

+ 5 - 0
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java

@@ -758,6 +758,11 @@ public class FsCourseWatchLogServiceImpl extends ServiceImpl<FsCourseWatchLogMap
         processDelCourseLogs(logIds);
     }
 
+    @Override
+    public FsCourseWatchLog getWatchLogByFsUser(Long videoId, Long fsUserId) {
+        return fsCourseWatchLogMapper.getWatchLogByFsUser(videoId, fsUserId);
+    }
+
     private void processDelCourseLogs(List<Long> logIds) {
 
     }

+ 3 - 3
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java

@@ -58,8 +58,8 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
     @Autowired
     private CompanyUserMapper companyUserMapper;
 
-    // todo 链接url需要调整
-    private static final String realLink = "/courseh5/pages/course/learning?course=";
+    private static final String realLink = "/courseH5/pages/course/learning?course=";
+    private static final String shortLink = "/courseH5/pages/course/learning?s=";
 
     /**
      * 查询课程
@@ -423,7 +423,7 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
         int i = fsCourseLinkMapper.insertFsCourseLink(link);
         if (i > 0){
             String domainName = getDomainName(param.getCompanyUserId(), config);
-            String sortLink = domainName + "/s/" + link.getLink();
+            String sortLink = domainName + shortLink + link.getLink();
             return R.ok().put("url", sortLink);
         }
         return R.error("生成链接失败!");

+ 146 - 5
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -10,20 +10,22 @@ import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.*;
 import com.fs.course.dto.CoursePackageDTO;
 import com.fs.course.mapper.*;
 import com.fs.course.param.*;
+import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
+import com.fs.course.param.newfs.FsUserCourseVideoLinkParam;
+import com.fs.course.param.newfs.FsUserCourseVideoUParam;
 import com.fs.course.param.newfs.UserCourseVideoPageParam;
 import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.course.vo.FsUserCourseVideoListUVO;
 import com.fs.course.vo.FsUserCourseVideoQVO;
 import com.fs.course.vo.FsUserCourseVideoVO;
-import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
-import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
-import com.fs.course.vo.newfs.FsUserVideoListVO;
-import com.fs.course.vo.newfs.FsUserVideoQuestionVO;
+import com.fs.course.vo.newfs.*;
 import com.fs.his.param.WxSendRedPacketParam;
 import com.fs.sop.mapper.SopUserLogsInfoMapper;
 import com.fs.store.domain.FsUser;
@@ -121,6 +123,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     @Autowired
     private ISysConfigService sysConfigService;
 
+    @Autowired
+    private CompanyUserMapper companyUserMapper;
+
     /**
      * 查询课堂视频
      *
@@ -838,7 +843,143 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     }
 
     @Override
-    public ResponseResult<Boolean> isAddCompanyUser(FsUserCourseVideoAddKfUParam param) {
+    @Transactional
+    public ResponseResult<Boolean> isAddCompanyUser(FsUserCourseAddCompanyUserParam param) {
+        logger.info("=======================进入个微-判断是否添加客服===========================,入参:{}",param);
+        //查询用户
+        FsUser fsUser = fsUserMapper.selectFsUserById(param.getUserId());
+        if (fsUser == null){
+            return ResponseResult.fail(401,"未授权");
+        }
+
+        //判断该销售是否存在
+        CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getCompanyUserId());
+        if (companyUser == null){
+            return ResponseResult.fail(500,"销售不存在");
+        }
+
+        //判断该用户是否绑定了该销售
+        List<FsUser> fsUserCompany = fsUserMapper.getFsUserByCompanyUserAndId(param.getCompanyUserId(), param.getUserId());
+        if(fsUserCompany != null && !fsUserCompany.isEmpty()){
+            //查询看课记录
+            FsCourseWatchLog log = new FsCourseWatchLog();
+            log.setUserId(param.getUserId());
+            log.setCompanyUserId(param.getCompanyUserId());
+            log.setVideoId(param.getVideoId());
+            List<FsCourseWatchLog> fsCourseWatchLogs = courseWatchLogMapper.selectFsCourseWatchLogList(log);
+            //如果存在,则更新
+            if (fsCourseWatchLogs != null && !fsCourseWatchLogs.isEmpty()){
+                FsCourseWatchLog updateLog = new FsCourseWatchLog();
+                updateLog.setUpdateTime(new Date());
+                courseWatchLogMapper.updateFsCourseWatchLog(updateLog);
+            }
+
+            //如果是会员,则需要添加看课记录
+            FsCourseWatchLog fsCourseWatchLog = new FsCourseWatchLog();
+            BeanUtils.copyProperties(param, fsCourseWatchLog);
+            fsCourseWatchLog.setSendType(1);
+            fsCourseWatchLog.setDuration(0L);
+            fsCourseWatchLog.setCreateTime(new Date());
+            fsCourseWatchLog.setLogType(1);
+            courseWatchLogMapper.insertFsCourseWatchLog(fsCourseWatchLog);
+        } else {
+            return ResponseResult.ok(Boolean.FALSE);
+        }
+        return ResponseResult.ok(Boolean.TRUE);
+    }
+
+    @Override
+    public ResponseResult<FsUserCourseVideoLinkDetailsVO> getLinkCourseVideoDetails(FsUserCourseVideoLinkParam param) {
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+
+        // 1、获取视频详情、问题详情
+        ResponseResult<FsUserCourseVideoDetailsVO> videoDetails = this.getVideoDetails(param.getVideoId());
+        FsUserCourseVideoDetailsVO courseVideoDetails = videoDetails.getData() != null ? videoDetails.getData() : null;
+
+        Long duration = 0L;
+        long tipsTime = 0L;
+        int isFinish = 0;
+        FsUserCourseVideoLinkDetailsVO vo = new FsUserCourseVideoLinkDetailsVO();
+        vo.setCourseVideoDetails(courseVideoDetails);
+        vo.setCourseConfig(config);
+        vo.setIsFinish(isFinish);
+        vo.setPlayDuration(duration);
+
+        //2、判断链接类型
+        if (param.getLinkType() != null && param.getLinkType() == 1) {
+            ResponseResult.ok(vo);
+        }
+        // 从Redis中获取用户目前的观看时长
+        String redisKey = "h5wxuser:watch:duration:" + param.getFsUserId() + ":" + param.getVideoId();
+        String durationCurrent = redisCache.getCacheObject(redisKey);
+
+        //3、获取看课记录
+        FsCourseWatchLog watchLog = courseWatchLogMapper.getWatchLogByFsUser(param.getVideoId(), param.getFsUserId());
+        if (durationCurrent != null) {
+            duration = Long.parseLong(durationCurrent);
+        } else {
+            duration = watchLog.getDuration();
+        }
+//
+//        if (course.getDuration()!=null){
+//            tipsTime = course.getDuration()/2;
+//        }
+        //判断是否完课
+        if (watchLog!=null && watchLog.getLogType() == 2) {
+            isFinish = 1;
+        }
+
+        //将视频时长也存到redis
+        String videoRedisKey = "h5wxuser:video:duration:" + param.getVideoId();
+        Long videoDuration = redisCache.getCacheObject(videoRedisKey);
+        if (videoDuration == null) {
+            redisCache.setCacheObject(videoRedisKey, courseVideoDetails != null ? courseVideoDetails.getDuration() : 0);
+        }
+        vo.setIsFinish(isFinish);
+        vo.setPlayDuration(duration);
+        return ResponseResult.ok(vo);
+    }
+
+    @Override
+    public R addWatchLogByLink(FsUserCourseAddCompanyUserParam param) {
+
         return null;
     }
+
+    @Override
+    public R updateWatchDurationWx(FsUserCourseVideoUParam param) {
+        //临时短链不做记录
+        if (param.getLinkType() != null && param.getLinkType() == 1){
+            return R.ok();
+        }
+
+        // 从Redis中获取观看时长
+        String redisKey = "h5wxuser:watch:duration:" + param.getUserId() + ":" + param.getVideoId();
+        try {
+            String durationStr = redisCache.getCacheObject(redisKey);
+            long duration = durationStr != null ? Long.parseLong(durationStr) : 0L;
+
+            // 更新Redis中的观看时长
+            if (param.getDuration() != null && param.getDuration() > duration) {
+                //24小时过期
+                redisCache.setCacheObject(redisKey, param.getDuration().toString(),2,TimeUnit.HOURS);
+            }
+
+            //更新缓存中的心跳时间
+            updateHeartbeatWx(param);
+            return R.ok();
+        } catch (Exception e) {
+            logger.error("更新看课时长失败:{}", redisKey, e.getMessage());
+            return R.error("更新看课时长失败");
+        }
+    }
+
+    //会员-更新心跳时间
+    public void updateHeartbeatWx(FsUserCourseVideoUParam param) {
+        String redisKey = "h5wxuser:watch:heartbeat:" + param.getUserId() + ":" + param.getVideoId();
+        redisCache.setCacheObject(redisKey, LocalDateTime.now().toString());
+        // 设置 Redis 记录的过期时间(例如 5 分钟)
+        redisCache.expire(redisKey, 300, TimeUnit.SECONDS);
+    }
 }

+ 24 - 0
fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoLinkDetailsVO.java

@@ -0,0 +1,24 @@
+package com.fs.course.vo.newfs;
+
+import com.fs.course.config.CourseConfig;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class FsUserCourseVideoLinkDetailsVO {
+
+    @ApiModelProperty(value = "课程视频和题库详情")
+    private FsUserCourseVideoDetailsVO courseVideoDetails;
+
+    @ApiModelProperty(value = "课程相关配置信息(默认的)")
+    private CourseConfig courseConfig;
+
+    @ApiModelProperty(value = "是否完课,1-是,0-否")
+    private Integer isFinish;
+
+    @ApiModelProperty(value = "看课时长")
+    private Long playDuration;
+
+}

+ 3 - 0
fs-service-system/src/main/java/com/fs/store/mapper/FsUserMapper.java

@@ -269,4 +269,7 @@ public interface FsUserMapper
     CompanyUserSummaryCountVO companyUserCount(@Param("companyUserId")String companyUserId);
 
     CompanyUserSummaryCountVO newUserRedPacketCount(@Param("companyUserId")String companyUserId);
+
+    List<FsUser> getFsUserByCompanyUserAndId(@Param("companyUserId")Long companyUserId, @Param("userId") Long userId);
+
 }

+ 28 - 0
fs-service-system/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml

@@ -627,4 +627,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </if>
         </where>
     </select>
+
+    <select id="getWatchLogByFsUser" resultType="com.fs.course.domain.FsCourseWatchLog">
+        SELECT
+            log_id,
+            user_id,
+            video_id,
+            log_type,
+            create_time,
+            update_time,
+            duration,
+            company_user_id,
+            company_id,
+            course_id,
+            send_type,
+            reward_type,
+            last_heartbeat_time,
+            sop_id,
+            finish_time,
+            send_finish_msg,
+            camp_period_time
+        FROM
+            fs_course_watch_log
+        WHERE
+            send_type = 1
+          AND video_id = #{videoId}
+          AND user_id = #{fsUserId}
+    </select>
+
 </mapper>

+ 31 - 74
fs-user-app/src/main/java/com/fs/app/controller/CourseWxH5Controller.java

@@ -5,34 +5,30 @@ import cn.hutool.json.JSONUtil;
 import com.fs.app.annotation.Login;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
-import com.fs.common.utils.StringUtils;
 import com.fs.course.config.CourseConfig;
-import com.fs.course.domain.FsCourseQuestionBank;
 import com.fs.course.domain.FsCourseWatchLog;
-import com.fs.course.param.FsUserCourseVideoAddKfUParam;
 import com.fs.course.param.FsUserCourseVideoFinishUParam;
+import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
+import com.fs.course.param.newfs.FsUserCourseVideoLinkParam;
+import com.fs.course.param.newfs.FsUserCourseVideoUParam;
 import com.fs.course.service.*;
-import com.fs.course.vo.FsUserCourseVideoH5DVO;
-import com.fs.course.vo.FsUserCourseVideoH5VO;
-import com.fs.course.vo.FsUserCourseVideoQuestionVO;
+import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
+import com.fs.course.vo.newfs.FsUserCourseVideoLinkDetailsVO;
 import com.fs.system.service.ISysConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.List;
+import javax.validation.Valid;
 
-@Api("个微-h5看课接口")
+@Api("会员-h5看课接口")
 @RestController
-@RequestMapping(value="/app/course/wx/h5")
-public class CourseWxH5Controller extends  AppBaseController{
-    Logger logger= LoggerFactory.getLogger(getClass());
+@RequestMapping(value = "/app/course/wx/h5")
+public class CourseWxH5Controller extends AppBaseController {
+    Logger logger = LoggerFactory.getLogger(getClass());
     @Autowired
     private IFsUserCourseService courseService;
 
@@ -54,14 +50,14 @@ public class CourseWxH5Controller extends  AppBaseController{
 
     @Login
     @ApiOperation("判断是否添加客服(是否关联销售)")
-    @PostMapping("/isAddCompanyUser")
-    public ResponseResult<Boolean> isAddCompanyUser(@RequestBody FsUserCourseVideoAddKfUParam param) {
+    @PostMapping("/isAddKf")
+    public ResponseResult<Boolean> isAddCompanyUser(@Valid @RequestBody FsUserCourseAddCompanyUserParam param) {
         Long userId = Long.parseLong(getUserId());
         param.setUserId(userId);
         return courseVideoService.isAddCompanyUser(param);
     }
 
-//    @ApiOperation("h5课程简介")
+    //    @ApiOperation("h5课程简介")
 //    @GetMapping("/getH5CourseByVideoId")
 //    public R getCourseByVideoId(@RequestParam("videoId") Long videoId,HttpServletRequest request)
 //    {
@@ -69,59 +65,20 @@ public class CourseWxH5Controller extends  AppBaseController{
 //        return R.ok().put("data",course);
 //    }
 //
-//    @ApiOperation("h5课程详情")
-//    @GetMapping("/getH5CourseVideoDetails")
-//    public R getCourseVideoDetails(FsUserCourseVideoFinishUParam param)
+    @ApiOperation("H5课程详情")
+    @GetMapping("/videoDetails")
+    public ResponseResult<FsUserCourseVideoLinkDetailsVO> getCourseVideoDetails(FsUserCourseVideoLinkParam param) {
+        return courseVideoService.getLinkCourseVideoDetails(param);
+    }
+
+
+//    @ApiOperation("添加看课记录")
+//    @PostMapping("/addWatchLogByLink")
+//    public R addWatchLogByLink(@RequestBody FsUserCourseAddCompanyUserParam param)
 //    {
-//        String json = configService.selectConfigByKey("course.config");
-//        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
-//        FsUserCourseVideoH5DVO course = courseService.selectFsUserCourseVideoH5DVOByVideoId(param.getVideoId());
-//
-//        List<FsUserCourseVideoQuestionVO> questionVOList = new ArrayList<>();
-//        if (StringUtils.isNotEmpty(course.getQuestionBankId())){
-//            String[] questionIds = course.getQuestionBankId().split(",");
-//            for (String questionId : questionIds){
-//                FsUserCourseVideoQuestionVO vo = new FsUserCourseVideoQuestionVO();
-//                FsCourseQuestionBank questionBank = questionBankService.selectFsCourseQuestionBankById(Long.parseLong(questionId));
-//                if (questionBank!=null&&questionBank.getStatus()!=0){
-//                    BeanUtils.copyProperties(questionBank,vo);
-//                    questionVOList.add(vo);
-//                }
-//            }
-//        }
-//        Long duration = 0L;
-//        long tipsTime = 0L;
-//        int isFinish = 0;
-//        if (param.getLinkType()!=null&&param.getLinkType()==1){
-//            return R.ok().put("course",course).put("questions",questionVOList).put("config",config).put("playDuration",duration).put("tipsTime",tipsTime).put("maxBufferLength",config.getMaxBufferLength());
-//        }
-//        // 从Redis中获取观看时长
-//        String redisKey = "h5user:watch:duration:" + param.getQwUserId()+ ":" + param.getQwExternalId() + ":" + param.getVideoId();
-//        String durationStr = redisCache.getCacheObject(redisKey);
-//        FsCourseWatchLog log = courseWatchLogService.getWatchCourseVideoH5(param.getVideoId(),param.getQwUserId(),param.getQwExternalId());
-//        //redis取不到查库
-//        if (durationStr != null) {
-//            duration = Long.parseLong(durationStr);
-//        }else {
-//            duration = log.getDuration();
-//        }
-//
-//        if (course.getDuration()!=null){
-//            tipsTime = course.getDuration()/2;
-//        }
-//        //判断是否完课
-//        if (log.getLogType()==2){
-//           isFinish=1;
-//        }
-//
-//        //将视频时长也存到redis
-//        String videoRedisKey = "h5user:video:duration:" + param.getVideoId();
-//        Long videoDuration = redisCache.getCacheObject(videoRedisKey);
-//        if (videoDuration==null){
-//            redisCache.setCacheObject(videoRedisKey,course.getDuration());
-//        }
 //
-//        return R.ok().put("course",course).put("questions",questionVOList).put("config",config).put("playDuration",duration).put("tipsTime",tipsTime).put("maxBufferLength",config.getMaxBufferLength()).put("isFinish",isFinish);    }
+//       return null;
+//    }
 //
 //
 //
@@ -133,12 +90,12 @@ public class CourseWxH5Controller extends  AppBaseController{
 //    }
 //
 //
-//    @ApiOperation("更新看课时长")
-//    @PostMapping("/updateWatchDuration")
-//    public R updateWatchDuration(@RequestBody FsUserCourseVideoFinishUParam param)
-//    {
-//        return courseVideoService.updateWatchDuration(param);
-//    }
+    @ApiOperation("更新看课时长")
+    @PostMapping("/updateWatchDuration")
+    public R updateWatchDuration(@RequestBody FsUserCourseVideoUParam param)
+    {
+        return courseVideoService.updateWatchDurationWx(param);
+    }
 //
 //
 //    @ApiOperation("获取缓冲流量")

+ 1 - 6
fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

@@ -31,7 +31,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
-@Api("个微-h5-微信相关接口")
+@Api("会员-h5-微信相关接口")
 @RestController
 @RequestMapping("/app/wx/h5/mp")
 @Slf4j
@@ -39,9 +39,6 @@ public class WxH5MpController {
     Logger logger = LoggerFactory.getLogger(getClass());
     @Autowired
     private WxMpService wxMpService;
-    private static final String MP_TOKEN = "U2qmxEbsp0PJFoLRvUDvIjVi9XPzuVc2";
-
-    private static final String EncodingAESKey = "P3HE7Gd1PJVQqCLoOMop5uYfjx9LwfY53rnC3VUuLZS";
 
     @Autowired
     private IFsUserService userService;
@@ -55,8 +52,6 @@ public class WxH5MpController {
     FsCourseWatchLogMapper fsCourseWatchLogMapper;
     @Autowired
     QwExternalContactMapper qwExternalContactMapper;
-    @Autowired
-    private FsCourseSopLogsMapper courseSopLogsMapper;
 
 
     @ApiOperation("课程分享链接公众号登录")