'use strict'; /** * 消息数据模型 * * @author CaiAoLin * @date 2017/11/23 * @version */ module.exports = app => { class Message extends app.BaseService { /** * 构造函数 * * @param {Object} ctx - egg全局变量 * @return {void} */ constructor(ctx) { super(ctx); this.tableName = 'message'; } /** * 规则 * * @return {Object} - 返回规则 */ rule() { return { title: { type: 'string', required: true, allowEmpty: false }, content: { type: 'string', required: false, allowEmpty: true }, istop: { type: 'string', required: false, allowEmpty: true }, }; } /** * 查询过虑 * * @param {Object} data - 筛选表单中的get数据 * @return {void} */ searchFilter(data, project_id) { this.initSqlBuilder(); // 状态筛选 data.type = parseInt(data.type); data.type = isNaN(data.type) || data.type <= 0 ? 1 : data.type; // 获取用户数据 this.sqlBuilder.setAndWhere('type', { value: data.type, operate: '=', }); this.sqlBuilder.setAndWhere('project_id', { value: project_id, operate: '=', }); } /** * 获取消息数据 * * @param {Number} startTime - 时间标记位(获取这个时间点之后的数据) * @return {Array} - 返回消息数据 */ async getMessage(startTime, project_id) { this.initSqlBuilder(); this.sqlBuilder.setAndWhere('release_time', { value: startTime, operate: '>=', }); // 获取用户数据 this.sqlBuilder.setAndWhere('project_id', { value: project_id, operate: '=', }); // 获取用户数据 this.sqlBuilder.setAndWhere('type', { value: 1, operate: '=', }); const [sql, sqlParam] = this.sqlBuilder.build(this.tableName); const result = await this.db.query(sql, sqlParam); return result; } /** * 修改通知信息 * * @param {Object} data - post过来的数据 * @return {Boolean} - 返回修改结果 */ async save(id, data, user, projectId) { if (data._csrf_j !== undefined) { delete data._csrf_j; } if (id > 0) { // 修改操作时 data.id = id; const msgInfo = await this.getDataById(id); data.istop = parseFloat(msgInfo.istop) === 0 && parseInt(data.istop) === 1 ? data.create_time : data.istop === undefined ? 0 : msgInfo.istop; delete data.create_time; } else { data.release_time = data.create_time; data.project_id = projectId; data.create_uid = user.accountId; data.creator = user.name; data.istop = parseInt(data.istop) === 1 ? data.create_time : 0; } const operate = id === 0 ? await this.db.insert(this.tableName, data) : await this.db.update(this.tableName, data); const result = operate.affectedRows > 0; return result; } /** * 修改通知信息 * * @param {Object} data - post过来的数据 * @return {Boolean} - 返回修改结果 */ async getMsgList(projectId, limit = 5, offset = 0, type = 1) { if (type === 1) { const sql = 'SELECT * FROM ?? WHERE `project_id` = ? AND `type` = ? ORDER BY CONCAT(`istop`,`release_time`) DESC LIMIT ?,?'; const sqlParam = [this.tableName, projectId, type, offset, limit]; return await this.db.query(sql, sqlParam); } const sql = 'SELECT * FROM ?? WHERE `type` = ? AND `status` = ? ORDER BY `release_time` DESC LIMIT ?,?'; const sqlParam = [this.tableName, type, 1, offset, limit]; return await this.db.query(sql, sqlParam); } } return Message; };