From 7ae6893e2746869f879d270544b7804a82ea88a9 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期五, 19 九月 2025 14:20:42 +0800 Subject: [PATCH] 会员列表导出 --- framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java | 150 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 139 insertions(+), 11 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index 48fa339..455df7b 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.crypto.SecureUtil; -import cn.hutool.crypto.digest.MD5; import cn.lili.base.Result; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; @@ -28,6 +27,10 @@ import cn.lili.modules.lmk.domain.entity.VideoAccount; import cn.lili.modules.lmk.domain.form.MemberNickNameForm; import cn.lili.modules.lmk.domain.form.MemberTagForm; +import cn.lili.modules.lmk.domain.vo.PrizeRecordVO; +import cn.lili.modules.lmk.enums.general.PrizeDistributeStatusEnum; +import cn.lili.modules.lmk.enums.general.PrizeGrantStatusEnums; +import cn.lili.modules.lmk.enums.general.PrizeStatusEnum; import cn.lili.modules.lmk.service.MemberTagService; import cn.lili.modules.lmk.service.VideoAccountService; import cn.lili.modules.member.aop.annotation.PointLogPoint; @@ -35,14 +38,12 @@ import cn.lili.modules.member.entity.dto.*; import cn.lili.modules.member.entity.enums.PointTypeEnum; import cn.lili.modules.member.entity.enums.QRCodeLoginSessionStatusEnum; -import cn.lili.modules.member.entity.vo.MemberSearchVO; -import cn.lili.modules.member.entity.vo.MemberVO; -import cn.lili.modules.member.entity.vo.QRCodeLoginSessionVo; -import cn.lili.modules.member.entity.vo.QRLoginResultVo; +import cn.lili.modules.member.entity.vo.*; import cn.lili.modules.member.mapper.MemberMapper; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.member.token.MemberTokenGenerate; import cn.lili.modules.member.token.StoreTokenGenerate; +import cn.lili.modules.order.order.entity.dto.PrizeRecordExportDetailDTO; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.enums.StoreStatusEnum; import cn.lili.modules.store.service.StoreService; @@ -57,19 +58,25 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.apache.catalina.security.SecurityUtil; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * 浼氬憳鎺ュ彛涓氬姟灞傚疄鐜� @@ -578,7 +585,129 @@ queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled", memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); queryWrapper.orderByDesc("create_time"); + return this.baseMapper.pageByMemberVO(PageUtil.initPage(page), queryWrapper); + } + @Override + public IPage<MemberVO> getMemberPageAndTag(MemberSearchVO memberSearchVO, PageVO page) { + QueryWrapper<Member> queryWrapper = Wrappers.query(); + //鐢ㄦ埛鍚嶆煡璇� + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername()); + //鐢ㄦ埛鍚嶆煡璇� + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getNickName()), "nick_name", memberSearchVO.getNickName()); + //鎸夌収鐢佃瘽鍙风爜鏌ヨ + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile()); + //鎸夌収浼氬憳鐘舵�佹煡璇� + queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled", + memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); + queryWrapper.orderByDesc("create_time"); + if (CollectionUtils.isNotEmpty(memberSearchVO.getTagIds())) { + // 浣跨敤inSql鏂规硶杩涜瀹夊叏鐨勫瓙鏌ヨ + String tagIdsStr = memberSearchVO.getTagIds().stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + queryWrapper.inSql("id", + "SELECT DISTINCT member_id FROM lmk_member_tag WHERE tag_id IN (" + + tagIdsStr + ")"); + + return this.baseMapper.pageByMemberVO(PageUtil.initPage(page), queryWrapper); + } + return this.baseMapper.pageByMemberVO(PageUtil.initPage(page),queryWrapper); + } + + @Override + public void exportMember(MemberSearchVO memberSearchVO) { + HttpServletResponse response = ThreadContextHolder.getHttpResponse(); + QueryWrapper<Member> queryWrapper = Wrappers.query(); + //鐢ㄦ埛鍚嶆煡璇� + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername()); + //鐢ㄦ埛鍚嶆煡璇� + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getNickName()), "nick_name", memberSearchVO.getNickName()); + //鎸夌収鐢佃瘽鍙风爜鏌ヨ + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile()); + //鎸夌収浼氬憳鐘舵�佹煡璇� + queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled", + memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); + queryWrapper.orderByDesc("create_time"); + if (CollectionUtils.isNotEmpty(memberSearchVO.getTagIds())) { + // 浣跨敤inSql鏂规硶杩涜瀹夊叏鐨勫瓙鏌ヨ + String tagIdsStr = memberSearchVO.getTagIds().stream() + .map(String::valueOf) + .collect(Collectors.joining(",")); + queryWrapper.inSql("id", + "SELECT DISTINCT member_id FROM lmk_member_tag WHERE tag_id IN (" + + tagIdsStr + ")"); + } + List<MemberVO> memberVOS = this.baseMapper.exportMember(queryWrapper); + XSSFWorkbook workbook = initExportMember(memberVOS); + try { + // 璁剧疆鍝嶅簲澶� + String fileName = URLEncoder.encode("浼氬憳鍒楄〃", "UTF-8"); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); + + ServletOutputStream out = response.getOutputStream(); + workbook.write(out); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + workbook.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + public XSSFWorkbook initExportMember(List<MemberVO> list){ + List<MemberExportVO> exportDetailDTOS = new ArrayList<>(); + for (MemberVO vo : list){ + MemberExportVO detailDtO = new MemberExportVO(); + BeanUtils.copyProperties(vo,detailDtO); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 灏咲ate绫诲瀷杞崲涓烘寚瀹氭牸寮忕殑瀛楃涓� + Date createTime = vo.getCreateTime(); + if (createTime != null) { + String createTimeStr = sdf.format(createTime); + detailDtO.setCreateTime(createTimeStr); + }else { + detailDtO.setCreateTime(""); + } + Date lastLoginDate1 = vo.getLastLoginDate(); + if (lastLoginDate1 != null) { + String lastLoginDate = sdf.format(lastLoginDate1); + detailDtO.setLastLoginDate(lastLoginDate); + }else { + detailDtO.setLastLoginDate(""); + } + // 璁剧疆鍒癉TO涓� + exportDetailDTOS.add(detailDtO); + } + XSSFWorkbook workbook = new XSSFWorkbook(); + + Sheet sheet = workbook.createSheet("浼氬憳鍒楄〃"); + // 鍒涘缓琛ㄥご + Row header = sheet.createRow(0); + String[] headers = { + "浼氬憳鍚嶇О", "浼氬憳鏄电О","鑱旂郴鏂瑰紡", + "娉ㄥ唽鏃堕棿","鏈�鍚庣櫥褰曟椂闂�" + }; + for(int i= 0 ;i< headers.length;i++){ + Cell cell = header.createCell(i); + cell.setCellValue(headers[i]); + } + for (int i=0;i< exportDetailDTOS.size();i++){ + MemberExportVO dto = exportDetailDTOS.get(i); + Row row = sheet.createRow(i+1); + row.createCell(0).setCellValue(dto.getUsername()); + row.createCell(1).setCellValue(dto.getNickName()); + row.createCell(2).setCellValue(dto.getMobile()); + row.createCell(3).setCellValue(dto.getCreateTime()); + row.createCell(4).setCellValue(dto.getLastLoginDate()); + } + + return workbook; + } @Override @@ -832,7 +961,6 @@ if(StringUtils.isNotBlank(member.getFace()) && !member.getFace().contains("https")){ member.setFace(cosUtil.getPreviewUrl(member.getFace())); } - } return member; } -- Gitblit v1.8.0