Переглянути джерело

feat(增加统计页面设备锁): 增加统计页面设备锁

增加统计页面设备锁
zjian 2 місяців тому
батько
коміт
aa81afadb6

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/bi/dto/MonitorTargetBiDTO.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.coldchain.modular.bi.dto;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.util.Date;
@@ -45,5 +46,16 @@ public class MonitorTargetBiDTO  {
      */
     private List<MonitorTargetRegionBiDTO> regions;
 
+    /**
+     * 冰箱锁编状态
+     */
+    private String lockStatus;
+
+    /**
+     * 冰箱锁编号
+     */
+    private String lockNo;
+
+
 
 }

+ 12 - 6
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/bi/service/BiService.java

@@ -2,6 +2,7 @@ package vip.xiaonuo.coldchain.modular.bi.service;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -14,6 +15,7 @@ import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.coldchain.modular.bi.dto.MonitorTargetBiDTO;
 import vip.xiaonuo.coldchain.modular.bi.dto.MonitorTargetRegionBiDTO;
 import vip.xiaonuo.coldchain.modular.bi.dto.TargetRoomBiDTO;
+import vip.xiaonuo.coldchain.modular.bi.utils.CloudApiService;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 import vip.xiaonuo.coldchain.modular.monitornotice.entity.Realtime;
 import vip.xiaonuo.coldchain.modular.monitornotice.param.RealtimeParam;
