Browse Source

Merge branch 'xzh' into integration

370774330@qq.com 5 năm trước cách đây
mục cha
commit
9c28be7f0f

+ 4 - 4
web/pom.xml

@@ -80,10 +80,10 @@
             <artifactId>mybatis-spring-boot-starter-test</artifactId>
             <version>2.1.4</version>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-security</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-security</artifactId>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-test</artifactId>

+ 32 - 8
web/src/main/java/seecoder/devcloud/web/controller/tree/TreeNodesController.java

@@ -1,24 +1,31 @@
 package seecoder.devcloud.web.controller.tree;
 
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import seecoder.devcloud.web.model.po.TreeNodePO;
 import seecoder.devcloud.web.model.vo.Response;
+import seecoder.devcloud.web.model.vo.TreeNodeVO;
 import seecoder.devcloud.web.service.tree.TreeNodeService;
 
+
+
 import java.util.List;
 
-@RestController
-@RequestMapping("/tree")
 /**
- * @Author chenyz
+ * @Author cyz,xzh
  * @Description 需求树相关操作
  */
+@Api("需求相关API")
+@RestController
+@RequestMapping("/tree")
 public class TreeNodesController {
     @Autowired
     private TreeNodeService treeNodeService;
     //注意 这里混用po和vo了
+    @ApiOperation("获取所有nodes")
     @GetMapping("/all")
     public List<TreeNodePO> getAllNodes(){
         return treeNodeService.getAllNodes();
@@ -29,16 +36,33 @@ public class TreeNodesController {
      * @param projectId
      * @return
      */
+    @ApiOperation("获取project_id对应的所有nodes")
     @GetMapping("/{projectId}")
     public Response listTreeNodesByProjectId(@PathVariable("projectId") int projectId){
-        // TODO
-        return null;
+        return treeNodeService.listTreeNodesByProjectId(projectId);
     }
 
+    @ApiOperation("插入节点")
+    @PostMapping("/node")
+    public Response insertTreeNode(TreeNodeVO treeNodeVO){
+        return treeNodeService.insertTreeNode(treeNodeVO);
+    }
 
-    @PostMapping("/addNode")
-    public Response insertTreeNode(){
-        return null;
+    @ApiOperation("根据nodeId删除节点")
+    @DeleteMapping("/node/{nodeId}")
+    public Response deleteTreeNode(@PathVariable("nodeId") int nodeId) {
+        return Response.buildSuccess(treeNodeService.deleteTreeNode(nodeId));
+    }
+    @ApiOperation("根据父节点fatherId创建一个子节点并返回")
+    @PostMapping("/subNode/{fatherId}")
+    public Response insertTreeNodeByFatherNode(@PathVariable("fatherId") int fatherId){
+        Response res = treeNodeService.insertTreeNodeByFatherNode(fatherId);
+        return res;
     }
 
+    @ApiOperation("修改节点属性")
+    @PutMapping("/node")
+    public Response updateTreeNode(@RequestBody TreeNodeVO treeNodeVO){
+        return treeNodeService.updateTreeNode(treeNodeVO);
+    }
 }

+ 7 - 0
web/src/main/java/seecoder/devcloud/web/dao/tree/TreeNodeMapper.java

@@ -75,4 +75,11 @@ public interface TreeNodeMapper {
     @UpdateProvider(type = TreeNodeProvider.class,method = "updateTreeNode")
     int updateTreeNode(TreeNodePO TreeNodePO);
 
+    @Delete("delete from tree_nodes where id = #{nodeId}")
+    int deleteTreeNode(@Param("nodeId") int nodeId);
+    @Update("update tree_nodes set ")
+    int updateTreeNodeById(@Param("nodeId") int nodeId);
+
+//    @Delete("delete from group_member where group_id = #{groupId} and user_id = #{userId}")
+//    int delete(@Param("groupId") int groupId,@Param("userId")  int userId);
 }

+ 3 - 2
web/src/main/java/seecoder/devcloud/web/model/enums/NodeStateEnum.java

@@ -1,8 +1,9 @@
 package seecoder.devcloud.web.model.enums;
 
 public enum NodeStateEnum {
-    PROCESSING("0:进行中"),
-    FINISHED("1:已结束");
+    CREATED("0:已创建"),
+    PROCESSING("1:进行中"),
+    FINISHED("2:已结束");
 
     private String value;
 

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

@@ -15,12 +15,12 @@ import seecoder.devcloud.web.model.enums.NodeTypeEnum;
 @EqualsAndHashCode
 public class TreeNodePO {
     private int id;
-    private String title;
-    private String description;
-    private NodeTypeEnum type;
-    private int priority;
-    private NodeStateEnum state;
-    private int timeToTake;
+    private String title = "title";
+    private String description = "description";
+    private NodeTypeEnum type = NodeTypeEnum.TASK;
+    private int priority = 3;
+    private NodeStateEnum state = NodeStateEnum.PROCESSING;
+    private int timeToTake = 10;
     private String startTime;
     private String endTime;
     private boolean leaf;

+ 63 - 4
web/src/main/java/seecoder/devcloud/web/service/impl/tree/TreeNodeServiceImpl.java

@@ -5,12 +5,21 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import seecoder.devcloud.web.aop.TreeLogging;
+
+import seecoder.devcloud.web.model.enums.NodeStateEnum;
+import seecoder.devcloud.web.model.enums.NodeTypeEnum;
 import seecoder.devcloud.web.model.enums.OperationEnum;
 import seecoder.devcloud.web.model.po.TreeNodePO;
 import seecoder.devcloud.web.service.tree.TreeNodeService;
 import seecoder.devcloud.web.model.vo.Response;
 import seecoder.devcloud.web.model.vo.TreeNodeVO;
 import seecoder.devcloud.web.dao.tree.TreeNodeMapper;
+import seecoder.devcloud.web.utils.TimeUtils;
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 import java.util.List;
 
 @Service
@@ -24,8 +33,8 @@ public class TreeNodeServiceImpl implements TreeNodeService {
 
     @Override
     public Response listTreeNodesByProjectId(int projectId) {
-        // TODO:safety check
-        return Response.buildSuccess(treeNodeMapper.listTreeNodesByProjectId(projectId));
+        List<TreeNodePO> result = treeNodeMapper.listTreeNodesByProjectId(projectId);
+        return Response.buildSuccess(result);
     }
 
     @Override
@@ -35,6 +44,9 @@ public class TreeNodeServiceImpl implements TreeNodeService {
         BeanUtils.copyProperties(treeNodeVO,treeNodePO);
         int res = treeNodeMapper.insertTreeNode(treeNodePO);
         // TODO:safety check
+        if (res <= 0) {
+            return Response.buildFailure(503,"Insert failed!");
+        }
         return Response.buildSuccess();
     }
 
@@ -49,8 +61,55 @@ public class TreeNodeServiceImpl implements TreeNodeService {
     }
 
     @Override
-    public Response deleteTreeNode(TreeNodeVO treeNodeVO) {
-        return null;
+    public Response deleteTreeNode(int nodeId) {
+        treeNodeMapper.deleteTreeNode(nodeId);
+        // TODO:safety check
+        return Response.buildSuccess();
+    }
+
+    /**
+     * 根据父节点id插入一个新的子节点
+     * @param fatherId
+     * @return
+     */
+    @Override
+    @TreeLogging(OperationEnum.START)
+    public Response insertTreeNodeByFatherNode(int fatherId) {
+        TreeNodePO treeNodePO = getDefaultTreeNodePO();
+        treeNodePO.setParentId(fatherId);
+        int res = treeNodeMapper.insertTreeNode(treeNodePO);
+        // TODO:safety check
+        if (res <= 0) {
+            return Response.buildFailure(503,"Insert failed!");
+        }
+        return Response.buildSuccess(treeNodePO.getId());
+    }
+
+
+
+    /**
+     * 创建一个default的节点
+     * @param
+     * @return
+     */
+    private TreeNodePO getDefaultTreeNodePO() {
+        SimpleDateFormat format = TimeUtils.getSimpleDateFormat();
+
+        TreeNodePO treeNodePO = new TreeNodePO();
+        treeNodePO.setTitle("title");
+        treeNodePO.setDescription("description");
+        treeNodePO.setType(NodeTypeEnum.TASK);
+        treeNodePO.setPriority(3);
+        treeNodePO.setState(NodeStateEnum.CREATED);
+        treeNodePO.setTimeToTake(10);
+        treeNodePO.setStartTime(format.format(new Date()));
+        treeNodePO.setEndTime(format.format(new Date()));
+        treeNodePO.setLeaf(true);
+        treeNodePO.setGroupId(-1);
+        treeNodePO.setProjectId(-1);
+        treeNodePO.setDeep(-1);
+        treeNodePO.setId(1);
+        return treeNodePO;
     }
 
 }

+ 12 - 3
web/src/main/java/seecoder/devcloud/web/service/tree/TreeNodeService.java

@@ -35,9 +35,18 @@ public interface TreeNodeService {
     Response updateTreeNode(TreeNodeVO treeNodeVO);
 
     /**
-     * 删除一条需求
-     * @param treeNodeVO
+     * 删除一条需求,级联删除消息
+     * @param nodeId
      * @return
      */
-    Response deleteTreeNode(TreeNodeVO treeNodeVO);
+    Response deleteTreeNode(int nodeId);
+
+    /**
+     * 根据父节点创建子节点
+     * @param fatherId
+     * @return
+     */
+    public Response insertTreeNodeByFatherNode(int fatherId);
+
+
 }

+ 15 - 0
web/src/main/java/seecoder/devcloud/web/utils/TimeUtils.java

@@ -0,0 +1,15 @@
+package seecoder.devcloud.web.utils;
+
+import java.text.SimpleDateFormat;
+
+/**
+ * @program: parent
+ * @description: 时间工具
+ * @author: xzh
+ * @date: 2021-03-10
+ **/
+public class TimeUtils {
+    public static SimpleDateFormat getSimpleDateFormat(){
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    }
+}

+ 55 - 0
web/src/main/resources/application-xzh.yml

@@ -0,0 +1,55 @@
+spring:
+  datasource:
+    url: jdbc:mysql://localhost:3306/devcloud?allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false
+    username: root
+    password: xizhiheng921
+
+  mail:
+    host: smtp.qq.com
+    username: 370774330@qq.com
+    password: qkoecnzivukvbibi
+    port: 465
+    protocol: smtp
+    properties:
+      mail:
+        smtp:
+          ssl:
+            enable: true
+          socketFactory.class: javax.net.ssl.SSLSocketFactory
+        debug: true
+server:
+  port: 8080
+
+mybatis:
+  configuration:
+    map-underscore-to-camel-case: true
+
+seecoder:
+  k8s:
+    api-server: https://192.168.99.105:8443
+    token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjBmSXc4RlRjNUpBYVpGYWc4QzRDY1MzUWJad1JMdFhKcDI1cngzWGtiRlkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXZjbG91ZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXNicXY4Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NmIxNzU1ZS0zZjE3LTQ1ZTctODFmYi01MTRhODA3NDRhMzQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGV2Y2xvdWQ6ZGVmYXVsdCJ9.W0Y1lR6LBi1ZjylBx35YeqYuq2u2AqH-ayK4FD-LDfC26E89DanOwSv9XLrRMnnDBZFS_ZCRBumbnDeMiS5vw2x7-QnrDqj1M5u9FB2fIJsz2LyUkOhATZZmTzj_Uhewvvg09aDKh16ttj6ZX27m-KVk_6MP-VfiuvZnCVxDbqRkRjK-zsor4ty1CEATPyKK-tvugAwS0RFNHUL94DamfZAq_t1PSnH5ZtEHq0uEMZxY2c7j6u9d_aD9lphm_ZpCy_C8OCHfanM21CQPDHlcJTW_aiOO6bAp8qdc1egPO5uIamHl6Zm0N3RkcsRp4DGOHrltTV9y_cGZHXSWmRHfxw
+    debugging: true
+  gitlab:
+    host: http://gitlab.192.168.99.105.nip.io
+    webHookProxy: http://localhost:3000
+    token: wXDeETv2Kmt-JhiApJ9H
+  mail:
+    from: 370774330@qq.com
+
+
+  jenkins:
+    host: http://192.168.68.79:8082
+    username: root
+    token: 11d7b9e4c1acac481904c25813e2ec1f0a
+  docker:
+    registry: 192.168.68.79:18082
+
+
+
+  registry:
+    host: 192.168.68.79:18082
+    username: admin
+    password: admin123
+    nexus-server: 192.168.68.79:18081
+    repo-name: sec-repo
+    clean-up-task: 83bb8249-71e8-4367-83b3-50c6f7518860

+ 1 - 1
web/src/main/resources/application.yml

@@ -1,3 +1,3 @@
 spring:
   profiles:
-    active: cyz
+    active: xzh