75 lines
4.8 KiB
Markdown
75 lines
4.8 KiB
Markdown
# 系统待完善清单
|
||
|
||
> 编制日期: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** | |
|