yangyj 3 anni fa
parent
commit
b08d2aad68

+ 20 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.dto;
 
 import lombok.Data;
+import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.entity.Formula;
 
 import java.util.ArrayList;
@@ -50,6 +51,8 @@ public class FormData {
      */
     private Formula formula;
 
+    public static final String CODE_REG="[^:]+:[^:]+";
+
     public FormData() {
     }
     public FormData(String code, List<ElementData> values, Formula formula) {
@@ -64,4 +67,21 @@ public class FormData {
         this.values = values;
         this.formula = formula;
     }
+
+    public String getKey(){
+        return getKt(1,"key不存在");
+    }
+    public String getTableName(){
+      return getKt(0,"表名不存在");
+    }
+
+    private String getKt(Integer index,String msg){
+        if(this.code!=null&&this.code.matches(CODE_REG)){
+            return this.code.split(StringPool.COLON)[index];
+        }else{
+            return msg;
+        }
+    }
+
+
 }

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/KeyMapper.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.formula;
 
 import lombok.Data;
+import org.springblade.core.tool.utils.StringPool;
 
 /**
  * @author yangyj
@@ -13,4 +14,10 @@ public class KeyMapper {
     private  Long fieldId;
     private  String field;
     private  String tableName;
+    public String getCode(){
+        return this.tableName+StringPool.COLON+this.field;
+    }
+    public String getCodeAndId(){
+        return this.getCode()+StringPool.AT+this.fieldId;
+    }
 }

+ 23 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -1,10 +1,7 @@
 package org.springblade.manager.formula.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
 import com.mixsmart.utils.StringUtils;
-import lombok.AllArgsConstructor;
 import lombok.Data;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
@@ -61,7 +58,8 @@ public class TableElementConverter implements ITableElementConverter {
             this.formulas.forEach(e->{
                 formulaMap.put(e.getElementId().toString(),e);
             });
-            LinkedHashMap<String,List<KeyMapper>> dataMap =keyMappers.stream().collect(Collectors.groupingBy(e->e.getTableName()+e.getField()+ StringPool.AT+e.getFieldId(), LinkedHashMap<String,List<KeyMapper>>::new,Collectors.toList()));
+            /*根据元素id对keyMappers分组*/
+            LinkedHashMap<String,List<KeyMapper>> dataMap =keyMappers.stream().collect(Collectors.groupingBy(KeyMapper::getCodeAndId,LinkedHashMap<String,List<KeyMapper>>::new,Collectors.toList()));
             dataMap.keySet().forEach(e->{
                 String[] codeAndId = e.split(StringPool.AT);
                 List<KeyMapper> kms = dataMap.get(e);
@@ -78,7 +76,7 @@ public class TableElementConverter implements ITableElementConverter {
                                 eds.add(new ElementData(index.get(),0,s));
                             }
                         }
-                        index.set(index.get()+1);
+                        index.getAndIncrement();
                     });
                 });
                this.fds.add(new FormData(codeAndId[0],eds,formulaMap.get(codeAndId[1])));
@@ -88,8 +86,27 @@ public class TableElementConverter implements ITableElementConverter {
 
     @Override
     public void after() {
+        /*可以优化对每一张表进行元素分类,同一张元素*/
         for (FormData fd : this.fds) {
             List<ElementData> values = fd.getValues();
+            /*每个元素数据有N组组成,每组由N页组成*/
+            LinkedHashMap<Integer,LinkedHashMap<Integer,List<ElementData>>> groups = values.stream().collect(Collectors.groupingBy(ElementData::getGroupId,LinkedHashMap<Integer,LinkedHashMap<Integer,List<ElementData>>>::new,Collectors.groupingBy(ElementData::getIndex,LinkedHashMap<Integer,List<ElementData>>::new,Collectors.toList())));
+            List<Long> tableIds=keyMappers.stream().filter(e -> StringUtils.isEquals(e.getCode(),fd.getCode())).map(KeyMapper::getNodeId).collect(Collectors.toList());
+            List<TableInfo> tables = this.tableInfoList.stream().filter(e->tableIds.contains(Long.parseLong(e.getPkeyId()))).collect(Collectors.toList());
+            groups.forEach((groupId, group) -> {
+                   group.forEach((index,page)->{
+                       TableInfo info = tables.get(index);
+                       /*每一页对应一个info*/
+                       info.getDataMap().put(fd.getKey(),page.stream().map(e->StringUtils.handleNull(e.getValue())).collect(Collectors.joining(StringPool.COMMA)));
+                   });
+            });
+
         }
+        /*code前缀相同的是同一张表的元素*/
+        Map<String,List<FormData>> fdsMap = this.fds.stream().collect(Collectors.groupingBy(FormData::getTableName));
     }
+
+
+
+
 }

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

@@ -362,7 +362,7 @@
     <select id="selectFormElements" resultMap="wbsFormElementMap">
         SELECT
             w.f_id as fId,w.e_key,w.id,w.e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,
-            (select CONCAT(dept_name,'_',w.e_name) from m_wbs_tree where id = #{id} AND status = 1 AND is_deleted = 0) AS "tableElementKey",
+            (select CONCAT(init_table_name,':',w.e_key) from m_wbs_tree where id = #{id} AND status = 1 AND is_deleted = 0) AS "tableElementKey",
             (select init_table_name from m_wbs_tree where id = w.f_id AND type = 2 AND status = 1 AND is_deleted = 0 ) AS "initTableName"
         FROM
             m_wbs_form_element w

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

@@ -366,8 +366,9 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
     }
 
     @Override
+    @Deprecated
     public WbsFormElement searchElementDetailByTableElementKey(String fId, String tableElementKey) {
-        String[] s = tableElementKey.split("_");
+        String[] s = tableElementKey.split(":");
         return baseMapper.selectOne(Wrappers.<WbsFormElement>query().lambda()
                 .eq(WbsFormElement::getFId, fId)
                 .eq(WbsFormElement::getEName, s[1]));