Browse Source

能耗乱七八糟的东西

Levi.u 4 years ago
parent
commit
03ac487090
24 changed files with 676 additions and 185 deletions
  1. 35 0
      src/main/java/com/ebei/screen/common/constants/DmonDeviceCode.java
  2. 11 0
      src/main/java/com/ebei/screen/common/constants/EnergyPlatformConstants.java
  3. 0 1
      src/main/java/com/ebei/screen/common/response/ResponseBean.java
  4. 1 1
      src/main/java/com/ebei/screen/common/util/CommonUtil.java
  5. 175 94
      src/main/java/com/ebei/screen/common/util/EnergyUtils.java
  6. 1 1
      src/main/java/com/ebei/screen/common/util/Levi.java
  7. 1 1
      src/main/java/com/ebei/screen/controller/eba/EbaSystemController.java
  8. 32 0
      src/main/java/com/ebei/screen/controller/energy/EnergyPlatformController.java
  9. 14 16
      src/main/java/com/ebei/screen/controller/video/VideoMonitorController.java
  10. 1 1
      src/main/java/com/ebei/screen/modules/po/CameraDevice.java
  11. 1 1
      src/main/java/com/ebei/screen/modules/po/MachineRoom.java
  12. 1 1
      src/main/java/com/ebei/screen/modules/po/Project.java
  13. 1 4
      src/main/java/com/ebei/screen/modules/po/YsAccessToken.java
  14. 1 0
      src/main/java/com/ebei/screen/service/CameraDeviceService.java
  15. 39 1
      src/main/java/com/ebei/screen/service/EnergyPlatformService.java
  16. 3 0
      src/main/java/com/ebei/screen/service/MachineRoomService.java
  17. 3 1
      src/main/java/com/ebei/screen/service/ProjectService.java
  18. 40 42
      src/main/java/com/ebei/screen/service/impl/CameraDeviceServiceImpl.java
  19. 11 8
      src/main/java/com/ebei/screen/service/impl/EbaSystemServiceImpl.java
  20. 294 1
      src/main/java/com/ebei/screen/service/impl/EnergyPlatformServiceImpl.java
  21. 5 5
      src/main/java/com/ebei/screen/service/impl/MachineRoomServiceImpl.java
  22. 2 3
      src/main/java/com/ebei/screen/service/impl/ProjectServiceImpl.java
  23. 4 2
      src/main/resources/application-dev.yml
  24. 0 1
      src/main/resources/application.yml

+ 35 - 0
src/main/java/com/ebei/screen/common/constants/DmonDeviceCode.java

@@ -0,0 +1,35 @@
+package com.ebei.screen.common.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 能耗设备主机编号
+ *
+ * @author Levi
+ */
+
+@Getter
+@AllArgsConstructor
+public enum DmonDeviceCode {
+    ONE("197069285997155997", "主机1"),
+    TWO("197069285997155999", "主机2"),
+    THREE("197069285859792435", "主机3"),
+    FOUR("197069285991913104", "主机4"),
+    FIVE("197069285991913106", "主机5"),
+    SIX("197069285997156000", "主机6"),
+    ALL("197069285992961688", "主机总电能");
+
+    private String code;
+    private String name;
+
+    public static String getNameCode(String code) {
+        for (DmonDeviceCode value : DmonDeviceCode.values()) {
+            if (value.getCode().equals(code)) {
+                return value.getName();
+            }
+        }
+        return null;
+    }
+
+}

+ 11 - 0
src/main/java/com/ebei/screen/common/constants/EnergyPlatformConstants.java

@@ -37,6 +37,7 @@ public interface EnergyPlatformConstants {
      * 未知参数
      */
     String grant_type = "password";
+    String grant_type_two = "refresh_token";
 
     /**
      * 登录服务器
@@ -103,4 +104,14 @@ public interface EnergyPlatformConstants {
      */
     String v2BoxDmonGetBoxNo = apiBaseUrl + "v2/box/dmon/get?boxNo={0}";
 
+    /**
+     * 9、根据boxId和监控点ids获取监控点值[boxId:盒子ID]
+     */
+    String v2BoxDmonValueGet = apiBaseUrl + "v2/box/{0}/dmon/value/get";
+
+    /**
+     * 10、根据boxId获取所有监控点列表
+     */
+    String v2BoxDmonGrouped = apiBaseUrl + "v2/box/{0}/dmon/grouped";
+
 }

+ 0 - 1
src/main/java/com/ebei/screen/common/response/ResponseBean.java

@@ -39,7 +39,6 @@ public class ResponseBean<T> {
         return new ResponseBean<>(200, "成功", data);
     }
 
-
     public static ResponseBean fail(String reason) {
         return new ResponseBean(500, reason, null);
     }

+ 1 - 1
src/main/java/com/ebei/screen/common/util/CommonUtil.java

@@ -54,7 +54,7 @@ public class CommonUtil {
     }
 
     public static Long getSnowId() {
-        return IdUtil.getSnowflake(workId,centerId).nextId();
+        return IdUtil.getSnowflake(workId, centerId).nextId();
     }
 
 }

+ 175 - 94
src/main/java/com/ebei/screen/common/util/EnergyUtils.java

@@ -1,17 +1,24 @@
 package com.ebei.screen.common.util;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.http.HttpRequest;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ebei.screen.common.constants.EbaSystemConstants;
+import com.ebei.screen.common.constants.DmonDeviceCode;
 import com.ebei.screen.common.constants.EnergyPlatformConstants;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Component;
 
 import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.text.NumberFormat;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * 能耗平台大屏工具类
