Forráskód Böngészése

继续服务/恢复服务 维护project_user表中区域主管数据的一致性

yang 4 éve
szülő
commit
66eba5f886

+ 111 - 19
lift-business-service/src/main/java/cn/com/ty/lift/business/library/service/PlatformCompanyLiftRelevanceService.java

@@ -46,6 +46,7 @@ import java.util.stream.Collectors;
  * @description 平台企业电梯关联业务层
  */
 @Service
+@SuppressWarnings("all")
 public class PlatformCompanyLiftRelevanceService extends ServiceImpl<PlatformCompanyLiftRelevanceMapper, PlatformCompanyLiftRelevance> {
 
     @Resource
@@ -296,25 +297,8 @@ public class PlatformCompanyLiftRelevanceService extends ServiceImpl<PlatformCom
                     if (Objects.isNull(regionDirectorId) || regionDirectorId == 0) {
                         throw new RuntimeException("项目ID查询区域主管ID失败!");
                     }
-                    //判断project_user 是否有这个人
-                    ProjectUser projectUser = projectUserService.getBaseMapper().selectOne(new QueryWrapper<ProjectUser>()
-                            .lambda()
-                            .eq(ProjectUser::getMtCompanyId, mtCompanyId)
-                            .eq(ProjectUser::getProjectId, projectId)
-                            .eq(ProjectUser::getUserId, regionDirectorId));
-
-                    if (Objects.isNull(projectUser)) {
-                        projectUser.setProjectId(projectId);
-                        projectUser.setIsMonitor("0");
-                        projectUser.setMtCompanyId(mtCompanyId);
-                        projectUser.setUserId(regionDirectorId);
-                        projectUser.setCreateDate(LocalDateTime.now());
-                        projectUser.setUserRole("REGION_DIRECTOR");
-
-                        if (projectUserService.getBaseMapper().insert(projectUser) != 1) {
-                            throw new RuntimeException("保存区域主管失败!");
-                        }
-                    }
+                    //维护project_user表数据
+                    maintain(projectId, mtCompanyId, regionDirectorId, projectUserService);
 
                     if (!ret) {
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -357,6 +341,15 @@ public class PlatformCompanyLiftRelevanceService extends ServiceImpl<PlatformCom
                 break;
             //继续服务
             case 3:
+
+                //查询项目的默认区域主管  老项目恢复需要默认关联区域主管(project_user)
+                Long regionDirectorId = baseMapper.getRegionDirectorByProjectId(projectId);
+                if (Objects.isNull(regionDirectorId) || regionDirectorId == 0) {
+                    throw new RuntimeException("项目ID查询区域主管ID失败!");
+                }
+                //维护project_user表数据
+                maintain(projectId, mtCompanyId, regionDirectorId, projectUserService);
+
                 project.setEndDate(request.getEndDate());
                 project.setProjectStatus(CommonEnum.ProjectStatus.IN_SERVICE.getCode());
                 boolean ret = projectService.updateById(project);
@@ -470,4 +463,103 @@ public class PlatformCompanyLiftRelevanceService extends ServiceImpl<PlatformCom
         lambdaQueryWrapper.last("LIMIT 1");
         return getOne(lambdaQueryWrapper);
     }
+
+    /**
+     * 维系ProjectUser表中区域主管信息
+     *
+     * @param projectId          项目ID
+     * @param mtCompanyId        维保公司ID
+     * @param userId             区域主管ID
+     * @param projectUserService 数据表服务类
+     */
+    private void maintain(Long projectId, Long mtCompanyId, Long userId, ProjectUserService projectUserService) {
+
+        //三个long 类型对应数据唯一性校验忽略,仅校验空值
+        if (Objects.isNull(projectId) || Objects.isNull(mtCompanyId) || Objects.isNull(userId)
+                || projectId == 0 || mtCompanyId == 0 || userId == 0) {
+            rollbackByException("传入数据异常!");
+        }
+        List<ProjectUser> projectUsers = projectUserService.getBaseMapper().selectList(
+                new QueryWrapper<ProjectUser>()
+                        .lambda()
+                        .eq(ProjectUser::getMtCompanyId, mtCompanyId)
+                        .eq(ProjectUser::getProjectId, projectId)
+                        .eq(ProjectUser::getUserRole, "REGION_DIRECTOR"));
+
+        switch (projectUsers.size()) {
+            case 0:
+                //写入数据
+                if (projectUserService.getBaseMapper().insert(createProjectUser(projectId, mtCompanyId, userId)) != 1) {
+                    rollbackByException("写入project_user数据失败!");
+                }
+                break;
+            case 1:
+                //修改数据
+                ProjectUser updateProjectUser = projectUsers.get(0);
+
+                //判断传入项目主管ID是否和project_user对应的主管ID是否一致
+                if (Objects.equals(userId, updateProjectUser.getUserId())) {
+                    break;
+                }
+
+                updateProjectUser.setUpdateDate(LocalDateTime.now());
+                updateProjectUser.setUserId(userId);
+
+                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, userId));
+
+                if (delCount != projectUsers.size() || 1 != insert) {
+                    rollbackByException("project_user表修改数据失败!");
+                }
+                break;
+        }
+
+
+    }
+
+    /**
+     * 构建ProjectUser
+     *
+     * @param projectId
+     * @param mtCompanyId
+     * @param userId
+     * @return
+     */
+    private ProjectUser createProjectUser(Long projectId, Long mtCompanyId, Long userId) {
+        ProjectUser projectUser = new ProjectUser();
+        projectUser.setUserId(userId);
+        projectUser.setProjectId(projectId);
+        projectUser.setMtCompanyId(mtCompanyId);
+        projectUser.setUserRole("REGION_DIRECTOR");
+        projectUser.setCreateDate(LocalDateTime.now());
+        return projectUser;
+    }
+
+
+    /**
+     * 自定义数据回滚异常
+     *
+     * @param msg
+     */
+    private void rollbackByException(String msg) {
+        throw new RuntimeException(msg);
+    }
 }