diff --git a/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/passrule/impl/ImageRuleRefServiceImpl.java b/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/passrule/impl/ImageRuleRefServiceImpl.java index 6049e251..f7933493 100644 --- a/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/passrule/impl/ImageRuleRefServiceImpl.java +++ b/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/passrule/impl/ImageRuleRefServiceImpl.java @@ -11,6 +11,7 @@ import cn.cloudwalk.client.cwoscomponent.intelligent.imagestore.result.ImgStoreP import cn.cloudwalk.client.cwoscomponent.intelligent.imagestore.service.ImageStorePersonService; import cn.cloudwalk.client.cwoscomponent.intelligent.imagestore.service.ImageStoreService; import cn.cloudwalk.client.cwoscomponent.intelligent.label.param.LabelDetailParam; +import cn.cloudwalk.client.cwoscomponent.intelligent.label.param.LabelQueryParam; import cn.cloudwalk.client.cwoscomponent.intelligent.label.result.LabelDetailResult; import cn.cloudwalk.client.cwoscomponent.intelligent.label.result.LabelResult; import cn.cloudwalk.client.cwoscomponent.intelligent.label.service.LabelService; @@ -321,13 +322,9 @@ public class ImageRuleRefServiceImpl extends AbstractAcsPassService implements I (ImageRuleRefDetailResult)BeanCopyUtils.copyProperties(byId, ImageRuleRefDetailResult.class); result.setRuleName(byId.getName()); if (!CollectionUtils.isEmpty(includeLabels)) { + Map labelById = loadLabelDetailMap(context); List labelDetailResultList = new ArrayList<>(); - for (String label : includeLabels) { - LabelDetailParam labelDetailParam = new LabelDetailParam(); - labelDetailParam.setId(label); - CloudwalkResult detail = this.labelService.detail(labelDetailParam, context); - labelDetailResultList.add(detail.getData()); - } + fillLabelDetailsFromMap(includeLabels, labelById, labelDetailResultList, context); result.setIncludeLabels(labelDetailResultList); } if (!CollectionUtils.isEmpty(includeOrganizations)) { @@ -613,6 +610,7 @@ public class ImageRuleRefServiceImpl extends AbstractAcsPassService implements I if (CollectionUtils.isEmpty(datas)) { return detailResultList; } + Map labelById = loadLabelDetailMap(context); List personSum = this.imageRuleRefDao.countPersonIdByZoneId(((ImageRuleRefResultDto)datas.get(0)).getZoneId()); for (ImageRuleRefResultDto data : datas) { @@ -662,12 +660,7 @@ public class ImageRuleRefServiceImpl extends AbstractAcsPassService implements I } if (!CollectionUtils.isEmpty(includeLabels)) { List labelDetailResultList = new ArrayList<>(); - for (String label : includeLabels) { - LabelDetailParam param = new LabelDetailParam(); - param.setId(label); - CloudwalkResult detail = this.labelService.detail(param, context); - labelDetailResultList.add(detail.getData()); - } + fillLabelDetailsFromMap(includeLabels, labelById, labelDetailResultList, context); detailResult.setIncludeLabels(labelDetailResultList); } if (!CollectionUtils.isEmpty(includeOrganizations)) { @@ -684,6 +677,44 @@ public class ImageRuleRefServiceImpl extends AbstractAcsPassService implements I return detailResultList; } + /** + * 一次 {@link LabelService#getAll} 建 id→详情索引,避免规则详情/分页组装时对 {@link LabelService#detail} 的 N 次远程调用。 + * 若某 id 不在全量列表中(数据不同步),回退单次 detail。 + */ + private Map loadLabelDetailMap(CloudwalkCallContext context) throws ServiceException { + CloudwalkResult> all = this.labelService.getAll(new LabelQueryParam(), context); + if (all == null || !all.isSuccess() || all.getData() == null) { + return Collections.emptyMap(); + } + Map map = new HashMap<>(Math.max(16, all.getData().size() * 2)); + for (LabelDetailResult row : all.getData()) { + if (row != null && row.getId() != null) { + map.put(row.getId(), row); + } + } + return map; + } + + private void fillLabelDetailsFromMap(List labelIds, Map labelById, + List out, CloudwalkCallContext context) throws ServiceException { + if (CollectionUtils.isEmpty(labelIds)) { + return; + } + for (String labelId : labelIds) { + LabelDetailResult cached = (labelById != null) ? labelById.get(labelId) : null; + if (cached != null) { + out.add(cached); + continue; + } + LabelDetailParam p = new LabelDetailParam(); + p.setId(labelId); + CloudwalkResult detail = this.labelService.detail(p, context); + if (detail != null && detail.isSuccess() && detail.getData() != null) { + out.add(detail.getData()); + } + } + } + private CloudwalkPageAble getImageStorePerson(AcsPersonQueryParam param, CloudwalkPageInfo pageInfo, CloudwalkCallContext context) throws ServiceException { CloudwalkPageAble results = new CloudwalkPageAble();