| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- namespace App\Module\Mex\Validators;
- use App\Module\GameItems\Services\ItemService;
- use App\Module\Mex\Services\MexPriceConfigService;
- use UCore\Validator;
- use Illuminate\Support\Facades\Log;
- /**
- * 农贸市场物品验证器
- *
- * 验证物品是否可以在农贸市场进行交易
- */
- class MexItemValidator extends Validator
- {
- /**
- * 验证物品是否可交易
- *
- * @param mixed $value 物品ID
- * @param array $data 所有数据
- * @return bool 验证是否通过
- */
- public function validate(mixed $value, array $data): bool
- {
- $itemId = (int)$value;
- try {
- // 验证物品是否存在
- if (!$this->validateItemExists($itemId)) {
- return false;
- }
- // 验证物品是否配置了交易价格
- if (!$this->validateItemPriceConfig($itemId)) {
- return false;
- }
- // 验证物品是否允许交易
- if (!$this->validateItemTradeable($itemId)) {
- return false;
- }
- return true;
- } catch (\Exception $e) {
- Log::error('农贸市场物品验证失败', [
- 'item_id' => $itemId,
- 'error' => $e->getMessage()
- ]);
-
- $this->addError('物品验证时发生错误');
- return false;
- }
- }
- /**
- * 验证物品是否存在
- *
- * @param int $itemId 物品ID
- * @return bool
- */
- private function validateItemExists(int $itemId): bool
- {
- $item = ItemService::getItemInfo($itemId);
-
- if (!$item) {
- $this->addError('物品不存在');
- return false;
- }
- return true;
- }
- /**
- * 验证物品是否配置了交易价格
- *
- * @param int $itemId 物品ID
- * @return bool
- */
- private function validateItemPriceConfig(int $itemId): bool
- {
- $priceConfig = MexPriceConfigService::getItemPriceConfig($itemId);
-
- if (!$priceConfig) {
- $this->addError('该物品未配置交易价格,不支持交易');
- return false;
- }
- // 检查价格配置是否有效
- if ($priceConfig['min_price'] <= 0 || $priceConfig['max_price'] <= 0) {
- $this->addError('物品价格配置无效');
- return false;
- }
- if ($priceConfig['min_price'] > $priceConfig['max_price']) {
- $this->addError('物品价格配置错误:最小价格大于最大价格');
- return false;
- }
- return true;
- }
- /**
- * 验证物品是否允许交易
- *
- * @param int $itemId 物品ID
- * @return bool
- */
- private function validateItemTradeable(int $itemId): bool
- {
- // 获取物品信息
- $item = ItemService::getItemInfo($itemId);
- if (!$item) {
- $this->addError('物品信息获取失败');
- return false;
- }
- // 检查物品是否标记为可交易
- // 这里可以根据实际的物品属性来判断
- // 例如检查 tradeable 字段或其他标识
- // 暂时允许所有有价格配置的物品交易
- // 后续可以根据需求添加更多限制条件
- return true;
- }
- }
|