SignInRewardLogic.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace App\Http\logic\admin;
  3. use App\Models\SignInRewardConfig;
  4. /**
  5. * 签到奖励配置业务逻辑类
  6. *
  7. * 负责签到奖励配置的增删改查操作
  8. */
  9. class SignInRewardLogic
  10. {
  11. /**
  12. * 错误信息存储
  13. *
  14. * @var string
  15. */
  16. protected $error = '';
  17. /**
  18. * 获取错误信息
  19. *
  20. * @return string
  21. */
  22. public function getError()
  23. {
  24. return $this->error;
  25. }
  26. /**
  27. * 设置错误信息
  28. *
  29. * @param string $error
  30. * @return void
  31. */
  32. public function setError($error)
  33. {
  34. $this->error = $error;
  35. }
  36. /**
  37. * 获取分页列表
  38. *
  39. * @param int $perPage
  40. * @return \Illuminate\Pagination\Paginator
  41. */
  42. public function getList($perPage = 10)
  43. {
  44. return SignInRewardConfig::getPaginatedList($perPage);
  45. }
  46. /**
  47. * 获取指定天数的奖励配置
  48. *
  49. * @param int $dayNumber
  50. * @return SignInRewardConfig|null
  51. */
  52. public function getByDay($dayNumber)
  53. {
  54. return SignInRewardConfig::findByDay($dayNumber);
  55. }
  56. /**
  57. * 创建新的签到奖励配置
  58. *
  59. * @param array $data 包含 DayNumber 和 RewardScore
  60. * @return bool
  61. */
  62. public function create($data)
  63. {
  64. try {
  65. // 验证数据
  66. if (!$this->validateData($data)) {
  67. return false;
  68. }
  69. // 检查是否已存在相同的 DayNumber
  70. if (SignInRewardConfig::where('DayNumber', $data['DayNumber'])->exists()) {
  71. $this->error = "第 {$data['DayNumber']} 天的配置已存在";
  72. return false;
  73. }
  74. SignInRewardConfig::create([
  75. 'DayNumber' => (int) $data['DayNumber'],
  76. 'RewardScore' => (int) $data['RewardScore'],
  77. ]);
  78. return true;
  79. } catch (\Exception $e) {
  80. $this->error = $e->getMessage();
  81. return false;
  82. }
  83. }
  84. /**
  85. * 更新签到奖励配置
  86. *
  87. * @param int $dayNumber
  88. * @param array $data
  89. * @return bool
  90. */
  91. public function update($dayNumber, $data)
  92. {
  93. try {
  94. $config = SignInRewardConfig::findOrFail($dayNumber);
  95. // 验证数据
  96. if (!$this->validateData($data, true)) {
  97. return false;
  98. }
  99. $config->update([
  100. 'RewardScore' => (int) $data['RewardScore'],
  101. ]);
  102. return true;
  103. } catch (\Exception $e) {
  104. $this->error = $e->getMessage();
  105. return false;
  106. }
  107. }
  108. /**
  109. * 删除签到奖励配置
  110. *
  111. * @param int $dayNumber
  112. * @return bool
  113. */
  114. public function delete($dayNumber)
  115. {
  116. try {
  117. $config = SignInRewardConfig::findOrFail($dayNumber);
  118. $config->delete();
  119. return true;
  120. } catch (\Exception $e) {
  121. $this->error = $e->getMessage();
  122. return false;
  123. }
  124. }
  125. /**
  126. * 验证数据有效性
  127. *
  128. * @param array $data
  129. * @param bool $isUpdate 是否为更新操作(如果为 true,DayNumber 不是必需的)
  130. * @return bool
  131. */
  132. protected function validateData($data, $isUpdate = false)
  133. {
  134. if (!$isUpdate) {
  135. // 创建时,DayNumber 是必需的
  136. if (!isset($data['DayNumber']) || $data['DayNumber'] === '') {
  137. $this->error = "签到天数不能为空";
  138. return false;
  139. }
  140. if (!is_numeric($data['DayNumber']) || (int) $data['DayNumber'] <= 0) {
  141. $this->error = "签到天数必须是正整数";
  142. return false;
  143. }
  144. }
  145. // RewardScore 必需且必须是非负整数
  146. if (!isset($data['RewardScore']) || $data['RewardScore'] === '') {
  147. $this->error = "奖励积分不能为空";
  148. return false;
  149. }
  150. if (!is_numeric($data['RewardScore']) || (int) $data['RewardScore'] < 0) {
  151. $this->error = "奖励积分必须是非负整数";
  152. return false;
  153. }
  154. return true;
  155. }
  156. }