package com.engine.jucailinkq.attendance.attendanceplan.cmd; import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.ExtensionClassHolder; import com.engine.jucailinkq.common.util.Utils; import com.engine.core.interceptor.CommandContext; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; import weaver.hrm.company.DepartmentComInfo; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @Slf4j public class GetWorkHoursItemByPersonCmd extends AbstractCommonCommand> { public GetWorkHoursItemByPersonCmd(Map params){ this.params=params; } @Override public BizLogContext getLogContext() { return null; } @Override public Map execute(CommandContext commandContext) { String resourceId = Util.null2String(params.get("resourceId")); String startDate = Util.null2String(params.get("startDate")); String endDate = Util.null2String(params.get("endDate")); String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs"); Map resultMap = Maps.newHashMap(); String sql = "select dxlx,dataid,dx from uf_jcl_syzz where modeid=?"; List> organizationList = DbTools.getSqlToList(sql,modeId); sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?"; Map departMentMap = DbTools.getSqlToMap(sql,resourceId); Set dataIds = Sets.newHashSet(); Map>> organizationListGroupBydxlx = organizationList.stream().collect(Collectors.groupingBy(e ->e.get("dxlx").toString())); //对象类型为人员 List> personOrganizationList = organizationListGroupBydxlx.get("0"); //对象类型为人员组织 List> personGroupOrganizationList = organizationListGroupBydxlx.get("1"); //对象类型为部门 List> departmentOrganizationList = organizationListGroupBydxlx.get("2"); //对象类型为分部 List> subCompanyOrganizationList = organizationListGroupBydxlx.get("3"); if (personOrganizationList != null){ for (Map personOrganization :personOrganizationList){ String dx = Util.null2String(personOrganization.get("dx")); String ids = dx.split("-")[0]; if (ids.equals(resourceId)){ dataIds.add(Util.null2String(personOrganization.get("dataid"))); } } } try { if (departmentOrganizationList != null){ String deptid = Util.null2String(departMentMap.get("departmentid")); String pdeptids = ""; Map petDepart = ExtensionClassHolder.getPetDepartMentThreadLocal(); if (petDepart != null){ pdeptids = petDepart.get(deptid); } if (pdeptids == null || pdeptids.equals("")){ pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); pdeptids = deptid + pdeptids; } log.debug("pdeptids : [{}]",pdeptids); for (Map departmentOrganization :departmentOrganizationList){ String dx = Util.null2String(departmentOrganization.get("dx")); String ids = dx.split("-")[0]; for (String pdeptid : pdeptids.split(",")){ if (pdeptid.equals(ids)){ dataIds.add(Util.null2String(departmentOrganization.get("dataid"))); } } } } }catch (Exception e){ log.error("catch error :{}",e); } if (subCompanyOrganizationList != null){ String subCompanyId = Util.null2String(departMentMap.get("subcompanyid1")); for (Map subCompanyOrganization :subCompanyOrganizationList){ String dx = Util.null2String(subCompanyOrganization.get("dx")); String ids = dx.split("-")[0]; if (ids.equals(subCompanyId)){ dataIds.add(Util.null2String(subCompanyOrganization.get("dataid"))); } } } if (personGroupOrganizationList != null){ Map>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal(); Set personnelGroupIds = null; if (personBelongGroup == null){ Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; log.debug("query personGroupData : {}",sql); List> personGroupData = DbTools.getSqlToList(sql); personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate); }else { List> personnelGroups = personBelongGroup.get(resourceId) == null? Lists.newArrayList():personBelongGroup.get(resourceId); personnelGroups = personnelGroups.stream().filter(e->(Util.null2String(e.get("bdate")).equals("") || DateUtil.getTime(e.get("bdate").toString()).compareTo(DateUtil.getTime(startDate))<=0) && (Util.null2String(e.get("edate")).equals("") || DateUtil.getTime(e.get("edate").toString()).compareTo(DateUtil.getTime(startDate))>=0)).collect(Collectors.toList()); personnelGroupIds = personnelGroups.stream().map(e->e.get("mainid").toString()).collect(Collectors.toSet()); } log.debug("personnelGroupIds : {}",personnelGroupIds); for (Map personGroupOrganization :personGroupOrganizationList){ String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0]; if (personnelGroupIds.contains(personnelGroupId)){ dataIds.add(Util.null2String(personGroupOrganization.get("dataid"))); } } } List> attendanceItems = Lists.newArrayList(); log.debug("dataIds : {}",dataIds); sql = "select * from uf_jcl_kq_zhgs where id in ("+String.join(",",dataIds)+")"; if (dataIds.size() > 0){ log.debug("query GetWorkHoursItemByPersonCmd sql : {}",sql); attendanceItems.addAll(DbTools.getSqlToList(sql)); } resultMap.put("data",attendanceItems); resultMap.put("total",attendanceItems.size()); return resultMap; } }