|
@@ -5,14 +5,18 @@ import com.gyee.power.fitting.common.alg.PowerFittingALG;
|
|
|
import com.gyee.power.fitting.common.config.GyeeConfig;
|
|
|
import com.gyee.power.fitting.common.constants.Constants;
|
|
|
import com.gyee.power.fitting.common.spring.InitialRunner;
|
|
|
+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.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 lombok.extern.slf4j.Slf4j;
|
|
|
+import lombok.val;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -130,19 +134,16 @@ public class DataFittingService {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
|
|
|
|
- List<TableTitle> lt = new ArrayList<>();
|
|
|
- StringBuilder sb = setTitle();
|
|
|
- String[] str = sb.toString().split(",");
|
|
|
- for (String s : str){
|
|
|
- lt.add(new TableTitle(s));
|
|
|
- }
|
|
|
+ List<FixedVo> fxList = AnnotationTool.getFixedVoList(PowerFittingData.class);
|
|
|
+ List<TableTitle> lt = fxList.stream().filter(f -> f.getRemark().equals("1"))
|
|
|
+ .map(d -> new TableTitle(d.getName(), d.getValue())).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
- List<PowerFittingPoint> list = new ArrayList<>();
|
|
|
+ List<PowerFittingData> list = new ArrayList<>();
|
|
|
Powerfittinganalysis obj = powerService.selectItemById(id);
|
|
|
List<String> ls = FileUtil.readFile(obj.getPath(), false);
|
|
|
for (int i = 1; i < ls.size(); i++){
|
|
|
- PowerFittingPoint data = new PowerFittingPoint(ls.get(i).split(","));
|
|
|
+ PowerFittingData data = new PowerFittingData(ls.get(i).split(","));
|
|
|
list.add(data);
|
|
|
}
|
|
|
|
|
@@ -170,9 +171,9 @@ public class DataFittingService {
|
|
|
List<Object> cpzList = new ArrayList<>();
|
|
|
List<String> ls = FileUtil.readFile(obj.getPath(), true);
|
|
|
for (int i = 1; i < ls.size(); i++){
|
|
|
- String[] split = ls.get(i).split(",");
|
|
|
- sjglList.add(new double[]{Double.valueOf(split[0]), Double.valueOf(split[1])});
|
|
|
- cpzList.add(new double[]{Double.valueOf(split[0]), Double.valueOf(split[2])});
|
|
|
+ PowerFittingData data = new PowerFittingData(ls.get(i).split(","));
|
|
|
+ sjglList.add(new double[]{Double.valueOf(data.getSpeed()), data.getNhdata()});
|
|
|
+ cpzList.add(new double[]{Double.valueOf(data.getSpeed()), data.getCpdata()});
|
|
|
}
|
|
|
|
|
|
|
|
@@ -180,7 +181,7 @@ public class DataFittingService {
|
|
|
List<Object> bzglList = modelPower.stream().sorted(Comparator.comparing(Modelpowerdetails::getSpeed)).map(m -> new double[]{m.getSpeed(), m.getEnsurepower()}).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
- String[] ids = obj.getPrepareid().split(",");
|
|
|
+ String[] ids = obj.getProcessid().split(",");
|
|
|
List<PowerPointData> yyd = new ArrayList<>();
|
|
|
List<PowerPointData> wyd = new ArrayList<>();
|
|
|
for (String pid : ids){
|
|
@@ -188,11 +189,10 @@ public class DataFittingService {
|
|
|
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);
|
|
|
+ PowerPointData pd = new PowerPointData(split, true);
|
|
|
if (pd.getSpeed() < 0 || pd.getPower() < 0)
|
|
|
continue;
|
|
|
pd.setWtId(pf.getWindturbine());
|
|
|
- pd.setFilter(Integer.parseInt(split[9]));
|
|
|
if (0 == pd.getFilter())
|
|
|
yyd.add(pd);
|
|
|
if (1 == pd.getFilter())
|
|
@@ -206,9 +206,11 @@ public class DataFittingService {
|
|
|
List<PointVo> listYY = new ArrayList<>();
|
|
|
List<PointVo> listWY = new ArrayList<>();
|
|
|
dataScanService.getMapYY().forEach((k, v) -> {
|
|
|
+
|
|
|
listYY.add(new PointVo(v.get(0).getSpeed(), v.get(0).getPower(), dataScanService.getMapYY().get(k).size() + 3, k));
|
|
|
});
|
|
|
dataScanService.getMapWY().forEach((k, v) -> {
|
|
|
+
|
|
|
listWY.add(new PointVo(v.get(0).getSpeed(), v.get(0).getPower(), dataScanService.getMapWY().get(k).size() + 3, k));
|
|
|
});
|
|
|
|
|
@@ -242,8 +244,9 @@ public class DataFittingService {
|
|
|
|
|
|
|
|
|
private StringBuilder setTitle(){
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- String columnName = String.join(",", Constants.FITTING_TITLE);
|
|
|
+ val sb = new StringBuilder();
|
|
|
+ val list = AnnotationTool.getFixedVoList(PowerFittingData.class);
|
|
|
+ String columnName = list.stream().filter(f -> f.getRemark().equals("1")).map(FixedVo::getValue).collect(Collectors.joining(","));
|
|
|
sb.append(columnName).append("\n");
|
|
|
return sb;
|
|
|
}
|
|
@@ -253,9 +256,10 @@ public class DataFittingService {
|
|
|
private void csvParse(List<String> line, List<Double> arrayS, List<Double> arrayP, double mins, double maxs, double minp, double maxp){
|
|
|
for (int i = 1; i < line.size(); i++) {
|
|
|
String[] split = line.get(i).split(",");
|
|
|
- int filter = Integer.valueOf(split[9]);
|
|
|
- double x = Double.valueOf(split[2]);
|
|
|
- double y = Double.valueOf(split[1]);
|
|
|
+ PowerPointData data = new PowerPointData(split, true);
|
|
|
+ double x = data.getSpeed();
|
|
|
+ double y = data.getPower();
|
|
|
+ int filter = data.getFilter();
|
|
|
if (filter == 0 && (x >= mins && x <= maxs && y >= minp && y <= maxp)) {
|
|
|
arrayS.add(x);
|
|
|
arrayP.add(y);
|
|
@@ -278,6 +282,7 @@ public class DataFittingService {
|
|
|
|
|
|
|
|
|
List<Point> temp = PowerFittingALG.buildLine(arrX, arrY, arraySpeed.size(), dimension, 0.01);
|
|
|
+ temp.forEach(f -> { if (f.getX() < 2.5 && f.getY() > 0) f.setY(0); });
|
|
|
|
|
|
|
|
|
LineCurveFitting lf = new LineCurveFitting();
|
|
@@ -285,36 +290,29 @@ public class DataFittingService {
|
|
|
lf = PowerFittingALG.buildCp(InitialRunner.equipmentMap.get(InitialRunner.wtMap.get(obj.getWindturbine()).getModelid()).getSweptarea(), lf);
|
|
|
|
|
|
|
|
|
- List<Point> pointsAll = new ArrayList<>();
|
|
|
- List<Modelpowerdetails> mp = InitialRunner.modelPowerDetailMap.get(InitialRunner.wtMap.get(obj.getWindturbine()).getModelid());
|
|
|
- for (int i = 0; i < mp.size(); i++){
|
|
|
- Modelpowerdetails power = mp.get(i);
|
|
|
- pointsAll.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
- }
|
|
|
- double maxp = mp.stream().max(Comparator.comparing(d -> d.getEnsurepower())).get().getEnsurepower();
|
|
|
- double pcl = PowerFittingALG.curveDeviationRatio(temp, pointsAll, maxp);
|
|
|
+ dataCurveRatio(lf, obj);
|
|
|
|
|
|
String content = assemble(lf);
|
|
|
- String prepareId = "";
|
|
|
+
|
|
|
+ String processId = "";
|
|
|
String fileName = null;
|
|
|
if (mode == 0){
|
|
|
- prepareId = obj.getId();
|
|
|
+ processId = obj.getId();
|
|
|
fileName = config.getFilePathFitting() + obj.getStation() + "_" + obj.getCode() + "_" + SnowFlakeUtil.generateIdL() / 100000 + ".csv";
|
|
|
}
|
|
|
if (mode == 1){
|
|
|
- prepareId = list.stream().map(d -> d.getId()).collect(Collectors.joining(","));
|
|
|
+ processId = list.stream().map(d -> d.getId()).collect(Collectors.joining(","));
|
|
|
fileName = config.getFilePathFitting() + obj.getStation() + "_merge" + "_" + SnowFlakeUtil.generateIdL() / 100000 + ".csv";
|
|
|
}
|
|
|
if (mode == 2){
|
|
|
- prepareId = list.stream().map(d -> d.getId()).collect(Collectors.joining(","));
|
|
|
+ processId = list.stream().map(d -> d.getId()).collect(Collectors.joining(","));
|
|
|
fileName = config.getFilePathFitting() + obj.getStation() + "_same" + "_" + SnowFlakeUtil.generateIdL() / 100000 + ".csv";
|
|
|
}
|
|
|
boolean flag = FileUtil.writeFile(fileName, content);
|
|
|
if (flag) {
|
|
|
obj.setPath(fileName);
|
|
|
- obj.setPrepareid(prepareId);
|
|
|
+ obj.setProcessid(processId);
|
|
|
obj.setCpavg(lf.getCpAvg());
|
|
|
- obj.setPcratio(pcl);
|
|
|
obj.setType(Constants.DATA_FITTING);
|
|
|
powerService.insertItem(obj);
|
|
|
}
|
|
@@ -350,35 +348,36 @@ public class DataFittingService {
|
|
|
|
|
|
|
|
|
* 曲线偏差率 分段的+全部的
|
|
|
- * @param id
|
|
|
* 3-5 5-10 10-12 12-25
|
|
|
* @return
|
|
|
*/
|
|
|
- public Map<String, Double> dataCurveRatio(String id) {
|
|
|
- Map<String, Double> map = new HashMap<>();
|
|
|
+ private void dataCurveRatio(LineCurveFitting lf, Powerfittinganalysis obj) {
|
|
|
DecimalFormat df = new DecimalFormat("0.00");
|
|
|
- Powerfittinganalysis obj = powerService.selectItemById(id);
|
|
|
try{
|
|
|
|
|
|
+ List<Point> point = new ArrayList<>();
|
|
|
List<Point> point5 = new ArrayList<>();
|
|
|
List<Point> point10 = new ArrayList<>();
|
|
|
List<Point> point12= new ArrayList<>();
|
|
|
List<Point> point25 = new ArrayList<>();
|
|
|
- List<String> ls = FileUtil.readFile(obj.getPath(), true);
|
|
|
- for (int i = 1; i < ls.size(); i++){
|
|
|
- String[] split = ls.get(i).split(",");
|
|
|
- double speed = Double.valueOf(split[0]);
|
|
|
+ List<Point> line = lf.getYLines();
|
|
|
+ for (int i = 1; i < line.size(); i++){
|
|
|
+ double speed = Double.valueOf(df.format(line.get(i).getX()));
|
|
|
if (speed >= 3 && speed < 5)
|
|
|
- point5.add(new Point(speed, Double.valueOf(split[1])));
|
|
|
+ point5.add(new Point(speed, line.get(i).getY()));
|
|
|
if (speed >= 5 && speed < 10)
|
|
|
- point10.add(new Point(speed, Double.valueOf(split[1])));
|
|
|
+ point10.add(new Point(speed, line.get(i).getY()));
|
|
|
if (speed >= 10 && speed < 12)
|
|
|
- point12.add(new Point(speed, Double.valueOf(split[1])));
|
|
|
+ point12.add(new Point(speed, line.get(i).getY()));
|
|
|
if (speed >= 12 && speed <= 25)
|
|
|
- point25.add(new Point(speed, Double.valueOf(split[1])));
|
|
|
+ point25.add(new Point(speed, line.get(i).getY()));
|
|
|
+ if (speed >= 3 && speed <= 25){
|
|
|
+ point.add(new Point(speed, line.get(i).getY()));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
+ List<Point> points = new ArrayList<>();
|
|
|
List<Point> points5 = new ArrayList<>();
|
|
|
List<Point> points10 = new ArrayList<>();
|
|
|
List<Point> points12 = new ArrayList<>();
|
|
@@ -390,10 +389,12 @@ public class DataFittingService {
|
|
|
points5.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
if (power.getSpeed() >= 5 && power.getSpeed() < 10)
|
|
|
points10.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
- if (power.getSpeed() >= 10 && power.getSpeed() <= 12)
|
|
|
+ if (power.getSpeed() >= 10 && power.getSpeed() < 12)
|
|
|
points12.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
if (power.getSpeed() >= 12 && power.getSpeed() <= 25)
|
|
|
points25.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
+ if (power.getSpeed() >= 3 && power.getSpeed() <= 25)
|
|
|
+ points.add(new Point(power.getSpeed(), power.getEnsurepower()));
|
|
|
}
|
|
|
|
|
|
double maxp5 = list.stream().filter(f -> 5.0 == f.getSpeed()).collect(Collectors.toList()).get(0).getEnsurepower();
|
|
@@ -401,23 +402,22 @@ public class DataFittingService {
|
|
|
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 pcl5 = PowerFittingALG.curveDeviationRatio2(point5, points5, maxp5, 3);
|
|
|
- double pcl10 = PowerFittingALG.curveDeviationRatio2(point10, points10, maxp10, 5);
|
|
|
- double pcl12 = PowerFittingALG.curveDeviationRatio2(point12, points12, maxp12, 10);
|
|
|
- double pcl25 = PowerFittingALG.curveDeviationRatio2(point25, points25, maxp25, 12);
|
|
|
-
|
|
|
- map.put("pcl5", Double.valueOf(df.format(pcl5)));
|
|
|
- map.put("pcl10", Double.valueOf(df.format(pcl10)));
|
|
|
- map.put("pcl12", Double.valueOf(df.format(pcl12)));
|
|
|
- map.put("pcl25", Double.valueOf(df.format(pcl25)));
|
|
|
+ double pcl = PowerFittingALG.curveDeviationRatio2(point, points, maxp25, 3, 25);
|
|
|
+ double pcl5 = PowerFittingALG.curveDeviationRatio2(point5, points5, maxp5, 3, 5);
|
|
|
+ double pcl10 = PowerFittingALG.curveDeviationRatio2(point10, points10, maxp10, 5, 10);
|
|
|
+ double pcl12 = PowerFittingALG.curveDeviationRatio2(point12, points12, maxp12, 10, 12);
|
|
|
+ double pcl25 = PowerFittingALG.curveDeviationRatio2(point25, points25, maxp25, 12, 25);
|
|
|
+
|
|
|
+ obj.setPcratio(Double.valueOf(df.format(pcl)));
|
|
|
+ obj.setPc5ratio(Double.valueOf(df.format(pcl5)));
|
|
|
+ obj.setPc10ratio(Double.valueOf(df.format(pcl10)));
|
|
|
+ obj.setPc12ratio(Double.valueOf(df.format(pcl12)));
|
|
|
+ obj.setPc25ratio(Double.valueOf(df.format(pcl25)));
|
|
|
|
|
|
} catch (Exception e){
|
|
|
log.error("DataFittingService--dataCurveRatio",e);
|
|
|
}
|
|
|
-
|
|
|
- return map;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -441,7 +441,7 @@ public class DataFittingService {
|
|
|
String[] split = ls.get(i).split(",");
|
|
|
sjgl.add(new double[]{Double.valueOf(split[0]), Double.valueOf(split[1])});
|
|
|
}
|
|
|
- map.put("wtId", item.getWindturbine());
|
|
|
+ map.put("obj", item);
|
|
|
map.put("sjgl", sjgl);
|
|
|
result.add(map);
|
|
|
});
|
|
@@ -456,4 +456,53 @@ public class DataFittingService {
|
|
|
|
|
|
return map;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * 统计并网时间 3-5m 5-10m 10-12m 12-25m(全功率) 不运行
|
|
|
+ * @param ids
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Object dataFittingTime(String ids) {
|
|
|
+ List<Object> result = new ArrayList<>();
|
|
|
+ List<Powerfittinganalysis> list = powerService.selectListByIds(ids);
|
|
|
+
|
|
|
+ if (list.size() == 0)
|
|
|
+ return result;
|
|
|
+
|
|
|
+ list.forEach(item -> {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ int[] time = new int[5];
|
|
|
+ String[] split = item.getProcessid().split(",");
|
|
|
+ for (String id : split){
|
|
|
+ List<String> line = FileUtil.readFile(powerService.getById(id).getPath(), true);
|
|
|
+ timeTotal(time, line);
|
|
|
+ }
|
|
|
+ map.put("wtId", item.getWindturbine());
|
|
|
+ map.put("time", time);
|
|
|
+ result.add(map);
|
|
|
+ });
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void timeTotal(int[] time, List<String> line){
|
|
|
+ List<PowerPointData> list = new ArrayList<>();
|
|
|
+ double interval = DateUtil.getTimeDiff(line.get(1).split(",")[0], line.get(2).split(",")[0]);
|
|
|
+ for (int i = 1; i < line.size(); i++){
|
|
|
+ list.add(new PowerPointData(line.get(i).split(","), true));
|
|
|
+ }
|
|
|
+ for (PowerPointData item : list){
|
|
|
+ if (item.getSpeed() >= 3.0 && item.getSpeed() < 5.0 && item.getMxzt() == 2)
|
|
|
+ time[0] += interval;
|
|
|
+ if (item.getSpeed() >= 5.0 && item.getSpeed() < 10.0 && item.getMxzt() == 2)
|
|
|
+ time[1] += interval;
|
|
|
+ if (item.getSpeed() >= 10.0 && item.getSpeed() < 12.0 && item.getMxzt() == 2)
|
|
|
+ time[2] += interval;
|
|
|
+ if (item.getSpeed() >= 12.0 && item.getSpeed() <= 25.0 && item.getMxzt() == 2)
|
|
|
+ time[3] += interval;
|
|
|
+ if (item.getMxzt() != 2)
|
|
|
+ time[4] += interval;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|