OPERATIONS MANUAL

运营后台使用说明

后台在 /admin。本页按实际操作的先后顺序写: 拿到一批新节目单 → 导入 → 看异常 → 处理没归类的值 → 核对结果 → 导出。 出问题时的排错见最后一节。

01登录与账户

用管理员账号登录。口令请在「账户管理」里改掉,不要用默认口令。

  • 可以建子账户给其他人用;删除账户时不能删自己。
  • 所有写操作都会留痕,可在「审计日志」里按操作者 / 动作筛选。

02拿到一批新节目单,我要做这几步

先看「异常清单」,确认这批数据能不能直接导
它会列出这批里重复的条目、缺失的字段,以及需要你确认的别名候选。 先解决这里报的问题,再提交 —— 导完再回头清理代价大得多。
用「批量导入」粘贴或上传,先预览再提交
表头随门类变化。一批里混了多种门类时,用表头列逐行标注(见下一节规则)。 预览页会显示将要写入多少条、检测到哪些问题。
导入后立刻看「维度字典」的未匹配告警
如果这批引入了新剧场 / 新演出队 / 新曲种,它们会列在那里, 带着原始写法和出现次数。这一步是数据可信的关键,下一节详说。
去数据中心核对几个数字
看首页四个大数字和数据中心是否合理跳变。异常跳变通常意味着上一步有遗漏。
需要给外面的话,导出 CSV
前台各榜单都能直接导出,不用手抄。
为什么第 3 步不能跳:新出现的写法如果没有归一,会让同一个地方在统计里被算成两个 —— 于是「剧场数」在不同页面给出不同答案,而且没人知道哪个才对。 现在系统在写入时会自动按已有别名填编码;填不上的会落进「待归类队列」等你处理, 不会静默留空。

03导入时这些规则要记住

规则说明
批级门类 导入时选「相声 / 鼓曲 / 评书」作为整批的默认门类(目前只有这三类, 没有「戏剧」—— 那是字典里预留但库中无数据的值,别被下拉以外的地方误导)。
行级门类 一批里混了别的门类时(很常见),用表头列 类别 / 演出门类 / art_form 逐行标注, 优先级高于批级。
重复检测 按「门类 + 日期 + 场次 + 序号 + 剧场 + 演出队」生成唯一编号, 所以跨门类的重复也能识别。重复会被列进异常清单。
缺曲种报警 只在「本批含曲种列、且部分行已填」时才报警。 模板本来就没有曲种列、或者整列都没填时不报 —— 避免满屏噪音反而让人忽略。
曲种本来就是可空的 相声、评书的曲种就是各自的门类,不往下细分,所以全库绝大多数字段为空是 正常状态,不是数据缺失。曲种分布按「有标注就用标注、没标注按门类归位」统计, 不会产生「未分类」。 真正要留意的是鼓曲:鼓曲场次应当填到细分曲种(京韵大鼓、单弦…), 鼓曲里出现空白或只写了「鼓曲」,才值得去补。
批量编辑适合改已有数据:按「演出队 + 日期 + 场次」整批载入,像 Excel 一样在格子里改, 支持把某列统一填一个值,最后一次性保存。 人名多值用顿号「、」分隔。
整批是一个事务 —— 任一行出错会整体回滚,不会写进去一半。所以大批量编辑出错时, 不要怀疑「是不是存了一半」,直接改好重来即可。

04「未匹配原始串」怎么处理

后台 → 维度字典

这是运营最需要盯的一件事。导入新数据后若出现新剧场 / 新演出队 / 新曲种, 会在这里列出原始写法与出现次数。含义是:系统不知道这个写法对应哪个规范名。
  1. 先判断它到底是不是新东西。如果是同一地点的另一种写法 → 补一条别名映射即可; 如果确实是全新的场所 → 需要在维表里新建。
  2. 补映射时只改别名表,不用动任何业务代码。 补完后待归类队列会自动清掉这一条。
  3. 如果是脏数据(例如把场馆名误填进城市字段),以维度字典里的 dim_city 为准 —— 那里的归并结果是权威的。
怎么判断「归并之后」对不对:运行 python3 DB/verify_dims.py。它会同时给出原始串数 / 编码数 / 归并后数三个值。 正常情况下后两个应一致;不一致说明有映射没生效。
系统现在会自动帮你做一部分:新数据写入时会按已有别名自动填维度编码, 填不上的自动进「待归类队列」。 所以映射缺失不会再变成静默的空值 —— 它会明确地出现在这个列表里等你处理。

05日常要改的东西,在哪个模块

模块什么时候用
人物资料改头衔、头像、介绍、标签、外部链接,或修改演员编号。有 网页版 与 H5 两种外链位;留空的字段前台不显示
单场节目只改一场时用(按 ID 或条件载入),不用走批量流程
批量导入新增数据。粘贴表格或上传文件,先预览再提交
批量编辑改已有数据。按「演出队 + 日期 + 场次」整批载入
节目管理合并同名的不同写法(别名归一),或补作品的外部链接
维度字典看维表内容 + 未匹配原始串告警(上一节的重点)
异常清单导入前的校验与异常预览,含待确认的别名候选
数据看板跨维度聚合统计,用来快速核对
审计日志回溯「谁在什么时候改了什么」
账户管理改口令 / 建子账户 / 删账户

06导入完怎么确认是对的

系统的口径校验是自动的。同一个概念在不同来源(人物页 / 数据中心 / 底层统计) 必须算出同一个数,对不上会直接报错,而不是悄悄显示一个看起来合理的值。
python3 DB/check_invariants.py 会打印每一条的比对结果, 不一致时给出差多少、差百分之几。没跑过的话,运维或开发可以帮你跑。

07导出与对外提供

给外部用数字时的口径提醒:「搭档对数」有两种算法(只算逗捧 / 算所有角色同台), 差别很大。对外给数时务必说清用的是哪种,否则对不上号最容易引发怀疑数据有误。

08出问题了怎么查

症状先查什么
页面打不开,提示「加载失败」这是接口异常,不代表数据不存在。页面会显示后端给的错误摘要,把那行字发给运维即可
页面显示「未找到该人物 / 该节目」先在发现页搜一下确认它是否真的存在(可能名字写法不同)
某个页面提示「数据缺失」依赖的视图或迁移没跑,找运维
导入报「重复」按「门类 + 日期 + 场次 + 序号 + 剧场 + 演出队」核对,通常是同一场导了两次
导入后人物/剧场数量暴涨多半是新写法没归一,见 维度治理
某页面数据明显不对先别改数据 —— 让运维跑口径校验,确认是「某两处算得不一样」还是「数据本身错了」
一个重要区别:页面显示「加载失败」 = 系统出问题了(要报修); 显示「未找到」 = 系统认为它不存在(先确认是不是找错了)。
这两种以前会被混成同一个提示,导致真故障被当成「数据本来就没有」而耽误。 现在已区分开。
反馈渠道:发现数据错误,通过公众号或现场反馈即可。 指出具体是哪一天、哪一场、哪个名字,我们好去核对原始节目单。