yangyj пре 2 година
родитељ
комит
02bf11fe90

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

@@ -16,6 +16,8 @@
  */
 package org.springblade.manager.service.impl;
 
+import cn.hutool.core.date.StopWatch;
+import cn.hutool.log.StaticLog;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -39,6 +41,7 @@ import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.KeyMapper;
+import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springblade.manager.service.IFormulaService;
 import org.springblade.manager.service.IWbsParamService;
 import org.springblade.manager.service.IWbsTreeContractService;
@@ -209,36 +212,20 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
 	@Override
 	public void formulaFillData(List<TableInfo> tableInfoList) {
-		List<FormData> fds = new ArrayList<>();
-		List<WbsTreeContract>  wbsTreeContractList = wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getPKeyId,tableInfoList.stream().map(TableInfo::getPkeyId).collect(Collectors.toList())));
-		if(Func.isNotEmpty(wbsTreeContractList)){
-			List<WbsTree> wbsTrees = this.wbsTreeService.list(Wrappers.<WbsTree>lambdaQuery().in(WbsTree::getId,wbsTreeContractList.stream().map(WbsTreeContract::getId).distinct().collect(Collectors.toList())));
-			Map<Long,List<WbsTree>>  treeMap = wbsTrees.stream().collect(Collectors.groupingBy(WbsTree::getId));
-			LinkedHashMap<Long,Long> map = new LinkedHashMap<>(wbsTreeContractList.size()*2);
-			String ids =tableInfoList.stream().map(TableInfo::getPkeyId).collect(Collectors.joining(","));
-			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)){
-				/*当前节点所有已经配置的公式*/
-				List<Formula> formulas =this.formulaService.list(Wrappers.<Formula>lambdaQuery().in(Formula::getElementId,keyMappers.stream().map(KeyMapper::getFieldId).distinct().collect(Collectors.toList())));
-				Map<Long,Formula> formulaMap = new HashMap<>();
-				if(Func.isNotEmpty(formulas)){
-					formulas.forEach(e->{
-						formulaMap.put(e.getElementId(),e);
-					});
-				}
-				LinkedHashMap<String,List<KeyMapper>> dataMap =keyMappers.stream().collect(Collectors.groupingBy(e->e.getTableName()+e.getField(), LinkedHashMap<String,List<KeyMapper>>::new,Collectors.toList()));
-				for(Map.Entry<String,List<KeyMapper>> entry:dataMap.entrySet()){
-					String code=	entry.getKey();
-					List<KeyMapper> keyMapperList =entry.getValue();
-					KeyMapper km = keyMapperList.get(0);
-					fds.add(new FormData(code,new ArrayList<>(),formulaMap.get(km.getFieldId())));
-				}
-			}
-			System.out.println();
+		StopWatch stopWatch = new StopWatch();
+		stopWatch.start("公式处理");
+		String ids =tableInfoList.stream().map(TableInfo::getPkeyId).collect(Collectors.joining(","));
+		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);
+		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);
+		if(tec.isPresent()){
+			tec.before();
+			this.formulaService.execute(tec);
+			tec.after();
 		}
-		//stopWatch.stop();
-		//StaticLog.info("{}",stopWatch);
+		stopWatch.stop();
+		StaticLog.info("{}",stopWatch);
 	}