Quellcode durchsuchen

总结Mex模块代码与文档不符的问题

- 检查了挂单阶段价格验证问题:代码中存在不应该有的价格验证
- 发现保护阈值处理不一致:挂单时就验证了保护阈值,应该只在撮合时验证
- 撮合排序算法不符:使用了三级排序而不是文档要求的二级排序
- 订单创建逻辑存在价格验证:与文档要求的无价格验证不符
- 逻辑层事务处理问题:Logic层中不应该开启事务
- 总结了6个主要问题类别,为后续修复提供依据
notfff vor 7 Monaten
Ursprung
Commit
f4ad571fd5
1 geänderte Dateien mit 103 neuen und 0 gelöschten Zeilen
  1. 103 0
      app/Module/Mex/docs/error.md

+ 103 - 0
app/Module/Mex/docs/error.md

@@ -0,0 +1,103 @@
+# Mex模块代码与文档不符问题总结
+
+## 检查时间
+2025年06月12日 18:57
+
+## 检查范围
+基于文档 `app/Module/Mex/docs/2.md` 对代码实现进行检查
+
+## 发现的问题
+
+### 1. 挂单阶段价格验证问题
+
+**文档要求**:
+- 第124行:挂单阶段无价格验证,最低价和最高价仅作为参考价格展示
+- 第125-127行:所有订单都要冻结资金或物品,不管是否超过保护阈值
+
+**代码实现问题**:
+- `MexPriceConfigLogic::validateOrderParams()` 方法在挂单阶段进行了价格验证
+- `MexPriceConfigLogic::validateBuyPrice()` 和 `validateSellPrice()` 方法对挂单价格进行了严格验证
+- `MatchexchangeAddValidation` 中使用了 `MexPriceValidator` 进行价格验证
+
+**具体代码位置**:
+- `app/Module/Mex/Logic/MexPriceConfigLogic.php` 第277-303行
+- `app/Module/Mex/Logic/MexPriceConfigLogic.php` 第83-128行、137-171行
+- `app/Module/AppGame/Validations/MatchexchangeAddValidation.php` 第49-52行
+
+### 2. 保护阈值处理不一致
+
+**文档要求**:
+- 第56行:所有订单都可以正常挂单并冻结资金,不管是否超过保护阈值
+- 第57行:超量的用户买入物品订单不参与撮合成交(保留挂单状态)
+- 第135-136行:挂单阶段不受保护阈值限制,撮合阶段才验证保护阈值
+
+**代码实现问题**:
+- `MexPriceConfigLogic::validateOrderQuantity()` 在挂单阶段验证保护阈值
+- `MexPriceConfigLogic::validateOrderParams()` 对买入订单进行数量验证
+- 挂单时就拒绝超过保护阈值的订单,而不是允许挂单但不参与撮合
+
+**具体代码位置**:
+- `app/Module/Mex/Logic/MexPriceConfigLogic.php` 第180-207行
+- `app/Module/Mex/Logic/MexPriceConfigLogic.php` 第290-296行
+
+### 3. 撮合排序算法不符
+
+**文档要求**:
+- 第133行:二级排序:按价格从高到低(DESC),按创建时间从早到晚(ASC)
+- 第535行:简化为二级排序:价格DESC + 时间ASC(移除数量排序)
+
+**代码实现问题**:
+- `MexOrderLogic::getPendingBuyOrders()` 方法使用了三级排序
+- 包含了文档中明确要求移除的数量排序
+
+**具体代码位置**:
+- `app/Module/Mex/Logic/MexOrderLogic.php` 第180-183行
+
+### 4. 订单创建逻辑与文档不符
+
+**文档要求**:
+- 第72-73行:验证价格配置是否存在(不验证价格范围和保护阈值,挂单阶段无价格验证)
+
+**代码实现问题**:
+- `MexOrderLogic::createBuyOrder()` 和 `createSellOrder()` 注释正确,但实际验证流程中仍有价格验证
+- 验证器链条中包含价格范围验证
+
+**具体代码位置**:
+- `app/Module/Mex/Logic/MexOrderLogic.php` 第70-76行
+- `app/Module/Mex/Validators/MexOrderValidator.php` 整个验证流程
+
+### 5. 枚举值映射问题
+
+**文档要求**:
+- 使用统一的买入/卖出概念
+
+**代码实现问题**:
+- Protobuf枚举 `MEX_DIRECTION` 中 `SELL=1, BUY=2`
+- 但在某些地方可能存在映射不一致的问题
+
+**具体代码位置**:
+- `protophp/Uraus/Kku/Common/MEX_DIRECTION.php` 第27-33行
+
+### 6. 事务处理不符合文档要求
+
+**文档要求**:
+- 逻辑层(Logic层)中不能开启事务
+
+**代码实现问题**:
+- `MexMatchLogic::executeUserBuyItemMatchForItem()` 方法中使用了 `DB::transaction()`
+- `MexMatchLogic::executeUserSellItemMatchForItem()` 方法中使用了 `DB::transaction()`
+- `MexAccountLogic::processSellOrder()` 和 `processBuyOrder()` 中使用了事务
+
+**具体代码位置**:
+- `app/Module/Mex/Logic/MexMatchLogic.php` 第209行、294行
+- `app/Module/Mex/Logic/MexAccountLogic.php` 第162行等
+
+## 总结
+
+主要问题集中在:
+1. **挂单阶段不应该有价格验证**,但代码中存在多层价格验证
+2. **保护阈值应该只影响撮合,不影响挂单**,但代码在挂单时就验证了保护阈值
+3. **排序算法应该是二级排序**,但代码使用了三级排序
+4. **逻辑层不应该开启事务**,但多个Logic类中使用了事务
+
+这些问题需要按照文档要求进行修复,确保代码实现与业务规则文档保持一致。