#565 小程序增加数据分析相关 API

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* 小程序:增加代码管理相关 API

* 小程序:增加修改服务器地址、成员管理 API

* 小程序:增加数据分析相关 API
This commit is contained in:
Charming
2018-04-29 21:50:11 +08:00
committed by Binary Wang
parent ba93544473
commit 3c2249eae8
19 changed files with 1048 additions and 0 deletions

View File

@@ -1,6 +1,9 @@
package cn.binarywang.wx.miniapp.util.json;
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaRetainInfo;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaUserPortrait;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitDistribution;
import cn.binarywang.wx.miniapp.bean.code.WxMaCodeCommitRequest;
import cn.binarywang.wx.miniapp.bean.code.WxMaCodeVersionDistribution;
import com.google.gson.Gson;
@@ -17,6 +20,9 @@ public class WxMaGsonBuilder {
INSTANCE.registerTypeAdapter(WxMaTemplateMessage.class, new WxMaTemplateMessageGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaCodeCommitRequest.class, new WxMaCodeCommitRequestGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaCodeVersionDistribution.class, new WxMaCodeVersionDistributionGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaVisitDistribution.class, new WxMaVisitDistributionGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaRetainInfo.class, new WxMaRetainInfoGsonAdapter());
INSTANCE.registerTypeAdapter(WxMaUserPortrait.class, new WxMaUserPortraitGsonAdapter());
}
public static Gson create() {

View File

@@ -0,0 +1,52 @@
package cn.binarywang.wx.miniapp.util.json;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaRetainInfo;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import me.chanjar.weixin.common.util.json.GsonHelper;
import java.lang.reflect.Type;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author <a href="https://github.com/charmingoh">Charming</a>
* @since 2018-04-28
*/
public class WxMaRetainInfoGsonAdapter implements JsonDeserializer<WxMaRetainInfo> {
@Override
public WxMaRetainInfo deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
if (json == null) {
return null;
}
WxMaRetainInfo retainInfo = new WxMaRetainInfo();
JsonObject object = json.getAsJsonObject();
String refDate = GsonHelper.getString(object, "ref_date");
retainInfo.setRefDate(refDate);
retainInfo.setVisitUvNew(getAsMap(object, "visit_uv_new"));
retainInfo.setVisitUv(getAsMap(object, "visit_uv"));
return retainInfo;
}
private Map<Integer, Integer> getAsMap(JsonObject object, String memberName) {
JsonArray array = object.getAsJsonArray(memberName);
if (array != null && array.size() > 0) {
Map<Integer, Integer> map = new LinkedHashMap<>(array.size());
for (JsonElement element : array) {
JsonObject elementObject = element.getAsJsonObject();
Integer key = GsonHelper.getInteger(elementObject, "key");
if (key != null) {
Integer value = GsonHelper.getInteger(elementObject, "value");
map.put(key, value);
}
}
return map;
}
return null;
}
}

View File

@@ -0,0 +1,67 @@
package cn.binarywang.wx.miniapp.util.json;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaUserPortrait;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import me.chanjar.weixin.common.util.json.GsonHelper;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Type;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author <a href="https://github.com/charmingoh">Charming</a>
* @since 2018-04-28
*/
public class WxMaUserPortraitGsonAdapter implements JsonDeserializer<WxMaUserPortrait> {
@Override
public WxMaUserPortrait deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
if (json == null) {
return null;
}
WxMaUserPortrait portrait = new WxMaUserPortrait();
JsonObject object = json.getAsJsonObject();
String refDate = GsonHelper.getString(object, "ref_date");
portrait.setRefDate(refDate);
portrait.setVisitUvNew(getPortraitItem(object.getAsJsonObject("visit_uv_new")));
portrait.setVisitUv(getPortraitItem(object.getAsJsonObject("visit_uv")));
return portrait;
}
private WxMaUserPortrait.Item getPortraitItem(JsonObject object) {
if (object == null) {
return null;
}
WxMaUserPortrait.Item item = new WxMaUserPortrait.Item();
item.setProvince(getAsMap(object, "province"));
item.setCity(getAsMap(object, "city"));
item.setGenders(getAsMap(object, "genders"));
item.setPlatforms(getAsMap(object, "platforms"));
item.setDevices(getAsMap(object, "devices"));
item.setAges(getAsMap(object, "ages"));
return item;
}
private Map<String, Long> getAsMap(JsonObject object, String memberName) {
JsonArray array = object.getAsJsonArray(memberName);
if (array != null && array.size() > 0) {
Map<String, Long> map = new LinkedHashMap<>(array.size());
for (JsonElement element : array) {
JsonObject elementObject = element.getAsJsonObject();
String name = GsonHelper.getString(elementObject, "name");
if (StringUtils.isNotBlank(name)) {
Long value = GsonHelper.getLong(elementObject, "value");
map.put(name, value);
}
}
return map;
}
return null;
}
}

View File

@@ -0,0 +1,67 @@
package cn.binarywang.wx.miniapp.util.json;
import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitDistribution;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import me.chanjar.weixin.common.util.json.GsonHelper;
import java.lang.reflect.Type;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author <a href="https://github.com/charmingoh">Charming</a>
* @since 2018-04-28
*/
public class WxMaVisitDistributionGsonAdapter implements JsonDeserializer<WxMaVisitDistribution> {
@Override
public WxMaVisitDistribution deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
if (json == null) {
return null;
}
WxMaVisitDistribution distribution = new WxMaVisitDistribution();
JsonObject object = json.getAsJsonObject();
String refDate = GsonHelper.getString(object, "ref_date");
distribution.setRefDate(refDate);
boolean hasList = object.has("list");
if (!hasList) {
return distribution;
}
JsonArray listArray = object.getAsJsonArray("list");
Map<String, Map<Integer, Integer>> list = new Hashtable<>(listArray.size());
for (JsonElement indexElement : listArray) {
JsonObject indexObject = indexElement.getAsJsonObject();
String index = GsonHelper.getString(indexObject, "index");
if (index == null) {
continue;
}
Map<Integer, Integer> itemList = new LinkedHashMap<>();
JsonArray itemArray = indexObject.getAsJsonArray("item_list");
if (itemArray == null || itemArray.size() <= 0) {
list.put(index, itemList);
continue;
}
for (JsonElement itemElement : itemArray) {
JsonObject itemObject = itemElement.getAsJsonObject();
Integer key = GsonHelper.getInteger(itemObject, "key");
Integer value = GsonHelper.getInteger(itemObject, "value");
if (key != null) {
itemList.put(key, value);
}
}
list.put(index, itemList);
}
distribution.setList(list);
return distribution;
}
}