瀏覽代碼

工单管理权限整合

zengy 1 周之前
父節點
當前提交
349ace338c
共有 1 個文件被更改,包括 64 次插入 和 0 次删除
  1. 64 0
      memory/sessions/2026-10-13.md

+ 64 - 0
memory/sessions/2026-10-13.md

@@ -0,0 +1,64 @@
+# 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`:通过。
+
+## 部署与联调注意
+
+- 需同步部署管理后端和移动端;权限合并 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`:通过。