2026-10-13.md 6.3 KB

2026-10-13:移动端工单管理、待办、详情与操作接入

目标与结论

  • 将移动端“消息-待办工单”“我的-工单管理”、工单详情和全流程操作由静态数据改为真实接口。
  • 新增无需 PC 查询权限的移动端专用列表、待办、详情接口;所有入口统一执行参与人、待派单池、公司设备类型和无设备工单规则。
  • 复用 PC 工单状态流转接口;权限合并为 process 与 audit 后,服务端补充指定责任人、指定核验人、公司范围及派单候选人权限校验。

主要变更

  • 后端 WorkOrderController 新增 /api/ops/workOrder/mobile、/mobile/pending、/mobile/{orderId}、/mobile/assignable/users。
  • 后端 WorkOrderServiceImpl 增加移动端数据范围查询、详情防越权、设备公司范围判断、无设备工单限制、核验人校验和候选人权限过滤。
  • 移动端新增 src/services/workorders.ts,接入列表、详情、八类操作及 MinIO 上传。
  • 消息页显示真实待办前四条及徽标;我的工单支持状态、关键字和翻页;详情显示设备、故障、附件、延期、日志,并按状态/角色/权限展示操作按钮。
  • 操作抽屉接入责任人/核验人选择、附件上传和真实提交;个人中心待办工单数量改为真实数据。

验证

  • 后端 mvn -pl zksy-admin -am -DskipTests compile:通过。
  • 工单专项测试 WorkOrderServiceImplTest:41 项通过。
  • 后端全量测试:205 项中 1 个既有 AlarmLifecycleServiceTest 日志文案断言失败,与工单改动无关;本次初次运行暴露的工单测试均已适配并通过专项测试。
  • 移动端 npm run type-check、npm run build:h5、npm run build:mp-weixin:通过。

处理中工单禁止重复处置

  • 工单处置状态范围统一为“已接单、延期中”;工单已进入“处理中”后,详情页不再展示“工单处置”。
  • “处理中”工单仍可按既有规则申请延期或提交验收。
  • 后端 canProcess 同步排除“处理中”,即使绕过前端直接调用处置接口也会被拒绝;PC 端原有按钮规则已符合,仅同步注释说明。
  • WorkOrderStatusEnumTest 与 WorkOrderServiceImplTest 共 44 项通过,后端编译、移动端类型检查、H5 和微信小程序构建通过。

部署与联调注意

  • 需同步部署管理后端和移动端;权限合并 SQL 沿用后端已有 migration_work_order_perms_merge.sql。
  • 需执行后端 migration_work_order_drop_dept_id.sql,删除 app_user.work_order.dept_id 并补充 create_by、verify_user 查询索引。
  • 真实账号的部门祖先链必须包含 101/102/103 之一,设备类型链必须完整,否则有设备工单按规则拒绝展示。
  • 派单责任人必须有 ops:workOrder:process,核验人必须有 ops:workOrder:audit。

PC 工单数据权限与 dept_id 清理

  • WorkOrder、WorkOrderVO、Mapper、创建/派单流程及 WebSocket 工单提醒不再读写 deptId/dept_id。
  • PC GET /api/ops/workOrder 与 /statusCount 不再使用部门 DataScope;普通用户仅查询 create_by=当前用户 OR receive_user=当前用户 OR verify_user=当前用户,超级管理员不追加范围条件。
  • WebSocket 工单提醒同步改为创建人、责任人、核验人参与人可见,超级管理员全量;待派单池继续由移动端专用接口按公司设备范围查询,推送不凭派单权限跨公司放开。
  • 后端编译通过;WorkOrderServiceImplTest 43 项、DeviceStatusCockpitWebSocketHandlerTest 16 项全部通过。

移动端派单默认核验人

  • 工单详情打开“派单”操作时,若当前登录账号在合法核验人候选列表中,默认选中当前账号;字段仍可点击改选其他核验人。
  • 核验人字段提示调整为“核验人(默认当前账户,可选择其他)”。
  • 派单表单“计划完成时间”改为单个年月日时分五列选择控件,不再手工输入;接口值统一输出 yyyy-MM-dd HH:mm:00。
  • 移动端 npm run type-check、npm run build:h5、npm run build:mp-weixin 通过。

移动端列表刷新现状审计

  • 当前没有任何列表页接入 onPullDownRefresh,因此尚未统一支持下拉刷新。
  • 仅“我的-工单管理”和“通知公告”已使用 onReachBottom 实现上拉分页;通讯录为接口全量加载,其余预警、设备、故障通知、巡查、事件、方案、审核和登录日志等列表多为本地静态数据,尚无服务端分页。
  • 消息首页不存在定时轮询;原来通过 onShow 在每次重新显示时请求待办工单和公告,现改为 onLoad 仅首次加载。公告 swiper interval 仅控制轮播动画,不触发接口。
  • 本次消息首页调整后,移动端 npm run type-check 通过。

移动端接口列表统一刷新与通讯录范围(最终实现)

  • 用户最终确认:已接入真实接口且适合分页的移动端列表采用“首次进入加载 + 用户下拉刷新 + 触底上拉分页”,页面重新显示不自动重复请求,禁止定时轮询;通讯录明确作为全量加载的例外,不分页。
  • 消息首页待办工单、通知公告列表、我的工单、通讯录均已接入原生下拉刷新;消息首页待办、通知公告、我的工单支持触底继续请求下一页,通讯录一次性加载全部联系人。消息首页公告轮播只控制展示动画,不触发接口轮询。
  • 通知公告和我的工单由 onShow 改为 onLoad 首次请求;返回页面不会自动刷新,需要用户下拉刷新。
  • 通讯录最终取消部门范围限制:一次性查询全部状态正常且未删除的用户,并排除当前登录用户和超级管理员(固定 user_id=1);无部门用户仍可返回。GET /system/user/contacts 不分页,移动端在全量结果上做姓名、手机号、部门、职位及拼音本地搜索。
  • 尚未接真实接口的预警、设备、巡查、应急等静态列表未在本次改造范围内,后续接入接口时直接沿用同一刷新规范。

验证

  • 后端通讯录 Mapper 契约测试:1 项通过。
  • 后端 mvn -pl zksy-admin -am -DskipTests compile:通过。
  • 移动端 npm run type-check、npm run build:h5、npm run build:mp-weixin:通过。