1.新能源专项分析代码优化

2.迁移相关代码算法
This commit is contained in:
wr
2025-04-03 16:02:45 +08:00
parent 47a4f73518
commit 25ad24deb9
22 changed files with 248 additions and 1409 deletions

View File

@@ -0,0 +1,13 @@
package com.njcn.harmonic.mapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.RActivePowerRangePO;
/**
* 有功功率趋势 Mapper 接口
* @author guofeihu
* @since 2024-08-20
*/
public interface RActivePowerRangeMapper extends MppBaseMapper<RActivePowerRangePO> {
}

View File

@@ -0,0 +1,6 @@
<?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.RActivePowerRangeMapper">
</mapper>

View File

@@ -0,0 +1,27 @@
package com.njcn.harmonic.service.activepowerrange;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.harmonic.pojo.po.RActivePowerRangePO;
import com.njcn.harmonic.pojo.vo.PowerStatisticsTargetVO;
import com.njcn.prepare.harmonic.pojo.param.RActivePowerRangeParam;
import java.util.List;
/**
* 有功功率趋势 服务类
* @author guofeihu
* @since 2024-08-22
*/
public interface RActivePowerRangeService extends IMppService<RActivePowerRangePO> {
/**
* 有功功率趋势记录(用于定时任务)
*/
List<PowerStatisticsTargetVO> record(RActivePowerRangeParam rActivePowerRangeParam);
/**
* 根据监测点ID及时间获取有功功率趋势
*/
RActivePowerRangePO getDataByLineId(String lineId, String startTime, String endTime);
}

View File

