diff --git a/.gitignore b/.gitignore index 2555c47..e23a8e0 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ logs/ # PyCharm 工程文件目前已跟踪; 如决定不入库, 取消下行注释并执行: # git rm -r --cached .idea && git commit -m "untrack .idea" #.idea/ + +# 本地临时: Cowork 会话搬运产物, 可整目录删除 +_to_delete/ diff --git a/README.md b/README.md index 5dfd48c..5c0d168 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,36 @@ | `QMT_INTERFACE_REQUIREMENTS.md` | 与 QMT 侧下游系统协商用的数据与接口需求清单(含资金快照、统一指令通道建议 DDL),按编号答复回填 | | `ddl_pms_v1.sql` | PMS 全部自有表建表语句(153 代理侧,10 张) | | `config/settings.py` | 配置(基础设施键名对齐 bionic;业务参数为初值,页面调参持久化到 `pms_runtime_param` 后优先) | -| `app/core/sizer.py` / `app/core/cushion.py` | 首批核心纯逻辑:批次拆分与一手合并、组合约束、风险披露;摊薄成本、安全垫状态机、保垫触发、卖出核销次序 | -| `scripts/test_core_units.py` | 上述模块的实机单测(`python scripts/test_core_units.py`,零外部依赖,14 例) | + +## 模块地图 + +``` +app/ + core/ 纯逻辑, 零外部依赖, 可单测 —— 系统的算数与纪律都在这里 + sizer.py 批次拆分与一手合并 / 组合约束 / 风险敞口披露 + cushion.py 摊薄成本 / 安全垫状态机 / 保垫触发 / 卖出核销次序 + command_spec.py 命令目录(A/B/C 全量 27 类) / 参数校验 / 双状态机 / 冲突识别 + planner.py 方案生成器: 降仓凑额四档 / 升仓 / 建仓 / 清仓 / 行业 / 撤单 + recon.py 成交认领与入账映射 / 对账差异与修正 / 除权检测 / T+1 可用量 + tradedays.py 交易日历: 调度守卫与执行窗口计算 + db/session.py 三库连接 + **严格单表访问守卫** (JOIN/逗号连表/跨表子查询一律拒绝) + repo/ 单表数据访问: pms_repo (自有 10 表) / downstream_repo (下游只读三表) + services/ 编排层 + param_store.py 运行参数中心 (表值优先于 settings 初值, 页面调参即时生效) + portfolio.py 组合快照 (账本+行情+行业 → 方案/规则闸/页面的统一输入) + command_service.py 命令下达→校验→冲突→生效/规划→进度推进→撤销 + ledger_service.py 成交回放 / 对账 / 除权 / 盘前 / 日终结算 / 运营日报 + market.py 行情 (Redis db13) 与参考位 (决策系统主口径 + 兜底自算) + industry.py 行业划分可插拔适配器 (custom_table / gp_stock_category / 停用) + web/ FastAPI + 单页 (Vue3 + ElementPlus),页面四块 + 运维/日报抽屉 + scheduler.py Celery beat 调度总表 (设计 §10 八个调度位 + 三条守卫) +scripts/ + run_tests.py 一次跑完全部单测 (见下方「Docker 部署」) + test_core_units.py 仓位与安全垫核心逻辑 14 例 + test_batch2_units.py 命令 / 方案 / 回放对账 纯逻辑 35 例 + test_wiring.py 装配自检: 服务层→核心→落表 全链路 (内存桩) 18 例 + check_db.py 实机连通性与表结构自检 (需真实 .env) +``` ## 三条铁律 @@ -25,29 +53,59 @@ ## Docker 部署(项目统一以容器方式构建运行) -服务共用一个镜像:`pms-web`(管理页面,端口 38100)+ `pms-beat` / `pms-worker`(Celery 调度与执行,挂在 `sched` profile 下,调度器代码就绪后启用)。 +服务共用一个镜像:`pms-web`(管理页面,端口 38100)+ `pms-beat` / `pms-worker`(Celery 调度与执行,挂在 `sched` profile 下)。 ```bash # 服务器首次部署 git clone <仓库地址> && cd tradingSystem cp .env.example .env && vim .env # 填入真实连接串 (.env 不入库) docker compose build # 默认走清华 PyPI 镜像; 可 --build-arg PIP_INDEX_URL=... 覆盖 -docker compose run --rm pms-web python scripts/test_core_units.py # 构建验证: 应输出 ALL PASS (14 cases) -docker compose up -d # 当前仅启动 pms-web -curl http://127.0.0.1:38100/health # 健康检查 + 配置装载自证 -# 调度器代码就绪后 -docker compose --profile sched up -d +# 构建验证 (不连库, 秒级): 应输出 ALL SUITES PASS +docker compose run --rm pms-web python scripts/run_tests.py +# 实机自检 (连库, 需 .env): 三库连通 + pms_* 十表 + 下游表结构 + 行情 Redis +docker compose run --rm pms-web python scripts/check_db.py + +docker compose up -d # 管理页面 +curl http://127.0.0.1:38100/health # 健康检查 + 配置装载自证 + 库连通自证 +# 浏览器打开 http://<服务器IP>:38100/ → 参数设置 / 命令台 / 持仓与账本 / 提议确认 + +docker compose --profile sched up -d # 启用调度器 (beat + worker) +docker compose logs -f pms-beat pms-worker # 日常更新 git pull && docker compose build && docker compose up -d ``` -基础镜像 `python:3.11-slim` 拉取慢时,先给服务器 Docker 配置 registry 镜像加速。日志落 `./logs`(已挂载卷);容器时区 Asia/Shanghai。 +基础镜像 `python:3.11-slim` 拉取慢时,先给服务器 Docker 配置 registry 镜像加速。日志落 `./logs`(已挂载卷);容器时区 Asia/Shanghai。管理页面的前端资源(Vue3 / ElementPlus / axios)走 unpkg CDN,浏览器需能访问外网;若内网隔离,把页面头部三行 ` + + + + +
+{{ opsResult }}
+ {{ JSON.stringify(report.report||{}, null, 2) }}
+