package edu.fudan.weixin.subscribe; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.alibaba.fastjson.JSON; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import edu.fudan.weixin.entity.EcardConsume; import edu.fudan.weixin.kafka.PrintCallback; import edu.fudan.weixin.model.TemplateMessage; import kafka.message.MessageAndMetadata; public class EcardCallback extends PrintCallback { static Log log=LogFactory.getLog(EcardCallback.class); static DateFormat df=new SimpleDateFormat("yyyyMMddHHmmss"); @Override public void process(MessageAndMetadata<String, String> m) { Object obj=BooksHolder.INSTANCE.getItem(m.key(), "ecard_consume"); String openid=BooksHolder.INSTANCE.getOpenid(m.key()); EcardConsume consume=null; long consumedate=0; if (obj instanceof Number) { consume=JSON.parseObject(m.message(), EcardConsume.class); try { consumedate=df.parse(consume.getTransdate()+consume.getTranstime()).getTime(); } catch (ParseException e) { e.printStackTrace(); } if(consume.getAmount()>((Number)obj).floatValue()) { sendConsume(consume,openid); } } obj=BooksHolder.INSTANCE.getItem(m.key(), "ecard_low"); if (obj instanceof Number) { if(consume==null){ consume=JSON.parseObject(m.message(), EcardConsume.class); try { consumedate=df.parse(consume.getTransdate()+consume.getTranstime()).getTime(); } catch (ParseException e) { e.printStackTrace(); } } //交易时间在最近三小时内 if(consume.getCardaftbal()<((Number)obj).floatValue()&&System.currentTimeMillis()-consumedate<10800000L) { sendLow(consume,openid); } } if(consume!=null) log.info(consume); } private void sendConsume(EcardConsume consume,String openid){ if(consume==null||consume.getTransflag()!=1 &&consume.getTransflag()!=2) return; DBObject data=new BasicDBObject().append("first", "亲爱的"+consume.getCustname()+"("+consume.getStuempno()+"),您的一卡通在 \""+consume.getShop()+"\" 产生了一笔交易。"); data.put("keyword1", consume.getNiceTranstime()); switch(consume.getTransflag()) { case 1: data.put("keyword2", "充值");break; case 2:data.put("keyword2", "消费");break; default: data.put("keyword2","未知"); } data.put("keyword3", consume.getAmount()+"元"); data.put("keyword4",consume.getStatus()==3?"交易成功":consume.getRemark()); data.put("keyword5", consume.getCardaftbal()+"元"); data.put("remark", "本提醒不作为入账凭证,最终交易结果和余额以一卡通系统为准。"); log.info(TemplateMessage.send("ecard_consume", openid, data)); } private void sendLow(EcardConsume consume,String openid){ if(consume==null||consume.getTransflag()!=1 &&consume.getTransflag()!=2) return; DBObject data=new BasicDBObject().append("first","截至"+consume.getNiceTranstime()+ "您的一卡通余额即将用完。"); data.put("name", consume.getCustname()+"("+consume.getStuempno()+")"); data.put("money", consume.getCardaftbal()+"元"); data.put("remark", "为了不影响您的正常消费请及时充值。"); log.info(TemplateMessage.send("ecard_low", openid, data)); } @Override public String[] getSubscribeTopics() { return new String[]{"ecardtest","ecard"}; } }