Forráskód Böngészése

feat(api): 切换账号、wp同步dify

Signed-off-by: sunshihao <sunshihaoemail>
sunshihao 2 napja
szülő
commit
842576cb70
20 módosított fájl, 264 hozzáadás és 26 törlés
  1. 36 0
      xinkeaboard-server/b2b2c-investment/pom.xml
  2. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/CompetitorBO.java
  3. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/MonthlySearchesBO.java
  4. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/RankBO.java
  5. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/RecommendationBO.java
  6. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/RelatedInfoBO.java
  7. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/TrafficBO.java
  8. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/dto/RivalDTO.java
  9. 1 1
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/dto/SearchVolumeDTO.java
  10. 2 2
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/vo/KeyWordPartVO.java
  11. 2 2
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/vo/RivalPartVO.java
  12. 3 2
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/vo/SuggestionVO.java
  13. 58 0
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/wordpress/PostBO.java
  14. 1 0
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/config/DifyConfig.java
  15. 30 0
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/config/RabbitConfig.java
  16. 5 5
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/controller/AnalysisController.java
  17. 6 6
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/model/AnalysisModel.java
  18. 33 0
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/model/WordPressModel.java
  19. 79 0
      xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/rabbitmq/WordPressConsumer.java
  20. 1 1
      xinkeaboard-server/b2b2c-web/src/main/resources/application-dev.yml

+ 36 - 0
xinkeaboard-server/b2b2c-investment/pom.xml

@@ -52,6 +52,42 @@
             <optional>true</optional>
         </dependency>
 
+
+        <!-- Spring Boot Test Starter -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+
+
+        <!-- JUnit 4 (如果使用JUnit 4) -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- 如果使用 JUnit 5,则需要以下依赖 -->
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.slodon</groupId>
+            <artifactId>mq-slodon-starter</artifactId>
+            <version>3.0</version>
+        </dependency>
+
+
     </dependencies>
 
 </project>

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/bo/CompetitorBO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/CompetitorBO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.bo;
+package com.slodon.b2b2c.investment.bean.analysis.bo;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/bo/MonthlySearchesBO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/MonthlySearchesBO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.bo;
+package com.slodon.b2b2c.investment.bean.analysis.bo;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/bo/RankBO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/RankBO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.bo;
+package com.slodon.b2b2c.investment.bean.analysis.bo;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/bo/RecommendationBO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/RecommendationBO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.bo;
+package com.slodon.b2b2c.investment.bean.analysis.bo;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/bo/RelatedInfoBO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/RelatedInfoBO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.bo;
+package com.slodon.b2b2c.investment.bean.analysis.bo;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/bo/TrafficBO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/bo/TrafficBO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.bo;
+package com.slodon.b2b2c.investment.bean.analysis.bo;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/dto/RivalDTO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/dto/RivalDTO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.dto;
+package com.slodon.b2b2c.investment.bean.analysis.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 1 - 1
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/dto/SearchVolumeDTO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/dto/SearchVolumeDTO.java

@@ -1,4 +1,4 @@
-package com.slodon.b2b2c.investment.bean.dto;
+package com.slodon.b2b2c.investment.bean.analysis.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 2 - 2
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/vo/KeyWordPartVO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/vo/KeyWordPartVO.java

@@ -1,6 +1,6 @@
-package com.slodon.b2b2c.investment.bean.vo;
+package com.slodon.b2b2c.investment.bean.analysis.vo;
 
-import com.slodon.b2b2c.investment.bean.bo.MonthlySearchesBO;
+import com.slodon.b2b2c.investment.bean.analysis.bo.MonthlySearchesBO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 

+ 2 - 2
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/vo/RivalPartVO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/vo/RivalPartVO.java

@@ -1,6 +1,6 @@
-package com.slodon.b2b2c.investment.bean.vo;
+package com.slodon.b2b2c.investment.bean.analysis.vo;
 
-import com.slodon.b2b2c.investment.bean.bo.CompetitorBO;
+import com.slodon.b2b2c.investment.bean.analysis.bo.CompetitorBO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 

+ 3 - 2
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/vo/SuggestionVO.java → xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/analysis/vo/SuggestionVO.java

@@ -1,6 +1,7 @@
-package com.slodon.b2b2c.investment.bean.vo;
+package com.slodon.b2b2c.investment.bean.analysis.vo;
 
-import com.slodon.b2b2c.investment.bean.bo.RelatedInfoBO;
+
+import com.slodon.b2b2c.investment.bean.analysis.bo.RelatedInfoBO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 

+ 58 - 0
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/bean/wordpress/PostBO.java

