user.js 4.58 KB
/**
 * 用户管理model
 * @author: leo <qi.li@yoho.cn>
 * @date: 28/06/2017
 */

const mysqlCli = global.yoho.utils.mysqlCli;

const _ = require('lodash');
const TABLE_USER = 'user';
const TABLE_USER_INFO = 'act_user_detail_info';
const TABLE_USER_LOGIN_LOG = 'act_login_user_log';
const TABLE_USER_PRIZE_LOG = 'act_prize_user_log';

class UserModel extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    /**
     * 用户列表[分页]
     * @returns {*}
     */
    userList({pageNo, pageSize}) {
        return mysqlCli.query(
            `select id, user_phone userPhone, user_name userName, create_time createTime 
            from ${TABLE_USER}
            order by create_time desc
            limit :start, :page;`, {
                start: (pageNo - 1) * pageSize,
                page: _.parseInt(pageSize)
            }
        );
    }

    /**
     * 用户信息收集列表
     */
    usersList(pageNo, pageSize) {
        let strSql = `select * from ${TABLE_USER_INFO} 
                        order by create_time desc 
                        limit :start, :page;`;

        return mysqlCli.query(strSql, {
            start: (pageNo - 1) * pageSize,
            page: _.parseInt(pageSize)
        });
    }

    /**
     * 中奖用户信息列表
     */
    prizeUsersList(pageNo, pageSize, actId) {
        let strSql = `select * from ${TABLE_USER_PRIZE_LOG} where is_get > 0 
                        and act_id = :actId 
                        order by create_time desc 
                        limit :start, :page;`;

        return mysqlCli.query(strSql, {
            actId: actId,
            start: (pageNo - 1) * pageSize,
            page: _.parseInt(pageSize)
        });
    }

    /**
     * 用户总数
     * @returns {*}
     */
    allUsersNum() {
        return mysqlCli.query(
            `select count(*) as total from ${TABLE_USER};`
        ).then(res => {
            return res[0].total;
        });
    }

    /**
     * 收集用户总数
     */
    allInfoUsersNum() {
        let strSql = `select count(*) as total from ${TABLE_USER_INFO};`;

        return mysqlCli.query(strSql)
            .then(res => {
                return res[0].total;
            });
    }

    /**
     * 中奖用户总数
     */
    allPrizeUsersNum(actId) {
        let strSql = `select count(*) as total from ${TABLE_USER_PRIZE_LOG} where is_get > 0 and act_id = :actId;`;

        return mysqlCli.query(strSql, {
            actId: actId
        })
            .then(res => {
                return res[0].total;
            });
    }

    /**
     * 导出用户列表
     * @returns {*}
     */
    exportUserList() {
        return mysqlCli.query(
            `select id, user_phone userPhone, user_name userName, create_time createTime from ${TABLE_USER};`
        );
    }

    /**
     * 导出收集用户列表
     * @returns {*}
     */
    exportInfoUserList() {
        return mysqlCli.query(
            `select * from ${TABLE_USER_INFO};`
        );
    }

    /**
     * 导出中奖用户列表
     * @returns {*}
     */
    exportPrizeUserList(actId) {
        return mysqlCli.query(
            `select * from ${TABLE_USER_PRIZE_LOG} where is_get > 0 and act_id = :actId;`, {
                actId
            }
        );
    }

    /**
     * 用户删除
     * @returns {*}
     */
    deleteUser(userId) {
        return mysqlCli.delete(
            `delete from ${TABLE_USER} where id = :userId;`, {
                userId
            }
        );
    }

    /**
     * 用户收集用户删除
     * @param userId
     * @returns {*}
     */
    deleteInfoUser(userId) {
        return mysqlCli.delete(
            `delete from ${TABLE_USER_INFO} where id = :userId;`, {
                userId
            }
        );
    }

    /**
     * 中奖用户删除
     * @param userId
     * @returns {*}
     */
    deletePrizeUser(userId) {
        return mysqlCli.delete(
            `delete from ${TABLE_USER_PRIZE_LOG} where id = :userId;`, {
                userId
            }
        );
    }

    /**
     * 导出用户登录日志
     * @returns {*}
     */
    exportUserLoginLog({url, startTime, endTime}) {
        let sql = `select user_id,login_time,platform,ip,referer from ${TABLE_USER_LOGIN_LOG} where 1=1`;

        if (url) {
            sql += ' and referer like :url';
        }
        if (startTime) {
            sql += ' and login_time >= :startTime';
        }
        if (endTime) {
            sql += ' and login_time <= :endTime';
        }

        return mysqlCli.query(sql, {url: `%${url}%`, startTime, endTime});
    }

}

module.exports = UserModel;