feat: 补齐客户端/管理端服务模块与数据库 schema,完善登录短信、法大大签署及公共函数
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
//创建积分充值订单
|
||||
module.exports = {
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk, db, _ } = util;
|
||||
const { points, price } = data; // points=积分数量 price=价格(分→元)
|
||||
|
||||
const amount = price / 100; // 分转元
|
||||
const offAmount = amount;
|
||||
const orderId = await vk.baseDao.add({
|
||||
dbName: "jjx-order",
|
||||
dataJson: {
|
||||
orderNo: vk.pubfn.createOrderNo("39XU", 20),
|
||||
uid: userInfo.uid,
|
||||
orderStatus: 0,
|
||||
type: 20, // 20=积分充值
|
||||
amount,
|
||||
offAmount,
|
||||
saveAmount: 0,
|
||||
offRate: 100,
|
||||
}
|
||||
});
|
||||
|
||||
await vk.baseDao.add({
|
||||
dbName: "jjx-order-goods",
|
||||
dataJson: {
|
||||
orderId,
|
||||
goodsId: 'points_recharge',
|
||||
num: 1,
|
||||
goodsName: `积分充值_${points}积分`,
|
||||
goodsPrice: amount,
|
||||
goodsCover: null,
|
||||
}
|
||||
});
|
||||
|
||||
return { code: 0, msg: 'ok', data: orderId };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
//扣积分(合同审查用)
|
||||
module.exports = {
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { db, _ } = util;
|
||||
const { amount, reason, biz_type, biz_id } = data;
|
||||
|
||||
if (!amount || amount <= 0) {
|
||||
return { code: -1, msg: '扣减数量无效' };
|
||||
}
|
||||
|
||||
// 查余额
|
||||
const userRes = await db.collection('jjx-user-points').doc(userInfo.uid).get();
|
||||
if (!userRes.data.length) {
|
||||
return { code: -1, msg: '积分账户不存在,请先获取积分' };
|
||||
}
|
||||
|
||||
const currentBalance = userRes.data[0].balance;
|
||||
if (currentBalance < amount) {
|
||||
return { code: -1, msg: '积分不足', data: { balance: currentBalance, needed: amount } };
|
||||
}
|
||||
|
||||
const newBalance = currentBalance - amount;
|
||||
|
||||
// 扣减余额
|
||||
await db.collection('jjx-user-points').doc(userInfo.uid).update({
|
||||
balance: newBalance,
|
||||
total_spent: _.inc(amount),
|
||||
update_time: new Date()
|
||||
});
|
||||
|
||||
// 记录流水
|
||||
await db.collection('jjx-points-log').add({
|
||||
user_id: userInfo.uid,
|
||||
type: 'spend',
|
||||
amount: -amount,
|
||||
balance_after: newBalance,
|
||||
reason: reason || '积分消耗',
|
||||
biz_type: biz_type || 'other',
|
||||
biz_id: biz_id || '',
|
||||
_add_time: new Date()
|
||||
});
|
||||
|
||||
return { code: 0, msg: 'ok', data: { balance: newBalance } };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
// 获取积分余额
|
||||
module.exports = {
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { db, _ } = util;
|
||||
//默认积分500
|
||||
let amount = 500;
|
||||
|
||||
const res = await db.collection('jjx-user-points').doc(userInfo.uid).get();
|
||||
|
||||
if (res.data.length === 0) {
|
||||
// 新用户,自动赠送 500 积分
|
||||
await db.collection('jjx-user-points').add({
|
||||
_id: userInfo.uid,
|
||||
balance: amount,
|
||||
total_earned: amount,
|
||||
total_spent: 0,
|
||||
gift: amount,
|
||||
update_time: new Date()
|
||||
});
|
||||
|
||||
await db.collection('jjx-points-log').add({
|
||||
user_id: userInfo.uid,
|
||||
type: 'earn',
|
||||
amount: amount,
|
||||
balance_after: amount,
|
||||
reason: '新用户注册赠送',
|
||||
biz_type: 'gift',
|
||||
_add_time: new Date()
|
||||
});
|
||||
|
||||
return { code: 0, msg: 'ok', data: { balance: amount, total_earned: amount, total_spent: 0, gift: amount } };
|
||||
}
|
||||
|
||||
return { code: 0, msg: 'ok', data: res.data[0] };
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
//查询积分流水
|
||||
module.exports = {
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk, db, _ } = util;
|
||||
const { pageIndex = 1, pageSize = 50, biz_type } = data;
|
||||
|
||||
console.log('getLog uid:', userInfo.uid);
|
||||
|
||||
// 先查全部看看有没有数据
|
||||
const allRes = await db.collection('jjx-points-log').limit(5).get();
|
||||
console.log('getLog all data count:', allRes.data.length);
|
||||
if (allRes.data.length > 0) {
|
||||
console.log('getLog first record:', JSON.stringify(allRes.data[0]));
|
||||
}
|
||||
|
||||
const where = { user_id: userInfo.uid };
|
||||
if (biz_type) where.biz_type = biz_type;
|
||||
|
||||
const countRes = await db.collection('jjx-points-log').where(where).count();
|
||||
console.log('getLog filtered count:', countRes.total);
|
||||
|
||||
const listRes = await db.collection('jjx-points-log')
|
||||
.where(where)
|
||||
.orderBy('_add_time', 'desc')
|
||||
.skip((pageIndex - 1) * pageSize)
|
||||
.limit(pageSize)
|
||||
.get();
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
msg: 'ok',
|
||||
data: {
|
||||
total: countRes.total,
|
||||
rows: listRes.data
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
//积分充值
|
||||
module.exports = {
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { db, _ } = util;
|
||||
const { order_id } = data;
|
||||
|
||||
if (!order_id) {
|
||||
return { code: -1, msg: '缺少订单ID' };
|
||||
}
|
||||
|
||||
// 查订单
|
||||
const orderRes = await db.collection('vk-pay-orders').doc(order_id).get();
|
||||
if (!orderRes.data.length) {
|
||||
return { code: -1, msg: '订单不存在' };
|
||||
}
|
||||
|
||||
const order = orderRes.data[0];
|
||||
if (order.status !== 1) {
|
||||
return { code: -1, msg: '订单未支付' };
|
||||
}
|
||||
|
||||
// 解析充值积分数量
|
||||
const attachedData = JSON.parse(order.attached_data || '{}');
|
||||
const points = attachedData.points;
|
||||
if (!points) {
|
||||
return { code: -1, msg: '订单数据异常' };
|
||||
}
|
||||
|
||||
// 增加余额
|
||||
await db.collection('jjx-user-points').doc(userInfo.uid).update({
|
||||
balance: _.inc(points),
|
||||
total_earned: _.inc(points),
|
||||
update_time: new Date()
|
||||
});
|
||||
|
||||
// 查最新余额
|
||||
const userRes = await db.collection('jjx-user-points').doc(userInfo.uid).get();
|
||||
const balance = userRes.data[0].balance;
|
||||
|
||||
// 记录流水
|
||||
await db.collection('jjx-points-log').add({
|
||||
user_id: userInfo.uid,
|
||||
type: 'earn',
|
||||
amount: points,
|
||||
balance_after: balance,
|
||||
reason: '积分充值(' + (order.total_fee / 100) + '元)',
|
||||
biz_type: 'recharge',
|
||||
biz_id: order_id,
|
||||
_add_time: new Date()
|
||||
});
|
||||
|
||||
return { code: 0, msg: 'ok', data: { balance, points_added: points } };
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user