初始化

This commit is contained in:
2022-06-21 20:47:46 +08:00
parent b666a24a98
commit 59da3376c1
1246 changed files with 129600 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
package com.njcn.harmonic;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* 功能描述:
* TODO
*
* @return
* @author xy
* @date 2021/12/27 11:38
*/
@Slf4j
@MapperScan("com.njcn.**.mapper")
@EnableFeignClients(basePackages = "com.njcn")
@SpringBootApplication(scanBasePackages = "com.njcn")
public class HarmonicBootApplication {
public static void main(String[] args) {
SpringApplication.run(HarmonicBootApplication.class, args);
}
}

View File

@@ -0,0 +1,195 @@
package com.njcn.harmonic.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType;
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.common.utils.LogUtil;
import com.njcn.device.pojo.dto.PollutionLineDTO;
import com.njcn.device.pojo.dto.PollutionSubstationDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.vo.*;
import com.njcn.harmonic.service.IAnalyzeService;
import com.njcn.harmonic.service.IHarmonicService;
import com.njcn.harmonic.service.IPollutionService;
import com.njcn.poi.util.PoiUtil;
import com.njcn.user.pojo.param.UserParam;
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.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/4/29 14:35
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/detailAnalysis")
@Api(tags = "详细分析")
@AllArgsConstructor
public class AnalyzeController extends BaseController {
private final IAnalyzeService IAnalyzeService;
private final IPollutionService pollutionService;
private final IHarmonicService harmonicService;
@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 = pollutionService.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 = pollutionService.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 = pollutionService.getLineInfoById(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLineRank")
@ApiOperation("污区图-获取前十监测点排名")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<List<PollutionLineDTO>> getLineRank(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("getLineRank");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
List<PollutionLineDTO> list = pollutionService.getLineRank(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/deptSubRelations")
@ApiOperation("谐波统计-部门变电站关系")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<List<PollutionVO>> deptSubRelations(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("deptSubRelations");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
List<PollutionVO> list = harmonicService.getDeptSubstationRelations(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/deptInfo")
@ApiOperation("谐波统计-部门列表")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<List<HarmonicDeptVO>> deptInfo(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("deptInfo");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
List<HarmonicDeptVO> list = harmonicService.getDeptInfo(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSubInfoById")
@ApiOperation("谐波统计-根据部门获取变电站详情")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<List<HarmonicSubstationVO>> getSubInfoById(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("getSubInfoById");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
List<HarmonicSubstationVO> list = harmonicService.getSubstationInfoById(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getXbLineInfoById")
@ApiOperation("谐波统计-根据变电站获取监测点详情")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<List<HarmonicLineVO>> getXbLineInfoById(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("getXbLineInfoById");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
List<HarmonicLineVO> list = harmonicService.getLineInfoById(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getXbLineRank")
@ApiOperation("谐波统计-获取前十监测点排名")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<List<HarmonicLineVO>> getXbLineRank(@RequestBody HarmonicPublicParam param) {
String methodDescribe = getMethodDescribe("getXbLineRank");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
List<HarmonicLineVO> list = harmonicService.getLineRank(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/overAreaStatistics")
@ApiOperation("区域稳态超标统计")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<Page<OverAreaLimitVO>> overAreaStatistics(@Validated @RequestBody OverAreaVO param) {
String methodDescribe = getMethodDescribe("overAreaStatistics");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
Page<OverAreaLimitVO> list = IAnalyzeService.getAreaData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/warnSubstationDetail")
@ApiOperation("告警变电站明细")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<Page<WarningSubstationVO>> warnSubstationDetail(@Validated @RequestBody OverAreaVO param) {
String methodDescribe = getMethodDescribe("warnSubstationDetail");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
Page<WarningSubstationVO> list = IAnalyzeService.getWarningSubstation(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/lineOverLimit")
@ApiOperation("监测点超标统计")
@ApiImplicitParam(name = "param", value = "实体参数", required = true)
public HttpResult<Page<MonitorOverLimitVO>> lineOverLimit(@Validated @RequestBody OverAreaVO param) {
String methodDescribe = getMethodDescribe("lineOverLimit");
LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
Page<MonitorOverLimitVO> list = IAnalyzeService.monitorOverLimitVO(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
@PostMapping("/exportHarmonicArea")
@ApiOperation("区域稳态超标统计导出")
@ApiImplicitParam(name = "param", value = "查询参数", required = true)
public HttpResult<String> exportHarmonicArea(@Validated @RequestBody OverAreaVO param) {
String methodDescribe = getMethodDescribe("exportHarmonicArea");
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, IAnalyzeService.exportArea(param,methodDescribe), methodDescribe);
}
}

View File

@@ -0,0 +1,46 @@
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.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.AssesVO;
import com.njcn.harmonic.service.AssesService;
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 denghuajun
* @date 2022/3/2
*
*/
@Slf4j
@RestController
@RequestMapping("/asses")
@Api(tags = "综合评估管理")
@AllArgsConstructor
public class AssesController extends BaseController {
private final AssesService assesService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getQualityAssessData")
@ApiOperation("综合评估")
@ApiImplicitParam(name = "pulicTimeStatisParam", value = "综合评估参数", required = true)
public HttpResult<AssesVO> getQualityAssessData(@RequestBody @Validated PulicTimeStatisParam pulicTimeStatisParam) {
String methodDescribe = getMethodDescribe("getQualityAssessData");
AssesVO list = assesService.getQualityAssessData(pulicTimeStatisParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -0,0 +1,50 @@
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.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.ComAssessVO;
import com.njcn.harmonic.service.ComAssessService;
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;
import java.util.List;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/04/21 09:05
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/comAccess")
@Api(tags = "稳态综合评估")
@AllArgsConstructor
public class ComAssessController extends BaseController {
private final ComAssessService comAssessService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getComAccessData")
@ApiOperation("稳态综合评估统计")
@ApiImplicitParam(name = "comAccessParam", value = "综合评估参数", required = true)
public HttpResult<List<ComAssessVO>> getComAccessData(@RequestBody @Validated DeviceInfoParam.BusinessParam comAccessParam){
String methodDescribe = getMethodDescribe("getComAccessData");
List<ComAssessVO> comAssessVOList = comAssessService.getComAccessData(comAccessParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, comAssessVOList, methodDescribe);
}
}

View File

@@ -0,0 +1,55 @@
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.device.pojo.vo.CommunicateVO;
import com.njcn.harmonic.pojo.param.PulicTimeParam;
import com.njcn.harmonic.pojo.param.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.CommunicateStatisticsVO;
import com.njcn.harmonic.service.CommunicateService;
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.*;
/**
* @author denghuajun
* @date 2022/2/28
*
*/
@Slf4j
@RestController
@RequestMapping("/communicate")
@Api(tags = "运行状态管理")
@AllArgsConstructor
public class CommunicateController extends BaseController {
private final CommunicateService communicateService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getComFlagInfoData")
@ApiOperation("终端通讯信息")
@ApiImplicitParam(name = "pulicTimeParam", value = "终端通讯信息", required = true)
public HttpResult<CommunicateVO> getComFlagInfoData(@RequestBody @Validated PulicTimeParam pulicTimeParam) {
String methodDescribe = getMethodDescribe("getComFlagInfoData");
CommunicateVO list = communicateService.getComFlagInfoData(pulicTimeParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getRunInfoData")
@ApiOperation("终端运行状态统计")
@ApiImplicitParam(name = "pulicTimeStatisParam", value = "终端运行状态统计", required = true)
public HttpResult<CommunicateStatisticsVO> getRunInfoData(@RequestBody @Validated PulicTimeStatisParam pulicTimeStatisParam) {
String methodDescribe = getMethodDescribe("getRunInfoData");
CommunicateStatisticsVO list = communicateService.getRunInfoData(pulicTimeStatisParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -0,0 +1,47 @@
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.HarmInHarmParam;
import com.njcn.harmonic.pojo.vo.HarmInHarmVO;
import com.njcn.harmonic.service.HarmInHarmService;
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 denghuajun
* @version 1.0.0
* @date 2022/3/17
*/
@Slf4j
@RestController
@RequestMapping("/inHarm")
@Api(tags = "谐波频谱")
@AllArgsConstructor
public class HarmInHarmController extends BaseController {
private final HarmInHarmService harmInHarmService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getHarmInHarmData")
@ApiOperation("谐波频谱统计")
@ApiImplicitParam(name = "harmInHarmParam", value = "谐波频谱参数", required = true)
public HttpResult<HarmInHarmVO> getHarmInHarmData(@RequestBody @Validated HarmInHarmParam harmInHarmParam) {
String methodDescribe = getMethodDescribe("getHarmInHarmData");
HarmInHarmVO list = harmInHarmService.getHarmInHarmData(harmInHarmParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -0,0 +1,100 @@
//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.common.utils.LogUtil;
//import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
//import com.njcn.harmonic.pojo.vo.HarmonicDeptVO;
//import com.njcn.harmonic.pojo.vo.HarmonicLineVO;
//import com.njcn.harmonic.pojo.vo.HarmonicSubstationVO;
//import com.njcn.harmonic.pojo.vo.PollutionVO;
//import com.njcn.harmonic.service.IHarmonicService;
//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.*;
//
//import java.util.List;
//import java.util.Objects;
//
///**
// * 类的介绍:
// *
// * @author xuyang
// * @version 1.0.0
// * @createTime 2022/2/23 10:39
// */
//@Validated
//@Slf4j
//@RestController
//@RequestMapping("/harmonic")
//@Api(tags = "谐波统计")
//@AllArgsConstructor
//public class HarmonicController extends BaseController {
//
// private final IHarmonicService harmonicService;
//
// @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 = harmonicService.getDeptSubstationRelations(param);
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
// }
//
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @PostMapping("/deptInfo")
// @ApiOperation("部门列表")
// @ApiImplicitParam(name = "param", value = "实体参数", required = true)
// public HttpResult<List<HarmonicDeptVO>> deptInfo(@RequestBody HarmonicPublicParam param) {
// String methodDescribe = getMethodDescribe("deptInfo");
// LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
// List<HarmonicDeptVO> list = harmonicService.getDeptInfo(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<HarmonicSubstationVO>> getSubstationInfoById(@RequestBody HarmonicPublicParam param) {
// String methodDescribe = getMethodDescribe("getSubstationInfoById");
// LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
// List<HarmonicSubstationVO> list = harmonicService.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<HarmonicLineVO>> getLineInfoById(@RequestBody HarmonicPublicParam param) {
// String methodDescribe = getMethodDescribe("getLineInfoById");
// LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
// List<HarmonicLineVO> list = harmonicService.getLineInfoById(param);
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
// }
//
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @PostMapping("/getLineRank")
// @ApiOperation("获取前十监测点排名")
// @ApiImplicitParam(name = "param", value = "实体参数", required = true)
// public HttpResult<List<HarmonicLineVO>> getLineRank(@RequestBody HarmonicPublicParam param) {
// String methodDescribe = getMethodDescribe("getLineRank");
// LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
// List<HarmonicLineVO> list = harmonicService.getLineRank(param);
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
// }
//}

View File

@@ -0,0 +1,60 @@
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.HistoryParam;
import com.njcn.harmonic.pojo.param.NormHistoryParam;
import com.njcn.harmonic.pojo.vo.HistoryDataResultVO;
import com.njcn.harmonic.service.HistoryResultService;
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;
import java.util.List;
/**
* @author denghuajun
* @date 2022/3/14
* 趋势图
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/harmonic")
@Api(tags = "稳态数据分析")
@AllArgsConstructor
public class HistoryResultController extends BaseController {
private final HistoryResultService historyResultService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getHistoryResult")
@ApiOperation("稳态数据分析")
@ApiImplicitParam(name = "historyParam", value = "稳态数据分析参数", required = true)
public HttpResult<List<HistoryDataResultVO>> getHistoryResult(@RequestBody @Validated HistoryParam historyParam) {
String methodDescribe = getMethodDescribe("getHistoryResult");
List<HistoryDataResultVO> list = historyResultService.getHistoryResult(historyParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getHistoryLineData")
@ApiOperation("异常数据趋势图")
@ApiImplicitParam(name = "normHistoryParam", value = "异常数据趋势参数", required = true)
public HttpResult<List<HistoryDataResultVO>> getHistoryLineData(@RequestBody @Validated NormHistoryParam normHistoryParam) {
String methodDescribe = getMethodDescribe("getHistoryLineData");
List<HistoryDataResultVO> list = historyResultService.getHistoryLineData(normHistoryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -0,0 +1,82 @@
package com.njcn.harmonic.controller;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType;
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.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.IntegrityIconVO;
import com.njcn.harmonic.pojo.vo.IntegrityVO;
import com.njcn.harmonic.service.IntegrityService;
import com.njcn.poi.util.PoiUtil;
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.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2021/12/27 13:47
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/integrity")
@Api(tags = "数据完整性")
@AllArgsConstructor
public class IntegrityController extends BaseController {
private final IntegrityService integrityService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getIntegrityData")
@ApiOperation("数据完整性列表")
@ApiImplicitParam(name = "integrityParam", value = "数据完整性参数", required = true)
public HttpResult<List<IntegrityVO>> getIntegrityData(@RequestBody @Validated DeviceInfoParam.BusinessParam integrityParam) {
String methodDescribe = getMethodDescribe("getIntegrityData");
List<IntegrityVO> list = integrityService.getIntegrityData(integrityParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getIntegrityIcon")
@ApiOperation("数据完整性图表")
@ApiImplicitParam(name = "integrityIconParam", value = "数据完整性参数", required = true)
public HttpResult<IntegrityIconVO> getIntegrityIcon(@RequestBody @Validated DeviceInfoParam.CompareBusinessParam integrityIconParam) {
String methodDescribe = getMethodDescribe("getIntegrityIcon");
IntegrityIconVO integrityIconVO = integrityService.getIntegrityIcon(integrityIconParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, integrityIconVO, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/exportIntegrityData")
@ApiOperation("数据完整性")
@ApiImplicitParam(name = "integrityParam", value = "数据完整性参数", required = true)
public HttpResult<String> exportIntegrityData(@RequestBody @Validated DeviceInfoParam.BusinessParam integrityParam) {
String methodDescribe = getMethodDescribe("exportIntegrityData");
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, integrityService.exportIntegrityData(integrityParam, methodDescribe), methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DOWNLOAD)
@GetMapping("/exportIntegrityDataExcel")
@ApiOperation("导出数据完整性报表")
@ApiImplicitParam(name = "filePath", value = "报表路径", required = true)
public void exportIntegrityDataExcel(String filePath, HttpServletResponse response) {
PoiUtil.exportFileByAbsolutePath(filePath,response);
}
}

View File

@@ -0,0 +1,49 @@
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.HistoryHarmOverLimitParam;
import com.njcn.harmonic.pojo.vo.HistoryHarmOverLimitVO;
import com.njcn.harmonic.service.NormLimitService;
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;
import java.util.List;
/**
* 异常数据统计
* @author denghuajun
* @version 1.0.0
* @date 2022/3/18
*/
@Slf4j
@RestController
@RequestMapping("/normLimit")
@Api(tags = "异常数据统计")
@AllArgsConstructor
public class NormLimitController extends BaseController {
private final NormLimitService normLimitService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getHistoryTableData")
@ApiOperation("异常数据统计")
@ApiImplicitParam(name = "historyHarmOverLimitParam", value = "异常数据统计参数", required = true)
public HttpResult<List<HistoryHarmOverLimitVO>> getHistoryTableData(@RequestBody @Validated HistoryHarmOverLimitParam historyHarmOverLimitParam) {
String methodDescribe = getMethodDescribe("getHistoryTableData");
List<HistoryHarmOverLimitVO> list = normLimitService.getHistoryTableData(historyHarmOverLimitParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -0,0 +1,62 @@
package com.njcn.harmonic.controller;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.OnlineRateCensusVO;
import com.njcn.harmonic.pojo.vo.OnlineRateVO;
import com.njcn.harmonic.service.OnlineRateDataService;
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;
import java.util.List;
/**
* 类的介绍:
*
* @author chenchao
* @createTime 2022/2/16 11:17
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/onlineRateData")
@Api(tags = "终端在线率")
@AllArgsConstructor
public class OnlineRateDataController extends BaseController {
private final OnlineRateDataService onlineRateDataService;
@OperateInfo
@PostMapping("/getOnlineRateData")
@ApiOperation("终端在线率列表")
@ApiImplicitParam(name = "onlineRateParam", value = "终端在线率参数", required = true)
public HttpResult<List<OnlineRateVO>> getOnlineRateData(@RequestBody @Validated DeviceInfoParam.BusinessParam onlineRateParam) {
String methodDescribe = getMethodDescribe("getOnlineRateData");
List<OnlineRateVO> list = onlineRateDataService.getOnlineRateData(onlineRateParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo
@PostMapping("/getOnlineRateDataCensus")
@ApiOperation("终端在线率统计")
@ApiImplicitParam(name = "onlineRateCensusParam", value = "终端在线率参数", required = true)
public HttpResult<OnlineRateCensusVO> getOnlineRateDataCensus(@RequestBody @Validated DeviceInfoParam.CompareBusinessParam onlineRateCensusParam){
String methodDescribe = getMethodDescribe("getOnlineRateDataCensus");
OnlineRateCensusVO onlineRateCensusVO = onlineRateDataService.getOnlineRateDataCensus(onlineRateCensusParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateCensusVO,methodDescribe);
}
}

View File

@@ -0,0 +1,91 @@
//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.common.utils.LogUtil;
//import com.njcn.device.pojo.dto.PollutionLineDTO;
//import com.njcn.device.pojo.dto.PollutionSubstationDTO;
//import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
//import com.njcn.harmonic.pojo.vo.PollutionVO;
//import com.njcn.harmonic.service.IPollutionService;
//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;
//
//import java.util.List;
//
///**
// * 类的介绍:电能质量污区图
// *
// * @author xuyang
// * @version 1.0.0
// * @createTime 2022/2/21 15:59
// */
//@Validated
//@Slf4j
//@RestController
//@RequestMapping("/pollution")
//@Api(tags = "电能质量污区图")
//@AllArgsConstructor
//public class PollutionController extends BaseController {
//
// private final IPollutionService pollutionService;
//
// @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 = pollutionService.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 = pollutionService.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 = pollutionService.getLineInfoById(param);
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
// }
//
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @PostMapping("/getLineRank")
// @ApiOperation("获取前十监测点排名")
// @ApiImplicitParam(name = "param", value = "实体参数", required = true)
// public HttpResult<List<PollutionLineDTO>> getLineRank(@RequestBody HarmonicPublicParam param) {
// String methodDescribe = getMethodDescribe("getLineRank");
// LogUtil.njcnDebug(log, "{},实体参数:{}", methodDescribe, param);
// List<PollutionLineDTO> list = pollutionService.getLineRank(param);
// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
// }
//
//
//
//}

View File

@@ -0,0 +1,47 @@
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.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.SteadyInfoData;
import com.njcn.harmonic.service.SteadyDataService;
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 denghuajun
* @date 2022/3/4 15:24
* 稳态指标合格率
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/pollution")
@Api(tags = "稳态指标合格率")
@AllArgsConstructor
public class SteadyDataController extends BaseController {
private final SteadyDataService steadyDataService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSteadyData")
@ApiOperation("稳态指标合格率")
@ApiImplicitParam(name = "pulicTimeStatisParam", value = "稳态指标合格率参数", required = true)
public HttpResult<SteadyInfoData> getSteadyData(@RequestBody @Validated PulicTimeStatisParam pulicTimeStatisParam) {
String methodDescribe = getMethodDescribe("getSteadyData");
SteadyInfoData list = steadyDataService.getSteadyData(pulicTimeStatisParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -0,0 +1,72 @@
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.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.SteadyExceedRateCensusVO;
import com.njcn.harmonic.pojo.vo.SteadyExceedRateVO;
import com.njcn.harmonic.service.SteadyExceedRateService;
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;
import java.util.List;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/04/12 11:44
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/steadyExceedRate")
@Api(tags = "稳态指标超标占比")
@AllArgsConstructor
public class SteadyExceedRateController extends BaseController {
private final SteadyExceedRateService steadyExceedRateService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSteadyExceedRateData")
@ApiOperation("稳态超标占比列表")
@ApiImplicitParam(name = "steadyExceedParam", value = "稳态超标占比参数", required = true)
public HttpResult<List<SteadyExceedRateVO>> getSteadyExceedRateData(@RequestBody @Validated DeviceInfoParam.BusinessParam steadyExceedParam){
String methodDescribe = getMethodDescribe("getSteadyExceedRateData");
List<SteadyExceedRateVO> list = steadyExceedRateService.getSteadyExceedRateData(steadyExceedParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSteadyExceedRateCensus")
@ApiOperation("稳态超标占比图表")
@ApiImplicitParam(name = "steadyExceedCensusParam", value = "稳态超标占比参数", required = true)
public HttpResult<SteadyExceedRateCensusVO> getSteadyExceedRateCensus(@RequestBody @Validated DeviceInfoParam.ConditionBusinessParam steadyExceedCensusParam){
String methodDescribe = getMethodDescribe("getSteadyExceedRateCensus");
SteadyExceedRateCensusVO censusVO = steadyExceedRateService.getSteadyExceedRateCensus(steadyExceedCensusParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, censusVO, methodDescribe);
}
}

View File

@@ -0,0 +1,62 @@
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.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.SteadyQualifyCensusVO;
import com.njcn.harmonic.pojo.vo.SteadyQualifyVO;
import com.njcn.harmonic.service.SteadyQualifyService;
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;
import java.util.List;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/03/30 19:18
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/steadyQualify")
@Api(tags = "稳态合格率统计")
@AllArgsConstructor
public class SteadyQualifyController extends BaseController {
private final SteadyQualifyService steadyQualifyService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSteadyQualifyData")
@ApiOperation("稳态合格率列表")
@ApiImplicitParam(name = "steadyParam", value = "稳态列表参数", required = true)
public HttpResult<List<SteadyQualifyVO>> getSteadyQualifyData(@RequestBody @Validated DeviceInfoParam.BusinessParam steadyParam){
String methodDescribe = getMethodDescribe("getSteadyQualifyData");
List<SteadyQualifyVO> list = steadyQualifyService.getSteadyQualifyData(steadyParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getSteadyQualifyCensus")
@ApiOperation("稳态合格率图表")
@ApiImplicitParam(name = "steadyCensusParam", value = "稳态列表参数", required = true)
public HttpResult<SteadyQualifyCensusVO> getSteadyQualifyCensus(@RequestBody @Validated DeviceInfoParam.BusinessParam steadyCensusParam){
String methodDescribe = getMethodDescribe("getSteadyQualifyCensus");
SteadyQualifyCensusVO censusVO = steadyQualifyService.getSteadyQualifyCensus(steadyCensusParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, censusVO, methodDescribe);
}
}

View File

@@ -0,0 +1,62 @@
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.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.THDistortionCensusVO;
import com.njcn.harmonic.pojo.vo.THDistortionVO;
import com.njcn.harmonic.service.THDistortionService;
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;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/03/10 21:39
* @Description: <描述>
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/tHDistortion")
@Api(tags = "谐波总畸变率")
@AllArgsConstructor
public class THDController extends BaseController {
private final THDistortionService thDistortionService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getTHDistortionData")
@ApiOperation("谐波总畸变率列表")
@ApiImplicitParam(name = "thDistortionParam", value = "谐波总畸变率参数", required = true)
public HttpResult<List<THDistortionVO>> getTHDistortionData(@RequestBody @Validated DeviceInfoParam.BusinessParam thDistortionParam){
String methodDescribe = getMethodDescribe("getTHDistortionData");
List<THDistortionVO> list = thDistortionService.getTHDistortionData(thDistortionParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getTHDistortionCensus")
@ApiOperation("谐波总畸变率统计")
@ApiImplicitParam(name = "thDistortionCensusParam", value = "谐波总畸变率参数", required = true)
public HttpResult<THDistortionCensusVO> getTHDistortionCensus(@RequestBody @Validated DeviceInfoParam.BusinessParam thDistortionCensusParam){
String methodDescribe = getMethodDescribe("getTHDistortionCensus");
THDistortionCensusVO censusVO = thDistortionService.getTHDistortionCensus(thDistortionCensusParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, censusVO, methodDescribe);
}
}

View File

@@ -0,0 +1,61 @@
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.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.TerminalCensusVO;
import com.njcn.harmonic.pojo.vo.TerminalVO;
import com.njcn.harmonic.service.TerminalService;
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;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/03/01 21:57
* @Description: <描述>
*/
@Validated
@Slf4j
@RestController
@RequestMapping("/terminal")
@Api(tags = "终端状态")
@AllArgsConstructor
public class TerminalController extends BaseController {
private final TerminalService terminalService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getTerminalData")
@ApiOperation("终端状态列表")
@ApiImplicitParam(name = "terminalParam", value = "终端状态参数", required = true)
public HttpResult<List<TerminalVO>> getTerminalData (@RequestBody @Validated DeviceInfoParam.BusinessParam terminalParam){
String methodDescribe = getMethodDescribe("getTerminalData");
List<TerminalVO> list = terminalService.getTerminalData(terminalParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getTerminalDataCensus")
@ApiOperation("终端状态统计")
@ApiImplicitParam(name = "terminalCensusParam", value = "终端状态参数", required = true)
public HttpResult<TerminalCensusVO> getTerminalDataCensus (@RequestBody @Validated DeviceInfoParam.BusinessParam terminalCensusParam){
String methodDescribe = getMethodDescribe("getTerminalDataCensus");
TerminalCensusVO censusVO = terminalService.getTerminalDataCensus(terminalCensusParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, censusVO, methodDescribe);
}
}

View File

@@ -0,0 +1,9 @@
package com.njcn.harmonic.mapper;
/**
* @author 徐扬
*/
public interface HarmonicMapper {
}

View File

@@ -0,0 +1,40 @@
package com.njcn.harmonic.mapper;
import com.njcn.harmonic.pojo.vo.IntegrityVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author 徐扬
*/
public interface IntegrityMapper {
/**
* 获取监测点相关信息
*/
List<IntegrityVO> getIntegrityData(@Param("list") List<String> lineList);
/**
* 获取供电公司、装置、母线相关信息
*/
List<IntegrityVO> getLineInfoByList(@Param("list") List<String> list);
/**
* 获取变电站集合信息
*/
List<IntegrityVO> getSubstationInfoByList(@Param("list") List<String> list);
/**
* 获取省份集合信息
*/
List<IntegrityVO> getProviceInfoByList(@Param("list") List<String> list);
/**
* 获取上报监测点
*/
List<String> getReportMonitor(@Param("list") List<String> list);
}

View File

@@ -0,0 +1,28 @@
package com.njcn.harmonic.mapper;
import com.njcn.harmonic.pojo.vo.OnlineRateVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author 徐扬
*/
public interface OnlineRateDataMapper {
/**
* 获取终端相关信息
*/
List<OnlineRateVO> getOnlineRateData(@Param("list") List<String> lineList);
/**
* 获取省份、供电公司、装置、母线相关信息
*/
List<OnlineRateVO> getLineInfoByList(@Param("list") List<String> list);
// /**
// * 获取变电站集合信息
// */
// List<OnlineRateVO> getSubstationInfoByList(@Param("list") List<String> list);
}

View File

@@ -0,0 +1,9 @@
package com.njcn.harmonic.mapper;
/**
* @author 徐扬
*/
public interface PollutionMapper {
}

View File

@@ -0,0 +1,24 @@
package com.njcn.harmonic.mapper;
import com.njcn.harmonic.pojo.vo.SteadyExceedRateVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/04/15 11:23
*/
public interface SteadyExceedRateMapper {
/**
* 获取稳态监测点各指标相关信息
*/
List<SteadyExceedRateVO> getSteadyExceedRateData(@Param("list") List<String> lineIndexes);
List<SteadyExceedRateVO> getLineInfoByList(@Param("list") List<String> collect);
List<SteadyExceedRateVO> getSubstationList(@Param("list") List<String> ids);
}

View File

@@ -0,0 +1,24 @@
package com.njcn.harmonic.mapper;
import com.njcn.harmonic.pojo.vo.SteadyQualifyVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/04/01 17:03
* @Description: <描述>
*/
public interface SteadyQualifyMapper {
/**
* 获取稳态监测点各指标相关信息
*/
List<SteadyQualifyVO> getSteadyQualifyData(@Param("list") List<String> lineIndexes);
/**
* 获取父级
*/
List<SteadyQualifyVO> getLineInfoByList(@Param("list") List<String> collect);
}

View File

@@ -0,0 +1,24 @@
package com.njcn.harmonic.mapper;
import com.njcn.harmonic.pojo.vo.THDistortionVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/03/21 20:52
* @Description: <描述>
*/
public interface THDistortionMapper {
/**
* 获取监测点相关信息
*/
List<THDistortionVO> getLineData(@Param("list") List<String> lineList);
/**
* 获取监测点父级信息
*/
List<THDistortionVO> getLineInfoByList(@Param("list") List<String> lineList);
}

View File

@@ -0,0 +1,26 @@
package com.njcn.harmonic.mapper;
import com.njcn.harmonic.pojo.vo.TerminalVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/03/07 19:02
* @Description: <描述>
*/
public interface TerminalDataMapper {
/**
* 获取终端数据
* @return
*/
List<TerminalVO> getTerminalData(@Param("list") List<String> list);
List<TerminalVO> getLineInfoByList(@Param("list") List<String> list);
}

View File

@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.HarmonicMapper">
<select id="getIntegrityData" resultType="HarmonicDeptVO">
SELECT
A.Id,
A.Pid,
A.Pids,
A.`Name` name,
A.State,
A.Sort,
A.Level,
D.`Name` voltageLevel,
D1.`Name` factoryName,
C.IP networkParam,
C.Update_Time time,
A2.`Name` deviceName,
D2.`Name` loadType
FROM
pq_line A,
pq_voltage B,
pq_line A1,
pq_device C,
pq_line A2,
sys_dict_data D,
sys_dict_data D1,
pq_line_detail E,
sys_dict_data D2
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Pid = B.Id
AND B.Id = A1.Id
AND B.Scale = D.Id
<if test="voltageList != null and voltageList.size()>0">
AND B.Scale IN
<foreach item="item1" collection="voltageList" separator="," open="(" close=")">
#{item1}
</foreach>
</if>
AND A1.Pid = C.Id
AND C.Dev_Data_Type IN (1,2)
AND C.Run_Flag = 0
AND C.Dev_Model = 1
AND C.Id = A2.Id
<if test="deviceList != null and deviceList.size()>0">
AND C.Manufacturer IN
<foreach item="item2" collection="deviceList" separator="," open="(" close=")">
#{item2}
</foreach>
</if>
AND C.Manufacturer = D1.Id
AND A.Id = E.Id
AND E.Load_Type = D2.Id
<if test="interferenceList != null and interferenceList.size()>0">
AND E.Load_Type IN
<foreach item="item3" collection="interferenceList" separator="," open="(" close=")">
#{item3}
</foreach>
</if>
</select>
<select id="getLineInfoByList" resultType="HarmonicDeptVO">
SELECT
A.id,
A.Pid,
A.Pids,
A.`Name`,
A.Sort,
A.Level level
FROM
pq_line A
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<select id="getSubstationInfoByList" resultType="HarmonicDeptVO">
SELECT
A.id,
A.Pid,
A.Pids,
A.`Name`,
A.Sort,
A.Level level,
C.`Name` voltageLevel
FROM
pq_line A,
pq_substation B,
sys_dict_data C
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Id = B.Id AND B.Scale = C.Id
</select>
<select id="getReportMonitor" resultType="string">
SELECT
Id
FROM
pq_line_detail
WHERE
Monitor_Id IS NOT NULL
AND
Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
</mapper>

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.IntegrityMapper">
<select id="getIntegrityData" resultType="IntegrityVO">
SELECT
line.Id,
line.Pid,
line.Pids,
line.`Name` NAME,
line.Sort,
line.LEVEL,
scale.`Name` voltageLevel,
factory.`Name` factoryName,
pqdevice.IP networkParam,
pqdevice.Update_Time time,
pqdevice.Com_Flag state,
device.`Name` deviceName,
loadtype.`Name` loadType
FROM
pq_line line,
pq_line_detail lineDetail,
pq_line voltage,
pq_voltage pqvoltage,
pq_line device,
pq_device pqdevice,
sys_dict_data scale,
sys_dict_data factory,
sys_dict_data loadtype
WHERE
line.pid = voltage.id
AND line.pid = pqvoltage.id
AND pqvoltage.Scale = scale.id
AND voltage.pid = device.id
AND voltage.pid = pqdevice.id
AND pqdevice.Manufacturer = factory.id
AND line.id = lineDetail.id
AND lineDetail.Load_Type = loadtype.id
AND line.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<select id="getLineInfoByList" resultType="IntegrityVO">
SELECT
A.id,
A.Pid,
A.Pids,
A.`Name`,
A.Sort,
A.Level level
FROM
pq_line A
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<select id="getSubstationInfoByList" resultType="IntegrityVO">
SELECT
A.id,
A.Pid,
A.Pids,
A.`Name`,
A.Sort,
A.Level level,
C.`Name` voltageLevel
FROM
pq_line A,
pq_substation B,
sys_dict_data C
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Id = B.Id AND B.Scale = C.Id
</select>
<select id="getProviceInfoByList" resultType="IntegrityVO">
SELECT
A.id,
A.Pid,
A.Pids,
A.Sort,
A.Level level,
B.`Name` name
FROM
pq_line A,
sys_area B
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.name = B.Id
</select>
<select id="getReportMonitor" resultType="string">
SELECT
Id
FROM
pq_line_detail
WHERE
Monitor_Id IS NOT NULL
AND
Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
</mapper>

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.OnlineRateDataMapper">
<select id="getOnlineRateData" resultType="OnlineRateVO">
SELECT
A.Id,
A.Pid,
A.Pids,
A.Name,
A.State,
A.Sort,
A.Level,
B.`IP` networkParam,
B.`Update_Time` time,
D.`Name` factoryName,
A.`Name` deviceName
FROM
pq_line A,
pq_device B,
sys_dict_data D
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Id = B.Id
AND B.Manufacturer = D.Id
</select>
<select id="getLineInfoByList" resultType="OnlineRateVO">
SELECT
A.Id,
A.Pid,
A.Pids,
A.Name,
A.Sort,
A.Level level
FROM
pq_line A
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<!-- <select id="getSubstationInfoByList" resultType="OnlineRateVO">-->
<!-- SELECT-->
<!-- A.Id,-->
<!-- A.Pid,-->
<!-- A.Pids,-->
<!-- A.`Name` name,-->
<!-- A.Sort,-->
<!-- A.`Level` level,-->
<!-- FROM-->
<!-- pq_line A,-->
<!-- pq_line A1,-->
<!-- pq_substation B,-->
<!-- sys_dict_data C-->
<!-- WHERE-->
<!-- A.Pid = A1.Id-->
<!-- AND A1.Id = B.Id-->
<!-- AND B.Id IN-->
<!-- <foreach item="item" collection="list" separator="," open="(" close=")">-->
<!-- #{item}-->
<!-- </foreach>-->
<!-- AND B.Scale = C.Id-->
<!-- </select>-->
</mapper>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.PollutionMapper">
</mapper>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.SteadyExceedRateMapper">
<select id="getSteadyExceedRateData" resultType="SteadyExceedRateVO">
SELECT
A.Id,
A.Pid,
A.Pids,
A.`Name` name,
C.`Name` voltageLevel,
D.`IP` networkParam,
C1.`Name` factoryName,
A.`Name` lineName
FROM
pq_line A,
pq_voltage B,
sys_dict_data C,
pq_device D,
pq_line A1,
sys_dict_data C1
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Pid = B.Id
AND B.Scale = C.Id
AND A.Pid = A1.Id
AND A1.Pid = D.Id
AND D.Manufacturer = C1.Id
</select>
<select id="getLineInfoByList" resultType="SteadyExceedRateVO">
SELECT
Id,
Pid,
Pids,
`Name`
FROM
pq_line
WHERE
Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<select id="getSubstationList" resultType="SteadyExceedRateVO">
SELECT
A.Id,
A.Pid,
A.Pids,
C.`Name` voltageLevel
FROM
pq_line A,
pq_substation B,
sys_dict_data C
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Id = B.Id
AND B.Scale = C.Id
</select>
</mapper>

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.SteadyQualifyMapper">
<select id="getSteadyQualifyData" resultType="SteadyQualifyVO">
SELECT
A.Id,
A.Pid,
A.Pids,
A.`Name` name,
C.`Name` voltageLevel,
D.`IP` networkParam,
C1.`Name` factoryName,
A.`Name` lineName
FROM
pq_line A,
pq_voltage B,
sys_dict_data C,
pq_device D,
pq_line A1,
sys_dict_data C1
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Pid = B.Id
AND B.Scale = C.Id
AND A.Pid = A1.Id
AND A1.Pid = D.Id
AND D.Manufacturer = C1.Id
</select>
<select id="getLineInfoByList" resultType="SteadyQualifyVO">
SELECT
Id,
Pid,
Pids,
`Name`
FROM
pq_line
WHERE
Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
</mapper>

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.THDistortionMapper">
<select id="getLineData" resultType="THDistortionVO">
SELECT
A.Id,
A.Pid,
A.Pids,
A.`Name` name,
C.`IP` networkParam,
D.`Name` voltageLevel,
A.`Name` lineName
FROM
pq_line A,
pq_voltage B,
pq_device C,
sys_dict_data D,
pq_line A1
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
AND A.Pid = B.Id
AND B.Scale = D.Id
AND A.Pid = A1.Id
AND A1.Pid = C.Id
</select>
<select id="getLineInfoByList" resultType="THDistortionVO">
SELECT
Id,
Pid,
Pids,
`Name`
FROM
pq_line
WHERE
Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
</mapper>

View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.harmonic.mapper.TerminalDataMapper">
<select id="getTerminalData" resultType="TerminalVO">
SELECT
A.Id,
A.Pid,
A.Pids,
A.Name,
A.Level,
B.`Run_Flag` flag
FROM
pq_line A,
pq_device B
WHERE
A.Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">#{item}</foreach>
AND A.Id = B.Id
AND B.Dev_Data_Type IN (1,2)
</select>
<select id="getLineInfoByList" resultType="TerminalVO">
SELECT
Id,
Pid,
Pids,
`Name` name,
`Level` level
FROM
pq_line
WHERE
Id IN
<foreach item="item" collection="list" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<!-- SELECT-->
<!-- A.Id,-->
<!-- A.`Run_Flag` flag-->
<!-- FROM-->
<!-- pq_device A,-->
<!-- pq_voltage B,-->
<!-- pq_line C,-->
<!-- pq_line_detail D,-->
<!-- pq_line C1,-->
<!-- pq_line C2-->
<!-- WHERE-->
<!-- A.Id IN-->
<!-- <foreach item="item" collection="list" separator="," open="(" close=")">-->
<!-- #{item}-->
<!-- </foreach>-->
<!-- AND B.Id = C.Id-->
<!-- AND C.Pid = A.Id-->
<!-- <if test="deviceList != null and deviceList.size()>0">-->
<!-- AND A.Manufacturer IN-->
<!-- <foreach item="item2" collection="deviceList" separator="," open="(" close=")">-->
<!-- #{item2}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- <if test="interferenceList != null and interferenceList.size()>0">-->
<!-- AND D.Load_Type IN-->
<!-- <foreach item="item3" collection="interferenceList" separator="," open="(" close=")">-->
<!-- #{item3}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- AND D.Id = C1.Id-->
<!-- AND C1.Pid = C2.Id-->
<!-- AND C2.Pid = A.Id-->
<!-- GROUP by A.Id-->
</mapper>

View File

@@ -0,0 +1,13 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.AssesVO;
/**
* @author denghuajun
* @date 2022/3/2
*
*/
public interface AssesService {
AssesVO getQualityAssessData(PulicTimeStatisParam pulicTimeStatisParam);
}

View File

@@ -0,0 +1,22 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.ComAssessVO;
import java.util.List;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/04/21 10:21
*/
public interface ComAssessService {
/**
* 获取稳态综合评估分值
* @param comAccessParam
* @return
*/
List<ComAssessVO> getComAccessData(DeviceInfoParam.BusinessParam comAccessParam);
}

View File

@@ -0,0 +1,18 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.vo.CommunicateVO;
import com.njcn.harmonic.pojo.param.PulicTimeParam;
import com.njcn.harmonic.pojo.param.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.CommunicateStatisticsVO;
/**
* @author denghuajun
* @date 2022/2/28
*
*/
public interface CommunicateService {
CommunicateVO getComFlagInfoData(PulicTimeParam pulicTimeParam);
CommunicateStatisticsVO getRunInfoData(PulicTimeStatisParam pulicTimeStatisParam);
}

View File

@@ -0,0 +1,20 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.HarmInHarmParam;
import com.njcn.harmonic.pojo.vo.HarmInHarmVO;
/**
* 类的介绍
* @author denghuajun
* @version 1.0.0
* @date 2022/3/17
*/
public interface HarmInHarmService {
/**
* 获取谐波频谱数据
* @param harmInHarmParam 参数
* @return 返回值
*/
HarmInHarmVO getHarmInHarmData(HarmInHarmParam harmInHarmParam);
}

View File

@@ -0,0 +1,30 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.HistoryParam;
import com.njcn.harmonic.pojo.param.NormHistoryParam;
import com.njcn.harmonic.pojo.vo.HistoryDataResultVO;
import java.util.List;
/**
* 稳态数据
* @author denghuajun
* @date 2022/3/14
*
*/
public interface HistoryResultService {
/**
* 稳态数据分析
* @param historyParam 参数
* @return 结果
*/
List<HistoryDataResultVO> getHistoryResult(HistoryParam historyParam);
/**
* 异常数据趋势图
* @param normHistoryParam 参数
* @return 结果
*/
List<HistoryDataResultVO> getHistoryLineData(NormHistoryParam normHistoryParam);
}

View File

@@ -0,0 +1,51 @@
package com.njcn.harmonic.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.harmonic.pojo.vo.MonitorOverLimitVO;
import com.njcn.harmonic.pojo.vo.OverAreaLimitVO;
import com.njcn.harmonic.pojo.vo.OverAreaVO;
import com.njcn.harmonic.pojo.vo.WarningSubstationVO;
import com.njcn.user.pojo.param.UserParam;
import java.util.List;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/4/29 14:48
*/
public interface IAnalyzeService {
/**
* 功能描述: 区域稳态超标统计
* @author xy
* @param param 实体参数
* @date 2022/5/5 08:59
* @return
*/
Page<OverAreaLimitVO> getAreaData(OverAreaVO param);
/**
* 功能描述: 告警变电站明细
* @author xy
* @param param 实体参数
* @date 2022/5/6 15:59
* @return
*/
Page<WarningSubstationVO> getWarningSubstation(OverAreaVO param);
/**
* 功能描述:监测点稳态超标统计
* @author xy
* @param param 实体参数
* @date 2022/5/9 11:18
* @return
*/
Page<MonitorOverLimitVO> monitorOverLimitVO(OverAreaVO param);
String exportArea(OverAreaVO param, String methodDescribe);
}

View File

@@ -0,0 +1,76 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.vo.HarmonicDeptVO;
import com.njcn.harmonic.pojo.vo.HarmonicLineVO;
import com.njcn.harmonic.pojo.vo.HarmonicSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author xy
* @date 2021/12/31 9:52
*/
public interface IHarmonicService {
/**
* 功能描述: 获取部门变电站关系
*
* @param harmonicPublicParam 实体参数
* @return java.util.List<java.lang.Object>
* @author xy
* @date 2022/2/21 16:48
*/
List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam harmonicPublicParam);
/**
* 功能描述: 根据变电站获取监测点详情
*
* @param param
* @return java.util.List<com.njcn.harmonic.pojo.vo.PollutionVO>
* @author xy
* @date 2022/2/21 20:51
*/
List<HarmonicDeptVO> getDeptInfo(HarmonicPublicParam param);
/**
* 功能描述: 根据部门获取变电站列表
*
* @param param
* @return java.util.List<com.njcn.harmonic.pojo.vo.PollutionVO>
* @author xy
* @date 2022/2/21 20:51
*/
List<HarmonicSubstationVO> getSubstationInfoById(HarmonicPublicParam param);
/**
* 功能描述: 根据变电站获取监测点详情
*
* @param substationParam
* @return java.util.List<com.njcn.harmonic.pojo.vo.PollutionVO>
* @author xy
* @date 2022/2/21 20:51
*/
List<HarmonicLineVO> getLineInfoById(HarmonicPublicParam substationParam);
/**
* 功能描述:获取排名前10的监测点
* @param param
*
* @return java.util.List<com.njcn.harmonic.pojo.vo.LoadTypeVO>
* @author xy
* @date 2022/2/22 10:04
*/
List<HarmonicLineVO> getLineRank(HarmonicPublicParam param);
}

View File

@@ -0,0 +1,53 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.dto.PollutionLineDTO;
import com.njcn.device.pojo.dto.PollutionSubstationDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import java.util.List;
/**
* @author 徐扬
*/
public interface IPollutionService {
/**
* 功能描述: 获取部门变电站关系
*
* @param param
* @return java.util.List<java.lang.Object>
* @author xy
* @date 2022/2/21 16:48
*/
List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam param);
/**
* 功能描述: 根据部门获取变电站详情
*
* @param param 部门参数
* @return java.util.List<com.njcn.harmonic.pojo.vo.PollutionVO>
* @author xy
* @date 2022/2/21 20:51
*/
List<PollutionSubstationDTO> getSubstationInfoById(HarmonicPublicParam param);
/**
* 功能描述: 根据变电站获取监测点详情
* @param param
* @return java.util.List<com.njcn.harmonic.pojo.vo.PollutionVO>
* @author xy
* @date 2022/2/21 20:51
*/
List<PollutionLineDTO> getLineInfoById(HarmonicPublicParam param);
/**
* 功能描述:获取排名前10的监测点
* @param param
*
* @return java.util.List<com.njcn.harmonic.pojo.vo.LoadTypeVO>
* @author xy
* @date 2022/2/22 10:04
*/
List<PollutionLineDTO> getLineRank(HarmonicPublicParam param);
}

View File

@@ -0,0 +1,45 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.IntegrityIconVO;
import com.njcn.harmonic.pojo.vo.IntegrityVO;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author xy
* @date 2021/12/31 9:52
*/
public interface IntegrityService {
/**
* 功能描述: 获取数据完整性
* TODO
* @param integrityParam
* @return java.util.List<com.njcn.harmonic.pojo.vo.IntegrityVO>
* @author xy
* @date 2022/1/4 9:27
*/
List<IntegrityVO> getIntegrityData(DeviceInfoParam.BusinessParam integrityParam);
/**
* 功能描述: 获取数据完整性图表
* TODO
* @param integrityIconParam
* @return java.util.List<com.njcn.harmonic.pojo.vo.IntegrityVO>
* @author xy
* @date 2022/1/4 9:27
*/
IntegrityIconVO getIntegrityIcon(DeviceInfoParam.CompareBusinessParam integrityIconParam);
/**
* excel0报表导出数据完整性
* @param integrityParam 数据完整性参数
* @param methodDescribe 方法描述
* @return 文件路径
*/
String exportIntegrityData(DeviceInfoParam.BusinessParam integrityParam, String methodDescribe);
}

View File

@@ -0,0 +1,21 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.HistoryHarmOverLimitParam;
import com.njcn.harmonic.pojo.vo.HistoryHarmOverLimitVO;
import java.util.List;
/**
* @author denghuajun
* @version 1.0.0
* @date 2022/3/18
*/
public interface NormLimitService {
/**
* 获取异常数据
* @param historyHarmOverLimitParam 参数
* @return 返回值
*/
List<HistoryHarmOverLimitVO> getHistoryTableData(HistoryHarmOverLimitParam historyHarmOverLimitParam);
}

View File

@@ -0,0 +1,37 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.OnlineRateCensusVO;
import com.njcn.harmonic.pojo.vo.OnlineRateVO;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author xy
* @date 2021/12/31 9:52
*/
public interface OnlineRateDataService {
/**
* 功能描述: 获取终端在线率列表
* TODO
* @param onlineRateParam
* @return java.util.List<com.njcn.harmonic.pojo.vo.OnlineRateVO>
* @author xy
* @date 2022/1/4 9:27
*/
List<OnlineRateVO> getOnlineRateData(DeviceInfoParam.BusinessParam onlineRateParam);
/**
* 功能描述: 获取终端在线率统计
* TODO
* @param onlineRateCensusParam
* @author cc
* @date 2022/3/1 15:47
*/
OnlineRateCensusVO getOnlineRateDataCensus(DeviceInfoParam.CompareBusinessParam onlineRateCensusParam);
}

View File

@@ -0,0 +1,13 @@
package com.njcn.harmonic.service;
import com.njcn.harmonic.pojo.param.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.SteadyInfoData;
/**
* @author denghuajun
* @date 2022/3/4
* 稳态指标合格率
*/
public interface SteadyDataService {
SteadyInfoData getSteadyData(PulicTimeStatisParam pulicTimeStatisParam);
}

View File

@@ -0,0 +1,30 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.SteadyExceedRateCensusVO;
import com.njcn.harmonic.pojo.vo.SteadyExceedRateVO;
import java.util.List;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/04/12 11:49
*/
public interface SteadyExceedRateService {
/**
* 功能描述: 获取稳态超标占比列表信息
* @param steadyExceedParam
* @return
*/
List<SteadyExceedRateVO> getSteadyExceedRateData(DeviceInfoParam.BusinessParam steadyExceedParam);
/**
* 功能描述: 稳态超标占比图表信息
* @param steadyExceedCensusParam
* @return
*/
SteadyExceedRateCensusVO getSteadyExceedRateCensus(DeviceInfoParam.ConditionBusinessParam steadyExceedCensusParam);
}

View File

@@ -0,0 +1,31 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.SteadyQualifyCensusVO;
import com.njcn.harmonic.pojo.vo.SteadyQualifyVO;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/03/30 20:33
* @Description: <描述>
*/
public interface SteadyQualifyService {
/**
* 功能描述: 获取稳态合格率信息
* TODO
* @param steadyParam
* @author cc
* @date 2022/03/20 20:34
*/
List<SteadyQualifyVO> getSteadyQualifyData(DeviceInfoParam.BusinessParam steadyParam);
/**
* 功能描述: 获取稳态合格率图表信息
* @param steadyCensusParam
* @return
*/
SteadyQualifyCensusVO getSteadyQualifyCensus(DeviceInfoParam.BusinessParam steadyCensusParam);
}

View File

@@ -0,0 +1,30 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.THDistortionCensusVO;
import com.njcn.harmonic.pojo.vo.THDistortionVO;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/03/10 22:00
* @Description: <描述>
*/
public interface THDistortionService {
/**
* 功能描述: 获取谐波总畸变率
* @param thDistortionParam
* @return
*/
List<THDistortionVO> getTHDistortionData(DeviceInfoParam.BusinessParam thDistortionParam);
/**
* 功能描述: 获取总畸变率图表
* @param thDistortionCensusParam
* @return
*/
THDistortionCensusVO getTHDistortionCensus(DeviceInfoParam.BusinessParam thDistortionCensusParam);
}

View File

@@ -0,0 +1,31 @@
package com.njcn.harmonic.service;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.pojo.vo.TerminalCensusVO;
import com.njcn.harmonic.pojo.vo.TerminalVO;
import java.util.List;
/**
* @author: chenchao
* @date: 2022/03/02 10:08
* @Description: <描述>
*/
public interface TerminalService {
/**
* 功能描述: 获取终端状态
* TODO
* @param terminalParam
* @author cc
* @date 2022/03/02 19:00
*/
List<TerminalVO> getTerminalData(DeviceInfoParam.BusinessParam terminalParam);
/**
* 功能描述: 获取终端状态统计
* @param terminalCensusParam
* @return
*/
TerminalCensusVO getTerminalDataCensus(DeviceInfoParam.BusinessParam terminalCensusParam);
}

View File

@@ -0,0 +1,696 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.FileUtil;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.dto.OverLimitLineDTO;
import com.njcn.device.pojo.dto.PollutionParamDTO;
import com.njcn.device.pojo.dto.WarningSubstationDTO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.dto.excel.area.AreaExcel;
import com.njcn.harmonic.pojo.po.EventDetail;
import com.njcn.harmonic.pojo.po.LimitRate;
import com.njcn.harmonic.pojo.po.LimitTarget;
import com.njcn.harmonic.pojo.vo.MonitorOverLimitVO;
import com.njcn.harmonic.pojo.vo.OverAreaLimitVO;
import com.njcn.harmonic.pojo.vo.OverAreaVO;
import com.njcn.harmonic.pojo.vo.WarningSubstationVO;
import com.njcn.harmonic.service.IAnalyzeService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.poi.excel.ExcelUtil;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/4/29 14:48
*/
@Service
@AllArgsConstructor
public class AnalyzeServiceImpl implements IAnalyzeService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final GeneralInfo generalInfo;
private final HarmonicServiceImpl harmonicService;
private final InfluxDbUtils influxDbUtils;
private final LineFeignClient lineFeignClient;
@Override
public Page<OverAreaLimitVO> getAreaData(OverAreaVO param) {
Page<OverAreaLimitVO> page = new Page<>();
page.setSize(param.getPageSize());
page.setCurrent(param.getPageNum());
List<OverAreaLimitVO> list = new ArrayList<>();
param.setServerName(generalInfo.getMicroServiceName());
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData();
if (!CollectionUtils.isEmpty(deptList)){
page.setTotal(deptList.size());
int pages = (int)Math.ceil(deptList.size()*1.0/param.getPageSize());
page.setPages(pages);
List<List<GeneralDeviceDTO>> pageList = Lists.partition(deptList,param.getPageSize());
List<GeneralDeviceDTO> temList = pageList.get(param.getPageNum()-1);
temList.forEach(item->{
OverAreaLimitVO overAreaLimitVO = new OverAreaLimitVO();
if (!CollectionUtils.isEmpty(item.getLineIndexes())){
List<LimitTarget> limitTargetList = harmonicService.getLimitTarget(item.getLineIndexes(),param.getSearchBeginTime(),param.getSearchEndTime());
overAreaLimitVO = handleAreaData(limitTargetList,item.getLineIndexes(),param);
}
overAreaLimitVO.setName(item.getName());
list.add(overAreaLimitVO);
});
if (!CollectionUtils.isEmpty(list)){
List<OverAreaLimitVO> recordList = new ArrayList<>();
//默认 根据在线监测点个数 倒叙排序
recordList = list.stream().sorted(Comparator.comparing(OverAreaLimitVO::getOnlineMonitorNumber).reversed().thenComparing(OverAreaLimitVO::getName)).collect(Collectors.toList());
page.setRecords(recordList);
return page;
}
}
return page;
}
@Override
@SuppressWarnings("unchecked")
public Page<WarningSubstationVO> getWarningSubstation(OverAreaVO param) {
Page<WarningSubstationVO> page = new Page<>();
page.setSize(param.getPageSize());
page.setCurrent(param.getPageNum());
List<String> line = new ArrayList<>(),subInfo = new ArrayList<>();
List<WarningSubstationDTO> substationDTOList = new ArrayList<>();
Map<String,List<LimitRate>> map = new HashMap<>();
Map<String,List<EventDetail>> map2 = new HashMap<>();
param.setServerName(generalInfo.getMicroServiceName());
List<WarningSubstationVO> list = new ArrayList<>();
List<GeneralDeviceDTO> subList = generalDeviceInfoClient.getPracticalRunDeviceInfoAsSubstation(param).getData();
if (!CollectionUtils.isEmpty(subList)){
page.setTotal(subList.size());
int pages = (int)Math.ceil(subList.size()*1.0/param.getPageSize());
page.setPages(pages);
List<List<GeneralDeviceDTO>> pageList = Lists.partition(subList,param.getPageSize());
List<GeneralDeviceDTO> temList = pageList.get(param.getPageNum()-1);
temList.forEach(item->{
line.addAll(item.getLineIndexes());
subInfo.add(item.getIndex());
});
if (!CollectionUtils.isEmpty(line)){
substationDTOList = lineFeignClient.getWarningSub(subInfo).getData();
List<LimitRate> limitRateList = (List<LimitRate>)getAllData(line,param.getSearchBeginTime(),param.getSearchEndTime(),Param.LIMIT_RATE);
if (!CollectionUtils.isEmpty(limitRateList)){
map = limitRateList.stream().collect(Collectors.groupingBy(LimitRate::getLineId));
}
List<EventDetail> eventDetailList = getEventDetail(line,param.getSearchBeginTime(),param.getSearchEndTime());
if (!CollectionUtils.isEmpty(eventDetailList)){
map2 = eventDetailList.stream().collect(Collectors.groupingBy(EventDetail::getLineId));
}
}
for (GeneralDeviceDTO item : temList) {
int onlineMonitorCount = 0,alertMonitorCount = 0,alertCount = 0,freqCount = 0,voltageCount = 0,ubalanceCount = 0,flickerCount = 0,iNegCount = 0,uharmCount = 0,iharmCount = 0,inuharmCount = 0;
int freqCounts = 0,voltageCounts = 0,uharmCounts = 0,iharmCounts = 0,ubalanceCounts = 0,flickerCounts = 0,inuharmCounts = 0,iNegCounts = 0;
int eventUp = 0,eventDown = 0,eventInterrupt = 0,eventUps = 0,eventDowns = 0,eventInterrupts = 0;
WarningSubstationVO warningSubstationVO = new WarningSubstationVO();
//电站id
warningSubstationVO.setId(item.getIndex());
//电站名称
warningSubstationVO.setPlantName(item.getName());
List<String> lineList = item.getLineIndexes();
if (!CollectionUtils.isEmpty(lineList)){
for (String item2 : lineList) {
//谐波统计
if (!CollectionUtils.isEmpty(map.get(item2))){
LimitRate limitRate = map.get(item2).get(0);
if (!Objects.isNull(limitRate)){
onlineMonitorCount++;
if (limitRate.getFreqDevOverTime() > 0 || limitRate.getVoltageDevOverTime() > 0 || limitRate.getUBalanceOverTime() > 0 || limitRate.getFlickerOverTime() > 0 || limitRate.getINegOverTime() > 0 || limitRate.getUHarm2OverTime() > 0 || limitRate.getIHarm2OverTime() > 0 || limitRate.getInuHarm1OverTime() > 0){
alertMonitorCount++;
}
if (limitRate.getFreqDevOverTime() > 0){
freqCount++;
freqCounts = freqCounts + limitRate.getFreqDevOverTime();
}
if (limitRate.getVoltageDevOverTime() > 0){
voltageCount++;
voltageCounts = voltageCounts + limitRate.getVoltageDevOverTime();
}
if (limitRate.getUHarm2OverTime() > 0){
uharmCount++;
uharmCounts = uharmCounts + limitRate.getUHarm2OverTime();
}
if (limitRate.getIHarm2OverTime() > 0){
iharmCount++;
iharmCounts = iharmCounts + limitRate.getIHarm2OverTime();
}
if (limitRate.getUBalanceOverTime() > 0){
ubalanceCount++;
ubalanceCounts = ubalanceCounts + limitRate.getUBalanceOverTime();
}
if (limitRate.getFlickerOverTime() > 0){
flickerCount++;
flickerCounts = flickerCounts + limitRate.getFlickerOverTime();
}
if (limitRate.getInuHarm1OverTime() > 0){
inuharmCount++;
inuharmCounts = inuharmCounts + limitRate.getInuHarm1OverTime();
}
if (limitRate.getINegOverTime() > 0){
iNegCount++;
iNegCounts = iNegCounts + limitRate.getINegOverTime();
}
alertCount = limitRate.getFreqDevOverTime() + limitRate.getVoltageDevOverTime() + limitRate.getUBalanceOverTime() + limitRate.getFlickerOverTime() + limitRate.getINegOverTime() + limitRate.getUHarm2OverTime() + limitRate.getIHarm2OverTime() + limitRate.getInuHarm1OverTime();
}
}
//暂降统计
if (!CollectionUtils.isEmpty(map2.get(item2))){
List<EventDetail> eventDetailList = map2.get(item2);
if (!CollectionUtils.isEmpty(eventDetailList)){
for (EventDetail item3 : eventDetailList) {
if (item3.getWaveType() == 1){
eventDowns++;
} else if (item3.getWaveType() == 2){
eventUps++;
} else if (item3.getWaveType() == 3){
eventInterrupts++;
}
}
}
}
if (eventDowns > 0){
eventDown++;
}
if (eventUps > 0){
eventUp++;
}
if (eventInterrupts > 0){
eventInterrupt++;
}
}
}
//在线监测点数量(个)
warningSubstationVO.setOnlineMonitorCounts(onlineMonitorCount);
if (onlineMonitorCount != 0){
//告警监测点数量(个)
warningSubstationVO.setAlertMonitorCounts(alertMonitorCount);
//告警次数
warningSubstationVO.setAlertCounts(alertCount);
//告警频次(次/点)
warningSubstationVO.setAlertAlarmFrequency(alertMonitorCount==0?0:BigDecimal.valueOf(alertCount*1.0/alertMonitorCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//频率偏差
warningSubstationVO.setFrequencyDeviation(freqCount==0?0:BigDecimal.valueOf(freqCounts*1.0/freqCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//电压偏差
warningSubstationVO.setVoltageDeviation(voltageCount==0?0:BigDecimal.valueOf(voltageCounts*1.0/voltageCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//谐波电压
warningSubstationVO.setHarmonicVoltage(uharmCount==0?0:BigDecimal.valueOf(uharmCounts*1.0/uharmCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//谐波电流
warningSubstationVO.setHarmonicCurrent(iharmCount==0?0:BigDecimal.valueOf(iharmCounts*1.0/iharmCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//三相电压不平衡
warningSubstationVO.setThreePhaseVoltageUnbalance(ubalanceCount==0?0:BigDecimal.valueOf(ubalanceCounts*1.0/ubalanceCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//闪变
warningSubstationVO.setFlicker(flickerCount==0?0:BigDecimal.valueOf(flickerCounts*1.0/flickerCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//间谐波电压
warningSubstationVO.setInterHarmonic(inuharmCount==0?0:BigDecimal.valueOf(inuharmCounts*1.0/inuharmCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//负序电流
warningSubstationVO.setNegative(iNegCount==0?0:BigDecimal.valueOf(iNegCounts*1.0/iNegCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
//电压暂降
warningSubstationVO.setVoltageDip(eventDown==0?0:BigDecimal.valueOf(eventDowns*1.0/eventDown).setScale(2, RoundingMode.HALF_UP).doubleValue());
//电压暂升
warningSubstationVO.setVoltageSwell(eventUp==0?0:BigDecimal.valueOf(eventUps*1.0/eventUp).setScale(2, RoundingMode.HALF_UP).doubleValue());
//短时中断
warningSubstationVO.setShortInterruption(eventInterrupt==0?0:BigDecimal.valueOf(eventInterrupts*1.0/eventInterrupt).setScale(2, RoundingMode.HALF_UP).doubleValue());
}
list.add(warningSubstationVO);
}
}
if (!CollectionUtils.isEmpty(list)){
for (WarningSubstationVO item1 : list) {
for (WarningSubstationDTO item2 : substationDTOList) {
if (Objects.equals(item1.getId(),item2.getId())){
item1.setProvinceCompany(item2.getProvince());
item1.setCityCompany(item2.getCity());
item1.setPlantVoltageLevel(item2.getScale());
}
}
}
List<WarningSubstationVO> recordList = new ArrayList<>();
//默认 在线监测点数量 倒叙排序
recordList = list.stream().sorted(Comparator.comparing(WarningSubstationVO::getOnlineMonitorCounts).reversed().thenComparing(WarningSubstationVO::getPlantName)).collect(Collectors.toList());
page.setRecords(recordList);
return page;
}
return page;
}
@Override
public Page<MonitorOverLimitVO> monitorOverLimitVO(OverAreaVO param) {
Page<MonitorOverLimitVO> page = new Page<>();
page.setSize(param.getPageSize());
page.setCurrent(param.getPageNum());
List<MonitorOverLimitVO> result = new ArrayList<>();
List<String> lineList = new ArrayList<>();
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData();
if (!CollectionUtils.isEmpty(deptList)){
deptList.forEach(item->{
lineList.addAll(item.getLineIndexes());
});
}
if (!CollectionUtils.isEmpty(lineList)){
page.setTotal(lineList.size());
int pages = (int)Math.ceil(lineList.size()*1.0/param.getPageSize());
page.setPages(pages);
List<List<String>> pageList = Lists.partition(lineList,param.getPageSize());
List<String> temList = pageList.get(param.getPageNum()-1);
List<LimitTarget> limitTargetList = getOverDays(temList,param.getSearchBeginTime(),param.getSearchEndTime());
Map<String,List<LimitTarget>> map = limitTargetList.stream().collect(Collectors.groupingBy(LimitTarget::getLineId));
PollutionParamDTO pollutionParamDTO = new PollutionParamDTO();
pollutionParamDTO.setLineList(temList);
List<OverLimitLineDTO> overLimitLineList = lineFeignClient.getOverLimitLineInfo(pollutionParamDTO).getData();
overLimitLineList.forEach(item->{
int overDay=0,freqOverDay=0,volDevOverDay=0,threeUnbalance=0,flickerOverDay=0,negativeOverDay=0,harmVolOverDay=0,volDisOverDay=0,volContainOverDay=0,harmCurOverDay=0,intHarmOverDay=0;
int overVolThreeTimes=0,overVolFiveTimes=0,overVolSevenTimes=0,overVolElevenTimes=0,overVolThirteenTimes=0,overVolTwentyThreeTimes=0,overVolTwentyFiveTimes=0,overVolOtherTimes=0;
int overCurThreeTimes=0,overCurFiveTimes=0,overCurSevenTimes=0,overCurElevenTimes=0,overCurThirteenTimes=0,overCurTwentyThreeTimes=0,overCurTwentyFiveTimes=0,overCurOtherTimes=0;
MonitorOverLimitVO monitorOverLimitVO = new MonitorOverLimitVO();
BeanUtil.copyProperties(item,monitorOverLimitVO);
List<LimitTarget> l1 = map.get(item.getId());
if (!CollectionUtils.isEmpty(l1)){
for (LimitTarget item2 : l1) {
if (item2.getFreqDevOverTime()+item2.getVoltageDevOverTime()+item2.getUBalanceOverTime()+item2.getFlickerOverTime()+item2.getINegOverTime()+item2.getUAberranceOverTime()+item2.getUHarmAllOverTime()+item2.getIHarmAllOverTime()+item2.getInuharmAllOverTime() > 0){
overDay++;
}
if (item2.getFreqDevOverTime()>0){
freqOverDay++;
}
if (item2.getVoltageDevOverTime()>0){
volDevOverDay++;
}
if (item2.getUBalanceOverTime()>0){
threeUnbalance++;
}
if (item2.getFlickerOverTime()>0){
flickerOverDay++;
}
if (item2.getINegOverTime()>0){
negativeOverDay++;
}
if (item2.getUAberranceOverTime()+item2.getUHarmAllOverTime()>0){
harmVolOverDay++;
}
if (item2.getUAberranceOverTime()>0){
volDisOverDay++;
}
if (item2.getUHarmAllOverTime()>0){
volContainOverDay++;
}
if (item2.getIHarmAllOverTime()>0){
harmCurOverDay++;
}
if (item2.getInuharmAllOverTime()>0){
intHarmOverDay++;
}
if (item2.getUHarm3OverTime()>0){
overVolThreeTimes++;
}
if (item2.getUHarm5OverTime()>0){
overVolFiveTimes++;
}
if (item2.getUHarm7OverTime()>0){
overVolSevenTimes++;
}
if (item2.getUHarm11OverTime()>0){
overVolElevenTimes++;
}
if (item2.getUHarm13OverTime()>0){
overVolThirteenTimes++;
}
if (item2.getUHarm23OverTime()>0){
overVolTwentyThreeTimes++;
}
if (item2.getUHarm25OverTime()>0){
overVolTwentyFiveTimes++;
}
if (item2.getUHarmAllOverTime()>0){
overVolOtherTimes++;
}
if (item2.getIHarm3OverTime()>0){
overCurThreeTimes++;
}
if (item2.getIHarm5OverTime()>0){
overCurFiveTimes++;
}
if (item2.getIHarm7OverTime()>0){
overCurSevenTimes++;
}
if (item2.getIHarm11OverTime()>0){
overCurElevenTimes++;
}
if (item2.getIHarm13OverTime()>0){
overCurThirteenTimes++;
}
if (item2.getIHarm23OverTime()>0){
overCurTwentyThreeTimes++;
}
if (item2.getIHarm25OverTime()>0){
overCurTwentyFiveTimes++;
}
if (item2.getIHarmAllOverTime()>0){
overCurOtherTimes++;
}
}
}
monitorOverLimitVO.setOverDay(overDay);
monitorOverLimitVO.setFreqOverDay(freqOverDay);
monitorOverLimitVO.setVolDevOverDay(volDevOverDay);
monitorOverLimitVO.setThreeUnbalance(threeUnbalance);
monitorOverLimitVO.setFlickerOverDay(flickerOverDay);
monitorOverLimitVO.setNegativeOverDay(negativeOverDay);
monitorOverLimitVO.setHarmVolOverDay(harmVolOverDay);
monitorOverLimitVO.setVolDisOverDay(volDisOverDay);
monitorOverLimitVO.setVolContainOverDay(volContainOverDay);
monitorOverLimitVO.setHarmCurOverDay(harmCurOverDay);
monitorOverLimitVO.setIntHarmOverDay(intHarmOverDay);
monitorOverLimitVO.setOverVolThreeTimes(overVolThreeTimes);
monitorOverLimitVO.setOverVolFiveTimes(overVolFiveTimes);
monitorOverLimitVO.setOverVolSevenTimes(overVolSevenTimes);
monitorOverLimitVO.setOverVolElevenTimes(overVolElevenTimes);
monitorOverLimitVO.setOverVolThirteenTimes(overVolThirteenTimes);
monitorOverLimitVO.setOverVolTwentyThreeTimes(overVolTwentyThreeTimes);
monitorOverLimitVO.setOverVolTwentyFiveTimes(overVolTwentyFiveTimes);
monitorOverLimitVO.setOverVolOtherTimes(overVolOtherTimes);
monitorOverLimitVO.setOverCurThreeTimes(overCurThreeTimes);
monitorOverLimitVO.setOverCurFiveTimes(overCurFiveTimes);
monitorOverLimitVO.setOverCurSevenTimes(overCurSevenTimes);
monitorOverLimitVO.setOverCurElevenTimes(overCurElevenTimes);
monitorOverLimitVO.setOverCurThirteenTimes(overCurThirteenTimes);
monitorOverLimitVO.setOverCurTwentyThreeTimes(overCurTwentyThreeTimes);
monitorOverLimitVO.setOverCurTwentyFiveTimes(overCurTwentyFiveTimes);
monitorOverLimitVO.setOverCurOtherTimes(overCurOtherTimes);
result.add(monitorOverLimitVO);
});
}
if (!CollectionUtils.isEmpty(result)){
List<MonitorOverLimitVO> recordList = new ArrayList<>();
//默认 根据在线监测点个数 倒叙排序
recordList = result.stream().sorted(Comparator.comparing(MonitorOverLimitVO::getOverDay).reversed()).collect(Collectors.toList());
page.setRecords(recordList);
return page;
}
return page;
}
@Override
public String exportArea(OverAreaVO param, String methodDescribe) {
List<AreaExcel> result = new ArrayList<>();
String fileName = methodDescribe + "_" + param.getSearchBeginTime()+ "-" + param.getSearchEndTime() + "_" + param.getStatisticalType().getName() +".xlsx";
String targetDir = generalInfo.getBusinessTempPath() + File.separator + RequestUtil.getUserIndex();
File excel = new File(targetDir, fileName);
List<OverAreaLimitVO> list = getAreaData(param).getRecords();
if (!CollectionUtil.isEmpty(list)) {
list.forEach(item->{
AreaExcel areaExcel = new AreaExcel();
BeanUtil.copyProperties(item,areaExcel);
result.add(areaExcel);
});
}
ExcelUtil.exportExcelWithTargetFile(excel, param.getStatisticalType().getName(), methodDescribe, AreaExcel.class, result);
return FileUtil.getAbsolutePath(excel);
}
/**
* 功能描述: 处理区域(变电站)在线监测点数、超标监测点数、平均超标天数、占比
* @param list 集合
* type 类型
* @return
* @author xy
* @date 2022/2/25 15:05
*/
@SuppressWarnings("unchecked")
public OverAreaLimitVO handleAreaData(List<LimitTarget> list, List<String> line, OverAreaVO param) {
int onlineCount = 0,overLineCount = 0,freqCount = 0,voltageCount = 0,ubalanceCount = 0,flickerCount = 0,iNegCount = 0,uharmCount = 0,iharmCount = 0,inuharmCount = 0;
int freqOverDay = 0,voltageOverDay = 0, ubalanceOverDay = 0,flickerOverDay = 0,iNegOverDay = 0,uharmOverDay = 0,iharmOverDay = 0,inuharmOverDay = 0;
OverAreaLimitVO overAreaLimitVO = new OverAreaLimitVO();
if (!CollectionUtils.isEmpty(list)){
List<LimitTarget> data = (List<LimitTarget>)getAllData(line,param.getSearchBeginTime(),param.getSearchEndTime(),Param.LIMIT_TARGET);
if (!CollectionUtils.isEmpty(data)) {
onlineCount = data.size();
//在线监测点个数
overAreaLimitVO.setOnlineMonitorNumber(onlineCount);
for (LimitTarget item : data) {
if (item.getFreqDevOverTime() > 0 || item.getVoltageDevOverTime() > 0 || item.getUBalanceOverTime() > 0 || item.getFlickerOverTime() > 0 || item.getINegOverTime() > 0 ||item.getUHarm2OverTime() > 0 || item.getIHarm2OverTime() > 0 || item.getInuHarm1OverTime() > 0) {
overLineCount++;
}
if (item.getFreqDevOverTime() > 0){
freqCount++;
}
if (item.getVoltageDevOverTime() > 0){
voltageCount++;
}
if (item.getUBalanceOverTime() > 0){
ubalanceCount++;
}
if (item.getFlickerOverTime() > 0){
flickerCount++;
}
if (item.getINegOverTime() > 0){
iNegCount++;
}
if (item.getUHarm2OverTime() > 0){
uharmCount++;
}
if (item.getIHarm2OverTime() > 0){
iharmCount++;
}
if (item.getInuHarm1OverTime() > 0){
inuharmCount++;
}
}
//超标监测点个数
overAreaLimitVO.setOverLimitMonitorNumber(overLineCount);
//超标监测点数占比
overAreaLimitVO.setOverBiLi(BigDecimal.valueOf(overLineCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//频率偏差
overAreaLimitVO.setFrequencyMonitorNumber(freqCount);
overAreaLimitVO.setFrequencyBiLi(BigDecimal.valueOf(freqCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//电压偏差
overAreaLimitVO.setVoltageMonitorNumber(voltageCount);
overAreaLimitVO.setVoltageBiLi(BigDecimal.valueOf(voltageCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//谐波电压
overAreaLimitVO.setHarmonicVoltageMonitorNumber(uharmCount);
overAreaLimitVO.setHarmonicVoltageBiLi(BigDecimal.valueOf(uharmCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//谐波电流
overAreaLimitVO.setHarmonicCurrentMonitorNumber(iharmCount);
overAreaLimitVO.setHarmonicCurrentBiLi(BigDecimal.valueOf(iharmCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//三相电压不平衡度
overAreaLimitVO.setThreePhaseVoltageMonitorNumber(ubalanceCount);
overAreaLimitVO.setThreePhaseVoltageBiLi(BigDecimal.valueOf(ubalanceCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//闪变
overAreaLimitVO.setFlickerMonitorNumber(flickerCount);
overAreaLimitVO.setFlickerBiLi(BigDecimal.valueOf(flickerCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//负序电流
overAreaLimitVO.setNegativeMonitorNumber(iNegCount);
overAreaLimitVO.setNegativeBiLi(BigDecimal.valueOf(flickerCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
//间谐波电压
overAreaLimitVO.setInterHarmonicMonitorNumber(inuharmCount);
overAreaLimitVO.setInterHarmonicBiLi(BigDecimal.valueOf(inuharmCount*1.0/data.size()).setScale(2, RoundingMode.HALF_UP).doubleValue());
}
}
Map<Instant,List<LimitTarget>> map = list.stream().collect(Collectors.groupingBy(LimitTarget::getTime));
for (Instant key : map.keySet()) {
List<LimitTarget> l = map.get(key);
for (LimitTarget pojo : l) {
if (pojo.getFreqDevOverTime() > 0){
freqOverDay++;
}
if (pojo.getVoltageDevOverTime() > 0){
voltageOverDay++;
}
if (pojo.getUBalanceOverTime() > 0){
ubalanceOverDay++;
}
if (pojo.getFlickerOverTime() > 0){
flickerOverDay++;
}
if (pojo.getINegOverTime() > 0){
iNegOverDay++;
}
if (pojo.getUHarm2OverTime() > 0){
uharmOverDay++;
}
if (pojo.getIHarm2OverTime() > 0){
iharmOverDay++;
}
if (pojo.getInuHarm1OverTime() > 0){
inuharmOverDay++;
}
}
}
if (onlineCount != 0){
overAreaLimitVO.setFrequencyOverDayBiLi(freqCount == 0?0.0:BigDecimal.valueOf(freqOverDay*1.0/freqCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
overAreaLimitVO.setVoltageOverDayBiLi(voltageCount == 0?0.0:BigDecimal.valueOf(voltageOverDay*1.0/voltageCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
overAreaLimitVO.setThreePhaseVoltageOverDayBiLi(ubalanceCount == 0?0.0:BigDecimal.valueOf(ubalanceOverDay*1.0/ubalanceCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
overAreaLimitVO.setFlickerOverDayBiLi(flickerCount == 0?0.0:BigDecimal.valueOf(flickerOverDay*1.0/flickerCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
overAreaLimitVO.setNegativeOverDayBiLi(iNegCount == 0?0.0:BigDecimal.valueOf(iNegOverDay*1.0/iNegCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
overAreaLimitVO.setHarmonicVoltageOverDayBiLi(uharmCount == 0?0.0:BigDecimal.valueOf(uharmOverDay*1.0/uharmCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
overAreaLimitVO.setHarmonicCurrentOverDayBiLi(iharmCount == 0?0.0:BigDecimal.valueOf(iharmOverDay*1.0/iharmCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
overAreaLimitVO.setInterHarmonicOverDayBiLi(inuharmCount == 0?0.0:BigDecimal.valueOf(inuharmOverDay*1.0/inuharmCount).setScale(2, RoundingMode.HALF_UP).doubleValue());
}
return overAreaLimitVO;
}
/**
* 功能描述: 处理区域在线监测点数、超标监测点数
* @param list 集合
* @return
* @author xy
* @date 2022/2/25 15:05
*/
private List<?> getAllData(List<String> list, String startTime, String endTime, String databaseName){
List<?> result = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<list.size();i++){
if (list.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id tz('Asia/Shanghai')");
stringBuilder1.append("sum(freq_dev_overtime) AS freq_dev_overtime,sum(voltage_dev_overtime) AS voltage_dev_overtime,sum(ubalance_overtime) AS ubalance_overtime,sum(flicker_overtime) AS flicker_overtime,sum(i_neg_overtime) AS i_neg_overtime,");
stringBuilder1.append("sum(uaberrance_overtime)+");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(uharm_").append(i).append("_overtime) AS ").append("uharm_2").append("_overtime,");
} else {
stringBuilder1.append("sum(uharm_").append(i).append("_overtime)+");
}
}
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(iharm_").append(i).append("_overtime) AS ").append("iharm_2").append("_overtime,");
} else {
stringBuilder1.append("sum(iharm_").append(i).append("_overtime)+");
}
}
for (int i = 1; i <= 16; i++) {
if (i==16){
stringBuilder1.append("sum(inuharm_").append(i).append("_overtime) AS ").append("inuharm_1").append("_overtime");
} else {
stringBuilder1.append("sum(inuharm_").append(i).append("_overtime)+");
}
}
String sql = "select "+stringBuilder1+" from "+databaseName+" where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
switch (databaseName) {
case Param.LIMIT_TARGET:
result = resultMapper.toPOJO(sqlResult,LimitTarget.class);
break;
case Param.LIMIT_RATE:
result = resultMapper.toPOJO(sqlResult,LimitRate.class);
break;
default:
break;
}
return result;
}
public List<EventDetail> getEventDetail(List<String> list, String startTime, String endTime){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<list.size();i++){
if (list.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id tz('Asia/Shanghai')");
String sql = "select * from pqs_eventdetail where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult, EventDetail.class);
}
public List<LimitTarget> getOverDays(List<String> list, String startTime, String endTime){
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<list.size();i++){
if (list.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id tz('Asia/Shanghai')");
stringBuilder1.append("freq_dev_overtime AS freq_dev_overtime,voltage_dev_overtime AS voltage_dev_overtime,ubalance_overtime AS ubalance_overtime,flicker_overtime AS flicker_overtime,i_neg_overtime AS i_neg_overtime,uaberrance_overtime AS uaberrance_overtime,");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("uharm_").append(i).append("_overtime AS uharm_all_overtime,");
} else {
stringBuilder1.append("uharm_").append(i).append("_overtime+");
}
}
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("iharm_").append(i).append("_overtime AS iharm_all_overtime,");
} else {
stringBuilder1.append("iharm_").append(i).append("_overtime+");
}
}
for (int i = 1; i <= 16; i++) {
if (i==16){
stringBuilder1.append("inuharm_").append(i).append("_overtime AS inuharm_all_overtime,");
} else {
stringBuilder1.append("inuharm_").append(i).append("_overtime+");
}
}
stringBuilder1.append("uharm_3_overtime,uharm_5_overtime,uharm_7_overtime,uharm_11_overtime,uharm_13_overtime,uharm_23_overtime,uharm_25_overtime,");
for (int i = 2; i <= 25; i++) {
if (i!=3 && i!=5 && i!=7 && i!=11 && i!=13 && i!=23 && i!=25){
if (i==24){
stringBuilder1.append("uharm_").append(i).append("_overtime AS uOtherTimes,");
} else {
stringBuilder1.append("uharm_").append(i).append("_overtime+");
}
}
}
stringBuilder1.append("iharm_3_overtime,iharm_5_overtime,iharm_7_overtime,iharm_11_overtime,iharm_13_overtime,iharm_23_overtime,iharm_25_overtime,");
for (int i = 2; i <= 25; i++) {
if (i!=3 && i!=5 && i!=7 && i!=11 && i!=13 && i!=23 && i!=25){
if (i==24){
stringBuilder1.append("iharm_").append(i).append("_overtime AS iOtherTimes");
} else {
stringBuilder1.append("iharm_").append(i).append("_overtime+");
}
}
}
String sql = "select "+stringBuilder1+" from limit_target where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult, LimitTarget.class);
}
}

View File

@@ -0,0 +1,144 @@
package com.njcn.harmonic.service.impl;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.param.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.AssesVO;
import com.njcn.harmonic.service.AssesService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.web.utils.ComAssesUtil;
import com.njcn.web.utils.PqsComasses;
import lombok.AllArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author denghuajun
* @date 2022/3/2
*
*/
@Service
@AllArgsConstructor
public class AssesServiceImpl implements AssesService {
private final InfluxDbUtils influxDbUtils;
private final ComAssesUtil comAssesUtil;
@Override
public AssesVO getQualityAssessData(PulicTimeStatisParam pulicTimeStatisParam) {
AssesVO assesVO = new AssesVO();
List<Float> floatList = new ArrayList<>();
Float syn = getCondition(pulicTimeStatisParam.getId(), pulicTimeStatisParam.getSearchBeginTime(), pulicTimeStatisParam.getSearchEndTime());
floatList.add(syn);
if (StringUtils.isNotBlank(pulicTimeStatisParam.getPeriodBeginTime()) && StringUtils.isNotBlank(pulicTimeStatisParam.getPeriodEndTime())) {
floatList.add(getCondition(pulicTimeStatisParam.getId(), pulicTimeStatisParam.getPeriodBeginTime(), pulicTimeStatisParam.getPeriodEndTime()));
}
assesVO.setSyn(floatList);
return assesVO;
}
/**
* influxDB相关操作
* 查询监测点的数据完整性
*/
private Float getCondition(String lineList, String startTime, String endTime) {
List<PqsComasses> pqsComasses = new ArrayList<>();
float synData;
if (!lineList.isEmpty()) {
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
//sql语句
stringBuilder.append(Param.LINEID + "='").append(lineList).append("')");
String sql = "SELECT" +
" MEAN(Freq_Dev1) AS freDev1," +
" MEAN(Freq_Dev2) AS freDev2," +
" MEAN(Freq_Dev3) AS freDev3," +
" MEAN(Freq_Dev4) AS freDev4," +
" MEAN(Freq_Dev5) AS freDev5," +
" MEAN(VU_Dev1) AS vuDev1," +
" MEAN(VU_Dev2) AS vuDev2," +
" MEAN(VU_Dev3) AS vuDev3," +
" MEAN(VU_Dev4) AS vuDev4," +
" MEAN(VU_Dev5) AS vuDev5," +
" MEAN(Data_PLT1) AS dataPlt1," +
" MEAN(Data_PLT2) AS dataPlt2," +
" MEAN(Data_PLT3) AS dataPlt3," +
" MEAN(Data_PLT4) AS dataPlt4," +
" MEAN(Data_PLT5) AS dataPlt5," +
" MEAN(V_Unbalance1) AS vUnbalance1," +
" MEAN(V_Unbalance2) AS vUnbalance2," +
" MEAN(V_Unbalance3) AS vUnbalance3," +
" MEAN(V_Unbalance4) AS vUnbalance4," +
" MEAN(V_Unbalance5) AS vUnbalance5," +
" MEAN(V_THD1) AS vThd1," +
" MEAN(V_THD2) AS vThd2," +
" MEAN(V_THD3) AS vThd3," +
" MEAN(V_THD4) AS vThd4," +
" MEAN(V_THD5) AS vThd5," +
" MEAN(Event1) AS event1," +
" MEAN(Event2) AS event2," +
" MEAN(Event3) AS event3," +
" MEAN(Event4) AS event4," +
" MEAN(Event5) AS event5" +
" FROM" +
" PQS_COMASSES" +
" where " + stringBuilder.toString() +
" group by " + Param.LINEID;
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
List<QueryResult.Series> list = result.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
List<List<Object>> valueList = list.get(0).getValues();
PqsComasses pqsComassesData = new PqsComasses();
List<Object> value = valueList.get(0);
pqsComassesData.setFreqDev1(BigDecimal.valueOf(Float.parseFloat(value.get(1).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setFreqDev2(BigDecimal.valueOf(Float.parseFloat(value.get(2).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setFreqDev3(BigDecimal.valueOf(Float.parseFloat(value.get(3).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setFreqDev4(BigDecimal.valueOf(Float.parseFloat(value.get(4).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setFreqDev5(BigDecimal.valueOf(Float.parseFloat(value.get(5).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVuDev1(BigDecimal.valueOf(Float.parseFloat(value.get(6).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVuDev2(BigDecimal.valueOf(Float.parseFloat(value.get(7).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVuDev3(BigDecimal.valueOf(Float.parseFloat(value.get(8).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVuDev4(BigDecimal.valueOf(Float.parseFloat(value.get(9).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVuDev5(BigDecimal.valueOf(Float.parseFloat(value.get(10).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setDataPst1(BigDecimal.valueOf(Float.parseFloat(value.get(11).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setDataPst2(BigDecimal.valueOf(Float.parseFloat(value.get(12).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setDataPst3(BigDecimal.valueOf(Float.parseFloat(value.get(13).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setDataPst4(BigDecimal.valueOf(Float.parseFloat(value.get(14).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setDataPst5(BigDecimal.valueOf(Float.parseFloat(value.get(15).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVUnbalance1(BigDecimal.valueOf(Float.parseFloat(value.get(16).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVUnbalance2(BigDecimal.valueOf(Float.parseFloat(value.get(17).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVUnbalance3(BigDecimal.valueOf(Float.parseFloat(value.get(18).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVUnbalance4(BigDecimal.valueOf(Float.parseFloat(value.get(19).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVUnbalance5(BigDecimal.valueOf(Float.parseFloat(value.get(20).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVThd1(BigDecimal.valueOf(Float.parseFloat(value.get(21).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVThd2(BigDecimal.valueOf(Float.parseFloat(value.get(22).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVThd3(BigDecimal.valueOf(Float.parseFloat(value.get(23).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVThd4(BigDecimal.valueOf(Float.parseFloat(value.get(24).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setVThd5(BigDecimal.valueOf(Float.parseFloat(value.get(25).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setEvent1(BigDecimal.valueOf(Float.parseFloat(value.get(26).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setEvent2(BigDecimal.valueOf(Float.parseFloat(value.get(27).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setEvent3(BigDecimal.valueOf(Float.parseFloat(value.get(28).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setEvent4(BigDecimal.valueOf(Float.parseFloat(value.get(29).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComassesData.setEvent5(BigDecimal.valueOf(Float.parseFloat(value.get(30).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
pqsComasses.add(pqsComassesData);
} else {
//有监测点,但是无数据的处理
return 3.14159f;
}
} else {
//无监测点前台统一替换为“/”
return 3.1415f;
}
synData = comAssesUtil.getAllComAss(pqsComasses);
return synData;
}
}

View File

@@ -0,0 +1,184 @@
package com.njcn.harmonic.service.impl;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.dto.ComAssessDTO;
import com.njcn.harmonic.pojo.po.PQSComAssesPO;
import com.njcn.harmonic.pojo.vo.ComAssessVO;
import com.njcn.harmonic.service.ComAssessService;
import com.njcn.harmonic.utils.HarmonicComAssesUtil;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/04/21 10:03
*/
@Service
@AllArgsConstructor
public class ComAssessServiceImpl implements ComAssessService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final InfluxDbUtils influxDbUtils;
private final HarmonicComAssesUtil comAssesUtil;
@Override
public List<ComAssessVO> getComAccessData(DeviceInfoParam.BusinessParam comAccessParam) {
List<ComAssessVO> comAssessVOList = new ArrayList<>();
List<ComAssessDTO> comAssessDTOS = new ArrayList<>();
//按照条件获取实际运行终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(comAccessParam).getData();
if (!CollectionUtils.isEmpty(deviceDataList)) {
for (GeneralDeviceDTO generalDeviceDTO: deviceDataList){
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
ComAssessVO comAssessVO = new ComAssessVO();
comAssessVO.setName(generalDeviceDTO.getName());
comAssessVO.setMonitors(lineIndexes.size());
if (!CollectionUtils.isEmpty(lineIndexes)) {
List<PQSComAssesPO> pqsComAssesPOS = getComAccessData(lineIndexes, comAccessParam.getSearchBeginTime(), comAccessParam.getSearchEndTime());
setResults(pqsComAssesPOS,comAssessDTOS);
float allComAss = comAssesUtil.getAllComAss(comAssessDTOS);
String lv = getLevel(allComAss);
comAssessVO.setData(allComAss);
comAssessVO.setLevel(lv);
}
comAssessVOList.add(comAssessVO);
}
}
return comAssessVOList;
}
private void setResults(List<PQSComAssesPO> pqsComAssesPOS, List<ComAssessDTO> comAssessDTOS) {
for (int i = 0; i < pqsComAssesPOS.size(); i++) {
float v1 = new BigDecimal(pqsComAssesPOS.get(i).getVuDev1()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
ComAssessDTO comAssessDTO = new ComAssessDTO();
comAssessDTO.setVuDev1(v1);
float v2 = new BigDecimal(pqsComAssesPOS.get(i).getVuDev2()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVuDev2(v2);
float v3 = new BigDecimal(pqsComAssesPOS.get(i).getVuDev3()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVuDev3(v3);
float v4 = new BigDecimal(pqsComAssesPOS.get(i).getVuDev4()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVuDev4(v4);
float v5 = new BigDecimal(pqsComAssesPOS.get(i).getVuDev5()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVuDev5(v5);
float f1 = new BigDecimal(pqsComAssesPOS.get(i).getFreqDev1()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setFreqDev1(f1);
float f2 = new BigDecimal(pqsComAssesPOS.get(i).getFreqDev2()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setFreqDev2(f2);
float f3 = new BigDecimal(pqsComAssesPOS.get(i).getFreqDev3()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setFreqDev3(f3);
float f4 = new BigDecimal(pqsComAssesPOS.get(i).getFreqDev4()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setFreqDev4(f4);
float f5 = new BigDecimal(pqsComAssesPOS.get(i).getFreqDev5()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setFreqDev5(f5);
float d1 = new BigDecimal(pqsComAssesPOS.get(i).getDataPST1()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setDataPST1(d1);
float d2 = new BigDecimal(pqsComAssesPOS.get(i).getDataPST2()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setDataPST2(d2);
float d3 = new BigDecimal(pqsComAssesPOS.get(i).getDataPST3()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setDataPST3(d3);
float d4 = new BigDecimal(pqsComAssesPOS.get(i).getDataPST4()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setDataPST4(d4);
float d5 = new BigDecimal(pqsComAssesPOS.get(i).getDataPST5()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setDataPST5(d5);
float vu1 = new BigDecimal(pqsComAssesPOS.get(i).getVUnbalance1()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVUnbalance1(vu1);
float vu2 = new BigDecimal(pqsComAssesPOS.get(i).getVUnbalance2()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVUnbalance2(vu2);
float vu3 = new BigDecimal(pqsComAssesPOS.get(i).getVUnbalance3()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVUnbalance3(vu3);
float vu4 = new BigDecimal(pqsComAssesPOS.get(i).getVUnbalance4()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVUnbalance4(vu4);
float vu5 = new BigDecimal(pqsComAssesPOS.get(i).getVUnbalance5()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVUnbalance5(vu5);
float vt1 = new BigDecimal(pqsComAssesPOS.get(i).getVTHD1()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVTHD1(vt1);
float vt2 = new BigDecimal(pqsComAssesPOS.get(i).getVTHD2()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVTHD2(vt2);
float vt3 = new BigDecimal(pqsComAssesPOS.get(i).getVTHD3()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVTHD3(vt3);
float vt4 = new BigDecimal(pqsComAssesPOS.get(i).getVTHD4()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVTHD4(vt4);
float vt5 = new BigDecimal(pqsComAssesPOS.get(i).getVTHD5()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setVTHD5(vt5);
float e1 = new BigDecimal(pqsComAssesPOS.get(i).getEvent1()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setEvent1(e1);
float e2 = new BigDecimal(pqsComAssesPOS.get(i).getEvent2()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setEvent2(e2);
float e3 = new BigDecimal(pqsComAssesPOS.get(i).getEvent3()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setEvent3(e3);
float e4 = new BigDecimal(pqsComAssesPOS.get(i).getEvent4()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setEvent4(e4);
float e5 = new BigDecimal(pqsComAssesPOS.get(i).getEvent5()).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
comAssessDTO.setEvent5(e5);
comAssessDTOS.add(comAssessDTO);
}
}
//获取综合评估等级
private String getLevel(float synDatas) {
if(synDatas==3.14159f){
return "(暂无数据)";
}
if(0<=synDatas&&synDatas<2){
return "极差";
}else if(2<=synDatas&&synDatas<3){
return "较差";
}else if(3<=synDatas&&synDatas<4){
return "合格";
}else if(4<=synDatas&&synDatas<4.5){
return "良好";
}else{
return "优质";
}
}
/**
* influxDB查询综合评估相关信息
* @param lineIndexes
* @param searchBeginTime
* @param searchEndTime
*/
private List<PQSComAssesPO> getComAccessData(List<String> lineIndexes, String searchBeginTime, String searchEndTime) {
//组装sql语句
StringBuilder builder = new StringBuilder();
builder.append("MEAN(VU_Dev1)AS VU_Dev1, MEAN(VU_Dev2)AS VU_Dev2, MEAN(VU_Dev3)AS VU_Dev3, MEAN(VU_Dev4)AS VU_Dev4, MEAN(VU_Dev5)AS VU_Dev5, MEAN(Freq_Dev1)AS Freq_Dev1, MEAN(Freq_Dev2)AS Freq_Dev2, MEAN(Freq_Dev3)AS Freq_Dev3, MEAN(Freq_Dev4)AS Freq_Dev4, MEAN(Freq_Dev5)AS Freq_Dev5, MEAN(Data_PST1)AS Data_PST1, MEAN(Data_PST2)AS Data_PST2, MEAN(Data_PST3)AS Data_PST3, MEAN(Data_PST4)AS Data_PST4, MEAN(Data_PST5)AS Data_PST5, MEAN(V_Unbalance1)AS V_Unbalance1, MEAN(V_Unbalance2)AS V_Unbalance2, MEAN(V_Unbalance3)AS V_Unbalance3, MEAN(V_Unbalance4)AS V_Unbalance4, MEAN(V_Unbalance5)AS V_Unbalance5, MEAN(V_THD1)AS V_THD1, MEAN(V_THD2)AS V_THD2, MEAN(V_THD3)AS V_THD3, MEAN(V_THD4)AS V_THD4, MEAN(V_THD5)AS V_THD5, MEAN(Event1)AS Event1, MEAN(Event2)AS Event2, MEAN(Event3)AS Event3, MEAN(Event4)AS Event4, MEAN(Event5)AS Event5");
StringBuffer string = new StringBuffer();
string.append(Param.TIME + " >= '" + searchBeginTime + Param.START_TIME + "' and " + Param.TIME + " <= '" + searchEndTime + Param.END_TIME + "' and ");
for (int i = 0; i < lineIndexes.size(); i++) {
if (lineIndexes.size() - i != 1) {
string.append(Param.LINEID + "='").append(lineIndexes.get(i)).append("' or ");
} else {
string.append(Param.LINEID + "='").append(lineIndexes.get(i)).append("' group by " + Param.LINEID);
}
}
//sql语句
String sql = "SELECT "+ builder +" FROM PQS_COMASSES WHERE " + string;
//结果集
QueryResult result = influxDbUtils.query(sql);
//结果集映射到对象中
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
List<PQSComAssesPO> pqsComAssesPOS = resultMapper.toPOJO(result, PQSComAssesPO.class);
return pqsComAssesPOS;
}
}

View File

@@ -0,0 +1,94 @@
package com.njcn.harmonic.service.impl;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.vo.CommunicateVO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.param.PulicTimeParam;
import com.njcn.harmonic.pojo.param.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.CommunicateStatisticsVO;
import com.njcn.harmonic.service.CommunicateService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author denghuajun
* @date 2022/2/28
*
*/
@Service
@AllArgsConstructor
public class CommunicateServiceImpl implements CommunicateService {
private final LineFeignClient lineFeignClient;
private final InfluxDbUtils influxDbUtils;
@Override
public CommunicateVO getComFlagInfoData(PulicTimeParam pulicTimeParam) {
//根据监测点id获取终端状态信息
return lineFeignClient.getComFlagInfoData(pulicTimeParam.getId(), pulicTimeParam.getSearchBeginTime(), pulicTimeParam.getSearchEndTime()).getData();
}
@Override
public CommunicateStatisticsVO getRunInfoData(PulicTimeStatisParam pulicTimeStatisParam) {
CommunicateStatisticsVO communicateStatisticsVO = new CommunicateStatisticsVO();
//根据监测点id获取终端id
String devId = lineFeignClient.getLineIdByDevId(pulicTimeStatisParam.getId()).getData();
List<Float> floatList = new ArrayList<>();
List<Float> floats = new ArrayList<>();
floatList.add(getCondition(pulicTimeStatisParam.getId(), pulicTimeStatisParam.getSearchBeginTime(), pulicTimeStatisParam.getSearchEndTime(),0) * 100);
floats.add(getCondition(devId, pulicTimeStatisParam.getSearchBeginTime(), pulicTimeStatisParam.getSearchEndTime(),1) * 100);
if (StringUtils.isNotBlank(pulicTimeStatisParam.getPeriodBeginTime())&& StringUtils.isNotBlank(pulicTimeStatisParam.getPeriodEndTime())){
floatList.add(getCondition(pulicTimeStatisParam.getId(), pulicTimeStatisParam.getPeriodBeginTime(), pulicTimeStatisParam.getPeriodEndTime(),0)*100);
floats.add(getCondition(devId, pulicTimeStatisParam.getPeriodBeginTime(), pulicTimeStatisParam.getPeriodEndTime(),1)*100);
}
communicateStatisticsVO.setOnlineRateData(floats);
communicateStatisticsVO.setIntegrityData(floatList);
return communicateStatisticsVO;
}
/**
* influxDB相关操作
* 查询监测点的数据完整性
*/
private Float getCondition(String lineList, String startTime, String endTime,Integer state) {
final Float[] resultList = {0.0f};
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
//sql语句
String sql = "";
if (state == 0) {
stringBuilder.append(Param.LINE_INDEX + "='").append(lineList).append("')");
sql = "SELECT SUM(" + Param.REAL + ")/SUM(" + Param.DUE + ") AS integrity FROM PQS_INTEGRITY WHERE " + stringBuilder.toString() + " group by " + Param.LINE_INDEX;
} else {
stringBuilder.append(Param.DEV_INDEX + "='").append(lineList).append("')");
sql = "SELECT SUM(" + Param.ONLINEMIN + ")/(SUM(" + Param.OFFLINEMIN + ")+SUM(" + Param.ONLINEMIN + ")) AS onlineRate FROM PQS_ONLINERATE WHERE " + stringBuilder.toString() + " group by " + Param.DEV_INDEX;
}
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
List<QueryResult.Series> list = result.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
list.forEach(po -> {
List<List<Object>> valueList = po.getValues();
if (!CollectionUtils.isEmpty(valueList)) {
for (List<Object> value : valueList) {
//数据完整性 保留四位小数
resultList[0] = value.get(1) == null ? null : BigDecimal.valueOf(Float.parseFloat(value.get(1).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue();
}
}
});
}
return resultList[0];
}
}

View File

@@ -0,0 +1,110 @@
package com.njcn.harmonic.service.impl;
import com.njcn.common.utils.PubUtils;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.po.Overlimit;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.param.HarmInHarmParam;
import com.njcn.harmonic.pojo.vo.HarmInHarmVO;
import com.njcn.harmonic.service.HarmInHarmService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* 类的介绍
*
* @author denghuajun
* @version 1.0.0
* @date 2022/3/17
*/
@Service
@AllArgsConstructor
public class HarmInHarmServiceImpl implements HarmInHarmService {
private final LineFeignClient lineFeignClient;
private final InfluxDbUtils influxDbUtils;
@Override
public HarmInHarmVO getHarmInHarmData(HarmInHarmParam harmInHarmParam) {
HarmInHarmVO harmInHarmVO = new HarmInHarmVO();
//获取限值
Overlimit overlimit = lineFeignClient.getOverLimitData(harmInHarmParam.getId()).getData();
if (overlimit != null) {
List<Float> harmInOverLimit = new ArrayList<>();
List<Float> harmInHarmValue;
if (harmInHarmParam.getHarmState() == 0) {
for (int i = 2; i < 26; i++) {
harmInOverLimit.add(PubUtils.getValueByMethod(overlimit, "getUharm", i));
}
//获取2-50次谐波含有率值
harmInHarmValue = getCondition(harmInHarmParam.getSearchBeginTime(), harmInHarmParam.getSearchEndTime(), harmInHarmParam.getId(), harmInHarmParam.getHarmState());
} else {
for (int i = 2; i < 26; i++) {
harmInOverLimit.add(PubUtils.getValueByMethod(overlimit, "getIharm", i));
}
//获取2-50次谐波电流幅值
harmInHarmValue = getCondition(harmInHarmParam.getSearchBeginTime(), harmInHarmParam.getSearchEndTime(), harmInHarmParam.getId(), harmInHarmParam.getHarmState());
}
harmInHarmVO.setHarmInHarmValue(harmInHarmValue);
harmInHarmVO.setHarmInOverLimit(harmInOverLimit);
}
return harmInHarmVO;
}
/**
* influxDB相关操作
* 查询稳态数据分析
*/
private List<Float> getCondition(String startTime, String endTime, String lineId, Integer harmState) {
List<Float> floatList = new ArrayList<>();
QueryResult queryResult;
if (!lineId.isEmpty()) {
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
//sql语句
stringBuilder.append(Param.LINE_ID + "='").append(lineId).append("')");
stringBuilder.append(" and ").append(Param.VALUETYPE + "='").append("CP95").append("'");
String sql = "";
if (harmState == 0) {
sql = "SELECT MEAN(V_2) as V2, MEAN(V_3) as V3, MEAN(V_4) as V4, MEAN(V_5) as V5, MEAN(V_6) as V6, MEAN(V_7) as V7," +
" MEAN(V_8) as V8, MEAN(V_9) as V9, MEAN(V_10) as V10, MEAN(V_11) as V11, MEAN(V_12) as V12, MEAN(V_13) as V13," +
" MEAN(V_14) as V14, MEAN(V_15) as V15, MEAN(V_16) as V16, MEAN(V_17) as V17, MEAN(V_18) as V18," +
" MEAN(V_19) as V19, MEAN(V_20) as V20, MEAN(V_21) as V21," +
" MEAN(V_22) as V22, MEAN(V_23) as V23, MEAN(V_24) as V24, MEAN(V_25) as V25, MEAN(V_26) as V25, MEAN(V_27) as V27, MEAN(V_28) as V28," +
" MEAN(V_29) as V29, MEAN(V_30) as V30, MEAN(V_31) as V31, MEAN(V_32) as V32, MEAN(V_33) as V33, MEAN(V_34) as V34, MEAN(V_35) as V35," +
" MEAN(V_36) as V36, MEAN(V_37) as V37, MEAN(V_38) as V38, MEAN(V_39) as V39, MEAN(V_40) as V40, MEAN(V_41) as V41, MEAN(V_42) as V42," +
" MEAN(V_43) as V43, MEAN(V_44) as V44, MEAN(V_45) as V45, MEAN(V_46) as V46, MEAN(V_47) as V47, MEAN(V_48) as V48, MEAN(V_49) as V49," +
" MEAN(V_50) as V50 FROM Data_HarmRate_V WHERE " + stringBuilder.toString() + " and phasic_type !='T' order by time asc;";
} else {
sql = "SELECT MEAN(I_2) as I2, MEAN(I_3) as I3, MEAN(I_4) as I4, MEAN(I_5) as I5, MEAN(I_6) as I6, MEAN(I_7) as I7," +
" MEAN(I_8) as I8, MEAN(I_9) as I9, MEAN(I_10) as I10, MEAN(I_11) as I11, MEAN(I_12) as I12, MEAN(I_13) as I13," +
" MEAN(I_14) as I14, MEAN(I_15) as I15, MEAN(I_16) as I16, MEAN(I_17) as I17, MEAN(I_18) as I18," +
" MEAN(I_19) as I19, MEAN(I_20) as I20, MEAN(I_21) as I21," +
" MEAN(I_22) as I22, MEAN(I_23) as I23, MEAN(I_24) as I24, MEAN(I_25) as I25, MEAN(I_26) as I25, MEAN(I_27) as I27, MEAN(I_28) as I28," +
" MEAN(I_29) as I29, MEAN(I_30) as I30, MEAN(I_31) as I31, MEAN(I_32) as I32, MEAN(I_33) as I33, MEAN(I_34) as I34, MEAN(I_35) as I35," +
" MEAN(I_36) as I36, MEAN(I_37) as I37, MEAN(I_38) as I38, MEAN(I_39) as I39, MEAN(I_40) as I40, MEAN(I_41) as I41, MEAN(I_42) as I42," +
" MEAN(I_43) as I43, MEAN(I_44) as I44, MEAN(I_45) as I45, MEAN(I_46) as I46, MEAN(I_47) as I47, MEAN(I_48) as I48, MEAN(I_49) as I49," +
" MEAN(I_50) as I50 FROM Data_I WHERE " + stringBuilder.toString() + " and phasic_type !='T' order by time asc;";
}
queryResult = influxDbUtils.query(sql);
if (queryResult.getResults().get(0).getSeries() != null) {
List<Object> resultList = queryResult.getResults().get(0).getSeries().get(0).getValues().get(0);
if (resultList.size() != 0) {
for (int i = 1; i < resultList.size(); i++) {
floatList.add(BigDecimal.valueOf(Float.parseFloat(resultList.get(i).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
}
}
}
}
return floatList;
}
}

View File

@@ -0,0 +1,514 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.dto.PollutionLineDTO;
import com.njcn.device.pojo.dto.PollutionParamDTO;
import com.njcn.device.pojo.vo.LineDeviceStateVO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.dto.AreaDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.po.LimitTarget;
import com.njcn.harmonic.pojo.vo.HarmonicDeptVO;
import com.njcn.harmonic.pojo.vo.HarmonicLineVO;
import com.njcn.harmonic.pojo.vo.HarmonicSubstationVO;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import com.njcn.harmonic.service.IHarmonicService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2021/12/31 9:50
*/
@Service
@AllArgsConstructor
public class HarmonicServiceImpl implements IHarmonicService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final InfluxDbUtils influxDbUtils;
private final GeneralInfo generalInfo;
private final LineFeignClient lineFeignClient;
@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();
if (StringUtils.isBlank(RequestUtil.getDeptIndex())){
return list;
}
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData();
deptList.forEach(dept->{
lineList.addAll(dept.getLineIndexes());
});
if (!CollectionUtils.isEmpty(lineList)){
paramDTO.setLineList(lineList);
lineInfo = lineFeignClient.getLineInfo(paramDTO).getData();
}
Map<String,List<PollutionLineDTO>> map = lineInfo.stream().collect(Collectors.groupingBy(PollutionLineDTO::getSubstationId));
deptList.forEach(dept->{
List<PollutionVO> childrenList = new ArrayList<>();
PollutionVO pollutionVO = new PollutionVO();
pollutionVO.setId(dept.getIndex());
pollutionVO.setName(dept.getName());
if (!CollectionUtils.isEmpty(dept.getSubIndexes())){
dept.getSubIndexes().forEach(sub->{
List<PollutionLineDTO> l1 = map.get(sub);
PollutionVO children = new PollutionVO();
children.setId(sub);
children.setPid(dept.getIndex());
children.setName(l1.get(0).getSubstation());
children.setData(handleData(getLimitTarget(l1.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()), harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()),harmonicPublicParam.getStatisticalType().getCode(),l1.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()), harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()).getRatio());
childrenList.add(children);
});
}
if (!CollectionUtils.isEmpty(childrenList)){
pollutionVO.setChildren(childrenList.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed().thenComparing(PollutionVO::getName)).collect(Collectors.toList()));
}
if (!CollectionUtils.isEmpty(dept.getLineIndexes())){
pollutionVO.setData(handleData(getLimitTarget(lineList, harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()),harmonicPublicParam.getStatisticalType().getCode(),lineList, harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime()).getRatio());
}
list.add(pollutionVO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed().thenComparing(PollutionVO::getName)).collect(Collectors.toList());
}
return list;
}
@Override
public List<HarmonicDeptVO> getDeptInfo(HarmonicPublicParam param) {
param.setServerName(generalInfo.getMicroServiceName());
List<HarmonicDeptVO> list = new ArrayList<>();
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData();
deptList.forEach(item->{
List<String> lineList = item.getLineIndexes();
HarmonicDeptVO harmonicDeptVO = new HarmonicDeptVO();
if (!CollectionUtils.isEmpty(lineList)){
List<LimitTarget> limitTargetList = getLimitTarget(lineList,param.getSearchBeginTime(),param.getSearchEndTime());
AreaDTO areaDTO = handleData(limitTargetList,param.getStatisticalType().getCode(),lineList,param.getSearchBeginTime(),param.getSearchEndTime());
BeanUtil.copyProperties(areaDTO,harmonicDeptVO);
}
harmonicDeptVO.setId(item.getIndex());
harmonicDeptVO.setName(item.getName());
list.add(harmonicDeptVO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(HarmonicDeptVO::getRatio).reversed().thenComparing(HarmonicDeptVO::getOnlineCount).thenComparing(HarmonicDeptVO::getOverLineCount)).collect(Collectors.toList());
}
return list;
}
@Override
public List<HarmonicSubstationVO> getSubstationInfoById(HarmonicPublicParam param) {
param.setServerName(generalInfo.getMicroServiceName());
List<HarmonicSubstationVO> list = new ArrayList<>();
List<GeneralDeviceDTO> subList = generalDeviceInfoClient.getPracticalRunDeviceInfoAsSubstation(param).getData();
subList.forEach(item->{
HarmonicSubstationVO harmonicSubstationVO = new HarmonicSubstationVO();
harmonicSubstationVO.setId(item.getIndex());
harmonicSubstationVO.setName(item.getName());
List<String> lineList = item.getLineIndexes();
if (!CollectionUtils.isEmpty(lineList)){
AreaDTO areaDTO = handleData(getLimitTarget(lineList, param.getSearchBeginTime(),param.getSearchEndTime()),param.getStatisticalType().getCode(),lineList, param.getSearchBeginTime(),param.getSearchEndTime());
BeanUtil.copyProperties(areaDTO,harmonicSubstationVO);
int result = getWarningInfo(lineList, param.getSearchBeginTime(),param.getSearchEndTime(),param.getStatisticalType().getCode());
if (result == -1){
harmonicSubstationVO.setWarningFreq(-1.0);
} else {
if (areaDTO.getOverLineCount() == 0){
if (areaDTO.getOnlineCount() > 0){
harmonicSubstationVO.setWarningFreq(0.0);
} else {
harmonicSubstationVO.setWarningFreq(-1.0);
}
} else {
harmonicSubstationVO.setWarningFreq(BigDecimal.valueOf(result*1.0/areaDTO.getOverLineCount()).setScale(2, RoundingMode.HALF_UP).doubleValue());
}
}
}
list.add(harmonicSubstationVO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(HarmonicSubstationVO::getRatio).reversed().thenComparing(HarmonicSubstationVO::getOnlineCount).thenComparing(HarmonicSubstationVO::getOverLineCount)).collect(Collectors.toList());
}
return list;
}
@Override
public List<HarmonicLineVO> getLineInfoById(HarmonicPublicParam param) {
param.setServerName(generalInfo.getMicroServiceName());
List<HarmonicLineVO> list = new ArrayList<>();
List<String> line = new ArrayList<>();
if (StringUtils.isBlank(RequestUtil.getDeptIndex())){
return list;
}
List<GeneralDeviceDTO> sub = generalDeviceInfoClient.getPracticalRunDeviceInfoAsSubstation(param).getData();
sub.forEach(item->{
if (Objects.equals(param.getId(),item.getIndex())){
if (!CollectionUtils.isEmpty(item.getLineIndexes())){
line.addAll(item.getLineIndexes());
}
}
});
if (!CollectionUtils.isEmpty(line)){
List<LimitTarget> limitTargetList = getLineOverDays(line,param.getSearchBeginTime(),param.getSearchEndTime(),param.getStatisticalType().getCode());
if (!CollectionUtils.isEmpty(limitTargetList)){
buildData(list,limitTargetList,param.getStatisticalType().getCode());
}
}
//获取监测点名称
if (!CollectionUtils.isEmpty(list)){
List<String> lineList = list.stream().map(HarmonicLineVO::getId).collect(Collectors.toList());
List<LineDeviceStateVO> lineDeviceStateVOList = lineFeignClient.getAllLine(lineList).getData();
list.stream().map(item1->lineDeviceStateVOList.stream().filter(item2->Objects.equals(item1.getId(),item2.getId())).findAny().map(item3->{
item1.setName(item3.getName());
return list;
})).collect(Collectors.toList());
}
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(HarmonicLineVO::getOverDays).reversed()).collect(Collectors.toList());
}
return list;
}
@Override
public List<HarmonicLineVO> getLineRank(HarmonicPublicParam param) {
param.setServerName(generalInfo.getMicroServiceName());
List<HarmonicLineVO> list = new ArrayList<>();
List<String> lineList = new ArrayList<>();
if (StringUtils.isBlank(RequestUtil.getDeptIndex())){
return list;
}
List<GeneralDeviceDTO> deviceList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData();
deviceList.forEach(item->{
if (!CollectionUtils.isEmpty(item.getLineIndexes())){
lineList.addAll(item.getLineIndexes());
}
});
if (!CollectionUtils.isEmpty(lineList)){
List<LimitTarget> limitTargetList = getLineOverDays(lineList,param.getSearchBeginTime(),param.getSearchEndTime(),param.getStatisticalType().getCode());
if (!CollectionUtils.isEmpty(limitTargetList)){
buildData(list,limitTargetList,param.getStatisticalType().getCode());
}
}
list.sort((item1,item2)->item2.getOverDays().compareTo(item1.getOverDays()));
//获取监测点名称
if (!CollectionUtils.isEmpty(list)){
List<String> l1 = list.stream().map(HarmonicLineVO::getId).collect(Collectors.toList());
List<LineDeviceStateVO> lineDeviceStateVOList = lineFeignClient.getAllLine(l1).getData();
list.stream().map(item1->lineDeviceStateVOList.stream().filter(item2->Objects.equals(item1.getId(),item2.getId())).findAny().map(item3->{
item1.setName(item3.getName());
return list;
})).collect(Collectors.toList());
}
if (list.size() > Param.UP_LIMIT){
return list.subList(Param.DOWN_LIMIT,Param.UP_LIMIT);
}
return list;
}
/**
* 功能描述: 获取limitTarget数据
* @param lineList 部门列表
* @param startTime 开始时间
* @param endTime 结束时间
* @return java.util.List<com.njcn.harmonic.pojo.dto.PublicDTO>
* @author xy
* @date 2022/2/25 15:05
*/
public List<LimitTarget> getLimitTarget(List<String> lineList, String startTime, String endTime){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<lineList.size();i++){
if (lineList.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("')");
}
}
stringBuilder.append(" tz('Asia/Shanghai')");
String sql = "select * from limit_target where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult,LimitTarget.class);
}
/**
* 功能描述: 处理区域(变电站)在线监测点数、超标监测点数、平均超标天数、占比
* @param list 集合
* type 类型
* @return
* @author xy
* @date 2022/2/25 15:05
*/
public AreaDTO handleData(List<LimitTarget> list,String type,List<String> lineList,String startTime,String endTime) {
int onlineCount = 0,overLineCount = 0,overCountByDay = 0;
double avgOverDay = 0.0,ratio = 0.0;
AreaDTO areaDTO = new AreaDTO();
if (!CollectionUtils.isEmpty(list)){
List<LimitTarget> data = getAllData(lineList,startTime,endTime);
if (!CollectionUtils.isEmpty(data)) {
onlineCount = data.size();
//在线监测点个数
areaDTO.setOnlineCount(onlineCount);
//超标监测点数
for (LimitTarget pojo : data) {
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
if (pojo.getUHarm2OverTime()>0){
overLineCount = overLineCount + 1;
}
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
if (pojo.getIHarm2OverTime()>0){
overLineCount = overLineCount + 1;
}
}
}
}
}
Map<Instant,List<LimitTarget>> map = list.stream().collect(Collectors.groupingBy(LimitTarget::getTime));
for (Instant key : map.keySet()) {
int overDay = 0;
List<LimitTarget> l = map.get(key);
for (LimitTarget pojo : l) {
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
if (pojo.getUAberranceOverTime()>0 || pojo.getUHarm2OverTime()>0 || pojo.getUHarm3OverTime()>0 || pojo.getUHarm4OverTime()>0 || pojo.getUHarm5OverTime()>0 || pojo.getUHarm6OverTime()>0 || pojo.getUHarm7OverTime()>0 || pojo.getUHarm8OverTime()>0 || pojo.getUHarm9OverTime()>0 || pojo.getUHarm10OverTime()>0 || pojo.getUHarm11OverTime()>0 || pojo.getUHarm12OverTime()>0 || pojo.getUHarm13OverTime()>0 || pojo.getUHarm14OverTime()>0 || pojo.getUHarm15OverTime()>0 || pojo.getUHarm16OverTime()>0 || pojo.getUHarm17OverTime()>0 || pojo.getUHarm18OverTime()>0 || pojo.getUHarm19OverTime()>0 || pojo.getUHarm20OverTime()>0 || pojo.getUHarm21OverTime()>0 || pojo.getUHarm22OverTime()>0 || pojo.getUHarm23OverTime()>0 || pojo.getUHarm24OverTime()>0 || pojo.getUHarm25OverTime()>0){
overCountByDay = overCountByDay + 1;
overDay = overDay + 1;
}
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
if (pojo.getIHarm2OverTime()>0 || pojo.getIHarm3OverTime()>0 || pojo.getIHarm4OverTime()>0 || pojo.getIHarm5OverTime()>0 || pojo.getIHarm6OverTime()>0 || pojo.getIHarm7OverTime()>0 || pojo.getIHarm8OverTime()>0 || pojo.getIHarm9OverTime()>0 || pojo.getIHarm10OverTime()>0 || pojo.getIHarm11OverTime()>0 || pojo.getIHarm12OverTime()>0 || pojo.getIHarm13OverTime()>0 || pojo.getIHarm14OverTime()>0 || pojo.getIHarm15OverTime()>0 || pojo.getIHarm16OverTime()>0 || pojo.getIHarm17OverTime()>0 || pojo.getIHarm18OverTime()>0 || pojo.getIHarm19OverTime()>0 || pojo.getIHarm20OverTime()>0 || pojo.getIHarm21OverTime()>0 || pojo.getIHarm22OverTime()>0 || pojo.getIHarm23OverTime()>0 || pojo.getIHarm24OverTime()>0 || pojo.getIHarm25OverTime()>0){
overCountByDay = overCountByDay + 1;
overDay = overDay + 1;
}
}
}
ratio = ratio + overDay*1.0/l.size();
}
//平均超标天数
if (CollectionUtils.isEmpty(list)){
avgOverDay = -1.0;
} else {
avgOverDay = overLineCount == 0?0.0:BigDecimal.valueOf(overCountByDay*1.0/overLineCount).setScale(2, RoundingMode.HALF_UP).doubleValue();
}
//月监测点超标占比
ratio = map.size() == 0?-1.0:BigDecimal.valueOf(ratio*100/map.size()).setScale(2, RoundingMode.HALF_UP).doubleValue();
areaDTO.setOnlineCount(onlineCount);
areaDTO.setOverLineCount(overLineCount);
areaDTO.setAverageOverDay(avgOverDay);
areaDTO.setRatio(Math.min(ratio,100.0));
return areaDTO;
}
/**
* 功能描述: 处理区域在线监测点数、超标监测点数
* @param list 集合
* @return
* @author xy
* @date 2022/2/25 15:05
*/
private List<LimitTarget> getAllData(List<String> list, String startTime, String endTime){
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<list.size();i++){
if (list.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(list.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id tz('Asia/Shanghai')");
stringBuilder1.append("sum(uaberrance_overtime)+");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(uharm_").append(i).append("_overtime) AS ").append("uharm_2").append("_overtime,");
} else {
stringBuilder1.append("sum(uharm_").append(i).append("_overtime)+");
}
}
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(iharm_").append(i).append("_overtime) AS ").append("iharm_2").append("_overtime");
} else {
stringBuilder1.append("sum(iharm_").append(i).append("_overtime)+");
}
}
String sql = "select "+stringBuilder1+" from limit_target where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult,LimitTarget.class);
}
/**
* 功能描述: 获取告警频次
* @author xy
* @param lineList 监测点id
* @param startTime 开始时间
* @param endTime 结束时间
* @param type 类型
* @date 2022/4/24 16:47
* @return
*/
private Integer getWarningInfo(List<String> lineList, String startTime, String endTime, String type) {
int result = 0;
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<lineList.size();i++){
if (lineList.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("')");
}
}
stringBuilder.append(" tz('Asia/Shanghai')");
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
stringBuilder1.append("sum(uaberrance_overtime)+");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(uharm_").append(i).append("_overtime)");;
} else {
stringBuilder1.append("sum(uharm_").append(i).append("_overtime)+");
}
}
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(iharm_").append(i).append("_overtime)");;
} else {
stringBuilder1.append("sum(iharm_").append(i).append("_overtime)+");
}
}
}
String sql = "select "+stringBuilder1+" from limit_rate where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
List<QueryResult.Series> list = sqlResult.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
for (QueryResult.Series series : list) {
List<List<Object>> valueList = series.getValues();
if (!CollectionUtils.isEmpty(valueList)) {
for (List<Object> value : valueList) {
result = (int)Double.parseDouble(value.get(1).toString());
}
}
}
} else {
result = -1;
}
return result;
}
/**
* 功能描述: 获取监测点超标天数
* @author xy
* @param lineList 监测点id
* @param startTime 开始时间
* @param endTime 结束时间
* @param type 类型
* @date 2022/4/24 16:47
* @return
*/
private List<LimitTarget> getLineOverDays(List<String> lineList, String startTime, String endTime, String type) {
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
for (int i=0;i<lineList.size();i++){
if (lineList.size() - i != 1){
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID + "='").append(lineList.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id tz('Asia/Shanghai')");
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
stringBuilder1.append("sum(uaberrance_overtime) AS uaberrance_overtime,");
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(uharm_").append(i).append("_overtime) AS ").append("uharm_").append(i).append("_overtime ");;
} else {
stringBuilder1.append("sum(uharm_").append(i).append("_overtime) AS ").append("uharm_").append(i).append("_overtime,");
}
}
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
for (int i = 2; i <= 25; i++) {
if (i==25){
stringBuilder1.append("sum(iharm_").append(i).append("_overtime) AS ").append("iharm_").append(i).append("_overtime ");;
} else {
stringBuilder1.append("sum(iharm_").append(i).append("_overtime) AS ").append("iharm_").append(i).append("_overtime,");
}
}
}
String sql = "select "+stringBuilder1+" from limit_target where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
return resultMapper.toPOJO(sqlResult,LimitTarget.class);
}
/**
* 数据组装
*/
private void buildData(List<HarmonicLineVO> result,List<LimitTarget> list, String type) {
list.forEach(item->{
HarmonicLineVO harmonicLineVO = new HarmonicLineVO();
harmonicLineVO.setId(item.getLineId());
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
harmonicLineVO.setOverThreeTimes(item.getUHarm3OverTime());
harmonicLineVO.setOverFiveTimes(item.getUHarm5OverTime());
harmonicLineVO.setOverSevenTimes(item.getUHarm7OverTime());
harmonicLineVO.setOverElevenTimes(item.getUHarm11OverTime());
harmonicLineVO.setOverThirteenTimes(item.getUHarm13OverTime());
harmonicLineVO.setOverTwentyThreeTimes(item.getUHarm23OverTime());
harmonicLineVO.setOverTwentyFiveTimes(item.getUHarm25OverTime());
int otherTimes = item.getUHarm2OverTime()+item.getUHarm4OverTime()+item.getUHarm6OverTime()+item.getUHarm8OverTime()+item.getUHarm9OverTime()+item.getUHarm10OverTime()+item.getUHarm12OverTime()+item.getUHarm14OverTime()+item.getUHarm15OverTime()+item.getUHarm16OverTime()+item.getUHarm17OverTime()+item.getUHarm18OverTime()+item.getUHarm19OverTime()+item.getUHarm20OverTime()+item.getUHarm21OverTime()+item.getUHarm22OverTime()+item.getUHarm24OverTime();
harmonicLineVO.setOtherTimes(otherTimes);
List<Integer> over = Stream.of(item.getUAberranceOverTime(),item.getUHarm2OverTime(),item.getUHarm3OverTime(),item.getUHarm4OverTime(),item.getUHarm5OverTime(),item.getUHarm6OverTime(),item.getUHarm7OverTime(),item.getUHarm8OverTime(),item.getUHarm9OverTime(),item.getUHarm10OverTime(),item.getUHarm11OverTime(),item.getUHarm12OverTime(),item.getUHarm13OverTime(),item.getUHarm14OverTime(),item.getUHarm15OverTime(),item.getUHarm16OverTime(),item.getUHarm17OverTime(),item.getUHarm18OverTime(),item.getUHarm19OverTime(),item.getUHarm20OverTime(),item.getUHarm21OverTime(),item.getUHarm22OverTime(),item.getUHarm23OverTime(),item.getUHarm24OverTime(),item.getUHarm25OverTime()).collect(Collectors.toList());
harmonicLineVO.setOverDays(Collections.max(over));
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
harmonicLineVO.setOverThreeTimes(item.getIHarm3OverTime());
harmonicLineVO.setOverFiveTimes(item.getIHarm5OverTime());
harmonicLineVO.setOverSevenTimes(item.getIHarm7OverTime());
harmonicLineVO.setOverElevenTimes(item.getIHarm11OverTime());
harmonicLineVO.setOverThirteenTimes(item.getIHarm13OverTime());
harmonicLineVO.setOverTwentyThreeTimes(item.getIHarm23OverTime());
harmonicLineVO.setOverTwentyFiveTimes(item.getIHarm25OverTime());
int otherTimes = item.getIHarm2OverTime()+item.getIHarm4OverTime()+item.getIHarm6OverTime()+item.getIHarm8OverTime()+item.getIHarm9OverTime()+item.getIHarm10OverTime()+item.getIHarm12OverTime()+item.getIHarm14OverTime()+item.getIHarm15OverTime()+item.getIHarm16OverTime()+item.getIHarm17OverTime()+item.getIHarm18OverTime()+item.getIHarm19OverTime()+item.getIHarm20OverTime()+item.getIHarm21OverTime()+item.getIHarm22OverTime()+item.getIHarm24OverTime();
harmonicLineVO.setOtherTimes(otherTimes);
List<Integer> over = Stream.of(item.getIHarm2OverTime(),item.getIHarm3OverTime(),item.getIHarm4OverTime(),item.getIHarm5OverTime(),item.getIHarm6OverTime(),item.getIHarm7OverTime(),item.getIHarm8OverTime(),item.getIHarm9OverTime(),item.getIHarm10OverTime(),item.getIHarm11OverTime(),item.getIHarm12OverTime(),item.getIHarm13OverTime(),item.getIHarm14OverTime(),item.getIHarm15OverTime(),item.getIHarm16OverTime(),item.getIHarm17OverTime(),item.getIHarm18OverTime(),item.getIHarm19OverTime(),item.getIHarm20OverTime(),item.getIHarm21OverTime(),item.getIHarm22OverTime(),item.getIHarm23OverTime(),item.getIHarm24OverTime(),item.getIHarm25OverTime()).collect(Collectors.toList());
harmonicLineVO.setOverDays(Collections.max(over));
}
result.add(harmonicLineVO);
});
}
}

View File

@@ -0,0 +1,990 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.njcn.common.utils.PubUtils;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.po.Overlimit;
import com.njcn.device.pojo.vo.LineDetailDataVO;
import com.njcn.event.api.EventDetailFeignClient;
import com.njcn.event.pojo.po.EventDetail;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.param.HistoryParam;
import com.njcn.harmonic.pojo.param.NormHistoryParam;
import com.njcn.harmonic.pojo.vo.EventDetailVO;
import com.njcn.harmonic.pojo.vo.HistoryDataResultVO;
import com.njcn.harmonic.pojo.vo.QueryResultLimitVO;
import com.njcn.harmonic.service.HistoryResultService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* @author denghuajun
* @date 2022/3/14
*/
@Service
@AllArgsConstructor
public class HistoryResultServiceImpl implements HistoryResultService {
private final InfluxDbUtils influxDbUtils;
private final LineFeignClient lineFeignClient;
private final EventDetailFeignClient eventDetailFeignClient;
@Override
public List<HistoryDataResultVO> getHistoryResult(HistoryParam historyParam) {
List<HistoryDataResultVO> historyDataResultVOList = new ArrayList<>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//获取监测点
String[] points = historyParam.getLineId();
Integer number = 0;
for (int i = 0; i < points.length; i++) {
HistoryDataResultVO historyDataResultVO;
List<EventDetail> eventDetailList = eventDetailFeignClient.getEventDetailData(points[i],historyParam.getSearchBeginTime(),historyParam.getSearchEndTime()).getData();
List<EventDetailVO> eventDetailVOList = new ArrayList<>();
if (!eventDetailList.isEmpty()) {
for (EventDetail eventdetail : eventDetailList) {
EventDetailVO eventDetailVO = new EventDetailVO();
eventDetailVO.setId(eventdetail.getId());
eventDetailVO.setTime(formatter.format(eventdetail.getTimeId()));
eventDetailVOList.add(eventDetailVO);
}
}
//获取指标
String[] contions = historyParam.getCondition();
for (int j = 0; j < contions.length; j++) {
if ("40".equals(contions[j]) || "41".equals(contions[j]) || "42".equals(contions[j]) || "43".equals(contions[j])
|| "44".equals(contions[j]) || "45".equals(contions[j]) || "50".equals(contions[j]) || "51".equals(contions[j])
|| "52".equals(contions[j])) {
number = historyParam.getHarmonic();
}
if ("46".equals(contions[j]) || "47".equals(contions[j]) || "48".equals(contions[j]) || "49".equals(contions[j])) {
number = historyParam.getInHarmonic();
}
historyDataResultVO = getCondition(historyParam.getSearchBeginTime(), historyParam.getSearchEndTime(), points[i], contions[j], number, historyParam.getValueType(), historyParam.getPtType());
historyDataResultVOList.add(historyDataResultVO);
if (points.length == 1 && j == 0) {
historyDataResultVO.setEventDetail(eventDetailVOList);
} else if (points.length > 1) {
historyDataResultVO.setEventDetail(eventDetailVOList);
}
}
}
return historyDataResultVOList;
}
@Override
public List<HistoryDataResultVO> getHistoryLineData(NormHistoryParam normHistoryParam) {
List<HistoryDataResultVO> historyDataResultVOList = new ArrayList<>();
HistoryDataResultVO historyDataResultVO = getNormCondition(normHistoryParam);
historyDataResultVOList.add(historyDataResultVO);
return historyDataResultVOList;
}
/**
* influxDB相关操作
* 查询稳态数据分析
*/
@SneakyThrows
private HistoryDataResultVO getCondition(String startTime, String endTime, String lineId, String contion, Integer number, Integer valueType, Integer ptType) {
HistoryDataResultVO historyDataResultVO = new HistoryDataResultVO();
QueryResultLimitVO queryResultLimitVO = getQueryResult(startTime, endTime, lineId, contion, number, valueType, ptType);
QueryResult queryResult = queryResultLimitVO.getQueryResult();
BeanUtil.copyProperties(queryResultLimitVO, historyDataResultVO);
List<QueryResult.Series> list = queryResult.getResults().get(0).getSeries();
List<Date> time = new ArrayList<>();
List<Float> aValue = new ArrayList<>();
List<Float> bValue = new ArrayList<>();
List<Float> cValue = new ArrayList<>();
List<Float> fValue = new ArrayList<>();
List<List<Object>> objectListData = new ArrayList<>();
if (!CollectionUtils.isEmpty(list)) {
if (queryResult.getResults().size() == 1) {
List<List<Object>> listData = queryResult.getResults().get(0).getSeries().get(0).getValues();
for (int i = 0; i < listData.size(); i++) {
List<Object> objectList = listData.get(i);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
TimeZone tx = TimeZone.getTimeZone("Asia/Kolkata");
formatter.setTimeZone(tx);
Date d = formatter.parse(objectList.get(0).toString());
time.add(d);
fValue.add(BigDecimal.valueOf(Float.parseFloat(objectList.get(1).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
}
for (int i = 0; i < time.size(); i++) {
List<Object> objects = new ArrayList<>();
objects.add(time.get(i));
objects.add(fValue.get(i));
objectListData.add(objects);
}
historyDataResultVO.setTopLimit(queryResultLimitVO.getTopLimit());
historyDataResultVO.setLowerLimit(queryResultLimitVO.getLowerLimit());
historyDataResultVO.setMinValue(Collections.min(fValue));
historyDataResultVO.setValue(objectListData);
} else {
for (int i = 0; i < queryResult.getResults().size(); i++) {
List<QueryResult.Series> listData = queryResult.getResults().get(i).getSeries();
List<List<Object>> values = listData.get(0).getValues();
for (int j = 0; j < values.size(); j++) {
List<Object> objectList = values.get(j);
if (i == 0) {
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
TimeZone tx = TimeZone.getTimeZone("Asia/Kolkata");
formatter.setTimeZone(tx);
Date d = formatter.parse(objectList.get(0).toString());
time.add(d);
aValue.add(BigDecimal.valueOf(Float.parseFloat(objectList.get(1).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
} else if (i == 1) {
bValue.add(BigDecimal.valueOf(Float.parseFloat(objectList.get(1).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
} else {
cValue.add(BigDecimal.valueOf(Float.parseFloat(objectList.get(1).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
}
}
}
for (int i = 0; i < time.size(); i++) {
List<Object> objects = new ArrayList<>();
objects.add(time.get(i));
objects.add(aValue.get(i));
objects.add(bValue.get(i));
objects.add(cValue.get(i));
objectListData.add(objects);
}
Float aValueMin = Collections.min(aValue);
Float bValueMin = Collections.min(bValue);
Float cValueMin = Collections.min(cValue);
historyDataResultVO.setMinValue((aValueMin < bValueMin) ? ((aValueMin < cValueMin) ? aValueMin : cValueMin) : ((bValueMin < cValueMin) ? bValueMin : cValueMin));
historyDataResultVO.setTopLimit(queryResultLimitVO.getTopLimit());
historyDataResultVO.setLowerLimit(queryResultLimitVO.getLowerLimit());
historyDataResultVO.setValue(objectListData);
}
} else {
return historyDataResultVO;
}
return historyDataResultVO;
}
private QueryResultLimitVO getQueryResult(String startTime, String endTime, String lineList, String contion, Integer number, Integer valueType, Integer ptType) {
QueryResultLimitVO queryResultLimitVO = new QueryResultLimitVO();
QueryResult queryResult;
if (!lineList.isEmpty()) {
Float topLimit = 0f;
Float lowerLimit = 0f;
//获取限值
Overlimit overlimit = lineFeignClient.getOverLimitData(lineList).getData();
//获取监测点信息
LineDetailDataVO lineDetailDataVO = lineFeignClient.getLineDetailData(lineList).getData();
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
//sql语句
stringBuilder.append(Param.LINE_ID + "='").append(lineList).append("')");
String valueTypeName = "";
switch (valueType) {
case 1:
valueTypeName = "AVG";
break;
case 2:
valueTypeName = "MAX";
break;
case 3:
valueTypeName = "MIN";
break;
case 4:
valueTypeName = "CP95";
break;
default:
break;
}
stringBuilder.append(" and ").append(Param.VALUETYPE + "='").append(valueTypeName).append("'");
String sql = "";
List<String> phasicType = new ArrayList<>();
List<String> unit = new ArrayList<>();
String targetName = "";
switch (Integer.parseInt(contion)) {
case 10:
//相电压有效值
sql = "SELECT time as time, rms as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, rms as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, rms as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("kV");
targetName = "相电压有效值";
break;
case 11:
//线电压有效值
sql = "SELECT time as time, rms_lvr as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, rms_lvr as bValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, rms_lvr as cValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
unit.add("kV");
targetName = "线电压有效值";
break;
case 12:
//电压偏差
sql = "SELECT time as time, vu_dev as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, vu_dev as bValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, vu_dev as cValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = overlimit.getVoltageDev();
lowerLimit = overlimit.getUvoltageDev();
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
unit.add("%");
targetName = "电压偏差";
break;
case 13:
//三相电压不平衡度
sql = "SELECT time as time, v_unbalance as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
topLimit = overlimit.getUbalance();
phasicType.add("三相电压不平衡度");
unit.add("%");
targetName = "三相电压不平衡度";
break;
case 14:
//电压不平衡
sql = "SELECT time as time, v_zero as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_pos as bValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_neg as cValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("零序电压");
phasicType.add("正序电压");
phasicType.add("负序电压");
unit.add("V");
unit.add("kV");
unit.add("V");
targetName = "电压不平衡";
break;
case 15:
//电压总谐波畸变率
sql = "SELECT time as time, v_thd as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_thd as bValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_thd as cValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = overlimit.getUaberrance();
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
unit.add("%");
targetName = "电压总谐波畸变率";
break;
case 20:
//电流有效值
sql = "SELECT time as time, rms as aValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, rms as bValue FROM data_i" +
" WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, rms as cValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("A");
targetName = "电流有效值";
break;
case 21:
//电流总畸变率
sql = "SELECT time as time, i_thd as aValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_thd as bValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_thd as cValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("%");
targetName = "电流总谐波畸变率";
break;
case 22:
//负序电流
sql = "SELECT time as time, i_neg as aValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_neg as bValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_neg as cValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = overlimit.getINeg();
phasicType.add("负序电流");
unit.add("A");
targetName = "负序电流";
break;
case 30:
//频率 V9暂时代表Freq
sql = "SELECT time as time, freq as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
topLimit = 50 + overlimit.getFreqDev();
lowerLimit = 50 - overlimit.getFreqDev();
phasicType.add("频率");
unit.add("Hz");
targetName = "频率";
break;
case 40:
//谐波电压含有率
sql = "SELECT time as time, v_" + number + " as aValue FROM data_harmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_" + number + " as bValue FROM data_harmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_" + number + " as cValue FROM data_harmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = PubUtils.getValueByMethod(overlimit, "getUharm", number);
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
unit.add("%");
targetName = "谐波电压含有率";
break;
case 41:
//谐波电流含有率
sql = "SELECT time as time, i_" + number + " as aValue FROM data_harmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_" + number + " as bValue FROM data_harmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_" + number + " as cValue FROM data_harmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("%");
targetName = "谐波电流含有率";
break;
case 42:
//谐波电压幅值
sql = "SELECT time as time, v_" + number + " as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_" + number + " as bValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_" + number + " as cValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
if (number == 1) {
unit.add("kV");
} else {
unit.add("V");
}
targetName = "谐波电压幅值";
break;
case 43:
//谐波电流幅值
sql = "SELECT time as time, i_" + number + " as aValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_" + number + " as bValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_" + number + " as cValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = PubUtils.getValueByMethod(overlimit, "getIharm", number);
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("A");
targetName = "谐波电流幅值";
break;
case 44:
//谐波电压相角
sql = "SELECT time as time, v_" + number + " as aValue FROM data_harmphasic_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_" + number + " as bValue FROM data_harmphasic_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_" + number + " as cValue FROM data_harmphasic_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
unit.add("°");
targetName = "谐波电压相角";
break;
case 45:
//谐波电流相角
sql = "SELECT time as time, i_" + number + " as aValue FROM data_harmphasic_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_" + number + " as bValue FROM data_harmphasic_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_" + number + " as cValue FROM data_harmphasic_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("°");
targetName = "谐波电流相角";
break;
case 46:
//间谐波电压含有率
sql = "SELECT time as time, v_" + number + " as aValue FROM data_inharmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_" + number + " as bValue FROM data_inharmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_" + number + " as cValue FROM data_inharmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = PubUtils.getValueByMethod(overlimit, "getInuharm", number);
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
unit.add("%");
targetName = "间谐波电压含有率";
break;
case 47:
//间谐波电流含有率
sql = "SELECT time as time, i_" + number + " as aValue FROM data_inharmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_" + number + " as bValue FROM data_inharmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_" + number + " as cValue FROM data_inharmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("%");
targetName = "间谐波电流含有率";
break;
case 48:
//间谐波电压幅值
sql = "SELECT time as time, v_" + number + " as aValue FROM data_inharm_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_" + number + " as bValue FROM data_inharm_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_" + number + " as cValue FROM data_inharm_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
targetName = "间谐波电压幅值";
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
unit.add("kV");
break;
case 49:
//间谐波电流幅值
sql = "SELECT time as time, i_" + number + " as aValue FROM data_inharm_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_" + number + " as bValue FROM data_inharm_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_" + number + " as cValue FROM data_inharm_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("A");
targetName = "间谐波电流幅值";
break;
case 50:
//谐波有功功率
sql = "SELECT time as time, p_" + number + " as aValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, p_" + number + " as bValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, p_" + number + " as cValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
if (number == 1) {
unit.add("kW");
} else {
unit.add("W");
}
targetName = "谐波有功功率";
break;
case 51:
//谐波无功功率
sql = "SELECT time as time, q_" + number + " as aValue FROM data_harmpower_q WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, q_" + number + " as bValue FROM data_harmpower_q WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, q_" + number + " as cValue FROM data_harmpower_q WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
if (number == 1) {
unit.add("kVar");
} else {
unit.add("Var");
}
targetName = "谐波无功功率";
break;
case 52:
//谐波视在功率
sql = "SELECT time as time, s_" + number + " as aValue FROM data_harmpower_s WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, s_" + number + " as bValue FROM data_harmpower_s WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, s_" + number + " as cValue FROM data_harmpower_s WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
if (number == 1) {
unit.add("kVA");
} else {
unit.add("VA");
}
targetName = "谐波视在功率";
break;
case 53:
//三相有功功率
sql = "SELECT time as time, p as aValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, p as bValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, p as cValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("kW");
targetName = "三相有功功率";
break;
case 54:
//三相无功功率
sql = "SELECT time as time, q as aValue FROM data_harmpower_q WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, q as bValue FROM data_harmpower_q WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, q as cValue FROM data_harmpower_q WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("kVar");
targetName = "三相无功功率";
break;
case 55:
//三相视在功率
sql = "SELECT time as time, s as aValue FROM data_harmpower_s WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, s as bValue FROM data_harmpower_s WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, s as cValue FROM data_harmpower_s WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
unit.add("kVA");
targetName = "三相视在功率";
break;
case 56:
//三相总有功功率
sql = "SELECT time as time, p as aValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
phasicType.add("三相总有功功率");
unit.add("kW");
targetName = "三相总有功功率";
break;
case 57:
//三相总无功功率
sql = "SELECT time as time, q as aValue FROM data_harmpower_q WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
phasicType.add("三相总无功功率");
unit.add("kVar");
targetName = "三相总无功功率";
break;
case 58:
//三相总视在功率
sql = "SELECT time as time, s as aValue FROM data_harmpower_s WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
phasicType.add("三相总视在功率");
unit.add("kVA");
targetName = "三相总视在功率";
break;
case 59:
//视在功率因数
sql = "SELECT time as time, pf as aValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, pf as bValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, pf as cValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
targetName = "视在功率因数";
break;
case 591:
//位移功率因数
sql = "SELECT time as time, df as aValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, df as bValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, df as cValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
targetName = "位移功率因数";
break;
case 592:
//总视在功率因数
sql = "SELECT time as time, pf as aValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
phasicType.add("总视在功率因数");
targetName = "总视在功率因数";
break;
case 593:
//总位移功率因数
sql = "SELECT time as time, df as aValue FROM data_harmpower_p WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
phasicType.add("总位移功率因数");
targetName = "总位移功率因数";
break;
case 61:
//长时闪变
sql = "SELECT time as time, plt as aValue FROM data_plt WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, plt as bValue FROM data_plt WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, plt as cValue FROM data_plt WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
topLimit = overlimit.getFlicker();
targetName = "长时闪变";
break;
case 60:
//短时闪变
sql = "SELECT time as time, pst as aValue FROM data_flicker WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, pst as bValue FROM data_flicker WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, pst as cValue FROM data_flicker WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = overlimit.getFlicker();
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
targetName = "短时闪变";
break;
case 62:
//电压波动
sql = "SELECT time as time, fluc as aValue FROM data_fluc WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, fluc as bValue FROM data_fluc WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, fluc as cValue FROM data_fluc WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
if (ptType == 0) {
phasicType.add("A相");
phasicType.add("B相");
phasicType.add("C相");
} else {
phasicType.add("AB相");
phasicType.add("BC相");
phasicType.add("CA相");
}
targetName = "电压波动";
break;
default:
break;
}
queryResult = influxDbUtils.query(sql);
queryResultLimitVO.setQueryResult(queryResult);
queryResultLimitVO.setTopLimit(topLimit);
queryResultLimitVO.setLowerLimit(lowerLimit);
queryResultLimitVO.setPhaiscType(phasicType);
queryResultLimitVO.setUnit(unit);
queryResultLimitVO.setLineName(lineDetailDataVO.getLineName());
queryResultLimitVO.setHarmNum(number);
queryResultLimitVO.setTargetName(targetName);
} else {
return queryResultLimitVO;
}
return queryResultLimitVO;
}
private QueryResultLimitVO getQueryNormDataResult(NormHistoryParam normHistoryParam) {
QueryResultLimitVO queryResultLimitVO = new QueryResultLimitVO();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
QueryResult queryResult = null;
if (!normHistoryParam.getLineId().isEmpty()) {
Float topLimit = 0f;
Float lowerLimit = 0f;
String lineList = normHistoryParam.getLineId();
String startTime = sdf.format(DateUtil.beginOfDay(DateUtil.parse(normHistoryParam.getSearchTime())));
String endTime = sdf.format(DateUtil.endOfDay(DateUtil.parse(normHistoryParam.getSearchTime())));
Integer valueType = normHistoryParam.getValueType();
//获取限值
Overlimit overlimit = lineFeignClient.getOverLimitData(lineList).getData();
//获取监测点信息
LineDetailDataVO lineDetailDataVO = lineFeignClient.getLineDetailData(lineList).getData();
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append("' and (");
//sql语句
stringBuilder.append(Param.LINE_ID + "='").append(lineList).append("')");
String valueTypeName = "";
String phasicType = "";
switch (valueType) {
case 1:
valueTypeName = "AVG";
break;
case 2:
valueTypeName = "MAX";
break;
case 3:
valueTypeName = "MIN";
break;
case 4:
valueTypeName = "CP95";
break;
default:
break;
}
if ("A".equals(normHistoryParam.getPhaseType()) || "AB".equals(normHistoryParam.getPhaseType())) {
phasicType = "A";
} else if ("B".equals(normHistoryParam.getPhaseType()) || "BC".equals(normHistoryParam.getPhaseType())) {
phasicType = "B";
} else if ("C".equals(normHistoryParam.getPhaseType()) || "CA".equals(normHistoryParam.getPhaseType())) {
phasicType = "C";
}
stringBuilder.append(" and ").append(Param.VALUETYPE + "='").append(valueTypeName).append("'");
stringBuilder.append(" and ").append("phasic_type ='").append(phasicType).append("'");
String sql = "";
List<String> unit = new ArrayList<>();
Integer number = normHistoryParam.getNumber();
String targetName = "";
switch (Integer.parseInt(normHistoryParam.getTargetCode())) {
case 12:
//电压偏差
sql = "SELECT time as time, vu_dev as aValue FROM data_v WHERE " + stringBuilder.toString() +
" order by time asc;";
topLimit = overlimit.getVoltageDev();
lowerLimit = overlimit.getUvoltageDev();
unit.add("%");
targetName = "电压偏差";
break;
case 13:
//三相电压不平衡度
sql = "SELECT time as time, v_unbalance as aValue FROM data_v WHERE " + stringBuilder.toString() +
" order by time asc;";
topLimit = overlimit.getUbalance();
unit.add("%");
targetName = "三相电压不平衡度";
break;
case 15:
//电压总谐波畸变率
sql = "SELECT time as time, v_thd as aValue FROM data_v WHERE " + stringBuilder.toString() +
" order by time asc;";
topLimit = overlimit.getUaberrance();
unit.add("%");
targetName = "电压总谐波畸变率";
break;
case 22:
//负序电流
sql = "SELECT time as time, i_neg as aValue FROM data_i WHERE " + stringBuilder.toString() +
" order by time asc;";
topLimit = overlimit.getINeg();
unit.add("A");
targetName = "负序电流";
break;
case 30:
//频率 V9暂时代表Freq
sql = "SELECT time as time, freq as aValue FROM data_v WHERE " + stringBuilder.toString() +
" and phasic_type ='T' order by time asc;";
topLimit = 50 + overlimit.getFreqDev();
lowerLimit = 50 - overlimit.getFreqDev();
unit.add("Hz");
targetName = "频率";
break;
case 40:
//谐波电压含有率
sql = "SELECT time as time, v_" + number + " as aValue FROM data_harmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_" + number + " as bValue FROM data_harmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_" + number + " as cValue FROM data_harmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = PubUtils.getValueByMethod(overlimit, "getUharm", number);
unit.add("%");
targetName = "谐波电压含有率";
break;
case 41:
//谐波电流含有率
sql = "SELECT time as time, i_" + number + " as aValue FROM data_harmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_" + number + " as bValue FROM data_harmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_" + number + " as cValue FROM data_harmrate_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
unit.add("%");
targetName = "谐波电流含有率";
break;
case 43:
//谐波电流幅值
sql = "SELECT time as time, i_" + number + " as aValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, i_" + number + " as bValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, i_" + number + " as cValue FROM data_i WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = PubUtils.getValueByMethod(overlimit, "getIharm", number);
unit.add("A");
targetName = "谐波电流幅值";
break;
case 46:
//间谐波电压含有率
sql = "SELECT time as time, v_" + number + " as aValue FROM data_inharmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, v_" + number + " as bValue FROM data_inharmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, v_" + number + " as cValue FROM data_inharmrate_v WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
topLimit = PubUtils.getValueByMethod(overlimit, "getInuharm", number);
unit.add("%");
targetName = "间谐波电压含有率";
break;
case 61:
//长时闪变
sql = "SELECT time as time, plt as aValue FROM data_plt WHERE " + stringBuilder.toString() +
" and phasic_type ='A' order by time asc;" +
"SELECT time as time, plt as bValue FROM data_plt WHERE " + stringBuilder.toString() +
" and phasic_type ='B' order by time asc;" +
"SELECT time as time, plt as cValue FROM data_plt WHERE " + stringBuilder.toString() +
" and phasic_type ='C' order by time asc;";
targetName = "长时闪变";
topLimit = overlimit.getFlicker();
break;
default:
break;
}
queryResult = influxDbUtils.query(sql);
queryResultLimitVO.setQueryResult(queryResult);
queryResultLimitVO.setTopLimit(topLimit);
queryResultLimitVO.setLowerLimit(lowerLimit);
queryResultLimitVO.setPhaiscType(Collections.singletonList(phasicType));
queryResultLimitVO.setUnit(unit);
queryResultLimitVO.setLineName(lineDetailDataVO.getLineName());
queryResultLimitVO.setHarmNum(number);
queryResultLimitVO.setTargetName(targetName);
} else {
return queryResultLimitVO;
}
return queryResultLimitVO;
}
/**
* influxDB相关操作
* 查询稳态数据分析
*/
@SneakyThrows
private HistoryDataResultVO getNormCondition(NormHistoryParam normHistoryParam) {
HistoryDataResultVO historyDataResultVO = new HistoryDataResultVO();
QueryResultLimitVO queryResultLimitVO = getQueryNormDataResult(normHistoryParam);
QueryResult queryResult = queryResultLimitVO.getQueryResult();
BeanUtil.copyProperties(queryResultLimitVO, historyDataResultVO);
List<QueryResult.Series> list = queryResult.getResults().get(0).getSeries();
List<Date> time = new ArrayList<>();
List<Float> fValue = new ArrayList<>();
List<List<Object>> objectListData = new ArrayList<>();
if (!CollectionUtils.isEmpty(list)) {
List<List<Object>> listData = queryResult.getResults().get(0).getSeries().get(0).getValues();
for (int i = 0; i < listData.size(); i++) {
List<Object> objectList = listData.get(i);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
TimeZone tx = TimeZone.getTimeZone("Asia/Kolkata");
formatter.setTimeZone(tx);
Date d = formatter.parse(objectList.get(0).toString());
time.add(d);
fValue.add(BigDecimal.valueOf(Float.parseFloat(objectList.get(1).toString())).setScale(4, BigDecimal.ROUND_HALF_UP).floatValue());
}
for (int i = 0; i < time.size(); i++) {
List<Object> objects = new ArrayList<>();
objects.add(time.get(i));
objects.add(fValue.get(i));
objectListData.add(objects);
}
historyDataResultVO.setTopLimit(queryResultLimitVO.getTopLimit());
historyDataResultVO.setLowerLimit(queryResultLimitVO.getLowerLimit());
historyDataResultVO.setValue(objectListData);
} else {
return historyDataResultVO;
}
return historyDataResultVO;
}
}

View File

@@ -0,0 +1,361 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.StrUtil;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.enums.LineBaseEnum;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.IntegrityMapper;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.vo.IntegrityIconVO;
import com.njcn.harmonic.pojo.vo.IntegrityVO;
import com.njcn.harmonic.service.IntegrityService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.poi.excel.ExcelUtil;
import com.njcn.poi.pojo.bo.BaseLineExcelBody;
import com.njcn.poi.pojo.bo.BaseLineProExcelBody;
import com.njcn.poi.util.PoiUtil;
import com.njcn.system.pojo.enums.StatisticsEnum;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @date 2021/12/31 9:50
*/
@Slf4j
@Service
@AllArgsConstructor
public class IntegrityServiceImpl implements IntegrityService {
private final IntegrityMapper integrityMapper;
private final InfluxDbUtils influxDbUtils;
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final GeneralInfo generalInfo;
@Override
public List<IntegrityVO> getIntegrityData(DeviceInfoParam.BusinessParam integrityParam) {
List<IntegrityVO> result = new ArrayList<>();
integrityParam.setServerName(generalInfo.getMicroServiceName());
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(integrityParam).getData();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
continue;
}
//初始化返回结果integrityTemp
IntegrityVO integrityTemp = new IntegrityVO();
integrityTemp.setName(generalDeviceDTO.getName());
//根据监测点查询数据完整性
List<PublicDTO> integrityData = getCondition(lineIndexes, integrityParam.getSearchBeginTime(), integrityParam.getSearchEndTime());
//查询监测点、变电站、供电公司、区域的基础信息
List<IntegrityVO> lineBaseInfo = integrityMapper.getIntegrityData(lineIndexes);
List<IntegrityVO> subBaseInfo = integrityMapper.getSubstationInfoByList(generalDeviceDTO.getSubIndexes());
List<IntegrityVO> gdBaseInfo = integrityMapper.getLineInfoByList(generalDeviceDTO.getGdIndexes());
List<IntegrityVO> areaInfo = integrityMapper.getProviceInfoByList(gdBaseInfo.stream().map(IntegrityVO::getPid).distinct().collect(Collectors.toList()));
//监测点数据完整性赋值
if (!CollectionUtils.isEmpty(integrityData)) {
for (IntegrityVO integrityVO : lineBaseInfo) {
for (PublicDTO integrityDatum : integrityData) {
if (integrityVO.getId().equals(integrityDatum.getId())) {
integrityVO.setIntegrityData(integrityDatum.getData());
break;
}
}
}
}
//处理变电站
dealAverageAndChildrenData(subBaseInfo, lineBaseInfo, true);
//处理供电公司
dealAverageAndChildrenData(gdBaseInfo, subBaseInfo, false);
if (integrityParam.getStatisticalType().getCode().equalsIgnoreCase(StatisticsEnum.POWER_NETWORK.getCode())) {
integrityTemp.setChildren(gdBaseInfo);
} else {
//还需要额外处理省会
dealAverageAndChildrenData(areaInfo, gdBaseInfo, false);
integrityTemp.setChildren(areaInfo);
}
result.add(integrityTemp);
}
}
return result;
}
/**
* 处理平均值以及子节点集合
*/
private void dealAverageAndChildrenData(List<IntegrityVO> targetData, List<IntegrityVO> childrenData, boolean isLine) {
Map<String, List<IntegrityVO>> groupLine;
if (isLine) {
groupLine = childrenData.stream().collect(Collectors.groupingBy(integrityVO -> {
String[] pid = integrityVO.getPidS().split(",");
return pid[LineBaseEnum.SUB_LEVEL.getCode()];
}));
} else {
groupLine = childrenData.stream().collect(Collectors.groupingBy(IntegrityVO::getPid));
}
targetData = targetData.stream().peek(integrityVO -> {
if (!CollectionUtils.isEmpty(groupLine.get(integrityVO.getId()))) {
//监测点集合
List<IntegrityVO> integrityVOList = new ArrayList<>();
if (isLine) {
integrityVOList = groupLine.get(integrityVO.getId());
} else {
//子集合,从子集合中拿出所有的监测点集合
List<IntegrityVO> childIntegrityVOList = groupLine.get(integrityVO.getId());
for (IntegrityVO vo : childIntegrityVOList) {
integrityVOList.addAll(vo.getLineData());
}
}
integrityVO.setLineData(integrityVOList);
//通过所有监测点的完整性求平均值
double averageData = integrityVOList.stream().filter(integrityVO1 -> integrityVO1.getIntegrityData() != 3.14159)
.mapToDouble(IntegrityVO::getIntegrityData)
.average()
.orElse(3.14159);
integrityVO.setIntegrityData(averageData);
integrityVO.setChildren(groupLine.get(integrityVO.getId()));
}
}).collect(Collectors.toList());
}
@Override
public IntegrityIconVO getIntegrityIcon(DeviceInfoParam.CompareBusinessParam integrityIconParam) {
integrityIconParam.setServerName(generalInfo.getMicroServiceName());
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(integrityIconParam).getData();
List<String> type = new ArrayList<>();
List<Double> single = new ArrayList<>(),
ratio = new ArrayList<>();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
continue;
}
type.add(generalDeviceDTO.getName());
//根据监测点查询数据完整性
List<PublicDTO> integrityData = getCondition(lineIndexes, integrityIconParam.getSearchBeginTime(), integrityIconParam.getSearchEndTime());
single.add(integrityData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
//如果存在需要比较的时间,再获取对应数据
if (StrUtil.isNotBlank(integrityIconParam.getPeriodBeginTime()) && StrUtil.isNotBlank(integrityIconParam.getPeriodEndTime())) {
List<PublicDTO> compareData = getCondition(lineIndexes, integrityIconParam.getPeriodBeginTime(), integrityIconParam.getPeriodEndTime());
ratio.add(compareData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
}
}
}
return new IntegrityIconVO(type, single, ratio);
}
/**
* 组装需要下载excel的数据
*
* @param integrityParam 数据完整性参数
* @param methodDescribe 报表名称描述
*/
@Override
public String exportIntegrityData(DeviceInfoParam.BusinessParam integrityParam, String methodDescribe) {
String fileName = methodDescribe + CharUtil.UNDERLINE + integrityParam.getStatisticalType().getName() + ".xlsx";
String targetDir = generalInfo.getBusinessTempPath() + File.separator + RequestUtil.getUserIndex();
log.error("文件路径" + targetDir);
log.error("文件名" + fileName);
File parentDir = new File(targetDir);
if(!parentDir.exists()){
parentDir.mkdirs();
}
File excel = new File(targetDir, fileName);
List<IntegrityVO> integrityData = getIntegrityData(integrityParam);
if (integrityParam.getStatisticalType().getCode().equalsIgnoreCase(StatisticsEnum.POWER_NETWORK.getCode())) {
List<BaseLineExcelBody> excelBodies = new ArrayList<>();
if (!CollectionUtils.isEmpty(integrityData)) {
for (IntegrityVO integrityVOLoop : integrityData) {
BaseLineExcelBody baseLineExcelBody = new BaseLineExcelBody();
baseLineExcelBody.setStatisticsName(integrityVOLoop.getName() + PoiUtil.dealPOIData(integrityVOLoop.getIntegrityData()));
addChildExcelData(excelBodies, baseLineExcelBody, integrityVOLoop.getChildren());
}
}
ExcelUtil.exportExcelWithTargetFile(excel, integrityParam.getStatisticalType().getName(), methodDescribe, BaseLineExcelBody.class, excelBodies);
} else {
//还需要额外处理省会
List<BaseLineProExcelBody> excelBodies = new ArrayList<>();
if (!CollectionUtils.isEmpty(integrityData)) {
for (IntegrityVO integrityVOLoop : integrityData) {
BaseLineProExcelBody baseLineProExcelBody = new BaseLineProExcelBody();
baseLineProExcelBody.setStatisticsName(integrityVOLoop.getName() + PoiUtil.dealPOIData(integrityVOLoop.getIntegrityData()));
addChildProExcelData(excelBodies, baseLineProExcelBody, integrityVOLoop.getChildren());
}
}
ExcelUtil.exportExcelWithTargetFile(excel, integrityParam.getStatisticalType().getName(), methodDescribe, BaseLineProExcelBody.class, excelBodies);
}
return FileUtil.getAbsolutePath(excel);
}
/**
* 递归获取子集数据,网络拓扑特殊处理项
*
* @param excelBodies 表格集合
* @param baseLineExcelBody 父级表格数据
* @param childrenIntegrityVO 子集表格数据
*/
private void addChildExcelData(List<BaseLineExcelBody> excelBodies, BaseLineExcelBody baseLineExcelBody, List<IntegrityVO> childrenIntegrityVO) {
if (!CollectionUtils.isEmpty(childrenIntegrityVO)) {
for (IntegrityVO integrityVO : childrenIntegrityVO) {
LineBaseEnum lineBaseEnum = LineBaseEnum.getLineBaseEnumByCode(integrityVO.getLevel());
BaseLineExcelBody fatherBaseLineExcelBody;
List<IntegrityVO> children = integrityVO.getChildren();
switch (lineBaseEnum) {
case GD_LEVEL:
BaseLineExcelBody gdBaseLineExcelBody = new BaseLineExcelBody();
BeanUtil.copyProperties(baseLineExcelBody, gdBaseLineExcelBody);
gdBaseLineExcelBody.setGdName(integrityVO.getName() + PoiUtil.dealPOIData(integrityVO.getIntegrityData()));
fatherBaseLineExcelBody = gdBaseLineExcelBody;
break;
case SUB_LEVEL:
BaseLineExcelBody subBaseLineExcelBody = new BaseLineExcelBody();
BeanUtil.copyProperties(baseLineExcelBody, subBaseLineExcelBody);
subBaseLineExcelBody.setSubName(integrityVO.getName() + PoiUtil.dealPOIData(integrityVO.getIntegrityData()));
subBaseLineExcelBody.setSubScale(integrityVO.getVoltageLevel());
fatherBaseLineExcelBody = subBaseLineExcelBody;
break;
default:
//因为只有供电公司、变电站下面就是监测点所以default默认为监测点层级
BaseLineExcelBody lineBaseLineExcelBody = new BaseLineExcelBody();
BeanUtil.copyProperties(baseLineExcelBody, lineBaseLineExcelBody);
lineBaseLineExcelBody.setLineName(integrityVO.getName() + PoiUtil.dealPOIData(integrityVO.getIntegrityData()));
lineBaseLineExcelBody.setDeviceName(integrityVO.getDeviceName());
lineBaseLineExcelBody.setNetworkParam(integrityVO.getNetworkParam());
lineBaseLineExcelBody.setFactoryName(integrityVO.getFactoryName());
lineBaseLineExcelBody.setComState(integrityVO.getState());
lineBaseLineExcelBody.setTime(integrityVO.getTime());
lineBaseLineExcelBody.setSubvScale(integrityVO.getVoltageLevel());
excelBodies.add(lineBaseLineExcelBody);
fatherBaseLineExcelBody = lineBaseLineExcelBody;
break;
}
addChildExcelData(excelBodies, fatherBaseLineExcelBody, children);
}
}
}
/**
* 递归获取子集数据,电压等级、终端厂家、干扰源类型有额外的省公司名称
*
* @param excelBodies 表格集合
* @param baseLineProExcelBody 父级表格数据
* @param childrenIntegrityVO 子集表格数据
*/
private void addChildProExcelData(List<BaseLineProExcelBody> excelBodies, BaseLineProExcelBody baseLineProExcelBody, List<IntegrityVO> childrenIntegrityVO) {
if (!CollectionUtils.isEmpty(childrenIntegrityVO)) {
for (IntegrityVO integrityVO : childrenIntegrityVO) {
LineBaseEnum lineBaseEnum = LineBaseEnum.getLineBaseEnumByCode(integrityVO.getLevel());
BaseLineProExcelBody fatherBaseLineProExcelBody;
List<IntegrityVO> children = integrityVO.getChildren();
switch (lineBaseEnum) {
case PROVINCE_LEVEL:
BaseLineProExcelBody provinceBaseLineProExcelBody = new BaseLineProExcelBody();
BeanUtil.copyProperties(baseLineProExcelBody, provinceBaseLineProExcelBody);
provinceBaseLineProExcelBody.setProvincialName(integrityVO.getName() + PoiUtil.dealPOIData(integrityVO.getIntegrityData()));
fatherBaseLineProExcelBody = provinceBaseLineProExcelBody;
break;
case GD_LEVEL:
BaseLineProExcelBody gdBaseLineProExcelBody = new BaseLineProExcelBody();
BeanUtil.copyProperties(baseLineProExcelBody, gdBaseLineProExcelBody);
gdBaseLineProExcelBody.setGdName(integrityVO.getName() + PoiUtil.dealPOIData(integrityVO.getIntegrityData()));
fatherBaseLineProExcelBody = gdBaseLineProExcelBody;
break;
case SUB_LEVEL:
BaseLineProExcelBody subBaseLineProExcelBody = new BaseLineProExcelBody();
BeanUtil.copyProperties(baseLineProExcelBody, subBaseLineProExcelBody);
subBaseLineProExcelBody.setSubName(integrityVO.getName() + PoiUtil.dealPOIData(integrityVO.getIntegrityData()));
subBaseLineProExcelBody.setSubScale(integrityVO.getVoltageLevel());
fatherBaseLineProExcelBody = subBaseLineProExcelBody;
break;
default:
//因为只有供电公司、变电站下面就是监测点所以default默认为监测点层级
BaseLineProExcelBody lineBaseLineProExcelBody = new BaseLineProExcelBody();
BeanUtil.copyProperties(baseLineProExcelBody, lineBaseLineProExcelBody);
lineBaseLineProExcelBody.setLineName(integrityVO.getName() + PoiUtil.dealPOIData(integrityVO.getIntegrityData()));
lineBaseLineProExcelBody.setDeviceName(integrityVO.getDeviceName());
lineBaseLineProExcelBody.setNetworkParam(integrityVO.getNetworkParam());
lineBaseLineProExcelBody.setFactoryName(integrityVO.getFactoryName());
lineBaseLineProExcelBody.setComState(integrityVO.getState());
lineBaseLineProExcelBody.setTime(integrityVO.getTime());
lineBaseLineProExcelBody.setSubvScale(integrityVO.getVoltageLevel());
fatherBaseLineProExcelBody = lineBaseLineProExcelBody;
excelBodies.add(lineBaseLineProExcelBody);
break;
}
addChildProExcelData(excelBodies, fatherBaseLineProExcelBody, children);
}
}
}
/**
* influxDB相关操作
* 查询监测点的数据完整性
* 前端要求: 返回百分比数据
*/
private List<PublicDTO> getCondition(List<String> lineList, String startTime, String endTime) {
List<PublicDTO> integrityList = new ArrayList<>();
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
for (int i = 0; i < lineList.size(); i++) {
if (lineList.size() - i != 1) {
stringBuilder.append(Param.LINE_INDEX + "='").append(lineList.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_INDEX + "='").append(lineList.get(i)).append("')");
}
}
//sql语句
String sql = "SELECT SUM(" + Param.REAL + ")/SUM(" + Param.DUE + ")*100 AS integrity FROM PQS_INTEGRITY WHERE " + stringBuilder + " group by " + Param.LINE_INDEX + " tz('Asia/Shanghai')";
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
List<QueryResult.Series> list = result.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
list.forEach(po -> {
PublicDTO publicDTO = new PublicDTO();
List<List<Object>> valueList = po.getValues();
String index = po.getTags().get(Param.LINE_INDEX);
if (!CollectionUtils.isEmpty(valueList)) {
for (List<Object> value : valueList) {
//数据完整性 保留四位小数
Double integrity = value.get(1) == null ? 3.14159 : BigDecimal.valueOf(Double.parseDouble(value.get(1).toString())).setScale(2, RoundingMode.HALF_UP).doubleValue();
publicDTO.setId(index);
publicDTO.setData((integrity > 100.00) ? 100.00 : integrity);
}
}
integrityList.add(publicDTO);
});
}
return integrityList;
}
}

View File

@@ -0,0 +1,609 @@
package com.njcn.harmonic.service.impl;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.vo.LineDetailDataVO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.param.HistoryHarmOverLimitParam;
import com.njcn.harmonic.pojo.vo.HistoryHarmOverLimitVO;
import com.njcn.harmonic.service.NormLimitService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.TimeZone;
/**
* 类介绍
*
* @author denghuajun
* @version 1.0.0
* @date 2022/3/18
*/
@Service
@AllArgsConstructor
public class NormLimitServiceImpl implements NormLimitService {
private final InfluxDbUtils influxDbUtils;
private final LineFeignClient lineFeignClient;
@SneakyThrows
@Override
public List<HistoryHarmOverLimitVO> getHistoryTableData(HistoryHarmOverLimitParam historyHarmOverLimitParam) {
List<HistoryHarmOverLimitVO> historyHarmOverLimitVOList = new ArrayList<>();
List<HistoryHarmOverLimitVO> historyHarmOverLimitVO;
//处理接口数据
String[] lineIds = new String[historyHarmOverLimitParam.getLineId().length];
int[] types = new int[historyHarmOverLimitParam.getCondition().length];
int[] inde = new int[0];
int[] inharm = new int[0];
for (int i = 0; i < historyHarmOverLimitParam.getLineId().length; i++) {
lineIds[i] = historyHarmOverLimitParam.getLineId()[i];
}
for (int i = 0; i < historyHarmOverLimitParam.getCondition().length; i++) {
types[i] = Integer.parseInt(historyHarmOverLimitParam.getCondition()[i]);
}
if (historyHarmOverLimitParam.getHarmonics() != null) {
inde = new int[historyHarmOverLimitParam.getHarmonics().length];
for (int i = 0; i < historyHarmOverLimitParam.getHarmonics().length; i++) {
inde[i] = Integer.parseInt(historyHarmOverLimitParam.getHarmonics()[i]);
}
}
if (historyHarmOverLimitParam.getInHarmonics() != null) {
inharm = new int[historyHarmOverLimitParam.getInHarmonics().length];
for (int i = 0; i < historyHarmOverLimitParam.getInHarmonics().length; i++) {
inharm[i] = Integer.parseInt(historyHarmOverLimitParam.getInHarmonics()[i]);
}
}
for (int i = 0; i < lineIds.length; i++) {
//查询数据
for (int j = 0; j < types.length; j++) {
historyHarmOverLimitVO = getCondition(historyHarmOverLimitParam.getSearchBeginTime(), historyHarmOverLimitParam.getSearchEndTime(), String.valueOf(lineIds[i]), String.valueOf(types[j]), inde, inharm);
historyHarmOverLimitVOList.addAll(historyHarmOverLimitVO);
}
}
//获取值
//处理数据
return historyHarmOverLimitVOList;
}
/**
* influxDB相关操作
* 查询稳态数据分析
*/
@SneakyThrows
private List<HistoryHarmOverLimitVO> getCondition(String startTime, String endTime, String lineId, String contion, int[] number, int[] valueType) {
List<HistoryHarmOverLimitVO> historyHarmOverLimitVOList = new ArrayList<>();
//数据的转化
historyHarmOverLimitVOList = getQueryResult(startTime, endTime, lineId, contion, number, valueType);
return historyHarmOverLimitVOList;
}
private List<HistoryHarmOverLimitVO> getQueryResult(String startTime, String endTime, String lineList, String contion, int[] number, int[] inHarmNum) {
List<HistoryHarmOverLimitVO> historyHarmOverLimitVOList = new ArrayList<>();
QueryResult queryResult = null;
if (!lineList.isEmpty()) {
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
//sql语句
stringBuilder.append("lineid='").append(lineList).append("')");
String sql;
switch (Integer.parseInt(contion)) {
case 12:
//电压偏差
sql = "SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, Voltage_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
historyHarmOverLimitVOList = getNormData(queryResult, contion, lineList, "电压偏差", "%");
break;
case 13:
//三相电压不平衡度
sql = "SELECT time as time, UBalance as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, UBalance as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UBalance as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, UBalance as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
historyHarmOverLimitVOList = getNormData(queryResult, contion, lineList, "三相电压不平衡度", "/");
break;
case 15:
//电压总谐波畸变率
sql = "SELECT time as time, UAberrance as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, UAberrance as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A'and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UAberrance as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, UAberrance as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'CP95' and value_type = 'AVG' order by time asc;" +
" SELECT time as time, UAberrance as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, UAberrance as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UAberrance as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'AVG' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UAberrance as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, UAberrance as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, UAberrance as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UAberrance as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, UAberrance as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
historyHarmOverLimitVOList = getNormData(queryResult, contion, lineList, "电压总谐波畸变率", "%");
break;
case 22:
//负序电流
sql = "SELECT time as time, I_Neg as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, I_Neg as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, I_Neg as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, I_Neg as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
historyHarmOverLimitVOList = getNormData(queryResult, contion, lineList, "负序电流", "/");
break;
case 30:
//频率 V9暂时代表Freq
sql = "SELECT time as time, Freq_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, Freq_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, Freq_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, Freq_Dev as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='T' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
historyHarmOverLimitVOList = getNormData(queryResult, contion, lineList, "频率", "Hz");
break;
case 40:
for (int i = 0; i < number.length; i++) {
List<HistoryHarmOverLimitVO> harmOverLimitVOList;
//谐波电压含有率
sql = "SELECT time as time, UHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, UHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
harmOverLimitVOList = getNormData(queryResult, contion, lineList, "谐波电压含有率", "%", number[i]);
historyHarmOverLimitVOList.addAll(harmOverLimitVOList);
}
break;
case 43:
for (int i = 0; i < number.length; i++) {
List<HistoryHarmOverLimitVO> harmOverLimitVOList;
//谐波电流幅值
sql = "SELECT time as time, IHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, IHarm_" + number[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
harmOverLimitVOList = getNormData(queryResult, contion, lineList, "谐波电流幅值", "A", number[i]);
historyHarmOverLimitVOList.addAll(harmOverLimitVOList);
}
break;
case 46:
for (int i = 0; i < inHarmNum.length; i++) {
List<HistoryHarmOverLimitVO> harmOverLimitVOList;
//间谐波电压含有率
sql = "SELECT time as time, InUHARM_" + inHarmNum[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, InUHARM_" + inHarmNum[i] + " as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
harmOverLimitVOList = getNormData(queryResult, contion, lineList, "间谐波电压含有率", "%", inHarmNum[i]);
historyHarmOverLimitVOList.addAll(harmOverLimitVOList);
}
break;
case 61:
//长时闪变
sql = "SELECT time as time, Flicker as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, Flicker as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, Flicker as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, Flicker as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='A' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, Flicker as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, Flicker as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, Flicker as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, Flicker as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='B' and value_type = 'CP95' order by time asc;" +
"SELECT time as time, Flicker as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MAX' order by time asc;" +
"SELECT time as time, Flicker as aValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'MIN' order by time asc;" +
"SELECT time as time, Flicker as bValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'AVG' order by time asc;" +
"SELECT time as time, Flicker as cValue FROM PQS_AbnormalData WHERE " + stringBuilder.toString() +
" and phasic_type ='C' and value_type = 'CP95' order by time asc;";
queryResult = influxDbUtils.query(sql);
historyHarmOverLimitVOList = getNormData(queryResult, contion, lineList, "长时闪变", "/");
break;
default:
break;
}
} else {
return historyHarmOverLimitVOList;
}
return historyHarmOverLimitVOList;
}
//数据组装
@SneakyThrows
private List<HistoryHarmOverLimitVO> getNormData(QueryResult queryResult, String contion, String lineList, String phaseName, String unit) {
List<HistoryHarmOverLimitVO> historyHarmOverLimitVOList = new ArrayList<>();
List<QueryResult.Result> qusery = queryResult.getResults();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//获取监测点详情
LineDetailDataVO lineDetailDataVO = lineFeignClient.getLineDetailData(lineList).getData();
if (!CollectionUtils.isEmpty(qusery.get(0).getSeries())) {
String time = "";
Float aMax = 0.0f, aMin = 0.0f, aAvg = 0.0f, aCp95 = 0.0f, bMax = 0.0f, bMin = 0.0f, bAvg = 0.0f, bCp95 = 0.0f, cMax = 0.0f, cMin = 0.0f, cAvg = 0.0f, cCp95 = 0.0f;
for (int i = 0; i < qusery.get(0).getSeries().get(0).getValues().size(); i++) {
HistoryHarmOverLimitVO historyDataResultVO = new HistoryHarmOverLimitVO();
//A相的最大值
if (!CollectionUtils.isEmpty(qusery.get(0).getSeries())) {
aMax = Float.parseFloat(qusery.get(0).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setMaxValue(aMax);
}
//A相的最小值
if (!CollectionUtils.isEmpty(qusery.get(1).getSeries())) {
aMin = Float.parseFloat(qusery.get(1).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setMinValue(aMin);
}
//A相的评价值
if (!CollectionUtils.isEmpty(qusery.get(2).getSeries())) {
aAvg = Float.parseFloat(qusery.get(2).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setAvgValue(aAvg);
}
//A相的CP95
if (!CollectionUtils.isEmpty(qusery.get(3).getSeries())) {
time = String.valueOf(qusery.get(3).getSeries().get(0).getValues().get(i).get(0));
aCp95 = Float.parseFloat(qusery.get(3).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setTime(dateFormat.format(sdf.parse(time)));
historyDataResultVO.setCp95Value(aCp95);
}
historyDataResultVO.setLineName(lineDetailDataVO.getLineName());
historyDataResultVO.setLineId(lineList);
historyDataResultVO.setNumber(0);
historyDataResultVO.setSubName(lineDetailDataVO.getBdName());
historyDataResultVO.setTargetCode(contion);
historyDataResultVO.setTargetName(phaseName);
if (Integer.parseInt(contion)==12 || Integer.parseInt(contion)==15){
historyDataResultVO.setPhaseType("A");
historyDataResultVO.setStatisticalType(Math.abs(aMax) > Math.abs(aMin) ? 3 : 2);
}else if(Integer.parseInt(contion)==13 || Integer.parseInt(contion)==22){
historyDataResultVO.setPhaseType("/");
historyDataResultVO.setStatisticalType(Math.abs(aMax) > Math.abs(aCp95) ? 3 : 4);
}else {
historyDataResultVO.setPhaseType("A");
historyDataResultVO.setStatisticalType(3);
}
historyDataResultVO.setScale(lineDetailDataVO.getScale());
historyDataResultVO.setUnit(unit);
historyHarmOverLimitVOList.add(historyDataResultVO);
}
if ("12".equals(contion) || "15".equals(contion) || "40".equals(contion) || "61".equals(contion)) {
for (int i = 0; i < qusery.get(4).getSeries().get(0).getValues().size(); i++) {
HistoryHarmOverLimitVO historyDataResultVOB = new HistoryHarmOverLimitVO();
//B相的最大值
if (!CollectionUtils.isEmpty(qusery.get(4).getSeries())) {
bMax = Float.parseFloat(qusery.get(4).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setMaxValue(bMax);
}
//B相的最小值
if (!CollectionUtils.isEmpty(qusery.get(5).getSeries())) {
bMin = Float.parseFloat(qusery.get(5).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setMinValue(bMin);
}
//B相的平均值
if (!CollectionUtils.isEmpty(qusery.get(6).getSeries())) {
bAvg = Float.parseFloat(qusery.get(6).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setAvgValue(bAvg);
}
//B相的CP95
if (!CollectionUtils.isEmpty(qusery.get(7).getSeries())) {
time = String.valueOf(qusery.get(7).getSeries().get(0).getValues().get(i).get(0));
bCp95 = Float.parseFloat(qusery.get(7).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setTime(dateFormat.format(sdf.parse(time)));
historyDataResultVOB.setCp95Value(bCp95);
}
historyDataResultVOB.setLineName(lineDetailDataVO.getLineName());
historyDataResultVOB.setLineId(lineList);
historyDataResultVOB.setNumber(0);
historyDataResultVOB.setSubName(lineDetailDataVO.getBdName());
historyDataResultVOB.setTargetCode(contion);
historyDataResultVOB.setTargetName(phaseName);
if (Integer.parseInt(contion)==12 || Integer.parseInt(contion)==15){
historyDataResultVOB.setPhaseType("B");
historyDataResultVOB.setStatisticalType(Math.abs(aMax) > Math.abs(aMin) ? 3 : 2);
}else if(Integer.parseInt(contion)==13 || Integer.parseInt(contion)==22){
historyDataResultVOB.setPhaseType("/");
historyDataResultVOB.setStatisticalType(Math.abs(aMax) > Math.abs(aCp95) ? 3 : 4);
}else {
historyDataResultVOB.setPhaseType("B");
historyDataResultVOB.setStatisticalType(3);
}
historyDataResultVOB.setScale(lineDetailDataVO.getScale());
historyDataResultVOB.setUnit(unit);
historyHarmOverLimitVOList.add(historyDataResultVOB);
}
for (int i = 0; i < qusery.get(8).getSeries().get(0).getValues().size(); i++) {
HistoryHarmOverLimitVO historyDataResultVOC = new HistoryHarmOverLimitVO();
//C相的最大值
if (!CollectionUtils.isEmpty(qusery.get(8).getSeries())) {
cMax = Float.parseFloat(qusery.get(8).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setMaxValue(cMax);
}
//C相的最小值
if (!CollectionUtils.isEmpty(qusery.get(9).getSeries())) {
cMin = Float.parseFloat(qusery.get(9).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setMinValue(cMin);
}
//C相的平均值
if (!CollectionUtils.isEmpty(qusery.get(10).getSeries())) {
cAvg = Float.parseFloat(qusery.get(10).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setAvgValue(cAvg);
}
//C相的CP95
if (!CollectionUtils.isEmpty(qusery.get(11).getSeries())) {
time = String.valueOf(qusery.get(11).getSeries().get(0).getValues().get(i).get(0));
cCp95 = Float.parseFloat(qusery.get(11).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setTime(dateFormat.format(sdf.parse(time)));
historyDataResultVOC.setCp95Value(cCp95);
}
historyDataResultVOC.setLineName(lineDetailDataVO.getLineName());
historyDataResultVOC.setLineId(lineList);
historyDataResultVOC.setNumber(0);
historyDataResultVOC.setSubName(lineDetailDataVO.getBdName());
historyDataResultVOC.setTargetCode(contion);
historyDataResultVOC.setTargetName(phaseName);
if (Integer.parseInt(contion)==12 || Integer.parseInt(contion)==15){
historyDataResultVOC.setPhaseType("C");
historyDataResultVOC.setStatisticalType(Math.abs(aMax) > Math.abs(aMin) ? 3 : 2);
}else if(Integer.parseInt(contion)==13 || Integer.parseInt(contion)==22){
historyDataResultVOC.setPhaseType("/");
historyDataResultVOC.setStatisticalType(Math.abs(aMax) > Math.abs(aCp95) ? 3 : 4);
}else {
historyDataResultVOC.setPhaseType("C");
historyDataResultVOC.setStatisticalType(3);
}
historyDataResultVOC.setScale(lineDetailDataVO.getScale());
historyDataResultVOC.setUnit(unit);
historyHarmOverLimitVOList.add(historyDataResultVOC);
}
}
}
return historyHarmOverLimitVOList;
}
@SneakyThrows
private List<HistoryHarmOverLimitVO> getNormData(QueryResult queryResult, String contion, String lineList, String phaseName, String unit, int number) {
List<HistoryHarmOverLimitVO> historyHarmOverLimitVOList = new ArrayList<>();
List<QueryResult.Result> qusery = queryResult.getResults();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//获取监测点详情
LineDetailDataVO lineDetailDataVO = lineFeignClient.getLineDetailData(lineList).getData();
if (!CollectionUtils.isEmpty(qusery.get(0).getSeries())) {
String time = "";
Float aMax = 0.0f, aMin = 0.0f, aAvg = 0.0f, aCp95 = 0.0f, bMax = 0.0f, bMin = 0.0f, bAvg = 0.0f, bCp95 = 0.0f, cMax = 0.0f, cMin = 0.0f, cAvg = 0.0f, cCp95 = 0.0f;
HistoryHarmOverLimitVO historyDataResultVO = new HistoryHarmOverLimitVO();
for (int i = 0; i < qusery.get(0).getSeries().get(0).getValues().size(); i++) {
//A相的最大值
if (!CollectionUtils.isEmpty(qusery.get(0).getSeries())) {
aMax = Float.parseFloat(qusery.get(0).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setMaxValue(aMax);
}
//A相的最小值
if (!CollectionUtils.isEmpty(qusery.get(1).getSeries())) {
aMin = Float.parseFloat(qusery.get(1).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setMinValue(aMin);
}
//A相的评价值
if (!CollectionUtils.isEmpty(qusery.get(2).getSeries())) {
aAvg = Float.parseFloat(qusery.get(2).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setAvgValue(aAvg);
}
//A相的CP95
if (!CollectionUtils.isEmpty(qusery.get(3).getSeries())) {
time = String.valueOf(qusery.get(3).getSeries().get(0).getValues().get(i).get(0));
aCp95 = Float.parseFloat(qusery.get(3).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVO.setTime(dateFormat.format(sdf.parse(time)));
historyDataResultVO.setCp95Value(aCp95);
}
historyDataResultVO.setLineName(lineDetailDataVO.getLineName());
historyDataResultVO.setLineId(lineList);
historyDataResultVO.setNumber(number);
historyDataResultVO.setSubName(lineDetailDataVO.getBdName());
historyDataResultVO.setTargetCode(contion);
historyDataResultVO.setTargetName(number + "" + phaseName);
historyDataResultVO.setPhaseType("A");
historyDataResultVO.setStatisticalType(4);
historyDataResultVO.setScale(lineDetailDataVO.getScale());
historyDataResultVO.setUnit(unit);
historyHarmOverLimitVOList.add(historyDataResultVO);
}
for (int i = 0; i < qusery.get(4).getSeries().get(0).getValues().size(); i++) {
HistoryHarmOverLimitVO historyDataResultVOB = new HistoryHarmOverLimitVO();
//B相的最大值
if (!CollectionUtils.isEmpty(qusery.get(4).getSeries())) {
bMax = Float.parseFloat(qusery.get(4).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setMaxValue(bMax);
}
//B相的最小值
if (!CollectionUtils.isEmpty(qusery.get(5).getSeries())) {
bMin = Float.parseFloat(qusery.get(5).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setMinValue(bMin);
}
//B相的平均值
if (!CollectionUtils.isEmpty(qusery.get(6).getSeries())) {
bAvg = Float.parseFloat(qusery.get(6).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setAvgValue(bAvg);
}
//B相的CP95
if (!CollectionUtils.isEmpty(qusery.get(7).getSeries())) {
time = String.valueOf(qusery.get(7).getSeries().get(0).getValues().get(i).get(0));
bCp95 = Float.parseFloat(qusery.get(7).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOB.setTime(dateFormat.format(sdf.parse(time)));
historyDataResultVOB.setCp95Value(bCp95);
}
historyDataResultVOB.setLineName(lineDetailDataVO.getLineName());
historyDataResultVOB.setLineId(lineList);
historyDataResultVOB.setNumber(number);
historyDataResultVOB.setSubName(lineDetailDataVO.getBdName());
historyDataResultVOB.setTargetCode(contion);
historyDataResultVOB.setTargetName(number + "" + phaseName);
historyDataResultVOB.setPhaseType("B");
historyDataResultVOB.setScale(lineDetailDataVO.getScale());
historyDataResultVOB.setUnit(unit);
historyHarmOverLimitVOList.add(historyDataResultVOB);
}
for (int i = 0; i < qusery.get(8).getSeries().get(0).getValues().size(); i++) {
HistoryHarmOverLimitVO historyDataResultVOC = new HistoryHarmOverLimitVO();
//C相的最大值
if (!CollectionUtils.isEmpty(qusery.get(8).getSeries())) {
cMax = Float.parseFloat(qusery.get(8).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setMaxValue(cMax);
}
//C相的最小值
if (!CollectionUtils.isEmpty(qusery.get(9).getSeries())) {
cMin = Float.parseFloat(qusery.get(9).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setMinValue(cMin);
}
//C相的平均值
if (!CollectionUtils.isEmpty(qusery.get(10).getSeries())) {
cAvg = Float.parseFloat(qusery.get(10).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setAvgValue(cAvg);
}
//C相的CP95
if (!CollectionUtils.isEmpty(qusery.get(11).getSeries())) {
time = String.valueOf(qusery.get(11).getSeries().get(0).getValues().get(i).get(0));
cCp95 = Float.parseFloat(qusery.get(11).getSeries().get(0).getValues().get(i).get(1).toString());
historyDataResultVOC.setTime(dateFormat.format(sdf.parse(time)));
historyDataResultVOC.setCp95Value(cCp95);
}
historyDataResultVOC.setLineName(lineDetailDataVO.getLineName());
historyDataResultVOC.setLineId(lineList);
historyDataResultVOC.setNumber(number);
historyDataResultVOC.setSubName(lineDetailDataVO.getBdName());
historyDataResultVOC.setTargetCode(contion);
historyDataResultVOC.setTargetName(number + "" + phaseName);
historyDataResultVOC.setPhaseType("C");
historyDataResultVOC.setScale(lineDetailDataVO.getScale());
historyDataResultVOC.setUnit(unit);
historyHarmOverLimitVOList.add(historyDataResultVOC);
}
}
return historyHarmOverLimitVOList;
}
}

View File

@@ -0,0 +1,317 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.OnlineRateDataMapper;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.vo.OnlineRateCensusVO;
import com.njcn.harmonic.pojo.vo.OnlineRateVO;
import com.njcn.harmonic.service.OnlineRateDataService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2021/12/31 9:50
*/
@Service
@AllArgsConstructor
public class OnlineRateDataServiceImpl implements OnlineRateDataService {
private final OnlineRateDataMapper onlineRateDataMapper;
private final InfluxDbUtils influxDbUtils;
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final GeneralInfo generalInfo;
@Override
public List<OnlineRateVO> getOnlineRateData(DeviceInfoParam.BusinessParam onlineRateParam) {
List<OnlineRateVO> onlineRateList = new ArrayList<>();
//按照条件获取运行终端综合信息
List<GeneralDeviceDTO> deviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(new DeviceInfoParam(onlineRateParam.getStatisticalType(), onlineRateParam.getDeptIndex(), generalInfo.getMicroServiceName(), null, onlineRateParam.getManufacturer(), null)).getData();
if (!CollectionUtils.isEmpty(deviceDTOList)){
for (GeneralDeviceDTO generalDeviceDTO : deviceDTOList) {
if (CollectionUtils.isEmpty(generalDeviceDTO.getDeviceIndexes())){
continue;
}
OnlineRateVO onlineRateVO = new OnlineRateVO();
onlineRateVO.setId(generalDeviceDTO.getIndex());
onlineRateVO.setName(generalDeviceDTO.getName());
List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes();
//查找在线率
List<PublicDTO> condition = getCondition(deviceIndexes, onlineRateParam.getSearchBeginTime(), onlineRateParam.getSearchEndTime());
onlineRateVO.setOnlineRateData(condition.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
//组装表格树
List<OnlineRateVO> treeList = getTreeData(deviceIndexes, onlineRateParam);
onlineRateVO.setChildren(treeList);
onlineRateList.add(onlineRateVO);
}
}
return onlineRateList;
}
@Override
public OnlineRateCensusVO getOnlineRateDataCensus(DeviceInfoParam.CompareBusinessParam onlineRateCensusParam) {
OnlineRateCensusVO onlineRateCensusVO = new OnlineRateCensusVO();
onlineRateCensusParam.setServerName(generalInfo.getMicroServiceName());
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(onlineRateCensusParam).getData();
List<String> type = new ArrayList<>();
List<Double> single = new ArrayList<>(), ratio = new ArrayList<>();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
for (GeneralDeviceDTO generalDeviceDTO: generalDeviceDTOList){
List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes();
if (CollectionUtils.isEmpty(deviceIndexes)) {
continue;
}
type.add(generalDeviceDTO.getName());
//根据终端索引集查询在线率
List<PublicDTO> onlineRateList = getCondition(deviceIndexes, onlineRateCensusParam.getSearchBeginTime(), onlineRateCensusParam.getSearchEndTime());
single.add(onlineRateList.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
//如果存在需要比较的时间,再获取对应数据
if(StrUtil.isNotBlank(onlineRateCensusParam.getPeriodBeginTime()) && StrUtil.isNotBlank(onlineRateCensusParam.getPeriodEndTime())){
List<PublicDTO> compareData = getCondition(deviceIndexes, onlineRateCensusParam.getPeriodBeginTime(), onlineRateCensusParam.getPeriodEndTime());
ratio.add(compareData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
}
}
}
onlineRateCensusVO.setType(type);
onlineRateCensusVO.setSingle(single);
onlineRateCensusVO.setRatio(ratio);
// List<OnlineRateVO> list = new ArrayList<>();
// List<OnlineRateVO> periodList = new ArrayList<>();
// OnlineRateCensusVO onlineRateCensusVO = new OnlineRateCensusVO();
// OnlineRateParam onlineRateParam = new OnlineRateParam();
// BeanUtil.copyProperties(onlineRateCensusParam,onlineRateParam);
// List<String> type = new ArrayList<>();
// List<Double> single = new ArrayList<>();
// List<Double> ratio = new ArrayList<>();
// if (Objects.equals(onlineRateCensusParam.getStatisticalType(),0)){
// list = getOnlineRateData(onlineRateParam).get(0).getChildren();
// } else {
// list = getOnlineRateData(onlineRateParam);
// }
// if (!CollectionUtils.isEmpty(list)){
// list.forEach(onlineRateVO -> {
// type.add(onlineRateVO.getName());
// single.add(onlineRateVO.getOnlineRateData());
// onlineRateCensusVO.setType(type);
// onlineRateCensusVO.setSingle(single);
// });
// }
// if (StringUtils.isNotBlank(onlineRateCensusParam.getPeriodBeginTime()) &&
// StringUtils.isNotBlank(onlineRateCensusParam.getPeriodEndTime())){
// onlineRateParam.setSearchBeginTime(onlineRateCensusParam.getPeriodBeginTime());
// onlineRateParam.setSearchEndTime(onlineRateCensusParam.getPeriodEndTime());
// if (Objects.equals(onlineRateCensusParam.getStatisticalType(),0)){
// periodList = getOnlineRateData(onlineRateParam).get(0).getChildren();
// } else {
// periodList = getOnlineRateData(onlineRateParam);
// }
// if (!CollectionUtils.isEmpty(periodList)) {
// periodList.forEach(onlineRateVO -> {
// ratio.add(onlineRateVO.getOnlineRateData());
// onlineRateCensusVO.setRatio(ratio);
// });
// }
// }
return onlineRateCensusVO;
}
/**
* 获取每层树数据
*/
public List<OnlineRateVO> getTreeData(List<String> deviceIndexes, DeviceInfoParam.BusinessParam onlineRateParam) {
//终端集合
List<OnlineRateVO> deviceList = onlineRateDataMapper.getOnlineRateData(deviceIndexes);
//变电站集合
List<OnlineRateVO> substationList = onlineRateDataMapper.getLineInfoByList(deviceList.stream().map(OnlineRateVO::getPid).distinct().collect(Collectors.toList()));
//供电公司集合
List<OnlineRateVO> powerCompanyList = onlineRateDataMapper.getLineInfoByList(substationList.stream().map(OnlineRateVO::getPid).distinct().collect(Collectors.toList()));
//查询终端的在线率
List<PublicDTO> onlineRateList = getCondition(deviceIndexes, onlineRateParam.getSearchBeginTime(), onlineRateParam.getSearchEndTime());
//根据终端集合组装终端的在线率
if (!CollectionUtils.isEmpty(deviceList)) {
deviceList.stream().map(list1 -> onlineRateList.stream().filter(list2 -> Objects.equals(list1.getId(), list2.getId())).findAny().map(m -> {
list1.setOnlineRateData(m.getData());
return list1;
})).collect(Collectors.toList());
}
substationList.stream().peek(item -> item.setChildren(getChildCategoryList(item, deviceList))).collect(Collectors.toList());
powerCompanyList.stream().peek(item -> item.setChildren(getChildCategoryList(item, substationList))).collect(Collectors.toList());
setFatherOnlineRate(substationList);
setFatherOnlineRate(powerCompanyList);
return powerCompanyList;
}
/**
* 组装树
*/
private List<OnlineRateVO> getChildCategoryList(OnlineRateVO item, List<OnlineRateVO> all) {
return all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList());
}
/**
* influxDB相关操作
* 查询终端的在线率
* 前端要求: 返回百分比数据
*/
private List<PublicDTO> getCondition(List<String> deviceIndexes, String startTime, String endTime) {
List<PublicDTO> publicDTOList = new ArrayList<>();
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
for (int i = 0; i < deviceIndexes.size(); i++) {
if (deviceIndexes.size() - i != 1) {
stringBuilder.append(Param.DEV_INDEX + "='").append(deviceIndexes.get(i)).append("' or ");
} else {
stringBuilder.append(Param.DEV_INDEX + "='").append(deviceIndexes.get(i)).append("')");
}
}
//sql语句
String sql = "SELECT (SUM(" + Param.ONLINEMIN + ")/(SUM(" + Param.OFFLINEMIN + ")+SUM(" + Param.ONLINEMIN + ")))*100 AS onlineRate FROM pqs_onlinerate WHERE " + stringBuilder + " group by " + Param.DEV_INDEX;
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
List<QueryResult.Series> list = result.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
list.forEach(po -> {
PublicDTO publicDTO = new PublicDTO();
List<List<Object>> valueList = po.getValues();
String index = po.getTags().get(Param.DEV_INDEX);
if (!CollectionUtils.isEmpty(valueList)) {
for (List<Object> value : valueList) {
//终端在线率 保留两位小数
Double onlineRate = value.get(1) == null ? null : BigDecimal.valueOf(Double.parseDouble(value.get(1).toString())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
publicDTO.setId(index);
publicDTO.setData(onlineRate);
}
}
publicDTOList.add(publicDTO);
});
}
return publicDTOList;
}
/**
* 父级组装
*/
private void setFatherData(Map<String, List<String>> map, List<OnlineRateVO> list, DeviceInfoParam.BusinessParam onlineRateParam) {
for (String key : map.keySet()) {
if (!CollectionUtils.isEmpty(map.get(key))) {
List<OnlineRateVO> onlineRateVOList = getTreeData(map.get(key), onlineRateParam);
//拼接父级
OnlineRateVO onlineRateVO = new OnlineRateVO();
onlineRateVO.setId("0");
onlineRateVO.setName(key);
onlineRateVO.setLevel(0);
if (CollectionUtil.isNotEmpty(onlineRateVOList)) {
onlineRateVO.setChildren(onlineRateVOList);
}
list.add(onlineRateVO);
setTopOnlineRate(list);
}
}
}
/**
* 计算父级终端在线率
*/
private void setFatherOnlineRate(List<OnlineRateVO> list) {
list.forEach(item -> {
List<OnlineRateVO> children = item.getChildren();
List<OnlineRateVO> tempList = children.stream().filter(s -> !Objects.equals(s.getOnlineRateData(), 3.14159)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(tempList)) {
item.setOnlineRateData(tempList.stream().mapToDouble(OnlineRateVO::getOnlineRateData).sum() / children.size());
} else {
item.setOnlineRateData(3.14159);
}
});
}
//变电站
private void setSubstationIntegrity(List<OnlineRateVO> list) {
list.forEach(item -> {
List<OnlineRateVO> children = item.getChildren();
List<OnlineRateVO> result = new ArrayList<>(children);
double aver = result.stream().mapToDouble(OnlineRateVO::getOnlineRateData).average().orElseThrow(IllegalStateException::new);
item.setOnlineRateData(BigDecimal.valueOf(aver).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
});
}
//供电公司
private void setPowerCompanyIntegrity(List<OnlineRateVO> list) {
list.forEach(item -> {
List<OnlineRateVO> result = new ArrayList<>();
List<OnlineRateVO> children = item.getChildren();
children.forEach(item2 -> {
List<OnlineRateVO> children2 = item2.getChildren();
result.addAll(children2);
});
double aver = result.stream().mapToDouble(OnlineRateVO::getOnlineRateData).average().orElseThrow(IllegalStateException::new);
item.setOnlineRateData(BigDecimal.valueOf(aver).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
});
}
//省级
private void setAreaIntegrity(List<OnlineRateVO> list) {
list.forEach(item -> {
List<OnlineRateVO> result = new ArrayList<>();
List<OnlineRateVO> children = item.getChildren();
children.forEach(item2 -> {
List<OnlineRateVO> children2 = item2.getChildren();
children2.forEach(item3 -> {
List<OnlineRateVO> children3 = item3.getChildren();
result.addAll(children3);
});
});
double aver = result.stream().mapToDouble(OnlineRateVO::getOnlineRateData).average().orElseThrow(IllegalStateException::new);
item.setOnlineRateData(BigDecimal.valueOf(aver).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
});
}
private void setTopOnlineRate(List<OnlineRateVO> list) {
list.forEach(item -> {
List<OnlineRateVO> result = new ArrayList<>();
List<OnlineRateVO> children = item.getChildren();
children.forEach(item2 -> {
List<OnlineRateVO> children2 = item2.getChildren();
children2.forEach(item3 -> {
List<OnlineRateVO> children3 = item3.getChildren();
children3.forEach(item4 -> {
List<OnlineRateVO> children4 = item4.getChildren();
result.addAll(children4);
});
});
});
double aver = result.stream().mapToDouble(OnlineRateVO::getOnlineRateData).average().orElseThrow(IllegalStateException::new);
item.setOnlineRateData(BigDecimal.valueOf(aver).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
});
}
}

View File

@@ -0,0 +1,237 @@
package com.njcn.harmonic.service.impl;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.dto.PollutionLineDTO;
import com.njcn.device.pojo.dto.PollutionParamDTO;
import com.njcn.device.pojo.dto.PollutionSubstationDTO;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.vo.PollutionVO;
import com.njcn.harmonic.service.IPollutionService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.web.utils.RequestUtil;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/2/21 16:43
*/
@Service
@AllArgsConstructor
public class PollutionServiceImpl implements IPollutionService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final InfluxDbUtils influxDbUtils;
private final GeneralInfo generalInfo;
private final LineFeignClient lineFeignClient;
@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();
if (StringUtils.isBlank(RequestUtil.getDeptIndex())){
return list;
}
List<GeneralDeviceDTO> deviceList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData();
deviceList.forEach(dept->{
lineList.addAll(dept.getLineIndexes());
});
if (!CollectionUtils.isEmpty(lineList)){
paramDTO.setLineList(lineList);
lineInfo = lineFeignClient.getLineInfo(paramDTO).getData();
List<PublicDTO> lineData = getLineDate(lineList,harmonicPublicParam.getSearchBeginTime(),harmonicPublicParam.getSearchEndTime(),harmonicPublicParam.getStatisticalType().getCode());
if (!CollectionUtils.isEmpty(lineData)){
lineInfo.stream().map(list1->lineData.stream().filter(list2-> Objects.equals(list1.getId(),list2.getId())).findAny().map(m->{
list1.setData(m.getData());
return list1;
})).collect(Collectors.toList());
}
}
Map<String,List<PollutionLineDTO>> map = lineInfo.stream().collect(Collectors.groupingBy(PollutionLineDTO::getSubstationId));
deviceList.forEach(dept->{
List<PollutionVO> childrenList = new ArrayList<>();
PollutionVO pollutionVO = new PollutionVO();
pollutionVO.setId(dept.getIndex());
pollutionVO.setName(dept.getName());
if (!CollectionUtils.isEmpty(dept.getSubIndexes())){
dept.getSubIndexes().forEach(sub->{
List<PollutionLineDTO> l1 = map.get(sub);
PollutionVO children = new PollutionVO();
children.setId(sub);
children.setPid(dept.getIndex());
children.setName(l1.get(0).getSubstation());
children.setData(l1.stream().max(Comparator.comparing(PollutionLineDTO::getData)).get().getData());
childrenList.add(children);
});
}
if (!CollectionUtils.isEmpty(childrenList)){
pollutionVO.setChildren(childrenList.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed()).collect(Collectors.toList()));
pollutionVO.setData(childrenList.stream().max(Comparator.comparing(PollutionVO::getData)).get().getData());
}
list.add(pollutionVO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed().thenComparing(PollutionVO::getName)).collect(Collectors.toList());
}
return list;
}
@Override
public List<PollutionSubstationDTO> getSubstationInfoById(HarmonicPublicParam deptParam) {
deptParam.setServerName(generalInfo.getMicroServiceName());
List<PollutionSubstationDTO> list = new ArrayList<>();
List<GeneralDeviceDTO> sub = generalDeviceInfoClient.getPracticalRunDeviceInfoAsSubstation(deptParam).getData();
sub.forEach(item->{
PollutionSubstationDTO pollutionSubstationDTO = lineFeignClient.getSubstationInfo(item.getIndex()).getData();
if (!CollectionUtils.isEmpty(item.getLineIndexes())){
List<PublicDTO> lineData = getLineDate(item.getLineIndexes(),deptParam.getSearchBeginTime(),deptParam.getSearchEndTime(),deptParam.getStatisticalType().getCode());
if (!CollectionUtils.isEmpty(lineData)){
pollutionSubstationDTO.setData(lineData.stream().max(Comparator.comparing(PublicDTO::getData)).get().getData());
}
}
list.add(pollutionSubstationDTO);
});
if (!CollectionUtils.isEmpty(list)){
return list.stream().sorted(Comparator.comparing(PollutionSubstationDTO::getData).reversed().thenComparing(PollutionSubstationDTO::getName)).collect(Collectors.toList());
}
return list;
}
@Override
public List<PollutionLineDTO> getLineInfoById(HarmonicPublicParam harmonicPublicParam) {
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
List<PollutionLineDTO> list = new ArrayList<>();
List<String> line = new ArrayList<>();
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<PublicDTO> lineData = getLineDate(line, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime(), harmonicPublicParam.getStatisticalType().getCode());
if (!CollectionUtils.isEmpty(lineData)){
list.stream().map(list1->lineData.stream().filter(list2-> Objects.equals(list1.getId(),list2.getId())).findAny().map(m->{
list1.setData(m.getData());
return list1;
})).collect(Collectors.toList());
}
} else {
return list;
}
return list.stream().sorted(Comparator.comparing(PollutionLineDTO::getData).reversed().thenComparing(PollutionLineDTO::getName)).collect(Collectors.toList());
}
@Override
public List<PollutionLineDTO> getLineRank(HarmonicPublicParam harmonicPublicParam) {
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
List<PollutionLineDTO> list = new ArrayList<>();
List<String> lineList = new ArrayList<>();
PollutionParamDTO paramDTO = new PollutionParamDTO();
if (StringUtils.isBlank(RequestUtil.getDeptIndex())){
return list;
}
List<GeneralDeviceDTO> deviceList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData();
deviceList.forEach(item->{
if (!CollectionUtils.isEmpty(item.getLineIndexes())){
lineList.addAll(item.getLineIndexes());
}
});
if (!CollectionUtils.isEmpty(lineList)){
paramDTO.setLineList(lineList);
list = lineFeignClient.getLineInfo(paramDTO).getData();
List<PublicDTO> result = getLineDate(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime(), harmonicPublicParam.getStatisticalType().getCode());
if (!CollectionUtils.isEmpty(result)){
list.stream().map(list1->result.stream().filter(list2-> Objects.equals(list1.getId(),list2.getId())).findAny().map(m->{
list1.setData(m.getData());
return list1;
})).collect(Collectors.toList());
}
}
list.sort((item1,item2)->item2.getData().compareTo(item1.getData()));
if (list.size() > Param.UP_LIMIT){
return list.subList(Param.DOWN_LIMIT,Param.UP_LIMIT);
}
return list;
}
/**
* 功能描述:根据监测点id查询influxDB污染指数
* @param line 监测点集合
* startTime 开始时间
* endTime 结束时间
* type 指标参数
* @return
* @author xy
* @date 2022/2/21 20:08
*/
private List<PublicDTO> getLineDate(List<String> line, String startTime, String endTime, String type){
List<PublicDTO> result = new ArrayList<>();
String quota = "";
if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())){
quota = "harmonic_v";
} else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())){
quota = "harmonic_i";
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME).append(" >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
for (int i=0;i<line.size();i++){
if (line.size() - i != 1){
stringBuilder.append(Param.LINE_ID).append("='").append(line.get(i)).append("' or ");
} else {
stringBuilder.append(Param.LINE_ID).append("='").append(line.get(i)).append("')");
}
}
stringBuilder.append(" group by line_id order by time desc limit 1 tz('Asia/Shanghai')");
String sql = "SELECT line_id,"+quota+" FROM harmonic_pollution where " + stringBuilder;
QueryResult sqlResult = influxDbUtils.query(sql);
List<QueryResult.Series> list = sqlResult.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)){
list.forEach(po->{
String index = po.getTags().get(Param.LINE_ID);
List<List<Object>> valueList = po.getValues();
if (!CollectionUtils.isEmpty(valueList)){
for (List<Object> value : valueList) {
PublicDTO publicDTO = new PublicDTO();
Double data = value.get(2) == null ? 0.0 : BigDecimal.valueOf(Double.parseDouble(value.get(2).toString())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
publicDTO.setId(index);
publicDTO.setData(data);
result.add(publicDTO);
}
}
});
}
return result;
}
}

View File

@@ -0,0 +1,384 @@
package com.njcn.harmonic.service.impl;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.param.PulicTimeStatisParam;
import com.njcn.harmonic.pojo.vo.SteadyInfoData;
import com.njcn.harmonic.service.SteadyDataService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.web.pojo.vo.SteadyDataVO;
import lombok.AllArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
/**
* @author denghuajun
* @date 2022/3/4
*
*/
@Service
@AllArgsConstructor
public class SteadyDataServiceImpl implements SteadyDataService {
private final InfluxDbUtils influxDbUtils;
@Override
public SteadyInfoData getSteadyData(PulicTimeStatisParam pulicTimeStatisParam) {
SteadyInfoData steadyInfoDatas = new SteadyInfoData();
List<Float> steadyInfoList = new ArrayList<>();
List<Float> steadyInfoData = new ArrayList<>();
steadyInfoList = getCondition(pulicTimeStatisParam.getId(), pulicTimeStatisParam.getSearchBeginTime(), pulicTimeStatisParam.getSearchEndTime());
if (StringUtils.isNotBlank(pulicTimeStatisParam.getPeriodBeginTime()) && StringUtils.isNotBlank(pulicTimeStatisParam.getPeriodEndTime())) {
steadyInfoData = getCondition(pulicTimeStatisParam.getId(), pulicTimeStatisParam.getPeriodBeginTime(), pulicTimeStatisParam.getPeriodEndTime());
}
steadyInfoDatas.setSteadyInfoList(steadyInfoList);
steadyInfoDatas.setSteadyInfoData(steadyInfoData);
return steadyInfoDatas;
}
private List<Float> getCondition(String lineList, String startTime, String endTime) {
SteadyDataVO steadyDataVO = new SteadyDataVO();
SteadyDataVO steadyData = new SteadyDataVO();
if (!lineList.isEmpty() || StringUtils.isNotBlank(lineList)) {
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
//sql语句
stringBuilder.append(Param.MYINDEX + "='").append(lineList).append("')");
String sql = "SELECT" +
" SUM( AllTime ) AS allTime," +
" SUM( Flicket_AllTime ) AS frequency," +
" SUM( Freq_Dev_OverTime ) AS uBalance," +
" SUM( I_Neg_OverTime ) AS iNeg," +
" SUM( IHarm_13_OverTime) AS harmElec," +
" SUM( UHarm_4_OverTime) AS harmVoltage," +
" SUM( Flicker_OverTime ) AS flicker," +
" SUM( Flicket_AllTime ) AS allFlicker," +
" SUM( Voltage_Dev_OverTime ) AS voltageDeviation," +
" SUM( InUHARM_9_OverTime ) AS inUharm" +
" FROM" +
" LIMIT_RATE" +
" WHERE" +
" Phasic_Type = 'T'" +
" AND " + stringBuilder.toString();
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
List<QueryResult.Series> list = result.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
List<List<Object>> valueList = list.get(0).getValues();
List<Object> value = valueList.get(0);
if (new Double(String.valueOf(value.get(1))).intValue() == 0 || new Double(String.valueOf(value.get(1))).intValue() < 0) {
steadyDataVO.setVoltageDeviation(3.14159f);
steadyDataVO.setUBalance(3.14159f);
steadyDataVO.setFlicker(3.14159f);
steadyDataVO.setOddVoltage(3.14159f);
steadyDataVO.setEvenVoltage(3.14159f);
steadyDataVO.setOddElectric(3.14159f);
steadyDataVO.setEvenElectric(3.14159f);
steadyDataVO.setFrequency(3.14159f);
steadyDataVO.setUAberrance(3.14159f);
steadyDataVO.setHarmVoltage(3.14159f);
steadyDataVO.setHarmElec(3.14159f);
//负序电流
steadyDataVO.setINeg(3.14159f);
//间谐波
steadyDataVO.setInUharm(3.14159f);
steadyData = mergeSteady(steadyData, steadyDataVO);
SteadyDataVO steadyDataList = getSteadyAcc(steadyData);
return getSteadyData(steadyDataList);
} else {
steadyDataVO.setAllTime(Float.parseFloat(value.get(1).toString()));
steadyDataVO.setFrequency(Float.parseFloat(value.get(2).toString()));
steadyDataVO.setUBalance(Float.parseFloat(value.get(3).toString()));
steadyDataVO.setINeg(Float.parseFloat(value.get(4).toString()));
steadyDataVO.setHarmElec(Float.parseFloat(value.get(5).toString()));
steadyDataVO.setHarmVoltage(Float.parseFloat(value.get(6).toString()));
steadyDataVO.setFlicker(Float.parseFloat(value.get(7).toString()));
steadyDataVO.setAllFlicker(Float.parseFloat(value.get(8).toString()));
steadyDataVO.setVoltageDeviation(Float.parseFloat(value.get(9).toString()));
steadyDataVO.setInUharm(Float.parseFloat(value.get(10).toString()));
}
} else {
//有监测点,但是无数据的处理
steadyDataVO.setVoltageDeviation(3.14159f);
steadyDataVO.setUBalance(3.14159f);
steadyDataVO.setFlicker(3.14159f);
steadyDataVO.setOddVoltage(3.14159f);
steadyDataVO.setEvenVoltage(3.14159f);
steadyDataVO.setOddElectric(3.14159f);
steadyDataVO.setEvenElectric(3.14159f);
steadyDataVO.setFrequency(3.14159f);
steadyDataVO.setUAberrance(3.14159f);
steadyDataVO.setHarmVoltage(3.14159f);
steadyDataVO.setHarmElec(3.14159f);
//负序电流
steadyDataVO.setINeg(3.14159f);
//间谐波
steadyDataVO.setInUharm(3.14159f);
steadyData = mergeSteady(steadyData, steadyDataVO);
SteadyDataVO steadyDataList = getSteadyAcc(steadyData);
return getSteadyData(steadyDataList);
}
} else {
//steadyData = mergeSteady(steadyData, steadyDataVO);
//无监测点前台统一替换为“/”
// SteadyDataVO steadyDataList = getSteadyAcc(steadyData);
return getSteadyData(steadyData);
}
steadyData = mergeSteady(steadyData, steadyDataVO);
SteadyDataVO steadyDataList = getSteadyAcc(steadyData);
return getSteadyData(steadyDataList);
}
/**
* 合并数据
*
* @param steadyData 原始稳态实体
*/
private SteadyDataVO mergeSteady(SteadyDataVO steadyData, SteadyDataVO tempT) {
if (tempT == null) {
return steadyData;
} else {
if (steadyData.getAllTime() == 0) {
steadyData.setAllTime(tempT.getAllTime());
} else {
steadyData.setAllTime(steadyData.getAllTime() + tempT.getAllTime());
}
if (steadyData.getFrequency() == 3.1415f) {
steadyData.setFrequency(tempT.getFrequency());
} else {
steadyData.setFrequency(steadyData.getFrequency() + tempT.getFrequency());
}
if (steadyData.getUBalance() == 3.1415f) {
steadyData.setUBalance(tempT.getUBalance());
} else {
steadyData.setUBalance(steadyData.getUBalance() + tempT.getUBalance());
}
if (steadyData.getVoltageDeviation() == 3.1415f) {
steadyData.setVoltageDeviation(tempT.getVoltageDeviation());
} else {
steadyData.setVoltageDeviation(steadyData.getVoltageDeviation() + tempT.getVoltageDeviation());
}
if (steadyData.getAllFlicker() == 3.1415f) {
steadyData.setAllFlicker(tempT.getAllFlicker());
} else {
steadyData.setAllFlicker(steadyData.getAllFlicker() + tempT.getAllFlicker());
}
if (steadyData.getFlicker() == 3.1415f) {
steadyData.setFlicker(tempT.getFlicker());
} else {
steadyData.setFlicker(steadyData.getFlicker() + tempT.getFlicker());
}
if (steadyData.getINeg() == 3.1415f) {
steadyData.setINeg(tempT.getINeg());
} else {
steadyData.setINeg(steadyData.getINeg() + tempT.getINeg());
}
if (steadyData.getInUharm() == 3.1415f) {
steadyData.setInUharm(tempT.getInUharm());
} else {
steadyData.setInUharm(steadyData.getInUharm() + tempT.getInUharm());
}
if (steadyData.getHarmVoltage() == 3.1415f) {
steadyData.setHarmVoltage(tempT.getHarmVoltage());
} else {
steadyData.setHarmVoltage(steadyData.getHarmVoltage() + tempT.getHarmVoltage());
}
if (steadyData.getHarmElec() == 3.1415f) {
steadyData.setHarmElec(tempT.getHarmElec());
} else {
steadyData.setHarmElec(steadyData.getHarmElec() + tempT.getHarmElec());
}
}
return steadyData;
}
/**
* 根据查询出来的数据,计算出每个指标的合格率
*
* @param steadyData 稳态指标数据实体
*/
private SteadyDataVO getSteadyAcc(SteadyDataVO steadyData) {
if (steadyData.getAllTime() == 0 || steadyData.getAllTime() < 0) {
steadyData.setVoltageDeviation(3.14159f);
steadyData.setUBalance(3.14159f);
steadyData.setFlicker(3.14159f);
steadyData.setOddVoltage(3.14159f);
steadyData.setEvenVoltage(3.14159f);
steadyData.setOddElectric(3.14159f);
steadyData.setEvenElectric(3.14159f);
steadyData.setFrequency(3.14159f);
steadyData.setUAberrance(3.14159f);
steadyData.setHarmVoltage(3.14159f);
steadyData.setHarmElec(3.14159f);
//负序电流
steadyData.setINeg(3.14159f);
//间谐波
steadyData.setInUharm(3.14159f);
return steadyData;
} else {
float allTime = steadyData.getAllTime();
//冀北二期 谐波电流 谐波电压 负序电流 间谐波电压含有率 start
steadyData.setHarmVoltage(getAcceptlityByData(allTime, steadyData.getHarmVoltage()));
steadyData.setHarmElec(getAcceptlityByData(allTime, steadyData.getHarmElec()));
steadyData.setINeg(getAcceptlityByData(allTime, steadyData.getINeg()));
steadyData.setInUharm(getAcceptlityByData(allTime, steadyData.getInUharm()));
//冀北二期 谐波电流 谐波电压 负序电流 间谐波电压含有率 end
steadyData.setVoltageDeviation(getAcceptlityByData(allTime, steadyData.getVoltageDeviation()));
steadyData.setUBalance(getAcceptlityByData(allTime, steadyData.getUBalance()));
steadyData.setFlicker(getAcceptlityByData(steadyData.getAllFlicker(), steadyData.getFlicker()));
steadyData.setOddVoltage(getAcceptlityByData(allTime, steadyData.getOddVoltage()));
steadyData.setEvenVoltage(getAcceptlityByData(allTime, steadyData.getEvenVoltage()));
steadyData.setOddElectric(getAcceptlityByData(allTime, steadyData.getOddElectric()));
steadyData.setEvenElectric(getAcceptlityByData(allTime, steadyData.getEvenElectric()));
steadyData.setFrequency(getAcceptlityByData(allTime, steadyData.getFrequency()));
steadyData.setUAberrance(getAcceptlityByData(allTime, steadyData.getUAberrance()));
}
return steadyData;
}
//计算合格率结果
private float getAcceptlityByData(float allTime, float data) {
float accpet = allTime - data;
if (accpet < 0) {
accpet = 0;
}
if (allTime == 0) {
return 100.0f;
}
float num = accpet / allTime;
// 格式化小数
DecimalFormat df = new DecimalFormat("0.00");
return Float.valueOf(df.format(num * 100));
}
private List<Float> getSteadyData(SteadyDataVO steadyDataVO) {
List<Float> floatList = new ArrayList<>();
Float frequency = steadyDataVO.getFrequency();
if (frequency > 100) {
floatList.add(100f);
} else if (frequency == 3.1415f) {
floatList.add(3.1415f);
} else if (frequency == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(BigDecimal.valueOf(frequency).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
}
Float flicker = steadyDataVO.getFlicker();
if (flicker > 100) {
floatList.add(100f);
} else if (frequency == 3.1415f) {
floatList.add(3.1415f);
} else if (frequency == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(BigDecimal.valueOf(flicker).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
}
Float uBalance = steadyDataVO.getUBalance();
if (uBalance > 100) {
floatList.add(100f);
} else if (uBalance == 3.1415f) {
floatList.add(3.1415f);
} else if (uBalance == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(BigDecimal.valueOf(uBalance).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
}
Float uAberrance = steadyDataVO.getUAberrance();
Float oddVoltage = steadyDataVO.getOddVoltage();
Float evenVoltage = steadyDataVO.getEvenVoltage();
if (getHarmVoltageValue(uAberrance, oddVoltage, evenVoltage) > 100) {
floatList.add(100f);
} else if (frequency == 3.1415f) {
floatList.add(3.1415f);
} else if (frequency == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(getHarmVoltageValue(uAberrance, oddVoltage, evenVoltage));
}
Float voltageDeviation = steadyDataVO.getVoltageDeviation();
if (voltageDeviation > 100) {
floatList.add(100f);
} else if (frequency == 3.1415f) {
floatList.add(3.1415f);
} else if (frequency == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(BigDecimal.valueOf(voltageDeviation).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
}
Float oddElectric = steadyDataVO.getOddElectric();
Float evenElectric = steadyDataVO.getEvenElectric();
if (getHarmElecValue(oddElectric, evenElectric) > 100) {
floatList.add(100f);
} else if (frequency == 3.1415f) {
floatList.add(3.1415f);
} else if (frequency == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(getHarmElecValue(oddElectric, evenElectric));
}
Float iNeg = steadyDataVO.getINeg();
if (iNeg > 100) {
floatList.add(100f);
} else if (frequency == 3.1415f) {
floatList.add(3.1415f);
} else if (frequency == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(BigDecimal.valueOf(iNeg).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
}
Float inUharm = steadyDataVO.getInUharm();
if (inUharm > 100) {
floatList.add(100f);
} else if (frequency == 3.1415f) {
floatList.add(3.1415f);
} else if (frequency == 3.14159f) {
floatList.add(3.14159f);
} else {
floatList.add(BigDecimal.valueOf(inUharm).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
}
return floatList;
}
private Float getHarmVoltageValue(Float uAberrance, Float evenVoltage, Float oddVoltage) {
float value = uAberrance + oddVoltage + evenVoltage;
value = value / 3;
return BigDecimal.valueOf(value).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
}
private Float getHarmElecValue(Float oddElectric, Float evenElectric) {
float value = oddElectric + evenElectric;
value = value / 2;
return BigDecimal.valueOf(value).setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
}
}

View File

@@ -0,0 +1,447 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.enums.LineBaseEnum;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.SteadyExceedRateMapper;
import com.njcn.harmonic.pojo.po.LimitRatePO;
import com.njcn.harmonic.pojo.vo.SteadyExceedRateCensusVO;
import com.njcn.harmonic.pojo.vo.SteadyExceedRateVO;
import com.njcn.harmonic.service.SteadyExceedRateService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* @version 1.0.0
* @author: chenchao
* @date: 2022/04/12 14:03
*/
@Service
@AllArgsConstructor
public class SteadyExceedRateServiceImpl implements SteadyExceedRateService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final SteadyExceedRateMapper steadyExceedRateMapper;
private final InfluxDbUtils influxDbUtils;
@Override
public List<SteadyExceedRateVO> getSteadyExceedRateData(DeviceInfoParam.BusinessParam steadyExceedParam) {
List<SteadyExceedRateVO> steadyExceedRateVOS = new ArrayList<>();
//按照条件获取实际运行终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(steadyExceedParam).getData();
for (GeneralDeviceDTO generalDeviceDTO: deviceDataList){
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
continue;
}
SteadyExceedRateVO steadyExceedRateVO = new SteadyExceedRateVO();
steadyExceedRateVO.setId(generalDeviceDTO.getIndex());
steadyExceedRateVO.setName(generalDeviceDTO.getName());
List<LimitRatePO> qualifiesRate = getQualifiesRate(lineIndexes, steadyExceedParam.getSearchBeginTime(), steadyExceedParam.getSearchEndTime());
SteadyExceedRateVO dataMoreMonitorMoreDay = getDataMoreMonitorMoreDay(qualifiesRate);
steadyExceedRateVO.setSteadyExceedRate(dataMoreMonitorMoreDay.getSteadyExceedRate());
//组装父级数据树
List<SteadyExceedRateVO> treeList = getTreeData(lineIndexes, steadyExceedParam);
steadyExceedRateVO.setChildren(treeList);
steadyExceedRateVOS.add(steadyExceedRateVO);
}
return steadyExceedRateVOS;
}
@Override
public SteadyExceedRateCensusVO getSteadyExceedRateCensus(DeviceInfoParam.ConditionBusinessParam steadyExceedCensusParam) {
SteadyExceedRateCensusVO steadyExceedRateCensusVO = new SteadyExceedRateCensusVO();
List<String> type = new ArrayList<>(), time = new ArrayList<>();
List<List<Double>> steadyExceedList = new ArrayList<>();
List<List<String>> tempIndex = new ArrayList<>();
//按照条件获取实际运行终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(steadyExceedCensusParam).getData();
if (!CollectionUtils.isEmpty(deviceDataList)) {
for (GeneralDeviceDTO generalDeviceDTO: deviceDataList) {
type.add(generalDeviceDTO.getName());
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
tempIndex.add(lineIndexes);
}
int timed = 0;
switch (steadyExceedCensusParam.getTimeFlag()) {
case 0:
time = getSteadyTimesByMouth(steadyExceedCensusParam.getSearchBeginTime(), steadyExceedCensusParam.getSearchEndTime());
timed = getSteadyByMouth(steadyExceedCensusParam.getSearchBeginTime(), steadyExceedCensusParam.getSearchEndTime());
for (int i =0; i<timed; i++) {
List<Double> steadyExceedRate = new ArrayList<>();
for (List<String> lineIndexes: tempIndex) {
if (!CollectionUtils.isEmpty(lineIndexes)) {
String beginTime = time.get(i)+"-01";
DateTime date = DateUtil.endOfMonth(new DateTime(beginTime));
String endTime = date.toString(DatePattern.NORM_DATE_PATTERN);
List<LimitRatePO> qualifiesRate = getQualifiesRate(lineIndexes, beginTime, endTime);
SteadyExceedRateVO dataMoreMonitorMoreDay = getDataMoreMonitorMoreDay(qualifiesRate);
steadyExceedRate.add(dataMoreMonitorMoreDay.getSteadyExceedRate());
} else {
steadyExceedRate.add(3.14159);
}
}
steadyExceedList.add(steadyExceedRate);
}
break;
case 1:
time = getSteadyTimesByDay(steadyExceedCensusParam.getSearchBeginTime(), steadyExceedCensusParam.getSearchEndTime());
timed = getSteadyByDay(steadyExceedCensusParam.getSearchBeginTime(), steadyExceedCensusParam.getSearchEndTime());
for (int i =0; i<timed; i++) {
List<Double> steadyExceedRate = new ArrayList<>();
for (List<String> lineIndexes: tempIndex) {
if (!CollectionUtils.isEmpty(lineIndexes)) {
List<LimitRatePO> qualifiesRate = getQualifiesRate(lineIndexes, steadyExceedCensusParam.getSearchBeginTime(), steadyExceedCensusParam.getSearchEndTime());
SteadyExceedRateVO dataMoreMonitorSingleDay = getDataMoreMonitorSingleDay(qualifiesRate, lineIndexes, time.get(i));
steadyExceedRate.add(dataMoreMonitorSingleDay.getSteadyExceedRate());
} else {
steadyExceedRate.add(3.14159);
}
}
steadyExceedList.add(steadyExceedRate);
}
break;
case 2:
time = getSteadyTimesByDay(steadyExceedCensusParam.getSearchBeginTime(), steadyExceedCensusParam.getSearchEndTime());
List<Double> steadyExceedRate = new ArrayList<>();
for (List<String> lineIndexes: tempIndex) {
if (!CollectionUtils.isEmpty(lineIndexes)) {
List<LimitRatePO> qualifiesRate = getQualifiesRate(lineIndexes, steadyExceedCensusParam.getSearchBeginTime(), steadyExceedCensusParam.getSearchEndTime());
SteadyExceedRateVO dataMoreMonitorSingleDay = getDataMoreMonitorSingleDay(qualifiesRate, lineIndexes, steadyExceedCensusParam.getSearchBeginTime());
steadyExceedRate.add(dataMoreMonitorSingleDay.getSteadyExceedRate());
} else {
steadyExceedRate.add(3.14159);
}
}
steadyExceedList.add(steadyExceedRate);
break;
}
}
steadyExceedRateCensusVO.setType(type);
steadyExceedRateCensusVO.setTime(time);
steadyExceedRateCensusVO.setSteadyExceedRate(steadyExceedList);
return steadyExceedRateCensusVO;
}
/** 根据时间范围返回相应单位的时间整数
*/
private int getSteadyByMouth(String searchBeginTime, String searchEndTime) {
int beginMouthTime = Integer.parseInt(searchBeginTime.substring(5, 7));
int endMouthTime = Integer.parseInt(searchEndTime.substring(5, 7));
int mouth = endMouthTime - beginMouthTime + 1;
return mouth;
}
private int getSteadyByDay(String searchBeginTime, String searchEndTime) {
int beginTime = Integer.parseInt(searchBeginTime.substring(8, 10));
int endTime = Integer.parseInt(searchEndTime.substring(8, 10));
int day = endTime - beginTime + 1;
return day;
}
/** 根据时间范围返回相应单位的时间格式字符串
*/
private List<String> getSteadyTimesByMouth(String searchBeginTime, String searchEndTime) {
List<String> string = new ArrayList<>();
int beginMouthTime = Integer.parseInt(searchBeginTime.substring(5, 7));
int endMouthTime = Integer.parseInt(searchEndTime.substring(5, 7));
for (int i =0; i<endMouthTime - beginMouthTime + 1; i++) {
int a =0;
if (beginMouthTime<9) {
a = beginMouthTime + i;
string.add(searchBeginTime.substring(0, 5)+"0"+a);
} else {
string.add(searchBeginTime.substring(0, 5)+a);
}
}
return string;
}
private List<String> getSteadyTimesByDay(String searchBeginTime, String searchEndTime) {
List<String> string = new ArrayList<>();
int beginTime = Integer.parseInt(searchBeginTime.substring(8, 10));
int endTime = Integer.parseInt(searchEndTime.substring(8, 10));
int a =0;
for (int i =0; i<endTime - beginTime + 1; i++) {
if (a<9) {
a = beginTime + i;
string.add(searchBeginTime.substring(0, 8)+"0"+a);
} else {
a = beginTime + i;
string.add(searchBeginTime.substring(0, 8)+a);
}
}
return string;
}
/**
* 获取父级每层数据
*/
private List<SteadyExceedRateVO> getTreeData(List<String> lineIndexes, DeviceInfoParam.BusinessParam steadyExceedParam) {
//监测点集合
List<SteadyExceedRateVO> monitorList = steadyExceedRateMapper.getSteadyExceedRateData(lineIndexes);
//母线集合
List<SteadyExceedRateVO> busBarList = steadyExceedRateMapper.getLineInfoByList(monitorList.stream().map(SteadyExceedRateVO::getPid).distinct().collect(Collectors.toList()));
//终端集合
List<SteadyExceedRateVO> deviceList = steadyExceedRateMapper.getLineInfoByList(busBarList.stream().map(SteadyExceedRateVO::getPid).distinct().collect(Collectors.toList()));
//变电站集合
List<SteadyExceedRateVO> substationList = steadyExceedRateMapper.getLineInfoByList(deviceList.stream().map(SteadyExceedRateVO::getPid).distinct().collect(Collectors.toList()));
//供电公司集合
List<SteadyExceedRateVO> powerCompanyList = steadyExceedRateMapper.getLineInfoByList(substationList.stream().map(SteadyExceedRateVO::getPid).distinct().collect(Collectors.toList()));
List<LimitRatePO> qualifiesRate = getQualifiesRate(lineIndexes, steadyExceedParam.getSearchBeginTime(), steadyExceedParam.getSearchEndTime());
monitorList.forEach(steadyExceedRateVO -> {
SteadyExceedRateVO dataSingleMonitorMoreDay = getDataSingleMonitorMoreDay(qualifiesRate, steadyExceedRateVO.getId());
steadyExceedRateVO.setSteadyExceedRate(dataSingleMonitorMoreDay.getSteadyExceedRate());
});
setChildesList(substationList,monitorList);
setFatherDistortion(substationList);
setSubstationData(substationList);
powerCompanyList.stream().peek(item -> item.setChildren(getChildCategoryList(item, substationList))).collect(Collectors.toList());
setFatherDistortion(powerCompanyList);
return powerCompanyList;
}
//查变电站信息
private void setSubstationData(List<SteadyExceedRateVO> substationList) {
List<String> ids = new ArrayList<>();
substationList.forEach(steadyExceedRateVO -> {
ids.add(steadyExceedRateVO.getId());
});
List<SteadyExceedRateVO> substation = steadyExceedRateMapper.getSubstationList(ids);
substationList.stream().map(list1 -> substation.stream().filter(list2 -> Objects.equals(list1.getId(), list2.getId())).findAny().map(m -> {
list1.setVoltageLevel(m.getVoltageLevel());
return list1;
})).collect(Collectors.toList());
}
/**
* 计算父级合格率
*/
private void setFatherDistortion(List<SteadyExceedRateVO> list) {
list.forEach(steadyExceedRateVO -> {
List<SteadyExceedRateVO> children = steadyExceedRateVO.getChildren();
List<SteadyExceedRateVO> flicker = children.stream().filter(child -> !Objects.equals(child.getSteadyExceedRate(), 3.14159)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(flicker)) {
steadyExceedRateVO.setSteadyExceedRate(NumberUtil.round(flicker.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(1.2345), 2).doubleValue());
}
});
}
/**
* 组装树层级
*/
private List<SteadyExceedRateVO> getChildCategoryList(SteadyExceedRateVO item, List<SteadyExceedRateVO> child) {
return child.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList());
}
private void setChildesList(List<SteadyExceedRateVO> item, List<SteadyExceedRateVO> childes) {
Map<String, List<SteadyExceedRateVO>> groupLine;
groupLine = childes.stream().collect(Collectors.groupingBy(steadyExceedRateVO -> {
String[] pid = steadyExceedRateVO.getPidS().split(",");
return pid[LineBaseEnum.SUB_LEVEL.getCode()];
}));
item.stream().peek(steadyExceedRateVO -> {
if (!CollectionUtils.isEmpty(groupLine.get(steadyExceedRateVO.getId()))) {
steadyExceedRateVO.setChildren(groupLine.get(steadyExceedRateVO.getId()));
}
}).collect(Collectors.toList());
}
/**
* 计算一个监测点日统计占比率
*/
public SteadyExceedRateVO getDataSingleMonitorSingeDay(List<LimitRatePO> qualifiesRate, String lineId, String time) {
SteadyExceedRateVO steadyExceedRateVO = new SteadyExceedRateVO();
LimitRatePO limitRatePO;
List<LimitRatePO> limitRatePOList = qualifiesRate.stream().filter(
temp -> temp.getLineId().equalsIgnoreCase(lineId) && temp.getDayStr().equalsIgnoreCase(time)
).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(limitRatePOList)) {
limitRatePO = limitRatePOList.get(0);
if ((limitRatePO.getFlickerOverTime()+ limitRatePO.getFreqDevOverTime()+ limitRatePO.getINegOverTime()+ limitRatePO.getUAberranceOverTime()+ limitRatePO.getUBalanceOverTime()+ limitRatePO.getVoltageDevOverTime()+ limitRatePO.getIHarm2OverTime()+ limitRatePO.getIHarm3OverTime()+ limitRatePO.getIHarm4OverTime()+ limitRatePO.getIHarm5OverTime()+ limitRatePO.getIHarm6OverTime()+ limitRatePO.getIHarm7OverTime()+ limitRatePO.getIHarm8OverTime()+ limitRatePO.getIHarm9OverTime()+ limitRatePO.getIHarm10OverTime()+ limitRatePO.getIHarm11OverTime()+ limitRatePO.getIHarm12OverTime()+ limitRatePO.getIHarm13OverTime()+ limitRatePO.getIHarm14OverTime()+ limitRatePO.getIHarm15OverTime()+ limitRatePO.getIHarm16OverTime()+ limitRatePO.getIHarm17OverTime()+ limitRatePO.getIHarm18OverTime()+ limitRatePO.getIHarm19OverTime()+ limitRatePO.getIHarm20OverTime()+ limitRatePO.getIHarm21OverTime()+ limitRatePO.getIHarm22OverTime()+ limitRatePO.getIHarm23OverTime()+ limitRatePO.getIHarm24OverTime()+ limitRatePO.getIHarm25OverTime()+ limitRatePO.getUHarm2OverTime()+ limitRatePO.getUHarm3OverTime()+ limitRatePO.getUHarm4OverTime()+ limitRatePO.getUHarm5OverTime()+ limitRatePO.getUHarm6OverTime()+ limitRatePO.getUHarm7OverTime()+ limitRatePO.getUHarm8OverTime()+ limitRatePO.getUHarm9OverTime()+ limitRatePO.getUHarm10OverTime()+ limitRatePO.getUHarm11OverTime()+ limitRatePO.getUHarm12OverTime()+ limitRatePO.getUHarm13OverTime()+ limitRatePO.getUHarm14OverTime()+ limitRatePO.getUHarm15OverTime()+ limitRatePO.getUHarm16OverTime()+ limitRatePO.getUHarm17OverTime()+ limitRatePO.getUHarm18OverTime()+ limitRatePO.getUHarm19OverTime()+ limitRatePO.getUHarm20OverTime()+ limitRatePO.getUHarm21OverTime()+ limitRatePO.getUHarm22OverTime()+ limitRatePO.getUHarm23OverTime()+ limitRatePO.getUHarm24OverTime()+ limitRatePO.getUHarm25OverTime()+ limitRatePO.getInUHARM1OverTime()+ limitRatePO.getInUHARM2OverTime()+ limitRatePO.getInUHARM3OverTime()+ limitRatePO.getInUHARM4OverTime()+ limitRatePO.getInUHARM5OverTime()+ limitRatePO.getInUHARM6OverTime()+ limitRatePO.getInUHARM7OverTime()+ limitRatePO.getInUHARM8OverTime()+ limitRatePO.getInUHARM9OverTime()+ limitRatePO.getInUHARM10OverTime()+ limitRatePO.getInUHARM11OverTime()+ limitRatePO.getInUHARM12OverTime()+ limitRatePO.getInUHARM13OverTime()+ limitRatePO.getInUHARM14OverTime()+ limitRatePO.getInUHARM15OverTime()+ limitRatePO.getInUHARM16OverTime()) > 0){
steadyExceedRateVO.setSteadyExceedRate(100.00);
} else { steadyExceedRateVO.setSteadyExceedRate(0.00); }
}
return steadyExceedRateVO;
}
/**
* 计算一个监测点月统计占比率
*/
public SteadyExceedRateVO getDataSingleMonitorMouth(List<LimitRatePO> qualifiesRate, String lineId, String time) {
SteadyExceedRateVO steadyExceedRateVO = new SteadyExceedRateVO();
LimitRatePO limitRatePO;
List<LimitRatePO> limitRatePOList = qualifiesRate.stream().filter(
temp -> temp.getLineId().equalsIgnoreCase(lineId) && temp.getMouthStr().equalsIgnoreCase(time)
).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(limitRatePOList)) {
limitRatePO = limitRatePOList.get(0);
if ((limitRatePO.getFlickerOverTime()+ limitRatePO.getFreqDevOverTime()+ limitRatePO.getINegOverTime()+ limitRatePO.getUAberranceOverTime()+ limitRatePO.getUBalanceOverTime()+ limitRatePO.getVoltageDevOverTime()+ limitRatePO.getIHarm2OverTime()+ limitRatePO.getIHarm3OverTime()+ limitRatePO.getIHarm4OverTime()+ limitRatePO.getIHarm5OverTime()+ limitRatePO.getIHarm6OverTime()+ limitRatePO.getIHarm7OverTime()+ limitRatePO.getIHarm8OverTime()+ limitRatePO.getIHarm9OverTime()+ limitRatePO.getIHarm10OverTime()+ limitRatePO.getIHarm11OverTime()+ limitRatePO.getIHarm12OverTime()+ limitRatePO.getIHarm13OverTime()+ limitRatePO.getIHarm14OverTime()+ limitRatePO.getIHarm15OverTime()+ limitRatePO.getIHarm16OverTime()+ limitRatePO.getIHarm17OverTime()+ limitRatePO.getIHarm18OverTime()+ limitRatePO.getIHarm19OverTime()+ limitRatePO.getIHarm20OverTime()+ limitRatePO.getIHarm21OverTime()+ limitRatePO.getIHarm22OverTime()+ limitRatePO.getIHarm23OverTime()+ limitRatePO.getIHarm24OverTime()+ limitRatePO.getIHarm25OverTime()+ limitRatePO.getUHarm2OverTime()+ limitRatePO.getUHarm3OverTime()+ limitRatePO.getUHarm4OverTime()+ limitRatePO.getUHarm5OverTime()+ limitRatePO.getUHarm6OverTime()+ limitRatePO.getUHarm7OverTime()+ limitRatePO.getUHarm8OverTime()+ limitRatePO.getUHarm9OverTime()+ limitRatePO.getUHarm10OverTime()+ limitRatePO.getUHarm11OverTime()+ limitRatePO.getUHarm12OverTime()+ limitRatePO.getUHarm13OverTime()+ limitRatePO.getUHarm14OverTime()+ limitRatePO.getUHarm15OverTime()+ limitRatePO.getUHarm16OverTime()+ limitRatePO.getUHarm17OverTime()+ limitRatePO.getUHarm18OverTime()+ limitRatePO.getUHarm19OverTime()+ limitRatePO.getUHarm20OverTime()+ limitRatePO.getUHarm21OverTime()+ limitRatePO.getUHarm22OverTime()+ limitRatePO.getUHarm23OverTime()+ limitRatePO.getUHarm24OverTime()+ limitRatePO.getUHarm25OverTime()+ limitRatePO.getInUHARM1OverTime()+ limitRatePO.getInUHARM2OverTime()+ limitRatePO.getInUHARM3OverTime()+ limitRatePO.getInUHARM4OverTime()+ limitRatePO.getInUHARM5OverTime()+ limitRatePO.getInUHARM6OverTime()+ limitRatePO.getInUHARM7OverTime()+ limitRatePO.getInUHARM8OverTime()+ limitRatePO.getInUHARM9OverTime()+ limitRatePO.getInUHARM10OverTime()+ limitRatePO.getInUHARM11OverTime()+ limitRatePO.getInUHARM12OverTime()+ limitRatePO.getInUHARM13OverTime()+ limitRatePO.getInUHARM14OverTime()+ limitRatePO.getInUHARM15OverTime()+ limitRatePO.getInUHARM16OverTime()) > 0){
steadyExceedRateVO.setSteadyExceedRate(100.00);
} else { steadyExceedRateVO.setSteadyExceedRate(0.00); }
}
return steadyExceedRateVO;
}
/**
* 监测点时间范围统计占比率
*/
public SteadyExceedRateVO getDataSingleMonitorMoreDay(List<LimitRatePO> qualifiesRate, String lineId) {
SteadyExceedRateVO steadyExceedRateVO = new SteadyExceedRateVO();
List<LimitRatePO> limitRatePOList;
List<SteadyExceedRateVO> steadyExceedRateVOS = new ArrayList<>();
//从数据里筛选出指定监测点的数据
limitRatePOList = qualifiesRate.stream().filter(
temp -> temp.getLineId().equalsIgnoreCase(lineId)).collect(Collectors.toList());
System.out.println("该监测点当天的信息为>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+limitRatePOList);
if (CollectionUtil.isNotEmpty(limitRatePOList)) {
Map<String, List<SteadyExceedRateVO>> timeMap;
//获取出时间和id获取日统计占比率
for (LimitRatePO po: limitRatePOList) {
SteadyExceedRateVO dataSingleMonitorSingeDay = getDataSingleMonitorSingeDay(qualifiesRate, lineId, po.getDayStr());
Double rate = dataSingleMonitorSingeDay.getSteadyExceedRate();
steadyExceedRateVO.setSteadyExceedRate(rate);
steadyExceedRateVOS.add(steadyExceedRateVO);
}
System.out.println("steadyExceedRateVOS>>>>>>>>>>>>>>>>>>>>>>>>>"+steadyExceedRateVOS);
//求时间范围的占比率平均值
steadyExceedRateVO.setSteadyExceedRate(NumberUtil.round(steadyExceedRateVOS.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0), 2).doubleValue());
}
return steadyExceedRateVO;
}
/**
* 计算区域监测点时间范围统计占比率
*/
public SteadyExceedRateVO getDataMoreMonitorMoreDay(List<LimitRatePO> qualifiesRate) {
SteadyExceedRateVO steadyExceedRateVO = new SteadyExceedRateVO();
List<SteadyExceedRateVO> steadyResults = new ArrayList<>();
//以时间分组的各项数据
Map<String, List<LimitRatePO>> groupByTimeData = qualifiesRate.stream().collect(Collectors.groupingBy(LimitRatePO::getDayStr));
if (CollectionUtil.isNotEmpty(groupByTimeData)) {
Set<String> times = groupByTimeData.keySet();
for (String time : times) {
List<String> ids = groupByTimeData.get(time).stream().map(LimitRatePO::getLineId).collect(Collectors.toList());
steadyResults.add(getDataMoreMonitorSingleDay(qualifiesRate, ids, time));
}
}
if (CollectionUtil.isNotEmpty(steadyResults)) {
//求区域监测点多天的平均值
steadyExceedRateVO.setSteadyExceedRate(
NumberUtil.round(steadyResults.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0), 2).doubleValue()
);
}
return steadyExceedRateVO;
}
/**
* 计算区域监测点日统计占比率
*/
public SteadyExceedRateVO getDataMoreMonitorSingleDay(List<LimitRatePO> qualifiesRate, List<String> lineIds, String time) {
SteadyExceedRateVO steadyExceedRateVO = new SteadyExceedRateVO();
List<SteadyExceedRateVO> steadyResults = new ArrayList<>();
for (String lineId : lineIds) {
steadyResults.add(getDataSingleMonitorSingeDay(qualifiesRate, lineId, time));
}
if (CollectionUtil.isNotEmpty(steadyResults)) {
//求多个监测点的平均值
steadyExceedRateVO.setSteadyExceedRate(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0), 2).doubleValue());
steadyExceedRateVO.setTime(time);
}
return steadyExceedRateVO;
}
/**
* 计算区域监测点月统计占比率
*/
public SteadyExceedRateVO getDataMoreMonitorMouth(List<LimitRatePO> qualifiesRate, List<String> lineIds, String time) {
SteadyExceedRateVO steadyExceedRateVO = new SteadyExceedRateVO();
List<SteadyExceedRateVO> steadyResults = new ArrayList<>();
for (String lineId : lineIds) {
steadyResults.add(getDataSingleMonitorMouth(qualifiesRate, lineId, time));
}
if (CollectionUtil.isNotEmpty(steadyResults)) {
//求多个监测点的平均值
steadyExceedRateVO.setSteadyExceedRate(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0), 2).doubleValue());
steadyExceedRateVO.setTime(time);
}
return steadyExceedRateVO;
}
/**
* influxDB查询稳态监测点相关信息
* @param lineIndexes
* @param startTime
* @param endTime
*/
private List<LimitRatePO> getQualifiesRate(List<String> lineIndexes, String startTime, String endTime) {
List<LimitRatePO> limitRatePOS = new ArrayList<>();
//组装sql语句
// StringBuilder string = new StringBuilder();
// string.append(Param.QualityFlag + "='1' and (" + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEA + "' or " + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEB + "' or " + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEC + "') and "+ Param.VALUETYPE + "='AVG' and ");
StringBuilder timeId = new StringBuilder();
timeId.append(Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPET + "' and " + Param.TIME + " >= '" + startTime + Param.START_TIME + "' and " + Param.TIME + " <= '" + endTime + Param.END_TIME + "' and ");
for (int i = 0; i < lineIndexes.size(); i++) {
if (lineIndexes.size() - i != 1) {
timeId.append(Param.MYINDEX + "='").append(lineIndexes.get(i)).append("' or ");
} else {
timeId.append(Param.MYINDEX + "='").append(lineIndexes.get(i)).append("' ");
}
}
String a = "SELECT * FROM LIMIT_RATE WHERE time >= '2021-01-01 00:00:00' and time <= '2022-04-30 23:59:59' and MYINDEX='71b900811d9a95811913776d6e725255' or MYINDEX='479bf4e228b5579629454ee99de0b950' or MYINDEX='1e3b8531483b2a8cbee6747f1f641cf9'";
//sql语句
String sql = "SELECT * FROM LIMIT_RATE WHERE " + timeId;
//结果集
QueryResult result = influxDbUtils.query(sql);
//结果集映射到对象中
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
limitRatePOS = resultMapper.toPOJO(result, LimitRatePO.class);
//将时间处理为年月日的字符串
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
limitRatePOS.forEach(item->{
Instant instant = item.getTime();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
String dateStr = dateTimeFormatter.format(localDateTime);
String monthStr = monthFormatter.format(localDateTime);
item.setDayStr(dateStr);
item.setMouthStr(monthStr);
});
return limitRatePOS;
}
}

View File

@@ -0,0 +1,454 @@
package com.njcn.harmonic.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.NumberUtil;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.enums.LineBaseEnum;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.SteadyQualifyMapper;
import com.njcn.harmonic.pojo.dto.SteadyQualifyDTO;
import com.njcn.harmonic.pojo.vo.SteadyQualifyCensusVO;
import com.njcn.harmonic.pojo.vo.SteadyQualifyVO;
import com.njcn.harmonic.service.SteadyQualifyService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author: chenchao
* @date: 2022/04/01 16:10
* @Description: <描述>
*/
@Service
@AllArgsConstructor
public class SteadyQualifyServiceImpl implements SteadyQualifyService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final SteadyQualifyMapper steadyQualifyMapper;
private final InfluxDbUtils influxDbUtils;
@Override
public List<SteadyQualifyVO> getSteadyQualifyData(DeviceInfoParam.BusinessParam steadyParam) {
List<SteadyQualifyVO> steadyQualifyList = new ArrayList<>();
//按照条件获取实际运行终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(steadyParam).getData();
//组装监测点Top层集合
for (GeneralDeviceDTO generalDeviceDTO: deviceDataList) {
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
continue;
}
SteadyQualifyVO steadyQualifyVO = new SteadyQualifyVO();
steadyQualifyVO.setId(generalDeviceDTO.getIndex());
steadyQualifyVO.setName(generalDeviceDTO.getName());
// List<SteadyQualifyVO> lineData = steadyQualifyMapper.getSteadyQualifyData(lineIndexes);
List<SteadyQualifyDTO> qualifiesRate = getQualifiesRate(lineIndexes, steadyParam.getSearchBeginTime(), steadyParam.getSearchEndTime());
SteadyQualifyVO dataMoreMonitorMoreDay = getDataMoreMonitorMoreDay(qualifiesRate);
steadyQualifyVO.setFlicker(dataMoreMonitorMoreDay.getFlicker());
steadyQualifyVO.setFreqOffset(dataMoreMonitorMoreDay.getFreqOffset());
steadyQualifyVO.setVoltageOffset(dataMoreMonitorMoreDay.getVoltageOffset());
steadyQualifyVO.setVoltageUnbalance(dataMoreMonitorMoreDay.getVoltageUnbalance());
steadyQualifyVO.setNegativeCurrent(dataMoreMonitorMoreDay.getNegativeCurrent());
steadyQualifyVO.setHarmonicVoltage(dataMoreMonitorMoreDay.getHarmonicVoltage());
steadyQualifyVO.setHarmonicCurrent(dataMoreMonitorMoreDay.getHarmonicCurrent());
steadyQualifyVO.setInterHarmonic(dataMoreMonitorMoreDay.getInterHarmonic());
//组装父级数据树
List<SteadyQualifyVO> treeList = getTreeData(lineIndexes, steadyParam);
steadyQualifyVO.setChildren(treeList);
steadyQualifyList.add(steadyQualifyVO);
}
return steadyQualifyList;
}
@Override
public SteadyQualifyCensusVO getSteadyQualifyCensus(DeviceInfoParam.BusinessParam steadyCensusParam) {
SteadyQualifyCensusVO steadyQualifyCensusVO = new SteadyQualifyCensusVO();
List<String> type = new ArrayList<>();
//按照条件获取实际运行终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(steadyCensusParam).getData();
List<Double> harmonicVoltage = new ArrayList<>(), voltageOffset = new ArrayList<>(),
VoltageUnbalance = new ArrayList<>(), interHarmonic = new ArrayList<>(),
harmonicCurrent = new ArrayList<>(), negativeCurrent = new ArrayList<>(),
freqOffset = new ArrayList<>(), flicker = new ArrayList<>();
if (!CollectionUtils.isEmpty(deviceDataList)) {
for (GeneralDeviceDTO generalDeviceDTO: deviceDataList){
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
continue;
}
type.add(generalDeviceDTO.getName());
List<SteadyQualifyDTO> qualifiesRate = getQualifiesRate(lineIndexes, steadyCensusParam.getSearchBeginTime(), steadyCensusParam.getSearchEndTime());
SteadyQualifyVO dataMoreMonitorMoreDay = getDataMoreMonitorMoreDay(qualifiesRate);
harmonicVoltage.add(dataMoreMonitorMoreDay.getHarmonicVoltage());
voltageOffset.add(dataMoreMonitorMoreDay.getVoltageOffset());
VoltageUnbalance.add(dataMoreMonitorMoreDay.getVoltageUnbalance());
interHarmonic.add(dataMoreMonitorMoreDay.getInterHarmonic());
harmonicCurrent.add(dataMoreMonitorMoreDay.getHarmonicCurrent());
negativeCurrent.add(dataMoreMonitorMoreDay.getNegativeCurrent());
freqOffset.add(dataMoreMonitorMoreDay.getFreqOffset());
flicker.add(dataMoreMonitorMoreDay.getFlicker());
}
}
steadyQualifyCensusVO.setHarmonicVoltage(harmonicVoltage);
steadyQualifyCensusVO.setVoltageOffset(voltageOffset);
steadyQualifyCensusVO.setVoltageUnbalance(VoltageUnbalance);
steadyQualifyCensusVO.setInterHarmonic(interHarmonic);
steadyQualifyCensusVO.setHarmonicCurrent(harmonicCurrent);
steadyQualifyCensusVO.setNegativeCurrent(negativeCurrent);
steadyQualifyCensusVO.setFreqOffset(freqOffset);
steadyQualifyCensusVO.setFlicker(flicker);
steadyQualifyCensusVO.setType(type);
return steadyQualifyCensusVO;
}
/**
* 获取父级每层数据
*/
private List<SteadyQualifyVO> getTreeData(List<String> lineIndexes, DeviceInfoParam.BusinessParam steadyParam) {
//监测点集合
List<SteadyQualifyVO> monitorList = steadyQualifyMapper.getSteadyQualifyData(lineIndexes);
//母线集合
List<SteadyQualifyVO> busBarList = steadyQualifyMapper.getLineInfoByList(monitorList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
//终端集合
List<SteadyQualifyVO> deviceList = steadyQualifyMapper.getLineInfoByList(busBarList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
//变电站集合
List<SteadyQualifyVO> substationList = steadyQualifyMapper.getLineInfoByList(deviceList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
//供电公司集合
List<SteadyQualifyVO> powerCompanyList = steadyQualifyMapper.getLineInfoByList(substationList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList()));
List<SteadyQualifyDTO> qualifiesRate = getQualifiesRate(lineIndexes, steadyParam.getSearchBeginTime(), steadyParam.getSearchEndTime());
monitorList.forEach(steadyQualifyVO -> {
SteadyQualifyVO dataSingleMonitorMoreDay = getDataSingleMonitorMoreDay(qualifiesRate, steadyQualifyVO.getId());
steadyQualifyVO.setFlicker(dataSingleMonitorMoreDay.getFlicker());
steadyQualifyVO.setFreqOffset(dataSingleMonitorMoreDay.getFreqOffset());
steadyQualifyVO.setVoltageOffset(dataSingleMonitorMoreDay.getVoltageOffset());
steadyQualifyVO.setVoltageUnbalance(dataSingleMonitorMoreDay.getVoltageUnbalance());
steadyQualifyVO.setNegativeCurrent(dataSingleMonitorMoreDay.getNegativeCurrent());
steadyQualifyVO.setHarmonicVoltage(dataSingleMonitorMoreDay.getHarmonicVoltage());
steadyQualifyVO.setHarmonicCurrent(dataSingleMonitorMoreDay.getHarmonicCurrent());
steadyQualifyVO.setInterHarmonic(dataSingleMonitorMoreDay.getInterHarmonic());
});
setChildesList(substationList,monitorList);
setFatherDistortion(substationList);
powerCompanyList.stream().peek(item -> item.setChildren(getChildCategoryList(item, substationList))).collect(Collectors.toList());
setFatherDistortion(powerCompanyList);
return powerCompanyList;
}
/**
* 计算父级合格率
*/
private void setFatherDistortion(List<SteadyQualifyVO> list) {
list.forEach(steadyQualifyVO -> {
List<SteadyQualifyVO> children = steadyQualifyVO.getChildren();
List<SteadyQualifyVO> flicker = children.stream().filter(child -> !Objects.equals(child.getFlicker(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> freqOffset = children.stream().filter(child -> !Objects.equals(child.getFreqOffset(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> voltageOffset = children.stream().filter(child -> !Objects.equals(child.getVoltageOffset(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> voltageUnbalance = children.stream().filter(child -> !Objects.equals(child.getVoltageUnbalance(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> negativeCurrent = children.stream().filter(child -> !Objects.equals(child.getNegativeCurrent(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> harmonicVoltage = children.stream().filter(child -> !Objects.equals(child.getHarmonicVoltage(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> harmonicCurrent = children.stream().filter(child -> !Objects.equals(child.getHarmonicCurrent(), 3.14159)).collect(Collectors.toList());
List<SteadyQualifyVO> InterHarmonic = children.stream().filter(child -> !Objects.equals(child.getInterHarmonic(), 3.14159)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(flicker)) {
steadyQualifyVO.setFlicker(NumberUtil.round(flicker.stream().mapToDouble(SteadyQualifyVO::getFlicker).average().orElse(100), 2).doubleValue());
}
if (!CollectionUtils.isEmpty(freqOffset)) {
steadyQualifyVO.setFreqOffset(NumberUtil.round(freqOffset.stream().mapToDouble(SteadyQualifyVO::getFreqOffset).average().orElse(100), 2).doubleValue());
}
if (!CollectionUtils.isEmpty(voltageOffset)) {
steadyQualifyVO.setVoltageOffset(NumberUtil.round(voltageOffset.stream().mapToDouble(SteadyQualifyVO::getVoltageOffset).average().orElse(100), 2).doubleValue());
}
if (!CollectionUtils.isEmpty(voltageUnbalance)) {
steadyQualifyVO.setVoltageUnbalance(NumberUtil.round(voltageUnbalance.stream().mapToDouble(SteadyQualifyVO::getVoltageUnbalance).average().orElse(100), 2).doubleValue());
}
if (!CollectionUtils.isEmpty(negativeCurrent)) {
steadyQualifyVO.setNegativeCurrent(NumberUtil.round(negativeCurrent.stream().mapToDouble(SteadyQualifyVO::getNegativeCurrent).average().orElse(100), 2).doubleValue());
}
if (!CollectionUtils.isEmpty(harmonicVoltage)) {
steadyQualifyVO.setHarmonicVoltage(NumberUtil.round(harmonicVoltage.stream().mapToDouble(SteadyQualifyVO::getHarmonicVoltage).average().orElse(100), 2).doubleValue());
}
if (!CollectionUtils.isEmpty(harmonicCurrent)) {
steadyQualifyVO.setHarmonicCurrent(NumberUtil.round(harmonicCurrent.stream().mapToDouble(SteadyQualifyVO::getHarmonicCurrent).average().orElse(100), 2).doubleValue());
}
if (!CollectionUtils.isEmpty(InterHarmonic)) {
steadyQualifyVO.setInterHarmonic(NumberUtil.round(InterHarmonic.stream().mapToDouble(SteadyQualifyVO::getInterHarmonic).average().orElse(100), 2).doubleValue());
}
});
}
/**
* 组装树层级
*/
private List<SteadyQualifyVO> getChildCategoryList(SteadyQualifyVO item, List<SteadyQualifyVO> child) {
return child.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList());
}
private void setChildesList(List<SteadyQualifyVO> item, List<SteadyQualifyVO> childes) {
Map<String, List<SteadyQualifyVO>> groupLine;
groupLine = childes.stream().collect(Collectors.groupingBy(steadyQualifyVO -> {
String[] pid = steadyQualifyVO.getPidS().split(",");
return pid[LineBaseEnum.SUB_LEVEL.getCode()];
}));
item.stream().peek(steadyQualifyVO -> {
if (!CollectionUtils.isEmpty(groupLine.get(steadyQualifyVO.getId()))) {
steadyQualifyVO.setChildren(groupLine.get(steadyQualifyVO.getId()));
}
}).collect(Collectors.toList());
}
/**
* 计算监测点日统计合格率
*/
public SteadyQualifyVO getDataSingleMonitorSingeDay(List<SteadyQualifyDTO> qualifiesRate, String lineId, String time) {
SteadyQualifyVO steadyQualifyVO = new SteadyQualifyVO();
List<SteadyQualifyDTO> steadyQualifyDTOList = qualifiesRate.stream().filter(
temp -> temp.getMYINDEX().equalsIgnoreCase(lineId) && temp.getTime().equalsIgnoreCase(time)
).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(steadyQualifyDTOList)) {
SteadyQualifyDTO steadyQualifyDTO = steadyQualifyDTOList.get(0);
//闪变合格率
steadyQualifyVO.setFlicker(calculate(steadyQualifyDTO.getFlicker_AllTime(), steadyQualifyDTO.getFlicker_OverTime()));
//频率偏差合格率
steadyQualifyVO.setFreqOffset(calculate(steadyQualifyDTO.getAllTime(), steadyQualifyDTO.getFreq_Dev_OverTime()));
//计算电压偏差
steadyQualifyVO.setVoltageOffset(calculate(steadyQualifyDTO.getAllTime(), steadyQualifyDTO.getVoltage_Dev_OverTime()));
//相电压不平衡度
steadyQualifyVO.setVoltageUnbalance(calculate(steadyQualifyDTO.getAllTime(), steadyQualifyDTO.getUBalance_OverTime()));
//负序电流
steadyQualifyVO.setNegativeCurrent(calculate(steadyQualifyDTO.getAllTime(), steadyQualifyDTO.getI_Neg_OverTime()));
//谐波电压
steadyQualifyVO.setHarmonicVoltage(calculate(steadyQualifyDTO.getAllTime(), NumberUtil.max(steadyQualifyDTO.getUAberrance_OverTime(), steadyQualifyDTO.getUHarm_2_OverTime(), steadyQualifyDTO.getUHarm_3_OverTime(), steadyQualifyDTO.getUHarm_4_OverTime(), steadyQualifyDTO.getUHarm_5_OverTime(), steadyQualifyDTO.getUHarm_6_OverTime(), steadyQualifyDTO.getUHarm_7_OverTime(), steadyQualifyDTO.getUHarm_8_OverTime(), steadyQualifyDTO.getUHarm_9_OverTime(), steadyQualifyDTO.getUHarm_10_OverTime(), steadyQualifyDTO.getUHarm_11_OverTime(), steadyQualifyDTO.getUHarm_12_OverTime(), steadyQualifyDTO.getUHarm_13_OverTime(), steadyQualifyDTO.getUHarm_14_OverTime(), steadyQualifyDTO.getUHarm_15_OverTime(), steadyQualifyDTO.getUHarm_16_OverTime(), steadyQualifyDTO.getUHarm_17_OverTime(), steadyQualifyDTO.getUHarm_18_OverTime(), steadyQualifyDTO.getUHarm_19_OverTime(), steadyQualifyDTO.getUHarm_20_OverTime(), steadyQualifyDTO.getUHarm_21_OverTime(), steadyQualifyDTO.getUHarm_22_OverTime(), steadyQualifyDTO.getUHarm_23_OverTime(), steadyQualifyDTO.getUHarm_24_OverTime(), steadyQualifyDTO.getUHarm_25_OverTime())));
//谐波电流
steadyQualifyVO.setHarmonicCurrent(calculate(steadyQualifyDTO.getAllTime(), NumberUtil.max(steadyQualifyDTO.getIHarm_2_OverTime(), steadyQualifyDTO.getIHarm_3_OverTime(), steadyQualifyDTO.getIHarm_4_OverTime(), steadyQualifyDTO.getIHarm_5_OverTime(), steadyQualifyDTO.getIHarm_6_OverTime(), steadyQualifyDTO.getIHarm_7_OverTime(), steadyQualifyDTO.getIHarm_8_OverTime(), steadyQualifyDTO.getIHarm_9_OverTime(), steadyQualifyDTO.getIHarm_10_OverTime(), steadyQualifyDTO.getIHarm_11_OverTime(), steadyQualifyDTO.getIHarm_12_OverTime(), steadyQualifyDTO.getIHarm_13_OverTime(), steadyQualifyDTO.getIHarm_14_OverTime(), steadyQualifyDTO.getIHarm_15_OverTime(), steadyQualifyDTO.getIHarm_16_OverTime(), steadyQualifyDTO.getIHarm_17_OverTime(), steadyQualifyDTO.getIHarm_18_OverTime(), steadyQualifyDTO.getIHarm_19_OverTime(), steadyQualifyDTO.getIHarm_20_OverTime(), steadyQualifyDTO.getIHarm_21_OverTime(), steadyQualifyDTO.getIHarm_22_OverTime(), steadyQualifyDTO.getIHarm_23_OverTime(), steadyQualifyDTO.getIHarm_24_OverTime(), steadyQualifyDTO.getIHarm_25_OverTime())));
//间谐波电压含有率
steadyQualifyVO.setInterHarmonic(calculate(steadyQualifyDTO.getAllTime(), NumberUtil.max(steadyQualifyDTO.getInUHARM_1_OverTime(), steadyQualifyDTO.getInUHARM_2_OverTime(), steadyQualifyDTO.getInUHARM_3_OverTime(), steadyQualifyDTO.getInUHARM_4_OverTime(), steadyQualifyDTO.getInUHARM_5_OverTime(), steadyQualifyDTO.getInUHARM_6_OverTime(), steadyQualifyDTO.getInUHARM_7_OverTime(), steadyQualifyDTO.getInUHARM_8_OverTime(), steadyQualifyDTO.getInUHARM_9_OverTime(), steadyQualifyDTO.getInUHARM_10_OverTime(), steadyQualifyDTO.getInUHARM_11_OverTime(), steadyQualifyDTO.getInUHARM_12_OverTime(), steadyQualifyDTO.getInUHARM_13_OverTime(), steadyQualifyDTO.getInUHARM_14_OverTime(), steadyQualifyDTO.getInUHARM_15_OverTime(), steadyQualifyDTO.getInUHARM_16_OverTime())));
}
return steadyQualifyVO;
}
/**
* 监测点时间范围统计合格率
*/
public SteadyQualifyVO getDataSingleMonitorMoreDay(List<SteadyQualifyDTO> qualifiesRate, String lineId) {
SteadyQualifyVO steadyQualifyVO = new SteadyQualifyVO();
//从数据里筛选出指定监测点的数据
List<SteadyQualifyDTO> steadyQualifyDTOList = qualifiesRate.stream().filter(
temp -> temp.getMYINDEX().equalsIgnoreCase(lineId)).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(steadyQualifyDTOList)) {
List<SteadyQualifyVO> steadyQualifyVOS = new ArrayList<>();
//获取出时间和id调用第一个方法
for (SteadyQualifyDTO steadyQualifyDTO : steadyQualifyDTOList) {
steadyQualifyVOS.add(getDataSingleMonitorSingeDay(qualifiesRate, lineId, steadyQualifyDTO.getTime()));
}
//求各项平均值
steadyQualifyVO.setFlicker(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getFlicker).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setFreqOffset(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getFreqOffset).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setVoltageOffset(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getVoltageOffset).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setVoltageUnbalance(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getVoltageUnbalance).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setNegativeCurrent(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getNegativeCurrent).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setHarmonicVoltage(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getHarmonicVoltage).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setHarmonicCurrent(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getHarmonicCurrent).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setInterHarmonic(NumberUtil.round(steadyQualifyVOS.stream().mapToDouble(SteadyQualifyVO::getInterHarmonic).average().orElse(100), 2).doubleValue());
}
return steadyQualifyVO;
}
/**
* 计算区域监测点时间范围统计合格率
*/
public SteadyQualifyVO getDataMoreMonitorMoreDay(List<SteadyQualifyDTO> qualifiesRate) {
SteadyQualifyVO steadyQualifyVO = new SteadyQualifyVO();
List<SteadyQualifyVO> steadyResults = new ArrayList<>();
//以时间分组的各项数据
Map<String, List<SteadyQualifyDTO>> groupByTimeData = qualifiesRate.stream().collect(Collectors.groupingBy(SteadyQualifyDTO::getTime));
if (CollectionUtil.isNotEmpty(groupByTimeData)) {
Set<String> times = groupByTimeData.keySet();
for (String time : times) {
List<String> ids = groupByTimeData.get(time).stream().map(SteadyQualifyDTO::getMYINDEX).collect(Collectors.toList());
steadyResults.add(getDataMoreMonitorSingleDay(qualifiesRate, ids, time));
}
}
if (CollectionUtil.isNotEmpty(steadyResults)) {
//求各项平均值
steadyQualifyVO.setFlicker(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getFlicker).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setFreqOffset(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getFreqOffset).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setVoltageOffset(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getVoltageOffset).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setVoltageUnbalance(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getVoltageUnbalance).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setNegativeCurrent(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getNegativeCurrent).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setHarmonicVoltage(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getHarmonicVoltage).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setHarmonicCurrent(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getHarmonicCurrent).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setInterHarmonic(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getInterHarmonic).average().orElse(100), 2).doubleValue());
}
return steadyQualifyVO;
}
/**
* 计算区域监测点日统计合格率
*/
public SteadyQualifyVO getDataMoreMonitorSingleDay(List<SteadyQualifyDTO> qualifiesRate, List<String> lineIds, String time) {
SteadyQualifyVO steadyQualifyVO = new SteadyQualifyVO();
List<SteadyQualifyVO> steadyResults = new ArrayList<>();
for (String lineId : lineIds) {
steadyResults.add(getDataSingleMonitorSingeDay(qualifiesRate, lineId, time));
}
if (CollectionUtil.isNotEmpty(steadyResults)) {
//求各项平均值
steadyQualifyVO.setFlicker(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getFlicker).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setFreqOffset(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getFreqOffset).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setVoltageOffset(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getVoltageOffset).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setVoltageUnbalance(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getVoltageUnbalance).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setNegativeCurrent(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getNegativeCurrent).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setHarmonicVoltage(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getHarmonicVoltage).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setHarmonicCurrent(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getHarmonicCurrent).average().orElse(100), 2).doubleValue());
steadyQualifyVO.setInterHarmonic(NumberUtil.round(steadyResults.stream().mapToDouble(SteadyQualifyVO::getInterHarmonic).average().orElse(100), 2).doubleValue());
}
return steadyQualifyVO;
}
/**
* influxDB查询稳态监测点相关信息
* @param lineIndexes
* @param startTime
* @param endTime
*/
private List<SteadyQualifyDTO> getQualifiesRate(List<String> lineIndexes, String startTime, String endTime) {
List<SteadyQualifyDTO> qualifyDTOList = new ArrayList<>();
//组装sql语句
// StringBuilder string = new StringBuilder();
// string.append(Param.QualityFlag + "='1' and (" + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEA + "' or " + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEB + "' or " + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEC + "') and "+ Param.VALUETYPE + "='AVG' and ");
StringBuilder timeId = new StringBuilder();
timeId.append(Param.TIME + " >= '" + startTime + Param.START_TIME + "' and " + Param.TIME + " <= '" + endTime + Param.END_TIME + "' and ");
for (int i = 0; i < lineIndexes.size(); i++) {
if (lineIndexes.size() - i != 1) {
timeId.append(Param.MYINDEX + "='").append(lineIndexes.get(i)).append("' or ");
} else {
timeId.append(Param.MYINDEX + "='").append(lineIndexes.get(i)).append("' ");
}
}
String a = "SELECT * FROM LIMIT_RATE WHERE time >= '2021-01-01 00:00:00' and time <= '2022-04-30 23:59:59' and MYINDEX='bffe97ff541333448358b7b00ed97cdb' or MYINDEX='479bf4e228b5579629454ee99de0b950' or MYINDEX='1e3b8531483b2a8cbee6747f1f641cf9'";
//sql语句
String sql = "SELECT * FROM LIMIT_RATE WHERE " + timeId;
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
if (!CollectionUtils.isEmpty(result.getResults().get(0).getSeries())) {
List<List<Object>> values = result.getResults().get(0).getSeries().get(0).getValues();
values.forEach(list ->{
SteadyQualifyDTO steadyQualifyDTO = new SteadyQualifyDTO();
steadyQualifyDTO.setTime(list.get(0).toString());
steadyQualifyDTO.setMYINDEX(list.get(46).toString());
steadyQualifyDTO.setPhasic_Type(list.get(47).toString());
steadyQualifyDTO.setAllTime(Double.parseDouble(list.get(1).toString()));
steadyQualifyDTO.setFlicker_AllTime(Double.parseDouble(list.get(2).toString()));
steadyQualifyDTO.setFlicker_OverTime(Double.parseDouble(list.get(3).toString()));
steadyQualifyDTO.setFreq_Dev_OverTime(Double.parseDouble(list.get(4).toString()));
steadyQualifyDTO.setIHarm_10_OverTime(Double.parseDouble(list.get(5).toString()));
steadyQualifyDTO.setIHarm_11_OverTime(Double.parseDouble(list.get(6).toString()));
steadyQualifyDTO.setIHarm_12_OverTime(Double.parseDouble(list.get(7).toString()));
steadyQualifyDTO.setIHarm_13_OverTime(Double.parseDouble(list.get(8).toString()));
steadyQualifyDTO.setIHarm_14_OverTime(Double.parseDouble(list.get(9).toString()));
steadyQualifyDTO.setIHarm_15_OverTime(Double.parseDouble(list.get(10).toString()));
steadyQualifyDTO.setIHarm_16_OverTime(Double.parseDouble(list.get(11).toString()));
steadyQualifyDTO.setIHarm_17_OverTime(Double.parseDouble(list.get(12).toString()));
steadyQualifyDTO.setIHarm_18_OverTime(Double.parseDouble(list.get(13).toString()));
steadyQualifyDTO.setIHarm_19_OverTime(Double.parseDouble(list.get(14).toString()));
steadyQualifyDTO.setIHarm_20_OverTime(Double.parseDouble(list.get(15).toString()));
steadyQualifyDTO.setIHarm_21_OverTime(Double.parseDouble(list.get(16).toString()));
steadyQualifyDTO.setIHarm_22_OverTime(Double.parseDouble(list.get(17).toString()));
steadyQualifyDTO.setIHarm_23_OverTime(Double.parseDouble(list.get(18).toString()));
steadyQualifyDTO.setIHarm_24_OverTime(Double.parseDouble(list.get(19).toString()));
steadyQualifyDTO.setIHarm_25_OverTime(Double.parseDouble(list.get(20).toString()));
steadyQualifyDTO.setIHarm_2_OverTime(Double.parseDouble(list.get(21).toString()));
steadyQualifyDTO.setIHarm_3_OverTime(Double.parseDouble(list.get(22).toString()));
steadyQualifyDTO.setIHarm_4_OverTime(Double.parseDouble(list.get(23).toString()));
steadyQualifyDTO.setIHarm_5_OverTime(Double.parseDouble(list.get(24).toString()));
steadyQualifyDTO.setIHarm_6_OverTime(Double.parseDouble(list.get(25).toString()));
steadyQualifyDTO.setIHarm_7_OverTime(Double.parseDouble(list.get(26).toString()));
steadyQualifyDTO.setIHarm_8_OverTime(Double.parseDouble(list.get(27).toString()));
steadyQualifyDTO.setIHarm_9_OverTime(Double.parseDouble(list.get(28).toString()));
steadyQualifyDTO.setI_Neg_OverTime(Double.parseDouble(list.get(29).toString()));
steadyQualifyDTO.setInUHARM_10_OverTime(Double.parseDouble(list.get(30).toString()));
steadyQualifyDTO.setInUHARM_11_OverTime(Double.parseDouble(list.get(31).toString()));
steadyQualifyDTO.setInUHARM_12_OverTime(Double.parseDouble(list.get(32).toString()));
steadyQualifyDTO.setInUHARM_13_OverTime(Double.parseDouble(list.get(33).toString()));
steadyQualifyDTO.setInUHARM_14_OverTime(Double.parseDouble(list.get(34).toString()));
steadyQualifyDTO.setInUHARM_15_OverTime(Double.parseDouble(list.get(35).toString()));
steadyQualifyDTO.setInUHARM_16_OverTime(Double.parseDouble(list.get(36).toString()));
steadyQualifyDTO.setInUHARM_1_OverTime(Double.parseDouble(list.get(37).toString()));
steadyQualifyDTO.setInUHARM_2_OverTime(Double.parseDouble(list.get(38).toString()));
steadyQualifyDTO.setInUHARM_3_OverTime(Double.parseDouble(list.get(39).toString()));
steadyQualifyDTO.setInUHARM_4_OverTime(Double.parseDouble(list.get(40).toString()));
steadyQualifyDTO.setInUHARM_5_OverTime(Double.parseDouble(list.get(41).toString()));
steadyQualifyDTO.setInUHARM_6_OverTime(Double.parseDouble(list.get(42).toString()));
steadyQualifyDTO.setInUHARM_7_OverTime(Double.parseDouble(list.get(43).toString()));
steadyQualifyDTO.setInUHARM_8_OverTime(Double.parseDouble(list.get(44).toString()));
steadyQualifyDTO.setInUHARM_9_OverTime(Double.parseDouble(list.get(45).toString()));
steadyQualifyDTO.setUAberrance_OverTime(Double.parseDouble(list.get(48).toString()));
steadyQualifyDTO.setUBalance_OverTime(Double.parseDouble(list.get(49).toString()));
steadyQualifyDTO.setUHarm_10_OverTime(Double.parseDouble(list.get(50).toString()));
steadyQualifyDTO.setUHarm_11_OverTime(Double.parseDouble(list.get(51).toString()));
steadyQualifyDTO.setUHarm_12_OverTime(Double.parseDouble(list.get(52).toString()));
steadyQualifyDTO.setUHarm_13_OverTime(Double.parseDouble(list.get(53).toString()));
steadyQualifyDTO.setUHarm_14_OverTime(Double.parseDouble(list.get(54).toString()));
steadyQualifyDTO.setUHarm_15_OverTime(Double.parseDouble(list.get(55).toString()));
steadyQualifyDTO.setUHarm_16_OverTime(Double.parseDouble(list.get(56).toString()));
steadyQualifyDTO.setUHarm_17_OverTime(Double.parseDouble(list.get(57).toString()));
steadyQualifyDTO.setUHarm_18_OverTime(Double.parseDouble(list.get(58).toString()));
steadyQualifyDTO.setUHarm_19_OverTime(Double.parseDouble(list.get(59).toString()));
steadyQualifyDTO.setUHarm_20_OverTime(Double.parseDouble(list.get(60).toString()));
steadyQualifyDTO.setUHarm_21_OverTime(Double.parseDouble(list.get(61).toString()));
steadyQualifyDTO.setUHarm_22_OverTime(Double.parseDouble(list.get(62).toString()));
steadyQualifyDTO.setUHarm_23_OverTime(Double.parseDouble(list.get(63).toString()));
steadyQualifyDTO.setUHarm_24_OverTime(Double.parseDouble(list.get(64).toString()));
steadyQualifyDTO.setUHarm_25_OverTime(Double.parseDouble(list.get(65).toString()));
steadyQualifyDTO.setUHarm_2_OverTime(Double.parseDouble(list.get(66).toString()));
steadyQualifyDTO.setUHarm_3_OverTime(Double.parseDouble(list.get(67).toString()));
steadyQualifyDTO.setUHarm_4_OverTime(Double.parseDouble(list.get(68).toString()));
steadyQualifyDTO.setUHarm_5_OverTime(Double.parseDouble(list.get(69).toString()));
steadyQualifyDTO.setUHarm_6_OverTime(Double.parseDouble(list.get(70).toString()));
steadyQualifyDTO.setUHarm_7_OverTime(Double.parseDouble(list.get(71).toString()));
steadyQualifyDTO.setUHarm_8_OverTime(Double.parseDouble(list.get(72).toString()));
steadyQualifyDTO.setUHarm_9_OverTime(Double.parseDouble(list.get(73).toString()));
steadyQualifyDTO.setVoltage_Dev_OverTime(Double.parseDouble(list.get(74).toString()));
// steadyQualifyDTO.setTime(time);
// if (!CollectionUtils.isEmpty(valueList)){
// for (List<Object> value : valueList) {
// String time = value.get(0).toString();
// double v = Double.parseDouble(value.get(1).toString());
// value.get(2);
// value.get(3);
// //谐波畸变率 保留两位小数
// Double distortion = value.get(1) == null ? null : BigDecimal.valueOf(Double.parseDouble(value.get(1).toString())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
//
//
// }
// }
qualifyDTOList.add(steadyQualifyDTO);
});
}
return qualifyDTOList;
}
private static double calculate(Double allTime, Double overTime) {
if (allTime >= overTime){
return NumberUtil.round((allTime - overTime) / allTime * 100, 2).doubleValue();
}
return 0.0;
}
}

View File

@@ -0,0 +1,219 @@
package com.njcn.harmonic.service.impl;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.enums.LineBaseEnum;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.THDistortionMapper;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.vo.THDistortionCensusVO;
import com.njcn.harmonic.pojo.vo.THDistortionVO;
import com.njcn.harmonic.service.THDistortionService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author: chenchao
* @date: 2022/03/11 10:09
* @Description: <描述>
*/
@Service
@AllArgsConstructor
public class THDistortionServiceImpl implements THDistortionService {
private final GeneralInfo generalInfo;
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final THDistortionMapper thDistortionMapper;
private final InfluxDbUtils influxDbUtils;
@Override
public List<THDistortionVO> getTHDistortionData(DeviceInfoParam.BusinessParam thDistortionParam) {
List<THDistortionVO> thDistortionVOS = new ArrayList<>();
List<String> lineList = new ArrayList<>();
//按照条件获取实际运行终端综合信息
List<GeneralDeviceDTO> deviceList = generalDeviceInfoClient.getPracticalRunDeviceInfo(new DeviceInfoParam(thDistortionParam.getStatisticalType(), thDistortionParam.getDeptIndex(), generalInfo.getMicroServiceName(), thDistortionParam.getScale(), thDistortionParam.getManufacturer(), thDistortionParam.getLoadType())).getData();
//组装监测点Top层集合
for (GeneralDeviceDTO generalDeviceDTO : deviceList) {
if (CollectionUtils.isEmpty(generalDeviceDTO.getDeviceIndexes())) {
continue;
}
THDistortionVO thDistortionVO = new THDistortionVO();
thDistortionVO.setId(generalDeviceDTO.getIndex());
thDistortionVO.setName(generalDeviceDTO.getName());
if (!CollectionUtils.isEmpty(generalDeviceDTO.getLineIndexes())){
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
List<THDistortionVO> monitorList = thDistortionMapper.getLineData(lineIndexes);
// setLineData(monitorList,thDistortionVO);
//查找畸变率
List<PublicDTO> condition = getCondition(lineIndexes, thDistortionParam.getSearchBeginTime(), thDistortionParam.getSearchEndTime());
thDistortionVO.setDistortion(condition.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
//组装父级数据树
List<THDistortionVO> treeList = getTreeData(lineIndexes, thDistortionParam);
thDistortionVO.setChildren(treeList);
}
thDistortionVOS.add(thDistortionVO);
}
return thDistortionVOS;
}
@Override
public THDistortionCensusVO getTHDistortionCensus(DeviceInfoParam.BusinessParam thDistortionCensusParam) {
THDistortionCensusVO distortionCensusVO = new THDistortionCensusVO();
thDistortionCensusParam.setServerName(generalInfo.getMicroServiceName());
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(thDistortionCensusParam).getData();
List<String> type = new ArrayList<>();
List<Double> single = new ArrayList<>();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
List<String> lineIndexes = generalDeviceDTO.getLineIndexes();
if (CollectionUtils.isEmpty(lineIndexes)) {
continue;
}
type.add(generalDeviceDTO.getName());
List<PublicDTO> condition = getCondition(lineIndexes, thDistortionCensusParam.getSearchBeginTime(), thDistortionCensusParam.getSearchEndTime());
single.add(condition.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
}
distortionCensusVO.setType(type);
distortionCensusVO.setSingle(single);
}
return distortionCensusVO;
}
/**
* 计算父级畸变率
*/
private void setFatherDistortion(List<THDistortionVO> list) {
list.forEach(thDistortionVO -> {
List<THDistortionVO> children = thDistortionVO.getChildren();
List<THDistortionVO> tempList = children.stream().filter(child -> !Objects.equals(child.getDistortion(), 3.14159)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(tempList)) {
thDistortionVO.setDistortion(tempList.stream().mapToDouble(THDistortionVO::getDistortion).average().orElse(3.14159));
} else {
thDistortionVO.setDistortion(3.14159);
}
});
}
/**
* 组装树层级
*/
private List<THDistortionVO> getChildCategoryList(THDistortionVO item, List<THDistortionVO> child) {
return child.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList());
}
private void setChildesList(List<THDistortionVO> item, List<THDistortionVO> childes) {
//groupLine变电站索引和监测点集合
Map<String, List<THDistortionVO>> groupLine;
groupLine = childes.stream().collect(Collectors.groupingBy(thDistortionVO -> {
String[] pid = thDistortionVO.getPidS().split(",");
return pid[LineBaseEnum.SUB_LEVEL.getCode()];
}));
item.stream().peek(thDistortionVO -> {
if (!CollectionUtils.isEmpty(groupLine.get(thDistortionVO.getId()))) {
thDistortionVO.setChildren(groupLine.get(thDistortionVO.getId()));
}
}).collect(Collectors.toList());
}
/**
* 获取父级每层数据
*/
private List<THDistortionVO> getTreeData(List<String> lineIndexes, DeviceInfoParam.BusinessParam thDistortionParam) {
//监测点集合
List<THDistortionVO> monitorList = thDistortionMapper.getLineData(lineIndexes);
//母线集合
List<THDistortionVO> busBarList = thDistortionMapper.getLineInfoByList(monitorList.stream().map(THDistortionVO::getPid).distinct().collect(Collectors.toList()));
//终端集合
List<THDistortionVO> deviceList = thDistortionMapper.getLineInfoByList(busBarList.stream().map(THDistortionVO::getPid).distinct().collect(Collectors.toList()));
//变电站集合
List<THDistortionVO> substationList = thDistortionMapper.getLineInfoByList(deviceList.stream().map(THDistortionVO::getPid).distinct().collect(Collectors.toList()));
//供电公司集合
List<THDistortionVO> powerCompanyList = thDistortionMapper.getLineInfoByList(substationList.stream().map(THDistortionVO::getPid).distinct().collect(Collectors.toList()));
//查询监测点谐波畸变率
List<PublicDTO> condition = getCondition(lineIndexes, thDistortionParam.getSearchBeginTime(), thDistortionParam.getSearchEndTime());
if (!CollectionUtils.isEmpty(monitorList)) {
//根据监测点集合组装谐波畸变率
monitorList.stream().map(list1 -> condition.stream().filter(list2 -> Objects.equals(list1.getId(), list2.getId())).findAny().map(m -> {
list1.setDistortion(m.getData());
return list1;
})).collect(Collectors.toList());
// busBarList.stream().peek(item -> item.setChildren(getChildCategoryList(item, monitorList))).collect(Collectors.toList());
// deviceList.stream().peek(item -> item.setChildren(getChildCategoryList(item, busBarList))).collect(Collectors.toList());
// substationList.stream().peek(item -> item.setChildren(getChildesList(item, monitorList))).collect(Collectors.toList());
setChildesList(substationList,monitorList);
setFatherDistortion(substationList);
powerCompanyList.stream().peek(item -> item.setChildren(getChildCategoryList(item, substationList))).collect(Collectors.toList());
setFatherDistortion(powerCompanyList);
}
return powerCompanyList;
}
/**
* influxDB查询畸变率
* @param lineIndexes
* @param startTime
* @param endTime
*/
private List<PublicDTO> getCondition(List<String> lineIndexes, String startTime, String endTime) {
List<PublicDTO> publicDTOList = new ArrayList<>();
//组装sql语句
StringBuilder string = new StringBuilder();
string.append(Param.QualityFlag + "='1' and (" + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEA + "' or " + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEB + "' or " + Param.PHASIC_TYPE + "='" + Param.PHASIC_TYPEC + "') and "+ Param.VALUETYPE + "='AVG' and ");
StringBuilder timeId = new StringBuilder();
timeId.append(Param.TIME + " >= '" + startTime + Param.START_TIME + "' and " + Param.TIME + " <= '" + endTime + Param.END_TIME + "' and (");
for (int i = 0; i < lineIndexes.size(); i++) {
if (lineIndexes.size() - i != 1) {
timeId.append(Param.LINE_ID + "='").append(lineIndexes.get(i)).append("' or ");
} else {
timeId.append(Param.LINE_ID + "='").append(lineIndexes.get(i)).append("')");
}
}
// String a = "SELECT MEAN(V_THD) AS distortion FROM Data_V WHERE QualityFlag='1' and (phasic_type='A' or phasic_type='B' or phasic_type='C')and value_type='AVG' and time >= '2022-03-20 00:00:00' and time <= '2022-03-21 23:59:59' and (lineid ='1e3b8531483b2a8cbee6747f1f641cf9') group by lineid;";
//sql语句
String sql = "SELECT MEAN(" + Param.V_THD + ")*100 AS distortion FROM Data_V WHERE " + string + timeId + " group by " + Param.LINE_ID;
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
List<QueryResult.Series> list = result.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)){
list.forEach(po->{
PublicDTO publicDTO = new PublicDTO();
List<List<Object>> valueList = po.getValues();
String index = po.getTags().get(Param.LINE_ID);
if (!CollectionUtils.isEmpty(valueList)){
for (List<Object> value : valueList) {
//谐波畸变率 保留两位小数
Double distortion = value.get(1) == null ? null : BigDecimal.valueOf(Double.parseDouble(value.get(1).toString())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
publicDTO.setId(index);
publicDTO.setData(distortion);
}
}
publicDTOList.add(publicDTO);
});
}
return publicDTOList;
}
}

View File

@@ -0,0 +1,288 @@
package com.njcn.harmonic.service.impl;
import com.njcn.common.config.GeneralInfo;
import com.njcn.device.api.GeneralDeviceInfoClient;
import com.njcn.device.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pojo.param.DeviceInfoParam;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.mapper.TerminalDataMapper;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.vo.TerminalCensusVO;
import com.njcn.harmonic.pojo.vo.TerminalVO;
import com.njcn.harmonic.service.TerminalService;
import com.njcn.influxdb.utils.InfluxDbUtils;
import lombok.AllArgsConstructor;
import org.influxdb.dto.QueryResult;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author: chenchao
* @date: 2022/03/02 19:25
* @Description: <描述>
*/
@Service
@AllArgsConstructor
public class TerminalServiceImpl implements TerminalService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final GeneralInfo generalInfo;
private final TerminalDataMapper terminalDataMapper;
private final InfluxDbUtils influxDbUtils;
@Override
public List<TerminalVO> getTerminalData(DeviceInfoParam.BusinessParam terminalParam) {
List<TerminalVO> terminalList = new ArrayList<>();
//按照条件获取所有终端综合信息
List<GeneralDeviceDTO> deviceDataList = generalDeviceInfoClient.getPracticalAllDeviceInfo(new DeviceInfoParam(terminalParam.getStatisticalType(), terminalParam.getDeptIndex(), generalInfo.getMicroServiceName(), null, terminalParam.getManufacturer(), null)).getData();
//组装终端Top层集合
for (GeneralDeviceDTO generalDeviceDTO : deviceDataList) {
List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes();
if (CollectionUtils.isEmpty(deviceIndexes)) {
continue;
}
TerminalVO terminalVO = new TerminalVO();
terminalVO.setId(generalDeviceDTO.getIndex());
terminalVO.setName(generalDeviceDTO.getName());
//获取终端相关信息
List<TerminalVO> terminalData = terminalDataMapper.getTerminalData(deviceIndexes);
for (TerminalVO item: terminalData) {
setDeviceFlag(item.getFlag(), terminalVO);
}
terminalVO.setFlag(null);
//查找在线率
List<PublicDTO> condition = getCondition(deviceIndexes, terminalParam.getSearchBeginTime(), terminalParam.getSearchEndTime());
terminalVO.setOnlineRateData(condition.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
terminalVO.setNumber(generalDeviceDTO.getDeviceIndexes().size());
//组装父级数据树
List<TerminalVO> treeList = getTreeData(deviceIndexes, terminalParam);
terminalVO.setChildren(treeList);
terminalList.add(terminalVO);
}
return terminalList;
}
@Override
public TerminalCensusVO getTerminalDataCensus(DeviceInfoParam.BusinessParam terminalCensusParam) {
TerminalCensusVO terminalCensusVO = new TerminalCensusVO();
terminalCensusParam.setServerName(generalInfo.getMicroServiceName());
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalAllDeviceInfo(terminalCensusParam).getData();
List<String> type = new ArrayList<>();
List<Double> single = new ArrayList<>();
List<Integer> runFlag = new ArrayList<>(),reaFlag = new ArrayList<>(),stopFlag = new ArrayList<>();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
if (CollectionUtils.isEmpty(generalDeviceDTO.getDeviceIndexes())) {
continue;
}
type.add(generalDeviceDTO.getName());
List<String> deviceIndexes = generalDeviceDTO.getDeviceIndexes();
//根据终端查询在线率
List<PublicDTO> condition = getCondition(deviceIndexes, terminalCensusParam.getSearchBeginTime(), terminalCensusParam.getSearchEndTime());
single.add(condition.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159));
//获取终端相关信息
List<TerminalVO> terminalData = terminalDataMapper.getTerminalData(deviceIndexes);
int run=0,rea=0,stop=0;
for (TerminalVO terminalVO: terminalData) {
if (terminalVO.getFlag() == 0) {
++run;
}
if (terminalVO.getFlag() == 1) {
++rea;
}
if (terminalVO.getFlag() == 2) {
++stop;
}
terminalVO.setFlag(null);
}
runFlag.add(run);
reaFlag.add(rea);
stopFlag.add(stop);
}
}
terminalCensusVO.setType(type);
terminalCensusVO.setSingle(single);
terminalCensusVO.setRunFlag(runFlag);
terminalCensusVO.setReaFlag(reaFlag);
terminalCensusVO.setStopFlag(stopFlag);
return terminalCensusVO;
}
//保存终端运行状态
private void setDeviceFlag(Integer flag, TerminalVO terminalVO) {
if (flag==0) {
int a = terminalVO.getRunFlag();
terminalVO.setRunFlag(++a);
}
if (flag==1) {
int b = terminalVO.getReaFlag();
terminalVO.setReaFlag(++b);
}
if (flag==2) {
int c = terminalVO.getStopFlag();
terminalVO.setStopFlag(++c);
}
terminalVO.setFlag(flag);
}
//设置层级终端信息
private void setTreeFlag(List<TerminalVO> list, List<TerminalVO> childList) {
list.forEach(terminalVO -> {
childList.forEach(terminalVO1 -> {
if (terminalVO.getId().equals(terminalVO1.getPid())) {
int num = terminalVO1.getRunFlag()+terminalVO1.getReaFlag()+terminalVO1.getStopFlag();
terminalVO.setNumber(terminalVO.getNumber() + num);
terminalVO.setRunFlag(terminalVO1.getRunFlag() + terminalVO.getRunFlag());
terminalVO.setReaFlag(terminalVO1.getReaFlag() + terminalVO.getReaFlag());
terminalVO.setStopFlag(terminalVO1.getStopFlag() + terminalVO.getStopFlag());
}
});
});
}
/**
* 获取父级每层数据
*/
public List<TerminalVO> getTreeData(List<String> deviceIndexes, DeviceInfoParam.BusinessParam terminalParam) {
//终端集合
List<TerminalVO> deviceList = terminalDataMapper.getTerminalData(deviceIndexes);
//变电站集合
List<TerminalVO> substationList = terminalDataMapper.getLineInfoByList(deviceList.stream().map(TerminalVO::getPid).distinct().collect(Collectors.toList()));
//供电公司集合
List<TerminalVO> powerCompanyList = terminalDataMapper.getLineInfoByList(substationList.stream().map(TerminalVO::getPid).distinct().collect(Collectors.toList()));
// //区域集合
// List<TerminalVO> areaList = terminalDataMapper.getLineInfoByList(powerCompanyList.stream().map(TerminalVO::getPid).distinct().collect(Collectors.toList()));
// //区域详情,用来替换区域名称
// List<Area> area = areaFeignClient.areaNameByList(areaList.stream().map(TerminalVO::getName).collect(Collectors.toList())).getData();
// //组装区域名称
// areaList.stream().map(list1 -> area.stream().filter(list2 -> Objects.equals(list1.getName(), list2.getId())).findAny().map(m -> {
// list1.setName(m.getName());
// return list1;
// })).collect(Collectors.toList());
//查询终端的在线率
List<PublicDTO> onlineRateList = getCondition(deviceIndexes, terminalParam.getSearchBeginTime(), terminalParam.getSearchEndTime());
//根据终端集合组装终端的在线率
if (!CollectionUtils.isEmpty(deviceList)) {
deviceList.stream().map(list1 -> onlineRateList.stream().filter(list2 -> Objects.equals(list1.getId(), list2.getId())).findAny().map(m -> {
list1.setOnlineRateData(m.getData());
return list1;
})).collect(Collectors.toList());
for (TerminalVO terminalVO: deviceList) {
Integer flag = terminalVO.getFlag();
setDeviceFlag(flag, terminalVO);
terminalVO.setFlag(null);
}
}
substationList.stream().peek(item -> item.setChildren(getChildCategoryList(item, deviceList))).collect(Collectors.toList());
setTreeFlag(substationList, deviceList);
powerCompanyList.stream().peek(item -> item.setChildren(getChildCategoryList(item, substationList))).collect(Collectors.toList());
setTreeFlag(powerCompanyList,substationList);
// areaList.stream().peek(item -> item.setChildren(getChildCategoryList(item, powerCompanyList))).collect(Collectors.toList());
setFatherOnlineRate(substationList);
setFatherOnlineRate(powerCompanyList);
// setAreaIntegrity(areaList);
return powerCompanyList;
}
/**
* 组装树层级
*/
private List<TerminalVO> getChildCategoryList(TerminalVO item, List<TerminalVO> all) {
return all.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList());
}
/**
* influxDB相关操作
*
* @param deviceIndexes
* @param startTime
* @param endTime
*/
private List<PublicDTO> getCondition(List<String> deviceIndexes, String startTime, String endTime) {
List<PublicDTO> publicDTOList = new ArrayList<>();
//组装sql语句
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(Param.TIME + " >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and (");
for (int i = 0; i < deviceIndexes.size(); i++) {
if (deviceIndexes.size() - i != 1) {
stringBuilder.append(Param.DEV_INDEX + "='").append(deviceIndexes.get(i)).append("' or ");
} else {
stringBuilder.append(Param.DEV_INDEX + "='").append(deviceIndexes.get(i)).append("')");
}
}
//sql语句
String sql = "SELECT (SUM(" + Param.ONLINEMIN + ")/(SUM(" + Param.OFFLINEMIN + ")+SUM(" + Param.ONLINEMIN + ")))*100 AS onlineRate FROM PQS_ONLINERATE WHERE " + stringBuilder + " group by " + Param.DEV_INDEX;
//结果集
QueryResult result = influxDbUtils.query(sql);
//处理结果集
List<QueryResult.Series> list = result.getResults().get(0).getSeries();
if (!CollectionUtils.isEmpty(list)) {
list.forEach(po -> {
PublicDTO publicDTO = new PublicDTO();
List<List<Object>> valueList = po.getValues();
String index = po.getTags().get(Param.DEV_INDEX);
if (!CollectionUtils.isEmpty(valueList)) {
for (List<Object> value : valueList) {
//终端在线率 保留两位小数
Double onlineRate = value.get(1) == null ? null : BigDecimal.valueOf(Double.parseDouble(value.get(1).toString())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
publicDTO.setId(index);
publicDTO.setData(onlineRate);
}
}
publicDTOList.add(publicDTO);
});
}
return publicDTOList;
}
/**
* 计算父级终端在线率
*/
private void setFatherOnlineRate(List<TerminalVO> list) {
list.forEach(item -> {
List<TerminalVO> children = item.getChildren();
List<TerminalVO> tempList = children.stream().filter(s -> !Objects.equals(s.getOnlineRateData(), 3.14159)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(tempList)) {
item.setOnlineRateData(tempList.stream().mapToDouble(TerminalVO::getOnlineRateData).sum() / children.size());
} else {
item.setOnlineRateData(3.14159);
}
});
}
//省级
private void setAreaOnlineRate(List<TerminalVO> list) {
list.forEach(item -> {
List<TerminalVO> result = new ArrayList<>();
List<TerminalVO> children = item.getChildren();
children.forEach(item2 -> {
List<TerminalVO> children2 = item2.getChildren();
children2.forEach(item3 -> {
List<TerminalVO> children3 = item3.getChildren();
result.addAll(children3);
});
});
double aver = result.stream().mapToDouble(TerminalVO::getOnlineRateData).average().orElseThrow(IllegalStateException::new);
item.setOnlineRateData(BigDecimal.valueOf(aver).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
});
}
}