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

云盒列表:输出统计

zhj 2 роки тому
батько
коміт
446296ba1c

+ 169 - 12
src/main/java/com/welampiot/controller/NewLampPoleController.java

@@ -199,23 +199,180 @@ public class NewLampPoleController {
      * @return
      */
     @RequestMapping(value = "/wifiOutStatistics", method = RequestMethod.POST)
-    public BaseResult<WifiInfoLogDTO> wifiOutStatistics(HttpServletRequest request){
-        Integer id = request.getParameter("id") == null ? 0 : Integer.parseInt(request.getParameter("id"));
-        Integer version = request.getParameter("version") == null ? 0 : Integer.parseInt(request.getParameter("version"));
-        Integer dateType = request.getParameter("dateType") == null ? 0 : Integer.parseInt(request.getParameter("dateType"));
-        Integer date = request.getParameter("date") == null ? 0 : Integer.parseInt(request.getParameter("date"));
-        Integer dataType = request.getParameter("dataType") == null ? 0 : Integer.parseInt(request.getParameter("dataType"));
-
+    public BaseResult wifiOutStatistics(HttpServletRequest request) throws ParseException {
+        int version = request.getParameter("version") == null ? 0 : Integer.parseInt(request.getParameter("version"));
+        int id = request.getParameter("id") == null ? 0 : Integer.parseInt(request.getParameter("id"));
+        if (id == 0) return toolUtils.response(InterfaceResultEnum.LACK_PARAM_ERROR,version);
+        int dateType = request.getParameter("dateType") == null ? 0 : Integer.parseInt(request.getParameter("dateType"));
+        int dataType = request.getParameter("dataType") == null ? 0 : Integer.parseInt(request.getParameter("dataType"));
         WifiInfoLogDTO dto = new WifiInfoLogDTO();
         dto.setWifiId(id);
-        dto.setDateType(dateType);
-        dto.setDate(date);
         dto.setDataType(dataType);
         dto.setSectionList(toolUtils.getSectionList(request));
+        Integer timezone = wifiInfoLogService.getTimezoneById(dto);
+        if (timezone == null) return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version);
+        long l = System.currentTimeMillis() - timezone * 3600 * 1000;
+        long startTime = 0L;
+        long endTime = 0L;
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (dateType == 0){  // 1 天
+            startTime = l - 24 * 3600 * 1000;
+            endTime = l;
+        }else if (dateType == 1){ // 3 天
+            startTime = l - 24 * 3600 * 1000 * 3;
+            endTime = l;
+        }else if (dateType == 2){ // 7 天
+            startTime = l - 24 * 3600 * 1000 * 7;
+            endTime = l;
+        }else if (dateType == 3){ // 14 天
+            startTime = l - 24 * 3600 * 1000 * 14;
+            endTime = l;
+        }else if (dateType == 4){ // 日期选择 最多30天
+            String date = (String) toolUtils.getRequestContent(request,"date",2);
+            if (date.length() == 0) return toolUtils.response(InterfaceResultEnum.LACK_DATE_ERROR,version);
+            List<String> split = Arrays.asList(date.split("/"));
+            System.out.println(split);
+            System.out.println(split.get(0));
+            System.out.println(split.get(1));
+            try {
+                startTime = simpleDateFormat.parse(split.get(0) + " 00:00:00").getTime();
+            } catch (ParseException e) {
+                throw new RuntimeException(e);
+            }
+            endTime = simpleDateFormat.parse(split.get(1) + " 23:59:59").getTime();
+            if (endTime < startTime) toolUtils.response(InterfaceResultEnum.LACK_DATE_FORMAT_ERROR,version);
+            if (endTime - startTime > 29L * 24 * 3600 * 1000) toolUtils.response(InterfaceResultEnum.LACK_DATE_RANGE_ERROR,version);
+            startTime -= timezone * 3600 * 1000;
+            endTime -= timezone * 3600 * 1000;
+        }
 
-        WifiInfoLogVO vo = wifiInfoLogService.getWifiOutStatisticsByDTO(dto);
-        if (vo == null) return toolUtils.response(InterfaceResultEnum.PARAM_FAIL,version);
-        return BaseResult.success(vo);
+        HashMap<String, Integer> objectObjectHashMap = new HashMap<>();
+        long timeT = startTime;
+        int i = 0;
+
+        List<Object> dateList = new ArrayList<>();
+        List<Object> volList = new ArrayList<>();
+        List<Object> curList = new ArrayList<>();
+        List<Object> powerList = new ArrayList<>();
+        List<Object> comList = new ArrayList<>();
+        List<WifiInfoLogDTO> list = new ArrayList<>();
+        simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:00:00");
+        while (timeT < endTime){
+            objectObjectHashMap.put(simpleDateFormat.format(new Date(timeT)),i);
+            dateList.add(simpleDateFormat.format(new Date(timeT + timezone * 3600 * 1000)));
+            volList.add(0);
+            powerList.add(0);
+            comList.add(0);
+            curList.add(0);
+            list.add(null);
+            timeT += 3600 * 1000;
+            i ++;
+        }
+        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String startDate = simpleDateFormat.format(new Date(startTime));
+        String endDate = simpleDateFormat.format(new Date(endTime));
+        dto.setStartDate(startDate);
+        dto.setEndDate(endDate);
+        List<WifiInfoLogDTO> wifiOutStatisticsByDTO = wifiInfoLogService.getWifiOutStatisticsByDTO(dto);
+        for (WifiInfoLogDTO wifiInfoLogDTO : wifiOutStatisticsByDTO) {
+            Date date = new Date(simpleDateFormat2.parse(wifiInfoLogDTO.getUpdateTime()).getTime());
+            String s = simpleDateFormat.format(date);
+            if (objectObjectHashMap.containsKey(s)){
+                Integer integer = objectObjectHashMap.get(s);
+                list.set(integer,wifiInfoLogDTO);
+            }
+        }
+
+        for (WifiInfoLogDTO wifiInfoLogDTO : list) {
+            if (wifiInfoLogDTO != null){
+                Date date = new Date(simpleDateFormat2.parse(wifiInfoLogDTO.getUpdateTime()).getTime());
+                String s = simpleDateFormat.format(date);
+                Integer integer = null;
+                if (objectObjectHashMap.containsKey(s)){
+                    integer = objectObjectHashMap.get(s);
+                    list.set(integer,wifiInfoLogDTO);
+                }
+                if (dto.getDataType() != null){
+                    switch (dto.getDataType()){
+                        case 5:
+                            if (wifiInfoLogDTO.getCurrentC() != null && !wifiInfoLogDTO.getCurrentC().equals("0") && integer != null) {
+                                curList.set(integer, Float.valueOf(wifiInfoLogDTO.getCurrentC()));
+                            }
+                            if (wifiInfoLogDTO.getVoltageC() != null && !wifiInfoLogDTO.getVoltageC().equals("0") && integer != null) {
+                                volList.set(integer, Float.valueOf(wifiInfoLogDTO.getVoltageC()));
+                            }
+                            if (wifiInfoLogDTO.getPowerC() != null && !wifiInfoLogDTO.getPowerC().equals("0")&& integer != null) {
+                                powerList.set(integer, Float.valueOf(wifiInfoLogDTO.getPowerC()));
+                            }
+                            if (wifiInfoLogDTO.getTotalComC() != null && !wifiInfoLogDTO.getTotalComC().equals("0") && integer != null) {
+                                comList.set(integer, Float.valueOf(wifiInfoLogDTO.getTotalComC()));
+                            }
+                            break;
+                        case 4:
+                            if (wifiInfoLogDTO.getCurrentB() != null && !wifiInfoLogDTO.getCurrentB().equals("0") && integer != null) {
+                                curList.set(integer, Float.valueOf(wifiInfoLogDTO.getCurrentB()));
+                            }
+                            if (wifiInfoLogDTO.getVoltageB() != null && !wifiInfoLogDTO.getVoltageB().equals("0") && integer != null) {
+                                volList.set(integer, Float.valueOf(wifiInfoLogDTO.getVoltageB()));
+                            }
+                            if (wifiInfoLogDTO.getPowerB() != null && !wifiInfoLogDTO.getPowerB().equals("0") && integer != null) {
+                                powerList.set(integer, Float.valueOf(wifiInfoLogDTO.getPowerB()));
+                            }
+                            if (wifiInfoLogDTO.getTotalComB() != null &&! wifiInfoLogDTO.getTotalComB().equals("0") && integer != null) {
+                                comList.set(integer, Float.valueOf(wifiInfoLogDTO.getTotalComB()));
+                            }
+                            break;
+                        case 3 :
+                            if (wifiInfoLogDTO.getLna3Cur() != null && !wifiInfoLogDTO.getLna3Cur().equals("0") && integer != null){
+                                curList.set(integer,Float.valueOf(wifiInfoLogDTO.getLna3Cur()));
+                            }
+                            if (wifiInfoLogDTO.getLna3Vol() != null && !wifiInfoLogDTO.getLna3Vol().equals("0") && integer != null){
+                                volList.set(integer,Float.valueOf(wifiInfoLogDTO.getLna3Vol()));
+                            }
+                            break;
+                        case 2 :
+                            if (wifiInfoLogDTO.getLna2Cur() != null && !wifiInfoLogDTO.getLna2Cur().equals("0") && integer != null){
+                                curList.set(integer,Float.valueOf(wifiInfoLogDTO.getLna2Cur()));
+                            }
+                            if (wifiInfoLogDTO.getLna2Vol() != null && !wifiInfoLogDTO.getLna2Vol().equals("0") && integer != null){
+                                volList.set(integer,Float.valueOf(wifiInfoLogDTO.getLna2Vol()));
+                            }
+                            break;
+                        case 1 :
+                            if (wifiInfoLogDTO.getLna1Cur() != null && !wifiInfoLogDTO.getLna1Cur().equals("0") && integer != null){
+                                curList.set(integer,Float.valueOf(wifiInfoLogDTO.getLna1Cur()));
+                            }
+                            if (wifiInfoLogDTO.getLna1Vol() != null && !wifiInfoLogDTO.getLna1Vol().equals("0") && integer != null){
+                                volList.set(integer,Float.valueOf(wifiInfoLogDTO.getLna1Vol()));
+                            }
+                            break;
+                        case 0 :
+                            if (wifiInfoLogDTO.getCurrent() != null && !wifiInfoLogDTO.getCurrent().equals("0") && integer != null){
+                                curList.set(integer,Float.valueOf(wifiInfoLogDTO.getCurrent()));
+                            }
+                            if (wifiInfoLogDTO.getVoltage() != null && !wifiInfoLogDTO.getVoltage().equals("0") && integer != null){
+                                volList.set(integer,Float.valueOf(wifiInfoLogDTO.getVoltage()));
+                            }
+                            if (wifiInfoLogDTO.getPower() != null && !wifiInfoLogDTO.getPower().equals("0") && integer != null){
+                                powerList.set(integer,Float.valueOf(wifiInfoLogDTO.getPower()));
+                            }
+                            if (wifiInfoLogDTO.getTotalComA() != null && !wifiInfoLogDTO.getTotalComA().equals("0") && integer != null){
+                                comList.set(integer,Float.valueOf(wifiInfoLogDTO.getTotalComA()));
+                            }
+                            break;
+                    }
+                }
+                date = new Date(simpleDateFormat2.parse(wifiInfoLogDTO.getUpdateTime()).getTime() + timezone * 3600 * 1000);
+                wifiInfoLogDTO.setUpdateTime(simpleDateFormat.format(date));
+            }
+        }
+        WifiInfoLogVO wifiInfoLogVO = new WifiInfoLogVO();
+        wifiInfoLogVO.setCurArr(curList);
+        wifiInfoLogVO.setVolArr(volList);
+        wifiInfoLogVO.setPowerArr(powerList);
+        wifiInfoLogVO.setDateArr(dateList);
+        wifiInfoLogVO.setComArr(comList);
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,wifiInfoLogVO);
     }
 
     /**

+ 5 - 1
src/main/java/com/welampiot/dao/WifiInfoLogDao.java

@@ -2,6 +2,8 @@ package com.welampiot.dao;
 
 import com.welampiot.dto.WifiInfoLogDTO;
 
+import java.util.List;
+
 /**
  * ClassName: WifiInfoLogDao
  * Package: com.welampiot.dao
@@ -12,5 +14,7 @@ import com.welampiot.dto.WifiInfoLogDTO;
  * @Version: v1.0
  */
 public interface WifiInfoLogDao {
-    WifiInfoLogDTO getWifiOutStatisticsByDTO(WifiInfoLogDTO dto);
+    List<WifiInfoLogDTO> getWifiOutStatisticsByDTO(WifiInfoLogDTO dto);
+
+    Integer getTimezoneById(WifiInfoLogDTO dto);
 }

