Pārlūkot izejas kodu

公式作用域

yangyj 2 gadi atpakaļ
vecāks
revīzija
618df1bd61

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

@@ -208,7 +208,7 @@ public class WbsTreeController extends BladeController {
     public R<List<WbsFormElementVO>> selectFormElements(@RequestParam("id") String id, Long nodeId, String search,Integer type) {
         List<WbsFormElementVO> wbsFormElements = null;
         if (StringUtils.isNotEmpty(id)) {
-            wbsFormElements = wbsTreeService.selectFormElements(id, nodeId,type);
+            wbsFormElements = wbsTreeService.selectFormElements(id,type);
             if (wbsFormElements.size() > 0) {
                 if (StringUtils.isNotEmpty(search)) {
                     wbsFormElements = wbsFormElements.stream().filter(e -> e.getEName().contains(search)).collect(Collectors.toList());

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

@@ -33,5 +33,5 @@ public interface IFormulaService extends BaseService<Formula> {
     void format();
 
     List<Formula> getFormulaList(List<KeyMapper> keyMapperList);
-    List<KeyMapper> getKeyMapperList(List<Long> ids,Long projectId);
+    List<KeyMapper> getKeyMapperList(List<Long> ids,String projectId);
 }

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

@@ -35,7 +35,7 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
     boolean removeTableById(String id);
 
-    List<WbsFormElementVO> selectFormElements(String id,Long nodeId,Integer type);
+    List<WbsFormElementVO> selectFormElements(String id,Integer type);
     List<WbsFormElementVO> selectFormElements4Formula(String id);
     // 项目级
     List<WbsFormElementVO> selectPrivateFormElements(String id);

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

@@ -338,7 +338,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             /*每次都是部分表单提交,保证跨节点跨表取数正常,其次是反向依赖的被动刷新*/
             List<AppWbsTreeContractVO> tableAll = wbsTreeContractService.searchNodeAllTable(nodeId.toString(), "1", tableInfoList.get(0).getContractId(), tableInfoList.get(0).getProjectId());
             StopWatch stopWatch = new StopWatch();
-            List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), null);
+            List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId());
             if (Func.isNotEmpty(keyMappers)) {
                 Map<String, Map<String, String>> coordinateMap = new HashMap<>(keyMappers.size() * 2);
                 keyMappers.forEach(e -> {

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

@@ -541,19 +541,22 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     @Override
-    public List<KeyMapper> getKeyMapperList(List<Long> ids,Long projectId) {
+    public List<KeyMapper> getKeyMapperList(List<Long> ids,String projectId) {
         /*表名,pkeyId,元素名,元素id 映射对象*/
+        String pkIds=ids.stream().map(String::valueOf).collect(Collectors.joining(","));
         List<Map<String,Object>> listMap = this.jdbcTemplate.queryForList(" select a.init_table_name as tableName,a.p_key_id as pkId ,c.e_key as field,c.e_name as eName,c.id  as fieldId   " +
                 "from m_wbs_tree_contract a " +
                 "inner join m_table_info b on a.init_table_name=b.tab_en_name " +
                 "INNER JOIN m_wbs_form_element c on b.id=c.f_id " +
-                "where a.p_key_id in("+ids.stream().map(String::valueOf).collect(Collectors.joining(","))+")  ORDER BY a.init_table_name");
+                "where a.p_key_id in("+pkIds+")  ORDER BY a.init_table_name");
+        List<Long> nodeIds= this.jdbcTemplate.queryForList("select b.parent_id from m_wbs_tree_contract  a join m_wbs_tree_private b on a.is_type_private_pid=b.p_key_id where a.p_key_id in("+pkIds+")",Long.class);
         if(Func.isNotEmpty(listMap)){
             /*当前节点的某个元素存在多种作用域的公式,作用域范围越小优先级越高*/
             List<KeyMapper> list= listMap.stream().map(m->BeanUtil.toBean(m,KeyMapper.class)).collect(Collectors.toList());
             Set<KeyMapper> set = new HashSet<>(list.size()*2);
+            String nodeIdStr=nodeIds.stream().map(Object::toString).collect(Collectors.joining(StringPool.COMMA));
             StringBuilder sb = new StringBuilder("select element_id elementId,formula_id formulaId,scope from m_element_formula_mapping where element_id in("+list.stream().map(KeyMapper::getFieldId).map(Func::toStr).collect(Collectors.joining(","))+") and is_deleted=0 ");
-            sb.append(" and ( scope<2 or (scope =10 and node_id) ");
+            sb.append(" and ( scope<2 or (scope=2 and node_id in(").append(nodeIdStr).append(")) or (scope =10 and project_id = ").append(projectId).append(") or (scope=20 and project_id =").append(projectId).append(" and node_id in (").append(nodeIdStr).append(")))");
             List<Map<String,Object>> efMap= this.jdbcTemplate.queryForList(sb.toString());
             if(Func.isNotEmpty(efMap)){
                 Map<Long,List<Map<String,Object>>> efGroup= efMap.stream().collect(Collectors.groupingBy(e->Func.toLong(e.get("elementId"))));

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -399,7 +399,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Override
-    public List<WbsFormElementVO> selectFormElements(String id, Long nodeId,Integer type) {
+    public List<WbsFormElementVO> selectFormElements(String id,Integer type) {
         List<WbsFormElementVO> wbsFormElements = wbsTreeMapper.selectFormElements(id);
         ;
 //        if (Func.isEmpty(wbsFormElements)) {
@@ -426,7 +426,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             if(com.mixsmart.utils.StringUtils.isEquals(type,1)){
                 sql="select c.element_id from m_wbs_tree a INNER JOIN m_wbs_tree b on a.parent_id=b.id INNER JOIN m_element_formula_mapping c on b.id=c.node_id where  a.id=" + id + " and c.scope="+scopeB+" and c.element_id in(" + elementIds + ")";
             }else{
-                sql="select c.element_id from m_wbs_tree_private a INNER JOIN m_wbs_tree b on a.parent_id=b.id INNER JOIN m_element_formula_mapping c on b.id=c.node_id where  a.p_key_id=" + id + " and c.scope="+scopeB+" and c.element_id in(" + elementIds + ")";
+                WbsTreePrivate treePrivate= this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId,id));
+                sql="select c.element_id from m_wbs_tree_private a INNER JOIN m_wbs_tree b on a.parent_id=b.id INNER JOIN m_element_formula_mapping c on b.id=c.node_id where  a.p_key_id=" + id + " and c.scope="+scopeB+" and c.element_id in(" + elementIds + ")  and c.project_id="+treePrivate.getProjectId();
             }
             List<Long> longs2 = this.jdbcTemplate.queryForList(sql, Long.class);
             wbsFormElements.forEach(e -> {