Files
Home-Care/docs/ architecture/边界约束文档.md
comclib c02029a5f3 feat: 初始化居家上门服务系统完整项目代码
- Spring Boot 后端服务 (hss-home-service)
- delivery-miniapp 配送小程序
- website 官网 (Nuxt)
- docs 架构设计文档
- Docker 容器化部署配置

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 09:04:49 +08:00

53 lines
4.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
可以,现在进入 **第四步:边界限制**。这一阶段的作用是把“哪些可以自由设计、哪些不能动”先锁死。你的 V2.1 文档已经明确了状态机、数据模型、delivery 端、通知、结算、审计等方向,其中状态流转要求“前端只传动作,不传目标状态”,并且相同请求需要幂等处理;数据模型也已经拆出了申请、评估、方案、计划、工单、执行、异常、监管、验收、结算、通知、审计、合规等数据域。 delivery 端也已经被定义为服务人员移动作业端,而不是普通配送端,需要覆盖工作台、工单详情、签到、执行、异常、补录等页面。
我已经把这一节补进文档,生成新版:
[下载 V2.2 边界限制增强版](sandbox:/mnt/data/居家上门服务闭环流程文档_V2.2_边界限制增强版.md)
## 第四步结论:本次实现硬约束
| 边界项 | 硬约束结论 |
| ------ | ------------------------------------------------ |
| 后端技术栈 | **Spring Boot / Java 17+**,一期采用模块化单体,不先拆微服务 |
| 数据库 | **PostgreSQL 优先**;如果现有平台已统一 MySQL则允许 MySQL 8 替代 |
| Redis | 只做缓存、短期幂等、分布式锁、热点字典,不作为最终业务状态来源 |
| MQTT | 只做 delivery 端实时通知,不作为业务成功依据 |
| 文件存储 | 照片、音频、视频、签署文件、归档文件进入对象存储,不进数据库大字段 |
| 接口风格 | 外部接口 RESTful状态动作使用 action-style REST |
| API 契约 | 必须输出 OpenAPI 3.1 文档 |
| DDL 设计 | 允许自由设计新表,统一使用 `hss_` 前缀 |
| 向后兼容 | 居家子系统从零设计,不兼容商城订单/普通配送模型,但兼容现有账号、角色、机构、文件能力 |
| 前端范围 | delivery 端小程序属于本次实现范围 |
| 性能 SLA | 一期按中小规模设计,但接口、索引、分页、异步、幂等必须按生产方式实现 |
| 合规安全 | 敏感数据必须授权、脱敏、审计、控制留存 |
Spring Boot 官方当前系统要求显示Spring Boot 4.x 至少需要 Java 17这也支持我们把 Java 17+ 作为后端硬约束。([Home][1]) OpenAPI 官方规范说明OpenAPI 是一种标准、语言无关的 HTTP API 描述方式,可让人和机器在不访问源码的情况下理解服务能力,因此适合作为前后端契约。([Swagger][2]) PostgreSQL 对 `jsonb` 支持索引,适合保存扩展配置、快照、算法解释等半结构化数据,但核心状态和金额仍然必须关系化建模。([PostgreSQL][3]) Redis 官方文档也明确分布式锁是用于多个进程互斥访问共享资源的原语,所以它适合锁、缓存、幂等,不适合当最终业务账本。([Redis][4])
## 本阶段最重要的 12 条硬约束
1. 后端以 **Spring Boot / Java** 为主,不在核心链路引入多语言服务。
2. 新增 `hss_` 业务表,允许自由设计 DDL。
3. **方案、服务计划、工单必须分离建模**
4. 工单必须有项目级执行明细。
5. 所有状态流转必须经过后端状态机。
6. 前端只发动作,不传目标状态。
7. 所有写接口必须幂等。
8. 所有通知必须经过 Outbox。
9. MQTT 不是业务状态依据。
10. 结算金额以后端基于方案快照和执行记录计算为准。
11. delivery 端小程序属于本次实现范围。
12. 敏感数据必须授权、脱敏、审计、控制留存。
## 下一步
第五步应该进入 **系统模块拆分与工程目录设计**,直接输出:
后端模块包结构、delivery 端页面目录、数据库 migration 目录、OpenAPI 契约目录、状态机代码目录、调度算法代码目录、通知 Outbox 目录、测试用例目录。
[1]: https://docs.spring.io/spring-boot/system-requirements.html?utm_source=chatgpt.com "System Requirements :: Spring Boot"
[2]: https://swagger.io/specification/ "
OpenAPI Specification - Version 3.1.0 | Swagger
"
[3]: https://www.postgresql.org/docs/current/datatype-json.html "PostgreSQL: Documentation: 18: 8.14. JSON Types"
[4]: https://redis.io/docs/latest/develop/clients/patterns/distributed-locks/ "Distributed Locks with Redis | Docs"