Files
nxxmdata/bank-backend/migrations/20241220000009-create-loan-contracts.js
2025-09-24 17:49:32 +08:00

178 lines
4.4 KiB
JavaScript

/**
* 创建贷款合同表迁移
* @file 20241220000009-create-loan-contracts.js
*/
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('bank_loan_contracts', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
contractNumber: {
type: Sequelize.STRING(50),
allowNull: false,
unique: true,
comment: '合同编号'
},
applicationNumber: {
type: Sequelize.STRING(50),
allowNull: false,
comment: '申请单号'
},
productName: {
type: Sequelize.STRING(200),
allowNull: false,
comment: '贷款产品名称'
},
farmerName: {
type: Sequelize.STRING(100),
allowNull: false,
comment: '申请养殖户姓名'
},
borrowerName: {
type: Sequelize.STRING(100),
allowNull: false,
comment: '贷款人姓名'
},
borrowerIdNumber: {
type: Sequelize.STRING(20),
allowNull: false,
comment: '贷款人身份证号'
},
assetType: {
type: Sequelize.STRING(50),
allowNull: false,
comment: '生资种类'
},
applicationQuantity: {
type: Sequelize.STRING(100),
allowNull: false,
comment: '申请数量'
},
amount: {
type: Sequelize.DECIMAL(15, 2),
allowNull: false,
comment: '合同金额'
},
paidAmount: {
type: Sequelize.DECIMAL(15, 2),
allowNull: false,
defaultValue: 0,
comment: '已还款金额'
},
status: {
type: Sequelize.ENUM(
'active',
'pending',
'completed',
'defaulted',
'cancelled'
),
allowNull: false,
defaultValue: 'pending',
comment: '合同状态'
},
type: {
type: Sequelize.ENUM(
'livestock_collateral',
'farmer_loan',
'business_loan',
'personal_loan'
),
allowNull: false,
comment: '合同类型'
},
term: {
type: Sequelize.INTEGER,
allowNull: false,
comment: '合同期限(月)'
},
interestRate: {
type: Sequelize.DECIMAL(5, 2),
allowNull: false,
comment: '利率'
},
phone: {
type: Sequelize.STRING(20),
allowNull: false,
comment: '联系电话'
},
purpose: {
type: Sequelize.TEXT,
allowNull: true,
comment: '贷款用途'
},
remark: {
type: Sequelize.TEXT,
allowNull: true,
comment: '备注'
},
contractTime: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW,
comment: '合同签订时间'
},
disbursementTime: {
type: Sequelize.DATE,
allowNull: true,
comment: '放款时间'
},
maturityTime: {
type: Sequelize.DATE,
allowNull: true,
comment: '到期时间'
},
completedTime: {
type: Sequelize.DATE,
allowNull: true,
comment: '完成时间'
},
createdBy: {
type: Sequelize.INTEGER,
allowNull: true,
comment: '创建人ID',
references: {
model: 'bank_users',
key: 'id'
}
},
updatedBy: {
type: Sequelize.INTEGER,
allowNull: true,
comment: '更新人ID',
references: {
model: 'bank_users',
key: 'id'
}
},
createdAt: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW
}
});
// 添加索引
await queryInterface.addIndex('bank_loan_contracts', ['contractNumber']);
await queryInterface.addIndex('bank_loan_contracts', ['applicationNumber']);
await queryInterface.addIndex('bank_loan_contracts', ['status']);
await queryInterface.addIndex('bank_loan_contracts', ['borrowerName']);
await queryInterface.addIndex('bank_loan_contracts', ['farmerName']);
await queryInterface.addIndex('bank_loan_contracts', ['contractTime']);
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('bank_loan_contracts');
}
};