Jelajahi Sumber

灯控一天内亮灯时长统计图数据

zhj 10 bulan lalu
induk
melakukan
e88b606e56

+ 15 - 0
src/main/java/com/welampiot/controller/LampController.java

@@ -1834,4 +1834,19 @@ public class LampController {
         }
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS, version, lampLogVO);
     }
+
+    /**
+     * 灯控亮灯时长统计
+     */
+    @RequestMapping(value = "/getLampLightTimeList", method = RequestMethod.POST)
+    public BaseResult<?> getLampLightTime(LampVO lampVO) {
+        Integer version = lampVO.getVersion();
+        if (lampVO.getId() == null || lampVO.getId() == 0)
+            return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR, version);
+
+        LampInfoLogDTO beforeDTO = lampInfoLogService.getBeforeTodayLampInfoLog(lampVO.getId());
+        int lightTime = beforeDTO == null ? 0 : beforeDTO.getWorkTimeTotal();
+        LampLogVO lampLogVO = lampInfoLogService.getNowDayLightTimeLogList(lampVO.getId(), lightTime);
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS, version, lampLogVO);
+    }
 }

+ 1 - 0
src/main/java/com/welampiot/dao/LampInfoLogDao.java

@@ -20,4 +20,5 @@ public interface LampInfoLogDao {
     List<LampInfoLogDTO> getList(LampInfoLogDTO dto);
     LampInfoLogDTO getNowDayLampInfoLog(@Param("lampId") Integer lampId);
     LampInfoLogDTO getBeforeTodayLampInfoLog(@Param("lampId") Integer lampId);
+    List<LampInfoLogDTO> getNowDayLampInfoLogList(@Param("lampId") Integer lampId);
 }

+ 1 - 0
src/main/java/com/welampiot/service/LampInfoLogService.java

@@ -19,4 +19,5 @@ public interface LampInfoLogService {
     List<LampInfoLogDTO> getList(LampInfoLogDTO dto);
     LampInfoLogDTO getNowDayLampInfoLog(Integer lampId);
     LampInfoLogDTO getBeforeTodayLampInfoLog(Integer lampId);
+    LampLogVO getNowDayLightTimeLogList(Integer lampId, Integer lastLightTime);
 }

+ 102 - 0
src/main/java/com/welampiot/service/impl/LampInfoLogServiceImpl.java

@@ -3,12 +3,19 @@ package com.welampiot.service.impl;
 import com.welampiot.dao.LampInfoLogDao;
 import com.welampiot.dto.LampInfoLogDTO;
 import com.welampiot.service.LampInfoLogService;
+import com.welampiot.utils.ToolUtils;
 import com.welampiot.vo.AllAlarmInfoLogVO;
 import com.welampiot.vo.LampLogVO;
+import lombok.val;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class LampInfoLogServiceImpl implements LampInfoLogService {
@@ -69,4 +76,99 @@ public class LampInfoLogServiceImpl implements LampInfoLogService {
     public LampInfoLogDTO getBeforeTodayLampInfoLog(Integer lampId) {
         return lampInfoLogDao.getBeforeTodayLampInfoLog(lampId);
     }
+
+    @Override
+    public LampLogVO getNowDayLightTimeLogList(Integer lampId, Integer lastLightTime) {
+        List<LampInfoLogDTO> logList = lampInfoLogDao.getNowDayLampInfoLogList(lampId);
+
+        // 按时间分组,取每一个小时最后一个
+        Map<LocalDateTime, LampInfoLogDTO> logs = logList.stream()
+                .collect(Collectors.toMap(
+                        log -> parseLocalDateTime(log.getUpdateTime()),
+                        log -> log,
+                        (existing, replacement) -> existing.getUpdateTime().compareTo(replacement.getUpdateTime()) > 0 ? existing : replacement));
+
+        // 初始化 dataList 和 dateList
+        List<Object> dataList = new ArrayList<>();
+        List<Object> dateList = new ArrayList<>();
+
+        String nowTime = ToolUtils.getNowTime();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime first = parseLocalDateTime(nowTime).withHour(0);
+        LocalDateTime end = parseLocalDateTime(nowTime).withHour(23);
+
+        Integer lightTime = lastLightTime;
+        for (LocalDateTime time = first; time.isBefore(end); time = time.plusHours(1)) {
+            LampInfoLogDTO current = logs.get(time);
+
+            if (current != null) {
+                int value = current.getWorkTimeTotal() - lightTime;
+                if (value < 0) value = current.getWorkTimeTotal();
+                dataList.add(value);
+                lightTime = current.getWorkTimeTotal();
+            } else {
+                dataList.add(0);
+            }
+            String timeStr = time.format(formatter);
+            dateList.add(timeStr);
+        }
+
+        LampLogVO lampLogVO = new LampLogVO();
+        lampLogVO.setDateList(dateList);
+        lampLogVO.setDataList(dataList);
+        return lampLogVO;
+    }
+
+    private static LocalDateTime parseLocalDateTime(String dateStr) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return LocalDateTime.parse(dateStr, formatter).withMinute(0).withSecond(0);
+    }
+
+    public static void main(String[] args) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        String nowTime = "2024-12-13 14:01:15"; // 假设这是你从 ToolUtils.getNowTime() 获取的时间字符串
+        LocalDateTime first = parseLocalDateTime(nowTime).withHour(0);
+        LocalDateTime end = parseLocalDateTime(nowTime).withHour(23);
+        System.out.println("first = " + first.format(formatter));
+        System.out.println("end = " + end.format(formatter));
+        System.out.println("first = " + first.minusHours(1).format(formatter));
+
+        List<LampInfoLogDTO> list = new ArrayList<>();
+        val lampInfoLogDTO = new LampInfoLogDTO();
+        lampInfoLogDTO.setUpdateTime("2024-12-13 08:12:25");
+        lampInfoLogDTO.setWorkTimeTotal(234);
+
+        val lampInfoLogDTO1 = new LampInfoLogDTO();
+        lampInfoLogDTO1.setUpdateTime("2024-12-13 08:38:56");
+        lampInfoLogDTO1.setWorkTimeTotal(236);
+
+        val lampInfoLogDTO2 = new LampInfoLogDTO();
+        lampInfoLogDTO2.setUpdateTime("2024-12-13 10:12:25");
+        lampInfoLogDTO2.setWorkTimeTotal(238);
+
+        val lampInfoLogDTO3 = new LampInfoLogDTO();
+        lampInfoLogDTO3.setUpdateTime("2024-12-13 11:12:25");
+        lampInfoLogDTO3.setWorkTimeTotal(239);
+
+        val lampInfoLogDTO4 = new LampInfoLogDTO();
+        lampInfoLogDTO4.setUpdateTime("2024-12-13 12:22:23");
+        lampInfoLogDTO4.setWorkTimeTotal(240);
+
+        val lampInfoLogDTO5 = new LampInfoLogDTO();
+        lampInfoLogDTO5.setUpdateTime("2024-12-13 12:45:25");
+        lampInfoLogDTO5.setWorkTimeTotal(241);
+        list.add(lampInfoLogDTO);
+        list.add(lampInfoLogDTO1);
+        list.add(lampInfoLogDTO2);
+        list.add(lampInfoLogDTO3);
+        list.add(lampInfoLogDTO4);
+        list.add(lampInfoLogDTO5);
+
+        Map<LocalDateTime, LampInfoLogDTO> logs = list.stream()
+                .collect(Collectors.toMap(
+                        log -> parseLocalDateTime(log.getUpdateTime()),
+                        log -> log,
+                        (existing, replacement) -> existing.getUpdateTime().compareTo(replacement.getUpdateTime()) > 0 ? existing : replacement));
+        System.out.println("logs = " + logs);
+    }
 }

