代码调整

This commit is contained in:
2022-11-07 09:11:09 +08:00
parent c53cd9b2dc
commit 0e5f9cc8df
51 changed files with 1469 additions and 851 deletions

View File

@@ -1,51 +0,0 @@
package com.njcn.harmonic.controller;
import com.njcn.common.pojo.annotation.OperateInfo;
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.harmonic.pojo.param.AlgorithmSearchParam;
import com.njcn.harmonic.service.DataExceptionService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
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;
/**
* @author qijian
* @date 2022/10/26
* 数据是否异常
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/dataException")
@Api(tags = "数据是否异常")
@AllArgsConstructor
public class DataExceptionController extends BaseController {
private final DataExceptionService dataExceptionService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/lineDataException")
@ApiOperation("监测点数据是否异常")
@ApiImplicitParam(name = "algorithmSearchParam", value = "算法通用查询参数", required = true)
public HttpResult<Boolean> lineDataException(@RequestBody @Validated AlgorithmSearchParam algorithmSearchParam) {
String methodDescribe = getMethodDescribe("lineDataException");
boolean res = dataExceptionService.lineDataException(algorithmSearchParam);
if(res){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
}
}

View File

@@ -1,51 +0,0 @@
package com.njcn.harmonic.controller;
import com.njcn.common.pojo.annotation.OperateInfo;
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.harmonic.pojo.param.AlgorithmSearchParam;
import com.njcn.harmonic.service.DataIntegrityRateService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
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;
/**
* @author qijian
* @date 2022/10/26
* 数据完整率算法
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/dataIntegrityRate")
@Api(tags = "数据完整率算法")
@AllArgsConstructor
public class DataIntegrityRateController extends BaseController {
private final DataIntegrityRateService dataIntegrityRateService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/lineDataIntegrityRate")
@ApiOperation("监测点日数据完整率")
@ApiImplicitParam(name = "algorithmSearchParam", value = "算法通用查询参数", required = true)
public HttpResult<Boolean> lineDataIntegrityRate(@RequestBody @Validated AlgorithmSearchParam algorithmSearchParam) {
String methodDescribe = getMethodDescribe("lineDataIntegrityRate");
boolean res = dataIntegrityRateService.lineDataIntegrityRate(algorithmSearchParam);
if(res){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
}
}

View File

@@ -6,8 +6,13 @@ 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.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import com.njcn.harmonic.service.IPollutionService;
import com.njcn.harmonic.service.PollutionSubstationService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
@@ -41,6 +46,9 @@ public class PollutionSubstationController extends BaseController {
private final PollutionSubstationService pollutionSubstationService;
private final IPollutionService pollutionService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPollutionSubstationData")
@ApiOperation("按变电站及指标类型展示污染")
@@ -52,5 +60,37 @@ public class PollutionSubstationController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult (CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/deptSubstationRelations")
@ApiOperation("污区图-部门变电站关系")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<List<PollutionVO>> deptSubstationRelations(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("deptSubstationRelations");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
List<PollutionVO> list = pollutionSubstationService.getDeptSubstationRelations(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSubstationInfoById")
@ApiOperation("污区图-根据部门获取变电站详情")
@ApiImplicitParam(name = "param", value = "部门参数", required = true)
public HttpResult<List<PollutionSubstationDTO>> getSubstationInfoById(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("getSubstationInfoById");
LogUtil.njcnDebug(log, "{},部门参数:{}", methodDescribe, param);
List<PollutionSubstationDTO> list = pollutionSubstationService.getSubstationInfoById(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLineInfoById")
@ApiOperation("污区图-根据变电站获取监测点详情")
@ApiImplicitParam(name = "param", value = "变电站参数", required = true)
public HttpResult<List<PollutionLineDTO>> getLineInfoById(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("getLineInfoById");
LogUtil.njcnDebug(log, "{},变电站参数:{}", methodDescribe, param);
List<PollutionLineDTO> list = pollutionSubstationService.getLineInfoById(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -1,14 +0,0 @@
package com.njcn.harmonic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.PmsAbnormalRules;
/**
* PmsAbnormalRulesMapper
*
* @author qijian
* @date 2022/10/26
*/
public interface PmsAbnormalRulesMapper extends BaseMapper<PmsAbnormalRules> {
}

View File

@@ -1,14 +0,0 @@
package com.njcn.harmonic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.RMpIntegrityD;
/**
* RMpIntegrityDMapper
*
* @author qijian
* @date 2022/10/26
*/
public interface RMpIntegrityDMapper extends BaseMapper<RMpIntegrityD> {
}

View File

