ソースを参照

Merge remote-tracking branch 'origin/master'

master
PoffyZhang 1年前
コミット
218cfc0b34
17個のファイルの変更2481行の追加40行の削除
  1. +4
    -1
      pmapi/pom.xml
  2. +119
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/util/WordUtil.java
  3. +44
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingExportController.java
  4. +52
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertFeeExportDTO.java
  5. +24
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/dto/ExpertReviewTableDTO.java
  6. +132
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertExportManage.java
  7. +2
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/ProjectPreliminaryInspectionHandle.java
  8. +2
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/handle/TenderPurchaseHandle.java
  9. +9
    -8
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
  10. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/todocenter/constant/TodoCenterConstant.java
  11. +41
    -14
      pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
  12. +1
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/todocenter/model/vo/NotSealedInfoVO.java
  13. +799
    -0
      pmapi/src/main/resources/template/专家评审单.ftl
  14. +1243
    -0
      pmapi/src/main/resources/template/专家费.ftl
  15. +3
    -8
      pmapi/src/main/resources/template/区县-预审申请单.html
  16. +2
    -1
      pmapi/src/main/resources/template/市级-预审申请单.html
  17. +1
    -0
      pmapi/src/main/resources/template/建设方案申请单.html

+ 4
- 1
pmapi/pom.xml ファイルの表示

@@ -43,7 +43,10 @@
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--spring boot 集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>


+ 119
- 0
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;

/**
* <p>
* WordUtil
* </p>
*
* @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");
}


}

+ 44
- 0
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;

/**
* <p>
* MeetingExportController
* </p>
*
* @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);
}

}

+ 52
- 0
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;

/**
* <p>
* ExpertFeeExportDTO
* </p>
*
* @author WendyYang
* @since 2023/7/24
**/
@Data
public class ExpertFeeExportDTO {

private String projectName;

private String meetingAddress;

private String meetingTime;

private List<ExpertInfoDTO> 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;

}


}

+ 24
- 0
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;

/**
* <p>
* ExpertReviewTableDTO
* </p>
*
* @author WendyYang
* @since 2023/7/24
**/
@Data
public class ExpertReviewTableDTO {

private String projectName;

private String meetingTime;

private String meetingAddress;

private String holdOrg;

}

+ 132
- 0
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;

