department.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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. // departmentUpdateURL 更新部门
  10. departmentUpdateURL = "https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token=%s"
  11. // departmentDeleteURL 删除部门
  12. departmentDeleteURL = "https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token=%s&id=%d"
  13. // departmentSimpleListURL 获取子部门ID列表
  14. departmentSimpleListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=%s&id=%d"
  15. // departmentListURL 获取部门列表
  16. departmentListURL = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s"
  17. departmentListByIDURL = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s&id=%d"
  18. // departmentGetURL 获取单个部门详情
  19. departmentGetURL = "https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%d"
  20. )
  21. type (
  22. // DepartmentCreateRequest 创建部门数据请求
  23. DepartmentCreateRequest struct {
  24. Name string `json:"name"`
  25. NameEn string `json:"name_en,omitempty"`
  26. ParentID int `json:"parentid"`
  27. Order int `json:"order,omitempty"`
  28. ID int `json:"id,omitempty"`
  29. }
  30. // DepartmentCreateResponse 创建部门数据响应
  31. DepartmentCreateResponse struct {
  32. util.CommonError
  33. ID int `json:"id"`
  34. }
  35. // DepartmentSimpleListResponse 获取子部门ID列表响应
  36. DepartmentSimpleListResponse struct {
  37. util.CommonError
  38. DepartmentID []*DepartmentID `json:"department_id"`
  39. }
  40. // DepartmentID 子部门ID
  41. DepartmentID struct {
  42. ID int `json:"id"`
  43. ParentID int `json:"parentid"`
  44. Order int `json:"order"`
  45. }
  46. // DepartmentListResponse 获取部门列表响应
  47. DepartmentListResponse struct {
  48. util.CommonError
  49. Department []*Department `json:"department"`
  50. }
  51. // Department 部门列表数据
  52. Department struct {
  53. ID int `json:"id"` // 创建的部门id
  54. Name string `json:"name"` // 部门名称
  55. NameEn string `json:"name_en"` // 英文名称
  56. DepartmentLeader []string `json:"department_leader"` // 部门负责人的UserID
  57. ParentID int `json:"parentid"` // 父部门id。根部门为1
  58. Order int `json:"order"` // 在父部门中的次序值。order值大的排序靠前
  59. }
  60. // DepartmentGetResponse 获取单个部门详情
  61. DepartmentGetResponse struct {
  62. util.CommonError
  63. Department Department `json:"department"`
  64. }
  65. )
  66. // DepartmentCreate 创建部门
  67. // see https://developer.work.weixin.qq.com/document/path/90205
  68. func (r *Client) DepartmentCreate(req *DepartmentCreateRequest) (*DepartmentCreateResponse, error) {
  69. var (
  70. accessToken string
  71. err error
  72. )
  73. if accessToken, err = r.GetAccessToken(); err != nil {
  74. return nil, err
  75. }
  76. var response []byte
  77. if response, err = util.PostJSON(fmt.Sprintf(departmentCreateURL, accessToken), req); err != nil {
  78. return nil, err
  79. }
  80. result := &DepartmentCreateResponse{}
  81. err = util.DecodeWithError(response, result, "DepartmentCreate")
  82. return result, err
  83. }
  84. // DepartmentUpdateRequest 更新部门请求
  85. type DepartmentUpdateRequest struct {
  86. ID int `json:"id"`
  87. Name string `json:"name,omitempty"`
  88. NameEn string `json:"name_en,omitempty"`
  89. ParentID int `json:"parentid,omitempty"`
  90. Order int `json:"order,omitempty"`
  91. }
  92. // DepartmentUpdate 更新部门
  93. // see https://developer.work.weixin.qq.com/document/path/90206
  94. func (r *Client) DepartmentUpdate(req *DepartmentUpdateRequest) error {
  95. var (
  96. accessToken string
  97. err error
  98. )
  99. if accessToken, err = r.GetAccessToken(); err != nil {
  100. return err
  101. }
  102. var response []byte
  103. if response, err = util.PostJSON(fmt.Sprintf(departmentUpdateURL, accessToken), req); err != nil {
  104. return err
  105. }
  106. return util.DecodeWithCommonError(response, "DepartmentUpdate")
  107. }
  108. // DepartmentDelete 删除部门
  109. // @see https://developer.work.weixin.qq.com/document/path/90207
  110. func (r *Client) DepartmentDelete(departmentID int) error {
  111. var (
  112. accessToken string
  113. err error
  114. )
  115. if accessToken, err = r.GetAccessToken(); err != nil {
  116. return err
  117. }
  118. var response []byte
  119. if response, err = util.HTTPGet(fmt.Sprintf(departmentDeleteURL, accessToken, departmentID)); err != nil {
  120. return err
  121. }
  122. return util.DecodeWithCommonError(response, "DepartmentDelete")
  123. }
  124. // DepartmentSimpleList 获取子部门ID列表
  125. // see https://developer.work.weixin.qq.com/document/path/95350
  126. func (r *Client) DepartmentSimpleList(departmentID int) ([]*DepartmentID, error) {
  127. var (
  128. accessToken string
  129. err error
  130. )
  131. if accessToken, err = r.GetAccessToken(); err != nil {
  132. return nil, err
  133. }
  134. var response []byte
  135. if response, err = util.HTTPGet(fmt.Sprintf(departmentSimpleListURL, accessToken, departmentID)); err != nil {
  136. return nil, err
  137. }
  138. result := &DepartmentSimpleListResponse{}
  139. err = util.DecodeWithError(response, result, "DepartmentSimpleList")
  140. return result.DepartmentID, err
  141. }
  142. // DepartmentList 获取部门列表
  143. // @desc https://developer.work.weixin.qq.com/document/path/90208
  144. func (r *Client) DepartmentList() ([]*Department, error) {
  145. return r.DepartmentListByID(0)
  146. }
  147. // DepartmentListByID 获取部门列表
  148. //
  149. // departmentID 部门id。获取指定部门及其下的子部门(以及子部门的子部门等等,递归)
  150. //
  151. // @desc https://developer.work.weixin.qq.com/document/path/90208
  152. func (r *Client) DepartmentListByID(departmentID int) ([]*Department, error) {
  153. var formatURL string
  154. // 获取accessToken
  155. accessToken, err := r.GetAccessToken()
  156. if err != nil {
  157. return nil, err
  158. }
  159. if departmentID > 0 {
  160. formatURL = fmt.Sprintf(departmentListByIDURL, accessToken, departmentID)
  161. } else {
  162. formatURL = fmt.Sprintf(departmentListURL, accessToken)
  163. }
  164. // 发起http请求
  165. response, err := util.HTTPGet(formatURL)
  166. if err != nil {
  167. return nil, err
  168. }
  169. // 按照结构体解析返回值
  170. result := &DepartmentListResponse{}
  171. err = util.DecodeWithError(response, result, "DepartmentList")
  172. // 返回数据
  173. return result.Department, err
  174. }
  175. // DepartmentGet 获取单个部门详情
  176. // see https://developer.work.weixin.qq.com/document/path/95351
  177. func (r *Client) DepartmentGet(departmentID int) (*Department, error) {
  178. var (
  179. accessToken string
  180. err error
  181. )
  182. if accessToken, err = r.GetAccessToken(); err != nil {
  183. return nil, err
  184. }
  185. var response []byte
  186. if response, err = util.HTTPGet(fmt.Sprintf(departmentGetURL, accessToken, departmentID)); err != nil {
  187. return nil, err
  188. }
  189. result := &DepartmentGetResponse{}
  190. err = util.DecodeWithError(response, result, "DepartmentGet")
  191. return &result.Department, err
  192. }