优化算法执行速度

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