feat(system-ops): 新增系统运维模块及稳态数据视图优化

- 添加 system-ops 模块及其子模块 dbms 和 deploy
- 实现数据库监控和系统部署的基础接口和服务
- 更新项目依赖配置和文档说明
- 优化稳态数据视图中线电压相位显示逻辑
- 完善线电压指标的相位解析和测试验证
This commit is contained in:
2026-05-21 14:08:15 +08:00
parent 89efc55119
commit 9a9614a9e5
21 changed files with 481 additions and 6 deletions

View File

@@ -29,7 +29,7 @@ public class SteadyTrendIndicatorCatalog {
List<SteadyTrendIndicatorDefinitionBO> result = new ArrayList<SteadyTrendIndicatorDefinitionBO>();
result.add(indicator("V_RMS", "相电压有效值", "VOLTAGE", "电压趋势", "data_v", ABC_PHASES,
fields(field("rms", "相电压有效值")), FULL_STATS, "V"));
result.add(indicator("V_LINE_RMS", "线电压有效值", "VOLTAGE", "电压趋势", "data_v", T_PHASE,
result.add(indicator("V_LINE_RMS", "线电压有效值", "VOLTAGE", "电压趋势", "data_v", ABC_PHASES,
fields(field("rms_lvr", "线电压有效值")),
FULL_STATS, "V"));
result.add(indicator("FREQ", "频率", "FREQUENCY", "频率趋势", "data_v", T_PHASE,

View File

@@ -33,6 +33,7 @@ import java.util.Map;
public class SteadyDataViewTrendServiceImpl implements SteadyDataViewTrendService {
private static final String EMPTY_TEXT = "-";
private static final String LINE_VOLTAGE_RMS_INDICATOR = "V_LINE_RMS";
private final SteadyTrendFieldResolver fieldResolver;
private final SteadyInfluxQueryComponent influxQueryComponent;
@@ -91,13 +92,29 @@ public class SteadyDataViewTrendServiceImpl implements SteadyDataViewTrendServic
series.setIndicatorCode(field.getIndicatorCode());
series.setIndicatorName(field.getIndicatorName());
series.setSeriesName(field.getSeriesName());
series.setPhase(field.getPhase());
series.setPhase(resolveDisplayPhase(field));
series.setStatType(field.getStatType());
series.setUnit(field.getUnit());
series.setPoints(points);
return series;
}
private String resolveDisplayPhase(SteadyTrendResolvedFieldBO field) {
if (!LINE_VOLTAGE_RMS_INDICATOR.equals(field.getIndicatorCode())) {
return field.getPhase();
}
if ("A".equals(field.getPhase())) {
return "AB";
}
if ("B".equals(field.getPhase())) {
return "BC";
}
if ("C".equals(field.getPhase())) {
return "CA";
}
return field.getPhase();
}
private void enrichLineNames(List<SteadyTrendResolvedFieldBO> fields) {
List<String> lineIds = new ArrayList<String>();
for (SteadyTrendResolvedFieldBO field : fields) {

View File

@@ -54,7 +54,7 @@ class SteadyTrendFieldResolverTest {
}
@Test
void shouldExpandTotalPhaseIndicatorWithoutRequestPhaseFilter() {
void shouldExpandLineVoltageIndicatorWithQueryPhases() {
SteadyTrendQueryParam param = new SteadyTrendQueryParam();
param.setLineIds(Arrays.asList("line-001"));
param.setIndicatorCodes(Arrays.asList("V_LINE_RMS"));
@@ -63,9 +63,9 @@ class SteadyTrendFieldResolverTest {
param.setTimeEnd("2026-05-01 01:00:00");
List<SteadyTrendResolvedFieldBO> fields = resolver.resolveFields(param);
List<String> phases = fields.stream().map(SteadyTrendResolvedFieldBO::getPhase).collect(Collectors.toList());
Assertions.assertEquals(1, fields.size());
Assertions.assertEquals("T", fields.get(0).getPhase());
Assertions.assertEquals(Arrays.asList("A", "B", "C"), phases);
Assertions.assertEquals("rms_lvr", fields.get(0).getField());
}

View File

@@ -0,0 +1,54 @@
package com.njcn.gather.steady.datavie.service.impl;
import com.njcn.gather.steady.datavie.component.SteadyInfluxQueryComponent;
import com.njcn.gather.steady.datavie.component.SteadyTrendFieldResolver;
import com.njcn.gather.steady.datavie.component.SteadyTrendIndicatorCatalog;
import com.njcn.gather.steady.datavie.pojo.bo.SteadyTrendResolvedFieldBO;
import com.njcn.gather.steady.datavie.pojo.param.SteadyTrendQueryParam;
import com.njcn.gather.steady.datavie.pojo.vo.SteadyTrendQueryVO;
import com.njcn.gather.tool.addledger.service.AddLedgerService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* 稳态趋势查询服务测试。
*/
class SteadyDataViewTrendServiceImplTest {
@Test
void shouldDisplayLineVoltagePhasesAsLinePairs() {
SteadyInfluxQueryComponent influxQueryComponent = mock(SteadyInfluxQueryComponent.class);
AddLedgerService addLedgerService = mock(AddLedgerService.class);
SteadyDataViewTrendServiceImpl service = new SteadyDataViewTrendServiceImpl(
new SteadyTrendFieldResolver(new SteadyTrendIndicatorCatalog()), influxQueryComponent, addLedgerService);
when(addLedgerService.listLinePathByLineIds(eq(Collections.singletonList("line-001"))))
.thenReturn(Collections.emptyMap());
when(influxQueryComponent.queryTrendPoints(any(SteadyTrendResolvedFieldBO.class),
any(LocalDateTime.class), any(LocalDateTime.class), eq(0))).thenReturn(Collections.emptyList());
SteadyTrendQueryParam param = new SteadyTrendQueryParam();
param.setLineIds(Collections.singletonList("line-001"));
param.setIndicatorCodes(Collections.singletonList("V_LINE_RMS"));
param.setStatTypes(Collections.singletonList("AVG"));
param.setTimeStart("2026-05-01 00:00:00");
param.setTimeEnd("2026-05-01 01:00:00");
param.setQualityFlag(0);
SteadyTrendQueryVO result = service.queryTrend(param);
List<String> phases = result.getSeries().stream()
.map(series -> series.getPhase())
.collect(Collectors.toList());
Assertions.assertEquals(Arrays.asList("AB", "BC", "CA"), phases);
}
}