package com.xiaopeng.account.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.account.mapper.XpAppUserCollectAddrMapper; 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.dto.map.XpPointExportExcelQuery; import com.xiaopeng.api.feignClient.operation.XpPointClient; import com.xiaopeng.api.model.account.XpAppUserCollectAddr; import com.xiaopeng.api.model.operation.XpPoint; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.web.page.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; import java.util.stream.Collectors; /** *

* 用户收藏地址 服务实现类 *

* * @author ck * @since 2026-04-10 */ public class XpAppUserCollectAddrServiceImpl extends ServiceImpl implements IXpAppUserCollectAddrService { @Autowired private XpPointClient xpPointClient; /** * 收藏地址 * * @param dto * @param uid * @return */ @Override public Boolean collectAddr(CollectAddrDTO dto, String uid) { if (dto.getType() == 1) { Long count = this.count(new LambdaQueryWrapper() .eq(XpAppUserCollectAddr::getAppUserId, Long.parseLong(uid)) .eq(XpAppUserCollectAddr::getDeleted, 0)); if (count >= 50) { throw new ServiceException("收藏夹已满,请先删除旧地址"); } Long old = this.count(new LambdaQueryWrapper() .eq(XpAppUserCollectAddr::getAppUserId, Long.parseLong(uid)) .eq(XpAppUserCollectAddr::getDeleted, 0).eq(XpAppUserCollectAddr::getPointId, dto.getPointId())); if (old > 0) { return true; } XpAppUserCollectAddr xpAppUserCollectAddr = new XpAppUserCollectAddr(); xpAppUserCollectAddr.setAppUserId(Long.parseLong(uid)); xpAppUserCollectAddr.setLatitude(dto.getLatitude()); xpAppUserCollectAddr.setLongitude(dto.getLongitude()); xpAppUserCollectAddr.setPointId(dto.getPointId()); return this.save(xpAppUserCollectAddr); } else { XpAppUserCollectAddr xpAppUserCollectAddr = this.getOne(new LambdaQueryWrapper() .eq(XpAppUserCollectAddr::getAppUserId, Long.parseLong(uid)) .eq(XpAppUserCollectAddr::getDeleted, 0).eq(XpAppUserCollectAddr::getPointId, dto.getPointId()).last("limit 1")); if (xpAppUserCollectAddr != null) { return this.removeById(xpAppUserCollectAddr.getId()); } } return false; } /** * 收藏地址列表 * * @param uid * @return */ @Override public PageInfo userCollectAddrList(XpUserCollectAddrListQuery query, String uid) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); Page pageData = this.baseMapper.userCollectAddrPageList(page, query, Long.parseLong(uid)); if(!pageData.getRecords().isEmpty()){ List pointIds = pageData.getRecords().stream().map(XpAppUserCollectAddrVO::getPointId).collect(Collectors.toList()); XpPointExportExcelQuery xpPointExportExcelQuery = new XpPointExportExcelQuery(); xpPointExportExcelQuery.setPointIds(pointIds); R> pointClientByIds = xpPointClient.getByIds(xpPointExportExcelQuery); if(R.isSuccess(pointClientByIds)){ List data = pointClientByIds.getData(); pageData.getRecords().forEach(item -> { data.forEach(point -> { if(item.getPointId().equals(point.getId())){ item.setPointName(point.getPointName()); item.setPointAddress(point.getPointAddress()); } }); }); } } PageInfo resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize()); resultPage.setTotal(pageData.getTotal()); resultPage.setRecords(pageData.getRecords()); return resultPage; } }