Просмотр исходного кода

根据声纹 自动转换成语音

三七 1 день назад
Родитель
Сommit
b0c77043f9

+ 66 - 3
fs-admin/src/main/java/com/fs/qw/qwTask/qwTask.java

@@ -1,18 +1,28 @@
 package com.fs.qw.qwTask;
 
+import com.fs.aiSoundReplication.param.TtsRequest;
+import com.fs.aiSoundReplication.service.impl.TtsServiceImpl;
+import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.param.VcCompanyUser;
+import com.fs.company.service.ICompanyUserService;
 import com.fs.course.service.IFinishCourseStatisticsSyncService;
 import com.fs.course.service.IFsUserCourseService;
+import com.fs.fastgptApi.vo.AudioVO;
 import com.fs.qw.domain.QwIpadServerLog;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.param.QwMandatoryRegistrParam;
 import com.fs.qw.service.*;
+import com.fs.sop.domain.QwSopTempVoice;
+import com.fs.sop.service.IQwSopTempContentService;
+import com.fs.sop.service.IQwSopTempVoiceService;
 import com.fs.sop.service.impl.QwSopLogsServiceImpl;
 import com.fs.sop.service.impl.QwSopServiceImpl;
 import com.fs.sop.service.ISopUserLogsService;
 import com.fs.statis.IFsStatisQwWatchService;
 import com.fs.statis.service.FsStatisSalerWatchService;
 import com.fs.wxwork.dto.WxWorkGetQrCodeDTO;
