优化算法执行速度

This commit is contained in:
2023-11-13 15:53:11 +08:00
parent f9f363133b
commit 7d9991fa20

View File

@@ -20,6 +20,7 @@ import com.njcn.prepare.harmonic.service.mysql.day.IRStatLimitRateDService;
import com.njcn.prepare.harmonic.service.mysql.line.LimitRateService; import com.njcn.prepare.harmonic.service.mysql.line.LimitRateService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -57,8 +58,18 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
@Async("asyncExecutor") @Async("asyncExecutor")
public void limitRate(CalculatedParam calculatedParam) { public void limitRate(CalculatedParam calculatedParam) {
log.info(LocalDateTime.now()+"r_stat_limit_rate_d开始执行=======》"); log.info(LocalDateTime.now()+"r_stat_limit_rate_d开始执行=======》");
List<LimitRate> limitRateList = new ArrayList<> ();
List<RStatLimitRateDPO> list = new ArrayList<>(); List<RStatLimitRateDPO> list = new ArrayList<>();
List<DataV> list1 = new ArrayList<>();
List<DataPlt> list2 = new ArrayList<>();
List<DataHarmRateV> list3 = new ArrayList<>();
List<DataI> list4 = new ArrayList<>();
List<DataInHarmV> list5 = new ArrayList<>();
List<DataV> list6 = new ArrayList<>();
List<DataV> list7 = new ArrayList<>();
List<DataI> list8 = new ArrayList<>();
List<DataV> list9 = new ArrayList<>();
List<DataV> list10 = new ArrayList<>();
List<DataPlt> list11 = new ArrayList<>();
List<String> lineIds = calculatedParam.getIdList(); List<String> lineIds = calculatedParam.getIdList();
String startTime = LocalDateTimeUtil.format( String startTime = LocalDateTimeUtil.format(
LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)), LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),
@@ -68,35 +79,47 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)), LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),
DatePattern.NORM_DATETIME_PATTERN DatePattern.NORM_DATETIME_PATTERN
); );
for (int i = 0; i <lineIds.size () ; i++) { //获取所有监测点的限值
String lineIndex =lineIds.get (i); List<Overlimit> overLimitList = commTerminalGeneralClient.getAllLineOverLimit().getData();
Overlimit overlimit = commTerminalGeneralClient.getOverLimitData(lineIndex).getData (); Map<String,List<Overlimit>> overLimitMap = overLimitList.stream().collect(Collectors.groupingBy(Overlimit::getId));
if(!Optional.ofNullable (overlimit).isPresent ()){ //以尺寸100分片,查询数据
continue; List<List<String>> pendingIds = ListUtils.partition(lineIds,100);
for (List<String> pendingId : pendingIds) {
list1.addAll(getAllTime(pendingId, startTime, endTime));
list2.addAll(getFlickerAllTime(pendingId, startTime, endTime));
list3.addAll(getDataHarmRateV(pendingId, startTime, endTime));
list4.addAll(getDataI(pendingId, startTime, endTime));
list5.addAll(getDataInHarmV(pendingId, startTime, endTime));
list6.addAll(getDataVThd(pendingId, startTime, endTime));
list7.addAll(getDataVUnbalance(pendingId, startTime, endTime));
list8.addAll(getDataINeg(pendingId, startTime, endTime));
list9.addAll(getDataVFreq(pendingId, startTime, endTime));
list10.addAll(getDataVDev(pendingId, startTime, endTime));
list11.addAll(getDataPlt(pendingId, startTime, endTime));
} }
List<DataV> map1 = getAllTime(lineIndex,startTime,endTime); //数据处理,按监测点分组
List<DataPlt> map2 = getFlickerAllTime(lineIndex,startTime,endTime); Map<String,List<DataV>> map1 = list1.stream().collect(Collectors.groupingBy(DataV::getLineId));
List<DataHarmRateV> map3 = getDataHarmRateV(lineIndex,startTime,endTime); Map<String,List<DataPlt>> map2 = list2.stream().collect(Collectors.groupingBy(DataPlt::getLineId));
List<DataI> map4 = getDataI(lineIndex,startTime,endTime); Map<String,List<DataHarmRateV>> map3 = list3.stream().collect(Collectors.groupingBy(DataHarmRateV::getLineId));
List<DataInHarmV> map5 = getDataInHarmV(lineIndex,startTime,endTime); Map<String,List<DataI>> map4 = list4.stream().collect(Collectors.groupingBy(DataI::getLineId));
List<DataV> map6 = getDataV(lineIndex,startTime,endTime); Map<String,List<DataInHarmV>> map5 = list5.stream().collect(Collectors.groupingBy(DataInHarmV::getLineId));
List<DataV> map7 = getDataVUnbalance(lineIndex,startTime,endTime); Map<String,List<DataV>> map6 = list6.stream().collect(Collectors.groupingBy(DataV::getLineId));
List<DataI> map8 = getDataINeg(lineIndex,startTime,endTime); Map<String,List<DataV>> map7 = list7.stream().collect(Collectors.groupingBy(DataV::getLineId));
List<DataV> map9 = getDataVFreq(lineIndex,startTime,endTime); Map<String,List<DataI>> map8 = list8.stream().collect(Collectors.groupingBy(DataI::getLineId));
List<DataV> map10 = getDataVDev(lineIndex,startTime,endTime); Map<String,List<DataV>> map9 = list9.stream().collect(Collectors.groupingBy(DataV::getLineId));
List<DataPlt> map11 = getDataPlt(lineIndex,startTime,endTime); Map<String,List<DataV>> map10 = list10.stream().collect(Collectors.groupingBy(DataV::getLineId));
Map<String,List<DataPlt>> map11 = list11.stream().collect(Collectors.groupingBy(DataPlt::getLineId));
List<LimitRate> result = getData(overlimit,map1,map2,map3,map4,map5,map6,map7,map8,map9,map10,map11); for (String item : lineIds) {
limitRateList.addAll (result); List<LimitRate> result = getData(overLimitMap.get(item).get(0), map1.get(item), map2.get(item), map3.get(item), map4.get(item), map5.get(item), map6.get(item), map7.get(item), map8.get(item), map9.get(item), map10.get(item), map11.get(item));
List<RStatLimitRateDPO> collect = result.stream().map (t -> { List<RStatLimitRateDPO> collect = result.stream().map(t -> {
RStatLimitRateDPO po = new RStatLimitRateDPO(); RStatLimitRateDPO po = new RStatLimitRateDPO();
NjcnBeanUtil.copyPropertiesIgnoreCase (t,po); NjcnBeanUtil.copyPropertiesIgnoreCase(t, po);
po.setTime(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)); po.setTime(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
return po; return po;
}).collect (Collectors.toList()); }).collect(Collectors.toList());
list.addAll(collect); list.addAll(collect);
} }
if (!CollectionUtils.isEmpty(limitRateList)){ if (!CollectionUtils.isEmpty(list)){
/*插入mysql*/ /*插入mysql*/
statLimitRateDService.saveOrUpdateBatchByMultiId(list,1000); statLimitRateDService.saveOrUpdateBatchByMultiId(list,1000);
} }
@@ -111,9 +134,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataV> getAllTime(String lineIndex, String startTime, String endTime) { public List<DataV> getAllTime(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.eq(DataV::getLineId, lineIndex) influxQueryWrapper.regular(DataV::getLineId, lineIndex)
.eq(DataV::getValueType, InfluxDbSqlConstant.AVG_WEB) .eq(DataV::getValueType, InfluxDbSqlConstant.AVG_WEB)
.eq(DataV::getPhasicType, InfluxDBTableConstant.PHASE_TYPE_A) .eq(DataV::getPhasicType, InfluxDBTableConstant.PHASE_TYPE_A)
.eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -132,9 +155,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataPlt> getFlickerAllTime(String lineIndex, String startTime, String endTime) { public List<DataPlt> getFlickerAllTime(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class);
influxQueryWrapper.eq(DataPlt::getLineId, lineIndex) influxQueryWrapper.regular(DataPlt::getLineId, lineIndex)
.eq(DataPlt::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_A) .eq(DataPlt::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_A)
.eq(DataPlt::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataPlt::getQualityFlag, InfluxDBTableConstant.NORMAL)
.count(DataPlt::getPlt,DataPlt::getFlickerAllTime) .count(DataPlt::getPlt,DataPlt::getFlickerAllTime)
@@ -152,9 +175,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataHarmRateV> getDataHarmRateV(String lineIndex, String startTime, String endTime) { public List<DataHarmRateV> getDataHarmRateV(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmRateV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmRateV.class);
influxQueryWrapper.eq(DataHarmRateV::getLineId, lineIndex) influxQueryWrapper.regular(DataHarmRateV::getLineId, lineIndex)
.regular(DataHarmRateV::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C)) .regular(DataHarmRateV::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C))
.eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95) .eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95)
.eq(DataHarmRateV::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataHarmRateV::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -170,9 +193,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @param endTime 结束时间 * @param endTime 结束时间
* @Date: 2022/10/18 * @Date: 2022/10/18
*/ */
public List<DataI> getDataI(String lineIndex, String startTime, String endTime) { public List<DataI> getDataI(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class);
influxQueryWrapper.eq(DataI::getLineId, lineIndex) influxQueryWrapper.regular(DataI::getLineId, lineIndex)
.regular(DataI::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C)) .regular(DataI::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C))
.eq(DataI::getValueType, InfluxDBTableConstant.CP95) .eq(DataI::getValueType, InfluxDBTableConstant.CP95)
.eq(DataI::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataI::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -189,9 +212,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataInHarmV> getDataInHarmV(String lineIndex, String startTime, String endTime) { public List<DataInHarmV> getDataInHarmV(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataInHarmV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataInHarmV.class);
influxQueryWrapper.eq(DataInHarmV::getLineId, lineIndex) influxQueryWrapper.regular(DataInHarmV::getLineId, lineIndex)
.regular(DataInHarmV::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C)) .regular(DataInHarmV::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C))
.eq(DataInHarmV::getValueType, InfluxDBTableConstant.CP95) .eq(DataInHarmV::getValueType, InfluxDBTableConstant.CP95)
.eq(DataInHarmV::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataInHarmV::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -208,9 +231,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataV> getDataV(String lineIndex, String startTime, String endTime) { public List<DataV> getDataVThd(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.eq(DataV::getLineId, lineIndex) influxQueryWrapper.regular(DataV::getLineId, lineIndex)
.eq(DataV::getValueType, InfluxDbSqlConstant.CP95) .eq(DataV::getValueType, InfluxDbSqlConstant.CP95)
.regular(DataV::getPhasicType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C)) .regular(DataV::getPhasicType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C))
.eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -227,9 +250,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataV> getDataVUnbalance(String lineIndex, String startTime, String endTime) { public List<DataV> getDataVUnbalance(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.eq(DataV::getLineId, lineIndex) influxQueryWrapper.regular(DataV::getLineId, lineIndex)
.regular(DataV::getValueType, Arrays.asList(InfluxDbSqlConstant.CP95,InfluxDbSqlConstant.MAX)) .regular(DataV::getValueType, Arrays.asList(InfluxDbSqlConstant.CP95,InfluxDbSqlConstant.MAX))
.eq(DataV::getPhasicType, InfluxDBTableConstant.PHASE_TYPE_T) .eq(DataV::getPhasicType, InfluxDBTableConstant.PHASE_TYPE_T)
.eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -246,9 +269,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataI> getDataINeg(String lineIndex, String startTime, String endTime) { public List<DataI> getDataINeg(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class);
influxQueryWrapper.eq(DataI::getLineId, lineIndex) influxQueryWrapper.regular(DataI::getLineId, lineIndex)
.eq(DataI::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_T) .eq(DataI::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_T)
.regular(DataI::getValueType, Arrays.asList(InfluxDbSqlConstant.CP95,InfluxDbSqlConstant.MAX)) .regular(DataI::getValueType, Arrays.asList(InfluxDbSqlConstant.CP95,InfluxDbSqlConstant.MAX))
.eq(DataI::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataI::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -265,9 +288,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataV> getDataVFreq(String lineIndex, String startTime, String endTime) { public List<DataV> getDataVFreq(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.eq(DataV::getLineId, lineIndex) influxQueryWrapper.regular(DataV::getLineId, lineIndex)
.regular(DataV::getValueType, Arrays.asList(InfluxDbSqlConstant.MIN,InfluxDbSqlConstant.MAX)) .regular(DataV::getValueType, Arrays.asList(InfluxDbSqlConstant.MIN,InfluxDbSqlConstant.MAX))
.eq(DataV::getPhasicType, InfluxDBTableConstant.PHASE_TYPE_T) .eq(DataV::getPhasicType, InfluxDBTableConstant.PHASE_TYPE_T)
.eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -284,9 +307,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataV> getDataVDev(String lineIndex, String startTime, String endTime) { public List<DataV> getDataVDev(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.eq(DataV::getLineId, lineIndex) influxQueryWrapper.regular(DataV::getLineId, lineIndex)
.eq(DataV::getValueType, InfluxDbSqlConstant.MAX) .eq(DataV::getValueType, InfluxDbSqlConstant.MAX)
.regular(DataV::getPhasicType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C)) .regular(DataV::getPhasicType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C))
.eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL)
@@ -303,9 +326,9 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
* @return * @return
* @date 2022/5/23 10:51 * @date 2022/5/23 10:51
*/ */
public List<DataPlt> getDataPlt(String lineIndex, String startTime, String endTime) { public List<DataPlt> getDataPlt(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class);
influxQueryWrapper.eq(DataPlt::getLineId, lineIndex) influxQueryWrapper.regular(DataPlt::getLineId, lineIndex)
.regular(DataPlt::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C)) .regular(DataPlt::getPhaseType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C))
.eq(DataPlt::getQualityFlag, InfluxDBTableConstant.NORMAL) .eq(DataPlt::getQualityFlag, InfluxDBTableConstant.NORMAL)
.between(DataPlt::getTime, startTime, endTime); .between(DataPlt::getTime, startTime, endTime);