| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- <?php
- namespace App\Module\Game\Services;
- use App\Module\Game\Enums\CONDITION_OPERATOR;
- use App\Module\Game\Enums\CONDITION_TYPE;
- use App\Module\Game\Models\GameConditionGroup;
- use Illuminate\Support\Facades\Log;
- /**
- * 条件组服务类
- *
- * 提供条件组相关的服务,包括获取条件组详情、获取条件组条件等功能
- */
- class ConditionGroupService
- {
- /**
- * 获取条件组详情
- *
- * @param int|string $conditionGroupCode 条件组ID或编码
- * @return GameConditionGroup|null 条件组详情
- */
- public static function getConditionGroup($conditionGroupCode): ?GameConditionGroup
- {
- try {
- // 获取条件组
- $conditionGroup = is_numeric($conditionGroupCode)
- ? GameConditionGroup::with('conditionItems')->find($conditionGroupCode)
- : GameConditionGroup::with('conditionItems')->where('code', $conditionGroupCode)->first();
-
- return $conditionGroup;
- } catch (\Exception $e) {
- Log::error('获取条件组详情失败', [
- 'condition_group' => $conditionGroupCode,
- 'error' => $e->getMessage()
- ]);
-
- return null;
- }
- }
-
- /**
- * 获取条件组条件
- *
- * @param int|string $conditionGroupCode 条件组ID或编码
- * @return array 条件组条件
- */
- public static function getConditionItems($conditionGroupCode): array
- {
- try {
- // 获取条件组
- $conditionGroup = self::getConditionGroup($conditionGroupCode);
- if (!$conditionGroup || $conditionGroup->conditionItems->isEmpty()) {
- return [];
- }
-
- $conditions = [];
-
- // 处理每个条件项
- foreach ($conditionGroup->conditionItems as $item) {
- $conditionItem = [
- 'id' => $item->id,
- 'type' => $item->condition_type,
- 'target_id' => $item->target_id,
- 'operator' => $item->operator,
- 'value' => $item->value,
- 'group_id' => $conditionGroup->id,
- 'group_code' => $conditionGroup->code,
- 'group_name' => $conditionGroup->name,
- 'logic_type' => $conditionGroup->logic_type,
- 'operator_name' => CONDITION_OPERATOR::getName($item->operator)
- ];
-
- // 使用统一的条件类型描述器获取目标名称和条件名称
- $conditionItem['target_name'] = \App\Module\Game\Services\ConditionTypeDescriptor::getTargetNameFromModel($item);
- $conditionItem['condition_name'] = CONDITION_TYPE::getName($item->condition_type);
-
- $conditions[] = $conditionItem;
- }
-
- return $conditions;
- } catch (\Exception $e) {
- Log::error('获取条件组条件失败', [
- 'condition_group' => $conditionGroupCode,
- 'error' => $e->getMessage()
- ]);
-
- return [];
- }
- }
- }
|