From 4875b28e456a9f6c50cf32cf1c5b872806d334be Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 28 Nov 2025 14:43:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=9F=A5=E8=AF=A2=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/enums/MemberRecentSceneEnum.java | 6 + .../admin/recent/vo/RecentPageReqVO.java | 22 +++ .../admin/recent/vo/RecentPageResVo.java | 10 +- .../admin/user/vo/MemberUserBaseVO.java | 3 + .../app/recent/AppRecentController.java | 11 +- .../dal/dataobject/user/MemberUserDO.java | 35 +++++ .../dal/mysql/location/LocationMapper.java | 4 +- .../member/dal/mysql/recent/RecentMapper.java | 28 +--- .../service/auth/MemberAuthServiceImpl.java | 11 +- .../service/location/LocationServiceImpl.java | 27 +++- .../member/service/recent/RecentService.java | 5 + .../service/recent/RecentServiceImpl.java | 98 ++++++++---- .../service/user/MemberUserServiceImpl.java | 5 +- .../main/resources/mapper/LocationMapper.xml | 44 ++++++ .../main/resources/mapper/RecentMapper.xml | 141 ++++++++++++++++++ .../src/main/resources/application-dev.yaml | 3 +- .../src/main/resources/application-local.yaml | 3 +- .../src/main/resources/application-prod.yaml | 3 +- 18 files changed, 385 insertions(+), 74 deletions(-) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/LocationMapper.xml diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentSceneEnum.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentSceneEnum.java index 45e7a8d..391fc71 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentSceneEnum.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentSceneEnum.java @@ -23,6 +23,12 @@ public enum MemberRecentSceneEnum { private final String type; private final String description; + public static List dynamicList = Arrays.asList(DYNAMIC_RECOMMEND, DYNAMIC_NEARBY); + + public static List squareList = Arrays.asList(SQUARE_SQUARE, SQUARE_NEW_TIME, SQUARE_NEW_PERSON); + + public static List distanceSceneList = Arrays.asList(DYNAMIC_NEARBY, SQUARE_NEW_TIME); + public static boolean contains(MemberRecentOperateEnum operateEnum) { return Arrays.asList(values()).stream().anyMatch(v -> ObjectUtil.equals(v.type, operateEnum.getType())); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageReqVO.java index 9b67f38..78ca60d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageReqVO.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; +import java.util.List; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -32,6 +33,9 @@ public class RecentPageReqVO extends PageParam { @Schema(description = "视频") private String coverVideo; + @Schema(description = "描述") + private String description; + @Schema(description = "描述") private String describe; @@ -57,4 +61,22 @@ public class RecentPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + @Schema(description = "场景") + private String sceneBizType; + + /** + * 用户tag相关 + */ + @Schema(description = "用户tagList") + private List memberRecentTagList; + + /** + * 位置相关 + */ + @Schema(description = "当前纬度") + private Double currentLat; + + @Schema(description = "当前经度") + private Double currentLng; + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageResVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageResVo.java index ad4af01..4a692c1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageResVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/recent/vo/RecentPageResVo.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; import java.util.List; @Data @@ -15,15 +16,15 @@ public class RecentPageResVo extends RecentDO { @Schema(description = "用户相关") private MemberVo member; - @Schema(description = "距离相关") - private LocationVo location; - @Schema(description = "操作统计相关") private OperationTotal operationTotal; @Schema(description = "用户tag") private List memberTagList; + @Schema(description = "距离(km)") + private Double distance; + @Data public static class MemberVo { @@ -53,6 +54,9 @@ public class RecentPageResVo extends RecentDO { @Schema(description = "城市") private String memberCity; + + @Schema(description = "最近登录时间") + private LocalDateTime appRefreshDate; } @Data diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java index e8c9974..075f3ad 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserBaseVO.java @@ -46,6 +46,9 @@ public class MemberUserBaseVO { @Schema(description = "所在地全程", example = "上海上海市普陀区") private String areaName; + @Schema(description = "app最近刷新时间") + private LocalDateTime appRefreshDate; + @Schema(description = "出生日期", example = "2023-03-12") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) private LocalDateTime birthday; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/AppRecentController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/AppRecentController.java index 24c5da8..9f70506 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/AppRecentController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/recent/AppRecentController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationTotalG import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentPageResVo; import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentSaveReqVO; import cn.iocoder.yudao.module.member.controller.app.recent.vo.*; +import cn.iocoder.yudao.module.member.enums.MemberRecentSceneEnum; import cn.iocoder.yudao.module.member.service.recent.RecentService; import cn.iocoder.yudao.module.member.service.recent.ViewRecordService; import io.swagger.v3.oas.annotations.Operation; @@ -36,7 +37,15 @@ public class AppRecentController { @Operation(summary = "快速查询朋友圈") public CommonResult> quickPage(@Valid @RequestBody AppRecentQuickPageVO dto) { dto.setOperationMemberId(getLoginUserId()); - return success(recentService.quickPage(dto)); + // 动态 + if (MemberRecentSceneEnum.dynamicList.contains(dto.getScene())) { + return success(recentService.quickPage(dto)); + } + // 广场 + if (MemberRecentSceneEnum.squareList.contains(dto.getScene())) { + return success(recentService.quickUserPage(dto)); + } + return success(new PageResult()); } @PostMapping("/create") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java index 9d0fae2..13b1f90 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java @@ -83,6 +83,11 @@ public class MemberUserDO extends TenantBaseDO { */ private LocalDateTime loginDate; + /** + * app最近刷新时间 + */ + private LocalDateTime appRefreshDate; + // ========== 基础信息 ========== /** @@ -187,6 +192,36 @@ public class MemberUserDO extends TenantBaseDO { */ private Long groupId; + /** + * 经度 + */ + private Double lng; + + /** + * 纬度 + */ + private Double lat; + + + /** + * 省 + */ + private String province; + + /** + * 市 + */ + private String city; + + /** + * 区 + */ + private String district; + + /** + * 详细地址 + */ + private String address; public String getAge() { if (ObjectUtil.isEmpty(birthday)) return "未知"; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/location/LocationMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/location/LocationMapper.java index abd945f..94abf1f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/location/LocationMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/location/LocationMapper.java @@ -8,11 +8,10 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.member.dal.dataobject.location.LocationDO; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.member.controller.admin.location.vo.*; +import org.apache.ibatis.annotations.Param; /** * 用户位置记录 Mapper - * - * @author 聊天交友 */ @Mapper public interface LocationMapper extends BaseMapperX { @@ -30,4 +29,5 @@ public interface LocationMapper extends BaseMapperX { .orderByDesc(LocationDO::getId)); } + List getLastLocationList(@Param("memberIds") List memberIds); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/recent/RecentMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/recent/RecentMapper.java index f141a91..accda9d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/recent/RecentMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/recent/RecentMapper.java @@ -1,14 +1,12 @@ package cn.iocoder.yudao.module.member.dal.mysql.recent; -import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO; -import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; -import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*; +import org.apache.ibatis.annotations.Param; /** * 朋友圈 Mapper @@ -16,23 +14,7 @@ import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*; @Mapper public interface RecentMapper extends BaseMapperX { - default PageResult selectPage(RecentPageReqVO reqVO) { - MPJLambdaWrapper queryWrapper = new MPJLambdaWrapperX() - .selectAll(RecentDO.class) - .leftJoin(MemberUserDO.class, MemberUserDO::getId, RecentDO::getMemberId) - .likeIfExists(MemberUserDO::getNickname, reqVO.getMemberNickname()) - .eqIfExists(RecentDO::getMemberId, reqVO.getMemberId()) - .eqIfExists(RecentDO::getDescription, reqVO.getDescribe()) - .eqIfExists(MemberUserDO::getSex, reqVO.getMemberSex()) - .likeIfExists(RecentDO::getIssueProvince, reqVO.getIssueProvince()) - .likeIfExists(RecentDO::getIssueCity, reqVO.getIssueCity()) - .likeIfExists(RecentDO::getIssueDistrict, reqVO.getIssueDistrict()) - .likeIfExists(RecentDO::getIssueAddress, reqVO.getIssueAddress()); - if (ObjectUtil.isNotEmpty(reqVO.getCreateTime())) { - queryWrapper.between(RecentDO::getCreateTime, reqVO.getCreateTime()[0], reqVO.getCreateTime()[1]); - } - queryWrapper.orderByDesc(RecentDO::getId); - return selectJoinPage(reqVO, RecentDO.class, queryWrapper); - } + IPage pageJoin(IPage page, @Param("dto") RecentPageReqVO dto); + IPage pageUserJoin(IPage page, @Param("dto") RecentPageReqVO dto); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java index b71863e..aab66d2 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java @@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.module.member.client.service.ChatApi; import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatLoginReqVO; import cn.iocoder.yudao.module.member.client.vo.chat.user.ChatLoginRespVo; +import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; @@ -36,6 +37,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDateTime; import java.util.Objects; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -309,8 +311,13 @@ public class MemberAuthServiceImpl implements MemberAuthService { @Override public AppAuthLoginRespVO refreshToken(String refreshToken) { - OAuth2AccessTokenRespDTO accessTokenDO = oauth2TokenApi.refreshAccessToken(refreshToken, - OAuth2ClientConstants.CLIENT_ID_DEFAULT); + OAuth2AccessTokenRespDTO accessTokenDO = oauth2TokenApi.refreshAccessToken(refreshToken, OAuth2ClientConstants.CLIENT_ID_DEFAULT); + + MemberUserUpdateReqVO update = new MemberUserUpdateReqVO(); + update.setId(accessTokenDO.getUserId()); + update.setAppRefreshDate(LocalDateTime.now()); + userService.updateUser(update); + return AuthConvert.INSTANCE.convert(accessTokenDO, null); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/location/LocationServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/location/LocationServiceImpl.java index 65776c8..b3d983e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/location/LocationServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/location/LocationServiceImpl.java @@ -5,11 +5,14 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.client.service.TxMapApi; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderReqVo; import cn.iocoder.yudao.module.member.client.vo.txmap.geocoder.TxMapGeocoderRespVo; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.enums.MemberErrorCode; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import cn.iocoder.yudao.module.member.controller.admin.location.vo.*; @@ -33,11 +36,14 @@ public class LocationServiceImpl implements LocationService { @Resource private LocationMapper locationMapper; + @Resource + private MemberUserMapper memberUserMapper; @Resource private TxMapApi txMapApi; @Override + @Transactional(rollbackFor = Exception.class) public Long createLocation(LocationSaveReqVO dto) { if (!ObjectUtil.isAllNotEmpty(dto.getProvince(), dto.getCity(), dto.getDistrict())) { TxMapGeocoderRespVo geocoder = txMapApi.geocoder(TxMapGeocoderReqVo.builder().location(dto.getLat() + "," + dto.getLon()).build()); @@ -55,7 +61,16 @@ public class LocationServiceImpl implements LocationService { // 插入 LocationDO location = BeanUtils.toBean(dto, LocationDO.class); locationMapper.insert(location); - // 返回 + // 更新用户位置信息 + MemberUserDO updateUser = new MemberUserDO(); + updateUser.setId(dto.getMemberId()); + updateUser.setLng(dto.getLon()); + updateUser.setLat(dto.getLat()); + updateUser.setProvince(dto.getProvince()); + updateUser.setCity(dto.getCity()); + updateUser.setDistrict(dto.getDistrict()); + updateUser.setAddress(dto.getAddress()); + memberUserMapper.updateById(updateUser); return location.getId(); } @@ -101,6 +116,9 @@ public class LocationServiceImpl implements LocationService { public LocationDO getCurrentUserLastLocation() { return locationMapper.selectOne(new LambdaQueryWrapperX() .eq(LocationDO::getMemberId, getLoginUserId()) + .isNotNull(LocationDO::getProvince) + .isNotNull(LocationDO::getCity) + .isNotNull(LocationDO::getDistrict) .orderByDesc(LocationDO::getCreateTime) .orderByDesc(LocationDO::getId) .last(" LIMIT 1") @@ -112,12 +130,7 @@ public class LocationServiceImpl implements LocationService { */ @Override public List getLastLocationList(List memberIds) { - return locationMapper.selectList(new LambdaQueryWrapperX() - .eq(LocationDO::getMemberId, getLoginUserId()) - .orderByDesc(LocationDO::getCreateTime) - .orderByDesc(LocationDO::getId) - .groupBy(LocationDO::getMemberId) - ); + return locationMapper.getLastLocationList(memberIds); } @Override diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentService.java index 1de9d5f..6036c82 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentService.java @@ -60,6 +60,11 @@ public interface RecentService { */ PageResult quickPage(AppRecentQuickPageVO bean); + /** + * 快速查询用户 + */ + PageResult quickUserPage(@Valid AppRecentQuickPageVO dto); + /** * 我喜欢-分页查询 */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java index 008e4c0..be958cc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java @@ -19,10 +19,13 @@ import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.enums.MemberErrorCode; import cn.iocoder.yudao.module.member.enums.MemberRecentOperateEnum; import cn.iocoder.yudao.module.member.enums.MemberRecentSceneEnum; +import cn.iocoder.yudao.module.member.enums.tag.MemberRecentTagEnum; import cn.iocoder.yudao.module.member.service.location.LocationService; import cn.iocoder.yudao.module.member.service.thirdauth.ThirdAuthService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.system.enums.common.SexEnum; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -231,8 +234,8 @@ public class RecentServiceImpl implements RecentService { */ @Override public PageResult getRecentPage(RecentPageReqVO pageReqVO) { - PageResult recentPageList = recentMapper.selectPage(pageReqVO); - List resultList = BeanUtils.toBean(recentPageList.getList(), RecentPageResVo.class); + IPage recentPageList = recentMapper.pageJoin(new Page(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO); + List resultList = recentPageList.getRecords(); // 为RecentPageResVo设置Member信息 convertRecentPageResVoSetupMember(resultList); // 为RecentPageResVo设置OperationTotal信息 @@ -250,30 +253,56 @@ public class RecentServiceImpl implements RecentService { // 查询当前用户信息 MemberUserDO operationUser = memberUserService.getUser(bean.getOperationMemberId()); - RecentPageReqVO result = BeanUtil.toBean(bean, RecentPageReqVO.class); - + RecentPageReqVO resultQuery = BeanUtil.toBean(bean, RecentPageReqVO.class); + resultQuery.setSceneBizType(bean.getScene().getType()); // 只查询异性 if (ObjectUtil.isNotEmpty(operationUser.getSex())) { SexEnum sexEnum = SexEnum.valueOfSex(operationUser.getSex()); SexEnum targetSex = SexEnum.negation(sexEnum.getSex()); - result.setMemberSex(targetSex.getSex()); + resultQuery.setMemberSex(targetSex.getSex()); } + // 查询用户最新的位置 + LocationDO locationDO = locationService.getCurrentUserLastLocation(); + resultQuery.setCurrentLat(locationDO.getLat()); + resultQuery.setCurrentLng(locationDO.getLon()); - PageResult recentPageList = recentMapper.selectPage(result); - List resultList = BeanUtils.toBean(recentPageList.getList(), RecentPageResVo.class); + IPage recentPageList = recentMapper.pageJoin(new Page(bean.getPageNo(), bean.getPageSize()), resultQuery); + List resultList = BeanUtils.toBean(recentPageList.getRecords(), RecentPageResVo.class); // 为RecentPageResVo设置Member信息 convertRecentPageResVoSetupMember(resultList); - // 查询距离的scene - List locationSceneList = new ArrayList() {{ - add(MemberRecentSceneEnum.SQUARE_SQUARE); - add(MemberRecentSceneEnum.SQUARE_NEW_TIME); - add(MemberRecentSceneEnum.SQUARE_NEW_PERSON); - }}; - if (locationSceneList.contains(bean.getScene())) { - // 查询用户最新的位置 - LocationDO locationDO = locationService.getCurrentUserLastLocation(); - convertRecentPageResVoSetupLocation(resultList, locationDO); + // 查询用户tag + convertRecentPageResVoSetupTag(resultList); + return new PageResult<>(resultList, recentPageList.getTotal()); + } + + /** + * 快速查询用户 + */ + @Override + public PageResult quickUserPage(AppRecentQuickPageVO bean) { + // 查询当前用户信息 + MemberUserDO operationUser = memberUserService.getUser(bean.getOperationMemberId()); + + RecentPageReqVO resultQuery = BeanUtil.toBean(bean, RecentPageReqVO.class); + resultQuery.setSceneBizType(bean.getScene().getType()); + // 只查询异性 + if (ObjectUtil.isNotEmpty(operationUser.getSex())) { + SexEnum sexEnum = SexEnum.valueOfSex(operationUser.getSex()); + SexEnum targetSex = SexEnum.negation(sexEnum.getSex()); + resultQuery.setMemberSex(targetSex.getSex()); } + // 查询用户最新的位置 + LocationDO locationDO = locationService.getCurrentUserLastLocation(); + resultQuery.setCurrentLat(locationDO.getLat()); + resultQuery.setCurrentLng(locationDO.getLon()); + // 广场-新人 + if (ObjectUtil.equals(MemberRecentSceneEnum.SQUARE_NEW_PERSON, bean.getScene())) { + resultQuery.setMemberRecentTagList(new ArrayList() {{ + add(MemberRecentTagEnum.NEW_PERSON.getType()); + }}); + } + IPage recentPageList = recentMapper.pageUserJoin(new Page(bean.getPageNo(), bean.getPageSize()), resultQuery); + List resultList = BeanUtils.toBean(recentPageList.getRecords(), RecentPageResVo.class); // 如果是新人模糊`头像`和`用户名` if (ObjectUtil.equals(bean.getScene(), MemberRecentSceneEnum.SQUARE_NEW_PERSON)) { for (RecentPageResVo v : resultList) { @@ -283,10 +312,13 @@ public class RecentServiceImpl implements RecentService { } } } + // 为RecentPageResVo设置Member信息 + convertRecentPageResVoSetupMember(resultList); + // 查询用户tag + convertRecentPageResVoSetupTag(resultList); return new PageResult<>(resultList, recentPageList.getTotal()); } - /** * 我喜欢-分页查询 */ @@ -350,9 +382,9 @@ public class RecentServiceImpl implements RecentService { List resultList = new ArrayList<>(); RecentPageReqVO dtoQuery = new RecentPageReqVO(); - PageResult pageList = recentMapper.selectPage(dtoQuery); + IPage pageList = recentMapper.pageJoin(new Page(dto.getPageNo(), dto.getPageSize()), dtoQuery); if (ObjectUtil.isEmpty(pageList)) return new PageResult<>(); - resultList = BeanUtil.copyToList(pageList.getList(), RecentPageResVo.class); + resultList = BeanUtil.copyToList(pageList.getRecords(), RecentPageResVo.class); // 添加用户信息 convertRecentPageResVoSetupMember(resultList); return new PageResult(resultList, pageList.getTotal()); @@ -421,6 +453,7 @@ public class RecentServiceImpl implements RecentService { memberVO.setMemberHeight(member.getHeight()); memberVO.setMemberWeight(member.getWeight()); memberVO.setMemberSex(member.getSex()); + memberVO.setAppRefreshDate(member.getAppRefreshDate()); entity.setMember(memberVO); } } @@ -523,20 +556,21 @@ public class RecentServiceImpl implements RecentService { */ private void convertRecentPageResVoSetupLocation(List list, LocationDO selfLocation) { if (ObjectUtil.isEmpty(list)) return; - List memberIds = list.stream().map(RecentPageResVo::getMemberId).collect(Collectors.toList()); + List memberIds = list.stream().map(RecentPageResVo::getMemberId).distinct().filter(ObjectUtil::isNotEmpty).collect(Collectors.toList()); List LocationList = locationService.getLastLocationList(memberIds); - Map LocationMap = IterUtil.toMap(LocationList, LocationDO::getId); + Map LocationMap = IterUtil.toMap(LocationList, LocationDO::getMemberId); + if (ObjectUtil.isEmpty(LocationMap)) return; for (RecentPageResVo entity : list) { - // 位置相关 - if (ObjectUtil.isNotEmpty(LocationMap)) { - LocationDO targetLocation = LocationMap.get(entity.getMemberId()); - if (ObjectUtil.isNotEmpty(targetLocation)) { - RecentPageResVo.LocationVo locationVo = new RecentPageResVo.LocationVo(); - double distance = NumberUtils.getDistance(targetLocation.getLat(), targetLocation.getLon(), selfLocation.getLat(), selfLocation.getLon()); - locationVo.setDistance(distance); - entity.setLocation(locationVo); - } + LocationDO targetLocation = LocationMap.get(entity.getMemberId()); + + RecentPageResVo.LocationVo locationVo = new RecentPageResVo.LocationVo(); + if (ObjectUtil.isEmpty(targetLocation)) { + // entity.setLocation(locationVo); + continue; } + double distance = NumberUtils.getDistance(targetLocation.getLat(), targetLocation.getLon(), selfLocation.getLat(), selfLocation.getLon()); + locationVo.setDistance(distance); + // entity.setLocation(locationVo); } } @@ -547,7 +581,7 @@ public class RecentServiceImpl implements RecentService { RecentPageResVo.LocationVo locationVo = new RecentPageResVo.LocationVo(); double distance = NumberUtils.getDistance(targetLocation.getLat(), targetLocation.getLon(), selfLocation.getLat(), selfLocation.getLon()); locationVo.setDistance(distance); - detail.setLocation(locationVo); + // detail.setLocation(locationVo); } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 771d415..0a7ff71 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -142,7 +142,10 @@ public class MemberUserServiceImpl implements MemberUserService { @Override public void updateUserLogin(Long id, String loginIp) { memberUserMapper.updateById(new MemberUserDO().setId(id) - .setLoginIp(loginIp).setLoginDate(LocalDateTime.now())); + .setLoginIp(loginIp) + .setLoginDate(LocalDateTime.now()) + .setAppRefreshDate(LocalDateTime.now()) + ); } @Override diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/LocationMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/LocationMapper.xml new file mode 100644 index 0000000..9f36641 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/LocationMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/RecentMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/RecentMapper.xml index 77f33b3..be93b49 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/RecentMapper.xml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/RecentMapper.xml @@ -1,7 +1,148 @@ + + select a.id, + a.member_id, + a.cover_pic, + a.cover_video, + a.description, + a.issue_long, + a.issue_lat, + a.issue_province, + a.issue_city, + a.issue_district, + a.issue_address, + a.creator, + a.create_time, + a.updater, + a.update_time, + a.deleted, + a.tenant_id + + + a.deleted = 0 + + and a.member_id = #{dto.memberId} + + + and a.description like concat('%', #{dto.description}, '%') + + + and a.issue_province like concat('%', #{dto.issueProvince}, '%') + + + and a.issue_city like concat('%', #{dto.issueCity}, '%') + + + and a.issue_district like concat('%', #{dto.issueDistrict}, '%') + + + and a.issue_address like concat('%', #{dto.issueAddress}, '%') + + + and a.createTime between #{dto.createTime[0]} and #{dto.createTime[1]} + + + + + diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index 68d7666..503802e 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -228,7 +228,8 @@ pf4j: pluginsDir: ${user.home}/plugins # 插件目录 chat: - base-url: http://127.0.0.1:8888 + # base-url: http://127.0.0.1:8888 + base-url: http://chatsever.zianxin.com app-key: 4H2HkBLygMsxaQKO app-secret: JIizm84av3TK5xaQdsng7X5mqLPjbeQ0 diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 80396ce..27150ee 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -250,7 +250,8 @@ pf4j: pluginsDir: ../plugins chat: - base-url: http://127.0.0.1:8888 + # base-url: http://127.0.0.1:8888 + base-url: http://chatsever.zianxin.com app-key: 4H2HkBLygMsxaQKO app-secret: JIizm84av3TK5xaQdsng7X5mqLPjbeQ0 diff --git a/yudao-server/src/main/resources/application-prod.yaml b/yudao-server/src/main/resources/application-prod.yaml index c5e533d..4697bcb 100644 --- a/yudao-server/src/main/resources/application-prod.yaml +++ b/yudao-server/src/main/resources/application-prod.yaml @@ -240,7 +240,8 @@ justauth: timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 chat: - base-url: http://127.0.0.1:8888 + # base-url: http://127.0.0.1:8888 + base-url: http://chatsever.zianxin.com app-key: 4H2HkBLygMsxaQKO app-secret: JIizm84av3TK5xaQdsng7X5mqLPjbeQ0