From 17e18047a47f43187f590a045b1aebe130459292 Mon Sep 17 00:00:00 2001
From: liuhaonan <31457034@qq.com>
Date: 星期一, 26 九月 2022 18:12:21 +0800
Subject: [PATCH] changes

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java |  315 +++++++++++++++++++++++----------------------------
 1 files changed, 143 insertions(+), 172 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
index d4e9300..04b7579 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -22,18 +22,19 @@
 import com.sandu.ximon.admin.param.LightControlParam;
 import com.sandu.ximon.admin.param.LightPowerSettingParam;
 import com.sandu.ximon.admin.param.LightRemarkParam;
+import com.sandu.ximon.admin.redis.DeviceRedisKey;
 import com.sandu.ximon.admin.redis.LightKey;
 import com.sandu.ximon.admin.security.SecurityUtils;
+import com.sandu.ximon.admin.utils.RedisUtils;
 import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
 import com.sandu.ximon.admin.vo.ControlLightCommandVO;
 import com.sandu.ximon.admin.vo.EquipmentInfomation;
+import com.sandu.ximon.admin.vo.RedisDeviceStatus;
 import com.sandu.ximon.dao.bo.LightBo;
 import com.sandu.ximon.dao.bo.PoleTaskLightPowerBo;
-import com.sandu.ximon.dao.domain.Light;
-import com.sandu.ximon.dao.domain.LightReportData;
-import com.sandu.ximon.dao.domain.Pole;
-import com.sandu.ximon.dao.domain.PoleBinding;
+import com.sandu.ximon.dao.domain.*;
 import com.sandu.ximon.dao.enums.DeviceRespStatusEnums;
+import com.sandu.ximon.dao.enums.OrderByEnums;
 import com.sandu.ximon.dao.mapper.LightMapper;
 import com.sandu.ximon.dao.mapper.LightTaskMapper;
 import lombok.AllArgsConstructor;
@@ -42,9 +43,10 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -61,6 +63,7 @@
     private final LightReportDataService lightReportDataService;
     private final PoleBindingService bindingService;
     private final PoleService poleService;
+    private final RedisUtils redisUtils;
 
     /**
      * 褰曞叆褰撳墠璁惧鐮佺殑璺伅鏁版嵁
@@ -72,7 +75,7 @@
         Boolean hasKey = redisService.hasKey(LightKey.REPORT_MAC.key(deviceName));
         if (!hasKey) {
             int count = count(Wrappers.lambdaQuery(Light.class).eq(Light::getDeviceCode, deviceName));
-            log.info("redis鏌ヤ笉鍒拌矾鐏暟鎹畕}={}", count, deviceName);
+            log.info("redis鏌ヤ笉鍒拌矾鐏暟鎹� 鏁伴噺:{}={}", count, deviceName);
             // 褰撳墠璺伅琛ㄦ病鏈夊綍鍏ヨ澶囧悧
             if (count == 0) {
                 Light light = new Light();
@@ -80,15 +83,15 @@
                 light.setLightPercent(heartBeatDataPackage.getLightPercent());
                 light.setLight2Percent(heartBeatDataPackage.getLight2Percent());
                 save(light);
+                log.info("鏂板璺伅");
             }
             redisService.set(LightKey.REPORT_MAC.key(deviceName), 1, LightKey.REPORT_MAC.expireSeconds());
-            log.info("鏂板璺伅");
         } else {
             Light light = new Light();
             light.setLightPercent(heartBeatDataPackage.getLightPercent());
             light.setLight2Percent(heartBeatDataPackage.getLight2Percent());
-            update(light, Wrappers.lambdaUpdate(Light.class).eq(Light::getDeviceCode, deviceName));
-            log.info("鏇存柊璺伅浜害");
+            boolean update = update(light, Wrappers.lambdaUpdate(Light.class).eq(Light::getDeviceCode, deviceName));
+            log.info("鏇存柊璺伅浜害 {}", update);
         }
     }
 
@@ -97,10 +100,43 @@
      *
      * @return 杩斿洖缁勫悎鏁版嵁dto
      */
