diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java index a06707f..0ff3aba 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/controller/DeviceController.java @@ -11,8 +11,11 @@ import com.zsc.edu.gateway.modules.iot.device.dto.DeviceServeDto; import com.zsc.edu.gateway.modules.iot.device.entity.Device; import com.zsc.edu.gateway.modules.iot.device.query.DeviceQuery; import com.zsc.edu.gateway.modules.iot.device.service.DeviceService; +import com.zsc.edu.gateway.modules.iot.device.vo.DeviceStatusVo; import com.zsc.edu.gateway.modules.iot.device.vo.DeviceVo; +import com.zsc.edu.gateway.modules.iot.record.entity.DataWarningVo; import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; +import com.zsc.edu.gateway.modules.iot.record.entity.RecordDataStatusVo; import com.zsc.edu.gateway.modules.iot.record.service.RecordDataService; import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; @@ -115,4 +118,34 @@ public class DeviceController { public Page recordData(Page page, String clientId) { return recordService.page(page, new LambdaQueryWrapper().eq(RecordData::getClientId, clientId)); } + + /** + * 查询设备信息数量 + */ + @GetMapping("status") + @PreAuthorize("hasAuthority('iot:device:query')") + @DataPermission + public DeviceStatusVo status() { + return service.status(); + } + + /** + * 查询设备消息信息 + */ + @GetMapping("/record/status") + @PreAuthorize("hasAuthority('iot:device:query')") + @DataPermission + public RecordDataStatusVo recordDataStatus() { + return recordService.recordDataStatus(); + } + + /** + * + */ + @GetMapping("/data/status") + @PreAuthorize("hasAuthority('iot:device:query')") + @DataPermission + public DataWarningVo dataWarning() { + return recordService.dataWarning(); + } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java index 457370f..9bedec4 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/BatchDeviceDto.java @@ -57,4 +57,9 @@ public class BatchDeviceDto { */ private String remark; + /** + * 图标 + */ + public String icon; + } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java index 60eed4a..21929c6 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceDto.java @@ -54,4 +54,9 @@ public class DeviceDto { */ private String remark; + /** + * 图标 + */ + public String icon; + } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceServeDto.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceServeDto.java index e85cffb..bb693c7 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceServeDto.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/dto/DeviceServeDto.java @@ -35,6 +35,11 @@ public class DeviceServeDto { */ public String serveName; + /** + * 图标 + */ + public String icon; + /** * 参数 */ diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java index a156717..466e534 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/DeviceService.java @@ -8,6 +8,7 @@ import com.zsc.edu.gateway.modules.iot.device.dto.DeviceDto; import com.zsc.edu.gateway.modules.iot.device.dto.DeviceServeDto; import com.zsc.edu.gateway.modules.iot.device.entity.Device; import com.zsc.edu.gateway.modules.iot.device.query.DeviceQuery; +import com.zsc.edu.gateway.modules.iot.device.vo.DeviceStatusVo; import com.zsc.edu.gateway.modules.iot.device.vo.DeviceVo; import java.util.List; @@ -27,4 +28,6 @@ public interface DeviceService extends IService { Boolean serve(DeviceServeDto dto); IPage query(Page page, DeviceQuery query); + + DeviceStatusVo status(); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java index 96b0339..c6e7c27 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/service/impl/DeviceServiceImpl.java @@ -15,9 +15,13 @@ import com.zsc.edu.gateway.modules.iot.device.mapper.DeviceMapper; import com.zsc.edu.gateway.modules.iot.device.query.DeviceQuery; import com.zsc.edu.gateway.modules.iot.device.repo.DeviceRepository; import com.zsc.edu.gateway.modules.iot.device.service.DeviceService; +import com.zsc.edu.gateway.modules.iot.device.vo.DeviceStatusVo; import com.zsc.edu.gateway.modules.iot.device.vo.DeviceVo; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.iot.product.repo.ProductRepository; +import com.zsc.edu.gateway.modules.iot.tsl.repo.EventRepository; +import com.zsc.edu.gateway.modules.iot.tsl.repo.PropertyRepository; +import com.zsc.edu.gateway.modules.iot.tsl.repo.ServeRepository; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -39,6 +43,12 @@ public class DeviceServiceImpl extends ServiceImpl imp private ProductRepository productRepo; @Resource private RedisUtils redisUtils; + @Resource + private PropertyRepository propertyRepo; + @Resource + private EventRepository eventRepo; + @Resource + private ServeRepository serveRepo; /** @@ -48,7 +58,7 @@ public class DeviceServiceImpl extends ServiceImpl imp @Transactional public Device create(DeviceDto dto) { if (baseMapper.findByName(dto.getName()) != null) { - throw new ConstraintException("该设备已存在!"); + throw new ConstraintException("该设备名称已存在!"); } Device device = mapper.toEntity(dto); save(device); @@ -183,5 +193,13 @@ public class DeviceServiceImpl extends ServiceImpl imp return devicePage; } - + @Override + public DeviceStatusVo status() { + DeviceStatusVo vo = new DeviceStatusVo(); + vo.deviceCount = baseMapper.selectCount(null); + vo.propertyCount = propertyRepo.selectCount(null); + vo.serveCount = serveRepo.selectCount(null); + vo.eventCount = eventRepo.selectCount(null); + return vo; + } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceStatusVo.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceStatusVo.java new file mode 100644 index 0000000..dde8f9f --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceStatusVo.java @@ -0,0 +1,30 @@ +package com.zsc.edu.gateway.modules.iot.device.vo; + +import lombok.Data; + +/** + * @author zhuang + */ +@Data +public class DeviceStatusVo { + /** + * 设备总数 + */ + public Long deviceCount; + + /** + * 属性总数 + */ + public Long propertyCount; + + /** + * 服务总数 + */ + public Long serveCount; + + /** + * 事件总数 + */ + public Long eventCount; + +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java index 3ef2c9e..618af75 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/device/vo/DeviceVo.java @@ -166,6 +166,11 @@ public class DeviceVo { */ public String updateBy; + /** + * 是否启用/停用 + */ + private Boolean enabled = true; + /** * 设备包含的扩展属性,产品不同,设备所包含的属性也略有不同 */ diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java index e46304e..5fb7614 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/controller/ProductController.java @@ -8,6 +8,7 @@ import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.iot.product.query.ProductQuery; import com.zsc.edu.gateway.modules.iot.product.service.ProductService; import com.zsc.edu.gateway.modules.iot.product.service.impl.ProductServiceImpl; +import com.zsc.edu.gateway.modules.iot.product.vo.ProductStatusVo; import lombok.AllArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -103,4 +104,13 @@ public class ProductController { public Product detail(@PathVariable("id") Long id) { return service.detail(id); } + + /** + * 查询产品各类信息 + */ + @GetMapping("status") + @DataPermission + public ProductStatusVo status() { + return service.status(); + } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java index f1938f8..b67fd8d 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/entity/Product.java @@ -56,6 +56,11 @@ public class Product extends BaseEntity { @TableField(exist = false) private Set params; + /** + * 是否启用/停用 + */ + private Boolean enabled = true; + /** * 接入方式 diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java index 0eb90dc..73f89c7 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/ProductService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.zsc.edu.gateway.modules.iot.product.dto.ProductDto; import com.zsc.edu.gateway.modules.iot.product.entity.Product; import com.zsc.edu.gateway.modules.iot.product.query.ProductQuery; +import com.zsc.edu.gateway.modules.iot.product.vo.ProductStatusVo; import java.util.List; @@ -22,4 +23,6 @@ public interface ProductService extends IService { boolean delete(Long id); List list(ProductQuery query); + + ProductStatusVo status(); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java index 4d2f7e8..3a4df6a 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/service/impl/ProductServiceImpl.java @@ -1,5 +1,6 @@ package com.zsc.edu.gateway.modules.iot.product.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zsc.edu.gateway.exception.ConstraintException; import com.zsc.edu.gateway.modules.iot.product.dto.ProductDto; @@ -8,6 +9,7 @@ import com.zsc.edu.gateway.modules.iot.product.mapper.ProductMapper; import com.zsc.edu.gateway.modules.iot.product.query.ProductQuery; import com.zsc.edu.gateway.modules.iot.product.repo.ProductRepository; import com.zsc.edu.gateway.modules.iot.product.service.ProductService; +import com.zsc.edu.gateway.modules.iot.product.vo.ProductStatusVo; import com.zsc.edu.gateway.modules.iot.tsl.entity.Param; import com.zsc.edu.gateway.modules.iot.tsl.service.ParamService; import lombok.AllArgsConstructor; @@ -90,4 +92,12 @@ public class ProductServiceImpl extends ServiceImpl return products.subList(0, Math.min(5, products.size())); } + @Override + public ProductStatusVo status() { + ProductStatusVo vo = new ProductStatusVo(); + vo.productCount = baseMapper.selectCount(null); + vo.enabledCount = baseMapper.selectCount(new LambdaQueryWrapper().eq(Product::getEnabled, true)); + vo.disabledCount = baseMapper.selectCount(new LambdaQueryWrapper().eq(Product::getEnabled, false)); + return vo; + } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/product/vo/ProductStatusVo.java b/src/main/java/com/zsc/edu/gateway/modules/iot/product/vo/ProductStatusVo.java new file mode 100644 index 0000000..fb536b1 --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/product/vo/ProductStatusVo.java @@ -0,0 +1,24 @@ +package com.zsc.edu.gateway.modules.iot.product.vo; + +import lombok.Data; + +/** + * @author zhuang + */ +@Data +public class ProductStatusVo { + /** + * 产品总数 + */ + public Long productCount; + + /** + * 启用数 + */ + public Long enabledCount; + + /** + * 停用数 + */ + public Long disabledCount; +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/DataWarningVo.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/DataWarningVo.java new file mode 100644 index 0000000..a3e0173 --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/DataWarningVo.java @@ -0,0 +1,19 @@ +package com.zsc.edu.gateway.modules.iot.record.entity; + +import lombok.Data; + +/** + * @author zhuang + */ +@Data +public class DataWarningVo { + /** + * 告警总数 + */ + private Long warningCount; + + /** + * 今日新增 + */ + private Long todayWarningCount; +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java index 53d5a92..40bcfcb 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordData.java @@ -1,5 +1,6 @@ package com.zsc.edu.gateway.modules.iot.record.entity; +import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -32,4 +33,8 @@ public class RecordData { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime recordTime; + + @TableField(value = "dept_id", fill = FieldFill.INSERT) + private Long deptId; + } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordDataStatusVo.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordDataStatusVo.java new file mode 100644 index 0000000..16ca229 --- /dev/null +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/entity/RecordDataStatusVo.java @@ -0,0 +1,19 @@ +package com.zsc.edu.gateway.modules.iot.record.entity; + +import lombok.Data; + +/** + * @author zhuang + */ +@Data +public class RecordDataStatusVo { + /** + * 消息总数 + */ + public Long recordCount; + + /** + * 数据点数 + */ + public Long dataCount; +} diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java index 417f035..0943a53 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/repo/RecordDataRepository.java @@ -2,6 +2,7 @@ package com.zsc.edu.gateway.modules.iot.record.repo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.time.LocalDateTime; @@ -11,8 +12,9 @@ import java.util.List; * @author zhuang */ public interface RecordDataRepository extends BaseMapper { - @Select("select * from iot_record_data where record_time_str = #{recordTimeStr}") - List findByRecordTimeStr(String recordTimeStr); - + @Select("SELECT COUNT(*) FROM iot_record_data WHERE content->>'warning' IS NOT NULL AND (content->>'warning')::int & 1 = 1") + long countWarnings(); + @Select("SELECT COUNT(*) FROM iot_record_data WHERE content->>'warning' IS NOT NULL AND (content->>'warning')::int & 1 = 1 AND record_time >= #{todayStart}") + long countTodayWarnings(@Param("todayStart") LocalDateTime todayStart); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java index b3ee38c..60b076f 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/RecordDataService.java @@ -3,7 +3,9 @@ package com.zsc.edu.gateway.modules.iot.record.service; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.zsc.edu.gateway.modules.iot.record.entity.DataWarningVo; import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; +import com.zsc.edu.gateway.modules.iot.record.entity.RecordDataStatusVo; import java.util.List; @@ -13,4 +15,8 @@ import java.util.List; public interface RecordDataService extends IService { RecordData recordData(String clientId, JSONObject data); + + RecordDataStatusVo recordDataStatus(); + + DataWarningVo dataWarning(); } \ No newline at end of file diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java index b48a7ad..53a3395 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/record/service/impl/RecordDataServiceImpl.java @@ -2,10 +2,10 @@ package com.zsc.edu.gateway.modules.iot.record.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.zsc.edu.gateway.framework.redis.RedisUtils; +import com.zsc.edu.gateway.modules.iot.record.entity.DataWarningVo; import com.zsc.edu.gateway.modules.iot.record.entity.RecordData; +import com.zsc.edu.gateway.modules.iot.record.entity.RecordDataStatusVo; import com.zsc.edu.gateway.modules.iot.record.repo.RecordDataRepository; import com.zsc.edu.gateway.modules.iot.record.service.RecordDataService; import lombok.AllArgsConstructor; @@ -31,4 +31,22 @@ public class RecordDataServiceImpl extends ServiceImpl().isNotNull(RecordData::getContent))); + return recordDataStatusVo; + } + + @Override + public DataWarningVo dataWarning() { + DataWarningVo dataWarningVo = new DataWarningVo(); + LocalDateTime todayStart = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0); + long warningCount = baseMapper.countWarnings(); + long todayWarningCount = baseMapper.countTodayWarnings(todayStart); + dataWarningVo.setWarningCount(warningCount); + dataWarningVo.setTodayWarningCount(todayWarningCount); + return dataWarningVo; + } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java index 7fb839a..121636f 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/iot/tsl/service/impl/PropertyServiceImpl.java @@ -26,9 +26,6 @@ public class PropertyServiceImpl extends ServiceImpl + diff --git a/src/main/resources/mappers/iot/ProductMapper.xml b/src/main/resources/mappers/iot/ProductMapper.xml index 35a1355..dc48b00 100644 --- a/src/main/resources/mappers/iot/ProductMapper.xml +++ b/src/main/resources/mappers/iot/ProductMapper.xml @@ -16,6 +16,7 @@ +