diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java index a549d46..5867408 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/tag/MemberRecentTagEnum.java @@ -17,6 +17,7 @@ public enum MemberRecentTagEnum { TRUE_PERSON_AUTH("1", "真人认证"), NEW_PERSON("2", "新人"), + HOME_RECOMMEND("3", "首页推荐"), ; private final String type; private final String description; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberRecentCfgController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberRecentCfgController.java new file mode 100644 index 0000000..9980e8e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberRecentCfgController.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.member.controller.admin.user; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.member.controller.app.user.vo.recentcfg.MemberRecentCfgReqVo; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentCfgDO; +import cn.iocoder.yudao.module.member.service.user.MemberRecentCfgService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 用户朋友圈配置") +@RestController +@RequestMapping("/member/recent-cfg") +@Validated +@Slf4j +public class MemberRecentCfgController { + + @Resource + private MemberRecentCfgService recentCfgService; + + @PostMapping("/create-or-update") + @Operation(summary = "创建或更新配置") + public CommonResult createOrUpdate(@RequestBody MemberRecentCfgReqVo dto) { + return success(recentCfgService.createOrUpdate(dto)); + } + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java index 172a5e2..ed5fa73 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.controller.admin.user; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.member.controller.admin.user.vo.*; @@ -8,6 +9,7 @@ import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentCfgDO; 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.user.MemberRecentTagMapper; @@ -16,6 +18,7 @@ import cn.iocoder.yudao.module.member.service.group.MemberGroupService; import cn.iocoder.yudao.module.member.service.level.MemberLevelService; import cn.iocoder.yudao.module.member.service.point.MemberPointRecordService; import cn.iocoder.yudao.module.member.service.tag.MemberTagService; +import cn.iocoder.yudao.module.member.service.user.MemberRecentCfgService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -55,6 +58,8 @@ public class MemberUserController { @Resource private MemberRecentTagMapper memberRecentTagMapper; + @Resource + private MemberRecentCfgService memberRecentCfgService; @PutMapping("/update") @Operation(summary = "更新会员用户") @@ -87,7 +92,21 @@ public class MemberUserController { @PreAuthorize("@ss.hasPermission('member:user:query')") public CommonResult getUser(@RequestParam("id") Long id) { MemberUserDO user = memberUserService.getUser(id); - return success(MemberUserConvert.INSTANCE.convert03(user)); + MemberUserRespVO result = MemberUserConvert.INSTANCE.convert03(user); + // 查询用户tag + if (ObjectUtil.isNotEmpty(result)) { + List memberRecentTags = memberRecentTagMapper.getByMemberId(result.getId()); + if (ObjectUtil.isNotEmpty(memberRecentTags)) { + List tags = memberRecentTags.stream().map(v -> { + MemberUserRespVO.MemberTag entity = new MemberUserRespVO.MemberTag(); + entity.setTagBizType(v.getTagBizType()); + entity.setTagTitle(v.getTagTitle()); + return entity; + }).collect(Collectors.toList()); + result.setMemberTagList(tags); + } + } + return success(result); } @GetMapping("/page") @@ -111,7 +130,9 @@ public class MemberUserController { List groups = memberGroupService.getGroupList(convertSet(pageResult.getList(), MemberUserDO::getGroupId)); // 处理用户朋友圈的TAG List memberRecentTags = memberRecentTagMapper.getByIds(convertSet(pageResult.getList(), MemberUserDO::getId)); - return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags,memberRecentTags, levels, groups)); + // 查询用户配置 + List memberCfgList = memberRecentCfgService.getByMemberIds(convertSet(pageResult.getList(), MemberUserDO::getId)); + return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, memberRecentTags, levels, groups, memberCfgList)); } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java index fe8bd87..74423e1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.controller.admin.user.vo; import cn.iocoder.yudao.module.member.controller.admin.recent.vo.RecentPageResVo; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentCfgDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -53,6 +54,9 @@ public class MemberUserRespVO extends MemberUserBaseVO { @Schema(description = "用户tag") private List memberTagList; + @Schema(description = "朋友圈相关配置") + private MemberRecentCfgDO recentCfg; + @Data public static class MemberTag { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberRecentCfgController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberRecentCfgController.java index 9f95cac..90089ee 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberRecentCfgController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberRecentCfgController.java @@ -27,7 +27,7 @@ public class AppMemberRecentCfgController { @PostMapping("/create-or-update") @Operation(summary = "创建或更新配置") - public CommonResult getUserInfo(@RequestBody MemberRecentCfgReqVo dto) { + public CommonResult createOrUpdate(@RequestBody MemberRecentCfgReqVo dto) { dto.setMemberId(getLoginUserId()); return success(recentCfgService.createOrUpdate(dto)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java index 668653a..0630b49 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/recentcfg/MemberRecentCfgReqVo.java @@ -16,6 +16,10 @@ public class MemberRecentCfgReqVo { @Schema(description = "用户id") private Long memberId; + @NotNull(message = "是否推送不能为空") + @Schema(description = "是否推送") + private Boolean isPush; + @NotNull(message = "首页隐身不能为空") @Schema(description = "首页隐身") private Boolean homeHide; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java index 1d8baa7..098f76d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.member.convert.address.AddressConvert; import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO; import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; import cn.iocoder.yudao.module.member.dal.dataobject.tag.MemberTagDO; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentCfgDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import org.mapstruct.Mapper; @@ -54,18 +55,29 @@ public interface MemberUserConvert { List tags, List memberRecentTags, List levels, - List groups) { + List groups, + List memberCfgList + ) { PageResult result = convertPage(pageResult); // 处理关联数据 Map tagMap = convertMap(tags, MemberTagDO::getId, MemberTagDO::getName); Map levelMap = convertMap(levels, MemberLevelDO::getId, MemberLevelDO::getName); Map groupMap = convertMap(groups, MemberGroupDO::getId, MemberGroupDO::getName); + Map memberCfgMap = convertMap(memberCfgList, MemberRecentCfgDO::getMemberId); // 填充关联数据 result.getList().forEach(user -> { user.setTagNames(convertList(user.getTagIds(), tagMap::get)); user.setLevelName(levelMap.get(user.getLevelId())); user.setGroupName(groupMap.get(user.getGroupId())); user.setMemberTagList(new ArrayList<>()); + + MemberRecentCfgDO cfg = memberCfgMap.get(user.getId()); + if (ObjectUtil.isEmpty(cfg)) { + user.setRecentCfg(MemberRecentCfgDO.builder().isPush(false).homeHide(false).privacySecure(false).shortNote(false).build()); + } else { + user.setRecentCfg(cfg); + } + // 处理朋友圈TAG List targetTags = memberRecentTags.stream().filter(v -> ObjectUtil.equals(v.getMemberId(), user.getId())).collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(targetTags)) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java index 0346d5a..4714e5a 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberRecentCfgDO.java @@ -30,6 +30,11 @@ public class MemberRecentCfgDO extends BaseDO { */ private Long memberId; + /** + * 推送开关 + */ + private Boolean isPush; + /** * 首页隐身 */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberRecentTagMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberRecentTagMapper.java index ac808d9..4a1ed8c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberRecentTagMapper.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberRecentTagMapper.java @@ -5,8 +5,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentTagDO; import org.apache.ibatis.annotations.Mapper; +import java.util.Collection; import java.util.List; -import java.util.Set; /** * 朋友圈用户tag Mapper @@ -14,10 +14,16 @@ import java.util.Set; @Mapper public interface MemberRecentTagMapper extends BaseMapperX { - default List getByIds(Set memberIds) { + default List getByIds(Collection memberIds) { return selectList(new LambdaQueryWrapperX() .in(MemberRecentTagDO::getMemberId, memberIds) ); } + default List getByMemberId(Long memberId) { + return selectList(new LambdaQueryWrapperX() + .eq(MemberRecentTagDO::getMemberId, 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/user/MemberRecentCfgService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgService.java index afa2ab7..31ba82e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgService.java @@ -4,11 +4,17 @@ package cn.iocoder.yudao.module.member.service.user; import cn.iocoder.yudao.module.member.controller.app.user.vo.recentcfg.MemberRecentCfgReqVo; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberRecentCfgDO; +import java.util.Collection; +import java.util.List; +import java.util.Set; + /** * 用户朋友圈相关配置 Service 接口 */ public interface MemberRecentCfgService { + List getByMemberIds(Collection memberIds); + /** * 创建或新增配置 */ @@ -23,6 +29,4 @@ public interface MemberRecentCfgService { * 删除配置 */ int del(Long menberId); - - } \ 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/user/MemberRecentCfgServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgServiceImpl.java index 7623af5..5721452 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberRecentCfgServiceImpl.java @@ -12,6 +12,11 @@ import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + /** * 用户朋友圈相关配置 Service 实现类 @@ -25,14 +30,25 @@ public class MemberRecentCfgServiceImpl implements MemberRecentCfgService { @Resource private RecentCfgMapper recentCfgMapper; + @Override + public List getByMemberIds(Collection memberIds) { + if (ObjectUtil.isEmpty(memberIds)) return new ArrayList<>(); + return recentCfgMapper.selectList(new LambdaQueryWrapperX() + .in(MemberRecentCfgDO::getMemberId, memberIds) + ); + } + /** * 创建或新增配置 */ @Override public MemberRecentCfgDO createOrUpdate(MemberRecentCfgReqVo dto) { - MemberRecentCfgDO detail = recentCfgMapper.selectOne(new LambdaQueryWrapperX() - .eq(MemberRecentCfgDO::getMemberId, dto.getMemberId()) - ); + MemberRecentCfgDO detail = null; + if (ObjectUtil.isNotEmpty(dto.getMemberId())) { + detail = recentCfgMapper.selectOne(new LambdaQueryWrapperX() + .eq(MemberRecentCfgDO::getMemberId, dto.getMemberId()) + ); + } MemberRecentCfgDO entity = BeanUtil.toBean(dto, MemberRecentCfgDO.class); if (ObjectUtil.isEmpty(detail)) { recentCfgMapper.insert(entity);