From 730c08098bf921d1d4c67bd9c111a0319620b0aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E6=9C=A8c?= <857448963@qq.com> Date: Tue, 13 Dec 2022 09:31:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DataExceptionController.java | 51 ----- .../DataIntegrityRateController.java | 51 ----- .../pq/mapper/PmsAbnormalRulesMapper.java | 14 -- .../device/pq/mapper/RMpIntegrityDMapper.java | 14 -- .../pq/mapper/RStatAbnormalDMapper.java | 14 -- .../pq/service/DataExceptionService.java | 20 -- .../pq/service/DataIntegrityRateService.java | 20 -- .../impl/DataExceptionServiceImpl.java | 201 ------------------ .../impl/DataIntegrityRateServiceImpl.java | 193 ----------------- 9 files changed, 578 deletions(-) delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataExceptionController.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataIntegrityRateController.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PmsAbnormalRulesMapper.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RMpIntegrityDMapper.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RStatAbnormalDMapper.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataExceptionService.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataIntegrityRateService.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataExceptionServiceImpl.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataIntegrityRateServiceImpl.java diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataExceptionController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataExceptionController.java deleted file mode 100644 index 70a8de3f1..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataExceptionController.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.njcn.device.pq.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.pq.pojo.param.AlgorithmSearchParam; -import com.njcn.device.pq.service.DataExceptionService; -import com.njcn.web.controller.BaseController; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author qijian - * @date 2022/10/26 - * 数据是否异常 - */ -@Validated -@Slf4j -@RestController -@RequestMapping("/dataException") -@Api(tags = "数据是否异常") -@AllArgsConstructor -public class DataExceptionController extends BaseController { - - private final DataExceptionService dataExceptionService; - - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/lineDataException") - @ApiOperation("监测点数据是否异常") - @ApiImplicitParam(name = "algorithmSearchParam", value = "算法通用查询参数", required = true) - public HttpResult lineDataException(@RequestBody @Validated AlgorithmSearchParam algorithmSearchParam) { - String methodDescribe = getMethodDescribe("lineDataException"); - boolean res = dataExceptionService.lineDataException(algorithmSearchParam); - if(res){ - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); - }else { - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); - } - - } -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataIntegrityRateController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataIntegrityRateController.java deleted file mode 100644 index 761207904..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DataIntegrityRateController.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.njcn.device.pq.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.pq.pojo.param.AlgorithmSearchParam; -import com.njcn.device.pq.service.DataIntegrityRateService; -import com.njcn.web.controller.BaseController; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author qijian - * @date 2022/10/26 - * 数据完整率算法 - */ -@Validated -@Slf4j -@RestController -@RequestMapping("/dataIntegrityRate") -@Api(tags = "数据完整率算法") -@AllArgsConstructor -public class DataIntegrityRateController extends BaseController { - - private final DataIntegrityRateService dataIntegrityRateService; - - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/lineDataIntegrityRate") - @ApiOperation("监测点日数据完整率") - @ApiImplicitParam(name = "algorithmSearchParam", value = "算法通用查询参数", required = true) - public HttpResult lineDataIntegrityRate(@RequestBody @Validated AlgorithmSearchParam algorithmSearchParam) { - String methodDescribe = getMethodDescribe("lineDataIntegrityRate"); - boolean res = dataIntegrityRateService.lineDataIntegrityRate(algorithmSearchParam); - if(res){ - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); - }else { - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); - } - - } -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PmsAbnormalRulesMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PmsAbnormalRulesMapper.java deleted file mode 100644 index 6cc142fe4..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PmsAbnormalRulesMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.njcn.device.pq.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.njcn.device.pq.pojo.po.PmsAbnormalRules; - -/** - * PmsAbnormalRulesMapper - * - * @author qijian - * @date 2022/10/26 - */ -public interface PmsAbnormalRulesMapper extends BaseMapper { - -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RMpIntegrityDMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RMpIntegrityDMapper.java deleted file mode 100644 index d8bf6e1aa..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RMpIntegrityDMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.njcn.device.pq.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.njcn.device.pq.pojo.po.RMpIntegrityD; - -/** - * RMpIntegrityDMapper - * - * @author qijian - * @date 2022/10/26 - */ -public interface RMpIntegrityDMapper extends BaseMapper { - -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RStatAbnormalDMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RStatAbnormalDMapper.java deleted file mode 100644 index 9e19478f7..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/RStatAbnormalDMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.njcn.device.pq.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.njcn.device.pq.pojo.po.RStatAbnormalD; - -/** - * RStatAbnormalDMapper - * - * @author qijian - * @date 2022/10/26 - */ -public interface RStatAbnormalDMapper extends BaseMapper { - -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataExceptionService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataExceptionService.java deleted file mode 100644 index 68efa2b96..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataExceptionService.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.njcn.device.pq.service; - -import com.njcn.device.pq.pojo.param.AlgorithmSearchParam; - -/** - * 数据是否异常 - * - * @author qijian - * @version 1.0.0 - * @createTime 2022/10/26 - 10:09 - */ -public interface DataExceptionService { - - /** - * 监测点数据是否异常 - * @author qijian - * @date 2022/10/26 - */ - boolean lineDataException(AlgorithmSearchParam algorithmSearchParam); -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataIntegrityRateService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataIntegrityRateService.java deleted file mode 100644 index 847192d0f..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/DataIntegrityRateService.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.njcn.device.pq.service; - -import com.njcn.device.pq.pojo.param.AlgorithmSearchParam; - -/** - * 数据完整率算法 - * - * @author qijian - * @version 1.0.0 - * @createTime 2022/10/26 - 10:09 - */ -public interface DataIntegrityRateService { - - /** - * 监测点日数据完整率 - * @author qijian - * @date 2022/10/26 - */ - boolean lineDataIntegrityRate(AlgorithmSearchParam algorithmSearchParam); -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataExceptionServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataExceptionServiceImpl.java deleted file mode 100644 index 50dc513f9..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataExceptionServiceImpl.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.njcn.device.pq.service.impl; - -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.njcn.common.pojo.exception.BusinessException; -import com.njcn.device.pq.api.LineFeignClient; -import com.njcn.device.pq.pojo.vo.LineDetailDataVO; -import com.njcn.device.pq.service.DataExceptionService; -import com.njcn.influxdb.config.InfluxDbConfig; -import com.njcn.influxdb.param.InfluxDBPublicParam; -import com.njcn.influxdb.param.InfluxDBSqlConstant; -import com.njcn.influxdb.param.InfluxDBTableConstant; -import com.njcn.influxdb.utils.InfluxDbUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.influxdb.dto.QueryResult; -import org.influxdb.impl.InfluxDBResultMapper; -import org.springframework.stereotype.Service; - -import com.njcn.device.pq.constant.Param; -import com.njcn.device.pq.enums.DeviceResponseEnum; -import com.njcn.device.pq.mapper.PmsAbnormalRulesMapper; -import com.njcn.device.pq.mapper.RStatAbnormalDMapper; -import com.njcn.device.pq.pojo.param.AlgorithmSearchParam; -import com.njcn.device.pq.pojo.po.DataV; -import com.njcn.device.pq.pojo.po.PmsAbnormalRules; -import com.njcn.device.pq.pojo.po.RStatAbnormalD; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; - -/** - * 数据是否异常 - * - * @author qijian - * @version 1.0.0 - * @createTime 2022/10/26 - 10:09 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class DataExceptionServiceImpl implements DataExceptionService { - - private final InfluxDbUtils influxDbUtils; - - private final LineFeignClient lineFeignClient; - - private final PmsAbnormalRulesMapper pmsAbnormalRulesMapper; - - private final RStatAbnormalDMapper rStatAbnormalDMapper; - - @Resource - private InfluxDbConfig influxDbConfig; - - /** - * 监测点数据是否异常 - * @author qijian - * @date 2022/10/26 - */ - @Override - public boolean lineDataException(AlgorithmSearchParam algorithmSearchParam) { - //测试 -// InfluxDbUtils influxDBUtil = new InfluxDbUtils("admin", "njcnpqs", "http://192.168.1.18:8086", "pqsbase", ""); - //初始化 - InfluxDBResultMapper resultMapper = new InfluxDBResultMapper(); - String searchSql; - String sql; - QueryResult query; - DataV dataV; - Date date = DateUtil.parse(algorithmSearchParam.getDatadate()); - String lineId = algorithmSearchParam.getId(); - Integer type = algorithmSearchParam.getType(); - - //入库数据初始化 - RStatAbnormalD rStatAbnormalD = new RStatAbnormalD(); - rStatAbnormalD.setDataDate(date); - rStatAbnormalD.setMeasurementPointId(lineId); - rStatAbnormalD.setValueAlarm(0); - - //1、取出规则 - List pmsAbnormalRules = pmsAbnormalRulesMapper.selectList(null); - - //2、取出电压 - List lineIds = new ArrayList<>(); - lineIds.add(lineId); - List lineDetailList = lineFeignClient.getLineDetailList(lineIds).getData(); - if (lineDetailList.size() == 0){ - throw new BusinessException(DeviceResponseEnum.ALGORITHM_LINE_EMPTY); - } - String scale = lineDetailList.get(0).getScale().replace("kV",""); - - //3、根据规则表进行判断 - //取前四项进行比较(相别为A) - searchSql = "MAX(freq) as freq_max,MIN(freq) as freq_min,MAX(rms) as rms_max,MIN(rms) as rms_min,MAX(rms_lvr) as rms_lvr_max,MIN(rms_lvr) as rms_lvr_min,MAX(v_thd) as v_thd_max,MIN(v_thd) as v_thd_min "; - sql = getAppend(lineId, date, type, searchSql, "A"); - query = influxDbUtils.query(sql); - dataV = resultMapper.toPOJO(query, DataV.class).get(0); - - //开始判断业务 - DeviceResponseEnum harmonicResponseEnum = null; - for (PmsAbnormalRules pmsAbnormalRule : pmsAbnormalRules) { - //每项数据进行上下限比较(MAX和MIN),若有一项不在数据范围内,则为异常 - switch (pmsAbnormalRule.getTarget()) { - case Param.TARGET_FREQ: - //频率:正常比较 - if (dataV.getFrepMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getFrepMAX() > pmsAbnormalRule.getUpperLimit()){ - harmonicResponseEnum = DeviceResponseEnum.ALGORITHM_FREP_RULE; - } - break; - case Param.TARGET_RMS: - //相电压有效值特殊处理:在【0.85p.u.,1.2p.u.】之间;p.u=电压等级/1.732 - pmsAbnormalRule.setLowerLimit((pmsAbnormalRule.getLowerLimit() * (Double.parseDouble(scale) / 1.732))); - pmsAbnormalRule.setUpperLimit((pmsAbnormalRule.getUpperLimit() * (Double.parseDouble(scale) / 1.732))); - if (dataV.getRmsMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getRmsMAX() > pmsAbnormalRule.getUpperLimit()){ - harmonicResponseEnum = DeviceResponseEnum.ALGORITHM_RMS_RULE; - } - break; - case Param.TARGET_RMS_LVR: - //线电压有效值特殊处理:在【0.85p.u.,1.2p.u.】之间;p.u=电压等级 - pmsAbnormalRule.setLowerLimit((pmsAbnormalRule.getLowerLimit() * Double.parseDouble(scale))); - pmsAbnormalRule.setUpperLimit((pmsAbnormalRule.getUpperLimit() * Double.parseDouble(scale))); - if (dataV.getRmsLvrMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getRmsLvrMAX() > pmsAbnormalRule.getUpperLimit()){ - harmonicResponseEnum = DeviceResponseEnum.ALGORITHM_RMS_LVR_RULE; - } - break; - case Param.TARGET_V_THD: - //电压总谐波畸变率:正常比较 - if (dataV.getVThdMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getVThdMAX() > pmsAbnormalRule.getUpperLimit()){ - harmonicResponseEnum = DeviceResponseEnum.ALGORITHM_V_THD_RULE; - } - break; - case Param.TARGET_V_UNBALANCE: - //三相不平衡度:正常比较(相别为T) - searchSql = "MAX(v_unbalance) as v_unbalance_max,MIN(v_unbalance) as v_unbalance_min "; - sql = getAppend(lineId, date,type, searchSql, "T"); - query = influxDbUtils.query(sql); - dataV = resultMapper.toPOJO(query, DataV.class).get(0); - if (dataV.getVUnbalanceMIN() < pmsAbnormalRule.getLowerLimit() || dataV.getVUnbalanceMAX() > pmsAbnormalRule.getUpperLimit()){ - harmonicResponseEnum = DeviceResponseEnum.ALGORITHM_V_UNBALANCE_RULE; - } - break; - default: - break; - } - - if (harmonicResponseEnum != null){ - //入库 - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(RStatAbnormalD::getMeasurementPointId, lineId).eq(RStatAbnormalD::getDataDate, date); - RStatAbnormalD rStatAbnormalDOne = rStatAbnormalDMapper.selectOne(lambdaQueryWrapper); - if (Objects.isNull(rStatAbnormalDOne)){ - rStatAbnormalDMapper.insert(rStatAbnormalD); - } - throw new BusinessException(harmonicResponseEnum); - } - - } - return true; - } - - /** - * 拼装sql - * @param id,date,searchSql,tableName 参数 - * @return 结果 - */ - private String getAppend(String id, Date date, Integer type, String searchSql,String phase) { - StringBuilder stringBuilder = new StringBuilder(); - - //日期处理 - DateTime startTime = null; - DateTime endTime = null; - if (Param.YEAR.equals(type)){ - startTime = DateUtil.beginOfYear(date); - endTime = DateUtil.endOfYear(date); - }else if(Param.MONTH.equals(type)){ - startTime = DateUtil.beginOfMonth(date); - endTime = DateUtil.endOfMonth(date); - }else if(Param.DAY.equals(type)){ - startTime = DateUtil.beginOfDay(date); - endTime = DateUtil.endOfDay(date); - } - - //拼接 - stringBuilder.append(InfluxDBSqlConstant.SELECT).append(searchSql) - .append(InfluxDBSqlConstant.FROM).append(InfluxDBPublicParam.DATA_V) - .append(InfluxDBSqlConstant.WHERE).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(startTime).append(InfluxDBSqlConstant.QM) - .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.LE).append(InfluxDBSqlConstant.QM).append(endTime).append(InfluxDBSqlConstant.QM) - .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.LINE_ID).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(id).append(InfluxDBSqlConstant.QM) - .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.VALUE_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.AVG).append(InfluxDBSqlConstant.QM); - if (InfluxDBTableConstant.PHASE_TYPE_T.equals(phase)){ - stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_T).append(InfluxDBSqlConstant.QM); - }else{ - stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_A).append(InfluxDBSqlConstant.QM); - } - return stringBuilder.toString(); - } -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataIntegrityRateServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataIntegrityRateServiceImpl.java deleted file mode 100644 index 36dbd8ab9..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataIntegrityRateServiceImpl.java +++ /dev/null @@ -1,193 +0,0 @@ -package com.njcn.device.pq.service.impl; - -import cn.hutool.core.date.DateUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.njcn.common.pojo.exception.BusinessException; -import com.njcn.device.pq.api.LineFeignClient; -import com.njcn.device.pq.mapper.RMpIntegrityDMapper; -import com.njcn.device.pq.pojo.vo.LineDetailDataVO; -import com.njcn.influxdb.config.InfluxDbConfig; -import com.njcn.influxdb.param.InfluxDBPublicParam; -import com.njcn.influxdb.param.InfluxDBSqlConstant; -import com.njcn.influxdb.param.InfluxDBTableConstant; -import com.njcn.influxdb.utils.InfluxDbUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.influxdb.dto.QueryResult; -import org.springframework.stereotype.Service; - -import com.njcn.device.pq.enums.DeviceResponseEnum; -import com.njcn.device.pq.pojo.param.AlgorithmSearchParam; -import com.njcn.device.pq.pojo.po.RMpIntegrityD; -import com.njcn.device.pq.service.DataIntegrityRateService; - -import javax.annotation.Resource; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; - -/** - * 数据完整率算法 - * - * @author qijian - * @version 1.0.0 - * @createTime 2022/10/26 - 10:09 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class DataIntegrityRateServiceImpl implements DataIntegrityRateService { - - private final InfluxDbUtils influxDbUtils; - - private final RMpIntegrityDMapper rMpIntegrityDMapper; - - private final LineFeignClient lineFeignClient; - - @Resource - private InfluxDbConfig influxDbConfig; - - /** - * 监测点日数据完整率 - * @author qijian - * @date 2022/10/26 - */ - @Override - public boolean lineDataIntegrityRate(AlgorithmSearchParam algorithmSearchParam) { - //测试 -// InfluxDbUtils influxDBUtil = new InfluxDbUtils("admin", "njcnpqs", "http://192.168.1.18:8086", "pqsbase", ""); - //初始化 - String searchSql; - String tableName; - String sql; - QueryResult query; - QueryResult.Series series; - List columns; - List> values; - RMpIntegrityD rMpIntegrityD = new RMpIntegrityD(); - Date date = DateUtil.parse(algorithmSearchParam.getDatadate()); - - //1、有效接入分钟数量:根据监测点编号获取统计间隔,1440 / 统计间隔 = 有效接入分钟数量 - List lineIds = new ArrayList<>(); - lineIds.add(algorithmSearchParam.getId()); - List lineDetailList = lineFeignClient.getLineDetailList(lineIds).getData(); - if (lineDetailList.size() == 0){ - throw new BusinessException(DeviceResponseEnum.ALGORITHM_LINE_EMPTY); - } - Integer effectiveMinuteCount = 1440 / lineDetailList.get(0).getTimeInterval(); - rMpIntegrityD.setEffectiveMinuteCount(effectiveMinuteCount); - - //2、根据data_v表获取五项稳态指标日数量(count) - searchSql = "count(freq) as freqCount,count(rms) as phaseVoltageCount,count(rms_lvr) as lineVoltageCount,count(v_thd) as vThdCount,count(v_unbalance) as unbalanceCount "; - tableName = InfluxDBPublicParam.DATA_V; - sql = getAppend(algorithmSearchParam.getId(), date, searchSql, tableName); - query = influxDbUtils.query(sql); - series = getSeries(query); - - if (Objects.nonNull(series.getColumns())){ - columns = series.getColumns(); - values = series.getValues(); - for (List columnValue : values) { - for (int i = 0; i < columnValue.size(); i++) { - if (columns.get(i).equals("freqCount")) { - rMpIntegrityD.setFreqCount(Integer.parseInt(convertDoubleToString(columnValue.get(i)))); - }else if (columns.get(i).equals("phaseVoltageCount")) { - rMpIntegrityD.setPhaseVoltageCount(Integer.parseInt(convertDoubleToString(columnValue.get(i)))); - }else if (columns.get(i).equals("lineVoltageCount")) { - rMpIntegrityD.setLineVoltageCount(Integer.parseInt(convertDoubleToString(columnValue.get(i)))); - }else if (columns.get(i).equals("vThdCount")) { - rMpIntegrityD.setVThdCount(Integer.parseInt(convertDoubleToString(columnValue.get(i)))); - }else if (columns.get(i).equals("unbalanceCount")) { - rMpIntegrityD.setUnbalanceCount(Integer.parseInt(convertDoubleToString(columnValue.get(i)))); - } - } - } - } - - //3、根据day_flicker表获取两项闪变指标数量(count) - searchSql = "count(pst) as pstCount,count(plt) as pltCount "; - tableName = InfluxDBPublicParam.DATA_FLICKER; - sql = getAppend(algorithmSearchParam.getId(), date, searchSql, tableName); - query = influxDbUtils.query(sql); - series = getSeries(query); - - if (Objects.nonNull(series.getColumns())){ - columns = series.getColumns(); - values = series.getValues(); - for (List columnValue : values) { - for (int i = 0; i < columnValue.size(); i++) { - if (columns.get(i).equals("pstCount")) { - rMpIntegrityD.setPstCount(Integer.parseInt(convertDoubleToString(columnValue.get(i)))); - }else if (columns.get(i).equals("pltCount")) { - rMpIntegrityD.setPltCount(Integer.parseInt(convertDoubleToString(columnValue.get(i)))); - } - } - } - } - - //4、存库 - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(RMpIntegrityD::getMeasurementPointId, algorithmSearchParam.getId()).eq(RMpIntegrityD::getDataDate, date); - RMpIntegrityD rMpIntegrityDOne = rMpIntegrityDMapper.selectOne(lambdaQueryWrapper); - if (Objects.nonNull(rMpIntegrityDOne)){ - rMpIntegrityDMapper.update(rMpIntegrityD,lambdaQueryWrapper); - }else{ - rMpIntegrityD.setMeasurementPointId(algorithmSearchParam.getId()); - rMpIntegrityD.setDataDate(date); - rMpIntegrityDMapper.insert(rMpIntegrityD); - } - - return true; - } - - /** - * Double转String - * @param val 参数 - * @return 结果 - */ - private String convertDoubleToString(Object val) { - DecimalFormat decimalFormat = new DecimalFormat("###################.###########"); - return decimalFormat.format(val); - } - - /** - * 取series - * @param query 参数 - * @return 结果 - */ - private QueryResult.Series getSeries(QueryResult query) { - QueryResult.Series series = new QueryResult.Series(); - List results = query.getResults(); - if (results.size() != 0) { - QueryResult.Result result = results.get(0); - if (result.getSeries() != null){ - List seriess = result.getSeries(); - if (seriess.size() != 0) { - series = seriess.get(0); - } - } - } - return series; - } - - /** - * 拼装sql - * @param id,date,searchSql,tableName 参数 - * @return 结果 - */ - private String getAppend(String id, Date date, String searchSql,String tableName) { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(InfluxDBSqlConstant.SELECT).append(searchSql) - .append(InfluxDBSqlConstant.FROM).append(tableName) - .append(InfluxDBSqlConstant.WHERE).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.GE).append(InfluxDBSqlConstant.QM).append(DateUtil.beginOfDay(date)).append(InfluxDBSqlConstant.QM) - .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.TIME).append(InfluxDBSqlConstant.LE).append(InfluxDBSqlConstant.QM).append(DateUtil.endOfDay(date)).append(InfluxDBSqlConstant.QM) - .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.LINE_ID).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(id).append(InfluxDBSqlConstant.QM) - .append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.PHASIC_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.PHASE_TYPE_A).append(InfluxDBSqlConstant.QM); - if (InfluxDBPublicParam.DATA_V.equals(tableName)){ - stringBuilder.append(InfluxDBSqlConstant.AND).append(InfluxDBPublicParam.VALUE_TYPE).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(InfluxDBTableConstant.AVG).append(InfluxDBSqlConstant.QM); - } - return stringBuilder.toString(); - } -}