yangyj 2 سال پیش
والد
کامیت
4e8df944ec

+ 1 - 0
blade-service-api/blade-manager-api/blade-manager-api.iml

@@ -25,6 +25,7 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.80" level="project" />
     <orderEntry type="library" name="Maven: org.springblade:blade-starter-mybatis:2.9.1.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
     <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />

+ 9 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ElementData.java

@@ -77,6 +77,15 @@ public class ElementData {
         this.groupId = groupId;
         this.value = value;
     }
+
+    public ElementData(Integer index, Integer groupId, Object value, Integer x, Integer y) {
+        this.index = index;
+        this.groupId = groupId;
+        this.value = value;
+        this.x = x;
+        this.y = y;
+    }
+
     public double doubleValue(){
         return Double.parseDouble(this.value.toString());
     }

+ 28 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -16,6 +16,7 @@ import org.springblade.manager.formula.KeyMapper;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author yangyj
@@ -33,12 +34,15 @@ public class TableElementConverter implements ITableElementConverter {
     List<Formula> formulas;
     /**公式执行时的元素对象*/
     List<FormData> fds;
+    Map<String,Map<String,String>> coordinateMap;
+    Map<String,ElementData> elementDataMap;
 
 
-    public TableElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas) {
+    public TableElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas,Map<String,Map<String,String>> coordinateMap) {
         this.tableInfoList = tableInfoList;
         this.keyMappers = keyMappers;
         this.formulas = formulas;
+        this.coordinateMap=coordinateMap;
         if(Func.isNotEmpty(tableInfoList)){
             this.contractId = Long.parseLong(tableInfoList.get(0).getContractId());
         }
@@ -75,9 +79,12 @@ public class TableElementConverter implements ITableElementConverter {
                         LinkedHashMap<String,String>   page = k.getDataMap();
                         String v=page.get(b.getField());
                         if(StringUtils.isNotEmpty(v)){
-                            String[] values = v.split(JOIN_REG);
+                            String[] values = v.split(StringPool.COMMA);
                             for(String s:values){
-                                eds.add(new ElementData(index.get(),0,s));
+                                String[] t = s.split("_+");
+                                ElementData ed = new ElementData(index.get(),0,t[0],Func.toInt(t[2]),Func.toInt(t[1]));
+                                this.elementDataMap.put(StringUtils.join(b.getCode(),ed.getGroupId(),ed.getIndex(),Func.toInt(t[2]),Func.toInt(t[1]),StringPool.AT),ed);
+                                eds.add(ed);
                             }
                         }
                         index.getAndIncrement();
@@ -88,6 +95,8 @@ public class TableElementConverter implements ITableElementConverter {
         }
     }
 
+
+
     @Override
     public void after() {
         /*可以优化对每一张表进行元素分类,同一张元素*/
@@ -112,7 +121,7 @@ public class TableElementConverter implements ITableElementConverter {
                        if(Func.isNotEmpty(page)) {
                            TableInfo info = tables.get(index);
                            /*每一页对应一个info*/
-                           info.getDataMap().put(fd.getKey(), recovery(page, fd.getPosition()));
+                           info.getDataMap().put(fd.getKey(), recovery(page, fd));
                        }
                    });
             });
@@ -167,6 +176,21 @@ public class TableElementConverter implements ITableElementConverter {
         return sb.toString();
     }
 
+    public String recovery(List<ElementData> dataList,FormData fd){
+        String coords = this.coordinateMap.get(fd.getTableName()).get(fd.getKey());
+        StringBuilder sb = new StringBuilder();
+        if(Func.isNotEmpty(coords)){
+            List<Coords> list = Stream.of(coords).flatMap(e-> Arrays.stream(e.split(";"))).map(e->{String[] xy=e.split("_");return new Coords(xy[0],xy[1]);}).collect(Collectors.toList());
+            for(int i=0;i<dataList.size();i++){
+                ElementData ed = dataList.get(i);
+                if(list.size()>i){
+                     Coords c=list.get(i);
+                     sb.append(ed).append("__").append(c.getY()).append("_").append(c.getX());
+                }
+            }
+        }
+        return sb.toString();
+    }
 
 
 

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

@@ -2,6 +2,7 @@ package org.springblade.manager.service;
 
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.manager.entity.WbsParam;
+import org.springblade.manager.entity.WbsTreeContract;
 
 /**
  * @author yangyj
@@ -15,5 +16,5 @@ public interface IWbsParamService  extends BaseService<WbsParam> {
      * @Param [nodeId:当前节点id, contractId :当前合同段id]
      * @Author yangyj
      **/
-    String createFileTitle(Long nodeId,Long contractId);
+    String createFileTitle(Long nodeId,Long contractId,	WbsTreeContract wbsTreeContract);
 }

