package com.engine.organization.service.impl; import com.alibaba.fastjson.JSONObject; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.api.browser.bean.SearchConditionOption; 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.hrm.entity.RuleCodeType; import com.engine.organization.component.OrganizationWeaTable; import com.engine.organization.entity.codesetting.po.CodeRulePO; 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.*; import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.department.vo.SingleDeptTreeVO; import com.engine.organization.entity.extend.po.ExtendTitlePO; import com.engine.organization.entity.job.bo.JobBO; import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.job.vo.SingleJobTreeVO; import com.engine.organization.entity.searchtree.SearchTree; import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.enums.LogModuleNameEnum; import com.engine.organization.enums.OperateTypeEnum; import com.engine.organization.mapper.codesetting.CodeRuleMapper; import com.engine.organization.mapper.comp.CompMapper; import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.mapper.extend.ExtDTMapper; import com.engine.organization.mapper.extend.ExtMapper; import com.engine.organization.mapper.extend.ExtendTitleMapper; import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.service.DepartmentService; import com.engine.organization.service.ExtService; import com.engine.organization.thread.OrganizationRunable; import com.engine.organization.util.*; import com.engine.organization.util.coderule.CodeRuleUtil; 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 com.engine.organization.util.tree.SearchTreeUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import weaver.general.StringUtil; import weaver.general.Util; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** * @Author weaver_cl * @description: * @Date 2022/5/20 * @Version V1.0 **/ public class DepartmentServiceImpl extends Service implements DepartmentService { /** * 分组类型 * 1:分部 * 2:部门 * 3:岗位 */ private static final String EXTEND_TYPE = "2"; /** * 主表 */ private static final String JCL_ORG_DEPT = "JCL_ORG_DEPT"; /** * 主表拓展表 */ private static final String JCL_ORG_DEPTEXT = "JCL_ORG_DEPTEXT"; /** * 明细表拓展表 */ private static final String JCL_ORG_DEPTEXT_DT1 = "JCL_ORG_DEPTEXT_DT1"; private static final String RIGHT_NAME = "Department:All"; /** * 部门主表title指定ID */ private static final Long GROUP_ID = 2L; private static DepartmentMapper getDepartmentMapper() { return MapperProxyFactory.getProxy(DepartmentMapper.class); } private CompMapper getCompMapper() { return MapperProxyFactory.getProxy(CompMapper.class); } private ExtendTitleMapper getExtendTitleMapper() { return MapperProxyFactory.getProxy(ExtendTitleMapper.class); } private ExtService getExtService(User user) { return ServiceUtil.getService(ExtServiceImpl.class, user); } @Override public PageInfo getDeptListByPid(QuerySingleDeptListParam param) { //1.查询分部下所有部门 //PageUtil.start(param.getCurrent(), param.getPageSize()); List departmentPOS = MapperProxyFactory.getProxy(DepartmentMapper.class).list("show_order"); PageInfo pageInfo = new PageInfo<>(departmentPOS); List singleDeptTreeVOS = DepartmentBO.buildSingleDeptTreeVOS(departmentPOS, param.getParentComp()); PageInfo pageInfos = new PageInfo<>(singleDeptTreeVOS, SingleDeptTreeVO.class); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(param.getCurrent()); pageInfos.setPageSize(param.getPageSize()); return pageInfos; } @Override public PageInfo getJobListByPid(QuerySingleDeptListParam param) { List jobPOS = MapperProxyFactory.getProxy(JobMapper.class).listAll(); PageInfo pageInfo = new PageInfo<>(jobPOS); List singleDeptTreeVOS = JobBO.buildSingleJobTreeVOS(jobPOS, param.getParentDept()); PageInfo pageInfos = new PageInfo<>(singleDeptTreeVOS, SingleJobTreeVO.class); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(param.getCurrent()); pageInfos.setPageSize(param.getPageSize()); return pageInfos; } @Override public Map getSearchTree(SearchTreeParams params) { String keyword = params.getKeyword(); String id = params.getId(); String type = Util.null2String(params.getType()); List treeList = getFilterCompany(id, keyword); return SearchTreeUtil.getSearchTree(type, treeList); } @Override public Map listPage(DeptSearchParam param) { Map datas = new HashMap<>(); boolean hasRight = HasRightUtil.hasRight(user, RIGHT_NAME, true); datas.put("hasRight", hasRight); if (!hasRight) { return datas; } DepartmentPO departmentPO = DepartmentBO.convertParamsToPO(param, user.getUID()); boolean filter = isFilter(departmentPO); PageInfo pageInfos; String orderSql = PageInfoSortUtil.getSortSql(param.getSortParams()); List allList = getDepartmentMapper().list(orderSql); // 通过子级遍历父级元素 if (filter) { // 根据条件获取元素 List filterDeptPOs = getDepartmentMapper().listByFilter(departmentPO, orderSql); // 添加父级元素 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(allList); List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); pageInfos = new PageInfo<>(subList, DepartmentListDTO.class); pageInfos.setTotal(compListDTOS.size()); } pageInfos.setPageNum(param.getCurrent()); pageInfos.setPageSize(param.getPageSize()); OrganizationWeaTable table = new OrganizationWeaTable<>(user, DepartmentListDTO.class); List columns = pageInfos.getColumns(); List weaTableColumn = columns.stream().map(v -> new WeaTableColumn("100", v.getTitle(), v.getKey())).collect(Collectors.toList()); table.setColumns(weaTableColumn); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); datas.put("pageInfo", pageInfos); datas.put("dataKey", result.getResultMap()); return datas; } @Override public Long saveBaseForm(Map params) { HasRightUtil.hasRight(user, RIGHT_NAME, false); String deptNo = (String) params.get("dept_no"); // 判断是否开启自动编号 deptNo = repeatDetermine(deptNo); params.put("dept_no", deptNo); if (StringUtils.isBlank(Util.null2String(params.get("show_order")))) { Integer maxShowOrder = getDepartmentMapper().getMaxShowOrder(); if (null == maxShowOrder) { maxShowOrder = 0; } params.put("show_order", maxShowOrder + 1); } Long departmentId = getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_DEPT, params, "", null); params.put("id", departmentId); new Thread(new OrganizationRunable(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.ADD, params)).start(); return departmentId; } @Override public int updateForbiddenTagById(DeptSearchParam params) { HasRightUtil.hasRight(user, RIGHT_NAME, false); DepartmentPO departmentPO = DepartmentPO.builder().id(params.getId()).forbiddenTag(params.getForbiddenTag() ? 0 : 1).build(); Map map = new HashMap<>(); map.put("id", departmentPO.getId()); map.put("forbiddenTag", departmentPO.getForbiddenTag()); new Thread(new OrganizationRunable(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.CANCELED, map)).start(); return getDepartmentMapper().updateForbiddenTagById(departmentPO); } @Override public Long updateForm(Map params) { HasRightUtil.hasRight(user, RIGHT_NAME, false); DeptSearchParam searchParam = JSONObject.parseObject(JSONObject.toJSONString(params), DeptSearchParam.class); String groupId = (String) params.get("viewCondition"); if ("0".equals(groupId)) { groupId = GROUP_ID.toString(); } String oldDeptNo = getDepartmentMapper().getDeptById(searchParam.getId()).getDeptNo(); String deptNo = searchParam.getDeptNo(); if (!deptNo.equals(oldDeptNo)) { deptNo = repeatDetermine(deptNo); params.put("dept_no", deptNo); } // 更新主表数据 getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_DEPT, params, "", searchParam.getId()); new Thread(new OrganizationRunable(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.UPDATE, params)).start(); // 更新主表拓展表 getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_DEPTEXT, params, groupId, searchParam.getId()); //更新明细表 getExtService(user).updateExtDT(user, EXTEND_TYPE, JCL_ORG_DEPTEXT_DT1, params, searchParam.getId()); return searchParam.getId(); } @Override public int deleteByIds(Collection ids) { HasRightUtil.hasRight(user, RIGHT_NAME, false); OrganizationAssert.notEmpty(ids, "请选择要删除的数据"); Map map = new HashMap<>(); map.put("id", StringUtils.join(ids, ",")); for (Long id : ids) { // 删除拓展表、明细表 MapperProxyFactory.getProxy(ExtMapper.class).deleteByID("jcl_org_deptext", id); MapperProxyFactory.getProxy(ExtDTMapper.class).deleteByMainID("jcl_org_deptext_dt1", id); } new OrganizationRunable(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.CANCELED, map).run(); return getDepartmentMapper().deleteByIds(ids); } @Override public Map getSearchCondition(Map params) { Map apiDatas = new HashMap<>(); List addGroups = new ArrayList<>(); List conditionItems = new ArrayList<>(); // 编号 SearchConditionItem deptNoItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "编号", "deptNo"); // 名称 SearchConditionItem deptNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "名称", "departmentName"); // 简称 SearchConditionItem deptNameShortItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "简称", "deptNameShort"); // 所属分部 SearchConditionItem parentCompBrowserItem = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "所属分部", "161", "parentComp", "compBrowser"); // 上级部门 SearchConditionItem parentDeptBrowserItem = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "上级部门", "161", "parentDept", "deptBrowser"); // 部门负责人 SearchConditionItem deptPrincipalBrowserItem = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "部门负责人", "1", "deptPrincipal", ""); // 显示顺序 SearchConditionItem showOrderItem = OrganizationFormItemUtil.inputNumberItem(user, 2, 16, 2, "显示顺序", "showOrder"); // 禁用标记 List selectOptions = new ArrayList<>(); SearchConditionOption enableOption = new SearchConditionOption("true", "启用"); SearchConditionOption disableOption = new SearchConditionOption("false", "禁用"); selectOptions.add(enableOption); selectOptions.add(disableOption); SearchConditionItem forbiddenTagItem = OrganizationFormItemUtil.selectItem(user, selectOptions, 2, 16, 6, false, "禁用标记", "forbiddenTag"); conditionItems.add(deptNoItem); conditionItems.add(deptNameItem); conditionItems.add(deptNameShortItem); conditionItems.add(parentCompBrowserItem); conditionItems.add(parentDeptBrowserItem); conditionItems.add(deptPrincipalBrowserItem); conditionItems.add(showOrderItem); conditionItems.add(forbiddenTagItem); addGroups.add(new SearchConditionGroup("高级搜索条件", true, conditionItems)); apiDatas.put("conditions", addGroups); return apiDatas; } @Override public Map getHasRight() { return MenuBtn.getDatasHasCopy(); } @Override public Map getDeptBaseForm(Map params) { OrganizationAssert.notNull(params.get("viewAttr"), "请标识操作类型"); // 2编辑 1查看 int viewAttr = Integer.parseInt((String) params.get("viewAttr")); long id = Long.parseLong((String) params.get("id")); String groupId = (String) params.get("viewCondition"); HashMap buttonsMap = new HashMap<>(); buttonsMap.put("hasEdit", true); buttonsMap.put("hasSave", true); List addGroups = new ArrayList<>(); if ("0".equals(groupId)) { groupId = GROUP_ID.toString(); } List extendTitles = getExtendTitleMapper().getTitlesByGroupID(Long.parseLong(groupId),"1"); if (CollectionUtils.isNotEmpty(extendTitles)) { for (ExtendTitlePO extendTitle : extendTitles) { List items = getExtService(user).getExtForm(user, EXTEND_TYPE + "", GROUP_ID.equals(Long.parseLong(groupId)) ? JCL_ORG_DEPT : JCL_ORG_DEPTEXT, viewAttr, id, extendTitle.getId().toString(), ""); if (CollectionUtils.isNotEmpty(items)) { addGroups.add(new SearchConditionGroup(extendTitle.getTitle(), true, items)); } } } HashMap resultMap = new HashMap<>(); resultMap.put("buttons", buttonsMap); resultMap.put("conditions", addGroups); resultMap.put("id", id); // 拓展页面分组 resultMap.put("tabInfo", getExtService(user).getTabInfo(EXTEND_TYPE, JCL_ORG_DEPTEXT)); // 处理明细表 resultMap.put("tables", getExtService(user).getExtendTables(user, EXTEND_TYPE, Long.parseLong(groupId), JCL_ORG_DEPTEXT_DT1, id, viewAttr, false)); Map apiDatas = new HashMap<>(); apiDatas.put("result", resultMap); return apiDatas; } @Override public Map getSaveForm() { HasRightUtil.hasRight(user, RIGHT_NAME, false); Map apiDatas = new HashMap<>(); List addGroups = new ArrayList<>(); List extendTitles = getExtendTitleMapper().getTitlesByGroupID(GROUP_ID,"1"); if (CollectionUtils.isNotEmpty(extendTitles)) { for (ExtendTitlePO extendTitle : extendTitles) { List items = getExtService(user).getExtSaveForm(user, EXTEND_TYPE + "", JCL_ORG_DEPT, 2, extendTitle.getId().toString(), "dept_no", RuleCodeType.DEPARTMENT.getValue()); if (CollectionUtils.isNotEmpty(items)) { addGroups.add(new SearchConditionGroup(extendTitle.getTitle(), true, items)); } } } apiDatas.put("condition", addGroups); return apiDatas; } /** * 复制表单 * * @return */ @Override public List getCopyForm() { List addGroups = new ArrayList<>(); List condition = new ArrayList<>(); SearchConditionItem compBrowserItem = OrganizationFormItemUtil.browserItem(user, 2, 16, 3, false, "复制到", "161", "company", "compBrowser"); compBrowserItem.setRules("required|string"); List selectOptions = new ArrayList<>(); SearchConditionOption Option = new SearchConditionOption("1", ""); selectOptions.add(Option); SearchConditionItem isCheckItem = OrganizationFormItemUtil.selectItem(user, selectOptions, 2, 5, 10, false, "是否复制岗位信息", "copyJob"); isCheckItem.setDetailtype(2); condition.add(compBrowserItem); condition.add(isCheckItem); addGroups.add(new SearchConditionGroup("", true, condition)); return addGroups; } /** * 复制岗位到指定部门 * * @param copyParam * @return */ @Override public int copyDepartment(DeptCopyParam copyParam) { HasRightUtil.hasRight(user, RIGHT_NAME, false); OrganizationAssert.notBlank(copyParam.getCompany(), "请指定需要复制的公司/分部"); int insertCount = 0; List idList = Arrays.stream(copyParam.getIds().split(",")).map(Long::parseLong).collect(Collectors.toList()); int maxShowOrder = getDepartmentMapper().getMaxShowOrder(); for (int i = 0; i < idList.size(); i++) { DepartmentPO deptById = getDepartmentMapper().getDeptById(idList.get(i)); deptById.setDeptName(deptById.getDeptName() + "[复制]"); deptById.setDeptNameShort(deptById.getDeptNameShort() + "[复制]"); // 处理自动编号 deptById.setDeptNo(CodeRuleUtil.generateCode(RuleCodeType.DEPARTMENT, deptById.getDeptNo(), false)); deptById.setParentComp(Long.parseLong(copyParam.getCompany())); deptById.setParentDept(null); // 显示顺序字段 deptById.setShowOrder(maxShowOrder + i + 1); insertCount += getDepartmentMapper().insertIgnoreNull(deptById); // 新增EC表部门 addEcDepartment(deptById); // 新增岗位信息 if ("1".equals(copyParam.getCopyJob())) { List jobPOS = MapperProxyFactory.getProxy(JobMapper.class).listJobsByDepartmentId(idList.get(i)); Integer maxJobOrder = MapperProxyFactory.getProxy(JobMapper.class).getMaxShowOrder(); if (maxJobOrder == null) { maxJobOrder = 0; } recursionCopyJob((long) user.getUID(), jobPOS, deptById.getParentComp(), deptById.getId(), maxJobOrder); } } return insertCount; } @Override public List getMergeForm(Long id) { List addGroups = new ArrayList<>(); List condition = new ArrayList<>(); SearchConditionItem deptBrowserItem = OrganizationFormItemUtil.browserItem(user, 2, 16, 3, false, "合并到部门", "161", "department", "deptBrowser"); deptBrowserItem.setRules("required|string"); SearchConditionItem mergeNameItem = OrganizationFormItemUtil.inputItem(user, 2, 16, 3, 50, "合并后名称", "mergeName"); mergeNameItem.setRules("required|string"); String departmentName = getDepartmentMapper().getDeptNameById(id); mergeNameItem.setValue(departmentName); condition.add(deptBrowserItem); condition.add(mergeNameItem); addGroups.add(new SearchConditionGroup("", true, condition)); return addGroups; } @Override public int mergeDepartment(DepartmentMergeParam mergeParam) { HasRightUtil.hasRight(user, RIGHT_NAME, false); int updateCount = 0; OrganizationAssert.isFalse(mergeParam.getId().equals(mergeParam.getDepartment()), "所选部门与待合并部门一致,无需操作"); OrganizationAssert.notNull(mergeParam.getDepartment(), "请选择需要合并的部门"); OrganizationAssert.notBlank(mergeParam.getMergeName(), "请输入合并后的名称"); // 合并到的部门 DepartmentPO targetDepartment = getDepartmentMapper().getDeptById(mergeParam.getDepartment()); Long parentComp = targetDepartment.getParentComp(); // 所选部门 DepartmentPO mergeDepartment = getDepartmentMapper().getDeptById(mergeParam.getId()); mergeDepartment.setDeptName(mergeParam.getMergeName()); mergeDepartment.setDeptNameShort(mergeParam.getMergeName()); mergeDepartment.setParentDept(mergeParam.getDepartment()); mergeDepartment.setParentComp(parentComp); // 禁用 mergeDepartment.setForbiddenTag(1); updateCount += getDepartmentMapper().updateBaseDept(mergeDepartment); // 更新EC表部门 updateEcDepartment(mergeDepartment); // 封存EC表部门 cancelEcDepartment(mergeDepartment.getId()); // 合并后部门及子部门禁用 List deptList = getDepartmentMapper().getDeptListByPId(mergeParam.getId()); forbiddenChildTag(parentComp, deptList); return updateCount; } @Override public List getMoveForm() { List addGroups = new ArrayList<>(); List condition = new ArrayList<>(); SearchConditionItem compBrowserItem = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "选择分部", "161", "company", "compBrowser"); SearchConditionItem deptBrowserItem = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "选择部门", "161", "department", "deptBrowser"); List selectOptions = new ArrayList<>(); SearchConditionOption compOption = new SearchConditionOption("0", "分部"); SearchConditionOption deptOption = new SearchConditionOption("1", "部门"); selectOptions.add(compOption); selectOptions.add(deptOption); SearchConditionItem moveTypeItem = OrganizationFormItemUtil.selectItem(user, selectOptions, 2, 16, 6, false, "转移到", "moveType"); moveTypeItem.setDetailtype(3); moveTypeItem.setValue("0"); condition.add(moveTypeItem); condition.add(compBrowserItem); condition.add(deptBrowserItem); addGroups.add(new SearchConditionGroup("", true, condition)); return addGroups; } @Override public int moveDepartment(DepartmentMoveParam moveParam) { HasRightUtil.hasRight(user, RIGHT_NAME, false); OrganizationAssert.notBlank(moveParam.getMoveType(), "请选择转移类型"); DepartmentPO deptById = getDepartmentMapper().getDeptById(moveParam.getId()); // 0:公司/分部 1:部门 if ("0".equals(moveParam.getMoveType())) { Long company = moveParam.getCompany(); OrganizationAssert.notNull(company, "请选择要转移到的分部"); deptById.setParentComp(company); deptById.setParentDept(null); } else if ("1".equals(moveParam.getMoveType())) { Long department = moveParam.getDepartment(); OrganizationAssert.notNull(department, "请选择要转移到的部门"); List deptListByPId = getDepartmentMapper().getDeptListByPId(moveParam.getId()); Set disableIds = new HashSet<>(); disableIds.add(moveParam.getId()); if (CollectionUtils.isNotEmpty(deptListByPId)) { addDisableIds(disableIds, deptListByPId); } OrganizationAssert.isFalse(disableIds.contains(department), "请勿选择当前部门本身及其子部门"); deptById.setParentDept(department); DepartmentPO parentDepartment = getDepartmentMapper().getDeptById(department); deptById.setParentComp(parentDepartment.getParentComp()); } int updateBaseDept = getDepartmentMapper().updateBaseDept(deptById); // 更新EC部门 updateEcDepartment(deptById); return updateBaseDept; } /** * 获取所有子部门id * * @param parentComp * @param deptList */ void forbiddenChildTag(Long parentComp, List deptList) { if (CollectionUtils.isNotEmpty(deptList)) { for (DepartmentPO departmentPO : deptList) { departmentPO.setParentComp(parentComp); departmentPO.setForbiddenTag(1); getDepartmentMapper().updateBaseDept(departmentPO); // 更新EC表部门 updateEcDepartment(departmentPO); // 封存EC表部门 cancelEcDepartment(departmentPO.getId()); List childList = getDepartmentMapper().getDeptListByPId(departmentPO.getId()); forbiddenChildTag(parentComp, childList); } } } /** * 是否为搜索查询 * * @param departmentPO * @return */ private boolean isFilter(DepartmentPO departmentPO) { return !(StringUtil.isEmpty(departmentPO.getDeptNo()) && StringUtil.isEmpty(departmentPO.getDeptName()) && StringUtil.isEmpty(departmentPO.getDeptNameShort()) && null == departmentPO.getParentComp() && null == departmentPO.getParentDept() && null == departmentPO.getDeptPrincipal() && null == departmentPO.getShowOrder() && null == departmentPO.getForbiddenTag()); } /** * 根据keyword查询数据 * * @param id * @param keyword * @return */ private List getFilterCompany(String id, String keyword) { // 查询部门信息 Long parentCompId = StringUtil.isEmpty(id) ? null : Long.parseLong(id); CompPO compBuild = CompPO.builder().compName(keyword).parentCompany(parentCompId).build(); List filterComps = getCompMapper().listByFilter(compBuild, "show_order"); Set builderComps = new HashSet<>(); for (CompPO compPO : filterComps) { buildParentComps(compPO, builderComps); } return SearchTreeUtil.builderTreeMode(CompBO.buildSetToSearchTree(builderComps)); } /** * 添加查询元素的父级元素 * * @param compPO * @param builderComps */ private void buildParentComps(CompPO compPO, Set builderComps) { builderComps.add(compPO); if (SearchTreeUtil.isTop(compPO.getParentCompany())) { return; } CompPO parentComp = getCompMapper().listById(compPO.getParentCompany()); if (null != parentComp) { buildParentComps(parentComp, builderComps); } } /** * 判断编号是否重复 * * @return */ public static String repeatDetermine(String deptNo) { CodeRulePO codeRuleByType = MapperProxyFactory.getProxy(CodeRuleMapper.class).getCodeRuleByType(RuleCodeType.DEPARTMENT.getValue()); if (StringUtils.isNotBlank(deptNo)) { deptNo = CodeRuleUtil.generateCode(RuleCodeType.DEPARTMENT, deptNo); List list = getDepartmentMapper().listByNo(Util.null2String(deptNo)); OrganizationAssert.isEmpty(list, "编号不允许重复"); } else { if (null != codeRuleByType && "1".equals(codeRuleByType.getSerialEnable())) { deptNo = autoCreateCompanyNo(); } } return deptNo; } /** * 自动编号处理 * * @return */ private static String autoCreateCompanyNo() { String generateCode = CodeRuleUtil.generateCode(RuleCodeType.DEPARTMENT, ""); List list = getDepartmentMapper().listByNo(Util.null2String(generateCode)); if (CollectionUtils.isNotEmpty(list)) { generateCode = autoCreateCompanyNo(); } return generateCode; } /** * 递归复制岗位信息 * * @param creator * @param jobPOS * @param parentCompId * @param parentDeptId * @param orderNum */ private void recursionCopyJob(Long creator, List jobPOS, Long parentCompId, Long parentDeptId, int orderNum) { for (JobPO jobPO : jobPOS) { orderNum++; // 处理自动编号 jobPO.setJobNo(CodeRuleUtil.generateCode(RuleCodeType.JOBTITLES, jobPO.getJobNo(), false)); jobPO.setParentDept(parentDeptId); jobPO.setCreator(creator); jobPO.setCreateTime(new Date()); jobPO.setParentComp(parentCompId); jobPO.setShowOrder(orderNum); MapperProxyFactory.getProxy(JobMapper.class).insertIgnoreNull(jobPO); // 处理子级元素 List jobsByPid = MapperProxyFactory.getProxy(JobMapper.class).getJobsByPid(jobPO.getId()); if (CollectionUtils.isNotEmpty(jobsByPid)) { recursionCopyJob(creator, jobsByPid, parentCompId, parentDeptId, orderNum); } } } /** * 更新EC表部门 * * @param departmentPO */ private void updateEcDepartment(DepartmentPO departmentPO) { Map map = new HashMap<>(); map.put("dept_name_short", departmentPO.getDeptNameShort()); map.put("dept_name", departmentPO.getDeptName()); map.put("parent_comp", departmentPO.getParentComp()); map.put("parent_dept", departmentPO.getParentDept()); map.put("show_order", departmentPO.getShowOrder()); map.put("dept_no", departmentPO.getDeptNo()); map.put("dept_principal", departmentPO.getDeptPrincipal()); map.put("id", departmentPO.getId()); new Thread(new OrganizationRunable(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.UPDATE, map)).start(); } /** * 新增EC表部门 * * @param departmentPO */ private void addEcDepartment(DepartmentPO departmentPO) { Map map = new HashMap<>(); map.put("dept_name_short", departmentPO.getDeptNameShort()); map.put("dept_name", departmentPO.getDeptName()); map.put("parent_comp", departmentPO.getParentComp()); map.put("parent_dept", departmentPO.getParentDept()); map.put("show_order", departmentPO.getShowOrder()); map.put("dept_no", departmentPO.getDeptNo()); map.put("dept_principal", departmentPO.getDeptPrincipal()); map.put("id", departmentPO.getId()); new Thread(new OrganizationRunable(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.ADD, map)).start(); } /** * 封存EC表部门 * * @param id */ private void cancelEcDepartment(Long id) { Map map = new HashMap<>(); map.put("id", id); new Thread(new OrganizationRunable(user, LogModuleNameEnum.DEPARTMENT, OperateTypeEnum.CANCELED, map)).start(); } private void addDisableIds(Set disableIds, List deptListByPId) { for (DepartmentPO departmentPO : deptListByPId) { disableIds.add(departmentPO.getId()); List childDeptPOS = getDepartmentMapper().getDeptListByPId(departmentPO.getId()); addDisableIds(disableIds, childDeptPOS); } } }