mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-10-21 02:57:37 +08:00
#915 企业微信WxCpUser对象增加order属性
This commit is contained in:
@@ -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;
|
||||
|
@@ -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<WxCpUser>, JsonSerializer<WxCpUser> {
|
||||
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<WxCpUser>, 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<WxCpUser>, 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<WxCpUser>, 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<WxCpUser>, 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: {
|
||||
|
@@ -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\"}}]}}");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user