chenmingliang 3 місяців тому
батько
коміт
157b936d6c

+ 602 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/EvaResultSummaryManager4OrgListHandlerEx.java

@@ -0,0 +1,602 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseCollection;
+import com.kingdee.eas.hr.perf.PerformanceMiddleCollection;
+import com.kingdee.eas.hr.perf.PerformanceMiddleFactory;
+import com.kingdee.eas.hr.perf.PerformanceMiddleInfo;
+import com.kingdee.eas.hr.perf.app.documentType;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
+import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.perfweb.app.base.evalplan.*;
+import com.kingdee.shr.perfweb.app.base.evalrule.WFNodeDefInfo;
+import com.kingdee.shr.perfweb.app.base.indecator.PerfIndecatorCollection;
+import com.kingdee.shr.perfweb.app.base.indecator.PerfIndecatorFactory;
+import com.kingdee.shr.perfweb.app.common.YesOrNoEnum;
+import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
+import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
+import com.kingdee.shr.perfweb.app.workflow.*;
+import com.kingdee.shr.perfweb.bean.PerfScoreBatchSaveBean;
+import com.kingdee.shr.perfweb.bean.PerfScoreBean;
+import com.kingdee.shr.perfweb.bean.PerfScoreList;
+import com.kingdee.shr.perfweb.planexecute.handler.EvaResultSummaryManager4OrgListHandler;
+import com.kingdee.shr.perfweb.util.GetEntityInfoUtils;
+import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
+import com.kingdee.shr.perfweb.util.ServerResponseConst;
+import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.util.*;
+
+/**
+ * @Description 组织考核计划考核结果管理
+ * @Date 2024/12/26 15:34
+ * @Created by 30489
+ */
+public class EvaResultSummaryManager4OrgListHandlerEx extends EvaResultSummaryManager4OrgListHandler {
+    private static Logger logger = Logger.getLogger("com.kingdee.eas.custom.performanceScoring.handler.EvaResultSummaryManager4OrgListHandlerEx");
+
+    private Properties propt = new Properties();
+    public EvaResultSummaryManager4OrgListHandlerEx() {
+        try {
+            this.propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/hty/configuration.properties"));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 获取组织满意度
+     * 1、获取考核周期下 评估对象
+     * 2、根据评估对象 获取 评估节点,运行实例 用于 拼装  List<PerfScoreList>
+     * 3、根据评估对象 生成 绩效中间表(新增,更新,删除)
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     * @throws SQLException
+     */
+    public void getSubmitScoreClickEventAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, EASBizException, SQLException {
+        boolean mark = false;
+        Context ctx = SHRContext.getInstance().getContext();
+        //
+        String satisfactionNumber = propt.getProperty("satisfactionNumber");//指标编码
+        PerfIndecatorCollection perfIndecatorCollection = PerfIndecatorFactory.getLocalInstance(ctx).getPerfIndecatorCollection("where number = '"+satisfactionNumber+"'");
+        if (perfIndecatorCollection.size() ==0){
+            throw new ShrWebBizException("未找到配置指标编码:"+satisfactionNumber+",请检查!");
+        }
+        Map<String, Object> res = new HashMap();
+        String periodId = request.getParameter("id");//考核周期id
+        BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
+        String billIds = "";
+        int success = 0;
+        int failure = 0;
+        //组织绩效结果
+        OrgEvaResultSummaryCollection orgEvaResultSummaryCollection = OrgEvaResultSummaryFactory.getLocalInstance(ctx).
+                getOrgEvaResultSummaryCollection("where period = '"+periodId+"'");
+        List<PerfScoreList> perfScoreListAll = new ArrayList<PerfScoreList>();
+        CoreBaseCollection coreBaseCollectionUpdate = new CoreBaseCollection();
+        CoreBaseCollection coreBaseCollectionSave = new CoreBaseCollection();
+        //存储获取组织满意度前 总分和等级
+        Map<String, String> perMap = new HashMap<String, String>();
+
+        for (int i = 0; i < orgEvaResultSummaryCollection.size(); i++) {
+            List<PerfScoreBean> scoreList = new ArrayList<PerfScoreBean>();
+            PerfScoreList perfScoreList = new PerfScoreList();
+            OrgEvaResultSummaryInfo info = orgEvaResultSummaryCollection.get(i);
+            String billId = info.getId().toString();
+            billIds += billId + ",";
+            BatchMessageTipsBody body = new BatchMessageTipsBody();
+            body.setId(billId);
+            PerfEvaObjectInfo evaObj = info.getEvaObj();//评估对象
+            String orgNumber = info.getAdminOrgNumber();
+            double sumScore = info.getSumScore();//总分
+            String gradeLevel = info.getGradeLevel();//总分
+            perMap.put(orgNumber ,sumScore + "," + gradeLevel);//存储获取组织满意度前 总分和等级
+            String evaObjId = evaObj.getId().toString(); //评估对象id
+
+            String getTargetDataSql = getTargetDataSql(evaObjId,satisfactionNumber); // 获取 评估节点,运行实例
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, getTargetDataSql);
+            int index = 0 ;
+            Map<String, Object> mapSum = new HashMap<String, Object>();
+            Map<String, Object> middleMap = new HashMap<String, Object>();
+            BigDecimal addSum = BigDecimal.ZERO;
+            BigDecimal subtractSum = BigDecimal.ZERO;
+            if (iRowSet.size() == 0){
+                throw new ShrWebBizException("该考核周期未查询含有组织满意度的节点实列,请联系系统管理员!");
+            }
+            while (iRowSet.next()){
+                PerfScoreBean perfScoreBean = new PerfScoreBean();
+                String score = iRowSet.getString("score") != null ? iRowSet.getString("score") : "0";
+                BigDecimal scoreBig = BigDecimal.valueOf(Double.valueOf(score)); //实例得分
+                String targetId = iRowSet.getString("targetId");//指标关联id
+                String evaName = iRowSet.getString("evaName");//指标名称
+                String nodEvaId = iRowSet.getString("nodEvaId");//评估对象id
+                String nodeId = iRowSet.getString("nodeId");//任务节点id
+                String nodeScore = iRowSet.getString("nodeScore");//任务节点总分
+                String nodeGrade = iRowSet.getString("nodeGrade");//任务节点等级
+                String orgId = iRowSet.getString("orgId");//组织id
+
+                perfScoreBean.setScoreOrRate("0");
+                if (index == 0){
+                    ++success;
+                    getScoringSumData(periodId,ctx,mapSum,orgId);
+                    getMiddleData(ctx, periodId,orgId,middleMap);
+                }
+                index ++;
+                boolean flaySum = (boolean) mapSum.get("flaySum");// 组织满意度 true 有对应数据
+                boolean flay = (boolean) middleMap.get("flay");// 绩效中间表 true 有对应数据
+                if (!flaySum){
+                    mark = true;
+                }
+
+//                if (!(flaySum || flay)){  //组织满意度 绩效中间表都没查询到数据
+//                    throw new ShrWebBizException("未找到该考核周期的考核结果满意度得分!");
+//                }
+                addSum = (BigDecimal)mapSum.get("addSum"); //组织满意度 加分
+                subtractSum = (BigDecimal)mapSum.get("subtractSum");//组织满意度 减分
+                if (flay){ //有
+                    BigDecimal plusesScore = (BigDecimal) middleMap.get("addSum");//绩效中间表 加分
+                    BigDecimal seducedScore = (BigDecimal) middleMap.get("subtractSum");//绩效中间表 减分
+                    if ("加分项".equals(evaName)){
+                        perfScoreBean.setScore(String.valueOf(scoreBig.subtract(plusesScore).add(addSum)));
+                    }else {
+                        if (scoreBig.compareTo(BigDecimal.ZERO) == 0 ){
+                            perfScoreBean.setScore(String.valueOf(scoreBig.add(subtractSum)));
+                        }else {
+                            perfScoreBean.setScore(String.valueOf(scoreBig.subtract(seducedScore).add(subtractSum)));
+                        }
+                    }
+                }else {
+                    if ("加分项".equals(evaName)){
+                        perfScoreBean.setScore(String.valueOf(addSum.add(scoreBig)));
+                    }else {
+                        perfScoreBean.setScore(String.valueOf(subtractSum.add(scoreBig)));
+                    }
+                }
+                body.setMuitTipsState(Boolean.TRUE);
+                body.setMuitTipsMessage("获取成功!组织满意度加分为" + addSum +";组织满意度减分为" + subtractSum);
+                batchMessageTipsHeader.addResult(body);
+                perfScoreBean.setNodeGrade("0");
+                perfScoreBean.setComment("0");
+                perfScoreBean.setActValue("0");
+                perfScoreBean.setTargetVale("0");
+                perfScoreBean.setTargetVale("0");
+                perfScoreBean.setDescription("0");
+                perfScoreBean.setIndicatorId(targetId + "Itag0");
+                perfScoreBean.setExtendInfo(new HashMap<String, Map<String, String>>());
+                scoreList.add(perfScoreBean);
+                perfScoreList.setEvaObj(nodEvaId);
+                perfScoreList.setGradeTaskNode(nodeId);
+                perfScoreList.setWholeGrade(nodeGrade);
+                perfScoreList.setSumScore(nodeScore);
+            }
+            perfScoreList.setIsEditGrade("1");
+            perfScoreList.setNeedScore("1");
+            perfScoreList.setWholeComment("wesfwertwe");
+            perfScoreList.setScoreList(scoreList);
+            perfScoreListAll.add(perfScoreList);
+
+        }
+        //为系统保存 、提交标准代码
+        String isRealSave = null;
+        if (CollectionUtils.isEmpty(perfScoreListAll)) {
+            JSONUtils.writeJson(response, res);
+        } else {
+            for (int i = 0; i < perfScoreListAll.size(); i++) {
+                String evaObj = ((PerfScoreList)perfScoreListAll.get(i)).getEvaObj();
+                PerfEvaObjectInfo info = GetEntityInfoUtils.getPerfEvaObjectInfo(ctx, evaObj);
+                Set<String> nodeTask = new HashSet();
+                Map<String, String> nodeScore = new HashMap();
+                List<PerfScoreList> normalScoreList = new ArrayList();
+                List<PerfScoreBatchSaveBean> sumScoreList = new ArrayList();
+                Iterator var16 = perfScoreListAll.iterator();
+
+                while(var16.hasNext()) {
+                    PerfScoreList pl = (PerfScoreList)var16.next();
+                    PerfScoreBatchSaveBean bean = new PerfScoreBatchSaveBean();
+                    bean.setGradeTaskNodeInstID(pl.getGradeTaskNode());
+                    bean.setWholeComment(pl.getWholeComment());
+                    bean.setNodeGrade(pl.getWholeGrade());
+                    bean.setNodeSumScore(pl.getSumScore());
+                    bean.setEvaObj(pl.getEvaObj());
+                    if ("3".equals(pl.getNeedScore())) {
+                        sumScoreList.add(bean);
+                    } else {
+                        normalScoreList.add(pl);
+                    }
+                }
+
+                String saveStatus;
+                Map map;
+                if (sumScoreList.size() > 0) {
+                    IPerfWorkFlowFacade iPerfWorkFlowFacade = PerfWorkFlowFacadeFactory.getLocalInstance(ctx);
+                    map = iPerfWorkFlowFacade.saveNodeSumScoreAndGrade(sumScoreList);
+                    String msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVESUCCESS, ctx);
+                    if (map.get("code").toString().equalsIgnoreCase(ServerResponseConst.SUCCESS)) {
+                        res.put("result", "200");
+                    } else {
+                        res.put("result", "500");
+                        saveStatus = map.get("code").toString();
+                        if (ServerResponseConst.FAILED.equals(saveStatus)) {
+                            msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.ALLHASSCOREFORMULAR, ctx);
+                        } else if ("400".equals(saveStatus)) {
+                            msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OVERSUMRANGE, ctx);
+                        } else if ("999".equals(saveStatus)) {
+                            msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.LESSTHANQUANTITYS, ctx);
+                        } else if ("LESSLOWLIMIT".equals(saveStatus)) {
+                            msg = (new SHRPerfWebBizException(SHRPerfWebBizException.SCOREOVERMIN2)).getMessage();
+                        } else if (ServerResponseConst.INVALID.equals(saveStatus)) {
+                            msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CHANGEHANDLER, ctx);
+                        }
+                    }
+
+                    res.put("msg", msg);
+                    res.put("maxCanPut", map.get("maxCanPut"));
+                    res.put("gradetaskNode", sumScoreList);
+                    res.put("nodeSumScore", ((PerfScoreBatchSaveBean)sumScoreList.get(0)).getNodeSumScore());
+                    res.put("nodeGrade", ((PerfScoreBatchSaveBean)sumScoreList.get(0)).getNodeGrade());
+                    res.put("detail", "");
+                    if ("500".equals(res.get("result"))) {
+                        JSONUtils.writeJson(response, res);
+                        return;
+                    }
+                }
+
+                if (normalScoreList.size() > 0) {
+                    PerfWorkFlowFacadeControllerBean.getInstance().calculateAndSaveScore(ctx, normalScoreList, res, isRealSave, nodeTask, nodeScore);
+                }
+
+                StringBuffer msgInfo = new StringBuffer("");
+                if (info.getCanAdjustEvaluer().getValue() == 1) {
+                    try {
+                        map = this.getAreaBaseNameByNodeTaskInst(nodeTask, evaObj);
+                        Iterator<String> it = nodeScore.keySet().iterator();
+
+                        while(it.hasNext()) {
+                            saveStatus = (String)it.next();
+                            String[] grade = ((String)nodeScore.get(saveStatus)).split("#");
+                            String areaName = (String)map.get(saveStatus);
+                            GradeTaskNodeInstInfo gtnInfo = GetEntityInfoUtils.getGradeTaskNodeInstInfoById(ctx, saveStatus);
+                            WFNodeDefInfo wfNodeInfo = GetEntityInfoUtils.getWFNodeDefInfo(ctx, gtnInfo.getWfNode().getId().toString());
+                            if (grade.length > 1) {
+                                msgInfo.append(areaName);
+                                if (!wfNodeInfo.getNeedScore().getValue().equals("0")) {
+                                    msgInfo.append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SCOREIS, ctx)).append(":").append(grade[0]).append(",");
+                                }
+
+                                if (wfNodeInfo.getPerfGradeEvaluate().getValue().equals("1")) {
+                                    msgInfo.append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.GRADEIS, ctx)).append(":").append(grade[1]).append(",");
+                                }
+                            } else {
+                                String gradeStr = "";
+                                if (grade.length > 0) {
+                                    gradeStr = grade[0];
+                                }
+
+                                msgInfo.append(areaName).append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SCOREIS, ctx)).append(":").append(gradeStr);
+                                if (wfNodeInfo.getPerfGradeEvaluate().getValue().equals("1")) {
+                                    msgInfo.append(",").append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.GRADEIS, ctx)).append(":");
+                                }
+                            }
+                        }
+                    } catch (BOSException var25) {
+                        logger.error("", var25);
+                    }
+                }
+                res.put("detail", msgInfo.toString());
+                PerfScoreList scoreList = (PerfScoreList)perfScoreListAll.get(i);
+                String gradeTaskNodeId = scoreList.getGradeTaskNode();
+                GradeTaskNodeInstInfo gradeTaskNodeInstInfo = GetEntityInfoUtils.getGradeTaskNodeInstInfoById(ctx, gradeTaskNodeId);
+                String scoreStatus = "1";
+                if (gradeTaskNodeInstInfo != null) {
+                    if (gradeTaskNodeInstInfo.getScoreStatus() != null) {
+                        scoreStatus = gradeTaskNodeInstInfo.getScoreStatus().getValue();
+                    }
+                    PerfWorkFlowFacadeControllerBean.getInstance().submitScore(ctx, scoreList);
+                }
+
+            }
+
+            // 生成绩效中间表
+            Map<String, String> map = new HashMap<String, String>();
+            getPerData(ctx,periodId,map);//获取绩效汇总整个周期下数据,返回map,以分录id为key
+            logger.error("EvaResultSummaryManager4OrgListHandlerExEvaResultSummaryManager4OrgListHandlerEx");
+            logger.error(map);
+            for (String orgNumber : perMap.keySet()) {
+                String value = perMap.get(orgNumber);
+                String[] split1 = value.split(",");
+                String value0 = split1[0];//原总分
+                String value1 = split1[1];//原等级
+                //中间表
+                PerformanceMiddleCollection performanceMiddleCollection = PerformanceMiddleFactory.getLocalInstance(ctx).
+                        getPerformanceMiddleCollection("select *,orgDep.number,orgDep.id where orgDep.number = '" + orgNumber + "' and perfPlan = '"+periodId+"'");
+
+                if (performanceMiddleCollection.size() > 0 ){
+                    for (int i = 0; i < performanceMiddleCollection.size(); i++) {
+                        PerformanceMiddleInfo performanceMiddleInfo = performanceMiddleCollection.get(i);
+                        String sourceBillId = performanceMiddleInfo.getSourceBillId(); // 绩效汇总分录id
+                        String valueStr = map.get(sourceBillId);
+                        if (valueStr != null){
+                            String[] split = valueStr.split(",");
+                            String s0 = split[0];//考核周期id
+                            String s1 = split[1];//员工id
+                            String s2 = split[2];// 部门id
+                            String s3 = split[3];//
+                            String s4 = split[4];//考核结果等级
+                            performanceMiddleInfo.setFraction(BigDecimal.valueOf(Double.valueOf(s3)));
+                            performanceMiddleInfo.setOriginalfraction(BigDecimal.valueOf(Double.valueOf(value0)));
+                            performanceMiddleInfo.setOriginalgrade(value1);
+                            performanceMiddleInfo.setGrade(s4);
+                            coreBaseCollectionUpdate.add(performanceMiddleInfo);
+                        }else {//绩效汇总无审批通过数据时
+                            PerformanceMiddleFactory.getLocalInstance(ctx).delete(new ObjectUuidPK(performanceMiddleInfo.getId()));
+                        }
+                    }
+                }else {
+                    for (String key : map.keySet()) {
+                        PerformanceMiddleInfo performanceMiddleInfo = new PerformanceMiddleInfo();
+                        String mapValue = map.get(key);
+                        String[] split = mapValue.split(",");
+                        String s5 = split[5];//部门编码
+                        if (s5.equals(orgNumber)){
+                            String s0 = split[0];//考核周期id
+                            String s1 = split[1];//员工id
+                            String s2 = split[2];// 部门id
+                            String s3 = split[3];//分录加减分
+                            String s4 = split[4];//考核结果等级
+                            String s6 = split[6];//原id
+                            String s7 = split[7];//考核名称
+                            PerfPeriodInfo perfPeriodInfo = new PerfPeriodInfo();
+                            perfPeriodInfo.setId(BOSUuid.read(s0));
+                            performanceMiddleInfo.setPerfPlan(perfPeriodInfo);
+                            PersonInfo personInfo = new PersonInfo();
+                            personInfo.setId(BOSUuid.read(s1));
+                            performanceMiddleInfo.setPerson(personInfo);
+                            AdminOrgUnitInfo adminOrgUnitInfo = new AdminOrgUnitInfo();
+                            adminOrgUnitInfo.setId(BOSUuid.read(s2));
+                            performanceMiddleInfo.setOrgDep(adminOrgUnitInfo);
+                            performanceMiddleInfo.setType(documentType.Satisfaction);
+                            performanceMiddleInfo.setSourceBillId(s6);
+                            performanceMiddleInfo.setFraction(BigDecimal.valueOf(Double.valueOf(s3)));
+                            performanceMiddleInfo.setOriginalfraction(BigDecimal.valueOf(Double.valueOf(value0)));
+                            performanceMiddleInfo.setOriginalgrade(value1);
+                            performanceMiddleInfo.setGrade(s4);
+                            performanceMiddleInfo.setPerformance(s7);
+                            coreBaseCollectionSave.add(performanceMiddleInfo);
+                        }
+                    }
+                }
+            }
+            if (mark){
+                throw new ShrWebBizException("找不到对应的绩效评分汇总单据,请检查!");
+            }
+            PerformanceMiddleFactory.getLocalInstance(ctx).updateBatchData(coreBaseCollectionUpdate);
+            PerformanceMiddleFactory.getLocalInstance(ctx).saveBatchData(coreBaseCollectionSave);
+            //JSONUtils.writeJson(response, res);
+            billIds = billIds.substring(0, billIds.length() - 1);
+            batchMessageTipsHeader.setBillId(billIds);
+            batchMessageTipsHeader.setFailureCount(failure);
+            batchMessageTipsHeader.setSuccessCount(success);
+            this.writeSuccessData(batchMessageTipsHeader);
+
+        }
+    }
+
+    public Map<String, String> getAreaBaseNameByNodeTaskInst(Set nodeTakSet, String evaObj) throws BOSException {
+        Context ctx = SHRContext.getInstance().getContext();
+        Map<String, String> map = new HashMap();
+        GradeTargetInstCollection coll = GetEntityInfoUtils.getGradeTargetInstCollectionByNodeInst(ctx, nodeTakSet, evaObj);
+        Set<String> exist = new HashSet();
+
+        for(int i = 0; i < coll.size(); ++i) {
+            if (map.get(coll.get(i).getGradeTaskNode().getId().toString()) != null) {
+                if (!exist.contains(coll.get(i).getAreaBase().getId().toString()) && coll.get(i).getEvaObj().getCanAdjustEvaluer().getValue() != 0) {
+                    String areaName = (String)map.get(coll.get(i).getGradeTaskNode().getId().toString());
+                    areaName = areaName + "," + coll.get(i).getAreaBase().getName();
+                    map.put(coll.get(i).getGradeTaskNode().getId().toString(), areaName);
+                    exist.add(coll.get(i).getAreaBase().getId().toString());
+                }
+            } else if (coll.get(i).getEvaObj().getCanAdjustEvaluer().getValue() == 0) {
+                map.put(coll.get(i).getGradeTaskNode().getId().toString(), "");
+            } else {
+                map.put(coll.get(i).getGradeTaskNode().getId().toString(), coll.get(i).getAreaBase().getName());
+                exist.add(coll.get(i).getAreaBase().getId().toString());
+            }
+        }
+
+        GradeTaskNodeInstCollection nodecoll = GetEntityInfoUtils.getGradeTaskNodeInstCollByEvaObj(ctx, evaObj);
+        PerfEvaObjectInfo evaInfo = GetEntityInfoUtils.getPerfEvaObjectInfo(ctx, evaObj);
+        PerfEvaObjMatrixWorkFlowInstCollection matriInfotColl = PerfEvaObjMatrixWorkFlowInstFactory.getLocalInstance(ctx).getPerfEvaObjMatrixWorkFlowInstCollection("select *, areaBase.name where evaObj ='" + evaObj + "'");
+        PerfPeriodInfo perfPeriod = evaInfo.getPeriod();
+        String perfPlanId = perfPeriod.getPerfPlan().getId().toString();
+        String perfRuleId = perfPeriod.getPerfRule().getId().toString();
+        YesOrNoEnum isHistoryUpdate = perfPeriod.getIsHistoryUpdate();
+        PerfEvaObjectMatrixWorkFlowCollection matriWorkFlow = null;
+        matriWorkFlow = PerfEvaObjectMatrixWorkFlowFactory.getLocalInstance(ctx).getPerfEvaObjectMatrixWorkFlowCollection("select *, areaBase.name where perfplan = '" + perfPlanId + "' and perfRule = '" + perfRuleId + "'");
+        if (matriWorkFlow.isEmpty() && isHistoryUpdate.getValue() == 1) {
+            matriWorkFlow = PerfEvaObjectMatrixWorkFlowFactory.getLocalInstance(ctx).getPerfEvaObjectMatrixWorkFlowCollection("select *, areaBase.name where perfplan = '" + perfPlanId + "' and perfRule is null");
+        }
+
+        Map<String, String> worfFlowAreaMap = new HashMap();
+
+        int i;
+        for(i = 0; i < matriInfotColl.size(); ++i) {
+            PerfEvaObjMatrixWorkFlowInstInfo matriInfo = matriInfotColl.get(i);
+            if (org.apache.commons.lang3.StringUtils.isEmpty((CharSequence)worfFlowAreaMap.get(matriInfo.getWorkflow().getId().toString()))) {
+                worfFlowAreaMap.put(matriInfo.getWorkflow().getId().toString(), matriInfo.getAreaBase().getName());
+            }
+        }
+
+        for(i = 0; i < matriWorkFlow.size(); ++i) {
+            PerfEvaObjectMatrixWorkFlowInfo matriWorkFlowInfo = matriWorkFlow.get(i);
+            if (org.apache.commons.lang3.StringUtils.isEmpty((CharSequence)worfFlowAreaMap.get(matriWorkFlowInfo.getWorkflow().getId().toString()))) {
+                worfFlowAreaMap.put(matriWorkFlowInfo.getWorkflow().getId().toString(), matriWorkFlowInfo.getAreaBase().getName());
+            }
+        }
+
+        for(i = 0; i < nodecoll.size(); ++i) {
+            GradeTaskNodeInstInfo info = nodecoll.get(i);
+            if (org.apache.commons.lang3.StringUtils.isEmpty((CharSequence)map.get(info.getId().toString()))) {
+                String workFlowId = info.getWfNode().getWorkflow().getId().toString();
+                map.put(info.getId().toString(), worfFlowAreaMap.get(workFlowId));
+            }
+        }
+
+        return map;
+    }
+
+
+    /**
+     *  获取评估节点,运行实例
+     * @param evaObjId 评估对象
+     * @return
+     */
+    public String getTargetDataSql(String evaObjId,String satisfactionNumber){
+        StringBuilder sql = new StringBuilder();
+        sql.append("SELECT").append("\n");
+        sql.append("inst.FTARGETSCORE score,").append("\n");
+        sql.append("ind.fid targetId,").append("\n");
+        sql.append("eva.FNAME_L2 evaName,").append("\n");
+        sql.append("node.FEVAOBJID nodEvaId,").append("\n");
+        sql.append("node.fid nodeId,").append("\n");
+        sql.append("node.FNODESUMSCORE nodeScore,").append("\n");
+        sql.append("node.FNODEGRADE nodeGrade,").append("\n");
+        sql.append("org.fid orgId").append("\n");
+        sql.append("from T_EVA_GradeTaskNodeInst node").append("\n");
+        sql.append("left join T_EVA_GradeTargetInst inst on node.fid = inst.FGRADETASKNODEID").append("\n");
+        sql.append("left join T_EVA_IndicatorTarget ind on ind.fid = inst.FTARGET").append("\n");
+        sql.append("left join T_PEF_PerfIndecator per on per.fid = ind.FINDECATOR").append("\n");
+        sql.append("left join T_EVA_EvaluFormAreaBase eva on eva.fid = inst.FAREABASEID").append("\n");
+        sql.append("left join T_EVA_PerfEvaObject obj on obj.fid = node.FEVAOBJID").append("\n");
+        sql.append("left join T_org_admin org on org.fid = obj.FEVALUORGADMINID").append("\n");
+        sql.append("where node.FEVAOBJID = '"+evaObjId+"' and FWFLEVEL = (select max(FWFLEVEL) from T_EVA_GradeTaskNodeInst) and per.Fnumber = '"+satisfactionNumber+"'\n").append("\n");//and ind.FNAME_L1 = '组织满意度'
+        return sql.toString();
+    }
+
+
+    public void getPerData(Context ctx,String periodId,Map<String, String> map) throws BOSException, SQLException {
+        StringBuilder sql = new StringBuilder();
+        sql.append("SELECT").append("\n");
+        sql.append("ind.CFPERFORAPPRAISALI perfPlan,").append("\n");
+        sql.append("sse.CFCHARGEDEPPERSONI personId,").append("\n");
+        sql.append("sse.CFFIRSTDEPID depId,").append("\n");
+        sql.append("org.Fnumber depNumber,").append("\n");
+        sql.append("sse.fid id,").append("\n");
+        sql.append("sse.CFADDMULTIPLYPART fraction,").append("\n");
+        sql.append("eva.FSUMSCORE,eva.FGRADELEVEL,eva.FPNAME").append("\n");
+        sql.append("FROM CT_PF_PerformanceScoringSum ind").append("\n");
+        sql.append("left join CT_PF_PerformanceSSE sse on sse.FPARENTID = ind.fid ").append("\n");
+        sql.append("left join T_org_admin org on org.fid = sse.CFFIRSTDEPID ").append("\n");
+        sql.append("left join T_EVA_OrgEvaResultSummary eva on eva.FPERIODID = ind.CFPERFORAPPRAISALI").append("\n");
+        sql.append("where ind.CFPERFORAPPRAISALI = '"+periodId+"' and ind.FBILLSTATE = 3").append("\n");
+        IRowSet iRowSet = DbUtil.executeQuery(ctx, sql.toString());
+
+        while (iRowSet.next()){
+            String perfPlan = iRowSet.getString("perfPlan");//考核周期id
+            String personId = iRowSet.getString("personId");//员工id
+            String depId = iRowSet.getString("depId"); // 部门id
+            String depNumber = iRowSet.getString("depNumber");//部门编码
+            String id = iRowSet.getString("id");// 绩效分录id
+            String fraction = iRowSet.getString("fraction");//分录加减分
+            String sumScore = iRowSet.getString("FSUMSCORE");//考核结果分数
+            String gradeLevel = iRowSet.getString("FGRADELEVEL");//考核结果等级
+            String pName = iRowSet.getString("FPNAME");//考核名称
+            map.put(id, perfPlan+","+personId+","+depId+","+fraction + "," + gradeLevel + "," + depNumber + "," + id + "," + pName);
+        }
+
+
+    }
+
+    /**
+     * 考核结果满意度得分
+     * @param periodId
+     * @param ctx
+     * @param mapSum
+     * @throws SQLException
+     * @throws BOSException
+     * @throws ShrWebBizException
+     */
+    public void getScoringSumData(String periodId,Context ctx,Map<String, Object> mapSum,String orgId) throws SQLException, BOSException, ShrWebBizException {
+        StringBuilder sql = new StringBuilder();
+        sql.append("SELECT").append("\n");
+        sql.append("CFADDMULTIPLYPART sum").append("\n");
+        sql.append("FROM CT_PF_PerformanceScoringSum per").append("\n");
+        //sql.append("left join CT_PF_PerformanceScoringSum per on eva.FPERIODID = per.CFPERFORAPPRAISALI").append("\n");
+        sql.append("left join CT_PF_PerformanceSSE sse on sse.FPARENTID = per.fid").append("\n");
+        sql.append("left join T_org_admin org on org.fid = sse.CFFIRSTDEPID").append("\n");
+        sql.append("where per.CFPERFORAPPRAISALI = '"+periodId+"' and org.fid = '"+orgId+"' and per.FBILLSTATE = 3").append("\n");
+        IRowSet iRowSet = DbUtil.executeQuery(ctx, sql.toString());
+        boolean flaySum = false;
+        BigDecimal addSum = BigDecimal.ZERO;
+        BigDecimal subtractSum = BigDecimal.ZERO;
+        while (iRowSet.next()){
+            flaySum = true;
+            BigDecimal sum = iRowSet.getBigDecimal("sum");
+            if (sum.compareTo(BigDecimal.ZERO) >0){
+                addSum = addSum.add(sum);
+            }else {
+                subtractSum = subtractSum.add(sum);
+            }
+        }
+        mapSum.put("addSum",addSum);
+        mapSum.put("subtractSum",subtractSum);
+        mapSum.put("flaySum",flaySum);
+    }
+
+    /**
+     * 绩效中间
+     * @param ctx
+     * @param periodId 考核周期id
+     * @param depId
+     * @param map
+     * @return
+     * @throws BOSException
+     */
+    public Map<String, Object> getMiddleData(Context ctx,String periodId,String depId,Map<String, Object> map) throws BOSException {
+        PerformanceMiddleCollection performanceMiddleCollection = PerformanceMiddleFactory.getLocalInstance(ctx).
+                getPerformanceMiddleCollection("where perfPlan = '" + periodId + "' and orgDep = '"+depId+"'");
+        BigDecimal addSum = BigDecimal.ZERO;
+        BigDecimal subtractSum = BigDecimal.ZERO;
+        boolean flay = false;
+        for (int i = 0; i < performanceMiddleCollection.size(); i++) {
+            flay = true;
+            PerformanceMiddleInfo performanceMiddleInfo = performanceMiddleCollection.get(i);
+            BigDecimal fraction = performanceMiddleInfo.getFraction();
+            if (fraction.compareTo(BigDecimal.ZERO) >0){
+                addSum = addSum.add(fraction);
+            }else {
+                subtractSum = subtractSum.add(fraction);
+            }
+        }
+        map.put("addSum",addSum);
+        map.put("subtractSum",subtractSum);
+        map.put("flay",flay);
+        return map;
+    }
+
+
+
+}

