2026-06-01|订单关注模块:查询即关注与状态调度
一、今日主要工作
- 围绕供应交付智能助手第一期迭代需求,完成 订单关注模块 的开发与文档沉淀。
- 实现订单交付查询后的”查询即关注”能力,用户输入订单号查询后,系统可自动将订单加入个人关注列表。
- 完成订单关注的手动关注、取消关注、重新关注、关注状态查询和我的关注列表等后端接口。
- 完成
portal_order_follow数据表设计,用于记录用户关注关系、订单状态快照、预计发货时间快照和手动取消标记。 - 完成订单状态变更调度器开发,支持定时轮询关注订单状态,并对到货、签收、取消、作废等场景进行自动解除关注处理。
- 完成订单交付查询结果卡片的前端按钮交互改造,在订单卡片右上角加入关注 / 已关注按钮。
- 完成订单关注模块 API 测试与调度器验证,形成《订单关注模块 — 开发完成文档》。
二、核心完成内容
1. 模块开发与功能实现
今天主要围绕订单交付查询模块中的”订单关注”能力展开开发。该能力的目标是:用户通过订单交付查询输入订单号后,系统自动将该订单加入个人关注列表;后续订单状态发生变化时,系统能够基于关注关系进行状态检测,并为企微推送通知预留能力。
本次已实现的核心业务规则包括:
- 查询即关注:用户输入订单号并完成查询后,自动加入个人关注列表;
- 手动开关:订单结果卡片右上角提供关注按钮,用户可手动关注或取消关注;
- 关注去重:同一用户对同一订单只能关注一次,重复查询时返回”已关注该订单”;
- 多人独立关注:多个用户可以同时关注同一订单,互不影响;
- 手动取消关注:用户取消关注后,将记录标记为
is_manual_unfollow=1; - 取消后不再自动关注:用户手动取消后,再次查询不会自动重新关注;
- 重新关注:用户可通过按钮或
/resume接口恢复关注; - 关注列表查询:支持查询当前用户的所有活跃关注订单;
- 状态终止自动取消:订单到货、签收、取消或作废后,系统可自动将关注状态更新为完成。
该模块补齐了订单交付查询场景下的持续跟踪能力,为后续”订单状态变化后企微通知用户”提供了基础数据和触发条件。
2. 数据库设计与状态模型
今天完成了订单关注模块的数据表设计,新增 portal_order_follow 表,用于保存用户与订单之间的关注关系。
表中核心字段包括:
sys_user_id:关注人用户 ID;order_number:关注订单号;status:关注状态,支持FOLLOWING、UNFOLLOWED、COMPLETED;last_order_status:上一次检测到的订单状态快照;last_est_delivery_time:上一次检测到的预计发货时间快照;is_manual_unfollow:是否由用户手动取消关注;followed_at:关注时间;unfollowed_at:取消关注或自动完成时间。
其中,UNIQUE KEY uk_user_order (sys_user_id, order_number) 用于保证同一用户对同一订单只能存在一条关注记录。
本次设计中的关键点是引入 is_manual_unfollow 字段。该字段解决了”查询即关注”和”用户手动取消”之间的冲突:用户手动取消后再次查询同一订单时,系统不会自动恢复关注,只有用户主动点击重新关注时才会将状态恢复为 FOLLOWING。
3. 后端接口与业务逻辑开发
今天完成了订单关注模块的后端主体开发,新增以下核心文件:
PortalOrderFollow.java:订单关注实体;PortalOrderFollowMapper.java:订单关注 Mapper;OrderFollowService.java:订单关注业务逻辑层;OrderFollowController.java:订单关注 REST 接口;OrderFollowScheduler.java:订单状态变更检测调度器。
本次实现的后端接口包括:
POST /api/portal/order-follow/{orderNumber}DELETE /api/portal/order-follow/{orderNumber}POST /api/portal/order-follow/{orderNumber}/resumeGET /api/portal/order-follow/{orderNumber}/follow-statusGET /api/portal/order-follow/list?page=1&size=20核心业务方法包括:
followOnQuery(auth, orderNumber):查询即关注,处理去重和手动取消检测;unfollow(auth, orderNumber):用户手动取消关注;resume(auth, orderNumber):用户取消后重新关注;getFollowStatus(auth, orderNumber):查询单个订单关注状态;listMyFollows(auth, page, size):查询当前用户关注列表;updateStatusSnapshot(orderNumber, status, time):更新订单状态快照;autoCompleteFollow(orderNumber, reason):订单到货、签收、取消或作废后自动解除关注;listDistinctActiveOrderNumbers():获取当前活跃关注订单号列表,用于调度器去重检测。
4. 调度器状态检测能力
今天完成了 OrderFollowScheduler 定时任务开发,用于定期检测已关注订单的状态变化。
调度器配置为:
首次延迟 1 分钟启动,之后每 2 小时执行一次调度器核心流程如下:
获取所有活跃关注订单号(去重) → 调用 OrderDeliveryService 查询最新订单状态 → 首次检测时记录初始快照 → 状态变更为已到货 / 已签收时自动完成关注 → 状态变更为取消 / 作废时自动完成关注 → 预计发货时间变化时记录日志并预留企微推送能力 → 订单状态变化时记录日志并预留企微推送能力当前调度器已完成状态检测和自动完成关注逻辑,企微消息推送模板已预留但尚未正式接入。
5. 前端交互改造
今天还完成了订单关注模块的前端交互接入,主要修改 src/main/resources/static/app.js。
前端改动包括:
- 在
queryOrderByTid()调用订单查询成功后,新增autoFollowOrder(data.tid)自动关注; - 在
showOrderResult()的订单结果卡片标题区域新增关注按钮; - 新增
autoFollowOrder()、toggleFollowOrder()、updateFollowButtons()三个函数; - 根据当前关注状态显示”关注”或”已关注”;
- 点击按钮时根据状态调用关注、取消关注或重新关注接口。
由于订单交付查询结果卡片并不是 Vue / React 组件,而是后端返回 HTML 后由前端拼接字符串渲染,因此本次采用在 showOrderResult() 的 HTML 模板字符串中插入按钮,并通过 setTimeout 绑定事件监听器的方式完成交互接入。
6. 测试验证与问题处理
今天完成了订单关注模块的 API 测试,共验证 11 项场景,结果均通过。
测试覆盖内容包括:
- 查询即关注;
- 重复查询去重;
- 多个订单同时关注;
- 关注列表查询;
- 单订单关注状态查询;
- 手动取消关注;
- 取消后状态验证;
- 取消后查询不自动关注;
- 重新关注;
- 到货自动完成关注;
- 空订单号校验。
同时完成了调度器验证。日志显示调度器能够正常启动并检测活跃关注订单:
[FollowScheduler] 开始状态变更检测[FollowScheduler] 检测 5 个订单[FollowScheduler] 检测完成: 5 订单, 0 变更, 0 自动完成该结果说明调度器已能正常获取关注订单并执行状态检测流程。
7. 开发难点与解决方案
7.1 后端渲染 HTML 中嵌入交互按钮
订单交付查询模块当前不是标准组件化页面,查询结果由后端生成 HTML,再由前端拼接显示。因此无法直接使用 Vue / React 的方式新增关注按钮。
处理方式是在 showOrderResult() 函数中直接向卡片 header 的 HTML 模板字符串插入关注按钮,并在渲染后绑定事件。该方式虽然不是长期最优解,但适合当前非组件化页面的快速迭代。
7.2 查询即关注与手动取消互斥
查询即关注如果不加限制,会导致用户取消关注后再次查询又被自动关注,影响用户操作意愿。
处理方式是引入 is_manual_unfollow 标记。用户取消关注时将该字段置为 1;再次查询时如果检测到该标记,则不自动关注,只返回提示。用户只有主动点击重新关注按钮,才会恢复关注状态。
7.3 订单状态检测缺少实时推送机制
当前订单状态数据来自 productsys 库,没有实时状态变更推送机制。调度器需要主动轮询关注订单并对比状态快照。
处理方式是在关注表中保存 last_order_status 和 last_est_delivery_time 两个快照字段,调度器每 2 小时查询最新状态并与快照对比。首次运行只记录快照,后续发现变化再执行自动完成或推送逻辑。
7.4 测试环境数据不完整
本地 productsys 使用的是历史快照库,部分订单只有订单头,没有完整产品行数据,导致订单交付查询结果不完整。
处理方式是通过 SQL 查询筛选出具备完整 JOIN 数据的订单号进行测试,并为测试用户增加查看全部订单交付数据的白名单授权,避免权限校验影响功能验证。
7.5 订单交付查询权限校验
订单交付查询存在 CRM 业绩链权限校验,测试用户不在订单业绩链中时会返回”暂未关联到您的名下”。
处理方式是在 portal_order_delivery_view_all_grant 表中为测试用户添加授权,使其可以查看全部订单交付数据,从而完成订单关注模块的测试验证。
三、今日工作产出
- 完成订单关注模块后端核心能力开发,包括关注、取消关注、重新关注、状态查询和关注列表查询。
- 完成
portal_order_follow数据表设计,支持关注状态、手动取消标记、订单状态快照和预计发货时间快照。 - 完成
OrderFollowService、OrderFollowController、OrderFollowScheduler等核心类开发。 - 完成订单交付查询结果卡片前端改造,新增关注 / 已关注按钮和对应交互逻辑。
- 完成查询即关注逻辑,并通过
is_manual_unfollow实现手动取消后不再自动关注。 - 完成订单状态变更定时检测能力,支持到货、签收、取消、作废等状态下自动完成关注。
- 完成 11 项 API 测试,覆盖关注、去重、取消、恢复、状态查询、关注列表、自动完成和参数校验等场景。
- 完成调度器首轮验证,确认调度器能够获取活跃关注订单并完成状态检测流程。
- 沉淀《订单关注模块 — 开发完成文档》,记录功能规则、数据库设计、接口说明、前后端实现、开发难点、测试结果和待完成事项。
- 为后续企微消息推送、物流单号复制、反馈闭环等能力预留扩展基础。
四、遇到的问题与解决情况
1. 后端 HTML 渲染页面不便接入交互组件
- 问题:订单交付查询结果卡片由后端生成 HTML,前端没有完整组件化结构,无法直接以 Vue / React 方式添加按钮。
- 处理:在
showOrderResult()拼接 HTML 时直接插入关注按钮,并在渲染后绑定点击事件。 - 结果:在不大规模重构页面的情况下完成了关注按钮接入。
2. 查询即关注与手动取消存在逻辑冲突
- 问题:如果每次查询都自动关注,用户手动取消后再次查询会被重新关注,违背用户操作预期。
- 处理:新增
is_manual_unfollow字段,用户手动取消后再次查询不自动关注,只允许通过/resume接口主动恢复。 - 结果:实现了查询即关注和手动取消之间的互斥控制。
3. 调度器需要判断订单状态变化
- 问题:订单系统没有实时推送机制,无法即时感知订单状态变化。
- 处理:通过调度器定时轮询关注订单,并在关注表中保存上次订单状态和预计发货时间快照,用于后续对比。
- 结果:完成了基于轮询和快照比对的状态变化检测机制。
4. 测试环境订单数据存在缺失
- 问题:本地 productsys 数据较旧,部分订单缺少产品行数据,影响测试。
- 处理:通过 SQL 查找具有完整 JOIN 数据的订单号,并使用这些订单进行验证。
- 结果:解决了测试数据不可用导致的功能验证问题。
5. 测试用户受订单交付权限限制
- 问题:测试用户不在部分订单业绩链中,订单交付查询会被权限拦截。
- 处理:在查看全部订单交付数据授权表中加入测试用户。
- 结果:绕过测试环境权限限制,保证订单关注功能可以正常验证。
五、明日计划
- 继续完善订单关注模块与企微消息推送的衔接,推进订单状态变更后的通知能力。
- 补充订单状态变更、预计发货时间变更、已发货、已到货等场景下的推送模板与触发策略。
- 优化前端关注按钮的视觉样式和交互提示,提高用户对”自动关注”和”手动取消”的理解。
- 补充引导文案,例如”关注后可接收订单状态变更提醒”等说明。
- 继续验证调度器多轮执行效果,观察状态快照更新和去重逻辑是否稳定。
- 评估物流单号一键复制和反馈闭环能力的实现方式。
- 根据后续测试反馈继续修复订单关注模块中的边界问题。
六、总结
今日主要围绕订单关注模块展开开发工作,完成了从数据库设计、后端接口、业务逻辑、状态检测调度器到前端按钮交互的完整功能闭环,并通过 11 项 API 测试和调度器验证确认当前能力可用。该模块补齐了订单交付查询后的持续跟踪能力,使用户能够关注订单并为后续订单状态变更企微推送提供数据基础。同时,今天也处理了后端 HTML 页面交互接入、查询即关注与手动取消互斥、测试环境数据不完整和权限校验等问题,为后续继续完善消息推送、物流复制和反馈闭环能力奠定了基础。