messageLog.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package common
  2. import (
  3. "app.yhyue.com/moapp/MessageCenter/entity"
  4. "github.com/go-xorm/xorm"
  5. "log"
  6. "time"
  7. )
  8. var (
  9. SP = make(chan bool, 5)
  10. SaveCache = make(chan map[string]interface{}, 100000)
  11. )
  12. // SaveMessageClockLog 保存消息点击记录
  13. func SaveMessageClockLog(saveData []map[string]interface{}) {
  14. orm := entity.Engine.NewSession()
  15. defer func(orm *xorm.Session) {
  16. orm.Close()
  17. }(orm)
  18. err := orm.Begin()
  19. if err != nil {
  20. log.Println("保存消息事务开启失败", err)
  21. return
  22. }
  23. _, err = orm.Table("message_open_log").Insert(saveData)
  24. if err != nil {
  25. err2 := orm.Rollback()
  26. if err2 != nil {
  27. log.Println("存储消息rollback失败", err2)
  28. return
  29. }
  30. log.Println("存储消息打开日志失败", err)
  31. }
  32. err = orm.Commit()
  33. if err != nil {
  34. log.Println("存储消息commit失败", err)
  35. return
  36. }
  37. }
  38. func SaveTask() {
  39. log.Println("message log Save...")
  40. arru := make([]map[string]interface{}, 500)
  41. indexu := 0
  42. for {
  43. select {
  44. case v := <-SaveCache:
  45. arru[indexu] = v
  46. indexu++
  47. if indexu == 500 {
  48. SP <- true
  49. go func(arru []map[string]interface{}) {
  50. defer func() {
  51. <-SP
  52. }()
  53. SaveMessageClockLog(arru)
  54. }(arru)
  55. arru = make([]map[string]interface{}, 500)
  56. indexu = 0
  57. }
  58. case <-time.After(1000 * time.Millisecond):
  59. if indexu > 0 {
  60. SP <- true
  61. go func(arru []map[string]interface{}) {
  62. defer func() {
  63. <-SP
  64. }()
  65. SaveMessageClockLog(arru)
  66. }(arru[:indexu])
  67. arru = make([]map[string]interface{}, 500)
  68. indexu = 0
  69. }
  70. }
  71. }
  72. }