|
|
@@ -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;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|