[optimization] 通义千问代码优化

This commit is contained in:
W.Y 2023-10-09 20:33:58 +08:00
parent cda40fadcc
commit bbbddff6ab
5 changed files with 97 additions and 6 deletions

View File

@ -1,4 +1,4 @@
package com.qiuguo.iot.user.api.rest.tongyi;
package com.qiuguo.iot.data.request;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty;

View File

@ -1,4 +1,4 @@
package com.qiuguo.iot.user.api.rest.tongyi;
package com.qiuguo.iot.data.request;
import lombok.Data;
@ -6,6 +6,6 @@ import lombok.Data;
public class TongYiCommunicationRest {
private Integer isWhiteList;//是否为白名单
private String text;//消息
private String deviceId;//设备序列号
private String onlyId;//设备序列号 唯一
private String status; //状态,0:已完成,1.未发起,2.发起中
}

View File

@ -58,6 +58,10 @@
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
</dependencies>

View File

@ -0,0 +1,88 @@
package com.qiuguo.iot.third.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.base.constans.RedisConstans;
import com.qiuguo.iot.base.utils.WebClientUtils;
import com.qiuguo.iot.data.request.QGResponse;
import com.qiuguo.iot.data.request.TongYiCommunicationRest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
import org.springframework.data.redis.core.ReactiveValueOperations;
import org.springframework.util.ObjectUtils;
import reactor.core.publisher.Mono;
import javax.annotation.Resource;
import java.util.*;
@Slf4j
public class QWenService {
@Resource
private ReactiveStringRedisTemplate reactiveStringRedisTemplate;
public Mono<QGResponse.Data> communication(TongYiCommunicationRest rest){
ReactiveValueOperations<String, String> operations = reactiveStringRedisTemplate.opsForValue();
return operations.get(RedisConstans.TY_QUEUE_LIST+rest.getOnlyId()).defaultIfEmpty("").flatMap(res -> {
JSONArray objects = JSONArray.parseArray(res);
List<TongYiCommunicationRest> list = new LinkedList<>();
try {
if (!ObjectUtils.isEmpty(objects)){
list = JSONObject.parseArray(res, TongYiCommunicationRest.class);
if (rest.getIsWhiteList() == 0) {
//是白名单,插入头部
log.info("收到白名单对应信息,接收参数为:{}", rest);
list.add(0,rest);
}
}
//不是白名单插入尾部
list.add(rest);
operations.set(RedisConstans.TY_QUEUE_LIST+rest.getOnlyId(), JSONArray.toJSONString(list)).subscribe();
//通知Redis让Redis进行消费
HashMap<String, Object> map = new HashMap<>();
map.put("task_type", "qwen");
map.put("text", rest.getText());
return httpTY(map) ;
}catch (Exception e){
log.error("调用异常:");
return Mono.just(new QGResponse().getData());
}finally {
reactiveStringRedisTemplate.delete(RedisConstans.TY_QUEUE_LIST+rest.getOnlyId()).subscribe();
}
});
}
public static Mono<QGResponse.Data> httpTY(HashMap<String, Object> map){
return WebClientUtils.post("http://192.168.8.211:5010/qg_human/qwen", new JSONObject(map)).flatMap(jsonObject -> {
long time = new Date().getTime();
QGResponse qgResponse = jsonObject.toJavaObject(QGResponse.class);
log.info("发起TY请求,响应时间时间为:{}", new Date().getTime()-time);
if (qgResponse.getStatusCode() == 0) {
//成功
log.info("通知成功:"+ qgResponse.getData());
return Mono.just(qgResponse.getData());
}
//失败
log.info("通知失败:"+ map);
return Mono.just(qgResponse.getData());
});
}
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<>();
map.put("task_type", "qwen");
map.put("text", "你好");
try {
Mono<QGResponse.Data> qgResponseMono = httpTY(map);
System.out.println(qgResponseMono.block());
}catch (Exception e) {
log.info("异常:{}", e);
}
}
}

View File

@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.base.constans.RedisConstans;
import com.qiuguo.iot.base.utils.WebClientUtils;
import com.qiuguo.iot.user.api.rest.tongyi.QGResponse;
import com.qiuguo.iot.user.api.rest.tongyi.TongYiCommunicationRest;
import com.qiuguo.iot.data.request.QGResponse;
import com.qiuguo.iot.data.request.TongYiCommunicationRest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
import org.springframework.data.redis.core.ReactiveValueOperations;
@ -18,7 +18,6 @@ import reactor.core.publisher.Mono;
import javax.annotation.Resource;
import java.util.*;
import java.util.function.Function;
@RestController
@RequestMapping("/TY")