5.9 KiB
Session: 2026-06-08 16:08:24 GMT+8
- Session Key: agent:main:feishu:direct:ou_e63ce6b760ad39382852472f28fbe2a2
- Session ID: d4693f57-ecd6-4d66-b7e4-5d69f293dc60
- Source: feishu
Conversation Summary
user: https://makee-interactive.feishu.cn/sheets/NoZqsFi47hIOHEt9j8WcfRtbnug这个表是你创建的,你应该具有完整的读和写的权限,现在我们要针对sheet“小龙”“吴迪”“成都”“订单汇总”,创建一个脚本。 首先,对于sheet“小龙”“吴迪”“成都”,我需要你读取E列的手机号,然后通过XXTEA加密,去用户表里面通过加密手机号进行关联匹配,然后填上H列到V列的数据,第V列为操作更新的时间。 然后将上述三个sheet里面有下单的用户,整理到sheet“订单汇总”中。 有任何问题可以向我提。先不要动表格,先生成脚本,并且向我解释表格里面每一列你的理解和计算口径。 assistant: Let我先读取表格结构和现有的加密脚本,理解清楚后再动手。
assistant: Let我先读取四个 sheet 的表头和几行数据,理解列结构。
assistant: 现在我对表格结构有了清晰的理解。让我再看看成都 sheet 的数据和现有的 phone_encrypt 依赖。
assistant: 现在我已经完整理解了表格结构和现有逻辑。让我先确认一下 XXTEA 加密依赖是否可用,然后生成脚本。
assistant: 现在我对表格结构、现有逻辑和加密方式都有了完整理解。让我生成脚本。
assistant: 文件被截断了,让我继续完成脚本。
assistant: 脚本被截断了,让我重新完整写入。
assistant: 脚本已生成并通过语法检查。下面是完整的列说明。
📊 表格列结构说明
四个 sheet 的 A~V 列结构完全一致(共 22 列),订单汇总额外有 W/X 公式列。
👤 手填列(销售手动填写,脚本不动)
| 列 | 名称 | 说明 |
|---|---|---|
| A | 销售归属 | 销售姓名:小龙 / 吴迪 / Tom / Bob |
| B | 微信昵称 | 用户微信昵称 |
| C | 进线日期 | 线索进入日期,格式如 6月7日,脚本会解析为 2026-06-07 用于日期比较 |
| E | 手机号 | 11 位明文手机号,脚本的核心输入 |
| F | 用户年级 | 如"大班""一年级" |
| G | 课史/跟进 | 课程历史/跟进备注,脚本不动此列 |
🤖 自动列(脚本计算填写)
| 列 | 名称 | 计算口径 |
|---|---|---|
| D | 体验节数 | 从 bi_user_course_detail 统计 expire_time IS NULL(体验课)的记录数。只补空,不覆盖已有值 |
| H | 用户ID | E 列手机号 → XXTEA 加密 → bi_vala_app_account.tel_encrypt 精确匹配 → 取 id。查不到留空 |
| I | 注册日期 | bi_vala_app_account.created_at,格式 YYYY-MM-DD。只补空 |
| J | 下载渠道 | bi_vala_app_account.download_channel,经中文映射表转换(如 Apple App Store → 苹果)。只补空 |
| K | 是否下单 | 三个条件同时满足才写"是":①有支付成功订单 ②非全额退清 ③下单日 ≥ 进线日期。全额退清则清空 |
| L | 下单日期 | 最近一笔订单的 pay_success_date,格式 YYYY-MM-DD |
| M | 成交渠道 | 订单的 key_from 原始值(如 sales-adp-bj-wd-0、app-active-h5-0-0) |
| N | 产品 | 通过 goods_id 映射商品名(如 瓦拉英语level1+2、瓦拉英语年包) |
| O | 下单金额(GMV) | 该用户所有订单 pay_amount_int 之和 ÷ 100(元),含退费。0 留空 |
| P | 退款金额 | 该用户所有退费成功(status=3)的 refund_amount_int 之和 ÷ 100(元),取整。0 留空 |
| Q | 实际收入(GSV) | GMV − 退款金额。0 留空 |
| R | 激活课程 | 从 bi_vala_seasonal_ticket 取 season_package_level,A1→A1体验课,A2→A2体验课 |
| S | 当前行课进度 | 最近完成的课时,格式 L1-S0-U00-L03(从 bi_level_unit_lesson 映射) |
| T | 最近行课时间 | 最近完成课时的日期,格式 YYYY-MM-DD |
| U | 累计学习时长(min) | 所有组件 interval_time 求和 ÷ 60000(分钟) |
| V | 更新时间 | 脚本执行时间,格式 YYYY-MM-DD HH:MM:SS |
订单汇总额外列
| 列 | 名称 | 说明 |
|---|---|---|
| W | 渠道归属 | 🔵 公式列,自动判断:销转 / 达人 / 端内 / 直购 |
| X | 有效成单 | 🔵 公式列,1=计单,0=全额退 |
🔧 脚本核心规则
- E→H:XXTEA 精确匹配,查不到留空(不用前三后四模糊匹配)
- D/I/J 只补空:已有值不覆盖
- K=是:有订单 + 非全额退清 + L(下单日) ≥ C(进线日期)
- 全额退清:GMV = 退款金额 且 > 0 → K/O/P/Q 全部清空
- O/P/Q:值为 0 时留空不写
- G 列不动
📁 脚本位置
scripts/sales_leads_full_refresh.py
运行方式:
python3 scripts/sales_leads_full_refresh.py
有几个问题想确认:
-
订单汇总的写入方式:目前设计是全量覆盖(每次运行把 A~V 列从第 3 行开始全部重写),W/X 公式列不动。这样每次运行后订单汇总就是最新的下单用户列表。这个逻辑对吗?还是需要追加(只加新的,不删旧的)?
-
日期解析:C 列进线日期目前是
6月7日这种格式,脚本按当年解析为2026-06-07。跨年场景(如 12 月→1 月)需要特殊处理吗? -
订单汇总中同一用户多行:如果同一个手机号在三个 sheet 中都出现且都下单了,订单汇总会出现多行(每个销售归属一行)。这是期望行为吗? user: 1、全部覆盖 2、不需要特殊处理,就都按照当年处理 3、是的 assistant: 好的,三点都确认了,脚本逻辑完全对齐。现在可以运行吗? user: 脚本名字发给我 assistant:
scripts/sales_leads_full_refresh.py