You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
canteen/uniCloud-aliyun/cloudfunctions/common/uni-stat/stat/mod/uni-pay/dao/uniPayOrders.js

100 lines
1.6 KiB

/**
* 数据库操作
*/
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();