Commit 1ccd0ea3 authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.开发间开优化结果统计功能,创建间开优化效果统计表,生成对应代码;
2.修改15天,10天,3天,1天间开优化功能,修改代码结构;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 8fc5cf92
...@@ -195,7 +195,6 @@ public class BusinessConstant { ...@@ -195,7 +195,6 @@ public class BusinessConstant {
*/ */
public static final BigDecimal BIG_DECIMAL_0_4 = BigDecimal.valueOf(0.4); public static final BigDecimal BIG_DECIMAL_0_4 = BigDecimal.valueOf(0.4);
/** /**
* 2 * 2
*/ */
...@@ -211,6 +210,11 @@ public class BusinessConstant { ...@@ -211,6 +210,11 @@ public class BusinessConstant {
*/ */
public static final BigDecimal BIG_DECIMAL_4 = BigDecimal.valueOf(4); public static final BigDecimal BIG_DECIMAL_4 = BigDecimal.valueOf(4);
/**
* 15
*/
public static final BigDecimal BIG_DECIMAL_15 = BigDecimal.valueOf(15);
/** /**
* 24 * 24
*/ */
......
...@@ -40,27 +40,27 @@ public class SpaceOptimizeEffectEnt extends BaseModel implements Serializable { ...@@ -40,27 +40,27 @@ public class SpaceOptimizeEffectEnt extends BaseModel implements Serializable {
@TableField @TableField
private String optimalResult; private String optimalResult;
@XText("优化前总开井时长(h)") @XText("优化前总开井时长(min)")
@TableField @TableField
private BigDecimal totalDuration; private BigDecimal totalDuration;
@XText("优化前绿电开井时长(h)") @XText("优化前绿电开井时长(min)")
@TableField @TableField
private BigDecimal greenPowerDuration; private BigDecimal greenPowerDuration;
@XText("优化前谷电开井时长(h)") @XText("优化前谷电开井时长(min)")
@TableField @TableField
private BigDecimal lowPowerDuration; private BigDecimal lowPowerDuration;
@XText("优化前平电开井时长(h)") @XText("优化前平电开井时长(min)")
@TableField @TableField
private BigDecimal midPowerDuration; private BigDecimal midPowerDuration;
@XText("优化前高峰电开井时长(h)") @XText("优化前高峰电开井时长(min)")
@TableField @TableField
private BigDecimal highPowerDuration; private BigDecimal highPowerDuration;
@XText("优化前尖峰电开井时长(h)") @XText("优化前尖峰电开井时长(min)")
@TableField @TableField
private BigDecimal peakPowerDuration; private BigDecimal peakPowerDuration;
...@@ -72,27 +72,27 @@ public class SpaceOptimizeEffectEnt extends BaseModel implements Serializable { ...@@ -72,27 +72,27 @@ public class SpaceOptimizeEffectEnt extends BaseModel implements Serializable {
@TableField @TableField
private BigDecimal powerCost; private BigDecimal powerCost;
@XText("优化后总开井时长(h)") @XText("优化后总开井时长(min)")
@TableField @TableField
private BigDecimal optimalTotalDuration; private BigDecimal optimalTotalDuration;
@XText("优化后绿电开井时长(h)") @XText("优化后绿电开井时长(min)")
@TableField @TableField
private BigDecimal optimalGreenPowerDuration; private BigDecimal optimalGreenPowerDuration;
@XText("优化后谷电开井时长(h)") @XText("优化后谷电开井时长(min)")
@TableField @TableField
private BigDecimal optimalLowPowerDuration; private BigDecimal optimalLowPowerDuration;
@XText("优化后平电开井时长(h)") @XText("优化后平电开井时长(min)")
@TableField @TableField
private BigDecimal optimalMidPowerDuration; private BigDecimal optimalMidPowerDuration;
@XText("优化后高峰电开井时长(h)") @XText("优化后高峰电开井时长(min)")
@TableField @TableField
private BigDecimal optimalHighPowerDuration; private BigDecimal optimalHighPowerDuration;
@XText("优化后尖峰电开井时长(h)") @XText("优化后尖峰电开井时长(min)")
@TableField @TableField
private BigDecimal optimalPeakPowerDuration; private BigDecimal optimalPeakPowerDuration;
......
...@@ -38,27 +38,27 @@ public class SpaceOptimizeEffectView extends BaseModel implements Serializable { ...@@ -38,27 +38,27 @@ public class SpaceOptimizeEffectView extends BaseModel implements Serializable {
@TableField @TableField
private String optimalResult; private String optimalResult;
@XText("优化前总开井时长(h)") @XText("优化前总开井时长(min)")
@TableField @TableField
private BigDecimal totalDuration; private BigDecimal totalDuration;
@XText("优化前绿电开井时长(h)") @XText("优化前绿电开井时长(min)")
@TableField @TableField
private BigDecimal greenPowerDuration; private BigDecimal greenPowerDuration;
@XText("优化前谷电开井时长(h)") @XText("优化前谷电开井时长(min)")
@TableField @TableField
private BigDecimal lowPowerDuration; private BigDecimal lowPowerDuration;
@XText("优化前平电开井时长(h)") @XText("优化前平电开井时长(min)")
@TableField @TableField
private BigDecimal midPowerDuration; private BigDecimal midPowerDuration;
@XText("优化前高峰电开井时长(h)") @XText("优化前高峰电开井时长(min)")
@TableField @TableField
private BigDecimal highPowerDuration; private BigDecimal highPowerDuration;
@XText("优化前尖峰电开井时长(h)") @XText("优化前尖峰电开井时长(min)")
@TableField @TableField
private BigDecimal peakPowerDuration; private BigDecimal peakPowerDuration;
...@@ -70,27 +70,27 @@ public class SpaceOptimizeEffectView extends BaseModel implements Serializable { ...@@ -70,27 +70,27 @@ public class SpaceOptimizeEffectView extends BaseModel implements Serializable {
@TableField @TableField
private BigDecimal powerCost; private BigDecimal powerCost;
@XText("优化后总开井时长(h)") @XText("优化后总开井时长(min)")
@TableField @TableField
private BigDecimal optimalTotalDuration; private BigDecimal optimalTotalDuration;
@XText("优化后绿电开井时长(h)") @XText("优化后绿电开井时长(min)")
@TableField @TableField
private BigDecimal optimalGreenPowerDuration; private BigDecimal optimalGreenPowerDuration;
@XText("优化后谷电开井时长(h)") @XText("优化后谷电开井时长(min)")
@TableField @TableField
private BigDecimal optimalLowPowerDuration; private BigDecimal optimalLowPowerDuration;
@XText("优化后平电开井时长(h)") @XText("优化后平电开井时长(min)")
@TableField @TableField
private BigDecimal optimalMidPowerDuration; private BigDecimal optimalMidPowerDuration;
@XText("优化后高峰电开井时长(h)") @XText("优化后高峰电开井时长(min)")
@TableField @TableField
private BigDecimal optimalHighPowerDuration; private BigDecimal optimalHighPowerDuration;
@XText("优化后尖峰电开井时长(h)") @XText("优化后尖峰电开井时长(min)")
@TableField @TableField
private BigDecimal optimalPeakPowerDuration; private BigDecimal optimalPeakPowerDuration;
......
...@@ -8,7 +8,6 @@ import cn.hutool.core.date.DateUtil; ...@@ -8,7 +8,6 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.cloud.base.service.IBasePowerLineCloudService; import pps.cloud.base.service.IBasePowerLineCloudService;
...@@ -160,8 +159,20 @@ public class SpaceOptimizeBaseService { ...@@ -160,8 +159,20 @@ public class SpaceOptimizeBaseService {
String monthBaseOne; String monthBaseOne;
Map<String, List<GetBasePriceStrategyDetailOutput>> monthStrategyMap; Map<String, List<GetBasePriceStrategyDetailOutput>> monthStrategyMap;
List<GetBasePriceStrategyDetailOutput> monthStrategyList = null; List<GetBasePriceStrategyDetailOutput> monthStrategyList = null;
SpaceInstitutionWellheadView baseWell;
BigDecimal serviceRating; BigDecimal serviceRating;
List<SpaceOptimizeWeight> weightList; List<SpaceOptimizeWeight> weightList;
Map<String, Map<Date, List<SpaceOptimizeDurationDTO>>> periodDurationMap;
Map<Date, List<SpaceOptimizeDurationDTO>> durationMap;
List<SpaceOptimizeDurationDTO> durationList;
DateTime timestamp;
DateTime openTime;
DateTime closeTime;
StringBuilder optimalResult = new StringBuilder();
int weightIndex;
SpaceOptimizeWeight weight;
SpaceOptimizeEffectView effectView;
List<SpaceOptimizeEffectView> effectList = new ArrayList<>(baseWellMap.size() * offset);
for (SpaceOptimizePeriodDTO period : periodDTOList) { for (SpaceOptimizePeriodDTO period : periodDTOList) {
//取线路 //取线路
if (!lineMap.containsKey(period.getLineId())) { if (!lineMap.containsKey(period.getLineId())) {
...@@ -201,18 +212,159 @@ public class SpaceOptimizeBaseService { ...@@ -201,18 +212,159 @@ public class SpaceOptimizeBaseService {
.build()); .build());
//遍历井 //遍历井
for (SpaceOptimizeWellheadDTO spaceWell : wellDateMap.get(begin)) { for (SpaceOptimizeWellheadDTO spaceWell : wellDateMap.get(begin)) {
//取井运行功率 //取井
if (baseWellMap.containsKey(spaceWell.getWellheadId())) { if (baseWellMap.containsKey(spaceWell.getWellheadId())) {
serviceRating = baseWellMap.get(spaceWell.getWellheadId()).getServiceRating(); baseWell = baseWellMap.get(spaceWell.getWellheadId());
} else { } else {
serviceRating = BigDecimal.ZERO; continue;
} }
//初始化(绿电时长,谷电时长,平电时长,高峰时长,尖峰时长)
BigDecimal greenPowerDuration = BigDecimal.ZERO;
BigDecimal lowPowerDuration = BigDecimal.ZERO;
BigDecimal midPowerDuration = BigDecimal.ZERO;
BigDecimal highPowerDuration = BigDecimal.ZERO;
BigDecimal peakPowerDuration = BigDecimal.ZERO;
BigDecimal totalDuration = BigDecimal.ZERO;
effectView = new SpaceOptimizeEffectView();
//取井运行功率
serviceRating = ObjectUtil.defaultIfNull(baseWell.getServiceRating(), BigDecimal.ZERO);
//计算权重(要去头 index从1开始) //计算权重(要去头 index从1开始)
weightList = this.zoningList(serviceRating, rangeToList, powerList, monthStrategyList); weightList = this.zoningList(serviceRating, rangeToList, powerList, monthStrategyList);
System.out.println(JSONUtil.toJsonStr(weightList)); //取间开
if (optimizeMap.containsKey(period.getId())) {
periodDurationMap = optimizeMap.get(period.getId());
if (periodDurationMap.containsKey(spaceWell.getWellheadId())) {
durationMap = periodDurationMap.get(spaceWell.getWellheadId());
if (durationMap.containsKey(begin)) {
durationList = durationMap.get(begin);
//计算时长
weightIndex = 1;
for (SpaceOptimizeDurationDTO duration : durationList) {
optimalResult.append(duration.getOpenWellTime())
.append("至")
.append(duration.getCloseWellTime())
.append("开井;");
openTime = DateUtil.parse(duration.getOpenWellTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
if (CharSequenceUtil.equals(duration.getCloseWellTime(), BusinessConstant.END_OF_DAY_TIME)) {
closeTime = BusinessConstant.DATE_FLAG;
} else {
closeTime = DateUtil.parse(duration.getCloseWellTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
}
for (int i = weightIndex; i < weightList.size(); i++) {
weight = weightList.get(i);
timestamp = weight.getTimestamp();
if (DateUtil.compare(timestamp, openTime) > 0 && DateUtil.compare(timestamp, closeTime) <= 0) {
switch (weight.getWeight()) {
case 0:
peakPowerDuration = peakPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 1:
highPowerDuration = highPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 3:
midPowerDuration = midPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 5:
lowPowerDuration = lowPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 10:
greenPowerDuration = greenPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
default:
}
totalDuration = totalDuration.add(BusinessConstant.BIG_DECIMAL_15);
} else if (DateUtil.compare(timestamp, closeTime) > 0) {
weightIndex = i;
break;
}
}
}
}
}
}
BaseUtils.setBaseModelDefaultForJob(effectView);
effectView.setOptimizeDate(begin);
effectView.setPeriodId(period.getId());
effectView.setWellheadId(baseWell.getWellheadId());
effectView.setWellNumber(baseWell.getWellNumber());
effectView.setOptimalGreenPowerDuration(greenPowerDuration);
effectView.setOptimalLowPowerDuration(lowPowerDuration);
effectView.setOptimalMidPowerDuration(midPowerDuration);
effectView.setOptimalHighPowerDuration(highPowerDuration);
effectView.setOptimalPeakPowerDuration(peakPowerDuration);
effectView.setOptimalTotalDuration(totalDuration);
effectView.setOptimalResult(optimalResult.toString());
optimalResult.delete(0, optimalResult.length());
//初始化
greenPowerDuration = BigDecimal.ZERO;
lowPowerDuration = BigDecimal.ZERO;
midPowerDuration = BigDecimal.ZERO;
highPowerDuration = BigDecimal.ZERO;
peakPowerDuration = BigDecimal.ZERO;
totalDuration = BigDecimal.ZERO;
if (unOptimizeMap.containsKey(period.getId())) {
periodDurationMap = unOptimizeMap.get(period.getId());
if (periodDurationMap.containsKey(spaceWell.getWellheadId())) {
durationMap = periodDurationMap.get(spaceWell.getWellheadId());
if (durationMap.containsKey(begin)) {
durationList = durationMap.get(begin);
//计算时长
weightIndex = 1;
for (SpaceOptimizeDurationDTO duration : durationList) {
openTime = DateUtil.parse(duration.getOpenWellTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
if (CharSequenceUtil.equals(duration.getCloseWellTime(), BusinessConstant.END_OF_DAY_TIME)) {
closeTime = BusinessConstant.DATE_FLAG;
} else {
closeTime = DateUtil.parse(duration.getCloseWellTime() + BusinessConstant.INITIALIZATION_SECOND, BusinessConstant.TIME_FORMAT);
}
for (int i = weightIndex; i < weightList.size(); i++) {
weight = weightList.get(i);
timestamp = weight.getTimestamp();
if (DateUtil.compare(timestamp, openTime) > 0 && DateUtil.compare(timestamp, closeTime) <= 0) {
switch (weight.getWeight()) {
case 0:
peakPowerDuration = peakPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 1:
highPowerDuration = highPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 3:
midPowerDuration = midPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 5:
lowPowerDuration = lowPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
case 10:
greenPowerDuration = greenPowerDuration.add(BusinessConstant.BIG_DECIMAL_15);
break;
default:
}
totalDuration = totalDuration.add(BusinessConstant.BIG_DECIMAL_15);
} else if (DateUtil.compare(timestamp, closeTime) > 0) {
weightIndex = i;
break;
}
}
}
}
}
}
effectView.setGreenPowerDuration(greenPowerDuration);
effectView.setLowPowerDuration(lowPowerDuration);
effectView.setMidPowerDuration(midPowerDuration);
effectView.setHighPowerDuration(highPowerDuration);
effectView.setPeakPowerDuration(peakPowerDuration);
effectView.setTotalDuration(totalDuration);
//计算绿电占比
effectView.setGreenPowerRate(BaseUtils.getRate(effectView.getGreenPowerDuration(), effectView.getTotalDuration()));
effectView.setOptimalGreenPowerRate(BaseUtils.getRate(effectView.getOptimalGreenPowerDuration(), effectView.getOptimalTotalDuration()));
effectView.setGreenPowerUpgrade(effectView.getOptimalGreenPowerRate().subtract(effectView.getGreenPowerRate()));
effectList.add(effectView);
} }
} }
} }
System.out.println();
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment