From b027a118f103259b1bb96114200b62f1506992c2 Mon Sep 17 00:00:00 2001 From: dxfeng Date: Thu, 2 Jun 2022 09:58:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E9=97=A8=E5=B7=A6=E4=BE=A7=E6=A0=91?= =?UTF-8?q?=20=E9=83=A8=E9=97=A8=E5=90=8D=E7=A7=B0=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/company/bo/CompBO.java | 3 +- .../entity/department/bo/DepartmentBO.java | 2 +- .../department/param/DeptSearchParam.java | 2 +- .../service/DepartmentService.java | 9 + .../service/impl/DepartmentServiceImpl.java | 177 ++++++++++++++++-- .../service/impl/JobServiceImpl.java | 17 +- .../web/DepartmentController.java | 21 +++ .../wrapper/DepartmentWrapper.java | 11 +- 8 files changed, 217 insertions(+), 25 deletions(-) diff --git a/src/com/engine/organization/entity/company/bo/CompBO.java b/src/com/engine/organization/entity/company/bo/CompBO.java index d81bfb6d..8f7e492b 100644 --- a/src/com/engine/organization/entity/company/bo/CompBO.java +++ b/src/com/engine/organization/entity/company/bo/CompBO.java @@ -1,6 +1,5 @@ package com.engine.organization.entity.company.bo; -import com.api.hrm.bean.TreeNode; import com.engine.organization.entity.company.dto.CompListDTO; import com.engine.organization.entity.company.param.CompSearchParam; import com.engine.organization.entity.company.po.CompPO; @@ -70,7 +69,7 @@ public class CompBO { } - public static List buildSetToSearchTree(Set comps) { + public static List buildSetToSearchTree(Set comps) { return comps.stream().map(item -> { SearchTree tree = new SearchTree(); tree.setCanClick(true); diff --git a/src/com/engine/organization/entity/department/bo/DepartmentBO.java b/src/com/engine/organization/entity/department/bo/DepartmentBO.java index be59ed1e..f9b7688c 100644 --- a/src/com/engine/organization/entity/department/bo/DepartmentBO.java +++ b/src/com/engine/organization/entity/department/bo/DepartmentBO.java @@ -80,7 +80,7 @@ public class DepartmentBO { .builder() .id(param.getId() == null ? 0 : param.getId()) .deptNo(param.getDeptNo()) - .deptName(param.getDeptName()) + .deptName(param.getDepartmentName()) .deptNameShort(param.getDeptNameShort()) .parentComp(param.getParentComp()) .parentDept(param.getParentDept()) diff --git a/src/com/engine/organization/entity/department/param/DeptSearchParam.java b/src/com/engine/organization/entity/department/param/DeptSearchParam.java index 619b9ec1..f17751f9 100644 --- a/src/com/engine/organization/entity/department/param/DeptSearchParam.java +++ b/src/com/engine/organization/entity/department/param/DeptSearchParam.java @@ -21,7 +21,7 @@ public class DeptSearchParam extends BaseQueryParam { private String deptNo; - private String deptName; + private String departmentName; private String deptNameShort; diff --git a/src/com/engine/organization/service/DepartmentService.java b/src/com/engine/organization/service/DepartmentService.java index bd69c703..2eb10131 100644 --- a/src/com/engine/organization/service/DepartmentService.java +++ b/src/com/engine/organization/service/DepartmentService.java @@ -3,6 +3,7 @@ package com.engine.organization.service; import com.engine.organization.entity.department.param.DeptSearchParam; import com.engine.organization.entity.department.param.QuerySingleDeptListParam; import com.engine.organization.entity.department.vo.SingleDeptTreeVO; +import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.util.page.PageInfo; import java.util.Collection; @@ -25,6 +26,13 @@ public interface DepartmentService { */ PageInfo getDeptListByPid(QuerySingleDeptListParam param); + /** + * 列表左侧树 + * + * @return + */ + Map getSearchTree(SearchTreeParams params); + /** * 列表数据展示 * @@ -40,6 +48,7 @@ public interface DepartmentService { * @return */ int saveBaseForm(DeptSearchParam params); + /** * 更新禁用标记 * diff --git a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java index 1819cf7d..f79e9a5c 100644 --- a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java +++ b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java @@ -5,17 +5,22 @@ import com.api.browser.bean.BrowserBean; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.api.browser.bean.SearchConditionOption; +import com.api.hrm.bean.TreeNode; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.organization.component.OrganizationWeaTable; +import com.engine.organization.entity.company.bo.CompBO; +import com.engine.organization.entity.company.po.CompPO; import com.engine.organization.entity.department.bo.DepartmentBO; import com.engine.organization.entity.department.dto.DepartmentListDTO; import com.engine.organization.entity.department.param.DeptSearchParam; import com.engine.organization.entity.department.param.QuerySingleDeptListParam; import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.department.vo.SingleDeptTreeVO; +import com.engine.organization.entity.searchtree.SearchTree; +import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.mapper.comp.CompMapper; import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.mapper.extend.ExtendGroupMapper; @@ -28,6 +33,8 @@ import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.page.Column; import com.engine.organization.util.page.PageInfo; import com.engine.organization.util.page.PageUtil; +import org.apache.commons.collections4.CollectionUtils; +import weaver.conn.RecordSet; import weaver.general.StringUtil; import weaver.general.Util; import weaver.hrm.User; @@ -59,6 +66,15 @@ public class DepartmentServiceImpl extends Service implements DepartmentService */ private static final String JCL_ORG_DEPTEXT_DT1 = "JCL_ORG_DEPTEXT_DT1"; + /** + * 左侧树 类型表示 + *

+ * 0:集团 + * 1:分部 + * 2:部门 + */ + private static final String TYPE_GROUP = "0"; + private DepartmentMapper getDepartmentMapper() { return MapperProxyFactory.getProxy(DepartmentMapper.class); } @@ -83,7 +99,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService //PageUtil.start(param.getCurrent(), param.getPageSize()); List departmentPOS = MapperProxyFactory.getProxy(DepartmentMapper.class).list(); PageInfo pageInfo = new PageInfo<>(departmentPOS); - List singleDeptTreeVOS = DepartmentBO.buildSingleDeptTreeVOS(departmentPOS,param.getParentComp()); + List singleDeptTreeVOS = DepartmentBO.buildSingleDeptTreeVOS(departmentPOS, param.getParentComp()); PageInfo pageInfos = new PageInfo<>(singleDeptTreeVOS, SingleDeptTreeVO.class); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(param.getCurrent()); @@ -92,25 +108,54 @@ public class DepartmentServiceImpl extends Service implements DepartmentService return pageInfos; } + + @Override + public Map getSearchTree(SearchTreeParams params) { + Map dataMap = new HashMap<>(); + SearchTree topGroup = getTopGroup(); + // 集团 + List companyList = new ArrayList<>(); + companyList.add(topGroup); + String keyword = params.getKeyword(); + String type = Util.null2String(params.getType()); + String id = params.getId(); + + List treeDatas = getFilterCompany(id, type, keyword); + // 未点击,初始化树结构 + if (StringUtil.isEmpty(type)) { + dataMap.put("companys", companyList); + SearchTree rootCompany = getTopGroup(); + rootCompany.setSubs(treeDatas); + rootCompany.setIsParent(CollectionUtils.isNotEmpty(rootCompany.getSubs())); + Map rootCompanyMap = new HashMap<>(); + rootCompanyMap.put("rootCompany", rootCompany); + dataMap.put("datas", rootCompanyMap); + } else { + // 根据ID查询 + dataMap.put("datas", treeDatas); + } + return dataMap; + } + @Override public Map listPage(DeptSearchParam param) { Map datas = new HashMap<>(); - DepartmentPO departmentPO = DepartmentBO.convertParamsToPO(param, (long) user.getUID()); + DepartmentPO departmentPO = DepartmentBO.convertParamsToPO(param, user.getUID()); boolean filter = isFilter(departmentPO); PageInfo pageInfos; - List alltList = getDepartmentMapper().list(); + List allList = getDepartmentMapper().list(); // 通过子级遍历父级元素 if (filter) { // 根据条件获取元素 - List filteDeptPOs = getDepartmentMapper().listByFilter(departmentPO); + List filterDeptPOs = getDepartmentMapper().listByFilter(departmentPO); // 添加父级元素 - List compListDTOS = DepartmentBO.buildDeptDTOList(alltList, filteDeptPOs); + List compListDTOS = DepartmentBO.buildDeptDTOList(allList, filterDeptPOs); List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); pageInfos = new PageInfo<>(subList, DepartmentListDTO.class); pageInfos.setTotal(compListDTOS.size()); } else { // 组合list - List compListDTOS = DepartmentBO.buildDeptDTOList(alltList); + List compListDTOS = DepartmentBO.buildDeptDTOList(allList); List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); pageInfos = new PageInfo<>(subList, DepartmentListDTO.class); pageInfos.setTotal(compListDTOS.size()); @@ -138,7 +183,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService public int saveBaseForm(DeptSearchParam params) { List list = getDepartmentMapper().listByNo(Util.null2String(params.getDeptNo())); OrganizationAssert.isEmpty(list, "编号不允许重复"); - DepartmentPO departmentPO = DepartmentBO.convertParamsToPO(params, (long) user.getUID()); + DepartmentPO departmentPO = DepartmentBO.convertParamsToPO(params, user.getUID()); return getDepartmentMapper().insertIgnoreNull(departmentPO); } @@ -152,7 +197,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService public int updateForm(Map params) { DeptSearchParam searchParam = JSONObject.parseObject(JSONObject.toJSONString(params), DeptSearchParam.class); String groupId = (String) params.get("viewCondition"); - DepartmentPO departmentPO = DepartmentBO.convertParamsToPO(searchParam,user.getUID()); + DepartmentPO departmentPO = DepartmentBO.convertParamsToPO(searchParam, user.getUID()); int updateCount = 0; // 更新主表数据 updateCount += getDepartmentMapper().updateBaseDept(departmentPO); @@ -178,7 +223,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService // 编号 SearchConditionItem deptNoItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "编号", "deptNo"); // 名称 - SearchConditionItem deptNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "名称", "deptName"); + SearchConditionItem deptNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "名称", "departmentName"); // 简称 SearchConditionItem deptNameShortItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "简称", "deptNameShort"); // TODO @@ -274,7 +319,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService SearchConditionItem deptNoItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "编号", "deptNo"); deptNoItem.setRules("required|string"); // 名称 - SearchConditionItem deptNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "名称", "deptName"); + SearchConditionItem deptNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "名称", "departmentName"); deptNameItem.setRules("required|string"); // 简称 SearchConditionItem deptNameShortItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "简称", "deptNameShort"); @@ -328,7 +373,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService // 编号 SearchConditionItem deptNoItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 1, 50, "编号", "deptNo"); // 名称 - SearchConditionItem deptNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "名称", "deptName"); + SearchConditionItem deptNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "名称", "departmentName"); deptNameItem.setRules("required|string"); // 简称 SearchConditionItem deptNameShortItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "简称", "deptNameShort"); @@ -411,5 +456,115 @@ public class DepartmentServiceImpl extends Service implements DepartmentService } + /** + * 获取集团 + * + * @return + */ + private SearchTree getTopGroup() { + RecordSet rs = new RecordSet(); + String sql = "select * from HrmCompany "; + rs.executeQuery(sql); + SearchTree groupTree = new SearchTree(); + groupTree.setCanClick(false); + groupTree.setCanceled(false); + groupTree.setCompanyid("1"); + groupTree.setIcon("icon-coms-LargeArea"); + groupTree.setId("0"); + groupTree.setIsVirtual("0"); + while (rs.next()) { + groupTree.setName(rs.getString("COMPANYNAME")); + } + groupTree.setSelected(false); + groupTree.setType(TYPE_GROUP); + return groupTree; + } + + /** + * 根据keyword查询数据 + * + * @param id + * @param type + * @param keyword + * @return + */ + private List getFilterCompany(String id, String type, String keyword) { + List compSearchTree = new ArrayList<>(); + + // + // 查询部门信息 + Long parentCompId = StringUtil.isEmpty(id) ? null : Long.parseLong(id); + CompPO compBuild = CompPO.builder().compName(keyword).parentCompany(parentCompId).build(); + List filterComps = getCompMapper().listByFilter(compBuild); + + Set builderComps = new HashSet<>(); + for (CompPO compPO : filterComps) { + buildParentComps(compPO, builderComps); + } + List compTrees = builderTreeMode(CompBO.buildSetToSearchTree(builderComps)); + + // 排序,设置是否为叶子节点 + List collect = compTrees.stream().peek(item -> + item.setIsParent(CollectionUtils.isNotEmpty(item.getSubs())) + ).sorted(Comparator.comparing(item -> Integer.parseInt(item.getId()))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(collect)) { + compSearchTree.addAll(collect); + } + + return compSearchTree; + } + + /** + * 添加查询元素的父级元素 + * + * @param compPO + * @param builderComps + */ + private void buildParentComps(CompPO compPO, Set builderComps) { + builderComps.add(compPO); + if (isTop(compPO.getParentCompany())) { + return; + } + CompPO parentComp = getCompMapper().listById(compPO.getParentCompany()); + if (null != parentComp) { + buildParentComps(parentComp, builderComps); + } + } + + /** + * 处理树层级 + * + * @param treeList + * @return + */ + private List builderTreeMode(List treeList) { + Map> collects = treeList.stream().collect(Collectors.groupingBy(TreeNode::getPid)); + return treeList.stream().peek(e -> e.setSubs(collects.get(e.getId()))).peek(item -> { + if (CollectionUtils.isNotEmpty(item.getSubs())) { + item.setIsParent(true); + } + }).filter(item -> isTop(item.getPid())).collect(Collectors.toList()); + } + + /** + * 判断是为顶层数据 + * + * @param pid + * @return + */ + private boolean isTop(Long pid) { + return null == pid; + } + + /** + * 判断是为顶层数据 + * + * @param pid + * @return + */ + private boolean isTop(String pid) { + return StringUtil.isEmpty(pid) || "0".equals(pid); + } + } diff --git a/src/com/engine/organization/service/impl/JobServiceImpl.java b/src/com/engine/organization/service/impl/JobServiceImpl.java index 74ba42d7..b8224b9d 100644 --- a/src/com/engine/organization/service/impl/JobServiceImpl.java +++ b/src/com/engine/organization/service/impl/JobServiceImpl.java @@ -15,7 +15,6 @@ import com.engine.organization.entity.DeleteParam; import com.engine.organization.entity.company.bo.CompBO; import com.engine.organization.entity.company.po.CompPO; import com.engine.organization.entity.department.bo.DepartmentBO; -import com.engine.organization.entity.department.dto.DepartmentListDTO; import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.employee.vo.EmployeeTableVO; import com.engine.organization.entity.extend.bo.ExtendInfoBO; @@ -164,22 +163,22 @@ public class JobServiceImpl extends Service implements JobService { // 根据条件获取元素 List filterJobPOs = getJobMapper().listByFilter(jobPO); // 添加父级元素 - List compListDTOS = JobBO.buildJobDTOList(allList, filterJobPOs); - List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); + List jobListDTOS = JobBO.buildJobDTOList(allList, filterJobPOs); + List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), jobListDTOS); pageInfos = new PageInfo<>(subList, JobListDTO.class); - pageInfos.setTotal(compListDTOS.size()); + pageInfos.setTotal(jobListDTOS.size()); } else { // 组合list - List compListDTOS = JobBO.buildDTOList(allList); - List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); + List jobListDTOS = JobBO.buildDTOList(allList); + List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), jobListDTOS); pageInfos = new PageInfo<>(subList, JobListDTO.class); - pageInfos.setTotal(compListDTOS.size()); + pageInfos.setTotal(jobListDTOS.size()); } pageInfos.setPageNum(param.getCurrent()); pageInfos.setPageSize(param.getPageSize()); - OrganizationWeaTable table = new OrganizationWeaTable<>(user, DepartmentListDTO.class); + OrganizationWeaTable table = new OrganizationWeaTable<>(user, JobListDTO.class); List columns = pageInfos.getColumns(); List weaTableColumn = columns.stream().map(v -> new WeaTableColumn("100", v.getTitle(), v.getKey())).collect(Collectors.toList()); @@ -637,7 +636,7 @@ public class JobServiceImpl extends Service implements JobService { * @param deptTrees * @return */ - private List builderTreeMode(List treeList, List deptTrees) { + private List builderTreeMode(List treeList, List deptTrees) { Map> parentMap = treeList.stream().collect(Collectors.groupingBy(TreeNode::getPid)); Map> childMap = deptTrees.stream().collect(Collectors.groupingBy(SearchTree::getParentComp)); boolean isAdd = !childMap.isEmpty(); diff --git a/src/com/engine/organization/web/DepartmentController.java b/src/com/engine/organization/web/DepartmentController.java index 565e2e1f..5d598ab9 100644 --- a/src/com/engine/organization/web/DepartmentController.java +++ b/src/com/engine/organization/web/DepartmentController.java @@ -1,10 +1,13 @@ package com.engine.organization.web; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; import com.engine.organization.entity.DeleteParam; import com.engine.organization.entity.department.param.DeptSearchParam; import com.engine.organization.entity.department.param.QuerySingleDeptListParam; +import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.util.response.ReturnResult; import com.engine.organization.wrapper.DepartmentWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -46,6 +49,24 @@ public class DepartmentController { } } + /** + * 左侧树接口 + * + * @param request + * @param response + * @return + */ + @GET + @Path("/getSearchTree") + @Produces(MediaType.APPLICATION_JSON) + public Map getSearchTree(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + Map map = ParamUtil.request2Map(request); + SearchTreeParams params = JSONObject.toJavaObject((JSON) JSONObject.toJSON(map), SearchTreeParams.class); + return getDepartmentWrapper(user).getSearchTree(params); + + } + /** * 获取list列表 * diff --git a/src/com/engine/organization/wrapper/DepartmentWrapper.java b/src/com/engine/organization/wrapper/DepartmentWrapper.java index 363ae0f4..b154d321 100644 --- a/src/com/engine/organization/wrapper/DepartmentWrapper.java +++ b/src/com/engine/organization/wrapper/DepartmentWrapper.java @@ -5,6 +5,7 @@ import com.engine.core.impl.Service; import com.engine.organization.entity.department.param.DeptSearchParam; import com.engine.organization.entity.department.param.QuerySingleDeptListParam; import com.engine.organization.entity.department.vo.SingleDeptTreeVO; +import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.service.DepartmentService; import com.engine.organization.service.impl.DepartmentServiceImpl; import com.engine.organization.util.page.PageInfo; @@ -30,7 +31,15 @@ public class DepartmentWrapper extends Service { PageInfo singleDeptTreeVOS = getDepartmentService(user).getDeptListByPid(param); return ReturnResult.successed(singleDeptTreeVOS); } - + /** + * 左侧树 + * + * @param params + * @return + */ + public Map getSearchTree(SearchTreeParams params) { + return getDepartmentService(user).getSearchTree(params); + } /** * 列表数据展示 *