From e88d34fd4cbe3a0cc57ecfdc1710d66bc88e26b5 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 10 六月 2025 14:07:53 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/video/ys/YsAppClient.java |  135 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 135 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/video/ys/YsAppClient.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/video/ys/YsAppClient.java
new file mode 100644
index 0000000..f4bf603
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/video/ys/YsAppClient.java
@@ -0,0 +1,135 @@
+package com.dy.pipIrrRemote.video.ys;
+
+import com.dy.common.schedulerTask.SchedulerTaskSupport;
+import com.dy.pipIrrRemote.video.YsAppCtrl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.util.UriComponentsBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/7 11:40
+ * @Description
+ */
+@Slf4j
+@Component
+public class YsAppClient {
+
+    private static final String JobName = "VideoYsJob" ;
+    private static final String JobGroupName = "VideoYsGroup" ;
+    private static final Integer ThreadPoolMaxCount = 1 ;//绾跨▼姹犵嚎绋嬫渶澶т釜鏁�
+    private static final Integer ThreadPoolPriority = 5 ;//绾跨▼浼樺厛绾�
+    private static final boolean quartzJobRunOneTimes = true ;//瀹氭椂浠诲姟鍙墽琛屼竴娆�
+
+    @Value("${video.ys.accessTokenExpireDay: 7}")
+    protected Integer accessTokenExpireDay;//AccessToken杩囨湡鏃堕棿锛屽崟浣嶅ぉ
+
+    @Value("${video.ys.appKey}")
+    protected String appKey;
+
+    @Value("${video.ys.secret}")
+    protected String secret;
+
+    @Value("${video.ys.requestAccessTokenUrl}")
+    protected String requestAccessTokenUrl;
+
+    @Autowired
+    protected RestTemplate restTemplate ;
+
+    @Autowired
+    protected YsAppCtrl ysVideoCtrl;
+
+    private Long computeNetGetAccessTokenAt(){
+        Long millis = (System.currentTimeMillis() + (accessTokenExpireDay * 24 * 60 * 60 * 1000) ) ;
+        // millis = 10000L ;
+        return millis ;
+    }
+
+    /**
+     * 鑾峰緱AccessToken
+     */
+    public void getAccessToken(){
+        if((appKey != null && appKey.trim().length() > 0)
+                && (secret != null && secret.trim().length() > 0)
+                && (requestAccessTokenUrl != null && requestAccessTokenUrl.trim().length() > 0)){
+            MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
+            formData.add("appKey", appKey);
+            formData.add("appSecret", secret);
+            YsAccessTokenResponse response = this.postRequest2Ys(restTemplate, requestAccessTokenUrl, formData);
+            if(response != null){
+                switch (response.code){
+                    case "200" :{
+                        this.dealSuccessOfRequestAccessTokenFromYs(response) ;
+                        break ;
+                    }
+                    default: {
+                        this.dealErrorOfRequestAccessTokenFromYs(response) ;
+                        break ;
+                    }
+                }
+            }
+        }
+    }
+    private void dealSuccessOfRequestAccessTokenFromYs(YsAccessTokenResponse response){
+        if(response != null && response.data != null){
+            ysVideoCtrl.saveAccessTokenOfYs(response.data.accessToken, response.data.expireTime);
+        }
+    }
+
+    private void dealErrorOfRequestAccessTokenFromYs(YsAccessTokenResponse response){
+        log.error("浠庤悿鐭冲紑鏀惧钩鍙拌幏寰桝ccessToken澶辫触锛岄敊璇爜锛歿}锛岄敊璇俊鎭細{}", response.code, response.msg);
+    }
+    /**
+     * 璁剧疆涓嬫鑾峰緱AccessToken
+     */
+    public void reSetNextGetAccessToken(Long getAccessTokenAt){
+        if(getAccessTokenAt == null || getAccessTokenAt.longValue() == 0){
+            getAccessTokenAt = this.computeNetGetAccessTokenAt() ;
+        }
+        //姣鍙樻垚绉�
+        int futureSecond = (int)((getAccessTokenAt - System.currentTimeMillis()) / 1000) ;
+        try {
+            SchedulerTaskSupport.setThreadPoolPro(ThreadPoolMaxCount , ThreadPoolPriority);
+            //鍥犱负瑕侀噸澶嶅姞宸ヤ綔浠诲姟锛屾墍浠ュ厛鎶婁笂娆″姞鐨勫悓缁勫悓鍚嶄换鍔″垹闄�
+            SchedulerTaskSupport.deleteJob(JobName , JobGroupName) ;
+            // 鍙墽琛屼竴娆$殑浠诲姟
+            SchedulerTaskSupport.addSecondlyJob(JobName , JobGroupName, YsAccessTokenQuartzJob.class, null, futureSecond, 1, 0) ;
+        } catch (Exception e) {
+            log.error("璁剧疆浠庤悿鐭冲紑鏀惧钩鍙板畾鏃惰幏寰桝ccessToken浠诲姟鏃跺彂鐢熷紓甯�", e);
+        }
+    }
+    /**
+     * 鍚戣悿鐭冲紑鏀惧钩鍙板彂閫丳ost璇锋眰
+     * @param restTemplate SpringBoot鐨凴estTemplate
+     * @param toMwUrl web璇锋眰Url
+     * @param body 鏁版嵁
+     * @return
+     */
+    private YsAccessTokenResponse postRequest2Ys(RestTemplate restTemplate, String toMwUrl, Object body) {
+        String url = UriComponentsBuilder.fromUriString(toMwUrl)
+                .build()
+                .toUriString();
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+
+        HttpEntity<?> httpEntity = new HttpEntity<>(body, headers);
+        ResponseEntity<YsAccessTokenResponse> resEntity = null;
+        try {
+            // 閫氳繃Post鏂瑰紡璋冪敤鎺ュ彛
+            resEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, YsAccessTokenResponse.class);
+        } catch (Exception e) {
+            log.error("浠庤悿鐭冲紑鏀惧钩鍙板畾鏃惰幏寰桝ccessToken浠诲姟鎵ц鏃跺彂鐢熷紓甯�", e);
+        }
+        if(resEntity != null){
+            return resEntity.getBody();
+        }
+        return null ;
+    }
+
+}

--
Gitblit v1.8.0