浏览代码

Merge remote-tracking branch 'origin/master'

liuyc 2 年之前
父节点
当前提交
ce5ee9f370

+ 18 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTreeContract.java

@@ -250,6 +250,24 @@ public class ArchiveTreeContract extends BaseEntity {
 		this.archiveAutoType = archiveTree.getArchiveAutoType();
 	}
 
+	public void sync(ArchiveTreeVO2 archiveTree) {
+		if (archiveTree == null) {
+			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();
+	}
+
 
 	public boolean isContractRoot(){
 		if (this.getExtType() != null && this.getExtType() == 2

+ 1 - 1
blade-service/blade-business/src/main/resources/application-dev.yml

@@ -1,6 +1,6 @@
 #服务器端口
 server:
-  port: 5399
+  port: 15399
 
 #数据源配置
 spring:

+ 10 - 2
blade-service/blade-manager/src/main/java/com/jfireel/expression/util/ValueUtil.java

@@ -15,10 +15,18 @@ public class ValueUtil {
     public static Object[] obtain(Object left,Object right){
         if(StringUtils.isNotEmpty(left,right)){
             if(left instanceof List){
-                left=sum(CustomFunction.obj2ListNe(left));
+                List<Object> tmp=CustomFunction.obj2ListNe(left);
+                if(tmp.size()==0){
+                    return null;
+                }
+                left=sum(tmp);
             }
             if(right instanceof List){
-                right=sum(CustomFunction.obj2ListNe(right));
+                List<Object> tmp =CustomFunction.obj2ListNe(right);
+                if(tmp.size()==0){
+                    return null;
+                }
+                right=sum(tmp);
 
             }
             if(StringUtils.isNotEmpty(left)&&StringUtils.isNotEmpty(right)){

+ 4 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -2766,6 +2766,9 @@ public class CustomFunction {
 		return "";
 	}
 
-
+	public static void main(String[] args) {
+		getElementCell("/www/wwwroot/Users/hongchuangyanfa/Desktop//privateUrl/1640614495422251008.html");
+		System.out.println();
+	}
 
 }

+ 17 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

@@ -113,10 +113,6 @@ public class ArchiveTreeContractController extends BladeController {
 	@ApiOperation(value = "新增", notes = "传入archiveTreeContractDTO")
 	public R save(@Valid @RequestBody ArchiveTreeContractDTO archiveTreeContractDTO) {
 
-		if (archiveTreeContractDTO.getProjectId() == null) {
-			archiveTreeContractDTO.setProjectId(1578599210897772545L);
-		}
-
 		if (archiveTreeContractService.submit(archiveTreeContractDTO)) {
 			CacheUtil.clear(SYS_CACHE);
 			return R.data(archiveTreeContractDTO);
@@ -131,8 +127,20 @@ public class ArchiveTreeContractController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入archiveTreeContract")
 	public R update(@Valid @RequestBody ArchiveTreeContract archiveTreeContract) {
-		archiveTreeContract.setFullName(archiveTreeContract.getNodeName());
-		return R.status(archiveTreeContractService.updateById(archiveTreeContract));
+		if (archiveTreeContract == null ) {
+			return  R.fail(200, "未查询到对应节点信息");
+		}
+
+		ArchiveTreeContract ar = archiveTreeContractService.getById(archiveTreeContract.getId());
+		if (ar == null) {
+			return  R.fail(200, "未查询到对应节点信息");
+		}
+		ar.setNodeName(archiveTreeContract.getNodeName());
+		ar.setFullName(archiveTreeContract.getNodeName());
+		ar.setIsStorageNode(archiveTreeContract.getIsStorageNode());
+		ar.setStorageType(archiveTreeContract.getStorageType());
+
+		return R.status(archiveTreeContractService.updateById(ar));
 	}
 
 	/**
@@ -158,9 +166,9 @@ public class ArchiveTreeContractController extends BladeController {
 			if (archiveTree.getParentId() == Long.parseLong(id)) {
 				throw new ServiceException("当前节点下存在子节点,删除失败");
 			}
-			if (archiveTree.getIsUploadFileDisplayConfigurationTree() == 1) {
-				throw new ServiceException("当前节点被引用中,删除失败");
-			}
+//			if (archiveTree.getIsUploadFileDisplayConfigurationTree() == 1) {
+//				throw new ServiceException("当前节点被引用中,删除失败");
+//			}
 		});
 
 		return R.status(archiveTreeContractService.deleteLogic(Func.toLongList(id)));

+ 3 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java

@@ -111,9 +111,9 @@ public class ArchiveTreeController extends BladeController {
             if (archiveTree.getParentId() == Long.parseLong(id)) {
                 throw new ServiceException("当前节点下存在子节点,删除失败");
             }
-            if (archiveTree.getIsUploadFileDisplayConfigurationTree() == 1) {
-                throw new ServiceException("当前节点被引用中,删除失败");
-            }
+//            if (archiveTree.getIsUploadFileDisplayConfigurationTree() == 1) {
+//                throw new ServiceException("当前节点被引用中,删除失败");
+//            }
         });
         return R.status(archiveTreeService.deleteLogic(Func.toLongList(id)));
     }

+ 16 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/SubTable.java

@@ -22,7 +22,7 @@ public class SubTable {
     public static  final Integer[] STEP=new Integer[]{15,15,1};
     public static final  List<String> KEYS= Arrays.asList(ITEM,DESIGN,DATA);
     public static final  Integer ROW_SIZE=15;
-    private LinkedHashMap<String, List<String>> group=new LinkedHashMap<>();
+    private LinkedHashMap<String, List<Object>> group=new LinkedHashMap<>();
     private FormData itemName;
     private FormData design;
     private FormData data;
@@ -44,32 +44,34 @@ public class SubTable {
         }
     }
     public boolean checked(){
-        return itemName != null && design != null && data != null;
+        return itemName != null  && data != null;
     }
 
    public void put(String key, List<ElementData> data){
         if(data!=null&&data.size()>0){
-            group.put(key,data.stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList()));
+            group.put(key,data.stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList()));
         }
    }
 
    public void flush(){
            if(group.size()>0){
                List<String> itemNameList=new ArrayList<>();
-               List<String> designList=new ArrayList<>();
-               List<String> dataList = new ArrayList<>();
-               for(Map.Entry<String,List<String>> entry:group.entrySet()){
+               List<Object> designList=new ArrayList<>();
+               List<Object> dataList = new ArrayList<>();
+               for(Map.Entry<String,List<Object>> entry:group.entrySet()){
                    String key = entry.getKey();
                    String[] nameAndDesign=key.split("@");
-                   List<String> values=entry.getValue();
+                   List<Object> values=entry.getValue();
                    /*写人的行数*/
                    int count = (int)Math.ceil((double)values.size()/(double)ROW_SIZE);
 //                   int count2=count/STEP[0];
                    itemNameList.addAll(Collections.nCopies(count,nameAndDesign[0]));
-                   if(nameAndDesign.length>=2) {
-                       designList.addAll(Collections.nCopies(count, nameAndDesign[1]));
-                   }else{
-                       designList.addAll(Collections.nCopies(count, ""));
+                   if(design!=null){
+                       if(nameAndDesign.length>=2) {
+                           designList.addAll(Collections.nCopies(count, nameAndDesign[1]));
+                       }else{
+                           designList.addAll(Collections.nCopies(count, ""));
+                       }
                    }
                    dataList.addAll(values);
                    if(count*ROW_SIZE>values.size()){
@@ -78,7 +80,9 @@ public class SubTable {
                }
                /*写入元素*/
                FormulaUtils.write(itemName,itemNameList,true);
-               FormulaUtils.write(design,designList,true);
+               if(design!=null&&design.getCoordsList().size()>0) {
+                   FormulaUtils.write(design, designList, true);
+               }
                FormulaUtils.write(data,dataList,true);
                itemName.setUpdate(1);
                design.setUpdate(1);

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

@@ -17,17 +17,20 @@
 package org.springblade.manager.service;
 
 import feign.Param;
+
 import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
 import org.springblade.manager.dto.ArchiveTreeContractDTO;
 import org.springblade.manager.dto.ArchiveTreeDTO;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
+
 import org.springblade.manager.vo.ArchiveTreeContractVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.manager.vo.ArchiveTreeContractVO2;
-import org.springblade.manager.vo.ArchiveTreeVO;
 
+
+import java.util.ArrayList;
 import java.util.List;
 
 import java.util.List;
@@ -82,4 +85,7 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 	boolean syncProjectTree(ArchiveTreeContract dstNode);
 
 	boolean UpdateByArchiveTree(ArchiveTree archiveTree);
+
+	boolean deleteTree(Long id);
+
 }

+ 99 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -25,6 +25,7 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.Func;
@@ -49,6 +50,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.wrapper.ArchiveTreeContractWrapper;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.wildfly.common.archive.Archive;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -383,6 +385,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 				contractMap.put(contractInfo.getId(),contractInfo);
 			}
 
+			dstTree.setValue(1L);
 			for (ArchiveTreeContractVO2 ar: dstTree.getChildren()) {
 				//施工和监理
 				ar.setValue(1L);
@@ -450,16 +453,39 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 					//同步
 					if (dstNode.getParentId() == 0 || dstScopeTree.getId() == ar.getId()) {
 						//同步
-						List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveList(srcNode.getId(),
-								srcTrees.get(0),dstNode.getId(),ar);
+						List<ArchiveTreeContract> tmpSaveList = null;
+						if (dstNode.getParentId() == 0) {
+							ArchiveTreeVO2 tmpSubTree = ForestNodeMergerEx.getSubTree(srcTree,ar.getFromId());
+							if (tmpSubTree == null) {
+								continue;
+							}
+							tmpSaveList = archiveTreeContractSync.getNormalSaveList(tmpSubTree.getId(),
+									tmpSubTree,ar.getId(),ar);
+						}else {
+							tmpSaveList = archiveTreeContractSync.getNormalSaveList(srcNode.getId(),
+									srcTree,dstNode.getId(),ar);
+						}
+
+
 						saveList.addAll(tmpSaveList);
 					}
 				}else {
 					for (ArchiveTreeContractVO2 contractNode : ar.getChildren()){
+
+						List<ArchiveTreeContract> tmpSaveList = null;
 						if (dstNode.getParentId() == 0 || dstScopeTree.getId() == contractNode.getId()) {
 
-							List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveList(srcNode.getId(),
-									srcTrees.get(0),dstNode.getId(),contractNode);
+							ArchiveTreeVO2 tmpSubTree = srcTree;
+							Long dstNodeId = dstNode.getId();
+							if (dstNode.getParentId() == 0) {
+								tmpSubTree = ForestNodeMergerEx.getSubTree(srcTree,ar.getFromId());
+								dstNodeId = contractNode.getId();
+							}
+							if (tmpSubTree == null) {
+								continue;
+							}
+							tmpSaveList = archiveTreeContractSync.getNormalSaveList(tmpSubTree.getId(),
+									tmpSubTree,dstNodeId,contractNode);
 							saveList.addAll(tmpSaveList);
 						}
 					}
@@ -467,6 +493,9 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			}
 		}
 
+		ArchiveTreeVO2 subTree = ForestNodeMergerEx.getSubTree(srcTree,srcNode.getId());
+		UpdateByArchiveTree(dstNode.getProjectId(),subTree);
+
 		//更新排序
 		archiveTreeContractSync.InitTreeSort(dstTree,saveList);
 
@@ -482,9 +511,8 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	 * @return
 	 */
 	public  boolean deleteTreeChildren(ArchiveTreeContractVO2 tree) {
-		List<Long> ids = new ArrayList<>();
 
-		ForestNodeMergerEx.getChildrenIds(tree,ids);
+		List<Long> ids = ForestNodeMergerEx.getChildrenIds(tree);
 
 		return this.deleteLogic(ids);
 	}
@@ -511,6 +539,71 @@ 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);
+
+		return this.deleteLogic(ids);
+	}
+
+
+	/**
+	 * 批量更新
+	 * @param projectId
+	 * @param srcTree
+	 * @return
+	 */
+	public boolean UpdateByArchiveTree(Long projectId, ArchiveTreeVO2 srcTree){
+
+		List<Long> ids = new ArrayList<>();
+		List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
+
+		ForestNodeMergerEx.getTreeList(srcTree,archiveTreeVO2List);
+		ids = ForestNodeMergerEx.getChildrenIds(srcTree);
+
+		Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
+		for (ArchiveTreeVO2 ar : archiveTreeVO2List) {
+			map.put(ar.getId(),ar);
+		}
+
+		List<ArchiveTreeContract> archiveTreeContracts =  baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
+				.in(ArchiveTreeContract::getFromId, ids)
+				.eq(ArchiveTreeContract::getProjectId, projectId)
+				.eq(ArchiveTreeContract::getIsDeleted, 0)
+		);
+
+		List<ArchiveTreeContract> upList = new ArrayList<>();
+		for (ArchiveTreeContract archiveTreeContract : archiveTreeContracts) {
+			ArchiveTreeVO2 archiveTreeVO2 = map.get(archiveTreeContract.getFromId());
+			if (archiveTreeVO2!= null) {
+				archiveTreeContract.sync(archiveTreeVO2);
+				upList.add(archiveTreeContract);
+			}
+
+		}
+		this.saveOrUpdateBatch(archiveTreeContracts);
+		return true;
+	}
+
+
 
 
 

+ 6 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -194,11 +194,16 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
     @Override
     public List<ArchiveTreeVO2> tree2(String tenantId,Long projectId, Integer disPlayTree, Integer nodeType,String wbsId,boolean bgetExtNodes) {
+        if (projectId == null) {
+            projectId = 0L;
+        }
+
         List<ArchiveTreeVO2> archiveTreeVOList = baseMapper.tree2(tenantId, projectId,disPlayTree, nodeType);
         List<ArchiveTreeVO2> treeVO2s = ForestNodeMergerEx.merge(archiveTreeVOList);
         //todo 遍历树,找到质检节点,调用getWbsArchiveTree,根据关联层级,拼接上去
+
         //是否获取扩展的wbs节点
-        if (StringUtils.isEmpty(wbsId) && projectId != 0 && bgetExtNodes) {
+        if (StringUtils.isEmpty(wbsId) && projectId!= null && projectId != 0 && bgetExtNodes) {
             ProjectInfo projectInfo = projectInfoService.getOne(projectId);
             if (projectInfo!= null) {
                 Long lWbsId = projectInfo.getReferenceWbsTemplateId();

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

@@ -316,7 +316,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
     }
     public FormData createFormDataFast(String name,String code,String values){
-        if(StringUtils.isNotEmpty(code,values)){
+        if(StringUtils.isNotEmpty(code,name)){
             String[] arr=code.split(":");
             String coords = tec.getCoordinateMap().get(arr[0]).get(arr[1]);
             List<Coords> coordsList = Stream.of(coords).flatMap(s -> Arrays.stream(s.split(";"))).map(s -> {
@@ -347,8 +347,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     }
                 }
 
+            }else{
+                eds =coordsList.stream().map(c->new ElementData(0,0,null,c.getX(),c.getY())).collect(Collectors.toList());
             }
-            FormData one=   new FormData(code,eds, null,StringPool.EMPTY);
+            FormData one=   new FormData(code,eds, null,coords);
             one.setEName(name);
             return one;
         }
@@ -545,7 +547,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                                 if(local.size()>0){
                                     List<Object> values = slice(local,this.constantMap,f);
-                                    write(fd,values);
+                                    FormulaUtils.write(fd,values,true);
                                 }
                             }else{
                                 Map<String,Object> em = (Map<String, Object>) currentMap.computeIfAbsent(E,(k)-> new HashMap<>());
@@ -589,7 +591,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     List<AppWbsTreeContractVO> subTabList = this.tec.getTableAll().stream().filter(e -> e.getNodeName().contains("附表")).collect(Collectors.toList());
                     if (subTabList.size() == 0) {
                         boolean pd=tec.getTableAll().stream().anyMatch(e->e.getNodeName().contains("评定表")||e.getFullName().contains("评定表"));
-                        WbsTreePrivate sub = wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().and(e->e.eq(WbsTreePrivate::getNodeName, pd?"质量检验评定表(附表)":"质量检验表(附表)").or().eq(WbsTreePrivate::getFullName, pd?"质量检验评定表(附表)":"质量检验表(附表)")).eq(WbsTreePrivate::getProjectId, tec.getProjectId()));
+                        WbsTreePrivate sub = wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().and(e->e.eq(WbsTreePrivate::getNodeName, pd?"质量检验评定表(附表)":"质量检验表(附表)").or().eq(WbsTreePrivate::getFullName, pd?"质量检验评定表(附表)":"质量检验表(附表)")).eq(WbsTreePrivate::getProjectId, tec.getProjectId()).eq(WbsTreePrivate::getIsLinkTable,2));
                         if (sub == null) {
                             this.tec.getLog().append("该项目没有挂有附表信息");
                         } else {
@@ -597,6 +599,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             AppWbsTreeContractVO one = this.tec.getTableAll().get(0);
                             WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, one.getParentId()).eq(WbsTreeContract::getWbsId, one.getWbsId()).and(e->e.eq(WbsTreeContract::getNodeName, pd?"质量检验评定表(附表)":"质量检验表(附表)").or().eq(WbsTreeContract::getFullName, pd?"质量检验评定表(附表)":"质量检验表(附表)")));
                             if (wtc != null) {
+                                /*附表的顺序在检验单或者评定表之后*/
+                                int sort=this.tec.getTableAll().stream().filter(e -> e.getNodeName().contains("检验单") || e.getNodeName().contains("评定表")).map(AppWbsTreeContractVO::getSort).max(Integer::compareTo).orElse(30);
+                                this.wbsTreeContractService.update(Wrappers.<WbsTreeContract>lambdaUpdate().set(WbsTreeContract::getSort,++sort).eq(WbsTreeContract::getPKeyId,wtc.getPKeyId()));
                                 /*只需要挂载一张*/
                                 AppWbsTreeContractVO obj = BeanUtil.copy(wtc, AppWbsTreeContractVO.class);
                                 this.tec.getTableAll().add(obj);
@@ -616,6 +621,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             dataArray.add(data1);
                         }
                         List<TableInfo> subTableInfo = FormulaUtils.getTableInfoList(dataArray);
+                        TableInfo example = tec.getTableInfoList().get(0);
+                        subTableInfo.forEach(e -> {
+                            e.setToBeUpdated(true);
+                            e.setBusinessId(null);
+                            e.setContractId(example.getContractId());
+                            e.setClassify(example.getClassify());
+                            e.setProjectId(example.getProjectId());
+                            e.setGroupId(example.getGroupId());
+                        });
                         tec.getTableInfoList().addAll(subTableInfo);
                         /*获取附表元素定位集*/
                         tec.getCoordinateMap().put(subTabList.get(0).getInitTableName(), CustomFunction.getElementCell(first.getHtmlUrl()));
@@ -649,7 +663,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     List<FormData> subTableFds=this.formDataMap.values().stream().filter(e->StringUtils.isEquals(first.getInitTableName(),e.getTableName())).collect(Collectors.toList());
                     /*初始化附表对象*/
                     SubTable sta=new SubTable(subTableFds);
-
+                    /*根据行号排序*/
+                    inspectionList.sort(Comparator.comparingInt(e->e.getCoordsList().get(0).getY()));
                     inspectionList.forEach(f -> {
                         /*检验单或者评定表存的超页数据汇总到附表对象*/
                            List<ElementData> overList = f.getValues().stream().skip(f.getCoordsList().size()).collect(Collectors.toList());
@@ -660,9 +675,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                            /*同项目*/
                            Optional<FormData> designFdOp=  this.formDataMap.values().stream().filter(o->o.getTableName().equals(f.getTableName())&&StringUtils.isEquals(itemName,FormulaUtils.parseItemName(o.getEName()))&&o.getEName().contains("设计值")&&!o.getEName().contains("判定")).findAny();
                            if(designFdOp.isPresent()){
-                               key+="@"+designFdOp.get().getValues().stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).findAny().orElse("");
+                               key+="@"+designFdOp.get().getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).findAny().orElse("");
                            }
-                           sta.put(key,overList);
+                           sta.put(key,setScale(2,overList));
                     });
                     if(sta.checked()){
                         /*把附表数据刷入对应的附表元素对象*/
@@ -745,7 +760,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
    }
 
 
-
+public  List<ElementData> setScale(Integer scale,List<ElementData> data){
+    if(scale==null){
+        scale=2;
+    }
+    Integer finalScale = scale;
+    return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList());
+}
 
     @Override
     public void format() {
@@ -753,14 +774,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         for(FormData fd:this.formDataList){
             if(fd.verify()){
                 /*保留小数位*/
-                if(!fd.empty()&&fd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isDouble)){
+                if(fd.getFormula()!=null&&!fd.empty()&&fd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isDouble)){
                     Formula f = fd.getFormula();
-                    Integer scale =f.getScale();
-                    if(scale==null){
-                        scale=2;
-                    }
-                    Integer finalScale = scale;
-                    fd.setValues(fd.getValues().stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList()));
+                    fd.setValues(setScale(f.getScale(),fd.getValues()));
+//                    Integer scale =f.getScale();
+//                    if(scale==null){
+//                        scale=2;
+//                    }
+//                    Integer finalScale = scale;
+//                    fd.setValues(fd.getValues().stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList()));
                 }
             }
         }

+ 5 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ForestNodeMergerEx.java

@@ -78,9 +78,11 @@ public class ForestNodeMergerEx {
         }
     }
 
-    public static <T extends INodeEx<T>> void getChildrenIds(T tree, List<Long> ids){
+    public static <T extends INodeEx<T>> List<Long> getChildrenIds(T tree){
+        List<Long> ids = new ArrayList<>();
+
         if (tree == null) {
-            return;
+            return ids;
         }
 
         List<T> nodes = new ArrayList<>();
@@ -90,6 +92,7 @@ public class ForestNodeMergerEx {
         if (ids.size() > 0) {
             ids.remove(0);
         }
+        return ids;
     }