Przeglądaj źródła

docs: D1-09 本地SQLite建表/schema缺口修复回写(待验证清单/交接卡/yaml/js)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
huangjie 3 dni temu
rodzic
commit
c19ff87ce2

+ 11 - 0
项目文档/进度/交接卡.md

@@ -196,3 +196,14 @@
 - **ComBin 两套栈去重(D3-04 ✗ 延后)**:operate(`ivf_tl_Entity/ComEntitys/ComBin`,带 OperationLogger)与 control(`ivf_tl_SerialHelper/ComBin`,真驱动)两套串口栈。拆分后 operate 已不驱动串口→operate 那套栈成运行期死代码;control 操作不进 operation_log(oplog 埋点在 operate 栈,=D1-10)。去重=动串口代码的有风险重构,属收尾不阻塞功能,列延后专项(需设计 oplog 收口归属 + 受控验证),**不做无监督风险重构**。
 - **核实**:control sln + operate 编译 0 错误;ControlTest 已从 sln+磁盘删;注册表自启往返;部署布局经 E2E 坐实。
 - **下一步(全部三阶段已推进到位)**:剩余均为有依赖/受门控/有风险的延后专项——调试页借串口命令代理(D2-02,需设计+受监督电机验)、ComBin 两栈去重(D3-04)、D1-09 SQLite、M-01~M-07、整机开机自启复测(需重启)。建议 feature 分支合并 main + 推送。
+
+---
+
+## 2026-06-22 · D1-09 修复:control 本地 SQLite 建表/schema 缺口
+
+- **背景**:循环续做,挑可自主修的真 bug。D1-09(本地 SQLite 建表报错)。
+- **根因(两类)**:① `HouseAutofocusCalibrationDB.id` 是 `[IsPrimaryKey,IsIdentity] long`,SqlSugar 把 long→SQLite BIGINT,而 **SQLite AUTOINCREMENT 只允许 INTEGER PRIMARY KEY** → `CodeFirst.InitTables` 报 "AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY"、calib 表建不出;② 打包 `DependFile/DB/aivfoTL.db` 的 schema 落后于实体——`tl_setting` 缺 `localAutofocusEnabled`、`house_well_setting` 等多表缺列 → `DBUpdateTLInfo`/`UpdateHouseWellSetting` 等查询报 `no such column`。
+- **修复**:① `id` `long→int`(→SQLite INTEGER;id 仅自增主键,业务从不按值读,查询按 tl_sn/house_sn/well_sn/scene);② `DBService.StartDbService` 对 control 本地写的 **9 个实体**(TLSetting/House/HouseWellSetting/Dish/Balance/Embryo/HouseWellPhoto/Picture/HouseAutofocusCalibration)逐个 `CodeFirst.InitTables` 自愈 schema(additive 补缺失列、各自 try/catch 隔离)。
+- **真机验证(red→green)**:修前每启动 DbException 有 AUTOINCREMENT + 多表 no such column;修后(分步验:先修①→AUTOINCREMENT 消失但暴露②localAutofocusEnabled→再修②→暴露 house_well_setting→补全 9 实体)**启动后 DbException 条数=0**;started:true 正常驱动,6 单测过。
+- **核实**:三轮重建重启逐个验证错误消失;最终 0 DbException;/status started:true。已提交。
+- **下一步**:延后专项剩 调试页借串口命令代理(D2-02)、ComBin 两栈去重(D3-04)、M-01~M-07、整机开机自启复测(需重启);建议 feature 合并 main + 推送。

+ 2 - 2
项目文档/进度/待验证清单.md

@@ -18,14 +18,14 @@
 | D1-06 | 单实例:手动起第二个 control 发现 Mutex 已占自退(进程数仍为1) | 运行 | ☑ |
 | D1-07 | **control 完整采集闭环 + 数据入库(started:true / 真机自控环 / 落库)** | **真机** | ☑(修死锁后·DB实证) |
 | D1-08 | **serialBin/HAL 借用ComBin重开不复活发送线程致串口握手死锁** 修复 | **真机** | ☑ 已修复并真机验证 |
