Quellcode durchsuchen

freemarker代码提交

user5 vor 2 Jahren
Ursprung
Commit
bb19b0c60c

+ 199 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/program/configuration/projectList/controller/ProjectListController.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.common.utils.ResponseUtil;
+import com.jeeplus.test.utils.FreemarkerUtil;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
 import com.jeeplus.core.excel.utils.EasyPoiUtil;
 import com.jeeplus.core.query.QueryWrapperGenerator;
 import com.jeeplus.sys.utils.StringUtils;
@@ -27,7 +30,12 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Api(tags ="项目列表管理")
 @RestController
@@ -184,4 +192,195 @@ public class ProjectListController {
             return ResponseEntity.badRequest().body("报告号生成失败");
         }
     }
+
+    /**
+     * 下载评估报告装订后浏览审核记录表
+     * 下载一级校审表
+     * @param response
+     * @param info
+     */
+    @RequestMapping(value="downloadFirstAuditTpl")
+    @ResponseBody
+    public void downloadFirstAuditTpl(HttpServletResponse response, ProgramProjectListInfo info)  {
+        Map data = projectListService.getAuditInfoMap(info);
+
+
+        //模板对象
+        Template template=null;
+        //freemaker模板路径
+        File path = new File(this.getClass().getResource("/").getPath()+"/freemarker");
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("firstAudit.ftl","UTF-8");
+
+            File docFile = new File("一级校审.doc");
+            FreemarkerUtil.generateFile(data,template,docFile);
+            com.jeeplus.test.utils.ResponseUtil.docResponse("一级校审.doc",docFile,response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+            //获取tomcat的路径
+            String tomcatFilePath=System.getProperty("catalina.home");
+            //删除tomcat目录下的处理后的文件信息
+            File tomcatFile = new File(tomcatFilePath+"/bin/"+"一级校审.doc");
+            if (tomcatFile.isFile()) {
+                tomcatFile.delete();
+            }
+        }
+
+    }
+
+    /**
+     * 下载二级校审表
+     * @param response
+     * @param info
+     */
+    @RequestMapping(value="downloadSecondAuditTpl")
+    @ResponseBody
+    public void downloadSecondAuditTpl(HttpServletResponse response, ProgramProjectListInfo info)  {
+        Map data = projectListService.getAuditInfoMap(info);
+
+
+        //模板对象
+        Template template=null;
+        //freemaker模板路径
+        File path = new File(this.getClass().getResource("/").getPath()+"/freemarker");
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("firstAudit.ftl","UTF-8");
+
+            File docFile = new File("二级校审.doc");
+            FreemarkerUtil.generateFile(data,template,docFile);
+            com.jeeplus.test.utils.ResponseUtil.docResponse("二级校审.doc",docFile,response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+            //获取tomcat的路径
+            String tomcatFilePath=System.getProperty("catalina.home");
+            //删除tomcat目录下的处理后的文件信息
+            File tomcatFile = new File(tomcatFilePath+"/bin/"+"二级校审.doc");
+            if (tomcatFile.isFile()) {
+                tomcatFile.delete();
+            }
+        }
+
+    }
+
+    /**
+     * 下载三级校审表
+     * @param response
+     * @param info
+     */
+    @RequestMapping(value="downloadThirdlyAuditTpl")
+    @ResponseBody
+    public void downloadThirdlyAuditTpl(HttpServletResponse response, ProgramProjectListInfo info)  {
+        Map data = projectListService.getAuditInfoMap(info);
+
+
+        //模板对象
+        Template template=null;
+        //freemaker模板路径
+        File path = new File(this.getClass().getResource("/").getPath()+"/freemarker");
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("thirdlyAudit.ftl","UTF-8");
+
+            File docFile = new File("三级校审.doc");
+            FreemarkerUtil.generateFile(data,template,docFile);
+            com.jeeplus.test.utils.ResponseUtil.docResponse("三级校审.doc",docFile,response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+            //获取tomcat的路径
+            String tomcatFilePath=System.getProperty("catalina.home");
+            //删除tomcat目录下的处理后的文件信息
+            File tomcatFile = new File(tomcatFilePath+"/bin/"+"三级校审.doc");
+            if (tomcatFile.isFile()) {
+                tomcatFile.delete();
+            }
+        }
+
+    }
+
+    /**
+     * 下载资产评估项目(校对)审核记录表
+     * @param response
+     * @param info
+     */
+    @RequestMapping(value="downloadProofreadAuditTpl")
+    @ResponseBody
+    public void downloadProofreadAuditTpl(HttpServletResponse response, ProgramProjectListInfo info)  {
+        Map data = projectListService.getProofreadAuditMap(info);
+
+
+        //模板对象
+        Template template=null;
+        //freemaker模板路径
+        File path = new File(this.getClass().getResource("/").getPath()+"/freemarker");
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("proofreadAudit.ftl","UTF-8");
+
+            File docFile = new File("资产评估项目(校对)审核记录表.xlsx");
+            FreemarkerUtil.generateFile(data,template,docFile);
+            com.jeeplus.test.utils.ResponseUtil.docResponse("资产评估项目(校对)审核记录表.xlsx",docFile,response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+            //获取tomcat的路径
+            String tomcatFilePath=System.getProperty("catalina.home");
+            //删除tomcat目录下的处理后的文件信息
+            File tomcatFile = new File(tomcatFilePath+"/bin/"+"资产评估项目(校对)审核记录表.xlsx");
+            if (tomcatFile.isFile()) {
+                tomcatFile.delete();
+            }
+        }
+
+    }
+
+    /**
+     * 下载评估报告装订后浏览审核记录表
+     * @param response
+     * @param info
+     */
+    @RequestMapping(value="downloadAuditRecordFormAfterBindingTpl")
+    @ResponseBody
+    public void downloadAuditRecordFormAfterBindingTpl(HttpServletResponse response, ProgramProjectListInfo info)  {
+        Map data = projectListService.getAuditRecordFormAfterBindingMap(info);
+
+
+        //模板对象
+        Template template=null;
+        //freemaker模板路径
+        File path = new File(this.getClass().getResource("/").getPath()+"/freemarker");
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("auditRecordFormAfterBinding.ftl","UTF-8");
+
+            File docFile = new File("评估报告装订后浏览审核记录表.xlsx");
+            FreemarkerUtil.generateFile(data,template,docFile);
+            com.jeeplus.test.utils.ResponseUtil.docResponse("评估报告装订后浏览审核记录表.xlsx",docFile,response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }finally {
+            //获取tomcat的路径
+            String tomcatFilePath=System.getProperty("catalina.home");
+            //删除tomcat目录下的处理后的文件信息
+            File tomcatFile = new File(tomcatFilePath+"/bin/"+"评估报告装订后浏览审核记录表.xlsx");
+            if (tomcatFile.isFile()) {
+                tomcatFile.delete();
+            }
+        }
+    }
+
 }

