解决当前公开的会员总览接口当会员数过大时加载缓慢的问题 #8

Merged
otto merged 1 commits from otto/microservices:master into master 2026-07-24 09:34:15 +08:00
8 changed files with 155 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package com.microservices.zone.common.controller;
import com.alibaba.fastjson2.JSONObject;
import com.github.pagehelper.PageHelper;
import com.microservices.common.core.utils.StringUtils;
import com.microservices.common.core.web.controller.BaseController;
import com.microservices.common.core.web.domain.AjaxResult;
@ -19,8 +20,11 @@ import com.microservices.zone.detail.service.IZoneDetailService;
import com.microservices.zone.member.domain.vo.ZoneMemberDataVo;
import com.microservices.zone.member.domain.vo.ZoneMemberOpenSearchVo;
import com.microservices.zone.member.domain.vo.ZoneMemberOverviewVo;
import com.microservices.zone.member.domain.vo.ZoneMemberSearchVo;
import com.microservices.zone.member.domain.vo.ZoneMemberTypeCountVo;
import com.microservices.zone.member.domain.vo.ZonePointsTopDocVo;
import com.microservices.zone.member.service.IZoneMemberService;
import com.microservices.zone.member.service.IZoneMemberTypeService;
import com.microservices.zone.member.service.IZonePointsAccountService;
import com.microservices.zone.partners.domain.vo.ZonePartnersOverviewVo;
import com.microservices.zone.partners.service.IZonePartnersService;
@ -75,6 +79,8 @@ public class OpenController extends BaseController {
@Autowired
private IZoneMemberService zoneMemberService;
@Autowired
private IZoneMemberTypeService zoneMemberTypeService;
@Autowired
private IZonePartnersService zonePartnersService;
@Autowired
private IZoneProjectService zoneProjectService;
@ -274,6 +280,41 @@ public class OpenController extends BaseController {
return getGenericsDataTable(list);
}
/**
* 获取特色专区会员分类列表含各分类下已审核会员数量
*/
@GetMapping("/{zoneId}/memberType/list")
@ApiOperation("获取特色专区会员分类列表(含已审核会员数量)")
public GenericsTableDataInfo<ZoneMemberTypeCountVo> memberTypeList(
@ApiParam(name = "zoneId", value = "专区Id", required = true) @PathVariable("zoneId") Long zoneId,
@ApiParam(name = "name", value = "会员分类名称") String name) {
List<ZoneMemberTypeCountVo> list = zoneMemberTypeService.selectZoneMemberTypeListWithCount(zoneId, name);
return getGenericsDataTable(list);
}
/**
* 获取特色专区会员列表仅已审核会员支持名称模糊搜索及分类/等级过滤
*/
@GetMapping("/{zoneId}/member/list")
@ApiOperation("获取特色专区会员列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "当前页码", paramType = "query", dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示记录数未传默认100", paramType = "query", dataType = "Integer")
})
public GenericsTableDataInfo<ZoneMemberDataVo> memberList(
@ApiParam(name = "zoneId", value = "专区Id", required = true) @PathVariable("zoneId") Long zoneId,
ZoneMemberSearchVo zoneMemberSearchVo,
@RequestParam(value = "pageNum", required = false) Integer pageNum,
@RequestParam(value = "pageSize", required = false) Integer pageSize) {
zoneMemberSearchVo.setZoneId(zoneId);
if (pageNum == null || pageNum < 1) {
pageNum = 1;
}
int effectivePageSize = (pageSize == null || pageSize < 1) ? 100 : pageSize;
PageHelper.startPage(pageNum, effectivePageSize);
return zoneMemberService.selectOpenZoneMemberList(zoneMemberSearchVo);
}
/**
* 检查当前用户是否有该专区的权限
*/

View File

@ -0,0 +1,25 @@
package com.microservices.zone.member.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 专区会员分类含已审核会员数量对象
*
* @author otto
*/
@Data
@ApiModel("专区会员分类(含已审核会员数量)对象")
public class ZoneMemberTypeCountVo {
@ApiModelProperty(value = "专区会员分类Id")
private Long id;
@ApiModelProperty(value = "专区会员分类名称")
private String name;
@ApiModelProperty(value = "专区会员分类简介")
private String introduction;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "已审核会员数量")
private Long memberCount;
}

View File

