2 Commits 229673afa5 ... 321fe81b68

Autore SHA1 Messaggio Data
  181250114 321fe81b68 feat: 修改关联逻辑并测试 3 anni fa
  181250114 dbf70a1485 feat: 更新日志op_type=109的判断逻辑 3 anni fa

+ 1 - 1
src/main/java/com/seecoder/dataanalysis/analysis/DevcloudDataAnalysisService.java

@@ -73,7 +73,7 @@ public interface DevcloudDataAnalysisService {
      * op_type=109 将项目A与项目B关联
      * @param relateProjectDTO op_type=109的日志
      */
-    ProjectRelate updateDevInfoType109(RelateProjectDTO relateProjectDTO);
+    int updateDevInfoType109(RelateProjectDTO relateProjectDTO);
 
     /**
      * op_type=110 新建项目时,将项目的基本信息存储在分析系统中

+ 85 - 64
src/main/java/com/seecoder/dataanalysis/analysis/impl/DevcloudDataAnalysisServiceImpl.java

@@ -28,8 +28,8 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
     private DevcloudProjectDao devcloudProjectDao;
     @Autowired
     private DevcloudUserDao devcloudUserDao;
-    @Autowired
-    private ProjectRelateDao projectRelateDao;
+//    @Autowired
+//    private ProjectRelateDao projectRelateDao;
     @Autowired
     private UserDao userDao;
     @Autowired
@@ -372,35 +372,36 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
 
         Integer userId = addProjectDTO.getUserId();
 
-        //查询该项目是否有关联项目,如果有关联项目,需要把该成员也加入关联项目中
-        Optional<ProjectRelate> result2 = projectRelateDao.findById(projectId);
-        Integer relateId = -1;
-        //如果存在关联项目
-        if(result2.isPresent()){
-            relateId = projectRelateDao.findById(projectId).get().getRelateId();
-        }
-
-        DevcloudProject relateProject;
-        if(relateId != -1){
-            Optional<DevcloudProject> result3 = devcloudProjectDao.findById(relateId);
-            if(!result3.isPresent()){
-                relateProject = new DevcloudProject();
-                relateProject.setProjectId(relateId);
-            }else {
-                relateProject = devcloudProjectDao.findById(relateId).get();
-            }
-
-            List<Integer> relateMembers = relateProject.getUserIds();
-            if(!relateMembers.contains(userId)){
-                relateMembers.add(userId);
-                relateProject.setUserIds(relateMembers);
-            }
-
-            devcloudProjectDao.save(relateProject);
-        }
+//        //查询该项目是否有关联项目,如果有关联项目,需要把该成员也加入关联项目中
+//        Optional<ProjectRelate> result2 = projectRelateDao.findById(projectId);
+//        Integer relateId = -1;
+//        //如果存在关联项目
+//        if(result2.isPresent()){
+//            relateId = projectRelateDao.findById(projectId).get().getRelateId();
+//        }
+//
+//        DevcloudProject relateProject;
+//        if(relateId != -1){
+//            Optional<DevcloudProject> result3 = devcloudProjectDao.findById(relateId);
+//            if(!result3.isPresent()){
+//                relateProject = new DevcloudProject();
+//                relateProject.setProjectId(relateId);
+//            }else {
+//                relateProject = devcloudProjectDao.findById(relateId).get();
+//            }
+//
+//            List<Integer> relateMembers = relateProject.getUserIds();
+//            if(!relateMembers.contains(userId)){
+//                relateMembers.add(userId);
+//                relateProject.setUserIds(relateMembers);
+//            }
+//
+//            devcloudProjectDao.save(relateProject);
+//        }
 
         //处理完项目-用户关系,现在处理用户-项目关系
         //所有的devcloudUser都在此处创建
+
         DevcloudUser devcloudUser;
 
         Optional<DevcloudUser> result1 = devcloudUserDao.findById(userId);
@@ -416,11 +417,11 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
         if(!projectIds.contains(addProjectDTO.getProjectId())){
             projectIds.add(addProjectDTO.getProjectId());
         }
-        if(relateId!=-1){
-            if(!projectIds.contains(relateId)){
-                projectIds.add(relateId);
-            }
-        }
+//        if(relateId!=-1){
+//            if(!projectIds.contains(relateId)){
+//                projectIds.add(relateId);
+//            }
+//        }
 
         devcloudUser.setProjectIds(projectIds);
         devcloudUserDao.save(devcloudUser);
@@ -429,23 +430,23 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
     }
 
     @Override
-    public ProjectRelate updateDevInfoType109(RelateProjectDTO relateProjectDTO){
+    public int updateDevInfoType109(RelateProjectDTO relateProjectDTO){
         Integer projectAId = relateProjectDTO.getProjectAId();
         Integer projectBId = relateProjectDTO.getProjectBId();
-        ProjectRelate projectRelate;
 
-        Optional<ProjectRelate> 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);
-        }
+//        ProjectRelate projectRelate;
+//        Optional<ProjectRelate> 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);
+//        }
 
         //增加关联后,A和B中的成员应该相同,每个成员也应该加入
         //先将A、B项目中的成员同步
@@ -466,6 +467,7 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
             projectB = devcloudProjectDao.findById(projectBId).get();
         }
 
+        //将A和B中的user_id进行合并
         List<Integer> totalMembers = new ArrayList<>();
         for(Integer id : projectA.getUserIds()){
             if(!totalMembers.contains(id)){
@@ -508,7 +510,7 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
         }
 
 
-        return projectRelate;
+        return 1;
     }
 
     @Override
@@ -736,22 +738,25 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
     public FormatGroup getGroupAnalysis(Integer project_id){
         //暂时不存在GroupId,先使用ProjectId代替
         FormatGroup formatGroup = new FormatGroup();
+        //记录该小组拥有的所有项目的id
         List<Integer> projectList = new ArrayList<>();
+        //记录所有项目的信息,用于小组项目信息展示
         List<Project> projects = new ArrayList<>();
-        Integer projectAId = project_id;
-        Integer projectBId;
-        Optional<ProjectRelate> result1 = projectRelateDao.findById(project_id);
-        if(!result1.isPresent()){
-            System.out.println("没有找到关联项目");
-        }else {
-            projectBId = projectRelateDao.findById(project_id).get().getRelateId();
-            projectList.add(projectBId);
-            projects.add(projectDao.findById(projectBId).get());
-        }
 
-        projectList.add(projectAId);
-
-        projects.add(projectDao.findById(projectAId).get());
+//        Integer projectAId = project_id;
+//        Integer projectBId;
+//        Optional<ProjectRelate> result1 = projectRelateDao.findById(project_id);
+//        if(!result1.isPresent()){
+//            System.out.println("没有找到关联项目");
+//        }else {
+//            projectBId = projectRelateDao.findById(project_id).get().getRelateId();
+//            projectList.add(projectBId);
+//            projects.add(projectDao.findById(projectBId).get());
+//        }
+
+        //先将传入的project加入List
+        projectList.add(project_id);
+        projects.add(projectDao.findById(project_id).get());
 
         Optional<DevcloudProject> result2 = devcloudProjectDao.findById(project_id);
         if(!result2.isPresent()){
@@ -761,13 +766,29 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
 
         List<Integer> userIds = devcloudProjectDao.findById(project_id).get().getUserIds();
 
+        //遍历加入项目中所有成员下拥有的项目,得到该小组所有的项目
+        for(Integer userId : userIds){
+            Optional<DevcloudUser> result = devcloudUserDao.findById(userId);
+            if(!result.isPresent()){
+                continue;
+            }else {
+                List<Integer> proIds = devcloudUserDao.findById(userId).get().getProjectIds();
+                for(Integer proId : proIds){
+                    if(!projectList.contains(proId)){
+                        projectList.add(proId);
+                        projects.add(projectDao.findById(proId).get());
+                    }
+                }
+            }
+        }
+
+        //将所有的成员信息加入
         List<User> users = new ArrayList<>();
         for(int i=0;i<userIds.size();i++){
             Integer userId = userIds.get(i);
             users.add(userDao.findByUserId(userId));
         }
         int n = userIds.size();
-//        System.out.println("n: "+n);
 
         formatGroup.setProjects(projects);
         formatGroup.setStudents(users);
@@ -798,8 +819,8 @@ public class DevcloudDataAnalysisServiceImpl implements DevcloudDataAnalysisServ
         //记录小组不同成员的treeNode贡献
         int[] treeNodeTimes = new int[n];
 
-        //
-        for(int i=0;i<projects.size();i++){
+        //遍历所有的项目,将整体信息作为小组的分析情况
+        for(int i=0;i<projectList.size();i++){
             Integer projectId = projectList.get(i);
             DevcloudInfo devcloudInfo;
             Optional<DevcloudInfo> result3 = devcloudInfoDao.findById(projectId);

+ 15 - 15
src/main/java/com/seecoder/dataanalysis/analysis/impl/DisplayServiceImpl.java

@@ -27,8 +27,8 @@ import java.util.Optional;
 public class DisplayServiceImpl implements DisplayService {
     @Autowired
     private UserDao userDao;
-    @Autowired
-    private ProjectRelateDao projectRelateDao;
+//    @Autowired
+//    private ProjectRelateDao projectRelateDao;
     @Autowired
     private DevcloudUserDao devcloudUserDao;
     @Autowired
@@ -72,22 +72,22 @@ public class DisplayServiceImpl implements DisplayService {
         DevcloudUser devcloudUser = devcloudUserDao.findById(user_id).get();
         List<Integer> projectIds = devcloudUser.getProjectIds();
 
-        //如果用户只有一个项目
-        if(projectIds.size()==1){
-            devcloudDataAnalysisService.getGroupAnalysis(projectIds.get(0));
-        }
+//        //如果用户只有一个项目
+//        if(projectIds.size()==1){
+//            devcloudDataAnalysisService.getGroupAnalysis(projectIds.get(0));
+//        }
 
         Integer project_id = projectIds.get(0);
 
-        for(int projectId : projectIds){
-            Optional<ProjectRelate> result1 = projectRelateDao.findById(projectId);
-            if(!result1.isPresent()){
-                continue;
-            }else {
-                project_id = projectId;
-                break;
-            }
-        }
+//        for(int projectId : projectIds){
+//            Optional<ProjectRelate> result1 = projectRelateDao.findById(projectId);
+//            if(!result1.isPresent()){
+//                continue;
+//            }else {
+//                project_id = projectId;
+//                break;
+//            }
+//        }
 
         return devcloudDataAnalysisService.getGroupAnalysis(project_id);
     }

+ 12 - 3
src/main/java/com/seecoder/dataanalysis/data/entity/devcloud/ProjectRelate.java

@@ -7,6 +7,8 @@ import lombok.experimental.Accessors;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Field;
 
+import java.util.List;
+
 @NoArgsConstructor
 @AllArgsConstructor
 @Accessors(chain = true)
@@ -20,9 +22,16 @@ public class ProjectRelate {
     @Field("project_id")
     private Integer projectId;
 
+//    /**
+//     * 关联ID
+//     */
+//    @Field("relate_id")
+//    private Integer relateId;
+
     /**
-     * 关联ID
+     * 2022/10/19
+     * 关联ID(修改成一对多的模式,因为一个项目可以有若干个关联)
      */
-    @Field("relate_id")
-    private Integer relateId;
+    @Field("relate_ids")
+    private List<Integer> relateIds;
 }