+ 341 - 3
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/program/configuration/projectList/service/ProjectListService.java

@@ -20,17 +20,20 @@ import com.jeeplus.test.program.configuration.projectList.mapper.*;
 import com.jeeplus.test.program.configuration.projectList.service.dto.*;
 import com.jeeplus.test.program.configuration.projectList.service.mapstruct.ProgramAuditAssessPeopleWrapper;
 import com.jeeplus.test.program.configuration.projectList.service.mapstruct.ProgramAuditWrapper;
+import com.jeeplus.test.proofread.domain.ProofreadDetail;
+import com.jeeplus.test.proofread.service.ProofreadInfoService;
+import com.jeeplus.test.proofread.service.dto.ProofreadInfoDto;
 import com.jeeplus.test.workContract.domain.WorkContractInfo;
 import com.jeeplus.test.workContract.mapper.WorkContractInfoMapper;
 import com.jeeplus.test.workContract.service.WorkContractService;
 import com.jeeplus.test.workContract.service.dto.WorkAttachmentDto;
+import org.apache.commons.compress.utils.Lists;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.UUID;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -57,6 +60,8 @@ public class ProjectListService {
     private ProgramReportNoMapper programReportNoMapper;
     @Resource
     private ProgramAuditAssessPeopleMapper programAuditAssessPeopleMapper;
+    @Resource
+    private ProofreadInfoService proofreadInfoService;
 
     public String save(ProjectListDto dto) throws Exception{
         if (StringUtils.isNotEmpty(dto.getId())) {
@@ -369,4 +374,337 @@ public class ProjectListService {
         }
         return reportNo;
     }
+
+    /**
+     * 查询校审数据信息并导出文档
+     * @param info
+     * @return
+     */
+    public Map<String,Object> getAuditInfoMap(ProgramProjectListInfo info){
+        Map data = new HashMap();
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年 MM月 dd日");
+
+        //查询项目信息
+        ProjectListDto projectDto = findById(info.getId());
+
+        //查询校审信息
+        ProgramAuditDto auditDto =null;
+        if(StringUtils.isNotBlank(info.getAuditId1())){
+            auditDto = findByIdAudit(info.getAuditId1());
+        }else if(StringUtils.isNotBlank(info.getAuditId2())) {
+            auditDto = findByIdAudit(info.getAuditId2());
+        }else if(StringUtils.isNotBlank(info.getAuditId3())) {
+            auditDto = findByIdAudit(info.getAuditId3());
+        }
+        //项目名称
+        data.put("projectName",projectDto.getName());
+        //评估基准日
+        Date assessmentDate=projectDto.getAssessmentDate();
+        if(null == assessmentDate){
+            data.put("assessBaseMessage","");
+        }else{
+            String str = sdf.format(assessmentDate);
+            data.put("assessBaseMessage",str);
+        }
+        //项目负责人
+        if(StringUtils.isBlank(projectDto.getProjectManager())){
+            data.put("projectMaster","");
+        }else{
+            data.put("projectMaster",UserUtils.get(projectDto.getProjectManager()).getName());
+        }
+        //如果存在审核意见则进行处理
+        if(null != auditDto){
+            //专业评估人员
+            List<ProgramAuditAssessPeopleDto> programAuditAssessPeopleDtoList = auditDto.getProgramAuditAssessPeopleDtoList();
+            List<String> appraiserList = Lists.newArrayList();
+            for (ProgramAuditAssessPeopleDto assessPeopleDto:programAuditAssessPeopleDtoList) {
+                appraiserList.add(UserUtils.get(assessPeopleDto.getAssessPeople()).getName());
+            }
+            data.put("appraisers",String.join(",",appraiserList));
+
+            //项目审核人
+            data.put("projectauditor",UserUtils.get(auditDto.getAuditPeople()).getName());
+            //明细表
+            data.put("detailedStatement",disposeAuditDetails(auditDto.getDetailOpinion()));
+            //评估报告
+            data.put("assessmentReport",disposeAuditDetails(auditDto.getReportOpinion()));
+            //技术说明
+            data.put("technicalDescription",disposeAuditDetails(auditDto.getRemarksOpinion()));
+            //工作底稿
+            data.put("workingPaper",disposeAuditDetails(auditDto.getWorkOpinion()));
+            //保留意见
+            data.put("qualifiedOpinion",auditDto.getRetainOpinion());
+            //执行人
+            data.put("executor",UserUtils.get(auditDto.getCreateBy().getId()).getName());
+
+            Date auditDate=projectDto.getAssessmentDate();
+            if(null == auditDate){
+                //执行人时间
+                data.put("executorDate","");
+                //审核人时间
+                data.put("auditorDate","");
+            }else{
+                String str = sdf.format(auditDate);
+                //执行人时间
+                data.put("executorDate",str);
+                //审核人时间
+                data.put("auditorDate",str);
+            }
+
+            //未修改意见
+            data.put("notModifiedOpinion",auditDto.getChangeOpinion());
+            //审核人
+            data.put("auditor",UserUtils.get(auditDto.getAuditPeople()).getName());
+
+        }
+        return data;
+    }
+
+    /**
+     * 审核内容处理
+     * @param auditDetails
+     * @return
+     */
+    private String disposeAuditDetails(String auditDetails){
+        if(StringUtils.isNotBlank(auditDetails)){
+            auditDetails = auditDetails.replaceAll("<p>","");
+            auditDetails = auditDetails.replaceAll("</p>","<w:br/>");
+            auditDetails = auditDetails.replaceAll("<br>","");
+        }
+        return auditDetails;
+    }
+
+
+
+    /**
+     * 查询校审数据信息并导出文档
+     * @param info
+     * @return
+     */
+    public Map<String,Object> getProofreadAuditMap(ProgramProjectListInfo info){
+        Map data = new HashMap();
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年 MM月 dd日");
+
+        //查询项目信息
+        ProjectListDto projectDto = findById(info.getId());
+
+        //查询自校数据信息信息
+        ProofreadInfoDto proofreadInfoDto = proofreadInfoService.findById(info.getId(),"1");
+
+        /**
+         * 自校明细表信息
+         */
+        List<ProofreadDetail> details = proofreadInfoDto.getDetails();
+        List<ProofreadDetail> detailedStatementList = Lists.newArrayList();
+        List<ProofreadDetail> assessmentInstructions1List = Lists.newArrayList();
+        List<ProofreadDetail> assessmentInstructions2List = Lists.newArrayList();
+        List<ProofreadDetail> assessmentInstructions3List = Lists.newArrayList();
+        List<ProofreadDetail> assessmentInstructions4List = Lists.newArrayList();
+        List<ProofreadDetail> assessmentInstructions5List = Lists.newArrayList();
+        List<ProofreadDetail> assessmentReportList = Lists.newArrayList();
+        Integer detailedStatement = 0;
+        Integer assessmentInstructions1 = 0;
+        Integer assessmentInstructions2 = 0;
+        Integer assessmentInstructions3 = 0;
+        Integer assessmentInstructions4 = 0;
+        Integer assessmentInstructions5 = 0;
+        Integer assessmentReport = 0;
+
+        for (ProofreadDetail item :details) {
+            if(item.getSort().startsWith("1010")){
+                detailedStatement ++ ;
+                item.setSerialNumber(detailedStatement);
+                detailedStatementList.add(item);
+            }else if(item.getSort().startsWith("2010")){
+                assessmentInstructions1 ++ ;
+                item.setSerialNumber(assessmentInstructions1);
+                assessmentInstructions1List.add(item);
+            }else if(item.getSort().startsWith("2020")){
+                assessmentInstructions2 ++ ;
+                item.setSerialNumber(assessmentInstructions2);
+                assessmentInstructions2List.add(item);
+            }else if(item.getSort().startsWith("2030")){
+                assessmentInstructions3 ++ ;
+                item.setSerialNumber(assessmentInstructions3);
+                assessmentInstructions3List.add(item);
+            }else if(item.getSort().startsWith("2040")){
+                assessmentInstructions4 ++ ;
+                item.setSerialNumber(assessmentInstructions4);
+                assessmentInstructions4List.add(item);
+            }else if(item.getSort().startsWith("2050")){
+                assessmentInstructions5 ++ ;
+                item.setSerialNumber(assessmentInstructions5);
+                assessmentInstructions5List.add(item);
+            }else if(item.getSort().startsWith("2060")){
+
+            }else if(item.getSort().startsWith("30")){
+                assessmentReport ++ ;
+                item.setSerialNumber(assessmentReport);
+                assessmentReportList.add(item);
+            }
+
+        }
+        data.put("detailedStatementList",detailedStatementList);
+        data.put("assessmentInstructions1List",assessmentInstructions1List);
+        data.put("assessmentInstructions2List",assessmentInstructions2List);
+        data.put("assessmentInstructions3List",assessmentInstructions3List);
+        data.put("assessmentInstructions4List",assessmentInstructions4List);
+        data.put("assessmentInstructions5List",assessmentInstructions5List);
+        data.put("assessmentReportList",assessmentReportList);
+
+
+        //项目名称
+        data.put("projectName",projectDto.getName());
+        //评估基准日
+        Date assessmentDate=projectDto.getAssessmentDate();
+        if(null == assessmentDate){
+            data.put("assessBaseMessage","");
+        }else{
+            String str = sdf.format(assessmentDate);
+            data.put("assessBaseMessage",str);
+        }
+        //项目负责人
+        if(StringUtils.isBlank(projectDto.getProjectManager())){
+            data.put("projectMaster","");
+        }else{
+            data.put("projectMaster",UserUtils.get(projectDto.getProjectManager()).getName());
+        }
+
+        //项目审核人
+        data.put("projectauditor","");
+        //项目审核时间
+        data.put("projectAuditDate","");
+        //审核人员签字
+        data.put("auditPersonnel","");
+        //项目审核时间
+        data.put("auditDate","");
+        //改正人员签字
+        data.put("correctPersonnel",UserUtils.get(proofreadInfoDto.getUpdateBy()).getName());
+        //项目审核时间
+        data.put("correctDate","");
+        //保留意见
+        data.put("qualifiedOpinion",proofreadInfoDto.getReservations());
+        //未修改意见
+        data.put("notModifiedOpinion",proofreadInfoDto.getUnmodifiedComments());
+        //执行人
+        data.put("executor",UserUtils.get(proofreadInfoDto.getUpdateBy()).getName());
+        //执行时间
+        Date executorDate=proofreadInfoDto.getUpdateDate();
+        if(null == executorDate){
+            data.put("executorDate","");
+        }else{
+            String str = sdf.format(executorDate);
+            data.put("executorDate",str);
+        }
+
+        return data;
+    }
+
+
+
+    /**
+     * 查询评估报告装订后浏览审核记录表并导出文档
+     * @param info
+     * @return
+     */
+    public Map<String,Object> getAuditRecordFormAfterBindingMap(ProgramProjectListInfo info){
+        Map data = new HashMap();
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年 MM月 dd日");
+
+        //查询项目信息
+        ProjectListDto projectDto = findById(info.getId());
+
+        //查询自校数据信息信息
+        ProofreadInfoDto proofreadInfoDto = proofreadInfoService.findById(info.getId(),"2");
+
+        /**
+         * 自校明细表信息
+         */
+
+        List<ProofreadDetail> details = proofreadInfoDto.getDetails();
+        List<ProofreadDetail> assessmentList = Lists.newArrayList();
+        List<ProofreadDetail> assessmentReportList = Lists.newArrayList();
+        List<ProofreadDetail> assessmentExplainList = Lists.newArrayList();
+        List<ProofreadDetail> assessmentDetailList = Lists.newArrayList();
+        Integer assessment = 0;
+        Integer assessmentReport = 0;
+        Integer assessmentExplain = 0;
+        Integer assessmentDetail = 0;
+
+        for (ProofreadDetail item :details) {
+            if(item.getSort().startsWith("40")){
+                assessment ++ ;
+                item.setSerialNumber(assessment);
+                assessmentList.add(item);
+            }else if(item.getSort().startsWith("50")){
+                assessmentReport ++ ;
+                item.setSerialNumber(assessmentReport);
+                assessmentReportList.add(item);
+            }else if(item.getSort().startsWith("60")){
+                assessmentExplain ++ ;
+                item.setSerialNumber(assessmentExplain);
+                assessmentExplainList.add(item);
+            }else if(item.getSort().startsWith("70")){
+                assessmentDetail ++ ;
+                item.setSerialNumber(assessmentDetail);
+                assessmentDetailList.add(item);
+            }
+
+        }
+
+        data.put("assessmentList",assessmentList);
+        data.put("assessmentReportList",assessmentReportList);
+        data.put("assessmentExplainList",assessmentExplainList);
+        data.put("assessmentDetailList",assessmentDetailList);
+
+
+        //项目名称
+        data.put("projectName",projectDto.getName());
+        //评估基准日
+        Date assessmentDate=projectDto.getAssessmentDate();
+        if(null == assessmentDate){
+            data.put("assessBaseMessage","");
+        }else{
+            String str = sdf.format(assessmentDate);
+            data.put("assessBaseMessage",str);
+        }
+        //项目负责人
+        if(StringUtils.isBlank(projectDto.getProjectManager())){
+            data.put("projectMaster","");
+        }else{
+            data.put("projectMaster",UserUtils.get(projectDto.getProjectManager()).getName());
+        }
+
+        //项目审核人
+        data.put("projectauditor","");
+        //项目审核时间
+        data.put("projectAuditDate","");
+        //审核人员签字
+        data.put("auditPersonnel","");
+        //项目审核时间
+        data.put("auditDate","");
+        //改正人员签字
+        data.put("correctPersonnel",UserUtils.get(proofreadInfoDto.getUpdateBy()).getName());
+        //项目审核时间
+        data.put("correctDate","");
+        //保留意见
+        data.put("qualifiedOpinion",proofreadInfoDto.getReservations());
+        //未修改意见
+        data.put("notModifiedOpinion",proofreadInfoDto.getUnmodifiedComments());
+        //执行人
+        data.put("executor",UserUtils.get(proofreadInfoDto.getUpdateBy()).getName());
+        //执行时间
+        Date executorDate=proofreadInfoDto.getUpdateDate();
+        if(null == executorDate){
+            data.put("executorDate","");
+        }else{
+            String str = sdf.format(executorDate);
+            data.put("executorDate",str);
+        }
+
+        return data;
+    }
 }

+ 5 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/proofread/domain/ProofreadDetail.java

@@ -10,6 +10,11 @@ import lombok.Data;
 public class ProofreadDetail extends BaseEntity {
 
     /**
+     * 序号
+     */
+    private Integer serialNumber;
+
+    /**
      * 基本信息
      */
     private String infoId;

+ 2 - 2
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/proofread/mapper/xml/ProofreadDetailMapper.xml

@@ -13,8 +13,8 @@
 			a.info_id,
 			a.type_id,
 			b.`name` AS type_name,
-			a.review_comments,
-			a.reply_comments,
+			ifnull(a.review_comments,"") as "reviewComments",
+			ifnull(a.reply_comments,"") as "replyComments",
 			b.sort
 		FROM proofread_type b
 		LEFT JOIN proofread_detail a ON a.type_id = b.id

+ 25 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/utils/FreemarkerUtil.java

@@ -0,0 +1,25 @@
+package com.jeeplus.test.utils;
+
+import freemarker.template.Template;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.Map;
+
+public class FreemarkerUtil {
+    public static void generateFile(Map<?, ?> dataMap, Template template, File file){
+
+        Template t = template;
+        try {
+            // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
+            Writer w = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
+            t.process(dataMap, w);
+            w.close();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new RuntimeException(ex);
+        }
+    }
+}

+ 59 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/utils/ResponseUtil.java

@@ -0,0 +1,59 @@
+package com.jeeplus.test.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.Calendar;
+
+public class ResponseUtil {
+    private static Logger logger = LoggerFactory.getLogger(ResponseUtil.class);
+
+    public static void docResponse(String fileName, File file, HttpServletResponse response) {
+        ServletOutputStream out = null;
+        FileInputStream fin = null;
+        try {
+            fin = new FileInputStream(file);
+            response.setCharacterEncoding("utf-8");
+            response.setContentType("application/octet-stream; charset=UTF-8");
+            // 设置浏览器以下载的方式处理该文件名
+            response.setHeader("Content-Disposition", "attachment;filename="
+                    .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
+            out = response.getOutputStream();
+            byte[] buffer = new byte[1024];  // 缓冲区
+            int bytesToRead = -1;
+            // 通过循环将读入的Word文件的内容输出到浏览器中
+            while ((bytesToRead = fin.read(buffer)) != -1) {
+                out.write(buffer, 0, bytesToRead);
+            }
+        } catch (Exception e) {
+            logger.error("导出模板文件发生错误!",e);
+        } finally {
+            try {
+                out.flush();
+                if (fin != null) fin.close();
+                if (out != null) out.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+    }
+
+
+    /**
+     * 获取当前时间年月日
+     * @return
+     */
+    public static String datePath(){
+        Calendar date = Calendar.getInstance();
+        String year = String.valueOf(date.get(Calendar.YEAR));
+        String month = String.valueOf(date.get(Calendar.MONTH)+1);
+        String day = String.valueOf(date.get(Calendar.DAY_OF_MONTH));
+        String path = "/"+year+"/"+month+"/"+day;
+        return path;
+    }
+}

+ 0 - 24
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/filter/PropertyPreExcludeFilter.java

@@ -1,24 +0,0 @@
-package com.jeeplus.filter;
-
-import com.alibaba.fastjson2.filter.SimplePropertyPreFilter;
-
-/**
- * 排除JSON敏感属性
- * 
- * @author ruoyi
- */
-public class PropertyPreExcludeFilter extends SimplePropertyPreFilter
-{
-    public PropertyPreExcludeFilter()
-    {
-    }
-
-    public PropertyPreExcludeFilter addExcludes(String... filters)
-    {
-        for (int i = 0; i < filters.length; i++)
-        {
-            this.getExcludes().add(filters[i]);
-        }
-        return this;
-    }
-}

+ 631 - 0
jeeplus-web/src/main/resources/freemarker/auditRecordFormAfterBinding.ftl

@@ -0,0 +1,631 @@
+<?xml version="1.0"?>
+<?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
+		  xmlns:o="urn:schemas-microsoft-com:office:office"
+		  xmlns:x="urn:schemas-microsoft-com:office:excel"
+		  xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
+		  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
+		  xmlns:html="http://www.w3.org/TR/REC-html40">
+	<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
+		<Author>徐滕</Author>
+		<LastAuthor>徐滕</LastAuthor>
+		<Created>2022-10-20T05:33:45Z</Created>
+		<LastSaved>2022-10-20T05:53:46Z</LastSaved>
+		<Version>16.00</Version>
+	</DocumentProperties>
+	<CustomDocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
+		<ICV dt:dt="string">416D7A18A3A947CA8F5937DF8CC0B323</ICV>
+		<KSOProductBuildVer dt:dt="string">2052-11.1.0.12132</KSOProductBuildVer>
+	</CustomDocumentProperties>
+	<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
+		<AllowPNG/>
+	</OfficeDocumentSettings>
+	<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
+		<WindowHeight>17790</WindowHeight>
+		<WindowWidth>19200</WindowWidth>
+		<WindowTopX>32767</WindowTopX>
+		<WindowTopY>32767</WindowTopY>
+		<ProtectStructure>False</ProtectStructure>
+		<ProtectWindows>False</ProtectWindows>
+	</ExcelWorkbook>
+	<Styles>
+		<Style ss:ID="Default" ss:Name="Normal">
+			<Alignment ss:Vertical="Center"/>
+											<Borders/>
+													 <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+																															<Interior/>
+																																	  <NumberFormat/>
+																																					<Protection/>
+		</Style>
+		<Style ss:ID="m1443364801392">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																							   </Borders>
+																																																																								 <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
+																																																																																						   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364799376">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
+																																																																																						<Interior/>
+		</Style>
+		<Style ss:ID="m1443364799396">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364799416">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						  </Borders>
+																																																							<Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																								 <Interior/>
+		</Style>
+		<Style ss:ID="m1443364799436">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																							   </Borders>
+																																																																								 <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
+																																																																																						   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364799456">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						  </Borders>
+																																																							<Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																								 <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792656">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																							   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																								 </Borders>
+																																																																																								   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+																																																																																																													<Interior/>
+		</Style>
+		<Style ss:ID="m1443364792696">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792716">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792736">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792320">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792340">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792360">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792380">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364792400">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364791312">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364791332">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364791352">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364791372">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																							   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																								 </Borders>
+																																																																																								   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+																																																																																																													<Interior/>
+		</Style>
+		<Style ss:ID="m1443364790976">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364790996">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364791016">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																							   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																								 </Borders>
+																																																																																								   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+																																																																																																													<Interior/>
+		</Style>
+		<Style ss:ID="m1443364791056">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
+																				 <Borders>
+																				 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																					  <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																						  <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							</Borders>
+																																																																							  <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																								   <Interior/>
+		</Style>
+		<Style ss:ID="m1443364786332">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																							   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																																								 </Borders>
+																																																																																								   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+																																																																																																													<Interior/>
+		</Style>
+		<Style ss:ID="s66">
+			<Alignment ss:Vertical="Center"/>
+											<Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																												 <Interior/>
+		</Style>
+		<Style ss:ID="s67">
+			<Alignment ss:Vertical="Center"/>
+											<Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
+																									  <Interior/>
+		</Style>
+		<Style ss:ID="s68">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
+																 <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
+																														   <Interior/>
+																																	 <NumberFormat ss:Format="yyyy&quot;年&quot;m&quot;月&quot;d&quot;日&quot;;@"/>
+		</Style>
+		<Style ss:ID="s69">
+			<Alignment ss:Horizontal="Justify" ss:Vertical="Center"/>
+																	<Borders/>
+																			 <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																				  <Interior/>
+		</Style>
+		<Style ss:ID="s70">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
+																 <Borders/>
+																		  <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
+																																	<Interior/>
+																																			  <NumberFormat ss:Format="yyyy&quot;年&quot;m&quot;月&quot;d&quot;日&quot;;@"/>
+		</Style>
+		<Style ss:ID="s71">
+			<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
+																 <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																	  <Interior/>
+		</Style>
+		<Style ss:ID="s72">
+			<Alignment ss:Horizontal="Justify" ss:Vertical="Center"/>
+																	<Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																		 <Interior/>
+		</Style>
+		<Style ss:ID="s73">
+			<Alignment ss:Vertical="Center"/>
+											<Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																												 <Interior/>
+		</Style>
+		<Style ss:ID="s81">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+																   <Borders>
+																   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																		<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																		   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																			   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																				 </Borders>
+																																																																																				   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
+																																																																																																						 <Interior/>
+		</Style>
+		<Style ss:ID="s82">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+																   <Borders>
+																   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																		<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																		   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																			   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																				 </Borders>
+																																																																																				   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
+																																																																																																						 <Interior/>
+		</Style>
+		<Style ss:ID="s83">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+																   <Borders>
+																   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																		<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																		   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																			   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																				 </Borders>
+																																																																																				   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																																						<Interior/>
+		</Style>
+		<Style ss:ID="s86">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+																   <Borders>
+																   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																		<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																		   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																			   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																				 </Borders>
+																																																																																				   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+																																																																																																						  <Interior/>
+		</Style>
+		<Style ss:ID="s87">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+																   <Borders>
+																   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																		<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																		   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																																			   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																				 </Borders>
+																																																																																				   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
+																																																																																																						  <Interior/>
+		</Style>
+		<Style ss:ID="s89">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																								 </Borders>
+																																																																																								   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																																																																										<Interior/>
+		</Style>
+		<Style ss:ID="s91">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																					  </Borders>
+																																						<Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																							 <Interior/>
+		</Style>
+		<Style ss:ID="s92">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																						<Interior/>
+		</Style>
+		<Style ss:ID="s93">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders/>
+																							<Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																								 <Interior/>
+		</Style>
+		<Style ss:ID="s94">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																					   </Borders>
+																																						 <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000"/>
+																																																							  <Interior/>
+		</Style>
+		<Style ss:ID="s103">
+			<Alignment ss:Horizontal="Right" ss:Vertical="Center"/>
+																  <Borders/>
+																		   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
+																																	 <Interior/>
+		</Style>
+		<Style ss:ID="s104">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
+																   <Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="16"
+			ss:Color="#000000" ss:Bold="1"/>
+										   <Interior/>
+		</Style>
+		<Style ss:ID="s111">
+			<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
+																				   <Borders>
+																				   <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																						<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/>
+																																																						   <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																							   <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
+																																																																																								 </Borders>
+																																																																																								   <Font ss:FontName="Arial Narrow" x:Family="Swiss" ss:Color="#000000" ss:Bold="1"/>
+																																																																																																													<Interior/>
+		</Style>
+	</Styles>
+	<Worksheet ss:Name="Sheet1">
+		<Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="35" x:FullColumns="1"
+			   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
+			<Column ss:AutoFitWidth="0" ss:Width="39"/>
+			<Column ss:AutoFitWidth="0" ss:Width="28.5"/>
+			<Column ss:AutoFitWidth="0" ss:Width="314.25"/>
+			<Column ss:AutoFitWidth="0" ss:Width="100.5" ss:Span="1"/>
+			<Row ss:AutoFitHeight="0" ss:Height="15">
+				<Cell ss:MergeAcross="4" ss:StyleID="s103"><Data ss:Type="String">索引号:G-1-6-7</Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="30">
+				<Cell ss:MergeAcross="4" ss:StyleID="s104"><Data ss:Type="String">评估报告装订后浏览审核记录表</Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:StyleID="s66"><ss:Data ss:Type="String"
+												xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																							  html:Color="#000000">项目名称:</Font></ss:Data></Cell>
+				<Cell ss:StyleID="s66"/>
+				<Cell ss:MergeAcross="2" ss:StyleID="s67"><Data ss:Type="String">${projectName}</Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:StyleID="s66"><ss:Data ss:Type="String"
+												xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																							  html:Color="#000000">评估基准日:</Font></ss:Data></Cell>
+				<Cell ss:StyleID="s66"/>
+				<Cell ss:StyleID="s68"><Data ss:Type="String">${assessBaseMessage}</Data></Cell>
+				<Cell ss:StyleID="s66"><ss:Data ss:Type="String"
+												xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																							  html:Color="#000000">项目负责人:</Font></ss:Data></Cell>
+				<Cell ss:StyleID="s67"><Data ss:Type="String">${projectMaster}</Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:StyleID="s66"><ss:Data ss:Type="String"
+												xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																							  html:Color="#000000">项目审核人:</Font></ss:Data></Cell>
+				<Cell ss:StyleID="s66"/>
+				<Cell ss:StyleID="s67"><Data ss:Type="String">${projectauditor}</Data></Cell>
+				<Cell ss:StyleID="s69"><ss:Data ss:Type="String"
+												xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																							  html:Color="#000000">审核日期:</Font></ss:Data></Cell>
+				<Cell ss:StyleID="s70"><Data ss:Type="String">${projectAuditDate}</Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:StyleID="s71"/>
+				<Cell ss:StyleID="s71"/>
+				<Cell ss:StyleID="s71"/>
+				<Cell ss:StyleID="s72"/>
+				<Cell ss:StyleID="s73"/>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="27">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364786332"><ss:Data ss:Type="String"
+																			  xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																															   x:CharSet="134" html:Color="#000000">一、报告、说明、明细表一致性</Font></B></ss:Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="2" ss:StyleID="s111"><ss:Data ss:Type="String"
+																	xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																													 x:CharSet="134" html:Color="#000000">审核要点</Font></B></ss:Data></Cell>
+				<Cell ss:StyleID="s81"><Data ss:Type="String">审核情况(√/×)</Data></Cell>
+				<Cell ss:StyleID="s82"><Data ss:Type="String">改正情况(√/×)</Data></Cell>
+			</Row>
+
+			<#list assessmentList as assessment>
+				<Row ss:AutoFitHeight="0" ss:Height="18">
+					<Cell ss:StyleID="s83"><Data ss:Type="Number">${assessment.serialNumber}</Data></Cell>
+					<Cell ss:MergeAcross="1" ss:StyleID="m1443364790976"><ss:Data ss:Type="String"
+																				  xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																																html:Color="#000000">${assessment.typeName}</Font></ss:Data></Cell>
+					<Cell ss:StyleID="s86"><Data ss:Type="String">${assessment.reviewComments}</Data></Cell>
+					<Cell ss:StyleID="s87"><Data ss:Type="String">${assessment.replyComments}</Data></Cell>
+				</Row>
+			</#list>
+
+
+			<Row ss:AutoFitHeight="0" ss:Height="27">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364791016"><ss:Data ss:Type="String"
+																			  xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																															   x:CharSet="134" html:Color="#000000">二、评估报告</Font></B></ss:Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="2" ss:StyleID="s111"><ss:Data ss:Type="String"
+																	xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																													 x:CharSet="134" html:Color="#000000">审核要点</Font></B></ss:Data></Cell>
+				<Cell ss:StyleID="s81"><Data ss:Type="String">审核情况(√/×)</Data></Cell>
+				<Cell ss:StyleID="s82"><Data ss:Type="String">改正情况(√/×)</Data></Cell>
+			</Row>
+
+			<#list assessmentReportList as assessmentReport>
+				<Row ss:AutoFitHeight="0" ss:Height="18">
+					<Cell ss:StyleID="s83"><Data ss:Type="Number">${assessmentReport.serialNumber}</Data></Cell>
+					<Cell ss:MergeAcross="1" ss:StyleID="m1443364791056"><ss:Data ss:Type="String"
+																				  xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																																html:Color="#000000">${assessmentReport.typeName}</Font></ss:Data></Cell>
+					<Cell ss:StyleID="s86"><Data ss:Type="String">${assessmentReport.reviewComments}</Data></Cell>
+					<Cell ss:StyleID="s87"><Data ss:Type="String">${assessmentReport.replyComments}</Data></Cell>
+				</Row>
+			</#list>
+
+
+			<Row ss:AutoFitHeight="0" ss:Height="27">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364791372"><ss:Data ss:Type="String"
+																			  xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																															   x:CharSet="134" html:Color="#000000">三、评估说明</Font></B></ss:Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="2" ss:StyleID="s111"><ss:Data ss:Type="String"
+																	xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																													 x:CharSet="134" html:Color="#000000">审核要点</Font></B></ss:Data></Cell>
+				<Cell ss:StyleID="s81"><Data ss:Type="String">审核情况(√/×)</Data></Cell>
+				<Cell ss:StyleID="s82"><Data ss:Type="String">改正情况(√/×)</Data></Cell>
+			</Row>
+
+			<#list assessmentExplainList as assessmentExplain>
+				<Row ss:AutoFitHeight="0" ss:Height="18">
+					<Cell ss:StyleID="s83"><Data ss:Type="Number">${assessmentExplain.serialNumber}</Data></Cell>
+					<Cell ss:MergeAcross="1" ss:StyleID="m1443364792320"><ss:Data ss:Type="String"
+																				  xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																																html:Color="#000000">${assessmentExplain.typeName}</Font></ss:Data></Cell>
+					<Cell ss:StyleID="s86"><Data ss:Type="String">${assessmentExplain.reviewComments}</Data></Cell>
+					<Cell ss:StyleID="s87"><Data ss:Type="String">${assessmentExplain.replyComments}</Data></Cell>
+				</Row>
+			</#list>
+
+
+			<Row ss:AutoFitHeight="0" ss:Height="27">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364792656"><ss:Data ss:Type="String"
+																			  xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																															   x:CharSet="134" html:Color="#000000">四、评估明细表</Font></B></ss:Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="2" ss:StyleID="s111"><ss:Data ss:Type="String"
+																	xmlns="http://www.w3.org/TR/REC-html40"><B><Font html:Face="宋体"
+																													 x:CharSet="134" html:Color="#000000">审核要点</Font></B></ss:Data></Cell>
+				<Cell ss:StyleID="s81"><Data ss:Type="String">审核情况(√/×)</Data></Cell>
+				<Cell ss:StyleID="s82"><Data ss:Type="String">改正情况(√/×)</Data></Cell>
+			</Row>
+
+			<#list assessmentDetailList as assessmentDetail>
+				<Row ss:AutoFitHeight="0" ss:Height="18">
+					<Cell ss:StyleID="s83"><Data ss:Type="Number">${assessmentDetail.serialNumber}</Data></Cell>
+					<Cell ss:MergeAcross="1" ss:StyleID="m1443364792320"><ss:Data ss:Type="String"
+																				  xmlns="http://www.w3.org/TR/REC-html40"><Font html:Face="宋体" x:CharSet="134"
+																																html:Color="#000000">${assessmentDetail.typeName}</Font></ss:Data></Cell>
+					<Cell ss:StyleID="s86"><Data ss:Type="String">${assessmentDetail.reviewComments}</Data></Cell>
+					<Cell ss:StyleID="s87"><Data ss:Type="String">${assessmentDetail.replyComments}</Data></Cell>
+				</Row>
+			</#list>
+
+
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:StyleID="s91"/>
+				<Cell ss:StyleID="s92"/>
+				<Cell ss:StyleID="s93"/>
+				<Cell ss:StyleID="s93"/>
+				<Cell ss:StyleID="s94"/>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364799416"/>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364799436"><ss:Data ss:Type="String"
+																			  xmlns="http://www.w3.org/TR/REC-html40"><Font html:Color="#000000">审核人员签字:${auditPersonnel}</Font><Font
+								html:Face="Arial Narrow" x:Family="Swiss" html:Color="#000000">                                                                                             </Font>
+						<Font html:Color="#000000">${auditDate}</Font></ss:Data></Cell>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364799456"/>
+			</Row>
+			<Row ss:AutoFitHeight="0" ss:Height="18">
+				<Cell ss:MergeAcross="4" ss:StyleID="m1443364801392"><ss:Data ss:Type="String"
+																			  xmlns="http://www.w3.org/TR/REC-html40"><Font html:Color="#000000">改正人员签字:${correctPersonnel}</Font><Font
+								html:Face="Arial Narrow" x:Family="Swiss" html:Color="#000000">                                                                                            </Font>
+						<Font html:Color="#000000">${correctDate}</Font></ss:Data></Cell>
+			</Row>
+		</Table>
+		<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
+			<Selected/>
+			<Panes>
+				<Pane>
+					<Number>3</Number>
+					<ActiveRow>16</ActiveRow>
+					<ActiveCol>6</ActiveCol>
+				</Pane>
+			</Panes>
+			<ProtectObjects>False</ProtectObjects>
+			<ProtectScenarios>False</ProtectScenarios>
+		</WorksheetOptions>
+	</Worksheet>
+</Workbook>

Datei-Diff unterdrückt, da er zu groß ist
+ 1978 - 0
jeeplus-web/src/main/resources/freemarker/firstAudit.ftl


Datei-Diff unterdrückt, da er zu groß ist
+ 1265 - 0
jeeplus-web/src/main/resources/freemarker/proofreadAudit.ftl


Datei-Diff unterdrückt, da er zu groß ist
+ 1978 - 0
jeeplus-web/src/main/resources/freemarker/secondAuditFtl.ftl


Datei-Diff unterdrückt, da er zu groß ist
+ 1978 - 0
jeeplus-web/src/main/resources/freemarker/thirdlyAudit.ftl


BIN
userfiles/1/程序附件/vueEditor/2022/10/login.png