mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
* feat(work): add department by id Refactor the DepartmentList function and add the DepartmentListByID function. * fix: api name * fix: formatURL name * chore: format
163 lines
5.2 KiB
Go
163 lines
5.2 KiB
Go
package addresslist
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"github.com/silenceper/wechat/v2/util"
|
||
)
|
||
|
||
const (
|
||
// departmentCreateURL 创建部门
|
||
departmentCreateURL = "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=%s"
|
||
// departmentSimpleListURL 获取子部门ID列表
|
||
departmentSimpleListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=%s&id=%d"
|
||
// departmentListURL 获取部门列表
|
||
departmentListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s"
|
||
departmentListByIDURL = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s&id=%d"
|
||
// departmentGetURL 获取单个部门详情 https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=ACCESS_TOKEN&id=ID
|
||
departmentGetURL = "https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%d"
|
||
)
|
||
|
||
type (
|
||
// DepartmentCreateRequest 创建部门数据请求
|
||
DepartmentCreateRequest struct {
|
||
Name string `json:"name"`
|
||
NameEn string `json:"name_en,omitempty"`
|
||
ParentID int `json:"parentid"`
|
||
Order int `json:"order,omitempty"`
|
||
ID int `json:"id,omitempty"`
|
||
}
|
||
// DepartmentCreateResponse 创建部门数据响应
|
||
DepartmentCreateResponse struct {
|
||
util.CommonError
|
||
ID int `json:"id"`
|
||
}
|
||
|
||
// DepartmentSimpleListResponse 获取子部门ID列表响应
|
||
DepartmentSimpleListResponse struct {
|
||
util.CommonError
|
||
DepartmentID []*DepartmentID `json:"department_id"`
|
||
}
|
||
// DepartmentID 子部门ID
|
||
DepartmentID struct {
|
||
ID int `json:"id"`
|
||
ParentID int `json:"parentid"`
|
||
Order int `json:"order"`
|
||
}
|
||
|
||
// DepartmentListResponse 获取部门列表响应
|
||
DepartmentListResponse struct {
|
||
util.CommonError
|
||
Department []*Department `json:"department"`
|
||
}
|
||
// Department 部门列表数据
|
||
Department struct {
|
||
ID int `json:"id"` // 创建的部门id
|
||
Name string `json:"name"` // 部门名称
|
||
NameEn string `json:"name_en"` // 英文名称
|
||
DepartmentLeader []string `json:"department_leader"` // 部门负责人的UserID
|
||
ParentID int `json:"parentid"` // 父部门id。根部门为1
|
||
Order int `json:"order"` // 在父部门中的次序值。order值大的排序靠前
|
||
}
|
||
// DepartmentGetResponse 获取单个部门详情
|
||
DepartmentGetResponse struct {
|
||
util.CommonError
|
||
Department Department `json:"department"`
|
||
}
|
||
)
|
||
|
||
// DepartmentCreate 创建部门
|
||
// see https://developer.work.weixin.qq.com/document/path/90205
|
||
func (r *Client) DepartmentCreate(req *DepartmentCreateRequest) (*DepartmentCreateResponse, error) {
|
||
var (
|
||
accessToken string
|
||
err error
|
||
)
|
||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||
return nil, err
|
||
}
|
||
var response []byte
|
||
if response, err = util.PostJSON(fmt.Sprintf(departmentCreateURL, accessToken), req); err != nil {
|
||
return nil, err
|
||
}
|
||
result := &DepartmentCreateResponse{}
|
||
err = util.DecodeWithError(response, result, "DepartmentCreate")
|
||
return result, err
|
||
}
|
||
|
||
// DepartmentSimpleList 获取子部门ID列表
|
||
// see https://developer.work.weixin.qq.com/document/path/95350
|
||
func (r *Client) DepartmentSimpleList(departmentID int) ([]*DepartmentID, error) {
|
||
var (
|
||
accessToken string
|
||
err error
|
||
)
|
||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||
return nil, err
|
||
}
|
||
var response []byte
|
||
if response, err = util.HTTPGet(fmt.Sprintf(departmentSimpleListURL, accessToken, departmentID)); err != nil {
|
||
return nil, err
|
||
}
|
||
result := &DepartmentSimpleListResponse{}
|
||
err = util.DecodeWithError(response, result, "DepartmentSimpleList")
|
||
return result.DepartmentID, err
|
||
}
|
||
|
||
// DepartmentList 获取部门列表
|
||
// @desc https://developer.work.weixin.qq.com/document/path/90208
|
||
func (r *Client) DepartmentList() ([]*Department, error) {
|
||
return r.DepartmentListByID(0)
|
||
}
|
||
|
||
// DepartmentListByID 获取部门列表
|
||
//
|
||
// departmentID 部门id。获取指定部门及其下的子部门(以及子部门的子部门等等,递归)
|
||
//
|
||
// @desc https://developer.work.weixin.qq.com/document/path/90208
|
||
func (r *Client) DepartmentListByID(departmentID int) ([]*Department, error) {
|
||
var formatURL string
|
||
|
||
// 获取accessToken
|
||
accessToken, err := r.GetAccessToken()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
if departmentID > 0 {
|
||
formatURL = fmt.Sprintf(departmentListByIDURL, accessToken, departmentID)
|
||
} else {
|
||
formatURL = fmt.Sprintf(departmentListURL, accessToken)
|
||
}
|
||
|
||
// 发起http请求
|
||
response, err := util.HTTPGet(formatURL)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
// 按照结构体解析返回值
|
||
result := &DepartmentListResponse{}
|
||
err = util.DecodeWithError(response, result, "DepartmentList")
|
||
// 返回数据
|
||
return result.Department, err
|
||
}
|
||
|
||
// DepartmentGet 获取单个部门详情
|
||
// see https://developer.work.weixin.qq.com/document/path/95351
|
||
func (r *Client) DepartmentGet(departmentID int) (*Department, error) {
|
||
var (
|
||
accessToken string
|
||
err error
|
||
)
|
||
if accessToken, err = r.GetAccessToken(); err != nil {
|
||
return nil, err
|
||
}
|
||
var response []byte
|
||
if response, err = util.HTTPGet(fmt.Sprintf(departmentGetURL, accessToken, departmentID)); err != nil {
|
||
return nil, err
|
||
}
|
||
result := &DepartmentGetResponse{}
|
||
err = util.DecodeWithError(response, result, "DepartmentGet")
|
||
return &result.Department, err
|
||
}
|