wangyunpeng 1 dzień temu
rodzic
commit
c77a48c9b4

+ 27 - 0
api-module/src/main/java/com/tzld/piaoquan/api/component/AigcApiService.java

@@ -6,6 +6,8 @@ import com.tzld.piaoquan.api.model.vo.WxAccountDatastatVO;
 import com.tzld.piaoquan.growth.common.component.HttpPoolClient;
 import com.tzld.piaoquan.growth.common.component.HttpPoolClient;
 import com.tzld.piaoquan.growth.common.utils.DateUtil;
 import com.tzld.piaoquan.growth.common.utils.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
@@ -291,4 +293,29 @@ public class AigcApiService {
         }
         }
         return false;
         return false;
     }
     }
+
+    public String gpt(String model, String prompt, JSONObject responseFormat, List<String> imageList) {
+        if (StringUtils.isEmpty(model) || StringUtils.isEmpty(prompt)) {
+            return null;
+        }
+        String url = aigcApiHost + "/dev/test/gpt";
+        JSONObject params = new JSONObject();
+        params.put("model", model);
+        params.put("prompt", prompt);
+        if (Objects.nonNull(responseFormat)) {
+            params.put("responseFormat", responseFormat);
+        }
+        if (CollectionUtils.isNotEmpty(imageList)) {
+            params.put("imageList", imageList);
+        }
+
+        try {
+            String post = httpPoolClient.post(url, params.toJSONString());
+            JSONObject res = JSONObject.parseObject(post);
+            return res.getString("data");
+        } catch (Exception e) {
+            log.error("getDetailByGhId error", e);
+        }
+        return null;
+    }
 }
 }

+ 11 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/strategy/impl/ThirdPartyPushMessageStrategyV1.java

@@ -159,6 +159,8 @@ public class ThirdPartyPushMessageStrategyV1 implements ReplyStrategyService {
             CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
             CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
             cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andMsgTypeEqualTo(1).andStrategyEqualTo(key).andGhIdEqualTo(bucketDataParam.getGhId());
             cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andMsgTypeEqualTo(1).andStrategyEqualTo(key).andGhIdEqualTo(bucketDataParam.getGhId());
             List<CgiReplyBucketData> cgiReplyBucketData1 = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
             List<CgiReplyBucketData> cgiReplyBucketData1 = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
+            Map<Long, CgiReplyBucketData> cgiReplyBucketDataMap = cgiReplyBucketData1.stream()
+                    .collect(Collectors.toMap(CgiReplyBucketData::getMiniVideoId, x -> x, (a, b) -> b));
             for (CgiReplyBucketData cgiReplyBucketData : cgiReplyBucketData1) {
             for (CgiReplyBucketData cgiReplyBucketData : cgiReplyBucketData1) {
                 cgiReplyBucketData.setIsDelete(1);
                 cgiReplyBucketData.setIsDelete(1);
                 cgiReplyBucketDataMapper.updateByPrimaryKeySelective(cgiReplyBucketData);
                 cgiReplyBucketDataMapper.updateByPrimaryKeySelective(cgiReplyBucketData);
@@ -189,6 +191,15 @@ public class ThirdPartyPushMessageStrategyV1 implements ReplyStrategyService {
                         log.error("ThirdPartyPushMessageStrategyV1 insertSmallData setCustomerCoverTitleId Error,data:" + JSON.toJSONString(gzhPlanVideo), e);
                         log.error("ThirdPartyPushMessageStrategyV1 insertSmallData setCustomerCoverTitleId Error,data:" + JSON.toJSONString(gzhPlanVideo), e);
                     }
                     }
                 }
                 }
