代码修改
This commit is contained in:
@@ -18,15 +18,13 @@ import lombok.NoArgsConstructor;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TerminalOnlineRateDataParam extends DeviceInfoParam.BusinessParam{
|
||||
|
||||
// 监测点合格率
|
||||
// @ApiModelProperty(name = "devicePassRate",value = "终端在线率合格率")
|
||||
// private Integer devicePassRate;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 字段表监测点等级
|
||||
*/
|
||||
@ApiModelProperty(name = "algoDescribe",value = "字段表监测点等级,0:极重要 1:重要 2:普通 3:不重要")
|
||||
private Integer algoDescribe;
|
||||
@ApiModelProperty(name = "lineGrade",value = "字段表监测点等级,0:极重要 1:重要 2:普通 3:不重要")
|
||||
private String lineGrade;
|
||||
}
|
||||
|
||||
@@ -26,13 +26,13 @@ public class TerminalOnlineRateData implements Serializable {
|
||||
/**
|
||||
* 终端id
|
||||
*/
|
||||
@Column(name = "dev_id")
|
||||
@Column(name = "dev_id",tag = true)
|
||||
private String devId;
|
||||
|
||||
/**
|
||||
* 终端在线率
|
||||
*/
|
||||
@Column(name = "online_rate")
|
||||
private Double onlineRate;
|
||||
private Double onlineRate = 3.14159;
|
||||
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ public class DeviceVO implements Serializable {
|
||||
/**
|
||||
* 设备sim卡号
|
||||
*/
|
||||
@ApiModelProperty(name = "contract",value = "装置sim卡")
|
||||
@ApiModelProperty(name = "sim",value = "装置sim卡")
|
||||
private String sim;
|
||||
|
||||
@ApiModelProperty(name = "sort",value = "排序",required = true)
|
||||
|
||||
@@ -49,4 +49,11 @@ public interface DeviceMapper extends BaseMapper<Device> {
|
||||
* @return 结果
|
||||
*/
|
||||
List<RunTimeVO> getRunManageDevList(@Param("list") List<String> list, @Param("comFlag")List<Integer> comFlag, @Param("runFlag")List<Integer> runFlag);
|
||||
|
||||
/**
|
||||
* 获取指定等级的装置
|
||||
* @author cdf
|
||||
* @date 2023/2/10
|
||||
*/
|
||||
List<String> getDevByGrade(@Param("devId")List<String> devIds,@Param("lineGrade") String lineGrade);
|
||||
}
|
||||
|
||||
@@ -24,12 +24,10 @@ public interface TerminalOnlineRateDataMapper extends BaseMapper<TerminalOnlineR
|
||||
|
||||
/**
|
||||
* 通过部分终端等级信息查询终端信息
|
||||
* @param devGrade
|
||||
* @param lineGrade
|
||||
* @return
|
||||
*/
|
||||
List<TerminalOnlineRateDataVO> getDevice(@Param("devGrade")List<TerminalOnlineRateDataVO> devGrade,
|
||||
@Param("searchBeginTime") String searchBeginTime,
|
||||
@Param("searchEndTime") String searchEndTime);
|
||||
List<TerminalOnlineRateDataVO> getDevice(@Param("devIds")List<String> devIds, @Param("lineGrade")String lineGrade);
|
||||
/**
|
||||
* 根据供电公司索引获取出省会的信息
|
||||
* @param gdIndexes 供电公司索引
|
||||
|
||||
@@ -36,8 +36,7 @@
|
||||
pdevice.Com_Flag AS comFlag,
|
||||
sddManufacturer.`Name` AS manufacturer,
|
||||
pdevice.Update_Time AS updateTime,
|
||||
sddLineGrade.`Name` AS lineGrade,
|
||||
sddLineGrade.Algo_Describe as algoDescribe
|
||||
max(sddLineGrade.Algo_Describe) as algoDescribe
|
||||
FROM
|
||||
pq_line AS device
|
||||
LEFT JOIN pq_line AS voltage ON device.id = voltage.pid
|
||||
@@ -49,19 +48,23 @@
|
||||
WHERE
|
||||
device.`Level` = 4
|
||||
AND device.id in
|
||||
<foreach collection="devGrade" item="item" open="(" close=")" separator=",">
|
||||
#{item.id}
|
||||
<foreach collection="devIds" item="item" open="(" close=")" separator=",">
|
||||
#{item}
|
||||
</foreach>
|
||||
AND sddLineGrade.Algo_Describe in
|
||||
<foreach collection="devGrade" item="item" open="(" close=")" separator=",">
|
||||
#{item.algoDescribe}
|
||||
</foreach>
|
||||
<if test="searchBeginTime != null and searchBeginTime != ''"><!-- 开始创建时间 -->
|
||||
and date_format(device.update_Time,'%y%m%d') >= date_format(#{searchBeginTime},'%y%m%d')
|
||||
</if>
|
||||
<if test="searchEndTime != null and searchEndTime != ''"><!-- -->
|
||||
and date_format(device.update_Time,'%y%m%d') <= date_format(#{searchEndTime},'%y%m%d')
|
||||
<if test="lineGrade!='' and lineGrade!=null">
|
||||
AND pld.line_grade = #{lineGrade}
|
||||
</if>
|
||||
group by
|
||||
device.id,
|
||||
device.pid,
|
||||
device.`Name`,
|
||||
device.`Level`,
|
||||
device.Sort,
|
||||
pdevice.ip,
|
||||
pdevice.Com_Flag,
|
||||
sddManufacturer.`Name`,
|
||||
pdevice.Update_Time
|
||||
|
||||
</select>
|
||||
|
||||
<!--根据供电公司索引获取出省会的信息-->
|
||||
@@ -185,4 +188,4 @@
|
||||
and date_format(line.update_Time,'%y%m%d') <= date_format(#{searchEndTime},'%y%m%d')
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
</mapper>
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.njcn.device.pq.service;
|
||||
|
||||
import com.njcn.device.pq.pojo.vo.LineDistributionVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* pqs
|
||||
* 运维中心
|
||||
* @author cdf
|
||||
* @date 2023/2/9
|
||||
*/
|
||||
public interface OperationService {
|
||||
|
||||
|
||||
/**
|
||||
* 获取监测点分布
|
||||
* @author cdf
|
||||
* @date 2023/2/9
|
||||
*/
|
||||
List<LineDistributionVO> getLineDistribution(String lineGrade);
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.njcn.device.pq.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.response.HttpResult;
|
||||
import com.njcn.common.utils.HttpResultUtil;
|
||||
import com.njcn.common.utils.LogUtil;
|
||||
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
|
||||
import com.njcn.device.pq.pojo.vo.LineDistributionVO;
|
||||
import com.njcn.device.pq.service.OperationService;
|
||||
import com.njcn.user.api.DeptFeignClient;
|
||||
import com.njcn.user.pojo.dto.DeptDTO;
|
||||
import com.njcn.web.utils.RequestUtil;
|
||||
import com.njcn.web.utils.WebUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* pqs
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2023/2/9
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class OperationServiceImpl implements OperationService {
|
||||
|
||||
private final DeptFeignClient deptFeignClient;
|
||||
|
||||
|
||||
/**
|
||||
* 获取监测点分布
|
||||
* @author cdf
|
||||
* @date 2023/2/9
|
||||
*/
|
||||
@Override
|
||||
public List<LineDistributionVO> getLineDistribution(String lineGrade) {
|
||||
String deptIndex = RequestUtil.getDeptIndex();
|
||||
//初始化部门筛选条件
|
||||
List<Integer> deptType = WebUtil.filterDeptType();
|
||||
//获取包括当前部门的后代所有部门信息
|
||||
List<DeptDTO> deptInfos = deptFeignClient.getDeptDescendantIndexes(deptIndex, deptType).getData();
|
||||
List<DeptDTO> directDeptInfos = deptInfos.stream()
|
||||
.filter(deptDTO -> deptDTO.getPid().equals(deptIndex)).sorted(Comparator.comparing(DeptDTO::getSort))
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtil.isEmpty(directDeptInfos)) {
|
||||
//没有直接子部门,获取当前部门所有信息
|
||||
List<DeptDTO> dept = deptInfos.stream()
|
||||
.filter(deptDTO -> deptDTO.getId().equals(deptIndex))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
} else {
|
||||
for (DeptDTO deptDTO : directDeptInfos) {
|
||||
//筛选上级部门pids包含该id的所有部门
|
||||
List<DeptDTO> descendantDeptDTO = deptInfos.stream()
|
||||
.filter(d -> d.getPids().contains(deptDTO.getId()))
|
||||
.collect(Collectors.toList());
|
||||
//形成需要查询监测点的部门索引
|
||||
List<String> indexes = descendantDeptDTO.stream()
|
||||
.map(DeptDTO::getId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
indexes.add(deptDTO.getId());
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -59,8 +59,6 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData
|
||||
@Override
|
||||
public List<TerminalOnlineRateDataVO> getOnlineRateData(TerminalOnlineRateDataParam terminalOnlineRateDataParam) {
|
||||
|
||||
// TODO 部门id StatisticsEnum
|
||||
// terminalOnlineRateDataParam.setDeptIndex(RequestUtil.getDeptIndex());
|
||||
|
||||
// 获取所有数据
|
||||
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(terminalOnlineRateDataParam, Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
|
||||
@@ -89,49 +87,41 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData
|
||||
// 创建实体类
|
||||
TerminalOnlineRateDataVO terminalOnlineRateDataVO = new TerminalOnlineRateDataVO();
|
||||
|
||||
// 通过供电公司索引查询省会
|
||||
List<TerminalOnlineRateDataVO> proList = terminalOnlineRateDataMapper.getProvinceList(generalDeviceDTO.getGdIndexes(),terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime());
|
||||
|
||||
// 通过供电公司索引查询供电公司信息
|
||||
List<TerminalOnlineRateDataVO> gdList = terminalOnlineRateDataMapper.getGdList(generalDeviceDTO.getGdIndexes(),terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime());
|
||||
|
||||
// 通过供电站索引查询供电站信息
|
||||
List<TerminalOnlineRateDataVO> subList = terminalOnlineRateDataMapper.getSubList(generalDeviceDTO.getSubIndexes(),terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime());
|
||||
|
||||
// 通过终端的索引查询索引的等级和id
|
||||
List<TerminalOnlineRateDataVO> deviceLevelAndId = terminalOnlineRateDataMapper.getDeviceLevelData(generalDeviceDTO.getDeviceIndexes());
|
||||
|
||||
// 通过部分终端等级信息查询终端信息
|
||||
List<TerminalOnlineRateDataVO> deviceList = terminalOnlineRateDataMapper.getDevice(deviceLevelAndId,terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime());
|
||||
List<TerminalOnlineRateDataVO> deviceList = terminalOnlineRateDataMapper.getDevice(generalDeviceDTO.getDeviceIndexes(),terminalOnlineRateDataParam.getLineGrade());
|
||||
|
||||
|
||||
// 判断前端出入的终端等级
|
||||
if (terminalOnlineRateDataParam.getAlgoDescribe()!=null) {
|
||||
switch (terminalOnlineRateDataParam.getAlgoDescribe()) {
|
||||
case 0:
|
||||
deviceList = deviceList.stream().filter(dev -> dev.getAlgoDescribe() != null && dev.getAlgoDescribe() == 0).collect(Collectors.toList());
|
||||
break;
|
||||
case 1:
|
||||
deviceList = deviceList.stream().filter(dev -> dev.getAlgoDescribe() != null && dev.getAlgoDescribe() == 1).collect(Collectors.toList());
|
||||
break;
|
||||
case 2:
|
||||
deviceList = deviceList.stream().filter(dev -> dev.getAlgoDescribe() != null && dev.getAlgoDescribe() == 2).collect(Collectors.toList());
|
||||
break;
|
||||
case 3:
|
||||
deviceList = deviceList.stream().filter(dev -> dev.getAlgoDescribe() != null && dev.getAlgoDescribe() == 3).collect(Collectors.toList());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(CollectionUtil.isEmpty(deviceList)){
|
||||
continue;
|
||||
}
|
||||
|
||||
List<String> devIds = deviceList.stream().map(TerminalOnlineRateDataVO::getId).collect(Collectors.toList());
|
||||
|
||||
// 通过工具类得到查询influxdb的条件(相当于mysql中的in)
|
||||
StringBuilder devForInfluxdb = InfluxDBCommUtils.assToInfluxParam(generalDeviceDTO.getDeviceIndexes());
|
||||
// 通过监测点id集合查询influxdb监测点数据完整性
|
||||
StringBuilder devForInfluxdb = InfluxDBCommUtils.assToInfluxParamDev(devIds);
|
||||
// 通过装置id
|
||||
List<TerminalOnlineRateData> terminalOnlineRateData = getPercentageOfOnlineRate(terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime(), devForInfluxdb);
|
||||
|
||||
// 处理终端在线率
|
||||
DataStatisticsUtil.getTerminalOnlineRateData(terminalOnlineRateData,deviceList);
|
||||
|
||||
|
||||
List<String> subIds = deviceList.stream().map(TerminalOnlineRateDataVO::getPid).collect(Collectors.toList());
|
||||
|
||||
|
||||
// 通过供电站索引查询供电站信息
|
||||
List<TerminalOnlineRateDataVO> subList = terminalOnlineRateDataMapper.getSubList(subIds,terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime());
|
||||
|
||||
List<String> gdIds = subList.stream().map(TerminalOnlineRateDataVO::getPid).collect(Collectors.toList());
|
||||
// 通过供电公司索引查询供电公司信息
|
||||
List<TerminalOnlineRateDataVO> gdList = terminalOnlineRateDataMapper.getGdList(gdIds,terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime());
|
||||
|
||||
List<String> proIds = gdList.stream().map(TerminalOnlineRateDataVO::getPid).collect(Collectors.toList());
|
||||
|
||||
// 通过供电公司索引查询省会
|
||||
List<TerminalOnlineRateDataVO> proList = terminalOnlineRateDataMapper.getProvinceList(proIds,terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime());
|
||||
|
||||
|
||||
//处理变电站
|
||||
dealChildrenData(subList, deviceList, false);
|
||||
//处理供电公司
|
||||
@@ -219,12 +209,10 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData
|
||||
.append(InfluxDBPublicParam.END_TIME)
|
||||
.append("'");
|
||||
//sql语句
|
||||
String sql = "SELECT time,dev_id,online_rate FROM pqs_onlinerate WHERE " + queryCriteria + " group by dev_id " + InfluxDBPublicParam.TIME_ZONE;
|
||||
String sql = "SELECT mean(online_rate) as online_rate FROM pqs_onlinerate WHERE " + queryCriteria + " group by dev_id " + InfluxDBPublicParam.TIME_ZONE;
|
||||
// 结果集
|
||||
QueryResult results = influxDbUtils.query(sql);
|
||||
|
||||
System.out.println(results);
|
||||
|
||||
// 结果集映射到对象中
|
||||
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
|
||||
// 返回结果
|
||||
|
||||
@@ -121,43 +121,19 @@ public class DataStatisticsUtil {
|
||||
|
||||
if (CollectionUtil.isNotEmpty(terminalOnlineRateData)) {
|
||||
// 根据监测点id分类
|
||||
Map<String, List<TerminalOnlineRateData>> groupByDevId = terminalOnlineRateData.stream().collect(Collectors.groupingBy(TerminalOnlineRateData::getDevId));
|
||||
// 新建集合处理数据
|
||||
List<TerminalOnlineRateData> terminalOnlineRateDataArrayList = new ArrayList<>();
|
||||
// 获取map中的key(监测点id集合)
|
||||
Set<String> devIds = groupByDevId.keySet();
|
||||
|
||||
for (String devId : devIds) {
|
||||
// 创建对象处理数据
|
||||
TerminalOnlineRateData onlineRateData = new TerminalOnlineRateData();
|
||||
|
||||
double onlineRate = 0.0;
|
||||
|
||||
// 取出值
|
||||
List<TerminalOnlineRateData> devOnlineRateData = groupByDevId.get(devId);
|
||||
int size = devOnlineRateData.size();
|
||||
for (TerminalOnlineRateData devOnlineRate : devOnlineRateData) {
|
||||
onlineRate += devOnlineRate.getOnlineRate();
|
||||
}
|
||||
// 求出监测点数据完整性
|
||||
double deviceOnlineRateDouble = onlineRate / size;
|
||||
String deviceOnlineRateString = String.format("%.2f", deviceOnlineRateDouble);
|
||||
onlineRateData.setOnlineRate(Double.parseDouble(deviceOnlineRateString));
|
||||
onlineRateData.setDevId(devId);
|
||||
terminalOnlineRateDataArrayList.add(onlineRateData);
|
||||
}
|
||||
|
||||
deviceList = deviceList.stream().peek(onlineRateDataVO -> {
|
||||
for (TerminalOnlineRateData onlineRateData : terminalOnlineRateDataArrayList) {
|
||||
boolean flag = false;
|
||||
for (TerminalOnlineRateData onlineRateData : terminalOnlineRateData) {
|
||||
if (onlineRateDataVO.getId().equals(onlineRateData.getDevId())) {
|
||||
if (onlineRateData.getOnlineRate() != null) {
|
||||
onlineRateDataVO.setOnlineRate(onlineRateData.getOnlineRate());
|
||||
} else {
|
||||
// 为空则给对应的监测点的监测点合设置为魔数
|
||||
onlineRateDataVO.setOnlineRate(3.14159);
|
||||
}
|
||||
flag = true;
|
||||
onlineRateDataVO.setOnlineRate(onlineRateData.getOnlineRate());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!flag){
|
||||
onlineRateDataVO.setOnlineRate(3.14159);
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
} else {
|
||||
deviceList = deviceList.stream().peek(onlineRateDataVO -> onlineRateDataVO.setOnlineRate(3.14159)).collect(Collectors.toList());
|
||||
|
||||
Reference in New Issue
Block a user