Pārlūkot izejas kodu

微信模板消息

xujunwei 4 gadi atpakaļ
vecāks
revīzija
1754ffbb42

+ 9 - 0
framework-common/src/main/java/com/mrxu/framework/common/cache/CacheObject.java

@@ -0,0 +1,9 @@
+package com.mrxu.framework.common.cache;
+
+public interface CacheObject {
+	
+	String getKey();
+	
+	Object getValue(String tenantId);
+	
+}

+ 51 - 0
framework-common/src/main/java/com/mrxu/framework/common/cache/CacheTooler.java

@@ -0,0 +1,51 @@
+package com.mrxu.framework.common.cache;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Hashtable;
+
+public class CacheTooler {
+	
+	private static final Logger logger = LoggerFactory.getLogger(CacheTooler.class);
+	
+	public static Hashtable<String,CacheValue> cache = new Hashtable<String,CacheValue>();
+	
+	//本地缓存默认10s
+	private static long default_valid = 10;
+	
+	public static <T> T getValue(String tenantId,CacheObject object) {
+		return getValue(tenantId, object,default_valid);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public static <T> T getValue(String tenantId,CacheObject object,long second) {
+		String key = tenantId+object.getKey();
+		CacheValue cacheValue = cache.get(key);
+		if(cacheValue == null) {
+			logger.info("本地缓存数据{}为空,获取数据。",key);
+			cacheValue = new CacheValue();
+			cacheValue.setValue(object.getValue(tenantId));
+			cacheValue.setValidTime(System.currentTimeMillis()+second*1000);
+			//更新缓存
+			cache.put(key,cacheValue);
+		}
+		else {
+			long validTime = cacheValue.getValidTime();
+			//缓存过期
+			if(System.currentTimeMillis() > validTime) {
+				logger.info("数据{}本地缓存超时,更新缓存数据",key);
+				cacheValue.setValue(object.getValue(tenantId));
+				cacheValue.setValidTime(System.currentTimeMillis()+second*1000);
+				//更新缓存
+				cache.put(key,cacheValue);
+			}
+		}
+		return (T) cacheValue.getValue();
+	}
+	
+	public static void clean(String tenantId,CacheObject object) {
+		cache.remove(tenantId+object.getKey());
+	}
+
+}

+ 34 - 0
framework-common/src/main/java/com/mrxu/framework/common/cache/CacheValue.java

@@ -0,0 +1,34 @@
+package com.mrxu.framework.common.cache;
+
+/**
+ * 缓存对象
+ * @author xujw
+ * 2017-8-2 22:31:29
+ */
+public class CacheValue {
+	
+	Object value ;
+	
+	/**
+	 * 有效截止毫秒数
+	 */
+	long validTime;
+
+	public Object getValue() {
+		return value;
+	}
+
+	public void setValue(Object value) {
+		this.value = value;
+	}
+
+	public long getValidTime() {
+		return validTime;
+	}
+
+	public void setValidTime(long validTime) {
+		this.validTime = validTime;
+	}
+	
+
+}

+ 41 - 0
framework-common/src/main/java/com/mrxu/framework/common/weixin/api/TemplateMsgApi.java

@@ -0,0 +1,41 @@
+package com.mrxu.framework.common.weixin.api;
+
+import com.alibaba.fastjson.JSONObject;
+import com.mrxu.framework.common.weixin.base.NullWxResult;
+import com.mrxu.framework.common.weixin.base.WxHttp;
+import com.mrxu.framework.common.weixin.bean.TemplateMsgResult;
+
+public class TemplateMsgApi {
+	
+	//添加模板消息
+	private static String addMsg = "https://api.weixin.qq.com/cgi-bin/template/api_add_template";
+	
+	//发送模板消息
+	private static String sendMsg = "https://api.weixin.qq.com/cgi-bin/message/template/send";
+	
+	//删除模板消息
+	private static String delMsg = "https://api.weixin.qq.com/cgi-bin/template/del_private_template";
+	
+	/**
+	 * 参考:http://mp.weixin.qq.com/wiki/17/304c1885ea66dbedf7dc170d84999a9d.html
+	 * @param token
+	 * @return
+	 */
+	public static NullWxResult sendMsg(String token, JSONObject json) {
+		return WxHttp.post(NullWxResult.class, sendMsg+"?access_token="+token, json);
+	}
+	
+	public static TemplateMsgResult addMsg(String token, String shortId) {
+		JSONObject json = new JSONObject();
+		json.put("template_id_short", shortId);
+		return WxHttp.post(TemplateMsgResult.class, addMsg+"?access_token="+token, json);
+	}
+	
+	public static NullWxResult delete(String token,String templateId) {
+		JSONObject json = new JSONObject();
+		json.put("template_id", templateId);
+		return WxHttp.post(NullWxResult.class,delMsg+"?access_token="+token, json);
+	}
+	
+	
+}

+ 6 - 0
framework-common/src/main/java/com/mrxu/framework/common/weixin/base/NullWxResult.java

@@ -0,0 +1,6 @@
+package com.mrxu.framework.common.weixin.base;
+
+
+public class NullWxResult extends WxResult {
+
+}

+ 34 - 0
framework-common/src/main/java/com/mrxu/framework/common/weixin/bean/TemplateMsgResult.java

@@ -0,0 +1,34 @@
+package com.mrxu.framework.common.weixin.bean;
+
+
+import com.mrxu.framework.common.weixin.base.WxResult;
+
+public class TemplateMsgResult extends WxResult {
+
+    /**
+     * 模版Id
+     */
+    private String template_id;
+
+    /**
+     * 模版消息Id
+     */
+    private String msgid;
+
+    public String getTemplate_id() {
+        return template_id;
+    }
+
+    public void setTemplate_id(String template_id) {
+        this.template_id = template_id;
+    }
+
+    public String getMsgid() {
+        return msgid;
+    }
+
+    public void setMsgid(String msgid) {
+        this.msgid = msgid;
+    }
+
+}

+ 147 - 0
framework-common/src/main/java/com/mrxu/framework/common/weixin/enums/TemplateMsgEnum.java

@@ -0,0 +1,147 @@
+package com.mrxu.framework.common.weixin.enums;
+
+public enum TemplateMsgEnum {
+	
+	/**
+	 * 待配送订单通知
+	 * {{first.DATA}}
+		订单编号:{{keyword1.DATA}}
+		所属店铺:{{keyword2.DATA}}
+		配送商品:{{keyword3.DATA}}
+		下单时间:{{keyword4.DATA}}
+		配送地址:{{keyword5.DATA}}
+		{{remark.DATA}}
+	 */
+	wait_post("OPENTM416687402","待配送订单通知"),
+	
+	/**
+	 * 经营报告通知
+	 * {{first.DATA}}
+		销售金额:{{keyword1.DATA}}
+		交易次数:{{keyword2.DATA}}
+		其它指标:{{keyword3.DATA}}
+		{{remark.DATA}}
+	 */
+	sale_static("OPENTM414306962","经营报告通知"),
+	
+	/**
+	 * {{first.DATA}}
+		订单号:{{keyword1.DATA}}
+		时间:{{keyword2.DATA}}
+		收货人:{{keyword3.DATA}}
+		收货人联系方式:{{keyword4.DATA}}
+		收货人地址:{{keyword5.DATA}}
+		{{remark.DATA}}
+	 */
+	new_order("OPENTM202808944","新订单通知"),
+	
+	/**
+    {{first.DATA}}
+	当前操作:{{keyword1.DATA}}
+	验证码:{{keyword2.DATA}}
+	{{remark.DATA}}
+	}
+	 */
+	OPERATION("OPENTM200738487","操作验证码提醒"),
+	
+	/**
+    {{first.DATA}}
+	变动内容:{{keyword1.DATA}}
+	变动情况:{{keyword2.DATA}}
+	变动数量:{{keyword3.DATA}}
+	{{remark.DATA}}
+	 */
+	POINT_CHANGE("OPENTM206919250","会员积分变动情况通知"),
+	
+	/**
+	{{first.DATA}}
+	金额:{{keyword1.DATA}}
+	入账时间:{{keyword2.DATA}}
+	{{remark.DATA}}
+	 */
+	INCOME("OPENTM207106349","入账通知"),
+	
+	/**
+	{{first.DATA}}
+	充值金额:{{keyword1.DATA}}
+	充值时间:{{keyword2.DATA}}
+	账户总额:{{keyword3.DATA}}
+	{{remark.DATA}}
+	 */
+	RECHARGE("OPENTM205041253","充值成功提醒"),
+	
+	/**
+	{{first.DATA}}
+	过期事项:{{keyword1.DATA}}
+	即将过期时间:{{keyword2.DATA}}
+	{{remark.DATA}}
+	 */
+	TIMEOUT("OPENTM401096849","即将过期提醒"),
+	
+	/**
+	{{first.DATA}}
+	礼品名称:{{keyword1.DATA}}
+	礼品数量:{{keyword2.DATA}}
+	领取时间:{{keyword3.DATA}}
+	{{remark.DATA}} 
+	 */
+	GET_GIFT("OPENTM203067265","礼品领取成功通知"),
+	
+	/**
+	 {{first.DATA}}
+	场地名称:{{keyword1.DATA}}
+	预约人数:{{keyword2.DATA}}
+	预约时间:{{keyword3.DATA}}
+	场地地址:{{keyword4.DATA}}
+	客服电话:{{keyword5.DATA}}
+	{{remark.DATA}}
+	 */
+	ROOM_ORDER("OPENTM406398422","预约服务成功通知"),
+	
+	/**
+	 *{{first.DATA}}
+	房间名称:{{keyword1.DATA}}
+	订单编号:{{keyword2.DATA}}
+	{{remark.DATA}}
+	 */
+	UNORDER("OPENTM406851570","退订成功通知"),
+	
+	/**
+	{{first.DATA}}
+	消费门店:{{keyword1.DATA}}
+	消费金额:{{keyword2.DATA}}
+	支付方式:{{keyword3.DATA}}
+	赠送积分:{{keyword4.DATA}}
+	消费时间:{{keyword5.DATA}}
+	{{remark.DATA}}
+	 */
+	CONSUME("OPENTM405846851","消费成功通知");
+	
+	
+	//原始id
+	private String originId;
+	//名称
+	private String caption;
+	
+	private TemplateMsgEnum(String originId,String caption) {
+		this.originId = originId;
+		this.caption = caption;
+	}
+
+	public String getOriginId() {
+		return originId;
+	}
+
+	public void setOriginId(String originId) {
+		this.originId = originId;
+	}
+
+	public String getCaption() {
+		return caption;
+	}
+
+	public void setCaption(String caption) {
+		this.caption = caption;
+	}
+	
+}