监测点按运行状态、前置机统计数据

This commit is contained in:
xy
2024-07-26 14:18:47 +08:00
parent 500b6c66bb
commit 2caeb0c264
14 changed files with 843 additions and 24 deletions

View File

@@ -14,6 +14,6 @@ public interface LineDetailMapper extends Mapper<LineDetail> {
List<LineDetailExcelBody> selectAllExcelData();
}

View File

@@ -1,6 +1,7 @@
package com.njcn.mapper.data;
import com.njcn.pojo.commons.SimpleValue;
import com.njcn.pojo.commons.device.LineInfo;
import com.njcn.pojo.commons.runmanage.IntergralityTable;
import com.njcn.pojo.data.Integrity;
import org.apache.ibatis.annotations.Param;
@@ -27,4 +28,6 @@ public interface IntegrityMapper extends Mapper<Integrity> {
List<IntergralityTable> selectIntegrityData(@Param("list") List<Integer> tempIndexs,@Param("startTime")Date startTime,@Param("endTime") Date endTime);
List<IntergralityTable> selectGWIntegrityData(@Param("list") List<Integer> tempIndexs,@Param("startTime")Date startTime,@Param("endTime") Date endTime);
List<LineInfo> getLineInfo(@Param("list") List<Integer> tempIndexs,@Param("postType") Integer postType, @Param("powerId") Integer powerId);
}

View File

