Files
saas-mbr/abacus.springboot.example/.project.agents/docs/context/PRD.md
T

92 lines
6.2 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.
# abacus.springboot.example — 产品需求文档(PRD
> 行为与范围的**唯一权威**。功能的加/删/改必须先改本文,再动代码与下游文档。
> 本文回答"做什么 / 给谁 / 为什么",不回答"怎么实现"(那是 `ARCHITECTURE.md`)。
## 1. 产品愿景
为 abacus 微服务体系提供**可复用的 Spring Boot 微服务模板**:业务团队(人 + AI)在本模板上按分层规范添加业务模块(Controller / Service / 数据访问 / Entity / SQL / 配置),即可获得统一响应体、异常体系、多数据库支持、Nacos 注册配置、定时任务与动静分离打包能力,实现跨系统一致的后端工程结构与低成本复制开发。
## 2. 目标用户与典型场景
- 用户画像:公司内部业务系统后端开发团队(后端开发、全栈、AI 辅助开发人员)。
- 场景 1:作为业务开发,我想复制本模板新建一个微服务,以便快速获得 Nacos / 多库 / 打包 / 日志等基础设施。
- 场景 2:作为 AI 助手,我想依据 `docs/coding-standards.md §5/§7` 把界面需求直接生成 Controller→Service→数据访问→SQL 全链路代码。
- 场景 3:作为发布负责人,我想让所有服务打出结构一致的 `*-bin.zip`jar+doc+sql+html),以便统一发布流程。
## 3. 范围(Scope
### 3.1 MVP 必含(In Scope
- 分层骨架(api/controller/dao/esb/pi/impl/repository/wsi/config)与扫描配置(springdoc/entitypackages/controllerPackages)。
- 统一响应体包装(`ResultResponseBodyWrapper`)与业务异常(`BusinessException`)。
- 多数据库(MySQL / SQL Server / Oracle / 达梦)+ Druid + JPANacos 注册/配置中心。
- SQL 三件套(table 双份 / upgrade.xml 版本化 / data 初始化)与动静分离打包(assembly.xml → *-bin.zip)。
- 示例业务纵切面(JcBill 稽查示例:Controller + BizService + Access + Repository + Entity + 升级 SQL)。
### 3.2 明确不做(Out of Scope
- 不包含具体生产业务(业务模块由团队基于模板复制开发)。
- 不提供自动化测试框架与 CI(人工冒烟验证)。
- 不维护前端页面(前端属 `abacus-static-framework` 仓库)。
## 4. 核心功能定义
### 4.1 统一响应体与异常(【核心】)
- **用户故事**:作为前端/调用方,我想所有接口返回一致的 `{status, message, data, errorCode}`,以便统一处理。
- **行为**`Application.java` 注册 `ResultResponseBodyWrapper`Controller 直接 return 业务对象;参数空校验抛 `BusinessException("参数[x]为空!")`
- **边界 / 异常**`abacus.responseExcludePath` 配置的 URI 不被包装;业务异常码首位 9、系统异常码首位 5(共享规范 §6.2)。
### 4.2 分层开发模型(【核心】)
- **用户故事**:作为团队开发,我想按固定分层写代码,以便职责清晰、可评审、可复制。
- **行为**Controllerapi/controller)→ esb 编排 → wsi/pi/repository 数据访问 → dao 实体;依赖单向。
- **边界 / 异常**Controller 不写 SQL、不碰 Repositoryesb 只编排不做 SQL;原生 SQL 全量参数化。
### 4.3 数据库多库支持(【核心】)
- **用户故事**:作为实施,我想同一套代码跑 MySQL 与 SQL Server,以便一套系统多客户部署。
- **行为**:建表脚本 `sql/table/{mysql,sqlserver}.sql` 双份同步;历史变更 `sql/upgrade.xml``translator="true"` 以 SQL Server 语法书写由框架翻译)。
- **边界 / 异常**:多数据源路由、真实迁移必须真机验证。
### 4.4 动静分离打包(【核心】)
- **用户故事**:作为发布,我想一个发布包包含前后端全部产物,以便统一发版。
- **行为**:前端产物输出到 `resources/html/vue/<应用名>/``mvn package``assembly.xml` 打出 `*-bin.zip`jar+doc+sql+html)。
- **边界 / 异常**jar 内不含 html`pom.xml` artifactId 建议 `abacus.springboot.<应用名>`
## 5. 信息架构与导航
微服务间通过 Nacos 注册发现 + Feign 调用;接口文档由 springdoc 提供(扫描 `api` 包);监控经 Actuatorbase-path `/services/actuator`)暴露 Prometheus 指标;定时任务由 XXL-JOB`application-xxljob.yml`)承载。
## 6. 数据模型(概念级)
业务数据实体集中在 `dao/` 包(JPA 映射);概念级实体清单由各业务模块在 `ARCHITECTURE.md §1` 维护。模板自带示例实体:`jc_bill`(稽查主单)及其明细/关联表(见 `sql/upgrade.xml`)。
## 7. 非功能性需求
- 多环境配置 `config/{dev,test,prod}/` 三套同构;dev 端口 9060 / test、prod 9000(以实际为准)。
- 上传限制 50MB;Druid 连接池(初始 10 / 最大 60);Feign 超时 10s 连接 / 30s 读取。
- JPA 与 Bean 延迟启动(`lazy-initialization`)以加速启动。
## 8. 国际化与文案语气
异常消息使用中文,直接面向用户可理解(如"参数[x]为空!");接口文档(@Operation summary)用中文。
## 9. 隐私与合规
- 数据库连接与 Nacos 凭据放在 `config/<env>/` 配置文件(git 跟踪按团队约定);**不得**新增明文密钥到非约定位置。
- 审计信息(菜单/模块/业务域)由前端 commonParam 提供,见共享规范 §6.7。
## 10. 风险与缓解
- **APP_NAME 四处漏配静默失败**:按共享规范 §3 四联检(bootstrap.yml / 扫描包 / URL 首段 / outDir)。
- **多库语法差异**:新 SQL 以 SQL Server 语法编写并加 `translator="true"`,建表双份同步。
- **框架 jar 版本升级**`pom.xml` 依赖版本变更需在升级日志记录并回归验证。
## 11. 发布里程碑(建议,待路线图细化)
- M0:治理与规范落地(本次已完成)。
- M1+:按 `ROADMAP.md` 以新业务模块验证模板可复制性(界面→代码全链路)。
## 12. 假设与待澄清项(复核时请逐条回应)
- Q1. 新业务是否一律采用 `abacus.springboot.<应用名>.<层>` 包前缀?(默认:是)
- Q2. 是否引入后端单元测试(如 JUnit/Testcontainers)?(默认:否,人工冒烟 + 真机验证)
- Q3. `util/``vo/` 包是否冻结不再新增?(默认:是,既有兼容、新增禁止)