integrated_traffic/src/main/java/com/zcloud/util/archivesUtil/HsAbsHandler.java

219 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.zcloud.util.archivesUtil;
import com.zcloud.service.eduArchives.ArchivesReviewRecordService;
import com.zcloud.service.eduArchives.ArchivesReviewService;
import com.zcloud.service.eduStudy.ClassCurriculumService;
import com.zcloud.service.eduStudy.ClassService;
import com.zcloud.service.eduStudy.CurriculumService;
import com.zcloud.entity.PageData;
import com.zcloud.entity.TrainingPlanDao;
import com.zcloud.service.corp.CorpInfoService;
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.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
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.Date;
import java.util.List;
/**
* 说明:安全培训教材会审表
* 作者wangxuan
* 官网www.zcloudchina.com
*
* @author wangxuan
*/
@Component
public class HsAbsHandler extends AbsHandlerBatchExport {
@Autowired
private ClassService classService;
@Autowired
private CorpInfoService corpInfoService;
@Autowired
private ArchivesReviewService archivesReviewService;
@Autowired
private ArchivesReviewRecordService archivesReviewRecordService;
@Autowired
private CurriculumService curriculumService;
@Autowired
private ClassCurriculumService classCurriculumService;
/**
* @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 {
ArrayList<File> outsideFiles = new ArrayList<>(); //最外层
List<PageData> varList = classCurriculumService.findByClassID(pd);
String projectPath = pd.getString("projectPath");
for (PageData pageData : varList) {
String now = DateUtil.getSdfTimesSSS();
pd.put("CURRICULUM_ID",pageData.getString("CURRICULUM_ID"));
// 公章
PageData corpinfo = corpInfoService.findById(pd);
String path = Const.HTTPFILEURL + corpinfo.getString("OFFICIAL_SEAL_PATH");
URL url = new URL(path);
ByteArrayImageProvider byteArrayImageProvider = new ByteArrayImageProvider(url.openStream());//照片 读取网络路径
// 表头
PageData classInfo = classService.findById(pd);
PageData archInfo = archivesReviewService.findById(pd);
PageData curriculumInfo = curriculumService.findById(pd);
File file = new File(projectPath + Const.FILEPATHWORDTEMPLATE + "hs.docx");
InputStream mbwj = new FileInputStream(file);
//注册xdocreport实例并加载FreeMarker模板引擎
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker);
//创建xdocreport上下文对象
IContext context = report.createContext();
SimpleDateFormat formatdate = new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
context.put("var0", Tools.notEmpty(curriculumInfo.getString("CURRICULUMNAME")) ? curriculumInfo.getString("CURRICULUMNAME") : "");
if (archInfo != null && archInfo.getString("CORP_NAME") != null) {
context.put("var1", archInfo.getString("CORP_NAME"));
} else {
context.put("var1", Tools.notEmpty(classInfo.getString("CORP_NAME")) ? classInfo.getString("CORP_NAME") : "");
}
if (archInfo != null && archInfo.getString("CREATTIME") != null) {
Date creattime = formatter.parse(archInfo.getString("CREATTIME"));
context.put("var2", formatdate.format(creattime));
} else {
if (Tools.notEmpty(classInfo.getString("CREATTIME"))) {
Date creattime = formatter.parse(classInfo.getString("CREATTIME"));
context.put("var2", formatdate.format(creattime));
} else {
context.put("var2", "");
}
}
context.put("POSTTYPE_NAME", Tools.notEmpty(classInfo.getString("POSTTYPE_NAME")) ? classInfo.getString("POSTTYPE_NAME") : "");
if (archInfo != null && archInfo.getString("CODE") != null) {
context.put("var4", archInfo.getString("CODE"));
} else {
context.put("var4", Tools.notEmpty(classInfo.getString("CODE")) ? classInfo.getString("CODE") : "");
}
if (archInfo != null && archInfo.getString("END_TIME") != null) {
Date END_TIME = formatter.parse(archInfo.getString("END_TIME"));
context.put("var5", formatdate.format(END_TIME));
} else {
if (Tools.notEmpty(classInfo.getString("END_TIME"))) {
Date END_TIME = formatter.parse(classInfo.getString("END_TIME"));
context.put("var5", formatdate.format(END_TIME));
} else {
context.put("var5", "");
}
}
context.put("var6", Tools.notEmpty(curriculumInfo.getString("INDUSTRY_ALL_NAME")) ? curriculumInfo.getString("INDUSTRY_ALL_NAME") : "");
if (archInfo != null && StringUtils.isNotEmpty(archInfo.getString("REVIEW_PERSON"))) {
context.put("var7", archInfo.getString("REVIEW_PERSON"));
} else {
context.put("var7", " "); // 经费
}
if (archInfo != null && StringUtils.isNotEmpty(archInfo.getString("REVIEW_TIME"))) {
Date REVIEW_TIME = formatter.parse(archInfo.getString("REVIEW_TIME") + " 00:00:00");
context.put("var8", formatdate.format(REVIEW_TIME));
} else {
context.put("var8", " "); // 会审时间
}
List<TrainingPlanDao> list1 = new ArrayList<>(); //一共多少行
if (archInfo != null) {
PageData reviewersParameter = new PageData();
reviewersParameter.put("ARCHIVES_REVIEW_ID", archInfo.getString("ARCHIVES_REVIEW_ID"));
List<PageData> archlist = archivesReviewRecordService.listAll(reviewersParameter); //列出TrainingSchedule列表
for (int i = 0; i < archlist.size(); i++) {
TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类
trainingPlanDao.setValue1((String) archlist.get(i).get("NAME"));
trainingPlanDao.setValue2((String) archlist.get(i).get("DEPARTMENT_NAME"));
trainingPlanDao.setValue3((String) archlist.get(i).get("DUTIES"));
trainingPlanDao.setValue4((String) archlist.get(i).get("CHECK_OPINION"));
if (Tools.notEmpty(archlist.get(i).getString("SIGN_PICTURE"))) {
String SIGN_PATH = Const.HTTPFILEURL + (String) archlist.get(i).getString("SIGN_PICTURE");
URL SIGN_URL = new URL(SIGN_PATH);
trainingPlanDao.setPic2(new ByteArrayImageProvider(SIGN_URL.openStream())); //照片 读取网络路径
}
trainingPlanDao.setValue6(String.valueOf(i + 1));
list1.add(trainingPlanDao);
}
}
context.put("item", list1);
if (archInfo != null && archInfo.getString("enterpriseName") != null) {
context.put("var11", archInfo.getString("enterpriseName"));
} else {
context.put("var11", Tools.notEmpty(classInfo.getString("enterpriseName")) ? classInfo.getString("enterpriseName") : ""); //会审地点
}
if (archInfo != null) {
context.put("var9", Tools.notEmpty(archInfo.getString("BOOK_NUM")) ? archInfo.getString("BOOK_NUM") : ""); //初版书号
if (archInfo.getString("REVIEW_OPINIONS") == null) {
context.put("var10", Tools.notEmpty("此教材符合相关文件要求,同意使用。")); //会审意见
} else {
context.put("var10", archInfo.getString("REVIEW_OPINIONS")); //会审意见
}
pd.put("ARCHIVES_REVIEW_ID", archInfo.getString("ARCHIVES_REVIEW_ID"));
// List<PageData> archlist = archivesReviewRecordService.listAll(pd);!!!!!!!
} else {
context.put("var9", " "); //初版书号
context.put("var10", "此教材符合相关文件要求,同意使用。"); //会审意见
// context.put("archlist", null);
}
if (byteArrayImageProvider != null) {
context.put("pic", byteArrayImageProvider); // 公章
} else {
context.put("pic", " "); // 公章
}
FieldsMetadata fm = report.createFieldsMetadata();
// word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名
fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate);
fm.addFieldAsImage("pic2", "item.pic2", NullImageBehaviour.RemoveImageTemplate);
//Word模板中的表格数据对应的集合类型
fm.load("pic", IContext.class, false);
fm.load("item", TrainingPlanDao.class, true);
FileOutputStream out = new FileOutputStream(new File(projectPath + Const.FILEPATHFILE + pageData.getString("CURRICULUMNAME") + "-" + now + ".docx"));
report.process(context, out);
WordToPdfUtil.docToPdf(projectPath + Const.FILEPATHFILE + pageData.getString("CURRICULUMNAME") + "-" + now + ".docx",
projectPath + Const.FILEPATHFILE + pageData.getString("CURRICULUMNAME") + "-" + now + ".pdf");
//删除本地word pdf
File word = new File(projectPath + Const.FILEPATHFILE + pageData.getString("CURRICULUMNAME") + "-" + now + ".docx");
word.delete();
File pdf = new File(projectPath + Const.FILEPATHFILE + pageData.getString("CURRICULUMNAME") + "-" + now + ".pdf");
outsideFiles.add(pdf);
}
FileZip.zipList(projectPath + Const.TEMPZIPFILES + "安全培训教材会审表-" + nowZip + ".zip", outsideFiles);
for (File filepath : outsideFiles) {
filepath.delete(); //删除缓存文件
}
File file = new File(projectPath + Const.TEMPZIPFILES + "安全培训教材会审表-" + nowZip + ".zip");
return file;
}
@Override
public void afterPropertiesSet() throws Exception {
BatchExportFactory.register("archives100", this);
}
}