From 083077b6da2323c010b7d00ce790a3e1a318aba3 Mon Sep 17 00:00:00 2001 From: wulin Date: Thu, 12 Oct 2023 19:17:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E3=80=81=E4=B8=80=E5=88=87=E3=80=81=E6=89=80=E6=9C=89=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qiuguo/iot/base/enums/AskTypeEnum.java | 3 +- .../qiuguo/iot/base/enums/U3dMsgTypeEnum.java | 59 ++++++++++++++++++ .../qiuguo/iot/base/utils/WebClientUtils.java | 26 ++++++-- .../iot/data/constants/YunxiRabbitConst.java | 11 +++- .../system/SystemTalkAnswerConfigEntity.java | 6 +- .../system/SystemTalkBindDeviceEntity.java | 3 + .../entity/user/UserHandlingDeviceEntity.java | 4 +- .../system/SystemTalkAnswerConfigRequest.java | 7 +-- .../system/SystemTalkBindDeviceRequest.java | 5 ++ .../user/UserHandlingDeviceRequest.java | 5 +- .../system/SystemTalkAnswerConfigResp.java | 7 +-- .../resp/system/SystemTalkBindDeviceResp.java | 5 ++ .../resp/user/UserHandlingDeviceResp.java | 4 ++ .../qiuguo/iot/data/service/mq/MqService.java | 1 + .../system/SystemTalkAnswerConfigService.java | 10 --- .../system/SystemTalkBindDeviceService.java | 10 +++ .../user/UserHandlingDeviceService.java | 11 ++++ .../third/enums/ChinesePartSpeechEnum.java | 28 ++++++--- .../qiuguo/iot/third/nlp/action/Action.java | 5 ++ .../api/handler/BaseWebSocketProcess.java | 61 ++++++++++++++----- 20 files changed, 212 insertions(+), 59 deletions(-) create mode 100644 iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/U3dMsgTypeEnum.java diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java index 5abf34f..2cb8306 100644 --- a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/AskTypeEnum.java @@ -20,7 +20,8 @@ public enum AskTypeEnum { DEVICE_UNBIND(103, "设备解绑"), DEVICE_BIND(104, "设备绑定成功"), COMMAND_N(200, "指令后必须跟的名称词"), - QIU_GUO(300, "秋果专有名词") + QIU_GUO(300, "秋果专有名词"), + IGNORE(400, "^^^"),//全部、所有、一切等忽略此 ; AskTypeEnum(Integer c, String n){ code = c; diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/U3dMsgTypeEnum.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/U3dMsgTypeEnum.java new file mode 100644 index 0000000..261c98b --- /dev/null +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/U3dMsgTypeEnum.java @@ -0,0 +1,59 @@ +package com.qiuguo.iot.base.enums; + +/* +* 与U3D消息类型 +* 作者:吴林 +* */ +// 动作类型:0:文本播放 1音频播放 2 U3D动作 3物联网设备动作 +public enum U3dMsgTypeEnum { + TTS(0, "文本播放"), + IOT(1, "IOT控制"), + ALARM_CLOCK(3, "闹钟"), + WEATHER(2, "天气"), + + U3D(4, "U3D动作"), + MUSIC(5, "音乐,声音"), + + UPDATE(100, "固件升级"), + BOX_ON_LINE(101, "Box配网成功"), + BOX_OFF_LINE(102, "Box离线"), + DEVICE_UNBIND(103, "设备解绑"), + DEVICE_BIND(104, "设备绑定成功"), + COMMAND_N(200, "指令后必须跟的名称词"), + QIU_GUO(300, "秋果专有名词"), + IGNORE(400, "^^^"),//全部、所有、一切等忽略此 + ; + U3dMsgTypeEnum(Integer c, String n){ + code = c; + name = n; + } + private Integer code; + private String name; + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + + public static U3dMsgTypeEnum getEnumWithCode(Integer c){ + for (U3dMsgTypeEnum e:values() + ) { + if(e.getCode().compareTo(c) == 0){ + return e; + } + } + return null; + } + public static U3dMsgTypeEnum getEnumWithName(String name){ + for (U3dMsgTypeEnum e:values() + ) { + if(e.getName().equals(name)){ + return e; + } + } + return null; + } +} diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java index eb81f4a..be06d19 100644 --- a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/utils/WebClientUtils.java @@ -2,6 +2,7 @@ package com.qiuguo.iot.base.utils; import cn.hutool.core.math.Money; import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; @@ -9,7 +10,7 @@ import reactor.core.publisher.Mono; import java.util.Map; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; - +@Slf4j public class WebClientUtils { private static WebClient webClient = WebClient.builder().defaultHeader(HttpHeaders.CONTENT_TYPE, APPLICATION_JSON_VALUE).build(); @@ -19,35 +20,50 @@ public class WebClientUtils { } public static Mono post(String url, JSONObject body) { + return post(url, body, null); } public static Mono get(String url, Map headers) { + log.info("GET WebClient URL:{} headers:{}", url, headers); if(headers == null || headers.size() == 0) { - return webClient.get().uri(url).retrieve().bodyToMono(String.class).flatMap(s-> Mono.just(JSONObject.parseObject(s))); + return webClient.get().uri(url).retrieve().bodyToMono(String.class).flatMap(s-> { + log.info("GET WebClient Respon:{}", s); + return Mono.just(JSONObject.parseObject(s)); + }); }else{ return webClient.get().uri(url).headers(httpHeaders -> { for (String key:headers.keySet() ) { httpHeaders.set(key, headers.get(key)); } - }).retrieve().bodyToMono(String.class).flatMap(s-> Mono.just(JSONObject.parseObject(s))); + }).retrieve().bodyToMono(String.class).flatMap(s-> { + log.info("GET WebClient Respon:{}", s); + return Mono.just(JSONObject.parseObject(s)); + }); } } public static Mono post(String url, JSONObject body, Map headers) { + log.info("POST WebClient URL:{} body:{} headers:{}", url, body, headers); if(headers == null || headers.size() == 0) { return webClient.post().uri(url).bodyValue(body.toString()).retrieve().bodyToMono(String.class).flatMap(s-> - Mono.just(JSONObject.parseObject(s))); + { + log.info("POST WebClient Respon:{}", s); + return Mono.just(JSONObject.parseObject(s)); + }); }else{ return webClient.post().uri(url).bodyValue(body.toString()).headers(httpHeaders -> { for (String key:headers.keySet() ) { httpHeaders.set(key, headers.get(key)); } - }).retrieve().bodyToMono(String.class).flatMap(s-> Mono.just(JSONObject.parseObject(s))); + }).retrieve().bodyToMono(String.class).flatMap(s-> { + log.info("POST WebClient Respon:{}", s); + return Mono.just(JSONObject.parseObject(s)); + }); } } diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/constants/YunxiRabbitConst.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/constants/YunxiRabbitConst.java index d561e74..e08b536 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/constants/YunxiRabbitConst.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/constants/YunxiRabbitConst.java @@ -9,15 +9,20 @@ public class YunxiRabbitConst { /** * 云栖活动交换机 */ - public static final String EXCHANGE_YUNXI_EVENT = "iot-yunxi-exchange"; + public static final String EXCHANGE_YUNXI_EVENT = "iot-exchange"; /** * 云栖活动队列 */ - public static final String QUEUE_YUNXI = "iot.yunxi.queue"; + public static final String QUEUE_YUNXI = "IOT.TO.U3D"; /** * 云栖活动发送的路由键 */ - public static final String ROUTE_KEY_YUNXI = "iot.yunxi"; + public static final String ROUTE_KEY_YUNXI = "IOT"; + + /** + * 订阅队列 + */ + public static final String QUEUE_LISTENER = "U3D.TO.IOT"; } diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkAnswerConfigEntity.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkAnswerConfigEntity.java index 8e0a63e..a78ef72 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkAnswerConfigEntity.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkAnswerConfigEntity.java @@ -69,7 +69,7 @@ public class SystemTalkAnswerConfigEntity extends GenericEntity { @Column(name = "key_order", nullable = false) private Long keyOrder; - @Comment("回答类型0:文本问答 1:iOT控制 2:天气 3:闹钟 4:U3D 5:音乐声音 100:固件升级 101:Box上线 200:动作后必须跟的名称词") + @Comment("回答类型0:文本问答 1:iOT控制 2:天气 3:闹钟 4:U3D 5:音乐声音 100:固件升级 101:Box上线 200:动作后必须跟的名称词 300秋果专有名词 400:全部,所有,一切忽略词") @Column(name = "answer_type", nullable = false) private Integer answerType; @@ -77,8 +77,6 @@ public class SystemTalkAnswerConfigEntity extends GenericEntity { @Column(name = "play_type", nullable = false) private Integer playType; - @Comment("U3D对应的状态ID") - @Column(name = "u3d_status_id", length = 11, nullable = false, unique = true) - private Long u3dStatusId; + } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkBindDeviceEntity.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkBindDeviceEntity.java index ed056b4..ec684bb 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkBindDeviceEntity.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/system/SystemTalkBindDeviceEntity.java @@ -77,4 +77,7 @@ public class SystemTalkBindDeviceEntity extends GenericEntity { @Column(name = "remark", length = 255) private String remark; + @Comment("U3D对应的状态ID") + @Column(name = "u3d_status_id", length = 11, nullable = false, unique = true) + private Long u3dStatusId; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/user/UserHandlingDeviceEntity.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/user/UserHandlingDeviceEntity.java index 40ef7ea..2efed50 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/user/UserHandlingDeviceEntity.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/user/UserHandlingDeviceEntity.java @@ -68,6 +68,8 @@ public class UserHandlingDeviceEntity extends GenericEntity { @Comment("modify_time") @Column(name = "modify_time") private Date modifyTime; - + @Comment("U3D对应的状态ID") + @Column(name = "u3d_status_id", length = 11, nullable = false, unique = true) + private Long u3dStatusId; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkAnswerConfigRequest.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkAnswerConfigRequest.java index 5364602..bc6fff4 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkAnswerConfigRequest.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkAnswerConfigRequest.java @@ -54,7 +54,7 @@ public class SystemTalkAnswerConfigRequest implements java.io.Serializable { //关键字的排序,越小越第一个匹配上 private Long keyOrder; - //回答类型0:文本问答 1:iOT控制 2:天气 3:闹钟 4:U3D 5:音乐声音 100:固件升级 101:Box上线 200:动作后必须跟的名称词 + //回答类型0:文本问答 1:iOT控制 2:天气 3:闹钟 4:U3D 5:音乐声音 100:固件升级 101:Box上线 200:动作后必须跟的名称词 300秋果专有名词 400:全部,所有,一切忽略词 private Integer answerType; /** @@ -63,8 +63,5 @@ public class SystemTalkAnswerConfigRequest implements java.io.Serializable { private Integer playType; - /** - * U3D对应的状态ID - */ - private Long u3dStatusId; + } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkBindDeviceRequest.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkBindDeviceRequest.java index c93837b..635eb47 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkBindDeviceRequest.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/system/SystemTalkBindDeviceRequest.java @@ -65,4 +65,9 @@ public class SystemTalkBindDeviceRequest implements java.io.Serializable { private String answerBackImg; //备注 private String remark; + + /** + * U3D对应的状态ID + */ + private Long u3dStatusId; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/user/UserHandlingDeviceRequest.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/user/UserHandlingDeviceRequest.java index 191a9ef..740bb38 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/user/UserHandlingDeviceRequest.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/user/UserHandlingDeviceRequest.java @@ -57,6 +57,9 @@ public class UserHandlingDeviceRequest implements java.io.Serializable { //搜索结束 private Date modifyTimeEnd; - + /** + * U3D对应的状态ID + */ + private Long u3dStatusId; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkAnswerConfigResp.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkAnswerConfigResp.java index 31a5aff..9839632 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkAnswerConfigResp.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkAnswerConfigResp.java @@ -32,7 +32,7 @@ public class SystemTalkAnswerConfigResp { //关键字的排序,越小越第一个匹配上 private Long keyOrder; - //回答类型0:文本问答 1:iOT控制 2:天气 3:闹钟 4:U3D 5:音乐声音 100:固件升级 101:Box上线 200:动作后必须跟的名称词 + //回答类型0:文本问答 1:iOT控制 2:天气 3:闹钟 4:U3D 5:音乐声音 100:固件升级 101:Box上线 200:动作后必须跟的名称词 300秋果专有名词 400:全部,所有,一切忽略词 private Integer answerType; /** @@ -40,9 +40,4 @@ public class SystemTalkAnswerConfigResp { */ private Integer playType; - - /** - * U3D对应的状态ID - */ - private Long u3dStatusId; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkBindDeviceResp.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkBindDeviceResp.java index 6de5e23..9cc6c62 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkBindDeviceResp.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/system/SystemTalkBindDeviceResp.java @@ -23,6 +23,7 @@ public class SystemTalkBindDeviceResp { systemTalkId = entity.getSystemTalkId(); userHandlingId = entity.getUserHandlingId(); remark = entity.getRemark(); + u3dStatusId = entity.getU3dStatusId(); } // @@ -57,4 +58,8 @@ public class SystemTalkBindDeviceResp { private String answerBackImg; //备注 private String remark; + /** + * U3D对应的状态ID + */ + private Long u3dStatusId; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/user/UserHandlingDeviceResp.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/user/UserHandlingDeviceResp.java index d91836c..b5aa057 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/user/UserHandlingDeviceResp.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/user/UserHandlingDeviceResp.java @@ -52,4 +52,8 @@ public class UserHandlingDeviceResp { private Date createTime; // private Date modifyTime; + /** + * U3D对应的状态ID + */ + private Long u3dStatusId; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/mq/MqService.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/mq/MqService.java index 55fe213..8e50d3f 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/mq/MqService.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/mq/MqService.java @@ -42,6 +42,7 @@ public class MqService { public Mono sendMessageWithConfirmation(String exchange, String routingKey, Object message) { rabbitTemplate.convertAndSend(exchange, routingKey, message); + return Mono.defer(() -> { boolean result = confirmationResult.get(); return Mono.just(result); diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java index 96e2f41..b1a90cc 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/system/SystemTalkAnswerConfigService.java @@ -128,9 +128,6 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService 1){ //返回告诉有多个设备,请详细说明具体说明设备 + //判断action是否有所有、全部。一切 + if(YesNo.YES.getCode().equals(action.getIgnore())){ + //忽略词,控制所有设备 + for (DeviceUserBindEntity bindEntity :binds.getData() + ) { + action.setDeviceUserBindEntity(bindEntity); + controllerDevice(action, action.getDeviceUserBindEntity(), baseSession); + } + }else{ + sendMessage(action, + baseSession, + "您有多个" + action.getName() + "相同设备,请明确说明", + action.getSystemTalkAnswerConfigEntity().getAnswerType()); + } - sendMessage(action, - baseSession, - "您有多个" + action.getName() + "相同设备,请明确说明", - action.getSystemTalkAnswerConfigEntity().getAnswerType()); }else{ //查询是否有相关指令绑定 + action.setDeviceUserBindEntity(binds.getData().get(0)); - controllerDevice(action, action.getDeviceUserBindEntity(), baseSession, action.getName()); + controllerDevice(action, action.getDeviceUserBindEntity(), baseSession); } return Mono.empty(); }).subscribe(); }else{ log.info("匹配时已找到对应的设备{}", action.getName()); - controllerDevice(action, action.getDeviceUserBindEntity(), baseSession, action.getName()); + controllerDevice(action, action.getDeviceUserBindEntity(), baseSession); } }else{ @@ -203,7 +232,11 @@ public class BaseWebSocketProcess { action.getTime().setTime("今天"); } weatherService.tianqiApi(req).map(t ->{ - log.info("查询的天气{}", JSONObject.toJSONString(t)); + if(t.getData() == null){ + sendMessage(action, baseSession, "该城市不支持天气查询", action.getSystemTalkAnswerConfigEntity().getAnswerType()); + return t; + } + TianqiapiItemResp item = null; if(StringUtils.isNotEmpty(action.getTime().getDateTime())){ @@ -296,7 +329,7 @@ public class BaseWebSocketProcess { } } - private void controllerDevice(Action action, DeviceUserBindEntity deviceUserBindEntity, BaseSession baseSession, String deviceName) { + private void controllerDevice(Action action, DeviceUserBindEntity deviceUserBindEntity, BaseSession baseSession) { SystemTalkBindDeviceRequest systemTalkBindDeviceRequest = new SystemTalkBindDeviceRequest(); systemTalkBindDeviceRequest.setCategoryCode(deviceUserBindEntity.getCategoryCode()); @@ -310,7 +343,7 @@ public class BaseWebSocketProcess { if(systemTalkBindDeviceEntity.getId() == null){ //通知不支持的指令 sendMessage(action, baseSession, - deviceName + "不支持" + action.getAction() + "指令!", + deviceUserBindEntity.getBindName() + "不支持" + action.getAction() + "指令!", action.getSystemTalkAnswerConfigEntity().getAnswerType()); }else{ @@ -329,9 +362,9 @@ public class BaseWebSocketProcess { u3dMsg.setMsgType(100); u3dMsg.setMetaId(action.getDeviceUserBindEntity().getU3dId()); u3dMsg.setScenceId(action.getDeviceUserBindEntity().getScenceId()); - u3dMsg.setStatusId(action.getSystemTalkAnswerConfigEntity().getU3dStatusId()); + u3dMsg.setStatusId(1l); //发送消息到MQ,通知U3D - mqService.sendMessage(YunxiRabbitConst.EXCHANGE_YUNXI_EVENT, + mqService.sendMessageWithConfirmation(YunxiRabbitConst.EXCHANGE_YUNXI_EVENT, YunxiRabbitConst.ROUTE_KEY_YUNXI, JSONObject.toJSONString(u3dMsg)).subscribe(); }catch (Exception e){ @@ -341,7 +374,7 @@ public class BaseWebSocketProcess { } //通知打开灯成功 - msg = systemTalkBindDeviceEntity.getAnswerValue().replaceAll("#name#", deviceName); + msg = systemTalkBindDeviceEntity.getAnswerValue().replaceAll("#name#", deviceUserBindEntity.getBindName()); if(StringUtils.isNotEmpty(action.getStatus())){ msg = msg.replace("#value#", action.getStatus()); } @@ -350,7 +383,7 @@ public class BaseWebSocketProcess { log.info("执行指令"); }else{ //通知开灯失败; - msg = systemTalkBindDeviceEntity.getAnswerValueFaild().replaceAll("#name#", deviceName); + msg = systemTalkBindDeviceEntity.getAnswerValueFaild().replaceAll("#name#", deviceUserBindEntity.getBindName()); log.info("执行指令失败"); }