/**
* <p>
* ExpertExportManage
* </p>
*
* @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<String> projectNames = new ArrayList<>();
if (meeting.getIsInnerProject()) {
List<MeetingInnerProject> inners = meetingInnerProjectService.listByMeetingId(meetingId);
List<Long> projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId);
List<Project> projects = projectService.listByIds(projectIds);
projects.forEach(w -> projectNames.add(w.getProjectName()));
} else {
List<MeetingOuterProject> inners = meetingOuterProjectService.listByMeetingId(meetingId);
inners.forEach(w -> projectNames.add(w.getProjectName()));
}
data.setProjectName(StrUtil.join("、", projectNames));
data.setTableData(new ArrayList<>());
// 设置专家信息
List<MeetingExpert> experts = meetingExpertService.listAgreedExperts(meetingId);
List<Long> expertIds = CollUtils.fieldList(experts, MeetingExpert::getExpertId);
List<ExpertUserFullInfo> expertInfos = expertUserInfoService.listByUserId(expertIds);
Map<Long, ExpertUserFullInfo> 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<String> projectNames = new ArrayList<>();
if (meeting.getIsInnerProject()) {
List<MeetingInnerProject> inners = meetingInnerProjectService.listByMeetingId(meetingId);
List<Long> projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId);
List<Project> projects = projectService.listByIds(projectIds);
projects.forEach(w -> projectNames.add(w.getProjectName()));
} else {
List<MeetingOuterProject> 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("专家评审单导出失败");
}
}

}

+ 2
- 1
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){


+ 2
- 1
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){


+ 9
- 8
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;
}

+ 3
- 3
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;

}


+ 41
- 14
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);


+ 1
- 3
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;
}

+ 799
- 0
pmapi/src/main/resources/template/专家评审单.ftl ファイルの表示

@@ -0,0 +1,799 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"
xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData"><o:DocumentProperties>
<o:Author>Data</o:Author>
<o:LastAuthor>潦草迷茫</o:LastAuthor>
<o:Created>2023-07-21T08:04:00Z</o:Created>
<o:LastSaved>2023-07-24T20:44:34Z</o:LastSaved>
<o:TotalTime>12960</o:TotalTime>
<o:Version>14</o:Version>
</o:DocumentProperties>
<o:CustomDocumentProperties>
<o:CRO dt:dt="string">wqlLaW5nc29mdCBQREYgdG8gV1BTIDkw</o:CRO>
<o:Created dt:dt="dateTime.tz">2023-07-24T17:28:04Z</o:Created>
<o:KSOProductBuildVer dt:dt="string">2052-5.5.1.7991</o:KSOProductBuildVer>
<o:ICV dt:dt="string">1DC93F630FB80A5D3272BE6472F2ECEB_43</o:ICV>
</o:CustomDocumentProperties>
<w:fonts>
<w:defaultFonts w:ascii="Arial" w:fareast="Arial" w:h-ansi="Arial" w:cs="Arial"/>
<w:font w:name="Times New Roman">
<w:panose-1 w:val="02020603050405020304"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="宋体">
<w:altName w:val="汉仪书宋二KW"/>
<w:panose-1 w:val="00000000000000000000"/>
<w:charset w:val="86"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="Wingdings">
<w:panose-1 w:val="05000000000000000000"/>
<w:charset w:val="02"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="Arial">
<w:panose-1 w:val="020B0604020202020204"/>
<w:charset w:val="01"/>
<w:family w:val="SWiss"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="黑体">
<w:altName w:val="汉仪中黑KW"/>
<w:panose-1 w:val="02010609060101010101"/>
<w:charset w:val="86"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="Courier New">
<w:panose-1 w:val="02070309020205020404"/>
<w:charset w:val="01"/>
<w:family w:val="Modern"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="Symbol">
<w:altName w:val="Kingsoft Sign"/>
<w:panose-1 w:val="05050102010706020507"/>
<w:charset w:val="02"/>
<w:family w:val="Roman"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="Calibri">
<w:altName w:val="Helvetica Neue"/>
<w:panose-1 w:val="020F0502020204030204"/>
<w:charset w:val="00"/>
<w:family w:val="SWiss"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000001" w:usb-3="00000000" w:csb-0="0000019F"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="Helvetica Neue">
<w:panose-1 w:val="02000503000000020004"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="汉仪书宋二KW">
<w:panose-1 w:val="00020600040101010101"/>
<w:charset w:val="86"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00160000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="微软雅黑">
<w:altName w:val="汉仪旗黑"/>
<w:panose-1 w:val="00000000000000000000"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="汉仪旗黑">
<w:panose-1 w:val="00020600040101010101"/>
<w:charset w:val="86"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00060000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="汉仪中黑KW">
<w:panose-1 w:val="00020600040101010101"/>
<w:charset w:val="86"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00160000"
w:csb-1="00000000"/>
</w:font>
<w:font w:name="Kingsoft Sign">
<w:panose-1 w:val="05050102010706020507"/>
<w:charset w:val="00"/>
<w:family w:val="Auto"/>
<w:pitch w:val="Default"/>
<w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000000"
w:csb-1="00000000"/>
</w:font>
</w:fonts>
<w:styles>
<w:latentStyles w:defLockedState="off" w:latentStyleCount="260">
<w:lsdException w:name="Normal"/>
<w:lsdException w:name="heading 1"/>
<w:lsdException w:name="heading 2"/>
<w:lsdException w:name="heading 3"/>
<w:lsdException w:name="heading 4"/>
<w:lsdException w:name="heading 5"/>
<w:lsdException w:name="heading 6"/>
<w:lsdException w:name="heading 7"/>
<w:lsdException w:name="heading 8"/>
<w:lsdException w:name="heading 9"/>
<w:lsdException w:name="index 1"/>
<w:lsdException w:name="index 2"/>
<w:lsdException w:name="index 3"/>
<w:lsdException w:name="index 4"/>
<w:lsdException w:name="index 5"/>
<w:lsdException w:name="index 6"/>
<w:lsdException w:name="index 7"/>
<w:lsdException w:name="index 8"/>
<w:lsdException w:name="index 9"/>
<w:lsdException w:name="toc 1"/>
<w:lsdException w:name="toc 2"/>
<w:lsdException w:name="toc 3"/>
<w:lsdException w:name="toc 4"/>
<w:lsdException w:name="toc 5"/>
<w:lsdException w:name="toc 6"/>
<w:lsdException w:name="toc 7"/>
<w:lsdException w:name="toc 8"/>
<w:lsdException w:name="toc 9"/>
<w:lsdException w:name="Normal Indent"/>
<w:lsdException w:name="footnote text"/>
<w:lsdException w:name="annotation text"/>
<w:lsdException w:name="header"/>
<w:lsdException w:name="footer"/>
<w:lsdException w:name="index heading"/>
<w:lsdException w:name="caption"/>
<w:lsdException w:name="table of figures"/>
<w:lsdException w:name="envelope address"/>
<w:lsdException w:name="envelope return"/>
<w:lsdException w:name="footnote reference"/>
<w:lsdException w:name="annotation reference"/>
<w:lsdException w:name="line number"/>
<w:lsdException w:name="page number"/>
<w:lsdException w:name="endnote reference"/>
<w:lsdException w:name="endnote text"/>
<w:lsdException w:name="table of authorities"/>
<w:lsdException w:name="macro"/>
<w:lsdException w:name="toa heading"/>
<w:lsdException w:name="List"/>
<w:lsdException w:name="List Bullet"/>
<w:lsdException w:name="List Number"/>
<w:lsdException w:name="List 2"/>
<w:lsdException w:name="List 3"/>
<w:lsdException w:name="List 4"/>
<w:lsdException w:name="List 5"/>
<w:lsdException w:name="List Bullet 2"/>
<w:lsdException w:name="List Bullet 3"/>
<w:lsdException w:name="List Bullet 4"/>
<w:lsdException w:name="List Bullet 5"/>
<w:lsdException w:name="List Number 2"/>
<w:lsdException w:name="List Number 3"/>
<w:lsdException w:name="List Number 4"/>
<w:lsdException w:name="List Number 5"/>
<w:lsdException w:name="Title"/>
<w:lsdException w:name="Closing"/>
<w:lsdException w:name="Signature"/>
<w:lsdException w:name="Default Paragraph Font"/>
<w:lsdException w:name="Body Text"/>
<w:lsdException w:name="Body Text Indent"/>
<w:lsdException w:name="List Continue"/>
<w:lsdException w:name="List Continue 2"/>
<w:lsdException w:name="List Continue 3"/>
<w:lsdException w:name="List Continue 4"/>
<w:lsdException w:name="List Continue 5"/>
<w:lsdException w:name="Message Header"/>
<w:lsdException w:name="Subtitle"/>
<w:lsdException w:name="Salutation"/>
<w:lsdException w:name="Date"/>
<w:lsdException w:name="Body Text First Indent"/>
<w:lsdException w:name="Body Text First Indent 2"/>
<w:lsdException w:name="Note Heading"/>
<w:lsdException w:name="Body Text 2"/>
<w:lsdException w:name="Body Text 3"/>
<w:lsdException w:name="Body Text Indent 2"/>
<w:lsdException w:name="Body Text Indent 3"/>
<w:lsdException w:name="Block Text"/>
<w:lsdException w:name="Hyperlink"/>
<w:lsdException w:name="FollowedHyperlink"/>
<w:lsdException w:name="Strong"/>
<w:lsdException w:name="Emphasis"/>
<w:lsdException w:name="Document Map"/>
<w:lsdException w:name="Plain Text"/>
<w:lsdException w:name="E-mail Signature"/>
<w:lsdException w:name="Normal (Web)"/>
<w:lsdException w:name="HTML Acronym"/>
<w:lsdException w:name="HTML Address"/>
<w:lsdException w:name="HTML Cite"/>
<w:lsdException w:name="HTML Code"/>
<w:lsdException w:name="HTML Definition"/>
<w:lsdException w:name="HTML Keyboard"/>
<w:lsdException w:name="HTML Preformatted"/>
<w:lsdException w:name="HTML Sample"/>
<w:lsdException w:name="HTML Typewriter"/>
<w:lsdException w:name="HTML Variable"/>
<w:lsdException w:name="Normal Table"/>
<w:lsdException w:name="annotation subject"/>
<w:lsdException w:name="Table Simple 1"/>
<w:lsdException w:name="Table Simple 2"/>
<w:lsdException w:name="Table Simple 3"/>
<w:lsdException w:name="Table Classic 1"/>
<w:lsdException w:name="Table Classic 2"/>
<w:lsdException w:name="Table Classic 3"/>
<w:lsdException w:name="Table Classic 4"/>
<w:lsdException w:name="Table Colorful 1"/>
<w:lsdException w:name="Table Colorful 2"/>
<w:lsdException w:name="Table Colorful 3"/>
<w:lsdException w:name="Table Columns 1"/>
<w:lsdException w:name="Table Columns 2"/>
<w:lsdException w:name="Table Columns 3"/>
<w:lsdException w:name="Table Columns 4"/>
<w:lsdException w:name="Table Columns 5"/>
<w:lsdException w:name="Table Grid 1"/>
<w:lsdException w:name="Table Grid 2"/>
<w:lsdException w:name="Table Grid 3"/>
<w:lsdException w:name="Table Grid 4"/>
<w:lsdException w:name="Table Grid 5"/>
<w:lsdException w:name="Table Grid 6"/>
<w:lsdException w:name="Table Grid 7"/>
<w:lsdException w:name="Table Grid 8"/>
<w:lsdException w:name="Table List 1"/>
<w:lsdException w:name="Table List 2"/>
<w:lsdException w:name="Table List 3"/>
<w:lsdException w:name="Table List 4"/>
<w:lsdException w:name="Table List 5"/>
<w:lsdException w:name="Table List 6"/>
<w:lsdException w:name="Table List 7"/>
<w:lsdException w:name="Table List 8"/>
<w:lsdException w:name="Table 3D effects 1"/>
<w:lsdException w:name="Table 3D effects 2"/>
<w:lsdException w:name="Table 3D effects 3"/>
<w:lsdException w:name="Table Contemporary"/>
<w:lsdException w:name="Table Elegant"/>
<w:lsdException w:name="Table Professional"/>
<w:lsdException w:name="Table Subtle 1"/>
<w:lsdException w:name="Table Subtle 2"/>
<w:lsdException w:name="Table Web 1"/>
<w:lsdException w:name="Table Web 2"/>
<w:lsdException w:name="Table Web 3"/>
<w:lsdException w:name="Balloon Text"/>
<w:lsdException w:name="Table Grid"/>
<w:lsdException w:name="Table Theme"/>
<w:lsdException w:name="Light Shading"/>
<w:lsdException w:name="Light List"/>
<w:lsdException w:name="Light Grid"/>
<w:lsdException w:name="Medium Shading 1"/>
<w:lsdException w:name="Medium Shading 2"/>
<w:lsdException w:name="Medium List 1"/>
<w:lsdException w:name="Medium List 2"/>
<w:lsdException w:name="Medium Grid 1"/>
<w:lsdException w:name="Medium Grid 2"/>
<w:lsdException w:name="Medium Grid 3"/>
<w:lsdException w:name="Dark List"/>
<w:lsdException w:name="Colorful Shading"/>
<w:lsdException w:name="Colorful List"/>
<w:lsdException w:name="Colorful Grid"/>
<w:lsdException w:name="Light Shading Accent 1"/>
<w:lsdException w:name="Light List Accent 1"/>
<w:lsdException w:name="Light Grid Accent 1"/>
<w:lsdException w:name="Medium Shading 1 Accent 1"/>
<w:lsdException w:name="Medium Shading 2 Accent 1"/>
<w:lsdException w:name="Medium List 1 Accent 1"/>
<w:lsdException w:name="Medium List 2 Accent 1"/>
<w:lsdException w:name="Medium Grid 1 Accent 1"/>
<w:lsdException w:name="Medium Grid 2 Accent 1"/>
<w:lsdException w:name="Medium Grid 3 Accent 1"/>
<w:lsdException w:name="Dark List Accent 1"/>
<w:lsdException w:name="Colorful Shading Accent 1"/>
<w:lsdException w:name="Colorful List Accent 1"/>
<w:lsdException w:name="Colorful Grid Accent 1"/>
<w:lsdException w:name="Light Shading Accent 2"/>
<w:lsdException w:name="Light List Accent 2"/>
<w:lsdException w:name="Light Grid Accent 2"/>
<w:lsdException w:name="Medium Shading 1 Accent 2"/>
<w:lsdException w:name="Medium Shading 2 Accent 2"/>
<w:lsdException w:name="Medium List 1 Accent 2"/>
<w:lsdException w:name="Medium List 2 Accent 2"/>
<w:lsdException w:name="Medium Grid 1 Accent 2"/>
<w:lsdException w:name="Medium Grid 2 Accent 2"/>
<w:lsdException w:name="Medium Grid 3 Accent 2"/>
<w:lsdException w:name="Dark List Accent 2"/>
<w:lsdException w:name="Colorful Shading Accent 2"/>
<w:lsdException w:name="Colorful List Accent 2"/>
<w:lsdException w:name="Colorful Grid Accent 2"/>
<w:lsdException w:name="Light Shading Accent 3"/>
<w:lsdException w:name="Light List Accent 3"/>
<w:lsdException w:name="Light Grid Accent 3"/>
<w:lsdException w:name="Medium Shading 1 Accent 3"/>
<w:lsdException w:name="Medium Shading 2 Accent 3"/>
<w:lsdException w:name="Medium List 1 Accent 3"/>
<w:lsdException w:name="Medium List 2 Accent 3"/>
<w:lsdException w:name="Medium Grid 1 Accent 3"/>
<w:lsdException w:name="Medium Grid 2 Accent 3"/>
<w:lsdException w:name="Medium Grid 3 Accent 3"/>
<w:lsdException w:name="Dark List Accent 3"/>
<w:lsdException w:name="Colorful Shading Accent 3"/>
<w:lsdException w:name="Colorful List Accent 3"/>
<w:lsdException w:name="Colorful Grid Accent 3"/>
<w:lsdException w:name="Light Shading Accent 4"/>
<w:lsdException w:name="Light List Accent 4"/>
<w:lsdException w:name="Light Grid Accent 4"/>
<w:lsdException w:name="Medium Shading 1 Accent 4"/>
<w:lsdException w:name="Medium Shading 2 Accent 4"/>
<w:lsdException w:name="Medium List 1 Accent 4"/>
<w:lsdException w:name="Medium List 2 Accent 4"/>
<w:lsdException w:name="Medium Grid 1 Accent 4"/>
<w:lsdException w:name="Medium Grid 2 Accent 4"/>
<w:lsdException w:name="Medium Grid 3 Accent 4"/>
<w:lsdException w:name="Dark List Accent 4"/>
<w:lsdException w:name="Colorful Shading Accent 4"/>
<w:lsdException w:name="Colorful List Accent 4"/>
<w:lsdException w:name="Colorful Grid Accent 4"/>
<w:lsdException w:name="Light Shading Accent 5"/>
<w:lsdException w:name="Light List Accent 5"/>
<w:lsdException w:name="Light Grid Accent 5"/>
<w:lsdException w:name="Medium Shading 1 Accent 5"/>
<w:lsdException w:name="Medium Shading 2 Accent 5"/>
<w:lsdException w:name="Medium List 1 Accent 5"/>
<w:lsdException w:name="Medium List 2 Accent 5"/>
<w:lsdException w:name="Medium Grid 1 Accent 5"/>
<w:lsdException w:name="Medium Grid 2 Accent 5"/>
<w:lsdException w:name="Medium Grid 3 Accent 5"/>
<w:lsdException w:name="Dark List Accent 5"/>
<w:lsdException w:name="Colorful Shading Accent 5"/>
<w:lsdException w:name="Colorful List Accent 5"/>
<w:lsdException w:name="Colorful Grid Accent 5"/>
<w:lsdException w:name="Light Shading Accent 6"/>
<w:lsdException w:name="Light List Accent 6"/>
<w:lsdException w:name="Light Grid Accent 6"/>
<w:lsdException w:name="Medium Shading 1 Accent 6"/>
<w:lsdException w:name="Medium Shading 2 Accent 6"/>
<w:lsdException w:name="Medium List 1 Accent 6"/>
<w:lsdException w:name="Medium List 2 Accent 6"/>
<w:lsdException w:name="Medium Grid 1 Accent 6"/>
<w:lsdException w:name="Medium Grid 2 Accent 6"/>
<w:lsdException w:name="Medium Grid 3 Accent 6"/>
<w:lsdException w:name="Dark List Accent 6"/>
<w:lsdException w:name="Colorful Shading Accent 6"/>
<w:lsdException w:name="Colorful List Accent 6"/>
<w:lsdException w:name="Colorful Grid Accent 6"/>
</w:latentStyles>
<w:style w:type="paragraph" w:styleId="a1" w:default="on">
<w:name w:val="Normal"/>
<w:semiHidden/>
<w:pPr>
<w:kinsoku w:val="off"/>
<w:autoSpaceDE w:val="off"/>
<w:autoSpaceDN w:val="off"/>
<w:adjustRightInd w:val="off"/>
<w:snapToGrid w:val="off"/>
<w:spacing w:line="240" w:line-rule="auto"/>
<w:jc w:val="left"/>
<w:textAlignment w:val="baseline"/>
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="Arial" w:cs="Arial" w:hint="default"/>
<w:snapToGrid w:val="off"/>
<w:color w:val="000000"/>
<w:kern w:val="0"/>
<w:sz w:val="21"/>
<w:sz-cs w:val="21"/>
<w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/>
</w:rPr>
</w:style>
<w:style w:type="character" w:styleId="a4" w:default="on">
<w:name w:val="Default Paragraph Font"/>
<w:semiHidden/>
</w:style>
<w:style w:type="table" w:styleId="a3" w:default="on">
<w:name w:val="Normal Table"/>
<w:semiHidden/>
<w:tblPr>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPr>
</w:style>
<w:style w:type="paragraph" w:styleId="a2">
<w:name w:val="Body Text"/>
<w:basedOn w:val="a1"/>
<w:semiHidden/>
<w:rPr>
<w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:fareast="Arial" w:cs="Arial" w:hint="default"/>
<w:sz w:val="21"/>
<w:sz-cs w:val="21"/>
<w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/>
</w:rPr>
</w:style>
<w:style w:type="table" w:styleId="a5">
<w:name w:val="Table Normal"/>
<w:semiHidden/>
<w:tblPr>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="0" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="0" w:type="dxa"/>
</w:tblCellMar>
</w:tblPr>
</w:style>
</w:styles>
<w:bgPict>
<w:background/>
<v:background id="_x0000_s1025">
<v:fill on="f" focussize="0,0"/>
</v:background>
</w:bgPict>
<w:docPr>
<w:view w:val="print"/>
<w:zoom w:percent="170"/>
<w:characterSpacingControl w:val="DontCompress"/>
<w:documentProtection w:enforcement="off"/>
<w:displayBackgroundShape w:val="1"/>
<w:punctuationKerning/>
<w:doNotEmbedSystemFonts/>
<w:bordersDontSurroundHeader/>
<w:bordersDontSurroundFooter/>
<w:defaultTabStop w:val="500"/>
<w:displayHorizontalDrawingGridEvery w:val="1"/>
<w:displayVerticalDrawingGridEvery w:val="1"/>
<w:compat>
<w:ulTrailSpace/>
<w:useFELayout/>
<w:spaceForUL/>
<w:wrapTextWithPunct/>
<w:breakWrappedTables/>
<w:useAsianBreakRules/>
<w:dontGrowAutofit/>
<w:useFELayout/>
</w:compat>
</w:docPr>
<w:body>
<wx:sect>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="279" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="279" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:spacing w:before="193" w:line="176" w:line-rule="auto"/>
<w:jc w:val="center"/>
<w:outlineLvl w:val="0"/>
<w:rPr>
<w:rFonts w:fareast="微软雅黑" w:hint="default"/>
<w:lang w:val="EN-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="default"/>
<w:spacing w:val="-4"/>
<w:sz w:val="45"/>
<w:sz-cs w:val="45"/>
</w:rPr>
<w:t>${projectName}</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="fareast"/>
<w:spacing w:val="-4"/>
<w:sz w:val="45"/>
<w:sz-cs w:val="45"/>
<w:lang w:val="EN-US"/>
</w:rPr>
<w:t>专家评审意见</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="257" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="257" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="257" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:ind w:first-line="500" w:first-line-chars="0"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="fareast"/>
<w:sz w:val="30"/>
<w:sz-cs w:val="30"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="fareast"/>
<w:sz w:val="30"/>
<w:sz-cs w:val="30"/>
</w:rPr>
<w:t>${meetingTime},${holdOrg}组织专家在${meetingAddress}对${projectName}进行评审。专家组认真听取了项目业主方、建设方的情况汇报,审阅了项目材料,实地查看了设备及平台演示,专家组织质询、讨论后提出以下意见:
</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="244" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="a2"/>
<w:spacing w:line="245" w:line-rule="auto"/>
</w:pPr>
</w:p>
<w:p>
<w:pPr>
<w:spacing w:before="129" w:line="175" w:line-rule="auto"/>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="default"/>
<w:sz w:val="30"/>
<w:sz-cs w:val="30"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="default"/>
<w:spacing w:val="-8"/>
<w:sz w:val="30"/>
<w:sz-cs w:val="30"/>
</w:rPr>
<w:t>专家组</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="default"/>
<w:spacing w:val="-61"/>
<w:sz w:val="30"/>
<w:sz-cs w:val="30"/>
</w:rPr>
<w:t></w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="default"/>
<w:spacing w:val="-8"/>
<w:sz w:val="30"/>
<w:sz-cs w:val="30"/>
</w:rPr>
<w:t>(签名</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="微软雅黑" w:h-ansi="微软雅黑" w:fareast="微软雅黑" w:cs="微软雅黑"
w:hint="default"/>
<w:spacing w:val="-14"/>
<w:sz w:val="30"/>
<w:sz-cs w:val="30"/>
</w:rPr>
<w:t>):</w:t>
</w:r>
</w:p>
<w:sectPr>
<w:pgSz w:w="11900" w:h="16839"/>
<w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="0" w:footer="0"
w:gutter="0"/>
<w:cols w:space="720"/>
</w:sectPr>
</wx:sect>
</w:body></w:wordDocument>

+ 1243
- 0
pmapi/src/main/resources/template/专家费.ftl
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 3
- 8
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;
}
</style>
</head>
<body>


+ 2
- 1
pmapi/src/main/resources/template/市级-预审申请单.html ファイルの表示

@@ -9,7 +9,7 @@
<title>Document</title>
<style>
html,
body {
body,p {
padding: 0;
margin: 0;
font-family: SimSun;
@@ -37,6 +37,7 @@
color: #999999;
text-align: left;
margin-bottom: 8px;
margin-top: 0;
}
.projectId > .time {
float: right;


+ 1
- 0
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;


読み込み中…
キャンセル
保存