浏览代码

侧边栏语音 代码

三七 1 周之前
父节点
当前提交
55a254a058

+ 34 - 0
fs-qwhook-sop/src/main/java/com/fs/app/controller/ApisFsUserCourseVideoController.java

@@ -3,9 +3,11 @@ package com.fs.app.controller;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.R;
+import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.CloudHostUtils;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsUserCourse;
@@ -230,4 +232,36 @@ public class ApisFsUserCourseVideoController extends BaseController {
         return fsUserCourseVideoService.createRoomMiniLink(param);
     }
 
+    /**
+     * 创建 语音 链接
+     */
+
+    @RepeatSubmit
+    @PostMapping("/createVoiceLink")
+    @Log(title = "createVoiceLink", businessType = BusinessType.INSERT)
+    public R createVoiceLink(@RequestBody  FsCourseLinkMiniParam param) {
+
+        QwUser qwUser = qwExternalContactService.getQwUserByRedis(param.getCorpId().trim(), param.getQwUserId().trim());
+
+        if (StringUtil.strIsNullOrEmpty(param.getQwUserId())){
+            return R.error("用户id不能为空");
+        }
+        if (StringUtil.strIsNullOrEmpty(param.getCorpId())){
+            return R.error("企业id不能为空");
+        }
+
+        if (param.getExternalId()==null && param.getType()==1){
+            return R.error("客户id不能为空");
+        }
+
+        if (StringUtil.strIsNullOrEmpty(param.getVoiceTxt())){
+            return R.error("语音内容不能为空");
+        }
+
+        if (qwUser==null||qwUser.getCompanyId()==null||qwUser.getCompanyUserId()==null){
+            return R.error("员工未绑定 客服公司 或 客服 请先绑定");
+        }
+
+        return fsUserCourseVideoService.createVoiceLink(param,qwUser);
+    }
 }

+ 35 - 0
fs-qwhook-sop/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -4,9 +4,11 @@ import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.app.annotation.Login;
+import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
+import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.CloudHostUtils;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.StringUtils;
@@ -484,4 +486,37 @@ public class FsUserCourseVideoController {
             return fsUserCourseVideoService.createMiniLink(param);
         }
     }
+
+    /**
+     * 创建 语音 链接
+     */
+
+    @RepeatSubmit
+    @PostMapping("/createVoiceLink")
+    @Log(title = "createVoiceLink", businessType = BusinessType.INSERT)
+    public R createVoiceLink(@RequestBody  FsCourseLinkMiniParam param) {
+
+        QwUser qwUser = qwExternalContactService.getQwUserByRedis(param.getCorpId().trim(), param.getQwUserId().trim());
+
+        if (StringUtil.strIsNullOrEmpty(param.getQwUserId())){
+            return R.error("用户id不能为空");
+        }
+        if (StringUtil.strIsNullOrEmpty(param.getCorpId())){
+            return R.error("企业id不能为空");
+        }
+
+        if (param.getExternalId()==null && param.getType()==1){
+            return R.error("客户id不能为空");
+        }
+
+        if (StringUtil.strIsNullOrEmpty(param.getVoiceTxt())){
+            return R.error("语音内容不能为空");
+        }
+
+        if (qwUser==null||qwUser.getCompanyId()==null||qwUser.getCompanyUserId()==null){
+            return R.error("员工未绑定 客服公司 或 客服 请先绑定");
+        }
+
+        return fsUserCourseVideoService.createVoiceLink(param,qwUser);
+    }
 }

+ 1 - 0
fs-service/src/main/java/com/fs/course/domain/FsUserCourseVideo.java

@@ -74,6 +74,7 @@ public class FsUserCourseVideo extends BaseEntity
 
     @TableLogic(value = "0", delval = "1")
     private Integer isDel;
+    private Integer isPause;
 
     /**
      *  课题数组

+ 7 - 0
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -34,6 +34,13 @@ public interface FsUserCourseVideoMapper extends BaseMapper<FsUserCourseVideo> {
      */
     public FsUserCourseVideo selectFsUserCourseVideoByVideoId(Long videoId);
 
+    @Select("select video_id,course_id from fs_user_course_video " +
+            "where is_del = #{data.isDel} " +
+            "and is_pause = #{data.isPause} " +
+            "and is_first = #{data.isFirst} " +
+            "limit 1")
+    public FsUserCourseVideo selectFsUserCourseVideoByVoice(@Param("data") FsUserCourseVideo fsUserCourseVideo);
+
     @Select("select cv.description as videoDescription,uc.description as courseDescription from fs_user_course_video cv " +
             "LEFT JOIN  fs_user_course uc on cv.course_id = uc.course_id " +
             "where video_id = #{videoId} ")

+ 17 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseLinkMiniParam.java

