diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaService.java index f24470025..9af5a36e4 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaService.java @@ -124,4 +124,12 @@ public interface WxCpOaService { List getDialRecord(Date startTime, Date endTime, Integer offset, Integer limit) throws WxErrorException; + /** + * 获取审批模板详情 + * @param templateId 模板ID + * @return + * @throws WxErrorException + */ + WxCpTemplateResult getTemplateDetail(@NonNull String templateId)throws WxErrorException; + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java index 2a1d41ec7..0484e1f62 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImpl.java +++ b/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); + } } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java index 555f59c01..b76553ca6 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpCheckinData.java +++ b/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 mediaIds; + + private Integer lat; + + private Integer lng; } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpTemplateResult.java new file mode 100644 index 000000000..df25aabf3 --- /dev/null +++ b/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 templateNames; + + @SerializedName("template_content") + private TemplateContent templateContent; + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateConfig.java new file mode 100644 index 000000000..54213d9d9 --- /dev/null +++ b/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; + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateContent.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateContent.java new file mode 100644 index 000000000..72fc02cd1 --- /dev/null +++ b/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 controls; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateControls.java new file mode 100644 index 000000000..bc9919ac3 --- /dev/null +++ b/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; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateDateRange.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateDateRange.java new file mode 100644 index 000000000..716f0859d --- /dev/null +++ b/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; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateOptions.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateOptions.java new file mode 100644 index 000000000..7dc0b41a8 --- /dev/null +++ b/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 value; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateProperty.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateProperty.java new file mode 100644 index 000000000..cf33f4717 --- /dev/null +++ b/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 title; + + /** + * 控件说明,向申请者展示的控件填写说明,若配置了多语言则会包含中英文的控件说明,默认为zh_CN中文 + */ + private List placeholder; + + /** + * 是否必填:1-必填;0-非必填 + */ + private Integer require; + /** + * 是否参与打印:1-不参与打印;0-参与打印 + */ + @SerializedName("un_print") + private Integer unPrint; + + private TemplateConfig config; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateTitle.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateTitle.java new file mode 100644 index 000000000..cdfe30c9b --- /dev/null +++ b/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; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateVacationItem.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/TemplateVacationItem.java new file mode 100644 index 000000000..17aa33afc --- /dev/null +++ b/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; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateAttendance.java new file mode 100644 index 000000000..21dca126e --- /dev/null +++ b/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; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateContact.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateContact.java new file mode 100644 index 000000000..15fcaf3ac --- /dev/null +++ b/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; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateDate.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateDate.java new file mode 100644 index 000000000..7d588ddc7 --- /dev/null +++ b/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; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateSelector.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateSelector.java new file mode 100644 index 000000000..1eb1c9359 --- /dev/null +++ b/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 options; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateTable.java new file mode 100644 index 000000000..08cdd5d4e --- /dev/null +++ b/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 children; + + private String[] statField; + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateVacation.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/templatedata/control/TemplateVacation.java new file mode 100644 index 000000000..74b741a08 --- /dev/null +++ b/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 item; + +} 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 2a26a4035..d65492d5c 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 @@ -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 { 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 48bfc3ceb..a69b8ea2e 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 @@ -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"; + } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java index bc220b599..451523908 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaServiceImplTest.java +++ b/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)); + } + }