diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/banner/BannerPositionEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/banner/BannerPositionEnum.java index 0d0db4e..cd0e5bd 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/banner/BannerPositionEnum.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/banner/BannerPositionEnum.java @@ -19,7 +19,9 @@ public enum BannerPositionEnum implements ArrayValuable { SECKILL_POSITION(2, "秒杀活动页"), COMBINATION_POSITION(3, "砍价活动页"), DISCOUNT_POSITION(4, "限时折扣页"), - REWARD_POSITION(5, "满减送页"); + REWARD_POSITION(5, "满减送页"), + DYNAMIC(6, "动态页面"), + ; public static final Integer[] ARRAYS = Arrays.stream(values()).map(BannerPositionEnum::getPosition).toArray(Integer[]::new); diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java index 3b7d18b..1edc2dc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigBaseVO.java @@ -48,11 +48,15 @@ public class MemberConfigBaseVO { @NotNull(message = "vip查看微信次数不能为空") @Schema(description = "vip查看微信次数") private Integer vipLookWechtCout; - + @NotNull(message = "礼物提现比例不能为空") @Schema(description = "礼物提现比例") private Integer giftCashRatio; + @NotNull(message = "新人入驻天数判断不能为空") + @Schema(description = "新人入驻天数判断") + private Integer newPersonDays; + @Schema(description = "举报类型") private List reportTypeList; 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 8790b8b..d01add1 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 @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.controller.admin.recent.vo; import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO; +import cn.iocoder.yudao.module.member.service.photo.BO.MemberPhotoTotalExtBO; import cn.iocoder.yudao.module.member.service.user.BO.MemberExtBO; import cn.iocoder.yudao.module.member.service.user.BO.MemberTagExtBO; import io.swagger.v3.oas.annotations.media.Schema; @@ -29,6 +30,9 @@ public class RecentPageResVo extends RecentDO { @Schema(description = "用户tag") private List memberTagList; + @Schema(description = "用户相册") + private MemberPhotoTotalExtBO memberPhotoTotal; + @Schema(description = "用户相册") private List MemberPhotoList; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java index 17c49d5..523751f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/config/MemberConfigDO.java @@ -84,6 +84,12 @@ public class MemberConfigDO extends BaseDO { */ private Integer giftCashRatio; + /** + * 新人入驻天数判断 + * 入驻未满`newPersonDays`都是新人用户 + */ + private Integer newPersonDays; + /** * 举报类型 */ 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 13b1f90..369f3ca 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 @@ -228,4 +228,28 @@ public class MemberUserDO extends TenantBaseDO { return String.valueOf(LocalDateTime.now().getYear() - birthday.getYear()); } + public String getwechatMaskString() { + String str = this.wechatNum; + if (str == null || str.length() <= 2) { + return "**"; + } + char first = str.charAt(0); + char last = str.charAt(str.length() - 1); + int middleLength = str.length() - 2; + StringBuilder masked = new StringBuilder(); + masked.append(first); + for (int i = 0; i < middleLength; i++) { + masked.append('*'); + } + masked.append(last); + return masked.toString(); + } + + /** + * 是否是新用户 + */ + public boolean isNewPerson(int newPersonDays) { + return this.getCreateTime().plusDays(newPersonDays).isAfter(LocalDateTime.now()); + } + } 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 578e0bb..9636759 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 @@ -3,10 +3,13 @@ package cn.iocoder.yudao.module.member.dal.mysql.photo; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentPageResVo; import cn.iocoder.yudao.module.member.dal.dataobject.photo.PhotoDO; +import cn.iocoder.yudao.module.member.service.photo.BO.MemberPhotoTotalExtBO; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.member.controller.admin.photo.vo.*; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 用户相册 Mapper @@ -31,4 +34,5 @@ public interface PhotoMapper extends BaseMapperX { .orderByAsc(PhotoDO::getId)); } + List getMemberPhotoExtList(@Param("memberIdList") List memberIdList); } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckNewPersonTagJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckNewPersonTagJob.java new file mode 100644 index 0000000..b54d459 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckNewPersonTagJob.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.member.job.member; + +import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; +import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; +import cn.iocoder.yudao.module.member.service.user.MemberRecentTagService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 清理过期过期的新用户 + */ +@Component +@Slf4j +public class CheckNewPersonTagJob implements JobHandler { + + @Resource + private MemberRecentTagService memberRecentTagService; + + @Override + @TenantJob + public String execute(String param) throws Exception { + // 清理过期的新用户tag + int newPersonCount = memberRecentTagService.checkNewPersonTagJob(); + return String.format("清理了过期的 新用户tag记录 %s 个", newPersonCount); + } + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java index 54d6eaf..b05bb3d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/member/CheckVipJob.java @@ -27,7 +27,7 @@ public class CheckVipJob implements JobHandler { // 清理了过期的vip int vipCount = openTypeService.checkVip(); // 清理了过期的vip tag - int vipTagCount = memberRecentTagService.checkVipTag(); + int vipTagCount = memberRecentTagService.checkVipTagJob(); return String.format("清理了过期的 vip记录 %s 个\n清理过期的 vip tag记录 %s 个\n", vipCount, vipTagCount); } 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 c48cf7e..5bdfa93 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 @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateR 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; +import cn.iocoder.yudao.module.member.service.user.MemberRecentTagService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.system.api.logger.LoginLogApi; import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; @@ -56,6 +57,9 @@ public class MemberAuthServiceImpl implements MemberAuthService { @Resource private MemberUserService userService; + @Resource + private MemberRecentTagService memberRecentTagService; + @Resource private SmsCodeApi smsCodeApi; @Resource @@ -252,6 +256,8 @@ public class MemberAuthServiceImpl implements MemberAuthService { serviceToken.setChatToken(BeanUtils.toBean(login, AppAuthLoginRespVO.ChatToken.class)); } } + // 更新朋友圈用户新人tag + memberRecentTagService.createOrUpdateNewPersonTag(user.getId()); return serviceToken; } @@ -274,6 +280,9 @@ public class MemberAuthServiceImpl implements MemberAuthService { } } + // 更新朋友圈用户新人tag + memberRecentTagService.createOrUpdateNewPersonTag(user.getId()); + return serviceToken; } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/BO/MemberPhotoTotalExtBO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/BO/MemberPhotoTotalExtBO.java new file mode 100644 index 0000000..a1c702d --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/BO/MemberPhotoTotalExtBO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.member.service.photo.BO; + +import lombok.Data; + +@Data +public class MemberPhotoTotalExtBO { + + /** + * 用户ID + */ + private Long memberId; + + /** + * 图片视频总数 + */ + private Long total = 0L; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoService.java index af86dab..bd1919c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoService.java @@ -3,11 +3,11 @@ package cn.iocoder.yudao.module.member.service.photo; import javax.validation.*; import cn.iocoder.yudao.module.member.controller.admin.photo.vo.*; -import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentPageResVo; 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.photo.PhotoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.member.service.photo.BO.MemberPhotoTotalExtBO; import java.util.List; @@ -60,4 +60,9 @@ public interface PhotoService { * 获得用户相册分页 */ PageResult getPhotoPage(PhotoPageReqVO pageReqVO); + + /** + * 获得用户相册列表 + */ + List getMemberPhotoTotalExtList(List memberId); } \ 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/photo/PhotoServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/photo/PhotoServiceImpl.java index 9657a53..310c2e5 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 @@ -10,6 +10,7 @@ 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.client.service.ThirdAuthService; +import cn.iocoder.yudao.module.member.service.photo.BO.MemberPhotoTotalExtBO; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import org.springframework.stereotype.Service; @@ -155,4 +156,12 @@ public class PhotoServiceImpl implements PhotoService { countResVo.setTotal(imageCount + videoCount); return countResVo; } + + /** + * 获得用户相册列表 + */ + @Override + public List getMemberPhotoTotalExtList(List memberId) { + return photoMapper.getMemberPhotoExtList(memberId); + } } \ 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/recent/RecentServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/recent/RecentServiceImpl.java index 6f44a77..699a24b 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 @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; 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.admin.recent.vo.*; import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppEvaluateDetailResVo; import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentLikeReqVo; import cn.iocoder.yudao.module.member.controller.app.recent.vo.AppRecentOperateReqVo; @@ -26,6 +27,7 @@ import cn.iocoder.yudao.module.member.service.config.MemberConfigService; import cn.iocoder.yudao.module.member.service.location.LocationService; import cn.iocoder.yudao.module.member.client.service.ThirdAuthService; import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; +import cn.iocoder.yudao.module.member.service.photo.BO.MemberPhotoTotalExtBO; import cn.iocoder.yudao.module.member.service.photo.PhotoService; import cn.iocoder.yudao.module.member.service.user.BO.MemberExtBO; import cn.iocoder.yudao.module.member.service.user.BO.MemberTagExtBO; @@ -46,7 +48,6 @@ import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import cn.iocoder.yudao.module.member.controller.admin.recent.vo.*; import cn.iocoder.yudao.module.member.dal.dataobject.recent.RecentDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -404,6 +405,8 @@ public class RecentServiceImpl implements RecentService { } // 查询用户tag convertRecentPageResVoSetupTag(resultList); + // 设置用户图片/视频数量 + convertRecentPageResVoSetupPhotoExt(resultList); return new PageResult<>(resultList, recentPageList.getTotal()); } @@ -411,8 +414,8 @@ public class RecentServiceImpl implements RecentService { * 我喜欢-分页查询 */ @Override - public PageResult likeItPage(AppRecentLikeReqVo dto) { - PageResult resultPageList = new PageResult<>(); + public PageResult likeItPage(AppRecentLikeReqVo dto) { + PageResult resultPageList = new PageResult<>(); // 查询我喜欢 PageResult pageList = operationMapper.selectPage(dto, new LambdaQueryWrapperX() .eq(OperationDO::getOperatorMemberId, dto.getOperationMemberId()) @@ -423,7 +426,7 @@ public class RecentServiceImpl implements RecentService { ); List list = pageList.getList(); if (ObjectUtil.isEmpty(list)) return resultPageList; - List resultList = BeanUtils.toBean(list, cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO.class); + List resultList = BeanUtils.toBean(list, OperationRespVO.class); // 为OperationRespVO设置Member信息 convertOperationRespVOSetupMember(resultList); convertOperationRespVOSetupTagList(resultList); @@ -436,7 +439,7 @@ public class RecentServiceImpl implements RecentService { * 喜欢我-分页查询 */ @Override - public PageResult likeMePage(AppRecentLikeReqVo dto) { + public PageResult likeMePage(AppRecentLikeReqVo dto) { // 查询我喜欢 PageResult pageList = operationMapper.selectPage(dto, new LambdaQueryWrapperX() .eq(OperationDO::getMemberId, dto.getOperationMemberId()) @@ -447,7 +450,7 @@ public class RecentServiceImpl implements RecentService { ); List list = pageList.getList(); if (ObjectUtil.isEmpty(list)) return new PageResult<>(); - List resultList = BeanUtils.toBean(list, cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO.class); + List resultList = BeanUtils.toBean(list, OperationRespVO.class); // 为OperationRespVO设置Member信息 convertOperationRespVOSetupMember(resultList); convertOperationRespVOSetupTagList(resultList); @@ -469,7 +472,7 @@ public class RecentServiceImpl implements RecentService { ); List list = pageList.getList(); if (ObjectUtil.isEmpty(list)) return new PageResult<>(); - List resultList = BeanUtils.toBean(list, cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO.class); + List resultList = BeanUtils.toBean(list, OperationRespVO.class); // 为OperationRespVO设置Member信息 convertOperationRespVOSetupMember(resultList); convertOperationRespVOSetupTagList(resultList); @@ -507,7 +510,7 @@ public class RecentServiceImpl implements RecentService { * 我的评价 */ @Override - public PageResult evaluatePage(AppRecentLikeReqVo dto) { + public PageResult evaluatePage(AppRecentLikeReqVo dto) { // 我的评价 PageResult pageList = operationMapper.selectPage(dto, new LambdaQueryWrapperX() .eq(OperationDO::getOperatorMemberId, dto.getOperationMemberId()) @@ -518,7 +521,7 @@ public class RecentServiceImpl implements RecentService { ); List list = pageList.getList(); if (ObjectUtil.isEmpty(list)) return new PageResult<>(); - List resultList = BeanUtils.toBean(list, cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO.class); + List resultList = BeanUtils.toBean(list, OperationRespVO.class); // 为OperationRespVO设置Member信息 convertOperationRespVOSetupMember(resultList); @@ -701,26 +704,43 @@ public class RecentServiceImpl implements RecentService { resVo.setMemberPhotoList(memberPhotoList); } + private void convertRecentPageResVoSetupPhotoExt(List list) { + if (ObjectUtil.isEmpty(list)) return; + List memberIds = list.stream().map(RecentPageResVo::getMemberId).collect(Collectors.toList()); + List photoList = photoService.getMemberPhotoTotalExtList(memberIds); + Map memberMap = IterUtil.toMap(photoList, MemberPhotoTotalExtBO::getMemberId); + if (ObjectUtil.isNotEmpty(memberMap)) { + for (RecentPageResVo entity : list) { + MemberPhotoTotalExtBO member = memberMap.get(entity.getMemberId()); + if (ObjectUtil.isEmpty(member)) { + entity.setMemberPhotoTotal(new MemberPhotoTotalExtBO()); + continue; + } + entity.setMemberPhotoTotal(member); + } + } + } + /** * 为OperationRespVO设置Member信息 */ - private void convertOperationRespVOSetupMember(List list) { + private void convertOperationRespVOSetupMember(List list) { if (ObjectUtil.isEmpty(list)) return; - List memberIds = list.stream().map(cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO::getMemberId).collect(Collectors.toList()); + List memberIds = list.stream().map(OperationRespVO::getMemberId).collect(Collectors.toList()); List memberList = memberUserService.getUserExtList(memberIds); Map memberMap = IterUtil.toMap(memberList, MemberExtBO::getMemberId); - for (cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO entity : list) { + for (OperationRespVO entity : list) { MemberExtBO member = memberMap.get(entity.getMemberId()); entity.setMember(member); } } - private void convertOperationRespVOSetupTagList(List list) { + private void convertOperationRespVOSetupTagList(List list) { if (ObjectUtil.isEmpty(list)) return; - List memberIds = list.stream().map(cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO::getMemberId).collect(Collectors.toList()); + List memberIds = list.stream().map(OperationRespVO::getMemberId).collect(Collectors.toList()); List memberList = memberRecentTagService.getUserTagExtList(memberIds); Map> memberMap = IterUtil.toListMap(memberList, MemberTagExtBO::getMemberId); - for (cn.iocoder.yudao.module.member.controller.admin.recent.vo.OperationRespVO entity : list) { + for (OperationRespVO entity : list) { List tags = memberMap.get(entity.getMemberId()); entity.setMemberTagList(tags); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/BO/MemberExtBO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/BO/MemberExtBO.java index 87fde98..7740403 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/BO/MemberExtBO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/BO/MemberExtBO.java @@ -26,6 +26,9 @@ public class MemberExtBO { @Schema(description = "用户职业") private String memberOcc; + @Schema(description = "微信") + private String wechatNum; + @Schema(description = "身高(cm)") private Double memberHeight; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java index a6229f1..bcd6b5f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagService.java @@ -27,8 +27,18 @@ public interface MemberRecentTagService { List getUserTagExtList(Long memberId); + /** + * 创建或者更新新人tag + */ + boolean createOrUpdateNewPersonTag(Long memberId); + /** * 清理了过期的vip tag */ - int checkVipTag(); + int checkVipTagJob(); + + /** + * 清理过期的新用户tag + */ + int checkNewPersonTagJob(); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java index 152a3a7..a5b1db3 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentTagServiceImp.java @@ -3,15 +3,20 @@ package cn.iocoder.yudao.module.member.service.user; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.mysql.opentype.OpenTypeMapper; import cn.iocoder.yudao.module.member.dal.mysql.opentype.OpenTypeUserMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberRecentTagMapper; +import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.enums.tag.MemberRecentTagEnum; +import cn.iocoder.yudao.module.member.service.config.MemberConfigService; import cn.iocoder.yudao.module.member.service.opentype.BO.OpenTypeExtBO; import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; import cn.iocoder.yudao.module.member.service.user.BO.MemberTagExtBO; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -27,11 +32,15 @@ import java.util.stream.Collectors; @Slf4j public class MemberRecentTagServiceImp implements MemberRecentTagService { + @Resource + private MemberUserMapper memberUserMapper; @Resource private MemberRecentTagMapper memberRecentTagMapper; @Resource private OpenTypeService openTypeService; + @Resource + private MemberConfigService memberConfigService; /** * 设置用户真人认证tag @@ -89,11 +98,54 @@ public class MemberRecentTagServiceImp implements MemberRecentTagService { return getUserTagExtList(Arrays.asList(memberId)); } + /** + * 创建或者更新新人tag + */ + @Override + public boolean createOrUpdateNewPersonTag(Long memberId) { + // 查询用户 + MemberUserDO memberUser = memberUserMapper.selectById(memberId); + if (ObjectUtil.isEmpty(memberUser)) return false; + // 查询配置 + MemberConfigDO config = memberConfigService.getConfig(); + Integer newPersonDays = config.getNewPersonDays(); + if (ObjectUtil.isEmpty(newPersonDays)) newPersonDays = 15; + // 是否是新人 + boolean newPerson = memberUser.isNewPerson(newPersonDays); + + MemberRecentTagDO tag = memberRecentTagMapper.selectOne(new LambdaQueryWrapperX() + .eq(MemberRecentTagDO::getMemberId, memberId) + .eq(MemberRecentTagDO::getTagBizType, MemberRecentTagEnum.NEW_PERSON.getType()) + ); + + // 是新人 + if (newPerson) { + if (ObjectUtil.isEmpty(tag)) { + MemberRecentTagDO obj = new MemberRecentTagDO(); + obj.setTagBizId(null); + obj.setMemberId(memberId); + obj.setTagBizType(MemberRecentTagEnum.NEW_PERSON.getType()); + obj.setTagTitle(MemberRecentTagEnum.NEW_PERSON.getDescription()); + memberRecentTagMapper.insert(obj); + return true; + } + return false; + } + // 不是新人 + else { + if (ObjectUtil.isNotEmpty(tag)) { + memberRecentTagMapper.deleteById(tag.getId()); + return true; + } + return false; + } + } + /** * 清理了过期的vip tag */ @Override - public int checkVipTag() { + public int checkVipTagJob() { List vipTagList = memberRecentTagMapper.selectList(new LambdaQueryWrapperX() .eq(MemberRecentTagDO::getTagBizType, MemberRecentTagEnum.VIP.getType()) ); @@ -113,4 +165,27 @@ public class MemberRecentTagServiceImp implements MemberRecentTagService { ); return deleteCount; } + + /** + * 清理过期的新用户tag + */ + @Override + public int checkNewPersonTagJob() { + List newPersonTagList = memberRecentTagMapper.selectList(new LambdaQueryWrapperX() + .eq(MemberRecentTagDO::getTagBizType, MemberRecentTagEnum.NEW_PERSON.getType()) + ); + if (ObjectUtil.isEmpty(newPersonTagList)) return 0; + + int delCount = 0; + + for (MemberRecentTagDO item : newPersonTagList) { + boolean isDelete = createOrUpdateNewPersonTag(item.getMemberId()); + if(isDelete){ + delCount++; + } + } + + return delCount; + } + } 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 4983eb9..7ac40c0 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 @@ -46,7 +46,6 @@ import javax.validation.Valid; import java.time.LocalDateTime; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -81,6 +80,9 @@ public class MemberUserServiceImpl implements MemberUserService { @Resource private MemberUserProducer memberUserProducer; + @Resource + private MemberRecentTagService memberRecentTagService; + @Resource private ChatApi chatApi; @Resource @@ -184,6 +186,9 @@ public class MemberUserServiceImpl implements MemberUserService { entity.setAppRefreshDate(member.getAppRefreshDate()); entity.setMemberLat(member.getLat()); entity.setMemberLng(member.getLng()); + if (ObjectUtil.isNotEmpty(member.getWeight())) { + entity.setWechatNum(member.getwechatMaskString()); + } return entity; }).collect(Collectors.toList()); } @@ -341,6 +346,9 @@ public class MemberUserServiceImpl implements MemberUserService { }).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList()); memberRecentTagMapper.insert(tags); } + // 更新用户新人tag + memberRecentTagService.createOrUpdateNewPersonTag(updateReqVO.getId()); + memberUserMapper.updateById(updateObj); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/PhotoMapper.xml b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/PhotoMapper.xml new file mode 100644 index 0000000..0542456 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/mapper/PhotoMapper.xml @@ -0,0 +1,20 @@ + + + + + + +