department.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package addresslist
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. const (
  7. // departmentCreateURL 创建部门
  8. departmentCreateURL = "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=%s"
  9. // departmentSimpleListURL 获取子部门ID列表
  10. departmentSimpleListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=%s&id=%d"
  11. // departmentListURL 获取部门列表
  12. departmentListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s"
  13. )
  14. type (
  15. // DepartmentCreateRequest 创建部门数据请求
  16. DepartmentCreateRequest struct {
  17. Name string `json:"name"`
  18. NameEn string `json:"name_en,omitempty"`
  19. ParentID int `json:"parentid"`
  20. Order int `json:"order,omitempty"`
  21. ID int `json:"id,omitempty"`
  22. }
  23. // DepartmentCreateResponse 创建部门数据响应
  24. DepartmentCreateResponse struct {
  25. util.CommonError
  26. ID int `json:"id"`
  27. }
  28. // DepartmentSimpleListResponse 获取子部门ID列表响应
  29. DepartmentSimpleListResponse struct {
  30. util.CommonError
  31. DepartmentID []*DepartmentID `json:"department_id"`
  32. }
  33. // DepartmentID 子部门ID
  34. DepartmentID struct {
  35. ID int `json:"id"`
  36. ParentID int `json:"parentid"`
  37. Order int `json:"order"`
  38. }
  39. // DepartmentListResponse 获取部门列表响应
  40. DepartmentListResponse struct {
  41. util.CommonError
  42. Department []*Department `json:"department"`
  43. }
  44. // Department 部门列表数据
  45. Department struct {
  46. ID int `json:"id"` // 创建的部门id
  47. Name string `json:"name"` // 部门名称
  48. NameEn string `json:"name_en"` // 英文名称
  49. DepartmentLeader []string `json:"department_leader"` // 部门负责人的UserID
  50. ParentID int `json:"parentid"` // 父部门id。根部门为1
  51. Order int `json:"order"` // 在父部门中的次序值。order值大的排序靠前
  52. }
  53. )
  54. // DepartmentCreate 创建部门
  55. // see https://developer.work.weixin.qq.com/document/path/90205
  56. func (r *Client) DepartmentCreate(req *DepartmentCreateRequest) (*DepartmentCreateResponse, error) {
  57. var (
  58. accessToken string
  59. err error
  60. )
  61. if accessToken, err = r.GetAccessToken(); err != nil {
  62. return nil, err
  63. }
  64. var response []byte
  65. if response, err = util.PostJSON(fmt.Sprintf(departmentCreateURL, accessToken), req); err != nil {
  66. return nil, err
  67. }
  68. result := &DepartmentCreateResponse{}
  69. if err = util.DecodeWithError(response, result, "DepartmentCreate"); err != nil {
  70. return nil, err
  71. }
  72. return result, nil
  73. }
  74. // DepartmentSimpleList 获取子部门ID列表
  75. // see https://developer.work.weixin.qq.com/document/path/95350
  76. func (r *Client) DepartmentSimpleList(departmentID int) ([]*DepartmentID, error) {
  77. var (
  78. accessToken string
  79. err error
  80. )
  81. if accessToken, err = r.GetAccessToken(); err != nil {
  82. return nil, err
  83. }
  84. var response []byte
  85. if response, err = util.HTTPGet(fmt.Sprintf(departmentSimpleListURL, accessToken, departmentID)); err != nil {
  86. return nil, err
  87. }
  88. result := &DepartmentSimpleListResponse{}
  89. if err = util.DecodeWithError(response, result, "DepartmentSimpleList"); err != nil {
  90. return nil, err
  91. }
  92. return result.DepartmentID, nil
  93. }
  94. // DepartmentList 获取部门列表
  95. // @desc https://developer.work.weixin.qq.com/document/path/90208
  96. func (r *Client) DepartmentList() ([]*Department, error) {
  97. // 获取accessToken
  98. accessToken, err := r.GetAccessToken()
  99. if err != nil {
  100. return nil, err
  101. }
  102. // 发起http请求
  103. response, err := util.HTTPGet(fmt.Sprintf(departmentListURL, accessToken))
  104. if err != nil {
  105. return nil, err
  106. }
  107. // 按照结构体解析返回值
  108. result := &DepartmentListResponse{}
  109. if err = util.DecodeWithError(response, result, "DepartmentList"); err != nil {
  110. return nil, err
  111. }
  112. // 返回数据
  113. return result.Department, err
  114. }