This commit is contained in:
c
2025-03-12 20:11:03 +08:00
commit 70b7c82c97
1178 changed files with 148185 additions and 0 deletions
@@ -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();
@@ -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();
@@ -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();
@@ -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();