From 2bf59f69422257c48b293398d72e7546f8e1e462 Mon Sep 17 00:00:00 2001 From: wulin Date: Mon, 13 Nov 2023 21:02:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91=E9=97=B9=E9=92=9F=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/DeviceAlarmClockRecordEntity.java | 17 ++-- .../device/DeviceAlarmClockRecordRequest.java | 84 +++++++++++++---- .../device/DeviceAlarmClockRecordResp.java | 75 ++++++++++++--- .../device/DeviceAlarmClockRecordService.java | 19 ++-- .../qiuguo/iot/third/nlp/action/Action.java | 4 + .../qiuguo/iot/third/service/NlpService.java | 3 +- .../api/command/AlarmClockActionCommand.java | 24 +++++ .../api/command/WeatherActionCommand.java | 49 +++++++++- .../customer/http/api/mysql/MysqlMain.java | 2 +- .../tmp/DeviceAlarmClockRecordController.java | 91 +++++++++++++++++++ 10 files changed, 318 insertions(+), 50 deletions(-) create mode 100644 iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/AlarmClockActionCommand.java create mode 100644 iot-modules/iot-customer-http-api/src/test/tmp/DeviceAlarmClockRecordController.java diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/device/DeviceAlarmClockRecordEntity.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/device/DeviceAlarmClockRecordEntity.java index 36aaf2f..6b44e79 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/device/DeviceAlarmClockRecordEntity.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/entity/device/DeviceAlarmClockRecordEntity.java @@ -1,16 +1,15 @@ package com.qiuguo.iot.data.entity.device; -import lombok.Data; import org.hswebframework.ezorm.rdb.mapping.annotation.Comment; import org.hswebframework.web.crud.annotation.EnableEntityEvent; import org.hswebframework.web.api.crud.entity.GenericEntity; import javax.persistence.Column; -import javax.persistence.Table; +import javax.persistence.Table;import lombok.Data; import java.util.Date; /** *

*

*闹钟记录表 * @author wulin -* @since 2023-09-05 +* @since 2023-11-13 */ @Data @@ -42,17 +41,17 @@ public class DeviceAlarmClockRecordEntity extends GenericEntity { @Column(name = "user_id", nullable = false) private Long userId; - @Comment("第一次响铃时间,如果有重复,那么每天这个时间响铃") - @Column(name = "time", nullable = false) + @Comment("第一次响铃的时间,循环响铃的时间(只取时间)") + @Column(name = "time") private Date time; - @Comment("重复次数:0:响铃一次(time指定的时间) 1:每天 2:指定星期") + @Comment("重复次数:0:响铃一次(time指定的时间) 1:每天 2:指定星期 3 跳过节假日") @Column(name = "repeat", nullable = false) private Integer repeat; - @Comment("当repeat=2时具体的星期 1,2,3,4,5,6,7") - @Column(name = "repeat_day", length = 100) - private String repeatDay; + @Comment("当repeat=2时具体的星期 按位取,从低到高 1,2,3,4,5,6,7") + @Column(name = "repeat_day") + private Integer repeatDay; @Comment("闹铃标题") @Column(name = "title", length = 255, nullable = false) diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/device/DeviceAlarmClockRecordRequest.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/device/DeviceAlarmClockRecordRequest.java index 14faaad..22f559f 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/device/DeviceAlarmClockRecordRequest.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/request/device/DeviceAlarmClockRecordRequest.java @@ -5,7 +5,7 @@ import java.util.Date; *

*闹钟记录请求类 * @author wulin -* @since 2023-08-07 +* @since 2023-11-13 */ @@ -16,38 +16,90 @@ public class DeviceAlarmClockRecordRequest implements java.io.Serializable { private int pageSize = 10; private String sort; private String order; - // + /** + * + */ private Long id; - //是否删除:0 否 1 删除 + /** + *是否删除:0 否 1 删除 + */ private Integer isDelete; - //创建时间 + /** + *创建时间 + */ private Date createTime; + /** + *创建时间搜索开始 + */ + private Date createTimeStart; + + /** + *创建时间搜索结束 + */ private Date createTimeEnd; - //修改时间 + /** + *修改时间 + */ private Date modifyTime; + /** + *修改时间搜索开始 + */ + private Date modifyTimeStart; + + /** + *修改时间搜索结束 + */ private Date modifyTimeEnd; - //设备id + /** + *设备id + */ private Long deviceId; - //用户id + /** + *用户id + */ private Long userId; - //第一次响铃时间,如果有重复,那么每天这个时间响铃 + /** + *第一次响铃的时间,循环响铃的时间(只取时间) + */ private Date time; + /** + *第一次响铃的时间,循环响铃的时间(只取时间)搜索开始 + */ + private Date timeStart; + + /** + *第一次响铃的时间,循环响铃的时间(只取时间)搜索结束 + */ private Date timeEnd; - //重复次数:0:响铃一次(time指定的时间) 1:每天 2:指定星期 + /** + *重复次数:0:响铃一次(time指定的时间) 1:每天 2:指定星期 3 跳过节假日 + */ private Integer repeat; - //当repeat=2时具体的星期 1,2,3,4,5,6,7 - private String repeatDay; - //闹铃标题 + /** + *当repeat=2时具体的星期 按位取,从低到高 1,2,3,4,5,6,7 + */ + private Integer repeatDay; + /** + *闹铃标题 + */ private String title; - //闹铃提示文案(语音播报) + /** + *闹铃提示文案(语音播报) + */ private String readText; - //响铃类型 0:系统内置 1:指定声音(音乐) + /** + *响铃类型 0:系统内置 1:指定声音(音乐) + */ private Integer soundType; - //响铃地址 + /** + *响铃地址 + */ private String sound; - //响铃名称 + /** + *响铃名称 + */ private String soundName; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/device/DeviceAlarmClockRecordResp.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/device/DeviceAlarmClockRecordResp.java index 9cf7e42..c0c3379 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/device/DeviceAlarmClockRecordResp.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/resp/device/DeviceAlarmClockRecordResp.java @@ -1,35 +1,84 @@ package com.qiuguo.iot.data.resp.device; +import com.qiuguo.iot.data.entity.device.DeviceAlarmClockRecordEntity; import lombok.Data; import java.util.Date; /** *

*

*闹钟记录返回类 * @author wulin -* @since 2023-08-07 +* @since 2023-11-13 */ @Data public class DeviceAlarmClockRecordResp { - // + public DeviceAlarmClockRecordResp(){ + } + public DeviceAlarmClockRecordResp(DeviceAlarmClockRecordEntity entity){ + id = entity.getId(); + createTime = entity.getCreateTime(); + modifyTime = entity.getModifyTime(); + deviceId = entity.getDeviceId(); + userId = entity.getUserId(); + time = entity.getTime(); + repeat = entity.getRepeat(); + repeatDay = entity.getRepeatDay(); + title = entity.getTitle(); + readText = entity.getReadText(); + soundType = entity.getSoundType(); + sound = entity.getSound(); + soundName = entity.getSoundName(); + } + + /** + * + */ private Long id; - //设备id + /** + *创建时间 + */ + private Date createTime; + /** + *修改时间 + */ + private Date modifyTime; + /** + *设备id + */ private Long deviceId; - //用户id + /** + *用户id + */ private Long userId; - //第一次响铃时间,如果有重复,那么每天这个时间响铃 + /** + *第一次响铃的时间,循环响铃的时间(只取时间) + */ private Date time; - //重复次数:0:响铃一次(time指定的时间) 1:每天 2:指定星期 + /** + *重复次数:0:响铃一次(time指定的时间) 1:每天 2:指定星期 3 跳过节假日 + */ private Integer repeat; - //当repeat=2时具体的星期 1,2,3,4,5,6,7 - private String repeatDay; - //闹铃标题 + /** + *当repeat=2时具体的星期 按位取,从低到高 1,2,3,4,5,6,7 + */ + private Integer repeatDay; + /** + *闹铃标题 + */ private String title; - //闹铃提示文案(语音播报) + /** + *闹铃提示文案(语音播报) + */ private String readText; - //响铃类型 0:系统内置 1:指定声音(音乐) + /** + *响铃类型 0:系统内置 1:指定声音(音乐) + */ private Integer soundType; - //响铃地址 + /** + *响铃地址 + */ private String sound; - //响铃名称 + /** + *响铃名称 + */ private String soundName; } \ No newline at end of file diff --git a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceAlarmClockRecordService.java b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceAlarmClockRecordService.java index 6382517..c28654a 100644 --- a/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceAlarmClockRecordService.java +++ b/iot-common/iot-data/src/main/java/com/qiuguo/iot/data/service/device/DeviceAlarmClockRecordService.java @@ -2,9 +2,10 @@ package com.qiuguo.iot.data.service.device; +import java.util.Date; +import com.qiuguo.iot.base.utils.StringUtils; import com.qiuguo.iot.data.entity.device.DeviceAlarmClockRecordEntity; import com.qiuguo.iot.data.request.device.DeviceAlarmClockRecordRequest; -import com.qiuguo.iot.base.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.hswebframework.ezorm.core.param.Sort; import org.hswebframework.ezorm.rdb.mapping.ReactiveQuery; @@ -17,19 +18,19 @@ import org.springframework.stereotype.Service; import reactor.core.publisher.Mono; import java.util.Arrays; -import java.util.Date; + /** *

* 闹钟记录服务类 *

* * @author wulin -* @since 2023-08-08 +* @since 2023-11-13 */ @Service @Slf4j -public class DeviceAlarmClockRecordService extends GenericReactiveCrudService { +public class DeviceAlarmClockRecordService extends GenericReactiveCrudService { public Mono selectDeviceAlarmClockRecordByRequest(DeviceAlarmClockRecordRequest request){ @@ -59,7 +60,7 @@ public class DeviceAlarmClockRecordService extends GenericReactiveCrudService insertDeviceAlarmClockRecord(DeviceAlarmClockRecordEntity entity){ + entity.setId(null); entity.setCreateTime(null); entity.setModifyTime(null); return insert(entity); @@ -201,7 +202,7 @@ public class DeviceAlarmClockRecordService extends GenericReactiveCrudService()); Action action = new Action(); - + action.setLanguage(isEng ? LanguageEnum.ENGLISH.getCode() : LanguageEnum.CHINESE.getCode()); actions.setRecordText(recordText); action.setLbs(new ArrayList<>()); action.setAsk(actions.getRecordText()); 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 new file mode 100644 index 0000000..7f7f21c --- /dev/null +++ b/iot-modules/iot-box-websocket-api/src/main/java/com/qiuguo/iot/box/websocket/api/command/AlarmClockActionCommand.java @@ -0,0 +1,24 @@ +package com.qiuguo.iot.box.websocket.api.command; + +import com.qiuguo.iot.base.enums.AskTypeEnum; +import com.qiuguo.iot.box.websocket.api.domain.BaseSession; +import com.qiuguo.iot.third.nlp.action.Action; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Mono; + +@Component +@Slf4j +public class AlarmClockActionCommand extends ActionCommand implements IActionCommand{ + + public Mono process(Action action, BaseSession baseSession) { + log.info("闹钟 Action:{}", action.getAsk()); + + return baseWebSocketService.sendMessage(action, + baseSession , + action.getSystemTalkAnswerConfigEntity().getAnswerValue(), + AskTypeEnum.EXIT.getCode()).flatMap(m -> { + return Mono.empty(); + }); + } +} 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 ce326d8..98274c1 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,6 +1,10 @@ package com.qiuguo.iot.box.websocket.api.command; import com.alibaba.fastjson.JSONArray; +import com.aliyun.alimt20181012.models.TranslateCertificateResponse; +import com.aliyun.alimt20181012.models.TranslateGeneralResponse; +import com.aliyun.alimt20181012.models.TranslateGeneralResponseBody; +import com.qiuguo.iot.base.enums.LanguageEnum; 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; @@ -13,6 +17,7 @@ import com.qiuguo.iot.third.nlp.action.Action; import com.qiuguo.iot.third.nlp.action.ActionTime; import com.qiuguo.iot.third.service.WeatherService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @@ -23,6 +28,15 @@ import javax.annotation.Resource; public class WeatherActionCommand extends ActionCommand implements IActionCommand{ @Resource protected WeatherService weatherService; + + @Value("${Ali.accesskeId}") + private String accessKeyId; + + @Value("${Ali.accesskeySecret}") + private String accessKeySecret; + + protected static com.aliyun.alimt20181012.Client transClient = null; + protected static com.aliyun.teautil.models.RuntimeOptions transRuntime = new com.aliyun.teautil.models.RuntimeOptions(); public Mono process(Action action, BaseSession baseSession) { log.info("天气 Action:{}", action.getAsk()); ThirdWeatherInfoRequest req = new ThirdWeatherInfoRequest(); @@ -75,6 +89,28 @@ public class WeatherActionCommand extends ActionCommand implements IActionComma + ",空气质量" + item.getAir_level() + ",湿度" + item.getHumidity() + ",最低气温" + item.getTem2() + "°C " + msg; msg = msg.replace(" ", ""); + if(LanguageEnum.ENGLISH.getCode().equals(action.getLanguage())){ + try{ + if(transClient == null){ + transClient = WeatherActionCommand.createClient(accessKeyId, accessKeySecret); + } + com.aliyun.alimt20181012.models.TranslateGeneralRequest translateGeneralRequest = new com.aliyun.alimt20181012.models.TranslateGeneralRequest() + .setSourceText(msg) + .setTargetLanguage(LanguageEnum.ENGLISH.getName()) + .setSourceLanguage(LanguageEnum.CHINESE.getName()) + .setFormatType("text") + .setScene("general"); + TranslateGeneralResponse response = transClient.translateGeneralWithOptions(translateGeneralRequest, transRuntime); + TranslateGeneralResponseBody body = response.getBody(); + log.info("获取body:code{}, Message:{}", body.getCode(), body.getMessage()); + if(body.getCode().intValue() == 200){ + msg = body.getData().getTranslated(); + } + + }catch (Exception e){ + log.info("阿里机器人翻译异常{}", e); + } + } if(baseSession instanceof BoxSession){ WeatherResp weatherResp = new WeatherResp(); weatherResp.setWeatherLocal(t.getCity()); @@ -86,7 +122,6 @@ public class WeatherActionCommand extends ActionCommand implements IActionComma resp.setText(msg); resp.setWeather(weatherResp); return baseWebSocketService.sendMessage(action, baseSession, resp); - //return Mono.empty(); } }else{ msg = action.getSystemTalkAnswerConfigEntity().getAnswerValueFaild(); @@ -95,5 +130,17 @@ public class WeatherActionCommand extends ActionCommand implements IActionComma } return baseWebSocketService.sendMessage(action, baseSession, msg, action.getSystemTalkAnswerConfigEntity().getAnswerType()); }); + + } + + public static com.aliyun.alimt20181012.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + // 必填,您的 AccessKey ID + .setAccessKeyId(accessKeyId) + // 必填,您的 AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // Endpoint 请参考 https://api.aliyun.com/product/alimt + config.endpoint = "mt.cn-hangzhou.aliyuncs.com"; + return new com.aliyun.alimt20181012.Client(config); } } diff --git a/iot-modules/iot-customer-http-api/src/test/java/com/qiuguo/iot/customer/http/api/mysql/MysqlMain.java b/iot-modules/iot-customer-http-api/src/test/java/com/qiuguo/iot/customer/http/api/mysql/MysqlMain.java index 9098b47..7d23aa3 100644 --- a/iot-modules/iot-customer-http-api/src/test/java/com/qiuguo/iot/customer/http/api/mysql/MysqlMain.java +++ b/iot-modules/iot-customer-http-api/src/test/java/com/qiuguo/iot/customer/http/api/mysql/MysqlMain.java @@ -59,7 +59,7 @@ public class MysqlMain { } List list = new ArrayList<>(); - list.add(new TablesBean("system_talk_bind_user")); + list.add(new TablesBean("device_alarm_clock_record")); //list.add(new TablesBean("system_same_talk")); List list2 = new ArrayList(); diff --git a/iot-modules/iot-customer-http-api/src/test/tmp/DeviceAlarmClockRecordController.java b/iot-modules/iot-customer-http-api/src/test/tmp/DeviceAlarmClockRecordController.java new file mode 100644 index 0000000..48fe421 --- /dev/null +++ b/iot-modules/iot-customer-http-api/src/test/tmp/DeviceAlarmClockRecordController.java @@ -0,0 +1,91 @@ +package com.admin.service.impl; + + + +import java.util.Date; +import reactor.core.publisher.Mono; +import lombok.extern.slf4j.Slf4j; +import org.hswebframework.web.api.crud.entity.PagerResult; +import org.hswebframework.web.exception.BusinessException; +/** +*

+* 闹钟记录Controller类 +*

+* +* @author wulin +* @since 2023-11-13 +*/ + +@RestController +@Slf4j +@RequestMapping("/DeviceAlarmClockRecord") +public class DeviceAlarmClockRecordController{ + + + @Autowired + private DeviceAlarmClockRecordService deviceAlarmClockRecordService; + @PostMapping("/info") + public Mono selectDeviceAlarmClockRecordByRequest(@RequestBody DeviceAlarmClockRecordRequest request){ + return deviceAlarmClockRecordService.selectDeviceAlarmClockRecordByRequest(request).map(d -> {return new DeviceAlarmClockRecordResp(d);}); + } + + + + @PostMapping("/list") + public Mono> selectDeviceAlarmClockRecordsByRequest(@RequestBody DeviceAlarmClockRecordRequest request){ + return deviceAlarmClockRecordService.selectDeviceAlarmClockRecordsByRequest(request).map(d -> { + PagerResult result = new PagerResult<>(); + result.setPageIndex(d.getPageIndex()); + result.setPageSize(d.getPageSize()); + result.setTotal(d.getTotal()); + List ds = d.getData().stream().map(new Function() { + @Override + public DeviceAlarmClockRecordResp apply(DeviceAlarmClockRecordEntity entity) { + return new DeviceAlarmClockRecordResp(entity); + } + } + + ).collect(Collectors.toList()); + result.setData(ds); + return result; + }); + } + + + + @GetMapping("/id") + public Mono selectDeviceAlarmClockRecordById(@RequestParam Long id){ + return deviceAlarmClockRecordService.selectDeviceAlarmClockRecordById(id).map(d -> {return new DeviceAlarmClockRecordResp(d);}); + } + + + + @PostMapping("/save") + public Mono insertDeviceAlarmClockRecord(@RequestBody DeviceAlarmClockRecordEntity entity){ + return deviceAlarmClockRecordService.insertDeviceAlarmClockRecord(entity); + } + + + + @PostMapping("/update") + public Mono updateDeviceAlarmClockRecordById(@RequestBody DeviceAlarmClockRecordEntity entity){ + return deviceAlarmClockRecordService.updateDeviceAlarmClockRecordById(entity); + } + + + + @PostMapping("/updateCover") + public Mono updateCoverDeviceAlarmClockRecordById(@RequestBody DeviceAlarmClockRecordEntity entity){ + return deviceAlarmClockRecordService.updateCoverDeviceAlarmClockRecordById(entity); + } + + + + @PostMapping("/delete") + public Mono deleteDeviceAlarmClockRecordById(@RequestParam Long id){ + return deviceAlarmClockRecordService.deleteDeviceAlarmClockRecordById(id); + } + + + +}