Browse Source

Merge remote-tracking branch 'origin/master'

qianxb 1 year ago
parent
commit
20603b268f
14 changed files with 460 additions and 230 deletions
  1. 2 2
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java
  2. 13 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractVO2.java
  3. 45 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java
  4. 29 22
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  5. 7 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java
  6. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java
  7. 20 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  8. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  9. 5 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java
  10. 30 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveAutoRuleWbsServiceImpl.java
  11. 68 91
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  12. 52 16
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java
  13. 175 32
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java
  14. 7 59
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

+ 2 - 2
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java

@@ -207,7 +207,7 @@ public class LargeFileEndpoint {
 		// 获取文件路径
 		/**Windows文件路径要加在哪个盘**/
 //		String filePath = "D:/www/wwwroot/Users/hongchuangyanfa/Desktop/Desktop/ceshi";
-		String filePath ="D:" +ParamCache.getValue(CommonConstant.SYS_LOCAL_URL)+"largeFile/";
+		String filePath =ParamCache.getValue(CommonConstant.SYS_LOCAL_URL)+"largeFile/";
 		// 创建文件夹
 //		getAbsoluteFile(filePath, fileName);
 //		new File(filePath, fileName);
@@ -350,7 +350,7 @@ public class LargeFileEndpoint {
 	 * 构建上传完整目录
 	 */
 	private String buildUploadDir() {
-		String fullDir ="D:" +ParamCache.getValue(CommonConstant.SYS_LOCAL_URL)+"largeFile/";
+		String fullDir =ParamCache.getValue(CommonConstant.SYS_LOCAL_URL)+"largeFile/";
 		File dir = new File(fullDir);
 		if (!dir.exists()) {
 			dir.mkdirs();

+ 13 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractVO2.java

@@ -211,6 +211,19 @@ public class ArchiveTreeContractVO2 implements INodeEx<ArchiveTreeContractVO2> {
 	//flag 为1 则为修改。
 	private Integer flag = 0;
 
+	//档号前缀
+	private String fileNumberPrefix;
+	//保管期限
+	private String storageTime;
+	//立卷人
+	private String rollor;
+	//审核人
+	private String reviewer;
+	//卷盒规格
+	private String specification;
+	//案卷后缀
+	private String archiveNameSuffix;
+
 	public String toString() {
 		return "TreeNode(parentId=" + this.getParentId()
 				+ ",ancestors" + this.getAncestors()

+ 45 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java

@@ -11,6 +11,7 @@ import org.springblade.manager.entity.ArchiveTree;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @Data
 public class ArchiveTreeVO2 implements INodeEx<ArchiveTreeVO2> {
@@ -198,4 +199,48 @@ public class ArchiveTreeVO2 implements INodeEx<ArchiveTreeVO2> {
     //修改标识 1为修改
     private Integer flag = 0;
 
+    public boolean isMatch(ArchiveTreeVO2 b){
+        return Objects.equals(this.nodeType, b.getNodeType()) &&
+                Objects.equals(this.postType, b.getPostType()) &&
+                Objects.equals(this.associationType, b.getAssociationType()) &&
+                Objects.equals(this.majorDataType, b.getMajorDataType()) &&
+                Objects.equals(this.displayHierarchy, b.getDisplayHierarchy()) &&
+                this.isStorageNode == b.getIsStorageNode() &&
+                this.isBuiltDrawing == b.getIsBuiltDrawing() &&
+                Objects.equals(this.projectType, b.getProjectType()) &&
+                Objects.equals(this.storageType, b.getStorageType()) &&
+                Objects.equals(this.expDataType, b.getExpDataType()) &&
+                Objects.equals(this.archiveAutoType, b.getArchiveAutoType()) &&
+                Objects.equals(this.archiveAutoNodeId, b.getArchiveAutoNodeId()) &&
+                Objects.equals(this.archiveAutoGroupId, b.getArchiveAutoGroupId()) &&
+                Objects.equals(this.archiveAutoGroupSelect, b.getArchiveAutoGroupSelect()) &&
+                this.isDisplayTree == b.getIsDisplayTree();
+    }
+
+    public void sync(ArchiveTreeVO2 archiveTree) {
+        if (isMatch(archiveTree)) {
+            return;
+        }
+
+        this.nodeType = archiveTree.getNodeType();
+        this.postType = archiveTree.getPostType();
+        this.associationType = archiveTree.getAssociationType();
+        this.majorDataType = archiveTree.getMajorDataType();
+        this.displayHierarchy = archiveTree.getDisplayHierarchy();
+        this.isStorageNode = archiveTree.getIsStorageNode();
+        this.isBuiltDrawing = archiveTree.getIsBuiltDrawing();
+        this.isInterfaceNode = archiveTree.getIsInterfaceNode();
+        this.projectType = archiveTree.getProjectType();
+        this.storageType = archiveTree.getStorageType();
+        this.expDataType = archiveTree.getExpDataType();
+        this.archiveAutoType = archiveTree.getArchiveAutoType();
+        this.archiveAutoNodeId = archiveTree.getArchiveAutoNodeId();
+        this.archiveAutoGroupId = archiveTree.getArchiveAutoGroupId();
+        this.archiveAutoGroupSelect = archiveTree.getArchiveAutoGroupSelect();
+        this.isUploadFileDisplayConfigurationTree = archiveTree.getIsDisplayTree();
+        this.isDisplayTree = archiveTree.getIsDisplayTree();
+        this.flag = 1;
+    }
+
+
 }

+ 29 - 22
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

@@ -137,8 +137,33 @@ public class ArchiveTreeContractController extends BladeController {
 		}
 		ar.setNodeName(archiveTreeContract.getNodeName());
 		ar.setFullName(archiveTreeContract.getNodeName());
-		ar.setIsStorageNode(archiveTreeContract.getIsStorageNode());
-		ar.setStorageType(archiveTreeContract.getStorageType());
+
+		if (archiveTreeContract.getIsStorageNode() != null) {
+			ar.setIsStorageNode(archiveTreeContract.getIsStorageNode());
+		}
+
+		if (archiveTreeContract.getStorageType() != null) {
+			ar.setStorageType(archiveTreeContract.getStorageType());
+		}
+
+		if (StringUtils.isNotEmpty(archiveTreeContract.getFileNumberPrefix())) {
+			ar.setFileNumberPrefix(archiveTreeContract.getFileNumberPrefix());
+		}
+		if (StringUtils.isNotEmpty(archiveTreeContract.getStorageTime())) {
+			ar.setStorageTime(archiveTreeContract.getStorageTime());
+		}
+		if (StringUtils.isNotEmpty(archiveTreeContract.getRollor())) {
+			ar.setRollor(archiveTreeContract.getRollor());
+		}
+		if (StringUtils.isNotEmpty(archiveTreeContract.getReviewer())) {
+			ar.setReviewer(archiveTreeContract.getReviewer());
+		}
+		if (StringUtils.isNotEmpty(archiveTreeContract.getSpecification())) {
+			ar.setSpecification(archiveTreeContract.getSpecification());
+		}
+		if (StringUtils.isNotEmpty(archiveTreeContract.getArchiveNameSuffix())) {
+			ar.setArchiveNameSuffix(archiveTreeContract.getArchiveNameSuffix());
+		}
 
 		return R.status(archiveTreeContractService.updateById(ar));
 	}
@@ -192,6 +217,8 @@ public class ArchiveTreeContractController extends BladeController {
 //		}
 		List<ArchiveTreeContractVO2> tree = archiveTreeContractService.lazyTree2(AuthUtil.getTenantId(), parentId,projectId,contractId);
 		if (tree != null && tree.size() > 0) {
+
+			archiveTreeContractService.fillDefaultArchiveAutoInfo(tree,projectId);
 			return R.data(tree);
 		}
 		return R.fail(200, "未查询到信息");
@@ -222,26 +249,6 @@ public class ArchiveTreeContractController extends BladeController {
 	}
 
 
-
-
-
-
-
-
-	@GetMapping("/test")
-	public R test(){
-		Long projectId = 1578599210897772545L;
-		List<ArchiveTree> trees = archiveTreeService.treeList(AuthUtil.getTenantId(), projectId,null, null);
-
-		archiveTreeContractService.initTree2(AuthUtil.getTenantId(),projectId);
-
-		return R.fail(200, "初始化成功");
-	}
-
-
-
-
-
 	/**
 	 * 初始化归档树根节点
 	 */

+ 7 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -14,7 +14,10 @@ import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.FormulaStrategy;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.Mileage;
+import org.springframework.context.annotation.Scope;
+import org.springframework.context.annotation.ScopedProxyMode;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.WebApplicationContext;
 
 import java.util.*;
 import java.util.regex.Pattern;
@@ -27,6 +30,7 @@ import java.util.stream.Collectors;
  */
 @Component
 @Data
+@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
 public class FormulaMileage implements FormulaStrategy {
     private FormData cur;
     private final MileageClient mileageClient;
@@ -123,9 +127,9 @@ public class FormulaMileage implements FormulaStrategy {
     public void forG10(List<Mileage> data,TableElementConverter tec){
           if(Func.isNotEmpty(data)){
               Map<String,Object> g10 = (Map<String, Object>) tec.getConstantMap().computeIfAbsent("G10", k->new HashMap<>());
-              g10.put("dx",data.stream().map(Mileage::getDx).collect(Collectors.toList()));
-              g10.put("dxnv",data.stream().filter(e->!e.getVertical()).map(Mileage::getDx).collect(Collectors.toList()));
-              g10.put("dxv",data.stream().filter(Mileage::getVertical).map(Mileage::getDx).collect(Collectors.toList()));
+              g10.put("dx",data.stream().map(Mileage::getDs).collect(Collectors.toList()));
+              g10.put("dxnv",data.stream().filter(e->!e.getVertical()).map(Mileage::getDs).collect(Collectors.toList()));
+              g10.put("dxv",data.stream().filter(Mileage::getVertical).map(Mileage::getDs).collect(Collectors.toList()));
           }
     }
 

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -10,7 +10,11 @@ import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.formula.*;
+import org.springframework.context.annotation.Scope;
+import org.springframework.context.annotation.ScopedProxyMode;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.WebApplicationContext;
+
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -24,6 +28,7 @@ import static org.springblade.manager.formula.TurnPoint.*;
  */
 @Component
 @Data
+@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
 public class FormulaTurnPoint implements FormulaStrategy {
     public static final String TURN_REG = "(?<=T\\(com.mixsmart.utils.CustomFunction\\).TURNPOINT\\()([^)]+)(?=))";
     private FormData cur;

+ 20 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -42,6 +42,12 @@
         <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
         <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
         <result column="tree_code" property="treeCode"/>
+        <result column="file_number_prefix" property="fileNumberPrefix"/>
+        <result column="storage_time" property="storageTime"/>
+        <result column="rollor" property="rollor"/>
+        <result column="reviewer" property="reviewer"/>
+        <result column="specification" property="specification"/>
+        <result column="archive_name_suffix" property="archiveNameSuffix"/>
     </resultMap>
 
 
@@ -102,6 +108,12 @@
         <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
         <result column="tree_sort" property="treeSort"/>
         <result column="tree_code" property="treeCode"/>
+        <result column="file_number_prefix" property="fileNumberPrefix"/>
+        <result column="storage_time" property="storageTime"/>
+        <result column="rollor" property="rollor"/>
+        <result column="reviewer" property="reviewer"/>
+        <result column="specification" property="specification"/>
+        <result column="archive_name_suffix" property="archiveNameSuffix"/>
     </resultMap>
 
 
@@ -192,7 +204,14 @@
         d.archive_auto_node_id,
         d.archive_auto_group_select,
         d.archive_auto_group_id,
-        tree_sort,
+        d.tree_sort,
+        d.file_number_prefix,
+        d.storage_time,
+        d.rollor,
+        d.reviewer,
+        d.specification,
+        d.archive_name_suffix,
+        d.contract_id,
         (SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_archive_tree_contract WHERE parent_id = d.id and is_deleted = 0 and project_id = #{projectId})
         AS "has_children"
         FROM

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java

@@ -88,4 +88,6 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
 	boolean deleteTree(Long id);
 
+	void  fillDefaultArchiveAutoInfo(List<ArchiveTreeContractVO2> tree,Long projectId);
+
 }

+ 5 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -585,10 +585,10 @@ public class ArTreeContractInitServiceImpl {
 
                 archiveTreeContract.setAncestors(tmp.getAncestors());
                 archiveTreeContract.setTreeSort(tmp.getTreeSort());
-                archiveTreeContract.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
-                archiveTreeContract.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
-                archiveTreeContract.setArchiveAutoGroupId(archiveTreeContract.getArchiveAutoGroupId());
-                archiveTreeContract.setArchiveAutoGroupSelect(archiveTreeContract.getArchiveAutoGroupSelect());
+                archiveTreeContract.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
+                archiveTreeContract.setArchiveAutoType(tmp.getArchiveAutoType());
+                archiveTreeContract.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
+                archiveTreeContract.setArchiveAutoGroupSelect(tmp.getArchiveAutoGroupSelect());
                 //新增里有,就去update了,避免重复
                 tmp.setFlag(0);
 
@@ -639,6 +639,7 @@ public class ArTreeContractInitServiceImpl {
             treeContractVO2.setParentId(archiveTreeContract.getParentId());
             treeContractVO2.setTitle(archiveTreeContract.getNodeName());
             treeContractVO2.setSort(archiveTreeContract.getSort());
+            treeContractVO2.setFromId(archiveTreeContract.getFromId());
 
             treeContractVO2.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
             treeContractVO2.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());

+ 30 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveAutoRuleWbsServiceImpl.java

@@ -53,5 +53,35 @@ public class ArchiveAutoRuleWbsServiceImpl extends BaseServiceImpl<ArchiveAutoRu
 		return page.setRecords(baseMapper.selectArchiveAutoRuleWbsPage(page, archiveAutoRuleWbs));
 	}
 
+	//TODO 归档树添加普通节点 需要同父级自动规则
+
+
+	/**
+	 * 归档树节点规则 系统级同步到项目级
+	 */
+	public void sysToProject(ArchiveTree sysTree,ArchiveTree projectTree){
+		//归档树节点同步规则注意:
+		//archive_auto_node_id 最高并卷规则节点ID以项目级节点ID的为主;
+
+		//archive_auto_type 保持一致
+		//select 保持一致
+		//groupId可以直接保留系统级的值,系统级到项目级都是一对一同步的。在项目目级新加节点按父节点规则为主。
+	}
+
+
+	//项目级同步到客户级:
+	//客户级归档树节点同步规则注意:
+	//archive_auto_node_id 最高并卷规则节点ID以客户级节点ID的为主;
+	//archive_auto_type 保持一致
+	//select 保持一致
+	//groupId客户级节点存在合同段Id的需要按合同段Id+groupID区分。
+
+
+
+
+
+
+
+
 
 }

+ 68 - 91
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -219,6 +219,8 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			String ancestors = parent.getAncestors() + StringPool.COMMA + archiveTreeContractDTO.getParentId();
 			archiveTreeContractDTO.setAncestors(ancestors);
 			archiveTreeContractDTO.setTreeSort(parent.getTreeSort());
+			archiveTreeContractDTO.setContractId(parent.getContractId());
+			archiveTreeContractDTO.setTreeCode(parent.getTreeCode());
 		}
 
 		archiveTreeContractDTO.setIsDeleted(BladeConstant.DB_NOT_DELETED);
@@ -429,7 +431,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 		//看看有没有合同段要复制
 		if (bHasContract) {
-			AddNewContract(contractInfos,srcTree,dstTree,dstNode,saveList);
+			addNewContract(contractInfos,srcTree,dstTree,dstNode,saveList);
 		}
 
 		//如果有新的合同段,合并新增代码到
@@ -439,7 +441,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 		//没有合同段直接同步
 		if (!bHasContract) {
-			saveList = getNormalSaveList(srcNode.getId(),
+			saveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
 					srcTrees.get(0),dstNode.getId(),dstTrees.get(0));
 		}else {
 
@@ -459,24 +461,6 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return true;
 	}
 
-	/**
-	 *
-	 * @param srcNodeId
-	 * @param srcTree
-	 * @param dstNodeId
-	 * @param dstTree
-	 * @return
-	 */
-	public List<ArchiveTreeContract> getNormalSaveList(Long srcNodeId,ArchiveTreeVO2 srcTree,Long dstNodeId,ArchiveTreeContractVO2 dstTree){
-
-		List<ArchiveTreeContract> saveList = archiveTreeContractSync.getNormalSaveList(srcNodeId,srcTree,dstNodeId,dstTree);
-
-		//设置修改标识
-		ModifyBySrcTree(srcNodeId,srcTree,dstNodeId,dstTree);
-
-		return saveList;
-	}
-
 	/**
 	 * 新增合同段时,要复制一份合同段的分支出来
 	 * @param contractInfos
@@ -485,7 +469,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	 * @param dstNode
 	 * @param saveList
 	 */
-	void AddNewContract(List<ContractInfo> contractInfos,ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,
+	void addNewContract(List<ContractInfo> contractInfos,ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,
 						   ArchiveTreeContract dstNode,List<ArchiveTreeContract> saveList){
 		Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
 
@@ -574,10 +558,10 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 						if (tmpSubTree == null) {
 							continue;
 						}
-						tmpSaveList = getNormalSaveList(tmpSubTree.getId(),
+						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(tmpSubTree.getId(),
 								tmpSubTree,ar.getId(),ar);
 					}else {
-						tmpSaveList = getNormalSaveList(srcNode.getId(),
+						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
 								srcTree,dstNode.getId(),ar);
 					}
 
@@ -602,7 +586,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 						//getNormalSaveList 接口除了同步新增节点,还会同步已有节点的属性。
 						//因为关联工序的位置是固定的,先不考虑新增一个关联工序节点,且一次同步完成情况
-						tmpSaveList = getNormalSaveList(srcNode.getId(),
+						tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
 								tmpSubTree,dstNodeId,contractNode);
 						saveList.addAll(tmpSaveList);
 
@@ -716,73 +700,6 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return true;
 	}
 
-	/**
-	 *
-	 * @param srcTree
-	 * @param dstTree
-	 * @return
-	 */
-	public boolean ModifyBySrcTree(Long srcNodeId,ArchiveTreeVO2 srcTrees,Long dstNodeId,ArchiveTreeContractVO2 dstTrees){
-
-		List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
-		List<ArchiveTreeContractVO2> archiveTreeContractVO2s = new ArrayList<>();
-		//取出指定范围
-		ArchiveTreeVO2 srcTree = ForestNodeMergerEx.getSubTree(srcTrees,srcNodeId);
-		ArchiveTreeContractVO2 dstTree = ForestNodeMergerEx.getSubTree(dstTrees,dstNodeId);
-
-		//取出链表
-		ForestNodeMergerEx.getTreeList(srcTree,archiveTreeVO2List);
-		ForestNodeMergerEx.getTreeList(dstTree,archiveTreeContractVO2s);
-
-		Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
-		for (ArchiveTreeVO2 ar : archiveTreeVO2List) {
-			map.put(ar.getId(),ar);
-		}
-
-		for (ArchiveTreeContractVO2 ar : archiveTreeContractVO2s) {
-			ArchiveTreeVO2 archiveTreeVO2 = map.get(ar.getFromId());
-			if (archiveTreeVO2!= null) {
-				ar.sync(archiveTreeVO2);
-			}
-		}
-		return true;
-	}
-
-	/**
-	 *
-	 * @param dstTree
-	 * @return
-	 */
-	public boolean UpdateByArchiveTreeContractVO2(ArchiveTreeContractVO2 dstTree){
-
-		List<Long> ids = new ArrayList<>();
-		List<ArchiveTreeContractVO2> archiveTreeContractVO2s = new ArrayList<>();
-
-		ForestNodeMergerEx.getTreeList(dstTree,archiveTreeContractVO2s);
-		Map<Long, ArchiveTreeContractVO2> map = new LinkedHashMap<>();
-
-
-		for (ArchiveTreeContractVO2 ar : archiveTreeContractVO2s) {
-			if (ar.getFlag() == 1) {
-				ids.add(ar.getId());
-				map.put(ar.getId(),ar);
-			}
-		}
-
-		List<ArchiveTreeContract> archiveTreeContracts =  baseMapper.selectBatchIds(ids);
-
-		List<ArchiveTreeContract> upList = new ArrayList<>();
-		for (ArchiveTreeContract archiveTreeContract : archiveTreeContracts) {
-			ArchiveTreeContractVO2 treeContractVO2 = map.get(archiveTreeContract.getId());
-			if (treeContractVO2!= null) {
-				archiveTreeContract.sync(treeContractVO2);
-				upList.add(archiveTreeContract);
-			}
-
-		}
-		this.saveOrUpdateBatch(upList);
-		return true;
-	}
 
 	/**
 	 * 递归设置
@@ -828,6 +745,66 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		this.saveOrUpdateBatch(changeArchiveList);
 	}
 
+	/**
+	 * 补充默认的组卷信息
+	 * @param trees
+	 * @param projectId
+	 */
+	public  void  fillDefaultArchiveAutoInfo(List<ArchiveTreeContractVO2> trees,Long projectId){
+
+		List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(projectId.toString());
+		if (contractInfos == null || contractInfos.size() == 0) {
+			return;
+		}
+		Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
+		for (ContractInfo contractInfo: contractInfos) {
+			if (contractInfo.getContractType() == 3) {
+				contractMap.put(0L,contractInfo);
+			}
+			contractMap.put(contractInfo.getId(),contractInfo);
+		}
+
+		for (ArchiveTreeContractVO2 child: trees) {
+			Long contractId = 0L;
+			if (child.getContractId() != null ) {
+				contractId = child.getContractId();
+			}
+			ContractInfo contractInfo = contractMap.get(contractId);
+			if (contractInfo != null) {
+				fillDefaultArchiveAutoInfo(child,contractInfo);
+			}
+		}
+
+	}
+
+	/**
+	 *
+	 * @param node
+	 * @param contractInfo
+	 */
+	public  void  fillDefaultArchiveAutoInfo(ArchiveTreeContractVO2 node,ContractInfo contractInfo){
+		if (StringUtils.isEmpty(node.getFileNumberPrefix())) {
+			node.setFileNumberPrefix(contractInfo.getPrefix());
+		}
+		if (StringUtils.isEmpty(node.getStorageTime()) && contractInfo.getStoragePeriod() != null) {
+			node.setStorageTime(contractInfo.getStoragePeriod().toString());
+		}
+		if (StringUtils.isEmpty(node.getRollor())) {
+			node.setRollor(contractInfo.getFiler());
+		}
+		if (StringUtils.isEmpty(node.getReviewer())) {
+			node.setReviewer(contractInfo.getReviewer());
+		}
+		if (StringUtils.isEmpty(node.getSpecification())) {
+			//默认30mm ,对应枚举 1
+			node.setSpecification("1");
+		}
+		//没有默认
+		if (StringUtils.isEmpty(node.getArchiveNameSuffix())) {
+			//node.setArchiveNameSuffix(contractInfo.getPrefix());
+		}
+	}
+
 
 
 

+ 52 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -92,22 +92,6 @@ public class ArchiveTreeContractSyncImpl {
         //获取所有节点的id -> ArchiveTreeContractVO2 的map
         arTreeContractInitService.getMap(contractVO2List,addList,vo2Map);
 
-//        for (ArchiveTreeContract archiveTreeContract : addList) {
-//            ArchiveTreeContractVO2 treeContractVO2 = new ArchiveTreeContractVO2();
-//            treeContractVO2.setId(archiveTreeContract.getId());
-//            treeContractVO2.setParentId(archiveTreeContract.getParentId());
-//            treeContractVO2.setTitle(archiveTreeContract.getNodeName());
-//            treeContractVO2.setSort(archiveTreeContract.getSort());
-//            treeContractVO2.setArchiveAutoNodeId(archiveTreeContract.getArchiveAutoNodeId());
-//            treeContractVO2.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
-//            treeContractVO2.setArchiveAutoGroupId(archiveTreeContract.getArchiveAutoGroupId());
-//            treeContractVO2.setArchiveAutoGroupSelect(archiveTreeContract.getArchiveAutoGroupSelect());
-//            contractVO2List.add(treeContractVO2);
-//            if (vo2Map!= null) {
-//                vo2Map.put(treeContractVO2.getId(),treeContractVO2);
-//            }
-//        }
-
         List<ArchiveTreeContractVO2> trees = ForestNodeMergerEx.merge(contractVO2List);
         return trees.get(0);
     }
@@ -155,4 +139,56 @@ public class ArchiveTreeContractSyncImpl {
 
         return saveList;
     }
+
+    /**
+     *
+     * @param srcNodeId
+     * @param srcTrees
+     * @param dstNodeId
+     * @param dstTrees
+     * @return
+     */
+    public boolean modifyBySrcTree(Long srcNodeId,ArchiveTreeVO2 srcTrees,Long dstNodeId,ArchiveTreeContractVO2 dstTrees){
+
+        List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
+        List<ArchiveTreeContractVO2> archiveTreeContractVO2s = new ArrayList<>();
+        //取出指定范围
+        ArchiveTreeVO2 srcTree = ForestNodeMergerEx.getSubTree(srcTrees,srcNodeId);
+        ArchiveTreeContractVO2 dstTree = ForestNodeMergerEx.getSubTree(dstTrees,dstNodeId);
+
+        //取出链表
+        ForestNodeMergerEx.getTreeList(srcTree,archiveTreeVO2List);
+        ForestNodeMergerEx.getTreeList(dstTree,archiveTreeContractVO2s);
+
+        Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
+        for (ArchiveTreeVO2 ar : archiveTreeVO2List) {
+            map.put(ar.getId(),ar);
+        }
+
+        for (ArchiveTreeContractVO2 ar : archiveTreeContractVO2s) {
+            ArchiveTreeVO2 archiveTreeVO2 = map.get(ar.getFromId());
+            if (archiveTreeVO2!= null) {
+                ar.sync(archiveTreeVO2);
+            }
+        }
+        return true;
+    }
+
+    /**
+     *
+     * @param srcNodeId
+     * @param srcTree
+     * @param dstNodeId
+     * @param dstTree
+     * @return
+     */
+    public List<ArchiveTreeContract> getNormalSaveListEx(Long srcNodeId,ArchiveTreeVO2 srcTree,Long dstNodeId,ArchiveTreeContractVO2 dstTree){
+
+        List<ArchiveTreeContract> saveList = getNormalSaveList(srcNodeId,srcTree,dstNodeId,dstTree);
+
+        //设置修改标识
+        modifyBySrcTree(srcNodeId,srcTree,dstNodeId,dstTree);
+
+        return saveList;
+    }
 }

+ 175 - 32
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -43,6 +43,8 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
     private final ArchiveAutoRuleWbsMapper archiveAutoRuleWbsMapper;
 
+    private final ArchiveAutoRuleSyncImpl archiveAutoRuleSync;
+
     @Override
     public boolean initArchiveTree(Long projectId) {
         if (projectId != null && projectId != 0) {
@@ -136,6 +138,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         }
 
         //todo 同步立卷规则
+        InitAncestors(archiveTrees);
 
         this.saveBatch(archiveTrees);
 
@@ -785,6 +788,16 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
                     if(archiveAutoType!=null){
 
+                        if (StringUtils.isEmpty(wbsId) && projectId!= null && projectId != 0) {
+                            ProjectInfo projectInfo = projectInfoService.getOne(projectId);
+                            if (projectInfo!= null) {
+                                Long lWbsId = projectInfo.getReferenceWbsTemplateId();
+                                if (lWbsId != null) {
+                                    wbsId = projectInfo.getReferenceWbsTemplateId().toString();
+                                }
+                            }
+                        }
+
                         //获取wbs关联树
                         ArchiveTreeVO2 archiveTreeVO2 = getWbsArchiveTree(AuthUtil.getTenantId(),projectId,wbsNode2ArchiveTreeNodeId,wbsId,"1",Long.parseLong(archiveTree.getDisplayHierarchy()));
                         List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
@@ -912,7 +925,11 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         return map;
     }
 
-
+    /**
+     * 系统同步到项目级
+     * @param dstNode
+     * @return
+     */
     public boolean syncProjectTree(ArchiveTree dstNode) {
         if (dstNode.getFromId() == null || dstNode.getProjectId() == 0) {
             return false;
@@ -933,6 +950,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         ForestNodeMergerEx.syncTreeList(srcTree ,dstTree,addDst);
 
         List<ArchiveTree> saveList = new ArrayList<>();
+        List<ArchiveTree> upList = new ArrayList<>();
         for (ArchiveTreeVO2 addD : addDst) {
             ArchiveTree archiveTree = new ArchiveTree(addD);
             archiveTree.setCreateUser(AuthUtil.getUserId());
@@ -941,55 +959,56 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
             saveList.add(archiveTree);
         }
 
+        modifyBySrcTree(srcTree,dstTree);
+
         //刷新treeCode
-        InitAncestors(dstTree,saveList);
+        InitAncestors(dstTree,saveList,upList);
 
         //相同的属性刷新?
-        updateDstArchiveTrees(srcTree,dstTree);
+        //updateDstArchiveTrees(srcTree,dstTree);
 
         this.saveBatch(saveList);
-
+        this.updateBatchById(upList);
         return true;
     }
 
 
-    public void InitAncestors(ArchiveTreeVO2  dstTree,List<ArchiveTree> addList)
+    public void InitAncestors(ArchiveTreeVO2  dstTree,List<ArchiveTree> addList,List<ArchiveTree> upList)
     {
-        List<ArchiveTreeVO2> archiveTreeVO2s = new ArrayList<>();
-        ForestNodeMergerEx.getTreeList(dstTree,archiveTreeVO2s);
+        Map<Long,ArchiveTreeVO2> vo2Map = new LinkedHashMap<>();
+
+        //将新增节点合并到树里
+        ArchiveTreeVO2 tree = mergerToTree(dstTree,addList,vo2Map);
+
+
+        ForestNodeMergerEx.InitAncestors(tree,"0");
+
+        //更新自动组卷节点
+        archiveAutoRuleSync.syncArchiveTreeList(vo2Map);
+
+        //根据vo的排序和自动组卷信息,刷新新增节点,根据修改标识生成更新节点
+        this.handleAddAndUpList(vo2Map,addList,upList);
+    }
+
+    public void InitAncestors(List<ArchiveTree> archiveTrees) {
+        List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
 
         Map<Long,ArchiveTreeVO2> vo2Map = new LinkedHashMap<>();
-        for (ArchiveTree archiveTree:addList) {
-            ArchiveTreeVO2 archiveTreeVO2 = new ArchiveTreeVO2();
-            archiveTreeVO2.setId(archiveTree.getId());
-            archiveTreeVO2.setParentId(archiveTree.getParentId());
-            archiveTreeVO2.setTitle(archiveTree.getNodeName());
-            archiveTreeVO2.setSort(archiveTree.getSort());
-
-            archiveTreeVO2.setArchiveAutoNodeId(archiveTree.getArchiveAutoNodeId());
-            archiveTreeVO2.setArchiveAutoType(archiveTree.getArchiveAutoType());
-            archiveTreeVO2.setArchiveAutoGroupId(archiveTree.getArchiveAutoGroupId());
-
-            archiveTreeVO2s.add(archiveTreeVO2);
-            vo2Map.put(archiveTreeVO2.getId(),archiveTreeVO2);
-        }
+        getMap(archiveTreeVO2List,archiveTrees,vo2Map);
 
+        List<ArchiveTreeVO2> trees = ForestNodeMergerEx.merge(archiveTreeVO2List);
 
-        List<ArchiveTreeVO2> trees = ForestNodeMergerEx.merge(archiveTreeVO2s);
+        //重复
+        //ForestNodeMergerEx.InitAncestors(trees.get(0),"0");
 
-        ForestNodeMergerEx.InitAncestors(trees.get(0),"0");
+        archiveAutoRuleSync.syncArchiveTreeList(vo2Map);
 
-        for (ArchiveTree archiveTree:addList) {
-            ArchiveTreeVO2 tmp = vo2Map.get(archiveTree.getId());
-            if (tmp != null ) {
-                archiveTree.setAncestors(tmp.getAncestors());
-                archiveTree.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
-                archiveTree.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
-                archiveTree.setArchiveAutoType(tmp.getArchiveAutoType());
-            }
-        }
+        List<ArchiveTree> upList = new ArrayList<>();
+
+        handleAddAndUpList(vo2Map,archiveTrees,upList);
     }
 
+
     public void updateDstArchiveTrees(ArchiveTreeVO2 srcTree,ArchiveTreeVO2  dstTree){
 
         List<ArchiveTreeVO2> srcList = new ArrayList<>();
@@ -1035,4 +1054,128 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
         this.saveOrUpdateBatch(archiveTreeList);
     }
+
+
+    /**
+     *  根据vo的排序和自动组卷信息,刷新新增节点,根据修改标识生成更新节点
+     * @param vo2Map
+     * @param addList
+     * @param upList
+     */
+    void handleAddAndUpList(Map<Long,ArchiveTreeVO2> vo2Map,List<ArchiveTree> addList,List<ArchiveTree> upList) {
+
+        //刷新新增节点
+        for (ArchiveTree archiveTree:addList) {
+            ArchiveTreeVO2 tmp = vo2Map.get(archiveTree.getId());
+            if (tmp != null ) {
+
+                archiveTree.setAncestors(tmp.getAncestors());
+                archiveTree.setArchiveAutoNodeId(tmp.getArchiveAutoNodeId());
+                archiveTree.setArchiveAutoType(tmp.getArchiveAutoType());
+                archiveTree.setArchiveAutoGroupId(tmp.getArchiveAutoGroupId());
+                archiveTree.setArchiveAutoGroupSelect(tmp.getArchiveAutoGroupSelect());
+                //新增里有,就去update了,避免重复
+                tmp.setFlag(0);
+
+            }
+        }
+
+        //获取本次所有的修改节点
+        List<Long> ids = new ArrayList<>();
+        for (Map.Entry<Long, ArchiveTreeVO2> entry : vo2Map.entrySet()) {
+
+            ArchiveTreeVO2 archiveTreeVO2 = entry.getValue();
+            if (archiveTreeVO2.getFlag() == 1) {
+                ids.add(archiveTreeVO2.getId());
+            }
+        }
+
+        if (ids.size() == 0) {
+            return;
+        }
+        List<ArchiveTree> archiveTrees =  baseMapper.selectBatchIds(ids);
+
+        //刷新属性
+        for (ArchiveTree archiveTree : archiveTrees) {
+            ArchiveTreeVO2 archiveTreeVO2 = vo2Map.get(archiveTree.getId());
+            if (archiveTreeVO2!= null) {
+                archiveTree.sync(archiveTreeVO2);
+                upList.add(archiveTree);
+            }
+
+        }
+    }
+
+    /**
+     *
+     * @param vos
+     * @param addList
+     * @param vo2Map
+     */
+    public void getMap(List<ArchiveTreeVO2> vos,List<ArchiveTree> addList,Map<Long,ArchiveTreeVO2> vo2Map){
+
+        for (ArchiveTreeVO2 ar:vos) {
+            vo2Map.put(ar.getId(),ar);
+        }
+
+        for (ArchiveTree archiveTree:addList) {
+            ArchiveTreeVO2 treeContractVO2 = new ArchiveTreeVO2();
+            treeContractVO2.setId(archiveTree.getId());
+            treeContractVO2.setParentId(archiveTree.getParentId());
+            treeContractVO2.setTitle(archiveTree.getNodeName());
+            treeContractVO2.setSort(archiveTree.getSort());
+            treeContractVO2.setFromId(archiveTree.getFromId());
+
+            treeContractVO2.setArchiveAutoNodeId(archiveTree.getArchiveAutoNodeId());
+            treeContractVO2.setArchiveAutoType(archiveTree.getArchiveAutoType());
+            treeContractVO2.setArchiveAutoGroupId(archiveTree.getArchiveAutoGroupId());
+            treeContractVO2.setArchiveAutoGroupSelect(archiveTree.getArchiveAutoGroupSelect());
+            vos.add(treeContractVO2);
+            vo2Map.put(treeContractVO2.getId(),treeContractVO2);
+        }
+    }
+
+    /**
+     * 往 dstTree 里合并入新增节点
+     * @param dstTree 目标节点
+     * @param addList 新的世数
+     * @param vo2Map
+     * @return
+     */
+    public ArchiveTreeVO2  mergerToTree(ArchiveTreeVO2  dstTree,List<ArchiveTree> addList,Map<Long,ArchiveTreeVO2> vo2Map) {
+        List<ArchiveTreeVO2> contractVO2List = new ArrayList<>();
+
+        ForestNodeMergerEx.getTreeList(dstTree, contractVO2List);
+
+        //获取所有节点的id -> ArchiveTreeContractVO2 的map
+        this.getMap(contractVO2List,addList,vo2Map);
+
+        List<ArchiveTreeVO2> trees = ForestNodeMergerEx.merge(contractVO2List);
+        return trees.get(0);
+    }
+
+    public boolean modifyBySrcTree(ArchiveTreeVO2 srcTree,ArchiveTreeVO2 dstTree){
+
+        List<ArchiveTreeVO2> archiveTreeSrcList = new ArrayList<>();
+        List<ArchiveTreeVO2> archiveTreeVO2s = new ArrayList<>();
+        //取出指定范围
+
+
+        //取出链表
+        ForestNodeMergerEx.getTreeList(srcTree,archiveTreeSrcList);
+        ForestNodeMergerEx.getTreeList(dstTree,archiveTreeVO2s);
+
+        Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
+        for (ArchiveTreeVO2 ar : archiveTreeSrcList) {
+            map.put(ar.getId(),ar);
+        }
+
+        for (ArchiveTreeVO2 ar : archiveTreeVO2s) {
+            ArchiveTreeVO2 archiveTreeVO2 = map.get(ar.getFromId());
+            if (archiveTreeVO2!= null) {
+                ar.sync(archiveTreeVO2);
+            }
+        }
+        return true;
+    }
 }

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

@@ -31,15 +31,17 @@ import org.springblade.manager.mapper.FormulaMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.manager.vo.CurrentNode;
+import org.springframework.context.annotation.Scope;
+import org.springframework.context.annotation.ScopedProxyMode;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.web.context.WebApplicationContext;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -53,6 +55,7 @@ import java.util.stream.Stream;
 
 @Service
 @RequiredArgsConstructor
+@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
 public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula> implements IFormulaService {
 
     private final IWbsParamService wpService;
@@ -151,18 +154,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         this.constantMap.put(TABLE_LIST,tableList);
         /*通过判断元素名称来确定,加入汇总公式延后执行*/
         this.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
-        /*检查是否有跨节点数据*/
-        /*获取type=1的检验单或者type=4的监表*/
-//        List<Map<String,Object>>  inspectionElementMaps = new ArrayList<>();
-//        Optional<AppWbsTreeContractVO> wop=tableList.stream().filter(e->e.getNodeName().contains("检验单")).findAny();
-//        if(wop.isPresent()){
-//            /*检验单或者监表的*/
-//            inspectionElementMaps=  this.jdbcTemplate.queryForList(" select c.e_name name ,b.tab_en_name tableName,c.e_key ekey from m_wbs_tree_contract a join m_table_info b on a.init_table_name=b.tab_en_name join m_wbs_form_element c on c.f_id= b.id where a.p_key_id=" + wop.get().getPKeyId());
-//        }
+
         List<String> missingList = new ArrayList<>();
-//        List<Map<String, Object>> finalInspectionElementMaps = inspectionElementMaps;
-//        List<String> cki =new ArrayList<>();
-//        AtomicReference<String> ckd= new AtomicReference<>("");
         this.formDataList.forEach(fd->{
             if(fd.executable()){
                 relyParse(fd.getFormula());
@@ -175,32 +168,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         }
                     });
                 }
-//                if(StringUtils.isEquals("CKI",f.getNumber())){
-//                    finalInspectionElementMaps.forEach(m->{
-//                        String name = StringUtils.handleNull(m.get("name"));
-//                        if(name.contains("实测值")&&name.contains("偏差值")){
-//                            String ekey = StringUtils.handleNull(m.get("tableName"))+":"+StringUtils.handleNull(m.get("ekey"));
-//                            cki.add(ekey);
-//                            if(this.formDataMap.values().stream().map(FormData::getCode).noneMatch(k->StringUtils.isEquals(k,ekey))){
-//                                missingList.add(ekey);
-//                            }
-//                        }
-//                    });
-//                    f.setFormula("CKI");
-//                }else  if(StringUtils.isEquals("CKD",f.getNumber())){
-//                    finalInspectionElementMaps.forEach(m->{
-//                        String name = StringUtils.handleNull(m.get("name"));
-//                        if(name.contains("检验日期")){
-//                            String ekey = StringUtils.handleNull(m.get("tableName"))+":"+StringUtils.handleNull(m.get("ekey"));
-//                            ckd.set(ekey);
-//                            if(!this.formDataMap.containsKey(ekey)&&this.formDataMap.values().stream().map(FormData::getCode).noneMatch(k->StringUtils.isEquals(k,ekey))){
-//                                missingList.add(ekey);
-//                            }
-//                        }
-//                    });
-//                    f.setFormula("CKD");
-//                }
-
             }
         });
 
@@ -208,26 +175,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         if(Func.isNotEmpty(missingList)){
             this.tec.getLog().append("【没有能加载的跨节点数据:").append(missingList.stream().map(e->e.replaceAll("'","")).collect(Collectors.joining(","))).append("】");
         }
-//        if(Func.isNotEmpty(cki)){
-//           /*检验内容*/
-//            List<String> sb = new ArrayList<>();
-//            for(String s:cki){
-//                FormData fdTmp=this.formDataMap.get(s);
-//                if(fdTmp!=null&&fdTmp.getValues().stream().map(ElementData::getValue).anyMatch(e->StringUtils.isNotEmpty(e)&&StringUtils.isNotEquals("/",e))){
-//                   sb.add(FormulaUtils.parseItemName(fdTmp.getEName()));
-//                }
-//            }
-//            if(sb.size()>0){
-//                this.constantMap.put(CHECK_ITEMS,sb.stream().distinct().filter(StringUtils::isNotEmpty).collect(Collectors.joining(",")));
-//            }
-//        }
-//        if(Func.isNotBlank(ckd.get())){
-//            /*检验时间*/
-//            FormData fdTmp =   this.formDataMap.get(ckd.get());
-//            if(fdTmp!=null){
-//                this.constantMap.put("CKD",fdTmp.getValues().stream().map(ElementData::stringValue).collect(Collectors.joining(",")));
-//            }
-//        }
+
 
         /*实测值参数*/
         List<Map<String,Object>>  textInfoMap= this.jdbcTemplate.queryForList("SELECT b.tab_id pkId,b.col_name val ,CONCAT(a.init_table_name,':',b.col_key)code from m_wbs_tree_contract a inner join m_textdict_info b on a.p_key_id=b.tab_id   " +
@@ -759,7 +707,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         if(this.summary.size()>0){
             /**/
             this.constantMap.put(CHECK_ITEMS,this.checkItems.stream().filter(fdTmp->fdTmp.getValues().stream().map(ElementData::getValue).anyMatch(e->StringUtils.isNotEmpty(e)&&StringUtils.isNotEquals("/",e))).map(FormData::getEName).map(FormulaUtils::parseItemName).distinct().collect(Collectors.joining(",")));
-            this.constantMap.put("CKD",this.checkDate.stream().flatMap(k->k.getValues().stream()).map(ElementData::stringValue).map(DateTime::new).reduce((a, b) -> Comparator.<DateTime>reverseOrder().compare(a, b) <= 0 ? a : b).orElse(null));
+            this.constantMap.put("CKD",this.checkDate.stream().flatMap(k->k.getValues().stream()).map(ElementData::stringValue).reduce((a, b) -> Comparator.<DateTime>reverseOrder().compare(new DateTime(a), new DateTime(b)) <= 0 ? a : b).orElse(null));
             this.summary.forEach(e->{
                 /*处理脚本*/
                 e.getFormula().setFormula(e.getFormula().getNumber());