diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index d7c7bab..10c2161 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" "strconv" "strings" @@ -1347,37 +1348,28 @@ func HandlerLogin(w http.ResponseWriter, data string, uuid int) { //不存在 //属于新登录的玩家数据 //需要判断是否存在老的版本的数据 - err = InitUserInfo(&rdata, &resp, uuid, uniqueuuid) - /*isexist, err = redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, strconv.Itoa(uuid)) - if err == nil && isexist { - logger.Info("HandlerLogin111111111111") - //如果存在老的数据 做数据迁移 - oldstr, err := redishandler.GetRedisClient().HGet(redis.USER_DATA_KEY, strconv.Itoa(uuid)) - if err != nil { - logger.Error("HandlerLogin redis failed err=%v,uuid=%v", err, uuid) - resp.Message = "服务器错误" - resp.Code = ERROR_SRV_ERROR - break - } - err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, uniqueuuid, oldstr) - if err != nil { - logger.Error("HandlerLogin redis failed err=%v,uuid=%v", err, uuid) - resp.Message = "服务器错误" - resp.Code = ERROR_SRV_ERROR - break - } - logger.Info("HandlerLogin uuid=%v do set oldstr=%v", uuid, oldstr) + //err = InitUserInfo(&rdata, &resp, uuid, uniqueuuid) + err, info, task, ach, isfind := mysql.GetFromBackUp(uniqueuuid) + if err != nil { + /*logger.Error("mysql failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break*/ + logger.Error("mysql failed err=%v", err) + //err = InitUserInfo(&rdata, &resp, uuid, uniqueuuid) + } + + if isfind { + logger.Info("GetUserInfo from mysql uid=%v", uniqueuuid) + //先保存数据 + err = redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, uniqueuuid, info) + err = redishandler.GetRedisClient().HSet(redis.USER_TASKINFO_LIST, uniqueuuid, task) + err = redishandler.GetRedisClient().HSet(redis.USER_ACHIEVEMENTINFO_LIST, uniqueuuid, ach) err = GetUserData(uuid, uniqueuuid, &rdata, &resp) - if err == nil { - //删除老的数据 - redishandler.GetRedisClient().HDel(redis.USER_DATA_KEY, strconv.Itoa(uuid)) - logger.Info("HandlerLogin uuid=%v do set", uuid) - } } else { - logger.Info("HandlerLogin22222222222222222") //不存在老的数据 之间走新号流程 err = InitUserInfo(&rdata, &resp, uuid, uniqueuuid) - }*/ + } } else { //已经迁移过的数据之间返回 diff --git a/src/mysql/dbmysql.go b/src/mysql/dbmysql.go index cf3f86a..55e280b 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,33 @@ func QueryAllData(f *os.File) error{ } return nil -} \ No newline at end of file +} + +func GetFromBackUp(uniqueid string) (error, string, string, string, bool) { + isfind := false + cmd := "select info,task,achieve from starstar where uid = '" + uniqueid + "'" + rows, err := m_game_db.Query(cmd) + if rows != nil { + defer rows.Close() + } + if err != nil { + logger.Notic("TestClearData mysql select error:%v", err) + return err, "", "", "", isfind + } + var info, task, ach string + for rows.Next() { + + err = rows.Scan(&info, &task, &ach) + if err != nil { + logger.Notic("GetFromBackUp mysql handle result error:%v", err) + return err, "", "", "", isfind + } + + isfind = true + logger.Info("GetFromBackUp uniqueid=%v", uniqueid) + + break + } + + return nil, info, task, ach, isfind +} -- libgit2 0.21.0