Mex模块存在bug:有挂单成交的,但是没有订单记录。具体表现为:
通过代码分析发现问题根源在于撮合逻辑的执行顺序:
如果在步骤4(资金/物品流转)中出现异常,由于订单状态已经在步骤1中更新为COMPLETED,但成交记录可能因为异常而没有正确保存,导致数据不一致。
修改executeUserBuyItemOrderMatch和executeUserSellItemOrderMatch方法:
新的执行顺序:
// 验证成交记录是否创建成功
if (!$transaction || !$transaction->id) {
throw new \Exception('成交记录创建失败');
}
创建FixMissingTransactionRecordsCommand命令来处理历史数据不一致问题:
为MexOrder模型添加关联关系方法:
buyTransactions() - 获取作为买单的成交记录sellTransactions() - 获取作为卖单的成交记录发现并修复了2个数据不一致的订单:
已完成订单总数: 2
缺失成交记录的已完成订单数: 0
✅ 数据一致性检查通过
孤立的成交记录数: 0
✅ 成交记录关联检查通过
app/Module/Mex/Logic/MexMatchLogic.php - 修复撮合逻辑app/Module/Mex/Models/MexOrder.php - 添加关联关系app/Module/Mex/Commands/FixMissingTransactionRecordsCommand.php - 修复命令app/Module/Mex/Providers/MexServiceProvider.php - 注册修复命令app/Module/Mex/Tests/MexMatchLogicBugFixTest.php - 单元测试app/Module/Mex/Tests/manual_test_bug_fix.php - 手动测试脚本确保订单状态更新和成交记录创建在同一个事务中,避免数据不一致。
在资金/物品流转失败时,不更新订单状态,保持数据一致性。
添加成交记录创建的验证逻辑,确保关键数据的完整性。
修复命令可以处理历史数据,不影响现有业务流程。
本次修复解决了Mex模块中挂单成交但没有订单记录的关键bug,通过调整执行顺序、添加验证逻辑和提供修复工具,确保了数据的一致性和完整性。修复后的系统更加稳定可靠,避免了类似问题的再次发生。