浏览代码

定时拉取AI服务店铺趣味信息数据

qxy 1 月之前
父节点
当前提交
d26c5b3c26

+ 63 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreCommentSummaryInterest.java

@@ -0,0 +1,63 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * AI服务 店铺推荐趣味信息表
+ */
+@Data
+@JsonInclude
+@TableName("store_comment_summary_interest")
+@ApiModel(value = "store_comment_summary_interest", description = "store_comment_summary_interest")
+public class StoreCommentSummaryInterest {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "店铺ID(新增字段)")
+    @TableField("store_id")
+    private Integer storeId;
+
+    @ApiModelProperty(value = "店铺名称(对应表格“店铺名称”)")
+    @TableField("store_name")
+    private String storeName;
+
+    @ApiModelProperty(value = "总结内容(对应表格“总结内容”,允许为空)")
+    @TableField("summary")
+    private String summary;
+
+    @ApiModelProperty(value = "任务唯一标识(如 UUID,新增字段)")
+    @TableField("task_id")
+    private String taskId;
+
+    @ApiModelProperty(value = "删除标识")
+    @TableLogic
+    @TableField("delete_flag")
+    private Integer  deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}

+ 39 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreCommentSummaryInterestMapper.java

@@ -0,0 +1,39 @@
+package shop.alien.mapper;
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.store.StoreCommentSummaryInterest;
+
+import java.util.List;
+
+/**
+ * qxy
+ * AI 服务 店铺趣味信息
+ */
+@Mapper
+public interface StoreCommentSummaryInterestMapper {
+    @Insert({
+            "<script>", // 开启动态 SQL 脚本
+            "INSERT INTO store_comment_summary_interest (",
+            "  id, store_id, store_name, summary, task_id, delete_flag, created_time, created_user_id,",
+            "  updated_time, updated_user_id",
+            ")",
+            "VALUES",
+            "<foreach collection='list' item='item' separator=','>",
+            "(",
+            "  #{item.id},",
+            "  #{item.storeId},",
+            "  #{item.storeName},",
+            "  #{item.summary},",
+            "  #{item.taskId},",
+            "  #{item.deleteFlag},",
+            "  #{item.createdTime},",
+            "  #{item.createdUserId},",
+            "  #{item.updatedTime},",
+            "  #{item.updatedUserId}",
+            ")",
+            "</foreach>",
+            "</script>" // 关闭动态 SQL 脚本
+    })
+    int insertBatchStoreCommentSummaryInterest(List<StoreCommentSummaryInterest> storeCommentSummaryInterests);
+}

+ 106 - 0
alien-job/src/main/java/shop/alien/job/store/AiTagJob.java

@@ -15,8 +15,10 @@ import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreCommentSummary;
+import shop.alien.entity.store.StoreCommentSummaryInterest;
 import shop.alien.entity.store.TagsMain;
 import shop.alien.entity.store.TagsSynonym;
+import shop.alien.mapper.StoreCommentSummaryInterestMapper;
 import shop.alien.mapper.StoreCommentSummaryMapper;
 import shop.alien.mapper.TagsMainMapper;
 import shop.alien.mapper.TagsSynonymMapper;