@@ -9,16 +9,16 @@ import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.njcn.harmonic.constant.Param;
import com.njcn.harmonic.pojo.param.PowerStatisticsParam;
import com.njcn.harmonic.pojo.po.RActivePowerRangePO;
import com.njcn.harmonic.pojo.vo.*;
import com.njcn.harmonic.service.activepowerrange.PowerStatisticsService;
import com.njcn.harmonic.service.activepowerrange.RActivePowerRangeService;
import com.njcn.influx.pojo.bo.CommonQueryParam;
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
import com.njcn.influx.pojo.dto.StatisticalDataDTO;
import com.njcn.influx.service.CommonService;
import com.njcn.poi.util.PoiUtil;
import com.njcn.prepare.harmonic.api.event.RActivePowerRangeFeignClient;
import com.njcn.prepare.harmonic.pojo.param.RActivePowerRangeParam;
import com.njcn.prepare.harmonic.pojo.po.RActivePowerRangePO;
import com.njcn.system.api.EpdFeignClient;
import com.njcn.system.pojo.po.EleEpdPqd;
import lombok.RequiredArgsConstructor;
@@ -48,7 +48,7 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class PowerStatisticsServiceImpl implements PowerStatisticsService {
private final RActivePowerRangeFeignClient rActivePowerRangeFeignClient;
private final RActivePowerRangeService rActivePowerRangeService;
private final CommonService commonService;
private final DecimalFormat df = new DecimalFormat(Param.DECIMAL_FORMATSTR);
private final DecimalFormat dftwo = new DecimalFormat(Param.DECIMAL_FORMATTWOSTR);
@@ -82,17 +82,9 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
@Override
public PowerStatisticsVO getDataByLineId(PowerStatisticsParam powerStatisticsParam) {
//每次执行区间查询前都走一遍定时任务算法(防止当天没有区间相关数据)
RActivePowerRangeParam rActivePowerRangeParam = new RActivePowerRangeParam();
BeanUtil.copyProperties(powerStatisticsParam, rActivePowerRangeParam);
//设置查询
rActivePowerRangeParam.setSearch(true);
rActivePowerRangeParam.setSearchForAdd(true);
//执行定时任务根据前端点击的时间范围及监测点
rActivePowerRangeFeignClient.record(rActivePowerRangeParam);
//执行完就可以获取到区间数据了
RActivePowerRangePO rActivePowerRangePO = rActivePowerRangeFeignClient.getDataByLineId(powerStatisticsParam.getLineId(),
powerStatisticsParam.getSearchBeginTime(), powerStatisticsParam.getSearchEndTime()).getData();
RActivePowerRangePO rActivePowerRangePO = rActivePowerRangeService.getDataByLineId(powerStatisticsParam.getLineId(),
powerStatisticsParam.getSearchBeginTime(), powerStatisticsParam.getSearchEndTime());
//如果的确没有统计到数据则默认
if (rActivePowerRangePO == null) {
rActivePowerRangePO = new RActivePowerRangePO();
@@ -126,8 +118,8 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
RActivePowerRangeParam rActivePowerRangeParam = new RActivePowerRangeParam();
BeanUtil.copyProperties(powerStatisticsParam, rActivePowerRangeParam);
rActivePowerRangeParam.setSearch(true);
RActivePowerRangePO rActivePowerRangePO = rActivePowerRangeFeignClient.getDataByLineId(powerStatisticsParam.getLineId(),
powerStatisticsParam.getSearchBeginTime(), powerStatisticsParam.getSearchEndTime()).getData();
RActivePowerRangePO rActivePowerRangePO = rActivePowerRangeService.getDataByLineId(powerStatisticsParam.getLineId(),
powerStatisticsParam.getSearchBeginTime(), powerStatisticsParam.getSearchEndTime());
if (rActivePowerRangePO != null) {
String times = reflexObjValue(rActivePowerRangePO, "minsTime" + powerStatisticsParam.getField()).toString().replace("null", "");
rActivePowerRangeParam.setSearchTimeFort(false);
@@ -136,7 +128,7 @@ public class PowerStatisticsServiceImpl implements PowerStatisticsService {
String endTime = se.split(",")[1];
rActivePowerRangeParam.setSearchBeginTime(startTime);
rActivePowerRangeParam.setSearchEndTime(endTime);
record.addAll(rActivePowerRangeFeignClient.record(rActivePowerRangeParam).getData());
record.addAll(rActivePowerRangeService.record(rActivePowerRangeParam));
}
}
return record.stream().sorted(Comparator.comparing(PowerStatisticsTargetVO::getTime)).collect(Collectors.toList());

View File

@@ -0,0 +1,112 @@
package com.njcn.harmonic.service.activepowerrange.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.event.pojo.constant.Param;
import com.njcn.harmonic.mapper.RActivePowerRangeMapper;
import com.njcn.harmonic.pojo.po.RActivePowerRangePO;
import com.njcn.harmonic.pojo.vo.PowerStatisticsTargetVO;
import com.njcn.harmonic.service.activepowerrange.RActivePowerRangeService;
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
import com.njcn.prepare.harmonic.pojo.param.RActivePowerRangeParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* 有功功率趋势 服务实现类
*
* @author guofeihu
* @since 2024-08-22
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class RActivePowerRangeServiceImpl extends MppServiceImpl<RActivePowerRangeMapper, RActivePowerRangePO> implements RActivePowerRangeService {
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Param.DATE_FORMAT);
private final DecimalFormat df = new DecimalFormat(com.njcn.harmonic.constant.Param.DECIMAL_FORMATSTR);
private SimpleDateFormat sdf = new SimpleDateFormat(Param.DATE_FORMAT);
private List<String> PHASE = Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A, InfluxDBTableConstant.PHASE_TYPE_B, InfluxDBTableConstant.PHASE_TYPE_C);
/**
* 整个算法的业务逻辑:
* 1:查询InfluxDb的功率表:data_harmpower_p
* 2:遍历功率集合将功率(p字段) / line_id监测点绑定的新能源场站中的风电场的额定功率,看落在哪个区间内
* 3:遍历功率集合将每条功率对应的各个指标(指标的所有相别和统计方式都要一一比较)与国标限值比较看看是否越限(功率对应的各个指标详情请见下方)
* --------------------------------指标---------------------------------
* 电压偏差 data_v vu_dev 电压偏差 如果vu_dev>0,使用上偏差限值对比如果vu_dev<0,使用下偏差限值对比
* 谐波电压 data_v v_thd 电压总谐波总谐波畸变率 有一个指标超标,则谐波电压超标
* data_harmrate_v v2-v25 2-25次谐波电压含有率
* 谐波电流 data_i i2-i25 2-25次谐波电流幅值 有一个指标超标,则谐波电压超标
* 三相电压不平衡度 data_v v_unbalance
* 电压波动 data_fluc fluc
* 长时闪变 data_plt plt
* 间谐波电压含有率 data_inharm_v v1-v16 0.5-15.5次间谐波电压含有率 有一个指标超标,则谐波电压超标
* 电流不平衡度 data_i i_unbalance 这个不确定,找宝哥确认下
*
* @param rActivePowerRangeParam
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public List<PowerStatisticsTargetVO> record(RActivePowerRangeParam rActivePowerRangeParam) {
return null;
}
@Override
public RActivePowerRangePO getDataByLineId(String lineId, String startTime, String endTime) {
LambdaQueryWrapper<RActivePowerRangePO> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(RActivePowerRangePO::getLineId, lineId).eq(RActivePowerRangePO::getState, "1")
.between(RActivePowerRangePO::getTimeId, startTime, endTime);
List<RActivePowerRangePO> rActivePowerRangePOS = this.baseMapper.selectList(lambdaQueryWrapper);
if (!rActivePowerRangePOS.isEmpty()) {
RActivePowerRangePO rActivePowerRangePO = new RActivePowerRangePO();
rActivePowerRangePO.setLineId(lineId);
//多条记录则次数累加,是否越限只要有一个区间越限则统一视为该区间越限
for (RActivePowerRangePO rangePO : rActivePowerRangePOS) {
rActivePowerRangePO.setMinsNum0(rangePO.getMinsNum0() + rActivePowerRangePO.getMinsNum0());
rActivePowerRangePO.setMinsNum1(rangePO.getMinsNum1() + rActivePowerRangePO.getMinsNum1());
rActivePowerRangePO.setMinsNum2(rangePO.getMinsNum2() + rActivePowerRangePO.getMinsNum2());
rActivePowerRangePO.setMinsNum3(rangePO.getMinsNum3() + rActivePowerRangePO.getMinsNum3());
rActivePowerRangePO.setMinsNum4(rangePO.getMinsNum4() + rActivePowerRangePO.getMinsNum4());
rActivePowerRangePO.setMinsNum5(rangePO.getMinsNum5() + rActivePowerRangePO.getMinsNum5());
rActivePowerRangePO.setMinsNum6(rangePO.getMinsNum6() + rActivePowerRangePO.getMinsNum6());
rActivePowerRangePO.setMinsNum7(rangePO.getMinsNum7() + rActivePowerRangePO.getMinsNum7());
rActivePowerRangePO.setMinsNum8(rangePO.getMinsNum8() + rActivePowerRangePO.getMinsNum8());
rActivePowerRangePO.setMinsNum9(rangePO.getMinsNum9() + rActivePowerRangePO.getMinsNum9());
rActivePowerRangePO.setIsOrNot0(rangePO.getIsOrNot0() + rActivePowerRangePO.getIsOrNot0());
rActivePowerRangePO.setIsOrNot1(rangePO.getIsOrNot1() + rActivePowerRangePO.getIsOrNot1());
rActivePowerRangePO.setIsOrNot2(rangePO.getIsOrNot2() + rActivePowerRangePO.getIsOrNot2());
rActivePowerRangePO.setIsOrNot3(rangePO.getIsOrNot3() + rActivePowerRangePO.getIsOrNot3());
rActivePowerRangePO.setIsOrNot4(rangePO.getIsOrNot4() + rActivePowerRangePO.getIsOrNot4());
rActivePowerRangePO.setIsOrNot5(rangePO.getIsOrNot5() + rActivePowerRangePO.getIsOrNot5());
rActivePowerRangePO.setIsOrNot6(rangePO.getIsOrNot6() + rActivePowerRangePO.getIsOrNot6());
rActivePowerRangePO.setIsOrNot7(rangePO.getIsOrNot7() + rActivePowerRangePO.getIsOrNot7());
rActivePowerRangePO.setIsOrNot8(rangePO.getIsOrNot8() + rActivePowerRangePO.getIsOrNot8());
rActivePowerRangePO.setIsOrNot9(rangePO.getIsOrNot9() + rActivePowerRangePO.getIsOrNot9());
rActivePowerRangePO.setMinsTime0(rangePO.getMinsTime0() + "&" + rActivePowerRangePO.getMinsTime0());
rActivePowerRangePO.setMinsTime1(rangePO.getMinsTime1() + "&" + rActivePowerRangePO.getMinsTime1());
rActivePowerRangePO.setMinsTime2(rangePO.getMinsTime2() + "&" + rActivePowerRangePO.getMinsTime2());
rActivePowerRangePO.setMinsTime3(rangePO.getMinsTime3() + "&" + rActivePowerRangePO.getMinsTime3());
rActivePowerRangePO.setMinsTime4(rangePO.getMinsTime4() + "&" + rActivePowerRangePO.getMinsTime4());
rActivePowerRangePO.setMinsTime5(rangePO.getMinsTime5() + "&" + rActivePowerRangePO.getMinsTime5());
rActivePowerRangePO.setMinsTime6(rangePO.getMinsTime6() + "&" + rActivePowerRangePO.getMinsTime6());
rActivePowerRangePO.setMinsTime7(rangePO.getMinsTime7() + "&" + rActivePowerRangePO.getMinsTime7());
rActivePowerRangePO.setMinsTime8(rangePO.getMinsTime8() + "&" + rActivePowerRangePO.getMinsTime8());
rActivePowerRangePO.setMinsTime9(rangePO.getMinsTime9() + "&" + rActivePowerRangePO.getMinsTime9());
}
return rActivePowerRangePO;
}
return null;
}
}