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+
910package me .chanjar .weixin .cp .util .json ;
1011
1112import java .lang .reflect .Type ;
2425import me .chanjar .weixin .cp .bean .WxCpUser ;
2526
2627/**
28+ * cp user gson adapter.
29+ *
2730 * @author Daniel Qian
2831 */
2932public 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 : {
0 commit comments