// 更新 RideData 資料 private bool UpdateRideData() { bool ret = false; try { List <RideData> rideList = db.GetSql().Queryable <RideData>().With(SqlSugar.SqlWith.RowLock).ToList(); SaveLog($"[Info] Update Ride Data , Total Count: {rideList.Count}"); for (int idx = 0; idx < rideList.Count; idx++) { RideData info = rideList[idx]; redis.GetRedis((int)Connect.RedisDB.emRedisDB_Ride).HashSet($"RideData_" + info.MemberID, hashTransfer.TransToHashEntryArray(info)); SaveLog($"[Info] Update Ride Data, User: {info.MemberID}"); } ret = true; } catch (Exception ex) { SaveLog($"[Error] Update Ride Data Catch Error, Msg:{ex.Message}"); } return(ret); }
// 更新 UserAccount 資料 private bool UpdateUserAccount() { bool ret = false; try { List <UserAccount> accountList = db.GetSql().Queryable <UserAccount>().With(SqlSugar.SqlWith.RowLock).ToList(); SaveLog($"[Info] Update User Account , Total Count: {accountList.Count}"); for (int idx = 0; idx < accountList.Count; idx++) { UserAccount info = accountList[idx]; redis.GetRedis((int)Connect.RedisDB.emRedisDB_User).HashSet($"UserAccount_" + info.Email, hashTransfer.TransToHashEntryArray(info)); SaveLog($"[Info] Update User Account , User: {info.Email}"); } ret = true; } catch (Exception ex) { SaveLog($"[Error] Update User Account Catch Error, Msg:{ex.Message}"); } return(ret); }
/// <summary> /// 使用者登入 /// </summary> /// <param name="data"> 封包資料 </param> /// <returns> 結果 </returns> public string OnUserLogin(string data) { string ret = ""; UserLogin packet = JsonConvert.DeserializeObject <UserLogin>(data); UserLoginResult rData = new UserLoginResult(); try { string uID = FireBaseHandler.Instance.CheckFireBaseUserToken(packet.Token).Result; if (uID != "") { UserAccount account = GetSql().Queryable <UserAccount>().Where(it => it.UID == uID).Single(); // 有找到帳號 if (account != null) { UserInfo userInfo = GetSql().Queryable <UserInfo>().Where(it => it.MemberID == account.MemberID).Single(); // 有找到會員 if (userInfo != null) { rData.Result = (int)UserLoginResult.ResultDefine.emResult_Success; rData.MemberID = account.MemberID; } else { SaveLog("[Warning] MessageFcunction::OnUserLogin Can't Find User Info"); rData.Result = (int)UserLoginResult.ResultDefine.emResult_Fail; } } else { string dateTime = DateTime.UtcNow.ToString("yyyy-MM-dd hh:mm:ss"); string guidAll = Guid.NewGuid().ToString(); string[] guidList = guidAll.Split('-'); UserAccount newAccount = new UserAccount(); // 建立新帳號 newAccount.MemberID = "Dblha-" + guidList[0]; // 取GUID前8碼 newAccount.UID = uID; newAccount.NotifyToken = ""; newAccount.RegisterSource = packet.LoginSource; newAccount.RegisterDate = dateTime; rData.MemberID = newAccount.MemberID; UserInfo newInfo = new UserInfo(); // 新增使用者資訊 newInfo.MemberID = newAccount.MemberID; newInfo.Email = packet.Email == null ? "" : packet.Email; newInfo.NickName = packet.NickName == null ? "" : packet.NickName; newInfo.Birthday = ""; newInfo.BodyHeight = 0; newInfo.BodyWeight = 0; newInfo.FrontCover = ""; newInfo.Avatar = packet.Avatar == null ? "" : packet.Avatar;; newInfo.Photo = ""; newInfo.Mobile = ""; newInfo.County = -1; newInfo.TeamList = "[]"; newInfo.FriendList = "[]"; newInfo.BlackList = "[]"; newInfo.SpecificationModel = ""; RideData rideData = new RideData(); // 新增騎乘資料 rideData.MemberID = newAccount.MemberID; rideData.TotalDistance = 0; rideData.TotalAltitude = 0; rideData.TotalRideTime = 0; WeekRideData curWeek = new WeekRideData(); // 新增本週騎乘資料 string firsDay = weekProcess.GetWeekFirstDay(DateTime.UtcNow); string lastDay = weekProcess.GetWeekLastDay(DateTime.UtcNow); curWeek.MemberID = newAccount.MemberID; curWeek.WeekFirstDay = firsDay; curWeek.WeekLastDay = lastDay; curWeek.WeekDistance = 0; // 設定DB 交易的起始點 GetSql().BeginTran(); // 寫入資料庫 if (GetSql().Insertable(newAccount).With(SqlSugar.SqlWith.TabLockX).ExecuteCommand() > 0) { if (GetSql().Insertable(newInfo).With(SqlSugar.SqlWith.TabLockX).ExecuteCommand() > 0 && GetSql().Insertable(rideData).With(SqlSugar.SqlWith.TabLockX).ExecuteCommand() > 0 && GetSql().Insertable(curWeek).With(SqlSugar.SqlWith.TabLockX).ExecuteCommand() > 0) { rData.Result = (int)UserLoginResult.ResultDefine.emResult_Success; GetRedis((int)Connect.RedisDB.emRedisDB_User).HashSet($"UserAccount_" + newAccount.MemberID, hashTransfer.TransToHashEntryArray(newAccount)); GetRedis((int)Connect.RedisDB.emRedisDB_User).HashSet($"UserInfo_" + newInfo.MemberID, hashTransfer.TransToHashEntryArray(newInfo)); GetRedis((int)Connect.RedisDB.emRedisDB_Ride).HashSet($"RideData_" + rideData.MemberID, hashTransfer.TransToHashEntryArray(rideData)); GetRedis((int)Connect.RedisDB.emRedisDB_Ride).HashSet($"RideData_" + rideData.MemberID, hashTransfer.TransToHashEntryArray(rideData)); GetRedis((int)Connect.RedisDB.emRedisDB_Ride).HashSet($"CurWeekRideData_" + newAccount.MemberID, hashTransfer.TransToHashEntryArray(curWeek)); SaveLog($"[Info] MessageFcunction::OnUserLogin Create New Account Success"); // DB 交易提交 GetSql().CommitTran(); } else { rData.Result = (int)UserLoginResult.ResultDefine.emResult_Fail; SaveLog($"[Warning] MessageFcunction::OnUserLogin Can Not Inseart User Info Or Ride Data"); } } else { rData.Result = (int)UserLoginResult.ResultDefine.emResult_Fail; SaveLog($"[Warning] MessageFcunction::OnUserLogin UID: {newAccount.UID} Repeat"); } } } else { SaveLog("[Warning] MessageFcunction::OnUserLogin Fire Base Token Certification Error"); rData.Result = (int)UserLoginResult.ResultDefine.emResult_Fail; } } catch (Exception ex) { SaveLog($"[Error] MessageFcunction::OnUserLogin Catch Error, Msg:{ex.Message}"); rData.Result = (int)UserLoginResult.ResultDefine.emResult_Fail; } // DB 交易失敗, 啟動Rollback if (rData.Result != (int)UserLoginResult.ResultDefine.emResult_Success) { GetSql().RollbackTran(); } JObject jsMain = new JObject(); jsMain.Add("CmdID", (int)S2C_CmdID.emUserLoginResult); jsMain.Add("Data", JsonConvert.DeserializeObject <JObject>(JsonConvert.SerializeObject(rData))); ret = jsMain.ToString(); return(ret); }