Browse Source

#915 企业微信WxCpUser对象增加order属性

master
Binary Wang 6 years ago
parent
commit
6fccfb3600
3 changed files with 99 additions and 54 deletions
  1. +1
    -0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java
  2. +85
    -53
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java
  3. +13
    -1
      weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java

+ 1
- 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java View File

@@ -21,6 +21,7 @@ public class WxCpUser implements Serializable {
private String userId; private String userId;
private String name; private String name;
private Integer[] departIds; private Integer[] departIds;
private Integer[] orders;
private String position; private String position;
private String mobile; private String mobile;
private Gender gender; private Gender gender;


+ 85
- 53
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java View File

@@ -6,6 +6,7 @@
* arose from modification of the original source, or other redistribution of this source * 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. * is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/ */

package me.chanjar.weixin.cp.util.json; package me.chanjar.weixin.cp.util.json;


import java.lang.reflect.Type; import java.lang.reflect.Type;
@@ -24,11 +25,14 @@ import me.chanjar.weixin.cp.bean.Gender;
import me.chanjar.weixin.cp.bean.WxCpUser; import me.chanjar.weixin.cp.bean.WxCpUser;


/** /**
* cp user gson adapter.
*
* @author Daniel Qian * @author Daniel Qian
*/ */
public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSerializer<WxCpUser> { public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSerializer<WxCpUser> {
private static final String EXTERNAL_PROFILE = "external_profile"; private static final String EXTERNAL_PROFILE = "external_profile";
private static final String EXTERNAL_ATTR = "external_attr"; private static final String EXTERNAL_ATTR = "external_attr";
private static final String EXTATTR = "extattr";


@Override @Override
public WxCpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { public WxCpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@@ -45,6 +49,16 @@ public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSeri
user.setDepartIds(departIds); 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.setUserId(GsonHelper.getString(o, "userid"));
user.setName(GsonHelper.getString(o, "name")); user.setName(GsonHelper.getString(o, "name"));
user.setPosition(GsonHelper.getString(o, "position")); user.setPosition(GsonHelper.getString(o, "position"));
@@ -62,64 +76,73 @@ public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSeri
user.setQrCode(GsonHelper.getString(o, "qr_code")); user.setQrCode(GsonHelper.getString(o, "qr_code"));
user.setToInvite(GsonHelper.getBoolean(o, "to_invite")); 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))) { 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 @Override
@@ -138,6 +161,15 @@ public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSeri
} }
o.add("department", jsonArray); 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) { if (user.getPosition() != null) {
o.addProperty("position", user.getPosition()); o.addProperty("position", user.getPosition());
} }
@@ -191,14 +223,14 @@ public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSeri
} }
JsonObject attrsJson = new JsonObject(); JsonObject attrsJson = new JsonObject();
attrsJson.add("attrs", attrsJsonArray); attrsJson.add("attrs", attrsJsonArray);
o.add("extattr", attrsJson);
o.add(EXTATTR, attrsJson);
} }


if (user.getExternalAttrs().size() > 0) { if (user.getExternalAttrs().size() > 0) {
JsonArray attrsJsonArray = new JsonArray(); JsonArray attrsJsonArray = new JsonArray();
for (WxCpUser.ExternalAttribute attr : user.getExternalAttrs()) { for (WxCpUser.ExternalAttribute attr : user.getExternalAttrs()) {
JsonObject attrJson = new JsonObject(); JsonObject attrJson = new JsonObject();
attrJson.addProperty("type",attr.getType());
attrJson.addProperty("type", attr.getType());
attrJson.addProperty("name", attr.getName()); attrJson.addProperty("name", attr.getName());
switch (attr.getType()) { switch (attr.getType()) {
case 0: { case 0: {


+ 13
- 1
weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java View File

@@ -76,6 +76,13 @@ public class WxCpUserGsonAdapterTest {


final WxCpUser user = WxCpUser.fromJson(userJson); final WxCpUser user = WxCpUser.fromJson(userJson);
assertThat(user).isNotNull(); 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(); assertThat(user.getExternalAttrs()).isNotEmpty();


final WxCpUser.ExternalAttribute externalAttr1 = user.getExternalAttrs().get(0); final WxCpUser.ExternalAttribute externalAttr1 = user.getExternalAttrs().get(0);
@@ -100,6 +107,7 @@ public class WxCpUserGsonAdapterTest {
@Test @Test
public void testSerialize() { public void testSerialize() {
WxCpUser user = new WxCpUser(); WxCpUser user = new WxCpUser();
user.setOrders(new Integer[]{1, 2});
user.addExternalAttr(WxCpUser.ExternalAttribute.builder() user.addExternalAttr(WxCpUser.ExternalAttribute.builder()
.type(0) .type(0)
.name("文本名称") .name("文本名称")
@@ -119,6 +127,10 @@ public class WxCpUserGsonAdapterTest {
.title("my miniprogram") .title("my miniprogram")
.build()); .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\"}}]}}");
} }
} }

Loading…
Cancel
Save