package cn.lili.modules.lmk.service.impl; import cn.lili.modules.lmk.enums.general.PrizeGrantStatusEnums; import cn.lili.modules.order.order.entity.dto.PrizeGrantRecordExportDetailDtO; import com.baomidou.mybatisplus.core.metadata.IPage; import cn.lili.modules.lmk.domain.entity.PrizeGrantRecord; import cn.lili.modules.lmk.mapper.PrizeGrantRecordMapper; import cn.lili.modules.lmk.service.PrizeGrantRecordService; import cn.lili.base.Result; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.lili.modules.lmk.domain.form.PrizeGrantRecordForm; import cn.lili.modules.lmk.domain.vo.PrizeGrantRecordVO; import cn.lili.modules.lmk.domain.query.PrizeGrantRecordQuery; 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.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import cn.lili.utils.PageUtil; import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 奖品发放记录 服务实现类 * * @author peng * @since 2025-08-20 */ @Service @RequiredArgsConstructor public class PrizeGrantRecordServiceImpl extends ServiceImpl implements PrizeGrantRecordService { private final PrizeGrantRecordMapper prizeGrantRecordMapper; @Override public void queryExportStock(HttpServletResponse response, PrizeGrantRecordQuery query){ List list = baseMapper.getExportData(query); XSSFWorkbook workbook = initExportData(list); 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(); } } } private XSSFWorkbook initExportData(List list){ List exportDetailDtOS = new ArrayList<>(); for (PrizeGrantRecordVO vo : list){ PrizeGrantRecordExportDetailDtO detailDtO = new PrizeGrantRecordExportDetailDtO(); BeanUtils.copyProperties(vo,detailDtO); 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++){ PrizeGrantRecordExportDetailDtO dto = exportDetailDtOS.get(i); Row row = sheet.createRow(i+1); row.createCell(0).setCellValue(dto.getNickName()); row.createCell(1).setCellValue(dto.getActivityName()); row.createCell(2).setCellValue(dto.getPrizeName()); row.createCell(3).setCellValue(dto.getPrizeContent()); if (PrizeGrantStatusEnums.SUCCESS.name().equals(dto.getGrantStatus())){ row.createCell(4).setCellValue(PrizeGrantStatusEnums.SUCCESS.getDescription()); }else { row.createCell(4).setCellValue(PrizeGrantStatusEnums.FAILED.getDescription()); } row.createCell(5).setCellValue(dto.getDes()); } return workbook; } /** * 添加 * @param form * @return */ @Override public Result add(PrizeGrantRecordForm form) { PrizeGrantRecord entity = PrizeGrantRecordForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(PrizeGrantRecordForm form) { PrizeGrantRecord entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result page(PrizeGrantRecordQuery query) { IPage page = PageUtil.getPage(query, PrizeGrantRecordVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(String id) { PrizeGrantRecordVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List entities = baseMapper.selectList(null); List vos = entities.stream() .map(entity -> PrizeGrantRecordVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } }