fix: relocate cwos-portal decompiled output to correct path; remove nested directory

Former-commit-id: dc30d42a8c55ed8b2382a41dc2434233fbed9930
This commit is contained in:
反编译工作区
2026-04-29 12:09:48 +08:00
parent ea8e492076
commit e8672a3c7b
1759 changed files with 547735 additions and 280 deletions
+43
View File
@@ -0,0 +1,43 @@
# docs/ — 文档中心
## OVERVIEW
starRiverProperty 全仓文档集中地:架构说明、业务走查、构建环境、代码风格、运维脚本。原 `dev-support/` 内容已迁入此处。
## STRUCTURE
```
docs/
├── README.md # 文档索引与当前排期
├── AGENTS.md # ← 本文件
├── architecture/ # 工程结构
│ ├── Maven聚合工程说明.md # 5 个聚合工程定位
│ ├── 对外接口不变-远程调用与性能优化约定.md # HTTP/Feign 契约约束
│ └── 对外接口不变-走查任务与状态.md # 代码走查清单
├── business/ # 业务说明
│ ├── 访客注册与派梯楼层业务流程走查.md # 访客派梯 Feign 调用链
│ └── 租户访客默认楼层技术产品方案.md # 多租户默认楼层方案
├── build/ # 构建环境
│ └── ORIGINAL_BUILD_JDK.txt # JDK 8 依据
├── style/ # 代码风格
│ └── alibaba-eclipse-codestyle.xml # P3C Eclipse Formatter
└── operations/ # 运维脚本
└── deploy_cw_elevator_v1_lib_to_nexus.py # V1 lib → Nexus
```
## WHERE TO LOOK
| Task | Location | Notes |
|------|----------|-------|
| 当前迭代排期 | `README.md` | 前端跳过、后端优先的迭代范围 |
| 聚合工程关系 | `architecture/Maven聚合工程说明.md` | 模块依赖与工程定位 |
| 接口契约约束 | `architecture/对外接口不变-远程调用与性能优化约定.md` | 不可扩展的 HTTP/Feign 边界 |
| 走查任务清单 | `architecture/对外接口不变-走查任务与状态.md` | 可修正与须确认项 |
| 代码风格配置 | `style/alibaba-eclipse-codestyle.xml` | P3C 格式化 XML |
| JDK 版本依据 | `build/ORIGINAL_BUILD_JDK.txt` | JDK 8 强制依据 |
| Nexus 上传 | `operations/deploy_cw_elevator_v1_lib_to_nexus.py` | V1 lib 批量部署 |
## CONVENTIONS
- 文档用中文撰写(README.md 及所有架构/业务文档)
- `docs/` 是文档唯一定位点,`dev-support/` 已废弃
- 格式化 XML 路径:所有 `maven-*/pom.xml``alibaba.eclipse.codestyle.path` 均指向 `docs/style/`
- 运行 JAR 还原产物不在 `docs/`,而在 `artifacts/decompiled/`
@@ -0,0 +1,51 @@
# V1 / V2 电梯应用 API 调用链源码比对白名单
本文约定:**每次发布或横向对拍异常排查**时,优先仅对下列文件做 V1 与 V2 的语义级 diff,避免整仓反编译树与 Maven 源码的「格式噪声」干扰判断。
## 用途
- 核对「HTTP 入口 → Service → Feign/DAO」是否与历史 V1 行为一致。
-`maven-cw-elevator-application/tools/elevator_api_parity/` 对拍清单互补:白名单覆盖曾出现 **code_only 不一致** 的典型链路。
## 比对基线(仓库内路径)
| 侧 | 根路径 |
|----|--------|
| **V2Maven 源码)** | `maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/`web<br>`maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/`service |
| **V1(反编译树,与 1.0-SNAPSHOT 模块 JAR 对齐)** | `artifacts/decompiled/trees/cw-elevator-application-web-1.0-SNAPSHOT.jar.src/cn/cloudwalk/elevator/`web<br>`artifacts/decompiled/trees/cw-elevator-application-service-1.0-SNAPSHOT.jar.src/cn/cloudwalk/elevator/`service |
若线网 V1 为 **另一 fat-jar**,应先确认其反编译树或 CFR 输出与上表 V1 根是否同源,再执行比对。
## 白名单(相对上述「根」的类路径)
| 优先级 | 相对路径 | 说明 |
|--------|----------|------|
| P0 | `person/controller/AcsPersonController.java` | `person/add``person/edit``person/pageByApp``timeDetail` 等 |
| P0 | `record/controller/AcsElevatorRecordController.java` | `record/page``analyse/cycle|count``page/request` |
| P0 | `passrule/controller/AcsPassRuleController.java` | `passRule/add` 等规则入口 |
| P0 | `person/impl/PersonRuleServiceImpl.java` | `person/add` 业务链、`76260527` 空设备等 |
| P0 | `person/impl/AcsPersonServiceImpl.java` | `edit``pageByApp``timeDetail`、图库/设备 Feign 组装 |
| P0 | `record/impl/AcsElevatorRecordServiceImpl.java` | `openRecord``analyseCycle``analyseCount``pageInfo` |
| P1 | `passrule/impl/AcsPassRuleServiceImpl.java` | 规则新增/编辑主流程 |
| P1 | `passrule/impl/ImageRuleRefServiceImpl.java` | `addOnlyRule` 等与 `76260527` 相关分支 |
| P1 | `common/AbstractCloudwalkController.java` | `getCloudwalkContext()` 等与请求头/会话相关 |
按需扩展时,应先在 `api_catalog.json` 或走查清单中标注接口 id,再增补对应 Controller/Service**避免无界扫 diff**。
## 建议命令(忽略空白,便于看语义)
在仓库根目录执行,示例(web 单文件):
```bash
diff -uw \
artifacts/decompiled/trees/cw-elevator-application-web-1.0-SNAPSHOT.jar.src/cn/cloudwalk/elevator/person/controller/AcsPersonController.java \
maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/person/controller/AcsPersonController.java
```
`service` 模块将两条根路径中的 `...-web-...` / `cw-elevator-application-web` 换成 `...-service-...` / `cw-elevator-application-service` 即可。
## 相关文档
- V1/V2 依赖比对(`lib`/`cw_lib` 与反应堆坐标):`V1-V2-电梯依赖比对.md`
- 对拍约定与清单说明:`../../maven-cw-elevator-application/tools/elevator_api_parity/API-RECONCILIATION.md`
- 走查任务总览:`对外接口不变-走查任务与状态.md`
@@ -0,0 +1,169 @@
# V1 与 V2 电梯应用依赖:详细比对说明
本文说明 **V1 历史运行包****V2 Maven 反应堆** 在依赖上的对应关系、已核对的一致项、已知差异与后续可执行动作。比对以仓库内 `**cw-elevator-application-V1.0.0.20211103`** 为 V1 基线。
---
## 1. V1 运行包 classpath 结构(与 V2 可执行 JAR 的对应)
| 位置 | 路径 | 数量 | 含义 |
| -------------------- | ------------------------------------------------------ | ------- | --------------------------------------------------------------------------------- |
| **第三方与 Spring 栈** | `cw-elevator-application-V1.0.0.20211103/lib/*.jar` | **245** | 与 Boot 1.5、Spring Cloud、MyBatis、Netty、Feign 等一致;文件名即 **artifactId-version** 形态为主。 |
| **云从 + 电梯模块 + 智能组件** | `cw-elevator-application-V1.0.0.20211103/cw_lib/*.jar` | **24** | 与 V2 `pom.xml`**显式声明版本** 的坐标对齐;电梯四模块以 **1.0-SNAPSHOT** JAR 形式落盘。 |
V2 可执行包由 `spring-boot-maven-plugin` repackage 后,上述两类依赖会进入 `**BOOT-INF/lib/`**;概念上 **V2 ≈ cw_lib lib 的传递闭包**,但 **具体 JAR 列表以 Maven 解析结果为准**
**完整文件名清单(机器可读)**
- `docs/architecture/data/v1-elevator-lib-jars.txt`245 行)
- `docs/architecture/data/v1-elevator-cw-lib-jars.txt`24 行)
---
## 2. `cw_lib`24)与 V2 反应堆版本:逐项一致
下列 JAR 在 V1 `cw_lib` 中的 **文件名** 与 V2 `maven-cw-elevator-application/pom.xml``<properties>` / `dependencyManagement` **一致**(脚本已自动核对):
| # | V1 `cw_lib` 文件名 | V2 约束来源 |
| --- | --------------------------------------------------------- | ----------------------------------------------------------------------------- |
| 1 | `cloudwalk-common-event-3.7.2-Brussels-SRX.jar` | `cloudwalk.internal.version` |
| 2 | `cloudwalk-common-result-3.7.2-Brussels-SRX.jar` | `cloudwalk.legacy.public.version` |
| 3 | `cloudwalk-common-serial-3.7.2-Brussels-SRX.jar` | `cloudwalk.legacy.public.version` |
| 4 | `cloudwalk-common-service-3.7.2-Brussels-SRX.jar` | `cloudwalk.internal.version` |
| 5 | `cloudwalk-common-web-3.7.2-Brussels-SRX.jar` | `cloudwalk.legacy.public.version` |
| 6 | `cloudwalk-device-manager-common-2.0.2.jar` | V1 随包固定;V2 由 `**intelligent-cwoscomponent-rest`** 等传递引入(反应堆未单独 pin 版本,以解析树为准) |
| 7 | `cloudwalk-device-manager-interface-2.0.2.jar` | 同上 |
| 8 | `cloudwalk-device-sdk-protocol-entity-2.2.0.jar` | 同上 |
| 9 | `cloudwalk-intelligent-component-lock-1.1.1-SNAPSHOT.jar` | `intelligent.lock.version` |
| 10 | `cw-elevator-application-common-1.0-SNAPSHOT.jar` | V2`cn.cloudwalk.elevator:cw-elevator-application-common:**2.0-SNAPSHOT`** |
| 11 | `cw-elevator-application-data-1.0-SNAPSHOT.jar` | V2`…-data:**2.0-SNAPSHOT`** |
| 12 | `cw-elevator-application-service-1.0-SNAPSHOT.jar` | V2`…-service:**2.0-SNAPSHOT**` |
| 13 | `cw-elevator-application-web-1.0-SNAPSHOT.jar` | V2`…-web:**2.0-SNAPSHOT**` |
| 14 | `cwos-common-aks-interface-1.0.0-SNAPSHOT.jar` | V1 随包;V2 若未在反应堆显式声明则来自传递依赖 |
| 15 | `cwos-component-resource-data-1.0.0-SNAPSHOT.jar` | 同上 |
| 16 | `cwos-component-resource-interface-1.0.0-SNAPSHOT.jar` | 同上 |
| 17 | `cwos-device-authentication-interface-1.0.0-SNAPSHOT.jar` | 同上 |
| 18 | `cwos-java-sdk-resource-1.0.0-SNAPSHOT.jar` | `cwos.sdk.resource.version` |
| 19 | `cwos-portal-interface-1.0.0-SNAPSHOT.jar` | V1 随包;V2 传递 |
| 20 | `cwos-sdk-event-1.5.0-SNAPSHOT.jar` | `cwos.sdk.event.version` |
| 21 | `davinci-manager-common-1.1.7-SNAPSHOT.jar` | 与 `davinci-manager-storage` 同族 |
| 22 | `davinci-manager-storage-1.1.7-SNAPSHOT.jar` | `davinci.manager.storage.version` |
| 23 | `intelligent-cwoscomponent-interface-2.9.2-xinghewan.jar` | `intelligent.cwoscomponent.version` |
| 24 | `intelligent-cwoscomponent-rest-2.9.2-xinghewan.jar` | `intelligent.cwoscomponent.version` |
**结论(云从/智能主干)**:与对拍、校验切面相关的 `**cloudwalk-common-*` 3.7.2-Brussels-SRX** 与 `**intelligent-cwoscomponent-*` 2.9.2-xinghewan** 等,**V1 cw_lib 与 V2 POM 显式口径一致**;对拍行为差异 **不宜** 首先归因于「cloudwalk 主版本不一致」。
**电梯自研模块**V1 为 **1.0-SNAPSHOT** 四 JARV2 反应堆为 **2.0-SNAPSHOT** —— 属 **预期版本升级**,需用源码白名单比对(见 `V1-V2-电梯API源码比对白名单.md`),而非依赖坐标「偷偷不一致」。
---
## 3. V1 `lib`245)与 V2 `dependencyManagement`:显式对齐项
V2 反应堆在 `<properties>`**主动钉死**、且与 V1 `lib`**常见文件名** 对齐的第三方包括(节选):
| 属性 | 值 | V1 `lib` 中典型 JAR |
| ------------------------------------------------------- | --------------- | --------------------------------------------- |
| `fastjson.version` | 1.2.73 | `fastjson-1.2.73.jar` |
| `guava.version` | 20.0 | `guava-20.0.jar` |
| `poi.version` | 3.15 | `poi-3.15.jar``poi-ooxml-3.15.jar` |
| `ant.version` | 1.9.6 | 见下节「多版本」 |
| `mybatis-spring-boot.version` | 1.3.1 | `mybatis-spring-boot-starter-1.3.1.jar` |
| `pagehelper.version` / `pagehelper-spring-boot.version` | 5.1.2 / 1.2.5 | `pagehelper-5.1.2.jar` 等 |
| `shardingsphere.version` | 4.0.0 | `sharding-jdbc-spring-boot-starter-4.0.0.jar` |
| `spring-cloud.version` | **Edgware.SR6** | 见下节 |
**Spring Boot**V2 父 POM 为 `**spring-boot-starter-parent` 1.5.17.RELEASE**V1 `lib` 中可见 `**spring-boot-*-1.5.17.RELEASE.jar`**,主版本一致。
---
## 4. V1 `lib` 中的「多版本并存」风险(V2 由 BOM 收敛)
`lib` 内文件名做 **artifact 前缀聚合** 后,典型 **多版本** 包括:
| 前缀 | 并存版本(示例) | 说明 |
| ------------ | --------------- | ------------------------------------------------------------------- |
| `feign-core` | 8.18.0 与 9.5.0 | 历史传递与 Netflix/OpenFeign 栈叠加;**实际生效顺序依赖 fat JAR Class-Path / 装载顺序**。 |
| `ant` | 1.6.5 与 1.9.6 等 | V2 反应堆仅钉 `**ant.version` = 1.9.6**V1 物理目录仍含旧 ant。 |
| `rxjava` | 1.x 与 2.x | 常见于 Netflix + 其它客户端并存。 |
V2 由 `**spring-boot-dependencies` + `spring-cloud-dependencies`Edgware.SR6** 统一解析,**理论上** 比「手工铺 245 个 jar」更可重复;若需 **字节级** 证明与 V1 运行时一致,应在 **同一 JDK** 下导出 `**mvn dependency:tree`** 与 V1 进程 `**jcmd <pid> VM.classloader_hierarchy`** / 或解压 fat JAR 的 `BOOT-INF/lib` 做集合 diff。
---
## 5. V2 反应堆「直接依赖」模块一览(非传递闭包)
| 模块 | 直接引入的典型坐标(无版本处由 `dependencyManagement` 解析) |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cw-elevator-application-starter` | `spring-boot-starter-web`、MyBatis、Actuator、Cache、AOP、OpenFeign、`cw-elevator-application-web` |
| `cw-elevator-application-web` | `cloudwalk-common-web``cw-elevator-application-service` |
| `cw-elevator-application-service` | `cloudwalk-common-service``spring-tx``cloudwalk-common-serial``cwos-java-sdk-resource``jackson-datatype-jsr310``cloudwalk-intelligent-component-lock``cloudwalk-common-event``cwos-sdk-event``cw-elevator-application-data``davinci-manager-storage``intelligent-cwoscomponent-rest``spring-cloud-starter-openfeign``javax.annotation-api``jsr305` |
| `cw-elevator-application-common` | `cloudwalk-common-result`、Guava、POI、Ant、thumbnailator、`commons-io`、fastjson、`tomcat-embed-core``cloudwalk-common-web``spring-boot-autoconfigure``commons-lang3`、ZXing、zip4j、`spring-web``spring-data-redis`、lombok、`jackson-datatype-jsr310` |
| `cw-elevator-application-data` | `cw-elevator-application-common``cloudwalk-common-result``spring-beans`/`context`、MyBatis、mysql、`mybatis-spring-boot-starter`、HikariCP、pagehelper、shardingsphere |
**与 V1 的差异点**V2 `**cw-elevator-application-common`** 显式增加 `**spring-boot-autoconfigure`**(见模块内注释:私服上 `cloudwalk-common-web` 传递不完整时的 **编译 classpath 补齐**)。V1 若完全依赖传递,**编译期/工具链** 与 V2 可能略有不同,但 **运行时** 通常仍由 Boot 引入同一类库。
---
## 5.1 反应堆子模块报「在 nexus-public 找不到 sibling SNAPSHOT」
**现象**`data``cw-elevator-application-common``web``service` 等,日志只出现 `Downloading from nexus-public: .../elevator/...`
**原因**:全局 `~/.m2/settings.xml``**mirrorOf=*`**(或等价过宽)时,Maven 易把 **本反应堆未发布到私服的 SNAPSHOT** 也导向 Nexus,导致失败。**不需要**为此逐个 `deploy` 电梯子模块到私服。
**本仓库已落盘**`maven-cw-elevator-application/.mvn/maven.config` + `.mvn/settings.xml`:用 `-s` **绕过** `~/.m2`profile 激活 `**nexus-public`http**;并含 一条 `id=maven-default-http-blocker``mirrorOf=dummy` 的占位 `<mirror>`,用于覆盖 Maven 3.8.1+ 安装目录里对 `**external:http:*`** 的默认拦截(否则会出现 `Blocked mirror for repositories: [nexus-public (...http...)]`)。**不是** `mirrorOf=*`,不会把反应堆 sibling 整体导向私服。私服若需账号,请在 `.mvn/settings.xml` 内补 `<servers>`(勿提交密钥)。若 Nexus 已支持 **HTTPS**,更推荐改仓库 URL 为 `https://` 并删除该占位 mirror。
**隔离构建**`./scripts/build_nexus_only.sh` 会额外 `purge` `**cn/cloudwalk/elevator`** 下 `*.lastUpdated`,并在使用 `clean install` 时把 sibling 写入隔离库。
---
## 6. 生成「V2 全量传递依赖树」与与 V1 的集合 diff(推荐下一步)
当前环境若 **无法安装反应堆子模块****无法访问 Nexus**,则无法在 CI 外自动生成 **V2 完整 245+ 级传递树**。请在 **可解析依赖** 的环境、于 `**maven-cw-elevator-application` 根**执行(**自动使用 `.mvn/settings.xml`**;与 `build_nexus_only.sh` 对齐隔离库时可加 `-Dmaven.repo.local=$PWD/.m2-elevator-nexus-only`):
```bash
cd maven-cw-elevator-application
mvn -pl cw-elevator-application-starter -am -DskipTests clean install
mvn -pl cw-elevator-application-starter -am -DskipTests dependency:tree \
-DoutputFile=cw-elevator-application-starter/target/v2-starter-dependency-tree.txt
```
然后将 `**target/v2-starter-dependency-tree.txt**` 中的 `groupId:artifactId:jar:version``**docs/architecture/data/v1-elevator-lib-jars.txt**` 做集合差集(仅 artifactId-version 对齐即可),即可得到 **「V2 有而 V1 lib 无」** 与 **「V1 lib 有而 V2 未解析到」** 的完整列表。
---
## 7. 自动化脚本(可重复输出摘要)
仓库根目录执行:
```bash
python3 scripts/compare_v1_v2_elevator_dependencies.py
```
将打印:`cw_lib` 与 V2 属性对齐核对、V1 `lib` 多版本示例、以及生成 `dependency:tree` 的 Maven 命令提示。
---
## 8. 总括结论(供评估「下一步计划」)
1. **云从公共件 + intelligent 2.9.2 + davinci/cwos 等与对拍强相关的坐标**V1 `cw_lib` 与 V2 `pom.xml` **已对齐**
2. **电梯四模块**V1 **1.0-SNAPSHOT** JAR vs V2 **2.0-SNAPSHOT** 源码 —— **预期差异**,行为差应结合 **源码白名单 diff + 运行时** 看。
3. **245 个第三方 JAR**V2 由 **Boot 1.5.17 + Cloud Edgware.SR6 BOM** 收敛;V1 物理目录存在 **Feign/Ant/RxJava 多版本**,**与「仅业务源码不同」假设不完全相容** —— 若要对齐到「与 V1 进程 classpath 完全一致」,需 **依赖树 diff**,不能只盯 `cw_lib`
4. **下一步建议优先级**:① 在 CI 生成并归档 `**dependency:tree`**;② 与 `v1-elevator-lib-jars.txt`**差集报告**;③ 对差集中 **多版本冲突** 项做 **运行时类加载验证**(仅静态比对不足以解释偶发 NPE/空响应)。
---
## 相关文档
- API 调用链源码比对白名单:`V1-V2-电梯API源码比对白名单.md`
- 对拍与根因说明:`../../maven-cw-elevator-application/tools/elevator_api_parity/API-RECONCILIATION.md`
@@ -0,0 +1,24 @@
cloudwalk-common-event-3.7.2-Brussels-SRX.jar
cloudwalk-common-result-3.7.2-Brussels-SRX.jar
cloudwalk-common-serial-3.7.2-Brussels-SRX.jar
cloudwalk-common-service-3.7.2-Brussels-SRX.jar
cloudwalk-common-web-3.7.2-Brussels-SRX.jar
cloudwalk-device-manager-common-2.0.2.jar
cloudwalk-device-manager-interface-2.0.2.jar
cloudwalk-device-sdk-protocol-entity-2.2.0.jar
cloudwalk-intelligent-component-lock-1.1.1-SNAPSHOT.jar
cw-elevator-application-common-1.0-SNAPSHOT.jar
cw-elevator-application-data-1.0-SNAPSHOT.jar
cw-elevator-application-service-1.0-SNAPSHOT.jar
cw-elevator-application-web-1.0-SNAPSHOT.jar
cwos-common-aks-interface-1.0.0-SNAPSHOT.jar
cwos-component-resource-data-1.0.0-SNAPSHOT.jar
cwos-component-resource-interface-1.0.0-SNAPSHOT.jar
cwos-device-authentication-interface-1.0.0-SNAPSHOT.jar
cwos-java-sdk-resource-1.0.0-SNAPSHOT.jar
cwos-portal-interface-1.0.0-SNAPSHOT.jar
cwos-sdk-event-1.5.0-SNAPSHOT.jar
davinci-manager-common-1.1.7-SNAPSHOT.jar
davinci-manager-storage-1.1.7-SNAPSHOT.jar
intelligent-cwoscomponent-interface-2.9.2-xinghewan.jar
intelligent-cwoscomponent-rest-2.9.2-xinghewan.jar
@@ -0,0 +1,245 @@
activation-1.1.jar
aliyun-java-sdk-core-3.2.8.jar
aliyun-java-sdk-dysmsapi-1.1.0.jar
animal-sniffer-annotation-1.0.jar
annotations-2.0.0.jar
ant-1.6.5.jar
ant-1.9.6.jar
ant-apache-bsf-1.9.4.jar
ant-jakarta-oro-1.6.1.jar
ant-launcher-1.9.6.jar
antlr4-runtime-4.7.2.jar
ant-nodeps-1.8.1.jar
archaius-core-0.6.6.jar
asm-5.0.3.jar
asm-analysis-5.0.3.jar
asm-tree-5.0.3.jar
asm-util-5.0.3.jar
aspectjweaver-1.8.13.jar
bcpkix-jdk15on-1.55.jar
bcprov-jdk15on-1.55.jar
bsf-2.4.0.jar
byte-buddy-1.9.6.jar
cache-api-1.0.0.jar
classmate-1.3.4.jar
classworlds-1.1-alpha-2.jar
commons-codec-1.10.jar
commons-collections-3.2.2.jar
commons-collections4-4.1.jar
commons-compress-1.9.jar
commons-configuration-1.8.jar
commons-fileupload-1.3.1.jar
commons-io-2.5.jar
commons-lang-2.6.jar
commons-lang3-3.5.jar
commons-logging-1.2.jar
commons-pool2-2.4.3.jar
consul-api-1.3.0.jar
core-3.3.3.jar
curvesapi-1.04.jar
d3js-3.4.11.jar
dom4j-1.6.1.jar
ehcache-2.10.5.jar
encrypt-core-merge-4.0.0.jar
encrypt-core-rewrite-4.0.0.jar
fastjson-1.2.73.jar
feign-core-8.18.0.jar
feign-core-9.5.0.jar
feign-form-3.0.3.jar
feign-form-spring-3.0.3.jar
feign-hystrix-9.5.0.jar
feign-okhttp-8.18.0.jar
feign-slf4j-9.5.0.jar
freemarker-2.3.28.jar
fst-2.56.jar
groovy-2.4.5-indy.jar
gson-2.8.5.jar
guava-20.0.jar
hamcrest-core-1.3.jar
HdrHistogram-2.1.9.jar
hibernate-validator-5.3.6.Final.jar
HikariCP-2.5.1.jar
httpclient-4.5.6.jar
httpcore-4.4.10.jar
hystrix-core-1.5.12.jar
hystrix-javanica-1.5.12.jar
hystrix-metrics-event-stream-1.5.12.jar
hystrix-serialization-1.5.12.jar
jackson-annotations-2.11.2.jar
jackson-core-2.11.2.jar
jackson-databind-2.11.2.jar
jackson-dataformat-yaml-2.11.2.jar
jackson-datatype-jsr310-2.11.2.jar
jackson-module-afterburner-2.11.2.jar
jade-plugin-common-1.3.8.jar
javassist-3.21.0-GA.jar
javax.inject-1.jar
jboss-logging-3.3.2.Final.jar
jcl-over-slf4j-1.7.25.jar
jdom-1.1.2.jar
jedis-2.9.0.jar
jersey-apache-client4-1.19.1.jar
jersey-client-1.19.1.jar
jersey-core-1.19.1.jar
joda-time-2.9.9.jar
jodd-bean-3.7.1.jar
jodd-core-3.7.1.jar
jquery-2.1.1.jar
jsoup-1.9.2.jar
jsqlparser-1.2.jar
jsr311-api-1.1.1.jar
jul-to-slf4j-1.7.25.jar
junit-4.12.jar
kafka-clients-2.3.0.jar
log4j-over-slf4j-1.7.25.jar
logback-classic-1.1.11.jar
logback-core-1.1.11.jar
lombok-1.16.18.jar
lz4-java-1.6.0.jar
mail-1.4.4.jar
maven-artifact-2.0.5.jar
maven-artifact-manager-2.0.5.jar
maven-model-2.0.5.jar
maven-plugin-anno-1.4.1.jar
maven-plugin-api-2.0.5.jar
maven-profile-2.0.5.jar
maven-project-2.0.5.jar
maven-repository-metadata-2.0.5.jar
maven-settings-2.0.5.jar
mybatis-3.4.6.jar
mybatis-spring-1.3.2.jar
mybatis-spring-boot-autoconfigure-1.3.1.jar
mybatis-spring-boot-starter-1.3.1.jar
mysql-connector-java-5.1.47.jar
netflix-commons-util-0.1.1.jar
netflix-statistics-0.1.1.jar
netty-buffer-4.1.33.Final.jar
netty-codec-4.1.33.Final.jar
netty-codec-dns-4.1.33.Final.jar
netty-common-4.1.33.Final.jar
netty-handler-4.1.33.Final.jar
netty-resolver-4.1.33.Final.jar
netty-resolver-dns-4.1.33.Final.jar
netty-transport-4.1.33.Final.jar
objenesis-2.1.jar
okhttp-3.2.0.jar
okio-1.6.0.jar
opencsv-2.3.jar
pagehelper-5.1.2.jar
pagehelper-spring-boot-autoconfigure-1.2.5.jar
parboiled-core-1.1.7.jar
parboiled-java-1.1.7.jar
pegdown-1.6.0.jar
plexus-container-default-1.0-alpha-9.jar
plexus-utils-1.1.jar
poi-3.15.jar
poi-ooxml-3.15.jar
poi-ooxml-schemas-3.15.jar
reactive-streams-1.0.2.jar
reactor-core-2.0.8.RELEASE.jar
reactor-stream-2.0.8.RELEASE.jar
redisson-2.15.2.jar
redisson-spring-boot-starter-2.15.2.jar
redisson-spring-data-18-2.15.2.jar
reflections-0.9.9-RC2.jar
reflections-maven-0.9.9-RC2.jar
ribbon-2.2.5.jar
ribbon-core-2.2.5.jar
ribbon-httpclient-2.2.5.jar
ribbon-loadbalancer-2.2.5.jar
ribbon-transport-2.2.5.jar
rxjava-1.2.0.jar
rxjava-2.1.13.jar
rxnetty-0.4.9.jar
rxnetty-contexts-0.4.9.jar
rxnetty-servo-0.4.9.jar
servo-core-0.10.1.jar
servo-internal-0.10.1.jar
sharding-core-api-4.0.0.jar
sharding-core-common-4.0.0.jar
sharding-core-entry-4.0.0.jar
sharding-core-execute-4.0.0.jar
sharding-core-merge-4.0.0.jar
sharding-core-rewrite-4.0.0.jar
sharding-core-route-4.0.0.jar
sharding-jdbc-core-4.0.0.jar
sharding-jdbc-spring-boot-starter-4.0.0.jar
shardingsphere-execute-4.0.0.jar
shardingsphere-merge-4.0.0.jar
shardingsphere-rewrite-engine-4.0.0.jar
shardingsphere-spi-4.0.0.jar
shardingsphere-sql-parser-engine-4.0.0.jar
shardingsphere-sql-parser-mysql-4.0.0.jar
shardingsphere-sql-parser-oracle-4.0.0.jar
shardingsphere-sql-parser-postgresql-4.0.0.jar
shardingsphere-sql-parser-relation-4.0.0.jar
shardingsphere-sql-parser-spi-4.0.0.jar
shardingsphere-sql-parser-sql92-4.0.0.jar
shardingsphere-sql-parser-sqlserver-4.0.0.jar
sharding-spring-boot-util-4.0.0.jar
sharding-transaction-core-4.0.0.jar
slf4j-api-1.7.25.jar
snakeyaml-1.17.jar
snappy-java-1.1.7.3.jar
spring-aop-4.3.29.RELEASE.jar
spring-aspects-4.3.29.RELEASE.jar
spring-beans-4.3.29.RELEASE.jar
spring-boot-1.5.17.RELEASE.jar
spring-boot-actuator-1.5.17.RELEASE.jar
spring-boot-autoconfigure-1.5.17.RELEASE.jar
spring-boot-starter-1.5.17.RELEASE.jar
spring-boot-starter-actuator-1.5.17.RELEASE.jar
spring-boot-starter-aop-1.5.17.RELEASE.jar
spring-boot-starter-cache-1.5.17.RELEASE.jar
spring-boot-starter-data-redis-1.5.17.RELEASE.jar
spring-boot-starter-freemarker-1.5.17.RELEASE.jar
spring-boot-starter-jdbc-1.5.17.RELEASE.jar
spring-boot-starter-logging-1.5.17.RELEASE.jar
spring-boot-starter-tomcat-1.5.17.RELEASE.jar
spring-boot-starter-web-1.5.17.RELEASE.jar
spring-cloud-commons-1.3.5.RELEASE.jar
spring-cloud-consul-core-1.3.5.RELEASE.jar
spring-cloud-consul-discovery-1.3.5.RELEASE.jar
spring-cloud-context-1.3.5.RELEASE.jar
spring-cloud-netflix-core-1.4.6.RELEASE.jar
spring-cloud-netflix-hystrix-dashboard-1.4.6.RELEASE.jar
spring-cloud-starter-1.3.5.RELEASE.jar
spring-cloud-starter-consul-1.3.5.RELEASE.jar
spring-cloud-starter-consul-discovery-1.3.5.RELEASE.jar
spring-cloud-starter-netflix-archaius-1.4.6.RELEASE.jar
spring-cloud-starter-netflix-hystrix-1.4.6.RELEASE.jar
spring-cloud-starter-netflix-hystrix-dashboard-1.4.6.RELEASE.jar
spring-cloud-starter-netflix-ribbon-1.4.6.RELEASE.jar
spring-cloud-starter-openfeign-1.4.6.RELEASE.jar
spring-cloud-starter-ribbon-1.4.6.RELEASE.jar
spring-context-4.3.29.RELEASE.jar
spring-context-support-4.3.29.RELEASE.jar
spring-core-4.3.29.RELEASE.jar
spring-data-commons-1.13.16.RELEASE.jar
spring-data-keyvalue-1.2.16.RELEASE.jar
spring-data-redis-1.8.16.RELEASE.jar
spring-expression-4.3.29.RELEASE.jar
spring-jdbc-4.3.29.RELEASE.jar
spring-oxm-4.3.29.RELEASE.jar
spring-security-crypto-4.2.9.RELEASE.jar
spring-security-rsa-1.0.3.RELEASE.jar
springside-core-4.2.3-GA.jar
spring-tx-4.3.29.RELEASE.jar
spring-web-4.3.29.RELEASE.jar
spring-webmvc-4.3.29.RELEASE.jar
stax-api-1.0.1.jar
thumbnailator-0.4.8.jar
tomcat-annotations-api-8.5.34.jar
tomcat-embed-core-8.5.34.jar
tomcat-embed-el-8.5.34.jar
tomcat-embed-websocket-8.5.34.jar
tomcat-jdbc-8.5.34.jar
tomcat-juli-8.5.34.jar
validation-api-1.1.0.Final.jar
wagon-provider-api-1.0-beta-2.jar
xml-apis-1.4.01.jar
xmlbeans-2.6.0.jar
xpp3-1.1.3.4-RC8.jar
xstream-1.1.3.jar
zip4j-2.6.2.jar
zstd-jni-1.4.0-1.jar
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,209 @@
# frontend-source/ 反编译与重建方案设计
**日期**: 2026-04-29
**版本**: 1.0
**状态**: 待审查
## 1. 背景与目标
### 背景
- `frontend/` 目录包含 28 个 Vue 2 + Element UI 前端应用,均为 webpack 构建的 dist 产物
- 原始源码(.vue / webpack.config.js / package.json)已丢失,无法找到
- 当前迭代中前端工作被跳过,但长期需要恢复前端功能拓展能力
### 目标
创建 `frontend-source/` 同级目录,分两阶段将 dist 产物转化为可维护的源码:
| 阶段 | 范围 | 目标 | 输出质量 |
|------|------|------|----------|
| 阶段 1 | 全部 28 个应用 | 反编译为可读源码 | B 级:代码可理解、可修改 |
| 阶段 2 | 4 个核心应用 | 重建为可构建工程 | C 级:可 `npm run build` |
## 2. 目录结构
```
反编译/
├── frontend/ # 现有 dist 产物(只读)
└── frontend-source/ # 新建目标目录
├── AGENTS.md
├── .gitignore # node_modules/
├── decompiled/ # 阶段 1 产物(B 级反编译)
│ ├── cwos-portal/
│ ├── elevator-front/
│ ├── alarm-front/
│ ├── front_acs/
│ ├── ...(其余 24 个)
│ │
│ └── [每个应用结构]:
│ ├── README.md # API 清单 + 路由表 + 组件树
│ ├── src/
│ │ ├── views/ # 页面级模块
│ │ ├── components/ # 自定义组件
│ │ ├── api/ # API 端点清单
│ │ └── router/ # 路由定义
│ ├── static/ # CSS/img/font 复用
│ └── index.html # 原样
├── projects/ # 阶段 2 产物(C 级重建)
│ ├── cwos-portal/ # 物业管理门户
│ │ ├── package.json
│ │ ├── vue.config.js
│ │ ├── src/
│ │ │ ├── main.js
│ │ │ ├── App.vue
│ │ │ ├── views/
│ │ │ ├── components/
│ │ │ ├── api/
│ │ │ ├── router/
│ │ │ └── store/
│ │ └── public/
│ ├── elevator-front/ # 电梯管理
│ ├── alarm-front/ # 报警管理
│ └── front_acs/ # 门禁管理
└── scripts/ # 反编译工具
├── unpack-webpack.js # webpack bundle 解包
├── extract-api-calls.js # API 端点提取
├── extract-router.js # 路由表提取
├── beautify-all.sh # 批量格式化
└── compare-output.sh # 产物对比
```
## 3. 阶段 1:B 级反编译(全部 28 个)
### 3.1 反编译流水线
```
frontend/<app>/*.js ──► [1. 解包] ──► modules/*.raw.js
──► [2. 格式化] ──► modules/*.formatted.js
──► [3. 分析] ──► api-calls.json
router-tree.json
component-tree.json
──► [4. 组织] ──► decompiled/<app>/
```
### 3.2 各步骤详细说明
**步骤 1 — 解包**
- 识别 webpack bundle 的模块结构(`__webpack_modules__``__webpack_require__`
- 按模块 ID 拆分为独立文件
- 处理 chunk 文件的异步加载引用
**步骤 2 — 格式化**
- 使用 `js-beautify` 处理缩进、换行
- 使用 `prettier` 统一代码风格
- 保留注释(如有)
**步骤 3 — AST 分析**
- 使用 `@babel/parser` 解析格式化后的 JS
- 提取:
- **API 调用**`axios.get/post``this.$http` 等 HTTP 请求模式
- **路由定义**`vue-router``routes` 数组和 `path/component` 映射
- **组件注册**`Vue.component()``components: {}` 局部注册
- **Element UI 引用**`this.$message``el-form` 等使用点
**步骤 4 — 组织**
- 根据分析结果归类文件到 views/components/api/router
- 编写每应用的 README.md(API 清单、路由表、组件树)
- 原样复制 static/ 下的 CSS/img/font
### 3.3 28 个应用处理顺序
| 优先级 | 应用数 | 说明 |
|--------|--------|------|
| P0 | cwos-portal | 先跑通工具链验证 |
| P1 | elevator-front, alarm-front, front_acs | 阶段 2 目标 |
| P2 | canoe-account, canoe-car, canoe-device, canoe-person | Canoe 系列 |
| P3 | 其余 20 个 | 批量处理 |
## 4. 阶段 2:C 级重建(4 个核心)
### 4.1 技术栈
| 项 | 选用 | 理由 |
|----|------|------|
| 框架 | Vue 2.6 | 与原始一致(chunk-elementUI 确认) |
| UI 库 | Element UI 2.15 | 原始使用 Element UI |
| 构建 | Vue CLI 4.5 | 稳定版本 |
| HTTP | axios 0.21 | 与 V1 时代匹配 |
| 路由 | vue-router 3.x | 与 Vue 2 配套 |
| 状态管理 | vuex 3.x | 仅使用到的应用引入 |
### 4.2 重建流程(每个应用)
1. **工程脚手架**`vue create` 或手动搭建 Vue 2 + Element UI 项目结构
2. **路由重建**:根据阶段 1 提取的 router-tree.json 还原 `router/index.js`
3. **API 层**:根据 api-calls.json 建立 `api/` 模块(axios 封装)
4. **页面重建**:逐页面创建 `.vue` SFC,参考原 dist 的 CSS 样式
5. **组件重建**:抽取可复用组件为独立 `.vue` 文件
6. **构建验证**`npm run build` 并对比产物与原 dist
### 4.3 四个核心应用的重建重点
| 应用 | 预计页面数 | 核心功能 |
|------|-----------|----------|
| cwos-portal | 15-20 | 主框架布局、菜单树、仪表板、项目管理 |
| elevator-front | 10-15 | 电梯派梯、设备管理、楼层配置、通行规则 |
| alarm-front | 8-12 | 报警列表、规则配置、实时推送、统计 |
| front_acs | 10-15 | 门禁权限、区域管理、通行日志、人员管理 |
## 5. 工具脚本设计
### 5.1 `unpack-webpack.js`
```
输入: <app>/static/js/app.xxx.js
处理: 解析 webpack bundle 结构,按模块 ID 拆分
输出: modules/<module-id>.js
```
### 5.2 `extract-api-calls.js`
```
输入: modules/*.formatted.js
处理: AST 遍历查找 HTTP 调用模式
输出: api-calls.json (端点、方法、参数)
```
### 5.3 `extract-router.js`
```
输入: modules/*.formatted.js
处理: 查找 vue-router 的 routes 定义
输出: router-tree.json (path → component 映射)
```
### 5.4 `beautify-all.sh`
```
输入: modules/*.js
处理: 批量 js-beautify + prettier
输出: modules/*.formatted.js
```
## 6. 质量验证
### 阶段 1 验证
- [ ] 每个应用产出 README.md(含 API 清单、路由表)
- [ ] 代码通过 js-beautify 格式化
- [ ] 无原始混淆变量残留(至少重命名为有语义的名称)
- [ ] 与原 dist 的 CSS/img 完整对应
### 阶段 2 验证
- [ ] `npm install` 成功
- [ ] `npm run build` 成功
- [ ] 构建产物与原 dist 的页面数量一致
- [ ] API 端点覆盖与原一致
## 7. 风险与限制
| 风险 | 影响 | 缓解措施 |
|------|------|----------|
| 变量名无法完全还原 | 代码可读性下降 | 通过上下文推断 + 手工标注语义名 |
| Vue SFC 无法自动还原 | 阶段 1 产物为 .js 而非 .vue | 阶段 2 手工重建为 .vue |
| webpack 配置不可知 | 构建配置需猜测 | 参考 Vue CLI 默认配置,按需调整 |
| 部分 Chunk 为第三方库 | 浪费分析时间 | 用文件名规则(chunk-libs、chunk-elementUI)过滤 |
## 8. 与现有仓库的集成
- `frontend-source/` 为新建独立目录,不修改 `frontend/`
- 加入根 `.gitignore` 白名单(类似 `frontend/` 的显式 `!` 规则)
- 产出 `frontend-source/AGENTS.md` 作为本目录说明
- 产出 `docs/superpowers/specs/` 下的本设计文档