UserAddressService.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace App\Services\Client;
  3. use App\Models\MemberUser;
  4. use Illuminate\Support\Facades\DB;
  5. use Illuminate\Support\Facades\Log;
  6. class UserAddressService
  7. {
  8. /**
  9. * 获取默认地址
  10. */
  11. public function getDefault($userId)
  12. {
  13. try {
  14. // 根据用户编号查询用户数据
  15. $user = MemberUser::findOrFail($userId);
  16. if ($user->state != 'enable') {
  17. return ['code' => 400, 'message' => '用户状态异常'];
  18. }
  19. // 查询用户地址列表,返回用户默认地址
  20. $address = $user->addresses()
  21. ->where('is_default', 1)
  22. ->first();
  23. return ['code' => 200, 'message' => 'success', 'data' => $address];
  24. } catch (\Exception $e) {
  25. Log::error('获取默认地址失败', [
  26. 'user_id' => $userId,
  27. 'error' => $e->getMessage(),
  28. ]);
  29. return ['code' => 500, 'message' => '获取默认地址失败'];
  30. }
  31. }
  32. /**
  33. * 添加地址
  34. */
  35. public function store($userId, array $data)
  36. {
  37. DB::beginTransaction();
  38. try {
  39. // 根据用户编号查询用户数据
  40. $user = MemberUser::findOrFail($userId);
  41. if ($user->state != 'enable') {
  42. return ['code' => 400, 'message' => '用户状态异常'];
  43. }
  44. // 如果用户只有一个地址,或者传入的is_default为true,则设置为默认地址
  45. $isFirst = $user->addresses()->count() == 0 || ($data['is_default'] ?? false);
  46. if ($isFirst) {
  47. $data['is_default'] = 1;
  48. // 将用户其他地址设为非默认
  49. $user->addresses()->update(['is_default' => 0]);
  50. }
  51. // 保存用户地址
  52. $user->addresses()->create($data);
  53. DB::commit();
  54. return ['code' => 200, 'message' => '添加成功'];
  55. } catch (\Exception $e) {
  56. DB::rollBack();
  57. Log::error('添加地址失败', [
  58. 'user_id' => $userId,
  59. 'data' => $data,
  60. 'error' => $e->getMessage(),
  61. ]);
  62. return ['code' => 500, 'message' => '添加地址失败'];
  63. }
  64. }
  65. /**
  66. * 修改地址
  67. */
  68. public function update($userId, $id, array $data)
  69. {
  70. DB::beginTransaction();
  71. try {
  72. // 根据用户编号查询用户数据
  73. $user = MemberUser::findOrFail($userId);
  74. if ($user->state != 'enable') {
  75. return ['code' => 400, 'message' => '用户状态异常'];
  76. }
  77. // 根据地址编号查询地址数据
  78. $address = $user->addresses()
  79. ->where('id', $id)
  80. ->firstOrFail();
  81. // 修改地址信息
  82. $address->update($data);
  83. DB::commit();
  84. return ['code' => 200, 'message' => '修改成功'];
  85. } catch (\Exception $e) {
  86. DB::rollBack();
  87. Log::error('修改地址失败', [
  88. 'user_id' => $userId,
  89. 'id' => $id,
  90. 'data' => $data,
  91. 'error' => $e->getMessage(),
  92. ]);
  93. return ['code' => 500, 'message' => '修改地址失败'];
  94. }
  95. }
  96. /**
  97. * 删除地址
  98. */
  99. public function destroy($userId, $id)
  100. {
  101. DB::beginTransaction();
  102. try {
  103. // 根据用户编号查询用户数据
  104. $user = MemberUser::findOrFail($userId);
  105. if ($user->state != 'enable') {
  106. return ['code' => 400, 'message' => '用户状态异常'];
  107. }
  108. // 根据地址编号查询地址数据
  109. $address = $user->addresses()
  110. ->where('id', $id)
  111. ->firstOrFail();
  112. // 删除地址
  113. $address->delete();
  114. DB::commit();
  115. return ['code' => 200, 'message' => '删除成功'];
  116. } catch (\Exception $e) {
  117. DB::rollBack();
  118. Log::error('删除地址失败', [
  119. 'user_id' => $userId,
  120. 'id' => $id,
  121. 'error' => $e->getMessage(),
  122. ]);
  123. return ['code' => 500, 'message' => '删除地址失败'];
  124. }
  125. }
  126. /**
  127. * 设置默认地址
  128. */
  129. public function setDefault($userId, $id)
  130. {
  131. DB::beginTransaction();
  132. try {
  133. // 根据用户编号查询用户数据
  134. $user = MemberUser::findOrFail($userId);
  135. if ($user->state != 'enable') {
  136. return ['code' => 400, 'message' => '用户状态异常'];
  137. }
  138. // 根据地址编号查询地址数据
  139. $address = $user->addresses()
  140. ->where('id', $id)
  141. ->firstOrFail();
  142. // 将所有地址设为非默认
  143. $user->addresses()->update(['is_default' => 0]);
  144. // 设置为默认地址
  145. $address->update(['is_default' => 1]);
  146. DB::commit();
  147. return ['code' => 200, 'message' => '设置成功'];
  148. } catch (\Exception $e) {
  149. DB::rollBack();
  150. Log::error('设置默认地址失败', [
  151. 'user_id' => $userId,
  152. 'id' => $id,
  153. 'error' => $e->getMessage(),
  154. ]);
  155. return ['code' => 500, 'message' => '设置默认地址失败'];
  156. }
  157. }
  158. }