mirror of
https://github.com/hpd840321/starRiverProperty.git
synced 2026-06-09 08:20:31 +08:00
7b2bd307f1
- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.) - frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts - scripts/: build, test-env, tools (Docker Compose, service templates, API parity) - docs/: AGENTS.md, superpowers specs, architecture docs - .gitignore: standard Java/Maven exclusions Moved from legacy maven-*/ root layout to backend/ organized structure.
139 lines
4.7 KiB
Markdown
139 lines
4.7 KiB
Markdown
# 租户访客默认楼层策略 — 日志完善方案
|
|
|
|
**日期**: 2026-05-06
|
|
**方案**: 统一 `[POLICY]` 日志前缀,确保部署后可通过单次 grep 判定策略是否生效
|
|
|
|
---
|
|
|
|
## 日志格式约定
|
|
|
|
| 前缀 | 含义 | 级别 |
|
|
|------|------|------|
|
|
| `[POLICY]` | 策略入口被调用 | INFO |
|
|
| `[POLICY-HIT]` | 策略命中,返回 allow_zone_ids | INFO |
|
|
| `[POLICY-MISS]` | 策略未命中(无策略/未启用/allow为空) | DEBUG |
|
|
| `[POLICY-DETAIL]` | detail() 方法中的策略结果 | INFO |
|
|
| `[POLICY-LIST]` | listByPage() 方法中的策略结果 | INFO |
|
|
|
|
## grep 速查
|
|
|
|
```bash
|
|
# 查看所有策略调用
|
|
grep "\[POLICY\]" component-organization.info.log
|
|
|
|
# 只看策略命中
|
|
grep "\[POLICY-HIT\]" component-organization.info.log
|
|
|
|
# 统计调用次数
|
|
grep -c "\[POLICY\]" component-organization.info.log
|
|
```
|
|
|
|
## 修改清单
|
|
|
|
### 1. TenantVisitorFloorPolicyService.java — 3 处修改
|
|
|
|
**L68-74 (replacementZoneIdsIfPolicyActive — 多 orgIds 入口)**:
|
|
```java
|
|
public Optional<List<String>> replacementZoneIdsIfPolicyActive(List<String> orgIds) {
|
|
if (CollectionUtils.isEmpty(orgIds)) {
|
|
return Optional.empty();
|
|
}
|
|
log.info("[POLICY] entry orgIds={}", orgIds); // ← 新增
|
|
for (String id : orgIds) {
|
|
Optional<List<String>> zones = replacementZoneIdsIfPolicyActive(id);
|
|
if (zones.isPresent()) {
|
|
return zones;
|
|
}
|
|
}
|
|
log.debug("[POLICY-MISS] no enabled policy for any org in {}", orgIds); // ← 新增
|
|
return Optional.empty();
|
|
}
|
|
```
|
|
|
|
**L83-98 (replacementZoneIdsIfPolicyActive — 单 orgId 查询)**:
|
|
```java
|
|
public Optional<List<String>> replacementZoneIdsIfPolicyActive(String orgId) {
|
|
try {
|
|
Optional<TenantVisitorFloorPolicy> policy = findEnabledPolicyByOrgId(orgId);
|
|
if (!policy.isPresent()) {
|
|
log.debug("[POLICY-MISS] orgId={} no policy row", orgId); // ← 新增
|
|
return Optional.empty();
|
|
}
|
|
List<String> allow = parseAllowZoneIds(policy.get().getAllowZoneIds());
|
|
if (allow.isEmpty()) {
|
|
log.info("[POLICY-MISS] orgId={} allow_zone_ids empty", orgId); // ← 新增
|
|
return Optional.empty();
|
|
}
|
|
log.info("[POLICY-HIT] orgId={} policyId={} zones={} count={}", // ← 新增
|
|
orgId, policy.get().getId(), allow, allow.size());
|
|
return Optional.of(new ArrayList<>(allow));
|
|
} catch (Exception e) {
|
|
log.warn("[POLICY-ERR] orgId={} query failed, fallback: {}", // ← 修改
|
|
orgId, e.toString());
|
|
return Optional.empty();
|
|
}
|
|
}
|
|
```
|
|
|
|
**L39-57 (parseAllowZoneIds)**:
|
|
```java
|
|
public List<String> parseAllowZoneIds(String allowZoneIdsJson) {
|
|
if (StringUtils.isBlank(allowZoneIdsJson)) {
|
|
return Collections.emptyList();
|
|
}
|
|
try {
|
|
// ... 原有逻辑不变 ...
|
|
} catch (Exception e) {
|
|
log.warn("[POLICY-ERR] allow_zone_ids JSON invalid: {}", e.getMessage()); // ← 修改前缀
|
|
return Collections.emptyList();
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. ImgPersonServiceImpl.java — 2 处修改
|
|
|
|
**L322-334 (listByPage — isVisitor 场景)**:
|
|
```java
|
|
if (policyZones.isPresent()) {
|
|
log.info("[POLICY-LIST] hit personId={} orgIds={} zones={}", // ← 新增
|
|
imgStorePersonResult.getId(),
|
|
imgStorePersonResult.getOrganizationIds(),
|
|
policyZones.get());
|
|
List<AcsPassRuleImageResultDto> policyFloorInfo =
|
|
buildFloorInfoListFromOrderedZoneIds(businessId, policyZones.get());
|
|
// ... 原有逻辑不变 ...
|
|
```
|
|
|
|
**L643-651 (detail — 详情场景)**:
|
|
```java
|
|
Optional<List<String>> replacementFloors =
|
|
this.tenantVisitorFloorPolicyService.replacementZoneIdsIfPolicyActive(
|
|
result.getOrganizationIds());
|
|
if (replacementFloors.isPresent()) {
|
|
log.info("[POLICY-DETAIL] hit personId={} orgIds={} zones={}", // ← 新增
|
|
result.getId(),
|
|
result.getOrganizationIds(),
|
|
replacementFloors.get());
|
|
floorList = new ArrayList<>(replacementFloors.get());
|
|
// ... 原有逻辑不变 ...
|
|
```
|
|
|
|
## 预期日志输出示例
|
|
|
|
```
|
|
# 策略命中(detail 场景)
|
|
[POLICY] entry orgIds=[605560545117995008, 605560541473144832]
|
|
[POLICY-HIT] orgId=605560545117995008 policyId=gf_vstr_xxx zones=[zone_28f, zone_6f] count=2
|
|
[POLICY-DETAIL] hit personId=1072908835884208128 orgIds=[605560545117995008, 605560541473144832] zones=[zone_28f, zone_6f]
|
|
|
|
# 策略未命中
|
|
[POLICY] entry orgIds=[some_org_id]
|
|
[POLICY-MISS] orgId=some_org_id no policy row
|
|
[POLICY-MISS] no enabled policy for any org in [some_org_id]
|
|
|
|
# 策略命中(listByPage 场景)
|
|
[POLICY] entry orgIds=[605560545117995008]
|
|
[POLICY-HIT] orgId=605560545117995008 policyId=gf_vstr_xxx zones=[zone_28f, zone_6f] count=2
|
|
[POLICY-LIST] hit personId=xxx orgIds=[605560545117995008] zones=[zone_28f, zone_6f]
|
|
```
|