Files
java-beta/餐厅管理系统实体类设计文档.md

16 KiB
Raw Blame History

餐厅管理系统实体类设计文档

项目概述

本项目是一个基于Spring Boot + MyBatis-Plus的餐厅管理系统采用分层架构设计支持多角色权限管理。系统主要面向三种用户角色系统管理员(admin)、分店管理员(branch)和普通用户(user)。

技术栈

  • 框架: Spring Boot
  • ORM: MyBatis-Plus
  • 注解工具: Lombok
  • JSON序列化: Jackson
  • 数据库: MySQL

实体类架构设计

1. 包结构设计

实体类按照业务角色进行模块化分包:

src/main/java/com/example/javatest/Entity/
├── admin/          # 系统管理员相关实体
├── branch/         # 分店管理员相关实体  
└── user/           # 普通用户相关实体

2. 通用注解说明

所有实体类都使用了以下通用注解:

  • @Data: Lombok注解自动生成getter/setter/toString/equals/hashCode方法
  • @NoArgsConstructor: 生成无参构造函数
  • @AllArgsConstructor: 生成全参构造函数
  • @Alias: MyBatis别名用于区分不同包下的同名实体
  • @TableName: 指定数据库表名
  • @TableId: 标识主键字段使用AUTO自增策略
  • @TableField: 映射数据库字段
  • @TableLogic: 逻辑删除标识
  • @JsonFormat: JSON序列化时间格式化
  • @FieldFill: 字段自动填充策略

核心实体类详解

1. 账户实体类 (Account/Customer)

1.1 管理员账户 (Account.java)

表名: account 别名: AdminAccount

字段名 数据类型 数据库字段 是否必填 说明 示例值
accountId Long account_id 账户ID主键自增 1001
accountName String account_name 账户名称 "张三"
accountPassword String account_password 账户密码8~20位 "********"
accountPhone String account_phone 手机号码 "13888888888"
accountType String account_type 账户类型 管理员/负责人/顾客
accountImg String account_img 头像图片URL "https://example.com/avatar.jpg"
accountGender String account_gender 性别 male/female
accountTag String account_tag 账户标签 "VIP用户"
salary BigDecimal salary 薪资(员工用) 5000.00
isDeleted Integer is_deleted 逻辑删除标识 0-未删除1-已删除
deletedAt LocalDateTime deleted_at 删除时间 2024-01-01 12:00:00
createdAt LocalDateTime created_at 创建时间(自动填充) 2024-01-01 10:00:00
updatedAt LocalDateTime updated_at 更新时间(自动填充) 2024-01-01 11:00:00

1.2 用户账户 (Customer.java)

表名: account 别名: UserCustomer

用户账户实体与管理员账户实体结构完全相同,字段定义参考上表。区别在于使用不同的别名以区分业务上下文。

设计特点

  • 统一的账户表设计,通过account_type字段区分角色
  • 支持员工薪资管理
  • 完整的用户画像信息(头像、性别、标签)

2. 分店实体类 (Branch.java)

表名: branch 别名: BranchBranch

字段名 数据类型 数据库字段 是否必填 说明 示例值
branchId Long branch_id 分店ID主键自增 2001
branchName String branch_name 分店名称 "北京朝阳店"
branchAddress String branch_address 分店地址 "北京市朝阳区三里屯路1号"
branchPhone String branch_phone 分店电话 "010-12345678"
branchStart String branch_start 营业开始时间 "09:00"
branchEnd String branch_end 营业结束时间 "22:00"
branchStatus String branch_status 营业状态 open-营业中closed-已停业
branchBoss Long branch_boss 负责人ID关联account表 1001
province String province 所属省份 "北京(不用加级别单位,比如湖南省直接写湖南即可)"
latitude Double latitude 纬度 39.9042
longitude Double longitude 经度 116.4074
isDeleted Integer is_deleted 逻辑删除标识 0-未删除1-已删除
deletedAt LocalDateTime deleted_at 删除时间 2024-01-01 12:00:00
createdAt LocalDateTime created_at 创建时间(自动填充) 2024-01-01 10:00:00
updatedAt LocalDateTime updated_at 更新时间(自动填充) 2024-01-01 11:00:00

设计特点

  • 支持地理位置信息(经纬度),便于地图功能
  • 灵活的营业时间管理HH:mm格式
  • 分店负责人关联设计
  • 营业状态动态管理

3. 菜品实体类 (Dish.java)

表名: dishes 别名: UserDish

