diff --git a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/rest/tongyi/QGResponse.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/QGResponse.java similarity index 94% rename from iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/rest/tongyi/QGResponse.java rename to iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/QGResponse.java index aff3546..9ba914f 100644 --- a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/rest/tongyi/QGResponse.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/QGResponse.java @@ -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; diff --git a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/rest/tongyi/TongYiCommunicationRest.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/TongYiCommunicationRest.java similarity index 71% rename from iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/rest/tongyi/TongYiCommunicationRest.java rename to iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/TongYiCommunicationRest.java index db33a50..5465b70 100644 --- a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/rest/tongyi/TongYiCommunicationRest.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/TongYiCommunicationRest.java @@ -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.发起中 } diff --git a/iot-common/iot-third/pom.xml b/iot-common/iot-third/pom.xml index 44e7320..a15e2be 100644 --- a/iot-common/iot-third/pom.xml +++ b/iot-common/iot-third/pom.xml @@ -58,6 +58,10 @@ org.springframework.amqp spring-rabbit + + org.springframework.data + spring-data-redis + diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/QWenService.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/QWenService.java new file mode 100644 index 0000000..be251cd --- /dev/null +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/QWenService.java @@ -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 communication(TongYiCommunicationRest rest){ + ReactiveValueOperations operations = reactiveStringRedisTemplate.opsForValue(); + return operations.get(RedisConstans.TY_QUEUE_LIST+rest.getOnlyId()).defaultIfEmpty("").flatMap(res -> { + JSONArray objects = JSONArray.parseArray(res); + List 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 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 httpTY(HashMap 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 map = new HashMap<>(); + map.put("task_type", "qwen"); + map.put("text", "你好"); + try { + Mono qgResponseMono = httpTY(map); + System.out.println(qgResponseMono.block()); + }catch (Exception e) { + log.info("异常:{}", e); + } + + } + +} diff --git a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/controller/tongyi/TYController.java b/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/controller/tongyi/TYController.java index 70142c2..a664ec2 100644 --- a/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/controller/tongyi/TYController.java +++ b/iot-modules/iot-box-user-api/src/main/java/com/qiuguo/iot/user/api/controller/tongyi/TYController.java @@ -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")