UNPKG

shadowsocks-manager

Version:

A shadowsocks manager tool for multi user and traffic control.

113 lines (104 loc) 3.77 kB
const knex = appRequire('init/knex').knex; const moment = require('moment'); const newOrderId = () => { return moment().format('YYYYMMDDHHmmss') + Math.random().toString().substr(2, 6); }; const newOrder = async data => { await knex('webgui_ref_time').insert({ orderId: newOrderId(), user: data.user, refUser: data.refUser, account: data.account, refTime: data.refTime, status: 'FINISH', createTime: Date.now(), }); return; }; const getUserOrders = async userId => { const orders = await knex('webgui_ref_time').select([ 'webgui_ref_time.orderId', 'user.id as userId', 'user.group as group', 'user.username', 'account_plugin.port', 'webgui_ref_time.refTime', 'webgui_ref_time.status', 'webgui_ref_time.createTime', ]) .leftJoin('user', 'user.id', 'webgui_ref_time.user') .leftJoin('account_plugin', 'account_plugin.id', 'webgui_ref_time.account') .where({ 'user.id': userId }); return orders; }; const orderListAndPaging = async (options = {}) => { const search = options.search || ''; const group = options.group; const filter = options.filter || []; const sort = options.sort || 'webgui_ref_time.createTime_desc'; const page = options.page || 1; const pageSize = options.pageSize || 20; const start = options.start ? moment(options.start).hour(0).minute(0).second(0).millisecond(0).toDate().getTime() : moment(0).toDate().getTime(); const end = options.end ? moment(options.end).hour(23).minute(59).second(59).millisecond(999).toDate().getTime() : moment().toDate().getTime(); let count = knex('webgui_ref_time').select().whereBetween('webgui_ref_time.createTime', [start, end]); let orders = knex('webgui_ref_time').select([ 'webgui_ref_time.orderId', 'user.id as userId', 'user.group as group', 'user.username', 'account_plugin.port', 'webgui_ref_time.refTime', 'webgui_ref_time.status', 'webgui_ref_time.createTime', ]) .leftJoin('user', 'user.id', 'webgui_ref_time.user') .leftJoin('account_plugin', 'account_plugin.id', 'webgui_ref_time.account') .whereBetween('webgui_ref_time.createTime', [start, end]); if(filter.length) { count = count.whereIn('webgui_ref_time.status', filter); orders = orders.whereIn('webgui_ref_time.status', filter); } if(group >= 0) { count = count.leftJoin('user', 'user.id', 'webgui_ref_time.user').where({ 'user.group': group }); orders = orders.where({ 'user.group': group }); } if(search) { count = count.where('webgui_ref_time.orderId', 'like', `%${ search }%`); orders = orders.where('webgui_ref_time.orderId', 'like', `%${ search }%`); } count = await count.count('orderId as count').then(success => success[0].count); orders = await orders.orderBy( sort.split('_').slice(0, sort.split('_').length - 1).join('_'), sort.split('_')[sort.split('_').length - 1] ).limit(pageSize).offset((page - 1) * pageSize); const maxPage = Math.ceil(count / pageSize); return { total: count, page, maxPage, pageSize, orders, }; }; const getUserFinishOrder = async userId => { let orders = await knex('webgui_ref_time').select([ 'orderId', 'refTime', 'createTime', ]).where({ user: userId }).orderBy('createTime', 'DESC'); orders = orders.map(order => { return { orderId: order.orderId, type: '邀请奖励', refTime: order.refTime, createTime: order.createTime, }; }); return orders; }; exports.newOrder = newOrder; exports.getUserOrders = getUserOrders; exports.orderListAndPaging = orderListAndPaging; exports.getUserFinishOrder = getUserFinishOrder;