diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 8874fe5..0159804 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -32,6 +32,18 @@ func SaveUserInfo(data *UserData) error { return err } +func SaveUserInfoByMysql(data UserData) error { + + savestr, err := json.Marshal(data) + if err != nil { + return err + } + + err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, data.Openid, string(savestr)) + + return err +} + func GetUserInfo(openid string) (*UserData, error) { //先判断用户是否存在 不存在创建新的用户 diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index b23e025..7f63ca1 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -7,6 +7,7 @@ import ( "common/redis" "encoding/json" "fmt" + "mysql" "net/http" "time" ) @@ -90,22 +91,60 @@ func HandlerUserlogin(w http.ResponseWriter, data string) { } if !isexist { //不存在 新号 - tmp := new(UserData) - err = tmp.InitUserInfo(rdata.Openid) + err, Openid, LastGetTime, LeftCnt, MaxLevel, Property, TotalFetchCnt, SignRound, SingDay, IsSign, TodaySec, PassLvGold, PlayerData, RegTime, isfind := mysql.GetFromBackUp(rdata.Openid) if err != nil { - logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) - resp.RetMsg = "服务器读取数据失败" - resp.ErrNum = ERROR_SERVER_FAILED - break + logger.Error("mysql failed err=%v", err) + } + + if isfind { + var tmp UserData + tmp.Openid = Openid + tmp.LastGetTime = LastGetTime + tmp.LeftCnt = LeftCnt + tmp.MaxLevel = MaxLevel + tmp.Property = Property + tmp.TotalFetchCnt = TotalFetchCnt + tmp.SignRound = SignRound + tmp.SingDay = SingDay + tmp.IsSign = IsSign + tmp.TodaySec = TodaySec + tmp.PassLvGold = PassLvGold + tmp.PlayerData = PlayerData + tmp.RegTime = RegTime + err = SaveUserInfoByMysql(tmp) + if err != nil { + logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) + resp.RetMsg = "服务器读取数据失败" + resp.ErrNum = ERROR_SERVER_FAILED + break + } + + resp.RetData.IsNew = 1 + resp.RetData.PlayerData = tmp.PlayerData + resp.RetData.Id = rdata.Openid + resp.RetData.RegisterTime = tmp.RegTime + resp.RetData.Curday = tmp.SingDay + resp.RetData.Curround = tmp.SignRound + resp.RetData.Issigntaday = tmp.IsSign + } else { + tmp := new(UserData) + err = tmp.InitUserInfo(rdata.Openid) + if err != nil { + logger.Info(" HandlerDosign getdata failed:%v,for:%v", err, data) + resp.RetMsg = "服务器读取数据失败" + resp.ErrNum = ERROR_SERVER_FAILED + break + } + + resp.RetData.IsNew = 1 + resp.RetData.PlayerData = tmp.PlayerData + resp.RetData.Id = rdata.Openid + resp.RetData.RegisterTime = tmp.RegTime + resp.RetData.Curday = tmp.SingDay + resp.RetData.Curround = tmp.SignRound + resp.RetData.Issigntaday = tmp.IsSign } - resp.RetData.IsNew = 1 - resp.RetData.PlayerData = tmp.PlayerData - resp.RetData.Id = rdata.Openid - resp.RetData.RegisterTime = tmp.RegTime - resp.RetData.Curday = tmp.SingDay - resp.RetData.Curround = tmp.SignRound - resp.RetData.Issigntaday = tmp.IsSign break } uinfo, err := GetUserInfo(rdata.Openid) diff --git a/src/HttpServer/main/main.go b/src/HttpServer/main/main.go index 3f58dae..4c3395a 100644 --- a/src/HttpServer/main/main.go +++ b/src/HttpServer/main/main.go @@ -7,6 +7,7 @@ import ( "HttpServer/redishandler" "common/logger" "flag" + "mysql" "os" "runtime/pprof" "time" @@ -51,11 +52,11 @@ func main() { return } - /*err = mysql.InitMysql() + err = mysql.InitMysql() if err != nil { logger.Error("err init mysql err=%v", err) return - }*/ + } err = jsonconf.LoadJsonConf() if err != nil { diff --git a/src/mysql/dbmysql.go b/src/mysql/dbmysql.go index cf3f86a..9c96a55 100644 --- a/src/mysql/dbmysql.go +++ b/src/mysql/dbmysql.go @@ -12,7 +12,7 @@ import ( ) var ( - m_game_db *sql.DB + m_game_db *sql.DB ) func InitMysql() error { @@ -46,7 +46,7 @@ func ExcuteCmd(cmd string) error { return err } -func TestClearData(uid int) (int,error) { +func TestClearData(uid int) (int, error) { cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid) rows, err := m_game_db.Query(cmd) @@ -55,33 +55,32 @@ func TestClearData(uid int) (int,error) { } if err != nil { logger.Notic("TestClearData mysql select error:%v", err) - return 0,err + return 0, err } - var value int for rows.Next() { err = rows.Scan(&value) if err != nil { logger.Notic("TestClearData mysql handle result error:%v", err) - return 0,err + return 0, err } - logger.Info("TestClearData coin=%v",value) + logger.Info("TestClearData coin=%v", value) break } - return value,nil + return value, nil } -func DoClearData(uuid int) error{ +func DoClearData(uuid int) error { //先删除十张分表的数据 - for i:=0;i<10;i++ { + for i := 0; i < 10; i++ { tablename := "b_base_data_0" + strconv.Itoa(i) cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid) err := ExcuteCmd(cmd) if err != nil { - logger.Error("DoClearData err=%v,cmd=%v",err,cmd) + logger.Error("DoClearData err=%v,cmd=%v", err, cmd) return err } } @@ -89,12 +88,10 @@ func DoClearData(uuid int) error{ } - - -func QueryAllData(f *os.File) error{ +func QueryAllData(f *os.File) error { //先查询十张分表的数据 - for i:=0;i<10;i++ { + for i := 0; i < 10; i++ { tablename := "b_user_ext_0" + strconv.Itoa(i) cmd := "SELECT user_id,lv,exp,login_time from " + tablename rows, err := m_game_db.Query(cmd) @@ -112,7 +109,7 @@ func QueryAllData(f *os.File) error{ Ulv := 0 Exp := 0 LoginTime := 0 - err = rows.Scan(&Uid, &Ulv, &Exp,&LoginTime) //不scan会导致连接不释放 + err = rows.Scan(&Uid, &Ulv, &Exp, &LoginTime) //不scan会导致连接不释放 if err != nil { logger.Error("Scan failed,err:%v", err) return err @@ -126,10 +123,10 @@ func QueryAllData(f *os.File) error{ tm := time.Unix(int64(LoginTime), 0) //fmt.Println(tm.Format("2006-01-02 15:04:05")) str := strconv.Itoa(Uid) + " " + strconv.Itoa(Ulv) + " " + strconv.Itoa(Exp) + " " + tm.Format("2006-01-02 15:04:05") + "\n" - _,err = f.WriteString(str) + _, err = f.WriteString(str) //logger.Info("ddt str=%v",str) if err != nil { - logger.Error("WRITETOFILEFAILED ERR=%v",err) + logger.Error("WRITETOFILEFAILED ERR=%v", err) return err } //fmt.Fprintln(w, str) @@ -138,4 +135,35 @@ func QueryAllData(f *os.File) error{ } return nil -} \ No newline at end of file +} + +func GetFromBackUp(openid string) (err error, Openid string, LastGetTime, LeftCnt, MaxLevel int, Property int64, TotalFetchCnt, SignRound, SingDay, IsSign, TodaySec, PassLvGold int, PlayerData string, RegTime int, isfind bool) { + isfind = false + cmd := fmt.Sprintf("select Openid,LastGetTime,LeftCnt,MaxLevel,Property,TotalFetchCnt,SignRound,SingDay,IsSign,TodaySec,PassLvGold,PlayerData,RegTime from userdata where Openid='%s' limit 1", openid) + rows, err := m_game_db.Query(cmd) + if rows != nil { + defer rows.Close() + } + + logger.Error("cmd", cmd) + + if err != nil { + logger.Notic("GetFromBackUp mysql select error:%v", err) + return + } + for rows.Next() { + + err = rows.Scan(&Openid, &LastGetTime, &LeftCnt, &MaxLevel, &Property, &TotalFetchCnt, &SignRound, &SingDay, &IsSign, &TodaySec, &PassLvGold, &PlayerData, &RegTime) + if err != nil { + logger.Notic("GetFromBackUp mysql handle result error:%v", err) + return + } + + isfind = true + logger.Info("GetFromBackUp openid=%v", openid) + + break + } + + return +} -- libgit2 0.21.0