client.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package dingtalk
  2. import (
  3. "dashoo.cn/opms_libary/plugin/dingtalk/bridge"
  4. "dashoo.cn/opms_libary/plugin/dingtalk/calendar"
  5. "dashoo.cn/opms_libary/plugin/dingtalk/contact"
  6. "dashoo.cn/opms_libary/plugin/dingtalk/context"
  7. "dashoo.cn/opms_libary/plugin/dingtalk/jsapi"
  8. "dashoo.cn/opms_libary/plugin/dingtalk/message"
  9. "dashoo.cn/opms_libary/plugin/dingtalk/workflow"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/os/gcache"
  12. "sync"
  13. )
  14. var Client *ClientImpl
  15. var memCache *gcache.Cache
  16. // ClientImpl struct
  17. type ClientImpl struct {
  18. Context *context.Context
  19. }
  20. func init() {
  21. Client = NewClient()
  22. }
  23. func NewClient() *ClientImpl {
  24. var config = context.Config{
  25. CorpId: g.Config().GetString("dingtalk.corp-id"), //"dinga8b316209f5ee42435c2f4657eb6378f",
  26. AgentId: g.Config().GetString("dingtalk.agent-id"), //"2384115071",
  27. AppKey: g.Config().GetString("dingtalk.app-key"), //"dinguytykawticadfoht",
  28. AppSecret: g.Config().GetString("dingtalk.app-secret"), //"zPlj4ZpITsUbeq2C0GrwJ78-e8knH_kIeyvznaNQacqtrSb9zbeZcOajgBKdolky",
  29. AESKey: g.Config().GetString("dingtalk.aes-key"), //"oUjmeWea8Ow1jsdK4UHoDthy6EMQKq3RGbM2rEeTgnm",
  30. Token: g.Config().GetString("dingtalk.token"), //"WaasHsYk8V3wqwN5xRGsCmiiRDB",
  31. }
  32. return newClient(config)
  33. }
  34. func newClient(cfg context.Config) *ClientImpl {
  35. context := new(context.Context)
  36. initContext(&cfg, context)
  37. return &ClientImpl{context}
  38. }
  39. func initContext(cfg *context.Config, context *context.Context) {
  40. if cfg.Cache == nil {
  41. if memCache == nil {
  42. memCache = gcache.New()
  43. }
  44. cfg.Cache = memCache
  45. }
  46. context.Config = cfg
  47. context.SetAccessTokenLock(new(sync.RWMutex))
  48. }
  49. //GetAccessToken 获取access_token
  50. func (c *ClientImpl) GetAccessToken() (string, error) {
  51. return c.Context.GetAccessToken()
  52. }
  53. //GetJsapi 获取Jsapi
  54. func (c *ClientImpl) GetJsapi() *jsapi.Jsapi {
  55. return jsapi.NewJsapi(c.Context)
  56. }
  57. //GetContact 通讯录
  58. func (c *ClientImpl) GetContact() *contact.Contact {
  59. return contact.NewContact(c.Context)
  60. }
  61. //GetWorkflow OA审批
  62. func (c *ClientImpl) GetWorkflow() *workflow.Workflow {
  63. return workflow.NewWorkflow(c.Context)
  64. }
  65. //GetCalendar 日程
  66. func (c *ClientImpl) GetCalendar() *calendar.Calendar {
  67. return calendar.NewCalendar(c.Context)
  68. }
  69. // GetDingTalkHandler 消息管理
  70. func (c *ClientImpl) GetDingTalkHandler(msg *message.SubsMessage) *bridge.DingTalkHandler {
  71. c.Context.SubsMessage = msg
  72. return bridge.NewDingTalkHandler(c.Context)
  73. }