编辑页:新增「重复到访」卡片 —— 以基线(手机包)为参照清掉站点侧的历史副本

站点库里有一批「到达时间 + 地点与手机包里某条完全相同、但 UUID 不同」的到访副本,
合并/差异按 UUID 认人会把它们当成备份新增,导出到 rond 就成了成对的两条重复记录。
判定与 tools/dedup_site_visits.py 同一套语义:UUID 是前提(只按时间+地点判会误删手机包
自身合法的成对条目);基线跟本站一条都对不上时只给说明、不给按钮。清理在单事务里删
副本 + 其位移/天气/留档,并把指向副本的 ZMERGEDTO/ZPARENT 改指到保留项——只动本来
就有的那个键,工具那版会凭空补出一个 ZMERGEDTO(真机里是「已并入别处」,会白丢记录)。

顺带修一个「一补录天气就整包导出失败」的洞:rond 导出把 weather.is_daylight 扫进裸 bool,
而站点「新增天气」不写这一列 ⇒ NULL ⇒ sql.Scan 报错。改成 COALESCE(is_daylight,false),
与导入侧读真机包同口径。

验收:301 PASS / 0 FAIL / 0 SKIP(新增 4 个用例,含变异验证:去掉 UUID 前提/改回
create_if_missing=true/不删副本位移,三种改法都被用例抓到)。
This commit is contained in:
tamakyi
2026-09-29 19:17:29 +08:00
parent 40441ba900
commit 152af81f6a
7 changed files with 1097 additions and 1 deletions
+5
View File
@@ -808,6 +808,11 @@ type EditData struct {
// OpenSrcPK 是「从地点详情页跳进来要定位的地点」(?open=<src_pk>):非 0 时自动翻到
// 该行所在页、展开它的编辑框并高亮,省得在几百行地点里手动搜
OpenSrcPK int
// DupVisits 是「重复到访」卡片检出的站点副本(与保留项的配对),空的就没有卡片
DupVisits []EditDupVisit
// DupUnavailable 非空表示判定不了(基线不可用 / 跟本站到访对不上),
// 此时只显示一行说明、不给按钮——拿一份对不上的参照去删到访比不判更糟
DupUnavailable string
}
// PlaceSources 供模板渲染筛选下拉,顺序固定(与 placeSourceLabels 一致)。