Explorar o código

Merge branch 'refs/heads/feature-lihb-20250806' into test-merge

LHB hai 6 días
pai
achega
e9c5f4a747

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

@@ -57,7 +57,7 @@ public interface ITaskService extends BaseService<Task> {
     /**
      * 批量审批
      */
-    void batchCompleteApprovalTask(List<TaskApprovalVO> taskApprovalVOS) throws FileNotFoundException;
+    Boolean batchCompleteApprovalTask(List<TaskApprovalVO> taskApprovalVOS) throws FileNotFoundException;
 
     /**
      * 启动流程

+ 109 - 12
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -624,7 +624,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
      * @throws FileNotFoundException
      */
     @Override
-    public void batchCompleteApprovalTask(List<TaskApprovalVO> taskApprovalVOS) {
+    public Boolean batchCompleteApprovalTask(List<TaskApprovalVO> taskApprovalVOS) {
         Long userId = AuthUtil.getUserId();
         String nickName = AuthUtil.getNickName();
         // 批量审批接口
@@ -671,7 +671,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         e.printStackTrace();
                     }
                 }
-                this.taskBatchService.saveBatch(taskList);
+                return this.taskBatchService.saveBatch(taskList);
             }else if (taskAppr.getFlag().equals("NO")){ //废除
                 Set<String> taskIds = taskApprovalVOS.stream().map(TaskApprovalVO::getTaskId).collect(Collectors.toSet());
                 List<Task> tasks = this.listByIds(taskIds);
@@ -764,8 +764,10 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     }
                 }
                 wbsTreeContractStatisticsClient.updateInformationQueryStatusByTaskId(String.join(",", taskIds));
+                return true;
             }
         }
+        return false;
     }
 
 
@@ -2035,15 +2037,33 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                     R result = new R();
                     jdbcTemplate.execute("DELETE from u_task_batch where json_data like '%"+task.getId()+"%'");
                     boolean b = false;
