Pārlūkot izejas kodu

调用Ai服务创建店铺评价标签

qxy 2 mēneši atpakaļ
vecāks
revīzija
8af977f7b2
1 mainītis faili ar 155 papildinājumiem un 24 dzēšanām
  1. 155 24
      alien-job/src/main/java/shop/alien/job/store/AiTagJob.java

+ 155 - 24
alien-job/src/main/java/shop/alien/job/store/AiTagJob.java

@@ -2,6 +2,7 @@ package shop.alien.job.store;
 
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -12,6 +13,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
 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.TagsMain;
 import shop.alien.entity.store.TagsSynonym;
@@ -19,11 +21,13 @@ import shop.alien.mapper.StoreCommentSummaryMapper;
 import shop.alien.mapper.TagsMainMapper;
 import shop.alien.mapper.TagsSynonymMapper;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- *调用AI标签数据服务类
+ * 调用AI标签数据服务类
  *
  * @author qxy
  * @date 2025/9/12 14:21
@@ -57,13 +61,107 @@ public class AiTagJob {
     @Value("${third-party-login.base-url}")
     private String loginUrl;
 
+    // 第三方接口地址 创建Ai标签数据接口
+    @Value("${third-party-savetag.base-url}")
+    private String saveTagUrl;
+
+    //用户名
     @Value("${third-party-user-name.base-url}")
     private String userName;
 
+    //密码
     @Value("${third-party-pass-word.base-url}")
     private String passWord;
 
     /**
+     * 创建Ai标签评论数据
+     */
+    @XxlJob("getSaveTagsTask")
+    public R<String> getSaveTagsTask() {
+        log.info("登录第三方服务获取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("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请求
+                getSaveTagsTaskInfo(accessToken);
+            } else {
+                log.error("请求AI服务 登录接口失败 http状态:" + postForEntity.getStatusCode());
+                return null;
+            }
+        }
+
+        return null;
+    }
+
+    public R<String> getSaveTagsTaskInfo(String token) {
+        log.info("开始从第三方服务创建Ai标签评论数据...");
+        log.info("restTemplate:" + restTemplate + "url:" + saveTagUrl);
+
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+
+        // 获取当月第一天
+        LocalDate firstDayOfMonth = today.withDayOfMonth(1);
+
+        // 获取当月最后一天
+        LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());
+
+        // 格式化为字符串(可根据需要调整格式)
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String startDate = firstDayOfMonth.format(formatter);
+        String endDate = lastDayOfMonth.format(formatter);
+
+        // 1. 构建请求头
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        headers.set("Authorization", "Bearer " + token);
+        // Token 认证
+
+        AnalysisRequest jsonBody = new AnalysisRequest();
+        jsonBody.setStart_time(startDate + "T00:00:00");
+        jsonBody.setEnd_time(endDate + "T23:59:59");
+
+        HttpEntity<AnalysisRequest> request = new HttpEntity<>(jsonBody, headers);
+        ResponseEntity<String> response = null;
+        try {
+            response = restTemplate.postForEntity(saveTagUrl, request, String.class);
+        } catch (Exception e) {
+            log.error("类:PostMethod 方法:post", e);
+        }
+
+        if (response != null) {
+            if (response.getStatusCodeValue() == 200) {
+                log.info("postForEntity.getBody()\t" + response.getStatusCode());
+                XxlJobHelper.handleSuccess("创建标签成功 状态码" + response.getStatusCode());
+                return R.success("创建成功");
+            }
+        }
+        log.error("请求AI服务 创建标签数据失败 http状态:" + response.getStatusCode());
+        XxlJobHelper.handleFail("任务执行失败 状态码" + response.getStatusCode());
+        return R.fail("创建失败 状态码:" + response.getStatusCode());
+    }
+
+    /**
      * 拉取Ai服务标签主表数据
      */
     @XxlJob("getTagMainTask")
@@ -99,11 +197,10 @@ public class AiTagJob {
                 return null;
             }
         }
-
         return null;
     }
 