@@ -20,10 +20,27 @@ public class FsCourseLinkMiniParam {
     * 客户表的主键
     */
     private Long externalUserId;
+    private Long externalId;
 
     /**
     * 客户的小程序id
     */
     private Long fsUserId;
 
+    /**
+     * 语音
+     */
+    private String voiceTxt;
+
+    /**
+     * 客户长字符串id
+     */
+    private String externalContactId;
+
+    /**
+     * 客户名称
+     */
+    private String externalContactName;
+
+
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java

@@ -17,6 +17,7 @@ import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
 import com.fs.course.vo.newfs.FsUserVideoListVO;
 import com.fs.his.domain.FsUser;
 import com.fs.his.vo.OptionsVO;
+import com.fs.qw.domain.QwUser;
 import com.fs.qw.param.FsUserCourseRedPageParam;
 
 import java.util.List;
@@ -191,6 +192,8 @@ public interface IFsUserCourseVideoService extends IService<FsUserCourseVideo> {
 
     R createMiniLink(FsCourseLinkMiniParam param);
 
+    R createVoiceLink(FsCourseLinkMiniParam param, QwUser qwUser);
+
     R createCartLink(FsCourseLinkMiniParam param);
 
     /**

+ 93 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -78,11 +78,16 @@ import com.fs.qw.mapper.*;
 import com.fs.qw.param.FsUserCourseRedPageParam;
 import com.fs.qw.service.IQwCompanyService;
 import com.fs.qw.service.IQwExternalContactService;
+import com.fs.qw.vo.QwSopCourseFinishTempSetting;
 import com.fs.qwApi.Result.QwAddContactWayResult;
 import com.fs.qwApi.param.QwAddContactWayParam;
 import com.fs.qwApi.service.QwApiService;
+import com.fs.sop.domain.QwSopLogs;
+import com.fs.sop.domain.QwSopTempVoice;
 import com.fs.sop.domain.SopUserLogsInfo;
 import com.fs.sop.mapper.SopUserLogsInfoMapper;
+import com.fs.sop.service.IQwSopLogsService;
+import com.fs.sop.service.IQwSopTempVoiceService;
 import com.fs.sop.service.ISopUserLogsInfoService;
 import com.fs.system.mapper.SysDictDataMapper;
 import com.fs.system.service.ISysConfigService;
@@ -108,6 +113,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -276,6 +282,12 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     @Autowired
     private FsDepVideoShowMapper fsDepVideoShowMapper;
 
+    @Autowired
+    private IQwSopTempVoiceService sopTempVoiceService;
+
+    @Autowired
+    private IQwSopLogsService iQwSopLogsService;
+
     @Value("${cloud_host.company_name}")
     private String companyName;
 
@@ -3393,6 +3405,87 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
 
     }
 
+    @Override
+    public R createVoiceLink(FsCourseLinkMiniParam param,QwUser qwUser) {
+
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        QwSopLogs sopLogs = new QwSopLogs();
+
+        sopLogs.setQwUserid(qwUser.getQwUserId());
+        sopLogs.setExternalUserId(param.getExternalContactId());
+        sopLogs.setExternalId(param.getExternalId());
+        sopLogs.setLogType(2);
+        sopLogs.setSendStatus(3L);
+        sopLogs.setSendTime(sdf.format(new Date()));
+        sopLogs.setCompanyId(qwUser.getCompanyId());
+        sopLogs.setReceivingStatus(0L);
+        sopLogs.setSopId("voiceSidebar");
+        sopLogs.setCorpId(qwUser.getCorpId());
+        sopLogs.setFsUserId(param.getFsUserId());
+        sopLogs.setSort(30000000);
+        sopLogs.setSendType(7);
+        sopLogs.setExternalUserName(param.getExternalContactName());
+
+
+        QwSopCourseFinishTempSetting setting = new QwSopCourseFinishTempSetting();
+
+        List<QwSopCourseFinishTempSetting.Setting> list = new ArrayList<>();
+
+        QwSopCourseFinishTempSetting.Setting st=new QwSopCourseFinishTempSetting.Setting();
+
+        QwSopTempVoice qwSopTempVoice = sopTempVoiceService.selectQwSopTempVoiceByCompanyUserIdAndVoiceTxt(qwUser.getCompanyUserId(), param.getVoiceTxt());
+        if (qwSopTempVoice != null && qwSopTempVoice.getVoiceUrl() != null && qwSopTempVoice.getRecordType() == 1) {
+
+            FsUserCourseVideo fsUserCourseVideo=new FsUserCourseVideo();
+            fsUserCourseVideo.setIsDel(0);
+            fsUserCourseVideo.setIsPause(0);
+            fsUserCourseVideo.setIsFirst(0);
+
+            String sopVideo = "sopVoiceLink:video:" + fsUserCourseVideo.getVideoId();
+
+            Integer cacheValue = redisCache.getCacheObject("sopVoiceLink:video");
+
+            int isPause = (cacheValue != null) ? cacheValue : 0;
+
+            Long videoId;
+
+            if (isPause ==0 ){
+                FsUserCourseVideo courseVideo = fsUserCourseVideoMapper.selectFsUserCourseVideoByVoice(fsUserCourseVideo);
+                redisCache.setCacheObject(sopVideo, courseVideo.getVideoId());
+                videoId=courseVideo.getVideoId();
+            }else {
+                videoId= Long.valueOf(cacheValue);
+            }
+
+
+            st.setContentType("7");
+            st.setValue(param.getVoiceTxt());
+            st.setVoiceUrl(qwSopTempVoice.getVoiceUrl());
+            st.setVoiceDuration(String.valueOf(qwSopTempVoice.getDuration()));
+            st.setVideoId(videoId);
+
+            setting.setVideoId(Math.toIntExact(videoId));
+        }else {
+            return R.error("未查询到语音素材");
+        }
+
+        list.add(st);
+
+        setting.setSetting(list);
+        setting.setType(2);
+        setting.setCourseType(0);
+
+        sopLogs.setContentJson(JSON.toJSONString(setting));
+        sopLogs.setQwUserKey(qwUser.getId());
+
+        iQwSopLogsService.insertQwSopLogs(sopLogs);
+
+        return R.ok();
+
+    }
+
     //插入观看记录
     private void addWatchLogIfNeeded(Long videoId, Long courseId,
                                      Long fsUserId, QwUser qwUser, Long externalId,Integer watchType) {