From dfa9258c8879dbb0d1bfc00d7f939031d0bb623b Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 29 一月 2026 18:32:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New

---
 src/main/java/com/ruoyi/safe/service/impl/SafeTrainingDetailsServiceImpl.java |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/safe/service/impl/SafeTrainingDetailsServiceImpl.java b/src/main/java/com/ruoyi/safe/service/impl/SafeTrainingDetailsServiceImpl.java
new file mode 100644
index 0000000..2804aa3
--- /dev/null
+++ b/src/main/java/com/ruoyi/safe/service/impl/SafeTrainingDetailsServiceImpl.java
@@ -0,0 +1,81 @@
+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;
+
+/**
+ * <p>
+ * 瀹夊叏鐢熶骇--瀹夊叏鍩硅鑰冩牳--璁板綍璇︽儏 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-29 10:54:15
+ */
+@Service
+public class SafeTrainingDetailsServiceImpl extends ServiceImpl<SafeTrainingDetailsMapper, SafeTrainingDetails> implements SafeTrainingDetailsService {
+
+    @Autowired
+    private SafeTrainingDetailsMapper safeTrainingDetailsMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Override
+    public IPage<SafeTrainingDetails> 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<SafeTrainingDetails> 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<String, Object>() {{
+                    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("瀵煎嚭澶辫触");
+        }
+    }
+}

--
Gitblit v1.9.3