소스 검색

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

# Conflicts:
#	blade-service-api/blade-dingding-api/src/main/java/org/springblade/dingding/vo/MeetingVo.java
#	blade-service-api/blade-websocket-api/src/main/java/org/springblade/websocket/vo/UserInfoVO.java
#	blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java
#	blade-service/blade-dingding/src/main/java/org/springblade/dingding/controller/MeetingController.java
#	blade-service/blade-dingding/src/main/java/org/springblade/dingding/service/impl/MeetingServiceImpl.java
#	blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/ScrDataServiceImpl.java
#	blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
LHB 2 주 전
부모
커밋
2de0a14d81

+ 1 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/PreviewNodeNameDTO.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 @Data
 public class PreviewNodeNameDTO {
+    private Long id;
     private Long wbsId;
     private Long projectId;
 }

+ 2 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/PreviewNodeNameDTO1.java

@@ -4,6 +4,8 @@ import lombok.Data;
 
 @Data
 public class PreviewNodeNameDTO1 {
+    private Long id;
     private String wbsId;
     private String nameRule;
+    private Long projectId;
 }

+ 1 - 0
blade-service-api/blade-dingding-api/src/main/java/org/springblade/dingding/vo/MeetingVo.java

@@ -11,6 +11,7 @@ import java.util.List;
 public class MeetingVo {
     private String roomId;
     private String fixedData; //固定数据
+    private String floor; //楼层
     private String meetingTheme; //会议主题
     private String meetingDept;  //召开部门
     private String meetingBooker;//会议预定者,主持人

+ 1 - 1
blade-service-api/blade-websocket-api/src/main/java/org/springblade/websocket/vo/UserInfoVO.java

@@ -34,7 +34,7 @@ public class UserInfoVO implements Serializable {
     @ApiModelProperty("公告类型1维护2普通,拼接字符串")
     private String msgType;
 
-    @ApiModelProperty("数据信息")
+    @ApiModelProperty("传输数据信息")
     private List<MeetingVo> object;
 
     public UserInfoVO() {

+ 70 - 26
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -234,16 +234,7 @@ public class InformationWriteQueryController extends BladeController {
                 String sql="select * from m_wbs_tree_contract where p_key_id="+query.getWbsId()+" and is_deleted=0";
                 WbsTreeContract contract = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
                 if(dto.getType()==1){
-                    R<List<String>>  nameRuleList = wbsParamClient.getNameRuleByPkeyId(contract.getPKeyId(), Long.valueOf(contract.getProjectId()));
-                    String nameRule = "";
-                    if (nameRuleList != null && nameRuleList.getData() != null && !nameRuleList.getData().isEmpty()) {
-                        nameRule = String.join("-", nameRuleList.getData());
-                    }
-                    if(projectInfos.get(0)!=null&&projectInfos.get(0).getTemplateType()==2){
-                        result  = nodeBaseInfoServiceClient.getNameRuleByRule(nameRule, contract.getPKeyId()+"");
-                    }else {
-                        result=wbsParamClient.createFileTitle(contract);
-                    }
+                    result=wbsParamClient.createFileTitle(contract);
                 }else {
                     result=nodeNameMap.get(query.getId());
                     //同时修改工程划分节点命名规则
@@ -256,12 +247,16 @@ public class InformationWriteQueryController extends BladeController {
                         result="";
                     }
                     if(query.getClassify()!=null&&query.getClassify()==1&&StringUtils.isNotEmpty(sgSuffix)){
-                        result=result+sgSuffix;
+                        if(!result.contains(sgSuffix)){
+                            result=result+sgSuffix;
+                        }
                         if(!query.getName().equals(result)){
                             query.setName(result);
                         }
                     }else if(query.getClassify()!=null&&query.getClassify()==2&&StringUtils.isNotEmpty(jlSuffix)){
-                        result=result+jlSuffix;
+                        if(!result.contains(jlSuffix)){
+                            result=result+jlSuffix;
+                        }
                         if(!query.getName().equals(result)){
                             query.setName(result);
                         }
@@ -408,17 +403,37 @@ public class InformationWriteQueryController extends BladeController {
     })
     public R<List<PreviewNodeNameVO1>> previewNodeName(@RequestBody List<PreviewNodeNameDTO1>dtos){
         List<PreviewNodeNameVO1> list = new ArrayList<>();
+        String sql1="Select sg_suffix,jl_suffix,template_type from m_project_info where id="+dtos.get(0).getProjectId()+" and is_deleted=0";
+        List<ProjectInfo> projectInfos = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(ProjectInfo.class));
+        String sgSuffix="";
+        String jlSuffix="";
+        if(projectInfos.size()>0){
+            sgSuffix=projectInfos.get(0).getSgSuffix()==null?"":projectInfos.get(0).getSgSuffix();
+            jlSuffix=projectInfos.get(0).getJlSuffix()==null?"":projectInfos.get(0).getJlSuffix();
+        }
         for (PreviewNodeNameDTO1 dto1 : dtos) {
             if(StringUtils.isEmpty(dto1.getNameRule())){
                 throw new ServiceException("请输入题名规则");
             }
-           String result=nodeBaseInfoServiceClient.getNameRuleByRule(dto1.getNameRule(),dto1.getWbsId());
-//            String sql="select p_key_id,ancestors_p_id from m_wbs_tree_contract where p_key_id="+dto1.getWbsId()+" and is_deleted=0";
-//            WbsTreeContract contract = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
-//            String result="";
-//            if(contract!=null){
-//                result= createFileTitle(contract, dto1.getNameRule());
-//            }
+//           String result=nodeBaseInfoServiceClient.getNameRuleByRule(dto1.getNameRule(),dto1.getWbsId());
+            String sql="select p_key_id,ancestors_p_id,major_data_type,table_owner from m_wbs_tree_contract where p_key_id="+dto1.getWbsId()+" and is_deleted=0";
+            WbsTreeContract contract = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            String sql2="select IFNULL(classify,0) from u_information_query where id="+dto1.getId();
+            Integer classify = jdbcTemplate.queryForObject(sql2, Integer.class);
+            String result="";
+           if(contract!=null){
+                result= createFileTitle(contract, dto1.getNameRule());
+               if(contract!=null&&contract.getMajorDataType()!=null&&contract.getMajorDataType()==4){
+                   if(result==null){
+                       result="";
+                   }
+                   if(classify==1&&StringUtils.isNotEmpty(sgSuffix)){
+                       result=result+sgSuffix;
+                   }else if(classify==2&&StringUtils.isNotEmpty(jlSuffix)){
+                       result=result+jlSuffix;
+                   }
+               }
+            }
             list.add(new PreviewNodeNameVO1(dto1.getWbsId(),result.toString()));
         }
         return R.data(list);
@@ -430,11 +445,34 @@ public class InformationWriteQueryController extends BladeController {
         List<PreviewNodeNameVO>list=new ArrayList<>();
         for (PreviewNodeNameDTO dto : dtos) {
             List<String> nameRules = getNameRuleByPkeyId(dto.getWbsId(), dto.getProjectId());
-            String sql="select p_key_id,ancestors_p_id from m_wbs_tree_contract where p_key_id="+dto.getWbsId()+" and is_deleted=0";
+            String sql="select p_key_id,ancestors_p_id,major_data_type from m_wbs_tree_contract where p_key_id="+dto.getWbsId()+" and is_deleted=0";
             WbsTreeContract contract = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            String sql2="select IFNULL(classify,0) from u_information_query where id="+dto.getId();
+            Integer classify = jdbcTemplate.queryForObject(sql2, Integer.class);
             String result="";
             if(nameRules!=null){
-                result = nodeBaseInfoServiceClient.getNameRuleByRule(String.join("-", nameRules), contract.getPKeyId() + "");
+                result= createFileTitle(contract, String.join("-", nameRules));
+                //result = nodeBaseInfoServiceClient.getNameRuleByRule(String.join("-", nameRules), contract.getPKeyId() + "");
+                if(contract!=null){
+                    String sql1="Select sg_suffix,jl_suffix,template_type from m_project_info where id="+dtos.get(0).getProjectId()+" and is_deleted=0";
+                    List<ProjectInfo> projectInfos = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(ProjectInfo.class));
+                    String sgSuffix="";
+                    String jlSuffix="";
+                    if(projectInfos.size()>0){
+                        sgSuffix=projectInfos.get(0).getSgSuffix()==null?"":projectInfos.get(0).getSgSuffix();
+                        jlSuffix=projectInfos.get(0).getJlSuffix()==null?"":projectInfos.get(0).getJlSuffix();
+                    }
+                    if(contract!=null&&contract.getMajorDataType()!=null&&contract.getMajorDataType()==4){
+                        if(result==null){
+                            result="";
+                        }
+                        if(classify==1&&StringUtils.isNotEmpty(sgSuffix)){
+                            result=result+sgSuffix;
+                        }else if(classify==2&&StringUtils.isNotEmpty(jlSuffix)){
+                            result=result+jlSuffix;
+                        }
+                    }
+                }
             }
             list.add(new PreviewNodeNameVO(dto.getWbsId(),result,nameRules));
         }
@@ -1252,6 +1290,9 @@ public class InformationWriteQueryController extends BladeController {
                             oldHtml.setId(SnowFlakeUtil.getId());
                             oldHtml.setCreateUser(getUser().getUserId());
                             String htmlUrl = wbsTreeContract.getHtmlUrl();
+                            if (htmlUrl ==  null || htmlUrl.isEmpty()|| "null".equals(htmlUrl)) {
+                                continue;
+                            }
                             // 获取或下载文件
                             Path sourcePath = FileUtils.getOrDownloadFile(htmlUrl);
                             // 生成副本路径
@@ -2749,7 +2790,7 @@ private String reviseCols(Map<String, String> p2, String cols, Long pkeyId, Stri
                     if (!map1.isEmpty()) {
                         int i = target.indexOf("key_201");
                         if (i >= 0) {
-                            target.set(i, DataStructureFormatUtils.buildDataObject(map1));
+                            target.set(i, " '" + DataStructureFormatUtils.buildDataObject(map1) + "' ");
                         }
                     }
                 }
@@ -4118,11 +4159,11 @@ public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
                 WbsTreeContract newData = new WbsTreeContract();
                 BeanUtils.copyProperties(half, newData);
 
-            //重塑pKeyId、id和parentId
-            newData.setPKeyId(OldPKeyIdToNewPKeyIdMap.get(half.getPKeyId()));
-            if (new Integer("1").equals(half.getType())) {
+              //重塑pKeyId、id和parentId
+              newData.setPKeyId(OldPKeyIdToNewPKeyIdMap.get(half.getPKeyId()));
+              if (new Integer("1").equals(half.getType())) {
                 newData.setId(OldIdToNewIdMap.containsKey(half.getId()) ? OldIdToNewIdMap.get(half.getId()) : SnowFlakeUtil.getId());
-            }
+              }
 
                 //设置父级id
                 boolean var = true;
@@ -4418,6 +4459,9 @@ public void updateTextDictInfos(List<WbsTreeContract> nowTabs, List<Long> oldTab
                 nowTab.setExcelId(tab.getExcelId());
                 nowTab.setIsTypePrivatePid(tab.getPKeyId());
                 nowTab.setInitTableName(tab.getInitTableName());
+                if(nowTab.getHtmlUrl()==null||nowTab.getHtmlUrl().equals("null")){
+                    nowTab.setHtmlUrl("");
+                }
                 String updateSql = "update m_wbs_tree_contract set html_url = '" + nowTab.getHtmlUrl() + "',excel_id = " + nowTab.getExcelId() + ",init_table_name = '" + nowTab.getInitTableName() + "',is_type_private_pid = " + nowTab.getIsTypePrivatePid() + " where p_key_id = " + nowTab.getPKeyId();
                 resultSQL.add(updateSql);
             }

+ 4 - 11
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialSelfInspectionRecordServiceImpl.java

@@ -147,17 +147,7 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
             if (org.apache.commons.lang.StringUtils.isNotEmpty(dto.getQueryStatus())) {
                 queryWrapper.lambda().eq(TrialSelfInspectionRecord::getDetectionResult, dto.getQueryStatus());
             }
-            if (dto.getSortType() != null) {
-                if (dto.getSortType().equals("1")) {
-                    queryWrapper.lambda().orderByAsc(TrialSelfInspectionRecord::getReportNo);
-                } else if (dto.getSortType().equals("2")) {
-                    queryWrapper.lambda().orderByDesc(TrialSelfInspectionRecord::getReportNo);
-                } else if (dto.getSortType().equals("3")) {
-                    queryWrapper.lambda().orderByAsc(Arrays.asList(TrialSelfInspectionRecord::getSpecificationModel, TrialSelfInspectionRecord::getReportNo));
-                } else if (dto.getSortType().equals("4")) {
-                    queryWrapper.lambda().orderByDesc(Arrays.asList(TrialSelfInspectionRecord::getSpecificationModel, TrialSelfInspectionRecord::getReportNo));
-                }
-            }
+            queryWrapper.lambda().orderByAsc(TrialSelfInspectionRecord::getSort);
 
             IPage<TrialSelfInspectionRecord> pages = this.page(page, queryWrapper.lambda().orderByDesc(true, TrialSelfInspectionRecord::getCreateTime));
             IPage<TrialSelfInspectionRecordVO> trialSelfInspectionRecordVOIPage = TrialSelfInspectionRecordWarpper.build().pageVO(pages);
@@ -2399,6 +2389,8 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
     public void updateSort(TrialSelfInspectionRecordPageDTO dto) {
         LambdaQueryWrapper<TrialSelfInspectionRecord> queryWrapper = Wrappers.<TrialSelfInspectionRecord>lambdaQuery()
                 .eq(TrialSelfInspectionRecord::getNodeId, dto.getNodeId())
+                .eq(TrialSelfInspectionRecord::getType, dto.getType())
+                .eq(TrialSelfInspectionRecord::getContractId, dto.getContractId())
                 .eq(TrialSelfInspectionRecord::getIsDeleted, 0);
         if (dto.getSortType() != null) {
             if (dto.getSortType().equals("1")) {
@@ -2421,6 +2413,7 @@ public class TrialSelfInspectionRecordServiceImpl extends BaseServiceImpl<TrialS
             updateBatchById(trialSelfInspectionRecords);
         }
     }
+
     //    @Override
     public List<Map<String, Object>> getTrialTableData(List<Long> recordIds){
         List<TrialSelfInspectionRecord> trialSelfInspectionRecords = this.listByIds(recordIds);

+ 64 - 0
blade-service/blade-dingding/src/main/java/org/springblade/dingding/service/impl/MeetingServiceImpl.java

@@ -103,6 +103,29 @@ public class MeetingServiceImpl implements MeetingService {
                     .get(25, TimeUnit.SECONDS);
             // 25秒总超时
             if(!vos.isEmpty()){
+                vos.sort((vo1, vo2) -> {
+                    String fixedData1 = vo1.getFixedData();
+                    String fixedData2 = vo2.getFixedData();
+
+                    // 提取会议室编号(去除"会议室"字符,只保留前面的中文数字)
+                    String number1 = extractChineseNumber(fixedData1);
+                    String number2 = extractChineseNumber(fixedData2);
+
+                    return compareChineseNumbers(number1, number2);
+                });
+                for (MeetingVo vo : vos) {
+                    if("一会议室".equals(vo.getFixedData())){
+                        vo.setFloor("6楼");
+                    } else if ("二会议室".equals(vo.getFixedData())) {
+                        vo.setFloor("6楼");
+                    }else if ("三会议室".equals(vo.getFixedData())) {
+                        vo.setFloor("4楼");
+                    }else if ("四会议室".equals(vo.getFixedData())) {
+                        vo.setFloor("3楼");
+                    }else if ("五会议室".equals(vo.getFixedData())) {
+                        vo.setFloor("2楼");
+                    }
+                }
                 UserInfoVO vo = new UserInfoVO();
                 vo.setSystem("dingding");
                 vo.setContractId(1L);
@@ -121,6 +144,47 @@ public class MeetingServiceImpl implements MeetingService {
         }
     }
 
+    // 提取会议室名称中的中文数字部分
+    private String extractChineseNumber(String roomName) {
+        // 假设格式为 "一会议室"、"二会议室" 等,提取前面的中文数字
+        if (roomName != null && roomName.endsWith("会议室")) {
+            return roomName.substring(0, roomName.length() - 3); // 去掉"会议室"三个字
+        }
+        return roomName;
+    }
+
+    // 中文数字比较器
+    private int compareChineseNumbers(String chineseNum1, String chineseNum2) {
+        // 定义中文数字映射表
+        Map<String, Integer> chineseNumberMap = new HashMap<>();
+        chineseNumberMap.put("一", 1);
+        chineseNumberMap.put("二", 2);
+        chineseNumberMap.put("三", 3);
+        chineseNumberMap.put("四", 4);
+        chineseNumberMap.put("五", 5);
+        chineseNumberMap.put("六", 6);
+        chineseNumberMap.put("七", 7);
+        chineseNumberMap.put("八", 8);
+        chineseNumberMap.put("九", 9);
+        chineseNumberMap.put("十", 10);
+        chineseNumberMap.put("十一", 11);
+        chineseNumberMap.put("十二", 12);
+        chineseNumberMap.put("十三", 13);
+        chineseNumberMap.put("十四", 14);
+        chineseNumberMap.put("十五", 15);
+        chineseNumberMap.put("十六", 16);
+        chineseNumberMap.put("十七", 17);
+        chineseNumberMap.put("十八", 18);
+        chineseNumberMap.put("十九", 19);
+        chineseNumberMap.put("二十", 20);
+        // 可以根据需要继续添加更多数字
+
+        Integer num1 = chineseNumberMap.getOrDefault(chineseNum1, Integer.MAX_VALUE);
+        Integer num2 = chineseNumberMap.getOrDefault(chineseNum2, Integer.MAX_VALUE);
+
+        return num1.compareTo(num2);
+    }
+
     private String[] getTodayTimeRange() {
         LocalDateTime startOfDay = LocalDateTime.now().with(LocalTime.MIDNIGHT);
         ZonedDateTime startOfDayZoned = startOfDay.atZone(ZoneId.systemDefault());

+ 38 - 16
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/ScrDataServiceImpl.java

@@ -34,7 +34,7 @@ public class ScrDataServiceImpl implements ScrDataService {
     @Override
     public void sctTaskBatch(ScrSignInfoVO taskApp) throws Exception {
         // 电签检查
-        this.sctTaskBatch2(taskApp);
+        this.sctTaskBatch3(taskApp);
     }
 
 
@@ -582,7 +582,7 @@ public class ScrDataServiceImpl implements ScrDataService {
                     }
                 }
             }
-
+            Map<String, String> dataUserMap = new HashMap<>(dataMap);
             boolean isSign = true;
             //判断章是否签完
             List<String> companList = strategyListByDFZX.stream().filter(item -> item.get("type").equals("2")).map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
@@ -600,23 +600,45 @@ public class ScrDataServiceImpl implements ScrDataService {
                 }
             }
 
-            boolean isSign1 = true;
-            //判断个人是否签完
-            List<String> userList = strategyListByDFZX.stream().filter(item -> item.get("type").equals("1")).map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
-            if (!userList.isEmpty()) {
-                Set<String> differentElements = new HashSet<>(userList);
-                sucessUser.forEach(differentElements::remove);
-                if (!differentElements.isEmpty()) {
-                    isSign1 = false;
-                    StringBuilder sb = new StringBuilder();
-                    sb.append("id = ").append(taskApp.getId()).append(", 人总共:").append(userList.size()).append(", 剩下:").append(differentElements.size());
-                    for (String element : differentElements) {
-                        sb.append(", ").append(element);
+//            boolean isSign1 = true;
+//            //判断个人是否签完
+//            List<String> userList = strategyListByDFZX.stream().filter(item -> item.get("type").equals("1")).map(map -> map.get("keyWord").toString()).collect(Collectors.toList());
+//            if (!userList.isEmpty()) {
+//                Set<String> differentElements = new HashSet<>(userList);
+//                sucessUser.forEach(differentElements::remove);
+//                if (!differentElements.isEmpty()) {
+//                    isSign1 = false;
+//                    StringBuilder sb = new StringBuilder();
+//                    sb.append("id = ").append(taskApp.getId()).append(", 人总共:").append(userList.size()).append(", 剩下:").append(differentElements.size());
+//                    for (String element : differentElements) {
+//                        sb.append(", ").append(element);
+//                    }
+//                    System.err.println(sb);
+//                }
+//            }
+            if(!sucessUser.isEmpty() && isSign){
+                for(String user:sucessUser){
+                    for(String mapkey:dataMap.keySet()){
+                        String mapval = dataMap.get(mapkey);
+                        if(mapval.contains(user)){
+                            dataUserMap.remove(mapkey) ;
+                        }
                     }
-                    System.err.println(sb);
                 }
+                for(String company:sucessCompan){
+                    for(String mapkey:dataMap.keySet()){
+                        String mapval = dataMap.get(mapkey);
+                        if(mapval != null && (mapval.equals(company) || mapval.equals(company+"\r"))){
+                            dataUserMap.remove(mapkey) ;
+                        }
+                    }
+                }
+                if(!dataUserMap.isEmpty()){
+                    isSign = false ;
+                }
+                System.out.println(taskApp.getId() +"-"+"个人总共:" + sucessUser.size() + "-剩下-" +dataUserMap.keySet().size());
             }
-            if (isSign && isSign1) {
+            if (isSign ) {
                 String sql2 = "UPDATE u_information_query set chek_status=2 where id='" + taskApp.getId() + "'";
                 jdbcTemplate.execute(sql2);
             } else {

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -22,6 +22,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.commons.codec.Charsets;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
@@ -78,6 +79,8 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.RequestContextHolder;
@@ -98,6 +101,7 @@ import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.sql.SQLException;
 import java.text.SimpleDateFormat;

+ 42 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/NodeBaseInfoController.java

@@ -19,6 +19,7 @@ package org.springblade.manager.controller;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException;
 import com.alibaba.nacos.shaded.io.opencensus.metrics.LongGauge;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.gson.Gson;
@@ -52,6 +53,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  *  控制器
@@ -171,8 +173,46 @@ public class NodeBaseInfoController extends BladeController {
     @GetMapping("/getNameRuleByRule")
     @ApiOperationSupport(order = 32)
     @ApiOperation(value = "节点配置根据选择的文件题名规则获取文件题名", notes = "传入规则和节点pkeyId")
-    public R getNameRuleByRule(@RequestParam String nameRule,@RequestParam Long pkeyId){
-        return R.data( nodeBaseInfoService.getNameRuleByRule(nameRule,pkeyId));
+    public R getNameRuleByRule(@RequestParam String nameRule,@RequestParam Long pkeyId) throws ServiceException {
+            String sql="select * from m_wbs_tree_contract where p_key_id="+pkeyId;
+            WbsTreeContract contract = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            if(contract==null){
+                throw new ServiceException("节点不存在");
+            }
+            String ancestorsPId = contract.getAncestorsPId();
+            if (ancestorsPId.startsWith("0,")) {
+                ancestorsPId = ancestorsPId.substring(2);
+            }
+            ancestorsPId=ancestorsPId+","+contract.getPKeyId();
+            String sql1="select  REPLACE(REPLACE(node_name, CHAR(10), ''), CHAR(13), '') as node_name,node_type from m_wbs_tree_contract where p_key_id in ("+ancestorsPId+") and is_deleted=0";
+            List<WbsTreeContract> nodeNames = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+             nameRule = nameRule.trim().replaceAll("(?i:c)", "");
+            List<String> list = Arrays.asList(nameRule.split("[^.\\d]"));
+            List<Integer> index = list.stream().map(Integer::parseInt).collect(Collectors.toList());
+            Map<Integer, String> map = nodeNames.stream()
+                    .collect(Collectors.toMap(
+                            WbsTreeContract::getNodeType,
+                            WbsTreeContract::getNodeName,
+                            (existing, replacement) -> replacement // 如果键重复,保留后者
+                    ));
+            StringBuilder result = new StringBuilder("");
+            for (Integer i : index) {
+                if(i==0){
+                    if(map.containsKey(1)){
+                        result.append(map.get(1));
+                    }
+                }
+                else if(i==1){
+                    if(map.containsKey(18)){
+                        result.append(map.get(18));
+                    }
+                }else {
+                    if(map.containsKey(i)){
+                        result.append(map.get(i));
+                    }
+                }
+            }
+        return R.data(result.toString());
     }
 
     public R synPDFInfo(String contractId, String nodeId, String classify, String projectId,Map<Long,Map<String,Object>>dataMap) {

+ 2 - 2
blade-service/blade-repair/src/main/java/org/springblade/repair/controller/CheckAndRepairController.java

@@ -162,10 +162,10 @@ public class CheckAndRepairController {
         System.out.println("开始扫描private和contract的html");
         StringBuilder result=new StringBuilder("");
         try {
-            String sql="SELECT a.p_key_id,a.is_type_private_pid FROM m_wbs_tree_contract a,m_wbs_tree_private b WHERE a.html_url != b.html_url AND a.is_type_private_pid=b.p_key_id AND a.type=2 AND a.is_deleted=0 AND b.type=2 AND b.html_url is not NULL AND a.project_id=b.project_id";
+            String sql="SELECT a.p_key_id,a.is_type_private_pid FROM m_wbs_tree_contract a,m_wbs_tree_private b WHERE a.html_url != b.html_url AND a.is_type_private_pid=b.p_key_id AND a.type=2 AND a.is_deleted=0 AND b.type=2 AND b.html_url is not NULL AND a.html !='null' AND b.html_url !='nul' AND a.project_id=b.project_id";
             List<WbsTreeContract> contractListlist = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
             for (WbsTreeContract wbsTreeContract : contractListlist) {
-                String update=" update m_wbs_tree_contract set html_url=(select html_url from m_wbs_tree_private where p_key_id="+wbsTreeContract.getIsTypePrivatePid()+") where p_key_id="+wbsTreeContract.getPKeyId();
+                String update=" update m_wbs_tree_contract set html_url=(select html_url from m_wbs_tree_private where html !='null' and  p_key_id="+wbsTreeContract.getIsTypePrivatePid()+") where p_key_id="+wbsTreeContract.getPKeyId();
                 int i = jdbcTemplate.update(update);
                 if(i!=1){
                     result.append(wbsTreeContract.getPKeyId()+"\n");