소스 검색

fix:修复SIM卡信息中的月份标签格式不兼容问题

Jerry Liang 1 개월 전
부모
커밋
6028b1ad23
2개의 변경된 파일과 18개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 1
      deploy/kiro/skills/fwh-toolbox-workflow/SKILL.md
  2. 17 2
      deploy/kiro/skills/fwh-toolbox-workflow/references/data-direct-query.md

+ 1 - 1
deploy/kiro/skills/fwh-toolbox-workflow/SKILL.md

@@ -30,7 +30,7 @@ MCP 工具按访问层级分为五类,**选择工具时严格遵循以下优
 
 - **站点标识 SN**:设备序列号,多数站点工具的主键。格式见 `util_parse_sn`。
 - **SIM 标识**:SmartHub 用 `GICCID`(19 位),Acceleronix 用 `ICCID`。
-- **日期格式**:`yyyy-MM-dd`;时间范围类为 `yyyy-MM-dd HH:mm:ss`;SIM 月份为 `yyyy-MM`,Acceleronix 批量用量月份为 `YYYYMM`。
+- **日期格式**:`yyyy-MM-dd`;时间范围类为 `yyyy-MM-dd HH:mm:ss`;SIM 月份 service 层用 `yyyy-MM`,Acceleronix 批量用量月份为 `YYYYMM`。**注意**:直查 `data_mongo_*` 时,`SimCardManage`/`SimCardMonthlyData` 的 `month` 字段库内存在 `yyyy-MM` 与 `yyyyMM` 两种格式并存,按月过滤/分组须兼容两者(写法见 `references/data-direct-query.md` 的「month 字段双格式」)。
 - **分页**:`page` 从 1 开始,`size` 默认 10~20(各工具不同,见清单)。
 - **任务 ID**:批量下载、站点分析等任务 ID 为 MongoDB ObjectID hex 字符串。
 

+ 17 - 2
deploy/kiro/skills/fwh-toolbox-workflow/references/data-direct-query.md

@@ -51,16 +51,31 @@ find/export 示例:
 
 **`SimCardManage`(SIM 卡,`_id` = GICCID 19位)关键字段**:
 - `_id`(GICCID,19位)、`status`(UNKNOWN/NOT_ACTIVATED/ACTIVATED/DEACTIVATED/RETIRED)、`platform`(SmartHub/Acceleronix)
-- `allDataUsage`(累计用量,**单位 KB**)、`month`(yyyy-MM)、`expirationTime`、`updateTime`
+- `allDataUsage`(累计用量,**单位 KB**)、`month`(统计月份,**格式不统一,见下方「month 字段双格式」**)、`expirationTime`、`updateTime`
 - 敏感字段(会被脱敏):`imei`、`imsi`、`msisdn`
 
-**`SimCardMonthlyData`(SIM 月用量)**:`simId`(GICCID)、`month`、`allDataUsage`(**单位 KB**)、`dailyUsage`。
+**`SimCardMonthlyData`(SIM 月用量)**:`simId`(GICCID)、`month`(**格式不统一,见下方「month 字段双格式」**)、`allDataUsage`(**单位 KB**)、`dailyUsage`。
 
 > **流量单位换算(写阈值必看)**:`allDataUsage`、`dailyUsage.dataUsage` 一律为 **KB**。
 > 换算:1 MB = 1024 KB,1 GB = 1048576 KB。
 > 常用阈值:**200MB = 204800**、500MB = 512000、1GB = 1048576、2GB = 2097152。
 > 因此"流量大于 200M"应写 `{"allDataUsage": {"$gt": 204800}}`,不要用 200 或 200000000。
 
+> **⚠️ month 字段双格式(按 month 过滤/分组必看)**:`SimCardManage.month` 与 `SimCardMonthlyData.month` 历史上存在**两种写法并存**:
+> - `yyyy-MM`(带连字符,如 `2026-01`)——SmartHub 平台写入。
+> - `yyyyMM`(无连字符,如 `202601`)——Acceleronix 平台写入。
+>
+> 因此**不能只用一种格式做等值匹配**,否则会漏掉另一半数据。按月份筛选时用以下任一兼容写法:
+> - **枚举两种格式**(推荐,简单可用索引):
+>   `{"month": {"$in": ["2026-01", "202601"]}}`
+> - **归一化后匹配**(在 pipeline 里先去掉连字符再比):
+>   ```json
+>   { "$addFields": { "monthNorm": { "$replaceAll": { "input": "$month", "find": "-", "replacement": "" } } } },
+>   { "$match": { "monthNorm": "202601" } }
+>   ```
+> 按 month 分组统计时同理,建议先用上面的 `$addFields` 归一化出 `monthNorm` 再 `$group`,避免同一个月被拆成两组。
+> `service_sim_monthly_data` 等 service 层工具入参仍用 `yyyy-MM`(由后端处理),此双格式问题**仅影响 `data_mongo_*` 直查**。
+
 #### JOIN 关系图谱(跨集合关联键)
 
 - **站点 ↔ SIM**:`SiteInfoManageData.iccId` 取**前 19 位** = `SimCardManage._id`(GICCID)。