mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-11-01 00:46:54 +08:00 
			
		
		
		
	🆕 #2365 【企业微信】新增获取企业群发记录及结果的接口
This commit is contained in:
		| @@ -20,10 +20,12 @@ import org.apache.http.impl.client.CloseableHttpClient; | ||||
| import org.apache.http.impl.client.HttpClientBuilder; | ||||
| import org.apache.http.impl.client.HttpClients; | ||||
| import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; | ||||
| import org.apache.http.protocol.HttpContext; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
|  | ||||
| import javax.annotation.concurrent.NotThreadSafe; | ||||
| import java.io.IOException; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| import java.util.concurrent.atomic.AtomicBoolean; | ||||
|  | ||||
| @@ -52,10 +54,12 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder { | ||||
|   private SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory(); | ||||
|   private PlainConnectionSocketFactory plainConnectionSocketFactory = PlainConnectionSocketFactory.getSocketFactory(); | ||||
|   private String httpProxyHost; | ||||
|  | ||||
|   private int httpProxyPort; | ||||
|   private String httpProxyUsername; | ||||
|   private String httpProxyPassword; | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    * 闲置连接监控线程. | ||||
|    */ | ||||
|   | ||||
| @@ -20,8 +20,8 @@ import me.chanjar.weixin.cp.bean.external.WxCpUserTransferCustomerReq; | ||||
| import me.chanjar.weixin.cp.bean.external.WxCpUserTransferCustomerResp; | ||||
| import me.chanjar.weixin.cp.bean.external.WxCpUserTransferResultResp; | ||||
| import me.chanjar.weixin.cp.bean.external.WxCpWelcomeMsg; | ||||
| import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactBatchInfo; | ||||
| import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; | ||||
| import me.chanjar.weixin.cp.bean.external.contact.*; | ||||
| import me.chanjar.weixin.cp.bean.oa.WxCpApprovalInfoQueryFilter; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
|  | ||||
| import java.util.Date; | ||||
| @@ -587,4 +587,51 @@ public interface WxCpExternalContactService { | ||||
|   WxCpBaseResp markTag(String userid, String externalUserid, String[] addTag, String[] removeTag) throws WxErrorException; | ||||
|  | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 企业和第三方应用可通过此接口获取企业与成员的群发记录。 | ||||
|    * https://work.weixin.qq.com/api/doc/90000/90135/93338 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param chatType         群发任务的类型,默认为single,表示发送给客户,group表示发送给客户群 | ||||
|    * @param startTime        群发任务记录开始时间 | ||||
|    * @param endTime          群发任务记录结束时间 | ||||
|    * @param creator           群发任务创建人企业账号id | ||||
|    * @param filterType       创建人类型。0:企业发表 1:个人发表 2:所有,包括个人创建以及企业创建,默认情况下为所有类型 | ||||
|    * @param limit             返回的最大记录数,整型,最大值100,默认值50,超过最大值时取默认值 | ||||
|    * @param cursor            用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 | ||||
|    * @return wx cp base resp | ||||
|    * @throws WxErrorException the wx error exception | ||||
|    */ | ||||
|   WxCpGroupMsgListResult getGroupMsgListV2(String chatType, @NonNull Date startTime, @NonNull Date endTime, String creator, Integer filterType, Integer limit, String cursor) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 企业和第三方应用可通过此接口获取企业与成员的群发记录。 | ||||
|    * https://work.weixin.qq.com/api/doc/90000/90135/93338#获取企业群发成员执行结果 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param msgid             群发消息的id,通过获取群发记录列表接口返回 | ||||
|    * @param userid            发送成员userid,通过获取群发成员发送任务列表接口返回 | ||||
|    * @param limit             返回的最大记录数,整型,最大值1000,默认值500,超过最大值时取默认值 | ||||
|    * @param cursor            用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 | ||||
|    * @return wx cp base resp | ||||
|    * @throws WxErrorException the wx error exception | ||||
|    */ | ||||
|   WxCpGroupMsgSendResult getGroupMsgSendResult(String msgid, String userid, Integer limit, String cursor) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 获取群发成员发送任务列表。 | ||||
|    * https://work.weixin.qq.com/api/doc/90000/90135/93338#获取群发成员发送任务列表 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param msgid             群发消息的id,通过获取群发记录列表接口返回 | ||||
|    * @param limit             返回的最大记录数,整型,最大值1000,默认值500,超过最大值时取默认值 | ||||
|    * @param cursor            用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 | ||||
|    * @return wx cp base resp | ||||
|    * @throws WxErrorException the wx error exception | ||||
|    */ | ||||
|    WxCpGroupMsgTaskResult getGroupMsgTask(String msgid, Integer limit, String cursor) throws WxErrorException; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -31,8 +31,7 @@ import me.chanjar.weixin.cp.bean.external.WxCpUserTransferCustomerResp; | ||||
| import me.chanjar.weixin.cp.bean.external.WxCpUserTransferResultResp; | ||||
| import me.chanjar.weixin.cp.bean.external.WxCpUserWithExternalPermission; | ||||
| import me.chanjar.weixin.cp.bean.external.WxCpWelcomeMsg; | ||||
| import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactBatchInfo; | ||||
| import me.chanjar.weixin.cp.bean.external.contact.WxCpExternalContactInfo; | ||||
| import me.chanjar.weixin.cp.bean.external.contact.*; | ||||
| import org.apache.commons.lang3.ArrayUtils; | ||||
| import org.apache.commons.lang3.StringUtils; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| @@ -449,4 +448,86 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic | ||||
|     final String result = this.mainService.post(url, json.toString()); | ||||
|     return WxCpBaseResp.fromJson(result); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 企业和第三方应用可通过此接口获取企业与成员的群发记录。 | ||||
|    * https://work.weixin.qq.com/api/doc/90000/90135/93338 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param chatType   群发任务的类型,默认为single,表示发送给客户,group表示发送给客户群 | ||||
|    * @param startTime  群发任务记录开始时间 | ||||
|    * @param endTime    群发任务记录结束时间 | ||||
|    * @param creator    群发任务创建人企业账号id | ||||
|    * @param filterType 创建人类型。0:企业发表 1:个人发表 2:所有,包括个人创建以及企业创建,默认情况下为所有类型 | ||||
|    * @param limit      返回的最大记录数,整型,最大值100,默认值50,超过最大值时取默认值 | ||||
|    * @param cursor     用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 | ||||
|    * @return wx cp base resp | ||||
|    * @throws WxErrorException the wx error exception | ||||
|    */ | ||||
|   @Override | ||||
|   public WxCpGroupMsgListResult getGroupMsgListV2(String chatType, @NonNull Date startTime, @NonNull Date endTime, String creator, Integer filterType, Integer limit, String cursor) throws WxErrorException { | ||||
|     JsonObject json = new JsonObject(); | ||||
|     json.addProperty("chat_type", chatType); | ||||
|     json.addProperty("start_time", startTime.getTime() / 1000); | ||||
|     json.addProperty("end_time", endTime.getTime() / 1000); | ||||
|     json.addProperty("creator", creator); | ||||
|     json.addProperty("filter_type", filterType); | ||||
|     json.addProperty("limit", limit); | ||||
|     json.addProperty("cursor", cursor); | ||||
|  | ||||
|     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_GROUP_MSG_SEND_RESULT); | ||||
|     final String result = this.mainService.post(url, json.toString()); | ||||
|     return WxCpGroupMsgListResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 企业和第三方应用可通过此接口获取企业与成员的群发记录。 | ||||
|    * https://work.weixin.qq.com/api/doc/90000/90135/93338#获取企业群发成员执行结果 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param msgid  群发消息的id,通过获取群发记录列表接口返回 | ||||
|    * @param userid 发送成员userid,通过获取群发成员发送任务列表接口返回 | ||||
|    * @param limit  返回的最大记录数,整型,最大值1000,默认值500,超过最大值时取默认值 | ||||
|    * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 | ||||
|    * @return wx cp base resp | ||||
|    * @throws WxErrorException the wx error exception | ||||
|    */ | ||||
|   @Override | ||||
|   public WxCpGroupMsgSendResult getGroupMsgSendResult(String msgid, String userid, Integer limit, String cursor) throws WxErrorException { | ||||
|     JsonObject json = new JsonObject(); | ||||
|     json.addProperty("msgid", msgid); | ||||
|     json.addProperty("userid", userid); | ||||
|     json.addProperty("limit", limit); | ||||
|     json.addProperty("cursor", cursor); | ||||
|  | ||||
|     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_GROUP_MSG_SEND_RESULT); | ||||
|     final String result = this.mainService.post(url, json.toString()); | ||||
|     return WxCpGroupMsgSendResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * 获取群发成员发送任务列表。 | ||||
|    * https://work.weixin.qq.com/api/doc/90000/90135/93338#获取群发成员发送任务列表 | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param msgid  群发消息的id,通过获取群发记录列表接口返回 | ||||
|    * @param limit  返回的最大记录数,整型,最大值1000,默认值500,超过最大值时取默认值 | ||||
|    * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 | ||||
|    * @return wx cp base resp | ||||
|    * @throws WxErrorException the wx error exception | ||||
|    */ | ||||
|   @Override | ||||
|   public WxCpGroupMsgTaskResult getGroupMsgTask(String msgid, Integer limit, String cursor) throws WxErrorException { | ||||
|     JsonObject json = new JsonObject(); | ||||
|     json.addProperty("msgid", msgid); | ||||
|     json.addProperty("limit", limit); | ||||
|     json.addProperty("cursor", cursor); | ||||
|  | ||||
|     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_GROUP_MSG_SEND_RESULT); | ||||
|     final String result = this.mainService.post(url, json.toString()); | ||||
|     return WxCpGroupMsgTaskResult.fromJson(result); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,60 @@ | ||||
| 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.bean.external.msg.Attachment; | ||||
| import me.chanjar.weixin.cp.bean.external.msg.Text; | ||||
| import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
|  * 获取企业群发成员执行结果 | ||||
|  * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/93338 | ||||
|  * </pre> | ||||
|  * | ||||
|  * @author <a href="https://github.com/wslongchen">Mr.Pan</a> | ||||
|  */ | ||||
| @Getter | ||||
| @Setter | ||||
| public class WxCpGroupMsgListResult extends WxCpBaseResp implements Serializable { | ||||
|  | ||||
|   private static final long serialVersionUID = 3464981991558716620L; | ||||
|  | ||||
|   @SerializedName("group_msg_list") | ||||
|   private List<ExternalContactGroupMsgInfo> groupMsgList; | ||||
|  | ||||
|   @SerializedName("next_cursor") | ||||
|   private String nextCursor; | ||||
|  | ||||
|   @Getter | ||||
|   @Setter | ||||
|   public static class ExternalContactGroupMsgInfo implements Serializable { | ||||
|  | ||||
|     private static final long serialVersionUID = 3108435608725559381L; | ||||
|     @SerializedName("msgid") | ||||
|     private String msgId; | ||||
|  | ||||
|     private String creator; | ||||
|  | ||||
|     private Text text; | ||||
|  | ||||
|     private List<Attachment> attachments; | ||||
|  | ||||
|     @SerializedName("create_type") | ||||
|     private Integer createType; | ||||
|  | ||||
|     @SerializedName("create_time") | ||||
|     private Long createTime; | ||||
|  | ||||
|   } | ||||
|  | ||||
|   public static WxCpGroupMsgListResult fromJson(String json) { | ||||
|     return WxCpGsonBuilder.create().fromJson(json, WxCpGroupMsgListResult.class); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,56 @@ | ||||
| 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; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
|  * 获取企业群发成员执行结果 | ||||
|  * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/93338 | ||||
|  * </pre> | ||||
|  * | ||||
|  * @author <a href="https://github.com/wslongchen">Mr.Pan</a> | ||||
|  */ | ||||
| @Getter | ||||
| @Setter | ||||
| public class WxCpGroupMsgSendResult extends WxCpBaseResp implements Serializable { | ||||
|   private static final long serialVersionUID = -5166048319463473186L; | ||||
|  | ||||
|   @SerializedName("send_list") | ||||
|   private List<ExternalContactGroupMsgSendInfo> sendList; | ||||
|  | ||||
|   @SerializedName("next_cursor") | ||||
|   private String nextCursor; | ||||
|  | ||||
|   @Getter | ||||
|   @Setter | ||||
|   public static class ExternalContactGroupMsgSendInfo implements Serializable { | ||||
|     private static final long serialVersionUID = 1500416806087532531L; | ||||
|  | ||||
|     @SerializedName("external_userid") | ||||
|     private String externalUserId; | ||||
|  | ||||
|     @SerializedName("chat_id") | ||||
|     private String chatId; | ||||
|  | ||||
|     @SerializedName("userid") | ||||
|     private String userId; | ||||
|  | ||||
|     private Integer status; | ||||
|  | ||||
|     @SerializedName("send_time") | ||||
|     private Long sendTime; | ||||
|  | ||||
|   } | ||||
|  | ||||
|   public static WxCpGroupMsgSendResult fromJson(String json) { | ||||
|     return WxCpGsonBuilder.create().fromJson(json, WxCpGroupMsgSendResult.class); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,50 @@ | ||||
| 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; | ||||
|  | ||||
| /** | ||||
|  * <pre> | ||||
|  * 获取群发成员发送任务列表 | ||||
|  * 参考文档:https://work.weixin.qq.com/api/doc/90000/90135/93338 | ||||
|  * </pre> | ||||
|  * | ||||
|  * @author <a href="https://github.com/wslongchen">Mr.Pan</a> | ||||
|  */ | ||||
| @Getter | ||||
| @Setter | ||||
| public class WxCpGroupMsgTaskResult extends WxCpBaseResp implements Serializable { | ||||
|   private static final long serialVersionUID = -5166048319463473186L; | ||||
|  | ||||
|   @SerializedName("task_list") | ||||
|   private List<ExternalContactGroupMsgTaskInfo> taskList; | ||||
|  | ||||
|   @SerializedName("next_cursor") | ||||
|   private String nextCursor; | ||||
|  | ||||
|   @Getter | ||||
|   @Setter | ||||
|   public static class ExternalContactGroupMsgTaskInfo implements Serializable { | ||||
|     private static final long serialVersionUID = 1500416806087532531L; | ||||
|  | ||||
|     @SerializedName("userid") | ||||
|     private String userId; | ||||
|  | ||||
|     private Integer status; | ||||
|  | ||||
|     @SerializedName("send_time") | ||||
|     private Long sendTime; | ||||
|  | ||||
|   } | ||||
|  | ||||
|   public static WxCpGroupMsgTaskResult fromJson(String json) { | ||||
|     return WxCpGsonBuilder.create().fromJson(json, WxCpGroupMsgTaskResult.class); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -205,5 +205,9 @@ public interface WxCpApiPathConsts { | ||||
|     String EDIT_CORP_TAG = "/cgi-bin/externalcontact/edit_corp_tag"; | ||||
|     String DEL_CORP_TAG = "/cgi-bin/externalcontact/del_corp_tag"; | ||||
|     String MARK_TAG = "/cgi-bin/externalcontact/mark_tag"; | ||||
|  | ||||
|     String GET_GROUP_MSG_SEND_RESULT = "/cgi-bin/externalcontact/get_groupmsg_send_result"; | ||||
|     String GET_GROUP_MSG_TASK = "/cgi-bin/externalcontact/get_groupmsg_task"; | ||||
|     String GET_GROUP_MSG_LIST_V2 = "/cgi-bin/externalcontact/get_groupmsg_list_v2"; | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 潘安
					潘安