package edu.fudan.weixin.model.processor; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import edu.fudan.eservice.common.utils.CommonUtil; import edu.fudan.weixin.model.message.JSONMessageBuilder; import edu.fudan.weixin.utils.AccessTokenHelper; import edu.fudan.weixin.utils.TACOAuth2Helper; public class PhoneMessageProcessor extends LongTermProcessor { private static final Pattern p=Pattern.compile( "^(电话|phone|dh)(.*)?$", Pattern.CASE_INSENSITIVE); public Map<String, Object> process(Map<String, Object> message) { String content = null, msgtype = String.valueOf(message.get("MsgType")); content = String.valueOf(message.get("Content")); if (!CommonUtil.isEmpty(content)&&p.matcher(content.trim()).matches() || "event".equalsIgnoreCase(msgtype) && "CLICK" .equalsIgnoreCase(String.valueOf(message.get("Event"))) && "phoneyp".equalsIgnoreCase(String.valueOf(message .get("EventKey")))) return super.process(message); else return null; } public JSONMessageBuilder _process(Map<String, Object> message) { String qkey=null; String content = String.valueOf(message.get("Content")); if (!CommonUtil.isEmpty(content)){ Matcher m = p.matcher(content); if (m.matches()) { qkey=m.group(2); } } JSONMessageBuilder jb=new JSONMessageBuilder(); if (CommonUtil.isEmpty(qkey)) { jb.setContent("请使用语言或者文字输入 电话、dh或phone开头接着要查询的部门或者号码末位(至少四位)\n如:电话信息办 或 phone3207"); return jb; } Object msg = TACOAuth2Helper.phoneyp(qkey).get("list"); if(msg==null||msg instanceof BasicDBObject) { if(msg!=null&&"access_denied".equalsIgnoreCase(((BasicDBObject)msg).getString("error"))) { AccessTokenHelper.getInstance().refetch(AccessTokenHelper.TAC); msg = TACOAuth2Helper.phoneyp(qkey).get("list"); } } if (msg!=null &&msg instanceof BasicDBList) { BasicDBList list = (BasicDBList) msg; if(list.size()>0) { StringBuffer ret=new StringBuffer(); ret.append("关键字:"+qkey); for (Object obj : list) { if(obj!=null &&obj instanceof BasicDBObject) { BasicDBObject bo=(BasicDBObject)obj; ret.append("\n"+bo.get("departname")+"\n"); String ph=bo.getString("telephonenumber"); ret.append(ph); String in=bo.getString("internalnumber"); if(!CommonUtil.isEmpty(in)&&!CommonUtil.eq(ph, in)) { ret.append(" 内线 "+in); } } } jb.setContent(ret.toString()); }else { jb.setContent("通过您提供的关键字"+qkey+"我们没有查询到相关的记录"); } }else { jb.setContent("TAC服务器没有返回数据,请稍候再试"); } return jb; } }