Files
Home-Care/docs/待完善清单_终极版.md
comclib 4a2eb09606
Some checks failed
CI / backend (push) Has been cancelled
CI / website (push) Has been cancelled
chore: 文档整理 — 移动至 docs/ 目录, 更新 IMPLEMENTATION_PLAN.md
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 11:52:03 +08:00

111 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 系统待完善清单(终极版 · 含修复状态)
> 编制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 + HEALTHCHECKJRE 镜像当前环境不可用 | 🔲 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 项低优先级待排期。**