View Javadoc
1   package com.foxinmy.weixin4j.model.card;
2   
3   import java.io.Serializable;
4   import java.util.Arrays;
5   import java.util.Date;
6   import java.util.List;
7   
8   import com.alibaba.fastjson.JSONObject;
9   import com.alibaba.fastjson.annotation.JSONField;
10  import com.foxinmy.weixin4j.type.card.CardCodeType;
11  import com.foxinmy.weixin4j.type.card.CardColor;
12  
13  /**
14   * 卡券基本信息
15   *
16   * @className CouponBaseInfo
17   * @author jinyu(foxinmy@gmail.com)
18   * @date 2016年6月1日
19   * @since JDK 1.6
20   * @see Builder
21   */
22  public class CouponBaseInfo implements Serializable {
23  
24  	private static final long serialVersionUID = -5725424121330101717L;
25  
26  	/**
27  	 * 礼品卡信息,目前只有一个价格属性,礼品卡时必填
28  	 */
29  	@JSONField(name = "giftcard_info")
30  	private JSONObject giftcardInfo;
31  	/**
32  	 * 礼品卡最大可赠送次数,必填
33  	 */
34  	@JSONField(name = "max_give_friend_times")
35  	private int maxGiveFriendTimes;
36  	/**
37  	 * 卡券的商户logo,建议像素为300*300。
38  	 */
39  	@JSONField(name = "logo_url")
40  	private String logoUrl;
41  	/**
42  	 * 商户名字,字数上限为12个汉字,如:海底捞
43  	 */
44  	@JSONField(name = "brand_name")
45  	private String brandName;
46  	/**
47  	 * 卡券名,字数上限为9个汉字。(建议涵盖卡券属性、服务及金额),如:双人套餐100元兑换券
48  	 */
49  	private String title;
50  	/**
51  	 * 码型
52  	 */
53  	@JSONField(name = "code_type")
54  	private CardCodeType codeType;
55  	/**
56  	 * 卡券颜色
57  	 */
58  	@JSONField(name = "color")
59  	private CardColor cardColor;
60  	/**
61  	 * 卡券使用提醒,字数上限为16个汉字,如:请出示二维码
62  	 */
63  	private String notice;
64  	/**
65  	 * 卡券使用说明,字数上限为1024个汉字,如:不可与其他优惠同享
66  	 */
67  	private String description;
68  	/**
69  	 * 卡券库存的数量,上限为100000000。
70  	 */
71  	private JSONObject sku;
72  	/**
73  	 * 使用日期,有效期的信息。
74  	 */
75  	@JSONField(name = "date_info")
76  	private JSONObject date;
77  
78  	// 以下为选填字段
79  	/**
80  	 * 是否自定义Code码
81  	 */
82  	@JSONField(name = "use_custom_code")
83  	private Boolean useCustomCode;
84  	/**
85  	 * 指定特殊用户群体,礼品卡建议填写false
86  	 */
87  	@JSONField(name = "bind_openid")
88  	private Boolean bindOpenId;
89  	/**
90  	 * 客服电话
91  	 */
92  	@JSONField(name = "service_phone")
93  	private String servicePhone;
94  	/**
95  	 * 门店位置poiid。具备线下门店
96  	 */
97  	@JSONField(name = "location_id_list")
98  	private List<String> locationIds;
99  	/**
100 	 * 设置本卡券支持全部门店,与locationIds互斥
101 	 */
102 	@JSONField(name = "use_all_locations")
103 	private boolean useAllLocation;
104 	/**
105 	 * 卡券顶部居中的按钮,仅在卡券状 态正常(可以核销)时显示,如:立即使用
106 	 */
107 	@JSONField(name = "center_title")
108 	private String centerTitle;
109 	/**
110 	 * 顶部居中的url ,仅在卡券状态正常(可以核销)时显示,如:www.qq.com
111 	 */
112 	@JSONField(name = "center_url")
113 	private String centerUrl;
114 	/**
115 	 * 显示在入口下方的提示语 ,仅在卡券状态正常(可以核销)时显示,如:立即享受优惠
116 	 */
117 	@JSONField(name = "center_sub_title")
118 	private String centerSubTitle;
119 	/**
120 	 * 自定义跳转外链的入口名字,如:立即使用
121 	 */
122 	@JSONField(name = "custom_url_name")
123 	private String customTitle;
124 	/**
125 	 * 自定义跳转的URL,如:www.qq.com
126 	 */
127 	@JSONField(name = "custom_url")
128 	private String customUrl;
129 	/**
130 	 * 显示在入口右侧的提示语,如:更多惊喜
131 	 */
132 	@JSONField(name = "custom_url_sub_title")
133 	private String customSubTitle;
134 	/**
135 	 * 营销场景的自定义入口名称,如:产品介绍
136 	 */
137 	@JSONField(name = "promotion_url_name")
138 	private String promotionTitle;
139 	/**
140 	 * 入口跳转外链的地址链接,如:www.qq.com
141 	 */
142 	@JSONField(name = "promotion_url")
143 	private String promotionUrl;
144 	/**
145 	 * 显示在营销入口右侧的提示语,如:卖场大优惠
146 	 */
147 	@JSONField(name = "promotion_url_sub_title")
148 	private String promotionSubTitle;
149 	/**
150 	 * 第三方来源名,例如同程旅游、大众点评。
151 	 */
152 	private String source;
153 	/**
154 	 * 每人可领券的数量限制,不填写默认为50。礼品卡时须填0,不限制
155 	 */
156 	@JSONField(name = "get_limit")
157 	private int limitNum;
158 	/**
159 	 * 卡券领取页面是否可分享,礼品卡建议填写false
160 	 */
161 	@JSONField(name = "can_share")
162 	private boolean canShare;
163 	/**
164 	 * 卡券是否可转赠
165 	 */
166 	@JSONField(name = "can_give_friend")
167 	private boolean canGiveFriend;
168 
169 	@JSONField(name = "need_push_on_view")
170 	private Boolean needPushOnView;
171 	/**
172 	 * 礼品卡用属性,自定义cell对应的小程序username,格式为公众号原始id@app。如:gh_86a091e50ad4@app  选填
173 	 */
174 	@JSONField(name = "center_app_brand_user_name")
175 	private String centerAppBrandUserName;
176 	/**
177 	 * 礼品卡用属性,自定义cell对应的小程序路径. 如:pages/index/index  选填
178 	 */
179 	@JSONField(name = "center_app_brand_pass")
180 	private String centerAppBrandPass;
181 	/**
182 	 * 礼品卡用属性,自定义cell对应的小程序username,格式为公众号原始id@app   选填
183 	 */
184 	@JSONField(name = "custom_app_brand_user_name")
185 	private String customAppBrandUserName;
186 	/**
187 	 * 礼品卡用属性,自定义cell对应的小程序路径。选填
188 	 */
189 	@JSONField(name = "custom_app_brand_pass")
190 	private String customAppBrandPass;
191 	/**
192 	 * 礼品卡用属性,自定义cell对应的小程序username,格式为公众号原始id@app 选填
193 	 */
194 	@JSONField(name = "promotion_app_brand_user_name")
195 	private String promotionAppBrandUserName;
196 	/**
197 	 * 礼品卡用属性,自定义cell对应的小程序路径
198 	 */
199 	@JSONField(name = "promotion_app_brand_pass")
200 	private String promotionAppBrandPass;
201 
202 	private CouponBaseInfo(Builder builder) {
203 		this.giftcardInfo = builder.giftcardInfo;
204 		this.logoUrl = builder.logoUrl;
205 		this.maxGiveFriendTimes = builder.maxGiveFriendTimes;
206 		this.brandName = builder.brandName;
207 		this.title = builder.title;
208 		this.codeType = builder.codeType;
209 		this.cardColor = builder.cardColor;
210 		this.notice = builder.notice;
211 		this.description = builder.description;
212 		this.sku = builder.sku;
213 		this.date = builder.date;
214 		this.useCustomCode = builder.useCustomCode;
215 		this.bindOpenId = builder.bindOpenId;
216 		this.servicePhone = builder.servicePhone;
217 		this.locationIds = builder.locationIds;
218 		this.useAllLocation = builder.useAllLocation;
219 		this.centerTitle = builder.centerTitle;
220 		this.centerUrl = builder.centerUrl;
221 		this.centerSubTitle = builder.centerSubTitle;
222 		this.centerAppBrandUserName = builder.centerAppBrandUserName;
223 		this.centerAppBrandPass = builder.centerAppBrandPass;
224 		this.customTitle = builder.customTitle;
225 		this.customUrl = builder.customUrl;
226 		this.customSubTitle = builder.customSubTitle;
227 		this.customAppBrandUserName = builder.customAppBrandUserName;
228 		this.customAppBrandPass = builder.customAppBrandPass;
229 		this.promotionTitle = builder.promotionTitle;
230 		this.promotionUrl = builder.promotionUrl;
231 		this.promotionSubTitle = builder.promotionSubTitle;
232 		this.promotionAppBrandUserName = builder.promotionAppBrandUserName;
233 		this.promotionAppBrandPass = builder.promotionAppBrandPass;
234 		this.source = builder.source;
235 		this.limitNum = builder.limitNum;
236 		this.canShare = builder.canShare;
237 		this.canGiveFriend = builder.canGiveFriend;
238 		this.needPushOnView = builder.needPushOnView;
239 	};
240 
241 	public String getLogoUrl() {
242 		return logoUrl;
243 	}
244 
245 	public String getBrandName() {
246 		return brandName;
247 	}
248 
249 	public String getTitle() {
250 		return title;
251 	}
252 
253 	public CardCodeType getCodeType() {
254 		return codeType;
255 	}
256 
257 	public CardColor getCardColor() {
258 		return cardColor;
259 	}
260 
261 	public String getNotice() {
262 		return notice;
263 	}
264 
265 	public String getDescription() {
266 		return description;
267 	}
268 
269 	public JSONObject getSku() {
270 		return sku;
271 	}
272 
273 	public JSONObject getDate() {
274 		return date;
275 	}
276 
277 	public Boolean isUseCustomCode() {
278 		return useCustomCode;
279 	}
280 
281 	public Boolean isBindOpenId() {
282 		return bindOpenId;
283 	}
284 
285 	public String getServicePhone() {
286 		return servicePhone;
287 	}
288 
289 	public List<String> getLocationIds() {
290 		return locationIds;
291 	}
292 
293 	public boolean isUseAllLocation() {
294 		return useAllLocation;
295 	}
296 
297 	public String getCenterTitle() {
298 		return centerTitle;
299 	}
300 
301 	public String getCenterUrl() {
302 		return centerUrl;
303 	}
304 
305 	public String getCenterSubTitle() {
306 		return centerSubTitle;
307 	}
308 
309 	public String getCustomTitle() {
310 		return customTitle;
311 	}
312 
313 	public String getCustomUrl() {
314 		return customUrl;
315 	}
316 
317 	public String getCustomSubTitle() {
318 		return customSubTitle;
319 	}
320 
321 	public String getPromotionTitle() {
322 		return promotionTitle;
323 	}
324 
325 	public String getPromotionUrl() {
326 		return promotionUrl;
327 	}
328 
329 	public String getPromotionSubTitle() {
330 		return promotionSubTitle;
331 	}
332 
333 	public String getSource() {
334 		return source;
335 	}
336 
337 	public int getLimitNum() {
338 		return limitNum;
339 	}
340 
341 	public boolean isCanShare() {
342 		return canShare;
343 	}
344 
345 	public boolean isCanGiveFriend() {
346 		return canGiveFriend;
347 	}
348 
349 	public Boolean getNeedPushOnView() {
350 		return needPushOnView;
351 	}
352 
353 	public JSONObject getGiftcardInfo() {
354 		return giftcardInfo;
355 	}
356 
357 	public int getMaxGiveFriendTimes() {
358 		return maxGiveFriendTimes;
359 	}
360 
361 	public Boolean getUseCustomCode() {
362 		return useCustomCode;
363 	}
364 
365 	public Boolean getBindOpenId() {
366 		return bindOpenId;
367 	}
368 
369 	public String getCenterAppBrandUserName() {
370 		return centerAppBrandUserName;
371 	}
372 
373 	public String getCenterAppBrandPass() {
374 		return centerAppBrandPass;
375 	}
376 
377 	public String getCustomAppBrandUserName() {
378 		return customAppBrandUserName;
379 	}
380 
381 	public String getCustomAppBrandPass() {
382 		return customAppBrandPass;
383 	}
384 
385 	public String getPromotionAppBrandUserName() {
386 		return promotionAppBrandUserName;
387 	}
388 
389 	public String getPromotionAppBrandPass() {
390 		return promotionAppBrandPass;
391 	}
392 
393 	@Override
394 	public String toString() {
395 		return "CouponBaseInfo{" +
396 				"giftcardInfo=" + giftcardInfo +
397 				", maxGiveFriendTimes=" + maxGiveFriendTimes +
398 				", logoUrl='" + logoUrl + '\'' +
399 				", brandName='" + brandName + '\'' +
400 				", title='" + title + '\'' +
401 				", codeType=" + codeType +
402 				", cardColor=" + cardColor +
403 				", notice='" + notice + '\'' +
404 				", description='" + description + '\'' +
405 				", sku=" + sku +
406 				", date=" + date +
407 				", useCustomCode=" + useCustomCode +
408 				", bindOpenId=" + bindOpenId +
409 				", servicePhone='" + servicePhone + '\'' +
410 				", locationIds=" + locationIds +
411 				", useAllLocation=" + useAllLocation +
412 				", centerTitle='" + centerTitle + '\'' +
413 				", centerUrl='" + centerUrl + '\'' +
414 				", centerSubTitle='" + centerSubTitle + '\'' +
415 				", customTitle='" + customTitle + '\'' +
416 				", customUrl='" + customUrl + '\'' +
417 				", customSubTitle='" + customSubTitle + '\'' +
418 				", promotionTitle='" + promotionTitle + '\'' +
419 				", promotionUrl='" + promotionUrl + '\'' +
420 				", promotionSubTitle='" + promotionSubTitle + '\'' +
421 				", source='" + source + '\'' +
422 				", limitNum=" + limitNum +
423 				", canShare=" + canShare +
424 				", canGiveFriend=" + canGiveFriend +
425 				", needPushOnView=" + needPushOnView +
426 				", centerAppBrandUserName='" + centerAppBrandUserName + '\'' +
427 				", centerAppBrandPass='" + centerAppBrandPass + '\'' +
428 				", customAppBrandUserName='" + customAppBrandUserName + '\'' +
429 				", customAppBrandPass='" + customAppBrandPass + '\'' +
430 				", promotionAppBrandUserName='" + promotionAppBrandUserName + '\'' +
431 				", promotionAppBrandPass='" + promotionAppBrandPass + '\'' +
432 				'}';
433 	}
434 
435 	public void cleanCantUpdateField() {
436 		this.brandName = null;
437 //		this.title = null;
438 		this.sku = null;
439 		this.bindOpenId = null;
440 		this.useCustomCode = null;
441 	}
442 
443 	/**
444 	 * 卡券基础信息构造器
445 	 * 
446 	 * @className Builder
447 	 * @author jinyu(foxinmy@gmail.com)
448 	 * @date 2016年8月4日
449 	 * @since JDK 1.6
450 	 */
451 	public static final class Builder {
452 		/**
453 		 * 礼品卡信息,目前只有一个礼品卡的价格属性,必填
454 		 */
455 		private JSONObject giftcardInfo;
456 		/**
457 		 * 卡券的商户logo,建议像素为300*300
458 		 */
459 		private String logoUrl;
460 		/**
461 		 * 礼品卡最大可赠送次数,必填
462 		 */
463 		private int maxGiveFriendTimes;
464 		/**
465 		 * 商户名字,字数上限为12个汉字,如:海底捞
466 		 */
467 		private String brandName;
468 		/**
469 		 * 卡券名,字数上限为9个汉字。(建议涵盖卡券属性、服务及金额),如:双人套餐100元兑换券
470 		 */
471 		private String title;
472 		/**
473 		 * 码型
474 		 */
475 		private CardCodeType codeType;
476 		/**
477 		 * 卡券颜色
478 		 */
479 		private CardColor cardColor;
480 		/**
481 		 * 卡券使用提醒,字数上限为16个汉字,如:请出示二维码
482 		 */
483 		private String notice;
484 		/**
485 		 * 卡券使用说明,字数上限为1024个汉字,如:不可与其他优惠同享
486 		 */
487 		private String description;
488 		/**
489 		 * 卡券库存的数量,上限为100000000。
490 		 */
491 		private JSONObject sku;
492 		/**
493 		 * 使用日期,有效期的信息。
494 		 */
495 		private JSONObject date;
496 
497 		// 以下为选填字段
498 		/**
499 		 * 是否自定义Code码
500 		 */
501 		private boolean useCustomCode;
502 		/**
503 		 * 指定特殊用户群体
504 		 */
505 		private boolean bindOpenId;
506 		/**
507 		 * 客服电话
508 		 */
509 		private String servicePhone;
510 		/**
511 		 * 门店位置poiid。具备线下门店
512 		 */
513 		private List<String> locationIds;
514 		/**
515 		 * 设置本卡券支持全部门店,与locationIds互斥
516 		 */
517 		private boolean useAllLocation;
518 		/**
519 		 * 卡券顶部居中的按钮,仅在卡券状 态正常(可以核销)时显示,如:立即使用
520 		 */
521 		private String centerTitle;
522 		/**
523 		 * 顶部居中的url ,仅在卡券状态正常(可以核销)时显示,如:www.qq.com
524 		 */
525 		private String centerUrl;
526 		/**
527 		 * 显示在入口下方的提示语 ,仅在卡券状态正常(可以核销)时显示,如:立即享受优惠
528 		 */
529 		private String centerSubTitle;
530 		/**
531 		 * 自定义跳转外链的入口名字,如:立即使用
532 		 */
533 		private String customTitle;
534 		/**
535 		 * 自定义跳转的URL,如:www.qq.com
536 		 */
537 		private String customUrl;
538 		/**
539 		 * 显示在入口右侧的提示语,如:更多惊喜
540 		 */
541 		private String customSubTitle;
542 		/**
543 		 * 营销场景的自定义入口名称,如:产品介绍
544 		 */
545 		private String promotionTitle;
546 		/**
547 		 * 入口跳转外链的地址链接,如:www.qq.com
548 		 */
549 		private String promotionUrl;
550 		/**
551 		 * 显示在营销入口右侧的提示语,如:卖场大优惠
552 		 */
553 		private String promotionSubTitle;
554 		/**
555 		 * 第三方来源名,例如同程旅游、大众点评。
556 		 */
557 		private String source;
558 		/**
559 		 * 每人可领券的数量限制,不填写默认为50。
560 		 */
561 		private int limitNum;
562 		/**
563 		 * 卡券领取页面是否可分享,不填写默认true
564 		 */
565 		private boolean canShare;
566 		/**
567 		 * 卡券是否可转赠,不填写默认true
568 		 */
569 		private boolean canGiveFriend;
570 
571 		/**
572 		 * 用户点击进入卡券时推送事件
573 		 */
574 		private boolean needPushOnView;
575 		/**
576 		 * 自定义cell对应的小程序username,格式为公众号原始id@app。如:gh_86a091e50ad4@app  选填
577 		 */
578 		private String centerAppBrandUserName;
579 		/**
580 		 * 自定义cell对应的小程序路径. 如:pages/index/index  选填
581 		 */
582 		private String centerAppBrandPass;
583 		/**
584 		 * 自定义cell对应的小程序username,格式为公众号原始id@app   选填
585 		 */
586 		private String customAppBrandUserName;
587 		/**
588 		 * 自定义cell对应的小程序路径。选填
589 		 */
590 		private String customAppBrandPass;
591 		/**
592 		 * 自定义cell对应的小程序username,格式为公众号原始id@app
593 		 */
594 		private String promotionAppBrandUserName;
595 		/**
596 		 * 自定义cell对应的小程序路径
597 		 */
598 		private String promotionAppBrandPass;
599 
600 		/**
601 		 * 默认永久有效
602 		 */
603 		public Builder() {
604 			this.giftcardInfo = new JSONObject();
605 			this.maxGiveFriendTimes = 1;
606 			this.sku = new JSONObject();
607 			this.date = new JSONObject();
608 			this.date.put("type",CardActiveType.DATE_TYPE_PERMANENT);
609 			this.useAllLocation = true;
610 			this.canShare = true;
611 			this.canGiveFriend = true;
612 			this.limitNum = 50;
613 		}
614 
615 		public Builder customAppBrandPass(String pass){
616 			this.customAppBrandPass = pass;
617 			return this;
618 		}
619 
620 		public Builder centerAppBrandUserName(String name){
621 			this.centerAppBrandUserName = name;
622 			return this;
623 		}
624 
625 		public Builder centerAppBrandPass(String pass){
626 			this.centerAppBrandPass = pass;
627 			return this;
628 		}
629 
630 		public Builder customAppBrandUserName(String name){
631 			this.customAppBrandUserName = name;
632 			return this;
633 		}
634 
635 		public Builder promotionAppBrandUserName(String userName){
636 			this.promotionAppBrandUserName = userName;
637 			return this;
638 		}
639 
640 		public Builder promotionAppBrandPass(String pass){
641 			this.promotionAppBrandPass = pass;
642 			return this;
643 		}
644 
645 		public Builder maxGiveFriendTimes(int times){
646 			this.maxGiveFriendTimes = times;
647 			return this;
648 		}
649 
650 		public Builder price(int price){
651 			this.giftcardInfo.put("price", price);
652 			return this;
653 		}
654 
655 		/**
656 		 * 设置商户logo
657 		 * 
658 		 * @param logoUrl
659 		 *            卡券的商户logo,建议像素为300*300。
660 		 * @return
661 		 */
662 		public Builder logoUrl(String logoUrl) {
663 			this.logoUrl = logoUrl;
664 			return this;
665 		}
666 
667 		/**
668 		 * 设置商户名字
669 		 * 
670 		 * @param brandName
671 		 *            商户名字,字数上限为12个汉字
672 		 * @return
673 		 */
674 		public Builder brandName(String brandName) {
675 			this.brandName = brandName;
676 			return this;
677 		}
678 
679 		/**
680 		 * 设置卡券名
681 		 * 
682 		 * @param title
683 		 *            卡券名,字数上限为9个汉字。(建议涵盖卡券属性、服务及金额)。
684 		 * @return
685 		 */
686 		public Builder title(String title) {
687 			this.title = title;
688 			return this;
689 		}
690 
691 		/**
692 		 * 设置码型
693 		 * 
694 		 * @param codeType
695 		 *            码型
696 		 * @return
697 		 */
698 		public Builder codeType(CardCodeType codeType) {
699 			this.codeType = codeType;
700 			return this;
701 		}
702 
703 		/**
704 		 * 设置卡券颜色
705 		 * 
706 		 * @param cardColor
707 		 *            卡券颜色
708 		 * @return
709 		 */
710 		public Builder cardColor(CardColor cardColor) {
711 			this.cardColor = cardColor;
712 			return this;
713 		}
714 
715 		/**
716 		 * 设置卡券使用提醒
717 		 * 
718 		 * @param notice
719 		 *            卡券使用提醒,字数上限为16个汉字。
720 		 * @return
721 		 */
722 		public Builder notice(String notice) {
723 			this.notice = notice;
724 			return this;
725 		}
726 
727 		/**
728 		 * 设置卡券使用说明
729 		 * 
730 		 * @param description
731 		 *            卡券使用说明,字数上限为1024个汉字。
732 		 * @return
733 		 */
734 		public Builder description(String description) {
735 			this.description = description;
736 			return this;
737 		}
738 
739 		/**
740 		 * 设置卡券库存的数量
741 		 * 
742 		 * @param quantity
743 		 *            卡券库存的数量,上限为100000000。
744 		 * 
745 		 * @return
746 		 */
747 		public Builder quantity(int quantity) {
748 			quantity = quantity > 100000000 ? 100000000 : quantity;
749 			this.sku.put("quantity", quantity);
750 			return this;
751 		}
752 
753 		/**
754 		 * 设置卡券在某个时间范围有效
755 		 * 
756 		 * @param beginTime
757 		 *            表示起用时间
758 		 * @param endTime
759 		 *            表示结束时间,建议设置为截止日期的23:59:59过期
760 		 * @return
761 		 */
762 		public Builder activeAt(Date beginTime, Date endTime) {
763 			this.date.clear();
764 			this.date.put("type", CardActiveType.DATE_TYPE_FIX_TIME_RANGE);
765 			this.date.put("begin_timestamp", beginTime.getTime() / 1000l);
766 			this.date.put("end_timestamp", endTime.getTime() / 1000l);
767 			return this;
768 		}
769 
770 		/**
771 		 * 设置卡券在领取多少天后有效
772 		 * 
773 		 * @param days
774 		 *            表示自领取后多少天内有效,不支持填写0。
775 		 * @param beginDays
776 		 *            表示自领取后多少天开始生效,领取后当天生效填写0。(单位为天)
777 		 * @param endTime
778 		 *            表示卡券统一过期时间,建议设置为截止日期的23:59:59过期。(东八区时间,单位为秒),设置了days卡券,
779 		 *            当时间达到end_timestamp时卡券统一过期
780 		 * @return
781 		 */
782 		public Builder activeAt(int days, int beginDays, Date endTime) {
783 			this.date.clear();
784 			this.date.put("type", CardActiveType.DATE_TYPE_FIX_TERM);
785 			this.date.put("fixed_term", days);
786 			this.date.put("fixed_begin_term", beginDays);
787 			this.date.put("end_timestamp", endTime.getTime() / 1000l);
788 			return this;
789 		}
790 
791 		/**
792 		 * 设置卡券在领取多少天后有效
793 		 *
794 		 * @param days
795 		 *            表示自领取后多少天内有效,不支持填写0。
796 		 * @param beginDays
797 		 *            表示自领取后多少天开始生效,领取后当天生效填写0。(单位为天)
798 		 * @return
799 		 */
800 		public Builder activeAt(int days, int beginDays) {
801 			this.date.clear();
802 			this.date.put("type", CardActiveType.DATE_TYPE_FIX_TERM);
803 			this.date.put("fixed_term", days);
804 			this.date.put("fixed_begin_term", beginDays);
805 			return this;
806 		}
807 
808 		/**
809 		 * 设置是否自定义Code码
810 		 * 
811 		 * @param useCustomCode
812 		 *            填写true或false,默认为false。
813 		 * @return
814 		 */
815 		public Builder useCustomCode(boolean useCustomCode) {
816 			this.useCustomCode = useCustomCode;
817 			return this;
818 		}
819 
820 		/**
821 		 * 设置是否指定用户领取,填写true或false
822 		 * 
823 		 * @param bindOpenId
824 		 *            默认为false。通常指定特殊用户群体 投放卡券或防止刷券时选择指定用户领取。
825 		 * @return
826 		 */
827 		public Builder bindOpenId(boolean bindOpenId) {
828 			this.bindOpenId = bindOpenId;
829 			return this;
830 		}
831 
832 		/**
833 		 * 设置客服电话
834 		 * 
835 		 * @param servicePhone
836 		 *            客服电话
837 		 * @return
838 		 */
839 		public Builder servicePhone(String servicePhone) {
840 			this.servicePhone = servicePhone;
841 			return this;
842 		}
843 
844 		/**
845 		 * 设置门店位置poiid。具备线下门店 的商户为必填
846 		 * 
847 		 * @param locationIds
848 		 *            门店列表
849 		 * @return
850 		 */
851 		public Builder locationIds(String... locationIds) {
852 			this.locationIds.addAll(Arrays.asList(locationIds));
853 			this.useAllLocation = false;
854 			return this;
855 		}
856 
857 		/**
858 		 * 设置卡券顶部居中的按钮,仅在卡券状态正常(可以核销)时显示
859 		 * 
860 		 * @param centerTitle
861 		 *            按钮文字
862 		 * @return
863 		 */
864 		public Builder centerTitle(String centerTitle) {
865 			this.centerTitle = centerTitle;
866 			return this;
867 		}
868 
869 		/**
870 		 * 设置顶部居中的url ,仅在卡券状态正常(可以核销)时显示
871 		 * 
872 		 * @param centerUrl
873 		 *            按钮链接
874 		 * @return
875 		 */
876 		public Builder centerUrl(String centerUrl) {
877 			this.centerUrl = centerUrl;
878 			return this;
879 		}
880 
881 		/**
882 		 * 设置显示在入口下方的提示语 ,仅在卡券状态正常(可以核销)时显示。
883 		 * 
884 		 * @param centerSubTitle
885 		 *            入口下方的提示语
886 		 * @return
887 		 */
888 		public Builder centerSubTitle(String centerSubTitle) {
889 			this.centerSubTitle = centerSubTitle;
890 			return this;
891 		}
892 
893 		/**
894 		 * 设置自定义跳转外链的入口名字
895 		 * 
896 		 * @param customTitle
897 		 *            自定义外链入口文字
898 		 * @return
899 		 */
900 		public Builder customTitle(String customTitle) {
901 			this.customTitle = customTitle;
902 			return this;
903 		}
904 
905 		/**
906 		 * 设置自定义跳转的URL
907 		 * 
908 		 * @param customUrl
909 		 *            跳转链接
910 		 * @return
911 		 */
912 		public Builder customUrl(String customUrl) {
913 			this.customUrl = customUrl;
914 			return this;
915 		}
916 
917 		/**
918 		 * 设置显示在入口右侧的提示语
919 		 * 
920 		 * @param customSubTitle
921 		 *            入口右侧的提示语
922 		 * @return
923 		 */
924 		public Builder customSubTitle(String customSubTitle) {
925 			this.customSubTitle = customSubTitle;
926 			return this;
927 		}
928 
929 		/**
930 		 * 设置营销场景的自定义入口名称
931 		 * 
932 		 * @param promotionTitle
933 		 *            自定义入口文字
934 		 * @return
935 		 */
936 		public Builder promotionTitle(String promotionTitle) {
937 			this.promotionTitle = promotionTitle;
938 			return this;
939 		}
940 
941 		/**
942 		 * 设置入口跳转外链的地址链接。
943 		 * 
944 		 * @param promotionUrl
945 		 *            入口跳转链接
946 		 * @return
947 		 */
948 		public Builder promotionUrl(String promotionUrl) {
949 			this.promotionUrl = promotionUrl;
950 			return this;
951 		}
952 
953 		/**
954 		 * 设置显示在营销入口右侧的提示语
955 		 * 
956 		 * @param promotionSubTitle
957 		 *            入口右侧的提示语
958 		 * @return
959 		 */
960 		public Builder promotionSubTitle(String promotionSubTitle) {
961 			this.promotionSubTitle = promotionSubTitle;
962 			return this;
963 		}
964 
965 		/**
966 		 * 设置第三方来源名,例如同程旅游、大众点评。
967 		 * 
968 		 * @param source
969 		 *            来源
970 		 * @return
971 		 */
972 		public Builder source(String source) {
973 			this.source = source;
974 			return this;
975 		}
976 
977 		/**
978 		 * 设置每人可领券的数量限制,不填写默认为50。
979 		 * 
980 		 * @param limitNum
981 		 *            限制数量
982 		 * @return
983 		 */
984 		public Builder limitNum(int limitNum) {
985 			this.limitNum = limitNum;
986 			return this;
987 		}
988 
989 		/**
990 		 * 设置卡券领取页面是否可分享。
991 		 * 
992 		 * @param canShare
993 		 *            是否可以分享
994 		 * @return
995 		 */
996 		public Builder canShare(boolean canShare) {
997 			this.canShare = canShare;
998 			return this;
999 		}
1000 
1001 		/**
1002 		 * 设置卡券是否可转赠
1003 		 * 
1004 		 * @param canGiveFriend
1005 		 *            是否可以转赠
1006 		 * @return
1007 		 */
1008 		public Builder canGiveFriend(boolean canGiveFriend) {
1009 			this.canGiveFriend = canGiveFriend;
1010 			return this;
1011 		}
1012 
1013 		public Builder needPushOnView(boolean needPushOnView){
1014 			this.needPushOnView = needPushOnView;
1015 			return this;
1016 		}
1017 
1018 		/**
1019 		 * 返回卡券的基础信息
1020 		 * 
1021 		 * @return 卡券基础信息
1022 		 */
1023 		public CouponBaseInfo build() {
1024 			return new CouponBaseInfo(this);
1025 		}
1026 
1027 		/**
1028 		 * 卡券使用时间类型
1029 		 * 
1030 		 * @className CardActiveType
1031 		 * @author jinyu(foxinmy@gmail.com)
1032 		 * @date 2016年8月5日
1033 		 * @since JDK 1.7
1034 		 * @see
1035 		 */
1036 		public enum CardActiveType {
1037 			/**
1038 			 * 表示固定日期区间
1039 			 */
1040 			DATE_TYPE_FIX_TIME_RANGE,
1041 			/**
1042 			 * 表示固定时长 (自领取后按天算。
1043 			 */
1044 			DATE_TYPE_FIX_TERM, /**
1045 			 * 永久有效
1046 			 */
1047 			DATE_TYPE_PERMANENT;
1048 		}
1049 	}
1050 }