-    public List<LightBo> listLight(int pageNo, int pageSize, String keyword) {
+    public List<LightBo> listLight(int pageNo, int pageSize, String keyword, Integer order, Integer seq) {
         Long clientId = SecurityUtils.getClientId();
 
-        PageHelper.startPage(pageNo, pageSize);
+        //鎺掑簭瀛楁
+        String orderByResult = "light_id";
+        //姝e簭銆佸�掑彊
+        String orderBySeq = OrderByEnums.ASC.getCode();
+        if (order != null) {
+            switch (order) {
+                case 1:
+                    orderByResult = OrderByEnums.LIGHT_POLE_NAME.getCode();
+                    break;
+                case 2:
+                    orderByResult = OrderByEnums.LIGHT_UPDATE_TIME.getCode();
+                    break;
+                case 3:
+                    orderByResult = OrderByEnums.LIGHT_CREATE_TIME.getCode();
+                    break;
+                default:
+            }
+        }
+        if (seq != null) {
+            switch (seq) {
+                case 1:
+                    orderBySeq = OrderByEnums.ASC.getCode();
+                    break;
+                case 2:
+                    orderBySeq = OrderByEnums.DESC.getCode();
+                    break;
+                default:
+                    break;
+            }
+        }
+        //鎺掑簭鏂瑰紡
+        String orderBy = orderByResult + " " + orderBySeq;
+
+        PageHelper.startPage(pageNo, pageSize, orderBy);
 
         List<LightBo> listLight = baseMapper.listLight(clientId, keyword);
 
@@ -272,151 +308,6 @@
         return resultList;
     }
 
-    /**
-     * 鍗曠伅鑺傝兘鐜�
-     *
-     * @return
-     */
-    public List controlEnergySaving() {
-        //鑾峰彇鍒版鍦ㄦ墽琛岀殑浠诲姟鍒楄〃
-        List<LightTaskDto> lightTaskDtos = SpringContextHolder.getBean(LightTaskService.class).listTask();
-        LocalDateTime now = LocalDateTime.now();
-
-        List<LightTaskDto> list1 = new ArrayList<>();
-        List<LightTaskDto> list2 = new ArrayList<>();
-        List<LightTaskDto> list3 = new ArrayList<>();
-        List<LightTaskDto> list4 = new ArrayList<>();
-        List<LightTaskDto> list5 = new ArrayList<>();
-        List<LightTaskDto> list6 = new ArrayList<>();
-        List<LightTaskDto> list7 = new ArrayList<>();
-
-        for (LightTaskDto lightTaskDto : lightTaskDtos) {
-            List<Integer> weekList = lightTaskDto.getWeekList();
-            for (Integer one : weekList) {
-                switch (one) {
-                    case 1:
-                        list1.add(lightTaskDto);
-                        break;
-                    case 2:
-                        list2.add(lightTaskDto);
-                        break;
-                    case 4:
-                        list3.add(lightTaskDto);
-                        break;
-                    case 8:
-                        list4.add(lightTaskDto);
-                        break;
-                    case 16:
-                        list5.add(lightTaskDto);
-                        break;
-                    case 32:
-                        list6.add(lightTaskDto);
-                        break;
-                    case 64:
-                        list7.add(lightTaskDto);
-                        break;
-                    default:
-                }
-            }
-        }
-
-
-        //鑾峰彇褰撳墠鏄熸湡鍑� 1-7
-
-        int currentWeekValue = now.getDayOfWeek().getValue();
-        Map map;
-        List<Map> temp = new ArrayList<>();
-        //鑾峰彇鏃ユ湡 绮剧‘鍒板ぉ
-        LocalDateTime localDateTime = now.with(LocalTime.MIN);
-
-
-        for (int i = 1; i < 8; i++) {
-            currentWeekValue--;
-            if (currentWeekValue < 1) {
-                currentWeekValue = 7;
-            }
-            map = new LinkedHashMap();
-            map.put("time", localDateTime.minusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-            map.put("value", getlist(currentWeekValue));
-            temp.add(map);
-        }
-
-
-        return temp;
-    }
-
-
-    /**
-     * 鍗曠伅鑳借��
-     *
-     * @return
-     */
-    public List controlEnergy() {
-        //鑾峰彇鍒版鍦ㄦ墽琛岀殑浠诲姟鍒楄〃
-        List<LightTaskDto> lightTaskDtos = SpringContextHolder.getBean(LightTaskService.class).listTask();
-        LocalDateTime now = LocalDateTime.now();
-
-        List<LightTaskDto> list1 = new ArrayList<>();
-        List<LightTaskDto> list2 = new ArrayList<>();
-        List<LightTaskDto> list3 = new ArrayList<>();
-        List<LightTaskDto> list4 = new ArrayList<>();
-        List<LightTaskDto> list5 = new ArrayList<>();
-        List<LightTaskDto> list6 = new ArrayList<>();
-        List<LightTaskDto> list7 = new ArrayList<>();
-
-        for (LightTaskDto lightTaskDto : lightTaskDtos) {
-            List<Integer> weekList = lightTaskDto.getWeekList();
-            System.out.println(weekList + "===========================");
-            for (Integer one : weekList) {
-                switch (one) {
-                    case 1:
-                        list1.add(lightTaskDto);
-                        break;
-                    case 2:
-                        list2.add(lightTaskDto);
-                        break;
-                    case 4:
-                        list3.add(lightTaskDto);
-                        break;
-                    case 8:
-                        list4.add(lightTaskDto);
-                        break;
-                    case 16:
-                        list5.add(lightTaskDto);
-                        break;
-                    case 32:
-                        list6.add(lightTaskDto);
-                        break;
-                    case 64:
-                        list7.add(lightTaskDto);
-                        break;
-                    default:
-                }
-            }
-        }
-
-        Integer currentWeekValue = now.getDayOfWeek().getValue();
-        Map map;
-        List<Map> temp = new ArrayList<>();
-        //鑾峰彇褰撳墠鏃ユ湡  鏍煎紡涓簓yyy-MM-dd
-        LocalDateTime localDateTime = now.with(LocalTime.MIN);
-
-
-        for (int i = 1; i < 8; i++) {
-            currentWeekValue--;
-            if (currentWeekValue < 1) {
-                currentWeekValue = 7;
-            }
-            map = new LinkedHashMap();
-            map.put("time", localDateTime.minusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-            map.put("value", getlistEnergy(currentWeekValue));
-            temp.add(map);
-        }
-
-
-        return temp;
-    }
-
 
     public BigDecimal getlist(Integer week) {
 
@@ -488,9 +379,6 @@
 
     public BigDecimal getlistEnergy(Integer week) {
 
-        Long clientId = SecurityUtils.getClientId();
-//        List<LightBo> listLight = baseMapper.listLight(clientId, null);
-//        List<String> deviceCodeList = listLight.stream().map(LightBo::getDeviceCode).collect(Collectors.toList());
 
         //鑾峰彇鍒版鍦ㄦ墽琛岀殑浠诲姟鍒楄〃
         List<LightTaskDto> lightTaskDtos = SpringContextHolder.getBean(LightTaskService.class).listTask();
@@ -605,12 +493,11 @@
      *
      * @return
      */
-    public BigDecimal jisuan(LightTaskDto Task) {
+    public BigDecimal jisuan(LightTaskDto Task, LightTaskPoleRelation bean) {
         final BigDecimal[] bigDecimalResult = {new BigDecimal(0.00)};
         /**
          * 鑺傝兘鐜囪绠楀紑濮�
          */
-        //TODO
         //鑾峰彇鏄ㄥぉ鐨勬槦鏈熸暟
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime yesterday = now.minusDays(1);
@@ -619,10 +506,10 @@
         //鍒ゆ柇Task.getWeekList()鏄惁鍖呭惈鏄ㄥぉ鐨勬槦鏈熸暟   涓嶅寘鍚洿鎺ヨ繑鍥�0  涓嶈繘琛岃绠�
         if (Task.getWeekList() != null && !Task.getWeekList().isEmpty()) {
             if (!Task.getWeekList().contains(week)) {
-                return BigDecimal.ZERO;
+                return new BigDecimal(1);
             }
         } else {
-            return BigDecimal.ZERO;
+            return new BigDecimal(1);
         }
 
 
@@ -727,10 +614,11 @@
     /**
      * 涓�澶╃殑鑳借��
      *
-     * @param list
+     * @param
+     * @param bean
      * @return
      */
-    public BigDecimal jisuanEnergy(LightTaskDto Task) {
+    public BigDecimal jisuanEnergy(LightTaskDto Task, LightTaskPoleRelation bean) {
         //瀛樻斁鑳借��
         final BigDecimal[] bigEnergy = {new BigDecimal(0.00)};
 
@@ -749,9 +637,21 @@
         }
 
         /**
-         * 鑺傝兘鐜囪绠楀紑濮�
+         * 鑳借�楄绠楀紑濮�
          */
-        List<PoleTaskLightPowerBo> poleTaskLightPowerBos = SpringContextHolder.getBean(LightTaskMapper.class).listLightTaskByTaskId(Task.getTaskId());
+//        List<PoleTaskLightPowerBo> poleTaskLightPowerBos = SpringContextHolder.getBean(LightTaskMapper.class).listLightTaskByTaskId(Task.getTaskId());
+        List<PoleTaskLightPowerBo> poleTaskLightPowerBos = new ArrayList<>();
+        PoleTaskLightPowerBo poleTaskLightPowerBo = new PoleTaskLightPowerBo();
+        Light one = getOne(Wrappers.lambdaQuery(Light.class).eq(Light::getDeviceCode, bean.getDeviceCode()));
+
+        if (one != null) {
+            if ("0001".equals(bean.getLightAddress())) {
+                poleTaskLightPowerBo.setPower1(one.getPower1());
+            } else {
+                poleTaskLightPowerBo.setPower2(one.getPower2());
+            }
+        }
+        poleTaskLightPowerBos.add(poleTaskLightPowerBo);
         ControlLightCommandVO startTime = parseSwitchLightCommand(Task.getOpenOrder());
         ControlLightCommandVO endTime = parseSwitchLightCommand(Task.getCloseOrder());
         //鑾峰彇鍒板崟鐏换鍔$殑鑺傝兘鐜�
@@ -870,7 +770,7 @@
 //        BigDecimal hour = BigDecimal.valueOf((v2.getHour() - v1.getHour()));
 //        BigDecimal hour;
         if (v1.getBrightness() == 0) {
-            return BigDecimal.ZERO;
+            return new BigDecimal(1);
         }
         double hour;
         double min;
@@ -962,16 +862,31 @@
     }
 
     /**
+     * 鐢ㄦ埛鎷ユ湁鐨勮矾鐏�(鐢ㄤ簬棣栭〉鏁版嵁缁熻)
+     *
+     * @return
+     */
+    public List<LightBo> listLightOnHome() {
+        List<LightBo> listLight;
+        if (SecurityUtils.getClientId() != null) {
+            listLight = baseMapper.listLight(SecurityUtils.getUserId(), null);
+        } else {
+            listLight = baseMapper.listLight(null, null);
+        }
+        return listLight;
+    }
+
+    /**
      * 鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鐮�
      */
-    public CommonPage<String> listDeviceCode(int pageNo, int pageSize, String keyword, String deviceCode) {
+    public CommonPage<String> listDeviceCode(int pageNo, int pageSize, String keyword, String deviceCode, String orderBy) {
         List<String> list;
         if (SecurityUtils.getClientId() != null) {
             PageHelper.startPage(pageNo, pageSize);
             list = baseMapper.listCode(SecurityUtils.getUserId(), keyword, deviceCode);
         } else {
 
-            PageHelper.startPage(pageNo, pageSize);
+            PageHelper.startPage(pageNo, pageSize, orderBy);
             list = baseMapper.listCode(null, keyword, deviceCode);
         }
 
@@ -986,8 +901,64 @@
         lights.forEach(light -> {
             light.setPower1(lightPowerSettingParam.getPower1());
             light.setPower2(lightPowerSettingParam.getPower2());
+            //瀛樺湪闈�0鍔熺巼  鍗充负瀛樺湪璇ョ伅澶�
+            if (lightPowerSettingParam.getPower1() != null || lightPowerSettingParam.getPower1() != 0) {
+                light.setLight1(1);
+            } else if (lightPowerSettingParam.getPower1() == 0) {
+                //鎵嬪姩璁剧疆鐏ご鍔熺巼涓�0  鍗充笉瀛樺湪璇ョ伅澶�
+                light.setLight1(0);
+            } else {
+                light.setLight1(0);
+            }
+            //瀛樺湪闈�0鍔熺巼  鍗充负瀛樺湪璇ョ伅澶�
+            if (lightPowerSettingParam.getPower2() != null || lightPowerSettingParam.getPower2() != 0) {
+                light.setLight2(1);
+            } else if (lightPowerSettingParam.getPower2() == 0) {
+                //鎵嬪姩璁剧疆鐏ご鍔熺巼涓�0  鍗充笉瀛樺湪璇ョ伅澶�
+                light.setLight2(0);
+            } else {
+                light.setLight2(0);
+            }
             light.setLightCount(lightPowerSettingParam.getLightCount());
         });
         return updateBatchById(lights);
     }
+
+
+    /**
+     * 鍚慠edis涓瓨鍏ヨ澶囩姸鎬�
+     */
+    public void setCacheData() {
+
+        List<String> collect = list().stream().map(Light::getDeviceCode).collect(Collectors.toList());
+        List<List<String>> split = CollectionUtil.split(collect, 100);
+
+        List<BatchGetDeviceStateResponse.DeviceStatus> deviceStatuses = null;
+        List<RedisDeviceStatus> statusList = null;
+        for (List<String> splist : split) {
+            deviceStatuses = MainBoardInvokeSyncService.getInstance().batchGetDeviceState(splist);
+            if (deviceStatuses != null) {
+                for (BatchGetDeviceStateResponse.DeviceStatus deviceStatus : deviceStatuses) {
+                    RedisDeviceStatus device = new RedisDeviceStatus();
+                    device.setDeviceId(deviceStatus.getDeviceName());
+                    if ("ONLINE".equals(deviceStatus.getStatus())) {
+                        device.setStatus(0);
+                    } else if ("OFFLINE".equals(deviceStatus.getStatus())) {
+                        device.setStatus(1);
+                    } else {
+                        device.setStatus(2);
+                    }
+                    statusList.add(device);
+                }
+
+            }
+        }
+
+        statusList.forEach(status -> {
+            redisUtils.set(DeviceRedisKey.LIGHT_DEVICE + status.getDeviceId(), status);
+        });
+
+    }
+
+
 }

--
Gitblit v1.9.3