Bläddra i källkod

Merge remote-tracking branch 'origin/master'

liuyc 1 år sedan
förälder
incheckning
2f01cc53f8

+ 2 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO2.java

@@ -30,4 +30,6 @@ public class ArchivesAutoVO2  {
 
     private Integer pageN;
 
+    private String ancestors;
+
 }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -1036,7 +1036,7 @@
     </select>
     <select id="getUnitAllArchive2" resultType="org.springblade.archive.vo.ArchivesAutoVO2">
         select
-               SUBSTRING_INDEX(SUBSTRING_INDEX(matc.ancestors,",",#{grade}),",",-1) as masterNode,
+               concat(matc.ancestors,',',matc.id)  as ancestors,
                uaa.id,uaa.name,uaa.page_n ,uaa.remark ,uaa.file_number,
                 (select bdb.dict_value  from blade_dict_biz bdb WHERE bdb.is_sealed = 0 and bdb.code = 'storage_period' and bdb.dict_key = uaa.storage_time limit 1 ) as storageTimeValue
         from m_archive_tree_contract matc right join u_archives_auto uaa on matc.id = uaa.node_id

+ 10 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -2769,13 +2769,21 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		}
 		List<ArchiveInspectPreviewVO.NodeList> nodeLists = new ArrayList<>();
 		//档案按照二级节点分组
-		Map<Long, List<ArchivesAutoVO2>> archiveMap = unitAllArchive.stream().collect(Collectors.groupingBy(ArchivesAutoVO2::getMasterNode));
+//		Map<Long, List<ArchivesAutoVO2>> archiveMap = unitAllArchive.stream().collect(Collectors.groupingBy(ArchivesAutoVO2::getMasterNode));
 		//循环二级节点,分别统计档案数据,把档案设置进结果集
 		for (ArchiveTreeContract unitNode : unitNodes) {
 			//获取节点名称
 			String nodeName = unitNode.getNodeName();
 			//获取节点档案
-			List<ArchivesAutoVO2> list = archiveMap.get(unitNode.getId());
+			Iterator<ArchivesAutoVO2> iterator = unitAllArchive.iterator();
+			List<ArchivesAutoVO2> list = new ArrayList<>();
+			while(iterator.hasNext()){
+				ArchivesAutoVO2 vo2 = iterator.next();
+				if (vo2.getAncestors().contains(unitNode.getId()+"")){
+					list.add(vo2);
+					iterator.remove();
+				}
+			}
 			ArchiveInspectPreviewVO.NodeList nodeList = new ArchiveInspectPreviewVO.NodeList();
 			if (list == null || list.size() == 0) {
 				//如果档案为空,直接设置名称跳出

+ 20 - 6
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -131,19 +131,33 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
         List<ArchiveFileVO> list = fileMapper.getAllArchiveFileByContractType(projectId);
         List<ContractInfo> infos = contractClient.queryContractListByIds(Arrays.asList(projectId));
         int key1 = 0, key2 = 0, key3 = 0;
+        int key4 = 0, key5 = 0, key6 = 0;
         //判断文件属于1施工,2监理,还是3业主
         if (list != null && list.size() > 0) {
             for (ArchiveFileVO l : list) {
                 String type = l.getContractType();
                 if (StringUtils.isBlank(type)) {
                     //业主
-                    key3++;
+                    if (l.getSourceType() != null && l.getSourceType() == 1){
+                        key4++;
+                    }else {
+                        key3++;
+                    }
                 } else if ("S".equals(type)) {
                     //监理
-                    key2++;
+                    if (l.getSourceType() != null && l.getSourceType() == 1){
+                        key5++;
+                    }else {
+                        key2++;
+                    }
+
                 } else if ("C".equals(type)) {
                     //施工
-                    key1++;
+                    if (l.getSourceType() != null && l.getSourceType() == 1){
+                        key6++;
+                    }else {
+                        key1++;
+                    }
                 } else if (type.length() > 10) {
                     for (ContractInfo info : infos) {
                         if (type.equals(info.getId() + "")) {
@@ -197,15 +211,15 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
         List<Map<String, Object>> mapList = new ArrayList<>();
         Map<String, Object> map = new HashMap<>();
         map.put("title", "施工");
-        map.put("key1", 0);
+        map.put("key1", key6);
         map.put("key2", key1);
         Map<String, Object> map2 = new HashMap<>();
         map2.put("title", "监理");
-        map2.put("key1", 0);
+        map2.put("key1", key5);
         map2.put("key2", key2);
         Map<String, Object> map3 = new HashMap<>();
         map3.put("title", "业主");
-        map3.put("key1", 0);
+        map3.put("key1", key4);
         map3.put("key2", key3);
         mapList.add(map);
         mapList.add(map2);

+ 52 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/SubTable.java

@@ -8,7 +8,9 @@ import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * @author yangyj
@@ -35,8 +37,8 @@ public class SubTable {
     public SubTable(List<FormData> source) {
         if (source != null && source.size() > 0) {
             source.stream().filter(e -> KEYS.contains(e.getEName().trim())).forEach(fd -> {
-                /*这是把所有数据重置为空,如果要实现手填就必须分析出项目*/
-                fd.getValues().forEach(e -> e.setValue(null));
+                /*这是把所有数据重置为空,如果要实现手填就必须分析出项目,按项目名称覆盖LinkedHashMap<String, List<Object>> group*/
+                /*fd.getValues().forEach(e -> e.setValue(null));*/
                 switch (KEYS.indexOf(fd.getEName().trim())) {
                     case 0:
                         itemName = fd;
@@ -52,6 +54,13 @@ public class SubTable {
                 }
             });
         }
+        /*初始化group,保留原先内容,只做同KEY覆盖*/
+        initGroup();
+    }
+
+    /*获取每页的行数*/
+    public Integer getColumnSize(){
+       return this.itemName.getCoordsList().size();
     }
 
     public boolean checked() {
@@ -65,20 +74,35 @@ public class SubTable {
     }
 
     public void flush() {
+        /*行号,起始为0,当前行号整除列大小余0就是每页首行*/
+        AtomicInteger index=new AtomicInteger(0);
         if (group.size() > 0) {
             List<String> itemNameList = new ArrayList<>();
             List<Object> designList = new ArrayList<>();
             List<Object> dataList = new ArrayList<>();
+            int columnSize = getColumnSize();
             for (Map.Entry<String, List<Object>> entry : group.entrySet()) {
                 String key = entry.getKey();
                 String[] nameAndDesign = key.split("@");
                 List<Object> values = entry.getValue();
                 /*写人的行数*/
                 int count = (int) Math.ceil((double) values.size() / (double) ROW_SIZE);
-//                   int count2=count/STEP[0];
-                itemNameList.add(nameAndDesign[0]);
                 if(count>1) {
-                    itemNameList.addAll(Collections.nCopies(count-1, StringPool.EMPTY));
+                    /*每一页的首行都要显示*/
+                    int head= index.get();
+                     List<String> tmp=  IntStream.range(head,head+count).boxed().map(i->{
+                         String res=StringPool.EMPTY;
+                        if(i==head||(i%columnSize==0)){
+                            res= nameAndDesign[0];
+                        }
+                         index.getAndIncrement();
+                         return res;
+                    }).collect(Collectors.toList());
+                    itemNameList.addAll(tmp);
+                }else{
+                    /*行号+1*/
+                    index.getAndIncrement();
+                    itemNameList.add(nameAndDesign[0]);
                 }
                 if (design != null) {
                     if (nameAndDesign.length >= 2) {
@@ -108,4 +132,27 @@ public class SubTable {
         }
     }
 
+    /*用原有数据初始化*/
+    private void initGroup(){
+        if(checked()) {
+            List<String> itemName = this.itemName.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
+            List<String> designs = this.design.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
+            List<Object> data = this.data.getRawValue();
+            String name = itemName.get(0);
+            if(StringUtils.isNotEmpty(name)) {
+                int head = 0;
+                for (int i = 1; i < itemName.size(); i++) {
+                    String x = itemName.get(i);
+                    /*如果非空且与当前的不一样则视为新项目*/
+                    if (StringUtils.isNotEmpty(x) && !x.equals(name) || (i == itemName.size() - 1)) {
+                        String des = designs.subList(head, i).stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.joining("/"));
+                        group.put(name + StringPool.AT + des, data.subList(head*15,  i*ROW_SIZE));
+                        head = i;
+                        name = x;
+                    }
+                }
+            }
+        }
+    }
+
 }