info
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* 表名
|
||||
*/
|
||||
const dbName = {
|
||||
uniIdUsers: 'uni-id-users', // 支付订单明细表
|
||||
uniPayOrders: 'uni-pay-orders', // 支付订单明细表
|
||||
uniStatPayResult: 'uni-stat-pay-result', // 统计结果存储表
|
||||
uniStatSessionLogs: 'uni-stat-session-logs', // 设备会话日志表(主要用于统计访问设备数)
|
||||
uniStatUserSessionLogs: 'uni-stat-user-session-logs', // 用户会话日志表(主要用于统计访问人数)
|
||||
};
|
||||
|
||||
module.exports = dbName;
|
||||
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* 数据库操作
|
||||
*/
|
||||
module.exports = {
|
||||
uniIdUsers: require('./uniIdUsers'),
|
||||
uniPayOrders: require('./uniPayOrders'),
|
||||
uniStatPayResult: require('./uniStatPayResult'),
|
||||
uniStatSessionLogs: require('./uniStatSessionLogs'),
|
||||
uniStatUserSessionLogs: require('./uniStatUserSessionLogs'),
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* 数据库操作
|
||||
*/
|
||||
|
||||
// 引入配置文件
|
||||
const dbName = require("./config");
|
||||
|
||||
// 创建数据库对象
|
||||
let db = uniCloud.database();
|
||||
|
||||
// 获取数据库命令对象
|
||||
let _ = db.command;
|
||||
|
||||
// 获取聚合操作对象
|
||||
let $ = _.aggregate;
|
||||
|
||||
class Dao {
|
||||
|
||||
// 计算符合条件的文档数量
|
||||
async count(whereJson) {
|
||||
let dbRes = await db.collection(dbName.uniIdUsers).where(whereJson).count();
|
||||
return dbRes && dbRes.total ? dbRes.total : 0;
|
||||
}
|
||||
|
||||
// 计算具有指定状态的新用户订单数量
|
||||
async countNewUserOrder(obj) {
|
||||
let {
|
||||
whereJson,
|
||||
status
|
||||
} = obj;
|
||||
let dbRes = await db.collection(dbName.uniIdUsers).aggregate()
|
||||
.match(whereJson) // 匹配条件
|
||||
.lookup({
|
||||
from: dbName.uniPayOrders, // 关联集合名称
|
||||
let: {
|
||||
user_id: '$_id', // 定义关联字段
|
||||
},
|
||||
pipeline: $.pipeline()
|
||||
.match(_.expr($.and([
|
||||
$.eq(['$user_id', '$$user_id']), // 关联条件
|
||||
$.in(['$status', status]) // 关联条件
|
||||
])))
|
||||
.limit(1) // 返回结果数量限制
|
||||
.done(), // 结束关联管道
|
||||
as: 'order', // 关联结果存储字段
|
||||
})
|
||||
.unwind({
|
||||
path: '$order', // 展开关联结果
|
||||
})
|
||||
.group({
|
||||
_id: null, // 分组字段为null,表示整个集合作为一个组
|
||||
count: {
|
||||
$addToSet: '$_id' // 将符合条件的文档_id添加到数组
|
||||
},
|
||||
})
|
||||
.addFields({
|
||||
count: {
|
||||
$size: '$count' // 统计数组的长度,即订单数量
|
||||
}
|
||||
})
|
||||
.end(); // 执行聚合操作并返回结果
|
||||
try {
|
||||
return dbRes.data[0].count; // 返回订单数量
|
||||
} catch (err) {
|
||||
return 0; // 出现错误时返回0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new Dao();
|
||||
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* 数据库操作
|
||||
*/
|
||||
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
|
||||
}; // 状态大于0表示已付款
|
||||
} else if (status_str === "已退款") {
|
||||
status = {
|
||||
$in: [2, 3]
|
||||
}; // 状态为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();
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* 数据库操作
|
||||
*/
|
||||
const BaseMod = require('../../base');
|
||||
const dbName = require("./config");
|
||||
|
||||
class Dao extends BaseMod {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.tablePrefix = false; // 不使用表前缀
|
||||
}
|
||||
|
||||
// 获取符合条件的文档列表
|
||||
async list(data) {
|
||||
let {
|
||||
whereJson,
|
||||
} = data;
|
||||
const dbRes = await this.getCollection(dbName.uniStatPayResult).where(whereJson).get();
|
||||
return dbRes.data;
|
||||
}
|
||||
|
||||
// 删除符合条件的文档
|
||||
async del(data) {
|
||||
let {
|
||||
whereJson
|
||||
} = data;
|
||||
const dbRes = await this.delete(dbName.uniStatPayResult, whereJson);
|
||||
return dbRes.deleted;
|
||||
}
|
||||
|
||||
// 批量插入文档
|
||||
async adds(saveList) {
|
||||
return await this.batchInsert(dbName.uniStatPayResult, saveList);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new Dao();
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* 数据库操作
|
||||
*/
|
||||
const BaseMod = require('../../base');
|
||||
const dbName = require("./config");
|
||||
|
||||
class Dao extends BaseMod {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.tablePrefix = false; // 不使用表前缀
|
||||
}
|
||||
|
||||
// 分组查询
|
||||
async group(data) {
|
||||
let {
|
||||
whereJson,
|
||||
} = data;
|
||||
const dbRes = await this.aggregate(dbName.uniStatSessionLogs, {
|
||||
match: whereJson, // 匹配查询条件
|
||||
group: {
|
||||
_id: {
|
||||
appid: '$appid',
|
||||
version: '$version',
|
||||
platform: '$platform',
|
||||
channel: '$channel',
|
||||
},
|
||||
// 设备数(去重复)
|
||||
device_count: {
|
||||
$addToSet: '$device_id'
|
||||
},
|
||||
create_time: {
|
||||
$min: '$create_time'
|
||||
}
|
||||
},
|
||||
addFields: {
|
||||
device_count: {
|
||||
$size: '$device_count'
|
||||
}
|
||||
},
|
||||
// 按创建时间排序
|
||||
sort: {
|
||||
create_time: 1
|
||||
},
|
||||
getAll: true
|
||||
});
|
||||
|
||||
return dbRes.data;
|
||||
}
|
||||
|
||||
// 分组统计数量
|
||||
async groupCount(whereJson) {
|
||||
const dbRes = await this.aggregate(dbName.uniStatSessionLogs, {
|
||||
match: whereJson, // 匹配查询条件
|
||||
group: {
|
||||
_id: null,
|
||||
// 设备数(去重复)
|
||||
count: {
|
||||
$addToSet: '$device_id'
|
||||
},
|
||||
},
|
||||
addFields: {
|
||||
count: {
|
||||
$size: '$count'
|
||||
}
|
||||
},
|
||||
getAll: true
|
||||
});
|
||||
try {
|
||||
return dbRes.data[0].count;
|
||||
} catch (err) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = new Dao();
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
/**
|
||||
* 数据库操作
|
||||
*/
|
||||
const BaseMod = require('../../base');
|
||||
const dbName = require("./config");
|
||||
|
||||
class Dao extends BaseMod {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.tablePrefix = false; // 不使用表前缀
|
||||
}
|
||||
|
||||
// 分组查询
|
||||
async group(data) {
|
||||
let {
|
||||
whereJson
|
||||
} = data;
|
||||
const dbRes = await this.aggregate(dbName.uniStatUserSessionLogs, {
|
||||
match: whereJson, // 匹配查询条件
|
||||
group: {
|
||||
_id: {
|
||||
appid: '$appid',
|
||||
version: '$version',
|
||||
platform: '$platform',
|
||||
channel: '$channel',
|
||||
},
|
||||
// 用户数(去重复)
|
||||
user_count: {
|
||||
$addToSet: '$uid'
|
||||
},
|
||||
create_time: {
|
||||
$min: '$create_time'
|
||||
}
|
||||
},
|
||||
addFields: {
|
||||
user_count: {
|
||||
$size: '$user_count'
|
||||
}
|
||||
},
|
||||
// 按创建时间排序
|
||||
sort: {
|
||||
create_time: 1
|
||||
},
|
||||
getAll: true
|
||||
});
|
||||
|
||||
let list = dbRes.data;
|
||||
return list;
|
||||
}
|
||||
|
||||
// 分组统计数量
|
||||
async groupCount(whereJson) {
|
||||
const dbRes = await this.aggregate(dbName.uniStatUserSessionLogs, {
|
||||
match: whereJson, // 匹配查询条件
|
||||
group: {
|
||||
_id: null,
|
||||
// 用户数(去重复)
|
||||
count: {
|
||||
$addToSet: '$uid'
|
||||
},
|
||||
},
|
||||
addFields: {
|
||||
count: {
|
||||
$size: '$count'
|
||||
}
|
||||
},
|
||||
getAll: true
|
||||
});
|
||||
try {
|
||||
return dbRes.data[0].count;
|
||||
} catch (err) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new Dao();
|
||||
Reference in New Issue
Block a user