package com.zcloud.util.archivesUtil; import com.zcloud.entity.PageData; import com.zcloud.mapper.dsno3.eduStudy.ClassMapper; import com.zcloud.mapper.dsno3.eduStudy.ClassPostMapper; import com.zcloud.service.eduArchives.ArchivesReviewRecordService; import com.zcloud.service.eduArchives.ArchivesService; import com.zcloud.util.*; import fr.opensagres.xdocreport.document.IXDocReport; import fr.opensagres.xdocreport.document.images.ByteArrayImageProvider; import fr.opensagres.xdocreport.document.registry.XDocReportRegistry; import fr.opensagres.xdocreport.template.IContext; import fr.opensagres.xdocreport.template.TemplateEngineKind; import fr.opensagres.xdocreport.template.formatter.FieldsMetadata; import fr.opensagres.xdocreport.template.formatter.NullImageBehaviour; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * 说明:安全培训教材会审表 * 作者:wangxuan * 官网:www.zcloudchina.com * * @author wangxuan */ @Component public class TrainingAbsHandler extends AbsHandlerBatchExport { @Resource private ArchivesReviewRecordService archivesReviewRecordService; @Autowired private ClassMapper classMapper; @Autowired private ArchivesService archivesService; @Autowired private ClassPostMapper classPostMapper; /** * @Description: 返回pdf路径 * @Author: dearLin * @Date: 2023/3/20/020 10:41 * @Param: [com.zcloud.entity.PageData] [pageData] * @Return: java.lang.String */ @Override public File batchExport(PageData pd, String nowZip) throws Exception { String projectPath = pd.getString("projectPath"); String now = DateUtil.getSdfTimesSSS(); PageData clazz = classMapper.findById(pd); SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); //日期格式 SimpleDateFormat dayformat = new SimpleDateFormat("yyyy.MM.dd"); //日期格式 SimpleDateFormat formatter = new SimpleDateFormat("MM.dd"); List byClass = classPostMapper.findByClass(pd); Set postNameSet = new HashSet<>(); for (PageData aClass : byClass) { postNameSet.add(aClass.getString("POST_NAME")); } List studentList = archivesService.getStudents(pd); List ArrayDATA_IDS = new ArrayList(); pd.put("ArrayDATA_IDS", ArrayDATA_IDS); List coursewaresList = archivesService.getCoursewares(pd); double CLASSHOUR = 0; Set TEACHER_NAME = new HashSet<>(); for (PageData pageData : coursewaresList) { CLASSHOUR += (Double) pageData.get("CLASSHOUR"); TEACHER_NAME.add(pageData.get("TEACHERNAME").toString()); } StringBuilder COURSEWARENAME = new StringBuilder(); List curriculums = archivesService.getCurriculums(pd); for (PageData curriculum : curriculums) { COURSEWARENAME.append(curriculum.getString("CURRICULUMNAME")).append(","); } List sdrs = studentList.stream().filter(item -> "2".equals(item.getString("STUDYSTATE")) || "3".equals(item.getString("STUDYSTATE")) || "5".equals(item.getString("STUDYSTATE")) || "6".equals(item.getString("STUDYSTATE")) ).collect(Collectors.toList()); List curList = archivesService.getCurriculums(pd); for (PageData c : curList) { PageData cha = new PageData(); PageData itemInfo = new PageData(); cha.put("PARENT_ID", "0"); itemInfo.put("var0", c.get("CURRICULUMNAME")); itemInfo.put("var1", c.get("CATALOGUELEVEL")); cha.put("CURRICULUM_ID", c.get("CURRICULUM_ID")); cha.put("CLASS_ID", pd.get("CLASS_ID")); List chapterList = archivesService.getCoursewares(cha, false); // 二级目录结构时,查询子级目录 // 二级目录结构时,查询子级目录 if (c != null && c.get("CATALOGUELEVEL") != null && Tools.notEmpty(c.get("CATALOGUELEVEL").toString()) && "2".equals(c.get("CATALOGUELEVEL").toString()) && chapterList != null && chapterList.size() > 0) { for (int i = 0; i < chapterList.size(); i++) { chapterList.get(i).put("NUM", NumToChinese.arabicNumToChineseNum((i + 1))); PageData firstChapter = new PageData(); firstChapter.put("CURRICULUM_ID", c.get("CURRICULUM_ID")); firstChapter.put("PARENT_ID", chapterList.get(i).get("CHAPTER_ID")); firstChapter.put("CLASS_ID", pd.get("CLASS_ID")); List nodesList = archivesService.getCoursewares(firstChapter); for (PageData chapter2 : nodesList) { String COURSEWAREINTRODUCE = chapter2.getString("COURSEWAREINTRODUCE").replaceAll("\\\n", ""); chapter2.put("COURSEWAREINTRODUCE", COURSEWAREINTRODUCE); if (org.apache.commons.lang.StringUtils.isEmpty(String.valueOf(chapter2.get("INDUSTRY_ALL_NAME")))) { chapter2.put("INDUSTRY_ALL_NAME", " "); } else { chapter2.put("INDUSTRY_ALL_NAME", " "); } String TEACHERNAME = (String) chapter2.get("TEACHERNAME"); if (org.apache.commons.lang.StringUtils.isEmpty(TEACHERNAME)) { chapter2.put("TEACHERNAME", " "); } String TRAININGTYPE_NAME = (String) chapter2.get("TRAININGTYPE_NAME"); if (org.apache.commons.lang.StringUtils.isEmpty(TRAININGTYPE_NAME)) { chapter2.put("TRAININGTYPE_NAME", " "); } String POSTTYPE_NAME = (String) chapter2.get("POSTTYPE_NAME"); if (org.apache.commons.lang.StringUtils.isEmpty(POSTTYPE_NAME)) { chapter2.put("POSTTYPE_NAME", " "); } chapterList.get(i).put("nodes", nodesList); } } } else { for (int i = 0; i < chapterList.size(); i++) { chapterList.get(i).put("NUM", NumToChinese.arabicNumToChineseNum((i + 1))); String industryAllName = (String) chapterList.get(i).get("INDUSTRY_ALL_NAME"); if (org.apache.commons.lang.StringUtils.isEmpty(industryAllName)) { chapterList.get(i).put("INDUSTRY_ALL_NAME", " "); } String TEACHERNAME = (String) chapterList.get(i).get("TEACHERNAME"); if (org.apache.commons.lang.StringUtils.isEmpty(TEACHERNAME)) { chapterList.get(i).put("TEACHERNAME", " "); } String TRAININGTYPE_NAME = (String) chapterList.get(i).get("TRAININGTYPE_NAME"); if (org.apache.commons.lang.StringUtils.isEmpty(TRAININGTYPE_NAME)) { chapterList.get(i).put("TRAININGTYPE_NAME", " "); } String POSTTYPE_NAME = (String) chapterList.get(i).get("POSTTYPE_NAME"); if (org.apache.commons.lang.StringUtils.isEmpty(POSTTYPE_NAME)) { chapterList.get(i).put("POSTTYPE_NAME", " "); } } } c.put("chapterList", chapterList); } File file = new File(projectPath + Const.FILEPATHWORDTEMPLATE + "traffic-records2.docx"); InputStream mbwj = new FileInputStream(file); //注册xdocreport实例并加载FreeMarker模板引擎 IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); //创建xdocreport上下文对象 IContext context = report.createContext(); context.put("curList", curList); context.put("value1", dayformat.format(dateformat.parse(clazz.getString("START_TIME"))) + "-" + formatter.format(dateformat.parse(clazz.getString("END_TIME")))); context.put("value2", clazz.get("CORP_NAME")); context.put("value3", String.join(",", postNameSet)); context.put("value4", String.join(",", TEACHER_NAME)); context.put("value5", CLASSHOUR); context.put("value6", Tools.notEmpty(clazz.getString("PLAN_DEPARTMENT"))?clazz.getString("PLAN_DEPARTMENT"):""); context.put("value7", studentList.size()); context.put("value8", sdrs.size()); context.put("value9", sdrs.size()); context.put("value10", COURSEWARENAME.toString().substring(0, COURSEWARENAME.length() - 1)); PageData trainingData = archivesReviewRecordService.getTraining(pd); if (trainingData == null) { trainingData = new PageData(); } if (trainingData.get("IS_SELECT1") != null && "是".equals(trainingData.getString("IS_SELECT1"))) { context.put("value12", "☑是 □否"); } else if (trainingData.get("IS_SELECT1") != null && "否".equals(trainingData.getString("IS_SELECT1"))) { context.put("value12", "□是 ☑否"); } else { context.put("value12", "□是 □否"); } if (trainingData.get("IS_SELECT2") != null && "是".equals(trainingData.getString("IS_SELECT2"))) { context.put("value13", "☑是 □否"); } else if (trainingData.get("IS_SELECT2") != null && "否".equals(trainingData.getString("IS_SELECT2"))) { context.put("value13", "□是 ☑否"); } else { context.put("value13", "□是 □否"); } if (trainingData.get("IS_SELECT3") != null && "是".equals(trainingData.getString("IS_SELECT3"))) { context.put("value14", "☑是 □否"); } else if (trainingData.get("IS_SELECT3") != null && "否".equals(trainingData.getString("IS_SELECT3"))) { context.put("value14", "□是 ☑否"); } else { context.put("value14", "□是 □否"); } if (trainingData.get("IS_SELECT4") != null && "是".equals(trainingData.getString("IS_SELECT4"))) { context.put("value15", "☑是 □否"); } else if (trainingData.get("IS_SELECT4") != null && "否".equals(trainingData.getString("IS_SELECT4"))) { context.put("value15", "□是 ☑否"); } else { context.put("value15", "□是 □否"); } if (trainingData.get("IS_SELECT5") != null && "是".equals(trainingData.getString("IS_SELECT5"))) { context.put("value16", "☑是 □否"); } else if (trainingData.get("IS_SELECT5") != null && "否".equals(trainingData.getString("IS_SELECT5"))) { context.put("value16", "□是 ☑否"); } else { context.put("value16", "□是 □否"); } context.put("value18", trainingData.get("MEASURE") != null ? trainingData.get("MEASURE") : ""); String path = Const.HTTPFILEURL + clazz.get("SAFETYDEPTOR_URL"); URL url = new URL(path); ByteArrayImageProvider byteArrayImageProvider = new ByteArrayImageProvider(url.openStream());//照片 读取网络路径 context.put("pic", byteArrayImageProvider); context.put("pic2", byteArrayImageProvider); FieldsMetadata fm = report.createFieldsMetadata(); fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); fm.addFieldAsImage("pic2", "pic2", NullImageBehaviour.RemoveImageTemplate); FileOutputStream out = new FileOutputStream(projectPath + Const.TEMPZIPFILES + "教育培训记录-" + now + ".docx"); report.process(context, out); out.close(); WordToPdfUtil.docToPdf(projectPath + Const.TEMPZIPFILES + "教育培训记录-" + now + ".docx", projectPath + Const.TEMPZIPFILES + "教育培训记录-" + now + ".pdf"); //删除本地word pdf File word = new File(projectPath + Const.TEMPZIPFILES + "教育培训记录-" + now + ".docx"); word.delete(); File pdf = new File(projectPath + Const.TEMPZIPFILES + "教育培训记录-" + now + ".pdf"); return pdf; } @Override public void afterPropertiesSet() throws Exception { BatchExportFactory.register("archives110", this); } }