向前端推送暂降点

This commit is contained in:
caozehui
2026-04-16 15:02:53 +08:00
parent ab11c91579
commit a77313171c
7 changed files with 60 additions and 44 deletions

View File

@@ -54,6 +54,8 @@ public class SocketFreqConverterDevService {
private String monitorId;
private String userId;
public static final String DIP_DATA_SUFFIX = "&&VOLTAGE";
/**
* 连接设备Socket
*
@@ -224,7 +226,7 @@ public class SocketFreqConverterDevService {
private void sendGetDipDataMsg(String devTag) {
SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&VOLTAGE");
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + DIP_DATA_SUFFIX);
socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
@@ -309,8 +311,7 @@ public class SocketFreqConverterDevService {
testRes.setStartTime(lastStatusData.getTimestamp());
FormalTestManager.pendingDipTaskMap.put(pqDipData.getId(), new FormalTestManager.PendingDipTask(
pqDipData.getId(),
pqDipData.getStartTime(),
pqDipData,
targetEndTime,
originalTolerant
));

View File

@@ -7,16 +7,19 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.njcn.gather.detection.pojo.dto.FreqConverterRespDTO;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.util.socket.FormalTestManager;
import com.njcn.gather.detection.util.socket.SocketManager;
import com.njcn.gather.detection.util.socket.cilent.NettyClient;
import com.njcn.gather.detection.util.socket.cilent.NettyFreqConverterClientHandler;
import com.njcn.gather.detection.util.socket.config.SocketConnectionConfig;
import com.njcn.gather.detection.util.socket.websocket.WebServiceManager;
import com.njcn.gather.freqConverter.config.FreqConverterConfig;
import com.njcn.gather.freqConverter.pojo.po.FreqConverterStatus;
import com.njcn.gather.freqConverter.pojo.po.PqFreqConverterConfig;
import com.njcn.gather.freqConverter.pojo.po.PqFreqConverterTestRes;
import com.njcn.gather.freqConverter.pojo.vo.TolerantPointVO;
import com.njcn.gather.freqConverter.service.IFreqConverterService;
import com.njcn.gather.freqConverter.service.IPqFreqConverterConfigService;
import com.njcn.gather.freqConverter.service.IPqFreqConverterTestResService;
@@ -257,9 +260,9 @@ public class SocketFreqConverterService {
List<String> finishedDipIdList = new ArrayList<>();
List<PqFreqConverterTestRes> testResList = new ArrayList<>();
for (FormalTestManager.PendingDipTask task : FormalTestManager.pendingDipTaskMap.values()) {
PqFreqConverterTestRes testRes = pqFreqConverterTestResService.getByDipId(suffix, task.getDipId());
PqFreqConverterTestRes testRes = pqFreqConverterTestResService.getByDipId(suffix, task.getPqDipData().getId());
if (Objects.isNull(testRes)) {
finishedDipIdList.add(task.getDipId());
finishedDipIdList.add(task.getPqDipData().getId());
continue;
}
@@ -270,9 +273,20 @@ public class SocketFreqConverterService {
testResList.add(testRes);
if (freqConverterStatus.getTimestamp().isAfter(task.getTargetEndTime())) {
finishedDipIdList.add(task.getDipId());
finishedDipIdList.add(task.getPqDipData().getId());
SocketDataMsg socketDataMsg = new SocketDataMsg();
socketDataMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL + SocketFreqConverterDevService.DIP_DATA_SUFFIX);
TolerantPointVO tolerantPointVO = new TolerantPointVO();
tolerantPointVO.setResidualVoltage(task.getPqDipData().getResidualVoltage());
tolerantPointVO.setDurationMs(task.getPqDipData().getDurationMs());
tolerantPointVO.setTolerant(testRes.getTolerant());
socketDataMsg.setData(JSON.toJSONString(tolerantPointVO));
WebServiceManager.sendMsg(this.userId, JSON.toJSONString(socketDataMsg));
}
}
pqFreqConverterTestResService.saveOrUpdateTestRes(suffix, testResList);
for (String dipId : finishedDipIdList) {

View File

@@ -7,6 +7,7 @@ import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
import com.njcn.gather.device.pojo.enums.PatternEnum;
import com.njcn.gather.device.pojo.vo.PreDetection;
import com.njcn.gather.dip.pojo.po.PqDipData;
import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.pojo.po.AdPlanTestConfig;
@@ -227,14 +228,13 @@ public class FormalTestManager {
@Data
public static class PendingDipTask {
private final String dipId;
private LocalDateTime startTime;
private PqDipData pqDipData;
private LocalDateTime targetEndTime;
private Boolean originalTolerant;
public PendingDipTask(String dipId, LocalDateTime startTime, LocalDateTime targetEndTime, Boolean originalTolerant) {
this.dipId = dipId;
this.startTime = startTime;
public PendingDipTask(PqDipData pqDipData, LocalDateTime targetEndTime, Boolean originalTolerant) {
this.pqDipData = pqDipData;
this.targetEndTime = targetEndTime;
this.originalTolerant = originalTolerant;
}

View File

@@ -95,12 +95,12 @@ public class FreqConverterController extends BaseController {
}
@GetMapping("/result")
@ApiOperation("查询耐受实验结果")
@ApiOperation("查询变频器测试结果")
@ApiImplicitParam(name = "param", value = "查询参数", required = true)
public HttpResult<List<TolerantPointVO>> result(@RequestParam("converterId") String converterId) {
String methodDescribe = getMethodDescribe("result");
LogUtil.njcnDebug(log, "{}查询ID数据为{}", methodDescribe, converterId);
List<TolerantPointVO> tolerantPoints = freqConverterService.getTolerantPoints(converterId);
List<TolerantPointVO> tolerantPoints = freqConverterService.getDipPoints(converterId);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, tolerantPoints, methodDescribe);
}
}

View File

@@ -46,7 +46,7 @@ public interface IFreqConverterService extends IService<FreqConverterStatus> {
* @param converterId 变频器Id
* @return 是否耐受
*/
List<TolerantPointVO> getTolerantPoints(String converterId);
List<TolerantPointVO> getDipPoints(String converterId);
List<FreqConverterStatus> getDipDurationStatusData(Integer suffix, LocalDateTime startTime, LocalDateTime endTime);

View File

@@ -18,8 +18,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@@ -41,13 +39,14 @@ public class FreqConverterServiceImpl extends ServiceImpl<FreqConverterStatusMap
private final IPqDipDataService dipDataService;
private final IPqFreqConverterTestResService pqFreqConverterTestResService;
@Override
@Transactional(rollbackFor = Exception.class)
public boolean saveFreqConverterStatus(Integer suffix, FreqConverterStatus status) {
if (status.getId() == null) {
status.setId(IdUtil.fastSimpleUUID());
}
DynamicTableNameHandler.setTableName("pq_freq_converter_status_" + suffix);
DynamicTableNameHandler.setTableName(PqFreqConverterConfigServiceImpl.PQ_FREQ_CONVERTER_STATUS_TB_PREFIX + suffix);
boolean result = this.save(status);
DynamicTableNameHandler.remove();
return result;
@@ -57,7 +56,7 @@ public class FreqConverterServiceImpl extends ServiceImpl<FreqConverterStatusMap
public List<FreqConverterStatus> listStatusData(String converterId) {
Integer suffix = pqFreqConverterConfigService.getSuffix(converterId);
DynamicTableNameHandler.setTableName("pq_freq_converter_status_" + suffix);
DynamicTableNameHandler.setTableName(PqFreqConverterConfigServiceImpl.PQ_FREQ_CONVERTER_STATUS_TB_PREFIX + suffix);
LambdaQueryChainWrapper<FreqConverterStatus> wrapper = this.lambdaQuery().orderByAsc(FreqConverterStatus::getTimestamp);
List<FreqConverterStatus> result = wrapper.list();
DynamicTableNameHandler.remove();
@@ -68,38 +67,33 @@ public class FreqConverterServiceImpl extends ServiceImpl<FreqConverterStatusMap
@Override
@Transactional(rollbackFor = Exception.class)
public void clearAllData(Integer suffix) {
DynamicTableNameHandler.setTableName("pq_freq_converter_status_" + suffix);
DynamicTableNameHandler.setTableName(PqFreqConverterConfigServiceImpl.PQ_FREQ_CONVERTER_STATUS_TB_PREFIX + suffix);
this.remove(null);
DynamicTableNameHandler.remove();
}
@Override
public List<TolerantPointVO> getTolerantPoints(String converterId) {
public List<TolerantPointVO> getDipPoints(String converterId) {
Integer suffix = pqFreqConverterConfigService.getSuffix(converterId);
List<PqDipData> dipDataList = dipDataService.listDipData(suffix);
List<PqFreqConverterTestRes> testResList = pqFreqConverterTestResService.listTestRes(suffix);
dipDataList.sort(Comparator.comparing(PqDipData::getDurationMs));
List<TolerantPointVO> res = new ArrayList<>();
for (PqDipData dipData : dipDataList) {
DynamicTableNameHandler.setTableName(PqFreqConverterConfigServiceImpl.PQ_FREQ_CONVERTER_TEST_RES_TB_PREFIX + suffix);
List<PqFreqConverterTestRes> pqFreqConverterTestResList = pqFreqConverterTestResService.list();
List<TolerantPointVO> result = pqFreqConverterTestResList.stream().map(item -> {
PqDipData pqDipData = dipDataService.getById(item.getDipId());
TolerantPointVO tolerantPointVO = new TolerantPointVO();
tolerantPointVO.setDurationMs(dipData.getDurationMs());
tolerantPointVO.setResidualVoltage(dipData.getResidualVoltage());
List<PqFreqConverterTestRes> matchedResList = testResList.stream()
.filter(item -> dipData.getId().equals(item.getDipId()))
.collect(Collectors.toList());
tolerantPointVO.setDurationMs(pqDipData.getDurationMs());
tolerantPointVO.setResidualVoltage(pqDipData.getResidualVoltage());
tolerantPointVO.setTolerant(item.getTolerant());
return tolerantPointVO;
}).collect(Collectors.toList());
DynamicTableNameHandler.remove();
boolean tolerant = matchedResList.stream().allMatch(PqFreqConverterTestRes::getTolerant);
tolerantPointVO.setTolerant(tolerant);
res.add(tolerantPointVO);
}
return res;
return result;
}
@Override
public List<FreqConverterStatus> getDipDurationStatusData(Integer suffix, LocalDateTime startTime, LocalDateTime endTime) {
DynamicTableNameHandler.setTableName("pq_freq_converter_status_" + suffix);
DynamicTableNameHandler.setTableName(PqFreqConverterConfigServiceImpl.PQ_FREQ_CONVERTER_STATUS_TB_PREFIX + suffix);
List<FreqConverterStatus> result = this.lambdaQuery()
.between(FreqConverterStatus::getTimestamp, startTime, endTime)
.orderByAsc(FreqConverterStatus::getTimestamp)
@@ -110,7 +104,7 @@ public class FreqConverterServiceImpl extends ServiceImpl<FreqConverterStatusMap
@Override
public FreqConverterStatus getLastStatusData(Integer suffix, LocalDateTime startTime) {
DynamicTableNameHandler.setTableName("pq_freq_converter_status_" + suffix);
DynamicTableNameHandler.setTableName(PqFreqConverterConfigServiceImpl.PQ_FREQ_CONVERTER_STATUS_TB_PREFIX + suffix);
FreqConverterStatus one = this.lambdaQuery().le(FreqConverterStatus::getTimestamp, startTime)
.orderByDesc(FreqConverterStatus::getTimestamp)
.last("limit 1")

View File

@@ -28,6 +28,13 @@ import java.util.List;
public class PqFreqConverterConfigServiceImpl extends ServiceImpl<PqFreqConverterConfigMapper, PqFreqConverterConfig> implements IPqFreqConverterConfigService {
private final TableGenMapper tableGenMapper;
/**
* 表名前缀
*/
public static final String PQ_FREQ_CONVERTER_STATUS_TB_PREFIX = "pq_freq_converter_status_";
public static final String PQ_DIP_DATA_TB_PREFIX = "pq_diq_data_";
public static final String PQ_FREQ_CONVERTER_TEST_RES_TB_PREFIX = "pq_freq_converter_test_res_";
@Override
public Page<PqFreqConverterConfig> listPqFreqConverterConfigs(PqFreqConverterParam.QueryParam queryParam) {
QueryWrapper wrapper = new QueryWrapper<>();
@@ -53,7 +60,7 @@ public class PqFreqConverterConfigServiceImpl extends ServiceImpl<PqFreqConverte
maxSuffix = freqConverterConfig.getSuffix() + 1;
}
String tableSql = "CREATE TABLE `pq_freq_converter_status_" + maxSuffix + "` (" +
String tableSql = "CREATE TABLE `" + PQ_FREQ_CONVERTER_STATUS_TB_PREFIX + maxSuffix + "`(" +
" `id` char(32) NOT NULL COMMENT '主键ID'," +
" `slave_address` int(11) DEFAULT NULL COMMENT '从机地址'," +
" `status_word1` int(11) DEFAULT NULL COMMENT '状态字1'," +
@@ -63,7 +70,7 @@ public class PqFreqConverterConfigServiceImpl extends ServiceImpl<PqFreqConverte
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='变频器状态表';";
tableGenMapper.genTable(tableSql);
tableSql = "CREATE TABLE `pq_dip_data_" + maxSuffix + "` (" +
tableSql = "CREATE TABLE `" + PQ_DIP_DATA_TB_PREFIX + maxSuffix + "` (" +
" `id` char(32) NOT NULL COMMENT '主键ID'," +
" `start_time` datetime(3) NOT NULL COMMENT '起始时间戳'," +
" `residual_voltage` decimal(6,2) NOT NULL COMMENT '残余电压(%Ur)'," +
@@ -72,7 +79,7 @@ public class PqFreqConverterConfigServiceImpl extends ServiceImpl<PqFreqConverte
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='电压暂降数据表';";
tableGenMapper.genTable(tableSql);
tableSql = "CREATE TABLE `pq_freq_converter_test_res_" + maxSuffix + "` (" +
tableSql = "CREATE TABLE `" + PQ_FREQ_CONVERTER_TEST_RES_TB_PREFIX + maxSuffix + "` (" +
" `id` char(32) NOT NULL COMMENT '主键ID'," +
" `dip_id` char(32) NOT NULL COMMENT '装置暂降数据id'," +
" `start_time` datetime(3) DEFAULT NULL COMMENT '该暂降时期对应变频器的起始时间戳'," +
@@ -105,9 +112,9 @@ public class PqFreqConverterConfigServiceImpl extends ServiceImpl<PqFreqConverte
List<PqFreqConverterConfig> pqFreqConverterConfigs = this.listByIds(ids);
for (PqFreqConverterConfig pqFreqConverterConfig : pqFreqConverterConfigs) {
Integer suffix = pqFreqConverterConfig.getSuffix();
sql.append("pq_freq_converter_status_" + suffix + ",")
.append("pq_dip_data_" + suffix + ",")
.append("pq_freq_converter_test_res_" + suffix + ",");
sql.append(PQ_FREQ_CONVERTER_STATUS_TB_PREFIX + suffix + ",")
.append(PQ_DIP_DATA_TB_PREFIX + suffix + ",")
.append(PQ_FREQ_CONVERTER_TEST_RES_TB_PREFIX + suffix + ",");
}
sql.deleteCharAt(sql.length() - 1);