浏览代码

添加对象工作流分配

9060 1 月之前
父节点
当前提交
7989fc4485
共有 1 个文件被更改,包括 852 次插入47 次删除
  1. 852 47
      websrc/com/kingdee/eas/hr/perf/handler/PerfEvaluObjectListHandlerEx.java

+ 852 - 47
websrc/com/kingdee/eas/hr/perf/handler/PerfEvaluObjectListHandlerEx.java

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