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 bbbcb60957791dcb86c4162232ac940f8142f89a..c0b5204e1f347a0b68fb6aff493ed7cf378d5b32 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 @@ -138,6 +138,21 @@ public interface WxCpOaService { WxCpCorpConfInfo getCorpConf() throws WxErrorException; + /** + * 获取成员假期余额 + * 企业可通过审批应用或自建应用Secret调用本接口,获取可见范围内各个员工的假期余额数据。 + * 第三方应用可获取应用可见范围内各个员工的假期余额数据。 + * + * 请求方式:POST(HTTPS) + * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/oa/vacation/getuservacationquota?access_token=ACCESS_TOKEN + * + * @param userId + * @return + * @throws WxErrorException + */ + WxCpUserVacationQuota getUserVacationQuota(@NonNull String userId) 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 afee242fea5774b122501b949ee8f5a02408d175..82cad7aa131650e3dc474d939ead629031738864 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 @@ -172,6 +172,15 @@ public class WxCpOaServiceImpl implements WxCpOaService { return WxCpCorpConfInfo.fromJson(responseContent); } + @Override + public WxCpUserVacationQuota getUserVacationQuota(@NonNull String userId) throws WxErrorException { + final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_USER_VACATION_QUOTA); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("userid", userId); + String responseContent = this.mainService.post(url, jsonObject.toString()); + return WxCpUserVacationQuota.fromJson(responseContent); + } + @Override public List getDialRecord(Date startTime, Date endTime, Integer offset, Integer limit) throws WxErrorException { diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpBaseResp.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpBaseResp.java index 254260ea367bd0808c6493a8e5cfc46ad4e44943..4ea58c5447a01f4940d9a01215e9f1b687725af9 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpBaseResp.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpBaseResp.java @@ -29,4 +29,5 @@ public class WxCpBaseResp implements Serializable { public static WxCpBaseResp fromJson(String json) { return WxCpGsonBuilder.create().fromJson(json, WxCpBaseResp.class); } + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpUserVacationQuota.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpUserVacationQuota.java new file mode 100644 index 0000000000000000000000000000000000000000..159fcd6943be87789bf1a92fe6da9b26dbe6f529 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpUserVacationQuota.java @@ -0,0 +1,55 @@ +package me.chanjar.weixin.cp.bean.oa; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +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; + +/** + * 成员假期余额信息. + * + * @author Wang_Wong + */ +@Data +public class WxCpUserVacationQuota extends WxCpBaseResp implements Serializable { + private static final long serialVersionUID = 7387181805254287157L; + + @SerializedName("lists") + private List lists; + + @Getter + @Setter + public static class VacationQuota implements Serializable { + private static final long serialVersionUID = -5696099236344075582L; + + @SerializedName("id") + private Integer id; + + @SerializedName("assignduration") + private Integer assignDuration; + + @SerializedName("usedduration") + private Integer usedDuration; + + @SerializedName("leftduration") + private Integer leftDuration; + + @SerializedName("vacationname") + private String vacationName; + + } + + public static WxCpUserVacationQuota fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpUserVacationQuota.class); + } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + +} 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 d3f52561aff24b349652a4005492bbe2f68ba1ab..b1c42723624e91d8e44e4f28c982a85c3ec12308 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 @@ -170,7 +170,9 @@ public class WxCpOaServiceImplTest { } /** + * 获取企业假期管理配置 * https://developer.work.weixin.qq.com/document/path/93375 + * * @throws WxErrorException */ @Test @@ -179,4 +181,21 @@ public class WxCpOaServiceImplTest { log.info(corpConf.toJson()); } + /** + * 获取成员假期余额 + * https://developer.work.weixin.qq.com/document/path/93376 + * + * @throws WxErrorException + */ + @Test + public void testGetUserVacationQuota() throws WxErrorException{ + WxCpUserVacationQuota vacationQuota = this.wxService.getOaService().getUserVacationQuota("WangKai"); + log.info(vacationQuota.toJson()); + + String text = "{\"errcode\":0,\"errmsg\":\"ok\",\"lists\":[{\"id\":1,\"assignduration\":0,\"usedduration\":0,\"leftduration\":604800,\"vacationname\":\"年假\"},{\"id\":2,\"assignduration\":0,\"usedduration\":0,\"leftduration\":1296000,\"vacationname\":\"事假\"},{\"id\":3,\"assignduration\":0,\"usedduration\":0,\"leftduration\":0,\"vacationname\":\"病假\"}]}"; + WxCpUserVacationQuota json = WxCpUserVacationQuota.fromJson(text); + log.info("数据为:{}", json.toJson()); + + } + }