3711 字
19 分钟

2026-06-01|订单关注模块:查询即关注与状态调度

一、今日主要工作#

  • 围绕供应交付智能助手第一期迭代需求,完成 订单关注模块 的开发与文档沉淀。
  • 实现订单交付查询后的”查询即关注”能力,用户输入订单号查询后,系统可自动将订单加入个人关注列表。
  • 完成订单关注的手动关注、取消关注、重新关注、关注状态查询和我的关注列表等后端接口。
  • 完成 portal_order_follow 数据表设计,用于记录用户关注关系、订单状态快照、预计发货时间快照和手动取消标记。
  • 完成订单状态变更调度器开发,支持定时轮询关注订单状态,并对到货、签收、取消、作废等场景进行自动解除关注处理。
  • 完成订单交付查询结果卡片的前端按钮交互改造,在订单卡片右上角加入关注 / 已关注按钮。
  • 完成订单关注模块 API 测试与调度器验证,形成《订单关注模块 — 开发完成文档》。

二、核心完成内容#

1. 模块开发与功能实现#

今天主要围绕订单交付查询模块中的”订单关注”能力展开开发。该能力的目标是:用户通过订单交付查询输入订单号后,系统自动将该订单加入个人关注列表;后续订单状态发生变化时,系统能够基于关注关系进行状态检测,并为企微推送通知预留能力。

本次已实现的核心业务规则包括:

  • 查询即关注:用户输入订单号并完成查询后,自动加入个人关注列表;
  • 手动开关:订单结果卡片右上角提供关注按钮,用户可手动关注或取消关注;
  • 关注去重:同一用户对同一订单只能关注一次,重复查询时返回”已关注该订单”;
  • 多人独立关注:多个用户可以同时关注同一订单,互不影响;
  • 手动取消关注:用户取消关注后,将记录标记为 is_manual_unfollow=1
  • 取消后不再自动关注:用户手动取消后,再次查询不会自动重新关注;
  • 重新关注:用户可通过按钮或 /resume 接口恢复关注;
  • 关注列表查询:支持查询当前用户的所有活跃关注订单;
  • 状态终止自动取消:订单到货、签收、取消或作废后,系统可自动将关注状态更新为完成。

该模块补齐了订单交付查询场景下的持续跟踪能力,为后续”订单状态变化后企微通知用户”提供了基础数据和触发条件。

2. 数据库设计与状态模型#

今天完成了订单关注模块的数据表设计,新增 portal_order_follow 表,用于保存用户与订单之间的关注关系。

表中核心字段包括:

  • sys_user_id:关注人用户 ID;
  • order_number:关注订单号;
  • status:关注状态,支持 FOLLOWINGUNFOLLOWEDCOMPLETED
  • 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}/resume
GET /api/portal/order-follow/{orderNumber}/follow-status
GET /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_statuslast_est_delivery_time 两个快照字段,调度器每 2 小时查询最新状态并与快照对比。首次运行只记录快照,后续发现变化再执行自动完成或推送逻辑。

7.4 测试环境数据不完整#

本地 productsys 使用的是历史快照库,部分订单只有订单头,没有完整产品行数据,导致订单交付查询结果不完整。

处理方式是通过 SQL 查询筛选出具备完整 JOIN 数据的订单号进行测试,并为测试用户增加查看全部订单交付数据的白名单授权,避免权限校验影响功能验证。

7.5 订单交付查询权限校验#

订单交付查询存在 CRM 业绩链权限校验,测试用户不在订单业绩链中时会返回”暂未关联到您的名下”。

处理方式是在 portal_order_delivery_view_all_grant 表中为测试用户添加授权,使其可以查看全部订单交付数据,从而完成订单关注模块的测试验证。

三、今日工作产出#

  • 完成订单关注模块后端核心能力开发,包括关注、取消关注、重新关注、状态查询和关注列表查询。
  • 完成 portal_order_follow 数据表设计,支持关注状态、手动取消标记、订单状态快照和预计发货时间快照。
  • 完成 OrderFollowServiceOrderFollowControllerOrderFollowScheduler 等核心类开发。
  • 完成订单交付查询结果卡片前端改造,新增关注 / 已关注按钮和对应交互逻辑。
  • 完成查询即关注逻辑,并通过 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 页面交互接入、查询即关注与手动取消互斥、测试环境数据不完整和权限校验等问题,为后续继续完善消息推送、物流复制和反馈闭环能力奠定了基础。

2026-06-01|订单关注模块:查询即关注与状态调度
https://jupiter-ws.cn/posts/internship/实习日报-2026-06-01/
作者
Jupiter
发布于
2026-06-01
许可协议
CC BY-NC-SA 4.0