116 lines
5.9 KiB
Markdown
116 lines
5.9 KiB
Markdown
# 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=全额退 |
|
||
|
||
---
|
||
|
||
## 🔧 脚本核心规则
|
||
|
||
1. **E→H**:XXTEA 精确匹配,查不到留空(不用前三后四模糊匹配)
|
||
2. **D/I/J 只补空**:已有值不覆盖
|
||
3. **K=是**:有订单 + 非全额退清 + L(下单日) ≥ C(进线日期)
|
||
4. **全额退清**:GMV = 退款金额 且 > 0 → K/O/P/Q 全部清空
|
||
5. **O/P/Q**:值为 0 时留空不写
|
||
6. **G 列不动**
|
||
|
||
## 📁 脚本位置
|
||
|
||
`scripts/sales_leads_full_refresh.py`
|
||
|
||
运行方式:
|
||
```bash
|
||
python3 scripts/sales_leads_full_refresh.py
|
||
```
|
||
|
||
---
|
||
|
||
有几个问题想确认:
|
||
|
||
1. **订单汇总的写入方式**:目前设计是**全量覆盖**(每次运行把 A~V 列从第 3 行开始全部重写),W/X 公式列不动。这样每次运行后订单汇总就是最新的下单用户列表。这个逻辑对吗?还是需要**追加**(只加新的,不删旧的)?
|
||
|
||
2. **日期解析**:C 列进线日期目前是 `6月7日` 这种格式,脚本按当年解析为 `2026-06-07`。跨年场景(如 12 月→1 月)需要特殊处理吗?
|
||
|
||
3. **订单汇总中同一用户多行**:如果同一个手机号在三个 sheet 中都出现且都下单了,订单汇总会出现多行(每个销售归属一行)。这是期望行为吗?
|
||
user: 1、全部覆盖
|
||
2、不需要特殊处理,就都按照当年处理
|
||
3、是的
|
||
assistant: 好的,三点都确认了,脚本逻辑完全对齐。现在可以运行吗?
|
||
user: 脚本名字发给我
|
||
assistant: `scripts/sales_leads_full_refresh.py`
|