Files
TakeoutSaaS.AdminApi/README.md
MSuMshk 857f776447 feat: 实现完整的多租户公告管理系统
核心功能:
- 公告状态机(草稿/已发布/已撤销)支持发布、撤销和重新发布
- 发布者范围区分平台级和租户级公告
- 目标受众定向推送(全部租户/指定角色/指定用户)
- 平台管理、租户管理和应用端查询API
- 已读/未读管理和未读统计

技术实现:
- CQRS+DDD架构,清晰的领域边界和事件驱动
- 查询性能优化:数据库端排序和限制,估算策略减少内存占用
- 并发控制:修复RowVersion配置(IsRowVersion→IsConcurrencyToken)
- 完整的FluentValidation验证器和输入保护

测试验证:
- 36个测试全部通过(27单元+9集成)
- 性能测试达标(1000条数据<5秒)
- 代码质量评级A(优秀)

文档:
- 完整的ADR、API文档和迁移指南
- 交付报告和技术债务记录
2025-12-20 19:57:09 +08:00

213 lines
5.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.
# 外卖SaaS系统 (TakeoutSaaS)
## 项目简介
外卖SaaS系统是一个基于.NET 10的多租户外卖管理平台为中小型餐饮企业提供完整的外卖业务解决方案。系统采用现代化的技术栈支持商家管理、菜品管理、订单处理、配送管理、支付集成等核心功能。
### 核心特性
- 🏢 **多租户架构**支持多租户数据隔离SaaS模式运营
- 🍔 **商家管理**:完善的商家入驻、门店管理、菜品管理功能
- 📦 **订单管理**:订单全生命周期管理,实时状态跟踪
🚚 配送管理:配送任务、路线规划、第三方配送对接
- 💰 **支付集成**:支持微信、支付宝等多种支付方式
- 🎁 **营销功能**:优惠券、满减活动、会员积分
- 📊 **数据分析**:实时数据统计、经营报表、趋势分析
- 🔒 **安全可靠**JWT认证、权限控制、数据加密
## 技术栈
### 后端技术
- **.NET 10**:最新的.NET平台
- **ASP.NET Core Web API**RESTful API服务
- **Entity Framework Core 10**最新ORM框架
- **Dapper 2.1+**:高性能数据访问
- **PostgreSQL 16+**:主数据库
- **Redis 7.0+**:分布式缓存
- **RabbitMQ 3.12+**:消息队列
### 开发框架
- **AutoMapper**:对象映射
- **FluentValidation**:数据验证
- **Serilog**:结构化日志
- **MediatR**CQRS模式
- **Hangfire**:后台任务
- **Swagger**API文档
## 运行条件
### 开发环境要求
* .NET SDK 10.0 或更高版本
* PostgreSQL 16+
* Redis 7.0+
* RabbitMQ 3.12+(可选)
* Docker Desktop推荐用于容器化开发
### 推荐IDE
* Visual Studio 2022
* JetBrains Rider
* Visual Studio Code
## 快速开始
### 1. 克隆项目
```bash
git clone https://github.com/your-org/takeout-saas.git
cd takeout-saas
```
### 2. 使用Docker Compose启动依赖服务推荐
```bash
# 启动PostgreSQL、Redis、RabbitMQ等服务
docker-compose up -d
# 查看服务状态
docker-compose ps
```
### 3. 配置数据库连接
编辑 `src/TakeoutSaaS.Api/appsettings.Development.json`
### 4. 执行数据库迁移
```bash
cd src/TakeoutSaaS.Api
dotnet ef database update
```
### 5. 运行项目
```bash
dotnet run
```
访问 API 文档:
- 管理后台 AdminApi Swaggerhttp://localhost:5001/swagger
- 小程序/用户端 MiniApi Swaggerhttp://localhost:5002/swagger
## 公告管理
> 最后更新日期2025-12-20
### 功能概述
- 支持平台公告与租户公告统一管理TenantId=0 代表平台公告)
- 状态机:草稿 → 已发布 → 已撤销(已发布不可编辑)
- 支持目标受众过滤与未读/已读能力
### 快速开始(示例流程)
1. 创建公告(草稿)
2. 发布公告(进入 Published
3. 应用端获取可见公告列表与未读公告
```mermaid
stateDiagram-v2
[*] --> Draft
Draft --> Published: publish
Published --> Revoked: revoke
Revoked --> Published: republish
```
### 关键概念
- `Status`Draft/Published/Revoked已发布不可编辑
- `RowVersion`并发控制字段Base64
- `TargetType/TargetParameters`:目标受众过滤
### 相关文档
- `docs/api/announcements-api.md`
- `docs/permissions/announcement-permissions.md`
- `docs/adr/0001-announcement-status-state-machine.md`
- `docs/observability/announcement-events.md`
- `docs/migrations/announcement-status-migration.md`
- `docs/technical-debt.md`
## 项目结构
```
TakeoutSaaS/
├── 0_Document/ # 项目文档
│ ├── 01_项目概述.md
│ ├── 02_技术架构.md
│ ├── 03_数据库设计.md
│ ├── 04A_管理后台API.md
│ ├── 04B_小程序API.md
│ ├── 05_部署运维.md
│ └── 06_开发规范.md
├── src/
│ ├── TakeoutSaaS.AdminApi/ # 管理后台 Web API
│ ├── TakeoutSaaS.MiniApi/ # 小程序/用户端 Web API
│ ├── TakeoutSaaS.Application/ # 应用层
│ ├── TakeoutSaaS.Domain/ # 领域层
│ ├── TakeoutSaaS.Infrastructure/ # 基础设施层
│ └── TakeoutSaaS.Shared/ # 共享层
├── tests/
│ ├── TakeoutSaaS.UnitTests/ # 单元测试
│ └── TakeoutSaaS.IntegrationTests/ # 集成测试
├── docker-compose.yml # Docker编排文件
└── README.md
```
## 测试说明
### 运行单元测试
```bash
dotnet test tests/TakeoutSaaS.UnitTests
```
### 运行集成测试
```bash
dotnet test tests/TakeoutSaaS.IntegrationTests
```
## 部署说明
### Docker部署
```bash
# 构建镜像
docker build -t takeout-saas-api:latest .
# 运行容器
docker run -d -p 8080:80 --name takeout-api takeout-saas-api:latest
```
详细部署文档请参考:[部署运维文档](0_Document/05_部署运维.md)
## 文档
- [项目概述](0_Document/01_项目概述.md) - 系统介绍和业务说明
- [技术架构](0_Document/02_技术架构.md) - 技术栈和架构设计
- [数据库设计](0_Document/03_数据库设计.md) - 数据模型和表结构
- [API接口设计](0_Document/04_API接口设计.md) - RESTful API规范
- [部署运维](0_Document/05_部署运维.md) - 部署和运维指南
- [开发规范](0_Document/06_开发规范.md) - 代码规范和最佳实践
## 开发规范
请遵循项目的[开发规范](0_Document/06_开发规范.md)
## 贡献指南
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'feat: Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 创建 Pull Request
## 许可证
本项目采用 MIT 许可证
## 联系方式
- 项目地址https://github.com/your-org/takeout-saas
- 问题反馈https://github.com/your-org/takeout-saas/issues
## 协作者
感谢所有为本项目做出贡献的开发者!
---
⭐ 如果这个项目对你有帮助,请给我们一个星标!