+                CgiReplyBucketData oldData = cgiReplyBucketDataMap.get(cgiReplyBucketData.getMiniVideoId());
+                if (Objects.nonNull(oldData)) {
+                    if (StringUtils.isEmpty(cgiReplyBucketData.getTitle())) {
+                        cgiReplyBucketData.setTitle(oldData.getTitle());
+                    }
+                    if (StringUtils.isEmpty(cgiReplyBucketData.getCoverUrl())) {
+                        cgiReplyBucketData.setCoverUrl(oldData.getCoverUrl());
+                    }
+                }
                 cgiReplyBucketDataMapper.insertSelective(cgiReplyBucketData);
                 cgiReplyBucketDataMapper.insertSelective(cgiReplyBucketData);
                 String redisKey = "auto_reply_video_detail_" + cgiReplyBucketData.getRootSourceId();
                 String redisKey = "auto_reply_video_detail_" + cgiReplyBucketData.getRootSourceId();
                 VideoCharacteristicVO vo = new VideoCharacteristicVO();
                 VideoCharacteristicVO vo = new VideoCharacteristicVO();

+ 31 - 0
api-module/src/main/java/com/tzld/piaoquan/api/util/AliOssFileTool.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.api.util;
 package com.tzld.piaoquan.api.util;
 
 
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
@@ -33,6 +34,7 @@ import com.tzld.piaoquan.api.model.vo.SignatureVO;
 import com.tzld.piaoquan.api.model.vo.StsTokenVO;
 import com.tzld.piaoquan.api.model.vo.StsTokenVO;
 import com.tzld.piaoquan.growth.common.utils.DateUtils;
 import com.tzld.piaoquan.growth.common.utils.DateUtils;
 import com.tzld.piaoquan.growth.common.utils.RandomUtil;
 import com.tzld.piaoquan.growth.common.utils.RandomUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -63,6 +65,7 @@ import java.util.*;
  * @version 1.0.0
  * @version 1.0.0
  */
  */
 @Component
 @Component
+@Slf4j
 public class AliOssFileTool extends AliOssConfig {
 public class AliOssFileTool extends AliOssConfig {
 
 
     private static Logger logger = Logger.getLogger(AliOssFileTool.class);
     private static Logger logger = Logger.getLogger(AliOssFileTool.class);
@@ -100,6 +103,14 @@ public class AliOssFileTool extends AliOssConfig {
 
 
     }
     }
 
 
+    public static String saveInPublic(String bucketName, String ossKey, InputStream inputStream, String contentType) {
+        bucketName = getBucket(bucketName);
+        ObjectMetadata om = new ObjectMetadata();
+        om.setContentType(contentType);
+        getOssClient().putObject(bucketName, ossKey, inputStream, om);
+        return ossKey;
+    }
+
     public static String moveFile(EnumPublicBuckets sourceBucket, String sourceKey, EnumPublicBuckets targetBucket, String targetKey) {
     public static String moveFile(EnumPublicBuckets sourceBucket, String sourceKey, EnumPublicBuckets targetBucket, String targetKey) {
         getOssClient().copyObject(getBucket(sourceBucket.getBucketName()), sourceKey,
         getOssClient().copyObject(getBucket(sourceBucket.getBucketName()), sourceKey,
                 getBucket(targetBucket.getBucketName()), targetKey);
                 getBucket(targetBucket.getBucketName()), targetKey);
@@ -1473,4 +1484,24 @@ public class AliOssFileTool extends AliOssConfig {
         return policy;
         return policy;
     }
     }
 
 
+    public static String downloadAndSaveInOSS(String fileName, String url, String contentType) {
+        try {
+            if (url.startsWith(CdnUtil.VIDEO_CDN_URL_HOST)
+                    || url.startsWith(CdnUtil.DOWNLOAD_CDN_URL_HOST_PICTURE)) {
+                return url;
+            }
+            byte[] fileData = HttpUtil.downloadBytes(url);
+            if (fileData == null || fileData.length == 0) {
+                log.warn("downloadAndSaveInOSS 下载media失败,URL: {}", url);
+                return null;
+            }
+            InputStream inputStream = new ByteArrayInputStream(fileData);
+            return CdnUtil.getOssHttpUrl(saveInPublic(EnumPublicBuckets.PUBBUCKET.getBucketName(),
+                    fileName, inputStream, contentType));
+        } catch (Exception e) {
+            log.error("downloadAndSaveInOSS 下载转存OSS失败,URL: {}", url, e);
+            return null;
+        }
+    }
+
 }
 }

