From d01924bd85d25681713eebc80b45b3f3dad81cef Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期五, 19 九月 2025 13:57:36 +0800 Subject: [PATCH] 会员列表导出 --- framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 158 insertions(+), 12 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 bb1d11d..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; @@ -26,7 +25,12 @@ import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.service.ConnectService; 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; @@ -34,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; @@ -56,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; /** * 浼氬憳鎺ュ彛涓氬姟灞傚疄鐜� @@ -531,10 +539,24 @@ } @Override + public Result updateMemberNickName(MemberNickNameForm form) { + Member member = baseMapper.selectById(form.getMemberId()); + boolean update = false; + if ("寰俊鐢ㄦ埛".equals(member.getNickName()) || StringUtils.isBlank(member.getNickName())) { + member.setNickName(form.getNickName()); + update = true; + } + if (update){ + baseMapper.updateById(member); + } + return Result.ok().data(member.getNickName()); + } + + @Override public Result resetPassword(String id) { String password = "111111"; Member member = this.getById(id); - member.setPassword(new BCryptPasswordEncoder().encode(password)); + member.setPassword(new BCryptPasswordEncoder().encode(SecureUtil.md5(password))); this.updateById(member); return Result.ok("閲嶇疆鎴愬姛"); } @@ -563,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 @@ -814,7 +958,9 @@ public MemberVO getMember(String id) { MemberVO member = baseMapper.getVoById(id); if (Objects.nonNull(member)) { - member.setFace(cosUtil.getPreviewUrl(member.getFace())); + if(StringUtils.isNotBlank(member.getFace()) && !member.getFace().contains("https")){ + member.setFace(cosUtil.getPreviewUrl(member.getFace())); + } } return member; } -- Gitblit v1.8.0