@@ -1,14 +0,0 @@
package com.njcn.harmonic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.RStatAbnormalD;
/**
* RStatAbnormalDMapper
*
* @author qijian
* @date 2022/10/26
*/
public interface RStatAbnormalDMapper extends BaseMapper<RStatAbnormalD> {
}

View File

@@ -31,7 +31,7 @@ public interface CustomReportService {
* @author qijian
* @date 2022/10/18
*/
boolean updateCustomReportTemplate(ReportTemplateParam reportTemplateParam);
boolean updateCustomReportTemplate(ReportTemplateParam.UpdateReportTemplateParam reportTemplateParam);
/**
* 根据id获取模板

View File

@@ -1,20 +0,0 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
/**
* 数据是否异常
*
* @author qijian
* @version 1.0.0
* @createTime 2022/10/26 - 10:09
*/
public interface DataExceptionService {
/**
* 监测点数据是否异常
* @author qijian
* @date 2022/10/26
*/
boolean lineDataException(AlgorithmSearchParam algorithmSearchParam);
}

View File

@@ -1,20 +0,0 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
/**
* 数据完整率算法
*
* @author qijian
* @version 1.0.0
* @createTime 2022/10/26 - 10:09
*/
public interface DataIntegrityRateService {
/**
* 监测点日数据完整率
* @author qijian
* @date 2022/10/26
*/
boolean lineDataIntegrityRate(AlgorithmSearchParam algorithmSearchParam);
}

View File

@@ -1,9 +1,13 @@
package com.njcn.harmonic.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.pq.pojo.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.po.RStatPollutionSubstationM;
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import java.util.List;
/**
@@ -26,4 +30,29 @@ public interface PollutionSubstationService extends IService<RStatPollutionSubst
* @Date: 2022/10/13
*/
List<PollutionSubstationVO> getPollutionSubstationData(PollutionSubstationQuryParam pollutionSubstationQuryParam);
/**
* @Description: getDeptSubstationRelations
* @Param: [param]
* @return: java.util.List<com.njcn.harmonic.pojo.vo.PollutionVO>
* @Author: clam
* @Date: 2022/11/3
*/
List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam param);
/**
* @Description: getSubstationInfoById
* @Param: [param]
* @return: java.util.List<com.njcn.device.pq.pojo.dto.PollutionSubstationDTO>
* @Author: clam
* @Date: 2022/11/3
*/
List<PollutionSubstationDTO> getSubstationInfoById(HarmonicPublicParam param);
/**
* @Description: getLineInfoById
* @Param: [param]
* @return: java.util.List<com.njcn.device.pq.pojo.dto.PollutionLineDTO>
* @Author: clam
* @Date: 2022/11/3
*/
List<PollutionLineDTO> getLineInfoById(HarmonicPublicParam param);
}

View File

