Browse Source

:new: #1416: 企业微信增加获取OA审批模板详情接口

Gyv12345 5 years ago
parent
commit
bb0771736f
21 changed files with 386 additions and 7 deletions
  1. 8 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaService.java
  2. 9 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java
  3. 4 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java
  4. 35 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java
  5. 37 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java
  6. 17 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateContent.java
  7. 19 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java
  8. 19 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateDateRange.java
  9. 16 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateOptions.java
  10. 41 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateProperty.java
  11. 18 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateTitle.java
  12. 18 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateVacationItem.java
  13. 25 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java
  14. 22 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateContact.java
  15. 18 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateDate.java
  16. 20 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateSelector.java
  17. 23 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java
  18. 17 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateVacation.java
  19. 2 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
  20. 5 0
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java
  21. 13 7
      weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java

+ 8 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaService.java

@@ -124,4 +124,12 @@ public interface WxCpOaService {
   List<WxCpDialRecord> getDialRecord(Date startTime, Date endTime, Integer offset,
                                      Integer limit) throws WxErrorException;
 
+  /**
+   * 获取审批模板详情
+   * @param templateId 模板ID
+   * @return
+   * @throws WxErrorException
+   */
+  WxCpTemplateResult getTemplateDetail(@NonNull String templateId)throws WxErrorException;
+
 }

+ 9 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java

@@ -209,4 +209,13 @@ public class WxCpOaServiceImpl implements WxCpOaService {
       }.getType()
     );
   }
+
+  @Override
+  public WxCpTemplateResult getTemplateDetail(@NonNull String templateId) throws WxErrorException {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("template_id",templateId);
+    final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_TEMPLATE_DETAIL);
+    String responseContent = this.mainService.post(url, jsonObject.toString());
+    return WxCpGsonBuilder.create().fromJson(responseContent,WxCpTemplateResult.class);
+  }
 }

+ 4 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java

@@ -47,4 +47,8 @@ public class WxCpCheckinData implements Serializable {
 
   @SerializedName("mediaids")
   private List<String> mediaIds;
+
+  private Integer lat;
+
+  private Integer lng;
 }

+ 35 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java

@@ -0,0 +1,35 @@
+package me.chanjar.weixin.cp.bean.oa;
+
+import com.google.gson.JsonObject;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateContent;
+import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateControls;
+import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateTitle;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 审批模板详情
+ *
+ * @author gyv12345@163.com
+ */
+@Data
+public class WxCpTemplateResult implements Serializable {
+  private static final long serialVersionUID = 6690547131189343887L;
+
+  @SerializedName("errcode")
+  private Integer errCode;
+
+  @SerializedName("errmsg")
+  private String errMsg;
+
+  @SerializedName("template_names")
+  private List<TemplateTitle> templateNames;
+
+  @SerializedName("template_content")
+  private TemplateContent templateContent;
+
+}

+ 37 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java

@@ -0,0 +1,37 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.cp.bean.oa.templatedata.control.*;
+
+import java.io.Serializable;
+
+/**
+ * 模板控件配置,包含了部分控件类型的附加类型、属性,详见附录说明。
+ * 目前有配置信息的控件类型有:
+ * Date-日期/日期+时间;
+ * Selector-单选/多选;
+ * Contact-成员/部门;
+ * Table-明细;
+ * Attendance-假勤组件(请假、外出、出差、加班)
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateConfig implements Serializable {
+
+  private static final long serialVersionUID = 6993937809371277669L;
+
+  private TemplateDate date;
+
+  private TemplateSelector selector;
+
+  private TemplateContact contact;
+
+  private TemplateTable table;
+
+  private TemplateAttendance attendance;
+
+  @SerializedName("vacation_list")
+  private TemplateVacation vacationList;
+
+}

+ 17 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateContent.java

@@ -0,0 +1,17 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateContent implements Serializable {
+
+  private static final long serialVersionUID = -5640250983775840865L;
+
+  private List<TemplateControls> controls;
+}

+ 19 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java

@@ -0,0 +1,19 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class TemplateControls implements Serializable {
+
+  private static final long serialVersionUID = -7496794407355510374L;
+
+  private TemplateProperty property;
+
+  private TemplateConfig config;
+}

+ 19 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateDateRange.java

@@ -0,0 +1,19 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateDateRange implements Serializable {
+
+  private static final long serialVersionUID = -9209035461466543180L;
+
+  /**
+   * 时间刻度:hour-精确到分钟, halfday—上午/下午
+   */
+  private String type;
+}