+ 30 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -258,9 +258,20 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 		List<Map<String,Object>> list=this.jdbcTemplate.queryForList("SELECT   a.p_key_id as nodeId,b.id as fieldId,b.e_key as field,c.init_table_name as tableName  from m_wbs_tree_contract a LEFT JOIN m_wbs_form_element b on a.id=b.f_id left JOIN m_wbs_tree c on a.id=c.id where a.p_key_id in ("+ids+")");
 		List<KeyMapper> keyMappers = JSON.parseArray(JSONArray.toJSONString(list), KeyMapper.class);
 		if(Func.isNotEmpty(keyMappers)) {
+			Map<String,Map<String,String>> coordinateMap = new HashMap<>(keyMappers.size()*2);
+			keyMappers.forEach(e->{
+				try {
+					if(!coordinateMap.containsKey(e.getTableName())){
+						/*不包含定位信息的情况执行*/
+						coordinateMap.put(e.getTableName(),getTablbCols(e.getNodeId().toString(),null));
+					}
+				} catch (FileNotFoundException fileNotFoundException) {
+					fileNotFoundException.printStackTrace();
+				}
+			});
 			stopWatch.start("公式处理");
 			List<Formula> formulas = this.formulaService.list(Wrappers.<Formula>lambdaQuery().in(Formula::getElementId, keyMappers.stream().map(KeyMapper::getFieldId).distinct().collect(Collectors.toList())));
-			TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas);
+			TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas,coordinateMap);
 			if (tec.isPresent()) {
 				tec.before();
 				this.formulaService.execute(tec);
@@ -389,7 +400,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 					WbsTreeContract wbsTreeContractByP = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
 							.eq(WbsTreeContract::getId, wbsTreeContract.getParentId()).eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId()));
 					//处理文件提名
-					String fileName = this.wbsParamService.createFileTitle(Func.isNotEmpty(wbsTreeContractByP.getOldId())? Long.valueOf(wbsTreeContractByP.getOldId()) :wbsTreeContractByP.getId(), Long.parseLong(wbsTreeContractByP.getContractId()));
+					String fileName = this.wbsParamService.createFileTitle(Func.isNotEmpty(wbsTreeContractByP.getOldId())? Long.valueOf(wbsTreeContractByP.getOldId()) :wbsTreeContractByP.getId(), Long.parseLong(wbsTreeContractByP.getContractId()),wbsTreeContractByP);
 					fileName = StringUtils.isNotEmpty(fileName) ? fileName : "缺少文件提名配置";
 
 					//huangjn 保存成功后调用生成资料查询列表数据
@@ -404,7 +415,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 	// 获取用户
 	public Map<String,String>  getTablbCols(String pkeyid, String colkey) throws FileNotFoundException {
 		Map<String,String> dataMap = new HashMap<>();
-		if(StringUtils.isNotEmpty(pkeyid)){
+		if(StringUtils.isEmpty(pkeyid)){
 			return null;
 		}
 		//获取html
@@ -425,19 +436,22 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 			Elements tds = tr.select("td");
 			for (int j = 0; j < tds.size(); j++) {
 				Element data = tds.get(j);
-				String x1 = data.children().get(0).attr("x1");
-			//	String x2 = data.children().get(0).attr("x2");
-				String y1 = data.children().get(0).attr("y1");
-				//String y2 = data.children().get(0).attr("y2");
-				String keyVal = x1+"_"+y1;
-				String keyname = data.children().get(0).attr("keyname");
-				if(StringUtils.isNotEmpty(keyname)){
-					String keys[] = keyname.split("__");
-					String datakey = keys[0];
-					if(dataMap.containsKey(keys[0])){
-						String datakeyVal = dataMap.get(datakey)+";"+keyVal;
-					}else{
-						dataMap.put(datakey,keyVal);
+				if(!data.children().isEmpty()){
+					String x1 = data.children().get(0).attr("x1");
+					//	String x2 = data.children().get(0).attr("x2");
+					String y1 = data.children().get(0).attr("y1");
+					//String y2 = data.children().get(0).attr("y2");
+					String keyVal = x1+"_"+y1;
+					String keyname = data.children().get(0).attr("keyname");
+					if(StringUtils.isNotEmpty(keyname)){
+						String[] keys = keyname.split("__");
+						String datakey = keys[0];
+//						if(dataMap.containsKey(keys[0])){
+//							String datakeyVal = dataMap.get(datakey)+";"+keyVal;
+//						}else{
+//							dataMap.put(datakey,keyVal);
+//						}
+						dataMap.merge(datakey,keyVal,(v1,v2)-> v1+";"+v2);
 					}
 				}
 			}

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

@@ -38,11 +38,12 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
     public static final String FILE_TITLE="FILE_TITLE";
     @Override
     @Cacheable(cacheNames = "file_title", key = "#nodeId+'@'+T(System).currentTimeMillis()/(1000*100)")
-    public String createFileTitle(Long nodeId,Long contractId) {
+    public String createFileTitle(Long nodeId,Long contractId,WbsTreeContract wbsTreeContract) {
         if(BaseUtils.isNotNull(nodeId,contractId)){
             StaticLog.info("获取节点{}文件题名",nodeId);
             List<WbsTreeContract> nodes = treeContractService.searchParentAllNode(nodeId,contractId);
             if(Func.isNotEmpty(nodes)){
+                nodes.set(0,wbsTreeContract);
                 WbsParam wp = this.getOne(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getWbsId,nodeId).eq(WbsParam::getK,FILE_TITLE));
                 if(Func.isNotEmpty(wp)){
                     return CustomFunction.tree(nodes.stream().map(WbsTreeContract::getFullName).collect(Collectors.toList()), wp.getV()).toString();