@@ -45,6 +47,8 @@ public class AiTagJob {
 
     private final StoreCommentSummaryMapper storeCommentSummaryMapper;
 
+    private final StoreCommentSummaryInterestMapper storeCommentSummaryInterestMapper;
+
     // 第三方接口地址 获取所有标签主表信息
     @Value("${third-party-tag.base-url}")
     private String tagMainUrl;
@@ -57,6 +61,10 @@ public class AiTagJob {
     @Value("${third-party-summary.base-url}")
     private String allSummaryUrl;
 
+    // 第三方接口地址 获取店铺趣味信息
+    @Value("${third-party-interest.base-url}")
+    private String allInterestUrl;
+
     // 第三方接口地址 登录接口URL
     @Value("${third-party-login.base-url}")
     private String loginUrl;
@@ -461,6 +469,104 @@ public class AiTagJob {
         return R.success("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
     }
 
+    /**
+     * 拉取Ai服务获取趣味推荐信息表数据
+     */
+    @XxlJob("getStoreCommentSummaryInterestTask")
+    public R<String> getStoreCommentSummaryInterestTask() {
+        log.info("登录Ai服务获取token..." + loginUrl);
+        //构建请求参数
+        MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
+        formData.add("username", userName);    // 表单字段 1:用户名
+        formData.add("password", passWord);    // 表单字段 2:密码
+
+        //设置请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(formData, headers);
+        ResponseEntity<String> postForEntity = null;
+        try {
+            postForEntity = restTemplate.postForEntity(loginUrl, requestEntity, String.class);
+        } catch (Exception e) {
+            log.error("类:PostMethod 方法:post", e);
+        }
+
+        if (postForEntity != null) {
+            if (postForEntity.getStatusCodeValue() == 200) {
+                log.info("请求Ai服务登录成功 postForEntity.getBody()\t" + postForEntity.getBody());
+                String responseBody = postForEntity.getBody();
+                JSONObject jsonObject = JSONObject.parseObject(responseBody);
+                JSONObject dataJson = jsonObject.getJSONObject("data");
+                String accessToken = dataJson.getString("access_token");
+                //调用 获取AI服务 获取趣味推荐信息表 get请求
+                getStoreCommentSummaryInterestInfo(accessToken);
+                return R.success("任务执行成功");
+            } else {
+                log.error("请求AI服务 登录接口失败 http状态:" + postForEntity.getStatusCode());
+                return R.fail("请求AI服务 登录接口失败 http状态:" + postForEntity.getStatusCode());
+            }
+        }
+        XxlJobHelper.handleFail("登录任务执行失败 返回异常");
+        return R.fail("登录任务执行失败 返回异常");
+    }
+
+    public R<String> getStoreCommentSummaryInterestInfo(String token) {
+        log.info("开始从Ai服务获取数据 获取趣味推荐信息表...");
+        log.info("restTemplate:" + restTemplate + "url:" + allInterestUrl);
+        // 1. 构建请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Authorization", "Bearer " + token); // Token 认证
+        headers.set("accept", "*/*");
+        headers.set("connection", "Keep-Alive");
+        headers.set("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+        // 2. 构建请求实体(仅包含头信息,GET 请求通常无请求体)
+        HttpEntity<?> requestEntity = new HttpEntity<>(headers);
+
+        // 发送 GET 请求,响应体为 String 类型
+        ResponseEntity<String> responseEntity = restTemplate.exchange(
+                allInterestUrl,
+                HttpMethod.GET,  // 指定请求方法为 GET
+                requestEntity,
+                String.class     // 响应体类型
+        );
+
+        // 解析响应
+        if (responseEntity.getStatusCodeValue() == 200) {
+            String responseBody = responseEntity.getBody();
+            JSONObject jsonObject = JSONObject.parseObject(responseBody);
+            Integer code = jsonObject.getInteger("code");
+            String message = jsonObject.getString("message");
+            JSONArray dataArray = jsonObject.getJSONArray("data");
+            List<StoreCommentSummaryInterest> storeCommentSummaryInterests = new ArrayList<>();
+            for (int i = 0; i < dataArray.size(); i++) {
+                JSONObject tagObj = dataArray.getJSONObject(i);
+                StoreCommentSummaryInterest summary = new StoreCommentSummaryInterest();
+                summary.setId(tagObj.getInteger("id"));
+                summary.setStoreId(tagObj.getInteger("store_id"));
+                summary.setStoreName(tagObj.getString("store_name"));
+                summary.setSummary(tagObj.getString("summary"));
+                summary.setTaskId(tagObj.getString("task_id"));
+                summary.setDeleteFlag(tagObj.getInteger("delete_flag"));
+                summary.setCreatedTime(tagObj.getDate("created_time"));
+                summary.setCreatedUserId(tagObj.getInteger("created_user_id"));
+                summary.setUpdatedTime(tagObj.getDate("updated_time"));
+                summary.setUpdatedUserId(tagObj.getInteger("updated_user_id"));
+                storeCommentSummaryInterests.add(summary);
+            }
+            if (!CollectionUtils.isEmpty(storeCommentSummaryInterests)) {
+                int num = storeCommentSummaryInterestMapper.insertBatchStoreCommentSummaryInterest(storeCommentSummaryInterests);
+                XxlJobHelper.handleSuccess("拉取子标签数据成功 执行" + num + "条");
+                return R.success("拉取子标签数据成功 执行" + num + "条");
+            } else {
+                XxlJobHelper.handleSuccess("获取回显数据为空" + "状态码:" + responseEntity.getStatusCodeValue());
+                return R.success("请求成功 获取回显数据为空" + "状态码:" + responseEntity.getStatusCodeValue());
+            }
+        }
+        log.info("AI服务 获取趣味推荐信息数据请求失败,状态码:" + responseEntity.getStatusCodeValue());
+        XxlJobHelper.handleFail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
+        return R.success("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
+    }
+
     class AnalysisRequest {
         private String start_time;
         private String end_time;