新增云前置相关功能

This commit is contained in:
xy
2025-09-16 18:30:53 +08:00
parent 8c442d8897
commit 43b8473976
21 changed files with 287 additions and 25 deletions

View File

@@ -10,10 +10,13 @@ import com.njcn.csdevice.api.fallback.EquipmentFeignClientFallbackFactory;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import springfox.documentation.annotations.ApiIgnore;
import java.util.List;
@@ -64,4 +67,10 @@ public interface EquipmentFeignClient {
@PostMapping("/getDevByLineId")
HttpResult<CsEquipmentDeliveryPO> getDevByLineId(@RequestParam("lineId") String lineId);
@PostMapping("/updateCldDevStatus")
HttpResult<Boolean> updateCldDevStatus(@RequestParam("nodeId") String nodeId, @RequestParam("processNo") Integer processNo);
@PostMapping("/flipCldDevStatus")
HttpResult<Boolean> flipCldDevStatus(@RequestParam("devId") String devId, @RequestParam("status") Integer status);
}

View File

@@ -89,6 +89,19 @@ public class EquipmentFeignClientFallbackFactory implements FallbackFactory<Equi
log.error("{}异常,降级处理,异常为:{}","根据监测点id查询装置信息",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<Boolean> updateCldDevStatus(String nodeId, Integer processNo) {
log.error("{}异常,降级处理,异常为:{}","云前置心跳丢失切换设备状态",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<Boolean> flipCldDevStatus(String devId, Integer status) {
log.error("{}异常,降级处理,异常为:{}","云前置设备状态翻转",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}
}

View File

@@ -71,10 +71,15 @@ public class CsLineParam extends BaseEntity {
private Double ct2Ratio;
/**
* 监测点线路号
* 逻辑子设备id
*/
private Integer clDid;
/**
* 监测点线路号
*/
private Integer lineNo;
/**
* 统计间隔
*/

View File

@@ -98,9 +98,6 @@ public class CsLinePO extends BaseEntity {
/**
* 逻辑子设备id(与模板对应)
* 治理监测点 0
* 负载监测点 1
* 电网监测点 2
*/
@TableField(value = "clDid")
private Integer clDid;
@@ -119,4 +116,10 @@ public class CsLinePO extends BaseEntity {
*/
@TableField(value = "run_status")
private Integer runStatus;
/**
* 监测点线路号
*/
@TableField(value = "line_no")
private Integer lineNo;
}

View File

@@ -91,4 +91,7 @@ public class CsEquipmentDeliveryVO extends BaseEntity {
private Integer sort;
@ApiModelProperty(value="前置服务器id")
private String nodeId ;
}

View File

@@ -373,4 +373,32 @@ public class EquipmentDeliveryController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/updateCldDevStatus")
@ApiOperation("云前置心跳丢失切换设备状态")
@ApiImplicitParams({
@ApiImplicitParam(name = "nodeId", value = "前置服务器id", required = true),
@ApiImplicitParam(name = "processNo", value = "进程号", required = true)
})
@ApiIgnore
public HttpResult<Boolean> updateCldDevStatus(@RequestParam("nodeId") String nodeId, @RequestParam("processNo") Integer processNo){
String methodDescribe = getMethodDescribe("updateCldDevStatus");
csEquipmentDeliveryService.updateCldDevStatus(nodeId,processNo);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/flipCldDevStatus")
@ApiOperation("云前置设备状态翻转")
@ApiImplicitParams({
@ApiImplicitParam(name = "devId", value = "设备id", required = true),
@ApiImplicitParam(name = "status", value = "状态", required = true)
})
@ApiIgnore
public HttpResult<Boolean> flipCldDevStatus(@RequestParam("devId") String devId, @RequestParam("status") Integer status){
String methodDescribe = getMethodDescribe("flipCldDevStatus");
csEquipmentDeliveryService.flipCldDevStatus(devId,status);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

@@ -11,6 +11,7 @@ import com.njcn.csdevice.pojo.param.CsEngineeringAuditParm;
import com.njcn.csdevice.pojo.param.CsEngineeringQueryPageParm;
import com.njcn.csdevice.pojo.param.CsEngineeringQueryParm;
import com.njcn.csdevice.pojo.po.CsEngineeringPO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.CsEngineeringVO;
import com.njcn.csdevice.service.CsEngineeringService;
import com.njcn.web.controller.BaseController;
@@ -20,10 +21,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -88,4 +86,14 @@ public class EngineeringController extends BaseController {
IPage<CsEngineeringVO> page = csEngineeringService.queryEngineeringPage(csEngineeringQueryPageParm);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryEngineeringById")
@ApiOperation("工程查询通过id获取")
@ApiImplicitParam(name = "id", value = "工程id", required = true)
public HttpResult<CsEngineeringPO> queryEngineeringById(@RequestParam String id){
String methodDescribe = getMethodDescribe("queryEngineeringById");
CsEngineeringPO po = csEngineeringService.queryEngineeringById(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
}
}

View File

@@ -55,4 +55,6 @@ public interface CsEngineeringService extends IService<CsEngineeringPO>{
* @return
*/
List<CsEngineeringPO> getEngineerings(List<String> list);
CsEngineeringPO queryEngineeringById(String id);
}

View File

@@ -11,6 +11,7 @@ import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import com.njcn.csdevice.pojo.vo.DeviceManagerVO;
import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
@@ -165,6 +166,16 @@ public interface CsEquipmentDeliveryService extends IService<CsEquipmentDelivery
*/
List<CsEquipmentDeliveryPO> getCldDevByIp(String id, List<Integer> runFlag);
/**
* 根据前置id和进程号修改设备状态同时修改设备下的监测点的状态
*/
void updateCldDevStatus(String nodeId, Integer processNo);
/**
* 根据设备id和状态来修改设备运行状态同时修改设备下的监测点的状态
* @param devId
* @param status
*/
void flipCldDevStatus(String devId, Integer status);
}

View File

@@ -50,4 +50,14 @@ public interface CsLinePOService extends IService<CsLinePO>{
void addCldLine(CsLineParam param);
void updateCldLine(CsLineParam param);
void deleteCldLine(String id);
/**
* 修改监测点状态为停运
* @param lineList 监测点集合
* @param status 运行状态
*/
void updateCldLineStatus(List<CsLinePO> lineList, Integer status);
}

View File

@@ -19,6 +19,8 @@ import com.njcn.csdevice.service.ICsDataArrayService;
import com.njcn.csdevice.service.ICsDataSetService;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicTreeEnum;
import com.njcn.system.pojo.po.SysDicTreePO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -163,7 +165,7 @@ public class CsDevModelServiceImpl extends ServiceImpl<CsDevModelMapper, CsDevMo
@Override
public CsDevModelPO getCldModel() {
List<CsDevModelPO> list = this.lambdaQuery()
.eq(CsDevModelPO::getDevTypeName,"CLD")
.eq(CsDevModelPO::getDevTypeName, DicDataEnum.DEV_CLD.getCode())
.eq(CsDevModelPO::getStatus,1)
.list();
if (CollectionUtil.isEmpty(list)) {

View File

@@ -217,6 +217,11 @@ public class CsEngineeringServiceImpl extends ServiceImpl<CsEngineeringMapper, C
return this.lambdaQuery().in(CsEngineeringPO::getId,list).eq(CsEngineeringPO::getStatus,"1").list();
}
@Override
public CsEngineeringPO queryEngineeringById(String id) {
return this.lambdaQuery().eq(CsEngineeringPO::getId,id).eq(CsEngineeringPO::getStatus,"1").one();
}
public String getAreaById(String id){

View File

@@ -325,7 +325,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
}
@Override
public DeviceManagerVO getDeviceData(String deviceId, String type, String lineId) {
public DeviceManagerVO getDeviceData(String deviceId, String type, String lineId) {
DeviceManagerVO deviceManagerVo = new DeviceManagerVO();
List<DeviceManagerVO.DataSetVO> dataSetList = new ArrayList<>();
CsEquipmentDeliveryPO csEquipmentDeliveryPo = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, deviceId).one();
@@ -737,7 +737,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
}
CsEquipmentDeliveryPO csEquipmentDeliveryPo = new CsEquipmentDeliveryPO();
BeanUtils.copyProperties (param,csEquipmentDeliveryPo);
csEquipmentDeliveryPo.setStatus (3);
csEquipmentDeliveryPo.setStatus(3);
csEquipmentDeliveryPo.setRunStatus(1);
csEquipmentDeliveryPo.setUsageStatus(1);
csEquipmentDeliveryPo.setProcess(4);
@@ -890,6 +890,43 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
return this.list(lambdaQueryWrapper);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCldDevStatus(String nodeId, Integer processNo) {
//获取需要修改的设备信息
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNodeId,nodeId)
.eq(CsEquipmentDeliveryPO::getNodeProcess,processNo)
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
.eq(CsEquipmentDeliveryPO::getRunStatus,2);
List<CsEquipmentDeliveryPO> devList = this.list(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(devList)) {
//修改设备运行状态
devList.forEach(item->{item.setRunStatus(1);});
this.updateBatchById(devList);
//修改监测点运行状态
List<String> devIdList = devList.stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList());
List<CsLinePO> lineList = csLinePOService.getLinesByDevList(devIdList);
csLinePOService.updateCldLineStatus(lineList,0);
}
}
@Override
public void flipCldDevStatus(String devId, Integer status) {
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getId,devId)
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
.ne(CsEquipmentDeliveryPO::getUsageStatus,0);
CsEquipmentDeliveryPO po = this.getOne(lambdaQueryWrapper);
if (ObjectUtil.isNotNull(po)) {
po.setRunStatus(status);
this.updateById(po);
//修改监测点运行状态
List<CsLinePO> lineList = csLinePOService.getLinesByDevList(Collections.singletonList(po.getId()));
csLinePOService.updateCldLineStatus(lineList,status==1?2:0);
}
}
//根据前置机id获取装置数量
public List<CsEquipmentDeliveryPO> getListByNodeId(String nodeId) {
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();

View File

@@ -1,9 +1,11 @@
package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.mapper.CsLedgerMapper;
import com.njcn.csdevice.mapper.CsLinePOMapper;
import com.njcn.csdevice.pojo.param.CsLineParam;
@@ -17,12 +19,15 @@ import com.njcn.csdevice.service.ICsDataSetService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.user.pojo.constant.FunctionState;
import com.njcn.user.pojo.po.Function;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@@ -108,7 +113,7 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
BeanUtils.copyProperties(param,po);
po.setStatus(1);
po.setRunStatus(2);
po.setLineId(param.getDevMac().replace(":","") + param.getClDid());
po.setLineId(param.getDevMac().replace(":","") + param.getLineNo());
//模板id
CsDevModelPO po1 = csDevModelService.getCldModel();
po.setDataModelId(po1.getId());
@@ -118,6 +123,7 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
List<CsDataSet> list = csDataSetService.findDataSetByModelId(po1.getId());
if (CollectionUtil.isNotEmpty(list)) {
po.setDataSetId(list.get(0).getId());
po.setClDid(list.get(0).getClDev());
}
//监测位置
DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.GRID_SIDE.getCode()).getData();
@@ -126,7 +132,7 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
//2.新增台账树信息
CsLedger csLedger = new CsLedger();
csLedger.setId(param.getDevMac().replace(":","") + param.getClDid());
csLedger.setId(param.getDevMac().replace(":","") + param.getLineNo());
csLedger.setPid(param.getDevId());
csLedger.setPids("0," + param.getEngineeringId() + "," + param.getProjectId() + "," + param.getDevId());
csLedger.setName(param.getName());
@@ -136,6 +142,43 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
csLedgerMapper.insert(csLedger);
}
@Override
public void updateCldLine(CsLineParam param) {
LambdaQueryWrapper<CsLinePO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CsLinePO::getDeviceId,param.getDevId())
.ne(CsLinePO::getLineId,param.getLineId())
.eq(CsLinePO::getStatus,1)
.eq(CsLinePO::getClDid,param.getClDid());
List<CsLinePO> lineList = this.list(wrapper);
if (CollectionUtil.isNotEmpty(lineList)) {
throw new BusinessException("监测点线路号重复,请调整!");
}
LambdaUpdateWrapper<CsLinePO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(CsLinePO::getLineId,param.getLineId())
.eq(CsLinePO::getStatus,1)
.set(CsLinePO::getVolGrade,param.getVolGrade())
.set(CsLinePO::getConType,param.getConType())
.set(CsLinePO::getPtRatio,param.getPtRatio())
.set(CsLinePO::getPt2Ratio,param.getPt2Ratio())
.set(CsLinePO::getCtRatio,param.getCtRatio())
.set(CsLinePO::getCt2Ratio,param.getCt2Ratio())
.set(CsLinePO::getClDid,param.getClDid())
.set(CsLinePO::getLineInterval,param.getLineInterval())
.set(CsLinePO::getRunStatus,param.getRunStatus());
this.update(lambdaUpdateWrapper);
}
@Override
public void deleteCldLine(String id) {
}
@Override
public void updateCldLineStatus(List<CsLinePO> lineList, Integer status) {
lineList.forEach(item->{item.setRunStatus(status);});
this.updateBatchById(lineList);
}
// /**
// * 1.平台端默认配置拓扑图模板,包含拓扑图信息(cs_topology_diagram_template)和拓扑图上监测点的点位信息(cs_line_topology_template)
// *

View File

@@ -3,6 +3,7 @@ package com.njcn.csdevice.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.tocrhz.mqtt.publisher.MqttPublisher;
import com.njcn.access.utils.ChannelObjectUtil;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.param.IcdLedgerParam;
@@ -36,8 +37,8 @@ class IcdServiceImpl implements IcdService {
private final CsEngineeringService csEngineeringService;
private final AppProjectService appProjectService;
private final CsEquipmentDeliveryService csEquipmentDeliveryService;
private final CsDevModelRelationService csDevModelRelationService;
private final CsLinePOService csLinePOService;
private final MqttPublisher publisher;
@Override
public List<DeviceInfo> getLedgerInfo(IcdParam param) {
@@ -81,7 +82,7 @@ class IcdServiceImpl implements IcdService {
monitorInfo.setDeviceId(dev.getId());
monitorInfo.setId(line.getLineId());
monitorInfo.setName(line.getName());
monitorInfo.setLineNo(String.valueOf(line.getClDid()));
monitorInfo.setLineNo(String.valueOf(line.getLineNo()));
monitorInfo.setVoltageLevel(line.getVolGrade() + "kV");
monitorInfo.setStatus(line.getRunStatus());
monitorInfo.setPtType(String.valueOf(line.getConType()));
@@ -118,7 +119,16 @@ class IcdServiceImpl implements IcdService {
// 第四种:从设备创建
else if (CollectionUtil.isNotEmpty(param.getDevice())) {
handleFromDeviceCreation(param);
//新增完监测点后,需要通知前置修改台账信息
}
}
public void sendFrontLedger() {
}
private boolean isAllIndicesNull(IcdLedgerParam param) {
@@ -187,7 +197,7 @@ class IcdServiceImpl implements IcdService {
line.setDevId(param.getDevMacMap().get(line.getDevMac()));
} else {
LambdaQueryWrapper<CsLinePO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(CsLinePO::getDeviceId,param.getDevIndex()).eq(CsLinePO::getClDid,line.getClDid()).eq(CsLinePO::getStatus,1);
wrapper.eq(CsLinePO::getDeviceId,param.getDevIndex()).eq(CsLinePO::getLineNo,line.getLineNo()).eq(CsLinePO::getStatus,1);
CsLinePO po4 = csLinePOService.getOne(wrapper);
if (ObjectUtil.isNotNull(po4)) {
throw new BusinessException("监测点线路号重复,请调整!");
@@ -206,7 +216,7 @@ class IcdServiceImpl implements IcdService {
List<CsLineParam> duplicates = new ArrayList<>();
for (CsLineParam device : devices) {
String combination = device.getDevMac() + "-" + device.getClDid();
String combination = device.getDevMac() + "-" + device.getLineNo();
if (seenCombinations.contains(combination)) {
// 发现重复,添加到重复列表
duplicates.add(device);

View File

@@ -1,19 +1,32 @@
package com.njcn;
import cn.hutool.core.date.DatePattern;
import com.njcn.csdevice.CsDeviceBootApplication;
import com.njcn.csdevice.pojo.dto.PqsCommunicateDto;
import com.njcn.csdevice.service.DeviceFtpService;
import com.njcn.csdevice.service.ICsCommunicateService;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.service.*;
import com.njcn.influx.pojo.po.PqsCommunicate;
import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.influx.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.InfluxDB;
import org.influxdb.dto.BatchPoints;
import org.influxdb.dto.Point;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertTrue;
@@ -33,6 +46,9 @@ public class AppTest{
@Autowired
private ICsCommunicateService csCommunicateService;
private final IRStatIntegrityDService statIntegrityDService;
private final IRStatOnlineRateDService statOnlineRateDService;
/**
* Rigorous Test :-)
@@ -62,15 +78,35 @@ public class AppTest{
}
}
@SneakyThrows
@Test
public void test1() {
}
@SneakyThrows
@Test
public void writeData() {
PqsCommunicateDto pqsCommunicateDto = new PqsCommunicateDto();
pqsCommunicateDto.setTime("2024-01-01 00:00:00");
pqsCommunicateDto.setTime("2025-08-04 18:00:00");
pqsCommunicateDto.setDevId("da7aa071bf89864bedea8833133676b7");
pqsCommunicateDto.setType(1);
pqsCommunicateDto.setDescription("通讯连接");
pqsCommunicateDto.setType(0);
pqsCommunicateDto.setDescription("通讯中断");
csCommunicateService.insertion(pqsCommunicateDto);
}
public static void main(String[] args) {
InfluxDbUtils influxDbUtils = new InfluxDbUtils("admin", "123456", "http://192.168.1.24:8086", "pqsbase_zl", "");
Map<String, String> tags = new HashMap<>();
tags.put("dev_id","da7aa071bf89864bedea8833133676b7");
Map<String,Object> fields = new HashMap<>();
fields.put("type",1);
fields.put("description","通讯正常");
long time = LocalDateTime.parse("2025-08-02 18:00:00", DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
Point point = influxDbUtils.pointBuilder("pqs_communicate", time, TimeUnit.MILLISECONDS, tags, fields);
BatchPoints batchPoints = BatchPoints.database(influxDbUtils.getDbName()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build();
batchPoints.point(point);
influxDbUtils.batchInsert(influxDbUtils.getDbName(), "", InfluxDB.ConsistencyLevel.ALL, TimeUnit.MILLISECONDS, Collections.singletonList(batchPoints.lineProtocol()));
}
}

View File

@@ -1,8 +1,13 @@
package com.njcn;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.IdUtil;
import com.njcn.access.utils.MqttUtil;
import com.njcn.csdevice.pojo.dto.PqsCommunicateDto;
import com.njcn.csdevice.service.DeviceFtpService;
import com.njcn.csdevice.service.IRStatIntegrityDService;
import com.njcn.csdevice.service.IRStatOnlineRateDService;
import com.njcn.csharmonic.pojo.param.StatisticsDataParam;
import com.njcn.influx.imapper.EvtDataMapper;
import com.njcn.influx.imapper.PqsCommunicateMapper;
import com.njcn.influx.pojo.po.PqsCommunicate;
@@ -12,9 +17,11 @@ import com.njcn.oss.utils.FileStorageUtil;
import lombok.SneakyThrows;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration;
import java.io.*;
import java.nio.file.Files;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@@ -33,6 +40,28 @@ public class DownloadFileTest extends BaseJunitTest{
private PqsCommunicateMapper pqsCommunicateMapper;
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
@Autowired
private IRStatIntegrityDService statIntegrityDService;
@Autowired
private IRStatOnlineRateDService statOnlineRateDService;
@Autowired
private MqttUtil mqttUtil;
@SneakyThrows
@Test
public void test() {
String nDId = "00B78D016AB5";
String clientName = "NJCN-" + nDId.substring(nDId.length() - 6);
long startTime = System.currentTimeMillis();
for (int i = 0; i < 200; i++) {
boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
System.out.println("当前第"+i+"次,结果为:" + mqttClient);
}
long end = System.currentTimeMillis();
System.out.println("时间差==" + (end - startTime) + "ms");
}
/**
* inflxudb写入
*/

View File

@@ -94,7 +94,7 @@ public class DataServiceImpl implements IDataService {
public List<RealTimeDataVo> getRealTimeData(DataParam param) {
List<RealTimeDataVo> result = new ArrayList<>();
//获取监测点使用的数据集
List<CsLinePO> finalCsLinePOList = csLineFeignClient.queryLineById(Arrays.asList(param.getLineId())).getData();
List<CsLinePO> finalCsLinePOList = csLineFeignClient.queryLineById(Collections.singletonList(param.getLineId())).getData();
CsDataSet csDataSet = csDataSetMapper.selectOne(new LambdaQueryWrapper<CsDataSet>().eq(CsDataSet::getId,finalCsLinePOList.get(0).getDataSetId()));
Double ct = finalCsLinePOList.get(0).getCtRatio();
Double pt = finalCsLinePOList.get(0).getPtRatio();

View File

@@ -121,7 +121,7 @@ public class RealDataServiceImpl implements RealDataService {
throw new BusinessException("装置离线,无法获取实时数据");
}
// 请求设备数据
askDeviceDataFeignClient.askCldRealData(csEquipmentDeliveryVO.getId(), lineId);
askDeviceDataFeignClient.askCldRealData(csEquipmentDeliveryVO.getId(),lineId,csEquipmentDeliveryVO.getNodeId());
// 更新Redis中的用户集合 - 使用工具方法消除重复代码
updateRedisUserSet("rtDataUserId:" + lineId, RequestUtil.getUserIndex(), 600L);
updateRedisUserSet("cldRtDataOverTime:" + lineId, RequestUtil.getUserIndex(), 5L);

View File

@@ -8,6 +8,7 @@ import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
@@ -27,6 +28,7 @@ public class InfluxDbParamUtil {
private final DicDataFeignClient dicDataFeignClient;
private final EquipmentFeignClient equipmentFeignClient;
private final DictTreeFeignClient dictTreeFeignClient;
/*表名换成了id本方法做转换*/
public String getTableNameByClassId(String classId){
@@ -50,6 +52,11 @@ public class InfluxDbParamUtil {
if(DataParam.portableDevType.equals(csEquipmentDeliveryDTOList.get(0).getDevType())){
return finalCsLinePOList.get(0).getClDid()+"";
}
//如果是云前置设备,直接返回clDid
boolean isCLdDevice = DicDataEnum.DEV_CLD.getCode().equals(dictTreeFeignClient.queryById(csEquipmentDeliveryDTOList.get(0).getDevType()).getData().getCode());
if(isCLdDevice){
return String.valueOf(finalCsLinePOList.get(0).getLineNo());
}
//之后的逻辑还是按照原来的不变
String position = csLineFeignClient.getPositionById(lineId).getData();
if (Objects.isNull(position)){

View File

@@ -1,5 +1,6 @@
//package com.njcn;
//
//import com.njcn.influx.utils.InfluxDbUtils;
//import com.njcn.influxdb.param.InfluxDBPublicParam;
//import com.njcn.influxdb.utils.InfluxDbUtils;
//import lombok.AllArgsConstructor;