|
@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.gyee.gaia.meter.adapter.Adapter;
|
|
|
import com.gyee.gaia.meter.entity.*;
|
|
|
import com.gyee.gaia.meter.service.impl.*;
|
|
|
+import com.gyee.gaia.meter.util.ScriptShell;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
@@ -16,6 +18,8 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
@@ -224,8 +228,10 @@ class SaveMeterInfoHistoryTest {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //项目期期风机总发电量
|
|
|
@Test
|
|
|
- void saveCalculating() {
|
|
|
+ void saveCalculatingProjectFDL() {
|
|
|
+
|
|
|
|
|
|
//设置取值开始时间
|
|
|
String startString = startTimeString;
|
|
@@ -239,57 +245,150 @@ class SaveMeterInfoHistoryTest {
|
|
|
LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
|
|
|
LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
|
|
|
long between = ChronoUnit.DAYS.between(day1, day2);
|
|
|
+ System.out.println("相差天数" + between);
|
|
|
|
|
|
|
|
|
- List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD").eq("meter_type", "集电线路发电量").ne("meter_class", "总"));
|
|
|
+ //1,所有期次发电量测点
|
|
|
+ List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_QCFDL"));
|
|
|
System.out.println(meterPointList.size());
|
|
|
- //遍历所有集电线路发电量计算点
|
|
|
- for (MeterPoint meterPoint : meterPointList) {
|
|
|
|
|
|
- List<MeterPoint> meterPointJDXLCD = meterPointService.list(new QueryWrapper<MeterPoint>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("meter_class", "集电线路" + meterPoint.getMeterClass()));
|
|
|
- System.out.println(meterPoint.getWindpowerstationId());
|
|
|
- System.out.println("meterPointJDXLCD " + meterPointJDXLCD.size());
|
|
|
+ //遍历期次发电量测点,拿到场站id,
|
|
|
+ for (MeterPoint meterPoint : meterPointList) {
|
|
|
+ String projectId = meterPoint.getProjectId();
|
|
|
|
|
|
for (int i = 0; i <= between; i++) {
|
|
|
//开始时间00:00:01
|
|
|
DateTime dateTime1 = DateUtil.offsetSecond(DateUtil.offsetDay(startDateTime, i), 1);
|
|
|
+ //结束时间第二天00:00:01
|
|
|
+ DateTime dateTime2 = DateUtil.offsetSecond(DateUtil.offsetDay(startDateTime, i + 1), 1);
|
|
|
|
|
|
- List<MeterInfoBottomcode> meterInfoBottomcodeList = null;
|
|
|
- if (meterPointJDXLCD.size() == 2) {
|
|
|
- meterInfoBottomcodeList = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>().eq("start_time", dateTime1).in("code", meterPointJDXLCD.get(0).getNemCode(), meterPointJDXLCD.get(1).getNemCode()));
|
|
|
- } else if (meterPointJDXLCD.size() == 1) {
|
|
|
- meterInfoBottomcodeList = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>().eq("start_time", dateTime1).in("code", meterPointJDXLCD.get(0).getNemCode()));
|
|
|
- }
|
|
|
- meterInfoBottomcodeList = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>().eq("start_time", dateTime1).in("code", meterPointJDXLCD.get(0).getNemCode(), meterPointJDXLCD.get(1).getNemCode(), meterPointJDXLCD.get(2).getNemCode()));
|
|
|
- BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
|
|
|
- for (MeterInfoBottomcode meterInfoBottomcode : meterInfoBottomcodeList) {
|
|
|
- bigDecimal1 = bigDecimal1.add(meterInfoBottomcode.getDayValue());
|
|
|
+ List<MeterInfoEquipment> meterInfoEquipments = meterInfoEquipmentService.list(new QueryWrapper<MeterInfoEquipment>().eq("project_nem_code", projectId).eq("date", dateTime1));
|
|
|
+ BigDecimal bigDecimal = BigDecimal.valueOf(0);
|
|
|
+ for (MeterInfoEquipment meterInfoEquipment : meterInfoEquipments) {
|
|
|
+ bigDecimal = bigDecimal.add(meterInfoEquipment.getRfdl());
|
|
|
}
|
|
|
- MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
|
|
|
- meterInfoCalculating.setName(meterPoint.getName());
|
|
|
- meterInfoCalculating.setCode(meterPoint.getNemCode());
|
|
|
- meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
|
|
|
- meterInfoCalculating.setValue(bigDecimal1.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
- meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
|
|
|
|
|
|
- QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.eq("date", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
|
|
|
- List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
|
|
|
+ MeterInfoBottomcode meterInfoBottomcode = new MeterInfoBottomcode();
|
|
|
+ meterInfoBottomcode.setName(meterPoint.getName());
|
|
|
+ meterInfoBottomcode.setStartTime(dateTime1.toLocalDateTime());
|
|
|
+ meterInfoBottomcode.setEndTime(dateTime2.toLocalDateTime());
|
|
|
+ meterInfoBottomcode.setDayValue(bigDecimal.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
+ meterInfoBottomcode.setCode(meterPoint.getNemCode());
|
|
|
+ meterInfoBottomcode.setWindpowerstationId(meterPoint.getWindpowerstationId());
|
|
|
+
|
|
|
+ QueryWrapper<MeterInfoBottomcode> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("start_time", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
|
|
|
+ List<MeterInfoBottomcode> list = meterInfoBottomcodeService.list(queryWrapper);
|
|
|
+ System.out.println(list.size());
|
|
|
if (list.size() > 0) {
|
|
|
- meterInfoCalculating.update(queryWrapper);
|
|
|
+ meterInfoBottomcode.update(queryWrapper);
|
|
|
} else {
|
|
|
- meterInfoCalculating.insert();
|
|
|
+ meterInfoBottomcode.insert();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- //项目期期风机总发电量
|
|
|
+ //用公式计算
|
|
|
@Test
|
|
|
- void saveCalculatingProjectFDL() {
|
|
|
+ void saveCalculating() {
|
|
|
|
|
|
+ //设置取值开始时间
|
|
|
+ String startString = startTimeString;
|
|
|
+ DateTime startDateTime = DateUtil.parse(startString);
|
|
|
+
|
|
|
+ //设置取值结束时间
|
|
|
+ String endDateString = endTimeString;
|
|
|
+ DateTime endDateTime = DateUtil.parse(endDateString);
|
|
|
+
|
|
|
+ //指定开始日期到结束日期的天数
|
|
|
+ LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
|
|
|
+ LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
|
|
|
+ long between = ChronoUnit.DAYS.between(day1, day2);
|
|
|
+
|
|
|
+ List<MeterPoint> meterPointJSDList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD").ne("formula", ""));
|
|
|
+ System.out.println("有公式数量" + meterPointJSDList.size());
|
|
|
+
|
|
|
+ for (MeterPoint meterPoint : meterPointJSDList) {
|
|
|
+
|
|
|
+ //得到公式字符串(.已经替换为_)
|
|
|
+ String formula2 = meterPoint.getFormula2();
|
|
|
+
|
|
|
+ String formula1 = meterPoint.getFormula();
|
|
|
+ //分割公式字符串,得到每一的个ode
|
|
|
+// String[] meterPointCodes = formula2.split("[+\\-*/]");
|
|
|
+
|
|
|
+ String[] meterPointCodes = StringUtils.split(formula1, "[+\\-*/()]");
|
|
|
+ meterPointCodes = Arrays.stream(meterPointCodes)
|
|
|
+ .filter(meterPointCode -> !(meterPointCode.length() < 10))
|
|
|
+ .toArray(String[]::new);
|
|
|
+ System.out.println("数组长度" + meterPointCodes.length);
|
|
|
+ System.out.println(Arrays.toString(meterPointCodes));
|
|
|
+
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+
|
|
|
+ for (int i = 0; i <= between; i++) {
|
|
|
+
|
|
|
+ //开始时间
|
|
|
+ DateTime dateTime1 = DateUtil.offsetSecond(DateUtil.offsetDay(startDateTime, i), 1);
|
|
|
+
|
|
|
+ //遍历code数据,拿到每一个code,用code和时间,在meter_info_bottom中拿到dayValue
|
|
|
+ for (String meterPointCode : meterPointCodes) {
|
|
|
+ String meterPointCode_ = meterPointCode.replaceAll("\\.", "_");
|
|
|
+ System.out.println("meterPointCode:" + meterPointCode);
|
|
|
+
|
|
|
+ //查询code所在场站
|
|
|
+
|
|
|
+
|
|
|
+ //如果字符串以DL开头,从meter_info_calclating表中取,否则从meter_info_bottom表中取
|
|
|
+
|
|
|
+ if (meterPointCode.startsWith("DL")) {
|
|
|
+ MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("code", meterPointCode).eq("DATE", dateTime1));
|
|
|
+ map.put(meterPointCode_, meterInfoCalculating.getValue());
|
|
|
+ }else {
|
|
|
+ MeterInfoBottomcode meterInfoBottomcode = meterInfoBottomcodeService.getOne(new QueryWrapper<MeterInfoBottomcode>().eq("code", meterPointCode).eq("start_time", dateTime1));
|
|
|
+ map.put(meterPointCode_, meterInfoBottomcode.getDayValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ BigDecimal bigDecimal1 = (BigDecimal) ScriptShell.parseExpr(formula2, map);
|
|
|
+ System.out.println(bigDecimal1);
|
|
|
+ MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
|
|
|
+ meterInfoCalculating.setName(meterPoint.getName());
|
|
|
+ meterInfoCalculating.setCode(meterPoint.getNemCode());
|
|
|
+ meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
|
|
|
+ meterInfoCalculating.setValue(bigDecimal1);
|
|
|
+ meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
|
|
|
+ QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("date", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
|
|
|
+ List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
|
|
|
+ if (list.size() > 0) {
|
|
|
+ meterInfoCalculating.update(queryWrapper);
|
|
|
+ } else {
|
|
|
+ meterInfoCalculating.insert();
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println(e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //这个不用公式计算,不用了
|
|
|
+ @Test
|
|
|
+ void saveCalculating1() {
|
|
|
|
|
|
//设置取值开始时间
|
|
|
String startString = startTimeString;
|
|
@@ -303,55 +402,54 @@ class SaveMeterInfoHistoryTest {
|
|
|
LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
|
|
|
LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
|
|
|
long between = ChronoUnit.DAYS.between(day1, day2);
|
|
|
- System.out.println("相差天数" + between);
|
|
|
|
|
|
|
|
|
- //1,所有期次发电量测点
|
|
|
- List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_QCFDL"));
|
|
|
+ List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD").eq("meter_type", "集电线路发电量").ne("meter_class", "总"));
|
|
|
System.out.println(meterPointList.size());
|
|
|
-
|
|
|
- //遍历期次发电量测点,拿到场站id,
|
|
|
+ //遍历所有集电线路发电量计算点
|
|
|
for (MeterPoint meterPoint : meterPointList) {
|
|
|
- String projectId = meterPoint.getProjectId();
|
|
|
+
|
|
|
+ List<MeterPoint> meterPointJDXLCD = meterPointService.list(new QueryWrapper<MeterPoint>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("meter_class", "集电线路" + meterPoint.getMeterClass()));
|
|
|
+ System.out.println(meterPoint.getWindpowerstationId());
|
|
|
+ System.out.println("meterPointJDXLCD " + meterPointJDXLCD.size());
|
|
|
|
|
|
for (int i = 0; i <= between; i++) {
|
|
|
//开始时间00:00:01
|
|
|
DateTime dateTime1 = DateUtil.offsetSecond(DateUtil.offsetDay(startDateTime, i), 1);
|
|
|
- //结束时间第二天00:00:01
|
|
|
- DateTime dateTime2 = DateUtil.offsetSecond(DateUtil.offsetDay(startDateTime, i + 1), 1);
|
|
|
|
|
|
- List<MeterInfoEquipment> meterInfoEquipments = meterInfoEquipmentService.list(new QueryWrapper<MeterInfoEquipment>().eq("project_nem_code", projectId).eq("date", dateTime1));
|
|
|
- BigDecimal bigDecimal = BigDecimal.valueOf(0);
|
|
|
- for (MeterInfoEquipment meterInfoEquipment : meterInfoEquipments) {
|
|
|
- bigDecimal = bigDecimal.add(meterInfoEquipment.getRfdl());
|
|
|
+ List<MeterInfoBottomcode> meterInfoBottomcodeList = null;
|
|
|
+ if (meterPointJDXLCD.size() == 2) {
|
|
|
+ meterInfoBottomcodeList = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>().eq("start_time", dateTime1).in("code", meterPointJDXLCD.get(0).getNemCode(), meterPointJDXLCD.get(1).getNemCode()));
|
|
|
+ } else if (meterPointJDXLCD.size() == 1) {
|
|
|
+ meterInfoBottomcodeList = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>().eq("start_time", dateTime1).in("code", meterPointJDXLCD.get(0).getNemCode()));
|
|
|
}
|
|
|
+ meterInfoBottomcodeList = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>().eq("start_time", dateTime1).in("code", meterPointJDXLCD.get(0).getNemCode(), meterPointJDXLCD.get(1).getNemCode(), meterPointJDXLCD.get(2).getNemCode()));
|
|
|
+ BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
|
|
|
+ for (MeterInfoBottomcode meterInfoBottomcode : meterInfoBottomcodeList) {
|
|
|
+ bigDecimal1 = bigDecimal1.add(meterInfoBottomcode.getDayValue());
|
|
|
+ }
|
|
|
+ MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
|
|
|
+ meterInfoCalculating.setName(meterPoint.getName());
|
|
|
+ meterInfoCalculating.setCode(meterPoint.getNemCode());
|
|
|
+ meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
|
|
|
+ meterInfoCalculating.setValue(bigDecimal1.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
+ meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
|
|
|
|
|
|
- MeterInfoBottomcode meterInfoBottomcode = new MeterInfoBottomcode();
|
|
|
- meterInfoBottomcode.setName(meterPoint.getName());
|
|
|
- meterInfoBottomcode.setStartTime(dateTime1.toLocalDateTime());
|
|
|
- meterInfoBottomcode.setEndTime(dateTime2.toLocalDateTime());
|
|
|
- meterInfoBottomcode.setDayValue(bigDecimal.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
- meterInfoBottomcode.setCode(meterPoint.getNemCode());
|
|
|
- meterInfoBottomcode.setWindpowerstationId(meterPoint.getWindpowerstationId());
|
|
|
-
|
|
|
- QueryWrapper<MeterInfoBottomcode> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.eq("start_time", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
|
|
|
- List<MeterInfoBottomcode> list = meterInfoBottomcodeService.list(queryWrapper);
|
|
|
- System.out.println(list.size());
|
|
|
+ QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("date", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
|
|
|
+ List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
|
|
|
if (list.size() > 0) {
|
|
|
- meterInfoBottomcode.update(queryWrapper);
|
|
|
+ meterInfoCalculating.update(queryWrapper);
|
|
|
} else {
|
|
|
- meterInfoBottomcode.insert();
|
|
|
+ meterInfoCalculating.insert();
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
}
|
|
|
|