package com.engine.organization.service.impl; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.api.hrm.bean.HrmFieldBean; import com.api.hrm.util.HrmFieldSearchConditionComInfo; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.core.impl.Service; import com.engine.hrm.util.face.HrmFaceCheckManager; import com.engine.organization.component.OrganizationWeaTable; 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.po.DepartmentPO; import com.engine.organization.entity.fieldset.param.TransferDataParam; import com.engine.organization.entity.hrmresource.bo.HrmRelationBO; import com.engine.organization.entity.hrmresource.param.HrmRelationSaveParam; import com.engine.organization.entity.hrmresource.param.HrmResourceSearchParam; import com.engine.organization.entity.hrmresource.param.SearchTemplateParam; import com.engine.organization.entity.hrmresource.po.HrmRelationPO; import com.engine.organization.entity.hrmresource.po.SearchTemplatePO; import com.engine.organization.entity.hrmresource.vo.HrmResourceVO; import com.engine.organization.entity.jclimport.po.CusFormFieldPO; import com.engine.organization.entity.job.bo.JobBO; import com.engine.organization.entity.job.po.JobPO; 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.hrmresource.HrmRelationMapper; import com.engine.organization.mapper.hrmresource.SystemDataMapper; import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.mapper.resource.HrmResourceMapper; import com.engine.organization.service.HrmResourceService; import com.engine.organization.util.HasRightUtil; import com.engine.organization.util.MenuBtn; import com.engine.organization.util.OrganizationAssert; import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.detach.DetachUtil; import com.engine.organization.util.page.PageUtil; import com.engine.organization.util.tree.SearchTreeUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.json.JSONException; import org.json.JSONObject; import weaver.conn.RecordSet; import weaver.general.StringUtil; import weaver.general.Util; import weaver.hrm.definedfield.HrmFieldManager; import weaver.systeminfo.SystemEnv; import java.util.*; import java.util.stream.Collectors; /** * @author:dxfeng * @createTime: 2022/06/20 * @version: 1.0 */ public class HrmResourceServiceImpl extends Service implements HrmResourceService { /** * 左侧树 类型表示 *

* 0:集团 * 1:分部 * 2:部门 * 3:岗位 */ private static final String TYPE_COMP = "1"; private static final String TYPE_DEPT = "2"; private static final String TYPE_JOB = "3"; private static final String RIGHT_NAME = "Roster:All"; private HrmRelationMapper getHrmRelationMapper() { return MapperProxyFactory.getProxy(HrmRelationMapper.class); } private DepartmentMapper getDepartmentMapper() { return MapperProxyFactory.getProxy(DepartmentMapper.class); } private CompMapper getCompMapper() { return MapperProxyFactory.getProxy(CompMapper.class); } private JobMapper getJobMapper() { return MapperProxyFactory.getProxy(JobMapper.class); } private HrmResourceMapper getHrmResourceMapper() { return MapperProxyFactory.getProxy(HrmResourceMapper.class); } private SystemDataMapper getSystemDataMapper() { return MapperProxyFactory.getProxy(SystemDataMapper.class); } @Override public Map getSearchTree(SearchTreeParams params) { String keyword = params.getKeyword(); String id = params.getId(); String type = Util.null2String(params.getType()); List treeList = getFilterCompany(id, type, keyword); return SearchTreeUtil.getSearchTree(type, treeList); } @Override public Map listPage(HrmResourceSearchParam params) { OrganizationWeaTable table = new OrganizationWeaTable<>(user, HrmResourceVO.class); String sqlWhere = buildSqlWhere(params); table.setSqlwhere(sqlWhere); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); return new HashMap<>(result.getResultMap()); } @Override public Map getSaveForm() { 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_HRM, 2, extendTitle.getId().toString(), null, null, null); // if (CollectionUtils.isNotEmpty(items)) { // addGroups.add(new SearchConditionGroup(extendTitle.getTitle(), true, items)); // } // } //} apiDatas.put("condition", addGroups); return apiDatas; } @Override public Long saveBaseForm(Map params) { //HasRightUtil.hasRight(user, RIGHT_NAME, false); //String workCode = (String) params.get("work_code"); //// 判断是否开启自动编号 //workCode = repeatDetermine(workCode); //params.put("work_code", workCode); //// 完善新增参数 //completeParams(params); // //// 新增EC人员,新增成功后,新增到聚才林人员表 //Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.RESOURCE, OperateTypeEnum.ADD, params).sync(); //String ecResourceId = Util.null2String(syncMap.get("id")); //OrganizationAssert.isTrue(StringUtils.isNotBlank(ecResourceId), Util.null2String(syncMap.get("message"))); //// 获取人员UUID //RecordInfo recordInfo = getSystemDataMapper().getHrmObjectByID(HRM_RESOURCE, ecResourceId); //params.put("uuid", recordInfo.getUuid()); //Long resourceId = getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_HRM, params, "", null); // TODO new HrmResourceTriggerRunnable(resourceId).run(); //return resourceId; return 0L; } @Override public Map getBaseForm(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_HRM : JCL_ORG_HRMEXT, viewAttr, id, extendTitle.getId() + "", ""); // 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_HRMEXT)); //// 处理明细表 //resultMap.put("tables", getExtService(user).getExtendTables(user, EXTEND_TYPE, Long.parseLong(groupId), JCL_ORG_HRMEXT_DT1, id, viewAttr, false)); //Map apiDatas = new HashMap<>(); // //apiDatas.put("result", resultMap); // //return apiDatas; return new HashMap<>(); } @Override public int updateForm(Map params) { //Long id = Long.parseLong((String) params.get("id")); //String groupId = (String) params.get("viewCondition"); //int updateCount = 0; //if ("0".equals(groupId) || GROUP_ID.toString().equals(groupId)) { // // 判断编号是否重复 // String workCode = Util.null2String(params.get("work_code")); // HrmResourcePO resourceById = getResourceMapper().getResourceById(id.toString()); // if (!workCode.equals(resourceById.getWorkCode())) { // workCode = repeatDetermine(workCode); // params.put("work_code", workCode); // } // // // 完善更新参数 // completeParams(params); // // // 更新EC人员,更新成功后,更新聚才林人员表 // Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.RESOURCE, OperateTypeEnum.UPDATE, params).sync(); // String ecResourceId = Util.null2String(syncMap.get("id")); // OrganizationAssert.isTrue(StringUtils.isNotBlank(ecResourceId), Util.null2String(syncMap.get("message"))); // // // 更新主表数据 // updateCount += getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_HRM, params, "", id); // // // TODO new HrmResourceTriggerRunnable(id).run(); //} else { // // 更新主表拓展表 // getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_HRMEXT, params, "", id); //} ////更新明细表 //getExtService(user).updateExtDT(user, EXTEND_TYPE, JCL_ORG_HRMEXT_DT1, params, id); // //return updateCount; return 0; } @Override public List getSearchTemplate() { int userUID = user.getUID(); // 根据ID查询所存储的模板 List templates = getHrmResourceMapper().getSearchTemplatesByUser(userUID); templates.add(0, SearchTemplateParam.builder().key("-1").selected(false).showName("默认模板").build()); return templates; } @Override public List getAllConditions() { HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo(); List addGroups = new ArrayList<>(); List basicConditionItems = new ArrayList<>(); List personalConditionItems = new ArrayList<>(); List workConditionItems = new ArrayList<>(); // 基本信息:-1 List hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("-1"); createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, basicConditionItems); if (CollectionUtils.isNotEmpty(basicConditionItems)) { addGroups.add(new SearchConditionGroup("基本信息", true, basicConditionItems)); } // 个人信息:1 hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("1"); createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, personalConditionItems); if (CollectionUtils.isNotEmpty(personalConditionItems)) { addGroups.add(new SearchConditionGroup("个人信息", true, personalConditionItems)); } // 工作信息:3 hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("3"); createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, workConditionItems); if (CollectionUtils.isNotEmpty(workConditionItems)) { addGroups.add(new SearchConditionGroup("工作信息", true, workConditionItems)); } return addGroups; } @Override public void saveSearchTemplate(SearchTemplateParam params) { String[] split = params.getFields().split(","); if (split.length > 0) { List basicFieldsBuilder = new ArrayList<>(); List personalFieldsBuilder = new ArrayList<>(); List workFieldsBuilder = new ArrayList<>(); for (String fieldName : split) { if (fieldName.startsWith("-1")) { basicFieldsBuilder.add(fieldName.substring(fieldName.lastIndexOf("_") + 1)); } else if (fieldName.startsWith("1")) { personalFieldsBuilder.add(fieldName.substring(fieldName.lastIndexOf("_") + 1)); } else if (fieldName.startsWith("3")) { workFieldsBuilder.add(fieldName.substring(fieldName.lastIndexOf("_") + 1)); } } SearchTemplatePO searchTemplatePO = SearchTemplatePO.builder().name(params.getShowName()).basicFields(StringUtils.join(basicFieldsBuilder, ",")).personalFields(StringUtils.join(personalFieldsBuilder, ",")).workFields(StringUtils.join(workFieldsBuilder, ",")).creator(user.getUID()).createTime(new Date()).updateTime(new Date()).build(); getHrmResourceMapper().insertSearchTemplate(searchTemplatePO); // 保存模板 } } @Override public Map getSearchCondition(Map params) { String templateId = Util.null2String(params.get("templateId")); if (StringUtils.isBlank(templateId)) { templateId = "-1"; } Map apiDatas = new HashMap<>(); List addGroups = new ArrayList<>(); List allConditions = getAllConditions(); // 穿梭框ID,展示所选字段信息 HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo = new HrmFieldSearchConditionComInfo(); if ("-1".equals(templateId)) { // 未选择模板展示默认模板搜索条件 List searchConditionItems = new ArrayList<>(); List hrmFieldsByScopeId = getSystemDataMapper().getHrmFieldsByScopeId("-1"); createConditionItems(hrmFieldSearchConditionComInfo, hrmFieldsByScopeId, searchConditionItems); if (CollectionUtils.isNotEmpty(searchConditionItems)) { addGroups.add(new SearchConditionGroup("基本信息", true, searchConditionItems)); } } else { // 选择模板则遍历所选模板所选字段 SearchTemplatePO searchTemplateById = getHrmResourceMapper().getSearchTemplateById(templateId); String[] basicFields = Util.null2String(searchTemplateById.getBasicFields()).split(","); if (basicFields.length > 0) { getTemplateItems(hrmFieldSearchConditionComInfo, addGroups, "基本信息", -1, basicFields); } String[] personalFields = Util.null2String(searchTemplateById.getPersonalFields()).split(","); if (personalFields.length > 0) { getTemplateItems(hrmFieldSearchConditionComInfo, addGroups, "个人信息", 1, personalFields); } String[] workFields = Util.null2String(searchTemplateById.getWorkFields()).split(","); if (workFields.length > 0) { getTemplateItems(hrmFieldSearchConditionComInfo, addGroups, "工作信息", 3, workFields); } } apiDatas.put("defaultcondition", addGroups); apiDatas.put("conditions", allConditions); List searchTemplate = getSearchTemplate(); String finalTemplateId = templateId; searchTemplate.forEach(item -> { if (finalTemplateId.equals(item.getKey())) { item.setSelected(true); } }); apiDatas.put("templates", searchTemplate); return apiDatas; } @Override public Map getHasRight() { Map btnDatas = new HashMap<>(); if (HasRightUtil.hasRight(user, RIGHT_NAME, true)) { ArrayList topMenuList = new ArrayList<>(); ArrayList rightMenuList = new ArrayList<>(); topMenuList.add(MenuBtn.builder().isBatch("1").isTop("1").menuFun("new").menuIcon("icon-coms-New-Flow").menuName("新建人员").type("BTN_Addnew").build()); btnDatas.put("topMenu", topMenuList); rightMenuList.add(MenuBtn.builder().isBatch("1").isTop("1").menuFun("new").menuIcon("icon-coms-New-Flow").menuName("新建人员").type("BTN_Addnew").build()); rightMenuList.add(MenuBtn.builder().isBatch("0").isTop("0").menuFun("custom").menuIcon("icon-coms-task-list").menuName("显示列定制").type("BTN_COLUMN").build()); rightMenuList.add(MenuBtn.rightMenu_btnLog()); btnDatas.put("rightMenu", rightMenuList); } btnDatas.put("hasRight", true); return btnDatas; } @Override public Map getTabForm(Map params) { String viewAttrStr = (String) params.get("viewAttr"); OrganizationAssert.notBlank(viewAttrStr, "未指定操作类型,请确认"); String id = Util.null2String(params.get("id")); OrganizationAssert.notBlank(id, "数据有误,请确认"); int viewAttr = Integer.parseInt(viewAttrStr); Map apiDatas = new HashMap<>(); //List addGroups = new ArrayList<>(); //SearchConditionItem schemeId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "等级方案", "161", "schemeId", "schemeBrowser"); //schemeId.setRules("required"); //SearchConditionItem gradeId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职级", "161", "gradeId", "gradeBrowser"); //gradeId.setRules("required"); //SearchConditionItem levelId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职等", "162", "levelId", "levelBrowser"); //levelId.setRules("required"); //SearchConditionItem sequenceId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "岗位序列", "161", "sequenceId", "sequenceBrowser"); //sequenceId.setRules("required"); //SearchConditionItem postId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职务分类", "161", "postId", "postBrowser"); //postId.setRules("required"); //SearchConditionItem postInfoId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "职务信息", "161", "postInfoId", "postInfoBrowser"); //postInfoId.setRules("required"); //SearchConditionItem companyId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "分部", "164", "companyId", ""); //companyId.setRules("required"); //SearchConditionItem departmentId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "部门", "4", "departmentId", ""); //departmentId.setRules("required"); //SearchConditionItem jobId = OrganizationFormItemUtil.browserItem(user, 2, 17, viewAttr, false, "岗位", "161", "jobId", "jobBrowser"); //jobId.setRules("required"); // // //// 编辑状态下赋值操作 //HrmRelationPO relationPO = getHrmRelationMapper().getRelationById(Long.parseLong(id)); //if (null != relationPO) { // setBrowserValue(schemeId, relationPO.getSchemeId(), getSchemeMapper().listSchemesByIds(Stream.of(relationPO.getSchemeId()).collect(Collectors.toList())), null, null); // setBrowserValue(gradeId, relationPO.getGradeId(), getGradeMapper().listGradessByIds(Stream.of(relationPO.getGradeId()).collect(Collectors.toList())), "scheme_id", relationPO.getSchemeId()); // setBrowserValue(levelId, relationPO.getLevelId(), getLevelMapper().listLevelsByIds(DeleteParam.builder().ids(relationPO.getLevelId()).build().getIds()), "grade_id", relationPO.getGradeId()); // setBrowserValue(sequenceId, relationPO.getSequenceId(), getSequenceMapper().listSequencesByIds(Stream.of(relationPO.getSequenceId()).collect(Collectors.toList())), "scheme_id", relationPO.getSchemeId()); // setBrowserValue(postId, relationPO.getPostId(), getPostMapper().listPostsByIds(Stream.of(relationPO.getPostId()).collect(Collectors.toList())), null, null); // setBrowserValue(postInfoId, relationPO.getPostInfoId(), getPostInfoMapper().listPostInfosByIds(Stream.of(relationPO.getPostInfoId()).collect(Collectors.toList())), "post_id", relationPO.getPostId()); // // List> companyMaps = new ArrayList<>(); // String scCompanyNameById = MapperProxyFactory.getProxy(SystemDataMapper.class).getScCompanyNameById(relationPO.getCompanyId().toString()); // Map companyMap = new HashMap<>(); // companyMap.put(relationPO.getCompanyId().toString(), scCompanyNameById); // companyMaps.add(companyMap); // setBrowserValue(companyId, relationPO.getCompanyId(), companyMaps, null, null); // // List> departmentMaps = new ArrayList<>(); // String departmentNameById = MapperProxyFactory.getProxy(SystemDataMapper.class).getScDepartmentNameById(relationPO.getDepartmentId().toString()); // Map departmentMap = new HashMap<>(); // departmentMap.put(relationPO.getDepartmentId().toString(), departmentNameById); // departmentMaps.add(departmentMap); // setBrowserValue(departmentId, relationPO.getDepartmentId(), departmentMaps, "subcompany1", relationPO.getCompanyId()); // // setBrowserValue(jobId, relationPO.getJobId(), getJobMapper().listJobsByIds(Stream.of(relationPO.getJobId()).collect(Collectors.toList())), "departmentid", relationPO.getDepartmentId()); //} // //addGroups.add(new SearchConditionGroup("岗职位体系", true, Stream.of(schemeId, gradeId, levelId, sequenceId, postId, postInfoId).collect(Collectors.toList()))); //addGroups.add(new SearchConditionGroup("组织机构", true, Stream.of(companyId, departmentId, jobId).collect(Collectors.toList()))); //HashMap buttonsMap = new HashMap<>(); //buttonsMap.put("hasEdit", true); //buttonsMap.put("hasSave", true); //apiDatas.put("buttons", buttonsMap); //apiDatas.put("conditions", addGroups); return apiDatas; } @Override public long saveTabForm(HrmRelationSaveParam params) { HrmRelationPO hrmRelationPO = HrmRelationBO.convertSaveParamToPO(params); hrmRelationPO.setCreator((long) user.getUID()); hrmRelationPO.setCreateTime(new Date()); hrmRelationPO.setDeleteType(0); getHrmRelationMapper().insertIgnoreNull(hrmRelationPO); return hrmRelationPO.getId(); } @Override public long updateTabForm(HrmRelationSaveParam params) { HrmRelationPO hrmRelationPO = HrmRelationBO.convertSaveParamToPO(params); // 判断新增OR更新 HrmRelationPO relationPO = getHrmRelationMapper().getRelationById(params.getId()); if (null == relationPO) { hrmRelationPO.setCreator((long) user.getUID()); hrmRelationPO.setCreateTime(new Date()); hrmRelationPO.setDeleteType(0); getHrmRelationMapper().insertIgnoreNull(hrmRelationPO); } else { hrmRelationPO.setUpdateTime(new Date()); getHrmRelationMapper().updateHrmRelation(hrmRelationPO); } RecordSet rs = new RecordSet(); rs.execute("update HrmResource set subcompanyid1 = " + params.getCompanyId() + " ,departmentid = " + params.getDepartmentId() + " ,jobtitle = " + params.getJobId() + " where id = " + params.getId()); HrmFaceCheckManager.sync(params.getId().toString(), HrmFaceCheckManager.getOptUpdate(), "hrm_e9_HrmResourceBaseService_editResourceBase", HrmFaceCheckManager.getOaResource()); return hrmRelationPO.getId(); } /** * 查询条件 * * @param params * @return */ private String buildSqlWhere(HrmResourceSearchParam params) { DBType dbType = DBType.get(new RecordSet().getDBType()); String sqlWhere = " where 1=1 "; String lastName = params.getLastName(); if (StringUtils.isNotBlank(lastName)) { sqlWhere += " AND t.lastname " + dbType.like(lastName); } Long companyId = params.getCompanyId(); if (null != companyId) { sqlWhere += " AND t.subcompanyid1 = '" + companyId + "'"; } Long departmentId = params.getDepartmentId(); if (null != departmentId) { sqlWhere += " AND t.departmentid = '" + departmentId + "'"; } Long ecCompany = params.getEcCompany(); if (null != ecCompany) { sqlWhere += " AND t.subcompanyid1 = '" + ecCompany + "'"; } Long ecDepartment = params.getEcDepartment(); if (null != ecDepartment) { sqlWhere += " AND t.departmentid = '" + ecDepartment + "'"; } String telephone = params.getTelephone(); if (StringUtils.isNotBlank(telephone)) { sqlWhere += " AND t.telephone " + dbType.like(telephone); } String mobile = params.getMobile(); if (StringUtils.isNotBlank(mobile)) { sqlWhere += " AND t.mobile " + dbType.like(mobile); } Long jobTitle = params.getJobTitle(); if (null != jobTitle) { JobPO ecJobTitleByJobId = JobBO.getEcJobTitleByJobId(jobTitle); if (null != ecJobTitleByJobId) { sqlWhere += " AND t.subcompanyid1 = '" + ecJobTitleByJobId.getEcCompany() + "'"; sqlWhere += " AND t.departmentid = '" + ecJobTitleByJobId.getEcDepartment() + "'"; sqlWhere += " AND t.jobtitle = '" + ecJobTitleByJobId.getEcJobTitle() + "'"; } else { sqlWhere = " where 1 = 2 "; } } // 分权查询 DetachUtil detachUtil = new DetachUtil(user); String parentCompanyIds = detachUtil.getJclRoleLevels(); if (detachUtil.isDETACH()) { sqlWhere += " And t.subcompanyid1 in(" + parentCompanyIds + ")"; } return sqlWhere; } public List getFilterCompany(String id, String type, String keyword) { List searchTree = new ArrayList<>(); // 通过分部、公司 组装数据 if (StringUtil.isEmpty(id) || TYPE_COMP.equals(type)) { Integer parentCompId = StringUtil.isEmpty(id) ? null : Integer.parseInt(id); DepartmentPO departmentBuild = DepartmentPO.builder().departmentName(keyword).subCompanyId1(parentCompId).canceled(0).build(); CompPO compBuild = CompPO.builder().subCompanyName(keyword).supSubComId(parentCompId).canceled(0).build(); // 所属分部下的岗位 JobPO jobBuild = JobPO.builder().jobTitleName(keyword).ecCompany(parentCompId).forbiddenTag(0).build(); searchTree = buildTreeByCompAndDept(departmentBuild, compBuild, jobBuild); } else if (TYPE_DEPT.equals(type)) { Integer parentDeptId = Integer.parseInt(id); DepartmentPO departmentBuild = DepartmentPO.builder().departmentName(keyword).supDepId(parentDeptId).canceled(0).build(); // 所属分部下的岗位 JobPO jobBuild = JobPO.builder().jobTitleName(keyword).ecDepartment(parentDeptId).forbiddenTag(0).build(); searchTree = buildTreeByDeptAndJob(departmentBuild, jobBuild); } else if (TYPE_JOB.equals(type)) { // 查询部门信息 List filterDeparts = getJobMapper().listPOsByFilter(JobPO.builder().jobTitleName(keyword).parentJob(Long.parseLong(id)).forbiddenTag(0).build()); Set builderJobs = new HashSet<>(); for (JobPO departmentPO : filterDeparts) { buildParentJobs(departmentPO, builderJobs); } searchTree = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(builderJobs)); } return searchTree; } /** * 分部、部门 组装左侧树 * * @param departmentBuild * @param compBuild * @param jobBuild * @return */ private List buildTreeByCompAndDept(DepartmentPO departmentBuild, CompPO compBuild, JobPO jobBuild) { List jobPOS = getJobMapper().listPOsByFilter(jobBuild); new DetachUtil(user).filterJobList(jobPOS); List filterDeparts = getDepartmentMapper().listByFilter(departmentBuild, "showorder"); new DetachUtil(user).filterDepartmentList(filterDeparts); // 添加父级岗位 Set builderJobs = new HashSet<>(); for (JobPO jobPO : jobPOS) { buildParentJobs(jobPO, builderJobs); } // 添加岗位的上级部门或分部 List jobTrees = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(builderJobs)); String parentDeptS = jobTrees.stream().map(SearchTree::getParentComp).collect(Collectors.joining(",")); if (!StringUtil.isEmpty(parentDeptS)) { // 兼容SQLServer每次最多in,2100条数据 List ids = DeleteParam.builder().ids(parentDeptS).build().getIds(); int ceilCount = (int) Math.ceil((double) ids.size() / 1000); List departmentsByIds = new ArrayList<>(); for (int i = 1; i < ceilCount + 1; i++) { List longs = PageUtil.subList(i, 1000, ids); List departmentsById = getDepartmentMapper().getDeptsByIds(longs); if (CollectionUtils.isNotEmpty(departmentsById)) { departmentsByIds.addAll(departmentsById); } } if (CollectionUtils.isNotEmpty(departmentsByIds)) { filterDeparts.addAll(departmentsByIds); } } // 查询分部信息 List filterComps = getCompMapper().listByFilter(compBuild, "showorder"); new DetachUtil(user).filterCompanyList(filterComps); Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { buildParentDepts(departmentPO, builderDeparts); } List departmentList = DepartmentBO.buildSetToSearchTree(builderDeparts); List deptTrees = SearchTreeUtil.builderTreeMode(departmentList); List searchTrees = SearchTreeUtil.builderTreeMode(departmentList, jobTrees); // 添加部门的上级分部 String parentCompS = deptTrees.stream().map(SearchTree::getParentComp).collect(Collectors.joining(",")); if (!StringUtil.isEmpty(parentCompS)) { List compsByIds = getCompMapper().getCompsByIds(DeleteParam.builder().ids(parentCompS).build().getIds()); if (CollectionUtils.isNotEmpty(compsByIds)) { filterComps.addAll(compsByIds); } } List allCompanys = getCompMapper().listAll("showorder"); new DetachUtil(user).filterCompanyList(allCompanys); Map allMaps = allCompanys.stream().collect(Collectors.toMap(CompPO::getId, item -> item, (k1, k2) -> k1)); Set builderComps = new HashSet<>(); for (CompPO compPO : filterComps) { buildParentComps(compPO, builderComps, allMaps); } return SearchTreeUtil.builderTreeMode(CompBO.buildSetToSearchTree(builderComps), searchTrees); } private List buildTreeByDeptAndJob(DepartmentPO departmentBuild, JobPO jobBuild) { List jobPOS = getJobMapper().listPOsByFilter(jobBuild); List filterDeparts = getDepartmentMapper().listByFilter(departmentBuild, "showorder"); // 添加父级岗位 Set builderJobs = new HashSet<>(); for (JobPO jobPO : jobPOS) { buildParentJobs(jobPO, builderJobs); } // 添加岗位的上级部门或分部 List jobTrees = SearchTreeUtil.builderTreeMode(JobBO.buildSetToSearchTree(builderJobs)); String parentDeptS = jobTrees.stream().map(SearchTree::getParentComp).collect(Collectors.joining(",")); if (!StringUtil.isEmpty(parentDeptS)) { // 兼容SQLServer每次最多in,2100条数据 List ids = (List) DeleteParam.builder().ids(parentDeptS).build().getIds(); int ceilCount = (int) Math.ceil((double) ids.size() / 1000); List departmentsByIds = new ArrayList<>(); for (int i = 0; i < ceilCount - 1; i++) { List departmentsById = getDepartmentMapper().getDeptsByIds(PageUtil.subList(i, 1000, ids)); if (CollectionUtils.isNotEmpty(departmentsById)) { departmentsByIds.addAll(departmentsById); } } if (CollectionUtils.isNotEmpty(departmentsByIds)) { filterDeparts.addAll(departmentsByIds); } } // 查询分部信息 Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { buildParentDepts(departmentPO, builderDeparts); } return SearchTreeUtil.builderTreeMode(DepartmentBO.buildSetToSearchTree(builderDeparts), jobTrees); } private void buildParentJobs(JobPO jobPO, Set builderJobs) { builderJobs.add(jobPO); if (SearchTreeUtil.isTop(jobPO.getParentJob())) { return; } JobPO parentJob = getJobMapper().getJobById(jobPO.getParentJob()); if (null != parentJob) { buildParentJobs(parentJob, builderJobs); } } /** * 添加查询元素的父级元素 * * @param departmentPO * @param builderDeparts */ private void buildParentDepts(DepartmentPO departmentPO, Set builderDeparts) { builderDeparts.add(departmentPO); if (SearchTreeUtil.isTop(departmentPO.getSupDepId())) { return; } DepartmentPO parentDept = getDepartmentMapper().getDeptById(departmentPO.getSupDepId()); if (null != parentDept) { buildParentDepts(parentDept, builderDeparts); } } /** * 添加查询元素的父级元素 * * @param compPO * @param builderComps */ private void buildParentComps(CompPO compPO, Set builderComps, Map allMaps) { builderComps.add(compPO); CompPO parentComp = allMaps.get(compPO.getSupSubComId()); if (null != parentComp) { buildParentComps(parentComp, builderComps, allMaps); } } //private void completeParams(Map params) { // String jobId = Util.null2String(params.get("job_title")); // if (StringUtils.isNotBlank(jobId)) { // JobPO jobById = getJobMapper().getJobById(Long.parseLong(jobId)); // params.put("department_id", jobById.getEcDepartment()); // params.put("company_id", jobById.getEcCompany()); // params.put("ec_department", jobById.getEcDepartment()); // params.put("ec_company", jobById.getEcCompany()); // // 等级方案、岗位序列、职等、职级 // params.put("scheme_id", jobById.getSchemeId()); // params.put("sequence_id", jobById.getSequenceId()); // params.put("job_level", jobById.getLevelId()); // params.put("job_grade", jobById.getGradeId()); // String showOrder = Util.null2String(params.get("show_order")); // // 初始化排序字段 // if (StringUtils.isBlank(showOrder)) { // Long orderNum = getResourceMapper().getMaxShowOrder(); // params.put("show_order", null == orderNum ? 1 : orderNum + 1); // } // // // 人员状态 // String status = Util.null2String(params.get("status")); // if (StringUtils.isBlank(status)) { // params.put("status", "0"); // } // } //} /** * 判断编号是否重复 * * @return */ //public static String repeatDetermine(String workCode) { // CodeRulePO codeRuleByType = MapperProxyFactory.getProxy(CodeRuleMapper.class).getCodeRuleByType(RuleCodeType.USER.getValue()); // if (StringUtils.isNotBlank(workCode)) { // workCode = CodeRuleUtil.generateCode(RuleCodeType.USER, workCode); // List list = getResourceMapper().listByNo(Util.null2String(workCode)); // OrganizationAssert.isEmpty(list, "编号不允许重复"); // } else { // OrganizationAssert.isTrue(null != codeRuleByType && "1".equals(codeRuleByType.getSerialEnable()), "编号不允许为空"); // workCode = autoCreateWorkCode(); // } // return workCode; //} /** * 自动编号处理 * * @return */ //private static String autoCreateWorkCode() { // String generateCode = CodeRuleUtil.generateCode(RuleCodeType.USER, ""); // List list = getResourceMapper().listByNo(Util.null2String(generateCode)); // if (CollectionUtils.isNotEmpty(list)) { // generateCode = autoCreateWorkCode(); // } // return generateCode; //} /** * 构建查询条件Item * * @param hrmFieldSearchConditionComInfo * @param formFields * @param conditionItems */ private void createConditionItems(HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo, List formFields, List conditionItems) { for (CusFormFieldPO cusFormFieldPO : formFields) { HrmFieldBean hrmFieldBean = new HrmFieldBean(); hrmFieldBean.setFieldid(Util.null2String(cusFormFieldPO.getFieldId())); hrmFieldBean.setFieldname(cusFormFieldPO.getScopeId() + "_" + cusFormFieldPO.getTableName() + "_" + cusFormFieldPO.getFieldName()); hrmFieldBean.setFieldlabel(cusFormFieldPO.getFieldLabel()); hrmFieldBean.setFieldhtmltype(Util.null2String(cusFormFieldPO.getFieldHtmlType())); hrmFieldBean.setType(cusFormFieldPO.getType()); hrmFieldBean.setIsQuickSearch(false); hrmFieldBean.setIsScope(false); hrmFieldBean.setDmlurl(cusFormFieldPO.getDmlUrl()); conditionItems.add(hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user)); } } /** * 构建穿梭框字段 * * @param formFields * @param dataParamList * @param title */ private void createTransferData(List formFields, List dataParamList, String title) { for (CusFormFieldPO cusFormFieldPO : formFields) { String id = cusFormFieldPO.getTableName() + "_" + cusFormFieldPO.getScopeId() + "_" + cusFormFieldPO.getFieldId(); String label = Util.toScreen(SystemEnv.getHtmlLabelName(Integer.parseInt(cusFormFieldPO.getFieldLabel()), user.getLanguage()), user.getLanguage()); dataParamList.add(TransferDataParam.builder().id(id).label(label).title(title).build()); } } private void getTemplateItems(HrmFieldSearchConditionComInfo hrmFieldSearchConditionComInfo, List addGroups, String title, Integer scopeid, String[] fieldNames) { try { HrmFieldManager hfm = new HrmFieldManager("HrmCustomFieldByInfoType", scopeid); List conditionItems = new ArrayList<>(); for (String fieldName : fieldNames) { JSONObject hrmFieldConf = hfm.getHrmFieldConf(fieldName); if (null == hrmFieldConf) { continue; } boolean baseField = hfm.isBaseField(fieldName); HrmFieldBean hrmFieldBean = new HrmFieldBean(); hrmFieldBean.setFieldid(Util.null2String(hrmFieldConf.getString("id"))); hrmFieldBean.setFieldname(scopeid + "_" + (baseField ? "hrm" : "cus") + "_" + fieldName); hrmFieldBean.setFieldlabel(hrmFieldConf.getString("fieldlabel")); hrmFieldBean.setFieldhtmltype(hrmFieldConf.getString("fieldhtmltype")); hrmFieldBean.setType(hrmFieldConf.getString("type")); hrmFieldBean.setDmlurl(hrmFieldConf.getString("dmlurl")); hrmFieldBean.setIsQuickSearch(false); hrmFieldBean.setIsScope(false); conditionItems.add(hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user)); } if (CollectionUtils.isNotEmpty(conditionItems)) { addGroups.add(new SearchConditionGroup(title, true, conditionItems)); } } catch (JSONException e) { throw new RuntimeException(e); } } }