Skip to content

Commit 6fccfb3

Browse files
committed
binarywang#915 企业微信WxCpUser对象增加order属性
1 parent 8fa9ee4 commit 6fccfb3

File tree

3 files changed

+99
-54
lines changed

3 files changed

+99
-54
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpUser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class WxCpUser implements Serializable {
2121
private String userId;
2222
private String name;
2323
private Integer[] departIds;
24+
private Integer[] orders;
2425
private String position;
2526
private String mobile;
2627
private Gender gender;

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapter.java

Lines changed: 85 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* arose from modification of the original source, or other redistribution of this source
77
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
88
*/
9+
910
package me.chanjar.weixin.cp.util.json;
1011

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

2627
/**
28+
* cp user gson adapter.
29+
*
2730
* @author Daniel Qian
2831
*/
2932
public class WxCpUserGsonAdapter implements JsonDeserializer<WxCpUser>, JsonSerializer<WxCpUser> {
3033
private static final String EXTERNAL_PROFILE = "external_profile";
3134
private static final String EXTERNAL_ATTR = "external_attr";
35+
private static final String EXTATTR = "extattr";
3236

3337
@Override
3438
public WxCpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@@ -45,6 +49,16 @@ public WxCpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationC
4549
user.setDepartIds(departIds);
4650
}
4751

52+
if (o.get("order") != null) {
53+
JsonArray departJsonArray = o.get("order").getAsJsonArray();
54+
Integer[] orders = new Integer[departJsonArray.size()];
55+
int i = 0;
56+
for (JsonElement jsonElement : departJsonArray) {
57+
orders[i++] = jsonElement.getAsInt();
58+
}
59+
user.setOrders(orders);
60+
}
61+
4862
user.setUserId(GsonHelper.getString(o, "userid"));
4963
user.setName(GsonHelper.getString(o, "name"));
5064
user.setPosition(GsonHelper.getString(o, "position"));
@@ -62,64 +76,73 @@ public WxCpUser deserialize(JsonElement json, Type typeOfT, JsonDeserializationC
6276
user.setQrCode(GsonHelper.getString(o, "qr_code"));
6377
user.setToInvite(GsonHelper.getBoolean(o, "to_invite"));
6478

65-
if (GsonHelper.isNotNull(o.get("extattr"))) {
66-
JsonArray attrJsonElements = o.get("extattr").getAsJsonObject().get("attrs").getAsJsonArray();
67-
for (JsonElement attrJsonElement : attrJsonElements) {
68-
WxCpUser.Attr attr = new WxCpUser.Attr(
69-
GsonHelper.getString(attrJsonElement.getAsJsonObject(), "name"),
70-
GsonHelper.getString(attrJsonElement.getAsJsonObject(), "value")
71-
);
72-
user.getExtAttrs().add(attr);
73-
}
79+
if (GsonHelper.isNotNull(o.get(EXTATTR))) {
80+
this.buildExtraAttrs(o, user);
7481
}
7582

7683
if (GsonHelper.isNotNull(o.get(EXTERNAL_PROFILE))) {
77-
JsonArray attrJsonElements = o.get(EXTERNAL_PROFILE).getAsJsonObject().get(EXTERNAL_ATTR).getAsJsonArray();
78-
for (JsonElement element : attrJsonElements) {
79-
final Integer type = GsonHelper.getInteger(element.getAsJsonObject(), "type");
80-
final String name = GsonHelper.getString(element.getAsJsonObject(), "name");
84+
this.buildExternalAttrs(o, user);
85+
}
8186

82-
switch (type) {
83-
case 0: {
84-
user.getExternalAttrs()
85-
.add(WxCpUser.ExternalAttribute.builder()
86-
.type(type)
87-
.name(name)
88-
.value(GsonHelper.getString(element.getAsJsonObject().get("text").getAsJsonObject(), "value"))
89-
.build()
90-
);
91-
break;
92-
}
93-
case 1: {
94-
final JsonObject web = element.getAsJsonObject().get("web").getAsJsonObject();
95-
user.getExternalAttrs()
96-
.add(WxCpUser.ExternalAttribute.builder()
97-
.type(type)
98-
.name(name)
99-
.url(GsonHelper.getString(web, "url"))
100-
.title(GsonHelper.getString(web, "title"))
101-
.build()
102-
);
103-
break;
104-
}
105-
case 2: {
106-
final JsonObject miniprogram = element.getAsJsonObject().get("miniprogram").getAsJsonObject();
107-
user.getExternalAttrs()
108-
.add(WxCpUser.ExternalAttribute.builder()
109-
.type(type)
110-
.name(name)
111-
.appid(GsonHelper.getString(miniprogram, "appid"))
112-
.pagePath(GsonHelper.getString(miniprogram, "pagepath"))
113-
.title(GsonHelper.getString(miniprogram, "title"))
114-
.build()
115-
);
116-
break;
117-
}
118-
default://ignored
87+
return user;
88+
}
89+
90+
private void buildExtraAttrs(JsonObject o, WxCpUser user) {
91+
JsonArray attrJsonElements = o.get(EXTATTR).getAsJsonObject().get("attrs").getAsJsonArray();
92+
for (JsonElement attrJsonElement : attrJsonElements) {
93+
WxCpUser.Attr attr = new WxCpUser.Attr(
94+
GsonHelper.getString(attrJsonElement.getAsJsonObject(), "name"),
95+
GsonHelper.getString(attrJsonElement.getAsJsonObject(), "value")
96+
);
97+
user.getExtAttrs().add(attr);
98+
}
99+
}
100+
101+
private void buildExternalAttrs(JsonObject o, WxCpUser user) {
102+
JsonArray attrJsonElements = o.get(EXTERNAL_PROFILE).getAsJsonObject().get(EXTERNAL_ATTR).getAsJsonArray();
103+
for (JsonElement element : attrJsonElements) {
104+
final Integer type = GsonHelper.getInteger(element.getAsJsonObject(), "type");
105+
final String name = GsonHelper.getString(element.getAsJsonObject(), "name");
106+
107+
switch (type) {
108+
case 0: {
109+
user.getExternalAttrs()
110+
.add(WxCpUser.ExternalAttribute.builder()
111+
.type(type)
112+
.name(name)
113+
.value(GsonHelper.getString(element.getAsJsonObject().get("text").getAsJsonObject(), "value"))
114+
.build()
115+
);
116+
break;
119117
}
118+
case 1: {
119+
final JsonObject web = element.getAsJsonObject().get("web").getAsJsonObject();
120+
user.getExternalAttrs()
121+
.add(WxCpUser.ExternalAttribute.builder()
122+
.type(type)
123+
.name(name)
124+
.url(GsonHelper.getString(web, "url"))
125+
.title(GsonHelper.getString(web, "title"))
126+
.build()
127+
);
128+
break;
129+
}
130+
case 2: {
131+
final JsonObject miniprogram = element.getAsJsonObject().get("miniprogram").getAsJsonObject();
132+
user.getExternalAttrs()
133+
.add(WxCpUser.ExternalAttribute.builder()
134+
.type(type)
135+
.name(name)
136+
.appid(GsonHelper.getString(miniprogram, "appid"))
137+
.pagePath(GsonHelper.getString(miniprogram, "pagepath"))
138+
.title(GsonHelper.getString(miniprogram, "title"))
139+
.build()
140+
);
141+
break;
142+
}
143+
default://ignored
120144
}
121145
}
122-
return user;
123146
}
124147

125148
@Override
@@ -138,6 +161,15 @@ public JsonElement serialize(WxCpUser user, Type typeOfSrc, JsonSerializationCon
138161
}
139162
o.add("department", jsonArray);
140163
}
164+
165+
if (user.getOrders() != null) {
166+
JsonArray jsonArray = new JsonArray();
167+
for (Integer order : user.getOrders()) {
168+
jsonArray.add(new JsonPrimitive(order));
169+
}
170+
o.add("order", jsonArray);
171+
}
172+
141173
if (user.getPosition() != null) {
142174
o.addProperty("position", user.getPosition());
143175
}
@@ -191,14 +223,14 @@ public JsonElement serialize(WxCpUser user, Type typeOfSrc, JsonSerializationCon
191223
}
192224
JsonObject attrsJson = new JsonObject();
193225
attrsJson.add("attrs", attrsJsonArray);
194-
o.add("extattr", attrsJson);
226+
o.add(EXTATTR, attrsJson);
195227
}
196228

197229
if (user.getExternalAttrs().size() > 0) {
198230
JsonArray attrsJsonArray = new JsonArray();
199231
for (WxCpUser.ExternalAttribute attr : user.getExternalAttrs()) {
200232
JsonObject attrJson = new JsonObject();
201-
attrJson.addProperty("type",attr.getType());
233+
attrJson.addProperty("type", attr.getType());
202234
attrJson.addProperty("name", attr.getName());
203235
switch (attr.getType()) {
204236
case 0: {

weixin-java-cp/src/test/java/me/chanjar/weixin/cp/util/json/WxCpUserGsonAdapterTest.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ public void testDeserialize() {
7676

7777
final WxCpUser user = WxCpUser.fromJson(userJson);
7878
assertThat(user).isNotNull();
79+
80+
assertThat(user.getOrders()).isNotEmpty();
81+
assertThat(user.getOrders().length).isEqualTo(2);
82+
assertThat(user.getOrders()[0]).isEqualTo(1);
83+
assertThat(user.getOrders()[1]).isEqualTo(2);
84+
85+
7986
assertThat(user.getExternalAttrs()).isNotEmpty();
8087

8188
final WxCpUser.ExternalAttribute externalAttr1 = user.getExternalAttrs().get(0);
@@ -100,6 +107,7 @@ public void testDeserialize() {
100107
@Test
101108
public void testSerialize() {
102109
WxCpUser user = new WxCpUser();
110+
user.setOrders(new Integer[]{1, 2});
103111
user.addExternalAttr(WxCpUser.ExternalAttribute.builder()
104112
.type(0)
105113
.name("文本名称")
@@ -119,6 +127,10 @@ public void testSerialize() {
119127
.title("my miniprogram")
120128
.build());
121129

122-
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\"}}]}}");
130+
assertThat(user.toJson()).isEqualTo("{\"order\":[1,2],\"external_profile\":{\"external_attr\":" +
131+
"[{\"type\":0,\"name\":\"文本名称\",\"text\":{\"value\":\"文本\"}}," +
132+
"{\"type\":1,\"name\":\"网页名称\",\"web\":{\"url\":\"http://www.test.com\",\"title\":\"标题\"}}," +
133+
"{\"type\":2,\"name\":\"测试app\"," +
134+
"\"miniprogram\":{\"appid\":\"wx8bd80126147df384\",\"pagepath\":\"/index\",\"title\":\"my miniprogram\"}}]}}");
123135
}
124136
}

0 commit comments

Comments
 (0)