Files
Home-Care/hss-home-service/待完善清单.md
comclib 01e1034cc1 feat: 全系统优化 — 并发控制 + 冗余清理 + 数据流修复 + 全面测试
核心修复:
- 状态机加 SELECT FOR UPDATE 行锁,消除并发竞态
- hss_md_staff 加 role 列,登录从数据库读取真实角色
- 申请重复校验排除自身,全流程 20 步闭环通过
- 派单 SQL 修复 + 支付状态机过渡 + 完成服务 plan_item_id 修复

并发控制新增:
- RedisLockService (SET NX PX + Lua 安全解锁)
- RateLimiterService (Redis 滑动窗口 + API 拦截器)
- TransactionIsolationConfig (SERIALIZABLE for 支付回调)
- MqttPublisher (异步队列 + JDK TCP 探测)
- ObjectStorageService (AWS SigV4 预签名, 纯 JDK)

冗余清理:
- 删除 6 个死代码文件 (~620 行)
- hutool-all → JDK MessageDigest, 去 MapStruct, 去 jsr310
- haversine 提取到 GeoUtil, count/round 提取到 JdbcUtil
- 创建 platform layout 组件

前端修复:
- 登录页移除角色选择器, 由后端 JWT 返回
- 移除 ClientOnly 包裹, 页面正常渲染
- SPA fallback Nginx 配置修复

Docker: 运行时镜像 eclipse-temurin:17-jre-jammy (缩小 ~300MB)

文档: 新增系统实现与修复报告.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 11:48:07 +08:00