+ 78 - 41
src/test/java/com/seecoder/dataanalysis/devcloud/impl/DevcloudDataAnalysisServiceImplTest.java

@@ -58,8 +58,8 @@ public class DevcloudDataAnalysisServiceImplTest {
     private DevcloudUserDao devcloudUserDao;
     @Autowired
     private DevcloudProjectDao devcloudProjectDao;
-    @Autowired
-    private ProjectRelateDao projectRelateDao;
+//    @Autowired
+//    private ProjectRelateDao projectRelateDao;
     @Autowired
     private DevcloudController devcloudController;
 
@@ -333,11 +333,11 @@ public class DevcloudDataAnalysisServiceImplTest {
         devcloudProjectDao.save(devcloudProject1);
         devcloudProjectDao.save(devcloudProject2);
 
-        ProjectRelate projectRelate1 = new ProjectRelate();
-        projectRelate1.setProjectId(2959);
-        projectRelate1.setRelateId(2958);
-
-        projectRelateDao.save(projectRelate1);
+//        ProjectRelate projectRelate1 = new ProjectRelate();
+//        projectRelate1.setProjectId(2959);
+//        projectRelate1.setRelateId(2958);
+//
+//        projectRelateDao.save(projectRelate1);
 
         System.out.println(displayService.getGroupAnalysisById(1566));
     }
@@ -380,11 +380,11 @@ public class DevcloudDataAnalysisServiceImplTest {
         devcloudProjectDao.save(devcloudProject1);
         devcloudProjectDao.save(devcloudProject2);
 
-        ProjectRelate projectRelate1 = new ProjectRelate();
-        projectRelate1.setProjectId(3048);
-        projectRelate1.setRelateId(3049);
-
-        projectRelateDao.save(projectRelate1);
+//        ProjectRelate projectRelate1 = new ProjectRelate();
+//        projectRelate1.setProjectId(3048);
+//        projectRelate1.setRelateId(3049);
+//
+//        projectRelateDao.save(projectRelate1);
 
         System.out.println(displayService.getGroupAnalysisById(1709));
     }
@@ -427,11 +427,11 @@ public class DevcloudDataAnalysisServiceImplTest {
         devcloudProjectDao.save(devcloudProject1);
         devcloudProjectDao.save(devcloudProject2);
 
-        ProjectRelate projectRelate1 = new ProjectRelate();
-        projectRelate1.setProjectId(3071);
-        projectRelate1.setRelateId(3072);
-
-        projectRelateDao.save(projectRelate1);
+//        ProjectRelate projectRelate1 = new ProjectRelate();
+//        projectRelate1.setProjectId(3071);
+//        projectRelate1.setRelateId(3072);
+//
+//        projectRelateDao.save(projectRelate1);
 
         System.out.println(displayService.getGroupAnalysisById(1594 ));
     }
@@ -474,11 +474,11 @@ public class DevcloudDataAnalysisServiceImplTest {
         devcloudProjectDao.save(devcloudProject1);
         devcloudProjectDao.save(devcloudProject2);
 
-        ProjectRelate projectRelate1 = new ProjectRelate();
-        projectRelate1.setProjectId(3056);
-        projectRelate1.setRelateId(3058);
-
-        projectRelateDao.save(projectRelate1);
+//        ProjectRelate projectRelate1 = new ProjectRelate();
+//        projectRelate1.setProjectId(3056);
+//        projectRelate1.setRelateId(3058);
+//
+//        projectRelateDao.save(projectRelate1);
 
         System.out.println(displayService.getGroupAnalysisById(1609 ));
     }
@@ -521,11 +521,11 @@ public class DevcloudDataAnalysisServiceImplTest {
         devcloudProjectDao.save(devcloudProject1);
         devcloudProjectDao.save(devcloudProject2);
 
-        ProjectRelate projectRelate1 = new ProjectRelate();
-        projectRelate1.setProjectId(3004);
-        projectRelate1.setRelateId(3003);
-
-        projectRelateDao.save(projectRelate1);
+//        ProjectRelate projectRelate1 = new ProjectRelate();
+//        projectRelate1.setProjectId(3004);
+//        projectRelate1.setRelateId(3003);
+//
+//        projectRelateDao.save(projectRelate1);
 
         System.out.println(displayService.getGroupAnalysisById(1712 ));
     }
@@ -568,15 +568,15 @@ public class DevcloudDataAnalysisServiceImplTest {
         devcloudProjectDao.save(devcloudProject1);
         devcloudProjectDao.save(devcloudProject2);
 
-        ProjectRelate projectRelate1 = new ProjectRelate();
-        projectRelate1.setProjectId(2976);
-        projectRelate1.setRelateId(2975);
-
-//        ProjectRelate projectRelate2 = new ProjectRelate();
-//        projectRelate2.setProjectId(2975);
-//        projectRelate2.setRelateId(2976);
-
-        projectRelateDao.save(projectRelate1);
+//        ProjectRelate projectRelate1 = new ProjectRelate();
+//        projectRelate1.setProjectId(2976);
+//        projectRelate1.setRelateId(2975);
+//
+////        ProjectRelate projectRelate2 = new ProjectRelate();
+////        projectRelate2.setProjectId(2975);
+////        projectRelate2.setRelateId(2976);
+//
+//        projectRelateDao.save(projectRelate1);
 
         System.out.println(displayService.getGroupAnalysisById(1583));
 //        System.out.println(devcloudDataAnalysisService.getStudentAnalysis(1583));
@@ -620,11 +620,11 @@ public class DevcloudDataAnalysisServiceImplTest {
         devcloudProjectDao.save(devcloudProject1);
         devcloudProjectDao.save(devcloudProject2);
 
-        ProjectRelate projectRelate1 = new ProjectRelate();
-        projectRelate1.setProjectId(2980);
-        projectRelate1.setRelateId(2982);
-
-        projectRelateDao.save(projectRelate1);
+//        ProjectRelate projectRelate1 = new ProjectRelate();
+//        projectRelate1.setProjectId(2980);
+//        projectRelate1.setRelateId(2982);
+//
+//        projectRelateDao.save(projectRelate1);
 
         System.out.println(displayService.getGroupAnalysisById(1622 ));
     }
@@ -671,4 +671,41 @@ public class DevcloudDataAnalysisServiceImplTest {
         return Math.sqrt(dVar/(m-1));
 //        return Math.sqrt(dVar/m);
     }
+
+    @Test
+    void testNewRelate(){
+
+        RelateProjectDTO relateProjectDTO1 = new RelateProjectDTO();
+        relateProjectDTO1.setProjectAId(10001);
+        relateProjectDTO1.setProjectBId(10002);
+
+        RelateProjectDTO relateProjectDTO2 = new RelateProjectDTO();
+        relateProjectDTO2.setProjectAId(10002);
+        relateProjectDTO2.setProjectBId(10003);
+
+        AddProjectDTO addProjectDTO1 = new AddProjectDTO();
+        addProjectDTO1.setProjectId(10001);
+        addProjectDTO1.setUserId(123);
+
+        AddProjectDTO addProjectDTO2 = new AddProjectDTO();
+        addProjectDTO2.setProjectId(10001);
+        addProjectDTO2.setUserId(1234);
+
+        AddProjectDTO addProjectDTO3 = new AddProjectDTO();
+        addProjectDTO3.setProjectId(10002);
+        addProjectDTO3.setUserId(12345);
+
+        AddProjectDTO addProjectDTO4 = new AddProjectDTO();
+        addProjectDTO4.setProjectId(10003);
+        addProjectDTO4.setUserId(123456);
+
+        devcloudDataAnalysisService.updateDevInfoType109(relateProjectDTO1);
+//        devcloudDataAnalysisService.updateDevInfoType109(relateProjectDTO2);
+        devcloudDataAnalysisService.updateDevInfoType108(addProjectDTO1);
+        devcloudDataAnalysisService.updateDevInfoType108(addProjectDTO2);
+        devcloudDataAnalysisService.updateDevInfoType108(addProjectDTO3);
+        devcloudDataAnalysisService.updateDevInfoType108(addProjectDTO4);
+        devcloudDataAnalysisService.updateDevInfoType109(relateProjectDTO2);
+
+    }
 }