diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/CommonOrgController.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/CommonOrgController.java
new file mode 100644
index 000000000..308719d1b
--- /dev/null
+++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/CommonOrgController.java
@@ -0,0 +1,41 @@
+package cn.stylefeng.roses.kernel.sys.modular.org.controller;
+
+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.sys.modular.org.entity.HrOrganization;
+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.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 通用组织机构接口
+ *
+ * @author fengshuonan
+ * @since 2023/6/11 10:04
+ */
+@RestController
+@ApiResource(name = "通用组织机构接口")
+public class CommonOrgController {
+
+ @Resource
+ private HrOrganizationService hrOrganizationService;
+
+ /**
+ * 通用获取组织机构树
+ *
+ * ps:用在获取用户管理和组织机构管理界面左侧树
+ *
+ * @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));
+ }
+
+}
diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/HrOrgApproverController.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/bak/HrOrgApproverController.java
similarity index 98%
rename from kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/HrOrgApproverController.java
rename to kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/bak/HrOrgApproverController.java
index 2133794ae..b3f91a3d6 100644
--- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/HrOrgApproverController.java
+++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/bak/HrOrgApproverController.java
@@ -1,4 +1,4 @@
-package cn.stylefeng.roses.kernel.sys.modular.org.controller;
+package cn.stylefeng.roses.kernel.sys.modular.org.controller.bak;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/HrOrganizationController.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/bak/HrOrganizationController.java
similarity index 98%
rename from kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/HrOrganizationController.java
rename to kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/bak/HrOrganizationController.java
index f99bbe30a..7fb1ed29d 100644
--- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/HrOrganizationController.java
+++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/controller/bak/HrOrganizationController.java
@@ -1,4 +1,4 @@
-package cn.stylefeng.roses.kernel.sys.modular.org.controller;
+package cn.stylefeng.roses.kernel.sys.modular.org.controller.bak;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/entity/HrOrganization.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/entity/HrOrganization.java
index 1f15ec0d2..3199bf3fe 100644
--- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/entity/HrOrganization.java
+++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/entity/HrOrganization.java
@@ -1,7 +1,8 @@
package cn.stylefeng.roses.kernel.sys.modular.org.entity;
-import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
+import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseExpandFieldEntity;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
+import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -10,6 +11,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
+import java.util.List;
/**
* 组织机构信息实例类
@@ -17,10 +19,10 @@ import java.math.BigDecimal;
* @author fengshuonan
* @date 2023/06/10 21:23
*/
-@TableName("hr_organization")
+@TableName(value = "hr_organization", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
-public class HrOrganization extends BaseEntity {
+public class HrOrganization extends BaseExpandFieldEntity implements AbstractTreeNode {
/**
* 主键
@@ -120,32 +122,37 @@ public class HrOrganization extends BaseEntity {
@ChineseDescription("对接外部主数据的父级机构id")
private String masterOrgParentId;
- /**
- * 拓展字段
- */
- @TableField("expand_field")
- @ChineseDescription("拓展字段")
- private String expandField;
+ //-------------------------------非实体字段-------------------------------
+ //-------------------------------非实体字段-------------------------------
+ //-------------------------------非实体字段-------------------------------
/**
- * 乐观锁
+ * 子节点的集合
*/
- @TableField("version_flag")
- @ChineseDescription("乐观锁")
- private Long versionFlag;
+ @ChineseDescription("子节点的集合")
+ private List children;
- /**
- * 删除标记:Y-已删除,N-未删除
- */
- @TableField("del_flag")
- @ChineseDescription("删除标记:Y-已删除,N-未删除")
- private String delFlag;
+ @Override
+ public String getNodeId() {
+ if (this.orgId == null) {
+ return null;
+ } else {
+ return this.orgId.toString();
+ }
+ }
- /**
- * 租户号
- */
- @TableField("tenant_id")
- @ChineseDescription("租户号")
- private Long tenantId;
+ @Override
+ public String getNodeParentId() {
+ if (this.orgParentId == null) {
+ return null;
+ } else {
+ return this.orgParentId.toString();
+ }
+ }
+
+ @Override
+ public void setChildrenNodes(List childrenNodes) {
+ this.children = childrenNodes;
+ }
}
diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/factory/OrganizationFactory.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/factory/OrganizationFactory.java
new file mode 100644
index 000000000..9777f1706
--- /dev/null
+++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/factory/OrganizationFactory.java
@@ -0,0 +1,47 @@
+package cn.stylefeng.roses.kernel.sys.modular.org.factory;
+
+import cn.hutool.core.convert.Convert;
+import cn.stylefeng.roses.kernel.sys.modular.org.entity.HrOrganization;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 组织机构创建工厂
+ *
+ * @author fengshuonan
+ * @since 2023/6/11 11:22
+ */
+public class OrganizationFactory {
+
+ /**
+ * 通过组织机构列表,获取这个组织机构列表的所有父级id集合
+ *
+ * @author fengshuonan
+ * @since 2023/6/11 11:22
+ */
+ public static Set getOrgParentIdList(List organizationList) {
+
+ Set orgIdList = new HashSet<>();
+
+ for (HrOrganization hrOrganization : organizationList) {
+ String orgParentIdListStr = hrOrganization.getOrgPids();
+
+ // 去掉中括号符号
+ orgParentIdListStr = orgParentIdListStr.replaceAll("\\[", "");
+ orgParentIdListStr = orgParentIdListStr.replaceAll("]", "");
+
+ // 获取所有上级id列表
+ String[] orgParentIdList = orgParentIdListStr.split(",");
+
+ for (String orgIdStr : orgParentIdList) {
+ Long orgId = Convert.toLong(orgIdStr);
+ orgIdList.add(orgId);
+ }
+ }
+
+ return orgIdList;
+ }
+
+}
diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java
index 1732c2941..426d8b710 100644
--- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java
+++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/HrOrganizationService.java
@@ -15,7 +15,7 @@ import java.util.List;
*/
public interface HrOrganizationService extends IService {
- /**
+ /**
* 新增
*
* @param hrOrganizationRequest 请求参数
@@ -24,7 +24,7 @@ public interface HrOrganizationService extends IService {
*/
void add(HrOrganizationRequest hrOrganizationRequest);
- /**
+ /**
* 删除
*
* @param hrOrganizationRequest 请求参数
@@ -33,7 +33,7 @@ public interface HrOrganizationService extends IService {
*/
void del(HrOrganizationRequest hrOrganizationRequest);
- /**
+ /**
* 编辑
*
* @param hrOrganizationRequest 请求参数
@@ -42,7 +42,7 @@ public interface HrOrganizationService extends IService {
*/
void edit(HrOrganizationRequest hrOrganizationRequest);
- /**
+ /**
* 查询详情
*
* @param hrOrganizationRequest 请求参数
@@ -51,24 +51,34 @@ public interface HrOrganizationService extends IService {
*/
HrOrganization detail(HrOrganizationRequest hrOrganizationRequest);
- /**
+ /**
* 获取列表
*
- * @param hrOrganizationRequest 请求参数
+ * @param hrOrganizationRequest 请求参数
* @return List 返回结果
* @author fengshuonan
* @date 2023/06/10 21:23
*/
List findList(HrOrganizationRequest hrOrganizationRequest);
- /**
+ /**
* 获取列表(带分页)
*
- * @param hrOrganizationRequest 请求参数
+ * @param hrOrganizationRequest 请求参数
* @return PageResult 返回结果
* @author fengshuonan
* @date 2023/06/10 21:23
*/
PageResult findPage(HrOrganizationRequest hrOrganizationRequest);
+ /**
+ * 通用获取组织机构树
+ *
+ * ps:用在获取用户管理和组织机构管理界面左侧树
+ *
+ * @author fengshuonan
+ * @since 2023/6/11 10:40
+ */
+ List commonOrgTree(HrOrganizationRequest hrOrganizationRequest);
+
}
\ No newline at end of file
diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java
index 70e11f640..6552624a1 100644
--- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java
+++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/org/service/impl/HrOrganizationServiceImpl.java
@@ -2,12 +2,15 @@ package cn.stylefeng.roses.kernel.sys.modular.org.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
+import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.sys.modular.org.entity.HrOrganization;
import cn.stylefeng.roses.kernel.sys.modular.org.enums.HrOrganizationExceptionEnum;
+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.HrOrganizationRequest;
import cn.stylefeng.roses.kernel.sys.modular.org.service.HrOrganizationService;
@@ -16,8 +19,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
-import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
/**
* 组织机构信息业务实现层
@@ -28,7 +32,7 @@ import java.util.List;
@Service
public class HrOrganizationServiceImpl extends ServiceImpl implements HrOrganizationService {
- @Override
+ @Override
public void add(HrOrganizationRequest hrOrganizationRequest) {
HrOrganization hrOrganization = new HrOrganization();
BeanUtil.copyProperties(hrOrganizationRequest, hrOrganization);
@@ -53,6 +57,12 @@ public class HrOrganizationServiceImpl extends ServiceImpl findList(HrOrganizationRequest hrOrganizationRequest) {
+ LambdaQueryWrapper wrapper = this.createWrapper(hrOrganizationRequest);
+ return this.list(wrapper);
+ }
+
@Override
public PageResult findPage(HrOrganizationRequest hrOrganizationRequest) {
LambdaQueryWrapper wrapper = createWrapper(hrOrganizationRequest);
@@ -61,9 +71,33 @@ public class HrOrganizationServiceImpl extends ServiceImpl findList(HrOrganizationRequest hrOrganizationRequest) {
+ public List commonOrgTree(HrOrganizationRequest hrOrganizationRequest) {
+
+ // 根据条件查询组织机构列表
LambdaQueryWrapper wrapper = this.createWrapper(hrOrganizationRequest);
- return this.list(wrapper);
+ wrapper.select(HrOrganization::getOrgId, HrOrganization::getOrgParentId, HrOrganization::getOrgPids,
+ HrOrganization::getOrgName, HrOrganization::getOrgSort, HrOrganization::getOrgType);
+ List hrOrganizationList = this.list(wrapper);
+
+ if (ObjectUtil.isEmpty(hrOrganizationList)) {
+ return hrOrganizationList;
+ }
+
+ // 如果查询条件不为空,则把相关的查询结果的父级也查询出来,组成一颗完整树
+ String searchText = hrOrganizationRequest.getSearchText();
+ List parentOrgList = new ArrayList<>();
+ if (ObjectUtil.isNotEmpty(searchText)) {
+ Set orgParentIdList = OrganizationFactory.getOrgParentIdList(hrOrganizationList);
+ LambdaQueryWrapper parentWrapper = new LambdaQueryWrapper<>();
+ parentWrapper.in(HrOrganization::getOrgId, orgParentIdList);
+ parentOrgList = this.list(parentWrapper);
+ }
+
+ // 合并两个集合
+ hrOrganizationList.addAll(parentOrgList);
+
+ // 构建树形结构
+ return new DefaultTreeBuildFactory().doTreeBuild(hrOrganizationList);
}
/**
@@ -89,43 +123,18 @@ public class HrOrganizationServiceImpl extends ServiceImpl createWrapper(HrOrganizationRequest hrOrganizationRequest) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- Long orgId = hrOrganizationRequest.getOrgId();
- Long orgParentId = hrOrganizationRequest.getOrgParentId();
- String orgPids = hrOrganizationRequest.getOrgPids();
- String orgName = hrOrganizationRequest.getOrgName();
- String orgShortName = hrOrganizationRequest.getOrgShortName();
- String orgCode = hrOrganizationRequest.getOrgCode();
- BigDecimal orgSort = hrOrganizationRequest.getOrgSort();
- Integer statusFlag = hrOrganizationRequest.getStatusFlag();
- Integer orgType = hrOrganizationRequest.getOrgType();
- String taxNo = hrOrganizationRequest.getTaxNo();
- String remark = hrOrganizationRequest.getRemark();
- Integer orgLevel = hrOrganizationRequest.getOrgLevel();
- String masterOrgId = hrOrganizationRequest.getMasterOrgId();
- String masterOrgParentId = hrOrganizationRequest.getMasterOrgParentId();
- String expandField = hrOrganizationRequest.getExpandField();
- Long versionFlag = hrOrganizationRequest.getVersionFlag();
- String delFlag = hrOrganizationRequest.getDelFlag();
- Long tenantId = hrOrganizationRequest.getTenantId();
+ // 如果按文本查询条件不为空,则判断组织机构名称、简称、税号、备注是否有匹配
+ String searchText = hrOrganizationRequest.getSearchText();
+ if (StrUtil.isNotEmpty(searchText)) {
+ queryWrapper.like(HrOrganization::getOrgName, searchText);
+ queryWrapper.or().like(HrOrganization::getOrgShortName, searchText);
+ queryWrapper.or().like(HrOrganization::getTaxNo, searchText);
+ queryWrapper.or().like(HrOrganization::getOrgCode, searchText);
+ queryWrapper.or().like(HrOrganization::getRemark, searchText);
+ }
- queryWrapper.eq(ObjectUtil.isNotNull(orgId), HrOrganization::getOrgId, orgId);
- queryWrapper.eq(ObjectUtil.isNotNull(orgParentId), HrOrganization::getOrgParentId, orgParentId);
- queryWrapper.like(ObjectUtil.isNotEmpty(orgPids), HrOrganization::getOrgPids, orgPids);
- queryWrapper.like(ObjectUtil.isNotEmpty(orgName), HrOrganization::getOrgName, orgName);
- queryWrapper.like(ObjectUtil.isNotEmpty(orgShortName), HrOrganization::getOrgShortName, orgShortName);
- queryWrapper.like(ObjectUtil.isNotEmpty(orgCode), HrOrganization::getOrgCode, orgCode);
- queryWrapper.eq(ObjectUtil.isNotNull(orgSort), HrOrganization::getOrgSort, orgSort);
- queryWrapper.eq(ObjectUtil.isNotNull(statusFlag), HrOrganization::getStatusFlag, statusFlag);
- queryWrapper.eq(ObjectUtil.isNotNull(orgType), HrOrganization::getOrgType, orgType);
- queryWrapper.like(ObjectUtil.isNotEmpty(taxNo), HrOrganization::getTaxNo, taxNo);
- queryWrapper.like(ObjectUtil.isNotEmpty(remark), HrOrganization::getRemark, remark);
- queryWrapper.eq(ObjectUtil.isNotNull(orgLevel), HrOrganization::getOrgLevel, orgLevel);
- queryWrapper.like(ObjectUtil.isNotEmpty(masterOrgId), HrOrganization::getMasterOrgId, masterOrgId);
- queryWrapper.like(ObjectUtil.isNotEmpty(masterOrgParentId), HrOrganization::getMasterOrgParentId, masterOrgParentId);
- queryWrapper.like(ObjectUtil.isNotEmpty(expandField), HrOrganization::getExpandField, expandField);
- queryWrapper.eq(ObjectUtil.isNotNull(versionFlag), HrOrganization::getVersionFlag, versionFlag);
- queryWrapper.like(ObjectUtil.isNotEmpty(delFlag), HrOrganization::getDelFlag, delFlag);
- queryWrapper.eq(ObjectUtil.isNotNull(tenantId), HrOrganization::getTenantId, tenantId);
+ // 根据排序正序查询
+ queryWrapper.orderByAsc(HrOrganization::getOrgSort);
return queryWrapper;
}