/** * 数据库操作 */ const BaseMod = require('../../base'); const dbName = require("./config"); class Dao extends BaseMod { constructor() { super() this.tablePrefix = false; // 不使用表前缀 } async group(data) { let { start_time, end_time, status: status_str } = data; let status; if (status_str === "已下单") { } else if (status_str === "已付款") { status = { $gt: 0 } } else if (status_str === "已退款") { status = { $in: [2, 3] } } const dbRes = await this.aggregate(dbName.uniPayOrders, { match: { create_date: { $gte: start_time, $lte: end_time }, status }, group: { _id: { appid: '$appid', version: '$stat_data.app_version', platform: '$stat_data.platform', channel: '$stat_data.channel', }, status: { $first: '$status' }, // 支付金额 total_fee: { $sum: '$total_fee' }, // 退款金额 refund_fee: { $sum: '$refund_fee' }, // 支付笔数 order_count: { $sum: 1 }, // 支付人数(去重复) user_count: { $addToSet: '$user_id' }, // 支付设备数(去重复) device_count: { $addToSet: '$device_id' }, create_date: { $min: '$create_date' } }, addFields: { user_count: { $size: '$user_count' }, device_count: { $size: '$device_count' } }, // 按创建时间排序 sort: { create_date: 1 }, getAll: true }); let list = dbRes.data; list.map((item) => { item.status_str = status_str; }); return list; } } module.exports = new Dao();