Browse Source

表单相关:优化执行公式当前节点的上下文信息

yangyj 2 years ago
parent
commit
e155272dbf

+ 17 - 7
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/CurrentNode.java

@@ -1,28 +1,38 @@
 package org.springblade.manager.vo;
 
 import lombok.Data;
+import org.springblade.manager.entity.WbsTreePrivate;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.Optional;
 
 /**
  * @author yangyj
  * @Date 2022/12/31 16:34
- * @description TODO
+ * @description 当前工序或实验节点的上下文信息
  */
 @Data
 public class CurrentNode {
     /**流水号*/
     private Long pkId;
-    /**项目集id*/
-    private Long privateId;
-    /**wbs_tree的流水号 溯源*/
+    /**wtc的id,用来关联表*/
     private Long id;
-    /**父节点的树id,注意非流水号*/
+    /**合同段id*/
+    private Long contractId;
+    /**项目id*/
+    private Long projectId;
+    /**当前工序父节点的pkeyId*/
+    private Long parentPkeyId;
+    /**当前工序父节点的树id,注意非pkeyId*/
     private Long parentId;
-    /**用来构建树的id 父子*/
-    private Long relateId;
+    /**wbsInfoId,如果是私有引用,必须溯源公有*/
     private Long wbsId;
+    /**当前节点对应项目级的pkeyId*/
+    private Long wtpPkeyId;
+    /**wbs_tree的流水号 需要溯源*/
+    private Long wbsNodeId;
+
 
 }

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

@@ -3,6 +3,8 @@ 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.entity.WbsInfo;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.enums.ExecuteType;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.impl.TableElementConverter;
@@ -55,4 +57,9 @@ public interface IFormulaService extends BaseService<Formula> {
     List<KeyMapper> getKeyMapperList(List<Long> ids, String projectId, String nodeId, ExecuteType executeType);
 
     Map<String, Object> getElementInfoByCodes(String codes);
+
+    /**根据wbs_tree_contract 的pkeyId查询项目级对应节点*/
+     WbsTreePrivate wtpId(Long pkeyId);
+    /**根据wbs_tree_private的pkeyId获取公共树*/
+    WbsTreePrivate getOriginWtp(Long pkeyId);
 }

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

@@ -425,46 +425,43 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             e.printStackTrace();
         }
     }
-
+    /*当前工序节点上下文信息*/
     public CurrentNode createCurrentNode(WbsTreeContract wtc) {
         if (wtc != null) {
-            /*当前工序节点*/
-            CurrentNode currentNode = new CurrentNode();
-            currentNode.setPkId(wtc.getPKeyId());
-            currentNode.setParentId(wtc.getParentId());
-            currentNode.setWbsId(Long.parseLong(wtc.getWbsId()));
-            currentNode.setId(StringUtils.isNotEmpty(wtc.getOldId()) ? Long.valueOf(wtc.getOldId()) : wtc.getId());
-            currentNode.setRelateId(wtc.getId());
-            currentNode.setPrivateId(this.jdbcTemplate.queryForObject("select p_key_id from m_wbs_tree_private where id=" + currentNode.getId() + " and  project_id=" + wtc.getProjectId() + " and wbs_id=" + wtc.getWbsId() + " limit 1", Long.class));
-            return currentNode;
+            WbsTreePrivate wtp=this.formulaService.wtpId(wtc.getPKeyId());
+            WbsTreeContract parent = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getContractId,wtc.getContractId()).eq(WbsTreeContract::getId,wtc.getParentId()));
+            if(wtp!=null&&parent!=null) {
+                /*私有引用项目,需要溯源*/
+                WbsTreePrivate publicWtp = this.formulaService.getOriginWtp(wtp.getPKeyId());
+                CurrentNode currentNode = new CurrentNode();
+                currentNode.setPkId(wtc.getPKeyId());
+                currentNode.setId(wtc.getId());
+                currentNode.setContractId(Long.parseLong(wtc.getContractId()));
+                currentNode.setProjectId(Long.parseLong(wtc.getProjectId()));
+                currentNode.setParentPkeyId(parent.getPKeyId());
+                currentNode.setParentId(wtc.getParentId());
+                currentNode.setWbsId(Long.parseLong(publicWtp.getWbsId()));
+                currentNode.setWtpPkeyId(wtp.getPKeyId());
+                currentNode.setWbsNodeId(publicWtp.getId());
+                return currentNode;
+            }
         }
         return null;
     }
 
 
