// 更新 WeekRideData 資料 private bool UpdateWeekRideData() { bool ret = false; try { List <UserInfo> userList = db.GetSql().Queryable <UserInfo>().With(SqlSugar.SqlWith.RowLock).ToList(); SaveLog($"[Info] Update Week Ride Data, Total User Count: {userList.Count}"); for (int idx = 0; idx < userList.Count; idx++) { UserInfo user = userList[idx]; // 本週資料 { // 取得本週的第一天 與 最後一天 string curWeek_FirsDay = weekProcess.GetWeekFirstDay(DateTime.UtcNow); string curWeek_LastDay = weekProcess.GetWeekLastDay(DateTime.UtcNow); WeekRideData curWeekRideData = db.GetSql().Queryable <WeekRideData>().With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == user.MemberID && it.WeekFirstDay == curWeek_FirsDay && it.WeekLastDay == curWeek_LastDay).Single(); if (curWeekRideData == null) { curWeekRideData = new WeekRideData(); curWeekRideData.MemberID = user.MemberID; curWeekRideData.WeekFirstDay = curWeek_FirsDay; curWeekRideData.WeekLastDay = curWeek_LastDay; curWeekRideData.WeekDistance = 0; } redis.GetRedis((int)Connect.RedisDB.emRedisDB_Ride).HashSet($"CurWeekRideData_" + user.MemberID, hashTransfer.TransToHashEntryArray(curWeekRideData)); SaveLog($"[Info] Update Week Ride Data, User: {user.MemberID}'s Cur Week Ride Data"); } // 上週資料 { // 取得上週的第一天 與 最後一天 string lastWeek_FirsDay = weekProcess.GetLastWeekFirstDay(DateTime.UtcNow); string lastWeek_LastDay = weekProcess.GetLastWeekLastDay(DateTime.UtcNow); WeekRideData lastWeekRideData = db.GetSql().Queryable <WeekRideData>().With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == user.MemberID && it.WeekFirstDay == lastWeek_FirsDay && it.WeekLastDay == lastWeek_LastDay).Single(); if (lastWeekRideData == null) { lastWeekRideData = new WeekRideData(); lastWeekRideData.MemberID = user.MemberID; lastWeekRideData.WeekFirstDay = lastWeek_FirsDay; lastWeekRideData.WeekLastDay = lastWeek_LastDay; lastWeekRideData.WeekDistance = 0; } redis.GetRedis((int)Connect.RedisDB.emRedisDB_Ride).HashSet($"LastWeekRideData_" + user.MemberID, hashTransfer.TransToHashEntryArray(lastWeekRideData)); SaveLog($"[Info] Update Week Ride Data, User: {user.MemberID}'s Last Week Ride Data"); } } ret = true; } catch (Exception ex) { SaveLog($"[Error] Update Week Ride Data 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); }