@@ -7,6 +7,7 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.harmonic.enums.HarmonicResponseEnum;
@@ -29,19 +30,30 @@ import com.njcn.influxdb.config.InfluxDbConfig;
import com.njcn.influxdb.param.InfluxDBSqlConstant;
import com.njcn.influxdb.param.InfluxDBTableConstant;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.minio.bo.MinIoUploadResDTO;
import com.njcn.minio.config.MinIoProperties;
import com.njcn.minio.utils.MinIoUtils;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.dto.DeptDTO;
import com.njcn.web.utils.WebUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.influxdb.dto.QueryResult;
import org.springframework.beans.BeanUtils;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.annotation.Resource;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -75,6 +87,14 @@ public class CustomReportServiceImpl implements CustomReportService {
private final DeptTempMapper deptTempMapper;
private final GeneralInfo generalInfo;
@Resource
private MinIoUtils minIoUtils;
@Resource
private MinIoProperties minIoProperties;
@Resource
private InfluxDbConfig influxDbConfig;
@@ -89,6 +109,10 @@ public class CustomReportServiceImpl implements CustomReportService {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
}
//文件上传到Minio服务器存入文件名
MinIoUploadResDTO minIoUploadResDTO = contentToMinio(reportTemplateParam.getContent());
reportTemplateParam.setContent(minIoUploadResDTO.getMinFileName());
//新增模板表
ExcelRptTemp excelRptTemp = new ExcelRptTemp();
BeanUtils.copyProperties(reportTemplateParam, excelRptTemp);
@@ -110,7 +134,7 @@ public class CustomReportServiceImpl implements CustomReportService {
}
@Override
public boolean updateCustomReportTemplate(ReportTemplateParam reportTemplateParam) {
public boolean updateCustomReportTemplate(ReportTemplateParam.UpdateReportTemplateParam reportTemplateParam) {
checkName(reportTemplateParam, true);
//检验模板json数据规范
@@ -120,6 +144,14 @@ public class CustomReportServiceImpl implements CustomReportService {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
}
//删除之前的文件
ExcelRptTemp excelRptTempOld = excelRptTempMapper.selectById(reportTemplateParam.getId());
minIoUtils.removeObject(minIoProperties.getBucket(), excelRptTempOld.getContent());
//文件上传到Minio服务器存入文件名
MinIoUploadResDTO minIoUploadResDTO = contentToMinio(reportTemplateParam.getContent());
reportTemplateParam.setContent(minIoUploadResDTO.getMinFileName());
//修改模板数据
ExcelRptTemp excelRptTemp = new ExcelRptTemp();
BeanUtils.copyProperties(reportTemplateParam, excelRptTemp);
@@ -159,10 +191,12 @@ public class CustomReportServiceImpl implements CustomReportService {
@Override
public ExcelRptTemp getCustomReportTemplateById(String id) {
return excelRptTempMapper.selectById(id);
ExcelRptTemp excelRptTemp = excelRptTempMapper.selectById(id);
String contentUrl = minIoUtils.getObjectUrl(minIoProperties.getBucket(), excelRptTemp.getContent(), 7 * 24 * 60 * 60);
excelRptTemp.setContent(contentUrl);
return excelRptTemp;
}
@Override
public List<ReportTemplateVO> getTemplateList(ReportSearchParam reportSearchParam) {
return excelRptTempMapper.getReportTemplateList(reportSearchParam);
@@ -203,7 +237,9 @@ public class CustomReportServiceImpl implements CustomReportService {
List<ReportTemplateDTO> reportTemplateDTOList = new ArrayList<>();
JSONArray jsonArray = null;
try {
jsonArray = JSONUtil.parseArray(excelRptTemp.getContent());
//通过文件服务器获取
String objectUrl = minIoUtils.getObjectUrl(minIoProperties.getBucket(), excelRptTemp.getContent(), 7 * 24 * 60 * 60);
jsonArray = JSONUtil.parseArray(urlToString(objectUrl));
jsonArray.forEach(item -> {
JSONObject jsonObject = (JSONObject) item;
JSONArray itemArr = (JSONArray) jsonObject.get("celldata");
@@ -294,7 +330,9 @@ public class CustomReportServiceImpl implements CustomReportService {
});
}
String content = jsonArray.toString();
//文件上传到Minio服务器存入文件名
MinIoUploadResDTO minIoUploadResDTO = contentToMinio(jsonArray.toString());
String content = minIoUploadResDTO.getMinFileName();
//根据模板激活状态,判断是否进库(未激活不进库,已激活进库)
if (DataStateEnum.ENABLE.getCode().equals(reportSearchParam.getActivation())) {
//存入报表库
@@ -309,7 +347,7 @@ public class CustomReportServiceImpl implements CustomReportService {
excelRptMapper.insert(excelRpt);
}
return content;
return minIoUtils.getObjectUrl(minIoProperties.getBucket(), content, 7 * 24 * 60 * 60);
}
@Override
@@ -468,4 +506,105 @@ public class CustomReportServiceImpl implements CustomReportService {
endList.add(data);
}
/**
* 上传文件到Minio
*
* @param content 文件
* @return 成功标记
*/
private MinIoUploadResDTO contentToMinio(String content) {
//上传到minio
String businessTempPath = generalInfo.getBusinessTempPath();
File file = stringToFile(content, businessTempPath + File.separator + "a.json");
MultipartFile multiFile = getMultipartFile(file);
try {
//把名称存入数据
MinIoUploadResDTO upload = minIoUtils.upload(multiFile, minIoProperties.getBucket(), "report/");
return upload;
} catch (Exception e) {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_FILE);
}
}
/**
* 将字符串写入指定文件
*
* @param res 原字符串
* @param filePath 文件路径
* @return 成功标记
*/
public File stringToFile(String res, String filePath) {
boolean flag = true;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
File distFile = new File(filePath);
try {
if (!distFile.getParentFile().exists()){
distFile.getParentFile().mkdirs();
}
bufferedReader = new BufferedReader(new StringReader(res));
bufferedWriter = new BufferedWriter(new FileWriter(distFile));
//先清空
bufferedWriter.write("");
char buf[] = new char[1024]; //字符缓冲区
int len;
while ((len = bufferedReader.read(buf)) != -1) {
bufferedWriter.write(buf, 0, len);
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return distFile;
}
/**
* 将文件转成Multipart
*
* @param file 文件
* @return 成功标记
*/
private MultipartFile getMultipartFile(File file) {
FileItem item = new DiskFileItemFactory().createItem("file"
, MediaType.MULTIPART_FORM_DATA_VALUE
, true
, file.getName());
try (InputStream input = new FileInputStream(file);
OutputStream os = item.getOutputStream()) {
// 流转移
IOUtils.copy(input, os);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid file: " + e, e);
}
return new CommonsMultipartFile(item);
}
/**
* 将文件Url转成String
*
* @param objectUrl 文件url
* @return 成功标记
*/
private String urlToString(String objectUrl) throws IOException {
URL url = new URL(objectUrl);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer buffer = new StringBuffer();
String line = " ";
while ((line = in.readLine()) != null){
buffer.append(line);
}
return buffer.toString();
}
}

View File

@@ -1,182 +0,0 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.pojo.vo.LineDetailDataVO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.enums.HarmonicResponseEnum;
import com.njcn.harmonic.mapper.PmsAbnormalRulesMapper;
import com.njcn.harmonic.mapper.RStatAbnormalDMapper;
import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
import com.njcn.harmonic.pojo.po.DataV;
import com.njcn.harmonic.pojo.po.PmsAbnormalRules;
import com.njcn.harmonic.pojo.po.RStatAbnormalD;
import com.njcn.harmonic.service.DataExceptionService;
import com.njcn.influxdb.config.InfluxDbConfig;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.param.InfluxDBSqlConstant;
import com.njcn.influxdb.param.InfluxDBTableConstant;
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 javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 数据是否异常
*
* @author qijian
* @version 1.0.0
* @createTime 2022/10/26 - 10:09
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DataExceptionServiceImpl implements DataExceptionService {
private final InfluxDbUtils influxDbUtils;
private final LineFeignClient lineFeignClient;
private final PmsAbnormalRulesMapper pmsAbnormalRulesMapper;
private final RStatAbnormalDMapper rStatAbnormalDMapper;
@Resource
private InfluxDbConfig influxDbConfig;
/**
* 监测点数据是否异常
* @author qijian
* @date 2022/10/26
*/
@Override
public boolean lineDataException(AlgorithmSearchParam algorithmSearchParam) {
//测试
// InfluxDbUtils influxDBUtil = new InfluxDbUtils("admin", "njcnpqs", "http://192.168.1.18:8086", "pqsbase", "");
//初始化
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
String searchSql;
String sql;
QueryResult query;
DataV dataV;
Date date = DateUtil.parse(algorithmSearchParam.getDatadate());
String lineId = algorithmSearchParam.getId();
//入库数据初始化
RStatAbnormalD rStatAbnormalD = new RStatAbnormalD();
rStatAbnormalD.setDataDate(date);
rStatAbnormalD.setMeasurementPointId(lineId);
rStatAbnormalD.setValueAlarm(0);
//1、取出规则
List<PmsAbnormalRules> pmsAbnormalRules = pmsAbnormalRulesMapper.selectList(null);
//2、取出电压
List<String> lineIds = new ArrayList<>();
lineIds.add(lineId);
List<LineDetailDataVO> lineDetailList = lineFeignClient.getLineDetailList(lineIds).getData();
if (lineDetailList.size() == 0){
throw new BusinessException(HarmonicResponseEnum.ALGORITHM_LINE_EMPTY);
}
String scale = lineDetailList.get(0).getScale().replace("kV","");
//3、根据规则表进行判断
//取前四项进行比较相别为A
searchSql = "MAX(freq) as freq_max,MIN(freq) as freq_min,MAX(rms) as rms_max,MIN(rms) as rms_min,MAX(rms_lvr) as rms_lvr_max,MIN(rms_lvr) as rms_lvr_min,MAX(v_thd) as v_thd_max,MIN(v_thd) as v_thd_min ";
sql = getAppend(lineId, date, searchSql, "A");
query = influxDbUtils.query(sql);
dataV = resultMapper.toPOJO(query, DataV.class).get(0);
//开始判断业务
HarmonicResponseEnum harmonicResponseEnum = null;
for (PmsAbnormalRules pmsAbnormalRule : pmsAbnormalRules) {
//每项数据进行上下限比较MAX和MIN若有一项不在数据范围内则为异常
switch (pmsAbnormalRule.getTarget()) {
case Param.TARGET_FREQ:
//频率:正常比较
if (dataV.getFrepMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getFrepMAX() > pmsAbnormalRule.getUpperLimit()){
harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_FREP_RULE;
}
break;
case Param.TARGET_RMS:
//相电压有效值特殊处理在【0.85p.u.1.2p.u.】之间p.u=电压等级/1.732
pmsAbnormalRule.setLowerLimit((pmsAbnormalRule.getLowerLimit() * (Double.parseDouble(scale) / 1.732)));
pmsAbnormalRule.setUpperLimit((pmsAbnormalRule.getUpperLimit() * (Double.parseDouble(scale) / 1.732)));
if (dataV.getRmsMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getRmsMAX() > pmsAbnormalRule.getUpperLimit()){
harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_RMS_RULE;
}
break;
case Param.TARGET_RMS_LVR:
//线电压有效值特殊处理在【0.85p.u.1.2p.u.】之间p.u=电压等级
pmsAbnormalRule.setLowerLimit((pmsAbnormalRule.getLowerLimit() * Double.parseDouble(scale)));
pmsAbnormalRule.setUpperLimit((pmsAbnormalRule.getUpperLimit() * Double.parseDouble(scale)));
if (dataV.getRmsLvrMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getRmsLvrMAX() > pmsAbnormalRule.getUpperLimit()){
harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_RMS_LVR_RULE;
}
break;
case Param.TARGET_V_THD:
//电压总谐波畸变率:正常比较
if (dataV.getVThdMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getVThdMAX() > pmsAbnormalRule.getUpperLimit()){
harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_V_THD_RULE;
}
break;
case Param.TARGET_V_UNBALANCE:
//三相不平衡度正常比较相别为T
searchSql = "MAX(v_unbalance) as v_unbalance_max,MIN(v_unbalance) as v_unbalance_min ";
sql = getAppend(lineId, date, searchSql, "T");
query = influxDbUtils.query(sql);
dataV = resultMapper.toPOJO(query, DataV.class).get(0);
if (dataV.getVUnbalanceMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getVUnbalanceMAX() > pmsAbnormalRule.getUpperLimit()){
harmonicResponseEnum = HarmonicResponseEnum.ALGORITHM_V_UNBALANCE_RULE;
}
break;
default:
break;
}
if (harmonicResponseEnum != null){
//入库
LambdaQueryWrapper<RStatAbnormalD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(RStatAbnormalD::getMeasurementPointId, lineId).eq(RStatAbnormalD::getDataDate, date);
RStatAbnormalD rStatAbnormalDOne = rStatAbnormalDMapper.selectOne(lambdaQueryWrapper);
if (Objects.isNull(rStatAbnormalDOne)){
rStatAbnormalDMapper.insert(rStatAbnormalD);
}
throw new BusinessException(harmonicResponseEnum);
}
}
return true;
}
/**
* 拼装sql
* @param id,date,searchSql,tableName 参数
* @return 结果
*/
private String getAppend(String id, Date date, String searchSql,String type) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(InfluxDBSqlConstant.SELECT).append(searchSql)
.append(InfluxDBSqlConstant.FROM).append(InfluxDBPublicParam.DATA_V)
.append(InfluxDBSqlConstant.WHERE).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(DateUtil.beginOfDay(date)).append(InfluxDBSqlConstant.QM)
.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.LE).append(InfluxDBSqlConstant.QM).append(DateUtil.endOfDay(date)).append(InfluxDBSqlConstant.QM)
.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.LINE_ID).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(id).append(InfluxDBSqlConstant.QM)
.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.VALUE_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.AVG).append(InfluxDBSqlConstant.QM);
if (InfluxDBTableConstant.PHASE_TYPE_T.equals(type)){
stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_T).append(InfluxDBSqlConstant.QM);
}else{
stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_A).append(InfluxDBSqlConstant.QM);
}
return stringBuilder.toString();
}
}

View File

@@ -1,192 +0,0 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.pojo.vo.LineDetailDataVO;
import com.njcn.harmonic.enums.HarmonicResponseEnum;
import com.njcn.harmonic.mapper.RMpIntegrityDMapper;
import com.njcn.harmonic.pojo.param.AlgorithmSearchParam;
import com.njcn.harmonic.pojo.po.RMpIntegrityD;
import com.njcn.harmonic.service.DataIntegrityRateService;
import com.njcn.influxdb.config.InfluxDbConfig;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.param.InfluxDBSqlConstant;
import com.njcn.influxdb.param.InfluxDBTableConstant;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 数据完整率算法
*
* @author qijian
* @version 1.0.0
* @createTime 2022/10/26 - 10:09
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DataIntegrityRateServiceImpl implements DataIntegrityRateService {
private final InfluxDbUtils influxDbUtils;
private final RMpIntegrityDMapper rMpIntegrityDMapper;
private final LineFeignClient lineFeignClient;
@Resource
private InfluxDbConfig influxDbConfig;
/**
* 监测点日数据完整率
* @author qijian
* @date 2022/10/26
*/
@Override
public boolean lineDataIntegrityRate(AlgorithmSearchParam algorithmSearchParam) {
//测试
// InfluxDbUtils influxDBUtil = new InfluxDbUtils("admin", "njcnpqs", "http://192.168.1.18:8086", "pqsbase", "");
//初始化
String searchSql;
String tableName;
String sql;
QueryResult query;
QueryResult.Series series;
List<String> columns;
List<List<Object>> values;
RMpIntegrityD rMpIntegrityD = new RMpIntegrityD();
Date date = DateUtil.parse(algorithmSearchParam.getDatadate());
//1、有效接入分钟数量根据监测点编号获取统计间隔1440 / 统计间隔 = 有效接入分钟数量
List<String> lineIds = new ArrayList<>();
lineIds.add(algorithmSearchParam.getId());
List<LineDetailDataVO> lineDetailList = lineFeignClient.getLineDetailList(lineIds).getData();
if (lineDetailList.size() == 0){
throw new BusinessException(HarmonicResponseEnum.ALGORITHM_LINE_EMPTY);
}
Integer effectiveMinuteCount = 1440 / lineDetailList.get(0).getTimeInterval();
rMpIntegrityD.setEffectiveMinuteCount(effectiveMinuteCount);
//2、根据data_v表获取五项稳态指标日数量count
searchSql = "count(freq) as freqCount,count(rms) as phaseVoltageCount,count(rms_lvr) as lineVoltageCount,count(v_thd) as vThdCount,count(v_unbalance) as unbalanceCount ";
tableName = InfluxDBPublicParam.DATA_V;
sql = getAppend(algorithmSearchParam.getId(), date, searchSql, tableName);
query = influxDbUtils.query(sql);
series = getSeries(query);
if (Objects.nonNull(series.getColumns())){
columns = series.getColumns();
values = series.getValues();
for (List<Object> columnValue : values) {
for (int i = 0; i < columnValue.size(); i++) {
if (columns.get(i).equals("freqCount")) {
rMpIntegrityD.setFreqCount(Integer.parseInt(convertDoubleToString(columnValue.get(i))));
}else if (columns.get(i).equals("phaseVoltageCount")) {
rMpIntegrityD.setPhaseVoltageCount(Integer.parseInt(convertDoubleToString(columnValue.get(i))));
}else if (columns.get(i).equals("lineVoltageCount")) {
rMpIntegrityD.setLineVoltageCount(Integer.parseInt(convertDoubleToString(columnValue.get(i))));
}else if (columns.get(i).equals("vThdCount")) {
rMpIntegrityD.setVThdCount(Integer.parseInt(convertDoubleToString(columnValue.get(i))));
}else if (columns.get(i).equals("unbalanceCount")) {
rMpIntegrityD.setUnbalanceCount(Integer.parseInt(convertDoubleToString(columnValue.get(i))));
}
}
}
}
//3、根据day_flicker表获取两项闪变指标数量count
searchSql = "count(pst) as pstCount,count(plt) as pltCount ";
tableName = InfluxDBPublicParam.DATA_FLICKER;
sql = getAppend(algorithmSearchParam.getId(), date, searchSql, tableName);
query = influxDbUtils.query(sql);
series = getSeries(query);
if (Objects.nonNull(series.getColumns())){
columns = series.getColumns();
values = series.getValues();
for (List<Object> columnValue : values) {
for (int i = 0; i < columnValue.size(); i++) {
if (columns.get(i).equals("pstCount")) {
rMpIntegrityD.setPstCount(Integer.parseInt(convertDoubleToString(columnValue.get(i))));
}else if (columns.get(i).equals("pltCount")) {
rMpIntegrityD.setPltCount(Integer.parseInt(convertDoubleToString(columnValue.get(i))));
}
}
}
}
//4、存库
LambdaQueryWrapper<RMpIntegrityD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(RMpIntegrityD::getMeasurementPointId, algorithmSearchParam.getId()).eq(RMpIntegrityD::getDataDate, date);
RMpIntegrityD rMpIntegrityDOne = rMpIntegrityDMapper.selectOne(lambdaQueryWrapper);
if (Objects.nonNull(rMpIntegrityDOne)){
rMpIntegrityDMapper.update(rMpIntegrityD,lambdaQueryWrapper);
}else{
rMpIntegrityD.setMeasurementPointId(algorithmSearchParam.getId());
rMpIntegrityD.setDataDate(date);
rMpIntegrityDMapper.insert(rMpIntegrityD);
}
return true;
}
/**
* Double转String
* @param val 参数
* @return 结果
*/
private String convertDoubleToString(Object val) {
DecimalFormat decimalFormat = new DecimalFormat("###################.###########");
return decimalFormat.format(val);
}
/**
* 取series
* @param query 参数
* @return 结果
*/
private QueryResult.Series getSeries(QueryResult query) {
QueryResult.Series series = new QueryResult.Series();
List<QueryResult.Result> results = query.getResults();
if (results.size() != 0) {
QueryResult.Result result = results.get(0);
if (result.getSeries() != null){
List<QueryResult.Series> seriess = result.getSeries();
if (seriess.size() != 0) {
series = seriess.get(0);
}
}
}
return series;
}
/**
* 拼装sql
* @param id,date,searchSql,tableName 参数
* @return 结果
*/
private String getAppend(String id, Date date, String searchSql,String tableName) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(InfluxDBSqlConstant.SELECT).append(searchSql)
.append(InfluxDBSqlConstant.FROM).append(tableName)
.append(InfluxDBSqlConstant.WHERE).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(DateUtil.beginOfDay(date)).append(InfluxDBSqlConstant.QM)
.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.LE).append(InfluxDBSqlConstant.QM).append(DateUtil.endOfDay(date)).append(InfluxDBSqlConstant.QM)
.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.LINE_ID).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(id).append(InfluxDBSqlConstant.QM)
.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_A).append(InfluxDBSqlConstant.QM);
if (InfluxDBPublicParam.DATA_V.equals(tableName)){
stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.VALUE_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.AVG).append(InfluxDBSqlConstant.QM);
}
return stringBuilder.toString();
}
}

