From 61b1802b1b26fc35c07fd09edc4ff2ff8ade6688 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 29 一月 2026 14:52:23 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New
---
src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 179 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java b/src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java
new file mode 100644
index 0000000..0179898
--- /dev/null
+++ b/src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java
@@ -0,0 +1,179 @@
+package com.ruoyi.safe.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductWorkOrder;
+import com.ruoyi.project.system.domain.SysNotice;
+import com.ruoyi.safe.dto.SafeTrainingDetailsDto;
+import com.ruoyi.safe.dto.SafeTrainingDto;
+import com.ruoyi.safe.mapper.SafeTrainingDetailsMapper;
+import com.ruoyi.safe.mapper.SafeTrainingFileMapper;
+import com.ruoyi.safe.pojo.SafeTraining;
+import com.ruoyi.safe.mapper.SafeTrainingMapper;
+import com.ruoyi.safe.pojo.SafeTrainingDetails;
+import com.ruoyi.safe.pojo.SafeTrainingFile;
+import com.ruoyi.safe.service.SafeTrainingService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 瀹夊叏鐢熶骇--瀹夊叏鍩硅鑰冩牳 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-29 10:54:06
+ */
+@Service
+public class SafeTrainingServiceImpl extends ServiceImpl<SafeTrainingMapper, SafeTraining> implements SafeTrainingService {
+
+ @Autowired
+ private SafeTrainingMapper safeTrainingMapper;
+
+ @Autowired
+ private SafeTrainingFileMapper safeTrainingFileMapper;
+
+ @Autowired
+ private SafeTrainingDetailsMapper safeTrainingDetailsMapper;
+
+ @Override
+ public IPage<SafeTrainingDto> pageSafeTraining(Page page, SafeTrainingDto safeTrainingDto) {
+ return safeTrainingMapper.pageSafeTraining(page, safeTrainingDto);
+ }
+
+ @Override
+ public int addOrUpdate(SafeTraining safeTraining) {
+ if (ObjectUtils.isNull(safeTraining.getId())) {
+ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
+ // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶ц绋嬬紪鍙�
+ QueryWrapper<SafeTraining> queryWrapper = new QueryWrapper<>();
+ queryWrapper.likeRight("course_code", datePrefix)
+ .orderByDesc("course_code")
+ .last("LIMIT 1");
+ SafeTraining lastSafeTraining = safeTrainingMapper.selectOne(queryWrapper);
+ int sequenceNumber = 1; // 榛樿搴忓彿
+ if (lastSafeTraining != null && lastSafeTraining.getCourseCode() != null) {
+ String lastNo = lastSafeTraining.getCourseCode().toString();
+ if (lastNo.startsWith(datePrefix)) {
+ String seqStr = lastNo.substring(datePrefix.length());
+ try {
+ sequenceNumber = Integer.parseInt(seqStr) + 1;
+ } catch (NumberFormatException e) {
+ sequenceNumber = 1;
+ }
+ }
+ }
+ // 鐢熸垚瀹屾暣鐨勮绋嬬紪鍙�
+ String no = "KC-" + String.format("%s%03d", datePrefix, sequenceNumber);
+ safeTraining.setCourseCode(no);
+ }
+ //鏍规嵁鏃堕棿鍒ゆ柇鍩硅鐘舵��
+ String trainingDate = safeTraining.getTrainingDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+ LocalDateTime openingTime = LocalDateTime.parse((trainingDate + safeTraining.getOpeningTime()), DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss"));
+ LocalDateTime endTime = LocalDateTime.parse((trainingDate + safeTraining.getEndTime()), DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss"));
+ if (LocalDateTime.now().isBefore(openingTime)) {
+ //鏈紑濮�
+ safeTraining.setState(0);
+ } else if (LocalDateTime.now().isAfter(endTime)) {
+ //宸茬粨鏉�
+ safeTraining.setState(2);
+ } else {
+ //杩涜涓�
+ safeTraining.setState(1);
+ }
+ //鏂板鎴栨洿鏂�
+ saveOrUpdate(safeTraining);
+ return 0;
+ }
+
+ @Override
+ public SafeTrainingDto getSafeTraining(Long id) {
+ //涓昏〃鏁版嵁
+ SafeTrainingDto safeTrainingDto = safeTrainingMapper.getSafeTraining(id);
+ //闄勪欢
+ List<SafeTrainingFile> safeTrainingFiles = safeTrainingFileMapper.selectList(Wrappers.<SafeTrainingFile>lambdaQuery().eq(SafeTrainingFile::getSafeTrainingId, id));
+ safeTrainingDto.setSafeTrainingFileList(safeTrainingFiles);
+ //鍩硅璁板綍璇︽儏
+ List<SafeTrainingDetailsDto> safeTrainingDetailsDto = safeTrainingDetailsMapper.getSafeTraining(id);
+ safeTrainingDto.setSafeTrainingDetailsDtoList(safeTrainingDetailsDto);
+ return safeTrainingDto;
+ }
+
+ @Override
+ public int saveSafeTraining(SafeTrainingDto safeTrainingDto) {
+ //鏇存柊涓昏〃
+ safeTrainingMapper.updateById(safeTrainingDto);
+ //鏇存柊鍩硅璁板綍璇︽儏
+ safeTrainingDto.getSafeTrainingDetailsDtoList().forEach(safeTrainingDetailsDto -> {
+ safeTrainingDetailsMapper.updateById(safeTrainingDetailsDto);
+ });
+ return 0;
+ }
+
+ @Override
+ public int delSafeTraining(List<Integer> ids) {
+ //鍒犻櫎涓昏〃
+ safeTrainingMapper.deleteBatchIds(ids);
+ //鍒犻櫎闄勪欢
+ safeTrainingFileMapper.delete(Wrappers.<SafeTrainingFile>lambdaQuery().in(SafeTrainingFile::getSafeTrainingId, ids));
+ //鍒犻櫎鍩硅璁板綍
+ safeTrainingDetailsMapper.delete(Wrappers.<SafeTrainingDetails>lambdaQuery().in(SafeTrainingDetails::getSafeTrainingId, ids));
+ return 0;
+ }
+
+ @Override
+ public void export(HttpServletResponse response, Long id) {
+ SafeTrainingDto safeTrainingDto = safeTrainingMapper.getSafeTraining(id);
+ List<SafeTrainingDetailsDto> safeTrainingDetailsDtoList = safeTrainingDetailsMapper.getSafeTraining(id);
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/safe-training.docx");
+ Configure configure = Configure.builder()
+ .bind("safeTrainingDetailsDtoList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("safeTrainingDto", safeTrainingDto);
+ put("safeTrainingDetailsDtoList", safeTrainingDetailsDtoList);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ safeTrainingDto.getCourseCode() + "鍩硅涓庤�冩牳璁″垝", "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