| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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("导åºå¤±è´¥"); |
| | | } |
| | | |
| | | } |
| | | } |