package com.kingdee.eas.hr.perf.handler; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.ctrl.swing.StringUtils; import com.kingdee.bos.dao.IObjectPK; import com.kingdee.bos.dao.IObjectValue; import com.kingdee.bos.dao.ObjectNotFoundException; import com.kingdee.bos.dao.ormapping.ObjectUuidPK; import com.kingdee.bos.metadata.entity.*; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.eas.basedata.org.AdminOrgUnitInfo; import com.kingdee.eas.basedata.person.PersonFactory; import com.kingdee.eas.basedata.person.PersonInfo; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.framework.CoreBaseCollection; import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryCollection; import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryFactory; import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryInfo; import com.kingdee.eas.hr.affair.IEmpEnrollBizBillEntry; import com.kingdee.eas.hr.perf.utils.PerfEvaObjectUtils; import com.kingdee.eas.hr.project.*; import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody; import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader; import com.kingdee.shr.base.syssetting.context.SHRContext; import com.kingdee.shr.base.syssetting.exception.SHRWebException; import com.kingdee.shr.base.syssetting.exception.ShrWebBizException; import com.kingdee.shr.base.syssetting.util.LocaleUtils; import com.kingdee.shr.base.syssetting.web.handler.ListHandler; import com.kingdee.shr.base.syssetting.web.json.JSONUtils; import com.kingdee.shr.perfweb.app.base.evalfile.IPerfFile; import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileCollection; import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileFactory; import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileInfo; import com.kingdee.shr.perfweb.app.base.evalplan.*; import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefCollection; import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefInfo; import com.kingdee.shr.perfweb.app.base.evalrule.PerformanceRuleInfo; import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException; import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource; import com.kingdee.shr.perfweb.evaluplan.handler.PerfEvaluObjectListHandler; import com.kingdee.shr.perfweb.util.PerfEvaObjGroupUtils; import com.kingdee.shr.perfweb.util.PerfRuleSettingUtil; import com.kingdee.shr.perfweb.util.PersonInchargeUtils; import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil; import com.kingdee.shr.perfweb.utils.PerfPlanUtils; import com.kingdee.shr.perfweb.utils.RuleHistoryUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ui.ModelMap; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.time.LocalDate; import java.time.Year; import java.util.*; /** * @author qingwu * @date 2024/12/17 * 员工考核计划-引入项目人员 * @apiNote */ public class PerfEvaluObjectListHandlerEx extends PerfEvaluObjectListHandler { //public class PerfEvaluObjectListHandlerEx extends ListHandler { private Context ctx = SHRContext.getInstance().getContext(); private static Logger logger = LoggerFactory.getLogger(PerfEvaluObjectListHandlerEx.class); public void addPerjectPersonAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException { logger.error("addPerjectPersonAction---"); String perfPlanId = request.getParameter("perfPlanId");//考核计划 String period = request.getParameter("period");//考核周期 try { IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx); PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId)); IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");//项目id //String perobjectId = "kn9PaeD+TEK227/S8zjN6bFUids="; if (perobject == null) { throw new ShrWebBizException("未查询到关联项目!"); } String perobjectId = perobject.get("id").toString(); //获取项目工时启用的人员 Set personSet = new HashSet(); StringBuilder sb = new StringBuilder(); //考核周期 IPerfPeriod iPerfPeriod = PerfPeriodFactory.getLocalInstance(ctx); PerfPeriodInfo perfPeriodInfo = iPerfPeriod.getPerfPeriodInfo(new ObjectUuidPK(period)); Date pStartDate = perfPeriodInfo.getPStartDate();//周期开始时间 Date pEndDate = perfPeriodInfo.getPEndDate();//周期結束时间 //查询项目工时分录周期内的数据 IWorkHoursReportEntry iWorkHoursReportEntry = WorkHoursReportEntryFactory.getLocalInstance(ctx); SelectorItemCollection sic = new SelectorItemCollection(); sic.add("*"); sic.add("employee.*"); sic.add("parent.*"); sic.add("parent.adminOrg.*"); FilterInfo filterInfo = new FilterInfo(); FilterItemCollection filterItems = filterInfo.getFilterItems(); filterItems.add(new FilterItemInfo("data", pStartDate, CompareType.GREATER_EQUALS)); filterItems.add(new FilterItemInfo("data", pEndDate, CompareType.LESS_EQUALS)); filterItems.add(new FilterItemInfo("parent.affiliatedProject", perobjectId, CompareType.EQUALS)); filterItems.add(new FilterItemInfo("parent.billState", "3")); EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null); WorkHoursReportEntryCollection workHoursReportEntryCollection = iWorkHoursReportEntry.getWorkHoursReportEntryCollection(entityViewInfo); logger.error("workHoursReportEntryCollection--" + workHoursReportEntryCollection.size()); if (workHoursReportEntryCollection.size() <= 0) { throw new ShrWebBizException("未查询到关联项目的人员!"); } //人员 - 组织 Map personOrAdminOrgMap = new HashMap(); //获取项目工时人员 for (int i = 0; i < workHoursReportEntryCollection.size(); i++) { WorkHoursReportEntryInfo workHoursReportEntryInfo = workHoursReportEntryCollection.get(i); //员工 PersonInfo employee = workHoursReportEntryInfo.getEmployee(); String personId = employee.getId().toString(); personSet.add(personId); //获取人员对应组织 AdminOrgUnitInfo adminOrg = workHoursReportEntryInfo.getParent().getAdminOrg(); logger.error("adminOrg--" + adminOrg); if (adminOrg != null) { String adminOrgId = adminOrg.getId().toString(); logger.error("adminOrgId--" + adminOrgId); personOrAdminOrgMap.put(personId, adminOrgId); sb.append(employee.getName()).append(","); } } if (sb.length() > 0) { sb = deleteCharAt(sb); } logger.error("personSet---" + personSet); logger.error("personOrAdminOrgMap---" + personOrAdminOrgMap); //获取员工档案 Set perfFileSet = getPerfFileColl(ctx, personSet, sb, personOrAdminOrgMap); logger.error("perfFileSet---" + perfFileSet); //最后需要保存的员工绩效档案ID StringJoiner jperfFileJiner = new StringJoiner(","); for (Object perfFileId : perfFileSet) { jperfFileJiner.add(perfFileId.toString()); } PerfPlanInfo info = null; try { info = PerfPlanFactory.getRemoteInstance().getPerfPlanInfo("where id = '" + perfPlanId + "'"); } catch (Exception var10) { var10.printStackTrace(); throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.GETPERFPLANERR)).getMessage()); } PerfEvaObjectUtils perfEvaObjectUtils = new PerfEvaObjectUtils(); perfEvaObjectUtils.addFromPerfFile(ctx, jperfFileJiner.toString(), period, "00000000-0000-0000-0000-000000000000CCE7AED4", info); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } } public StringBuilder deleteCharAt(StringBuilder sb) { if (sb.length() > 0) { sb.deleteCharAt(sb.lastIndexOf(",")); } return sb; } /** * 获取员工档案 * * @param ctx * @param personSet * @param sb * @return * @throws BOSException * @throws ShrWebBizException */ public Set getPerfFileColl(Context ctx, Set personSet, StringBuilder sb, Map personOrAdminOrgMap) throws BOSException, ShrWebBizException { //绩效考核档案 获取绩效档案id建立员工考核计划 IPerfFile iPerfFile = PerfFileFactory.getLocalInstance(ctx); FilterInfo perfFileFilterInfo = new FilterInfo(); perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("person", personSet, CompareType.INCLUDE)); perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("state", "1")); EntityViewInfo perfFileEntityViewInfo = EntityViewInfo.getInstance(perfFileFilterInfo, null, null); PerfFileCollection perfFileCollection = iPerfFile.getPerfFileCollection(perfFileEntityViewInfo); logger.error("perfFileCollection.size--" + perfFileCollection.size()); if (perfFileCollection.size() <= 0) { throw new ShrWebBizException("[" + sb.toString() + "]这些人员还未生成员工绩效档案,请维护!"); } //员工档案人员 Set perfFileSet = new HashSet(); for (int i = 0; i < perfFileCollection.size(); i++) { PerfFileInfo perfFileInfo = perfFileCollection.get(i); //人员 String personId = perfFileInfo.getPerson().getId().toString(); //组织 String adminOrgId = perfFileInfo.getAdminOrgUnit().getId().toString(); logger.error("adminOrgId -- personId --" + adminOrgId + "--" + personId); //获取项目工时组织与绩效员工档案组织一样的数据 if (personOrAdminOrgMap.containsKey(personId)) { if (adminOrgId.equals(personOrAdminOrgMap.get(personId))) { String perfFileId = perfFileInfo.getId().toString(); perfFileSet.add(perfFileId); } } } return perfFileSet; } }