org.apache.commons
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/common/util/WordUtil.java b/pmapi/src/main/java/com/ningdatech/pmapi/common/util/WordUtil.java
new file mode 100644
index 0000000..b6d173d
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/common/util/WordUtil.java
@@ -0,0 +1,119 @@
+package com.ningdatech.pmapi.common.util;
+
+import com.ningdatech.pmapi.meeting.entity.dto.ExpertFeeExportDTO;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+import org.springframework.core.io.ByteArrayResource;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.ArrayList;
+
+/**
+ *
+ * WordUtil
+ *
+ *
+ * @author WendyYang
+ * @since 2023/7/24
+ **/
+public class WordUtil {
+
+ private static final Configuration CONFIGURATION = new Configuration(Configuration.VERSION_2_3_31);
+
+ static {
+ CONFIGURATION.setDefaultEncoding("UTF-8");
+ CONFIGURATION.setClassForTemplateLoading(WordUtil.class, "/template");
+ }
+
+ /**
+ * 生成word文件
+ *
+ * @param dataMap word中需要展示的动态数据,用map集合来保存
+ * @param templateName word模板名称,例如:test.ftl
+ * @param filePath 文件生成的目标路径,例如:D:/wordFile/
+ * @param fileName 生成的文件名称,例如:test.doc
+ */
+ public static void create(Object dataMap, String templateName, String filePath, String fileName) {
+ try {
+
+
+ //获取模板
+ Template template = CONFIGURATION.getTemplate(templateName);
+
+ //输出文件
+ File outFile = new File(filePath + File.separator + fileName);
+
+ //如果输出目标文件夹不存在,则创建
+ if (!outFile.getParentFile().exists()) {
+ boolean ignore = outFile.getParentFile().mkdirs();
+ }
+
+ //将模板和数据模型合并生成文件
+ Writer out = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(outFile.toPath()), StandardCharsets.UTF_8));
+
+ //生成文件
+ template.process(dataMap, out);
+
+ //关闭流
+ out.flush();
+ out.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void export(String fileName, Object data, HttpServletResponse response, String templateName) throws TemplateException, IOException {
+ Template template = CONFIGURATION.getTemplate(templateName);
+ StringWriter out = new StringWriter();
+ Writer writer = new BufferedWriter(out, 4096);
+ template.process(data, writer);
+ InputStream fin = new ByteArrayResource(out.toString().getBytes(StandardCharsets.UTF_8)).getInputStream();
+ ServletOutputStream outputStream;
+ response.setCharacterEncoding(StandardCharsets.UTF_8.displayName());
+ response.setContentType("application/json");
+ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8"));
+ outputStream = response.getOutputStream();
+ // 缓冲区
+ byte[] buffer = new byte[1024];
+ int bytesToRead;
+ // 通过循环将读入的Word文件的内容输出到浏览器中
+ while ((bytesToRead = fin.read(buffer)) != -1) {
+ outputStream.write(buffer, 0, bytesToRead);
+ }
+ if (outputStream != null) {
+ outputStream.close();
+ }
+ fin.close();
+ }
+
+ public static void main(String[] args) {
+ ExpertFeeExportDTO dto = new ExpertFeeExportDTO();
+ dto.setMeetingAddress("杭州市滨江区海创还能到我当时防守打法十大发放");
+ dto.setMeetingTime("2023-01-01 12:20");
+ dto.setProjectName("阿萨法舒服舒服舒服舒服送达方");
+ dto.setTableData(new ArrayList<>());
+ for (int i = 0; i < 100; i++) {
+ ExpertFeeExportDTO.ExpertInfoDTO expert = new ExpertFeeExportDTO.ExpertInfoDTO();
+ expert.setNo(i);
+ expert.setBank("中国建设银行");
+ expert.setMobile("17839192616");
+ expert.setBankNo("121212121212121212");
+ expert.setCompany("宁大科技有限公司");
+ expert.setFee(BigDecimal.valueOf(500));
+ expert.setName("张三");
+ expert.setSex("男");
+ expert.setIdcard("121212121121");
+ dto.getTableData().add(expert);
+ }
+ create(dto, "专家费.ftl", "/Users/wendy/Desktop/", "专家费.doc");
+ }
+
+
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingExportController.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingExportController.java
new file mode 100644
index 0000000..0ac0126
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingExportController.java
@@ -0,0 +1,44 @@
+package com.ningdatech.pmapi.meeting.controller;
+
+import com.ningdatech.pmapi.meeting.manage.ExpertExportManage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ *
+ * MeetingExportController
+ *
+ *
+ * @author WendyYang
+ * @since 2023/7/24
+ **/
+@Api(tags = "会议信息导出")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/api/v1/meeting/export")
+public class MeetingExportController {
+
+
+ private final ExpertExportManage expertExportManage;
+
+
+ @GetMapping("/feeForExpert/{meetingId}")
+ @ApiOperation("专家费用单导出")
+ public void exportFeeForExpert(@PathVariable Long meetingId, HttpServletResponse response) {
+ expertExportManage.exportFeeForExpert(meetingId, response);
+ }
+
+ @GetMapping("/expertReviewTable/{meetingId}")
+ @ApiOperation("专家评审单导出")
+ public void expertReviewTable(@PathVariable Long meetingId, HttpServletResponse response) {
+ expertExportManage.expertReviewTable(meetingId, response);
+ }
+
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertFeeExportDTO.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertFeeExportDTO.java
new file mode 100644
index 0000000..68b2e64
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertFeeExportDTO.java
@@ -0,0 +1,52 @@
+package com.ningdatech.pmapi.meeting.entity.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.security.SecureRandom;
+import java.util.List;
+
+/**
+ *
+ * ExpertFeeExportDTO
+ *
+ *
+ * @author WendyYang
+ * @since 2023/7/24
+ **/
+@Data
+public class ExpertFeeExportDTO {
+
+ private String projectName;
+
+ private String meetingAddress;
+
+ private String meetingTime;
+
+ private List tableData;
+
+ @Data
+ public static class ExpertInfoDTO {
+
+ private Integer no;
+
+ private String name;
+
+ private String bank;
+
+ private String bankNo;
+
+ private String mobile;
+
+ private String sex;
+
+ private String company;
+
+ private BigDecimal fee;
+
+ private String idcard;
+
+ }
+
+
+}
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
new file mode 100644
index 0000000..e5c10d7
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertReviewTableDTO.java
@@ -0,0 +1,24 @@
+package com.ningdatech.pmapi.meeting.entity.dto;
+
+import lombok.Data;
+
+/**
+ *
+ * ExpertReviewTableDTO
+ *
+ *
+ * @author WendyYang
+ * @since 2023/7/24
+ **/
+@Data
+public class ExpertReviewTableDTO {
+
+ private String projectName;
+
+ private String meetingTime;
+
+ private String meetingAddress;
+
+ private String holdOrg;
+
+}
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
new file mode 100644
index 0000000..a5239b6
--- /dev/null
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertExportManage.java
@@ -0,0 +1,132 @@
+package com.ningdatech.pmapi.meeting.manage;
+
+import cn.hutool.core.lang.UUID;
+import cn.hutool.core.util.StrUtil;
+import com.ningdatech.basic.exception.BizException;
+import com.ningdatech.basic.util.CollUtils;
+import com.ningdatech.pmapi.common.util.WordUtil;
+import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
+import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
+import com.ningdatech.pmapi.meeting.entity.domain.Meeting;
+import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert;
+import com.ningdatech.pmapi.meeting.entity.domain.MeetingInnerProject;
+import com.ningdatech.pmapi.meeting.entity.domain.MeetingOuterProject;
+import com.ningdatech.pmapi.meeting.entity.dto.ExpertFeeExportDTO;
+import com.ningdatech.pmapi.meeting.entity.dto.ExpertReviewTableDTO;
+import com.ningdatech.pmapi.meeting.service.IMeetingExpertService;
+import com.ningdatech.pmapi.meeting.service.IMeetingInnerProjectService;
+import com.ningdatech.pmapi.meeting.service.IMeetingOuterProjectService;
+import com.ningdatech.pmapi.meeting.service.IMeetingService;
+import com.ningdatech.pmapi.projectlib.model.entity.Project;
+import com.ningdatech.pmapi.projectlib.service.IProjectService;
+import com.ningdatech.pmapi.sms.utils.DateUtil;
+import freemarker.template.TemplateException;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ *
+ * ExpertExportManage
+ *
+ *
+ * @author WendyYang
+ * @since 2023/7/24
+ **/
+@Slf4j
+@Component
+@AllArgsConstructor
+public class ExpertExportManage {
+
+ private final IMeetingService meetingService;
+ private final IMeetingExpertService meetingExpertService;
+ private final IMeetingInnerProjectService meetingInnerProjectService;
+ private final IMeetingOuterProjectService meetingOuterProjectService;
+ private final IExpertUserFullInfoService expertUserInfoService;
+ private final IProjectService projectService;
+
+ public void exportFeeForExpert(Long meetingId, HttpServletResponse response) {
+ final String template = "专家费.ftl";
+ String fileName = UUID.randomUUID().toString(true) + ".doc";
+ try {
+ Meeting meeting = meetingService.getById(meetingId);
+ ExpertFeeExportDTO data = new ExpertFeeExportDTO();
+ data.setMeetingTime(DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy-MM-dd HH:mm"));
+ data.setMeetingAddress(meeting.getMeetingAddress());
+ List projectNames = new ArrayList<>();
+ if (meeting.getIsInnerProject()) {
+ List inners = meetingInnerProjectService.listByMeetingId(meetingId);
+ List projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId);
+ List projects = projectService.listByIds(projectIds);
+ projects.forEach(w -> projectNames.add(w.getProjectName()));
+ } else {
+ List inners = meetingOuterProjectService.listByMeetingId(meetingId);
+ inners.forEach(w -> projectNames.add(w.getProjectName()));
+ }
+ data.setProjectName(StrUtil.join("、", projectNames));
+ data.setTableData(new ArrayList<>());
+ // 设置专家信息
+ List experts = meetingExpertService.listAgreedExperts(meetingId);
+ List expertIds = CollUtils.fieldList(experts, MeetingExpert::getExpertId);
+ List expertInfos = expertUserInfoService.listByUserId(expertIds);
+ Map expertMap = CollUtils.listToMap(expertInfos, ExpertUserFullInfo::getUserId);
+ AtomicInteger integer = new AtomicInteger(0);
+ experts.forEach(w -> {
+ ExpertFeeExportDTO.ExpertInfoDTO expert = new ExpertFeeExportDTO.ExpertInfoDTO();
+ expert.setNo(integer.incrementAndGet());
+ expert.setFee(BigDecimal.valueOf(500));
+ expert.setName(w.getExpertName());
+ expert.setMobile(w.getMobile());
+ ExpertUserFullInfo expertUser = expertMap.get(w.getExpertId());
+ if (expertUser != null) {
+ expert.setIdcard(expertUser.getIdCard());
+ expert.setBankNo(expertUser.getBankNo());
+ expert.setBank(expertUser.getBank());
+ expert.setCompany(expertUser.getCompany());
+ expert.setSex(expertUser.getGender());
+ }
+ data.getTableData().add(expert);
+ });
+ WordUtil.export(fileName, data, response, template);
+ } catch (TemplateException | IOException e) {
+ log.error("专家费用单导出异常:{}", meetingId, e);
+ throw BizException.wrap("专家费用单导出失败");
+ }
+ }
+
+ public void expertReviewTable(Long meetingId, HttpServletResponse response) {
+ final String template = "专家评审单.ftl";
+ String fileName = UUID.randomUUID().toString(true) + ".doc";
+ try {
+ Meeting meeting = meetingService.getById(meetingId);
+ ExpertReviewTableDTO data = new ExpertReviewTableDTO();
+ data.setMeetingTime(DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy年M月d日"));
+ data.setMeetingAddress(meeting.getMeetingAddress());
+ data.setHoldOrg(meeting.getHoldOrg());
+ List projectNames = new ArrayList<>();
+ if (meeting.getIsInnerProject()) {
+ List inners = meetingInnerProjectService.listByMeetingId(meetingId);
+ List projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId);
+ List projects = projectService.listByIds(projectIds);
+ projects.forEach(w -> projectNames.add(w.getProjectName()));
+ } else {
+ List inners = meetingOuterProjectService.listByMeetingId(meetingId);
+ inners.forEach(w -> projectNames.add(w.getProjectName()));
+ }
+ data.setProjectName(StrUtil.join("、", projectNames));
+ WordUtil.export(fileName, data, response, template);
+ } catch (TemplateException | IOException e) {
+ log.error("专家评审单导出异常:{}", meetingId, e);
+ throw BizException.wrap("专家评审单导出失败");
+ }
+ }
+
+}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectPreliminaryInspectionHandle.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectPreliminaryInspectionHandle.java
index 658c4f2..ffd7c1a 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectPreliminaryInspectionHandle.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectPreliminaryInspectionHandle.java
@@ -45,7 +45,8 @@ public class ProjectPreliminaryInspectionHandle extends AbstractProcessBusinessH
TO_BE_FINALLY_INSPECTED,
FINAL_ACCEPTANCE_IS_UNDER_REVIEW,
FINAL_ACCEPTANCE_REVIEW_FAILED,
- ARCHIVED
+ ARCHIVED,
+ ACCEPTED
);
public ProjectPreliminaryInspectionHandle(INdProjectStatusChangeService projectStatusChangeService, IProjectService projectService){
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/TenderPurchaseHandle.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/TenderPurchaseHandle.java
index bd39aa3..db9abad 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/TenderPurchaseHandle.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/TenderPurchaseHandle.java
@@ -43,7 +43,8 @@ public class TenderPurchaseHandle extends AbstractProcessBusinessHandle {
TO_BE_FINALLY_INSPECTED,
FINAL_ACCEPTANCE_IS_UNDER_REVIEW,
FINAL_ACCEPTANCE_REVIEW_FAILED,
- ARCHIVED
+ ARCHIVED,
+ ACCEPTED
);
public TenderPurchaseHandle(INdProjectStatusChangeService projectStatusChangeService, IProjectService projectService){
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
index 5e7a0b2..8c47c95 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
@@ -1,6 +1,5 @@
package com.ningdatech.pmapi.projectlib.model.entity;
-import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.*;
import com.ningdatech.pmapi.common.compare.Compare;
import io.swagger.annotations.ApiModel;
@@ -9,7 +8,6 @@ import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
-import java.time.LocalDate;
import java.time.LocalDateTime;
/**
@@ -474,14 +472,17 @@ public class Project implements Serializable {
private Long prePlanProjectId;
@ApiModelProperty("区县预审上级条线主管单位盖章审核意见")
- @Compare("区县预审上级条线主管单位盖章审核意见")
- private String countrySealAuditOpinion;
+ private String countryHigherSealAuditOpinion;
@ApiModelProperty("区县预审上级条线主管单位盖章审核日期")
- @Compare("区县预审上级条线主管单位盖章审核日期")
- private String countrySealAuditDate;
+ private String countryHigherSealAuditDate;
@ApiModelProperty("区县预审盖章上级条线主管单位印章编号")
- @Compare("区县预审盖章上级条线主管单位印章编号")
- private String countrySealNo;
+ private String countryHigherSealNo;
+
+ @ApiModelProperty("区县预审本级主管单位盖章审核意见")
+ private String countrySealAuditOpinion;
+
+ @ApiModelProperty("区县预审本级主管单位盖章审核日期")
+ private String countrySealAuditDate;
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/constant/TodoCenterConstant.java b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/constant/TodoCenterConstant.java
index 8cb42c8..5e90ab5 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/constant/TodoCenterConstant.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/constant/TodoCenterConstant.java
@@ -25,9 +25,9 @@ public interface TodoCenterConstant {
public static final String COUNTRY_TEMPLATE = "区县-预审申请单";
public static final String CONSTRUCT_TEMPLATE = "建设方案申请单";
- public static final String COUNTRY_SEAL_POS_PAGE = "7";
- public static final Float COUNTRY_SEAL_POS_X = 483F;
- public static final Float COUNTRY_SEAL_POS_Y = 619F;
+ public static final String COUNTRY_SEAL_POS_PAGE = "6";
+ public static final Float COUNTRY_SEAL_POS_X = 487F;
+ public static final Float COUNTRY_SEAL_POS_Y = 380F;
public static final Integer COUNTRY_SEAL_SIGN_TYPE = 1;
}
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
index 4031202..404d13c 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
@@ -28,7 +28,6 @@ import com.ningdatech.pmapi.todocenter.model.vo.TodoNumVO;
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails;
import com.wflow.contants.HisProInsEndActId;
import com.wflow.workflow.bean.dto.ReqAuditOpinionSaveDTO;
-import com.wflow.workflow.bean.process.ProcessComment;
import com.wflow.workflow.bean.process.enums.NodeTypeEnum;
import com.wflow.workflow.utils.ProcessTaskUtils;
import org.apache.commons.io.FileUtils;
@@ -1198,13 +1197,13 @@ public class TodoCenterManage {
// 以是否有上级主管单位的维度判断(有上级条线主管单位,才有可能需要盖两次章)
if (CommonEnum.YES.getCode().equals(isHigherSuperOrg)) {
// 盖章审核登录用户所在单位为上级条线主管单位,此时为区县预审盖章流程第一个章
- // 如果项目关联的预审文件ID和上级条线审核意见不为空,说明已经提交过审核意见,直接返回文件ID
- if (Boolean.TRUE.equals(getCountryNotSealedInfoVO(pretrialFileId, notSealedInfoVo,
- project.getCountrySealAuditOpinion()))){
- return notSealedInfoVo;
- }
if (empPosUnitCode.equals(higherSuperOrgCode)) {
// 有上级条线主管单位信息且登录用户所在单位是上级条线主管单位,
+ // 如果项目关联的预审文件ID和上级条线审核意见不为空,说明已经提交过审核意见,直接返回文件ID
+ if (Boolean.TRUE.equals(getCountryHigherNotSealedInfoVO(pretrialFileId, notSealedInfoVo,
+ project.getCountryHigherSealAuditOpinion()))){
+ return notSealedInfoVo;
+ }
countryParamsMap.put("higherOrgOpinion", auditOpinion);
countryParamsMap.put("higherOrgAuditDate", auditDate);
// 获取上级条线主管单位印章编号
@@ -1215,9 +1214,9 @@ public class TodoCenterManage {
sealNo = companySignature.getSealSn();
}
// 保存区县预审上级条线主管单位盖章审核意见、审核日期和盖章编号
- project.setCountrySealNo(sealNo);
- project.setCountrySealAuditOpinion(auditOpinion);
- project.setCountrySealAuditDate(auditDate);
+ project.setCountryHigherSealNo(sealNo);
+ project.setCountryHigherSealAuditOpinion(auditOpinion);
+ project.setCountryHigherSealAuditDate(auditDate);
projectService.updateById(project);
countryParamsMap.put("superOrgOpinion", null);
countryParamsMap.put("superOrgAuditDate", null);
@@ -1230,6 +1229,15 @@ public class TodoCenterManage {
// 有上级条线主管单位信息且有本级主管单位信息
// 有主管单位信息且登录用户所在单位是主管单位
// 装配本级主管单位审核意见
+ // 如果项目关联的预审文件ID和上级条线审核意见以及区县审核意见不为空,说明已经提交过审核意见,直接返回文件ID
+ if (Boolean.TRUE.equals(getCountryNotSealedInfoVO(pretrialFileId, notSealedInfoVo,
+ project.getCountryHigherSealAuditOpinion(),project.getCountrySealAuditOpinion()))){
+ return notSealedInfoVo;
+ }
+ // 保存区县本级主管单位盖章审核意见、审核日期
+ project.setCountrySealAuditOpinion(auditOpinion);
+ project.setCountrySealAuditDate(auditDate);
+ projectService.updateById(project);
checkEmpPosUnitCode(empPosUnitCode,auditOpinion,auditDate,superOrgCode,countryParamsMap);
// 装配上级条线主管单位意见,调用盖章接口,
// 重新生成上级条线主管单位盖章而本级主管单位未盖章的pdf文件
@@ -1239,6 +1247,15 @@ public class TodoCenterManage {
}else if (CommonEnum.NO.getCode().equals(isSuperOrg)) {
// 有上级条线主管单位信息,没有本级主管单位信息
// 没有选主管单位,默认为项目建设单位且登录用户所在单位为项目建设单位
+ // 如果项目关联的预审文件ID和上级条线审核意见以及区县审核意见不为空,说明已经提交过审核意见,直接返回文件ID
+ if (Boolean.TRUE.equals(getCountryNotSealedInfoVO(pretrialFileId, notSealedInfoVo,
+ project.getCountryHigherSealAuditOpinion(),project.getCountrySealAuditOpinion()))){
+ return notSealedInfoVo;
+ }
+ // 保存区县本级主管单位盖章审核意见、审核日期
+ project.setCountrySealAuditOpinion(auditOpinion);
+ project.setCountrySealAuditDate(auditDate);
+ projectService.updateById(project);
checkEmpPosUnitCode(empPosUnitCode,auditOpinion,auditDate,buildOrgCode,countryParamsMap);
// 装配上级条线主管单位意见,调用盖章接口,
// 重新生成上级条线主管单位盖章而本级主管单位未盖章的pdf文件
@@ -1316,7 +1333,7 @@ public class TodoCenterManage {
return false;
}
- private Boolean getCountryNotSealedInfoVO(Long fileId,NotSealedInfoVO notSealedInfoVo,String auditOpinion) {
+ private Boolean getCountryHigherNotSealedInfoVO(Long fileId, NotSealedInfoVO notSealedInfoVo, String auditOpinion) {
if (Objects.nonNull(fileId) && StringUtils.isNotBlank(auditOpinion)){
notSealedInfoVo.setFileId(fileId);
notSealedInfoVo.setIsCommit(Boolean.TRUE);
@@ -1325,9 +1342,20 @@ public class TodoCenterManage {
return false;
}
+ private Boolean getCountryNotSealedInfoVO(Long fileId, NotSealedInfoVO notSealedInfoVo, String higherAuditOpinion,
+ String auditOpinion) {
+ if (Objects.nonNull(fileId) && StringUtils.isNotBlank(higherAuditOpinion)
+ && StringUtils.isNotBlank(auditOpinion)){
+ notSealedInfoVo.setFileId(fileId);
+ notSealedInfoVo.setIsCommit(Boolean.TRUE);
+ return true;
+ }
+ return false;
+ }
+
private SealInfoDTO getHigherSealInfoDTO(Project project, JSONObject countryParamsMap) {
- String countrySealAuditOpinion = project.getCountrySealAuditOpinion();
- String countrySealAuditDate = project.getCountrySealAuditDate();
+ String countrySealAuditOpinion = project.getCountryHigherSealAuditOpinion();
+ String countrySealAuditDate = project.getCountryHigherSealAuditDate();
countryParamsMap.put("higherOrgOpinion", countrySealAuditOpinion);
countryParamsMap.put("higherOrgAuditDate", countrySealAuditDate);
SealInfoDTO sealInfoDTO = new SealInfoDTO();
@@ -1336,7 +1364,7 @@ public class TodoCenterManage {
sealInfoDTO.setPosX(TodoCenterConstant.SealTemplate.COUNTRY_SEAL_POS_X);
sealInfoDTO.setPosY(TodoCenterConstant.SealTemplate.COUNTRY_SEAL_POS_Y);
sealInfoDTO.setSignType(TodoCenterConstant.SealTemplate.COUNTRY_SEAL_SIGN_TYPE);
- sealInfoDTO.setSealSn(project.getCountrySealNo());
+ sealInfoDTO.setSealSn(project.getCountryHigherSealNo());
return sealInfoDTO;
}
@@ -1534,7 +1562,6 @@ public class TodoCenterManage {
}
public Long getSealedPdf(SealInfoDTO req) {
-
Long projectId = req.getProjectId();
Long notSealedFileId = req.getNotSealedFileId();
Project declaredProject = projectService.getById(projectId);
diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/model/vo/NotSealedInfoVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/model/vo/NotSealedInfoVO.java
index 2240e13..d7a44db 100644
--- a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/model/vo/NotSealedInfoVO.java
+++ b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/model/vo/NotSealedInfoVO.java
@@ -16,7 +16,5 @@ public class NotSealedInfoVO {
private Long fileId;
@ApiModelProperty("是否提交了审核意见")
- private Boolean isCommit;
-
-
+ private Boolean isCommit = Boolean.FALSE;
}
diff --git a/pmapi/src/main/resources/template/专家评审单.ftl b/pmapi/src/main/resources/template/专家评审单.ftl
new file mode 100644
index 0000000..849cb3c
--- /dev/null
+++ b/pmapi/src/main/resources/template/专家评审单.ftl
@@ -0,0 +1,799 @@
+
+
+
+ Data
+ 潦草迷茫
+ 2023-07-21T08:04:00Z
+ 2023-07-24T20:44:34Z
+ 12960
+ 14
+
+
+ wqlLaW5nc29mdCBQREYgdG8gV1BTIDkw
+ 2023-07-24T17:28:04Z
+ 2052-5.5.1.7991
+ 1DC93F630FB80A5D3272BE6472F2ECEB_43
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${projectName}
+
+
+
+
+
+
+
+
+
+ 专家评审意见
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${meetingTime},${holdOrg}组织专家在${meetingAddress}对${projectName}进行评审。专家组认真听取了项目业主方、建设方的情况汇报,审阅了项目材料,实地查看了设备及平台演示,专家组织质询、讨论后提出以下意见:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 专家组
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (签名
+
+
+
+
+
+
+
+
+ ):
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pmapi/src/main/resources/template/专家费.ftl b/pmapi/src/main/resources/template/专家费.ftl
new file mode 100644
index 0000000..19f61e9
--- /dev/null
+++ b/pmapi/src/main/resources/template/专家费.ftl
@@ -0,0 +1,1243 @@
+
+
+
+ Data
+ 潦草迷茫
+ 2023-07-21T08:03:00Z
+ 2023-07-24T19:10:05Z
+ 14400
+ 14
+
+
+ wqlLaW5nc29mdCBQREYgdG8gV1BTIDkw
+ 2023-07-24T17:28:04Z
+ 2052-5.5.1.7991
+ 29D84B9F4F9152F50D5CBE647D58FE28_43
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 丽水市大数据局信息化项目专家费
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 项目名称:
+
+
+
+
+
+
+
+ ${projectName}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 验收地点:
+
+
+
+
+
+
+
+ ${meetingAddress}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 日 期:
+
+
+
+
+
+
+
+ ${meetingTime}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 序
+
+
+
+
+
+
+
+
+
+
+
+ 号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 姓名
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 性
+
+
+
+
+
+
+
+
+
+
+
+
+ 别
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 身份证号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 单位
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 联系电话
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 评审费
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 开户行
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 账号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 签名
+
+
+
+
+ <#list tableData as rowData>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.no}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.name}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.sex}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.idcard}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.company}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.mobile}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.fee}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${(rowData.bank)!}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${rowData.bankNo}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #list>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 经办人
+
+
+
+
+
+
+
+
+
+
+
+ (签字
+
+
+
+
+
+ ):
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pmapi/src/main/resources/template/区县-预审申请单.html b/pmapi/src/main/resources/template/区县-预审申请单.html
index 26fbc80..c5242c9 100644
--- a/pmapi/src/main/resources/template/区县-预审申请单.html
+++ b/pmapi/src/main/resources/template/区县-预审申请单.html
@@ -37,6 +37,7 @@
color: #999999;
text-align: left;
margin-bottom: 8px;
+ margin-top: 0;
}
.projectId > .time {
float: right;
@@ -94,18 +95,12 @@
.h-100{
height: 100px;
}
- .h-800{
- height: 800px;
- }
- .h-1460{
- height: 1460px;
+ .h-400{
+ height: 400px;
}
.h-1200{
height: 1200px;
}
- .h-400{
- height: 400px;
- }
diff --git a/pmapi/src/main/resources/template/市级-预审申请单.html b/pmapi/src/main/resources/template/市级-预审申请单.html
index 75b1511..e6ffff5 100644
--- a/pmapi/src/main/resources/template/市级-预审申请单.html
+++ b/pmapi/src/main/resources/template/市级-预审申请单.html
@@ -9,7 +9,7 @@
Document