UserAddressService.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. // 如果用户只有一个地址,或者传入的is_default为true,则设置为默认地址
  82. $isFirst = $user->addresses()->count() == 1 || ($data['is_default'] ?? false);
  83. if ($isFirst) {
  84. $data['is_default'] = 1;
  85. // 将用户其他地址设为非默认
  86. $user->addresses()->update(['is_default' => 0]);
  87. }
  88. // 修改地址信息
  89. $address->update($data);
  90. DB::commit();
  91. return ['code' => 200, 'message' => '修改成功'];
  92. } catch (\Exception $e) {
  93. DB::rollBack();
  94. Log::error('修改地址失败', [
  95. 'user_id' => $userId,
  96. 'id' => $id,
  97. 'data' => $data,
  98. 'error' => $e->getMessage(),
  99. ]);
  100. return ['code' => 500, 'message' => '修改地址失败'];
  101. }
  102. }
  103. /**
  104. * 删除地址
  105. */
  106. public function destroy($userId, $id)
  107. {
  108. DB::beginTransaction();
  109. try {
  110. // 根据用户编号查询用户数据
  111. $user = MemberUser::findOrFail($userId);
  112. if ($user->state != 'enable') {
  113. return ['code' => 400, 'message' => '用户状态异常'];
  114. }
  115. // 根据地址编号查询地址数据
  116. $address = $user->addresses()
  117. ->where('id', $id)
  118. ->firstOrFail();
  119. // 删除地址
  120. $address->delete();
  121. DB::commit();
  122. return ['code' => 200, 'message' => '删除成功'];
  123. } catch (\Exception $e) {
  124. DB::rollBack();
  125. Log::error('删除地址失败', [
  126. 'user_id' => $userId,
  127. 'id' => $id,
  128. 'error' => $e->getMessage(),
  129. ]);
  130. return ['code' => 500, 'message' => '删除地址失败'];
  131. }
  132. }
  133. /**
  134. * 设置默认地址
  135. */
  136. public function setDefault($userId, $id)
  137. {
  138. DB::beginTransaction();
  139. try {
  140. // 根据用户编号查询用户数据
  141. $user = MemberUser::findOrFail($userId);
  142. if ($user->state != 'enable') {
  143. return ['code' => 400, 'message' => '用户状态异常'];
  144. }
  145. // 根据地址编号查询地址数据
  146. $address = $user->addresses()
  147. ->where('id', $id)
  148. ->firstOrFail();
  149. // 将所有地址设为非默认
  150. $user->addresses()->update(['is_default' => 0]);
  151. // 设置为默认地址
  152. $address->update(['is_default' => 1]);
  153. DB::commit();
  154. return ['code' => 200, 'message' => '设置成功'];
  155. } catch (\Exception $e) {
  156. DB::rollBack();
  157. Log::error('设置默认地址失败', [
  158. 'user_id' => $userId,
  159. 'id' => $id,
  160. 'error' => $e->getMessage(),
  161. ]);
  162. return ['code' => 500, 'message' => '设置默认地址失败'];
  163. }
  164. }
  165. }