增加U3D MQ通知

This commit is contained in:
wulin 2023-10-12 15:54:37 +08:00
parent dc17707b81
commit 604d80147c
13 changed files with 107 additions and 1 deletions

View File

@ -92,4 +92,11 @@ public class DeviceUserBindEntity extends GenericEntity<Long> {
@Column(name = "category_code", length = 20, nullable = false) @Column(name = "category_code", length = 20, nullable = false)
private String categoryCode; private String categoryCode;
@Comment("U3D对应物品ID")
@Column(name = "u3d_id", length = 11)
private Long u3dId;
@Comment("U3D场景ID")
@Column(name = "scence_id", length = 11)
private Long scenceId;
} }

View File

@ -77,4 +77,8 @@ public class SystemTalkAnswerConfigEntity extends GenericEntity<Long> {
@Column(name = "play_type", nullable = false) @Column(name = "play_type", nullable = false)
private Integer playType; private Integer playType;
@Comment("U3D对应的状态ID")
@Column(name = "u3d_status_id", length = 11, nullable = false, unique = true)
private Long u3dStatusId;
} }

View File

@ -69,4 +69,5 @@ public class UserHandlingDeviceEntity extends GenericEntity<Long> {
@Column(name = "modify_time") @Column(name = "modify_time")
private Date modifyTime; private Date modifyTime;
} }

View File

@ -64,8 +64,20 @@ public class DeviceUserBindRequest implements java.io.Serializable {
//分类字段名称 //分类字段名称
private String categoryCode; private String categoryCode;
/**
* U3D对应物品ID
*/
private Long u3dId;
/**
* U3D场景ID
*/
private Long scenceId;
/** /**
* 是否在线 0 不在线 1 在线 * 是否在线 0 不在线 1 在线
*/ */
private Integer onLine; private Integer onLine;
} }

View File

@ -62,4 +62,9 @@ public class SystemTalkAnswerConfigRequest implements java.io.Serializable {
*/ */
private Integer playType; private Integer playType;
/**
* U3D对应的状态ID
*/
private Long u3dStatusId;
} }

View File

@ -1,5 +1,8 @@
package com.qiuguo.iot.data.request.user; package com.qiuguo.iot.data.request.user;
import lombok.Data; import lombok.Data;
import org.hswebframework.ezorm.rdb.mapping.annotation.Comment;
import javax.persistence.Column;
import java.util.Date; import java.util.Date;
/** /**
* <p> * <p>
@ -54,4 +57,6 @@ public class UserHandlingDeviceRequest implements java.io.Serializable {
//搜索结束 //搜索结束
private Date modifyTimeEnd; private Date modifyTimeEnd;
} }

View File

@ -33,6 +33,8 @@ public class DeviceUserBindResp {
village = entity.getVillage(); village = entity.getVillage();
address = entity.getAddress(); address = entity.getAddress();
categoryCode = entity.getCategoryCode(); categoryCode = entity.getCategoryCode();
u3dId = entity.getU3dId();
scenceId = entity.getScenceId();
} }
// //
private Long id; private Long id;
@ -70,6 +72,14 @@ public class DeviceUserBindResp {
private String address; private String address;
//分类字段名称 //分类字段名称
private String categoryCode; private String categoryCode;
/**
* U3D对应物品ID
*/
private Long u3dId;
/**
* U3D场景ID
*/
private Long scenceId;
/** /**
* 是否在线0 b不在线 1在线 * 是否在线0 b不在线 1在线
*/ */

View File

@ -40,4 +40,9 @@ public class SystemTalkAnswerConfigResp {
*/ */
private Integer playType; private Integer playType;
/**
* U3D对应的状态ID
*/
private Long u3dStatusId;
} }

View File

