Files
starRiverProperty/docs/superpowers/data/2026-05-06-component-org-full-java-audit-and-remediation.md
T
hpd840321 7b2bd307f1 Initial commit: reorganized source tree
- 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.
2026-05-09 09:56:45 +08:00

163 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 组织组件:全量 Javasrc/main/java)与部署包逐类核对及解决方案
**日期:** 2026-05-06**2026-05-06 已执行 P0~P2 落地**,见下节)
**范围:** `maven-ninca-common-component-organization` 下全部 `**src/main/java`** 源文件,与部署目录
`部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730`
`**BOOT-INF/classes` + 四模块 `*-v2.9.2_xinghewan.jar**` 中的字节码 **逐类 `javap -p` 比对**
---
## 0. 执行记录(P0 → P1 → P2
| 阶段 | 内容 | 结果 |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **P0** | 使用 **JDK 8**`JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64`)执行 `mvn clean package -DskipTests`;抽查 Fat JAR 内嵌 `cwos-component-organization-service-*.jar` 中含 `TenantVisitorFloorPolicyService``OrganizationRedisLuaConfiguration``ElevatorFeignClientFallback` 等新增类。 | **通过**:产物 `cwos-component-organization-starter/target/ninca-common-component-organization-2.9.2-xinghewan.jar`(约 96MB)。**说明:** 必须用 JDK 8 编译,JDK 11+ 会因注解处理器模块封装报错。 |
| **P1** | 用 **CFR 0.152**`tools/cfr-0.152.jar`Maven Central 自动下载)反编译现场 `**BOOT-INF/classes/cn/cloudwalk/starter`** 打成的 mini-jar,源码迁入 `**starter/src/main/java**``**SelfRegistryHandler**` 从现场 **service** JAR 反编译迁入 `**service/.../SelfRegistryHandler.java`**,并手工修正泛型与 `**CloudwalkResult`/`AtomicDeviceGetResult**` 等与 `**CertRegistryHandler**` 对齐;修正 `**MbGenerator`/`ComponentTaskInitialize**` 反编译瑕疵。 | **通过**`deploy_only_outer_types` **由 23 降为 0**(源码侧已覆盖原「仅部署」顶层类型);全仓 `**src/main/java` 现为 605**+23)。 |
| **P2** | 重新运行 `**deploy_javap_audit.py`**(对齐后的契约快照)。 | **MISSING_DEPLOY 仍为 18****DIFFERENT 已降至 18**`OpenCvUtils`、三工具类构造等已与现场 **IDENTICAL**);**IDENTICAL 569**(以最新 `tools/out/deploy_javap_audit_main.json` 为准)。 |
**复跑命令(JDK 8):**
```bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
cd maven-ninca-common-component-organization
mvn -q clean package -DskipTests
python3 tools/deploy_javap_audit.py --workers 16 \
--write-json tools/out/deploy_javap_audit_main.json \
--write-markdown tools/out/deploy_javap_audit_main.md
```
**自动化脚本路径:** `maven-ninca-common-component-organization/tools/deploy_javap_audit.py`
**产物:** `tools/out/deploy_javap_audit_main.json`(全量每文件状态)、`tools/out/deploy_javap_audit_main.md`(节选表)。
**延续审核(Lua / lib / Data JAR XML / 配置):** [`2026-05-06-component-org-source-vs-deploy-continued-audit.md`](./2026-05-06-component-org-source-vs-deploy-continued-audit.md)
**现场替换清单:** [`2026-05-06-component-org-release-checklist.md`](./2026-05-06-component-org-release-checklist.md)
---
## 1. 汇总统计(P2 复跑后)
| 状态 | 数量 | 含义 |
| ------------------------ | ------- | ----------------------------------------------------------------------- |
| **IDENTICAL** | **569** | 部署包与当前 `mvn compile` 产物 `**javap -p` 完全一致**(顶层类型签名一致)。 |
| **DIFFERENT** | **18** | 同 FQN 下字段/方法列表等与现场 **不一致**(含业务变更或编译器 synthetic/lambda 差异)。 |
| **MISSING_DEPLOY_JAVAP** | **18** | 本地可解析,部署 classpath **无该类****仓库新增、现场 JAR 未包含**(需 **发布 P0 制品** 后线上才有)。 |
另:**「仅部署侧顶层类型」** 经 **P1 补源码** 后,脚本统计 `**deploy_only_outer_types = 0`**(见 `deploy_javap_audit_main.json`)。
---
## 2. 总体解决方案(决策树)
1. **以现场为权威(线上稳定优先)**
-**现场 Fat JAR** 或其中 **四模块 JAR** 纳入制品库;CI 对发布分支构建产物做 `**javap` 契约校验**(或与现场 JAR 二进制对齐)。
- 对下面 §4 **DIFFERENT** 类:若需与线上一致,应从 **与现场同源的标签/分支** 迁出代码,或 **接受当前仓库为超前版本** 仅做回归后再发版。
2. **以仓库为权威(迭代与星河湾定制优先)**
- **发布新版 Fat JAR**,替换现场 `ninca-common-component-organization-V2.9.2_20210730.jar`
- **MISSING_DEPLOY18** 全部为仓库侧新增能力(租户访客策略、Redis Lua 装配、大量 Feign Fallback)→ **必须随新版本部署**,否则线上不存在这些类。
- **补齐 Starter 源码与资源**(§5),使 **本仓库可完整复现** 现场同等启动行为。
3. **非 Java 资产(与本次 javap 并行结论)**
- **Lua**:源码 `service/.../lua` 与部署 `BOOT-INF/classes/lua` **已批量 diff 一致**
- **MyBatis XML**:现场 Data JAR 内含 `**mapper/mysql/*.xml`**,仓库 data 模块 **未见同名 XML 提交** → 发布前需 **补齐 XML 与仓库一致****确认由依赖 JAR 提供**
- **配置**:根目录 `application.properties` 覆盖 BOOT-INF;修正无效行 `**新增配置`**,核对 cron 与 **xhw*** 等业务常量。
---
## 3. MISSING_DEPLOY_JAVAP18):仓库有、现场包无 —— 处置
**结论:** 现场运行的是 **旧世代制品**;下列类型已在仓库 **新增或拆分**,需 **升版部署** 后才能与线上一致(或在线上删除引用——不推荐)。
| # | FQN | 源文件 |
| ---- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| 1 | `cn.cloudwalk.data.organization.entity.TenantVisitorFloorPolicy` | `data/.../TenantVisitorFloorPolicy.java` |
| 2 | `cn.cloudwalk.data.organization.mapper.TenantVisitorFloorPolicyMapper` | `data/.../TenantVisitorFloorPolicyMapper.java` |
| 3 | `cn.cloudwalk.service.organization.config.GroupPersonSynExecutorConfiguration` | `service/.../GroupPersonSynExecutorConfiguration.java` |
| 4 | `cn.cloudwalk.service.organization.config.GroupPersonSynPoolProperties` | `service/.../GroupPersonSynPoolProperties.java` |
| 5 | `cn.cloudwalk.service.organization.config.OrganizationRedisLuaConfiguration` | `service/.../OrganizationRedisLuaConfiguration.java` |
| 6 | `cn.cloudwalk.service.organization.policy.TenantVisitorFloorPolicyService` | `service/.../TenantVisitorFloorPolicyService.java` |
| 718 | 各类 `*FeignClientFallback` / `EnterpriseFeignClientFallback` / `PineappleEngineClientFallBack` 等 | `service/.../feign/*.java``corp/feign/*.java` |
**解决方案:**
1. **数据库:** 已若有租户访客策略表结构,保证 **现场 MySQL 与迁移脚本** 与文档一致。
2. **发布:** 使用本仓库 `**mvn package` 产出的 Fat JAR** 替换现场;配置中打开/对齐 **Redis Lua、线程池、Feign** 相关项。
3. **验证:** 租户访客相关 API + 图库同步 + Feign 降级路径 **集成测试**
---
## 4. DIFFERENT18):签名不一致 —— 分类与处置
### 4.1 Starter 入口(结构性)
| FQN | 说明 | 建议 |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `cn.cloudwalk.starter.organization.OrganizationServer` | 现场:**继承 `SpringBootServletInitializer`**,含 **Micrometer、RestTemplate、WAR `configure`** 等;仓库:**极简 `main` + `CloudwalkSessionContextHolder` Bean**。 | **二选一:** (A) 从历史制品/分支 **回收完整 `OrganizationServer` 与 Starter 配置类源码** 入仓库;(B) 明确 **仅支持可执行 Jar 模式**,现场改造启动脚本与监控接入以匹配仓库。 |
### 4.2 Service 公共工具与抽象类(多为编译/细节差异风险)
含:`AbstractImagStoreService``ImageEditUtils``ImageUtil``JsonUtils``OkhttpUtil``OpenCvUtils``ToolUtil``ChannelFileReader`
**逐类核对(DIFFERENT 剩余清单):** [`2026-05-06-component-org-different-22-per-class-review.md`](./2026-05-06-component-org-different-22-per-class-review.md)`OpenCvUtils` 已与现场对齐;其余多为 synthetic/**`ImgPersonServiceImpl`** 业务超前等)。
**建议:**
1. 对每一类执行 `**javap -p` diff 存档**(已由脚本隐含);若仅 **lambda/synthetic 行** 变化 → **加强集成测试**;若 **公开方法增减** → 走 **代码评审与回归**
2. 锁定 **JDK 8****Maven 编译器插件** 版本,减少无谓字节码漂移。
### 4.3 图库 / 设备同步核心业务类
含:`CertRegistryHandler``CpDeviceImagePersonServiceImpl``CpImageStorePersonManager``CpImageStorePersonSynManager``CpImageStorePersonValidateManager``CpImageStoreServiceImpl``CpImageStoreToolServiceImpl``DeviceGroupRefChangeEventHandler``DevicePersonSyncManager``DevicePersonSyncServiceImpl``ImgPersonServiceImpl``OrganizationServiceImpl`
**建议:**
1. `**ImgPersonServiceImpl`**:仓库已含 **租户访客楼层策略** 相关成员与方法 → **领先现场**;发版或回退策略见 §2。
2. `**CpImageStoreToolServiceImpl`** 等:重点复核 **批量删脸、同步日志** 等与现场故障(如 **COUNT 溢出、图片为空**)相关路径。
3.**电梯 / Portal Feign** 联调验证。
### 4.4 Web
| FQN | 建议 |
| --------------------------------------------------------------------- | ---------------------------------------------------------------- |
| `cn.cloudwalk.web.organization.controller.DevicePersonSyncController` | `**javap` 与现场不一致**:核对接口路径、参数 DTO、是否新增接口;做 **API 对拍**(现场 vs 新版本)。 |
---
## 5. 部署包多出、源码未收录问题(P1 已处理)
`**deploy_only_outer_fqns` 约 23 项**(含 `**SelfRegistryHandler`**、Starter 下 config/kafka/multipart/task/mybatis 等)已通过 **§0 P1**(CFR 反编译 + 手工修正)迁入仓库;**当前审计脚本 `deploy_only_outer_types = 0`**。
后续维护应以 **本仓库源码** 为准,避免再次只剩 `.class`;生成器 `**MbGenerator`** 内含示例 JDBC 连接串,仅本地生成代码时使用,**勿将密码提交到共享分支外的场景滥用**。
---
## 6. IDENTICAL569
约占 `**src/main/java`605)的 **94.0%**,明细见 `**deploy_javap_audit_main.json`** 中 `status == "IDENTICAL"` 条目。
---
## 7. 与先前抽样文档的关系
早期抽样结论仍有效:`**PersonController``CpOrgDeviceKitController**` 在本次 **全量核对中均为 IDENTICAL****全量结果** 显示 `**DevicePersonSyncController` 为 DIFFERENT**,需在发版前单独核对。
更早期的简报:`[2026-05-06-component-org-deploy-vs-source-batch-diff-and-javap.md](./2026-05-06-component-org-deploy-vs-source-batch-diff-and-javap.md)` —— 已由 **本文件 + JSON** 取代为 **权威全量清单**
---
## 8. 附录:测试源码(可选)
若需包含 `**src/test/java`**,运行:
`python3 tools/deploy_javap_audit.py --all-sources ...`
预期大量 `**MISSING_DEPLOY_JAVAP**`(测试类不会打进现场 Fat JAR),**一般仅用于开发自检**,不作为与现场等价对照。