Jelajahi Sumber

绩效优化

9060 1 bulan lalu
induk
melakukan
2390665968

+ 350 - 169
src/com/kingdee/shr/perfweb/app/base/evalplan/GoalsTargetFacadeControllerBeanEx.java

@@ -2,15 +2,20 @@ package com.kingdee.shr.perfweb.app.base.evalplan;
 
 
 import com.google.common.base.Joiner;
+import com.google.common.collect.Sets;
 import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
 import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.eas.base.netctrl.IMutexServiceControl;
+import com.kingdee.eas.base.netctrl.MutexServiceControlFactory;
+import com.kingdee.eas.hr.perf.handler.AreaBaseConfig;
 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.exception.SHRWebException;
 import com.kingdee.shr.base.syssetting.util.NetCtrlHelper;
+import com.kingdee.shr.base.syssetting.util.SHRCheck;
 import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
 import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
 import com.kingdee.shr.perfweb.util.GetEntityInfoUtils;
@@ -21,6 +26,8 @@ import com.kingdee.shr.perfweb.utils.PerfwebStrUtils;
 import com.kingdee.shr.perfweb.utils.PerfwebThreadPoolUtils;
 import com.kingdee.shr.perfweb.workflow.serviceImpl.WorkFlowEngine;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.mock.web.MockServletContext;
