From bacf6060db26b161400fc4891bcc8f2e2a26f272 Mon Sep 17 00:00:00 2001 From: WendyYang Date: Tue, 1 Aug 2023 17:29:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=84=E5=AE=A1=E6=84=8F=E8=A7=81=E5=A1=AB?= =?UTF-8?q?=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pmapi/common/util/FreemarkerWordUtil.java | 16 +++- .../pmapi/expert/manage/ExpertReviewManage.java | 34 +++++++++ .../meeting/entity/dto/ExpertReviewTableDTO.java | 2 + .../pmapi/meeting/manage/ExpertExportManage.java | 2 + .../resources/template/meeting/专家评审单.ftl | 87 ++++++---------------- 5 files changed, 71 insertions(+), 70 deletions(-) diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/common/util/FreemarkerWordUtil.java b/pmapi/src/main/java/com/ningdatech/pmapi/common/util/FreemarkerWordUtil.java index e9042a6..cc5b787 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/common/util/FreemarkerWordUtil.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/common/util/FreemarkerWordUtil.java @@ -35,6 +35,16 @@ import java.util.zip.ZipOutputStream; @Slf4j public class FreemarkerWordUtil { + private static void setDownFileName(HttpServletResponse response, String fileName) { + String fileNameEncoded; + try { + fileNameEncoded = URLEncoder.encode(fileName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("文件名编码异常"); + } + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEncoded); + } + private static final Configuration CONFIGURATION = new Configuration(Configuration.VERSION_2_3_31); static { @@ -75,7 +85,7 @@ public class FreemarkerWordUtil { Template template = CONFIGURATION.getTemplate(templateName); response.setCharacterEncoding(StandardCharsets.UTF_8.displayName()); response.setContentType(ContentType.APPLICATION_JSON.getMimeType()); - response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8")); + setDownFileName(response, fileName); try (StringWriter out = new StringWriter(); Writer writer = new BufferedWriter(out, 4096)) { template.process(data, writer); @@ -97,9 +107,7 @@ public class FreemarkerWordUtil { public static void exportBatch(HttpServletResponse response, List fbeList, String fileName) throws IOException, TemplateException { response.setCharacterEncoding(StandardCharsets.UTF_8.displayName()); response.setContentType("application/zip"); - String encode = URLEncoder.encode(fileName, "UTF-8"); - response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encode); - + setDownFileName(response, fileName); try (ServletOutputStream os = response.getOutputStream(); ZipOutputStream zos = new ZipOutputStream(os)) { for (FreemarkerBatchExportDTO param : fbeList) { diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertReviewManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertReviewManage.java index 6272b20..e7772d5 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertReviewManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertReviewManage.java @@ -1,5 +1,6 @@ package com.ningdatech.pmapi.expert.manage; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -8,7 +9,9 @@ import com.ningdatech.basic.util.CollUtils; import com.ningdatech.cache.lock.DistributedLock; import com.ningdatech.file.entity.vo.result.AttachFileVo; import com.ningdatech.file.service.FileService; +import com.ningdatech.pmapi.expert.constant.ReviewResultEnum; import com.ningdatech.pmapi.expert.model.dto.ReviewTemplateOptionDTO; +import com.ningdatech.pmapi.expert.model.dto.ReviewTemplateSettingsDTO; import com.ningdatech.pmapi.expert.model.entity.ExpertReview; import com.ningdatech.pmapi.expert.model.entity.ReviewTemplateSettings; import com.ningdatech.pmapi.expert.model.req.ExpertReviewDetailReq; @@ -206,4 +209,35 @@ public class ExpertReviewManage { return expertReviewService.list(query); } + public Map buildExpertReviewToStr(Long meetingId) { + List reviews = listFinalExpertReviews(meetingId); + if (reviews.isEmpty()) { + return Collections.emptyMap(); + } + List templateIds = CollUtils.fieldList(reviews, ExpertReview::getTemplateId); + List ts = templateSettingsService.listByIds(templateIds); + Map tsMap = CollUtils.listToMap(ts, ReviewTemplateSettings::getId); + Map resMap = new HashMap<>(8); + for (ExpertReview review : reviews) { + ReviewTemplateSettings settings = tsMap.get(review.getTemplateId()); + List optionTemplates = JSONUtil.toList(settings.getContent(), ReviewTemplateSettingsDTO.class); + List options = JSONUtil.toList(review.getContent(), ReviewTemplateOptionDTO.class); + Map optionsMap = CollUtils.listToMap(options, ReviewTemplateOptionDTO::getQuestionSerialNo); + StringBuilder str = new StringBuilder(); + optionTemplates.forEach(ot -> { + ReviewTemplateOptionDTO rto = optionsMap.get(ot.getSerialNo()); + String optionsContent = ot.getOptions().stream() + .filter(w -> rto.getOptionSerialNo().contains(w.getSerialNo())) + .map(ReviewTemplateSettingsDTO.OptionDTO::getOption) + .collect(Collectors.joining("、")); + str.append("").append(ot.getTitle()).append(":").append(optionsContent).append(";"); + }); + str.append("").append("其他意见或建议").append(":") + .append(StrUtil.blankToDefault(review.getOtherAdvice(), "--")).append(";"); + str.append("").append("评审结果").append(":") + .append(ReviewResultEnum.getByCode(review.getReviewResult()).getValue()).append(";"); + resMap.put(review.getProjectId(), str.toString()); + } + return resMap; + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertReviewTableDTO.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertReviewTableDTO.java index 3eed40c..b74b69b 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertReviewTableDTO.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertReviewTableDTO.java @@ -25,4 +25,6 @@ public class ExpertReviewTableDTO implements Serializable { private String holdOrg; + private String reviewResult; + } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertExportManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertExportManage.java index e158d21..8b2c3cf 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertExportManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertExportManage.java @@ -151,6 +151,7 @@ public class ExpertExportManage { List fbeList; if (meeting.getIsInnerProject()) { List inners = meetingInnerProjectService.listByMeetingId(meetingId); + Map reviewResultMap = expertReviewManage.buildExpertReviewToStr(meetingId); List projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId); List projects = projectService.listByIds(projectIds); fbeList = projects.stream().map(w -> { @@ -160,6 +161,7 @@ public class ExpertExportManage { currData.setMeetingTime(startTime); currData.setMeetingAddress(meeting.getMeetingAddress()); currData.setProjectName(w.getProjectName()); + currData.setReviewResult(reviewResultMap.get(w.getId())); fbe.setData(currData); fbe.setTemplate(EXPERT_REVIEW); fbe.setFileName(w.getProjectName() + ".doc"); diff --git a/pmapi/src/main/resources/template/meeting/专家评审单.ftl b/pmapi/src/main/resources/template/meeting/专家评审单.ftl index 0981b1b..4e64923 100644 --- a/pmapi/src/main/resources/template/meeting/专家评审单.ftl +++ b/pmapi/src/main/resources/template/meeting/专家评审单.ftl @@ -553,21 +553,36 @@ - ${meetingTime},${holdOrg}组织专家在${meetingAddress}对${projectName}进行评审。专家组认真听取了项目业主方、建设方的情况汇报,审阅了项目材料,实地查看了设备及平台演示,专家组织质询、讨论后提出以下意见: + ${meetingTime},${holdOrg}组织专家在${meetingAddress}对${projectName} + 进行评审。专家组认真听取了项目业主方、建设方的情况汇报,审阅了项目材料,实地查看了设备及平台演示,专家组织质询、讨论后提出以下意见: - + - - + + + + + + + + + + + + + ${(reviewResult)!} + @@ -644,73 +659,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - +