View Javadoc
1   package com.foxinmy.weixin4j.tuple;
2   
3   import java.util.Arrays;
4   import java.util.LinkedList;
5   import java.util.List;
6   
7   import javax.xml.bind.annotation.XmlElement;
8   import javax.xml.bind.annotation.XmlTransient;
9   
10  import com.alibaba.fastjson.annotation.JSONField;
11  
12  /**
13   * 图文对象(mpnews消息与news消息类似,不同的是图文消息内容存储在微信后台,并且支持保密选项。每个应用每天最多可以发送100次)
14   * <p>
15   * <font color="red">可用于「公众平台的群发消息」「客服消息」</font>
16   * </p>
17   * <li>当用于发送公众平台的群发消息和客服消息时:其中mediaId与articles请至少保持一个有值 <li>
18   * 当用于发送企业号的客服消息时:其中articles必须有值
19   *
20   * @className MpNews
21   * @author jinyu(foxinmy@gmail.com)
22   * @date 2014年9月29日
23   * @since JDK 1.6
24   * @see
25   */
26  public class MpNews implements MassTuple, NotifyTuple {
27  
28  	private static final long serialVersionUID = 8853054484809101524L;
29  
30  	/**
31  	 * 允许最多的图文列表数
32  	 */
33  	private static final int MAX_ARTICLE_COUNT = 8;
34  
35  	@Override
36  	public String getMessageType() {
37  		return "mpnews";
38  	}
39  
40  	/**
41  	 * 上传图文列表后微信返回的媒体ID
42  	 */
43  	@JSONField(name = "media_id")
44  	@XmlElement(name = "MediaId")
45  	private String mediaId;
46  	/**
47  	 * 图文列表
48  	 */
49  	@XmlTransient
50  	private LinkedList<MpArticle> articles;
51  
52  	/**
53  	 * 群发消息、客服消息 预先上传List#MpArticle得到mediaId
54  	 *
55  	 * @param mediaId
56  	 *            群发素材的媒体ID
57  	 */
58  	public MpNews(String mediaId) {
59  		this.mediaId = mediaId;
60  		this.articles = new LinkedList<MpArticle>();
61  	}
62  
63  	/**
64  	 * 群发消息 自动上传List#MpArticle得到mediaId
65  	 *
66  	 * @param articles
67  	 *            文章列表
68  	 */
69  	public MpNews(MpArticle... articles) {
70  		this.articles = new LinkedList<MpArticle>(Arrays.asList(articles));
71  	}
72  
73  	/**
74  	 * @param thumbMediaId
75  	 *            缩略图
76  	 * @param title
77  	 *            标题
78  	 * @param content
79  	 *            内容
80  	 */
81  	public MpNews addArticle(String thumbMediaId, String title, String content) {
82  		return addArticle(new MpArticle(thumbMediaId, title, content));
83  	}
84  
85  	public MpNews addArticle(MpArticle... articles) {
86  		for (MpArticle article : articles) {
87  			this.articles.add(article);
88  		}
89  		return this;
90  	}
91  
92  	public MpNews addFirstArticle(MpArticle article) {
93  		articles.addFirst(article);
94  		return this;
95  	}
96  
97  	public MpNews addLastArticle(MpArticle article) {
98  		articles.addLast(article);
99  		return this;
100 	}
101 
102 	public MpNews removeFirstArticle() {
103 		articles.removeFirst();
104 		return this;
105 	}
106 
107 	public MpNews removeLastArticle() {
108 		articles.removeLast();
109 		return this;
110 	}
111 
112 	@JSONField(serialize = false)
113 	@XmlTransient
114 	public boolean isMaxCount() {
115 		return articles.size() == MAX_ARTICLE_COUNT;
116 	}
117 
118 	public List<MpArticle> getArticles() {
119 		if (articles.size() > MAX_ARTICLE_COUNT) {
120 			return articles.subList(0, MAX_ARTICLE_COUNT);
121 		} else {
122 			return articles;
123 		}
124 	}
125 
126 	@JSONField(serialize = false)
127 	@XmlTransient
128 	public List<MpArticle> getFullArticles() {
129 		return articles;
130 	}
131 
132 	public String getMediaId() {
133 		return mediaId;
134 	}
135 
136 	@Override
137 	public String toString() {
138 		return "MpNews [articles=" + articles + ", mediaId=" + mediaId + "]";
139 	}
140 }