yangyj %!s(int64=3) %!d(string=hai) anos
pai
achega
4781184b0a

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -739,7 +739,7 @@ public class ExcelTabController extends BladeController {
                     .eq(WbsTreeContract::getId, wbsTreeContract.getParentId()).eq(WbsTreeContract::getContractId,contractId));
 
             //处理文件提名
-            String fileName = this.wbsParamService.crateFileTitle(wbsTreeContractByP.getPKeyId(), Long.parseLong(wbsTreeContractByP.getContractId()));
+            String fileName = this.wbsParamService.createFileTitle(wbsTreeContractByP.getPKeyId(), Long.parseLong(wbsTreeContractByP.getContractId()));
 
             //huangjn 保存成功后调用生成资料查询列表数据
             this.informationQueryClient.saveOrUpdateInformationQueryData(wbsTreeContractByP.getPKeyId()+"", fileName, Integer.parseInt(classify), 2);

+ 13 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITableElementConverter.java

@@ -0,0 +1,13 @@
+package org.springblade.manager.formula;
+
+import org.springblade.manager.bean.TableInfo;
+import org.springblade.manager.dto.FormData;
+import java.util.List;
+
+/**
+ * @author yangyj
+ */
+public interface ITableElementConverter {
+    void before();
+    void after();
+}

+ 95 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -0,0 +1,95 @@
+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;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.manager.bean.TableInfo;
+import org.springblade.manager.dto.ElementData;
+import org.springblade.manager.dto.FormData;
+import org.springblade.manager.entity.Formula;
+import org.springblade.manager.formula.ITableElementConverter;
+import org.springblade.manager.formula.KeyMapper;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * @author yangyj
+ * @Date 2022/9/1 13:50
+ * @description TODO
+ */
+@Data
+public class TableElementConverter implements ITableElementConverter {
+
+    private  final String JOIN_REG="__\\d+_\\d+,?";
+    private List<TableInfo> tableInfoList;
+    private Long contractId;
+    private Long nodeId;
+    List<KeyMapper> keyMappers;
+    List<Formula> formulas;
+    List<FormData> fds;
+
+    private TableElementConverter() {
+    }
+
+    public TableElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas) {
+        this.tableInfoList = tableInfoList;
+        this.keyMappers = keyMappers;
+        this.formulas = formulas;
+        if(Func.isNotEmpty(tableInfoList)){
+            this.contractId = Long.parseLong(tableInfoList.get(0).getContractId());
+        }
+    }
+
+
+    public Boolean isPresent(){
+        return BaseUtils.isNotNull(this.keyMappers,this.formulas,this.nodeId,this.contractId);
+    }
+
+
+    @Override
+    public void before() {
+        if(Func.isNotEmpty(this.keyMappers)&&Func.isNotEmpty(this.formulas)){
+            /*当前节点所有已经配置的公式*/
+            Map<String,Formula> formulaMap = new HashMap<>(this.formulas.size()*2);
+            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()));
+            dataMap.keySet().forEach(e->{
+                String[] codeAndId = e.split(StringPool.AT);
+                List<KeyMapper> kms = dataMap.get(e);
+                List<ElementData> eds = new ArrayList<>();
+                AtomicInteger index= new AtomicInteger(0);
+                kms.forEach(b->{
+                    List<TableInfo> elements =this.tableInfoList.stream().filter(t-> StringUtils.isEquals(t.getPkeyId(),b.getNodeId())).collect(Collectors.toList());
+                    elements.forEach(k->{
+                        LinkedHashMap<String,String>   page = k.getDataMap();
+                        String v=page.get(b.getField());
+                        if(StringUtils.isNotEmpty(v)){
+                            String[] values = v.split(JOIN_REG);
+                            for(String s:values){
+                                eds.add(new ElementData(index.get(),0,s));
+                            }
+                        }
+                        index.set(index.get()+1);
+                    });
+                });
+               this.fds.add(new FormData(codeAndId[0],eds,formulaMap.get(codeAndId[1])));
+            });
+        }
+    }
+
+    @Override
+    public void after() {
+        for (FormData fd : this.fds) {
+            List<ElementData> values = fd.getValues();
+        }
+    }
+}

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaService.java

@@ -3,6 +3,7 @@ package org.springblade.manager.service;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
+import org.springblade.manager.formula.impl.TableElementConverter;
 
 import java.util.List;
 
@@ -15,4 +16,6 @@ public interface IFormulaService extends BaseService<Formula> {
      * @param list
      */
     void execute(List<FormData> list,Long contractId,Long primaryKeyId);
+    void execute(TableElementConverter tec);
+
 }

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

