refactor(member): 更新通过团长ID获取会员信息的方法将getByReference方法的参数从MemberBO更改为ReferenceMemberQuery,并更新了返回类型为Page<ReferenceMemberVO>。同时,在MemberServiceImpl中实现了新的查询逻辑,支持按昵称、手机号和推广时间进行过滤,并在结果中添加了代理商名称和团长姓名。

This commit is contained in:
huk 2025-09-18 14:57:49 +08:00
parent b974273aa1
commit 8795b1fb37
8 changed files with 195 additions and 17 deletions

View File

@ -2,13 +2,14 @@ package com.wzj.soopin.member.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.query.ReferenceMemberQuery;
import com.wzj.soopin.member.domain.vo.MemberDataStatisticsVO;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.domain.vo.ReferenceMemberVO;
import com.wzj.soopin.member.service.IMemberService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
@ -246,16 +247,16 @@ public class MemberController extends BaseController {
}
/**
* 分页查询团长租户绑定的会员账户信息
* 分页查询团长绑定的会员账户信息
*
* @param bo 查询条件
*/
// @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) 团长
@GetMapping(value = "/getByReference")
public R<IPage<MemberVO>> getByReference(MemberBO bo) {
Page<Member> memberPage = service.getByReference(bo);
public R<Page<ReferenceMemberVO>> getByReference(ReferenceMemberQuery query) {
Page<ReferenceMemberVO> memberPage = service.getByReference(query);
TableDataInfo.build(memberPage);
return R.ok(convert.toVO(memberPage));
return R.ok(memberPage);
}

View File

@ -0,0 +1,33 @@
package com.wzj.soopin.member.domain.query;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.BaseBO;
import java.time.LocalDate;
/**
* 团长绑定的会员查询
*
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(description = "团长绑定的会员查询")
public class ReferenceMemberQuery extends BaseBO {
/**
* 绑定团长日期
*/
private LocalDate spreadTime;
/** 会员昵称 */
private String nickname;
/** 会员手机号 */
private String phone;
}

View File

@ -0,0 +1,103 @@
package com.wzj.soopin.member.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.excel.annotation.Excel;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 团长绑定的会员信息对象
*
*/
@Data
@Schema(description = "团长绑定的会员信息对象")
public class ReferenceMemberVO {
/** 会员唯一标识 ID */
@Schema(description = "会员唯一标识 ID")
private Long id;
@Schema(description = "所属代理商名称")
private String agencyTenantName;
/** 会员昵称 */
@Schema(description = "会员昵称")
private String nickname;
/** 会员手机号 */
@Schema(description = "会员手机号")
private String phoneHidden;
/**
* 团长姓名
*/
private String spreadUserName;
/** 用户备注信息 */
@Schema(description = "用户备注信息")
private String mark;
/** 帐号启用状态0->禁用1->启用 */
@Schema(description = "帐号启用状态0->禁用1->启用")
private Integer status;
/** 头像地址 */
@Excel(name = "头像")
@Schema(description = "头像地址")
private String avatar;
/** 性别0->未知1->男2->女 */
@Schema(description = "性别0->未知1->男2->女")
private Integer gender;
/** 用户所在城市名称 */
@Schema(description = "用户所在城市名称")
private String city;
/** 用户所在省份名称 */
@Schema(description = "用户所在省份名称")
private String province;
/** 用户所在国家名称 */
@Schema(description = "用户所在国家名称")
private String country;
/** 公众号运营者对粉丝的备注 */
@Schema(description = "公众号运营者对粉丝的备注")
private String remark;
/** 生日日期格式yyyy-MM-dd */
@JsonFormat(pattern = "yyyy-MM-dd")
@Schema(description = "生日日期格式yyyy-MM-dd")
private LocalDate birthday;
/** 推广员用户 ID */
@Schema(description = "推广员用户 ID")
private Long spreadUid;
@Schema(description = "推广员二维码")
private String spreadName;
/** 推广员关联时间格式yyyy-MM-dd HH:mm:ss */
@Schema(description = "推广员关联时间格式yyyy-MM-dd HH:mm:ss")
private LocalDateTime spreadTime;
/** 会员等级 */
@Schema(description = "会员等级")
private Integer level;
/** 用户名 */
@Schema(description = "用户名")
private String userName;
/**
* 视频点赞数
*/
@Schema(description ="视频点赞数")
private Integer vlogLikeCount;
}

View File

@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.query.ReferenceMemberQuery;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.domain.vo.ReferenceMemberVO;
import org.dromara.common.core.constant.ResultCode;
import java.io.Serializable;
@ -88,8 +90,8 @@ public interface IMemberService extends IService<Member> {
/**
* 通过团长ID获取会员信息
* @param bo
* @param query
* @return
*/
Page<Member> getByReference(MemberBO bo);
Page<ReferenceMemberVO> getByReference(ReferenceMemberQuery query);
}

View File

