Browse Source

Merge remote-tracking branch 'origin/master' into master

yangyj 1 year ago
parent
commit
3f1dc814da
16 changed files with 339 additions and 77 deletions
  1. 1 1
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/dto/ArchiveWarningDTO.java
  2. 5 5
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveWarningVO.java
  3. 22 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/reSigningEVisaDTO.java
  4. 3 5
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  5. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  6. 19 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  7. 9 9
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  8. 43 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  9. 130 23
      blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java
  10. 3 3
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  11. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java
  12. 22 10
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  13. 23 13
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  14. 1 1
      blade-service/blade-land/src/main/resources/application-dev.yml
  15. 51 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/feign/MeterTaskClientImpl.java
  16. 2 2
      blade-service/blade-rabbitmq-consumer/src/main/java/org/springblade/consumer/socket/WebSocketEndpoint.java

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

@@ -12,7 +12,7 @@ import lombok.Data;
 public class ArchiveWarningDTO {
 
     @ApiModelProperty(value = "节点id")
-    private Long nodeId;
+    private Long nodeIds;
 
     @ApiModelProperty(value = "项目id")
     private Long projectId;

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

@@ -12,13 +12,13 @@ import lombok.Data;
 public class ArchiveWarningVO {
 
     @ApiModelProperty(value = "节点id")
-    private Long archiveId;
+    private Long nodeId;
 
-    @ApiModelProperty(value = "项目id")
-    private Long archiveName;
+    @ApiModelProperty(value = "档案名称")
+    private String archiveName;
 
-    @ApiModelProperty(value = "合同id")
-    private Long allOpinion;
+    @ApiModelProperty(value = "问题描述")
+    private String allopinion;
 
     @ApiModelProperty(value = "文件名称")
     private String fileName;

+ 22 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/reSigningEVisaDTO.java

@@ -0,0 +1,22 @@
+package org.springblade.business.dto;
+
+import lombok.Data;
+
+/**
+ * @Param   一键重签参数
+ * @Author wangwl
+ * @Date 2024/1/16 9:35
+ **/
+@Data
+public class reSigningEVisaDTO {
+
+    private String classifyType;
+
+    private String taskIds;
+
+    private String contractId;
+
+    private String projectId;
+
+    private Integer type;
+}

+ 3 - 5
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -929,7 +929,7 @@ public class ArchivesAutoController extends BladeController {
 	/**
 	 * 档案预警-分页查询
 	 */
-	@GetMapping("/warningPage")
+	@PostMapping("/warningPage")
 	@ApiOperationSupport(order = 36)
 	@ApiOperation(value = "在线验收-编写报告", notes = "传入项目id,节点和整改状态,返回分页信息")
 	@ApiImplicitParams(value = {
@@ -938,7 +938,7 @@ public class ArchivesAutoController extends BladeController {
 			@ApiImplicitParam(name = "projectId", value = "项目id", required = true),
 			@ApiImplicitParam(name = "contractId", value = "合同id", required = true)
 	})
-	public R<IPage<ArchiveWarningVO>> warningPage(Query query, ArchiveWarningDTO dto) {
+	public R<IPage<ArchiveWarningVO>> warningPage(@RequestBody Query query,@RequestBody ArchiveWarningDTO dto) {
 		IPage<ArchiveWarningVO> iPage = archivesAutoService.warningPage(query, dto);
 		return R.data(iPage);
 	}
@@ -946,6 +946,4 @@ public class ArchivesAutoController extends BladeController {
 
 
 
-
-
-	}
+}

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

@@ -196,4 +196,8 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
     List<ArchivesAutoVO2> getAllArchive(@Param("ids") List<Long> longs);
 
 	List<ArchiveFile> searchArchiveFileByArchivesId(@Param("ids") List<Long> ids);
+
+    List<ArchiveWarningVO> getRoutingInspection(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId,@Param("rec") Integer rectification);
+
+	List<ArchiveWarningVO> getSpotCheck(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId);
 }

+ 19 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -1134,6 +1134,25 @@
             #{id}
         </foreach>
     </select>
+    <select id="getRoutingInspection" resultType="org.springblade.archive.vo.ArchiveWarningVO">
+        select uaf.file_name ,uaf.file_url,0 as sourceType,uaf.node_id,
+               (select uaa.name from u_archives_auto uaa WHERE uaa.id = uaf.archive_id) as archive_name,
+               (select GROUP_CONCAT(uai.opinion) from u_archive_inspection uai WHERE uai.file_id = uaf.id) as allopinion
+        from u_archive_file uaf join m_archive_tree_contract atc on uaf.node_id  = atc.id
+        where uaf.project_id  = #{projectId} and uaf.is_deleted = 0 and uaf.rectification = #{rec}
+          and atc.is_deleted = 0
+          and (atc.id = #{nodeId} or FIND_IN_SET(#{nodeId}, atc.ancestors))
+    </select>
+    <select id="getSpotCheck" resultType="org.springblade.archive.vo.ArchiveWarningVO">
+        select GROUP_CONCAT(aei.opinion) as allopinion,aei.archive_name ,aei.node_id,1 as sourceType
+               (select uaf.file_name from u_archive_file uaf WHERE uaf.id = aei.file_id) as fileName,
+               (select uaf.file_url from u_archive_file uaf WHERE uaf.id = aei.file_id) as fileUrl
+        from m_archive_tree_contract atc join u_archive_expert_inspection aei on aei.node_id  = atc.id
+        where atc.project_id  = #{projectId} and atc.is_deleted = 0 and aei.is_deleted = 0 and aei.is_pass = 0
+          and atc.is_deleted = 0
+          and (atc.id = #{nodeId} or FIND_IN_SET(#{nodeId}, atc.ancestors))
+        GROUP by aei.file_id
+    </select>
 
 
     <update id="splitFiles">

+ 9 - 9
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -63,15 +63,15 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
     public static final Map<String, String> NAME_MAP = new HashMap<>();
 
     static {
-        URL_MAP.put("r_Archives_front", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230413/306c87ffc640699aa92d53a5f4e6d632.xlsx");
-        URL_MAP.put("r_Archives_catalog", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230413/f2a083fca685c646e4a47daaaa46f04b.xlsx");
-        URL_MAP.put("r_Archives_spare", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230414/3798f8c3db6f94c8fce63eec8c716d6c.xlsx");
-        URL_MAP.put("r_Archives_back", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230413/31081917b41e12b9b0359f6a9c1755bd.xlsx");
-
-//        URL_MAP.put("r_Archives_front", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/306c87ffc640699aa92d53a5f4e6d632.xlsx");
-//        URL_MAP.put("r_Archives_catalog", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/f2a083fca685c646e4a47daaaa46f04b.xlsx");
-//        URL_MAP.put("r_Archives_spare", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230414/3798f8c3db6f94c8fce63eec8c716d6c.xlsx");
-//        URL_MAP.put("r_Archives_back", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/31081917b41e12b9b0359f6a9c1755bd.xlsx");
+//        URL_MAP.put("r_Archives_front", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230413/306c87ffc640699aa92d53a5f4e6d632.xlsx");
+//        URL_MAP.put("r_Archives_catalog", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230413/f2a083fca685c646e4a47daaaa46f04b.xlsx");
+//        URL_MAP.put("r_Archives_spare", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230414/3798f8c3db6f94c8fce63eec8c716d6c.xlsx");
+//        URL_MAP.put("r_Archives_back", "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230413/31081917b41e12b9b0359f6a9c1755bd.xlsx");
+
+        URL_MAP.put("r_Archives_front", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/306c87ffc640699aa92d53a5f4e6d632.xlsx");
+        URL_MAP.put("r_Archives_catalog", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/f2a083fca685c646e4a47daaaa46f04b.xlsx");
+        URL_MAP.put("r_Archives_spare", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230414/3798f8c3db6f94c8fce63eec8c716d6c.xlsx");
+        URL_MAP.put("r_Archives_back", "https://bladex-oss-chongqing.oss-cn-shenzhen.aliyuncs.com//upload/20230413/31081917b41e12b9b0359f6a9c1755bd.xlsx");
 
         NAME_MAP.put("r_Archives_front", "封面");
         NAME_MAP.put("r_Archives_catalog", "卷内目录");

+ 43 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -550,8 +550,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				archiveFileClient.updateById2(archiveFile);
 				ArchivesAuto archivesAuto =  map.get(archiveFile.getArchiveId());
 				if (archivesAuto!= null) {
-					archivesAuto.setFileN(archiveFile.getFilePage());
-					save(archivesAuto);
+					archivesAuto.setPageN(archiveFile.getFilePage());
+					updateById(archivesAuto);
 				}
 			}
 
@@ -3521,8 +3521,47 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	 */
 	@Override
 	public IPage<ArchiveWarningVO> warningPage(Query query, ArchiveWarningDTO dto) {
-
-		return null;
+		Integer current = query.getCurrent();
+		Integer size = query.getSize();
+		IPage<ArchiveWarningVO> iPage = new Page<>(current,size);
+		//总结果集
+		List<ArchiveWarningVO> vos = new ArrayList<>();
+		//查询档案巡检的数据
+		List<ArchiveWarningVO> vo1 = baseMapper.getRoutingInspection(dto.getProjectId(),dto.getNodeIds(),dto.getRectification());
+		if (vo1.size() != 0){
+			vos.addAll(vo1);
+		}
+		//查询出档案验收的数据
+		List<ArchiveWarningVO> vo2 = baseMapper.getSpotCheck(dto.getProjectId(),dto.getNodeIds());
+		if (vo2.size() != 0){
+			vos.addAll(vo2);
+		}
+		if (vos.size() == 0){
+			iPage.setTotal(0);
+			return iPage;
+		}
+		iPage.setTotal(vos.size());
+		//根据节点id排序,手动分页
+		vos = vos.stream().sorted(Comparator.comparing(ArchiveWarningVO::getNodeId)).collect(Collectors.toList());
+		if (current*size <= vos.size()) {
+			vos = vos.subList((current - 1) * size, current * size);
+		}else {
+			vos = vos.subList((current - 1) * size, vos.size());
+		}
+		//循环验收的数据,拼接专家意见
+		vos.stream().forEach(l->{
+			String allopinion = l.getAllopinion();
+			if (StringUtils.isNotBlank(allopinion)){
+				List<String> list = Func.toStrList(allopinion);
+				StringBuilder str = new StringBuilder();
+				for (int i = 1; i <= list.size(); i++) {
+					str.append(i+""+list.get(i-1));
+				}
+				l.setAllopinion(str.toString());
+			}
+		});
+		iPage.setRecords(vos);
+		return iPage;
 	}
 
 

+ 130 - 23
blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java

@@ -235,6 +235,95 @@ public class EVisaTaskCheckController {
         return R.data(300, false, "未选择审批人!!!");
     }
 
+    /**
+     * 检查自选的任务人是否存在电签信息,日志,首件使用
+     */
+    @PostMapping("/checkCustomFlowUserIsEVisaPermissions3")
+    @ApiOperation(value = "检查所选的流程环节处理人是否具有审批权限(三大填报页、日志列表的批量上报、首件列表的批量上报)")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "customFlowUserList", value = "所选的任务人集合,集合形式", required = true),
+            @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<Boolean> checkCustomFlowUserIsEVisaPermissions3(@RequestBody JSONObject json) {
+        if (json.containsKey("customFlowUserList") && !json.getJSONArray("customFlowUserList").isEmpty()) {
+            Long cId = json.getLong("contractId");
+            //获取对应表格的所有电签配置
+            String logIds = json.getString("theLogPrimaryKeyId");
+            String firstIds = json.getString("firstId");
+            List<Long> longs = new ArrayList<>();
+            String pdfUrl = "";
+            if (StringUtils.isNotBlank(logIds)) {
+                longs = Func.toLongList(logIds);
+                ContractLog log = logService.getById(longs.get(0));
+                if (log == null || StringUtils.isBlank(log.getPdfUrl())) {
+                    return R.fail(300, "当前日志还未生成PDF,不能上报");
+                }
+                pdfUrl = log.getPdfUrl();
+            }else if (StringUtils.isNotBlank(firstIds)){
+                longs = Func.toLongList(firstIds);
+                InformationQuery query = informationQueryService.getById(longs.get(0));
+                if (query == null || StringUtils.isBlank(query.getPdfUrl())) {
+                    return R.fail(300, "当前首件还未生成PDF,不能上报");
+                }
+                pdfUrl = query.getPdfUrl();
+            }
+
+            if (StringUtils.isBlank(pdfUrl)) {
+                return R.fail(300, "当前节点还未生成PDF,不能上报");
+            }
+            //获取审批人
+            List<Long> customFlowUserList = json.getJSONArray("customFlowUserList").toJavaList(Long.class);
+            //获取这些审批人在资料合同段的权限
+            List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(customFlowUserList, cId + "");
+            if (userRoleList == null || userRoleList.size() <= 0) {
+                //查看项目下是否有监理合同段关联资料合同段
+                Long contractId = jdbcTemplate.queryForObject("SELECT id from m_contract_info mci WHERE contract_type = 2 \n" +
+                        "and id in (SELECT contract_id_jlyz  FROM m_contract_relation_jlyz WHERE contract_id_sg = " + cId + ")", Long.class);
+                if (contractId == null) {
+                    return R.data(300, false, "所选审批人均未找到当前表格所需要的签字岗位,请联系服务人员处理");
+                }
+                userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(customFlowUserList, contractId + "");
+                if (userRoleList == null || userRoleList.size() <= 0) {
+                    return R.data(300, false, "所选审批人均未找到当前表格所需要的签字岗位,请联系服务人员处理");
+                }
+            }
+
+            //获取电签配置
+            List<JSONObject> jsonList = this.queryTableEVisaConfig(json, pdfUrl);
+            if (jsonList == null) {
+                return R.data(300, false, "未找到符合电签配置的相关流程,请重新保存后上报");
+            }
+
+            //汇总电签配置的审批角色
+            List<String> eVisaRoleList = jsonList.stream().map(jsonObject -> jsonObject.getString("sigRoleId")).distinct().collect(Collectors.toList());
+
+            //检查
+            //循环审批人的角色集合,并判断电签配置中是否含有这个角色
+            List<String> userNameFail = new ArrayList<>();
+            for (JSONObject userRole : userRoleList) {
+                if (!eVisaRoleList.contains(userRole.getString("roleId"))) {
+                    User user = this.userClient.userInfoById(userRole.getLong("userId")).getData();
+                    userNameFail.add(user.getRealName());
+                }
+            }
+
+            //批量提示
+            if (userNameFail.size() > 0) {
+                return R.data(300, false, "所选中的用户【" + StringUtils.join(userNameFail, ",") + "】不具备当前表格所需要的签字岗位,请联系维护人员处理或更换审批人员");
+            }
+
+            //均满足
+            return R.data(true);
+        }
+
+        return R.data(300, false, "未选择审批人!!!");
+    }
+
     /**
      * 获取符合条件的预设流程(三大填报页、日志列表的批量上报、首件列表的批量上报)
      */
@@ -443,20 +532,38 @@ public class EVisaTaskCheckController {
         FixedFlowVO vo = new FixedFlowVO();
         vo.setCurrent(1);
         vo.setSize(100);
-        vo.setContractId(json.getLong("contractId"));
+        Long contractId = json.getLong("contractId");
+        vo.setContractId(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())) {
+        String logIds = json.getString("theLogPrimaryKeyId");
+        String firstIds = json.getString("firstId");
+        List<Long> longs = new ArrayList<>();
+        String pdfUrl = "";
+        if (StringUtils.isNotBlank(logIds)) {
+            longs = Func.toLongList(logIds);
+            ContractLog log = logService.getById(longs.get(0));
+            if (log == null || StringUtils.isBlank(log.getPdfUrl())) {
+                return R.fail(300, "当前日志还未生成PDF,不能上报");
+            }
+            pdfUrl = log.getPdfUrl();
+        }else if (StringUtils.isNotBlank(firstIds)){
+                longs = Func.toLongList(firstIds);
+            InformationQuery query = informationQueryService.getById(longs.get(0));
+            if (query == null || StringUtils.isBlank(query.getPdfUrl())) {
+                return R.fail(300, "当前首件还未生成PDF,不能上报");
+            }
+            pdfUrl = query.getPdfUrl();
+        }
+
+        if (StringUtils.isBlank(pdfUrl)) {
             return R.fail(300, "当前节点还未生成PDF,不能上报");
         }
-        List<JSONObject> jsonList = this.queryTableEVisaConfig(json, log.getPdfUrl());
+        List<JSONObject> jsonList = this.queryTableEVisaConfig(json, pdfUrl);
 
         if (jsonList == null || jsonList.size() == 0) {
             return R.fail(300, "未找到符合电签配置的相关流程,请重新保存再上报");
@@ -476,10 +583,10 @@ public class EVisaTaskCheckController {
             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() + "");
+            List<JSONObject> userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(flowLink.stream().map(FixedFlowLink::getFixedFlowLinkUser).distinct().collect(Collectors.toList()), contractId + "");
             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() + ")";
+                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 = " + contractId + ")";
                 ContractInfo contractInfo = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
                 if (contractInfo != null) {
                     userRoleList = this.saveUserInfoByProjectClient.queryUserContractRole(ids, contractInfo.getId() + "");
@@ -693,20 +800,20 @@ public class EVisaTaskCheckController {
      */
     private List<JSONObject> queryTableEVisaConfig(JSONObject json, String eVisaPDFUrl) {
         List<JSONObject> jsonList;
-        if (json.containsKey("theLogPrimaryKeyId") && StringUtils.isNotEmpty(json.getString("theLogPrimaryKeyId"))) {
-            //日志,需要先获取对应的表格
-            jsonList = this.queryTableEVisaConfig(Func.toStrList(json.getString("theLogPrimaryKeyId")));
-
-        } else if (json.containsKey("firstId") && StringUtils.isNotEmpty(json.getString("firstId"))) {
-            //首件,先获取记录
-            InformationQuery query = this.informationQueryService.getById(json.getLong("firstId"));
-            if (query != null) {
-                jsonList = this.queryTableEVisaConfig(Func.toStrList(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(query.getTableId()).getIsTypePrivatePid().toString()));
-            } else {
-                jsonList = null;
-            }
-
-        } else {
+//        if (json.containsKey("theLogPrimaryKeyId") && StringUtils.isNotEmpty(json.getString("theLogPrimaryKeyId"))) {
+//            //日志,需要先获取对应的表格
+//            jsonList = this.queryTableEVisaConfig(Func.toStrList(json.getString("theLogPrimaryKeyId")));
+//
+//        } else if (json.containsKey("firstId") && StringUtils.isNotEmpty(json.getString("firstId"))) {
+//            //首件,先获取记录
+//            InformationQuery query = this.informationQueryService.getById(json.getLong("firstId"));
+//            if (query != null) {
+//                jsonList = this.queryTableEVisaConfig(Func.toStrList(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(query.getTableId()).getIsTypePrivatePid().toString()));
+//            } else {
+//                jsonList = null;
+//            }
+//
+//        } else {
             //资料填报
             List<String> ids = PDFUtil.getPdfSignIds(eVisaPDFUrl);
             if (ids == null || ids.size() == 0) {
@@ -715,7 +822,7 @@ public class EVisaTaskCheckController {
             String sql = "select * from m_textdict_info where id in(" + StringUtils.join(ids, ",") + ") ";
             List<TextdictInfo> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TextdictInfo.class));
             jsonList = JSONArray.parseArray(JSONObject.toJSONString(query), JSONObject.class);
-        }
+//        }
         return jsonList;
     }
 

+ 3 - 3
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -1571,12 +1571,12 @@ public class TaskController extends BladeController {
     @PostMapping("/reSigningEVisa")
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "任务管理-一键重签", notes = "传入taskIds、下拉框的contractId、projectId")
-    public R<Object> reSigningEVisa(@RequestParam String classifyType,@RequestParam String taskIds, @RequestParam String contractId, @RequestParam String projectId, HttpServletRequest request) {
-        if (ObjectUtil.isEmpty(taskIds)) {
+    public R<Object> reSigningEVisa(@RequestBody reSigningEVisaDTO dto ,HttpServletRequest request) {
+        if (StringUtils.isBlank(dto.getTaskIds())) {
             return R.fail("请选择一条记录");
         }
         String header = request.getHeader("Blade-Auth");
-        taskService.reSigningEVisa(classifyType,taskIds, contractId, projectId, header);
+        taskService.reSigningEVisa(dto.getClassifyType(),dto.getTaskIds(), dto.getContractId(), dto.getProjectId(),dto.getType(), header);
         return R.success("任务已经成功提交重签,请耐心等待!");
     }
 

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/ITaskService.java

@@ -98,7 +98,7 @@ public interface ITaskService extends BaseService<Task> {
     void delArchiveFileBusinessData(Long projectId, Long wbsId);
 
     @Async
-    void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, String header);
+    void reSigningEVisa(String classify, String taskIds, String contractId, String projectId,Integer type, String header);
 
     /**
      * 根据数据源id查询任务

+ 22 - 10
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -579,7 +579,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     }
 
 
-    //@Scheduled(cron = "0/20 * * * * ?")
+    @Scheduled(cron = "0/20 * * * * ?")
     public void SignInfo() throws InterruptedException {
         //执行代码
         logger.debug("扫描开始");
@@ -1397,7 +1397,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 //    }
 
     @Override
-    public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId, String header) {
+    @Transactional
+    public void reSigningEVisa(String classify, String taskIds, String contractId, String projectId,Integer type, String header) {
         //查询任务信息
         List<Task> taskList = jdbcTemplate.query("select * from u_task where id in(" + taskIds + ")", new BeanPropertyRowMapper<>(Task.class));
         if (taskList.size() > 0) {
@@ -1416,13 +1417,23 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             Map<String, String> queryMap = jdbcTemplate.query("select * from u_information_query where id in(" + StringUtils.join(dataIdList, ",") + ")", new BeanPropertyRowMapper<>(InformationQuery.class)).stream().collect(Collectors.toMap(l -> l.getId() + "", l -> l.getWbsId() + ""));
             try {
                 for (Task task : taskList) {
-                    //重新保存
-                    long startTime_1 = System.currentTimeMillis();
-                    R result = this.saveNodePdf(classify, queryMap.get(task.getFormDataId()), contractId, projectId, header);
-                    long endTime_1 = System.currentTimeMillis();
-                    long executionTime_1 = endTime_1 - startTime_1;
-                    log.info("saveNodePdf执行时间:" + executionTime_1 + " 毫秒");
-
+                    R result = new R();
+                    if (type == 1) {
+                        //重新保存
+                        long startTime_1 = System.currentTimeMillis();
+                        result = this.saveNodePdf(classify, queryMap.get(task.getFormDataId()), contractId, projectId, header);
+                        long endTime_1 = System.currentTimeMillis();
+                        long executionTime_1 = endTime_1 - startTime_1;
+                        log.info("saveNodePdf执行时间:" + executionTime_1 + " 毫秒");
+                    }else {
+                        boolean b = informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                                .eq(InformationQuery::getId, task.getFormDataId())
+                                .set(InformationQuery::getEVisaPdfUrl, null));
+                        if (!b){
+                            throw new ServiceException("清空电签PDF失败");
+                        }
+                        result.setData("成功");
+                    }
                     //重新电签
                     if (result != null && "成功".equals(result.getData())) {
                         List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
@@ -1460,8 +1471,9 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                 throw new ServiceException("重新保存PDF信息失败,原因:" + e.getMessage());
             }
 
+        }else {
+            throw new ServiceException("未获取到任务信息,操作失败!");
         }
-        throw new ServiceException("未获取到任务信息,操作失败!");
     }
 
     R saveNodePdf(String classify, String nodePKeyIds, String contractId, String projectId, String header) throws Exception {

+ 23 - 13
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java

@@ -504,11 +504,11 @@ public class EVisaServiceImpl implements EVisaService {
                     pdfVO.setStrategyVoList(sealStrategyVOS);
 
                     //获取字节
-                    URL url =new URL(pdfUrl);
+                    URL url = new URL(pdfUrl);
                     byte[] fileByte;
                     try {
                         fileByte = IOUtils.toByteArray(url);
-                    }catch (Exception e){
+                    } catch (Exception e) {
                         return null;
                     }
 
@@ -541,7 +541,7 @@ public class EVisaServiceImpl implements EVisaService {
         //释放锁
         //  DistributedRedisLock.release(task.getUserId().toString());
 
-        System.out.println("bladeFile---eVisa"+task.getFormDataId()+"--"+resultMessage);
+        System.out.println("bladeFile---eVisa" + task.getFormDataId() + "--" + resultMessage);
         return resultMessage;
     }
 
@@ -552,7 +552,7 @@ public class EVisaServiceImpl implements EVisaService {
      */
     public String eVisaCustom(org.springblade.evisa.vo.TaskArchiveDTO taskArchiveDTO) {
         //type=1表示任务审批自定义签章,type=2表示认证电签签章(不涉及审批任务)
-        if (taskArchiveDTO.getSealStrategy()!=null && taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 1) {
+        if (taskArchiveDTO.getSealStrategy() != null && taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 1) {
             //获取档案任务
             Task task = jdbcTemplate.queryForObject("select form_data_id from u_task where id = " + taskArchiveDTO.getTaskId(), new BeanPropertyRowMapper<>(Task.class));
             if (task != null) {
@@ -621,7 +621,7 @@ public class EVisaServiceImpl implements EVisaService {
                 }
             }
             return "";
-        } else if (taskArchiveDTO.getSealStrategy()!=null && taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 2) {
+        } else if (taskArchiveDTO.getSealStrategy() != null && taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 2) {
             //此时的taskArchiveDTO.taskId=档案数据业务id(档案认证不涉及审批流任务)
             //获取档案任务的文件信息(这里根据id再查询一次,入参的时候不想重新构造入参的dto了)
             ArchiveFile archiveFile = jdbcTemplate.queryForObject("select pdf_file_url,e_visa_file from u_archive_file where id = " + taskArchiveDTO.getTaskId(), new BeanPropertyRowMapper<>(ArchiveFile.class));
@@ -784,7 +784,7 @@ public class EVisaServiceImpl implements EVisaService {
      */
     private Object[] signPdfByAXQZ(SealPdfVO pdfVO, byte[] fileByte) {
         Object[] result = new Object[3];
-            try {
+        try {
             PaperlessClient paperlessClient = new PaperlessClient(SIGN_HOST, SIGN_PORT, 300000, 1800000);
             paperlessClient.setSSL(false);
             //*****************************************************************************
@@ -834,11 +834,11 @@ public class EVisaServiceImpl implements EVisaService {
 
             compoundSealPdfListDetachedRequest.setBody(requestBody);
             //****************************** 请求服务端进行签章 *********************************************
-            System.out.println("-----------------------"+new Date().toString()+"开始"+transactionNo +"----------------------------");
+            System.out.println("-----------------------" + new Date().toString() + "开始" + transactionNo + "----------------------------");
 
             ResponseDto responseDto = paperlessClient.execute(compoundSealPdfListDetachedRequest);
 
-            System.out.println("-----------------------"+new Date().toString()+"结束"+transactionNo +"----------------------------");
+            System.out.println("-----------------------" + new Date().toString() + "结束" + transactionNo + "----------------------------");
             //******************************解析响应结果 *********************************************
             CompoundSealPdfListDetachedResponse compoundSealPdfListDetachedResponse = (CompoundSealPdfListDetachedResponse) responseDto;
             ResponseHead responseHead = compoundSealPdfListDetachedResponse.getHead();
@@ -856,9 +856,9 @@ public class EVisaServiceImpl implements EVisaService {
                 result[1] = compoundSealPdfListDetachedResponse.toString();
                 result[2] = responseHead.getMessage();
             }
-            }catch (Exception e){
-                e.printStackTrace();
-            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         return result;
     }
 
@@ -1142,8 +1142,18 @@ public class EVisaServiceImpl implements EVisaService {
                         Rectangle page = reader.getPageSize(Integer.parseInt(vo.getPage()));
                         float x1 = page.getWidth() / 100 * Float.parseFloat(vo.getLx()) + 3;
                         float y1 = page.getHeight() / 100 * Float.parseFloat(vo.getLy());
-                        String x2 = String.valueOf(x1).substring(0, String.valueOf(x1).indexOf("."));
-                        String y2 = String.valueOf(y1).substring(0, String.valueOf(y1).indexOf("."));
+                        String x2;
+                        if (String.valueOf(x1).contains(".")) {
+                            x2 = String.valueOf(x1).substring(0, String.valueOf(x1).indexOf("."));
+                        } else {
+                            x2 = String.valueOf(x1);
+                        }
+                        String y2;
+                        if (String.valueOf(x1).contains(".")) {
+                            y2 = String.valueOf(y1).substring(0, String.valueOf(y1).indexOf("."));
+                        } else {
+                            y2 = String.valueOf(y1);
+                        }
                         sealStrategy.setSignWithCoordinate(vo.getPage(), x2, y2);
                     }
                 }

+ 1 - 1
blade-service/blade-land/src/main/resources/application-dev.yml

@@ -1,6 +1,6 @@
 #服务器端口
 server:
-  port: 9102
+  port: 9107
 
 #数据源配置
 spring:

+ 51 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/feign/MeterTaskClientImpl.java

@@ -0,0 +1,51 @@
+package org.springblade.meter.feign;
+
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.business.entity.MessageWarning;
+import org.springblade.business.entity.Task;
+import org.springblade.business.entity.TaskParallel;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+@AllArgsConstructor
+public class MeterTaskClientImpl implements MeterWebSocketClient {
+
+    private final JdbcTemplate jdbcTemplate;
+
+    @Override
+    public Map<String, String> getWebsocketMsg(String projectId, String contractId, String userIdResult) {
+        List<Task> tasks = jdbcTemplate.query("SELECT process_instance_id FROM u_task WHERE project_id = " + projectId + " AND contract_id = " + contractId + " AND status = 1 AND approval_type = 5 AND is_deleted = 0", new BeanPropertyRowMapper<>(Task.class));
+        List<String> taskCountIds = tasks.stream().map(Task::getProcessInstanceId).collect(Collectors.toList());
+        long taskAllCount = 0;
+        if (taskCountIds.size() > 0) {
+            List<TaskParallel> query = jdbcTemplate.query("SELECT id FROM u_task_parallel WHERE process_instance_id IN (" + StringUtils.join(taskCountIds, ",") + ") AND task_user = " + userIdResult + " AND status = 1", new BeanPropertyRowMapper<>(TaskParallel.class));
+            taskAllCount = query.size();
+        }
+        List<MessageWarning> messageWarnings = jdbcTemplate.query("SELECT type FROM u_message_warning WHERE project_id = " + projectId + " AND contract_id = " + contractId + " AND push_user = " + userIdResult + " AND is_read = 0 AND is_deleted = 0", new BeanPropertyRowMapper<>(MessageWarning.class));
+        long messageCount1 = messageWarnings.stream().filter(f -> f.getType().equals(1)).count();
+        long messageCount2 = messageWarnings.stream().filter(f -> f.getType().equals(2)).count();
+        long messageCount3 = messageWarnings.stream().filter(f -> f.getType().equals(3)).count();
+        long messageCount4 = messageWarnings.stream().filter(f -> f.getType().equals(4)).count();
+        long messageCount5 = messageWarnings.stream().filter(f -> f.getType().equals(5)).count();
+        Map<String, String> map = new HashMap<>();
+        map.put("allCount", String.valueOf(taskAllCount + messageWarnings.size()));
+        map.put("taskCount", String.valueOf(taskAllCount));
+        map.put("messageCount", String.valueOf(messageWarnings.size()));
+        map.put("messageCount_1", String.valueOf(messageCount1));
+        map.put("messageCount_2", String.valueOf(messageCount2));
+        map.put("messageCount_3", String.valueOf(messageCount3));
+        map.put("messageCount_4", String.valueOf(messageCount4));
+        map.put("messageCount_5", String.valueOf(messageCount5));
+        map.put("userId", userIdResult);
+        return map;
+    }
+
+
+}

+ 2 - 2
blade-service/blade-rabbitmq-consumer/src/main/java/org/springblade/consumer/socket/WebSocketEndpoint.java

@@ -117,7 +117,7 @@ public class WebSocketEndpoint implements ApplicationContextAware {
                         stringMap = businessWebSocketClient.getWebsocketMsg(projectId, contractId, userId);
                         break;
                     case ClientIdConstant.METER_CLIENT_ID:
-                        // TODO stringMap = meterWebSocketClient.getWebsocketMsg(projectId, contractId, userId);
+                        stringMap = meterWebSocketClient.getWebsocketMsg(projectId, contractId, userId);
                         break;
                 }
                 try {
@@ -193,7 +193,7 @@ public class WebSocketEndpoint implements ApplicationContextAware {
                                 stringMap = businessWebSocketClient.getWebsocketMsg(projectId, contractId, userId);
                                 break;
                             case ClientIdConstant.METER_CLIENT_ID:
-                                // TODO stringMap = meterWebSocketClient.getWebsocketMsg(projectId, contractId, userId);
+                                stringMap = meterWebSocketClient.getWebsocketMsg(projectId, contractId, userId);
                                 break;
                         }
                         if (stringMap.size() > 0) {