package record import ( "strconv" "sync" "bet24.com/log" pb "bet24.com/servers/micros/userservices/proto" ) type userRecord struct { userId int records []pb.Record } type recordmgr struct { userlist map[int]*userRecord lock *sync.RWMutex } func newRecordMgr() *recordmgr { ret := new(recordmgr) ret.userlist = make(map[int]*userRecord) ret.lock = &sync.RWMutex{} return ret } func (rd *recordmgr) doRecord(userId, recordId, count int) { log.Release("userId:%d, recordId:%d, count:%d", userId, recordId, count) rd.lock.Lock() defer rd.lock.Unlock() result := 0 _, ret := rd.userlist[userId] if !ret { var d userRecord d.userId = userId s := pb.Record{RecordId: recordId, Count: count} d.records = append(d.records, s) rd.userlist[userId] = &d result = count } else { e := false for i := 0; i < len(rd.userlist[userId].records); i++ { if rd.userlist[userId].records[i].RecordId == recordId { e = true if recordId != pb.Record_MaxWin { rd.userlist[userId].records[i].Count += count } else { if rd.userlist[userId].records[i].Count < count { rd.userlist[userId].records[i].Count = count } } result = rd.userlist[userId].records[i].Count break } } if !e { s := pb.Record{RecordId: recordId, Count: count} rd.userlist[userId].records = append(rd.userlist[userId].records, s) result = count } } trans_updataUserRecord(userId, recordId, result) } func (rd *recordmgr) getUserRecordList(userId int) []pb.Record { rd.lock.Lock() defer rd.lock.Unlock() u, ret := rd.userlist[userId] if ret { return u.records } u.records = trans_getUserRecord(userId) return u.records } func (rd *recordmgr) dump(param string) { if param == "" { return } userId, _ := strconv.Atoi(param) log.Release("UserId:%d", userId) rd.lock.Lock() defer rd.lock.Unlock() u, ret := rd.userlist[userId] if ret { log.Release("UserRecord:%v", u) } }