ShopInfoService.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Services;
  3. use App\Enums\ShopStatus;
  4. use App\Models\ShopInfo;
  5. use Illuminate\Support\Facades\Auth;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Log;
  8. use Slowlyo\OwlAdmin\Services\AdminService;
  9. /**
  10. * 店铺
  11. *
  12. * @method ShopInfo getModel()
  13. * @method ShopInfo|\Illuminate\Database\Query\Builder query()
  14. */
  15. class ShopInfoService extends AdminService
  16. {
  17. protected string $modelName = ShopInfo::class;
  18. /**
  19. * 审核店铺
  20. *
  21. * @param array $data 包含 shop_id, action 和 reason
  22. */
  23. public function reviewShop(array $data): array
  24. {
  25. try {
  26. DB::beginTransaction();
  27. // 获取店铺信息
  28. $shop = ShopInfo::with('authRecord')->findOrFail($data['shop_id']);
  29. // 验证店铺当前状态
  30. abort_if($shop->state !== ShopStatus::PENDING->value, 422, '店铺状态不允许审核');
  31. // 验证认证记录是否存在
  32. abort_if(! $shop->authRecord, 422, '店铺认证信息不存在');
  33. // 更新店铺状态
  34. $shop->state = $data['action'] === 'approve'
  35. ? ShopStatus::ACTIVE->value
  36. : ShopStatus::REJECTED->value;
  37. $shop->save();
  38. // 更新认证记录状态
  39. $shop->authRecord->state = $data['action'] === 'approve'
  40. ? ShopStatus::ACTIVE->value
  41. : ShopStatus::REJECTED->value;
  42. $shop->authRecord->audit_remark = $data['reason'];
  43. $shop->authRecord->audit_time = now();
  44. $shop->authRecord->auditor = Auth::id();
  45. $shop->authRecord->save();
  46. DB::commit();
  47. return [
  48. 'code' => 200,
  49. 'message' => '审核成功',
  50. 'data' => null,
  51. ];
  52. } catch (\Exception $e) {
  53. DB::rollBack();
  54. Log::error('审核店铺失败', [
  55. 'shop_id' => $data['shop_id'],
  56. 'action' => $data['action'],
  57. 'error' => $e->getMessage(),
  58. 'trace' => $e->getTraceAsString(),
  59. ]);
  60. throw $e;
  61. }
  62. }
  63. }