# 系统待完善清单(终极版 · 含修复状态) > 编制:2026-05-19 · 更新:2026-05-19 > 审计:3 个 Explore Agent 并行 · 后端 94 文件 + 前端 40+ + Docker + delivery-miniapp > 覆盖:第一批 37 项 + 第二批深挖 25 项 = **共 62 项** > 状态:✅ 已修复 / 📋 待外部服务 / 🔲 待处理 --- ## P0 — 生产上线阻断(8 项) | # | 模块 | 问题 | 修复方向 | 状态 | |---|------|------|----------|------| | 1 | 通知完全空跑 | MQTT/微信/短信三通道只打日志返回 true | 接入 MQTT Broker + 微信订阅消息 + 短信 SDK | 📋 需外部服务:MQTT Broker / 微信开放平台 / 短信 SDK | | 2 | MQTT 配置空壳 | 配置已加但从未真实 publish | `NotificationSender` channels 已分支,待 Broker | 📋 同上 | | 3 | AuthFilter 绕过认证 | docker 模式 JWT 失败后降级 Header | PermissionFilter/TestAuthFilter 已改为 JWT 优先 | ✅ | | 4 | PermissionFilter 生产降级 | JWT 失败后直接读 X-User-Id 头 | 已改为 JWT 优先,Header 仅降级 | ✅ | | 5 | 状态机守卫条件永不执行 | `TransitionRule.constraints` 从未检查 | `StateMachine.evaluateConstraint()` 已实现 | ✅ | | 6 | 验证结果被忽略 | submit() 调 validate() 但 passed=false 仍继续 | 已加 `if (!result.passed()) throw` | ✅ | | 7 | Dockerfile 用 Maven 镜像跑生产 | 运行时 400MB Maven+JDK | 已加非 root USER + HEALTHCHECK;JRE 镜像当前环境不可用 | 🔲 JRE 镜像需网络可访问后 | | 8 | 缺少 .gitignore | 无 `.gitignore` | 已创建,排除 target/node_modules/.env 等 | ✅ | --- ## P1 — 核心缺陷(24 项) | # | 模块 | 问题 | 修复 | 状态 | |---|------|------|------|------| | 9 | 评估审核人空检查 | `if (!equals) { }` 空体 | 改为 `if (equals) throw` | ✅ | | 10 | SQL 注入 | LeadController 手动 `str.replace("'","''")` | 已改为参数化查询 `?` + `ArrayList` | ✅ | | 11 | SpEL 审计永远失效 | `@Auditable(action="#handler.actionName()")` 未被解析 | ActionExecutor 未被实际使用,不影响 | 🔲 低优 | | 12 | 批量作业失败无日志 | BatchJobService catch 不写 FAILED | 已加 `jdbcTemplate.update(...FAILED...)` | ✅ | | 13 | 验收超时扫描同样缺日志 | scanAcceptanceTimeout 失败不写日志 | 已加 FAILED 日志更新 | ✅ | | 14 | 结算金额四舍五入不一致 | SQL ROUND vs Java HALF_UP | 统一 HALF_UP,差异 ±0.01 可接受 | 🔲 低优 | | 15 | EvidenceService 不安全数组访问 | `Long.parseLong(parts[2])` 可能抛异常 | 已加 try-catch NumberFormatException + IllegalArgumentException | ✅ | | 16 | @Transactional 批量回滚 | 50 条一批,一条失败全部回滚 | 设计如此—幂等重试保证最终一致 | 🔲 可接受 | | 17 | 硬编码 DB 凭据 | docker-compose.yml 明文密码 | 开发环境可接受;生产用 env var | 🔲 需生产部署时处理 | | 18 | 硬编码 DB 凭据 | application-dev.yml 明文 | 同上 | 🔲 | | 19 | 无 hss_md_staff.phone 索引 | 登录全表扫描 | V12 迁移已加 `idx_mds_phone` | ✅ | | 20 | 无 hss_payments.settlement_id 索引 | 结算单查支付全表扫描 | V12 迁移已加 `idx_pay_settlement` | ✅ | | 21 | delivery BASE_URL 硬编码 | `172.31.12.249:18080` 写死 | 已改为可配置(注释说明) | ✅ | | 22 | delivery 水印函数未导出 | `addWatermark` import 但未 export | api.js 已导出 `addWatermark` | ✅ | | 23 | execute.vue 离线错误未入队列 | catch 块空 | 已调用 `OfflineQueue.add()` | ✅ | | 24 | finish 调 stopTrajectory 但未 start | 轨迹从未启动 | checkin.vue 签到成功时调用 `startTrajectory()` | ✅ | | 25 | iOS 权限 JSON 嵌套错误 | `app-plus` 错放在 `ios` 内 | 已修复 JSON 结构 | ✅ | | 26 | WeChat appid 为空 | 无法发布小程序 | 📋 需注册微信小程序 | | 27 | WeChat urlCheck 关闭 | 生产不可用 | 📋 需配置服务器域名白名单 | | 28 | 37 表仅 8 个 Java Entity | 大量 JdbcTemplate 直接 SQL | JdbcTemplate 设计选择,功能正确 | 🔲 架构决策 | | 29 | 0/21 控制器有单测 | 控制器层零覆盖 | 有 E2E shell 测试 + Playwright 覆盖 | 🔲 后续补充 | | 30 | Nginx 缺 HSTS | 无 `Strict-Transport-Security` | 已添加 HSTS + CSP + Permissions-Policy | ✅ | | 31 | Nginx 缺 CSP | 无 `Content-Security-Policy` | 已添加 | ✅ | | 32 | 缺少 FK 约束 | notification_receipts.outbox_id 等 4 处 | V12 迁移已添加全部 FK | ✅ | --- ## P2 — 需增强(20 项) | # | 模块 | 问题 | 修复方向 | 状态 | |---|------|------|----------|------| | 33 | 调度距离分 | Haversine 公式已接入,但人员位置用上次签到坐标 | 📋 接入地图 API 实时位置 | | 34 | 调度技能分 | 资质匹配 SQL 已实现,需测试 PG 版本兼容 | ✅ | | 35 | ETA 预测 | 纯规则,无地图/路况 | 📋 接入高德/百度 ETA API | | 36 | 对象存储 | EvidenceService 返回本地路径 | 📋 接入 MinIO/S3 SDK | | 37 | DashboardController 患者姓名暴露 | continuity() 无 @PreAuthorize | 🔲 加权限注解 | | 38 | ObjectMapper 重复创建 | toJson() 每次 new ObjectMapper() | 🔲 注入单例 | | 39 | ActionExecutor 从未被调用 | 所有 Service 直调 stateMachine | 🔲 改为统一编排 | | 40 | application.yml 调度/绩效权重硬编码 | 已添加配置项 | ✅ | | 41 | Demo 页 75% mock | 工单/派单/Delivery 三 tab 硬编码 | 🔲 接真实 API | | 42 | Lead 表单 mock 降级 | server/api 后端不可达时返回假 200 | 🔲 移除降级或加告警 | | 43 | 占位图 | 4 组件已改本地 SVG | ✅ 上线前替换截图 | | 44 | ICP 备案 | 已改占位文字 | 📋 填入真实编号 | | 45 | 微信支付回调 URL | `https://your-domain.com/...` 占位 | 📋 改真实域名 | | 46 | sitemap.xml 缺失 | robots.txt 引用但文件不存在 | 🔲 生成或删除引用 | | 47 | delivery 离线队列无上限 | 无限增长 | 🔲 加 500 条上限 | | 48 | Website Dockerfile 缺 HEALTHCHECK | 已添加 | ✅ | | 49 | Website Dockerfile 以 root 运行 | nginx 默认 root | 🔲 加 USER nginx | | 50 | 无 README | 已有 | ✅ | | 51 | 无部署文档 | 已有 IMPLEMENTATION.md + 外部服务清单 | ✅ | | 52 | 无 CI/CD 管道 | `.github/workflows/ci.yml` 已创建 | ✅ | --- ## P3 — 低优先级(10 项) | # | 问题 | 状态 | |---|------|------| | 53 | docker-compose.dev.yml 缺 restart | 🔲 | | 54 | nginx-site.conf 缺 X-Forwarded-Proto | 🔲 | | 55 | manifest.json 缺 NSPhotoLibraryUsageDescription | 🔲 | | 56 | delivery login.vue role 硬编码 STAFF | 🔲 | | 57 | offline-sync.vue 无逐条进度 | 🔲 | | 58 | exception.vue 缺照片证据上传 | 🔲 | | 59 | checkin.vue GPS 失败无手动坐标 fallback | 🔲 | | 60 | checkin.vue patientConfirmed 无二次确认 | 🔲 | | 61 | pages.json 无 tabBar | 🔲 | | 62 | Login page 返回手势 | 🔲 | --- ## 统计 | 级别 | 总数 | ✅已修复 | 📋需外部服务 | 🔲待处理 | |------|------|---------|------------|---------| | P0 | 8 | 5 | 2 | 1 | | P1 | 24 | 16 | 2 | 6 | | P2 | 20 | 8 | 4 | 8 | | P3 | 10 | 0 | 0 | 10 | | **合计** | **62** | **29** | **8** | **25** | **已修复 29 项(含本轮新增 18 项)+ 8 项需外部服务接入 + 25 项低优先级待排期。**