diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java index acbbf21dc..66eb16c0a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/TreeProjectVideoListVo.java @@ -37,6 +37,16 @@ public class TreeProjectVideoListVo { private VideoItem videoItem; private ProjectVideoConfig projectVideoConfig; private List children; + /** + *监控总数 + */ + @ApiModelProperty("监控总数") + private Integer totalNum; + /** + *监控在线总数 + */ + @ApiModelProperty("监控在线总数") + private Integer onlineNum; /** * 监控类型枚举 */ diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java index b311f0730..0905a89d2 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java @@ -108,7 +108,6 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -531,9 +530,46 @@ public class ProjectServiceImpl extends ServiceImpl impl String name = MapUtils.getString(map, "name"); List rtVoList = BeanUtil.copyToList(TreeUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(voList)), "id", "parentId", "children", "name", name), TreeProjectVideoListVo.class); rtVoList = rtVoList.stream().filter(v -> Objects.equals(v.getType(), TreeProjectVideoListVo.MonitorType.PROJECT.getCode())).collect(Collectors.toList()); + for (TreeProjectVideoListVo vo : rtVoList) { + getAndSetTotalAndOnlineNum(vo); + } return rtVoList; } + /** + * 递归统计总数和在线视频监控数量 + * + * @param vo + * @return 包含totalNum和onlineNum的Map + */ + public static Map getAndSetTotalAndOnlineNum(TreeProjectVideoListVo vo) { + Map result = new HashMap<>(); + int totalNum = 0; + int onlineNum = 0; + if (Objects.equals(vo.getType(), TreeProjectVideoListVo.MonitorType.VIDEO.getCode())) { + totalNum = 1; + if (Objects.equals(vo.getVideoItem().getDeviceState(), 1)) { + onlineNum = 1; + } + } + // 递归处理子节点 + List children = vo.getChildren(); + if (CollUtil.isNotEmpty(children)) { + for (int i = 0; i < children.size(); i++) { + TreeProjectVideoListVo child = children.get(i); + Map childStats = getAndSetTotalAndOnlineNum(child); + // 累加子节点的统计结果 + totalNum += childStats.getOrDefault("totalNum", 0); + onlineNum += childStats.getOrDefault("onlineNum", 0); + } + } + result.put("totalNum", totalNum); + result.put("onlineNum", onlineNum); + vo.setTotalNum(totalNum); + vo.setOnlineNum(onlineNum); + return result; + } + @Override public void saveZwProject(ZwProjectDataVo zwProjectDataVo) { Project project = new Project();