|
@@ -6,34 +6,52 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import seecoder.devcloud.common.exceptions.ServiceException;
|
|
import seecoder.devcloud.common.exceptions.ServiceException;
|
|
|
import seecoder.devcloud.common.util.DateUtil;
|
|
import seecoder.devcloud.common.util.DateUtil;
|
|
|
|
|
+import seecoder.devcloud.core.commit.CommitState;
|
|
|
import seecoder.devcloud.web.aop.TreeLogging;
|
|
import seecoder.devcloud.web.aop.TreeLogging;
|
|
|
|
|
+import seecoder.devcloud.web.dao.project.CommitMapper;
|
|
|
import seecoder.devcloud.web.dao.tree.TreeNodeMapper;
|
|
import seecoder.devcloud.web.dao.tree.TreeNodeMapper;
|
|
|
|
|
+import seecoder.devcloud.web.dao.user.UserMapper;
|
|
|
|
|
+import seecoder.devcloud.web.model.enums.CommitRelatedType;
|
|
|
import seecoder.devcloud.web.model.enums.NodeStateEnum;
|
|
import seecoder.devcloud.web.model.enums.NodeStateEnum;
|
|
|
import seecoder.devcloud.web.model.enums.NodeTypeEnum;
|
|
import seecoder.devcloud.web.model.enums.NodeTypeEnum;
|
|
|
import seecoder.devcloud.web.model.enums.OperationEnum;
|
|
import seecoder.devcloud.web.model.enums.OperationEnum;
|
|
|
|
|
+import seecoder.devcloud.web.model.po.project.CommitPO;
|
|
|
import seecoder.devcloud.web.model.po.tree.TreeNodePO;
|
|
import seecoder.devcloud.web.model.po.tree.TreeNodePO;
|
|
|
|
|
+import seecoder.devcloud.web.model.po.user.UserPO;
|
|
|
import seecoder.devcloud.web.model.vo.TreeNodeVO;
|
|
import seecoder.devcloud.web.model.vo.TreeNodeVO;
|
|
|
import seecoder.devcloud.web.service.tree.TreeNodeService;
|
|
import seecoder.devcloud.web.service.tree.TreeNodeService;
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
public class TreeNodeServiceImpl implements TreeNodeService {
|
|
public class TreeNodeServiceImpl implements TreeNodeService {
|
|
|
|
|
+
|
|
|
|
|
+ private final TreeNodeMapper treeNodeMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final UserMapper userMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final CommitMapper commitMapper;
|
|
|
|
|
+
|
|
|
@Autowired
|
|
@Autowired
|
|
|
- private TreeNodeMapper treeNodeMapper;
|
|
|
|
|
- @Override
|
|
|
|
|
- public List<TreeNodeVO> getAllNodes() {
|
|
|
|
|
- List<TreeNodePO> nodes = treeNodeMapper.listAllTreeNodes();
|
|
|
|
|
- return nodes.stream().map(TreeNodeVO::new).collect(Collectors.toList());
|
|
|
|
|
|
|
+ public TreeNodeServiceImpl(TreeNodeMapper treeNodeMapper, UserMapper userMapper, CommitMapper commitMapper) {
|
|
|
|
|
+ this.treeNodeMapper = treeNodeMapper;
|
|
|
|
|
+ this.userMapper = userMapper;
|
|
|
|
|
+ this.commitMapper = commitMapper;
|
|
|
}
|
|
}
|
|
|
|
|
+// @Override
|
|
|
|
|
+// public List<TreeNodeVO> getAllNodes() {
|
|
|
|
|
+// List<TreeNodePO> nodes = treeNodeMapper.listAllTreeNodes();
|
|
|
|
|
+// return nodes.stream().map(TreeNodeVO::new).collect(Collectors.toList());
|
|
|
|
|
+// }
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public List<TreeNodeVO> listTreeNodesByProjectId(int projectId) {
|
|
public List<TreeNodeVO> listTreeNodesByProjectId(int projectId) {
|
|
|
List<TreeNodePO> nodes = treeNodeMapper.listTreeNodesByProjectId(projectId);
|
|
List<TreeNodePO> nodes = treeNodeMapper.listTreeNodesByProjectId(projectId);
|
|
|
- return nodes.stream().map(TreeNodeVO::new).collect(Collectors.toList());
|
|
|
|
|
|
|
+ return getTreeNodeVOS(nodes);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -53,7 +71,7 @@ public class TreeNodeServiceImpl implements TreeNodeService {
|
|
|
public void updateTreeNode(TreeNodeVO treeNodeVO) {
|
|
public void updateTreeNode(TreeNodeVO treeNodeVO) {
|
|
|
TreeNodePO treeNodePO = new TreeNodePO();
|
|
TreeNodePO treeNodePO = new TreeNodePO();
|
|
|
BeanUtils.copyProperties(treeNodeVO,treeNodePO);
|
|
BeanUtils.copyProperties(treeNodeVO,treeNodePO);
|
|
|
- int res = treeNodeMapper.updateTreeNode(treeNodePO);
|
|
|
|
|
|
|
+ treeNodeMapper.updateTreeNode(treeNodePO);
|
|
|
// TODO:safety check
|
|
// TODO:safety check
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -65,8 +83,6 @@ public class TreeNodeServiceImpl implements TreeNodeService {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 根据父节点id插入一个新的子节点
|
|
* 根据父节点id插入一个新的子节点
|
|
|
- * @param fatherId
|
|
|
|
|
- * @return
|
|
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
@TreeLogging(OperationEnum.START)
|
|
@TreeLogging(OperationEnum.START)
|
|
@@ -82,17 +98,16 @@ public class TreeNodeServiceImpl implements TreeNodeService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public List<TreeNodeVO> getNodesWithTaskTypeByProjectid(int projectId) {
|
|
|
|
|
|
|
+ public List<TreeNodeVO> getNodesWithTaskTypeByProjectId(int projectId) {
|
|
|
List<TreeNodePO> nodesPO = treeNodeMapper.getNodesWithTaskTypeByProjectid(projectId);
|
|
List<TreeNodePO> nodesPO = treeNodeMapper.getNodesWithTaskTypeByProjectid(projectId);
|
|
|
- List<TreeNodeVO> nodesVO = nodesPO.stream().map(po -> new TreeNodeVO(po)).collect(Collectors.toList());
|
|
|
|
|
- return nodesVO;
|
|
|
|
|
|
|
+ return getTreeNodeVOS(nodesPO);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 创建一个default的节点
|
|
* 创建一个default的节点
|
|
|
- * @param
|
|
|
|
|
- * @return
|
|
|
|
|
*/
|
|
*/
|
|
|
private TreeNodePO getDefaultTreeNodePO() {
|
|
private TreeNodePO getDefaultTreeNodePO() {
|
|
|
SimpleDateFormat format = DateUtil.getSimpleDateFormat();
|
|
SimpleDateFormat format = DateUtil.getSimpleDateFormat();
|
|
@@ -107,11 +122,38 @@ public class TreeNodeServiceImpl implements TreeNodeService {
|
|
|
treeNodePO.setStartTime(format.format(new Date()));
|
|
treeNodePO.setStartTime(format.format(new Date()));
|
|
|
treeNodePO.setEndTime(format.format(new Date()));
|
|
treeNodePO.setEndTime(format.format(new Date()));
|
|
|
treeNodePO.setLeaf(true);
|
|
treeNodePO.setLeaf(true);
|
|
|
- treeNodePO.setGroupId(-1);
|
|
|
|
|
treeNodePO.setProjectId(-1);
|
|
treeNodePO.setProjectId(-1);
|
|
|
treeNodePO.setDeep(-1);
|
|
treeNodePO.setDeep(-1);
|
|
|
treeNodePO.setId(1);
|
|
treeNodePO.setId(1);
|
|
|
return treeNodePO;
|
|
return treeNodePO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void updateNodeState(Integer id, CommitState state) {
|
|
|
|
|
+ TreeNodePO po = new TreeNodePO();
|
|
|
|
|
+ po.setId(id);
|
|
|
|
|
+ switch (state){
|
|
|
|
|
+ case WORKING_ON:
|
|
|
|
|
+ po.setState(NodeStateEnum.PROCESSING);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case COMPLETE:
|
|
|
|
|
+ po.setState(NodeStateEnum.FINISHED);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ treeNodeMapper.update(po);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取TreeNode信息的时候同时把用户、git commit信息填入
|
|
|
|
|
+ * 信息填入
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<TreeNodeVO> getTreeNodeVOS(List<TreeNodePO> nodesPO) {
|
|
|
|
|
+ int projectId = nodesPO.get(0).getProjectId();
|
|
|
|
|
+ List<Integer> userIds = nodesPO.stream().map(TreeNodePO::getUserId).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ Map<Integer,String> usernameMap = userMapper.selectByIds(userIds).stream().collect(Collectors.toMap(UserPO::getId, UserPO::getUsername));
|
|
|
|
|
+ List<CommitPO> commits = commitMapper.selectByProjectIdAndType(projectId, CommitRelatedType.TREE_ID);
|
|
|
|
|
+ Map<Integer, List<CommitPO>> commitsMap = commits.stream().collect(Collectors.groupingBy(CommitPO::getRelatedId));
|
|
|
|
|
+ return nodesPO.stream().map(po -> new TreeNodeVO(po,usernameMap.get(po.getUserId()),commitsMap.get(po.getId()))).collect(Collectors.toList());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|