二次值转换为一次值

This commit is contained in:
xy
2024-08-14 14:04:41 +08:00
parent 703a145bb3
commit 2f1e899be7
8 changed files with 152 additions and 21 deletions

View File

@@ -390,6 +390,14 @@ public class MqttMessageHandler {
return "APF模块 5";
case "6":
return "APF模块 6";
case "7":
return "APF模块 7";
case "8":
return "APF模块 8";
case "9":
return "APF模块 9";
case "10":
return "APF模块 10";
default:
break;
}

View File

@@ -9,6 +9,8 @@ import com.njcn.csdevice.enums.AlgorithmResponseEnum;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.dto.LineParamDTO;
import com.njcn.csdevice.pojo.po.CsLedger;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.EnergyTemplateVO;
import com.njcn.csharmonic.param.DevicDataTrendQueryParam;
import com.njcn.csharmonic.pojo.vo.ThdDataVO;
import com.njcn.csharmonic.service.DeviceDataTrendService;
@@ -20,6 +22,7 @@ import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.api.EpdFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.system.pojo.po.EleEpdPqd;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -27,9 +30,7 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -49,6 +50,7 @@ public class DeviceDataTrendServiceImpl implements DeviceDataTrendService {
private final DicDataFeignClient dicDataFeignClient;
private final EquipmentFeignClient equipmentFeignClient;
private final InfluxDbParamUtil influxDbParamUtil;
private final EpdFeignClient epdFeignClient;
@Override
public List<List<ThdDataVO>> queryDataTrend(DevicDataTrendQueryParam devicDataTrendQueryParam) {
List<List<ThdDataVO>> result = new ArrayList<>();
@@ -60,29 +62,41 @@ public class DeviceDataTrendServiceImpl implements DeviceDataTrendService {
lineParamDTO.setLineId(devicDataTrendQueryParam.getLineId());
List<CsLedger> data = csLedgerFeignClient.queryLine(lineParamDTO).getData();
List<CsEquipmentDeliveryDTO> data1 = equipmentFeignClient.queryDeviceById(Stream.of((data == null || data.isEmpty()) ? devicDataTrendQueryParam.getDevId() : data.get(0).getPid()).collect(Collectors.toList())).getData();
//根据lineId获取监测点pt、ct变比
CsLinePO csLinePO = csLineFeignClient.queryLineById(Collections.singletonList(devicDataTrendQueryParam.getLineId())).getData().get(0);
devicDataTrendQueryParam.getStatisticalParams().forEach(temp->{
CommonQueryParam commonQueryParam = new CommonQueryParam();
commonQueryParam.setLineId(devicDataTrendQueryParam.getLineId());
commonQueryParam.setTableName(influxDbParamUtil.getTableNameByClassId(temp.getClassId()));
commonQueryParam.setColumnName(temp.getName());
commonQueryParam.setPhasic(temp.getPhase());
commonQueryParam.setStartTime( devicDataTrendQueryParam.getStartTime());
commonQueryParam.setEndTime(devicDataTrendQueryParam.getEndTime());
commonQueryParam.setStartTime( devicDataTrendQueryParam.getStartTime() + " 00:00:00");
commonQueryParam.setEndTime(devicDataTrendQueryParam.getEndTime() + " 23:59:59");
commonQueryParam.setDataType( temp.getStatMethod());
commonQueryParam.setProcess(data1.get(0).getProcess()+"");
commonQueryParam.setClDid(influxDbParamUtil.getClDidByLineId(devicDataTrendQueryParam.getLineId()));
EleEpdPqd epdPqd = epdFeignClient.selectByIds(Collections.singletonList(temp.getDataId())).getData().get(0);
List<StatisticalDataDTO> deviceRtData = commonService.getDeviceRtDataByTime(Stream.of(commonQueryParam).collect(Collectors.toList()));
List<ThdDataVO> collect1 = deviceRtData.stream().map(statisticalDataDTO -> {
ThdDataVO vo = new ThdDataVO();
vo.setLineId(statisticalDataDTO.getLineId());
vo.setPhase(statisticalDataDTO.getPhaseType());
vo.setTime(statisticalDataDTO.getTime());
vo.setStatMethod(statisticalDataDTO.getValueType());
vo.setStatisticalData(BigDecimal.valueOf(statisticalDataDTO.getValue()).setScale(4, RoundingMode.UP).doubleValue());
//对二次值做转换
if (Objects.equals(devicDataTrendQueryParam.getDataLevel(),"Secondary")) {
if (!Objects.isNull(epdPqd.getPrimaryFormula())) {
double secondaryData = secondaryToPrimary(epdPqd.getPrimaryFormula(), statisticalDataDTO.getValue(), csLinePO.getPtRatio(), csLinePO.getCtRatio());
vo.setStatisticalData(BigDecimal.valueOf(secondaryData).setScale(4, RoundingMode.UP).doubleValue());
} else {
vo.setStatisticalData(BigDecimal.valueOf(statisticalDataDTO.getValue()).setScale(4, RoundingMode.UP).doubleValue());
}
} else {
vo.setStatisticalData(BigDecimal.valueOf(statisticalDataDTO.getValue()).setScale(4, RoundingMode.UP).doubleValue());
}
vo.setStatisticalIndex(temp.getDataId());
vo.setStatisticalName(temp.getName());
vo.setUnit(temp.getUnit());
@@ -91,9 +105,29 @@ public class DeviceDataTrendServiceImpl implements DeviceDataTrendService {
}).collect(Collectors.toList());
result.add(collect1);
});
return result;
}
/**
* 二次值换算成一次值
*/
public double secondaryToPrimary(String formula, Double data,Double pt, Double ct) {
switch (formula) {
case "*PT":
data = data * pt;
break;
case "*CT":
data = data * ct;
break;
case "*PT*CT/1000":
data = data * pt * ct / 1000;
break;
case "*PT/1000":
data = data * pt / 1000;
break;
default:
break;
}
return data;
}
}