diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dActionResp.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dActionResp.java
deleted file mode 100644
index 7d32edf..0000000
--- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dActionResp.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.qiuguo.iot.data.resp.u3d;
-import lombok.Data;
-/**
-*
-*
*U3D动作配置返回类
-* @author wulin
-* @since 2023-09-05
-*/
-
-@Data
-public class U3dActionResp {
- //
- private Long id;
- //名称
- private String name;
- //动作类型
- private Integer type;
- //具体动作
- private String action;
-}
\ No newline at end of file
diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dBaseMsg.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dBaseMsg.java
new file mode 100644
index 0000000..c8de1f5
--- /dev/null
+++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dBaseMsg.java
@@ -0,0 +1,50 @@
+package com.qiuguo.iot.data.resp.u3d;
+
+import lombok.Data;
+
+/**
+ * 与U3D通过MQ交互信息
+ */
+@Data
+public class U3dBaseMsg {
+
+
+ /**
+ * msgType=0,1,3时数字人ID,msgType=3时设备所在虚拟世界ID
+ */
+ private String metaId;
+
+ /**
+ * 状态ID
+ */
+ private String statusId;
+
+ /**
+ * 场景ID
+ */
+ private String scenceId;
+
+ /**
+ * 类型ID
+ */
+ private String typeId;
+
+ /**
+ * 扩展参数
+ */
+ private String exParam;
+ /**
+ * 坐标x
+ */
+ String x;
+ /**
+ * 坐标y
+ */
+ String y;
+
+ /**
+ * 坐标z
+ */
+ String z;
+
+}
diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dMsg.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dMsg.java
index f3c3f9f..277cead 100644
--- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dMsg.java
+++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/u3d/U3dMsg.java
@@ -6,51 +6,15 @@ import lombok.Data;
* 与U3D通过MQ交互信息
*/
@Data
-public class U3dMsg {
+public class U3dMsg extends U3dBaseMsg{
/**
* 消息类型:0:跳舞 1 :换装 2:口型 100:IOT
*/
private Integer msgType;
- /**
- * msgType=0,1,3时数字人ID,msgType=3时设备所在虚拟世界ID
- */
- private String metaId;
-
- /**
- * 状态ID
- */
- private String statusId;
-
- /**
- * 场景ID
- */
- private String scenceId;
-
- /**
- * 类型ID
- */
- private String typeId;
-
- /**
- * 扩展参数
- */
- private String exParam;
- /**
- * 坐标x
- */
- String x;
- /**
- * 坐标y
- */
- String y;
-
- /**
- * 坐标z
- */
- String z;
/**
* 发送时间
*/
Long time;
+
}
diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java
index 2a0d8d3..f4d14cd 100644
--- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java
+++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/enums/ActionPartSpeechEnum.java
@@ -498,7 +498,9 @@ public enum ActionPartSpeechEnum implements IChinesePartSpeech{
List includs,
List commands){
//解析时间关键字
- action.setTime(new ActionTime());
+ if(action.getTime() == null){
+ action.setTime(new ActionTime());
+ }
action.getTime().setTime(key);
return action;
}
diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/ActionTime.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/ActionTime.java
index 9ea4807..3adfc52 100644
--- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/ActionTime.java
+++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/ActionTime.java
@@ -36,7 +36,7 @@ public class ActionTime {
public void setTime(String t){
LocalDateTime localDateTime;
if(StringUtils.isNotEmpty(time)){
- localDateTime = LocalDateTime.parse(dateDetailTime);//time转
+ localDateTime = detailTime;
}else{
time = t;
localDateTime = DateTimeUtils.getNowLocalDateTime();
diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/TimeActionCommand.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/TimeActionCommand.java
index e5ec7e3..c75ca06 100644
--- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/TimeActionCommand.java
+++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/TimeActionCommand.java
@@ -61,7 +61,8 @@ public class TimeActionCommand extends ActionCommand implements IActionCommand{
BoxMessageResp resp = new BoxMessageResp();
resp.setType(action.getSystemTalkAnswerConfigEntity().getAnswerType());
- resp.setText(getDayOfWeek(action.getTime().getDetailTime().format(df)));
+
+ resp.setText(action.getAsk().replaceAll(action.getAction(), getDayOfWeek(action.getTime().getDetailTime().format(df))));
resp.setTime(dateTimeResp);
return baseWebSocketService.sendMessage(
action,
diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/U3DActionCommand.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/U3DActionCommand.java
index 31663f8..0393083 100644
--- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/U3DActionCommand.java
+++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/U3DActionCommand.java
@@ -1,5 +1,8 @@
package com.qiuguo.iot.box.websocket.api.command;
+import cn.hutool.core.util.RandomUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.base.enums.AskTypeEnum;
import com.qiuguo.iot.base.enums.U3dMsgTypeEnum;
@@ -9,9 +12,11 @@ import com.qiuguo.iot.box.websocket.api.domain.box.resp.BoxMessageResp;
import com.qiuguo.iot.data.entity.device.DeviceUserTalkRecordEntity;
import com.qiuguo.iot.data.entity.system.SystemTalkBindU3dEntity;
import com.qiuguo.iot.data.request.system.SystemTalkBindU3dRequest;
+import com.qiuguo.iot.data.resp.u3d.U3dBaseMsg;
import com.qiuguo.iot.data.resp.u3d.U3dMsg;
import com.qiuguo.iot.data.service.device.DeviceUserTalkRecordService;
import com.qiuguo.iot.data.service.system.SystemTalkBindU3dService;
+import com.qiuguo.iot.data.service.u3d.U3dActionService;
import com.qiuguo.iot.third.nlp.action.Action;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -27,6 +32,9 @@ public class U3DActionCommand extends ActionCommand implements IActionCommand{
@Resource
protected SystemTalkBindU3dService systemTalkBindU3dService;
+ @Resource
+ protected U3dActionService u3dActionService;
+
public Mono process(Action action, BaseSession baseSession) {
log.info("U3d Action:{}", action.getAsk());
@@ -41,26 +49,41 @@ public class U3DActionCommand extends ActionCommand implements IActionCommand{
//return systemTalkBindU3d;
}
//数字人的id直接用用户id来代替
+ BoxMessageResp resp = new BoxMessageResp();
if(U3dMsgTypeEnum.DANCE.getCode().equals(systemTalkBindU3d.getU3dType())){
//推送客户端跳舞
- BoxMessageResp resp = new BoxMessageResp();
+
if(baseSession.getUserId().equals(1291978L)){
+ //临时取消
resp.setType(AskTypeEnum.TTS.getCode());
resp.setText("抱歉,我还么学会跳舞");
- /*ActionResp actionResp = new ActionResp();
- actionResp.setType(7);
- resp.setAction(actionResp);*/
+ return baseWebSocketService.sendMessage(action, baseSession, resp);
}else{
- resp.setType(AskTypeEnum.U3D.getCode());
- resp.setText("开始跳舞");
- ActionResp actionResp = new ActionResp();
- actionResp.setType(7);
- resp.setAction(actionResp);
+ return u3dActionService.selectU3dActionById(systemTalkBindU3d.getU3dActionId())
+ .flatMap(u3d -> {
+ //获取跳舞配置,并随机一个
+ JSONObject jsonObject = JSON.parseObject(u3d.getAction());
+ JSONArray arr = jsonObject.getJSONArray("dances");
+ int num = RandomUtil.randomInt(arr.size());
+ jsonObject = arr.getJSONObject(num);
+ resp.setType(AskTypeEnum.U3D.getCode());
+ resp.setText("开始跳舞");
+
+ ActionResp actionResp = new ActionResp();
+ actionResp.setType(7);
+ actionResp.setSound(jsonObject.getString("sound"));
+ U3dBaseMsg u3dMsg = new U3dBaseMsg();
+ u3dMsg.setStatusId(jsonObject.getString("id"));
+ actionResp.setU3d(u3dMsg);
+ resp.setAction(actionResp);
+ return baseWebSocketService.sendMessage(action, baseSession, resp);
+ });
+
}
- return baseWebSocketService.sendMessage(action, baseSession, resp);
+ //return baseWebSocketService.sendMessage(action, baseSession, resp);
}else{
//推送MQ换装
@@ -72,7 +95,10 @@ public class U3DActionCommand extends ActionCommand implements IActionCommand{
talkRecord.setUserId(baseSession.getUserId());
talkRecord.setDeviceId(baseSession.getDeviceId());
return deviceUserTalkRecordService.insertDeviceUserTalkRecord(talkRecord).flatMap(integer -> {
- return toU3DMq(systemTalkBindU3d, baseSession.getUserId());
+ return toU3DMq(systemTalkBindU3d, baseSession.getUserId()).flatMap(b -> {
+ resp.setType(AskTypeEnum.EXIT.getCode());//告诉Box退出思考
+ return baseWebSocketService.sendMsgWithMono(baseSession, JSONObject.toJSONString(resp));
+ });
});
}
diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/WeatherActionCommand.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/WeatherActionCommand.java
index 0714ab9..ce326d8 100644
--- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/WeatherActionCommand.java
+++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/WeatherActionCommand.java
@@ -1,5 +1,6 @@
package com.qiuguo.iot.box.websocket.api.command;
+import com.alibaba.fastjson.JSONArray;
import com.qiuguo.iot.base.utils.StringUtils;
import com.qiuguo.iot.box.websocket.api.domain.BaseSession;
import com.qiuguo.iot.box.websocket.api.domain.box.BoxSession;
@@ -7,6 +8,7 @@ import com.qiuguo.iot.box.websocket.api.domain.box.resp.BoxMessageResp;
import com.qiuguo.iot.box.websocket.api.domain.box.resp.WeatherResp;
import com.qiuguo.iot.data.request.third.ThirdWeatherInfoRequest;
import com.qiuguo.iot.data.resp.third.weather.TianqiapiItemResp;
+import com.qiuguo.iot.data.resp.third.weather.TianqiapiLifeItemResp;
import com.qiuguo.iot.third.nlp.action.Action;
import com.qiuguo.iot.third.nlp.action.ActionTime;
import com.qiuguo.iot.third.service.WeatherService;
@@ -62,10 +64,16 @@ public class WeatherActionCommand extends ActionCommand implements IActionComma
String msg = "";
if(item != null){
//返回给客户端播报内容
+ for (TianqiapiLifeItemResp life : item.getIndex()){
+ if(life.getTitle().equals("穿衣指数")){
+ msg = life.getDesc();
+ break;
+ }
+ }
msg = t.getCity() + action.getTime().getTime() + "天气"
+ item.getNarrative().replace("每 km / h", "千米每小时")
+ ",空气质量" + item.getAir_level()
- + ",湿度" + item.getHumidity() + ",最低气温" + item.getTem2() + "°C";
+ + ",湿度" + item.getHumidity() + ",最低气温" + item.getTem2() + "°C " + msg;
msg = msg.replace(" ", "");
if(baseSession instanceof BoxSession){
WeatherResp weatherResp = new WeatherResp();
diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/resp/ActionResp.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/resp/ActionResp.java
index 080d0b9..8cc3ed9 100644
--- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/resp/ActionResp.java
+++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/domain/box/resp/ActionResp.java
@@ -1,5 +1,7 @@
package com.qiuguo.iot.box.websocket.api.domain.box.resp;
+import com.qiuguo.iot.data.resp.u3d.U3dBaseMsg;
+import com.qiuguo.iot.data.resp.u3d.U3dMsg;
import lombok.Data;
@Data
@@ -20,4 +22,6 @@ public class ActionResp {
* 图片地址
*/
String image;
+
+ U3dBaseMsg u3d;
}
diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogWebFilter.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogWebFilter.java
index 4b6be4e..26143b2 100644
--- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogWebFilter.java
+++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/filter/LogWebFilter.java
@@ -45,7 +45,7 @@ public class LogWebFilter implements WebFilter {
String requestId = request.getId();
MDC.put(LogMdcConfiguration.PRINT_LOG_ID, requestId);
- String customerIp = request.getRemoteAddress().getAddress().getHostAddress();//.getHostName();
+ String customerIp = request.getRemoteAddress().getAddress().getHostAddress();
String m = request.getMethod().toString();
log.info("api start time:{} ip:{} method:{} url:{} param:{} headers:{}",