| 版本 | 日期 | 描述 | 作者 |
|---|---|---|---|
| 3.1 | 2025-10-15 | 更新乘客信息支持多种证件类型 | Winston |
| 3.0 | 2025-10-15 | 更新为出行服务数据模型 | Winston |
用户模型:
id: number - 主键标识符username: string - 唯一用户名(主要登录标识)email: string | null - 可选邮箱地址password: string - 加密密码(bcrypt哈希)avatarFileId: number | null - 头像文件IDroles: Role[] - 用户角色多对多关系文件管理模型:
id: number - 主键标识符name: string - 文件名path: string - MinIO存储路径size: number - 文件大小(字节)type: string - 文件类型uploadUserId: number - 上传用户IDuploadTime: Date - 上传时间订单模型:
id: number - 主键标识符userId: number - 用户IDrouteId: number - 路线IDpassengerCount: number - 乘客数量totalAmount: number - 订单总金额status: string - 订单状态(待支付、待出发、行程中、已完成、已取消)paymentStatus: string - 支付状态passengerSnapshots: JSON - 乘客信息快照数组(下单时的多个乘客信息)routeSnapshot: JSON - 路线信息快照(下单时的路线信息)createdAt: Date - 创建时间乘客模型:
id: number - 主键标识符userId: number - 用户IDname: string - 乘客姓名idType: IdType - 证件类型(身份证、港澳通行证、台湾通行证、护照等)idNumber: string - 证件号码phone: string - 手机号isDefault: boolean - 是否默认乘客活动模型:
id: number - 主键标识符name: string - 活动名称description: string - 活动描述type: ActivityType - 活动类型(去程活动/返程活动)startDate: Date - 活动开始日期endDate: Date - 活动结束日期status: ActivityStatus - 活动状态(进行中、已结束、已取消)createdAt: Date - 创建时间路线模型:
id: number - 主键标识符activityId: number - 关联的活动IDstartPoint: string - 上车点endPoint: string - 下车点departureTime: Date - 出发时间vehicleType: string - 车型maxPassengers: number - 最大乘客数price: number - 价格积分模型:
id: number - 主键标识符userId: number - 用户IDpoints: number - 积分余额earnedPoints: number - 累计获得积分usedPoints: number - 累计使用积分// 用户实体接口
export interface User {
id: number;
username: string;
email: string | null;
password: string;
avatarFileId: number | null;
avatarFile?: File; // 头像文件关联
roles: Role[];
createdAt: Date;
updatedAt: Date;
}
// 角色实体接口
export interface Role {
id: number;
name: string;
permissions: string[];
users: User[];
createdAt: Date;
updatedAt: Date;
}
// 订单实体接口
export interface Order {
id: number;
userId: number;
user: User;
routeId: number;
route: Route;
activityId: number;
activity: Activity; // 订单关联的活动
passengerCount: number;
totalAmount: number;
status: OrderStatus;
paymentStatus: PaymentStatus;
passengerSnapshots: PassengerSnapshot[]; // 下单时的多个乘客信息快照
routeSnapshot: RouteSnapshot; // 下单时的路线信息快照
activitySnapshot: ActivitySnapshot; // 下单时的活动信息快照
passengers: Passenger[];
createdAt: Date;
updatedAt: Date;
}
// 乘客实体接口
export interface Passenger {
id: number;
userId: number;
user: User;
name: string;
idType: IdType; // 证件类型
idNumber: string; // 证件号码
phone: string;
isDefault: boolean;
createdAt: Date;
updatedAt: Date;
}
// 路线实体接口
export interface Route {
id: number;
startPoint: string;
endPoint: string;
departureTime: Date;
vehicleType: VehicleType;
maxPassengers: number;
price: number;
availableSeats: number;
createdAt: Date;
updatedAt: Date;
}
// 乘客信息快照接口
export interface PassengerSnapshot {
name: string;
idType: IdType; // 证件类型
idNumber: string; // 证件号码
phone: string;
isDefault: boolean;
}
// 路线信息快照接口
export interface RouteSnapshot {
startPoint: string;
endPoint: string;
departureTime: Date;
vehicleType: VehicleType;
maxPassengers: number;
price: number;
}
// 活动信息快照接口
// 用于订单中保存下单时的活动信息,确保历史数据完整性
export interface ActivitySnapshot {
id: number;
title: string;
description: string;
startTime: Date;
endTime: Date;
maxParticipants: number;
currentParticipants: number;
status: ActivityStatus;
createdAt: Date;
}
// 积分实体接口(MVP阶段暂不实现)
export interface Points {
id: number;
userId: number;
user: User;
points: number;
earnedPoints: number;
usedPoints: number;
lastUpdated: Date;
}
// 枚举定义
export enum OrderStatus {
PENDING_PAYMENT = '待支付',
WAITING_DEPARTURE = '待出发',
IN_PROGRESS = '行程中',
COMPLETED = '已完成',
CANCELLED = '已取消'
}
export enum PaymentStatus {
PENDING = '待支付',
PAID = '已支付',
FAILED = '支付失败',
REFUNDED = '已退款'
}
export enum VehicleType {
CARPOOL = '拼车',
BUSINESS = '商务车',
CHARTER = '包车'
}
export enum IdType {
ID_CARD = '身份证',
HONG_KONG_MACAO_PASS = '港澳通行证',
TAIWAN_PASS = '台湾通行证',
PASSPORT = '护照',
OTHER = '其他证件'
}
// 分页响应接口
export interface PaginatedResponse<T> {
data: T[];
pagination: {
total: number;
current: number;
pageSize: number;
totalPages: number;
};
}
快照设计说明: