Kaynağa Gözat

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

# Conflicts:
#	blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
LHB 1 ay önce
ebeveyn
işleme
382fa16f38

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

@@ -364,9 +364,9 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         }
 
         //声影的要不要打码
-        if (archivesAuto.isMedia()) {
-            return;
-        }
+//        if (archivesAuto.isMedia()) {
+//            return;
+//        }
 
         List<String> urls = new ArrayList<>();
         for (ArchiveFile f : waitArchiveFiles) {

+ 12 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java

@@ -581,7 +581,18 @@ public class FileUtils {
                                     pdfReader.getPageN(index).put(PdfName.ROTATE, new PdfNumber(180)); // 顺时针旋转270°
                                     //横表旋转后打页码坐标不一样
                                     over.showTextAligned(Element.ALIGN_LEFT, pageNumber, width - 35, 20, 0);
-                                }else {
+                                }else if (rotate!= null && rotate.intValue() == 90) {
+                                    //交换width和height
+                                    pdfReader.getPageN(index).put(PdfName.ROTATE, new PdfNumber(0)); // 顺时针旋转270°
+                                    //横表旋转后打页码坐标不一样
+                                    over.showTextAligned(Element.ALIGN_LEFT, pageNumber, width - 35, 20, 0);
+                                }else if (rotate!= null && rotate.intValue() == -90) {
+                                    //交换width和height
+                                    pdfReader.getPageN(index).put(PdfName.ROTATE, new PdfNumber(180)); // 顺时针旋转270°
+                                    //横表旋转后打页码坐标不一样
+                                    over.showTextAligned(Element.ALIGN_LEFT, pageNumber, width - 35, 20, 0);
+                                }
+                                else {
                                     over.showTextAligned(Element.ALIGN_LEFT, pageNumber, width - 35, 20, 0);
                                 }
                             }

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

@@ -1570,7 +1570,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
             task.setType(1);
             task.setStatus(1);
             try {
-                if (DistributedRedisLock.acquire("TaskService_StartApproval_" + task.getFormDataId(), 5)) {
+                if (DistributedRedisLock.acquire("TaskService_StartApproval_" + task.getFormDataId(), 20)) {
                     long count = this.count(Wrappers.<Task>lambdaQuery().eq(Task::getFormDataId, task.getFormDataId()).ne(Task::getStatus, 3));
                     if (count > 0) {
                         return false;

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

@@ -1917,7 +1917,7 @@ public class ExcelTabController extends BladeController {
         }
 
         //获取节点下的所有表单,和附件,如果表单全是隐藏的,并且没有附件,则提示暂无数据
-        String sql = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id='" + contractId + "'  and status<>3 ";
+        String sql = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id='" + contractId + "'  and status<>3 and is_deleted=0";
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
         if (maps.size() < 1) {
             //判断当前合同段的类型
@@ -1933,7 +1933,7 @@ public class ExcelTabController extends BladeController {
                         String contractsIdsStr = contractsIds.stream()
                             .map(id -> "'" + id + "'")
                             .collect(Collectors.joining(", "));;
-                        String sql1 = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id in(" + contractsIdsStr + ") and status in(0,1,2)";
+                        String sql1 = "select pdf_url,e_visa_pdf_url,pdf_trial_url,pdf_trial_url_position,status from u_information_query where classify='" + classify + "' and wbs_id='" + nodeId + "' and contract_id in(" + contractsIdsStr + ") and status in(0,1,2) and is_deleted=0";
                         maps = jdbcTemplate.queryForList(sql1);
                     }
                 }

+ 21 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2976,6 +2976,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         //实体数据
         String querySql = "select * from " + wbsTreePrivate.getInitTableName() + " where p_key_id=" + pkeyId + " and group_id = " + groupId;
         List<Map<String, Object>> dataIn = jdbcTemplate.queryForList(querySql);
+
+
+
         String keyNames="";
         //匹配关联
         try {
@@ -2992,6 +2995,20 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             htmlString = htmlString.replaceAll("placeholder", "placeholderxx");
             htmlString = htmlString.replaceAll("title", "titlexx");
             Document doc = Jsoup.parse(htmlString);
+
+
+            // 获取默认值
+            Elements elements = doc.getElementsByAttribute("defText");
+            if(Func.isNotEmpty(elements) && elements.size()>=1){
+                for(Element eleme: elements){
+                    String id = Func.isNull(eleme.attr("id"))?eleme.attr("keyname"):eleme.attr("id");
+                    if(Func.isNotEmpty(id)){
+
+                        reData.put(id, eleme.attr("defText"));
+                    }
+                }
+            }
+
             keyNames= getKeyNameList(doc);
             TrialSelfInspectionRecord record = jdbcTemplate.query("select * from u_trial_self_inspection_record where id = " + groupId, new BeanPropertyRowMapper<>(TrialSelfInspectionRecord.class)).stream().findAny().orElse(null);
             // 优先使用试验记录中的委托单和样品
@@ -3289,25 +3306,14 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     }
                 }
             }
+
+
         } catch (Exception e) {
             e.printStackTrace();
         }
 
-        // 获取默认值
-        QueryWrapper<TextdictInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.select("col_key", "sig_role_name");
-        queryWrapper.eq("type", 4);
-        queryWrapper.eq("tab_id", wbsTreePrivate.getPKeyId());
-        final List<TextdictInfo> textDictInfos = textdictInfoService.getBaseMapper().selectList(queryWrapper);
-        if (!textDictInfos.isEmpty()) {
-            for (TextdictInfo textdictInfo : textDictInfos) {
-                if (reData.containsKey(textdictInfo.getColKey())) {
-                    String keyVal = reData.get(textdictInfo.getColKey()) + "";
-                } else {
-                    reData.put(textdictInfo.getColKey() + "", textdictInfo.getSigRoleName());
-                }
-            }
-        }
+
+
 
         // 移除Id 和 p_key_id
         reData.remove("id");

+ 102 - 117
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -32,6 +32,7 @@ import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
 import java.rmi.ServerException;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -634,7 +635,7 @@ public class WbsSynchronousServiceImpl {
             if (wbsTreePrivates.isEmpty()) {
                 throw new ServiceException("无法找到模板对应节点,请检查模板节点");
             }
-
+            Map<Long, WbsTreePrivate> collect1 = wbsTreePrivates.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, Function.identity()));
             //合同同步
             for (ContractInfo contractInfo : contractInfos) {
                 //获取合同下当前节点的数据
@@ -685,114 +686,114 @@ public class WbsSynchronousServiceImpl {
 
                     //筛选出需要更新的节点  同时做数据隔离
                     List<WbsTreeContract> editContractNodes = new ArrayList<>();
-                    for (WbsTreePrivate templateNode : wbsTreePrivates) {
-                        //更新只跟新表单
-                        for (WbsTreeContract editContractNode : wbsTreeContracts) {
-
-
-                            // 判断模板表与项目表 html是否一致
-                            if (ObjectUtils.equals(templateNode.getPKeyId(), editContractNode.getIsTypePrivatePid())) {
-                                if (templateNode.getType() == 2) {
-                                    //同步范围 当前节点是否允许修改
-                                    Boolean isSync = false;
-
-                                    //是否记录历史html
-                                    Boolean isOldHtml = false;
-
-                                    if (CollectionUtil.isNotEmpty(contractRanges)) {
-                                        switch (Integer.valueOf(wbsTreePrivate.getWbsType())) {
-                                            //质检
-                                            case 1:
-                                                //判断是否已保存
-                                                if (StringUtils.isEmpty(editContractNode.getInitTableName())) {
-                                                    throw new ServiceException(editContractNode.getNodeName() + "( " + editContractNode.getPKeyId() + ")--实体表不存在");
-                                                }
-                                                String isSave = "select count(0) from " + editContractNode.getInitTableName() + " where p_key_id = " + editContractNode.getPKeyId();
-                                                Integer i = jdbcTemplate.queryForObject(isSave, Integer.class);
 
-                                                //判断是否上报审批
-                                                Integer submit = informationQueryMap.get(editContractNode.getPId());
+                    //更新只跟新表单
+                    for (WbsTreeContract editContractNode : wbsTreeContracts) {
+                        if (editContractNode.getType() != 2 || editContractNode.getIsTypePrivatePid() == null) {
+                            continue;
+                        }
+                        WbsTreePrivate templateNode = collect1.get(editContractNode.getIsTypePrivatePid());
 
-                                                if (submit == null && contractRanges.contains(WbsSyncTypeEnum.NOT_FILLED_IN.code)) {
-                                                    //未填报 101
-                                                    isSync = true;
+                        // 判断模板表与项目表 html是否一致
+                        if (templateNode != null) {
+                            if (templateNode.getType() == 2) {
+                                //同步范围 当前节点是否允许修改
+                                Boolean isSync = false;
+
+                                //是否记录历史html
+                                Boolean isOldHtml = false;
+
+                                if (CollectionUtil.isNotEmpty(contractRanges)) {
+                                    switch (Integer.valueOf(wbsTreePrivate.getWbsType())) {
+                                        //质检
+                                        case 1:
+                                            //判断是否已保存
+                                            if (StringUtils.isEmpty(editContractNode.getInitTableName())) {
+                                                throw new ServiceException(editContractNode.getNodeName() + "( " + editContractNode.getPKeyId() + ")--实体表不存在");
+                                            }
+                                            String isSave = "select count(0) from " + editContractNode.getInitTableName() + " where p_key_id = " + editContractNode.getPKeyId();
+                                            Integer i = jdbcTemplate.queryForObject(isSave, Integer.class);
+
+                                            //判断是否上报审批
+                                            Integer submit = informationQueryMap.get(editContractNode.getPId());
+
+                                            if (submit == null && contractRanges.contains(WbsSyncTypeEnum.NOT_FILLED_IN.code)) {
+                                                //未填报 101
+                                                isSync = true;
+                                            } else {
+                                                //没有选择未填报,但是表单查不到数据,表示这个节点有问题
+                                                if (i == 0 && !contractRanges.contains(WbsSyncTypeEnum.NOT_FILLED_IN.code)) {
+                                                    errorMsg.append(editContractNode.getNodeName() + "(" + editContractNode.getPKeyId() + ")").append("未填报;");
                                                 } else {
-                                                    //没有选择未填报,但是表单查不到数据,表示这个节点有问题
-                                                    if (i == 0 && !contractRanges.contains(WbsSyncTypeEnum.NOT_FILLED_IN.code)) {
-                                                        errorMsg.append(editContractNode.getNodeName() + "(" + editContractNode.getPKeyId() + ")").append("未填报;");
+                                                    if (contractRanges.contains(WbsSyncTypeEnum.ALREADY_FILLED_IN_NOT_REPORTED.code) && (submit == null || submit == 0)) {
+                                                        //已填报-未上报 102
+                                                        isSync = true;
                                                     } else {
-                                                        if (contractRanges.contains(WbsSyncTypeEnum.ALREADY_FILLED_IN_NOT_REPORTED.code) && (submit == null || submit == 0)) {
-                                                            //已填报-未上报 102
-                                                            isSync = true;
+                                                        if (submit == null) {
+                                                            isSync = false;
+                                                            errorMsg.append(editContractNode.getNodeName() + "(" + editContractNode.getPKeyId() + ")").append("未上报;");
                                                         } else {
-                                                            if (submit == null) {
-                                                                isSync = false;
-                                                                errorMsg.append(editContractNode.getNodeName() + "(" + editContractNode.getPKeyId() + ")").append("未上报;");
-                                                            } else {
-                                                                if (submit == 1 && contractRanges.contains(WbsSyncTypeEnum.PENDING_APPROVAL.code)) {
-                                                                    //待审批 104
-                                                                    isSync = true;
-                                                                    isOldHtml = true;
-                                                                } else if (submit == 2 && contractRanges.contains(WbsSyncTypeEnum.APPROVED.code)) {
-                                                                    //已审批 105
-                                                                    isSync = true;
-                                                                    isOldHtml = true;
-                                                                }
+                                                            if (submit == 1 && contractRanges.contains(WbsSyncTypeEnum.PENDING_APPROVAL.code)) {
+                                                                //待审批 104
+                                                                isSync = true;
+                                                                isOldHtml = true;
+                                                            } else if (submit == 2 && contractRanges.contains(WbsSyncTypeEnum.APPROVED.code)) {
+                                                                //已审批 105
+                                                                isSync = true;
+                                                                isOldHtml = true;
                                                             }
                                                         }
                                                     }
                                                 }
-                                                break;
-                                            //试验
-                                            case 2:
-                                                break;
-                                            //计量
-                                            case 3:
-                                                break;
-                                            //日志
-                                            case 4:
-                                                break;
-                                            //征地拆迁
-                                            case 5:
-                                                break;
-                                            default:
-                                                break;
-                                        }
-                                    } else {
-                                        isSync = true;
+                                            }
+                                            break;
+                                        //试验
+                                        case 2:
+                                            break;
+                                        //计量
+                                        case 3:
+                                            break;
+                                        //日志
+                                        case 4:
+                                            break;
+                                        //征地拆迁
+                                        case 5:
+                                            break;
+                                        default:
+                                            break;
                                     }
+                                } else {
+                                    isOldHtml = true;
+                                    isSync = true;
+                                }
 
 
-                                    //清表 公式 元素
-                                    if (collect.contains(2) || collect.contains(3) || collect.contains(5)) {
-                                        if (collect.contains(2) && (templateNode.getHtmlUrl() == null || templateNode.getInitTableName() == null || templateNode.getExcelId() == null)) {
-                                            errorMsg.append(editContractNode.getNodeName() + "(" + editContractNode.getPKeyId() + ")").append("未配置清表;");
-                                        } else {
-                                            editContractNode.setExcelId(templateNode.getExcelId());
-                                            editContractNode.setInitTableName(templateNode.getInitTableName());
-                                            editContractNode.setHtmlUrl(templateNode.getHtmlUrl());
-                                            if (templateNode.getExcelId() != null) {
-                                                editContractNode.setIsLinkTable(2);
-                                            }
+                                //清表 公式 元素
+                                if (collect.contains(2) || collect.contains(3) || collect.contains(5)) {
+                                    if (collect.contains(2) && (templateNode.getHtmlUrl() == null || templateNode.getInitTableName() == null || templateNode.getExcelId() == null)) {
+                                        errorMsg.append(editContractNode.getNodeName() + "(" + editContractNode.getPKeyId() + ")").append("未配置清表;");
+                                    } else {
+                                        editContractNode.setExcelId(templateNode.getExcelId());
+                                        editContractNode.setInitTableName(templateNode.getInitTableName());
+                                        editContractNode.setHtmlUrl(templateNode.getHtmlUrl());
+                                        if (templateNode.getExcelId() != null) {
+                                            editContractNode.setIsLinkTable(2);
                                         }
                                     }
-                                    //排序
-                                    if (collect.contains(7)) {
-                                        editContractNode.setSort(templateNode.getSort());
+                                }
+                                //排序
+                                if (collect.contains(7)) {
+                                    editContractNode.setSort(templateNode.getSort());
+                                }
+                                //手动选中的表单 进行筛选
+                                if (collect.contains(2) || collect.contains(3) || collect.contains(4) || collect.contains(5) || collect.contains(6) || collect.contains(7)) {
+                                    if (isSync) {
+                                        editContractNodes.add(editContractNode);
                                     }
-                                    //手动选中的表单 进行筛选
-                                    if (collect.contains(2) || collect.contains(3) || collect.contains(4) || collect.contains(5) || collect.contains(6) || collect.contains(7)) {
-                                        if (isSync) {
-                                            editContractNodes.add(editContractNode);
-                                        }
-                                        //记录历史html
-                                        if (isOldHtml) {
-                                            oldHtml.add(editContractNode);
-                                        }
-
+                                    //记录历史html
+                                    if (isOldHtml) {
+                                        oldHtml.add(editContractNode);
                                     }
-                                    //找到了某个选中节点下与项目节点想同的节点了  提前结束循环,节省资源
-                                    break;
                                 }
                             }
                         }
@@ -800,33 +801,17 @@ public class WbsSynchronousServiceImpl {
 
                     //合同段新增节点
                     List<WbsTreeContract> addContractNode = null;
-                    if (addPrivateNodes != null) {
+                    if (addPrivateNodes != null && (CollectionUtil.isEmpty(collect) || collect.contains(1))) {
                         addContractNode = BeanUtil.copyProperties(addPrivateNodes, WbsTreeContract.class);
                     }
 
-                    //转类型排序
-                    List<Integer> integers = new ArrayList<>(collect);
-                    Collections.sort(integers);
-                    for (Integer i : integers) {
-                        switch (i) {
-                            //添加表单
-                            case 1:
-                                List<WbsTreeContract> list = insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode, errorMsg);
-                                addData.addAll(list);
-                                break;
-                            //清表配置
-                            case 2:
-                                //元素配置
-                            case 3:
-                                //公式配置
-                            case 5:
-                                //排序
-                            case 7:
-                                editData.addAll(editContractNodes);
-                                break;
-                            default:
-                                break;
-                        }
+                    if (CollectionUtil.isNotEmpty(addContractNode)) {
+                        List<WbsTreeContract> list = insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode, errorMsg);
+                        addData.addAll(list);
+                    }
+
+                    if (CollectionUtil.isNotEmpty(editContractNodes)) {
+                        editData.addAll(editContractNodes);
                     }
                 }
             }

+ 23 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeSynchronousRecordServiceImpl.java

@@ -81,7 +81,7 @@ public class WbsTreeSynchronousRecordServiceImpl extends ServiceImpl<WbsTreeSync
 
 
         //记录选中节点下的表单数
-        String[] newNodeIds = mWbsTreeSynchronousRecord.getNodeId().split(",");
+        List<String> newNodeIds = Arrays.asList(mWbsTreeSynchronousRecord.getNodeId().split(","));
         for (String newNodeId : newNodeIds) {
             Long nodeIdLong = Long.valueOf(newNodeId);
             if (privateIds.contains(nodeIdLong)) {
@@ -89,6 +89,28 @@ public class WbsTreeSynchronousRecordServiceImpl extends ServiceImpl<WbsTreeSync
             }
         }
 
+        List<String> parentIds = new ArrayList<>();
+        //处理父节点包含子节点数据
+        for (String newNodeId : newNodeIds) {
+            WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
+                    .eq(WbsTreePrivate::getPKeyId, newNodeId));
+            //如果是最顶层节点
+            if(wbsTreePrivate.getPId() == 0){
+                //清空所有记录,只保留最顶层节点id
+                parentIds.clear();
+                parentIds.add(newNodeId);
+                break;
+            }
+            //如果当前节点的父节点也在列表中,去掉当前节点
+            if(newNodeIds.contains(wbsTreePrivate.getPId().toString())){
+                continue;
+            }
+            parentIds.add(newNodeId);
+        }
+        if(!privateIds.isEmpty()){
+            mWbsTreeSynchronousRecord.setNodeId(String.join(",", parentIds));
+        }
+
         //模板项目信息
         ProjectInfo tempProject = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery()
                 .eq(ProjectInfo::getId, mWbsTreeSynchronousRecord.getTemplateId()));