@@ -44,6 +51,19 @@ import java.util.concurrent.TimeUnit;
  * version: 1.0 <br>
  */
 public class GoalsTargetFacadeControllerBeanEx extends GoalsTargetFacadeControllerBean {
+    private static Logger logger = LoggerFactory.getLogger(GoalsTargetFacadeControllerBeanEx.class);
+
+    public final static String AREABASE ="HbulTDUkQBSS5kI9V4xZfIqoXbM=";
+    public static Set<String> getAreaBases(Context ctx) throws BOSException, SQLException {
+        Set<String> areaBases = Sets.newHashSet();
+        String sqlAreaBase = "select fid from T_EVA_EvaluFormAreaBase where fid =? or FRELATEDAREAID=?";
+        IRowSet rs = DbUtil.executeQuery(ctx,sqlAreaBase,new Object[]{AREABASE,AREABASE});
+        while (rs.next()){
+            String fid = rs.getString("fid");
+            areaBases.add(fid);
+        }
+        return areaBases;
+    }
     /**
      * 下单自动获取跨部门绩效等级
      * @param ctx
@@ -55,164 +75,282 @@ public class GoalsTargetFacadeControllerBeanEx extends GoalsTargetFacadeControll
     protected void _batchGoalsTransmitEx(Context ctx, Object evaObjIds, Object periodIds,Boolean isTransmit) throws BOSException {
         IObjectPK userId = ctx.getCaller();
         try {
-            String areabaseId = "XpebMP4VRlmvZa3uIWF2WYqoXbM=";
+
+            Set<String> areaBases = this.getAreaBases(ctx);
             //项目考核区域
             System.out.println("com.kingdee.shr.perfweb.app.base.evalplan.GoalsTargetFacadeControllerBeanEx._batchGoalsTransmit");
             IRowSet rowSet = DbUtil.executeQuery(ctx, "select peo.FPERSONID,pp.FPSTARTDATE,pp.FPENDDATE,pp.FCYCLETYPE from T_EVA_PerfEvaObject peo left join T_EVA_PerfPeriod pp on peo.FPERIODID=pp.fid where peo.FID = ?", new Object[]{evaObjIds});
             if(rowSet.next()) {
-                String getTable = "CT_PF_PerformanProjectPerson";
-                String personid=rowSet.getString("FPERSONID");
-                String cycletype=rowSet.getString("FCYCLETYPE");
-                Date fpstartdate=rowSet.getDate("FPSTARTDATE");
-                Date fpenddate=rowSet.getDate("FPENDDATE");
-                SimpleDateFormat ssf = new SimpleDateFormat("yyyy-MM-dd");
-                String pstartdate=ssf.format(fpstartdate);
-                String penddate=ssf.format(fpenddate);
-                String[] ps = new String[]{personid};
-                IRowSet rsSose=null;
-
-                StringBuilder sel1 = new StringBuilder();
-                sel1.append(" select pp.FPERSONID from t_hr_personPosition pp ");
-                sel1.append(" left join T_ORG_admin org on org.fid=pp.FPERSONDEP ");
-                sel1.append(" left join T_Org_LayerType lt on lt.fid=org.FLAYERTYPEID ");
-                sel1.append(" where lt.FNUMBER ='一级部门' and pp.FPERSONID=? ");
-                rsSose = DbUtil.executeQuery(ctx,sel1.toString(),ps);
-                if (rsSose.next()){
-                    getTable="CT_HR_PerformanProjectOne";
+                StringBuilder selectWSql= new StringBuilder("select isnull(FWEIGHT,0) FWEIGHT from T_EVA_IndicatorTarget where FAREABASEID in('' ");
+                for (String abid : areaBases){
+                    selectWSql.append(",'");
+                    selectWSql.append(abid);
+                    selectWSql.append("'");
                 }
-                StringBuilder sel2 = new StringBuilder();
-                sel2.append(" select pp.FPERSONID from t_hr_personPosition pp ");
-                sel2.append(" left join T_ORG_admin org on org.fid=pp.FPERSONDEP ");
-                sel2.append(" left join T_Org_LayerType lt on lt.fid=org.FLAYERTYPEID ");
-                sel2.append(" where lt.FNUMBER ='二级部门' and pp.FPERSONID=? ");
-                rsSose = DbUtil.executeQuery(ctx,sel2.toString(),ps);
-                if (rsSose.next()&&(!("CT_HR_PerformanProjectOne".equals(getTable)))){
-                    getTable="CT_HR_PerformanProjecttwo";
-                }
-                //周期月份
-                if("400".equals(cycletype)) {
-                    StringBuilder performan = new StringBuilder();
-                    performan.append(" select CFPERPOJECTSUM from " + getTable);
-                    performan.append(" where CFPERSONID = ? and CFTIMETYPE = 2 and FBILLSTATE =3 ");
-                    performan.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd') = ? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
-                    System.out.println("performan400:"+performan);
-                    IRowSet rsPerf = DbUtil.executeQuery(ctx,performan.toString(),new String[]{personid,pstartdate,penddate});
-                    if (rsPerf.next()){
-                        BigDecimal perpojectSum = rsPerf.getBigDecimal("CFPERPOJECTSUM");
-                        StringBuilder performanLevel = new StringBuilder();
-                        performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
-                        performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
-                        performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
-                        System.out.println("performanLevel:"+performanLevel+",param:"+perpojectSum+","+perpojectSum);
-                        IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
-                        if (rsLevel.next()){
-                            String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
-                            Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum,areabaseId, evaObjIds, periodIds.toString()};
-                            System.out.println("FSYSPERFLEVEL:"+FSYSPERFLEVEL);
-                            DbUtil.execute(ctx, "update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID =? and FEVAOBJID=? and FPERFPERIODID=?", params);
-                            this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,new Object[]{perpojectSum,FSYSPERFLEVEL,areabaseId,evaObjIds,periodIds.toString()});
-                            if(isTransmit) {
-                                this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
-                            }
-                        }
-                    }
-                    //周期季度
-                }else if("300".equals(cycletype)){
-                    StringBuilder performan = new StringBuilder();
-                    performan.append(" select CFPERPOJECTSUM from " + getTable);
-                    performan.append(" where CFPERSONID=? and CFTIMETYPE = 1 and FBILLSTATE =3 ");
-                    performan.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
-                    IRowSet rsPerf = DbUtil.executeQuery(ctx,performan.toString(),new String[]{personid,pstartdate,penddate});
-                    if (rsPerf.next()){
-                        BigDecimal perpojectSum = rsPerf.getBigDecimal("CFPERPOJECTSUM");
-                        StringBuilder performanLevel = new StringBuilder();
-                        performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
-                        performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
-                        performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
-                        IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
-                        if (rsLevel.next()){
-                            String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
-                            Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum,areabaseId, evaObjIds, periodIds.toString()};
-                            DbUtil.execute(ctx, "update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID =? and FEVAOBJID=? and FPERFPERIODID=?", params);
-                            this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,new Object[]{perpojectSum,FSYSPERFLEVEL,areabaseId,evaObjIds,periodIds.toString()});
-                            if(isTransmit) {
-                                this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
-                            }
-                        }
-                    }else {
-                        //周期月份
-                        StringBuilder performan1 = new StringBuilder();
-                        performan1.append(" select (sum(CFPERPOJECTSUM)/count(fid)) CFPERPOJECTSUM from " + getTable);
-                        performan1.append(" where CFPERSONID=? and CFTIMETYPE = 2 and FBILLSTATE =3 ");
-                        performan1.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
-                        performan1.append(" group by CFPERSONID ");
-                        IRowSet rsPerf1 = DbUtil.executeQuery(ctx,performan1.toString(),new String[]{personid,pstartdate,penddate});
-                        if (rsPerf1.next()){
-                            BigDecimal perpojectSum = rsPerf1.getBigDecimal("CFPERPOJECTSUM");
-                            StringBuilder performanLevel = new StringBuilder();
-                            performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
-                            performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
-                            performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
-                            IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
-                            if (rsLevel.next()){
-                                String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
-                                Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum,areabaseId, evaObjIds, periodIds.toString()};
-                                DbUtil.execute(ctx, "update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID =? and FEVAOBJID=? and FPERFPERIODID=?", params);
-                                this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,new Object[]{perpojectSum,FSYSPERFLEVEL,areabaseId,evaObjIds,periodIds.toString()});
-                                if(isTransmit) {
-                                    this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
-                                }
-                            }
-                        }
-                    }
-                    //周期年度季度
-                }else if("100".equals(cycletype)){
-                    StringBuilder performan = new StringBuilder();
-                    performan.append(" select CFPERPOJECTSUM from " + getTable);
-                    performan.append(" where CFPERSONID=? and CFTIMETYPE = 0 and FBILLSTATE =3 ");
-                    performan.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
-                    IRowSet rsPerf = DbUtil.executeQuery(ctx,performan.toString(),new String[]{personid,pstartdate,penddate});
-                    if (rsPerf.next()){
-                        BigDecimal perpojectSum = rsPerf.getBigDecimal("CFPERPOJECTSUM");
-                        StringBuilder performanLevel = new StringBuilder();
-                        performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
-                        performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
-                        performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
-                        IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
-                        if (rsLevel.next()){
-                            String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
-                            Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum,areabaseId, evaObjIds, periodIds.toString()};
-                            DbUtil.execute(ctx, "update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID =? and FEVAOBJID=? and FPERFPERIODID=?", params);
-                            this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,new Object[]{perpojectSum,FSYSPERFLEVEL,areabaseId,evaObjIds,periodIds.toString()});
-                            if(isTransmit) {
-                                this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
-                            }
-                        }
-                    }else {
-                        //周期月份
-                        StringBuilder performan1 = new StringBuilder();
-                        performan1.append(" select (sum(CFPERPOJECTSUM)/count(fid)) CFPERPOJECTSUM from " + getTable);
-                        performan1.append(" where CFPERSONID=? and CFTIMETYPE = 2 and FBILLSTATE =3 ");
-                        performan1.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
-                        performan1.append(" group by CFPERSONID ");
-                        IRowSet rsPerf1 = DbUtil.executeQuery(ctx,performan1.toString(),new String[]{personid,pstartdate,penddate});
-                        if (rsPerf1.next()){
-                            BigDecimal perpojectSum = rsPerf1.getBigDecimal("CFPERPOJECTSUM");
-                            StringBuilder performanLevel = new StringBuilder();
-                            performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
-                            performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
-                            performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
-                            IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
-                            if (rsLevel.next()){
-                                String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
-                                Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum,areabaseId, evaObjIds, periodIds.toString()};
-                                DbUtil.execute(ctx, "update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID =? and FEVAOBJID=? and FPERFPERIODID=?", params);
-                                this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,new Object[]{perpojectSum,FSYSPERFLEVEL,areabaseId,evaObjIds,periodIds.toString()});
-                                if(isTransmit) {
-                                    this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
-                                }
-                            }
-                        }
+                selectWSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                IRowSet wRowSet = DbUtil.executeQuery(ctx,selectWSql.toString(),new Object[]{evaObjIds, periodIds.toString()});
+                if (wRowSet.next()){
+                   BigDecimal FWEIGHT = wRowSet.getBigDecimal("FWEIGHT");
+                   if(FWEIGHT.compareTo(BigDecimal.ZERO)>0){
+                       String getTable = "CT_PF_PerformanProjectPerson";
+                       String personid=rowSet.getString("FPERSONID");
+                       String cycletype=rowSet.getString("FCYCLETYPE");
+                       Date fpstartdate=rowSet.getDate("FPSTARTDATE");
+                       Date fpenddate=rowSet.getDate("FPENDDATE");
+                       SimpleDateFormat ssf = new SimpleDateFormat("yyyy-MM-dd");
+                       String pstartdate=ssf.format(fpstartdate);
+                       String penddate=ssf.format(fpenddate);
+                       String[] ps = new String[]{personid};
+                       IRowSet rsSose=null;
+
+                       StringBuilder sel1 = new StringBuilder();
+                       sel1.append(" select pp.FPERSONID from t_hr_personPosition pp ");
+                       sel1.append(" left join T_ORG_admin org on org.fid=pp.FPERSONDEP ");
+                       sel1.append(" left join T_Org_LayerType lt on lt.fid=org.FLAYERTYPEID ");
+                       sel1.append(" where lt.FNUMBER ='\u4e00\u7ea7\u90e8\u95e8' and pp.FPERSONID=? ");
+                       rsSose = DbUtil.executeQuery(ctx,sel1.toString(),ps);
+                       if (rsSose.next()){
+                           getTable="CT_HR_PerformanProjectOne";
+                       }
+                       StringBuilder sel2 = new StringBuilder();
+                       sel2.append(" select pp.FPERSONID from t_hr_personPosition pp ");
+                       sel2.append(" left join T_ORG_admin org on org.fid=pp.FPERSONDEP ");
+                       sel2.append(" left join T_Org_LayerType lt on lt.fid=org.FLAYERTYPEID ");
+                       sel2.append(" where lt.FNUMBER ='\u4e8c\u7ea7\u90e8\u95e8' and pp.FPERSONID=? ");
+                       rsSose = DbUtil.executeQuery(ctx,sel2.toString(),ps);
+                       if (rsSose.next()&&(!("CT_HR_PerformanProjectOne".equals(getTable)))){
+                           getTable="CT_HR_PerformanProjecttwo";
+                       }
+                       //周期月份
+                       if("400".equals(cycletype)) {
+                           StringBuilder performan = new StringBuilder();
+                           performan.append(" select CFPERPOJECTSUM from " + getTable);
+                           performan.append(" where CFPERSONID = ? and CFPERIODTYPE = '\u6708\u5ea6' and FBILLSTATE =3 ");
+                           performan.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd') = ? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
+                           System.out.println("performan400:"+performan);
+                           IRowSet rsPerf = DbUtil.executeQuery(ctx,performan.toString(),new String[]{personid,pstartdate,penddate});
+                           if (rsPerf.next()){
+                               BigDecimal perpojectSum = rsPerf.getBigDecimal("CFPERPOJECTSUM");
+                               StringBuilder performanLevel = new StringBuilder();
+                               performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
+                               performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
+                               performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
+                               System.out.println("performanLevel:"+performanLevel+",param:"+perpojectSum+","+perpojectSum);
+                               IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
+                               if (rsLevel.next()){
+                                   String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
+                                   Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum, evaObjIds, periodIds.toString()};
+                                   System.out.println("params:"+Arrays.toString(params));
+                                   StringBuilder updateSql= new StringBuilder("update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID in('' ");
+                                   StringBuilder selectSql= new StringBuilder("select FEXTENDID from T_EVA_IndicatorTarget where FAREABASEID in('' ");
+                                   for (String abid : areaBases){
+                                       updateSql.append(",'");
+                                       updateSql.append(abid);
+                                       updateSql.append("'");
+                                       selectSql.append(",'");
+                                       selectSql.append(abid);
+                                       selectSql.append("'");
+                                   }
+                                   updateSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                   selectSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                   StringBuilder updateHelperSql = new StringBuilder();
+                                   updateHelperSql.append("update T_EVA_IndicatorExtendHelper set FEXTEND3=? where fid in(");
+                                   updateHelperSql.append(selectSql);
+                                   updateHelperSql.append(" ) ");
+                                   DbUtil.execute(ctx,updateHelperSql.toString(), new Object[]{FSYSPERFLEVEL, evaObjIds, periodIds.toString()});
+                                   DbUtil.execute(ctx,updateSql.toString(), params);
+                                   this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,areaBases,new Object[]{perpojectSum,FSYSPERFLEVEL,evaObjIds,periodIds.toString()});
+                                   System.out.println("isTransmit:"+isTransmit);
+                                   if(isTransmit) {
+                                       this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
+                                   }
+                               }
+                           }
+                           //周期季度
+                       }else if("300".equals(cycletype)){
+                           StringBuilder performan = new StringBuilder();
+                           performan.append(" select CFPERPOJECTSUM from " + getTable);
+                           performan.append(" where CFPERSONID=? and CFPERIODTYPE = '\u5b63\u5ea6' and FBILLSTATE =3 ");
+                           performan.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
+                           IRowSet rsPerf = DbUtil.executeQuery(ctx,performan.toString(),new String[]{personid,pstartdate,penddate});
+                           if (rsPerf.next()){
+                               BigDecimal perpojectSum = rsPerf.getBigDecimal("CFPERPOJECTSUM");
+                               StringBuilder performanLevel = new StringBuilder();
+                               performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
+                               performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
+                               performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
+                               IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
+                               if (rsLevel.next()){
+                                   String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
+//                            Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum,areabaseId, evaObjIds, periodIds.toString()};
+//                            DbUtil.execute(ctx, "update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID =? and FEVAOBJID=? and FPERFPERIODID=?",
+//                                    params);
+                                   Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum, evaObjIds, periodIds.toString()};
+                                   System.out.println("params:"+Arrays.toString(params));
+                                   StringBuilder updateSql= new StringBuilder("update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID in('' ");
+                                   StringBuilder selectSql= new StringBuilder("select FEXTENDID from T_EVA_IndicatorTarget where FAREABASEID in('' ");
+                                   for (String abid : areaBases){
+                                       updateSql.append(",'");
+                                       updateSql.append(abid);
+                                       updateSql.append("'");
+                                       selectSql.append(",'");
+                                       selectSql.append(abid);
+                                       selectSql.append("'");
+                                   }
+                                   updateSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                   selectSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                   StringBuilder updateHelperSql = new StringBuilder();
+                                   updateHelperSql.append("update T_EVA_IndicatorExtendHelper set FEXTEND3=? where fid in(");
+                                   updateHelperSql.append(selectSql);
+                                   updateHelperSql.append(" ) ");
+                                   DbUtil.execute(ctx,updateHelperSql.toString(), new Object[]{FSYSPERFLEVEL, evaObjIds, periodIds.toString()});
+                                   DbUtil.execute(ctx,updateSql.toString(), params);
+                                   this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,areaBases,new Object[]{perpojectSum,FSYSPERFLEVEL,evaObjIds,periodIds.toString()});
+                                   System.out.println("isTransmit:"+isTransmit);
+                                   if(isTransmit) {
+                                       this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
+                                   }
+                               }
+                           }else {
+                               //周期月份
+                               StringBuilder performan1 = new StringBuilder();
+                               performan1.append(" select (sum(CFPERPOJECTSUM)/count(fid)) CFPERPOJECTSUM from " + getTable);
+                               performan1.append(" where CFPERSONID=? and CFPERIODTYPE = '\u6708\u5ea6' and FBILLSTATE =3 ");
+                               performan1.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
+                               performan1.append(" group by CFPERSONID ");
+                               IRowSet rsPerf1 = DbUtil.executeQuery(ctx,performan1.toString(),new String[]{personid,pstartdate,penddate});
+                               if (rsPerf1.next()){
+                                   BigDecimal perpojectSum = rsPerf1.getBigDecimal("CFPERPOJECTSUM");
+                                   StringBuilder performanLevel = new StringBuilder();
+                                   performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
+                                   performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
+                                   performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
+                                   IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
+                                   if (rsLevel.next()){
+                                       String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
+                                       Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum, evaObjIds, periodIds.toString()};
+                                       System.out.println("params:"+Arrays.toString(params));
+                                       StringBuilder updateSql= new StringBuilder("update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID in('' ");
+                                       StringBuilder selectSql= new StringBuilder("select FEXTENDID from T_EVA_IndicatorTarget where FAREABASEID in('' ");
+                                       for (String abid : areaBases){
+                                           updateSql.append(",'");
+                                           updateSql.append(abid);
+                                           updateSql.append("'");
+                                           selectSql.append(",'");
+                                           selectSql.append(abid);
+                                           selectSql.append("'");
+                                       }
+                                       updateSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                       selectSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                       StringBuilder updateHelperSql = new StringBuilder();
+                                       updateHelperSql.append("update T_EVA_IndicatorExtendHelper set FEXTEND3=? where fid in(");
+                                       updateHelperSql.append(selectSql);
+                                       updateHelperSql.append(" ) ");
+                                       DbUtil.execute(ctx,updateHelperSql.toString(), new Object[]{FSYSPERFLEVEL, evaObjIds, periodIds.toString()});
+                                       DbUtil.execute(ctx,updateSql.toString(), params);
+                                       this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,areaBases,new Object[]{perpojectSum,FSYSPERFLEVEL,evaObjIds,periodIds.toString()});
+                                       System.out.println("isTransmit:"+isTransmit);
+                                       if(isTransmit) {
+                                           this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
+                                       }
+                                   }
+                               }
+                           }
+                           //周期年度季度
+                       }else if("100".equals(cycletype)){
+                           StringBuilder performan = new StringBuilder();
+                           performan.append(" select CFPERPOJECTSUM from " + getTable);
+                           performan.append(" where CFPERSONID=? and CFPERIODTYPE = '\u5e74\u5ea6' and FBILLSTATE =3 ");
+                           performan.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
+                           IRowSet rsPerf = DbUtil.executeQuery(ctx,performan.toString(),new String[]{personid,pstartdate,penddate});
+                           if (rsPerf.next()){
+                               BigDecimal perpojectSum = rsPerf.getBigDecimal("CFPERPOJECTSUM");
+                               StringBuilder performanLevel = new StringBuilder();
+                               performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
+                               performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
+                               performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
+                               IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
+                               if (rsLevel.next()){
+                                   String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
+                                   Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum, evaObjIds, periodIds.toString()};
+                                   System.out.println("params:"+Arrays.toString(params));
+                                   StringBuilder updateSql= new StringBuilder("update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID in('' ");
+                                   StringBuilder selectSql= new StringBuilder("select FEXTENDID from T_EVA_IndicatorTarget where FAREABASEID in('' ");
+                                   for (String abid : areaBases){
+                                       updateSql.append(",'");
+                                       updateSql.append(abid);
+                                       updateSql.append("'");
+                                       selectSql.append(",'");
+                                       selectSql.append(abid);
+                                       selectSql.append("'");
+                                   }
+                                   updateSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                   selectSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                   StringBuilder updateHelperSql = new StringBuilder();
+                                   updateHelperSql.append("update T_EVA_IndicatorExtendHelper set FEXTEND3=? where fid in(");
+                                   updateHelperSql.append(selectSql);
+                                   updateHelperSql.append(" ) ");
+                                   DbUtil.execute(ctx,updateHelperSql.toString(), new Object[]{FSYSPERFLEVEL, evaObjIds, periodIds.toString()});
+                                   this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,areaBases,new Object[]{perpojectSum,FSYSPERFLEVEL,evaObjIds,periodIds.toString()});
+                                   System.out.println("isTransmit:"+isTransmit);
+                                   if(isTransmit) {
+                                       this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
+                                   }
+                               }
+                           }else {
+                               //周期月份
+                               StringBuilder performan1 = new StringBuilder();
+                               performan1.append(" select (sum(CFPERPOJECTSUM)/count(fid)) CFPERPOJECTSUM from " + getTable);
+                               performan1.append(" where CFPERSONID=? and CFPERIODTYPE = '\u6708\u5ea6' and FBILLSTATE =3 ");
+                               performan1.append(" and to_char(CFSTARTDATE,'yyyy-MM-dd')=? and to_char(CFENDDATE,'yyyy-MM-dd') = ? ");
+                               performan1.append(" group by CFPERSONID ");
+                               IRowSet rsPerf1 = DbUtil.executeQuery(ctx,performan1.toString(),new String[]{personid,pstartdate,penddate});
+                               if (rsPerf1.next()){
+                                   BigDecimal perpojectSum = rsPerf1.getBigDecimal("CFPERPOJECTSUM");
+                                   StringBuilder performanLevel = new StringBuilder();
+                                   performanLevel.append(" select pfld.FSYSPERFLEVEL from T_PER_PerfScoreLevel psl ");
+                                   performanLevel.append(" left join T_PER_PerfScorLevelDefine pfld on psl.fid=pfld.FPERFSCORELEVELID ");
+                                   performanLevel.append(" where psl.FSTATE='1' and pfld.FSCORELOWLIMIT<? and pfld.FSCOREUPLIMIT>=? ");
+                                   IRowSet rsLevel = DbUtil.executeQuery(ctx,performanLevel.toString(),new String[]{perpojectSum.toPlainString(),perpojectSum.toPlainString()});
+                                   if (rsLevel.next()){
+                                       String FSYSPERFLEVEL = rsLevel.getString("FSYSPERFLEVEL");
+                                       Object[] params = new Object[]{FSYSPERFLEVEL,perpojectSum, evaObjIds, periodIds.toString()};
+                                       System.out.println("params:"+Arrays.toString(params));
+                                       StringBuilder updateSql= new StringBuilder("update T_EVA_IndicatorTarget set FGRADE=?,FSCORE=? where FAREABASEID in('' ");
+                                       StringBuilder selectSql= new StringBuilder("select FEXTENDID from T_EVA_IndicatorTarget where FAREABASEID in('' ");
+                                       for (String abid : areaBases){
+                                           updateSql.append(",'");
+                                           updateSql.append(abid);
+                                           updateSql.append("'");
+                                           selectSql.append(",'");
+                                           selectSql.append(abid);
+                                           selectSql.append("'");
+                                       }
+                                       updateSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                       selectSql.append(") and FEVAOBJID=? and FPERFPERIODID=? ");
+                                       StringBuilder updateHelperSql = new StringBuilder();
+                                       updateHelperSql.append("update T_EVA_IndicatorExtendHelper set FEXTEND3=? where fid in(");
+                                       updateHelperSql.append(selectSql);
+                                       updateHelperSql.append(" ) ");
+                                       DbUtil.execute(ctx,updateHelperSql.toString(), new Object[]{FSYSPERFLEVEL, evaObjIds, periodIds.toString()});
+                                       DbUtil.execute(ctx,updateSql.toString(), params);
+                                       this.startGradeTargetInstAction(ctx,evaObjIds,periodIds,areaBases,new Object[]{perpojectSum,FSYSPERFLEVEL,evaObjIds,periodIds.toString()});
+                                       System.out.println("isTransmit:"+isTransmit);
+                                       if(isTransmit) {
+                                           this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
+                                       }
+                                   }
+                               }
+                           }
+                       }
+                   }else {
+                       if(isTransmit) {
+                           this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
+                       }
+                   }
+                }else {
+                    if(isTransmit) {
+                        this.startEvaTaskAction(ctx, periodIds.toString(), evaObjIds.toString());
                     }
                 }
             }
@@ -225,20 +363,35 @@ public class GoalsTargetFacadeControllerBeanEx extends GoalsTargetFacadeControll
      * 更新评估表的跨部门组织绩效等级,分数
      */
     class startGradeTargetInst implements Runnable{
-        Context ctx; Object evaObjIds; Object periodIds;Object[] params;
+        private Context ctx;
+        private Object evaObjIds;
+        private Object periodIds;
+        private Set<String> areaBases;
+        private Object[] params;
 
-        public startGradeTargetInst(Context ctx, Object evaObjIds, Object periodIds, Object[] params) {
+        public startGradeTargetInst(Context ctx, Object evaObjIds, Object periodIds,Set<String> areaBases, Object[] params) {
             this.ctx = ctx;
             this.evaObjIds = evaObjIds;
             this.periodIds = periodIds;
+            this.areaBases = areaBases;
             this.params = params;
+
         }
 
         @Override
         public void run() {
             try {
-                String update = "update T_EVA_GradeTargetInst set FTARGETSCORE=?, FGRADERANK=? where FAREABASEID=? and FGradeTaskNodeID in(select fid from T_EVA_GradeTaskNodeInst where FEVAOBJID=? and FPERIODID=?)";
-                DbUtil.execute(this.ctx,update,this.params);
+//                String update = "update T_EVA_GradeTargetInst set FTARGETSCORE=?, FGRADERANK=? where FAREABASEID=? and " +
+//                        "FGradeTaskNodeID in(select fid from T_EVA_GradeTaskNodeInst where FEVAOBJID=? and FPERIODID=?)";
+//                DbUtil.execute(this.ctx,update,this.params);
+                StringBuilder updateSql= new StringBuilder("update T_EVA_GradeTargetInst set FTARGETSCORE=?, FGRADERANK=? where FAREABASEID in('' ");
+                for (String abid : areaBases){
+                    updateSql.append(",'");
+                    updateSql.append(abid);
+                    updateSql.append("'");
+                }
+                updateSql.append(") and FGradeTaskNodeID in(select fid from T_EVA_GradeTaskNodeInst where FEVAOBJID=? and FPERIODID=?) ");
+                DbUtil.execute(this.ctx,updateSql.toString(),this.params);
             } catch (BOSException e) {
                 e.printStackTrace();
             }
@@ -253,56 +406,84 @@ public class GoalsTargetFacadeControllerBeanEx extends GoalsTargetFacadeControll
      * @param params
      * @throws BOSException
      */
-    protected void startGradeTargetInstAction(Context ctx, Object evaObjIds, Object periodIds,Object[] params) throws BOSException {
+    protected void startGradeTargetInstAction(Context ctx, Object evaObjIds, Object periodIds,Set<String> areaBases,Object[] params) throws BOSException {
         ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
-        scheduledThreadPoolExecutor.schedule(new startGradeTargetInst(ctx,evaObjIds,periodIds,params), 3, TimeUnit.MINUTES);
+        scheduledThreadPoolExecutor.schedule(new startGradeTargetInst(ctx,evaObjIds,periodIds,areaBases,params), 15, TimeUnit.SECONDS);
     }
 
     @Override
     protected void _batchGoalsTransmit(Context ctx, Object evaObjIds, Object periodIds) throws BOSException {
-        super._batchGoalsTransmit(ctx,evaObjIds,periodIds);
         Boolean isTransmit = (Boolean) ctx.get("com.kingdee.shr.perfweb.app.base.evalplan.GoalsTargetFacadeControllerBeanEx.isTransmit");
         if(null==isTransmit){
             isTransmit=Boolean.TRUE;
         }
+        if(isTransmit) {
+            super._batchGoalsTransmit(ctx, evaObjIds, periodIds);
+        }
         this._batchGoalsTransmitEx(ctx,evaObjIds,periodIds,isTransmit);
     }
 
 
-    public void startEvaTaskAction(Context ctx,String periodId,String billId) throws SHRWebException {
+    public void startEvaTaskAction(Context ctx,String periodId,String billId) throws Exception {
         try {
+            System.out.println("startEvaTaskAction:periodId:"+periodId+",billId:"+billId);
             ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
             scheduledThreadPoolExecutor.schedule(()->{
                 try {
                     MockHttpServletRequest request = new MockHttpServletRequest();
                     MockHttpServletResponse response = new MockHttpServletResponse();
                     request.setParameter("period", periodId);
-                    request.setParameter("billId", billId);
+                    StringBuilder sql = new StringBuilder("select (fid||'$'||FWORKFLOWID) as wfid from T_EVA_PerfEvaObject where fid in(''");
+                    sql.append(",'");
+                    sql.append(billId);
+                    sql.append("'");
+                    sql.append(")");
+                    IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
+                    String wbillId="";
+                    while (rs.next()) {
+                        wbillId=rs.getString("wfid");
+                        request.setParameter("billId", wbillId);
+                    }
+                    System.out.println("startEvaTaskAction:periodId:"+periodId+",wbillId:"+wbillId);
                     ModelMap modelMap = new ModelMap();
                     BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
                     this.startEvaTaskAction(ctx,request, response, modelMap, batchMessageTipsHeader);
-                } catch (SHRWebException e) {
+                } catch (Exception e) {
                     e.printStackTrace();
                 }
-            }, 1, TimeUnit.MINUTES);
+            }, 10, TimeUnit.SECONDS);
         }catch (Exception e){
             e.printStackTrace();
         }
     }
-    public void startEvaTaskAction(Context ctx,HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
+    public static final Map batchRequestObjIDForUpdate(Context ctx,List dataList) throws BOSException {
+        IMutexServiceControl mutexService = MutexServiceControlFactory.getLocalInstance(ctx);
+        String userName = ctx.getUserName();
+        Map map = mutexService.batchRequestObjIDForUpdate(dataList);
+        logger.info("NetCtrlService........dataId :" + SHRCheck.vaildLog(dataList.toString()) + ";userName," + userName + " request net ctrl " + map.toString());
+        return map;
+    }
+    public static final void batchReleaseObjIDForUpdate(Context ctx,List dataList) throws BOSException {
+        IMutexServiceControl mutexService = MutexServiceControlFactory.getLocalInstance(ctx);
+        mutexService.batchReleaseObjIDForUpdate(dataList);
+    }
+    public void startEvaTaskAction(Context ctx,HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws Exception {
+        System.out.println("startEvaTaskAction:batchMessageTipsHeader:"+batchMessageTipsHeader);
         String period = request.getParameter("period");
         PerfPeriodInfo periodInfo = GetEntityInfoUtils.getPerfPeriodInfo(ctx, period);
         if (periodInfo.getEvaPeriodStatus().getValue() == 100) {
-            throw new SHRWebException(new SHRPerfWebBizException(SHRPerfWebBizException.OPERATENOTALLOWEDASPERIODISEND));
+            throw new Exception(new SHRPerfWebBizException(SHRPerfWebBizException.OPERATENOTALLOWEDASPERIODISEND));
         } else {
             Map<String, Set<String>> evaObjMap = new HashMap();
             Map<String, Set<String>> evaObjAreaMap = new HashMap();
             List<String> idList = this.getEvaObjIdsByDealIds(request, evaObjMap, evaObjAreaMap);
+            System.out.println("startEvaTaskAction:idList:"+idList);
             List<String> avilableIdList = new ArrayList(16);
             HashSet failedSet = new HashSet();
 
             try {
-                Map<String, Boolean> idMap = NetCtrlHelper.batchRequestObjIDForUpdate(idList);
+                Map<String, Boolean> idMap = batchRequestObjIDForUpdate(ctx,idList);
+                System.out.println("startEvaTaskAction:idMap:"+idMap);
                 Iterator var14 = idList.iterator();
 
                 while(true) {
@@ -373,7 +554,7 @@ public class GoalsTargetFacadeControllerBeanEx extends GoalsTargetFacadeControll
                                 if (flag) {
                                     String result = WorkFlowEngine.getInstance().createAsignmentPool(ctx, Joiner.on(",").join(evaObjArr), period);
                                     if (!ServerResponseConst.SUCCESS.equals(result)) {
-                                        throw new SHRWebException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
+                                        throw new Exception(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
                                     }
                                 }
                             }
@@ -389,7 +570,7 @@ public class GoalsTargetFacadeControllerBeanEx extends GoalsTargetFacadeControll
                 e.printStackTrace();
             } finally {
                 try {
-                    NetCtrlHelper.batchReleaseObjIDForUpdate(idList);
+                    batchReleaseObjIDForUpdate(ctx,idList);
                 } catch (BOSException e) {
                     e.printStackTrace();
                 }

File diff ditekan karena terlalu besar
+ 166 - 158
websrc/com/kingdee/eas/hr/perf/handler/EvaResultSummaryManagerListHandlerExEx.java


+ 222 - 89
websrc/com/kingdee/eas/hr/perf/handler/EvaresultAuditBillEntryListHandlerEx.java

@@ -20,9 +20,17 @@ 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.EvaResultSumLogSourceEnum;
 import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
+import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
+import com.kingdee.shr.perfweb.exception.SHRPerfWebException;
 import com.kingdee.shr.perfweb.planexecute.handler.EvaresultAuditBillEntryListHandler;
+import com.kingdee.shr.perfweb.util.BOSWorkFlowUtil;
+import com.kingdee.shr.perfweb.util.EvaResultSummaryBillUtil;
+import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
@@ -30,6 +38,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.sql.SQLException;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * description: EvaresultAuditBillEntryListHandler <br>
@@ -38,9 +47,43 @@ import java.util.*;
  * version: 1.0 <br>
  */
 public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntryListHandler {
+    private static Logger logger = LoggerFactory.getLogger(EvaresultAuditBillEntryListHandlerEx.class);
+    @Override
+    protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map<String, Object> initData) throws SHRWebException {
+        super.setInitData(request, response, modelMap, initData);
+        try {
+            initData.put("performanceLevel", this.getPerformanceLevelByLevelAction(request, response, modelMap));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    public Map<String, Map<String, Object>> getPerformanceLevelByLevelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException {
 
+        Map<String, Map<String, Object>> result = Maps.newHashMap();
+        try {
+            Context ctx = SHRContext.getInstance().getContext();
+            String sql = "select CFLEVEL,CFCOEFFICIENT,CFMAXCOEFFICIENT,CFMINCOEFFICIENT from CT_PER_PerformanceLevel ";
+            IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
+            while (rs.next()) {
+                Map<String, Object> map = Maps.newHashMap();
+                String CFLEVEL = rs.getString("CFLEVEL");
+                BigDecimal CFCOEFFICIENT = rs.getBigDecimal("CFCOEFFICIENT");
+                BigDecimal CFMAXCOEFFICIENT = rs.getBigDecimal("CFMAXCOEFFICIENT");
+                BigDecimal CFMINCOEFFICIENT = rs.getBigDecimal("CFMINCOEFFICIENT");
+                map.put("level", CFLEVEL);
+                map.put("coefficient", CFCOEFFICIENT);
+                map.put("maxcoefficient", CFMAXCOEFFICIENT);
+                map.put("mincoefficient", CFMINCOEFFICIENT);
+                result.put(CFLEVEL, map);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ShrWebBizException(e.getMessage());
+        }
+        return result;
+    }
     /**
-     [{"evaResult.pnumber":"0000381","evaResult.pname":"谭梓傲","evaResult.positionName":"物资岗","evaResult.evaObj.perfFile.adminOrgUnit.company.name":"湖南红太阳光电科技有限公司","evaResult.evaObj.perfFile.adminOrgUnit.department.name":"综合管理","evaResult.sumScore":"<span></span>","evaResult.gradeLevel":"","evaResult.auditSumScore":"<span value=\\"86\\">86.00</span>","evaResult.auditGradeLevel":"C","evaResult.auditReason":"<div class=\\"cell-height scrollbarthin\\">正态分布更新结果</div>","evaResult.reviseSumScore":"<span value=\\"86\\">86.00</span>","evaResult.reviseGradeLevel":"C","evaResult.reviseReason":"正态分布更新结果","id":"KQukJy27Skiy1rPPghjkJBdK16Q=","evaResult.id":"Ka7FkRQuTAaPlTaLvJSD3IESG3Q=","bill.id":"m85zTeeDSmaAU2QLbYWMUoZLdW4=","evaResult.evaObj.id":"gjX3giS2RKurkJVjPhnwa4GI54s=","reviseGradeLevelSelect":"[{\\"value\\":\\"S\\",\\"alias\\":\\"S\\"},{\\"value\\":\\"A\\",\\"alias\\":\\"A\\"},{\\"value\\":\\"B\\",\\"alias\\":\\"B\\"},{\\"value\\":\\"C\\",\\"alias\\":\\"C\\"},{\\"value\\":\\"D\\",\\"alias\\":\\"D\\"}]","levelScoreKVInfo":"{\\n  \\"90.00~100.00\\": \\"S\\",\\n  \\"80.00~90.00\\": \\"A\\",\\n  \\"70.00~80.00\\": \\"B\\",\\n  \\"60.00~70.00\\": \\"C\\",\\n  \\"0.00~60.00\\": \\"D\\"\\n}","scoreLowLimit":"0","scoreUpLimit":"100","evaResult.period.id":"q6myAjHaQLK+wnczfdLCJEUaiOU=","evaResult.reviseFlag":"是","evaResult.auditFlag":"否"}]
+     [{"evaResult.pnumber":"0000381","evaResult.pname":"璋��鍌�","evaResult.positionName":"鐗╄祫宀�","evaResult.evaObj.perfFile.adminOrgUnit.company.name":"婀栧崡绾㈠お闃冲厜鐢电�鎶€鏈夐檺鍏�徃","evaResult.evaObj.perfFile.adminOrgUnit.department.name":"缁煎悎绠$悊","evaResult.sumScore":"<span></span>","evaResult.gradeLevel":"","evaResult.auditSumScore":"<span value=\\"86\\">86.00</span>","evaResult.auditGradeLevel":"C","evaResult.auditReason":"<div class=\\"cell-height scrollbarthin\\">姝f€佸垎甯冩洿鏂扮粨鏋�</div>","evaResult.reviseSumScore":"<span value=\\"86\\">86.00</span>","evaResult.reviseGradeLevel":"C","evaResult.reviseReason":"姝f€佸垎甯冩洿鏂扮粨鏋�","id":"KQukJy27Skiy1rPPghjkJBdK16Q=","evaResult.id":"Ka7FkRQuTAaPlTaLvJSD3IESG3Q=","bill.id":"m85zTeeDSmaAU2QLbYWMUoZLdW4=","evaResult.evaObj.id":"gjX3giS2RKurkJVjPhnwa4GI54s=","reviseGradeLevelSelect":"[{\\"value\\":\\"S\\",\\"alias\\":\\"S\\"},{\\"value\\":\\"A\\",\\"alias\\":\\"A\\"},{\\"value\\":\\"B\\",\\"alias\\":\\"B\\"},{\\"value\\":\\"C\\",\\"alias\\":\\"C\\"},{\\"value\\":\\"D\\",\\"alias\\":\\"D\\"}]","levelScoreKVInfo":"{\\n  \\"90.00~100.00\\": \\"S\\",\\n  \\"80.00~90.00\\": \\"A\\",\\n  \\"70.00~80.00\\": \\"B\\",\\n  \\"60.00~70.00\\": \\"C\\",\\n  \\"0.00~60.00\\": \\"D\\"\\n}","scoreLowLimit":"0","scoreUpLimit":"100","evaResult.period.id":"q6myAjHaQLK+wnczfdLCJEUaiOU=","evaResult.reviseFlag":"鏄�","evaResult.auditFlag":"鍚�"}]
      * @param request
      * @param response
      * @param modelMap
@@ -57,7 +100,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
             List<String> allIdList = new ArrayList<>();
             try {
                 Context ctx = SHRContext.getInstance().getContext();
-                //明细数据
+                //鏄庣粏鏁版嵁
                 JSONArray entryList = JSON.parseArray(entryData);
                 for(int i=0;i<entryList.size();i++) {
                     JSONObject object = entryList.getJSONObject(i);
@@ -69,7 +112,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     String pname = object.getString("evaResult.pname");
                     String positionName = object.getString("evaResult.positionName");
                     String evaResult = object.getString("evaResult.id");
-                    //修改后等级
+                    //淇�敼鍚庣瓑绾�
                     String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
                     if(StringUtils.isBlank(auditGradeLevel)){
                         auditGradeLevel= object.getString("evaResult.gradeLevel");
@@ -78,12 +121,12 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     body.setId(id);
                     ids.append(id).append(",");
                     allIdList.add(id);
-                    //获取跨部门协作绩效等级
+                    //鑾峰彇璺ㄩ儴闂ㄥ崗浣滅哗鏁堢瓑绾�
                     String sql = "select CFDEPGRADELEVEL from T_EVA_EvaResultSummary where fid = ?";
                     IRowSet rs = DbUtil.executeQuery(ctx, sql, new String[]{evaResult});
-                    //当跨部门协作绩效等级为C、D等级的,当期员工绩效不得为高绩效(S、A等级)
+                    //褰撹法閮ㄩ棬鍗忎綔缁╂晥绛夌骇涓篊銆丏绛夌骇鐨勶紝褰撴湡鍛樺伐缁╂晥涓嶅緱涓洪珮缁╂晥锛圫銆丄绛夌骇锛�
                     if (rs.next()){
-                        //跨部门协作绩效等级
+                        //璺ㄩ儴闂ㄥ崗浣滅哗鏁堢瓑绾�
                         String depgradelevel = rs.getString("CFDEPGRADELEVEL");
                         if(StringUtils.isNotBlank(depgradelevel)) {
                             switch (depgradelevel) {
@@ -93,29 +136,29 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                                     ;
                                 case "B":
                                     isSuccess = true;
-                                    msg = "校验通过";
+                                    msg = "鏍¢獙閫氳繃";
                                     success += 1;
                                     break;
                                 case "C":
                                 case "D":
                                     if ("S".equals(auditGradeLevel) || "A".equals(auditGradeLevel)) {
                                         isSuccess = false;
-                                        msg = "当跨部门协作绩效等级为C、D等级的,当期员工绩效不得为高绩效(S、A等级)";
+                                        msg = "褰撹法閮ㄩ棬鍗忎綔缁╂晥绛夌骇涓篊銆丏绛夌骇鐨勶紝褰撴湡鍛樺伐缁╂晥涓嶅緱涓洪珮缁╂晥锛圫銆丄绛夌骇锛�";
                                         fail += 1;
                                     } else {
                                         isSuccess = true;
-                                        msg = "校验通过";
+                                        msg = "鏍¢獙閫氳繃";
                                         success += 1;
                                     }
                                     break;
                             }
                         }else {
-                            msg="没有当跨部门协作绩效等级,请先检查跨部门协作绩效等级";
+                            msg="娌℃湁褰撹法閮ㄩ棬鍗忎綔缁╂晥绛夌骇锛岃�鍏堟�鏌ヨ法閮ㄩ棬鍗忎綔缁╂晥绛夌骇";
                             isSuccess=true;
                             success+=1;
                         }
                     }else {
-                        msg="操作失败,数据异常";
+                        msg="鎿嶄綔澶辫触锛屾暟鎹�紓甯�";
                         isSuccess=false;
                         fail+=1;
                     }
@@ -149,17 +192,17 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
     }
 
     /**
-     * 获取人员项目正态分布规则
+     * 鑾峰彇浜哄憳椤圭洰姝f€佸垎甯冭�鍒�
      *
      * @param ctx
-     * @param idList       非必填
-     * @param batchMessage 非必填
+     * @param idList       闈炲繀濉�
+     * @param batchMessage 闈炲繀濉�
      * @return
      * @throws BOSException
      * @throws SQLException
      */
     public Map<String, Map<String, BigDecimal>> getProjectPerformPro(Context ctx, List<String> idList, Map<String, String> batchMessage) throws BOSException, SQLException {
-        //获取正态分布规则
+        //鑾峰彇姝f€佸垎甯冭�鍒�
         Map<String, Map<String, BigDecimal>> orgLevelMap = Maps.newHashMap();
         PerformProTeamCollection proCollection = PerformProTeamFactory.getLocalInstance(ctx).getPerformProTeamCollection(" where status=1 ");
         if (proCollection.size() == 1) {
@@ -183,30 +226,30 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
         } else if (proCollection.size() > 1) {
             if (null != batchMessage && null != idList) {
                 for (String key : idList) {
-                    batchMessage.put(key, "存在多个正态分布规则,请检查!");
+                    batchMessage.put(key, "瀛樺湪澶氫釜姝f€佸垎甯冭�鍒欙紝璇锋�鏌ワ紒");
                 }
             }
         } else {
             if (null != batchMessage && null != idList) {
                 for (String key : idList) {
-                    batchMessage.put(key, "不存在正态分布规则,请检查!");
+                    batchMessage.put(key, "涓嶅瓨鍦ㄦ�鎬佸垎甯冭�鍒欙紝璇锋�鏌ワ紒");
                 }
             }
         }
         return orgLevelMap;
     }
     /**
-     * 获取人员组织正态分布规则
+     * 鑾峰彇浜哄憳缁勭粐姝f€佸垎甯冭�鍒�
      *
      * @param ctx
-     * @param idList       非必填
-     * @param batchMessage 非必填
+     * @param idList       闈炲繀濉�
+     * @param batchMessage 闈炲繀濉�
      * @return
      * @throws BOSException
      * @throws SQLException
      */
     public Map<String, Map<String, BigDecimal>> getPersonPerformPro(Context ctx, List<String> idList, Map<String, String> batchMessage) throws BOSException, SQLException {
-        //获取正态分布规则
+        //鑾峰彇姝f€佸垎甯冭�鍒�
         Map<String, Map<String, BigDecimal>> orgLevelMap = Maps.newHashMap();
         PersonPerformProCollection proCollection = PersonPerformProFactory.getLocalInstance(ctx).getPersonPerformProCollection(" where state=1 ");
         if (proCollection.size() == 1) {
@@ -230,13 +273,13 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
         } else if (proCollection.size() > 1) {
             if (null != batchMessage && null != idList) {
                 for (String key : idList) {
-                    batchMessage.put(key, "存在多个正态分布规则,请检查!");
+                    batchMessage.put(key, "瀛樺湪澶氫釜姝f€佸垎甯冭�鍒欙紝璇锋�鏌ワ紒");
                 }
             }
         } else {
             if (null != batchMessage && null != idList) {
                 for (String key : idList) {
-                    batchMessage.put(key, "不存在正态分布规则,请检查!");
+                    batchMessage.put(key, "涓嶅瓨鍦ㄦ�鎬佸垎甯冭�鍒欙紝璇锋�鏌ワ紒");
                 }
             }
         }
@@ -244,7 +287,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
     }
 
     /**
-     * 获取人员的等级组织分组
+     * 鑾峰彇浜哄憳鐨勭瓑绾х粍缁囧垎缁�
      *
      * @param ctx
      * @param entryList
@@ -260,7 +303,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
             JSONObject object = entryList.getJSONObject(i);
             String id =object.getString("id");
             String evaResult = object.getString("evaResult.id");
-            //修改后等级
+            //淇�敼鍚庣瓑绾�
             String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
             if(StringUtils.isBlank(auditGradeLevel)){
                 auditGradeLevel= object.getString("evaResult.gradeLevel");
@@ -277,7 +320,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
             String id =object.getString("id");
 
             String evaResult = object.getString("evaResult.id");
-            //修改后等级
+            //淇�敼鍚庣瓑绾�
             String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
             if(StringUtils.isBlank(auditGradeLevel)){
                 auditGradeLevel= object.getString("evaResult.gradeLevel");
@@ -294,7 +337,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
     }
 
     /**
-     * 根据上季度的组织等级,校验当前周期,当前考核计划,所选员工的所属组织的员工绩效等级分布校验
+     * 鏍规嵁涓婂�搴︾殑缁勭粐绛夌骇锛屾牎楠屽綋鍓嶅懆鏈燂紝褰撳墠鑰冩牳璁″垝锛屾墍閫夊憳宸ョ殑鎵€灞炵粍缁囩殑鍛樺伐缁╂晥绛夌骇鍒嗗竷鏍¢獙
      *
      * @param request
      * @param response
@@ -317,7 +360,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
             for (String id : ids.split(",")) {
                 idList.add(id);
             }
-            //明细数据
+            //鏄庣粏鏁版嵁
             JSONArray entryList = JSON.parseArray(entryData);
             StringBuilder planSql = new StringBuilder();
             planSql.append("select fid,CFPerobjectIdId from T_EVA_PerfPlan where fid=? and CFPerobjectIdId is not null ");
@@ -339,9 +382,9 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         idSet.remove(entry.getKey());
                     }
                 }
-                //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader);
+                //addBatchMessageSuccessTips(idSet,"楠岃瘉鎴愬姛",batchMessageTipsHeader);
             }
-            this.setSuccessMessage("验证成功");
+            this.setSuccessMessage("楠岃瘉鎴愬姛");
         } catch (Exception e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);
@@ -354,12 +397,12 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
         for (int i = 0; i < idList.size(); i++) {
             selParamId.append(",?");
         }
-        //获取正态分布规则
+        //鑾峰彇姝f€佸垎甯冭�鍒�
         Map<String, Map<String, BigDecimal>> personPerformMap = this.getProjectPerformPro(ctx, idList, batchMessage);
         if (null != personPerformMap && personPerformMap.size() > 0) {
-            //获取组织分组人数
+            //鑾峰彇缁勭粐鍒嗙粍浜烘暟
             //Map<String, Map<String, String>> orgLevelMap = this.getProjectLevelCountMap(ctx, period, planId,selParamId, idList);
-            //获取人员等级分组
+            //鑾峰彇浜哄憳绛夌骇鍒嗙粍
             Map<String, Map<String, Object>> personLevelMap = this.getPersonLevelLensMap(ctx,entryList);
 
 
@@ -368,14 +411,14 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                 JSONObject object = entryList.getJSONObject(i);
                 String fid =object.getString("id");
                 String evaResult = object.getString("evaResult.id");
-                //修改后等级
+                //淇�敼鍚庣瓑绾�
                 String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
                 if(StringUtils.isBlank(auditGradeLevel)){
                     auditGradeLevel= object.getString("evaResult.gradeLevel");
                 }
                 String revLevel = auditGradeLevel;
                 if (StrUtil.isBlank(auditGradeLevel)) {
-                    batchMessage.put(fid, "绩效等级为空,请维护");
+                    batchMessage.put(fid, "缁╂晥绛夌骇涓虹┖,璇风淮鎶�");
                     continue;
                 }
                 StringBuilder sel = new StringBuilder();
@@ -389,42 +432,42 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                 sel.append("') ");
                 IRowSet rs = DbUtil.executeQuery(ctx, sel.toString(), idList.toArray());
                 if (!rs.next()){
-                    batchMessage.put(fid, "绩效等级为空,请维护");
+                    batchMessage.put(fid, "缁╂晥绛夌骇涓虹┖,璇风淮鎶�");
                     continue;
                 }
                 String CFPROJECTNAME = rs.getString("CFPROJECTNAME");
 
                 if (StrUtil.isBlank(revLevel)) {
-                    //String msg = String.format("%s绩效等级为空", CFPROJECTNAME);
-                    batchMessage.put(fid, "绩效等级为空,请维护");
+                    //String msg = String.format("%s缁╂晥绛夌骇涓虹┖", CFPROJECTNAME);
+                    batchMessage.put(fid, "缁╂晥绛夌骇涓虹┖,璇风淮鎶�");
                     continue;
                 }
 
-                //项目绩效等级
+                //椤圭洰缁╂晥绛夌骇
                 String projectLevel = rs.getString("CFProjectLevel");
                 if (StrUtil.isBlank(projectLevel)) {
-                    String msg = String.format("%s项目绩效等级为空", CFPROJECTNAME);
+                    String msg = String.format("%s椤圭洰缁╂晥绛夌骇涓虹┖", CFPROJECTNAME);
                     batchMessage.put(fid, msg);
                     continue;
                 }
-                //该组织的组织绩效等级的正态分布
+                //璇ョ粍缁囩殑缁勭粐缁╂晥绛夌骇鐨勬�鎬佸垎甯�
                 Map<String, BigDecimal> personPerform = personPerformMap.get(projectLevel);
                 if (null == personPerform) {
-                    String msg = String.format("没有找到%s项目绩效等级%s的正态分布规则", CFPROJECTNAME, projectLevel);
+                    String msg = String.format("娌℃湁鎵惧埌%s椤圭洰缁╂晥绛夌骇%s鐨勬�鎬佸垎甯冭�鍒�", CFPROJECTNAME, projectLevel);
                     batchMessage.put(fid, msg);
                     continue;
                 }
-                //获取该组织下的人员总数
+                //鑾峰彇璇ョ粍缁囦笅鐨勪汉鍛樻€绘暟
                 //Map<String, String> orgMap = orgLevelMap.get(key);
-                //获取该组织下的人员各个绩效等级分组汇总
+                //鑾峰彇璇ョ粍缁囦笅鐨勪汉鍛樺悇涓�哗鏁堢瓑绾у垎缁勬眹鎬�
 //                String keyRevLevel = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel;
 //                Map<String, String> personMap = personLevelMap.get(keyRevLevel);
                 Map<String, BigDecimal> leveList = Maps.newHashMap();
 
-                //获取该组织下的人员总数
+                //鑾峰彇璇ョ粍缁囦笅鐨勪汉鍛樻€绘暟
                 //Map<String, String> orgMap = orgLevelMap.get(key);
 
-                //获取等级D人数
+                //鑾峰彇绛夌骇D浜烘暟
                 String keyRevLevelD =   "D";
                 Map<String, Object> personMapD = personLevelMap.get(keyRevLevelD);
                 BigDecimal dLens = BigDecimal.ZERO;
@@ -432,7 +475,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     dLens = (BigDecimal) personMapD.get("lens");
                     leveList.put("D", dLens);
                 }
-                //获取等级C人数
+                //鑾峰彇绛夌骇C浜烘暟
                 String keyRevLevelC =   "C";
                 Map<String, Object> personMapC = personLevelMap.get(keyRevLevelC);
                 BigDecimal cLens = BigDecimal.ZERO;
@@ -440,7 +483,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     cLens = (BigDecimal) personMapC.get("lens");
                     leveList.put("C", cLens);
                 }
-                //获取等级B人数
+                //鑾峰彇绛夌骇B浜烘暟
                 String keyRevLevelB =  "B";
                 Map<String, Object> personMapB = personLevelMap.get(keyRevLevelB);
                 BigDecimal bLens = BigDecimal.ZERO;
@@ -448,7 +491,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     bLens = (BigDecimal) personMapB.get("lens");
                     leveList.put("B", bLens);
                 }
-                //获取等级A人数
+                //鑾峰彇绛夌骇A浜烘暟
                 String keyRevLevelA =   "A";
                 Map<String, Object> personMapA = personLevelMap.get(keyRevLevelA);
                 BigDecimal aLens = BigDecimal.ZERO;
@@ -456,7 +499,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     aLens = (BigDecimal) personMapA.get("lens");
                     leveList.put("A", aLens);
                 }
-                //获取等级S人数
+                //鑾峰彇绛夌骇S浜烘暟
                 String keyRevLevelS =   "S";
                 Map<String, Object> personMapS = personLevelMap.get(keyRevLevelS);
                 BigDecimal sLens = BigDecimal.ZERO;
@@ -465,12 +508,12 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     leveList.put("S", sLens);
                 }
 
-                //总人数
+                //鎬讳汉鏁�
                 BigDecimal alls = new BigDecimal(idList.size());
 
-                //当前等级正态分布比例
+                //褰撳墠绛夌骇姝f€佸垎甯冩瘮渚�
                 BigDecimal scale = personPerform.get(revLevel);
-                //创建每个等级的人数列表
+                //鍒涘缓姣忎釜绛夌骇鐨勪汉鏁板垪琛�
                 Map<String, BigDecimal> bigsList = Maps.newHashMap();
                 BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
                 bigsList.put("S", bigS);
@@ -483,9 +526,9 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                 BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
                 bigsList.put("D", bigD);
 
-                //已占用数
+                //宸插崰鐢ㄦ暟
                 BigDecimal lens = BigDecimal.ZERO;
-                //进行额度加减
+                //杩涜�棰濆害鍔犲噺
 
                 BigDecimal personSize = BigDecimal.ZERO;
                 BigDecimal personMaxSize = BigDecimal.ZERO;
@@ -501,7 +544,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         } else {
                             personMaxSize = personMaxSize.add((bigA).subtract(aLens));
                         }
-                        ldrs.add("A最多%A人,");
+                        ldrs.add("A鏈€澶�%A浜猴紝");
                         //bigsList.remove("A");
                     case "S":
                         personSize = personSize.add(bigS).subtract(sLens);
@@ -511,7 +554,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         } else {
                             personMaxSize = personMaxSize.add((bigS).subtract(sLens));
                         }
-                        ldrs.add("S最多%S人,");
+                        ldrs.add("S鏈€澶�%S浜猴紝");
                         //bigsList.remove("S");
                     case "B":
                     case "C":
@@ -520,7 +563,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         } else {
                             personMinSize = personMinSize.add((bigC).subtract(cLens));
                         }
-                        ldrcd.put("C","C最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
+                        ldrcd.put("C","C鏈€灏�"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"浜猴紝");
                         //bigsList.remove("C");
                     case "D":
                         if ("D".equals(revLevel)) {
@@ -528,9 +571,9 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         } else {
                             personMinSize = personMinSize.add((bigD).subtract(dLens));
                         }
-                        ldrcd.put("D","D最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
+                        ldrcd.put("D","D鏈€灏�"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"浜猴紝");
                 }
-                String ld = "当前周期绩效等级为%l的人数为%maxs人,";
+                String ld = "褰撳墠鍛ㄦ湡缁╂晥绛夌骇涓�%l鐨勪汉鏁颁负%maxs浜�,";
                 if (personMinSize.compareTo(BigDecimal.ZERO) > 0 || personSize.compareTo(BigDecimal.ZERO) < 0) {
                     if(ldrs.size()>0) {
                         String ldrstr = ldrs.get(0);
@@ -545,7 +588,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         String ldr= entry.getValue();
                         ld += ldr;
                     }
-                    ld += "请修正后重新审核.";
+                    ld += "璇蜂慨姝e悗閲嶆柊瀹℃牳.";
                     batchMessage.put(fid, ld);
                 }
 
@@ -554,7 +597,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
         return batchMessage;
     }
     /**
-     * 结果直接审核、结果工作流审核,绩效等级分布比例校验人数由整个绩效考核计划的人数改为按选择的人数进行分布比例校验。
+     * 缁撴灉鐩存帴瀹℃牳銆佺粨鏋滃伐浣滄祦瀹℃牳锛岀哗鏁堢瓑绾у垎甯冩瘮渚嬫牎楠屼汉鏁扮敱鏁翠釜缁╂晥鑰冩牳璁″垝鐨勪汉鏁版敼涓烘寜閫夋嫨鐨勪汉鏁拌繘琛屽垎甯冩瘮渚嬫牎楠屻€�
      *
      * @param ctx
      * @param period
@@ -570,12 +613,12 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
         for (int i = 0; i < idList.size(); i++) {
             selParamId.append(",?");
         }
-        //获取正态分布规则
+        //鑾峰彇姝f€佸垎甯冭�鍒�
         Map<String, Map<String, BigDecimal>> personPerformMap = this.getPersonPerformPro(ctx, idList, batchMessage);
         if (null != personPerformMap && personPerformMap.size() > 0) {
-            //获取组织分组人数
+            //鑾峰彇缁勭粐鍒嗙粍浜烘暟
             //Map<String, Map<String, String>> orgLevelMap = this.getOrgLevelCountMap(ctx, period, planId);
-            //获取人员等级分组
+            //鑾峰彇浜哄憳绛夌骇鍒嗙粍
             Map<String, Map<String, Object>> personLevelMap = this.getPersonLevelLensMap(ctx, entryList);
 
             BigDecimal big100 = new BigDecimal(100);
@@ -583,13 +626,13 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                 JSONObject object = entryList.getJSONObject(i);
                 String fid = object.getString("id");
                 String evaResult = object.getString("evaResult.id");
-                //修改后等级
+                //淇�敼鍚庣瓑绾�
                 String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
                 if(StringUtils.isBlank(auditGradeLevel)){
                     auditGradeLevel= object.getString("evaResult.gradeLevel");
                 }
                 if (StrUtil.isBlank(auditGradeLevel)) {
-                    batchMessage.put(fid, "绩效等级为空,请维护");
+                    batchMessage.put(fid, "缁╂晥绛夌骇涓虹┖,璇风淮鎶�");
                     continue;
                 }
                 StringBuilder sel = new StringBuilder();
@@ -601,27 +644,27 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                 IRowSet rs = DbUtil.executeQuery(ctx, sel.toString());
                 String orgLevel="";
                 String FADMINORGNAME ="";
-                //上季度组织绩效等级
+                //涓婂�搴︾粍缁囩哗鏁堢瓑绾�
                 if (rs.next()){
                     orgLevel = rs.getString("CFOrgLevel");
                     FADMINORGNAME = rs.getString("FADMINORGNAME");
                     if (StringUtils.isBlank(orgLevel)) {
-                        String msg = String.format("%s上季度组织绩效等级为空", FADMINORGNAME);
+                        String msg = String.format("%s涓婂�搴︾粍缁囩哗鏁堢瓑绾т负绌�", FADMINORGNAME);
                         batchMessage.put(fid, msg);
                         continue;
                     }
                  }
-                //该组织的组织绩效等级的正态分布
+                //璇ョ粍缁囩殑缁勭粐缁╂晥绛夌骇鐨勬�鎬佸垎甯�
                 Map<String, BigDecimal> personPerform = personPerformMap.get(orgLevel);
                 if (null == personPerform) {
-                    String msg = String.format("没有找到%s上季度组织绩效等级%s的正态分布规则", FADMINORGNAME, orgLevel);
+                    String msg = String.format("娌℃湁鎵惧埌%s涓婂�搴︾粍缁囩哗鏁堢瓑绾�%s鐨勬�鎬佸垎甯冭�鍒�", FADMINORGNAME, orgLevel);
                     batchMessage.put(fid, msg);
                     continue;
                 }
-                //获取该组织下的人员总数
+                //鑾峰彇璇ョ粍缁囦笅鐨勪汉鍛樻€绘暟
                 //Map<String, String> orgMap = orgLevelMap.get(key);
                 Map<String, BigDecimal> leveList = Maps.newHashMap();
-                //获取等级D人数
+                //鑾峰彇绛夌骇D浜烘暟
                 String keyRevLevelD =   "D";
                 Map<String, Object> personMapD = personLevelMap.get(keyRevLevelD);
                 BigDecimal dLens = BigDecimal.ZERO;
@@ -629,7 +672,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     dLens = (BigDecimal) personMapD.get("lens");
                     leveList.put("D", dLens);
                 }
-                //获取等级C人数
+                //鑾峰彇绛夌骇C浜烘暟
                 String keyRevLevelC =  "C";
                 Map<String, Object> personMapC = personLevelMap.get(keyRevLevelC);
                 BigDecimal cLens = BigDecimal.ZERO;
@@ -637,7 +680,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     cLens = (BigDecimal) personMapC.get("lens");
                     leveList.put("C", cLens);
                 }
-                //获取等级B人数
+                //鑾峰彇绛夌骇B浜烘暟
                 String keyRevLevelB =  "B";
                 Map<String, Object> personMapB = personLevelMap.get(keyRevLevelB);
                 BigDecimal bLens = BigDecimal.ZERO;
@@ -645,7 +688,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     bLens = (BigDecimal) personMapB.get("lens");
                     leveList.put("B", bLens);
                 }
-                //获取等级A人数
+                //鑾峰彇绛夌骇A浜烘暟
                 String keyRevLevelA =   "A";
                 Map<String, Object> personMapA = personLevelMap.get(keyRevLevelA);
                 BigDecimal aLens = BigDecimal.ZERO;
@@ -653,7 +696,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     aLens = (BigDecimal) personMapA.get("lens");
                     leveList.put("A", aLens);
                 }
-                //获取等级S人数
+                //鑾峰彇绛夌骇S浜烘暟
                 String keyRevLevelS =  "S";
                 Map<String, Object> personMapS = personLevelMap.get(keyRevLevelS);
                 BigDecimal sLens = BigDecimal.ZERO;
@@ -662,12 +705,12 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                     leveList.put("S", sLens);
                 }
                 System.out.println("leveList:"+leveList);
-                //总人数
+                //鎬讳汉鏁�
                 BigDecimal alls = new BigDecimal(idList.size());
 
-                //当前等级正态分布比例
+                //褰撳墠绛夌骇姝f€佸垎甯冩瘮渚�
                 BigDecimal scale = personPerform.get(auditGradeLevel);
-                //创建每个等级的人数列表
+                //鍒涘缓姣忎釜绛夌骇鐨勪汉鏁板垪琛�
                 Map<String, BigDecimal> bigsList = Maps.newHashMap();
                 BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
                 bigsList.put("S", bigS);
@@ -680,9 +723,9 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                 BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
                 bigsList.put("D", bigD);
                 System.out.println("bigsList:"+bigsList);
-                //已占用数
+                //宸插崰鐢ㄦ暟
                 BigDecimal lens = BigDecimal.ZERO;
-                //进行额度加减
+                //杩涜�棰濆害鍔犲噺
                 //if ("S".equals(revLevel) || "A".equals(revLevel)||"B".equals(revLevel) || "C".equals(revLevel) || "D".equals(revLevel)) {
                 BigDecimal personSize = BigDecimal.ZERO;
                 BigDecimal personMaxSize = BigDecimal.ZERO;
@@ -698,7 +741,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         } else {
                             personMaxSize = personMaxSize.add((bigA).subtract(aLens));
                         }
-                        ldrs.add("A最多%A人,");
+                        ldrs.add("A鏈€澶�%A浜猴紝");
                         //bigsList.remove("A");
                     case "S":
                         personSize = personSize.add(bigS).subtract(sLens);
@@ -708,7 +751,7 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         } else {
                             personMaxSize = personMaxSize.add((bigS).subtract(sLens));
                         }
-                        ldrs.add("S最多%S人,");
+                        ldrs.add("S鏈€澶�%S浜猴紝");
                         //bigsList.remove("S");
                     case "B":
                     case "C":
@@ -717,20 +760,20 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         } else {
                             personMinSize = personMinSize.add((bigC).subtract(cLens));
                         }
-                        ldrcd.put("C","C最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
+                        ldrcd.put("C","C鏈€灏�"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"浜猴紝");
                         //bigsList.remove("C");
                     case "D":
 //                            if (bigD.compareTo(dLens) > 0) {
-//                                ldrcd.add("D最少" + bigD.toPlainString() + "人,");
+//                                ldrcd.add("D鏈€灏�" + bigD.toPlainString() + "浜猴紝");
 //                            }
                         if ("D".equals(auditGradeLevel)) {
                             personMinSize = personMinSize.add((bigD));
                         } else {
                             personMinSize = personMinSize.add((bigD).subtract(dLens));
                         }
-                        ldrcd.put("D","D最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
+                        ldrcd.put("D","D鏈€灏�"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"浜猴紝");
                 }
-                String ld = "当前周期绩效等级为%l的人数为%maxs人,";
+                String ld = "褰撳墠鍛ㄦ湡缁╂晥绛夌骇涓�%l鐨勪汉鏁颁负%maxs浜�,";
                 if (personMinSize.compareTo(BigDecimal.ZERO) > 0 || personSize.compareTo(BigDecimal.ZERO) < 0) {
                     if(ldrs.size()>0){
                         String ldrstr = ldrs.get(0);
@@ -745,11 +788,101 @@ public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntr
                         String ldr= entry.getValue();
                         ld += ldr;
                     }
-                    ld += "请修正后重新审核.";
+                    ld += "璇蜂慨姝e悗閲嶆柊瀹℃牳.";
                     batchMessage.put(fid, ld);
                 }
             }
         }
         return batchMessage;
     }
+
+    public void batchSaveReviseDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
+
+        Context ctx = SHRContext.getInstance().getContext();
+        String assignmentID = request.getParameter("assignmentID");
+        String billId = request.getParameter("billId");
+        if (!StringUtils.isEmpty(assignmentID) && !StringUtils.isEmpty(billId)) {
+            List evaResultIds = (List)Arrays.stream(billId.split(",")).collect(Collectors.toList());
+            try {
+                Map<String, Object> auditingNode = BOSWorkFlowUtil.isAuditingNode(ctx, assignmentID);
+                if (!"1".equals(auditingNode.get("isAuditing"))) {
+                    logger.error("current node is not auditing -- {}", StringUtils.defaultString(assignmentID));
+                    addBatchMessageTips(evaResultIds, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTREVISESCOREBYNOTAUDITING, ctx), batchMessageTipsHeader);
+                    return;
+                }
+            } catch (Exception var17) {
+                logger.error("", var17);
+                throw new ShrWebBizException(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTREVISESCOREBYNOTAUDITING, ctx));
+            }
+            String datas = request.getParameter("datas");
+            if (!StringUtils.isEmpty(datas)) {
+                List<HashMap> reviseDataList = JSONArray.parseArray(datas, HashMap.class);
+                Iterator var11 = reviseDataList.iterator();
+
+                while(var11.hasNext()) {
+                    HashMap map = (HashMap)var11.next();
+                    String id = (String)map.get("id");
+                    String id_id = (String)map.get("id_id");
+                    try {
+                        request.setAttribute("toRevisedId", id);
+                        request.setAttribute("reviseScore", map.get("reviseSumScore"));
+                        request.setAttribute("reviseLevel", map.get("reviseGradeLevel"));
+                        request.setAttribute("reviseReason", map.get("reviseReason"));
+                        Map<String, Object> saveReturnData = EvaResultSummaryBillUtil.saveReviseData(ctx, request, response, false, EvaResultSumLogSourceEnum.AUDITING);
+                        if ("500".equals(saveReturnData.get("result"))) {
+                            addBatchMessageTip(id, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVEFAILED, ctx), batchMessageTipsHeader);
+                        }
+                    } catch (SHRPerfWebException var15) {
+                        logger.error("saveReviseData is error", var15);
+                        addBatchMessageTip(id, var15.getMessage(), batchMessageTipsHeader);
+                    } catch (Exception var16) {
+                        logger.error("saveReviseData is error", var16);
+                        addBatchMessageTip(id, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVEFAILED, ctx), batchMessageTipsHeader);
+                    }
+                    try {
+                        request.setAttribute("toRevisedId", id);
+                        request.setAttribute("reviseScore", map.get("reviseSumScore"));
+                        request.setAttribute("reviseLevel", map.get("reviseGradeLevel"));
+                        request.setAttribute("reviseReason", map.get("reviseReason"));
+                        request.setAttribute("perCoefficient", map.get("perCoefficient"));
+                        String coefficient = "0";
+                        String perCoefficient = "0";
+                        String perMaxCoefficient = "0";
+                        String perMinCoefficient = "0";
+                        if(map.get("coefficient") instanceof BigDecimal){
+                            coefficient =  ((BigDecimal) map.get("coefficient")).toPlainString();
+                        } else {
+                            coefficient = map.get("coefficient").toString();
+                        }
+                        if(map.get("perCoefficient") instanceof BigDecimal){
+                            perCoefficient =  ((BigDecimal) map.get("perCoefficient")).toPlainString();
+                        } else {
+                            perCoefficient = map.get("perCoefficient").toString();
+                        }
+                        if(map.get("perMaxCoefficient") instanceof BigDecimal){
+                            perMaxCoefficient =  ((BigDecimal) map.get("perMaxCoefficient")).toPlainString();
+                        } else {
+                            perMaxCoefficient = map.get("perMaxCoefficient").toString();
+                        }
+                        if(map.get("perMinCoefficient") instanceof BigDecimal){
+                            perMinCoefficient =  ((BigDecimal) map.get("perMinCoefficient")).toPlainString();
+                        } else {
+                            perMinCoefficient = map.get("perMinCoefficient").toString();
+                        }
+                        if(null!=perCoefficient) {
+                            DbUtil.execute(ctx, "update T_EVA_EvaResultSummary set CFPERMAXCOEFFICIENT='"+perMaxCoefficient
+                                    +"', CFPerMinCoefficient='"+perMinCoefficient +"', CFperCoefficient='" + perCoefficient
+                                    +"', CFcoefficient='"+coefficient+"' where fid = '" + id + "'");
+                        }
+                    } catch (Exception var16) {
+                        logger.error("saveReviseData is error", var16);
+                        //addBatchMessageTip(id, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVEFAILED, ctx), batchMessageTipsHeader);
+                    }
+                }
+            }
+
+        } else {
+            logger.error("assignmentID is null or billId is null");
+        }
+    }
 }

+ 1 - 0
websrc/com/kingdee/eas/hr/perf/handler/PerfEvaluObjectListHandlerEx.java

@@ -248,6 +248,7 @@ public class PerfEvaluObjectListHandlerEx extends PerfEvaluObjectListHandler {
      * @param modelMap
      * @throws SHRWebException
      */
+
     public void checkCansetPerfRelationTypeAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
         perfGoalsWorkListHandler p = new perfGoalsWorkListHandler();
         p.checkCansetPerfRelationTypeAction(request,response,modelMap);

+ 56 - 7
websrc/com/kingdee/eas/hr/perf/handler/PerfGoalsListHandlerEx.java

@@ -5,35 +5,48 @@ import com.kingdee.bos.Context;
 import com.kingdee.bos.dao.IObjectValue;
 import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
 import com.kingdee.eas.common.EASBizException;
+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.perfweb.app.base.evalplan.IPerfPlan;
-import com.kingdee.shr.perfweb.app.base.evalplan.PerfPlanFactory;
-import com.kingdee.shr.perfweb.app.base.evalplan.PerfPlanInfo;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.util.NetCtrlHelper;
+import com.kingdee.shr.perfweb.app.base.evalplan.*;
+import com.kingdee.shr.perfweb.app.base.evalrule.PerformanceRuleInfo;
+import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
 import com.kingdee.shr.perfweb.planexecute.handler.PerfGoalsListHandler;
+import com.kingdee.shr.perfweb.util.PerfRuleSettingUtil;
+import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
+import com.kingdee.shr.perfweb.utils.CommonValidDataUtils;
+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.util.Map;
+import java.util.*;
 
 /**
  * @author qingwu
  * @date 2025/3/3
- * @apiNote  目标填报下达
+ * @apiNote 鐩�爣濉�姤涓嬭揪
  */
 public class PerfGoalsListHandlerEx extends PerfGoalsListHandler {
+    private static Logger logger = LoggerFactory.getLogger(PerfGoalsListHandlerEx.class);
+
     @Override
     protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map<String, Object> initData) throws SHRWebException {
         super.setInitData(request, response, modelMap, initData);
         Context ctx = SHRContext.getInstance().getContext();
         Map<String, Object> custom_params = (Map<String, Object>) initData.get("custom_params");
-        //考核周期
+        //鑰冩牳鍛ㄦ湡
         String perfPlanId = (String) custom_params.get("perfPlanId");
         try {
             IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx);
             PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId));
-            IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");//项目id
+            IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");//椤圭洰id
             initData.put("perobjectId", perobject);
         } catch (BOSException e) {
             throw new RuntimeException(e);
@@ -41,4 +54,40 @@ public class PerfGoalsListHandlerEx extends PerfGoalsListHandler {
             throw new RuntimeException(e);
         }
     }
+
+    public void batchTransmitAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
+        super.batchTransmitAction(request, response, modelMap, batchMessageTipsHeader);
+        Context ctx = SHRContext.getInstance().getContext();
+        String transmitType = request.getParameter("transmitType");
+        String billId = (String) request.getAttribute("billId");
+        String msgTempID = request.getParameter("msgTempID");
+        String smsType = request.getParameter("smsType");
+        String emailType = request.getParameter("emailType");
+        String portalType = request.getParameter("portalType");
+        String yzjMsgType = request.getParameter("yzjMsgType");
+        Set<String> billIds = new HashSet();
+        billIds.addAll(Arrays.asList(billId.split(",")));
+        List<String> ids = new ArrayList();
+        ids.addAll(billIds);
+
+        boolean isDirectlyTransmit = "1".equals(transmitType);
+        if (isDirectlyTransmit) {
+            String period = request.getParameter("period");
+            for (String id : billIds) {
+                for (BatchMessageTipsBody body : batchMessageTipsHeader.getResult()) {
+                    if (id.equals(body.getId())&&Boolean.FALSE.equals(body.isMuitTipsState())) {
+                        ids.remove(id);
+                    }
+                }
+            }
+            for (String id : ids) {
+                try {
+                    GoalsTargetFacadeFactory.getLocalInstance(ctx).batchGoalsTransmit(id, period);
+                } catch (Exception var45) {
+                    logger.error("", var45);
+                } finally {
+                }
+            }
+        }
+    }
 }

+ 3 - 6
websrc/com/kingdee/eas/hr/perf/handler/perfGoalsWorkListHandlerEx.java

@@ -33,6 +33,7 @@ import java.util.*;
  * @date 2025/3/3
  * @apiNote 员工考核计划执行—目标考核评估
  */
+
 public class perfGoalsWorkListHandlerEx extends perfGoalsWorkListHandler {
     @Override
     protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map<String, Object> initData) throws SHRWebException {
@@ -85,13 +86,11 @@ public class perfGoalsWorkListHandlerEx extends perfGoalsWorkListHandler {
 
         return idList;
     }
-
     public void startEvaTaskCheckBefAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
         try {
             String period = request.getParameter("period");
-
-            String areaBase ="XpebMP4VRlmvZa3uIWF2WYqoXbM=";
             Context ctx = this.getContext();
+            Set<String> areaBases = AreaBaseConfig.getAreaBases(ctx);
 
             Map<String, Set<String>> evaObjWorkFlowMap = new HashMap();
             Map<String, Set<String>> evaObjAreaMap = new HashMap();
@@ -110,7 +109,7 @@ public class perfGoalsWorkListHandlerEx extends perfGoalsWorkListHandler {
             evaObjIds.addAll(idList);
             FilterInfo filterInfo = new FilterInfo();
             filterInfo.getFilterItems().add(new FilterItemInfo("evaObj.id", evaObjIds, CompareType.INCLUDE));
-            filterInfo.getFilterItems().add(new FilterItemInfo("areaBase.id", areaBase, CompareType.EQUALS));
+            filterInfo.getFilterItems().add(new FilterItemInfo("areaBase.id", areaBases, CompareType.INCLUDE));
             filterInfo.getFilterItems().add(new FilterItemInfo("perfPeriod.id", period, CompareType.EQUALS));
             filterInfo.getFilterItems().add(new FilterItemInfo(" grade is null "));
             filterInfo.getFilterItems().add(new FilterItemInfo(" isnull(weight,0)>0 "));
@@ -170,6 +169,4 @@ public class perfGoalsWorkListHandlerEx extends perfGoalsWorkListHandler {
             e.printStackTrace();
         }
     }
-
-
 }

+ 127 - 5
websrc/com/kingdee/eas/hr/perf/osf/WholeCommentOSFService.java

@@ -1,15 +1,24 @@
 package com.kingdee.eas.hr.perf.osf;
 
+import com.google.common.collect.Maps;
 import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
 import com.kingdee.bos.bsf.service.app.IHRMsfService;
+import com.kingdee.bos.rabbitmq.guava.Lists;
 import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.hr.perf.handler.AreaBaseConfig;
+import com.kingdee.eas.hr.perf.handler.EvaResultSummaryManagerListHandlerExEx;
 import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
+import org.apache.commons.lang3.StringUtils;
 
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
- * 考核结果管理列表新增显示“整体评价评语”(取最终等级的整体评价评语)
+ * 鑰冩牳缁撴灉绠$悊鍒楄〃鏂板�鏄剧ず鈥滄暣浣撹瘎浠疯瘎璇�€濓紙鍙栨渶缁堢瓑绾х殑鏁翠綋璇勪环璇勮�锛�
  * description: WholeCommentOSFService <br>
  * date: 2025/6/18 15:32 <br>
  * author: lhbj <br>
@@ -18,7 +27,91 @@ import java.util.Map;
 public class WholeCommentOSFService implements IHRMsfService {
     @Override
     public Object process(Context context, Map<String, Object> map) throws EASBizException, BOSException {
+
+        try {
+            System.out.println("WholeCommentOSFService:wholeComment");
+            this.wholeComment(context,map);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BOSException(e);
+        }
         try {
+            EvaResultSummaryManagerListHandlerExEx exEx = new EvaResultSummaryManagerListHandlerExEx();
+            //鑾峰彇涓婂�搴︾粍缁囩瓑绾ф壒閲�
+            try {
+                List<String> idList = Lists.newArrayList();
+                StringBuffer sql = new StringBuffer();
+                sql.append(" select ers.fid from ");
+                sql.append(" T_EVA_EvaResultSummary ers ");
+                sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid ");
+                sql.append(" where ers.FBILLSTATE in (0,1,2) ");
+                System.out.println("WholeCommentOSFService:bindDep:sql:"+sql);
+                IRowSet rs = DbUtil.executeQuery(context, sql.toString());
+                while (rs.next()){
+                    idList.add(rs.getString("fid"));
+                }
+                System.out.println("WholeCommentOSFService:bindDep:idList:"+idList);
+                exEx.bindDep(context, StringUtils.join(idList,","));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            try {
+                List<String> idList = Lists.newArrayList();
+                StringBuffer sql = new StringBuffer();
+                sql.append(" select ers.fid from ");
+                sql.append(" T_EVA_EvaResultSummary ers ");
+                sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid ");
+                sql.append(" where ers.FBILLSTATE  in (0,1,2) ");
+                System.out.println("WholeCommentOSFService:bindProject:sql:"+sql);
+                IRowSet rs = DbUtil.executeQuery(context, sql.toString());
+                while (rs.next()){
+                    idList.add(rs.getString("fid"));
+                }
+                System.out.println("WholeCommentOSFService:bindProject:idList:"+idList);
+                exEx.bindProject(context, StringUtils.join(idList,","));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            //鑾峰彇缁╂晥绯绘暟
+            try {
+                Map<String,List<String>> maps = Maps.newHashMap();
+
+                StringBuilder sqlsel = new StringBuilder();
+                sqlsel.append(" select fid,FPeriodID,FEvaPlanID from T_EVA_EvaResultSummary where FBILLSTATE in (0,1,2) ");
+                System.out.println("WholeCommentOSFService:performanceLevel:sqlsel:"+sqlsel);
+                IRowSet rs = DbUtil.executeQuery(context, sqlsel.toString());
+                while (rs.next()) {
+                    String fid = rs.getString("fid");
+                    String FPeriodID = rs.getString("FPeriodID");
+                    String FEvaPlanID = rs.getString("FEvaPlanID");
+                    String key = FEvaPlanID+","+FPeriodID;
+                    List<String> ids =maps.get(key);
+                    if(null==ids){
+                        ids=Lists.newArrayList();
+                        maps.put(key,ids);
+                    }
+                    ids.add(fid);
+                }
+                System.out.println("WholeCommentOSFService:performanceLevel:maps:"+maps);
+                for (Map.Entry<String,List<String>> entry : maps.entrySet()){
+                    List<String> idList = entry.getValue();
+                    String[] keys = entry.getKey().split(",");
+                    String planId=keys[0];
+                    String period=keys[1];
+                    exEx.performanceLevel(context,idList,planId,period, new BatchMessageTipsHeader());
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "ok";
+    }
+
+    public Object wholeComment(Context context, Map<String, Object> map) throws Exception {
+        try {
+            Set<String> areaBases = AreaBaseConfig.getAreaBases(context);
             String sql =
                     "UPDATE T_EVA_EvaResultSummary SET CFWholeComment = (select to_char(wc.FCOMMENT) FCOMMENT from T_EVA_GradeTaskNodeInst gtni left join T_EVA_WFNodeDef wnf on wnf.fid = gtni.FWFNODEID left join T_PEF_WholeComment wc on wc.FGRADETASKNODEINSTID=gtni.fid where wnf.FISFINALGRADE=1 and wc.FCOMMENT is not null and T_EVA_EvaResultSummary.FEVAOBJID = gtni.FEVAOBJID) WHERE EXISTS (select to_char(wc.FCOMMENT) FCOMMENT from T_EVA_GradeTaskNodeInst gtni left join T_EVA_WFNodeDef wnf on wnf.fid = gtni.FWFNODEID left join T_PEF_WholeComment wc on wc.FGRADETASKNODEINSTID=gtni.fid where wnf.FISFINALGRADE=1 and wc.FCOMMENT is not null and T_EVA_EvaResultSummary.FEVAOBJID = gtni.FEVAOBJID)";
             DbUtil.execute(context, sql);
@@ -29,7 +122,14 @@ public class WholeCommentOSFService implements IHRMsfService {
             sql1.append(" FROM T_EVA_IndicatorTarget it ");
             sql1.append(" LEFT JOIN T_EVA_IndicatorExtendHelper ith ON it.FEXTENDID = ith.fid ");
             sql1.append(" WHERE ith.FEXTEND3 IS NOT NULL ");
-            sql1.append(" AND it.FNAME_L2 LIKE '%跨部门协作%' ");
+            //sql1.append(" AND it.FNAME_L2 LIKE '%璺ㄩ儴闂ㄥ崗浣�%' ");
+            sql1.append(" AND FAREABASEID in('' ");
+            for (String abid : areaBases) {
+                sql1.append(",'");
+                sql1.append(abid);
+                sql1.append("'");
+            }
+            sql1.append(" ) ");
             sql1.append(" AND T_EVA_EvaResultSummary.FEVAOBJID = it.FEVAOBJID  ");
             sql1.append(" ) ");
             sql1.append("  WHERE T_EVA_EvaResultSummary.FEVAOBJID IN ( ");
@@ -37,8 +137,15 @@ public class WholeCommentOSFService implements IHRMsfService {
             sql1.append(" FROM T_EVA_IndicatorTarget it ");
             sql1.append("  LEFT JOIN T_EVA_IndicatorExtendHelper ith ON it.FEXTENDID = ith.fid ");
             sql1.append("  WHERE ith.FEXTEND3 IS NOT NULL ");
-            sql1.append("  AND it.FNAME_L2 LIKE '%跨部门协作%' ");
+            sql1.append(" AND FAREABASEID in('' ");
+            for (String abid : areaBases) {
+                sql1.append(",'");
+                sql1.append(abid);
+                sql1.append("'");
+            }
+            sql1.append(" ) ");
             sql1.append(" ) ");
+            System.out.println("WholeCommentOSFService:wholeComment:sql1:"+sql1);
             DbUtil.execute(context, sql1.toString());
             StringBuilder sql2 = new StringBuilder();
             sql2.append(" /*dialect*/UPDATE T_EVA_EvaResultSummary ");
@@ -47,7 +154,13 @@ public class WholeCommentOSFService implements IHRMsfService {
             sql2.append("  FROM T_EVA_IndicatorTarget it ");
             sql2.append("  LEFT JOIN T_EVA_IndicatorExtendHelper ith ON it.FEXTENDID = ith.fid ");
             sql2.append("   WHERE ith.FEXTEND3 IS NOT NULL ");
-            sql2.append("  AND it.FNAME_L2 LIKE '%跨部门协作%' ");
+            sql1.append(" AND FAREABASEID in('' ");
+            for (String abid : areaBases) {
+                sql1.append(",'");
+                sql1.append(abid);
+                sql1.append("'");
+            }
+            sql1.append(" ) ");
             sql2.append("  AND T_EVA_EvaResultSummary.FEVAOBJID = it.FEVAOBJID  ");
             sql2.append(" ) ");
             sql2.append("    WHERE T_EVA_EvaResultSummary.FEVAOBJID IN ( ");
@@ -55,8 +168,15 @@ public class WholeCommentOSFService implements IHRMsfService {
             sql2.append("   FROM T_EVA_IndicatorTarget it ");
             sql2.append("   LEFT JOIN T_EVA_IndicatorExtendHelper ith ON it.FEXTENDID = ith.fid ");
             sql2.append("   WHERE ith.FEXTEND3 IS NOT NULL ");
-            sql2.append("   AND it.FNAME_L2 LIKE '%跨部门协作%' ");
+            sql1.append(" AND FAREABASEID in('' ");
+            for (String abid : areaBases) {
+                sql1.append(",'");
+                sql1.append(abid);
+                sql1.append("'");
+            }
+            sql1.append(" ) ");
             sql2.append(" ) ");
+            System.out.println("WholeCommentOSFService:wholeComment:sql2:"+sql2);
             DbUtil.execute(context, sql2.toString());
         } catch (Exception e) {
             e.printStackTrace();
@@ -64,4 +184,6 @@ public class WholeCommentOSFService implements IHRMsfService {
         }
         return "ok";
     }
+
+
 }

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini