package com.xiaopeng.account.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.account.model.dto.CollectAddrDTO; import com.xiaopeng.account.model.query.XpUserCollectAddrListQuery; import com.xiaopeng.account.model.vo.XpAppUserCollectAddrVO; import com.xiaopeng.account.service.IXpAppUserCollectAddrService; import com.xiaopeng.api.model.account.XpAppUserCollectAddr; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.unifiedverification.interceptor.XpClientCheck; import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.stream.Collectors; /** *

* 用户收藏地址 前端控制器 *

* * @author ck * @since 2026-04-10 */ @RestController @RequestMapping("") public class XpAppUserCollectAddrController { private final IXpAppUserCollectAddrService xpAppUserCollectAddrService; public XpAppUserCollectAddrController(IXpAppUserCollectAddrService xpAppUserCollectAddrService) { this.xpAppUserCollectAddrService = xpAppUserCollectAddrService; } /** * 收藏地址/取消收藏地址 */ @PostMapping("/api/v1/mini-program/collect/addr") @ApiOperation(value = "收藏/取消收藏地址", tags = {"小程序-收藏/取消收藏地址"}) @XpClientCheck(checkToken = false, checkOtpToken = true) public R collectAddr(@Validated @RequestBody CollectAddrDTO dto, HttpServletRequest request) { // uid已通过拦截器otp校验,可以直接使用 String uid = request.getHeader("XP-Uid"); boolean result = xpAppUserCollectAddrService.collectAddr(dto, uid); if (result) { return R.ok(); } return R.fail(); } /** * 获取收藏夹收藏地址列表 */ @PostMapping("/api/v1/mini-program/collect/addrlist") @ApiOperation(value = "收藏夹", tags = {"小程序-获取用户收藏夹收藏地址列表"}) @XpClientCheck(checkToken = false, checkOtpToken = true) public R> collectAddrlist(@RequestBody XpUserCollectAddrListQuery query, HttpServletRequest request) { // uid已通过拦截器otp校验,可以直接使用 String uid = request.getHeader("XP-Uid"); return R.ok(xpAppUserCollectAddrService.userCollectAddrList(query, uid)); } /** * 1.0删除收藏夹数据 */ @DeleteMapping("/api/v1/mini-program/collect/delete/{id}") @ApiOperation(value = "删除收藏夹数据", tags = {"小程序-删除收藏夹数据"}) @XpClientCheck(checkToken = false, checkOtpToken = true) public R delete(@PathVariable Long id, HttpServletRequest request) { // uid已通过拦截器otp校验,可以直接使用 String uid = request.getHeader("XP-Uid"); XpAppUserCollectAddr address = xpAppUserCollectAddrService.getById(id); if (address == null || !address.getAppUserId().equals(Long.valueOf(uid))) { return R.fail("收藏夹数据不存在"); } boolean result = xpAppUserCollectAddrService.removeById(id); if (result) { return R.ok(); } return R.fail(); } /** * 获取用户收藏的pointIds * @param uid * @return */ @GetMapping("/logan/rt/v1/appUser/collectAddr/getPointIds") public R> getPointIdsByUserId(@RequestParam Long uid){ List ids = xpAppUserCollectAddrService.list(new LambdaQueryWrapper() .eq(XpAppUserCollectAddr::getAppUserId, uid).eq(XpAppUserCollectAddr::getItemType,1) .eq(XpAppUserCollectAddr::getDeleted, 0)) .stream() .map(XpAppUserCollectAddr::getPointId) .distinct() .collect(Collectors.toList()); return R.ok(ids); } /** * 获取用户收藏的stationIds * 仅返回“场站收藏”记录,避免和站点收藏共用 point_id 产生歧义。 */ @GetMapping("/logan/rt/v1/appUser/collectAddr/getStationIds") public R> getStationIdsByUserId(@RequestParam Long uid){ List ids = xpAppUserCollectAddrService.list(new LambdaQueryWrapper() .eq(XpAppUserCollectAddr::getAppUserId, uid) .eq(XpAppUserCollectAddr::getDeleted, 0) .eq(XpAppUserCollectAddr::getItemType, 2)) .stream() .map(XpAppUserCollectAddr::getStationId) .filter(java.util.Objects::nonNull) .distinct() .collect(Collectors.toList()); return R.ok(ids); } }