123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- <?php
- namespace App\Services\Client;
- use App\Enums\UserStatus;
- use App\Models\MemberUser;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- class UserAddressService
- {
- /**
- * 获取默认地址
- */
- public function getDefault($userId)
- {
- try {
- // 根据用户编号查询用户数据
- $user = MemberUser::findOrFail($userId);
- if ($user->state != UserStatus::OPEN->value) {
- return ['code' => 400, 'message' => '用户状态异常'];
- }
- // 查询用户地址列表,返回用户默认地址
- $address = $user->addresses()
- ->where('is_default', 1)
- ->first();
- return ['code' => 200, 'message' => 'success', 'data' => $address];
- } catch (\Exception $e) {
- Log::error('获取默认地址失败', [
- 'user_id' => $userId,
- 'error' => $e->getMessage(),
- ]);
- return ['code' => 500, 'message' => '获取默认地址失败'];
- }
- }
- /**
- * 添加地址
- */
- public function store($userId, array $data)
- {
- DB::beginTransaction();
- try {
- // 根据用户编号查询用户数据
- $user = MemberUser::findOrFail($userId);
- if ($user->state != UserStatus::OPEN->value) {
- DB::rollBack();
- return ['code' => 400, 'message' => '用户状态异常'];
- }
- // 如果用户只有一个地址,或者传入的is_default为true,则设置为默认地址
- $isFirst = $user->addresses()->count() == 0 || ($data['is_default'] ?? false);
- if ($isFirst) {
- $data['is_default'] = 1;
- // 将用户其他地址设为非默认
- $user->addresses()->update(['is_default' => 0]);
- }
- // 保存用户地址
- $user->addresses()->create($data);
- DB::commit();
- return ['code' => 200, 'message' => '添加成功'];
- } catch (\Exception $e) {
- DB::rollBack();
- Log::error('添加地址失败', [
- 'user_id' => $userId,
- 'data' => $data,
- 'error' => $e->getMessage(),
- ]);
- return ['code' => 500, 'message' => '添加地址失败'];
- }
- }
- /**
- * 修改地址
- */
- public function update($userId, $id, array $data)
- {
- DB::beginTransaction();
- try {
- // 根据用户编号查询用户数据
- $user = MemberUser::findOrFail($userId);
- if ($user->state != UserStatus::OPEN->value) {
- DB::rollBack();
- return ['code' => 400, 'message' => '用户状态异常'];
- }
- // 根据地址编号查询地址数据
- $address = $user->addresses()
- ->where('id', $id)
- ->firstOrFail();
- // 如果用户只有一个地址,或者传入的is_default为true,则设置为默认地址
- $isFirst = $user->addresses()->count() == 1 || ($data['is_default'] ?? false);
- if ($isFirst) {
- $data['is_default'] = 1;
- // 将用户其他地址设为非默认
- $user->addresses()->update(['is_default' => 0]);
- }
- // 修改地址信息
- $address->update($data);
- DB::commit();
- return ['code' => 200, 'message' => '修改成功'];
- } catch (\Exception $e) {
- DB::rollBack();
- Log::error('修改地址失败', [
- 'user_id' => $userId,
- 'id' => $id,
- 'data' => $data,
- 'error' => $e->getMessage(),
- ]);
- return ['code' => 500, 'message' => '修改地址失败'];
- }
- }
- /**
- * 删除地址
- */
- public function destroy($userId, $id)
- {
- DB::beginTransaction();
- try {
- // 根据用户编号查询用户数据
- $user = MemberUser::findOrFail($userId);
- if ($user->state != UserStatus::OPEN->value) {
- DB::rollBack();
- return ['code' => 400, 'message' => '用户状态异常'];
- }
- // 根据地址编号查询地址数据
- $address = $user->addresses()
- ->where('id', $id)
- ->firstOrFail();
- // 删除地址
- $address->delete();
- DB::commit();
- return ['code' => 200, 'message' => '删除成功'];
- } catch (\Exception $e) {
- DB::rollBack();
- Log::error('删除地址失败', [
- 'user_id' => $userId,
- 'id' => $id,
- 'error' => $e->getMessage(),
- ]);
- return ['code' => 500, 'message' => '删除地址失败'];
- }
- }
- /**
- * 设置默认地址
- */
- public function setDefault($userId, $id)
- {
- DB::beginTransaction();
- try {
- // 根据用户编号查询用户数据
- $user = MemberUser::findOrFail($userId);
- if ($user->state != UserStatus::OPEN->value) {
- DB::rollBack();
- return ['code' => 400, 'message' => '用户状态异常'];
- }
- // 根据地址编号查询地址数据
- $address = $user->addresses()
- ->where('id', $id)
- ->firstOrFail();
- // 将所有地址设为非默认
- $user->addresses()->update(['is_default' => 0]);
- // 设置为默认地址
- $address->update(['is_default' => 1]);
- DB::commit();
- return ['code' => 200, 'message' => '设置成功'];
- } catch (\Exception $e) {
- DB::rollBack();
- Log::error('设置默认地址失败', [
- 'user_id' => $userId,
- 'id' => $id,
- 'error' => $e->getMessage(),
- ]);
- return ['code' => 500, 'message' => '设置默认地址失败'];
- }
- }
- /**
- * 获取地址列表
- */
- public function list($userId, $perPage = 15)
- {
- try {
- // 根据用户编号查询用户数据
- $user = MemberUser::findOrFail($userId);
- if ($user->state != UserStatus::OPEN->value) {
- return ['code' => 400, 'message' => '用户状态异常'];
- }
- // 查询用户地址列表并分页
- $addresses = $user->addresses()
- ->orderBy('is_default', 'desc')
- ->orderBy('id', 'desc')
- ->paginate($perPage);
- return [
- 'code' => 200,
- 'message' => 'success',
- 'data' => [
- 'items' => $addresses->items(),
- 'total' => $addresses->total(),
- ],
- ];
- } catch (\Exception $e) {
- Log::error('获取地址列表失败', [
- 'user_id' => $userId,
- 'error' => $e->getMessage(),
- ]);
- return ['code' => 500, 'message' => '获取地址列表失败'];
- }
- }
- }
|