+ 14 - 0
api-module/src/main/java/com/tzld/piaoquan/api/util/CdnUtil.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.api.util;
 package com.tzld.piaoquan.api.util;
 
 
+import cn.hutool.core.net.URLEncodeUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.IAcsClient;
 import com.aliyuncs.IAcsClient;
@@ -147,6 +148,19 @@ public class CdnUtil {
         return fileExtension;
         return fileExtension;
     }
     }
 
 
+
+    public static String getOssHttpUrl(String key) {
+        if (StringUtils.isBlank(key)) {
+            return key;
+        }
+        if (StringUtils.startsWithIgnoreCase(key, "http")) {
+            return key;
+        } else {
+            String url = DOWNLOAD_CDN_URL_HOST_PICTURE + key;
+            return URLEncodeUtil.encode(url);
+        }
+    }
+
     public static void main(String[] args) {
     public static void main(String[] args) {
         String url = "ad/material_1564536000000.mp4";
         String url = "ad/material_1564536000000.mp4";
         System.out.println(getFileExtensionFromUrl(url));
         System.out.println(getFileExtensionFromUrl(url));

+ 24 - 0
api-module/src/test/java/com/tzld/piaoquan/api/WeComThirdPartTest.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.api;
 package com.tzld.piaoquan.api;
 
 
+import com.tzld.piaoquan.api.component.AigcApiService;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComRoomMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper;
 import com.tzld.piaoquan.api.dao.mapper.wecom.thirdpart.ThirdPartWeComStaffMapper;
 import com.tzld.piaoquan.api.job.wecom.thirdpart.WeComAccountJob;
 import com.tzld.piaoquan.api.job.wecom.thirdpart.WeComAccountJob;
@@ -15,6 +16,7 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest;
 
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 
 
 @SpringBootTest(classes = GrowthServerApplication.class)
 @SpringBootTest(classes = GrowthServerApplication.class)
@@ -35,6 +37,8 @@ public class WeComThirdPartTest {
     WeComUserDetailJob weComUserDetailJob;
     WeComUserDetailJob weComUserDetailJob;
     @Autowired
     @Autowired
     WeComCreateRoomJob weComCreateRoomJob;
     WeComCreateRoomJob weComCreateRoomJob;
+    @Autowired
+    AigcApiService aigcApiService;
 
 
     @Test
     @Test
     public void checkAccountOnline() {
     public void checkAccountOnline() {
@@ -97,4 +101,24 @@ public class WeComThirdPartTest {
         }
         }
     }
     }
 
 
+    @Test
+    public void tesGPT() {
+        //String imageUrl = "http://api.e.qq.com/image/70837126_29318969717_5e4c671a4e18aaad97d940a56aeb26bf";
+        //
+        //// download & upload to oss
+        //String fileName = String.format("supply/spider/image/%s_%d.jpg", "70837126", System.currentTimeMillis());
+        //String ossImageUrl = AliOssFileTool.downloadAndSaveInOSS(fileName, imageUrl, "image/jpeg");
+        //System.out.println("ossImageUrl: " + ossImageUrl);
+
+        String ossImageUrl = "https://rescdn.yishihui.com/supply/spider/image/70837126_1766470638729.jpg";
+
+        // 用户问题
+        String prompt = "请提取这张图片中的文字内容,仅仅提取图片中的文字,不要有其他的文字";
+
+        // 调用API
+        String result = aigcApiService.gpt("gpt-4o", prompt, null, Arrays.asList(ossImageUrl));
+
+        System.out.println(result);
+    }
+
 }
 }

+ 6 - 0
pom.xml

@@ -264,6 +264,12 @@
             <artifactId>spring-cloud-starter-openfeign</artifactId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>
         </dependency>
         </dependency>
 
 
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.18</version>
+        </dependency>
+
     </dependencies>
     </dependencies>
 
 
 </project>
 </project>