|
@@ -1,394 +0,0 @@
|
|
|
-package com.gyee.gaia.meter.service;
|
|
|
-
|
|
|
-import cn.hutool.core.date.DateTime;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
-import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
-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;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-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;
|
|
|
-
|
|
|
-/**
|
|
|
- * Author: malijun
|
|
|
- * Data : 2023: 04: 27
|
|
|
- **/
|
|
|
-@SpringBootTest
|
|
|
-class SaveMeterInfoHistoryByMonthTest {
|
|
|
-
|
|
|
-
|
|
|
- @Resource
|
|
|
- Adapter adapter;
|
|
|
- @Resource
|
|
|
- TestingPointServiceImpl testingPointService;
|
|
|
- @Resource
|
|
|
- EquipmentServiceImpl equipmentService;
|
|
|
- @Resource
|
|
|
- PowerStationServiceImpl powerStationService;
|
|
|
- @Resource
|
|
|
- MeterPointServiceImpl meterPointService;
|
|
|
- @Resource
|
|
|
- MeterInfoBottomcodeServiceImpl meterInfoBottomcodeService;
|
|
|
- @Resource
|
|
|
- MeterInfoEquipmentServiceImpl meterInfoEquipmentService;
|
|
|
- @Resource
|
|
|
- MeterInfoCalculatingServiceImpl meterInfoCalculatingService;
|
|
|
-
|
|
|
-
|
|
|
- @Value("${start.time}")
|
|
|
- private String startTimeString;
|
|
|
- @Value("${end.time}")
|
|
|
- private String endTimeString;
|
|
|
-
|
|
|
- //读取时间段内设备发电量计算肉发电量写入pg数据库
|
|
|
- @Test
|
|
|
- void saveEquipmentRfdl() {
|
|
|
-
|
|
|
-
|
|
|
- //1,在testingpoint中根据 uniform_code=AI064 和code like "%_FJ_%" 取出所有风机的电量测点code
|
|
|
- List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>().eq("uniform_code", "AI064").like("code", "%_FJ_%"));
|
|
|
-
|
|
|
- //所有风机总共407个电量测点code
|
|
|
-
|
|
|
- //2,遍历list,每次取出一个code
|
|
|
- for (TestingPoint testingPoint : testingPointList) {
|
|
|
- //获取测点code
|
|
|
- String pointcode = testingPoint.getCode();
|
|
|
- //获取设备ID
|
|
|
- String thingId = testingPoint.getThingId();
|
|
|
-
|
|
|
- //设置取值开始时间
|
|
|
- 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);
|
|
|
-
|
|
|
-
|
|
|
- //开始时间00:00:01
|
|
|
- DateTime dateTime1 = DateUtil.offsetSecond(startDateTime, 1);
|
|
|
- //结束时间第二天00:00:01
|
|
|
- DateTime dateTime2 = DateUtil.offsetSecond(endDateTime, 1);
|
|
|
-
|
|
|
- //6,根据code和日期开始时间00:00:00获取日期开始点发电量
|
|
|
- Map<String, PointData> historySection1 = adapter.getHistorySection(pointcode, dateTime1.getTime());
|
|
|
- double value1 = historySection1.get(pointcode).getValue();
|
|
|
-
|
|
|
- //7,根据code和日期结束时间获取日期结束点发电量
|
|
|
- Map<String, PointData> historySection2 = adapter.getHistorySection(pointcode, dateTime2.getTime());
|
|
|
- double value2 = historySection2.get(pointcode).getValue();
|
|
|
-
|
|
|
- //8,结束点发电量减去开始点发电量得到日发电量(单位Kwh)
|
|
|
- BigDecimal bigDecimal1 = new BigDecimal(Double.toString(value1));
|
|
|
- BigDecimal bigDecimal2 = new BigDecimal(Double.toString(value2));
|
|
|
- BigDecimal rfdl = bigDecimal2.subtract(bigDecimal1);
|
|
|
-
|
|
|
-
|
|
|
- //9,company_nem_code (powerstation_nem_code project_nem_code line_nem_code equipment_nem_code )都在basic equipment中叫project_id name date rfdl 存入meterInfo表中
|
|
|
- Equipment thingId1 = equipmentService.getOne(new QueryWrapper<Equipment>().eq("nem_code", thingId));
|
|
|
-
|
|
|
-
|
|
|
- MeterInfoEquipment meterInfoEquipment = new MeterInfoEquipment();
|
|
|
- meterInfoEquipment.setCompanyNemCode("NX_GDDL_ZGS");
|
|
|
- meterInfoEquipment.setPowerstationNemCode(thingId1.getWindpowerstationId());
|
|
|
- meterInfoEquipment.setProjectNemCode(thingId1.getProjectId());
|
|
|
- meterInfoEquipment.setLineNemCode(thingId1.getLineId());
|
|
|
- meterInfoEquipment.setEquipmentNemCode(thingId1.getNemCode());
|
|
|
- meterInfoEquipment.setName(thingId1.getName());
|
|
|
- meterInfoEquipment.setDate(dateTime1.toLocalDateTime());
|
|
|
- meterInfoEquipment.setRfdl(rfdl);
|
|
|
- QueryWrapper<MeterInfoEquipment> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.eq("equipment_nem_code", thingId1.getNemCode()).eq("date", dateTime1.toLocalDateTime());
|
|
|
- List<MeterInfoEquipment> list = meterInfoEquipmentService.list(queryWrapper);
|
|
|
- if (list.size() > 0) {
|
|
|
- meterInfoEquipment.update(queryWrapper);
|
|
|
- } else {
|
|
|
- meterInfoEquipment.insert();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //读取时间段内meter_point表中所有电计量测点数据存入pg数据库
|
|
|
- @Test
|
|
|
- void saveBottomCode() {
|
|
|
-
|
|
|
- //1,查询所有风电场
|
|
|
- List<PowerStation> powerStationList = powerStationService.list(new QueryWrapper<PowerStation>().like("nem_code", "_FDC_"));
|
|
|
-
|
|
|
- for (PowerStation powerStation : powerStationList) {
|
|
|
-
|
|
|
- //2,根据场站ID得到场站下所有测点
|
|
|
- List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("windpowerstation_id", powerStation.getId()).eq("property", "CD"));
|
|
|
-
|
|
|
- //3,遍历测点,拿到每个测点的nem_code
|
|
|
- for (MeterPoint meterPoint : meterPointList) {
|
|
|
- System.out.println(meterPoint);
|
|
|
- //获取测点code
|
|
|
- String pointcode = meterPoint.getNemCode();
|
|
|
-
|
|
|
- //设置取值开始时间
|
|
|
- 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);
|
|
|
-
|
|
|
-
|
|
|
- //开始时间00:00:01
|
|
|
- DateTime dateTime1 = DateUtil.offsetSecond(startDateTime, 1);
|
|
|
- //结束时间第二天00:00:01
|
|
|
- DateTime dateTime2 = DateUtil.offsetSecond(endDateTime, 1);
|
|
|
-
|
|
|
- //6,根据测点code和日期开始时间00:00:01获取日期开始点发电量
|
|
|
- Map<String, PointData> historySection1 = adapter.getHistorySection(pointcode, dateTime1.getTime());
|
|
|
-
|
|
|
- //7,根据测点code和日期结束时间第二点00:00:01获取日期结束点发电量
|
|
|
- Map<String, PointData> historySection2 = adapter.getHistorySection(pointcode, dateTime2.getTime());
|
|
|
-
|
|
|
- BigDecimal bigDecimal1 = meterPoint.getInitialValue();
|
|
|
- BigDecimal bigDecimal2 = meterPoint.getInitialValue();
|
|
|
-
|
|
|
-
|
|
|
- if (historySection1.size() > 0 && historySection2.size() > 0) {
|
|
|
- double value1 = historySection1.get(pointcode).getValue();
|
|
|
- double value2 = historySection2.get(pointcode).getValue();
|
|
|
- bigDecimal1 = new BigDecimal(Double.toString(value1));
|
|
|
- bigDecimal2 = new BigDecimal(Double.toString(value2));
|
|
|
- }
|
|
|
- bigDecimal1 = bigDecimal1.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
|
|
|
- bigDecimal2 = bigDecimal2.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
|
|
|
- BigDecimal rfdl = bigDecimal2.subtract(bigDecimal1).multiply(meterPoint.getMagnification());
|
|
|
-
|
|
|
- MeterInfoBottomcode meterInfoBottomcode = new MeterInfoBottomcode();
|
|
|
- meterInfoBottomcode.setName(meterPoint.getName());
|
|
|
- meterInfoBottomcode.setStartTime(dateTime1.toLocalDateTime());
|
|
|
- meterInfoBottomcode.setStartValue(bigDecimal1);
|
|
|
- meterInfoBottomcode.setEndTime(dateTime2.toLocalDateTime());
|
|
|
- meterInfoBottomcode.setEndValue(bigDecimal2);
|
|
|
- meterInfoBottomcode.setDayValue(rfdl);
|
|
|
- meterInfoBottomcode.setCode(pointcode);
|
|
|
- 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);
|
|
|
- if (list.size() > 0) {
|
|
|
- meterInfoBottomcode.update(queryWrapper);
|
|
|
- } else {
|
|
|
- meterInfoBottomcode.insert();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //项目期期风机总发电量
|
|
|
- @Test
|
|
|
- void saveCalculatingProjectFDL() {
|
|
|
-
|
|
|
-
|
|
|
- //设置取值开始时间
|
|
|
- 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);
|
|
|
-
|
|
|
-
|
|
|
- //1,所有期次发电量测点
|
|
|
- List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_QCFDL"));
|
|
|
-
|
|
|
- //遍历期次发电量测点,拿到场站id,
|
|
|
- for (MeterPoint meterPoint : meterPointList) {
|
|
|
- String projectId = meterPoint.getProjectId();
|
|
|
-
|
|
|
-
|
|
|
- //开始时间00:00:01
|
|
|
- DateTime dateTime1 = DateUtil.offsetSecond(startDateTime, 1);
|
|
|
- //结束时间第二天00:00:01
|
|
|
- DateTime dateTime2 = DateUtil.offsetSecond(startDateTime, 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());
|
|
|
- }
|
|
|
-
|
|
|
- MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
|
|
|
- meterInfoCalculating.setName(meterPoint.getName());
|
|
|
- meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
|
|
|
- meterInfoCalculating.setValue(bigDecimal.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
- meterInfoCalculating.setCode(meterPoint.getNemCode());
|
|
|
- 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();
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //用公式计算
|
|
|
- @Test
|
|
|
- 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", ""));
|
|
|
-
|
|
|
- for (MeterPoint meterPoint : meterPointJSDList) {
|
|
|
- String formula1 = meterPoint.getFormula();
|
|
|
- System.out.println("转换前的公式:" + formula1);
|
|
|
- String formula3 = formula1.replaceAll("DL\\.", "DL_");
|
|
|
- String formula2 = formula3.replaceAll("DJL\\.", "DJL_");
|
|
|
-
|
|
|
- //得到公式字符串(DL.已经替换为DL_)
|
|
|
-// String formula2 = meterPoint.getFormula2();
|
|
|
- System.out.println("转换后的公式字符串:" + formula2);
|
|
|
-
|
|
|
- //分割公式字符串,得到每一的个ode
|
|
|
- String[] meterPointCodes = StringUtils.split(formula1, "[+\\-*/()]");
|
|
|
- meterPointCodes = Arrays.stream(meterPointCodes)
|
|
|
- .filter(meterPointCode -> !(meterPointCode.length() < 8))
|
|
|
- .toArray(String[]::new);
|
|
|
- System.out.println("过滤后公式中的测点数:" + meterPointCodes.length);
|
|
|
- System.out.println(Arrays.toString(meterPointCodes));
|
|
|
-
|
|
|
-
|
|
|
- HashMap<String, Object> map = new HashMap<>();
|
|
|
- //开始时间
|
|
|
- DateTime dateTime1 = DateUtil.offsetSecond(startDateTime,1);
|
|
|
- //遍历code数据,拿到每一个code,用code和时间,在meter_info_bottom中拿到dayValue
|
|
|
- for (String meterPointCode : meterPointCodes) {
|
|
|
-// String meterPointCode_ = meterPointCode.replaceAll("\\.", "_");
|
|
|
- String meterPointCode_1 = meterPointCode.replaceAll("DL\\.", "DL_");
|
|
|
- String meterPointCode_ = meterPointCode_1.replaceAll("DJL\\.", "DJL_");
|
|
|
- System.out.println("要查询的点code:" + meterPointCode);
|
|
|
- System.out.println("替换后的点code:" + meterPointCode_);
|
|
|
-//
|
|
|
- try {
|
|
|
- if (meterPointCode.startsWith("DL")) {
|
|
|
- System.out.println("计算测点DL:" + meterPointCode);
|
|
|
- MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("code", meterPointCode).eq("date", dateTime1));
|
|
|
- System.out.println("测点数据:" + meterInfoCalculating.getValue());
|
|
|
- map.put(meterPointCode_, meterInfoCalculating.getValue());
|
|
|
- } else {
|
|
|
- System.out.println("计算测点Bottom:" + meterPointCode);
|
|
|
- MeterInfoBottomcode meterInfoBottomcode = meterInfoBottomcodeService.getOne(new QueryWrapper<MeterInfoBottomcode>().eq("code", meterPointCode).eq("start_time", dateTime1));
|
|
|
- System.out.println("测点数据日电量:" + meterInfoBottomcode.getDayValue());
|
|
|
- map.put(meterPointCode_, meterInfoBottomcode.getDayValue());
|
|
|
- }
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println("获取数据异常:" + e.getMessage());
|
|
|
-
|
|
|
- }
|
|
|
- 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 saveCalculating3() {
|
|
|
- this.saveEquipmentRfdl();
|
|
|
- this.saveBottomCode();
|
|
|
- this.saveCalculatingProjectFDL();
|
|
|
- this.saveCalculating();
|
|
|
- this.saveCalculating();
|
|
|
- this.saveCalculating();
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|