Bläddra i källkod

wbs树相结构相关修改

liuyc 3 år sedan
förälder
incheckning
49026c1e12

+ 226 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeVO2.java

@@ -0,0 +1,226 @@
+package org.springblade.manager.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+import org.springblade.core.tool.node.TreeNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * wbsTree树形结构VO2
+ *
+ * @author liuyc
+ * @since 2022-07-13
+ */
+@Data
+public class WbsTreeVO2 implements INode<WbsTreeVO2> {
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<WbsTreeVO2> children;
+
+    private String title;
+    @JsonSerialize(
+            using = ToStringSerializer.class
+    )
+    private Long key;
+    @JsonSerialize(
+            using = ToStringSerializer.class
+    )
+    private Long value;
+
+    private Integer type;
+
+    private Integer wbsType;
+
+    private Integer deptCategory;
+
+    private String tenantId;
+
+    private Integer isExistForm;
+
+    private String ancestors;
+
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    public WbsTreeVO2() {
+    }
+
+    @Override
+    public List<WbsTreeVO2> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
+    @Override
+    public Boolean getHasChildren() {
+        return hasChildren;
+    }
+
+    public String getAncestors() {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors) {
+        this.ancestors = ancestors;
+    }
+
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public Integer getIsExistForm() {
+        return isExistForm;
+    }
+
+    public void setIsExistForm(Integer isExistForm) {
+        this.isExistForm = isExistForm;
+    }
+
+    public Integer getDeptCategory() {
+        return deptCategory;
+    }
+
+    public void setDeptCategory(Integer deptCategory) {
+        this.deptCategory = deptCategory;
+    }
+
+    public Integer getWbsType() {
+        return wbsType;
+    }
+
+    public void setWbsType(Integer wbsType) {
+        this.wbsType = wbsType;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public String getTitle() {
+        return this.title;
+    }
+
+    public Long getKey() {
+        return this.key;
+    }
+
+    public Long getValue() {
+        return this.value;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public void setTitle(final String title) {
+        this.title = title;
+    }
+
+    public void setKey(final Long key) {
+        this.key = key;
+    }
+
+    public void setValue(final Long value) {
+        this.value = value;
+    }
+
+
+    public String toString() {
+        return "TreeNode(deptCategory=" + this.getDeptCategory()
+                + ",tenantId" + this.getTenantId()
+                + ",ancestors" + this.getAncestors()
+                + ",isExistForm" + this.getIsExistForm()
+                + ",wbsType=" + this.getWbsType()
+                + ", type=" + this.getType()
+                + ", title=" + this.getTitle()
+                + ", key=" + this.getKey()
+                + ", value=" + this.getValue()
+                + ")";
+    }
+
+    public boolean equals(final Object o) {
+        if (o == this) {
+            return true;
+        } else if (!(o instanceof TreeNode)) {
+            return false;
+        } else {
+            TreeNodeVO other = (TreeNodeVO) o;
+            if (!other.canEqual(this)) {
+                return false;
+            } else {
+                label47:
+                {
+                    Object this$key = this.getKey();
+                    Object other$key = other.getKey();
+                    if (this$key == null) {
+                        if (other$key == null) {
+                            break label47;
+                        }
+                    } else if (this$key.equals(other$key)) {
+                        break label47;
+                    }
+
+                    return false;
+                }
+
+                Object this$value = this.getValue();
+                Object other$value = other.getValue();
+                if (this$value == null) {
+                    if (other$value != null) {
+                        return false;
+                    }
+                } else if (!this$value.equals(other$value)) {
+                    return false;
+                }
+
+                Object this$title = this.getTitle();
+                Object other$title = other.getTitle();
+                if (this$title == null) {
+                    if (other$title != null) {
+                        return false;
+                    }
+                } else if (!this$title.equals(other$title)) {
+                    return false;
+                }
+
+                return true;
+            }
+        }
+    }
+
+    protected boolean canEqual(final Object other) {
+        return other instanceof TreeNode;
+    }
+
+    public int hashCode() {
+        boolean PRIME = true;
+        int result = 1;
+        Object $key = this.getKey();
+        result = result * 59 + ($key == null ? 43 : $key.hashCode());
+        Object $value = this.getValue();
+        result = result * 59 + ($value == null ? 43 : $value.hashCode());
+        Object $title = this.getTitle();
+        result = result * 59 + ($title == null ? 43 : $title.hashCode());
+        return result;
+    }
+
+}

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

@@ -246,7 +246,6 @@ public class ProjectInfoController extends BladeController {
             default:
                 return R.fail("关联wbs树失败");
         }
-
     }
 
     /**
@@ -255,8 +254,8 @@ public class ProjectInfoController extends BladeController {
     @GetMapping("/findProjectAndContractList")
     @ApiOperationSupport(order = 12)
     @ApiOperation(value = "根据用户id查询项目合同岗位列表信息", notes = "传入用户id")
-    public R<List<Map>> findProjectAndContractList(Long userId) {
-        List<Map> result = wbsTreeService.findProjectAndContractList(userId);
+    public R<List<SaveUserInfoByProjectVO2>> findProjectAndContractList(Long userId) {
+        List<SaveUserInfoByProjectVO2> result = wbsTreeService.findProjectAndContractList(userId);
         return R.data(result);
     }
 }

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

@@ -40,6 +40,7 @@ import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.manager.vo.WbsFormElementVO;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreeVO;
+import org.springblade.manager.vo.WbsTreeVO2;
 import org.springblade.system.cache.DictCache;
 import org.springblade.system.enums.DictEnum;
 import org.springframework.transaction.annotation.Transactional;
@@ -118,8 +119,8 @@ public class WbsTreeController extends BladeController {
             @ApiImplicitParam(name = "wbsId", value = "wbsId", required = true),
             @ApiImplicitParam(name = "type", value = "节点类型type '1'节点or'2'表单"),
     })
-    public R<List<WbsTreeVO>> tree(String wbsId, String type, String tenantId, BladeUser bladeUser) {
-        List<WbsTreeVO> tree = wbsTreeService.tree(wbsId, Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), type);
+    public R<List<WbsTreeVO2>> tree(String wbsId, String type, String tenantId, BladeUser bladeUser) {
+        List<WbsTreeVO2> tree = wbsTreeService.tree(wbsId, Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), type);
         if (tree != null && tree.size() > 0) {
             return R.data(tree);
         }

+ 1 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -39,20 +39,12 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
 
     /**
      * 自定义分页
-     *
-     * @param page
-     * @param wbsTree
-     * @return
      */
     List<WbsTreeVO> selectWbsTreePage(IPage page, WbsTreeVO wbsTree);
 
 
     /**
      * 懒加载获取树形节点
-     *
-     * @param tenantId
-     * @param parentId
-     * @return
      */
     List<WbsTreeVO> lazyTree(@Param("wbsId") String wbsId,
                              @Param("tenantId") String tenantId,
@@ -60,12 +52,10 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
 
     /**
      * 获取树形节点
-     *
-     * @param tenantId
-     * @return
      */
     List<WbsTreeVO> tree(@Param("wbsId") String wbsId, @Param("tenantId") String tenantId, @Param("type") String type);
 
+    List<WbsTreeVO2> tree2(@Param("wbsId") String wbsId, @Param("tenantId") String tenantId, @Param("type") String type);
 
     /**
      * 表单查询(根据节点ID查询当前表单)

+ 44 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -48,6 +48,21 @@
         <result column="ancestors" property="ancestors"/>
     </resultMap>
 
+    <resultMap id="treeNodeResultMap2" type="org.springblade.manager.vo.WbsTreeVO2">
+        <id column="id" property="id"/>
+        <result column="parentId" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+        <result column="has_children" property="hasChildren"/>
+        <result column="type" property="type"/>
+        <result column="deptCategory" property="deptCategory"/>
+        <result column="wbsType" property="wbsType"/>
+        <result column="isExistForm" property="isExistForm"/>
+        <result column="ancestors" property="ancestors"/>
+        <result column="tenantId" property="tenantId"/>
+    </resultMap>
+
     <resultMap id="selectByNodeTableMap" type="org.springblade.manager.vo.WbsNodeTableVO">
         <id column="id" property="id"/>
         <result column="tableName" property="tableName"/>
@@ -225,6 +240,35 @@
         ORDER BY sort
     </select>
 
+    <select id="tree2" resultMap="treeNodeResultMap2">
+        SELECT d.id,
+        d.tenant_id AS "tenantId",
+        d.parent_id AS "parentId",
+        d.dept_name AS title,
+        d.type AS "type",
+        d.id AS "value",
+        d.id AS "key",
+        d.dept_category AS "deptCategory",
+        d.is_exist_form AS "isExistForm",
+        (SELECT wbs_type FROM m_wbs_info WHERE id = #{wbsId}) AS "wbsType",
+        (SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree c WHERE c.parent_id = d.id AND c.is_deleted =
+        0) AS "has_children"
+        FROM m_wbs_tree d
+        WHERE
+        is_deleted = 0
+        AND status = 1
+        <if test="wbsId!=null and wbsId!=''">
+            AND wbs_id = #{wbsId}
+        </if>
+        <if test="tenantId!=null and tenantId!=''">
+            AND tenant_id = #{tenantId}
+        </if>
+        <if test="type!=null and type!=''">
+            AND `type` = #{type}
+        </if>
+        ORDER BY sort
+    </select>
+
 
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT

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

@@ -63,7 +63,7 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
      * @param tenantId
      * @return
      */
-    List<WbsTreeVO> tree(String wbsId, String tenantId, String type);
+    List<WbsTreeVO2> tree(String wbsId, String tenantId, String type);
 
     /**
      * 提交
@@ -104,7 +104,7 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
     List<WbsTree> findByWbsTreeNode(String ids);
 
-    List<Map> findProjectAndContractList(Long userId);
+    List<SaveUserInfoByProjectVO2> findProjectAndContractList(Long userId);
 
     List<WbsTreeDTO2> findWbsTreeSameLevel(String parentId);
 

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

@@ -205,6 +205,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
             wbsFormElement.setEKey("key_1");
         }
         String newName = wbsFormElement.getEKey();
+
         //同步
         StringBuilder sbr1 = new StringBuilder();
         String fieldType = judgeDataType(wbsFormElement.getEType());

+ 57 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -93,8 +93,37 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Override
-    public List<WbsTreeVO> tree(String wbsId, String tenantId, String type) {
-        return ForestNodeMerger.merge(baseMapper.tree(wbsId, tenantId, type));
+    public List<WbsTreeVO2> tree(String wbsId, String tenantId, String type) {
+
+        //方法1-数据量过大时响应格式错误
+        /*return ForestNodeMerger.merge(baseMapper.tree(wbsId, tenantId, type));*/
+
+        //方法2
+        List<WbsTreeVO2> wbsTreeVO2s = baseMapper.tree2(wbsId, tenantId, type);
+        if (wbsTreeVO2s != null && wbsTreeVO2s.size() > 0) {
+            return buildWbsTreeByStream(wbsTreeVO2s);
+        }
+        return wbsTreeVO2s;
+    }
+
+    private List<WbsTreeVO2> buildWbsTreeByStream(List<WbsTreeVO2> wbsTreeVO2s) {
+        //构建数据,获取根节点
+        List<WbsTreeVO2> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
+        //根节点分组
+        Map<Long, List<WbsTreeVO2>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreeVO2::getParentId));
+        this.recursionFnTree(list, map);
+        return list;
+    }
+
+    private void recursionFnTree(List<WbsTreeVO2> list, Map<Long, List<WbsTreeVO2>> map) {
+        //递归
+        for (WbsTreeVO2 wbsTreeVO2 : list) {
+            List<WbsTreeVO2> childrenList = map.get(wbsTreeVO2.getId());
+            wbsTreeVO2.setChildren(childrenList);
+            if (childrenList != null && childrenList.size() > 0) {
+                recursionFnTree(childrenList, map);
+            }
+        }
     }
 
     @Override
