|
|
@@ -1756,6 +1756,20 @@ target MIN(start_time) 折平 ⇒ 60 + 60 = 120.00,两行都核完,不报
|
|
|
要判"合并还是丢弃",必须同时核**该活动的 signed 行数 / `activity_money` 合计**
|
|
|
(合并 ⇒ 2000,丢弃 ⇒ 1000)。处置口径需迁移 owner 定,本文件只给数。
|
|
|
|
|
|
+### `to` 的口径(端点 17;是**措辞**问题,不是代码 bug)
|
|
|
+
|
|
|
+1. **纯日期 `to` ⇒ 当日 00:00,区间止于该 00:00 ⇒ 不含该日**。要含当日必须传次日或 `T23:59:59`。
|
|
|
+2. 端点 17 **有意不归一 `to`**(`bill_handler.go` 直接用 `parseTimeParam`);
|
|
|
+ 端点 60 则有 `normalizeToUpperBound`(纯日期 → 次日 00:00)。**两者不对称,不得互相推广。**
|
|
|
+3. legacy 侧 `create_time` 在临时表里是 `VARCHAR(100)`(`CREATE TEMPORARY TABLE temp_user_expense_log`),
|
|
|
+ 与 VARCHAR 入参做**字典序**比较 ⇒ 纯日期与 `00:00:00` 对结余列**同效**(都不含当天),`23:59:59` 才含;
|
|
|
+ 而「当期发生额」用 `BETWEEN`(含等号)⇒ `t=to` 落在消费/充值类型时,两种写法会差一笔。
|
|
|
+ RS-5 的 D 取 `type=200` 正是为隔离这一点。
|
|
|
+4. ⚠ **时区前提**:target 的 `time.Parse("2006-01-02", …)` 得到 **UTC 零点**,而 DB 按 `loc=Local` 读。
|
|
|
+ 仅当进程时区 = UTC 时,"两侧一致、都不含当天"才成立;dev 是 **+08:00**,
|
|
|
+ target 的边界实际晚 8 小时(实测 `to='2026-03-31'` 时 `endBalance` 110.00 vs legacy 60.00,
|
|
|
+ 整月窗口 `recharge` 0.00 vs 100.00)。⇒ **F30 的"两侧一致"需按部署时区限定**,见下节实测。
|
|
|
+
|
|
|
### `to` 的格式敏感性:一次只读测量(RS-5 之后追加)
|
|
|
|
|
|
**问题**:RS-5 里那句注释(dump 的 `create_time` 是 VARCHAR、`BETWEEN` 是字符串比较)会不会意味着
|