字段名 数据类型 数据库字段 是否必填 说明 示例值
dishId Integer dish_id 菜品ID主键自增 3001
dishName String dish_name 菜品名称 "宫保鸡丁"//不重复菜品
category String category 菜品分类 "川菜,粤菜,湘菜,海鲜,西餐,家常菜,主食,咖啡,茶饮,果汁 ,奶茶,酒品,蛋糕,布丁,炸物,冰淇淋,健康轻食"
price BigDecimal price 菜品价格 28.00
stock Integer stock 当前库存数量 50
status String status 菜品状态 "在售"/"停售"
description String description 菜品描述 "经典川菜,麻辣鲜香"
imageUrl String image_url 菜品图片URL "https://example.com/dish.jpg"
sales Integer sales 累计销售数量 156
tag String tag 菜品标签 "招牌菜,辣"
isDeleted Integer is_deleted 逻辑删除标识 0-未删除1-已删除
deletedAt LocalDateTime deleted_at 删除时间 2024-01-01 12:00:00
createdAt LocalDateTime created_at 创建时间(自动填充) 2024-01-01 10:00:00
updatedAt LocalDateTime updated_at 更新时间(自动填充) 2024-01-01 11:00:00

设计特点

  • 完整的商品信息管理(价格、库存、销量)
  • 支持图片展示功能
  • 灵活的分类和标签系统
  • 状态管理(在售/停售)

4. 订单实体类 (Order.java)

表名: order使用反引号处理MySQL保留字 别名: UserOrder

字段名 数据类型 数据库字段 是否必填 说明 示例值
orderId Long order_id 订单ID主键自增 4001
accountId Long account_id 下单用户ID关联account表 1001
orderTime LocalDateTime order_time 下单时间 2024-01-01 14:30:00
branchId Long branch_id 分店ID关联branch表 2001
orderMoney BigDecimal order_money 订单总金额 86.50
orderRemarks String order_remarks 订单备注 "少盐,不要香菜"
orderStatus Integer order_status 订单状态 1-待处理2-已完成,-1-已取消
isDeleted Integer is_deleted 逻辑删除标识 0-未删除1-已删除
deletedAt LocalDateTime deleted_at 删除时间 2024-01-01 12:00:00
createdAt LocalDateTime created_at 创建时间(自动填充) 2024-01-01 10:00:00
updatedAt LocalDateTime updated_at 更新时间(自动填充) 2024-01-01 11:00:00

设计特点

  • 关联用户和分店信息
  • 完整的订单流程状态管理
  • 支持订单备注功能
  • 使用反引号处理MySQL保留字order

5. 订单明细实体类 (OrderList.java)

表名: order_list 别名: UserOrderList

字段名 数据类型 数据库字段 是否必填 说明 示例值
orderListId Long order_list_id 订单明细ID主键自增 5001
orderId Long order_id 订单ID关联order表 4001
dishId Long dish_id 菜品ID关联dishes表 3001
number Integer number 菜品数量 2
createdAt LocalDateTime created_at 创建时间(自动填充) 2024-01-01 10:00:00
updatedAt LocalDateTime updated_at 更新时间(自动填充) 2024-01-01 11:00:00

设计特点

  • 订单与菜品的多对多关系处理
  • 简洁的明细记录设计
  • 支持同一订单多种菜品
  • 仅包含核心业务字段,无逻辑删除功能

6. 评论实体类 (Comment.java)

表名: comments 别名: UserComment

字段名 数据类型 数据库字段 是否必填 说明 示例值
commentId Long comment_id 评论ID主键自增 6001
commentText String comment_text 评论内容 "味道很不错,分量足够"
commentDishId Long comment_dish_id 评论的菜品ID关联dishes表 3001
commentAccountId Long comment_account_id 评论用户ID关联account表 1001
commentRating Integer comment_rating 评分 1-5分5为最高分
parentCommentId Long parent_comment_id 父评论ID用于回复功能 6000
isDeleted Integer is_deleted 逻辑删除标识 0-未删除1-已删除
deletedAt LocalDateTime deleted_at 删除时间 2024-01-01 12:00:00
createdAt LocalDateTime created_at 创建时间(自动填充) 2024-01-01 10:00:00
updatedAt LocalDateTime updated_at 更新时间(自动填充) 2024-01-01 11:00:00

设计特点

  • 支持评分系统1-5分
  • 嵌套评论功能(回复功能)
  • 关联菜品和用户信息
  • 支持评论内容的逻辑删除

通用字段设计

1. 逻辑删除机制

字段名 数据类型 数据库字段 注解 说明 可选值
isDeleted Integer is_deleted @TableLogic 逻辑删除标识 0-未删除1-已删除
deletedAt LocalDateTime deleted_at @JsonFormat 删除时间戳 2024-01-01 12:00:00

