qingwu 5 月之前
父節點
當前提交
e0b275cae5
共有 1 個文件被更改,包括 199 次插入3 次删除
  1. 199 3
      src/com/kingdee/eas/hr/perf/task/PerInterviewFacadeControllerBean.java

+ 199 - 3
src/com/kingdee/eas/hr/perf/task/PerInterviewFacadeControllerBean.java

@@ -1,8 +1,29 @@
 package com.kingdee.eas.hr.perf.task;
 
+import com.kingdee.bos.metadata.MetaDataLoaderFactory;
+import com.kingdee.bos.metadata.entity.*;
+import com.kingdee.bos.metadata.management.LanguageCollection;
+import com.kingdee.bos.metadata.management.SolutionInfo;
+import com.kingdee.bos.metadata.query.util.CompareType;
+import com.kingdee.bos.service.message.Message;
+import com.kingdee.bos.service.message.agent.MessageFactory;
+import com.kingdee.bos.service.message.agent.SenderAgent;
+import com.kingdee.eas.base.message.MsgBizType;
+import com.kingdee.eas.base.message.MsgPriority;
+import com.kingdee.eas.base.message.MsgSourceStatus;
+import com.kingdee.eas.base.message.MsgType;
+import com.kingdee.eas.base.permission.UserInfo;
+import com.kingdee.eas.csinterface.biz.util.DBUtils;
+import com.kingdee.eas.util.app.ContextUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.perfweb.app.base.evalplan.*;
 import org.apache.log4j.Logger;
+
 import javax.ejb.*;
 import java.rmi.RemoteException;
+import java.sql.SQLException;
+import java.util.*;
+
 import com.kingdee.bos.*;
 import com.kingdee.bos.util.BOSObjectType;
 import com.kingdee.bos.metadata.IMetaDataPK;
@@ -18,13 +39,188 @@ import com.kingdee.bos.service.ServiceContext;
 import com.kingdee.bos.service.IServiceContext;
 
 
