刘启涛

CASE 02 · 内部数据平台

长期运行

SKC 生产看板

看板难的从来不是画图表,是先把口径钉死 —— 款号和 SKC 不是一回事,货季和财年也不是,这两组词不定义清楚,每张图算出来的数都不一样。

职责范围
领域建模 · 后端开发 · 权限设计 · 测试与部署
技术环境
Python · FastAPI · MySQL · 前端页面
当前状态
生产环境常驻运行

01 / CONTEXT

同一个问题,三个人能报出三个数

上游有多条自动化链路在往库里写生产记录,业务同事想知道「这个货季做了多少款」,却拿不到一致的答案 —— 因为「款」有时按 9 位款号算,有时按 12 位 SKC 算;而「货季」又常被人用财年代替,可同一个财年里其实装着两个货季。

目标不只是做一个能看的页面,而是让这个页面成为口径的唯一出处:同一个指标只有一种算法,边界情况有明确归属,任何人看到的都是同一个数。

02 / MY ROLE

我的工作:把业务规则从代码里提出来

A

领域建模

写一份领域上下文文档,定义术语、列出不变量、划清系统边界,让规则先于实现存在。

B

后端实现

基于 FastAPI 与 MySQL 实现统计、筛选、备注、图片与计划量管理。

C

权限体系

设计按品牌与货季划分的数据范围,并让所有读写路径统一服从同一套判定。

D

质量与运维

搭四层自动化测试与持续集成,编写部署与运维手册,让它能长期无人值守地跑。

03 / PROCESS

从术语表到常驻服务

  1. 01

    先定义,再写代码

    把款号与 SKC、货季与财年这些天天混用的词逐个钉死定义,写成一份领域上下文文档,再开始做功能。

  2. 02

    不变量清单

    把「不能发生什么」写成七条显式不变量,例如同一个 SKC 全局只归属一个货季,一旦登记不许在别的货季复用。

  3. 03

    脏数据不静默兜底

    无效编码一律不许截断、补齐或去空格后入库。历史脏数据先完整隔离,再从在线表移除,而不是就地改对。

  4. 04

    数据范围权限

    按品牌与货季给账号设可见范围,列表、统计、导出、图片和写操作一律服从。自动注册只能产生只读账号。

  5. 05

    四层测试与部署

    静态检查、单元测试、连真实数据库的集成测试、浏览器冒烟测试四层并行,注册为系统服务常驻运行。

上游 RPA 写入生产流程产生的记录MySQL口径统一的事实表不变量校验脏数据不静默兜底FastAPI聚合 · 计算数据范围权限按角色过滤看板与导出前端 · Excel
上游 RPA 写入生产流程产生的记录MySQL口径统一的事实表不变量校验脏数据不静默兜底FastAPI聚合 · 计算数据范围权限按角色过滤看板与导出前端 · Excel

口径先于代码:款号与 SKC 不是一回事,货季与财年也不是。

04 / SCALE

工程规模

Python 文件
111
显式领域不变量
7
层自动化测试
4

数据源:仓库内该子项目的文件统计、领域上下文文档与持续集成配置。本页描述工程规模,不列业务运营数据。

05 / REVIEW

写下来的规则,比记在脑子里的规则便宜

最有价值的决定

先写领域文档再写功能。后来每次口径争议,都能直接翻到那一条,而不是重新讨论一遍。

刻意选的笨办法

宁可让计算失败也不猜:跨年度统计缺少官方日历时直接报错要求补齐,而不是自行推断节假日。

下一步

把仍跟着代码发版的货季规则抽成独立的规则注册表,让口径调整不必重新发布整个服务。