From a3250c986577dd781ab85e31e98660249cca682d Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Wed, 4 Nov 2020 17:36:46 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#1849=20=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=A4=96=E9=83=A8=E8=81=94=E7=B3=BB=E4=BA=BA=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3=E9=87=8D=E6=9E=84=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=87=8D=E5=A4=8D=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E8=8E=B7=E5=8F=96=E5=AE=A2=E6=88=B7=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E5=A2=9E=E5=8A=A0=E6=A0=87?= =?UTF-8?q?=E7=AD=BEid=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/api/WxCpExternalContactService.java | 10 +- .../weixin/cp/api/WxCpUserService.java | 4 +- .../impl/WxCpExternalContactServiceImpl.java | 18 +- .../cp/api/impl/WxCpUserServiceImpl.java | 6 +- .../WxCpUserExternalContactBatchInfo.java | 163 ------------------ .../external/WxCpUserExternalContactInfo.java | 144 ---------------- .../external/contact/ExternalContact.java | 103 +++++++++++ .../bean/external/contact/FollowedUser.java | 81 +++++++++ .../contact/WxCpExternalContactBatchInfo.java | 48 ++++++ .../contact/WxCpExternalContactInfo.java | 33 ++++ .../weixin/cp/constant/WxCpConsts.java | 1 + .../tp/message/WxCpTpMessageRouterRule.java | 13 +- .../WxCpExternalContactServiceImplTest.java | 5 +- .../WxCpUserExternalContactInfoTest.java | 22 +-- 14 files changed, 312 insertions(+), 339 deletions(-) delete mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactBatchInfo.java delete mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfo.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/FollowedUser.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactBatchInfo.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactInfo.java rename weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/{ => external}/WxCpUserExternalContactInfoTest.java (86%) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java index 3ceee6490..231e0bfa3 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java @@ -4,6 +4,8 @@ import lombok.NonNull; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.bean.WxCpBaseResp; import me.chanjar.weixin.cp.bean.external.*; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactBatchInfo; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; import java.util.Date; import java.util.List; @@ -109,7 +111,7 @@ public interface WxCpExternalContactService { * @deprecated 建议使用 {@link #getContactDetail(String)} */ @Deprecated - WxCpUserExternalContactInfo getExternalContact(String userId) throws WxErrorException; + WxCpExternalContactInfo getExternalContact(String userId) throws WxErrorException; /** * 获取客户详情. @@ -130,7 +132,7 @@ public interface WxCpExternalContactService { * @return . contact detail * @throws WxErrorException . */ - WxCpUserExternalContactInfo getContactDetail(String userId) throws WxErrorException; + WxCpExternalContactInfo getContactDetail(String userId) throws WxErrorException; /** * 批量获取客户详情. @@ -153,8 +155,8 @@ public interface WxCpExternalContactService { * @return wx cp user external contact batch info * @throws WxErrorException . */ - WxCpUserExternalContactBatchInfo getContactDetailBatch(String userId, String cursor, - Integer limit) + WxCpExternalContactBatchInfo getContactDetailBatch(String userId, String cursor, + Integer limit) throws WxErrorException; /** diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpUserService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpUserService.java index 8cf5670f9..c8b2aae67 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpUserService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpUserService.java @@ -3,7 +3,7 @@ package me.chanjar.weixin.cp.api; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.bean.WxCpInviteResult; import me.chanjar.weixin.cp.bean.WxCpUser; -import me.chanjar.weixin.cp.bean.external.WxCpUserExternalContactInfo; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; import java.util.List; import java.util.Map; @@ -167,7 +167,7 @@ public interface WxCpUserService { * @return 联系人详情 * @throws WxErrorException . */ - WxCpUserExternalContactInfo getExternalContact(String userId) throws WxErrorException; + WxCpExternalContactInfo getExternalContact(String userId) throws WxErrorException; } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java index 2d62f8aef..19e7cdfe7 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java @@ -11,6 +11,8 @@ import me.chanjar.weixin.cp.api.WxCpExternalContactService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpBaseResp; import me.chanjar.weixin.cp.bean.external.*; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactBatchInfo; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -91,23 +93,23 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic } @Override - public WxCpUserExternalContactInfo getExternalContact(String userId) throws WxErrorException { + public WxCpExternalContactInfo getExternalContact(String userId) throws WxErrorException { final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_EXTERNAL_CONTACT + userId); String responseContent = this.mainService.get(url, null); - return WxCpUserExternalContactInfo.fromJson(responseContent); + return WxCpExternalContactInfo.fromJson(responseContent); } @Override - public WxCpUserExternalContactInfo getContactDetail(String userId) throws WxErrorException { + public WxCpExternalContactInfo getContactDetail(String userId) throws WxErrorException { final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_CONTACT_DETAIL + userId); String responseContent = this.mainService.get(url, null); - return WxCpUserExternalContactInfo.fromJson(responseContent); + return WxCpExternalContactInfo.fromJson(responseContent); } @Override - public WxCpUserExternalContactBatchInfo getContactDetailBatch(String userId, - String cursor, - Integer limit) + public WxCpExternalContactBatchInfo getContactDetailBatch(String userId, + String cursor, + Integer limit) throws WxErrorException { final String url = this.mainService @@ -122,7 +124,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic json.addProperty("limit", limit); } String responseContent = this.mainService.post(url, json.toString()); - return WxCpUserExternalContactBatchInfo.fromJson(responseContent); + return WxCpExternalContactBatchInfo.fromJson(responseContent); } @Override diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java index d6d401624..cb122a014 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java @@ -10,7 +10,7 @@ import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.WxCpUserService; import me.chanjar.weixin.cp.bean.WxCpInviteResult; import me.chanjar.weixin.cp.bean.WxCpUser; -import me.chanjar.weixin.cp.bean.external.WxCpUserExternalContactInfo; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import java.util.List; @@ -193,9 +193,9 @@ public class WxCpUserServiceImpl implements WxCpUserService { } @Override - public WxCpUserExternalContactInfo getExternalContact(String userId) throws WxErrorException { + public WxCpExternalContactInfo getExternalContact(String userId) throws WxErrorException { String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_EXTERNAL_CONTACT + userId); String responseContent = this.mainService.get(url, null); - return WxCpUserExternalContactInfo.fromJson(responseContent); + return WxCpExternalContactInfo.fromJson(responseContent); } } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactBatchInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactBatchInfo.java deleted file mode 100644 index 5275dc9dd..000000000 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactBatchInfo.java +++ /dev/null @@ -1,163 +0,0 @@ -package me.chanjar.weixin.cp.bean.external; - -import com.google.gson.annotations.SerializedName; -import java.io.Serializable; -import java.util.List; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.chanjar.weixin.cp.bean.WxCpBaseResp; -import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; - -/** - *
- * 批量获取客户详情
- * Created by Binary Wang on 2020/10/22.
- * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/92994
- * 
- * - * @author alucardxh - */ -@Getter -@Setter -public class WxCpUserExternalContactBatchInfo extends WxCpBaseResp implements Serializable { - private static final long serialVersionUID = -5166048319463473186L; - - @SerializedName("external_contact_list") - private List externalContactList; - - @SerializedName("next_cursor") - private String nextCursor; - - @Getter - @Setter - public static class ExternalContactInfo { - @SerializedName("external_contact") - private ExternalContact externalContact; - - @SerializedName("follow_info") - private FollowedUser followInfo; - } - - @Getter - @Setter - public static class ExternalContact { - @SerializedName("external_userid") - private String externalUserId; - - @SerializedName("position") - private String position; - - @SerializedName("name") - private String name; - - @SerializedName("avatar") - private String avatar; - - @SerializedName("corp_name") - private String corpName; - - @SerializedName("corp_full_name") - private String corpFullName; - - @SerializedName("type") - private Integer type; - - @SerializedName("gender") - private Integer gender; - - @SerializedName("unionid") - private String unionId; - - @SerializedName("external_profile") - private ExternalProfile externalProfile; - } - - @Setter - @Getter - public static class ExternalProfile { - @SerializedName("external_attr") - private List externalAttrs; - } - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class ExternalAttribute { - @Setter - @Getter - public static class Text { - private String value; - } - - @Setter - @Getter - public static class Web { - private String title; - private String url; - } - - @Setter - @Getter - public static class MiniProgram { - @SerializedName("pagepath") - private String pagePath; - private String appid; - private String title; - } - - private int type; - - private String name; - - private Text text; - - private Web web; - - @SerializedName("miniprogram") - private MiniProgram miniProgram; - } - - @Setter - @Getter - public static class FollowedUser { - @SerializedName("userid") - private String userId; - private String remark; - private String description; - @SerializedName("createtime") - private Long createTime; - private String state; - @SerializedName("remark_company") - private String remarkCompany; - @SerializedName("remark_mobiles") - private String[] remarkMobiles; - private Tag[] tags; - @SerializedName("remark_corp_name") - private String remarkCorpName; - @SerializedName("add_way") - private String addWay; - @SerializedName("oper_userid") - private String operUserId; - - } - - public static WxCpUserExternalContactBatchInfo fromJson(String json) { - return WxCpGsonBuilder.create().fromJson(json, WxCpUserExternalContactBatchInfo.class); - } - - @Setter - @Getter - public static class Tag { - @SerializedName("group_name") - private String groupName; - @SerializedName("tag_name") - private String tagName; - private int type; - } - -} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfo.java deleted file mode 100644 index c28326e84..000000000 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfo.java +++ /dev/null @@ -1,144 +0,0 @@ -package me.chanjar.weixin.cp.bean.external; - -import com.google.gson.annotations.SerializedName; -import lombok.*; -import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; - -import java.util.List; - -/** - *
- * 外部联系人详情
- * Created by Binary Wang on 2018/9/16.
- * 参考文档:https://work.weixin.qq.com/api/doc#13878
- * 
- * - * @author Binary Wang - */ -@Getter -@Setter -public class WxCpUserExternalContactInfo { - @SerializedName("external_contact") - private ExternalContact externalContact; - - @SerializedName("follow_user") - private List followedUsers; - - @Getter - @Setter - public static class ExternalContact { - @SerializedName("external_userid") - private String externalUserId; - - @SerializedName("position") - private String position; - - @SerializedName("name") - private String name; - - @SerializedName("avatar") - private String avatar; - - @SerializedName("corp_name") - private String corpName; - - @SerializedName("corp_full_name") - private String corpFullName; - - @SerializedName("type") - private Integer type; - - @SerializedName("gender") - private Integer gender; - - @SerializedName("unionid") - private String unionId; - - @SerializedName("external_profile") - private ExternalProfile externalProfile; - } - - @Setter - @Getter - public static class ExternalProfile { - @SerializedName("external_attr") - private List externalAttrs; - } - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class ExternalAttribute { - @Setter - @Getter - public static class Text { - private String value; - } - - @Setter - @Getter - public static class Web { - private String title; - private String url; - } - - @Setter - @Getter - public static class MiniProgram { - @SerializedName("pagepath") - private String pagePath; - private String appid; - private String title; - } - - private int type; - - private String name; - - private Text text; - - private Web web; - - @SerializedName("miniprogram") - private MiniProgram miniProgram; - } - - @Setter - @Getter - public static class FollowedUser { - @SerializedName("userid") - private String userId; - private String remark; - private String description; - @SerializedName("createtime") - private Long createTime; - private String state; - @SerializedName("remark_company") - private String remarkCompany; - @SerializedName("remark_mobiles") - private String[] remarkMobiles; - private Tag[] tags; - @SerializedName("remark_corp_name") - private String remarkCorpName; - @SerializedName("add_way") - private String addWay; - @SerializedName("oper_userid") - private String operUserId; - - } - - public static WxCpUserExternalContactInfo fromJson(String json) { - return WxCpGsonBuilder.create().fromJson(json, WxCpUserExternalContactInfo.class); - } - - @Setter - @Getter - public static class Tag { - @SerializedName("group_name") - private String groupName; - @SerializedName("tag_name") - private String tagName; - private int type; - } -} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java new file mode 100644 index 000000000..5b7f9e67b --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/ExternalContact.java @@ -0,0 +1,103 @@ +package me.chanjar.weixin.cp.bean.external.contact; + +import com.google.gson.annotations.SerializedName; +import lombok.*; + +import java.io.Serializable; +import java.util.List; + +/** + * 外部联系人. + * + * @author Binary Wang + * @date 2020-11-04 + */ +@Getter +@Setter +public class ExternalContact implements Serializable { + private static final long serialVersionUID = -1049085217436072418L; + + @SerializedName("external_userid") + private String externalUserId; + + @SerializedName("position") + private String position; + + @SerializedName("name") + private String name; + + @SerializedName("avatar") + private String avatar; + + @SerializedName("corp_name") + private String corpName; + + @SerializedName("corp_full_name") + private String corpFullName; + + @SerializedName("type") + private Integer type; + + @SerializedName("gender") + private Integer gender; + + @SerializedName("unionid") + private String unionId; + + @SerializedName("external_profile") + private ExternalProfile externalProfile; + + @Data + public static class ExternalProfile implements Serializable { + private static final long serialVersionUID = -2899906589789022765L; + + @SerializedName("external_attr") + private List externalAttrs; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ExternalAttribute implements Serializable { + private static final long serialVersionUID = -1262278808286421085L; + + private int type; + + private String name; + + private Text text; + + private Web web; + + @SerializedName("miniprogram") + private MiniProgram miniProgram; + + @Data + public static class Text implements Serializable { + private static final long serialVersionUID = -8161579335600269094L; + + private String value; + } + + @Data + public static class Web implements Serializable { + private static final long serialVersionUID = 3664557135411521862L; + + private String title; + private String url; + } + + @Data + public static class MiniProgram implements Serializable { + private static final long serialVersionUID = -5329210594501835796L; + + @SerializedName("pagepath") + private String pagePath; + + private String appid; + + private String title; + } + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/FollowedUser.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/FollowedUser.java new file mode 100644 index 000000000..a9fb7ba83 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/FollowedUser.java @@ -0,0 +1,81 @@ +package me.chanjar.weixin.cp.bean.external.contact; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.io.Serializable; + +/** + * 添加了外部联系人的企业成员. + * + * @author Binary Wang + * @date 2020-11-04 + */ +@Data +public class FollowedUser { + @SerializedName("userid") + private String userId; + + private String remark; + + private String description; + + @SerializedName("createtime") + private Long createTime; + + private String state; + + @SerializedName("remark_company") + private String remarkCompany; + + @SerializedName("remark_mobiles") + private String[] remarkMobiles; + + /** + * 批量获取客户详情 接口专用 + */ + @SerializedName("tag_id") + private String[] tagIds; + + /** + * 获取客户详情 接口专用 + */ + private Tag[] tags; + + @SerializedName("remark_corp_name") + private String remarkCorpName; + + @SerializedName("add_way") + private String addWay; + + @SerializedName("oper_userid") + private String operatorUserId; + + @Data + public static class Tag implements Serializable { + private static final long serialVersionUID = -7556237053703295482L; + + /** + * 该成员添加此外部联系人所打标签的分组名称(标签功能需要企业微信升级到2.7.5及以上版本) + */ + @SerializedName("group_name") + private String groupName; + + /** + * 该成员添加此外部联系人所打标签名称 + */ + @SerializedName("tag_name") + private String tagName; + + /** + * 该成员添加此外部联系人所打企业标签的id,仅企业设置(type为1)的标签返回 + */ + @SerializedName("tag_id") + private String tagId; + + /** + * 该成员添加此外部联系人所打标签类型, 1-企业设置, 2-用户自定义 + */ + private int type; + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactBatchInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactBatchInfo.java new file mode 100644 index 000000000..65e332613 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactBatchInfo.java @@ -0,0 +1,48 @@ +package me.chanjar.weixin.cp.bean.external.contact; + +import com.google.gson.annotations.SerializedName; +import lombok.Getter; +import lombok.Setter; +import me.chanjar.weixin.cp.bean.WxCpBaseResp; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +/** + *
+ * 批量获取客户详情
+ * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/92994
+ * 
+ * + * @author alucardxh + */ +@Getter +@Setter +public class WxCpExternalContactBatchInfo extends WxCpBaseResp implements Serializable { + private static final long serialVersionUID = -5166048319463473186L; + + @SerializedName("external_contact_list") + private List externalContactList; + + @SerializedName("next_cursor") + private String nextCursor; + + @Getter + @Setter + public static class ExternalContactInfo implements Serializable { + private static final long serialVersionUID = 4723983768235723206L; + + @SerializedName("external_contact") + private ExternalContact externalContact; + + @SerializedName("follow_info") + private FollowedUser followInfo; + } + + + public static WxCpExternalContactBatchInfo fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpExternalContactBatchInfo.class); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactInfo.java new file mode 100644 index 000000000..bd7229384 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpExternalContactInfo.java @@ -0,0 +1,33 @@ +package me.chanjar.weixin.cp.bean.external.contact; + +import com.google.gson.annotations.SerializedName; +import lombok.*; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +/** + *
+ * 外部联系人详情
+ * Created by Binary Wang on 2018/9/16.
+ * 参考文档:https://work.weixin.qq.com/api/doc#13878
+ * 
+ * + * @author Binary Wang + */ +@Data +public class WxCpExternalContactInfo implements Serializable { + private static final long serialVersionUID = 4311777322534499260L; + + @SerializedName("external_contact") + private ExternalContact externalContact; + + @SerializedName("follow_user") + private List followedUsers; + + public static WxCpExternalContactInfo fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpExternalContactInfo.class); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java index cb3c62195..4a41fa8f7 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java @@ -315,6 +315,7 @@ public class WxCpConsts { public static final String MARKDOWN = "markdown"; } + @UtilityClass public static class WorkBenchType { /* * 关键数据型 diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/message/WxCpTpMessageRouterRule.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/message/WxCpTpMessageRouterRule.java index fa21a1451..257cc1212 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/message/WxCpTpMessageRouterRule.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/message/WxCpTpMessageRouterRule.java @@ -5,14 +5,11 @@ import me.chanjar.weixin.common.api.WxErrorExceptionHandler; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.cp.bean.message.WxCpTpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; import me.chanjar.weixin.cp.message.WxCpMessageMatcher; import me.chanjar.weixin.cp.tp.service.WxCpTpService; -import org.apache.commons.lang3.StringUtils; import java.util.*; -import java.util.regex.Pattern; /** * The type Wx cp message router rule. @@ -57,6 +54,16 @@ public class WxCpTpMessageRouterRule { return this; } + /** + * 匹配 Message infoType + * + * @param infoType info + */ + public WxCpTpMessageRouterRule infoType(String infoType) { + this.infoType = infoType; + return this; + } + /** * 如果消息匹配某个matcher,用在用户需要自定义更复杂的匹配规则的时候 * diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java index 8cace0fe3..29089d478 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImplTest.java @@ -7,6 +7,7 @@ import me.chanjar.weixin.cp.api.ApiTestModule; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpBaseResp; import me.chanjar.weixin.cp.bean.external.*; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; import org.apache.commons.lang3.time.DateFormatUtils; import org.testng.annotations.Guice; import org.testng.annotations.Test; @@ -28,7 +29,7 @@ public class WxCpExternalContactServiceImplTest { @Test public void testGetExternalContact() throws WxErrorException { String externalUserId = this.configStorage.getExternalUserId(); - WxCpUserExternalContactInfo result = this.wxCpService.getExternalContactService().getExternalContact(externalUserId); + WxCpExternalContactInfo result = this.wxCpService.getExternalContactService().getExternalContact(externalUserId); System.out.println(result); assertNotNull(result); } @@ -105,7 +106,7 @@ public class WxCpExternalContactServiceImplTest { @Test public void testGetContactDetail() throws WxErrorException { String externalUserId = this.configStorage.getExternalUserId(); - WxCpUserExternalContactInfo result = this.wxCpService.getExternalContactService().getContactDetail(externalUserId); + WxCpExternalContactInfo result = this.wxCpService.getExternalContactService().getContactDetail(externalUserId); System.out.println(result); assertNotNull(result); } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfoTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java similarity index 86% rename from weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfoTest.java rename to weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java index 77b25f919..c666c1b94 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/WxCpUserExternalContactInfoTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/WxCpUserExternalContactInfoTest.java @@ -1,10 +1,12 @@ -package me.chanjar.weixin.cp.bean; +package me.chanjar.weixin.cp.bean.external; + +import me.chanjar.weixin.cp.bean.external.contact.ExternalContact; +import me.chanjar.weixin.cp.bean.external.contact.FollowedUser; +import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; +import org.testng.annotations.*; import java.util.List; -import me.chanjar.weixin.cp.bean.external.WxCpUserExternalContactInfo; -import org.testng.annotations.*; - import static org.assertj.core.api.Assertions.assertThat; /** @@ -77,7 +79,7 @@ public class WxCpUserExternalContactInfoTest { " ]\n" + "}"; - final WxCpUserExternalContactInfo contactInfo = WxCpUserExternalContactInfo.fromJson(json); + final WxCpExternalContactInfo contactInfo = WxCpExternalContactInfo.fromJson(json); assertThat(contactInfo).isNotNull(); assertThat(contactInfo.getExternalContact()).isNotNull(); @@ -93,21 +95,21 @@ public class WxCpUserExternalContactInfoTest { assertThat(contactInfo.getExternalContact().getExternalProfile()).isNotNull(); - final List externalAttrs = contactInfo.getExternalContact().getExternalProfile().getExternalAttrs(); + final List externalAttrs = contactInfo.getExternalContact().getExternalProfile().getExternalAttrs(); assertThat(externalAttrs).isNotEmpty(); - final WxCpUserExternalContactInfo.ExternalAttribute externalAttr1 = externalAttrs.get(0); + final ExternalContact.ExternalAttribute externalAttr1 = externalAttrs.get(0); assertThat(externalAttr1.getType()).isEqualTo(0); assertThat(externalAttr1.getName()).isEqualTo("文本名称"); assertThat(externalAttr1.getText().getValue()).isEqualTo("文本"); - final WxCpUserExternalContactInfo.ExternalAttribute externalAttr2 = externalAttrs.get(1); + final ExternalContact.ExternalAttribute externalAttr2 = externalAttrs.get(1); assertThat(externalAttr2.getType()).isEqualTo(1); assertThat(externalAttr2.getName()).isEqualTo("网页名称"); assertThat(externalAttr2.getWeb().getUrl()).isEqualTo("http://www.test.com"); assertThat(externalAttr2.getWeb().getTitle()).isEqualTo("标题"); - final WxCpUserExternalContactInfo.ExternalAttribute externalAttr3 = externalAttrs.get(2); + final ExternalContact.ExternalAttribute externalAttr3 = externalAttrs.get(2); assertThat(externalAttr3.getType()).isEqualTo(2); assertThat(externalAttr3.getName()).isEqualTo("测试app"); assertThat(externalAttr3.getMiniProgram().getAppid()).isEqualTo("wx8bd80126147df384"); @@ -115,7 +117,7 @@ public class WxCpUserExternalContactInfoTest { assertThat(externalAttr3.getMiniProgram().getTitle()).isEqualTo("my miniprogram"); - List followedUsers = contactInfo.getFollowedUsers(); + List followedUsers = contactInfo.getFollowedUsers(); assertThat(followedUsers).isNotEmpty(); assertThat(followedUsers.get(0).getUserId()).isEqualTo("rocky"); assertThat(followedUsers.get(0).getRemark()).isEqualTo("李部长");