TASK:mixi;
This commit is contained in:
@@ -5,11 +5,13 @@ import cn.hutool.core.exceptions.ExceptionUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.mixi.common.config.FileProperties;
|
||||
import com.mixi.common.config.exception.BusinessException;
|
||||
import com.mixi.common.utils.AccessLimitUtils;
|
||||
import com.mixi.mapper.TProductMapper;
|
||||
import com.mixi.mapper.entity.TProduct;
|
||||
import com.mixi.model.dto.GenerateCollocationDataBaseDTO;
|
||||
import com.mixi.model.dto.GenerateCollocationQueryDTO;
|
||||
@@ -497,4 +499,71 @@ public class PythonService {
|
||||
|
||||
}
|
||||
|
||||
public List<TProduct> similarityMatch(String pictureUrl) {
|
||||
//限流校验
|
||||
AccessLimitUtils.validate("similarityMatch", 20);
|
||||
OkHttpClient client = new OkHttpClient().newBuilder()
|
||||
.connectTimeout(30, TimeUnit.SECONDS)
|
||||
.pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒)
|
||||
.readTimeout(300, TimeUnit.SECONDS)//读取超时(单位:秒)
|
||||
.writeTimeout(300, TimeUnit.SECONDS)//写入超时(单位:秒)
|
||||
.build();
|
||||
MediaType mediaType = MediaType.parse("application/json");
|
||||
Map<String, Object> content = Maps.newHashMap();
|
||||
content.put("image_path", pictureUrl);
|
||||
content.put("result_number", 5);
|
||||
RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(content));
|
||||
Request request = new Request.Builder()
|
||||
.url(accessPythonIp + ":9993/api/similar_matchsimilar_match")
|
||||
.method("POST", body)
|
||||
.addHeader("Authorization", "Basic YWlkbGFiOjEyMw==")
|
||||
.addHeader("Content-Type", "application/json")
|
||||
.build();
|
||||
Response response = null;
|
||||
String bodyStr = null;
|
||||
try {
|
||||
log.info("获取python获取相似商品请求入参content###{}", JSON.toJSONString(content));
|
||||
response = client.newCall(request).execute();
|
||||
bodyStr = response.body().string();
|
||||
} catch (IOException ioException) {
|
||||
log.error("PythonService##similarityMatch异常###{}", ExceptionUtil.getThrowableList(ioException));
|
||||
}
|
||||
log.info("识获取python获取相似商品请求结果###{}", bodyStr.trim());
|
||||
//去除限流
|
||||
AccessLimitUtils.validateOut("similarityMatch");
|
||||
if (Objects.isNull(response)) {
|
||||
log.error("PythonService##similarityMatch异常###{}", "response or body is empty!");
|
||||
throw new BusinessException("SimilarityMatch exception.");
|
||||
}
|
||||
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(response));
|
||||
Boolean result = jsonObject.getBoolean("successful");
|
||||
if (result) {
|
||||
JSONObject parseObject = JSON.parseObject(bodyStr.trim());
|
||||
return similarityMatchToList(parseObject);
|
||||
}
|
||||
log.info("获取python获取相似商品请求异常###{}", jsonObject);
|
||||
//生成失败
|
||||
throw new BusinessException("SimilarityMatch exception.");
|
||||
}
|
||||
|
||||
@Resource
|
||||
private TProductMapper tProductMapper;
|
||||
|
||||
private List<TProduct> similarityMatchToList(JSONObject parseObject) {
|
||||
List<TProduct> productList = new ArrayList<>();
|
||||
JSONArray data = parseObject.getJSONArray("data");
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
JSONObject jsonObject = data.getJSONObject(i);
|
||||
String imagePath = jsonObject.getString("image_path");
|
||||
String itemName = jsonObject.getString("item_name");
|
||||
QueryWrapper<TProduct> qw = new QueryWrapper<>();
|
||||
qw.lambda().eq(TProduct::getPictureUrl, imagePath);
|
||||
qw.lambda().eq(TProduct::getPictureName, itemName);
|
||||
List<TProduct> productList1 = tProductMapper.selectList(qw);
|
||||
if (CollectionUtil.isNotEmpty(productList1)) {
|
||||
productList.add(productList1.get(0));
|
||||
}
|
||||
}
|
||||
return productList;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user