task.go 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package models
  2. import (
  3. "fmt"
  4. "spaceofcheng/services/models/model"
  5. "spaceofcheng/services/utils"
  6. "time"
  7. "github.com/astaxie/beego"
  8. "github.com/astaxie/beego/config"
  9. )
  10. func InitTask() {
  11. kernel := utils.NewKernel()
  12. kernel.SetTask("sendmessage", SendMessageToCustomer)
  13. now := time.Now().Local()
  14. timeStr := now.Format("2006-01-02") + " " + beego.AppConfig.String("job::sendmessagetime")
  15. ten, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)
  16. var tomorrow time.Time
  17. if now.Before(ten) {
  18. tomorrow = ten
  19. } else {
  20. tomorrow = ten.AddDate(0, 0, 1)
  21. }
  22. dur := tomorrow.Sub(now)
  23. beego.Error(dur)
  24. kernel.StartTask("sendmessage", dur)
  25. }
  26. func SendMessageToCustomer() time.Duration {
  27. // do something
  28. type TimeRecordList struct {
  29. model.TaBookBorrowRecord `xorm:"extends"`
  30. BookName string
  31. CaseName string
  32. Openid string
  33. }
  34. appRoot := utils.GetAppRoot()
  35. wechatconf, _ := config.NewConfig("ini", appRoot+"/conf/wechat.conf")
  36. week := wechatconf.String("bookReturnAlertTplID")
  37. late := wechatconf.String("bookLateAlertTplID")
  38. var weekList []TimeRecordList
  39. sql := `SELECT
  40. a.*,
  41. b.book_name,
  42. c.case_name,
  43. d.openid
  44. FROM
  45. ta_book_borrow_record a
  46. inner join ta_book b on a.book_id = b.book_id
  47. inner join sys_case c on a.case_id = c.case_id
  48. inner join ta_user_mapping d on a.customer_id = d.user_id
  49. WHERE
  50. DATE_FORMAT( a.end_date, "%Y-%m-%d" ) = DATE_FORMAT( ( SELECT date_add( now( ), INTERVAL 1 WEEK ) ), "%Y-%m-%d" )
  51. and a.borrow_status = '1'`
  52. DBEngine.Sql(sql).Find(&weekList)
  53. var lateList []TimeRecordList
  54. sqlLate := `SELECT
  55. a.*,
  56. b.book_name,
  57. c.case_name,
  58. d.openid
  59. FROM
  60. ta_book_borrow_record a
  61. inner join ta_book b on a.book_id = b.book_id
  62. inner join sys_case c on a.case_id = c.case_id
  63. inner join ta_user_mapping d on a.customer_id = d.user_id
  64. WHERE
  65. DATE_FORMAT( now(), "%Y-%m-%d" ) = DATE_FORMAT( ( SELECT date_add( a.end_date, INTERVAL 2 DAY ) ), "%Y-%m-%d" )
  66. and a.borrow_status = '0'`
  67. DBEngine.Sql(sqlLate).Find(&lateList)
  68. // 发消息
  69. if len(weekList) > 0 {
  70. for i := 0; i < len(weekList); i++ {
  71. message := utils.Message{
  72. To: utils.ClientID{ID: weekList[i].Openid},
  73. Data: map[string]interface{}{
  74. "orgid": weekList[i].OrgId,
  75. "tplid": week,
  76. "link": "",
  77. "data": map[string]string{
  78. "first": "您好,您借阅图书即将逾期,请及时归还。",
  79. "keyword1": weekList[i].BookName,
  80. "keyword2": weekList[i].BorrowDate.Format("2006-01-02"),
  81. "keyword3": weekList[i].EndDate.Format("2006-01-02"),
  82. "remark": fmt.Sprintf("避免影响您下次借阅,请及时归还至%s", weekList[i].CaseName),
  83. },
  84. },
  85. }
  86. cert, err := GetWeChatConfig(weekList[i].OrgId, WECHAT_WX)
  87. if err != nil {
  88. utils.LogError("初始化微信失败: " + err.Error())
  89. continue
  90. }
  91. utils.WxClientSingleton(weekList[i].OrgId, cert)
  92. time.Sleep(5 * time.Second)
  93. go utils.SendWechat(message)
  94. }
  95. }
  96. if len(lateList) > 0 {
  97. for i := 0; i < len(lateList); i++ {
  98. message := utils.Message{
  99. To: utils.ClientID{ID: lateList[i].Openid},
  100. Data: map[string]interface{}{
  101. "orgid": lateList[i].OrgId,
  102. "tplid": late,
  103. "link": "",
  104. "data": map[string]string{
  105. "first": "您好,您借阅图书的时间已经逾期2天",
  106. "keyword1": lateList[i].BookName,
  107. "keyword2": weekList[i].BorrowDate.Format("2006-01-02"),
  108. "keyword3": weekList[i].EndDate.Format("2006-01-02"),
  109. "remark": fmt.Sprintf("避免影响您下次借阅,请及时归还至%s", lateList[i].CaseName),
  110. },
  111. },
  112. }
  113. cert, err := GetWeChatConfig(weekList[i].OrgId, WECHAT_WX)
  114. if err != nil {
  115. utils.LogError("初始化微信失败: " + err.Error())
  116. continue
  117. }
  118. utils.WxClientSingleton(weekList[i].OrgId, cert)
  119. time.Sleep(5 * time.Second)
  120. go utils.SendWechat(message)
  121. }
  122. }
  123. timeNext, _ := time.ParseDuration("24h")
  124. return timeNext
  125. }