diff --git a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/PlayEnum.java b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/ActionStatusEnum.java similarity index 83% rename from iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/PlayEnum.java rename to iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/ActionStatusEnum.java index 25dff0f..3504fa9 100644 --- a/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/PlayEnum.java +++ b/iot-common/iot-base/src/main/java/com/qiuguo/iot/base/enums/ActionStatusEnum.java @@ -5,7 +5,7 @@ package com.qiuguo.iot.base.enums; * 作者:吴林 * */ // 播放音乐相关 -public enum PlayEnum { +public enum ActionStatusEnum { START(0),//开始 PASUE(1),//暂停 GO(2),//继续 @@ -13,7 +13,7 @@ public enum PlayEnum { NONE(10),//无此资源 ; - PlayEnum(Integer c){ + ActionStatusEnum(Integer c){ code = c; } private Integer code; diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/entity/SystemTalkKeyAndDeviceName.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/model/system/SystemTalkKeyAndDeviceName.java similarity index 88% rename from iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/entity/SystemTalkKeyAndDeviceName.java rename to iot-common/iot-data/src/main/java/com/qiuguo/iot/data/model/system/SystemTalkKeyAndDeviceName.java index eb99cda..9c3e8b5 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/entity/SystemTalkKeyAndDeviceName.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/model/system/SystemTalkKeyAndDeviceName.java @@ -1,4 +1,4 @@ -package com.qiuguo.iot.third.nlp.entity; +package com.qiuguo.iot.data.model.system; import lombok.Data; 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 efcf9b7..613265a 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 @@ -2,9 +2,11 @@ package com.qiuguo.iot.data.service.system; import com.qiuguo.iot.base.enums.AskTypeEnum; +import com.qiuguo.iot.base.enums.KeyTypeEnum; import com.qiuguo.iot.base.utils.StringUtils; import com.qiuguo.iot.data.entity.system.SystemTalkAnswerConfigEntity; import com.qiuguo.iot.data.model.system.SystemTalkAnswerConfig; +import com.qiuguo.iot.data.model.system.SystemTalkKeyAndDeviceName; import com.qiuguo.iot.data.request.system.SystemTalkAnswerConfigRequest; import lombok.extern.slf4j.Slf4j; import org.hswebframework.ezorm.core.param.Sort; @@ -49,6 +51,8 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService groupCommand = new ArrayList<>(); + private List commandList = new ArrayList<>(); + @PostConstruct public void initGroup() { @@ -74,15 +78,28 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService{ - systemTalkAnswerConfig.getExCommand().put(item.getAskKey(), item1); + item1.setAnswerType(item1.getAnswerType() % systemTalkAnswerConfig.getSystemTalkAnswerConfig().getAnswerType()); + systemTalkAnswerConfig.getExCommand().put(item1.getAskKey(), item1); return item1; }).doFinally(signalType -> { - log.info("配置扩展最多读取{}条,实际读取了{}条扩展指令", + log.info("配置扩展最多读取{}条,实际读取了:{},id:{}的{}条扩展指令", MAX_COUT, + systemTalkAnswerConfig.getSystemTalkAnswerConfig().getAskKey(), + systemTalkAnswerConfig.getSystemTalkAnswerConfig().getId(), systemTalkAnswerConfig.getExCommand().size()); }).subscribe(); }else{ + SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName(); + systemTalkKeyAndDeviceName.setKey(item.getAskKey()); + if(item.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) { + systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode()); + }else{ + //只要内容中含有改词的都直接使用系统配置回答,而不会调用千问 + systemTalkKeyAndDeviceName.setType(KeyTypeEnum.QIUGUO_NAME.getCode()); + } + systemTalkKeyAndDeviceName.setIndex(commandList.size()); + commandList.add(systemTalkKeyAndDeviceName); groupCommand.add(item); } return item; @@ -91,6 +108,10 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService{ + return b.getKey().length() - a.getKey().length(); + }); }).subscribeOn(Schedulers.single()).subscribe(); } @@ -355,10 +376,14 @@ public class SystemTalkAnswerConfigService extends GenericReactiveCrudService getCommandList() { + public List getCommandGroupList() { return groupCommand; } + public List getCommandList() { + return commandList; + } + public Mono selectSystemTalkAnswerConfigByRand() { ReactiveQuery reactiveQuery = createQuery(); reactiveQuery = reactiveQuery.and("is_delete", 0); 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 3f88af8..24660ad 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 @@ -416,6 +416,9 @@ public enum ActionPartSpeechEnum implements IChinesePartSpeech{ List commands){ if(TIME.getCode().equals(actions.getLastCode())){ //上个是时间词,可能后面数字也是时间词 + + actions.setLastCode(ActionPartSpeechEnum.t.getCode()); + //actions.setLastKey(); return t.getAction(keyGroup, key, actions, action, systemTalkAnswerConfigEntities, includs, commands); }else{ SystemTalkAnswerConfigEntity entity = getSystemTalkWithKey(key, keyGroup, action.getNoTimeAsk()); @@ -518,8 +521,11 @@ public enum ActionPartSpeechEnum implements IChinesePartSpeech{ }else{ action.getTime().setTime(key, false); } - action.setNoTimeAsk(action.getNoTimeAsk().substring(action.getNoTimeAsk().indexOf(key) + key.length())); - action.setNoTimeAsk(action.getNoTimeAsk().replaceAll(key, "")); + int index = action.getNoTimeAsk().indexOf(key); + String v = action.getNoTimeAsk().substring(0, index); + v += action.getNoTimeAsk().substring(index + key.length()); + //action.setNoTimeAsk(action.getNoTimeAsk().substring(action.getNoTimeAsk().indexOf(key) + key.length())); + action.setNoTimeAsk(v); return action; } },//LAC TIME diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/Action.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/Action.java index b9c4550..8a0359d 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/Action.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/nlp/action/Action.java @@ -1,5 +1,6 @@ package com.qiuguo.iot.third.nlp.action; +import com.qiuguo.iot.base.utils.StringUtils; import com.qiuguo.iot.data.entity.device.DeviceUserBindEntity; import com.qiuguo.iot.data.entity.system.SystemTalkAnswerConfigEntity; import lombok.Data; @@ -40,6 +41,10 @@ public class Action { * 替换时间词后的文案 */ private String noTimeAsk; + /** + * 替换时间词、动作及动作名词后的文案 + */ + private String noTimeVNAsk; /** * 具体时间 */ @@ -65,4 +70,20 @@ public class Action { * 语言 */ private Integer language; + + public void setNoTimeVNAsk(String v){ + if(StringUtils.isNotEmpty(v)){ + if(StringUtils.isNotEmpty(action)){ + v = v.replace(action, ""); + } + if(StringUtils.isNotEmpty(name)){ + v = v.replace(name, ""); + } + if(StringUtils.isNotEmpty(actionCommand)){ + v = v.replace(actionCommand, ""); + } + noTimeVNAsk = v; + } + + } } diff --git a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java index e4e9451..5310542 100644 --- a/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java +++ b/iot-common/iot-third/src/main/java/com/qiuguo/iot/third/service/NlpService.java @@ -13,7 +13,7 @@ import com.qiuguo.iot.data.service.system.SystemTalkAnswerConfigService; import com.qiuguo.iot.third.nlp.NlpKey; import com.qiuguo.iot.third.nlp.action.Action; import com.qiuguo.iot.third.nlp.action.Actions; -import com.qiuguo.iot.third.nlp.entity.SystemTalkKeyAndDeviceName; +import com.qiuguo.iot.data.model.system.SystemTalkKeyAndDeviceName; import lombok.extern.slf4j.Slf4j; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; @@ -41,6 +41,9 @@ public class NlpService { */ private static Integer MAX_COUT = 2000; + + + public Mono getActionWithLacSingle(Long userId, String text, String type){ if(userId == null) { userId = 0L; @@ -59,21 +62,7 @@ public class NlpService { int i = 0; - for(SystemTalkAnswerConfigEntity entity : systemTalkAnswerConfigService.getCommandList()){ - SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName(); - systemTalkKeyAndDeviceName.setKey(entity.getAskKey()); - if(entity.getAnswerType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())) { - systemTalkKeyAndDeviceName.setType(KeyTypeEnum.SYSTEM_COMMAND.getCode()); - }else{ - //只要内容中含有改词的都直接使用系统配置回答,而不会调用千问 - systemTalkKeyAndDeviceName.setType(KeyTypeEnum.QIUGUO_NAME.getCode()); - } - systemTalkKeyAndDeviceName.setIndex(i++); - systemTalkKeyAndDeviceNameList.add(systemTalkKeyAndDeviceName); - } - - i = 0; for(DeviceUserBindEntity entity : deviceUserBindEntityPagerResult.getData()){ SystemTalkKeyAndDeviceName systemTalkKeyAndDeviceName = new SystemTalkKeyAndDeviceName(); systemTalkKeyAndDeviceName.setKey(entity.getBindName()); @@ -82,6 +71,7 @@ public class NlpService { systemTalkKeyAndDeviceNameList.add(systemTalkKeyAndDeviceName); } //字符由长到短排序 + systemTalkKeyAndDeviceNameList.addAll(systemTalkAnswerConfigService.getCommandList()); systemTalkKeyAndDeviceNameList.sort((a, b) ->{ return b.getKey().length() - a.getKey().length(); }); @@ -101,7 +91,7 @@ public class NlpService { }else{// if(sysTalkKeyAndDeviceName.getType().equals(KeyTypeEnum.SYSTEM_COMMAND.getCode())){ //是系统自定义动词后的名称 pText = pText.replace(sysTalkKeyAndDeviceName.getKey(), "#" + (j++) + "#"); - systemIncluds.add(systemTalkAnswerConfigService.getCommandList().get(sysTalkKeyAndDeviceName.getIndex())); + systemIncluds.add(systemTalkAnswerConfigService.getCommandGroupList().get(sysTalkKeyAndDeviceName.getIndex())); isFinding = true; }/*else{ //秋果专有名称 @@ -120,7 +110,7 @@ public class NlpService { if(pinyinArray.indexOf(sysTalkKeyAndDeviceName.getKey()) >= 0){ if(sysTalkKeyAndDeviceName.getType().equals(KeyTypeEnum.QIUGUO_NAME.getCode())){ pinyinArray = pinyinArray.replace(sysTalkKeyAndDeviceName.getKey(), "#" + (j++) + "#"); - systemIncluds.add(systemTalkAnswerConfigService.getCommandList().get(sysTalkKeyAndDeviceName.getIndex())); + systemIncluds.add(systemTalkAnswerConfigService.getCommandGroupList().get(sysTalkKeyAndDeviceName.getIndex())); return getActions(pinyinArray, text, includs, systemIncluds, type, isEng); } } @@ -169,7 +159,8 @@ public class NlpService { includs, commands); if(!key.getType().equals(ActionPartSpeechEnum.u.getCode()) && - !key.getType().equals(ActionPartSpeechEnum.w.getCode())){//组词忽略记录 + !key.getType().equals(ActionPartSpeechEnum.w.getCode()) && + !key.getType().equals(ActionPartSpeechEnum.m.getCode())){//组词忽略记录 actions.setLastCode(actionPartSpeechEnum.getCode()); actions.setLastKey(key.getKey()); } @@ -177,6 +168,8 @@ public class NlpService { if(actions.getA() + actions.getB() == 2){ actions.setA(0); actions.setB(0); + action.setNoTimeVNAsk(action.getNoTimeAsk()); + if(systemTalkAnswerConfigEntities.size() > 0){ //指令按照优先级排序 systemTalkAnswerConfigEntities.sort(Comparator.comparing(SystemTalkAnswerConfigEntity::getKeyOrder)); @@ -244,6 +237,7 @@ public class NlpService { action.setAction(action.getSystemTalkAnswerConfigEntity() == null ? null : action.getSystemTalkAnswerConfigEntity().getAskKey()); action.setDeviceUserBindEntity(actions.getLastDeviceUserBindEntity()); } + action.setNoTimeVNAsk(action.getNoTimeAsk()); if(actions.getA() + actions.getB() > 0){ actions.getActions().add(action); } diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/AlarmClockActionCommand.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/AlarmClockActionCommand.java index 57e606e..b4a1795 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/AlarmClockActionCommand.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/AlarmClockActionCommand.java @@ -2,9 +2,10 @@ package com.qiuguo.iot.box.websocket.api.command; import com.qiuguo.iot.base.enums.AlarmRepeatEnum; import com.qiuguo.iot.base.enums.AskTypeEnum; -import com.qiuguo.iot.base.enums.PlayEnum; +import com.qiuguo.iot.base.enums.ActionStatusEnum; import com.qiuguo.iot.base.enums.YesNo; import com.qiuguo.iot.base.utils.StringUtils; +import com.qiuguo.iot.box.websocket.api.config.properties.SomeProperties; import com.qiuguo.iot.box.websocket.api.domain.BaseSession; import com.qiuguo.iot.box.websocket.api.domain.box.resp.ActionResp; import com.qiuguo.iot.box.websocket.api.domain.box.resp.BoxMessageResp; @@ -12,9 +13,10 @@ import com.qiuguo.iot.data.entity.device.DeviceAlarmClockRecordEntity; import com.qiuguo.iot.data.request.device.DeviceAlarmClockRecordRequest; import com.qiuguo.iot.data.service.device.DeviceAlarmClockMusicService; import com.qiuguo.iot.data.service.device.DeviceAlarmClockRecordService; -import com.qiuguo.iot.data.service.system.SystemTalkAnswerConfigService; import com.qiuguo.iot.third.nlp.action.Action; import com.qiuguo.iot.third.nlp.action.ActionTime; +import com.qiuguo.iot.third.nlp.action.Actions; +import com.qiuguo.iot.third.service.NlpService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @@ -39,11 +41,20 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom DeviceAlarmClockMusicService deviceAlarmClockMusicService; @Resource - SystemTalkAnswerConfigService systemTalkAnswerConfigService; + NlpService nlpService; + /** + * 调用LAC类型 + */ + @Resource + private SomeProperties lacProperties; /** * 超过这个时间的提醒才有效 */ private static Long morTime = 50000L; + /** + * action readText多个操作的分隔符 + */ + private static String SPLIT = ","; public Mono process(Action action, BaseSession baseSession) { @@ -95,9 +106,7 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom return baseWebSocketService.sendMessage(action, baseSession , "只能设置1分钟后的闹钟!", - AskTypeEnum.EXIT.getCode()).flatMap(m -> { - return Mono.empty(); - }); + AskTypeEnum.EXIT.getCode()); } } @@ -124,11 +133,42 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom .selectDeviceAlarmClockRecordByRequest(request) .defaultIfEmpty(new DeviceAlarmClockRecordEntity()) .flatMap(alarmClock ->{ - if(action.getSystemTalkAnswerConfigEntity().getActionStatus().equals(PlayEnum.START.getCode())){ + if(action.getSystemTalkAnswerConfigEntity().getActionStatus() == null || + action.getSystemTalkAnswerConfigEntity().getActionStatus().equals(ActionStatusEnum.START.getCode())){ + + if (StringUtils.isNotEmpty(action.getNoTimeVNAsk())) { + + return nlpService.getActionWithLacSingle( + 0L, + action.getNoTimeVNAsk(), + lacProperties.getType() + ).defaultIfEmpty(new Actions()).flatMap(actions -> { + if (actions.getActions() != null && actions.getActions().size() > 0) { + //目前只支持取消 + Action action1 = actions.getActions().get(0); + if(action1.getSystemTalkAnswerConfigEntity() != null && + !action1.getSystemTalkAnswerConfigEntity().getAnswerType().equals(action.getSystemTalkAnswerConfigEntity().getAnswerType())){ + if (action1.getSystemTalkAnswerConfigEntity().getActionStatus() != null && + action1.getSystemTalkAnswerConfigEntity().getActionStatus().equals(ActionStatusEnum.STOP.getCode())) { + action.setNoTimeAsk(action.getNoTimeAsk().replace(action1.getAction(), "")); + action.setNoTimeVNAsk(action1.getNoTimeVNAsk().replace(action1.getAction(), "")); + return delAlarm(action, baseSession, alarmClock, request, rDay, actionTime); + } + log.info("不支持的操作{}", alarmClock); + return baseWebSocketService.sendMessage(action, + baseSession, + "不支持该操作", + AskTypeEnum.ALARM_CLOCK.getCode()); + } + + } + return addAlarm(action, baseSession, alarmClock, request, rDay, actionTime); + }); + } return addAlarm(action, baseSession, alarmClock, request, rDay, actionTime); }else{ //删除闹钟 - return addAlarm(action, baseSession, alarmClock, request, rDay, actionTime); + return delAlarm(action, baseSession, alarmClock, request, rDay, actionTime); } }); @@ -145,15 +185,68 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom return baseWebSocketService.sendMessage(action, baseSession , action.getSystemTalkAnswerConfigEntity().getAnswerValueFaild(), - AskTypeEnum.ALARM_CLOCK.getCode()).flatMap(m -> { - return Mono.empty(); - }); + AskTypeEnum.ALARM_CLOCK.getCode()); }else{ // - return Mono.just(false); + if(alarmClock.getRepeat().equals(AlarmRepeatEnum.ONE.getCode())){ + //一次性提醒的 + return deleteAlarm(action, baseSession, alarmClock, request, actionTime); + }else{ + if((alarmClock.getRepeatDay().intValue() & rDay.intValue()) != rDay.intValue()) { + alarmClock.setRepeatDay(alarmClock.getRepeatDay() | rDay); + log.info("要删除的闹钟没有该日期:{}", alarmClock); + return baseWebSocketService.sendMessage(action, + baseSession , + action.getSystemTalkAnswerConfigEntity().getAnswerValueFaild(), + AskTypeEnum.ALARM_CLOCK.getCode()); + }else{ + rDay = (alarmClock.getRepeatDay().intValue() ^ rDay.intValue()); + if(rDay.intValue() == 0){ + //删除闹钟 + //先判断是否去掉文案 + return deleteAlarm(action, baseSession, alarmClock, request, actionTime); + }else{ + //更新闹钟 + alarmClock.setRepeatDay(rDay); + return updateAlarmClock(action, baseSession, alarmClock, request); + } + } + } + } } + private Mono deleteAlarm(Action action, + BaseSession baseSession, + DeviceAlarmClockRecordEntity alarmClock, + DeviceAlarmClockRecordRequest request, + ActionTime actionTime){ + //先判断是否去掉文案 + if(StringUtils.isNotEmpty(alarmClock.getReadText())){ + if(alarmClock.getReadText().contains(action.getNoTimeAsk())){ + alarmClock.setReadText(alarmClock.getReadText().replace(action.getNoTimeAsk(), "")); + if(StringUtils.isNotEmpty(alarmClock.getReadText())){ + //去除头尾的, + if(alarmClock.getReadText().startsWith(SPLIT)){ + alarmClock.setReadText(alarmClock.getReadText().substring(SPLIT.length())); + }else if(alarmClock.getReadText().endsWith(SPLIT)){ + alarmClock.setReadText(alarmClock.getReadText().substring(0, alarmClock.getReadText().length() - SPLIT.length())); + } + + alarmClock.setAction(alarmClock.getReadText()); + //更新闹钟 + //会有问题,有多个物联网操作。会导致最后取消改闹钟下的物联网操作,而不是某天的 + return updateAlarmClock(action, baseSession, alarmClock, request); + } + } + } + return deviceAlarmClockRecordService.deleteDeviceAlarmClockRecordById(alarmClock.getId()).flatMap(i -> { + Long deleteId = alarmClock.getId(); + alarmClock.setId(null); + return sendAlarmClockMessage(action, baseSession, alarmClock, null, deleteId); + }); + } + private Mono addAlarm(Action action, BaseSession baseSession, DeviceAlarmClockRecordEntity alarmClock, @@ -192,7 +285,8 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom action, baseSession, alarmClock, - request); + request, + null); }else{ //随机音乐 alarmClock.setSoundType(YesNo.YES.getCode()); @@ -204,7 +298,8 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom action, baseSession, alarmClock, - request); + request, + null); } ); } @@ -215,7 +310,8 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom if(StringUtils.isNotEmpty(alarmClock.getReadText()) && StringUtils.isNotEmpty(action.getNoTimeAsk()) && !alarmClock.getReadText().contains(action.getNoTimeAsk())){ - alarmClock.setReadText(alarmClock.getReadText() + "," + action.getNoTimeAsk()); + alarmClock.setReadText(alarmClock.getReadText() + SPLIT + action.getNoTimeAsk()); + alarmClock.setAction(alarmClock.getReadText()); log.info("修改提醒文案:{}", alarmClock); isUpdate = true; } @@ -227,31 +323,41 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom } } if(isUpdate){ - return deviceAlarmClockRecordService.updateDeviceAlarmClockRecordById(alarmClock).flatMap(i -> { - action.getSystemTalkAnswerConfigEntity().setAnswerValue("修改闹钟," + action.getSystemTalkAnswerConfigEntity().getAnswerValue()); - return sendAlarmClockMessage(action, baseSession, alarmClock, request.getRepeat()); - }); + return updateAlarmClock(action, baseSession, alarmClock, request); } + log.info("不修改:{},添加的天数{}", alarmClock, rDay); + return baseWebSocketService.sendMessage(action, + baseSession , + action.getSystemTalkAnswerConfigEntity().getAnswerValueFaild(), + AskTypeEnum.ALARM_CLOCK.getCode()); + } - log.info("不修改:{},添加的天数{}", alarmClock, rDay); - return baseWebSocketService.sendMessage(action, - baseSession , - action.getSystemTalkAnswerConfigEntity().getAnswerValueFaild(), - AskTypeEnum.ALARM_CLOCK.getCode()).flatMap(m -> { - return Mono.empty(); + + } + + private Mono updateAlarmClock(Action action, + BaseSession baseSession, + DeviceAlarmClockRecordEntity alarmClock, + DeviceAlarmClockRecordRequest request){ + return deviceAlarmClockRecordService.deleteDeviceAlarmClockRecordById(alarmClock.getId()).flatMap(i -> { + action.getSystemTalkAnswerConfigEntity().setAnswerValue("修改闹钟," + action.getSystemTalkAnswerConfigEntity().getAnswerValue()); + Long deleteId = alarmClock.getId(); + alarmClock.setId(null); + return addAlarmClockMessage(action, baseSession, alarmClock, request, deleteId); }); } private Mono addAlarmClockMessage(Action action, BaseSession baseSession, DeviceAlarmClockRecordEntity alarmClock, - DeviceAlarmClockRecordRequest request){ + DeviceAlarmClockRecordRequest request, + Long deleteId){ return deviceAlarmClockRecordService.insert(alarmClock).flatMap(i -> { return deviceAlarmClockRecordService.selectDeviceAlarmClockRecordByRequest(request).flatMap( alarm -> { - return sendAlarmClockMessage(action, baseSession, alarm, request.getRepeat()); + return sendAlarmClockMessage(action, baseSession, alarm, request.getRepeat(), deleteId); } ); } @@ -262,49 +368,56 @@ public class AlarmClockActionCommand extends ActionCommand implements IActionCom private Mono sendAlarmClockMessage(Action action, BaseSession baseSession, DeviceAlarmClockRecordEntity alarm, - Integer repeat){ + Integer repeat, + Long deleteId){ List dayOfWeek = null; String msg = action.getSystemTalkAnswerConfigEntity().getAnswerValue(); - if(!repeat.equals(AlarmRepeatEnum.ONE.getCode())){ - if(alarm.getRepeatDay().intValue() == 0x7f){ - msg.replace("#day#", "每天"); - dayOfWeek = new ArrayList(){ - { - add(1); - add(2); - add(3); - add(4); - add(5); - add(6); - add(7); - } - }; - }else{ - dayOfWeek = new ArrayList(); - int o = 0x01; - int day = alarm.getRepeatDay().intValue(); - String v = ""; - for(int i = 0; i < 7; i++){ - if((day & o) == o){ - v += "周" + (i + 1); + if(repeat != null){ + if(!repeat.equals(AlarmRepeatEnum.ONE.getCode())){ + if(alarm.getRepeatDay().intValue() == 0x7f){ + msg.replace("#day#", "每天"); + dayOfWeek = new ArrayList(){ + { + add(1); + add(2); + add(3); + add(4); + add(5); + add(6); + add(7); + } + }; + }else{ + dayOfWeek = new ArrayList(); + int o = 0x01; + int day = alarm.getRepeatDay().intValue(); + String v = ""; + for(int i = 0; i < 7; i++){ + if((day & o) == o){ + v += "周" + (i + 1); + + dayOfWeek.add(i + 1); + } + o <<= 1; - dayOfWeek.add(i + 1); } + msg = msg.replace("#day#", v); + SimpleDateFormat df = new SimpleDateFormat("H点m分"); + msg = msg.replace("#time#", df.format(alarm.getTime())); } - msg = msg.replace("#day#", v); - SimpleDateFormat df = new SimpleDateFormat("H点m分"); - msg = msg.replace("#time#", df.format(alarm.getTime())); + }else{ + msg = msg.replace("#time#", ""); + SimpleDateFormat df = new SimpleDateFormat("yyyy年M月d日H点m分"); + msg = msg.replace("#day#", df.format(alarm.getTime())); } - }else{ - msg = msg.replace("#time#", ""); - SimpleDateFormat df = new SimpleDateFormat("yyyy年M月d日H点m分"); - msg = msg.replace("#day#", df.format(alarm.getTime())); } + BoxMessageResp resp = new BoxMessageResp(); ActionResp actionResp = new ActionResp(); actionResp.setId(alarm.getId()); + actionResp.setDeleteId(deleteId); actionResp.setTime(alarm.getTime()); SimpleDateFormat df = new SimpleDateFormat("H:m"); String v = df.format(alarm.getTime()); diff --git a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/MusicActionCommand.java b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/MusicActionCommand.java index e8ff876..f35714c 100644 --- a/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/MusicActionCommand.java +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/MusicActionCommand.java @@ -1,7 +1,7 @@ package com.qiuguo.iot.box.websocket.api.command; import com.qiuguo.iot.base.enums.AskTypeEnum; -import com.qiuguo.iot.base.enums.PlayEnum; +import com.qiuguo.iot.base.enums.ActionStatusEnum; import com.qiuguo.iot.base.utils.StringUtils; import com.qiuguo.iot.box.websocket.api.domain.BaseMessageResp; import com.qiuguo.iot.box.websocket.api.domain.BaseSession; @@ -38,21 +38,21 @@ public class MusicActionCommand extends ActionCommand implements IActionCommand log.info("定期打开音乐播放"); return alarmClockActionCommand.process(action, baseSession); } - if(action.getSystemTalkAnswerConfigEntity().getActionStatus().equals(PlayEnum.START.getCode())){ + if(action.getSystemTalkAnswerConfigEntity().getActionStatus().equals(ActionStatusEnum.START.getCode())){ return musicService.searchMusic(search, 1).defaultIfEmpty(new ArrayList<>()).flatMap(resultSongs -> { //BoxMessageResp resp = new BoxMessageResp(); MusicResp musicResp = new MusicResp(); if(resultSongs.size() > 0){ // SongInfoResponse.ResultSong song = resultSongs.get(0); - musicResp.setPlay(PlayEnum.START.getCode()); + musicResp.setPlay(ActionStatusEnum.START.getCode()); musicResp.setName(song.getName()); musicResp.setUrl(song.getUrl()); musicResp.setSinger(song.getArtistName()); resp.setText("现在为您播放" + song.getName() + (StringUtils.isNotEmpty(song.getArtistName()) ? ("来自" + song.getArtistName()) : "")); }else{ - musicResp.setPlay(PlayEnum.NONE.getCode()); + musicResp.setPlay(ActionStatusEnum.NONE.getCode()); resp.setText("未找到相关资源"); } resp.setMusic(musicResp); @@ -82,7 +82,7 @@ public class MusicActionCommand extends ActionCommand implements IActionCommand if(boxSession != null){ baseWebSocketService.sendMsg(boxSession, resp); //记录音乐状态 - if(resp.getMusic().getPlay().equals(PlayEnum.STOP.getCode())){ + if(resp.getMusic().getPlay().equals(ActionStatusEnum.STOP.getCode())){ //去掉内存中音乐同步对象 boxSession.setMusic(null); baseSession.setMusic(null); @@ -104,7 +104,7 @@ public class MusicActionCommand extends ActionCommand implements IActionCommand //记录音乐状态 //去掉内存中音乐同步对象 if(userSession != null){ - if(resp.getMusic().getPlay().equals(PlayEnum.STOP.getCode())){ + if(resp.getMusic().getPlay().equals(ActionStatusEnum.STOP.getCode())){ baseSession.setMusic(null); userSession.setMusic(null); }else{ @@ -113,7 +113,7 @@ public class MusicActionCommand extends ActionCommand implements IActionCommand } //如果在线推送用户端 }else{ - if(resp.getMusic().getPlay().equals(PlayEnum.STOP.getCode())){ + if(resp.getMusic().getPlay().equals(ActionStatusEnum.STOP.getCode())){ baseSession.setMusic(null); }else{ baseSession.setMusic(resp.getMusic()); 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 d5f49e4..05bee53 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 @@ -18,6 +18,11 @@ public class ActionResp { * */ Long id; + /** + * 删除客户端对应ID,闹钟id + * + */ + Long deleteId; /** * 小时 */