getUserId(); $params = $this->request->only(['receiver_name', 'receiver_phone', 'detailed_address', 'is_default']); // 验证参数 $validate = validate([ 'receiver_name' => 'require', 'receiver_phone' => 'require|mobile', 'detailed_address' => 'require' ]); if (!$validate->check($params)) { return $this->renderError($validate->getError()); } // 检查用户地址数量限制 $addressCount = UserAddress::getUserAddressCount($user_id); if ($addressCount >= 10) { return $this->renderError('最多只能添加10个收货地址'); } // 添加地址 $address = new UserAddress; $address->user_id = $user_id; $address->receiver_name = $params['receiver_name']; $address->receiver_phone = $params['receiver_phone']; $address->detailed_address = $params['detailed_address']; $address->is_default = isset($params['is_default']) ? intval($params['is_default']) : 0; Db::startTrans(); try { // 如果设置为默认地址,则需要将其他地址设为非默认 if ($address->is_default == 1) { UserAddress::setOtherAddressNotDefault($user_id); } // 如果是第一个地址,自动设为默认 if ($addressCount == 0) { $address->is_default = 1; } $address->save(); Db::commit(); return $this->renderSuccess('添加成功', $address); } catch (\Exception $e) { Db::rollback(); return $this->renderError('添加失败: ' . $e->getMessage()); } } /** * 修改用户收货地址 */ public function updateAddress() { $user_id = $this->getUserId(); $params = $this->request->only(['id', 'receiver_name', 'receiver_phone', 'detailed_address', 'is_default']); // 验证参数 $validate = validate([ 'id' => 'require|number', 'receiver_name' => 'require', 'receiver_phone' => 'require|mobile', 'detailed_address' => 'require' ]); if (!$validate->check($params)) { return $this->renderError($validate->getError()); } // 查询地址是否存在 $address = UserAddress::where('id', $params['id']) ->where('user_id', $user_id) ->find(); if (!$address) { return $this->renderError('地址不存在'); } // 更新地址信息 $address->receiver_name = $params['receiver_name']; $address->receiver_phone = $params['receiver_phone']; $address->detailed_address = $params['detailed_address']; $is_default = isset($params['is_default']) ? intval($params['is_default']) : $address->is_default; Db::startTrans(); try { // 如果设置为默认地址,则需要将其他地址设为非默认 if ($is_default == 1 && $address->is_default != 1) { UserAddress::setOtherAddressNotDefault($user_id, $address->id); $address->is_default = 1; } $address->save(); Db::commit(); return $this->renderSuccess('修改成功', $address); } catch (\Exception $e) { Db::rollback(); return $this->renderError('修改失败: ' . $e->getMessage()); } } /** * 获取地址详情 */ public function getAddressDetail() { $user_id = $this->getUserId(); $id = $this->request->param('id'); if (empty($id)) { return $this->renderError('请选择要查看的地址'); } // 查询地址是否存在 $address = UserAddress::where('id', $id) ->where('user_id', $user_id) ->find(); if (!$address) { return $this->renderError('地址不存在'); } return $this->renderSuccess('获取成功', $address); } /** * 获取默认收货地址 */ public function getDefaultAddress() { $user_id = $this->getUserId(); // 查询默认地址 $address = UserAddress::where('user_id', $user_id) ->where('is_default', 1) ->find(); if (!$address) { // 如果没有默认地址,返回最新添加的一条 $address = UserAddress::where('user_id', $user_id) ->order('id', 'desc') ->find(); } return $this->renderSuccess('获取成功', $address); } /** * 获取收货地址列表 */ public function getAddressList() { $user_id = $this->getUserId(); // 查询所有地址,默认地址在最前面 $list = UserAddress::where('user_id', $user_id) ->where('is_deleted', 0) ->order('is_default', 'desc') ->order('id', 'desc') ->select(); return $this->renderSuccess('获取成功', $list); } /** * 删除收货地址 */ public function deleteAddress() { $user_id = $this->getUserId(); $id = $this->request->param('id'); if (empty($id)) { return $this->renderError('请选择要删除的地址'); } // 查询地址是否存在 $address = UserAddress::where('id', $id) ->where('user_id', $user_id) ->find(); if (!$address) { return $this->renderError('地址不存在'); } // 软删除地址 $address->is_deleted = 1; if ($address->save()) { return $this->renderSuccess('删除成功'); } else { return $this->renderError('删除失败'); } } /** * 设置默认收货地址 */ public function setDefaultAddress() { $user_id = $this->getUserId(); $id = $this->request->param('id'); if (empty($id)) { return $this->renderError('请选择要设为默认的地址'); } // 查询地址是否存在 $address = UserAddress::where('id', $id) ->where('user_id', $user_id) ->find(); if (!$address) { return $this->renderError('地址不存在'); } // 已经是默认地址 if ($address->is_default == 1) { return $this->renderSuccess('设置成功'); } Db::startTrans(); try { // 将其他地址设为非默认 UserAddress::setOtherAddressNotDefault($user_id); // 设置当前地址为默认 $address->is_default = 1; $address->save(); Db::commit(); return $this->renderSuccess('设置成功'); } catch (\Exception $e) { Db::rollback(); return $this->renderError('设置失败: ' . $e->getMessage()); } } }