package com.kingdee.eas.hr.perf.handler; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.grapecity.documents.excel.O; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.metadata.entity.*; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.bos.rabbitmq.guava.Lists; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.custom.performanceScoring.handler.EvaResultSummaryManagerListHandlerEx; import com.kingdee.eas.framework.CoreBaseCollection; import com.kingdee.eas.hr.perf.PerformProTeamCollection; import com.kingdee.eas.hr.perf.PerformProTeamFactory; import com.kingdee.eas.hr.perf.PersonPerformProCollection; import com.kingdee.eas.hr.perf.PersonPerformProFactory; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; 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.perfweb.app.base.evalplan.*; import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException; import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource; import com.kingdee.shr.perfweb.util.*; import com.kingdee.util.StringUtils; 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.math.BigDecimal; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; public class EvaResultSummaryManagerListHandlerExEx extends EvaResultSummaryManagerListHandlerEx { private static final Logger logger = LoggerFactory.getLogger(EvaResultSummaryManagerListHandlerExEx.class); public void batchSaveReviseDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException { Context ctx = SHRContext.getInstance().getContext(); List unValidIds; try { unValidIds = EvaResultSummaryBillUtil.validEvaResultSummaryBill(ctx, (String)null, request.getParameter("billId"), "10"); if (unValidIds.size() > 0) { addBatchMessageTips(unValidIds, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTENTRYREVISEBYBILLSTATE, ctx), batchMessageTipsHeader); } } catch (BOSException var12) { logger.error("【PERFWEB--batchSaveReviseDataAction】-it is failed to get state of summary bill,e=", var12); throw new ShrWebBizException(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTENTRYREVISEBYBILLSTATE, ctx)); } try { String datas = request.getParameter("datas"); if (!StringUtils.isEmpty(datas)) { if (!CollectionUtils.isEmpty(unValidIds)) { List reviseDataList = JSONArray.parseArray(datas, HashMap.class); List rightDatas = new ArrayList(reviseDataList.size()); Iterator var10 = reviseDataList.iterator(); while(var10.hasNext()) { HashMap map = (HashMap)var10.next(); if (!unValidIds.contains(map.get("id"))) { rightDatas.add(map); } } datas = JSONArray.toJSONString(rightDatas); } this._batchSaveReviseData(ctx,datas, batchMessageTipsHeader); } } catch (Exception var13) { logger.error("batchSaveReviseDataAction is error: ", var13); } } protected void _batchSaveReviseData(Context ctx, String reviseDataJson, BatchMessageTipsHeader batchMessageTipsHeader) throws BOSException, EASBizException { List reviseDataList = JSONArray.parseArray(reviseDataJson, HashMap.class); CoreBaseCollection evaResultSummaryCollection = new CoreBaseCollection(); if (!CollectionUtils.isEmpty(reviseDataList)) { Set summaryIds = new HashSet(reviseDataList.size()); Set summaryErrIds = new HashSet(reviseDataList.size()); Iterator var7 = reviseDataList.iterator(); while(var7.hasNext()) { HashMap reviseData = (HashMap)var7.next(); EvaResultSummaryInfo evaResultSummaryInfo = new EvaResultSummaryInfo(); summaryIds.add((String)reviseData.get("id")); evaResultSummaryInfo.put("id", reviseData.get("id")); if (reviseData.get("reviseSumScore") != null && org.apache.commons.lang.StringUtils.isNotBlank(String.valueOf(reviseData.get("reviseSumScore")))) { evaResultSummaryInfo.put("reviseSumScore", reviseData.get("reviseSumScore")); } evaResultSummaryInfo.put("reviseGradeLevel", reviseData.get("reviseGradeLevel")); evaResultSummaryInfo.put("reviseReason", reviseData.get("reviseReason")); Object perCoefficientObj=reviseData.get("perCoefficient"); Object perMaxCoefficientObj=reviseData.get("perMaxCoefficient"); Object perMinCoefficientObj=reviseData.get("perMinCoefficient"); if(null==perCoefficientObj||null==perMaxCoefficientObj||null==perMinCoefficientObj) { evaResultSummaryCollection.add(evaResultSummaryInfo); }else { evaResultSummaryInfo.put("perCoefficient", perCoefficientObj); BigDecimal perMaxCoefficient = new BigDecimal(perMaxCoefficientObj.toString()); BigDecimal perMinCoefficient = new BigDecimal(perMinCoefficientObj.toString()); BigDecimal perCoefficient = new BigDecimal(perCoefficientObj.toString()); if (perCoefficient.compareTo(perMaxCoefficient) > 0 || perCoefficient.compareTo(perMinCoefficient) < 0) { summaryErrIds.add((String) reviseData.get("id")); addBatchMessageTip((String) reviseData.get("id"), "所修改的绩效系数,大于最大绩效系数或者小于最小绩效系数!", batchMessageTipsHeader); } else { evaResultSummaryCollection.add(evaResultSummaryInfo); } } } Object periodId = ((HashMap)reviseDataList.get(0)).get("periodId"); List unValidIds; if (periodId != null) { unValidIds = EvaResultSummaryBillUtil.batchCheckScore(ctx, evaResultSummaryCollection, (String)periodId, batchMessageTipsHeader); } else { unValidIds = EvaResultSummaryBillUtil.batchCheckScoreBySummary(ctx, evaResultSummaryCollection, (String)((HashMap)reviseDataList.get(0)).get("perfSummarySchemeBaseId"), batchMessageTipsHeader); } if (!CollectionUtils.isEmpty(unValidIds)) { summaryIds.removeAll(unValidIds); } if (!CollectionUtils.isEmpty(summaryErrIds)) { summaryIds.removeAll(summaryErrIds); } if (CollectionUtils.isEmpty(summaryIds)) { return; } IEvaResultSummary resultSummary = EvaResultSummaryFactory.getLocalInstance(ctx); EntityViewInfo entityViewInfo = new EntityViewInfo(); FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("id", summaryIds, CompareType.INCLUDE)); entityViewInfo.setFilter(filterInfo); EvaResultSummaryCollection summaryCollection = resultSummary.getEvaResultSummaryCollection(entityViewInfo); CoreBaseCollection oldSummaryCollection = new CoreBaseCollection(); if (summaryCollection != null && summaryCollection.size() > 0) { for(int i = 0; i < summaryCollection.size(); ++i) { oldSummaryCollection.add(summaryCollection.get(i)); } } EvaResultSumRevisionLogService evaResultSumRevisionLogService = new EvaResultSumRevisionLogService(); CoreBaseCollection evaResultSumRevisionLogCollection = evaResultSumRevisionLogService.packageResultSumRevisionLog(EvaResultSumLogSourceEnum.ENTRYREVISE, oldSummaryCollection, evaResultSummaryCollection, false); System.out.println("evaResultSummaryCollection:"+evaResultSummaryCollection); resultSummary.save(evaResultSummaryCollection); evaResultSumRevisionLogService.generatedEvaResultSumRevisionLog(ctx, evaResultSumRevisionLogCollection); } } /** * 项目经理校验 * @param request * @param response * @param modelMap */ public void tempAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, SHRWebException { Context ctx = SHRContext.getInstance().getContext(); List idList = Lists.newArrayList(); String ids = (String) this.getBillId(request); for (String id : ids.split(",")) { idList.add(id); } StringBuilder selParamId = new StringBuilder("''"); for (int i = 0; i < idList.size(); i++) { selParamId.append(",?"); } StringBuilder sql = new StringBuilder(); sql.append(" select ers.fid,pp.FPSTARTDATE,ers.FADMINORGUNITID,ers.FADMINORGNAME,pp.FYEAR,pp.FTIMEPERIOD, "); sql.append(" pp.FCYCLETYPE,pp.FPENDDATE,pp.FPSTARTDATE,ppn.CFPEROBJECTIDID,ppm.CFPROJECTNAME,pmm.CFEMPLOYEEID "); sql.append(" from T_EVA_EvaResultSummary ers "); sql.append(" left join T_EVA_PerfPlan ppn on ers.FEVAPLANID=ppn.fid "); sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid "); sql.append(" left join CT_PRO_ProjectManagement ppm on ppn.CFPEROBJECTIDID=ppm.fid "); sql.append(" left join CT_PRO_MemberManagement pmm on ppm.fid=pmm.CFPROJECTMANAGEMENID and pmm.CFSTATE=1 "); sql.append(" and pmm.CFPTYPEID in( "); sql.append(" select fid from CT_PRO_ProjectType where FNUMBER='ProjectManager') "); sql.append(" and pmm.CFPROJECTROLEID in( "); sql.append(" select fid from CT_PRO_ProjectRole where FNUMBER ='HTY110') "); sql.append(" where ers.fid in ("); sql.append(selParamId); sql.append(") "); sql.append(" and pmm.CFEMPLOYEEID=ers.fpersonid "); IRowSet rs = DbUtil.executeQuery(ctx, sql.toString(), idList.toArray()); Map map = Maps.newHashMap(); map.put("ProjectManager",rs.size()>0?"1":"0"); this.writeSuccessData(map); } private static PerfEvaObjectCollection getPerfEvaObjectCollectionByIds(Set billIds) throws BOSException { FilterInfo filterInfo = new FilterInfo(); filterInfo.getFilterItems().add(new FilterItemInfo("id", billIds, CompareType.INCLUDE)); EntityViewInfo evi = new EntityViewInfo(); evi.setFilter(filterInfo); IPerfEvaObject iPerfEvaObject = PerfEvaObjectFactory.getRemoteInstance(); return iPerfEvaObject.getPerfEvaObjectCollection(evi); } public void batchAssignGroupAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException, BOSException { String group = request.getParameter("group"); String billIds = (String) this.getBillId(request); Context ctx = SHRContext.getInstance().getContext(); if (StringUtils.isEmpty(billIds)&&StringUtils.isEmpty(group)) { throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.INDECATORNOTSAVEDINSELECTGROUP)).getMessage()); } else { try { Set fails = new HashSet(); List idList = Lists.newArrayList(); List idsessList = Lists.newArrayList(); String[] ids = billIds.split(","); for (String id : ids ) { idList.add(id); } StringBuilder selParamId = new StringBuilder("''"); for (int i = 0; i < idList.size(); i++) { selParamId.append(",?"); } StringBuilder sql = new StringBuilder(); sql.append(" select FEVAOBJID,fid from T_EVA_EvaResultSummary where FBILLSTATE!=3 and fid in ( "); sql.append(selParamId); sql.append(" ) "); IRowSet rowSet = DbUtil.executeQuery(ctx,sql.toString(),idList.toArray()); while (rowSet.next()){ String fid = rowSet.getString("fid"); String upd = "update T_EVA_EvaResultSummary set cfgroup=? where fid=?"; DbUtil.execute(ctx,upd,new String[]{group,fid}); idsessList.add(fid); } idList.removeAll(idsessList); fails.addAll(idList); if (fails.size() > 0) { addBatchMessageTips(fails, "只有未审核的数据才能指定分组。", batchMessageTipsHeader); } } catch (BOSException var22) { logger.error("", var22); throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage()); } catch (SQLException var24) { logger.error("", var24); throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage()); } } } public void clearBelongGroupAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException, BOSException { String billId = this.getBillId(request); if (!StringUtils.isEmpty(billId)) { try { Context ctx = SHRContext.getInstance().getContext(); List idList = Lists.newArrayList(); List idsessList = Lists.newArrayList(); String[] ids = billId.split(","); for (String id : ids ) { idList.add(id); } StringBuilder selParamId = new StringBuilder("''"); for (int i = 0; i < idList.size(); i++) { selParamId.append(",?"); } StringBuilder sql = new StringBuilder(); sql.append(" select FEVAOBJID,fid from T_EVA_EvaResultSummary where FBILLSTATE!=3 and fid in ( "); sql.append(selParamId); sql.append(" ) "); IRowSet rowSet = DbUtil.executeQuery(ctx,sql.toString(),idList.toArray()); while (rowSet.next()){ String fid = rowSet.getString("fid"); String upd = "update T_EVA_EvaResultSummary set cfgroup=? where fid=?"; DbUtil.execute(ctx,upd,new String[]{"",fid}); idsessList.add(fid); } idList.removeAll(idsessList); if (idList.size() > 0) { addBatchMessageTips(idList, "只有未审核的数据才能清除分组。", batchMessageTipsHeader); } } catch (BOSException var22) { logger.error("", var22); throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage()); } catch (SQLException var24) { logger.error("", var24); throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage()); } } } /** * 获取绩效系数 * @param request * @param response * @param modelMap */ public void performanceLevelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws BOSException, SHRWebException { Context ctx = SHRContext.getInstance().getContext(); List idList = Lists.newArrayList(); String ids = (String) this.getBillId(request); String period = (String) request.getParameter("period"); String planId = (String) request.getParameter("planId"); List idsessList = Lists.newArrayList(); for (String id : ids.split(",")) { idList.add(id); } StringBuilder selParamId = new StringBuilder("''"); for (int i = 0; i < idList.size(); i++) { selParamId.append(",?"); } try { StringBuilder sqlsel= new StringBuilder(); sqlsel.append(" select fid from T_EVA_EvaResultSummary where FBILLSTATE !=3 and fid in ( "); sqlsel.append(selParamId); sqlsel.append(" ) "); IRowSet rs = DbUtil.executeQuery(ctx, sqlsel.toString(), idList.toArray()); while (rs.next()){ idsessList.add(rs.getString("fid")); } StringBuilder selsessParamId = new StringBuilder("''"); for (int i = 0; i < idsessList.size(); i++) { selsessParamId.append(",?"); } StringBuilder sqlpl = new StringBuilder(); //sqlpl.append(" update T_EVA_EvaResultSummary set CFGROUP=(select CFCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)) "); sqlpl.append(" update T_EVA_EvaResultSummary set CFPERCOEFFICIENT=(select CFCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)), "); sqlpl.append(" CFPERMAXCOEFFICIENT=(select CFMAXCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)), "); sqlpl.append(" CFPERMINCOEFFICIENT=(select CFMINCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)) "); sqlpl.append(" where FEVAPLANID =? and FPERIODID =? and fid in ( "); sqlpl.append(selsessParamId); sqlpl.append(" ) "); idsessList.add(0, planId); idsessList.add(1, period); DbUtil.execute(ctx, sqlpl.toString(), idsessList.toArray()); idList.removeAll(idsessList); if (idList.size()>0){ addBatchMessageTips(idList,"当前已经审核通过获取更新失败", batchMessageTipsHeader); } }catch (Exception e){ e.printStackTrace(); addBatchMessageTips(idList, e.getMessage(), batchMessageTipsHeader); } } @Override protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map initData) throws SHRWebException { super.setInitData(request, response, modelMap, initData); Context ctx = SHRContext.getInstance().getContext(); try { Map custom_params = (Map) initData.get("custom_params"); String perfPlanId = (String) custom_params.get("perfPlanId"); StringBuilder planSql = new StringBuilder(); planSql.append(" select pp.fid,pp.CFPerobjectIdId,ppm.CFPROJECTNAME from T_EVA_PerfPlan pp "); planSql.append(" left join CT_PRO_ProjectManagement ppm on ppm.fid = pp.CFPerobjectIdId where pp.fid=? and pp.CFPerobjectIdId is not null"); IRowSet rs = DbUtil.executeQuery(ctx, planSql.toString(), new Object[]{perfPlanId}); if (rs.next()) { String perobjectId = rs.getString("CFPerobjectIdId"); String projectName = rs.getString("CFPROJECTNAME"); custom_params.put("projectName",projectName); custom_params.put("perobjectId",perobjectId); initData.put("perobjectId",perobjectId); initData.put("projectName",projectName); }else { custom_params.put("perobjectId",""); custom_params.put("projectName",""); initData.put("perobjectId",""); initData.put("projectName",""); } }catch (Exception e){ e.printStackTrace(); } } /** * 获取人员项目正态分布规则 * * @param ctx * @param idList 非必填 * @param batchMessage 非必填 * @return * @throws BOSException * @throws SQLException */ public Map> getProjectPerformPro(Context ctx, List idList, Map batchMessage) throws BOSException, SQLException { //获取正态分布规则 Map> orgLevelMap = Maps.newHashMap(); PerformProTeamCollection proCollection = PerformProTeamFactory.getLocalInstance(ctx).getPerformProTeamCollection(" where status=1 "); if (proCollection.size() == 1) { StringBuilder orgPerSql = new StringBuilder(); orgPerSql.append(" select fp.fid,fpe.CFS,fpe.CFA,fpe.CFB,fpe.CFC,fpe.CFD,fpe.CFORGPERFORMTYPE "); orgPerSql.append(" from CT_PF_PerformProTeam fp "); orgPerSql.append(" left join CT_PF_PerformProTeamEntry fpe on fp.fid=fpe.FPARENTID "); orgPerSql.append(" where fp.CFSTATUS = 1 "); orgPerSql.append(" order by fp.FCREATETIME "); IRowSet rs = DbUtil.executeQuery(ctx, orgPerSql.toString()); while (rs.next()) { Map objectMap = Maps.newHashMap(); String type = rs.getString("CFORGPERFORMTYPE"); objectMap.put("S", rs.getBigDecimal("CFS")); objectMap.put("A", rs.getBigDecimal("CFA")); objectMap.put("B", rs.getBigDecimal("CFB")); objectMap.put("C", rs.getBigDecimal("CFC")); objectMap.put("D", rs.getBigDecimal("CFD")); orgLevelMap.put(type, objectMap); } } else if (proCollection.size() > 1) { if (null != batchMessage && null != idList) { for (String key : idList) { batchMessage.put(key, "存在多个正态分布规则,请检查!"); } } } else { if (null != batchMessage && null != idList) { for (String key : idList) { batchMessage.put(key, "不存在正态分布规则,请检查!"); } } } return orgLevelMap; } /** * 获取项目分组人数 * * @param ctx * @param period * @param planId * @return * @throws BOSException * @throws SQLException */ public Map> getProjectLevelCountMap(Context ctx, String period, String planId) throws BOSException, SQLException { // StringBuilder paramSql = new StringBuilder("''"); // for (int i = 0; i < idList.size(); i++) { // paramSql.append(",?"); // } //获取组织分组人数 StringBuilder orgSql = new StringBuilder(); orgSql.append(" select pp.CFPerobjectIdId, ers.FPERIODID,ers.FEVAPLANID,count(*) alls from T_EVA_EvaResultSummary ers "); orgSql.append(" left join T_EVA_PerfPlan pp on pp.fid=ers.FEVAPLANID "); // orgSql.append(paramSql); // orgSql.append(" ) "); orgSql.append(" where FPERIODID=? and FEVAPLANID=? "); orgSql.append(" group by pp.CFPerobjectIdId, ers.FPERIODID, ers.FEVAPLANID "); IRowSet rs = DbUtil.executeQuery(ctx, orgSql.toString(), new String[]{period, planId}); Map> orgLevelMap = Maps.newHashMap(); while (rs.next()) { Map map = Maps.newHashMap(); String CFPerobjectIdId = rs.getString("CFPerobjectIdId"); String FPERIODID = rs.getString("FPERIODID"); String FEVAPLANID = rs.getString("FEVAPLANID"); String key = CFPerobjectIdId + FPERIODID + FEVAPLANID; map.put("CFPerobjectIdId", CFPerobjectIdId); map.put("FPERIODID", FPERIODID); map.put("FEVAPLANID", FEVAPLANID); //当前周期,当前考核计划,当前组织下的总人数 map.put("alls", rs.getString("alls")); orgLevelMap.put(key, map); } return orgLevelMap; } /** * 获取人员的等级项目分组 * * @param ctx * @param period * @param planId * @return * @throws BOSException * @throws SQLException */ public Map> getPersonProjectLevelLensMap(Context ctx, String period, String planId) throws BOSException, SQLException { Map> personLevelMap = Maps.newHashMap(); StringBuilder orgLevelSql = new StringBuilder(); orgLevelSql.append(" select count(*) lens,CFPerobjectIdId,FPERIODID,FEVAPLANID,revLevel from ( "); orgLevelSql.append(" select pp.CFPerobjectIdId,s1.FPERIODID,s1.FEVAPLANID,isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel "); orgLevelSql.append(" from T_EVA_EvaResultSummary s1 "); orgLevelSql.append(" left join T_EVA_PerfPlan pp on pp.fid=s1.FEVAPLANID "); orgLevelSql.append(" where s1.FPERIODID=? and s1.FEVAPLANID=? "); orgLevelSql.append(" ) t "); orgLevelSql.append(" group by CFPerobjectIdId, FPERIODID,FEVAPLANID,revLevel "); IRowSet orgLevelRs = DbUtil.executeQuery(ctx, orgLevelSql.toString(), new String[]{period, planId}); while (orgLevelRs.next()) { Map map = Maps.newHashMap(); String CFPerobjectIdId = orgLevelRs.getString("CFPerobjectIdId"); String FPERIODID = orgLevelRs.getString("FPERIODID"); String FEVAPLANID = orgLevelRs.getString("FEVAPLANID"); String revLevel = orgLevelRs.getString("revLevel"); String key = CFPerobjectIdId + FPERIODID + FEVAPLANID + revLevel; map.put("lens", orgLevelRs.getString("lens")); map.put("CFPerobjectIdId", CFPerobjectIdId); map.put("FPERIODID", FPERIODID); map.put("FEVAPLANID", FEVAPLANID); map.put("revLevel", orgLevelRs.getString("revLevel")); personLevelMap.put(key, map); } return personLevelMap; } public Map beforeAuditProjectEvaResut(Context ctx, String period, String planId, List idList) throws BOSException, SQLException { Map batchMessage = Maps.newHashMap(); StringBuilder selParamId = new StringBuilder("''"); for (int i = 0; i < idList.size(); i++) { selParamId.append(",?"); } //获取正态分布规则 Map> personPerformMap = this.getProjectPerformPro(ctx, idList, batchMessage); if (null != personPerformMap && personPerformMap.size() > 0) { //获取组织分组人数 Map> orgLevelMap = this.getProjectLevelCountMap(ctx, period, planId); //获取人员等级分组 Map> personLevelMap = this.getPersonProjectLevelLensMap(ctx, period, planId); StringBuilder sel = new StringBuilder(); sel.append(" select s1.fid,ppm.CFPROJECTNAME, pp.CFPerobjectIdId, s1.FPERIODID, s1.FEVAPLANID,"); sel.append(" isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel,s1.CFProjectLevel "); sel.append(" from T_EVA_EvaResultSummary s1 "); sel.append(" left join T_EVA_PerfPlan pp on pp.fid = s1.FEVAPLANID "); sel.append(" left join CT_PRO_ProjectManagement ppm on ppm.fid = pp.CFPerobjectIdId "); sel.append(" where s1.fid in ("); sel.append(selParamId); sel.append(") "); IRowSet rs = DbUtil.executeQuery(ctx, sel.toString(), idList.toArray()); BigDecimal big100 = new BigDecimal(100); while (rs.next()) { String fid = rs.getString("fid"); String CFPROJECTNAME = rs.getString("CFPROJECTNAME"); String CFPerobjectIdId = rs.getString("CFPerobjectIdId"); String FPERIODID = rs.getString("FPERIODID"); String FEVAPLANID = rs.getString("FEVAPLANID"); String revLevel = rs.getString("revLevel"); if (StrUtil.isBlank(revLevel)) { //String msg = String.format("%s绩效等级为空", CFPROJECTNAME); batchMessage.put(fid, "绩效等级为空,请维护后再审批"); continue; } String key = CFPerobjectIdId + FPERIODID + FEVAPLANID; //项目绩效等级 String projectLevel = rs.getString("CFProjectLevel"); if (StrUtil.isBlank(projectLevel)) { String msg = String.format("%s项目绩效等级为空", CFPROJECTNAME); batchMessage.put(fid, msg); continue; } //该组织的组织绩效等级的正态分布 Map personPerform = personPerformMap.get(projectLevel); if (null == personPerform) { String msg = String.format("没有找到%s项目绩效等级%s的正态分布规则", CFPROJECTNAME, projectLevel); batchMessage.put(fid, msg); continue; } //获取该组织下的人员总数 Map orgMap = orgLevelMap.get(key); //获取该组织下的人员各个绩效等级分组汇总 // String keyRevLevel = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel; // Map personMap = personLevelMap.get(keyRevLevel); //已占用数 BigDecimal lens = BigDecimal.ZERO; //获取等级D人数 String keyRevLevelD = CFPerobjectIdId + FPERIODID + FEVAPLANID + "D"; Map personMapD = personLevelMap.get(keyRevLevelD); BigDecimal dLens = BigDecimal.ZERO; if (null != personMapD) { dLens = new BigDecimal(personMapD.get("lens")); } //获取等级C人数 String keyRevLevelC = CFPerobjectIdId + FPERIODID + FEVAPLANID + "C"; Map personMapC = personLevelMap.get(keyRevLevelC); BigDecimal cLens = BigDecimal.ZERO; if (null != personMapC) { cLens = new BigDecimal(personMapC.get("lens")); } //获取等级B人数 String keyRevLevelB = CFPerobjectIdId + FPERIODID + FEVAPLANID + "B"; Map personMapB = personLevelMap.get(keyRevLevelB); BigDecimal bLens = BigDecimal.ZERO; if (null != personMapB) { bLens = new BigDecimal(personMapB.get("lens")); } //获取等级A人数 String keyRevLevelA = CFPerobjectIdId + FPERIODID + FEVAPLANID + "A"; Map personMapA = personLevelMap.get(keyRevLevelA); BigDecimal aLens = BigDecimal.ZERO; if (null != personMapA) { aLens = new BigDecimal(personMapA.get("lens")); } //获取等级S人数 String keyRevLevelS = CFPerobjectIdId + FPERIODID + FEVAPLANID + "S"; Map personMapS = personLevelMap.get(keyRevLevelS); BigDecimal sLens = BigDecimal.ZERO; if (null != personMapS) { sLens = new BigDecimal(personMapS.get("lens")); } //总人数 BigDecimal alls = new BigDecimal(orgMap.get("alls")); //当前等级正态分布比例 BigDecimal scale = personPerform.get(revLevel); //创建每个等级的人数列表 Map bigsList = Maps.newHashMap(); BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("S", bigS); BigDecimal bigA = ((personPerform.get("A").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("A", bigA); BigDecimal bigB = ((personPerform.get("B").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("B", bigB); BigDecimal bigC = ((personPerform.get("C").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("C", bigC); BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("D", bigD); BigDecimal personSize = BigDecimal.ZERO; BigDecimal personMaxSize = BigDecimal.ZERO; List ldrs = Lists.newArrayList(); //进行额度加减 switch (revLevel) { case "D": personSize = personSize.add(bigD).subtract(dLens); lens = lens.add(dLens); if(!"D".equals(revLevel)) { personMaxSize = personMaxSize.add((bigD)); }else { personMaxSize = personMaxSize.add((bigD).subtract(dLens)); } ldrs.add("D最多%D人,"); bigsList.remove("D"); case "C": personSize = personSize.add(bigC).subtract(cLens); lens = lens.add(cLens); if("C".equals(revLevel)) { personMaxSize = personMaxSize.add((bigC)); }else { personMaxSize = personMaxSize.add((bigC).subtract(cLens)); } ldrs.add("C最多%C人,"); bigsList.remove("C"); case "B": personSize = personSize.add(bigB).subtract(bLens); lens = lens.add(bLens); if("B".equals(revLevel)) { personMaxSize = personMaxSize.add((bigB)); }else { personMaxSize = personMaxSize.add((bigB).subtract(bLens)); } ldrs.add("B最多%B人,"); bigsList.remove("B"); case "A": personSize = personSize.add(bigA).subtract(aLens); lens = lens.add(aLens); if("A".equals(revLevel)) { personMaxSize = personMaxSize.add((bigA)); }else { personMaxSize = personMaxSize.add((bigA).subtract(aLens)); } ldrs.add("A最多%A人,"); bigsList.remove("A"); case "S": personSize = personSize.add(bigS).subtract(sLens); lens = lens.add(sLens); if("S".equals(revLevel)) { personMaxSize = personMaxSize.add(((bigS))); }else { personMaxSize = personMaxSize.add(((bigS).subtract(sLens))); } ldrs.add("S最多%S人,"); bigsList.remove("S"); } //String ld = "当前周期绩效等级为%l的人数为%maxs人,S最多%S人,A最多%A人,B最多%B人,C最多%C人,D最多%D人,请修正后重新审核."; String ld = "当前周期绩效等级为%l的人数为%maxs人,"; if (personSize.compareTo(BigDecimal.ZERO) < 0) { String ldrstr = ldrs.get(0); // ldrs.remove(0); // for (String ldr : ldrs) { // ld = ld.replace(ldr,""); // } ld += ldrstr; ld = ld.replace("%l", revLevel); ld = ld.replace("%maxs", lens.toPlainString()); ld = ld.replace("%" + revLevel, (personMaxSize.compareTo(BigDecimal.ZERO)>0?personMaxSize:BigDecimal.ZERO).toPlainString()); // for(Map.Entry entry : bigsList.entrySet()){ // BigDecimal bigv = entry.getValue(); // String bigk = entry.getKey(); // ld=ld.replace("%"+bigk,bigv.toPlainString()); // } ld += "请修正后重新审核."; batchMessage.put(fid, ld); } } } return batchMessage; } /** * 获取人员组织正态分布规则 * * @param ctx * @param idList 非必填 * @param batchMessage 非必填 * @return * @throws BOSException * @throws SQLException */ public Map> getPersonPerformPro(Context ctx, List idList, Map batchMessage) throws BOSException, SQLException { //获取正态分布规则 Map> orgLevelMap = Maps.newHashMap(); PersonPerformProCollection proCollection = PersonPerformProFactory.getLocalInstance(ctx).getPersonPerformProCollection(" where state=1 "); if (proCollection.size() == 1) { StringBuilder orgPerSql = new StringBuilder(); orgPerSql.append(" select fp.fid,fpe.CFS,fpe.CFA,fpe.CFB,fpe.CFC,fpe.CFD,fpe.CFORGPERFORMTYPE "); orgPerSql.append(" from CT_PF_PersonPerformPro fp "); orgPerSql.append(" left join CT_PF_PersonPerformProEntry fpe on fp.fid=fpe.FPARENTID "); orgPerSql.append(" where fp.CFSTATE = 1 "); orgPerSql.append(" order by fp.FCREATETIME "); IRowSet rs = DbUtil.executeQuery(ctx, orgPerSql.toString()); while (rs.next()) { Map objectMap = Maps.newHashMap(); String type = rs.getString("CFORGPERFORMTYPE"); objectMap.put("S", rs.getBigDecimal("CFS")); objectMap.put("A", rs.getBigDecimal("CFA")); objectMap.put("B", rs.getBigDecimal("CFB")); objectMap.put("C", rs.getBigDecimal("CFC")); objectMap.put("D", rs.getBigDecimal("CFD")); orgLevelMap.put(type, objectMap); } } else if (proCollection.size() > 1) { if (null != batchMessage && null != idList) { for (String key : idList) { batchMessage.put(key, "存在多个正态分布规则,请检查!"); } } } else { if (null != batchMessage && null != idList) { for (String key : idList) { batchMessage.put(key, "不存在正态分布规则,请检查!"); } } } return orgLevelMap; } /** * 获取组织分组人数 * * @param ctx * @param period * @param planId * @return * @throws BOSException * @throws SQLException */ public Map> getOrgLevelCountMap(Context ctx, String period, String planId) throws BOSException, SQLException { // StringBuilder paramSql = new StringBuilder("''"); // for (int i = 0; i < idList.size(); i++) { // paramSql.append(",?"); // } //获取组织分组人数 StringBuilder orgSql = new StringBuilder(); orgSql.append(" select FADMINORGUNITID, FPERIODID, FEVAPLANID,count( *) alls from ( "); orgSql.append(" select ( "); orgSql.append(" select top 1 adcount.fid from T_ORG_Admin child "); orgSql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) "); orgSql.append(" where child.fid=ers.FADMINORGUNITID "); orgSql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' "); orgSql.append(" order by adcount.fsortcode) FADMINORGUNITID, "); orgSql.append(" ers.FPERIODID,ers.FEVAPLANID from T_EVA_EvaResultSummary ers "); orgSql.append(" where ers.FPERIODID=? and ers.FEVAPLANID=? "); orgSql.append(" ) t "); orgSql.append(" group by FADMINORGUNITID, FPERIODID, FEVAPLANID "); //orgSql.append(" select FADMINORGUNITID, FPERIODID,FEVAPLANID,count(*) alls from T_EVA_EvaResultSummary "); // orgSql.append("where fid in ( "); // orgSql.append(paramSql); // orgSql.append(" ) "); //orgSql.append(" where FPERIODID=? and FEVAPLANID=? "); //orgSql.append(" group by FADMINORGUNITID, FPERIODID, FEVAPLANID "); IRowSet rs = DbUtil.executeQuery(ctx, orgSql.toString(), new String[]{period, planId}); Map> orgLevelMap = Maps.newHashMap(); while (rs.next()) { Map map = Maps.newHashMap(); String FADMINORGUNITID = rs.getString("FADMINORGUNITID"); String FPERIODID = rs.getString("FPERIODID"); String FEVAPLANID = rs.getString("FEVAPLANID"); String key = FADMINORGUNITID + FPERIODID + FEVAPLANID; map.put("FADMINORGUNITID", FADMINORGUNITID); map.put("FPERIODID", FPERIODID); map.put("FEVAPLANID", FEVAPLANID); //当前周期,当前考核计划,当前组织下的总人数 map.put("alls", rs.getString("alls")); orgLevelMap.put(key, map); } return orgLevelMap; } /** * 获取人员的等级组织分组 * * @param ctx * @param period * @param planId * @return * @throws BOSException * @throws SQLException */ public Map> getPersonLevelLensMap(Context ctx, String period, String planId) throws BOSException, SQLException { Map> personLevelMap = Maps.newHashMap(); StringBuilder orgLevelSql = new StringBuilder(); orgLevelSql.append(" select count(*) lens, "); orgLevelSql.append(" FADMINORGUNITID,FPERIODID,FEVAPLANID,revLevel from ( "); orgLevelSql.append(" select (select top 1 adcount.fid from T_ORG_Admin child "); orgLevelSql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) "); orgLevelSql.append(" where child.fid=s1.FADMINORGUNITID "); orgLevelSql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' "); orgLevelSql.append(" order by adcount.fsortcode) FADMINORGUNITID,s1.FPERIODID,s1.FEVAPLANID,isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel "); orgLevelSql.append(" from T_EVA_EvaResultSummary s1 "); orgLevelSql.append(" where s1.FPERIODID=? s1.FEVAPLANID=? "); orgLevelSql.append(" ) t "); orgLevelSql.append(" group by FADMINORGUNITID, FPERIODID,FEVAPLANID,revLevel "); // orgLevelSql.append(" select count(*) lens,FADMINORGUNITID,FPERIODID,FEVAPLANID,revLevel from ( "); // orgLevelSql.append(" select s1.FADMINORGUNITID,s1.FPERIODID,s1.FEVAPLANID,isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel from T_EVA_EvaResultSummary s1 "); // orgLevelSql.append(" where s1.FPERIODID=? and s1.FEVAPLANID=? "); // orgLevelSql.append(" ) t "); // orgLevelSql.append(" group by FADMINORGUNITID, FPERIODID,FEVAPLANID,revLevel "); IRowSet orgLevelRs = DbUtil.executeQuery(ctx, orgLevelSql.toString(), new String[]{period, planId}); while (orgLevelRs.next()) { Map map = Maps.newHashMap(); String FADMINORGUNITID = orgLevelRs.getString("FADMINORGUNITID"); String FPERIODID = orgLevelRs.getString("FPERIODID"); String FEVAPLANID = orgLevelRs.getString("FEVAPLANID"); String revLevel = orgLevelRs.getString("revLevel"); String key = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel; map.put("lens", orgLevelRs.getString("lens")); map.put("FADMINORGUNITID", FADMINORGUNITID); map.put("FPERIODID", FPERIODID); map.put("FEVAPLANID", FEVAPLANID); map.put("revLevel", orgLevelRs.getString("revLevel")); personLevelMap.put(key, map); } return personLevelMap; } /** * 根据上季度的组织等级,校验当前周期,当前考核计划,所选员工的所属组织的员工绩效等级分布校验 * * @param request * @param response * @param modelMap * @param batchMessageTipsHeader * @throws SHRWebException */ public void beforeAuditEvaResutAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException { Context ctx = SHRContext.getInstance().getContext(); String ids = (String) request.getAttribute("billId"); String period = (String) request.getParameter("period"); String planId = (String) request.getParameter("planId"); if (ids == null) { throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)); } try { List idList = Lists.newArrayList(); Set idSet = Sets.newHashSet(idList); for (String id : ids.split(",")) { idList.add(id); } StringBuilder planSql = new StringBuilder(); planSql.append("select fid,CFPerobjectIdId from T_EVA_PerfPlan where fid=? and CFPerobjectIdId is not null "); IRowSet rs = DbUtil.executeQuery(ctx, planSql.toString(), new Object[]{planId}); if (rs.next()) { String CFPerobjectIdId = rs.getString("CFPerobjectIdId"); Map batchMessage = this.beforeAuditProjectEvaResut(ctx, period, planId, idList); if (null != batchMessage && batchMessage.size() > 0) { for (Map.Entry entry : batchMessage.entrySet()) { addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader); idSet.remove(entry.getKey()); } } } else { Map batchMessage = this.beforeAuditEvaResut(ctx, period, planId, idList); if (null != batchMessage && batchMessage.size() > 0) { for (Map.Entry entry : batchMessage.entrySet()) { addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader); idSet.remove(entry.getKey()); } } //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader); } this.setSuccessMessage("验证成功"); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } } public Map beforeAuditEvaResut(Context ctx, String period, String planId, List idList) throws BOSException, SQLException { Map batchMessage = Maps.newHashMap(); StringBuilder selParamId = new StringBuilder("''"); for (int i = 0; i < idList.size(); i++) { selParamId.append(",?"); } //获取正态分布规则 Map> personPerformMap = this.getPersonPerformPro(ctx, idList, batchMessage); if (null != personPerformMap && personPerformMap.size() > 0) { //获取组织分组人数 Map> orgLevelMap = this.getOrgLevelCountMap(ctx, period, planId); //获取人员等级分组 Map> personLevelMap = this.getPersonLevelLensMap(ctx, period, planId); StringBuilder sel = new StringBuilder(); sel.append(" select ers.fid,ers.FADMINORGNAME, ( "); sel.append(" select top 1 adcount.fid from T_ORG_Admin child "); sel.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) "); sel.append(" where child.fid=ers.FADMINORGUNITID "); sel.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' "); sel.append(" order by adcount.fsortcode) FADMINORGUNITID, ers.FPERIODID, ers.FEVAPLANID,isnull(ers.FREVISEGRADELEVEL, ers.FGRADELEVEL) revLevel,ers.CFOrgLevel "); sel.append(" from T_EVA_EvaResultSummary ers where ers.fid in ("); //sel.append("select fid,FADMINORGNAME, FADMINORGUNITID, FPERIODID, FEVAPLANID,isnull( FREVISEGRADELEVEL, FGRADELEVEL) revLevel,CFOrgLevel from T_EVA_EvaResultSummary where fid in ("); sel.append(selParamId); sel.append(") "); IRowSet rs = DbUtil.executeQuery(ctx, sel.toString(), idList.toArray()); BigDecimal big100 = new BigDecimal(100); while (rs.next()) { String fid = rs.getString("fid"); String FADMINORGNAME = rs.getString("FADMINORGNAME"); String FADMINORGUNITID = rs.getString("FADMINORGUNITID"); String FPERIODID = rs.getString("FPERIODID"); String FEVAPLANID = rs.getString("FEVAPLANID"); String revLevel = rs.getString("revLevel"); if (StrUtil.isBlank(revLevel)) { //String msg = String.format("%s绩效等级为空", CFPROJECTNAME); batchMessage.put(fid, "绩效等级为空,请维护后再审批"); continue; } String key = FADMINORGUNITID + FPERIODID + FEVAPLANID; //上季度组织绩效等级 String orgLevel = rs.getString("CFOrgLevel"); if (null == orgLevel) { String msg = String.format("%s上季度组织绩效等级为空", FADMINORGNAME); batchMessage.put(fid, msg); continue; } //该组织的组织绩效等级的正态分布 Map personPerform = personPerformMap.get(orgLevel); if (null == personPerform) { String msg = String.format("没有找到%s上季度组织绩效等级%s的正态分布规则", FADMINORGNAME, orgLevel); batchMessage.put(fid, msg); continue; } //获取该组织下的人员总数 Map orgMap = orgLevelMap.get(key); //获取该组织下的人员各个绩效等级分组汇总 // String keyRevLevel = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel; // Map personMap = personLevelMap.get(keyRevLevel); //已占用数 BigDecimal lens = BigDecimal.ZERO; //获取等级D人数 String keyRevLevelD = FADMINORGUNITID + FPERIODID + FEVAPLANID + "D"; Map personMapD = personLevelMap.get(keyRevLevelD); BigDecimal dLens = BigDecimal.ZERO; if (null != personMapD) { dLens = new BigDecimal(personMapD.get("lens")); } //获取等级C人数 String keyRevLevelC = FADMINORGUNITID + FPERIODID + FEVAPLANID + "C"; Map personMapC = personLevelMap.get(keyRevLevelC); BigDecimal cLens = BigDecimal.ZERO; if (null != personMapC) { cLens = new BigDecimal(personMapC.get("lens")); } //获取等级B人数 String keyRevLevelB = FADMINORGUNITID + FPERIODID + FEVAPLANID + "B"; Map personMapB = personLevelMap.get(keyRevLevelB); BigDecimal bLens = BigDecimal.ZERO; if (null != personMapB) { bLens = new BigDecimal(personMapB.get("lens")); } //获取等级A人数 String keyRevLevelA = FADMINORGUNITID + FPERIODID + FEVAPLANID + "A"; Map personMapA = personLevelMap.get(keyRevLevelA); BigDecimal aLens = BigDecimal.ZERO; if (null != personMapA) { aLens = new BigDecimal(personMapA.get("lens")); } //获取等级S人数 String keyRevLevelS = FADMINORGUNITID + FPERIODID + FEVAPLANID + "S"; Map personMapS = personLevelMap.get(keyRevLevelS); BigDecimal sLens = BigDecimal.ZERO; if (null != personMapS) { sLens = new BigDecimal(personMapS.get("lens")); } //总人数 BigDecimal alls = new BigDecimal(orgMap.get("alls")); //当前等级正态分布比例 BigDecimal scale = personPerform.get(revLevel); //创建每个等级的人数列表 Map bigsList = Maps.newHashMap(); BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("S", bigS); BigDecimal bigA = ((personPerform.get("A").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("A", bigA); BigDecimal bigB = ((personPerform.get("B").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("B", bigB); BigDecimal bigC = ((personPerform.get("C").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("C", bigC); BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP)); bigsList.put("D", bigD); BigDecimal personSize = BigDecimal.ZERO; BigDecimal personMaxSize = BigDecimal.ZERO; List ldrs = Lists.newArrayList(); //进行额度加减 switch (revLevel) { case "D": personSize = personSize.add(bigD).subtract(dLens); lens = lens.add(dLens); if("D".equals(revLevel)) { personMaxSize = personMaxSize.add((bigD)); }else { personMaxSize = personMaxSize.add((bigD).subtract(dLens)); } ldrs.add("D最多%D人,"); bigsList.remove("D"); case "C": personSize = personSize.add(bigC).subtract(cLens); lens = lens.add(cLens); if("C".equals(revLevel)) { personMaxSize = personMaxSize.add((bigC) ); }else { personMaxSize = personMaxSize.add((bigC).subtract(cLens)); } ldrs.add("C最多%C人,"); bigsList.remove("C"); case "B": personSize = personSize.add(bigB).subtract(bLens); lens = lens.add(bLens); if("B".equals(revLevel)) { personMaxSize = personMaxSize.add((bigB) ); }else { personMaxSize = personMaxSize.add((bigB).subtract(bLens)); } ldrs.add("B最多%B人,"); bigsList.remove("B"); case "A": personSize = personSize.add(bigA).subtract(aLens); lens = lens.add(aLens); if( "A".equals(revLevel)) { personMaxSize = personMaxSize.add((bigA)); }else { personMaxSize = personMaxSize.add((bigA).subtract(aLens)); } ldrs.add("A最多%A人,"); bigsList.remove("A"); case "S": personSize = personSize.add(bigS).subtract(sLens); lens = lens.add(sLens); if("S".equals(revLevel)) { personMaxSize = personMaxSize.add((bigS)); }else { personMaxSize = personMaxSize.add((bigS).subtract(sLens)); } ldrs.add("S最多%S人,"); bigsList.remove("S"); } //String ld = "当前周期绩效等级为%l的人数为%maxs人,S最多%S人,A最多%A人,B最多%B人,C最多%C人,D最多%D人,请修正后重新审核."; String ld = "当前周期绩效等级为%l的人数为%maxs人,"; if (personSize.compareTo(BigDecimal.ZERO) < 0) { String ldrstr = ldrs.get(0); // ldrs.remove(0); // for (String ldr : ldrs) { // ld = ld.replace(ldr,""); // } ld += ldrstr; ld = ld.replace("%l", revLevel); ld = ld.replace("%maxs", lens.toPlainString()); ld = ld.replace("%" + revLevel, (personMaxSize.compareTo(BigDecimal.ZERO)>0?personMaxSize:BigDecimal.ZERO).toPlainString()); // for(Map.Entry entry : bigsList.entrySet()){ // BigDecimal bigv = entry.getValue(); // String bigk = entry.getKey(); // ld=ld.replace("%"+bigk,bigv.toPlainString()); // } ld += "请修正后重新审核."; batchMessage.put(fid, ld); } } } return batchMessage; } @Override public void auditEvaResutAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException { super.auditEvaResutAction(request, response, modelMap, batchMessageTipsHeader); } /** * 获取上季度组织等级批量 * * @description: * @author: lhbj * @date: 2025/1/10 18:18 * @param: null * @return:null **/ public void bindDep_OR_ProjectBatchAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException { Context ctx = SHRContext.getInstance().getContext(); String ids = (String) request.getAttribute("billId"); String period = (String) request.getParameter("period"); String planId = (String) request.getParameter("planId"); if (ids == null) { throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)); } else { try { StringBuilder planSql = new StringBuilder(); planSql.append("select fid,CFPerobjectIdId from T_EVA_PerfPlan where fid=? and CFPerobjectIdId is not null "); IRowSet rs = DbUtil.executeQuery(ctx, planSql.toString(), new Object[]{planId}); if (rs.next()) { this.bindProjectBatchAction(request, response, modelMap, batchMessageTipsHeader); } else { this.bindDepBatchAction(request, response, modelMap, batchMessageTipsHeader); } this.setSuccessMessage("验证成功"); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } } } /** * 获取项目等级批量 * * @description: * @author: lhbj * @date: 2025/1/10 18:18 * @param: null * @return:null **/ public void bindProjectBatchAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException { Context ctx = SHRContext.getInstance().getContext(); String ids = (String) request.getAttribute("billId"); if (ids == null) { throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)); } else { try { List idList = Lists.newArrayList(); for (String id : ids.split(",")) { idList.add(id); } Set idSet = Sets.newHashSet(idList); Map map = this.bindProject(ctx, ids); for (Map.Entry entry : map.entrySet()) { addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader); idSet.remove(entry.getKey()); } //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader); this.setSuccessMessage("验证成功"); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } } } /** * 绑定项目等级 * * @param ctx * @param ids * @return * @throws Exception */ public Map bindProject(Context ctx, String ids) throws Exception { Map batchMessage = Maps.newHashMap(); List idList = Lists.newArrayList(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); if (ids == null) { throw new Exception(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)); } else { try { StringBuffer sql = new StringBuffer(); sql.append(" select ers.fid,pp.FPSTARTDATE,ers.FBILLSTATE,ers.FADMINORGUNITID,ers.FADMINORGNAME,pp.FYEAR,pp.FTIMEPERIOD, "); sql.append(" pp.FCYCLETYPE,pp.FPENDDATE,pp.FPSTARTDATE,ppn.CFPEROBJECTIDID,ppm.CFPROJECTNAME,pmm.CFEMPLOYEEID "); sql.append(" from T_EVA_EvaResultSummary ers "); sql.append(" left join T_EVA_PerfPlan ppn on ers.FEVAPLANID=ppn.fid "); sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid "); sql.append(" left join CT_PRO_ProjectManagement ppm on ppn.CFPEROBJECTIDID=ppm.fid "); sql.append(" left join CT_PRO_MemberManagement pmm on ppm.fid=pmm.CFPROJECTMANAGEMENID and pmm.CFSTATE=1 "); sql.append(" and pmm.CFPTYPEID in( "); sql.append(" select fid from CT_PRO_ProjectType where FNUMBER='ProjectManager') "); sql.append(" and pmm.CFPROJECTROLEID in( "); sql.append(" select fid from CT_PRO_ProjectRole where FNUMBER ='HTY110') "); sql.append(" where pmm.CFEMPLOYEEID is not null and ers.fid in(''"); for (String id : ids.split(",")) { idList.add(id); sql.append(",'").append(id).append("'"); } sql.append(" ) "); IRowSet rsSql = DbUtil.executeQuery(ctx, sql.toString()); List sess = Lists.newArrayList(); while (rsSql.next()) { String id = rsSql.getString("fid"); String personid = rsSql.getString("CFEMPLOYEEID"); String CFPROJECTNAME = rsSql.getString("CFPROJECTNAME"); String perobjectid = rsSql.getString("CFPEROBJECTIDID"); String FBILLSTATE = rsSql.getString("FBILLSTATE"); if (!"3".equals(FBILLSTATE)) { StringBuffer sqlPro = new StringBuffer(); sqlPro.append(" select isnull(ers.FREVISEGRADELEVEL,ers.FGRADELEVEL) FGRADELEVEL,ers.fid from "); sqlPro.append(" T_EVA_EvaResultSummary ers "); sqlPro.append(" left join T_EVA_PerfPlan ppn on ers.FEVAPLANID=ppn.fid "); sqlPro.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid "); sqlPro.append(" where ers.FBILLSTATE='3' and ers.FPERSONID=? and ppn.CFPEROBJECTIDID=? "); sqlPro.append(" order by pp.FPENDDATE desc "); IRowSet rsPro = DbUtil.executeQuery(ctx, sqlPro.toString(), new String[]{personid, perobjectid}); String FGRADELEVEL = ""; if (rsPro.next()) { FGRADELEVEL = rsPro.getString("FGRADELEVEL"); } if (StringUtils.isEmpty(FGRADELEVEL)) { batchMessage.put(id, "未找到当前" + CFPROJECTNAME + "项目匹配的绩效等级"); } else { StringBuilder upd = new StringBuilder(); upd.append("update T_EVA_EvaResultSummary set CFPROJECTLEVEL=? where fid=? "); DbUtil.execute(ctx, upd.toString(), new String[]{FGRADELEVEL, id}); sess.add(id); } }else { batchMessage.put(id, "当前已经审核通过获取更新失败!"); } } } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } } return batchMessage; } /** * 获取上季度组织等级批量 * * @description: * @author: lhbj * @date: 2025/1/10 18:18 * @param: null * @return:null **/ public void bindDepBatchAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException { Context ctx = SHRContext.getInstance().getContext(); String ids = (String) request.getAttribute("billId"); if (ids == null) { throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)); } else { try { List idList = Lists.newArrayList(); for (String id : ids.split(",")) { idList.add(id); } Set idSet = Sets.newHashSet(idList); Map map = this.bindDep(ctx, ids); for (Map.Entry entry : map.entrySet()) { addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader); idSet.remove(entry.getKey()); } //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader); this.setSuccessMessage("验证成功"); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } } } /** * 绑定部门等级 * * @param ctx * @param ids * @return * @throws Exception */ public Map bindDep(Context ctx, String ids) throws Exception { Map batchMessage = Maps.newHashMap(); List idList = Lists.newArrayList(); Map id_orgIdMap = Maps.newHashMap(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); if (ids == null) { throw new Exception(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)); } else { try { StringBuffer sql = new StringBuffer(); sql.append(" select ers.fid,pp.FPSTARTDATE, ers.FBILLSTATE, "); sql.append(" (select top 1 adcount.fid from T_ORG_Admin child "); sql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) "); sql.append(" where child.fid=ers.FADMINORGUNITID "); sql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' "); sql.append(" order by adcount.fsortcode) FADMINORGUNITID "); sql.append(" ,ers.FADMINORGNAME,pp.FYEAR,pp.FTIMEPERIOD, "); sql.append(" pp.FCYCLETYPE,pp.FPENDDATE,pp.FPSTARTDATE from "); sql.append(" T_EVA_EvaResultSummary ers "); sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid "); sql.append(" where ers.fid in(''"); for (String id : ids.split(",")) { idList.add(id); sql.append(",'").append(id).append("'"); } sql.append(" ) "); LocalDate startDate = null; LocalDate endDate = null; EvalplanCycleTypeEnum cycleTypeEnum = null; IRowSet rsSql = DbUtil.executeQuery(ctx, sql.toString()); boolean faist = true; while (rsSql.next()) { String id = rsSql.getString("fid"); String orgId = rsSql.getString("FADMINORGUNITID"); String orgName = rsSql.getString("FADMINORGNAME"); String FBILLSTATE = rsSql.getString("FBILLSTATE"); if (faist) { faist = false; int FCYCLETYPE = rsSql.getInt("FCYCLETYPE"); Date FPENDDATE = rsSql.getDate("FPENDDATE"); Date FPSTARTDATE = rsSql.getDate("FPSTARTDATE"); Map cycleMap = this.getCycletype(sf.format(FPSTARTDATE), sf.format(FPENDDATE), FCYCLETYPE); cycleTypeEnum = (EvalplanCycleTypeEnum) cycleMap.get("cycleType"); endDate = (LocalDate) cycleMap.get("endDate"); startDate = (LocalDate) cycleMap.get("startDate"); } id_orgIdMap.put(id, orgId + "!" + orgName+"!"+FBILLSTATE); } List sess = Lists.newArrayList(); //T_EVA_OrgEvaResultSummary Map> mapMap = this.getOrgEvaResultLevel(ctx, startDate, endDate, cycleTypeEnum); for (Map.Entry ee : id_orgIdMap.entrySet()) { String[] orgs = ee.getValue().split("!"); String orgId = orgs[0]; String orgName = orgs[1]; String FBILLSTATE = orgs[2]; String id = ee.getKey(); if (!"3".equals(FBILLSTATE)){ Map orgLevelMap = mapMap.get(orgId); if (null == orgLevelMap) { batchMessage.put(id, "未找到当前" + orgName + "部门匹配的组织绩效等级"); } else { String orgLevel = orgLevelMap.get("lastgradeLevel"); StringBuilder upd = new StringBuilder(); upd.append("update T_EVA_EvaResultSummary set CFOrgLevel=?,CFOrgLevelEveID=? where fid=? "); DbUtil.execute(ctx, upd.toString(), new String[]{orgLevel, orgId, id}); sess.add(id); } }else { batchMessage.put(id, "当前已经审核通过获取更新失败!"); } } } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } } return batchMessage; } public Map getCycletype(String pstartdate, String penddate, int cycletype) { Map map = Maps.newHashMap(); LocalDate startDate = LocalDate.parse(pstartdate, DateTimeFormatter.ISO_LOCAL_DATE); LocalDate endDate = LocalDate.parse(penddate, DateTimeFormatter.ISO_LOCAL_DATE); EvalplanCycleTypeEnum cycleTypeEnum = EvalplanCycleTypeEnum.getEnum(cycletype); if (EvalplanCycleTypeEnum.FULL_YEAR_VALUE == cycletype) { //周期为年度 endDate = endDate.plusYears(-1); startDate = startDate.plusYears(-1); cycleTypeEnum = EvalplanCycleTypeEnum.FULL_YEAR; } else if (EvalplanCycleTypeEnum.HALF_YEAR_VALUE == cycletype) { //周期为半年度 endDate = endDate.plusMonths(-6); startDate = startDate.plusMonths(-6); cycleTypeEnum = EvalplanCycleTypeEnum.HALF_YEAR; } else if (EvalplanCycleTypeEnum.QUARTER_VALUE == cycletype) { //获取为季度 endDate = endDate.plusMonths(-3); startDate = startDate.plusMonths(-3); cycleTypeEnum = EvalplanCycleTypeEnum.QUARTER; } else if (EvalplanCycleTypeEnum.MONTHLY_VALUE == cycletype) { //获取为季度 endDate = endDate.plusMonths(-1); startDate = startDate.plusMonths(-1); cycleTypeEnum = EvalplanCycleTypeEnum.MONTHLY; } map.put("cycleType", cycleTypeEnum); map.put("endDate", endDate); map.put("startDate", startDate); return map; } /** * 获取上季度组织等级 * * @description: * @author: lhbj * @date: 2025/1/10 18:18 * @param: null * @return:null **/ public void bindDepAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException { Context ctx = SHRContext.getInstance().getContext(); String ids = this.getBillId(request); if (ids == null) { throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)); } else { try { Map map = this.bindDep(ctx, ids); this.writeSuccessData(map); } catch (Exception e) { e.printStackTrace(); throw new ShrWebBizException(e); } } } protected Map> getOrgEvaResultLevel(Context ctx, LocalDate startDate, LocalDate endDate) throws BOSException, SQLException { return this.getOrgEvaResultLevel(ctx, startDate, endDate, EvalplanCycleTypeEnum.QUARTER); } protected Map> getOrgEvaResultLevel(Context ctx, LocalDate startDate, LocalDate endDate, EvalplanCycleTypeEnum cycletype) throws BOSException, SQLException { Map> mapMap = Maps.newHashMap(); StringBuffer selSql = new StringBuffer(); selSql.append(" select oers.fid oersId, "); selSql.append(" (select top 1 adcount.fid from T_ORG_Admin child "); selSql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) "); selSql.append(" where child.fid=oers.FADMINORGUNITID "); selSql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' "); selSql.append(" order by adcount.fsortcode) FADMINORGUNITID "); selSql.append(" ,oers.FLASTGRADELEVEL,(case when ppd.fid is null "); selSql.append(" then (oers.FPERIODYEAR||'-01-'||'01')||'T'|| (oers.FPERIODYEAR||'-01-'||'01') "); selSql.append(" else (to_char(ppd.FPSTARTDATE,'yyyy-MM-dd')||'T'||to_char(ppd.FPENDDATE,'yyyy-MM-dd')) end) PERIOD "); selSql.append(" from T_EVA_OrgEvaResultSummary oers "); selSql.append(" left join T_EVA_PerfPeriod ppd on ppd.fid = oers.FPERIODID "); selSql.append(" where to_char(ppd.FPSTARTDATE,'yyyy-MM-dd') >= ? and to_char(ppd.FPENDDATE,'yyyy-MM-dd') <= ? "); selSql.append(" and ppd.FCYCLETYPE = ? and ppd.FREFSTATUS = 100 and oers.FBILLSTATE='3' "); String[] param = new String[]{startDate.format(DateTimeFormatter.ISO_LOCAL_DATE), endDate.format(DateTimeFormatter.ISO_LOCAL_DATE), String.valueOf(cycletype.getValue())}; IRowSet rs = DbUtil.executeQuery(ctx, selSql.toString(), param); int i = selSql.indexOf("?"); selSql.replace(i, i + 1, param[0]); i = selSql.indexOf("?"); selSql.replace(i, i + 1, param[1]); System.out.println(selSql); while (rs.next()) { Map stringMap = Maps.newHashMap(); String orgId = rs.getString("FADMINORGUNITID"); String lastgradeLevel = rs.getString("FLASTGRADELEVEL"); String period = rs.getString("PERIOD"); stringMap.put("orgId", orgId); stringMap.put("lastgradeLevel", lastgradeLevel); stringMap.put("period", period); mapMap.put(orgId, stringMap); } return mapMap; } public static void main(String[] args) { List idList = new ArrayList<>(); idList.add("W"); idList.add("A"); idList.add("C"); idList.add("B"); idList.add("D"); idList.add("S"); System.out.println(idList); Collections.sort(idList); System.out.println(idList); BigDecimal personSize = BigDecimal.ZERO; List bigsList = Lists.newArrayList(); BigDecimal bigD = BigDecimal.valueOf(1); bigsList.add(bigD); BigDecimal bigC = BigDecimal.valueOf(1); bigsList.add(bigC); BigDecimal bigB = BigDecimal.valueOf(1); bigsList.add(bigB); BigDecimal bigA = BigDecimal.valueOf(1); bigsList.add(bigA); BigDecimal bigS = BigDecimal.valueOf(1); bigsList.add(bigS); String ld = "S最多%s人,A最多%s人,B最多%s人,C最多%s人,D最多%s人,"; List ldrs = Lists.newArrayList(); List bigs = Lists.newArrayList(); switch ("B") { case "D": personSize = personSize.add(bigD); ldrs.add("D最多%s人,"); bigsList.remove(bigD); case "C": personSize = personSize.add(bigC); ldrs.add("C最多%s人,"); bigsList.remove(bigC); case "B": personSize = personSize.add(bigB); ldrs.add("B最多%s人,"); bigsList.remove(bigB); case "A": personSize = personSize.add(bigA); ldrs.add("A最多%s人,"); bigsList.remove(bigA); case "S": personSize = personSize.add(bigS); ldrs.add("S最多%s人,"); bigsList.remove(bigS); } System.out.println(personSize); System.out.println(ldrs); ldrs.remove(0); for (String ldr : ldrs) { ld = ld.replace(ldr, ""); } System.out.println(ld); System.out.println(bigs); System.out.println(bigsList); Map map = Maps.newHashMap(); String pstartdate = "2025-10-01"; String penddate = "2025-12-31"; int cycletype = 300; LocalDate startDate = LocalDate.parse(pstartdate, DateTimeFormatter.ISO_LOCAL_DATE); LocalDate endDate = LocalDate.parse(penddate, DateTimeFormatter.ISO_LOCAL_DATE); EvalplanCycleTypeEnum cycleTypeEnum = EvalplanCycleTypeEnum.getEnum(cycletype); if (EvalplanCycleTypeEnum.FULL_YEAR_VALUE == cycletype) { //周期为年度 endDate = endDate.plusYears(-1); startDate = startDate.plusYears(-1); cycleTypeEnum = EvalplanCycleTypeEnum.FULL_YEAR; } else if (EvalplanCycleTypeEnum.HALF_YEAR_VALUE == cycletype) { //周期为半年度 endDate = endDate.plusMonths(-6); startDate = startDate.plusMonths(-6); cycleTypeEnum = EvalplanCycleTypeEnum.HALF_YEAR; } else if (EvalplanCycleTypeEnum.QUARTER_VALUE == cycletype) { //获取为季度 endDate = endDate.plusMonths(-3); startDate = startDate.plusMonths(-3); cycleTypeEnum = EvalplanCycleTypeEnum.QUARTER; } else if (EvalplanCycleTypeEnum.MONTHLY_VALUE == cycletype) { //获取为季度 endDate = endDate.plusMonths(-1); startDate = startDate.plusMonths(-1); cycleTypeEnum = EvalplanCycleTypeEnum.MONTHLY; } map.put("cycleType", cycleTypeEnum); map.put("endDate", endDate); map.put("startDate", startDate); //System.out.println(map); } }