Browse Source

质检日志校验

qianxb 1 year ago
parent
commit
db7b3b30ad
13 changed files with 415 additions and 6 deletions
  1. 25 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/dto/ArchiveWarningDTO.java
  2. 3 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/entity/ExpertInspection.java
  3. 33 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveWarningVO.java
  4. 1 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveExpertConclusionController.java
  5. 6 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveExpertScoreController.java
  6. 20 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  7. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveExpertScoreService.java
  8. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  9. 17 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertConclusionServiceImpl.java
  10. 184 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertScoreServiceImpl.java
  11. 18 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  12. 100 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java
  13. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

+ 25 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/dto/ArchiveWarningDTO.java

@@ -0,0 +1,25 @@
+package org.springblade.archive.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Param    档案预警DTO
+ * @Author wangwl
+ * @Date 2024/1/12 10:41
+ **/
+@Data
+public class ArchiveWarningDTO {
+
+    @ApiModelProperty(value = "节点id")
+    private Long nodeId;
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "合同id")
+    private Long contractId;
+
+    @ApiModelProperty(value = "1待整改2已整改")
+    private Integer rectification;
+}

+ 3 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/entity/ExpertInspection.java

@@ -19,6 +19,9 @@ public class ExpertInspection extends BaseEntity {
     @ApiModelProperty("项目id")
     private Long projectId;
 
+    @ApiModelProperty("对应节点id")
+    private Long nodeId;
+
     @ApiModelProperty("结论id")
     private Long conclusionId;
 

+ 33 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveWarningVO.java

@@ -0,0 +1,33 @@
+package org.springblade.archive.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Param    档案预警VO
+ * @Author wangwl
+ * @Date 2024/1/12 10:41
+ **/
+@Data
+public class ArchiveWarningVO {
+
+    @ApiModelProperty(value = "节点id")
+    private Long archiveId;
+
+    @ApiModelProperty(value = "项目id")
+    private Long archiveName;
+
+    @ApiModelProperty(value = "合同id")
+    private Long allOpinion;
+
+    @ApiModelProperty(value = "文件名称")
+    private String fileName;
+
+    @ApiModelProperty(value = "文件地址")
+    private String fileUrl;
+
+    @ApiModelProperty(value = "来源0巡检1验收")
+    private Integer sourceType;
+
+
+}

+ 1 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveExpertConclusionController.java

@@ -167,6 +167,7 @@ public class ArchiveExpertConclusionController extends BladeController {
             @ApiImplicitParam(name = "projectId", value = "项目id", required = true)
     })
     public R submitTable(@RequestBody ArchiveExpertConclusion conclusion) {
+        conclusionService.updateById(conclusion);
         conclusionService.submitTable(conclusion);
         return R.data("提交成功");
     }

+ 6 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveExpertScoreController.java

@@ -51,4 +51,10 @@ public class ArchiveExpertScoreController extends BladeController {
         return R.data("修改成功");
     }
 
+    @GetMapping("/test")
+    public R test( Long projectId,Long conclusionId) throws Exception {
+        scoreService.buildScorePdf(projectId,conclusionId);
+        return R.data("修改成功");
+    }
+
 }

+ 20 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -33,6 +33,7 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.message.BasicNameValuePair;
+import org.springblade.archive.dto.ArchiveWarningDTO;
 import org.springblade.archive.dto.SaveApplyDTO;
 import org.springblade.archive.entity.ArchiveConclusion;
 import org.springblade.archive.entity.ExpertInspection;
@@ -925,8 +926,26 @@ public class ArchivesAutoController extends BladeController {
 		return archivesAutoService.callbackSave(callback);
 	}
 
+	/**
+	 * 档案预警-分页查询
+	 */
+	@GetMapping("/warningPage")
+	@ApiOperationSupport(order = 36)
+	@ApiOperation(value = "在线验收-编写报告", notes = "传入项目id,节点和整改状态,返回分页信息")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "rectification", value = "1待整改2已整改", required = true),
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+			@ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true)
+	})
+	public R<IPage<ArchiveWarningVO>> warningPage(Query query, ArchiveWarningDTO dto) {
+		IPage<ArchiveWarningVO> iPage = archivesAutoService.warningPage(query, dto);
+		return R.data(iPage);
+	}
+
 
 
 
 
-}
+
+	}

