UrsTransferFeeConfigRepository.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace App\Module\UrsPromotion\Repositories;
  3. use App\Module\UrsPromotion\Models\UrsTransferFeeConfig;
  4. use Dcat\Admin\Repositories\EloquentRepository;
  5. /**
  6. * URS转出手续费配置仓库
  7. *
  8. * 提供URS转出手续费配置数据的访问和操作功能。
  9. * 该类是URS转出手续费配置模块与后台管理系统的桥梁,用于处理手续费配置数据的CRUD操作。
  10. */
  11. class UrsTransferFeeConfigRepository extends EloquentRepository
  12. {
  13. /**
  14. * 模型类名
  15. *
  16. * @var string
  17. */
  18. protected $eloquentClass = UrsTransferFeeConfig::class;
  19. /**
  20. * 根据房屋等级和达人等级查找配置
  21. *
  22. * @param int $houseLevel 房屋等级
  23. * @param int $talentLevel 达人等级
  24. * @return UrsTransferFeeConfig|null
  25. */
  26. public function findByLevels(int $houseLevel, int $talentLevel): ?UrsTransferFeeConfig
  27. {
  28. return UrsTransferFeeConfig::where('house_level', $houseLevel)
  29. ->where('talent_level', $talentLevel)
  30. ->where('status', UrsTransferFeeConfig::STATUS_ENABLED)
  31. ->first();
  32. }
  33. /**
  34. * 获取所有启用的配置,按优先级排序
  35. *
  36. * @return \Illuminate\Database\Eloquent\Collection
  37. */
  38. public function getEnabledConfigs()
  39. {
  40. return UrsTransferFeeConfig::where('status', UrsTransferFeeConfig::STATUS_ENABLED)
  41. ->orderBy('priority', 'desc')
  42. ->orderBy('house_level')
  43. ->orderBy('talent_level')
  44. ->get();
  45. }
  46. /**
  47. * 获取匹配指定条件的配置
  48. *
  49. * @param int $houseLevel 房屋等级
  50. * @param int $talentLevel 达人等级
  51. * @return \Illuminate\Database\Eloquent\Collection
  52. */
  53. public function getMatchingConfigs(int $houseLevel, int $talentLevel)
  54. {
  55. return UrsTransferFeeConfig::where('status', UrsTransferFeeConfig::STATUS_ENABLED)
  56. ->where(function ($query) use ($houseLevel) {
  57. $query->where('house_level', 0)
  58. ->orWhere('house_level', $houseLevel);
  59. })
  60. ->where(function ($query) use ($talentLevel) {
  61. $query->where('talent_level', 0)
  62. ->orWhere('talent_level', $talentLevel);
  63. })
  64. ->orderBy('priority', 'desc')
  65. ->get();
  66. }
  67. /**
  68. * 检查是否存在重复的配置
  69. *
  70. * @param int $houseLevel 房屋等级
  71. * @param int $talentLevel 达人等级
  72. * @param int|null $excludeId 排除的配置ID
  73. * @return bool
  74. */
  75. public function hasDuplicateConfig(int $houseLevel, int $talentLevel, ?int $excludeId = null): bool
  76. {
  77. $query = UrsTransferFeeConfig::where('house_level', $houseLevel)
  78. ->where('talent_level', $talentLevel);
  79. if ($excludeId) {
  80. $query->where('id', '!=', $excludeId);
  81. }
  82. return $query->exists();
  83. }
  84. /**
  85. * 获取最高优先级
  86. *
  87. * @return int
  88. */
  89. public function getMaxPriority(): int
  90. {
  91. return UrsTransferFeeConfig::max('priority') ?? 0;
  92. }
  93. /**
  94. * 批量更新状态
  95. *
  96. * @param array $ids 配置ID数组
  97. * @param int $status 状态值
  98. * @return int 更新的记录数
  99. */
  100. public function batchUpdateStatus(array $ids, int $status): int
  101. {
  102. return UrsTransferFeeConfig::whereIn('id', $ids)
  103. ->update(['status' => $status]);
  104. }
  105. /**
  106. * 获取统计信息
  107. *
  108. * @return array
  109. */
  110. public function getStatistics(): array
  111. {
  112. $total = UrsTransferFeeConfig::count();
  113. $enabled = UrsTransferFeeConfig::where('status', UrsTransferFeeConfig::STATUS_ENABLED)->count();
  114. $disabled = UrsTransferFeeConfig::where('status', UrsTransferFeeConfig::STATUS_DISABLED)->count();
  115. return [
  116. 'total' => $total,
  117. 'enabled' => $enabled,
  118. 'disabled' => $disabled,
  119. 'enabled_percentage' => $total > 0 ? round(($enabled / $total) * 100, 2) : 0,
  120. ];
  121. }
  122. }