@ -1,8 +1,11 @@
package com.wzj.soopin.member.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@ -14,7 +17,9 @@ import com.wzj.soopin.member.convert.MemberConvert;
import com.wzj.soopin.member.domain.bo.MemberBO;
import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.member.domain.po.MemberAccount;
import com.wzj.soopin.member.domain.query.ReferenceMemberQuery;
import com.wzj.soopin.member.domain.vo.MemberVO;
import com.wzj.soopin.member.domain.vo.ReferenceMemberVO;
import com.wzj.soopin.member.mapper.MemberAccountMapper;
import com.wzj.soopin.member.mapper.MemberCartMapper;
import com.wzj.soopin.member.mapper.MemberMapper;
@ -30,7 +35,9 @@ import org.dromara.common.redis.redis.RedisCache;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.service.ISysTenantService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.scheduling.annotation.Scheduled;
@ -62,10 +69,13 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
private final MemberConvert memberConvert;
private final MemberMapper memberMapper;
private final IFansService fansService;
private final SysUserMapper sysUserMapper;
private final ISysTenantService tenantService;
@Override
public boolean usernameExists(String username) {
return baseMapper.countByUsername(username) > 0; // 确保实现
@ -321,14 +331,31 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
}
@Override
public Page<Member> getByReference(MemberBO bo) {
Assert.notNull(bo.getCurrent(), "分页参数不能为空");
Assert.notNull(bo.getSize(), "分页参数不能为空");
String tenantId = StrUtil.isBlank(bo.getTenantId()) ? TenantHelper.getTenantId() : bo.getTenantId();
SysUser sysUser = sysUserMapper.selectReferneceByTenantId(tenantId);
public Page<ReferenceMemberVO> getByReference(ReferenceMemberQuery query) {
Assert.isTrue(query.getCurrent() != null && query.getSize() != null, "分页参数不能为空");
SysUser sysUser = sysUserMapper.selectReferneceByTenantId(TenantHelper.getTenantId());
SysTenantVo referenceTenant = tenantService.queryByTenantId(TenantHelper.getTenantId());
SysTenantVo agencyTenant = tenantService.queryByTenantId(referenceTenant.getAgencyTenantId());
Member member = memberMapper.selectOne(Wrappers.lambdaQuery(Member.class).eq(Member::getUserId, sysUser.getUserId()).last("LIMIT 1"));
Assert.notNull(member, () -> new ServiceException("团长未绑定会员账户"));
bo.setSpreadUid(member.getId());
return this.page(Page.of(bo.getCurrent(), bo.getSize()), bo.toWapper());
LambdaQueryWrapper<Member> lambdaQueryWrapper = Wrappers.lambdaQuery(Member.class)
.eq(Member::getSpreadUid, member.getId())
.like(StrUtil.isNotEmpty(query.getNickname()), Member::getNickname, query.getNickname())
.like(StrUtil.isNotEmpty(query.getPhone()), Member::getPhoneHidden, query.getPhone())
.orderByDesc(Member::getSpreadTime);
if (query.getSpreadTime() != null) {
lambdaQueryWrapper.ge(Member::getSpreadTime, LocalDateTimeUtil.beginOfDay(query.getSpreadTime()));
lambdaQueryWrapper.le(Member::getSpreadTime, LocalDateTimeUtil.endOfDay(query.getSpreadTime()));
}
Page<Member> page = this.page(Page.of(query.getCurrent(), query.getSize()), lambdaQueryWrapper);
List<ReferenceMemberVO> list = page.getRecords().stream().map(m -> {
ReferenceMemberVO referenceMemberVO = BeanUtil.copyProperties(m, ReferenceMemberVO.class);
referenceMemberVO.setAgencyTenantName(agencyTenant.getAgencyName());
referenceMemberVO.setSpreadUserName(sysUser.getNickName());
return referenceMemberVO;
}).toList();
Page<ReferenceMemberVO> objectPage = Page.of(page.getCurrent(), page.getSize(), page.getTotal());
objectPage.setRecords(list);
return objectPage;
}
}

View File

@ -61,6 +61,9 @@ public class SysReferenceBo {
@Schema(description = "证件信息")
private String idCard;
@Schema(description = "证件图片")
private String certificate;
@Schema(description = "其它附件路径")
private String otherAttachment;

View File

@ -56,6 +56,9 @@ public class SysReferenceVO {
@Schema(description = "证件信息")
private String idCard;
@Schema(description = "证件图片")
private String certificate;
@Schema(description = "其它附件路径")
private String otherAttachment;

View File

@ -1,16 +1,16 @@
package org.dromara.system.domain.vo;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.v3.oas.annotations.media.Schema;
import org.dromara.system.domain.SysTenant;
import io.github.linpeilie.annotations.AutoMapper;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.system.domain.SysTenant;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
@ -61,6 +61,9 @@ public class SysTenantVo implements Serializable {
@TableLogic
private String delFlag;
@Schema(description = "代理机构名称")
private String agencyName;
@Schema(description = "营业执照编号")
private String businessLicense;
@ -175,5 +178,8 @@ public class SysTenantVo implements Serializable {
@Schema(description = "类型(2->商家,3->代理,4->平台,5->达人)")
private Integer type;
@Schema(description = "所属代理商")
private String agencyTenantId;
}