Files
jurong_circle_black/batch_process_commission.js
2025-08-26 10:06:23 +08:00

72 lines
2.4 KiB
JavaScript

const { initDB, getDB } = require('./database');
const matchingService = require('./services/matchingService');
/**
* 批量处理所有符合条件的代理佣金
*/
async function batchProcessCommissions() {
try {
console.log('初始化数据库连接...');
await initDB();
console.log('开始批量处理代理佣金...');
const db = getDB();
// 查找所有有代理关系且转账次数>=3但没有佣金记录的用户
const [usersNeedCommission] = await db.execute(`
SELECT
am.agent_id,
am.merchant_id,
u.phone as merchant_phone,
agent.phone as agent_phone,
COUNT(t.id) as transfer_count,
COUNT(acr.id) as commission_count
FROM agent_merchants am
JOIN users u ON am.merchant_id = u.id
JOIN users agent ON am.agent_id = agent.id
LEFT JOIN transfers t ON am.merchant_id = t.from_user_id AND t.status = 'received'
LEFT JOIN agent_commission_records acr ON am.agent_id = acr.agent_id
AND am.merchant_id = acr.merchant_id
AND acr.description LIKE '%第三次转账%'
GROUP BY am.agent_id, am.merchant_id
HAVING transfer_count >= 3 AND commission_count = 0
`);
if (usersNeedCommission.length === 0) {
console.log('没有找到需要处理佣金的用户');
return;
}
console.log(`找到 ${usersNeedCommission.length} 个用户需要处理佣金:`);
for (const user of usersNeedCommission) {
console.log(`\n处理用户: ${user.merchant_phone} (ID: ${user.merchant_id})`);
console.log(` - 代理: ${user.agent_phone} (ID: ${user.agent_id})`);
console.log(` - 转账次数: ${user.transfer_count}`);
try {
await matchingService.checkAndProcessAgentCommission(user.merchant_id);
console.log(` ✅ 佣金处理成功`);
} catch (error) {
console.log(` ❌ 佣金处理失败: ${error.message}`);
}
}
console.log('\n=== 批量处理完成 ===');
// 检查处理结果
const [finalCommissions] = await db.execute(
'SELECT COUNT(*) as total FROM agent_commission_records WHERE description LIKE "%第三次转账%"'
);
console.log(`总共生成了 ${finalCommissions[0].total} 条佣金记录`);
} catch (error) {
console.error('批量处理失败:', error);
} finally {
process.exit(0);
}
}
batchProcessCommissions();