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