From d456f41a1a0a0c4b52e104a6f190c8df348165c2 Mon Sep 17 00:00:00 2001 From: gaoyoulong <774597026@qq.com> Date: Sun, 24 Mar 2024 12:24:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A6=96=E9=A1=B5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iotkit/data/manager/IDeviceInfoData.java | 6 +++ .../data/service/DeviceInfoDataCache.java | 5 +++ .../service/DeviceInfoPropertyDataCache.java | 5 +++ .../data/service/DeviceInfoDataImpl.java | 41 +++++++++++++++++-- .../manager/controller/StatsController.java | 15 +++++++ .../iotkit/manager/model/stats/MainStats.java | 18 ++++++++ 6 files changed, 87 insertions(+), 3 deletions(-) diff --git a/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java b/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java index 7e4433bc..82a08aea 100644 --- a/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java +++ b/iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IDeviceInfoData.java @@ -148,4 +148,10 @@ public interface IDeviceInfoData extends IOwnedData { * @return */ boolean existByProductKey(String productKey); + + /** + * 查找待激活设备 + * @return + */ + List findNeverUsedDevices(); } diff --git a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java index d04cc106..4ff2d48b 100644 --- a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java +++ b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoDataCache.java @@ -155,6 +155,11 @@ public class DeviceInfoDataCache implements IDeviceInfoData, SmartInitializingSi return deviceInfoData.existByProductKey(productKey); } + @Override + public List findNeverUsedDevices() { + return deviceInfoData.findNeverUsedDevices(); + } + @Override public List findSubDeviceIds(String parentId) { return deviceInfoData.findSubDeviceIds(parentId); diff --git a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java index 6289b1d9..8a923cab 100644 --- a/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java +++ b/iot-dao/iot-data-serviceImpl-cache/src/main/java/cc/iotkit/data/service/DeviceInfoPropertyDataCache.java @@ -182,6 +182,11 @@ public class DeviceInfoPropertyDataCache implements IDeviceInfoData { return deviceInfoData.existByProductKey(productKey); } + @Override + public List findNeverUsedDevices() { + return deviceInfoData.findNeverUsedDevices(); + } + @Override public List findByUid(String uid) { return deviceInfoData.findByUid(uid); diff --git a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java index 83b2bd3b..f39ff7fb 100644 --- a/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java +++ b/iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/DeviceInfoDataImpl.java @@ -4,17 +4,24 @@ import cc.iotkit.common.api.PageRequest; import cc.iotkit.common.api.Paging; import cc.iotkit.common.utils.MapstructUtils; import cc.iotkit.common.utils.ReflectUtil; +import cc.iotkit.common.utils.StreamUtils; import cc.iotkit.data.dao.*; import cc.iotkit.data.manager.ICategoryData; import cc.iotkit.data.manager.IDeviceInfoData; import cc.iotkit.data.manager.IProductData; import cc.iotkit.data.model.*; import cc.iotkit.data.util.PageBuilder; +import cc.iotkit.data.util.PredicateBuilder; import cc.iotkit.model.device.DeviceInfo; import cc.iotkit.model.device.message.DevicePropertyCache; import cc.iotkit.model.product.Category; import cc.iotkit.model.product.Product; import cc.iotkit.model.stats.DataItem; +import cc.iotkit.model.system.SysDept; +import cc.iotkit.model.system.SysUser; +import cn.hutool.core.util.ObjectUtil; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Predicate; import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -34,6 +41,8 @@ import static cc.iotkit.data.model.QTbDeviceGroupMapping.tbDeviceGroupMapping; import static cc.iotkit.data.model.QTbDeviceInfo.tbDeviceInfo; import static cc.iotkit.data.model.QTbDeviceSubUser.tbDeviceSubUser; import static cc.iotkit.data.model.QTbProduct.tbProduct; +import static cc.iotkit.data.model.QTbSysDept.tbSysDept; +import static cc.iotkit.data.model.QTbSysUser.tbSysUser; @Primary @Service @@ -51,7 +60,6 @@ public class DeviceInfoDataImpl implements IDeviceInfoData, IJPACommData 0; } + @Override + public List findNeverUsedDevices() { + JPAQuery query = jpaQueryFactory.selectFrom(tbDeviceInfo); + query.where(tbDeviceInfo.onlineTime.isNull()); + List devices = query.fetch(); + return MapstructUtils.convert(devices, DeviceInfo.class); + } + @Override public Paging findByConditions(String uid, String subUid, String productKey, String groupId, @@ -284,8 +300,8 @@ public class DeviceInfoDataImpl implements IDeviceInfoData, IJPACommData getDeviceStatsByCategory(String uid) { //先按产品统计设备数量 JPAQuery query = jpaQueryFactory.select(Projections.bean(DataItem.class, - tbDeviceInfo.productKey, - tbDeviceInfo.count())) + tbDeviceInfo.productKey.as("name"), + tbDeviceInfo.productKey.count().as("value"))) .from(tbDeviceInfo) .groupBy(tbDeviceInfo.productKey); @@ -463,5 +479,24 @@ public class DeviceInfoDataImpl implements IDeviceInfoData, IJPACommData findAllByCondition(DeviceInfo data) { + return buildQuery(buildQueryCondition(data)); + } + + private List buildQuery(Predicate predicate) { + List devices = jpaQueryFactory.select(Projections.bean(TbDeviceInfo.class, + tbDeviceInfo.deviceId, tbDeviceInfo.deviceName, tbDeviceInfo.state )) + .from(tbDeviceInfo) + .where(predicate).fetch(); + return MapstructUtils.convert(devices, DeviceInfo.class); + } + + private Predicate buildQueryCondition(DeviceInfo device) { + return PredicateBuilder.instance() + .and(ObjectUtil.isNotNull(device.getId()), () -> tbDeviceInfo.id.eq(device.getId())) + .and(ObjectUtil.isNotNull(device.getState().isOnline()), () -> tbDeviceInfo.state.eq(device.getState().isOnline() ? "online" : "offline")) + .build(); + } } diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/StatsController.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/StatsController.java index d8dc68d5..1f84ab57 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/StatsController.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/StatsController.java @@ -14,6 +14,7 @@ import cc.iotkit.data.manager.ICategoryData; import cc.iotkit.data.manager.IDeviceInfoData; import cc.iotkit.data.manager.IProductData; import cc.iotkit.manager.model.stats.MainStats; +import cc.iotkit.model.device.DeviceInfo; import cc.iotkit.temporal.IThingModelMessageData; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; @@ -50,6 +51,20 @@ public class StatsController { mainStats.setCategoryTotal(ICategoryData.count()); mainStats.setProductTotal(productData.count()); mainStats.setDeviceTotal(deviceInfoData.count()); + + DeviceInfo condition = new DeviceInfo(); + DeviceInfo.State state = new DeviceInfo.State(); + state.setOnline(true); + condition.setState(state); + mainStats.setOnlineTotal(deviceInfoData.findAllByCondition(condition).size()); + + state.setOnline(false); + condition.setState(state); + mainStats.setOfflineTotal(deviceInfoData.findAllByCondition(condition).size()); + + // 待激活设备 + mainStats.setNeverOnlineTotal(deviceInfoData.findNeverUsedDevices().size()); + mainStats.setReportTotal(thingModelMessageData.count()); //上报数据统计 mainStats.setReportDataStats(thingModelMessageData.getDeviceMessageStatsWithUid(null, now - 48 * 3600 * 1000, now)); diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/model/stats/MainStats.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/model/stats/MainStats.java index 2cbb725c..09195e12 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/model/stats/MainStats.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/model/stats/MainStats.java @@ -41,6 +41,21 @@ public class MainStats { */ private long reportTotal; + /** + * 在线数量 + */ + private long onlineTotal; + + /** + * 离线数量 + */ + private long offlineTotal; + + /** + * 待激活设备 + */ + private long neverOnlineTotal; + /** * 上报数据数量统计 */ @@ -51,4 +66,7 @@ public class MainStats { */ private List deviceStatsOfCategory; + + + }