Browse Source

火山云迁移和配置

zyp 3 days ago
parent
commit
ff6e7852eb
66 changed files with 351 additions and 109 deletions
  1. 8 0
      fs-service/pom.xml
  2. 4 0
      fs-service/src/main/java/com/fs/config/cloud/CloudHostProper.java
  3. 30 0
      fs-service/src/main/java/com/fs/core/config/VolcEngineConfiguration.java
  4. 4 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCourseVideo.java
  5. 6 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java
  6. 12 0
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java
  7. 205 2
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  8. 5 0
      fs-service/src/main/resources/application-common.yml
  9. 1 0
      fs-service/src/main/resources/application-config-bly.yml
  10. 1 0
      fs-service/src/main/resources/application-config-dev-czt.yml
  11. 1 0
      fs-service/src/main/resources/application-config-dev-jnlzjk.yml
  12. 1 0
      fs-service/src/main/resources/application-config-dev-yjb.yml
  13. 1 0
      fs-service/src/main/resources/application-config-dev.yml
  14. 1 0
      fs-service/src/main/resources/application-config-druid-bjczwh.yml
  15. 1 0
      fs-service/src/main/resources/application-config-druid-bjzm-test.yml
  16. 1 0
      fs-service/src/main/resources/application-config-druid-bjzm.yml
  17. 1 0
      fs-service/src/main/resources/application-config-druid-bnkc.yml
  18. 1 0
      fs-service/src/main/resources/application-config-druid-cfryt-test.yml
  19. 1 0
      fs-service/src/main/resources/application-config-druid-cfryt.yml
  20. 1 0
      fs-service/src/main/resources/application-config-druid-cqtyt.yml
  21. 1 0
      fs-service/src/main/resources/application-config-druid-czt.yml
  22. 1 0
      fs-service/src/main/resources/application-config-druid-ddgy.yml
  23. 1 0
      fs-service/src/main/resources/application-config-druid-drk-test.yml
  24. 1 0
      fs-service/src/main/resources/application-config-druid-drk.yml
  25. 1 0
      fs-service/src/main/resources/application-config-druid-fby.yml
  26. 1 0
      fs-service/src/main/resources/application-config-druid-gzzdy.yml
  27. 1 0
      fs-service/src/main/resources/application-config-druid-hat.yml
  28. 1 0
      fs-service/src/main/resources/application-config-druid-hcl.yml
  29. 1 0
      fs-service/src/main/resources/application-config-druid-hdt.yml
  30. 1 0
      fs-service/src/main/resources/application-config-druid-heyantang.yml
  31. 1 0
      fs-service/src/main/resources/application-config-druid-hst.yml
  32. 1 0
      fs-service/src/main/resources/application-config-druid-hsyy.yml
  33. 1 0
      fs-service/src/main/resources/application-config-druid-hyt.yml
  34. 1 0
      fs-service/src/main/resources/application-config-druid-hzyy.yml
  35. 1 0
      fs-service/src/main/resources/application-config-druid-jkj.yml
  36. 1 0
      fs-service/src/main/resources/application-config-druid-jnlzjk.yml
  37. 1 0
      fs-service/src/main/resources/application-config-druid-jnmy.yml
  38. 1 0
      fs-service/src/main/resources/application-config-druid-jnsyj.yml
  39. 1 0
      fs-service/src/main/resources/application-config-druid-jzzx.yml
  40. 1 0
      fs-service/src/main/resources/application-config-druid-knt.yml
  41. 0 103
      fs-service/src/main/resources/application-config-druid-knt2.yml
  42. 1 0
      fs-service/src/main/resources/application-config-druid-kyt.yml
  43. 1 0
      fs-service/src/main/resources/application-config-druid-lmjy.yml
  44. 1 0
      fs-service/src/main/resources/application-config-druid-nmgyt.yml
  45. 1 0
      fs-service/src/main/resources/application-config-druid-qdtst.yml
  46. 1 0
      fs-service/src/main/resources/application-config-druid-sczy.yml
  47. 1 0
      fs-service/src/main/resources/application-config-druid-sft.yml
  48. 1 0
      fs-service/src/main/resources/application-config-druid-sxjz.yml
  49. 2 0
      fs-service/src/main/resources/application-config-druid-syysy-test.yml
  50. 1 0
      fs-service/src/main/resources/application-config-druid-syysy.yml
  51. 1 0
      fs-service/src/main/resources/application-config-druid-whhm.yml
  52. 1 0
      fs-service/src/main/resources/application-config-druid-xfk.yml
  53. 1 0
      fs-service/src/main/resources/application-config-druid-xzt.yml
  54. 1 0
      fs-service/src/main/resources/application-config-druid-yjb.yml
  55. 3 2
      fs-service/src/main/resources/application-config-druid-ylrz.yml
  56. 1 0
      fs-service/src/main/resources/application-config-druid-yxj.yml
  57. 1 0
      fs-service/src/main/resources/application-config-druid-yzt.yml
  58. 1 0
      fs-service/src/main/resources/application-config-druid-zsjk.yml
  59. 1 0
      fs-service/src/main/resources/application-config-fzbt.yml
  60. 1 0
      fs-service/src/main/resources/application-config-myhk.yml
  61. 1 1
      fs-service/src/main/resources/application-druid-jnmy-test.yml
  62. 6 0
      fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml
  63. 3 0
      fs-user-app/src/main/java/com/fs/app/controller/WxPayController.java
  64. 10 0
      fs-user-app/src/main/java/com/fs/app/controller/course/CourseQwController.java
  65. 1 0
      fs-user-app/src/main/java/com/fs/app/controller/store/WxPayScrmController.java
  66. 2 1
      fs-user-app/src/main/resources/application.yml

