From 228c71c42a3d24ed49224b4c3e9896aed13f0b9e Mon Sep 17 00:00:00 2001 From: 0katekate0 <32161300+0katekate0@users.noreply.github.com> Date: Fri, 17 Dec 2021 16:16:48 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#2452=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E8=8E=B7=E5=8F=96=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=AD=97=E6=AE=B5=20departmentLeader=EF=BC=88?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E8=B4=9F=E8=B4=A3=E4=BA=BA=E7=9A=84UserID?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/cp/bean/WxCpDepart.java | 5 ++- .../cp/util/json/WxCpDepartGsonAdapter.java | 29 +++++++++----- .../WxCpUserExternalContactInfoTest.java | 38 +++++++++++++++++++ 3 files changed, 61 insertions(+), 11 deletions(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java index f5b9b3259..5c640c51c 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpDepart.java @@ -1,10 +1,10 @@ package me.chanjar.weixin.cp.bean; -import java.io.Serializable; - import lombok.Data; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; +import java.io.Serializable; + /** * 企业微信的部门. * @@ -17,6 +17,7 @@ public class WxCpDepart implements Serializable { private Long id; private String name; private String enName; + private String[] departmentLeader; private Long parentId; private Long order; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java index 4340855fd..af9344b70 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpDepartGsonAdapter.java @@ -8,18 +8,12 @@ */ package me.chanjar.weixin.cp.util.json; -import java.lang.reflect.Type; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; +import com.google.gson.*; import me.chanjar.weixin.common.util.json.GsonHelper; import me.chanjar.weixin.cp.bean.WxCpDepart; +import java.lang.reflect.Type; + /** * WxCpDepart的gson适配器. * @@ -29,6 +23,7 @@ public class WxCpDepartGsonAdapter implements JsonSerializer, JsonDe private static final String ID = "id"; private static final String NAME = "name"; private static final String EN_NAME = "name_en"; + private static final String DEPARTMENT_LEADER = "department_leader"; private static final String PARENT_ID = "parentid"; private static final String ORDER = "order"; @@ -44,6 +39,13 @@ public class WxCpDepartGsonAdapter implements JsonSerializer, JsonDe if (group.getEnName() != null) { json.addProperty(EN_NAME, group.getEnName()); } + if (group.getDepartmentLeader() != null) { + JsonArray jsonArray = new JsonArray(); + for (String department : group.getDepartmentLeader()) { + jsonArray.add(new JsonPrimitive(department)); + } + json.add(DEPARTMENT_LEADER, jsonArray); + } if (group.getParentId() != null) { json.addProperty(PARENT_ID, group.getParentId()); } @@ -67,6 +69,15 @@ public class WxCpDepartGsonAdapter implements JsonSerializer, JsonDe if (departJson.get(EN_NAME) != null && !departJson.get(EN_NAME).isJsonNull()) { depart.setEnName(GsonHelper.getAsString(departJson.get(EN_NAME))); } + if (departJson.getAsJsonArray(DEPARTMENT_LEADER) != null && !departJson.get(DEPARTMENT_LEADER).isJsonNull()) { + JsonArray jsonArray = departJson.getAsJsonArray(DEPARTMENT_LEADER); + String[] departments = new String[jsonArray.size()]; + int i = 0; + for (JsonElement jsonElement : jsonArray) { + departments[i++] = jsonElement.getAsString(); + } + depart.setDepartmentLeader(departments); + } if (departJson.get(ORDER) != null && !departJson.get(ORDER).isJsonNull()) { depart.setOrder(GsonHelper.getAsLong(departJson.get(ORDER))); } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java index c666c1b94..d0003ccd8 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java @@ -78,6 +78,44 @@ public class WxCpUserExternalContactInfoTest { " }\n" + " ]\n" + "}"; + + final String testJson = "{\n" + + " \"errcode\": 0,\n" + + " \"errmsg\": \"ok\",\n" + + " \"department\": [\n" + + " {\n" + + " \"id\": 2,\n" + + " \"name\": \"广州研发中心\",\n" + + " \"name_en\": \"RDGZ\",\n" + + " \"department_leader\":[\"zhangsan\",\"lisi\"],\n" + + " \"parentid\": 1,\n" + + " \"order\": 10\n" + + " },\n" + + " {\n" + + " \"id\": 3,\n" + + " \"name\": \"邮箱产品部\",\n" + + " \"name_en\": \"mail\",\n" + + " \"department_leader\":[\"lisi\",\"wangwu\"],\n" + + " \"parentid\": 2,\n" + + " \"order\": 40\n" + + " }\n" + + " ]\n" + + "}\n"; + + // 测试序列化 + val depart = new WxCpDepart(); + depart.setId(8L); + depart.setName("name"); + depart.setEnName("enName"); + depart.setDepartmentLeader(new String[]{"zhangsan", "lisi"}); + depart.setParentId(88L); + depart.setOrder(99L); + + String toJson = depart.toJson(); + + // 测试企业微信字段返回 + List department = WxCpGsonBuilder.create().fromJson(GsonParser.parse(two).get("department"), new TypeToken>() { + }.getType()); final WxCpExternalContactInfo contactInfo = WxCpExternalContactInfo.fromJson(json); assertThat(contactInfo).isNotNull();