@@ -0,0 +1,141 @@
package com.njcn.pojo.commons.runmanage;
import java.io.Serializable;
import java.util.List;
/**
* @author hongawen
* @date: 2024/07/25
*/
public class IntegrityAnalysisData implements Serializable {
private String deptIndex;
private String deptName;
private List<TypeList> typeLists;
private Integer sort;
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public static class TypeList {
private String name;
List<DataList> dataLists;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<DataList> getDataLists() {
return dataLists;
}
public void setDataLists(List<DataList> dataLists) {
this.dataLists = dataLists;
}
}
public static class DataList {
//分类型名称
private String name;
//总监测点个数
private Integer allLineCount;
//投运监测点个数
private Integer runLineCount;
//检修监测点个数
private Integer checkLineCount;
//退运监测点个数
private Integer backLineCount;
public Integer getAllLineCount() {
return allLineCount;
}
public void setAllLineCount(Integer allLineCount) {
this.allLineCount = allLineCount;
}
public Integer getRunLineCount() {
return runLineCount;
}
public void setRunLineCount(Integer runLineCount) {
this.runLineCount = runLineCount;
}
public Integer getCheckLineCount() {
return checkLineCount;
}
public void setCheckLineCount(Integer checkLineCount) {
this.checkLineCount = checkLineCount;
}
public Integer getBackLineCount() {
return backLineCount;
}
public void setBackLineCount(Integer backLineCount) {
this.backLineCount = backLineCount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public String getDeptIndex() {
return deptIndex;
}
public void setDeptIndex(String deptIndex) {
this.deptIndex = deptIndex;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public List<TypeList> getTypeLists() {
return typeLists;
}
public void setTypeLists(List<TypeList> typeLists) {
this.typeLists = typeLists;
}
@Override
public String toString() {
return "IntegrityAnalysisData{" +
"deptIndex='" + deptIndex + '\'' +
", deptName='" + deptName + '\'' +
", typeLists=" + typeLists +
'}';
}
}

View File

@@ -10,6 +10,14 @@ import java.util.List;
*/
public class IntergralityData implements Serializable {
private Integer allOnlineNum;
private Integer allOfflineNum;
private Integer countryOnlineNum;
private Integer countryOfflineNum;
//全网数据完整性数据
private List<IntergralityTable> allNets= new ArrayList<>();
@@ -32,10 +40,46 @@ public class IntergralityData implements Serializable {
this.countryNets = countryNets;
}
public Integer getAllOnlineNum() {
return allOnlineNum;
}
public void setAllOnlineNum(Integer allOnlineNum) {
this.allOnlineNum = allOnlineNum;
}
public Integer getAllOfflineNum() {
return allOfflineNum;
}
public void setAllOfflineNum(Integer allOfflineNum) {
this.allOfflineNum = allOfflineNum;
}
public Integer getCountryOnlineNum() {
return countryOnlineNum;
}
public void setCountryOnlineNum(Integer countryOnlineNum) {
this.countryOnlineNum = countryOnlineNum;
}
public Integer getCountryOfflineNum() {
return countryOfflineNum;
}
public void setCountryOfflineNum(Integer countryOfflineNum) {
this.countryOfflineNum = countryOfflineNum;
}
@Override
public String toString() {
return "IntergralityData{" +
"allNets=" + allNets +
"allOnlineNum=" + allOnlineNum +
", allOfflineNum=" + allOfflineNum +
", countryOnlineNum=" + countryOnlineNum +
", countryOfflineNum=" + countryOfflineNum +
", allNets=" + allNets +
", countryNets=" + countryNets +
'}';
}

View File

@@ -24,6 +24,9 @@ public class IntergralityTable extends OnlineRateData{
private Integer devId;
//所属前置机
private String frontDev;
public Integer getDevId() {
return devId;
}
@@ -96,6 +99,14 @@ public class IntergralityTable extends OnlineRateData{
this.lineId = lineId;
}
public String getFrontDev() {
return frontDev;
}
public void setFrontDev(String frontDev) {
this.frontDev = frontDev;
}
@Override
public String toString() {
return "IntergralityTable{" +
@@ -106,6 +117,9 @@ public class IntergralityTable extends OnlineRateData{
", devFlag='" + devFlag + '\'' +
", status='" + status + '\'' +
", updateTime='" + updateTime + '\'' +
", devType='" + devType + '\'' +
", devId=" + devId +
", frontDev='" + frontDev + '\'' +
'}';
}
}

View File

@@ -29,6 +29,7 @@ import com.njcn.pojo.commons.device.LineInfo;
import com.njcn.pojo.commons.device.SubInfo;
import com.njcn.pojo.commons.device.Tree;
import com.njcn.pojo.commons.device.ValueOfTargetanaly;
import com.njcn.pojo.commons.runmanage.IntegrityAnalysisData;
import com.njcn.pojo.commons.runmanage.IntergralityData;
import com.njcn.pojo.commons.runmanage.IntergralityTable;
import com.njcn.pojo.commons.runmanage.OnlineRateData;
@@ -82,7 +83,7 @@ public interface DeviceService {
List<OnlineRateData> getOnlineRate(Date startTime, Date endTime, String area);
//运行管理--》监测点数据完整性
IntergralityData getDataIntegralityTable(Date startTime, Date endTime, String area,Integer devflag,Integer powerId);
IntergralityData getDataIntegralityTable(Date startTime, Date endTime, String area,Integer devflag,Integer powerId,Integer runFlag);
String getDeviceOnline(Date startTime, Date endTime, Long lineIndex);
@@ -279,5 +280,5 @@ public interface DeviceService {
int updatEventPushLog(String eventDetailIndex,Integer lineId);
List<IntegrityAnalysisData> getStatisticalAnalysis(String startTime, String endTime, String area, Integer postType, Integer powerId);
}

View File

@@ -1,15 +1,18 @@
package com.njcn.serviceimpl.configuration;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.njcn.enums.TerminalLogsEnum;
import com.njcn.mapper.configuration.*;
import com.njcn.mapper.data.*;
import com.njcn.mapper.user.DeptsGdMapper;
import com.njcn.mapper.user.DeptsMapper;
import com.njcn.mapper.user.TransFormerMapper;
import com.njcn.mapper.user.UserMapper;
import com.njcn.pojo.commons.*;
import com.njcn.pojo.commons.area.*;
import com.njcn.pojo.commons.device.*;
import com.njcn.pojo.commons.runmanage.IntegrityAnalysisData;
import com.njcn.pojo.commons.runmanage.IntergralityData;
import com.njcn.pojo.commons.runmanage.IntergralityTable;
import com.njcn.pojo.commons.runmanage.OnlineRateData;
@@ -28,7 +31,6 @@ import com.njcn.utils.*;
import com.njcn.utils.redis.JedisManager;
import com.njcn.utils.redis.RedisCacheUtil;
import net.sf.json.JSONArray;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,7 +48,6 @@ import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -156,7 +157,6 @@ public class DeviceServiceImpl implements DeviceService {
@Resource
private EventPushLogsDetailMapper eventPushLogsDetailMapper;
/**
* 概览--》终端运行状态
*/
@@ -319,7 +319,7 @@ public class DeviceServiceImpl implements DeviceService {
* @param area 区域
*/
@Override
public IntergralityData getDataIntegralityTable(Date startTime, Date endTime, String area,Integer devflag,Integer powerId) {
public IntergralityData getDataIntegralityTable(Date startTime, Date endTime, String area,Integer devflag,Integer powerId,Integer runFlag) {
IntergralityData intergralityData = new IntergralityData();
List<AreaGeneralData> areaGeneralDataList = userUtil.getAreaGeneralRun(devflag,area,powerId);
@@ -328,11 +328,31 @@ public class DeviceServiceImpl implements DeviceService {
return null;
}
//全网监测点的数据完整性
intergralityData.setAllNets(getIntegralityTable(startTime, endTime, lineIndexs));
List<IntergralityTable> list1 = getIntegralityTable(startTime, endTime, lineIndexs);
if (CollUtil.isNotEmpty(list1)){
List<IntergralityTable> offline = list1.stream().filter(item->Objects.equals(Integer.parseInt(item.getStatus()),0)).collect(Collectors.toList());
List<IntergralityTable> online = list1.stream().filter(item->Objects.equals(Integer.parseInt(item.getStatus()),1)).collect(Collectors.toList());
intergralityData.setAllOfflineNum(CollUtil.isNotEmpty(offline)?offline.size():0);
intergralityData.setAllOnlineNum(CollUtil.isNotEmpty(online)?online.size():0);
if (!Objects.isNull(runFlag)){
list1 = Objects.equals(runFlag,0) ? offline : online;
}
}
intergralityData.setAllNets(list1);
//国网监测点
List<Integer> countryLineIndexs = getGwLine(lineIndexs);
if (!CollectionUtils.isEmpty(countryLineIndexs)) {
intergralityData.setCountryNets(getGWIntegralityTable(startTime, endTime, countryLineIndexs));
List<IntergralityTable> list2 = getGWIntegralityTable(startTime, endTime, countryLineIndexs);
if (CollUtil.isNotEmpty(list2)){
List<IntergralityTable> offline = list2.stream().filter(item->Objects.equals(Integer.parseInt(item.getStatus()),0)).collect(Collectors.toList());
List<IntergralityTable> online = list2.stream().filter(item->Objects.equals(Integer.parseInt(item.getStatus()),1)).collect(Collectors.toList());
intergralityData.setCountryOfflineNum(CollUtil.isNotEmpty(offline)?offline.size():0);
intergralityData.setCountryOnlineNum(CollUtil.isNotEmpty(online)?online.size():0);
if (!Objects.isNull(runFlag)){
list2 = Objects.equals(runFlag,0) ? offline : online;
}
}
intergralityData.setCountryNets(list2);
}
return intergralityData;
}
@@ -7035,6 +7055,96 @@ public class DeviceServiceImpl implements DeviceService {
return eventPushLogsDetailMapper.updatEventPushLog(eventDetailIndex, lineId, new Date());
}
@Override
public List<IntegrityAnalysisData> getStatisticalAnalysis(String startTime, String endTime, String area, Integer postType, Integer powerId) {
List<IntegrityAnalysisData> list = new ArrayList<>();
List<LineInfo> allArea = new ArrayList<>();
List<AreaGeneralData> ag = userUtil.getAreaDataByInfo(area);
for (AreaGeneralData item : ag) {
IntegrityAnalysisData data = new IntegrityAnalysisData();
data.setDeptName(item.getName());
data.setDeptIndex(item.getDeptIndex());
data.setSort(1);
if (CollUtil.isNotEmpty(item.getLineIndexs())) {
List<LineInfo> lineInfos = integrityMapper.getLineInfo(item.getLineIndexs(),postType,powerId);
allArea.addAll(lineInfos);
List<IntegrityAnalysisData.TypeList> typeList = new ArrayList<>();
IntegrityAnalysisData.TypeList type = new IntegrityAnalysisData.TypeList();
type.setName("所属前置机");
type.setDataLists(getFrontList(lineInfos));
IntegrityAnalysisData.TypeList type2 = new IntegrityAnalysisData.TypeList();
type2.setName("监测点状态");
type2.setDataLists(getLineStatusList(lineInfos));
typeList.add(type);
typeList.add(type2);
data.setTypeLists(typeList);
}
list.add(data);
}
//新增冀北省
Depts depts = userUtil.getDeptsByIndex(area);
if (Objects.equals(depts.getParentNodeId(),"10001")) {
IntegrityAnalysisData data = new IntegrityAnalysisData();
data.setDeptName("冀北省");
data.setDeptIndex(area);
List<IntegrityAnalysisData.TypeList> typeList = new ArrayList<>();
IntegrityAnalysisData.TypeList type = new IntegrityAnalysisData.TypeList();
type.setName("所属前置机");
type.setDataLists(getFrontList(allArea));
IntegrityAnalysisData.TypeList type2 = new IntegrityAnalysisData.TypeList();
type2.setName("监测点状态");
type2.setDataLists(getLineStatusList(allArea));
typeList.add(type);
typeList.add(type2);
data.setTypeLists(typeList);
data.setSort(0);
list.add(data);
}
return list.stream().sorted(Comparator.comparing(IntegrityAnalysisData::getSort)).collect(Collectors.toList());
}
public List<IntegrityAnalysisData.DataList> getFrontList(List<LineInfo> lineInfos) {
List<IntegrityAnalysisData.DataList> result = new ArrayList<>();
Map<String,List<LineInfo>> frontMap = lineInfos.stream().collect(Collectors.groupingBy(LineInfo::getDevName));
if (CollectionUtils.isEmpty(frontMap)) {
IntegrityAnalysisData.DataList dataList = new IntegrityAnalysisData.DataList();
dataList.setName("/");
dataList.setAllLineCount(0);
dataList.setRunLineCount(0);
dataList.setCheckLineCount(0);
dataList.setBackLineCount(0);
result.add(dataList);
} else {
frontMap.forEach((k,v)->{
IntegrityAnalysisData.DataList dataList = new IntegrityAnalysisData.DataList();
dataList.setName(k);
Map<Long,List<LineInfo>> statusMap = v.stream().collect(Collectors.groupingBy(LineInfo::getStatus));
dataList.setAllLineCount(v.size());
dataList.setRunLineCount(CollUtil.isNotEmpty(statusMap.get(0L))?statusMap.get(0L).size():0);
dataList.setCheckLineCount(CollUtil.isNotEmpty(statusMap.get(1L))?statusMap.get(1L).size():0);
dataList.setBackLineCount(CollUtil.isNotEmpty(statusMap.get(2L))?statusMap.get(2L).size():0);
result.add(dataList);
});
}
return result;
}
public List<IntegrityAnalysisData.DataList> getLineStatusList(List<LineInfo> lineInfos) {
List<IntegrityAnalysisData.DataList> result = new ArrayList<>();
Map<Long,List<LineInfo>> statusMap = lineInfos.stream().collect(Collectors.groupingBy(LineInfo::getStatus));
IntegrityAnalysisData.DataList dataList = new IntegrityAnalysisData.DataList();
dataList.setName("/");
dataList.setAllLineCount(lineInfos.size());
dataList.setRunLineCount(CollUtil.isNotEmpty(statusMap.get(0L))?statusMap.get(0L).size():0);
dataList.setCheckLineCount(CollUtil.isNotEmpty(statusMap.get(1L))?statusMap.get(1L).size():0);
dataList.setBackLineCount(CollUtil.isNotEmpty(statusMap.get(2L))?statusMap.get(2L).size():0);
result.add(dataList);
return result;
}
/**
* 根据电压等级返回基准容量
*

View File

@@ -9,6 +9,7 @@ import com.njcn.pojo.commons.DatePojo;
import com.njcn.pojo.commons.HttpResult;
import com.njcn.pojo.commons.device.DeviceGeneral;
import com.njcn.pojo.commons.device.LineDetailInfo;
import com.njcn.pojo.commons.runmanage.IntegrityAnalysisData;
import com.njcn.pojo.commons.runmanage.IntergralityData;
import com.njcn.pojo.configuration.*;
import com.njcn.service.configuration.DeviceService;
@@ -37,6 +38,7 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -115,7 +117,7 @@ public class IntegralityController {
*/
@PostMapping("getIntegrityData")
@ResponseBody
public HttpResult getIntegrityData(String startTime, String endTime, String area,Integer devflag,Integer powerId, HttpServletRequest request) {
public HttpResult getIntegrityData(String startTime, String endTime, String area,Integer devflag,Integer powerId, Integer runFlag, HttpServletRequest request) {
HttpResult result = PubUtils.initResult(TokenManager.getToken().getLoginName(), request, LogTypeEnum.BUSSINESS.toString(), 0);
DatePojo datePojo;
datePojo = PubUtils.validateDate(startTime, endTime, "getIntegrityData");
@@ -125,7 +127,7 @@ public class IntegralityController {
}
IntergralityData intergralityData;
try {
intergralityData = deviceService.getDataIntegralityTable(datePojo.getStartTime(), datePojo.getEndTime(), area,devflag,powerId);
intergralityData = deviceService.getDataIntegralityTable(datePojo.getStartTime(), datePojo.getEndTime(), area,devflag,powerId,runFlag);
if (null == intergralityData) {
result = PubUtils.assignmentResultLog(null, 500, "获取监测点数据完整性数据为空", "查询完整性列表", "成功", result);
} else {
@@ -327,4 +329,35 @@ public class IntegralityController {
}
return result;
}
/**
* 数据完整性列表-》统计分析
*/
@PostMapping("statisticalAnalysis")
@ResponseBody
public HttpResult statisticalAnalysis(String startTime, String endTime, String area,Integer postType, Integer powerId, HttpServletRequest request) {
HttpResult result = PubUtils.initResult(TokenManager.getToken().getLoginName(), request, LogTypeEnum.BUSSINESS.toString(), 0);
DatePojo datePojo;
datePojo = PubUtils.validateDate(startTime, endTime, "statisticalAnalysis");
if (!StringUtils.isEmpty(datePojo.getMsg())) {
result = PubUtils.assignmentResult(null, 500, datePojo.getMsg());
return result;
}
try {
List<IntegrityAnalysisData> data = deviceService.getStatisticalAnalysis(startTime,endTime,area,powerId,postType);
if (null == data) {
result = PubUtils.assignmentResultLog(null, 500, "获取统计分析数据为空", "查看统计分析", "成功", result);
} else {
result = PubUtils.assignmentResultLog(data, 200, "获取统计分析数据成功", "查看统计分析", "成功", result);
}
} catch (Exception e) {
logger.error("查看统计分析数据异常,异常为:" + e.toString());
userLog.getLog("查看统计分析数据异常", "失败", PubUtils.getIpAddr(request), LogTypeEnum.BUSSINESS.toString(), 0);
result = PubUtils.assignmentResultLog(null, 500, "查看统计分析数据异常", "查看统计分析", "失败", result);
}
return result;
}
}

View File

@@ -458,4 +458,12 @@ public class BusinessController {
return modelAndView;
}
/**
* 跳转按地市统计监测点运行状态、前置机统计
*/
@RequestMapping("statisticalAnalysis")
public String statisticalAnalysis() {
return "business/manage/statisticalAnalysis";
}
}

View File

@@ -83,7 +83,8 @@
T2.NAME lineName,
T2.line_index lineId,
T1.integrity integrity,
T9.dic_name devType
T9.dic_name devType,
T10.NODE_NAME frontDev
FROM
(
SELECT
@@ -109,7 +110,8 @@
PQ_GDINFORMATION T6,
PQ_SUBSTATION T7,
PQS_DICDATA T8,
PQS_DICDATA T9
PQS_DICDATA T9,
NODEINFORMATION T10
WHERE
T1.LINE_INDEX = T2.LINE_INDEX
AND T2.DEV_INDEX = T3.DEV_INDEX
@@ -119,6 +121,7 @@
AND T2.SUB_INDEX=T7.SUB_INDEX
AND T2.SCALE=T8.DIC_INDEX
AND T9.DIC_INDEX = T3.DEVTYPE
AND T3.NODE_INDEX = T10.NODE_INDEX
</select>
<select id="selectGWIntegrityData" resultType="intergralityTable" >
@@ -136,7 +139,8 @@
T2.NAME lineName,
T2.line_index lineId,
T1.integrity integrity,
T9.dic_name devType
T9.dic_name devType,
T10.NODE_NAME frontDev
FROM
(
SELECT
@@ -162,7 +166,8 @@
PQ_GDINFORMATION T6,
PQ_SUBSTATION T7,
PQS_DICDATA T8,
PQS_DICDATA T9
PQS_DICDATA T9,
NODEINFORMATION T10
WHERE
T1.LINE_INDEX = T2.LINE_INDEX
AND T2.DEV_INDEX = T3.DEV_INDEX
@@ -172,6 +177,33 @@
AND T2.SUB_INDEX=T7.SUB_INDEX
AND T2.SCALE=T8.DIC_INDEX
AND T9.DIC_INDEX = T3.DEVTYPE
AND T3.NODE_INDEX = T10.NODE_INDEX
</select>
<select id="getLineInfo" resultType="com.njcn.pojo.commons.device.LineInfo">
SELECT
PL.LINE_INDEX AS line_index,
PL.NAME AS lineName,
n.NODE_NAME AS devName,
PL.STATUS AS status
FROM
PQ_LINE PL
JOIN PQ_DEVICE pd ON PL.DEV_INDEX = pd.DEV_INDEX
JOIN NODEINFORMATION n ON pd.NODE_INDEX = n.NODE_INDEX
JOIN PQ_LINEDETAIL pl2 ON PL.LINE_INDEX = pl2.LINE_INDEX
<where>
PL.LINE_INDEX IN <foreach collection="list" item="item" open="(" close=")" separator=",">#{item}</foreach>
<if test="postType != null and postType != ' '">
<if test="postType == 0">
AND pl2.MONITOR_ID IS NOT NULL
</if>
<if test="postType == 1">
AND pl2.MONITOR_ID IS NULL
</if>
</if>
<if test="powerId != null and powerId != ' '">
AND pl2.POWERID = #{powerId}
</if>
</where>
</select>
</mapper>

View File

@@ -79,6 +79,13 @@
<option value="2">退运</option>
</select> <label class="form-group">
<label class="form-group">通讯状态:</label>
<select class="form-control" id="runFlag">
<option value="">全部</option>
<option value="0">中断</option>
<option value="1">正常</option>
</select> <label class="form-group">
<div class="form-inline disinlineb wanzhengdiv">
<div class="form-group has-feedback mr10">
<label>统计类型:</label>
@@ -101,10 +108,22 @@
<button id="helper" type="button" class="btn btn-primary tip tip-bottom" data-tip="数据完整性详解">
<i class="glyphicon glyphicon-info-sign" style="margin-left: -3px;margin-right: -3px;"></i>
</button>
<div id="onlineNumber" type="button" class="btn themeBGColor">
在线数:
<div style="float: right" id="online"></div>
</div>
<div id="offlineNumber" type="button" class="btn themeBGColor">
离线数:
<div style="float: right" id="offline"></div>
</div>
<div id="analysis" type="button" class="btn themeBGColor" onclick="showAnalysis()">
<i class="glyphicon glyphicon-info-sign"></i>
<div style="float: right;margin-left: 5px">统计分析</div>
</div>
<div class="form-group fr mr10" id="fliteData">
<label>筛选数据:</label>
<input type="text" class="form-control" onkeyup="searchResult(this.value)"
placeholder="空格分开多条件筛选数据">
placeholder="多条件筛选数据" style="width: 120px">
</div>
</div>
<table id="integritylist" class="table table-striped table-bordered dataTable no-footer width100">
@@ -115,6 +134,7 @@
<th>变电站</th>
<th>监测点名称</th>
<th>终端IP</th>
<th>所属前置机</th>
<th>终端状态</th>
<th>通讯状态</th>
<th>最新数据时间</th>

View File

@@ -0,0 +1,99 @@
<%--
Created by IntelliJ IDEA.
User: 徐扬
Date: 2024/7/25
Time: 18:50
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>监测点分类统计</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<link rel="stylesheet" href="${ctx}/css/plugin/bootstrap/bootstrap.min.css">
<link rel="stylesheet" href="${ctx}/css/plugin/datatables/buttons.dataTables.min.css">
<link rel="stylesheet" href="${ctx}/css/plugin/datatables/datatables.bootstrap.css">
<link rel="stylesheet" href="${ctx}/css/plugin/datatimepicker/bootstrap-datetimepicker.css">
<link rel="stylesheet" href="${ctx}/css/plugin/basicButton.css">
<link rel="stylesheet" href="${ctx}/css/plugin/bootstrapSwitch/bootstrap-switch.min.css">
<link rel="stylesheet" href="${ctx}/css/plugin/ztree/zTreeStyle.css">
<link rel="stylesheet" href="${ctx}/css/plugin/fontawesome/font-awesome.min.css">
<link rel="stylesheet" href="${ctx}/css/basic.css">
<link rel="stylesheet" href="${ctx}/css/plugin/datatables/bootstrap-select.css"/>
<style>
html, body {
background-color: #F9F9F9 !important;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="form-inline header mt10">
<label class="form-group">区域:</label>
<div class="form-group has-feedback mr10">
<div class="disinlineb">
<input id="area" class="form-control" style="width: 140px" readonly>
<i class="fa fa-caret-down areaicon"></i>
<i class="fa fa-caret-up treeUpIcon disnone"
style="color: #C9CBCE;position: absolute;left: 60px;font-size: 18px;z-index: 9999;top: 20px"></i>
<div class=" ztree treeUpDiv disnone " id="areaTree"
style="position: absolute;width: 140px;height: 147px;border: 2px solid #C9CBCE;overflow: auto;top: 32px;background: #fff;z-index: 100;border-radius: 2px">
</div>
</div>
</div>
<%@include file="../../include/time.jsp"%>
<label class="form-group">上报类型:</label>
<select class="form-control" id="postType">
<option value="">全部</option>
<option value="0">国网上报</option>
<option value="1">非国网上报</option>
</select>
<label class="form-group">监测点性质:</label>
<select class="form-control" id="powerId">
<option value="">全部</option>
<option value="0">电网侧</option>
<option value="1">非电网侧</option>
</select>
<label class="form-group">
<button id="query" type="button" class="btn btn-primary ml5">
<i class="glyphicon glyphicon-search"></i>
</button>
</label>
</div>
<div class="form-inline mt5">
<table id="tongji" style="text-align: center" class="table table-striped table-bordered dataTable no-footer">
</table>
</div>
</div>
</body>
<script src="${ctx}/js/plugin/jquery/jquery.min.js"></script>
<script src="${ctx}/js/plugin/bootstrap/bootstrap.min.js"></script>
<script src="${ctx}/js/plugin/bootstrap/bootstrap-datetimepicker.js"></script>
<script src="${ctx}/js/plugin/bootstrap/bootstrap-datetimepicker.zh-CN.js"></script>
<script src="${ctx}/js/plugin/datatables/datatables.jquery.js"></script>
<script src="${ctx}/js/plugin/datatables/dataTables.buttons.min.js"></script>
<script src="${ctx}/js/plugin/datatables/datatables.bootstrap.js"></script>
<script src="${ctx}/js/plugin/datatables/buttons.html5.min.js"></script>
<script src="${ctx}/js/plugin/layui/layer.js"></script>
<script src="${ctx}/jspJS/utils/loading.js"></script>
<script src="${ctx}/jspJS/utils/timeControl.js"></script>
<script src="${ctx}/jspJS/utils/judgeAjaxStatus.js"></script>
<script src="${ctx}/js/plugin/bootstrapSwitch/bootstrap-switch.min.js"></script>
<script src="${ctx}/js/plugin/ztree/jquery.ztree.core.js"></script>
<script src="${ctx}/js/area.js"></script>
<script src="${ctx}/js/color.js"></script>
<script src="${ctx}/jspJS/area/statisticalAnalysis.js"></script>
<script src="${ctx}/js/plugin/jquery/jquery.cleverTabs.js"></script>
<script src="${ctx}/js/plugin/bootstrap/3.3.7/bootstrap.min.js"></script>
<script src="${ctx}/js/plugin/bootstrap/bootstrap-select.js"></script>
</html>

View File

@@ -0,0 +1,279 @@
var $area=$("#area");
var $startTime=$("#startTime");
var $endTime=$("#endTime");
var $postType = $("#postType")
var $powerId = $("#powerId")
$("#interval").val("月份");
var buttonname;
var companyname;
var tigName;
var volData;
var dataTable=null;
var startTime,endTime,area,postType,powerId;
$(function () {
startTime = $startTime.eq(0).val();
endTime = $endTime.eq(0).val();
area = $area.eq(0).val();
postType = $postType.eq(0).val();
powerId = $powerId.eq(0).val();
loadselect("电压等级","vollevel");
$.ajax({
type: "POST",
data:{
start: startTime,
end: endTime
},
async:false,
url: "/pqs9000/device/getMsgInfo",
dataType: 'json',
success: function (data) {
buttonname = data.body.name;
tigName = data.body.name;
}
})
$.ajax({
type: "POST",
url: "/pqs9000/theme/getThemeInfo",
async: false,
dataType: 'json',
success: function (data) {
companyname = data.body.name;
}
})
//初始化按钮开关
$(".checkbox").bootstrapSwitch({
onText: buttonname, // 设置ON文本
offText: companyname, // 设置OFF文本
onColor: "primary",// 设置ON文本颜色 (info/success/warning/danger/primary)
offColor: "primary", // 设置OFF文本颜色 (info/success/warning/danger/primary)
size: "small", // 设置控件大小,从小到大 (mini/small/normal/large)
handleWidth: "60",//设置控件宽度
// 当开关状态改变时触发
onSwitchChange: function (event, state) {
if (state === true) {
tigName = buttonname;
refresh(area, startTime, endTime,postType,powerId);
} else {
tigName = companyname;
refresh(area, startTime, endTime,postType,powerId);
}
}
});
//初始化区域
$.ajax({
type: "POST",
url: "/pqs9000/user/getAreasInfo",
dataType:'json',
success:function (data) {
$("#area").val(data[0].name);
$("#area").attr("index", data[0].id);
areaTree = $.fn.zTree.init($("#areaTree"), settingAreaTree, data);
//初始化页面内容
area = $area.eq(0).attr("index");
startTime = $startTime.eq(0).val();
endTime = $endTime.eq(0).val();
postType = $postType.eq(0).val();
powerId = $powerId.eq(0).val();
refresh(area, startTime, endTime,postType,powerId);
}
})
})
//点击确定,去后台请求参数
$("#query").click(function() {
area = $area.eq(0).attr("index");
startTime = $startTime.eq(0).val();
endTime = $endTime.eq(0).val();
postType = $postType.eq(0).val();
powerId = $powerId.eq(0).val();
refresh(area,startTime,endTime,postType,powerId);
});
//获取表格数据
function refresh(area,startTime,endTime,postType,powerId){
var i ;
$.ajax({
type : "POST",
url : "/pqs9000/area/statisticalAnalysis",
dataType : "json",
data : {
startTime : startTime,
endTime : endTime,
area: area,
postType: postType,
powerId: powerId
},
beforeSend: function () {
i = ityzl_SHOW_LOAD_LAYER();
},
success : function(data) {
if (data.code === 500) {
layer.msg(data.message,{icon:2,time:2000})
volData=null;
} else {
translateData(data.body);
}
//***********关闭loading
ityzl_CLOSE_LOAD_LAYER(i);
}
});
}
function translateData(data) {
var tableData = '';
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].typeLists.length; j++) {
for (var k = 0; k < data[i].typeLists[j].dataLists.length; k++) {
tableData += '["","' + data[i].deptName + '", "' + data[i].typeLists[j].name + '","'
+ data[i].typeLists[j].dataLists[k].name + '","' + data[i].typeLists[j].dataLists[k].allLineCount + '","' + data[i].typeLists[j].dataLists[k].runLineCount + '","'
+ data[i].typeLists[j].dataLists[k].checkLineCount + '","' + data[i].typeLists[j].dataLists[k].backLineCount + '","';
if (k === 0) {
var n = 0;
if (j === 0) {
for (var l = 0; l < data[i].typeLists.length; l++) {
for (var m = 0; m < data[i].typeLists[l].dataLists.length; m++) {
n++;
}
}
}
tableData += n + '","' + data[i].typeLists[j].dataLists.length + '"],';
} else {
tableData += '0","0"],'; //前面表示所有行,后面表示自己的行
}
}
}
}
tableData = tableData.substring(0, tableData.lastIndexOf(','));
tableData = eval('[' + tableData + ']');
console.log("tableData==:" + tableData)
initTable(tableData);
}
function initTable(data) {
$('#tongji').dataTable({
"columns": [
{"title": "序号"},
{"title": "区域"},
{"title": "类型"},
{"title": "分类型"},
{"title": "监测点总数"},
{"title": "监测点投运数"},
{"title": "监测点检修数"},
{"title": "监测点退运数"}
],
paging: false,
scrollY: ($(window).height() * 0.83),
lengthChange: false,
language: {
url: '/pqs9000/json/chine.json',
},
searching: false,
info: false,
ordering: false,
destroy: true,
data: data,
fnDrawCallback: function () {
this.api().column(0).nodes().each(function (cell, i) {
cell.innerHTML = i + 1;
});
},
columnDefs: [{
targets: 1,
createdCell: function (td, cellData, rowData, row, col) {
var rowspan = rowData[8];
if (rowspan > 1) {
$(td).attr('rowspan', rowspan)
}
if (rowspan == 0) {
$(td).remove();
}
}
}, {
targets: 2,
createdCell: function (td, cellData, rowData, row, col) {
var rowspan = rowData[9];
if (rowspan > 1) {
$(td).attr('rowspan', rowspan)
}
if (rowspan == 0) {
$(td).remove();
}
}
}]
});
}
function loadselect(dictypeName,div){
var part='#'+div;
$(part).find("option").remove();
$.ajax({
method : "post",
url : "/pqs9000/device/getselect",
data : {
dictypeName:dictypeName
},
async:false,
success : function(data) {
if(data == null){
var message = dictypeName + '信息加载失败';
layer.msg(message,{icon:1,time:1000});
}else{
var option0 = $("<option selected value='"
+ null + "'>"
+ "全部" + "</option>");
$(part).append(option0);
$.each(data, function(i, item) {
var option = $("<option value='"
+ item.dicIndex + "'>"
+ item.dicName + "</option>");
$(part).append(option);
})
}
}
})
}
//特殊处理,表头紧缩问题--start
var it=null;
function startQuery() {
//实时刷新时间单位为毫秒
it= setInterval('refreshQuery()',100);
}
/* 刷新查询 */
function refreshQuery(){
var width=$("#vdlist").width();
if(width>100){
initTable(resultData);
window.clearInterval(it)
}
}
//特殊处理,表头紧缩问题--end
//制保留2位小数2会在2后面补上00.即2.00
function toDecimal2(x) {
var f = parseFloat(x);
if (isNaN(f)) {
return false;
}
var f = Math.round(x*100)/100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
}

View File

@@ -10,6 +10,10 @@ var companyname;
var tiggleValue = "";
var allNetsData = [];
var countryNetsData = [];
var data1;
var data2;
var data3;
var data4;
$("#interval").val("月份");
/**
* 电压等级排序自定义比较start
@@ -116,9 +120,13 @@ $(function () {
if (state === true) {
tiggleValue = buttonname;
initTable(allNetsData);
$('#online').text(data1===null?0:data1);
$('#offline').text(data2===null?0:data2);
} else {
tiggleValue = companyname;
initTable(countryNetsData);
$('#online').text(data3===null?0:data3);
$('#offline').text(data4===null?0:data4);
}
}
});
@@ -132,11 +140,12 @@ $("#query").click(function () {
var endTime = $endTime.eq(0).val();
var devflag = $("#devflag").val();
var powerId = $("#powerId").val();
refresh(area, startTime, endTime,devflag,powerId);
var runFlag = $("#runFlag").val();
refresh(area, startTime, endTime,devflag,powerId,runFlag);
});
//获取表格数据
function refresh(area, startTime, endTime,devflag,powerId) {
function refresh(area, startTime, endTime,devflag,powerId,runFlag) {
var i;
$.ajax({
type: "POST",
@@ -147,7 +156,8 @@ function refresh(area, startTime, endTime,devflag,powerId) {
endTime: endTime,
area: area,
devflag:devflag,
powerId:powerId
powerId:powerId,
runFlag:runFlag
},
beforeSend: function () {
i = ityzl_SHOW_LOAD_LAYER();
@@ -158,9 +168,17 @@ function refresh(area, startTime, endTime,devflag,powerId) {
//没有数据
allNetsData = null;
countryNetsData = null;
data1 = null;
data2 = null;
data3 = null;
data4 = null;
} else {
allNetsData = data.body.allNets;
countryNetsData = data.body.countryNets;
data1 = data.body.allOnlineNum;
data2 = data.body.allOfflineNum;
data3 = data.body.countryOnlineNum;
data4 = data.body.countryOfflineNum;
}
startQuery();
//***********关闭loading
@@ -219,8 +237,9 @@ function initTable(data) {
}
},
{width: "8%", data: "deviceIp"},
{width: "6%", data: "frontDev"},
{
width: "8%", data: "devFlag", render: function (data, type, full, meta) {
width: "5%", data: "devFlag", render: function (data, type, full, meta) {
var temp = Number(data);
switch (temp) {
case 0:
@@ -233,7 +252,7 @@ function initTable(data) {
}
},
{
width: "8%", data: "status", render: function (data, type, full, meta) {
width: "5%", data: "status", render: function (data, type, full, meta) {
var temp = Number(data);
switch (temp) {
case 0:
@@ -243,7 +262,7 @@ function initTable(data) {
}
}
},
{width: "8%", data: "updateTime"},
{width: "10%", data: "updateTime"},
{
width: "8%", data: "integrity",
render: function (data, type, full, meta) {
@@ -258,7 +277,7 @@ function initTable(data) {
}
},
{width: "8%", data: "device"},
{width: "10%", data: "company"},
{width: "8%", data: "company"},
{width: "5%", data: "voltage", type: "number-fate"},
{
width: "12%", data: "", render: function (data, type, full, meta) {
@@ -376,6 +395,18 @@ function showDetail(lineId) {
}
}
function showAnalysis() {
layer.open({
type: 2,
title: '监测点统计分析',
maxmin: false,
shadeClose: true, // 点击遮罩关闭层
area: ['100%', '100%'],
content: '/pqs9000/business/statisticalAnalysis',
scrollbar: false
});
}
function modifyCss(dataTable) {
@@ -407,8 +438,12 @@ function refreshQuery() {
if (width > 100) {
if (tiggleValue === buttonname) {
initTable(allNetsData);
$('#online').text(data1===null?0:data1);
$('#offline').text(data2===null?0:data2);
} else {
initTable(countryNetsData);
$('#online').text(data3===null?0:data3);
$('#offline').text(data4===null?0:data4);
}
window.clearInterval(it)
}