diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsOptionVO.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsOptionVO.java new file mode 100644 index 00000000..2547d933 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsOptionVO.java @@ -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; +} diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVO.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVO.java index 0ca1d56a..8fdb4d52 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVO.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVO.java @@ -90,4 +90,14 @@ public class PlanStatisticsVO { * 检测项分布。 */ private List itemDistributions; + + /** + * 设备厂家筛选项。 + */ + private List manufacturerOptions; + + /** + * 设备类型筛选项。 + */ + private List devTypeOptions; } diff --git a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java index 8ea2d4da..143afde3 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java @@ -827,13 +827,16 @@ public class AdPlanServiceImpl extends ServiceImpl impleme throw new BusinessException(DetectionResponseEnum.PLAN_NOT_EXIST); } - List planDevices = listPlanDevices(plan.getId(), param.getManufacturer(), param.getDevType()); + List allPlanDevices = listPlanDevices(plan.getId(), null, null); + List planDevices = filterPlanDevices(allPlanDevices, param.getManufacturer(), param.getDevType()); List 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 impleme if (CollUtil.isEmpty(pqDevVOList)) { return Collections.emptyList(); } - return pqDevVOList.stream() + return filterPlanDevices(pqDevVOList, manufacturer, devType); + } + + private List filterPlanDevices(List 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 buildManufacturerOptions(List devices, String devType) { + if (CollUtil.isEmpty(devices)) { + return Collections.emptyList(); + } + List ids = devices.stream() + .filter(dev -> StrUtil.isBlank(devType) || Objects.equals(dev.getDevType(), devType)) + .map(PqDevVO::getManufacturer) + .filter(StrUtil::isNotBlank) + .distinct() + .collect(Collectors.toList()); + Map 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 buildDevTypeOptions(List devices, String manufacturer) { + if (CollUtil.isEmpty(devices)) { + return Collections.emptyList(); + } + List ids = devices.stream() + .filter(dev -> StrUtil.isBlank(manufacturer) || Objects.equals(dev.getManufacturer(), manufacturer)) + .map(PqDevVO::getDevType) + .filter(StrUtil::isNotBlank) + .distinct() + .collect(Collectors.toList()); + Map 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())) diff --git a/detection/src/test/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVOTest.java b/detection/src/test/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVOTest.java index d2f04e60..1261285a 100644 --- a/detection/src/test/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVOTest.java +++ b/detection/src/test/java/com/njcn/gather/plan/pojo/vo/PlanStatisticsVOTest.java @@ -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()); + } } diff --git a/entrance/src/main/resources/application.yml b/entrance/src/main/resources/application.yml index 8e1d4f95..ab4e4aca 100644 --- a/entrance/src/main/resources/application.yml +++ b/entrance/src/main/resources/application.yml @@ -60,7 +60,7 @@ socket: # port: 61000 webSocket: - port: 7778 + port: 7777 #源参数下发,暂态数据默认值 Dip: