Эх сурвалжийг харах

Merge remote-tracking branch 'origin/test-merge' into test-merge

LHB 4 өдөр өмнө
parent
commit
28268e8ff6

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

@@ -258,8 +258,18 @@ public class ArchiveTreeContractController extends BladeController {
 //		});
 //
 //		return R.status(archiveTreeContractService.deleteLogic(Func.toLongList(id)));
-
-        return R.status(archiveTreeContractService.deleteTree(Long.parseLong(id)));
+        // 1. 查询节点基础信息(获取projectId)
+        ArchiveTreeContract dstNode = archiveTreeContractService.getById(id);
+        if (dstNode == null) {
+            return R.fail(200, "未查询到对应节点信息");
+        }else {
+            boolean b = archiveTreeContractService.removeById(id);
+            if(b){
+                //异步批量更新所有子节点为逻辑删除
+                archiveTreeContractService.deleteByAncestors(Long.parseLong(id), dstNode.getProjectId());
+            }
+            return R.status(b);
+        }
     }
 
 

+ 3 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java

@@ -22,14 +22,12 @@ import org.apache.ibatis.annotations.Param;
 import org.springblade.archive.dto.JiLinQueryDto;
 import org.springblade.archive.entity.ArchiveExpertConclusion;
 import org.springblade.business.entity.ArchiveFile;
-import org.springblade.business.entity.InformationQuery;
 import org.springblade.business.entity.TrialDetectionData;
 import org.springblade.business.entity.TrialSelfInspectionRecord;
 import org.springblade.business.vo.TrialSelfInspectionRecordFileVO;
 import org.springblade.manager.dto.ArchiveTreeContractDTO;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.TrialClassificationConfiguration;
-import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -193,5 +191,7 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
 
     List<ArchiveTreeContract> getArchiveTreeContractListByListOrderByTreeSort(@Param("nodeIds") List<Long> nodeIds);
 
-    void callGetChildIds(@Param("params") Map<String, Object> params);
+    Integer checkNodeExists(@Param("parentId") Long parentId, @Param("projectId") Long projectId, @Param("tenantId") String tenantId);
+
+    void deleteByAncestors(@Param("parentId") Long parentId, @Param("projectId") Long projectId);
 }

+ 19 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -947,6 +947,15 @@
         </set>
         where is_deleted = 0 and project_id = #{node.projectId} and FIND_IN_SET(#{node.id},ancestors) > 0
     </update>
