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 ae6b59ed6..a87079d5a 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 @@ -960,5 +960,33 @@ public interface WxCpExternalContactService { WxMediaUploadResult uploadAttachment(String mediaType, Integer attachmentType, File file) throws WxErrorException; + /** + *
+   * 新建敏感词规则
+   * 企业和第三方应用可以通过此接口新建敏感词规则
+   * 请求方式:POST(HTTPS)
+   * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_intercept_rule?access_token=ACCESS_TOKEN
+   * 
+   */
+  WxCpInterceptRuleResultResp addInterceptRule(WxCpInterceptRuleResp ruleResp) throws  WxErrorException;
+  /**
+   * 
+   * 修改敏感词规则
+   * 企业和第三方应用可以通过此接口修改敏感词规则
+   * 请求方式:POST(HTTPS)
+   * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/update_intercept_rule?access_token=ACCESS_TOKEN
+   * 
+   */
+  WxCpInterceptRuleResultResp updateInterceptRule(WxCpInterceptRuleResp ruleResp) throws  WxErrorException;
+  /**
+   * 
+   * 删除敏感词规则
+   * 企业和第三方应用可以通过此接口修改敏感词规则
+   * 请求方式:POST(HTTPS)
+   * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_intercept_rule?access_token=ACCESS_TOKEN
+   * 
+   * @param rule_id 规则id
+   */
+  WxCpBaseResp delInterceptRule(String rule_id) 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 def24cf8b..89fc6961d 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
@@ -2,10 +2,12 @@ package me.chanjar.weixin.cp.api.impl;
 
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.UUID;
+
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
@@ -111,7 +113,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
   @Override
   public WxCpExternalContactInfo getContactDetail(String userId, String cursor) throws WxErrorException {
     String params = userId;
-    if(StringUtils.isNotEmpty(cursor)){
+    if (StringUtils.isNotEmpty(cursor)) {
       params = params + "&cursor=" + cursor;
     }
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_CONTACT_DETAIL + params);
@@ -130,11 +132,11 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
   }
 
   @Override
-  public String unionidToExternalUserid(@NotNull String unionid,String openid) throws WxErrorException {
+  public String unionidToExternalUserid(@NotNull String unionid, String openid) throws WxErrorException {
     JsonObject json = new JsonObject();
     json.addProperty("unionid", unionid);
-    if(StringUtils.isNotEmpty(openid)){
-      json.addProperty("openid",openid);
+    if (StringUtils.isNotEmpty(openid)) {
+      json.addProperty("openid", openid);
     }
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(UNIONID_TO_EXTERNAL_USERID);
     String responseContent = this.mainService.post(url, json.toString());
@@ -157,8 +159,8 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
     JsonObject json = new JsonObject();
     json.addProperty("unionid", unionid);
     json.addProperty("openid", openid);
-    if(StringUtils.isNotEmpty(corpid)){
-      json.addProperty("corpid",corpid);
+    if (StringUtils.isNotEmpty(corpid)) {
+      json.addProperty("corpid", corpid);
     }
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(UNIONID_TO_EXTERNAL_USERID_3RD);
     String responseContent = this.mainService.post(url, json.toString());
@@ -188,7 +190,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
   @Override
   public String opengidToChatid(@NotNull String opengid) throws WxErrorException {
     JsonObject json = new JsonObject();
-    json.addProperty("opengid",opengid);
+    json.addProperty("opengid", opengid);
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(OPENID_TO_CHATID);
     String responseContent = this.mainService.post(url, json.toString());
     JsonObject tmpJson = GsonParser.parse(responseContent);
@@ -247,7 +249,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
   @Override
   public WxCpUserExternalUnassignList listUnassignedList(Integer pageIndex, String cursor, Integer pageSize) throws WxErrorException {
     JsonObject json = new JsonObject();
-    if(pageIndex != null){
+    if (pageIndex != null) {
       json.addProperty("page_id", pageIndex);
     }
     json.addProperty("cursor", StringUtils.isEmpty(cursor) ? "" : cursor);
@@ -518,20 +520,20 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
 
   @Override
   public WxCpGetMomentList getMomentList(Long startTime, Long endTime, String creator, Integer filterType,
-    String cursor, Integer limit) throws WxErrorException {
+                                         String cursor, Integer limit) throws WxErrorException {
     JsonObject json = new JsonObject();
     json.addProperty("start_time", startTime);
     json.addProperty("end_time", endTime);
     if (!StringUtils.isEmpty(creator)) {
       json.addProperty("creator", creator);
     }
-    if (filterType!=null) {
+    if (filterType != null) {
       json.addProperty("filter_type", filterType);
     }
     if (!StringUtils.isEmpty(cursor)) {
       json.addProperty("cursor", cursor);
     }
-    if (limit!=null) {
+    if (limit != null) {
       json.addProperty("limit", limit);
     }
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_MOMENT_LIST);
@@ -547,7 +549,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
     if (!StringUtils.isEmpty(cursor)) {
       json.addProperty("cursor", cursor);
     }
-    if (limit!=null) {
+    if (limit != null) {
       json.addProperty("limit", limit);
     }
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_MOMENT_TASK);
@@ -557,14 +559,14 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
 
   @Override
   public WxCpGetMomentCustomerList getMomentCustomerList(String momentId, String userId,
-    String cursor, Integer limit) throws WxErrorException {
+                                                         String cursor, Integer limit) throws WxErrorException {
     JsonObject json = new JsonObject();
     json.addProperty("moment_id", momentId);
     json.addProperty("userid", userId);
     if (!StringUtils.isEmpty(cursor)) {
       json.addProperty("cursor", cursor);
     }
-    if (limit!=null) {
+    if (limit != null) {
       json.addProperty("limit", limit);
     }
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_MOMENT_CUSTOMER_LIST);
@@ -574,14 +576,14 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
 
   @Override
   public WxCpGetMomentSendResult getMomentSendResult(String momentId, String userId,
-    String cursor, Integer limit) throws WxErrorException {
+                                                     String cursor, Integer limit) throws WxErrorException {
     JsonObject json = new JsonObject();
     json.addProperty("moment_id", momentId);
     json.addProperty("userid", userId);
     if (!StringUtils.isEmpty(cursor)) {
       json.addProperty("cursor", cursor);
     }
-    if (limit!=null) {
+    if (limit != null) {
       json.addProperty("limit", limit);
     }
     final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_MOMENT_SEND_RESULT);
@@ -790,8 +792,8 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
    * https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册列表
    * 
* - * @param limit 返回的最大记录数,整型,最大值100,默认值50,超过最大值时取默认值 - * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 + * @param limit 返回的最大记录数,整型,最大值100,默认值50,超过最大值时取默认值 + * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 * @return wx cp base resp * @throws WxErrorException the wx error exception */ @@ -811,7 +813,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic * https://work.weixin.qq.com/api/doc/90000/90135/95096#获取商品图册 *
* - * @param productId 商品id + * @param productId 商品id * @return wx cp base resp * @throws WxErrorException the wx error exception */ @@ -826,7 +828,7 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic @Override public WxMediaUploadResult uploadAttachment(String mediaType, String fileType, Integer attachmentType, - InputStream inputStream) throws WxErrorException, IOException { + InputStream inputStream) throws WxErrorException, IOException { return uploadAttachment(mediaType, attachmentType, FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), fileType)); } @@ -839,4 +841,26 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic return this.mainService.execute(MediaUploadRequestExecutor.create( this.mainService.getRequestHttp()), url, file); } + + @Override + public WxCpInterceptRuleResultResp addInterceptRule(WxCpInterceptRuleResp ruleResp) throws WxErrorException { + return WxCpInterceptRuleResultResp + .fromJson(this.mainService.post(this.mainService.getWxCpConfigStorage().getApiUrl(ADD_INTERCEPT_RULE), ruleResp.toJson())); + } + + @Override + public WxCpInterceptRuleResultResp updateInterceptRule(WxCpInterceptRuleResp ruleResp) throws WxErrorException { + return WxCpInterceptRuleResultResp + .fromJson(this.mainService.post(this.mainService.getWxCpConfigStorage().getApiUrl(UPDATE_INTERCEPT_RULE), ruleResp.toJson())); + } + + @Override + public WxCpBaseResp delInterceptRule(String rule_id) throws WxErrorException { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("rule_id",rule_id); + return WxCpBaseResp + .fromJson(this.mainService.post(this.mainService.getWxCpConfigStorage().getApiUrl(DEL_INTERCEPT_RULE), jsonObject)); + } + + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpInterceptRuleResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpInterceptRuleResp.java new file mode 100644 index 000000000..0c5f86c3c --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpInterceptRuleResp.java @@ -0,0 +1,61 @@ +package me.chanjar.weixin.cp.bean.external; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.util.Date; +import java.util.List; + +/** + * 新增敏感词规则请求参数封装实体类 + * + * @author didi + * @date 2022-04-17 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WxCpInterceptRuleResp { + + @SerializedName("rule_name") + private String ruleName; + @SerializedName("rule_id") + private String ruleId; + @SerializedName("word_list") + private List wordList; + @SerializedName("semantics_list") + private List semanticsList; + @SerializedName("intercept_type") + private int interceptType; + @SerializedName("applicable_range") + private ApplicableRange applicableRange; + + @Data + public static class ApplicableRange { + @SerializedName("user_list") + private List userList; + @SerializedName("department_list") + private List departmentList; + public static ApplicableRange fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, ApplicableRange.class); + } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + } + + public static WxCpInterceptRuleResp fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpInterceptRuleResp.class); + } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpInterceptRuleResultResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpInterceptRuleResultResp.java new file mode 100644 index 000000000..2ce6c28f2 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/WxCpInterceptRuleResultResp.java @@ -0,0 +1,30 @@ +package me.chanjar.weixin.cp.bean.external; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import me.chanjar.weixin.cp.bean.WxCpBaseResp; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; + +/** + * 新建敏感词规则负返回结果 + * @author didi + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class WxCpInterceptRuleResultResp extends WxCpBaseResp implements Serializable { + + @SerializedName("rule_id") + private String ruleId; + + public static WxCpInterceptRuleResultResp fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpInterceptRuleResultResp.class); + } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java index 6ae69c189..e2d4761bd 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/applydata/ContentValue.java @@ -42,6 +42,9 @@ public class ContentValue implements Serializable { private Vacation vacation; + @SerializedName("date_range") + private Attendance.DataRange dateRange; + @Data public static class Date implements Serializable { private static final long serialVersionUID = -6181554080062231138L; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java index b3773eeab..cd43d3472 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java @@ -281,6 +281,11 @@ public interface WxCpApiPathConsts { String UPLOAD_ATTACHMENT = "/cgi-bin/media/upload_attachment"; + + String ADD_INTERCEPT_RULE = "/cgi-bin/externalcontact/add_intercept_rule"; + String UPDATE_INTERCEPT_RULE = "/cgi-bin/externalcontact/update_intercept_rule"; + String DEL_INTERCEPT_RULE = "/cgi-bin/externalcontact/del_intercept_rule"; + } interface Kf {