package com.kingdee.eas.hr.perf.handler; import java.sql.SQLException; import java.sql.Timestamp; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.StringJoiner; import javax.ejb.ObjectNotFoundException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hive.ql.parse.HiveParser_IdentifiersParser.sysFuncNames_return; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ui.ModelMap; import org.springframework.util.CollectionUtils; import com.google.common.collect.Sets; 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.ormapping.ObjectUuidPK; import com.kingdee.bos.metadata.entity.EntityViewInfo; import com.kingdee.bos.metadata.entity.FilterInfo; import com.kingdee.bos.metadata.entity.FilterItemCollection; import com.kingdee.bos.metadata.entity.FilterItemInfo; import com.kingdee.bos.metadata.entity.SelectorItemCollection; import com.kingdee.bos.metadata.entity.SelectorItemInfo; import com.kingdee.bos.metadata.entity.SorterItemCollection; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.bos.sql.ParserException; import com.kingdee.bos.util.BOSUuid; import com.kingdee.eas.basedata.org.AdminOrgUnitInfo; import com.kingdee.eas.basedata.person.PersonInfo; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.framework.CoreBaseCollection; import com.kingdee.eas.hr.perf.utils.PerfEvaObjectUtils; import com.kingdee.eas.hr.project.IWorkHoursReportEntry; import com.kingdee.eas.hr.project.WorkHoursReportEntryCollection; import com.kingdee.eas.hr.project.WorkHoursReportEntryFactory; import com.kingdee.eas.hr.project.WorkHoursReportEntryInfo; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; 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.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.EvaluStageEnum; import com.kingdee.shr.perfweb.app.base.evalplan.IPerfPeriod; import com.kingdee.shr.perfweb.app.base.evalplan.IPerfPlan; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjRelationObjectCollection; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjRelationObjectFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjRelationObjectInfo; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjectCollection; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjectFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjectInfo; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjectPersonalGoalStatusEnum; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjectSendStatusEnum; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjectUnitGoalsStatusEnum; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaObjectWFStatusEnum; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaPersonInchargeCollection; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaPersonInchargeFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaPersonInchargeInfo; import com.kingdee.shr.perfweb.app.base.evalplan.PerfEvaluAdminResponsorCollection; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsFillerObjectCollection; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsFillerObjectFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsFillerObjectInfo; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsGroupCollection; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsGroupFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsObjectCollection; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsObjectFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfGoalsObjectInfo; import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo; import com.kingdee.shr.perfweb.app.base.evalplan.PerfPlanFactory; import com.kingdee.shr.perfweb.app.base.evalplan.PerfPlanInfo; import com.kingdee.shr.perfweb.app.base.evalplan.RefStatusEnum; import com.kingdee.shr.perfweb.app.base.evalplan.ScoreTaskStatusEnum; import com.kingdee.shr.perfweb.app.base.evalplan.SendTypeEnum; import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefCollection; import com.kingdee.shr.perfweb.app.base.evalrule.ScoringWayEnum; import com.kingdee.shr.perfweb.app.common.YesOrNoEnum; 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.planexecute.handler.perfGoalsWorkListHandler; import com.kingdee.shr.perfweb.util.GetEntityInfoUtils; 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 com.kingdee.shr.perfweb.web.handler.base.CommonBatchListHandler; /** * @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); protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map initData) throws SHRWebException { super.setInitData(request, response, modelMap, initData); Context ctx = SHRContext.getInstance().getContext(); Map custom_params = (Map) initData.get("custom_params"); //考核周期 String perfPlanId = (String) custom_params.get("perfPlanId"); String periodId = (String) custom_params.get("period"); try { IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx); PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId)); IObjectValue perobject = (IObjectValue)perfPlanInfo.get("perobjectId"); initData.put("perobjectId", perobject); initData.put("fromPeriod", isFromPeriodAction(ctx,periodId)); } catch(BOSException e) { throw new RuntimeException(e); } catch(EASBizException e) { throw new RuntimeException(e); } } 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(); IObjectPK[] iObjectPKS = perfEvaObjectUtils.addFromPerfFile(ctx, jperfFileJiner.toString(), period, "00000000-0000-0000-0000-000000000000CCE7AED4", info); Map res = new HashMap(); res.put("perfFileSet", perfFileSet); res.put("jperfFileJiner", jperfFileJiner); res.put("iObjectPKS", iObjectPKS); JSONUtils.writeJson(response, res); } 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; } public void checkCansetPerfRelationTypeAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { perfGoalsWorkListHandler p = new perfGoalsWorkListHandler(); p.checkCansetPerfRelationTypeAction(request, response, modelMap); } public void alterEvaWorkFlowAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException, EASBizException { Context ctx = SHRContext.getInstance().getContext(); perfGoalsWorkListHandler p = new perfGoalsWorkListHandler(); try { String billId = this.getDealIdStr(request); StringBuilder sql = new StringBuilder("select (fid||'$'||FWORKFLOWID) as wfid from T_EVA_PerfEvaObject where fid in(''"); String[] billIds = billId.split(","); for (String id : billIds) { sql.append(",'"); sql.append(id); sql.append("'"); } sql.append(")"); IRowSet rs = DbUtil.executeQuery(ctx, sql.toString()); Set list = Sets.newHashSet(); while (rs.next()) { list.add(rs.getString("wfid")); } if (list.size()>0){ String billid_wid = CommonBatchListHandler.joinStr(list); request.setAttribute("billId",billid_wid); } }catch (Exception e){ e.printStackTrace(); } p.alterEvaWorkFlowAction(request,response,modelMap,batchMessageTipsHeader); } public String isFromPeriodAction(Context ctx ,String periodId) throws SHRWebException { //自动引用上期数据---------- String fromPeriod = null; //1.首先查询是否有人-当前考核周期 IRowSet set = null; try { set = DbUtil.executeQuery(ctx, "select * from T_EVA_PerfEvaObject where FPERIODID ='"+periodId+"'"); if(set != null && set.size() > 0 && set.next()) { }else { fromPeriod = getFromPeriod(periodId); } return fromPeriod; } catch (BOSException | SQLException e) { e.printStackTrace(); } return fromPeriod; } public String addFromPeriodAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { String customItems = request.getParameter("custom_params"); Context ctx = SHRContext.getInstance().getContext(); if (!StringUtils.isEmpty(customItems)) { Map map = JSONUtils.convertJsonToObject(ctx, customItems); logger.error("getListDataAction-map--" + map.toString()); String periodId = map.get("periodId").toString(); checkPeriod(periodId); String perfPlanId = request.getParameter("perfPlanId"); String hrOrgUnit = request.getParameter("hrOrgId"); String fromPeriod = null; //自动引用上期数据---------- //1.首先查询是否有人-当前考核周期 IRowSet set = null; try { fromPeriod = getFromPeriod(periodId); if(fromPeriod != null) { Map mapRequest = new HashMap(); mapRequest.put("isUpdate", "1"); mapRequest.put("isRefGroup", "1"); mapRequest.put("isRefPersonIncharge", "1"); mapRequest.put("isUpdateIndicator", "1"); mapRequest.put("fromPeriod", fromPeriod); mapRequest.put("periodId", periodId); mapRequest.put("hrOrgUnit", hrOrgUnit); myAddFromPeriod(mapRequest, hrOrgUnit,request); return null; } } catch (BOSException | SQLException e) { e.printStackTrace(); } } return null; } private void myAddFromPeriod(Map mapRequest, String hrOrgUnit,HttpServletRequest request) throws SHRWebException { String isUpdate = mapRequest.get("isUpdate"); String isRefGroup = mapRequest.get("isRefGroup"); String isRefPersonIncharge = mapRequest.get("isRefPersonIncharge"); String isUpdateIndicator = mapRequest.get("isUpdateIndicator"); Map filemap = new HashMap(); Set set = new HashSet(); String[] ids = null; String bePerdiodId = mapRequest.get("fromPeriod"); String periodId = mapRequest.get("periodId"); PerfEvaObjectCollection coll = this.getEvaObjectCollection(bePerdiodId, set); if (coll != null && coll.size() >= 1) { Boolean isOrg = coll.get(0).getIsOrg().getValue() == 1; CoreBaseCollection croeBase = new CoreBaseCollection(); Map map = null; PerfPeriodInfo currentPeriodInfo = null; try { map = new HashMap(); currentPeriodInfo = PerfPeriodFactory.getRemoteInstance() .getPerfPeriodInfo("select *, perfRule.scoringWay where id ='" + periodId + "'"); if ("1".equals(isRefGroup)) { Map checkResult = PerfRuleSettingUtil.checkRuleData( currentPeriodInfo.getPerfRule().getId().toString(), "", currentPeriodInfo.getPerfPlan().getId().toString(), this.ctx); boolean flag = (Boolean) checkResult.get("result"); if (!flag) { throw new ShrWebBizException((String) checkResult.get("msg")); } map = PerfEvaObjectFactory.getRemoteInstance().addNewAndGroup(bePerdiodId, periodId, set, isUpdateIndicator); } } catch (Exception var37) { logger.error("addFromPeriod refGroup error: " + var37); throw new ShrWebBizException(var37.getMessage()); } try { PerfPeriodInfo perfPeriodInfo = GetEntityInfoUtils.getPerfPeriodInfo(this.ctx, bePerdiodId); String defaultWorkFlow = ""; PWorkFlowDefCollection defaultWorkFlowColl = RuleHistoryUtils.getDefaultWorkFlow(this.ctx, currentPeriodInfo.getPerfRule().getId().toString()); if (defaultWorkFlowColl != null && defaultWorkFlowColl.size() > 0) { defaultWorkFlow = defaultWorkFlowColl.get(0).getId().toString(); } if (StringUtils.isEmpty(defaultWorkFlow) && perfPeriodInfo.getIsHistoryUpdate().getValue() == 1) { PerfPlanInfo perfPlanInfo = PerfPlanFactory.getRemoteInstance() .getPerfPlanInfo("where id = '" + perfPeriodInfo.getPerfPlan().getId().toString() + "'"); if (perfPlanInfo.getDefaultWorkFlow() != null) { defaultWorkFlow = perfPlanInfo.getDefaultWorkFlow().getId().toString(); } } if ("1".equals(isUpdate) && !isOrg) { filemap = this.getLastPerfFile(ids, hrOrgUnit, bePerdiodId); } else if ("1".equals(isUpdate) && isOrg) { this.getLastAdminHis(ids, coll, bePerdiodId); } HashMap flowIdMap = RuleHistoryUtils.getFlowIdMap(this.ctx, bePerdiodId, periodId); HashMap evaObjMap = new HashMap(); new HashMap(); ScoringWayEnum scoringWay = currentPeriodInfo.getPerfRule().getScoringWay(); for (int i = 0; coll != null && i < coll.size(); ++i) { PerfEvaObjectInfo info = coll.get(i); if (info.getIsOrg().getValue() != 1 && "1".equals(isUpdate) && info.getPerfFile().getAssignType().getValue() == 1) { String personId = info.getPerson().getId().toString(); PerfFileInfo perfFileInfo = (PerfFileInfo) ((Map) filemap).get(personId); if (perfFileInfo != null) { info.setPerfFile(perfFileInfo); info.setAdminOrgUnit(perfFileInfo.getAdminOrgUnit()); } } BOSUuid bosUuid = BOSUuid.create("8188E78B"); evaObjMap.put(info.getId().toString(), bosUuid.toString()); info.setId(bosUuid); PerfGoalsObjectCollection pgoColl = info.getPerfGoalsObject(); for (int j = 0; j < pgoColl.size(); ++j) { pgoColl.get(j).setPerfEvaObject(info); pgoColl.get(j).setId((BOSUuid) null); } PerfGoalsFillerObjectCollection perfGoalsFillerObject = info.getPerfGoalsFillerObject(); for (int j = 0; j < perfGoalsFillerObject.size(); ++j) { perfGoalsFillerObject.get(j).setPerfEvaObject(info); perfGoalsFillerObject.get(j).setId((BOSUuid) null); } PerfEvaluAdminResponsorCollection perfResponsorObject = info.getResponsor(); if (perfResponsorObject != null) { for (int j = 0; j < perfResponsorObject.size(); ++j) { perfResponsorObject.get(j).setEvaObj(info); perfResponsorObject.get(j).setId((BOSUuid) null); } } info.put("period", periodId); String soureGroupId; if ("1".equals(isRefGroup)) { soureGroupId = info.getBelongGroup(); logger.error("the soureGroupId is: " + soureGroupId); logger.error("the groupMap is: " + map); if (map != null && ((Map) map).get(soureGroupId) != null) { logger.error("the map.get(soureGroupId) is: " + ((Map) map).get(soureGroupId)); info.setBelongGroup((String) ((Map) map).get(soureGroupId)); } else if (!StringUtils.isEmpty(soureGroupId)) { String oql = "where period = '" + periodId + "' and relatedGroup ='" + soureGroupId + "'"; PerfGoalsGroupCollection goalsColl = PerfGoalsGroupFactory.getRemoteInstance() .getPerfGoalsGroupCollection(oql); if (goalsColl != null && goalsColl.size() > 0) { info.setBelongGroup(goalsColl.get(0).getId().toString()); } else { info.setBelongGroup((String) null); } } else { info.setBelongGroup((String) null); } } else { info.setBelongGroup((String) null); } info.setPersonalGoalStatus(PerfEvaObjectPersonalGoalStatusEnum.UNESTABLISHED); info.setUnitGoalsStatus(PerfEvaObjectUnitGoalsStatusEnum.UNASSIGN); info.put("targetBackReason", (Object) null); info.setGoalsPercent(""); info.setGoalsScore(""); info.setSendedTime((Date) null); info.setSendTiming((Timestamp) null); info.setChangeTime((Date) null); info.setTaskSendStatus(PerfEvaObjectSendStatusEnum.UNSENT); info.setWorkFlowStatus(PerfEvaObjectWFStatusEnum.UNSTARTED); info.setScoreTaskStatus(ScoreTaskStatusEnum.UNSEND); soureGroupId = (String) flowIdMap.get(info.getWorkFlow().getId().toString()); info.put("workFlow", soureGroupId == null ? defaultWorkFlow : soureGroupId); info.setTargetMakeSure(perfPeriodInfo.getPerfPlan().isTargetMakeSure() ? 1 : 0); if (!"1".equals(isRefPersonIncharge)) { info.setPersonInChargeType( PersonInchargeUtils.setSuperior2PersonInChargeType(info.getPersonInChargeType())); info.setPointPosition((String) null); info.put("personIncharge", new PerfEvaPersonInchargeCollection()); } else { PerfEvaPersonInchargeCollection personIncharge = info.getPersonIncharge(); if (personIncharge != null && personIncharge.size() > 0) { PerfEvaPersonInchargeCollection personInchargeTemp = new PerfEvaPersonInchargeCollection(); for (int j = 0; j < personIncharge.size(); ++j) { PerfEvaPersonInchargeInfo personInchargeInfo = personIncharge.get(j); if ("0".equals(personInchargeInfo.getComefrom())) { personInchargeInfo.setEvaObj(info); personInchargeInfo.setId((BOSUuid) null); personInchargeTemp.add(personInchargeInfo); } } info.put("personIncharge", personInchargeTemp); } } croeBase.add(info); } RuleHistoryUtils.copyMatrixWork(this.ctx, evaObjMap, bePerdiodId, periodId); } catch (Exception var38) { logger.error("addFromPeriod error: " + var38); throw new ShrWebBizException( (new SHRPerfWebBizException(SHRPerfWebBizException.REFELASTPERFFILEERR)).getMessage()); } runBatchSaveEvaObject(mapRequest, croeBase,request); } else { throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.REFERPERIODHASNOEVAOBJ)).getMessage()); } } private PerfEvaObjectCollection getEvaObjectCollection(String period, Set idSet) { FilterInfo filter = new FilterInfo(); if (idSet.size() > 0) { filter.getFilterItems().add(new FilterItemInfo("id", idSet, CompareType.INCLUDE)); } else { filter.getFilterItems().add(new FilterItemInfo("period", period, CompareType.EQUALS)); } filter.getFilterItems().add(new FilterItemInfo("changeDealType", 100, CompareType.EQUALS)); EntityViewInfo viewInfo = new EntityViewInfo(); SelectorItemCollection sic = viewInfo.getSelector(); sic.add(new SelectorItemInfo("*")); sic.add(new SelectorItemInfo("perfFile.*")); sic.add(new SelectorItemInfo("perfFile.person.number")); sic.add(new SelectorItemInfo("perfFile.person.id")); sic.add(new SelectorItemInfo("perfGoalsObject.*")); sic.add(new SelectorItemInfo("perfGoalsFillerObject.*")); sic.add(new SelectorItemInfo("responsor.*")); sic.add(new SelectorItemInfo("personIncharge.*")); sic.add(new SelectorItemInfo("person.number")); sic.add(new SelectorItemInfo("person.name")); viewInfo.setFilter(filter); viewInfo.setSelector(sic); new PerfEvaObjectCollection(); try { PerfEvaObjectCollection coll = PerfEvaObjectFactory.getRemoteInstance().getPerfEvaObjectCollection(viewInfo); return coll; } catch (BOSException var8) { logger.error(var8.toString()); return null; } } private Map getLastPerfFile(String[] ids, String hrOrgUnit, String bePerdiodId) throws BOSException, EASBizException { PerfEvaObjectCollection evaColl = this.getEvaObjs(ids, bePerdiodId); return this.getPersonLastFile(hrOrgUnit, evaColl); } private Map getPersonLastFile(String hrOrgUnit, PerfEvaObjectCollection evaColl) throws BOSException { Map map = new HashMap(); Set personSet = new HashSet(); boolean isOrg = false; for (int i = 0; i < evaColl.size(); ++i) { PerfEvaObjectInfo info = evaColl.get(i); isOrg = info.getIsOrg().getValue() == 1; if (isOrg) { return map; } String personId = info.getPerson().getId().toString(); if (info.getPerfFile().getAssignType().getValue() == 0) { map.put(personId, info.getPerfFile()); } else { personSet.add(personId); } } FilterInfo filter = new FilterInfo(); EntityViewInfo viewInfo = new EntityViewInfo(); SelectorItemCollection sic = viewInfo.getSelector(); FilterItemCollection filterItems = filter.getFilterItems(); filterItems.add(new FilterItemInfo("person", personSet, CompareType.INCLUDE)); filterItems.add(new FilterItemInfo("hrOrgUnit", hrOrgUnit, CompareType.EQUALS)); filterItems.add(new FilterItemInfo("assignType", 1, CompareType.EQUALS)); filterItems.add(new FilterItemInfo("state", 1)); filterItems.add(new FilterItemInfo("assignType", 1, CompareType.EQUALS)); sic.add(new SelectorItemInfo("*")); sic.add(new SelectorItemInfo("position.*")); SorterItemCollection sorterItemCollection = new SorterItemCollection(); try { sorterItemCollection.getSorter().decode("order by CREATETIME DESC"); } catch (ParserException var15) { logger.error(var15.toString()); } viewInfo.setFilter(filter); viewInfo.setSorter(sorterItemCollection); PerfFileCollection coll = PerfFileFactory.getRemoteInstance().getPerfFileCollection(viewInfo); for (int i = 0; i < coll.size(); ++i) { PerfFileInfo perfFile = coll.get(i); if (perfFile.getState().getValue() == 1) { String personIdKey = perfFile.getPerson().getId().toString(); if (map.get(personIdKey) == null) { map.put(personIdKey, perfFile); } } } return map; } protected String runBatchSaveEvaObject(Map mapRequest, CoreBaseCollection croeBase,HttpServletRequest request) throws SHRWebException { CoreBaseCollection mycroeBase = new CoreBaseCollection(); int sucess = 0; int failure = 0; String billId = ""; BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader(); Set set = this.getCurrentRequestAdminOrgRangeIdSet(request); try { Set sucessIds = new HashSet(); String periodId = mapRequest.get("periodId"); String hrOrgUnit = mapRequest.get("hrOrgUnit"); Map verifyMap = new HashMap(); Map evaPlanNameMap = this.getPerfPlanName(periodId, hrOrgUnit); CoreBaseCollection addCoreColl = new CoreBaseCollection(); int count = croeBase.size(); int j = 1; Set personIds = new HashSet(); int i; PerfEvaObjectInfo info; for (i = 0; i < count; ++i) { info = (PerfEvaObjectInfo) croeBase.get(i); personIds.add(info.getPerson().getId().toString()); if (j != 500 && i != count - 1) { ++j; } else { Map tempMap = this.getEvaObject(periodId, hrOrgUnit, personIds); if (!CollectionUtils.isEmpty(tempMap)) { verifyMap.putAll(tempMap); } j = 1; personIds = new HashSet(); } } for (i = 0; i < croeBase.size(); ++i) { info = (PerfEvaObjectInfo) croeBase.get(i); BatchMessageTipsBody body = new BatchMessageTipsBody(); try { String id = info.getPerfFile().getId().toString(); billId = billId + id + ","; body.setId(id); if (sucessIds.contains(id)) { continue; } sucessIds.add(id); if (!set.contains(info.getAdminOrgUnit().getId().toString()) && info.getPerfFile().isUseDefault()) { throw new BOSException( (new SHRPerfWebBizException(SHRPerfWebBizException.USERHASNOPERFFILEORGPERMISSION)) .getMessage()); } String key = info.getPerson().getNumber() + "_" + info.getPerson().getName() + "_" + info.getPerfFile().getPosition().getId().toString() + "_" + info.getPerfFile().getAssignType().getValue(); if (!StringUtils.isEmpty((String) verifyMap.get(key))) { throw new BOSException((new SHRPerfWebBizException(SHRPerfWebBizException.EVAOBJALREADYADDED, new Object[]{evaPlanNameMap.get(verifyMap.get(key))})).getMessage()); } addCoreColl.add(info); ++sucess; body.setMuitTipsState(Boolean.TRUE); body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATESUCCESS, this.ctx)); } catch (BOSException var22) { croeBase.removeObject(i); --i; ++failure; body.setMuitTipsState(Boolean.FALSE); body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATEFAILEDWITHSUFFIX, this.ctx, new Object[]{var22.getMessage()})); logger.error(var22.getMessage(), var22); } catch (Exception var23) { croeBase.removeObject(i); --i; ++failure; body.setMuitTipsState(Boolean.FALSE); if (var23 instanceof ObjectNotFoundException) { body.setMuitTipsMessage( SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.DATADELETED, this.ctx)); } else { body.setMuitTipsMessage( SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATEFAILED, this.ctx)); } logger.error(var23.getMessage(), var23); } batchMessageTipsHeader.addResult(body); if (addCoreColl.size() == 100) { PerfEvaObjectFactory.getRemoteInstance().saveBatchData(addCoreColl); mycroeBase.addCollection(addCoreColl); addCoreColl.clear(); } } if (addCoreColl.size() > 0) { PerfEvaObjectFactory.getRemoteInstance().saveBatchData(addCoreColl); mycroeBase.addCollection(addCoreColl); addCoreColl.clear(); } batchMessageTipsHeader.setBillId(billId.substring(0, billId.length() - 1)); batchMessageTipsHeader.setFailureCount(failure); batchMessageTipsHeader.setSuccessCount(sucess); if (sucess > 0) { PerfPlanUtils.writeRefStateForPerfPeriod(this.ctx, periodId, RefStatusEnum.REFERED); } // JSONUtils.SUCCESS(batchMessageTipsHeader); //添加人员后自动分组 设置考核关系 mycroeBase = updateAbovePerfEvaObject(mycroeBase,"1",periodId); PerfEvaObjectFactory.getRemoteInstance().updateBatchData(mycroeBase); for (int k = 0; k < mycroeBase.size(); k++) { info = (PerfEvaObjectInfo) mycroeBase.get(k); logger.error("getBelongGroup"+info.getBelongGroup()); } updateAbovePerfEvaObject(mycroeBase,"2",periodId); return null; } catch (Exception var24) { throw new SHRWebException(var24.getMessage(), var24); } } protected String runBatchSaveEvaObject(HttpServletRequest request, CoreBaseCollection croeBase) throws SHRWebException { //添加人员后自动分组 String addModel = request.getParameter("addModel"); if ("0".equals(addModel)) { //单独添加人员 String billId = this.getBillId(request); String[] ids = null; ids = billId.split(","); Set set = new HashSet(); set.addAll(Arrays.asList(ids)); if(set != null && set.size() >0) { try { System.out.println("runBatchSaveEvaObject+11111"+croeBase.toString()); updateAbovePerfEvaObject(croeBase,"1",null); } catch (BOSException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (EASBizException e) { e.printStackTrace(); } } } String getStr = super.runBatchSaveEvaObject(request, croeBase); //设置考核关系 if ("0".equals(addModel)) { //单独添加人员 try { updateAbovePerfEvaObject(croeBase,"2",null); } catch (EASBizException e) { e.printStackTrace(); } catch (BOSException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } return getStr; } /** * 上一期分组和考核关系 * @param perfPlanId * @param periodId * @return * @throws SQLException * @throws BOSException * @throws EASBizException */ private CoreBaseCollection updateAbovePerfEvaObject(CoreBaseCollection croeBase,String type,String periodId) throws BOSException, SQLException, EASBizException { PerfEvaObjectInfo info = null; String fromPeriod = null; IRowSet set = null; String FBELONGGROUP = null; String getperiodId = null; for (int i = 0; i < croeBase.size(); ++i) { info = (PerfEvaObjectInfo) croeBase.get(i); if(info.get("period") != null && info.get("period").toString() != null){ getperiodId = info.get("period").toString(); }else { getperiodId = periodId == null?info.getPeriod().getId().toString():periodId; } if(fromPeriod == null) { fromPeriod = getFromPeriod(getperiodId); } System.out.println("updateAbovePerfEvaObject+22222"+fromPeriod); if(fromPeriod != null) { if(type.equals("1")) { StringBuffer sb = new StringBuffer(); sb.append("SELECT t1.fid FBELONGGROUP,t.FISSUPERIOR FISSUPERIOR"); sb.append(",t.FISSELF FISSELF,t.FGOALSPERCENT FGOALSPERCENT,FPERSONINCHARGEPOSITIONID FPERSONINCHARGEPOSITIONID" + ",FPERSONINCHARGETYPEID FPERSONINCHARGETYPEID FROM T_EVA_PerfEvaObject t "); sb.append(" inner join T_EVA_PerfGoalsGroup T1 on T1.FRELATEDGROUPID = t.FBELONGGROUP"); sb.append(" where t.FPERIODID = '"+fromPeriod+"' and T1.FPERIODID = '"+getperiodId+"'"); sb.append(" and t.FPERSONID ='"+info.getPerson().getId().toString()+"' "); sb.append(" and t.FBELONGGROUP is not null"); // System.out.println("ppinfo"+sb.toString()); set = DbUtil.executeQuery(ctx, sb.toString()); //如果有上一期的分组则 if(set != null && set.size() > 0 && set.next()) { FBELONGGROUP = set.getString("FBELONGGROUP"); info.setBelongGroup(FBELONGGROUP); info.setIsSuperior(set.getInt("FISSUPERIOR") == 1?YesOrNoEnum.YES:YesOrNoEnum.NO); info.setIsSelf(set.getInt("FISSELF") == 1?YesOrNoEnum.YES:YesOrNoEnum.NO); info.setGoalsPercent(set.getString("FGOALSPERCENT")); info.setPersonalGoalStatus(PerfEvaObjectPersonalGoalStatusEnum.UNESTABLISHED); info.setUnitGoalsStatus(PerfEvaObjectUnitGoalsStatusEnum.UNASSIGN); info.setPersonInchargePosition(set.getString("FPERSONINCHARGEPOSITIONID")); info.setPersonInChargeType(set.getString("FPERSONINCHARGETYPEID")); info.setWorkFlowStatus(PerfEvaObjectWFStatusEnum.UNSTARTED); info.setSendType(SendTypeEnum.HANDWORK); info.setIsSendEmail(YesOrNoEnum.NO); }else { info.setPersonalGoalStatus(PerfEvaObjectPersonalGoalStatusEnum.UNESTABLISHED); info.setWorkFlowStatus(PerfEvaObjectWFStatusEnum.UNSTARTED); info.setSendType(SendTypeEnum.HANDWORK); info.setIsSendEmail(YesOrNoEnum.NO); } } //如果有考核关系则 if(info != null && info.size() > 0 && info.getId() != null && type.equals("2")) { String getSql = "SELECT fid FROM T_EVA_PerfEvaObject where FPERIODID = '"+fromPeriod+"' and FPERSONID ='"+info.getPerson().getId().toString()+"' "; System.out.println("getSql:"+getSql); //考核关系 PerfEvaObjRelationObjectInfo reInfo = null; PerfEvaObjRelationObjectCollection reColl = PerfEvaObjRelationObjectFactory.getLocalInstance(ctx).getPerfEvaObjRelationObjectCollection(" where id in(" + "SELECT fid fid FROM T_EVA_PerfEvaObjRelationObject where FEVAOBJID " + "in ("+getSql+"))"); if(reColl != null && reColl.size() > 0) { for (int j = 0; j < reColl.size(); j++) { reInfo = reColl.get(j); reInfo.setEvaObj(info); reInfo.setId(null); PerfEvaObjRelationObjectFactory.getLocalInstance(ctx).addnew(reInfo); } } //目标填报 PerfGoalsFillerObjectInfo foInfo = null; PerfGoalsFillerObjectCollection foColl = PerfGoalsFillerObjectFactory.getLocalInstance(ctx).getPerfGoalsFillerObjectCollection(" where id in(" + "SELECT fid fid FROM T_EVA_PerfGoalsFillerObject where FPERFEVAOBJECTID " + "in ("+getSql+"))"); if(foColl != null && foColl.size() > 0) { for (int j = 0; j < foColl.size(); j++) { foInfo = foColl.get(j); foInfo.setPerfEvaObject(info); foInfo.setId(null); PerfGoalsFillerObjectFactory.getLocalInstance(ctx).addnew(foInfo); } } //目标下达 PerfGoalsObjectInfo goInfo = null; PerfGoalsObjectCollection goColl = PerfGoalsObjectFactory.getLocalInstance(ctx).getPerfGoalsObjectCollection(" where id in(" + "SELECT fid fid FROM T_EVA_PerfGoalsObject where FPERFEVAOBJECTID " + "in ("+getSql+"))"); if(goColl != null && goColl.size() > 0) { System.out.println("goColl.size()"+goColl.size()); System.out.println("goColl.toString"+goColl.toString()); //当期的清理掉 PerfGoalsObjectFactory.getLocalInstance(ctx).delete(" where id in(" + "SELECT fid fid FROM T_EVA_PerfGoalsObject where FPERFEVAOBJECTID " + "in (SELECT fid FROM T_EVA_PerfEvaObject where fid = '"+info.getId().toString()+"'))"); for (int j = 0; j < goColl.size(); j++) { goInfo = goColl.get(j); goInfo.setPerfEvaObject(info); goInfo.setId(null); PerfGoalsObjectFactory.getLocalInstance(ctx).addnew(goInfo); } } //考核责任人 PerfEvaPersonInchargeInfo enInfo = null; PerfEvaPersonInchargeCollection enColl = PerfEvaPersonInchargeFactory.getLocalInstance(ctx).getPerfEvaPersonInchargeCollection(" where id in(" + "SELECT fid fid FROM T_EVA_PerfEvaPersonIncharge where FEVAOBJID " + "in ("+getSql+"))"); if(enColl != null && enColl.size() > 0) { System.out.println("enColl.size()"+enColl.size()); System.out.println("enColl.toString"+enColl.toString()); //当期的清理掉 PerfEvaPersonInchargeFactory.getLocalInstance(ctx).delete(" where id in(" + "SELECT fid fid FROM T_EVA_PerfEvaPersonIncharge where FEVAOBJID " + "in (SELECT fid FROM T_EVA_PerfEvaObject where fid = '"+info.getId().toString()+"'))"); for (int j = 0; j < enColl.size(); j++) { enInfo = enColl.get(j); enInfo.setEvaObj(info); enInfo.setId(null); PerfEvaPersonInchargeFactory.getLocalInstance(ctx).addnew(enInfo); } } } // } } } return croeBase; } /** * 获取上一期期间id * @return * @throws BOSException * @throws SQLException */ private String getFromPeriod(String periodId) throws BOSException, SQLException { IRowSet set = null; String fromPeriod = null; set = DbUtil.executeQuery(ctx, "select fid fid from T_EVA_PerfPeriod where FPERFPLAN in (select FPERFPLAN from T_EVA_PerfPeriod where fid ='"+periodId+"')" + " and fid <> '"+periodId+"' " + " and FPSTARTDATE < (select FPENDDATE from T_EVA_PerfPeriod where fid ='"+periodId+"') " + " order by FPENDDATE desc"); if(set != null && set.size() > 0 && set.next()) { fromPeriod = set.getString("fid"); } set = DbUtil.executeQuery(ctx, "select fid from T_EVA_PerfEvaObject where FPERIODID ='"+fromPeriod+"'"); if(set != null && set.size() > 0 && set.next()) { return fromPeriod; }else { fromPeriod = null; } return fromPeriod; } }