You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

286 lines
14 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public GetPersonDateBySuitOrganzation(Map<String,Object> params){
this.params=params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
String modeId = Util.null2String(params.get("modeId"));
String sql = "select dxlx,aqjb,dataid,dx from uf_jcl_syzz where modeid=?";
//假期额度适用组织所有值集合
List<Map<String,Object>> 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<Map<String,Object>> vacationList = DbTools.getSqlToList(sql);
//人力资源id假别规则id
Map<String,Object> personMap = Maps.newHashMap();
//人员分组id假别规则id
Map<String,Object> personOrganzationMap = Maps.newHashMap();
//部门id假别规则id
Map<String,Object> departMentMap = Maps.newHashMap();
//分部id假别规则id
Map<String,Object> subCompanyMap = Maps.newHashMap();
//以假期额度生成规则id分割的假期额度生成规则值集合
Map<String,String> vacationMap = Maps.newHashMap();
for (Map<String,Object> vocation:vacationList){
vacationMap.put(vocation.get("dataid").toString(),vocation.get("jb").toString());
}
Map<String,List<Map<String,Object>>> vacationGroupByDataIdMap = vacationList.stream().collect(Collectors.groupingBy(e->e.get("dataid").toString()));
Set<String> personOrganzationIds = Sets.newHashSet();
Set<String> departMentIds = Sets.newHashSet();
Set<String> subCompanyIds = Sets.newHashSet();
for (Map<String,Object> 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<String,String> psersonSet = (Map<String,String>)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<String,String> personOrganzationSet = (Map<String,String>)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<String,String> departMentSet = (Map<String,String>)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<String,String> subCompanySet = (Map<String,String>)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<Map<String,Object>> hrmListByDepartAndSubCompanyIds = DbTools.getSqlToList(sql);
//部门id-人员id集合
Map<String,List<Map<String,Object>>> hrmListGroupByDepart = hrmListByDepartAndSubCompanyIds.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("departmentid"))));
log.info("hrmListGroupByDepart : [{}]",hrmListGroupByDepart);
//分部id-人员id集合
Map<String,List<Map<String,Object>>> 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<String,Set<String>> personGroupUserIds = getPersonGroupUserIds(personOrganzationIds);
log.info("personGroupUserIds : [{}]",personGroupUserIds);
log.info("personOrganzationMap : [{}]",personOrganzationMap);
for (Map.Entry<String,Object> entry : personOrganzationMap.entrySet()){
String personGroupId = entry.getKey();
//人员分组假别假期规则id
Map<String,String> personGroupHolidayMap = (Map<String,String>)entry.getValue();
Set<String> userIds = personGroupUserIds.get(personGroupId);
if (userIds == null || userIds.size() == 0) {
continue;
}
for (String userId :userIds){
//人力资源原本已有的假期假别规则id
Map<String,String> psersonSet = personMap.get(userId) == null?null:(Map<String,String>)personMap.get(userId);
if (psersonSet == null) {
personMap.put(userId,personGroupHolidayMap);
}else {
for (Map.Entry<String,String> 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<String,Object> entry : departMentMap.entrySet()){
String departMentId = entry.getKey();
//部门假别假期规则id
Map<String,String> departMentHolidayMap = (Map<String,String>)entry.getValue();
List<Map<String,Object>> userIds = hrmListGroupByDepart.get(departMentId);
if (userIds == null || userIds.size() == 0) {
continue;
}
for (Map<String,Object> userIdMap :userIds){
//人力资源原本已有的假期假别规则id
String userId = Util.null2String(userIdMap.get("id"));
Map<String,String> psersonSet = personMap.get(userId) == null?null:(Map<String,String>)personMap.get(userId);
if (psersonSet == null) {
personMap.put(userId,departMentHolidayMap);
}else {
for (Map.Entry<String,String> 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<String,Object> entry : subCompanyMap.entrySet()){
String subCompanyId = entry.getKey();
//分部假别假期规则id
Map<String,String> subCompanyHolidayMap = (Map<String,String>)entry.getValue();
List<Map<String,Object>> userIds = hrmListGroupBySubCompany.get(subCompanyId);
if (userIds == null || userIds.size() == 0) {
continue;
}
for (Map<String,Object> userIdMap :userIds){
//人力资源原本已有的假期假别规则id
String userId = Util.null2String(userIdMap.get("id"));
Map<String,String> psersonSet = personMap.get(userId) == null?null:(Map<String,String>)personMap.get(userId);
if (psersonSet == null) {
personMap.put(userId,subCompanyHolidayMap);
}else {
for (Map.Entry<String,String> personGroupHolidayEntry :subCompanyHolidayMap.entrySet()){
if (psersonSet.get(personGroupHolidayEntry.getKey()) == null){
psersonSet.put(personGroupHolidayEntry.getKey(),personGroupHolidayEntry.getValue());
}
}
personMap.put(userId,psersonSet);
}
}
}
log.info("personMap : [{}]",personMap);
Map<String,Object> newpersonMap = Maps.newHashMap();
for (Map.Entry<String,Object> entry :personMap.entrySet()){
String userId = entry.getKey();
Map<String, String> vocationMap = (Map<String, String>)entry.getValue();
Map<String,Object> dataMap = Maps.newHashMap();
for (Map.Entry<String,String> 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<String,Set<String>> getPersonGroupUserIds(Set<String> 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<Map<String,Object>> personGroupDataList = DbTools.getSqlToList(sql);
Map<String,Set<String>> personGroupUserIds = Maps.newHashMap();
for (Map<String,Object> 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<String> 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");
filters = filters.replace("","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<Map<String,Object>> dataList = DbTools.getSqlToList(sql);
for (Map<String,Object> 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<Map<String,Object>> dataList = DbTools.getSqlToList(sqltj);
for (Map<String,Object> dataMap :dataList){
String hrmId = Util.null2String(dataMap.get("id"));
userIds.add(hrmId);
}
}
}
return personGroupUserIds;
}
}