+    <update id="deleteByAncestors">
+        UPDATE m_archive_tree_contract
+        SET is_deleted = 1
+        WHERE is_deleted = 0
+          AND project_id = #{projectId}
+          AND (
+          CONCAT(',', ancestors, ',') LIKE CONCAT('%,', #{parentId}, ',%')
+            )
+    </update>
 
     <resultMap id="getArchiveTreeContractDtoMap" type="org.springblade.manager.dto.ArchiveTreeContractDTO">
         <id column="id" property="id"/>
@@ -1043,12 +1052,15 @@
         </foreach>
         ORDER BY case when d.tree_sort regexp '^[a-zA-Z]' then 0 when d.tree_sort regexp '^[0-9]' then 1 else 2 end, d.tree_sort
     </select>
-    <select id="callGetChildIds" statementType="CALLABLE">
-        CALL get_archive_tree_child_ids(
-            #{params.parentId, mode=IN, jdbcType=BIGINT},
-            #{params.projectId, mode=IN, jdbcType=BIGINT},
-            #{params.tenantId, mode=IN, jdbcType=VARCHAR},
-            #{params.outIds, mode=OUT, jdbcType=VARCHAR}
-            )
+    <!-- 校验节点是否存在(可选,优化性能) -->
+    <select id="checkNodeExists" resultType="java.lang.Integer">
+        SELECT COUNT(1)
+        FROM m_archive_tree_contract
+        WHERE id = #{parentId}
+        AND is_deleted = 0
+        AND project_id = #{projectId}
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant_id = #{tenantId}
+        </if>
     </select>
 </mapper>

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java

@@ -97,7 +97,7 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
     boolean UpdateByArchiveTree(ArchiveTree archiveTree);
 
-    boolean deleteTree(Long id);
+    Boolean deleteTree(Long id);
 
     void fillDefaultArchiveAutoInfo(List<ArchiveTreeContractVO2> tree, Long projectId,Long contractId);
 
@@ -149,4 +149,6 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
     boolean deleteTreeEx(Long id);
 
     List<ArchiveTreeContract> getArchiveTreeContractListByListOrderByTreeSort(List<Long> nodeIds);
+
+    void deleteByAncestors(Long id, Long projectId);
 }

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -463,6 +463,13 @@ public class ArTreeContractInitServiceImpl {
 
             //排除已经有的
             if (extMap.get(wbsTreeVO2.getId()) != null) {
+                //上传节点
+                if (wbsTreeVO2.getNodeType() != null && wbsTreeVO2.getNodeType().longValue() == level) {
+                    ArchiveTreeContractVO2 contractVO2 = extMap.get(wbsTreeVO2.getId());
+                    contractVO2.setIsStorageNode(1);
+                    contractVO2.setStorageType(subTree.getStorageType());
+                    contractVO2.setFlag(1);
+                }
                 continue;
             }
 
@@ -543,6 +550,7 @@ public class ArTreeContractInitServiceImpl {
             //上传节点
             if (wbsTreeVO2.getNodeType() != null && wbsTreeVO2.getNodeType().longValue() == level) {
                 archiveTree.setIsStorageNode(1);
+                archiveTree.setStorageType(subTree.getStorageType());
             }
             archiveTreeContracts.add(archiveTree);
 

+ 14 - 51
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -49,6 +49,7 @@ import org.springblade.manager.vo.*;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
@@ -753,65 +754,21 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	 * @param id
 	 * @return
 	 */
-//	public  boolean deleteTree(Long id) {
-//		ArchiveTreeContract dstNode = this.getById(id);
-//		if (dstNode == null ) {
-//			return false;
-//		}
-//
-//		List<ArchiveTreeContractVO2> dstTrees = this.tree2Root(AuthUtil.getTenantId(),null,null,dstNode.getProjectId(),null);
-//		if (dstTrees == null || dstTrees.size() == 0) {
-//			return false;
-//		}
-//
-//		ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(dstTrees.get(0),id);
-//
-//		List<Long> ids = ForestNodeMergerEx.getChildrenIds(subTree);
-//
-//		ids.add(id);
-//		this.deleteLogic(ids);
-//		return true;
-//	}
-
-	public boolean deleteTree(Long id) {
+	public Boolean deleteTree(Long id) {
 		ArchiveTreeContract dstNode = this.getById(id);
-		if (dstNode == null) {
+		if (dstNode == null ) {
 			return false;
 		}
-		String tenantId = AuthUtil.getTenantId();
-		Long projectId = dstNode.getProjectId();
-
-		// 调用优化后的listAllChildIds(CTE/存储过程均可)
-		List<Long> ids = this.listAllChildIds(id, projectId, tenantId);
-		if (CollectionUtils.isEmpty(ids)) {
+		List<ArchiveTreeContractVO2> dstTrees = this.tree2Root(AuthUtil.getTenantId(),null,null,dstNode.getProjectId(),null);
+		if (dstTrees == null || dstTrees.size() == 0) {
 			return false;
 		}
-
+		ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(dstTrees.get(0),id);
+		List<Long> ids = ForestNodeMergerEx.getChildrenIds(subTree);
+		ids.add(id);
 		this.deleteLogic(ids);
 		return true;
 	}
-
-	public List<Long> listAllChildIds(Long parentId, Long projectId, String tenantId) {
-		// 1. 构建存储过程入参
-		Map<String, Object> params = new HashMap<>(4);
-		params.put("parentId", parentId);
-		params.put("projectId", projectId);
-		params.put("tenantId", tenantId);
-		params.put("outIds", "");  // 初始化出参
-
-		// 2. 调用存储过程
-		baseMapper.callGetChildIds(params);
-
-		// 3. 解析出参(逗号分隔的ID字符串转Long列表)
-		String outIds = (String) params.get("outIds");
-		if (StringUtils.isEmpty(outIds)) {
-			return Collections.emptyList();
-		}
-		return Arrays.stream(outIds.split(","))
-				.map(Long::valueOf)
-				.collect(Collectors.toList());
-	}
-
 	/**
 	 * 更轻量的删除节点树,同时删除节点下的案卷和文件
 	 * @param id
@@ -845,6 +802,12 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return baseMapper.getArchiveTreeContractListByListOrderByTreeSort(nodeIds);
 	}
 
+	@Override
+	@Async
+	public void deleteByAncestors(Long id, Long projectId) {
+		baseMapper.deleteByAncestors(id, projectId);
+	}
+
 
 	/**
 	 * 批量更新

+ 58 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -1983,6 +1983,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     /*检查发现有p_key_id缺失的情况,导致表单数据丢失,所以强制覆盖*/
                     dataMap2.put("p_key_id", tableInfo.getPkeyId());
                     dataMap2=isPartition(wbsTreeContract,tabName,dataMap2);
+                    dataConvert(wbsTreeContract, dataMap2);
                     sqlInfo = buildMTableInsertSql(tabName, dataMap2, SnowFlakeUtil.getId(), null, null).toString();
 
                     UpdateWrapper<WbsTreeContract> updateWrapper = new UpdateWrapper<>();
@@ -2052,6 +2053,63 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         }
         return R.data(tableInfoList2);
     }
+    public void dataConvert(WbsTreeContract wbsTreeContract, LinkedHashMap<String, String> dataMap) {
+        try {
+            // 这里先从旧html表中获取  如果有用旧的html m_wbs_tree_contract_old_html
+            WbsTreeContractOldHtml oldHtml = wbsTreeContractOldHtmlService.getOne(Wrappers.<WbsTreeContractOldHtml>lambdaQuery()
+                    .eq(WbsTreeContractOldHtml::getContractFormId, wbsTreeContract.getPKeyId())
+                    .eq(WbsTreeContractOldHtml::getIsDeleted, 0)
+                    .last("limit 1"));
+            if(oldHtml != null){
+                wbsTreeContract.setHtmlUrl(oldHtml.getOldHtmlUrl());
+            }
+            InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreeContract.getHtmlUrl());
+            String htmlString = IoUtil.readToString(inputStreamByUrl);
+            Document doc = Jsoup.parse(htmlString);
+            if (!dataMap.isEmpty()) {
+                // 处理日期范围框和日期框的问题
+                Elements dateElements = doc.select("el-date-picker");
+                dateElements.forEach(element -> {
+                    String dateType = element.attr("type");
+                    String keyname = element.attr("keyname");
+                    if (StringUtil.isBlank(keyname) || !keyname.contains("__")) {
+                        return;
+                    }
+                    String[] split = keyname.split("__");
+                    String valStr = dataMap.get(split[0]);
+                    if (valStr == null || !valStr.contains("_^_")) {
+                        return;
+                    }
+                    String[] split1 = valStr.split("☆");
+                    for (String v : split1) {
+                        String[] split2 = v.split("_\\^_");
+                        // 不是数组格式
+                        String newVal = "";
+                        if (split2.length >= 2 && split[1].equals(split2[1]) && StringUtil.hasText(split2[0])) {
+                            if ("datetimerange".equals(dateType) && !split2[0].trim().startsWith("[")) {
+                                if (split2[0].contains(",")) {
+                                    newVal = "[" + split2[0] + "]";
+                                } else {
+                                    newVal = "[" + split2[0] + "," + split2[0] + "]";
+                                }
+                                valStr = valStr.replace(v, newVal + "_^_" + split2[1]);
+                                dataMap.put(split[0], valStr);
+                            } else if (!"datetimerange".equals(dateType) && split2[0].trim().startsWith("[") && split2[0].trim().endsWith("]")) {
+                                String[] strings = StringUtils.strip(split2[0], "[]").split(",");
+                                if (strings.length > 0) {
+                                    newVal = strings[strings.length - 1];
+                                    valStr = valStr.replace(v, newVal + "_^_" + split2[1]);
+                                    dataMap.put(split[0], valStr);
+                                }
+                            }
+                        }
+                    }
+                });
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
     public LinkedHashMap<String ,String> isPartition(WbsTreeContract wbsTreeContract,String tabName,LinkedHashMap<String, String> dataMap2){
         //判断是否需要移除编号 当工序 子分项 分项的划分编码有一个不为null就移除编号
         String sqlContractInfo="select * from m_contract_info where id="+wbsTreeContract.getContractId();

+ 3 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsInfoServiceImpl.java

@@ -37,9 +37,9 @@ public class WbsInfoServiceImpl extends BaseServiceImpl<WbsInfoMapper, WbsInfo>
         if (StringUtil.hasText(wbsInfo.getProjectName()) || StringUtil.isNumeric(wbsInfo.getProjectId())) {
             List<ProjectInfo> projectInfoList;
             if (StringUtil.isNumeric(wbsInfo.getProjectId())) {
-                projectInfoList = jdbcTemplate.query("select * from m_project_info where id = " + wbsInfo.getProjectId(), new BeanPropertyRowMapper<>(ProjectInfo.class));
+                projectInfoList = jdbcTemplate.query("select * from m_project_info where id = " + wbsInfo.getProjectId()+" and is_deleted=0", new BeanPropertyRowMapper<>(ProjectInfo.class));
             } else {
-                projectInfoList = jdbcTemplate.query("select * from m_project_info where project_name like '%" + wbsInfo.getProjectName() + "%'", new BeanPropertyRowMapper<>(ProjectInfo.class));
+                projectInfoList = jdbcTemplate.query("select * from m_project_info where project_name like '%" + wbsInfo.getProjectName() + "%'"+" and is_deleted=0", new BeanPropertyRowMapper<>(ProjectInfo.class));
             }
             if (projectInfoList.isEmpty()) {
                 return page;
@@ -77,7 +77,7 @@ public class WbsInfoServiceImpl extends BaseServiceImpl<WbsInfoMapper, WbsInfo>
         if (!records.isEmpty()) {
             for (WbsInfo record : records) {
                 List<ProjectInfo> projectInfoList = jdbcTemplate.query("select id, project_name from m_project_info where reference_log_wbs_template_id = ? " +
-                                "or reference_wbs_template_id = ? or reference_wbs_template_id_trial = ? or reference_wbs_template_id_lar = ? or reference_wbs_template_id_meter = ?"
+                                "or reference_wbs_template_id = ? or reference_wbs_template_id_trial = ? or reference_wbs_template_id_lar = ? or reference_wbs_template_id_meter = ? and is_deleted=0"
                         ,new Object[]{record.getId(), record.getId(), record.getId(), record.getId(), record.getId()} ,new BeanPropertyRowMapper<>(ProjectInfo.class));
                 if (!projectInfoList.isEmpty()) {
                     record.setProjectInfoList(projectInfoList);

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

@@ -3569,7 +3569,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 //            tableOwners.add(6);
 //        }
                 checkTableRequired(contract);
-        List<WbsTreeContract> list = baseMapper.selectList(new LambdaQueryWrapper<>(WbsTreeContract.class).eq(WbsTreeContract::getPId, contract.getPKeyId()).ne(WbsTreeContract::getIsBussShow, 2));//.in(WbsTreeContract::getTableOwner, tableOwners);
+        List<WbsTreeContract> list = baseMapper.selectList(new LambdaQueryWrapper<>(WbsTreeContract.class).eq(WbsTreeContract::getPId, contract.getPKeyId()).apply(" (is_buss_show <> 2 or is_buss_show is null)"));//.in(WbsTreeContract::getTableOwner, tableOwners);
         if (!list.isEmpty()) {
             boolean b = list.stream().anyMatch(w -> w.getDateIsComplete() != null && w.getDateIsComplete() > 1);
             String ancestorsPId = contract.getAncestorsPId();
@@ -3602,7 +3602,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 return;
             }
             Set<Long> fIds = tableInfoList.stream().map(TableInfo::getId).collect(Collectors.toSet());
-            List<WbsFormElement> elements = wbsFormElementMapper.selectList(Wrappers.<WbsFormElement>lambdaQuery().in(WbsFormElement::getFId, fIds).eq(WbsFormElement::getIsDeleted, 0));
+            List<WbsFormElement> elements = wbsFormElementMapper.selectList(Wrappers.<WbsFormElement>lambdaQuery().in(WbsFormElement::getFId, fIds).eq(WbsFormElement::getRequired, 1).eq(WbsFormElement::getIsDeleted, 0));
             if (elements.isEmpty()) {
                 return;
             }