@@ -0,0 +1,58 @@
+package com.slodon.b2b2c.investment.bean.wordpress;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author sunshihao
+ * @version 1.0
+ * @description: 文章消息对象
+ * @date 2025/8/19 16:50
+ */
+@Data
+public class PostBO {
+    @ApiModelProperty("事件类型")
+    @JsonProperty("event")
+    private String event;
+
+    @ApiModelProperty("post_id")
+    @JsonProperty("post_id")  // 映射JSON中的post_id
+    private int postId;
+
+    @ApiModelProperty("post_title")
+    @JsonProperty("post_title")  // 映射JSON中的post_title
+    private String postTitle;
+
+    @ApiModelProperty("post_status")
+    @JsonProperty("post_status")  // 映射JSON中的post_status
+    private String postStatus;
+
+    @ApiModelProperty("post_type")
+    @JsonProperty("post_type")  // 映射JSON中的post_type
+    private String postType;
+
+    @ApiModelProperty("post_author")
+    @JsonProperty("post_author")  // 映射JSON中的post_author
+    private String postAuthor;
+
+    @ApiModelProperty("post_date")
+    @JsonProperty("post_date")  // 映射JSON中的post_date
+    private String postDate;
+
+    @ApiModelProperty("post_link")
+    @JsonProperty("post_link")  // 映射JSON中的post_link
+    private String postLink;
+
+    @ApiModelProperty("site_url")
+    @JsonProperty("site_url")  // 映射JSON中的site_url
+    private String siteUrl;
+
+    @ApiModelProperty("home_url")
+    @JsonProperty("home_url")  // 映射JSON中的home_url
+    private String homeUrl;
+
+    @ApiModelProperty("timestamp")
+    @JsonProperty("timestamp")
+    private long timestamp;
+}

+ 1 - 0
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/config/DifyConfig.java

@@ -16,4 +16,5 @@ import org.springframework.stereotype.Component;
 public class DifyConfig {
     private String apiKey;
     private String difyRoute;
+    private String databaseId;
 }

+ 30 - 0
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/config/RabbitConfig.java

@@ -0,0 +1,30 @@
+package com.slodon.b2b2c.investment.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author sunshihao
+ * @version 1.0
+ * @description: rabbitmq
+ * @date 2025/8/19 16:37
+ */
+@Component
+@ConfigurationProperties(prefix = "rabbitmq")
+@Data
+public class RabbitConfig {
+    /*
+     * 交换机
+     */
+    private String exchange;
+    /*
+     * 队列
+     */
+    private String queue;
+    /*
+     * 路由
+     */
+    private String routeKey;
+
+}

+ 5 - 5
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/controller/AnalysisController.java

@@ -3,11 +3,11 @@ package com.slodon.b2b2c.investment.controller;
 import com.slodon.b2b2c.core.response.JsonResult;
 import com.slodon.b2b2c.core.response.SldResponse;
 
-import com.slodon.b2b2c.investment.bean.dto.RivalDTO;
-import com.slodon.b2b2c.investment.bean.dto.SearchVolumeDTO;
-import com.slodon.b2b2c.investment.bean.vo.KeyWordPartVO;
-import com.slodon.b2b2c.investment.bean.vo.RivalPartVO;
-import com.slodon.b2b2c.investment.bean.vo.SuggestionVO;
+import com.slodon.b2b2c.investment.bean.analysis.dto.RivalDTO;
+import com.slodon.b2b2c.investment.bean.analysis.dto.SearchVolumeDTO;
+import com.slodon.b2b2c.investment.bean.analysis.vo.KeyWordPartVO;
+import com.slodon.b2b2c.investment.bean.analysis.vo.RivalPartVO;
+import com.slodon.b2b2c.investment.bean.analysis.vo.SuggestionVO;
 import com.slodon.b2b2c.investment.model.AnalysisModel;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;

+ 6 - 6
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/model/AnalysisModel.java

@@ -4,11 +4,11 @@ import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.slodon.b2b2c.core.util.HttpClientUtil;
-import com.slodon.b2b2c.investment.bean.bo.*;
-import com.slodon.b2b2c.investment.bean.dto.RivalDTO;
-import com.slodon.b2b2c.investment.bean.vo.KeyWordPartVO;
-import com.slodon.b2b2c.investment.bean.vo.RivalPartVO;
-import com.slodon.b2b2c.investment.bean.vo.SuggestionVO;
+import com.slodon.b2b2c.investment.bean.analysis.bo.*;
+import com.slodon.b2b2c.investment.bean.analysis.dto.RivalDTO;
+import com.slodon.b2b2c.investment.bean.analysis.vo.KeyWordPartVO;
+import com.slodon.b2b2c.investment.bean.analysis.vo.RivalPartVO;
+import com.slodon.b2b2c.investment.bean.analysis.vo.SuggestionVO;
 import com.slodon.b2b2c.investment.config.AnalysisConfig;
 import com.slodon.b2b2c.investment.constant.InvestmentConst;
 import lombok.extern.slf4j.Slf4j;