@@ -390,9 +419,30 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     @Override
     public List<WbsFormElementVO> selectFormElements(String id) {
         List<WbsFormElementVO> wbsFormElements = wbsTreeMapper.selectFormElements(id);
+        wbsFormElements.stream().forEach(elements -> {
+            String eAllowDeviation = elements.getEAllowDeviation();
+            //转义
+            String escapeChar = getEscapeChar(eAllowDeviation);
+            if (escapeChar != null) {
+                elements.setEAllowDeviation(escapeChar);
+            }
+        });
         return wbsFormElements;
     }
 
+    private static String getEscapeChar(String str) {
+        if (StringUtils.isBlank(str)) {
+            return str;
+        }
+        if (str.contains("&gt;")) {
+            return str.replace("&gt;", ">");
+        }
+        if (str.contains("&lt;")) {
+            return str.replace("&lt;", "<");
+        }
+        return null;
+    }
+
     private String selectTableIdByTableName(String id) {
         QueryWrapper<WbsTree> queryWrapper = new QueryWrapper<>();
         queryWrapper.in("id", id);
@@ -542,8 +592,10 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Override
-    public List<Map> findProjectAndContractList(Long userId) {
+    public List<SaveUserInfoByProjectVO2> findProjectAndContractList(Long userId) {
         List<SaveUserInfoByProjectVO2> list = baseMapper.selectListByUserId(userId);
+
+        //TODO 用户项目合同段角色返回Map
         Map<String, List<SaveUserInfoByProjectVO2>> collect = list.stream().collect(Collectors.groupingBy(SaveUserInfoByProjectVO2::getProjectName));
         List<Map> collect1 = collect.entrySet().stream().map(entity -> {
             Map resultMap = new HashMap();
@@ -551,7 +603,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             resultMap.put("dataInfo", entity.getValue());
             return resultMap;
         }).collect(Collectors.toList());
-        return collect1;
+
+        return list;
     }
 
     @Override