1.源装置,入参和发送指令业务编写

This commit is contained in:
wr
2024-12-17 19:22:54 +08:00
parent 861f947499
commit dbc07b2cf3
18 changed files with 315 additions and 169 deletions

View File

@@ -3,6 +3,7 @@ package com.njcn.gather.device.script.pojo.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
@@ -19,6 +20,12 @@ public class PqScriptIssueParam {
@ApiModelProperty("检测计划id")
private String planId;
@ApiModelProperty("终端id集合")
private List<String> devIds;
@ApiModelProperty("是否是相序校验")
private Boolean isPhaseSequence;
@ApiModelProperty("源id")
private String sourceId ="111";
}

View File

@@ -28,6 +28,7 @@ public class PqScriptDtls implements Serializable {
/**
* 总检测脚本中的测试项序号
*/
@TableField("Index")
private Integer index;
/**
@@ -88,6 +89,7 @@ public class PqScriptDtls implements Serializable {
/**
* 状态0-不启用 1-启用
*/
@TableField("Enable")
private Integer enable;
}

View File

@@ -1,6 +1,7 @@
package com.njcn.gather.device.script.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -16,6 +17,7 @@ import com.njcn.gather.device.script.pojo.po.SourceIssue;
import com.njcn.gather.device.script.service.IPqScriptDtlsService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -40,6 +42,20 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
private final static String INHARM_I = "InHarm_I";
private final static String DIP = "Dip";
private final static String FLICKER = "Flicker";
@Value("${Dip.fPreTime}")
private Float fPreTime;
@Value("${Dip.fRampIn}")
private Float fRampIn;
@Value("${Dip.fRampOut}")
private Float fRampOut;
@Value("${Dip.fAfterTime}")
private Float fAfterTime;
@Value("${Flicker.waveFluType}")
private String waveFluType;
@Value("${Flicker.waveType}")
private String waveType;
@Value("${Flicker.fDutyCycle}")
private Float fDutyCycle;
private final IPqDevService pqDevService;
@@ -89,6 +105,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
//校验终端额定电压电流是否相同
List<PqDev> list = pqDevService.list(new LambdaQueryWrapper<PqDev>()
.eq(PqDev::getPlanId, param.getPlanId())
.in(PqDev::getId, param.getDevIds())
.eq(PqDev::getState, DataStateEnum.ENABLE.getCode())
);
//额定电压信息
@@ -98,7 +115,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (voltSet.size() == 1 && currSet.size() == 1) {
Float volt = voltSet.stream().collect(Collectors.toList()).stream().findFirst().get();
Float curr = currSet.stream().collect(Collectors.toList()).stream().findFirst().get();
List<PqScriptDtls> pqScriptDtls = this.pqScriptDtls(param.getScriptId(), volt, curr);
List<PqScriptDtls> pqScriptDtls = this.pqScriptDtls(param.getScriptId(),param.getIsPhaseSequence(), volt, curr);
if (CollUtil.isNotEmpty(pqScriptDtls)) {
/**
* 1.获取全部检测点脚本
@@ -134,10 +151,15 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
.sorted(Comparator.comparing(PqScriptDtls::getPhase))
.collect(Collectors.toList());
//谐波电压,间谐波
List<PqScriptDtls> dtlsVList = value.stream().filter(x -> HARM_V.equals(x.getValueType()) || INHARM_V.equals(x.getValueType()))
List<PqScriptDtls> dtlsVList = value.stream().filter(x -> HARM_V.equals(x.getValueType()) ||
INHARM_V.equals(x.getValueType()) ||
DIP.equals(x.getValueType()) ||
FLICKER.equals(x.getValueType())
)
.sorted(Comparator.comparing(PqScriptDtls::getPhase))
.collect(Collectors.toList());
issueAdd(volList, dtlsVList, HARM_V, INHARM_V, "U", channelListDTOS);
issueAdd(volList, dtlsVList, HARM_V, INHARM_V, freqDtls.getValue(), "U", channelListDTOS);
//2.通道电流(ABC)
List<PqScriptDtls> curList = value.stream().filter(x -> CUR.equals(x.getValueType()))
@@ -147,9 +169,8 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
List<PqScriptDtls> dtlsIList = value.stream().filter(x -> HARM_I.equals(x.getValueType()) || HARM_I.equals(x.getValueType()))
.sorted(Comparator.comparing(PqScriptDtls::getPhase))
.collect(Collectors.toList());
issueAdd(curList, dtlsIList, HARM_I, INHARM_I, "I", channelListDTOS);
issueAdd(curList, dtlsIList, HARM_I, INHARM_I, freqDtls.getValue(), "I", channelListDTOS);
//todo 暂降和闪变没写
issue.setChannelList(channelListDTOS);
sourceIssues.add(issue);
}
@@ -161,20 +182,29 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
return sourceIssues;
}
private List<PqScriptDtls> pqScriptDtls(String scriptId, Float volt, Float curr) {
//先获取检测脚本类型是否相对值 true相对值 false绝对值相对值要乘额定值,绝对值不需要处理)
Boolean isValueType = pqScriptMapper.selectScriptIsValueType(scriptId);
List<PqScriptDtls> pqScriptDtls = this.listPqScriptDtlByScriptId(scriptId);
if (isValueType) {
for (PqScriptDtls pqScriptDtl : pqScriptDtls) {
if (VOL.equals(pqScriptDtl.getValueType())) {
pqScriptDtl.setValue(pqScriptDtl.getChagValue() * volt);
}
if (CUR.equals(pqScriptDtl.getValueType())) {
pqScriptDtl.setValue(pqScriptDtl.getChagValue() * curr);
private List<PqScriptDtls> pqScriptDtls(String scriptId,Boolean isPhaseSequence,Float volt, Float curr) {
List<PqScriptDtls> pqScriptDtls;
if(isPhaseSequence){
pqScriptDtls = this.list(new MPJLambdaWrapper<PqScriptDtls>()
.eq(PqScriptDtls::getIndex, -1)
.eq(PqScriptDtls::getEnable, 1)
);
}else{
//先获取检测脚本类型是否相对值 true相对值 false绝对值相对值要乘额定值,绝对值不需要处理)
Boolean isValueType = pqScriptMapper.selectScriptIsValueType(scriptId);
pqScriptDtls = this.listPqScriptDtlByScriptId(scriptId);
if (isValueType) {
for (PqScriptDtls pqScriptDtl : pqScriptDtls) {
if (VOL.equals(pqScriptDtl.getValueType())) {
pqScriptDtl.setValue(pqScriptDtl.getChagValue() * volt);
}
if (CUR.equals(pqScriptDtl.getValueType())) {
pqScriptDtl.setValue(pqScriptDtl.getChagValue() * curr);
}
}
}
}
return pqScriptDtls;
}
@@ -184,6 +214,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
* @param dtlsList 其他类型检测集合(谐波,间谐波等)
* @param harm 谐波
* @param harm 间谐波
* @param fFreq 频率
* @param code U,I
* @param channelListDTOS 通道信息
* @param channelListDTOS 通道信息
@@ -191,12 +222,13 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
* @Author: wr
* @Date: 2024/12/16 15:51
*/
private static void issueAdd(List<PqScriptDtls> dtlsList,
List<PqScriptDtls> dtlsOtherList,
String harm,
String inHarm,
String code,
List<SourceIssue.ChannelListDTO> channelListDTOS) {
private void issueAdd(List<PqScriptDtls> dtlsList,
List<PqScriptDtls> dtlsOtherList,
String harm,
String inHarm,
Float fFreq,
String code,
List<SourceIssue.ChannelListDTO> channelListDTOS) {
for (PqScriptDtls dtls : dtlsList) {
SourceIssue.ChannelListDTO channelListDTO = new SourceIssue.ChannelListDTO();
channelListDTO.setChannelFlag(true);
@@ -212,20 +244,26 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
//暂态数据
SourceIssue.ChannelListDTO.DipDataDTO dipDataDTO = new SourceIssue.ChannelListDTO.DipDataDTO();
dipDataDTO.setFTransValue(0.0f);
dipDataDTO.setFPreTime(0.0f);
dipDataDTO.setFRampIn(0.001f);
dipDataDTO.setFRetainTime(0.0f);
dipDataDTO.setFRampOut(0.001f);
dipDataDTO.setFAfterTime(0.0f);
dipDataDTO.setFPreTime(fPreTime);
dipDataDTO.setFRampIn(fRampIn);
dipDataDTO.setFRampOut(fRampOut);
dipDataDTO.setFAfterTime(fAfterTime);
channelListDTO.setDipData(dipDataDTO);
//闪变数据
SourceIssue.ChannelListDTO.FlickerDataDTO flickerDataDTO = new SourceIssue.ChannelListDTO.FlickerDataDTO();
flickerDataDTO.setWaveFluType(null);
flickerDataDTO.setWaveType(null);
flickerDataDTO.setFDutyCycle(0.0f);
flickerDataDTO.setWaveFluType(waveFluType);
flickerDataDTO.setWaveType(waveType);
flickerDataDTO.setFDutyCycle(fDutyCycle);
flickerDataDTO.setFChagFre(0.0f);
flickerDataDTO.setFChagValue(0.0f);
channelListDTO.setFlickerData(flickerDataDTO);
if (CollUtil.isNotEmpty(dtlsOtherList)) {
List<PqScriptDtls> phaseList = dtlsOtherList.stream().filter(x -> dtls.getPhase().equals(x.getPhase()))
.sorted(Comparator.comparing(PqScriptDtls::getHarmNum))
@@ -238,7 +276,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
channelListDTO.setHarmList(getHarmModels(harmList));
channelListDTO.setHarmFlag(true);
}
//处理间谐波电压
//处理间谐波类型
List<PqScriptDtls> inHarmList = phaseList.stream().filter(x -> inHarm.equals(x.getValueType()))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(inHarmList)) {
@@ -251,11 +289,8 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (CollUtil.isNotEmpty(dipList)) {
PqScriptDtls dip = dipList.get(0);
dipDataDTO.setFTransValue(dip.getTransValue());
dipDataDTO.setFPreTime(0.0f);
dipDataDTO.setFRampIn(0.001f);
dipDataDTO.setFRetainTime(0.0f);
dipDataDTO.setFRampOut(0.001f);
dipDataDTO.setFAfterTime(0.0f);
// 1.0/频率*持续时间(周波)= 暂态持续时间s
dipDataDTO.setFRetainTime(NumberUtil.round(1.0 / fFreq * dip.getRetainTime(), 3).floatValue());
channelListDTO.setDipFlag(true);
channelListDTO.setDipData(dipDataDTO);
}
@@ -263,12 +298,11 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
List<PqScriptDtls> flickeRList = phaseList.stream().filter(x -> FLICKER.equals(x.getValueType()))
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(flickeRList)) {
PqScriptDtls flicke = flickeRList.get(0);
flickerDataDTO.setWaveFluType(null);
flickerDataDTO.setWaveType(null);
flickerDataDTO.setFDutyCycle(0.0f);
flickerDataDTO.setFChagFre(0.0f);
flickerDataDTO.setFChagValue(0.0f);
PqScriptDtls flicker = flickeRList.get(0);
flickerDataDTO.setFChagFre(flicker.getChagFre());
flickerDataDTO.setFChagValue(flicker.getChagValue());
channelListDTO.setFlickerFlag(true);
channelListDTO.setFlickerData(flickerDataDTO);
}
@@ -285,7 +319,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
* @param phaseHarmVList
* @return
*/
private static List<SourceIssue.ChannelListDTO.HarmModel> getHarmModels(List<PqScriptDtls> phaseHarmVList) {
private List<SourceIssue.ChannelListDTO.HarmModel> getHarmModels(List<PqScriptDtls> phaseHarmVList) {
List<SourceIssue.ChannelListDTO.HarmModel> info = new ArrayList<>();
SourceIssue.ChannelListDTO.HarmModel harmModel;
for (PqScriptDtls pqScriptDtls : phaseHarmVList) {
@@ -304,7 +338,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
* @param phaseHarmVList
* @return
*/
private static List<SourceIssue.ChannelListDTO.InharmModel> getInHarmModels(List<PqScriptDtls> phaseHarmVList) {
private List<SourceIssue.ChannelListDTO.InharmModel> getInHarmModels(List<PqScriptDtls> phaseHarmVList) {
List<SourceIssue.ChannelListDTO.InharmModel> info = new ArrayList<>();
SourceIssue.ChannelListDTO.InharmModel inHarmModel;
for (PqScriptDtls pqScriptDtls : phaseHarmVList) {