From f14a13607f7841a046fc1220e4f99725db718f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=8D=E7=BC=96=E8=AF=91=E5=B7=A5=E4=BD=9C=E5=8C=BA?= Date: Sat, 25 Apr 2026 01:00:08 +0800 Subject: [PATCH] =?UTF-8?q?elevator(service):=20=E8=A7=84=E5=88=99?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E8=AF=A6=E6=83=85=E9=81=BF=E5=85=8D=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=20labelService.detail=EF=BC=8C=E6=94=B9=E7=94=A8=20ge?= =?UTF-8?q?tAll=20=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor Former-commit-id: d3de42bd28cd180e11b6c05900073022513067bb --- .../impl/ImageRuleRefServiceImpl.java | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) 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();