zhanghua
2023-10-25 31155ed32e2f2e2022b4b1697c8a2052a8543a48
合并代码
5个文件已修改
4个文件已添加
322 ■■■■■ 已修改文件
ycl-platform/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/PlatformApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/config/DdTest.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/config/FastJson2JsonRedisSerializer.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/config/MqConstant.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/config/RestTemplateConfig.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/dingding/DingController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/dingding/IntelligentClientTest.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/pom.xml
@@ -55,6 +55,11 @@
            <artifactId>httpmime</artifactId>
            <version>4.5.14</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.14</version>
        </dependency>
    </dependencies>
<!--    <build>-->
ycl-platform/src/main/java/com/ycl/PlatformApplication.java
@@ -22,7 +22,7 @@
@EnableScheduling
@EnableFeignClients
@EnableTransactionManagement(proxyTargetClass = true)
@SpringBootApplication
@SpringBootApplication(scanBasePackages = "com.ycl")
public class PlatformApplication {
    public static void main(String[] args) throws UnknownHostException {
        ConfigurableApplicationContext application = SpringApplication.run(PlatformApplication.class, args);
ycl-platform/src/main/java/com/ycl/config/DdTest.java
New file
@@ -0,0 +1,71 @@
package com.ycl.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.xxpt.gateway.shared.api.request.OapiGettokenJsonRequest;
import com.alibaba.xxpt.gateway.shared.api.response.OapiGettokenJsonResponse;
import com.alibaba.xxpt.gateway.shared.client.http.ExecutableClient;
import com.alibaba.xxpt.gateway.shared.client.http.IntelligentGetClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;
@Slf4j
@Component
@EnableScheduling
public class DdTest {
//    @Autowired
//    private RedisTemplate<Object,Object> redisTemplate;
    @Value("${zzding.app-key}")
    public String appKey;
    @Value("${zzding.app-secret}")
    public String appSecret;
    private static ExecutableClient executableClient;
    @PostConstruct
    public void init(){
        executableClient= ExecutableClient.getInstance();
        executableClient.setDomainName("openplatform.dg-work.cn");
        executableClient.setProtocal("https");
        executableClient.setAccessKey(appKey);
        executableClient.setSecretKey(appSecret);
        executableClient.init();
    }
    public static ExecutableClient getExecutableClient() {
        return executableClient;
    }
//    //每一小时30分执行一次,获取最新token放入redis
//    @Scheduled(initialDelay = 0L,fixedDelay = 5400000L)
//    public void getToken() {
//        IntelligentGetClient intelligentGetClient = DdTest.getExecutableClient().newIntelligentGetClient("/gettoken.json");
//        OapiGettokenJsonRequest oapiGettokenJsonRequest = new OapiGettokenJsonRequest();
//        oapiGettokenJsonRequest.setAppkey(appKey);
//        oapiGettokenJsonRequest.setAppsecret(appSecret);
//        OapiGettokenJsonResponse apiResult = intelligentGetClient.get(oapiGettokenJsonRequest);
//        String data = apiResult.getContent().getData();
//        if (data != null && !data.contains("errorCode")) {
//            log.info("获取token成功");
//            JSONObject jsonObject = JSON.parseObject(data);
//            String token = (String) jsonObject.get("accessToken");
//            log.info("获取token成功:{}",token);
//            redisTemplate.opsForValue().set(MqConstant.DD_ACCESS_TOKEN, token, 2, TimeUnit.HOURS);
//        }else {
//            throw new RuntimeException("钉钉token获取失败");
//        }
//    }
}
ycl-platform/src/main/java/com/ycl/config/FastJson2JsonRedisSerializer.java
New file
@@ -0,0 +1,49 @@
package com.ycl.config;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.JSONWriter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
/**
 * Redis使用FastJson序列化
 *
 * @author ruoyi
 */
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
{
    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
    private Class<T> clazz;
    public FastJson2JsonRedisSerializer(Class<T> clazz)
    {
        super();
        this.clazz = clazz;
    }
    @Override
    public byte[] serialize(T t) throws SerializationException
    {
        if (t == null)
        {
            return new byte[0];
        }
        return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }
    @Override
    public T deserialize(byte[] bytes) throws SerializationException
    {
        if (bytes == null || bytes.length <= 0)
        {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);
        return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
    }
}
ycl-platform/src/main/java/com/ycl/config/MqConstant.java
New file
@@ -0,0 +1,14 @@
package com.ycl.config;
public interface MqConstant {
    String DATA_QUEUE="data_queue_two";
    String DATA_EXCHANGE="data_exchange";
    String DATA_ROUTE_KEY="data_route_key";
    String EXCHANGE_TYPE_TOPIC="topic";
    String DD_ACCESS_TOKEN="dd_access_token";
}
ycl-platform/src/main/java/com/ycl/config/RestTemplateConfig.java
@@ -2,13 +2,27 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        RestTemplate restTemplate = new RestTemplate(factory);
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        return  restTemplate;
    }
}
    @Bean
    public ClientHttpRequestFactory factory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);
        factory.setConnectTimeout(15000);
        return factory;
    }
}
ycl-platform/src/main/java/com/ycl/controller/dingding/DingController.java
@@ -10,10 +10,12 @@
import com.alibaba.xxpt.gateway.shared.client.http.PostClient;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.StringUtils;
import com.aliyun.oss.model.ObjectMetadata;
import com.ycl.api.CommonResult;
import com.ycl.bo.AdminUserDetails;
import com.ycl.common.dingding.DingCommon;
import com.ycl.config.DdTest;
import com.ycl.config.DingConfig;
import com.ycl.controller.BaseController;
import com.ycl.entity.dingding.DingUserInfo;
@@ -187,6 +189,54 @@
        return CommonResult.success(bookRemarkService.updateRemark(user, userId, remark));
    }
    @PostMapping("/oss/sign")
    public CommonResult ossSign(@RequestParam("mediaId") String mediaId, @RequestParam("extension") String extension) {
        log.info("接收到file");
        if (StringUtils.isNullOrEmpty(mediaId) || StringUtils.isNullOrEmpty(extension)) {
            return CommonResult.failed("参数不能为空!");
        }
        ExecutableClient executableClient = DdTest.getExecutableClient();
        CloseableHttpResponse response = null;
        OSS ossClient = null;
        try {
            //从钉钉获取视频流
            String api = "/media/download";
            GetClient getClient = executableClient.newGetClient(api);
            //从redis获取token
            String token = getToken();
            //设置参数
            getClient.addParameter("access_token", token);
            getClient.addParameter("media_id", mediaId);
            response = getClient.getB();
            HttpEntity entity = response.getEntity();
            InputStream is = entity.getContent();
            DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
            String strDate2 = dtf2.format(LocalDateTime.now());
            String fileName = strDate2 + RandomUtils.generateRandomInt(4) + "." + extension;
            MultipartFile file = getMultipartFile(is, fileName);
            String url = ossService.uploadImages(file);
            return CommonResult.success(url);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
            if (response != null) {
                try {
                    response.close();
                } catch (Exception e) {
                    System.out.println(e);
                }
            }
        }
        return null;
    }
    @ApiOperation(value = "获取视频")
    @GetMapping("/getVideo/{mediaId}")
    public CommonResult<String> getVideo(@PathVariable String mediaId) {
ycl-platform/src/main/java/com/ycl/controller/dingding/IntelligentClientTest.java
New file
@@ -0,0 +1,110 @@
package com.ycl.controller.dingding;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.xxpt.gateway.shared.api.request.OapiMediaUploadRequest;
import com.alibaba.xxpt.gateway.shared.api.response.OapiMediaUploadResponse;
import com.alibaba.xxpt.gateway.shared.client.http.ExecutableClient;
import com.alibaba.xxpt.gateway.shared.client.http.GetClient;
import com.alibaba.xxpt.gateway.shared.client.http.IntelligentPostClient;
import com.alibaba.xxpt.gateway.shared.client.http.PostClient;
import java.io.*;
import static com.ycl.common.constant.DingConst.GET_TIKER;
import static com.ycl.common.constant.DingConst.GET_TOKEN;
public class IntelligentClientTest {
    private static ExecutableClient executableClient;
    static {
        executableClient = ExecutableClient.getInstance();
        //DomainName不同环境对应不同域名,示例为sass域名
        executableClient.setDomainName("openplatform.dg-work.cn");
        executableClient.setProtocal("https");
        //应用App Key
        executableClient.setAccessKey("SC_ZHZF-IC5g2YiRDW8tug1DfAfiui");
        //应用App Secret
        executableClient.setSecretKey("39RIHFOKd8fUeeW9T7CdBcwEqA6dMKx5d3686B6P");
        executableClient.init();
    }
    private static String getToken() {
        //调用API
        GetClient getTokenClient = executableClient.newGetClient(GET_TOKEN);
        //设置参数
        getTokenClient.addParameter("appkey", "SC_ZHZF-IC5g2YiRDW8tug1DfAfiui");
        getTokenClient.addParameter("appsecret", "39RIHFOKd8fUeeW9T7CdBcwEqA6dMKx5d3686B6P");
        String apiResult = getTokenClient.get();
        return parsingResult(apiResult);
    }
    private static String parsingResult(String apiResult) {
        if (ObjectUtil.isNotNull(apiResult)) {
            JSONObject resJson = JSONObject.parseObject(apiResult);
            if (resJson.getBoolean("success")) {
                JSONObject content = resJson.getJSONObject("content");
                if (content.getBoolean("success")) {
                    JSONObject dataObj = content.getJSONObject("data");
                    String accessToken = dataObj.getString("accessToken");
                    return accessToken;
                }
            }
        }
        return null;
    }
    public static void main(String[] args) {
//        //executableClient保证单例
//        IntelligentPostClient intelligentPostClient = executableClient.newIntelligentPostClient("/media/upload");
//        OapiMediaUploadRequest oapiMediaUploadRequest = new OapiMediaUploadRequest();
//        String token = getToken();
//        //调用接口凭证
//        oapiMediaUploadRequest.setAccess_token(token);
//        //媒体文件类型,分别有图片(image)、语音(voice)、普通文件(file)
//        oapiMediaUploadRequest.setType("file");
//        //orm-data中媒体文件标识,有filename、filelength、content-type等信息
//        oapiMediaUploadRequest.setMedia("字符串");
//        intelligentPostClient.addFile(new File("F:\\视频\\C20353B5856A7413D4B40A8D42BBA569.mp4"));
//        //获取结果
//        OapiMediaUploadResponse apiResult = intelligentPostClient.post(oapiMediaUploadRequest);
//        System.out.println(apiResult);
        File file = new File("F:\\halon.json");
        try {
            JSONObject jsonObject = readerMethod(file);
            String dataList = jsonObject.getString("dataObj");
            JSONArray array = JSON.parseArray(dataList);
            String urls = "";
            for (int i = 0; i < 311; i++) {
                JSONObject object = (JSONObject) array.get(i);
                String path = object.getString("FilePath");
                urls += path + "\r\n";
            }
            System.out.println(urls);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    private static JSONObject readerMethod(File file) throws IOException, FileNotFoundException {
        FileReader fileReader = new FileReader(file);
        Reader reader = new InputStreamReader(new FileInputStream(file), "Utf-8");
        int ch = 0;
        StringBuffer sb = new StringBuffer();
        while ((ch = reader.read()) != -1) {
            sb.append((char) ch);
        }
        fileReader.close();
        reader.close();
        String jsonStr = sb.toString();
//        System.out.println(JSON.parseObject(jsonStr));
        return JSON.parseObject(jsonStr);
    }
}
ycl-platform/src/main/resources/application.yml
@@ -92,3 +92,4 @@
      - /**/API/**
      - /**/ding/**
      - /**/sccg_region/**
      - oss/sign