123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- 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<String, String> 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;
- }
- }
|