@ -2,6 +2,7 @@ package com.microservices.zone.member.mapper;
import com.microservices.zone.member.domain.ZoneMember;
import com.microservices.zone.member.domain.vo.ZoneMemberSearchVo;
import com.microservices.zone.member.domain.vo.ZoneMemberTypeCountVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -121,6 +122,14 @@ public interface ZoneMemberMapper {
*/
Integer selectCountByZoneId(ZoneMember zoneMember);
/**
* 按会员分类统计专区下已审核会员数量
*
* @param zoneId 专区Id
* @return 每个分类id对应的已审核会员数量
*/
List<ZoneMemberTypeCountVo> selectAuditedMemberCountByType(@Param("zoneId") Long zoneId);
/**
* 获取指定序号的会员
*

View File

@ -31,6 +31,14 @@ public interface IZoneMemberService {
*/
public GenericsTableDataInfo<ZoneMemberDetailVo> selectZoneMemberList(ZoneMemberSearchVo zoneMemberSearchVo, boolean isOpen);
/**
* 查询特色专区已审核会员列表公开接口不分页由调用方通过 PageHelper 控制
*
* @param zoneMemberSearchVo 特色专区会员查询对象zoneIdnamememberTypeIdmemberLevelId
* @return 特色专区会员集合
*/
public GenericsTableDataInfo<ZoneMemberDataVo> selectOpenZoneMemberList(ZoneMemberSearchVo zoneMemberSearchVo);
/**
* 新增特色专区会员
*

View File

@ -1,6 +1,7 @@
package com.microservices.zone.member.service;
import com.microservices.zone.member.domain.ZoneMemberType;
import com.microservices.zone.member.domain.vo.ZoneMemberTypeCountVo;
import com.microservices.zone.member.domain.vo.ZoneMemberTypeUpdateVo;
import java.util.List;
@ -28,6 +29,15 @@ public interface IZoneMemberTypeService {
*/
public List<ZoneMemberType> selectZoneMemberTypeList(ZoneMemberType zoneMemberType);
/**
* 查询特色专区会员分类列表含各分类下已审核会员数量
*
* @param zoneId 专区Id
* @param name 会员分类名称模糊搜索可为空
* @return 会员分类集合含已审核会员数量
*/
public List<ZoneMemberTypeCountVo> selectZoneMemberTypeListWithCount(Long zoneId, String name);
/**
* 新增特色专区会员分类
*

View File

@ -129,6 +129,26 @@ public class ZoneMemberServiceImpl implements IZoneMemberService {
return PageUtils.toPage(zoneMemberList, this::toZoneMemberDetailVo);
}
/**
* 查询特色专区已审核会员列表公开接口
* 不做数据范围过滤分页由调用方通过 PageHelper 设置
*
* @param zoneMemberSearchVo 特色专区会员查询对象
* @return 特色专区会员集合
*/
@Override
public GenericsTableDataInfo<ZoneMemberDataVo> selectOpenZoneMemberList(ZoneMemberSearchVo zoneMemberSearchVo) {
zoneMemberSearchVo.setIsAudit(ZoneConstants.MEMBER_AUDIT_PASS);
zoneMemberSearchVo.setIsOpen(true);
List<ZoneMember> zoneMemberList = zoneMemberMapper.selectZoneMemberList(zoneMemberSearchVo);
return PageUtils.toPage(zoneMemberList, this::toOpenZoneMemberDataVo);
}
private ZoneMemberDataVo toOpenZoneMemberDataVo(ZoneMember zoneMember) {
String login = zoneMember.getSysUser() != null ? zoneMember.getSysUser().getUserName() : null;
return zoneMember.toZoneMemberDataVo(login);
}
private ZoneMemberDetailVo toZoneMemberDetailVo(ZoneMember zoneMember) {
ZoneMemberDetailVo zoneMemberDetailVo = new ZoneMemberDetailVo();
BeanUtils.copyProperties(zoneMember, zoneMemberDetailVo);

View File

@ -10,6 +10,7 @@ import com.microservices.zone.detail.service.IZoneDetailService;
import com.microservices.zone.member.domain.ZoneMember;
import com.microservices.zone.member.domain.ZoneMemberType;
import com.microservices.zone.member.domain.vo.ZoneMemberSearchVo;
import com.microservices.zone.member.domain.vo.ZoneMemberTypeCountVo;
import com.microservices.zone.member.domain.vo.ZoneMemberTypeUpdateVo;
import com.microservices.zone.member.mapper.ZoneMemberMapper;
import com.microservices.zone.member.mapper.ZoneMemberTypeMapper;
@ -20,7 +21,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -67,6 +70,37 @@ public class ZoneMemberTypeServiceImpl implements IZoneMemberTypeService {
return zoneMemberTypeMapper.selectZoneMemberTypeList(zoneMemberType);
}
/**
* 查询特色专区会员分类列表含各分类下已审核会员数量
*
* @param zoneId 专区Id
* @param name 会员分类名称模糊搜索可为空
* @return 会员分类集合含已审核会员数量
*/
@Override
public List<ZoneMemberTypeCountVo> selectZoneMemberTypeListWithCount(Long zoneId, String name) {
ZoneMemberType query = new ZoneMemberType();
query.setZoneId(zoneId);
query.setName(name);
List<ZoneMemberType> zoneMemberTypeList = zoneMemberTypeMapper.selectZoneMemberTypeList(query);
if (zoneMemberTypeList == null || zoneMemberTypeList.isEmpty()) {
return new ArrayList<>();
}
Map<Long, Long> countMap = zoneMemberMapper.selectAuditedMemberCountByType(zoneId).stream()
.collect(Collectors.toMap(ZoneMemberTypeCountVo::getId, ZoneMemberTypeCountVo::getMemberCount));
List<ZoneMemberTypeCountVo> result = new ArrayList<>(zoneMemberTypeList.size());
for (ZoneMemberType zoneMemberType : zoneMemberTypeList) {
ZoneMemberTypeCountVo vo = new ZoneMemberTypeCountVo();
vo.setId(zoneMemberType.getId());
vo.setName(zoneMemberType.getName());
vo.setIntroduction(zoneMemberType.getIntroduction());
vo.setSort(zoneMemberType.getSort());
vo.setMemberCount(countMap.getOrDefault(zoneMemberType.getId(), 0L));
result.add(vo);
}
return result;
}
/**
* 新增特色专区会员类别
*

View File

@ -369,6 +369,14 @@
and zm.member_type_id = #{memberTypeId}
and zm.member_level_id = #{memberLevelId}
</select>
<select id="selectAuditedMemberCountByType"
resultType="com.microservices.zone.member.domain.vo.ZoneMemberTypeCountVo">
select member_type_id as id, count(0) as memberCount
from zone_member
where zone_id = #{zoneId}
and is_audit = '1'
group by member_type_id
</select>
<select id="selectZoneMemberByOrderAndZoneId" resultMap="ZoneMemberResult">
<include refid="selectZoneMemberVo"/>
where zone_id=#{zoneMember.zoneId}