diff --git a/pmapi/pom.xml b/pmapi/pom.xml index ed54cc1..d32a0a6 100644 --- a/pmapi/pom.xml +++ b/pmapi/pom.xml @@ -43,7 +43,10 @@ org.springframework.session spring-session-data-redis - + + org.springframework.boot + spring-boot-starter-freemarker + 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} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 经办人 + + + + + + + + + + + + (签字 + + + + + + ): + + + + + + + + + \ 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