package com.engine.jucailinkq.common.cmd; import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; import com.engine.jucailinkq.common.util.DbTools; import com.engine.core.interceptor.CommandContext; import com.engine.jucailinkq.common.util.Utils; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 获得假期modeid下所有适用组织人 */ @Slf4j public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand> { @Override public BizLogContext getLogContext() { return null; } public GetPersonDateBySuitOrganzation(Map params){ this.params=params; } @Override public Map execute(CommandContext commandContext) { String modeId = Util.null2String(params.get("modeId")); String sql = "select dxlx,aqjb,dataid,dx from uf_jcl_syzz where modeid=?"; //假期额度适用组织所有值集合 List> organzationList = DbTools.getSqlToList(sql,modeId); sql = "select a.id dataid,b.id detailid,a.*,b.* from uf_jcl_kq_jqed a left join uf_jcl_kq_jqed_dt1 b on a.id=b.mainid where (gzzt is null or gzzt <> '1')"; //所有假期额度生成规则值 List> vacationList = DbTools.getSqlToList(sql); //人力资源id,(假别,规则id) Map personMap = Maps.newHashMap(); //人员分组id,(假别,规则id) Map personOrganzationMap = Maps.newHashMap(); //部门id,(假别,规则id) Map departMentMap = Maps.newHashMap(); //分部id,(假别,规则id) Map subCompanyMap = Maps.newHashMap(); //以假期额度生成规则id分割的假期额度生成规则值集合 Map vacationMap = Maps.newHashMap(); for (Map vocation:vacationList){ vacationMap.put(vocation.get("dataid").toString(),vocation.get("jb").toString()); } Map>> vacationGroupByDataIdMap = vacationList.stream().collect(Collectors.groupingBy(e->e.get("dataid").toString())); Set personOrganzationIds = Sets.newHashSet(); Set departMentIds = Sets.newHashSet(); Set subCompanyIds = Sets.newHashSet(); for (Map organzation:organzationList){ String dx = Util.null2String(organzation.get("dx")).split("-")[0]; String dataid = Util.null2String(organzation.get("dataid")); String jb = vacationMap.get(dataid); if (ApplicableOrganizationEnum.PERSONNEL.getKey().equals(organzation.get("dxlx"))){ Map psersonSet = (Map)personMap.get(dx); if (psersonSet == null){ psersonSet = Maps.newHashMap(); personMap.put(dx,psersonSet); } psersonSet.put(jb,dataid); }else if (ApplicableOrganizationEnum.PERSONNEL_GROUP.getKey().equals(organzation.get("dxlx"))){ personOrganzationIds.add(dx); Map personOrganzationSet = (Map)personOrganzationMap.get(dx); if (personOrganzationSet == null){ personOrganzationSet = Maps.newHashMap(); personOrganzationMap.put(dx,personOrganzationSet); } personOrganzationSet.put(jb,dataid); }else if (ApplicableOrganizationEnum.DEPARTMENT.getKey().equals(organzation.get("dxlx"))){ departMentIds.add(dx); Map departMentSet = (Map)departMentMap.get(dx); if (departMentSet == null){ departMentSet = Maps.newHashMap(); departMentMap.put(dx,departMentSet); } departMentSet.put(jb,dataid); }else if (ApplicableOrganizationEnum.SUBCOMPANY.getKey().equals(organzation.get("dxlx"))){ subCompanyIds.add(dx); Map subCompanySet = (Map)subCompanyMap.get(dx); if (subCompanySet == null){ subCompanySet = Maps.newHashMap(); subCompanyMap.put(dx,subCompanySet); } subCompanySet.put(jb,dataid); } } sql = "select id,departmentid,subcompanyid1,seclevel from hrmresource where status <> '5' and status <> '4' and status <> '7' "; if (departMentIds.size() > 0){ sql = sql+ " and departmentid in ("+String.join(",",departMentIds)+")"; } if (subCompanyIds .size() >0 && departMentIds.size() > 0){ sql = sql+ " or subcompanyid1 in ("+String.join(",",subCompanyIds)+")"; }else if (subCompanyIds .size() >0 && departMentIds.size() == 0){ sql = sql+ " and subcompanyid1 in ("+String.join(",",subCompanyIds)+")"; } List> hrmListByDepartAndSubCompanyIds = DbTools.getSqlToList(sql); //部门id-人员id集合 Map>> hrmListGroupByDepart = hrmListByDepartAndSubCompanyIds.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("departmentid")))); log.info("hrmListGroupByDepart : [{}]",hrmListGroupByDepart); //分部id-人员id集合 Map>> hrmListGroupBySubCompany = hrmListByDepartAndSubCompanyIds.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("subcompanyid1")))); log.info("hrmListGroupBySubCompany : [{}]",hrmListGroupBySubCompany); //人员分组id-人员id集合 if (personOrganzationIds.size() >0){ //人员分组id-(假别,假期规则id) Map> personGroupUserIds = getPersonGroupUserIds(personOrganzationIds); log.info("personGroupUserIds : [{}]",personGroupUserIds); log.info("personOrganzationMap : [{}]",personOrganzationMap); for (Map.Entry entry : personOrganzationMap.entrySet()){ String personGroupId = entry.getKey(); //人员分组(假别,假期规则id) Map personGroupHolidayMap = (Map)entry.getValue(); Set userIds = personGroupUserIds.get(personGroupId); if (userIds == null || userIds.size() == 0) { continue; } for (String userId :userIds){ //人力资源原本已有的假期,(假别,规则id) Map psersonSet = personMap.get(userId) == null?null:(Map)personMap.get(userId); if (psersonSet == null) { personMap.put(userId,personGroupHolidayMap); }else { for (Map.Entry personGroupHolidayEntry :personGroupHolidayMap.entrySet()){ if (psersonSet.get(personGroupHolidayEntry.getKey()) == null){ psersonSet.put(personGroupHolidayEntry.getKey(),personGroupHolidayEntry.getValue()); } } personMap.put(userId,psersonSet); } } } } log.info("before personMap : [{}]",personMap); //部门id log.info("departMentMap : [{}]",departMentMap); for (Map.Entry entry : departMentMap.entrySet()){ String departMentId = entry.getKey(); //部门(假别,假期规则id) Map departMentHolidayMap = (Map)entry.getValue(); List> userIds = hrmListGroupByDepart.get(departMentId); if (userIds == null || userIds.size() == 0) { continue; } for (Map userIdMap :userIds){ //人力资源原本已有的假期,(假别,规则id) String userId = Util.null2String(userIdMap.get("id")); Map psersonSet = personMap.get(userId) == null?null:(Map)personMap.get(userId); if (psersonSet == null) { personMap.put(userId,departMentHolidayMap); }else { for (Map.Entry personGroupHolidayEntry :departMentHolidayMap.entrySet()){ if (psersonSet.get(personGroupHolidayEntry.getKey()) == null){ psersonSet.put(personGroupHolidayEntry.getKey(),personGroupHolidayEntry.getValue()); } } personMap.put(userId,psersonSet); } } } //分部id log.info("subCompanyMap : [{}]",subCompanyMap); for (Map.Entry entry : subCompanyMap.entrySet()){ String subCompanyId = entry.getKey(); //分部(假别,假期规则id) Map subCompanyHolidayMap = (Map)entry.getValue(); List> userIds = hrmListGroupBySubCompany.get(subCompanyId); if (userIds == null || userIds.size() == 0) { continue; } for (Map userIdMap :userIds){ //人力资源原本已有的假期,(假别,规则id) String userId = Util.null2String(userIdMap.get("id")); Map psersonSet = personMap.get(userId) == null?null:(Map)personMap.get(userId); if (psersonSet == null) { personMap.put(userId,subCompanyHolidayMap); }else { for (Map.Entry personGroupHolidayEntry :subCompanyHolidayMap.entrySet()){ if (psersonSet.get(personGroupHolidayEntry.getKey()) == null){ psersonSet.put(personGroupHolidayEntry.getKey(),personGroupHolidayEntry.getValue()); } } personMap.put(userId,psersonSet); } } } log.info("personMap : [{}]",personMap); Map newpersonMap = Maps.newHashMap(); for (Map.Entry entry :personMap.entrySet()){ String userId = entry.getKey(); Map vocationMap = (Map)entry.getValue(); Map dataMap = Maps.newHashMap(); for (Map.Entry vocationEntry :vocationMap.entrySet()){ String jb = vocationEntry.getKey(); String dataId = vocationEntry.getValue(); if (jb != null && !"".equals(jb) && vacationGroupByDataIdMap.get(dataId) !=null){ dataMap.put(jb,vacationGroupByDataIdMap.get(dataId)); } } newpersonMap.put(userId,dataMap); } return newpersonMap; } /** * 获得人员分组下面的人员集合 * @param personOrganzationIds * @return人员分组id-人员id集合 */ public Map> getPersonGroupUserIds(Set personOrganzationIds){ String sql = "select b.mainid,b.empid,b.filters,b.sqltj,b.bdate,b.edate,a.list_type from uf_ryqz a left join uf_ryqz_dt1 b on a.id=b.mainid where mainid in ("+String.join(",",personOrganzationIds)+")"; List> personGroupDataList = DbTools.getSqlToList(sql); Map> personGroupUserIds = Maps.newHashMap(); for (Map personGroupData :personGroupDataList){ String id = Util.null2String(personGroupData.get("mainid")); String empid = Util.null2String(personGroupData.get("empid")); String filters = Util.null2String(personGroupData.get("filters")); String list_type = Util.null2String(personGroupData.get("list_type")); String sqltj = Util.null2String(personGroupData.get("sqltj")); Set userIds = personGroupUserIds.get(id); if (userIds == null){ userIds = Sets.newHashSet(); personGroupUserIds.put(id,userIds); } if ("0".equals(list_type) && !"".equals(empid)){ //人员清单 userIds.add(empid); }else if ("1".equals(list_type) && !"".equals(filters)){ //条件清单 sql = "select id,seclevel from hrmresource where status <> '5' and status <> '4' and status <> '7' "; filters = filters.replace("and","and"); filters = filters.replace("or","or"); if (filters.contains("field")){ sql = "select a.id,a.seclevel from hrmresource a left join cus_fielddata b on a.id=b.id where scope='HrmCustomFieldByInfoType' and a.status <> '5' and a.status <> '4' and a.status <> '7' and "+filters; }else { sql = sql+ " and "+filters; } log.info("getPersonnelGroupingByPerson filter sql : {}",sql); List> dataList = DbTools.getSqlToList(sql); for (Map dataMap :dataList){ String hrmId = Util.null2String(dataMap.get("id")); String seclevel = Util.null2String(dataMap.get("seclevel")); userIds.add(hrmId); } }else if ("2".equals(list_type) && !"".equals(sqltj)){ sqltj = Utils.converSQL(sqltj); log.debug("getPersonnelGroupingByPerson sqltj : [{}]",sqltj); List> dataList = DbTools.getSqlToList(sqltj); for (Map dataMap :dataList){ String hrmId = Util.null2String(dataMap.get("id")); userIds.add(hrmId); } } } return personGroupUserIds; } }