+
+                    //是否恢复pdf
+                    Boolean isRestorePdf = false;
+                    //当前节点的电签pdf
+                    String eVisaPdfUrl = "";
+                    String pdfUrl = "";
                     if(type == 1){
+                        //当前节点的电签pdf
+                        InformationQuery byId = informationQueryService.getById(task.getFormDataId());
+                        if(byId != null){
+                            eVisaPdfUrl = byId.getEVisaPdfUrl();
+                            pdfUrl = byId.getPdfUrl();
+                        }
                          b = informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
                                 .eq(InformationQuery::getId, task.getFormDataId())
                                 .set(InformationQuery::getEVisaPdfUrl, null)
-//                                .set(InformationQuery::getPdfUrl, null)
+                                .set(InformationQuery::getPdfUrl, null)
                          );
                     }else {
                         if(task.getApprovalType()==3){
-                           b=contractLogService.update(new LambdaUpdateWrapper<ContractLog>()
+                            //当前节点的电签pdf
+                            ContractLog byId = contractLogService.getById(task.getFormDataId());
+                            if(byId != null){
+                                eVisaPdfUrl = byId.getEVisaPdfUrl();
+                            }
+
+                            b=contractLogService.update(new LambdaUpdateWrapper<ContractLog>()
                                .eq(ContractLog::getId,task.getFormDataId())
                                .set(ContractLog::getEVisaPdfUrl,null));
                            if(!b){
@@ -2051,6 +2071,11 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                                return;
                            }
                         }else {
+                            //当前节点的电签pdf
+                            InformationQuery byId = informationQueryService.getById(task.getFormDataId());
+                            if(byId != null){
+                                eVisaPdfUrl = byId.getEVisaPdfUrl();
+                            }
                             b = informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
                                 .eq(InformationQuery::getId, task.getFormDataId())
                                 .set(InformationQuery::getEVisaPdfUrl, null));
@@ -2071,7 +2096,15 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                             String sql="select type from u_information_query where id="+task.getFormDataId();
                             Integer InformationType = jdbcTemplate.queryForObject(sql, new SingleColumnRowMapper<>(Integer.class));
                             if(InformationType==1){
-                                result = this.saveNodePdf(typeMap.get(task.getFormDataId()), queryMap.get(task.getFormDataId()), contractId, projectId, header);
+                                try {
+                                    result = this.saveNodePdf(typeMap.get(task.getFormDataId()), queryMap.get(task.getFormDataId()), contractId, projectId, header);
+                                    //恢复pdf
+                                    if(result.getCode()!=200){
+                                        isRestorePdf = true;
+                                    }
+                                } catch (Exception e) {
+                                    isRestorePdf = true;
+                                }
                             }else {
                                 TrialResignDto dto=new TrialResignDto();
                                 dto.setType(1);
@@ -2091,14 +2124,23 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                             String sql="SELECT * from u_entrust_info where id=(select wbs_id from u_information_query where id="+task.getFormDataId()+")";
                             EntrustInfo info = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(EntrustInfo.class));
                             ReSigningEntrustDto dto=new ReSigningEntrustDto(info.getId().toString(),task.getId().toString(),contractId,info.getNodeId(),2,1);
-                            result=excelTabClient.saveReEntrustTabData(dto,header);
-                            if(result.getCode()==200){
-                                if(result.getData()!=null){
-                                    informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
-                                        .eq(InformationQuery::getId, task.getFormDataId())
-                                        .set(InformationQuery::getPdfUrl,result.getData()));
+                            try {
+                                result=excelTabClient.saveReEntrustTabData(dto,header);
+                                if(result.getCode()==200){
+                                    if(result.getData()!=null){
+                                        informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                                                .eq(InformationQuery::getId, task.getFormDataId())
+                                                .set(InformationQuery::getPdfUrl,result.getData()));
+                                    }
+                                }else{
+                                    //恢复pdf
+                                    isRestorePdf = true;
                                 }
+                            } catch (Exception e) {
+                                //恢复pdf
+                                isRestorePdf = true;
                             }
+
                         }
                         long endTime_1 = System.currentTimeMillis();
                         long executionTime_1 = endTime_1 - startTime_1;
@@ -2109,6 +2151,16 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         }
                         result.setData("成功");
                     }
