|
@@ -9,14 +9,13 @@ import com.gyee.power.fitting.common.util.DateUtil;
|
|
|
import com.gyee.power.fitting.common.util.FileUtil;
|
|
|
import com.gyee.power.fitting.common.util.PowerFittingUtil;
|
|
|
import com.gyee.power.fitting.common.util.SnowFlakeUtil;
|
|
|
-import com.gyee.power.fitting.model.Modelpowerdetails;
|
|
|
-import com.gyee.power.fitting.model.Powerfittinganalysis;
|
|
|
-import com.gyee.power.fitting.model.Powermodel;
|
|
|
+import com.gyee.power.fitting.model.*;
|
|
|
import com.gyee.power.fitting.model.anno.AnnotationTool;
|
|
|
import com.gyee.power.fitting.model.anno.FixedVo;
|
|
|
import com.gyee.power.fitting.model.custom.*;
|
|
|
import com.gyee.power.fitting.service.PowerfittinganalysisService;
|
|
|
import com.gyee.power.fitting.service.PowermodelService;
|
|
|
+import com.gyee.power.fitting.service.ProEconPowerFittingAnalySisService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import lombok.val;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -45,7 +44,7 @@ public class DataFittingService {
|
|
|
@Resource
|
|
|
private DataScanService dataScanService;
|
|
|
@Resource
|
|
|
- private PowerfittinganalysisService powerService;
|
|
|
+ private ProEconPowerFittingAnalySisService powerService;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -58,62 +57,62 @@ public class DataFittingService {
|
|
|
* @param dimension
|
|
|
* @param mode 拟合方式 0:单台拟合 1:合并拟合 2:同名拟合
|
|
|
*/
|
|
|
- public Powerfittinganalysis dataFitting(String ids, Double maxs, Double mins, Double maxp, Double minp, Integer dimension, Integer mode){
|
|
|
- AtomicReference<Powerfittinganalysis> object = new AtomicReference<>();
|
|
|
+ public ProEconPowerFittingAnalySis dataFitting(String ids, Double maxs, Double mins, Double maxp, Double minp, Integer dimension, Integer mode){
|
|
|
+ AtomicReference<ProEconPowerFittingAnalySis> object = new AtomicReference<>();
|
|
|
|
|
|
if (mode == 0){ //单台拟合
|
|
|
String[] splitId = ids.split(",");
|
|
|
for (String id : splitId) {
|
|
|
- List<Powerfittinganalysis> list = powerService.selectListByIds(id);
|
|
|
+ List<ProEconPowerFittingAnalySis> list = powerService.selectListByIds(id);
|
|
|
List<Double> arraySpeed = new ArrayList<>();
|
|
|
List<Double> arrayPower = new ArrayList<>();
|
|
|
List<String> line = FileUtil.readFile(list.get(0).getPath(), true);
|
|
|
csvParse(line, arraySpeed, arrayPower, mins, maxs, minp, maxp);
|
|
|
- List<Modelpowerdetails> mp = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(list.get(0).getWindturbine()).getModelid());
|
|
|
- Double maxP = mp.stream().map(Modelpowerdetails::getEnsurepower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
+ List<ProBasicModelPower> mp = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(list.get(0).getWindturbineId()).getModelId());
|
|
|
+ Double maxP = mp.stream().map(ProBasicModelPower::getEnsurePower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
object.set(fittingMode(list, maxP, arraySpeed, arrayPower, dimension, mode));
|
|
|
}
|
|
|
}
|
|
|
if (mode == 1){ //合并拟合
|
|
|
- List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
|
|
|
+ List<ProEconPowerFittingAnalySis> list = powerService.selectListByIds(ids);
|
|
|
AtomicReference<Double> maxP = new AtomicReference<>(0.0);
|
|
|
List<Double> arraySpeed = new ArrayList<>();
|
|
|
List<Double> arrayPower = new ArrayList<>();
|
|
|
- for (Powerfittinganalysis obj : list){
|
|
|
+ for (ProEconPowerFittingAnalySis obj : list){
|
|
|
List<String> line = FileUtil.readFile(obj.getPath(), true);
|
|
|
csvParse(line, arraySpeed, arrayPower, mins, maxs, minp, maxp);
|
|
|
- List<Modelpowerdetails> mp = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(obj.getWindturbine()).getModelid());
|
|
|
- Double maxPower = mp.stream().map(Modelpowerdetails::getEnsurepower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
+ List<ProBasicModelPower> mp = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbineId()).getModelId());
|
|
|
+ Double maxPower = mp.stream().map(ProBasicModelPower::getEnsurePower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
if (maxPower > maxP.get()) maxP.set(maxPower);
|
|
|
}
|
|
|
object.set(fittingMode(list, maxP.get(), arraySpeed, arrayPower, dimension, mode));
|
|
|
}
|
|
|
if (mode == 2){ //同名拟合
|
|
|
- List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
|
|
|
- Map<String, List<Powerfittinganalysis>> map = list.stream().collect(Collectors.groupingBy(d -> d.getWindturbine()));
|
|
|
+ List<ProEconPowerFittingAnalySis> list = powerService.selectListByIds(ids);
|
|
|
+ Map<String, List<ProEconPowerFittingAnalySis>> map = list.stream().collect(Collectors.groupingBy(d -> d.getWindturbineId()));
|
|
|
map.forEach((k, ls) -> {
|
|
|
if (ls.size() > 1){
|
|
|
double maxP = 0;
|
|
|
- List<Modelpowerdetails> mp = null;
|
|
|
+ List<ProBasicModelPower> mp = null;
|
|
|
List<Double> arraySpeed = new ArrayList<>();
|
|
|
List<Double> arrayPower = new ArrayList<>();
|
|
|
- for (Powerfittinganalysis obj : ls){
|
|
|
+ for (ProEconPowerFittingAnalySis obj : ls){
|
|
|
List<String> line = FileUtil.readFile(obj.getPath(), true);
|
|
|
csvParse(line, arraySpeed, arrayPower, mins, maxs, minp, maxp);
|
|
|
- mp = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(obj.getWindturbine()).getModelid());
|
|
|
- maxP = mp.stream().map(Modelpowerdetails::getEnsurepower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
+ mp = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbineId()).getModelId());
|
|
|
+ maxP = mp.stream().map(ProBasicModelPower::getEnsurePower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
}
|
|
|
object.set(fittingMode(ls, maxP, arraySpeed, arrayPower, dimension, mode));
|
|
|
}else {
|
|
|
- for (Powerfittinganalysis obj : ls) {
|
|
|
- List<Powerfittinganalysis> collect = new ArrayList<>();
|
|
|
+ for (ProEconPowerFittingAnalySis obj : ls) {
|
|
|
+ List<ProEconPowerFittingAnalySis> collect = new ArrayList<>();
|
|
|
collect.add(obj);
|
|
|
List<Double> arraySpeed = new ArrayList<>();
|
|
|
List<Double> arrayPower = new ArrayList<>();
|
|
|
List<String> line = FileUtil.readFile(collect.get(0).getPath(), true);
|
|
|
csvParse(line, arraySpeed, arrayPower, mins, maxs, minp, maxp);
|
|
|
- List<Modelpowerdetails> mp = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(list.get(0).getWindturbine()).getModelid());
|
|
|
- Double maxP = mp.stream().map(Modelpowerdetails::getEnsurepower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
+ List<ProBasicModelPower> mp = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(list.get(0).getWindturbineId()).getModelId());
|
|
|
+ Double maxP = mp.stream().map(ProBasicModelPower::getEnsurePower).max(Comparator.comparing(Double::doubleValue)).get();
|
|
|
object.set(fittingMode(collect, maxP, arraySpeed, arrayPower, dimension, mode));
|
|
|
}
|
|
|
}
|
|
@@ -129,7 +128,7 @@ public class DataFittingService {
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Object> dataFittingTree(){
|
|
|
- List<Powerfittinganalysis> list = powerService.selectList(Constants.DATA_FITTING);
|
|
|
+ List<ProEconPowerFittingAnalySis> list = powerService.selectList(Constants.DATA_FITTING);
|
|
|
List<Object> ls = PowerFittingUtil.powerDataTree(list, Constants.DATA_FITTING);
|
|
|
return ls;
|
|
|
}
|
|
@@ -149,7 +148,7 @@ public class DataFittingService {
|
|
|
|
|
|
/** 添加内容 **/
|
|
|
List<PowerFittingData> list = new ArrayList<>();
|
|
|
- Powerfittinganalysis obj = powerService.selectItemById(id);
|
|
|
+ ProEconPowerFittingAnalySis obj = powerService.selectItemById(id);
|
|
|
List<String> ls = FileUtil.readFile(obj.getPath(), false);
|
|
|
for (int i = 1; i < ls.size(); i++){
|
|
|
PowerFittingData data = new PowerFittingData(ls.get(i).split(","));
|
|
@@ -173,7 +172,7 @@ public class DataFittingService {
|
|
|
*/
|
|
|
public Map<String, Object> dataFittingCurve(String id){
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
- Powerfittinganalysis obj = powerService.selectItemById(id);
|
|
|
+ ProEconPowerFittingAnalySis obj = powerService.selectItemById(id);
|
|
|
|
|
|
//实际功率、风速、Cp值
|
|
|
List<Object> sjglList = new ArrayList<>();
|
|
@@ -186,22 +185,22 @@ public class DataFittingService {
|
|
|
}
|
|
|
|
|
|
//保证功率
|
|
|
- List<Modelpowerdetails> modelPower = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(obj.getWindturbine()).getModelid());
|
|
|
- List<Object> bzglList = modelPower.stream().sorted(Comparator.comparing(Modelpowerdetails::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurepower()}).collect(Collectors.toList());
|
|
|
+ List<ProBasicModelPower> modelPower = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbineId()).getModelId());
|
|
|
+ List<Object> bzglList = modelPower.stream().sorted(Comparator.comparing(ProBasicModelPower::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurePower()}).collect(Collectors.toList());
|
|
|
|
|
|
//散点
|
|
|
String[] ids = obj.getProcessid().split(",");
|
|
|
List<PowerPointData> yyd = new ArrayList<>(); //有用点
|
|
|
List<PowerPointData> wyd = new ArrayList<>(); //无用点
|
|
|
for (String pid : ids){
|
|
|
- Powerfittinganalysis pf = powerService.selectItemById(pid);
|
|
|
+ ProEconPowerFittingAnalySis pf = powerService.selectItemById(pid);
|
|
|
List<String> lp = FileUtil.readFile(pf.getPath(), true);
|
|
|
for (int i = 1; i < lp.size(); i++){
|
|
|
String[] split = lp.get(i).split(",");
|
|
|
PowerPointData pd = new PowerPointData(split, true);
|
|
|
if (pd.getSpeed() < 0 || pd.getPower() < 0)
|
|
|
continue;
|
|
|
- pd.setWtId(pf.getWindturbine());
|
|
|
+ pd.setWtId(pf.getWindturbineId());
|
|
|
if (0 == pd.getFilter())
|
|
|
yyd.add(pd); //没有过滤
|
|
|
if (1 == pd.getFilter())
|
|
@@ -276,11 +275,11 @@ public class DataFittingService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private Powerfittinganalysis fittingMode(List<Powerfittinganalysis> list, Double powerMax, List<Double> arraySpeed, List<Double> arrayPower, Integer dimension, int mode){
|
|
|
+ private ProEconPowerFittingAnalySis fittingMode(List<ProEconPowerFittingAnalySis> list, Double powerMax, List<Double> arraySpeed, List<Double> arrayPower, Integer dimension, int mode){
|
|
|
if (list == null || list.size() == 0)
|
|
|
return null;
|
|
|
|
|
|
- Powerfittinganalysis obj = list.get(0);
|
|
|
+ ProEconPowerFittingAnalySis obj = list.get(0);
|
|
|
//风速0-25,数据不全拟合的则不全,需要补一下
|
|
|
arraySpeed.add(0.0);
|
|
|
arraySpeed.add(25.01);
|
|
@@ -294,7 +293,7 @@ public class DataFittingService {
|
|
|
//推力系数 CP值
|
|
|
LineCurveFitting lf = new LineCurveFitting();
|
|
|
lf.setYLines(temp);
|
|
|
- lf = PowerFittingALG.buildCp(InitialRunner.equipmentMap.get(InitialRunner.wtMap.get(obj.getWindturbine()).getModelid()).getSweptarea(), lf);
|
|
|
+ lf = PowerFittingALG.buildCp(InitialRunner.equipmentNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbineId()).getModelId()).getSweptArea(), lf);
|
|
|
lf.getCpValue().forEach(f -> {if(f.getX() <= 2.5) f.setY(0);});
|
|
|
//曲线偏差率
|
|
|
dataCurveRatio(lf, obj);
|
|
@@ -322,7 +321,7 @@ public class DataFittingService {
|
|
|
obj.setType(Constants.DATA_FITTING);
|
|
|
powerService.insertItem(obj);
|
|
|
}
|
|
|
- System.out.println("功率曲线拟合完成:" + obj.getWindturbine());
|
|
|
+ System.out.println("功率曲线拟合完成:" + obj.getWindturbineId());
|
|
|
|
|
|
return obj;
|
|
|
}
|
|
@@ -357,7 +356,7 @@ public class DataFittingService {
|
|
|
* 3-5 5-10 10-12 12-25
|
|
|
* @return
|
|
|
*/
|
|
|
- private void dataCurveRatio(LineCurveFitting lf, Powerfittinganalysis obj) {
|
|
|
+ private void dataCurveRatio(LineCurveFitting lf, ProEconPowerFittingAnalySis obj) {
|
|
|
DecimalFormat df = new DecimalFormat("0.00");
|
|
|
try{
|
|
|
//风速、实际功率
|
|
@@ -388,25 +387,25 @@ public class DataFittingService {
|
|
|
List<Point> points10 = new ArrayList<>(); //分段
|
|
|
List<Point> points12 = new ArrayList<>(); //分段
|
|
|
List<Point> points25 = new ArrayList<>(); //分段
|
|
|
- List<Modelpowerdetails> list = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(obj.getWindturbine()).getModelid());
|
|
|
+ List<ProBasicModelPower> list = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(obj.getWindturbineId()).getModelId());
|
|
|
for (int i = 0; i < list.size(); i++){
|
|
|
- Modelpowerdetails power = list.get(i);
|
|
|
+ ProBasicModelPower power = list.get(i);
|
|
|
if (power.getSpeed() >= 3 && power.getSpeed() < 5)
|
|
|
- points5.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
+ points5.add(new Point(power.getSpeed(), power.getEnsurePower()));
|
|
|
if (power.getSpeed() >= 5 && power.getSpeed() < 10)
|
|
|
- points10.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
+ points10.add(new Point(power.getSpeed(), power.getEnsurePower()));
|
|
|
if (power.getSpeed() >= 10 && power.getSpeed() < 12)
|
|
|
- points12.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
+ points12.add(new Point(power.getSpeed(), power.getEnsurePower()));
|
|
|
if (power.getSpeed() >= 12 && power.getSpeed() <= 25)
|
|
|
- points25.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
+ points25.add(new Point(power.getSpeed(), power.getEnsurePower()));
|
|
|
if (power.getSpeed() >= 3 && power.getSpeed() <= 25)
|
|
|
- points.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
+ points.add(new Point(power.getSpeed(), power.getEnsurePower()));
|
|
|
}
|
|
|
|
|
|
- double maxp5 = list.stream().filter(f -> 5.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurepower();
|
|
|
- double maxp10 = list.stream().filter(f -> 10.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurepower();
|
|
|
- double maxp12 = list.stream().filter(f -> 12.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurepower();
|
|
|
- double maxp25 = list.stream().filter(f -> 25.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurepower();
|
|
|
+ double maxp5 = list.stream().filter(f -> 5.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurePower();
|
|
|
+ double maxp10 = list.stream().filter(f -> 10.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurePower();
|
|
|
+ double maxp12 = list.stream().filter(f -> 12.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurePower();
|
|
|
+ double maxp25 = list.stream().filter(f -> 25.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurePower();
|
|
|
|
|
|
//曲线偏差率
|
|
|
double pcl = PowerFittingALG.curveDeviationRatio2(point, points, maxp25, 3, 25);
|
|
@@ -434,7 +433,7 @@ public class DataFittingService {
|
|
|
*/
|
|
|
public Object dataFittingLine(String ids) {
|
|
|
List<Object> result = new ArrayList<>();
|
|
|
- List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
|
|
|
+ List<ProEconPowerFittingAnalySis> list = powerService.selectListByIds(ids);
|
|
|
if (list.size() == 0)
|
|
|
return result;
|
|
|
|
|
@@ -453,8 +452,8 @@ public class DataFittingService {
|
|
|
});
|
|
|
|
|
|
//保证功率
|
|
|
- List<Modelpowerdetails> modelPower = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(list.get(0).getWindturbine()).getModelid());
|
|
|
- List<Object> bzgl = modelPower.stream().sorted(Comparator.comparing(Modelpowerdetails::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurepower()}).collect(Collectors.toList());
|
|
|
+ List<ProBasicModelPower> modelPower = InitialRunner.modelPowerDetailNewMap.get(InitialRunner.wtNewMap.get(list.get(0).getWindturbineId()).getModelId());
|
|
|
+ List<Object> bzgl = modelPower.stream().sorted(Comparator.comparing(ProBasicModelPower::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurePower()}).collect(Collectors.toList());
|
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("sjgl", result);
|
|
@@ -471,7 +470,7 @@ public class DataFittingService {
|
|
|
*/
|
|
|
public Object dataFittingTime(String ids) {
|
|
|
List<Object> result = new ArrayList<>();
|
|
|
- List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
|
|
|
+ List<ProEconPowerFittingAnalySis> list = powerService.selectListByIds(ids);
|
|
|
if (list.size() == 0)
|
|
|
return result;
|
|
|
|
|
@@ -484,7 +483,7 @@ public class DataFittingService {
|
|
|
List<String> line = FileUtil.readFile(powerService.getById(id).getPath(), true);
|
|
|
timeTotal(time1, time2, line);
|
|
|
}
|
|
|
- map.put("wtId", item.getWindturbine());
|
|
|
+ map.put("wtId", item.getWindturbineId());
|
|
|
map.put("time1", time1);
|
|
|
map.put("time2", time2);
|
|
|
result.add(map);
|
|
@@ -528,7 +527,7 @@ public class DataFittingService {
|
|
|
*/
|
|
|
@Async
|
|
|
public void curveSave(String ids) {
|
|
|
- List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
|
|
|
+ List<ProEconPowerFittingAnalySis> list = powerService.selectListByIds(ids);
|
|
|
if (list.size() == 0)
|
|
|
return;
|
|
|
|
|
@@ -539,15 +538,15 @@ public class DataFittingService {
|
|
|
for (int i = 1; i < ls.size(); i++){
|
|
|
String[] split = ls.get(i).split(",");
|
|
|
Powermodel obj = new Powermodel();
|
|
|
- obj.setWindturbineid(f.getWindturbine());
|
|
|
- obj.setModel(InitialRunner.wtMap.get(f.getWindturbine()).getModelid());
|
|
|
+ obj.setWindturbineid(f.getWindturbineId());
|
|
|
+ obj.setModel(InitialRunner.wtNewMap.get(f.getWindturbineId()).getModelId());
|
|
|
obj.setSpeed(new BigDecimal(split[0]).setScale(2, RoundingMode.FLOOR).doubleValue());
|
|
|
obj.setPower(new BigDecimal(split[1]).setScale(2, RoundingMode.FLOOR).doubleValue());
|
|
|
result.add(obj);
|
|
|
}
|
|
|
- modelService.deleteItem(f.getWindturbine());
|
|
|
+ modelService.deleteItem(f.getWindturbineId());
|
|
|
modelService.insertBatch(result);
|
|
|
- initialRunner.cacheZSLLGL(f.getWindturbine());
|
|
|
+ initialRunner.cacheZSLLGL(f.getWindturbineId());
|
|
|
}catch (Exception e){
|
|
|
log.error(e.getMessage());
|
|
|
}
|