交付出件箱

← 返回出件箱

接力档 · 渠道机构驾驶舱大屏(双屏)

2026-08-19 收口 · 取代 handoff-cockpit-20260815.md(已过期)
状态:方案 v1.2 定稿,等长官拍 D9/D10/D11 + 等摸底 SQL。长官明确"先别开工"。


一、开局必读五条

  1. 不写业务代码。 长官原话:"先别开工,我现在要的是数据报告、调研报告"。本项目至今零代码改动。
  2. 不提工期排期。 长官明确:"我需要的是调研报告,并未到实施的方案(比如具体工期什么的)"。
  3. 报告写法:每块先给「结论:」一句话 + 表格承载细节 + 砍论证过程。
  4. 交付双投递:正本 ~/reports/ + sg devshare -c 'cp ... ~/reports/shared/';长官给公网裸链 https://dev-tokyo.tail3912a6.ts.net/<文件名>(根目录即文件名,无 /reports/shared/ 前缀)。别在云机 curl 外网验证(返 000 是白名单设计)。
  5. 图表库:大屏用 echarts(echarts/core + 按需 use(),禁全量禁 CDN),其余一律 recharts。

二、正本是哪份(只看这三个)

文件 是什么 状态
dual-cockpit-proposal-v1.2-20260819.md 方案正本,双屏 + 四条修订 ✅ 给长官看这份
cockpit-a-mockup-20260818.html A屏展示版原型 ✅ 已渲染验过,但只到 v1.1 状态
cockpit-b-mockup-20260818.html B屏管控版原型 ✅ 同上

🔴 两张图不含 v1.2 的四条改动(时间胶囊 / 模块分色 / 省名 / 渠道树)。长官发话才出新图,且必须先拍 D9、D10,否则渠道树标题和省名写法要返工。

版本链(别翻错版本)

geo-cockpit-research v1/v2/v3(08-14~15) → cockpit-research-20260815.md(12模块调研定稿) → dual-cockpit-proposal-20260818.md(v1.0 双屏) → v1.1-20260819(补 5 个缺口) → v1.2-20260819(四条增量修订 · 现行)

调研定稿 cockpit-research-20260815.md 里的 12 模块设计仍然有效,v1.1/v1.2 都是在它上面加,没推翻。


三、已定 vs 待拍板

已定(长官拍板,别再列成待确认)

九条口径规则(待续费/未激活/永久席位/活跃四级/不新增口径/未定位必上屏/续费率双口径/标准七大区/区域管理员本期不做)—— 见调研定稿第四节,v1.1/v1.2 全部沿用。

# 决策 定论
D1 B屏地图续费状态点色 随 D7 了结:无点位无点色,状态放下钻清单徽章
D7 是否采集机构坐标 ✅ 不采集(08-18 长官拍板)。A屏光点=登录 IP 归属地;B屏=省级色块

待拍板(8 个,按急迫度排)

# 决策 我的推荐 不定的后果
D9 渠道树金额口径:①下单 / ②到账 / ③渠道结算 ②到账额 三个数差很大;选③则该视图时间筛选必须脱钩全局改按半月账期。卡住出图
D10 省名用一字简称(粤)还是去后缀短名(广东) 短名 卡住出图
D11 A屏定位从「零交互」放宽为「仅时间维度可交互」 接受(含60s自动回落) 与 v1.0/v1.1 定位表述有出入
D8 B屏是否展示结算域操作留痕 视权限成本定 audit_logs 生产账号无 SELECT,要展示得单开只读账号/视图
D2 深色科技风两屏统一 统一
D3 A屏是否显示机构名 不显示
D4 深色令牌 v1 色板 按 v1.1 第五节定稿 改色必须重跑校验脚本
D5 A屏预警/异常计数是否对外显示 做成开关,默认隐藏
D6 A屏热力口径 近7日(B屏维持今日)

四、代码事实(本轮已 grep 实证 · 下一会话别重查)

基线:worktree HEAD 8f92bd1b(2026-08-12),落后 origin/test 641 个提交。行号可能漂移,符号名不会。

4.1 A屏光点链路(五段全通,零补录)