+ 665 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/EvaResultSummaryManagerListHandlerEx.java

@@ -0,0 +1,665 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.aliyun.odps.utils.StringUtils;
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.orm.ORMCoreException;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseCollection;
+import com.kingdee.eas.hr.ats.AtsUtil;
+import com.kingdee.eas.hr.perf.*;
+import com.kingdee.eas.hr.perf.app.documentType;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.perfweb.app.base.evalplan.*;
+import com.kingdee.shr.perfweb.app.base.evalrule.WFNodeDefInfo;
+import com.kingdee.shr.perfweb.app.base.indecator.PerfIndecatorCollection;
+import com.kingdee.shr.perfweb.app.base.indecator.PerfIndecatorFactory;
+import com.kingdee.shr.perfweb.app.common.YesOrNoEnum;
+import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
+import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
+import com.kingdee.shr.perfweb.app.workflow.*;
+import com.kingdee.shr.perfweb.bean.PerfScoreBatchSaveBean;
+import com.kingdee.shr.perfweb.bean.PerfScoreBean;
+import com.kingdee.shr.perfweb.bean.PerfScoreList;
+import com.kingdee.shr.perfweb.planexecute.handler.EvaResultSummaryManagerListHandler;
+import com.kingdee.shr.perfweb.util.GetEntityInfoUtils;
+import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
+import com.kingdee.shr.perfweb.util.ServerResponseConst;
+import com.kingdee.util.DateTimeUtils;
+import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
+import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
+
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.sql.SQLException;
+import java.util.*;
+
+/**
+ * @Description TODO
+ * @Date 2025/1/6 17:43
+ * @Created by 30489
+ */
+public class EvaResultSummaryManagerListHandlerEx extends EvaResultSummaryManagerListHandler {
+
+    private static Logger logger = Logger.getLogger(EvaResultSummaryManagerListHandlerEx.class);
+
+    private Properties propt = new Properties();
+    public EvaResultSummaryManagerListHandlerEx() {
+        try {
+            this.propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/hty/configuration.properties"));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 跨部门协作
+     *  1、
+     *
+     *
+     *
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     */
+
+    public void getSpanDepCollaborateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)  {
+        //
+        System.out.println("getSpanDepCollaborateAction");
+        try {
+            Context ctx = SHRContext.getInstance().getContext();
+            String periodId = request.getParameter("id");//考核周期id
+            String departmentalNumber = propt.getProperty("departmentalNumber");//指标编码
+            PerfIndecatorCollection perfIndecatorCollection = PerfIndecatorFactory.getLocalInstance(ctx).getPerfIndecatorCollection("where number = '" + departmentalNumber + "'");
+            if (perfIndecatorCollection.size() ==0){
+                throw new ShrWebBizException("未找到配置指标编码"+departmentalNumber+",请检查!");
+            }
+            PerfPeriodInfo perfPeriodInfo = PerfPeriodFactory.getLocalInstance(ctx).getPerfPeriodInfo("where id = '" + periodId + "'");//考核周期
+            Date pStartDate = perfPeriodInfo.getPStartDate();
+            Date pEndDate = perfPeriodInfo.getPEndDate();
+            String start = DateTimeUtils.format(pStartDate, "yyyy-MM-dd");
+            String end = DateTimeUtils.format(pEndDate, "yyyy-MM-dd");
+
+            Map<String, BigDecimal> mapPerson = new HashMap<>();
+            Map<String, BigDecimal> mapTwoPro = new HashMap<>();
+            Map<String, BigDecimal> mapOnePro = new HashMap<>();
+            //个人
+            String sqlPerson = "SELECT CFPERSONID,CFPERPOJECTSUM FROM CT_PF_PerformanProjectPerson where  to_char(CFSTARTDATE, 'yyyy-mm-dd') >= '"+start+"' and to_char(CFENDDATE, 'yyyy-mm-dd') <= '"+end+"' and FBILLSTATE = '3'";
+            IRowSet rowSetPerson = DbUtil.executeQuery(ctx, sqlPerson.toString());
+            while (rowSetPerson.next()){
+                String resultId = rowSetPerson.getString("CFPERSONID");
+                BigDecimal orgTypeName = rowSetPerson.getBigDecimal("CFPERPOJECTSUM");
+                mapPerson.put(resultId,orgTypeName);
+            }
+            //二级
+            String sqlTwo = "SELECT CFPERSONID,CFPERPOJECTSUM FROM CT_HR_PerformanProjectTwo where  to_char(CFSTARTDATE, 'yyyy-mm-dd') >= '"+start+"' and to_char(CFENDDATE, 'yyyy-mm-dd') <= '"+end+"' and FBILLSTATE = '3'";
+            IRowSet rowSetTwo = DbUtil.executeQuery(ctx, sqlTwo.toString());
+            while (rowSetTwo.next()){
+                String resultId = rowSetTwo.getString("CFPERSONID");
+                BigDecimal orgTypeName = rowSetTwo.getBigDecimal("CFPERPOJECTSUM");
+                mapTwoPro.put(resultId,orgTypeName);
+            }
+
+            //一级
+            String sqlOne = "SELECT CFPERSONID,CFPERPOJECTSUM FROM CT_HR_PerformanProjectOne where  to_char(CFSTARTDATE, 'yyyy-mm-dd') >= '"+start+"' and to_char(CFENDDATE, 'yyyy-mm-dd') <= '"+end+"' and FBILLSTATE = '3'";
+            IRowSet rowSetOne = DbUtil.executeQuery(ctx, sqlOne.toString());
+            while (rowSetOne.next()){
+                String resultId = rowSetOne.getString("CFPERSONID");
+                BigDecimal orgTypeName = rowSetOne.getBigDecimal("CFPERPOJECTSUM");
+                mapOnePro.put(resultId,orgTypeName);
+            }
+
+            if (mapPerson.size() == 0 && mapOnePro.size() == 0 && mapTwoPro.size() == 0){
+                throw new ShrWebBizException("该考核周期未查询含有跨部门协助记录,请检查!");
+            }
+
+            StringBuffer sql = new StringBuffer();
+            sql.append("SELECT").append("\n");
+            sql.append("sum.fid resultId,").append("\n");
+            sql.append("isnull(type.fname_l2,'个人') orgTypeName").append("\n");
+            sql.append("FROM T_EVA_EvaResultSummary sum").append("\n");
+            sql.append("left join T_org_admin admin on admin.FRESPONPOSITIONID = sum.FPOSITIONID").append("\n");
+            sql.append("left join T_Org_LayerType type on type.fid = admin.FLAYERTYPEID").append("\n");
+            sql.append("where sum.FPERIODID = '"+periodId+"' and sum.FSUMSCORE is not null ").append("\n");//sum.FSUMSCORE is not null
+            IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
+            Map<String, String> mapOrgType = new HashMap<>();
+            while (rs.next()){
+                String resultId = rs.getString("resultId");
+                String orgTypeName = rs.getString("orgTypeName");
+                mapOrgType.put(resultId,orgTypeName);
+            }
+
+            BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
+            int success = 0;
+            int failure = 0;
+            String billIds = "";
+            EvaResultSummaryCollection evaResultSummaryCollection = EvaResultSummaryFactory.getLocalInstance(ctx).
+                    getEvaResultSummaryCollection("select *,evaPlan.* where period = '" + periodId + "' and sumScore is not null"); //审批状态
+            CoreBaseCollection collectionSave = new CoreBaseCollection();
+            List<PerfScoreList> perfScoreListAll = new ArrayList<PerfScoreList>();
+
+
+            System.out.println("getSpanDepCollaborateActionevaResultSummaryCollection" + evaResultSummaryCollection.size());
+            Map<String, String> oldMap = new HashMap<>();
+            Map<String, BigDecimal> scoreMap = new HashMap<>();
+            Set<String> set = new HashSet<>();
+            for (int i = 0; i < evaResultSummaryCollection.size(); i++) {
+                List<PerfScoreBean> scoreList = new ArrayList<PerfScoreBean>();
+                PerfScoreList perfScoreList = new PerfScoreList();
+                EvaResultSummaryInfo evaResultSummaryInfo = evaResultSummaryCollection.get(i);
+                String billId = evaResultSummaryInfo.getId().toString();
+                billIds += billId + ",";
+                BatchMessageTipsBody body = new BatchMessageTipsBody();
+                body.setId(billId);
+                String evaObjId = evaResultSummaryInfo.getEvaObj().getId().toString();//评估对象
+                String personId = evaResultSummaryInfo.getPerson().getId().toString();
+                String oldSumScore = (String)evaResultSummaryInfo.get("oldSumScore");//原跨部门协助得分
+                PerfPlanInfo evaPlan = evaResultSummaryInfo.getEvaPlan();
+                IObjectValue object = (IObjectValue)evaPlan.get("perobjectId");
+                // 原始得分 等级
+                double sumScore = evaResultSummaryInfo.getSumScore();
+                String gradeLevel = evaResultSummaryInfo.getGradeLevel();
+                oldMap.put(billId,sumScore+","+gradeLevel);
+                if (object != null){
+                    ++failure;
+                    body.setMuitTipsState(Boolean.FALSE);
+                    body.setMuitTipsMessage("跨部门只应用于个人绩效");
+                    batchMessageTipsHeader.addResult(body);
+                    set.add(billId);
+                    evaResultSummaryInfo.put("depCoefficient","");
+                    collectionSave.add(evaResultSummaryInfo);
+                    continue;
+                }
+                String OrgTypeName = mapOrgType.get(billId);//是否负责人(一级,二级 个人)
+                BigDecimal perPojectSum = BigDecimal.ZERO;
+                if ("一级部门".equals(OrgTypeName)){
+                    if (mapOnePro.get(personId)!=null){
+                        perPojectSum = mapOnePro.get(personId);
+                    }
+                }else if ("二级部门".equals(OrgTypeName)){
+                    if (mapTwoPro.get(personId)!=null){
+                        perPojectSum = mapTwoPro.get(personId);
+                    }
+                }else if ("个人".equals(OrgTypeName)){
+                    if (mapPerson.get(personId)!=null){
+                        perPojectSum = mapPerson.get(personId);
+                    }
+                }else {
+                    //理论上不会到这里
+                }
+                if (perPojectSum.compareTo(BigDecimal.ZERO) == 0){
+                    ++failure;
+                    body.setMuitTipsState(Boolean.FALSE);
+                    body.setMuitTipsMessage("未找到评估对象的跨部门协作系数");
+                    batchMessageTipsHeader.addResult(body);
+                    set.add(billId);
+                    if (StringUtils.isNotBlank(oldSumScore)){
+                        evaResultSummaryInfo.put("depCoefficient","");
+                        collectionSave.add(evaResultSummaryInfo);
+                    }
+                    continue;
+                }
+
+                String getTargetDataSql = getTargetDataSql(evaObjId,departmentalNumber);
+                IRowSet iRowSet = DbUtil.executeQuery(ctx, getTargetDataSql);
+                if (iRowSet.size() == 0){
+                    throw new ShrWebBizException("该考核周期未查询含有跨部门协助的节点实列,请检查!");
+                }
+                while (iRowSet.next()){
+                    PerfScoreBean perfScoreBean = new PerfScoreBean();
+                    String score = iRowSet.getString("score") != null ? iRowSet.getString("score") : "0";
+                    BigDecimal scoreBig = BigDecimal.valueOf(Double.valueOf(score)); //跨部门协助实例得分
+                    String targetId = iRowSet.getString("targetId");//指标关联id
+                    String evaName = iRowSet.getString("evaName");//指标名称
+                    String nodEvaId = iRowSet.getString("nodEvaId");//评估对象id
+                    String nodeId = iRowSet.getString("nodeId");//任务节点id
+                    String nodeScore = iRowSet.getString("nodeScore");//任务节点总分
+                    String nodeGrade = iRowSet.getString("nodeGrade");//任务节点等级
+                    evaResultSummaryInfo.put("depCoefficient",perPojectSum);
+                    if (StringUtils.isNotBlank(oldSumScore)){
+                        scoreBig = BigDecimal.valueOf(Double.valueOf(oldSumScore));
+                    }else {
+                        evaResultSummaryInfo.put("oldSumScore",scoreBig);
+                    }
+                    BigDecimal multiply = scoreBig.add(perPojectSum);//最终得分
+                    ++success;
+                    scoreMap.put(billId,scoreBig);
+                    body.setMuitTipsState(Boolean.TRUE);
+                    body.setMuitTipsMessage("获取成功!原跨部门协助得分为" + scoreBig +";跨部门协助系数为" + perPojectSum);
+                    batchMessageTipsHeader.addResult(body);
+                    perfScoreBean.setScoreOrRate("0");
+                    perfScoreBean.setScore(String.valueOf(multiply));
+                    perfScoreBean.setNodeGrade("0");
+                    perfScoreBean.setComment("0");
+                    perfScoreBean.setActValue("0");
+                    perfScoreBean.setTargetVale("0");
+                    perfScoreBean.setTargetVale("0");
+                    perfScoreBean.setDescription("0");
+                    perfScoreBean.setIndicatorId(targetId + "Itag0");
+                    perfScoreBean.setExtendInfo(new HashMap<String, Map<String, String>>());
+                    scoreList.add(perfScoreBean);
+                    perfScoreList.setEvaObj(nodEvaId);
+                    perfScoreList.setGradeTaskNode(nodeId);
+                    perfScoreList.setWholeGrade(nodeGrade);
+                    perfScoreList.setSumScore(nodeScore);
+                }
+                collectionSave.add(evaResultSummaryInfo);
+                perfScoreList.setIsEditGrade("1");
+                perfScoreList.setNeedScore("1");
+                perfScoreList.setScoreList(scoreList);
+                perfScoreListAll.add(perfScoreList);
+
+            }
+
+            EvaResultSummaryFactory.getLocalInstance(ctx).saveBatchData(collectionSave);
+
+
+            Map<String, Object> res = new HashMap();
+            //为系统保存 、提交标准代码
+            String isRealSave = null;
+            if (CollectionUtils.isEmpty(perfScoreListAll)) {
+                PerformanceMiddleCollection performanceMiddleCollection = PerformanceMiddleFactory.getLocalInstance(ctx).
+                        getPerformanceMiddleCollection("where sourceBillId in(" + AtsUtil.convertSetToString(set) + ")");
+                for (int i = 0; i < performanceMiddleCollection.size(); i++) {
+                    PerformanceMiddleInfo performanceMiddleInfo = performanceMiddleCollection.get(i);
+                    PerformanceMiddleFactory.getLocalInstance(ctx).delete(new ObjectUuidPK(performanceMiddleInfo.getId()));
+                }
+
+                billIds = billIds.substring(0, billIds.length() - 1);
+                batchMessageTipsHeader.setBillId(billIds);
+                batchMessageTipsHeader.setFailureCount(failure);
+                batchMessageTipsHeader.setSuccessCount(success);
+                this.writeSuccessData(batchMessageTipsHeader);
+                //JSONUtils.writeJson(response, res);
+            } else {
+                for (int i = 0; i < perfScoreListAll.size(); i++) {
+                    String evaObj = ((PerfScoreList)perfScoreListAll.get(i)).getEvaObj();
+                    PerfEvaObjectInfo info = GetEntityInfoUtils.getPerfEvaObjectInfo(ctx, evaObj);
+                    Set<String> nodeTask = new HashSet();
+                    Map<String, String> nodeScore = new HashMap();
+                    List<PerfScoreList> normalScoreList = new ArrayList();
+                    List<PerfScoreBatchSaveBean> sumScoreList = new ArrayList();
+                    Iterator var16 = perfScoreListAll.iterator();
+
+                    while(var16.hasNext()) {
+                        PerfScoreList pl = (PerfScoreList)var16.next();
+                        PerfScoreBatchSaveBean bean = new PerfScoreBatchSaveBean();
+                        bean.setGradeTaskNodeInstID(pl.getGradeTaskNode());
+                        bean.setWholeComment(pl.getWholeComment());
+                        bean.setNodeGrade(pl.getWholeGrade());
+                        bean.setNodeSumScore(pl.getSumScore());
+                        bean.setEvaObj(pl.getEvaObj());
+                        if ("3".equals(pl.getNeedScore())) {
+                            sumScoreList.add(bean);
+                        } else {
+                            normalScoreList.add(pl);
+                        }
+                    }
+
+                    String saveStatus;
+                    Map map;
+                    if (sumScoreList.size() > 0) {
+                        IPerfWorkFlowFacade iPerfWorkFlowFacade = PerfWorkFlowFacadeFactory.getLocalInstance(ctx);
+                        map = iPerfWorkFlowFacade.saveNodeSumScoreAndGrade(sumScoreList);
+                        String msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVESUCCESS, ctx);
+                        if (map.get("code").toString().equalsIgnoreCase(ServerResponseConst.SUCCESS)) {
+                            res.put("result", "200");
+                        } else {
+                            res.put("result", "500");
+                            saveStatus = map.get("code").toString();
+                            if (ServerResponseConst.FAILED.equals(saveStatus)) {
+                                msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.ALLHASSCOREFORMULAR, ctx);
+                            } else if ("400".equals(saveStatus)) {
+                                msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OVERSUMRANGE, ctx);
+                            } else if ("999".equals(saveStatus)) {
+                                msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.LESSTHANQUANTITYS, ctx);
+                            } else if ("LESSLOWLIMIT".equals(saveStatus)) {
+                                msg = (new SHRPerfWebBizException(SHRPerfWebBizException.SCOREOVERMIN2)).getMessage();
+                            } else if (ServerResponseConst.INVALID.equals(saveStatus)) {
+                                msg = SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CHANGEHANDLER, ctx);
+                            }
+                        }
+
+                        res.put("msg", msg);
+                        res.put("maxCanPut", map.get("maxCanPut"));
+                        res.put("gradetaskNode", sumScoreList);
+                        res.put("nodeSumScore", ((PerfScoreBatchSaveBean)sumScoreList.get(0)).getNodeSumScore());
+                        res.put("nodeGrade", ((PerfScoreBatchSaveBean)sumScoreList.get(0)).getNodeGrade());
+                        res.put("detail", "");
+                        if ("500".equals(res.get("result"))) {
+                            JSONUtils.writeJson(response, res);
+                            return;
+                        }
+                    }
+
+                    if (normalScoreList.size() > 0) {
+                        PerfWorkFlowFacadeControllerBean.getInstance().calculateAndSaveScore(ctx, normalScoreList, res, isRealSave, nodeTask, nodeScore);
+                    }
+
+                    StringBuffer msgInfo = new StringBuffer("");
+                    if (info.getCanAdjustEvaluer().getValue() == 1) {
+                        try {
+                            map = this.getAreaBaseNameByNodeTaskInst(nodeTask, evaObj);
+                            Iterator<String> it = nodeScore.keySet().iterator();
+
+                            while(it.hasNext()) {
+                                saveStatus = (String)it.next();
+                                String[] grade = ((String)nodeScore.get(saveStatus)).split("#");
+                                String areaName = (String)map.get(saveStatus);
+                                GradeTaskNodeInstInfo gtnInfo = GetEntityInfoUtils.getGradeTaskNodeInstInfoById(ctx, saveStatus);
+                                WFNodeDefInfo wfNodeInfo = GetEntityInfoUtils.getWFNodeDefInfo(ctx, gtnInfo.getWfNode().getId().toString());
+                                if (grade.length > 1) {
+                                    msgInfo.append(areaName);
+                                    if (!wfNodeInfo.getNeedScore().getValue().equals("0")) {
+                                        msgInfo.append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SCOREIS, ctx)).append(":").append(grade[0]).append(",");
+                                    }
+
+                                    if (wfNodeInfo.getPerfGradeEvaluate().getValue().equals("1")) {
+                                        msgInfo.append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.GRADEIS, ctx)).append(":").append(grade[1]).append(",");
+                                    }
+                                } else {
+                                    String gradeStr = "";
+                                    if (grade.length > 0) {
+                                        gradeStr = grade[0];
+                                    }
+
+                                    msgInfo.append(areaName).append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SCOREIS, ctx)).append(":").append(gradeStr);
+                                    if (wfNodeInfo.getPerfGradeEvaluate().getValue().equals("1")) {
+                                        msgInfo.append(",").append(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.GRADEIS, ctx)).append(":");
+                                    }
+                                }
+                            }
+                        } catch (BOSException var25) {
+                            logger.error("", var25);
+                        }
+                    }
+                    res.put("detail", msgInfo.toString());
+                    PerfScoreList scoreList = (PerfScoreList)perfScoreListAll.get(i);
+                    String gradeTaskNodeId = scoreList.getGradeTaskNode();
+                    GradeTaskNodeInstInfo gradeTaskNodeInstInfo = GetEntityInfoUtils.getGradeTaskNodeInstInfoById(ctx, gradeTaskNodeId);
+                    String scoreStatus = "1";
+                    if (gradeTaskNodeInstInfo != null) {
+                        if (gradeTaskNodeInstInfo.getScoreStatus() != null) {
+                            scoreStatus = gradeTaskNodeInstInfo.getScoreStatus().getValue();
+                        }
+                        PerfWorkFlowFacadeControllerBean.getInstance().submitScore(ctx, scoreList);
+                    }
+
+                }
+                //
+                CoreBaseCollection coreBaseCollectionUpdate = new CoreBaseCollection();
+                CoreBaseCollection coreBaseCollectionSave = new CoreBaseCollection();
+
+                for (String id : oldMap.keySet()) {
+                    String value = oldMap.get(id);
+                    String[] split1 = value.split(",");
+                    String value0 = split1[0];//原总分
+                    String value1 = split1[1];//原等级
+                    //String value2 = split1[2];//原等级
+                    //绩效中间表
+                    PerformanceMiddleCollection performanceMiddleCollection = PerformanceMiddleFactory.getLocalInstance(ctx).
+                            getPerformanceMiddleCollection("where sourceBillId = '" + id + "'");
+                    //考核结果
+                    EvaResultSummaryInfo summaryInfo = EvaResultSummaryFactory.getLocalInstance(ctx).
+                            getEvaResultSummaryInfo("where id = '"+id+"'");
+
+                    if (performanceMiddleCollection.size() > 0 ){
+                        for (int i = 0; i < performanceMiddleCollection.size(); i++) {
+                            PerformanceMiddleInfo performanceMiddleInfo = performanceMiddleCollection.get(i);
+                            String sourceBillId = performanceMiddleInfo.getSourceBillId();
+                            if (!set.contains(sourceBillId)){
+                                String personId = summaryInfo.getPerson().getId().toString();
+                                String OrgTypeName = mapOrgType.get(id);//是否负责人(一级,二级 个人)
+                                BigDecimal perPojectSum = BigDecimal.ZERO;
+                                if ("一级部门".equals(OrgTypeName)){
+                                    if (mapOnePro.get(personId)!=null){
+                                        perPojectSum = mapOnePro.get(personId);
+                                    }else {
+                                        continue;
+                                    }
+                                }else if ("二级部门".equals(OrgTypeName)){
+                                    if (mapTwoPro.get(personId)!=null){
+                                        perPojectSum = mapTwoPro.get(personId);
+                                    }else {
+                                        continue;
+                                    }
+                                }else if ("个人".equals(OrgTypeName)){
+                                    if (mapPerson.get(personId)!=null){
+                                        perPojectSum = mapPerson.get(personId);
+                                    }else {
+                                        continue;
+                                    }
+                                }else {
+                                    //
+                                }
+                                performanceMiddleInfo.setFraction(perPojectSum);//加减分
+                                performanceMiddleInfo.setGrade(summaryInfo.getGradeLevel());
+                                coreBaseCollectionUpdate.add(performanceMiddleInfo);
+                            }else {
+                                PerformanceMiddleFactory.getLocalInstance(ctx).delete(new ObjectUuidPK(performanceMiddleInfo.getId()));
+                            }
+                        }
+                    }else {
+                        if (!set.contains(id)){
+                            PerformanceMiddleInfo performanceMiddleInfo = new PerformanceMiddleInfo();
+                            PersonInfo personInfo = new PersonInfo();
+                            String personId = summaryInfo.getPerson().getId().toString();
+                            String OrgTypeName = mapOrgType.get(id);//是否负责人(一级,二级 个人)
+                            BigDecimal perPojectSum = BigDecimal.ZERO;
+                            if ("一级部门".equals(OrgTypeName)){
+                                if (mapOnePro.get(personId)!=null){
+                                    perPojectSum = mapOnePro.get(personId);
+                                }else {
+                                    continue;
+                                }
+                            }else if ("二级部门".equals(OrgTypeName)){
+                                if (mapTwoPro.get(personId)!=null){
+                                    perPojectSum = mapTwoPro.get(personId);
+                                }else {
+                                    continue;
+                                }
+                            }else if ("个人".equals(OrgTypeName)){
+                                if (mapPerson.get(personId)!=null){
+                                    perPojectSum = mapPerson.get(personId);
+                                }else {
+                                    continue;
+                                }
+                            }else {
+                                //
+                            }
+
+                            performanceMiddleInfo.setOrgDep(summaryInfo.getAdminOrg());
+                            performanceMiddleInfo.setType(documentType.ProjectPerson);
+                            performanceMiddleInfo.setSourceBillId(id);
+                            performanceMiddleInfo.setFraction(perPojectSum);
+                            personInfo.setId(BOSUuid.read(personId));
+                            performanceMiddleInfo.setGrade(summaryInfo.getGradeLevel());
+                            performanceMiddleInfo.setPerson(personInfo);
+                            BigDecimal bigDecimal = scoreMap.get(id);
+                            performanceMiddleInfo.setOriginalfraction(bigDecimal);
+                            performanceMiddleInfo.setOriginalgrade(value1);
+                            coreBaseCollectionSave.add(performanceMiddleInfo);
+                        }else {
+                            PerformanceMiddleInfo performanceMiddleInfo = performanceMiddleCollection.get(0);
+                            PerformanceMiddleFactory.getLocalInstance(ctx).delete(new ObjectUuidPK(performanceMiddleInfo.getId()));
+                        }
+
+                    }
+                }
+                PerformanceMiddleFactory.getLocalInstance(ctx).updateBatchData(coreBaseCollectionUpdate);
+                PerformanceMiddleFactory.getLocalInstance(ctx).saveBatchData(coreBaseCollectionSave);
+
+                billIds = billIds.substring(0, billIds.length() - 1);
+                batchMessageTipsHeader.setBillId(billIds);
+                batchMessageTipsHeader.setFailureCount(failure);
+                batchMessageTipsHeader.setSuccessCount(success);
+                this.writeSuccessData(batchMessageTipsHeader);
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    public Map<String, String> getAreaBaseNameByNodeTaskInst(Set nodeTakSet, String evaObj) throws BOSException {
+        Context ctx = SHRContext.getInstance().getContext();
+        Map<String, String> map = new HashMap();
+        GradeTargetInstCollection coll = GetEntityInfoUtils.getGradeTargetInstCollectionByNodeInst(ctx, nodeTakSet, evaObj);
+        Set<String> exist = new HashSet();
+
+        for(int i = 0; i < coll.size(); ++i) {
+            if (map.get(coll.get(i).getGradeTaskNode().getId().toString()) != null) {
+                if (!exist.contains(coll.get(i).getAreaBase().getId().toString()) && coll.get(i).getEvaObj().getCanAdjustEvaluer().getValue() != 0) {
+                    String areaName = (String)map.get(coll.get(i).getGradeTaskNode().getId().toString());
+                    areaName = areaName + "," + coll.get(i).getAreaBase().getName();
+                    map.put(coll.get(i).getGradeTaskNode().getId().toString(), areaName);
+                    exist.add(coll.get(i).getAreaBase().getId().toString());
+                }
+            } else if (coll.get(i).getEvaObj().getCanAdjustEvaluer().getValue() == 0) {
+                map.put(coll.get(i).getGradeTaskNode().getId().toString(), "");
+            } else {
+                map.put(coll.get(i).getGradeTaskNode().getId().toString(), coll.get(i).getAreaBase().getName());
+                exist.add(coll.get(i).getAreaBase().getId().toString());
+            }
+        }
+
+        GradeTaskNodeInstCollection nodecoll = GetEntityInfoUtils.getGradeTaskNodeInstCollByEvaObj(ctx, evaObj);
+        PerfEvaObjectInfo evaInfo = GetEntityInfoUtils.getPerfEvaObjectInfo(ctx, evaObj);
+        PerfEvaObjMatrixWorkFlowInstCollection matriInfotColl = PerfEvaObjMatrixWorkFlowInstFactory.getLocalInstance(ctx).getPerfEvaObjMatrixWorkFlowInstCollection("select *, areaBase.name where evaObj ='" + evaObj + "'");
+        PerfPeriodInfo perfPeriod = evaInfo.getPeriod();
+        String perfPlanId = perfPeriod.getPerfPlan().getId().toString();
+        String perfRuleId = perfPeriod.getPerfRule().getId().toString();
+        YesOrNoEnum isHistoryUpdate = perfPeriod.getIsHistoryUpdate();
+        PerfEvaObjectMatrixWorkFlowCollection matriWorkFlow = null;
+        matriWorkFlow = PerfEvaObjectMatrixWorkFlowFactory.getLocalInstance(ctx).getPerfEvaObjectMatrixWorkFlowCollection("select *, areaBase.name where perfplan = '" + perfPlanId + "' and perfRule = '" + perfRuleId + "'");
+        if (matriWorkFlow.isEmpty() && isHistoryUpdate.getValue() == 1) {
+            matriWorkFlow = PerfEvaObjectMatrixWorkFlowFactory.getLocalInstance(ctx).getPerfEvaObjectMatrixWorkFlowCollection("select *, areaBase.name where perfplan = '" + perfPlanId + "' and perfRule is null");
+        }
+
+        Map<String, String> worfFlowAreaMap = new HashMap();
+
+        int i;
+        for(i = 0; i < matriInfotColl.size(); ++i) {
+            PerfEvaObjMatrixWorkFlowInstInfo matriInfo = matriInfotColl.get(i);
+            if (org.apache.commons.lang3.StringUtils.isEmpty((CharSequence)worfFlowAreaMap.get(matriInfo.getWorkflow().getId().toString()))) {
+                worfFlowAreaMap.put(matriInfo.getWorkflow().getId().toString(), matriInfo.getAreaBase().getName());
+            }
+        }
+
+        for(i = 0; i < matriWorkFlow.size(); ++i) {
+            PerfEvaObjectMatrixWorkFlowInfo matriWorkFlowInfo = matriWorkFlow.get(i);
+            if (org.apache.commons.lang3.StringUtils.isEmpty((CharSequence)worfFlowAreaMap.get(matriWorkFlowInfo.getWorkflow().getId().toString()))) {
+                worfFlowAreaMap.put(matriWorkFlowInfo.getWorkflow().getId().toString(), matriWorkFlowInfo.getAreaBase().getName());
+            }
+        }
+
+        for(i = 0; i < nodecoll.size(); ++i) {
+            GradeTaskNodeInstInfo info = nodecoll.get(i);
+            if (org.apache.commons.lang3.StringUtils.isEmpty((CharSequence)map.get(info.getId().toString()))) {
+                String workFlowId = info.getWfNode().getWorkflow().getId().toString();
+                map.put(info.getId().toString(), worfFlowAreaMap.get(workFlowId));
+            }
+        }
+
+        return map;
+    }
+
+
+    /**
+     *  获取评估节点,运行实例
+     * @param evaObjId 评估对象
+     * @return
+     */
+    public String getTargetDataSql(String evaObjId ,String departmentalNumber){
+        StringBuilder sql = new StringBuilder();
+        sql.append("SELECT").append("\n");
+        sql.append("inst.FTARGETSCORE score,").append("\n");
+        sql.append("ind.fid targetId,").append("\n");
+        sql.append("eva.FNAME_L2 evaName,").append("\n");
+        sql.append("node.FEVAOBJID nodEvaId,").append("\n");
+        sql.append("node.fid nodeId,").append("\n");
+        sql.append("node.FNODESUMSCORE nodeScore,").append("\n");
+        sql.append("node.FNODEGRADE nodeGrade,").append("\n");
+        sql.append("org.fid orgId").append("\n");
+        sql.append("from T_EVA_GradeTaskNodeInst node").append("\n");
+        sql.append("left join T_EVA_GradeTargetInst inst on node.fid = inst.FGRADETASKNODEID").append("\n");
+        sql.append("left join T_EVA_IndicatorTarget ind on ind.fid = inst.FTARGET").append("\n");
+        sql.append("left join T_PEF_PerfIndecator per on per.fid = ind.FINDECATOR").append("\n");
+        sql.append("left join T_EVA_EvaluFormAreaBase eva on eva.fid = inst.FAREABASEID").append("\n");
+        sql.append("left join T_EVA_PerfEvaObject obj on obj.fid = node.FEVAOBJID").append("\n");
+        sql.append("left join T_org_admin org on org.fid = obj.FEVALUORGADMINID").append("\n");
+        sql.append("where node.FEVAOBJID = '"+evaObjId+"' and FWFLEVEL = (select max(FWFLEVEL) from T_EVA_GradeTaskNodeInst) and per.Fnumber = '"+departmentalNumber+"' \n").append("\n");//and eva.FNAME_L2 = '跨部门协作任务'
+        return sql.toString();
+    }
+
+
+
+    public void getPerData(Context ctx,String periodId,Map<String, String> map) throws BOSException, SQLException {
+        StringBuilder sql = new StringBuilder();
+        sql.append("SELECT").append("\n");
+        sql.append("pro.fid id,").append("\n");
+        sql.append("pro.CFPERSONID personId,").append("\n");
+        sql.append("pro.CFORGDEPID orgId,").append("\n");
+        sql.append("pro.FDESCRIPTION periodIds,").append("\n");
+        sql.append("person.fnumber personNumber").append("\n");
+        sql.append("FROM CT_PF_PerformanProjectPerson pro").append("\n");
+        sql.append("left join T_BD_person person on person.fid = pro.CFPERSONID").append("\n");
+        sql.append("where pro.FDESCRIPTION LIKE '%"+periodId+"%'").append("\n");
+        sql.append("union all").append("\n");
+        sql.append("SELECT").append("\n");
+        sql.append("pro.fid,").append("\n");
+        sql.append("pro.CFPERSONID,").append("\n");
+        sql.append("pro.CFORGDEPID,").append("\n");
+        sql.append("pro.FDESCRIPTION,").append("\n");
+        sql.append("person.fnumber").append("\n");
+        sql.append("FROM CT_HR_PerformanProjectOne pro").append("\n");
+        sql.append("left join T_BD_person person on person.fid = pro.CFPERSONID").append("\n");
+        sql.append("where pro.FDESCRIPTION LIKE '%"+periodId+"%'").append("\n");
+        sql.append("union all").append("\n");
+        sql.append("SELECT").append("\n");
+        sql.append("pro.fid,").append("\n");
+        sql.append("pro.CFPERSONID,").append("\n");
+        sql.append("pro.CFORGDEPID,").append("\n");
+        sql.append("pro.FDESCRIPTION,").append("\n");
+        sql.append("person.fnumber").append("\n");
+        sql.append("FROM CT_HR_PerformanProjectTwo pro").append("\n");
+        sql.append("left join T_BD_person person on person.fid = pro.CFPERSONID").append("\n");
+        sql.append("where pro.FDESCRIPTION LIKE '%"+periodId+"%'").append("\n");
+        IRowSet iRowSet = DbUtil.executeQuery(ctx, sql.toString());
+
+        while (iRowSet.next()){
+            String id = iRowSet.getString("id");//id
+            String personId = iRowSet.getString("personId");//员工id
+            String orgId = iRowSet.getString("orgId");//组织
+            String periodIds = iRowSet.getString("periodIds");//多考核周期
+            String personNumber = iRowSet.getString("personNumber");//员工编码
+            map.put(id, personId+";"+orgId+";"+periodIds+";"+personNumber);
+
+        }
+
+
+
+    }
+
+}