-public class PerInterviewFacadeControllerBean extends AbstractPerInterviewFacadeControllerBean
-{
+public class PerInterviewFacadeControllerBean extends AbstractPerInterviewFacadeControllerBean {
     private static Logger logger =
-        Logger.getLogger("com.kingdee.eas.hr.perf.task.PerInterviewFacadeControllerBean");
+            Logger.getLogger("com.kingdee.eas.hr.perf.task.PerInterviewFacadeControllerBean");
 
     @Override
     protected void _sendEarlyWarning(Context ctx) throws BOSException {
         super._sendEarlyWarning(ctx);
+        //考核等級
+        Set levelSet = new HashSet();
+        levelSet.add("C");
+        levelSet.add("D");
+        Map evaResultSummaryMap = null;
+        try {
+            //考核结果
+            IEvaResultSummary iEvaResultSummary = EvaResultSummaryFactory.getLocalInstance(ctx);
+            //面谈
+            IInterview iInterview = InterviewFactory.getLocalInstance(ctx);
+            Map interviewMap = new HashMap();
+            InterviewCollection interviewCollection = iInterview.getInterviewCollection();
+            for (int i = 0; i < interviewCollection.size(); i++) {
+                InterviewInfo interviewInfo = interviewCollection.get(i);
+                String evaResultSummaryId = interviewInfo.getEvaResultSummary().getId().toString();
+                interviewMap.put(evaResultSummaryId, interviewInfo);
+            }
+            //获取所有人的直接上级
+            Map personOfParentMap = getPersonOfParentAll(ctx);
+            //获取绩效考核等级为C/D的数据
+            SelectorItemCollection sic = getSelectorItemCollection();
+            FilterInfo filterInfo = new FilterInfo();
+            FilterItemCollection filterItems = filterInfo.getFilterItems();
+            filterItems.add(new FilterItemInfo("gradeLevel", levelSet, CompareType.INCLUDE));
+            EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+            EvaResultSummaryCollection evaResultSummaryCollection = iEvaResultSummary.getEvaResultSummaryCollection(entityViewInfo);
+            //
+            StringBuilder body = new StringBuilder();
+            evaResultSummaryMap = new HashMap();
+            for (int i = 0; i < evaResultSummaryCollection.size(); i++) {
+                EvaResultSummaryInfo evaResultSummaryInfo = evaResultSummaryCollection.get(i);
+                String id = evaResultSummaryInfo.getId().toString();
+                String number = evaResultSummaryInfo.getNumber();
+                String personId = evaResultSummaryInfo.getPerson().getId().toString();
+                String personName = evaResultSummaryInfo.getPerson().getName();
+                String gradeLevel = evaResultSummaryInfo.getGradeLevel().toString();
+                if (!interviewMap.containsKey(id)) {
+                    evaResultSummaryMap.put(number, evaResultSummaryInfo);
+                    evaResultSummaryMap.put(personId, personOfParentMap.get(personId));
+                    body.append("员工:[").append(personName).append("]绩效为").append(gradeLevel).append(",您还未进行绩效面谈,请及时处理。").append("\n");
+                }
+            }
+            sendMessage(ctx, body.toString());
+        } catch (SQLException e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
     }
+
+    /**
+     * 消息发送
+     *
+     * @param ctx
+     * @param body
+     */
+    public void sendMessage(Context ctx, String body) {
+        logger.error("start-----");
+        UserInfo currentUserInfo = ContextUtil.getCurrentUserInfo(ctx);
+        //以下是发送一个消息的核心片断,如果针对的是某组织批量发送,自己的需要取得组织的用户ID集合,然后构造receiver
+        SenderAgent senderAgent = SenderAgent.getSenderAgent();
+        Message message;
+        Locale[] lcla = getContextLocales(ctx);//获取ctx的语言信息列表
+        logger.error("lcla---" + lcla);
+        Locale locale = null;
+        message = MessageFactory.newMessage("kingdee.workflow");//生成一个消息对象
+        for (int j = 0, m = lcla.length; j < m; j++) {
+            //此处循环进行多语言消息的设置
+            locale = lcla[j];
+            message.setLocaleStringHeader("title", "绩效考核预警", locale);//设置消息标题
+            message.setLocaleStringHeader("sender", "专员", locale);//设置发送人,属于文本,不是ID
+            message.setLocaleStringHeader("body", body, locale);//设置消息体内容,根据具体业务自己设定
+            message.setLocaleStringHeader("initiatorName", "专员", locale);
+
+        }
+        message.setIntHeader("type", MsgType.NOTICE_VALUE);//设置消息类型为通知
+        message.setIntHeader("bizType", MsgBizType.FORWARN_VALUE);//业务类型设置为工作流
+        message.setIntHeader("sourceStatus", MsgSourceStatus.EMPTY_VALUE);//设置任务状态,此处是通知消息,所以设置空
+        message.setIntHeader("priority", MsgPriority.MIDDLE_VALUE);//设置消息优先级,自己根据需要设定相应的级别
+        message.setStringHeader("databaseCenter", ctx.getAIS());//得到数据中心
+        message.setStringHeader("solution", ctx.getSolution());//设置解决方案
+        //设置接收者,后面那参数是用户ID,多个ID可用分号";"分割
+        message.setStringHeader("receiver", currentUserInfo.getId().toString());
+        logger.error("senderAgent.getState() -----" + senderAgent.getState());
+        if (senderAgent.getState() == 1) {
+            senderAgent.start();
+        }
+        senderAgent.sendMessage(message); //发送消息
+        logger.error("end-----");
+
+    }
+
+    /**
+     * 获取ctx的语言信息列表
+     *
+     * @param ctx
+     * @return
+     */
+    public static Locale[] getContextLocales(Context ctx) {
+        Locale[] locales = null;
+        SolutionInfo solu = MetaDataLoaderFactory.getLocalMetaDataLoader(ctx)
+                .getSolution();
+
+        if (solu != null) {
+            LanguageCollection langs = solu.getLanguages();
+            if (langs != null) {
+
+                locales = new Locale[langs.size()];
+
+                for (int i = 0; i < langs.size(); i++) {
+                    locales[i] = langs.get(i).getLocale();
+                }
+            }
+        }
+
+        return locales;
+    }
+
+    /**
+     * 获取所有人员的直接上级
+     *
+     * @param ctx
+     * @return
+     * @throws BOSException
+     * @throws SQLException
+     */
+    public Map getPersonOfParentAll(Context ctx) throws BOSException, SQLException {
+        StringBuilder sb = new StringBuilder();
+        Map map = new HashMap();
+        sb.append("select ").append("\n");
+        sb.append("personParent.fnumber as personParentNumber , ").append("\n");
+        sb.append("personParent.fid as personParentId , ").append("\n");
+        sb.append("personParent.fname_l2  as personParentName , ").append("\n");
+        sb.append("person.fnumber as personNumber , ").append("\n");
+        sb.append("person.fid as personId , ").append("\n");
+        sb.append("person.fname_l2  as personName ").append("\n");
+        sb.append("from T_ORG_PositionMember positioonMenber").append("\n");
+        sb.append("    left join T_ORG_Position position on position.fid = positioonMenber.FPositionID").append("\n");
+        sb.append("    left join T_ORG_Position positionParent on position.fid = positionParent.FPARENTID").append("\n");
+        sb.append("    left join T_HR_EmpOrgRelation empOrgRelation on empOrgRelation.FPOSITIONID  = positionParent.fid").append("\n");
+        sb.append("    left join t_Bd_person person on person.fid = empOrgRelation.FPERSONID and empOrgRelation.FIsSystem='1'").append("\n");
+        sb.append("    left join t_Bd_person personParent on  personParent.fid = positioonMenber.FPERSONID").append("\n");
+        IRowSet iRowSet = DBUtils.executeQuery(ctx, sb.toString());
+        while (iRowSet.next()) {
+            map.put(iRowSet.getString("personId"), iRowSet.getString("personParentId"));
+        }
+        return map;
+    }
+
+    /**
+     * 查询字段
+     *
+     * @return
+     */
+    public SelectorItemCollection getSelectorItemCollection() {
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("gradeLevel");//考核等級
+        sic.add("id");//考核等級
+        sic.add("name");//员工名称
+        sic.add("number");//员工编码
+        sic.add("evaObj.id");//评估对象
+        sic.add("evaObj.name");
+        sic.add("evaObj.number");
+        sic.add("evaPlan.id");//考核计划
+        sic.add("evaPlan.name");
+        sic.add("evaPlan.number");
+        sic.add("period.id");//考核周期
+        sic.add("period.name");
+        sic.add("period.number");
+        sic.add("period.id");//考核周期
+        sic.add("period.name");
+        sic.add("period.number");
+        sic.add("person.id");//人员
+        sic.add("person.name");
+        sic.add("person.number");
+        return sic;
+    }
+
 }