+ 16 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateOptions.java

@@ -0,0 +1,16 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author gyv123@163.com
+ */
+public class TemplateOptions implements Serializable {
+
+  private static final long serialVersionUID = -7883792668568772078L;
+
+  private String key;
+
+  private List<TemplateTitle> value;
+}

+ 41 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateProperty.java

@@ -0,0 +1,41 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import com.google.gson.JsonObject;
+import com.google.gson.annotations.SerializedName;
+import me.chanjar.weixin.cp.bean.oa.WxCpTemplateResult;
+import me.chanjar.weixin.cp.bean.oa.templatedata.control.TemplateContact;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author gyv12345@163.com
+ */
+public class TemplateProperty implements Serializable {
+
+  private static final long serialVersionUID = -3429251158540167453L;
+
+  private String control;
+
+  private String id;
+
+  private List<TemplateTitle> title;
+
+  /**
+   * 控件说明,向申请者展示的控件填写说明,若配置了多语言则会包含中英文的控件说明,默认为zh_CN中文
+   */
+  private List<TemplateTitle> placeholder;
+
+  /**
+   * 是否必填:1-必填;0-非必填
+   */
+  private Integer require;
+  /**
+   * 是否参与打印:1-不参与打印;0-参与打印
+   */
+  @SerializedName("un_print")
+  private Integer unPrint;
+
+  private TemplateConfig config;
+}

+ 18 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateTitle.java

@@ -0,0 +1,18 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateTitle implements Serializable {
+
+  private static final long serialVersionUID = -3229779834737051398L;
+
+  private String text;
+
+  private String lang;
+}

+ 18 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateVacationItem.java

@@ -0,0 +1,18 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateVacationItem implements Serializable {
+
+  private static final long serialVersionUID = 4510594801023791319L;
+
+  private Integer id;
+
+  private TemplateTitle name;
+}

+ 25 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java

@@ -0,0 +1,25 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata.control;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateDateRange;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateAttendance implements Serializable {
+
+  private static final long serialVersionUID = 5800412600894589065L;
+
+  @SerializedName("date_range")
+  private TemplateDateRange dateRange;
+
+  /**
+   * 假勤控件类型:1-请假,3-出差,4-外出,5-加班
+   */
+  private Integer type;
+}

+ 22 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateContact.java

@@ -0,0 +1,22 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata.control;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateContact implements Serializable {
+
+  private static final long serialVersionUID = -7840088884653172851L;
+  /**
+   * 选择方式:single-单选;multi-多选
+   */
+  private String type;
+  /**
+   * 选择对象:user-成员;department-部门
+   */
+  private String mode;
+}

+ 18 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateDate.java

@@ -0,0 +1,18 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata.control;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class TemplateDate implements Serializable {
+
+  private static final long serialVersionUID = 1300634733160349684L;
+  /**
+   * day-日期;hour-日期+时间
+   */
+  private String type;
+}

+ 20 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateSelector.java

@@ -0,0 +1,20 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata.control;
+
+import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateOptions;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author
+ */
+public class TemplateSelector implements Serializable {
+
+  private static final long serialVersionUID = 4995408101489736881L;
+  /**
+   * single-单选;multi-多选
+   */
+  private String type;
+
+  private List<TemplateOptions> options;
+}

+ 23 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java

