1
This commit is contained in:
@@ -9,32 +9,59 @@ module.exports = {
|
||||
/**
|
||||
* @swagger
|
||||
* /api/invite/info:
|
||||
* get:
|
||||
* post:
|
||||
* summary: 获取邀请信息
|
||||
* description: 根据用户ID获取邀请码和邀请链接
|
||||
* description: 根据设备SN码获取邀请码和邀请链接
|
||||
* tags: [前端-推广邀请]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - sn_code
|
||||
* properties:
|
||||
* sn_code:
|
||||
* type: string
|
||||
* description: 设备SN码
|
||||
* responses:
|
||||
* 200:
|
||||
* description: 获取成功
|
||||
*/
|
||||
'GET /invite/info': async (ctx) => {
|
||||
'POST /invite/info': async (ctx) => {
|
||||
try {
|
||||
// 从query或body中获取user_id,实际应该从token中解析
|
||||
// 从body中获取sn_code
|
||||
const body = ctx.getBody();
|
||||
const user_id = body.user_id || ctx.query?.user_id;
|
||||
const { sn_code } = body;
|
||||
|
||||
if (!user_id) {
|
||||
return ctx.fail('请先登录');
|
||||
if (!sn_code) {
|
||||
return ctx.fail('请提供设备SN码');
|
||||
}
|
||||
|
||||
// 生成邀请码(基于用户ID)
|
||||
const invite_code = `INV${user_id}${Date.now().toString(36).toUpperCase()}`;
|
||||
const { pla_account } = await Framework.getModels();
|
||||
|
||||
// 根据sn_code查找用户
|
||||
const user = await pla_account.findOne({
|
||||
where: { sn_code }
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return ctx.fail('用户不存在');
|
||||
}
|
||||
|
||||
// 生成邀请码(基于用户ID和sn_code)
|
||||
const invite_code = `INV${user.id}_${Date.now().toString(36).toUpperCase()}`;
|
||||
const invite_link = `https://work.light120.com/invite?code=${invite_code}`;
|
||||
|
||||
// 保存邀请码到用户记录(可以保存到invite_code字段,如果没有则保存到备注或其他字段)
|
||||
// 这里暂时不保存到数据库,每次生成新的
|
||||
|
||||
return ctx.success({
|
||||
invite_code,
|
||||
invite_link,
|
||||
user_id
|
||||
user_id: user.id,
|
||||
sn_code: user.sn_code
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取邀请信息失败:', error);
|
||||
@@ -45,30 +72,83 @@ module.exports = {
|
||||
/**
|
||||
* @swagger
|
||||
* /api/invite/statistics:
|
||||
* get:
|
||||
* post:
|
||||
* summary: 获取邀请统计
|
||||
* description: 根据用户ID获取邀请统计数据
|
||||
* description: 根据设备SN码获取邀请统计数据
|
||||
* tags: [前端-推广邀请]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - sn_code
|
||||
* properties:
|
||||
* sn_code:
|
||||
* type: string
|
||||
* description: 设备SN码
|
||||
* responses:
|
||||
* 200:
|
||||
* description: 获取成功
|
||||
*/
|
||||
'GET /invite/statistics': async (ctx) => {
|
||||
'POST /invite/statistics': async (ctx) => {
|
||||
try {
|
||||
// 从query或body中获取user_id,实际应该从token中解析
|
||||
// 从body中获取sn_code
|
||||
const body = ctx.getBody() || {};
|
||||
const user_id = body.user_id || ctx.query?.user_id;
|
||||
const { sn_code } = body;
|
||||
|
||||
if (!user_id) {
|
||||
return ctx.fail('请先登录');
|
||||
if (!sn_code) {
|
||||
return ctx.fail('请提供设备SN码');
|
||||
}
|
||||
|
||||
// 这里可以从数据库查询邀请统计,暂时返回模拟数据
|
||||
const { pla_account } = await Framework.getModels();
|
||||
|
||||
// 根据sn_code查找用户
|
||||
const user = await pla_account.findOne({
|
||||
where: { sn_code }
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return ctx.fail('用户不存在');
|
||||
}
|
||||
|
||||
// 查询邀请统计
|
||||
const { invite_record } = await Framework.getModels();
|
||||
|
||||
// 查询总邀请数
|
||||
const totalInvites = await invite_record.count({
|
||||
where: {
|
||||
inviter_id: user.id,
|
||||
is_delete: 0
|
||||
}
|
||||
});
|
||||
|
||||
// 查询已发放奖励的邀请数(活跃邀请)
|
||||
const activeInvites = await invite_record.count({
|
||||
where: {
|
||||
inviter_id: user.id,
|
||||
reward_status: 1,
|
||||
is_delete: 0
|
||||
}
|
||||
});
|
||||
|
||||
// 查询总奖励天数
|
||||
const rewardRecords = await invite_record.findAll({
|
||||
where: {
|
||||
inviter_id: user.id,
|
||||
reward_status: 1,
|
||||
is_delete: 0
|
||||
},
|
||||
attributes: ['reward_value']
|
||||
});
|
||||
|
||||
const totalRewardDays = rewardRecords.reduce((sum, record) => {
|
||||
return sum + (record.reward_value || 0);
|
||||
}, 0);
|
||||
|
||||
return ctx.success({
|
||||
totalInvites: 0,
|
||||
activeInvites: 0,
|
||||
rewardPoints: 0,
|
||||
rewardAmount: 0
|
||||
totalInvites: totalInvites || 0
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取邀请统计失败:', error);
|
||||
@@ -89,16 +169,27 @@ module.exports = {
|
||||
*/
|
||||
'POST /invite/generate': async (ctx) => {
|
||||
try {
|
||||
// 从query或body中获取user_id,实际应该从token中解析
|
||||
// 从body中获取sn_code
|
||||
const body = ctx.getBody() || {};
|
||||
const user_id = body.user_id || ctx.query?.user_id;
|
||||
const { sn_code } = body;
|
||||
|
||||
if (!user_id) {
|
||||
return ctx.fail('请先登录');
|
||||
if (!sn_code) {
|
||||
return ctx.fail('请提供设备SN码');
|
||||
}
|
||||
|
||||
const { pla_account } = await Framework.getModels();
|
||||
|
||||
// 根据sn_code查找用户
|
||||
const user = await pla_account.findOne({
|
||||
where: { sn_code }
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return ctx.fail('用户不存在');
|
||||
}
|
||||
|
||||
// 生成新的邀请码
|
||||
const invite_code = `INV${user_id}${Date.now().toString(36).toUpperCase()}`;
|
||||
const invite_code = `INV${user.id}_${Date.now().toString(36).toUpperCase()}`;
|
||||
const invite_link = `https://work.light120.com/invite?code=${invite_code}`;
|
||||
|
||||
return ctx.success({
|
||||
@@ -109,6 +200,100 @@ module.exports = {
|
||||
console.error('生成邀请码失败:', error);
|
||||
return ctx.fail('生成邀请码失败: ' + error.message);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /api/invite/records:
|
||||
* post:
|
||||
* summary: 获取邀请记录列表
|
||||
* description: 根据设备SN码获取邀请记录列表
|
||||
* tags: [前端-推广邀请]
|
||||
* requestBody:
|
||||
* required: true
|
||||
* content:
|
||||
* application/json:
|
||||
* schema:
|
||||
* type: object
|
||||
* required:
|
||||
* - sn_code
|
||||
* properties:
|
||||
* sn_code:
|
||||
* type: string
|
||||
* description: 设备SN码
|
||||
* page:
|
||||
* type: integer
|
||||
* description: 页码(可选,默认1)
|
||||
* pageSize:
|
||||
* type: integer
|
||||
* description: 每页数量(可选,默认20)
|
||||
* responses:
|
||||
* 200:
|
||||
* description: 获取成功
|
||||
*/
|
||||
'POST /invite/records': async (ctx) => {
|
||||
try {
|
||||
const body = ctx.getBody() || {};
|
||||
const { sn_code, page = 1, pageSize = 20 } = body;
|
||||
|
||||
if (!sn_code) {
|
||||
return ctx.fail('请提供设备SN码');
|
||||
}
|
||||
|
||||
const { pla_account, invite_record } = await Framework.getModels();
|
||||
|
||||
// 根据sn_code查找用户
|
||||
const user = await pla_account.findOne({
|
||||
where: { sn_code }
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return ctx.fail('用户不存在');
|
||||
}
|
||||
|
||||
// 查询邀请记录列表
|
||||
const offset = (page - 1) * pageSize;
|
||||
const records = await invite_record.findAll({
|
||||
where: {
|
||||
inviter_id: user.id,
|
||||
is_delete: 0
|
||||
},
|
||||
order: [['register_time', 'DESC']],
|
||||
limit: pageSize,
|
||||
offset: offset
|
||||
});
|
||||
|
||||
const total = await invite_record.count({
|
||||
where: {
|
||||
inviter_id: user.id,
|
||||
is_delete: 0
|
||||
}
|
||||
});
|
||||
|
||||
// 格式化记录数据
|
||||
const formattedRecords = records.map(record => {
|
||||
const recordData = record.toJSON();
|
||||
return {
|
||||
id: recordData.id,
|
||||
invitee_phone: recordData.invitee_phone,
|
||||
invite_code: recordData.invite_code,
|
||||
register_time: recordData.register_time,
|
||||
reward_status: recordData.reward_status,
|
||||
reward_value: recordData.reward_value,
|
||||
reward_type: recordData.reward_type
|
||||
};
|
||||
});
|
||||
|
||||
return ctx.success({
|
||||
list: formattedRecords,
|
||||
total: total,
|
||||
page: page,
|
||||
pageSize: pageSize
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取邀请记录列表失败:', error);
|
||||
return ctx.fail('获取邀请记录列表失败: ' + error.message);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user