64 行
3.8 KiB
JavaScript
64 行
3.8 KiB
JavaScript
const fs = require('fs');
|
||
const path = require('path');
|
||
const assert = require('assert');
|
||
|
||
console.log('========================================================');
|
||
console.log(' 全网奖池(酒道馆/区县代/dmepa/兑换券)1分钟结算规范验证');
|
||
console.log('========================================================\n');
|
||
|
||
let passCount = 0;
|
||
function test(name, fn) {
|
||
try {
|
||
fn();
|
||
console.log(` [PASS] ${name}`);
|
||
passCount++;
|
||
} catch (err) {
|
||
console.error(` [FAIL] ${name}: ${err.message}`);
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
// 1. DailySettleService.php 验证
|
||
const dailySettlePath = path.resolve(__dirname, '../addons/shopro/service/partner/DailySettleService.php');
|
||
assert(fs.existsSync(dailySettlePath), 'DailySettleService.php 文件存在');
|
||
const settleContent = fs.readFileSync(dailySettlePath, 'utf-8');
|
||
|
||
test('DailySettleService 包含酒道馆与区县增量均分逻辑', () => {
|
||
assert(settleContent.includes("empty($ext['venue_settled'])"), '必须检查 venue_settled 增量标记');
|
||
assert(settleContent.includes("empty($ext['county_settled'])"), '必须检查 county_settled 增量标记');
|
||
assert(settleContent.includes("cashShareMinute($venueIds, $venuePool, 'venue_share'"), '调用 cashShareMinute 结算酒道馆均分');
|
||
assert(settleContent.includes("cashShareMinute($countyIds, $countyPool, 'county_share'"), '调用 cashShareMinute 结算区县代理均分');
|
||
assert(settleContent.includes("$ext['venue_settled'] = 1"), '订单必须打上 venue_settled = 1 标记');
|
||
assert(settleContent.includes("$ext['county_settled'] = 1"), '订单必须打上 county_settled = 1 标记');
|
||
});
|
||
|
||
test('DailySettleService 包含 cashShareMinute 方法与资金安全防重', () => {
|
||
assert(settleContent.includes('function cashShareMinute('), '必须定义 cashShareMinute 方法');
|
||
assert(settleContent.includes('min(-100000, $minId - 1)'), '使用严格递减负数虚拟 order_id');
|
||
assert(settleContent.includes("'settle_date' => null"), 'settle_date 必须设为 null 避免 uk_daily_user_type 唯一索引冲突');
|
||
assert(settleContent.includes('Wallet::change('), '均分收益实时调用钱包入账');
|
||
assert(settleContent.includes("setInc('total_income'"), '分润金额实时累加至合伙人累计收益');
|
||
});
|
||
|
||
test('DailySettleService runMinute 同步更新 DailyReport 的均分大盘数据', () => {
|
||
assert(settleContent.includes('$existingTodayReport->venue_pool = $todayVenuePool'), '报表更新酒道馆池累计');
|
||
assert(settleContent.includes('$existingTodayReport->county_pool = $todayCountyPool'), '报表更新区县池累计');
|
||
assert(settleContent.includes("'venue_pool' => $todayVenuePool"), '报表新建酒道馆池累计');
|
||
assert(settleContent.includes("'county_pool' => $todayCountyPool"), '报表新建区县池累计');
|
||
});
|
||
|
||
// 2. Order.php 订单详情分成展示兼容验证
|
||
const orderControllerPath = path.resolve(__dirname, '../application/admin/controller/shopro/order/Order.php');
|
||
assert(fs.existsSync(orderControllerPath), 'Order.php 控制器存在');
|
||
const orderContent = fs.readFileSync(orderControllerPath, 'utf-8');
|
||
|
||
test('Order.php buildPartnerSplit 支持分钟均分流水时间范围与去重查询', () => {
|
||
assert(orderContent.includes("whereNull('settle_date')->whereBetween('createtime'"), '支持通过创建时间查询无结算日的分钟级流水');
|
||
assert(orderContent.includes('$distinctUsers[intval($sr->user_id)] = true'), '参与人数必须按受益人去重');
|
||
assert(orderContent.includes('$userCount = count($distinctUsers)'), '按独立受益人统计均分人数');
|
||
});
|
||
|
||
console.log('\n--------------------------------------------------------');
|
||
console.log(`测试执行结果: 通过 ${passCount} 项, 失败 0 项`);
|
||
console.log('========================================================\n');
|