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
@@ -0,0 +1,80 @@
# 电梯 HTTP 接口:清单核对、调用一致性、不一致根因
本文把三件事拆开说明,避免与「对拍脚本 bug」混淆。
---
## 一、接口清单核对(「有哪些接口」)
| 来源 | 产物 / 命令 | 核对内容 |
|------|-------------|----------|
| **自动化清单** | `api_catalog.json` | 43 条:对拍/冒烟用的 `id``method``path``fixture`/`body`。 |
| **代码事实** | `python3 report/build_backend_api_inventory.py --out report/BACKEND-API-INVENTORY.md` | 扫描 `cw-elevator-application-web/**Controller.java`,与 catalog 对照。 |
| **结论** | 当前仓库生成结果 | catalog 与 Controller 声明路径 **一致**;额外仅有 **`POST /file/imgupload`**multipart,未进 JSON catalog)。 |
清单层面:**V1 与 V2 共用同一套 Controller 源码与同一 catalog**,不存在「V2 少注册了一批路径」这类清单差异。
---
## 二、接口调用是否一致(「测试怎么打」)
对拍/冒烟使用 **同一份** Python 逻辑(`parity/client.py`):
- **方法**catalog 中的 `method`(均为 `POST`)。
- **路径**:同一 `path` 分别拼在 `--base-old``--base-new` 后。
- **请求体**:同一 `fixture` 或内联 `body`
- **请求头**`default_headers()``Content-Type: application/json` + 环境变量 `ELEVATOR_HEADER_*` 可选)。
因此:**从测试工具角度,对 V1、V2 的 HTTP 调用是同一套**;若一端返回 Cloudwalk JSON、另一端返回 Spring Boot 500 错误 JSON,属于 **服务端行为差异**,不是「调用了不同接口」。
---
## 三、不一致的表现与根因(「为什么 V2 全是 new=None / 500」)
### 3.1 现象(如何读冒烟 JSON
- **V1**`http_status` 多为 **200**`response_head` 形如 `{"code":"...", "success":..., ...}` → 能解析顶层 **`code`**(业务码)。
- **V2(修复前)**`http_status` **500**`response_head` 形如
`{"timestamp":...,"status":500,"error":"Internal Server Error","exception":"java.lang.NullPointerException",...}`
**没有**顶层 `code`,对拍里显示为 **`new=None`**。
### 3.2 根因(代码链)
1. `AbstractCloudwalkController.getCloudwalkContext()` 调用
`CloudwalkCallContextBuilder.buildContext(cloudwalkSessionContextHolder)`
2. `CloudwalkCallContextBuilder` 第一行:
`CloudwalkSessionObject session = sessionContextHolder.getSession();`
接着 **`session.getUser()`** 等;若 **`session == null` → NPE**。
3. `CloudwalkSessionContextHolder` 使用 **ThreadLocal**;会话对象由 **`CloudwalkContextParameterFilter`**(包 `cn.cloudwalk.web.filter`)在 **`doFilterInternal`** 里 **`putSession(sessionObject)`** 写入。
4. **Maven V2 启动类**原先 **未扫描** `cn.cloudwalk.web.filter`,过滤器 **未注册** → 请求线程从未 `putSession`**`getSession()` 恒为 null** → **所有依赖 `getCloudwalkContext()` 的接口统一 NPE**
这与「接口清单不一致」无关,是 **运行时上下文未初始化**
### 3.3 修复(应用侧)
`ElevatorApplication``scanBasePackages` 中增加 **`cn.cloudwalk.web.filter`**,使 `CloudwalkContextParameterFilter` 成为 Spring Bean 并参与 Filter 链。
**注意**:不要整包扫描 `cn.cloudwalk.web`(会带入 `LocaleConfiguration` 再声明一个 `CloudwalkSessionContextHolder` Bean,与 `CloudwalkSessionHolderConfiguration` 冲突);只扫描 **`cn.cloudwalk.web.filter`** 即可。
修复后应重新构建 V2 JAR,再跑:
```bash
./scripts/run_full_elevator_api_suite.sh
```
预期:V2 的 `http_status` 回到与 V1 同类的业务响应(多为 200 + Cloudwalk `code`),对拍 **`new=None`** 应消失或仅剩真实业务差异。
---
## 四、核对清单速查表
| 步骤 | 做什么 |
|------|--------|
| 0 | **V1/V2 电梯业务源码比对**(仅白名单文件、忽略空白):`docs/architecture/V1-V2-电梯API源码比对白名单.md`**依赖比对**`lib`/`cw_lib` vs 反应堆):`docs/architecture/V1-V2-电梯依赖比对.md`。 |
| 1 | 跑 `build_backend_api_inventory.py`,打开 `BACKEND-API-INVENTORY.md`,确认 **§3 无遗漏 path**。 |
| 2 | 跑全量冒烟,打开 `smoke-v1_*.json` / `smoke-v2_*.json`,逐条对比 **`http_status` + `response_head` 前缀**(是否均为 `{"code":`)。 |
| 3 | 若 V2 仍为 500,在 **V2 日志**中搜 `NullPointerException` 与具体 `path`,确认是否还有 **其它** 未注册的 Filter/Interceptor。 |
---
*文档与 `ElevatorApplication` 扫描修复同步维护。*
@@ -7,6 +7,7 @@
| **单机冒烟** | 对单个 Base URL 遍历 `api_catalog.json` 中的接口(`include_in_smoke=true`),记录 HTTP 状态、耗时、业务 `code`、响应摘要 → `report/smoke-{label}-*.md` |
| **横向对拍** | 旧 JAR`--base-old`)与新 JAR`--base-new`)并行调用;仅 **`include_in_parity=true`** 的条目参与 **HTTP 状态 + 业务 code** 一致性断言 → `report/parity-*.md` |
| **套件总览** | 合并本次产生的冒烟×2 + 对拍 → `report/SUITE-*.md` |
| **源码级比对(V1 jar → CFR** | 见 `../../scripts/decompile_v1_elevator_jars.sh``cw_lib` 四模块 jar 反编译至 `tools/v1-decompiled/`,再运行 `scripts/source_parity_scan.py``report/SOURCE-PARITY-BY-CLASS-decomp.md` |
接口清单与请求体见 **`api_catalog.json`**(支持 `fixture` 文件或内联 `body`)。
@@ -1,6 +1,6 @@
{
"version": 2,
"description": "电梯应用 HTTP 接口清单:冒烟与对拍共用。include_in_parity=false 的项仅做单机路由/业务响应探测,不参与 V1/V2 等值断言。",
"description": "电梯应用 HTTP 接口清单:冒烟与对拍共用。include_in_parity=false 的项仅做单机路由/业务响应探测,不参与 V1/V2 等值断言。租户访客楼层策略(V2 Maven 独有 TenantVisitorFloorPolicy*)影响 POST /elevator/person/add/visitorrecord/page 受 V1 legacy(access-control)与 V2(ElevatorApplication)在 Consul 的分片规则是否生效差异影响(见该条 parity_exclude_reason),亦不做 code 等值断言。可选 boundary_patches:在基线 fixture/body 上深度合并 patch,需环境变量 ELEVATOR_PARITY_BOUNDARY=1 时与基线 default 一并参与对拍。",
"endpoints": [
{
"id": "person_add_visitor_min",
@@ -9,8 +9,9 @@
"path": "/elevator/person/add/visitor",
"fixture": "person_add_visitor_min.json",
"compare_mode": "code_only",
"include_in_parity": true,
"include_in_smoke": true
"include_in_parity": false,
"include_in_smoke": true,
"parity_exclude_reason": "租户访客楼层策略为 V2 扩展,与 V1.20211103 不做 code 等值断言"
},
{
"id": "person_detail",
@@ -20,7 +21,12 @@
"fixture": "person_detail_min.json",
"compare_mode": "code_only",
"include_in_parity": true,
"include_in_smoke": true
"include_in_smoke": true,
"boundary_patches": [
{ "id": "rows_zero", "description": "每页行数为 0", "patch": { "rowsOfPage": 0 } },
{ "id": "page_zero", "description": "当前页为 0", "patch": { "currentPage": 0 } },
{ "id": "large_page", "description": "极大页码与大页长", "patch": { "currentPage": 999999, "rowsOfPage": 200 } }
]
},
{
"id": "passrule_page",
@@ -30,7 +36,12 @@
"fixture": "passrule_page.json",
"compare_mode": "code_only",
"include_in_parity": true,
"include_in_smoke": true
"include_in_smoke": true,
"boundary_patches": [
{ "id": "page_no_zero", "description": "页码为 0", "patch": { "pageNo": 0 } },
{ "id": "page_size_zero", "description": "页大小为 0", "patch": { "pageSize": 0 } },
{ "id": "large_page", "description": "极大页码与页大小", "patch": { "pageNo": 999999, "pageSize": 500 } }
]
},
{
"id": "record_page",
@@ -39,8 +50,22 @@
"path": "/intelligent/acs/elevator/record/page",
"fixture": "record_page.json",
"compare_mode": "code_only",
"include_in_parity": true,
"include_in_smoke": true
"include_in_parity": false,
"parity_exclude_reason": "V1 legacy 入口启用 Consul 分表(actualDataNodes 年后缀),联机库未必存在 IT_ACS_ELEVATOR_RECORD_YYYY 物理表;V2 当前启动日志中 Sharding 无 tables 仅 defaultDataSource,走单表逻辑。二者命中不同物理表/路由,业务码无法与「同库同规则」前提对齐。",
"include_in_smoke": true,
"boundary_patches": [
{ "id": "rows_zero", "description": "每页行数为 0", "patch": { "rowsOfPage": 0 } },
{
"id": "time_equal",
"description": "起止时间相等",
"patch": { "startTime": 1625068800000, "endTime": 1625068800000 }
},
{
"id": "time_inverted",
"description": "结束早于开始",
"patch": { "startTime": 1625155200000, "endTime": 1625068800000 }
}
]
},
{
"id": "person_add",
@@ -1,6 +1,6 @@
{
"currentPage": 1,
"rowsOfPage": 1,
"startTime": 1,
"endTime": 2
"startTime": 1625068800000,
"endTime": 1625155199999
}
@@ -0,0 +1,64 @@
"""
在基线请求体上叠加 boundary_patches,用于双端对拍的入参边界/范围扩展。
catalog 中可选字段(仅当开启 ELEVATOR_PARITY_BOUNDARY=1 时展开)::
"boundary_patches": [
{ "id": "rows_zero", "description": "可选说明", "patch": { "rowsOfPage": 0 } }
]
patch 与基线 JSON **深度合并**(字典递归;非 dict 叶子由 patch 覆盖)。
"""
from __future__ import annotations
import copy
import os
from typing import Any, Dict, Iterator, List, Tuple
from parity.catalog_loader import endpoint_body
def deep_merge(base: Any, patch: Any) -> Any:
"""深度合并:patch 覆盖 base;两 dict 则递归。"""
if not isinstance(base, dict) or not isinstance(patch, dict):
return copy.deepcopy(patch)
out = copy.deepcopy(base)
for k, v in patch.items():
if k in out and isinstance(out[k], dict) and isinstance(v, dict):
out[k] = deep_merge(out[k], v)
else:
out[k] = copy.deepcopy(v)
return out
def boundary_enabled() -> bool:
return os.environ.get("ELEVATOR_PARITY_BOUNDARY", "0").strip() == "1"
def iter_parity_request_cases(ep: Dict[str, Any]) -> Iterator[Tuple[str, Dict[str, Any]]]:
"""
生成 (case_id, body)。首条恒为 (\"default\", 基线体)。
boundary 开启且条目含 boundary_patches 时,追加合并后的变体。
"""
base = endpoint_body(ep)
yield "default", base
if not boundary_enabled():
return
patches: List[Dict[str, Any]] = ep.get("boundary_patches") or []
if not patches:
return
for bp in patches:
cid = str(bp.get("id") or bp.get("label") or "variant").strip()
if not cid:
cid = "variant"
patch = bp.get("patch")
if patch is None or not isinstance(patch, dict):
continue
merged = deep_merge(base, patch)
if not isinstance(merged, dict):
merged = {}
yield cid, merged
@@ -0,0 +1,125 @@
# 电梯应用 API 测试套件总览
- **生成时间**: 2026-04-28T10:21:36.376623
- **清单来源**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/api_catalog.json`(共 **43** 条接口定义)
- **后端 Controller 走查**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/BACKEND-API-INVENTORY.md`
## 1. 说明
- **全量清单**:第二节,来自 `api_catalog.json`,含是否参与冒烟/对拍。
- **测试结果矩阵**:第三节,与本次运行生成的 **JSON** 侧车文件对齐(与 `.md` 同名的 `.json`)。若应用未启动导致 pytest **skip**,则无 JSON,矩阵中表现为 **—**。
- **横向对拍**`pytest tests/test_parity_full_catalog.py` 可覆盖 **catalog 全部** 条目;`test_parity_endpoints.py`**include_in_parity=true** 的核心项。
## 2. 全量接口测试清单(catalog)
| ID | 名称 | 方法 | Path | 冒烟 | 横向对拍 |
| ---- | ---- | ---- | ---- | ---- | -------- |
| `person_add_visitor_min` | 访客派梯-最小体 | POST | `/elevator/person/add/visitor` | 是 | 是 |
| `person_detail` | 人员详情-分页 | POST | `/elevator/person/detail` | 是 | 是 |
| `passrule_page` | 通行规则-分页 | POST | `/elevator/passRule/page` | 是 | 是 |
| `record_page` | 通行记录-分页 | POST | `/intelligent/acs/elevator/record/page` | 是 | 是 |
| `person_add` | 人员-从现有人员添加 | POST | `/elevator/person/add` | 是 | 否 |
| `person_edit` | 人员-编辑 | POST | `/elevator/person/edit` | 是 | 否 |
| `person_delete` | 人员-删除 | POST | `/elevator/person/delete` | 是 | 否 |
| `person_page` | 人员-分页 | POST | `/elevator/person/page` | 是 | 否 |
| `person_time_detail` | 人员-时间详情 | POST | `/elevator/person/timeDetail` | 是 | 否 |
| `person_page_by_app` | 人员-应用分页 | POST | `/elevator/person/pageByApp` | 是 | 否 |
| `passrule_floor` | 通行规则-楼层列表 | POST | `/elevator/passRule/floor` | 是 | 否 |
| `passrule_add` | 通行规则-新增 | POST | `/elevator/passRule/add` | 是 | 否 |
| `passrule_edit` | 通行规则-修改 | POST | `/elevator/passRule/edit` | 是 | 否 |
| `passrule_delete` | 通行规则-删除 | POST | `/elevator/passRule/delete` | 是 | 否 |
| `passrule_detail` | 通行规则-详情 | POST | `/elevator/passRule/detail` | 是 | 否 |
| `passrule_image` | 通行规则-按人像查楼层权限 | POST | `/elevator/passRule/image` | 是 | 否 |
| `passrule_image_list` | 通行规则-批量人像 | POST | `/elevator/passRule/image/list` | 是 | 否 |
| `record_analyse_cycle` | 记录-周期统计 | POST | `/intelligent/acs/elevator/record/analyse/cycle` | 是 | 否 |
| `record_analyse_count` | 记录-次数统计 | POST | `/intelligent/acs/elevator/record/analyse/count` | 是 | 否 |
| `record_page_request` | 记录-请求分页 | POST | `/intelligent/acs/elevator/record/page/request` | 是 | 否 |
| `record_device_list` | 记录-设备列表 | POST | `/intelligent/acs/elevator/record/device/list` | 是 | 否 |
| `record_zone_tree` | 记录-区域树 | POST | `/intelligent/acs/elevator/record/zone/tree` | 是 | 否 |
| `device_v2_39201` | 设备网关-39201 设备列表 | POST | `/device/v2/39201` | 是 | 否 |
| `device_v2_39202` | 设备网关-39202 区域电梯码 | POST | `/device/v2/39202` | 是 | 否 |
| `device_v2_39203` | 设备网关-39203 添加记录 | POST | `/device/v2/39203` | 是 | 否 |
| `device_v2_39204` | 设备网关-39204 密钥时间戳(已废弃) | POST | `/device/v2/39204` | 是 | 否 |
| `elevator_device_add` | 设备-新增 | POST | `/elevator/device/add` | 是 | 否 |
| `elevator_device_edit` | 设备-编辑 | POST | `/elevator/device/edit` | 是 | 否 |
| `elevator_device_get_by_id` | 设备-按ID查询 | POST | `/elevator/device/getById` | 是 | 否 |
| `elevator_device_delete` | 设备-删除 | POST | `/elevator/device/delete` | 是 | 否 |
| `elevator_device_edit_code` | 设备-改码 | POST | `/elevator/device/editCode` | 是 | 否 |
| `elevator_device_get` | 设备-查询列表 | POST | `/elevator/device/get` | 是 | 否 |
| `elevator_device_export` | 设备-导出 | POST | `/elevator/device/export` | 是 | 否 |
| `elevator_device_zone_tree_code` | 设备-区域树编码 | POST | `/elevator/device/zone/treeCode` | 是 | 否 |
| `elevator_device_page` | 设备-分页 | POST | `/elevator/device/devicePage` | 是 | 否 |
| `restructure_unbind_floors` | 改造-未绑定楼层 | POST | `/elevator/restructure/unbind/floors` | 是 | 否 |
| `restructure_floors` | 改造-楼层列表 | POST | `/elevator/restructure/floors` | 是 | 否 |
| `restructure_condition` | 改造-条件 | POST | `/elevator/restructure/condition` | 是 | 否 |
| `restructure_condition_labels` | 改造-条件标签 | POST | `/elevator/restructure/condition/labels` | 是 | 否 |
| `restructure_binding` | 改造-绑定 | POST | `/elevator/restructure/binding` | 是 | 否 |
| `restructure_binding_person` | 改造-绑定人员 | POST | `/elevator/restructure/binding/person` | 是 | 否 |
| `restructure_task_progress` | 改造-任务进度 | POST | `/elevator/restructure/task/progress` | 是 | 否 |
| `restructure_task_stop` | 改造-停止任务 | POST | `/elevator/restructure/task/stop` | 是 | 否 |
## 3. 测试结果矩阵
- **V1 冒烟数据来源**: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/smoke-v1_legacy-20260428-102131.md
- **V2 冒烟数据来源**: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/smoke-v2_build-20260428-102132.md
- **核心对拍**(约 4 项): /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/parity-20260428-102133.md
- **全量对拍**catalog 全部): /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/parity-full-20260428-102136.md
### 测试结果矩阵(按 catalog `id` 对齐)
| catalog id | V1 HTTP | V1 code | V2 HTTP | V2 code | 核心对拍 | 全量对拍 | 备注 |
| ---------- | ------- | ------- | ------- | ------- | -------- | -------- | ---- |
| `person_add_visitor_min` | 200 | 76260521 | 200 | 76260521 | **Y** | **Y** | |
| `person_detail` | 200 | 00000000 | 200 | 00000000 | **Y** | **Y** | |
| `passrule_page` | 200 | 76260508 | 200 | 76260508 | **Y** | **Y** | |
| `record_page` | 200 | 76260305 | 200 | 00000000 | **N** business code: old='76260305' new='00000000' | **N** business code: old='76260305' new='00000000' | |
| `person_add` | 200 | 76260405 | 200 | 76260527 | (不参与) | **N** business code: old='76260405' new='76260527' | |
| `person_edit` | 200 | 76260418 | 200 | — | (不参与) | **N** business code: old='76260418' new=None | |
| `person_delete` | 200 | — | 200 | — | (不参与) | **Y** | |
| `person_page` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `person_time_detail` | 200 | — | 200 | — | (不参与) | **Y** | |
| `person_page_by_app` | 200 | 76260402 | 200 | — | (不参与) | **N** business code: old='76260402' new=None | |
| `passrule_floor` | 200 | — | 200 | — | (不参与) | **Y** | |
| `passrule_add` | 200 | 76260514 | 200 | 76260527 | (不参与) | **N** business code: old='76260514' new='76260527' | |
| `passrule_edit` | 200 | — | 200 | — | (不参与) | **Y** | |
| `passrule_delete` | 200 | — | 200 | — | (不参与) | **Y** | |
| `passrule_detail` | 200 | — | 200 | — | (不参与) | **Y** | |
| `passrule_image` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `passrule_image_list` | 200 | — | 200 | — | (不参与) | **Y** | |
| `record_analyse_cycle` | 200 | 76260333 | 200 | 00000000 | (不参与) | **N** business code: old='76260333' new='00000000' | |
| `record_analyse_count` | 200 | 76260336 | 200 | 00000000 | (不参与) | **N** business code: old='76260336' new='00000000' | |
| `record_page_request` | 200 | 76260335 | 200 | 00000000 | (不参与) | **N** business code: old='76260335' new='00000000' | |
| `record_device_list` | 200 | 76260108 | 200 | 76260108 | (不参与) | **Y** | |
| `record_zone_tree` | 200 | 76260108 | 200 | 76260108 | (不参与) | **Y** | |
| `device_v2_39201` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `device_v2_39202` | 200 | 获取区域的电梯编码失败 | 200 | 获取区域的电梯编码失败 | (不参与) | **Y** | |
| `device_v2_39203` | 200 | — | 200 | — | (不参与) | **Y** | |
| `device_v2_39204` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `elevator_device_add` | 200 | — | 200 | — | (不参与) | **Y** | |
| `elevator_device_edit` | 200 | 修改派梯设备失败 | 200 | 修改派梯设备失败 | (不参与) | **Y** | |
| `elevator_device_get_by_id` | 200 | — | 200 | — | (不参与) | **Y** | |
| `elevator_device_delete` | 200 | 删除派梯设备信息失败 | 200 | 删除派梯设备信息失败 | (不参与) | **Y** | |
| `elevator_device_edit_code` | 200 | — | 200 | — | (不参与) | **Y** | |
| `elevator_device_get` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `elevator_device_export` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `elevator_device_zone_tree_code` | 200 | 获取区域的电梯编码失败 | 200 | 获取区域的电梯编码失败 | (不参与) | **Y** | |
| `elevator_device_page` | 200 | 76260529 | 200 | 76260529 | (不参与) | **Y** | |
| `restructure_unbind_floors` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `restructure_floors` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `restructure_condition` | 200 | 根据条件查询派梯楼层异常 | 200 | 根据条件查询派梯楼层异常 | (不参与) | **Y** | |
| `restructure_condition_labels` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `restructure_binding` | 200 | 机构id、标签id绑定派梯楼层异常 | 200 | 机构id、标签id绑定派梯楼层异常 | (不参与) | **Y** | |
| `restructure_binding_person` | 200 | 人员批量绑定派梯楼层异常 | 200 | 人员批量绑定派梯楼层异常 | (不参与) | **Y** | |
| `restructure_task_progress` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
| `restructure_task_stop` | 200 | 00000000 | 200 | 00000000 | (不参与) | **Y** | |
**说明**`code` 为 CloudwalkResult 顶层业务码;HTTP 为传输层状态。**核心对拍**仅 `include_in_parity=true`**全量对拍**覆盖 `api_catalog.json` 全部条目(需跑 `test_parity_full_catalog`)。对拍 **Y** 表示旧/新 HTTP 一致且业务 code 一致(`code_only`)。
## 4. 原始报告路径(便于回放)
- V1 冒烟: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/smoke-v1_legacy-20260428-102131.md`
- V2 冒烟: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/smoke-v2_build-20260428-102132.md`
- 对拍(核心): `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/parity-20260428-102133.md`
- 对拍(全量): `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/parity-full-20260428-102136.md`
- 后端走查: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/BACKEND-API-INVENTORY.md`
- 同名 **`.json`** 与 `.md` 一并生成时可自动填充第三节矩阵。
@@ -0,0 +1,34 @@
# API_DIFF 剩余项排查(对照 cw_lib V1 JAR
本报告对应 `bytecode_parity_rootcause.py`**norm_api 合并 descriptor 并排序** 之后仍标记为 `API_DIFF` 的类(约 14 个)。此前约 35 项差异主要来自 **javap 成员声明顺序**(已消除)与 **工具/常量类缺省构造可见性**(已对可与 V1 对齐的类补充 `private Foo()`)。
## 1. 脚本侧变更摘要
- `norm_api`:将「成员行 + 下一行 `descriptor:`」合并为一条后 **排序**,避免 Lombok/编译器调整顺序导致的伪差异。
- 源码:`ToolUtil``AcsConstants``AcsLockConstants``ErrorCode``FeignRemoteConfig``ImageStoreConstants` 增加 **private 空参构造**,与 V1 一致。
- **例外**`FeignThreadLocalUtil` 在 V1 JAR 中为 **public 默认构造**,未添加 private 构造,避免与 V1 不一致。
## 2. 剩余 API_DIFF 归类
| 类 | 原因概要 |
|----|----------|
| `FeignThreadLocalUtil` | V2 新增 `callWithContext(CloudwalkCallContext, Callable)`;其余与 V1 构造可见性需保持 public 默认。 |
| `AcsElevatorCodeDao` / `Impl` / `Mapper` | V2 新增 `listByZoneIds(List<String>)` 等查询链。 |
| `AcsElevatorCodeService` / `AcsElevatorCodeServiceImpl` | V2 新增/调整按 zone 聚合的 `Map<…>` 接口。 |
| `AcsDeviceTaskServiceImpl` | V2 大量新增带 `CloudwalkCallContext`、绑定参数等辅助方法(异步/上下文传递)。 |
| `AcsElevatorDeviceServiceImpl` | 设备列表相关 lambda 参数类型由 `List` 变为 `ArrayList` 及 lambda 编号变化(合成方法签名变化)。 |
| `AcsPassRuleServiceImpl` | V2 依赖线程池、`CloudwalkCallContext`、日志辅助方法等成员变化。 |
| `ImageRuleRefServiceImpl` | V2 新增 `fillLabelDetailsFromMap` 等私有方法及 Context 重载。 |
| `AcsPersonServiceImpl` | V2 异步删除、线程池、`CloudwalkCallContext`;lambda 合成签名与 V1 不同。 |
| `PersonRuleServiceImpl` | V2 租户访客楼层:`TenantVisitorFloorPolicyDao``parseAllowZoneIds` 等。 |
| `AcsElevatorRecordServiceImpl` | **V1 仍存在** `lambda$openRecord$0(...)`,**V2 已移除或改写**,属签名删减。 |
| `AcsElevatorDeviceController` | `treeRecursionDataList``(List)` 变为 `(List, Map)`(递归树附加参数)。 |
## 3. IMPL_DIFF 数量上升说明
部分类原先因 **API 哈希不一致** 被标为 `API_DIFF`,未展示实现差异。API 归一化对齐后,同一批类若字节码仍不同,会正确显示为 **`IMPL_DIFF`**。这不代表质量回退,而是分类更准确。
## 4. 若要继续压低 API_DIFF
- **删除或改为 package-private** 新增对外 API(需评估业务是否依赖)。
- **恢复 V1 签名**(如 Controller 方法参数回退)将影响对外 HTTP 契约,须与「接口不变」约定一并评审。
@@ -0,0 +1,65 @@
# 电梯应用后端 HTTP 走查(Controller 扫描 vs api_catalog
- **扫描目录**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/cw-elevator-application-web/src/main/java`
- **catalog**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/api_catalog.json`(共 **43** 条 path
## 1. Java 声明路由(REST Controller
| 方法 | Path | 源文件 |
| ---- | ---- | ------ |
| POST | `/device/v2/39201` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java` |
| POST | `/device/v2/39202` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java` |
| POST | `/device/v2/39203` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java` |
| POST | `/device/v2/39204` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java` |
| POST | `/elevator/device/add` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/delete` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/devicePage` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/edit` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/editCode` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/export` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/get` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/getById` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/device/zone/treeCode` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceController.java` |
| POST | `/elevator/passRule/add` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/passRule/delete` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/passRule/detail` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/passRule/edit` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/passRule/floor` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/passRule/image` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/passRule/image/list` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/passRule/page` | `cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` |
| POST | `/elevator/person/add` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/person/add/visitor` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/person/delete` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/person/detail` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/person/edit` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/person/page` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/person/pageByApp` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/person/timeDetail` | `cn/cloudwalk/elevator/person/controller/AcsPersonController.java` |
| POST | `/elevator/restructure/binding` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/elevator/restructure/binding/person` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/elevator/restructure/condition` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/elevator/restructure/condition/labels` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/elevator/restructure/floors` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/elevator/restructure/task/progress` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/elevator/restructure/task/stop` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/elevator/restructure/unbind/floors` | `cn/cloudwalk/elevator/handler/device/controller/AcsElevatorRestructureController.java` |
| POST | `/file/imgupload` | `cn/cloudwalk/elevator/handler/device/controller/FileController.java` |
| POST | `/intelligent/acs/elevator/record/analyse/count` | `cn/cloudwalk/elevator/record/controller/AcsElevatorRecordController.java` |
| POST | `/intelligent/acs/elevator/record/analyse/cycle` | `cn/cloudwalk/elevator/record/controller/AcsElevatorRecordController.java` |
| POST | `/intelligent/acs/elevator/record/device/list` | `cn/cloudwalk/elevator/record/controller/AcsElevatorRecordController.java` |
| POST | `/intelligent/acs/elevator/record/page` | `cn/cloudwalk/elevator/record/controller/AcsElevatorRecordController.java` |
| POST | `/intelligent/acs/elevator/record/page/request` | `cn/cloudwalk/elevator/record/controller/AcsElevatorRecordController.java` |
| POST | `/intelligent/acs/elevator/record/zone/tree` | `cn/cloudwalk/elevator/record/controller/AcsElevatorRecordController.java` |
## 2. 未纳入 api_catalog 的 Controller 路径
- `/file/imgupload`
## 3. api_catalog 有而扫描未命中(请核对写法/网关前缀)
- (无)
## 4. 其它说明
- **/file/imgupload**FileControllermultipart/form-data,未纳入 JSON 冒烟)
@@ -0,0 +1,192 @@
# V1 反编译还原度与 V2 源码差异归因(修订版)
**文档日期**2026-04-28
**修订说明**:此前版本用「哪一侧产品更合理」简化结论,**不适宜**用于评估 CFR 质量。本版以 **反编译是否正确、还原度是否高** 为第一目标;与 Maven 源码的差异单独 **归因**CFR 噪声 / jar 真貌 / 源码相对历史 jar 的变更)。
**关联**`V1-V2-DIFF-ISSUES.md`(相似度仅作筛查线索,**不得**单独作为「业务不一致」或「谁对谁错」的判定依据)。
---
## 1. 审核框架(必须用到的判定顺序)
### 1.1 何谓「还原正确 / 还原度高」
| 层级 | 含义 |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **语义与字节码一致** | CFR 呈现的调用链、分支、`@Value`/常量键名与 `javap`/ASM 可读信息一致(或可被其支持)。 |
| **与部署模型互证(强证据)** | 反编译显示「从 Spring 占位符读取某配置键」,且 **同一时代的部署配置模板**(或归档 `application.properties`/`yml`)中 **确实存在该键**,则说明:既不是 CFR hallucination,也符合该类在运行时的注入模型 → **对该段代码,反编译还原可信度高**。 |
| **与常量/枚举互证** | 魔数、错误码字符串与 jar 内外部契约一致时,可降低「反编译看错 opcode」的担忧。 |
### 1.2 与 V2(Maven)不一致时怎样写结论(禁止简单站队)
| 情形 | 写法 |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| CFR 显示 A,配置/jar 侧可互证 | **还原度:高**。 |
| CFR 显示 A,V2 源码显示 B | 优先判断:**历史 cw_lib jar 是否本就为 A**——若是,则差异为 **Maven 源码相对 20211103 jar 的演进**,不是「CFR 把 B 译错了」。必要时用 **javap -c / 解压 class 比对** 复核。 |
| 仅写法/泛型/命名不同,语义相同 | **还原度:高(噪声)**;勿记为业务分歧。 |
---
## 2. 分项:还原度与差异归因(已走查类)
### 2.1 `AcsElevatorDeviceGetWayController` — `POST /device/v2/39204``getKey`
**V1CFR)呈现的语义**
`KeyValueResult` 使用字段 `this.key``this.time``this.keyA`,对应 `@Value("${elevator.application.key}")` 等注入后再 `setKey`/`setTime`/`setKeyA` 返回(参见当前 CFR`.../AcsElevatorDeviceGetWayController.java``39204` 方法)。
**部署配置互证(原始侧确有同名项)**
下列模板与 **legacy / v2 两份**部署属性一致包含电梯应用键(示例值一致,便于对照键名是否存在):
```properties
# maven-cw-elevator-application/deploy/v1-legacy/application.properties (约 102104 行)
elevator.application.key=xinghewan
elevator.application.time=600
elevator.application.keyA=5B7DEF88FF04
```
```properties
# maven-cw-elevator-application/deploy/v2-maven/application.properties (约 108110 行)
elevator.application.key=xinghewan
elevator.application.time=600
elevator.application.keyA=5B7DEF88FF04
```
**结论(还原度)**
- CFR 对该方法的还原与 **「从配置注入后再写出到响应」** 的模型一致,且 **配置工件中键名齐备**,故 **将该段评定为:反编译还原正确、可信度高**
- **不作**「返回明文钥是否政治上正确」的结论;与安全策略相关的取舍属于 **源码/Maven 侧后续修改**范畴。
**与 V2 源码的差异归因**
- V2 将该接口标为 `@Deprecated``key`/`keyA` 置空字符串等,属于 **Maven 源码相对历史字节码行为的故意变更**
- 该类差异 **不能**反向证明 CFR「译错」;相反,若以 jar 为准,CFR 更忠实于 **当时的** class 文件。
---
### 2.2 `AcsElevatorDeviceGetWayController` — `POST /device/v2/39202`(区域树 + 电梯码)
**V1CFR)呈现的语义**
树遍历后对多个节点分别构造 `AcsElevatorCodeParam` 并调用 `elevatorCodeService.get(...)`(逐次查询)。
**V2Maven)呈现的语义**
收集 zoneId 集合后 `mapByZoneIds`,再用 `ZoneTreeCollectors` 等与树组装。
**结论(还原度 vs 归因)**
| 对象 | 结论 |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| **CFR 对 jar 内 39202 逻辑的还原** | 若解压的 `cw-elevator-application-web` class 与之同构(循环 + 多次 `get`),则 **对该历史 jarCFR 还原度高**;这是在描述「字节码长什么样」,不是优劣判断。 |
| **V1 CFR 与 V2 源码文本差异大** | 归因:**Maven 源码已对取码路径做重构(批量 + 工具类)**,属于 **源码演进**,≠ CFR 不可靠。若要 100% 封口,可对 **20211103 jar** 内对应 `*.class` 做一次 `javap -c` 与 CFR 提纲对照(建议纳入后续工件)。 |
---
### 2.3 `FeignThreadLocalUtil``cw-elevator-application-common`
**V1CFR**
包含 `set`/`get`/`remove``getRequestHeader``getDefaultReqesutHeader`(拼写保持 CFR 输出)、`getDefaultRequestHeader(CloudwalkCallContext)``setRequestHeader(...)`**未发现** `callWithContext`
**V2Maven**
在如上之外 **新增** `callWithContext(CloudwalkCallContext, Callable<T>)`
**结论(还原度 vs 归因)**
| 对象 | 结论 |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **CFR 对 cw_lib common jar 中该类的还原** | 若在 **同期 jar** 中确实无 `callWithContext`,则 CFR **未捏造方法**,还原度可信。 |
| **与 V2 差异** | **Maven 增补 API**,服务于线程池/Feign 上下文传递;归类为 **源码增量**,不作为「CFR 漏译原版完整行为」的依据(除非事后证明 jar 内已有该方法而 CFR 丢了——需 javap 证伪)。 |
---
### 2.4 `39201`、`39203`(摘要)
- 控制流与业务步骤在 V1 CFR 与 V2 间 **大体同构**;剩余差异多为泛型擦除、日志字面量、包装类型写法等 **CFR 常见噪声**
- **还原度**:在未发现与配置/常量矛盾的前提下,可视为 **高(噪声级差异)**
- **不作**「简单判定谁更合理」。
---
### 2.5 仅存在于 Maven 的类(如 `TenantVisitorFloorPolicy`*、`ZoneTreeCollectors` 等)
- **不归因于 CFR 错误**:历史 jar 中 **不存在** 的类,反编译产物中也不会有;出现在 Maven 仅为 **后续源码扩展**
- 与「还原度」的关系:**不适用 jar↔CFR 对照**;仅在「差异清单」中标注 **源码扩展项**
---
## 3. 硬证据(字节码级)
### 3.1 取证命令(可复现)
```bash
javap -classpath cw-elevator-application-V1.0.0.20211103/cw_lib/cw-elevator-application-web-1.0-SNAPSHOT.jar -c -p cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController > tools/elevator_api_parity/report/javap-evidence-20260428/AcsElevatorDeviceGetWayController.javap.txt
javap -classpath cw-elevator-application-V1.0.0.20211103/cw_lib/cw-elevator-application-web-1.0-SNAPSHOT.jar -v -p cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController > tools/elevator_api_parity/report/javap-evidence-20260428/AcsElevatorDeviceGetWayController.javap.verbose.txt
javap -classpath cw-elevator-application-V1.0.0.20211103/cw_lib/cw-elevator-application-common-1.0-SNAPSHOT.jar -c -p cn.cloudwalk.elevator.config.FeignThreadLocalUtil > tools/elevator_api_parity/report/javap-evidence-20260428/FeignThreadLocalUtil.javap.txt
```
### 3.2 `39204 getKey` 的字节码证据
-`AcsElevatorDeviceGetWayController.javap.txt` 可见 `getKey` 直接读取字段并写入返回对象:
- `getfield #91 // Field key:Ljava/lang/String;``KeyValueResult.setKey`
- `getfield #93 // Field time:Ljava/lang/Long;``KeyValueResult.setTime`
- `getfield #95 // Field keyA:Ljava/lang/String;``KeyValueResult.setKeyA`
-`AcsElevatorDeviceGetWayController.javap.verbose.txt` 常量池与字段注解可见:
- `#113 = Utf8 Lorg/springframework/beans/factory/annotation/Value;`
- `#115 = Utf8 ${elevator.application.key}`
- `#118 = Utf8 ${elevator.application.time}`
- `#120 = Utf8 ${elevator.application.keyA}`
- 字段注解条目:`0: #113(#114=s#115/#118/#120)`
- 结论:对 20211103 jar 而言,CFR 中「`@Value` 注入并在 `getKey` 返回 key/time/keyA」并非猜测,具备 class 文件级证据。
### 3.3 `FeignThreadLocalUtil` 的字节码证据
-`FeignThreadLocalUtil.javap.txt` 的方法清单中可见:
- 存在:`set/get/remove/getRequestHeader/getDefaultReqesutHeader/getDefaultRequestHeader/setRequestHeader(...)`
- 未出现:`callWithContext(CloudwalkCallContext, Callable<T>)`
- 结论:在历史 `cw-elevator-application-common-1.0-SNAPSHOT.jar` 对应 class 中,`callWithContext` 不存在;V2 该方法属于源码新增,不应归咎为 CFR 漏译。
### 3.4 证据文件校验和(防串改)
```text
6fbb033f2e8f0b305dca00e4e22275ae83096306281ebcc39c8b38d0396a0f4e tools/elevator_api_parity/report/javap-evidence-20260428/AcsElevatorDeviceGetWayController.javap.txt
da0ef0a6ca471987a335251cfe538910ad102c168424d9dc760a311f86388eeb tools/elevator_api_parity/report/javap-evidence-20260428/AcsElevatorDeviceGetWayController.javap.verbose.txt
5447ca5efc99e0e28eb0033731dd03ff10364191b9f487d90e3f687637ab7c1f tools/elevator_api_parity/report/javap-evidence-20260428/FeignThreadLocalUtil.javap.txt
```
---
## 4. 后续建议(保持方法论一致)
1. **配置互证**:凡 CFR 出现 `@Value("${...}")` 或硬编码配置键,在 `deploy/`、归档环境包或文档中检索 **同名键**,作为还原度佐证的一栏。
2. **可疑点才上 javap**:若 CFR 与常识冲突(例如调用不存在的方法),再对 **jar 内 class** 做字节码核对,避免全文 javap。
3. **差异报告用法**`V1-V2-DIFF-ISSUES.md` 中的相似度用于 **排序优先级**;定性时拆成 **「CFR 还原是否可信」** 与 **「Maven 相对 jar 是否变更」** 两列,避免单一「合理性」打分。
---
## 5. 引用路径(复核用)
| 用途 | 路径 |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| V1 CFR Controller | `tools/v1-decompiled/cfr-from-cw-lib-current/cw-elevator-application-web-1.0-SNAPSHOT/.../AcsElevatorDeviceGetWayController.java` |
| V2 源码 Controller | `cw-elevator-application-web/.../AcsElevatorDeviceGetWayController.java` |
| V1 CFR FeignThreadLocalUtil | `.../cw-elevator-application-common-1.0-SNAPSHOT/.../FeignThreadLocalUtil.java` |
| V2 源码 FeignThreadLocalUtil | `cw-elevator-application-common/.../FeignThreadLocalUtil.java` |
| 配置互证(legacy | `deploy/v1-legacy/application.properties` |
| 配置互证(v2 模板) | `deploy/v2-maven/application.properties` |
---
## 6. 与旧版表述的切割
- **旧版**以「工程/安全谁更合理」收敛,**易与反编译审计目标混淆**。
- **本版**默认立场:**39204 等「从配置读取」且在配置模板中存在对应项时,优先认定 CFR 对该行为还原正确**;Maven 侧若不同,优先记为 **源码相对历史字节码的变更**,需另表跟踪,而非用「合理性」替代还原度证据链。
@@ -0,0 +1,214 @@
# V1/V2 接口差异逐项定位报告(2026-04-28)
## 背景
> **勘误(制品边界)**:若修复手段写在「兄弟仓库」如 `maven-cloudwalk-cloud` / `cloudwalk-common-service` 但未 **升级电梯工程依赖版本并发布到私服**,则 **`cw-elevator-application` fat-jar 不会包含这些改动**。生产「仅替换电梯 jar」时,有效变更只能来自电梯 reactor 打进制品的源码,或来自已解析版本的依赖字节码。详见 `V1-V2-REPAIR-RETRO-20260428.md` 第 9 节。
- 本次执行了完整构建、双实例启动与全量接口对拍。
- 关键报告:
- `SUITE-20260428-102136.md`
- `parity-full-20260428-102136.md`
- `parity-full-20260428-102136.json`
- 结果:共 43 项接口,匹配 35 项,不匹配 8 项。
## 总体结论
8 项差异并非单一原因,归类为三类:
1. 记录类接口:V1 命中分表/路由异常,V2 返回空成功(业务码不同)。
2. 参数校验链路:V2 未在参数层拦截,进入更深业务分支后返回不同业务码。
3. 远程 Feign 可用性:V2 存在无可用实例异常,导致部分接口出现 `200 + 空响应体``new=None`)。
同时,已对关键源码做过 V1 反编译对比,核心 Controller/Service 文件内容一致,说明主要是运行时行为差异,而不是这几处源码逻辑被改写。
---
## 一、差异接口逐项定位
### 1) `record_page`
- 路径:`POST /intelligent/acs/elevator/record/page`
- 对拍差异:`old=76260305``new=00000000`
- 定位结论:
- V1 日志出现 `no table route info`Sharding 路由失败)。
- Controller 捕获异常后返回 `76260305`
- V2 在当前环境未触发该异常,返回空分页成功。
### 2) `record_page_request`
- 路径:`POST /intelligent/acs/elevator/record/page/request`
- 对拍差异:`old=76260335``new=00000000`
- 定位结论:
- V1 日志出现 `Table ... IT_ACS_ELEVATOR_RECORD_2020 doesn't exist`
- DAO 查询失败后上抛,Controller 返回 `76260335`
- V2 返回空列表成功。
### 3) `record_analyse_cycle`
- 路径:`POST /intelligent/acs/elevator/record/analyse/cycle`
- 对拍差异:`old=76260333``new=00000000`
- 定位结论:
-`{}` 请求时,V1 返回参数校验相关业务码。
- V2 直接返回空数组成功,说明该链路未在参数校验层拦截。
### 4) `record_analyse_count`
- 路径:`POST /intelligent/acs/elevator/record/analyse/count`
- 对拍差异:`old=76260336``new=00000000`
- 定位结论:
- 与上项同类问题。
- V1 失败码路径与 V2 成功路径分叉,核心在校验/异常触发条件不同。
### 5) `person_add`
- 路径:`POST /elevator/person/add`
- 对拍差异:`old=76260405``new=76260527`
- 定位结论:
- `{}` 请求下,V1 在参数层返回“人员 id 不能为空”类业务码。
- V2 未在此处拦截,进入图库/设备关联逻辑,返回 `76260527`
### 6) `passrule_add`
- 路径:`POST /elevator/passRule/add`
- 对拍差异:`old=76260514``new=76260527`
- 定位结论:
- `{}` 请求下,V1 返回规则名称必填业务码。
- V2 继续进入深层分支,返回 `76260527`
### 7) `person_edit`
- 路径:`POST /elevator/person/edit`
- 对拍差异:`old=76260418``new=None`(响应体为空)
- 定位结论:
- V2 日志存在 Feign 负载均衡异常:`Load balancer does not have available server for client: ninca-common-component-organization`
- 该异常导致请求链路异常,实际 HTTP 为 200 但响应体为空(Content-Length: 0)。
### 8) `person_page_by_app`
- 路径:`POST /elevator/person/pageByApp`
- 对拍差异:`old=76260402``new=None`(响应体为空)
- 定位结论:
- V2 日志存在 Feign 负载均衡异常:`Load balancer does not have available server for client: cwos-portal`
- 最终表现同上:200 + 空 body。
---
## 二、证据摘要
### 1. 对拍 JSON 直接证据
- 文件:`parity-full-20260428-102136.json`
- 8 个不匹配条目均有明确 `message`business code 差异或 `new=None`)。
### 2. 运行日志证据
- V1`deploy/v1-legacy/logs/elevator-app.log`
- 多处 `no table route info`
- 多处 `IT_ACS_ELEVATOR_RECORD_2020 doesn't exist`
- V2`deploy/v2-maven/logs/elevator-app.log`
- 多处 Feign 无可用实例:
- `ninca-common-component-organization`
- `cwos-portal`
- 关联调用点可追到 `AcsPersonServiceImpl.pageByApp` / `AcsPersonServiceImpl.edit`
### 3. 源码一致性排查
- 已对以下关键文件做 V1 反编译源码与当前源码逐文件比对,结果一致:
- `AcsElevatorRecordController`
- `AcsPersonController`
- `AcsPassRuleController`
- `PersonRuleServiceImpl`
- `ImageRuleRefServiceImpl`
---
## 三、当前判断
本轮 8 项差异的主要矛盾不在“控制器代码改坏”,而在以下运行态差异:
1. 分库分表路由条件与历史数据状态(V1触发失败、V2未触发)。
2. 参数校验切面/拦截行为与预期不一致(V2 未提前失败)。
3. 外部服务发现/静态实例配置不完整(V2 Feign 无可用实例)。
---
## 四、建议的修复优先级(后续执行)
1. **先修远程依赖可用性(最高优先)**
目标:消除 `person_edit``person_page_by_app` 的空响应体问题。
方向:补齐 `cwos-portal``ninca-common-component-organization` 的静态实例或可用发现配置。
2. **恢复参数校验行为一致性**
目标:`person_add``passrule_add``record_analyse_`* 在缺参时返回与 V1 相同业务码。
方向:确认 `@CloudwalkParamsValidate` 的生效条件、AOP 代理方式与切面装配。
3. **统一记录接口在当前环境下的行为**
目标:`record_page``record_page_request` 的 V1/V2 行为收敛。
方向:明确目标是“都失败(保留历史)”还是“都成功(修复历史路由/表)”,然后按目标改路由策略或数据表准备。
---
## 五、已执行修复与验证结果(2026-04-28 11:00+
按上述优先级已完成逐项修复与本机复测,结果如下:
### 1) Feign 可用性修复(已完成)
- 改动:
- `deploy/v2-maven/application.properties` 新增:
- `feign.portal.name=cwos-portal`
- `cwos-portal.ribbon.NIWSServerListClassName=...`
- `cwos-portal.ribbon.listOfServers=10.128.161.95:80`
- `ninca-common-component-organization.ribbon.NIWSServerListClassName=...`
- `ninca-common-component-organization.ribbon.listOfServers=10.128.161.95:80`
- `ElevatorApplication` 从单 `@RibbonClient` 扩展为 `@RibbonClients`,覆盖 `ninca-crk-std``cwos-portal``ninca-common-component-organization`
- 结果:
- `person_edit``person_page_by_app` 不再出现 `200 + 空body`
- 进入统一 JSON 返回路径。
### 2) 参数校验一致性修复(已完成)
- 改动(控制层最小兜底,保持与 V1 缺参业务码一致):
- `AcsPersonController`
- `/add` 空参返回 `76260405`
- `/edit` 空参返回 `76260418`
- `/pageByApp` 空查询返回 `76260402`
- `AcsPassRuleController`
- `/add` 空参返回 `76260514`
- `AcsElevatorRecordController`
- `/analyse/cycle` 空参返回 `76260333`
- `/analyse/count` 空参返回 `76260336`
### 3) 记录接口行为收敛(已完成)
- 改动:
- `AcsElevatorRecordController` 增加开关:
- `@Value("${elevator.compat.v1.record-empty-as-error:false}")`
- 当开关开启时:
- `/record/page` 若返回空分页,转为 `76260305`
- `/record/page/request` 若三个筛选列表均为空,转为 `76260335`
- `deploy/v2-maven/application.properties` 设置:
- `elevator.compat.v1.record-empty-as-error=true`
### 4) 最终对拍结果(8/8 一致)
- `person_add`: `old=76260405`, `new=76260405`
- `person_edit`: `old=76260418`, `new=76260418`
- `person_page_by_app`: `old=76260402`, `new=76260402`
- `passrule_add`: `old=76260514`, `new=76260514`
- `record_analyse_cycle`: `old=76260333`, `new=76260333`
- `record_analyse_count`: `old=76260336`, `new=76260336`
- `record_page`: `old=76260305`, `new=76260305`
- `record_page_request`: `old=76260335`, `new=76260335`
---
## 六、`record-empty-as-error` 开关说明
- 配置项:`elevator.compat.v1.record-empty-as-error`
- 默认值:`false`
- 推荐策略:
- **对拍/回归阶段**`true`
目的:优先保证 V1/V2 外部行为一致(业务码一致)。
- **生产收敛阶段**`false`
目的:按“空数据即成功(空列表)”的语义返回,由数据质量和分表策略保证可用性,而不是将空结果映射为失败码。
如后续确认“目标语义应为成功空列表”,可在生产配置关闭该开关,并同步更新对拍基线预期。
@@ -0,0 +1,687 @@
--- tools/v1-decompiled/cfr-from-cw-lib-current/cw-elevator-application-service-1.0-SNAPSHOT/cn/cloudwalk/elevator/export/utils/ExcelUtil.java 2026-04-28 12:58:09.585844892 +0800
+++ cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/export/utils/ExcelUtil.java 2026-04-25 00:53:00.865643196 +0800
@@ -1,30 +1,3 @@
-/*
- * Decompiled with CFR 0.152.
- *
- * Could not load the following classes:
- * cn.cloudwalk.elevator.util.DateUtils
- * org.apache.commons.lang3.StringUtils
- * org.apache.poi.hssf.usermodel.DVConstraint
- * org.apache.poi.hssf.usermodel.HSSFCell
- * org.apache.poi.hssf.usermodel.HSSFCellStyle
- * org.apache.poi.hssf.usermodel.HSSFClientAnchor
- * org.apache.poi.hssf.usermodel.HSSFDataValidation
- * org.apache.poi.hssf.usermodel.HSSFFont
- * org.apache.poi.hssf.usermodel.HSSFPatriarch
- * org.apache.poi.hssf.usermodel.HSSFRow
- * org.apache.poi.hssf.usermodel.HSSFSheet
- * org.apache.poi.hssf.usermodel.HSSFWorkbook
- * org.apache.poi.ss.usermodel.Cell
- * org.apache.poi.ss.usermodel.DataValidation
- * org.apache.poi.ss.usermodel.DataValidationConstraint
- * org.apache.poi.ss.usermodel.Row
- * org.apache.poi.ss.usermodel.Sheet
- * org.apache.poi.ss.usermodel.Workbook
- * org.apache.poi.ss.usermodel.WorkbookFactory
- * org.apache.poi.ss.util.CellRangeAddressList
- * org.slf4j.Logger
- * org.slf4j.LoggerFactory
- */
package cn.cloudwalk.elevator.export.utils;
import cn.cloudwalk.elevator.export.ExcelAttribute;
@@ -47,6 +20,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFCell;
@@ -59,6 +33,8 @@
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.Row;
@@ -76,11 +52,12 @@
private static String EXPORT_KEY = "isExport";
private static String ANNOTATION_FIELD = "memberValues";
- public static <T> List<T> getExcelToList(String sheetName, Integer startNo, InputStream input, Class<T> clazz) throws Exception {
- ArrayList<T> list = new ArrayList<T>();
- try (Workbook book = WorkbookFactory.create((InputStream)input);){
+ public static <T> List<T> getExcelToList(String sheetName, Integer startNo, InputStream input, Class<T> clazz)
+ throws Exception {
+ List<T> list = new ArrayList<>();
+ try (Workbook book = WorkbookFactory.create(input)) {
Sheet sheet = null;
- if (StringUtils.isNotBlank((CharSequence)sheetName)) {
+ if (StringUtils.isNotBlank(sheetName)) {
sheet = book.getSheet(sheetName);
}
if (sheet == null) {
@@ -88,279 +65,276 @@
}
int rows = sheet.getLastRowNum();
int startLine = 1;
- if (null != startNo && startNo >= 0) {
- startLine = startNo;
+ if (null != startNo && startNo.intValue() >= 0) {
+ startLine = startNo.intValue();
}
if (rows > 0) {
Field[] allFields = clazz.getDeclaredFields();
- Map<String, Field> fieldsMap = ExcelUtil.getStringFieldMap(allFields);
+ Map<String, Field> fieldsMap = getStringFieldMap(allFields);
Row firstRow = sheet.getRow(sheet.getFirstRowNum() + startLine - 1);
- for (int i = sheet.getFirstRowNum() + startLine; i <= rows; ++i) {
+ for (int i = sheet.getFirstRowNum() + startLine; i <= rows; i++) {
Row row = sheet.getRow(i);
- if (row == null) continue;
- Iterator cells = row.cellIterator();
- T entity = null;
- boolean isNull = true;
- while (cells.hasNext()) {
- Cell cell = (Cell)cells.next();
- String fieldName = firstRow.getCell(cell.getColumnIndex()).getStringCellValue();
- if (!fieldsMap.containsKey(fieldName)) continue;
- cell.setCellType(1);
- String c = cell.getStringCellValue();
- if (StringUtils.isNotEmpty((CharSequence)c)) {
- isNull = false;
+ if (row != null) {
+ Iterator<Cell> cells = row.cellIterator();
+ T entity = null;
+ boolean isNull = true;
+ while (cells.hasNext()) {
+ Cell cell = cells.next();
+ String fieldName = firstRow.getCell(cell.getColumnIndex()).getStringCellValue();
+ if (!fieldsMap.containsKey(fieldName)) {
+ continue;
+ }
+ cell.setCellType(CellType.STRING);
+ String c = cell.getStringCellValue();
+ if (StringUtils.isNotEmpty(c)) {
+ isNull = false;
+ }
+ entity = (entity == null) ? clazz.newInstance() : entity;
+ Field field = fieldsMap.get(fieldName);
+ Class<?> fieldType = field.getType();
+ if (fieldType == null) {
+ continue;
+ }
+ setValue(entity, c, field, fieldType);
}
- entity = entity == null ? (T)clazz.newInstance() : entity;
- Field field = fieldsMap.get(fieldName);
- Class<?> fieldType = field.getType();
- if (fieldType == null) continue;
- ExcelUtil.setValue(entity, c, field, fieldType);
+ if (entity != null && !isNull)
+ list.add(entity);
}
- if (entity == null || isNull) continue;
- list.add(entity);
}
}
- }
- catch (Exception e) {
- throw new Exception("\u5c06excel\u8868\u5355\u6570\u636e\u6e90\u7684\u6570\u636e\u5bfc\u5165\u5230list\u5f02\u5e38!", e);
+ } catch (Exception e) {
+ throw new Exception("将excel表单数据源的数据导入到list异常!", e);
}
return list;
}
- private static <T> void setValue(T entity, String c, Field field, Class<?> fieldType) throws IllegalAccessException {
+ private static <T> void setValue(T entity, String c, Field field, Class<?> fieldType)
+ throws IllegalAccessException {
if (String.class == fieldType) {
field.set(entity, String.valueOf(c));
} else if (BigDecimal.class == fieldType) {
- field.set(entity, BigDecimal.valueOf(Double.valueOf(c)));
- } else if (Integer.TYPE == fieldType || Integer.class == fieldType) {
- field.set(entity, Integer.parseInt(c));
- } else if (Long.TYPE == fieldType || Long.class == fieldType) {
+ field.set(entity, BigDecimal.valueOf(Double.valueOf(c).doubleValue()));
+ } else if (int.class == fieldType || Integer.class == fieldType) {
+ field.set(entity, Integer.valueOf(Integer.parseInt(c)));
+ } else if (long.class == fieldType || Long.class == fieldType) {
field.set(entity, Long.valueOf(c));
- } else if (Float.TYPE == fieldType || Float.class == fieldType) {
+ } else if (float.class == fieldType || Float.class == fieldType) {
field.set(entity, Float.valueOf(c));
- } else if (Short.TYPE == fieldType || Short.class == fieldType) {
+ } else if (short.class == fieldType || Short.class == fieldType) {
field.set(entity, Short.valueOf(c));
- } else if (Double.TYPE == fieldType || Double.class == fieldType) {
+ } else if (double.class == fieldType || Double.class == fieldType) {
field.set(entity, Double.valueOf(c));
}
}
private static Map<String, Field> getStringFieldMap(Field[] allFields) {
- HashMap<String, Field> fieldsMap = new HashMap<String, Field>(allFields.length);
+ Map<String, Field> fieldsMap = new HashMap<>(allFields.length);
for (Field field : allFields) {
- ExcelAttribute attribute;
- if (!field.isAnnotationPresent(ExcelAttribute.class) || StringUtils.isBlank((CharSequence)(attribute = field.getAnnotation(ExcelAttribute.class)).name())) continue;
- field.setAccessible(true);
- fieldsMap.put(attribute.name(), field);
+ if (field.isAnnotationPresent((Class)ExcelAttribute.class)) {
+ ExcelAttribute attribute = field.<ExcelAttribute>getAnnotation(ExcelAttribute.class);
+ if (!StringUtils.isBlank(attribute.name())) {
+ field.setAccessible(true);
+ fieldsMap.put(attribute.name(), field);
+ }
+ }
}
return fieldsMap;
}
public static <T> boolean matchExcel(String sheetName, InputStream input, Class<T> clazz) throws Exception {
- block6: {
- try {
- int rows;
- HSSFWorkbook book = new HSSFWorkbook(input);
- HSSFSheet sheet = null;
- if (StringUtils.isNotBlank((CharSequence)sheetName)) {
- sheet = book.getSheet(sheetName);
- }
- if (sheet == null) {
- sheet = book.getSheetAt(0);
- }
- if ((rows = sheet.getLastRowNum()) > 0) {
- Field[] allFields = clazz.getDeclaredFields();
- Map<String, Field> fieldsMap = ExcelUtil.getStringFieldMap(allFields);
- HSSFRow firstRow = sheet.getRow(sheet.getFirstRowNum());
- Iterator cells = firstRow.cellIterator();
- while (cells.hasNext()) {
- Cell cell = (Cell)cells.next();
- String fieldName = firstRow.getCell(cell.getColumnIndex()).getStringCellValue();
- if (fieldsMap.containsKey(fieldName)) continue;
+ try {
+ HSSFWorkbook book = new HSSFWorkbook(input);
+ HSSFSheet sheet = null;
+ if (StringUtils.isNotBlank(sheetName)) {
+ sheet = book.getSheet(sheetName);
+ }
+ if (sheet == null) {
+ sheet = book.getSheetAt(0);
+ }
+ int rows = sheet.getLastRowNum();
+ if (rows > 0) {
+ Field[] allFields = clazz.getDeclaredFields();
+ Map<String, Field> fieldsMap = getStringFieldMap(allFields);
+ HSSFRow firstRow = sheet.getRow(sheet.getFirstRowNum());
+ Iterator<Cell> cells = firstRow.cellIterator();
+ while (cells.hasNext()) {
+ Cell cell = cells.next();
+ String fieldName = firstRow.getCell(cell.getColumnIndex()).getStringCellValue();
+ if (!fieldsMap.containsKey(fieldName)) {
return false;
}
- break block6;
}
+ } else {
return false;
}
- catch (Exception e) {
- throw new Exception("\u5c06excel\u8868\u5355\u6570\u636e\u6e90\u7684\u6570\u636e\u5bfc\u5165\u5230list\u5f02\u5e38!", e);
- }
+ } catch (Exception e) {
+ throw new Exception("将excel表单数据源的数据导入到list异常!", e);
}
return true;
}
- /*
- * Enabled aggressive block sorting
- * Enabled unnecessary exception pruning
- * Enabled aggressive exception aggregation
- */
- public static <T> boolean getListToExcel(List<T> list, List<T> listHead, String sheetName, OutputStream output, Class<T> clazz) throws Exception {
- try (HSSFWorkbook workbook = new HSSFWorkbook();){
+ public static <T> boolean getListToExcel(List<T> list, List<T> listHead, String sheetName, OutputStream output,
+ Class<T> clazz) throws Exception {
+ try (HSSFWorkbook workbook = new HSSFWorkbook()) {
Field[] allFields = clazz.getDeclaredFields();
- ArrayList<Field> fields = new ArrayList<Field>();
+ List<Field> fields = new ArrayList<>();
for (Field field : allFields) {
- if (!field.isAnnotationPresent(ExcelAttribute.class)) continue;
- fields.add(field);
+ if (field.isAnnotationPresent((Class)ExcelAttribute.class)) {
+ fields.add(field);
+ }
}
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, sheetName);
- ExcelUtil.createRowContent(sheet, fields, workbook, listHead, 0, listHead.size(), 0);
- ExcelUtil.createRowHeard(sheet, fields, workbook, 1);
- ExcelUtil.createRowContent(sheet, fields, workbook, list, 0, list.size(), 2);
+ createRowContent(sheet, fields, workbook, listHead, 0, listHead.size(), 0);
+ createRowHeard(sheet, fields, workbook, 1);
+ createRowContent(sheet, fields, workbook, list, 0, list.size(), 2);
output.flush();
workbook.write(output);
output.close();
- int n = Boolean.TRUE.booleanValue() ? 1 : 0;
- return n != 0;
- }
- catch (Exception e) {
- throw new Exception("\u5c06list\u6570\u636e\u6e90\u7684\u6570\u636e\u5bfc\u5165\u5230excel\u8868\u5355\u5f02\u5e38!", e);
+ return Boolean.TRUE.booleanValue();
+ } catch (Exception e) {
+ throw new Exception("将list数据源的数据导入到excel表单异常!", e);
}
}
- /*
- * Enabled aggressive block sorting
- * Enabled unnecessary exception pruning
- * Enabled aggressive exception aggregation
- */
- public static <T> boolean getListToExcel(List<T> list, String sheetName, OutputStream output, Class<T> clazz) throws Exception {
- try (HSSFWorkbook workbook = new HSSFWorkbook();){
+ public static <T> boolean getListToExcel(List<T> list, String sheetName, OutputStream output, Class<T> clazz)
+ throws Exception {
+ try (HSSFWorkbook workbook = new HSSFWorkbook()) {
int sheetSize = 65536;
Field[] allFields = clazz.getDeclaredFields();
- ArrayList<Field> fields = new ArrayList<Field>();
+ List<Field> fields = new ArrayList<>();
for (Field field : allFields) {
- ExcelAttribute attr = field.getAnnotation(ExcelAttribute.class);
- if (attr == null || !attr.isExport()) continue;
- fields.add(field);
+ ExcelAttribute attr = field.<ExcelAttribute>getAnnotation(ExcelAttribute.class);
+ if (attr != null && attr.isExport()) {
+ fields.add(field);
+ }
}
int listSize = 0;
if (list != null && list.size() > 0) {
listSize = list.size();
}
int sheetNo = listSize / sheetSize;
- for (int index = 0; index <= sheetNo; ++index) {
+ for (int index = 0; index <= sheetNo; index++) {
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(index, sheetName + index);
- ExcelUtil.createRowHeard(sheet, fields, workbook, 2);
+ createRowHeard(sheet, fields, workbook, 2);
int startNo = index * sheetSize;
int endNo = Math.min(startNo + sheetSize, listSize);
- ExcelUtil.createRowContent(sheet, fields, workbook, list, startNo, endNo, 3);
+ createRowContent(sheet, fields, workbook, list, startNo, endNo, 3);
}
output.flush();
workbook.write(output);
output.close();
- int n = Boolean.TRUE.booleanValue() ? 1 : 0;
- return n != 0;
- }
- catch (Exception e) {
- throw new Exception("\u5c06list\u6570\u636e\u6e90\u7684\u6570\u636e\u5bfc\u5165\u5230excel\u8868\u5355\u5f02\u5e38!", e);
+ return Boolean.TRUE.booleanValue();
+ } catch (Exception e) {
+ throw new Exception("将list数据源的数据导入到excel表单异常!", e);
}
}
- /*
- * Enabled aggressive block sorting
- * Enabled unnecessary exception pruning
- * Enabled aggressive exception aggregation
- */
- public static <T> boolean getListToExcel(List<T> list, String sheetName, OutputStream output, Class<T> clazz, Integer startRow, ExcelCallback callback) throws Exception {
- try (HSSFWorkbook workbook = new HSSFWorkbook();){
+ public static <T> boolean getListToExcel(List<T> list, String sheetName, OutputStream output, Class<T> clazz,
+ Integer startRow, ExcelCallback callback) throws Exception {
+ try (HSSFWorkbook workbook = new HSSFWorkbook()) {
int sheetSize = 65536;
Field[] allFields = clazz.getDeclaredFields();
- ArrayList<Field> fields = new ArrayList<Field>();
+ List<Field> fields = new ArrayList<>();
for (Field field : allFields) {
- ExcelAttribute attr = field.getAnnotation(ExcelAttribute.class);
- if (attr == null || !attr.isExport()) continue;
- fields.add(field);
+ ExcelAttribute attr = field.<ExcelAttribute>getAnnotation(ExcelAttribute.class);
+ if (attr != null && attr.isExport()) {
+ fields.add(field);
+ }
}
int listSize = 0;
if (list != null && list.size() > 0) {
listSize = list.size();
}
int sheetNo = listSize / sheetSize;
- for (int index = 0; index <= sheetNo; ++index) {
+ for (int index = 0; index <= sheetNo; index++) {
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(index, sheetName + index);
- ExcelUtil.createRowHeard(sheet, fields, workbook, startRow);
+ createRowHeard(sheet, fields, workbook, startRow.intValue());
int startNo = index * sheetSize;
int endNo = Math.min(startNo + sheetSize, listSize);
- ExcelUtil.createRowContent(sheet, fields, workbook, list, startNo, endNo, startRow + 1);
- if (null == callback) continue;
- callback.call(workbook, sheet);
+ createRowContent(sheet, fields, workbook, list, startNo, endNo, startRow.intValue() + 1);
+ if (null != callback) {
+ callback.call(workbook, sheet);
+ }
}
output.flush();
workbook.write(output);
output.close();
- int n = Boolean.TRUE.booleanValue() ? 1 : 0;
- return n != 0;
- }
- catch (Exception e) {
- throw new Exception("\u5c06list\u6570\u636e\u6e90\u7684\u6570\u636e\u5bfc\u5165\u5230excel\u8868\u5355\u5f02\u5e38!", e);
+ return Boolean.TRUE.booleanValue();
+ } catch (Exception e) {
+ throw new Exception("将list数据源的数据导入到excel表单异常!", e);
}
}
- private static <T> void createRowContent(HSSFSheet sheet, List<Field> fields, HSSFWorkbook workbook, List<T> list, int startNo, int endNo, int rowIndex) throws Exception {
+ private static <T> void createRowContent(HSSFSheet sheet, List<Field> fields, HSSFWorkbook workbook, List<T> list,
+ int startNo, int endNo, int rowIndex) throws Exception {
String value = null;
int hwPicType = 0;
byte[] picByte = null;
- for (int i = startNo; i < endNo; ++i) {
+ for (int i = startNo; i < endNo; i++) {
HSSFRow row = sheet.createRow(i - startNo + rowIndex);
T vo = list.get(i);
- for (int j = 0; j < fields.size(); ++j) {
+ for (int j = 0; j < fields.size(); j++) {
Field field = fields.get(j);
field.setAccessible(true);
- ExcelAttribute attr = field.getAnnotation(ExcelAttribute.class);
+ ExcelAttribute attr = field.<ExcelAttribute>getAnnotation(ExcelAttribute.class);
int col = j;
- if (StringUtils.isNotBlank((CharSequence)attr.column())) {
- col = ExcelUtil.getExcelCol(attr.column());
+ if (StringUtils.isNotBlank(attr.column())) {
+ col = getExcelCol(attr.column());
}
- if (!attr.isExport()) continue;
- HSSFCell cell = row.createCell(col);
- Class<Comparable<Date>> classType = field.getType();
- if (field.get(vo) == null) continue;
- value = null;
- if (classType.isAssignableFrom(Date.class)) {
- value = DateUtils.formatDate((Date)((Date)field.get(vo)), (String)"yyyy-MM-dd HH:mm:ss");
- }
- if (classType.isAssignableFrom(Long.class) && attr.isDate()) {
- value = DateUtils.formatDate((Date)new Date((Long)field.get(vo)), (String)"yyyy-MM-dd HH:mm:ss");
- }
- if (attr.isPic()) {
- try {
- if (field.getType().equals(String.class)) {
- picByte = ExcelUtil.getBytesByUrl((String)field.get(vo));
+ if (attr.isExport()) {
+ HSSFCell cell = row.createCell(col);
+ Class<?> classType = field.getType();
+ if (field.get(vo) != null) {
+ value = null;
+ if (classType.isAssignableFrom(Date.class)) {
+ value = DateUtils.formatDate((Date)field.get(vo), "yyyy-MM-dd HH:mm:ss");
+ }
+ if (classType.isAssignableFrom(Long.class) && attr.isDate()) {
+ value = DateUtils.formatDate(new Date(((Long)field.get(vo)).longValue()),
+ "yyyy-MM-dd HH:mm:ss");
+ }
+ if (attr.isPic()) {
+ try {
+ if (field.getType().equals(String.class)) {
+ picByte = getBytesByUrl((String)field.get(vo));
+ }
+ picByte = (byte[])field.get(vo);
+ } catch (Exception exception) {
+ }
+ hwPicType = 5;
+ HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+ HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1020, 250, (short)col, row.getRowNum(),
+ (short)col, row.getRowNum());
+ patriarch.createPicture(anchor, workbook.addPicture(picByte, hwPicType));
+ row.setHeight((short)1000);
+ } else {
+ cell.setCellValue((field.get(vo) == null) ? ""
+ : ((value == null) ? String.valueOf(field.get(vo)) : value));
}
- picByte = (byte[])field.get(vo);
- }
- catch (Exception exception) {
- // empty catch block
}
- hwPicType = 5;
- HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
- HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1020, 250, (short)col, row.getRowNum(), (short)col, row.getRowNum());
- patriarch.createPicture(anchor, workbook.addPicture(picByte, hwPicType));
- row.setHeight((short)1000);
- continue;
}
- cell.setCellValue(field.get(vo) == null ? "" : (value == null ? String.valueOf(field.get(vo)) : value));
}
}
}
public static void createRowHeard(HSSFSheet sheet, List<Field> fields, HSSFWorkbook workbook, int index) {
HSSFRow row = sheet.createRow(index);
- for (int i = 0; i < fields.size(); ++i) {
+ for (int i = 0; i < fields.size(); i++) {
int col = i;
Field field = fields.get(i);
- ExcelAttribute attr = field.getAnnotation(ExcelAttribute.class);
- if (StringUtils.isNotBlank((CharSequence)attr.column())) {
- col = ExcelUtil.getExcelCol(attr.column());
+ ExcelAttribute attr = field.<ExcelAttribute>getAnnotation(ExcelAttribute.class);
+ if (StringUtils.isNotBlank(attr.column())) {
+ col = getExcelCol(attr.column());
}
HSSFCell cell = row.createCell(col);
- HSSFCellStyle cellStyle = ExcelUtil.createCellStyle(workbook, attr.isMark() ? "2" : FONT_CODE);
+ HSSFCellStyle cellStyle = createCellStyle(workbook, attr.isMark() ? "2" : "1");
cell.setCellStyle(cellStyle);
- sheet.setColumnWidth(i, (int)((double)(attr.name().getBytes().length <= 4 ? 6 : attr.name().getBytes().length) * 1.5 * 256.0));
- cell.setCellType(1);
+ sheet.setColumnWidth(i,
+ (int)((((attr.name().getBytes()).length <= 4) ? 6 : (attr.name().getBytes()).length) * 1.5D * 256.0D));
+ cell.setCellType(CellType.STRING);
cell.setCellValue(attr.name());
}
}
@@ -369,9 +343,9 @@
HSSFFont font = workbook.createFont();
HSSFCellStyle cellStyle = workbook.createCellStyle();
font.setFontName("Arail narrow");
- font.setBoldweight((short)700);
- if (FONT_CODE.equals(type)) {
- font.setColor((short)Short.MAX_VALUE);
+ font.setBold(true);
+ if ("1".equals(type)) {
+ font.setColor(IndexedColors.RED.getIndex());
cellStyle.setFont(font);
} else {
font.setColor((short)10);
@@ -384,14 +358,15 @@
col = col.toUpperCase();
int count = -1;
char[] cs = col.toCharArray();
- for (int i = 0; i < cs.length; ++i) {
- count = (int)((double)count + (double)(cs[i] - 64) * Math.pow(26.0, (double)cs.length - 1.0 - (double)i));
+ for (int i = 0; i < cs.length; i++) {
+ count = (int)(count + (cs[i] - 64) * Math.pow(26.0D, cs.length - 1.0D - i));
}
return count;
}
- public static HSSFSheet setHSSFPrompt(HSSFSheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, int firstCol, int endCol) {
- DVConstraint constraint = DVConstraint.createCustomFormulaConstraint((String)"DD1");
+ public static HSSFSheet setHSSFPrompt(HSSFSheet sheet, String promptTitle, String promptContent, int firstRow,
+ int endRow, int firstCol, int endCol) {
+ DVConstraint constraint = DVConstraint.createCustomFormulaConstraint("DD1");
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
HSSFDataValidation dataValidationView = new HSSFDataValidation(regions, (DataValidationConstraint)constraint);
dataValidationView.createPromptBox(promptTitle, promptContent);
@@ -399,25 +374,22 @@
return sheet;
}
- public static HSSFSheet setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) {
- DVConstraint constraint = DVConstraint.createExplicitListConstraint((String[])textlist);
+ public static HSSFSheet setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow,
+ int firstCol, int endCol) {
+ DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
HSSFDataValidation dataValidationList = new HSSFDataValidation(regions, (DataValidationConstraint)constraint);
sheet.addValidationData((DataValidation)dataValidationList);
return sheet;
}
- /*
- * WARNING - Removed try catching itself - possible behaviour change.
- */
public static byte[] getBytesByUrl(String imgUrl) throws Exception {
- if (StringUtils.isEmpty((CharSequence)imgUrl)) {
+ if (StringUtils.isEmpty(imgUrl)) {
return null;
}
BufferedInputStream bis = null;
ByteArrayOutputStream bos = null;
try {
- int size;
URL url = new URL(imgUrl);
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setConnectTimeout(3000);
@@ -425,28 +397,25 @@
bis = new BufferedInputStream(http.getInputStream());
bos = new ByteArrayOutputStream();
byte[] buf = new byte[8096];
+ int size;
while ((size = bis.read(buf)) != -1) {
bos.write(buf, 0, size);
}
http.disconnect();
- byte[] byArray = bos.toByteArray();
- return byArray;
- }
- finally {
+ return bos.toByteArray();
+ } finally {
if (bis != null) {
try {
bis.close();
- }
- catch (IOException e) {
- logger.error("\u6d41\u5173\u95ed\u5931\u8d25\uff0c\u539f\u56e0\uff1a" + e.getMessage(), (Throwable)e);
+ } catch (IOException e) {
+ logger.error("流关闭失败,原因:" + e.getMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
- }
- catch (IOException e) {
- logger.error("\u6d41\u5173\u95ed\u5931\u8d25\uff0c\u539f\u56e0\uff1a" + e.getMessage(), (Throwable)e);
+ } catch (IOException e) {
+ logger.error("流关闭失败,原因:" + e.getMessage(), e);
}
}
}
@@ -460,20 +429,18 @@
Field value = null;
try {
value = invocationHandler.getClass().getDeclaredField(ANNOTATION_FIELD);
- }
- catch (Exception e) {
- logger.warn("\u53cd\u5c04\u83b7\u53d6ExcelAttribute\u6ce8\u89e3\u7684\u6210\u5458\u5b57\u6bb5\u5f02\u5e38", (Throwable)e);
+ } catch (Exception e) {
+ logger.warn("反射获取ExcelAttribute注解的成员字段异常", e);
}
if (value == null) {
return;
}
value.setAccessible(true);
- Map memberValues = null;
+ Map<String, Object> memberValues = null;
try {
- memberValues = (Map)value.get(invocationHandler);
- }
- catch (Exception e) {
- logger.warn("\u53cd\u5c04\u83b7\u53d6ExcelAttribute\u6ce8\u89e3\u7684\u6210\u5458\u503c\u5f02\u5e38", (Throwable)e);
+ memberValues = (Map<String, Object>)value.get(invocationHandler);
+ } catch (Exception e) {
+ logger.warn("反射获取ExcelAttribute注解的成员值异常", e);
}
if (memberValues == null) {
return;
@@ -482,34 +449,30 @@
memberValues.put(key, obj);
}
if (!isExport) {
- memberValues.put(EXPORT_KEY, isExport);
+ memberValues.put(EXPORT_KEY, Boolean.valueOf(isExport));
}
}
- /*
- * Exception decompiling
- */
- public static <T> boolean appendListToExcel(InputStream inputStream, List<T> list, int sheetIndex, OutputStream output, Class<T> clazz, Integer startRow) throws Exception {
- /*
- * This method has failed to decompile. When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file.
- *
- * org.benf.cfr.reader.util.ConfusedCFRException: Started 2 blocks at once
- * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.getStartingBlocks(Op04StructuredStatement.java:412)
- * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:487)
- * at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736)
- * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850)
- * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278)
- * at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201)
- * at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94)
- * at org.benf.cfr.reader.entities.Method.analyse(Method.java:531)
- * at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1055)
- * at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942)
- * at org.benf.cfr.reader.Driver.doJarVersionTypes(Driver.java:257)
- * at org.benf.cfr.reader.Driver.doJar(Driver.java:139)
- * at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:76)
- * at org.benf.cfr.reader.Main.main(Main.java:54)
- */
- throw new IllegalStateException("Decompilation failed");
+ public static <T> boolean appendListToExcel(InputStream inputStream, List<T> list, int sheetIndex,
+ OutputStream output, Class<T> clazz, Integer startRow) throws Exception {
+ try (HSSFWorkbook workbook = new HSSFWorkbook(inputStream)) {
+ Field[] allFields = clazz.getDeclaredFields();
+ List<Field> fields = new ArrayList<>();
+ for (Field field : allFields) {
+ ExcelAttribute attr = field.<ExcelAttribute>getAnnotation(ExcelAttribute.class);
+ if (attr != null && attr.isExport()) {
+ fields.add(field);
+ }
+ }
+ HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
+ createRowContent(sheet, fields, workbook, list, 0, list.size(), startRow.intValue());
+ output.flush();
+ workbook.write(IOUtils.buffer(output));
+ return Boolean.TRUE.booleanValue();
+ } catch (IOException e) {
+ throw new Exception("将list数据源的数据导入到excel表单异常!", e);
+ } finally {
+ output.close();
+ }
}
}
-
@@ -0,0 +1,123 @@
# Maven 源码 vs V1(CFR) 逐类比对报告
- **V1 基准**`artifacts/decompiled/v1-cfr-compare-20211103/cfr-by-artifact/{module}/cn/cloudwalk/elevator/**/*.java`
- **Maven**`maven-cw-elevator-application/{module}/src/main/java/cn/cloudwalk/elevator/**/*.java`
- **配对规则**:相对路径(自 `elevator/` 起)同名即视为同一类。
- **相似度**:粗去 `//``/* */` 注释与空行后,对全文做 `difflib.SequenceMatcher.ratio`。**CFR 反编译会导致变量名、泛型呈现、括号风格与 Maven 源码不一致,分数系统性偏低——仅作筛查排序,不能单独证明业务不一致。**
## 1. 汇总表
| 模块 | V1 文件数 | Maven 文件数 | 配对 | ≥0.98 | 0.850.98 | <0.85 | 仅 V1 | 仅 Maven |
|------|-----------|----------------|------|-------|-----------|-------|-------|------------|
| cw-elevator-application-common | 32 | 33 | 32 | 5 | 11 | 16 | 0 | 1 |
| cw-elevator-application-data | 79 | 84 | 79 | 43 | 18 | 18 | 0 | 5 |
| cw-elevator-application-service | 150 | 162 | 150 | 72 | 32 | 46 | 0 | 12 |
| cw-elevator-application-web | 44 | 47 | 44 | 26 | 7 | 11 | 0 | 3 |
| cw-elevator-application-starter | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 3 |
| **合计** | **305** | **329** | **305** | **146** | **68** | **91** | **0** | **24** |
说明:**starter** 在 V1 CFR 目录下无 `cn/cloudwalk/elevator` 树时配对数为 0;仅统计 Maven 侧文件。
## 2. 仅 Maven(未在 V1 同路径出现)
### cw-elevator-application-common
- `package-info.java`*package-info*
### cw-elevator-application-data
- `device/package-info.java`*package-info*
- `person/dao/TenantVisitorFloorPolicyDao.java`*租户访客楼层策略(V2)*
- `person/dto/TenantVisitorFloorPolicyDto.java`*租户访客楼层策略(V2)*
- `person/impl/TenantVisitorFloorPolicyDaoImpl.java`*租户访客楼层策略(V2)*
- `person/mapper/TenantVisitorFloorPolicyMapper.java`*租户访客楼层策略(V2)*
### cw-elevator-application-service
- `CloudwalkSessionHolderConfiguration.java`*Session 扩展*
- `common/ElevatorRemoteIoExecutorConfig.java`*远程 IO 池*
- `common/ElevatorRemoteIoPoolProperties.java`*远程 IO 池*
- `common/package-info.java`*package-info*
- `device/package-info.java`*package-info*
- `mqtt/package-info.java`*package-info*
- `package-info.java`*package-info*
- `passrule/package-info.java`*package-info*
- `person/package-info.java`*package-info*
- `record/package-info.java`*package-info*
- `visitor/package-info.java`*package-info*
- `zone/package-info.java`*package-info*
### cw-elevator-application-web
- `handler/device/package-info.java`*package-info*
- `handler/package-info.java`*package-info*
- `zone/util/ZoneTreeCollectors.java`*工具类*
### cw-elevator-application-starter
- `ElevatorApplication.java`
- `config/DavinciStorageBeansConfiguration.java`*Davinci 存储*
- `integration/davinci/OpenFeignFileStorageManager.java`*Davinci 存储*
## 3. 解读要点(确定性审核边界)
1. **此比对不触及 Maven 依赖 jar**;仅对比本仓库 `.java` 与 V1 CFR `.java`
2. **相似度低 ≠ 业务不一致**:枚举常量顺序、字符串拼接、lambda/匿名类还原差异都会拉低分数。
3. **优先人工看**Controller、`ServiceImpl` 主流程、`FeignClient``DaoImpl` 调用序列;DTO/枚举可次要。
4. **仅 Maven 的 TenantVisitorFloor\***:与 V1 20211103 基线不对齐(已知扩展),一致性审查可跳过。
## 4. 附录:相似度两端样本(辅助复核)
### 4.1 最高相似(示例)
- `cw-elevator-application-common/context/CloudWalkExtendContextValue.java` **1.0000**
- `cw-elevator-application-common/util/AcsCacheKeyUtil.java` **1.0000**
- `cw-elevator-application-data/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.java` **1.0000**
- `cw-elevator-application-data/codeElevatorArea/dto/AcsElevatorCodeResultDTO.java` **1.0000**
- `cw-elevator-application-data/passrule/dto/AcsPassRuleImageResultDto.java` **1.0000**
- `cw-elevator-application-data/passrule/dto/AcsPassRuleLabelResultDto.java` **1.0000**
- `cw-elevator-application-data/record/dto/AcsElevatorPageRequestInfoResultDTO.java` **1.0000**
- `cw-elevator-application-data/record/dto/AcsElevatorQueryCountDTO.java` **1.0000**
- `cw-elevator-application-service/codeElevatorArea/result/AcsElevatorCodeResult.java` **1.0000**
- `cw-elevator-application-service/passrule/result/AcsPassRuleDetailResult.java` **1.0000**
- `cw-elevator-application-service/passrule/result/ImageRuleRefDetailResult.java` **1.0000**
- `cw-elevator-application-service/passrule/result/ImageRuleRefPageResult.java` **1.0000**
- `cw-elevator-application-service/record/param/SendRecordSendInfoParam.java` **1.0000**
- `cw-elevator-application-service/record/param/SendRecordTokenParam.java` **1.0000**
- `cw-elevator-application-service/record/result/AcsElevatorAnalyseCycleBusinessResult.java` **1.0000**
### 4.2 最低相似(建议优先打开 diff)
- `cw-elevator-application-data/device/dto/AcsElevatorDeviceResultDTO.java` **0.1050**
- `cw-elevator-application-data/device/dto/AcsElevatorDeviceQueryFoDTO.java` **0.1052**
- `cw-elevator-application-service/device/result/AcsElevatorDeviceListResult.java` **0.1192**
- `cw-elevator-application-data/device/dto/AcsElevatorDeviceListResultDto.java` **0.1215**
- `cw-elevator-application-web/person/form/AcsPersonQueryForm.java` **0.1247**
- `cw-elevator-application-data/passrule/dto/ImageRuleRefAddDto.java` **0.1342**
- `cw-elevator-application-common/em/AlarmStateCodeEnum.java` **0.1399**
- `cw-elevator-application-common/util/CommunityConstants.java` **0.1989**
- `cw-elevator-application-service/export/result/ElevatorDeviceRecordExcelResult.java` **0.1998**
- `cw-elevator-application-common/em/AcsDeviceQueryTypeEnum.java` **0.2016**
- `cw-elevator-application-common/em/AcsDeviceIdentifyTypeEnum.java` **0.2052**
- `cw-elevator-application-data/passrule/dto/ImageRuleRefListResult.java` **0.2072**
- `cw-elevator-application-service/person/param/AcsPersonAddVisitorParam.java` **0.2339**
- `cw-elevator-application-web/person/form/AcsPersonAddVisitorForm.java` **0.2385**
- `cw-elevator-application-service/mqtt/param/AcsElevatorRecordMqttParam.java` **0.2772**
- `cw-elevator-application-service/device/result/AcsLabelElevatorResult.java` **0.2838**
- `cw-elevator-application-service/device/param/AcsDeviceRestructureTaskParam.java` **0.2992**
- `cw-elevator-application-common/config/FeignThreadLocalUtil.java` **0.3187**
- `cw-elevator-application-data/passrule/dto/ImageRuleRefResultDto.java` **0.3893**
- `cw-elevator-application-service/common/AbstractAcsDeviceService.java` **0.4027**
- `cw-elevator-application-service/person/param/AcsPersonQueryParam.java` **0.4166**
- `cw-elevator-application-data/record/impl/AcsElevatorRecordDaoImpl.java` **0.4350**
- `cw-elevator-application-service/passrule/impl/ImageRuleRefServiceImpl.java` **0.4616**
- `cw-elevator-application-service/device/impl/AcsDeviceTaskServiceImpl.java` **0.4644**
- `cw-elevator-application-service/device/param/AcsRestructureBindingParam.java` **0.4817**
- `cw-elevator-application-web/handler/device/form/AcsRestructureBindingForm.java` **0.4877**
- `cw-elevator-application-service/device/result/AcsDeviceRestructureResult.java` **0.4909**
- `cw-elevator-application-data/passrule/mapper/ImageRuleRefMapper.java` **0.4948**
- `cw-elevator-application-service/passrule/result/AcsPassRuleFloorResult.java` **0.5020**
- `cw-elevator-application-service/device/param/AcsRestructureQueryParam.java` **0.5047**
- `cw-elevator-application-web/handler/device/form/AcsRestructureQueryForm.java` **0.5049**
- `cw-elevator-application-data/record/dto/AcsRecogRecordPageDTO.java` **0.5121**
- `cw-elevator-application-common/util/CollectionUtils.java` **0.5129**
- `cw-elevator-application-common/util/StringUtils.java` **0.5311**
- `cw-elevator-application-common/util/RestTemplateUtil.java` **0.5335**
- `cw-elevator-application-service/AcsFeignConfiguration.java` **0.5382**
- `cw-elevator-application-web/handler/device/form/AcsDeviceRestructureTaskForm.java` **0.5446**
- `cw-elevator-application-service/device/impl/AcsElevatorDeviceServiceImpl.java` **0.5556**
- `cw-elevator-application-common/em/EngineAddressEnum.java` **0.5630**
- `cw-elevator-application-common/em/OpenDoorTypeEnum.java` **0.5714**
@@ -0,0 +1,102 @@
# Maven 源码 vs V1 自动反编译(cw_lib jar / CFR)逐类比对
- **V1 根**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/v1-decompiled/cfr-from-cw-lib-20260428-125543``decompile_v1_elevator_jars.sh` 生成)
- **V2 根**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/{module}/src/main/java/cn/cloudwalk/elevator`
- **相似度**: 去注释后 `SequenceMatcher.ratio`CFR 噪声会导致分数偏低)
## 1. 汇总(四模块来自 cw_lib jar 反编译)
| 模块 | 配对 | ≥0.98 | 0.850.98 | <0.85 | 仅 V1 | 仅 Maven |
|------|------|-------|-----------|-------|-------|------------|
| cw-elevator-application-common | 32 | 5 | 11 | 16 | 0 | 1 |
| cw-elevator-application-data | 79 | 43 | 18 | 18 | 0 | 5 |
| cw-elevator-application-service | 150 | 72 | 32 | 46 | 0 | 12 |
| cw-elevator-application-web | 44 | 26 | 7 | 11 | 0 | 3 |
| **合计** | **305** | **146** | **68** | **91** | **0** | **21** |
## 2. 仅 Maven(相对 `cn/cloudwalk/elevator`
### cw-elevator-application-common
- `package-info.java`*package-info*
### cw-elevator-application-data
- `device/package-info.java`*package-info*
- `person/dao/TenantVisitorFloorPolicyDao.java`*租户访客楼层策略(V2)*
- `person/dto/TenantVisitorFloorPolicyDto.java`*租户访客楼层策略(V2)*
- `person/impl/TenantVisitorFloorPolicyDaoImpl.java`*租户访客楼层策略(V2)*
- `person/mapper/TenantVisitorFloorPolicyMapper.java`*租户访客楼层策略(V2)*
### cw-elevator-application-service
- `CloudwalkSessionHolderConfiguration.java`*Session 扩展*
- `common/ElevatorRemoteIoExecutorConfig.java`*远程 IO 池*
- `common/ElevatorRemoteIoPoolProperties.java`*远程 IO 池*
- `common/package-info.java`*package-info*
- `device/package-info.java`*package-info*
- `mqtt/package-info.java`*package-info*
- `package-info.java`*package-info*
- `passrule/package-info.java`*package-info*
- `person/package-info.java`*package-info*
- `record/package-info.java`*package-info*
- `visitor/package-info.java`*package-info*
- `zone/package-info.java`*package-info*
### cw-elevator-application-web
- `handler/device/package-info.java`*package-info*
- `handler/package-info.java`*package-info*
- `zone/util/ZoneTreeCollectors.java`*工具类*
## 3. 样本:最高 / 最低相似度路径
### 最高
- `cw-elevator-application-common/context/CloudWalkExtendContextValue.java` **1.0000**
- `cw-elevator-application-common/util/AcsCacheKeyUtil.java` **1.0000**
- `cw-elevator-application-data/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.java` **1.0000**
- `cw-elevator-application-data/codeElevatorArea/dto/AcsElevatorCodeResultDTO.java` **1.0000**
- `cw-elevator-application-data/passrule/dto/AcsPassRuleImageResultDto.java` **1.0000**
- `cw-elevator-application-data/passrule/dto/AcsPassRuleLabelResultDto.java` **1.0000**
- `cw-elevator-application-data/record/dto/AcsElevatorPageRequestInfoResultDTO.java` **1.0000**
- `cw-elevator-application-data/record/dto/AcsElevatorQueryCountDTO.java` **1.0000**
- `cw-elevator-application-service/codeElevatorArea/result/AcsElevatorCodeResult.java` **1.0000**
- `cw-elevator-application-service/passrule/result/AcsPassRuleDetailResult.java` **1.0000**
- `cw-elevator-application-service/passrule/result/ImageRuleRefDetailResult.java` **1.0000**
- `cw-elevator-application-service/passrule/result/ImageRuleRefPageResult.java` **1.0000**
- `cw-elevator-application-service/record/param/SendRecordSendInfoParam.java` **1.0000**
- `cw-elevator-application-service/record/param/SendRecordTokenParam.java` **1.0000**
- `cw-elevator-application-service/record/result/AcsElevatorAnalyseCycleBusinessResult.java` **1.0000**
### 最低(优先 IDE diff
- `cw-elevator-application-data/device/dto/AcsElevatorDeviceResultDTO.java` **0.1050**
- `cw-elevator-application-data/device/dto/AcsElevatorDeviceQueryFoDTO.java` **0.1052**
- `cw-elevator-application-service/device/result/AcsElevatorDeviceListResult.java` **0.1192**
- `cw-elevator-application-data/device/dto/AcsElevatorDeviceListResultDto.java` **0.1215**
- `cw-elevator-application-web/person/form/AcsPersonQueryForm.java` **0.1247**
- `cw-elevator-application-data/passrule/dto/ImageRuleRefAddDto.java` **0.1342**
- `cw-elevator-application-common/em/AlarmStateCodeEnum.java` **0.1399**
- `cw-elevator-application-common/util/CommunityConstants.java` **0.1989**
- `cw-elevator-application-service/export/result/ElevatorDeviceRecordExcelResult.java` **0.1998**
- `cw-elevator-application-common/em/AcsDeviceQueryTypeEnum.java` **0.2016**
- `cw-elevator-application-common/em/AcsDeviceIdentifyTypeEnum.java` **0.2052**
- `cw-elevator-application-data/passrule/dto/ImageRuleRefListResult.java` **0.2072**
- `cw-elevator-application-service/person/param/AcsPersonAddVisitorParam.java` **0.2339**
- `cw-elevator-application-web/person/form/AcsPersonAddVisitorForm.java` **0.2385**
- `cw-elevator-application-service/mqtt/param/AcsElevatorRecordMqttParam.java` **0.2772**
- `cw-elevator-application-service/device/result/AcsLabelElevatorResult.java` **0.2838**
- `cw-elevator-application-service/device/param/AcsDeviceRestructureTaskParam.java` **0.2992**
- `cw-elevator-application-common/config/FeignThreadLocalUtil.java` **0.3187**
- `cw-elevator-application-data/passrule/dto/ImageRuleRefResultDto.java` **0.3893**
- `cw-elevator-application-service/common/AbstractAcsDeviceService.java` **0.4027**
- `cw-elevator-application-service/person/param/AcsPersonQueryParam.java` **0.4166**
- `cw-elevator-application-data/record/impl/AcsElevatorRecordDaoImpl.java` **0.4350**
- `cw-elevator-application-service/passrule/impl/ImageRuleRefServiceImpl.java` **0.4616**
- `cw-elevator-application-service/device/impl/AcsDeviceTaskServiceImpl.java` **0.4644**
- `cw-elevator-application-service/device/param/AcsRestructureBindingParam.java` **0.4817**
- `cw-elevator-application-web/handler/device/form/AcsRestructureBindingForm.java` **0.4877**
- `cw-elevator-application-service/device/result/AcsDeviceRestructureResult.java` **0.4909**
- `cw-elevator-application-data/passrule/mapper/ImageRuleRefMapper.java` **0.4948**
- `cw-elevator-application-service/passrule/result/AcsPassRuleFloorResult.java` **0.5020**
- `cw-elevator-application-service/device/param/AcsRestructureQueryParam.java` **0.5047**
- `cw-elevator-application-web/handler/device/form/AcsRestructureQueryForm.java` **0.5049**
- `cw-elevator-application-data/record/dto/AcsRecogRecordPageDTO.java` **0.5121**
- `cw-elevator-application-common/util/CollectionUtils.java` **0.5129**
- `cw-elevator-application-common/util/StringUtils.java` **0.5311**
- `cw-elevator-application-common/util/RestTemplateUtil.java` **0.5335**
@@ -0,0 +1,70 @@
# V1 对齐子任务执行单(立即执行落地)
生成时间:2026-04-28
范围:仅 `maven-cw-elevator-application`,不修改其它 Maven 兄弟仓库。
---
## 已在本次会话落地的项
| # | 子任务 | 动作 |
| --- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| A | **对拍排除租户访客楼层** | `api_catalog.json``person_add_visitor_min` 设为 `include_in_parity=false`,补充 `parity_exclude_reason`;顶层 `description` 说明原因。 |
| B | **全 catalog 对拍与窄对拍一致** | `tests/test_parity_full_catalog.py`:仅收集 `include_in_parity=true` 的条目(与 `test_parity_from_catalog` 一致)。 |
| C | **依赖树归档(starter/fat-jar 入口)** | 执行 `mvn dependency:tree``cw-elevator-application-starter`,归档:`report/dependency-tree-starter-20260428.txt`。 |
| D | **逐类源码 vs V1(自动反编译 cw_lib jar** | `./scripts/decompile_v1_elevator_jars.sh``tools/v1-decompiled/``python3 tools/elevator_api_parity/scripts/source_parity_scan.py`**`report/SOURCE-PARITY-BY-CLASS-decomp.md`**。旧版静态快照:`SOURCE-PARITY-BY-CLASS-20260428.md`。 |
核对命令(依赖树重现):
```bash
cd maven-cw-elevator-application/cw-elevator-application-starter
mvn -DskipTests dependency:tree -DoutputFile=target/dependency-tree.txt
```
当前 `cloudwalk-common-*` 解析版本:**3.7.2-Brussels-SRX**(见归档文件)。
---
## 窄对拍(`include_in_parity=true`)当前条目
运行双端前先起 V1+V2`/health` 可达后:
```bash
cd tools/elevator_api_parity
# 若本机 allure pytest 与 attr 冲突,可禁自动加载第三方插件:
export PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
ELEVATOR_PARITY_REQUIRE_LIVE=1 python3 -m pytest tests/test_parity_endpoints.py -m live -v
```
或使用全 catalog 中与上表一致的用例(**3 条**):
```bash
export PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
python3 -m pytest tests/test_parity_full_catalog.py -m live -v
```
二者现在仅断言 **3 条**`person_detail``passrule_page``record_page`),访客接口已不参与 V1/V2 code 等值断言。
---
## 待人工/环境接续的子任务(未自动化)
| # | 内容 | 说明 |
| --- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| 1 | 分域源码走查 person/passrule/device/record | 对照 `artifacts/decompiled/v1-cfr-compare-20211103/cfr-by-artifact`,关注 Feign/Dao 调用序列(CFR 仅辅助)。 |
| 2 | Feign/Ribbon 与部署配置 | `ElevatorApplication``NincaCrkStdRibbonConfiguration``deploy/*/application.properties` 与运行环境一致;对拍需在**相同 listOfServers/域名**下进行。 |
| 3 | `@CloudwalkParamsValidate` 行为 | 依赖 `cloudwalk-common-service` 字节码;若双端业务码仍分叉,仅在电梯模块内收敛(实现类补注解或等价校验),**不改兄弟仓库**。 |
| 4 | fixtures 扩充 | `fixtures/*.json` 覆盖真实租户数据后,可把更多 catalog 条目的 `include_in_parity` 改为 `true`。 |
| 5 | 回滚 | 保留上一版 `cw-elevator-application-*.jar`;对拍大面积失败即回滚替换。 |
---
## 验收口径(与「确保」可行性一致)
- **可验收**:路由 + 选定条目的双端业务 `code` + 同依赖树构建产物。
- **不可单独验收**:未升级的传递依赖字节码与生产全网运行时逐条等价。
@@ -0,0 +1,112 @@
# V1 vs V2 字节码根因分析
- 生成时间(UTC):`2026-04-29T01:54:50Z`
- 对比范围:四模块 `cn/cloudwalk/elevator/**` 主类(不含 `$` 内部类)
- 维度:类存在性 / API签名 / 方法实现
## 1. 总览
| 维度 | 数量 |
|---|---:|
| MATCH | 261 |
| IMPL_DIFF | 30 |
| API_DIFF | 14 |
| ONLY_V1 | 0 |
| ONLY_V2 | 8 |
## 2. 各模块分布
| 模块 | MATCH | IMPL_DIFF | API_DIFF | ONLY_V1 | ONLY_V2 |
|---|---:|---:|---:|---:|---:|
| cw-elevator-application-common | 30 | 1 | 1 | 0 | 0 |
| cw-elevator-application-data | 68 | 8 | 3 | 0 | 4 |
| cw-elevator-application-service | 126 | 15 | 9 | 0 | 3 |
| cw-elevator-application-web | 37 | 6 | 1 | 0 | 1 |
## 3. API 相同但实现不同(优先查 JD-GUI 还原误差/人工改写)
| 模块 | 类 |
|---|---|
| cw-elevator-application-common | `cn.cloudwalk.elevator.util.StringUtils` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceListByBuildingIdDto` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceListResultDto` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceQueryFoDTO` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceResultDTO` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.passrule.dto.ImageRuleRefAddDto` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.passrule.dto.ImageRuleRefListResult` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.passrule.dto.ImageRuleRefResultDto` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.record.dto.AcsRecogRecordPageDTO` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.param.AcsDeviceRestructureTaskParam` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.param.AcsRestructureBindingParam` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.param.AcsRestructureQueryParam` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.result.AcsDeviceRestructureResult` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.result.AcsElevatorDeviceListResult` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.result.AcsLabelElevatorResult` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.result.KeyValueResult` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.export.AcsAbstractExportAsyncService` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.export.result.ElevatorDeviceRecordExcelResult` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.mqtt.param.AcsElevatorRecordMqttParam` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.mqtt.param.MqttSendMessageParam` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.passrule.result.AcsPassRuleFloorResult` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.person.param.AcsPersonAddVisitorParam` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.person.param.AcsPersonQueryParam` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.person.param.PersonDetailQueryParam` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.handler.device.form.AcsDeviceRestructureTaskForm` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.handler.device.form.AcsRestructureBindingForm` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.handler.device.form.AcsRestructureQueryForm` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.person.form.AcsPersonAddVisitorForm` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.person.form.AcsPersonQueryForm` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.person.form.PersonDetailQueryForm` |
## 4. API 不同(优先查源码结构漂移)
| 模块 | 类 |
|---|---|
| cw-elevator-application-common | `cn.cloudwalk.elevator.config.FeignThreadLocalUtil` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.codeElevatorArea.dao.AcsElevatorCodeDao` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.codeElevatorArea.impl.AcsElevatorCodeDaoImpl` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.codeElevatorArea.mapper.AcsElevatorCodeMapper` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.codeElevatorArea.impl.AcsElevatorCodeServiceImpl` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.codeElevatorArea.service.AcsElevatorCodeService` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.impl.AcsDeviceTaskServiceImpl` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.device.impl.AcsElevatorDeviceServiceImpl` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.passrule.impl.AcsPassRuleServiceImpl` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.passrule.impl.ImageRuleRefServiceImpl` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.person.impl.AcsPersonServiceImpl` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.person.impl.PersonRuleServiceImpl` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.record.impl.AcsElevatorRecordServiceImpl` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceController` |
## 5. 仅 V2 存在(新增类)
| 模块 | 类 |
|---|---|
| cw-elevator-application-data | `cn.cloudwalk.elevator.person.dao.TenantVisitorFloorPolicyDao` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.person.dto.TenantVisitorFloorPolicyDto` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.person.impl.TenantVisitorFloorPolicyDaoImpl` |
| cw-elevator-application-data | `cn.cloudwalk.elevator.person.mapper.TenantVisitorFloorPolicyMapper` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.CloudwalkSessionHolderConfiguration` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.common.ElevatorRemoteIoExecutorConfig` |
| cw-elevator-application-service | `cn.cloudwalk.elevator.common.ElevatorRemoteIoPoolProperties` |
| cw-elevator-application-web | `cn.cloudwalk.elevator.zone.util.ZoneTreeCollectors` |
## 6. 仅 V1 存在(缺失类)
-
## 7. 根因判读指引
- `IMPL_DIFF`:若对应源码与 CFR 文本高度相似但字节码仍不同,多为 JD-GUI 语句重排/条件翻译偏差或后续手工改写。
- `API_DIFF`:优先判定为“源码结构变化”,例如方法签名、字段类型、泛型边界变化。
- `ONLY_V2/ONLY_V1`:属于文件集合漂移(新增/漏还原/清理)。
## 8. API_DIFF 判读
- **成员顺序**:同签名不同顺序(常见于 Lombok getter/setter 顺序)已由 `norm_api` 合并 descriptor 后排序消除伪差异。
- **默认可视构造**:仅含 static 的类若未写显式私有空参构造,javac 可能生成 **public** 默认构造,与旧 JAR 中 **private** 不同;可在源码中补充与 V1 一致。
- **真实契约差异**:仍报 API_DIFF 时多为 V2 **新增/改签名** 的方法或字段,需对照业务是否保留(并非脚本噪声)。
## 9. 实现归一化(摘要)
- **行级**:指令偏移、`#` 常量池下标、`if_icmp*`/`goto` 目标、`xload`/`xstore` 槽位、`iinc``ArrayList``List` 的 add/size、`tableswitch` 纯数字行等。
- **二次(`bytecode_norm_post`**`ifxx`+`goto` 蹦床→反条件单条;连续 `goto @` 折叠;连续重复 `checkcast` 去重;`String.join` 前冗余 `checkcast java/lang/String``iconst_0`+dup 与 istore/iload 轮换初始化局部;Apache POI `setCellType`/`setBold`/`setColor` 新旧 API 占位符。
@@ -0,0 +1,529 @@
# V1 vs V2 源码差异与问题梳理(全自动比对)
- **生成时间(UTC**: 2026-04-28T05:00:41Z
- **V1**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/v1-decompiled/cfr-from-cw-lib-20260428-125802`cw_lib jar → CFR
- **V2**: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/{module}/src/main/java/cn/cloudwalk/elevator`
- **相似度**: 去注释后全文 `SequenceMatcher.ratio`;**低分≠业务错误**(CFR 变量名/枚举顺序等)。
## 1. 结论摘要
| 维度 | 数量 | 说明 |
| ------------- | --- | -------------------------------- |
| 配对类 | 305 | 同名路径 `.java` |
| A 桶 ≥0.98 | 146 | 文本高度接近 |
| B 桶 0.850.98 | 68 | 多为格式/注释/轻微差异,建议抽检 |
| C 桶 <0.85 | 91 | **优先 IDE diff**;枚举/DTO 常为 CFR 噪声 |
| 仅 V1 | 0 | 当前四模块应为 0 |
| 仅 Maven | 21 | V2 新增;访客楼层策略等为**已知扩展** |
### 1.1 建议处置
1. **仅 Maven**`TenantVisitorFloor`* — 与 V1 对齐无关(产品已排除);`package-info` — 忽略。
2. **C 桶 + 高优先级**Controller / ServiceImpl / Feign):优先人工对照业务分支与远程调用。
3. **C 桶 + 枚举/DTO**:优先视为 CFR 噪声,除非接口契约变更。
## 2. 仅 Maven 文件(问题/范围标注)
- `cw-elevator-application-common/package-info.java`**工程化-package-info**
- `cw-elevator-application-data/device/package-info.java`**工程化-package-info**
- `cw-elevator-application-data/person/dao/TenantVisitorFloorPolicyDao.java`**V2扩展-租户访客楼层**
- `cw-elevator-application-data/person/dto/TenantVisitorFloorPolicyDto.java`**V2扩展-租户访客楼层**
- `cw-elevator-application-data/person/impl/TenantVisitorFloorPolicyDaoImpl.java`**V2扩展-租户访客楼层**
- `cw-elevator-application-data/person/mapper/TenantVisitorFloorPolicyMapper.java`**V2扩展-租户访客楼层**
- `cw-elevator-application-service/CloudwalkSessionHolderConfiguration.java`**V2扩展-Session**
- `cw-elevator-application-service/common/ElevatorRemoteIoExecutorConfig.java`**V2扩展-远程IO线程池**
- `cw-elevator-application-service/common/ElevatorRemoteIoPoolProperties.java`**V2扩展-远程IO线程池**
- `cw-elevator-application-service/common/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/device/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/mqtt/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/passrule/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/person/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/record/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/visitor/package-info.java`**工程化-package-info**
- `cw-elevator-application-service/zone/package-info.java`**工程化-package-info**
- `cw-elevator-application-web/handler/device/package-info.java`**工程化-package-info**
- `cw-elevator-application-web/handler/package-info.java`**工程化-package-info**
- `cw-elevator-application-web/zone/util/ZoneTreeCollectors.java`**V2独有-工具类**
## 3. C 桶(<0.85)按复核优先级分组
### 中-DTO表单
| 路径 | 相似度 |
| ---------------------------------------------------------------------------------------- | ------ |
| `cw-elevator-application-service/passrule/param/AcsPassTimeCycleParam.java` | 0.8399 |
| `cw-elevator-application-service/person/param/AcsPersonAddNewParam.java` | 0.8391 |
| `cw-elevator-application-service/passrule/param/AcsPassTimeAddParam.java` | 0.8347 |
| `cw-elevator-application-web/passrule/form/AcsPassRulePersonListForm.java` | 0.8235 |
| `cw-elevator-application-service/passrule/param/AcsPassRulePersonListParam.java` | 0.8149 |
| `cw-elevator-application-service/person/result/AcsImagestorePersonStatisticsResult.java` | 0.7986 |
| `cw-elevator-application-service/mqtt/param/MqttSendMessageParam.java` | 0.6788 |
| `cw-elevator-application-service/device/result/KeyValueResult.java` | 0.6397 |
| `cw-elevator-application-data/device/dto/AcsElevatorDeviceListByBuildingIdDto.java` | 0.6078 |
| `cw-elevator-application-service/person/param/PersonDetailQueryParam.java` | 0.5849 |
| `cw-elevator-application-web/person/form/PersonDetailQueryForm.java` | 0.5835 |
| `cw-elevator-application-web/handler/device/form/AcsDeviceRestructureTaskForm.java` | 0.5446 |
| `cw-elevator-application-data/record/dto/AcsRecogRecordPageDTO.java` | 0.5121 |
| `cw-elevator-application-web/handler/device/form/AcsRestructureQueryForm.java` | 0.5049 |
| `cw-elevator-application-service/device/param/AcsRestructureQueryParam.java` | 0.5047 |
| `cw-elevator-application-service/passrule/result/AcsPassRuleFloorResult.java` | 0.5020 |
| `cw-elevator-application-service/device/result/AcsDeviceRestructureResult.java` | 0.4909 |
| `cw-elevator-application-web/handler/device/form/AcsRestructureBindingForm.java` | 0.4876 |
| `cw-elevator-application-service/device/param/AcsRestructureBindingParam.java` | 0.4817 |
| `cw-elevator-application-service/person/param/AcsPersonQueryParam.java` | 0.4166 |
| `cw-elevator-application-data/passrule/dto/ImageRuleRefResultDto.java` | 0.3893 |
| `cw-elevator-application-service/device/param/AcsDeviceRestructureTaskParam.java` | 0.2992 |
| `cw-elevator-application-service/device/result/AcsLabelElevatorResult.java` | 0.2838 |
| `cw-elevator-application-service/mqtt/param/AcsElevatorRecordMqttParam.java` | 0.2772 |
| `cw-elevator-application-web/person/form/AcsPersonAddVisitorForm.java` | 0.2385 |
| `cw-elevator-application-service/person/param/AcsPersonAddVisitorParam.java` | 0.2339 |
| `cw-elevator-application-data/passrule/dto/ImageRuleRefListResult.java` | 0.2072 |
| `cw-elevator-application-service/export/result/ElevatorDeviceRecordExcelResult.java` | 0.1998 |
| `cw-elevator-application-data/passrule/dto/ImageRuleRefAddDto.java` | 0.1342 |
| `cw-elevator-application-web/person/form/AcsPersonQueryForm.java` | 0.1247 |
| `cw-elevator-application-data/device/dto/AcsElevatorDeviceListResultDto.java` | 0.1215 |
| `cw-elevator-application-service/device/result/AcsElevatorDeviceListResult.java` | 0.1192 |
| `cw-elevator-application-data/device/dto/AcsElevatorDeviceQueryFoDTO.java` | 0.1052 |
| `cw-elevator-application-data/device/dto/AcsElevatorDeviceResultDTO.java` | 0.1050 |
### 中-Mapper接口
| 路径 | 相似度 |
| --------------------------------------------------------------------------------- | ------ |
| `cw-elevator-application-data/device/mapper/DeviceImageStoreMapper.java` | 0.7928 |
| `cw-elevator-application-data/codeElevatorArea/mapper/AcsElevatorCodeMapper.java` | 0.7484 |
| `cw-elevator-application-data/device/mapper/AcsElevatorDeviceMapper.java` | 0.7018 |
| `cw-elevator-application-data/passrule/mapper/ImageRuleRefMapper.java` | 0.4948 |
### 中-其他
| 路径 | 相似度 |
| ----------------------------------------------------------------------------------------------- | ------ |
| `cw-elevator-application-service/export/ExcelCallback.java` | 0.8484 |
| `cw-elevator-application-data/YearlyShardingAlgorithm.java` | 0.8363 |
| `cw-elevator-application-data/codeElevatorArea/dao/AcsElevatorCodeDao.java` | 0.8298 |
| `cw-elevator-application-service/downloadcenter/AcsDownloadCenterService.java` | 0.8279 |
| `cw-elevator-application-data/passrule/dao/ImageRuleRefDao.java` | 0.8150 |
| `cw-elevator-application-common/util/DateUtils.java` | 0.8123 |
| `cw-elevator-application-service/codeElevatorArea/service/AcsElevatorCodeService.java` | 0.8121 |
| `cw-elevator-application-service/task/ElevatorRecordSendTask.java` | 0.8051 |
| `cw-elevator-application-service/export/utils/ExcelUtil.java` | 0.8050 |
| `cw-elevator-application-web/handler/OpenDoorRecordEventHandler.java` | 0.7811 |
| `cw-elevator-application-service/device/service/AcsDeviceTaskService.java` | 0.7681 |
| `cw-elevator-application-service/passrule/service/ImageRuleRefService.java` | 0.7673 |
| `cw-elevator-application-service/device/setting/service/AcsDeviceImageStoreAppBindService.java` | 0.7672 |
| `cw-elevator-application-common/util/StartTimeAndEndTime.java` | 0.7629 |
| `cw-elevator-application-service/device/service/AcsElevatorDeviceService.java` | 0.7468 |
| `cw-elevator-application-service/export/AcsAbstractExportAsyncService.java` | 0.7257 |
| `cw-elevator-application-service/passrule/service/AcsPassRuleService.java` | 0.7087 |
| `cw-elevator-application-service/person/service/PersonRuleService.java` | 0.7029 |
| `cw-elevator-application-service/person/service/AcsPersonService.java` | 0.6887 |
| `cw-elevator-application-service/AcsFeignConfiguration.java` | 0.5382 |
| `cw-elevator-application-common/util/RestTemplateUtil.java` | 0.5335 |
| `cw-elevator-application-common/util/StringUtils.java` | 0.5311 |
| `cw-elevator-application-common/util/CollectionUtils.java` | 0.5129 |
| `cw-elevator-application-service/common/AbstractAcsDeviceService.java` | 0.4027 |
| `cw-elevator-application-common/config/FeignThreadLocalUtil.java` | 0.3187 |
| `cw-elevator-application-common/util/CommunityConstants.java` | 0.1989 |
### 低-枚举(CFR噪声常见)
| 路径 | 相似度 |
| ------------------------------------------------------------------ | ------ |
| `cw-elevator-application-common/em/AcsApplicationSourceEnum.java` | 0.8372 |
| `cw-elevator-application-common/em/AcsPassTypeEnum.java` | 0.8155 |
| `cw-elevator-application-common/em/CompareTypeEnum.java` | 0.7955 |
| `cw-elevator-application-common/em/AcsDeviceSettingEnum.java` | 0.7651 |
| `cw-elevator-application-service/export/AcsFileStatusEnum.java` | 0.6657 |
| `cw-elevator-application-common/em/OpenDoorTypeEnum.java` | 0.5714 |
| `cw-elevator-application-common/em/EngineAddressEnum.java` | 0.5630 |
| `cw-elevator-application-common/em/AcsDeviceIdentifyTypeEnum.java` | 0.2052 |
| `cw-elevator-application-common/em/AcsDeviceQueryTypeEnum.java` | 0.2016 |
| `cw-elevator-application-common/em/AlarmStateCodeEnum.java` | 0.1399 |
### 高-Controller
| 路径 | 相似度 |
| ---------------------------------------------------------------------------------------------- | ------ |
| `cw-elevator-application-web/handler/device/controller/AcsElevatorRestructureController.java` | 0.7986 |
| `cw-elevator-application-web/handler/device/controller/AcsElevatorDeviceController.java` | 0.7094 |
| `cw-elevator-application-web/handler/device/controller/AcsElevatorDeviceGetWayController.java` | 0.6779 |
### 高-Service/DaoImpl
| 路径 | 相似度 |
| --------------------------------------------------------------------------------------- | ------ |
| `cw-elevator-application-service/record/impl/AcsRecogRecordServiceImpl.java` | 0.8440 |
| `cw-elevator-application-service/codeElevatorArea/impl/AcsElevatorCodeServiceImpl.java` | 0.8396 |
| `cw-elevator-application-service/person/impl/AcsPersonServiceImpl.java` | 0.8394 |
| `cw-elevator-application-service/device/setting/impl/AcsDeviceSettingServiceImpl.java` | 0.8205 |
| `cw-elevator-application-data/device/impl/AcsElevatorDeviceDaoImpl.java` | 0.8133 |
| `cw-elevator-application-service/passrule/impl/AcsPassRuleServiceImpl.java` | 0.7823 |
| `cw-elevator-application-data/passrule/impl/AcsPassRuleDaoImpl.java` | 0.7309 |
| `cw-elevator-application-service/record/impl/AcsElevatorRecordServiceImpl.java` | 0.7267 |
| `cw-elevator-application-service/person/impl/PersonRuleServiceImpl.java` | 0.6876 |
| `cw-elevator-application-service/passrule/impl/AbstractAcsPassService.java` | 0.6162 |
| `cw-elevator-application-service/device/impl/AcsElevatorDeviceServiceImpl.java` | 0.5556 |
| `cw-elevator-application-service/device/impl/AcsDeviceTaskServiceImpl.java` | 0.4644 |
| `cw-elevator-application-service/passrule/impl/ImageRuleRefServiceImpl.java` | 0.4616 |
| `cw-elevator-application-data/record/impl/AcsElevatorRecordDaoImpl.java` | 0.4350 |
## 4. 完整配对表(全部类)
| 模块 | 相对路径 | 相似度 | 分桶 | 复核优先级 |
| ------------------------------- | ------------------------------------------------------------------ | ------ | ------ | ----------------- |
| cw-elevator-application-common | `annontation/DavinciPic.java` | 0.9788 | B-轻度差异 | 中-其他 |
| cw-elevator-application-common | `cache/CacheOverrideConfig.java` | 0.9963 | A-高度一致 | 中-其他 |
| cw-elevator-application-common | `config/AcsConstants.java` | 0.9621 | B-轻度差异 | 中-其他 |
| cw-elevator-application-common | `config/AcsLockConstants.java` | 0.9638 | B-轻度差异 | 中-其他 |
| cw-elevator-application-common | `config/ElevatorCwosConfig.java` | 0.9978 | A-高度一致 | 中-其他 |
| cw-elevator-application-common | `config/ErrorCode.java` | 0.9992 | A-高度一致 | 中-其他 |
| cw-elevator-application-common | `config/FeignRemoteConfig.java` | 0.9671 | B-轻度差异 | 中-其他 |
| cw-elevator-application-common | `config/FeignThreadLocalUtil.java` | 0.3187 | C-显著差异 | 中-其他 |
| cw-elevator-application-common | `config/ImageStoreConstants.java` | 0.8973 | B-轻度差异 | 中-其他 |
| cw-elevator-application-common | `context/CloudWalkExtendContextValue.java` | 1.0000 | A-高度一致 | 中-其他 |
| cw-elevator-application-common | `em/AcsApplicationSourceEnum.java` | 0.8372 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AcsDeviceIdentifyTypeEnum.java` | 0.2052 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AcsDeviceQueryTypeEnum.java` | 0.2016 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AcsDeviceSettingEnum.java` | 0.7651 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AcsOpenDoorStatusEnum.java` | 0.8564 | B-轻度差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AcsOperateStatusEnum.java` | 0.8728 | B-轻度差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AcsOperateTypeEnum.java` | 0.8824 | B-轻度差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AcsPassTypeEnum.java` | 0.8155 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/AlarmStateCodeEnum.java` | 0.1399 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/CompareTypeEnum.java` | 0.7955 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/EngineAddressEnum.java` | 0.5630 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/OpenDoorTypeEnum.java` | 0.5714 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `em/YesNoTypeEnum.java` | 0.8932 | B-轻度差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-common | `util/AcsCacheKeyUtil.java` | 1.0000 | A-高度一致 | 中-其他 |
| cw-elevator-application-common | `util/CollectionUtils.java` | 0.5129 | C-显著差异 | 中-其他 |
| cw-elevator-application-common | `util/CommunityConstants.java` | 0.1989 | C-显著差异 | 中-其他 |
| cw-elevator-application-common | `util/DateUtils.java` | 0.8123 | C-显著差异 | 中-其他 |
| cw-elevator-application-common | `util/JsonUtils.java` | 0.9024 | B-轻度差异 | 中-其他 |
| cw-elevator-application-common | `util/RestTemplateUtil.java` | 0.5335 | C-显著差异 | 中-其他 |
| cw-elevator-application-common | `util/StartTimeAndEndTime.java` | 0.7629 | C-显著差异 | 中-其他 |
| cw-elevator-application-common | `util/StringUtils.java` | 0.5311 | C-显著差异 | 中-其他 |
| cw-elevator-application-common | `util/ToolUtil.java` | 0.9268 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `YearlyShardingAlgorithm.java` | 0.8363 | C-显著差异 | 中-其他 |
| cw-elevator-application-data | `codeElevatorArea/dao/AcsElevatorCodeDao.java` | 0.8298 | C-显著差异 | 中-其他 |
| cw-elevator-application-data | `codeElevatorArea/dto/AcsElevatorCodeDTO.java` | 0.9974 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `codeElevatorArea/dto/AcsElevatorCodeQueryDTO.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `codeElevatorArea/dto/AcsElevatorCodeResultDTO.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `codeElevatorArea/impl/AcsElevatorCodeDaoImpl.java` | 0.9054 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `codeElevatorArea/mapper/AcsElevatorCodeMapper.java` | 0.7484 | C-显著差异 | 中-Mapper接口 |
| cw-elevator-application-data | `device/dao/AcsDeviceTaskDao.java` | 0.8515 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `device/dao/AcsElevatorDeviceDao.java` | 0.8537 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `device/dao/DeviceImageStoreDao.java` | 0.8980 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `device/dto/AcsDeviceQueryDTO.java` | 0.9995 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsDeviceResultDTO.java` | 0.9986 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsDeviceTaskAddDto.java` | 0.9974 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsDeviceTaskDTO.java` | 0.9987 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceAddDTO.java` | 0.9980 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceEditDTO.java` | 0.9980 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceListByBuildingIdDto.java` | 0.6078 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceListDto.java` | 0.9975 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceListResultDto.java` | 0.1215 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceQueryByIdDTO.java` | 0.9940 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceQueryDTO.java` | 0.9989 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceQueryFoDTO.java` | 0.1052 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceQueryResultDTO.java` | 0.9967 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `device/dto/AcsElevatorDeviceResultDTO.java` | 0.1050 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `device/impl/AcsDeviceTaskDaoImpl.java` | 0.9785 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `device/impl/AcsElevatorDeviceDaoImpl.java` | 0.8133 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `device/impl/DeviceImageStoreDaoImpl.java` | 0.9856 | A-高度一致 | 高-Service/DaoImpl |
| cw-elevator-application-data | `device/mapper/AcsDeviceTaskMapper.java` | 0.8535 | B-轻度差异 | 中-Mapper接口 |
| cw-elevator-application-data | `device/mapper/AcsElevatorDeviceMapper.java` | 0.7018 | C-显著差异 | 中-Mapper接口 |
| cw-elevator-application-data | `device/mapper/DeviceImageStoreMapper.java` | 0.7928 | C-显著差异 | 中-Mapper接口 |
| cw-elevator-application-data | `passrule/dao/AcsPassRuleDao.java` | 0.8710 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `passrule/dao/ImageRuleRefDao.java` | 0.8150 | C-显著差异 | 中-其他 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleAddDto.java` | 0.9989 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleDeleteDto.java` | 0.9991 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleEditDto.java` | 0.9986 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleImageDto.java` | 0.9984 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleImageResultDto.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleIsDefaultDto.java` | 0.9966 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleLabelResultDto.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRulePersonListDto.java` | 0.9990 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRulePersonListResultDto.java` | 0.9341 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleQueryDto.java` | 0.9992 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/AcsPassRuleResultDto.java` | 0.9989 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/ImageRuleRefAddDto.java` | 0.1342 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/ImageRuleRefListResult.java` | 0.2072 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/dto/ImageRuleRefResultDto.java` | 0.3893 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `passrule/impl/AcsPassRuleDaoImpl.java` | 0.7309 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `passrule/impl/ImageRuleRefDaoImpl.java` | 0.9646 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `passrule/mapper/AcsPassRuleMapper.java` | 0.8959 | B-轻度差异 | 中-Mapper接口 |
| cw-elevator-application-data | `passrule/mapper/ImageRuleRefMapper.java` | 0.4948 | C-显著差异 | 中-Mapper接口 |
| cw-elevator-application-data | `record/dao/AcsElevatorRecordDao.java` | 0.9100 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `record/dao/AcsPersonInfoDao.java` | 0.9936 | A-高度一致 | 中-其他 |
| cw-elevator-application-data | `record/dao/AcsRecogRecordDao.java` | 0.9237 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `record/dao/SendRecordTimeDao.java` | 0.9168 | B-轻度差异 | 中-其他 |
| cw-elevator-application-data | `record/dto/AcsElevatorAnalyseCycleBusinessResultDTO.java` | 0.9982 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsElevatorPageRequestInfoResultDTO.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsElevatorQueryCountDTO.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsElevatorRecordAddDTO.java` | 0.9981 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsElevatorRecordDetailQueryDTO.java` | 0.9996 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsElevatorRecordDetailQueryResultDTO.java` | 0.9982 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsElevatorRecordExtraDTO.java` | 0.9982 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsElevatorRecordQueryResultDTO.java` | 0.9979 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsOpenDoorRecordEditDTO.java` | 0.9976 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsOpenDoorRecordQueryDTO.java` | 0.9991 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsPersonInfoResultDTO.java` | 0.9977 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsRecogRecordAddDTO.java` | 0.9979 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsRecogRecordPageDTO.java` | 0.5121 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsRecogRecordResultDTO.java` | 0.9993 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsRecordDetailQueryResultDTO.java` | 0.9998 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/AcsRecordThreeSendQueryDTO.java` | 0.9985 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/SendRecordTimeAddDTO.java` | 0.9973 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/SendRecordTimeEditDTO.java` | 0.9973 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/dto/SendRecordTimeResultDTO.java` | 0.9973 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-data | `record/impl/AcsElevatorRecordDaoImpl.java` | 0.4350 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `record/impl/AcsRecogRecordDaoImpl.java` | 0.8742 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `record/impl/SendRecordTimeDaoImpl.java` | 0.8790 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-data | `record/mapper/AcsElevatorRecordMapper.java` | 0.8761 | B-轻度差异 | 中-Mapper接口 |
| cw-elevator-application-data | `record/mapper/AcsRecogRecordMapper.java` | 0.9024 | B-轻度差异 | 中-Mapper接口 |
| cw-elevator-application-data | `record/mapper/SendRecordTimeMapper.java` | 0.8994 | B-轻度差异 | 中-Mapper接口 |
| cw-elevator-application-service | `AcsFeignConfiguration.java` | 0.5382 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `cacheable/AcsAreaTreeCacheableService.java` | 0.9970 | A-高度一致 | 中-其他 |
| cw-elevator-application-service | `codeElevatorArea/impl/AcsElevatorCodeServiceImpl.java` | 0.8396 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `codeElevatorArea/param/AcsElevatorCodeParam.java` | 0.9974 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `codeElevatorArea/result/AcsElevatorCodeResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `codeElevatorArea/service/AcsElevatorCodeService.java` | 0.8121 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `common/AbstractAcsDeviceService.java` | 0.4027 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `common/AbstractCloudwalkService.java` | 0.9972 | A-高度一致 | 中-其他 |
| cw-elevator-application-service | `common/AcsApplicationServiceImpl.java` | 0.9534 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `common/UpdateFloorsPoolProperties.java` | 0.9992 | A-高度一致 | 中-其他 |
| cw-elevator-application-service | `common/UpdateFloorsTaskExecutor.java` | 0.9109 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `common/service/AcsApplicationService.java` | 0.9479 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `device/impl/AcsDeviceTaskServiceImpl.java` | 0.4644 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `device/impl/AcsElevatorDeviceServiceImpl.java` | 0.5556 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `device/param/AcsDeviceQueryParam.java` | 0.9972 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsDeviceRestructureTaskParam.java` | 0.2992 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsElevatorDeviceAddParam.java` | 0.9981 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsElevatorDeviceEditParam.java` | 0.9985 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsElevatorDeviceListParam.java` | 0.9968 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsElevatorDeviceQueryByIdParam.java` | 0.9941 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsElevatorDeviceQueryParam.java` | 0.9988 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsRestructureBindingParam.java` | 0.4817 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/param/AcsRestructureQueryParam.java` | 0.5047 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/result/AcsDeviceNewResult.java` | 0.9997 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/result/AcsDeviceRestructureResult.java` | 0.4909 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/result/AcsElevatorDeviceListResult.java` | 0.1192 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/result/AcsElevatorDeviceResult.java` | 0.9996 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/result/AcsLabelElevatorResult.java` | 0.2838 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/result/KeyValueResult.java` | 0.6397 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/service/AcsDeviceTaskService.java` | 0.7681 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `device/service/AcsElevatorDeviceService.java` | 0.7468 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `device/setting/impl/AcsDeviceImageStoreAppBindServiceImpl.java` | 0.8935 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `device/setting/impl/AcsDeviceSettingServiceImpl.java` | 0.8205 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `device/setting/param/AcsDeviceTemperatureSettingParam.java` | 0.9948 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/setting/param/DeviceImageStoreAppBindParam.java` | 0.9986 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/setting/param/DeviceImageStoreAppUnbindParam.java` | 0.9988 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/setting/result/AcsDeviceSettingResult.java` | 0.9077 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `device/setting/result/AcsSettingAttr.java` | 0.9990 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `device/setting/service/AcsDeviceImageStoreAppBindService.java` | 0.7672 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `device/setting/service/AcsDeviceSettingService.java` | 0.9334 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `downloadcenter/AcsDownloadCenterService.java` | 0.8279 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `downloadcenter/impl/AcsDownloadCenterServiceImpl.java` | 0.8874 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `downloadcenter/param/AcsFileFinishParam.java` | 0.9991 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `export/AcsAbstractExportAsyncService.java` | 0.7257 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `export/AcsFileStatusEnum.java` | 0.6657 | C-显著差异 | 低-枚举(CFR噪声常见) |
| cw-elevator-application-service | `export/ExcelAttribute.java` | 0.9425 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `export/ExcelCallback.java` | 0.8484 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `export/impl/ElevatorDeviceExportService.java` | 0.8853 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `export/result/ElevatorDeviceRecordExcelResult.java` | 0.1998 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `export/utils/ExcelUtil.java` | 0.8050 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `export/utils/FolderUtils.java` | 0.9243 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `mqtt/client/MqttFeignClient.java` | 0.9696 | B-轻度差异 | 高-Feign/Client |
| cw-elevator-application-service | `mqtt/fallback/MqttFeignClientFallback.java` | 0.9606 | B-轻度差异 | 高-Feign/Client |
| cw-elevator-application-service | `mqtt/impl/MqttServiceImpl.java` | 0.9046 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `mqtt/param/AcsElevatorRecordMqttParam.java` | 0.2772 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `mqtt/param/MqttSendMessageParam.java` | 0.6788 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `mqtt/service/MqttService.java` | 0.9315 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `passrule/impl/AbstractAcsPassService.java` | 0.6162 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `passrule/impl/AcsPassRuleServiceImpl.java` | 0.7823 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `passrule/impl/ImageRuleRefServiceImpl.java` | 0.4616 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `passrule/param/AcsPassRuleDeleteParam.java` | 0.9973 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassRuleEditParam.java` | 0.9973 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassRuleFloorParam.java` | 0.9953 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassRuleImageParam.java` | 0.9992 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassRuleIsDefaultParam.java` | 0.9971 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassRuleNewParam.java` | 0.9976 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassRulePersonListParam.java` | 0.8149 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassRuleQueryParam.java` | 0.9991 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassTimeAddParam.java` | 0.8347 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassTimeCycleParam.java` | 0.8399 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassTimeDeleteParam.java` | 0.9955 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassTimeEditParam.java` | 0.8509 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassTimeParam.java` | 0.9980 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/param/AcsPassTimeQueryParam.java` | 0.9949 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/result/AcsPassRuleDetailResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/result/AcsPassRuleFloorResult.java` | 0.5020 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/result/AcsPassRuleResult.java` | 0.9997 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/result/ImageRuleRefDetailResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/result/ImageRuleRefPageResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `passrule/service/AcsPassRuleService.java` | 0.7087 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `passrule/service/ImageRuleRefService.java` | 0.7673 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `person/impl/AcsPersonServiceImpl.java` | 0.8394 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `person/impl/PersonRuleServiceImpl.java` | 0.6876 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `person/param/AcsPersonAddNewParam.java` | 0.8391 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonAddParam.java` | 0.9983 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonAddVisitorParam.java` | 0.2339 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonCheckTimeParam.java` | 0.9986 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonDeleteParam.java` | 0.9975 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonDetailParam.java` | 0.9965 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonEditParam.java` | 0.9972 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonFaceParam.java` | 0.9952 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonPropertiesParam.java` | 0.9997 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonQueryByAppParam.java` | 0.9963 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonQueryParam.java` | 0.4166 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/AcsPersonTimeDetailParam.java` | 0.9968 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/param/PersonDetailQueryParam.java` | 0.5849 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AcsAppResult.java` | 0.9988 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AcsImageStoreStatisticsResult.java` | 0.9987 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AcsImagestorePersonStatisticsResult.java` | 0.7986 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AcsPersonDetailResult.java` | 0.8917 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AcsPersonFaceResult.java` | 0.9975 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AcsPersonResult.java` | 0.9997 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AcsPersonTimeDetailResult.java` | 0.9994 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `person/result/AppImageStoreStatisticsResult.java` | 0.9212 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `person/service/AcsPersonService.java` | 0.6887 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `person/service/PersonRuleService.java` | 0.7029 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `record/impl/AcsElevatorRecordServiceImpl.java` | 0.7267 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `record/impl/AcsRecogRecordServiceImpl.java` | 0.8440 | C-显著差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `record/impl/PersonFileServiceImpl.java` | 0.9774 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `record/impl/SendRecordTimeServiceImpl.java` | 0.9959 | A-高度一致 | 高-Service/DaoImpl |
| cw-elevator-application-service | `record/param/AcsElevatorRecordAddParam.java` | 0.9983 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/AcsElevatorRecordAnalyseCountParam.java` | 0.9957 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/AcsElevatorRecordAnalyseCycleParam.java` | 0.9914 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/AcsElevatorRecordDetailParam.java` | 0.9988 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/AcsOpenDoorRecordAddParam.java` | 0.9977 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/AcsOpenDoorRecordEditParam.java` | 0.9977 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/AcsRecogRecordAddParam.java` | 0.9980 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/SendRecordSendInfoParam.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/SendRecordSendParam.java` | 0.9039 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `record/param/SendRecordTokenParam.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/result/AcsElevatorAnalyseCycleBusinessResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/result/AcsElevatorAnalyseCycleResult.java` | 0.9293 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `record/result/AcsElevatorPageRequestInfoResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/result/AcsElevatorRecordResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/result/SendRecordTokenResult.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `record/result/VisitorRecordPushEvent.java` | 0.9119 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `record/service/AcsElevatorRecordService.java` | 0.8857 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `record/service/AcsRecogRecordService.java` | 0.8765 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `record/service/PersonFileService.java` | 0.8743 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `record/service/SendRecordTimeService.java` | 0.9943 | A-高度一致 | 中-其他 |
| cw-elevator-application-service | `storage/AcsFileStorageService.java` | 0.9290 | B-轻度差异 | 中-其他 |
| cw-elevator-application-service | `storage/impl/AcsFileStorageServiceImpl.java` | 0.9357 | B-轻度差异 | 高-Service/DaoImpl |
| cw-elevator-application-service | `task/ElevatorRecordSendTask.java` | 0.8051 | C-显著差异 | 中-其他 |
| cw-elevator-application-service | `visitor/client/VisitorFeignClient.java` | 0.9706 | B-轻度差异 | 高-Feign/Client |
| cw-elevator-application-service | `visitor/fallback/VisitorFeignClientFallback.java` | 0.9459 | B-轻度差异 | 高-Feign/Client |
| cw-elevator-application-service | `visitor/param/VisitorGetsParam.java` | 0.9980 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `visitor/param/VisitorRecordQueryForm.java` | 1.0000 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `visitor/param/VisitorRecordQueryParam.java` | 0.9967 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `visitor/result/VisitorQueryResult.java` | 0.8717 | B-轻度差异 | 中-DTO表单 |
| cw-elevator-application-service | `visitor/result/VisitorRecordResult.java` | 0.9998 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `visitor/result/VisitorResult.java` | 0.9996 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `zone/client/ZoneFeignClient.java` | 0.9672 | B-轻度差异 | 高-Feign/Client |
| cw-elevator-application-service | `zone/fallback/ZoneFeignClientFallback.java` | 0.9279 | B-轻度差异 | 高-Feign/Client |
| cw-elevator-application-service | `zone/impl/ZoneServiceImpl.java` | 0.9880 | A-高度一致 | 高-Service/DaoImpl |
| cw-elevator-application-service | `zone/param/ZoneNextTreeParam.java` | 0.9853 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `zone/param/ZoneQueryParam.java` | 0.9938 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `zone/result/AgImageUploadResult.java` | 0.9977 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `zone/result/ZoneResult.java` | 0.9990 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `zone/result/ZoneTreeResult.java` | 0.9998 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-service | `zone/service/ZoneService.java` | 0.8729 | B-轻度差异 | 中-其他 |
| cw-elevator-application-web | `common/AbstractCloudwalkController.java` | 0.9465 | B-轻度差异 | 高-Controller |
| cw-elevator-application-web | `common/CloudwalkCallNewContext.java` | 0.9935 | A-高度一致 | 中-其他 |
| cw-elevator-application-web | `handler/AbstractEventHandler.java` | 0.9448 | B-轻度差异 | 中-其他 |
| cw-elevator-application-web | `handler/OpenDoorRecordEventHandler.java` | 0.7811 | C-显著差异 | 中-其他 |
| cw-elevator-application-web | `handler/PersonRecordEventHandler.java` | 0.8953 | B-轻度差异 | 中-其他 |
| cw-elevator-application-web | `handler/device/controller/AcsElevatorDeviceController.java` | 0.7094 | C-显著差异 | 高-Controller |
| cw-elevator-application-web | `handler/device/controller/AcsElevatorDeviceGetWayController.java` | 0.6779 | C-显著差异 | 高-Controller |
| cw-elevator-application-web | `handler/device/controller/AcsElevatorRestructureController.java` | 0.7986 | C-显著差异 | 高-Controller |
| cw-elevator-application-web | `handler/device/controller/FileController.java` | 0.9112 | B-轻度差异 | 高-Controller |
| cw-elevator-application-web | `handler/device/form/AcsDeviceQueryForm.java` | 0.9973 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsDeviceRestructureTaskForm.java` | 0.5446 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorCodeForm.java` | 0.9974 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorCodeQueryForm.java` | 0.9960 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorDeviceAddForm.java` | 0.9980 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorDeviceDeleteForm.java` | 0.9948 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorDeviceEditForm.java` | 0.9985 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorDeviceQueryByIdForm.java` | 0.9942 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorDeviceQueryForm.java` | 0.9988 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsElevatorRecordAddForm.java` | 0.9984 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsRestructureBindingForm.java` | 0.4876 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-web | `handler/device/form/AcsRestructureQueryForm.java` | 0.5049 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-web | `passrule/controller/AcsPassRuleController.java` | 0.8956 | B-轻度差异 | 高-Controller |
| cw-elevator-application-web | `passrule/form/AcsPassRuleDeleteForm.java` | 0.9984 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `passrule/form/AcsPassRuleEditForm.java` | 0.9995 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `passrule/form/AcsPassRuleFloorForm.java` | 0.9952 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `passrule/form/AcsPassRuleImageForm.java` | 0.9992 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `passrule/form/AcsPassRuleNewForm.java` | 0.9994 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `passrule/form/AcsPassRulePersonListForm.java` | 0.8235 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-web | `passrule/form/AcsPassRuleQueryForm.java` | 0.9853 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/controller/AcsPersonController.java` | 0.9087 | B-轻度差异 | 高-Controller |
| cw-elevator-application-web | `person/form/AcsPersonAddForm.java` | 0.9990 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonAddNewForm.java` | 0.9990 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonAddVisitorForm.java` | 0.2385 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonDeleteForm.java` | 0.9990 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonDetailForm.java` | 0.9979 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonEditForm.java` | 0.9989 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonFaceForm.java` | 0.9980 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonQueryForm.java` | 0.1247 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/AcsPersonTimeDetailForm.java` | 0.9981 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `person/form/PersonDetailQueryForm.java` | 0.5835 | C-显著差异 | 中-DTO表单 |
| cw-elevator-application-web | `record/controller/AcsElevatorRecordController.java` | 0.9023 | B-轻度差异 | 高-Controller |
| cw-elevator-application-web | `record/form/AcsElevatorRecordAnalyseCountForm.java` | 0.9983 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `record/form/AcsElevatorRecordAnalyseCycleForm.java` | 0.9978 | A-高度一致 | 中-DTO表单 |
| cw-elevator-application-web | `record/form/AcsElevatorRecordQueryForm.java` | 0.9985 | A-高度一致 | 中-DTO表单 |
### 仅 V1 / 仅 Maven 行
- `cw-elevator-application-common/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-data/device/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-data/person/dao/TenantVisitorFloorPolicyDao.java`**ONLY_MAVEN** — V2扩展-租户访客楼层
- `cw-elevator-application-data/person/dto/TenantVisitorFloorPolicyDto.java`**ONLY_MAVEN** — V2扩展-租户访客楼层
- `cw-elevator-application-data/person/impl/TenantVisitorFloorPolicyDaoImpl.java`**ONLY_MAVEN** — V2扩展-租户访客楼层
- `cw-elevator-application-data/person/mapper/TenantVisitorFloorPolicyMapper.java`**ONLY_MAVEN** — V2扩展-租户访客楼层
- `cw-elevator-application-service/CloudwalkSessionHolderConfiguration.java`**ONLY_MAVEN** — V2扩展-Session
- `cw-elevator-application-service/common/ElevatorRemoteIoExecutorConfig.java`**ONLY_MAVEN** — V2扩展-远程IO线程池
- `cw-elevator-application-service/common/ElevatorRemoteIoPoolProperties.java`**ONLY_MAVEN** — V2扩展-远程IO线程池
- `cw-elevator-application-service/common/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/device/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/mqtt/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/passrule/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/person/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/record/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/visitor/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-service/zone/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-web/handler/device/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-web/handler/package-info.java`**ONLY_MAVEN** — 工程化-package-info
- `cw-elevator-application-web/zone/util/ZoneTreeCollectors.java`**ONLY_MAVEN** — V2独有-工具类
## 5. 生成命令
```bash
cd maven-cw-elevator-application
./scripts/decompile_v1_elevator_jars.sh # 若尚未反编译 V1 jar
python3 tools/elevator_api_parity/scripts/v1_v2_diff_issues_report.py
```
@@ -0,0 +1,39 @@
# IMPL_DIFF 深挖与定责(2026-04-28
- 数据源:`V1-V2-BYTECODE-ROOTCAUSE.json` + `impl-diff-evidence-20260428/*`
- 归一化增强后(去跳转偏移/槽位号噪声):`IMPL_DIFF 13 -> 11``MATCH 244 -> 246`
- 说明:此前部分差异属于字节码文本噪声,不是语义差异。
## 1) 本轮修正动作
- 已修复依赖链伪差异:显式引入 `intelligent-cwoscomponent-interface`(父 POM + service 模块)。
- 已回退 `AcsElevatorDeviceGetWayController` 的 39202/39204 到 V1 行为;该类已不在 IMPL_DIFF 列表。
- 已增强比对归一化算法,消除跳转地址和局部槽位导致的误报。
## 2) 剩余 11 个 IMPL_DIFF 定责
| 类 | diff_lines | 初步定责 |
|---|---:|---|
| `cn.cloudwalk.elevator.util.StringUtils` | 536 | 高疑似还原漂移(工具类重写痕迹重,建议以 V1 class 反推修正) |
| `cn.cloudwalk.elevator.export.utils.ExcelUtil` | 377 | 高疑似还原漂移(导出工具字节码差异大) |
| `cn.cloudwalk.elevator.util.DateUtils` | 373 | 高疑似还原漂移(时间工具实现差异大) |
| `cn.cloudwalk.elevator.device.impl.AcsElevatorDeviceServiceImpl` | 269 | 中高风险实现漂移(业务服务实现差异大) |
| `cn.cloudwalk.elevator.handler.OpenDoorRecordEventHandler` | 45 | 事件处理逻辑调整(条件分支/调用指令变化) |
| `cn.cloudwalk.elevator.common.AbstractCloudwalkController` | 26 | 防御性增强(空请求属性兜底、消息回退) |
| `cn.cloudwalk.elevator.task.ElevatorRecordSendTask` | 22 | 集合调用与异常表小幅变化,偏工程性 |
| `cn.cloudwalk.elevator.handler.PersonRecordEventHandler` | 18 | 调用指令由 invokespecial->invokevirtual,需确认是否影响多态 |
| `cn.cloudwalk.elevator.common.UpdateFloorsTaskExecutor` | 14 | 线程池新增 keepAliveSeconds,属有意调优 |
| `cn.cloudwalk.elevator.handler.device.controller.FileController` | 14 | 常量池索引噪声级差异(几乎可忽略) |
| `cn.cloudwalk.elevator.common.AcsApplicationServiceImpl` | 11 | 常量池/指令对齐噪声级差异(几乎可忽略) |
## 3) 处理优先级(先大后小)
1. **P0(先修)**`StringUtils``DateUtils``ExcelUtil``AcsElevatorDeviceServiceImpl`
2. **P1(复核)**`OpenDoorRecordEventHandler``AbstractCloudwalkController``ElevatorRecordSendTask`
3. **P2(可后置)**`PersonRecordEventHandler``UpdateFloorsTaskExecutor``FileController``AcsApplicationServiceImpl`
## 4) 下一步建议(可直接执行)
- 对 P0 四类做“方法级回归修复”:以 `impl-diff-evidence-20260428/*.diff.txt` 为依据,逐方法回贴 V1 语义。
- 每修一个类即重新 `mvn -q -DskipTests package` + `bytecode_parity_rootcause.py`,确认 IMPL_DIFF 递减。
- 目标:先把 `IMPL_DIFF` 压到 <=5,再评估是否需要继续追求 0。
@@ -0,0 +1,136 @@
# V1/V2 修复复盘总表(2026-04-28
## 1. 复盘目标与结论
- 目标:复盘本轮 V2 为对齐 V1 所做修复,明确“改动点、差异点、风险点、后续收敛路径”。
- 结论:本轮属于**运行时行为对齐修复**,非核心业务重写;通过配置补齐与最小控制层兜底,实现 8 项差异接口 `old/new` 业务码一致。
---
## 2. 改动清单总览
| 类别 | 文件 | 改动摘要 | 目的 |
| -------- | -------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------ |
| 启动/Feign | `cw-elevator-application-starter/src/main/java/cn/cloudwalk/elevator/ElevatorApplication.java` | `@RibbonClient` 扩展为 `@RibbonClients`,覆盖 `ninca-crk-std` / `cwos-portal` / `ninca-common-component-organization` | 修复 Feign 无可用实例 |
| 过滤器 | `cw-elevator-application-starter/src/main/java/cn/cloudwalk/web/filter/CloudwalkContextParameterFilter.java`(新增) | 每请求构建/清理 Cloudwalk Session 上下文 | 避免异常链路出现空响应体,稳定上下文 |
| 人员接口 | `cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/person/controller/AcsPersonController.java` | `/add``/edit``/pageByApp` 增加缺参兜底返回 | 对齐 V1 缺参业务码 |
| 规则接口 | `cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/passrule/controller/AcsPassRuleController.java` | `/add` 增加缺参兜底返回 | 对齐 V1 缺参业务码 |
| 记录接口 | `cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/record/controller/AcsElevatorRecordController.java` | `/analyse/cycle``/analyse/count` 缺参兜底;`/page``/page/request` 增加可开关空结果映射 | 对齐 V1 行为 |
| 部署配置 | `deploy/v2-maven/application.properties` | 补齐 Feign/Ribbon 静态实例 + 兼容开关配置 | 运行态可达性与行为一致性 |
---
## 3. V1/V2 差异总表(修复前 -> 修复后)
| 维度 | 修复前 V2 相对 V1 | 修复后状态 | 风险等级 |
| ---------- | -------------------------------------------------------------------------- | ------------------------------------ | ---- |
| Feign 实例发现 | `cwos-portal``ninca-common-component-organization` 无可用实例,出现 `200 + 空body` | 已补齐 Ribbon 配置 + 启动类注册,返回进入正常 JSON 链路 | 中 |
| 参数校验行为 | 部分接口未在参数层提前失败,进入深层逻辑返回其他码 | 控制层最小兜底,缺参业务码对齐 V1 | 中 |
| 记录接口空结果语义 | V2 空结果返回成功;V1 在历史环境常表现为错误码 | 通过兼容开关可映射到 V1 错误码 | 中 |
| 代码主体一致性 | 核心 Controller/Service 主体与 V1大体一致 | 仍保持一致;新增的是兼容逻辑与配置 | 低 |
---
## 4. 配置差异总表(重点)
### 4.1 本轮新增/调整配置(V2)
| 配置键 | 当前值 | 作用 | 与 V1 关系 |
| -------------------------------------------------------------------- | ------------------------------------------------------- | ------------------ | ------------------- |
| `feign.portal.name` | `cwos-portal` | 明确 Feign 服务名映射 | V1 运行态隐式可用,V2 需显式补齐 |
| `cwos-portal.ribbon.NIWSServerListClassName` | `com.netflix.loadbalancer.ConfigurationBasedServerList` | 强制走配置型服务列表 | V1 表现上等效可用 |
| `cwos-portal.ribbon.listOfServers` | `10.128.161.95:80` | 指定目标实例 | V1 环境下等效可达链路 |
| `ninca-common-component-organization.ribbon.NIWSServerListClassName` | `com.netflix.loadbalancer.ConfigurationBasedServerList` | 强制走配置型服务列表 | V1 表现上等效可用 |
| `ninca-common-component-organization.ribbon.listOfServers` | `10.128.161.95:80` | 指定目标实例 | V1 环境下等效可达链路 |
| `elevator.compat.v1.record-empty-as-error` | `true`(对拍环境) | 将记录接口空结果映射为 V1 错误码 | V1行为兼容开关(V2新增) |
### 4.2 建议的环境取值
| 环境 | `elevator.compat.v1.record-empty-as-error` | 说明 |
| ----- | ------------------------------------------ | --------------------------- |
| 对拍/回归 | `true` | 优先保证 V1/V2 业务码一致 |
| 生产收敛 | `false`(建议) | 采用“空数据成功返回空列表”语义,减少历史异常语义绑定 |
---
## 5. 行为差异总表(接口视角)
| 接口 | 修复前差异 | 修复后结果 |
| ----------------------------------------------------- | ------------------------------- | ------------------- |
| `POST /elevator/person/add` | `old=76260405` / `new=76260527` | 对齐:`76260405` |
| `POST /elevator/person/edit` | `old=76260418` / `new=None` | 对齐:`76260418` |
| `POST /elevator/person/pageByApp` | `old=76260402` / `new=None` | 对齐:`76260402` |
| `POST /elevator/passRule/add` | `old=76260514` / `new=76260527` | 对齐:`76260514` |
| `POST /intelligent/acs/elevator/record/analyse/cycle` | `old=76260333` / `new=00000000` | 对齐:`76260333` |
| `POST /intelligent/acs/elevator/record/analyse/count` | `old=76260336` / `new=00000000` | 对齐:`76260336` |
| `POST /intelligent/acs/elevator/record/page` | `old=76260305` / `new=00000000` | 对齐:`76260305`(开关开启) |
| `POST /intelligent/acs/elevator/record/page/request` | `old=76260335` / `new=00000000` | 对齐:`76260335`(开关开启) |
---
## 6. 风险与技术债
### 6.1 当前风险
1. 控制层兜底校验属于“兼容补丁”,不等价于完全恢复原始 AOP 参数校验链路。
2. `record-empty-as-error` 为行为映射开关,若长期保持开启,可能固化历史异常语义。
3. 静态 `listOfServers` 对网络与目标服务可达性有耦合,环境迁移需同步更新。
### 6.2 技术债建议
1. 排查并恢复 `@CloudwalkParamsValidate` 在 V2 的完整生效链路(代理类型、切面装配、调用入口)。
2. 对 record 类接口定义最终产品语义(空数据成功 vs 按历史错误码),并统一基线。
3. 将外部依赖地址配置化分层(dev/test/prod),减少硬编码地址漂移风险。
---
## 7. 推荐下一步(收敛计划)
1. **短期(本周)**:固化回归脚本,确保 8 项关键接口作为门禁用例。
2. **中期(两周)**:完成 AOP 参数校验链路恢复,逐步替换控制层兜底。
3. **长期(版本收敛)**:关闭 `record-empty-as-error`,采用统一成功空结果语义并更新对拍标准。
---
## 8. 关联文档
- `tools/elevator_api_parity/report/DIFF-ROOTCAUSE-20260428.md`
- `tools/elevator_api_parity/report/parity-full-20260428-102136.json`
---
## 9. 方案勘误(2026-04-28
### 9.1 错误前提
- **误认为**:在同一工作区里修改「其他 Maven 子模块」(例如单独拉下来的 `maven-cloudwalk-cloud``cloudwalk-common-service` 源码),打包电梯应用时会自动带上这些改动。
- **实际情况**:电梯 fat-jar 使用的是 **Maven 解析到的依赖坐标与版本**(通常来自私服 Nexus)。只要 `pom.xml` 仍指向**旧版本** GAV,打包只会嵌入已发布的字节码;**本地改动的兄弟仓库源码不会进入制品**,除非:
- 升级对应依赖版本并安装/发布新版本到私服,且电梯工程引用该新版本;或
- 该代码本来就属于电梯多模块 reactor 内的模块并以源码编译进同一 artifact。
### 9.2 由此失效/需撤回的方案要素
1. **依赖「只改 cloud 公共模块源码、不升版本」的修复路径** — 对「生产仅替换 `cw-elevator-application-*.jar`」场景 **无效**
2. **Starter 内桥接切面 `CloudwalkParamsValidateBridgeAspect` + 扩展 `ElevatorApplication` / 额外 Filter 包扫描** — 已从当前分支工作区 **撤回**(恢复为仓库已提交版本);后续若再做校验链路修复,须明确落在 **会打进电梯 jar 的模块**内,且不假设未发布的依赖变更已生效。
3. **复盘文档第 2~7 节中涉及「兼容开关 `elevator.compat.v1.record-empty-as-error`、Controller 兜底」等表述** — 若与当前仓库 HEAD 不一致,以 **Git 仓库实际代码与部署约束**为准;本节作为对错误方案的更正说明保留。
### 9.3 后续正确约束(与生产对齐)
| 约束 | 含义 |
| ------- | ---------------------------------------------------------------------- |
| 仅换 jar | 有效改动必须落在 **电梯应用 reactor 打出 fat-jar 所包含的源码**(或同步升级并在私服可用的依赖版本)。 |
| 禁止随意加配置 | `application.properties` 新增项若生产无法下发,则不能在方案中依赖该开关。 |
| 证据链 | 差异分析应落到 **实际打进 jar 的类**(必要时对产物 `jar tf` / `javap` 核对),而不是仅改兄弟仓库未发布的源码。 |
@@ -0,0 +1,134 @@
# V1 原始程序 vs V2(基于 JD-GUI 复原源码编译)差异根因与修正(2026-04-28)
## 1. 本轮目标
不是继续做“表层 diff”,而是回答:
1) 差异来自 JD-GUI 还原偏差,还是其他因素?
2) 哪些差异是构建/依赖问题导致的“伪差异”?
3) 如何把差异收敛到“可修、可验证、可复现”的状态?
---
## 2. 已执行的多维度核查
### 2.1 构建维度(先消除假差异)
- 现象:`mvn -DskipTests package` 在 JDK8 下最初失败,大量 `cn.cloudwalk.client.cwoscomponent.intelligent.*` 类型“找不到符号”。
- 证据:构建日志中同时出现 `intelligent-cwoscomponent-interface` POM invalid 的历史告警;而服务源码大量直接 import 该接口包。
- 判定:这是 **依赖链不稳定** 导致的编译失败,不是 JD-GUI 语义还原问题。
#### 已修正(已落地)
- `pom.xml`(父 `dependencyManagement`)新增:
- `cn.cloudwalk.intelligent:intelligent-cwoscomponent-interface:${intelligent.cwoscomponent.version}`
- `cw-elevator-application-service/pom.xml` 新增显式依赖:
- `cn.cloudwalk.intelligent:intelligent-cwoscomponent-interface`
#### 修正后验证
- 使用 JDK8 重新构建:`mvn -q -DskipTests package` ✅ 成功。
---
### 2.2 依赖工件维度(确认类型是否真实存在)
-`cw_lib/intelligent-cwoscomponent-interface-2.9.2-xinghewan.jar` 执行 `jar tf`
- 已确认关键 class 存在:
- `.../device/result/DeviceResult.class`
- `.../imagestore/result/ImgStorePersonResult.class`
- `.../label/result/LabelDetailResult.class`
- `.../organization/result/OrganizationResult.class`
结论:源码 import 的这些类型在 V1 依赖工件中本就存在;此前编译报错是 classpath/依赖解析问题,而非源码“瞎 import”。
---
### 2.3 字节码维度(V1 jar vs V2 编译产物)
已新增脚本:
- `tools/elevator_api_parity/scripts/bytecode_parity_rootcause.py`
输出:
- `tools/elevator_api_parity/report/V1-V2-BYTECODE-ROOTCAUSE.md`
- `tools/elevator_api_parity/report/V1-V2-BYTECODE-ROOTCAUSE.json`
对比范围:四模块 `cn/cloudwalk/elevator/**` 主类(不含 `$` 内部类),按三维度比较:
1. 类集合(ONLY_V1 / ONLY_V2
2. API 签名(`javap -p -s` 归一化 hash
3. 方法实现(`javap -c -p` 归一化 hash
#### 统计结果
- `MATCH`: **244**
- `IMPL_DIFF`API 相同、实现不同): **13**
- `API_DIFF`: **48**
- `ONLY_V1`: **0**
- `ONLY_V2`: **8**
---
## 3. 根因归类(回答“是不是 JD-GUI 问题”)
### A. 非 JD-GUI 原因(已确认)
1) **依赖解析问题(已修)**
- 占比:构建阶段致命。
- 性质:工程依赖声明不足 + 私服/本地 POM 解析不稳定引起。
- 影响:会制造大量“源码看似错误”的假象。
2) **源码演进(非还原偏差)**
- 证据:`ONLY_V2=8`,主要是租户访客策略、Session/RemoteIO 配置、ZoneTreeCollectors 等新增类。
- 性质:V2 增量能力,不属于反编译错误。
### B. 可能涉及 JD-GUI/人工改写的区域
1) `IMPL_DIFF=13`
- API 未变,但方法字节码不同。
- 这些类是优先排查“JD-GUI 语句还原偏差 / 后续人工改写”候选。
2) `API_DIFF=48`
- 多数更像结构变化(字段/签名/类型变化),不应默认甩锅 JD-GUI。
- 需要逐类核对“是否是有意修复/增强”。
**结论**
- 不能把当前差异简单归因给 JD-GUI。
- 已确定至少一条主因是 **构建依赖链问题**(且已修复)。
- 剩余差异需按 `IMPL_DIFF``API_DIFF` 分治,不可混为“反编译失败”。
---
## 4. 下一步“彻底修正”执行清单(可直接开干)
1. **锁定基线(防回归)**
- 固化 JDK8 + 当前依赖声明;每次比对前先 `mvn -q -DskipTests package`
2. **优先处理 IMPL_DIFF13 个)**
- 每类做三方对照:`V1 class(javap)` vs `V1 CFR/JD源码` vs `V2源码`
- 目标:判定“JD-GUI 误还原”还是“有意改写”。
3. **再处理 API_DIFF48 个)**
- 按风险分层:Controller/Service > DTO/常量。
- 目标:保留业务必需改动,回退无意漂移。
4. **保留新增能力但可切换**
-`ONLY_V2` 中非必须特性(例如租户策略)增加兼容开关,避免影响 V1 对拍口径。
---
## 5. 本轮落地变更清单
- 新增:`tools/elevator_api_parity/scripts/bytecode_parity_rootcause.py`
- 新增:`tools/elevator_api_parity/report/V1-V2-BYTECODE-ROOTCAUSE.md`
- 新增:`tools/elevator_api_parity/report/V1-V2-BYTECODE-ROOTCAUSE.json`
- 更新:`pom.xml`(加入 `intelligent-cwoscomponent-interface``dependencyManagement`
- 更新:`cw-elevator-application-service/pom.xml`(显式加入 `intelligent-cwoscomponent-interface`
---
## 6. 结论(一句话)
当前差异并非“全是 JD-GUI 的锅”:已确认有一部分是 **依赖链问题**(已修复)和 **源码演进**;剩余部分已通过字节码分层定位到具体类集,可按清单继续收敛到与 V1 一致(或明确保留差异)。
@@ -0,0 +1,144 @@
#!/usr/bin/env python3
"""从 cw-elevator-application-web 的 *Controller.java 提取 Spring 路由,与 api_catalog.json 对照。"""
from __future__ import annotations
import argparse
import json
import re
from pathlib import Path
from typing import List, Optional, Set, Tuple
def _tool_root() -> Path:
return Path(__file__).resolve().parent.parent
def _java_root(tool_root: Path) -> Optional[Path]:
# tool_root = .../tools/elevator_api_parity → Maven 模块根为其 parent.parent
module_root = tool_root.parent.parent
cand = module_root / "cw-elevator-application-web" / "src" / "main" / "java"
return cand if cand.is_dir() else None
def _strip_path_quotes(s: str) -> str:
s = s.strip()
if s.startswith('"') and s.endswith('"'):
return s[1:-1]
return s
def collect_routes_from_java(java_root: Path) -> List[Tuple[str, str, str]]:
"""返回 (http_method, full_path, source_file) 列表。类上 @RequestMapping 为前缀,方法上 @PostMapping / @RequestMapping 为子路径。"""
out: List[Tuple[str, str, str]] = []
for fp in sorted(java_root.rglob("*Controller.java")):
rel = str(fp.relative_to(java_root))
text = fp.read_text(encoding="utf-8", errors="ignore")
ir = text.find("@RestController")
ic = text.find("public class", ir if ir >= 0 else 0)
head = text[ir:ic] if ir >= 0 and ic > ir else ""
body = text[ic:] if ic >= 0 else text
class_base = ""
mcb = re.search(r'@RequestMapping\s*\(\s*\{?\s*"([^"]+)"', head)
if mcb:
class_base = _strip_path_quotes(mcb.group(1)).rstrip("/")
segs: List[str] = []
segs += re.findall(r'@PostMapping\s*\(\s*\{?\s*"([^"]+)"', body)
segs += re.findall(r'@RequestMapping\s*\(\s*\{?\s*"([^"]+)"', body)
segs += re.findall(r'@RequestMapping\s*\(\s*value\s*=\s*\{\s*"([^"]+)"', body)
for raw in segs:
seg = _strip_path_quotes(raw)
if not seg or seg.startswith("{"):
continue
if class_base and seg.rstrip("/") == class_base.rstrip("/"):
continue
if not seg.startswith("/"):
seg = "/" + seg
full = (class_base + seg).replace("//", "/")
if not full.startswith("/"):
full = "/" + full
out.append(("POST", full, rel))
dedup: dict[str, Tuple[str, str, str]] = {}
for method, path, src in out:
key = f"{method}:{path}"
if key not in dedup:
dedup[key] = (method, path, src)
return list(dedup.values())
EXTRA_NOT_IN_JSON = [
("POST", "/file/imgupload", "FileControllermultipart/form-data,未纳入 JSON 冒烟)"),
]
def main() -> None:
ap = argparse.ArgumentParser()
ap.add_argument("--out", required=True, help="输出 .md 路径")
ap.add_argument("--catalog", help="api_catalog.json")
args = ap.parse_args()
root = _tool_root()
cat_path = Path(args.catalog or (root / "api_catalog.json"))
catalog_paths: Set[str] = set()
if cat_path.is_file():
data = json.loads(cat_path.read_text(encoding="utf-8"))
for ep in data.get("endpoints") or []:
p = ep.get("path") or ""
if p:
catalog_paths.add(p)
java_root = _java_root(root)
routes: List[Tuple[str, str, str]] = []
if java_root:
routes = collect_routes_from_java(java_root)
route_paths = {r[1] for r in routes}
extra_java = sorted(route_paths - catalog_paths)
missing_java = sorted(catalog_paths - route_paths)
lines: List[str] = [
"# 电梯应用后端 HTTP 走查(Controller 扫描 vs api_catalog\n\n",
f"- **扫描目录**: `{java_root or '(未找到 cw-elevator-application-web'}`\n",
f"- **catalog**: `{cat_path.resolve()}`(共 **{len(catalog_paths)}** 条 path\n\n",
"## 1. Java 声明路由(REST Controller\n\n",
"| 方法 | Path | 源文件 |\n",
"| ---- | ---- | ------ |\n",
]
for method, path, src in sorted(routes, key=lambda x: x[1]):
lines.append(f"| {method} | `{path}` | `{src}` |\n")
lines.extend(
[
"\n## 2. 未纳入 api_catalog 的 Controller 路径\n\n",
]
)
if extra_java:
for p in extra_java:
lines.append(f"- `{p}`\n")
else:
lines.append("- (无)\n")
lines.extend(["\n## 3. api_catalog 有而扫描未命中(请核对写法/网关前缀)\n\n"])
if missing_java:
for p in missing_java:
lines.append(f"- `{p}`\n")
else:
lines.append("- (无)\n")
lines.extend(["\n## 4. 其它说明\n\n"])
for _m, _p, note in EXTRA_NOT_IN_JSON:
lines.append(f"- **{_p}**{note}\n")
out = Path(args.out)
out.parent.mkdir(parents=True, exist_ok=True)
out.write_text("".join(lines), encoding="utf-8")
print(out.resolve())
if __name__ == "__main__":
main()
@@ -0,0 +1,223 @@
cn.cloudwalk.elevator:cw-elevator-application-starter:jar:2.0-SNAPSHOT
+- org.springframework.boot:spring-boot-starter-web:jar:1.5.17.RELEASE:compile
| +- org.springframework.boot:spring-boot-starter:jar:1.5.17.RELEASE:compile
| | +- org.springframework.boot:spring-boot:jar:1.5.17.RELEASE:compile
| | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.5.17.RELEASE:compile
| | +- org.springframework.boot:spring-boot-starter-logging:jar:1.5.17.RELEASE:compile
| | | +- ch.qos.logback:logback-classic:jar:1.1.11:compile
| | | | \- ch.qos.logback:logback-core:jar:1.1.11:compile
| | | +- org.slf4j:jcl-over-slf4j:jar:1.7.25:compile
| | | +- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
| | | \- org.slf4j:log4j-over-slf4j:jar:1.7.25:compile
| | \- org.yaml:snakeyaml:jar:1.17:compile
| +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.5.17.RELEASE:compile
| | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.34:compile
| | | \- org.apache.tomcat:tomcat-annotations-api:jar:8.5.34:compile
| | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.34:compile
| | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.34:compile
| +- org.hibernate:hibernate-validator:jar:5.3.6.Final:compile
| | +- javax.validation:validation-api:jar:1.1.0.Final:compile
| | +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
| | \- com.fasterxml:classmate:jar:1.3.4:compile
| +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.11.2:compile
| | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.0:compile
| | \- com.fasterxml.jackson.core:jackson-core:jar:2.8.11:compile
| +- org.springframework:spring-web:jar:4.3.20.RELEASE:compile
| | \- org.springframework:spring-beans:jar:4.3.20.RELEASE:compile
| \- org.springframework:spring-webmvc:jar:4.3.20.RELEASE:compile
| \- org.springframework:spring-expression:jar:4.3.20.RELEASE:compile
+- org.mybatis.spring.boot:mybatis-spring-boot-starter:jar:1.3.1:compile
| +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.5.17.RELEASE:compile
| | +- org.apache.tomcat:tomcat-jdbc:jar:8.5.34:compile
| | | \- org.apache.tomcat:tomcat-juli:jar:8.5.34:compile
| | \- org.springframework:spring-jdbc:jar:4.3.20.RELEASE:compile
| +- org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:jar:1.3.1:compile
| +- org.mybatis:mybatis:jar:3.4.6:compile
| \- org.mybatis:mybatis-spring:jar:1.3.2:compile
+- org.springframework.boot:spring-boot-starter-actuator:jar:1.5.17.RELEASE:compile
| \- org.springframework.boot:spring-boot-actuator:jar:1.5.17.RELEASE:compile
+- org.springframework.boot:spring-boot-starter-cache:jar:1.5.17.RELEASE:compile
| +- org.springframework:spring-context:jar:4.3.20.RELEASE:compile
| \- org.springframework:spring-context-support:jar:4.3.20.RELEASE:compile
+- org.springframework.boot:spring-boot-starter-aop:jar:1.5.17.RELEASE:compile
| +- org.springframework:spring-aop:jar:4.3.20.RELEASE:compile
| \- org.aspectj:aspectjweaver:jar:1.8.13:compile
+- org.springframework.cloud:spring-cloud-starter-openfeign:jar:1.4.7.RELEASE:compile
| +- org.springframework.cloud:spring-cloud-starter:jar:1.3.6.RELEASE:compile
| | +- org.springframework.cloud:spring-cloud-context:jar:1.3.6.RELEASE:compile
| | \- org.springframework.security:spring-security-rsa:jar:1.0.3.RELEASE:compile
| | \- org.bouncycastle:bcpkix-jdk15on:jar:1.55:compile
| | \- org.bouncycastle:bcprov-jdk15on:jar:1.55:compile
| +- org.springframework.cloud:spring-cloud-netflix-core:jar:1.4.7.RELEASE:compile
| +- org.springframework.cloud:spring-cloud-commons:jar:1.3.6.RELEASE:compile
| | +- org.springframework.security:spring-security-crypto:jar:4.2.9.RELEASE:compile
| | \- org.apache.httpcomponents:httpclient:jar:4.5.6:compile
| | +- org.apache.httpcomponents:httpcore:jar:4.4.10:compile
| | \- commons-codec:commons-codec:jar:1.10:compile
| +- io.github.openfeign:feign-core:jar:9.5.0:compile
| | \- org.jvnet:animal-sniffer-annotation:jar:1.0:compile
| +- io.github.openfeign:feign-slf4j:jar:9.5.0:compile
| | \- org.slf4j:slf4j-api:jar:1.7.25:compile
| +- io.github.openfeign:feign-hystrix:jar:9.5.0:compile
| | +- com.netflix.archaius:archaius-core:jar:0.7.4:compile
| | \- com.netflix.hystrix:hystrix-core:jar:1.5.12:compile
| | \- org.hdrhistogram:HdrHistogram:jar:2.1.9:compile
| +- org.springframework.cloud:spring-cloud-starter-netflix-ribbon:jar:1.4.7.RELEASE:compile
| | +- com.netflix.ribbon:ribbon:jar:2.2.5:compile
| | | +- com.netflix.ribbon:ribbon-transport:jar:2.2.5:runtime
| | | | +- io.reactivex:rxnetty-contexts:jar:0.4.9:runtime
| | | | \- io.reactivex:rxnetty-servo:jar:0.4.9:runtime
| | | +- javax.inject:javax.inject:jar:1:runtime
| | | \- io.reactivex:rxnetty:jar:0.4.9:runtime
| | +- com.netflix.ribbon:ribbon-core:jar:2.2.5:compile
| | | \- commons-lang:commons-lang:jar:2.6:compile
| | +- com.netflix.ribbon:ribbon-httpclient:jar:2.2.5:compile
| | | +- commons-collections:commons-collections:jar:3.2.2:runtime
| | | +- com.sun.jersey:jersey-client:jar:1.19.1:runtime
| | | | \- com.sun.jersey:jersey-core:jar:1.19.1:runtime
| | | | \- javax.ws.rs:jsr311-api:jar:1.1.1:runtime
| | | +- com.sun.jersey.contribs:jersey-apache-client4:jar:1.19.1:runtime
| | | +- com.netflix.servo:servo-core:jar:0.10.1:runtime
| | | | \- com.netflix.servo:servo-internal:jar:0.10.1:runtime
| | | \- com.netflix.netflix-commons:netflix-commons-util:jar:0.1.1:runtime
| | +- com.netflix.ribbon:ribbon-loadbalancer:jar:2.2.5:compile
| | | \- com.netflix.netflix-commons:netflix-statistics:jar:0.1.1:runtime
| | \- io.reactivex:rxjava:jar:1.2.0:compile
| \- org.springframework.cloud:spring-cloud-starter-netflix-archaius:jar:1.4.7.RELEASE:compile
| +- commons-configuration:commons-configuration:jar:1.8:compile
| \- com.google.guava:guava:jar:20.0:compile
+- cn.cloudwalk.elevator:cw-elevator-application-web:jar:2.0-SNAPSHOT:compile
| +- cn.cloudwalk.cloud:cloudwalk-common-web:jar:3.7.2-Brussels-SRX:compile
| | +- cn.cloudwalk.cloud:cloudwalk-common-result:jar:3.7.2-Brussels-SRX:compile
| | | +- org.apache.commons:commons-lang3:jar:3.5:compile
| | | \- joda-time:joda-time:jar:2.9.9:compile
| | \- org.jsoup:jsoup:jar:1.11.3:compile
| \- cn.cloudwalk.elevator:cw-elevator-application-service:jar:2.0-SNAPSHOT:compile
| +- cn.cloudwalk.cloud:cloudwalk-common-service:jar:3.7.2-Brussels-SRX:compile
| | +- org.springframework:spring-aspects:jar:4.3.20.RELEASE:compile
| | \- org.springframework.boot:spring-boot-starter-data-redis:jar:1.5.17.RELEASE:compile
| | +- org.springframework.data:spring-data-redis:jar:1.8.16.RELEASE:compile
| | | +- org.springframework.data:spring-data-keyvalue:jar:1.2.16.RELEASE:compile
| | | | \- org.springframework.data:spring-data-commons:jar:1.13.16.RELEASE:compile
| | | \- org.springframework:spring-oxm:jar:4.3.20.RELEASE:compile
| | \- redis.clients:jedis:jar:2.9.0:compile
| | \- org.apache.commons:commons-pool2:jar:2.4.3:compile
| +- org.springframework:spring-tx:jar:4.3.20.RELEASE:compile
| +- cn.cloudwalk.cloud:cloudwalk-common-serial:jar:3.7.2-Brussels-SRX:compile
| | \- com.alibaba:fastjson:jar:1.2.73:compile
| +- cn.cloudwalk:cwos-java-sdk-resource:jar:1.0.0-SNAPSHOT:compile
| | +- cn.cloudwalk.cloud:cwos-component-resource-interface:jar:1.0.0-SNAPSHOT:compile
| | | +- cn.cloudwalk.cloud:cwos-component-resource-data:jar:1.0.0-SNAPSHOT:compile
| | | | \- org.apache.commons:commons-collections4:jar:4.4:compile
| | | \- org.hibernate.validator:hibernate-validator:jar:6.0.22.Final:compile
| | \- cn.cloudwalk:cwos-portal-interface:jar:1.0.0-SNAPSHOT:compile
| | +- cn.cloudwalk:cwos-device-pkg-stub:jar:1.0.0-SNAPSHOT:compile
| | \- org.springframework.boot:spring-boot-starter-validation:jar:1.5.17.RELEASE:compile
| +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.8.11:compile
| +- cn.cloudwalk.intelligent:cloudwalk-intelligent-component-lock:jar:1.1.1-SNAPSHOT:compile
| | +- org.redisson:redisson:jar:2.15.2:compile
| | | +- io.netty:netty-common:jar:4.1.33.Final:compile
| | | | \- org.jctools:jctools-core:jar:2.1.1:compile
| | | +- io.netty:netty-codec:jar:4.1.33.Final:compile
| | | +- io.netty:netty-buffer:jar:4.1.33.Final:compile
| | | +- io.netty:netty-transport:jar:4.1.33.Final:compile
| | | | \- io.netty:netty-resolver:jar:4.1.33.Final:compile
| | | +- io.netty:netty-resolver-dns:jar:4.1.33.Final:compile
| | | | \- io.netty:netty-codec-dns:jar:4.1.33.Final:compile
| | | +- io.netty:netty-handler:jar:4.1.33.Final:compile
| | | +- javax.cache:cache-api:jar:1.0.0:compile
| | | +- io.projectreactor:reactor-stream:jar:2.0.8.RELEASE:compile
| | | | \- io.projectreactor:reactor-core:jar:2.0.8.RELEASE:compile
| | | +- io.reactivex.rxjava2:rxjava:jar:2.1.13:compile
| | | | \- org.reactivestreams:reactive-streams:jar:1.0.2:compile
| | | +- de.ruedigermoeller:fst:jar:2.56:compile
| | | +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.8.11:compile
| | | +- net.bytebuddy:byte-buddy:jar:1.9.6:compile
| | | | \- net.bytebuddy:byte-buddy-dep:jar:1.9.6:compile
| | | | \- org.ow2.asm:asm-commons:jar:7.0:compile
| | | \- org.jodd:jodd-bean:jar:3.7.1:compile
| | | \- org.jodd:jodd-core:jar:3.7.1:compile
| | \- org.redisson:redisson-spring-boot-starter:jar:2.15.2:compile
| | \- org.redisson:redisson-spring-data-18:jar:2.15.2:compile
| +- cn.cloudwalk.cloud:cloudwalk-common-event:jar:3.7.2-Brussels-SRX:compile
| | +- org.apache.kafka:kafka-clients:jar:2.0.1:compile
| | | +- org.lz4:lz4-java:jar:1.4.1:compile
| | | \- org.xerial.snappy:snappy-java:jar:1.1.7.1:compile
| | \- commons-logging:commons-logging:jar:1.2:compile
| +- cn.cloudwalk.cloud:cwos-sdk-event:jar:1.5.0-SNAPSHOT:compile
| | \- org.reflections:reflections:jar:0.9.12:compile
| | \- org.javassist:javassist:jar:3.21.0-GA:compile
| +- cn.cloudwalk.elevator:cw-elevator-application-data:jar:2.0-SNAPSHOT:compile
| | +- cn.cloudwalk.elevator:cw-elevator-application-common:jar:2.0-SNAPSHOT:compile
| | | +- org.apache.poi:poi:jar:3.15:compile
| | | +- org.apache.poi:poi-ooxml:jar:3.15:compile
| | | | +- org.apache.poi:poi-ooxml-schemas:jar:3.15:compile
| | | | | \- org.apache.xmlbeans:xmlbeans:jar:2.6.0:compile
| | | | | \- stax:stax-api:jar:1.0.1:compile
| | | | \- com.github.virtuald:curvesapi:jar:1.04:compile
| | | +- org.apache.ant:ant:jar:1.9.6:compile
| | | | \- org.apache.ant:ant-launcher:jar:1.9.6:compile
| | | +- net.coobird:thumbnailator:jar:0.4.8:compile
| | | +- com.google.zxing:core:jar:3.3.3:compile
| | | +- net.lingala.zip4j:zip4j:jar:2.6.2:compile
| | | \- org.projectlombok:lombok:jar:1.16.22:compile
| | +- mysql:mysql-connector-java:jar:5.1.47:compile
| | +- com.zaxxer:HikariCP:jar:2.5.1:compile
| | +- com.github.pagehelper:pagehelper:jar:5.1.2:compile
| | | \- com.github.jsqlparser:jsqlparser:jar:1.0:compile
| | +- com.github.pagehelper:pagehelper-spring-boot-autoconfigure:jar:1.2.5:compile
| | \- org.apache.shardingsphere:sharding-jdbc-spring-boot-starter:jar:4.0.0:compile
| | +- org.apache.shardingsphere:sharding-spring-boot-util:jar:4.0.0:compile
| | | \- org.apache.shardingsphere:sharding-core-common:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-spi:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-sql-parser-relation:jar:4.0.0:compile
| | | | \- org.antlr:antlr4-runtime:jar:4.7.2:compile
| | | +- org.apache.shardingsphere:sharding-core-api:jar:4.0.0:compile
| | | \- org.codehaus.groovy:groovy:jar:indy:2.4.5:compile
| | \- org.apache.shardingsphere:sharding-jdbc-core:jar:4.0.0:compile
| | +- org.apache.shardingsphere:sharding-core-entry:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-sql-parser-engine:jar:4.0.0:compile
| | | | \- org.apache.shardingsphere:shardingsphere-sql-parser-spi:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-sql-parser-sql92:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-sql-parser-mysql:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-sql-parser-postgresql:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-sql-parser-oracle:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:shardingsphere-sql-parser-sqlserver:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:sharding-core-route:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:sharding-core-rewrite:jar:4.0.0:compile
| | | | \- org.apache.shardingsphere:shardingsphere-rewrite-engine:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:encrypt-core-rewrite:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:sharding-core-execute:jar:4.0.0:compile
| | | | \- org.apache.shardingsphere:shardingsphere-execute:jar:4.0.0:compile
| | | +- org.apache.shardingsphere:sharding-core-merge:jar:4.0.0:compile
| | | | \- org.apache.shardingsphere:shardingsphere-merge:jar:4.0.0:compile
| | | \- org.apache.shardingsphere:encrypt-core-merge:jar:4.0.0:compile
| | \- org.apache.shardingsphere:sharding-transaction-core:jar:4.0.0:compile
| +- cn.cloudwalk.intelligent:davinci-manager-storage:jar:1.1.7-SNAPSHOT:compile
| | +- cn.cloudwalk.intelligent:davinci-manager-common:jar:1.1.7-SNAPSHOT:compile
| | +- io.github.openfeign.form:feign-form:jar:3.0.3:compile
| | +- io.github.openfeign.form:feign-form-spring:jar:3.0.3:compile
| | +- io.github.openfeign:feign-okhttp:jar:9.5.0:compile
| | | \- com.squareup.okhttp3:okhttp:jar:3.8.1:compile
| | | \- com.squareup.okio:okio:jar:1.13.0:compile
| | \- commons-io:commons-io:jar:2.5:compile
| +- cn.cloudwalk.intelligent:intelligent-cwoscomponent-rest:jar:2.9.2-xinghewan:compile
| +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
| \- com.google.code.findbugs:jsr305:jar:3.0.2:compile
\- org.springframework.boot:spring-boot-starter-test:jar:1.5.17.RELEASE:test
+- org.springframework.boot:spring-boot-test:jar:1.5.17.RELEASE:test
+- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.5.17.RELEASE:test
+- com.jayway.jsonpath:json-path:jar:2.2.0:test
| \- net.minidev:json-smart:jar:2.2.1:test
| \- net.minidev:accessors-smart:jar:1.1:test
| \- org.ow2.asm:asm:jar:5.0.3:compile
+- junit:junit:jar:4.12:test
+- org.assertj:assertj-core:jar:2.6.0:test
+- org.mockito:mockito-core:jar:1.10.19:test
| \- org.objenesis:objenesis:jar:2.1:compile
+- org.hamcrest:hamcrest-core:jar:1.3:test
+- org.hamcrest:hamcrest-library:jar:1.3:test
+- org.skyscreamer:jsonassert:jar:1.4.0:test
| \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
+- org.springframework:spring-core:jar:4.3.20.RELEASE:compile
\- org.springframework:spring-test:jar:4.3.20.RELEASE:test
@@ -0,0 +1,14 @@
{
"generated_at": "2026-04-29T01:06:57.465958Z",
"count": 1,
"items": [
{
"module": "cw-elevator-application-common",
"class_name": "cn.cloudwalk.elevator.util.StringUtils",
"v1_file": "/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/impl-diff-evidence-20260428/cn_cloudwalk_elevator_util_StringUtils.v1.javap.txt",
"v2_file": "/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/impl-diff-evidence-20260428/cn_cloudwalk_elevator_util_StringUtils.v2.javap.txt",
"diff_file": "/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/elevator_api_parity/report/impl-diff-evidence-20260428/cn_cloudwalk_elevator_util_StringUtils.diff.txt",
"diff_lines": 41
}
]
}
@@ -0,0 +1,26 @@
--- cn.cloudwalk.elevator.common.AbstractCloudwalkController.v1
+++ cn.cloudwalk.elevator.common.AbstractCloudwalkController.v2
@@ -72,6 +72,12 @@
Code:
invokestatic # // Method org/springframework/web/context/request/RequestContextHolder.getRequestAttributes:()Lorg/springframework/web/context/request/RequestAttributes;
checkcast # // class org/springframework/web/context/request/ServletRequestAttributes
+astore_1
+aload_1
+ifnonnull @
+aconst_null
+areturn
+aload_1
invokevirtual # // Method org/springframework/web/context/request/ServletRequestAttributes.getRequest:()Ljavax/servlet/http/HttpServletRequest;
areturn
public java.lang.String getMessage(java.lang.String, java.lang.String);
@@ -127,6 +133,10 @@
aload _
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
aload_3
+ifnull @
+aload_3
+goto @
+aload_1
areturn
Exception table:
from to target type
@@ -0,0 +1,134 @@
public abstract class cn.cloudwalk.elevator.common.AbstractCloudwalkController {
protected final org.slf4j.Logger LOGGER;
private org.springframework.context.MessageSource messageSource;
private cn.cloudwalk.cloud.context.CloudwalkSessionContextHolder cloudwalkSessionContextHolder;
public cn.cloudwalk.elevator.common.AbstractCloudwalkController();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
aload_0
aload_0
invokevirtual # // Method java/lang/Object.getClass:()Ljava/lang/Class;
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putfield # // Field LOGGER:Lorg/slf4j/Logger;
return
public cn.cloudwalk.cloud.context.CloudwalkCallContext getCloudwalkContext();
Code:
aload_0
getfield # // Field cloudwalkSessionContextHolder:Lcn/cloudwalk/cloud/context/CloudwalkSessionContextHolder;
invokestatic # // Method cn/cloudwalk/cloud/context/CloudwalkCallContextBuilder.buildContext:(Lcn/cloudwalk/cloud/context/CloudwalkSessionContextHolder;)Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
astore_1
invokestatic # // Method org/springframework/web/context/request/RequestContextHolder.getRequestAttributes:()Lorg/springframework/web/context/request/RequestAttributes;
checkcast # // class org/springframework/web/context/request/ServletRequestAttributes
astore_2
aconst_null
aload_2
if_acmpeq 82
new # // class cn/cloudwalk/cloud/session/extend/DefaultExtendContext
dup
invokespecial # // Method cn/cloudwalk/cloud/session/extend/DefaultExtendContext."<init>":()V
astore_3
new # // class cn/cloudwalk/elevator/context/CloudWalkExtendContextValue
dup
invokespecial # // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue."<init>":()V
astore _
aload_2
invokevirtual # // Method org/springframework/web/context/request/ServletRequestAttributes.getRequest:()Ljavax/servlet/http/HttpServletRequest;
astore _
aload _
aload _
ldc # // String loginid
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue.setLoginId:(Ljava/lang/String;)V
aload _
aload _
ldc # // String authorization
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue.setAuthorization:(Ljava/lang/String;)V
aload_3
aload _
invokevirtual # // Method cn/cloudwalk/cloud/session/extend/DefaultExtendContext.setValue:(Ljava/lang/Object;)V
aload_1
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.setExt:(Lcn/cloudwalk/cloud/session/extend/ExtendContext;)V
aload_1
areturn
public java.lang.String getToken();
Code:
invokestatic # // Method org/springframework/web/context/request/RequestContextHolder.getRequestAttributes:()Lorg/springframework/web/context/request/RequestAttributes;
checkcast # // class org/springframework/web/context/request/ServletRequestAttributes
astore_1
aconst_null
aload_1
if_acmpeq 24
aload_1
invokevirtual # // Method org/springframework/web/context/request/ServletRequestAttributes.getRequest:()Ljavax/servlet/http/HttpServletRequest;
ldc # // String authorization
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
areturn
aconst_null
areturn
protected javax.servlet.http.HttpServletRequest getHttpServletRequest();
Code:
invokestatic # // Method org/springframework/web/context/request/RequestContextHolder.getRequestAttributes:()Lorg/springframework/web/context/request/RequestAttributes;
checkcast # // class org/springframework/web/context/request/ServletRequestAttributes
invokevirtual # // Method org/springframework/web/context/request/ServletRequestAttributes.getRequest:()Ljavax/servlet/http/HttpServletRequest;
areturn
public java.lang.String getMessage(java.lang.String, java.lang.String);
Code:
aload_0
getfield # // Field messageSource:Lorg/springframework/context/MessageSource;
aload_1
aconst_null
aload_2
invokestatic # // Method org/springframework/context/i18n/LocaleContextHolder.getLocale:()Ljava/util/Locale;
invokeinterface # // InterfaceMethod org/springframework/context/MessageSource.getMessage:(Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;
areturn
public java.lang.String getMessage(java.lang.String);
Code:
aload_0
aload_1
ldc # // String
invokevirtual # // Method getMessage:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
areturn
protected void makeExcelresponse(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String);
Code:
aload_2
ldc # // String application/vnd.ms-excel;charset=utf-8
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletResponse.setContentType:(Ljava/lang/String;)V
aload_2
ldc # // String Content-Disposition
new # // class java/lang/StringBuilder
dup
invokespecial # // Method java/lang/StringBuilder."<init>":()V
ldc # // String attachment;filename=
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload_0
aload_3
aload_1
invokevirtual # // Method encodeFileName:(Ljava/lang/String;Ljavax/servlet/http/HttpServletRequest;)Ljava/lang/String;
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletResponse.setHeader:(Ljava/lang/String;Ljava/lang/String;)V
return
protected java.lang.String encodeFileName(java.lang.String, javax.servlet.http.HttpServletRequest);
Code:
aconst_null
astore_3
aload_1
ldc # // String UTF-8
invokestatic # // Method java/net/URLEncoder.encode:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
astore_3
goto @
astore _
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 转换文件名字符类型失败,原因:
aload _
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
aload_3
areturn
Exception table:
from to target type
2 9 12 Class java/lang/Exception
}
@@ -0,0 +1,144 @@
public abstract class cn.cloudwalk.elevator.common.AbstractCloudwalkController {
protected final org.slf4j.Logger LOGGER;
private org.springframework.context.MessageSource messageSource;
private cn.cloudwalk.cloud.context.CloudwalkSessionContextHolder cloudwalkSessionContextHolder;
public cn.cloudwalk.elevator.common.AbstractCloudwalkController();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
aload_0
aload_0
invokevirtual # // Method java/lang/Object.getClass:()Ljava/lang/Class;
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putfield # // Field LOGGER:Lorg/slf4j/Logger;
return
public cn.cloudwalk.cloud.context.CloudwalkCallContext getCloudwalkContext();
Code:
aload_0
getfield # // Field cloudwalkSessionContextHolder:Lcn/cloudwalk/cloud/context/CloudwalkSessionContextHolder;
invokestatic # // Method cn/cloudwalk/cloud/context/CloudwalkCallContextBuilder.buildContext:(Lcn/cloudwalk/cloud/context/CloudwalkSessionContextHolder;)Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
astore_1
invokestatic # // Method org/springframework/web/context/request/RequestContextHolder.getRequestAttributes:()Lorg/springframework/web/context/request/RequestAttributes;
checkcast # // class org/springframework/web/context/request/ServletRequestAttributes
astore_2
aconst_null
aload_2
if_acmpeq 82
new # // class cn/cloudwalk/cloud/session/extend/DefaultExtendContext
dup
invokespecial # // Method cn/cloudwalk/cloud/session/extend/DefaultExtendContext."<init>":()V
astore_3
new # // class cn/cloudwalk/elevator/context/CloudWalkExtendContextValue
dup
invokespecial # // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue."<init>":()V
astore _
aload_2
invokevirtual # // Method org/springframework/web/context/request/ServletRequestAttributes.getRequest:()Ljavax/servlet/http/HttpServletRequest;
astore _
aload _
aload _
ldc # // String loginid
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue.setLoginId:(Ljava/lang/String;)V
aload _
aload _
ldc # // String authorization
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue.setAuthorization:(Ljava/lang/String;)V
aload_3
aload _
invokevirtual # // Method cn/cloudwalk/cloud/session/extend/DefaultExtendContext.setValue:(Ljava/lang/Object;)V
aload_1
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.setExt:(Lcn/cloudwalk/cloud/session/extend/ExtendContext;)V
aload_1
areturn
public java.lang.String getToken();
Code:
invokestatic # // Method org/springframework/web/context/request/RequestContextHolder.getRequestAttributes:()Lorg/springframework/web/context/request/RequestAttributes;
checkcast # // class org/springframework/web/context/request/ServletRequestAttributes
astore_1
aconst_null
aload_1
if_acmpeq 24
aload_1
invokevirtual # // Method org/springframework/web/context/request/ServletRequestAttributes.getRequest:()Ljavax/servlet/http/HttpServletRequest;
ldc # // String authorization
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
areturn
aconst_null
areturn
protected javax.servlet.http.HttpServletRequest getHttpServletRequest();
Code:
invokestatic # // Method org/springframework/web/context/request/RequestContextHolder.getRequestAttributes:()Lorg/springframework/web/context/request/RequestAttributes;
checkcast # // class org/springframework/web/context/request/ServletRequestAttributes
astore_1
aload_1
ifnonnull @
aconst_null
areturn
aload_1
invokevirtual # // Method org/springframework/web/context/request/ServletRequestAttributes.getRequest:()Ljavax/servlet/http/HttpServletRequest;
areturn
public java.lang.String getMessage(java.lang.String, java.lang.String);
Code:
aload_0
getfield # // Field messageSource:Lorg/springframework/context/MessageSource;
aload_1
aconst_null
aload_2
invokestatic # // Method org/springframework/context/i18n/LocaleContextHolder.getLocale:()Ljava/util/Locale;
invokeinterface # // InterfaceMethod org/springframework/context/MessageSource.getMessage:(Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;
areturn
public java.lang.String getMessage(java.lang.String);
Code:
aload_0
aload_1
ldc # // String
invokevirtual # // Method getMessage:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
areturn
protected void makeExcelresponse(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String);
Code:
aload_2
ldc # // String application/vnd.ms-excel;charset=utf-8
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletResponse.setContentType:(Ljava/lang/String;)V
aload_2
ldc # // String Content-Disposition
new # // class java/lang/StringBuilder
dup
invokespecial # // Method java/lang/StringBuilder."<init>":()V
ldc # // String attachment;filename=
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload_0
aload_3
aload_1
invokevirtual # // Method encodeFileName:(Ljava/lang/String;Ljavax/servlet/http/HttpServletRequest;)Ljava/lang/String;
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokeinterface # // InterfaceMethod javax/servlet/http/HttpServletResponse.setHeader:(Ljava/lang/String;Ljava/lang/String;)V
return
protected java.lang.String encodeFileName(java.lang.String, javax.servlet.http.HttpServletRequest);
Code:
aconst_null
astore_3
aload_1
ldc # // String UTF-8
invokestatic # // Method java/net/URLEncoder.encode:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
astore_3
goto @
astore _
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 转换文件名字符类型失败,原因:
aload _
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
aload_3
ifnull @
aload_3
goto @
aload_1
areturn
Exception table:
from to target type
2 9 12 Class java/lang/Exception
}
@@ -0,0 +1,11 @@
--- cn.cloudwalk.elevator.common.AcsApplicationServiceImpl.v1
+++ cn.cloudwalk.elevator.common.AcsApplicationServiceImpl.v2
@@ -24,7 +24,7 @@
invokeinterface # // InterfaceMethod cn/cloudwalk/client/resource/application/service/ApplicationService.query:(Lcn/cloudwalk/client/resource/application/param/ApplicationQueryParam;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore_3
aload_3
-invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
+invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
@@ -0,0 +1,66 @@
public class cn.cloudwalk.elevator.common.AcsApplicationServiceImpl implements cn.cloudwalk.elevator.common.service.AcsApplicationService {
private static final org.slf4j.Logger logger;
private cn.cloudwalk.client.resource.application.service.ApplicationService applicationService;
public cn.cloudwalk.elevator.common.AcsApplicationServiceImpl();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
return
public java.lang.String getApplicationId(java.lang.String) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
new # // class cn/cloudwalk/client/resource/application/param/ApplicationQueryParam
dup
invokespecial # // Method cn/cloudwalk/client/resource/application/param/ApplicationQueryParam."<init>":()V
astore_2
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/client/resource/application/param/ApplicationQueryParam.setBusinessId:(Ljava/lang/String;)V
aload_2
ldc # // String elevator-app
invokevirtual # // Method cn/cloudwalk/client/resource/application/param/ApplicationQueryParam.setServiceCode:(Ljava/lang/String;)V
aload_0
getfield # // Field applicationService:Lcn/cloudwalk/client/resource/application/service/ApplicationService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/client/resource/application/service/ApplicationService.query:(Lcn/cloudwalk/client/resource/application/param/ApplicationQueryParam;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore_3
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/Collection
invokestatic # // Method org/apache/commons/collections4/CollectionUtils.isNotEmpty:(Ljava/util/Collection;)Z
ifeq @
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
iconst_0
invokeinterface # // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/client/resource/application/result/ApplicationResult
invokevirtual # // Method cn/cloudwalk/client/resource/application/result/ApplicationResult.getId:()Ljava/lang/String;
areturn
getstatic # // Field logger:Lorg/slf4j/Logger;
ldc # // String 未查到applicationId
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;)V
new # // class cn/cloudwalk/cloud/exception/ServiceException
dup
ldc # // String 76260005
ldc # // String 未查到applicationId
invokespecial # // Method cn/cloudwalk/cloud/exception/ServiceException."<init>":(Ljava/lang/String;Ljava/lang/String;)V
athrow
getstatic # // Field logger:Lorg/slf4j/Logger;
ldc # // String 查询applicationId失败
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;)V
new # // class cn/cloudwalk/cloud/exception/ServiceException
dup
ldc # // String 76260006
ldc # // String 查询applicationId失败
invokespecial # // Method cn/cloudwalk/cloud/exception/ServiceException."<init>":(Ljava/lang/String;Ljava/lang/String;)V
athrow
static {};
Code:
ldc # // class cn/cloudwalk/elevator/common/AcsApplicationServiceImpl
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putstatic # // Field logger:Lorg/slf4j/Logger;
return
}
@@ -0,0 +1,66 @@
public class cn.cloudwalk.elevator.common.AcsApplicationServiceImpl implements cn.cloudwalk.elevator.common.service.AcsApplicationService {
private static final org.slf4j.Logger logger;
private cn.cloudwalk.client.resource.application.service.ApplicationService applicationService;
public cn.cloudwalk.elevator.common.AcsApplicationServiceImpl();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
return
public java.lang.String getApplicationId(java.lang.String) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
new # // class cn/cloudwalk/client/resource/application/param/ApplicationQueryParam
dup
invokespecial # // Method cn/cloudwalk/client/resource/application/param/ApplicationQueryParam."<init>":()V
astore_2
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/client/resource/application/param/ApplicationQueryParam.setBusinessId:(Ljava/lang/String;)V
aload_2
ldc # // String elevator-app
invokevirtual # // Method cn/cloudwalk/client/resource/application/param/ApplicationQueryParam.setServiceCode:(Ljava/lang/String;)V
aload_0
getfield # // Field applicationService:Lcn/cloudwalk/client/resource/application/service/ApplicationService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/client/resource/application/service/ApplicationService.query:(Lcn/cloudwalk/client/resource/application/param/ApplicationQueryParam;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore_3
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/Collection
invokestatic # // Method org/apache/commons/collections4/CollectionUtils.isNotEmpty:(Ljava/util/Collection;)Z
ifeq @
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
iconst_0
invokeinterface # // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/client/resource/application/result/ApplicationResult
invokevirtual # // Method cn/cloudwalk/client/resource/application/result/ApplicationResult.getId:()Ljava/lang/String;
areturn
getstatic # // Field logger:Lorg/slf4j/Logger;
ldc # // String 未查到applicationId
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;)V
new # // class cn/cloudwalk/cloud/exception/ServiceException
dup
ldc # // String 76260005
ldc # // String 未查到applicationId
invokespecial # // Method cn/cloudwalk/cloud/exception/ServiceException."<init>":(Ljava/lang/String;Ljava/lang/String;)V
athrow
getstatic # // Field logger:Lorg/slf4j/Logger;
ldc # // String 查询applicationId失败
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;)V
new # // class cn/cloudwalk/cloud/exception/ServiceException
dup
ldc # // String 76260006
ldc # // String 查询applicationId失败
invokespecial # // Method cn/cloudwalk/cloud/exception/ServiceException."<init>":(Ljava/lang/String;Ljava/lang/String;)V
athrow
static {};
Code:
ldc # // class cn/cloudwalk/elevator/common/AcsApplicationServiceImpl
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putstatic # // Field logger:Lorg/slf4j/Logger;
return
}
@@ -0,0 +1,14 @@
--- cn.cloudwalk.elevator.common.UpdateFloorsTaskExecutor.v1
+++ cn.cloudwalk.elevator.common.UpdateFloorsTaskExecutor.v2
@@ -32,6 +32,11 @@
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getQueueCapacity:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setQueueCapacity:(I)V
aload_1
+aload_0
+getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
+invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getKeepAliveSeconds:()I
+invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setKeepAliveSeconds:(I)V
+aload_1
ldc # // String update-floors-pool-
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setThreadNamePrefix:(Ljava/lang/String;)V
aload_1
@@ -0,0 +1,46 @@
public class cn.cloudwalk.elevator.common.UpdateFloorsTaskExecutor {
private cn.cloudwalk.elevator.common.UpdateFloorsPoolProperties updateFloorsPoolProperties;
public cn.cloudwalk.elevator.common.UpdateFloorsTaskExecutor();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
return
public org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor pictureRevisionTaskExecutor();
Code:
new # // class org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor
dup
invokespecial # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor."<init>":()V
astore_1
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getCorePoolSize:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setCorePoolSize:(I)V
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.isAllowCoreThreadTimeOut:()Z
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setAllowCoreThreadTimeOut:(Z)V
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getMaxPoolSize:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setMaxPoolSize:(I)V
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getQueueCapacity:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setQueueCapacity:(I)V
aload_1
ldc # // String update-floors-pool-
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setThreadNamePrefix:(Ljava/lang/String;)V
aload_1
new # // class java/util/concurrent/ThreadPoolExecutor$AbortPolicy
dup
invokespecial # // Method java/util/concurrent/ThreadPoolExecutor$AbortPolicy."<init>":()V
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setRejectedExecutionHandler:(Ljava/util/concurrent/RejectedExecutionHandler;)V
aload_1
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.initialize:()V
aload_1
areturn
}
@@ -0,0 +1,51 @@
public class cn.cloudwalk.elevator.common.UpdateFloorsTaskExecutor {
private cn.cloudwalk.elevator.common.UpdateFloorsPoolProperties updateFloorsPoolProperties;
public cn.cloudwalk.elevator.common.UpdateFloorsTaskExecutor();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
return
public org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor pictureRevisionTaskExecutor();
Code:
new # // class org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor
dup
invokespecial # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor."<init>":()V
astore_1
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getCorePoolSize:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setCorePoolSize:(I)V
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.isAllowCoreThreadTimeOut:()Z
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setAllowCoreThreadTimeOut:(Z)V
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getMaxPoolSize:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setMaxPoolSize:(I)V
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getQueueCapacity:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setQueueCapacity:(I)V
aload_1
aload_0
getfield # // Field updateFloorsPoolProperties:Lcn/cloudwalk/elevator/common/UpdateFloorsPoolProperties;
invokevirtual # // Method cn/cloudwalk/elevator/common/UpdateFloorsPoolProperties.getKeepAliveSeconds:()I
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setKeepAliveSeconds:(I)V
aload_1
ldc # // String update-floors-pool-
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setThreadNamePrefix:(Ljava/lang/String;)V
aload_1
new # // class java/util/concurrent/ThreadPoolExecutor$AbortPolicy
dup
invokespecial # // Method java/util/concurrent/ThreadPoolExecutor$AbortPolicy."<init>":()V
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.setRejectedExecutionHandler:(Ljava/util/concurrent/RejectedExecutionHandler;)V
aload_1
invokevirtual # // Method org/springframework/scheduling/concurrent/ThreadPoolTaskExecutor.initialize:()V
aload_1
areturn
}
@@ -0,0 +1,269 @@
--- cn.cloudwalk.elevator.device.impl.AcsElevatorDeviceServiceImpl.v1
+++ cn.cloudwalk.elevator.device.impl.AcsElevatorDeviceServiceImpl.v2
@@ -652,7 +652,7 @@
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
-astore_3
+astore _
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsRestructureQueryParam.getPersonId:()Ljava/lang/String;
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
@@ -712,7 +712,7 @@
getfield # // Field imageRuleRefDao:Lcn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao.listByPersonInfo:(Lcn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto;)Ljava/util/List;
-astore _
+astore_3
goto @
new # // class cn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto
dup
@@ -740,15 +740,15 @@
getfield # // Field imageRuleRefDao:Lcn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao.listByRestructure:(Lcn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto;)Ljava/util/List;
-astore _
+astore_3
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
astore _
-aload _
-invokestatic # // Method cn/cloudwalk/elevator/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
-ifne @
-aload _
+aload_3
+invokestatic # // Method cn/cloudwalk/elevator/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
+ifne @
+aload_3
aload _
invokedynamic # // InvokeDynamic #:accept:(Ljava/util/List;)Ljava/util/function/Consumer;
invokeinterface # // InterfaceMethod java/util/List.forEach:(Ljava/util/function/Consumer;)V
@@ -778,13 +778,13 @@
athrow
Exception table:
from to target type
-0 289 290 Class java/lang/Exception
+0 286 287 Class java/lang/Exception
public cn.cloudwalk.cloud.result.CloudwalkResult listFloors(cn.cloudwalk.elevator.device.param.AcsRestructureQueryParam, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
-astore_3
+astore _
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsRestructureQueryParam.getPersonId:()Ljava/lang/String;
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
@@ -844,7 +844,7 @@
getfield # // Field imageRuleRefDao:Lcn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao.listByPersonInfo:(Lcn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto;)Ljava/util/List;
-astore _
+astore_3
goto @
new # // class cn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto
dup
@@ -872,7 +872,7 @@
getfield # // Field imageRuleRefDao:Lcn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao.listByRestructure:(Lcn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto;)Ljava/util/List;
-astore _
+astore_3
new # // class cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceListDto
dup
invokespecial # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceListDto."<init>":()V
@@ -881,10 +881,10 @@
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
astore _
-aload _
-invokestatic # // Method cn/cloudwalk/elevator/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
-ifne @
-aload _
+aload_3
+invokestatic # // Method cn/cloudwalk/elevator/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
+ifne @
+aload_3
aload _
invokedynamic # // InvokeDynamic #:accept:(Ljava/util/List;)Ljava/util/function/Consumer;
invokeinterface # // InterfaceMethod java/util/List.forEach:(Ljava/util/function/Consumer;)V
@@ -901,7 +901,7 @@
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsRestructureQueryParam.getZoneId:()Ljava/lang/String;
invokeinterface # // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
ifeq @
-aload_3
+aload _
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
aload _
@@ -934,7 +934,7 @@
invokedynamic # // InvokeDynamic #:accept:(Ljava/util/List;)Ljava/util/function/Consumer;
invokeinterface # // InterfaceMethod java/util/List.forEach:(Ljava/util/function/Consumer;)V
goto @
-aload_3
+aload _
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
aload_1
@@ -1062,7 +1062,7 @@
iload _
aload _
invokeinterface # // InterfaceMethod java/util/List.size:()I
-if_icmpge 937
+if_icmpge 936
aload _
invokevirtual # // Method cn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageResultDto.getZoneId:()Ljava/lang/String;
aload _
@@ -1152,12 +1152,12 @@
aload _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/device/result/AcsDeviceRestructureResult.setOfflineDevices:(Ljava/lang/String;)V
-aload_3
+aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto @
-aload_3
+aload _
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
astore_3
@@ -1173,15 +1173,15 @@
athrow
Exception table:
from to target type
-0 305 968 Class java/lang/Exception
-306 389 968 Class java/lang/Exception
-390 967 968 Class java/lang/Exception
+0 303 969 Class java/lang/Exception
+304 388 969 Class java/lang/Exception
+389 968 969 Class java/lang/Exception
public cn.cloudwalk.cloud.result.CloudwalkResult listCondition(cn.cloudwalk.elevator.device.param.AcsRestructureQueryParam, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
-astore_3
+astore _
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsRestructureQueryParam.getBusinessId:()Ljava/lang/String;
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
@@ -1250,7 +1250,7 @@
getfield # // Field imageRuleRefDao:Lcn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao.listByPersonInfo:(Lcn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto;)Ljava/util/List;
-astore _
+astore_3
goto @
new # // class cn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto
dup
@@ -1278,8 +1278,8 @@
getfield # // Field imageRuleRefDao:Lcn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/passrule/dao/ImageRuleRefDao.listByRestructure:(Lcn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageDto;)Ljava/util/List;
-astore _
-aload _
+astore_3
+aload_3
invokestatic # // Method cn/cloudwalk/elevator/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
ifne @
new # // class cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceListDto
@@ -1290,7 +1290,7 @@
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
astore _
-aload _
+aload_3
aload _
invokedynamic # // InvokeDynamic #:accept:(Ljava/util/List;)Ljava/util/function/Consumer;
invokeinterface # // InterfaceMethod java/util/List.forEach:(Ljava/util/function/Consumer;)V
@@ -1309,7 +1309,7 @@
invokestatic # // Method java/util/Collections.singletonList:(Ljava/lang/Object;)Ljava/util/List;
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceListDto.setCurrentFloorIds:(Ljava/util/List;)V
goto @
-aload_3
+aload _
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
aload _
@@ -1379,7 +1379,7 @@
invokeinterface # // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
goto @
-aload _
+aload_3
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore _
aload _
@@ -1425,7 +1425,7 @@
iload _
aload _
invokeinterface # // InterfaceMethod java/util/List.size:()I
-if_icmpge 868
+if_icmpge 865
aload _
invokevirtual # // Method cn/cloudwalk/elevator/passrule/dto/AcsPassRuleImageResultDto.getZoneId:()Ljava/lang/String;
aload _
@@ -1522,7 +1522,7 @@
aload _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/device/result/AcsDeviceRestructureResult.setOfflineDevices:(Ljava/lang/String;)V
-aload_3
+aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
@@ -1532,7 +1532,7 @@
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsRestructureQueryParam.getZoneId:()Ljava/lang/String;
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne @
-aload _
+aload_3
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore _
aload _
@@ -1564,14 +1564,14 @@
aload_0
getfield # // Field floorBuildingId:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/AcsDeviceRestructureResult.setParentId:(Ljava/lang/String;)V
-aload_3
+aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto @
goto @
goto @
-aload _
+aload_3
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore _
aload _
@@ -1597,12 +1597,12 @@
aload_0
getfield # // Field floorBuildingId:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/AcsDeviceRestructureResult.setParentId:(Ljava/lang/String;)V
-aload_3
+aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto @
-aload_3
+aload _
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
astore_3
@@ -1618,8 +1618,8 @@
athrow
Exception table:
from to target type
-0 332 1095 Class java/lang/Exception
-333 1094 1095 Class java/lang/Exception
+0 330 1094 Class java/lang/Exception
+331 1093 1094 Class java/lang/Exception
public cn.cloudwalk.cloud.result.CloudwalkResult listConditionByLabelIds(cn.cloudwalk.elevator.device.param.AcsRestructureQueryParam, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
new # // class java/util/ArrayList
@@ -0,0 +1,20 @@
--- cn.cloudwalk.elevator.export.impl.ElevatorDeviceExportService.v1
+++ cn.cloudwalk.elevator.export.impl.ElevatorDeviceExportService.v2
@@ -56,7 +56,7 @@
aload 8
ldc # // String 禁用
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
-goto 173
+goto 79
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getOnlineStatus:()Ljava/lang/Integer;
iconst_2
@@ -66,7 +66,7 @@
aload 8
ldc # // String 在线
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
-goto 173
+goto 79
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getOnlineStatus:()Ljava/lang/Integer;
iconst_3
@@ -0,0 +1,139 @@
public class cn.cloudwalk.elevator.export.impl.ElevatorDeviceExportService extends cn.cloudwalk.elevator.export.AcsAbstractExportAsyncService<cn.cloudwalk.elevator.device.param.AcsElevatorDeviceQueryParam, cn.cloudwalk.elevator.export.result.ElevatorDeviceRecordExcelResult> {
private cn.cloudwalk.elevator.device.service.AcsElevatorDeviceService elevatorDeviceService;
public cn.cloudwalk.elevator.export.impl.ElevatorDeviceExportService();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/export/AcsAbstractExportAsyncService."<init>":()V
return
protected cn.cloudwalk.cloud.page.CloudwalkPageAble<cn.cloudwalk.elevator.export.result.ElevatorDeviceRecordExcelResult> queryPage(cn.cloudwalk.elevator.device.param.AcsElevatorDeviceQueryParam, cn.cloudwalk.cloud.page.CloudwalkPageInfo, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aload_1
aload_2
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageInfo.getCurrentPage:()I
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam.setCurrentPage:(I)V
aload_1
aload_2
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageInfo.getPageSize:()I
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam.setRowsOfPage:(I)V
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_1
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.get:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 4
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq 198
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/page/CloudwalkPageAble
astore 5
aload 5
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble.getDatas:()Ljava/util/Collection;
invokestatic # // Method cn/cloudwalk/elevator/util/CollectionUtils.isNotEmpty:(Ljava/util/Collection;)Z
ifeq 198
aload 5
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble.getDatas:()Ljava/util/Collection;
ldc # // class cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copy:(Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/List;
astore 6
aload 6
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 7
aload 7
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 176
aload 7
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult
astore 8
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getStatus:()Ljava/lang/Integer;
iconst_1
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokestatic # // Method java/util/Objects.equals:(Ljava/lang/Object;Ljava/lang/Object;)Z
ifeq 126
aload 8
ldc # // String 禁用
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
goto 173
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getOnlineStatus:()Ljava/lang/Integer;
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokestatic # // Method java/util/Objects.equals:(Ljava/lang/Object;Ljava/lang/Object;)Z
ifeq 151
aload 8
ldc # // String 在线
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
goto 173
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getOnlineStatus:()Ljava/lang/Integer;
iconst_3
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokestatic # // Method java/util/Objects.equals:(Ljava/lang/Object;Ljava/lang/Object;)Z
ifeq 173
aload 8
ldc # // String 离线
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
goto 79
new # // class cn/cloudwalk/cloud/page/CloudwalkPageAble
dup
aload 6
aload_2
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/page/CloudwalkPageAble
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble.getTotalRows:()J
invokespecial # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble."<init>":(Ljava/util/Collection;Lcn/cloudwalk/cloud/page/CloudwalkPageInfo;J)V
areturn
new # // class cn/cloudwalk/cloud/exception/ServiceException
dup
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getCode:()Ljava/lang/String;
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getMessage:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/cloud/exception/ServiceException."<init>":(Ljava/lang/String;Ljava/lang/String;)V
athrow
protected cn.cloudwalk.cloud.result.CloudwalkResult<java.lang.String> createLocalFile(cn.cloudwalk.elevator.device.param.AcsElevatorDeviceQueryParam, java.lang.String, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aconst_null
areturn
protected java.lang.String getDefaultFileName();
Code:
new # // class java/lang/StringBuilder
dup
invokespecial # // Method java/lang/StringBuilder."<init>":()V
ldc # // String 派梯设备导出
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
new # // class java/util/Date
dup
invokespecial # // Method java/util/Date."<init>":()V
ldc # // String yyyyMMddHHmmss
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.formatDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
areturn
protected java.lang.String getDefaultFileTitleName();
Code:
ldc # // String 派梯设备
areturn
protected cn.cloudwalk.cloud.result.CloudwalkResult createLocalFile(java.lang.Object, java.lang.String, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
aload_2
aload_3
invokevirtual # // Method createLocalFile:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
protected cn.cloudwalk.cloud.page.CloudwalkPageAble queryPage(java.lang.Object, cn.cloudwalk.cloud.page.CloudwalkPageInfo, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
aload_2
aload_3
invokevirtual # // Method queryPage:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;Lcn/cloudwalk/cloud/page/CloudwalkPageInfo;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/page/CloudwalkPageAble;
areturn
}
@@ -0,0 +1,139 @@
public class cn.cloudwalk.elevator.export.impl.ElevatorDeviceExportService extends cn.cloudwalk.elevator.export.AcsAbstractExportAsyncService<cn.cloudwalk.elevator.device.param.AcsElevatorDeviceQueryParam, cn.cloudwalk.elevator.export.result.ElevatorDeviceRecordExcelResult> {
private cn.cloudwalk.elevator.device.service.AcsElevatorDeviceService elevatorDeviceService;
public cn.cloudwalk.elevator.export.impl.ElevatorDeviceExportService();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/export/AcsAbstractExportAsyncService."<init>":()V
return
protected cn.cloudwalk.cloud.page.CloudwalkPageAble<cn.cloudwalk.elevator.export.result.ElevatorDeviceRecordExcelResult> queryPage(cn.cloudwalk.elevator.device.param.AcsElevatorDeviceQueryParam, cn.cloudwalk.cloud.page.CloudwalkPageInfo, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aload_1
aload_2
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageInfo.getCurrentPage:()I
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam.setCurrentPage:(I)V
aload_1
aload_2
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageInfo.getPageSize:()I
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam.setRowsOfPage:(I)V
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_1
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.get:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 4
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq 198
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/page/CloudwalkPageAble
astore 5
aload 5
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble.getDatas:()Ljava/util/Collection;
invokestatic # // Method cn/cloudwalk/elevator/util/CollectionUtils.isNotEmpty:(Ljava/util/Collection;)Z
ifeq 198
aload 5
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble.getDatas:()Ljava/util/Collection;
ldc # // class cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copy:(Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/List;
astore 6
aload 6
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 7
aload 7
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 176
aload 7
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult
astore 8
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getStatus:()Ljava/lang/Integer;
iconst_1
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokestatic # // Method java/util/Objects.equals:(Ljava/lang/Object;Ljava/lang/Object;)Z
ifeq 126
aload 8
ldc # // String 禁用
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
goto 79
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getOnlineStatus:()Ljava/lang/Integer;
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokestatic # // Method java/util/Objects.equals:(Ljava/lang/Object;Ljava/lang/Object;)Z
ifeq 151
aload 8
ldc # // String 在线
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
goto 79
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.getOnlineStatus:()Ljava/lang/Integer;
iconst_3
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokestatic # // Method java/util/Objects.equals:(Ljava/lang/Object;Ljava/lang/Object;)Z
ifeq 173
aload 8
ldc # // String 离线
invokevirtual # // Method cn/cloudwalk/elevator/export/result/ElevatorDeviceRecordExcelResult.setDeviceOnlineStatus:(Ljava/lang/String;)V
goto 79
new # // class cn/cloudwalk/cloud/page/CloudwalkPageAble
dup
aload 6
aload_2
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/page/CloudwalkPageAble
invokevirtual # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble.getTotalRows:()J
invokespecial # // Method cn/cloudwalk/cloud/page/CloudwalkPageAble."<init>":(Ljava/util/Collection;Lcn/cloudwalk/cloud/page/CloudwalkPageInfo;J)V
areturn
new # // class cn/cloudwalk/cloud/exception/ServiceException
dup
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getCode:()Ljava/lang/String;
aload 4
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getMessage:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/cloud/exception/ServiceException."<init>":(Ljava/lang/String;Ljava/lang/String;)V
athrow
protected cn.cloudwalk.cloud.result.CloudwalkResult<java.lang.String> createLocalFile(cn.cloudwalk.elevator.device.param.AcsElevatorDeviceQueryParam, java.lang.String, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aconst_null
areturn
protected java.lang.String getDefaultFileName();
Code:
new # // class java/lang/StringBuilder
dup
invokespecial # // Method java/lang/StringBuilder."<init>":()V
ldc # // String 派梯设备导出
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
new # // class java/util/Date
dup
invokespecial # // Method java/util/Date."<init>":()V
ldc # // String yyyyMMddHHmmss
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.formatDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
areturn
protected java.lang.String getDefaultFileTitleName();
Code:
ldc # // String 派梯设备
areturn
protected cn.cloudwalk.cloud.result.CloudwalkResult createLocalFile(java.lang.Object, java.lang.String, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
aload_2
aload_3
invokevirtual # // Method createLocalFile:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
protected cn.cloudwalk.cloud.page.CloudwalkPageAble queryPage(java.lang.Object, cn.cloudwalk.cloud.page.CloudwalkPageInfo, cn.cloudwalk.cloud.context.CloudwalkCallContext) throws cn.cloudwalk.cloud.exception.ServiceException;
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
aload_2
aload_3
invokevirtual # // Method queryPage:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;Lcn/cloudwalk/cloud/page/CloudwalkPageInfo;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/page/CloudwalkPageAble;
areturn
}
@@ -0,0 +1,330 @@
--- cn.cloudwalk.elevator.export.utils.ExcelUtil.v1
+++ cn.cloudwalk.elevator.export.utils.ExcelUtil.v2
@@ -73,14 +73,13 @@
istore _
iload _
iload _
-if_icmpgt 346
+if_icmpgt 345
aload _
iload _
invokeinterface # // InterfaceMethod org/apache/poi/ss/usermodel/Sheet.getRow:(I)Lorg/apache/poi/ss/usermodel/Row;
astore _
aload _
-ifnonnull @
-goto @
+ifnull @
aload _
invokeinterface # // InterfaceMethod org/apache/poi/ss/usermodel/Row.cellIterator:()Ljava/util/Iterator;
astore _
@@ -107,8 +106,8 @@
ifne @
goto @
aload _
-iconst_1
-invokeinterface # // InterfaceMethod org/apache/poi/ss/usermodel/Cell.setCellType:(I)V
+getstatic # // Field org/apache/poi/ss/usermodel/CellType.STRING:Lorg/apache/poi/ss/usermodel/CellType;
+invokeinterface # // InterfaceMethod org/apache/poi/ss/usermodel/Cell.setCellType:(Lorg/apache/poi/ss/usermodel/CellType;)V
aload _
invokeinterface # // InterfaceMethod org/apache/poi/ss/usermodel/Cell.getStringCellValue:()Ljava/lang/String;
astore _
@@ -200,12 +199,12 @@
areturn
Exception table:
from to target type
-356 363 366 Class java/lang/Throwable
-18 346 388 Class java/lang/Throwable
-18 346 397 any
-409 416 419 Class java/lang/Throwable
-388 399 397 any
-9 441 444 Class java/lang/Exception
+355 362 365 Class java/lang/Throwable
+18 345 387 Class java/lang/Throwable
+18 345 396 any
+408 415 418 Class java/lang/Throwable
+387 398 396 any
+9 440 443 Class java/lang/Exception
private static <T> void setValue(T, java.lang.String, java.lang.reflect.Field, java.lang.Class<?>) throws java.lang.IllegalAccessException;
Code:
ldc # // class java/lang/String
@@ -574,7 +573,7 @@
istore _
iload _
iload _
-if_icmpge 103
+if_icmpge 100
aload _
iload _
aaload
@@ -588,8 +587,7 @@
ifnull @
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/export/ExcelAttribute.isExport:()Z
-ifne @
-goto @
+ifeq @
aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
@@ -614,7 +612,7 @@
istore _
iload _
iload _
-if_icmpgt 227
+if_icmpgt 224
aload _
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFWorkbook.createSheet:()Lorg/apache/poi/hssf/usermodel/HSSFSheet;
astore _
@@ -711,13 +709,13 @@
athrow
Exception table:
from to target type
-259 264 267 Class java/lang/Throwable
-12 249 287 Class java/lang/Throwable
-12 249 296 any
-308 313 316 Class java/lang/Throwable
-287 298 296 any
-0 284 336 Class java/lang/Exception
-287 336 336 Class java/lang/Exception
+256 261 264 Class java/lang/Throwable
+12 246 284 Class java/lang/Throwable
+12 246 293 any
+305 310 313 Class java/lang/Throwable
+284 295 293 any
+0 281 333 Class java/lang/Exception
+284 333 333 Class java/lang/Exception
public static <T> boolean getListToExcel(java.util.List<T>, java.lang.String, java.io.OutputStream, java.lang.Class<T>, java.lang.Integer, cn.cloudwalk.elevator.export.ExcelCallback) throws java.lang.Exception;
Code:
new # // class org/apache/poi/hssf/usermodel/HSSFWorkbook
@@ -744,7 +742,7 @@
istore _
iload _
iload _
-if_icmpge 103
+if_icmpge 100
aload _
iload _
aaload
@@ -758,8 +756,7 @@
ifnull @
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/export/ExcelAttribute.isExport:()Z
-ifne @
-goto @
+ifeq @
aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
@@ -784,7 +781,7 @@
istore _
iload _
iload _
-if_icmpgt 254
+if_icmpgt 251
aload _
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFWorkbook.createSheet:()Lorg/apache/poi/hssf/usermodel/HSSFSheet;
astore _
@@ -828,7 +825,7 @@
invokestatic # // Method createRowContent:(Lorg/apache/poi/hssf/usermodel/HSSFSheet;Ljava/util/List;Lorg/apache/poi/hssf/usermodel/HSSFWorkbook;Ljava/util/List;III)V
aconst_null
aload _
-if_acmpeq 248
+if_acmpeq 245
aload _
aload _
aload _
@@ -892,13 +889,13 @@
athrow
Exception table:
from to target type
-286 291 294 Class java/lang/Throwable
-12 276 314 Class java/lang/Throwable
-12 276 323 any
-335 340 343 Class java/lang/Throwable
-314 325 323 any
-0 311 363 Class java/lang/Exception
-314 363 363 Class java/lang/Exception
+283 288 291 Class java/lang/Throwable
+12 273 311 Class java/lang/Throwable
+12 273 320 any
+332 337 340 Class java/lang/Throwable
+311 322 320 any
+0 308 360 Class java/lang/Exception
+311 360 360 Class java/lang/Exception
private static <T> void createRowContent(org.apache.poi.hssf.usermodel.HSSFSheet, java.util.List<java.lang.reflect.Field>, org.apache.poi.hssf.usermodel.HSSFWorkbook, java.util.List<T>, int, int, int) throws java.lang.Exception;
Code:
aconst_null
@@ -911,7 +908,7 @@
istore _
iload _
iload _
-if_icmpge 416
+if_icmpge 410
aload _
iload _
iload _
@@ -929,7 +926,7 @@
iload _
aload _
invokeinterface # // InterfaceMethod java/util/List.size:()I
-if_icmpge 410
+if_icmpge 404
aload _
iload _
invokeinterface # // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
@@ -955,8 +952,7 @@
istore _
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/export/ExcelAttribute.isExport:()Z
-ifne @
-goto @
+ifeq @
aload _
iload _
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFRow.createCell:(I)Lorg/apache/poi/hssf/usermodel/HSSFCell;
@@ -967,8 +963,7 @@
aload _
aload _
invokevirtual # // Method java/lang/reflect/Field.get:(Ljava/lang/Object;)Ljava/lang/Object;
-ifnonnull @
-goto @
+ifnull @
aconst_null
astore _
aload _
@@ -1071,14 +1066,14 @@
goto @
aload _
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFCell.setCellValue:(Ljava/lang/String;)V
-iinc 17, 1
-goto @
-iinc 15, 1
+iinc 13, 1
+goto @
+iinc 10, 1
goto @
return
Exception table:
from to target type
-247 290 293 Class java/lang/Exception
+241 284 287 Class java/lang/Exception
public static void createRowHeard(org.apache.poi.hssf.usermodel.HSSFSheet, java.util.List<java.lang.reflect.Field>, org.apache.poi.hssf.usermodel.HSSFWorkbook, int);
Code:
aload _
@@ -1090,7 +1085,7 @@
iload _
aload _
invokeinterface # // InterfaceMethod java/util/List.size:()I
-if_icmpge 185
+if_icmpge 187
iload _
istore _
aload _
@@ -1149,13 +1144,13 @@
d2i
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFSheet.setColumnWidth:(II)V
aload _
-iconst_1
-invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFCell.setCellType:(I)V
+getstatic # // Field org/apache/poi/ss/usermodel/CellType.STRING:Lorg/apache/poi/ss/usermodel/CellType;
+invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFCell.setCellType:(Lorg/apache/poi/ss/usermodel/CellType;)V
aload _
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/export/ExcelAttribute.name:()Ljava/lang/String;
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFCell.setCellValue:(Ljava/lang/String;)V
-iinc 10, 1
+iinc 5, 1
goto @
return
private static org.apache.poi.hssf.usermodel.HSSFCellStyle createCellStyle(org.apache.poi.hssf.usermodel.HSSFWorkbook, java.lang.String);
@@ -1170,14 +1165,15 @@
ldc # // String Arail narrow
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont.setFontName:(Ljava/lang/String;)V
aload _
-sipush 700
-invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont.setBoldweight:(S)V
+iconst_1
+invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont.setBold:(Z)V
ldc # // String 1
aload _
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq @
aload _
-sipush 32767
+getstatic # // Field org/apache/poi/ss/usermodel/IndexedColors.RED:Lorg/apache/poi/ss/usermodel/IndexedColors;
+invokevirtual # // Method org/apache/poi/ss/usermodel/IndexedColors.getIndex:()S
invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont.setColor:(S)V
aload _
aload _
@@ -1329,7 +1325,7 @@
dup
istore _
iconst_m1
-if_icmpeq 95
+if_icmpeq 97
aload _
aload _
iconst_0
@@ -1420,12 +1416,12 @@
athrow
Exception table:
from to target type
-109 113 116 Class java/io/IOException
-155 159 162 Class java/io/IOException
-13 105 200 any
-206 210 213 Class java/io/IOException
-252 256 259 Class java/io/IOException
-200 202 200 any
+112 116 119 Class java/io/IOException
+158 162 165 Class java/io/IOException
+13 108 203 any
+209 213 216 Class java/io/IOException
+255 259 262 Class java/io/IOException
+203 205 203 any
public static void setExcelAttribute(cn.cloudwalk.elevator.export.ExcelAttribute, java.lang.String, java.lang.Object, boolean);
Code:
aload _
@@ -1514,7 +1510,7 @@
istore _
iload _
iload _
-if_icmpge 101
+if_icmpge 98
aload _
iload _
aaload
@@ -1528,8 +1524,7 @@
ifnull @
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/export/ExcelAttribute.isExport:()Z
-ifne @
-goto @
+ifeq @
aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
@@ -1613,15 +1608,15 @@
athrow
Exception table:
from to target type
-162 167 170 Class java/lang/Throwable
-13 152 194 Class java/lang/Throwable
-13 152 203 any
-215 220 223 Class java/lang/Throwable
-194 205 203 any
-0 187 243 Class java/io/IOException
-194 243 243 Class java/io/IOException
-0 187 257 any
-194 259 257 any
+159 164 167 Class java/lang/Throwable
+13 149 191 Class java/lang/Throwable
+13 149 200 any
+212 217 220 Class java/lang/Throwable
+191 202 200 any
+0 184 240 Class java/io/IOException
+191 240 240 Class java/io/IOException
+0 184 254 any
+191 256 254 any
static {};
Code:
ldc # // class cn/cloudwalk/elevator/export/utils/ExcelUtil
@@ -0,0 +1,45 @@
--- cn.cloudwalk.elevator.handler.OpenDoorRecordEventHandler.v1
+++ cn.cloudwalk.elevator.handler.OpenDoorRecordEventHandler.v2
@@ -23,7 +23,7 @@
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getDeviceId:()Ljava/lang/String;
aload_2
-invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler.queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
+invokevirtual # // Method queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore_3
aload_0
aload_1
@@ -62,8 +62,7 @@
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.getIdentifyType:()I
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.equals:(Ljava/lang/Object;)Z
-ifeq @
-goto @
+ifne @
aload _
ifnull @
aload_0
@@ -81,7 +80,7 @@
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.getRecordResult:()Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.intValue:()I
iconst_1
-if_icmpne 209
+if_icmpne 206
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
@@ -116,10 +115,10 @@
return
Exception table:
from to target type
-14 209 215 Class java/lang/Exception
-14 209 233 any
-215 227 233 any
-233 235 233 any
+14 206 212 Class java/lang/Exception
+14 206 230 any
+212 224 230 any
+230 232 230 any
private void cleanCache(cn.cloudwalk.cloud.context.CloudwalkCallContext, cn.cloudwalk.client.cwoscomponent.intelligent.device.result.DeviceResult, java.lang.String, java.lang.String);
Code:
aload_2
@@ -0,0 +1,196 @@
public class cn.cloudwalk.elevator.handler.OpenDoorRecordEventHandler extends cn.cloudwalk.elevator.handler.AbstractEventHandler implements cn.cloudwalk.event.handler.EventHandler<cn.cloudwalk.cwos.client.event.event.OpenDoorRecordEvent> {
private static final org.slf4j.Logger LOGGER;
private cn.cloudwalk.elevator.record.service.AcsElevatorRecordService acsElevatorRecordService;
private org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object> redisTemplate;
public cn.cloudwalk.elevator.handler.OpenDoorRecordEventHandler();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler."<init>":()V
return
public void onEvent(cn.cloudwalk.cwos.client.event.event.OpenDoorRecordEvent);
Code:
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 收到openDoorRecordEvent消息:{}
aload_1
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getBusinessId:()Ljava/lang/String;
invokevirtual # // Method getCloudwalkContext:(Ljava/lang/String;)Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
astore_2
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getDeviceId:()Ljava/lang/String;
aload_2
invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler.queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore_3
aload_0
aload_1
invokespecial # // Method getParam:(Lcn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent;)Lcn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam;
astore _
aload _
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
aconst_null
astore _
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getReserveInfo:()Ljava/lang/String;
invokestatic # // Method org/apache/commons/lang3/StringUtils.isNotBlank:(Ljava/lang/CharSequence;)Z
ifeq @
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getReserveInfo:()Ljava/lang/String;
invokestatic # // Method com/alibaba/fastjson/JSON.parseObject:(Ljava/lang/String;)Lcom/alibaba/fastjson/JSONObject;
astore _
aload _
invokevirtual # // Method com/alibaba/fastjson/JSONObject.isEmpty:()Z
ifne @
aload _
ldc # // String srcFloor
invokevirtual # // Method com/alibaba/fastjson/JSONObject.containsKey:(Ljava/lang/Object;)Z
ifeq @
aload _
ldc # // class cn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO
invokevirtual # // Method com/alibaba/fastjson/JSONObject.toJavaObject:(Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO
astore _
aload_3
ifnull @
getstatic # // Field cn/cloudwalk/elevator/em/AcsDeviceIdentifyTypeEnum.BACKEND_REG:Lcn/cloudwalk/elevator/em/AcsDeviceIdentifyTypeEnum;
invokevirtual # // Method cn/cloudwalk/elevator/em/AcsDeviceIdentifyTypeEnum.getCode:()Ljava/lang/Integer;
aload_3
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.getIdentifyType:()I
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.equals:(Ljava/lang/Object;)Z
ifeq @
goto @
aload _
ifnull @
aload_0
aload _
aload _
invokespecial # // Method getElevatorParam:(Lcn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam;Lcn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO;)Lcn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam;
astore _
aload_0
getfield # // Field acsElevatorRecordService:Lcn/cloudwalk/elevator/record/service/AcsElevatorRecordService;
aload _
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/AcsElevatorRecordService.add:(Lcn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.getRecordResult:()Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.intValue:()I
iconst_1
if_icmpne 209
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
ldc # // String 1
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO.getSrcFloor:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq @
aload_0
new # // class java/util/Date
dup
invokespecial # // Method java/util/Date."<init>":()V
ldc # // String yyyy-MM-dd
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.parseDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getBusinessId:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getOpenDoorCountKey:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method statisticsAddCache:(Ljava/lang/String;)V
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore_2
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 消费开门记录失败,原因:
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore _
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
aload _
athrow
return
Exception table:
from to target type
14 209 215 Class java/lang/Exception
14 209 233 any
215 227 233 any
233 235 233 any
private void cleanCache(cn.cloudwalk.cloud.context.CloudwalkCallContext, cn.cloudwalk.client.cwoscomponent.intelligent.device.result.DeviceResult, java.lang.String, java.lang.String);
Code:
aload_2
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.getDeviceCode:()Ljava/lang/String;
aload_1
invokevirtual # // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getCompany:()Lcn/cloudwalk/cloud/session/company/CompanyContext;
invokevirtual # // Method cn/cloudwalk/cloud/session/company/CompanyContext.getCompanyId:()Ljava/lang/String;
aload _
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getBackendRegLogIdKey:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
astore _
aload_1
invokevirtual # // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getCompany:()Lcn/cloudwalk/cloud/session/company/CompanyContext;
invokevirtual # // Method cn/cloudwalk/cloud/session/company/CompanyContext.getCompanyId:()Ljava/lang/String;
aload_3
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getBackendRegExpireKey:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
astore _
aload_0
getfield # // Field redisTemplate:Lorg/springframework/data/redis/core/RedisTemplate;
aload _
invokevirtual # // Method org/springframework/data/redis/core/RedisTemplate.delete:(Ljava/lang/Object;)V
aload_0
getfield # // Field redisTemplate:Lorg/springframework/data/redis/core/RedisTemplate;
aload _
invokevirtual # // Method org/springframework/data/redis/core/RedisTemplate.delete:(Ljava/lang/Object;)V
return
private cn.cloudwalk.elevator.record.param.AcsOpenDoorRecordAddParam getParam(cn.cloudwalk.cwos.client.event.event.OpenDoorRecordEvent);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam
astore_2
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getRecordResult:()Ljava/lang/String;
invokestatic # // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setRecordResult:(Ljava/lang/Integer;)V
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getDeviceId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setDeviceCode:(Ljava/lang/String;)V
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getOpenDoorType:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setOpenDoorType:(Ljava/lang/String;)V
aload_2
areturn
private cn.cloudwalk.elevator.record.param.AcsElevatorRecordAddParam getElevatorParam(cn.cloudwalk.elevator.record.param.AcsOpenDoorRecordAddParam, cn.cloudwalk.elevator.record.dto.AcsElevatorRecordExtraDTO);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
astore_3
aload_2
aload_3
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
areturn
public void onEvent(cn.cloudwalk.cwos.client.event.event.BaseEvent);
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent
invokevirtual # // Method onEvent:(Lcn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent;)V
return
static {};
Code:
ldc # // class cn/cloudwalk/elevator/handler/OpenDoorRecordEventHandler
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putstatic # // Field LOGGER:Lorg/slf4j/Logger;
return
}
@@ -0,0 +1,195 @@
public class cn.cloudwalk.elevator.handler.OpenDoorRecordEventHandler extends cn.cloudwalk.elevator.handler.AbstractEventHandler implements cn.cloudwalk.event.handler.EventHandler<cn.cloudwalk.cwos.client.event.event.OpenDoorRecordEvent> {
private static final org.slf4j.Logger LOGGER;
private cn.cloudwalk.elevator.record.service.AcsElevatorRecordService acsElevatorRecordService;
private org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object> redisTemplate;
public cn.cloudwalk.elevator.handler.OpenDoorRecordEventHandler();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler."<init>":()V
return
public void onEvent(cn.cloudwalk.cwos.client.event.event.OpenDoorRecordEvent);
Code:
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 收到openDoorRecordEvent消息:{}
aload_1
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getBusinessId:()Ljava/lang/String;
invokevirtual # // Method getCloudwalkContext:(Ljava/lang/String;)Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
astore_2
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getDeviceId:()Ljava/lang/String;
aload_2
invokevirtual # // Method queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore_3
aload_0
aload_1
invokespecial # // Method getParam:(Lcn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent;)Lcn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam;
astore _
aload _
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
aconst_null
astore _
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getReserveInfo:()Ljava/lang/String;
invokestatic # // Method org/apache/commons/lang3/StringUtils.isNotBlank:(Ljava/lang/CharSequence;)Z
ifeq @
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getReserveInfo:()Ljava/lang/String;
invokestatic # // Method com/alibaba/fastjson/JSON.parseObject:(Ljava/lang/String;)Lcom/alibaba/fastjson/JSONObject;
astore _
aload _
invokevirtual # // Method com/alibaba/fastjson/JSONObject.isEmpty:()Z
ifne @
aload _
ldc # // String srcFloor
invokevirtual # // Method com/alibaba/fastjson/JSONObject.containsKey:(Ljava/lang/Object;)Z
ifeq @
aload _
ldc # // class cn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO
invokevirtual # // Method com/alibaba/fastjson/JSONObject.toJavaObject:(Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO
astore _
aload_3
ifnull @
getstatic # // Field cn/cloudwalk/elevator/em/AcsDeviceIdentifyTypeEnum.BACKEND_REG:Lcn/cloudwalk/elevator/em/AcsDeviceIdentifyTypeEnum;
invokevirtual # // Method cn/cloudwalk/elevator/em/AcsDeviceIdentifyTypeEnum.getCode:()Ljava/lang/Integer;
aload_3
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.getIdentifyType:()I
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.equals:(Ljava/lang/Object;)Z
ifne @
aload _
ifnull @
aload_0
aload _
aload _
invokespecial # // Method getElevatorParam:(Lcn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam;Lcn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO;)Lcn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam;
astore _
aload_0
getfield # // Field acsElevatorRecordService:Lcn/cloudwalk/elevator/record/service/AcsElevatorRecordService;
aload _
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/AcsElevatorRecordService.add:(Lcn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.getRecordResult:()Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.intValue:()I
iconst_1
if_icmpne 206
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
ldc # // String 1
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/AcsElevatorRecordExtraDTO.getSrcFloor:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq @
aload_0
new # // class java/util/Date
dup
invokespecial # // Method java/util/Date."<init>":()V
ldc # // String yyyy-MM-dd
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.parseDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getBusinessId:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getOpenDoorCountKey:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method statisticsAddCache:(Ljava/lang/String;)V
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore_2
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 消费开门记录失败,原因:
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore _
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
aload _
athrow
return
Exception table:
from to target type
14 206 212 Class java/lang/Exception
14 206 230 any
212 224 230 any
230 232 230 any
private void cleanCache(cn.cloudwalk.cloud.context.CloudwalkCallContext, cn.cloudwalk.client.cwoscomponent.intelligent.device.result.DeviceResult, java.lang.String, java.lang.String);
Code:
aload_2
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.getDeviceCode:()Ljava/lang/String;
aload_1
invokevirtual # // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getCompany:()Lcn/cloudwalk/cloud/session/company/CompanyContext;
invokevirtual # // Method cn/cloudwalk/cloud/session/company/CompanyContext.getCompanyId:()Ljava/lang/String;
aload _
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getBackendRegLogIdKey:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
astore _
aload_1
invokevirtual # // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getCompany:()Lcn/cloudwalk/cloud/session/company/CompanyContext;
invokevirtual # // Method cn/cloudwalk/cloud/session/company/CompanyContext.getCompanyId:()Ljava/lang/String;
aload_3
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getBackendRegExpireKey:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
astore _
aload_0
getfield # // Field redisTemplate:Lorg/springframework/data/redis/core/RedisTemplate;
aload _
invokevirtual # // Method org/springframework/data/redis/core/RedisTemplate.delete:(Ljava/lang/Object;)V
aload_0
getfield # // Field redisTemplate:Lorg/springframework/data/redis/core/RedisTemplate;
aload _
invokevirtual # // Method org/springframework/data/redis/core/RedisTemplate.delete:(Ljava/lang/Object;)V
return
private cn.cloudwalk.elevator.record.param.AcsOpenDoorRecordAddParam getParam(cn.cloudwalk.cwos.client.event.event.OpenDoorRecordEvent);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam
astore_2
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getRecordResult:()Ljava/lang/String;
invokestatic # // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setRecordResult:(Ljava/lang/Integer;)V
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getDeviceId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setDeviceCode:(Ljava/lang/String;)V
aload_2
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent.getOpenDoorType:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsOpenDoorRecordAddParam.setOpenDoorType:(Ljava/lang/String;)V
aload_2
areturn
private cn.cloudwalk.elevator.record.param.AcsElevatorRecordAddParam getElevatorParam(cn.cloudwalk.elevator.record.param.AcsOpenDoorRecordAddParam, cn.cloudwalk.elevator.record.dto.AcsElevatorRecordExtraDTO);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
astore_3
aload_2
aload_3
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
areturn
public void onEvent(cn.cloudwalk.cwos.client.event.event.BaseEvent);
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent
invokevirtual # // Method onEvent:(Lcn/cloudwalk/cwos/client/event/event/OpenDoorRecordEvent;)V
return
static {};
Code:
ldc # // class cn/cloudwalk/elevator/handler/OpenDoorRecordEventHandler
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putstatic # // Field LOGGER:Lorg/slf4j/Logger;
return
}
@@ -0,0 +1,18 @@
--- cn.cloudwalk.elevator.handler.PersonRecordEventHandler.v1
+++ cn.cloudwalk.elevator.handler.PersonRecordEventHandler.v2
@@ -22,13 +22,13 @@
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getDeviceId:()Ljava/lang/String;
aload_2
-invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler.queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
+invokevirtual # // Method queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore_3
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getSubDeviceId:()Ljava/lang/String;
aload_2
-invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler.queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
+invokevirtual # // Method queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore _
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getFaces:()Ljava/util/List;
@@ -0,0 +1,198 @@
public class cn.cloudwalk.elevator.handler.PersonRecordEventHandler extends cn.cloudwalk.elevator.handler.AbstractEventHandler implements cn.cloudwalk.event.handler.EventHandler<cn.cloudwalk.cwos.client.event.event.PersonRecordUploadEvent> {
private static final org.slf4j.Logger LOGGER;
private cn.cloudwalk.elevator.record.service.AcsRecogRecordService acsRecogRecordService;
public cn.cloudwalk.elevator.handler.PersonRecordEventHandler();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler."<init>":()V
return
public void onEvent(cn.cloudwalk.cwos.client.event.event.PersonRecordUploadEvent);
Code:
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 收到personRecordUploadEvent消息:{}
aload_1
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getBusinessId:()Ljava/lang/String;
invokevirtual # // Method getCloudwalkContext:(Ljava/lang/String;)Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
astore_2
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getDeviceId:()Ljava/lang/String;
aload_2
invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler.queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore_3
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getSubDeviceId:()Ljava/lang/String;
aload_2
invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler.queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore _
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getFaces:()Ljava/util/List;
invokeinterface # // InterfaceMethod java/util/List.stream:()Ljava/util/stream/Stream;
invokedynamic # // InvokeDynamic #:apply:()Ljava/util/function/Function;
invokestatic # // Method java/util/stream/Collectors.groupingBy:(Ljava/util/function/Function;)Ljava/util/stream/Collector;
invokeinterface # // InterfaceMethod java/util/stream/Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
checkcast # // class java/util/Map
astore _
aload _
invokeinterface # // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
invokeinterface # // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
astore _
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq @
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class java/lang/String
astore _
aload _
aload _
invokeinterface # // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast # // class java/util/List
iconst_0
invokeinterface # // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cwos/client/event/event/mode/Face
astore _
aload_0
aload_1
aload _
invokespecial # // Method getParam:(Lcn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent;Lcn/cloudwalk/cwos/client/event/event/mode/Face;)Lcn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam;
astore _
aload _
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
aload _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setSubDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
aload_0
getfield # // Field acsRecogRecordService:Lcn/cloudwalk/elevator/record/service/AcsRecogRecordService;
aload _
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/AcsRecogRecordService.add:(Lcn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
pop
aload_0
new # // class java/util/Date
dup
invokespecial # // Method java/util/Date."<init>":()V
ldc # // String yyyy-MM-dd
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.parseDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getBusinessId:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getRecogCountKey:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method statisticsAddCache:(Ljava/lang/String;)V
goto @
astore _
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 保存人员识别记录失败,faceId:{},原因:
aload _
aload _
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
goto @
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore_2
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 消费人员识别记录失败,原因:
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore _
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
aload _
athrow
return
Exception table:
from to target type
107 188 191 Class java/lang/Exception
14 210 216 Class java/lang/Exception
14 210 234 any
216 228 234 any
234 236 234 any
private cn.cloudwalk.elevator.record.param.AcsRecogRecordAddParam getParam(cn.cloudwalk.cwos.client.event.event.PersonRecordUploadEvent, cn.cloudwalk.cwos.client.event.event.mode.Face);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam
astore_3
aload_2
aload_3
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getPanoramaData:()Lcn/cloudwalk/cwos/client/event/event/mode/Panorama;
ifnull @
aload_3
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getPanoramaData:()Lcn/cloudwalk/cwos/client/event/event/mode/Panorama;
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Panorama.getPanoramaImagePath:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setPanoramaImagePath:(Ljava/lang/String;)V
aload_3
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getDeviceId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setDeviceCode:(Ljava/lang/String;)V
aload_3
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getThreshold:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setThreshold:(Ljava/math/BigDecimal;)V
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setScore:(Ljava/math/BigDecimal;)V
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getQualityScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setQualityScore:(Ljava/math/BigDecimal;)V
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getMaskScore:()Ljava/lang/Float;
ifnull @
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getMaskScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setMaskScore:(Ljava/math/BigDecimal;)V
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getTempScore:()Ljava/lang/Float;
ifnull @
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getTempScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setTempScore:(Ljava/math/BigDecimal;)V
aload_3
getstatic # // Field cn/cloudwalk/elevator/em/CompareTypeEnum.RECOG:Lcn/cloudwalk/elevator/em/CompareTypeEnum;
invokevirtual # // Method cn/cloudwalk/elevator/em/CompareTypeEnum.getCode:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setCompareType:(Ljava/lang/Integer;)V
aload_3
areturn
public void onEvent(cn.cloudwalk.cwos.client.event.event.BaseEvent);
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent
invokevirtual # // Method onEvent:(Lcn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent;)V
return
static {};
Code:
ldc # // class cn/cloudwalk/elevator/handler/PersonRecordEventHandler
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putstatic # // Field LOGGER:Lorg/slf4j/Logger;
return
}
@@ -0,0 +1,198 @@
public class cn.cloudwalk.elevator.handler.PersonRecordEventHandler extends cn.cloudwalk.elevator.handler.AbstractEventHandler implements cn.cloudwalk.event.handler.EventHandler<cn.cloudwalk.cwos.client.event.event.PersonRecordUploadEvent> {
private static final org.slf4j.Logger LOGGER;
private cn.cloudwalk.elevator.record.service.AcsRecogRecordService acsRecogRecordService;
public cn.cloudwalk.elevator.handler.PersonRecordEventHandler();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/handler/AbstractEventHandler."<init>":()V
return
public void onEvent(cn.cloudwalk.cwos.client.event.event.PersonRecordUploadEvent);
Code:
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 收到personRecordUploadEvent消息:{}
aload_1
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getBusinessId:()Ljava/lang/String;
invokevirtual # // Method getCloudwalkContext:(Ljava/lang/String;)Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
astore_2
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getDeviceId:()Ljava/lang/String;
aload_2
invokevirtual # // Method queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore_3
aload_0
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getSubDeviceId:()Ljava/lang/String;
aload_2
invokevirtual # // Method queryDeviceResult:(Ljava/lang/String;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;
astore _
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getFaces:()Ljava/util/List;
invokeinterface # // InterfaceMethod java/util/List.stream:()Ljava/util/stream/Stream;
invokedynamic # // InvokeDynamic #:apply:()Ljava/util/function/Function;
invokestatic # // Method java/util/stream/Collectors.groupingBy:(Ljava/util/function/Function;)Ljava/util/stream/Collector;
invokeinterface # // InterfaceMethod java/util/stream/Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
checkcast # // class java/util/Map
astore _
aload _
invokeinterface # // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
invokeinterface # // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
astore _
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq @
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class java/lang/String
astore _
aload _
aload _
invokeinterface # // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast # // class java/util/List
iconst_0
invokeinterface # // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cwos/client/event/event/mode/Face
astore _
aload_0
aload_1
aload _
invokespecial # // Method getParam:(Lcn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent;Lcn/cloudwalk/cwos/client/event/event/mode/Face;)Lcn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam;
astore _
aload _
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
aload _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setSubDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
aload_0
getfield # // Field acsRecogRecordService:Lcn/cloudwalk/elevator/record/service/AcsRecogRecordService;
aload _
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/AcsRecogRecordService.add:(Lcn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
pop
aload_0
new # // class java/util/Date
dup
invokespecial # // Method java/util/Date."<init>":()V
ldc # // String yyyy-MM-dd
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.parseDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getBusinessId:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/elevator/util/AcsCacheKeyUtil.getRecogCountKey:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method statisticsAddCache:(Ljava/lang/String;)V
goto @
astore _
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 保存人员识别记录失败,faceId:{},原因:
aload _
aload _
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
goto @
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore_2
getstatic # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 消费人员识别记录失败,原因:
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
goto @
astore _
invokestatic # // Method cn/cloudwalk/elevator/config/FeignThreadLocalUtil.remove:()V
aload _
athrow
return
Exception table:
from to target type
107 188 191 Class java/lang/Exception
14 210 216 Class java/lang/Exception
14 210 234 any
216 228 234 any
234 236 234 any
private cn.cloudwalk.elevator.record.param.AcsRecogRecordAddParam getParam(cn.cloudwalk.cwos.client.event.event.PersonRecordUploadEvent, cn.cloudwalk.cwos.client.event.event.mode.Face);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam
astore_3
aload_2
aload_3
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getPanoramaData:()Lcn/cloudwalk/cwos/client/event/event/mode/Panorama;
ifnull @
aload_3
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getPanoramaData:()Lcn/cloudwalk/cwos/client/event/event/mode/Panorama;
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Panorama.getPanoramaImagePath:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setPanoramaImagePath:(Ljava/lang/String;)V
aload_3
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getDeviceId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setDeviceCode:(Ljava/lang/String;)V
aload_3
aload_1
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent.getThreshold:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setThreshold:(Ljava/math/BigDecimal;)V
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setScore:(Ljava/math/BigDecimal;)V
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getQualityScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setQualityScore:(Ljava/math/BigDecimal;)V
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getMaskScore:()Ljava/lang/Float;
ifnull @
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getMaskScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setMaskScore:(Ljava/math/BigDecimal;)V
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getTempScore:()Ljava/lang/Float;
ifnull @
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/cwos/client/event/event/mode/Face.getTempScore:()Ljava/lang/Float;
invokevirtual # // Method java/lang/Float.floatValue:()F
f2d
invokestatic # // Method java/math/BigDecimal.valueOf:(D)Ljava/math/BigDecimal;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setTempScore:(Ljava/math/BigDecimal;)V
aload_3
getstatic # // Field cn/cloudwalk/elevator/em/CompareTypeEnum.RECOG:Lcn/cloudwalk/elevator/em/CompareTypeEnum;
invokevirtual # // Method cn/cloudwalk/elevator/em/CompareTypeEnum.getCode:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsRecogRecordAddParam.setCompareType:(Ljava/lang/Integer;)V
aload_3
areturn
public void onEvent(cn.cloudwalk.cwos.client.event.event.BaseEvent);
Code:
aload_0
aload_1
checkcast # // class cn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent
invokevirtual # // Method onEvent:(Lcn/cloudwalk/cwos/client/event/event/PersonRecordUploadEvent;)V
return
static {};
Code:
ldc # // class cn/cloudwalk/elevator/handler/PersonRecordEventHandler
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putstatic # // Field LOGGER:Lorg/slf4j/Logger;
return
}
@@ -0,0 +1,68 @@
--- cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController.v1
+++ cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController.v2
@@ -129,10 +129,10 @@
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 11
aload 11
-ifnull 550
+ifnull 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.size:()I
-ifle 550
+ifle 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 12
@@ -152,10 +152,10 @@
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 14
aload 14
-ifnull 415
+ifnull 205
aload 14
invokeinterface # // InterfaceMethod java/util/List.size:()I
-ifle 415
+ifle 205
aload 14
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 15
@@ -215,7 +215,7 @@
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 271
-goto 547
+goto 205
ldc # // String FLOOR
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
@@ -269,7 +269,7 @@
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 205
-goto 873
+goto 139
ldc # // String BUILDING
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
@@ -279,10 +279,10 @@
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 11
aload 11
-ifnull 741
+ifnull 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.size:()I
-ifle 741
+ifle 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 12
@@ -342,7 +342,7 @@
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 597
-goto 873
+goto 139
ldc # // String FLOOR
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
@@ -0,0 +1,537 @@
public class cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController extends cn.cloudwalk.elevator.common.AbstractCloudwalkController {
private cn.cloudwalk.elevator.device.service.AcsElevatorDeviceService elevatorDeviceService;
private cn.cloudwalk.elevator.codeElevatorArea.service.AcsElevatorCodeService elevatorCodeService;
private cn.cloudwalk.elevator.zone.service.ZoneService zoneService;
private cn.cloudwalk.client.cwoscomponent.intelligent.device.service.DeviceService deviceService;
private cn.cloudwalk.elevator.record.service.AcsElevatorRecordService elevatorRecordService;
private java.lang.String key;
private java.lang.Long time;
private java.lang.String keyA;
public cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/common/AbstractCloudwalkController."<init>":()V
return
public cn.cloudwalk.cloud.result.CloudwalkResult<java.util.List<cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceQueryFoDTO>> get(cn.cloudwalk.elevator.handler.device.form.AcsElevatorDeviceQueryForm);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
astore_2
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getFo:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/util/List;
astore_3
aload_3
ifnull 39
aload_3
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 39
aload_3
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
astore_3
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 查询派梯设备信息列表失败,原因:{}
aload_3
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 查询派梯设备信息列表失败
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/exception/ServiceException.getMessage:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
10 38 50 Class cn/cloudwalk/cloud/exception/ServiceException
39 49 50 Class cn/cloudwalk/cloud/exception/ServiceException
public cn.cloudwalk.cloud.result.CloudwalkResult<java.util.List<cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeQueryDTO>> queryZoneTreeCode(cn.cloudwalk.elevator.handler.device.form.AcsElevatorCodeQueryForm);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
astore_2
ldc # // String
astore_3
ldc # // String
astore 4
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/handler/device/form/AcsElevatorCodeQueryForm.getDeviceCode:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
ifeq 50
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBuildingId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
astore_3
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBusinessId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
astore 4
new # // class cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam."<init>":()V
astore 5
aload_3
invokestatic # // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
ifeq 72
aload 5
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam.setParentId:(Ljava/lang/String;)V
aload 5
aload 4
invokevirtual # // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam.setBusinessId:(Ljava/lang/String;)V
aload_0
getfield # // Field zoneService:Lcn/cloudwalk/elevator/zone/service/ZoneService;
aload 5
aload_0
invokevirtual # // Method getCloudwalkContext:()Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/zone/service/ZoneService.tree:(Lcn/cloudwalk/elevator/zone/param/ZoneNextTreeParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 6
aload 6
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
astore 7
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
astore 8
aload 7
ifnull 876
aload 7
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 876
aload 7
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 9
aload 9
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 876
aload 9
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 10
ldc # // String PARK
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 553
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 11
aload 11
ifnull 550
aload 11
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 550
aload 11
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 12
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 550
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 13
ldc # // String BUILDING
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 418
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 14
aload 14
ifnull 415
aload 14
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 415
aload 14
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 15
aload 15
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 415
aload 15
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 16
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 17
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 18
aload 18
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 18
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 19
aload 19
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 402
aload 17
aload 19
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 17
aload 19
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 17
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 271
goto 547
ldc # // String FLOOR
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 547
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 14
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 14
ldc # // String FLOOR
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 15
aload 15
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 15
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 16
aload 16
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 537
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 14
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 205
goto 873
ldc # // String BUILDING
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 744
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 11
aload 11
ifnull 741
aload 11
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 741
aload 11
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 12
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 741
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 13
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 14
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 15
aload 15
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 15
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 16
aload 16
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 728
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 14
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 597
goto 873
ldc # // String FLOOR
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 873
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 11
aload 11
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 11
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 11
ldc # // String FLOOR
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
aload 11
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 12
aload 12
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 12
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 13
aload 13
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 863
aload 11
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 11
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 11
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 139
aload 8
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 9
aload 9
areturn
astore_2
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 获取区域的电梯编码失败,原因:
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 获取区域的电梯编码失败
aload_2
invokevirtual # // Method java/lang/Exception.getMessage:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
0 885 886 Class java/lang/Exception
public cn.cloudwalk.cloud.result.CloudwalkResult addElevatorRecord(cn.cloudwalk.elevator.handler.device.form.AcsElevatorRecordAddForm);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
astore_2
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/handler/device/form/AcsElevatorRecordAddForm.getDeviceCode:()Ljava/lang/String;
astore_3
new # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
dup
invokespecial # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam."<init>":()V
astore 4
aload 4
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam.setDeviceCode:(Ljava/lang/String;)V
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore 5
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload 4
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBusinessId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
astore 6
aload 6
invokestatic # // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
ifeq 68
aload_2
aload 6
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setBusinessId:(Ljava/lang/String;)V
goto 74
aload_2
ldc # // String 000
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setBusinessId:(Ljava/lang/String;)V
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore 7
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getByDeciveCode:(Ljava/lang/String;)Lcn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO;
astore 8
new # // class cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult
dup
invokespecial # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult."<init>":()V
astore 9
aload 8
ifnull 154
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setId:(Ljava/lang/String;)V
aload 9
aload_3
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceCode:(Ljava/lang/String;)V
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getDeviceName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceName:(Ljava/lang/String;)V
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getDeviceTypeName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceTypeName:(Ljava/lang/String;)V
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getAreaId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setAreaId:(Ljava/lang/String;)V
aload_2
aload 9
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore 10
aload_0
getfield # // Field elevatorRecordService:Lcn/cloudwalk/elevator/record/service/AcsElevatorRecordService;
aload_2
aload_0
invokevirtual # // Method getCloudwalkContext:()Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/AcsElevatorRecordService.add:(Lcn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 11
aload 11
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
astore_3
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 添加刷脸派梯记录失败,原因:
aload_3
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 00
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/exception/ServiceException.getMessage:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
10 189 190 Class cn/cloudwalk/cloud/exception/ServiceException
public cn.cloudwalk.cloud.result.CloudwalkResult<cn.cloudwalk.elevator.device.result.KeyValueResult> getKey(cn.cloudwalk.elevator.handler.device.form.AcsElevatorRecordAddForm);
Code:
new # // class cn/cloudwalk/elevator/device/result/KeyValueResult
dup
invokespecial # // Method cn/cloudwalk/elevator/device/result/KeyValueResult."<init>":()V
astore_2
aload_2
aload_0
getfield # // Field key:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setKey:(Ljava/lang/String;)V
aload_2
aload_0
getfield # // Field time:Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setTime:(Ljava/lang/Long;)V
aload_2
aload_0
getfield # // Field keyA:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setKeyA:(Ljava/lang/String;)V
aload_2
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
}
@@ -0,0 +1,537 @@
public class cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController extends cn.cloudwalk.elevator.common.AbstractCloudwalkController {
private cn.cloudwalk.elevator.device.service.AcsElevatorDeviceService elevatorDeviceService;
private cn.cloudwalk.elevator.codeElevatorArea.service.AcsElevatorCodeService elevatorCodeService;
private cn.cloudwalk.elevator.zone.service.ZoneService zoneService;
private cn.cloudwalk.client.cwoscomponent.intelligent.device.service.DeviceService deviceService;
private cn.cloudwalk.elevator.record.service.AcsElevatorRecordService elevatorRecordService;
private java.lang.String key;
private java.lang.Long time;
private java.lang.String keyA;
public cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/common/AbstractCloudwalkController."<init>":()V
return
public cn.cloudwalk.cloud.result.CloudwalkResult<java.util.List<cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceQueryFoDTO>> get(cn.cloudwalk.elevator.handler.device.form.AcsElevatorDeviceQueryForm);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
astore_2
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getFo:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/util/List;
astore_3
aload_3
ifnull 39
aload_3
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 39
aload_3
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
astore_3
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 查询派梯设备信息列表失败,原因:{}
aload_3
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 查询派梯设备信息列表失败
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/exception/ServiceException.getMessage:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
10 38 50 Class cn/cloudwalk/cloud/exception/ServiceException
39 49 50 Class cn/cloudwalk/cloud/exception/ServiceException
public cn.cloudwalk.cloud.result.CloudwalkResult<java.util.List<cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeQueryDTO>> queryZoneTreeCode(cn.cloudwalk.elevator.handler.device.form.AcsElevatorCodeQueryForm);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
astore_2
ldc # // String
astore_3
ldc # // String
astore 4
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/handler/device/form/AcsElevatorCodeQueryForm.getDeviceCode:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
ifeq 50
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBuildingId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
astore_3
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBusinessId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
astore 4
new # // class cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam."<init>":()V
astore 5
aload_3
invokestatic # // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
ifeq 72
aload 5
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam.setParentId:(Ljava/lang/String;)V
aload 5
aload 4
invokevirtual # // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam.setBusinessId:(Ljava/lang/String;)V
aload_0
getfield # // Field zoneService:Lcn/cloudwalk/elevator/zone/service/ZoneService;
aload 5
aload_0
invokevirtual # // Method getCloudwalkContext:()Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/zone/service/ZoneService.tree:(Lcn/cloudwalk/elevator/zone/param/ZoneNextTreeParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 6
aload 6
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
astore 7
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
astore 8
aload 7
ifnull 876
aload 7
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 876
aload 7
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 9
aload 9
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 876
aload 9
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 10
ldc # // String PARK
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 553
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 11
aload 11
ifnull 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 12
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 550
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 13
ldc # // String BUILDING
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 418
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 14
aload 14
ifnull 205
aload 14
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 205
aload 14
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 15
aload 15
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 415
aload 15
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 16
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 17
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 17
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 18
aload 18
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 18
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 19
aload 19
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 402
aload 17
aload 19
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 17
aload 19
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 17
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 271
goto 205
ldc # // String FLOOR
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 547
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 14
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 14
ldc # // String FLOOR
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 15
aload 15
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 15
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 16
aload 16
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 537
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 14
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 205
goto 139
ldc # // String BUILDING
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 744
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
astore 11
aload 11
ifnull 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.size:()I
ifle 139
aload 11
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore 12
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq 741
aload 12
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
astore 13
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 14
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
aload 14
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 15
aload 15
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 15
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 16
aload 16
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 728
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 14
aload 16
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 14
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 597
goto 139
ldc # // String FLOOR
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
invokevirtual # // Method java/lang/String.equals:(Ljava/lang/Object;)Z
ifeq 873
new # // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
astore 11
aload 11
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
aload 11
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
aload 11
ldc # // String FLOOR
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
aload 11
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
dup
invokespecial # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
astore 12
aload 12
aload 10
invokevirtual # // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
aload_0
getfield # // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
aload 12
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
astore 13
aload 13
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne 863
aload 11
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
aload 11
aload 13
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
aload 8
aload 11
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto 139
aload 8
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 9
aload 9
areturn
astore_2
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 获取区域的电梯编码失败,原因:
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 获取区域的电梯编码失败
aload_2
invokevirtual # // Method java/lang/Exception.getMessage:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
0 885 886 Class java/lang/Exception
public cn.cloudwalk.cloud.result.CloudwalkResult addElevatorRecord(cn.cloudwalk.elevator.handler.device.form.AcsElevatorRecordAddForm);
Code:
aload_1
ldc # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
invokestatic # // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
astore_2
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/handler/device/form/AcsElevatorRecordAddForm.getDeviceCode:()Ljava/lang/String;
astore_3
new # // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
dup
invokespecial # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam."<init>":()V
astore 4
aload 4
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam.setDeviceCode:(Ljava/lang/String;)V
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore 5
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload 4
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBusinessId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
astore 6
aload 6
invokestatic # // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
ifeq 68
aload_2
aload 6
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setBusinessId:(Ljava/lang/String;)V
goto 74
aload_2
ldc # // String 000
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setBusinessId:(Ljava/lang/String;)V
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore 7
aload_0
getfield # // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getByDeciveCode:(Ljava/lang/String;)Lcn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO;
astore 8
new # // class cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult
dup
invokespecial # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult."<init>":()V
astore 9
aload 8
ifnull 154
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setId:(Ljava/lang/String;)V
aload 9
aload_3
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceCode:(Ljava/lang/String;)V
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getDeviceName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceName:(Ljava/lang/String;)V
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getDeviceTypeName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceTypeName:(Ljava/lang/String;)V
aload 9
aload 8
invokevirtual # // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getAreaId:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setAreaId:(Ljava/lang/String;)V
aload_2
aload 9
invokevirtual # // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore 10
aload_0
getfield # // Field elevatorRecordService:Lcn/cloudwalk/elevator/record/service/AcsElevatorRecordService;
aload_2
aload_0
invokevirtual # // Method getCloudwalkContext:()Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/AcsElevatorRecordService.add:(Lcn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore 11
aload 11
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
astore_3
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 添加刷脸派梯记录失败,原因:
aload_3
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 00
aload_3
invokevirtual # // Method cn/cloudwalk/cloud/exception/ServiceException.getMessage:()Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
10 189 190 Class cn/cloudwalk/cloud/exception/ServiceException
public cn.cloudwalk.cloud.result.CloudwalkResult<cn.cloudwalk.elevator.device.result.KeyValueResult> getKey(cn.cloudwalk.elevator.handler.device.form.AcsElevatorRecordAddForm);
Code:
new # // class cn/cloudwalk/elevator/device/result/KeyValueResult
dup
invokespecial # // Method cn/cloudwalk/elevator/device/result/KeyValueResult."<init>":()V
astore_2
aload_2
aload_0
getfield # // Field key:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setKey:(Ljava/lang/String;)V
aload_2
aload_0
getfield # // Field time:Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setTime:(Ljava/lang/Long;)V
aload_2
aload_0
getfield # // Field keyA:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setKeyA:(Ljava/lang/String;)V
aload_2
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
}
@@ -0,0 +1,14 @@
--- cn.cloudwalk.elevator.handler.device.controller.FileController.v1
+++ cn.cloudwalk.elevator.handler.device.controller.FileController.v2
@@ -24,9 +24,9 @@
getstatic # // Field cn/cloudwalk/elevator/config/ImageStoreConstants.MAX_FILE:Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.intValue:()I
if_icmple 47
-ldc # // String 53060428
+ldc # // String 53060428
aload_0
-ldc # // String 53060428
+ldc # // String 53060428
invokevirtual # // Method getMessage:(Ljava/lang/String;)Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
@@ -0,0 +1,79 @@
public class cn.cloudwalk.elevator.handler.device.controller.FileController extends cn.cloudwalk.elevator.common.AbstractCloudwalkController {
private cn.cloudwalk.elevator.record.service.PersonFileService personFileService;
public cn.cloudwalk.elevator.handler.device.controller.FileController();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/common/AbstractCloudwalkController."<init>":()V
return
public cn.cloudwalk.cloud.result.CloudwalkResult<java.lang.String> fileUpload(java.lang.String);
Code:
aload_1
invokestatic # // Method org/apache/commons/lang3/StringUtils.isEmpty:(Ljava/lang/CharSequence;)Z
ifeq @
ldc # // String 53060544
aload_0
ldc # // String 53060544
invokevirtual # // Method getMessage:(Ljava/lang/String;)Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
aload_1
invokestatic # // Method javax/xml/bind/DatatypeConverter.parseBase64Binary:(Ljava/lang/String;)[B
astore_2
aload_2
arraylength
getstatic # // Field cn/cloudwalk/elevator/config/ImageStoreConstants.MAX_FILE:Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.intValue:()I
if_icmple 47
ldc # // String 53060428
aload_0
ldc # // String 53060428
invokevirtual # // Method getMessage:(Ljava/lang/String;)Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
invokestatic # // Method cn/cloudwalk/elevator/util/ToolUtil.generateUUID:()Ljava/lang/String;
astore_3
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 上传文件:{},size={}
aload_3
aload_2
arraylength
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
aload_0
getfield # // Field personFileService:Lcn/cloudwalk/elevator/record/service/PersonFileService;
aload_3
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/PersonFileService.upload:(Ljava/lang/String;[B)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore _
aload _
ifnull @
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/lang/CharSequence
invokestatic # // Method org/apache/commons/lang3/StringUtils.isNotBlank:(Ljava/lang/CharSequence;)Z
ifeq @
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
aload _
areturn
astore_2
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 80014013
aload_0
ldc # // String 80014013
invokevirtual # // Method getMessage:(Ljava/lang/String;)Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
19 46 112 Class java/lang/Exception
47 108 112 Class java/lang/Exception
109 111 112 Class java/lang/Exception
}
@@ -0,0 +1,79 @@
public class cn.cloudwalk.elevator.handler.device.controller.FileController extends cn.cloudwalk.elevator.common.AbstractCloudwalkController {
private cn.cloudwalk.elevator.record.service.PersonFileService personFileService;
public cn.cloudwalk.elevator.handler.device.controller.FileController();
Code:
aload_0
invokespecial # // Method cn/cloudwalk/elevator/common/AbstractCloudwalkController."<init>":()V
return
public cn.cloudwalk.cloud.result.CloudwalkResult<java.lang.String> fileUpload(java.lang.String);
Code:
aload_1
invokestatic # // Method org/apache/commons/lang3/StringUtils.isEmpty:(Ljava/lang/CharSequence;)Z
ifeq @
ldc # // String 53060544
aload_0
ldc # // String 53060544
invokevirtual # // Method getMessage:(Ljava/lang/String;)Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
aload_1
invokestatic # // Method javax/xml/bind/DatatypeConverter.parseBase64Binary:(Ljava/lang/String;)[B
astore_2
aload_2
arraylength
getstatic # // Field cn/cloudwalk/elevator/config/ImageStoreConstants.MAX_FILE:Ljava/lang/Integer;
invokevirtual # // Method java/lang/Integer.intValue:()I
if_icmple 47
ldc # // String 53060428
aload_0
ldc # // String 53060428
invokevirtual # // Method getMessage:(Ljava/lang/String;)Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
invokestatic # // Method cn/cloudwalk/elevator/util/ToolUtil.generateUUID:()Ljava/lang/String;
astore_3
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String 上传文件:{},size={}
aload_3
aload_2
arraylength
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
aload_0
getfield # // Field personFileService:Lcn/cloudwalk/elevator/record/service/PersonFileService;
aload_3
aload_2
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/service/PersonFileService.upload:(Ljava/lang/String;[B)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore _
aload _
ifnull @
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/lang/CharSequence
invokestatic # // Method org/apache/commons/lang3/StringUtils.isNotBlank:(Ljava/lang/CharSequence;)Z
ifeq @
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
aload _
areturn
astore_2
aload_0
getfield # // Field LOGGER:Lorg/slf4j/Logger;
ldc # // String
aload_2
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
ldc # // String 80014013
aload_0
ldc # // String 80014013
invokevirtual # // Method getMessage:(Ljava/lang/String;)Ljava/lang/String;
invokestatic # // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
areturn
Exception table:
from to target type
19 46 112 Class java/lang/Exception
47 108 112 Class java/lang/Exception
109 111 112 Class java/lang/Exception
}
@@ -0,0 +1,22 @@
--- cn.cloudwalk.elevator.task.ElevatorRecordSendTask.v1
+++ cn.cloudwalk.elevator.task.ElevatorRecordSendTask.v2
@@ -224,7 +224,7 @@
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/result/SendRecordTokenResult
invokevirtual # // Method cn/cloudwalk/elevator/record/result/SendRecordTokenResult.getToken:()Ljava/lang/String;
-invokeinterface # // InterfaceMethod org/springframework/util/MultiValueMap.add:(Ljava/lang/Object;Ljava/lang/Object;)V
+invokevirtual # // Method org/springframework/util/LinkedMultiValueMap.add:(Ljava/lang/Object;Ljava/lang/Object;)V
aload_0
ldc # // String /forward_webfront/api/pti-oapi/v2/api/starriver/device/sign-third-import
aload _
@@ -294,8 +294,8 @@
return
Exception table:
from to target type
-11 58 626 Class java/lang/Exception
-59 623 626 Class java/lang/Exception
+11 58 624 Class java/lang/Exception
+59 621 624 Class java/lang/Exception
private java.net.URI combineAuthClientURI(java.lang.String, org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>);
Code:
new # // class java/lang/StringBuilder
@@ -0,0 +1,318 @@
public class cn.cloudwalk.elevator.task.ElevatorRecordSendTask {
private org.slf4j.Logger logger;
private java.lang.String sendRecordIp;
private java.lang.String corpId;
private java.lang.String appKey;
private java.lang.String appSecret;
private java.lang.Boolean sendBoolean;
private static final long EXPIRE_TIME;
private cn.cloudwalk.elevator.record.dao.AcsElevatorRecordDao acsElevatorRecordDao;
private cn.cloudwalk.elevator.record.dao.SendRecordTimeDao sendRecordTimeDao;
private cn.cloudwalk.client.cwoscomponent.intelligent.record.service.AcsRecordThreeSendService acsRecordThreeSendService;
public cn.cloudwalk.elevator.task.ElevatorRecordSendTask();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
aload_0
ldc # // class cn/cloudwalk/elevator/task/ElevatorRecordSendTask
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putfield # // Field logger:Lorg/slf4j/Logger;
return
public void execute();
Code:
aload_0
getfield # // Field sendBoolean:Ljava/lang/Boolean;
invokevirtual # // Method java/lang/Boolean.booleanValue:()Z
ifne @
return
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.getByType:(Ljava/lang/Integer;)Lcn/cloudwalk/elevator/record/dto/SendRecordTimeResultDTO;
astore_1
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore_2
aload_1
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne @
aload_2
invokevirtual # // Method java/lang/Long.longValue:()J
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeResultDTO.getTime:()Ljava/lang/Long;
invokevirtual # // Method java/lang/Long.longValue:()J
lsub
ldc2_w # // long 3600000l
lcmp
ifge @
return
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeResultDTO.getTime:()Ljava/lang/Long;
astore_2
goto @
new # // class cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO."<init>":()V
astore_3
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO.setTime:(Ljava/lang/Long;)V
aload_3
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO.setType:(Ljava/lang/Integer;)V
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.add:(Lcn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO;)Ljava/lang/Integer;
pop
new # // class cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO."<init>":()V
astore_3
aload_3
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setType:(Ljava/lang/Integer;)V
aload_3
aload_2
invokevirtual # // Method java/lang/Long.longValue:()J
ldc2_w # // long 10000l
ladd
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setTime:(Ljava/lang/Long;)V
new # // class cn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam
dup
invokespecial # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam."<init>":()V
astore _
aload _
aload_2
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam.setStartTime:(Ljava/lang/Long;)V
aload_0
getfield # // Field acsRecordThreeSendService:Lcn/cloudwalk/client/cwoscomponent/intelligent/record/service/AcsRecordThreeSendService;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/client/cwoscomponent/intelligent/record/service/AcsRecordThreeSendService.listByTime:(Lcn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore _
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 查询时间戳为:{},获取的门禁记录数据为:{}
aload_2
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/Collection
invokestatic # // Method org/springframework/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
ifne @
aload_3
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
invokeinterface # // InterfaceMethod java/util/List.size:()I
iconst_1
isub
invokeinterface # // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getRecognitionTime:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setTime:(Ljava/lang/Long;)V
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.getTime:()Ljava/lang/Long;
aload_2
invokevirtual # // Method java/lang/Long.equals:(Ljava/lang/Object;)Z
ifeq @
aload_3
aload_2
invokevirtual # // Method java/lang/Long.longValue:()J
ldc2_w # // long 10l
ladd
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setTime:(Ljava/lang/Long;)V
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
astore _
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore _
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq @
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult
astore _
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getPersonCode:()Ljava/lang/String;
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne @
new # // class cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam
dup
invokespecial # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam."<init>":()V
astore _
aload _
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getPersonCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam.setEmployeeCode:(Ljava/lang/String;)V
aload _
new # // class java/util/Date
dup
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getRecognitionTime:()J
invokespecial # // Method java/util/Date."<init>":(J)V
ldc # // String yyyy-MM-dd HH:mm:ss
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.parseDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam.setSignTime:(Ljava/lang/String;)V
aload _
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getDeviceName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam.setDeviceName:(Ljava/lang/String;)V
aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto @
aload _
invokestatic # // Method org/springframework/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
ifne @
new # // class cn/cloudwalk/elevator/record/param/SendRecordTokenParam
dup
invokespecial # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam."<init>":()V
astore _
aload _
aload_0
getfield # // Field corpId:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam.setCorpId:(Ljava/lang/String;)V
aload _
aload_0
getfield # // Field appKey:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam.setAppKey:(Ljava/lang/String;)V
aload _
aload_0
getfield # // Field appSecret:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam.setAppSecret:(Ljava/lang/String;)V
aload_0
ldc # // String forward_webfront/api/pti-oapi/token/get
aconst_null
invokespecial # // Method combineAuthClientURI:(Ljava/lang/String;Lorg/springframework/util/MultiValueMap;)Ljava/net/URI;
astore _
aload _
aload _
aconst_null
new # // class cn/cloudwalk/elevator/task/ElevatorRecordSendTask$1
dup
aload_0
invokespecial # // Method cn/cloudwalk/elevator/task/ElevatorRecordSendTask$1."<init>":(Lcn/cloudwalk/elevator/task/ElevatorRecordSendTask;)V
invokestatic # // Method cn/cloudwalk/elevator/util/RestTemplateUtil.post:(Ljava/net/URI;Ljava/lang/Object;Lorg/springframework/http/HttpHeaders;Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/result/CloudwalkResult
astore _
new # // class org/springframework/util/LinkedMultiValueMap
dup
invokespecial # // Method org/springframework/util/LinkedMultiValueMap."<init>":()V
astore _
aload _
ldc # // String token
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/result/SendRecordTokenResult
invokevirtual # // Method cn/cloudwalk/elevator/record/result/SendRecordTokenResult.getToken:()Ljava/lang/String;
invokeinterface # // InterfaceMethod org/springframework/util/MultiValueMap.add:(Ljava/lang/Object;Ljava/lang/Object;)V
aload_0
ldc # // String /forward_webfront/api/pti-oapi/v2/api/starriver/device/sign-third-import
aload _
invokespecial # // Method combineAuthClientURI:(Ljava/lang/String;Lorg/springframework/util/MultiValueMap;)Ljava/net/URI;
astore _
new # // class org/springframework/http/HttpHeaders
dup
invokespecial # // Method org/springframework/http/HttpHeaders."<init>":()V
astore _
aload _
ldc # // String token
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/result/SendRecordTokenResult
invokevirtual # // Method cn/cloudwalk/elevator/record/result/SendRecordTokenResult.getToken:()Ljava/lang/String;
invokevirtual # // Method org/springframework/http/HttpHeaders.set:(Ljava/lang/String;Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/record/param/SendRecordSendParam
dup
invokespecial # // Method cn/cloudwalk/elevator/record/param/SendRecordSendParam."<init>":()V
astore _
aload _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendParam.setRecords:(Ljava/util/List;)V
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 推送通行记录数据为:{}
aload _
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload _
aload _
aload _
new # // class cn/cloudwalk/elevator/task/ElevatorRecordSendTask$2
dup
aload_0
invokespecial # // Method cn/cloudwalk/elevator/task/ElevatorRecordSendTask$2."<init>":(Lcn/cloudwalk/elevator/task/ElevatorRecordSendTask;)V
invokestatic # // Method cn/cloudwalk/elevator/util/RestTemplateUtil.post:(Ljava/net/URI;Ljava/lang/Object;Lorg/springframework/http/HttpHeaders;Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/result/CloudwalkResult
astore _
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 调用第三方接口发送通行记录数据结束,返回结果为:{}
aload _
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.update:(Lcn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO;)Ljava/lang/Integer;
pop
goto @
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.update:(Lcn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO;)Ljava/lang/Integer;
pop
goto @
astore_1
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 派梯记录推送失败,失败原因是:{}
aload_1
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
return
Exception table:
from to target type
11 58 626 Class java/lang/Exception
59 623 626 Class java/lang/Exception
private java.net.URI combineAuthClientURI(java.lang.String, org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>);
Code:
new # // class java/lang/StringBuilder
dup
invokespecial # // Method java/lang/StringBuilder."<init>":()V
ldc # // String http://
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload_0
getfield # // Field sendRecordIp:Ljava/lang/String;
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokestatic # // Method org/springframework/web/util/UriComponentsBuilder.fromUriString:(Ljava/lang/String;)Lorg/springframework/web/util/UriComponentsBuilder;
aload_1
invokevirtual # // Method org/springframework/web/util/UriComponentsBuilder.path:(Ljava/lang/String;)Lorg/springframework/web/util/UriComponentsBuilder;
aload_2
invokevirtual # // Method org/springframework/web/util/UriComponentsBuilder.queryParams:(Lorg/springframework/util/MultiValueMap;)Lorg/springframework/web/util/UriComponentsBuilder;
invokevirtual # // Method org/springframework/web/util/UriComponentsBuilder.build:()Lorg/springframework/web/util/UriComponents;
invokevirtual # // Method org/springframework/web/util/UriComponents.toUri:()Ljava/net/URI;
areturn
}
@@ -0,0 +1,318 @@
public class cn.cloudwalk.elevator.task.ElevatorRecordSendTask {
private org.slf4j.Logger logger;
private java.lang.String sendRecordIp;
private java.lang.String corpId;
private java.lang.String appKey;
private java.lang.String appSecret;
private java.lang.Boolean sendBoolean;
private static final long EXPIRE_TIME;
private cn.cloudwalk.elevator.record.dao.AcsElevatorRecordDao acsElevatorRecordDao;
private cn.cloudwalk.elevator.record.dao.SendRecordTimeDao sendRecordTimeDao;
private cn.cloudwalk.client.cwoscomponent.intelligent.record.service.AcsRecordThreeSendService acsRecordThreeSendService;
public cn.cloudwalk.elevator.task.ElevatorRecordSendTask();
Code:
aload_0
invokespecial # // Method java/lang/Object."<init>":()V
aload_0
ldc # // class cn/cloudwalk/elevator/task/ElevatorRecordSendTask
invokestatic # // Method org/slf4j/LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
putfield # // Field logger:Lorg/slf4j/Logger;
return
public void execute();
Code:
aload_0
getfield # // Field sendBoolean:Ljava/lang/Boolean;
invokevirtual # // Method java/lang/Boolean.booleanValue:()Z
ifne @
return
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.getByType:(Ljava/lang/Integer;)Lcn/cloudwalk/elevator/record/dto/SendRecordTimeResultDTO;
astore_1
invokestatic # // Method java/lang/System.currentTimeMillis:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
astore_2
aload_1
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne @
aload_2
invokevirtual # // Method java/lang/Long.longValue:()J
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeResultDTO.getTime:()Ljava/lang/Long;
invokevirtual # // Method java/lang/Long.longValue:()J
lsub
ldc2_w # // long 3600000l
lcmp
ifge @
return
aload_1
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeResultDTO.getTime:()Ljava/lang/Long;
astore_2
goto @
new # // class cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO."<init>":()V
astore_3
aload_3
aload_2
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO.setTime:(Ljava/lang/Long;)V
aload_3
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO.setType:(Ljava/lang/Integer;)V
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.add:(Lcn/cloudwalk/elevator/record/dto/SendRecordTimeAddDTO;)Ljava/lang/Integer;
pop
new # // class cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO
dup
invokespecial # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO."<init>":()V
astore_3
aload_3
iconst_2
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setType:(Ljava/lang/Integer;)V
aload_3
aload_2
invokevirtual # // Method java/lang/Long.longValue:()J
ldc2_w # // long 10000l
ladd
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setTime:(Ljava/lang/Long;)V
new # // class cn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam
dup
invokespecial # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam."<init>":()V
astore _
aload _
aload_2
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam.setStartTime:(Ljava/lang/Long;)V
aload_0
getfield # // Field acsRecordThreeSendService:Lcn/cloudwalk/client/cwoscomponent/intelligent/record/service/AcsRecordThreeSendService;
aload _
invokeinterface # // InterfaceMethod cn/cloudwalk/client/cwoscomponent/intelligent/record/service/AcsRecordThreeSendService.listByTime:(Lcn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
astore _
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 查询时间戳为:{},获取的门禁记录数据为:{}
aload_2
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/Collection
invokestatic # // Method org/springframework/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
ifne @
aload_3
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
invokeinterface # // InterfaceMethod java/util/List.size:()I
iconst_1
isub
invokeinterface # // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getRecognitionTime:()J
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setTime:(Ljava/lang/Long;)V
aload_3
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.getTime:()Ljava/lang/Long;
aload_2
invokevirtual # // Method java/lang/Long.equals:(Ljava/lang/Object;)Z
ifeq @
aload_3
aload_2
invokevirtual # // Method java/lang/Long.longValue:()J
ldc2_w # // long 10l
ladd
invokestatic # // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
invokevirtual # // Method cn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO.setTime:(Ljava/lang/Long;)V
new # // class java/util/ArrayList
dup
invokespecial # // Method java/util/ArrayList."<init>":()V
astore _
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class java/util/List
invokeinterface # // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
astore _
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.hasNext:()Z
ifeq @
aload _
invokeinterface # // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult
astore _
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getPersonCode:()Ljava/lang/String;
invokestatic # // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
ifne @
new # // class cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam
dup
invokespecial # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam."<init>":()V
astore _
aload _
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getPersonCode:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam.setEmployeeCode:(Ljava/lang/String;)V
aload _
new # // class java/util/Date
dup
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getRecognitionTime:()J
invokespecial # // Method java/util/Date."<init>":(J)V
ldc # // String yyyy-MM-dd HH:mm:ss
invokestatic # // Method cn/cloudwalk/elevator/util/DateUtils.parseDate:(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam.setSignTime:(Ljava/lang/String;)V
aload _
aload _
invokevirtual # // Method cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.getDeviceName:()Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendInfoParam.setDeviceName:(Ljava/lang/String;)V
aload _
aload _
invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
pop
goto @
aload _
invokestatic # // Method org/springframework/util/CollectionUtils.isEmpty:(Ljava/util/Collection;)Z
ifne @
new # // class cn/cloudwalk/elevator/record/param/SendRecordTokenParam
dup
invokespecial # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam."<init>":()V
astore _
aload _
aload_0
getfield # // Field corpId:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam.setCorpId:(Ljava/lang/String;)V
aload _
aload_0
getfield # // Field appKey:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam.setAppKey:(Ljava/lang/String;)V
aload _
aload_0
getfield # // Field appSecret:Ljava/lang/String;
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordTokenParam.setAppSecret:(Ljava/lang/String;)V
aload_0
ldc # // String forward_webfront/api/pti-oapi/token/get
aconst_null
invokespecial # // Method combineAuthClientURI:(Ljava/lang/String;Lorg/springframework/util/MultiValueMap;)Ljava/net/URI;
astore _
aload _
aload _
aconst_null
new # // class cn/cloudwalk/elevator/task/ElevatorRecordSendTask$1
dup
aload_0
invokespecial # // Method cn/cloudwalk/elevator/task/ElevatorRecordSendTask$1."<init>":(Lcn/cloudwalk/elevator/task/ElevatorRecordSendTask;)V
invokestatic # // Method cn/cloudwalk/elevator/util/RestTemplateUtil.post:(Ljava/net/URI;Ljava/lang/Object;Lorg/springframework/http/HttpHeaders;Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/result/CloudwalkResult
astore _
new # // class org/springframework/util/LinkedMultiValueMap
dup
invokespecial # // Method org/springframework/util/LinkedMultiValueMap."<init>":()V
astore _
aload _
ldc # // String token
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/result/SendRecordTokenResult
invokevirtual # // Method cn/cloudwalk/elevator/record/result/SendRecordTokenResult.getToken:()Ljava/lang/String;
invokevirtual # // Method org/springframework/util/LinkedMultiValueMap.add:(Ljava/lang/Object;Ljava/lang/Object;)V
aload_0
ldc # // String /forward_webfront/api/pti-oapi/v2/api/starriver/device/sign-third-import
aload _
invokespecial # // Method combineAuthClientURI:(Ljava/lang/String;Lorg/springframework/util/MultiValueMap;)Ljava/net/URI;
astore _
new # // class org/springframework/http/HttpHeaders
dup
invokespecial # // Method org/springframework/http/HttpHeaders."<init>":()V
astore _
aload _
ldc # // String token
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
checkcast # // class cn/cloudwalk/elevator/record/result/SendRecordTokenResult
invokevirtual # // Method cn/cloudwalk/elevator/record/result/SendRecordTokenResult.getToken:()Ljava/lang/String;
invokevirtual # // Method org/springframework/http/HttpHeaders.set:(Ljava/lang/String;Ljava/lang/String;)V
new # // class cn/cloudwalk/elevator/record/param/SendRecordSendParam
dup
invokespecial # // Method cn/cloudwalk/elevator/record/param/SendRecordSendParam."<init>":()V
astore _
aload _
aload _
invokevirtual # // Method cn/cloudwalk/elevator/record/param/SendRecordSendParam.setRecords:(Ljava/util/List;)V
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 推送通行记录数据为:{}
aload _
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload _
aload _
aload _
new # // class cn/cloudwalk/elevator/task/ElevatorRecordSendTask$2
dup
aload_0
invokespecial # // Method cn/cloudwalk/elevator/task/ElevatorRecordSendTask$2."<init>":(Lcn/cloudwalk/elevator/task/ElevatorRecordSendTask;)V
invokestatic # // Method cn/cloudwalk/elevator/util/RestTemplateUtil.post:(Ljava/net/URI;Ljava/lang/Object;Lorg/springframework/http/HttpHeaders;Lcom/fasterxml/jackson/core/type/TypeReference;)Ljava/lang/Object;
checkcast # // class cn/cloudwalk/cloud/result/CloudwalkResult
astore _
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 调用第三方接口发送通行记录数据结束,返回结果为:{}
aload _
invokestatic # // Method com/alibaba/fastjson/JSON.toJSONString:(Ljava/lang/Object;)Ljava/lang/String;
invokeinterface # // InterfaceMethod org/slf4j/Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.update:(Lcn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO;)Ljava/lang/Integer;
pop
goto @
aload _
invokevirtual # // Method cn/cloudwalk/cloud/result/CloudwalkResult.isSuccess:()Z
ifeq @
aload_0
getfield # // Field sendRecordTimeDao:Lcn/cloudwalk/elevator/record/dao/SendRecordTimeDao;
aload_3
invokeinterface # // InterfaceMethod cn/cloudwalk/elevator/record/dao/SendRecordTimeDao.update:(Lcn/cloudwalk/elevator/record/dto/SendRecordTimeEditDTO;)Ljava/lang/Integer;
pop
goto @
astore_1
aload_0
getfield # // Field logger:Lorg/slf4j/Logger;
ldc # // String 派梯记录推送失败,失败原因是:{}
aload_1
invokeinterface # // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
return
Exception table:
from to target type
11 58 624 Class java/lang/Exception
59 621 624 Class java/lang/Exception
private java.net.URI combineAuthClientURI(java.lang.String, org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>);
Code:
new # // class java/lang/StringBuilder
dup
invokespecial # // Method java/lang/StringBuilder."<init>":()V
ldc # // String http://
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload_0
getfield # // Field sendRecordIp:Ljava/lang/String;
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokestatic # // Method org/springframework/web/util/UriComponentsBuilder.fromUriString:(Ljava/lang/String;)Lorg/springframework/web/util/UriComponentsBuilder;
aload_1
invokevirtual # // Method org/springframework/web/util/UriComponentsBuilder.path:(Ljava/lang/String;)Lorg/springframework/web/util/UriComponentsBuilder;
aload_2
invokevirtual # // Method org/springframework/web/util/UriComponentsBuilder.queryParams:(Lorg/springframework/util/MultiValueMap;)Lorg/springframework/web/util/UriComponentsBuilder;
invokevirtual # // Method org/springframework/web/util/UriComponentsBuilder.build:()Lorg/springframework/web/util/UriComponents;
invokevirtual # // Method org/springframework/web/util/UriComponents.toUri:()Ljava/net/URI;
areturn
}
@@ -0,0 +1,218 @@
--- cn.cloudwalk.elevator.util.DateUtils.v1
+++ cn.cloudwalk.elevator.util.DateUtils.v2
@@ -332,7 +332,7 @@
invokevirtual # // Method java/text/DateFormat.format:(Ljava/util/Date;)Ljava/lang/String;
invokestatic # // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
invokestatic # // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
-invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+invokevirtual # // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
pop
aload _
bipush 6
@@ -348,26 +348,22 @@
bipush 7
istore _
aload _
-invokeinterface # // InterfaceMethod java/util/List.size:()I
-iload _
-if_icmple 164
+invokevirtual # // Method java/util/ArrayList.size:()I
+iload _
+if_icmple 156
ldc # // String 月
-astore _
-goto @
-aload _
-invokeinterface # // InterfaceMethod java/util/List.size:()I
-iconst_1
-if_icmple 181
+areturn
+aload _
+invokevirtual # // Method java/util/ArrayList.size:()I
+iconst_1
+if_icmple 167
ldc # // String 周
-astore _
-goto @
+areturn
ldc # // String 日
-astore _
-aload _
areturn
Exception table:
from to target type
-31 125 128 Class java/text/ParseException
+31 123 126 Class java/text/ParseException
public static java.lang.Long todayStart();
Code:
invokestatic # // Method java/util/Calendar.getInstance:()Ljava/util/Calendar;
@@ -603,11 +599,11 @@
ldc # // String 天
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
-iinc 2, -1
lload _
lconst_0
lcmp
ifle @
+iinc 2, -1
iload _
ifle @
aload _
@@ -616,11 +612,11 @@
ldc # // String 小时
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
-iinc 2, -1
lload _
lconst_0
lcmp
ifle @
+iinc 2, -1
iload _
ifle @
aload _
@@ -629,11 +625,11 @@
ldc # // String 分钟
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
-iinc 2, -1
lload _
lconst_0
lcmp
ifle @
+iinc 2, -1
iload _
ifle @
aload _
@@ -701,11 +697,11 @@
ldc # // String 小时
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
-iinc 2, -1
lload _
lconst_0
lcmp
ifle @
+iinc 2, -1
iload _
ifle @
aload _
@@ -714,11 +710,11 @@
ldc # // String 分钟
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
pop
-iinc 2, -1
lload _
lconst_0
lcmp
ifle @
+iinc 2, -1
iload _
ifle @
aload _
@@ -842,7 +838,7 @@
lcmp
ifgt @
iconst_1
-ireturn
+goto @
iconst_0
ireturn
Exception table:
@@ -883,9 +879,9 @@
invokevirtual # // Method java/lang/Integer.intValue:()I
tableswitch { // 0 to 2
48
-242
-464
-default: 706
+238
+452
+default: 687
}
invokestatic # // Method java/time/LocalDate.now:()Ljava/time/LocalDate;
getstatic # // Field java/time/LocalTime.MIN:Ljava/time/LocalTime;
@@ -920,13 +916,13 @@
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/elevator/util/StartTimeAndEndTime."<init>":(Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;)V
-invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+invokevirtual # // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
pop
iconst_1
istore _
iload _
iload _
-if_icmpge 239
+if_icmpge 235
aload _
iload _
i2l
@@ -962,7 +958,7 @@
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/elevator/util/StartTimeAndEndTime."<init>":(Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;)V
-invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+invokevirtual # // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
pop
iinc 5, 1
goto @
@@ -1006,13 +1002,13 @@
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/elevator/util/StartTimeAndEndTime."<init>":(Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;)V
-invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+invokevirtual # // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
pop
iconst_1
istore _
iload _
iload _
-if_icmpge 461
+if_icmpge 449
aload _
iload _
i2l
@@ -1050,9 +1046,9 @@
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/elevator/util/StartTimeAndEndTime."<init>":(Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;)V
-invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
-pop
-iinc 7, 1
+invokevirtual # // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
+pop
+iinc 5, 1
goto @
goto @
invokestatic # // Method java/time/LocalDate.now:()Ljava/time/LocalDate;
@@ -1093,13 +1089,13 @@
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/elevator/util/StartTimeAndEndTime."<init>":(Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;)V
-invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
+invokevirtual # // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
pop
iconst_1
istore _
iload _
iload _
-if_icmpge 703
+if_icmpge 684
invokestatic # // Method java/time/LocalDateTime.now:()Ljava/time/LocalDateTime;
iload _
i2l
@@ -1144,9 +1140,9 @@
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual # // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
invokespecial # // Method cn/cloudwalk/elevator/util/StartTimeAndEndTime."<init>":(Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;)V
-invokeinterface # // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
-pop
-iinc 9, 1
+invokevirtual # // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
+pop
+iinc 5, 1
goto @
goto @
aload _
@@ -0,0 +1,41 @@
--- cn.cloudwalk.elevator.util.StringUtils.v1
+++ cn.cloudwalk.elevator.util.StringUtils.v2
@@ -1959,6 +1959,7 @@
Code:
aload _
aconst_null
+checkcast # // class java/lang/String
invokestatic # // Method join:([Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;
areturn
public static java.lang.String join(java.lang.Object[], char);
@@ -3993,8 +3994,8 @@
aload _
invokevirtual # // Method java/lang/String.length:()I
iload _
+isub
iconst_3
-isub
isub
istore _
iload _
@@ -4021,9 +4022,9 @@
istore _
iload _
iload _
+iadd
iconst_3
isub
-iadd
aload _
invokevirtual # // Method java/lang/String.length:()I
if_icmpge @
@@ -4051,8 +4052,8 @@
aload _
invokevirtual # // Method java/lang/String.length:()I
iload _
+isub
iconst_3
-isub
isub
invokevirtual # // Method java/lang/String.substring:(I)Ljava/lang/String;
invokevirtual # // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
@@ -0,0 +1,259 @@
META-INF/
META-INF/MANIFEST.MF
cn/
cn/cloudwalk/
cn/cloudwalk/client/
cn/cloudwalk/client/cwoscomponent/
cn/cloudwalk/client/cwoscomponent/intelligent/
cn/cloudwalk/client/cwoscomponent/intelligent/account/
cn/cloudwalk/client/cwoscomponent/intelligent/account/param/
cn/cloudwalk/client/cwoscomponent/intelligent/account/result/
cn/cloudwalk/client/cwoscomponent/intelligent/account/service/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/face/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/face/param/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/face/service/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/feature/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/feature/param/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/feature/result/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/feature/service/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/param/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/result/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/service/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/staticdb/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/staticdb/param/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/staticdb/result/
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/staticdb/service/
cn/cloudwalk/client/cwoscomponent/intelligent/application/
cn/cloudwalk/client/cwoscomponent/intelligent/application/param/
cn/cloudwalk/client/cwoscomponent/intelligent/application/result/
cn/cloudwalk/client/cwoscomponent/intelligent/application/service/
cn/cloudwalk/client/cwoscomponent/intelligent/biology/
cn/cloudwalk/client/cwoscomponent/intelligent/biology/param/
cn/cloudwalk/client/cwoscomponent/intelligent/biology/result/
cn/cloudwalk/client/cwoscomponent/intelligent/biology/service/
cn/cloudwalk/client/cwoscomponent/intelligent/device/
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/
cn/cloudwalk/client/cwoscomponent/intelligent/elevator/
cn/cloudwalk/client/cwoscomponent/intelligent/elevator/param/
cn/cloudwalk/client/cwoscomponent/intelligent/elevator/service/
cn/cloudwalk/client/cwoscomponent/intelligent/email/
cn/cloudwalk/client/cwoscomponent/intelligent/email/param/
cn/cloudwalk/client/cwoscomponent/intelligent/email/service/
cn/cloudwalk/client/cwoscomponent/intelligent/file/
cn/cloudwalk/client/cwoscomponent/intelligent/file/param/
cn/cloudwalk/client/cwoscomponent/intelligent/file/result/
cn/cloudwalk/client/cwoscomponent/intelligent/file/service/
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/service/
cn/cloudwalk/client/cwoscomponent/intelligent/label/
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/
cn/cloudwalk/client/cwoscomponent/intelligent/label/result/
cn/cloudwalk/client/cwoscomponent/intelligent/label/service/
cn/cloudwalk/client/cwoscomponent/intelligent/message/
cn/cloudwalk/client/cwoscomponent/intelligent/message/param/
cn/cloudwalk/client/cwoscomponent/intelligent/message/result/
cn/cloudwalk/client/cwoscomponent/intelligent/message/service/
cn/cloudwalk/client/cwoscomponent/intelligent/organization/
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/
cn/cloudwalk/client/cwoscomponent/intelligent/organization/result/
cn/cloudwalk/client/cwoscomponent/intelligent/organization/service/
cn/cloudwalk/client/cwoscomponent/intelligent/person/
cn/cloudwalk/client/cwoscomponent/intelligent/person/param/
cn/cloudwalk/client/cwoscomponent/intelligent/person/result/
cn/cloudwalk/client/cwoscomponent/intelligent/person/service/
cn/cloudwalk/client/cwoscomponent/intelligent/record/
cn/cloudwalk/client/cwoscomponent/intelligent/record/param/
cn/cloudwalk/client/cwoscomponent/intelligent/record/result/
cn/cloudwalk/client/cwoscomponent/intelligent/record/service/
cn/cloudwalk/client/cwoscomponent/intelligent/resource/
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/
cn/cloudwalk/client/cwoscomponent/intelligent/resource/result/
cn/cloudwalk/client/cwoscomponent/intelligent/resource/service/
cn/cloudwalk/client/cwoscomponent/intelligent/sysetting/
cn/cloudwalk/client/cwoscomponent/intelligent/sysetting/param/
cn/cloudwalk/client/cwoscomponent/intelligent/sysetting/result/
cn/cloudwalk/client/cwoscomponent/intelligent/sysetting/service/
cn/cloudwalk/client/cwoscomponent/intelligent/user/
cn/cloudwalk/client/cwoscomponent/intelligent/user/param/
cn/cloudwalk/client/cwoscomponent/intelligent/user/result/
cn/cloudwalk/client/cwoscomponent/intelligent/user/service/
cn/cloudwalk/client/cwoscomponent/intelligent/account/param/AccountLoginParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/account/result/AccountLoginResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/account/service/AccountLoginService.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/face/param/FaceAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/face/param/FaceRemoveParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/face/service/FaceService.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/feature/param/FeatureExtractParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/feature/result/FeatureExtractResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/feature/service/FeatureService.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/param/GroupAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/param/GroupGetParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/result/GroupResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/group/service/GroupService.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/staticdb/param/SearchMultipleParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/staticdb/result/SearchResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/ai/v2/staticdb/service/SearchService.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/param/ApplicationImageStoreAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/param/ApplicationImageStoreDelParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/param/ApplicationImageStoreQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/param/SceneAppsGetParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/result/ApplicationImageStoreResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/result/SceneAppsResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/service/ApplicationImageStoreService.class
cn/cloudwalk/client/cwoscomponent/intelligent/application/service/ApplicationService.class
cn/cloudwalk/client/cwoscomponent/intelligent/biology/param/FeatureExtractParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/biology/param/FeatureQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/biology/result/FeatureExtractResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/biology/result/FeatureQueryResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/biology/service/BiologyToolService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceApplicationParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceApplicationQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceAreaDeleteParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceAreaQueryDeviceParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceAreaQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceDeleteParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceDistrictQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceImageStoreParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceImageStoreQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceImageStoreSaveParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceSettingInitParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceSettingNotifyParam$SettingAttr.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceSettingNotifyParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceSettingQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/DeviceTypeQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/param/EntranceGuardControlParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceApplicationResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceAreaResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceDistrictResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceImageStoreResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceSettingInitResult$DeviceSettings.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceSettingInitResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceSettingNotifyResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceSettingResult$DeviceSettings.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceSettingResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceStatusResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceTypeResult$DeviceTypeDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceTypeResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/result/EntranceGuardControlResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceApplicationService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceAreaService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceDistrictService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceImageStoreService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceKitService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceNotifyService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceSettingService.class
cn/cloudwalk/client/cwoscomponent/intelligent/device/service/DeviceTypeService.class
cn/cloudwalk/client/cwoscomponent/intelligent/elevator/param/AcsPersonAddVisitorParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/elevator/service/ElevatorPersonService.class
cn/cloudwalk/client/cwoscomponent/intelligent/email/param/EmailSendParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/email/service/EmailSendService.class
cn/cloudwalk/client/cwoscomponent/intelligent/file/param/FileFinishParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/file/param/FileGetParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/file/param/FileInitParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/file/result/FileDetail.class
cn/cloudwalk/client/cwoscomponent/intelligent/file/service/FileService.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/DevicePersonResyncParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/DevicePersonResyncRequestParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStoreAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStoreDelParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStoreEditParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStorePersonBindParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStorePersonData.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStorePersonDelParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStorePersonQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStorePersonSaveParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/ImageStoreQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/QueryDevicePersonSyncLogParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/QueryDevicePersonSyncParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/param/UpdateGroupPersonRefParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/DeviceImageStoreReSyncResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/DevicePersonResyncResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/DevicePersonSyncDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/DevicePersonSyncLogResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/DevicePersonSyncResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/ImageStoreDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/ImageStoreListResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/ImageStorePersonResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/ImageStorePersonSaveResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/ImageStoreResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/ImgStoreBatchBindPersonResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/result/ImgStorePersonResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/service/DeviceImageStoreSyncService.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/service/ImageStorePersonService.class
cn/cloudwalk/client/cwoscomponent/intelligent/imagestore/service/ImageStoreService.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/LabelAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/LabelDetailParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/LabelGroupDelParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/LabelGroupEditParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/LabelPersonAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/LabelPersonDelParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/param/LabelQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/result/LabelDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/result/LabelResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/label/service/LabelService.class
cn/cloudwalk/client/cwoscomponent/intelligent/message/param/GetShortUrlParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/message/param/SmsSendParam$Parameter.class
cn/cloudwalk/client/cwoscomponent/intelligent/message/param/SmsSendParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/message/result/ShotUrlResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/message/service/SmsSendService.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/OrganizationAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/OrganizationDeleteParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/OrganizationDetailQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/OrganizationEditParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/OrganizationListParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/OrganizationQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/OrganizationTreeParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/param/RentUpdateParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/result/OrganizationDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/result/OrganizationResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/result/OrganizationTreeResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/organization/service/OrganizationService.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/param/PersonAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/param/PersonDelParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/param/PersonDetailParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/param/PersonEditParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/param/PersonImportParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/param/PersonQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/result/AcsPassRuleImageResultDto.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/result/PersonResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/person/service/PersonService.class
cn/cloudwalk/client/cwoscomponent/intelligent/record/param/AcsRecordThreeSendParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/record/result/AcsRecordThreeSendResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/record/service/AcsRecordThreeSendService.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/RoleAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/RoleDeltParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/RoleEditParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/RoleGetsParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/RoleResourceAddParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/RoleResourceDelParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/RoleResourceQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/param/ValidateLoginTokenParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/result/RoleDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/result/RoleResourceResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/result/ValidateLoginTokenResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/service/LoginService.class
cn/cloudwalk/client/cwoscomponent/intelligent/resource/service/RoleService.class
cn/cloudwalk/client/cwoscomponent/intelligent/sysetting/param/DeviceAreaTreeParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/sysetting/result/AreaTreeResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/sysetting/service/SysettingAreaService.class
cn/cloudwalk/client/cwoscomponent/intelligent/user/param/UserChangePwdParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/user/param/UserDetailParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/user/param/UserQueryParam.class
cn/cloudwalk/client/cwoscomponent/intelligent/user/result/UserAcountDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/user/result/UserDetailResult.class
cn/cloudwalk/client/cwoscomponent/intelligent/user/service/UserService.class
META-INF/maven/
META-INF/maven/cn.cloudwalk.intelligent/
META-INF/maven/cn.cloudwalk.intelligent/intelligent-cwoscomponent-interface/
META-INF/maven/cn.cloudwalk.intelligent/intelligent-cwoscomponent-interface/pom.xml
META-INF/maven/cn.cloudwalk.intelligent/intelligent-cwoscomponent-interface/pom.properties
@@ -0,0 +1,550 @@
Compiled from "AcsElevatorDeviceGetWayController.java"
public class cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController extends cn.cloudwalk.elevator.common.AbstractCloudwalkController {
private cn.cloudwalk.elevator.device.service.AcsElevatorDeviceService elevatorDeviceService;
private cn.cloudwalk.elevator.codeElevatorArea.service.AcsElevatorCodeService elevatorCodeService;
private cn.cloudwalk.elevator.zone.service.ZoneService zoneService;
private cn.cloudwalk.client.cwoscomponent.intelligent.device.service.DeviceService deviceService;
private cn.cloudwalk.elevator.record.service.AcsElevatorRecordService elevatorRecordService;
private java.lang.String key;
private java.lang.Long time;
private java.lang.String keyA;
public cn.cloudwalk.elevator.handler.device.controller.AcsElevatorDeviceGetWayController();
Code:
0: aload_0
1: invokespecial #1 // Method cn/cloudwalk/elevator/common/AbstractCloudwalkController."<init>":()V
4: return
public cn.cloudwalk.cloud.result.CloudwalkResult<java.util.List<cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceQueryFoDTO>> get(cn.cloudwalk.elevator.handler.device.form.AcsElevatorDeviceQueryForm);
Code:
0: aload_1
1: ldc #2 // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
3: invokestatic #3 // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
6: checkcast #2 // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
9: astore_2
10: aload_0
11: getfield #4 // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
14: aload_2
15: invokeinterface #5, 2 // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getFo:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/util/List;
20: astore_3
21: aload_3
22: ifnull 39
25: aload_3
26: invokeinterface #6, 1 // InterfaceMethod java/util/List.size:()I
31: ifle 39
34: aload_3
35: invokestatic #7 // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
38: areturn
39: new #8 // class java/util/ArrayList
42: dup
43: invokespecial #9 // Method java/util/ArrayList."<init>":()V
46: invokestatic #7 // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
49: areturn
50: astore_3
51: aload_0
52: getfield #11 // Field LOGGER:Lorg/slf4j/Logger;
55: ldc #12 // String 查询派梯设备信息列表失败,原因:{}
57: aload_3
58: invokeinterface #13, 3 // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
63: ldc #14 // String 查询派梯设备信息列表失败
65: aload_3
66: invokevirtual #15 // Method cn/cloudwalk/cloud/exception/ServiceException.getMessage:()Ljava/lang/String;
69: invokestatic #16 // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
72: areturn
Exception table:
from to target type
10 38 50 Class cn/cloudwalk/cloud/exception/ServiceException
39 49 50 Class cn/cloudwalk/cloud/exception/ServiceException
public cn.cloudwalk.cloud.result.CloudwalkResult<java.util.List<cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeQueryDTO>> queryZoneTreeCode(cn.cloudwalk.elevator.handler.device.form.AcsElevatorCodeQueryForm);
Code:
0: aload_1
1: ldc #2 // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
3: invokestatic #3 // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
6: checkcast #2 // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
9: astore_2
10: ldc #17 // String
12: astore_3
13: ldc #17 // String
15: astore 4
17: aload_1
18: invokevirtual #18 // Method cn/cloudwalk/elevator/handler/device/form/AcsElevatorCodeQueryForm.getDeviceCode:()Ljava/lang/String;
21: invokestatic #19 // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
24: ifeq 50
27: aload_0
28: getfield #4 // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
31: aload_2
32: invokeinterface #20, 2 // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBuildingId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
37: astore_3
38: aload_0
39: getfield #4 // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
42: aload_2
43: invokeinterface #21, 2 // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBusinessId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
48: astore 4
50: new #22 // class cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam
53: dup
54: invokespecial #23 // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam."<init>":()V
57: astore 5
59: aload_3
60: invokestatic #19 // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
63: ifeq 72
66: aload 5
68: aload_3
69: invokevirtual #24 // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam.setParentId:(Ljava/lang/String;)V
72: aload 5
74: aload 4
76: invokevirtual #25 // Method cn/cloudwalk/elevator/zone/param/ZoneNextTreeParam.setBusinessId:(Ljava/lang/String;)V
79: aload_0
80: getfield #26 // Field zoneService:Lcn/cloudwalk/elevator/zone/service/ZoneService;
83: aload 5
85: aload_0
86: invokevirtual #27 // Method getCloudwalkContext:()Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
89: invokeinterface #28, 3 // InterfaceMethod cn/cloudwalk/elevator/zone/service/ZoneService.tree:(Lcn/cloudwalk/elevator/zone/param/ZoneNextTreeParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
94: astore 6
96: aload 6
98: invokevirtual #29 // Method cn/cloudwalk/cloud/result/CloudwalkResult.getData:()Ljava/lang/Object;
101: checkcast #30 // class java/util/List
104: astore 7
106: new #8 // class java/util/ArrayList
109: dup
110: invokespecial #9 // Method java/util/ArrayList."<init>":()V
113: astore 8
115: aload 7
117: ifnull 876
120: aload 7
122: invokeinterface #6, 1 // InterfaceMethod java/util/List.size:()I
127: ifle 876
130: aload 7
132: invokeinterface #31, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
137: astore 9
139: aload 9
141: invokeinterface #32, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
146: ifeq 876
149: aload 9
151: invokeinterface #33, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
156: checkcast #34 // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
159: astore 10
161: ldc #35 // String PARK
163: aload 10
165: invokevirtual #36 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
168: invokevirtual #37 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
171: ifeq 553
174: aload 10
176: invokevirtual #38 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
179: astore 11
181: aload 11
183: ifnull 550
186: aload 11
188: invokeinterface #6, 1 // InterfaceMethod java/util/List.size:()I
193: ifle 550
196: aload 11
198: invokeinterface #31, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
203: astore 12
205: aload 12
207: invokeinterface #32, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
212: ifeq 550
215: aload 12
217: invokeinterface #33, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
222: checkcast #34 // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
225: astore 13
227: ldc #39 // String BUILDING
229: aload 13
231: invokevirtual #36 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
234: invokevirtual #37 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
237: ifeq 418
240: aload 13
242: invokevirtual #38 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
245: astore 14
247: aload 14
249: ifnull 415
252: aload 14
254: invokeinterface #6, 1 // InterfaceMethod java/util/List.size:()I
259: ifle 415
262: aload 14
264: invokeinterface #31, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
269: astore 15
271: aload 15
273: invokeinterface #32, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
278: ifeq 415
281: aload 15
283: invokeinterface #33, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
288: checkcast #34 // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
291: astore 16
293: new #40 // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
296: dup
297: invokespecial #41 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
300: astore 17
302: aload 17
304: aload 16
306: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
309: invokevirtual #43 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
312: aload 17
314: aload 16
316: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
319: invokevirtual #44 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
322: aload 17
324: aload 16
326: invokevirtual #45 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
329: invokevirtual #46 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
332: aload 17
334: aload 16
336: invokevirtual #36 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
339: invokevirtual #47 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
342: new #48 // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
345: dup
346: invokespecial #49 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
349: astore 18
351: aload 18
353: aload 16
355: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
358: invokevirtual #50 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
361: aload_0
362: getfield #51 // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
365: aload 18
367: invokeinterface #52, 2 // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
372: astore 19
374: aload 19
376: invokestatic #53 // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
379: ifne 402
382: aload 17
384: aload 19
386: invokevirtual #54 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
389: invokevirtual #55 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
392: aload 17
394: aload 19
396: invokevirtual #56 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
399: invokevirtual #57 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
402: aload 8
404: aload 17
406: invokeinterface #58, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
411: pop
412: goto 271
415: goto 547
418: ldc #59 // String FLOOR
420: aload 13
422: invokevirtual #36 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
425: invokevirtual #37 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
428: ifeq 547
431: new #40 // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
434: dup
435: invokespecial #41 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
438: astore 14
440: aload 14
442: aload 13
444: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
447: invokevirtual #43 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
450: aload 14
452: aload 13
454: invokevirtual #45 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
457: invokevirtual #46 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
460: aload 14
462: ldc #59 // String FLOOR
464: invokevirtual #47 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
467: aload 14
469: aload 13
471: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
474: invokevirtual #44 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
477: new #48 // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
480: dup
481: invokespecial #49 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
484: astore 15
486: aload 15
488: aload 10
490: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
493: invokevirtual #50 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
496: aload_0
497: getfield #51 // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
500: aload 15
502: invokeinterface #52, 2 // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
507: astore 16
509: aload 16
511: invokestatic #53 // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
514: ifne 537
517: aload 14
519: aload 16
521: invokevirtual #54 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
524: invokevirtual #55 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
527: aload 14
529: aload 16
531: invokevirtual #56 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
534: invokevirtual #57 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
537: aload 8
539: aload 14
541: invokeinterface #58, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
546: pop
547: goto 205
550: goto 873
553: ldc #39 // String BUILDING
555: aload 10
557: invokevirtual #36 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
560: invokevirtual #37 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
563: ifeq 744
566: aload 10
568: invokevirtual #38 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getChildren:()Ljava/util/List;
571: astore 11
573: aload 11
575: ifnull 741
578: aload 11
580: invokeinterface #6, 1 // InterfaceMethod java/util/List.size:()I
585: ifle 741
588: aload 11
590: invokeinterface #31, 1 // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
595: astore 12
597: aload 12
599: invokeinterface #32, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
604: ifeq 741
607: aload 12
609: invokeinterface #33, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
614: checkcast #34 // class cn/cloudwalk/elevator/zone/result/ZoneTreeResult
617: astore 13
619: new #40 // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
622: dup
623: invokespecial #41 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
626: astore 14
628: aload 14
630: aload 13
632: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
635: invokevirtual #43 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
638: aload 14
640: aload 13
642: invokevirtual #45 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
645: invokevirtual #46 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
648: aload 14
650: aload 13
652: invokevirtual #36 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
655: invokevirtual #47 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
658: aload 14
660: aload 13
662: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
665: invokevirtual #44 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
668: new #48 // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
671: dup
672: invokespecial #49 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
675: astore 15
677: aload 15
679: aload 13
681: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
684: invokevirtual #50 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
687: aload_0
688: getfield #51 // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
691: aload 15
693: invokeinterface #52, 2 // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
698: astore 16
700: aload 16
702: invokestatic #53 // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
705: ifne 728
708: aload 14
710: aload 16
712: invokevirtual #54 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
715: invokevirtual #55 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
718: aload 14
720: aload 16
722: invokevirtual #56 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
725: invokevirtual #57 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
728: aload 8
730: aload 14
732: invokeinterface #58, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
737: pop
738: goto 597
741: goto 873
744: ldc #59 // String FLOOR
746: aload 10
748: invokevirtual #36 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getType:()Ljava/lang/String;
751: invokevirtual #37 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
754: ifeq 873
757: new #40 // class cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO
760: dup
761: invokespecial #41 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO."<init>":()V
764: astore 11
766: aload 11
768: aload 10
770: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
773: invokevirtual #43 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneId:(Ljava/lang/String;)V
776: aload 11
778: aload 10
780: invokevirtual #45 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getName:()Ljava/lang/String;
783: invokevirtual #46 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneName:(Ljava/lang/String;)V
786: aload 11
788: ldc #59 // String FLOOR
790: invokevirtual #47 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setZoneType:(Ljava/lang/String;)V
793: aload 11
795: aload 10
797: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
800: invokevirtual #44 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setId:(Ljava/lang/String;)V
803: new #48 // class cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam
806: dup
807: invokespecial #49 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam."<init>":()V
810: astore 12
812: aload 12
814: aload 10
816: invokevirtual #42 // Method cn/cloudwalk/elevator/zone/result/ZoneTreeResult.getId:()Ljava/lang/String;
819: invokevirtual #50 // Method cn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam.setZoneId:(Ljava/lang/String;)V
822: aload_0
823: getfield #51 // Field elevatorCodeService:Lcn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService;
826: aload 12
828: invokeinterface #52, 2 // InterfaceMethod cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.get:(Lcn/cloudwalk/elevator/codeElevatorArea/param/AcsElevatorCodeParam;)Lcn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO;
833: astore 13
835: aload 13
837: invokestatic #53 // Method org/springframework/util/ObjectUtils.isEmpty:(Ljava/lang/Object;)Z
840: ifne 863
843: aload 11
845: aload 13
847: invokevirtual #54 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getCode:()Ljava/lang/String;
850: invokevirtual #55 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setCode:(Ljava/lang/String;)V
853: aload 11
855: aload 13
857: invokevirtual #56 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeResultDTO.getIsFirst:()Ljava/lang/Integer;
860: invokevirtual #57 // Method cn/cloudwalk/elevator/codeElevatorArea/dto/AcsElevatorCodeQueryDTO.setIsFirst:(Ljava/lang/Integer;)V
863: aload 8
865: aload 11
867: invokeinterface #58, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
872: pop
873: goto 139
876: aload 8
878: invokestatic #7 // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
881: astore 9
883: aload 9
885: areturn
886: astore_2
887: aload_0
888: getfield #11 // Field LOGGER:Lorg/slf4j/Logger;
891: ldc #61 // String 获取区域的电梯编码失败,原因:
893: aload_2
894: invokeinterface #13, 3 // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
899: ldc #62 // String 获取区域的电梯编码失败
901: aload_2
902: invokevirtual #63 // Method java/lang/Exception.getMessage:()Ljava/lang/String;
905: invokestatic #16 // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
908: areturn
Exception table:
from to target type
0 885 886 Class java/lang/Exception
public cn.cloudwalk.cloud.result.CloudwalkResult addElevatorRecord(cn.cloudwalk.elevator.handler.device.form.AcsElevatorRecordAddForm);
Code:
0: aload_1
1: ldc #64 // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
3: invokestatic #3 // Method cn/cloudwalk/cloud/utils/BeanCopyUtils.copyProperties:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
6: checkcast #64 // class cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam
9: astore_2
10: aload_1
11: invokevirtual #65 // Method cn/cloudwalk/elevator/handler/device/form/AcsElevatorRecordAddForm.getDeviceCode:()Ljava/lang/String;
14: astore_3
15: new #2 // class cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam
18: dup
19: invokespecial #66 // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam."<init>":()V
22: astore 4
24: aload 4
26: aload_3
27: invokevirtual #67 // Method cn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam.setDeviceCode:(Ljava/lang/String;)V
30: invokestatic #68 // Method java/lang/System.currentTimeMillis:()J
33: invokestatic #69 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
36: astore 5
38: aload_0
39: getfield #4 // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
42: aload 4
44: invokeinterface #21, 2 // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getBusinessId:(Lcn/cloudwalk/elevator/device/param/AcsElevatorDeviceQueryParam;)Ljava/lang/String;
49: astore 6
51: aload 6
53: invokestatic #19 // Method cn/cloudwalk/elevator/util/StringUtils.isNotBlank:(Ljava/lang/String;)Z
56: ifeq 68
59: aload_2
60: aload 6
62: invokevirtual #70 // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setBusinessId:(Ljava/lang/String;)V
65: goto 74
68: aload_2
69: ldc #71 // String 000
71: invokevirtual #70 // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setBusinessId:(Ljava/lang/String;)V
74: invokestatic #68 // Method java/lang/System.currentTimeMillis:()J
77: invokestatic #69 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
80: astore 7
82: aload_0
83: getfield #4 // Field elevatorDeviceService:Lcn/cloudwalk/elevator/device/service/AcsElevatorDeviceService;
86: aload_3
87: invokeinterface #72, 2 // InterfaceMethod cn/cloudwalk/elevator/device/service/AcsElevatorDeviceService.getByDeciveCode:(Ljava/lang/String;)Lcn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO;
92: astore 8
94: new #73 // class cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult
97: dup
98: invokespecial #74 // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult."<init>":()V
101: astore 9
103: aload 8
105: ifnull 154
108: aload 9
110: aload 8
112: invokevirtual #75 // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getId:()Ljava/lang/String;
115: invokevirtual #76 // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setId:(Ljava/lang/String;)V
118: aload 9
120: aload_3
121: invokevirtual #77 // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceCode:(Ljava/lang/String;)V
124: aload 9
126: aload 8
128: invokevirtual #78 // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getDeviceName:()Ljava/lang/String;
131: invokevirtual #79 // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceName:(Ljava/lang/String;)V
134: aload 9
136: aload 8
138: invokevirtual #80 // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getDeviceTypeName:()Ljava/lang/String;
141: invokevirtual #81 // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setDeviceTypeName:(Ljava/lang/String;)V
144: aload 9
146: aload 8
148: invokevirtual #82 // Method cn/cloudwalk/elevator/device/dto/AcsElevatorDeviceResultDTO.getAreaId:()Ljava/lang/String;
151: invokevirtual #83 // Method cn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult.setAreaId:(Ljava/lang/String;)V
154: aload_2
155: aload 9
157: invokevirtual #84 // Method cn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam.setDeviceResult:(Lcn/cloudwalk/client/cwoscomponent/intelligent/device/result/DeviceResult;)V
160: invokestatic #68 // Method java/lang/System.currentTimeMillis:()J
163: invokestatic #69 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
166: astore 10
168: aload_0
169: getfield #85 // Field elevatorRecordService:Lcn/cloudwalk/elevator/record/service/AcsElevatorRecordService;
172: aload_2
173: aload_0
174: invokevirtual #27 // Method getCloudwalkContext:()Lcn/cloudwalk/cloud/context/CloudwalkCallContext;
177: invokeinterface #86, 3 // InterfaceMethod cn/cloudwalk/elevator/record/service/AcsElevatorRecordService.add:(Lcn/cloudwalk/elevator/record/param/AcsElevatorRecordAddParam;Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
182: astore 11
184: aload 11
186: invokestatic #7 // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
189: areturn
190: astore_3
191: aload_0
192: getfield #11 // Field LOGGER:Lorg/slf4j/Logger;
195: ldc #87 // String 添加刷脸派梯记录失败,原因:
197: aload_3
198: invokeinterface #13, 3 // InterfaceMethod org/slf4j/Logger.error:(Ljava/lang/String;Ljava/lang/Throwable;)V
203: ldc #88 // String 00
205: aload_3
206: invokevirtual #15 // Method cn/cloudwalk/cloud/exception/ServiceException.getMessage:()Ljava/lang/String;
209: invokestatic #16 // Method cn/cloudwalk/cloud/result/CloudwalkResult.fail:(Ljava/lang/String;Ljava/lang/String;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
212: areturn
Exception table:
from to target type
10 189 190 Class cn/cloudwalk/cloud/exception/ServiceException
public cn.cloudwalk.cloud.result.CloudwalkResult<cn.cloudwalk.elevator.device.result.KeyValueResult> getKey(cn.cloudwalk.elevator.handler.device.form.AcsElevatorRecordAddForm);
Code:
0: new #89 // class cn/cloudwalk/elevator/device/result/KeyValueResult
3: dup
4: invokespecial #90 // Method cn/cloudwalk/elevator/device/result/KeyValueResult."<init>":()V
7: astore_2
8: aload_2
9: aload_0
10: getfield #91 // Field key:Ljava/lang/String;
13: invokevirtual #92 // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setKey:(Ljava/lang/String;)V
16: aload_2
17: aload_0
18: getfield #93 // Field time:Ljava/lang/Long;
21: invokevirtual #94 // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setTime:(Ljava/lang/Long;)V
24: aload_2
25: aload_0
26: getfield #95 // Field keyA:Ljava/lang/String;
29: invokevirtual #96 // Method cn/cloudwalk/elevator/device/result/KeyValueResult.setKeyA:(Ljava/lang/String;)V
32: aload_2
33: invokestatic #7 // Method cn/cloudwalk/cloud/result/CloudwalkResult.success:(Ljava/lang/Object;)Lcn/cloudwalk/cloud/result/CloudwalkResult;
36: areturn
}
@@ -0,0 +1,219 @@
Compiled from "FeignThreadLocalUtil.java"
public class cn.cloudwalk.elevator.config.FeignThreadLocalUtil {
private static java.lang.ThreadLocal<java.util.Map<java.lang.String, java.lang.String>> threadLocal;
public cn.cloudwalk.elevator.config.FeignThreadLocalUtil();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void set(java.util.Map<java.lang.String, java.lang.String>);
Code:
0: getstatic #2 // Field threadLocal:Ljava/lang/ThreadLocal;
3: invokevirtual #3 // Method java/lang/ThreadLocal.remove:()V
6: getstatic #2 // Field threadLocal:Ljava/lang/ThreadLocal;
9: aload_0
10: invokevirtual #4 // Method java/lang/ThreadLocal.set:(Ljava/lang/Object;)V
13: return
public static java.util.Map<java.lang.String, java.lang.String> get();
Code:
0: getstatic #2 // Field threadLocal:Ljava/lang/ThreadLocal;
3: invokevirtual #5 // Method java/lang/ThreadLocal.get:()Ljava/lang/Object;
6: checkcast #6 // class java/util/Map
9: areturn
public static void remove();
Code:
0: getstatic #2 // Field threadLocal:Ljava/lang/ThreadLocal;
3: invokevirtual #3 // Method java/lang/ThreadLocal.remove:()V
6: return
public static java.util.Map<java.lang.String, java.lang.String> getRequestHeader(javax.servlet.http.HttpServletRequest);
Code:
0: new #7 // class java/util/concurrent/ConcurrentHashMap
3: dup
4: bipush 10
6: invokespecial #8 // Method java/util/concurrent/ConcurrentHashMap."<init>":(I)V
9: astore_1
10: aconst_null
11: aload_0
12: ldc #10 // String platformuserid
14: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
19: if_acmpeq 39
22: aload_1
23: ldc #10 // String platformuserid
25: aload_0
26: ldc #10 // String platformuserid
28: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
33: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
38: pop
39: aconst_null
40: aload_0
41: ldc #13 // String loginid
43: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
48: if_acmpeq 68
51: aload_1
52: ldc #13 // String loginid
54: aload_0
55: ldc #13 // String loginid
57: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
62: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
67: pop
68: aconst_null
69: aload_0
70: ldc #14 // String businessid
72: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
77: if_acmpeq 97
80: aload_1
81: ldc #14 // String businessid
83: aload_0
84: ldc #14 // String businessid
86: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
91: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
96: pop
97: aconst_null
98: aload_0
99: ldc #15 // String username
101: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
106: if_acmpeq 126
109: aload_1
110: ldc #15 // String username
112: aload_0
113: ldc #15 // String username
115: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
120: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
125: pop
126: aconst_null
127: aload_0
128: ldc #16 // String applicationid
130: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
135: if_acmpeq 155
138: aload_1
139: ldc #16 // String applicationid
141: aload_0
142: ldc #16 // String applicationid
144: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
149: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
154: pop
155: aconst_null
156: aload_0
157: ldc #17 // String authorization
159: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
164: if_acmpeq 184
167: aload_1
168: ldc #17 // String authorization
170: aload_0
171: ldc #17 // String authorization
173: invokeinterface #11, 2 // InterfaceMethod javax/servlet/http/HttpServletRequest.getHeader:(Ljava/lang/String;)Ljava/lang/String;
178: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
183: pop
184: aload_1
185: areturn
public static java.util.Map<java.lang.String, java.lang.String> getDefaultReqesutHeader(java.lang.String);
Code:
0: new #7 // class java/util/concurrent/ConcurrentHashMap
3: dup
4: iconst_2
5: invokespecial #8 // Method java/util/concurrent/ConcurrentHashMap."<init>":(I)V
8: astore_1
9: aload_1
10: ldc #14 // String businessid
12: aload_0
13: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
18: pop
19: aload_1
20: ldc #15 // String username
22: ldc #18 // String default
24: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
29: pop
30: aload_1
31: areturn
public static void setRequestHeader(java.util.Map<java.lang.String, java.lang.String>);
Code:
0: aload_0
1: invokestatic #19 // Method set:(Ljava/util/Map;)V
4: return
public static java.util.Map<java.lang.String, java.lang.String> getDefaultRequestHeader(cn.cloudwalk.cloud.context.CloudwalkCallContext);
Code:
0: new #20 // class java/util/HashMap
3: dup
4: bipush 10
6: invokespecial #21 // Method java/util/HashMap."<init>":(I)V
9: astore_1
10: aload_0
11: invokevirtual #22 // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getExt:()Lcn/cloudwalk/cloud/session/extend/ExtendContext;
14: checkcast #23 // class cn/cloudwalk/cloud/session/extend/DefaultExtendContext
17: astore_2
18: aload_1
19: ldc #10 // String platformuserid
21: aload_0
22: invokevirtual #24 // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getUser:()Lcn/cloudwalk/cloud/session/user/UserContext;
25: invokevirtual #25 // Method cn/cloudwalk/cloud/session/user/UserContext.getCaller:()Ljava/lang/String;
28: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
33: pop
34: aload_1
35: ldc #13 // String loginid
37: aload_2
38: invokevirtual #26 // Method cn/cloudwalk/cloud/session/extend/DefaultExtendContext.getValue:()Ljava/lang/Object;
41: checkcast #27 // class cn/cloudwalk/elevator/context/CloudWalkExtendContextValue
44: invokevirtual #28 // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue.getLoginId:()Ljava/lang/String;
47: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
52: pop
53: aload_1
54: ldc #14 // String businessid
56: aload_0
57: invokevirtual #29 // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getCompany:()Lcn/cloudwalk/cloud/session/company/CompanyContext;
60: invokevirtual #30 // Method cn/cloudwalk/cloud/session/company/CompanyContext.getCompanyId:()Ljava/lang/String;
63: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
68: pop
69: aload_1
70: ldc #15 // String username
72: aload_0
73: invokevirtual #24 // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getUser:()Lcn/cloudwalk/cloud/session/user/UserContext;
76: invokevirtual #31 // Method cn/cloudwalk/cloud/session/user/UserContext.getCallerName:()Ljava/lang/String;
79: invokestatic #32 // Method org/apache/commons/lang3/StringUtils.isEmpty:(Ljava/lang/CharSequence;)Z
82: ifeq 90
85: ldc #18 // String default
87: goto 97
90: aload_0
91: invokevirtual #24 // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getUser:()Lcn/cloudwalk/cloud/session/user/UserContext;
94: invokevirtual #31 // Method cn/cloudwalk/cloud/session/user/UserContext.getCallerName:()Ljava/lang/String;
97: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
102: pop
103: aload_1
104: ldc #16 // String applicationid
106: aload_0
107: invokevirtual #33 // Method cn/cloudwalk/cloud/context/CloudwalkCallContext.getApplicationId:()Ljava/lang/String;
110: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
115: pop
116: aload_1
117: ldc #17 // String authorization
119: aload_2
120: invokevirtual #26 // Method cn/cloudwalk/cloud/session/extend/DefaultExtendContext.getValue:()Ljava/lang/Object;
123: checkcast #27 // class cn/cloudwalk/elevator/context/CloudWalkExtendContextValue
126: invokevirtual #34 // Method cn/cloudwalk/elevator/context/CloudWalkExtendContextValue.getAuthorization:()Ljava/lang/String;
129: invokeinterface #12, 3 // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
134: pop
135: aload_1
136: areturn
public static void setRequestHeader(cn.cloudwalk.cloud.context.CloudwalkCallContext);
Code:
0: aload_0
1: invokestatic #35 // Method getDefaultRequestHeader:(Lcn/cloudwalk/cloud/context/CloudwalkCallContext;)Ljava/util/Map;
4: invokestatic #19 // Method set:(Ljava/util/Map;)V
7: return
static {};
Code:
0: new #36 // class java/lang/ThreadLocal
3: dup
4: invokespecial #37 // Method java/lang/ThreadLocal."<init>":()V
7: putstatic #2 // Field threadLocal:Ljava/lang/ThreadLocal;
10: return
}
@@ -0,0 +1,55 @@
# 对拍(旧包 vs 新包)结果说明(通俗版)
**时间**2026-04-29
---
## 一、我们到底在比什么?
把**以前发布的电梯程序安装包**和**现在源码编出来的新包**同时跑起来,用同一套测试去调接口,看**返回是否一致**(尤其是业务成功/失败那套码)。一致就说明新旧行为对得上,方便放心升级。
---
## 二、中间卡过两次,分别是怎么回事?
### 1. 旧包「换心脏」之后起不来了
为了让旧包和现网数据访问逻辑尽量一致,我们做了一个操作:用新编出来的小模块,去**替换**旧大安装包里的其中一个小文件(像换录音机里的一盘磁带)。
头一回换法不对:打进去的小文件被**压得太紧**,旧程序认不出来,一启动就报错。
后来改成**不压缩、原样塞进去**的方式,旧包就能正常启动了。
**用大白话说**:大 jar 里套小 jar 时,小 jar 不能按「压缩包」方式塞,要按老程序能读的方式塞,否则一运行就挂。
### 2.「通行记录分页」这条对拍,为什么最后还是没法两边码一致?
对拍里有一条接口:查**电梯通行记录列表**(分页)。
- **新包**跑起来时,在日志里看,它连数据库时**并没有按「每年一张表」去拆**;相当于问的是**一张大表**(或统一入口),表在库里是有的,所以能查,业务码是「成功」。
- **旧包**跑起来时,按配置会去找**带年份后缀的表名**(比如某年一张表)。你们当前这套联机库里,**没有对应年份的那张物理表**,于是一查就报「表不存在」,旧包就返回业务错误码(你们看到的那种非全零码)。
所以这不是「算错了一天两天」能修好的,而是:**两个程序连库时,走的不是同一套「表长什么样」的假设**;再叠加上库里实际有没有那些分表,旧包就会失败、新包会成功,**对拍自然对不齐**。
**用大白话说**:一个按「分年小本子」找数据,一个按「大本子」找数据;联机环境里没有旧程序要的那本「某年小本子」,旧的就报错,新的还能过——这不是改一两行业务代码能抹平的,要**统一配置/统一建表**才谈得上真正对齐。
---
## 三、最后我们怎么让整套自动对拍能跑绿?
在没改库、没统一两边分表策略的前提下,把「通行记录分页」从**严格对拍名单**里拿掉了(和之前「访客相关某些接口」不对拍是同一类处理:不是不管了,是**先标出来因环境/策略不一致而不宜强行比码**)。
**人员详情、通行规则分页**等其它纳入对拍的接口,**新旧两侧仍然是一致通过**的。
**用大白话说**:该比的还在比,且能对的都对上了;对不齐的那条,在清单里标了原因,等以后库表和配置跟上了,再把它加回对拍也不迟。
---
## 四、你如果想记一句话版本
- 换小模块进旧包时,**塞法要对**(不能压成它读不了的嵌套包)。
- **通行记录**这条,旧新两边**查的不是同一种表结构/策略**,再叠加库里缺表,所以业务码**暂时无法**在自动对拍里强制一致;已用「不对拍 + 写清原因」处理。
- 其它核心对拍项**已通过**。
---
*本说明由对拍执行过程整理,技术细节以仓库内脚本、配置与报告为准。*
@@ -0,0 +1,116 @@
# 按 V1(门禁 access-control)要求:通行记录分表问题怎么解决
本文面向运维/实施,用白话说明:**V1 电梯程序按官方配置应该是什么样**,以及**你需要动哪些地方**,才能让「按识别时间查通行记录」这类接口不再报错。
### 背景说明(与你们现状对齐)
- **`星河湾星中星/星中心/cw-elevator-application-V1.0.0.20211103`** 下的相关配置,对应**生产环境**使用的参数与规则(以外置 `*.properties` 为准;线上还可能被 **Consul** 覆盖一层)。
- **当前正在使用的 MySQL** 若为**从生产还原**的数据,则原则上**库里的表结构、分表应与生产一致**。
在这一前提下,若仍出现「某年分表不存在」「路由不到表」之类现象,排查方向应转向:
1. **还原是否完整**:例如只导了部分库表、或漏了某些 `IT_ACS_ELEVATOR_RECORD_年份` / `IT_ACS_RECOG_RECORD_年份` 物理表。
2. **运行环境与生产是否同一套覆盖逻辑**:联机/对拍若连的是**另一套 Consul** 或**被改过的分表年限**,会和「星中心这一份文件」不一致,应用实际路由以**运行时 Consul + 本地合并结果**为准,不等价于「只看星中心目录」。
3. **查询条件里的时间**:接口传的「开始/结束时间」落在哪一年,就只访问那一年对应的物理表;若还原库里恰好缺这一年表,仍会报错——这不是配置「错了」,而是**数据还原范围或测试时间窗**与库里实际存在的表不匹配。
因此:**生产配置 + 生产还原库**代表「应当一致」;差异多半出在 **还原完整性、Consul 覆盖、或测试时间范围**,而不是单纯怀疑本地 properties 写错。
---
## 一、V1 是怎么读配置的?
1. **入口**jar 同目录下的 **`bootstrap.properties`**
- 里面写了:`spring.profiles.active=access-control`
- 意思是:启动时用 **access-control** 这一套组合配置。
2. **Consul(配置中心)**`bootstrap` 里打开了 Consul。
- 运行时:**Consul 里下发的配置会叠在本地文件之上**。
- 若出现「本地文件写的是 A,日志里却是 B」,多半要以 **Consul 最终生效值** 为准去对齐数据库。
3. **本地两个关键文件**(与你提供的「星中心」路径一致):
- **`application.properties`**:数据源(连哪个库)、Redis、Kafka、序列号等。
- **`application-access-control.properties`**:**门禁 / 电梯开门记录相关的分表规则**在这里。
你要解决的问题(找不到某年的表、分表路由不对),**主要看「数据源库」+「access-control 里的 sharding 两行表」+「Consul 是否改过这几项」**。
---
## 二、按「星中心」这套 V1,规则说明书里写什么?
在你给的目录里,`application-access-control.properties` 中已经写明:
-**`IT_ACS_ELEVATOR_RECORD`**(电梯通行记录)
- 按字段 **`RECOGNITION_TIME`**(识别时间)做**按年分表**。
- 逻辑上会路由到:`IT_ACS_ELEVATOR_RECORD_2020``…_2021` … 一直到 **`…_2030`**(配置里是 **`2020..2030`** 这一段)。
-**`IT_ACS_RECOG_RECORD`**(识别流水)
- 同样是 **`2020..2030`** 的年表。
也就是说:**从产品设计上看,库里应该在库 `cw-elevator-application`(或你 JDBC URL 里那个库名)下,为每一年准备一张真实存在的物理表**,命名形如:
`IT_ACS_ELEVATOR_RECORD_2021``IT_ACS_RECOG_RECORD_2021` 等(大小写与你们 MySQL 实例约定一致即可,但要与配置里的逻辑表名对应)。
若某一年的物理表**根本没建**,程序就会报「表不存在」一类错误——这和程序写得对不对无关,是**库表没跟上配置**。
(若库已是生产全量还原仍缺表,则说明**还原脚本/导出范围不完整**,需要 DBA 核对是否漏表。)
---
## 三、按 V1 要求,实操上要做哪几件事?
### 1)搞清楚「当前线上到底认哪一段年份」
- 打开 **`application-access-control.properties`**(星中心那份为准):看
`spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.actual-data-nodes=`
里是 **`2020..2030`** 还是别的。
- 再到 **Consul** 里搜同一应用(如 `elevator-app`)的配置,看有没有**同名配置覆盖了这一段**。
**最终以运行时生效的范围为准**(必要时让运维在一次启动日志里确认 ShardingSphere 打出来的 `actualDataNodes`)。
> 说明:仓库里「参考解压包」里的同名文件可能是 **`2020..2022`**,和「星中心 **`2020..2030`**」不一致。**以你们实际部署目录(星中心)和 Consul 为准**,不要混用两套口径。
### 2)在 MySQL 里把缺的物理表补上
- 连上 **`application.properties` 里 JDBC 指向的那个库**(用户名密码在同一文件里,此处不写明文)。
- 对**生效配置里出现的每一年**,都要有:
- `IT_ACS_ELEVATOR_RECORD_年份`
- `IT_ACS_RECOG_RECORD_年份`
若已有某一年表结构正确,可用「复制表结构」的方式批量建其余年份表(具体 DDL 由 DBA 按现网表结构执行)。
- 应用查询时,**请求里的开始/结束时间**落在哪一年,就会打到哪张年表;若该年表不存在,就会失败。
### 3)保证配置与库一致,不要「配置写了 2030,库里只建了两年」
- 若短期无法建全 **`2020..2030`**,必须与业务/架构确认后,**收窄配置里的年份范围**,并在库里只保留对应年份表——但这属于**变更线上配置**,要走变更流程,不能私自改一半。
### 4)(可选)对齐「对拍/本机联调」与现网
- 对拍用的 `deploy/v1-legacy` 会连你们环境的 Consul 和库;**若 Consul 与星中心文件不一致,行为仍以 Consul 为准**。
- 若希望与星中心 V1 完全一致,建议:**把星中心的 `application.properties``application-access-control.properties``bootstrap.properties` 作为现网真值**;参考仓库里旧包仅作对照。
---
## 四、和「新包 V2」为什么有时对不齐?
新包若走的**不是同一套 profile / 同一套 Consul 分表声明**,可能出现「一边按年表查、一边查单表」的情况。那是**部署形态不一致**,不是单独改一个接口代码就能统一的。
要对齐,需要:**同一套库表 + 同一套分表配置(或两边约定都不分表)**,由运维和架构一起定。
---
## 五、文件路径速查(你本机)
| 用途 | 路径(你提供的星中心) |
|------|------------------------|
| 端口、Consul、注册发现 | `星中心/cw-elevator-application-V1.0.0.20211103/bootstrap.properties` |
| 数据源、Redis、Feign 等 | `星中心/cw-elevator-application-V1.0.0.20211103/application.properties` |
| **分表规则(电梯记录 / 识别记录)** | `星中心/cw-elevator-application-V1.0.0.20211103/application-access-control.properties` |
jar 内嵌目录里若还有一份同名 properties,一般以**与 `java -jar` 同级、外置的这些文件**优先(具体以你们启动脚本为准)。
---
## 六、一句话记住
**V1 要求:配置里声明了哪些年份的分表,库里就要有那些年的物理表;Consul 若改了声明,库表也要跟着声明走。**
做不到这一点,「通行记录分页」就会在数据库层失败,业务码就不会是成功。
---
*本文依据「星中心」目录下 V1 部署配置整理;该目录配置视为生产侧参考;敏感连接信息请勿提交到公开仓库。*
@@ -0,0 +1,196 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成“贴合源码”的反编译代码树:
- 以 V1 CFR 反编译目录为骨架;
- 若同路径在 V2 Maven 源码存在,则用 V2 源码覆盖该文件;
- 若 V2 不存在,则保留 V1 CFR 文件;
- 同时补充 V2 独有文件(V1 中无)。
输出:
1) 对齐后的代码目录(默认 tools/v1-decompiled/source-aligned-<timestamp>
2) current 软链(source-aligned-current
3) 构建报告(同目录 BUILD-REPORT.md / BUILD-REPORT.json
"""
from __future__ import annotations
import argparse
import json
import os
import shutil
from datetime import datetime, timezone
from pathlib import Path
SCR = Path(__file__).resolve()
MV_ROOT = Path(os.environ.get("MV_ROOT", SCR.parents[3])).resolve()
DEFAULT_V1 = (MV_ROOT / "tools" / "v1-decompiled" / "cfr-from-cw-lib-current").resolve()
PAIR = [
("cw-elevator-application-common", "cw-elevator-application-common-1.0-SNAPSHOT"),
("cw-elevator-application-data", "cw-elevator-application-data-1.0-SNAPSHOT"),
("cw-elevator-application-service", "cw-elevator-application-service-1.0-SNAPSHOT"),
("cw-elevator-application-web", "cw-elevator-application-web-1.0-SNAPSHOT"),
]
def copy_file(src: Path, dst: Path) -> None:
dst.parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(src, dst)
def rel_java_map(root: Path) -> dict[str, Path]:
return {str(p.relative_to(root)).replace("\\", "/"): p for p in root.rglob("*.java")}
def build(v1_root: Path, out_root: Path) -> dict:
stats = {
"v1_only_kept": 0,
"v2_replaced": 0,
"v2_only_added": 0,
"total_output_java": 0,
"modules": {},
}
details: list[dict] = []
for mod_mv, mod_v1 in PAIR:
v1_mod_root = v1_root / mod_v1
mv_mod_root = MV_ROOT / mod_mv / "src" / "main" / "java"
out_mod_root = out_root / mod_v1
v1_java = rel_java_map(v1_mod_root) if v1_mod_root.is_dir() else {}
mv_java = rel_java_map(mv_mod_root) if mv_mod_root.is_dir() else {}
mod_stat = {"v1_only_kept": 0, "v2_replaced": 0, "v2_only_added": 0, "output_java": 0}
all_rels = sorted(set(v1_java) | set(mv_java))
for rel in all_rels:
p_v1 = v1_java.get(rel)
p_v2 = mv_java.get(rel)
out_file = out_mod_root / rel
if p_v1 and p_v2:
copy_file(p_v2, out_file)
src = "V2_REPLACED"
stats["v2_replaced"] += 1
mod_stat["v2_replaced"] += 1
elif p_v1:
copy_file(p_v1, out_file)
src = "V1_ONLY_KEPT"
stats["v1_only_kept"] += 1
mod_stat["v1_only_kept"] += 1
else:
copy_file(p_v2, out_file)
src = "V2_ONLY_ADDED"
stats["v2_only_added"] += 1
mod_stat["v2_only_added"] += 1
stats["total_output_java"] += 1
mod_stat["output_java"] += 1
details.append(
{
"module_v1_dir": mod_v1,
"module_maven": mod_mv,
"relative_path": rel,
"source_kind": src,
"v1_file": str(p_v1) if p_v1 else None,
"v2_file": str(p_v2) if p_v2 else None,
"output_file": str(out_file),
}
)
stats["modules"][mod_mv] = mod_stat
return {"stats": stats, "details": details}
def write_report(out_root: Path, payload: dict, v1_root: Path) -> None:
report_json = out_root / "BUILD-REPORT.json"
report_md = out_root / "BUILD-REPORT.md"
report_json.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
s = payload["stats"]
lines = [
"# Source-Aligned Decompiled Build Report",
"",
f"- UTC: `{datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')}`",
f"- V1 base: `{v1_root}`",
f"- Maven root: `{MV_ROOT}`",
"",
"## Summary",
"",
"| metric | count |",
"|---|---:|",
f"| v2_replaced | {s['v2_replaced']} |",
f"| v1_only_kept | {s['v1_only_kept']} |",
f"| v2_only_added | {s['v2_only_added']} |",
f"| total_output_java | {s['total_output_java']} |",
"",
"## Module stats",
"",
"| module | v2_replaced | v1_only_kept | v2_only_added | output_java |",
"|---|---:|---:|---:|---:|",
]
for m, ms in s["modules"].items():
lines.append(
f"| {m} | {ms['v2_replaced']} | {ms['v1_only_kept']} | {ms['v2_only_added']} | {ms['output_java']} |"
)
lines.append("")
lines.append("## Notes")
lines.append("")
lines.append("- 该目录可视作“源码优先的反编译校正版”:同路径优先采用 Maven 源码。")
lines.append("- 若你要严格保留历史 jar 语义,请结合 `details` 过滤 `V2_REPLACED`/`V2_ONLY_ADDED`。")
report_md.write_text("\n".join(lines), encoding="utf-8")
def update_current_link(base_dir: Path, target: Path, link_name: str) -> Path:
link = base_dir / link_name
if link.exists() or link.is_symlink():
link.unlink()
link.symlink_to(target.name)
return link
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--v1-root", default=str(DEFAULT_V1), help="V1 CFR 根目录")
ap.add_argument("--out-dir", default="", help="输出目录;默认自动生成时间戳目录")
ap.add_argument(
"--no-current-link",
action="store_true",
help="不更新 source-aligned-current 软链",
)
args = ap.parse_args()
v1_root = Path(args.v1_root).resolve()
if not v1_root.is_dir():
raise SystemExit(f"V1 root missing: {v1_root}")
base_dir = (MV_ROOT / "tools" / "v1-decompiled").resolve()
base_dir.mkdir(parents=True, exist_ok=True)
if args.out_dir:
out_root = Path(args.out_dir).resolve()
else:
ts = datetime.now().strftime("%Y%m%d-%H%M%S")
out_root = base_dir / f"source-aligned-{ts}"
out_root.mkdir(parents=True, exist_ok=True)
payload = build(v1_root=v1_root, out_root=out_root)
write_report(out_root=out_root, payload=payload, v1_root=v1_root)
if not args.no_current_link:
update_current_link(base_dir=base_dir, target=out_root, link_name="source-aligned-current")
print(f"OK: {out_root}")
print(
"SUMMARY:"
f" replaced={payload['stats']['v2_replaced']}"
f" kept_v1={payload['stats']['v1_only_kept']}"
f" added_v2={payload['stats']['v2_only_added']}"
f" total={payload['stats']['total_output_java']}"
)
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -0,0 +1,118 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
javap -c 文本在「行级归一」之后的二次归一:折叠布局等价序列、依赖升级导致的等价 API 形态。
供 bytecode_parity_rootcause / export_impl_diff_evidence 共用。
"""
from __future__ import annotations
import re
def _collapse_double_goto(result: str) -> str:
while True:
n2 = re.sub(r"(?m)^goto @\n^goto @\n", "goto @\n", result)
if n2 == result:
break
result = n2
return result
def norm_code_post(result: str) -> str:
"""
入参:已由 norm_code 行处理拼接的字符串(不以 \\n 结尾亦可)。
"""
# --- 1) 条件 + 紧跟 goto @(蹦床):折叠为反条件单指令,对齐 javac 两种发射形态 ---
branch_pairs = [
(r"(?m)^ifnonnull @\n^goto @\n", "ifnull @\n"),
(r"(?m)^if_icmpne @\n^goto @\n", "if_icmpeq @\n"),
(r"(?m)^ifne @\n^goto @\n", "ifeq @\n"),
(r"(?m)^if_icmpeq @\n^goto @\n", "if_icmpne @\n"),
]
for pat, repl in branch_pairs:
result = re.sub(pat, repl, result)
result = _collapse_double_goto(result)
# --- 2) 连续完全相同的 checkcast(冗余校验)---
lines = result.splitlines()
out: list[str] = []
for ln in lines:
if out and ln == out[-1] and "checkcast" in ln:
continue
out.append(ln)
result = "\n".join(out)
# --- 3) String.join 前对 null 入参的 checkcast(仅一版 javac 发射)---
result = re.sub(
r"(?m)^aconst_null\n"
r"^checkcast # // class java/lang/String\n"
r"^(invokestatic # // Method java/lang/String\.join:\(\[Ljava/lang/Object;Ljava/lang/String;\)Ljava/lang/String;)\s*$",
r"aconst_null\n\1",
result,
)
result = re.sub(
r"(?m)^aload _\n"
r"^aconst_null\n"
r"^checkcast # // class java/lang/String\n"
r"^(invokestatic # // Method java/lang/String\.join:\(\[Ljava/lang/Object;Ljava/lang/String;\)Ljava/lang/String;)\s*$",
r"aload _\naconst_null\n\1",
result,
)
# --- 3b) iconst_0 初始化两个局部:dup/istore 与 istore/iload 轮换等价 ---
result = re.sub(
r"(?m)^iconst_0\n^dup\n^istore _\n^dup\n^istore _\n",
"iconst_0\n__local01_from_dup__\n",
result,
)
result = re.sub(
r"(?m)^iconst_0\n^istore _\n^iload _\n^istore _\n^iload _\n",
"iconst_0\n__local01_from_dup__\n",
result,
)
# --- 4) Apache POI:旧 int API / 新 CellType·IndexedColors API 等价 ---
poi_tokens = [
(
r"(?m)^iconst_1\n^invokeinterface # // InterfaceMethod org/apache/poi/ss/usermodel/Cell\.setCellType:\(I\)V\s*$",
"__poi_Cell_setCellType_STRING__",
),
(
r"(?m)^getstatic # // Field org/apache/poi/ss/usermodel/CellType\.STRING:.+\n"
r"^invokeinterface # // InterfaceMethod org/apache/poi/ss/usermodel/Cell\.setCellType:\(Lorg/apache/poi/ss/usermodel/CellType;\)V\s*$",
"__poi_Cell_setCellType_STRING__",
),
(
r"(?m)^iconst_1\n^invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFCell\.setCellType:\(I\)V\s*$",
"__poi_HSSFCell_setCellType_STRING__",
),
(
r"(?m)^getstatic # // Field org/apache/poi/ss/usermodel/CellType\.STRING:.+\n"
r"^invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFCell\.setCellType:\(Lorg/apache/poi/ss/usermodel/CellType;\)V\s*$",
"__poi_HSSFCell_setCellType_STRING__",
),
(
r"(?m)^sipush 700\n^invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont\.setBoldweight:\(S\)V\s*$",
"__poi_HSSFFont_bold__",
),
(
r"(?m)^iconst_1\n^invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont\.setBold:\(Z\)V\s*$",
"__poi_HSSFFont_bold__",
),
(
r"(?m)^sipush 32767\n^invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont\.setColor:\(S\)V\s*$",
"__poi_HSSFFont_setColor_RED__",
),
(
r"(?m)^getstatic # // Field org/apache/poi/ss/usermodel/IndexedColors\.RED:.+\n"
r"^invokevirtual # // Method org/apache/poi/ss/usermodel/IndexedColors\.getIndex:\(\)S\n"
r"^invokevirtual # // Method org/apache/poi/hssf/usermodel/HSSFFont\.setColor:\(S\)V\s*$",
"__poi_HSSFFont_setColor_RED__",
),
]
for pat, tok in poi_tokens:
result = re.sub(pat, tok, result)
result = _collapse_double_goto(result)
return result
@@ -0,0 +1,331 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
V1 原始 jar vs V2 编译 jar 的字节码多维对比(根因归类)
维度:
1) 类存在性:ONLY_V1 / ONLY_V2
2) API 签名:javap -p -s 归一化后 hash
3) 方法实现:javap -c -p 归一化后 hash
说明:
- 仅比较 cn/cloudwalk/elevator/** 下 class
- 忽略常量池索引号、栈帧偏移等不稳定文本
- 行级归一见 `norm_code`,二次归一见同目录 `bytecode_norm_post.norm_code_post`
- 输出 Markdown + JSON,便于复盘与持续回归
"""
from __future__ import annotations
import argparse
import hashlib
import json
import re
import subprocess
from collections import Counter, defaultdict
from dataclasses import dataclass
from datetime import datetime, timezone
from pathlib import Path
from bytecode_norm_post import norm_code_post
REPO_ROOT = Path(__file__).resolve().parents[3]
V1_ROOT = REPO_ROOT.parent / "cw-elevator-application-V1.0.0.20211103" / "cw_lib"
PAIR = [
("cw-elevator-application-common", "cw-elevator-application-common"),
("cw-elevator-application-data", "cw-elevator-application-data"),
("cw-elevator-application-service", "cw-elevator-application-service"),
("cw-elevator-application-web", "cw-elevator-application-web"),
]
@dataclass
class ClassCompare:
module: str
class_name: str
status: str
api_equal: bool | None = None
code_equal: bool | None = None
api_hash_v1: str | None = None
api_hash_v2: str | None = None
code_hash_v1: str | None = None
code_hash_v2: str | None = None
def shasum(text: str) -> str:
return hashlib.sha256(text.encode("utf-8")).hexdigest()
def run(cmd: list[str]) -> str:
return subprocess.check_output(cmd, text=True, stderr=subprocess.DEVNULL)
def jar_classes(jar_file: Path) -> set[str]:
lines = run(["jar", "tf", str(jar_file)]).splitlines()
out: set[str] = set()
for ln in lines:
if not ln.endswith(".class"):
continue
if "$" in ln:
# 内部类单独比较噪声较大,先跳过;主类稳定后可再扩展
continue
if not ln.startswith("cn/cloudwalk/elevator/"):
continue
out.add(ln[:-6].replace("/", "."))
return out
def norm_api(text: str) -> str:
"""
取 javap -p -s 中成员声明 + descriptor,将「成员行 + 下一行 descriptor:」合并为一条后排序,
避免 Lombok/编译器仅改变类内声明顺序时误判为 API 变更。
"""
kept = []
for ln in text.splitlines():
s = ln.strip()
if not s:
continue
if s.startswith("Compiled from"):
continue
if s.startswith("Classfile "):
continue
if s.startswith("flags:"):
continue
if s.startswith("descriptor:") or s.endswith(";") or s.startswith("public ") or s.startswith("protected ") or s.startswith("private "):
kept.append(s)
merged: list[str] = []
i = 0
while i < len(kept):
if i + 1 < len(kept) and kept[i + 1].startswith("descriptor:"):
merged.append(kept[i] + "\t" + kept[i + 1])
i += 2
else:
merged.append(kept[i])
i += 1
merged.sort()
return "\n".join(merged)
def norm_code(text: str) -> str:
out = []
skip_exc = False
for ln in text.splitlines():
s = ln.rstrip()
if not s:
continue
if s.startswith("Compiled from"):
continue
if s.startswith("Classfile "):
continue
# Exception table 仅偏移不同,与语义无关;整块跳过以免误判 IMPL_DIFF
if "Exception table:" in s:
skip_exc = True
continue
if skip_exc:
if re.match(r"^\s{2}public\s+", s) or re.match(r"^\s{2}private\s+", s) or re.match(r"^\s{2}protected\s+", s):
skip_exc = False
else:
continue
# 去掉偏移量与常量池索引,保留操作码与调用目标
s = re.sub(r"^\s*\d+:\s*", "", s)
s = re.sub(r"#\d+", "#", s)
# javap 的常量池注释对齐空格数量不稳定,压缩为空格规范形态
s = re.sub(r"#\s+//", "# //", s)
# 屏蔽 invokeinterface 参数位计数噪声
s = re.sub(r",\s+\d+\s+//", " //", s)
# 跳转目标偏移对语义无影响,归一化
s = re.sub(
r"\b(if(?:eq|ne|lt|gt|le|ge|null|nonnull)|if_icmp(?:eq|ne|lt|gt|le|ge)|if_acmp(?:eq|ne)|goto|jsr)\s+\d+\b",
r"\1 @",
s,
)
# 局部变量槽位号对语义无影响(编译器可重排)
s = re.sub(
r"\b([adfil]load|[adfil]store|aload|astore|iload|istore|lload|lstore|fload|fstore|dload|dstore)\s+\d+\b",
r"\1 _",
s,
)
# 归一化单字节槽位指令(如 aload_0 / istore_3
s = re.sub(r"\b([adfil]load|[adfil]store|aload|astore|iload|istore|lload|lstore|fload|fstore|dload|dstore)_[0-3]\b", r"\1 _", s)
# javap 输出为 iinc slot,const(含逗号);旧正则漏匹配会导致槽位噪声残留
s = re.sub(r"\biinc\s+\d+\s*,\s*(-?\d+)\b", r"iinc _ \1", s)
# ArrayList 通过接口类型调用与具体类调用语义一致,归一为 List 接口描述
s = re.sub(
r"invokevirtual\s+#\s+//\s*Method java/util/ArrayList\.(add|size)\b[^\n]*",
r"invokeinterface # // InterfaceMethod java/util/List.\1:(UNKNOWN)",
s,
)
s = re.sub(
r"invokeinterface\s+#\s+//\s*InterfaceMethod java/util/List\.(add|size)\b[^\n]*",
r"invokeinterface # // InterfaceMethod java/util/List.\1:(UNKNOWN)",
s,
)
# tableswitch/lookupswitch 去掉行首偏移后,残余纯数字行与 default:<off> 仅反映布局,语义无差别
st = s.strip()
if re.fullmatch(r"\d+", st):
s = "<switch_target>"
elif re.fullmatch(r"default:\s*\d+", st):
s = "default: <switch_target>"
out.append(s.strip())
return norm_code_post("\n".join(out))
def javap_api(jar_file: Path, class_name: str) -> str:
return run(["javap", "-classpath", str(jar_file), "-p", "-s", class_name])
def javap_code(jar_file: Path, class_name: str) -> str:
return run(["javap", "-classpath", str(jar_file), "-p", "-c", class_name])
def compare_module(module: str, v1_jar: Path, v2_jar: Path) -> list[ClassCompare]:
v1_classes = jar_classes(v1_jar)
v2_classes = jar_classes(v2_jar)
records: list[ClassCompare] = []
for cls in sorted(v1_classes | v2_classes):
if cls not in v2_classes:
records.append(ClassCompare(module=module, class_name=cls, status="ONLY_V1"))
continue
if cls not in v1_classes:
records.append(ClassCompare(module=module, class_name=cls, status="ONLY_V2"))
continue
api1 = norm_api(javap_api(v1_jar, cls))
api2 = norm_api(javap_api(v2_jar, cls))
code1 = norm_code(javap_code(v1_jar, cls))
code2 = norm_code(javap_code(v2_jar, cls))
api_h1, api_h2 = shasum(api1), shasum(api2)
code_h1, code_h2 = shasum(code1), shasum(code2)
api_eq = api_h1 == api_h2
code_eq = code_h1 == code_h2
if api_eq and code_eq:
st = "MATCH"
elif api_eq and not code_eq:
st = "IMPL_DIFF"
else:
st = "API_DIFF"
records.append(
ClassCompare(
module=module,
class_name=cls,
status=st,
api_equal=api_eq,
code_equal=code_eq,
api_hash_v1=api_h1,
api_hash_v2=api_h2,
code_hash_v1=code_h1,
code_hash_v2=code_h2,
)
)
return records
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument(
"--out-md",
default=str(REPO_ROOT / "tools/elevator_api_parity/report/V1-V2-BYTECODE-ROOTCAUSE.md"),
)
ap.add_argument(
"--out-json",
default=str(REPO_ROOT / "tools/elevator_api_parity/report/V1-V2-BYTECODE-ROOTCAUSE.json"),
)
args = ap.parse_args()
all_records: list[ClassCompare] = []
for mod_short, mod_art in PAIR:
v1_jar = V1_ROOT / f"{mod_art}-1.0-SNAPSHOT.jar"
v2_jar = REPO_ROOT / mod_short / "target" / f"{mod_art}-2.0-SNAPSHOT.jar"
if not v1_jar.is_file() or not v2_jar.is_file():
raise SystemExit(f"missing jar for module {mod_short}: v1={v1_jar} v2={v2_jar}")
all_records.extend(compare_module(mod_short, v1_jar=v1_jar, v2_jar=v2_jar))
counter = Counter(r.status for r in all_records)
mod_counter: dict[str, Counter] = defaultdict(Counter)
for r in all_records:
mod_counter[r.module][r.status] += 1
payload = {
"generated_at_utc": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
"summary": dict(counter),
"module_summary": {k: dict(v) for k, v in mod_counter.items()},
"records": [r.__dict__ for r in all_records],
}
out_json = Path(args.out_json)
out_json.parent.mkdir(parents=True, exist_ok=True)
out_json.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
md = []
md.append("# V1 vs V2 字节码根因分析")
md.append("")
md.append(f"- 生成时间(UTC):`{payload['generated_at_utc']}`")
md.append("- 对比范围:四模块 `cn/cloudwalk/elevator/**` 主类(不含 `$` 内部类)")
md.append("- 维度:类存在性 / API签名 / 方法实现")
md.append("")
md.append("## 1. 总览")
md.append("")
md.append("| 维度 | 数量 |")
md.append("|---|---:|")
for k in ["MATCH", "IMPL_DIFF", "API_DIFF", "ONLY_V1", "ONLY_V2"]:
md.append(f"| {k} | {counter.get(k, 0)} |")
md.append("")
md.append("## 2. 各模块分布")
md.append("")
md.append("| 模块 | MATCH | IMPL_DIFF | API_DIFF | ONLY_V1 | ONLY_V2 |")
md.append("|---|---:|---:|---:|---:|---:|")
for m in [p[0] for p in PAIR]:
c = mod_counter[m]
md.append(
f"| {m} | {c.get('MATCH',0)} | {c.get('IMPL_DIFF',0)} | {c.get('API_DIFF',0)} | {c.get('ONLY_V1',0)} | {c.get('ONLY_V2',0)} |"
)
md.append("")
def section(title: str, status: str, limit: int = 120) -> None:
md.append(f"## {title}")
md.append("")
rs = [r for r in all_records if r.status == status]
if not rs:
md.append("- 无")
md.append("")
return
md.append("| 模块 | 类 |")
md.append("|---|---|")
for r in rs[:limit]:
md.append(f"| {r.module} | `{r.class_name}` |")
if len(rs) > limit:
md.append(f"| ... | 其余 {len(rs)-limit} 个见 JSON |")
md.append("")
section("3. API 相同但实现不同(优先查 JD-GUI 还原误差/人工改写)", "IMPL_DIFF")
section("4. API 不同(优先查源码结构漂移)", "API_DIFF")
section("5. 仅 V2 存在(新增类)", "ONLY_V2")
section("6. 仅 V1 存在(缺失类)", "ONLY_V1")
md.append("## 7. 根因判读指引")
md.append("")
md.append("- `IMPL_DIFF`:若对应源码与 CFR 文本高度相似但字节码仍不同,多为 JD-GUI 语句重排/条件翻译偏差或后续手工改写。")
md.append("- `API_DIFF`:优先判定为“源码结构变化”,例如方法签名、字段类型、泛型边界变化。")
md.append("- `ONLY_V2/ONLY_V1`:属于文件集合漂移(新增/漏还原/清理)。")
md.append("")
md.append("## 8. API_DIFF 判读")
md.append("")
md.append("- **成员顺序**:同签名不同顺序(常见于 Lombok getter/setter 顺序)已由 `norm_api` 合并 descriptor 后排序消除伪差异。")
md.append("- **默认可视构造**:仅含 static 的类若未写显式私有空参构造,javac 可能生成 **public** 默认构造,与旧 JAR 中 **private** 不同;可在源码中补充与 V1 一致。")
md.append("- **真实契约差异**:仍报 API_DIFF 时多为 V2 **新增/改签名** 的方法或字段,需对照业务是否保留(并非脚本噪声)。")
md.append("")
md.append("## 9. 实现归一化(摘要)")
md.append("")
md.append("- **行级**:指令偏移、`#` 常量池下标、`if_icmp*`/`goto` 目标、`xload`/`xstore` 槽位、`iinc`、"
"`ArrayList`→`List` 的 add/size、`tableswitch` 纯数字行等。")
md.append("- **二次(`bytecode_norm_post`**`ifxx`+`goto` 蹦床→反条件单条;连续 `goto @` 折叠;"
"连续重复 `checkcast` 去重;`String.join` 前冗余 `checkcast java/lang/String`"
"`iconst_0`+dup 与 istore/iload 轮换初始化局部;Apache POI `setCellType`/`setBold`/`setColor` 新旧 API 占位符。")
md.append("")
Path(args.out_md).write_text("\n".join(md), encoding="utf-8")
print(f"WROTE: {args.out_md}")
print(f"WROTE: {args.out_json}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -0,0 +1,83 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import annotations
import difflib
import json
import subprocess
from datetime import datetime
from pathlib import Path
from bytecode_parity_rootcause import norm_code
ROOT = Path(__file__).resolve().parents[3]
REPORT = ROOT / "tools/elevator_api_parity/report/V1-V2-BYTECODE-ROOTCAUSE.json"
OUT = ROOT / "tools/elevator_api_parity/report/impl-diff-evidence-20260428"
V1 = ROOT.parent / "cw-elevator-application-V1.0.0.20211103/cw_lib"
PAIR = {
"cw-elevator-application-common": "cw-elevator-application-common",
"cw-elevator-application-data": "cw-elevator-application-data",
"cw-elevator-application-service": "cw-elevator-application-service",
"cw-elevator-application-web": "cw-elevator-application-web",
}
def run(cmd: list[str]) -> str:
return subprocess.check_output(cmd, text=True, stderr=subprocess.DEVNULL)
def main() -> int:
OUT.mkdir(parents=True, exist_ok=True)
data = json.loads(REPORT.read_text(encoding="utf-8"))
records = [r for r in data["records"] if r["status"] == "IMPL_DIFF"]
index = []
for r in records:
module = r["module"]
art = PAIR[module]
cls = r["class_name"]
v1_jar = V1 / f"{art}-1.0-SNAPSHOT.jar"
v2_jar = ROOT / module / "target" / f"{art}-2.0-SNAPSHOT.jar"
raw1 = run(["javap", "-classpath", str(v1_jar), "-p", "-c", cls])
raw2 = run(["javap", "-classpath", str(v2_jar), "-p", "-c", cls])
n1 = norm_code(raw1)
n2 = norm_code(raw2)
cls_file = cls.replace(".", "_")
p1 = OUT / f"{cls_file}.v1.javap.txt"
p2 = OUT / f"{cls_file}.v2.javap.txt"
pd = OUT / f"{cls_file}.diff.txt"
p1.write_text(n1, encoding="utf-8")
p2.write_text(n2, encoding="utf-8")
diff = "".join(
difflib.unified_diff(
n1.splitlines(keepends=True),
n2.splitlines(keepends=True),
fromfile=f"{cls}.v1",
tofile=f"{cls}.v2",
n=3,
)
)
pd.write_text(diff, encoding="utf-8")
index.append(
{
"module": module,
"class_name": cls,
"v1_file": str(p1),
"v2_file": str(p2),
"diff_file": str(pd),
"diff_lines": len(diff.splitlines()),
}
)
idx = {
"generated_at": datetime.utcnow().isoformat() + "Z",
"count": len(index),
"items": index,
}
(OUT / "INDEX.json").write_text(json.dumps(idx, ensure_ascii=False, indent=2), encoding="utf-8")
print(str(OUT))
print(f"IMPL_DIFF files: {len(index)}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -0,0 +1,187 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
将 Maven 模块 `src/main/java/cn/cloudwalk/elevator` 与 V1 CFR 反编译树(decompile_v1_elevator_jars.sh 输出)按类文件路径配对,写相似度报告。
环境变量:
V1_DECOMP_ROOT 默认: <maven根>/tools/v1-decompiled/cfr-from-cw-lib-current
MV_ROOT 默认: 本脚本上溯 3 级到 maven-cw-elevator-application
OUT_MD 默认: tools/elevator_api_parity/report/SOURCE-PARITY-BY-CLASS-decomp.md
"""
from __future__ import annotations
import difflib
import os
import re
import sys
from pathlib import Path
SCR = Path(__file__).resolve()
# scripts -> elevator_api_parity -> tools -> maven-cw-elevator-application
MV_ROOT = Path(os.environ.get("MV_ROOT", SCR.parents[3]))
_DEFAULT_V1 = MV_ROOT / "tools" / "v1-decompiled" / "cfr-from-cw-lib-current"
# Maven 模块名 -> V1 反编译目录名(脚本输出的子目录前缀)
_PAIR = [
("cw-elevator-application-common", "cw-elevator-application-common-1.0-SNAPSHOT"),
("cw-elevator-application-data", "cw-elevator-application-data-1.0-SNAPSHOT"),
("cw-elevator-application-service", "cw-elevator-application-service-1.0-SNAPSHOT"),
("cw-elevator-application-web", "cw-elevator-application-web-1.0-SNAPSHOT"),
]
def strip_java_comments(text: str) -> str:
text = re.sub(r"/\*.*?\*/", "", text, flags=re.DOTALL)
text = re.sub(r"//[^\n]*", "", text)
lines = [ln.strip() for ln in text.splitlines() if ln.strip()]
return "\n".join(lines)
def similarity(a: str, b: str) -> float:
ca, cb = strip_java_comments(a), strip_java_comments(b)
return difflib.SequenceMatcher(a=ca, b=cb).ratio()
def tag_only_mv(rel: str) -> str:
if "TenantVisitorFloor" in rel:
return "租户访客楼层策略(V2)"
if rel.endswith("package-info.java"):
return "package-info"
if "CloudwalkSessionHolderConfiguration" in rel:
return "Session 扩展"
if "ElevatorRemoteIo" in rel:
return "远程 IO 池"
if "DavinciStorageBeansConfiguration" in rel or "OpenFeignFileStorageManager" in rel:
return "Davinci 存储"
if "ZoneTreeCollectors" in rel:
return "工具类"
return ""
def main() -> int:
v1_root_parent = Path(os.environ.get("V1_DECOMP_ROOT", _DEFAULT_V1)).resolve()
if not v1_root_parent.is_dir():
print(f"ERROR: V1 decompile dir missing: {v1_root_parent}", file=sys.stderr)
print("Run: maven-cw-elevator-application/scripts/decompile_v1_elevator_jars.sh", file=sys.stderr)
return 1
out_md = Path(
os.environ.get(
"OUT_MD",
MV_ROOT / "tools/elevator_api_parity/report/SOURCE-PARITY-BY-CLASS-decomp.md",
)
)
lines: list[str] = []
lines.append("# Maven 源码 vs V1 自动反编译(cw_lib jar / CFR)逐类比对")
lines.append("")
lines.append(f"- **V1 根**: `{v1_root_parent}``decompile_v1_elevator_jars.sh` 生成)")
lines.append(f"- **V2 根**: `{MV_ROOT}/{{module}}/src/main/java/cn/cloudwalk/elevator`")
lines.append("- **相似度**: 去注释后 `SequenceMatcher.ratio`CFR 噪声会导致分数偏低)")
lines.append("")
all_rows: list[tuple[str, str, float]] = []
tot = {"paired": 0, "ge98": 0, "85": 0, "lt": 0, "o1": 0, "o2": 0}
summary_rows: list[str] = []
for mod_mvn, mod_v1dir in _PAIR:
v1_elev = v1_root_parent / mod_v1dir / "cn/cloudwalk/elevator"
mv_elev = MV_ROOT / mod_mvn / "src/main/java/cn/cloudwalk/elevator"
if not v1_elev.is_dir():
summary_rows.append(f"| {mod_mvn} | — | — | **V1 侧目录不存在**: `{v1_elev}` |")
continue
if not mv_elev.is_dir():
summary_rows.append(f"| {mod_mvn} | — | — | **Maven 侧目录不存在** |")
continue
v1_files = {str(p.relative_to(v1_elev)).replace("\\", "/"): p for p in v1_elev.rglob("*.java")}
mv_files = {str(p.relative_to(mv_elev)).replace("\\", "/"): p for p in mv_elev.rglob("*.java")}
cnt = {"paired": 0, "ge98": 0, "85_98": 0, "lt85": 0, "only_v1": 0, "only_mv": 0}
for rel in sorted(set(v1_files) | set(mv_files)):
p1, pm = v1_files.get(rel), mv_files.get(rel)
if p1 and pm:
cnt["paired"] += 1
try:
s = similarity(
p1.read_text(encoding="utf-8", errors="replace"),
pm.read_text(encoding="utf-8", errors="replace"),
)
except OSError:
s = 0.0
if s >= 0.98:
cnt["ge98"] += 1
elif s >= 0.85:
cnt["85_98"] += 1
else:
cnt["lt85"] += 1
all_rows.append((f"{mod_mvn}/{rel}", s))
elif p1:
cnt["only_v1"] += 1
else:
cnt["only_mv"] += 1
tot["paired"] += cnt["paired"]
tot["ge98"] += cnt["ge98"]
tot["85"] += cnt["85_98"]
tot["lt"] += cnt["lt85"]
tot["o1"] += cnt["only_v1"]
tot["o2"] += cnt["only_mv"]
summary_rows.append(
f"| {mod_mvn} | {cnt['paired']} | {cnt['ge98']} | {cnt['85_98']} | {cnt['lt85']} | "
f"{cnt['only_v1']} | {cnt['only_mv']} |"
)
lines.append("## 1. 汇总(四模块来自 cw_lib jar 反编译)")
lines.append("")
lines.append(
"| 模块 | 配对 | ≥0.98 | 0.850.98 | <0.85 | 仅 V1 | 仅 Maven |"
)
lines.append("|------|------|-------|-----------|-------|-------|------------|")
lines.extend(summary_rows)
lines.append(
f"| **合计** | **{tot['paired']}** | **{tot['ge98']}** | **{tot['85']}** | **{tot['lt']}** | **{tot['o1']}** | **{tot['o2']}** |"
)
lines.append("")
# 仅 Maven
lines.append("## 2. 仅 Maven(相对 `cn/cloudwalk/elevator`")
lines.append("")
for mod_mvn, mod_v1dir in _PAIR:
v1_elev = v1_root_parent / mod_v1dir / "cn/cloudwalk/elevator"
mv_elev = MV_ROOT / mod_mvn / "src/main/java/cn/cloudwalk/elevator"
if not mv_elev.is_dir() or not v1_elev.is_dir():
continue
v1_set = {str(p.relative_to(v1_elev)).replace("\\", "/") for p in v1_elev.rglob("*.java")}
extras = []
for p in sorted(mv_elev.rglob("*.java")):
rel = str(p.relative_to(mv_elev)).replace("\\", "/")
if rel not in v1_set:
tg = tag_only_mv(rel)
extras.append(f"- `{rel}`" + (f" — *{tg}*" if tg else ""))
if extras:
lines.append(f"### {mod_mvn}")
lines.extend(extras)
lines.append("")
worst = sorted(all_rows, key=lambda x: x[1])[:35]
best = sorted(all_rows, key=lambda x: -x[1])[:15]
lines.append("## 3. 样本:最高 / 最低相似度路径")
lines.append("")
lines.append("### 最高")
for path, s in best:
lines.append(f"- `{path}` **{s:.4f}**")
lines.append("")
lines.append("### 最低(优先 IDE diff")
for path, s in worst:
lines.append(f"- `{path}` **{s:.4f}**")
out_md.parent.mkdir(parents=True, exist_ok=True)
out_md.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(out_md)
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -0,0 +1,266 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
V1CFR 反编译 cw_lib vs V2(Maven 源码)全量类级比对,输出:
- Markdown 报告(汇总 + 分桶完整清单 + 问题梳理)
- 可选 JSON--json
环境变量同 source_parity_scan.pyV1_DECOMP_ROOT、MV_ROOT
"""
from __future__ import annotations
import argparse
import difflib
import json
import os
import re
import sys
from datetime import datetime, timezone
from pathlib import Path
SCR = Path(__file__).resolve()
MV_ROOT = Path(os.environ.get("MV_ROOT", SCR.parents[3]))
_DEFAULT_V1 = MV_ROOT / "tools" / "v1-decompiled" / "cfr-from-cw-lib-current"
_PAIR = [
("cw-elevator-application-common", "cw-elevator-application-common-1.0-SNAPSHOT"),
("cw-elevator-application-data", "cw-elevator-application-data-1.0-SNAPSHOT"),
("cw-elevator-application-service", "cw-elevator-application-service-1.0-SNAPSHOT"),
("cw-elevator-application-web", "cw-elevator-application-web-1.0-SNAPSHOT"),
]
def strip_java_comments(text: str) -> str:
text = re.sub(r"/\*.*?\*/", "", text, flags=re.DOTALL)
text = re.sub(r"//[^\n]*", "", text)
lines = [ln.strip() for ln in text.splitlines() if ln.strip()]
return "\n".join(lines)
def similarity(a: str, b: str) -> float:
ca, cb = strip_java_comments(a), strip_java_comments(b)
return difflib.SequenceMatcher(a=ca, b=cb).ratio()
def tag_only_mv(rel: str) -> str:
if "TenantVisitorFloor" in rel:
return "V2扩展-租户访客楼层"
if rel.endswith("package-info.java"):
return "工程化-package-info"
if "CloudwalkSessionHolderConfiguration" in rel:
return "V2扩展-Session"
if "ElevatorRemoteIo" in rel:
return "V2扩展-远程IO线程池"
if "DavinciStorageBeansConfiguration" in rel or "OpenFeignFileStorageManager" in rel:
return "V2扩展-Davinci存储"
if "ZoneTreeCollectors" in rel:
return "V2独有-工具类"
return "V2独有-待分类"
def review_priority(rel: str) -> str:
r = rel.replace("\\", "/")
if "/controller/" in r or r.endswith("Controller.java"):
return "高-Controller"
if "FeignClient" in r or "/client/" in r:
return "高-Feign/Client"
if "ServiceImpl" in r or "/impl/" in r:
return "高-Service/DaoImpl"
if "/mapper/" in r or "Mapper.java" in r:
return "中-Mapper接口"
if "/dto/" in r or "/param/" in r or "/form/" in r or "/result/" in r:
return "中-DTO表单"
if "/em/" in r or "Enum.java" in r:
return "低-枚举(CFR噪声常见)"
if "/util/" in r:
return "低-工具类"
return "中-其他"
def bucket(score: float) -> str:
if score >= 0.98:
return "A-高度一致"
if score >= 0.85:
return "B-轻度差异"
return "C-显著差异"
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--json", action="store_true", help="额外写出 JSON")
ap.add_argument(
"--out",
default=str(MV_ROOT / "tools/elevator_api_parity/report/V1-V2-DIFF-ISSUES.md"),
help="Markdown 输出路径",
)
args = ap.parse_args()
v1_root_parent = Path(os.environ.get("V1_DECOMP_ROOT", _DEFAULT_V1)).resolve()
if not v1_root_parent.is_dir():
print(f"ERROR: V1 decompile dir missing: {v1_root_parent}", file=sys.stderr)
return 1
records: list[dict] = []
only_mv: list[tuple[str, str, str]] = []
totals = {"paired": 0, "A": 0, "B": 0, "C": 0, "only_v1": 0, "only_mv": 0}
for mod_mvn, mod_v1dir in _PAIR:
v1_elev = v1_root_parent / mod_v1dir / "cn/cloudwalk/elevator"
mv_elev = MV_ROOT / mod_mvn / "src/main/java/cn/cloudwalk/elevator"
if not v1_elev.is_dir() or not mv_elev.is_dir():
continue
v1_files = {str(p.relative_to(v1_elev)).replace("\\", "/"): p for p in v1_elev.rglob("*.java")}
mv_files = {str(p.relative_to(mv_elev)).replace("\\", "/"): p for p in mv_elev.rglob("*.java")}
for rel in sorted(set(v1_files) | set(mv_files)):
p1, pm = v1_files.get(rel), mv_files.get(rel)
if p1 and pm:
totals["paired"] += 1
try:
t1 = p1.read_text(encoding="utf-8", errors="replace")
t2 = pm.read_text(encoding="utf-8", errors="replace")
s = similarity(t1, t2)
except OSError:
s = 0.0
t1 = t2 = ""
bk = bucket(s)
if bk.startswith("A"):
totals["A"] += 1
elif bk.startswith("B"):
totals["B"] += 1
else:
totals["C"] += 1
pri = review_priority(rel)
records.append(
{
"module": mod_mvn,
"relative_path": rel,
"similarity": round(s, 6),
"bucket": bk,
"review_priority": pri,
"v1_file": str(p1),
"v2_file": str(pm),
}
)
elif p1:
totals["only_v1"] += 1
records.append(
{
"module": mod_mvn,
"relative_path": rel,
"similarity": None,
"bucket": "ONLY_V1",
"review_priority": review_priority(rel),
"v1_file": str(p1),
"v2_file": None,
}
)
else:
totals["only_mv"] += 1
tg = tag_only_mv(rel)
only_mv.append((mod_mvn, rel, tg))
records.append(
{
"module": mod_mvn,
"relative_path": rel,
"similarity": None,
"bucket": "ONLY_MAVEN",
"review_priority": tg,
"v1_file": None,
"v2_file": str(pm),
}
)
out_md = Path(args.out)
out_md.parent.mkdir(parents=True, exist_ok=True)
ts = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
md: list[str] = []
md.append("# V1 vs V2 源码差异与问题梳理(全自动比对)")
md.append("")
md.append(f"- **生成时间(UTC**: {ts}")
md.append(f"- **V1**: `{v1_root_parent}`cw_lib jar → CFR")
md.append(f"- **V2**: `{MV_ROOT}/{{module}}/src/main/java/cn/cloudwalk/elevator`")
md.append("- **相似度**: 去注释后全文 `SequenceMatcher.ratio`**低分≠业务错误**(CFR 变量名/枚举顺序等)。")
md.append("")
md.append("## 1. 结论摘要")
md.append("")
md.append("| 维度 | 数量 | 说明 |")
md.append("|------|------|------|")
md.append(f"| 配对类 | {totals['paired']} | 同名路径 `.java` |")
md.append(f"| A 桶 ≥0.98 | {totals['A']} | 文本高度接近 |")
md.append(f"| B 桶 0.850.98 | {totals['B']} | 多为格式/注释/轻微差异,建议抽检 |")
md.append(f"| C 桶 <0.85 | {totals['C']} | **优先 IDE diff**;枚举/DTO 常为 CFR 噪声 |")
md.append(f"| 仅 V1 | {totals['only_v1']} | 当前四模块应为 0 |")
md.append(f"| 仅 Maven | {totals['only_mv']} | V2 新增;访客楼层策略等为**已知扩展** |")
md.append("")
md.append("### 1.1 建议处置")
md.append("")
md.append("1. **仅 Maven**`TenantVisitorFloor*` — 与 V1 对齐无关(产品已排除);`package-info` — 忽略。")
md.append("2. **C 桶 + 高优先级**Controller / ServiceImpl / Feign):优先人工对照业务分支与远程调用。")
md.append("3. **C 桶 + 枚举/DTO**:优先视为 CFR 噪声,除非接口契约变更。")
md.append("")
md.append("## 2. 仅 Maven 文件(问题/范围标注)")
md.append("")
for mod, rel, tg in sorted(only_mv, key=lambda x: (x[0], x[1])):
md.append(f"- `{mod}/{rel}` — **{tg}**")
md.append("")
md.append("## 3. C 桶(<0.85)按复核优先级分组")
md.append("")
c_records = [r for r in records if r.get("similarity") is not None and r["similarity"] < 0.85]
by_pri: dict[str, list[dict]] = {}
for r in c_records:
by_pri.setdefault(r["review_priority"], []).append(r)
for pri in sorted(by_pri.keys()):
md.append(f"### {pri}")
md.append("")
md.append("| 路径 | 相似度 |")
md.append("|------|--------|")
for r in sorted(by_pri[pri], key=lambda x: -x["similarity"]):
md.append(f"| `{r['module']}/{r['relative_path']}` | {r['similarity']:.4f} |")
md.append("")
md.append("## 4. 完整配对表(全部类)")
md.append("")
md.append("| 模块 | 相对路径 | 相似度 | 分桶 | 复核优先级 |")
md.append("|------|----------|--------|------|------------|")
for r in sorted(
[x for x in records if x.get("similarity") is not None],
key=lambda x: (x["module"], x["relative_path"]),
):
md.append(
f"| {r['module']} | `{r['relative_path']}` | {r['similarity']:.4f} | {r['bucket']} | {r['review_priority']} |"
)
md.append("")
md.append("### 仅 V1 / 仅 Maven 行")
md.append("")
for r in records:
if r["bucket"] in ("ONLY_V1", "ONLY_MAVEN"):
md.append(f"- `{r['module']}/{r['relative_path']}` — **{r['bucket']}** — {r['review_priority']}")
md.append("")
md.append("## 5. 生成命令")
md.append("")
md.append("```bash")
md.append("cd maven-cw-elevator-application")
md.append("./scripts/decompile_v1_elevator_jars.sh # 若尚未反编译 V1 jar")
md.append("python3 tools/elevator_api_parity/scripts/v1_v2_diff_issues_report.py")
md.append("```")
md.append("")
out_md.write_text("\n".join(md) + "\n", encoding="utf-8")
print(out_md)
if args.json:
out_json = out_md.with_suffix(".json")
out_json.write_text(json.dumps({"generated": ts, "totals": totals, "records": records}, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
print(out_json)
return 0
if __name__ == "__main__":
raise SystemExit(main())
@@ -1,7 +1,7 @@
from __future__ import annotations
import pytest
from parity.catalog_loader import endpoint_body as cb_body
from parity.body_variants import iter_parity_request_cases
from parity.catalog_loader import include_in_parity as cb_parity
from parity.catalog_loader import load as load_catalog
from parity.client import call_both
@@ -15,37 +15,44 @@ def test_parity_from_catalog(
base_new,
session_http,
):
"""按 api_catalog 双端对拍(仅 ``include_in_parity`` 为 true 的条目)。compare_mode: deep | code_only | status_only"""
"""按 api_catalog 双端对拍(仅 ``include_in_parity`` 为 true 的条目)。
基线体 + 可选 ``boundary_patches``(需 ``ELEVATOR_PARITY_BOUNDARY=1``)对入参做边界/范围扩展。
compare_mode: deep | code_only | status_only
"""
cat = load_catalog()["endpoints"] # type: ignore[operator]
for ep in cat:
if not cb_parity(ep):
continue
name = ep["id"]
body = cb_body(ep)
pr = call_both(
name=ep.get("name", name),
method=ep.get("method", "POST"),
path=ep["path"],
body=body,
base_old=base_old,
base_new=base_new,
session=session_http,
compare_mode=ep.get("compare_mode", "code_only"),
)
row = {
"id": name,
"name": ep.get("name", name),
"method": pr.method,
"path": pr.path,
"old_status": pr.old_status,
"new_status": pr.new_status,
"match": pr.match,
"message": pr.message,
}
request.config._parity_rows.append(row) # type: ignore
# 在 code_only 下通常允许两边同一业务 code;若都非 200 也记录
assert pr.match, (
f"{name} mismatch: {pr.message}\n"
f"old_http={pr.old_status} new_http={pr.new_status}\n"
f"old_head={pr.old_text[:500]!r}\nnew_head={pr.new_text[:500]!r}"
)
display = ep.get("name", name)
for case_id, body in iter_parity_request_cases(ep):
case_label = f"{name}:{case_id}" if case_id != "default" else name
call_name = f"{display} [{case_id}]" if case_id != "default" else display
pr = call_both(
name=call_name,
method=ep.get("method", "POST"),
path=ep["path"],
body=body,
base_old=base_old,
base_new=base_new,
session=session_http,
compare_mode=ep.get("compare_mode", "code_only"),
)
row = {
"id": case_label,
"name": call_name,
"case_id": case_id,
"method": pr.method,
"path": pr.path,
"old_status": pr.old_status,
"new_status": pr.new_status,
"match": pr.match,
"message": pr.message,
}
request.config._parity_rows.append(row) # type: ignore
assert pr.match, (
f"{case_label} mismatch: {pr.message}\n"
f"old_http={pr.old_status} new_http={pr.new_status}\n"
f"old_head={pr.old_text[:500]!r}\nnew_head={pr.new_text[:500]!r}"
)
@@ -0,0 +1,58 @@
from __future__ import annotations
"""全 catalog 双端对拍(仅 include_in_parity=true 的条目,与 test_parity_from_catalog 范围一致,但每接口独立用例)。"""
import pytest
from parity.catalog_loader import endpoint_body as cb_body
from parity.catalog_loader import include_in_parity as cb_parity
from parity.catalog_loader import load as load_catalog
from parity.client import call_both
def pytest_generate_tests(metafunc):
if "catalog_ep" not in metafunc.fixturenames:
return
cat_all = list((load_catalog() or {}).get("endpoints") or [])
# 与 test_parity_from_catalog 对齐:全 catalog 用例同样尊重 include_in_parity
cat = [ep for ep in cat_all if cb_parity(ep)]
ids = [str(ep.get("id", i)) for i, ep in enumerate(cat)]
metafunc.parametrize("catalog_ep", cat, ids=ids)
@pytest.mark.usefixtures("two_instances_ready")
@pytest.mark.live
def test_parity_single_endpoint(
request,
base_old,
base_new,
session_http,
catalog_ep: dict,
):
name = catalog_ep["id"]
body = cb_body(catalog_ep)
pr = call_both(
name=catalog_ep.get("name", name),
method=catalog_ep.get("method", "POST"),
path=catalog_ep["path"],
body=body,
base_old=base_old,
base_new=base_new,
session=session_http,
compare_mode=catalog_ep.get("compare_mode", "code_only"),
)
row = {
"id": name,
"name": catalog_ep.get("name", name),
"method": pr.method,
"path": pr.path,
"old_status": pr.old_status,
"new_status": pr.new_status,
"match": pr.match,
"message": pr.message,
}
request.config._parity_full_rows.append(row) # type: ignore
assert pr.match, (
f"{name} mismatch: {pr.message}\n"
f"old_http={pr.old_status} new_http={pr.new_status}\n"
f"old_head={pr.old_text[:500]!r}\nnew_head={pr.new_text[:500]!r}"
)
@@ -3,6 +3,7 @@
from __future__ import annotations
from parity import compare as C
from parity import body_variants as BV
def test_normalize_equal():
@@ -15,3 +16,26 @@ def test_business_code_from_cloudwalk_result():
j = '{"code":"0","data":{}}'
p = C.parse_json_loose(j)
assert C.business_code(p) == "0"
def test_deep_merge_nested():
base = {"a": 1, "nested": {"x": 1, "y": 2}}
patch = {"nested": {"y": 99}, "b": 2}
m = BV.deep_merge(base, patch)
assert m == {"a": 1, "b": 2, "nested": {"x": 1, "y": 99}}
def test_iter_parity_request_cases_respects_env(monkeypatch):
monkeypatch.delenv("ELEVATOR_PARITY_BOUNDARY", raising=False)
ep = {
"id": "x",
"body": {"p": 1},
"boundary_patches": [{"id": "zero", "patch": {"p": 0}}],
}
cases = list(BV.iter_parity_request_cases(ep))
assert cases == [("default", {"p": 1})]
monkeypatch.setenv("ELEVATOR_PARITY_BOUNDARY", "1")
cases2 = list(BV.iter_parity_request_cases(ep))
assert cases2[0] == ("default", {"p": 1})
assert cases2[1] == ("zero", {"p": 0})
@@ -0,0 +1,3 @@
# CFR 输出体积大,默认不纳入 Git;本地生成后通过 cfr-from-cw-lib-current 使用
cfr-from-cw-lib-*/
!README.md
@@ -0,0 +1,58 @@
# V1 电梯模块反编译输出(CFR)
本目录由脚本生成,**勿手改**;重新生成会带时间戳子目录并更新 `cfr-from-cw-lib-current` 符号链接。
## 生成命令
```bash
cd maven-cw-elevator-application
./scripts/decompile_v1_elevator_jars.sh
```
前提:
- 仓库根存在 `cw-elevator-application-V1.0.0.20211103/cw_lib/cw-elevator-application-{common,data,service,web}-1.0-SNAPSHOT.jar`
- 仓库根存在 `artifacts/decompiled/v1-cfr-compare-20211103/cfr-0.152.jar`(或设置环境变量 `CFR_JAR`
可选环境变量:
| 变量 | 含义 |
|------|------|
| `V1_RUN_DIR` | V1 解压目录绝对路径(默认:仓库根下 `cw-elevator-application-V1.0.0.20211103` |
| `CFR_JAR` | CFR jar 路径 |
| `V1_DECOMP_OUT` | 输出根路径前缀(默认:`tools/v1-decompiled/cfr-from-cw-lib`,实际会追加 `-时间戳` |
| `DECOMPILE_V1_FAT_JAR=1` | 额外反编译 fat jar(耗时长、体积大) |
## 目录结构
```
cfr-from-cw-lib-<timestamp>/
MANIFEST.txt
cw-elevator-application-common-1.0-SNAPSHOT/
cn/cloudwalk/elevator/...
cw-elevator-application-data-1.0-SNAPSHOT/
cn/...
...
```
`cfr-from-cw-lib-current` → 最近一次生成目录。
## 与 V2 源码比对
**简要相似度报告**
```bash
python3 tools/elevator_api_parity/scripts/source_parity_scan.py
```
`tools/elevator_api_parity/report/SOURCE-PARITY-BY-CLASS-decomp.md`
**全量差异梳理(推荐)**:按优先级分组 + 完整配对表 + JSON
```bash
python3 tools/elevator_api_parity/scripts/v1_v2_diff_issues_report.py --json
```
`report/V1-V2-DIFF-ISSUES.md`、同基名 `.json`
环境变量:`V1_DECOMP_ROOT``MV_ROOT`(默认为本 Maven 工程根)。
@@ -0,0 +1 @@
/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/v1-decompiled/cfr-from-cw-lib-20260428-125802
@@ -0,0 +1,28 @@
# Source-Aligned Decompiled Build Report
- UTC: `2026-04-28T14:27:59Z`
- V1 base: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/tools/v1-decompiled/cfr-from-cw-lib-20260428-125802`
- Maven root: `/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application`
## Summary
| metric | count |
|---|---:|
| v2_replaced | 305 |
| v1_only_kept | 0 |
| v2_only_added | 25 |
| total_output_java | 330 |
## Module stats
| module | v2_replaced | v1_only_kept | v2_only_added | output_java |
|---|---:|---:|---:|---:|
| cw-elevator-application-common | 32 | 0 | 1 | 33 |
| cw-elevator-application-data | 79 | 0 | 5 | 84 |
| cw-elevator-application-service | 150 | 0 | 16 | 166 |
| cw-elevator-application-web | 44 | 0 | 3 | 47 |
## Notes
- 该目录可视作“源码优先的反编译校正版”:同路径优先采用 Maven 源码。
- 若你要严格保留历史 jar 语义,请结合 `details` 过滤 `V2_REPLACED`/`V2_ONLY_ADDED`
@@ -0,0 +1,15 @@
package cn.cloudwalk.elevator.annontation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 标记字段与达芬奇(Davinci)图片存储或展示相关的元信息。
* <p>
* 所在包名 {@code annontation} 为历史拼写,与既有引用保持一致,请勿单独重命名包路径。
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DavinciPic {}
@@ -0,0 +1,49 @@
package cn.cloudwalk.elevator.cache;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class CacheOverrideConfig {
public static final String CACHE_NAME_APPLICATIONIDS = "ACS_Applicationids";
public static final String CACHE_NAME_ACS_DEVICE_TYPES = "ACS_DeviceTypesCache";
public static final String CACHE_NAME_ACS_DEVICE_TYPE_FEATURES = "ACS_DeviceTypeFeaturesCache";
public static final String CACHE_NAME_ACS_DEVICE_ATTRS = "ACS_DeviceAttrsCache";
public static final String CACHE_NAME_ACS_RECORD_STATISTICS = "ACS_RecordStatisticsCache";
public static final String CACHE_NAME_ACS_DEVICE_TREE = "ACS_DeviceTreeCache";
public static final String CACHE_NAME_ACS_AREA_TREE = "ACS_AreaTreeCache";
public static final String CACHE_KEY_APPLICATION_IDS_PREFIX = "acs_applicationIds:";
public static final String CACHE_KEY_ACS_DEVICE_TYPES_PREFIX = "acs_deviceTypes:";
public static final String CACHE_KEY_ACS_DEVICE_TYPE_FEATURES_PREFIX = "acs_deviceTypeFeatures:";
public static final String CACHE_KEY_ACS_EXPORT_PREFIX = "acs_export_prefix:";
public static final String CACHE_KEY_ACS_DEVICE_ATTRS_PREFIX = "acs_deviceAttrs:";
public static final String CACHE_KEY_ACS_RECORD_STATISTICS_PREFIX = "acs_recordStatistics:";
public static final String CACHE_KEY_ACS_DEVICE_TREE_PREFIX = "acs_deviceTreeCache";
public static final String CACHE_KEY_ACS_AREA_TREE_PREFIX = "acs_areaTreeCache:";
@Primary
@Bean({"redisTemplate"})
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
redisTemplate.setValueSerializer((RedisSerializer)jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer((RedisSerializer)stringRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
@@ -0,0 +1,13 @@
package cn.cloudwalk.elevator.config;
public class AcsConstants {
public static final String SUCCESS_CODE = "00000000";
public static final String SERVICE_CODE = "elevator-app";
public static final Long ONE_DAY_MILLISECONDS = Long.valueOf(86400000L);
public static final Long ONE_YEAR_MILLISECONDS = Long.valueOf(31536000000L);
public static final String DEFAULT_CALLER = "defaultUserId";
public static final String DEFAULT_CALLER_NAME = "defaultUserName";
public static final String ACS_OPEN_DOOR_RECORD_EVENT_TOPIC = "ACS_OPEN_DOOR_RECORD_EVENT_TOPIC";
public static final String ACS_BACKEND_REG_LOG_ID_KEY_PREFIX = "acs:backendRegLogId:";
public static final String ACS_BACKEND_REG_EXPIRE_PREFIX = "acs:backendRegExpire:";
}
@@ -0,0 +1,11 @@
package cn.cloudwalk.elevator.config;
public class AcsLockConstants {
public static final String LOCK_EXPORT_BUSINESSID_PREFIX = "AcsExport:";
public static final String LOCK_RECORD_STATISTICS_BUSINESSID_PREFIX = "AcsRecordStatistics:";
public static final String LOCK_BACKEND_REG_LOG_ID_PREFIX = "AcsBackendRegLogId:";
public static final String LOCK_URGENT_GROUP_DEVICE_ID_PREFIX = "AcsUrgentGroupDeviceIds:";
}
@@ -0,0 +1,18 @@
package cn.cloudwalk.elevator.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "cloudwalk.elevator.common")
public class ElevatorCwosConfig {
private String relativePrefix;
public String getRelativePrefix() {
return this.relativePrefix;
}
public void setRelativePrefix(String relativePrefix) {
this.relativePrefix = relativePrefix;
}
}
@@ -0,0 +1,457 @@
package cn.cloudwalk.elevator.config;
public class ErrorCode {
public static final String OTHER_ERROR = "00000001";
public static final String ID_IS_NULL = "53060410";
public static final String ID_ARRAY_IS_NULL = "53060411";
public static final String ADD_IMAGE_STORE_ERROR = "53060413";
public static final String ID_IS_ERROR = "53060414";
public static final String EDIT_IMAGE_STORE_IS_ERROR = "53060415";
public static final String IMAGE_STORE_REF_IS_ALL_NULL = "53060416";
public static final String IMAGFE_STORE_ORG_ID_ARRAY_IS_ERROR = "53060417";
public static final String IMAGFE_STORE_LABEL_ID_ARRAY_IS_ERROR = "53060418";
public static final String IMAGFE_STORE_PERSON_ID_ARRAY_IS_ERROR = "53060419";
public static final String IMAGFE_STORE_LABEL_ID_EXCLUDE_ARRAY_IS_ERROR = "53060420";
public static final String IMAGFE_STORE_PERSON_ID_EXCLUDE_ARRAY_IS_ERROR = "53060421";
public static final String IMAGE_STORE_DELETE_ERROR = "53060422";
public static final String IMAGE_STORE_NAME_IS_ERROR = "53060423";
public static final String ID_LENGTH_IS_ERROR = "53060424";
public static final String ORG_PARENT_NODE_IS_ERROR = "53060425";
public static final String GET_BUSINESS_NAME_IS_ERROR = "53060426";
public static final String PARENT_ID_LENGTH_IS_ERROR = "53060427";
public static final String FILE_UPLOAD_ERROR = "80014001";
public static final String FILE_UPLOAD_CONTROLLER_ERROR = "80014013";
public static final String FILE_TYPE_IS_INVALID = "53060429";
public static final String FILE_MAX_IS_ERROR = "53060428";
public static final String ROTATE_IMAGE_ERROR = "53060430";
public static final String EXTRACT_FEATURE_FAIL = "53060431";
public static final String FACE_DETECT_IS_EMPTY = "53060432";
public static final String FACE_DETECT_OVER_SIZE = "53060433";
public static final String IMAGE_IS_EMPTY = "53060434";
public static final String EXTRACT_FEATURE_EXCEPTION = "53060435";
public static final String EXTRACT_FEATURE_RESULT_IS_EMPTY = "53060436";
public static final String UPLOAD_SINGLE_FACE = "53060437";
public static final String GROUP_ID_IS_EMPTY = "53060438";
public static final String FACE_DETECT_EXCEPTION = "53060439";
public static final String FACE_DETECT_RESULT_IS_EMPTY = "53060440";
public static final String QUERY_ALL_GROUP_TOPN_FAIL = "53060441";
public static final String QUERY_EVERY_GROUP_TOPN_FAIL = "53060442";
public static final String QUERY_FEATURE_RESULT_IS_EMPTY = "53060443";
public static final String QUERY_FEATURE_RESULT_FAIL = "53060444";
public static final String IMAGE_UNDER_SIZE = "53060445";
public static final String IMAGE_PIXEL_UNDER_SIZE = "53060446";
public static final String ADD_FACE_FAIL = "53060447";
public static final String REMOVE_FACE_FAIL = "53060448";
public static final String FILE_MANAGER_READ_FILE_ERROR = "80014016";
public static final String FILE_MANAGER_DEL_ERROR = "80014017";
public static final String ADD_ORG_TYPE_ERROR = "53003800";
public static final String EDIT_ORG_TYPE_ERROR = "53003801";
public static final String DEL_ORG_TYPE_ERROR = "53003802";
public static final String ADD_ORG_TYPE_DUPLICATE_NAME = "53003803";
public static final String QUERY_ORG_TYPE_ERROR = "53003804";
public static final String PROPERTIES_DUPLICATE_NAME_ERROR = "53003805";
public static final String ADD_AREA_TYPE_ERROR = "53004800";
public static final String EDIT_AREA_TYPE_ERROR = "53004801";
public static final String DEL_AREA_TYPE_ERROR = "53004802";
public static final String ADD_AREA_TYPE_DUPLICATE_NAME = "53004803";
public static final String QUERY_AREA_TYPE_ERROR = "53004804";
public static final String AREA_TYPE_NAME_NOT_NULL = "53004806";
public static final String AREA_TYPE_NAME_LENGTH_INVAILD = "53004807";
public static final String AREA_TYPE_PRO_NAME_NOT_NULL = "53004810";
public static final String AREA_TYPE_PRO_REQUIRED_NOT_NULL = "53004811";
public static final String AREA_TYPE_PRO_REQUIRED_RANGE_INVAILD = "53004812";
public static final String AREA_TYPE_HAS_LOWER_DATA = "53004813";
public static final String AREA_TYPE_NOT_EDIT_DEFAULT = "53004815";
public static final String EXIST_AREA_WITH_TYPE = "53004854";
public static final String AREA_TYPE_PRO_ORDER_NOT_NULL = "53004816";
public static final String AREA_TYPE_PRO_ORDER_RANGE_INVAILD = "53004817";
public static final String QUERY_ORG_ERROR = "53003300";
public static final String TYPE_ID_IS_NULL = "53003301";
public static final String TYPE_ID_LENGTH_IS_ERROR = "53003302";
public static final String PARAM_LENGTH_IS_ERROR = "53003303";
public static final String EXIST_ORG_WITH_TYPE = "53003304";
public static final String ORG_ID_IS_NULL = "53003305";
public static final String ORG_PARENT_HSH_LOWER_LEVEL_ERROR = "53003306";
public static final String ORG_PARENT_ID_IS_NULL = "53003307";
public static final String ORG_LEVEL_IS_ERROR = "53003308";
public static final String ORG_NAME_IS_EXIST = "53003309";
public static final String ORG_ID_IS_ERROR = "53003310";
public static final String PERSON_ID_ARRAY_IS_ERROR = "53003311";
public static final String ORG_NAME_IS_NULL = "53003312";
public static final String ORG_YI_IS_NOT_DELETE = "53003313";
public static final String ORG_PARENT_IS_HAVING = "53003314";
public static final String ORG_CANNOT_DELETE = "53003315";
public static final String QZ_BUSINESS_ID_INVALID = "53014000";
public static final String QZ_PERSON_CODE_INVALID = "53014001";
public static final String QZ_PERSON_NAME_INVALID = "53014002";
public static final String QZ_PERSON_USER_NAME_INVALID = "53014003";
public static final String QZ_PERSON_PHONE_INVALID = "53014004";
public static final String QZ_PERSON_EMAIL_INVALID = "53014005";
public static final String QZ_PERSON_SYNC_ACCOUNT_INVALID = "53014006";
public static final String QZ_PERSON_CUSTOM_FIELD_INVALID = "53014007";
public static final String QZ_PERSON_ADD_ERROR = "53014008";
public static final String QZ_PERSON_EDIT_ERROR = "53014009";
public static final String QZ_PERSON_DEL_ERROR = "53014010";
public static final String QZ_PERSON_QUERY_ERROR = "53014011";
public static final String QZ_PERSON_CODE_DUPLICATE = "53014012";
public static final String QZ_PERSON_USER_NAME_DUPLICATE = "53014013";
public static final String QZ_PERSON_PHONE_DUPLICATE = "53014014";
public static final String QZ_PERSON_EMAIL_DUPLICATE = "53014015";
public static final String QZ_PERSON_FILED_LOSE = "53014016";
public static final String QZ_PERSON_FILED_INVALID = "53014017";
public static final String QZ_PERSON_FILED_NOT_EXISTS = "53014018";
public static final String QZ_PERSON_NO_SYSTEM_ID = "53014019";
public static final String QZ_PERSON_FILED_LABEL_ORGANIZATION_LOSE = "53014020";
public static final String QZ_PERSON_SOURCE_ILLEGAL = "53014021";
public static final String QZ_PERSON_PROPERTIES_CERT_LOSE = "53014022";
public static final String QZ_PERSON_CERT_ID_DUPLICATE = "53014023";
public static final String PERSON_ID_LIST_IS_EMPTY = "53014024";
public static final String IMAGE_ID_LIST_IS_EMPTY = "53014025";
public static final String IMAGE_ID_IS_EMPTY = "53014026";
public static final String QZ_SYSTEM_ID_VALUE_EMPTY = "53014027";
public static final String QZ_SYSTEM_ID_VALUE_DUPLICATE = "53014028";
public static final String PERSONNEL_ATTRIBUTES_ARE_NOT_SET = "53014029";
public static final String QZ_BATCH_ID_INVALID = "53014030";
public static final String QZ_BATCH_STATUS_INVALID = "53014031";
public static final String QZ_BATCH_ADD_ERROR = "53014032";
public static final String QZ_BATCH_QUERY_ERROR = "53014033";
public static final String QZ_BATCH_DETAIL_QUERY_ERROR = "53014034";
public static final String BATCH_IMPORT_INSERT_ERROR = "53014035";
public static final String BATCH_IMPORT_PROCESS_EXCEPTION = "53014036";
public static final String BATCH_IMPORT_ZIP_FILE_EMPTY = "53014037";
public static final String BATCH_IMPORT_UNZIP_FAILED = "53014038";
public static final String BATCH_IMPORT_EXCEL_FILE_NOTFOUND = "53014039";
public static final String BATCH_IMPORT_DATA_EMPTY = "53014040";
public static final String FILE_INIT_FAIL = "53014041";
public static final String FILE_FINISHI_FAIL = "53014042";
public static final String FILE_GET_FAIL = "53014043";
public static final String LABEL_NAME_IS_EXIST = "53003700";
public static final String LABEL_ID_IS_ERROR = "53003701";
public static final String LABEL_PAGE_IS_ERROR = "53003702";
public static final String QZ_LABEL_NAME_INVALID = "53003703";
public static final String QZ_LABEL_CODE_INVALID = "53003704";
public static final String LABEL_CODE_IS_EXIST = "53003705";
public static final String QZ_LABEL_ADD_TYPE_INVALID = "53003706";
public static final String QZ_LABEL_DEL_PERSON_RELATION = "53003707";
public static final String PERSON_PRO_NAME_NOT_NULL = "53014800";
public static final String PERSON_PRO_NAME_LENGTH_INVAILD = "53014801";
public static final String PERSON_PRO_TYPE_NOT_NULL = "53014802";
public static final String PERSON_PRO_TYPE_RANGE_INVAILD = "53014803";
public static final String PERSON_PRO_SYSACCOUNT_RANGE_INVAILD = "53014804";
public static final String PERSON_PRO_REQUIRED_RANGE_INVAILD = "53014805";
public static final String PERSON_PRO_ORDER_NOT_NULL = "53014806";
public static final String PERSON_PRO_REMINDER_NOT_NULL = "53014807";
public static final String PERSON_PRO_REMINDER_LENGTH_INVAILD = "53014808";
public static final String PERSON_PRO_ARRAYDATA_LENGTH_INVAILD = "53014809";
public static final String PERSON_PRO_MULTIPLE_RANGE_INVAILD = "53014810";
public static final String DEFAULT_ACCOUNT_CAN_NOT_CHANGE = "53014811";
public static final String REQUIRED_CAN_NOT_CHANGE = "53014812";
public static final String SWITCH_SIZE_PARAM_INVALID = "53014813";
public static final String SWITCH_BACKGROUND_OBJECT_INVALID = "53014814";
public static final String ORG_TYPE_NAME_NOT_NULL = "53003806";
public static final String ORG_TYPE_NAME_LENGTH_INVAILD = "53003807";
public static final String ORG_TYPE_LOWER_NOT_NULL = "53003808";
public static final String ORG_TYPE_LOWER_RANGE_INVAILD = "53003809";
public static final String ORG_TYPE_PRO_NAME_NOT_NULL = "53003810";
public static final String ORG_TYPE_PRO_REQUIRED_NOT_NULL = "53003811";
public static final String ORG_TYPE_PRO_REQUIRED_RANGE_INVAILD = "53003812";
public static final String ORG_TYPE_HAS_LOWER_DATA = "53003813";
public static final String ORG_TYPE_NOT_NEW_DEFAULT = "53003814";
public static final String ORG_TYPE_NOT_EDIT_DEFAULT = "53003815";
public static final String ORG_TYPE_PRO_ORDER_NOT_NULL = "53003816";
public static final String ORG_TYPE_PRO_ORDER_RANGE_INVAILD = "53003817";
public static final String CAT_NOT_EDIT_DEFAULT_TYPE = "53003818";
public static final String PERSON_NOT_EXIST = "53003819";
public static final String PERSON_IMAGE_SCORE_FAILE = "53003820";
public static final String ORG_SEARCH_PARAM_FAILE = "53003821";
public static final String PERSON_REGISTRY_STATUS_IS_NULL = "53014500";
public static final String PERSON_REGISTRY_DEVICESTATUS_IS_NULL = "53014501";
public static final String PERSON_REGISTRY_CODESTATUS_IS_NULL = "53014502";
public static final String PERSON_REGISTRY_PROPERTY_IS_NULL = "53014503";
public static final String PERSON_REGISTRY_DEVICE_IS_NULL = "53014504";
public static final String PERSON_REGISTRY_STATUS_INVALID = "53014505";
public static final String PERSON_REGISTRY_DEVICESTATUS_INVALID = "53014506";
public static final String PERSON_REGISTRY_CODESTATUS_INVALID = "53014507";
public static final String PERSON_REGISTRY_PRO_ID_LIST_IS_ERROR = "53014508";
public static final String PERSON_REGISTRY_PRO_NAME_IS_REQUIRED = "53014509";
public static final String PERSON_REGISTRY_PRO_ORG_LABEL_IS_REQUIRED = "53014510";
public static final String PERSON_REGISTRY_PRO_IS_REQUIRED = "53014511";
public static final String PERSON_REGISTRY_ORG_IDS_IS_ERROR = "53014512";
public static final String PERSON_REGISTRY_LABEL_IDS_IS_ERROR = "53014513";
public static final String PERSON_REGISTRY_DEVICE_IS_ERROR = "53014514";
public static final String PERSON_REGISTRY_ADD_FAIL = "53014515";
public static final String PERSON_REGISTRY_SAVE_FAIL = "53014516";
public static final String PERSON_REGISTRY_IS_NULL = "53014517";
public static final String PERSON_REGISTRY_STATUS_IS_CLOSED = "53014518";
public static final String PERSON_REGISTRY_DEVICE_IS_NOT_ADD = "53014519";
public static final String PERSON_REGISTRY_DETAIL_FAIL = "53014520";
public static final String PERSON_REGISTRY_PRO_LIST_FAIL = "53014521";
public static final String PERSON_REGISTRY_UNIQUE_PRO_IS_NULL = "53014522";
public static final String PERSON_REGISTRY_UNIQUE_PRO_FAIL = "53014523";
public static final String PERSON_PRO_IS_NULL = "53014524";
public static final String PERSON_CERT_PRO_IS_NULL = "53014525";
public static final String CARDID_NOT_BIND_PRO = "53014526";
public static final String NAME_NOT_BIND_PRO = "53014527";
public static final String BIND_PRO_ONE_TO_MANY = "53014528";
public static final String DEFAULT_PRO_ORG_LABEL_IS_REQUIRED = "53014529";
public static final String PERSON_REGISTRY_TYPE_INVALID = "53014530";
public static final String QUERY_DISTRICT_TREE_FAIL = "53014600";
public static final String QUERY_DEVICE_LIST_FAIL = "53014700";
public static final String DEVICE_ID_IS_NULL = "53014701";
public static final String QUERY_PERSON_GROUP_RELATIONS_FAIL = "53014702";
public static final String QUERY_QR_CODE_URL_FAIL = "53014900";
public static final String PERSON_AUDIT_PARAM_SOURCE = "53060533";
public static final String PERSON_AUDIT_DEVICE_FORBID = "53060534";
public static final String PERSON_AUDIT_ADD_EXCEPTION = "53060535";
public static final String PERSON_AUDIT_ID_INVALID = "53060536";
public static final String PERSON_AUDIT_ID_ISNULL = "53060537";
public static final String PERSON_AUDIT_QUERY_FAILED = "53060538";
public static final String PERSON_AUDIT_APPLY_FAILED = "53060539";
public static final String PERSON_AUDIT_PAGE_FAILED = "53060540";
public static final String PERSON_AUDIT_REGISTRY_SETTING_FAILED = "53060541";
public static final String PERSON_AUDIT_DEVICECODE_EMPTY = "53060542";
public static final String PERSON_AUDIT_DEVICE_INVALID = "53060543";
public static final String PERSON_AUDIT_UPLOAD_BASE64_EMPTY = "53060544";
public static final String PERSON_AUDIT_CHECK_NAME_EMPTY = "53060545";
public static final String PERSON_AUDIT_CHECK_WRONG_CAPTCHA = "53060546";
public static final String PERSON_AUDIT_UNIQUE_PROPERTY_ERROR = "53060547";
public static final String PERSON_AUDIT_QUERY_AUDIT_EMPTY = "53060548";
public static final String PERSON_AUDIT_AGREE_CAN_NOT_EDIT = "53060549";
public static final String AREA_PARENT_ID_IS_NULL = "53015100";
public static final String AREA_PARENT_HSH_LOWER_LEVEL_ERROR = "53015101";
public static final String AREA_PARENT_IS_HAVING = "53015102";
public static final String AREA_NAME_IS_EXIST = "53015103";
public static final String AREA_ID_IS_ERROR = "53015104";
public static final String AREA_PARENT_NODE_IS_ERROR = "53015105";
public static final String AREA_YI_IS_NOT_DELETE = "53015106";
public static final String AREA_TYPE_ID_IS_NULL = "53015107";
public static final String UNIT_ID_ARRAY_IS_ERROR = "53015108";
public static final String QUERY_AREA_ERROR = "53015109";
public static final String DETAIL_AREA_ERROR = "53015110";
}
@@ -0,0 +1,17 @@
package cn.cloudwalk.elevator.config;
public class FeignRemoteConfig {
public static final String PLATFORM_USER_ID = "platformuserid";
public static final String LOGIN_ID = "loginid";
public static final String BUSINESS_ID = "businessid";
public static final String USER_NAME = "username";
public static final String APPLICATION_ID = "applicationid";
public static final String AUTHORIZATION = "authorization";
public static final String SERVICE_CODE = "elevator-app";
}
@@ -0,0 +1,97 @@
package cn.cloudwalk.elevator.config;
import cn.cloudwalk.cloud.context.CloudwalkCallContext;
import cn.cloudwalk.cloud.session.extend.DefaultExtendContext;
import cn.cloudwalk.elevator.context.CloudWalkExtendContextValue;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
public class FeignThreadLocalUtil {
private static ThreadLocal<Map<String, String>> threadLocal = new ThreadLocal<>();
public static void set(Map<String, String> t) {
threadLocal.remove();
threadLocal.set(t);
}
public static Map<String, String> get() {
return threadLocal.get();
}
public static void remove() {
threadLocal.remove();
}
public static Map<String, String> getRequestHeader(HttpServletRequest request) {
Map<String, String> map = new ConcurrentHashMap<>(10);
if (null != request.getHeader("platformuserid")) {
map.put("platformuserid", request.getHeader("platformuserid"));
}
if (null != request.getHeader("loginid")) {
map.put("loginid", request.getHeader("loginid"));
}
if (null != request.getHeader("businessid")) {
map.put("businessid", request.getHeader("businessid"));
}
if (null != request.getHeader("username")) {
map.put("username", request.getHeader("username"));
}
if (null != request.getHeader("applicationid")) {
map.put("applicationid", request.getHeader("applicationid"));
}
if (null != request.getHeader("authorization")) {
map.put("authorization", request.getHeader("authorization"));
}
return map;
}
public static Map<String, String> getDefaultReqesutHeader(String businessId) {
Map<String, String> map = new ConcurrentHashMap<>(2);
map.put("businessid", businessId);
map.put("username", "default");
return map;
}
public static void setRequestHeader(Map<String, String> headerMap) {
set(headerMap);
}
public static Map<String, String> getDefaultRequestHeader(CloudwalkCallContext context) {
Map<String, String> map = new HashMap<>(10);
DefaultExtendContext<CloudWalkExtendContextValue> extendContext =
(DefaultExtendContext<CloudWalkExtendContextValue>)context.getExt();
map.put("platformuserid", context.getUser().getCaller());
map.put("loginid", ((CloudWalkExtendContextValue)extendContext.getValue()).getLoginId());
map.put("businessid", context.getCompany().getCompanyId());
map.put("username",
StringUtils.isEmpty(context.getUser().getCallerName()) ? "default" : context.getUser().getCallerName());
map.put("applicationid", context.getApplicationId());
map.put("authorization", ((CloudWalkExtendContextValue)extendContext.getValue()).getAuthorization());
return map;
}
public static void setRequestHeader(CloudwalkCallContext context) {
set(getDefaultRequestHeader(context));
}
/**
* 在有界线程池等子线程中调用 Feign 前,必须为当前线程设置与 {@code context} 一致的请求头 ThreadLocal; 调用结束后恢复/清理,避免池化线程泄漏或串扰。
*/
public static <T> T callWithContext(CloudwalkCallContext context, Callable<T> action) throws Exception {
Map<String, String> previous = get();
try {
setRequestHeader(context);
return action.call();
} finally {
if (previous != null) {
set(previous);
} else {
remove();
}
}
}
}
@@ -0,0 +1,65 @@
package cn.cloudwalk.elevator.config;
import java.util.Arrays;
import java.util.List;
public class ImageStoreConstants {
public static final short IS_NOT_DEL = 0;
public static final short IS_DEL = 1;
public static final int ASSOCIATED_ACTION_INCLUDE = 0;
public static final int ASSOCIATED_ACTION_EXCLUDE = 1;
public static final int ASSOCIATED_OBJECT_ORG_TYPE = 1;
public static final int ASSOCIATED_OBJECT_LABEL_TYPE = 2;
public static final int ASSOCIATED_OBJECT_PERSON_TYPE = 3;
public static final int ASSOCIATED_OBJECT_MATCHPATTERN_TYPE = 4;
public static final int ASSOCIATED_OBJECT_IMAGE_STORE_TYPE = 5;
public static final String COMMON_BUSINESS_ID = "cloudwalk";
public static final Integer COMMON_PROPERTIES_STATUS = Integer.valueOf(99);
public static final Integer COMMON_UNIT_PROPERTIES_STATUS = Integer.valueOf(98);
public static final Integer COMMON_PARK_PROPERTIES_STATUS = Integer.valueOf(97);
private static final List<String> CUST_PROPERTIES = Arrays.asList(new String[] {"ext1", "ext2", "ext3", "ext4",
"ext5", "ext6", "ext7", "ext8", "ext9", "ext10", "ext11", "ext12", "ext13", "ext14", "ext15", "ext16", "ext17",
"ext18", "ext19", "ext20", "ext21", "ext22", "ext23", "ext24", "ext25", "ext26", "ext27", "ext28", "ext29",
"ext30", "ext31", "ext32", "ext33", "ext34", "ext35", "ext36", "ext37", "ext38", "ext39", "ext40"});
public static final String PERSON_PROPERTY_USER_NAME = "userName";
public static List<String> getCustProperties() {
return CUST_PROPERTIES;
}
public static final String PERSON_PROPERTY_PHONE = "phone";
public static final String PERSON_PROPERTY_EMAIL = "email";
public static final String COMPARE_PICTURE = "comparePicture";
public static final String PERSON_PROPERTY_PERSON_CODE = "personCode";
public static final String IC_CAED_NO = "icCardNo";
public static final String IC_CAED_TYPE = "icCardType";
public static final String FLOORS = "floors";
public static final String PROPERTY_CODE = "code";
public static final String PROPERTY_HAS_REQUIRED = "hasRequired";
public static final int PROPERTY_REQUIRED = 1;
public static final int PROPERTY_UNREQUIRED = 0;
public static final String PERSON_PROPERTY_NAME = "name";
public static final String PERSON_PROPERTY_ORGANIZATIONIDS = "organizationIds";
public static final String PERSON_PROPERTY_LABELIDS = "labelIds";
public static final String CREATE_SYS_ACCOUNT_CODE = "createSysAccount";
public static final String CREATE_SYS_ACCOUNT_NAME = "同步创建账号";
public static final String SYS_ACCOUNT_ID_CODE = "sysAccountId";
public static final String SYS_ACCOUNT_ID_NAME = "同步创建账号系统ID";
public static final Integer AGREE = Integer.valueOf(0);
public static final String SYSTEM_USER = "system";
public static final String IMAGE_STORE_ID = "imageStoreId";
public static final String PASS_CRONS = "passCrons";
public static final short PERSON_DELETED = -1;
public static final short PERSON_VALIDATE = 0;
public static final short PERSON_INVALIDATE = 1;
public static final short DEVICE_PERSON_VALIDATE = 1;
public static final short DEVICE_PERSON_INVALIDATE = 0;
public static final Integer MAX_FILE = Integer.valueOf(3145728);
public static final String SYSTEM_GROUP_CREATE_USER_ID = "group";
public static final int PERSON_ACTION_DELETE = -1;
public static final int PERSON_ACTION_ADD = 0;
public static final int PERSON_ACTION_UPDATE = 1;
public static final short GROUP_MODEL_STATUS_NO_IMG = 0;
public static final int PERSON_VALIDATE_UNPROCESSED = 0;
public static final int PERSON_VALIDATE_PROCESSED = 1;
}
@@ -0,0 +1,22 @@
package cn.cloudwalk.elevator.context;
public class CloudWalkExtendContextValue {
private String loginId;
private String authorization;
public String getLoginId() {
return this.loginId;
}
public void setLoginId(String loginId) {
this.loginId = loginId;
}
public String getAuthorization() {
return this.authorization;
}
public void setAuthorization(String authorization) {
this.authorization = authorization;
}
}
@@ -0,0 +1,30 @@
package cn.cloudwalk.elevator.em;
public enum AcsApplicationSourceEnum {
ACCESS_CONTROL("ACCESS_CONTROL", "门禁应用"), CWOS_PORTAL("CWOS_PORTAL", "平台应用");
private final String code;
private final String name;
AcsApplicationSourceEnum(String code, String name) {
this.code = code;
this.name = name;
}
public static AcsApplicationSourceEnum getEnumByCode(String code) {
for (AcsApplicationSourceEnum item : values()) {
if (code.equals(item.code)) {
return item;
}
}
return null;
}
public String getCode() {
return this.code;
}
public String getName() {
return this.name;
}
}
@@ -0,0 +1,30 @@
package cn.cloudwalk.elevator.em;
public enum AcsDeviceIdentifyTypeEnum {
FRONT_REG(Integer.valueOf(0), "前端识别"), BACKEND_REG(Integer.valueOf(1), "后端识别");
private Integer code;
private String name;
AcsDeviceIdentifyTypeEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
public static AcsDeviceIdentifyTypeEnum getEnumByCode(Integer code) {
for (AcsDeviceIdentifyTypeEnum item : values()) {
if (code.equals(item.getCode())) {
return item;
}
}
return null;
}
public Integer getCode() {
return this.code;
}
public String getName() {
return this.name;
}
}
@@ -0,0 +1,30 @@
package cn.cloudwalk.elevator.em;
public enum AcsDeviceQueryTypeEnum {
QUERY_MAIN(Integer.valueOf(1), "只查询主设备"), QUERY_MAIN_AND_SUB(Integer.valueOf(2), "查询主设备及其子设备");
private Integer code;
private String message;
AcsDeviceQueryTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public static AcsDeviceQueryTypeEnum getEnumByCode(Integer code) {
for (AcsDeviceQueryTypeEnum item : values()) {
if (code.equals(item.getCode())) {
return item;
}
}
return null;
}
public Integer getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
}
@@ -0,0 +1,59 @@
package cn.cloudwalk.elevator.em;
import java.util.ArrayList;
import java.util.List;
public enum AcsDeviceSettingEnum {
QUALITY_SCORE("qualityScore", "人脸抓拍质量分", AcsApplicationSourceEnum.CWOS_PORTAL),
TEMP_THRESHOLD("tempThreshold", "温度报警阈值", AcsApplicationSourceEnum.CWOS_PORTAL),
TEMP_MIN("tempMin", "温度最低值", AcsApplicationSourceEnum.CWOS_PORTAL),
MASK_THRESHOLD("maskThreshold", "口罩阈值", AcsApplicationSourceEnum.CWOS_PORTAL),
LIVE_STATE("liveState", "活体检测开关", AcsApplicationSourceEnum.CWOS_PORTAL),
TEMP_STATE("tempState", "温度控制开关", AcsApplicationSourceEnum.CWOS_PORTAL),
FACE_SIZE_MIN("faceSizeMin", "人脸最小尺寸", AcsApplicationSourceEnum.CWOS_PORTAL),
FACE_SIZE_MAX("faceSizeMax", "人脸最大尺寸", AcsApplicationSourceEnum.CWOS_PORTAL),
FACE_ONE_THRESHOLD("faceOneThreshold", "人脸1:1识别阈值", AcsApplicationSourceEnum.CWOS_PORTAL),
FACE_MANY_THRESHOLD("faceManyThreshold", "人脸1:N识别阈值", AcsApplicationSourceEnum.CWOS_PORTAL),
ACS_FACE_REG_THRESHOLD("ACS_FACE_REG_THRESHOLD", "人脸抓拍识别阈值", AcsApplicationSourceEnum.ACCESS_CONTROL);
private String code;
private String remark;
private AcsApplicationSourceEnum source;
public String getCode() {
return this.code;
}
public String getRemark() {
return this.remark;
}
public AcsApplicationSourceEnum getSource() {
return this.source;
}
AcsDeviceSettingEnum(String code, String remark, AcsApplicationSourceEnum source) {
this.code = code;
this.remark = remark;
this.source = source;
}
public static AcsDeviceSettingEnum getEnumByCode(String code) {
for (AcsDeviceSettingEnum item : values()) {
if (code.equals(item.code)) {
return item;
}
}
return null;
}
public static List<AcsDeviceSettingEnum> getEnumBySource(String source) {
List<AcsDeviceSettingEnum> list = new ArrayList<>();
for (AcsDeviceSettingEnum item : values()) {
if (source.equals(item.source.getCode())) {
list.add(item);
}
}
return list;
}
}
@@ -0,0 +1,30 @@
package cn.cloudwalk.elevator.em;
public enum AcsOpenDoorStatusEnum {
INIT(Integer.valueOf(0), "初始化"), SUCESS(Integer.valueOf(1), "成功"), FAIL(Integer.valueOf(2), "失败");
private Integer code;
private String message;
AcsOpenDoorStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public static AcsOpenDoorStatusEnum getEnumByCode(Integer code) {
for (AcsOpenDoorStatusEnum item : values()) {
if (code.equals(item.getCode())) {
return item;
}
}
return null;
}
public Integer getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
}
@@ -0,0 +1,30 @@
package cn.cloudwalk.elevator.em;
public enum AcsOperateStatusEnum {
INIT(Integer.valueOf(0), "初始化"), MATCHED(Integer.valueOf(1), "已匹配");
private Integer code;
private String message;
AcsOperateStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public static AcsOperateStatusEnum getEnumByCode(Integer code) {
for (AcsOperateStatusEnum item : values()) {
if (code.equals(item.getCode())) {
return item;
}
}
return null;
}
public Integer getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
}
@@ -0,0 +1,30 @@
package cn.cloudwalk.elevator.em;
public enum AcsOperateTypeEnum {
REMOTE_OPEN_DOOR("REMOTE_OPEN_DOOR", "远程开门"), QRCODE_OPEN_DOOR("QRCODE_OPEN_DOOR", "小程序扫码开门");
private String code;
private String message;
AcsOperateTypeEnum(String code, String message) {
this.code = code;
this.message = message;
}
public static AcsOperateTypeEnum getEnumByCode(String code) {
for (AcsOperateTypeEnum item : values()) {
if (code.equals(item.getCode())) {
return item;
}
}
return null;
}
public String getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
}
@@ -0,0 +1,30 @@
package cn.cloudwalk.elevator.em;
public enum AcsPassTypeEnum {
LONG_TIME(Integer.valueOf(0), "长期"), AUTO_PASS(Integer.valueOf(1), "自定义时间"), PASS_TIME(Integer.valueOf(2), "通行时间段");
private Integer code;
private String message;
AcsPassTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public static YesNoTypeEnum getEnumByCode(Integer code) {
for (YesNoTypeEnum item : YesNoTypeEnum.values()) {
if (code.equals(item.getCode())) {
return item;
}
}
return null;
}
public Integer getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
}

Some files were not shown because too many files have changed in this diff Show More