From 6fccfb3600d89674a0a9150f22c0e00c38b3cf75 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 20 Jan 2019 14:28:00 +0800 Subject: [PATCH] =?UTF-8?q?#915=20=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1WxCp?= =?UTF-8?q?User=E5=AF=B9=E8=B1=A1=E5=A2=9E=E5=8A=A0order=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/cp/bean/WxCpUser.java | 1 + .../cp/util/json/WxCpUserGsonAdapter.java | 138 +++++++++++------- .../cp/util/json/WxCpUserGsonAdapterTest.java | 14 +- 3 files changed, 99 insertions(+), 54 deletions(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java index 233d4576..5a4f998d 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java @@ -21,6 +21,7 @@ public class WxCpUser implements Serializable { private String userId; private String name; private Integer[] departIds; + private Integer[] orders; private String position; private String mobile; private Gender gender; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java index 1dc3f687..7f8b2640 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java @@ -6,6 +6,7 @@ * arose from modification of the original source, or other redistribution of this source * is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD. */ + package me.chanjar.weixin.cp.util.json; import java.lang.reflect.Type; @@ -24,11 +25,14 @@ import me.chanjar.weixin.cp.bean.Gender; import me.chanjar.weixin.cp.bean.WxCpUser; /** + * cp user gson adapter. + * * @author Daniel Qian */ public class WxCpUserGsonAdapter implements JsonDeserializer, JsonSerializer { private static final String EXTERNAL_PROFILE = "external_profile"; private static final String EXTERNAL_ATTR = "external_attr"; + private static final String EXTATTR = "extattr"; @Override public WxCpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { @@ -45,6 +49,16 @@ public class WxCpUserGsonAdapter implements JsonDeserializer, JsonSeri user.setDepartIds(departIds); } + if (o.get("order") != null) { + JsonArray departJsonArray = o.get("order").getAsJsonArray(); + Integer[] orders = new Integer[departJsonArray.size()]; + int i = 0; + for (JsonElement jsonElement : departJsonArray) { + orders[i++] = jsonElement.getAsInt(); + } + user.setOrders(orders); + } + user.setUserId(GsonHelper.getString(o, "userid")); user.setName(GsonHelper.getString(o, "name")); user.setPosition(GsonHelper.getString(o, "position")); @@ -62,64 +76,73 @@ public class WxCpUserGsonAdapter implements JsonDeserializer, JsonSeri user.setQrCode(GsonHelper.getString(o, "qr_code")); user.setToInvite(GsonHelper.getBoolean(o, "to_invite")); - if (GsonHelper.isNotNull(o.get("extattr"))) { - JsonArray attrJsonElements = o.get("extattr").getAsJsonObject().get("attrs").getAsJsonArray(); - for (JsonElement attrJsonElement : attrJsonElements) { - WxCpUser.Attr attr = new WxCpUser.Attr( - GsonHelper.getString(attrJsonElement.getAsJsonObject(), "name"), - GsonHelper.getString(attrJsonElement.getAsJsonObject(), "value") - ); - user.getExtAttrs().add(attr); - } + if (GsonHelper.isNotNull(o.get(EXTATTR))) { + this.buildExtraAttrs(o, user); } if (GsonHelper.isNotNull(o.get(EXTERNAL_PROFILE))) { - JsonArray attrJsonElements = o.get(EXTERNAL_PROFILE).getAsJsonObject().get(EXTERNAL_ATTR).getAsJsonArray(); - for (JsonElement element : attrJsonElements) { - final Integer type = GsonHelper.getInteger(element.getAsJsonObject(), "type"); - final String name = GsonHelper.getString(element.getAsJsonObject(), "name"); + this.buildExternalAttrs(o, user); + } - switch (type) { - case 0: { - user.getExternalAttrs() - .add(WxCpUser.ExternalAttribute.builder() - .type(type) - .name(name) - .value(GsonHelper.getString(element.getAsJsonObject().get("text").getAsJsonObject(), "value")) - .build() - ); - break; - } - case 1: { - final JsonObject web = element.getAsJsonObject().get("web").getAsJsonObject(); - user.getExternalAttrs() - .add(WxCpUser.ExternalAttribute.builder() - .type(type) - .name(name) - .url(GsonHelper.getString(web, "url")) - .title(GsonHelper.getString(web, "title")) - .build() - ); - break; - } - case 2: { - final JsonObject miniprogram = element.getAsJsonObject().get("miniprogram").getAsJsonObject(); - user.getExternalAttrs() - .add(WxCpUser.ExternalAttribute.builder() - .type(type) - .name(name) - .appid(GsonHelper.getString(miniprogram, "appid")) - .pagePath(GsonHelper.getString(miniprogram, "pagepath")) - .title(GsonHelper.getString(miniprogram, "title")) - .build() - ); - break; - } - default://ignored + return user; + } + + private void buildExtraAttrs(JsonObject o, WxCpUser user) { + JsonArray attrJsonElements = o.get(EXTATTR).getAsJsonObject().get("attrs").getAsJsonArray(); + for (JsonElement attrJsonElement : attrJsonElements) { + WxCpUser.Attr attr = new WxCpUser.Attr( + GsonHelper.getString(attrJsonElement.getAsJsonObject(), "name"), + GsonHelper.getString(attrJsonElement.getAsJsonObject(), "value") + ); + user.getExtAttrs().add(attr); + } + } + + private void buildExternalAttrs(JsonObject o, WxCpUser user) { + JsonArray attrJsonElements = o.get(EXTERNAL_PROFILE).getAsJsonObject().get(EXTERNAL_ATTR).getAsJsonArray(); + for (JsonElement element : attrJsonElements) { + final Integer type = GsonHelper.getInteger(element.getAsJsonObject(), "type"); + final String name = GsonHelper.getString(element.getAsJsonObject(), "name"); + + switch (type) { + case 0: { + user.getExternalAttrs() + .add(WxCpUser.ExternalAttribute.builder() + .type(type) + .name(name) + .value(GsonHelper.getString(element.getAsJsonObject().get("text").getAsJsonObject(), "value")) + .build() + ); + break; } + case 1: { + final JsonObject web = element.getAsJsonObject().get("web").getAsJsonObject(); + user.getExternalAttrs() + .add(WxCpUser.ExternalAttribute.builder() + .type(type) + .name(name) + .url(GsonHelper.getString(web, "url")) + .title(GsonHelper.getString(web, "title")) + .build() + ); + break; + } + case 2: { + final JsonObject miniprogram = element.getAsJsonObject().get("miniprogram").getAsJsonObject(); + user.getExternalAttrs() + .add(WxCpUser.ExternalAttribute.builder() + .type(type) + .name(name) + .appid(GsonHelper.getString(miniprogram, "appid")) + .pagePath(GsonHelper.getString(miniprogram, "pagepath")) + .title(GsonHelper.getString(miniprogram, "title")) + .build() + ); + break; + } + default://ignored } } - return user; } @Override @@ -138,6 +161,15 @@ public class WxCpUserGsonAdapter implements JsonDeserializer, JsonSeri } o.add("department", jsonArray); } + + if (user.getOrders() != null) { + JsonArray jsonArray = new JsonArray(); + for (Integer order : user.getOrders()) { + jsonArray.add(new JsonPrimitive(order)); + } + o.add("order", jsonArray); + } + if (user.getPosition() != null) { o.addProperty("position", user.getPosition()); } @@ -191,14 +223,14 @@ public class WxCpUserGsonAdapter implements JsonDeserializer, JsonSeri } JsonObject attrsJson = new JsonObject(); attrsJson.add("attrs", attrsJsonArray); - o.add("extattr", attrsJson); + o.add(EXTATTR, attrsJson); } if (user.getExternalAttrs().size() > 0) { JsonArray attrsJsonArray = new JsonArray(); for (WxCpUser.ExternalAttribute attr : user.getExternalAttrs()) { JsonObject attrJson = new JsonObject(); - attrJson.addProperty("type",attr.getType()); + attrJson.addProperty("type", attr.getType()); attrJson.addProperty("name", attr.getName()); switch (attr.getType()) { case 0: { diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java index ec553f75..9cdc51f8 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java @@ -76,6 +76,13 @@ public class WxCpUserGsonAdapterTest { final WxCpUser user = WxCpUser.fromJson(userJson); assertThat(user).isNotNull(); + + assertThat(user.getOrders()).isNotEmpty(); + assertThat(user.getOrders().length).isEqualTo(2); + assertThat(user.getOrders()[0]).isEqualTo(1); + assertThat(user.getOrders()[1]).isEqualTo(2); + + assertThat(user.getExternalAttrs()).isNotEmpty(); final WxCpUser.ExternalAttribute externalAttr1 = user.getExternalAttrs().get(0); @@ -100,6 +107,7 @@ public class WxCpUserGsonAdapterTest { @Test public void testSerialize() { WxCpUser user = new WxCpUser(); + user.setOrders(new Integer[]{1, 2}); user.addExternalAttr(WxCpUser.ExternalAttribute.builder() .type(0) .name("文本名称") @@ -119,6 +127,10 @@ public class WxCpUserGsonAdapterTest { .title("my miniprogram") .build()); - assertThat(user.toJson()).isEqualTo("{\"external_profile\":{\"external_attr\":[{\"type\":0,\"name\":\"文本名称\",\"text\":{\"value\":\"文本\"}},{\"type\":1,\"name\":\"网页名称\",\"web\":{\"url\":\"http://www.test.com\",\"title\":\"标题\"}},{\"type\":2,\"name\":\"测试app\",\"miniprogram\":{\"appid\":\"wx8bd80126147df384\",\"pagepath\":\"/index\",\"title\":\"my miniprogram\"}}]}}"); + assertThat(user.toJson()).isEqualTo("{\"order\":[1,2],\"external_profile\":{\"external_attr\":" + + "[{\"type\":0,\"name\":\"文本名称\",\"text\":{\"value\":\"文本\"}}," + + "{\"type\":1,\"name\":\"网页名称\",\"web\":{\"url\":\"http://www.test.com\",\"title\":\"标题\"}}," + + "{\"type\":2,\"name\":\"测试app\"," + + "\"miniprogram\":{\"appid\":\"wx8bd80126147df384\",\"pagepath\":\"/index\",\"title\":\"my miniprogram\"}}]}}"); } }