feat: integrate analytics and fragment receipt improvements
This commit is contained in:
@@ -3110,3 +3110,52 @@ git diff --check
|
||||
- Redis返回`PONG`;`gateway.submit.commands`消费者组为`cmpp-gateway`,消费者1、pending=0、lag=0、entries-read=3047。部署后约95秒内API/Gateway error级journal均为0,关键字检查无`panic/fatal/unhandled/exception/error`;120秒内活跃下游客户连接为0。
|
||||
- 4条active供应商通道中3条稳定connected 1/1:`会员营销-铁布衫`、`赛邮行业-王斯评中转`、`赛邮行业-王斯评中转副本`。`会员营销-富泷`在部署前为connected 1/1,Gateway重启后持续约95秒为failed 0/1,数据库原因为`authentication / connect response status: auth failed`;保留系统自动重连,没有修改其账号、密码或启停状态。
|
||||
- 依赖缓解安全门禁通过。npm audit仍报告既有前端2项high(未使用的React Router RSC路径)和API 3项moderate(Prisma工具链)告警,未执行可能引入破坏性升级的`audit fix --force`。本次没有发送、重投或补发真实短信,没有修改企业余额、客户连接或真实通道配置。
|
||||
|
||||
## 2026-08-03 客户端今日消费金额、审核提交时间与查询控件统一(本地未提交)
|
||||
|
||||
- 客户端短信服务工作台在“今日返还金额”前增加“今日消费金额”,直接展示当前企业真实 Dashboard API 的`today.spendCents`;该字段由后端按当前租户及北京时间当天`SmsMessageRecord`汇总,不新增浏览器估算、静态数据或本地缓存。四张金额/发送指标卡在桌面端四列、1180px以下两列、780px以下单列展示。
|
||||
- 新增全局查询尺寸令牌:普通条件220px、日期区间320px、查询/重置按钮88px;新增共享`.ui-filter-row/.ui-filter-actions`布局并保留R11既有页面类兼容。风控规则页的规则范围、平台白名单和号码频次触发记录不再整行拉伸,白名单与触发记录增加等宽重置按钮并按明确默认值重新请求真实接口。
|
||||
- 企业认证、短信、模板、签名、引流信息五个审核页面均增加“提交时间”日期区间;签名和引流的导入批次审核Tab也使用已有真实分页日期参数。前端分别传递`submittedAtFrom/submittedAtTo`或导入批次`startAt/endAt`,不是仅过滤当前页面数组。
|
||||
- 后端新增共享北京时间日期边界解析,校验`YYYY-MM-DD`、真实日历日期和范围顺序,并生成包含开始日00:00:00及结束日23:59:59.999的闭区间。数据库查询分别落到企业认证`submittedAt`、短信审核任务`createdAt`、模板`createdAt`、签名当前提交口径`updatedAt`和引流信息`submittedAt`;没有新增schema或migration。
|
||||
- 新增/补充日期筛选单元测试。定向结果为日期边界与企业认证2 suites / 6 tests、风控审核1 suite / 16 tests、短信配置1 suite / 63 tests全部通过;本地Redis和PostgreSQL端口均监听时,API全量30 suites / 394 tests全部通过,保留既有`--forceExit`提示及测试场景内预期的错误/告警日志。
|
||||
- API TypeScript正式构建、前端TypeScript与Vite v8.1.5生产构建通过(2532 modules,CSS 239.86kB/gzip 35.11kB,JS 2007.30kB/gzip 597.78kB),仅保留既有大chunk提示。R11 foundation/shared components/admin/client四项样式门禁和`git diff --check`通过;契约同步锁定3个查询尺寸令牌、共享筛选布局和DateRangeInput绑定。
|
||||
- 应用内浏览器访问本地客户端工作台和运营端风控路由时,均被真实鉴权守卫正确重定向到对应图形验证码登录页;页面身份正确、无框架错误覆盖,控制台0条warning/error。没有可复用登录态,未解验证码或伪造会话,因此登录后金额卡、审核筛选和风控布局的真实交互视觉验收保留为人工登录复核项。
|
||||
- 已同步首版需求、系统功能测试用例和本进度文档。本轮按用户要求保持全部业务代码未提交、未推送、未部署;既有`api/tsconfig.build.tsbuildinfo`、根目录`tsconfig.tsbuildinfo`、`outputs/`和空文件`=`继续保留且不纳入本轮归因,未发送短信、修改余额、通道配置或客户连接。
|
||||
|
||||
## 2026-08-03 引流信息识别与统计(本地开发中,未提交)
|
||||
|
||||
- 本期范围确定为只识别、记录、查询和统计是否含引流信息;不根据报备/审核状态做发送、拒绝或人工审核。客户端批量发送和 CMPP 入站中的`DRAINAGE_NOT_APPROVED`分支已移除,既有引流资料匹配只保留关联信息,不参与发送决策。
|
||||
- 新增`DrainageDetectionRule`真实数据库模型、消息记录识别快照字段及 migration;检测器按规则类型对副本规范化,覆盖裸域名/短链/IP、中文标点和空格拆分 URL、`+86`/空格/短横线手机号、括号区号/分机固话,并排除邮箱。批量发送、CMPP 入站和通道测试记录写入同一识别快照。
|
||||
- 运营端新增“系统管理 → 引流识别规则”页面及真实 CRUD、启停、测试接口;短信记录新增含引流/不含引流/未检测筛选、命中片段提示色高亮和 CSV 列。
|
||||
- 发送质量明细的通道×运营商矩阵保留整体聚合,并新增含引流、不含引流、未检测切分结果;运营看板第一张签名表改为全部短信,第二张只取识别为含引流的短信。
|
||||
- 当前验证:Prisma Client 已基于新 schema 生成且 schema validate 通过;API TypeScript 构建、前端 TypeScript检查和 Vite v8.1.5 生产构建通过(2533 modules,CSS 241.13kB/gzip 35.30kB,JS 2016.72kB/gzip 600.04kB),仅保留既有大 chunk 提示。识别器及发送链路/通道/运营统计定向回归 4 suites / 180 tests 通过,API 全量 31 suites / 403 tests 通过;Jest 仍保留既有开放句柄`--forceExit`提示。未在本地或预生产执行 migration,未执行 Gateway 回归或登录后浏览器验收。
|
||||
- 全部修改仅保留本地,未提交、未推送、未部署;未发送、补发、重投真实短信,未修改真实通道账号、密码、启停状态、企业余额或客户连接。工作区中原有认证、风控、审核样式、日期筛选、构建缓存和临时文件继续保留,不归因于本需求。
|
||||
- 本地页面联调时发现3000端口仍由2026-08-02启动的旧API进程占用,当前源码进程因`EADDRINUSE`未实际接管,导致登录后访问新接口返回`Cannot GET /api/admin/dictionaries/drainage-detection-rules`。已仅重启本工作区本地API,确认新路由完成挂载、API health与4173前端预览均为HTTP 200。
|
||||
- 初始migration中的默认正则使用了JavaScript字符串式双反斜杠,而PostgreSQL标准字符串会原样保存,导致数据库内3条默认规则无法命中。初始种子已改用美元引用的单反斜杠表达式,并新增`20260803140000_fix_default_drainage_detection_rule_patterns`向前修复migration;本地库已应用至80条migration。真实本地数据库现有URL/裸域名、手机号、固话3条active默认规则;组合样例正确命中中文句号裸域名、`+86`短横线手机号和括号区号带分机固话,同时排除邮箱。
|
||||
|
||||
## 2026-08-03 下游投递与恢复状态筛选布局优化(本地未提交)
|
||||
|
||||
- 设计规范核对确认R11已有共享`.ui-filter-row/.ui-filter-actions`:普通查询控件使用`--query-control-width: 220px`,日期范围使用`--query-date-range-width: 320px`,查询/重置按钮使用`--query-action-width: 88px`;容器允许按完整控件换行,780px以下条件整行、按钮两列。下游投递记录和恢复状态管理仍使用旧`admin-task-filter`自适应网格,5组条件及按钮会为维持单行而被压缩。
|
||||
- 两页筛选区已改为直接复用共享R11布局和操作区,不新增页面私有宽度、不改变筛选状态、查询接口、日期口径、导出或重投行为。已同步首版需求和`TC-GW-014/TC-GW-024`的桌面换行、移动端整行及无压缩/重叠验收要求。
|
||||
- 同轮纳入运营端用户管理:原页面在外层工具栏内再用`repeat(auto-fit, minmax(160px, 1fr))`压缩五组查询条件,现改为与查询/重置共同使用共享筛选流式布局;“新增用户”继续作为独立业务操作。查询参数、真实`GET /api/admin/users`组合查询及新增用户行为均未改变,并同步`TC-USER-FILTER-001`布局验收。
|
||||
- Node.js v24.16.0下前端TypeScript检查和Vite v8.1.5生产构建通过(2533 modules,CSS 241.00kB/gzip 35.28kB,JS 2016.78kB/gzip 600.05kB),仅保留既有大chunk提示;R11 foundation/shared components两项样式门禁及`git diff --check`通过。系统PATH旧Node首次执行Vite时因不支持`??=`产生未处理Promise警告但错误返回0,已明确判定无效并用Node.js v24重新完成全部门禁。
|
||||
- 本地深链访问下游投递页被真实鉴权守卫正确重定向至运营端登录页,页面身份正常、无框架覆盖、控制台0条warning/error;没有可复用登录态且未解图形验证码或伪造会话,因此三页登录后桌面/移动实际截图与查询交互仍需人工登录复核。修改仅保留本地,未提交、未推送、未部署,也未触发任何下游重投或真实短信操作。
|
||||
|
||||
## 2026-08-03 CMPP逐分片回执与72小时超时失败回执(本地未提交)
|
||||
|
||||
- 协议和历史代码复核纠正了“临时状态”和“长短信聚合回执”两项不严谨结论:CMPP只有状态值,没有规定临时状态生命周期,也没有长短信聚合回执报文。历史版本曾按上游分片产生多条下游投递,但全部复用第一片客户Msg_Id;后续为修复并发重复补发/退款改成每条业务短信一条回执,两种实现都不满足逐个原始客户分片精确关联。
|
||||
- Gateway入站契约现传递每包真实`Registered_Delivery`;短短信写入`SmsMessageRecord.cmppRegisteredDelivery`,长短信逐片写入`CmppInboundLongMessageSegment.registeredDelivery/sequenceId`。migration`20260803190000_downstream_fragment_receipts`同时增加`timeoutReceiptQueuedAt`,历史已有CMPP记录按原行为回填为请求回执;本地PostgreSQL已成功应用至81条migration。
|
||||
- 内部长短信仍只形成一个业务终态、一次重投决定、一次退款和一个HTTP最终事件。CMPP下游改用`receipt:{messageRecordId}:segment:{segmentIndex}`逐片幂等;Gateway根据每片原始`SubmitGroupMessageId + Sequence_Id`重建对应SubmitResp Msg_Id,在线会话不再导致所有分片回执复用第一片Msg_Id。`Registered_Delivery=0`分片不建CMPP回执。
|
||||
- 下游逐片payload优先使用对应`SmsMessageSegmentAudit`的真实状态、原始码、错误码和到达时间;已成功分片不会因另一片失败被改写。业务已明确最终失败而个别片尚无状态时,缺失片使用整条短信的明确失败结果,保证每个请求回执的原始分片都有最终答复。
|
||||
- 72小时扫描将`submitted/unknown`明确改为`timeout + undelivered + EXPIRED + RECEIPT_TIMEOUT`,HTTP建立一个失败Webhook,CMPP为每个请求回执的原始分片建立失败状态报告。只有全部应建投递持久化后才写`timeoutReceiptQueuedAt`;建单中断时下一轮扫描继续补齐,退款仍由原消息级幂等键保证一次。
|
||||
- 验证结果:Prisma format、validate、generate和API TypeScript正式构建通过;新增逐片目标/Registered_Delivery/HTTP超时及中断恢复测试后,定向3 suites / 117 tests、API全量32 suites / 407 tests通过,保留既有Jest开放句柄`--forceExit`提示及预期场景日志。Gateway`go test ./... -count=1`与`go vet ./...`通过,并新增不同原Sequence_Id生成不同回执Msg_Id的专项测试。
|
||||
- 本轮没有修改或清理工作区中既有的引流识别、审核筛选、查询布局和其他会话修改;构建缓存、`outputs/`和空文件`=`继续保留。代码按用户要求未提交、未推送、未部署;没有发送、补发或重投短信,没有修改预生产数据库、企业余额、通道配置或客户连接。
|
||||
|
||||
## 2026-08-03 跨会话工作区整合与提交前完整回归
|
||||
|
||||
- 汇总当前工作区全部有效修改后,组合范围确认为四组:客户端今日消费与运营统计、审核日期和共享查询布局、引流信息识别与统计、CMPP逐分片回执及72小时超时失败回执。3条新增migration按`20260803113000`、`20260803140000`、`20260803190000`顺序衔接;本地真实PostgreSQL共81条migration且schema up to date。
|
||||
- 完整回归发现拆分阶段的结构契约未同步业务演进:R1新增5个引流识别规则API且7个查询实现更新,R5通道测试加入引流识别,R2短信导出/质量统计查询变化,R8/R9/R10的引流识别、Registered_Delivery、逐片回执及超时回执实现变化,R3审核提交时间查询变化。已按实际组合实现更新对应契约哈希;R0将已失效的“单条聚合最终回执”特征替换为“同一分片幂等一次”和“HTTP单事件+CMPP逐请求分片”两项真实特征,没有恢复错误的聚合回执行为。
|
||||
- Node.js v24.16.0下Prisma format、validate、generate、migrate status通过;API全量32 suites / 407 tests全部通过,API TypeScript正式构建通过;前端TypeScript与Vite v8.1.5生产构建通过(2533 modules),仅保留既有约2.02MB单chunk和插件耗时提示。
|
||||
- Gateway`go test ./... -count=1`和`go vet ./...`通过;19个R0-R11结构门禁全部通过;依赖缓解安全门禁通过;`git diff --check`和合并冲突标记扫描通过。Jest仍保留既有`--forceExit`开放句柄提示及测试场景内预期日志。
|
||||
- 依赖审计仍有已知告警:前端2项high来自项目未启用的React Router RSC路径,专用门禁已验证RSC未使用;API 3项moderate来自Prisma开发工具链的Valibot间接依赖。未执行可能改变依赖或引入破坏性升级的自动修复。
|
||||
- `api/tsconfig.build.tsbuildinfo`、根目录`tsconfig.tsbuildinfo`、`outputs/`和空文件`=`继续作为构建缓存或临时产物排除,不提交、不删除、不错误归因。本轮未部署、未发送/补发/重投短信,也未修改预生产数据库、企业余额、通道配置或客户连接。
|
||||
|
||||
Reference in New Issue
Block a user