zzw
5 小时以前 7839e940bac9cc90fc6d8d322051d80fd7f40ec8
HANDOFF.md
@@ -1,12 +1,13 @@
# HANDOFF:临抢修软件需求与第一版实现
> 交接日期:2026-08-25(2026-08-26 晚 / 2026-09-07 / 2026-09-08 / 2026-09-09 核对 / 2026-09-10 / 2026-09-11 / 2026-09-14 / 2026-09-16 / 2026-09-17 / 2026-09-28 新会话准备 / 2026-09-28 专业配置与故障编号自动生成 更新)| 用途:新开会话时先读本文件,即可无缝接续
> 项目目录:`C:\Users\jcxiong\Documents\Codex\MyProject\EmergencyRepair`
> 交接日期:2026-08-25(2026-08-26 晚 / 2026-09-07 / 2026-09-08 / 2026-09-09 核对 / 2026-09-10 / 2026-09-11 / 2026-09-14 / 2026-09-16 / 2026-09-17 / 2026-09-28 新会话准备 / 2026-09-28 专业配置与故障编号自动生成 / 2026-09-29 代码入库公司 Git 更新 / 2026-10-02 本机环境迁移与前后端启动)| 用途:新开会话时先读本文件,即可无缝接续
> 项目目录(2026-10-02 起为本机 `D:\projectJava\lqx`;行内旧路径 `C:\Users\jcxiong\Documents\Codex\MyProject\EmergencyRepair` 为上一台机器)
> 注意:2026-10-02 本机工具链与旧记录不同,构建、启动与工作方式约定以第 16 节为准。
## 0. 最新交接(2026-09-28 新会话准备,优先阅读)
> 本节记录当前“第一版已落地代码”的最新状态,优先于下方较早的需求梳理和会话记录。
> 工作目录:`D:\Codex\MyProject\EmergencyRepair`;项目不是 Git 仓库。
> 工作目录:`D:\Codex\MyProject\EmergencyRepair`;Git 仓库:`http://admin@61.183.254.94:3000/r/EmergencyRepair.git`,默认分支 `main`。
### 0.1 当前运行状态
@@ -335,6 +336,7 @@
- 端到端:临时走完“故障上报→XCB审核→三级审批→派单→完工信息上报”,提交成功且派工单状态写为 `COMPLETED`;库内落盘为 `SOLUTIONS_JSON=[{"content":"更换密封件"},{"content":"完成压力复测"}]`、`SOLUTION=更换密封件;完成压力复测`、器材 JSON 含 `certificate`。本次临时数据(故障、派工单、完工信息、验收)已全部清理。
- 浏览器核验(1440px):基础信息内“验收方式+项目名称”同一行,“修后质量情况”“故障说明”“原因分析”各独占整行;处理解决情况表头为“序号/处理解决情况/操作”;器材表头为“序号/名称/规格型号/技术参数/数量/计量单位/合格证明/出库单号/来源/备注/操作”;两个“添加一行”按钮均可用。
- 最终布局微调(2026-09-28 晚):按用户补充要求把“项目名称”并到“验收方式”一行、把“故障说明”“原因分析”改为整行;前端 vue-cli-service build 再次通过,dist 已刷新。
- 代码托管(2026-09-28 晚):项目首次纳入 Git,初始化 `main` 分支并推送到 `http://admin@61.183.254.94:3000/r/EmergencyRepair.git`,首提交 `5305262`;`.gitignore` 排除 `.venv/`、`.ocrvenv/`、`_extract/`、`node_modules/`、`dist/`、`target/`、`*.log`,共提交 103 个文件(约 4.6MB,含需求文档)。
## 0. 本会话记录(2026-09-20 周日)
@@ -639,3 +641,59 @@
- **产品结构树管理 / 设备基础库管理**:产品结构树为型号→X号→一级系统→二级系统→设备的5级树;设备基础库为一级系统→二级系统→设备的3级树;前者设备是实例,后者设备是类。
- **统计报表**:一级菜单包含6项功能;装备故障总体分析上方为柱状图、下方为统计,故障高发设备 Top 通过设备基础库跨T归集。
- **XCB助理审核补充(16:25)**:补齐9类筛选控件;“修改”“销项”按钮已落地并验证。修改支持 `UNREPORTED / REPORTED_XCB / RETURNED`,销项仅支持 `REPORTED_XCB / RETURNED`,销项后状态为 `CANCELLED` 并写回理由、操作人和时间。
## 15. 收尾快照(2026-09-29 周二 06:49,上班前关机)
**本次会话完成(细节见 0.10 / 0.11)**
- 决策表 B1–B4 按建议关闭并落地:系统管理新增“工程专业配置”(字段:名称)、“T队专业配置”(字段:名称、分类 A/B)。
- 故障编号改为自动生成:`潜1基-X号/A-YYMMDD-nnn`(X号 3 位数字,A=T队专业 A/B,nnn 为同一 X号+同一专业+同一上报日期内从 001 递增);派单号=`故障编号/nn`(承修单位序号,从 01 起)。
- 故障上报页:任务状态标签与任务状态下拉框拆成两行(标签换到下一行)。
- 完工信息上报页(AXU15):修后质量情况独占整行;项目名称与验收方式同一行;故障说明、原因分析各独占整行;“处理解决情况”改为可多行的表格(序号/处理解决情况);维修器材表列改为序号、名称、规格型号、技术参数、数量、计量单位、合格证明、出库单号、来源、备注。后端新增 `LX.T_COMPLETION_INFO.SOLUTIONS_JSON` 与 `MaterialItem.certificate`,并继续兼容原 `SOLUTION` 字段。
- 项目纳入公司 Git 仓库:`http://admin@61.183.254.94:3000/r/EmergencyRepair.git`,分支 `main`,首提交 `5305262`(103 个文件),随后 `0bacdcf` 补记远端信息。
**关机时状态**
- 前端 `http://localhost:8082`(监听 PID 22092)、后端 `http://127.0.0.1:8091`(监听 PID 28104)仍在运行,随关机自动结束。
- 登录 `admin / admin123`;数据库 DM8 `SYSDBA/SYSDBA@127.0.0.1:5236`,schema `LX`。
- 工作区干净,本地 `main` 与 `origin/main` 一致。
**下次开机接续**
1. 先确认 `8082/8091` 是否在监听;不在就按 0.1 节命令重启(前端用内置 Node 24 跑 `vue-cli-service serve`,后端用 `mvn -q spring-boot:run`,输出分别重定向到 `frontend.log` / `backend.log`)。
2. 决策表 B6–B10 待用户答复(`requirement\工程状态机设计.md` 第 4 节 + `requirement\决策表_待确认项.md` B 组),答完固化为正式设计。
3. AXU15 剩余待确认:字段来源与可改性(待确认清单第 13 条)、完工验收各环节角色与打印输出、修后质量评级与 AXU14 T员评分字段的关系。
4. 后续改动完成后直接推送到公司 Git 仓库 `main` 分支。
## 16. 收尾快照(2026-10-02 周五,本机环境迁移与前后端启动)
**环境迁移(重要,与第 0 节旧记录不同)**
- 代码已在本机重新拉取,工作目录改为 `D:\projectJava\lqx`,不再是 `D:\Codex\MyProject\EmergencyRepair`。
- 仓库:`http://61.183.254.94:3000/r/EmergencyRepair.git`,分支 `main`,本地 HEAD `5d015d7`(docs: add shutdown snapshot for 2026-09-29),与 `origin/main` 一致。
- 克隆时远端 HEAD 指向不存在的 ref,不会自动检出,需手动 `git checkout main`。凭据已存入 Windows 凭据管理器,`.git/config` 中不再有明文密码。
- 本机工具链与旧机器不同,**第 0.9 节和第 8 节里“`apply_patch` 不可用、必须用 Python 读改写、不能用 `Start-Process`”的约定只适用于上一台机器**,本机 `apply_patch` 与 `Start-Process` 均可正常使用。
- JDK:`C:\Program Files\Java\jdk1.8.0_172`。PATH 里的 java 是 JRE 1.8.0_481(没有 javac),构建前必须显式设置 `JAVA_HOME`。
- Maven:`D:\solidDir\apache-maven-3.6.1\bin\mvn.cmd`(不在 PATH,需绝对路径调用)。
- Node/npm:`C:\Program Files\nodejs`(Node v14.8.0 / npm 6.14.7,不在 PATH,需绝对路径调用)。
- 达梦驱动 `dm.jdbc:DmJdbcDriver18:1.0` 在默认本地仓库缺失(只有下载失败标记),已从 `D:\solidDir\repo` 同名构件安装进 `C:\Users\Lenovo\.m2`;属环境准备,未改项目文件。
- DM8:服务 `DmServiceDMSERVER` 运行中,监听 `127.0.0.1:5236`(PID 5692),账号 `SYSDBA/SYSDBA`,schema `LX`。
**本次完成的构建与运行**
- 后端 `mvn -B -DskipTests clean package` 通过,产物 `emergency-repair-server\target\emergency-repair-server-1.0.0-SNAPSHOT.jar`(约 27MB)。
- 前端 `npm install` + `npm run build` 通过,产物 `emergency-repair-web\dist`,仅两个既有包体积告警。
- 后端用 `java -jar target\emergency-repair-server-1.0.0-SNAPSHOT.jar` 后台运行,监听 `8091`(PID 61648);前端用 `node node_modules\@vue\cli-service\bin\vue-cli-service.js serve` 后台运行,监听 `8082`(PID 57052)。日志为项目根的 `backend.log` / `frontend.log`(`*.log` 已被 `.gitignore` 忽略)。
- HTTP 验证:`POST /api/auth/login`(`admin/admin123`)返回 `code=200`;`GET http://localhost:8082/` 返回 200;前端 `/api` 代理到 8091 链路通。登录 `admin / admin123`。
**本次唯一代码改动(已获用户确认)**
- `emergency-repair-web\src\utils\sensitive.js`:敏感词运行时替换改为跳过表格数据单元格。
  - 口径:`<td>` 内的文本与属性保持代称;`<th>` 表头、页面标题、筛选标签、placeholder 照常替换。
  - 实现:新增 `isInsideTableCell()`(`closest('td')`),接入文本遍历、属性替换、`MutationObserver` 字符变化回调,以及 `replaceDom()` 直接收到文本节点的分支。
  - 验证:向运行页面注入探针表格(表头与数据格均写 `X号`),结果为 `<th>县号</th>`、`<td>X号</td>`;`npm run build` 通过。
  - 效率影响:表格场景通常更快;没有表格且高频更新普通文本时,仅增加 `closest('td')` 的少量判断开销。
**用户本次明确的工作方式要求(务必遵守)**
- 用户问“可不可以……”时只是要调查结论和方案,**不要直接改代码**;只有用户明确要求实施时才动文件。
- 改动前先说明要改什么,口径不明确时先问清楚。
**下次接续**
1. 先确认 `5236 / 8091 / 8082` 是否在监听,不在再按上面的命令重启(本机启动需显式设置 `JAVA_HOME`,Maven / Node 用绝对路径)。
2. `sensitive.js` 改动已获确认并随本次提交推送;`requirement\~$原始需求.docx` 是 Word 锁文件,不要提交。
3. 需求侧待确认项不变:决策表 B6–B10、AXU15 字段来源与可改性、完工验收各环节角色与打印输出、修后质量评级与 AXU14 T员评分字段的关系。
4. 后续改动完成后推送到公司 Git 仓库 `main` 分支。