@@ -56,7 +58,6 @@ public class BiService {
     private SysOrgService sysOrgService;
 
 
-
     public List<TargetRoomBiDTO> listTargetRoom() {
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
         QueryWrapper<TargetRoom> queryWrapper = new QueryWrapper<TargetRoom>().checkSqlInjection();
@@ -64,12 +65,12 @@ public class BiService {
         queryWrapper.lambda().orderByAsc(TargetRoom::getSortCode).orderByAsc(TargetRoom::getId);
         List<TargetRoom> targetRooms = targetRoomService.list(CommonPageRequest.defaultPage(), queryWrapper);
         List<TargetRoomBiDTO> targetRoomBiDTOS = BeanUtil.copyToList(targetRooms, TargetRoomBiDTO.class);
-        targetRoomBiDTOS.stream().parallel().forEach(r->{
+        targetRoomBiDTOS.stream().parallel().forEach(r -> {
             //统计在线 离线 总数
             List<MonitorTarget> monitorTargets = monitorTargetService.getTargetListByRoom(r.getId());
             long count = monitorTargets.stream().filter(t -> t.getStatus().equals(MonitorStatusEnum.ONLINE.getCode())).count();
             r.setOnlineNum(Convert.toInt(count));
-            r.setOfflineNum(monitorTargets.size()-r.getOnlineNum());
+            r.setOfflineNum(monitorTargets.size() - r.getOnlineNum());
             r.setAllNum(monitorTargets.size());
         });
         return targetRoomBiDTOS;
@@ -107,6 +108,7 @@ public class BiService {
             for (Map.Entry<String, List<MonitorTargetRegion>> entry : regionMap.entrySet()) {
                 List<Realtime> realtimes = entry.getValue().stream().parallel().map(r -> {
                     Realtime realtime = monitorNoticeService.getRealtime(new RealtimeParam(r.getMonitorDeviceId(), r.getSensorRoute()));
+//                    Realtime realtime = new Realtime();
                     realtime.setTemperatureUp(r.getTemperatureUp());
                     realtime.setTemperatureDown(r.getTemperatureDown());
                     realtime.setHumidityUp(r.getHumidityUp());
@@ -121,9 +123,10 @@ public class BiService {
                 MonitorTargetRegionBiDTO targetRegionBiDTO = new MonitorTargetRegionBiDTO();
                 targetRegionBiDTO.setName(entry.getKey());
                 targetRegionBiDTO.setRealtimes(realtimes);
-                targetRegionBiDTO.setUpdateTime(CollectionUtil.isNotEmpty(realtimes)?realtimes.get(0).getUpdateTime():"");
+                targetRegionBiDTO.setUpdateTime(CollectionUtil.isNotEmpty(realtimes) ? realtimes.get(0).getUpdateTime() : "");
                 regionBiDTOS.add(targetRegionBiDTO);
-                onlineNum += realtimes.stream().filter(r->r!=null && r.getSensorData()!=null).count();
+                onlineNum += realtimes.stream().filter(r -> r != null && r.getSensorData() != null).count();
+
             }
             //查询冰箱所在房间
             TargetRoom targetRoom = targetRoomService.getById(monitorTarget.getRoomId());
@@ -134,7 +137,10 @@ public class BiService {
             //统计在线 离线 总数
             monitorTarget.setAllNum(regions.size());
             monitorTarget.setOnlineNum(onlineNum);
-            monitorTarget.setOfflineNum(monitorTarget.getAllNum()-monitorTarget.getOnlineNum());
+            monitorTarget.setOfflineNum(monitorTarget.getAllNum() - monitorTarget.getOnlineNum());
+            //获取锁
+            String cloudSensorData = CloudApiService.getCloudSensorData(monitorTarget.getLockNo());
+            monitorTarget.setLockStatus(cloudSensorData);
         });
         Page<MonitorTargetBiDTO> monitorTargetBiDTOPage = new Page<>(monitorTargets.getCurrent(), monitorTargets.getSize(), monitorTargets.getTotal());
         monitorTargetBiDTOPage.setRecords(monitorTargetBiDTOS);

+ 108 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/bi/utils/CloudApiService.java

@@ -0,0 +1,108 @@
+package vip.xiaonuo.coldchain.modular.bi.utils;
+
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+@Slf4j
+public class CloudApiService {
+
+    //根据设备 SN 号获取设备最新数据
+    private static String sensorUrl = "https://cloudapi.369clouds.com/openapi/sensor/data?key={}&sn={}";
+
+    private static String APIKey = "0790e453ac85424bbea92c68da10f7ff";
+
+    /**
+     * 根据设备 SN 号获取设备最新数据
+     * <p>
+     * lockstate:锁状态
+     * 0:  "关",
+     * 1:  "关门操作",
+     * 2:  "刷卡开门",
+     * 3:  "钥匙开门",
+     * 4:  "未授权刷卡",
+     * 5:  "异常开门",
+     * 6:  "开门超时",
+     * 7:  "刷卡未开门",
+     * 8:  "撬锁",
+     * 9:  "撬锁后恢复",
+     * 10: "无效卡",
+     * 11: "授权超时",
+     * 12: "应急尝试",
+     *
+     * @param codes 代码
+     * @return {@link List }<{@link String }>
+     */
+    public static String getCloudSensorData(String code) {
+        //2.获取数据
+        if (StrUtil.isNotBlank(APIKey) && StrUtil.isNotBlank(code)) {
+            String data = HttpUtil.get(StrUtil.format(sensorUrl, APIKey, code));
+            log.info("获取设备数据 url={} \n apikey={} \n param={} \nresult={}", sensorUrl, APIKey, code, data);
+            JSONObject sensorJsonObject = JSONUtil.parseObj(data);
+            Map dataMap = sensorJsonObject.getByPath("data.items.datas", Map.class);
+            return MapUtil.getStr(dataMap, "lockstate", "0");
+        }
+        return "0";
+    }
+
+    public static void main(String[] args) {
+        System.out.println(getCloudSensorData("29107790"));
+    }
+
+    public static String resolveLockStatus(String status) {
+        /**
+         *      * 	1:  "关门操作",
+         *      * 	2:  "刷卡开门",
+         *      * 	3:  "钥匙开门",
+         *      * 	4:  "未授权刷卡",
+         *      * 	5:  "异常开门",
+         *      * 	6:  "开门超时",
+         *      * 	7:  "刷卡未开门",
+         *      * 	8:  "撬锁",
+         *      * 	9:  "撬锁后恢复",
+         *      * 	10: "无效卡",
+         *      * 	11: "授权超时",
+         *      * 	12: "应急尝试",
+         */
+        switch (status) {
+            case "1":
+                return "关门操作";
+            case "2":
+                return "刷卡开门";
+            case "3":
+                return "钥匙开门";
+            case "4":
+                return "未授权刷卡";
+            case "5":
+                return "异常开门";
+            case "6":
+                return "开门超时";
+            case "7":
+                return "刷卡未开门";
+            case "8":
+                return "撬锁";
+            case "9":
+                return "撬锁后恢复";
+            case "10":
+                return "无效卡";
+            case "11":
+                return "授权超时";
+            case "12":
+                return "应急尝试";
+            default:
+                return "关";
+        }
+    }
+
+}