+ 8 - 0
fs-service/pom.xml

@@ -291,6 +291,14 @@
 <!--            <version>1.1.26</version>-->
 <!--        </dependency>-->
 
+        <!--火山云sdk-->
+        <dependency>
+            <groupId>com.volcengine</groupId>
+            <artifactId>volc-sdk-java</artifactId>
+            <version>1.0.250</version>
+        </dependency>
+
+
     </dependencies>
 
 </project>

+ 4 - 0
fs-service/src/main/java/com/fs/config/cloud/CloudHostProper.java

@@ -15,4 +15,8 @@ public class CloudHostProper {
 
     @Value("${cloud_host.projectCode}")
     private String projectCode;
+
+    //火山云空间名称
+    @Value("${cloud_host.spaceName}")
+    public String spaceName;
 }

+ 30 - 0
fs-service/src/main/java/com/fs/core/config/VolcEngineConfiguration.java

@@ -0,0 +1,30 @@
+package com.fs.core.config;
+
+import com.volcengine.service.vod.IVodService;
+import com.volcengine.service.vod.impl.VodServiceImpl;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class VolcEngineConfiguration {
+    @Value("${hsy.access_key:''}")
+    private String access_key;
+
+    @Value("${hsy.secret_key:''}")
+    private String secret_key;
+    @Value("${hsy.region:''}")
+    private String region;
+    @Bean
+    public IVodService vodService() throws Exception {
+        // 根据区域获取火山云点播服务实例
+        IVodService vodService = VodServiceImpl.getInstance(region);
+
+        // 设置 AccessKey 和 SecretKey
+        vodService.setAccessKey(access_key);
+        vodService.setSecretKey(secret_key);
+
+        return vodService;
+    }
+}
+

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

@@ -124,4 +124,8 @@ public class FsUserCourseVideo extends BaseEntity
 
     // 是否上架 0:上架,1:下架
     private Integer isOnPut;
+
+    private String jobId;
+
+    private String vid;
 }

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

@@ -265,4 +265,10 @@ public interface FsUserCourseVideoMapper extends BaseMapper<FsUserCourseVideo> {
     @Select("select video_id,is_first,course_sort,tg_id,watching_tg_id,watched_tg_id,watching_tag_id,watched_tag_id,tag_group_id from fs_user_course_video")
     @MapKey("videoId")
     Map<Long, FsUserCourseVideo> selectAllMap();
+
+    @Select("select * from fs_user_course_video where line_two is not null and job_id is null")
+    List<FsUserCourseVideo> selectVideoByHuaWei();
+
+    @Select("select * from fs_user_course_video where job_id is not null and vid is null")
+    List<FsUserCourseVideo> selectVideoByJobId();
 }

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

@@ -222,4 +222,16 @@ public interface IFsUserCourseVideoService extends IService<FsUserCourseVideo> {
     R sendAppReward(FsCourseSendRewardUParam param);
 
     R isSaveKf(FsUserCourseVideoAddKfUParam param);
+
+    /**
+     * 上传视频到火山云通过URL(把华为云的视频传到火山去并且存储JOBID)
+     * @return
+     */
+    R uploadVideoToHuoShanByUrl();
+
+    /**
+     * 通过jobId拿vid
+     * @return
+     */
+    R getVidByJob();
 }

+ 205 - 2
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -79,6 +79,14 @@ import com.fs.system.mapper.SysDictDataMapper;
 import com.fs.system.service.ISysConfigService;
 import com.fs.voice.utils.StringUtil;
 import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
+import com.volcengine.service.vod.IVodService;
+import com.volcengine.service.vod.model.business.VodUrlUploadURLSet;
+import com.volcengine.service.vod.model.request.VodGetMediaInfosRequest;
+import com.volcengine.service.vod.model.request.VodQueryUploadTaskInfoRequest;
+import com.volcengine.service.vod.model.request.VodUrlUploadRequest;
+import com.volcengine.service.vod.model.response.VodGetMediaInfosResponse;
+import com.volcengine.service.vod.model.response.VodQueryUploadTaskInfoResponse;
+import com.volcengine.service.vod.model.response.VodUrlUploadResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.redisson.api.RLock;
@@ -94,11 +102,12 @@ 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.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 
@@ -4030,5 +4039,199 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
     }
 
 