@@ -162,7 +162,7 @@ public KeyWordPartVO searchVolume(HashMap<String,String> header,String keywords,
  * @param header 请求头
  * @param keyword 关键词
  * @param locationName 地区
- * @return: com.slodon.b2b2c.investment.bean.vo.SuggestionVO
+ * @return: com.slodon.b2b2c.investment.bean.analysis.vo.SuggestionVO
  * @author sunshihao
  * @date: 2025/8/7 15:49
  */

+ 33 - 0
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/model/WordPressModel.java

@@ -0,0 +1,33 @@
+package com.slodon.b2b2c.investment.model;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.slodon.b2b2c.core.util.HttpClientUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @author sunshihao
+ * @version 1.0
+ * @description: 消费业务
+ * @date 2025/8/19 16:30
+ */
+@Component
+@Slf4j
+public class WordPressModel {
+    public String getPostById(int id, String url) throws Exception {
+
+        String path = url+"/wp-json/wp/v2/posts/"+id;
+        String response = HttpClientUtil.httpGet(path,null);
+        if (response == null) {
+            throw new Exception("wordpress api 响应结果为空");
+        }
+        JSONObject postObject = JSONUtil.parseObj(response);
+        String content = postObject.getByPath("content.rendered", String.class);
+        if (content == null) {
+            throw new Exception("查询文章内容失败:content.rendered字段为空");
+        }
+        return content;
+    }
+}

+ 79 - 0
xinkeaboard-server/b2b2c-investment/src/main/java/com/slodon/b2b2c/investment/rabbitmq/WordPressConsumer.java

@@ -0,0 +1,79 @@
+//package com.slodon.b2b2c.investment.rabbitmq;
+//
+//import com.slodon.b2b2c.investment.bean.wordpress.PostBO;
+//import com.slodon.b2b2c.investment.config.DifyConfig;
+//import com.slodon.b2b2c.investment.model.DifyModel;
+//import com.slodon.b2b2c.investment.model.WordPressModel;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.amqp.core.ExchangeTypes;
+//import org.springframework.amqp.rabbit.annotation.Exchange;
+//import org.springframework.amqp.rabbit.annotation.Queue;
+//import org.springframework.amqp.rabbit.annotation.QueueBinding;
+//import org.springframework.amqp.rabbit.annotation.RabbitListener;
+//import org.springframework.stereotype.Component;
+//import org.springframework.util.StringUtils;
+//
+//import javax.annotation.Resource;
+//
+///**
+// * @author sunshihao
+// * @version 1.0
+// * @description: 消费文章信息
+// * @date 2025/8/19 16:32
+// */
+//@Component
+//@Slf4j
+//public class WordPressConsumer {
+//
+//    @Resource
+//    private DifyConfig difyConfig;
+//    @Resource
+//    private DifyModel difyModel;
+//    @Resource
+//    private WordPressModel wordPressModel;
+//
+//    /**
+//     * 通过注解直接声明:交换机、队列、绑定关系
+//     * 监听队列,自动消费消息并反序列化为PostEvent
+//     */
+//    @RabbitListener(
+//            bindings = @QueueBinding(
+//                    value = @Queue(
+//                            value = "wordpress_posts",
+//                            durable = "true",
+//                            exclusive = "false",
+//                            autoDelete = "false"
+//                    ),
+//                    exchange = @Exchange(
+//                            value = "wordpress_events",
+//                            type = ExchangeTypes.DIRECT,
+//                            durable = "true",
+//                            autoDelete = "false"
+//                    ),
+//                    key = ""
+//            )
+//    )
+//    public void handlePostEvent(PostBO postEvent) {
+//        // 业务处理逻辑
+//        if (!"updated".equals(postEvent.getEvent())) {
+//            return;
+//        }
+//        try {
+//            // 调用wp对外api接口,拉取文章信息
+//            String post = wordPressModel.getPostById(postEvent.getPostId(), postEvent.getSiteUrl());
+//            String title = postEvent.getPostTitle();
+//            // 调用dify对外api接口,更新文章信息
+//            String docId = difyModel.documents(difyConfig.getDatabaseId(), title);
+//            // 根据文章id更新文章内容
+//            if (StringUtils.isEmpty(docId)) {
+//                // 新增
+//                difyModel.createByText(difyConfig.getDatabaseId(), title, post);
+//            } else {
+//                // 修改
+//                difyModel.updateByText(difyConfig.getDatabaseId(), docId, title, post);
+//            }
+//        }catch (Exception e){
+//            log.error("同步wordpress到dify失败。"+e.getMessage(),e);
+//        }
+//    }
+//}

+ 1 - 1
xinkeaboard-server/b2b2c-web/src/main/resources/application-dev.yml

@@ -58,7 +58,7 @@ geoip:
 #dataforseo外部接口
 analysis:
   translateAddress: http://54.46.9.88:8007
-  loginUser: advichdev@gmail.com
+  loginUser: dataforseo@advich.com
   password: Admin@123.com
   searchVolume: https://api.dataforseo.com/v3/keywords_data/google/search_volume/live
   keywordsForSite: https://api.dataforseo.com/v3/keywords_data/google_ads/keywords_for_site/live