@@ -0,0 +1,23 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata.control;
+
+import lombok.Data;
+import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateControls;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateTable implements Serializable {
+
+
+  private static final long serialVersionUID = -8181588935694605858L;
+
+  private List<TemplateControls> children;
+
+  private String[] statField;
+
+}

+ 17 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateVacation.java

@@ -0,0 +1,17 @@
+package me.chanjar.weixin.cp.bean.oa.templatedata.control;
+
+import lombok.Data;
+import me.chanjar.weixin.cp.bean.oa.templatedata.TemplateVacationItem;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author gyv12345@163.com
+ */
+@Data
+public class TemplateVacation implements Serializable {
+
+  private List<TemplateVacationItem> item;
+
+}

+ 2 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java

@@ -69,6 +69,8 @@ public final class WxCpApiPathConsts {
     public static final String GET_DIAL_RECORD = "/cgi-bin/dial/get_dial_record";
     @Deprecated
     public static final String GET_APPROVAL_DATA = "/cgi-bin/corp/getapprovaldata";
+    public static final String GET_TEMPLATE_DETAIL = "/cgi-bin/oa/gettemplatedetail";
+    public static final String APPLY_EVENT="/cgi-bin/oa/applyevent";
   }
 
   public static class Tag {

+ 5 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpConsts.java

@@ -94,6 +94,11 @@ public class WxCpConsts {
      */
     public static final String CHANGE_EXTERNAL_CONTACT = "change_external_contact";
 
+    /**
+     * 企业微信审批事件推送
+     */
+    public static final String OPEN_APPROVAL_CHANGE = "open_approval_change";
+
 
   }
 

+ 13 - 7
weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java

@@ -5,10 +5,7 @@ import com.google.inject.Inject;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.cp.api.ApiTestModule;
 import me.chanjar.weixin.cp.api.WxCpService;
-import me.chanjar.weixin.cp.bean.oa.WxCpApprovalDetailResult;
-import me.chanjar.weixin.cp.bean.oa.WxCpApprovalInfo;
-import me.chanjar.weixin.cp.bean.oa.WxCpCheckinData;
-import me.chanjar.weixin.cp.bean.oa.WxCpCheckinOption;
+import me.chanjar.weixin.cp.bean.oa.*;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
@@ -62,8 +59,8 @@ public class WxCpOaServiceImplTest {
 
   @Test
   public void testGetApprovalInfo() throws WxErrorException, ParseException {
-    Date startTime = DateFormatUtils.ISO_8601_EXTENDED_DATE_FORMAT.parse("2019-04-11");
-    Date endTime = DateFormatUtils.ISO_8601_EXTENDED_DATE_FORMAT.parse("2019-05-10");
+    Date startTime = DateFormatUtils.ISO_8601_EXTENDED_DATE_FORMAT.parse("2019-12-01");
+    Date endTime = DateFormatUtils.ISO_8601_EXTENDED_DATE_FORMAT.parse("2019-12-31");
     WxCpApprovalInfo result = wxService.getOAService().getApprovalInfo(startTime, endTime);
 
     assertThat(result).isNotNull();
@@ -74,7 +71,7 @@ public class WxCpOaServiceImplTest {
 
   @Test
   public void testGetApprovalDetail() throws WxErrorException {
-    String spNo = "201909270001";
+    String spNo = "201912020001";
     WxCpApprovalDetailResult result = wxService.getOAService().getApprovalDetail(spNo);
 
     assertThat(result).isNotNull();
@@ -83,4 +80,13 @@ public class WxCpOaServiceImplTest {
     System.out.println(gson.toJson(result));
   }
 
+  @Test
+  public void testGetTemplateDetail() throws WxErrorException{
+    String templateId="3TkZjxugodbqpEMk9j7X6h6zKqYkc7MxQrrFmT7H";
+    WxCpTemplateResult result=wxService.getOAService().getTemplateDetail(templateId);
+    assertThat(result).isNotNull();
+    System.out.println("result ");
+    System.out.println(gson.toJson(result));
+  }
+
 }