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

14 KiB
Raw Blame History

组织组件:全量 Javasrc/main/java)与部署包逐类核对及解决方案

日期: 2026-05-062026-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 8JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64)执行 mvn clean package -DskipTests;抽查 Fat JAR 内嵌 cwos-component-organization-service-*.jar 中含 TenantVisitorFloorPolicyServiceOrganizationRedisLuaConfigurationElevatorFeignClientFallback 等新增类。 通过:产物 cwos-component-organization-starter/target/ninca-common-component-organization-2.9.2-xinghewan.jar(约 96MB)。说明: 必须用 JDK 8 编译,JDK 11+ 会因注解处理器模块封装报错。
P1 CFR 0.152tools/cfr-0.152.jarMaven 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 仍为 18DIFFERENT 已降至 18OpenCvUtils、三工具类构造等已与现场 IDENTICAL);IDENTICAL 569(以最新 tools/out/deploy_javap_audit_main.json 为准)。

复跑命令(JDK 8):

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-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 类:若需与线上一致,应从 与现场同源的标签/分支 迁出代码,或 接受当前仓库为超前版本 仅做回归后再发版。
  1. 以仓库为权威(迭代与星河湾定制优先)
  • 发布新版 Fat JAR,替换现场 ninca-common-component-organization-V2.9.2_20210730.jar
  • MISSING_DEPLOY18 全部为仓库侧新增能力(租户访客策略、Redis Lua 装配、大量 Feign Fallback)→ 必须随新版本部署,否则线上不存在这些类。
  • 补齐 Starter 源码与资源(§5),使 本仓库可完整复现 现场同等启动行为。
  1. 非 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/*.javacorp/feign/*.java

解决方案:

  1. 数据库: 已若有租户访客策略表结构,保证 现场 MySQL 与迁移脚本 与文档一致。
  2. 发布: 使用本仓库 **mvn package 产出的 Fat JAR** 替换现场;配置中打开/对齐 Redis Lua、线程池、Feign 相关项。
  3. 验证: 租户访客相关 API + 图库同步 + Feign 降级路径 集成测试

4. DIFFERENT(18):签名不一致 —— 分类与处置

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 公共工具与抽象类(多为编译/细节差异风险)

含:AbstractImagStoreServiceImageEditUtilsImageUtilJsonUtilsOkhttpUtilOpenCvUtilsToolUtilChannelFileReader

逐类核对(DIFFERENT 剩余清单): 2026-05-06-component-org-different-22-per-class-review.mdOpenCvUtils 已与现场对齐;其余多为 synthetic/ImgPersonServiceImpl 业务超前等)。

建议:

  1. 对每一类执行 **javap -p diff 存档**(已由脚本隐含);若仅 lambda/synthetic 行 变化 → 加强集成测试;若 公开方法增减 → 走 代码评审与回归
  2. 锁定 JDK 8Maven 编译器插件 版本,减少无谓字节码漂移。

4.3 图库 / 设备同步核心业务类

含:CertRegistryHandlerCpDeviceImagePersonServiceImplCpImageStorePersonManagerCpImageStorePersonSynManagerCpImageStorePersonValidateManagerCpImageStoreServiceImplCpImageStoreToolServiceImplDeviceGroupRefChangeEventHandlerDevicePersonSyncManagerDevicePersonSyncServiceImplImgPersonServiceImplOrganizationServiceImpl

建议:

  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/java605)的 94.0%,明细见 **deploy_javap_audit_main.json** 中 status == "IDENTICAL" 条目。


7. 与先前抽样文档的关系

早期抽样结论仍有效:**PersonControllerCpOrgDeviceKitController** 在本次 全量核对中均为 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),一般仅用于开发自检,不作为与现场等价对照。