From 3696b813dd6bf62cf93bdf305c8671ca2d77c7f4 Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 8 Jun 2015 18:21:43 +0800 Subject: [PATCH] =?UTF-8?q?weixin4j-base:=E6=96=B0=E5=A2=9E=E7=BE=A4?= =?UTF-8?q?=E5=8F=91=E5=8D=A1=E5=88=B8=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGE.md | 4 + weixin4j-base/CHANGE.md | 6 +- .../java/com/foxinmy/weixin4j/tuple/Card.java | 47 +++++ .../java/com/foxinmy/weixin4j/tuple/File.java | 4 - .../com/foxinmy/weixin4j/tuple/Image.java | 4 - .../com/foxinmy/weixin4j/tuple/MassTuple.java | 1 + .../com/foxinmy/weixin4j/tuple/MpArticle.java | 16 +- .../com/foxinmy/weixin4j/tuple/MpVideo.java | 4 - .../com/foxinmy/weixin4j/tuple/Music.java | 4 - .../java/com/foxinmy/weixin4j/tuple/Text.java | 2 - .../com/foxinmy/weixin4j/tuple/Video.java | 4 - .../dispatcher/WeixinMessageMatcher.java | 192 ------------------ .../messagekey/WeixinMessageMatcher.java | 42 ++++ 13 files changed, 101 insertions(+), 229 deletions(-) create mode 100644 weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java delete mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java create mode 100644 weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java diff --git a/CHANGE.md b/CHANGE.md index 2edf2625..f2e8970f 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -314,3 +314,7 @@ * 2015-06-04 + **weixin4j-mp**: 新增查询红包接口 + +* 2015-06-08 + + + **weixin4j-base**: 新增群发卡券消息类型 diff --git a/weixin4j-base/CHANGE.md b/weixin4j-base/CHANGE.md index 4759d5c1..d8aa65f2 100644 --- a/weixin4j-base/CHANGE.md +++ b/weixin4j-base/CHANGE.md @@ -52,4 +52,8 @@ * 2015-05-07 - + 删除ResponseTuple接口 \ No newline at end of file + + 删除ResponseTuple接口 + +* 2015-06-08 + + + 新增群发卡券消息类型 \ No newline at end of file diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java new file mode 100644 index 00000000..1941ed08 --- /dev/null +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Card.java @@ -0,0 +1,47 @@ +package com.foxinmy.weixin4j.tuple; + +import javax.xml.bind.annotation.XmlElement; + +import com.alibaba.fastjson.annotation.JSONField; + +/** + * 卡券对象 + *

+ * 可用于「群发消息」 + *

+ * + * @className Card + * @author jy + * @date 2015年6月8日 + * @since JDK 1.7 + * @see + */ +public class Card implements MassTuple { + + private static final long serialVersionUID = 6119453633595102147L; + + @Override + public String getMessageType() { + return "wxcard"; + } + + /** + * 上传后的微信返回的媒体ID + */ + @JSONField(name = "card_id") + @XmlElement(name = "CardId") + private String cardId; + + public Card(String cardId) { + this.cardId = cardId; + } + + public String getCardId() { + return cardId; + } + + @Override + public String toString() { + return "Card [cardId=" + cardId + "]"; + } +} diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java index 1fb1b4a9..407edbd2 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/File.java @@ -40,10 +40,6 @@ public class File implements NotifyTuple { return mediaId; } - public void setMediaId(String mediaId) { - this.mediaId = mediaId; - } - @Override public String toString() { return "File [mediaId=" + mediaId + "]"; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java index 75e11dca..f4e1a0d1 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Image.java @@ -40,10 +40,6 @@ public class Image implements MassTuple, NotifyTuple { return mediaId; } - public void setMediaId(String mediaId) { - this.mediaId = mediaId; - } - @Override public String toString() { return "Image [mediaId=" + mediaId + "]"; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MassTuple.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MassTuple.java index 50f84bcd..441d9d57 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MassTuple.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MassTuple.java @@ -12,6 +12,7 @@ package com.foxinmy.weixin4j.tuple; * @see com.foxinmy.weixin4j.tuple.Voice * @see com.foxinmy.weixin4j.tuple.MpVideo * @see com.foxinmy.weixin4j.tuple.MpNews + * @see com.foxinmy.weixin4j.tuple.Card */ public interface MassTuple extends Tuple { diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java index 8f2cab25..184455f6 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpArticle.java @@ -46,13 +46,13 @@ public class MpArticle implements Serializable { */ @JSONField(name = "show_cover_pic") private String showCoverPic; - + /** * 正文的URL 可为空 */ @JSONField(name = "content_url") private String contentUrl; - + /** * 封面图片的URL 可为空 */ @@ -73,10 +73,6 @@ public class MpArticle implements Serializable { return thumbMediaId; } - public void setThumbMediaId(String thumbMediaId) { - this.thumbMediaId = thumbMediaId; - } - public String getAuthor() { return author; } @@ -89,10 +85,6 @@ public class MpArticle implements Serializable { return title; } - public void setTitle(String title) { - this.title = title; - } - public String getSourceUrl() { return sourceUrl; } @@ -105,10 +97,6 @@ public class MpArticle implements Serializable { return content; } - public void setContent(String content) { - this.content = content; - } - public String getDigest() { return digest; } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java index edb5e678..60e76462 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/MpVideo.java @@ -40,10 +40,6 @@ public class MpVideo implements MassTuple { return mediaId; } - public void setMediaId(String mediaId) { - this.mediaId = mediaId; - } - @Override public String toString() { return "MpVideo [mediaId=" + mediaId + "]"; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java index 0fb3de2c..d9d884d1 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Music.java @@ -104,10 +104,6 @@ public class Music implements NotifyTuple { return thumbMediaId; } - public void setThumbMediaId(String thumbMediaId) { - this.thumbMediaId = thumbMediaId; - } - @Override public String toString() { return "Music [title=" + title + ", desc=" + desc + ", musicUrl=" diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java index 83d5c589..87232032 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Text.java @@ -1,6 +1,5 @@ package com.foxinmy.weixin4j.tuple; -import javax.xml.bind.annotation.XmlRootElement; /** * 文本对象 @@ -14,7 +13,6 @@ import javax.xml.bind.annotation.XmlRootElement; * @since JDK 1.7 * @see */ -@XmlRootElement(name = "Content") public class Text implements MassTuple, NotifyTuple { private static final long serialVersionUID = 520050144519064503L; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java index 91ee2e4f..4e30195f 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/tuple/Video.java @@ -73,10 +73,6 @@ public class Video implements NotifyTuple { return mediaId; } - public void setMediaId(String mediaId) { - this.mediaId = mediaId; - } - public String getThumbMediaId() { return thumbMediaId; } diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java deleted file mode 100644 index 07e88f2d..00000000 --- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/dispatcher/WeixinMessageMatcher.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.foxinmy.weixin4j.dispatcher; - -import io.netty.util.internal.logging.InternalLogger; -import io.netty.util.internal.logging.InternalLoggerFactory; - -import java.util.HashMap; -import java.util.Map; - -import com.foxinmy.weixin4j.message.ImageMessage; -import com.foxinmy.weixin4j.message.LocationMessage; -import com.foxinmy.weixin4j.message.TextMessage; -import com.foxinmy.weixin4j.message.VideoMessage; -import com.foxinmy.weixin4j.message.VoiceMessage; -import com.foxinmy.weixin4j.message.event.LocationEventMessage; -import com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner; -import com.foxinmy.weixin4j.mp.event.KfCloseEventMessage; -import com.foxinmy.weixin4j.mp.event.KfCreateEventMessage; -import com.foxinmy.weixin4j.mp.event.KfSwitchEventMessage; -import com.foxinmy.weixin4j.mp.event.MassEventMessage; -import com.foxinmy.weixin4j.mp.event.ScanEventMessage; -import com.foxinmy.weixin4j.mp.event.TemplatesendjobfinishMessage; -import com.foxinmy.weixin4j.qy.event.BatchjobresultMessage; -import com.foxinmy.weixin4j.qy.event.EnterAgentEventMessage; -import com.foxinmy.weixin4j.type.AccountType; -import com.foxinmy.weixin4j.type.EventType; -import com.foxinmy.weixin4j.type.MessageType; - -/** - * 微信消息匹配(不够优雅,待改进) - * - * @className WeixinMessageMatcher - * @author jy - * @date 2015年5月17日 - * @since JDK 1.7 - * @see com.foxinmy.weixin4j.request.WeixinMessage - * @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner - */ -public class WeixinMessageMatcher { - - private final InternalLogger logger = InternalLoggerFactory - .getInstance(getClass()); - - private final Map> key2ClassMap; - private final Map, String> class2KeyMap; - - private final WeixinMessageKeyDefiner messageKeyDefiner; - - public WeixinMessageMatcher(WeixinMessageKeyDefiner messageKeyDefiner) { - this.messageKeyDefiner = messageKeyDefiner; - key2ClassMap = new HashMap>(); - class2KeyMap = new HashMap, String>(); - init0(); - init1(); - init2(); - init3(); - logger.info("detected message for events: {}", key2ClassMap.keySet()); - } - - public WeixinMessageKeyDefiner getMessageKeyDefiner() { - return messageKeyDefiner; - } - - private String messageKey(MessageType messageType) { - return messageKeyDefiner.defineMessageKey(messageType.name(), null, - null); - } - - private String mpEventMessageKey(EventType eventType) { - return messageKeyDefiner.defineMessageKey(MessageType.event.name(), - eventType.name(), AccountType.MP); - } - - private String qyEventMessageKey(EventType eventType) { - return messageKeyDefiner.defineMessageKey(MessageType.event.name(), - eventType.name(), AccountType.QY); - } - - private void init0() { - // ///////////////////////////////////////////////// - /******************** 普通消息 ********************/ - // ///////////////////////////////////////////////// - regist(messageKey(MessageType.text), TextMessage.class); - regist(messageKey(MessageType.image), ImageMessage.class); - regist(messageKey(MessageType.voice), VoiceMessage.class); - regist(messageKey(MessageType.video), VideoMessage.class); - regist(messageKey(MessageType.shortvideo), VideoMessage.class); - regist(messageKey(MessageType.location), LocationMessage.class); - } - - private void init1() { - // ///////////////////////////////////////////////// - /******************** 事件消息 ********************/ - // ///////////////////////////////////////////////// - for (EventType eventType : new EventType[] { EventType.subscribe, - EventType.unsubscribe }) { - regist(mpEventMessageKey(eventType), - com.foxinmy.weixin4j.mp.event.ScribeEventMessage.class); - } - for (EventType eventType : new EventType[] { EventType.subscribe, - EventType.unsubscribe }) { - regist(qyEventMessageKey(eventType), - com.foxinmy.weixin4j.qy.event.ScribeEventMessage.class); - } - Class clazz = LocationEventMessage.class; - regist(mpEventMessageKey(EventType.location), clazz); - regist(qyEventMessageKey(EventType.location), clazz); - for (EventType eventType : new EventType[] { EventType.click, - EventType.view }) { - clazz = com.foxinmy.weixin4j.message.event.MenuEventMessage.class; - regist(mpEventMessageKey(eventType), clazz); - regist(qyEventMessageKey(eventType), clazz); - } - for (EventType eventType : new EventType[] { EventType.scancode_push, - EventType.scancode_waitmsg }) { - clazz = com.foxinmy.weixin4j.message.event.MenuScanEventMessage.class; - regist(mpEventMessageKey(eventType), clazz); - regist(qyEventMessageKey(eventType), clazz); - } - for (EventType eventType : new EventType[] { EventType.pic_sysphoto, - EventType.pic_photo_or_album, EventType.pic_weixin }) { - clazz = com.foxinmy.weixin4j.message.event.MenuPhotoEventMessage.class; - regist(mpEventMessageKey(eventType), clazz); - regist(qyEventMessageKey(eventType), clazz); - } - clazz = com.foxinmy.weixin4j.message.event.MenuLocationEventMessage.class; - regist(mpEventMessageKey(EventType.location_select), clazz); - regist(qyEventMessageKey(EventType.location_select), clazz); - } - - private void init2() { - // ///////////////////////////////////////////////// - /******************** 公众平台事件消息 ********************/ - // ///////////////////////////////////////////////// - regist(mpEventMessageKey(EventType.scan), ScanEventMessage.class); - regist(mpEventMessageKey(EventType.masssendjobfinish), - MassEventMessage.class); - regist(mpEventMessageKey(EventType.templatesendjobfinish), - TemplatesendjobfinishMessage.class); - regist(mpEventMessageKey(EventType.kf_create_session), - KfCreateEventMessage.class); - regist(mpEventMessageKey(EventType.kf_close_session), - KfCloseEventMessage.class); - regist(mpEventMessageKey(EventType.kf_switch_session), - KfSwitchEventMessage.class); - } - - private void init3() { - // ///////////////////////////////////////////////// - /******************** 企业号事件消息 ********************/ - // ///////////////////////////////////////////////// - regist(qyEventMessageKey(EventType.batch_job_result), - BatchjobresultMessage.class); - regist(qyEventMessageKey(EventType.enter_agent), - EnterAgentEventMessage.class); - } - - /** - * 注册一个消息类型 - * - * @param messageKey - * 消息的key - * @param clazz - * 消息类型 - */ - public void regist(String messageKey, Class clazz) { - key2ClassMap.put(messageKey, clazz); - class2KeyMap.put(clazz, messageKey); - } - - /** - * 匹配到消息 - * - * @param keyOrClass - * 消息key或者消息类型 - * @return 匹配结果 - */ - public boolean match(Object keyOrClass) { - return key2ClassMap.containsKey(keyOrClass) - || class2KeyMap.containsKey(keyOrClass); - } - - /** - * 消息key找到消息类型 - * - * @param messageKey - * 消息key - * @return 消息类型 - */ - public Class find(String messageKey) { - return key2ClassMap.get(messageKey); - } -} diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java new file mode 100644 index 00000000..f8f1d678 --- /dev/null +++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/messagekey/WeixinMessageMatcher.java @@ -0,0 +1,42 @@ +package com.foxinmy.weixin4j.messagekey; + +/** + * 微信消息匹配 + * + * @className WeixinMessageMatcher + * @author jy + * @date 2015年5月17日 + * @since JDK 1.7 + * @see com.foxinmy.weixin4j.request.WeixinMessage + * @see com.foxinmy.weixin4j.messagekey.WeixinMessageKeyDefiner + */ +public interface WeixinMessageMatcher { + + /** + * 消息是否匹配 + * + * @param messageKeyOrMessageClass + * 消息key或者消息类型 + * @return 匹配结果 + */ + public boolean match(Object messageKeyOrMessageClass); + + /** + * 匹配到消息类型 + * + * @param messageKey + * 消息key + * @return 消息类型 + */ + public Class match(String messageKey); + + /** + * 注册messageClass + * + * @param messageKey + * 消息key + * @param messageClass + * 消息类型 + */ + public void regist(String messageKey, Class messageClass); +}