From 5849222d23b45ba5e9bdc71b2dc4c0532fa3b32b Mon Sep 17 00:00:00 2001 From: "wei.peng" Date: Fri, 28 Dec 2018 20:18:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B2=97=E4=BD=8D=E5=86=97=E4=BD=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/busi/IPersonnelService.java | 4 ++ .../serviceimpl/busi/CoreTreeService.java | 14 +++- .../serviceimpl/busi/PersonnelServiceService.java | 83 ++++++++++++++++++++++ .../serviceimpl/busi/SysPositionService.java | 40 ++++------- 4 files changed, 114 insertions(+), 27 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java index e4293e8..e2b8a15 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/IPersonnelService.java @@ -98,6 +98,9 @@ public interface IPersonnelService { @ApiOperation(value = "重置密码检查") Integer checkSysUserResetPassword(SysUser user); + @ApiOperation(value = "岗位关系检查") + void checkSysPositionRef(Long positionId); + @ApiOperation(value = "刷新组织冗余") void refreshRefSysUserOrganizeRdd(Long organizeIds); @@ -117,6 +120,7 @@ public interface IPersonnelService { @ApiOperation(value = "刷新用户岗位") void refreshRefSysUserInfoPosition(Long userInfoId, Long[] positionIds); + @ApiOperation(value = "刷新用户岗位") void refreshRefSysUserInfoPositionRdd(Long positionId); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java index 242128b..6e6bc54 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java @@ -103,8 +103,18 @@ public class CoreTreeService implements ICoreTreeService { @Override @ApiOperation(value = "父节点检查",notes = "检查岗位的父节点是否是当前节点的子节点") public void doValidatorSysPositionParentId(SysPosition position) { - findSysPositionChildrenTreePack(position,0); - validatorSysPositionParentId(position.getChildList(),position.getParentId()); + if(position != null){ + if(position.getParentId().longValue() == position.getId().longValue()){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级岗位不能为当前岗位") + .setErrorSolution("请重新操作") + .build(); + } + findSysPositionChildrenTreePack(position,0); + validatorSysPositionParentId(position.getChildList(),position.getParentId()); + } } @Override diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java index 3eb604b..21a4f45 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/PersonnelServiceService.java @@ -364,6 +364,43 @@ public class PersonnelServiceService implements IPersonnelService { return num; } + @Override + public void checkSysPositionRef(Long positionId) { + LOGGER.debug("平台岗位 SysPosition positionId:{}", positionId); + + if(positionId != null){ + long positionCount = positionRDao.findByPropertyCount("parentId",positionId); + if (positionCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在相关岗位信息无法删除!") + .setErrorSolution("请先删除子集信息在操作") + .build(); + } + + long refPositionCount = refUserPositionRDao.findByPropertyCount("positionId",positionId); + if (refPositionCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在用户关系引用信息无法删除!") + .setErrorSolution("请先删除用户关系信息再操作") + .build(); + } + + long refUserInfoCount = userInfoRDao.findByPropertyCount("positionId",positionId); + if (refUserInfoCount >= 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("存在用户信息无法删除!") + .setErrorSolution("请先删除用户引用信息再操作") + .build(); + } + } + } + /************************************ 用户唯一检查 ****************************************/ /** @@ -660,6 +697,52 @@ public class PersonnelServiceService implements IPersonnelService { @Override public void refreshRefSysUserInfoPositionRdd(Long positionId) { + List result = new ArrayList<>(); // 需要更新的用户ID 集合 + + // 更新关系表中数据 + if(positionId != null){ + SysPosition position = positionRDao.getById(positionId); + if(position != null){ + List list = refUserPositionRDao.findByProperty("positionId", position.getId()); + if(list != null && list.size() > 0){ + + // 更新关系表中的冗余信息 + refUserPositionRDao.updateByProperties( + "positionId",position.getId(), + "positionNameRdd", position.getName()); + + // 更新父节点冗余信息 + positionRDao.updateByProperties("parentId",position.getId(), + "parentNameRdd",position.getName()); + + for (SysRefUserPosition ref : list) { + result.add(ref.getUserId()); + } + } + } + } + // 删除关系表中数据 + refUserPositionRDao.deleteByProperty("positionId", positionId); + + // 获取需要更新的用户 + StringBuffer strWhere = new StringBuffer(); + List nameList = null; + HqlPack.getInPack(StringUtils.join(result, ","), "userId", strWhere); + List infoList = userInfoRDao.findByHqlWhere(strWhere.toString()); + + // 更新用户的冗余信息 + if(infoList != null && infoList.size() > 0){ + for (SysUserInfo info : infoList) { + List list = refUserPositionRDao.findByProperty("userId", info.getId()); + if (list != null) { + for (SysRefUserPosition ref : list) { + nameList.add(ref.getPositionNameRdd()); + } + } + info.setPositionNamesRdd(StringUtils.join(nameList, ",")); + userInfoRDao.save(info); + } + } } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java index d90808a..b0275d7 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPositionService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; import cn.estsh.i3plus.core.api.iservice.busi.ISysPositionService; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -40,6 +41,9 @@ public class SysPositionService implements ISysPositionService { @Autowired private SysUserRepository sysUserRDao; + @Autowired + private IPersonnelService personnelService; + @Override @ApiOperation(value = "新增岗位信息") public SysPosition insertSysPosition(SysPosition position) { @@ -105,45 +109,31 @@ public class SysPositionService implements ISysPositionService { LOGGER.info("岗位信息 POSITION position:{}", position); positionRDao.update(position); // 修改冗余信息 - positionRDao.updateByProperties("parentId",position.getId(), - "parentNameRdd",position.getName()); + personnelService.refreshRefSysUserInfoPositionRdd(position.getId()); } @Override @ApiOperation(value = "删除岗位信息",notes = "根据ID 删除岗位信息") public void deleteSysPositionById(Long id) { - // 查询是否存在子级 LOGGER.info("岗位信息 POSITION id:{}", id); - long positionCount = positionRDao.findByPropertyCount("parentId",id); - if (positionCount >= 1) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("存在相关岗位信息无法删除!") - .setErrorSolution("请先删除子集信息在操作") - .build(); - } + personnelService.checkSysPositionRef(id); - // 删除岗位信息 - LOGGER.info("岗位信息 POSITION id:{}", id); positionRDao.deleteById(id); + personnelService.refreshRefSysUserInfoPositionRdd(id); } @Override @ApiOperation(value = "删除岗位信息",notes = "根据ID 批量删除岗位信息") public void deleteSysPositionByIds(Long[] ids) { LOGGER.info("岗位信息 POSITION ids:{}", ids); - long positionCount = positionRDao.findByHqlWhereCount(CoreHqlPack.packHqlIds("parentId",ids)); - // 判断是否有子节点 - if (positionCount <= 0) { - positionRDao.deleteByIds(ids); - }else { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("存在相关岗位信息无法删除!") - .setErrorSolution("请重新操作") - .build(); + // 检查是否存在引用关系 + for (Long id : ids) { + personnelService.checkSysPositionRef(id); + } + positionRDao.deleteByIds(ids); + + for (Long id : ids) { + personnelService.refreshRefSysUserInfoPositionRdd(id); } }