75 lines
4.8 KiB
Markdown
Raw 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
> 审计范围:后端 94 文件 + 前端 40+ 文件 + Docker/部署 + delivery-miniapp 12 页面
> 共发现 **37 项**待完善问题
---
## P0 — 阻碍生产上线的关键缺陷8项
| # | 模块 | 文件 | 行 | 问题 | 修复方向 |
|---|------|------|-----|------|----------|
| 1 | 通知全部空跑 | `NotificationSender.java` | 93 | `doSend()` 仅写日志MQTT/微信/短信完全不发送 | 接入 MQTT Broker + 微信模板消息 + 短信 SDK |
| 2 | MQTT 配置空壳 | `MqttConfig.java` | 8 | 空 `@Configuration`,无任何 Bean | 配置 Broker 地址/认证/Topic/客户端 |
| 3 | JWT 认证未启用 | `PermissionFilter.java` | 26 | 从 Header 读 `X-User-Id`,不验证 JWT 签名 | 解析 `Authorization: Bearer` + 验签 |
| 4 | TestAuthFilter 开放所有请求 | `TestAuthFilter.java` | 21 | dev/docker 模式零验证 | 生产必须禁用此 Filter |
| 5 | 批量结算硬编码 70% 抵扣 | `BatchJobService.java` | 108 | 固定 `* 0.7`,不读价目表 | 从 `hss_md_price_rules` 查询 |
| 6 | 运行时使用 Maven 镜像非JRE | `Dockerfile` | 9 | `FROM maven:3.9-eclipse-temurin-17` | 改为 `eclipse-temurin:17-jre` |
| 7 | 无 CI/CD 管道 | — | — | 无自动构建/测试/部署 | GitHub Actions |
| 8 | 无健康检查端点 | `pom.xml` | — | 无 `spring-boot-starter-actuator` | 添加 actuator |
---
## P1 — 核心功能有缺陷或不完整15项
| # | 模块 | 文件 | 行 | 问题 | 修复方向 |
|---|------|------|-----|------|----------|
| 9 | GPS 距离校验降级 | `WorkOrderService.java` | 236 | 无坐标时返回 0.0 放行 | 拒绝或标记人工审核 |
| 10 | 调度距离分硬编码 | `DispatchAlgorithm.java` | 68 | `distanceScore = 0.80` | 接入地图 API 计算真实距离 |
| 11 | 调度技能分简化 | `DispatchAlgorithm.java` | 95 | 仅按 staff_level 给分 | 按工单所需技能 vs 人员证书匹配 |
| 12 | 对象存储未接入 | `EvidenceService.java` | 28 | 返回本地 URL | MinIO/S3/OSS SDK |
| 13 | 对象存储配置空壳 | `ObjectStorageConfig.java` | 8 | 空 `@Configuration` | `@ConfigurationProperties` |
| 14 | 平台页面硬编码 IP | `work-orders.vue` | 47 | 直连 `172.31.12.249:18080` | 改为 `/api/hss` 代理 |
| 15 | 平台页面无认证守卫 | `applications.vue`, `work-orders.vue` | — | fallback 到 ADMIN/uid=1 | 添加 `isLoggedIn` 检查 |
| 16 | 官网图片全为占位 | 4个组件 | — | loremflickr 随机图 | 替换为真实系统截图 |
| 17 | ICP 备案号缺失 | `AppFooter.vue` | 40 | "上线前补充" | 填写真实备案号 |
| 18 | 网站 Dockerfile 未被使用 | `docker-compose.yml` | — | `nginx:alpine` + 卷挂载 | 使用 `website/Dockerfile` |
| 19 | AuthController 硬编码 tenantId | `AuthController.java` | 42,49,86 | `tenantId=1L, orgId=1L` | 从注册信息或请求上下文获取 |
| 20 | delivery BASE_URL 硬编码 | `delivery-miniapp/api.js` | 1 | `localhost:18080` | 环境变量或构建时注入 |
| 21 | execute.vue 未持久化状态 | `execute.vue` | — | 仅更新内存 | 调用后端 API 持久化 |
| 22 | 拍照无水印 | `api.js` | — | `addWatermark` 未调用 | 在签到和执行中调用 |
| 23 | 轨迹未停止 | `api.js` | — | `stopTrajectory` 未调用 | 在 finish.vue 完成时调用 |
---
## P2 — 可工作但需增强14项
| # | 模块 | 问题 | 增强方向 |
|---|------|------|----------|
| 24 | ETA 预测 | `estimateTravelMinutes` 仅按区域码比较 | 接入地图 API 或 Haversine+预估速度 |
| 25 | 调度权重 | 硬编码 25/25/20/15/15 | 配置化 |
| 26 | 绩效权重 | 硬编码 30/15/10/15/15/15 | 配置化 |
| 27 | 熟悉度评分 | `count * 0.3` 线性增长 | 对数曲线 |
| 28 | 新人员评分 | 默认 0.70 偏袒无评分人员 | 改为 0.50 或冷启动保护 |
| 29 | 申请校验 | 仅检查档案存在 | 按服务类型配置必需附件清单 |
| 30 | Demo 页 | 75% mock 数据 | 全部改为真实 API |
| 31 | Lead 表单 | `server/api/lead.post.ts` 返回假 200 | 代理到真实后端 |
| 32 | Resources 页 | 下载链接为空 | 上传真实 PDF |
| 33 | 微信支付回调 URL | 硬编码 localhost | 改为公网可访问域名 |
| 34 | 数据库外键 | `hss_execution_records` 无 FK | 添加 REFERENCES |
| 35 | Flyway 缺失表 | 无消息/配置/离线日志表 | 按需创建 |
| 36 | iOS 权限声明 | `manifest.json` 中为空 | 补充定位和相机权限描述 |
| 37 | Dockerfile 无 USER | 以 root 运行 | 添加非 root 用户 |
---
## 统计
| 级别 | 数量 | 分布 |
|------|------|------|
| P0 | 8 | 通知×2 / 认证×2 / 结算×1 / 镜像×1 / CI/CD×1 / 监控×1 |
| P1 | 15 | GPS×1 / 调度×2 / 存储×2 / 前端×6 / delivery×4 |
| P2 | 14 | ETA×1 / 调参×4 / Mock×3 / 配置×3 / DDL×2 / 安全×1 |
| **共** | **37** | |