-    public <T extends BaseEntity> CurrentNode createCurrentNode(T entity) {
-        if (entity instanceof WbsTreeContract) {
-            WbsTreeContract wtc = (WbsTreeContract) entity;
-            /*当前工序节点*/
-            CurrentNode currentNode = new CurrentNode();
-            currentNode.setPkId(wtc.getPKeyId());
-            currentNode.setParentId(wtc.getParentId());
-            currentNode.setWbsId(Long.parseLong(wtc.getWbsId()));
-            currentNode.setId(StringUtils.isNotEmpty(wtc.getOldId()) ? Long.valueOf(wtc.getOldId()) : wtc.getId());
-            currentNode.setRelateId(wtc.getId());
-            currentNode.setPrivateId(this.jdbcTemplate.queryForObject("select p_key_id from m_wbs_tree_private where id=" + currentNode.getId() + " and  project_id=" + wtc.getProjectId() + " and wbs_id=" + wtc.getWbsId() + " limit 1", Long.class));
-            return currentNode;
-        } else if (entity instanceof WbsTreePrivate) {
-            WbsTreePrivate wtc = (WbsTreePrivate) entity;
-            /*当前工序节点*/
-            CurrentNode currentNode = new CurrentNode();
-            currentNode.setPkId(wtc.getPKeyId());
-            currentNode.setParentId(wtc.getParentId());
-            currentNode.setWbsId(Long.parseLong(wtc.getWbsId()));
-            currentNode.setId(wtc.getId()); //数据源
-            currentNode.setRelateId(wtc.getId());
-            currentNode.setPrivateId(wtc.getPKeyId());
-            return currentNode;
+    public CurrentNode  createCurrentNode( WbsTreePrivate wtp) {
+        if (wtp!=null) {
+                /*私有引用项目,需要溯源*/
+                WbsTreePrivate publicWtp = this.formulaService.getOriginWtp(wtp.getPKeyId());
+                CurrentNode currentNode = new CurrentNode();
+                currentNode.setPkId(wtp.getPKeyId());
+                currentNode.setId(wtp.getId());
+                currentNode.setProjectId(Long.parseLong(wtp.getProjectId()));
+                currentNode.setParentId(wtp.getParentId());
+                currentNode.setWbsId(Long.parseLong(publicWtp.getWbsId()));
+                currentNode.setWbsNodeId(publicWtp.getId());
+                return currentNode;
         }
         return null;
     }

+ 33 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -80,6 +80,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private final ITextdictInfoService textDictInfoService;
     private final IFormulaDataBlockService formulaDataBlockService;
     private final IExcelTabService excelTabService;
+    private final IWbsInfoService wbsInfoService;
 
     private   TableElementConverter tec;
     public final static String WP="WP";
@@ -169,9 +170,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             /*表格名称*/
             List<AppWbsTreeContractVO> tableList =wbsTreeContractService.searchNodeAllTable(one.getPkId().toString(), "1", tec.getContractId().toString(),tec.getProjectId().toString());
             tec.constantMap.put(TABLE_LIST,tableList);
-            /*通过判断元素名称来确定,加入汇总公式延后执行*/
-            /*tec.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));*/
+            /*监表质量附件,过滤掉隐藏表格*/
+            tec.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
+/*
             tec.constantMap.put("tableNames",tableList.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
+*/
         }
     }
 
@@ -486,11 +489,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public Map<String,Object> getWpMap(CurrentNode currentNode){
         Map<String,Object> result = new HashMap<>(100);
         List<WbsParam> total = new ArrayList<>();
-        List<WbsParam> wpsPublic = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getId()).eq(WbsParam::getType,1));
+        List<WbsParam> wpsPublic = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getWbsNodeId()).eq(WbsParam::getType,1));
         if(Func.isNotEmpty(wpsPublic)){
             total.addAll(wpsPublic);
         }
-        List<WbsParam> wpsPrivate = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getPrivateId()).eq(WbsParam::getType,1));
+        List<WbsParam> wpsPrivate = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,currentNode.getWtpPkeyId()).eq(WbsParam::getType,1));
         if(Func.isNotEmpty(wpsPrivate)){
             total.addAll(wpsPrivate);
         }
@@ -1240,20 +1243,43 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         return Collections.emptyList();
     }
 
+    @Override
+    public WbsTreePrivate getOriginWtp(Long pkeyId) {
+        WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId,pkeyId));
+        int i=10;
+        while (i>0) {
+            WbsTreePrivate tmp=  this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wtp.getWbsId()));
+            if (tmp == null) {
+                break;
+            }
+            wtp = tmp;
+            i--;
+        }
+       return wtp;
+    }
 
+    @Override
+    public WbsTreePrivate wtpId(Long pkeyId){
+       WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
+       while (wtc.getOldId()!=null){
+           wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getId,wtc.getOldId()).eq(WbsTreeContract::getContractId,wtc.getContractId()));
+       }
+       return this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getId,wtc.getOldId()).eq(WbsTreePrivate::getProjectId,wtc.getProjectId()));
+    }
     private List<KeyMapper> listForContract(List<Long> ids,String projectId,String nodeId){
         String pkIds=ids.stream().map(String::valueOf).collect(Collectors.joining(","));
         List<Map<String,Object>> listMap = listMap(ids,ExecuteType.INSPECTION);
-        Map<String,Object> wtpMap= this.jdbcTemplate.queryForMap("select b.id parentId,b.wbs_id wbsId from m_wbs_tree_contract  a join m_wbs_tree_private b on (a.id=b.id or a.old_id=b.id ) where a.p_key_id ="+nodeId+" and b.project_id="+projectId+" limit 1");
+        WbsTreePrivate origin =wtpId(Long.parseLong(nodeId));
+        //Map<String,Object> wtpMap= this.jdbcTemplate.queryForMap("select b.id parentId,b.wbs_id wbsId from  m_wbs_tree_private b where is_deleted=0 and id="+originId+" and project_id="+projectId);
         if(Func.isNotEmpty(listMap)){
             /*当前节点的某个元素存在多种作用域的公式,作用域范围越小优先级越高*/
             List<KeyMapper> list= listMap.stream().map(m->BeanUtil.toBean(m,KeyMapper.class)).collect(Collectors.toList());
-            String nodeIdStr= StringUtils.handleNull(wtpMap.get("parentId"));
+            String nodeIdStr= StringUtils.handleNull(origin.getId());
             if(Func.isBlank(nodeIdStr)){
                 /*暂时这么处理,严格上说要查找到项目级对应的节点*/
                 nodeIdStr="''";
             }
-            String wbsId =StringUtils.handleNull(wtpMap.get("wbsId"));
+            String wbsId =StringUtils.handleNull(origin.getWbsId());
             if(Func.isBlank(wbsId)){
                 /*暂时这么处理,严格上说要查找到项目级对应的节点*/
                 wbsId="''";