Browse Source

fix: tree 删除groupId

370774330@qq.com 5 years ago
parent
commit
07227e44f1

+ 3 - 26
web/src/main/java/seecoder/devcloud/web/dao/tree/TreeNodeMapper.java

@@ -17,17 +17,6 @@ public interface TreeNodeMapper {
      * @return
      */
     @Select({"select * from tree_node"})
-    @Results(id="treeNodeMap",value = {
-            @Result(column = "is_leaf", property = "leaf"),
-            @Result(column = "time_to_take", property = "timeToTake"),
-            @Result(column = "start_time", property = "startTime"),
-            @Result(column = "end_time", property = "endTime"),
-            @Result(column = "group_id", property = "groupId"),
-            @Result(column = "project_id", property = "projectId"),
-            @Result(column = "parent_id", property = "parentId"),
-            @Result(column = "state",property = "state"),
-            @Result(column = "type",property = "type")
-    })
     List<TreeNodePO> listAllTreeNodes();
 
     /**
@@ -36,25 +25,14 @@ public interface TreeNodeMapper {
      * @return
      */
     @Select({"select * from tree_node where id = #{id}"})
-    @ResultMap(value = "treeNodeMap")
     TreeNodePO getTreeNodeById(@Param("id") int id);
 
-    /**
-     * 根据GroupId获取TreeNode
-     * @param groupId
-     * @return
-     */
-    @Select({"select * from tree_node where group_id = #{groupId}"})
-    @ResultMap(value = "treeNodeMap")
-    List<TreeNodePO> listTreeNodesByGroupId(@Param("groupId") int groupId);
-
     /**
      * 根据projectId获取TreeNode
      * @param projectId
      * @return
      */
     @Select({"select * from tree_node where project_id = #{projectId}"})
-    @ResultMap(value = "treeNodeMap")
     List<TreeNodePO> listTreeNodesByProjectId(@Param("projectId") int projectId);
 
     /**
@@ -62,10 +40,9 @@ public interface TreeNodeMapper {
      * @param TreeNodePO
      * @return treeNode的自增主键
      */
-    @Insert({"insert into tree_node(title, description, type, priority, state, time_to_take, start_time, end_time, is_leaf, group_id,project_id,deep,parent_id) " +
-            "VALUES (#{title}, #{description}, #{type}, #{priority}, #{state}, #{timeToTake}, #{startTime}, #{endTime}, #{leaf}, #{groupId},#{projectId},#{deep},#{parentId})"})
-    @Options(useGeneratedKeys = true, keyProperty = "id")
-    int insertTreeNode(TreeNodePO TreeNodePO);
+    @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
+    @Options(useGeneratedKeys = true, keyProperty = "param1.id", keyColumn = "id")
+    int insertTreeNode(TreeNodePO TreeNodePO, String... ignoredCols);
 
     /**
      * 更新TreeNode

+ 9 - 9
web/src/main/java/seecoder/devcloud/web/model/po/tree/TreeNodePO.java

@@ -2,23 +2,23 @@ package seecoder.devcloud.web.model.po.tree;
 
 
 
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
+import lombok.*;
 import seecoder.devcloud.web.model.enums.NodeStateEnum;
 import seecoder.devcloud.web.model.enums.NodeTypeEnum;
 import seecoder.devcloud.web.model.enums.PriorityEnum;
 
+/**
+ * 需求节点
+ */
+@Getter
+@Setter
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 @EqualsAndHashCode
-/**
- * 需求节点
- */
+@Builder
 public class TreeNodePO {
-    private int id;
+    private Integer id;
     private String title;
     private String description;
     private NodeTypeEnum type;
@@ -27,7 +27,7 @@ public class TreeNodePO {
     /**
      * 预计完成时间花销
      */
-    private long timeToTake;
+    private Long timeToTake;
     private String startTime;
     private String endTime;
     private Boolean leaf;

+ 7 - 7
web/src/main/java/seecoder/devcloud/web/model/vo/tree/TreeNodeVO.java

@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
 public class TreeNodeVO {
 
     @ApiModelProperty("树节点id")
-    private int id;
+    private Integer id;
     @ApiModelProperty("节点名称")
     private String title;
     @ApiModelProperty("节点描述")
@@ -37,23 +37,23 @@ public class TreeNodeVO {
     @ApiModelProperty("节点状态类型,有效值为 “已创建”, “进行中”, “已结束”")
     private NodeStateEnum state;
     @ApiModelProperty("预计完成时间")
-    private long timeToTake;
+    private Long timeToTake;
     @ApiModelProperty("起始时间")
     private String startTime;
     @ApiModelProperty("结束时间")
     private String endTime;
     @ApiModelProperty("是否为叶节点")
-    private boolean leaf;
+    private Boolean leaf;
     @ApiModelProperty("所属项目id")
-    private int projectId;
+    private Integer projectId;
     @ApiModelProperty("父节点id")
-    private int parentId;
+    private Integer parentId;
     @ApiModelProperty("节点深度")
-    private int deep;
+    private Integer deep;
     @ApiModelProperty("关联的Commit信息")
     List<CommitVO> commits;
     @ApiModelProperty("负责人id")
-    private int processorId;
+    private Integer processorId;
     @ApiModelProperty("负责人用户名")
     private String processorName;
 

+ 24 - 1
web/src/main/java/seecoder/devcloud/web/service/impl/tree/TreeNodeServiceImpl.java

@@ -4,6 +4,7 @@ package seecoder.devcloud.web.service.impl.tree;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import seecoder.devcloud.common.exceptions.ServiceException;
 import seecoder.devcloud.common.util.DateUtil;
 import seecoder.devcloud.core.commit.CommitState;
@@ -41,14 +42,33 @@ public class TreeNodeServiceImpl implements TreeNodeService {
     }
 
     @Override
+    @Transactional
     public List<TreeNodeVO> listTreeNodesByProjectId(int projectId) {
+        SimpleDateFormat format = DateUtil.getSimpleDateFormat();
         List<TreeNodePO> nodes = treeNodeMapper.listTreeNodesByProjectId(projectId);
+        if (nodes.size() == 0){
+            TreeNodePO defaultRoot = TreeNodePO.builder()
+                    .deep(1)
+                    .leaf(false)
+                    .startTime(format.format(new Date()))
+                    .projectId(projectId)
+                    .state(NodeStateEnum.CREATED)
+                    .title("default root")
+                    .description("根节点")
+                    .type(NodeTypeEnum.REQUIREMENT)
+                    .timeToTake(0L)
+            .build();
+            treeNodeMapper.insertTreeNode(defaultRoot);
+            nodes.add(defaultRoot);
+        }
         return getTreeNodeVOS(nodes);
     }
 
     @Override
+    @Transactional
     @TreeLogging(OperationEnum.START)
     public void insertTreeNode(TreeNodeCreateVO treeNodeCreateVO) throws ServiceException {
+
         TreeNodePO treeNodePO = new TreeNodePO();
         BeanUtils.copyProperties(treeNodeCreateVO,treeNodePO);
         int res = treeNodeMapper.insertTreeNode(treeNodePO);
@@ -59,6 +79,7 @@ public class TreeNodeServiceImpl implements TreeNodeService {
     }
 
     @Override
+    @Transactional
     @TreeLogging(OperationEnum.UPDATE)
     public void updateTreeNode(TreeNodeUpdateBasicVO treeNodeUpdateBasicVO) {
         TreeNodePO treeNodePO = new TreeNodePO();
@@ -68,6 +89,7 @@ public class TreeNodeServiceImpl implements TreeNodeService {
     }
 
     @Override
+    @Transactional
     public void deleteTreeNode(int nodeId) {
 
         treeNodeMapper.deleteTreeNode(nodeId);
@@ -79,6 +101,7 @@ public class TreeNodeServiceImpl implements TreeNodeService {
      * 根据父节点id插入一个新的子节点
      */
     @Override
+    @Transactional
     @TreeLogging(OperationEnum.START)
     public Integer insertTreeNodeByFatherNode(int fatherId) throws ServiceException {
         TreeNodePO treeNodePO = getDefaultTreeNodePO();
@@ -112,7 +135,7 @@ public class TreeNodeServiceImpl implements TreeNodeService {
         treeNodePO.setType(NodeTypeEnum.TASK);
         treeNodePO.setPriority(PriorityEnum.MIDDLE);
         treeNodePO.setState(NodeStateEnum.CREATED);
-        treeNodePO.setTimeToTake(10);
+        treeNodePO.setTimeToTake(10L);
         treeNodePO.setStartTime(format.format(new Date()));
         treeNodePO.setEndTime(format.format(new Date()));
         treeNodePO.setLeaf(true);

+ 20 - 8
web/src/test/java/seecoder/devcloud/web/dao/tree/TreeNodeMapperTest.java

@@ -6,8 +6,13 @@ import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
 import org.springframework.test.context.junit4.SpringRunner;
+import seecoder.devcloud.common.util.DateUtil;
+import seecoder.devcloud.web.model.enums.NodeStateEnum;
+import seecoder.devcloud.web.model.enums.NodeTypeEnum;
 import seecoder.devcloud.web.model.po.tree.TreeNodePO;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 @RunWith(SpringRunner.class)
@@ -36,7 +41,7 @@ public class TreeNodeMapperTest {
     
     @Test
     public void listTreeNodesByGroupIdTest(){
-        List<TreeNodePO> treeNodes = treeNodeMapper.listTreeNodesByGroupId(1);
+       // List<TreeNodePO> treeNodes = treeNodeMapper.listTreeNodesByGroupId(1);
         //TreeNodePO node1 = new TreeNodePO(1,"test1","test1", NodeTypeEnum.REQUIREMENT,0, NodeStateEnum.PROCESSING,10,"2021-01-01 00:00:00","2021-02-13 00:00:00",true,1,1,1,1);
 //        for(TreeNodePO TreeNodePO:treeNodes){
 //            if (TreeNodePO.getId()==1){
@@ -47,13 +52,20 @@ public class TreeNodeMapperTest {
     
     @Test
     public void insertTreeNodeTest(){
-//        TreeNodePO node1 = new TreeNodePO(0,"testInsert","testInsert", NodeTypeEnum.REQUIREMENT,0, NodeStateEnum.PROCESSING,10,"2021-01-01 00:00:00","2021-02-13 00:00:00",true,1,1,1,1);
-//        int res = treeNodeMapper.insertTreeNode(node1);
-//        TreeNodePO node = treeNodeMapper.getTreeNodeById(node1.getId());
-//        System.out.println(node);
-//        System.out.println(node1);
-//        assert res==1;
-//        assert node.equals(node1);
+        SimpleDateFormat format = DateUtil.getSimpleDateFormat();
+        TreeNodePO defaultRoot = TreeNodePO.builder()
+                .deep(1)
+                .leaf(false)
+                .startTime(format.format(new Date()))
+                .projectId(18)
+                .state(NodeStateEnum.CREATED)
+                .title("default root")
+                .description("根节点")
+                .type(NodeTypeEnum.REQUIREMENT)
+                .timeToTake(0L)
+                .parentId(-1)
+                .build();
+        treeNodeMapper.insertTreeNode(defaultRoot);
     }
     
     @Test