环节 出处
登录事件表 app/models/audit.py:23 AuthAuditLog → auth_audit_logs,event_type CHECK 5 类含 login_success
IP 列 app/models/audit.py:37 ip = Column(INET, nullable=True);login_attempts 同款 :74
机构端登录也落这表 app/api/seat_auth.py:173 调 auth_service._write_audit(),写入体 app/services/auth_service.py:498
事件→机构 auth_audit_logs.user_id → app/models/user.py:58 linked_org_id;CHECK 约束 :142 保证 org_seat 必有;渠道 channel_id 见 :143
真实公网 IP 取值 request.client.host(seat_auth.py:135);生产 uvicorn 带 --proxy-headers --forwarded-allow-ips *(deploy/Dockerfile.api:67)+ nginx XFF(deploy/nginx/chat.tongban.love.conf:108-109);生产 compose 用的正是这份(deploy/docker-compose.prod.yml:78)
同库 结算表与核心同库 doctor_ai_brain,账号 settlement_rw(deploy/docker-compose.prod.yml 注释 + settlement/db/grants.sql)

4.2 五条硬约束(做设计时绕不开)

# 约束 出处
1 登录审计只留 6 个月,每天 02:00 清 → 时间筛选器选"近12个月"时地图必须降级为6个月 app/models/audit.py:24
2 审计写入 best-effort,异常被吞 → 不能当权威计数,KPI 必须复用 app/api/admin_activity.py 现有活跃口径 app/services/auth_service.py:508-509
3 ip 可空 → 光点必须处理 NULL,计入"未定位" app/models/audit.py:37
4 无 logout 事件 → 在线人数做不了,只能活跃四级 app/models/audit.py:47-49
5 结算域 audit_logs 生产账号只有 INSERT 没有 SELECT settlement/db/grants.sql:48(:59-60 明确不转属主)→ D8

4.3 渠道树数据链路(v1.2 新验,全现成)

项 出处(settlement/backend/app/models/settlement.py)
渠道层级 channel_level(:136) + parent_channel_id 自关联(:137)
机构挂靠 OrgSignupProfile.channel_id NOT NULL(:205),索引 :196
金额①下单 amount_due(:570) + source_channel_id(:566),时间锚 created_at(TimestampMixin :77)
金额②到账 PaymentConfirmation.confirmed_amount(:368) + confirmed_at(:370)
金额③结算 SettlementStatement.total_amount(:460) + channel_id(:454) + period_start/end(:458,459),半月账期
分成比例 rate_percent(:126) / expansion_(:130) / renewal_(:133)
🔴 三类渠道不是两类 level=1 / level=2 有父 / level=2 无父——业务代码两处显式分了三类:services/settlement/settlement_statements.py:970-974、platform_mobile_paging.py:118-122。树上必须单列「未挂靠二级渠道」

4.4 四大缺口(08-15 实证,结论未变)

机构地理位置(D7 已定不采集,改用登录 IP)/ 在线状态(无心跳,用活跃四级替代)/ 强制下线(席位改 device_id 即踢,管理员和渠道需新建且必须同时废 refresh)/ 数据行级权限(核心侧无,结算侧渠道隔离已在生产跑,settlement/backend/app/auth/zhaoyang_permissions.py:293-315,可直接沿用)。


五、唯一的实质阻塞

摸底 SQL 至今无人执行(08-14 挂到今天)。云机不连生产库,必须由有生产库权限的同事跑。


六、下一步(三件,顺序不能换)

序 事项 谁
1 看 A/B 两张原型图,拍 D9 / D10 / D11 长官
2 按 v1.2 重出两张原型图(4 处结构改动:时间胶囊 / 模块分色 / 省名 / 渠道树) 下一会话,等长官发话 + D9/D10 已定
3 跑摸底 SQL 有生产库权限的同事

七、环境注意

项 说明
写出件箱 sg devshare -c 'cp ~/reports/x.md ~/reports/shared/'(进程没继承组,直接 cp 会 Permission denied)
渲染通道 node ~/render-env/browse.js <html> --out /tmp/x --width 1440 --check(无 root,@sparticuz/chromium + 自有 fontconfig CJK)。内存只有 3.4G,别并行渲染,跑前 free -m
渲染假阳性 --check 报的 DIV.mapbox 溢出是雷达环装饰(position:absolute + pointer-events:none),属规范 3.2 要排除的假阳性;同一文件两次渲染结果会不同(动画帧位置),别当成 bug 去改
/tmp 有别的 dev 的文件 /tmp/diag.js 属 dev2,heredoc 写不进去会静默失败。自己的临时脚本写 ~/tmp-diag/
改图前 先 cp 备份到 /tmp(~/reports 不是 git 仓库,没有版本历史);改完比 div 开闭差值有没有变(本项目两张图基线都是 0)
当前 worktree bridge-cse_015JZxr4M7bzyAzVybMMqYrC,分支 worktree-bridge-cse_015...,工作区无代码改动,只有 reports-out/ 未跟踪
不能做的 本机不连生产库、不跑全量 e2e,数据类结论一律标"未实测"

本项目全程零代码改动,产出为纯调研/方案文档。