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

5.8 KiB
Raw Blame History

外部服务接入清单

编制2026-05-19 · 从系统待完善清单中提取所有需要接入第三方服务/平台/API 的项目


一、通知推送P0 — 阻塞上线)

通道 所需服务 接入方式 配置项 优先级
MQTT EMQX / Mosquitto / 阿里云物联网平台 Spring Integration MQTT 或 Eclipse Paho Java Client hss.mqtt.broker-url hss.mqtt.username hss.mqtt.password P0
微信小程序订阅消息 微信开放平台·小程序·订阅消息 后端调用 POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send hss.wechat.app-id hss.wechat.app-secret P0
短信 阿里云短信 / 腾讯云短信 对应 SDKaliyun-sms-sdk / tencentcloud-sdk-java-sms hss.sms.access-key hss.sms.secret-key hss.sms.sign-name hss.sms.template-id P0

代码位置NotificationSender.java:76-97 — 三个通道的 doSend() 方法体目前仅写日志。


二、文件存储P1 — 限制可用性)

服务 接入方式 配置项 优先级
MinIO(自建) 或 阿里云 OSS / AWS S3 对应 Java SDK hss.storage.endpoint hss.storage.access-key hss.storage.secret-key hss.storage.bucket P1

代码位置EvidenceService.java:28 (presignUpload) + :60 (getSignedUrl) — 目前返回本地路径,非真实预签名 URL。


三、地图与定位P1 — 影响调度精度)

服务 接入方式 配置项 优先级
高德地图 / 百度地图 API HTTP REST API地理编码 + 驾车距离 + ETA hss.map.provider hss.map.api-key P1

使用场景

  • DispatchAlgorithm.calculateDistanceScore() — 人员与服务地址真实行车距离(当前用 Haversine 直线距离 + 上次签到位置估算)
  • EtaService.estimateTravelMinutes() — 区域间路程时间(当前按区域编码前缀估算)
  • 申请单地址 → 经纬度地理编码(当前需要手动填写 address_lat / address_lng

四、微信支付P1 — 已实现 SDK缺生产配置

配置项 说明 获取方式
WECHAT_APPID 小程序 AppId 微信公众平台 → 开发 → 开发管理 → 开发设置
WECHAT_MCHID 商户号 微信支付商户平台 → 账户中心
WECHAT_APIV3_KEY API v3 密钥32位 商户平台 → API 安全 → 设置 APIv3 密钥
WECHAT_SERIAL_NO 商户证书序列号 商户平台 → API 安全 → 申请 API 证书
WECHAT_PRIVATE_KEY_PATH 商户私钥文件路径PEM 证书申请时生成的 apiclient_key.pem
WECHAT_NOTIFY_URL 支付回调地址 必须是公网可访问的域名

代码位置WechatPayService.java — JSAPI 下单、退款、回调验签解密均已实现,缺真实商户号配置。


五、微信小程序发布P1 — 阻塞发布)

项目 说明 获取方式
小程序 AppId manifest.json:44 当前为空 微信公众平台 → 开发 → 开发管理
服务器域名白名单 manifest.json:46 urlCheck 需改为 true 小程序后台 → 开发管理 → 服务器域名
request 合法域名 后端 API 地址 需配置 https://your-domain.com
uploadFile 合法域名 文件上传地址 需配置对象存储域名

六、域名与 HTTPSP1 — 上线必需)

项目 说明 优先级
域名注册 官网 + API 服务域名 P1
SSL 证书 Let's Encrypt / 云服务商免费证书 P1
ICP 备案 中国大陆法律要求 P1
公安备案 部分省市要求 P2

七、监控与运维P2

服务 接入方式 优先级
Prometheus + Grafana Micrometer + Spring Boot Actuator已集成 actuator P2
日志集中化 ELK / 阿里云 SLS / Loki P2
APM SkyWalking / 阿里云 ARMS P2

八、无需外部服务,纯代码修复项(已处理)

以下项目已在本次修复中通过代码改动解决,无需外部服务:

# 项目 修复方式
P0-1 StateMachine 守卫条件 transition() 增加 evaluateConstraint()
P0-2 验证结果被忽略 submit() 增加 if (!result.passed()) throw
P0-3 审核人空检查 改为 if (equals) throw BusinessException
P0-4 SQL 注入 LeadController 改为参数化查询 ?
P0-5 .gitignore 缺失 创建 .gitignore
P0-6 Dockerfile Maven 镜像 改为 maven:3.9-eclipse-temurin-17JRE 镜像当前不可用)
P1-1 批量作业失败无日志 BatchJobService + ScheduledTasks 增加 FAILED 日志
P1-2 EvidenceService 数组越界 增加 try-catch NumberFormatException
P1-3 Nginx 安全头 HSTS + CSP + Permissions-Policy
P1-4 .dockerignore website/.dockerignore
P1-5 FK 约束 + 索引 V12 hss_notification_receipts.outbox_id 等 FK + 4 个索引
P2-1 delivery 水印导出 api.js 导出 addWatermark
P2-2 execute 离线队列 catch 块调用 OfflineQueue.add()
P2-3 轨迹启动 checkin.vue 签到成功后 startTrajectory()
P2-4 iOS 权限嵌套 manifest.json 修复 JSON 结构

优先级总结

级别 外部服务数 代码修复数
P0阻塞上线 3MQTT Broker + 微信订阅消息 + 短信 SDK 6
P1影响核心功能 3(对象存储 + 地图 API + 域名证书) 12
P2增强完善 3(监控 + CI/CD + 微信配置) 6

总计:需接入 9 个外部服务/平台,其余已全部通过代码修复解决。