治理设备新增模块状态查询功能

This commit is contained in:
xy
2025-07-03 08:58:12 +08:00
parent cd07f8bee3
commit 4ee41b833b
52 changed files with 2088 additions and 51 deletions

View File

@@ -9,6 +9,7 @@ import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.pojo.vo.DataGroupEventVO;
import com.njcn.csharmonic.param.CsEventUserQueryPage;
import com.njcn.csharmonic.param.CsEventUserQueryParam;
import com.njcn.csharmonic.param.DataParam;
import com.njcn.csharmonic.pojo.po.CsEventPO;
import com.njcn.csharmonic.pojo.vo.CsEventVO;
import com.njcn.csharmonic.pojo.vo.EventDetailVO;
@@ -23,7 +24,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -91,7 +91,6 @@ public class CsEventController extends BaseController {
public void getFileZip(String eventId, HttpServletResponse response) {
String methodDescribe = getMethodDescribe("getFileZip");
csEventPOService.getFileZip(eventId,response);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@@ -112,4 +111,14 @@ public class CsEventController extends BaseController {
CsEventPO po = csEventPOService.lambdaQuery().eq(CsEventPO::getDeviceId,csEventPO.getDeviceId()).eq(CsEventPO::getTag,csEventPO.getTag()).eq(CsEventPO::getStartTime,csEventPO.getStartTime()).one();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryByModelId")
@ApiOperation("获取各模块事件")
public HttpResult<List<CsEventPO>> queryByModelId(@RequestBody DataParam param) {
String methodDescribe = getMethodDescribe("queryByModelId");
List<CsEventPO> list = csEventPOService.queryByModelId(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -6,6 +6,7 @@ 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.pojo.vo.DataGroupEventVO;
import com.njcn.csdevice.pojo.vo.EachModuleVO;
import com.njcn.csdevice.pojo.vo.RecordVo;
import com.njcn.csharmonic.param.DataParam;
import com.njcn.csharmonic.pojo.vo.RealTimeDataVo;
@@ -62,4 +63,24 @@ public class DataController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/allModelData")
@ApiOperation("设备监控-》模块数据")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<EachModuleVO>> allModelData(@RequestBody DataParam param) {
String methodDescribe = getMethodDescribe("allModelData");
List<EachModuleVO> list = dataService.allModelData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getModuleState")
@ApiOperation("apf-》获取模块状态")
@ApiImplicitParam(name = "id", value = "id", required = true)
public HttpResult<List<EachModuleVO>> getModuleState(@RequestParam("id") String id) {
String methodDescribe = getMethodDescribe("getModuleState");
List<EachModuleVO> list = dataService.getModuleState(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -6,7 +6,8 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csharmonic.pojo.param.StatisticsDataParam;
import com.njcn.csharmonic.pojo.vo.LineIntegrityVo;
import com.njcn.csharmonic.pojo.vo.DataVo;
import com.njcn.csharmonic.pojo.vo.HalfMonthReportVO;
import com.njcn.csharmonic.service.IStatisticsDataDataService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
@@ -34,12 +35,32 @@ public class StatisticsDataDataController extends BaseController {
private final IStatisticsDataDataService statisticsDataDataService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/devData")
@ApiOperation("装置数据统计(监测点完整性、装置在线率)")
@PostMapping("/lineIntegrity")
@ApiOperation("监测点数据完整性")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<LineIntegrityVo>> getDevData(@RequestBody StatisticsDataParam param) {
String methodDescribe = getMethodDescribe("getDevData");
List<LineIntegrityVo> list = statisticsDataDataService.getDevData(param);
public HttpResult<List<DataVo>> getLineIntegrity(@RequestBody StatisticsDataParam param) {
String methodDescribe = getMethodDescribe("getLineIntegrity");
List<DataVo> list = statisticsDataDataService.getLineIntegrity(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/devOnlineRate")
@ApiOperation("装置在线率")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<DataVo>> getDevOnlineRate(@RequestBody StatisticsDataParam param) {
String methodDescribe = getMethodDescribe("getDevOnlineRate");
List<DataVo> list = statisticsDataDataService.getDevOnlineRate(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/halfMonthReport")
@ApiOperation("半月报功能")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<List<HalfMonthReportVO>> getHalfMonthReport(@RequestBody StatisticsDataParam param) {
String methodDescribe = getMethodDescribe("getHalfMonthReport");
List<HalfMonthReportVO> result = statisticsDataDataService.getHalfMonthReport(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.csdevice.pojo.vo.DataGroupEventVO;
import com.njcn.csharmonic.param.CsEventUserQueryPage;
import com.njcn.csharmonic.param.CsEventUserQueryParam;
import com.njcn.csharmonic.param.DataParam;
import com.njcn.csharmonic.pojo.po.CsEventPO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csharmonic.pojo.vo.CsEventVO;
@@ -52,4 +53,7 @@ public interface CsEventPOService extends IService<CsEventPO>{
void getFileZip(String eventId,HttpServletResponse response);
List<DataGroupEventVO> queryEventList(LocalDateTime startDate, LocalDateTime endDate, String lineId);
List<CsEventPO> queryByModelId(DataParam param);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.csharmonic.service;
import com.njcn.csdevice.pojo.vo.DataGroupEventVO;
import com.njcn.csdevice.pojo.vo.EachModuleVO;
import com.njcn.csdevice.pojo.vo.RecordVo;
import com.njcn.csharmonic.param.DataParam;
import com.njcn.csharmonic.pojo.vo.RealTimeDataVo;
@@ -29,4 +30,12 @@ public interface IDataService {
*/
List<DataGroupEventVO> getEventByItem(String id);
/**
* 获取治理监测点下所有模块的事件数据
* @param param
*/
List<EachModuleVO> allModelData(DataParam param);
List<EachModuleVO> getModuleState(String id);
}

View File

@@ -1,7 +1,8 @@
package com.njcn.csharmonic.service;
import com.njcn.csharmonic.pojo.param.StatisticsDataParam;
import com.njcn.csharmonic.pojo.vo.LineIntegrityVo;
import com.njcn.csharmonic.pojo.vo.DataVo;
import com.njcn.csharmonic.pojo.vo.HalfMonthReportVO;
import java.util.List;
@@ -11,8 +12,20 @@ import java.util.List;
public interface IStatisticsDataDataService {
/**
* 数据完整性、终端在线率
* 数据完整性
* @param param
*/
List<LineIntegrityVo> getDevData(StatisticsDataParam param);
List<DataVo> getLineIntegrity(StatisticsDataParam param);
/**
* 装置在线率
* @param param
*/
List<DataVo> getDevOnlineRate(StatisticsDataParam param);
/**
* 治理设备半月报功能
* @param param
*/
List<HalfMonthReportVO> getHalfMonthReport(StatisticsDataParam param);
}

View File

@@ -10,6 +10,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.CsLedgerFeignClient;
import com.njcn.csdevice.api.CsLineFeignClient;
@@ -17,10 +18,14 @@ import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.pojo.dto.DevDetailDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.DataGroupEventVO;
import com.njcn.csharmonic.mapper.CsEventPOMapper;
import com.njcn.csharmonic.param.CsEventUserQueryPage;
import com.njcn.csharmonic.pojo.vo.CsEventVO;
import com.njcn.csharmonic.param.CsEventUserQueryParam;
import com.njcn.csharmonic.param.DataParam;
import com.njcn.csharmonic.pojo.po.CsEventPO;
import com.njcn.csharmonic.pojo.vo.CsEventVO;
import com.njcn.csharmonic.pojo.vo.EventDetailVO;
import com.njcn.csharmonic.service.CsEventPOService;
import com.njcn.csharmonic.service.CsEventUserPOService;
import com.njcn.event.file.component.WaveFileComponent;
import com.njcn.event.file.component.WavePicComponent;
@@ -37,27 +42,22 @@ import com.njcn.system.api.EleEvtFeignClient;
import com.njcn.system.api.EpdFeignClient;
import com.njcn.system.pojo.po.EleEpdPqd;
import com.njcn.system.pojo.po.EleEvtParm;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.csharmonic.mapper.CsEventPOMapper;
import com.njcn.csharmonic.pojo.po.CsEventPO;
import com.njcn.csharmonic.service.CsEventPOService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.*;
import java.io.InputStream;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -221,6 +221,30 @@ public class CsEventPOServiceImpl extends ServiceImpl<CsEventPOMapper, CsEventPO
return dataGroupEventVOList;
}
@Override
public List<CsEventPO> queryByModelId(DataParam param) {
List<CsEventPO> pos = new ArrayList<>();
LambdaQueryWrapper<CsEventPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEventPO::getLineId,param.getLineId())
.eq(CsEventPO::getClDid,param.getClDid())
.between(CsEventPO::getStartTime,param.getStartTime()+" 00:00:00",param.getEndTime()+" 23:59:59")
.orderByDesc(CsEventPO::getStartTime);
//判断当前用户,管理员查看所有告警;普通用户可以查看二级、三级告警(一级看不了)
String userRole = RequestUtil.getUserRole();
String trimmedString = userRole.substring(1, userRole.length() - 1).replace("\"", "");
List<String> list = Arrays.asList(trimmedString.split(","));
if (!list.contains("tourist")) {
pos = this.baseMapper.selectList(lambdaQueryWrapper);
if (list.contains("app_vip_user")) {
pos = pos.stream()
.filter(entity -> entity.getLevel() != 1)
.collect(Collectors.toList());
}
}
pos = list.contains("tourist") ? new ArrayList<>() : pos;
return pos;
}
/**
* @return WaveDataDTO

View File

@@ -4,33 +4,46 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.tocrhz.mqtt.publisher.MqttPublisher;
import com.njcn.access.api.CsTopicFeignClient;
import com.njcn.access.enums.AccessEnum;
import com.njcn.access.enums.TypeEnum;
import com.njcn.access.pojo.dto.AskDataDto;
import com.njcn.access.pojo.dto.ReqAndResDto;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.api.WlRecordFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.param.WlRecordParam;
import com.njcn.csdevice.pojo.param.WlRecordTemplete;
import com.njcn.csdevice.pojo.po.CsDataSet;
import com.njcn.csdevice.pojo.po.CsLedger;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.po.WlRecord;
import com.njcn.csdevice.pojo.vo.DataGroupEventVO;
import com.njcn.csdevice.pojo.vo.EachModuleVO;
import com.njcn.csdevice.pojo.vo.RecordVo;
import com.njcn.csdevice.utils.DataChangeUtil;
import com.njcn.csharmonic.api.EventFeignClient;
import com.njcn.csharmonic.constant.HarmonicConstant;
import com.njcn.csharmonic.mapper.CsDataSetMapper;
import com.njcn.csharmonic.param.DataParam;
import com.njcn.csharmonic.pojo.po.CsEventPO;
import com.njcn.csharmonic.pojo.vo.RealTimeDataVo;
import com.njcn.csharmonic.service.CsEventPOService;
import com.njcn.csharmonic.service.IDataService;
import com.njcn.csharmonic.util.InfluxDbParamUtil;
import com.njcn.influx.pojo.bo.CommonQueryParam;
import com.njcn.influx.pojo.dto.EventDataSetDTO;
import com.njcn.influx.pojo.dto.StatisticalDataDTO;
import com.njcn.influx.service.CommonService;
import com.njcn.influx.service.EvtDataService;
import com.njcn.system.api.*;
import com.njcn.redis.pojo.enums.AppRedisKey;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.CsStatisticalSetFeignClient;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.system.api.EleEvtFeignClient;
import com.njcn.system.api.EpdFeignClient;
import com.njcn.system.pojo.po.EleEpdPqd;
import com.njcn.system.pojo.po.EleEvtParm;
import com.njcn.system.pojo.vo.DictTreeVO;
@@ -40,6 +53,9 @@ import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@@ -67,6 +83,11 @@ public class DataServiceImpl implements IDataService {
private final EvtDataService evtDataService;
private final EleEvtFeignClient eleEvtFeignClient;
private final EquipmentFeignClient equipmentFeignClient;
private final RedisUtil redisUtil;
private static Integer mid = 1;
private final CsTopicFeignClient csTopicFeignClient;
private final MqttPublisher publisher;
private static final List<String> ONLINE_STATES = Arrays.asList("运行", "停止", "故障");
@Override
public List<RealTimeDataVo> getRealTimeData(DataParam param) {
@@ -202,6 +223,175 @@ public class DataServiceImpl implements IDataService {
return result;
}
@Override
public List<EachModuleVO> allModelData(DataParam param) {
List<EachModuleVO> result = new ArrayList<>();
//根据监测点查询装置信息
CsEquipmentDeliveryPO po = equipmentFeignClient.getDevByLineId(param.getLineId()).getData();
if (ObjectUtil.isNotNull(po.getModuleNumber())) {
CommonQueryParam commonQueryParam = new CommonQueryParam();
commonQueryParam.setColumnName("Apf_ModWorkingSts");
commonQueryParam.setResultName("value");
commonQueryParam.setTableName("apf_data");
commonQueryParam.setStartTime(param.getEndTime()+" 00:00:00");
commonQueryParam.setEndTime(param.getEndTime()+" 23:59:59");
commonQueryParam.setLineId(param.getLineId());
commonQueryParam.setDataType("Apf_ModType");
commonQueryParam.setProcess(Integer.toString(po.getProcess()));
for (int i = 1; i <= po.getModuleNumber(); i++) {
EachModuleVO moduleVO = new EachModuleVO();
moduleVO.setModuleName("模块"+i);
List<EachModuleVO.harmonicVo> list1 = new ArrayList<>();
commonQueryParam.setClDid(Integer.toString(i));
//获取模块数据
List<StatisticalDataDTO> dto = commonService.getEachModule(commonQueryParam);
if (CollectionUtil.isNotEmpty(dto)) {
dto.forEach(item->{
EachModuleVO.harmonicVo vo = new EachModuleVO.harmonicVo();
vo.setTime(LocalDateTime.ofInstant(item.getTime().minus(8, ChronoUnit.HOURS), ZoneId.systemDefault()));
vo.setStateDesc(channelState(item.getValue()));
vo.setDataType(0);
list1.add(vo);
});
} else {
moduleVO.setModuleState("离线");
}
//获取模块事件
LambdaQueryWrapper<CsEventPO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(CsEventPO::getLineId, param.getLineId())
.between(CsEventPO::getStartTime,param.getStartTime()+" 00:00:00",param.getEndTime()+" 23:59:59")
.eq(CsEventPO::getClDid,i)
.eq(CsEventPO::getProcess,Integer.toString(po.getProcess()))
.orderByAsc(CsEventPO::getStartTime);
List<CsEventPO> eventList = csEventPOService.list(lambdaQueryWrapper);
if (CollectionUtil.isNotEmpty(eventList)) {
eventList.forEach(item->{
EleEpdPqd epdPqd = epdFeignClient.findByName(item.getTag()).getData();
EachModuleVO.harmonicVo vo = new EachModuleVO.harmonicVo();
vo.setTime(item.getStartTime());
vo.setStateDesc(channelState2(item.getTag()));
vo.setEventCode(item.getTag());
vo.setDataType(1);
if (ObjectUtil.isNotNull(epdPqd)) {
vo.setEventName(epdPqd.getShowName());
} else {
vo.setEventName(item.getTag());
}
list1.add(vo);
});
}
if (CollectionUtil.isNotEmpty(list1)) {
List<EachModuleVO.harmonicVo> dataList = list1.stream()
.sorted(Comparator.comparing(EachModuleVO.harmonicVo::getTime))
.collect(Collectors.toList());
moduleVO.setDataList(dataList);
EachModuleVO.harmonicVo last = dataList.get(dataList.size() - 1);
if (Objects.equals(last.getDataType(),0)) {
moduleVO.setModuleState(last.getStateDesc());
} else if (Objects.equals(last.getDataType(),1)) {
moduleVO.setModuleState(Objects.equals(last.getStateDesc(),"Alm_Apf_ModDisConnect") ? "离线" : "运行");
}
}
result.add(moduleVO);
}
}
return result;
}
@Override
public List<EachModuleVO> getModuleState(String nDid) {
List<EachModuleVO> result = new ArrayList<>();
try {
CsEquipmentDeliveryPO po = equipmentFeignClient.findDevByNDid(nDid).getData();
for (int i = 1; i <= po.getModuleNumber(); i++) {
EachModuleVO moduleVO = new EachModuleVO();
moduleVO.setModuleName("模块"+i);
Object object = redisUtil.getObjectByKey(AppRedisKey.DEVICE_MID + nDid);
if (!Objects.isNull(object)) {
mid = (Integer) object;
}
ReqAndResDto.Req dto = askApfModuleData(mid,i,i);
String version = csTopicFeignClient.find(nDid).getData();
publisher.send("/Pfm/DevCmd/" + version + "/" + nDid, new Gson().toJson(dto), 1, false);
Thread.sleep(800);
Object redisUtilObjectByKey = redisUtil.getObjectByKey("ApfRtData:" + mid);
if (ObjectUtil.isNotNull(redisUtilObjectByKey)) {
Double value = Double.parseDouble(redisUtilObjectByKey.toString());
moduleVO.setModuleState(channelState(value));
} else {
moduleVO.setModuleState("离线");
}
mid = mid + 1;
if (mid > 10000) {
mid = 1;
}
redisUtil.saveByKey(AppRedisKey.DEVICE_MID + nDid,mid);
result.add(moduleVO);
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return result;
}
public ReqAndResDto.Req askApfModuleData(Integer mid, Integer clDId, Integer idx) {
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
reqAndResParam.setMid(mid);
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
reqAndResParam.setType(Integer.parseInt(TypeEnum.TYPE_6.getCode()));
reqAndResParam.setExpire(-1);
//fixme 目前设备都是直连设备因此did就是其本身默认为1后期涉及网关此did是需要动态变化的
reqAndResParam.setDid(1);
AskDataDto askDataDto = new AskDataDto();
askDataDto.setCldid(clDId);
askDataDto.setDataAttr(1);
askDataDto.setDataType(15);
askDataDto.setOperate(1);
askDataDto.setStartTime(-1);
askDataDto.setEndTime(-1);
askDataDto.setDsNameIdx(idx);
reqAndResParam.setMsg(askDataDto);
return reqAndResParam;
}
public String channelState(Double value) {
String str;
int val = (int) Math.round(value);
switch (val) {
case 0:
str = "离线";
break;
case 1:
str = "运行";
break;
case 2:
str = "运行(停止)";
break;
case 3:
str = "运行(故障)";
break;
default:
str = "无状态";
break;
}
return str;
}
public String channelState2(String code) {
String str;
if ("Alm_Apf_ModDisConnect".equals(code)) {
str = "离线";
} else {
str = "运行";
}
return str;
}
//基础数据
public RealTimeDataVo getBaseData(EleEpdPqd item2, String lineId, String dataLevel, String csDataSetLevel,Double pt, Double ct) {
RealTimeDataVo vo = new RealTimeDataVo();

View File

@@ -3,20 +3,26 @@ package com.njcn.csharmonic.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.api.IntegrityFeignClient;
import com.njcn.csdevice.api.OnlineRateFeignClient;
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.po.RStatIntegrityD;
import com.njcn.csdevice.pojo.po.RStatOnlineRateD;
import com.njcn.csharmonic.pojo.param.StatisticsDataParam;
import com.njcn.csharmonic.pojo.vo.LineIntegrityVo;
import com.njcn.csharmonic.pojo.vo.DataVo;
import com.njcn.csharmonic.pojo.vo.HalfMonthReportVO;
import com.njcn.csharmonic.service.IStatisticsDataDataService;
import com.njcn.influx.pojo.bo.CommonQueryParam;
import com.njcn.influx.pojo.dto.StatisticalDataDTO;
import com.njcn.influx.service.CommonService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -30,10 +36,12 @@ public class StatisticsDataDataServiceImpl implements IStatisticsDataDataService
private final EquipmentFeignClient equipmentFeignClient;
private final CsLineFeignClient csLineFeignClient;
private final CommonService commonService;
private final IntegrityFeignClient integrityFeignClient;
private final OnlineRateFeignClient onlineRateFeignClient;
@Override
public List<LineIntegrityVo> getDevData(StatisticsDataParam param) {
List<LineIntegrityVo> result = new ArrayList<>();
public List<DataVo> getLineIntegrity(StatisticsDataParam param) {
List<DataVo> result = new ArrayList<>();
//获取库中正常的所有装置
List<CsEquipmentDeliveryPO> devList = equipmentFeignClient.getAll().getData();
if (CollectionUtil.isNotEmpty(devList)) {
@@ -45,9 +53,9 @@ public class StatisticsDataDataServiceImpl implements IStatisticsDataDataService
csLinePOList.forEach(item->{
//应收数据
int dueCount = 1440 / item.getLineInterval();
LineIntegrityVo vo = new LineIntegrityVo();
DataVo vo = new DataVo();
StatisticalDataDTO statisticalDataDTO;
Integer process = devMap.get(item.getDevId()).getProcess();
Integer process = devMap.get(item.getDeviceId()).getProcess();
//治理监测点
if (item.getClDid() == 0) {
statisticalDataDTO = commonService.getCounts(item.getLineId(),"apf_data","Apf_Freq","frequency","M","avg",item.getClDid().toString(),process.toString(),param.getStartTime(),param.getEndTime());
@@ -56,19 +64,89 @@ public class StatisticsDataDataServiceImpl implements IStatisticsDataDataService
else {
statisticalDataDTO = commonService.getCounts(item.getLineId(),"pqd_data","Pq_Freq","frequency","M","avg",item.getClDid().toString(),process.toString(),param.getStartTime(),param.getEndTime());
}
vo.setDevId(item.getDevId());
vo.setDevName(devMap.get(item.getDevId()).getName());
vo.setDevId(item.getDeviceId());
vo.setDevName(devMap.get(item.getDeviceId()).getName());
vo.setLineId(item.getLineId());
vo.setLineName(item.getName());
if (Objects.isNull(statisticalDataDTO.getFrequency())) {
vo.setLineIntegrity(null);
} else {
vo.setLineIntegrity(Integer.parseInt(statisticalDataDTO.getFrequency()) / dueCount * 100.0);
}
vo.setLineIntegrity(
statisticalDataDTO == null || statisticalDataDTO.getFrequency() == null
? 0 : Integer.parseInt(statisticalDataDTO.getFrequency()) / dueCount * 100.0
);
result.add(vo);
});
}
}
return result;
}
@Override
public List<DataVo> getDevOnlineRate(StatisticsDataParam param) {
return Collections.emptyList();
}
@Override
public List<HalfMonthReportVO> getHalfMonthReport(StatisticsDataParam param) {
List<HalfMonthReportVO> result = new ArrayList<>();
//获取装置
List<CsEquipmentDeliveryPO> equipmentDeliveryList = equipmentFeignClient.getAll().getData();
if (CollectionUtil.isNotEmpty(equipmentDeliveryList)) {
//获取监测点集合
List<String> devList = equipmentDeliveryList.stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList());
List<CsLinePO> csLineList = csLineFeignClient.getLinesByDevList(devList).getData();
if (CollectionUtil.isNotEmpty(csLineList)) {
Map<String,List<CsLinePO>> devMap = csLineList.stream().collect(Collectors.groupingBy(CsLinePO::getDeviceId));
List<String> lineList = csLineList.stream().map(CsLinePO::getLineId).collect(Collectors.toList());
List<String> deviceList = csLineList.stream().map(CsLinePO::getDeviceId).collect(Collectors.toList());
//获取监测点数据完整性
List<RStatIntegrityD> list1 = integrityFeignClient.list(lineList,param.getStartTime(),param.getEndTime()).getData();
//获取终端在线率
List<RStatOnlineRateD> list2 = onlineRateFeignClient.list(deviceList,param.getStartTime(),param.getEndTime()).getData();
equipmentDeliveryList.forEach(dev->{
List<CsLinePO> list = devMap.get(dev.getId());
if (CollectionUtil.isNotEmpty(list)) {
list.forEach(line->{
HalfMonthReportVO vo = new HalfMonthReportVO();
vo.setEngineeringName("工程名称");
vo.setProjectName("项目名称");
vo.setDevName(dev.getName());
vo.setDevType(dev.getDevType());
vo.setMac(dev.getMac());
vo.setOperationalStatus(dev.getUsageStatus() == 0 ? "停运" : "在运");
//fixme 先用设备登记时间记作投运时间
vo.setOperationalTime(dev.getCreateTime());
vo.setLineName(line.getName());
vo.setCommunicationStatus(dev.getRunStatus() == 1 ? "离线" : "在线");
vo.setLatestTime(LocalDateTime.now());
List<RStatIntegrityD> l1 = list1.stream().filter(item -> item.getLineIndex().equals(line.getLineId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(l1)) {
double ratio = BigDecimal.valueOf(
l1.stream().mapToDouble(RStatIntegrityD::getRealTime).sum() * 100.0
).divide(
BigDecimal.valueOf(l1.stream().mapToDouble(RStatIntegrityD::getDueTime).sum()),
2, RoundingMode.HALF_UP
).doubleValue();
vo.setIntegrity(ratio);
} else {
vo.setIntegrity(0.0);
}
List<RStatOnlineRateD> l2 = list2.stream().filter(item -> item.getDevIndex().equals(dev.getId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(l2)) {
int onlineMin = l2.stream().mapToInt(RStatOnlineRateD::getOnlineMin).sum();
double ratio = new BigDecimal(onlineMin * 100.0 / (1440 * l2.size())).setScale(2,RoundingMode.HALF_UP).doubleValue();
vo.setOnlineRate(ratio);
} else {
vo.setOnlineRate(0.0);
}
result.add(vo);
});
}
});
//获取最新数据时间
}
}
return result;
}
}