ReceiveAddressService.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. namespace App\Module\UrausSys\Services;
  3. use App\Module\UrausSys\Enums\RECEIVE_ADDRESS_STATUS;
  4. use App\Module\UrausSys\Models\ReceiveAddress;
  5. /**
  6. * 收款地址管理服务
  7. */
  8. class ReceiveAddressService
  9. {
  10. /**
  11. * 获取可用收款地址(优先最新OK状态,无则随机取ING状态)
  12. *
  13. * @return \App\Module\UrausSys\Models\ReceiveAddress|null
  14. */
  15. public function getAvailableAddress()
  16. {
  17. // 优先获取最新可用状态地址(OK=1)
  18. $address = ReceiveAddress::where('status', RECEIVE_ADDRESS_STATUS::OK->value)
  19. ->latest('id')
  20. ->first();
  21. // 无可用地址时随机获取使用中状态地址(ING=20)
  22. if (!$address) {
  23. $address = ReceiveAddress::where('status', RECEIVE_ADDRESS_STATUS::ING->value)
  24. ->inRandomOrder() // 使用数据库原生随机排序
  25. ->first();
  26. }
  27. if ($address) {
  28. if ($address->status === RECEIVE_ADDRESS_STATUS::OK) {
  29. $address->status = RECEIVE_ADDRESS_STATUS::ING;
  30. $address->save();
  31. }
  32. }
  33. return $address;
  34. }
  35. }