-| D1-09 | control 本地 SQLite 建表 schema bug(预存,非死锁) | 运行 | ✗ 待修 |
+| D1-09 | control 本地 SQLite 建表/schema 缺口(AUTOINCREMENT + 多表缺列) | 运行 | ☑ 已修复并真机验证 |
 | D1-10 | control 硬件操作不进 operation_log(oplog 埋点在 operate 的另一套栈) | 运行 | ✗ 归阶段3(两栈去重) |
 
 > **2026-06-22 真机验证实测说明(D1-xx 详情见交接卡同日段)**:
 > - **D1-01/D1-05 真实代码实跑(非机制层)**:编译运行 operate 端真实 `ControlProcessLauncher.EnsureRunning`(集成测试 harness `临时文件/LauncherTest`,`<Compile Include>` 链入真文件):① control 未运行时 `IsControlAlive=False → 已拉起 control.exe → 轮询就绪 → True`(拉起路径);② control 已运行时 `IsControlAlive=True → "已在运行,直接连接" → True、PID 不变、进程数恒 1`(复用路径)。harness(operate 代理)退出后 control 仍在 = **续命**亦由真实拉起路径实证。**唯一未跑** = operate WPF 外壳(登录窗→MainWindow),因僵尸 20268 占 operate 单实例 Mutex,但其调用的拉起逻辑已实跑验证。
 > - **D1-07 数据入库闭环 DB 实证**:control 运行期(20:19 起)直查 108 `aivfo_tl_setting` 库:`house_collect` 20:18 后新增 22 行、`alarm_data` 新增 270 行;抽样实读:`house_collect` = `tl_sn=NEO-1-20230411, house_sn=2..9, temperature=37.16/37.46℃(真实箱体温), 多点温度, house_door=0, create_by=admin_admin, create_time=20:29`;`alarm_data` = `house_sn=11 PRESS alarm`(control 自主检测缓冲瓶低压上报)。**闭环:control 读真机传感器 → MQTT/服务器 → 108 库入库,实锤。**
 > - ☑ 项均 108 集群在线 + 真机连接、Claude **UAC 静默提权**自主完成,全程无需用户配合点击/起停进程。死锁修复同样惠及 operate(同 ScanDevices→serialBin 路径)。
-> - ✗ **D1-09 预存 SQLite schema bug**(非死锁/非拆分):`InitTables` 报 `AUTOINCREMENT only allowed on INTEGER PRIMARY KEY`,某表建表失败,control 仍运行(读本地培养记录成功),影响限该表本地持久化
+> - **D1-09 ☑ 已修复(2026-06-22)**:控制端本地 SQLite 两类缺口已修——① `HouseAutofocusCalibrationDB.id` `long→int`(SQLite AUTOINCREMENT 只允许 INTEGER PRIMARY KEY,long→BIGINT 报错致 InitTables 建表失败);② `DBService.StartDbService` 对 control 本地写的 9 个实体逐个 `CodeFirst.InitTables` 自愈 schema(打包 aivfoTL.db 落后于实体,缺 `localAutofocusEnabled` 等列致 `no such column`)。真机验证:修复后 control 启动 **DbException 条数=0**(此前每启动报 AUTOINCREMENT + 多表 no such column),started:true 正常驱动,6 单测过
 > - ✗ **D1-10 oplog 缺口(归阶段3,非闭环阻塞)**:核查发现全 `OperationLogger` 埋点都在 **operate 侧**(ivf_tl_Operate + operate 的 ivf_tl_Services/HttpHelper + operate 的 ivf_tl_Entity 的 Camera/ComBin),**control 子树零埋点**。control 硬件操作的 oplog 收口本就挂在 operate 的**另一套 ComBin/Camera 栈**(=阶段3 "ComBin 两套栈去重 G1-2")——故给 ControlHost 单加 `InitOperationLog` 也不会产 oplog(control 自己串口栈无埋点)。归阶段3 两栈去重一并处理。control 诊断走 `RunRecord/HouseComRecord` 文件日志(本次定位全程靠它),业务数据入库走 MQTT,**闭环不受影响**。
 > - 旁注:`ServiceDishAndBalanceData 接口返回失败`=无皿时服务器无培养记录、回退本地,正常非缺陷。
 

+ 1 - 1
项目文档/进度/进度数据.js

@@ -4,7 +4,7 @@ window.PROGRESS_DATA = {
   generatedAt: "2026-06-22 23:00",
   phase: "三阶段全推进到位(阶段1完成/阶段2三端点验/阶段3退役删+部署+自启);剩延后专项",
   currentTask: "阶段1完成+operate真外壳E2E+数据入库;阶段2三端点真机验+operate客户端;阶段3退役删ControlTest+部署指南+开机自启方案验",
-  note: "operate/control双进程拆分三阶段主体完成。剩延后专项:调试页借串口命令代理(D2-02)/ComBin两栈去重(D3-04)/D1-09 SQLite/M区/整机自启复测(需重启)。建议feature合并main+推送。",
+  note: "operate/control双进程拆分三阶段主体完成+D1-09本地SQLite建表/schema缺口修复(启动0 DbException)。剩延后专项:调试页借串口命令代理(D2-02)/ComBin两栈去重(D3-04)/M区/整机自启复测(需重启)。建议feature合并main+推送。",
   milestones: [
     { name: "阶段1 · control 独立进程骨架(完成)", tasks: [
       { id: "Task1-7", name: "全过+D1-08死锁修复+operate真外壳E2E+数据入库DB铁证", status: "☑" }

+ 1 - 1
项目文档/进度/进度状态.yaml

@@ -34,4 +34,4 @@
     名称: 清理老壳 + 装机收尾
     状态: 未开始
     备注: "退役删ivf_tl_ControlTest脏壳 + operate开机自启 + ComBin两套栈去重(G1-2) + 部署文档。待阶段2完成后拆计划"
-下一步: 延后专项(调试页借串口命令代理/ComBin两栈去重D3-04/D1-09 SQLite/M-01~M-07/整机开机自启复测需重启);建议feature合并main+推送
+下一步: 延后专项(调试页借串口命令代理/ComBin两栈去重D3-04/M-01~M-07/整机开机自启复测需重启);D1-09已修;建议feature合并main+推送