+ 4 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveExpertScoreService.java

@@ -4,6 +4,7 @@ import org.springblade.archive.entity.ArchiveExpertScore;
 import org.springblade.archive.entity.ExpertInspection;
 import org.springblade.core.mp.base.BaseService;
 
+import java.io.FileNotFoundException;
 import java.util.List;
 
 
@@ -13,4 +14,7 @@ public interface IArchiveExpertScoreService extends BaseService<ArchiveExpertSco
     void saveBaseScoreInfo(Long projectId,Long conclusionId);
 
     List<ArchiveExpertScore> getItemByUnit(Long projectId, Integer unitType);
+
+    //传入结论id,生成结论pdf
+    String buildScorePdf(Long projectId,Long conclusionId) throws Exception;
 }

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.archive.service;
 
+import org.springblade.archive.dto.ArchiveWarningDTO;
 import org.springblade.archive.dto.SaveApplyDTO;
 import org.springblade.archive.entity.ArchiveConclusion;
 import org.springblade.archive.entity.ArchivesAuto;
@@ -146,4 +147,6 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
     ArchiveConclusion getArchiveConclusion(Long projectId);
 
 	ExcelEditCallback callbackSave(ExcelEditCallback callback);
+
+    IPage<ArchiveWarningVO> warningPage(Query query, ArchiveWarningDTO dto);
 }

+ 17 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertConclusionServiceImpl.java

@@ -191,11 +191,24 @@ public class ArchiveExpertConclusionServiceImpl extends BaseServiceImpl<ArchiveE
     @Override
     @Transactional
     public void submitTable(ArchiveExpertConclusion conclusion) {
-        //保存数据
-        //查询出数据
+        //生成结论pdf
         //判断是否追加
-        //调用生成
-
+        if (conclusion.getIsBuildScore() == 1) {
+            String scoreUrl;
+            //调用生成
+            try {
+                 scoreUrl = scoreService.buildScorePdf(conclusion.getProjectId(), conclusion.getId());
+            }catch (Exception e){
+                throw new ServiceException("创建专家评分表PDF失败");
+            }
+            if (StringUtils.isNotBlank(scoreUrl)){
+                //合并PDF
+            }
+        }
+        //PDF电签
+        //修改状态,插入结论PDF
+        conclusion.setStatus(2);
+        this.updateById(conclusion);
     }
 
     @Override

+ 184 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExpertScoreServiceImpl.java

@@ -2,6 +2,13 @@ package org.springblade.archive.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.BaseFont;
+import com.itextpdf.text.pdf.PdfPCell;
+import com.itextpdf.text.pdf.PdfPTable;
+import com.itextpdf.text.pdf.PdfWriter;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.archive.entity.ArchiveExpertConclusion;
 import org.springblade.archive.entity.ArchiveExpertScore;
 import org.springblade.archive.entity.ExpertInspection;
@@ -9,15 +16,31 @@ import org.springblade.archive.mapper.ArchiveExpertScoreMapper;
 import org.springblade.archive.mapper.ExpertInspectionMapper;
 import org.springblade.archive.service.IArchiveExpertScoreService;
 import org.springblade.archive.service.IExpertInspectionService;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.resource.feign.NewIOSSClient;
 import org.springframework.stereotype.Service;
 
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
+@AllArgsConstructor
 public class ArchiveExpertScoreServiceImpl extends BaseServiceImpl<ArchiveExpertScoreMapper, ArchiveExpertScore> implements IArchiveExpertScoreService {
 
+    private final NewIOSSClient newIOSSClient;
+
+    //表格高度
+    private static int high = 20;
+    //表格宽度
+    private static int widthPercentage = 100;
+
 
     @Override
     public void saveBaseScoreInfo(Long projectId,Long conclusionId) {
@@ -45,5 +68,166 @@ public class ArchiveExpertScoreServiceImpl extends BaseServiceImpl<ArchiveExpert
                 .eq(ArchiveExpertScore::getConclusionId,conclusion.getId()));
         return list;
     }