-    public String getTagMainTaskInfo(String token) {
+    public R<String> getTagMainTaskInfo(String token) {
         log.info("开始从第三方服务获取标签主表信息...");
         log.info("restTemplate:" + restTemplate + "url:" + tagMainUrl);
         // 1. 构建请求头
@@ -131,7 +228,7 @@ public class AiTagJob {
             String message = jsonObject.getString("message");
             JSONArray dataArray = jsonObject.getJSONArray("data");
             List<TagsMain> tagsMainList = new ArrayList<>();
-            for(int i = 0; i<dataArray.size(); i++){
+            for (int i = 0; i < dataArray.size(); i++) {
                 JSONObject tagObj = dataArray.getJSONObject(i);
                 TagsMain tagsMain = new TagsMain();
                 tagsMain.setId(tagObj.getInteger("id"));
@@ -145,14 +242,17 @@ public class AiTagJob {
                 tagsMain.setUpdatedUserId(tagObj.getInteger("updated_user_id"));
                 tagsMainList.add(tagsMain);
             }
-            if(!CollectionUtils.isEmpty(tagsMainList)){
-                tagsMainMapper.insertBatchTagsMain(tagsMainList);
+            if (!CollectionUtils.isEmpty(tagsMainList)) {
+                int num = tagsMainMapper.insertBatchTagsMain(tagsMainList);
+                XxlJobHelper.handleSuccess("拉取主标签数据成功 执行" + num + "条");
+                return R.success("拉取主标签数据成功 执行" + num + "条");
+            }else{
+                XxlJobHelper.handleSuccess("获取回显数据为空 状态码:"+ responseEntity.getStatusCodeValue());
+                return R.success("请求成功 获取回显数据为空 状态码:"+ responseEntity.getStatusCodeValue());
             }
-
-        } else {
-            log.info("AI服务主表请求失败,状态码:" + responseEntity.getStatusCodeValue());
         }
-        return null;
+        XxlJobHelper.handleFail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
+        return R.fail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
     }
 
 
@@ -196,7 +296,7 @@ public class AiTagJob {
         return null;
     }
 
-    public String getTagsSynonymTaskInfo(String token) {
+    public R<String> getTagsSynonymTaskInfo(String token) {
         log.info("开始从第三方服务获取数据 获取所有标签子表信息...");
         log.info("restTemplate:" + restTemplate + "url:" + tagsSynonymUrl);
         // 1. 构建请求头
@@ -224,7 +324,7 @@ public class AiTagJob {
             String message = jsonObject.getString("message");
             JSONArray dataArray = jsonObject.getJSONArray("data");
             List<TagsSynonym> tagsSynonymList = new ArrayList<>();
-            for(int i = 0; i<dataArray.size(); i++){
+            for (int i = 0; i < dataArray.size(); i++) {
                 JSONObject tagObj = dataArray.getJSONObject(i);
                 TagsSynonym tagsSynonym = new TagsSynonym();
                 tagsSynonym.setId(tagObj.getInteger("id"));
@@ -240,13 +340,18 @@ public class AiTagJob {
                 tagsSynonym.setUpdatedUserId(tagObj.getInteger("updated_user_id"));
                 tagsSynonymList.add(tagsSynonym);
             }
-            if(!CollectionUtils.isEmpty(tagsSynonymList)){
-                tagsSynonymMapper.insertBatchTagsSynonym(tagsSynonymList);
+            if (!CollectionUtils.isEmpty(tagsSynonymList)) {
+                int num = tagsSynonymMapper.insertBatchTagsSynonym(tagsSynonymList);
+                XxlJobHelper.handleSuccess("拉取子标签数据成功 执行" + num + "条");
+                return R.success("拉取子标签数据成功 执行" + num + "条");
+            }else{
+                XxlJobHelper.handleSuccess("获取回显数据为空"+"状态码:"+responseEntity.getStatusCodeValue());
+                return R.success("请求成功 获取回显数据为空"+"状态码:"+responseEntity.getStatusCodeValue());
             }
-        } else {
-            log.info("AI服务子表请求失败,状态码:" + responseEntity.getStatusCodeValue());
         }
-        return null;
+        log.info("AI服务子表请求失败,状态码:" + responseEntity.getStatusCodeValue());
+        XxlJobHelper.handleFail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
+        return R.fail("AI服务子表请求失败,状态码:"+responseEntity.getStatusCodeValue());
     }
 
     /**
@@ -289,7 +394,7 @@ public class AiTagJob {
         return null;
     }
 
-    public String getStoreCommentSummaryTaskInfo(String token) {
+    public R<String> getStoreCommentSummaryTaskInfo(String token) {
         log.info("开始从第三方服务获取数据 获取推荐信息数据 店铺评论总结表...");
         log.info("restTemplate:" + restTemplate + "url:" + allSummaryUrl);
         // 1. 构建请求头
@@ -317,7 +422,7 @@ public class AiTagJob {
             String message = jsonObject.getString("message");
             JSONArray dataArray = jsonObject.getJSONArray("data");
             List<StoreCommentSummary> storeCommentSummaries = new ArrayList<>();
-            for(int i = 0; i<dataArray.size(); i++){
+            for (int i = 0; i < dataArray.size(); i++) {
                 JSONObject tagObj = dataArray.getJSONObject(i);
                 StoreCommentSummary summary = new StoreCommentSummary();
                 summary.setId(tagObj.getInteger("id"));
@@ -333,13 +438,39 @@ public class AiTagJob {
                 summary.setUpdatedUserId(tagObj.getInteger("updated_user_id"));
                 storeCommentSummaries.add(summary);
             }
-            if(!CollectionUtils.isEmpty(storeCommentSummaries)){
-                storeCommentSummaryMapper.insertBatchStoreCommentSummary(storeCommentSummaries);
+            if (!CollectionUtils.isEmpty(storeCommentSummaries)) {
+                int num = storeCommentSummaryMapper.insertBatchStoreCommentSummary(storeCommentSummaries);
+                XxlJobHelper.handleSuccess("拉取子标签数据成功 执行" + num + "条");
+                return R.success("拉取子标签数据成功 执行" + num + "条");
+            }else {
+                XxlJobHelper.handleSuccess("获取回显数据为空"+"状态码:"+responseEntity.getStatusCodeValue());
+                return R.success("请求成功 获取回显数据为空"+"状态码:"+responseEntity.getStatusCodeValue());
             }
-        } else {
-            log.info("AI服务 推荐信息数据请求失败,状态码:" + responseEntity.getStatusCodeValue());
         }
-        return null;
+        log.info("AI服务 推荐信息数据请求失败,状态码:" + responseEntity.getStatusCodeValue());
+        XxlJobHelper.handleFail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
+        return R.success("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
+    }
+
+    class AnalysisRequest {
+        private String start_time;
+        private String end_time;
+
+        public String getStart_time() {
+            return start_time;
+        }
+
+        public void setStart_time(String start_time) {
+            this.start_time = start_time;
+        }
+
+        public String getEnd_time() {
+            return end_time;
+        }
+
+        public void setEnd_time(String end_time) {
+            this.end_time = end_time;
+        }
     }
 
 }