diff --git a/.DS_Store b/.DS_Store index c3c6227..2ca9dd2 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/HttpHeaderConstans.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/HttpHeaderConstans.java new file mode 100644 index 0000000..6cf301c --- /dev/null +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/HttpHeaderConstans.java @@ -0,0 +1,26 @@ +package com.qiuguo.iot.base.constans; + +public class HttpHeaderConstans { + public static String API_TYPE = "api-type"; + public static String API_TOKEN = "api-token"; + + public static String BOX_SIGNATURE = "signature"; + + public static String FIRMWARE_VERSION = "firmwareVersion"; + + public static String DEVICT_TYPE = "deviceType"; + + public static String OS_VERSION = "osVersion"; + + public static String OS = "os"; + + public static String USER_ID = "userId"; + + public static String BOX_BIND = "isBind"; + + public static String BOX_SN = "sn"; + + public static String TIME = "time"; + + +} diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java index 3dad1d6..67c95c8 100644 --- a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/constans/RedisConstans.java @@ -29,4 +29,8 @@ public class RedisConstans { public static String USER_BOX_INFO = "user_box_info:"; public static String TY_QUEUE_LIST = "ty_queue_list:"; //通义千问的前缀 + /** + * 阿里语音合成token + */ + public static String ALI_TTS_TOKEN = "ali_tts_token"; } diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceInfoService.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceInfoService.java index 2fcae70..00a0dc3 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceInfoService.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceInfoService.java @@ -2,6 +2,8 @@ package com.qiuguo.iot.data.service.device; +import com.alibaba.fastjson.JSONObject; +import com.qiuguo.iot.base.constans.RedisConstans; import com.qiuguo.iot.base.enums.YesNo; import com.qiuguo.iot.base.utils.StringUtils; import com.qiuguo.iot.data.entity.device.DeviceInfoEntity; @@ -17,6 +19,7 @@ import org.hswebframework.web.crud.service.GenericReactiveCrudService; import org.springframework.stereotype.Service; import reactor.core.publisher.Mono; +import java.time.Duration; import java.util.Arrays; import java.util.Date; diff --git a/iot-modules/.DS_Store b/iot-modules/.DS_Store new file mode 100644 index 0000000..9b5b34d Binary files /dev/null and b/iot-modules/.DS_Store differ diff --git a/iot-modules/iot-box-user-api/src/main/resources/bootstrap-prod.yml b/iot-modules/iot-box-user-api/src/main/resources/bootstrap-prod.yml index d68207d..6d97184 100644 --- a/iot-modules/iot-box-user-api/src/main/resources/bootstrap-prod.yml +++ b/iot-modules/iot-box-user-api/src/main/resources/bootstrap-prod.yml @@ -3,17 +3,10 @@ spring: nacos: discovery: # 服务注册地址 -<<<<<<< HEAD - server-addr: 8.139.5.211:30731 - config: - # 配置中心地址 - server-addr: 8.139.5.211:30731 -======= server-addr: qiuguo-nacos.qiuguo-cloud:8848 config: # 配置中心地址 server-addr: qiuguo-nacos.qiuguo-cloud:8848 ->>>>>>> 64da585a2f5a786febdbeaafd130d2fd086ee8e1 # 配置文件格式 file-extension: yml # 共享配置 diff --git a/iot-modules/iot-box-websocket-api/.DS_Store b/iot-modules/iot-box-websocket-api/.DS_Store new file mode 100644 index 0000000..18ab244 Binary files /dev/null and b/iot-modules/iot-box-websocket-api/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/pom.xml b/iot-modules/iot-box-websocket-api/pom.xml index 89905c4..4d4361d 100644 --- a/iot-modules/iot-box-websocket-api/pom.xml +++ b/iot-modules/iot-box-websocket-api/pom.xml @@ -88,6 +88,19 @@ 3.1.8 + + com.alibaba.nls + nls-sdk-common + 2.2.10 + + + + + com.aliyun + aliyun-java-sdk-core + 4.6.4 + + diff --git a/iot-modules/iot-box-websocket-api/src/.DS_Store b/iot-modules/iot-box-websocket-api/src/.DS_Store new file mode 100644 index 0000000..1f65106 Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/.DS_Store new file mode 100644 index 0000000..3fd19d6 Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/.DS_Store new file mode 100644 index 0000000..08d758b Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/com/.DS_Store new file mode 100644 index 0000000..899f110 Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/com/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/.DS_Store new file mode 100644 index 0000000..1cfa670 Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/.DS_Store new file mode 100644 index 0000000..76e7b73 Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/.DS_Store new file mode 100644 index 0000000..71398fb Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/.DS_Store new file mode 100644 index 0000000..ba569dc Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/.DS_Store new file mode 100644 index 0000000..17f0d9c Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/controller/WebsocketController.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/controller/WebsocketController.java index 969c9bf..ebd83e6 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/controller/WebsocketController.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/controller/WebsocketController.java @@ -1,17 +1,35 @@ package com.qiuguo.iot.box.websocket.api.controller; +import cn.hutool.crypto.digest.MD5; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nls.client.AccessToken; +import com.qiuguo.iot.base.constans.HttpHeaderConstans; +import com.qiuguo.iot.base.constans.RedisConstans; +import com.qiuguo.iot.base.enums.AskTypeEnum; +import com.qiuguo.iot.base.utils.StringUtils; +import com.qiuguo.iot.box.websocket.api.domain.box.BoxSession; import com.qiuguo.iot.box.websocket.api.service.WebsocketService; +import com.qiuguo.iot.data.entity.device.DeviceInfoEntity; +import com.qiuguo.iot.data.request.device.DeviceInfoRequest; +import com.qiuguo.iot.data.service.device.DeviceInfoService; import com.qiuguo.iot.data.service.system.SystemTalkAnswerConfigService; import com.qiuguo.iot.third.nlp.Nlp; import com.qiuguo.iot.third.service.LacNlpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.ReactiveStringRedisTemplate; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.web.HttpRequestHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; +import javax.annotation.Resource; +import java.time.Duration; + @RestController @Slf4j @RequestMapping("/websocket") @@ -25,6 +43,25 @@ public class WebsocketController { @Autowired SystemTalkAnswerConfigService systemTalkAnswerConfigService; + @Autowired + private ReactiveStringRedisTemplate reactiveStringRedisTemplate; + + @Resource + private DeviceInfoService deviceInfoService; + + @Value("${device.checkTimeout}") + private Boolean checkTimeout; + + @Value("${device.timeout}") + private Long timeOut;//2分钟 + + @Value("${Ali.accesskeId}") + private String aliAccessKeyId; + + @Value("${Ali.accesskeySecret}") + private String aliAccessSecret; + + @GetMapping("/push/message") public Mono pushMessage(@RequestParam String message, @RequestParam String id, @RequestParam Integer type) { @@ -43,4 +80,92 @@ public class WebsocketController { return lacNlpService.geSingletNlp(value); } + + private Mono getDeviceInfo(String sn){ + DeviceInfoRequest request = new DeviceInfoRequest(); + request.setSn(sn); + return deviceInfoService.selectDeviceInfoByRequest(request).defaultIfEmpty(new DeviceInfoEntity()).map(dv -> { + if(dv.getId() != null){ + String redis = JSONObject.toJSONString(dv); + reactiveStringRedisTemplate.opsForValue().set(RedisConstans.DEVICE_INFO + dv.getSn(), redis, Duration.ofHours(1)).subscribe();//直接提交订阅 + } + + return dv; + }); + } + + @GetMapping("/tts/token") + public Mono getTtsToken(ServerHttpRequest serverHttpRequest) { + serverHttpRequest.getHeaders(); + + Long linkTime = Long.valueOf(serverHttpRequest.getHeaders().get(HttpHeaderConstans.TIME).get(0)); + String sn = serverHttpRequest.getHeaders().get(HttpHeaderConstans.BOX_SN).get(0); + String signature = serverHttpRequest.getHeaders().get(HttpHeaderConstans.BOX_SIGNATURE).get(0); + if(checkTimeout && System.currentTimeMillis() - linkTime > timeOut){ + //关闭连接 + log.info("设备{},请求数据已超时", sn); + return Mono.just("请求超时"); + } + + return reactiveStringRedisTemplate.opsForValue() + .get(RedisConstans.DEVICE_INFO + sn).defaultIfEmpty("") + .flatMap(s -> { + if(com.qiuguo.iot.base.utils.StringUtils.isNotBlank(s)){ + try{ + DeviceInfoEntity dv = JSONObject.parseObject(s, DeviceInfoEntity.class); + if(dv.getId() == null){ + log.info("redis设备缓存异常,清楚"); + return getDeviceInfo(sn); + } + return Mono.just(dv); + }catch (Exception e){ + log.info("转换异常,清除redis。下次连接成功{}", e); + + + } + + } + return getDeviceInfo(sn); + + }).flatMap(dv ->{ + String snMd5 = MD5.create().digestHex(sn).toUpperCase(); + String wifiMd5 = MD5.create().digestHex(dv.getWifiMac()).toUpperCase(); + String btMd5 = MD5.create().digestHex(dv.getBtMac()).toUpperCase(); + String signalMd5 = MD5.create().digestHex(snMd5 + wifiMd5 + btMd5 + linkTime + dv.getKey()).toUpperCase(); + if(!signalMd5.equals(signature)){ + log.info("设备{},验签失败。正常签:{}", sn, signalMd5); + + return Mono.just("验签失败"); + }else{ + log.info("设备{},验签成功", sn); + return reactiveStringRedisTemplate.opsForValue() + .get(RedisConstans.ALI_TTS_TOKEN).defaultIfEmpty("") + .flatMap(toen -> { + if(StringUtils.isNotBlank(toen)){ + return Mono.just(toen); + } + try { + AccessToken accessToken = new AccessToken(aliAccessKeyId, aliAccessSecret); + + + accessToken.apply(); + + String token = accessToken.getToken(); + long expireTime = accessToken.getExpireTime() - 600000L;//提前10分钟更新 + //return Mono.just(token); + return reactiveStringRedisTemplate.opsForValue().set(RedisConstans.ALI_TTS_TOKEN, + token, Duration.ofMillis(expireTime)).flatMap(t -> { + return Mono.just(token); + }); + + }catch (Exception e){ + log.info("获取阿里Token异常{}", e); + } + return Mono.just("获取token异常"); + }); + + } + }); + } + } diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/BoxSession.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/BoxSession.java index dc11e4a..f7b20e4 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/BoxSession.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/BoxSession.java @@ -10,4 +10,8 @@ public class BoxSession extends BaseSession { * TTS合成声音的声音标识 */ String ttsId; + /** + * 阿里token + */ + String aliToken; } diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/user/UserSession.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/user/UserSession.java new file mode 100644 index 0000000..51839cb --- /dev/null +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/user/UserSession.java @@ -0,0 +1,13 @@ +package com.qiuguo.iot.box.websocket.api.domain.user; + +import com.qiuguo.iot.box.websocket.api.domain.BaseSession; +import com.qiuguo.iot.data.resp.third.MusicResp; +import lombok.Data; +import org.springframework.web.reactive.socket.WebSocketMessage; +import org.springframework.web.reactive.socket.WebSocketSession; +import reactor.core.publisher.FluxSink; + +@Data +public class UserSession extends BaseSession { + +} diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BaseWebSocketProcess.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BaseWebSocketProcess.java index 87d9561..1440d26 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BaseWebSocketProcess.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BaseWebSocketProcess.java @@ -11,6 +11,7 @@ import com.qiuguo.iot.box.websocket.api.domain.box.resp.ActionResp; import com.qiuguo.iot.box.websocket.api.domain.box.resp.BoxMessageResp; import com.qiuguo.iot.box.websocket.api.domain.box.resp.DateTimeResp; import com.qiuguo.iot.box.websocket.api.domain.box.resp.WeatherResp; +import com.qiuguo.iot.box.websocket.api.domain.user.UserSession; import com.qiuguo.iot.data.constants.YunxiRabbitConst; import com.qiuguo.iot.data.entity.device.DeviceUserBindEntity; import com.qiuguo.iot.data.entity.device.DeviceUserTalkRecordEntity; @@ -106,12 +107,11 @@ public class BaseWebSocketProcess { protected SystemTalkBindU3dService systemTalkBindU3dService; - protected static ConcurrentHashMap userGroup = new ConcurrentHashMap<>(); + protected static ConcurrentHashMap userGroup = new ConcurrentHashMap<>(); protected static ConcurrentHashMap boxGroup = new ConcurrentHashMap<>(); - protected static String apiType = "api-type"; - protected static String apiToken = "api-token"; + private String getSendStr(StringBuilder sb, String message){ String old = sb.toString() + message; @@ -194,7 +194,7 @@ public class BaseWebSocketProcess { return Mono.empty(); }); } - })/*.subscribeOn(Schedulers.boundedElastic()).subscribe()*/; + }); } private Mono saveTalkRecord(BaseSession baseSession, Action action, String text){ @@ -333,8 +333,9 @@ public class BaseWebSocketProcess { } return weatherService.tianqiApi(req).flatMap(t ->{ if(t.getData() == null){ - return sendMessage(action, baseSession, "该城市不支持天气查询", action.getSystemTalkAnswerConfigEntity().getAnswerType()); - //return Mono.empty(); + return sendMessage(action, baseSession, + "该城市不支持天气查询", + action.getSystemTalkAnswerConfigEntity().getAnswerType()); } TianqiapiItemResp item = null; @@ -856,7 +857,7 @@ public class BaseWebSocketProcess { return null; } - public BaseSession getUserSessionWithUserId(Long userId) { + public UserSession getUserSessionWithUserId(Long userId) { if(userGroup.containsKey(userId)){ return userGroup.get(userId); } diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java index ae6aeb3..65aea1e 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/BoxWebSocketHandler.java @@ -3,6 +3,7 @@ package com.qiuguo.iot.box.websocket.api.handler; import cn.hutool.crypto.digest.MD5; import com.alibaba.fastjson.JSONObject; import com.qiuguo.iot.base.annotation.WebSocketMapping; +import com.qiuguo.iot.base.constans.HttpHeaderConstans; import com.qiuguo.iot.base.constans.RedisConstans; import com.qiuguo.iot.base.enums.*; import com.qiuguo.iot.base.model.UserDeviceInfoModel; @@ -31,6 +32,7 @@ import reactor.util.context.Context; import javax.annotation.Resource; import java.time.Duration; + @Component @WebSocketMapping("/websocket/box") @Slf4j @@ -51,14 +53,13 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock private NlpService nlpService; - @Override public Mono handle(WebSocketSession session) { // 在生产环境中,需对url中的参数进行检验,如token,不符合要求的连接的直接关闭 HandshakeInfo handshakeInfo = session.getHandshakeInfo(); HttpHeaders headers = handshakeInfo.getHeaders(); - String sn = headers.get("sn").get(0); - Long linkTime = Long.parseLong(headers.get("time").get(0)); + String sn = headers.get(HttpHeaderConstans.BOX_SN).get(0); + Long linkTime = Long.parseLong(headers.get(HttpHeaderConstans.TIME).get(0)); if(checkTimeout && System.currentTimeMillis() - linkTime > timeOut){ //关闭连接 log.info("设备{},请求数据已超时", sn); @@ -72,9 +73,9 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock log.info("局域网IP替换成杭州ip:115.205.2.137"); ip = "115.205.2.137"; } - String signature = headers.get("signature").get(0); - Long userId = Long.parseLong(headers.get("userId").get(0)); - Integer isBind = Integer.parseInt(headers.get("isBind").get(0)); + String signature = headers.get(HttpHeaderConstans.BOX_SIGNATURE).get(0); + Long userId = Long.parseLong(headers.get(HttpHeaderConstans.USER_ID).get(0)); + Integer isBind = Integer.parseInt(headers.get(HttpHeaderConstans.BOX_BIND).get(0)); // BoxSession boxSession = new BoxSession(); @@ -268,6 +269,8 @@ public class BoxWebSocketHandler extends BaseWebSocketProcess implements WebSock }else{ boxSession.setTtsId(entity.getTts()); + + if(entity.getIsBind().equals(YesNo.YES.getCode())){ //通知用户端设备绑定成功 sendNoticeToUser(userId, "设备联网成功,设备序列号:" + dv.getSn(), AskTypeEnum.BOX_ON_LINE.getCode()); diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java index 27fed7c..d80030f 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/handler/CustomerWebSocketHandler.java @@ -2,13 +2,13 @@ package com.qiuguo.iot.box.websocket.api.handler; import com.alibaba.fastjson.JSONObject; import com.qiuguo.iot.base.annotation.WebSocketMapping; +import com.qiuguo.iot.base.constans.HttpHeaderConstans; import com.qiuguo.iot.base.enums.AskTypeEnum; import com.qiuguo.iot.base.enums.DeviceTypeEnum; import com.qiuguo.iot.base.enums.ResponeEnum; import com.qiuguo.iot.base.enums.YesNo; import com.qiuguo.iot.base.utils.WebClientUtils; -import com.qiuguo.iot.box.websocket.api.domain.BaseSession; -import com.qiuguo.iot.box.websocket.api.domain.box.BoxSession; +import com.qiuguo.iot.box.websocket.api.domain.user.UserSession; import com.qiuguo.iot.box.websocket.api.domain.user.UserTalkMessage; import com.qiuguo.iot.box.websocket.api.filter.LogMdcConfiguration; import com.qiuguo.iot.box.websocket.api.filter.LogWebFilter; @@ -58,17 +58,17 @@ public class CustomerWebSocketHandler extends BaseWebSocketProcess implements We HandshakeInfo handshakeInfo = session.getHandshakeInfo(); HttpHeaders headers = handshakeInfo.getHeaders(); //List tokens = headers.get("token"); - String type = headers.get(apiType).get(0); - String token = headers.get(apiToken).get(0); - Long userId = Long.valueOf(headers.get("userId").get(0)); - Long linkTime = Long.parseLong(headers.get("time").get(0)); + String type = headers.get(HttpHeaderConstans.API_TYPE).get(0); + String token = headers.get(HttpHeaderConstans.API_TOKEN).get(0); + Long userId = Long.valueOf(headers.get(HttpHeaderConstans.USER_ID).get(0)); + Long linkTime = Long.parseLong(headers.get(HttpHeaderConstans.TIME).get(0)); if(checkTimeout && System.currentTimeMillis() - linkTime > timeOut){ //关闭连接 log.info("用户{},请求数据已超时", userId); return session.close(); } String ip = headers.get(LogWebFilter.HEAD_IP).get(0); - BaseSession userSession = new BaseSession(); + UserSession userSession = new UserSession(); userSession.setUserId(userId); userSession.setSession(session); userSession.setCustomerIP(ip); @@ -105,12 +105,12 @@ public class CustomerWebSocketHandler extends BaseWebSocketProcess implements We }).then(); } - private Mono newMessage(WebSocketMessage webSocketMessage, BaseSession userSession){ + private Mono newMessage(WebSocketMessage webSocketMessage, UserSession userSession){ MDC.put(LogMdcConfiguration.PRINT_LOG_ID, userSession.getLogId()); String text = webSocketMessage.getPayloadAsText(); log.info("收到用户消息:{}", text); UserTalkMessage userTalkMessage = JSONObject.parseObject(text, UserTalkMessage.class); - BaseSession userSession1 = getUserSessionWithUserId(userTalkMessage.getUserId()); + UserSession userSession1 = getUserSessionWithUserId(userTalkMessage.getUserId()); if(!userSession.equals(userSession1)){ log.info("消息发送异常,或者未验签就收到信息不是同一个链接。可能传错用户ID"); return closeSendMsg(userSession, "请等待验签结束或者用户ID可能错误", AskTypeEnum.TTS.getCode()).flatMap(b -> { @@ -127,8 +127,8 @@ public class CustomerWebSocketHandler extends BaseWebSocketProcess implements We } - private Mono disconnect(BaseSession userSession){ - BaseSession userSession1 = getUserSessionWithUserId(userSession.getUserId()); + private Mono disconnect(UserSession userSession){ + UserSession userSession1 = getUserSessionWithUserId(userSession.getUserId()); if(userSession == userSession1){ userGroup.remove(userSession.getUserId());//断链后及时移除 log.info("用户断开连接userId:{}", userSession.getUserId()); @@ -136,10 +136,10 @@ public class CustomerWebSocketHandler extends BaseWebSocketProcess implements We return Mono.empty(); } - private Mono checkToken(BaseSession userSession, String type, String token, Long userId){ + private Mono checkToken(UserSession userSession, String type, String token, Long userId){ Map reqHead = new HashMap<>(); - reqHead.put(apiType, type); - reqHead.put(apiToken, token); + reqHead.put(HttpHeaderConstans.API_TYPE, type); + reqHead.put(HttpHeaderConstans.API_TOKEN, token); return WebClientUtils.get(checkTokenUrl, reqHead).defaultIfEmpty(new JSONObject()).flatMap(jsonObject -> { log.info("验签获取的数据{}", jsonObject); if(jsonObject.getInteger("code").equals(ResponeEnum.SUCESS.getCode())){ @@ -165,7 +165,7 @@ public class CustomerWebSocketHandler extends BaseWebSocketProcess implements We }else{ normalSendMsg(userSession, "您暂未绑定果宝儿Box,快去绑定吧", AskTypeEnum.TTS.getCode()); } - BaseSession oldUserSession = getUserSessionWithUserId(userId); + UserSession oldUserSession = getUserSessionWithUserId(userId); userGroup.put(userId, userSession); if(oldUserSession != null){ return closeSendMsg(oldUserSession, "您在其他地方登录", AskTypeEnum.TTS.getCode()); diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/.DS_Store b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/.DS_Store differ diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/IActionService.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/IActionService.java deleted file mode 100644 index 69747e4..0000000 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/IActionService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.qiuguo.iot.box.websocket.api.service; - -public interface IActionService { -} diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/impl/QianWenActionServiceImpl.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/impl/QianWenActionServiceImpl.java deleted file mode 100644 index 6d0a713..0000000 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/service/impl/QianWenActionServiceImpl.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.qiuguo.iot.box.websocket.api.service.impl; - -import com.qiuguo.iot.box.websocket.api.service.IActionService; - -public class QianWenActionServiceImpl implements IActionService { -} diff --git a/iot-modules/iot-box-websocket-api/src/main/resources/bootstrap-dev.yml b/iot-modules/iot-box-websocket-api/src/main/resources/bootstrap-dev.yml index 059c92a..547ebaf 100644 --- a/iot-modules/iot-box-websocket-api/src/main/resources/bootstrap-dev.yml +++ b/iot-modules/iot-box-websocket-api/src/main/resources/bootstrap-dev.yml @@ -52,4 +52,6 @@ lac: url: http://192.168.8.211:6000/qg_human/lac_word Ali: - qianwen: 'sk-8d64677afaf6404cb83ce1910b5b2558' \ No newline at end of file + qianwen: 'sk-8d64677afaf6404cb83ce1910b5b2558' + accesskeId: 'LTAI5t7d1iZb18SvGQhtDnyN' + accesskeySecret: 'j2Cp3uCDGuiA7xZIJmYOCmDhJl9HuJ' \ No newline at end of file