+ 26 - 22
src/main/java/com/welampiot/dto/WifiInfoLogDTO.java

@@ -26,73 +26,73 @@ public class WifiInfoLogDTO implements Serializable {
     private Integer deviceCount;
 
     /** 使用流量数 **/
-    private Float flow;
+    private String flow;
 
     /** 数据更新时间 **/
     private String updateTime;
 
     /** 当天使用流量 **/
-    private Float dayFlow;
+    private String dayFlow;
 
     /** 当天设备连接数 **/
     private Integer dayDeviceCount;
 
     /** 累计使用流量 **/
-    private Double totalCom;
+    private String totalCom;
 
     /** 220v输入电压 **/
-    private Float voltage;
+    private String voltage;
 
     /** 220v输入电流 **/
-    private Float current;
+    private String current;
 
     /** 220v输入功率 **/
-    private Float power;
+    private String power;
 
     /** DC24V输出电压 **/
-    private Float lna1Vol;
+    private String lna1Vol;
 
     /** DC24V输出电流 **/
-    private Float lna1Cur;
+    private String lna1Cur;
 
     /** DC12V1路输出电压 **/
-    private Float lna2Vol;
+    private String lna2Vol;
 
     /** DC12V1路输出电流 **/
-    private Float lna2Cur;
+    private String lna2Cur;
 
     /** DC12V2路输出电压 **/
-    private Float lna3Vol;
+    private String lna3Vol;
 
     /** DC12V2路输出电流 **/
-    private Float lna3Cur;
+    private String lna3Cur;
 
     /** 220V B路电压 **/
-    private Float voltageB;
+    private String voltageB;
 
     /** 220V B路电流 **/
-    private Float currentB;
+    private String currentB;
 
     /** 220V B路功率(WH) **/
-    private Float powerB;
+    private String powerB;
 
     /** 220V C路电压 **/
-    private Float voltageC;
+    private String voltageC;
 
     /** 220V C路电流 **/
-    private Float currentC;
+    private String currentC;
 
     /** 220V C路功率(WH) **/
-    private Float powerC;
+    private String powerC;
 
     /** 222V A路累计用电量kWh **/
-    private Float totalComA;
+    private String totalComA;
 
     /** 222V B路累计用电量kWh **/
-    private Float totalComB;
+    private String totalComB;
 
     /** 222V C路累计用电量kWh **/
-    private Float totalComC;
+    private String totalComC;
 
     /** 时间类型(0 一天,1 三天,2 七天,3 14天,4 时间范围,不能超过30天)**/
     private Integer dateType;
@@ -104,7 +104,11 @@ public class WifiInfoLogDTO implements Serializable {
     private Integer dataType;
 
     /** 获取路段id **/
-    private List<WifiInfoLogDTO> sectionList;
+    private List<Integer> sectionList;
+
+    private String startDate;
+
+    private String endDate;
 
     private static final long serialVersionUID = 1L;
 }

+ 5 - 2
src/main/java/com/welampiot/service/WifiInfoLogService.java

@@ -1,7 +1,8 @@
 package com.welampiot.service;
 
 import com.welampiot.dto.WifiInfoLogDTO;
-import com.welampiot.vo.WifiInfoLogVO;
+
+import java.util.List;
 
 /**
  * ClassName: WifiInfoLogService
@@ -13,5 +14,7 @@ import com.welampiot.vo.WifiInfoLogVO;
  * @Version: v1.0
  */
 public interface WifiInfoLogService {
-    WifiInfoLogVO getWifiOutStatisticsByDTO(WifiInfoLogDTO dto);
+    List<WifiInfoLogDTO> getWifiOutStatisticsByDTO(WifiInfoLogDTO dto);
+
+    Integer getTimezoneById(WifiInfoLogDTO dto);
 }

+ 9 - 38
src/main/java/com/welampiot/service/impl/WifiInfoLogServiceImpl.java

@@ -3,10 +3,11 @@ package com.welampiot.service.impl;
 import com.welampiot.dao.WifiInfoLogDao;
 import com.welampiot.dto.WifiInfoLogDTO;
 import com.welampiot.service.WifiInfoLogService;
-import com.welampiot.vo.WifiInfoLogVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * ClassName: WifiInfoLogServiceImpl
  * Package: com.welampiot.service.impl
@@ -23,42 +24,12 @@ public class WifiInfoLogServiceImpl implements WifiInfoLogService {
     private WifiInfoLogDao wifiInfoLogDao;
 
     @Override
-    public WifiInfoLogVO getWifiOutStatisticsByDTO(WifiInfoLogDTO dto) {
-        WifiInfoLogVO vo = new WifiInfoLogVO();
-        WifiInfoLogDTO dto1 = wifiInfoLogDao.getWifiOutStatisticsByDTO(dto);
-        if (dto1 == null) return null;
-        switch (dto.getDataType()){
-            case 1 :
-                vo.getVolArr().add(dto1.getLna1Vol());
-                vo.getCurArr().add(dto1.getLna1Cur());
-                vo.getPowerArr().add(0.0f);
-                break;
-            case 2 :
-                vo.getVolArr().add(dto1.getLna2Vol());
-                vo.getCurArr().add(dto1.getLna2Cur());
-                vo.getPowerArr().add(0.0f);
-                break;
-            case 3 :
-                vo.getVolArr().add(dto1.getLna3Vol());
-                vo.getCurArr().add(dto1.getLna3Cur());
-                vo.getPowerArr().add(0.0f);
-                break;
-            case 4 :
-                vo.getVolArr().add(dto1.getVoltageB());
-                vo.getCurArr().add(dto1.getCurrentB());
-                vo.getPowerArr().add(dto1.getPowerB());
-                break;
-            case 5 :
-                vo.getVolArr().add(dto1.getVoltageC());
-                vo.getCurArr().add(dto1.getCurrentC());
-                vo.getPowerArr().add(dto1.getPowerC());
-                break;
-            default:
-                vo.getVolArr().add(dto1.getVoltage());
-                vo.getCurArr().add(dto1.getCurrent());
-                vo.getPowerArr().add(dto1.getPower());
-                break;
-        }
-        return vo;
+    public List<WifiInfoLogDTO> getWifiOutStatisticsByDTO(WifiInfoLogDTO dto) {
+        return wifiInfoLogDao.getWifiOutStatisticsByDTO(dto);
+    }
+
+    @Override
+    public Integer getTimezoneById(WifiInfoLogDTO dto) {
+        return wifiInfoLogDao.getTimezoneById(dto);
     }
 }

+ 5 - 5
src/main/java/com/welampiot/vo/WifiInfoLogVO.java

@@ -17,17 +17,17 @@ import java.util.List;
 @Data
 public class WifiInfoLogVO implements Serializable {
     /** 时间 **/
-    private List<String> dateArr;
+    private List<Object> dateArr;
 
     /** 电压 **/
-    private List<Float> volArr;
+    private List<Object> volArr;
 
     /** 电流 **/
-    private List<Float> curArr;
+    private List<Object> curArr;
 
     /** 功率 **/
-    private List<Float> powerArr;
+    private List<Object> powerArr;
 
     /** 用电量 **/
-    private List<Float> comArr;
+    private List<Object> comArr;
 }

+ 58 - 11
src/main/resources/mapper/WifiInfoLogMapper.xml

@@ -2,19 +2,66 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.welampiot.dao.WifiInfoLogDao">
 
+<!--    <select id="getWifiOutStatisticsByDTO" resultType="WifiInfoLogDTO">-->
+<!--        select w.updatetime as updateTime,w.voltage,w.current,w.power,w.lna1_cur lna1Cur,w.lna1_vol lna1Vol,-->
+<!--               w.lna2_cur lna2Cur,w.lna2_vol lna2Vol,w.lna3_cur lna3Cur,w.lna3_vol lna3Vol,w.voltageB,w.currentB,-->
+<!--               w.powerB,w.voltageC,w.currentC,w.powerC,w.total_comA totalComA,w.total_comB totalComB,w.total_comC totalComC-->
+<!--        from wifi_info_log w left join wifi on w.wifiid = wifi.id-->
+<!--            left join lamp_pole lp on wifi.lamp_pole_id = lp.id-->
+<!--        where w.wifiid = #{wifiId}-->
+<!--            <if test="sectionList != null and !sectionList.isEmpty()">-->
+<!--                and lp.sectionid in-->
+<!--                <foreach collection="sectionList" item="dto" open="(" separator="," close=")">-->
+<!--                    #{dto}-->
+<!--                </foreach>-->
+<!--            </if>-->
+<!--    </select>-->
+    
     <select id="getWifiOutStatisticsByDTO" resultType="WifiInfoLogDTO">
-        select w.updatetime as updateTime,w.voltage,w.current,w.power,w.lna1_cur lna1Cur,w.lna1_vol lna1Vol,
-               w.lna2_cur lna2Cur,w.lna2_vol lna2Vol,w.lna3_cur lna3Cur,w.lna3_vol lna3Vol,w.voltageB,w.currentB,
-               w.powerB,w.voltageC,w.currentC,w.powerC,w.total_comA totalComA,w.total_comB totalComB,w.total_comC totalComC
-        from wifi_info_log w left join wifi on w.wifiid = wifi.id
-            left join lamp_pole lp on wifi.lamp_pole_id = lp.id
+        select
+            <choose>
+                <when test="dataType == 0">
+                    w.voltage,w.current,w.power,w.total_comA as totalComA,
+                </when>
+                <when test="dataType == 1">
+                    w.lna1_cur as lna1Cur,w.lna1_vol as lna1Vol,
+                </when>
+                <when test="dataType == 2">
+                    w.lna2_cur as lna2Cur,w.lna2_vol as lna2Vol,
+                </when>
+                <when test="dataType == 3">
+                    w.lna3_vol as lna3Vol,w.lna3_cur as lna3Cur,
+                </when>
+                <when test="dataType == 4">
+                    w.voltageB,w.currentB,w.powerB,w.total_comB as totalComB,
+                </when>
+                <when test="dataType == 5">
+                    w.voltageC,w.currentC,w.powerC,w.total_comC as totalComC,
+                </when>
+            </choose>
+            w.updatetime as updateTime
+        from wifi_info_log w
         where w.wifiid = #{wifiId}
-            <if test="sectionList != null and !sectionList.isEmpty()">
-                and lp.sectionid in
-                <foreach collection="sectionList" item="dto" open="(" separator="," close=")">
-                    #{dto}
-                </foreach>
+            <if test="startDate != null and startDate != ''">
+                and updateTime <![CDATA[ >= ]]> #{startDate}
+            </if>
+            <if test="endDate != null and endDate != ''">
+                and updateTime <![CDATA[ <= ]]> #{endDate}
             </if>
+        order by updateTime DESC
     </select>
-    
+
+    <select id="getTimezoneById" resultType="Integer">
+        select s.timezone
+        from wifi w left join lamp_pole lp on lp.id = w.lamp_pole_id
+        left join section s on lp.sectionid = s.id
+        where w.id = #{wifiId}
+        <if test="sectionList != null and !sectionList.isEmpty()">
+            and lp.sectionid in
+            <foreach collection="sectionList" item="dto" open="(" separator="," close=")">
+                #{dto}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>