+
+    /**
+     *
+     * @return
+     */
+    @Override
+    public String buildScorePdf(Long projectId,Long conclusionId) throws Exception {
+        //获取数据
+        List<ArchiveExpertScore> list = this.list(new LambdaQueryWrapper<ArchiveExpertScore>()
+                .eq(ArchiveExpertScore::getProjectId, projectId)
+                .eq(ArchiveExpertScore::getConclusionId, conclusionId));
+        if (list.size() == 0){
+            return null;
+        }
+        Map<Integer, List<ArchiveExpertScore>> map = list.stream().collect(Collectors.groupingBy(ArchiveExpertScore::getUnitType));
+        String fileUrl = "C:\\Users\\泓创研发01\\Desktop\\conclusionPDF.pdf";
+        //新建一个pdf文档对象,前一个参数是纸张大小,后四个为边距
+        Document document = new Document(PageSize.A4, 5, 5, 30, 30);
+        //建立一个书写器
+        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(fileUrl));
+        document.open();
+        //创建字体
+        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        //字体对象,这里可以创建一个方法
+        Font size10font = new Font(baseFont, 10, Font.NORMAL); //大小为10的正常字体
+        Font size10font2 = new Font(baseFont, 10, Font.BOLD); //大小为10的粗字体
+        Font size17font = new Font(baseFont, 17, Font.NORMAL);  //大小为17的正常字体
+        //该数组是每个表格的宽度
+        float[] floats = new float[6];
+        floats[0] = 0.5f;
+        floats[1] = 0.1f;
+        floats[2] = 0.1f;
+        floats[3] = 0.1f;
+        floats[4] = 0.1f;
+        floats[5] = 0.1f;
+        float[] floats2 = new float[5];
+        floats2[0] = 0.5f;
+        floats2[1] = 0.1f;
+        floats2[2] = 0.1f;
+        floats2[3] = 0.1f;
+        floats2[4] = 0.1f;
+        tableHeader(document,size17font);
+        tableUnit(document,size10font2,"建设单位");
+        //表头文字
+        String[] name = new String[]{"项目", "完整性", "扣分", "规范性","扣分","总得分"};
+        //创建第二行,并设置第二行中的表格数
+        PdfPTable twoTable = new PdfPTable(name.length);
+        twoTable.setWidthPercentage(widthPercentage);
+        //循环将表头数据添加到第二行表格中
+        for (int i = 0; i < name.length; i++) {
+            PdfPCell pdfPCell = pdfTableStyle(name[i], size10font,high, true, true);
+            pdfPCell.setBackgroundColor(new BaseColor(231,230,230));
+            twoTable.addCell(pdfPCell);
+        }
+        //设置表格的宽度
+        twoTable.setTotalWidth(floats);
+
+        document.add(twoTable);
+        //将数据放入表格中
+        int total = 0;
+        for (int i = 1; i <= 3; i++) {
+            if (i == 2){
+                tableUnit(document,size10font2,"监理单位");
+            }
+            if (i == 3){
+                tableUnit(document,size10font2,"施工单位");
+            }
+            List<ArchiveExpertScore> scores = map.get(i);
+            PdfPTable dataTable = new PdfPTable(5);
+            dataTable.setWidths(floats2);
+            dataTable.setWidthPercentage(100);
+            for (int j = 0; j < scores.size(); j++) {
+                ArchiveExpertScore score = scores.get(j);
+
+                dataTable.addCell(pdfTableStyle(score.getScoreItem(), size10font,high, true, true));
+                dataTable.addCell(pdfTableStyle(score.getIntegrality()+"", size10font, high, true, true));
+                dataTable.addCell(pdfTableStyle(score.getIntegralityDeduction()+"", size10font, high, true, true));
+                dataTable.addCell(pdfTableStyle(score.getNormative()+"", size10font, high, true, true));
+                dataTable.addCell(pdfTableStyle(score.getNormativeDeduction()+"", size10font, high, true, true));
+            }
+            PdfPTable mergeTable = new PdfPTable(2);
+            float[] columnWidths3 = {9f, 1f};
+            mergeTable.setWidths(columnWidths3);
+            mergeTable.setWidthPercentage(100);
+            PdfPCell leftCell = new PdfPCell(dataTable);
+            mergeTable.addCell(leftCell);
+            PdfPCell rightCell = pdfTableStyle("66", size10font,scores.size() * high,true,true);
+            mergeTable.addCell(rightCell);
+            document.add(mergeTable);
+
+        }
+        document.close();
+        writer.close();
+        BladeFile bladeFile = newIOSSClient.uploadFile("ArchiveApp.pdf", fileUrl);
+        if (bladeFile == null || StringUtils.isBlank(bladeFile.getLink())) {
+            throw new ServiceException("上传PDF失败");
+        }
+        return bladeFile.getLink();
+    }
+
+    static void tableHeader(Document document,Font size17font) throws DocumentException {
+        //添加标题
+        //创建第一行表格
+        PdfPTable tableName = new PdfPTable(1);
+        tableName.setWidthPercentage(widthPercentage);  //设置标题长度占纸张比例
+        PdfPCell cell = pdfTableStyle("项目档案验收评分表", size17font,50, true, true);
+        //给表格赋值
+        tableName.addCell(cell);
+        //将表格添加到文档对象中
+        document.add(tableName);
+    }
+
+    static void tableUnit(Document document,Font size10font2,String unitName) throws Exception {
+        //单位名称
+        PdfPTable two = new PdfPTable(1);
+        two.setWidthPercentage(widthPercentage);
+        PdfPCell cell2 = pdfTableStyle2(unitName, size10font2,20, false, true);
+        cell2.setBackgroundColor(new BaseColor(231,230,230));
+        two.addCell(cell2);
+        document.add(two);
+    }
+
+    static PdfPCell pdfTableStyle(String content, Font font, int high, boolean isAlignCenter, boolean isAlignMidle) {
+        Paragraph phrase = new Paragraph(content, font);
+        phrase.setAlignment(Paragraph.ALIGN_LEFT);
+        PdfPCell pdfPCell = new PdfPCell(phrase);
+        pdfPCell.setMinimumHeight(high);
+        pdfPCell.setUseAscender(true); // 设置可以居中
+        if (isAlignCenter) {
+            pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); // 设置水平居中
+        }else {
+            pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT); // 设置水平居中
+        }
+        if (isAlignMidle) {
+            pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中
+        }else {
+            pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_LEFT); // 设置垂直居中
+        }
+
+        return pdfPCell;
+    }
+
+    static PdfPCell pdfTableStyle2(String content, Font size10font2,int high, boolean isAlignCenter, boolean isAlignMiddle) throws Exception {
+        Paragraph phrase = new Paragraph(content, size10font2);
+        phrase.setAlignment(Paragraph.ALIGN_LEFT);
+        PdfPCell pdfPCell = new PdfPCell(phrase);
+        pdfPCell.setMinimumHeight(high);
+        pdfPCell.setUseAscender(true); // 设置可以居中
+        if (isAlignCenter) {
+            pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); // 设置水平居中
+        }else {
+            pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT); // 设置水平居中
+        }
+        if (isAlignMiddle) {
+            pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中
+        }else {
+            pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_LEFT); // 设置垂直居中
+        }
+
+        return pdfPCell;
+    }
 }
 