特点说明

  • 使用@TableLogic注解实现逻辑删除
  • 删除操作不会物理删除数据,而是更新is_deleted字段
  • 查询时自动过滤已删除数据
  • deletedAt记录具体删除时间

2. 时间戳管理

字段名 数据类型 数据库字段 填充策略 说明 示例值
createdAt LocalDateTime created_at FieldFill.INSERT 创建时间(插入时自动填充) 2024-01-01 10:00:00
updatedAt LocalDateTime updated_at FieldFill.INSERT_UPDATE 更新时间(插入和更新时自动填充) 2024-01-01 11:00:00

特点说明

  • 使用MyBatis-Plus自动填充功能
  • @JsonFormat统一时间格式化为yyyy-MM-dd HH:mm:ss
  • 创建时间仅在插入时填充,更新时间在插入和更新时都会填充
  • 时间戳字段为审计功能提供基础支持

3. 主键设计

特性 说明 注解配置 示例
主键类型 自增长整型 @TableId(type = IdType.AUTO) account_id, branch_id
命名规范 {表名}_id 格式 @TableId(value = "table_id") order_id, dish_id
数据类型 Long (大部分) / Integer (菜品) private Long/Integer xxxId 支持大数据量

数据库设计规范

1. 命名规范

  • 表名: 使用复数形式或业务名称(如dishescommentsorder_list
  • 字段名: 使用下划线命名法(如account_namebranch_address
  • 主键: 统一使用{表名}_id格式(如account_idbranch_id

2. 数据类型选择

  • 主键: BIGINT AUTO_INCREMENT
  • 金额: DECIMAL类型,保证精度
  • 时间: DATETIME类型,支持毫秒级精度
  • 状态字段: VARCHARINT,根据业务需求选择
  • 布尔值: TINYINT0表示false1表示true

3. 外键关系

主表 主键字段 从表 外键字段 关系类型 业务含义
Account account_id Branch branch_boss 一对一 分店负责人
Account account_id Order account_id 一对多 用户订单
Branch branch_id Order branch_id 一对多 分店订单
Order order_id OrderList order_id 一对多 订单明细
Dish dish_id OrderList dish_id 一对多 菜品订购
Dish dish_id Comment comment_dish_id 一对多 菜品评论
Account account_id Comment comment_account_id 一对多 用户评论
Comment comment_id Comment parent_comment_id 一对多 评论回复

关系特点

  • 使用逻辑外键,不设置物理外键约束
  • 通过应用层保证数据一致性
  • 支持分布式数据库部署
  • 便于数据迁移和维护

业务流程设计

1. 用户注册登录

  1. 用户通过Customer实体注册账户
  2. 系统根据accountType字段分配权限
  3. 支持多种账户类型admin、manager、customer

2. 分店管理

  1. 系统管理员创建Branch记录
  2. 指定分店负责人(branchBoss字段)
  3. 设置营业时间和地理位置信息

3. 菜品管理

  1. 分店管理员维护Dish信息
  2. 管理库存、价格、状态等
  3. 用户可以浏览菜品并查看评价

4. 订单流程

  1. 用户创建Order记录
  2. 通过OrderList记录订单明细
  3. 订单状态流转:待处理 → 已完成/已取消

5. 评价系统

  1. 用户完成订单后可对菜品进行评价
  2. 通过Comment实体记录评价信息
  3. 支持评分和文字评价
  4. 支持评论回复功能

扩展性考虑

1. 多租户支持

当前设计通过分包实现了基础的多角色支持,未来可以考虑:

  • 添加租户ID字段
  • 实现数据隔离机制

2. 缓存策略

对于频繁查询的实体(如菜品信息),可以考虑:

  • Redis缓存热点数据
  • 实现缓存失效机制

3. 审计功能

当前的时间戳字段为审计功能提供了基础,可以进一步扩展:

  • 操作人记录
  • 操作类型记录
  • 详细的变更历史

总结

本餐厅管理系统的实体类设计具有以下特点:

  1. 模块化设计: 按角色分包,职责清晰
  2. 统一规范: 使用一致的注解和命名规范
  3. 完整功能: 覆盖餐厅业务的核心流程
  4. 扩展性好: 预留了扩展字段和机制
  5. 数据安全: 实现逻辑删除和时间戳管理

这种设计既满足了当前的业务需求又为未来的功能扩展提供了良好的基础。通过MyBatis-Plus的强大功能大大简化了数据访问层的开发工作。