+                    //恢复pdf 并且 恢复电签pdf
+                    if(isRestorePdf){
+                        informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                                .eq(InformationQuery::getId, task.getFormDataId())
+                                .set(InformationQuery::getPdfUrl, pdfUrl)
+                                .set(InformationQuery::getEVisaPdfUrl, eVisaPdfUrl));
+                        continue;
+                    }
+
+
                     //重新电签
                     if (result != null && ("成功".equals(result.getData())||200==result.getCode())) {
                         List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
@@ -2130,12 +2182,57 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         }
                         long startTime_2 = System.currentTimeMillis();
                         if(taskApprovalVOS!=null && taskApprovalVOS.size()>=1){
-                            this.batchCompleteApprovalTask(taskApprovalVOS);
+                            boolean b1 = this.batchCompleteApprovalTask(taskApprovalVOS);
+                            //如果失败 恢复电签
+                            if (!b1) {
+                                if (type == 1) {
+                                    //当前节点的电签pdf
+                                    informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                                            .eq(InformationQuery::getId, task.getFormDataId())
+                                            .set(InformationQuery::getEVisaPdfUrl, eVisaPdfUrl)
+                                    );
+                                } else {
+                                    if (task.getApprovalType() == 3) {
+                                        contractLogService.update(new LambdaUpdateWrapper<ContractLog>()
+                                                .eq(ContractLog::getId, task.getFormDataId())
+                                                .set(ContractLog::getEVisaPdfUrl, eVisaPdfUrl));
+                                        if (!b) {
+                                            jdbcTemplate.update("update u_task set is_deleted=1 where id=" + task.getId());
+                                            return;
+                                        }
+                                    } else {
+                                        informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                                                .eq(InformationQuery::getId, task.getFormDataId())
+                                                .set(InformationQuery::getEVisaPdfUrl, eVisaPdfUrl));
+                                    }
+                                }
+                            }
                         }
                         long endTime_2 = System.currentTimeMillis();
                         long executionTime_2 = endTime_2 - startTime_2;
                         log.info("batchCompleteApprovalTask执行时间:" + executionTime_2 + " 毫秒");
                     } else {
+                        if (type == 1) {
+                            //当前节点的电签pdf
+                            informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                                    .eq(InformationQuery::getId, task.getFormDataId())
+                                    .set(InformationQuery::getEVisaPdfUrl, eVisaPdfUrl)
+                            );
+                        } else {
+                            if (task.getApprovalType() == 3) {
+                                contractLogService.update(new LambdaUpdateWrapper<ContractLog>()
+                                        .eq(ContractLog::getId, task.getFormDataId())
+                                        .set(ContractLog::getEVisaPdfUrl, eVisaPdfUrl));
+                                if (!b) {
+                                    jdbcTemplate.update("update u_task set is_deleted=1 where id=" + task.getId());
+                                    return;
+                                }
+                            } else {
+                                informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
+                                        .eq(InformationQuery::getId, task.getFormDataId())
+                                        .set(InformationQuery::getEVisaPdfUrl, eVisaPdfUrl));
+                            }
+                        }
                         //修改重签状态为保存PDF失败
                         this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
                                 .set(TaskParallel::getEVisaContent, "重新保存PDF失败")

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -1472,7 +1472,9 @@ public class ExecutorMeter extends FormulaExecutor {
             /*数据获取end*/
              double total=dataList.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(BaseUtils::obj2DoubleZero).sum();
             /*往期累计,本期支付,累计支付*/
-            periodCount(dataList.get(dataList.size()-1));
+            if(!dataList.isEmpty()){
+                periodCount(dataList.get(dataList.size()-1));
+            }
              if(total>0){
                  FormData ft =tec.formDataMap.get(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9");
                  put2FormData(ft,total);

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -6194,7 +6194,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         return remap;
     }
     public Map<String, String> getWtpParent(String meterType, String projectId) {
-        Map<String, Object> map = this.jdbcTemplate.queryForMap("select id,wbs_id wbsId,CONCAT(ancestors,',',p_key_id) path from  m_wbs_tree_private a  where a.node_name=? and a.project_id=?", meterType, projectId);
+        Map<String, Object> map = this.jdbcTemplate.queryForMap("select id,wbs_id wbsId,CONCAT(ancestors_p_id,',',p_key_id) path from  m_wbs_tree_private a  where a.node_name=? and a.project_id=?", meterType, projectId);
         Map<String, String> result = new HashMap<>();
         for (Map.Entry<String, Object> entry : map.entrySet()) {
             result.put(entry.getKey(), StringUtils.handleNull(entry.getValue()));
@@ -6378,7 +6378,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     public List<NodeTable> getTableListMeter(Map<String, String> parent) {
-        return this.getSqlList("select a.p_key_id as pkeyId,a.status, a.node_name as nodeName, a.init_table_name as initTableName, a.html_url as htmlUrl, a.excel_id as excelId from m_wbs_tree_private a join m_wbs_tree_private b on(a.parent_id=b.id and a.project_id=b.project_id) where a.ancestors like ? and LENGTH(a.html_url) > 0 and a.is_deleted = 0 and a.project_id = ? and a.wbs_id = ?  ORDER BY b.sort,a.sort", NodeTable.class, parent.get("path") + "%", parent.get("projectId"), parent.get("wbsId"));
+        return this.getSqlList("select a.p_key_id as pkeyId,a.status, a.node_name as nodeName, a.init_table_name as initTableName, a.html_url as htmlUrl, a.excel_id as excelId from m_wbs_tree_private a join m_wbs_tree_private b on(a.parent_id=b.id and a.project_id=b.project_id) where a.ancestors_p_id like ? and LENGTH(a.html_url) > 0 and a.is_deleted = 0 and a.project_id = ? and a.wbs_id = ?  ORDER BY b.sort,a.sort", NodeTable.class, parent.get("path") + "%", parent.get("projectId"), parent.get("wbsId"));
     }
 
 

+ 36 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -624,8 +624,6 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 //        if(info!=null){
 //            resultTabs.forEach(tab->tab.setFileName(info.getName()));
 //        }
-        // 使用自定义 Comparator 进行排序
-        resultTabs.sort(new WbsTreeContractComparator());
         if (Optional.ofNullable(wbsTreeContract.getIsUseSort()).orElse(0) == 0) {
             //表单排序
             if (resultTabs.size() > 0) {
@@ -634,27 +632,61 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 return this.sortTabs(resultTabsToCopy, "_PL_"); //频率表排序
             }
         }
+        // 使用自定义 Comparator 进行排序
+        resultTabs.sort(new WbsTreeContractComparator());
         return resultTabs;
     }
 
     private void sortTabsByIsTypePrivatePid(List<AppWbsTreeContractVO> resultTabs) {
         if(!resultTabs.isEmpty()){
+           StringBuilder ids=new StringBuilder("");
+            List<Integer>sorts1=new ArrayList<>();
+            List<Integer>sorts2=new ArrayList<>();
             for (AppWbsTreeContractVO resultTab : resultTabs) {
                 if(resultTab.getExcelId()==null){
                     continue;
                 }
+                //拿到质量检验表附表的pkeyId,以及sort
                 if(resultTab.getExcelId()==1777969831956520962L||resultTab.getExcelId()==1636534954773417986L||resultTab.getExcelId()==1626130998410768385L){
+                    ids.append(resultTab.getPKeyId()+",");
+                    sorts2.add(resultTab.getSort());
                     continue;
                 }
+                //检验附表以外的排序有问题的表单修改
                 if(resultTab.getIsTypePrivatePid()!=null){
-                    String sql="select IFNULL(sort,1000) from m_wbs_tree_private where p_key_id="+resultTab.getIsTypePrivatePid()+" and is_deleted=0";
-                    Integer sort = jdbcTemplate.queryForObject(sql,Integer.class);
+                    Integer sort=1000;
+                    try{
+                        String sql="select IFNULL(sort,1000) from m_wbs_tree_private where p_key_id="+resultTab.getIsTypePrivatePid()+" and is_deleted=0";
+                        sort= jdbcTemplate.queryForObject(sql,Integer.class);
+                    }catch (Exception e){
+                        System.out.println("未找到p_key_id"+resultTab.getIsTypePrivatePid()+"的数据");
+                    }
                     if(sort!=null&&sort!=1000&&!Objects.equals(sort, resultTab.getSort())){
                         resultTab.setSort(sort);
                         String sql1="update m_wbs_tree_contract set sort="+sort+" where p_key_id="+resultTab.getPKeyId();
                         jdbcTemplate.update(sql1);
                     }
                 }
+                //tableType=1 的表单sort
+                if(resultTab.getTableType()!=null&&resultTab.getTableType()==1){
+                    sorts1.add(resultTab.getSort());
+                }
+            }
+            if(!sorts1.isEmpty()&&!sorts2.isEmpty()){
+                String idss = ids.substring(0, ids.length() - 1);
+                //tableType=1 的表单sort的最大值
+                Integer maxSort = Collections.max(sorts1);
+                //质量检验表附表 的sort的最小值
+                Integer minSort = Collections.min(sorts2);
+                if(maxSort>minSort){
+                    resultTabs.forEach(r->{
+                       if(idss.contains(r.getPKeyId()+"")){
+                           r.setSort(maxSort);
+                       }
+                    });
+                    String sql2="update m_wbs_tree_contract set sort="+maxSort+" where p_key_id in ("+idss+")";
+                    jdbcTemplate.update(sql2);
+                }
             }
         }
     }