ConditionGroupService.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Module\Game\Services;
  3. use App\Module\Game\Enums\CONDITION_OPERATOR;
  4. use App\Module\Game\Enums\CONDITION_TYPE;
  5. use App\Module\Game\Models\GameConditionGroup;
  6. use Illuminate\Support\Facades\Log;
  7. /**
  8. * 条件组服务类
  9. *
  10. * 提供条件组相关的服务,包括获取条件组详情、获取条件组条件等功能
  11. */
  12. class ConditionGroupService
  13. {
  14. /**
  15. * 获取条件组详情
  16. *
  17. * @param int|string $conditionGroupCode 条件组ID或编码
  18. * @return GameConditionGroup|null 条件组详情
  19. */
  20. public static function getConditionGroup($conditionGroupCode): ?GameConditionGroup
  21. {
  22. try {
  23. // 获取条件组
  24. $conditionGroup = is_numeric($conditionGroupCode)
  25. ? GameConditionGroup::with('conditionItems')->find($conditionGroupCode)
  26. : GameConditionGroup::with('conditionItems')->where('code', $conditionGroupCode)->first();
  27. return $conditionGroup;
  28. } catch (\Exception $e) {
  29. Log::error('获取条件组详情失败', [
  30. 'condition_group' => $conditionGroupCode,
  31. 'error' => $e->getMessage()
  32. ]);
  33. return null;
  34. }
  35. }
  36. /**
  37. * 获取条件组条件
  38. *
  39. * @param int|string $conditionGroupCode 条件组ID或编码
  40. * @return array 条件组条件
  41. */
  42. public static function getConditionItems($conditionGroupCode): array
  43. {
  44. try {
  45. // 获取条件组
  46. $conditionGroup = self::getConditionGroup($conditionGroupCode);
  47. if (!$conditionGroup || $conditionGroup->conditionItems->isEmpty()) {
  48. return [];
  49. }
  50. $conditions = [];
  51. // 处理每个条件项
  52. foreach ($conditionGroup->conditionItems as $item) {
  53. $conditionItem = [
  54. 'id' => $item->id,
  55. 'type' => $item->condition_type,
  56. 'target_id' => $item->target_id,
  57. 'operator' => $item->operator,
  58. 'value' => $item->value,
  59. 'group_id' => $conditionGroup->id,
  60. 'group_code' => $conditionGroup->code,
  61. 'group_name' => $conditionGroup->name,
  62. 'logic_type' => $conditionGroup->logic_type,
  63. 'operator_name' => CONDITION_OPERATOR::getName($item->operator)
  64. ];
  65. // 使用统一的条件类型描述器获取目标名称和条件名称
  66. $conditionItem['target_name'] = \App\Module\Game\Services\ConditionTypeDescriptor::getTargetNameFromModel($item);
  67. $conditionItem['condition_name'] = CONDITION_TYPE::getName($item->condition_type);
  68. $conditions[] = $conditionItem;
  69. }
  70. return $conditions;
  71. } catch (\Exception $e) {
  72. Log::error('获取条件组条件失败', [
  73. 'condition_group' => $conditionGroupCode,
  74. 'error' => $e->getMessage()
  75. ]);
  76. return [];
  77. }
  78. }
  79. }