115 lines
2.5 KiB
JavaScript
115 lines
2.5 KiB
JavaScript
const { DataTypes } = require('sequelize');
|
||
const { sequelize } = require('../config/database');
|
||
|
||
/**
|
||
* PaymentOrder Model
|
||
* Represents offline payment orders created by admin
|
||
*/
|
||
const PaymentOrder = sequelize.define('PaymentOrder', {
|
||
id: {
|
||
type: DataTypes.UUID,
|
||
defaultValue: DataTypes.UUIDV4,
|
||
primaryKey: true,
|
||
},
|
||
orderNo: {
|
||
type: DataTypes.STRING(50),
|
||
allowNull: false,
|
||
unique: true,
|
||
field: 'order_no',
|
||
comment: '订单编号,自动生成',
|
||
},
|
||
userId: {
|
||
type: DataTypes.UUID,
|
||
allowNull: false,
|
||
field: 'user_id',
|
||
references: {
|
||
model: 'user',
|
||
key: 'id',
|
||
},
|
||
comment: '支付用户ID',
|
||
},
|
||
appointmentId: {
|
||
type: DataTypes.UUID,
|
||
allowNull: true,
|
||
field: 'appointment_id',
|
||
references: {
|
||
model: 'appointment',
|
||
key: 'id',
|
||
},
|
||
comment: '关联预约单ID(可选)',
|
||
},
|
||
amount: {
|
||
type: DataTypes.DECIMAL(10, 2),
|
||
allowNull: true,
|
||
defaultValue: null,
|
||
comment: '支付金额(人民币,保留用于兼容)',
|
||
},
|
||
amountPeso: {
|
||
type: DataTypes.DECIMAL(10, 2),
|
||
allowNull: true,
|
||
defaultValue: null,
|
||
field: 'amount_peso',
|
||
comment: '支付金额(比索)',
|
||
},
|
||
amountRmb: {
|
||
type: DataTypes.DECIMAL(10, 2),
|
||
allowNull: true,
|
||
defaultValue: null,
|
||
field: 'amount_rmb',
|
||
comment: '支付金额(人民币)',
|
||
},
|
||
serviceContent: {
|
||
type: DataTypes.TEXT,
|
||
allowNull: false,
|
||
field: 'service_content',
|
||
comment: '服务内容',
|
||
},
|
||
paymentTime: {
|
||
type: DataTypes.DATE,
|
||
allowNull: false,
|
||
field: 'payment_time',
|
||
comment: '下单时间',
|
||
},
|
||
notes: {
|
||
type: DataTypes.TEXT,
|
||
allowNull: true,
|
||
comment: '备注(可选)',
|
||
},
|
||
createdBy: {
|
||
type: DataTypes.UUID,
|
||
allowNull: false,
|
||
field: 'created_by',
|
||
references: {
|
||
model: 'admin',
|
||
key: 'id',
|
||
},
|
||
comment: '创建人(管理员ID)',
|
||
},
|
||
status: {
|
||
type: DataTypes.ENUM('active', 'cancelled'),
|
||
defaultValue: 'active',
|
||
allowNull: false,
|
||
comment: '订单状态',
|
||
},
|
||
cancelReason: {
|
||
type: DataTypes.TEXT,
|
||
allowNull: true,
|
||
field: 'cancel_reason',
|
||
comment: '取消原因',
|
||
},
|
||
}, {
|
||
tableName: 'payment_orders',
|
||
timestamps: true,
|
||
underscored: true,
|
||
indexes: [
|
||
{ fields: ['order_no'], unique: true },
|
||
{ fields: ['user_id'] },
|
||
{ fields: ['appointment_id'] },
|
||
{ fields: ['status'] },
|
||
{ fields: ['payment_time'] },
|
||
{ fields: ['created_by'] },
|
||
],
|
||
});
|
||
|
||
module.exports = PaymentOrder;
|