浅念
|
8b29326b2e
|
fix(analytics): 命中表索引幂等守卫独立+created_at 去掉 onupdate 语义
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 15:30:14 +08:00 |
|
浅念
|
565006239b
|
feat(analytics): 数据分析板块四新表+迁移——stat_daily_staff/敏感词三表/fetched_at 索引
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 15:04:33 +08:00 |
|
浅念
|
81af615738
|
docs(plan): 复核残留修订——exportListToCsv真实签名落地代码块/调度测试改相对日期
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 14:48:45 +08:00 |
|
浅念
|
0bc1250476
|
docs(plan): 评审修订——修5处seed/签名矛盾+起步词库补种+四页角标
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 14:42:56 +08:00 |
|
浅念
|
aecb556efd
|
docs(plan): 数据分析板块 v1 实施计划——17 任务 TDD 全链(模型/指标/C1/调度/四页)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 14:25:20 +08:00 |
|
浅念
|
33c5596543
|
docs(spec): 数据分析板块 spec 评审修订——min_msgs 参数/周一起始/alembic 取代上游过时说法
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 13:51:11 +08:00 |
|
浅念
|
d1b636abdc
|
docs(spec): 数据分析板块 v1 设计存档——A1/A3/B2/C1 骑日汇总层+打底架构
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 13:45:13 +08:00 |
|
浅念
|
c31d1cc450
|
fix(nginx): /api 反代按 TTL 重解析 backend DNS——根治 IP 漂移后 502
nginx 对 hostname 的 proxy_pass 只在启动时解析一次并永久缓存,backend
重建或网络栈劣化后持续 502(2026-09-03/04 两次实战,重启 frontend 才恢复)。
改用 docker 内嵌 DNS 127.0.0.11 + resolver valid=10s + variable
proxy_pass(不带 URI,仍转发原始 /api/... 完整路径,行为不变)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-04 09:55:54 +08:00 |
|
浅念
|
5cfc09121a
|
feat(scraper): cookie 过期自动续期——浏览器表单重登+缓存+整实体重跑
撞 CookieExpiredError → PageScraper 表单登录(密码登录tab+placeholder选择器,
2026-09-03 实测一次成功)→ 新 cookie 落 MEDIA_DIR/.yk_cookie_cache(优先于
compose 注入的 env,永远比它新)→ 实体重跑一次(幂等+水位,安全);二次过期
直接抛出防循环;重登失败(无账密/云客改版)报可读原因退出码 3。
main 瘦身:cookie 加载收敛 _load_cookie(缓存>env>settings),分发链移
_dispatch_entity。测试 8 新增,全量 525 绿。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 18:11:26 +08:00 |
|
浅念
|
e365108244
|
fix(scraper): 云客鉴权失败信封统一拦截——cookie 过期响亮报错不再静默
事故(2026-09-03 手动同步实测):cookie 过期时 WA 路径对 str data 调 .get
崩 AttributeError,微信路径更糟——auth 错误信封被当空数据,55 员工全部
rows=0 无任何告警,整轮同步一无所获。
守卫:_browser_fetch 收口统一走 _check_auth_envelope,识别 success=false
且 code=±20020(实测信封)抛 CookieExpiredError;main 入口捕获后输出
一句话可读信息 + 退出码 3(不再天书堆栈)。业务错误(-90000 等)不受影响
照旧放行。测试 5 新增,全量 517 绿。
后续(等确认真实密码):CookieExpiredError 触发自动重新登录换 cookie,
过期彻底自愈。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 17:52:09 +08:00 |
|
浅念
|
0ade58a750
|
fix(summary): 空表守卫容错——表未建(漏迁移的升级)也回退旧聚合,不 500
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 16:39:26 +08:00 |
|
浅念
|
421998be54
|
perf(api): 会话/5数字弹窗超时修复——日粒度汇总层 msg_daily_stats
根因(服务器实测):sessions 对 owner 全量 message GROUP BY,重账号 5.2万条
3~5s;staff-chat-stats 全时段窗 6.9s——128MB buffer pool 下被推过前端
15s 超时(ECONNABORTED)。EXPLAIN ANALYZE 证实最优 covering 索引也要
18.9s,瓶颈是磁盘不是查询形状。
修复(预聚合,云客同款思路):
- msg_daily_stats 表:每「渠道×账号×会话×上海自然日」一行(收发计数/
当日最后时间与方向);迁移 a7d3e9f1c2b4(幂等建表)
- 写路径:repos.upsert_messages 落库自动重算本批触及的会话×天(所有
抓取路径汇到该函数,一处挂全;失败不阻塞写入)
- 读路径:sessions/staff-chat-stats 表有行时读汇总(namedtuple 同形,
端点主体零改动),空表守卫回退旧聚合(部署回填前不空白)
- 自愈:CLI daily-stats 全量重建(幂等);full_sync_all.sh 夜间追加第 11
步——顺带修掉尾部 sqlite3 直连 smoke.db 的硬编码(服务器 MySQL 上会炸)
- 口径统一:day 一律 Asia/Shanghai Python 计算(旧 from_unixtime 跟随
DB 会话时区与今日数割裂);统计窗口对齐自然日(文档化语义变化)
测试:12 新增(汇总层 8 + 端点判别/对拍 4,判别手法=回填后删光 message
仍出完整数据),全量 512 绿。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 16:37:36 +08:00 |
|
浅念
|
e3f7aa1304
|
fix(auth): 登录页不再套 MainLayout(public 路由全屏裸渲染)
App.vue 按 route.meta.public 切换:登录页直接出 router-view,其余才带
侧栏布局 — 否则登录页嵌在侧栏旁边,布局错乱。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 15:26:48 +08:00 |
|
浅念
|
6880ff1b97
|
feat(auth): 登录页(用户名/密码换 API token)+ 前端全链路登录态
后端:
- POST /api/auth/login:admin 账密(Settings 默认 admin/admin123,
ADMIN_USER/ADMIN_PASSWORD 可覆盖)换取共享 api_token,免 token 中间件
- 防爆破:同 IP 15min 窗口内 5 次失败锁 15min(429),成功登录清零
- 错误信息统一「用户名或密码错误」(防用户名枚举)
- 测试 7 个新增(TDD),全量 500 绿
前端:
- LoginView + 路由守卫(未登录跳 /login,回跳 redirect)
- axios 请求拦截器自动带 Bearer;401 清登录态回登录页
- 媒体直链统一 mediaUrl() 带 ?token=(img/audio 标签发不了 header),
替换 4 处裸拼;downloadBlob 手动带头
- isLoggedIn 按 key 存在判定 — 后端鉴权关闭时空 token 不锁死登录页
- MainLayout 侧栏底部退出登录
compose:两份编排透传 ADMIN_USER/ADMIN_PASSWORD(默认 admin/admin123)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 15:03:20 +08:00 |
|
浅念
|
0a5eb49359
|
docs(deploy): DEPLOY.md 对齐 2026-09-03 实测落地(NAT 端口模式)
- 拓扑现实:服务器在路由器 NAT 后,公网 80 被其他设备占用
- 对外访问实测:1Panel 域名管理加 公网IP:32002 + 路由器转发,零配置直访
- 修媒体解压路径 bug:包内根是 media/,须 -C yunke-server
- HTTPS 改为将来项:域名 + 1Panel DNS 验证(绕开被占的 80)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 14:35:00 +08:00 |
|
浅念
|
284cecfcd9
|
fix(deploy): server 编排接入 1panel-network 直连 1Panel MySQL
MySQL 容器只绑 127.0.0.1:3306,宿主机网段不可达;backend/scheduler
挂 external 网络 1panel-network 用容器名直连,不改 1Panel 任何配置。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-03 12:02:12 +08:00 |
|
浅念
|
974929e091
|
feat(deploy): 阿里云ECS+1Panel 服务器部署方案落地
- docker-compose.server.yml:生产编排(复用 1Panel MySQL、去 mysql/redis、
端口仅绑 127.0.0.1、TZ=Asia/Shanghai、MYSQL_HOST 必填守卫)
- 两份 Dockerfile 内置国内构建源:apt/pip→阿里云,npm/playwright→npmmirror
(ECS 上直连官方源慢/超时;对本地构建同样可用)
- DEPLOY.md 重写为 v2 runbook:单站点反代架构、mysqldump+media 搬迁管道
(ngram 索引导入重建 ~12min)、验收清单、运维表、本地停 scheduler 收尾
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-01 16:38:05 +08:00 |
|
浅念
|
9ba8063ca8
|
feat(chat): 跳转入口全部改为全时段进入(用户定调:聊天记录不做时间限制)
排查全部聊天展示路径后清掉最后的两处带窗跳转:CallList 通话行的「通话
当天」定位窗(当日早些时候为对齐云客 ?start= 加的)与 StaffList 统计弹窗
的统计时段窗;WA 分支的 ?start= 本就被 ChatTimeline 的 start+end 成对
校验忽略,属死代码一并移除。现状:所有聊天视图默认全部时间(会话列表/
消息接口本就无时间下限),日期过滤只保留聊天窗内的手动日期选择器。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 16:30:52 +08:00 |
|
浅念
|
0b03c9fb0d
|
perf(customers): message 补 (channel,owner,timestamp) 索引,列表 7.6s→0.03s
客户列表行内「今日收发」聚合按 channel=?+owner IN+timestamp>= GROUP BY,
两个既有索引把 timestamp 排在 talker/room 后无法 seek——asyncmy 服务端
预编译时优化器弃索引全表扫 86 万含大文本宽行,实测 7.7s/次,前端每次翻页
都撞(用户报微信客户列表加载慢)。补三列窄索引后 owner 前缀直接落入当天
几百行:GROUP BY 0.14s、API 全链 0.032s(78 倍,翻页/WA/员工过滤同测)。
模型+迁移同步声明(防 autogenerate 反向 DROP),inspect 幂等。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 16:23:04 +08:00 |
|
浅念
|
e82e2ebea1
|
fix(migrate): message.text 建 MySQL ngram FULLTEXT 索引(搜索16s回归)
_search_messages_mysql 一直在用 MATCH..AGAINST,但 migrate 按模型建表不含
FULLTEXT、迁移链也从没建过——索引缺失时 MATCH 报错回退 LIKE 全扫:860k 行
LIKE '%q%' 实测 16.3s,axios 15s 超时 ECONNABORTED,搜索页全空(切 Docker
MySQL 单库后暴露;8-22 部署验证时已知 LIKE 慢但索引创建环节漏了)。补迁移:
仅 MySQL 方言,原生 DDL(本版 SQLAlchemy Index 不认 WITH PARSER 方言参数),
inspect 幂等。实测建成后 документ 0.73s / 报关 0.40s(22~40 倍提速),
ngram 对中文俄文按 bigram 切词,子串语义贴近原 LIKE 路径。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 16:07:54 +08:00 |
|
浅念
|
6de1662131
|
feat(staffchat): CallList/SearchView 微信行切新员工聊天窗口(入口改造收尾)
与 StaffList/CustomerList 同口径:微信行→staff-chat 新窗(单聊=single tab,
群语音/@chatroom 消息=group tab),WA 行保留旧 ChatTimeline(ChatTimeline
保留给 WA)。通话行跳转带「通话当天」整天下窗——语音通话本身是消息流里的
voice_call 行,当天窗必含该通通话,等价实现旧页 ?start= 滚动定位(新窗
rangeFromQuery 需 start+end 成对)。SearchView 客户抽屉同 CustomerList。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 16:07:54 +08:00 |
|
浅念
|
2c5cea1565
|
fix(staffchat): 聊天窗默认时段改全部时间+空态分语(用户报很多聊天记录空的)
defaultRange() 默认近 14 天窗,实测 78% 群(766/979)/89% 单聊(9374/10497)
的最新消息在任意 14 天窗外——这些会话打开即全空(典型:张士蓓「11台长安X5」
1016 条消息全在 7-27 前,默认窗滤成 0 条,云客后台却看得到)。云客默认直接
展示最近消息不限窗,对齐改为默认全部时间;首屏本就跳最后一页看最新+上翻
加载更旧,全量窗下首屏仍只拉一页。空态分语:有窗=「所选时间范围内无消息,
清空日期窗可查看全部」,无窗=「该会话无聊天记录」(真没聊过)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 15:15:41 +08:00 |
|
浅念
|
b2ccbee1ab
|
fix(scripts): backfill_group_members 窗口函数化过 MySQL only_full_group_by(单库收敛)
max(timestamp)+裸 sender_name 的 GROUP BY 是 SQLite 方言行为,MySQL 8 默认
only_full_group_by 直接 1055 拒绝——2026-08-27 单库收敛(本地+调度器同连
Docker MySQL)时在 MySQL 上实跑触发。改 row_number() OVER 取每 (room_id,
talker_id) 最新一行的 sender_name + count() OVER 计数:两库通用,且语义从
「碰巧取 max 行」变为严格最新一条。另 gitignore 补 *.db.retired
(smoke.db 退役改名后 *.db 规则罩不住)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-27 14:51:05 +08:00 |
|
浅念
|
7e8624674e
|
fix(staffchat): SessionPane 补请求序号防竞态(对齐全 pane 惯例)+置顶卡不显今日红点(spec §5)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 21:03:36 +08:00 |
|
浅念
|
ef7f6d8a23
|
fix(migrate): 类型迁移SQLite内联修复FTS触发器+多owner群room_id测试+DEPLOY补stamp依据与锁表提示
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 20:55:18 +08:00 |
|
浅念
|
35bfebd3e3
|
chore(backend): list_order迁移补齐+Task14类型修正落链+moments每页日志+MsgTypeParam派生+3处文档修正+Dockerfile打包migrations+DEPLOY补迁移步骤
- 9b0d0c133035: wechat_account.list_order 进迁移链(此前仅模型声明,
干净库 /api/accounts 即 500);sa.inspect 幂等守卫兼容已手动加列的
smoke.db
- fe63c6789e94(验证中发现的预存缺口,超出原清单): Task 14 的 5 列模型
类型修正(4×URL String(1024)→Text, db_size Integer→BigInteger)从未落
链——纯 alembic 新库会复活 >1KB 链接截断;对齐后干净库 alembic check
全绿。SQLite message 表 batch 重建会掉 FTS 触发器+rowid 脱节(docstring
记明 ensure_fts+rebuild_fts 修复,smoke.db 已修复验证)
- scrape_via_page: _iter_moments_pages 每页一行进度日志(镜像 _fetch_pages)
- messages: MsgTypeParam=Literal[tuple(_MSG_TYPE_FILTER)] 派生,杜绝
双处罗列漂移(openapi enum 验证一致,492 绿含 422 行为)
- 文档: ChatGroup 复合PK docstring/groups room_id 多行表述/测试名去
单行假设;Dockerfile 补 alembic.ini+migrations;DEPLOY 增「数据库
迁移」节(新库/旧库stamp路径/回填脚本显式DB_URL)+运维表升级行
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 20:32:25 +08:00 |
|
浅念
|
e602822dfb
|
fix(staffchat): useStaffProfile 在途Promise去重(防重复请求+缓存投毒)+load(force)真重载
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 20:13:46 +08:00 |
|
浅念
|
50635d0df8
|
feat(staffchat): 入口改造(StaffList/CustomerList微信行切新页)+useStaffProfile缓存+StatsPane固定列/金额格式+vitest依赖化
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 19:56:22 +08:00 |
|
浅念
|
4c3bc3ee93
|
feat(staffchat): 统计分析7tab(分型明细列+计数徽标+近7天窗+msgid定位,对齐云客)
- StatsPane 占位替换: 7 tab(label 带 (N) 计数)+daterange 默认近7天(清空后端兜底)
- 明细列配置驱动(KIND_COLS);link 列跳 single/group 聊天;红包/转账行带 ?msgid 定位
- 语音通话列对齐 CallList(通话人/类型/呼入呼出/接通状态/时长/录音播放 dialog/时间/操作)
- 敏感词 tab 空态卡(词库未配置,待 C1 接入,零请求)
- 员工微信列用资料卡信息(明细行无 staff 字段,数据本属该员工)
- counts 与明细解耦;双 seq 竞态守卫(兄弟组件惯例)
- api: getStaffStatsDetail kind 收紧为 StaffStatsKind 联合(后端 Literal 6 值)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 19:32:14 +08:00 |
|
浅念
|
8dba4a6104
|
fix(staffchat): ContactsPane 加请求序号防 ownerId/翻页切换竞态(对齐 ChatMain/MomentsPane 惯例)+修正跨tab关键词注释
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 19:06:55 +08:00 |
|
浅念
|
0371484dad
|
feat(staffchat): 通讯录(客户表+群表列对齐云客+批量勾选导出+分页)+朋友圈翻页失败内联重试
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 18:56:02 +08:00 |
|
浅念
|
1b66be6a53
|
feat(api): /api/customers 加 q 文本搜索(昵称/备注/ID/手机号,LIKE转义) + /api/groups 加 q 群名搜索
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 18:55:53 +08:00 |
|
浅念
|
328aec80bc
|
feat(staffchat): 朋友圈feed(作者卡+九宫格预览+点赞列表+滚动翻页,对齐云客)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 18:30:45 +08:00 |
|
浅念
|
91639b28d8
|
fix(chat): loadInitial/loadTalkerName 加请求序号防会话切换竞态(ChatMain+ChatTimeline同修)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 18:20:14 +08:00 |
|
浅念
|
3aaf4ec8fa
|
feat(staffchat): 消息右列(近14天默认窗+9类类型过滤+msgid定位+导出,复制改造自ChatTimeline)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 18:10:30 +08:00 |
|
浅念
|
98fb4b8248
|
fix(staffchat): 回list模式重载会话列表(修复search期间切tab后列表与高亮标签矛盾的残留边缘)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 17:45:55 +08:00 |
|
浅念
|
026381f6e6
|
fix(staffchat): 搜索聚合取最新命中(ASC页1陷阱)+tab切换不清搜索结果+is_send守卫兜底名+截断提示+TAB_KEYS单源
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 17:42:43 +08:00 |
|
浅念
|
0f7dee9693
|
feat(staffchat): 会话中列(双模式搜索+已删除好友tab+置顶区+相对时间,样式沿用墨玉主题)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 17:28:45 +08:00 |
|
浅念
|
3f867718ff
|
docs(analytics): 方案v1.1评审修订——价值图谱(8能力域/三层价值)+权限模型/性能承载横切章节+E0数据健康+B5 RFM+10处口径漏洞修复(首沟通口径/流失三分法/迟到回写/尾部判定/误报治理/zip导出/一人多号聚合/图表库选型)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 17:21:39 +08:00 |
|
浅念
|
eb0388c8b0
|
feat(staffchat): 页面骨架+左侧资料卡/5导航/折叠(三栏布局对齐云客)
- StaffChat.vue: 路由驱动 tab(single/group/moments/contacts/stats)+折叠态,
三栏 flex(左栏240/中列280/右列flex:1,高calc(100vh-120px));资料卡走
getAccounts(channel=wechat) 按 account_id 匹配,失败退 ownerId 兜底
- StaffChatSide.vue: 员工资料卡(头像/昵称/真名·电话/微信号)+竖排5导航+
底部收起;墨玉主题沿用 ChatSidebar 手法(点阵底/玉绿渐变分隔线/药丸按钮)
- 5 占位组件(SessionPane/ChatMain/MomentsPane/ContactsPane/StatsPane),
defineProps/defineEmits 签名按 Task 10-14 锁定
- relativeChatTime 签名可空友好(ms?: number|null,null→''),spec+1例
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 17:03:19 +08:00 |
|
浅念
|
f2bcac0a4d
|
feat(staffchat): 路由+API client+类型+relativeChatTime(还原旧页WIP+占位StaffChat)
- 还原 ChatTimeline.vue/api/index.ts 未提交 WIP(新页自建,旧文件回 HEAD)
- /staff-chat/:ownerId/:tab?/:talkerId? 路由 + 占位 StaffChat.vue(Task 9 替换)
- types: MomentsPost/MomentsList/StaffStatsCounts/StaffStatsDetail +
ChatSession.pinned + Account.avatar
- api: getMoments/getStaffStatsCounts/getStaffStatsDetail + sessions
is_del + messages msg_type/q 过滤
- format: relativeChatTime(今天HH:mm/昨天/M月D日/YYYY年M月D日) + 4 例
vitest spec(全过,vitest 未入 devDependencies,npx 拉取运行)
- tsconfig.app.json exclude __tests__(vitest 未装,保持 vue-tsc 通过)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 16:45:30 +08:00 |
|
浅念
|
4baa8639ba
|
fix(api): staff-stats评审修复(GROUP BY显式列防ONLY_FULL_GROUP_BY/金额千分位/detail死参数/2边缘测试)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 16:36:07 +08:00 |
|
浅念
|
b95fc5fa6f
|
feat(api): GET /api/staff-stats 7类计数+分型明细(voice走user_id join,新客户add_time兜底,红包金额提取)
计数模式(无kind)返回 new_customers/new_groups/red_transfer/del_customers/
blocked_customers/voice_calls/sensitive_words(恒0,spec占位);明细模式
(?kind=)返回{kind,rows},每kind字段不同,前端按kind配列。start/end
缺省近7天。
口径(spec §4.5,全本地聚合):
- new_customers: add_time窗内;IS NULL行用该对话首条消息min(timestamp)兜底
- new_groups: chat_group.create_time窗内(复合PK按owner过滤)
- red_transfer: wechat type IN (red_packet,transfer)窗内;金额三路正则
(红包XML feedesc/转账纯文本/totalamount),实测真库转账399/399全提取
- del/blocked_customers: 现存量口径忽略窗口,明细time=updated_at毫秒
- voice_calls: phone_call.user_id存员工userId(32HEX)非wxId——先经
wechat_account.user_id换算,账号无uid返回空防跨员工串数
- voice明细字段语义对齐CallList.vue(connected=call_status==1,
media_url本地/api/media/{hash}优先OSS兜底)
真机smoke(yunke-mysql):voice 61条/新客67/删除29/拉黑1均通过;
转账金额100%提取。真库chat_group列与message.type回填滞后(运维项,另报)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 16:22:44 +08:00 |
|
浅念
|
2baa6d0814
|
test(moments): 同create_time并列时按id升序tiebreak测试(锁分页稳定契约,任务6评审遗留)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 16:22:44 +08:00 |
|
浅念
|
b289aa2650
|
fix(api): sessions is_del 越界422校验+省略不过滤显式契约测试
is_del 加 Query(ge=0, le=1)——越界值(如2)422 拒绝而非静默空列表;
test_sessions_is_del_filter 追加第三个请求:不带 is_del 时全部 4 个
talker 都返回(f1/f2/filehelper/gh0st),补上省略=完全不过滤的显式契约。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 15:57:59 +08:00 |
|
浅念
|
2837500bc0
|
feat(api): GET /api/moments 朋友圈列表(desc分页+账号头部)
对齐云客员工聊天窗口朋友圈tab:帖子 create_time desc 分页 +
wechat_account 头部(昵称/头像/别名);员工不存在不404(header全None
前端兜底)。头像提取抽共享 helper account_avatar 放 organization.py,
accounts 列表与 moments 头部复用。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 15:57:53 +08:00 |
|
浅念
|
d3d7146887
|
feat(api): sessions加is_del过滤+filehelper置顶标记,accounts加avatar(raw_json提取)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 15:44:54 +08:00 |
|
浅念
|
c21758dfb2
|
docs(plan): 填写Task4判别记录(双编码发现+逐码证据+回填终态+前端兜底注意)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 15:32:07 +08:00 |
|
浅念
|
64577a1b02
|
feat(msg): 类型归一化扩展(spike判别+49拆红包/转账)+存量回填+API msg_type/q过滤
- _normalize_msg_type 升级 (raw_type, row): messageType 经典码优先 →
49/appmsg 行级拆分(红包/转账/聊天记录) → 云客码兜底
- spike 修正: 云客 type=3 实为语音(messageType=34, 8754/8955 行),
原 image_legacy 是误标; type_raw=3 的 201 行旧数据才是真图片
- 新映射: 5红包 6/7通话 9文件 10/18/20链接 11转账 13名片 14位置
15/10000系统 21引用回复→text 22/19 证据不足留 unknown
- 回填 smoke.db: 620279 行重扫, 94268 行修正, unknown 87198→1885, 幂等
- GET /api/messages 加 msg_type(Literal 422)+q(LIKE 转义)参数
- 新增 test_scrape_msg_type.py(11) + test_api_messages 追加(8), 全量 466 绿
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 15:17:21 +08:00 |
|
浅念
|
f6ddd0263a
|
fix(repos): int 强转跳过 String 声明列(列类型优先于 _INT_FIELDS 按名集合)
Task 1 评审遗留:_INT_FIELDS 含 type_raw(为 Message int code 加),但
MomentsPost.type_raw 是 String(16)——按名强转会把非数字 code(如
'text')置 None,违背列声明。_build_column_values 现在检查目标列
声明类型:isinstance(col.type, sa.String)(含 Text)则跳过强转,
Message.type_raw(Integer) 照旧。另修正 upsert_chat_group 文档串里
过时的 'PK = room_id'(复合键自 8a99940)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-08-25 14:32:19 +08:00 |
|