|
@@ -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);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|