diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttdatarecord/MqttDataRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttdatarecord/MqttDataRecordController.java index 79b44f88a8..40567fa179 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttdatarecord/MqttDataRecordController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/mqttdatarecord/MqttDataRecordController.java @@ -1,33 +1,32 @@ package cn.iocoder.yudao.module.iot.controller.admin.mqttdatarecord; -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; - -import cn.iocoder.yudao.module.iot.controller.admin.mqttdatarecord.vo.*; +import cn.iocoder.yudao.module.iot.controller.admin.mqttdatarecord.vo.MqttDataRecordPageReqVO; +import cn.iocoder.yudao.module.iot.controller.admin.mqttdatarecord.vo.MqttDataRecordRespVO; +import cn.iocoder.yudao.module.iot.controller.admin.mqttdatarecord.vo.MqttDataRecordSaveReqVO; import cn.iocoder.yudao.module.iot.dal.dataobject.mqttdatarecord.MqttDataRecordDO; import cn.iocoder.yudao.module.iot.service.mqttdatarecord.MqttDataRecordService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 设备数据记录") @RestController @@ -78,7 +77,36 @@ public class MqttDataRecordController { PageResult pageResult = mqttDataRecordService.getMqttDataRecordPage(pageReqVO); return success(BeanUtils.toBean(pageResult, MqttDataRecordRespVO.class)); } + @GetMapping("/page2") + @Operation(summary = "获得设备数据记录分页") + @PreAuthorize("@ss.hasPermission('iot:mqtt-data-record:query')") + public CommonResult> getMqttDataRecordPage2(@Valid MqttDataRecordPageReqVO pageReqVO) { + PageResult pageResult = mqttDataRecordService.getMqttDataRecordPage2(pageReqVO); + return success(BeanUtils.toBean(pageResult, MqttDataRecordRespVO.class)); + } + @GetMapping("/page3") + @Operation(summary = "获得设备数据最近一个小时的数据") + @PreAuthorize("@ss.hasPermission('iot:mqtt-data-record:query')") + public CommonResult> getMqttDataRecordPage3(@Valid MqttDataRecordPageReqVO pageReqVO) { + LocalDateTime[] dateTimes= {LocalDateTime.now().plusHours(-1),LocalDateTime.now()}; + + pageReqVO.setCreateTime(dateTimes); + PageResult pageResult = mqttDataRecordService.getMqttDataRecordPage2(pageReqVO); + return success(BeanUtils.toBean(pageResult, MqttDataRecordRespVO.class)); + } + @GetMapping("/export-excel2") + @Operation(summary = "导出设备数据记录 Excel") + @PreAuthorize("@ss.hasPermission('iot:mqtt-data-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMqttDataRecordExcel2(@Valid MqttDataRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = mqttDataRecordService.getMqttDataRecordPage2(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "设备数据记录.xls", "数据", MqttDataRecordRespVO.class, + BeanUtils.toBean(list, MqttDataRecordRespVO.class)); + } @GetMapping("/export-excel") @Operation(summary = "导出设备数据记录 Excel") @PreAuthorize("@ss.hasPermission('iot:mqtt-data-record:export')") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/mqttdatarecord/MqttDataRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/mqttdatarecord/MqttDataRecordMapper.java index 67cc31ac6e..44e9f96f74 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/mqttdatarecord/MqttDataRecordMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/mqttdatarecord/MqttDataRecordMapper.java @@ -47,6 +47,7 @@ public interface MqttDataRecordMapper extends BaseMapperX { .orderByDesc("id") .last("limit 1")); } + default BigDecimal selectSum(MqttDataRecordPageReqVO reqVO) { List list = select(reqVO); BigDecimal sum = BigDecimal.ZERO; @@ -68,7 +69,7 @@ public interface MqttDataRecordMapper extends BaseMapperX { default PageResult selectPage2(MqttDataRecordPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(MqttDataRecordDO::getDeviceName, reqVO.getDeviceName()) - .eqIfPresent(MqttDataRecordDO::getAttribute, reqVO.getAttribute()) + .inIfPresent(MqttDataRecordDO::getAttribute, reqVO.getAttributes()) .eqIfPresent(MqttDataRecordDO::getAttrValue, reqVO.getAttrValue()) .betweenIfPresent(MqttDataRecordDO::getDeviceTime, reqVO.getDeviceTime()) .betweenIfPresent(MqttDataRecordDO::getCreateTime, reqVO.getCreateTime()) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java index a3395d9a75..796787a97d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java @@ -1,23 +1,28 @@ package cn.iocoder.yudao.module.iot.service.device; -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*; -import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; -import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattribute.DeviceAttributeDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.DevicePageReqVO; +import cn.iocoder.yudao.module.iot.controller.admin.device.vo.DeviceSaveReqVO; +import cn.iocoder.yudao.module.iot.controller.admin.mqttdatarecord.vo.MqttDataRecordPageReqVO; +import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattribute.DeviceAttributeDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.mqttdatarecord.MqttDataRecordDO; import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper; import cn.iocoder.yudao.module.iot.dal.mysql.deviceattribute.DeviceAttributeMapper; +import cn.iocoder.yudao.module.iot.dal.mysql.mqttdatarecord.MqttDataRecordMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_ATTRIBUTE_NOT_EXISTS; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_NOT_EXISTS; /** * 物联设备 Service 实现类 @@ -33,6 +38,8 @@ public class DeviceServiceImpl implements DeviceService { @Resource private DeviceAttributeMapper deviceAttributeMapper; + @Resource + private MqttDataRecordMapper mqttDataRecordMapper; @Override public Long createDevice(DeviceSaveReqVO createReqVO) { // 插入 @@ -41,6 +48,26 @@ public class DeviceServiceImpl implements DeviceService { // 返回 return device.getId(); } + //@Scheduled(cron="0/5 * * * * ? ") //每1秒执行一次 + public void updateDeviceStatus(){ + List list = deviceMapper.selectList(); + MqttDataRecordPageReqVO reqVO = new MqttDataRecordPageReqVO(); + LocalDateTime[] dateTimes= {LocalDateTime.now().plusSeconds(-5),LocalDateTime.now()}; + reqVO.setCreateTime(dateTimes); + reqVO.setPageSize(1); + for (DeviceDO deviceDO : list) { + reqVO.setDeviceName(deviceDO.getDeviceName()); + List recordDOList = mqttDataRecordMapper.select(reqVO); + if (recordDOList != null && deviceDO.getStatus().equals("2")) { + System.out.println(recordDOList); + deviceDO.setStatus("1"); + deviceMapper.updateById(deviceDO); + }else if ((recordDOList == null|| recordDOList.size()==0) && deviceDO.getStatus().equals("1")){ + deviceDO.setStatus("2"); + deviceMapper.updateById(deviceDO); + } + } + } @Override public void updateDevice(DeviceSaveReqVO updateReqVO) { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttdatarecord/MqttDataRecordServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttdatarecord/MqttDataRecordServiceImpl.java index 4d2954209c..277636ae0d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttdatarecord/MqttDataRecordServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/mqttdatarecord/MqttDataRecordServiceImpl.java @@ -69,6 +69,6 @@ public class MqttDataRecordServiceImpl implements MqttDataRecordService { } @Override public PageResult getMqttDataRecordPage2(MqttDataRecordPageReqVO pageReqVO) { - return mqttDataRecordMapper.selectPage(pageReqVO); + return mqttDataRecordMapper.selectPage2(pageReqVO); } } \ No newline at end of file diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index e1cfb12273..d6a4333894 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -43,21 +43,18 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: besure_neimeng + url: jdbc:mysql://111.67.199.122:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例 username: root - password: 123456 - slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 - lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 - username: root - password: 123456 + password: CHY123chy. # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 111.230.55.200 # 地址 port: 6379 # 端口 - database: 1 # 数据库索引 -# password: 123456 # 密码,建议生产环境开启 + database: 0 # 数据库索引 + #password: bkcaydy8ydhZZnS2 # 密码,建议生产环境开启 --- #################### 定时任务相关配置 #################### diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index fb6d7e3514..402c7d0af4 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -48,23 +48,14 @@ spring: datasource: master: name: besure_neimeng - url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://47.106.185.127:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例 username: besure_user1 password: zpW5:,LGHACh - # username: sa # SQL Server 连接的示例111.67.199.122http://47.106.185.127/ - # password: Yudao@2024 # SQL Server 连接的示例 - # username: SYSDBA # DM 连接的示例 - # password: SYSDBA001 # DM 连接的示例 -# slave: # 模拟从库,可根据自己需要修改 -# lazy: true # 开启懒加载,保证启动速度 -# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true -# username: root -# password: 123456 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: - host: 127.0.0.1 # 地址 + host: 111.230.55.200 # 地址 port: 6379 # 端口 database: 0 # 数据库索引 #password: bkcaydy8ydhZZnS2 # 密码,建议生产环境开启 diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index 34a404a3b9..1a0bc27bee 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -307,6 +307,7 @@ yudao: - tmp_report_data_1 - tmp_report_data_income - iot_gateway + - iot_device - iot_mqtt_record - iot_mqtt_data_record - mes_view_task_product_summary