diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreMemTreeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreMemTreeService.java index 508ebe1..a0ab1e5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreMemTreeService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreMemTreeService.java @@ -130,6 +130,10 @@ public interface ICoreMemTreeService { @ApiOperation(value = "查询部门子节点",notes = "查询字节点部门ID") List findChildSysDepartment(SysDepartment organize); + + @ApiOperation(value = "查询部门子节点",notes = "查询字节点部门ID") + List findSysDepartmentChildIdList(Long id); + /********************************************* End SysDepartment Tree *********************************************/ /********************************************* Start SysMenu Tree *********************************************/ 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 67dc2a5..32770ca 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 @@ -111,12 +111,17 @@ public interface IPersonnelService { @ApiOperation(value = "查询账号部门关系") List findSysRefUserDepartmentByUserId(Long userId); + List findSysRefUserDepartmentByOrganizeIdList(List organizeIdList); + @ApiOperation(value = "查询账号部门关系") List querySysRefUserDepartmentByUserDetailModel(UserDetailModel model); @ApiOperation(value = "查询用户部门关系") List findSysRefUserInfoDepartmentById(Long infoId); + List findSysRefUserInfoDepartmentByOrganizeIdList(List organizeIdList); + + @ApiOperation(value = "查询用户部门关系") List findSysUserInfoDepartmentByInfoId(Long infoId); @@ -124,7 +129,7 @@ public interface IPersonnelService { List findSysUserDepartmentByInfoId(Long infoId); @ApiOperation(value = "查询所有部门信息") - List findSysUserDepartmentList(); + List findSysDepartmentList(); @ApiOperation(value = "查询用户部门关系") List findSysUserInfoOrganize(Long infoId); diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java index d5e02e5..184ec50 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysDepartmentService.java @@ -79,7 +79,10 @@ public interface ISysDepartmentService { ListPager findSysDepartmentByPager(SysDepartment department, Pager pager); @ApiOperation(value = "查询部门信息",notes = "查询部门信息(分页、组织ID集合、组合)") - ListPager findSysDepartmentByPager(SysDepartment department,List organizeIdList, Pager pager); + ListPager findSysDepartmentPagerByOrganizeId(SysDepartment department, List organizeIdList, Pager pager); + + @ApiOperation(value = "查询部门信息",notes = "查询部门信息(分页、组织ID集合、组合)") + ListPager findSysDepartmentPagerByIdList(SysDepartment department, List idList, Pager pager); /** * 获取部门数量 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java index 634609f..a590924 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java @@ -1,8 +1,6 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; -import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysDepartmentService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysOrganizeService; +import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.StringTool; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; @@ -13,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.i3plus.pojo.platform.bean.SysDepartment; import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserDepartment; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -22,11 +21,14 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; /** @@ -49,8 +51,14 @@ public class SysDepartmentController extends CoreBaseController { private ICoreTreeService coreTreeService; @Autowired + private ICoreMemTreeService memTreeService; + + @Autowired private ISysOrganizeService organizeService; + @Autowired + private IPersonnelService personnelService; + /** * 添加部门 * @param department 部门 @@ -171,20 +179,46 @@ public class SysDepartmentController extends CoreBaseController { @ApiOperation(value = "查询部门", notes = "组合查询部门信息外加分页信息") public ResultBean querySysDepartment(SysDepartment department, Pager pager) { try { - ListPager list = null; - if(department.getOrganizeId() != null){ - SysOrganize organize = organizeService.getSysOrganizeById(department.getOrganizeId()); - if(organize != null){ - coreTreeService.findSysOrganizeChildrenTreePack(organize,0); - List childIds = coreTreeService.findSysOrganizeChildIds(organize); - list = departmentService.findSysDepartmentByPager(department,childIds, pager); + ListPager result = null; + List refIds = new ArrayList<>(); + List refFilterIds = new ArrayList<>(); + + // 通过组织获取部门信息 + if (department.getOrganizeId() != null && department.getOrganizeId() > 0) { + List organizeIdList = memTreeService.findSysOrganizeChildIdList(department.getOrganizeId()); + List refUserDepartmentList = personnelService.findSysRefUserDepartmentByOrganizeIdList(organizeIdList); + if (refUserDepartmentList != null && refUserDepartmentList.size() > 0) { + for (SysRefUserDepartment ref : refUserDepartmentList) { + refIds.add(ref.getDepartmentId()); + } + } + } + + // 通过父节点查询部门信息 + if (department.getParentId() != null && department.getParentId() > 0) { + List departmentIdList = memTreeService.findSysDepartmentChildIdList(department.getParentId()); + if (departmentIdList != null && departmentIdList.size() > 0) { + refIds.addAll(departmentIdList); + } + } + + // 用户所拥有的权限 + if (!AuthUtil.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN)) { + List refList = personnelService.findSysRefUserDepartmentByUserId(getSessionUser().getUser().getId()); + if (refList != null && refList.size() > 0) { + refList.forEach(ref -> refFilterIds.add(ref.getDepartmentId())); + } + + if(refIds.size() <= 0){ + refIds = refFilterIds; }else { - return ResultBean.fail("不存在组织信息").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + // List 取交集 + refIds = (ArrayList) CollectionUtils.intersection(refIds, refFilterIds); } - }else{ - list = departmentService.findSysDepartmentByPager(department, pager); } - return ResultBean.success("操作成功").setListPager(list).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + + result = departmentService.findSysDepartmentPagerByIdList(department, new ArrayList<>(refIds), pager); + return ResultBean.success("操作成功").setListPager(result).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); } catch (Exception e) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreMemTreeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreMemTreeService.java index dad4c69..ecbe064 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreMemTreeService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreMemTreeService.java @@ -4,10 +4,8 @@ import cn.estsh.i3plus.core.api.iservice.busi.ICoreMemTreeService; import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ModelEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.model.platform.CommonTreeModel; import cn.estsh.i3plus.pojo.platform.bean.*; -import cn.estsh.impp.framework.boot.util.ResultBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -288,7 +286,7 @@ public class CoreMemTreeService implements ICoreMemTreeService { @Override public List packTreeTreeModelRoot() { List organizeList = personnelService.findSysOrganizeList(); - List departmentList = personnelService.findSysUserDepartmentList(); + List departmentList = personnelService.findSysDepartmentList(); organizeList = packTreeSysOrganize(organizeList, CommonEnumUtil.PARENT.DEFAULT.getValue()); departmentList = packTreeSysDepartment(departmentList, CommonEnumUtil.PARENT.DEFAULT.getValue()); @@ -308,7 +306,7 @@ public class CoreMemTreeService implements ICoreMemTreeService { // 分装组织树 List organizeList = personnelService.findSysOrganizeList(); // 分装部门树 - List departmentList = personnelService.findSysUserDepartmentList(); + List departmentList = personnelService.findSysDepartmentList(); // 分装组合树 result = packTreeTreeModelByRefUserDepartment(organizeList, departmentList, refList); } @@ -464,6 +462,22 @@ public class CoreMemTreeService implements ICoreMemTreeService { return result; } + + @Override + public List findSysDepartmentChildIdList(Long id) { + SysDepartment department = personnelService.getSysDepartmentById(id); + if(department != null){ + List list = personnelService.findSysDepartmentList(); + if(list != null && list.size() > 0){ + SysDepartment treeDep = packTreeSysDepartmentById(list, department.getId()); + List idList = findChildSysDepartment(treeDep); + idList.add(department.getId()); + return idList; + } + } + return null; + } + /********************************************* End SysDepartment Tree *********************************************/ /********************************************* Start SysMenu Tree *********************************************/ 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 62c875a..146ba41 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 @@ -13,6 +13,7 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack; import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; import cn.estsh.i3plus.pojo.platform.bean.*; @@ -345,6 +346,16 @@ public class PersonnelServiceService implements IPersonnelService { } @Override + public List findSysRefUserDepartmentByOrganizeIdList(List organizeIdList) { + LOGGER.info("平台账号部门 SysRefUserDepartment organizeIdList:{}", organizeIdList); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(organizeIdList,"organizeId",packBean); + + return refUserDepartmentRDao.findByHqlWhere(packBean); + } + + @Override public List querySysRefUserDepartmentByUserDetailModel(UserDetailModel model) { if(model != null){ StringBuffer userIdWhere = new StringBuffer(); @@ -369,6 +380,16 @@ public class PersonnelServiceService implements IPersonnelService { } @Override + public List findSysRefUserInfoDepartmentByOrganizeIdList(List organizeIdList) { + LOGGER.info("平台账号部门 SysRefUserDepartment organizeIdList:{}", organizeIdList); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getInPackList(organizeIdList,"organizeId",packBean); + + return refUserInfoDepartmentRDao.findByHqlWhere(packBean); + } + + @Override @ApiOperation(value = "查询用户部门关系") public List findSysUserInfoDepartmentByInfoId(Long infoId) { LOGGER.info("平台用户部门 SysDepartment infoId:{}", infoId); @@ -405,7 +426,7 @@ public class PersonnelServiceService implements IPersonnelService { } @Override - public List findSysUserDepartmentList() { + public List findSysDepartmentList() { LOGGER.info("平台用户部门 SysOrganize Find All"); return departmentRDao.findByProperty( new String[]{"isDeleted","isValid"}, diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java index db708db..c0c6122 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysDepartmentService.java @@ -2,6 +2,7 @@ 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.ISysDepartmentService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; @@ -218,14 +219,13 @@ public class SysDepartmentService implements ISysDepartmentService { } @Override - public ListPager findSysDepartmentByPager(SysDepartment department, List organizeIdList, Pager pager) { + public ListPager findSysDepartmentPagerByOrganizeId(SysDepartment department, List organizeIdList, Pager pager) { LOGGER.info("部门信息 DEPARTMENT department :{} organizeIdList:{}", department, organizeIdList); if (department == null) { pager = PagerHelper.getPager(pager, departmentRDao.listCount()); return new ListPager(departmentRDao.listPager(pager), pager); } else { - String hqlPack = CoreHqlPack.packHqlSysDepartment(department); hqlPack += CoreHqlPack.packHqlIds("organizeId", organizeIdList.toArray(new Long[organizeIdList.size()])); @@ -235,6 +235,13 @@ public class SysDepartmentService implements ISysDepartmentService { } @Override + public ListPager findSysDepartmentPagerByIdList(SysDepartment department, List idList, Pager pager) { + DdlPackBean packBean = CoreHqlPack.packDdlBeanSysDepartment(department, idList); + pager = PagerHelper.getPager(pager, departmentRDao.findByHqlWhereCount(packBean)); + return new ListPager(departmentRDao.findByHqlWherePage(packBean , pager), pager); + } + + @Override public long getSysDepartmentCount() { return departmentRDao.listCount(); }