12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package common
- import (
- "app.yhyue.com/moapp/MessageCenter/entity"
- "github.com/go-xorm/xorm"
- "log"
- "time"
- )
- var (
- SP = make(chan bool, 5)
- SaveCache = make(chan map[string]interface{}, 100000)
- )
- // SaveMessageClockLog 保存消息点击记录
- func SaveMessageClockLog(saveData []map[string]interface{}) {
- orm := entity.Engine.NewSession()
- defer func(orm *xorm.Session) {
- orm.Close()
- }(orm)
- err := orm.Begin()
- if err != nil {
- log.Println("保存消息事务开启失败", err)
- return
- }
- _, err = orm.Table("message_open_log").Insert(saveData)
- if err != nil {
- err2 := orm.Rollback()
- if err2 != nil {
- log.Println("存储消息rollback失败", err2)
- return
- }
- log.Println("存储消息打开日志失败", err)
- }
- err = orm.Commit()
- if err != nil {
- log.Println("存储消息commit失败", err)
- return
- }
- }
- func SaveTask() {
- log.Println("message log Save...")
- arru := make([]map[string]interface{}, 500)
- indexu := 0
- for {
- select {
- case v := <-SaveCache:
- arru[indexu] = v
- indexu++
- if indexu == 500 {
- SP <- true
- go func(arru []map[string]interface{}) {
- defer func() {
- <-SP
- }()
- SaveMessageClockLog(arru)
- }(arru)
- arru = make([]map[string]interface{}, 500)
- indexu = 0
- }
- case <-time.After(1000 * time.Millisecond):
- if indexu > 0 {
- SP <- true
- go func(arru []map[string]interface{}) {
- defer func() {
- <-SP
- }()
- SaveMessageClockLog(arru)
- }(arru[:indexu])
- arru = make([]map[string]interface{}, 500)
- indexu = 0
- }
- }
- }
- }
|