@@ -15,5 +15,5 @@ public interface IWbsParamService  extends BaseService<WbsParam> {
      * @Param [nodeId:当前节点id, contractId :当前合同段id]
      * @Author yangyj
      **/
-    String crateFileTitle(Long nodeId,Long contractId);
+    String createFileTitle(Long nodeId,Long contractId);
 }

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

@@ -16,14 +16,16 @@
  */
 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;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.mixsmart.utils.ListUtils;
+import com.mixsmart.utils.StringUtils;
 import lombok.AllArgsConstructor;
-import lombok.Data;
 import org.springblade.business.feign.InformationQueryClient;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.oss.model.BladeFile;
@@ -32,12 +34,15 @@ import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.bean.TableInfo;
+import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.ExcelTab;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.formula.ITableElementConverter;
 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;
@@ -54,6 +59,7 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -70,7 +76,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 	private final InformationQueryClient informationQueryClient;
 	// 元素信息表-
 	private final IWbsTreeContractService wbsTreeContractService;
-	private final IWbsTreeService wbsTreeService;
 	private final IFormulaService formulaService;
 	private final JdbcTemplate jdbcTemplate;
 
@@ -208,36 +213,25 @@ 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);
 	}
 
+
+
+
 	@Override
 	public void saveOrUpdateInfo(List<TableInfo> tableInfoList) {
 		if(ListUtils.isNotEmpty(tableInfoList)){
@@ -275,7 +269,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 							.eq(WbsTreeContract::getId, wbsTreeContract.getParentId()).eq(WbsTreeContract::getContractId,tableInfo.getContractId()));
 
 					//处理文件提名
-					String fileName = this.wbsParamService.crateFileTitle(wbsTreeContractByP.getPKeyId(), Long.parseLong(wbsTreeContractByP.getContractId()));
+					String fileName = this.wbsParamService.createFileTitle(wbsTreeContractByP.getPKeyId(), Long.parseLong(wbsTreeContractByP.getContractId()));
 
 					//huangjn 保存成功后调用生成资料查询列表数据
 					this.informationQueryClient.saveOrUpdateInformationQueryData(wbsTreeContractByP.getPKeyId()+"", fileName, Integer.parseInt(tableInfo.getClassify()), 2);

+ 8 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -18,6 +18,7 @@ import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.IFcHandler;
 import org.springblade.manager.formula.FormulaStrategyFactory;
+import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springblade.manager.mapper.FormulaMapper;
 import org.springblade.manager.service.IFormulaService;
 import org.springblade.manager.service.IWbsTreeContractService;
@@ -63,13 +64,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     @Override
     public void execute(List<FormData> list ,Long contractId,Long primaryKeyId){
 
-        contractId=888888L;
-
+/*        contractId=888888L;*/
         /*变量准备*/
         /*依赖排序*/
         /*公式预处理*/
         /*公式运算*/
-        System.out.println();
         Map<Boolean,List<FormData>> map = list.stream().collect(Collectors.partitioningBy(e->e!=null&&e.getFormula().getFormula().contains("E[")));
             List<FormData>total = new ArrayList<>();
             /*用来保存所有变量*/
@@ -211,6 +210,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         total.stream().filter(e->Func.isNotBlank(e.getFormula().getFormula())).map(FormData::getValues).forEach(e->e.stream().map(JSON::toJSONString).forEach(System.out::println));
     }
 
+    @Override
+    public void execute(TableElementConverter tec) {
+        WbsTreeContract one = this.treeContractService.getById(tec.getTableInfoList().get(0).getPkeyId());
+        this.execute(tec.getFds(),tec.getContractId(),one.getParentId());
+    }
+
     public  Map<String,Object> getMap(Map<String,Object> main,String key){
         Map<String,Object> CNDMap = (Map<String, Object>) main.get(key);
         if(CNDMap==null){

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

@@ -37,7 +37,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
     public static final String FILE_TITLE="FILE_TITLE";
     @Override
     @Cacheable(cacheNames = "file_title", key = "#nodeId+'@'+#contractId")
-    public String crateFileTitle(Long nodeId,Long contractId) {
+    public String createFileTitle(Long nodeId,Long contractId) {
         if(BaseUtils.isNotNull(nodeId,contractId)){
             StaticLog.info("获取节点{}文件题名",nodeId);
             List<WbsTreeContract> nodes = treeContractService.searchParentAllNode(nodeId,contractId);