- 新增电工APP独立鉴权中间件与登录注册接口 - 新增定时任务管理模块,支持任务配置、执行日志与手动触发 - 新增运维费定价与电工派单成本价目管理 - 新增电工资质证照管理与到期提醒定时任务 - 完善数据库实体与DTO校验,优化权限控制
7.5 KiB
7.5 KiB
Tasks
change-id:
add-om-pricing-and-worker-registry依赖顺序:Task 1 → 2 → (3,4,5,6,7 并行) → 8 → 9 → 10
-
Task 1: 数据库迁移与种子数据(全部后续任务的前置)
- SubTask 1.1: 新建
database/migrations/20261001_om_worker_registry.sql- ALTER
worker增加password_hash/audit_status(默认 0, NOT NULL) /audit_remark/audit_by/audit_at/last_login_at - CREATE TABLE
worker_cert(含worker_idIDX、expire_dateIDX、UNIQUE(worker_id,cert_type,cert_no)) - CREATE TABLE
service_price(含price_codeUNIQUE、(price_mode,status) IDX) - ALTER
dispatch_price增加price_mode(默认 1, NOT NULL) /unit/status(默认 1, NOT NULL) /remark/updated_at - CREATE TABLE
sys_notice(含receiver_idIDX、UNIQUE(notice_type,biz_id,receiver_id)) - UPDATE
sys_menuSETmenu_type=1WHERE id=3;INSERT 菜单 id 34-46(3 个页面菜单 + 10 个按钮权限)+ ADMIN 角色绑定 +setval('sys_menu_id_seq', …) - INSERT 新字典:
om_service_type/om_price_mode/om_price_unit/worker_cert_type/worker_audit_status - 全部语句使用
IF NOT EXISTS/ON CONFLICT,保证可重复执行
- ALTER
- SubTask 1.2: 同步修订
database/db_seed.sql(菜单 / 字典 / 角色绑定与迁移脚本一致,更新末尾计数注释) - SubTask 1.3: 执行迁移脚本验证可跑通且可重复执行
- SubTask 1.1: 新建
-
Task 2: 后端实体层
- SubTask 2.1: 修改
server/src/entity/worker.entity.ts(补 6 个字段 + 索引) - SubTask 2.2: 修改
server/src/entity/dispatch_price.entity.ts(补 5 个字段,开启updated_at) - SubTask 2.3: 新建
server/src/entity/worker_cert.entity.ts - SubTask 2.4: 新建
server/src/entity/service_price.entity.ts - SubTask 2.5: 新建
server/src/entity/sys_notice.entity.ts
- SubTask 2.1: 修改
-
Task 3: 客户运维价目后端(依赖 Task 2)
- SubTask 3.1: 新建
dto/service_price.dto.ts(创建 / 更新 / 查询 DTO +class-validator校验) - SubTask 3.2: 新建
service/service_price.service.ts(分页搜索筛选、price_code生成FW+YYYYMMDD+3位、白名单更新、增删改) - SubTask 3.3: 新建
controller/service_price.controller.ts(/api/service-prices,统一返回结构)
- SubTask 3.1: 新建
-
Task 4: 电工派单成本价目后端(依赖 Task 2)
- SubTask 4.1: 新建
dto/dispatch_price.dto.ts - SubTask 4.2: 新建
service/dispatch_price.service.ts(分页 + 关键词 +dispatch_type/price_mode/status筛选 + CRUD +price_code唯一冲突友好提示) - SubTask 4.3: 新建
controller/dispatch_price.controller.ts(/api/dispatch-prices)
- SubTask 4.1: 新建
-
Task 5: 电工登记与资质审核后端(依赖 Task 2)
- SubTask 5.1: 扩展
dto/worker.dto.ts(登记创建 / 更新 / 审核 / 列表查询 / 证书行 DTO) - SubTask 5.2: 扩展
service/worker.service.ts- 列表分页 + 关键词 +
status/auditStatus/certStatus筛选,批量聚合证书计算「资质状态」(避免 N+1) - KPI 统计(总数 / 待审核 / 临期 / 已过期)
- 详情(含证书列表)
- 创建(手机号唯一、
audit_status=0、可选生成默认密码 bcrypt)、更新、删除(级联删证书 + 派单引用校验) - 审核通过 / 驳回(校验驳回理由必填、写
audit_by/audit_at/cert_verified) - 证书行增删改(续期 / 删除时清理该证书未读通知)
- 保持
/options、/recommend现有逻辑并按 Assumption 7 收紧为audit_status=1 AND status=1
- 列表分页 + 关键词 +
- SubTask 5.3: 扩展
controller/worker.controller.ts(/api/workers增补 list/detail/create/update/delete/audit/certs 接口,静态路径在动态路径之前)
- SubTask 5.1: 扩展
-
Task 6: 站内通知后端 + 定时任务(依赖 Task 1、2)
- SubTask 6.1:
server/package.json新增依赖@midwayjs/cron并安装 - SubTask 6.2: 新建
service/notice.service.ts(本人通知分页、未读数、单条 / 全部已读、ADMIN 用户查询、证书到期扫描 + 幂等生成、按证书清理通知) - SubTask 6.3: 新建
controller/notice.controller.ts(/api/notices、/api/notices/unread-count、/api/notices/:id/read、/api/notices/read-all) - SubTask 6.4: 新建
task/cert_expire.task.ts(@Cron每日 08:00,调用notice.service扫描生成)
- SubTask 6.1:
-
Task 7: 电工 APP 后端接口(依赖 Task 5)
- SubTask 7.1: 扩展
util/token.ts(generateWorkerToken/verifyWorkerToken) - SubTask 7.2: 新建
middleware/worker_auth.middleware.ts(match=['/api/worker-app/*']、ignore=['/api/worker-app/auth/*'],写ctx.state.worker) - SubTask 7.3: 修改
middleware/auth.middleware.ts与middleware/rbac.middleware.ts(忽略/api/worker-app/*;新增/api/service-prices、/api/dispatch-prices、/api/workers权限映射;ignore增加白名单/api/workers/options、/api/workers/recommend) - SubTask 7.4: 新建
dto/worker_app.dto.ts、service/worker_app.service.ts、controller/worker_app.controller.ts(注册 / 登录 / 资料 / 证书 CRUD / 重新提交审核 / 通知,全部以workerId为数据边界)
- SubTask 7.1: 扩展
-
Task 8: 前端 API 层(依赖 Task 3、4、5、6)
- SubTask 8.1: 新建
client/src/api/servicePrice.ts - SubTask 8.2: 新建
client/src/api/dispatchPrice.ts - SubTask 8.3: 新建
client/src/api/workerRegistry.ts(登记 / 审核 / 证书 / KPI 统计) - SubTask 8.4: 新建
client/src/api/notice.ts
- SubTask 8.1: 新建
-
Task 9: 前端页面与路由(依赖 Task 8)
- SubTask 9.1: 新建
client/src/views/dispatch/price/index.vue(运维费定价) - SubTask 9.2: 新建
client/src/views/dispatch/cost/index.vue(电工派单成本价) - SubTask 9.3: 新建
client/src/views/dispatch/worker/index.vue(电工登记管理:KPI 卡 + 列表 + 编辑弹窗含证书子表与图片上传 + 审核弹窗) - SubTask 9.4: 修改
client/src/router/index.ts(/dispatch重定向到/dispatch/price,新增 3 条子路由与meta.permission)
- SubTask 9.1: 新建
-
Task 10: 仪表盘提醒区块与消息中心(依赖 Task 8)
- SubTask 10.1: 修改
client/src/layouts/index.vue(消息铃铛 + 未读红点角标 + 消息中心抽屉 + 跳转) - SubTask 10.2: 修改
client/src/views/dashboard/index.vue(新增「电工资质到期提醒」区块,展示临期 / 已过期证书清单并可跳转)
- SubTask 10.1: 修改
-
Task 11: 联调与验证
- SubTask 11.1: 后端
yarn dev启动无编译错误,逐条走通 AC-1 ~ AC-11 - SubTask 11.2: 前端
yarn dev启动,人工验证 AC-5、AC-7、AC-9(菜单可见性) - SubTask 11.3: 人工触发定时任务验证 AC-6 幂等
- SubTask 11.1: 后端
-
Task 12: 修复验证阶段发现的阻断性缺陷(Task 11 追加)
- SubTask 12.1: 修复
WorkerAuthMiddleware同时声明match与ignore导致 Midway 抛MIDWAY_10001、全站接口 500 的问题(改为仅match,登录/注册路径在resolve()内放行)
- SubTask 12.1: 修复
Task Dependencies
- Task 2 依赖 Task 1(表结构必须先存在)
- Task 3 / Task 4 / Task 5 依赖 Task 2,彼此无依赖,可并行
- Task 6 依赖 Task 1、Task 2
- Task 7 依赖 Task 5(复用 worker 服务)与 Task 6(通知复用)
- Task 8 依赖 Task 3、4、5、6(接口契约已定)
- Task 9、Task 10 依赖 Task 8,彼此无依赖,可并行
- Task 11 依赖全部