新增设备运行趋势功能

This commit is contained in:
xy
2026-02-11 11:20:47 +08:00
parent 6e0a36fd80
commit 844f30965e
6 changed files with 41 additions and 31 deletions

View File

@@ -1,22 +1,14 @@
package com.njcn.csdevice.api;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
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;
@@ -72,5 +64,5 @@ public interface EquipmentFeignClient {
HttpResult<Boolean> updateCldDevStatus(@RequestParam("nodeId") String nodeId, @RequestParam("processNo") Integer processNo);
@PostMapping("/flipCldDevStatus")
HttpResult<Boolean> flipCldDevStatus(@RequestParam("devId") String devId, @RequestParam("status") Integer status);
HttpResult<Boolean> flipCldDevStatus(@RequestParam("date") String date, @RequestParam("devId") String devId, @RequestParam("status") Integer status);
}

View File

@@ -97,7 +97,7 @@ public class EquipmentFeignClientFallbackFactory implements FallbackFactory<Equi
}
@Override
public HttpResult<Boolean> flipCldDevStatus(String devId, Integer status) {
public HttpResult<Boolean> flipCldDevStatus(String date, String devId, Integer status) {
log.error("{}异常,降级处理,异常为:{}","云前置设备状态翻转",cause.toString());
throw new BusinessException(finalExceptionEnum);
}

View File

@@ -395,13 +395,14 @@ public class EquipmentDeliveryController extends BaseController {
@PostMapping("/flipCldDevStatus")
@ApiOperation("云前置设备状态翻转")
@ApiImplicitParams({
@ApiImplicitParam(name = "devId", value = "设备id", required = true),
@ApiImplicitParam(name = "status", value = "状态", required = true)
@ApiImplicitParam(name = "date", value = "时间", required = true),
@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){
public HttpResult<Boolean> flipCldDevStatus(@RequestParam("date") String date, @RequestParam("devId") String devId, @RequestParam("status") Integer status){
String methodDescribe = getMethodDescribe("flipCldDevStatus");
csEquipmentDeliveryService.flipCldDevStatus(devId,status);
csEquipmentDeliveryService.flipCldDevStatus(date,devId,status);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}

View File

@@ -179,10 +179,11 @@ public interface CsEquipmentDeliveryService extends IService<CsEquipmentDelivery
/**
* 根据设备id和状态来修改设备运行状态同时修改设备下的监测点的状态
* @param date
* @param devId
* @param status
*/
void flipCldDevStatus(String devId, Integer status);
void flipCldDevStatus(String date, String devId, Integer status);
/**
* 根据项目id获取设备列表

View File

@@ -7,6 +7,7 @@ import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
@@ -29,6 +30,7 @@ import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper;
import com.njcn.csdevice.mapper.CsLedgerMapper;
import com.njcn.csdevice.mapper.CsSoftInfoMapper;
import com.njcn.csdevice.mapper.CsTerminalLogsMapper;
import com.njcn.csdevice.pojo.dto.PqsCommunicateDto;
import com.njcn.csdevice.pojo.param.*;
import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
@@ -67,6 +69,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -103,7 +106,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
private final CsDevModelService csDevModelService;
private final CsLedgerMapper csLedgerMapper;
private final CsTerminalLogsMapper csTerminalLogsMapper;
private final ICsCommunicateService csCommunicateService;
@Override
public void refreshDeviceDataCache() {
@@ -437,6 +440,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
addDataSet(dataSetList, item, "实时数据", "realtimedata");
addDataSet(dataSetList, item, "暂态事件", "event");
}
addDataSet(dataSetList, item, "运行趋势", "devRunTrend");
deviceManagerVo.setDataLevel(item.getDataLevel());
}
deviceManagerVo.setDataSetList(dataSetList);
@@ -939,17 +943,17 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
List<CsEquipmentDeliveryPO> devList = this.list(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(devList)) {
//修改设备运行状态
devList.forEach(item->{item.setRunStatus(1);});
devList.forEach(item->{
item.setRunStatus(1);
insertPqsCommunicateRecord(LocalDateTime.now().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)), item.getNdid(), 0);
});
this.updateBatchById(devList);
//修改监测点运行状态
//List<String> devIdList = devList.stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList());
//List<CsLinePO> lineList = csLinePOService.getLinesByDevList(devIdList);
//csLinePOService.updateCldLineStatus(lineList,2);
}
}
@Override
public void flipCldDevStatus(String devId, Integer status) {
@Transactional(rollbackFor = Exception.class)
public void flipCldDevStatus(String time, String devId, Integer status) {
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getId,devId)
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
@@ -958,13 +962,22 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
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);
//修改设备的运行状态则录入influxdb表数据
int communicateType = status == 2 ? 1 : 0;
insertPqsCommunicateRecord(time, po.getNdid(), communicateType);
}
}
// 时序数据库写入数据
private void insertPqsCommunicateRecord(String time, String devId, Integer status) {
PqsCommunicateDto pqsCommunicateDto = new PqsCommunicateDto();
pqsCommunicateDto.setTime(time);
pqsCommunicateDto.setDevId(devId);
pqsCommunicateDto.setType(status);
pqsCommunicateDto.setDescription(status == 0 ? "通讯中断" : "通讯正常");
csCommunicateService.insertion(pqsCommunicateDto);
}
@Override
public List<CsEquipmentDeliveryPO> getDevListByProjectId(String projectId) {
QueryWrapper<CsLedger> csLedgerQueryWrapper = new QueryWrapper();

View File

@@ -1,13 +1,13 @@
package com.njcn.csdevice.service.impl;
import cn.hutool.core.date.DatePattern;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.csdevice.mapper.CsEquipmentDeliveryMapper;
import com.njcn.csdevice.param.LineCountEvaluateParam;
import com.njcn.csdevice.pojo.dto.PqsCommunicateDto;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.service.CsEquipmentDeliveryService;
import com.njcn.csdevice.service.ICsCommunicateService;
import com.njcn.influx.imapper.PqsCommunicateMapper;
import com.njcn.influx.pojo.dto.StatisticalDataDTO;
import com.njcn.influx.pojo.po.PqsCommunicate;
import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.influx.utils.InfluxDbUtils;
@@ -39,7 +39,7 @@ import java.util.concurrent.TimeUnit;
public class InfluxdbCsCommunicateServiceImpl implements ICsCommunicateService {
private final InfluxDbUtils influxDbUtils;
private final CsEquipmentDeliveryService csEquipmentDeliveryService;
private final CsEquipmentDeliveryMapper csEquipmentDeliveryMapper;
@Resource
private PqsCommunicateMapper pqsCommunicateMapper;
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
@@ -111,7 +111,10 @@ public class InfluxdbCsCommunicateServiceImpl implements ICsCommunicateService {
@Override
public void insertion(PqsCommunicateDto pqsCommunicateDto) {
//根据NDID获取装置信息
CsEquipmentDeliveryPO po = csEquipmentDeliveryService.findDevByNDid(pqsCommunicateDto.getDevId());
LambdaQueryWrapper<CsEquipmentDeliveryPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNdid,pqsCommunicateDto.getDevId()).ne(CsEquipmentDeliveryPO::getRunStatus,0);
CsEquipmentDeliveryPO po = csEquipmentDeliveryMapper.selectOne(lambdaQueryWrapper);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class);
influxQueryWrapper.eq(PqsCommunicate::getDevId,po.getId()).timeDesc().limit(1);
List<PqsCommunicate> pqsCommunicates = pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper);
@@ -138,7 +141,7 @@ public class InfluxdbCsCommunicateServiceImpl implements ICsCommunicateService {
.select(PqsCommunicate::getDevId)
.select(PqsCommunicate::getDescription)
.select(PqsCommunicate::getType)
.between(PqsCommunicate::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.between(PqsCommunicate::getTime, lineParam.getStartTime() + " 00:00:00", lineParam.getEndTime() + " 23:59:59")
.timeAsc();
return pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper);
}