+ 110 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanProjectOneDEPEditHandler.java

@@ -0,0 +1,110 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.bos.metadata.entity.SelectorItemInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.perf.*;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillEditHandler;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.perfweb.app.base.evalplan.IPerfPeriod;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodCollection;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodFactory;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo;
+import com.kingdee.util.StringUtils;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 绩效结果一级部门_表单 多选处理
+ * @Description TODO
+ * @Date 2025/1/6 15:38
+ * @Created by 30489
+ */
+public class PerformanProjectOneDEPEditHandler extends DEPCustomBillEditHandler {
+    /**
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public String getPageDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException, BOSException, EASBizException {
+        String billId = request.getParameter("billId");
+        Context context = SHRContext.getInstance().getContext();
+        if (StringUtils.isEmpty(billId)) {
+            return null;
+        }
+        Map<String, Object> map = new HashMap<String, Object>();
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add(new SelectorItemInfo("perfPlanName"));
+        sic.add(new SelectorItemInfo("PerfPlanOne.perfPlan.*"));
+        PerformanProjectOneInfo info = PerformanProjectOneFactory.getLocalInstance(context)
+                .getPerformanProjectOneInfo(new ObjectUuidPK(billId), sic);
+
+        PerformanProjectOnePerfPlanOneCollection perfPlanOne = info.getPerfPlanOne();
+        PerfPeriodCollection perfPeriodCollection = new PerfPeriodCollection();
+        for (int i = 0; i < perfPlanOne.size(); i++) {
+            PerformanProjectOnePerfPlanOneInfo planOneInfo = perfPlanOne.get(i);
+            PerfPeriodInfo perfPeriodInfo = planOneInfo.getPerfPlan();
+            perfPeriodCollection.add(perfPeriodInfo);
+        }
+        map.put("perfPeriodCollection", perfPeriodCollection);
+        map.put("perfPlanStr", info.getPerfPlanName());
+
+        JSONUtils.SUCCESS(map);
+        return null;
+
+    }
+
+    @Override
+    protected IObjectPK runSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws Exception {
+
+        PerformanProjectOneInfo info = (PerformanProjectOneInfo)model;
+        Context context = SHRContext.getInstance().getContext();
+        //绩效组织考核周期
+        String perfPeriodIdCollections = (String) info.get("perforAppraisal");
+        if (!StringUtils.isEmpty(perfPeriodIdCollections)) {
+            String[] perfPeriodIdArr = perfPeriodIdCollections.split(",");
+            IPerfPeriod localInstance = PerfPeriodFactory.getLocalInstance(context);//考核周期
+            //考核周期名称
+            StringBuffer perfPeriodName = new StringBuffer();
+            //考核周期编码
+            StringBuffer perfPeriodNumber = new StringBuffer();
+            //考核周期集合
+            for (int i = 0; i < perfPeriodIdArr.length; i++) {
+                //创建绩效结果应用个人多选分录对象
+                PerformanProjectOnePerfPlanOneInfo planOneInfo = new PerformanProjectOnePerfPlanOneInfo();
+
+                PerfPeriodInfo perfPeriodInfo = localInstance.getPerfPeriodInfo(new ObjectUuidPK(perfPeriodIdArr[i]));
+                planOneInfo.setPerfPlan(perfPeriodInfo);
+                info.getPerfPlanOne().add(planOneInfo);
+
+                perfPeriodName.append(perfPeriodInfo.getName()).append(",");
+                perfPeriodNumber.append(perfPeriodInfo.getNumber()).append(",");
+            }
+            perfPeriodName.deleteCharAt(perfPeriodName.length() - 1);
+            //写入考核周期名称
+            info.setPerfPlanName(perfPeriodName.toString());
+            //写入考核周期编码
+            perfPeriodNumber.deleteCharAt(perfPeriodNumber.length() - 1);
+            info.setPerfPlanNumber(perfPeriodNumber.toString());
+            info.setDescription(perfPeriodIdCollections);
+        }
+        return super.runSave(request, response, model);
+    }
+}

+ 162 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanProjectOneDEPListHandler.java

@@ -0,0 +1,162 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.aliyun.odps.utils.StringUtils;
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.hr.ats.AtsUtil;
+import com.kingdee.eas.hr.ats.lightapp.util.NumberCodeRule;
+import com.kingdee.eas.hr.perf.*;
+import com.kingdee.eas.hr.perf.app.TimeTypeEunm;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillListHandler;
+import org.apache.commons.collections4.MultiMap;
+import org.apache.commons.collections4.map.MultiValueMap;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 绩效结果一级部门
+ * @Description TODO
+ * @Date 2025/2/17 20:36
+ * @Created by 30489
+ */
+public class PerformanProjectOneDEPListHandler  extends DEPCustomBillListHandler {
+
+    /**
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     * @throws SQLException
+     */
+    public void generateProjectOneAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, EASBizException, SQLException, ParseException {
+        String start = request.getParameter("start");
+        String end = request.getParameter("end");
+        String typeName = request.getParameter("typeName");
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        Date startDate = formatter.parse(start);
+        Date endDate = formatter.parse(end);
+        TimeTypeEunm anEnum = TimeTypeEunm.getEnum(typeName);
+        Context ctx = SHRContext.getInstance().getContext();
+        MultiMap multiMap = new MultiValueMap<>();
+        Set<String> set = new HashSet<String>();
+
+
+        StringBuffer sql = new StringBuffer(); //考勤id
+        sql.append("SELECT").append("\n");
+        sql.append("two.CFPERSONID twoPersonId,").append("\n");
+        sql.append("two.CFORGDEPID twoOrgDep,").append("\n");
+        sql.append("two.CFPERPOJECTSUM twoProjectSum,").append("\n");
+        sql.append("CASE").append("\n");
+        sql.append("    WHEN type.fname_l2 = '一级部门' THEN two.CFORGDEPID").append("\n");
+        sql.append("    WHEN type.fname_l2 = '二级部门' THEN admin.FPARENTID").append("\n");
+        sql.append("ELSE two.CFORGDEPID END AS adminID").append("\n");
+        sql.append("FROM CT_HR_PerformanProjectTwo two").append("\n");
+        sql.append("left join T_org_admin admin on admin.fid = two.CFORGDEPID").append("\n");
+        sql.append("left join T_Org_LayerType type on type.fid = admin.FLAYERTYPEID").append("\n");
+
+        sql.append("where to_char(two.CFSTARTDATE, 'yyyy-mm-dd') >= '"+start+"' and to_char(two.CFENDDATE, 'yyyy-mm-dd') <= '"+end+"'").append("\n");
+        sql.append("and two.FBILLSTATE = '3'").append("\n");
+        IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
+        while (rs.next()){
+            Map<String, Object> map = new HashMap<>();
+            String twoPersonId = rs.getString("twoPersonId");
+            String twoOrgDep = rs.getString("twoOrgDep");
+            BigDecimal twoProjectSum = rs.getBigDecimal("twoProjectSum");
+            String adminID = rs.getString("adminID");
+            map.put("twoPersonId",twoPersonId);
+            map.put("twoOrgDep",twoOrgDep);
+            map.put("twoProjectSum",twoProjectSum);
+            multiMap.put(adminID,map);
+            set.add(adminID);
+        }
+
+        Map<String, String> mapIds = new HashMap<>();
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append("SELECT").append("\n");
+        stringBuffer.append("admin.fid adminId,").append("\n");
+        stringBuffer.append("pp.FPERSONID depPersonId").append("\n");
+        stringBuffer.append("FROM T_org_admin admin").append("\n");
+        stringBuffer.append("left join T_HR_PersonPosition pp on admin.FRESPONPOSITIONID = pp.FPRIMARYPOSITIONID").append("\n");
+        stringBuffer.append("where admin.fid in(").append("\n");
+        stringBuffer.append(AtsUtil.convertSetToString(set)).append("\n");
+        stringBuffer.append(")").append("\n");
+        IRowSet iRowSet = DbUtil.executeQuery(ctx, stringBuffer.toString());
+        while (iRowSet.next()){
+            String depPersonId = iRowSet.getString("depPersonId");//组织负责人
+            String adminID = iRowSet.getString("adminId");
+            mapIds.put(adminID,depPersonId);
+        }
+
+
+        for (String adminID : set) {
+            List list = (List) multiMap.get(adminID);
+            PerformanProjectOneInfo info = new PerformanProjectOneInfo();
+            PersonInfo personInfo = new PersonInfo();
+            AdminOrgUnitInfo adminOrgUnitInfo = new AdminOrgUnitInfo();
+            HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+            hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+            info.setHrOrgUnit(hrOrgUnitInfo);
+            String billNumber = NumberCodeRule.readCodeRuleNumber(info, NumberCodeRule.getMainOrgByCu(ctx), ctx);
+            info.setNumber(billNumber);
+            info.setTimeType(anEnum);
+            info.setStartDate(startDate);
+            info.setEndDate(endDate);
+            BigDecimal zero = BigDecimal.ZERO;
+            int index = 0;
+            for (int i = 0; i < list.size(); i++) {
+                PerformanProjectOneEntryInfo entryInfo = new PerformanProjectOneEntryInfo();
+                AdminOrgUnitInfo adminOrgUnitTwoInfo = new AdminOrgUnitInfo();
+                PersonInfo personTwoInfo = new PersonInfo();
+                Map map = (Map) list.get(i);
+                //String orgParentId = (String) map.get("orgParentId");
+                String personId = mapIds.get(adminID) == null ? "": mapIds.get(adminID);
+                String twoPersonId = (String) map.get("twoPersonId");
+                String twoOrgDep = (String) map.get("twoOrgDep");
+                BigDecimal twoProjectSum = (BigDecimal) map.get("twoProjectSum");
+                adminOrgUnitInfo.setId(BOSUuid.read(adminID));
+                info.setOrgDep(adminOrgUnitInfo);
+                if (StringUtils.isNotBlank(personId)){
+                    personInfo.setId(BOSUuid.read(personId));
+                }
+
+                info.setPerson(personInfo);
+                adminOrgUnitTwoInfo.setId(BOSUuid.read(twoOrgDep));
+                entryInfo.setSecondDep(adminOrgUnitTwoInfo);
+                personTwoInfo.setId(BOSUuid.read(twoPersonId));
+                entryInfo.setSecondDepPerson(personTwoInfo);
+                zero = zero.add(twoProjectSum);
+                if (index == list.size() - 1){
+                    zero = zero.divide(BigDecimal.valueOf(list.size()));
+                    info.setPerPojectSum(zero);
+                }
+                index++;
+                entryInfo.setProjectModulus(twoProjectSum);
+
+                info.getEntrys().add(entryInfo);
+            }
+            PerformanProjectOneFactory.getLocalInstance(ctx).save(info);
+        }
+
+
+    }
+
+}

+ 115 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanProjectPersonDEPEditHandler.java

@@ -0,0 +1,115 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.bos.metadata.entity.SelectorItemInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonFactory;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonInfo;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonPerfPlanMultipleCollection;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonPerfPlanMultipleInfo;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillEditHandler;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.perfweb.app.base.evalplan.IPerfPeriod;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodCollection;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodFactory;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo;
+import com.kingdee.util.StringUtils;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 绩效结果应用个人_表单 多选处理
+ * @Description TODO
+ * @Date 2024/12/31 17:13
+ * @Created by 30489
+ */
+public class PerformanProjectPersonDEPEditHandler extends DEPCustomBillEditHandler {
+
+
+    /**
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public String getPageDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException, BOSException, EASBizException {
+        String billId = request.getParameter("billId");
+        Context context = SHRContext.getInstance().getContext();
+        if (StringUtils.isEmpty(billId)) {
+            return null;
+        }
+        Map<String, Object> map = new HashMap<String, Object>();
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add(new SelectorItemInfo("perfPlanStr"));
+        sic.add(new SelectorItemInfo("PerfPlanMultiple.perfPlanMultiple.*"));
+        PerformanProjectPersonInfo info = PerformanProjectPersonFactory.getLocalInstance(context)
+                .getPerformanProjectPersonInfo(new ObjectUuidPK(billId), sic);
+
+        PerformanProjectPersonPerfPlanMultipleCollection perfPlanMultiple = info.getPerfPlanMultiple();
+        PerfPeriodCollection perfPeriodCollection = new PerfPeriodCollection();
+        for (int i = 0; i < perfPlanMultiple.size(); i++) {
+            PerformanProjectPersonPerfPlanMultipleInfo multipleInfo = perfPlanMultiple.get(i);
+            PerfPeriodInfo perfPeriodInfo = multipleInfo.getPerfPlanMultiple();
+            perfPeriodCollection.add(perfPeriodInfo);
+        }
+        map.put("perfPeriodCollection", perfPeriodCollection);
+        map.put("perfPlanStr", info.getPerfPlanStr());
+
+        JSONUtils.SUCCESS(map);
+        return null;
+
+    }
+
+    @Override
+    protected IObjectPK runSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws Exception {
+
+        PerformanProjectPersonInfo info = (PerformanProjectPersonInfo)model;
+        Context context = SHRContext.getInstance().getContext();
+        //绩效组织考核周期
+        String perfPeriodIdCollections = (String) info.get("perforAppraisal");
+        if (!StringUtils.isEmpty(perfPeriodIdCollections)) {
+            String[] perfPeriodIdArr = perfPeriodIdCollections.split(",");
+            IPerfPeriod localInstance = PerfPeriodFactory.getLocalInstance(context);
+            //考核周期名称
+            StringBuffer perfPeriodName = new StringBuffer();
+            //考核周期编码
+            StringBuffer perfPeriodNumber = new StringBuffer();
+            //考核周期集合
+            for (int i = 0; i < perfPeriodIdArr.length; i++) {
+                //创建绩效结果应用个人id分录对象
+                PerformanProjectPersonPerfPlanMultipleInfo multipleInfo = new PerformanProjectPersonPerfPlanMultipleInfo();
+
+                PerfPeriodInfo perfPeriodInfo = localInstance.getPerfPeriodInfo(new ObjectUuidPK(perfPeriodIdArr[i]));
+                multipleInfo.setPerfPlanMultiple(perfPeriodInfo);
+                info.getPerfPlanMultiple().add(multipleInfo);
+
+                perfPeriodName.append(perfPeriodInfo.getName()).append(",");
+                perfPeriodNumber.append(perfPeriodInfo.getNumber()).append(",");
+            }
+            perfPeriodName.deleteCharAt(perfPeriodName.length() - 1);
+            //写入考核周期名称
+            info.setPerfPlanStr(perfPeriodName.toString());
+            //写入考核周期编码
+            perfPeriodNumber.deleteCharAt(perfPeriodNumber.length() - 1);
+            info.setPerfPlanNumber(perfPeriodNumber.toString());
+            info.setDescription(perfPeriodIdCollections);
+        }
+        return super.runSave(request, response, model);
+    }
+}

+ 162 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanProjectPersonDEPListHandler.java

@@ -0,0 +1,162 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.hr.ats.AtsUtil;
+import com.kingdee.eas.hr.ats.lightapp.util.NumberCodeRule;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonEntryInfo;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonFactory;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonInfo;
+import com.kingdee.eas.hr.perf.PerformanProjectPersonPerfPlanMultipleInfo;
+import com.kingdee.eas.hr.perf.app.TimeTypeEunm;
+import com.kingdee.eas.hr.project.ProjectManagementInfo;
+import com.kingdee.eas.hr.project.ProjectRoleInfo;
+import com.kingdee.eas.hr.project.ProjectTypeInfo;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillListHandler;
+import com.kingdee.shr.perfweb.app.base.evalplan.IPerfPeriod;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodFactory;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo;
+import org.springframework.ui.ModelMap;
+
+import com.kingdee.shr.base.syssetting.app.osf.OSFAppUtil;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+/**
+ * 绩效结果个人_列表
+ * @Description TODO
+ * @Date 2025/2/14 17:30
+ * @Created by 30489
+ */
+public class PerformanProjectPersonDEPListHandler extends DEPCustomBillListHandler {
+
+
+    /**
+     * 生成项目绩效个人
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public void generatePerformanceAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, EASBizException, SQLException, ParseException {
+        String start = request.getParameter("start");
+        String end = request.getParameter("end");
+        String typeName = request.getParameter("typeName");
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        Date startDate = formatter.parse(start);
+        Date endDate = formatter.parse(end);
+        TimeTypeEunm anEnum = TimeTypeEunm.getEnum(typeName);
+        //区间查询考勤id
+        Set<String> set = new HashSet<>();
+        Context ctx = SHRContext.getInstance().getContext();
+        String sql = "select fid id from T_EVA_PerfPeriod where  to_char(FPSTARTDATE, 'yyyy-mm-dd') >= '"+start+"' and to_char(FPENDDATE, 'yyyy-mm-dd') <= '"+end+"'";
+        IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
+        while (rs.next()){
+            String id = rs.getString("id");
+            set.add(id);
+        }
+
+        Map<String, String> map = new HashMap<>();
+        map.put("periodids",AtsUtil.convertSetToString(set));
+
+        Map callService = (Map)OSFAppUtil.callService(ctx, "ProjectEvalruleService", map);
+        IPerfPeriod localInstance = PerfPeriodFactory.getLocalInstance(ctx);
+
+        for (Object personId : callService.keySet()) {
+            PerformanProjectPersonInfo info = new PerformanProjectPersonInfo();
+            PersonInfo personInfo = new PersonInfo();
+            AdminOrgUnitInfo adminOrgUnitInfo = new AdminOrgUnitInfo();
+            PerfPeriodInfo perfPeriodInfo = new PerfPeriodInfo();
+
+            personInfo.setId(BOSUuid.read((String) personId));
+            info.setPerson(personInfo);
+            HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+            hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+            info.setHrOrgUnit(hrOrgUnitInfo);
+            info.setTimeType(anEnum);
+            info.setStartDate(startDate);
+            info.setEndDate(endDate);
+            List<Object> list = (List)callService.get(personId);
+            String billNumber = NumberCodeRule.readCodeRuleNumber(info, NumberCodeRule.getMainOrgByCu(ctx), ctx);
+            info.setNumber(billNumber);
+            BigDecimal zero = BigDecimal.ZERO;
+            for (int i = 0; i < list.size(); i++) {
+                PerformanProjectPersonEntryInfo entry = new PerformanProjectPersonEntryInfo();
+                ProjectManagementInfo projectManagementInfo = new ProjectManagementInfo();
+                ProjectRoleInfo projectRoleInfo = new ProjectRoleInfo();
+                ProjectTypeInfo projectTypeInfo = new ProjectTypeInfo();
+                Map listMap = (Map)list.get(i);
+                String projectId = (String)listMap.get("projectid");
+                String periodId = (String)listMap.get("periodId");
+                String roleId = (String)listMap.get("roleId");
+                String projectTypeId = (String)listMap.get("projectTypeId");//角色类别id
+                String adminid = (String)listMap.get("adminid");
+                BigDecimal projectPerformance = listMap.get("projectPerformance") == null ?BigDecimal.ZERO:(BigDecimal)listMap.get("projectPerformance");//项目代表绩效
+
+                BigDecimal singleProject = listMap.get("singleProject")== null ?BigDecimal.ZERO:(BigDecimal)listMap.get("singleProject");//个人代表绩效
+                BigDecimal itemWeight = listMap.get("itemWeight")== null ?BigDecimal.ZERO:(BigDecimal)listMap.get("itemWeight");//项目权重
+                zero = zero.add(projectPerformance.multiply(singleProject).multiply(itemWeight));//个人最终系数
+
+                adminOrgUnitInfo.setId(BOSUuid.read(adminid));
+                perfPeriodInfo.setId(BOSUuid.read(periodId));
+                projectTypeInfo.setId(BOSUuid.read(projectTypeId));
+                projectManagementInfo.setId(BOSUuid.read(projectId));
+                projectRoleInfo.setId(BOSUuid.read(roleId));
+                info.setOrgDep(adminOrgUnitInfo);
+                info.setPerfPlan(perfPeriodInfo);
+                info.setPerPojectSum(zero);//个人项目绩效汇总
+                entry.setParticipate(projectManagementInfo);//项目id
+                entry.setProjectRole(projectRoleInfo);//角色id
+                //
+                entry.setProjectPerformance(projectPerformance);//
+                entry.setSingleProject(singleProject);//
+                entry.setItemWeight(itemWeight);//
+                info.getEntrys().add(entry);
+                //考核周期名称
+                StringBuffer perfPeriodName = new StringBuffer();
+                //考核周期编码
+                StringBuffer perfPeriodNumber = new StringBuffer();
+                PerformanProjectPersonPerfPlanMultipleInfo multipleInfo = new PerformanProjectPersonPerfPlanMultipleInfo();
+                PerfPeriodInfo periodInfo = localInstance.getPerfPeriodInfo(new ObjectUuidPK(periodId));
+                multipleInfo.setPerfPlanMultiple(periodInfo);
+                info.getPerfPlanMultiple().add(multipleInfo);
+                perfPeriodName.append(periodInfo.getName()).append(",");
+                perfPeriodNumber.append(periodInfo.getNumber()).append(",");
+                perfPeriodName.deleteCharAt(perfPeriodName.length() - 1);
+                //写入考核周期名称
+                info.setPerfPlanStr(perfPeriodName.toString());
+                //写入考核周期编码
+                perfPeriodNumber.deleteCharAt(perfPeriodNumber.length() - 1);
+                info.setPerfPlanNumber(perfPeriodNumber.toString());
+                info.setDescription(periodId);
+
+            }
+            PerformanProjectPersonFactory.getLocalInstance(ctx).save(info);
+        }
+
+        this.writeSuccessData(callService);
+
+    }
+
+
+
+}

+ 110 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanProjectTwoDEPEditHandler.java

@@ -0,0 +1,110 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.bos.metadata.entity.SelectorItemInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.perf.*;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillEditHandler;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.perfweb.app.base.evalplan.IPerfPeriod;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodCollection;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodFactory;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo;
+import com.kingdee.util.StringUtils;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 绩效结果二级部门_表单 多选处理
+ * @Description TODO
+ * @Date 2025/1/6 15:38
+ * @Created by 30489
+ */
+public class PerformanProjectTwoDEPEditHandler extends DEPCustomBillEditHandler {
+    /**
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public String getPageDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException, BOSException, EASBizException {
+        String billId = request.getParameter("billId");
+        Context context = SHRContext.getInstance().getContext();
+        if (StringUtils.isEmpty(billId)) {
+            return null;
+        }
+        Map<String, Object> map = new HashMap<String, Object>();
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add(new SelectorItemInfo("perfPlanName"));
+        sic.add(new SelectorItemInfo("PerfPlanTwo.perfPlan.*"));
+        PerformanProjectTwoInfo info = PerformanProjectTwoFactory.getLocalInstance(context)
+                .getPerformanProjectTwoInfo(new ObjectUuidPK(billId), sic);
+
+        PerformanProjectTwoPerfPlanTwoCollection perfPlanTwo = info.getPerfPlanTwo();
+        PerfPeriodCollection perfPeriodCollection = new PerfPeriodCollection();
+        for (int i = 0; i < perfPlanTwo.size(); i++) {
+            PerformanProjectTwoPerfPlanTwoInfo planTwoInfo = perfPlanTwo.get(i);
+            PerfPeriodInfo perfPeriodInfo = planTwoInfo.getPerfPlan();
+            perfPeriodCollection.add(perfPeriodInfo);
+        }
+        map.put("perfPeriodCollection", perfPeriodCollection);
+        map.put("perfPlanStr", info.getPerfPlanName());
+
+        JSONUtils.SUCCESS(map);
+        return null;
+    }
+
+    @Override
+    protected IObjectPK runSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws Exception {
+
+        PerformanProjectTwoInfo info = (PerformanProjectTwoInfo)model;
+        Context context = SHRContext.getInstance().getContext();
+        //绩效组织考核周期
+        String perfPeriodIdCollections = (String) info.get("perforAppraisal");
+        if (!StringUtils.isEmpty(perfPeriodIdCollections)) {
+            String[] perfPeriodIdArr = perfPeriodIdCollections.split(",");
+            IPerfPeriod localInstance = PerfPeriodFactory.getLocalInstance(context);//考核周期
+            //考核周期名称
+            StringBuffer perfPeriodName = new StringBuffer();
+            boolean a = true;
+            //考核周期编码
+            StringBuffer perfPeriodNumber = new StringBuffer();
+            //考核周期集合
+            for (int i = 0; i < perfPeriodIdArr.length; i++) {
+                //创建绩效结果应用个人id分录对象
+                PerformanProjectTwoPerfPlanTwoInfo planTwoInfo = new PerformanProjectTwoPerfPlanTwoInfo();
+
+                PerfPeriodInfo perfPeriodInfo = localInstance.getPerfPeriodInfo(new ObjectUuidPK(perfPeriodIdArr[i]));
+                planTwoInfo.setPerfPlan(perfPeriodInfo);
+                info.getPerfPlanTwo().add(planTwoInfo);
+
+                perfPeriodName.append(perfPeriodInfo.getName()).append(",");
+                perfPeriodNumber.append(perfPeriodInfo.getNumber()).append(",");
+            }
+            perfPeriodName.deleteCharAt(perfPeriodName.length() - 1);
+            //写入考核周期名称
+            info.setPerfPlanName(perfPeriodName.toString());
+            //写入考核周期编码
+            perfPeriodNumber.deleteCharAt(perfPeriodNumber.length() - 1);
+            info.setPerfPlanNumber(perfPeriodNumber.toString());
+            info.setDescription(perfPeriodIdCollections);
+        }
+        return super.runSave(request, response, model);
+    }
+}

+ 229 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanProjectTwoDEPListHandler.java

@@ -0,0 +1,229 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.aliyun.odps.utils.StringUtils;
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseCollection;
+import com.kingdee.eas.hr.ats.AtsUtil;
+import com.kingdee.eas.hr.ats.lightapp.util.NumberCodeRule;
+import com.kingdee.eas.hr.perf.*;
+import com.kingdee.eas.hr.perf.app.TimeTypeEunm;
+import com.kingdee.eas.hr.project.*;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.app.osf.OSFAppUtil;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillListHandler;
+import com.kingdee.shr.perfweb.app.base.evalplan.IPerfPeriod;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodFactory;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo;
+import com.kingdee.shr.perfweb.app.base.indecator.PerfIndecatorCollection;
+import com.kingdee.shr.perfweb.app.base.indecator.PerfIndecatorFactory;
+import org.apache.commons.collections4.MultiMap;
+import org.apache.commons.collections4.map.MultiValueMap;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.sql.SQLException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 绩效二级部门_列表
+ * @Description TODO
+ * @Date 2025/2/17 16:22
+ * @Created by 30489
+ */
+public class PerformanProjectTwoDEPListHandler extends DEPCustomBillListHandler {
+
+    private Properties propt = new Properties();
+    public PerformanProjectTwoDEPListHandler() {
+        try {
+            this.propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/hty/configuration.properties"));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    /**
+     * 生成项目绩效个人
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public void generateProjectTwoAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException, BOSException, EASBizException, SQLException, ParseException {
+        String start = request.getParameter("start");
+        String end = request.getParameter("end");
+        String typeName = request.getParameter("typeName");
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        Date startDate = formatter.parse(start);
+        Date endDate = formatter.parse(end);
+        TimeTypeEunm anEnum = TimeTypeEunm.getEnum(typeName);
+        //区间查询考勤id
+        Set<String> set = new HashSet<>();
+        Context ctx = SHRContext.getInstance().getContext();
+        String sql = "select fid id from T_EVA_PerfPeriod where  to_char(FPSTARTDATE, 'yyyy-mm-dd') >= '"+start+"' and to_char(FPENDDATE, 'yyyy-mm-dd') <= '"+end+"'";
+        IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
+        while (rs.next()){
+            String id = rs.getString("id");
+            set.add(id);
+        }
+        Map<String, String> map = new HashMap<>();
+        map.put("periodids", AtsUtil.convertSetToString(set));
+        String P2 = propt.getProperty("Project2");
+        ProjectTypeCollection projectTypeCollection = ProjectTypeFactory.getLocalInstance(ctx).getProjectTypeCollection("where number = '" + P2 + "'");
+        if (projectTypeCollection.size() ==0){
+            throw new ShrWebBizException("未找到配置指标编码"+P2+",请检查!");
+        }
+        map.put("istype2",P2);
+        Map callService = (Map) OSFAppUtil.callService(ctx, "ProjectEvalruleService", map);
+        Set<Object> setIds = new HashSet<>();
+        for (Object personId : callService.keySet()) {
+            setIds.add(personId);
+        }
+
+        Set<String> setDepIds = new HashSet<>();
+        StringBuffer str = new StringBuffer();
+        str.append("SELECT").append("\n");
+        str.append("pp.FPERSONID personId,").append("\n");
+        str.append("admin.FLAYERTYPEID,").append("\n");
+        str.append("type.fname_l2,").append("\n");
+        str.append("CASE").append("\n");
+        str.append("    WHEN type.fname_l2 = '二级部门' THEN pp.FPERSONDEP").append("\n");
+        str.append("    WHEN type.fname_l2 = '小组' THEN admin.FPARENTID").append("\n");
+        str.append("ELSE pp.FPERSONDEP END AS adminID").append("\n");
+        str.append("FROM T_HR_PersonPosition pp").append("\n");
+        str.append("left join T_org_admin admin on pp.FPERSONDEP = admin.fid").append("\n");
+        str.append("left join T_Org_LayerType type on type.fid = admin.FLAYERTYPEID").append("\n");
+        str.append("where pp.FPERSONID in(").append("\n");
+        str.append(AtsUtil.convertSetToString(setIds)).append("\n");
+        str.append(")").append("\n");
+        System.out.println("setDepIds" + setDepIds);
+        IRowSet rowSet = DbUtil.executeQuery(ctx, str.toString());
+        MultiMap listHashMap = new MultiValueMap<>();
+        while (rowSet.next()){
+            String personId = rowSet.getString("personId");
+            //String depPersonId = rowSet.getString("depPersonId");//组织负责人
+            String adminID = rowSet.getString("adminID");
+            setDepIds.add(adminID);
+            List<Object> list = (List)callService.get(personId);
+            listHashMap.put(adminID,list);
+        }
+
+
+        Map<String, String> mapIds = new HashMap<>();
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append("SELECT").append("\n");
+        stringBuffer.append("admin.fid adminId,").append("\n");
+        stringBuffer.append("pp.FPERSONID depPersonId").append("\n");
+        stringBuffer.append("FROM T_org_admin admin").append("\n");
+        stringBuffer.append("left join T_HR_PersonPosition pp on admin.FRESPONPOSITIONID = pp.FPRIMARYPOSITIONID").append("\n");
+        stringBuffer.append("where admin.fid in(").append("\n");
+        stringBuffer.append(AtsUtil.convertSetToString(setDepIds)).append("\n");
+        stringBuffer.append(")").append("\n");
+        System.out.println("stringBuffer" + stringBuffer);
+        IRowSet iRowSet = DbUtil.executeQuery(ctx, stringBuffer.toString());
+        while (iRowSet.next()){
+            String depPersonId = iRowSet.getString("depPersonId");//组织负责人
+            String adminID = iRowSet.getString("adminId");
+            setDepIds.add(adminID);
+            mapIds.put(adminID,depPersonId);
+        }
+
+        for (String adminID : setDepIds) {
+            System.out.println(adminID);
+            PerformanProjectTwoInfo info = new PerformanProjectTwoInfo();
+            PersonInfo personInfo = new PersonInfo();
+            AdminOrgUnitInfo adminOrgUnitInfo = new AdminOrgUnitInfo();
+            PerfPeriodInfo perfPeriodInfo = new PerfPeriodInfo();
+            List list = (List) listHashMap.get(adminID);
+            //业务组织
+            HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+            hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+            info.setHrOrgUnit(hrOrgUnitInfo);
+            String billNumber = NumberCodeRule.readCodeRuleNumber(info, NumberCodeRule.getMainOrgByCu(ctx), ctx);
+            info.setNumber(billNumber);
+            info.setTimeType(anEnum);
+            info.setStartDate(startDate);
+            info.setEndDate(endDate);
+            BigDecimal zero = BigDecimal.ZERO;
+            int index = 0;
+            for (int i = 0; i < list.size(); i++) {
+                List mapList = (List) list.get(i);
+                System.out.println("System.out.println(mapListww)"+mapList);
+                for (int j = 0; j < mapList.size(); j++) {
+                    PerformanProjectTwoEntryInfo entry = new PerformanProjectTwoEntryInfo();
+                    ProjectManagementInfo projectManagementInfo = new ProjectManagementInfo();
+                    ProjectRoleInfo projectRoleInfo = new ProjectRoleInfo();
+                    ProjectTypeInfo projectTypeInfo = new ProjectTypeInfo();
+                    PersonInfo perInfo = new PersonInfo();
+                    Map listMap = (Map)mapList.get(j);
+                    String projectId = (String)listMap.get("projectid");
+                    String periodId = (String)listMap.get("periodId");
+                    String roleId = (String)listMap.get("roleId");
+                    String projectTypeId = (String)listMap.get("projectTypeId");//角色类别id
+                    String adminid = (String)listMap.get("adminid");
+                    String personId = (String)listMap.get("personId");
+                    BigDecimal projectPerformance = (BigDecimal)listMap.get("projectPerformance") ;//项目代表绩效
+                    //BigDecimal singleProject = (BigDecimal)listMap.get("singleProject");//个人代表绩效
+                    BigDecimal itemWeight = (BigDecimal)listMap.get("itemWeight");//项目权重
+                    BigDecimal projectkPicoeff = (BigDecimal)listMap.get("projectkPicoeff");//项目绩效
+                    if (StringUtils.isNotBlank(adminID)){
+                        adminOrgUnitInfo.setId(BOSUuid.read(adminID));
+
+                    }
+                    perfPeriodInfo.setId(BOSUuid.read(periodId));
+                    projectManagementInfo.setId(BOSUuid.read(projectId));
+                    projectRoleInfo.setId(BOSUuid.read(roleId));
+                    projectTypeInfo.setId(BOSUuid.read(projectTypeId));
+                    perInfo.setId(BOSUuid.read(personId));
+                    if (StringUtils.isNotBlank(adminID)){
+                        String depPersonId = mapIds.get(adminID);
+                        if (StringUtils.isNotBlank(depPersonId)){
+                            personInfo.setId(BOSUuid.read(depPersonId));
+
+                        }
+                    }
+//                    String depPersonId = mapIds.get(adminID);
+//                    personInfo.setId(BOSUuid.read(depPersonId));
+                    info.setPerson(personInfo);
+                    info.setOrgDep(adminOrgUnitInfo);//部门id
+                    info.setPerfPlan(perfPeriodInfo);//周期id
+                    zero = zero.add(itemWeight);
+
+                    if (index == mapList.size() - 1){
+                        zero = zero.divide(BigDecimal.valueOf(mapList.size()));
+                    }
+                    index++;
+                    info.setPerPojectSum(zero);//二级部门负责人最终系数
+                    entry.setParticipate(projectManagementInfo);//项目id
+                    entry.setPerson(perInfo);//项目代表
+                    entry.setProjectkPicoeff(projectkPicoeff);//项目绩效
+                    entry.setProjectRole(projectRoleInfo);//角色id
+                    entry.setProjectPerformance(projectPerformance);//项目代表绩效
+                    entry.setItemWeight(itemWeight);//加权得分
+                    info.getEntrys().add(entry);
+                }
+                PerformanProjectTwoFactory.getLocalInstance(ctx).save(info);
+            }
+        }
+
+        this.writeSuccessData(callService);
+
+    }
+}

+ 129 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanceScoringDEPEditHandler.java

@@ -0,0 +1,129 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.aliyun.odps.utils.StringUtils;
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.base.permission.UserInfo;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.emp.PersonPositionInfo;
+import com.kingdee.eas.hr.perf.PerformanceScoringCollection;
+import com.kingdee.eas.hr.perf.PerformanceScoringFactory;
+import com.kingdee.eas.hr.perf.PerformanceScoringInfo;
+import com.kingdee.eas.util.app.ContextUtil;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.ats.web.util.SHRBillUtil;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillEditHandler;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo;
+import org.apache.log4j.Logger;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import org.springframework.ui.ModelMap;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
+ * @Description 绩效评分_表单
+ * @Date 2024/12/24 16:20
+ * @Created by 30489
+ */
+public class PerformanceScoringDEPEditHandler extends DEPCustomBillEditHandler {
+    private static Logger logger = Logger.getLogger("com.kingdee.eas.custom.server.performanceScoring.handler.PerformanceScoringDEPEditHandler");
+    public void getPerfPeriodPersonAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        Map<String, Object> map = new HashMap<String, Object>();
+        String billId = request.getParameter("id");
+        try {
+            List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
+            StringBuilder sql = new StringBuilder();
+            sql.append("select").append("\n");
+            sql.append("org.fid orgId,").append("\n");
+            sql.append("org.Fname_l2 orgName,").append("\n");
+            sql.append("person.fid personId,").append("\n");
+            sql.append("person.fname_l2 personName").append("\n");
+            sql.append("from T_EVA_PerfEvaObject per ").append("\n");
+            sql.append("left join T_EVA_PerfEvaluAdminResponsor eva on per.fid = eva.FEVAOBJID").append("\n");
+            sql.append("left join T_ORG_admin org on org.fid = per.FEVALUORGADMINID").append("\n");
+            sql.append("left join T_BD_person person on person.fid = eva.FPERSONID").append("\n");
+            sql.append("where per.FPERIODID = '"+billId+"' and eva.fid is not null").append("\n");
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql.toString());
+            while (iRowSet.next()){
+                Map<String, Object> orgMap = new HashMap<String, Object>();
+                Map<String, Object> personMap = new HashMap<String, Object>();
+                Map<String, Object> integrationMap = new HashMap<String, Object>();
+                String orgId = iRowSet.getString("orgId");
+                String orgName = iRowSet.getString("orgName");
+                String personId = iRowSet.getString("personId");
+                String personName = iRowSet.getString("personName");
+                orgMap.put("id",orgId);
+                orgMap.put("name",orgName);
+                personMap.put("id",personId);
+                personMap.put("name",personName);
+                integrationMap.put("firstDep",orgMap);
+                integrationMap.put("chargeDepPerson",personMap);
+                list.add(integrationMap);
+            }
+            //评价组织
+            PersonInfo personInfo = SHRBillUtil.getCurrPersonInfo();
+            String personId = personInfo.getId().toString();
+            PersonPositionInfo personPositionInfo = SHRBillUtil.getAdminOrgUnitByPersonId(ctx, personId);
+            AdminOrgUnitInfo personDep = personPositionInfo.getPersonDep();
+            String depId = personDep.getId().toString();
+            String depName = personDep.getName();
+            Map<String, String> evaluationMap = new HashMap<String, String>();
+            evaluationMap.put("id",depId);
+            evaluationMap.put("name",depName);
+            map.put("msg","success");
+            map.put("list",list);
+            map.put("evaluationMap",evaluationMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+
+        this.writeSuccessData(map);
+    }
+
+    @Override
+    protected void beforeSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws SHRWebException {
+        super.beforeSave(request, response, model);
+        PerformanceScoringInfo performanceScoringInfo = (PerformanceScoringInfo)model;
+        //PerformanceScoringEntryCollection entrys = performanceScoringInfo.getEntrys();
+        Context ctx = SHRContext.getInstance().getContext();
+        UserInfo user = ContextUtil.getCurrentUserInfo(ctx);
+        String userId = user.getId().toString();
+        PerfPeriodInfo perforAppraisal = performanceScoringInfo.getPerforAppraisal();
+        String periodId = perforAppraisal.getId().toString();
+//        PersonInfo personInfo = SHRBillUtil.getCurrPersonInfo();
+//        String personId = personInfo.getId().toString();
+        performanceScoringInfo.getId();
+        if (performanceScoringInfo.getId() == null){
+            PerformanceScoringCollection performanceScoringCollection = null;
+            try {
+                performanceScoringCollection = PerformanceScoringFactory.getLocalInstance(ctx).
+                        getPerformanceScoringCollection("where creator = '" + userId + "' and perforAppraisal = '"+periodId+"'");
+            } catch (BOSException e) {
+                throw new RuntimeException(e);
+            }
+            if (performanceScoringCollection.size()>0){
+                PerformanceScoringInfo info = performanceScoringCollection.get(0);
+                String number = info.getNumber();
+                throw new ShrWebBizException("当前周期绩效评分已经创建,单据编号为" + number + "!");
+            }
+        }
+
+        performanceScoringInfo.setEvaluationDate(new Date());
+        HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+        hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+        performanceScoringInfo.setHrOrgUnit(hrOrgUnitInfo);
+    }
+
+
+}

+ 162 - 0
websrc/com/kingdee/eas/custom/performanceScoring/handler/PerformanceScoringSumDEPEditHandler.java

@@ -0,0 +1,162 @@
+package com.kingdee.eas.custom.performanceScoring.handler;
+
+import com.aliyun.odps.utils.StringUtils;
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.emp.PersonPositionInfo;
+import com.kingdee.eas.hr.perf.*;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.ats.web.util.SHRBillUtil;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.web.handler.DEPCustomBillEditHandler;
+import com.kingdee.shr.perfweb.app.base.evalplan.PerfPeriodInfo;
+import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+
+/**
+ * @Description 绩效评分汇总_表单
+ * @Date 2024/12/25 11:00
+ * @Created by 30489
+ */
+public class PerformanceScoringSumDEPEditHandler extends DEPCustomBillEditHandler {
+
+    private static Logger logger = Logger.getLogger("com.kingdee.eas.custom.performanceScoring.handler.PerformanceScoringSumDEPEditHandler");
+    public void getPerformanceScoringDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        Map<String, Object> map = new HashMap<String, Object>();
+        String billId = request.getParameter("id");//考核周期id
+        try {
+            PerformanceScoringCollection scoringCollection = PerformanceScoringFactory.getLocalInstance(ctx).
+                    getPerformanceScoringCollection("where billState = 3 and perforAppraisal = '"+billId+"'");
+            if (scoringCollection.size()==0){
+                throw new ShrWebBizException("系统不存在周期绩效评分的数据,请检查!");
+            }
+            getPerformanceSumInfo(billId,ctx);
+            List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
+            StringBuilder sql = new StringBuilder();
+            sql.append("select").append("\n");
+            sql.append("org.fid orgId,").append("\n");
+            sql.append("org.Fname_l2 orgName,").append("\n");
+            sql.append("person.fid personId,").append("\n");
+            sql.append("person.fname_l2 personName,").append("\n");
+            sql.append("sum(entry.CFSCORE), avg(entry.CFSCORE) avgNumber").append("\n");
+            sql.append("FROM CT_PF_PerformanceScoring per").append("\n");
+            sql.append("left join CT_PF_PerformanceScoringEntry entry on per.fid = entry.FPARENTID").append("\n");
+            sql.append("left join T_ORG_admin org on org.fid = entry.CFFIRSTDEPID").append("\n");
+            sql.append("left join T_BD_person person on person.fid = entry.CFCHARGEDEPPERSONI").append("\n");
+            sql.append("where per.CFPERFORAPPRAISALI = '"+billId+"' and per.FBILLSTATE = 3").append("\n");
+            sql.append("group by org.fid,org.Fname_l2,person.fid,person.fname_l2").append("\n");
+            sql.append("ORDER BY avg(entry.CFSCORE) desc").append("\n");
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql.toString());
+            while (iRowSet.next()){
+                Map<String, Object> orgMap = new HashMap<String, Object>();
+                Map<String, Object> personMap = new HashMap<String, Object>();
+                Map<String, Object> integrationMap = new HashMap<String, Object>();
+                String orgId = iRowSet.getString("orgId");
+                String orgName = iRowSet.getString("orgName");
+                String personId = iRowSet.getString("personId");
+                String personName = iRowSet.getString("personName");
+                BigDecimal avgNumber = iRowSet.getBigDecimal("avgNumber").setScale(1, RoundingMode.HALF_UP);
+                orgMap.put("id",orgId);
+                orgMap.put("name",orgName);
+                personMap.put("id",personId);
+                personMap.put("name",personName);
+                integrationMap.put("firstDep",orgMap);
+                integrationMap.put("chargeDepPerson",personMap);
+                integrationMap.put("score",avgNumber);
+                integrationMap.put("addMultiplyPart",BigDecimal.ZERO);
+                list.add(integrationMap);
+            }
+            PersonInfo personInfo = SHRBillUtil.getCurrPersonInfo();
+            String personId = personInfo.getId().toString();
+            PersonPositionInfo personPositionInfo = SHRBillUtil.getAdminOrgUnitByPersonId(ctx, personId);
+            AdminOrgUnitInfo personDep = personPositionInfo.getPersonDep();
+            String depId = personDep.getId().toString();
+            String depName = personDep.getName();
+            Map<String, String> evaluationMap = new HashMap<String, String>();
+            evaluationMap.put("id",depId);
+            evaluationMap.put("name",depName);
+            map.put("msg","success");
+            map.put("list",list);
+            map.put("evaluationMap",evaluationMap);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+        this.writeSuccessData(map);
+    }
+
+
+//    @Override
+//    protected IObjectPK runSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws Exception {
+//        PerformanceScoringSumInfo performanceScoringSumInfo = (PerformanceScoringSumInfo)model;
+//        Context ctx = SHRContext.getInstance().getContext();
+//        String perId = performanceScoringSumInfo.getPerforAppraisal().getId().toString();
+//        getPerformanceSumInfo(perId,ctx);
+//        performanceScoringSumInfo.setEvaluationDate(new Date());
+//        HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+//        hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+//        performanceScoringSumInfo.setHrOrgUnit(hrOrgUnitInfo);
+//        return super.runSave(request, response, model);
+//    }
+//
+//
+    public void getPerformanceSumInfo (String id,Context ctx) throws ShrWebBizException {
+        PerformanceScoringSumCollection performanceScoringSumCollection = null;
+        try {
+            performanceScoringSumCollection = PerformanceScoringSumFactory.getLocalInstance(ctx).getPerformanceScoringSumCollection("select *,perforAppraisal.* where perforAppraisal = '" + id + "'");
+        } catch (BOSException e) {
+            throw new RuntimeException(e);
+        }
+        if (performanceScoringSumCollection.size() >0){
+            PerformanceScoringSumInfo info = performanceScoringSumCollection.get(0);
+            PerfPeriodInfo perfPeriodInfo = info.getPerforAppraisal();
+            throw new ShrWebBizException("当前周期绩效评分汇总单据已经创建,单据编号"+info.getNumber()+"!");
+        }
+    }
+
+
+    @Override
+    protected void beforeSave(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws SHRWebException {
+        super.beforeSave(request, response, model);
+        PerformanceScoringSumInfo performanceScoringSumInfo = (PerformanceScoringSumInfo)model;
+        Context ctx = SHRContext.getInstance().getContext();
+        String perId = performanceScoringSumInfo.getPerforAppraisal().getId().toString();
+
+        PerformanceScoringCollection scoringCollection = null;
+        try {
+            scoringCollection = PerformanceScoringFactory.getLocalInstance(ctx).
+                    getPerformanceScoringCollection("where billState = 3 and perforAppraisal = '"+perId+"'");
+        } catch (BOSException e) {
+            throw new RuntimeException(e);
+        }
+        if (scoringCollection.size()==0){
+            throw new ShrWebBizException("系统不存在周期绩效评分的数据,请检查!");
+        }
+        if (performanceScoringSumInfo.getId()==null){
+            getPerformanceSumInfo(perId,ctx);
+        }
+        performanceScoringSumInfo.setEvaluationDate(new Date());
+        HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+        hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+        performanceScoringSumInfo.setHrOrgUnit(hrOrgUnitInfo);
+    }
+
+}