+ 18 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -36,6 +36,7 @@ import com.itextpdf.text.pdf.PdfWriter;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.archive.dto.ArchiveWarningDTO;
 import org.springblade.archive.dto.SaveApplyDTO;
 import org.springblade.archive.entity.*;
 import org.springblade.archive.mapper.ArchiveConclusionMapper;
@@ -3118,6 +3119,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			String userName = AuthUtil.getNickName();
 			//获取档案信息,如果状态未未查阅则修改
 			ArchivesAuto archive = this.getById(archiveId);
+			if (archive == null || archive.getNodeId() == null){
+				throw new ServiceException("获取档案信息失败");
+			}
 			//查询当前案卷节点的合同段类型
 			Integer unitType;
 			if (archive.getContractId() == null || archive.getContractId() == -1){
@@ -3135,6 +3139,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			inspection.setArchiveId(archiveId);
 			inspection.setArchiveName(archive.getName());
 			inspection.setConclusionId(conclusionId);
+			inspection.setNodeId(archive.getNodeId());
 			inspectionService.save(inspection);
 		}
 
@@ -3155,6 +3160,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		String userName = AuthUtil.getNickName();
 		//获取档案信息,如果状态未未查阅则修改
 		ArchivesAuto archive = this.getById(inspection.getArchiveId());
+		if (archive == null || archive.getNodeId() == null){
+			throw new ServiceException("获取档案信息失败");
+		}
 		archive.setIsInspect(1);
 		//查询当前案卷节点的合同段类型
 		Integer unitType;
@@ -3176,6 +3184,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		inspection.setExpertName(userName);
 		inspection.setIsPass(isPass);
 		inspection.setUnitType(unitType);
+		inspection.setNodeId(archive.getNodeId());
 		//合格,专家对案卷没有意见
 		if (isPass == 1){
 			//判断当前档案是否存在合格意见,存在则直接跳过,不存在就重新保存
@@ -3465,6 +3474,15 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		return editCallback;
 	}
 
+	/**
+	 * 档案预警-分页查询
+	 */
+	@Override
+	public IPage<ArchiveWarningVO> warningPage(Query query, ArchiveWarningDTO dto) {
+
+		return null;
+	}
+
 
 	public void deleteFile(String defaultDir,Long id){
 		String dir = defaultDir+"/"+id;

+ 100 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java

@@ -13,8 +13,10 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.business.entity.ContractLog;
 import org.springblade.business.entity.FixedFlowLink;
 import org.springblade.business.entity.InformationQuery;
+import org.springblade.business.service.IContractLogService;
 import org.springblade.business.service.IFixedFlowLinkService;
 import org.springblade.business.service.IFixedFlowService;
 import org.springblade.business.service.IInformationQueryService;
@@ -66,6 +68,8 @@ public class EVisaTaskCheckController {
 
     private final ProjectClient projectClient;
 
+    private final IContractLogService logService;
+
 
     /**
      * 检查所选的流程环节处理人是否具有审批权限(三大填报页、日志列表的批量上报、首件列表的批量上报)
@@ -421,6 +425,102 @@ public class EVisaTaskCheckController {
         return R.data(flowPage);
     }
 
+        /**
+     * 获取符合条件的预设流程(三大填报页、日志列表的批量上报、首件列表的批量上报)
+     */
+    @PostMapping("/queryFixedFlow3")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "获取符合条件的预设流程(三大填报页、日志列表的批量上报、首件列表的批量上报)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true),
+            @ApiImplicitParam(name = "nodeId", value = "当前节点PkeyId", required = true),
+            @ApiImplicitParam(name = "privatePKeyId", value = "表单列表中的isTypePrivatePid字段,集合形式"),
+            @ApiImplicitParam(name = "theLogPrimaryKeyId", value = "日志左侧所选的填报类型ID"),
+            @ApiImplicitParam(name = "firstId", value = "首件记录ID,列表批量上报时传任意一个即可")
+    })
+    public R<IPage<FixedFlowVO>> queryFixedFlow3(@RequestBody JSONObject json) {
+        //获取所有流程
+        FixedFlowVO vo = new FixedFlowVO();
+        vo.setCurrent(1);
+        vo.setSize(100);
+        vo.setContractId(json.getLong("contractId"));
+        vo.setProjectId(json.getLong("projectId"));
+
+        IPage<FixedFlowVO> flowPage = this.fixedFlowService.selectFixedFlowPage(vo);
+        List<FixedFlowVO> flowList = flowPage.getRecords();
+
+        //获取对应表格的所有电签配置
+        String logIds = json.getString("nodeId");
+        List<Long> longs = Func.toLongList(logIds);
+        ContractLog log = logService.getById(longs.get(0));
+        if (log == null || StringUtils.isBlank(log.getPdfUrl())) {
+            return R.fail(300, "当前节点还未生成PDF,不能上报");
+        }
+        List<JSONObject> jsonList = this.queryTableEVisaConfig(json, log.getPdfUrl());
+
+        if (jsonList == null || jsonList.size() == 0) {
+            return R.fail(300, "未找到符合电签配置的相关流程,请重新保存再上报");
+        }
+
+
+        //汇总电签配置的审批角色
+        List<String> eVisaRoleList = jsonList.stream().map(jsonObject -> jsonObject.getString("sigRoleId")).distinct().collect(Collectors.toList());
+
+        //校验这些预设流程哪些是符合条件的
+        for (FixedFlowVO next : flowList) {
+            //先将流程设置为可选
+            next.setDisabled(false);
+
+            //首先找到对应流程下的审批人组
+            List<FixedFlowLink> flowLink = this.fixedFlowLinkService.selectFixedFlowLink(next.getId().toString());
+            List<Long> ids = flowLink.stream().map(l -> l.getFixedFlowLinkUser()).collect(Collectors.toList());
+
+            //获取这些人资料合同段下的权限
+            List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(flowLink.stream().map(FixedFlowLink::getFixedFlowLinkUser).distinct().collect(Collectors.toList()), log.getContractId() + "");
+            if (userRoleList == null || userRoleList.size() <= 0) {
+                //查看当前项目下是否有监理合同段关联此合同段
+                String sql = "SELECT id from m_contract_info mci WHERE contract_type = 2 and id in (SELECT contract_id_jlyz  FROM m_contract_relation_jlyz WHERE contract_id_sg = " + log.getContractId() + ")";
+                ContractInfo contractInfo = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
+                if (contractInfo != null) {
+                    userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(ids, contractInfo.getId() + "");
+                }
+            }
+            if (userRoleList == null) {
+                next.setDisabled(true);
+            } else {
+                //校验流程
+                if (eVisaRoleList.size() >= userRoleList.size()) {
+                    //循环审批人的角色集合,并判断电签配置中是否含有这个角色
+                    for (JSONObject userRole : userRoleList) {
+                        if (!eVisaRoleList.contains(userRole.getString("roleId"))) {
+                            //但凡有个不符合条件,禁选
+                            next.setDisabled(true);
+                            //设置提示信息
+                            String name = jdbcTemplate.queryForObject(" select name from blade_user WHERE id = " + userRole.get("userId"), String.class);
+                            next.setTips(name + "没有电签权限,请检查电签配置或查看表单是否隐藏");
+                            break;
+                        }
+                    }
+                } else {
+                    //小于,反向判断
+                    List<String> userRoleIds = userRoleList.stream().map(jsonObject -> jsonObject.getString("roleId")).distinct().collect(Collectors.toList());
+                    for (String eVisaRole : eVisaRoleList) {
+                        if (!userRoleIds.contains(eVisaRole)) {
+                            //但凡有个不符合条件,禁选
+                            next.setDisabled(true);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        //设置流程
+        flowPage.setRecords(flowList);
+
+        return R.data(flowPage);
+    }
+
     /**
      * 检查当前审批人是否存在证书
      */

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

@@ -498,7 +498,7 @@ public class ArchiveTreeContractController extends BladeController {
      */
     @GetMapping("/startInspect")
     @ApiOperationSupport(order = 22)
-    @ApiOperation(value = "档案在线验收-开始抽检", notes = "返回true跳转初始化验收,返回false跳转档案初检")
+    @ApiOperation(value = "档案在线验收-开始抽检", notes = "返回true跳转分配验收,返回false跳转档案抽检")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "projectId", value = "项目id")
     })