# TopskyHotelManagementSystem-WebApi **Repository Path**: java-and-net/topsky-hotel-management-system-web-api ## Basic Information - **Project Name**: TopskyHotelManagementSystem-WebApi - **Description**: 基于.Net10搭配SQLSugar框架构建的TS酒店管理系统后端API项目,主要服务于WinForm Client和Vue3 Web端,欢迎Start&Fork - **Primary Language**: C# - **License**: MIT - **Default Branch**: Main - **Homepage**: https://www.oscode.top/project/4.html - **GVP Project**: No ## Statistics - **Stars**: 30 - **Forks**: 24 - **Created**: 2021-07-28 - **Last Updated**: 2026-03-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: Net10, Docker, Csharp, MySQL, JWT ## README 

组织logo.png

TopskyHotelManagementSystem-WebApi

star fork

中文文档 | English Document

## 项目简介 本项目是基于 **.NET 10** 构建的 **TS酒店管理系统** 后端 Web API 项目。采用 **C#** 语言编写,使用 **SqlSugar** ORM 框架,支持 **MariaDB**, **MySQL**, **PostgreSQL**, **SQL Server** 等多种数据库。 主要用于现有的 C/S 项目酒店管理系统升级 2.0 后实现前后端分离,提供完善的业务接口支持。本项目不包含前端 UI 界面,仅提供 RESTful API 服务。 ## 核心功能特性 ### 0. 账户安全增强(TOTP 2FA) - **支持 TOTP 双因子认证**:员工、管理员、客户三类账号均支持开启/关闭 2FA。 - **支持恢复备用码**:当用户丢失验证器时,可使用一次性备用码完成登录。 - **首次启用即返回备用码**:`EnableTwoFactor` 成功后会直接返回首批备用码,避免前端重复重置生成。 - **安全告警**:检测到“备用码登录”后,系统会在登录成功前尝试发送邮件通知用户。 - **接口能力完整**:支持状态查询、绑定信息生成、启用、关闭、备用码重置与剩余数量查询。 ### 1. 业务管理模块 - **房间管理**:支持房间状态(空房、已住、维修、脏房、预约)管理,入住、退房、换房,房间配置(类型、价格)。 - **客户管理**:客户档案管理,客户账号注册登录,会员类型管理。 - **预订管理**:客房预订,预订过期自动检测(基于 Quartz),支持邮件通知提醒。 - **消费管理**:商品销售管理(库存),客房消费(水电费、住宿费),结算状态跟踪。 - **员工管理**:员工档案管理,考勤打卡(上下班签到),奖惩记录,履历管理,证件照片管理。 - **资产管理**:酒店固定资产管理(资产编号、价值、来源、经办人)。 - **新闻公告**:酒店内部新闻发布,系统公告管理。 ### 2. 系统管理模块 (RBAC) - **管理员管理**:支持超级管理员,普通管理员,管理员类型。 - **角色与权限**:基于角色的访问控制 (RBAC),细粒度的权限分配(菜单权限、按钮权限)。 - **菜单管理**:动态菜单配置,支持按角色构建菜单树。 - **数据字典**:支持民族、学历、部门、职位、证件类型等基础数据维护。 ### 3. 数据统计与监控 - **管理驾驶舱 (Dashboard)**:提供房间状态统计(空/住/修/脏/预)、营业统计(会员性别比例、消费趋势日月年)、物资库存预警、员工考勤统计(出勤/迟到/旷工)。 - **操作日志**:详细的 HTTP 请求日志(耗时、参数、IP)和业务操作日志记录。 - **监管统计**:支持酒店内部监管数据的录入与查询。 ### 4. 基础设施与安全 - **多数据库支持**:通过 SqlSugar 实现无缝切换主流关系型数据库,支持一键初始化建库建表。 - **安全机制**: - **JWT**:安全的 Token 认证机制。 - **CSRF**:防止跨站请求伪造攻击。 - **Data Protection**:敏感数据(如身份证号、联系方式)使用 ASP.NET Core Data Protection API 加密存储。 - **请求日志**:全局请求中间件,记录接口调用详情。 - **定时任务**:使用 Quartz .NET 处理预订过期提醒邮件发送。 - **第三方集成**: - **邮件服务**:MailKit 集成,支持发送提醒邮件(HTML 模板)。 - **图床服务**:兰空图床 (Lsky) 集成,用于图片上传托管。 ## 技术栈 - **.NET 10**: 基础框架。 - **C# 12**: 开发语言。 - **SqlSugar**: ORM 框架(多租户/多数据库支持,高性能)。 - **Autofac**: IoC 容器(依赖注入)。 - **Quartz .NET**: 定时任务调度(处理过期预订)。 - **MailKit**: 邮件发送库。 - **NSwag**: API 文档生成(Swagger UI)。 - **Newtonsoft.Json**: JSON 序列化库。 ## 项目结构 项目采用分层架构设计,结构清晰,便于维护和扩展: ```text EOM.TSHotelManagement.Web ├─ EOM.TSHotelManagement.API # API 入口层 (Controllers, Middleware, Config) ├─ EOM.TSHotelManagement.Contract # 契约层 (DTO, Request/Response Models, Service Interfaces) ├─ EOM.TSHotelManagement.Domain # 领域层 (Entities, Domain Logic) ├─ EOM.TSHotelManagement.Service # 服务层 (Business Logic Implementation) ├─ EOM.TSHotelManagement.Data # 数据层 (DbContext, Repositories, Database Init) ├─ EOM.TSHotelManagement.Infrastructure # 基础设施层 (Config Models, Helpers, JWT Config) ├─ EOM.TSHotelManagement.Common # 公共层 (Utils, Constants, Enums, Email Templates) └─ EOM.TSHotelManagement.Migration # 数据库迁移工具 ``` ## 数据库支持 本项目已通过 SqlSugar 框架支持多数据库一键建库建表: | 数据库 | 版本 | 支持建库建表 | 状态 | | ---------- | ---------------- | :----------: | :--: | | MariaDB | 10.11.10+ | ✅ | ✅ | | PostgreSQL | 13+ | ✅ | ✅ | | MySQL | 5.7+ | ✅ | ✅ | | SQL Server | 2022+ | ✅ | ✅ | | Oracle | - | ❌ | ❌ | | SQLite | - | ❌ | ❌ | ## 快速开始 ### 环境要求 - .NET 10 SDK - Runtime 10.x - Visual Studio 2026 (或 VS Code + C# Dev Kit) ### 本地运行 1. **克隆项目**: ```bash git clone https://gitee.com/java-and-net/topsky-hotel-management-system-web-api.git ``` 2. **配置数据库**: 修改 `EOM.TSHotelManagement.API/appsettings.json`: ```json { "DefaultDatabase": "MariaDB", // 可选值: MariaDB, MySql, PgSql, SqlServer "ConnectionStrings": { "MariaDB": "Server=localhost;Database=tshoteldb;User=root;Password=123456;" // ... }, "InitializeDatabase": true // ⚠️ 首次运行请设为 true 以自动创建数据库和表结构 } ``` 3. **配置密钥**: 在 `appsettings.json` 中设置 `Jwt__Key` (用于生成 Token) 和 `DataProtection` 相关的 Key (用于数据加解密)。 4. **运行项目**: 使用 Visual Studio 打开 `EOM.TSHotelManagement.Web.sln` 并启动 `EOM.TSHotelManagement.API` 项目。 ### Docker 部署 项目提供了 Dockerfile(亦可通过build.ps1文件快速构建镜像,前提需确保本地启用WSL2.0以及Hyper-V和安装Docker Desktop),支持 Docker 容器化部署。API 默认监听 8080 端口。 为了避免手写超长 `docker run` 命令,仓库已提供 `docker-compose.yml` + `.env.example`。 ```bash # 1) 准备环境变量文件 cp .env.example .env # Windows PowerShell 可用: # Copy-Item .env.example .env # 2) 按需修改 .env(数据库连接、JWT 密钥、幂等策略、邮箱等) # 3) 启动 docker compose up -d # 4) 查看日志 docker compose logs -f tshotel-api # 5) 停止并移除容器 docker compose down ``` 如果你仍想使用 `docker run`,也可以改成 `--env-file` 方式,命令会短很多: ```bash docker run -d \ --name tshotel-api \ --env-file .env \ -v /app/config:/app/config \ -v /app/keys:/app/keys \ -p 63001:8080 \ yjj6731/tshotel-management-system-api:latest ``` | 参数名称 | 参数说明 | 必填(Y/N) | 默认值 | 可选值 | |------|------|---------|-----|-----| |name|容器名称|Y|N/A|N/A| |DefaultDatabase|默认数据库|Y|N/A|MariaDB/MySql/SqlServer/PgSql| |ASPNETCORE_ENVIRONMENT|系统环境(决定Dataprotection Key的生成位置以及环境判断)|Y|docker|docker| |{默认数据库(e.g:MariaDB/MySql/SqlServer/PgSql)}ConnectStr|对应数据库链接字符串|Y|N/A|N/A| |Jwt__Key|JWT Key|Y|无,必须设置|N/A| |Jwt__ExpiryMinutes|token有效时间/分钟|Y|20|N/A| |Lsky__Enabled|是否启用兰空图床集成|Y|false|true/false| |Lsky__BaseAddress|兰空图床基础地址|Y|N/A|N/A| |Lsky__Email|兰空图床账户邮箱|Y|N/A|N/A| |Lsky__Password|兰空图床账户密码|Y|N/A|N/A| |Lsky__UploadApi|兰空图床上传图片接口|Y|N/A|N/A| |Lsky__GetTokenApi|兰空图床获取tokens接口|Y|N/A|N/A| |Mail__Enabled|是否启用邮件服务|Y|true|true/false| |Mail__Host|邮箱smtp协议地址|Y|smtp.example.com|N/A| |Mail__UserName|邮箱smtp协议地址|Y|N/A|N/A| |Mail__Port|邮箱smtp端口|Y|465|N/A| |Mail__Password|邮箱密码|Y|N/A|N/A| |Mail__EnableSsl|是否启用SSL|Y|true|true/false| |Mail__DisplayName|发送邮件人显示名称|Y|N/A|N/A| |InitializeDatabase|初始化数据库|N|true|true/false| |ExpirationSettings__NotifyDaysBefore|提前通知天数|Y|3|a few days| |ExpirationSettings__CheckIntervalMinutes|通知检查间隔|Y|5|a few minutes| |AllowedOrigins__0|允许域站点,用于开发环境|Y|http://localhost:8080|http://localhost:8080| |AllowedOrigins__1|允许域站点,用于生产环境|Y|https://www.yourdomain.com|https://www.yourdomain.com| |SoftwareVersion|软件版本号,用于标记说明|N|N/A|N/A| |JobKeys__0|定时任务1|Y|ReservationExpirationCheckJob|ReservationExpirationCheckJob| |JobKeys__1|定时任务2|Y|MailServiceCheckJob|MailServiceCheckJob| |JobKeys__2|定时任务3|Y|RedisServiceCheckJob|RedisServiceCheckJob| |Redis__Enabled|是否启用Redis服务|N|false|true/false| |Redis__ConnectionString|Redis连接字符串|N|N/A|N/A| |Redis__DefaultDatabase|默认数据库|N|0|0| |Idempotency__Enabled|是否启用幂等键中间件|N|true|true/false| |Idempotency__EnforceKey|是否强制写请求必须携带 Idempotency-Key|N|false|true/false| |Idempotency__MaxKeyLength|Idempotency-Key 最大长度|N|128|>=16 的整数| |Idempotency__InProgressTtlSeconds|处理中记录 TTL(秒)|N|120|30~600| |Idempotency__CompletedTtlHours|完成记录 TTL(小时)|N|24|1~168| |Idempotency__PersistFailureResponse|是否缓存失败响应(非2xx)|N|false|true/false| > ⚠️ **安全提醒**:生产环境中请勿直接通过 `-e` 明文传入密码类参数,推荐使用 Docker Secrets 或环境变量注入工具(如 HashiCorp Vault)进行保护。 ## 开发节奏 ![development_pace](https://picrepo.oscode.top/i/2026/02/18/Development_pace.png) ## 鸣谢 感谢以下优秀的开源项目: 1. **Autofac** - An addictive .NET IoC container. ([MIT](https://github.com/autofac/Autofac)) 2. **SqlSugar** - 国内最受欢迎ORM框架. ([MIT](https://gitee.com/dotnetchina/SqlSugar)) 3. **Mailkit** - A cross-platform .NET library for IMAP, POP3, and SMTP. ([MIT](https://github.com/jstedfast/MailKit)) 4. **NSwag** - The OpenAPI/Swagger API toolchain for .NET and TypeScript. ([MIT](https://github.com/NSwag/NSwag)) 5. **Quartz .NET** - Open-source job scheduling system for .NET. ([Apache 2.0](https://github.com/quartznet/quartznet)) ## 项目作者 - **Jackson** (项目组长, 核心代码编写和后期项目整合) - **Benjamin** (开发,项目代码编写) - **Bin** (数据库支持) - **易开元** (后期维护和开发) ## 许可证 本项目基于 **MIT** 协议开源。免费开源,但请勿用于商业用途(具体请阅读 LICENSE 文件)。 ​ [![咖啡与网络/TopskyHotelManagementSystem-WebApi](https://gitee.com/java-and-net/topsky-hotel-management-system-web-api/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/java-and-net/topsky-hotel-manager-system-web-api)