yangyj 1 سال پیش
والد
کامیت
3059d4694e

+ 9 - 10
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/EvaSummary.java

@@ -24,7 +24,8 @@ public abstract class EvaSummary<T> {
     protected  final List<FormData> fds = new ArrayList<>();
     protected  final List<T> datas = new ArrayList<>();
     protected  Map<String, BiFunction<List<T>,Integer,List<Object>>> fm = new HashMap<>();
-    protected  final List<String> sqlList = new ArrayList<>();
+    protected   String sql;
+    protected  final List<Object[]> params = new ArrayList<>();
 
     public abstract Integer getPageNum();
 
@@ -47,6 +48,8 @@ public abstract class EvaSummary<T> {
 
     public  boolean flush( List<WbsTreeContract> wtcList){
         if(wtcList.size()>0) {
+            WbsTreeContract w = wtcList.get(0);
+            this.sql="update "+w.getInitTableName()+" set "+this.fds.stream().map(e->e.getKey()+"=?").collect(Collectors.joining(","))+" where p_key_id =?";
             Map<Integer, List<T>> pages = IntStream.range(0, datas.size()).boxed()
                     .collect(Collectors.groupingBy(
                             i -> i / rowSize,
@@ -60,13 +63,9 @@ public abstract class EvaSummary<T> {
                     break;
                 }
                 List<T> v = entry.getValue();
-                WbsTreeContract w = wtcList.get(k);
-                StringBuilder  sb =new StringBuilder();
-                this.fds.forEach(fd -> {
-                    sb.append(putEd(k,v,fd,w)).append(StringPool.COMMA);
-                });
-                String template="update "+w.getInitTableName()+" set "+sb.deleteCharAt(sb.length()-1)+" where p_key_id ="+w.getPKeyId();
-                sqlList.add(template);
+                List<Object> l=this.fds.stream().map(fd->putEd(k,v,fd)).collect(Collectors.toList());
+                l.add(wtcList.get(k).getPKeyId());
+                params.add(l.toArray());
             }
             return true;
         }
@@ -74,7 +73,7 @@ public abstract class EvaSummary<T> {
     }
 
     /**把数据放到对应元素*/
-    private String putEd(int pn, List<T> items, FormData fd, WbsTreeContract w){
+    private String putEd(int pn, List<T> items, FormData fd){
         BiFunction<List<T>,Integer,List<Object>> fc = this.fm.get(fd.getCode());
         if(fc!=null) {
             List<Object> data = fc.apply(items,pn);
@@ -84,7 +83,7 @@ public abstract class EvaSummary<T> {
                 list.add(new ElementData(pn, 0, data.get(i), c.getX(), c.getY()));
             }
             fd.getValues().addAll(list);
-            return fd.getKey()+StringPool.EQUALS+StringPool.SINGLE_QUOTE+recovery(list)+StringPool.SINGLE_QUOTE;
+            return recovery(list);
         }
         return StringPool.EMPTY;
     }

+ 158 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -1,8 +1,10 @@
 package com.mixsmart.utils;
 
 
-import cn.hutool.json.JSONObject;
 import cn.hutool.log.StaticLog;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.jfireel.expression.Expression;
 import org.apache.commons.lang.math.NumberUtils;
 import org.apache.http.*;
@@ -37,6 +39,7 @@ import org.jsoup.nodes.Document;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.tool.utils.*;
+import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.Coords;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
@@ -888,5 +891,159 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
     }
 
 
+    public static List<TableInfo> getTableInfoList(JSONArray dataArray) {
+        if (dataArray != null && !dataArray.isEmpty()) {
+            List<TableInfo> result = new ArrayList<>();
+            for (int m = 0; m < dataArray.size(); m++) {
+                TableInfo tableInfo = new TableInfo();
+                com.alibaba.fastjson.JSONObject dataInfo2 = dataArray.getJSONObject(m);
+                //
+                tableInfo.setContractId(dataInfo2.getString("contractId"));
+                tableInfo.setPkeyId(dataInfo2.getString("pkeyId"));
+                tableInfo.setProjectId(dataInfo2.getString("projectId"));
+                //huangjn 填报的类型,施工或监理
+                tableInfo.setClassify(dataInfo2.getString("classify"));
+
+                //设置首件信息
+                setFirstData(dataInfo2, tableInfo);
+                //设置日志信息
+                setTheLogData(dataInfo2, tableInfo);
+
+                dataInfo2.fluentRemove("contractId")
+                        .fluentRemove("pkeyId")
+                        .fluentRemove("p_key_id")
+                        .fluentRemove("projectId")
+                        .fluentRemove("classify")
+                        .fluentRemove("pickerKey")
+                        .fluentRemove("id")
+                        .fluentRemove("isFirst")
+                        .fluentRemove("firstNodeId")
+                        .fluentRemove("isTheLog")
+                        .fluentRemove("theLogId")
+                        .fluentRemove("linkTabIds")
+                        .fluentRemove("recordTime")
+                        .fluentRemove("businessId")
+                        .fluentRemove("sourceUrl")
+                        .fluentRemove("pdfUrl")
+                        .fluentRemove("firstFileName")
+                        .fluentRemove("");
+                // 计算数据
+                LinkedHashMap<String, List<String>> dataMap = dataInfo2.keySet().stream().filter(e -> e.contains("__")).collect(Collectors.groupingBy(e -> e.split("__")[0], LinkedHashMap<String, List<String>>::new, Collectors.toList()));
+                LinkedHashMap<String, String> dataMap2 = new LinkedHashMap<>();
+                // 字段组合
+                for (String k : dataMap.keySet()) {
+                    if (dataMap.get(k).size() > 1 && !dataMap.get(k).contains("000Z")) {
+                        String[] ziduan = dataMap.get(k).toArray(new String[]{});
+                        String temp = "";
+                        for (int i = 0; i < ziduan.length - 1; i++) {
+                            for (int j = 0; j < ziduan.length - i - 1; j++) {
+                                Integer tr = Integer.parseInt((ziduan[j].split("__")[1]).split("_")[0]);
+                                Integer td = Integer.parseInt(ziduan[j].split("__")[1].split("_")[1]);
+
+                                Integer tr_1 = Integer.parseInt(ziduan[j + 1].split("__")[1].split("_")[0]);
+                                Integer td_1 = Integer.parseInt(ziduan[j + 1].split("__")[1].split("_")[1]);
+
+                                if (tr > tr_1 && td.equals(td_1)) { //纵向排序
+                                    temp = ziduan[j];
+                                    ziduan[j] = ziduan[j + 1];
+                                    ziduan[j + 1] = temp;
+                                }
+                            }
+                        }
+
+                        String lastStr = dataInfo2.getString(ziduan[0]) + "_^_" + ziduan[0].split("__")[1];
+                        for (int i = 1; i < ziduan.length; i++) {
+                            String keyData = dataInfo2.getString(ziduan[i]);
+                            if (org.apache.commons.lang.StringUtils.isNotEmpty(keyData) && !keyData.equals("")) {
+                                lastStr += "☆" + dataInfo2.getString(ziduan[i]) + "_^_" + ziduan[i].split("__")[1];
+                            }
+
+                        }
+                        dataMap2.put(k, lastStr);
+                    } else {
+                        String dataVal = dataInfo2.getString(dataMap.get(k).get(0));
+                        if (org.apache.commons.lang.StringUtils.isNotEmpty(dataVal)) {
+                            if (dataVal.contains("Ljava")) {
+                                Object o = dataInfo2.get(dataMap.get(k).get(0));
+                                dataVal = JSON.toJSONString(o).replace("\"", "");
+                            }
+                            dataMap2.put(k, dataVal + "_^_" + dataMap.get(k).get(0).split("__")[1]);
+                        }
+                    }
+                }
+                dataInfo2.put("p_key_id", tableInfo.getPkeyId());
+                dataInfo2.put("classify",tableInfo.getClassify());
+                dataInfo2.put("contractId",tableInfo.getContractId());
+                dataInfo2.put("projectId",tableInfo.getProjectId());
+                tableInfo.setDataMap(dataMap2);
+                result.add(tableInfo);
+            }
+            return result;
+        }
+        return null;
+    }
+    public static void setFirstData(com.alibaba.fastjson.JSONObject dataInfo2, TableInfo tableInfo) {
+        //huangjn 判断是否是首件
+        if (dataInfo2.containsKey("isFirst")) {
+            tableInfo.setIsFirst(dataInfo2.getString("isFirst"));
+        }
+        //huangjn 判断是否是首件
+
+        //首件资料绑定的节点
+        if (dataInfo2.containsKey("firstNodeId")) {
+            tableInfo.setFirstNodeId(dataInfo2.getString("firstNodeId"));
+        }
+        //首件ID(编辑时有值,新增时为空)
+        if (dataInfo2.containsKey("firstId")) {
+            tableInfo.setFirstId(dataInfo2.getString("firstId"));
+        }
+        //源文件
+        if (dataInfo2.containsKey("sourceUrl")) {
+            tableInfo.setSourceUrl(dataInfo2.getString("sourceUrl"));
+        }
+        //pdfUrl
+        if (dataInfo2.containsKey("pdfUrl")) {
+            tableInfo.setPdfUrl(dataInfo2.getString("pdfUrl"));
+        }
+        //文件名称
+        if (dataInfo2.containsKey("firstFileName")) {
+            tableInfo.setFirstFileName(dataInfo2.getString("firstFileName"));
+        }
+        //关联的信息
+        if (dataInfo2.containsKey("linkProcessList")) {
+            tableInfo.setLinkProcessList(dataInfo2.getJSONArray("linkProcessList"));
+        }
+    }
+    public static void setTheLogData(JSONObject dataInfo2, TableInfo tableInfo) {
+        //huangjn 判断是否是日志
+        if (dataInfo2.containsKey("isTheLog")) {
+            tableInfo.setIsTheLog(dataInfo2.getString("isTheLog"));
+        }
+        //huangjn 判断是否是日志
+
+        //huangjn 日志ID
+        if (dataInfo2.containsKey("theLogId")) {
+            tableInfo.setTheLogId(dataInfo2.getString("theLogId"));
+        }
+        //huangjn 日志ID
+
+        //huangjn 日志勾选的工序
+        if (dataInfo2.containsKey("linkTabIds")) {
+            tableInfo.setLinkTabIds(dataInfo2.getJSONArray("linkTabIds"));
+        }
+        //huangjn 日志勾选的工序
+
+        //huangjn 日志所选时间
+        if (dataInfo2.containsKey("recordTime")) {
+            tableInfo.setRecordTime(dataInfo2.getString("recordTime"));
+        }
+        //huangjn 日志所选时间
+        //huangjn 每份填报数据的id,目前日志专用
+        if (dataInfo2.containsKey("id")) {
+            tableInfo.setBusinessId(dataInfo2.getString("id"));
+        }
+        //huangjn 每份填报数据的id,目前日志专用
+    }
+
 
 }

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

@@ -148,7 +148,7 @@ public class ExcelTabController extends BladeController {
 
     private final IContractInfoService contractInfoService;
 
-    private final IWbsParamService wbsParamService;
+    /*private final IWbsParamService wbsParamService;*/
 
     private final TaskClient taskClient;
 
@@ -1974,7 +1974,7 @@ public class ExcelTabController extends BladeController {
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
         if (maps == null || maps.size() == 0) {
             WbsTreeContract contract = wbsTreeContractService.getOne(new LambdaQueryWrapper<WbsTreeContract>().eq(WbsTreeContract::getPKeyId, nodeId));
-            String fileName = this.wbsParamService.createFileTitle(contract);
+            String fileName = this.excelTabService.createFileTitle(contract);
             InformationQuery query = new InformationQuery();
             query.setId(SnowFlakeUtil.getId());
             query.setWbsId(Long.parseLong(nodeId));

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

@@ -34,6 +34,7 @@ import org.springblade.manager.formula.impl.CompositeDataAccess;
 import org.springblade.manager.formula.impl.StartupTimeListener;
 import org.springblade.manager.service.*;
 import org.springblade.manager.service.impl.FormulaServiceImpl;
+import org.springblade.manager.vo.CurrentNode;
 import org.springblade.manager.wrapper.FormulaWrapper;
 import org.springframework.beans.BeanUtils;
 import org.springframework.dao.EmptyResultDataAccessException;
@@ -49,6 +50,7 @@ import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiFunction;
 import java.util.stream.Collectors;
 
 /**
@@ -932,6 +934,7 @@ public class FormulaController {
 
     @GetMapping("/evaluate")
     public R<Object> evaluate(@NotNull(message="tablePkeyId 不能为空") Long tablePkeyId){
+         BiFunction<String,String,List<Map<String, Object>>> bif= this.service.getTableNamePkIdsMaps();
          return this.service.evaluate(tablePkeyId);
     }
 

+ 3 - 55
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/FormulaExecutor.java

@@ -13,9 +13,7 @@ import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.enums.ExecuteType;
 import org.springblade.manager.formula.impl.TableElementConverter;
-import org.springblade.manager.service.*;
 import org.springblade.manager.service.impl.FormulaServiceImpl;
-import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.manager.vo.CurrentNode;
 
 import java.util.*;
@@ -121,56 +119,7 @@ public class FormulaExecutor {
             }
         }
         public void missingFill(List<String> missingList){
-            try {
-                /*数据池里面没有任何元素匹配和当前依赖匹配*/
-                if (Func.isNotEmpty(missingList)) {
-                    StaticLog.info("需要挂载的元素{}", String.join(";", missingList));
-                    Map<String, Object> elementInfoMap = service.getElementInfoByCodes(String.join(",", missingList));
-                    /*1从当前节点其它表格中查找匹配的元素*/
-                    List<String> removeList = new ArrayList<>();
-                    if (Func.isNotEmpty(missingList)) {
-                        /*2从当前节点的兄弟节点中查找匹配的元素*/
-                        CurrentNode currentNode = tec.getCurrentNode();
-                        /*List<Map<String,Object>> tableNamePkIdsMaps= this.jdbcTemplate.queryForList("select c.init_table_name tableName,c.p_key_id pkId,c.html_url url from (select b.id from m_wbs_tree_contract a join m_wbs_tree_contract b on (a.contract_id=b.contract_id and b.ancestors like CONCAT(a.ancestors,'%')) where a.p_key_id="+currentNode.getPkId()+" and b.is_deleted=0 and b.node_type=6 ORDER BY b.sort) k join m_wbs_tree_contract c on c.parent_id = k.id where  c.contract_id="+tec.getContractId()+" and c.is_deleted=0 ");*/
-                        WbsTreeContract parent = service.wbsTreeContractService().getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, currentNode.getParentPkeyId()));
-                        if (parent == null) {
-                            return;
-                        }
-                        List<Map<String, Object>> tableNamePkIdsMaps = tec.jdbcTemplate.queryForList(
-                                "select c.init_table_name tableName,c.p_key_id pkId,c.html_url url from" +
-                                        " (select id from m_wbs_tree_contract where contract_id=" + currentNode.getContractId() + " and is_deleted=0 and node_type=6 and tree_code like '" + parent.getTreeCode() + "%' ORDER BY sort) k" +
-                                        " join m_wbs_tree_contract c on c.parent_id = k.id " +
-                                        "where  c.contract_id=" + currentNode.getContractId() + " and c.is_deleted=0 "
-                        );
-                        if (Func.isNotEmpty(tableNamePkIdsMaps)) {
-                            // removeList.clear();
-                            missingList.forEach(miss -> {
-                                @SuppressWarnings("unckecked")
-                                Map<String, Object> elementInfo = (Map<String, Object>) elementInfoMap.get(miss);
-                                String tn = miss.substring(0, miss.indexOf(StringPool.COLON));
-                                String key = miss.substring(miss.indexOf(StringPool.COLON) + 1);
-                                String targetIds = tableNamePkIdsMaps.stream().filter(m -> StringUtils.isEquals(m.get("tableName"), tn)).map(m -> m.get("pkId")).map(StringUtils::handleNull).collect(Collectors.joining(","));
-                                if (Func.isNotEmpty(targetIds)) {
-                                    if (!tec.getCoordinateMap().containsKey(tn)) {
-                                        tableNamePkIdsMaps.stream().filter(m -> StringUtils.isEquals(m.get("tableName"), tn)).findAny().ifPresent(m -> {
-                                            tec.getCoordinateMap().put(tn, FormulaUtils.getElementCell(StringUtils.handleNull(m.get("url"))));
-                                        });
-                                    }
-                                    List<Map<String, Object>> tableDatas = tec.jdbcTemplate.queryForList("select * from " + tn + " where p_key_id in (" + targetIds + ")");
-                                    String tmp = elementInfo == null ? "" : StringUtils.handleNull(elementInfo.get("ename"));
-                                    fill(tableDatas, removeList, tn, key, tmp);
-                                }
-                            });
-                        }
-                    }
-                    if (Func.isNotEmpty(removeList)) {
-                        /*移除已经找到的元素数据*/
-                        missingList.removeIf(removeList::contains);
-                    }
-                }
-            }catch (Exception e){
-                e.printStackTrace();
-            }
+
         }
         public void fill(List<Map<String,Object>> tableDatas,List<String> removeList,String tn,String key,String name){
             if(Func.isNotEmpty(tableDatas)){
@@ -310,10 +259,9 @@ public class FormulaExecutor {
             keyWord(tec.constantMap);
             /*wbs节点链*/
             if(ExecuteType.INSPECTION.equals(tec.getExecuteType())) {
-                List<WbsTreeContract> nodes = service.wpService().tracing(one.getPkId());
-                tec.constantMap.put(CHAIN,nodes.stream().map(e-> StringUtils.isNotEmpty(e.getFullName())?e.getFullName():e.getNodeName()).collect(Collectors.toList()));
+
                 /*节点参数*/
-                tec.constantMap.put(WP,service.getWpMap(one));
+                tec.constantMap.put(WP,service.getWpMap(one,tec));
                 /*监表质量附件,过滤掉隐藏表格*/
                 tec.constantMap.put("tableNames",tec.getTableAll().stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)&&StringUtils.isNotEquals(e.getTableType(),4)).map(NodeTable::getNodeName).collect(Collectors.toList()));
             }

+ 3 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -22,10 +22,7 @@ import org.jsoup.nodes.Document;
 import org.springblade.business.dto.TrialSelfInspectionRecordDTO;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.bean.TableInfo;
-import org.springblade.manager.entity.ExcelEditCallback;
-import org.springblade.manager.entity.ExcelTab;
-import org.springblade.manager.entity.TableFile;
-import org.springblade.manager.entity.WbsFormElement;
+import org.springblade.manager.entity.*;
 import org.springblade.manager.enums.ExecuteType;
 import org.springblade.manager.vo.ExceTabTreVO;
 import org.springblade.manager.vo.ExcelTabVO;
@@ -184,4 +181,6 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
 
     R saveBussData(JSONArray dataArray) throws Exception;
 
+
+    String createFileTitle(WbsTreeContract wbsTreeContract);
 }

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

@@ -25,36 +25,36 @@ public interface IFormulaService extends BaseService<Formula> {
     /**
      * 变量准备
      */
-    IFormulaService init();
+    IFormulaService init(TableElementConverter tec);
 
     /**
      * 依赖排序
      */
-    IFormulaService sort();
+    IFormulaService sort(TableElementConverter tec);
 
     /**
      * 公式预处理
      */
-    IFormulaService pre();
+    IFormulaService pre(TableElementConverter tec);
 
     /**
      * 特殊公式处理
      */
-    IFormulaService special();
+    IFormulaService special(TableElementConverter tec);
 
     /**
      * 公式运算
      */
-    IFormulaService calculate();
+    IFormulaService calculate(TableElementConverter tec);
 
     /**
      * 格式化
      */
-    void format();
+    void format(TableElementConverter tec);
     /**
      * 变量准备
      */
-    IFormulaService init2();
+    IFormulaService init2(TableElementConverter tec);
 
     /**
      * 依赖排序
@@ -113,7 +113,7 @@ public interface IFormulaService extends BaseService<Formula> {
     /**获取当前节点的参数wbsNodeId:WBS级id ,wtpPkeyId:项目级PkeyId*/
     List<WbsParam> getNodeWps(Long wbsNodeId,Long wtpPkeyId);
 
-    IWbsParamService wpService();
+
 
 
 }

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

@@ -43,7 +43,7 @@ public interface IWbsParamService extends BaseService<WbsParam> {
     /**指定key的formulaId映射*/
     Long formulaId(String k);
     /**指定key的formulaId映射*/
-    Map<String, Formula> formulaKeyMap(List<String> ks);
+    /*Map<String, Formula> formulaKeyMap(List<String> ks);*/
     /**根据合同段集合刷新*/
      void treeCodeUpdate(Set<Long> contractIds);
     /**全部项目刷新*/

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2995,6 +2995,11 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         return R.data("操作成功");
     }
 
+    @Override
+    public String createFileTitle(WbsTreeContract wbsTreeContract) {
+        return this.wbsParamService.createFileTitle(wbsTreeContract);
+    }
+
     // 保存单表
     public void SaveOneTabInfo(JSONObject tableInfo) throws Exception {
         System.out.println("---------=" + new Date().toLocaleString());

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 224 - 162
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java


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

@@ -16,10 +16,8 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.TreeNode;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.WbsParamMapper;
-import org.springblade.manager.service.IElementFormulaMappingService;
-import org.springblade.manager.service.IFormulaService;
-import org.springblade.manager.service.IWbsParamService;
-import org.springblade.manager.service.IWbsTreeContractService;
+import org.springblade.manager.mapper.WbsTreePrivateMapper;
+import org.springblade.manager.service.*;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
@@ -38,8 +36,8 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsParam> implements IWbsParamService {
     private final IWbsTreeContractService treeContractService;
+    private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final IElementFormulaMappingService elementFormulaMappingService;
-    private final IFormulaService formulaService;
     private final JdbcTemplate jdbcTemplate;
 
     private static final String NOT_SET = "还未配置提名规则";
@@ -56,12 +54,12 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         if(wtc!=null&&wtc.getPKeyId()!=null){
             List<WbsTreeContract> nodes = tracing(wtc.getPKeyId());
             if (Func.isNotEmpty(nodes)) {
-                WbsTreePrivate wtp = this.formulaService.wtpId(wtc.getPKeyId());
+                WbsTreePrivate wtp = this.wtpId(wtc.getPKeyId());
                 if(wtp!=null){
                     /*优先取私有*/
                     WbsParam wp = this.getOne(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId, wtp.getPKeyId()).eq(WbsParam::getK, FILE_TITLE).last(" limit 1"));
                     if (wp == null) {
-                        WbsTreePrivate publicWtp = this.formulaService.getOriginWtp(wtp.getPKeyId());
+                        WbsTreePrivate publicWtp = this.getOriginWtp(wtp.getPKeyId());
                         wp = this.getOne(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId, publicWtp.getId()).eq(WbsParam::getK, FILE_TITLE).last(" limit 1 "));
                     }
                     if (Func.isNotEmpty(wp)) {
@@ -74,6 +72,41 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         return NOT_SET;
     }
 
+    public WbsTreePrivate getOriginWtp(Long pkeyId) {
+
+        /*WbsTreePrivate wtp = this.wbsTreePrivateMapper.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId,pkeyId));*/
+        WbsTreePrivate wtp = this.wbsTreePrivateMapper.getByPKeyId(pkeyId);
+        int i=10;
+        WbsTreePrivate publicWtp = wtp;
+        while (i>0) {
+           /* WbsTreePrivate tmp=  this.wbsTreePrivateMapper.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, publicWtp.getWbsId()));*/
+            WbsTreePrivate tmp=  this.wbsTreePrivateMapper.getByPKeyId(Long.parseLong(publicWtp.getWbsId()));
+            if (tmp == null) {
+                break;
+            }
+            publicWtp = tmp;
+            i--;
+        }
+        /*私有引用项目的wbsId其实是被复制的项目的根节点p_key_id,只有溯源才能找到真正的wbsId*/
+        wtp.setWbsId(publicWtp.getWbsId());
+        return wtp;
+    }
+
+    public WbsTreePrivate wtpId(Long pkeyId){
+        WbsTreeContract wtc = this.treeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
+        int loop=0;
+        while (wtc.getOldId()!=null&&loop<10){
+            loop++;
+            WbsTreeContract tmp = this.treeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getId,wtc.getOldId()).eq(WbsTreeContract::getProjectId,wtc.getProjectId()).last(" limit 1 "));
+            if(tmp==null){
+                return this.wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getId,wtc.getOldId()).eq(WbsTreePrivate::getProjectId,wtc.getProjectId()).last(" limit 1 "));
+            }else{
+                wtc=tmp;
+            }
+        }
+        return this.wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getId,wtc.getId()).eq(WbsTreePrivate::getProjectId,wtc.getProjectId()).last(" limit 1 "));
+    }
+
     @Override
     public String createFileTitle(Long pkeyId) {
         WbsTreeContract wtc =this.treeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
@@ -166,9 +199,9 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
                 if(removeMapingIds.size()>0){
                     batchDel(this.elementFormulaMappingService,removeMapingIds);
                 }
-                if(removeFormulaIds.size()>0){
+/*                if(removeFormulaIds.size()>0){
                     batchDel(this.formulaService,removeFormulaIds);
-                }
+                }*/
                 stopWatch.stop();
                 Long totalTime = stopWatch.getTotalTimeMillis();
                 StaticLog.info("公式执行用时:{},删除情况:{}", totalTime,result);
@@ -267,24 +300,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         return null;
     }
 
-    @Override
-    public Map<String, Formula> formulaKeyMap(List<String> ks) {
-        Map<String,Formula> result = new HashMap<>();
-        Map<String,Long> fkMap= formulaIdKeyMap(ks);
-        if(fkMap.size()>0) {
-           List<Formula> list =  this.formulaService.listByIds(fkMap.values());
-           if(list.size()<fkMap.size()){
-               /*this.formulaService.update(Wrappers.<Formula>lambdaUpdate().set(Formula::getIsDeleted,0).eq(Formula::getIsDeleted,1).in(Formula::getId,fkMap.values()));*/
-               this.jdbcTemplate.execute("update m_formula set is_deleted = 0 where is_deleted = 1 and id in ("+fkMap.values().stream().map(Object::toString).collect(Collectors.joining(","))+")");
-               list =  this.formulaService.listByIds(fkMap.values());
-           }
-           Map<Long,Formula> idMap=list.stream().collect(Collectors.toMap(BaseEntity::getId, f->f));
-           fkMap.forEach((k,v)->{
-               result.put(k,idMap.get(v));
-           });
-        }
-        return result;
-    }
+
 
     public void builder(Long id,List<String>sqlList){
         List<Map<String,Object>> treeNodeList= this.jdbcTemplate.queryForList("select node_name name,p_key_id value, id, parent_id parentId,sort  from m_wbs_tree_contract where contract_id="+id+" and is_deleted=0 and type=1 order by sort,create_time");

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

@@ -27,7 +27,6 @@ import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.FormulaBean;
-import org.springblade.manager.dto.ParamElements;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
 import org.springblade.manager.entity.*;
@@ -41,8 +40,6 @@ import org.springblade.system.cache.ParamCache;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.SqlParameterValue;
-import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است