|
|
@@ -0,0 +1,485 @@
|
|
|
+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;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.http.*;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+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;
|
|
|
+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标签数据服务类
|
|
|
+ *
|
|
|
+ * @author qxy
|
|
|
+ * @date 2025/9/12 14:21
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class AiTagJob {
|
|
|
+
|
|
|
+ private final RestTemplate restTemplate;
|
|
|
+
|
|
|
+ private final TagsMainMapper tagsMainMapper;
|
|
|
+
|
|
|
+ private final TagsSynonymMapper tagsSynonymMapper;
|
|
|
+
|
|
|
+ private final StoreCommentSummaryMapper storeCommentSummaryMapper;
|
|
|
+
|
|
|
+ // 第三方接口地址 获取所有标签主表信息
|
|
|
+ @Value("${third-party-tag.base-url}")
|
|
|
+ private String tagMainUrl;
|
|
|
+
|
|
|
+ // 第三方接口地址 获取所有标签子表信息
|
|
|
+ @Value("${third-party-synonym.base-url}")
|
|
|
+ private String tagsSynonymUrl;
|
|
|
+
|
|
|
+ // 第三方接口地址 获取推荐信息数据 店铺评论总结表
|
|
|
+ @Value("${third-party-summary.base-url}")
|
|
|
+ private String allSummaryUrl;
|
|
|
+
|
|
|
+ // 第三方接口地址 登录接口URL
|
|
|
+ @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("登录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 {
|
|
|
+ log.info("请求Ai服务登录接口===================>");
|
|
|
+ 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标签评论数据方法
|
|
|
+ getSaveTagsTaskInfo(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> 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);
|
|
|
+ // Token 认证
|
|
|
+ headers.set("Authorization", "Bearer " + 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("创建成功");
|
|
|
+ } else {
|
|
|
+ log.error("请求AI服务 创建标签数据失败 http状态:" + response.getStatusCode());
|
|
|
+ XxlJobHelper.handleFail("请求AI服务 创建标签数据失败 http状态" + response.getStatusCode());
|
|
|
+ return R.fail("请求AI服务 创建标签数据失败 http状态:" + response.getStatusCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.error("创建标签任务执行失败 返回异常");
|
|
|
+ XxlJobHelper.handleFail("创建标签任务执行失败 返回异常");
|
|
|
+ return R.fail("创建标签任务执行失败 返回异常");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 拉取Ai服务标签主表数据
|
|
|
+ */
|
|
|
+ @XxlJob("getTagMainTask")
|
|
|
+ public R<String> getTagMainTask() {
|
|
|
+ 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请求
|
|
|
+ getTagMainTaskInfo(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> getTagMainTaskInfo(String token) {
|
|
|
+ log.info("开始从Ai服务获取标签主表信息...");
|
|
|
+ log.info("restTemplate:" + restTemplate + "url:" + tagMainUrl);
|
|
|
+ // 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(
|
|
|
+ tagMainUrl,
|
|
|
+ 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<TagsMain> tagsMainList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < dataArray.size(); i++) {
|
|
|
+ JSONObject tagObj = dataArray.getJSONObject(i);
|
|
|
+ TagsMain tagsMain = new TagsMain();
|
|
|
+ tagsMain.setId(tagObj.getInteger("id"));
|
|
|
+ tagsMain.setTagName(tagObj.getString("tag_name"));
|
|
|
+ tagsMain.setStoreId(tagObj.getInteger("store_id"));
|
|
|
+ tagsMain.setTagType(tagObj.getInteger("tag_type"));
|
|
|
+ tagsMain.setDeleteFlag(tagObj.getInteger("delete_flag"));
|
|
|
+ tagsMain.setCreatedTime(tagObj.getDate("created_time"));
|
|
|
+ tagsMain.setCreatedUserId(tagObj.getInteger("created_user_id"));
|
|
|
+ tagsMain.setUpdatedTime(tagObj.getDate("updated_time"));
|
|
|
+ tagsMain.setUpdatedUserId(tagObj.getInteger("updated_user_id"));
|
|
|
+ tagsMainList.add(tagsMain);
|
|
|
+ }
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ XxlJobHelper.handleFail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
|
|
|
+ return R.fail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 拉取Ai服务子标签数据
|
|
|
+ */
|
|
|
+ @XxlJob("getTagsSynonymTask")
|
|
|
+ public R<String> getTagsSynonymTask() {
|
|
|
+ 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请求
|
|
|
+ getTagsSynonymTaskInfo(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> getTagsSynonymTaskInfo(String token) {
|
|
|
+ log.info("开始从Ai服务获取数据 获取所有标签子表信息...");
|
|
|
+ log.info("restTemplate:" + restTemplate + "url:" + tagsSynonymUrl);
|
|
|
+ // 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(
|
|
|
+ tagsSynonymUrl,
|
|
|
+ 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<TagsSynonym> tagsSynonymList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < dataArray.size(); i++) {
|
|
|
+ JSONObject tagObj = dataArray.getJSONObject(i);
|
|
|
+ TagsSynonym tagsSynonym = new TagsSynonym();
|
|
|
+ tagsSynonym.setId(tagObj.getInteger("id"));
|
|
|
+ tagsSynonym.setMainTagId(tagObj.getInteger("main_tag_id"));
|
|
|
+ tagsSynonym.setCommentId(tagObj.getInteger("comment_id"));
|
|
|
+ tagsSynonym.setSynonymTag(tagObj.getString("synonym_tag"));
|
|
|
+ tagsSynonym.setTagType(tagObj.getInteger("tag_type"));
|
|
|
+ tagsSynonym.setTaskId(tagObj.getString("task_id"));
|
|
|
+ tagsSynonym.setDeleteFlag(tagObj.getInteger("delete_flag"));
|
|
|
+ tagsSynonym.setCreatedTime(tagObj.getDate("created_time"));
|
|
|
+ tagsSynonym.setCreatedUserId(tagObj.getInteger("created_user_id"));
|
|
|
+ tagsSynonym.setUpdatedTime(tagObj.getDate("updated_time"));
|
|
|
+ tagsSynonym.setUpdatedUserId(tagObj.getInteger("updated_user_id"));
|
|
|
+ tagsSynonymList.add(tagsSynonym);
|
|
|
+ }
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ XxlJobHelper.handleFail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
|
|
|
+ return R.fail("任务执行失败 状态码" + responseEntity.getStatusCodeValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 拉取Ai服务获取推荐信息数据
|
|
|
+ */
|
|
|
+ @XxlJob("getStoreCommentSummaryTask")
|
|
|
+ public R<String> getStoreCommentSummaryTask() {
|
|
|
+ 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请求
|
|
|
+ getStoreCommentSummaryTaskInfo(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> getStoreCommentSummaryTaskInfo(String token) {
|
|
|
+ log.info("开始从Ai服务获取数据 获取推荐信息数据 店铺评论总结表...");
|
|
|
+ log.info("restTemplate:" + restTemplate + "url:" + allSummaryUrl);
|
|
|
+ // 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(
|
|
|
+ allSummaryUrl,
|
|
|
+ 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<StoreCommentSummary> storeCommentSummaries = new ArrayList<>();
|
|
|
+ for (int i = 0; i < dataArray.size(); i++) {
|
|
|
+ JSONObject tagObj = dataArray.getJSONObject(i);
|
|
|
+ StoreCommentSummary summary = new StoreCommentSummary();
|
|
|
+ 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.setIsShow(tagObj.getInteger("is_show"));
|
|
|
+ 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"));
|
|
|
+ storeCommentSummaries.add(summary);
|
|
|
+ }
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|