var path = require("path"); // 引入自定义的 DAO 模块,可能包含了对数据库操作的封装 daoModule = require("./DAO"); // 引入位于 modules/database 目录下的数据库模块,使用 path.join 拼接当前工作目录和相对路径 databaseModule = require(path.join(process.cwd(), "modules/database")); /** * 创建管理员 * * @param {[type]} obj 管理员信息,包含创建管理员所需的信息,如用户名、密码等,具体结构取决于数据库表的设计 * @param {Function} cb 回调函数,用于处理创建操作的结果 * 当创建操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null */ module.exports.create = function (obj, cb) { // 调用 daoModule 的 create 方法,创建 ManagerModel 类型的对象,传入管理员信息和回调函数 daoModule.create("ManagerModel", obj, cb); } /** * 获取管理员列表 * * @param {[type]} conditions 查询条件,用于筛选管理员列表,具体内容根据业务需求而定 * @param {Function} cb 回调函数,用于处理查询结果 * 当查询操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null,第二个参数为查询到的管理员列表 */ module.exports.list = function (conditions, cb) { // 调用 daoModule 的 list 方法,查询 ManagerModel 类型的对象,传入查询条件和自定义的回调函数 daoModule.list("ManagerModel", conditions, function (err, models) { if (err) return cb(err, null); cb(null, models); }); } /** * 通过查询条件获取管理员对象 * * @param {[type]} conditions 条件,用于筛选单个管理员,具体内容根据业务需求而定 * @param {Function} cb 回调函数,用于处理查询结果 * 当查询操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null,第二个参数为查询到的管理员对象 */ module.exports.findOne = function (conditions, cb) { // 调用 daoModule 的 findOne 方法,根据条件查询 ManagerModel 类型的对象,传入条件和回调函数 daoModule.findOne("ManagerModel", conditions, cb); } /** * 通过关键词查询用户 * * @param {[type]} key 关键词,用于筛选用户,可能是用户名的一部分等 * @param {[type]} offset 分页偏移量,用于分页查询,从第几行开始查询 * @param {[type]} limit 分页限制,每页显示的数量 * @param {Function} cb 回调函数,用于处理查询结果 * 当查询操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null,第二个参数为查询到的管理员列表 */ module.exports.findByKey = function (key, offset, limit, cb) { // 从数据库模块中获取数据库对象 db = databaseModule.getDatabase(); // 定义基本的 SQL 查询语句,使用 LEFT JOIN 连接 sp_manager 和 sp_role 表 sql = "SELECT * FROM sp_manager as mgr LEFT JOIN sp_role as role ON mgr.role_id = role.role_id"; // 根据是否有关键词进行不同的 SQL 拼接和查询操作 if (key) { // 拼接 LIKE 子句,进行模糊查询,并添加 LIMIT 子句进行分页 sql += " WHERE mg_name LIKE? LIMIT?,?"; database.driver.execQuery( sql , ["%" + key + "%", offset, limit], function (err, managers) { if (err) return cb("查询执行出错"); cb(null, managers); }); } else { // 仅添加 LIMIT 子句进行分页 sql += " LIMIT?,? "; database.driver.execQuery(sql, [offset, limit], function (err, managers) { if (err) return cb("查询执行出错"); cb(null, managers); }); } } /** * 判断是否存在管理员 * * @param {[type]} username 用户名,用于判断该用户名对应的管理员是否存在 * @param {Function} cb 回调函数,用于处理查询结果 * 当查询操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null,第二个参数为布尔值表示是否存在 */ module.exports.exists = function (username, cb) { // 从数据库模块中获取数据库对象 var db = databaseModule.getDatabase(); // 获取 ManagerModel 模型 var Model = db.models.ManagerModel; // 调用 Model 的 exists 方法,传入用户名作为条件,查询是否存在 Model.exists({"mg_name": username}, function (err, isExists) { if (err) return cb("查询失败"); cb(null, isExists); }); } /** * 模糊查询用户数量 * * @param {[type]} key 关键词,用于模糊查询用户数量,可能是用户名的一部分等 * @param {Function} cb 回调函数,用于处理查询结果 * 当查询操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null,第二个参数为查询到的用户数量 */ module.exports.countByKey = function (key, cb) { // 从数据库模块中获取数据库对象 db = databaseModule.getDatabase(); // 定义基本的 SQL 查询语句,统计 sp_manager 表中的记录数 sql = "SELECT count(*) as count FROM sp_manager"; // 根据是否有关键词进行不同的 SQL 拼接和查询操作 if (key) { // 拼接 LIKE 子句,进行模糊查询 sql += " WHERE mg_name LIKE?"; database.driver.execQuery( sql , ["%" + key + "%"], function (err, result) { if (err) return cb("查询执行出错"); // 从查询结果中获取数量 cb(null, result[0]["count"]); }); } else { database.driver.execQuery(sql, function (err, result) { if (err) return cb("查询执行出错"); // 从查询结果中获取数量 cb(null, result[0]["count"]); }); } } /** * 通过 ID 获取管理员对象数据 * * @param {[type]} id 管理员主键 ID,用于唯一标识管理员 * @param {Function} cb 回调函数,用于处理查询结果 * 当查询操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null,第二个参数为查询到的管理员对象 */ module.exports.show = function (id, cb) { // 调用 daoModule 的 show 方法,根据 ID 查询 ManagerModel 类型的对象,传入 ID 和回调函数 daoModule.show("ManagerModel", id, cb); } /** * 更新管理员信息 * * @param {[type]} obj 管理员对象,包含更新后的管理员信息,具体结构取决于数据库表的设计 * @param {Function} cb 回调函数,用于处理更新操作的结果 * 当更新操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null */ module.exports.update = function (obj, cb) { // 调用 daoModule 的 update 方法,更新 ManagerModel 类型的对象,传入对象的 mg_id 作为主键和对象信息及回调函数 daoModule.update("ManagerModel", obj.mg_id, obj, cb); } /** * 删除管理员对象数据 * * @param {[type]} id 主键 ID,用于唯一标识要删除的管理员 * @param {Function} cb 回调函数,用于处理删除操作的结果 * 当删除操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null */ module.exports.destroy = function (id, cb) { // 调用 daoModule 的 destroy 方法,根据 ID 删除 ManagerModel 类型的对象,传入 ID 和自定义的回调函数 daoModule.destroy("ManagerModel", id, function (err) { if (err) return cb(err); return cb(null); }); } /** * 保存管理员信息 * * @param {[type]} obj 管理员对象,包含管理员信息,具体结构取决于数据库表的设计 * @param {Function} cb 回调函数,用于处理保存操作的结果 * 当保存操作完成时调用此函数,根据管理员对象是否有 mg_id 决定是创建新的管理员还是更新现有管理员 */ module.exports.save = function (obj, cb) { // 调用 daoModule 的 show 方法,根据管理员对象的 mg_id 进行查询 daoModule.show(obj.mg_id, function (err, oldObj) { if (err) { // 若查询出错,可能是不存在该管理员,调用 create 方法创建新的管理员 daoModule.create("ManagerModel", obj, cb); } else { // 若查询成功,调用 update 方法更新现有管理员 daoModule.update("ManagerModel", obj.mg_id, obj, cb); } }) } /** * 获取管理员数量 * * @param {Function} cb 回调函数,用于处理查询结果 * 当查询操作完成时调用此函数,若出现错误,第一个参数将包含错误信息,若成功,第一个参数为 null,第二个参数为管理员数量 */ module.exports.count = function (cb) { // 调用 daoModule 进行查询,传入 ManagerModel 类型和回调函数,但这里可能存在错误,因为调用方式不完整,应该是调用 daoModule 的某个方法 daoModule("ManagerModel", cb); }