Commit Graph

3 Commits

Author SHA1 Message Date
DXC
51714a7883 fix: 82 爬虫上游时间为 UTC,+8 小时转北京时间
上游 82 网站返回的 date 数组是 UTC,直接入库会让这批数字命名的设备时间比
实际早 8 小时。

实证(本地库):
  这批设备的 check_time 是 2026-02-06 17:11:10(那轮采集完成时刻),
  而上游原值落在 09:07:02 ~ 09:10:30,+8h 后正好是 17:07 ~ 17:10 —— 即采集
  完成前一分钟。若原值已是北京时间,则意味着这批站点在采集前 8 小时就集体
  停止上报、且整齐划一,不合常理。

- 解析后 +timedelta(hours=8)。中国无夏令时,固定偏移与 pytz 转换等价。
- 清洗 T / Z / 毫秒后缀,兼容 ISO 格式。
- 解析失败原样兜底 —— 有值但格式不认识,原样透传给入库层的 staleness_of
  再解析,与之前“拿不到时间必须为 None”的约定不冲突。
- 跨日正确:16:00 UTC 顺延至次日 00:00。

注意:本次只改后端源码,需重新打包 exe 才会在服务器生效。
2026-09-16 09:08:05 +08:00
DXC
1412b0ed0b fix: 爬虫不再用运行时刻伪造数据时间
crawler_106:
- find_closest_item 原来用 abs(now - item) 取“离现在最近”,服务端只要存在
  未来日期的目录就会被选中。改为只保留不晚于当前时间的项,再取最新那个。
- 目录名只有日期,按当天 00:00 参与比较。不能用 23:59:59,否则“今天”的目录
  会大于当前时刻而被当成未来剔除,永远只取到昨天的数据。
- 文件 modified 带 Z 表示 UTC,不带时区的按东八区补上。原来 .replace(tzinfo=None)
  会让 naive/aware 比较抛异常,被 except 静默吞掉,导致所有文件被丢弃。
- target_time 不再用「目录日期 + datetime.now()」拼接(那写进库的是爬虫跑批
  时刻,而 calculate_offset 只取日期部分,等于在骗前端)。改为从最终文件路径
  正则提取真实记录时间,正则没命中时退化到文件修改时间。
- 正则放宽:兼容 /Data 与 /data、前导斜杠、扩展名大小写。

crawler_82:
- 基础数据包的 target_time 默认值不再用 datetime.now()。
- d_list 为空时原为字符串 "N/A",它是真值,会通过入库层的 if target_date
  判断,把设备主表已冻结的有效时间覆盖掉。改为 None。

爬虫层只负责解析真实记录时间,解析不出来就留 None;如何入库交给
services/db_ingest 决定(离线时冻结上一个有效时间)。
2026-09-15 17:05:31 +08:00
ffbd494b7b 打包上传的2.0版本 2026-01-09 12:48:50 +08:00