+    @Override
+    public R uploadVideoToHuoShanByUrl() {
+        List <FsUserCourseVideo> videos = fsUserCourseVideoMapper.selectVideoByHuaWei();
+        for (FsUserCourseVideo video : videos){
+            uploadVideoByUrl(video);
+        }
+        return R.ok();
+    }
+
+    @Autowired
+    private IVodService vodService;
+
+    //通过Url上传视频
+    public void uploadVideoByUrl(FsUserCourseVideo courseVideo) {
+
+        try {
+            VodUrlUploadRequest.Builder reqBuilder = VodUrlUploadRequest.newBuilder();
+            //空间名称
+            reqBuilder.setSpaceName(cloudHostProper.getSpaceName());
+            VodUrlUploadURLSet.Builder uRLSetsBuilder = VodUrlUploadURLSet.newBuilder();
+            //源文件 URL
+            uRLSetsBuilder.setSourceUrl(courseVideo.getLineTwo());//华为云
+            //存储类型。默认为 1。取值如下:
+            //1:标准存储。
+            //2:归档存储。
+            //3:低频存储。
+            uRLSetsBuilder.setStorageClass(1);
+            //文件后缀,即点播存储中文件的类型。
+            uRLSetsBuilder.setFileExtension(".mp4");
+            //用户额外信息,最大长度 512 字节。
+            uRLSetsBuilder.setCallbackArgs("");
+            // 火山云存储路径(文件上传后在火山云的路径)
+            String datePath = new SimpleDateFormat("yyyyMMdd").format(new Date());
+            String fileName = System.currentTimeMillis() + ".mp4";
+            String remoteFileName = "fs/" + datePath + "/" + fileName;
+            uRLSetsBuilder.setFileName(remoteFileName);
+            reqBuilder.addURLSets(uRLSetsBuilder);
+
+            VodUrlUploadResponse resp = vodService.uploadMediaByUrl(reqBuilder.build());
+
+            if (resp.getResponseMetadata().hasError()) {
+                log.info("上传返回异常:{}",resp.getResponseMetadata().getError());
+                System.exit(-1);
+            }else {
+                FsUserCourseVideo video = new FsUserCourseVideo();
+                video.setVideoId(courseVideo.getVideoId());
+                video.setJobId(resp.getResult().getData(0).getJobId());
+                //更新JobId
+                fsUserCourseVideoMapper.updateFsUserCourseVideo(video);
+            }
+            log.info("上传返回参数:{}",resp);
+        } catch (Exception e) {
+            throw new RuntimeException("视频上传失败: " + e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public R getVidByJob() {
+        // 查询有JobId的视频
+        List<FsUserCourseVideo> list = fsUserCourseVideoMapper.selectVideoByJobId();
+        if (list.isEmpty()) {
+            log.info("没有待上传的视频任务");
+            return R.error();
+        }
+        // 按五百一批切割
+        List<List<FsUserCourseVideo>> batches = splitList(list, 500);
+        log.info("总任务 {} 条,分成 {} 批", list.size(), batches.size());
+
+        int batchIndex = 1;
+
+        // 批次顺序执行,每批内部多线程并发执行
+        for (List<FsUserCourseVideo> batch : batches) {
+
+            log.info("开始执行批次 {}/{},本批任务 {} 条", batchIndex, batches.size(), batch.size());
+
+            CountDownLatch latch = new CountDownLatch(batch.size());
+
+            for (FsUserCourseVideo video : batch) {
+                uploadExecutor.submit(() -> {
+                    try {
+                        uploadSingleTaskWithRetry(video);
+                    } finally {
+                        latch.countDown();
+                    }
+                });
+            }
+
+            // 等待这一批全部完成
+            try {
+                latch.await();
+            } catch (InterruptedException e) {
+                log.error("批次等待异常", e);
+            }
+
+            log.info("批次 {}/{} 执行完成", batchIndex, batches.size());
+            batchIndex++;
+        }
+
+        log.info("全部批次执行完成");
+        return R.ok();
+    }
+    private final ExecutorService uploadExecutor = new ThreadPoolExecutor(
+            8,  // core
+            16, // max
+            60L, TimeUnit.SECONDS,
+            new LinkedBlockingQueue<>(2000),
+            new ThreadFactory() {
+                private final AtomicInteger index = new AtomicInteger(1);
+
+                @Override
+                public Thread newThread(Runnable r) {
+                    return new Thread(r, "video-upload-" + index.getAndIncrement());
+                }
+            },
+            new ThreadPoolExecutor.CallerRunsPolicy()
+    );
+
+    public <T> List<List<T>> splitList(List<T> list, int batchSize) {
+        List<List<T>> result = new ArrayList<>();
+        int total = list.size();
+        for (int i = 0; i < total; i += batchSize) {
+            result.add(list.subList(i, Math.min(total, i + batchSize)));
+        }
+        return result;
+    }
+
+    //根据jobid查询上传视频的vid
+    public void getVidByJobId(FsUserCourseVideo courseVideo){
+        try {
+            VodQueryUploadTaskInfoRequest.Builder reqBuilder = VodQueryUploadTaskInfoRequest.newBuilder();
+            reqBuilder.setJobIds(courseVideo.getJobId());
+
+            VodQueryUploadTaskInfoResponse resp = vodService.queryUploadTaskInfo(reqBuilder.build());
+            if (resp.getResponseMetadata().hasError()) {
+                System.out.println(resp.getResponseMetadata().getError());
+                System.exit(-1);
+            }else {
+                FsUserCourseVideo video = new FsUserCourseVideo();
+                video.setVideoId(courseVideo.getVideoId());
+                video.setVid(resp.getResult().getData().getMediaInfoList(0).getVid());
+                fsUserCourseVideoMapper.updateFsUserCourseVideo(video);
+            }
+            System.out.println(resp);
+        } catch (Exception e) {
+            throw new RuntimeException("查询 URL 批量上传任务状态: " + e.getMessage(), e);
+        }
+    }
+
+
+    public void getVideoInfoByVid(FsUserCourseVideo courseVideo) {
+        try {
+            VodGetMediaInfosRequest.Builder reqBuilder = VodGetMediaInfosRequest.newBuilder();
+            reqBuilder.setVids(courseVideo.getVid());
+
+            VodGetMediaInfosResponse resp = vodService.getMediaInfos20230701(reqBuilder.build());
+            if (resp.getResponseMetadata().hasError()) {
+                System.out.println(resp.getResponseMetadata().getError());
+                System.exit(-1);
+            }else {
+                FsUserCourseVideo video = new FsUserCourseVideo();
+                video.setVideoId(courseVideo.getVideoId());
+                video.setLineTwo(resp.getResult().getMediaInfoList(0).getSourceInfo().getStoreUri());
+                fsUserCourseVideoMapper.updateFsUserCourseVideo(video);
+            }
+            System.out.println(resp);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public void uploadSingleTaskWithRetry(FsUserCourseVideo courseVideo) {
+        int maxRetry = 3;
+        for (int i = 1; i <= maxRetry; i++) {
+            try {
+                //获取上传成功的视频vid,同步到数据库
+                getVidByJobId(courseVideo);
+                //查询需要上传的视频,上传后将视频任务id存到数据库
+//                uploadVideoByUrl(fsUserVideo);
+                //根据视频vid获取火山云的视频信息,并同步到数据库
+                /**
+                 * 下面这个方法调用前去润天his_java确认一下,是否一致的
+                 */
+                //getVideoInfoByVid(fsUserVideo);
+                return;
+            } catch (Exception e) {
+                log.error("视频 {} 上传失败,第 {} 次重试,原因:{}",
+                        courseVideo.getVideoId(), i, e.getMessage());
+                if (i == maxRetry) {
+                    log.error("视频 {} 上传最终失败!", courseVideo.getVideoId());
+                }
+            }
+        }
+    }
 }
 

+ 5 - 0
fs-service/src/main/resources/application-common.yml

@@ -143,3 +143,8 @@ wechat:
   api:
     base-url: https://api.weixin.qq.com
     upload-shipping-info: /wxa/sec/order/upload_shipping_info
+hsy:
+  access_key: AKLTZTc4YTE4ZjI2OWViNDNjZGI2NjhiYTI5Njc5ZjA1Mzk
+  secret_key: WXpjelpUYzFOakF5TUdObE5EZGtNR0ZsWXpKaU1tTmtZakk1WXpObE4yRQ==
+  region: cn-north-1
+

+ 1 - 0
fs-service/src/main/resources/application-config-bly.yml

@@ -107,6 +107,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 倍力优
   projectCode: BLY
+  spaceName:
 headerImg:
   imgUrl: https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250115/1736944490230.png
 

+ 1 - 0
fs-service/src/main/resources/application-config-dev-czt.yml

@@ -85,6 +85,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 纯正堂
   projectCode: CZT
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-dev-jnlzjk.yml

@@ -86,6 +86,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 济南联志健康
   projectCode: LZJK
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-dev-yjb.yml

@@ -101,6 +101,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 医健宝
   projectCode: YJB
+  spaceName:
 headerImg:
   imgUrl: https://jz-cos-1356808054.cos.ap-chengdu.myqcloud.com/fs/20250515/0877754b59814ea8a428fa3697b20e68.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-dev.yml

@@ -106,6 +106,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 金康健
   projectCode: DEV
+  spaceName:
 headerImg:
   imgUrl: https://jz-cos-1356808054.cos.ap-chengdu.myqcloud.com/fs/20250515/0877754b59814ea8a428fa3697b20e68.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-bjczwh.yml

@@ -85,6 +85,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 北京存在文化
   projectCode: CZWH
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-druid-bjzm-test.yml

@@ -85,6 +85,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 北京卓美
   projectCode: BJZM
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-druid-bjzm.yml

@@ -85,6 +85,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 北京卓美
   projectCode: BJZM
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-druid-bnkc.yml

@@ -85,6 +85,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 百年康成
   projectCode: BNKC
+  spaceName:
 headerImg:
   imgUrl: https://bnkc-1363824368.cos.ap-chongqing.myqcloud.com/fs/logo/bnkc.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-cfryt-test.yml

@@ -76,6 +76,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 赤峰润
   projectCode: ryt
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-cfryt.yml

@@ -82,6 +82,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 赤峰润
   projectCode: ryt
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-cqtyt.yml

@@ -81,6 +81,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 重庆泰医堂
   projectCode: CQTYT
+  spaceName:
 headerImg:
   imgUrl: https
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-czt.yml

@@ -85,6 +85,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 纯正堂
   projectCode: CZT
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-druid-ddgy.yml

@@ -87,6 +87,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 叮当国医
   projectCode: DDGY
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://ddgy-1323137866.cos.ap-chongqing.myqcloud.com/fs/20251010/ddgy.jpg

+ 1 - 0
fs-service/src/main/resources/application-config-druid-drk-test.yml

@@ -79,6 +79,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 德瑞康
   projectCode: DRK
+  spaceName:
 headerImg:
   imgUrl: https://drk-1363981074.cos.ap-chongqing.myqcloud.com/fs/logo/30d7a0d1ec31e5ac16c6e96d5ca76ad.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-drk.yml

@@ -79,6 +79,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 德瑞康
   projectCode: DRK
+  spaceName:
 headerImg:
   imgUrl: https://drk-1363981074.cos.ap-chongqing.myqcloud.com/fs/logo/30d7a0d1ec31e5ac16c6e96d5ca76ad.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-fby.yml

@@ -106,6 +106,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 福本源
   projectCode: FBY
+  spaceName:
 headerImg:
   imgUrl: https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/fs/20250730/1753840024082.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-gzzdy.yml

@@ -83,6 +83,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 广州郑多燕
   projectCode: GZZDY
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hat.yml

@@ -87,6 +87,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 恒安图
   projectCode: HAT
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://hat-1323137866.cos.ap-chongqing.myqcloud.com/fs/20250928/hatlogo.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hcl.yml

@@ -90,6 +90,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 恒春来
   projectCode: HCL
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: http://hcl-1b2b.obs.cn-south-1.myhuaweicloud.com/fs/20250815/1755228988455.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hdt.yml

@@ -86,6 +86,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 弘德堂
   projectCode: HDT
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://jz-cos-1356808054.cos.ap-chengdu.myqcloud.com/fs/20250515/0877754b59814ea8a428fa3697b20e68.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-heyantang.yml

@@ -80,6 +80,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 鹤颜堂
   projectCode: CDHYT
+  spaceName:
 headerImg:
   imgUrl: https
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hst.yml

@@ -83,6 +83,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 鸿森堂
   projectCode: HST
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hsyy.yml

@@ -82,6 +82,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 河山医院
   projectCode: heshanyy
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://hsyy-1348049832.cos.ap-chongqing.myqcloud.com/hsyy.jpg

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hyt.yml

@@ -78,6 +78,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 宏医堂
   projectCode: HYT
+  spaceName:
 headerImg:
   imgUrl: https
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hzyy.yml

@@ -90,6 +90,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 弘珍医药
   projectCode: HZYY
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://hzyy.obs.cn-north-4.myhuaweicloud.com/fs/20250616/1750067609692.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jkj.yml

@@ -79,6 +79,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 金康健
   projectCode: JKJ
+  spaceName:
 headerImg:
   imgUrl: https://jkj-1323137866.cos.ap-chongqing.myqcloud.com/fs/logo/jkj.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jnlzjk.yml

@@ -87,6 +87,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 济南联志健康
   projectCode: LZJK
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jnmy.yml

@@ -88,6 +88,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 金牛明医
   projectCode: JNMY
+  spaceName:
 headerImg:
   imgUrl: https
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jnsyj.yml

@@ -85,6 +85,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 济南顺亿景
   projectCode: JNSYJ
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://jz-cos-1356808054.cos.ap-chengdu.myqcloud.com/fs/20250515/0877754b59814ea8a428fa3697b20e68.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-jzzx.yml

@@ -94,6 +94,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 九州在线
   projectCode: JZZX
+  spaceName:
 headerImg:
   imgUrl: https://jiuzhouzaixian.obs.cn-southwest-2.myhuaweicloud.com/fs/20250623/1750665141214.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-knt.yml

@@ -88,6 +88,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 康年堂
   projectCode: KNT
+  spaceName:
 headerImg:
   imgUrl: https
 ipad:

+ 0 - 103
fs-service/src/main/resources/application-config-druid-knt2.yml

@@ -1,103 +0,0 @@
-baidu:
-  token: 12313231232
-  back-domain: https://www.xxxx.com
-#配置
-logging:
-  level:
-    org.springframework.web: INFO
-    com.github.binarywang.demo.wx.cp: DEBUG
-    me.chanjar.weixin: DEBUG
-wx:
-  miniapp:
-    configs:
-      - appid:
-        secret:
-        token:
-        aesKey: HlEiBB55eaWUaeBVAQO3cWKWPYv1vOVQSq7nFNICw4E
-        msgDataFormat: JSON
-  cp:
-    corpId: wxd2edd379beb6581b
-    appConfigs:
-      - agentId: 1000005
-        secret: ec7okROXJqkNafq66-L6aKNv0asTzQIG0CYrj3vyBbo
-        token: PPKOdAlCoMO
-        aesKey: PKvaxtpSv8NGpfTDm7VUHIK8Wok2ESyYX24qpXJAdMP
-  pay:
-    appId: wxd2edd379beb6581b #微信公众号或者小程序等的appid
-    mchId: 1723480901 #微信支付商户号:陕西康年堂医药连锁有限公司
-    mchKey: 8cab128997a3547c1363b0898b877f38 #微信支付商户密钥
-    subAppId:  #服务商模式下的子商户公众账号ID
-    subMchId:  #服务商模式下的子商户号
-    keyPath: c:\\cert\\apiclient_cert.p12 # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
-    notifyUrl: https://userappB.kangniantangyiyao.top/app/wxpay/wxPayNotify
-  mp:
-    useRedis: false
-    redisConfig:
-      host: 127.0.0.1
-      port: 6379
-      timeout: 2000
-    configs:
-      - appId: wx6ee517a8d8743f88  # 第一个公众号的appid
-        secret: 1fac75465a61f9259a0fe19795d9e80d # 公众号的appsecret
-        token: PPKOdAlCoMO # 接口配置里的Token值
-        aesKey: Eswa6VjwtVMCcw03qZy6fWllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
-  open:
-    appId: wxd2edd379beb6581b
-    secret: 99e8312f6f7297c7d41196f5bb045053
-aifabu:  #爱链接
-  appKey: 7b471be905ab17e00f3b858c6710dd117601d008
-watch:
-  watchUrl: watch.ylrzcloud.com/prod-api
-  #  account: tcloud
-  #  password: mdf-m2h_6yw2$hq
-  account1: ccif #866655060138751
-  password1: cp-t5or_6xw7$mt
-  account2: tcloud #rt500台
-  password2: mdf-m2h_6yw2$hq
-  account3: whr
-  password3: v9xsKuqn_$d2y
-
-fs :
-  commonApi: http://192.168.0.114:7771
-  h5CommonApi: http://192.168.0.114:7771
-  jwt:
-    # 加密秘钥
-    secret: f4e2e52034348f86b67cde581c0f9eb5
-    # token有效时长,7天,单位秒
-    expire: 31536000
-    header: AppToken
-nuonuo:
-  key: 10924508
-  secret: A2EB20764D304D16
-
-# 存储捅配置
-tencent_cloud_config:
-  secret_id: AKIDiMq9lDf2EOM9lIfqqfKo7FNgM5meD0sT
-  secret_key: u5SuS80342xzx8FRBukza9lVNHKNMSaB
-  bucket: jnmy-1323137866
-  app_id: 1323137866
-  region: ap-chongqing
-  proxy: jnmy
-tmp_secret_config:
-  secret_id: AKIDCj7NSNAovtqeJpBau8GZ4CGB71thXIx
-  secret_key: lTB5zwqqz7CNhzDOWivFWedgfTBgxgB
-  bucket: fs-131972100
-  app_id: 1319721001
-  region: ap-chongqing
-  proxy: fs
-cloud_host:
-  company_name: 康年堂
-  projectCode: KNT
-headerImg:
-  imgUrl: https
-ipad:
-  url:
-  ipadUrl: http://qwipad.jnmyunl.com
-  aiApi: http://49.232.181.28:3000/api
-  voiceApi: http://139.186.176.122:8009
-  commonApi:
-wx_miniapp_temp:
-  pay_order_temp_id: -SjnK9K6cNKASa6AD9Q_c0YT7J1lPTEpPIpqbMJF8F0
-  inquiry_temp_id: hwFXVh0AWqeasBsZpa0-urb3CrPeYEwBiy3P6AMMGFQ
-
-

+ 1 - 0
fs-service/src/main/resources/application-config-druid-kyt.yml

@@ -83,6 +83,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 宽益堂
   projectCode: KYT
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://kuanyitang-1317640934.cos.ap-shanghai.myqcloud.com/kuanyitang/20250813/6b3b62e01672407c98f0561b73e35f6a.jpg

+ 1 - 0
fs-service/src/main/resources/application-config-druid-lmjy.yml

@@ -67,6 +67,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 良苗教育
   projectCode: LMJY
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://liangmiao.obs.cn-southwest-2.myhuaweicloud.com/fs/20250626/1750922536598.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-nmgyt.yml

@@ -86,6 +86,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 内蒙古一贴
   projectCode: NMGYT
+  spaceName:
 headerImg:
   imgUrl: https
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-qdtst.yml

@@ -90,6 +90,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 同顺堂
   projectCode: QDTST
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://qdtst-1360717104.cos.ap-nanjing.myqcloud.com/qdtst-1360717104/20250624/937019e4090f46788ef29c4e7df479c3.jpg

+ 1 - 0
fs-service/src/main/resources/application-config-druid-sczy.yml

@@ -94,6 +94,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 四川致医
   projectCode: SCZY
+  spaceName:
 headerImg:
   imgUrl: https://jiuzhouzaixian.obs.cn-southwest-2.myhuaweicloud.com/fs/20250623/1750665141214.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-sft.yml

@@ -76,6 +76,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 四福堂
   projectCode: SFT
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://sft-1361917636.cos.ap-chongqing.myqcloud.com/sft/20250606/b08b1a6212f44f2998423c8c5d7712ee.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-sxjz.yml

@@ -87,6 +87,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 今正科技
   projectCode: SXJZ
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://jz-cos-1356808054.cos.ap-chengdu.myqcloud.com/fs/20250515/0877754b59814ea8a428fa3697b20e68.png

+ 2 - 0
fs-service/src/main/resources/application-config-druid-syysy-test.yml

@@ -75,6 +75,8 @@ tencent_cloud_config:
   proxy: syysy
 cloud_host:
   company_name: 益善缘
+  projectCode: SYYSY
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-syysy.yml

@@ -76,6 +76,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 益善缘
   projectCode: SYYSY
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://ysy-1329817240.cos.ap-guangzhou.myqcloud.com/ysy/20250820/2c47e4f105b641b4a49df50a77338e32.png

+ 1 - 0
fs-service/src/main/resources/application-config-druid-whhm.yml

@@ -79,6 +79,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 武汉惠名
   projectCode: WHHM
+  spaceName:
 headerImg:
   imgUrl: https://whhm-1361716159.cos.ap-chongqing.myqcloud.com/fs/logo/8d71d552783718d726149312bfca24a.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-xfk.yml

@@ -84,6 +84,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 小访客
   projectCode: XFK
+  spaceName:
 headerImg:
   imgUrl: https://xiaofangke-1360933944.cos.ap-nanjing.myqcloud.com/xiaofangke/20250610/9c3fb587d224492e8b61f5dece0b8b7b.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-xzt.yml

@@ -79,6 +79,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 襄之棠
   projectCode: XZT
+  spaceName:
 headerImg:
   imgUrl: https://drk-1363981074.cos.ap-chongqing.myqcloud.com/fs/logo/30d7a0d1ec31e5ac16c6e96d5ca76ad.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-yjb.yml

@@ -80,6 +80,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 医健宝
   projectCode: YJB
+  spaceName:
 headerImg:
   imgUrl: https://drk-1363981074.cos.ap-chongqing.myqcloud.com/fs/logo/30d7a0d1ec31e5ac16c6e96d5ca76ad.png
 ipad:

+ 3 - 2
fs-service/src/main/resources/application-config-druid-ylrz.yml

@@ -85,8 +85,9 @@ tmp_secret_config:
   region: ap-chongqing
   proxy: fs
 cloud_host:
-  company_name: 济南联志健康
-  projectCode: LZJK
+  company_name: 云联融智
+  projectCode: YLRZ
+  spaceName:
 headerImg:
   imgUrl:
 

+ 1 - 0
fs-service/src/main/resources/application-config-druid-yxj.yml

@@ -82,6 +82,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 易行健
   projectCode: whyxj
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://yxj-1323137866.cos.ap-chongqing.myqcloud.com/app/yxj.jpg

+ 1 - 0
fs-service/src/main/resources/application-config-druid-yzt.yml

@@ -76,6 +76,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 易诊通
   projectCode: YZT
+  spaceName:
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://yztcourse-1325300895.cos.ap-guangzhou.myqcloud.com/yztcourse/20250523/e04871a98cc84be39a7f60c084698e21.jpg

+ 1 - 0
fs-service/src/main/resources/application-config-druid-zsjk.yml

@@ -66,6 +66,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 中食健康
   projectCode: ZSJK
+  spaceName:
 headerImg:
   imgUrl: https://zs-1362480099.cos.ap-beijing.myqcloud.com/fs/20250618/4839e2ff3bdb4908b459abea45a04f4b.png
 ipad:

+ 1 - 0
fs-service/src/main/resources/application-config-fzbt.yml

@@ -73,6 +73,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 福州白兔
   projectCode: FZBT
+  spaceName: myhk-2114522511
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://fs-1346741853.cos.ap-chengdu.myqcloud.com/fs/20250323/6189704f2e134b84ad9c9e7c9999f103.jpg

+ 1 - 0
fs-service/src/main/resources/application-config-myhk.yml

@@ -87,6 +87,7 @@ tencent_cloud_config:
 cloud_host:
   company_name: 木易华康
   projectCode: MYHK
+  spaceName: myhk-2114522511
 #看课授权时显示的头像
 headerImg:
   imgUrl: https://fs-1346741853.cos.ap-chengdu.myqcloud.com/fs/20250323/6189704f2e134b84ad9c9e7c9999f103.jpg

+ 1 - 1
fs-service/src/main/resources/application-druid-jnmy-test.yml

@@ -41,7 +41,7 @@ spring:
             druid:
                 # 主库数据源
                 master:
-                    url: jdbc:mysql://120.46.174.121:2345/fs_his_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://120.46.174.121:2345/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                     username: root
                     password: Ylrztek250218!3@.
                 # 从库数据源

+ 6 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml

@@ -110,6 +110,8 @@
             <if test="userId != null">user_id,</if>
             <if test="isFirst != null">is_first,</if>
             <if test="isSpeed != null">is_speed,</if>
+            <if test="jobId != null">job_id,</if>
+            <if test="vid != null">vid,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="fileId != null">#{fileId},</if>
@@ -150,6 +152,8 @@
             <if test="userId != null">#{userId},</if>
             <if test="isFirst != null">#{isFirst},</if>
             <if test="isSpeed != null">#{isSpeed},</if>
+            <if test="jobId != null">#{jobId},</if>
+            <if test="vid != null">#{vid},</if>
         </trim>
     </insert>
     <insert id="insertBatchFsUserCourseVideo" parameterType="FsUserCourseVideo" useGeneratedKeys="true" keyProperty="videoId">
@@ -240,6 +244,8 @@
             <if test="isFirst != null">is_first = #{isFirst},</if>
             <if test="isSpeed != null">is_speed = #{isSpeed},</if>
             <if test="isOnPut != null">is_on_put = #{isOnPut},</if>
+            <if test="jobId != null">job_id = #{jobId},</if>
+            <if test="vid != null">vid = #{vid},</if>
         </trim>
         where video_id = #{videoId}
     </update>

+ 3 - 0
fs-user-app/src/main/java/com/fs/app/controller/WxPayController.java

@@ -124,6 +124,9 @@ public class WxPayController {
                         break;
                     case "product":
                         courseProductOrderService.payConfirm("",orderId[1],tradeNo,"",1,tradeNo,null);
+                    case "payment":
+                        paymentService.payConfirm(orderId[1], outtradeno,tradeNo,null);
+
                 }
                 return WxPayNotifyResponse.success("处理成功!");
             }else{

+ 10 - 0
fs-user-app/src/main/java/com/fs/app/controller/course/CourseQwController.java

@@ -361,6 +361,16 @@ public class CourseQwController extends AppBaseController {
 //        courseVideoService.updateVideoUrl();
     }
 
+    @GetMapping("/testJob")
+    public R testJob() {
+        return courseVideoService.uploadVideoToHuoShanByUrl();
+    }
+
+    @GetMapping("/testVid")
+    public R testVid() {
+        return courseVideoService.getVidByJob();
+    }
+
     @Autowired
     private IFsCourseTrafficLogService courseTrafficLogService;
 

+ 1 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/WxPayScrmController.java

@@ -67,6 +67,7 @@ public class WxPayScrmController {
         logger.info("====================进入微信回调接口===================");
         try {
             String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
+            logger.info("xml result:{}", xmlResult);
             WxPayOrderNotifyResult result = wxPayService.parseOrderNotifyResult(xmlResult,"MD5");
             System.out.println(result.getReturnCode());
             if("SUCCESS".equals(result.getReturnCode())){

+ 2 - 1
fs-user-app/src/main/resources/application.yml

@@ -2,11 +2,12 @@
 server:
   # 服务器的HTTP端口,默认为8113
   port: 8113
+#  port: 7774
 
 # Spring配置
 spring:
   profiles:
-    active: druid-ylrz
+    active: druid-myhk-test
 #    active: dev
 #    active: druid-jzzx
 #    active: druid-yzt