初始化
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
// }
|
||||
//}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.njcn.harmonic.mapper;
|
||||
|
||||
/**
|
||||
* @author 徐扬
|
||||
*/
|
||||
public interface HarmonicMapper {
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.njcn.harmonic.mapper;
|
||||
|
||||
/**
|
||||
* @author 徐扬
|
||||
*/
|
||||
public interface PollutionMapper {
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user