package com.seecoder.dataanalysis.analysis.impl; import com.seecoder.dataanalysis.analysis.DevcloudDataAnalysisService; import com.seecoder.dataanalysis.data.dao.devcloud.*; import com.seecoder.dataanalysis.data.dao.eval.UserDao; import com.seecoder.dataanalysis.data.entity.devcloud.*; import com.seecoder.dataanalysis.data.entity.devcloud.display.*; import com.seecoder.dataanalysis.data.entity.eval.User; import com.seecoder.dataanalysis.vo.devcloud.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * @author Peng Yiyan * @since 2022/03/12 */ @Service public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisService { @Autowired private DevcloudInfoDao devcloudInfoDao; @Autowired private DevcloudProjectDao devcloudProjectDao; @Autowired private DevcloudUserDao devcloudUserDao; @Autowired private ProjectRelateDao projectRelateDao; @Autowired private UserDao userDao; @Autowired private ProjectDao projectDao; @Override public DevcloudInfo updateDevInfoType100(BugInfoDTO bugInfoDTO){ Integer projectId = bugInfoDTO.getProjectId(); DevcloudInfo devcloudInfo; Optional result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List bugInfoList = devcloudInfo.getBugList(); boolean exist = false; for(int i=0;i result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List commitInfoList = devcloudInfo.getCommitList(); boolean exist = false; for(int i=0;i result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List testInfoList = devcloudInfo.getTestList(); boolean exist = false; for(int i=0;i result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List pipelineInfoList = devcloudInfo.getPipelineList(); boolean exist = false; for(int i=0;i result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List pipelineInfoList = devcloudInfo.getPipelineList(); //找到对应的id,删除 for(int i=0;i result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List pipelineInfoList = devcloudInfo.getPipelineList(); //找到对应的id,存入部署信息 for(int i=0;i recordInfoList = pipelineInfoList.get(i).getRecordList(); RecordInfo recordInfo = new RecordInfo(); recordInfo.setRecordId(pipelineDeployDTO.getRecordId()); recordInfo.setUserId(pipelineDeployDTO.getUserId()); recordInfo.setResult(pipelineDeployDTO.getResult()); recordInfoList.add(recordInfo); break; } } devcloudInfo.setPipelineList(pipelineInfoList); devcloudInfoDao.save(devcloudInfo); return devcloudInfo; } @Override public DevcloudInfo updateDevInfoType106(TreeNodeInfoDTO treeNodeInfoDTO){ Integer projectId = treeNodeInfoDTO.getProjectId(); DevcloudInfo devcloudInfo; Optional result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List treeNodeInfoList = devcloudInfo.getTreeNodeList(); boolean exist = false; for(int i=0;i result = devcloudInfoDao.findById(projectId); if(!result.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); }else { devcloudInfo = devcloudInfoDao.findById(projectId).get(); } List treeNodeInfoList = devcloudInfo.getTreeNodeList(); List nodeIds = treeNodeDeletionDTO.getNodeIds(); for(int i=0;i result = devcloudProjectDao.findById(projectId); if(!result.isPresent()){ devcloudProject = new DevcloudProject(); devcloudProject.setProjectId(projectId); devcloudProjectDao.save(devcloudProject); }else { devcloudProject = devcloudProjectDao.findById(projectId).get(); } List memberIds = devcloudProject.getUserIds(); if(!memberIds.contains(addProjectDTO.getUserId())){ memberIds.add(addProjectDTO.getUserId()); } devcloudProject.setUserIds(memberIds); devcloudProjectDao.save(devcloudProject); //处理完项目-用户关系,现在处理用户-项目关系 Integer userId = addProjectDTO.getUserId(); DevcloudUser devcloudUser; Optional result1 = devcloudUserDao.findById(userId); if(!result1.isPresent()){ devcloudUser = new DevcloudUser(); devcloudUser.setUserId(userId); }else { devcloudUser = devcloudUserDao.findById(userId).get(); } List projectIds = devcloudUser.getProjectIds(); if(!projectIds.contains(addProjectDTO.getProjectId())){ projectIds.add(addProjectDTO.getProjectId()); } devcloudUser.setProjectIds(projectIds); devcloudUserDao.save(devcloudUser); return devcloudProject; } @Override public ProjectRelate updateDevInfoType109(RelateProjectDTO relateProjectDTO){ Integer projectAId = relateProjectDTO.getProjectAId(); ProjectRelate projectRelate; Optional result = projectRelateDao.findById(projectAId); if(!result.isPresent()){ projectRelate = new ProjectRelate(); projectRelate.setProjectId(projectAId); projectRelate.setRelateId(relateProjectDTO.getProjectBId()); projectRelateDao.save(projectRelate); }else { projectRelate = projectRelateDao.findById(projectAId).get(); projectRelate.setRelateId(relateProjectDTO.getProjectBId()); projectRelateDao.save(projectRelate); } return projectRelate; } @Override public Project updateDevInfoType110(ProjectDTO projectDTO){ Integer projectId = projectDTO.getProjectId(); Project project; Optional result = projectDao.findById(projectId); if(!result.isPresent()){ project = new Project(); }else { System.out.println("请勿重复添加项目"); return projectDao.findById(projectId).get(); } project.setProjectId(projectId); project.setProjectName(projectDTO.getProjectName()); project.setDescription(projectDTO.getDescription()); projectDao.save(project); //添加项目之后,初始化项目的devInfo DevcloudInfo devcloudInfo; Optional result2 = devcloudInfoDao.findById(projectId); if(!result2.isPresent()){ devcloudInfo = new DevcloudInfo(projectId); devcloudInfoDao.save(devcloudInfo); } return project; } @Override public User updateDevInfoType111(UserDTO userDTO){ Integer userId = userDTO.getUserId(); User user; Optional result = userDao.findById(userId); if(!result.isPresent()){ user = new User(); }else { System.out.println("该用户已存在"); return userDao.findByUserId(userId); } user.setUserId(userId); user.setUsername(userDTO.getUsername()); user.setRole(userDTO.getRole()); user.setEmail(userDTO.getEmail()); user.setPhone(userDTO.getPhone()); userDao.save(user); return user; } @Override public FormatStudent getStudentAnalysis(Integer user_id){ FormatStudent formatStudent = new FormatStudent(); User user = userDao.findByUserId(user_id); DevcloudUser devcloudUser; Optional result = devcloudUserDao.findById(user_id); if(!result.isPresent()){ System.out.println("没有查找到学生id"); return null; }else { devcloudUser = devcloudUserDao.findById(user_id).get(); } //放入展示数据 formatStudent.setUserId(user_id); formatStudent.setName(user.getUsername()); formatStudent.setEmail(user.getEmail()); //根据用户id找到和该用户关联的所有项目id List projectList = devcloudUserDao.findById(user_id).get().getProjectIds(); List projects = new ArrayList<>(); for(int i=0;i commit_msg_overview = new ArrayList<>(); Integer test_success=0,test_failure=0,test_times=0,test_concurrency_count=0; Integer pipeline_deploy=0,pipeline_pass=0,pipeline_failure=0; //遍历所有相关项目 for(int i=0;i commitInfos = devcloudInfo.getCommitList(); for(CommitInfo commitInfo : commitInfos){ if(commitInfo.getUserId().equals(user_id)){ commit_times++; commit_msg_overview.add(commitInfo.getMessage()); //如果是需求的commit if(commitInfo.getType().toLowerCase().equals("tree_id")){ feature_commit++; } //如果是bug_list的commit if(commitInfo.getType().toLowerCase().equals("bug_id")){ buglist_commit++; } //判断是否是有效的commit if(commitInfo.getMessage().startsWith("feat:")||commitInfo.getMessage().startsWith("fix:")){ valid_commit_time++; } } } //遍历devInfo中的test信息 List testInfos = devcloudInfo.getTestList(); for(TestInfo testInfo : testInfos){ if(testInfo.getUserId().equals(user_id)){ test_times++; test_success += testInfo.getSuccess(); test_failure += testInfo.getFailure(); test_concurrency_count += testInfo.getSuccess(); test_concurrency_count += testInfo.getFailure(); } } //遍历devInfo中的pipeline信息 List pipelineInfos = devcloudInfo.getPipelineList(); for(PipelineInfo pipelineInfo : pipelineInfos){ //遍历每个流水线中的部署记录 List recordInfos = pipelineInfo.getRecordList(); for(RecordInfo recordInfo : recordInfos){ if(recordInfo.getUserId().equals(user_id)){ pipeline_deploy++; if(recordInfo.getResult().equals("部署成功")){ pipeline_pass++; } if(recordInfo.getResult().equals("部署失败")){ pipeline_failure++; } } } } } //commit commit.setCommit_times(commit_times); commit.setValid_commit_times(valid_commit_time); commit.setBuglist_commit(buglist_commit); commit.setFeature_commit(feature_commit); commit.setCommit_msg_overview(commit_msg_overview); //test test.setTest_times(test_times); test.setTest_concurrency_count(test_concurrency_count); test.setTest_concurrency_success(test_success); test.setTest_concurrency_failure(test_failure); //pipeline pipeline.setPipeline_deploy(pipeline_deploy); pipeline.setPipeline_pass(pipeline_pass); pipeline.setPipline_failure(pipeline_failure); formatStudent.setCommit(commit); formatStudent.setTest(test); formatStudent.setPipeline(pipeline); return formatStudent; } @Override public FormatGroup getGroupAnalysis(Integer project_id){ //暂时不存在GroupId,先使用ProjectId代替 FormatGroup formatGroup = new FormatGroup(); Integer projectAId = project_id; Integer projectBId = projectRelateDao.findById(project_id).get().getRelateId(); List projectList = new ArrayList<>(); projectList.add(projectAId); projectList.add(projectBId); List projects = new ArrayList<>(); projects.add(projectDao.findById(projectAId).get()); projects.add(projectDao.findById(projectBId).get()); List userIds = devcloudProjectDao.findById(project_id).get().getUserIds(); List users = new ArrayList<>(); for(int i=0;i commit_msg_overview = new ArrayList<>(); Integer test_success=0,test_failure=0,test_times=0,test_concurrency_count=0; //记录小组不同成员的test贡献 int[] testTimes = new int[n]; Integer pipeline_deploy=0,pipeline_pass=0,pipeline_failure=0; //记录小组不同成员的deploy贡献 int[] pipeTimes = new int[n]; // for(int i=0;i commitInfos = devcloudInfo.getCommitList(); // System.out.println("commitInfosSize: "+commitInfos.size()); commit_times += commitInfos.size(); for(CommitInfo commitInfo : commitInfos){ for(int j=0;j testInfos = devcloudInfo.getTestList(); test_times += testInfos.size(); for(TestInfo testInfo : testInfos){ for(int j=0;j pipelineInfos = devcloudInfo.getPipelineList(); for(PipelineInfo pipelineInfo : pipelineInfos){ //遍历每个流水线中的部署记录 List recordInfos = pipelineInfo.getRecordList(); for(int j=0;j commitContribution = new ArrayList<>(); for(int i=0;i testContribution = new ArrayList<>(); for(int i=0;i deployContribution = new ArrayList<>(); for(int i=0;i