From 68cc3c14e616465d3cf3526c5220b3d44e52afbd Mon Sep 17 00:00:00 2001 From: jiangyong Date: Sat, 27 Jun 2026 11:46:22 +0800 Subject: [PATCH] setvacation --- .gitignore | 1 + qyweixin/app_approve.go | 55 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/.gitignore b/.gitignore index 79e270e..79b711b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ go.sum pkg test.go .claude +opencode.json \ No newline at end of file diff --git a/qyweixin/app_approve.go b/qyweixin/app_approve.go index 739ffc0..84cf39b 100644 --- a/qyweixin/app_approve.go +++ b/qyweixin/app_approve.go @@ -86,6 +86,21 @@ type ApproveDetailRsp struct { Info *ApproveDetail `json:"info"` } +type VacationQuota struct { + Id uint32 `json:"id"` + AssignDuration uint32 `json:"assignduration"` + UsedDuration uint32 `json:"usedduration"` + LeftDuration uint32 `json:"leftduration"` + VacationName string `json:"vacationname"` + RealAssignDuration uint32 `json:"real_assignduration"` +} + +type VacationQuotaRsp struct { + Errcode int `json:"errcode"` + Errmsg string `json:"errmsg"` + Lists []*VacationQuota `json:"lists"` +} + type AppApprove struct { App } @@ -165,6 +180,46 @@ func NewAppApprove(cfg *AppConfig) *AppApprove { } } +func (q *AppApprove) GetVacationQuota(userid string) ([]*VacationQuota, error) { + reqUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/oa/vacation/getuservacationquota?access_token=%s", q.GetToken()) + reqParam := map[string]interface{}{ + "userid": userid, + } + rspBody, err := util.HttpPostJson(reqUrl, nil, []byte(goutil.EncodeJSON(reqParam))) + if err != nil { + return nil, err + } + if _, err := q.GetResult(rspBody); err != nil { + return nil, err + } + + var rsp VacationQuotaRsp + if err := json.Unmarshal(rspBody, &rsp); err != nil { + log.Errorf("get body[%s] json error :%s", string(rspBody), err.Error()) + return nil, err + } + return rsp.Lists, nil +} + +func (q *AppApprove) SetVacationQuota(userid string, vacationId, leftDuration, timeAttr uint32, remarks string) error { + reqUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/oa/vacation/setoneuserquota?access_token=%s", q.GetToken()) + reqParam := map[string]interface{}{ + "userid": userid, + "vacation_id": vacationId, + "leftduration": leftDuration, + "time_attr": timeAttr, + } + if remarks != "" { + reqParam["remarks"] = remarks + } + rspBody, err := util.HttpPostJson(reqUrl, nil, []byte(goutil.EncodeJSON(reqParam))) + if err != nil { + return err + } + _, err = q.GetResult(rspBody) + return err +} + func (q *AppApprove) GetDetail(spNo string) (*ApproveDetail, error) { reqUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=%s", q.GetToken()) reqParam := fmt.Sprintf(`{"sp_no":"%s"}`, spNo)