From dc6c24eb4873f5262a3cb013d0f5e4caf133b0b1 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 2 Dec 2025 10:13:50 +0800 Subject: [PATCH] 111 --- .../member/enums/MemberRecentOperateEnum.java | 2 +- .../admin/recent/vo/RecentPageResVo.java | 13 +++-- .../app/photo/vo/AppUploadReqVo.java | 2 +- .../app/recent/AppRecentController.java | 11 ++++ .../app/user/AppMemberUserController.java | 1 + .../member/dal/mysql/photo/PhotoMapper.java | 3 +- .../service/location/LocationService.java | 10 ++-- .../service/location/LocationServiceImpl.java | 29 ++++++----- .../service/photo/PhotoServiceImpl.java | 17 ++++++ .../member/service/recent/RecentService.java | 6 +++ .../service/recent/RecentServiceImpl.java | 52 ++++++++++++------- .../main/resources/mapper/OperationMapper.xml | 17 +++--- .../src/main/resources/application-local.yaml | 4 +- 13 files changed, 111 insertions(+), 56 deletions(-) diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentOperateEnum.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentOperateEnum.java index ca1bb0d..6f45528 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentOperateEnum.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/MemberRecentOperateEnum.java @@ -27,7 +27,7 @@ public enum MemberRecentOperateEnum { */ RECENT_SHIELD("3", "屏蔽"), /** - * 用户-收藏 + * 用户-收藏(个人中心我喜欢) */ MEMBER_COLLECT("4", "收藏"), /** 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 4a692c1..7566777 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 @@ -55,17 +55,16 @@ public class RecentPageResVo extends RecentDO { @Schema(description = "城市") private String memberCity; + @Schema(description = "经度") + private Double memberLat; + + @Schema(description = "纬度") + private Double memberLng; + @Schema(description = "最近登录时间") private LocalDateTime appRefreshDate; } - @Data - public static class LocationVo { - - @Schema(description = "距离(千米)") - private Double distance; - } - @Data public static class OperationTotal { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java index 62233ff..e73a294 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java @@ -17,7 +17,7 @@ public class AppUploadReqVo { private String bizType; @Schema(description = "资源类型") - @NotEmpty(message = "上传途径不能为空") + @NotNull(message = "上传途径不能为空") private PhotoResourceTypeEnum resourceType; @Schema(description = "资源地址") 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 9f70506..a3b07d8 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,10 @@ 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.controller.app.user.vo.AppMemberUserInfoRespVO; +import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; 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; @@ -103,6 +107,13 @@ public class AppRecentController { return success(recentService.evaluatePage(dto)); } + @GetMapping("/getById") + @Operation(summary = "根据id查询用户信息") + public CommonResult getUserInfoById(@RequestParam("id") Long id) { + RecentPageResVo user = recentService.getRecentUserByUserId(id); + return success(user); + } + @GetMapping("/total") @Operation(summary = "朋友圈我喜欢的、喜欢我的等总数统计") public CommonResult total() { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java index eda5358..6afc458 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.service.level.MemberLevelService; +import cn.iocoder.yudao.module.member.service.recent.RecentService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/photo/PhotoMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/photo/PhotoMapper.java index 45104dc..9fc15b4 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/photo/PhotoMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/photo/PhotoMapper.java @@ -27,7 +27,8 @@ public interface PhotoMapper extends BaseMapperX { .eqIfPresent(PhotoDO::getIssueDistrict, reqVO.getIssueDistrict()) .eqIfPresent(PhotoDO::getIssueAddress, reqVO.getIssueAddress()) .betweenIfPresent(PhotoDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(PhotoDO::getId)); + .orderByAsc(PhotoDO::getCreateTime) + .orderByAsc(PhotoDO::getId)); } } \ 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/location/LocationService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/location/LocationService.java index 106d2ae..8de5d2f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/location/LocationService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/location/LocationService.java @@ -33,11 +33,6 @@ public interface LocationService { */ LocationDO getLocation(Long id); - /** - * 获得用户最后位置记录 - */ - LocationDO getLastByMemberId(Long memberId); - /** * 获得当前用户位置记录 */ @@ -48,6 +43,11 @@ public interface LocationService { */ List getLastLocationList(List memberIds); + /** + * 获得用户最后位置记录 + */ + LocationDO getLastByMemberId(Long memberId); + /** * 获得用户位置记录分页 */ 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 b3d983e..3eb34f7 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 @@ -22,6 +22,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.member.dal.mysql.location.LocationMapper; +import java.lang.reflect.Array; +import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -96,19 +98,6 @@ public class LocationServiceImpl implements LocationService { return locationMapper.selectById(id); } - /** - * 获得用户最后位置记录 - */ - @Override - public LocationDO getLastByMemberId(Long memberId) { - return locationMapper.selectOne(new LambdaQueryWrapperX() - .eq(LocationDO::getMemberId, memberId) - .orderByDesc(LocationDO::getCreateTime) - .orderByDesc(LocationDO::getId) - .last(" LIMIT 1") - ); - } - /** * 获得当前用户位置记录 */ @@ -133,6 +122,20 @@ public class LocationServiceImpl implements LocationService { return locationMapper.getLastLocationList(memberIds); } + /** + * 获得用户最后位置记录 + */ + @Override + public LocationDO getLastByMemberId(Long memberId) { + if (ObjectUtil.isEmpty(memberId)) return null; + List memberIds = Arrays.asList(memberId); + List locationList = locationMapper.getLastLocationList(memberIds); + if (ObjectUtil.isEmpty(locationList)) { + return null; + } + return locationList.get(0); + } + @Override public PageResult getLocationPage(LocationPageReqVO pageReqVO) { return locationMapper.selectPage(pageReqVO); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoServiceImpl.java index ef89f3c..2085709 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoServiceImpl.java @@ -2,12 +2,14 @@ package cn.iocoder.yudao.module.member.service.photo; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.member.api.thirdauth.ThirdAuthVo; import cn.iocoder.yudao.module.member.controller.app.photo.vo.AppCountResVo; import cn.iocoder.yudao.module.member.controller.app.photo.vo.AppUploadReqVo; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.enums.MemberErrorCode; import cn.iocoder.yudao.module.member.enums.photo.PhotoBizTypeEnum; import cn.iocoder.yudao.module.member.enums.photo.PhotoResourceTypeEnum; +import cn.iocoder.yudao.module.member.service.thirdauth.ThirdAuthService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import org.springframework.stereotype.Service; @@ -22,6 +24,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.member.dal.mysql.photo.PhotoMapper; +import java.util.concurrent.CompletableFuture; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -36,6 +40,8 @@ public class PhotoServiceImpl implements PhotoService { @Resource private MemberUserService memberUserService; + @Resource + private ThirdAuthService thirdAuthService; @Override public Long createPhoto(PhotoSaveReqVO createReqVO) { @@ -51,6 +57,17 @@ public class PhotoServiceImpl implements PhotoService { */ @Override public Long appUpload(AppUploadReqVo dto) { + // 校验图片 + if (ObjectUtil.equals(dto.getResourceType(), PhotoResourceTypeEnum.IMAGE)) { + ThirdAuthVo textRes = thirdAuthService.imageAuditSync(dto.getAddress()); + // 处理文字 + if (ObjectUtil.isEmpty(textRes)) { + throw exception(MemberErrorCode.CHECK_TEXT_NOT_PASS, "未知错误"); + } + if (textRes.isError() && ObjectUtil.isNotEmpty(textRes.getFirstErrorMsg())) { + throw exception(MemberErrorCode.CHECK_TEXT_NOT_PASS, textRes.getFirstErrorMsg()); + } + } PhotoDO photo = BeanUtils.toBean(dto, PhotoDO.class); photoMapper.insert(photo); return photo.getId(); 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 6036c82..90659d1 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 @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentViewReco import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; /** * 朋友圈 Service 接口 @@ -85,6 +86,11 @@ public interface RecentService { */ PageResult evaluatePage(@Valid AppRecentLikeReqVo dto); + /** + * 查询朋友圈用户 + */ + RecentPageResVo getRecentUserByUserId(Long userId); + /** * 朋友圈我喜欢的、喜欢我的等总数统计 */ 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 f59024d..c45e2d6 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 @@ -415,6 +415,21 @@ public class RecentServiceImpl implements RecentService { return new PageResult<>(resultList, pageList.getTotal()); } + /** + * 查询朋友圈用户 + */ + @Override + public RecentPageResVo getRecentUserByUserId(Long userId) { + RecentPageResVo result = new RecentPageResVo(); + result.setMemberId(userId); + // 添加用户信息 + convertRecentPageResVoSetupMember(result); + // 查询用户最新的位置 + LocationDO currentUserLastLocation = locationService.getCurrentUserLastLocation(); + convertRecentPageResVoSetupLocation(result, currentUserLastLocation); + return result; + } + /** * 朋友圈我喜欢的、喜欢我的等总数统计 */ @@ -456,6 +471,8 @@ public class RecentServiceImpl implements RecentService { memberVO.setMemberWeight(member.getWeight()); memberVO.setMemberSex(member.getSex()); memberVO.setAppRefreshDate(member.getAppRefreshDate()); + memberVO.setMemberLat(member.getLat()); + memberVO.setMemberLng(member.getLng()); entity.setMember(memberVO); } } @@ -501,6 +518,12 @@ public class RecentServiceImpl implements RecentService { memberVO.setMemberNickname(member.getNickname()); memberVO.setMemberAge(member.getAge()); memberVO.setMemberOcc(member.getOcc()); + memberVO.setMemberHeight(member.getHeight()); + memberVO.setMemberWeight(member.getWeight()); + memberVO.setMemberSex(member.getSex()); + memberVO.setAppRefreshDate(member.getAppRefreshDate()); + memberVO.setMemberLat(member.getLat()); + memberVO.setMemberLng(member.getLng()); detail.setMember(memberVO); } } @@ -558,32 +581,25 @@ public class RecentServiceImpl implements RecentService { */ private void convertRecentPageResVoSetupLocation(List list, LocationDO selfLocation) { if (ObjectUtil.isEmpty(list)) return; - 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::getMemberId); - if (ObjectUtil.isEmpty(LocationMap)) return; for (RecentPageResVo entity : list) { - LocationDO targetLocation = LocationMap.get(entity.getMemberId()); - - RecentPageResVo.LocationVo locationVo = new RecentPageResVo.LocationVo(); - if (ObjectUtil.isEmpty(targetLocation)) { - // entity.setLocation(locationVo); + RecentPageResVo.MemberVo targetLocation = entity.getMember(); + if (ObjectUtil.isAllNotEmpty(targetLocation.getMemberLat(), targetLocation.getMemberLng())) { continue; } - double distance = NumberUtils.getDistance(targetLocation.getLat(), targetLocation.getLon(), selfLocation.getLat(), selfLocation.getLon()); - locationVo.setDistance(distance); - // entity.setLocation(locationVo); + double distance = NumberUtils.getDistance(targetLocation.getMemberLat(), targetLocation.getMemberLng(), selfLocation.getLat(), selfLocation.getLon()); + entity.setDistance(distance); } } + /** + * 为RecentPageResVo设置Location信息 + */ private void convertRecentPageResVoSetupLocation(RecentPageResVo detail, LocationDO selfLocation) { if (ObjectUtil.isEmpty(detail)) return; - LocationDO targetLocation = locationService.getLastByMemberId(detail.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); - // detail.setLocation(locationVo); + RecentPageResVo.MemberVo member = detail.getMember(); + if (ObjectUtil.isAllNotEmpty(member.getMemberLng(), member.getMemberLat())) { + double distance = NumberUtils.getDistance(member.getMemberLat(), member.getMemberLng(), selfLocation.getLat(), selfLocation.getLon()); + detail.setDistance(distance); } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml index 39f295a..48b293e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/OperationMapper.xml @@ -44,17 +44,18 @@ diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 912c1a2..140570d 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -250,8 +250,8 @@ pf4j: pluginsDir: ../plugins chat: - base-url: http://127.0.0.1:8888 - # base-url: http://chatsever.zianxin.com + # base-url: http://127.0.0.1:8888 + base-url: http://chatsever.zianxin.com app-key: 4H2HkBLygMsxaQKO app-secret: JIizm84av3TK5xaQdsng7X5mqLPjbeQ0