UserAddressService.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. DB::rollBack();
  43. return ['code' => 400, 'message' => '用户状态异常'];
  44. }
  45. // 如果用户只有一个地址,或者传入的is_default为true,则设置为默认地址
  46. $isFirst = $user->addresses()->count() == 0 || ($data['is_default'] ?? false);
  47. if ($isFirst) {
  48. $data['is_default'] = 1;
  49. // 将用户其他地址设为非默认
  50. $user->addresses()->update(['is_default' => 0]);
  51. }
  52. // 保存用户地址
  53. $user->addresses()->create($data);
  54. DB::commit();
  55. return ['code' => 200, 'message' => '添加成功'];
  56. } catch (\Exception $e) {
  57. DB::rollBack();
  58. Log::error('添加地址失败', [
  59. 'user_id' => $userId,
  60. 'data' => $data,
  61. 'error' => $e->getMessage(),
  62. ]);
  63. return ['code' => 500, 'message' => '添加地址失败'];
  64. }
  65. }
  66. /**
  67. * 修改地址
  68. */
  69. public function update($userId, $id, array $data)
  70. {
  71. DB::beginTransaction();
  72. try {
  73. // 根据用户编号查询用户数据
  74. $user = MemberUser::findOrFail($userId);
  75. if ($user->state != 'enable') {
  76. DB::rollBack();
  77. return ['code' => 400, 'message' => '用户状态异常'];
  78. }
  79. // 根据地址编号查询地址数据
  80. $address = $user->addresses()
  81. ->where('id', $id)
  82. ->firstOrFail();
  83. // 如果用户只有一个地址,或者传入的is_default为true,则设置为默认地址
  84. $isFirst = $user->addresses()->count() == 1 || ($data['is_default'] ?? false);
  85. if ($isFirst) {
  86. $data['is_default'] = 1;
  87. // 将用户其他地址设为非默认
  88. $user->addresses()->update(['is_default' => 0]);
  89. }
  90. // 修改地址信息
  91. $address->update($data);
  92. DB::commit();
  93. return ['code' => 200, 'message' => '修改成功'];
  94. } catch (\Exception $e) {
  95. DB::rollBack();
  96. Log::error('修改地址失败', [
  97. 'user_id' => $userId,
  98. 'id' => $id,
  99. 'data' => $data,
  100. 'error' => $e->getMessage(),
  101. ]);
  102. return ['code' => 500, 'message' => '修改地址失败'];
  103. }
  104. }
  105. /**
  106. * 删除地址
  107. */
  108. public function destroy($userId, $id)
  109. {
  110. DB::beginTransaction();
  111. try {
  112. // 根据用户编号查询用户数据
  113. $user = MemberUser::findOrFail($userId);
  114. if ($user->state != 'enable') {
  115. DB::rollBack();
  116. return ['code' => 400, 'message' => '用户状态异常'];
  117. }
  118. // 根据地址编号查询地址数据
  119. $address = $user->addresses()
  120. ->where('id', $id)
  121. ->firstOrFail();
  122. // 删除地址
  123. $address->delete();
  124. DB::commit();
  125. return ['code' => 200, 'message' => '删除成功'];
  126. } catch (\Exception $e) {
  127. DB::rollBack();
  128. Log::error('删除地址失败', [
  129. 'user_id' => $userId,
  130. 'id' => $id,
  131. 'error' => $e->getMessage(),
  132. ]);
  133. return ['code' => 500, 'message' => '删除地址失败'];
  134. }
  135. }
  136. /**
  137. * 设置默认地址
  138. */
  139. public function setDefault($userId, $id)
  140. {
  141. DB::beginTransaction();
  142. try {
  143. // 根据用户编号查询用户数据
  144. $user = MemberUser::findOrFail($userId);
  145. if ($user->state != 'enable') {
  146. DB::rollBack();
  147. return ['code' => 400, 'message' => '用户状态异常'];
  148. }
  149. // 根据地址编号查询地址数据
  150. $address = $user->addresses()
  151. ->where('id', $id)
  152. ->firstOrFail();
  153. // 将所有地址设为非默认
  154. $user->addresses()->update(['is_default' => 0]);
  155. // 设置为默认地址
  156. $address->update(['is_default' => 1]);
  157. DB::commit();
  158. return ['code' => 200, 'message' => '设置成功'];
  159. } catch (\Exception $e) {
  160. DB::rollBack();
  161. Log::error('设置默认地址失败', [
  162. 'user_id' => $userId,
  163. 'id' => $id,
  164. 'error' => $e->getMessage(),
  165. ]);
  166. return ['code' => 500, 'message' => '设置默认地址失败'];
  167. }
  168. }
  169. }