修改管理后台
This commit is contained in:
@@ -16,6 +16,28 @@ const Product = require('./Product');
|
||||
const Order = require('./Order');
|
||||
const OrderItem = require('./OrderItem');
|
||||
const SensorData = require('./SensorData');
|
||||
const SystemConfig = require('./SystemConfig');
|
||||
const MenuPermission = require('./MenuPermission');
|
||||
const RoleMenuPermission = require('./RoleMenuPermission');
|
||||
const Permission = require('./Permission');
|
||||
const IotXqClient = require('./IotXqClient');
|
||||
const IotJbqServer = require('./IotJbqServer');
|
||||
const IotJbqClient = require('./IotJbqClient');
|
||||
const ElectronicFence = require('./ElectronicFence');
|
||||
const ElectronicFencePoint = require('./ElectronicFencePoint');
|
||||
const Pen = require('./Pen');
|
||||
const CattlePen = require('./CattlePen');
|
||||
const CattleBatch = require('./CattleBatch');
|
||||
const CattleBatchAnimal = require('./CattleBatchAnimal');
|
||||
const CattleTransferRecord = require('./CattleTransferRecord');
|
||||
const CattleExitRecord = require('./CattleExitRecord');
|
||||
const IotCattle = require('./IotCattle');
|
||||
const CattleType = require('./CattleType');
|
||||
const CattleUser = require('./CattleUser');
|
||||
const FormLog = require('./FormLog');
|
||||
const OperationLog = require('./OperationLog');
|
||||
|
||||
// 注意:模型初始化在各自的模型文件中完成
|
||||
|
||||
// 建立模型之间的关联关系
|
||||
|
||||
@@ -31,6 +53,20 @@ Animal.belongsTo(Farm, {
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 养殖场与牛只的一对多关系
|
||||
Farm.hasMany(IotCattle, {
|
||||
foreignKey: 'orgId',
|
||||
as: 'cattle',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
IotCattle.belongsTo(Farm, {
|
||||
foreignKey: 'orgId',
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 牛只品种与牛只的一对多关系(在模型初始化后定义)
|
||||
|
||||
// 养殖场与设备的一对多关系
|
||||
Farm.hasMany(Device, {
|
||||
foreignKey: 'farm_id',
|
||||
@@ -91,31 +127,29 @@ SensorData.belongsTo(Farm, {
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 用户与角色的多对多关系
|
||||
User.belongsToMany(Role, {
|
||||
through: UserRole,
|
||||
foreignKey: 'user_id',
|
||||
otherKey: 'role_id',
|
||||
as: 'roles'
|
||||
// 用户与角色的直接关联关系(通过roles字段)
|
||||
User.belongsTo(Role, {
|
||||
foreignKey: 'roles',
|
||||
as: 'role'
|
||||
});
|
||||
Role.belongsToMany(User, {
|
||||
through: UserRole,
|
||||
foreignKey: 'role_id',
|
||||
otherKey: 'user_id',
|
||||
Role.hasMany(User, {
|
||||
foreignKey: 'roles',
|
||||
as: 'users'
|
||||
});
|
||||
|
||||
// 同步所有模型
|
||||
const syncModels = async (options = {}) => {
|
||||
try {
|
||||
await sequelize.sync(options);
|
||||
console.log('所有模型已同步到数据库');
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('模型同步失败:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
// 用户与角色的多对多关系(暂时注释掉,当前使用直接关联)
|
||||
// User.belongsToMany(Role, {
|
||||
// through: UserRole,
|
||||
// foreignKey: 'user_id',
|
||||
// otherKey: 'role_id',
|
||||
// as: 'userRoles'
|
||||
// });
|
||||
// Role.belongsToMany(User, {
|
||||
// through: UserRole,
|
||||
// foreignKey: 'role_id',
|
||||
// otherKey: 'user_id',
|
||||
// as: 'roleUsers'
|
||||
// });
|
||||
|
||||
// 用户与订单的一对多关系
|
||||
User.hasMany(Order, {
|
||||
@@ -153,6 +187,304 @@ OrderItem.belongsTo(Product, {
|
||||
as: 'product'
|
||||
});
|
||||
|
||||
// 菜单权限的自关联关系(已在associate方法中定义)
|
||||
|
||||
// 角色与菜单权限的多对多关系
|
||||
Role.belongsToMany(MenuPermission, {
|
||||
through: RoleMenuPermission,
|
||||
foreignKey: 'role_id',
|
||||
otherKey: 'menu_permission_id',
|
||||
as: 'menuPermissions'
|
||||
});
|
||||
|
||||
MenuPermission.belongsToMany(Role, {
|
||||
through: RoleMenuPermission,
|
||||
foreignKey: 'menu_permission_id',
|
||||
otherKey: 'role_id',
|
||||
as: 'roles'
|
||||
});
|
||||
|
||||
// 角色与权限的多对多关系
|
||||
Role.belongsToMany(Permission, {
|
||||
through: 'role_permissions',
|
||||
as: 'permissions',
|
||||
foreignKey: 'role_id',
|
||||
otherKey: 'permission_id'
|
||||
});
|
||||
|
||||
Permission.belongsToMany(Role, {
|
||||
through: 'role_permissions',
|
||||
as: 'roles',
|
||||
foreignKey: 'permission_id',
|
||||
otherKey: 'role_id'
|
||||
});
|
||||
|
||||
// 农场与栏舍的一对多关系
|
||||
Farm.hasMany(Pen, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'pens',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
Pen.belongsTo(Farm, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 农场与电子围栏的一对多关系
|
||||
Farm.hasMany(ElectronicFence, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'electronicFences',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
ElectronicFence.belongsTo(Farm, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 电子围栏与坐标点的一对多关系
|
||||
ElectronicFence.hasMany(ElectronicFencePoint, {
|
||||
foreignKey: 'fence_id',
|
||||
as: 'points',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
ElectronicFencePoint.belongsTo(ElectronicFence, {
|
||||
foreignKey: 'fence_id',
|
||||
as: 'fence'
|
||||
});
|
||||
|
||||
// 用户与坐标点的关联关系
|
||||
User.hasMany(ElectronicFencePoint, {
|
||||
foreignKey: 'created_by',
|
||||
as: 'createdFencePoints',
|
||||
onDelete: 'SET NULL',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
ElectronicFencePoint.belongsTo(User, {
|
||||
foreignKey: 'created_by',
|
||||
as: 'creator'
|
||||
});
|
||||
|
||||
User.hasMany(ElectronicFencePoint, {
|
||||
foreignKey: 'updated_by',
|
||||
as: 'updatedFencePoints',
|
||||
onDelete: 'SET NULL',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
ElectronicFencePoint.belongsTo(User, {
|
||||
foreignKey: 'updated_by',
|
||||
as: 'updater'
|
||||
});
|
||||
|
||||
// 农场与栏舍设置的一对多关系
|
||||
Farm.hasMany(CattlePen, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'cattlePens',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattlePen.belongsTo(Farm, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 栏舍设置与动物的一对多关系
|
||||
CattlePen.hasMany(Animal, {
|
||||
foreignKey: 'pen_id',
|
||||
as: 'animals',
|
||||
onDelete: 'SET NULL',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
Animal.belongsTo(CattlePen, {
|
||||
foreignKey: 'pen_id',
|
||||
as: 'pen'
|
||||
});
|
||||
|
||||
// 农场与批次设置的一对多关系
|
||||
Farm.hasMany(CattleBatch, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'cattleBatches',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleBatch.belongsTo(Farm, {
|
||||
foreignKey: 'farm_id',
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 栏舍设置与牛只的一对多关系
|
||||
CattlePen.hasMany(IotCattle, {
|
||||
foreignKey: 'penId',
|
||||
as: 'cattle',
|
||||
onDelete: 'SET NULL',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
IotCattle.belongsTo(CattlePen, {
|
||||
foreignKey: 'penId',
|
||||
as: 'pen'
|
||||
});
|
||||
|
||||
// 批次设置与牛只的一对多关系
|
||||
CattleBatch.hasMany(IotCattle, {
|
||||
foreignKey: 'batchId',
|
||||
as: 'cattle',
|
||||
onDelete: 'SET NULL',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
IotCattle.belongsTo(CattleBatch, {
|
||||
foreignKey: 'batchId',
|
||||
as: 'batch'
|
||||
});
|
||||
|
||||
// 牛只与转栏记录的一对多关系
|
||||
IotCattle.hasMany(CattleTransferRecord, {
|
||||
foreignKey: 'animalId',
|
||||
as: 'transferRecords',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleTransferRecord.belongsTo(IotCattle, {
|
||||
foreignKey: 'animalId',
|
||||
as: 'cattle'
|
||||
});
|
||||
|
||||
// 栏舍设置与转栏记录的一对多关系(转出)
|
||||
CattlePen.hasMany(CattleTransferRecord, {
|
||||
foreignKey: 'fromPenId',
|
||||
as: 'fromTransferRecords',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleTransferRecord.belongsTo(CattlePen, {
|
||||
foreignKey: 'fromPenId',
|
||||
as: 'fromPen'
|
||||
});
|
||||
|
||||
// 栏舍设置与转栏记录的一对多关系(转入)
|
||||
CattlePen.hasMany(CattleTransferRecord, {
|
||||
foreignKey: 'toPenId',
|
||||
as: 'toTransferRecords',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleTransferRecord.belongsTo(CattlePen, {
|
||||
foreignKey: 'toPenId',
|
||||
as: 'toPen'
|
||||
});
|
||||
|
||||
// 农场与转栏记录的一对多关系
|
||||
Farm.hasMany(CattleTransferRecord, {
|
||||
foreignKey: 'farmId',
|
||||
as: 'transferRecords',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleTransferRecord.belongsTo(Farm, {
|
||||
foreignKey: 'farmId',
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 牛只与离栏记录的一对多关系
|
||||
IotCattle.hasMany(CattleExitRecord, {
|
||||
foreignKey: 'animalId',
|
||||
as: 'exitRecords',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleExitRecord.belongsTo(IotCattle, {
|
||||
foreignKey: 'animalId',
|
||||
as: 'cattle'
|
||||
});
|
||||
|
||||
// 栏舍设置与离栏记录的一对多关系
|
||||
CattlePen.hasMany(CattleExitRecord, {
|
||||
foreignKey: 'originalPenId',
|
||||
as: 'exitRecords',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleExitRecord.belongsTo(CattlePen, {
|
||||
foreignKey: 'originalPenId',
|
||||
as: 'originalPen'
|
||||
});
|
||||
|
||||
// 农场与离栏记录的一对多关系
|
||||
Farm.hasMany(CattleExitRecord, {
|
||||
foreignKey: 'farmId',
|
||||
as: 'exitRecords',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
CattleExitRecord.belongsTo(Farm, {
|
||||
foreignKey: 'farmId',
|
||||
as: 'farm'
|
||||
});
|
||||
|
||||
// 初始化所有模型
|
||||
const initModels = () => {
|
||||
// 初始化CattleType模型
|
||||
CattleType.init(sequelize);
|
||||
// 初始化CattleUser模型
|
||||
CattleUser.init(sequelize);
|
||||
// 初始化FormLog模型
|
||||
FormLog.init(sequelize);
|
||||
// 初始化OperationLog模型
|
||||
OperationLog.init(sequelize);
|
||||
};
|
||||
|
||||
// 初始化模型
|
||||
initModels();
|
||||
|
||||
// 在模型初始化后定义CattleType的关联关系
|
||||
CattleType.hasMany(IotCattle, {
|
||||
foreignKey: 'varieties',
|
||||
as: 'cattle',
|
||||
onDelete: 'RESTRICT',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
IotCattle.belongsTo(CattleType, {
|
||||
foreignKey: 'varieties',
|
||||
as: 'cattleType'
|
||||
});
|
||||
|
||||
// 在模型初始化后定义CattleUser的关联关系
|
||||
CattleUser.hasMany(IotCattle, {
|
||||
foreignKey: 'strain',
|
||||
as: 'cattle',
|
||||
onDelete: 'RESTRICT',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
IotCattle.belongsTo(CattleUser, {
|
||||
foreignKey: 'strain',
|
||||
as: 'cattleUser'
|
||||
});
|
||||
|
||||
// 用户与操作日志的一对多关系
|
||||
User.hasMany(OperationLog, {
|
||||
foreignKey: 'user_id',
|
||||
as: 'operationLogs',
|
||||
onDelete: 'CASCADE',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
OperationLog.belongsTo(User, {
|
||||
foreignKey: 'user_id',
|
||||
as: 'user'
|
||||
});
|
||||
|
||||
// 同步所有模型
|
||||
const syncModels = async (options = {}) => {
|
||||
try {
|
||||
await sequelize.sync(options);
|
||||
console.log('所有模型已同步到数据库');
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('模型同步失败:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
sequelize,
|
||||
BaseModel,
|
||||
@@ -167,5 +499,67 @@ module.exports = {
|
||||
Order,
|
||||
OrderItem,
|
||||
SensorData,
|
||||
SystemConfig,
|
||||
MenuPermission,
|
||||
RoleMenuPermission,
|
||||
Permission,
|
||||
IotXqClient,
|
||||
IotJbqServer,
|
||||
IotJbqClient,
|
||||
ElectronicFence,
|
||||
ElectronicFencePoint,
|
||||
Pen,
|
||||
CattlePen,
|
||||
CattleBatch,
|
||||
CattleBatchAnimal,
|
||||
CattleTransferRecord,
|
||||
CattleExitRecord,
|
||||
IotCattle,
|
||||
CattleType,
|
||||
CattleUser,
|
||||
FormLog,
|
||||
OperationLog,
|
||||
syncModels
|
||||
};
|
||||
};
|
||||
|
||||
// 调用模型的associate方法建立关联关系
|
||||
const models = {
|
||||
Farm,
|
||||
Animal,
|
||||
Device,
|
||||
Alert,
|
||||
User,
|
||||
Role,
|
||||
UserRole,
|
||||
Product,
|
||||
Order,
|
||||
OrderItem,
|
||||
SensorData,
|
||||
SystemConfig,
|
||||
MenuPermission,
|
||||
RoleMenuPermission,
|
||||
Permission,
|
||||
IotXqClient,
|
||||
IotJbqServer,
|
||||
IotJbqClient,
|
||||
ElectronicFence,
|
||||
ElectronicFencePoint,
|
||||
Pen,
|
||||
CattlePen,
|
||||
CattleBatch,
|
||||
CattleBatchAnimal,
|
||||
CattleTransferRecord,
|
||||
CattleExitRecord,
|
||||
IotCattle,
|
||||
CattleType,
|
||||
CattleUser,
|
||||
FormLog,
|
||||
OperationLog
|
||||
};
|
||||
|
||||
// 建立关联关系(暂时禁用,避免冲突)
|
||||
// Object.keys(models).forEach(modelName => {
|
||||
// if (models[modelName].associate) {
|
||||
// models[modelName].associate(models);
|
||||
// }
|
||||
// });
|
||||
Reference in New Issue
Block a user