@ -32,6 +32,10 @@ public class U3dMsg {
*/ */
private Long typeId; private Long typeId;
/**
* 扩展参数
*/
private String extParam;
/** /**
* 坐标x * 坐标x
*/ */

View File

@ -112,6 +112,12 @@ public class DeviceUserBindService extends GenericReactiveCrudService<DeviceUser
if(StringUtils.isNotEmpty(request.getCategoryCode())){ if(StringUtils.isNotEmpty(request.getCategoryCode())){
reactiveQuery = reactiveQuery.and(DeviceUserBindRequest::getCategoryCode, request.getCategoryCode()); reactiveQuery = reactiveQuery.and(DeviceUserBindRequest::getCategoryCode, request.getCategoryCode());
} }
if(request.getU3dId() != null){
reactiveQuery = reactiveQuery.and(DeviceUserBindRequest::getU3dId, request.getU3dId());
}
if(request.getScenceId() != null){
reactiveQuery = reactiveQuery.and(DeviceUserBindRequest::getScenceId, request.getScenceId());
}
SortOrder sortOrder = null; SortOrder sortOrder = null;
if(StringUtils.isNotEmpty(request.getOrder())){ if(StringUtils.isNotEmpty(request.getOrder())){
if(StringUtils.isNotEmpty(request.getSort()) && request.getSort().compareTo("0") == 0){ if(StringUtils.isNotEmpty(request.getSort()) && request.getSort().compareTo("0") == 0){
@ -197,6 +203,12 @@ public class DeviceUserBindService extends GenericReactiveCrudService<DeviceUser
if(StringUtils.isNotEmpty(request.getCategoryCode())){ if(StringUtils.isNotEmpty(request.getCategoryCode())){
reactiveQuery = reactiveQuery.$like$(DeviceUserBindRequest::getCategoryCode, request.getCategoryCode()); reactiveQuery = reactiveQuery.$like$(DeviceUserBindRequest::getCategoryCode, request.getCategoryCode());
} }
if(request.getU3dId() != null){
reactiveQuery = reactiveQuery.and(DeviceUserBindRequest::getU3dId, request.getU3dId());
}
if(request.getScenceId() != null){
reactiveQuery = reactiveQuery.and(DeviceUserBindRequest::getScenceId, request.getScenceId());
}
QueryParamEntity param = QueryParamEntity.of(reactiveQuery.getParam()); QueryParamEntity param = QueryParamEntity.of(reactiveQuery.getParam());
if(StringUtils.isNotEmpty(request.getOrder())){ if(StringUtils.isNotEmpty(request.getOrder())){
Sort sort = new Sort(); Sort sort = new Sort();
@ -286,6 +298,12 @@ public class DeviceUserBindService extends GenericReactiveCrudService<DeviceUser
if(StringUtils.isNotEmpty(entity.getCategoryCode())){ if(StringUtils.isNotEmpty(entity.getCategoryCode())){
update = update.set(DeviceUserBindEntity::getCategoryCode, entity.getCategoryCode()); update = update.set(DeviceUserBindEntity::getCategoryCode, entity.getCategoryCode());
} }
if(entity.getU3dId() != null){
update = update.set(DeviceUserBindEntity::getU3dId, entity.getU3dId());
}
if(entity.getScenceId() != null){
update = update.set(DeviceUserBindEntity::getScenceId, entity.getScenceId());
}
return update.where(DeviceUserBindEntity::getId, entity.getId()).and("is_delete", 0).execute(); return update.where(DeviceUserBindEntity::getId, entity.getId()).and("is_delete", 0).execute();
} }
@ -310,6 +328,8 @@ public class DeviceUserBindService extends GenericReactiveCrudService<DeviceUser
update = update.set(DeviceUserBindEntity::getVillage, entity.getVillage()); update = update.set(DeviceUserBindEntity::getVillage, entity.getVillage());
update = update.set(DeviceUserBindEntity::getAddress, entity.getAddress()); update = update.set(DeviceUserBindEntity::getAddress, entity.getAddress());
update = update.set(DeviceUserBindEntity::getCategoryCode, entity.getCategoryCode()); update = update.set(DeviceUserBindEntity::getCategoryCode, entity.getCategoryCode());
update = update.set(DeviceUserBindEntity::getU3dId, entity.getU3dId());
update = update.set(DeviceUserBindEntity::getScenceId, entity.getScenceId());
return update.where(DeviceUserBindEntity::getId, entity.getId()).and("is_delete", 0).execute(); return update.where(DeviceUserBindEntity::getId, entity.getId()).and("is_delete", 0).execute();
} }

View File

@ -4,7 +4,9 @@ package com.qiuguo.iot.data.service.system;
import com.qiuguo.iot.base.enums.AskTypeEnum; import com.qiuguo.iot.base.enums.AskTypeEnum;
import com.qiuguo.iot.base.utils.StringUtils; import com.qiuguo.iot.base.utils.StringUtils;
import com.qiuguo.iot.data.entity.system.SystemTalkAnswerConfigEntity; import com.qiuguo.iot.data.entity.system.SystemTalkAnswerConfigEntity;
import com.qiuguo.iot.data.entity.user.UserHandlingDeviceEntity;
import com.qiuguo.iot.data.request.system.SystemTalkAnswerConfigRequest; import com.qiuguo.iot.data.request.system.SystemTalkAnswerConfigRequest;
import com.qiuguo.iot.data.request.user.UserHandlingDeviceRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.hswebframework.ezorm.core.param.Sort; import org.hswebframework.ezorm.core.param.Sort;
import org.hswebframework.ezorm.rdb.mapping.ReactiveQuery; import org.hswebframework.ezorm.rdb.mapping.ReactiveQuery;
@ -126,6 +128,9 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService<Sy
if(request.getPlayType() != null){ if(request.getPlayType() != null){
reactiveQuery = reactiveQuery.and(SystemTalkAnswerConfigRequest::getPlayType, request.getPlayType()); reactiveQuery = reactiveQuery.and(SystemTalkAnswerConfigRequest::getPlayType, request.getPlayType());
} }
if(request.getU3dStatusId() != null){
reactiveQuery = reactiveQuery.and(SystemTalkAnswerConfigRequest::getU3dStatusId, request.getU3dStatusId());
}
SortOrder sortOrder = null; SortOrder sortOrder = null;
if(StringUtils.isNotEmpty(request.getOrder())){ if(StringUtils.isNotEmpty(request.getOrder())){
if(StringUtils.isNotEmpty(request.getSort()) && request.getSort().compareTo("0") == 0){ if(StringUtils.isNotEmpty(request.getSort()) && request.getSort().compareTo("0") == 0){
@ -194,6 +199,9 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService<Sy
if(request.getPlayType() != null){ if(request.getPlayType() != null){
reactiveQuery = reactiveQuery.and(SystemTalkAnswerConfigRequest::getPlayType, request.getPlayType()); reactiveQuery = reactiveQuery.and(SystemTalkAnswerConfigRequest::getPlayType, request.getPlayType());
} }
if(request.getU3dStatusId() != null){
reactiveQuery = reactiveQuery.and(SystemTalkAnswerConfigRequest::getU3dStatusId, request.getU3dStatusId());
}
QueryParamEntity param = QueryParamEntity.of(reactiveQuery.getParam()); QueryParamEntity param = QueryParamEntity.of(reactiveQuery.getParam());
if(StringUtils.isNotEmpty(request.getOrder())){ if(StringUtils.isNotEmpty(request.getOrder())){
Sort sort = new Sort(); Sort sort = new Sort();
@ -271,6 +279,9 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService<Sy
if(entity.getPlayType() != null){ if(entity.getPlayType() != null){
update = update.set(SystemTalkAnswerConfigEntity::getPlayType, entity.getPlayType()); update = update.set(SystemTalkAnswerConfigEntity::getPlayType, entity.getPlayType());
} }
if(entity.getU3dStatusId() != null){
update = update.set(SystemTalkAnswerConfigEntity::getU3dStatusId, entity.getU3dStatusId());
}
return update.where(SystemTalkAnswerConfigEntity::getId, entity.getId()).and("is_delete", 0).execute(); return update.where(SystemTalkAnswerConfigEntity::getId, entity.getId()).and("is_delete", 0).execute();
} }
@ -291,6 +302,7 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService<Sy
update = update.set(SystemTalkAnswerConfigEntity::getKeyOrder, entity.getKeyOrder()); update = update.set(SystemTalkAnswerConfigEntity::getKeyOrder, entity.getKeyOrder());
update = update.set(SystemTalkAnswerConfigEntity::getAnswerType, entity.getAnswerType()); update = update.set(SystemTalkAnswerConfigEntity::getAnswerType, entity.getAnswerType());
update = update.set(SystemTalkAnswerConfigEntity::getPlayType, entity.getPlayType()); update = update.set(SystemTalkAnswerConfigEntity::getPlayType, entity.getPlayType());
update = update.set(SystemTalkAnswerConfigEntity::getU3dStatusId, entity.getU3dStatusId());
return update.where(SystemTalkAnswerConfigEntity::getId, entity.getId()).and("is_delete", 0).execute(); return update.where(SystemTalkAnswerConfigEntity::getId, entity.getId()).and("is_delete", 0).execute();
} }

View File

@ -40,7 +40,7 @@ public class NlpService {
private static Integer MAX_COUT = 2000; private static Integer MAX_COUT = 2000;
public Mono<Actions> getActionWithLacSingle(Long userId, String text){ public Mono<Actions> getActionWithLacSingle(Long userId, String text){
if(userId != null) { if(userId == null) {
userId = 0L; userId = 0L;
} }
DeviceUserBindRequest request = new DeviceUserBindRequest(); DeviceUserBindRequest request = new DeviceUserBindRequest();
@ -60,6 +60,7 @@ public class NlpService {
if(entity.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) { if(entity.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) {
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode()); systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode());
}else{ }else{
//只要内容中含有改词的都直接使用系统配置回答而不会调用千问
systemTalkKeyAndDeviceName.setType(KeyTypeEnum.QIUGUO_NAME.getCode()); systemTalkKeyAndDeviceName.setType(KeyTypeEnum.QIUGUO_NAME.getCode());
} }
systemTalkKeyAndDeviceName.setIndex(i++); systemTalkKeyAndDeviceName.setIndex(i++);

View File

@ -8,6 +8,7 @@ import com.qiuguo.iot.base.utils.StringUtils;
import com.qiuguo.iot.box.websocket.api.domain.BaseSession; 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.box.BoxSession;
import com.qiuguo.iot.box.websocket.api.domain.box.resp.BoxMessageResp; import com.qiuguo.iot.box.websocket.api.domain.box.resp.BoxMessageResp;
import com.qiuguo.iot.data.constants.YunxiRabbitConst;
import com.qiuguo.iot.data.entity.device.DeviceUserBindEntity; import com.qiuguo.iot.data.entity.device.DeviceUserBindEntity;
import com.qiuguo.iot.data.entity.device.DeviceUserTalkRecordEntity; import com.qiuguo.iot.data.entity.device.DeviceUserTalkRecordEntity;
import com.qiuguo.iot.data.entity.system.SystemTalkBindDeviceEntity; import com.qiuguo.iot.data.entity.system.SystemTalkBindDeviceEntity;
@ -17,8 +18,10 @@ import com.qiuguo.iot.data.request.system.SystemTalkBindDeviceRequest;
import com.qiuguo.iot.data.request.third.ThirdWeatherInfoRequest; import com.qiuguo.iot.data.request.third.ThirdWeatherInfoRequest;
import com.qiuguo.iot.data.resp.third.MusicResp; import com.qiuguo.iot.data.resp.third.MusicResp;
import com.qiuguo.iot.data.resp.third.weather.TianqiapiItemResp; import com.qiuguo.iot.data.resp.third.weather.TianqiapiItemResp;
import com.qiuguo.iot.data.resp.u3d.U3dMsg;
import com.qiuguo.iot.data.service.device.DeviceUserBindService; import com.qiuguo.iot.data.service.device.DeviceUserBindService;
import com.qiuguo.iot.data.service.device.DeviceUserTalkRecordService; import com.qiuguo.iot.data.service.device.DeviceUserTalkRecordService;
import com.qiuguo.iot.data.service.mq.MqService;
import com.qiuguo.iot.data.service.system.SystemAddressService; import com.qiuguo.iot.data.service.system.SystemAddressService;
import com.qiuguo.iot.data.service.system.SystemTalkBindDeviceService; import com.qiuguo.iot.data.service.system.SystemTalkBindDeviceService;
import com.qiuguo.iot.third.nlp.action.Action; import com.qiuguo.iot.third.nlp.action.Action;
@ -66,6 +69,9 @@ public class BaseWebSocketProcess {
@Autowired @Autowired
protected QWenService qwenService; protected QWenService qwenService;
@Autowired
protected MqService mqService;
protected static ConcurrentHashMap<Long, BaseSession> userGroup = new ConcurrentHashMap<>(); protected static ConcurrentHashMap<Long, BaseSession> userGroup = new ConcurrentHashMap<>();
@ -316,12 +322,26 @@ public class BaseWebSocketProcess {
tuyaDeviceService.controlDevice(query).map(isOk ->{ tuyaDeviceService.controlDevice(query).map(isOk ->{
String msg = ""; String msg = "";
if(isOk.getCode().equals(RespCodeEnum.SUCESS.getCode())){ if(isOk.getCode().equals(RespCodeEnum.SUCESS.getCode())){
if(action.getDeviceUserBindEntity().getU3dId() != null){
log.info("通知U3DMQ");
U3dMsg u3dMsg = new U3dMsg();
u3dMsg.setMsgType(100);
u3dMsg.setMetaId(action.getDeviceUserBindEntity().getU3dId());
u3dMsg.setScenceId(action.getDeviceUserBindEntity().getScenceId());
u3dMsg.setStatusId(action.getSystemTalkAnswerConfigEntity().getU3dStatusId());
//发送消息到MQ通知U3D
mqService.sendMessage(YunxiRabbitConst.EXCHANGE_YUNXI_EVENT,
YunxiRabbitConst.ROUTE_KEY_YUNXI,
JSONObject.toJSONString(u3dMsg)).subscribe();
}
//通知打开灯成功 //通知打开灯成功
msg = systemTalkBindDeviceEntity.getAnswerValue().replaceAll("#name#", deviceName); msg = systemTalkBindDeviceEntity.getAnswerValue().replaceAll("#name#", deviceName);
if(StringUtils.isNotEmpty(action.getStatus())){ if(StringUtils.isNotEmpty(action.getStatus())){
msg = msg.replace("#value#", action.getStatus()); msg = msg.replace("#value#", action.getStatus());
} }
log.info("执行指令"); log.info("执行指令");
}else{ }else{
//通知开灯失败; //通知开灯失败;