View File

@@ -8,21 +8,27 @@ import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.api.SubstationFeignClient;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.device.pq.pojo.dto.SubstationDTO;
import com.njcn.device.pq.pojo.dto.*;
import com.njcn.harmonic.mapper.RMpPollutionDPOMapper;
import com.njcn.harmonic.mapper.RStatPollutionOrgMPOMapper;
import com.njcn.harmonic.mapper.RStatPollutionSubstationMMapper;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.po.RMpPollutionDPO;
import com.njcn.harmonic.pojo.po.RStatPollutionOrgMPO;
import com.njcn.harmonic.pojo.po.RStatPollutionSubstationM;
import com.njcn.harmonic.pojo.vo.PollutionSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import com.njcn.harmonic.service.PollutionSubstationService;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -52,6 +58,8 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
private final GeneralInfo generalInfo;
private final RStatPollutionOrgMPOMapper rStatPollutionOrgMPOMapper;
private final RMpPollutionDPOMapper rMpPollutionDPOMapper;
/**
* @param pollutionSubstationQuryParam
* @Description: getPollutionSubstationData
@@ -122,4 +130,154 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
return result;
}
/**
* @Description: getDeptSubstationRelations
* @Param: [param]
* @return: java.util.List<com.njcn.harmonic.pojo.vo.PollutionVO>
* @Author: clam
* @Date: 2022/11/3
*/
@Override
public List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam harmonicPublicParam) {
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
List<PollutionVO> list = new ArrayList<>();
List<String> lineList = new ArrayList<>();
List<PollutionLineDTO> lineInfo = new ArrayList<>();
PollutionParamDTO paramDTO = new PollutionParamDTO();
String pollutionType = harmonicPublicParam.getStatisticalType ( ).getCode ( );
String searchBeginTime = harmonicPublicParam.getSearchBeginTime ( ).substring (0,7);
if (StringUtils.isBlank(RequestUtil.getDeptIndex())){
return list;
}
List<GeneralDeviceDTO> sub = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData();
sub.forEach (temp ->{
PollutionVO pollutionVO = new PollutionVO ();
String detpid = temp.getIndex ();
String name =temp.getName ();
List<String> subIndexes = temp.getSubIndexes ( );
pollutionVO.setId (detpid);
pollutionVO.setName (name);
pollutionVO.setData (-1.0);
QueryWrapper<RStatPollutionOrgMPO> rStatPollutionOrgMPOQueryWrapper = new QueryWrapper<> ();
rStatPollutionOrgMPOQueryWrapper.eq ("org_id", detpid).
eq ("pollution_type", pollutionType).
apply("DATE_FORMAT( data_date ,'%Y-%m') = '"+searchBeginTime+"'");
RStatPollutionOrgMPO rStatPollutionOrgMPO = rStatPollutionOrgMPOMapper.selectOne (rStatPollutionOrgMPOQueryWrapper);
;
Optional.ofNullable (rStatPollutionOrgMPO).ifPresent (a->pollutionVO.setData (a.getValue ()));
List<PollutionVO> subPollutionVO = new ArrayList<>();
subIndexes.forEach (subIndex->{
PollutionVO pollutionsubVO = new PollutionVO ();
PollutionSubstationDTO pollutionSubstationDTO = lineFeignClient.getSubstationInfo(subIndex).getData();
String id = pollutionSubstationDTO.getId ( );
pollutionsubVO.setId (id);
pollutionsubVO.setName ( pollutionSubstationDTO.getName ());
pollutionsubVO.setPid (temp.getIndex ());
pollutionsubVO.setData (-1.0);
QueryWrapper<RStatPollutionSubstationM> wrapper = new QueryWrapper<> ();
wrapper.eq ("substation_id",id).
eq ("pollution_type", pollutionType).
apply("DATE_FORMAT( data_date ,'%Y-%m') = '"+searchBeginTime+"'");
RStatPollutionSubstationM rStatPollutionSubstationM = pollutionSubstationMMapper.selectOne (wrapper);
Optional.ofNullable (rStatPollutionSubstationM).ifPresent (t->pollutionsubVO.setData (t.getValue ()));
subPollutionVO.add (pollutionsubVO) ;
});
pollutionVO.setChildren (subPollutionVO);
list.add (pollutionVO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed().thenComparing(PollutionVO::getName)).collect(Collectors.toList());
}
return list;
}
/**
* @Description: getSubstationInfoById
* @Param: [param]
* @return: java.util.List<com.njcn.device.pq.pojo.dto.PollutionSubstationDTO>
* @Author: clam
* @Date: 2022/11/3
*/
@Override
public List<PollutionSubstationDTO> getSubstationInfoById(HarmonicPublicParam deptParam) {
deptParam.setServerName(generalInfo.getMicroServiceName());
List<PollutionSubstationDTO> list = new ArrayList<>();
List<GeneralDeviceDTO> sub = generalDeviceInfoClient.getPracticalRunDeviceInfoAsSubstation(deptParam).getData();
String pollutionType = deptParam.getStatisticalType ( ).getCode ( );
SimpleDateFormat s = new SimpleDateFormat();
String searchBeginTime = deptParam.getSearchBeginTime ( ).substring (0,7);
sub.forEach(item->{
PollutionSubstationDTO pollutionSubstationDTO = lineFeignClient.getSubstationInfo(item.getIndex()).getData();
QueryWrapper<RStatPollutionSubstationM> wrapper = new QueryWrapper<> ();
wrapper.eq ("substation_id",pollutionSubstationDTO.getId ()).
eq ("pollution_type", pollutionType).
apply("DATE_FORMAT( data_date ,'%Y-%m') = '"+searchBeginTime+"'");
RStatPollutionSubstationM rStatPollutionSubstationM = pollutionSubstationMMapper.selectOne (wrapper);
Optional.ofNullable (rStatPollutionSubstationM).ifPresent (t->pollutionSubstationDTO.setData (t.getValue ()));
list.add(pollutionSubstationDTO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(PollutionSubstationDTO::getData).reversed().thenComparing(PollutionSubstationDTO::getName)).collect(Collectors.toList());
}
return list;
}
/**
* @Description: getLineInfoById
* @Param: [param]
* @return: java.util.List<com.njcn.device.pq.pojo.dto.PollutionLineDTO>
* @Author: clam
* @Date: 2022/11/3
*/
@Override
public List<PollutionLineDTO> getLineInfoById(HarmonicPublicParam harmonicPublicParam) {
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
List<PollutionLineDTO> list = new ArrayList<>();
List<String> line = new ArrayList<>();
String pollutionType = harmonicPublicParam.getStatisticalType ( ).getCode ( );
String searchBeginTime = harmonicPublicParam.getSearchBeginTime ( ).substring (0,7);
PollutionParamDTO paramDTO = new PollutionParamDTO();
if (StringUtils.isBlank(RequestUtil.getDeptIndex())){
return list;
}
List<GeneralDeviceDTO> sub = generalDeviceInfoClient.getPracticalRunDeviceInfoAsSubstation(harmonicPublicParam).getData();
sub.forEach(item->{
if (Objects.equals(harmonicPublicParam.getId(),item.getIndex())){
if (!CollectionUtils.isEmpty(item.getLineIndexes())){
line.addAll(item.getLineIndexes());
}
}
});
if (!CollectionUtils.isEmpty(line)){
paramDTO.setLineList(line);
list = lineFeignClient.getLineInfo(paramDTO).getData();
List<RMpPollutionDPO> lineData = rMpPollutionDPOMapper.selectMaxList ( line,pollutionType,searchBeginTime);
if (!CollectionUtils.isEmpty(lineData)){
list.stream().map(list1->lineData.stream().filter(list2-> Objects.equals(list1.getId(),list2.getLineId ())).findAny().map(m->{
/*todo 根据 pollutionType映射lineData取哪个字段目前先取一个值测试 */
list1.setData(m.getVDev ());
return list1;
})).collect(Collectors.toList());
}
} else {
return list;
}
return list.stream().sorted(Comparator.comparing(PollutionLineDTO::getData).reversed().thenComparing(PollutionLineDTO::getName)).collect(Collectors.toList());
}
}