+import com.fs.wxwork.dto.WxwSilkVoceDTO;
 import com.fs.wxwork.service.WxWorkService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -22,9 +32,8 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Component("qwTask")
 public class qwTask {
@@ -90,6 +99,15 @@ public class qwTask {
     @Autowired
     private IFinishCourseStatisticsSyncService finishCourseStatisticsSyncService;
 
+    @Autowired
+    private IQwSopTempVoiceService iQwSopTempVoiceService;
+
+    @Autowired
+    private ICompanyUserService iCompanyUserService;
+
+    @Autowired
+    private TtsServiceImpl ttsServiceImpl;
+
 
     //正在使用
     public void qwExternalContact()
@@ -401,4 +419,49 @@ public class qwTask {
         contactWayService.resetQwContactWayUserLimit();
 
     }
+
+    /**
+    * 定时 将当天 生成的语音文本 转为 声音
+    */
+    public void convertSopVoiceEveryDay() {
+
+        try {
+            // 查询待生成声音的文本
+            List<QwSopTempVoice> qwSopTempVoices = iQwSopTempVoiceService.convertSopVoiceEveryDay();
+
+            // 过滤 出销售id
+            List<Long> userIds = qwSopTempVoices.stream()
+                    .map(QwSopTempVoice::getCompanyUserId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            // 查询 销售 是否绑定了且录制了音色
+            List<VcCompanyUser> vcCompanyUsers = iCompanyUserService.selectVcCompanyUserList(userIds);
+
+            // 做键值 方便匹配
+            Map<Long, VcCompanyUser> vcUserMap = vcCompanyUsers.stream()
+                    .collect(Collectors.toMap(VcCompanyUser::getCompanyUserId, v -> v, (a, b) -> a));
+            List<QwSopTempVoice> filteredVoices = qwSopTempVoices.stream()
+                    .filter(v -> v.getCompanyUserId() != null && vcUserMap.containsKey(v.getCompanyUserId()))
+                    .collect(Collectors.toList());
+
+            filteredVoices.forEach(item -> {
+                VcCompanyUser vcCompanyUser = vcUserMap.get(item.getCompanyUserId());
+                AudioVO audioVO = ttsServiceImpl.textToSpeech(new TtsRequest(null, null, vcCompanyUser.getSpeakerId(), item.getVoiceTxt()));
+                item.setVoiceUrl(audioVO.getUrl());
+                item.setDuration(audioVO.getDuration());
+
+                QwUser user = qwUserMapper.selectQwUserconvertSopVoice(item.getCompanyUserId());
+                ttsServiceImpl.ttsChargeByCount(vcCompanyUser,audioVO,user);
+
+            });
+            // 批量更新
+            iQwSopTempVoiceService.saveOrUpdateBatch(filteredVoices);
+        }catch (Exception e){
+
+        }
+
+
+    }
+
 }

+ 59 - 2
fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -3,13 +3,17 @@ package com.fs.app.controller;
 
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
+import com.fs.aiSoundReplication.param.TtsRequest;
+import com.fs.aiSoundReplication.service.impl.TtsServiceImpl;
 import com.fs.app.task.qwTask;
 import com.fs.app.taskService.*;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.param.VcCompanyUser;
 import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyUserService;
 import com.fs.company.vo.RedPacketMoneyVO;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.mapper.FsCourseRedPacketLogMapper;
@@ -19,6 +23,7 @@ import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
 import com.fs.course.service.*;
 import com.fs.course.vo.FsUserCourseVideoQVO;
 import com.fs.fastGpt.domain.FastGptPushTokenTotal;
+import com.fs.fastgptApi.vo.AudioVO;
 import com.fs.his.domain.FsIntegralCount;
 import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsInquiryOrderService;
@@ -37,6 +42,7 @@ import com.fs.qwApi.domain.QwExternalContactResult;
 import com.fs.qwApi.domain.QwResult;
 import com.fs.qwApi.domain.inner.ExternalContact;
 import com.fs.qwApi.service.QwApiService;
+import com.fs.sop.domain.QwSopTempVoice;
 import com.fs.sop.mapper.QwSopLogsMapper;
 import com.fs.sop.mapper.QwSopMapper;
 import com.fs.sop.mapper.SopUserLogsMapper;
@@ -59,6 +65,7 @@ import com.fs.app.task.qwTask;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Api("公共接口")
 @RestController
@@ -185,9 +192,59 @@ public class CommonController {
     private IQwContactWayService contactWayService;
 
 
+    @Autowired
+    private IQwSopTempVoiceService iQwSopTempVoiceService;
+
+    @Autowired
+    private ICompanyUserService iCompanyUserService;
+
+    @Autowired
+    private TtsServiceImpl ttsServiceImpl;
+
+
     @GetMapping("/resetQwContactWayUserLimit")
-    public void resetQwContactWayUserLimit()  {
-        contactWayService.resetQwContactWayUserLimit();
+    /**
+     * 定时 将当天 生成的语音文本 转为 声音
+     */
+    public void convertSopVoiceEveryDay() {
+
+        try {
+            // 查询待生成声音的文本
+            List<QwSopTempVoice> qwSopTempVoices = iQwSopTempVoiceService.convertSopVoiceEveryDay();
+
+            // 过滤 出销售id
+            List<Long> userIds = qwSopTempVoices.stream()
+                    .map(QwSopTempVoice::getCompanyUserId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            // 查询 销售 是否绑定了且录制了音色
+            List<VcCompanyUser> vcCompanyUsers = iCompanyUserService.selectVcCompanyUserList(userIds);
+
+            // 做键值 方便匹配
+            Map<Long, VcCompanyUser> vcUserMap = vcCompanyUsers.stream()
+                    .collect(Collectors.toMap(VcCompanyUser::getCompanyUserId, v -> v, (a, b) -> a));
+            List<QwSopTempVoice> filteredVoices = qwSopTempVoices.stream()
+                    .filter(v -> v.getCompanyUserId() != null && vcUserMap.containsKey(v.getCompanyUserId()))
+                    .collect(Collectors.toList());
+
+            filteredVoices.forEach(item -> {
+                VcCompanyUser vcCompanyUser = vcUserMap.get(item.getCompanyUserId());
+                AudioVO audioVO = ttsServiceImpl.textToSpeech(new TtsRequest(null, null, vcCompanyUser.getSpeakerId(), item.getVoiceTxt()));
+                item.setVoiceUrl(audioVO.getUrl());
+                item.setDuration(audioVO.getDuration());
+                item.setUserVoiceUrl(audioVO.getWavUrl());
+                QwUser user = qwUserMapper.selectQwUserconvertSopVoice(item.getCompanyUserId());
+                ttsServiceImpl.ttsChargeByCount(vcCompanyUser,audioVO,user);
+
+            });
+            // 批量更新
+            iQwSopTempVoiceService.saveOrUpdateBatch(filteredVoices);
+        }catch (Exception e){
+
+        }
+
+
     }
     @GetMapping("/qwContactWay")
     public void qwContactWay(String userID) throws Exception {

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyFsUserMapper.java

@@ -1,6 +1,7 @@
 package com.fs.company.mapper;
 
 import com.fs.company.domain.CompanyFsUser;
+import com.fs.company.param.VcCompanyUser;
 import com.fs.his.domain.FsUser;
 import com.fs.his.vo.CompanyUserBindUserVO;
 import org.apache.ibatis.annotations.Delete;
@@ -50,4 +51,6 @@ public interface CompanyFsUserMapper {
 
     @Delete("delete from company_fs_user WHERE id=#{id}")
     int deleteById(Long id);
+
+    List<VcCompanyUser> selectVcCompanyUserList(@Param("list") List<Long> userIds);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java

@@ -6,6 +6,7 @@ import com.fs.company.domain.CompanyUser;
 import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserCodeParam;
 import com.fs.company.param.CompanyUserQwParam;
+import com.fs.company.param.VcCompanyUser;
 import com.fs.company.vo.*;
 import com.fs.his.domain.FsUser;
 import com.fs.his.vo.CitysAreaVO;
@@ -311,4 +312,6 @@ public interface ICompanyUserService {
      * 获取销售绑定的fs_user
      */
     int countCompanyUserByUserId(Long userId);
+
+    List<VcCompanyUser> selectVcCompanyUserList(List<Long> userIds);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -20,6 +20,7 @@ import com.fs.company.mapper.*;
 import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserCodeParam;
 import com.fs.company.param.CompanyUserQwParam;
+import com.fs.company.param.VcCompanyUser;
 import com.fs.company.service.*;
 import com.fs.company.vo.*;
 import com.fs.config.cloud.CloudHostProper;
@@ -1227,4 +1228,9 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return 0;
     }
 
+    @Override
+    public List<VcCompanyUser> selectVcCompanyUserList(List<Long> userIds) {
+        return companyFsUserMapper.selectVcCompanyUserList(userIds);
+    }
+
 }

+ 3 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwUserMapper.java

@@ -540,4 +540,7 @@ public interface QwUserMapper extends BaseMapper<QwUser>
      *  根据主键ID集合查询企微用户
      * */
     List<QwUser> selectQwUserListByIds(List<Long> ids);
+
+    @Select("select * from qw_user where company_user_id =#{companyUserId} and is_del = 0 order by id asc limit 1 ")
+    QwUser selectQwUserconvertSopVoice(@Param("companyUserId") Long companyUserID);
 }

+ 4 - 0
fs-service/src/main/java/com/fs/sop/mapper/QwSopTempVoiceMapper.java

@@ -90,4 +90,8 @@ public interface QwSopTempVoiceMapper extends BaseMapper<QwSopTempVoice>{
     @DataSource(DataSourceType.SOP)
     List<QwSopTempVoice> selectQwSopTempVoiceNewList(QwSopTempVoice sopTempVoice);
 
+    @DataSource(DataSourceType.SOP)
+    List<QwSopTempVoice> convertSopVoiceEveryDay();
+
+
 }

+ 2 - 0
fs-service/src/main/java/com/fs/sop/service/IQwSopTempVoiceService.java

@@ -89,4 +89,6 @@ public interface IQwSopTempVoiceService extends IService<QwSopTempVoice>{
     QwSopTempVoice selectQwSopTempVoiceByIdAndUserVoiceUrl(Long id);
 
     List<QwSopTempVoice> selectQwSopTempVoiceNewList(QwSopTempVoice sopTempVoice);
+
+    List<QwSopTempVoice> convertSopVoiceEveryDay();
 }

+ 5 - 0
fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempVoiceServiceImpl.java

@@ -330,4 +330,9 @@ public class QwSopTempVoiceServiceImpl extends ServiceImpl<QwSopTempVoiceMapper,
     public List<QwSopTempVoice> selectQwSopTempVoiceNewList(QwSopTempVoice sopTempVoice) {
         return qwSopTempVoiceMapper.selectQwSopTempVoiceNewList(sopTempVoice);
     }
+
+    @Override
+    public List<QwSopTempVoice> convertSopVoiceEveryDay() {
+        return qwSopTempVoiceMapper.convertSopVoiceEveryDay();
+    }
 }

+ 9 - 0
fs-service/src/main/resources/mapper/company/CompanyFsUserMapper.xml

@@ -70,5 +70,14 @@
         SELECT GROUP_CONCAT(fs_user_id) FROM  company_fs_user   WHERE company_user_id=#{companyUserId}
     </select>
 
+    <select id="selectVcCompanyUserList" resultType="com.fs.company.param.VcCompanyUser">
+        select id,speaker_id,company_user_id from vc_company_user
+         where upload_url is not null
+                and company_user_id in
+                    <foreach collection="list" item="item" open="(" separator="," close=")">
+                    #{item}
+                    </foreach>
+    </select>
+
 
 </mapper>

+ 10 - 0
fs-service/src/main/resources/mapper/sop/QwSopTempVoiceMapper.xml

@@ -169,4 +169,14 @@
     <delete id="remove">
         delete from qw_sop_temp_voice a where a.temp_id = #{tempId} and a.day_id =#{dayId}
     </delete>
+
+    <select id="convertSopVoiceEveryDay" resultType="com.fs.sop.domain.QwSopTempVoice">
+        SELECT id,company_user_id,voice_txt
+        FROM qw_sop_temp_voice
+        WHERE voice_url IS NULL
+          AND record_type = 0
+          AND DATE(create_time) >= CURDATE() - INTERVAL 1 DAY
+    </select>
+
+
 </mapper>