+ 1 - 0
src/main/java/com/welampiot/vo/LampLogVO.java

@@ -16,6 +16,7 @@ public class LampLogVO {
     private String endDate;
 
     private List dateList;
+    private List<Object> dataList;
     private List volList;
     private List curList;
     private List powerList;

+ 8 - 1
src/main/resources/mapper/LampInfoLogMapper.xml

@@ -156,7 +156,7 @@
 
     <!--  获取当天最新的日志  -->
     <select id="getNowDayLampInfoLog" resultType="LampInfoLogDTO">
-        SELECT l.ne_work_time_total AS lightTime,l.updatetime AS updateTime
+        SELECT l.work_time_total AS workTimeTotal,l.updatetime AS updateTime
         FROM lamp_info_log l
         WHERE l.lampid = #{lampId} AND DATE(l.updatetime) = CURDATE()
         ORDER BY l.updatetime DESC
@@ -171,4 +171,11 @@
         LIMIT 1
     </select>
 
+    <select id="getNowDayLampInfoLogList" resultType="LampInfoLogDTO">
+        SELECT l.work_time_total AS workTimeTotal,l.updatetime AS updateTime
+        FROM lamp_info_log l
+        WHERE l.lampid = #{lampId} AND DATE(l.updatetime) = CURDATE()
+        ORDER BY l.updatetime
+    </select>
+
 </mapper>

+ 33 - 0
src/main/resources/mapper/LampInfoLogNewMapper.xml

@@ -90,4 +90,37 @@
         limit 1
     </select>
 
+    <select id="getTodayAllLampLogData" resultType="LampInfoLogNewDTO">
+        SELECT
+            SUM( l.used_energy_tonight ) AS usedEnergyTonight,
+            SUM( l.work_time_tonight ) AS workTimeTonight
+        FROM
+            lamp_info_log_new l
+        LEFT JOIN lampinfo l1 ON l.lampid = l1.id
+        LEFT JOIN section s ON s.id = l1.sectionid
+        LEFT JOIN global_location a ON a.id = s.pid
+        LEFT JOIN global_location b ON b.id = a.pid
+        LEFT JOIN global_location c ON c.id = b.pid
+        WHERE 1=1
+        <if test="sectionId != null and sectionId != 0">
+            and s.id = #{sectionId}
+        </if>
+        <if test="areaId != null and areaId != 0">
+            and a.id = #{areaId}
+        </if>
+        <if test="cityId != null and cityId != 0">
+            and b.id = #{cityId}
+        </if>
+        <if test="provinceId != null and provinceId != 0">
+            and d.id = #{provinceId}
+        </if>
+        <if test="sectionList != null and !sectionList.isEmpty()">
+            and l1.sectionid in
+            <foreach collection="sectionList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        AND DATE(l.updatetime) = CURDATE()
+    </select>
+
 </mapper>