ding_event.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package dingtalk
  2. import (
  3. "context"
  4. model "dashoo.cn/micro/app/model/workflow"
  5. custServer "dashoo.cn/micro/app/service/cust"
  6. platServer "dashoo.cn/micro/app/service/plat"
  7. workflowServer "dashoo.cn/micro/app/service/workflow"
  8. "dashoo.cn/opms_libary/plugin/dingtalk"
  9. dingContext "dashoo.cn/opms_libary/plugin/dingtalk/context"
  10. "dashoo.cn/opms_libary/plugin/dingtalk/message"
  11. "fmt"
  12. "github.com/gogf/gf/os/glog"
  13. )
  14. type DingHandler struct{}
  15. // CallBack 钉钉事件回调
  16. // 日程相关详情参照文档:https://open.dingtalk.com/document/orgapp/schedule-event
  17. // 审批相关详情参照文档:https://open.dingtalk.com/document/orgapp/approval-events
  18. func (h *DingHandler) CallBack(ctx context.Context, req *message.SubsMessage, rsp *message.Reply) error {
  19. req.Ctx = ctx
  20. handler := dingtalk.Client.GetDingTalkHandler(req)
  21. //设置接收消息的处理方法
  22. handler.SetHandleMessageFunc(func(msg *message.MixMessage) string {
  23. switch msg.EventType {
  24. case message.EventCheckUrl:
  25. return h.handleCheckUrl(msg)
  26. case message.EventCalendarChange:
  27. return h.handleCalendarChange(msg, handler.Context)
  28. case message.BpmsInstanceChange:
  29. return h.handleBpmsInstanceChange(msg, handler.Context)
  30. case message.BpmsTaskChange:
  31. return h.handleBpmsTaskChange(msg, handler.Context)
  32. }
  33. return ""
  34. })
  35. result, _ := handler.Handle()
  36. *rsp = result
  37. return nil
  38. }
  39. // 验证回调参数
  40. func (h *DingHandler) handleCheckUrl(msg *message.MixMessage) string {
  41. fmt.Println(msg)
  42. return "success"
  43. }
  44. // 处理日程回调
  45. func (h *DingHandler) handleCalendarChange(msg *message.MixMessage, ctx *dingContext.Context) string {
  46. fmt.Println(msg)
  47. // 本系统数据库操作
  48. s, err := platServer.NewScheduleService(ctx.SubsMessage.Ctx)
  49. if err != nil {
  50. glog.Error(err)
  51. return err.Error()
  52. }
  53. // 回填数据
  54. err = s.SaveByDingEvent(msg)
  55. if err != nil {
  56. glog.Error(err)
  57. return err.Error()
  58. }
  59. return "success"
  60. }
  61. // 处理审批实例回调
  62. func (h *DingHandler) handleBpmsInstanceChange(msg *message.MixMessage, ctx *dingContext.Context) string {
  63. fmt.Println(msg)
  64. // 构造访问服务
  65. s, err := workflowServer.NewFlowService(ctx.SubsMessage.Ctx)
  66. if err != nil {
  67. glog.Error(err)
  68. return err.Error()
  69. }
  70. // 获取审批实例数据
  71. instance, err := s.GetWorkflowInstance(msg.ProcessInstanceId)
  72. // 处理实例数据(不需要钉钉审批实例参数)
  73. switch instance.BizType {
  74. case model.CustomerReceive:
  75. if msg.ProcessType == "finish" || msg.ProcessType == "terminate" {
  76. srv, err := custServer.NewCustomerService(ctx.SubsMessage.Ctx)
  77. if err != nil {
  78. glog.Error(err)
  79. return "fail"
  80. }
  81. err = srv.AssignCustomerRequestApproval(instance, msg)
  82. if err != nil {
  83. glog.Error(err)
  84. return "fail"
  85. }
  86. }
  87. return "success"
  88. case model.ProjectCreate:
  89. if msg.ProcessType == "finish" || msg.ProcessType == "terminate" {
  90. //srv.Handle(instance, msg)
  91. }
  92. return "success"
  93. case model.ContractCreate:
  94. if msg.ProcessType == "finish" || msg.ProcessType == "terminate" {
  95. //srv.Handle(instance, msg)
  96. }
  97. return "success"
  98. }
  99. // 以下的代码需要调用钉钉接口查询数据,并且以下接口需要审批实例的数据
  100. //// 获取钉钉数据
  101. //resp, err := s.GetProcessInstanceDetail(msg.ProcessInstanceId)
  102. //if err != nil {
  103. // glog.Error(err)
  104. // return err.Error()
  105. //}
  106. //if resp.Success == "false" {
  107. // return "fail"
  108. //}
  109. ////按照类型处理数据(不需要钉钉审批实例参数)
  110. //switch instance.BizType {
  111. //case model.CustomerReceive:
  112. // if msg.ProcessType == "finish" || msg.ProcessType == "terminate" {
  113. // //srv.Handle(instance, msg, resp)
  114. // }
  115. return "success"
  116. }
  117. // 处理审批任务回调
  118. func (h *DingHandler) handleBpmsTaskChange(msg *message.MixMessage, ctx *dingContext.Context) string {
  119. fmt.Println(msg)
  120. // TODO 目前审批任务无处理逻辑
  121. //// 本系统数据库操作
  122. //s, err := platServer.NewScheduleService(ctx.SubsMessage.Ctx)
  123. //if err != nil {
  124. // glog.Error(err)
  125. // return err.Error()
  126. //}
  127. //// 回填数据
  128. //err = s.SaveByDingEvent(msg)
  129. //if err != nil {
  130. // glog.Error(err)
  131. // return err.Error()
  132. //}
  133. return "success"
  134. }