From b9b8b93a1b8ec1954ffc690093cb4628477de8c2 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期三, 22 十月 2025 14:11:49 +0800
Subject: [PATCH] 导出excel添加用户id
---
framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 205 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..3faabf9 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,13 @@
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.MemberBindStoreForm;
+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 +39,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 +59,28 @@
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.time.Duration;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.*;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
/**
* 浼氬憳鎺ュ彛涓氬姟灞傚疄鐜�
@@ -348,6 +360,49 @@
}
@Override
+ public Result bindMemberAndStore(MemberBindStoreForm form) {
+ String memberId = UserContext.getCurrentUserId();
+ if(StringUtils.isNotBlank(memberId)){
+ Member member = baseMapper.selectById(memberId);
+
+ if (member != null){
+ //鍒ゆ柇鐢ㄦ埛鐨勫垱寤烘椂闂存槸鍚﹀拰 鍒嗕韩shareTime鍦�24灏忔椂鍐�
+ LocalDateTime memberCreateTime = member.getCreateTime().toInstant()
+ .atZone(ZoneId.systemDefault())
+ .toLocalDateTime();
+
+ LocalDateTime shareTime = form.getShareTime().toInstant()
+ .atZone(ZoneId.systemDefault())
+ .toLocalDateTime();
+
+ // 璁$畻鏃堕棿宸� 绗竴涓弬鏁� 杈冩棭鐨勬椂闂� 鍚庝竴涓緝鏅氱殑鏃堕棿
+ Duration duration = Duration.between(
+ memberCreateTime.isBefore(shareTime) ? memberCreateTime : shareTime,
+ memberCreateTime.isBefore(shareTime) ? shareTime : memberCreateTime
+ );
+
+ long hoursDifference = duration.toHours();
+
+ if (hoursDifference <= 24) {
+ // 鍦�24灏忔椂鍐� 涓庡簵閾鸿繘琛岀粦瀹�
+ if(StringUtils.isNotBlank(member.getShareStoreId())){
+ return Result.ok("宸茬粦瀹氬簵閾�");
+ }
+ member.setShareStoreId(form.getShareStoreId());
+ baseMapper.updateById(member);
+ } else {
+ return Result.ok("鍒嗕韩宸茶繃鏈燂紝鏈夋晥鏈熶负24灏忔椂");
+ }
+ }
+
+
+ }else{
+ throw new RuntimeException("UserContext.getCurrentUserId()锛氱敤鎴穒d鑾峰彇寮傚父");
+ }
+ return Result.ok("缁戝畾鎴愬姛");
+ }
+
+ @Override
public Member editOwn(MemberEditDTO memberEditDTO) {
//鏌ヨ浼氬憳淇℃伅
Member member = this.findByUsername(Objects.requireNonNull(UserContext.getCurrentUser()).getUsername());
@@ -531,10 +586,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 +632,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("m.id",
+ "SELECT DISTINCT member_id FROM lmk_member_tag WHERE tag_id IN (" +
+ tagIdsStr + ")");
+ }
+ return this.baseMapper.pageByMemberVOAndBindStore(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 = {
+ "浼氬憳id",
+ "浼氬憳鍚嶇О", "浼氬憳鏄电О","鑱旂郴鏂瑰紡",
+ "娉ㄥ唽鏃堕棿","鏈�鍚庣櫥褰曟椂闂�"
+ };
+ 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.getId());
+ row.createCell(1).setCellValue(dto.getUsername());
+ row.createCell(2).setCellValue(dto.getNickName());
+ row.createCell(3).setCellValue(dto.getMobile());
+ row.createCell(4).setCellValue(dto.getCreateTime());
+ row.createCell(5).setCellValue(dto.getLastLoginDate());
+ }
+
+ return workbook;
+
}
@Override
@@ -814,7 +1005,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