diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/CommonOrgController.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/CommonOrgController.java
index c5a53c267..490414d94 100644
--- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/CommonOrgController.java
+++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/CommonOrgController.java
@@ -5,9 +5,12 @@ import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
+import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
import cn.stylefeng.roses.kernel.sys.modular.org.entity.HrOrganization;
+import cn.stylefeng.roses.kernel.sys.modular.org.pojo.request.CommonOrgTreeRequest;
import cn.stylefeng.roses.kernel.sys.modular.org.pojo.request.HrOrganizationRequest;
import cn.stylefeng.roses.kernel.sys.modular.org.service.HrOrganizationService;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@@ -30,13 +33,15 @@ public class CommonOrgController {
* 通用获取组织机构树
*
* ps:用在获取用户管理和组织机构管理界面左侧树
+ *
+ * 如果传递了orgParentId,则为懒加载,传递-1,获取所有一级节点
*
* @author fengshuonan
* @since 2023/6/11 10:31
*/
- @GetResource(name = "通用获取组织机构树", path = "/common/org/tree")
- public ResponseData> commonOrgTree(HrOrganizationRequest hrOrganizationRequest) {
- return new SuccessResponseData<>(hrOrganizationService.commonOrgTree(hrOrganizationRequest));
+ @PostResource(name = "通用获取组织机构树", path = "/common/org/tree")
+ public ResponseData> commonOrgTree(@RequestBody CommonOrgTreeRequest commonOrgTreeRequest) {
+ return new SuccessResponseData<>(hrOrganizationService.commonOrgTree(commonOrgTreeRequest));
}
/**
diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/pojo/request/CommonOrgTreeRequest.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/pojo/request/CommonOrgTreeRequest.java
new file mode 100644
index 000000000..03d21b0f1
--- /dev/null
+++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/pojo/request/CommonOrgTreeRequest.java
@@ -0,0 +1,47 @@
+package cn.stylefeng.roses.kernel.sys.modular.org.pojo.request;
+
+import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
+import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
+import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Set;
+
+/**
+ * 组织机构树的查询条件
+ *
+ * @author fengshuonan
+ * @since 2023/7/13 20:17
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class CommonOrgTreeRequest extends BaseRequest {
+
+ /**
+ * 父级id
+ *
+ * 因为树是懒加载树,所以通过此参数控制查询哪个节点下的所有机构
+ *
+ * 不传此参数,则默认查询所有一级的结构
+ */
+ @ChineseDescription("父级id,一级节点父id是-1")
+ private Long orgParentId = TreeConstants.DEFAULT_PARENT_ID;
+
+ /**
+ * 定位组织机构状态的组织机构id集合
+ *
+ * 当树展开时,更新一个树的基本信息,需要从新定位到展开节点时,就使用此参数
+ */
+ @ChineseDescription("定位组织机构状态的组织机构id集合")
+ private Set indexOrgIdList;
+
+ /**
+ * 是否只查询公司列表
+ *
+ * true-查询结果只返回公司,false-查询结果返回公司或部门,如果没传这个参数,则都返回
+ */
+ @ChineseDescription("是否只查询公司列表")
+ private Boolean companySearchFlag;
+
+}
diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java
index 846d9c538..8f16abd11 100644
--- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java
+++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java
@@ -3,11 +3,13 @@ package cn.stylefeng.roses.kernel.sys.modular.org.service;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.sys.api.pojo.org.CompanyDeptDTO;
import cn.stylefeng.roses.kernel.sys.modular.org.entity.HrOrganization;
+import cn.stylefeng.roses.kernel.sys.modular.org.pojo.request.CommonOrgTreeRequest;
import cn.stylefeng.roses.kernel.sys.modular.org.pojo.request.HrOrganizationRequest;
import cn.stylefeng.roses.kernel.sys.modular.org.pojo.response.HomeCompanyInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
+import java.util.Set;
/**
* 组织机构信息 服务类
@@ -99,7 +101,7 @@ public interface HrOrganizationService extends IService {
* @author fengshuonan
* @since 2023/6/11 10:40
*/
- List commonOrgTree(HrOrganizationRequest hrOrganizationRequest);
+ List commonOrgTree(CommonOrgTreeRequest commonOrgTreeRequest);
/**
* 根据组织机构id,获取对应的具体的公司和部门信息
@@ -142,12 +144,11 @@ public interface HrOrganizationService extends IService {
HomeCompanyInfo orgStatInfo();
/**
- * 获取指定组织机构id的所有子一级的机构
+ * 查询组织机构的所有上级,包括上级的上级组织机构
*
- * @return 返回结果包含参数orgId
* @author fengshuonan
- * @since 2023/6/27 14:33
+ * @since 2023/7/13 20:50
*/
- List getSubOrgIdListOneLevel(Long orgId);
+ Set queryOrgIdParentIdList(Set orgIdList);
}
\ No newline at end of file
diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java
index 2c75f03cd..f09694d0c 100644
--- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java
+++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java
@@ -1,7 +1,6 @@
package cn.stylefeng.roses.kernel.sys.modular.org.service.impl;
import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -23,6 +22,7 @@ import cn.stylefeng.roses.kernel.sys.modular.org.constants.OrgConstants;
import cn.stylefeng.roses.kernel.sys.modular.org.entity.HrOrganization;
import cn.stylefeng.roses.kernel.sys.modular.org.factory.OrganizationFactory;
import cn.stylefeng.roses.kernel.sys.modular.org.mapper.HrOrganizationMapper;
+import cn.stylefeng.roses.kernel.sys.modular.org.pojo.request.CommonOrgTreeRequest;
import cn.stylefeng.roses.kernel.sys.modular.org.pojo.request.HrOrganizationRequest;
import cn.stylefeng.roses.kernel.sys.modular.org.pojo.response.HomeCompanyInfo;
import cn.stylefeng.roses.kernel.sys.modular.org.service.HrOrganizationService;
@@ -187,12 +187,12 @@ public class HrOrganizationServiceImpl extends ServiceImpl commonOrgTree(HrOrganizationRequest hrOrganizationRequest) {
+ public List commonOrgTree(CommonOrgTreeRequest commonOrgTreeRequest) {
// 根据条件查询组织机构列表
- LambdaQueryWrapper wrapper = this.createWrapper(hrOrganizationRequest);
- wrapper.select(HrOrganization::getOrgId, HrOrganization::getOrgParentId, HrOrganization::getOrgPids, HrOrganization::getOrgName,
- HrOrganization::getOrgSort, HrOrganization::getOrgType);
+ LambdaQueryWrapper wrapper = this.createCommonTreeWrapper(commonOrgTreeRequest);
+ wrapper.select(HrOrganization::getOrgId, HrOrganization::getOrgParentId, HrOrganization::getOrgName, HrOrganization::getOrgSort,
+ HrOrganization::getOrgType);
List hrOrganizationList = this.list(wrapper);
if (ObjectUtil.isEmpty(hrOrganizationList)) {
@@ -200,7 +200,7 @@ public class HrOrganizationServiceImpl extends ServiceImpl parentOrgList = new ArrayList<>();
if (ObjectUtil.isNotEmpty(searchText)) {
Set orgParentIdList = OrganizationFactory.getOrgParentIdList(hrOrganizationList);
@@ -352,20 +352,35 @@ public class HrOrganizationServiceImpl extends ServiceImpl getSubOrgIdListOneLevel(Long orgId) {
- LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(HrOrganization::getOrgParentId, orgId);
- wrapper.select(HrOrganization::getOrgId);
- List subOrgList = this.list(wrapper);
+ public Set queryOrgIdParentIdList(Set orgIdList) {
- if (ObjectUtil.isEmpty(subOrgList)) {
- return ListUtil.list(false, orgId);
+ Set parentIdListTotal = new HashSet<>();
+
+ if (ObjectUtil.isEmpty(orgIdList)) {
+ return parentIdListTotal;
}
- List subOrgIdList = subOrgList.stream().map(HrOrganization::getOrgId).collect(Collectors.toList());
- subOrgIdList.add(orgId);
+ LambdaQueryWrapper hrOrganizationLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ hrOrganizationLambdaQueryWrapper.in(HrOrganization::getOrgId, orgIdList);
+ hrOrganizationLambdaQueryWrapper.select(HrOrganization::getOrgPids);
+ List hrOrganizationList = this.list(hrOrganizationLambdaQueryWrapper);
- return subOrgIdList;
+ for (HrOrganization hrOrganization : hrOrganizationList) {
+ String orgPids = hrOrganization.getOrgPids();
+ if (ObjectUtil.isEmpty(orgPids)) {
+ continue;
+ }
+
+ orgPids = orgPids.replaceAll(LEFT_SQUARE_BRACKETS, "");
+ orgPids = orgPids.replaceAll(RIGHT_SQUARE_BRACKETS, "");
+
+ String[] split = orgPids.split(",");
+ for (String pidString : split) {
+ parentIdListTotal.add(Convert.toLong(pidString));
+ }
+ }
+
+ return parentIdListTotal;
}
/**
@@ -411,14 +426,7 @@ public class HrOrganizationServiceImpl extends ServiceImpl subOrgIdListOneLevel = this.getSubOrgIdListOneLevel(orgId);
- queryWrapper.in(HrOrganization::getOrgId, subOrgIdListOneLevel);
- }
-
- // 如果有筛选公司的标识,则只查询公司列表
- Boolean companySearchFlag = hrOrganizationRequest.getCompanySearchFlag();
- if (ObjectUtil.isNotEmpty(companySearchFlag) && companySearchFlag) {
- queryWrapper.eq(HrOrganization::getOrgType, OrgTypeEnum.COMPANY.getCode());
+ queryWrapper.eq(HrOrganization::getOrgParentId, orgId);
}
// 根据排序正序查询
@@ -427,6 +435,43 @@ public class HrOrganizationServiceImpl extends ServiceImpl createCommonTreeWrapper(CommonOrgTreeRequest commonOrgTreeRequest) {
+
+ // 创建基本的wrapper
+ HrOrganizationRequest hrOrganizationRequest = new HrOrganizationRequest();
+ hrOrganizationRequest.setSearchText(commonOrgTreeRequest.getSearchText());
+ LambdaQueryWrapper queryWrapper = this.createWrapper(hrOrganizationRequest);
+
+ // 如果查询条件有orgId,则查询指定机构下的子机构
+ Long parentId = commonOrgTreeRequest.getOrgParentId();
+ if (parentId != null) {
+ queryWrapper.eq(HrOrganization::getOrgParentId, parentId);
+ }
+
+ // 如果有定位状态的组织机构,则需要查询到定位的组织机构的所有子一级
+ Set indexOrgIdList = commonOrgTreeRequest.getIndexOrgIdList();
+ if (ObjectUtil.isNotEmpty(indexOrgIdList)) {
+ Set parentIdListTotal = this.queryOrgIdParentIdList(indexOrgIdList);
+ if (ObjectUtil.isNotEmpty(parentIdListTotal)) {
+ queryWrapper.in(HrOrganization::getOrgParentId, parentIdListTotal);
+ }
+ }
+
+ // 如果有筛选公司的标识,则只查询公司列表
+ Boolean companySearchFlag = commonOrgTreeRequest.getCompanySearchFlag();
+ if (ObjectUtil.isNotEmpty(companySearchFlag) && companySearchFlag) {
+ queryWrapper.eq(HrOrganization::getOrgType, OrgTypeEnum.COMPANY.getCode());
+ }
+
+ return queryWrapper;
+ }
+
/**
* 批量删除组织机构
*