Browse Source

修改项目所在区域,同步project_user表数据

yang 4 years ago
parent
commit
814350f33e

+ 83 - 1
lift-business-service/src/main/java/cn/com/ty/lift/business/project/service/ProjectService.java

@@ -567,6 +567,73 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         }
         //获取原项目的数据对象
         Project entry = oldProject.get();
+
+        if (Objects.isNull(mtCompanyId)) {
+            mtCompanyId = entry.getMtCompanyId();
+        }
+
+        //区域ID判断
+        if (Objects.nonNull(entry.getRegionId()) && !Objects.equals(entry.getRegionId(), project.getRegionId())) {
+            //判断传入的区域ID合法性
+            Region oldRegion = regionService.getBaseMapper().selectById(entry.getRegionId());
+            Region newRegion = regionService.getBaseMapper().selectById(project.getRegionId());
+
+            if (Objects.nonNull(oldRegion) && Objects.equals(mtCompanyId, oldRegion.getMtCompanyId())
+                    && Objects.nonNull(newRegion) && Objects.equals(mtCompanyId, newRegion.getMtCompanyId())) {
+
+                //查询project_user表中区域主管的信息
+                List<ProjectUser> projectUsers = projectUserService.getBaseMapper().selectList(
+                        new QueryWrapper<ProjectUser>().lambda()
+                                .eq(ProjectUser::getProjectId, projectId)
+                                .eq(ProjectUser::getMtCompanyId, mtCompanyId)
+                                .eq(ProjectUser::getUserRole, "REGION_DIRECTOR")
+                );
+                //修改project_user表中区域主管的信息
+                switch (projectUsers.size()) {
+                    case 0:
+                        //添加数据
+                        if (projectUserService.getBaseMapper().insert(createProjectUser(projectId, mtCompanyId, newRegion)) != 1) {
+                            rollbackByException("project_user表插入数据失败!");
+                        }
+                        ;
+                        break;
+                    case 1:
+                        //修改数据
+                        ProjectUser updateProjectUser = projectUsers.get(0);
+                        updateProjectUser.setUpdateDate(LocalDateTime.now());
+                        updateProjectUser.setUserId(newRegion.getUserId());
+
+                        int i = projectUserService.getBaseMapper().update(updateProjectUser, new QueryWrapper<ProjectUser>()
+                                .lambda()
+                                .eq(ProjectUser::getProjectId, updateProjectUser.getProjectId())
+                                .eq(ProjectUser::getMtCompanyId, mtCompanyId)
+                                .eq(ProjectUser::getUserRole, "REGION_DIRECTOR"));
+                        if (1 != i) {
+                            rollbackByException("project_user表修改数据失败!");
+                        }
+                        break;
+                    default:
+                        //查出多个区域主管角色,删除数据
+                        int delCount = projectUserService.getBaseMapper().delete(new QueryWrapper<ProjectUser>()
+                                .lambda()
+                                .eq(ProjectUser::getProjectId, projectId)
+                                .eq(ProjectUser::getMtCompanyId, mtCompanyId)
+                                .eq(ProjectUser::getUserRole, "REGION_DIRECTOR"));
+
+                        //重新写入
+                        int insert = projectUserService.getBaseMapper().insert(createProjectUser(projectId, mtCompanyId, newRegion));
+
+                        if (delCount != projectUsers.size() || 1 != insert) {
+                            rollbackByException("project_user表修改数据失败!");
+                        }
+                        break;
+                }
+
+            } else {
+                rollbackByException("区域数据异常!");
+            }
+        }
+
         //如果原项目的结束时间和提交项目的结束时间不一样 更新维保计划表
         if (!endDate.isEqual(entry.getEndDate())) {
             //延期三个月
@@ -668,7 +735,7 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         if (!result)
             return RestResponse.fail(MessageUtils.get("msg.modify.fail"));
         //生成项目操作记录
-        ProjectHistory history = projectHistoryService.createOperaHistory(entry, project, project.getMtCompanyId());
+        ProjectHistory history = projectHistoryService.createOperaHistory(entry, project, mtCompanyId);
         if (Objects.nonNull(history)) {
             //保存项目操作记录
             boolean projectResult = projectHistoryService.save(history);
@@ -681,6 +748,16 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         return RestResponse.success(null, MessageUtils.get("msg.modify.success"));
     }
 
+    private ProjectUser createProjectUser(Long projectId, Long mtCompanyId, Region newRegion) {
+        ProjectUser insertProjectUser = new ProjectUser();
+        insertProjectUser.setUserId(newRegion.getUserId());
+        insertProjectUser.setProjectId(projectId);
+        insertProjectUser.setMtCompanyId(mtCompanyId);
+        insertProjectUser.setUserRole("REGION_DIRECTOR");
+        insertProjectUser.setCreateDate(LocalDateTime.now());
+        return insertProjectUser;
+    }
+
 
     public List<Map<String, String>> exportList(List<String> ids) {
         return baseMapper.exportList(ids);
@@ -1007,4 +1084,9 @@ public class ProjectService extends ServiceImpl<ProjectMapper, Project> {
         }
         return RestResponse.success("导入成功");
     }
+
+
+    private void rollbackByException(String msg) {
+        throw new RuntimeException(msg);
+    }
 }