package com.ruoyi.safe.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.common.utils.HackLoopTableRenderPolicy; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.safe.dto.SafeTrainingDetailsDto; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.ruoyi.safe.mapper.SafeTrainingDetailsMapper; import com.ruoyi.safe.service.SafeTrainingDetailsService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; /** *

* 安全生产--安全培训考核--记录详情 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-01-29 10:54:15 */ @Service public class SafeTrainingDetailsServiceImpl extends ServiceImpl implements SafeTrainingDetailsService { @Autowired private SafeTrainingDetailsMapper safeTrainingDetailsMapper; @Autowired private SysUserMapper sysUserMapper; @Override public IPage pageDetails(Page page, SafeTrainingDetails safeTrainingDetails) { return safeTrainingDetailsMapper.pageDetails(page, safeTrainingDetails); } @Override public void export(HttpServletResponse response, Long userId) { SafeTrainingDetails safeTrainingDetails = new SafeTrainingDetails(); safeTrainingDetails.setUserId(userId); SysUser sysUser = sysUserMapper.selectUserById(userId); List safeTrainingDetailsList = safeTrainingDetailsMapper.pageDetails(new Page(1, -1), safeTrainingDetails).getRecords(); InputStream inputStream = this.getClass().getResourceAsStream("/static/safe-training-details.docx"); Configure configure = Configure.builder() .bind("safeTrainingDetailsList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap() {{ put("user", sysUser); put("safeTrainingDetailsList", safeTrainingDetailsList); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( "培训与考核记录", "UTF-8"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导出失败"); } } }