179 lines
3.6 KiB
JavaScript
179 lines
3.6 KiB
JavaScript
/**
|
||
* 栏舍模型
|
||
* @file Pen.js
|
||
* @description 栏舍信息数据模型
|
||
*/
|
||
|
||
const { DataTypes, Model } = require('sequelize');
|
||
const sequelize = require('../config/database');
|
||
|
||
class Pen extends Model {
|
||
// 获取动物类型文本
|
||
getAnimalTypeText() {
|
||
return this.animal_type || '未知';
|
||
}
|
||
|
||
// 获取状态文本
|
||
getStatusText() {
|
||
return this.status ? '开启' : '关闭';
|
||
}
|
||
|
||
// 获取容量使用率(如果有当前动物数量的话)
|
||
getCapacityUsageRate() {
|
||
// 这里可以根据实际业务需求计算
|
||
return 0;
|
||
}
|
||
|
||
// 检查容量是否足够
|
||
isCapacitySufficient(requiredCapacity) {
|
||
return (this.capacity - this.getCurrentAnimalCount()) >= requiredCapacity;
|
||
}
|
||
|
||
// 获取当前动物数量(需要根据实际业务实现)
|
||
getCurrentAnimalCount() {
|
||
// 这里应该查询当前栏舍中的动物数量
|
||
// 暂时返回0,实际实现时需要关联查询
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
Pen.init({
|
||
id: {
|
||
type: DataTypes.BIGINT,
|
||
primaryKey: true,
|
||
autoIncrement: true,
|
||
comment: '栏舍ID'
|
||
},
|
||
name: {
|
||
type: DataTypes.STRING(50),
|
||
allowNull: false,
|
||
comment: '栏舍名称',
|
||
validate: {
|
||
notEmpty: {
|
||
msg: '栏舍名称不能为空'
|
||
},
|
||
len: {
|
||
args: [1, 50],
|
||
msg: '栏舍名称长度应在1-50个字符之间'
|
||
}
|
||
}
|
||
},
|
||
animal_type: {
|
||
type: DataTypes.ENUM('马', '牛', '羊', '家禽', '猪'),
|
||
allowNull: false,
|
||
comment: '动物类型',
|
||
validate: {
|
||
notEmpty: {
|
||
msg: '动物类型不能为空'
|
||
},
|
||
isIn: {
|
||
args: [['马', '牛', '羊', '家禽', '猪']],
|
||
msg: '动物类型必须是:马、牛、羊、家禽、猪中的一个'
|
||
}
|
||
}
|
||
},
|
||
pen_type: {
|
||
type: DataTypes.STRING(50),
|
||
allowNull: true,
|
||
comment: '栏舍类型',
|
||
validate: {
|
||
len: {
|
||
args: [0, 50],
|
||
msg: '栏舍类型长度不能超过50个字符'
|
||
}
|
||
}
|
||
},
|
||
responsible: {
|
||
type: DataTypes.STRING(20),
|
||
allowNull: false,
|
||
comment: '负责人',
|
||
validate: {
|
||
notEmpty: {
|
||
msg: '负责人不能为空'
|
||
},
|
||
len: {
|
||
args: [1, 20],
|
||
msg: '负责人姓名长度应在1-20个字符之间'
|
||
}
|
||
}
|
||
},
|
||
capacity: {
|
||
type: DataTypes.INTEGER,
|
||
allowNull: false,
|
||
defaultValue: 1,
|
||
comment: '容量',
|
||
validate: {
|
||
min: {
|
||
args: 1,
|
||
msg: '容量不能小于1'
|
||
},
|
||
max: {
|
||
args: 10000,
|
||
msg: '容量不能超过10000'
|
||
},
|
||
isInt: {
|
||
msg: '容量必须是整数'
|
||
}
|
||
}
|
||
},
|
||
status: {
|
||
type: DataTypes.BOOLEAN,
|
||
allowNull: false,
|
||
defaultValue: true,
|
||
comment: '状态:true-开启,false-关闭'
|
||
},
|
||
description: {
|
||
type: DataTypes.TEXT,
|
||
allowNull: true,
|
||
comment: '备注信息',
|
||
validate: {
|
||
len: {
|
||
args: [0, 1000],
|
||
msg: '备注信息长度不能超过1000个字符'
|
||
}
|
||
}
|
||
},
|
||
farm_id: {
|
||
type: DataTypes.BIGINT,
|
||
allowNull: true,
|
||
comment: '所属农场ID',
|
||
references: {
|
||
model: 'farms',
|
||
key: 'id'
|
||
}
|
||
},
|
||
creator: {
|
||
type: DataTypes.STRING(50),
|
||
allowNull: false,
|
||
defaultValue: 'admin',
|
||
comment: '创建人'
|
||
}
|
||
}, {
|
||
sequelize,
|
||
modelName: 'Pen',
|
||
tableName: 'pens',
|
||
timestamps: true,
|
||
createdAt: 'created_at',
|
||
updatedAt: 'updated_at',
|
||
comment: '栏舍管理表',
|
||
indexes: [
|
||
{
|
||
fields: ['name']
|
||
},
|
||
{
|
||
fields: ['animal_type']
|
||
},
|
||
{
|
||
fields: ['farm_id']
|
||
},
|
||
{
|
||
fields: ['status']
|
||
},
|
||
{
|
||
fields: ['created_at']
|
||
}
|
||
]
|
||
});
|
||
|
||
module.exports = Pen;
|