@@ -23,6 +30,33 @@ import java.util.Map;
 @Component
 public class EnergyUtils {
 
+    private static MongoTemplate mongoTemplate;
+    private static List<Map> initEmptyList;
+    public static String token;
+    public static String refreshToken;
+    public static List<String> boxIds;
+    public static Map<String, List<String>> groupIds;
+    public static Map<String, List<String>> dmonIds;
+
+    static {
+        // 初始化模板
+        List<Map> monthList = new ArrayList<>();
+        Integer monthDays = LeviUtils.getMonthDays(LocalDateTime.now().getMonthValue());
+        for (int b = 1; b <= monthDays; b++) {
+            List<Map> dayList = new ArrayList<>();
+            for (int c = 0; c <= 23; c++) {
+                dayList.add(Levi.by("hour", c).set("data", new ArrayList<>()));
+            }
+            monthList.add(Levi.by("day", b).set("data", dayList));
+        }
+        initEmptyList = monthList;
+    }
+
+    @Autowired
+    public void setMongoTemplate(MongoTemplate mongoTemplate) {
+        EnergyUtils.mongoTemplate = mongoTemplate;
+    }
+
     /**
      * 获取拼接后的url地址
      *
@@ -30,144 +64,191 @@ public class EnergyUtils {
      * @param objs 按照顺序输入任意多个参数
      * @return
      */
-    private static String getUrl(String url, Object... objs) {
+    public static String getUrl(String url, Object... objs) {
         return MessageFormat.format(url, objs);
     }
 
     /**
-     * 1、用户登录
+     * 获取登录token参数
      *
      * @return
      */
-    public static String getToken() {
-        String param = JSON.toJSONString(Levi.by("clientId", EbaSystemConstants.cliendId).set("clientSecret", EbaSystemConstants.clientSecret));
-        String result = HttpRequest.post(EnergyPlatformConstants.coreConnectToken)
-                .header("content-type", "application/x-www-form-urlencoded")
-                .body("username=" + EnergyPlatformConstants.username
-                        + "&password=" + EnergyPlatformConstants.password
-                        + "&scope=" + EnergyPlatformConstants.scope
-                        + "&grant_type=" + EnergyPlatformConstants.grant_type
-                        + "&client_id=" + EnergyPlatformConstants.client_id
-                        + "&client_secret=" + EnergyPlatformConstants.client_secret)
-                .execute().body();
-        log.info("######### 1、用户登录:{} 参数:{}", result, param);
-        JSONObject obj = JSON.parseObject(result);
-        return obj.getString("token_type") + " " + obj.getString("access_token");
+    public static List<String> loginToken() {
+        return Arrays.asList("username=" + EnergyPlatformConstants.username, "password=" + EnergyPlatformConstants.password, "scope=" + EnergyPlatformConstants.scope, "grant_type=" + EnergyPlatformConstants.grant_type, "client_id=" + EnergyPlatformConstants.client_id, "client_secret=" + EnergyPlatformConstants.client_secret);
     }
 
     /**
-     * 重新登录接口
+     * 获取刷新token参数
      *
      * @return
      */
-    public static String refreshToken() {
-        return null;
+    public static List<String> refreshToken() {
+        return Arrays.asList("refresh_token=" + EnergyUtils.refreshToken, "scope=" + EnergyPlatformConstants.scope, "grant_type=" + EnergyPlatformConstants.grant_type_two, "client_id=" + EnergyPlatformConstants.client_id, "client_secret=" + EnergyPlatformConstants.client_secret);
     }
 
     /**
-     * 2、获取当前用户名下盒子列表
+     * 获取token
      *
+     * @param bodys
      * @return
      */
-    public static List<Map> apiClientBoxGrouped() {
-        String result = HttpRequest.get(EnergyPlatformConstants.apiClientBoxGrouped)
-                .header("Authorization", getToken())
+    public static String doToken(List<String> bodys) {
+        String result = HttpRequest.post(EnergyPlatformConstants.coreConnectToken)
+                .header("content-type", "application/x-www-form-urlencoded")
+                .body(String.join("&", bodys))
                 .execute().body();
-        log.info("######### 2、获取当前用户名下盒子列表:{}", result);
-        return LeviUtils.getJsonFieldMany(result, null, Map.class);
+        JSONObject obj = JSON.parseObject(result);
+        if (obj.getString("error") != null) {
+            return null;
+        }
+        String token = obj.getString("token_type") + " " + obj.getString("access_token");
+        String refreshToken = obj.getString("refresh_token");
+        Query query = new Query();
+        query.addCriteria(Criteria.where("_id").is("token"));
+        Update update = new Update();
+        update.set("data", token);
+        update.set("expire", LocalDateTime.now());
+        mongoTemplate.upsert(query, update, "energyAuth");
+        EnergyUtils.token = token;
+        EnergyUtils.refreshToken = refreshToken;
+        return token;
     }
 
     /**
-     * 3、根据boxNo获取单个盒子
+     * 用于存储数据并计算用电量
      *
-     * @param boxNo 盒子编码
+     * @param obj            插入的对象
+     * @param pkId           区分键
+     * @param collectionName 集合名字
      * @return
      */
-    public static Map apiClientBoxRegBoxNo(String boxNo) {
-        String result = HttpRequest.get(getUrl(EnergyPlatformConstants.apiClientBoxRegBoxNo, boxNo))
-                .header("Authorization", getToken())
-                .execute().body();
-        log.info("######### 3、根据boxNo获取单个盒子:{}", result);
-        return LeviUtils.getJsonFieldOne(result, null, Map.class);
+    public static Map setDataField(Object obj, String pkId, String collectionName) {
+        LocalDateTime now = LocalDateTime.now();
+        int year = now.getYear();
+        int month = now.getMonthValue();
+        int day = now.getDayOfMonth();
+        int hour = now.getHour();
+        List<Map> objList = (List<Map>) obj;
+        Map monthMap = mongoTemplate.findById(pkId + "_" + year + "_" + month, Map.class, collectionName);
+        if (MapUtil.isEmpty(monthMap)) {
+            monthMap = Levi.by("_id", pkId + "_" + year + "_" + month).set("data", LeviUtils.deepCopy(initEmptyList));
+        }
+        List<Map> dayList = (List<Map>) monthMap.get("data");
+        Map dayMap = dayList.get(day - 1);
+        List<Map> hourList = (List<Map>) dayMap.get("data");
+        Map hourMap = hourList.get(hour);
+        List<Map> dataList = (List<Map>) hourMap.get("data");
+        // 获取获取本次即将存入数据值
+        Map<String, Double> thisValue = variousData(objList);
+        // 尝试获取是否存在历史的数据
+        Map<String, Double> deleteValue = variousData(dataList);
+        // 存放上一次数据值 当前值减上次即为本次的值
+        List<Map> lastDataList;
+        // 如果当前时间为0点 取上一天23小时数据进行比较
+        if (hour == 0) {
+            Map lastDayMap = dayList.get(day - 2);
+            List<Map> lastHourList = (List<Map>) lastDayMap.get("data");
+            Map lastHourMap = lastHourList.get(23);
+            lastDataList = (List<Map>) lastHourMap.get("data");
+        } else {
+            Map lastHourMap = hourList.get(hour - 1);
+            lastDataList = (List<Map>) lastHourMap.get("data");
+        }
+        // 如果上一次是空的 则默认本次为开头第一个
+        if (CollUtil.isEmpty(lastDataList)) {
+            lastDataList = LeviUtils.deepCopy(objList);
+        }
+        // 尝试获取上一小时的数据
+        Map<String, Double> lastValue = variousData(lastDataList);
+        // 获取本小时的具体数值
+        Map<String, Double> nowValue = nowValue(lastValue, thisValue);
+        hourMap.put("data", obj);
+        for (int i = 1; i <= 6; i++) {
+            hourMap.put("zj" + i, nowValue.get("zj" + i));
+            dayMap.put("zj" + i, addCount(dayMap, nowValue, deleteValue, "zj" + i));
+            monthMap.put("zj" + i, addCount(monthMap, nowValue, deleteValue, "zj" + i));
+        }
+        hourMap.put("all", nowValue.get("all"));
+        dayMap.put("all", addCount(dayMap, nowValue, deleteValue, "all"));
+        monthMap.put("all", addCount(monthMap, nowValue, deleteValue, "all"));
+        return monthMap;
     }
 
-    /**
-     * 4、根据boxId获取监控点分组
-     *
-     * @param boxId 盒子ID
-     * @return
-     */
-    public static List<Map> v2BoxDmonGroups(String boxId) {
-        String result = HttpRequest.get(getUrl(EnergyPlatformConstants.v2BoxDmonGroups, boxId))
-                .header("Authorization", getToken())
-                .execute().body();
-        log.info("######### 4、根据boxId获取监控点分组:{}", result);
-        return LeviUtils.getJsonFieldMany(result, null, Map.class);
+    private static Double addCount(Map a, Map<String, Double> nowValue, Map<String, Double> deleteValue, String key) {
+        Double b = nowValue.get(key);
+        Double count = Double.valueOf(a.get(key) == null ? "0" : a.get(key).toString());
+        double result = count == null ? b : Double.sum(count, b);
+        return result - deleteValue.get(key);
     }
 
     /**
-     * 5、根据boxNo获取监控点分组
+     * 计算当前的值
      *
-     * @param boxNo
+     * @param lastValue 上一小时的值
+     * @param thisValue 当前要插的值
      * @return
      */
-    public static List<Map> V2BoxDmonGroupsBoxNo(String boxNo) {
-        String result = HttpRequest.get(getUrl(EnergyPlatformConstants.V2BoxDmonGroupsBoxNo, boxNo))
-                .header("Authorization", getToken())
-                .execute().body();
-        log.info("######### 5、根据boxNo获取监控点分组:{}", result);
-        return LeviUtils.getJsonFieldMany(result, null, Map.class);
+    private static Map<String, Double> nowValue(Map<String, Double> lastValue, Map<String, Double> thisValue) {
+        Map<String, Double> map = new HashMap(16);
+        for (int i = 1; i <= 6; i++) {
+            map.put("zj" + i, thisValue.get("zj" + i) - lastValue.get("zj" + i));
+        }
+        map.put("all", thisValue.get("all") - lastValue.get("all"));
+        return map;
     }
 
     /**
-     * 6、根据boxId和分组id获取监控点
+     * 获取每个机箱电数以及总电数
      *
-     * @param boxId
-     * @param groupId
+     * @param dataList
      * @return
      */
-    public static List<Map> v2BoxDmonGroupDmon(String boxId, String groupId) {
-        String result = HttpRequest.get(getUrl(EnergyPlatformConstants.v2BoxDmonGroupDmon, boxId, groupId))
-                .header("Authorization", getToken())
-                .execute().body();
-        log.info("######### 6、根据boxId和分组id获取监控点:{}", result);
-        return LeviUtils.getJsonFieldMany(result, null, Map.class);
+    private static Map<String, Double> variousData(List<Map> dataList) {
+        boolean flag = CollUtil.isEmpty(dataList);
+        JSONObject data = new JSONObject();
+        if (!flag) {
+            dataList.forEach(x -> data.put(x.get("id").toString(), x.get("value").toString()));
+        }
+        double zj1 = flag ? 0.0 : data.getDoubleValue(DmonDeviceCode.ONE.getCode());
+        double zj2 = flag ? 0.0 : data.getDoubleValue(DmonDeviceCode.TWO.getCode());
+        double zj3 = flag ? 0.0 : data.getDoubleValue(DmonDeviceCode.THREE.getCode());
+        double zj4 = flag ? 0.0 : data.getDoubleValue(DmonDeviceCode.FOUR.getCode());
+        double zj5 = flag ? 0.0 : data.getDoubleValue(DmonDeviceCode.FIVE.getCode());
+        double zj6 = flag ? 0.0 : data.getDoubleValue(DmonDeviceCode.SIX.getCode());
+        double all = flag ? 0.0 : data.getDoubleValue(DmonDeviceCode.ALL.getCode());
+        return Levi.by("zj1", zj1).set("zj2", zj2).set("zj3", zj3).set("zj4", zj4).set("zj5", zj5).set("zj6", zj6).set("all", all);
     }
 
-    /**
-     * 7、根据boxId和监控点id集合获取部分监控点
-     *
-     * @param boxId
-     * @param id
-     * @return
-     */
-    public static List<Map> v2BoxDmonGet(String boxId, String id) {
-        String param = JSON.toJSONString(Arrays.asList(id));
-        String result = HttpRequest.post(getUrl(EnergyPlatformConstants.v2BoxDmonGet, boxId))
-                .header("Authorization", getToken())
-                .header("content-type", "application/json")
-                .body(param)
-                .execute().body();
-        log.info("######### 7、根据boxId和监控点id集合获取部分监控点:{} 参数:{}", result, param);
-        return LeviUtils.getJsonFieldMany(result, null, Map.class);
+    public static String getPercent(Double one, Double two) {
+        if (one == 0) {
+            return "0%";
+        }
+        if (two == 0) {
+            return "100%";
+        }
+        NumberFormat format = NumberFormat.getPercentInstance();
+        Double result = one / two;
+        return format.format(result);
     }
 
     /**
-     * 8、根据boxNo和监控点id集合获取部分监控点
+     * 获取具体某一天的某一项统计数据
      *
-     * @param boxNo
-     * @param id
+     * @param key 要查询数据的key
+     * @param map 要查询的map(月份级别)
+     * @param day 查询哪一天
      * @return
      */
-    public static List<Map> v2BoxDmonGetBoxNo(String boxNo, String id) {
-        String param = JSON.toJSONString(Arrays.asList(id));
-        String result = HttpRequest.post(getUrl(EnergyPlatformConstants.v2BoxDmonGetBoxNo, boxNo))
-                .header("Authorization", getToken())
-                .header("content-type", "application/json")
-                .body(param)
-                .execute().body();
-        log.info("######### 8、根据boxNo和监控点id集合获取部分监控点:{} 参数:{}", result, param);
-        return LeviUtils.getJsonFieldMany(result, null, Map.class);
+    public static Double getDayInfo(String key, Map map, Integer day) {
+        return MapUtil.isNotEmpty(map) ? Double.valueOf(((List<Map>) map.get("data")).get(day - 1).get(key).toString()) : 0.0;
+    }
+
+    public static List<String> addSameList(List<String> list, String s) {
+        if (CollUtil.isEmpty(list)) {
+            return new ArrayList<>(Arrays.asList(s));
+        }
+        list.add(s);
+        return list;
     }
 
 }

+ 1 - 1
src/main/java/com/ebei/screen/common/util/Levi.java

@@ -9,7 +9,7 @@ import java.util.*;
  *
  * @author Levi
  */
-public class Levi<K, V> extends HashMap<K, V> {
+public class Levi<K, V> extends LinkedHashMap<K, V> {
 
     public Levi() {
     }

+ 1 - 1
src/main/java/com/ebei/screen/controller/eba/EbaSystemController.java

@@ -30,7 +30,7 @@ public class EbaSystemController {
         ebaSystemService.initData();
     }
 
-    @ApiOperation("实时数据回调接口对查")
+    @ApiOperation("实时数据回调接口")
     @PostMapping("/realTimeCallback")
     public Integer realTimeCallback(@RequestBody Map<String, String> params) {
         return ebaSystemService.realTimeCallback(params);

+ 32 - 0
src/main/java/com/ebei/screen/controller/energy/EnergyPlatformController.java

@@ -1,8 +1,40 @@
 package com.ebei.screen.controller.energy;
 
+import com.ebei.screen.common.response.ResponseBean;
+import com.ebei.screen.service.EnergyPlatformService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.PostConstruct;
+
 /**
  * @author Liu.x
  * @description 能耗平台大屏
  */
+@Api(tags = "能耗平台大屏")
+@RestController
+@RequestMapping("energy/platform")
 public class EnergyPlatformController {
+
+    @Autowired
+    private EnergyPlatformService energyPlatformService;
+
+    /**
+     * 初始化数据
+     */
+    @PostConstruct
+    public void initData() {
+        energyPlatformService.initData();
+    }
+
+    @ApiOperation("获取能耗大屏除预警外全部数据")
+    @PostMapping("/getAllInOne")
+    public ResponseBean getAllInOne() {
+        return energyPlatformService.getAllInOne();
+    }
+
 }

+ 14 - 16
src/main/java/com/ebei/screen/controller/video/VideoMonitorController.java

@@ -2,7 +2,6 @@ package com.ebei.screen.controller.video;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.ebei.screen.common.response.ResponseBean;
-import com.ebei.screen.modules.po.CameraDevice;
 import com.ebei.screen.modules.po.MachineRoom;
 import com.ebei.screen.modules.po.Project;
 import com.ebei.screen.service.CameraDeviceService;
@@ -17,7 +16,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.constraints.NotNull;
-import java.util.List;
 
 /**
  * @author Liu.x
@@ -49,7 +47,7 @@ public class VideoMonitorController {
     @ApiOperation("修改项目")
     @PostMapping("/updateProject")
     public ResponseBean updateProject(@RequestBody Project project) {
-        if(BeanUtil.isEmpty(project.getId())) {
+        if (BeanUtil.isEmpty(project.getId())) {
             return ResponseBean.fail("id不能为空");
         }
         return projectService.updateProject(project);
@@ -58,10 +56,10 @@ public class VideoMonitorController {
     @ApiOperation("分页查询项目")
     @PostMapping("/queryProject/{page}/{pageSize}")
     public ResponseBean queryProjectPage(@PathVariable("page") @NotNull(message = "URL参数:当前页的页码不能为空") Integer page,
-                                      @PathVariable("pageSize") @NotNull(message = "URL参数:当前页的页数不能为空") Integer pageSize,
-                                      @RequestParam(value = "name",required = false) String name) {
+                                         @PathVariable("pageSize") @NotNull(message = "URL参数:当前页的页数不能为空") Integer pageSize,
+                                         @RequestParam(value = "name", required = false) String name) {
 
-        return projectService.queryProjectPage(page-1,pageSize,name);
+        return projectService.queryProjectPage(page - 1, pageSize, name);
     }
 
     @ApiOperation("同步萤石设备")
@@ -80,12 +78,12 @@ public class VideoMonitorController {
     @ApiOperation("分页查询萤石设备")
     @PostMapping("/queryYsDevice/{page}/{pageSize}")
     public ResponseBean queryYsDevice(@PathVariable("page") @NotNull(message = "URL参数:当前页的页码不能为空") Integer page,
-                                         @PathVariable("pageSize") @NotNull(message = "URL参数:当前页的页数不能为空") Integer pageSize,
-                                         @RequestParam(value = "name",required = false) String name,
-                                      @RequestParam(value = "deviceSerial",required = false) String deviceSerial,
-                                      @RequestParam(value = "status",required = false) String status) {
+                                      @PathVariable("pageSize") @NotNull(message = "URL参数:当前页的页数不能为空") Integer pageSize,
+                                      @RequestParam(value = "name", required = false) String name,
+                                      @RequestParam(value = "deviceSerial", required = false) String deviceSerial,
+                                      @RequestParam(value = "status", required = false) String status) {
 
-        return cameraDeviceService.queryProjectPage(page-1,pageSize,name,deviceSerial,status);
+        return cameraDeviceService.queryProjectPage(page - 1, pageSize, name, deviceSerial, status);
     }
 
     @ApiOperation("保存机房")
@@ -98,7 +96,7 @@ public class VideoMonitorController {
     @ApiOperation("修改机房(可用于关联监控设备)")
     @PostMapping("/updateMachineRoom")
     public ResponseBean updateMachineRoom(@RequestBody MachineRoom machineRoom) {
-        if(BeanUtil.isEmpty(machineRoom.getId())) {
+        if (BeanUtil.isEmpty(machineRoom.getId())) {
             return ResponseBean.fail("id不能为空");
         }
         machineRoomService.updateMachineRoom(machineRoom);
@@ -108,10 +106,10 @@ public class VideoMonitorController {
     @ApiOperation("根据项目分页查询机房(视频大屏首页使用)")
     @PostMapping("/queryMachineRoom/{page}/{pageSize}")
     public ResponseBean queryMachineRoom(@PathVariable("page") @NotNull(message = "URL参数:当前页的页码不能为空") Integer page,
-                                      @PathVariable("pageSize") @NotNull(message = "URL参数:当前页的页数不能为空") Integer pageSize,
-                                      @RequestParam(value = "projectId",required = false) Long projectId,
-                                      @RequestParam(value = "name",required = false) String name) {
-        return machineRoomService.queryMachineRoom(page-1,pageSize,name,projectId);
+                                         @PathVariable("pageSize") @NotNull(message = "URL参数:当前页的页数不能为空") Integer pageSize,
+                                         @RequestParam(value = "projectId", required = false) Long projectId,
+                                         @RequestParam(value = "name", required = false) String name) {
+        return machineRoomService.queryMachineRoom(page - 1, pageSize, name, projectId);
     }
 
 }

+ 1 - 1
src/main/java/com/ebei/screen/modules/po/CameraDevice.java

@@ -22,7 +22,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @Accessors(chain = true)
 @ApiModel(value = "CameraDevice", description = "监控设备")
 @AllArgsConstructor
-public class CameraDevice extends BaseEntity{
+public class CameraDevice extends BaseEntity {
 
     @ApiModelProperty("设备名")
     private String deviceName;

+ 1 - 1
src/main/java/com/ebei/screen/modules/po/MachineRoom.java

@@ -24,7 +24,7 @@ import java.util.List;
 @Accessors(chain = true)
 @ApiModel(value = "MachineRoom", description = "机房")
 @AllArgsConstructor
-public class MachineRoom extends BaseEntity{
+public class MachineRoom extends BaseEntity {
 
     @ApiModelProperty("机房名")
     private String name;

+ 1 - 1
src/main/java/com/ebei/screen/modules/po/Project.java

@@ -24,7 +24,7 @@ import javax.validation.constraints.NotEmpty;
 @Accessors(chain = true)
 @ApiModel(value = "Project", description = "项目")
 @AllArgsConstructor
-public class Project extends BaseEntity{
+public class Project extends BaseEntity {
 
     @NotEmpty(message = "项目名不能为空")
     @ApiModelProperty(value = "项目名")

+ 1 - 4
src/main/java/com/ebei/screen/modules/po/YsAccessToken.java

@@ -1,13 +1,10 @@
 package com.ebei.screen.modules.po;
 
 import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.experimental.Accessors;
 import org.springframework.data.mongodb.core.mapping.Document;
 
-import java.util.List;
-
 /**
  * @version v1.0
  * @ProjectName: screen
@@ -24,7 +21,7 @@ import java.util.List;
 @Accessors(chain = true)
 @ApiModel(value = "YsAccessToken", description = "萤石accesstoken实体")
 @AllArgsConstructor
-public class YsAccessToken extends BaseEntity{
+public class YsAccessToken extends BaseEntity {
 
     private String token;
 

+ 1 - 0
src/main/java/com/ebei/screen/service/CameraDeviceService.java

@@ -19,6 +19,7 @@ public interface CameraDeviceService {
 
     /**
      * 分页查询萤石设备
+     *
      * @param pageStart
      * @param pageSize
      * @param name

+ 39 - 1
src/main/java/com/ebei/screen/service/EnergyPlatformService.java

@@ -1,5 +1,7 @@
 package com.ebei.screen.service;
 
+import com.ebei.screen.common.response.ResponseBean;
+
 /**
  * @author JCM
  * @description
@@ -7,5 +9,41 @@ package com.ebei.screen.service;
  */
 public interface EnergyPlatformService {
 
-    void apiClientBoxGrouped();
+    /**
+     * 初始化数据
+     */
+    void initData();
+
+    /**
+     * 初始化当前用户名token到mongo
+     */
+    void initToken();
+
+    /**
+     * 初始化当前用户名盒子列表到mongo
+     */
+    void initBoxList();
+
+    /**
+     * 初始化监控点分组
+     */
+    void initDmonGroups();
+
+    /**
+     * 初始化配置的监控点
+     */
+    void initDmonByDmonGroups();
+
+    /**
+     * 初始化配置监控点值
+     */
+    void initDmonValues();
+
+    /**
+     * 获取能耗大屏除预警外全部数据
+     *
+     * @return
+     */
+    ResponseBean getAllInOne();
+
 }

+ 3 - 0
src/main/java/com/ebei/screen/service/MachineRoomService.java

@@ -15,18 +15,21 @@ import com.ebei.screen.modules.po.MachineRoom;
 public interface MachineRoomService {
     /**
      * 保存机房
+     *
      * @param machineRoom
      */
     void saveMachineRoom(MachineRoom machineRoom);
 
     /**
      * 修改机房
+     *
      * @param machineRoom
      */
     void updateMachineRoom(MachineRoom machineRoom);
 
     /**
      * 分页查询机房
+     *
      * @param page
      * @param pageSize
      * @param name

+ 3 - 1
src/main/java/com/ebei/screen/service/ProjectService.java

@@ -2,7 +2,6 @@ package com.ebei.screen.service;
 
 import com.ebei.screen.common.response.ResponseBean;
 import com.ebei.screen.modules.po.Project;
-import org.springframework.stereotype.Service;
 
 import java.util.List;
 
@@ -23,12 +22,14 @@ public interface ProjectService {
 
     /**
      * 保存项目
+     *
      * @param project
      */
     public void saveProject(Project project);
 
     /**
      * 修改项目
+     *
      * @param project
      * @return
      */
@@ -36,6 +37,7 @@ public interface ProjectService {
 
     /**
      * 分页、条件查询项目
+     *
      * @param page
      * @param pageSize
      * @param name

+ 40 - 42
src/main/java/com/ebei/screen/service/impl/CameraDeviceServiceImpl.java

@@ -6,10 +6,8 @@ import cn.hutool.json.JSONUtil;
 import com.ebei.screen.common.response.ResponseBean;
 import com.ebei.screen.common.util.CommonUtil;
 import com.ebei.screen.modules.po.CameraDevice;
-import com.ebei.screen.modules.po.Project;
 import com.ebei.screen.modules.po.YsAccessToken;
 import com.ebei.screen.service.CameraDeviceService;
-import com.fasterxml.jackson.annotation.JsonUnwrapped;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,31 +59,31 @@ public class CameraDeviceServiceImpl implements CameraDeviceService {
         criteria.where("_id").is(_id);
         query.addCriteria(criteria);
         YsAccessToken ysAccessToken = mongoTemplate.findById(_id, YsAccessToken.class, "YsAccessToken");
-        if(CommonUtil.isEmpty(ysAccessToken) || ysAccessToken.getCreateTime().plusDays(6).isBefore(now)) {
+        if (CommonUtil.isEmpty(ysAccessToken) || ysAccessToken.getCreateTime().plusDays(6).isBefore(now)) {
             ysAccessToken = new YsAccessToken();
             //没有缓存过或者缓存的已经过期需要重新获取
             //请求萤石接口
-            Map<String,Object> paramMap = new HashMap<>();
-            paramMap.put("appKey",appKey);
-            paramMap.put("appSecret",appSecret);
+            Map<String, Object> paramMap = new HashMap<>();
+            paramMap.put("appKey", appKey);
+            paramMap.put("appSecret", appSecret);
             String result = HttpUtil.post(ysGetTokenUrl, paramMap);
             JSONObject jsonObject = JSONUtil.parseObj(result);
-            if("200".equals(jsonObject.get("code"))) {
+            if ("200".equals(jsonObject.get("code"))) {
                 Object temp = jsonObject.get("data");
                 JSONObject data = JSONUtil.parseObj(temp);
                 String accessToken = data.get("accessToken").toString();
                 ysAccessToken.setToken(accessToken);
             } else {
-                log.error("获取萤石accesstoken失败:"+jsonObject.get("msg"));
-                throw new Exception("获取萤石accesstoken失败:"+jsonObject.get("msg"));
+                log.error("获取萤石accesstoken失败:" + jsonObject.get("msg"));
+                throw new Exception("获取萤石accesstoken失败:" + jsonObject.get("msg"));
             }
             //保存到mongodb
             Query tempQuery = new Query();
             tempQuery.addCriteria(Criteria.where("_is").is(_id));
             Update update = new Update();
-            update.set("token",ysAccessToken.getToken());
-            update.set("createTime",now);
-            mongoTemplate.upsert(query,update,YsAccessToken.class,"YsAccessToken");
+            update.set("token", ysAccessToken.getToken());
+            update.set("createTime", now);
+            mongoTemplate.upsert(query, update, YsAccessToken.class, "YsAccessToken");
         }
         return ysAccessToken.getToken();
     }
@@ -95,7 +93,7 @@ public class CameraDeviceServiceImpl implements CameraDeviceService {
     public void syncAllYsDevice() throws Exception {
         log.info("----------------开始同步萤石监控设备----------------------");
         List<CameraDevice> ysDeviceList = getYsDeviceList();
-        if(CommonUtil.isEmpty(ysDeviceList)) {
+        if (CommonUtil.isEmpty(ysDeviceList)) {
             return;
         }
         LocalDateTime now = LocalDateTime.now();
@@ -103,30 +101,30 @@ public class CameraDeviceServiceImpl implements CameraDeviceService {
         List<CameraDevice> cameraDevice = mongoTemplate.findAll(CameraDevice.class, "CameraDevice");
         Map<String, CameraDevice> deviceMap = cameraDevice.stream().collect(Collectors.toMap(CameraDevice::getDeviceSerial, i -> i));
         //处理直播地址
-        if(CommonUtil.isNotEmpty(ysDeviceList)) {
+        if (CommonUtil.isNotEmpty(ysDeviceList)) {
             //查询直播地址
-            ysDeviceList.forEach( i -> {
+            ysDeviceList.forEach(i -> {
                 CameraDevice temp = deviceMap.get(i.getDeviceSerial());
-                if(CommonUtil.isEmpty(temp)) {
+                if (CommonUtil.isEmpty(temp)) {
                     //不存在的需要生成id
                     i.setId(CommonUtil.getSnowId());
                     i.setCreateTime(now);
                 } else {
                     i.setId(temp.getId());
                 }
-                if(i.getStatus().equals(1)) {
+                if (i.getStatus().equals(1)) {
                     //设备在线的查询直播地址
-                    Map<String,Object> map = new HashMap<>();
+                    Map<String, Object> map = new HashMap<>();
                     try {
-                        map.put("accessToken",this.getYsAccessToken());
+                        map.put("accessToken", this.getYsAccessToken());
                     } catch (Exception e) {
-                        log.error("获取萤石accessToken失败!",e);
+                        log.error("获取萤石accessToken失败!", e);
                     }
-                    map.put("deviceSerial",i.getDeviceSerial());
-                    map.put("code",code);
+                    map.put("deviceSerial", i.getDeviceSerial());
+                    map.put("code", code);
                     String result = HttpUtil.post(ysGetLiveAddress, map);
                     JSONObject jsonObject = JSONUtil.parseObj(result);
-                    if("200".equals(jsonObject.get("code"))) {
+                    if ("200".equals(jsonObject.get("code"))) {
                         i.setUrl(JSONUtil.parseObj(jsonObject.get("data")).get("url").toString());
                     }
                 }
@@ -134,15 +132,15 @@ public class CameraDeviceServiceImpl implements CameraDeviceService {
                 Query query = new Query();
                 query.addCriteria(Criteria.where("_id").is(i.getId()));
                 Update update = new Update();
-                update.set("status",i.getStatus());
-                update.set("deivceName",i.getDeviceName());
-                update.set("deviceSerial",i.getDeviceSerial());
-                update.set("deviceType",i.getDeviceType());
-                update.set("isDelete",0);
-                update.set("url",i.getUrl());
-                update.set("createTime",i.getCreateTime());
-                update.set("updateTime",i.getUpdateTime());
-                mongoTemplate.upsert(query,update,CameraDevice.class,"CameraDevice");
+                update.set("status", i.getStatus());
+                update.set("deivceName", i.getDeviceName());
+                update.set("deviceSerial", i.getDeviceSerial());
+                update.set("deviceType", i.getDeviceType());
+                update.set("isDelete", 0);
+                update.set("url", i.getUrl());
+                update.set("createTime", i.getCreateTime());
+                update.set("updateTime", i.getUpdateTime());
+                mongoTemplate.upsert(query, update, CameraDevice.class, "CameraDevice");
             });
 
         }
@@ -152,19 +150,19 @@ public class CameraDeviceServiceImpl implements CameraDeviceService {
     @Override
     public ResponseBean queryProjectPage(Integer page, Integer pageSize, String name, String deviceSerial, String status) {
         Query query = new Query();
-        if(CommonUtil.isNotEmpty(name)) {
+        if (CommonUtil.isNotEmpty(name)) {
             Criteria criteria = new Criteria();
-            Pattern pattern=Pattern.compile("^.*"+name+".*$", Pattern.CASE_INSENSITIVE);
+            Pattern pattern = Pattern.compile("^.*" + name + ".*$", Pattern.CASE_INSENSITIVE);
             criteria.where("deviceName").regex(pattern);
             query.addCriteria(criteria);
         }
-        if(CommonUtil.isNotEmpty(deviceSerial)) {
+        if (CommonUtil.isNotEmpty(deviceSerial)) {
             Criteria criteria = new Criteria();
-            Pattern pattern=Pattern.compile("^.*"+deviceSerial+".*$", Pattern.CASE_INSENSITIVE);
+            Pattern pattern = Pattern.compile("^.*" + deviceSerial + ".*$", Pattern.CASE_INSENSITIVE);
             criteria.where("deviceSerial").regex(pattern);
             query.addCriteria(criteria);
         }
-        if(CommonUtil.isNotEmpty(status)) {
+        if (CommonUtil.isNotEmpty(status)) {
             query.addCriteria(Criteria.where("status").is(status));
         }
         //计算总数
@@ -183,11 +181,11 @@ public class CameraDeviceServiceImpl implements CameraDeviceService {
         //请求萤石接口获取全部设备
         Integer pageStart = 0;
         Integer pageSize = 50;
-        Map<String,Object> paramMap = new HashMap<>();
+        Map<String, Object> paramMap = new HashMap<>();
         try {
-            paramMap.put("accessToken",this.getYsAccessToken());
+            paramMap.put("accessToken", this.getYsAccessToken());
         } catch (Exception e) {
-            log.error("同步设备失败:获取萤石accessToken失败",e);
+            log.error("同步设备失败:获取萤石accessToken失败", e);
             throw new Exception("同步设备失败:获取萤石accessToken失败");
         }
         paramMap.put("pageStart", pageStart);
@@ -200,10 +198,10 @@ public class CameraDeviceServiceImpl implements CameraDeviceService {
         List<CameraDevice> cameraDevices = JSONUtil.toList(JSONUtil.parseArray(data), CameraDevice.class);
         List<CameraDevice> totalDevice = new ArrayList<>();
         totalDevice.addAll(cameraDevices);
-        while(totalDevice.size() < Integer.valueOf(page.get("total").toString())) {
+        while (totalDevice.size() < Integer.valueOf(page.get("total").toString())) {
             //继续获取并存入totalDevice
             pageStart++;
-            paramMap.put("pageStart",pageStart);
+            paramMap.put("pageStart", pageStart);
             String resultTemp = HttpUtil.post(ysGetDeviceWithPage, paramMap);
             JSONObject jsonObjectTemp = JSONUtil.parseObj(resultTemp);
             Object tempPage = jsonObjectTemp.get("page");

+ 11 - 8
src/main/java/com/ebei/screen/service/impl/EbaSystemServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ebei.screen.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.http.HttpRequest;
 import com.alibaba.fastjson.JSON;
@@ -221,6 +222,7 @@ public class EbaSystemServiceImpl implements EbaSystemService {
     @Override
     public void initRealDataDeviceList() {
         Set<String> keys = EbaUtils.project.keySet();
+        JSONObject data2 = new JSONObject();
         keys.forEach(key -> {
             String param = JSON.toJSONString(Levi.by("projectId", Integer.parseInt(key)));
             String str = HttpRequest.post(EbaSystemConstants.getMobjectRealDataByProjectIdList)
@@ -236,19 +238,18 @@ public class EbaSystemServiceImpl implements EbaSystemService {
                 update1.set("data", EbaUtils.setDataField(map, key, "realDataDeviceList", false));
                 mongoTemplate.upsert(query1, update1, "realDataDeviceList");
                 // 存入当前最新数据方便查询
-                Query query2 = new Query();
-                query2.addCriteria(Criteria.where("_id").is("realDataDeviceList"));
                 JSONObject data1 = new JSONObject();
-                JSONObject data2 = new JSONObject();
                 map.forEach(x -> data1.put(x.get("deviceId").toString() + "_" + x.get("paramId").toString(), x.get("paramValue").toString()));
-                Update update2 = new Update();
                 data2.put(key, data1);
-                update2.set("data", data2);
-                mongoTemplate.upsert(query2, update2, "ebaAuth");
-                EbaUtils.realDataDevice = data2;
                 log.info("所有项目实时device 初始化完毕!");
             }
         });
+        Query query2 = new Query();
+        query2.addCriteria(Criteria.where("_id").is("realDataDeviceList"));
+        Update update2 = new Update();
+        update2.set("data", data2);
+        mongoTemplate.upsert(query2, update2, "ebaAuth");
+        EbaUtils.realDataDevice = data2;
     }
 
     /**
@@ -272,7 +273,9 @@ public class EbaSystemServiceImpl implements EbaSystemService {
                 map.forEach(x -> {
                     List<Map> list = (List<Map>) x.get("params");
                     Integer deviceId = (Integer) x.get("deviceId");
-                    list.forEach(y -> y.put("paramValue", EbaUtils.realDataDevice.getJSONObject(key).getString(deviceId.toString() + "_" + y.get("paramId").toString())));
+                    if (CollUtil.isNotEmpty(list)) {
+                        list.forEach(y -> y.put("paramValue", EbaUtils.realDataDevice.getJSONObject(key).getString(deviceId.toString() + "_" + y.get("paramId").toString())));
+                    }
                 });
                 data.put(key, map);
                 update.set("data", data);

+ 294 - 1
src/main/java/com/ebei/screen/service/impl/EnergyPlatformServiceImpl.java

@@ -1,12 +1,35 @@
 package com.ebei.screen.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ebei.screen.common.constants.DmonDeviceCode;
+import com.ebei.screen.common.constants.EnergyPlatformConstants;
+import com.ebei.screen.common.response.ResponseBean;
+import com.ebei.screen.common.response.ResponseBuilder;
+import com.ebei.screen.common.util.EnergyUtils;
+import com.ebei.screen.common.util.Levi;
+import com.ebei.screen.common.util.LeviUtils;
 import com.ebei.screen.service.EnergyPlatformService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * 能耗平台大屏
  *
@@ -22,8 +45,278 @@ public class EnergyPlatformServiceImpl implements EnergyPlatformService {
     @Autowired
     private MongoTemplate mongoTemplate;
 
+    @Value("${energy.grpId}")
+    private String grpIds;
+
+    /**
+     * 初始化数据
+     */
+    @Override
+    public void initData() {
+        initToken();
+        initBoxList();
+        initDmonGroups();
+        initDmonByDmonGroups();
+        initDmonValues();
+    }
+
+    /**
+     * 初始化当前用户名token到mongo
+     */
+    @Override
+    public void initToken() {
+        // 如果刷新token失效 则重新走登录接口获取
+        if (StringUtils.isBlank(EnergyUtils.doToken(EnergyUtils.refreshToken()))) {
+            EnergyUtils.doToken(EnergyUtils.loginToken());
+            EnergyUtils.doToken(EnergyUtils.refreshToken());
+        }
+    }
+
+    /**
+     * 初始化当前用户名盒子列表到mongo
+     */
+    @Override
+    public void initBoxList() {
+        String result = HttpRequest.get(EnergyPlatformConstants.apiClientBoxGrouped)
+                .header("Authorization", EnergyUtils.token)
+                .execute().body();
+        if (StringUtils.isNotBlank(result)) {
+            List<Map> mapList = LeviUtils.getJsonFieldMany(result, null, Map.class);
+            Query query = new Query();
+            query.addCriteria(Criteria.where("_id").is("boxList"));
+            Update update = new Update();
+            update.set("data", mapList);
+            mongoTemplate.upsert(query, update, "energyAuth");
+            List<String> boxIds = new ArrayList<>();
+            if (CollUtil.isNotEmpty(mapList)) {
+                mapList.forEach(x -> {
+                    List<Map> boxRegs = (List<Map>) x.get("boxRegs");
+                    if (CollUtil.isNotEmpty(boxRegs)) {
+                        boxRegs.forEach(y -> boxIds.add(y.get("boxUid").toString()));
+                    }
+                });
+            }
+            EnergyUtils.boxIds = boxIds;
+        }
+    }
+
+    /**
+     * 初始化监控点分组
+     */
     @Override
-    public void apiClientBoxGrouped() {
+    public void initDmonGroups() {
+        List<String> boxIds = EnergyUtils.boxIds;
+        Map<String, List<String>> groupIds = new HashMap<>();
+        boxIds.forEach(boxId -> {
+            String result = HttpRequest.get(EnergyUtils.getUrl(EnergyPlatformConstants.v2BoxDmonGroups, boxId))
+                    .header("Authorization", EnergyUtils.token)
+                    .execute().body();
+            List<Map> mapList = LeviUtils.getJsonFieldMany(result, null, Map.class);
+            Query query = new Query();
+            query.addCriteria(Criteria.where("_id").is("dmonGroups"));
+            Update update = new Update();
+            update.set(boxId, mapList);
+            mongoTemplate.upsert(query, update, "energyAuth");
+            if (StringUtils.isBlank(grpIds)) {
+                List<String> ids = mapList.stream().map(x -> x.get("id").toString()).collect(Collectors.toList());
+                groupIds.put(boxId, ids);
+            } else {
+                groupIds.put(boxId, Arrays.asList(grpIds.split(",")));
+            }
+        });
+        EnergyUtils.groupIds = groupIds;
+    }
+
+    /**
+     * 初始化配置的监控点
+     */
+    @Override
+    public void initDmonByDmonGroups() {
+        List<String> boxIds = EnergyUtils.boxIds;
+        Map<String, List<String>> dmonIds = new HashMap<>(16);
+        if (CollUtil.isNotEmpty(boxIds)) {
+            boxIds.forEach(boxId -> {
+                String result = HttpRequest.get(EnergyUtils.getUrl(EnergyPlatformConstants.v2BoxDmonGrouped, boxId))
+                        .header("Authorization", EnergyUtils.token)
+                        .execute().body();
+                List<Map> mapList = LeviUtils.getJsonFieldMany(result, null, Map.class);
+                if (CollUtil.isNotEmpty(mapList)) {
+                    JSONObject obj = new JSONObject();
+                    mapList.forEach(x -> obj.put(x.get("id").toString(), x));
+                    Query query = new Query();
+                    query.addCriteria(Criteria.where("_id").is("dmonList"));
+                    Update update = new Update();
+                    update.set(boxId, obj);
+                    mongoTemplate.upsert(query, update, "energyAuth");
+                    List<String> ids = new ArrayList<>();
+                    mapList.forEach(x -> {
+                        List<Map> list = (List<Map>) x.get("items");
+                        if (CollUtil.isNotEmpty(list)) {
+                            ids.addAll(list.stream().map(y -> y.get("id").toString()).collect(Collectors.toList()));
+                        }
+                    });
+                    dmonIds.put(boxId, ids);
+                }
+            });
+            EnergyUtils.dmonIds = dmonIds;
+        }
+    }
+
+    /**
+     * 初始化配置监控点值
+     */
+    @Override
+    public void initDmonValues() {
+        List<String> boxIds = EnergyUtils.boxIds;
+        Map<String, List<String>> dmonIds = EnergyUtils.dmonIds;
+        if (CollUtil.isNotEmpty(boxIds)) {
+            boxIds.forEach(boxId -> {
+                String result = HttpRequest.post(EnergyUtils.getUrl(EnergyPlatformConstants.v2BoxDmonValueGet, boxId))
+                        .header("Authorization", EnergyUtils.token)
+                        .body(JSON.toJSONString(Levi.by("ids", dmonIds.get(boxId))))
+                        .execute().body();
+                List<Map> mapList = LeviUtils.getJsonFieldMany(result, null, Map.class);
+                // 存入原始数据用于统计
+                Query query = new Query();
+                query.addCriteria(Criteria.where("_id").is(boxId + "_" + LocalDateTime.now().getYear() + "_" + LocalDateTime.now().getMonthValue()));
+                Update update = new Update();
+                Map map = EnergyUtils.setDataField(mapList, boxId, "boxDmonLists");
+                update.set("data", map.get("data"));
+                for (int i = 1; i <= 6; i++) {
+                    update.set("zj" + i, map.get("zj" + i));
+                }
+                update.set("all", map.get("all"));
+                mongoTemplate.upsert(query, update, "boxDmonLists");
+            });
+        }
+    }
+
+    /**
+     * 获取能耗大屏除预警外全部数据
+     *
+     * @return
+     */
+    @Override
+    public ResponseBean getAllInOne() {
+        List<Map> results = new ArrayList<>();
+        LocalDateTime now = LocalDateTime.now();
+        int year = now.getYear();
+        int month = now.getMonthValue();
+        int day = now.getDayOfMonth();
+        int hour = now.getHour();
+        LocalDateTime lastYearNow = now.minus(1, ChronoUnit.YEARS);
+        int lastYear = lastYearNow.getYear();
+        int lastMonth = lastYearNow.getMonthValue();
+        int lastDay = lastYearNow.getDayOfMonth();
+        int lastHour = lastYearNow.getHour();
+        LocalDateTime lastMonthNow = now.minus(1, ChronoUnit.MONTHS);
+        int dayOfMonth = lastMonthNow.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+        // 获取所有盒子id
+        List<String> boxIds = EnergyUtils.boxIds;
+        // 封装本月用电构成
+
+        boxIds.forEach(boxId -> {
+            Map thisBoxDmonMap = mongoTemplate.findById(boxId + "_" + year + "_" + month, Map.class, "boxDmonLists");
+            Map thisBoxDmonMapL = mongoTemplate.findById(boxId + "_" + ((month) == 1 ? lastYear : year) + "_" + ((month == 1) ? 12 : month - 1), Map.class, "boxDmonLists");
+            boolean flag = MapUtil.isNotEmpty(thisBoxDmonMap);
+            boolean flagL = MapUtil.isNotEmpty(thisBoxDmonMapL);
+            Double zj1 = flag ? Double.parseDouble(thisBoxDmonMap.get("zj1").toString()) : 0.0;
+            Double zj2 = flag ? Double.parseDouble(thisBoxDmonMap.get("zj2").toString()) : 0.0;
+            Double zj3 = flag ? Double.parseDouble(thisBoxDmonMap.get("zj3").toString()) : 0.0;
+            Double zj4 = flag ? Double.parseDouble(thisBoxDmonMap.get("zj4").toString()) : 0.0;
+            Double zj5 = flag ? Double.parseDouble(thisBoxDmonMap.get("zj5").toString()) : 0.0;
+            Double zj6 = flag ? Double.parseDouble(thisBoxDmonMap.get("zj6").toString()) : 0.0;
+            Double all = flag ? Double.parseDouble(thisBoxDmonMap.get("all").toString()) : 0.0;
+            Levi byydgc = Levi.by("zj1Name", DmonDeviceCode.ONE.getName()).set("zj1Value", EnergyUtils.getPercent(zj1, all))
+                    .set("zj2Name", DmonDeviceCode.TWO.getName()).set("zj2Value", EnergyUtils.getPercent(zj2, all))
+                    .set("zj3Name", DmonDeviceCode.THREE.getName()).set("zj3Value", EnergyUtils.getPercent(zj3, all))
+                    .set("zj4Name", DmonDeviceCode.FOUR.getName()).set("zj4Value", EnergyUtils.getPercent(zj4, all))
+                    .set("zj5Name", DmonDeviceCode.FIVE.getName()).set("zj5Value", EnergyUtils.getPercent(zj5, all))
+                    .set("zj6Name", DmonDeviceCode.SIX.getName()).set("zj6Value", EnergyUtils.getPercent(zj6, all))
+                    .set("allName", DmonDeviceCode.ALL.getName()).set("allValue", thisBoxDmonMap.get("all"));
 
+            double ndlj = 0.0, by = 0.0, jrss = 0.0, first = 0.0, second = 0.0, third = 0.0;
+            double ndljL = 0.0, byL = 0.0, jrssL = 0.0, firstL = 0.0, secondL = 0.0, thirdL = 0.0;
+            String ndljP = "0%", byP = "0%", jrssP = "0%", firstP = "0%", secondP = "0%", thirdP = "0%";
+            String firstName = "", secondName = "", thirdName = "";
+            // 封装年度用量环比
+            List<Map> monthList = new ArrayList<>();
+            for (int i = 1; i <= 12; i++) {
+                // 遍历今年和去年每个月的数据
+                Map map = mongoTemplate.findById(boxId + "_" + year + "_" + i, Map.class, "boxDmonLists");
+                Map lastMap = mongoTemplate.findById(boxId + "_" + lastYear + "_" + i, Map.class, "boxDmonLists");
+                Double aDouble = MapUtil.isNotEmpty(map) ? Double.parseDouble(map.get("all").toString()) : 0.0;
+                Double aDoubleL = MapUtil.isNotEmpty(lastMap) ? Double.parseDouble(lastMap.get("all").toString()) : 0.0;
+                monthList.add(Levi.by("year", year).set("month", i).set("value", aDouble).set("yearL", lastYear).set("valueL", aDoubleL));
+                // 累计今年和去年总数
+                ndlj = Double.sum(ndlj, aDouble);
+                ndljL = Double.sum(ndljL, aDoubleL);
+            }
+            // 计算年度累计总用量百分比
+            ndljP = EnergyUtils.getPercent(ndlj, ndljL);
+            // 计算本月总用量
+            by = Double.valueOf(monthList.get(month - 1).get("value").toString());
+            byL = Double.valueOf(monthList.get(month - 1).get("valueL").toString());
+            byP = EnergyUtils.getPercent(by, byL);
+            // 计算今日实时用量
+            jrss = EnergyUtils.getDayInfo("all", thisBoxDmonMap, day);
+            jrssL = EnergyUtils.getDayInfo("all", thisBoxDmonMapL, day);
+            jrssP = EnergyUtils.getPercent(jrss, jrssL);
+            // 用量第一、第二、第三
+            Double d1 = EnergyUtils.getDayInfo("zj1", thisBoxDmonMap, day);
+            Double d2 = EnergyUtils.getDayInfo("zj2", thisBoxDmonMap, day);
+            Double d3 = EnergyUtils.getDayInfo("zj3", thisBoxDmonMap, day);
+            Double d4 = EnergyUtils.getDayInfo("zj4", thisBoxDmonMap, day);
+            Double d5 = EnergyUtils.getDayInfo("zj5", thisBoxDmonMap, day);
+            Double d6 = EnergyUtils.getDayInfo("zj6", thisBoxDmonMap, day);
+            Map<Double, List<String>> dmonMaps = new HashMap(16);
+            dmonMaps.put(d1, EnergyUtils.addSameList(dmonMaps.get(d1), DmonDeviceCode.ONE.getName()));
+            dmonMaps.put(d2, EnergyUtils.addSameList(dmonMaps.get(d2), DmonDeviceCode.TWO.getName()));
+            dmonMaps.put(d3, EnergyUtils.addSameList(dmonMaps.get(d3), DmonDeviceCode.THREE.getName()));
+            dmonMaps.put(d4, EnergyUtils.addSameList(dmonMaps.get(d4), DmonDeviceCode.FOUR.getName()));
+            dmonMaps.put(d5, EnergyUtils.addSameList(dmonMaps.get(d5), DmonDeviceCode.FIVE.getName()));
+            dmonMaps.put(d6, EnergyUtils.addSameList(dmonMaps.get(d6), DmonDeviceCode.SIX.getName()));
+            List<Double> doubles = Arrays.asList(d1, d2, d3, d4, d5, d6);
+            Collections.sort(doubles);
+            first = doubles.get(doubles.size() - 1);
+            firstName = String.join(",", dmonMaps.get(first));
+            firstL = EnergyUtils.getDayInfo(firstName.replace("主机", "zj"), (day == 1 ? thisBoxDmonMapL : thisBoxDmonMap), (day == 1 ? dayOfMonth : day - 1));
+            firstP = EnergyUtils.getPercent(first, firstL);
+            second = doubles.get(doubles.size() - 2);
+            secondName = String.join(",", dmonMaps.get(second));
+            secondL = EnergyUtils.getDayInfo(secondName.replace("主机", "zj"), (day == 1 ? thisBoxDmonMapL : thisBoxDmonMap), (day == 1 ? dayOfMonth : day - 1));
+            secondP = EnergyUtils.getPercent(second, secondL);
+            third = doubles.get(doubles.size() - 3);
+            thirdName = String.join(",", dmonMaps.get(third));
+            thirdL = EnergyUtils.getDayInfo(thirdName.replace("主机", "zj"), (day == 1 ? thisBoxDmonMapL : thisBoxDmonMap), (day == 1 ? dayOfMonth : day - 1));
+            thirdP = EnergyUtils.getPercent(third, thirdL);
+            Levi byhxzb = Levi.by("ndlj", ndlj).set("ndljP", ndljP).set("by", by).set("byP", byP).set("jrss", jrss).set("jrssP", jrssP).set("first", first).set("firstP", firstP).set("firstName", firstName).set("second", second).set("secondP", secondP).set("secondName", secondName).set("third", third).set("thirdP", thirdP).set("thirdName", thirdName);
+            // 计算本日用量环比
+            List<Map> dayHbList = new ArrayList<>();
+            List<Map> dataHb = flag ? (List<Map>) ((List<Map>) thisBoxDmonMap.get("data")).get(day - 1).get("data") : null;
+            List<Map> dataHbL = flag ? (List<Map>) ((List<Map>) (day == 1 ? thisBoxDmonMapL : thisBoxDmonMap).get("data")).get(day == 1 ? dayOfMonth - 1 : day - 2).get("data") : null;
+            for (int i = 0; i < 8; i++) {
+                dayHbList.add(Levi.by("time", String.format("%02d", i * 3) + ":00").set("today", dataHb.get(i * 3).get("all") == null ? 0.0 : dataHb.get(i * 3).get("all")).set("lastDay", dataHbL.get(i * 3).get("all") == null ? 0.0 : dataHbL.get(i * 3).get("all")));
+            }
+            dayHbList.add(Levi.by("time", "23:59").set("today", dataHb.get(23).get("all") == null ? 0.0 : dataHb.get(23).get("all")).set("lastDay", dataHbL.get(23).get("all") == null ? 0.0 : dataHbL.get(23).get("all")));
+            // 计算月度用量环比
+            List<Map> monthHbList = new ArrayList<>();
+            for (int i = 1; i <= 31; i++) {
+                double x1 = 0.0;
+                double x2 = 0.0;
+                if (flag) {
+                    List<Map> l1 = (List<Map>) thisBoxDmonMap.get("data");
+                    x1 = l1.get(i - 1).get("all") == null ? 0.0 : Double.valueOf((l1.get(i - 1) == null ? "0" : l1.get(i - 1).get("all").toString()));
+                }
+                if (flagL) {
+                    List<Map> l2 = (List<Map>) thisBoxDmonMapL.get("data");
+                    x2 = l2.get(i - 1).get("all") == null ? 0.0 : Double.valueOf((l2.get(i - 1) == null ? "0" : l2.get(i - 1).get("all").toString()));
+                }
+                monthHbList.add(Levi.by("day", i + "号").set("this", x1).set("last", x2));
+            }
+            // 封装所有数据
+            results.add(Levi.by("boxId", boxId).set("byydgc", byydgc).set("byhxzb", byhxzb).set("ndylhb", monthList).set("brylhb", dayHbList).set("ydylhb", monthHbList));
+        });
+        return ResponseBuilder.ok(results);
     }
 }

+ 5 - 5
src/main/java/com/ebei/screen/service/impl/MachineRoomServiceImpl.java

@@ -51,8 +51,8 @@ public class MachineRoomServiceImpl implements MachineRoomService {
         query.addCriteria(Criteria.where("_id").is(machineRoom.getId()));
         Update update = new Update();
         update.set("name", machineRoom.getName());
-        update.set("projectId",machineRoom.getProjectId());
-        update.set("cameraDeviceList",machineRoom.getCameraDeviceList());
+        update.set("projectId", machineRoom.getProjectId());
+        update.set("cameraDeviceList", machineRoom.getCameraDeviceList());
         update.set("updateTime", now);
         mongoTemplate.updateFirst(query, update, MachineRoom.class);
     }
@@ -60,13 +60,13 @@ public class MachineRoomServiceImpl implements MachineRoomService {
     @Override
     public ResponseBean queryMachineRoom(int page, Integer pageSize, String name, Long projectId) {
         Query query = new Query();
-        if(CommonUtil.isNotEmpty(name)) {
+        if (CommonUtil.isNotEmpty(name)) {
             Criteria criteria = new Criteria();
-            Pattern pattern=Pattern.compile("^.*"+name+".*$", Pattern.CASE_INSENSITIVE);
+            Pattern pattern = Pattern.compile("^.*" + name + ".*$", Pattern.CASE_INSENSITIVE);
             criteria.where("name").regex(pattern);
             query.addCriteria(criteria);
         }
-        if(CommonUtil.isNotEmpty(projectId)) {
+        if (CommonUtil.isNotEmpty(projectId)) {
             query.addCriteria(Criteria.where("projectId").is(projectId));
         }
         query.addCriteria(Criteria.where("isDelete").is(0));

+ 2 - 3
src/main/java/com/ebei/screen/service/impl/ProjectServiceImpl.java

@@ -12,7 +12,6 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
-import org.springframework.data.repository.support.PageableExecutionUtils;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -64,9 +63,9 @@ public class ProjectServiceImpl implements ProjectService {
     @Override
     public ResponseBean queryProjectPage(Integer page, Integer pageSize, String name) {
         Query query = new Query();
-        if(CommonUtil.isNotEmpty(name)) {
+        if (CommonUtil.isNotEmpty(name)) {
             Criteria criteria = new Criteria();
-            Pattern pattern=Pattern.compile("^.*"+name+".*$", Pattern.CASE_INSENSITIVE);
+            Pattern pattern = Pattern.compile("^.*" + name + ".*$", Pattern.CASE_INSENSITIVE);
             criteria.where("name").regex(pattern);
             query.addCriteria(criteria);
         }

+ 4 - 2
src/main/resources/application-dev.yml

@@ -7,9 +7,11 @@ logging:
 spring:
   data:
     mongodb:
-      host: 172.18.0.23
+      host: 127.0.0.1
       port: 27017
       username: root
       password: admin
       database: eaglescreen
-
+energy:
+  # 多个用逗号分隔开
+  grpId: 197069285991913100

+ 0 - 1
src/main/resources/application.yml

@@ -10,7 +10,6 @@ spring:
 cn:
   auth:
     permit-url-list:
-      # 设置不拦截的请求 默认放行的请求都不添加租户ID
       - /webjars/**
       - /v2/**
       - /favicon.ico