# Conflicts:
#	pqs-device/pms-device/pms-device-api/src/main/java/com/njcn/device/pms/pojo/dto/PmsSimpleDTO.java
#	pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/controller/ledgerManger/SubstationExpendController.java
#	pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/mapper/majornetwork/mapping/MonitorMapper.xml
#	pqs-device/pms-device/pms-device-boot/src/main/java/com/njcn/device/pms/service/impl/SubstationExpendServiceImpl.java
#	pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/CommunicateParam.java
#	pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/DeviceInfoParam.java
#	pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/CommunicateVO.java
#	pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml
#	pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ISubstationExpendService.java
#	pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/SubstationExpendServiceImpl.java
#	pqs-event/event-api/src/main/java/com/njcn/event/pojo/param/WaveTypeParam.java
This commit is contained in:
huangzj
2023-05-16 09:44:57 +08:00
31 changed files with 562 additions and 109 deletions

View File

@@ -38,7 +38,7 @@ public class SubstationExpendController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPVCommunicationStatus")
@ApiOperation("冀北主网监测点通讯状态统计")
@ApiOperation("冀北主网监测点pq:通讯状态统计")
@ApiImplicitParam(name = "param", value = "冀北主网监测点台账统计参数", required = true)
public HttpResult<List<CommunicateVO.PVCommunicateVO>> getPVCommunicationStatus(@RequestBody DeviceInfoParam.CompareLimitParam param) {
String methodDescribe = getMethodDescribe("getPVCommunicationStatus");

View File

@@ -211,7 +211,7 @@
<select id="getDeviceByIdOnOrOff" resultType="com.njcn.device.pq.pojo.vo.TerminalBaseVO">
SELECT
t1.name devName,t2.ip,t2.dev_type,t2.update_time,sub.name subName,gd.name gdName
t1.id devId,t1.name devName,t2.ip,t2.dev_type,t2.update_time,sub.name subName,gd.name gdName
FROM
pq_line t1,
pq_device t2,

View File

@@ -0,0 +1,25 @@
package com.njcn.device.pq.service;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.vo.CommunicateVO;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author wr
* @since 2023-05-08
*/
public interface ISubstationExpendService {
/**
* 冀北主网监测点通讯状态统计
* @param param
* @return
*/
List<CommunicateVO.PVCommunicateVO> getCommunicationStatus(DeviceInfoParam.CompareLimitParam param);
}

View File

@@ -0,0 +1,89 @@
package com.njcn.device.pq.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.njcn.device.pq.pojo.bo.DeviceType;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.po.Communicate;
import com.njcn.device.pq.pojo.vo.CommunicateVO;
import com.njcn.device.pq.pojo.vo.TerminalBaseVO;
import com.njcn.device.pq.service.ISubstationExpendService;
import com.njcn.device.pq.service.TerminalBaseService;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
* 服务实现类
* </p>
*
* @author wr
* @since 2023-05-08
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class SubstationExpendServiceImpl implements ISubstationExpendService {
private final GeneralDeviceService generalDeviceService;
private final InfluxDbUtils influxDbUtils;
private final TerminalBaseService terminalBaseService;
@Override
public List<CommunicateVO.PVCommunicateVO> getCommunicationStatus(DeviceInfoParam.CompareLimitParam param) {
List<GeneralDeviceDTO> generalDeviceDTOS = generalDeviceService.getDeviceInfo(param, Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
//获取所有终端id
List<String> terminalIds = generalDeviceDTOS.stream().flatMap(dto -> dto.getDeviceIndexes().stream()).collect(Collectors.toList());
List<CommunicateVO.PVCommunicateVO> info =new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime()))).append("' and ").append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))).append("' ");
if(CollUtil.isNotEmpty(terminalIds)){
stringBuilder.append(" and ").append("(");
for (int i = 0; i < terminalIds.size(); i++) {
if (terminalIds.size() - i != 1) {
stringBuilder.append("dev_id = '").append(terminalIds.get(i)).append("' or ");
} else {
stringBuilder.append("dev_id = '").append(terminalIds.get(i)).append("')");
}
}
}
stringBuilder.append(" limit "+param.getLimit());
String sql = "select * from " + InfluxDBPublicParam.PQS_COMMUNICATE + " where " + stringBuilder + InfluxDBPublicParam.TIME_ZONE;
// 获取暂降事件
QueryResult result = influxDbUtils.query(sql);
InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
List<Communicate> communicates = influxDBResultMapper.toPOJO(result, Communicate.class);
if(CollUtil.isEmpty(communicates)){
return info;
}
List<String> ids = communicates.stream().map(Communicate::getDevId).distinct().collect(Collectors.toList());
if(CollUtil.isNotEmpty(ids)){
List<TerminalBaseVO> deviceByIds = terminalBaseService.getDeviceByIdOnOrOff(ids, new DeviceType(), 0);
Map<String, String> terminalNameIp = deviceByIds.stream().collect(Collectors.toMap(TerminalBaseVO::getDevId, x -> x.getDevName() + "_" + x.getIp()));
CommunicateVO.PVCommunicateVO communicate;
for (Communicate cate : communicates) {
communicate=new CommunicateVO.PVCommunicateVO();
BeanUtil.copyProperties(cate, communicate);
communicate.setTime(cate.getUpdateTime());
if(terminalNameIp.containsKey(cate.getDevId())){
communicate.setDevIp(terminalNameIp.get(cate.getDevId()));
}
info.add(communicate);
}
}
return info;
}
}