peng
2 天以前 7ae6893e2746869f879d270544b7804a82ea88a9
framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -27,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;
@@ -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,17 +58,23 @@
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.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;
@@ -607,6 +615,100 @@
        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");
            // 将Date类型转换为指定格式的字符串
            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("");
            }
            // 设置到DTO中
            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
    @PointLogPoint