|
@@ -1,5 +1,7 @@
|
|
|
package shop.alien.store.controller;
|
|
package shop.alien.store.controller;
|
|
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
|
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.Api;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
@@ -16,8 +18,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
import shop.alien.entity.result.R;
|
|
import shop.alien.entity.result.R;
|
|
|
|
|
+import shop.alien.entity.store.vo.StoreInfoVo;
|
|
|
|
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
@@ -57,9 +62,17 @@ public class AiSearchController {
|
|
|
String body = stringResponseEntity.getBody();
|
|
String body = stringResponseEntity.getBody();
|
|
|
JSONObject jsonObject = JSONObject.parseObject(body);
|
|
JSONObject jsonObject = JSONObject.parseObject(body);
|
|
|
JSONObject jsonObject1 = new JSONObject();
|
|
JSONObject jsonObject1 = new JSONObject();
|
|
|
- jsonObject1.put("total",jsonObject.get("total"));
|
|
|
|
|
- jsonObject1.put("records",jsonObject.get("results"));
|
|
|
|
|
- jsonObject1.put("size",map.get("pageSize"));
|
|
|
|
|
|
|
+ if ("生活服务".equals(requestBody.get("category")) || "休闲娱乐".equals(requestBody.get("category"))) {
|
|
|
|
|
+ // 生活服务类别:转换为StoreInfoVo,确保返回的字段名按照StoreInfoVo定义
|
|
|
|
|
+ List<StoreInfoVo> result = convertToStoreInfoList(jsonObject.getJSONArray("results"));
|
|
|
|
|
+ jsonObject1.put("records", result);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 其他类别:直接返回原始结果
|
|
|
|
|
+ jsonObject1.put("records", jsonObject.get("results"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ jsonObject1.put("total", jsonObject.get("total"));
|
|
|
|
|
+ jsonObject1.put("size", map.get("pageSize"));
|
|
|
log.info("调用AI搜索接口 接口返回------{}", body);
|
|
log.info("调用AI搜索接口 接口返回------{}", body);
|
|
|
return R.data(jsonObject1);
|
|
return R.data(jsonObject1);
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -68,6 +81,62 @@ public class AiSearchController {
|
|
|
return R.fail("请求失败");
|
|
return R.fail("请求失败");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private List<StoreInfoVo> convertToStoreInfoList(JSONArray results) {
|
|
|
|
|
+ List<StoreInfoVo> storeInfoList = new ArrayList<>();
|
|
|
|
|
+ if (results != null) {
|
|
|
|
|
+ for (int i = 0; i < results.size(); i++) {
|
|
|
|
|
+ JSONObject item = results.getJSONObject(i);
|
|
|
|
|
+ // 记录第一条数据的字段名和内容,用于调试
|
|
|
|
|
+ if (i == 0) {
|
|
|
|
|
+ log.info("AI返回的JSON字段示例: {}", item.keySet());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 创建新的JSONObject,将下划线命名转换为驼峰命名
|
|
|
|
|
+ JSONObject camelCaseItem = new JSONObject();
|
|
|
|
|
+ for (String key : item.keySet()) {
|
|
|
|
|
+ String camelKey = underscoreToCamelCase(key);
|
|
|
|
|
+ camelCaseItem.put(camelKey, item.get(key));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 将"name"字段映射到"storeName"字段
|
|
|
|
|
+ if (camelCaseItem.containsKey("name") && !camelCaseItem.containsKey("storeName")) {
|
|
|
|
|
+ camelCaseItem.put("storeName", camelCaseItem.get("name"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 使用JSON.parseObject方法进行转换
|
|
|
|
|
+ StoreInfoVo storeInfo = JSON.parseObject(camelCaseItem.toJSONString(), StoreInfoVo.class);
|
|
|
|
|
+ storeInfoList.add(storeInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return storeInfoList;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 将下划线命名转换为驼峰命名
|
|
|
|
|
+ * 例如: store_tel -> storeTel, created_time -> createdTime
|
|
|
|
|
+ */
|
|
|
|
|
+ private String underscoreToCamelCase(String underscore) {
|
|
|
|
|
+ if (underscore == null || !underscore.contains("_")) {
|
|
|
|
|
+ return underscore;
|
|
|
|
|
+ }
|
|
|
|
|
+ StringBuilder camelCase = new StringBuilder();
|
|
|
|
|
+ boolean nextUpperCase = false;
|
|
|
|
|
+ for (char c : underscore.toCharArray()) {
|
|
|
|
|
+ if (c == '_') {
|
|
|
|
|
+ nextUpperCase = true;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (nextUpperCase) {
|
|
|
|
|
+ camelCase.append(Character.toUpperCase(c));
|
|
|
|
|
+ nextUpperCase = false;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ camelCase.append(c);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return camelCase.toString();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|