时间: 2025年06月21日 21:32
任务: 修复php artisan mex:user-buy-item-match没有正常产生日志的问题
用户报告执行php artisan mex:user-buy-item-match命令时没有正常产生日志记录。
通过代码分析和测试发现问题根源:
MexMatchLogic::executeUserBuyItemMatch方法中,当没有待撮合的订单时MexOrder表获取待撮合订单的商品ID列表(第69-73行)executeUserBuyItemMatchForItem方法executeUserSellItemMatch方法也存在相同问题根据用户偏好,撮合日志应该记录所有撮合尝试(包括成功和失败的),目的是记录撮合过程本身。
在executeUserBuyItemMatch方法中添加:
// 如果没有待撮合的订单,记录一条总体日志表示没有可处理的商品
if (empty($itemIds)) {
$endTime = microtime(true);
$executionTimeMs = round(($endTime - $startTime) * 1000);
// 记录没有待撮合订单的日志(使用商品ID 0 表示全局撮合任务)
MexMatchLogLogic::logMatch(
MatchType::USER_BUY,
0, // 使用0表示全局撮合任务
$batchSize,
[
'success' => true,
'message' => '没有待撮合的用户买入物品订单',
'matched_orders' => 0,
'total_amount' => '0.00000',
],
$executionTimeMs
);
}
在executeUserSellItemMatch方法中添加相同逻辑,消息改为"没有待撮合的用户卖出物品订单"。
item_id = 0表示全局撮合任务,区别于具体商品的撮合php artisan mex:user-buy-item-match
结果: 成功记录日志,item_id=0,message="没有待撮合的用户买入物品订单"
php artisan mex:user-sell-item-match
结果: 正常记录每个商品的撮合日志
SELECT * FROM kku_mex_match_logs WHERE created_at >= '2025-06-21 21:32:00' ORDER BY created_at DESC;
结果:
app/Module/Mex/Logic/MexMatchLogic.php
executeUserBuyItemMatch方法executeUserSellItemMatch方法app/Module/Mex/Tests/match_logging_test.php
修复Mex模块撮合命令没有正常产生日志的bug
- 修复executeUserBuyItemMatch方法:当没有待撮合订单时也记录日志
- 修复executeUserSellItemMatch方法:当没有待撮合订单时也记录日志
- 使用item_id=0表示全局撮合任务,区别于具体商品的撮合
- 确保撮合日志记录所有撮合尝试,包括成功和失败的情况
- 添加撮合日志测试脚本验证修复效果
成功修复了Mex模块撮合命令的日志记录问题:
现在撮合命令无论是否有待撮合订单,都会正常记录日志,满足用户的监控和调试需求。