检测计划统计弹窗下拉框内容调整

This commit is contained in:
caozehui
2026-05-29 09:57:55 +08:00
parent befe5abe0c
commit 694a99a96f
5 changed files with 93 additions and 3 deletions

View File

@@ -0,0 +1,15 @@
package com.njcn.gather.plan.pojo.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PlanStatisticsOptionVO {
private String id;
private String name;
}

View File

@@ -90,4 +90,14 @@ public class PlanStatisticsVO {
* 检测项分布。
*/
private List<PlanStatisticsItemVO> itemDistributions;
/**
* 设备厂家筛选项。
*/
private List<PlanStatisticsOptionVO> manufacturerOptions;
/**
* 设备类型筛选项。
*/
private List<PlanStatisticsOptionVO> devTypeOptions;
}

View File

@@ -827,13 +827,16 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
throw new BusinessException(DetectionResponseEnum.PLAN_NOT_EXIST);
}
List<PqDevVO> planDevices = listPlanDevices(plan.getId(), param.getManufacturer(), param.getDevType());
List<PqDevVO> allPlanDevices = listPlanDevices(plan.getId(), null, null);
List<PqDevVO> planDevices = filterPlanDevices(allPlanDevices, param.getManufacturer(), param.getDevType());
List<PqDevVO> checkedDevices = planDevices.stream()
.filter(this::isCheckedDevice)
.collect(Collectors.toList());
PlanStatisticsVO statistics = new PlanStatisticsVO();
statistics.setPlanId(plan.getId());
statistics.setPlanName(plan.getName());
statistics.setManufacturerOptions(buildManufacturerOptions(allPlanDevices, param.getDevType()));
statistics.setDevTypeOptions(buildDevTypeOptions(allPlanDevices, param.getManufacturer()));
statistics.setUncheckedDeviceCount(planDevices.size() - checkedDevices.size());
statistics.setCheckedDeviceCount(checkedDevices.size());
statistics.setTotalCheckCount(checkedDevices.stream().mapToInt(dev -> defaultZero(dev.getRecheckNum())).sum());
@@ -880,12 +883,57 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
if (CollUtil.isEmpty(pqDevVOList)) {
return Collections.emptyList();
}
return pqDevVOList.stream()
return filterPlanDevices(pqDevVOList, manufacturer, devType);
}
private List<PqDevVO> filterPlanDevices(List<PqDevVO> devices, String manufacturer, String devType) {
if (CollUtil.isEmpty(devices)) {
return Collections.emptyList();
}
return devices.stream()
.filter(dev -> StrUtil.isBlank(manufacturer) || Objects.equals(dev.getManufacturer(), manufacturer))
.filter(dev -> StrUtil.isBlank(devType) || Objects.equals(dev.getDevType(), devType))
.collect(Collectors.toList());
}
private List<PlanStatisticsOptionVO> buildManufacturerOptions(List<PqDevVO> devices, String devType) {
if (CollUtil.isEmpty(devices)) {
return Collections.emptyList();
}
List<String> ids = devices.stream()
.filter(dev -> StrUtil.isBlank(devType) || Objects.equals(dev.getDevType(), devType))
.map(PqDevVO::getManufacturer)
.filter(StrUtil::isNotBlank)
.distinct()
.collect(Collectors.toList());
Map<String, String> nameMap = ids.isEmpty()
? Collections.emptyMap()
: dictDataService.listByIds(ids).stream()
.collect(Collectors.toMap(DictData::getId, DictData::getName, (left, right) -> left));
return ids.stream()
.map(id -> new PlanStatisticsOptionVO(id, nameMap.getOrDefault(id, id)))
.collect(Collectors.toList());
}
private List<PlanStatisticsOptionVO> buildDevTypeOptions(List<PqDevVO> devices, String manufacturer) {
if (CollUtil.isEmpty(devices)) {
return Collections.emptyList();
}
List<String> ids = devices.stream()
.filter(dev -> StrUtil.isBlank(manufacturer) || Objects.equals(dev.getManufacturer(), manufacturer))
.map(PqDevVO::getDevType)
.filter(StrUtil::isNotBlank)
.distinct()
.collect(Collectors.toList());
Map<String, String> nameMap = ids.isEmpty()
? Collections.emptyMap()
: devTypeService.listByIds(ids).stream()
.collect(Collectors.toMap(DevType::getId, DevType::getName, (left, right) -> left));
return ids.stream()
.map(id -> new PlanStatisticsOptionVO(id, nameMap.getOrDefault(id, id)))
.collect(Collectors.toList());
}
private boolean isCheckedDevice(PqDevVO dev) {
return (Objects.equals(dev.getCheckState(), CheckStateEnum.CHECKED.getValue())
|| Objects.equals(dev.getCheckState(), CheckStateEnum.DOCUMENTED.getValue()))

View File

@@ -3,6 +3,8 @@ package com.njcn.gather.plan.pojo.vo;
import org.junit.Assert;
import org.junit.Test;
import java.util.Collections;
public class PlanStatisticsVOTest {
@Test
@@ -13,4 +15,19 @@ public class PlanStatisticsVOTest {
Assert.assertEquals(Integer.valueOf(6), statistics.getQualifiedDeviceCount());
}
@Test
public void shouldExposeLinkedFilterOptions() {
PlanStatisticsVO statistics = new PlanStatisticsVO();
PlanStatisticsOptionVO manufacturer = new PlanStatisticsOptionVO("manufacturer-1", "厂家A");
PlanStatisticsOptionVO devType = new PlanStatisticsOptionVO("dev-type-1", "PQS-882A");
statistics.setManufacturerOptions(Collections.singletonList(manufacturer));
statistics.setDevTypeOptions(Collections.singletonList(devType));
Assert.assertEquals("manufacturer-1", statistics.getManufacturerOptions().get(0).getId());
Assert.assertEquals("厂家A", statistics.getManufacturerOptions().get(0).getName());
Assert.assertEquals("dev-type-1", statistics.getDevTypeOptions().get(0).getId());
Assert.assertEquals("PQS-882A", statistics.getDevTypeOptions().get(0).getName());
}
}

View File

@@ -60,7 +60,7 @@ socket:
# port: 61000
webSocket:
port: 7778
port: 7777
#源参数下发,暂态数据默认值
Dip: