# 验收标准:06-数据存储SQLite(JSON → SQLite) ## 验收标准线 1. **存储介质切换**:数据落 SQLite(store.db),不再生成/更新 store.json / store.market.json / store.schema.json(迁移前备份除外); 2. **两表结构**:strategy_holdings + market_quotes_cache 两表存在且结构符合技术实现方案(strategy_holdings 持仓生命周期表:holding_id 自增 + strategy_id/code/shares/created_at/closed_at;market_quotes_cache 仅 last_price/last_close 两列,无 JSON 列); 3. **持仓生命周期正确**:openHolding/addShares/reduceShares/closeHolding 操作正确 —— 建仓生成 holding_id+created_at、加/减仓更新当前持仓 shares、清仓 closed_at 置位转历史;同策略同股票仅一笔当前持仓(部分唯一索引);删除策略/一键清零改为软关闭(历史保留); 4. **行情不回归**:行情缓存查询/写回不变 —— 启动首屏有价(从 SQLite 加载)、盘中防抖写回、三级命中(内存→SQLite→REST 补拉)行为一致; 5. **自动迁移正确**:旧 JSON(store.json / store.market.json / 旧 allocations.json 若存在)→ SQLite 数据一致(份额逐条核对、行情快照逐条核对),迁移前备份文件(*.json.bak)留存; 6. **幂等**:重复启动不重复迁移(SQLite 有数据即跳过);迁移失败不破坏原 JSON; 7. **JSON 废弃**:迁移成功后 store.json / store.market.json 不再读写(旧文件保留为备份,新数据只写 SQLite); 8. **策略定义位置**:策略(id/name/visible/order)仍存 DSH settings,设置页交互不变; 9. **不回归**:持仓/策略/行情/连接配置/交易记录等现有功能正常; 10. **测试隔离**:回归测试在独立数据目录(ODL_TEST_DATA_DIR)执行,真实数据目录无写操作(技术约束-011)。 ## 验收方法 - 独立数据目录(ODL_TEST_DATA_DIR)构造旧 JSON 数据(store.json / store.market.json)→ 启动插件 → 确认自动迁移完成、SQLite 数据与 JSON 一致、备份文件留存; - 反复重启确认幂等(不重复迁移、数据不丢); - 通过 API 验证份额 CRUD 与行情读写行为与改造前一致(对照迭代 04/05 回归); - 手动核对真实数据目录:迁移后 store.json / store.market.json 不再更新,store.db 为数据源; - 回归:全部持仓 / 策略 / 行情 / QMT 连接配置 / 交易记录正常。 ## 验收目标 - 存储引擎替换闭环:JSON → SQLite(迁移正确 + 幂等 + 备份),对外行为零变化; - 为复杂查询/多数据集统一存储铺路(strategy_holdings 持仓生命周期表 + market_quotes_cache 就绪,holding_id 可作为 trades 关联锚点,trades 表 R-007 再建); - 设计约束同步落地:技术约束-012 与数据存储设计.md 更新为 SQLite 设计。