增加
This commit is contained in:
7
Service/Application.Domain/Cache/UserCache.cs
Normal file
7
Service/Application.Domain/Cache/UserCache.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace Application.Domain;
|
||||
|
||||
public class UserCache
|
||||
{
|
||||
public static string BaseCacheKey = "BaseUserCache:{0}";
|
||||
public static string BaseCacheKeys = "BaseUserCache:{0}:{1}";
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
namespace Application.Domain;
|
||||
|
||||
public interface IGameAccountService
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据OpenId获取账号信息
|
||||
/// </summary>
|
||||
/// <param name="openId"></param>
|
||||
/// <returns></returns>
|
||||
Task<game_account> GetAccInfoByOpenId(string openId);
|
||||
/// <summary>
|
||||
/// 根据AccId获取账号信息
|
||||
/// </summary>
|
||||
/// <param name="accId"></param>
|
||||
/// <returns></returns>
|
||||
Task<game_account> GetAccInfoByAccId(string accId);
|
||||
|
||||
Task<game_account> GetAccInfoByToken(string token);
|
||||
/// <summary>
|
||||
/// 注册账号
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <param name="nick"></param>
|
||||
/// <param name="pwd"></param>
|
||||
/// <param name="remAccId"></param>
|
||||
/// <param name="openId"></param>
|
||||
/// <returns></returns>
|
||||
Task<game_account> Regist(string userName, string nick, string pwd, string remAccId = "",
|
||||
string openId = "");
|
||||
|
||||
Task<bool> UpdateAccountToken(string accId);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
using Photon.Core.Assist;
|
||||
|
||||
namespace Application.Domain;
|
||||
|
||||
public class GameAccountService : IGameAccountService, ITransient
|
||||
{
|
||||
private readonly ISqlSugarClient _dbClient;
|
||||
private readonly IRedisCache _redisClient;
|
||||
|
||||
public GameAccountService(ISqlSugarClient dbClient, IRedisCache redisClient)
|
||||
{
|
||||
_dbClient = dbClient;
|
||||
_redisClient = redisClient;
|
||||
}
|
||||
|
||||
|
||||
public async Task<game_account> GetAccInfoByOpenId(string openId)
|
||||
{
|
||||
string key = string.Format(UserCache.BaseCacheKeys, "UserAccountData", "OpenId");
|
||||
if (await _redisClient.HExistsHashAsync(key, openId))
|
||||
{
|
||||
return await _redisClient.GetHashAsync<game_account>(key, openId);
|
||||
}
|
||||
else
|
||||
{
|
||||
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_account>();
|
||||
var data = await db.Queryable<game_account>().Where(it => it.openId == openId).FirstAsync();
|
||||
await _redisClient.AddHashAsync(key, openId, data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<game_account> GetAccInfoByAccId(string accId)
|
||||
{
|
||||
string key = string.Format(UserCache.BaseCacheKeys, "UserAccountData", "AccId");
|
||||
if (await _redisClient.HExistsHashAsync(key, accId))
|
||||
{
|
||||
return await _redisClient.GetHashAsync<game_account>(key, accId);
|
||||
}
|
||||
else
|
||||
{
|
||||
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_account>();
|
||||
var data = await db.Queryable<game_account>().Where(it => it.accId == accId).FirstAsync();
|
||||
await _redisClient.AddHashAsync(key, accId, data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<game_account> GetAccInfoByToken(string token)
|
||||
{
|
||||
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_account>();
|
||||
var data = await db.Queryable<game_account>().Where(it => it.token == token).FirstAsync();
|
||||
return data;
|
||||
}
|
||||
|
||||
private async Task ClearCache(string clearId)
|
||||
{
|
||||
string openId = string.Empty;
|
||||
string accId = string.Empty;
|
||||
var accInfo = await GetAccInfoByAccId(clearId);
|
||||
if (accInfo != null)
|
||||
{
|
||||
accId = accInfo.accId;
|
||||
openId = accInfo.openId;
|
||||
}
|
||||
else
|
||||
{
|
||||
accInfo = await GetAccInfoByOpenId(clearId);
|
||||
if (accInfo != null)
|
||||
{
|
||||
accId = accInfo.accId;
|
||||
openId = accInfo.openId;
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(openId))
|
||||
{
|
||||
string key = string.Format(UserCache.BaseCacheKeys, "UserAccountData", "OpenId");
|
||||
await _redisClient.DelHashAsync(key, openId);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(accId))
|
||||
{
|
||||
string key = string.Format(UserCache.BaseCacheKeys, "UserAccountData", "AccId");
|
||||
await _redisClient.DelHashAsync(key, accId);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<game_account> Regist(string userName, string nick, string pwd, string remAccId = "",
|
||||
string openId = "")
|
||||
{
|
||||
game_account result = new game_account();
|
||||
try
|
||||
{
|
||||
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_account>();
|
||||
await _dbClient.AsTenant().BeginTranAsync();
|
||||
string accId = StringAssist.NewGuid;
|
||||
result.accId = accId;
|
||||
result.userName = userName;
|
||||
result.nick = nick;
|
||||
string sid = await CreateToken();
|
||||
result.token = sid;
|
||||
result.npwd = pwd;
|
||||
result.remAccId = remAccId;
|
||||
result.remCode = StringAssist.RandomString(6);
|
||||
result.pwd = EncryptAssist.Md5Encryption(pwd);
|
||||
result.status = 1;
|
||||
result.addTime = DateTime.Now;
|
||||
result.openId = openId;
|
||||
bool isok = await db.Insertable(result).ExecuteCommandAsync() > 0;
|
||||
if (isok)
|
||||
{
|
||||
await ClearCache(openId);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
await _dbClient.AsTenant().CommitTranAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
result = null;
|
||||
await _dbClient.AsTenant().RollbackTranAsync();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task<string> CreateToken()
|
||||
{
|
||||
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_account>();
|
||||
string token = string.Empty;
|
||||
bool ok = true;
|
||||
while (ok)
|
||||
{
|
||||
token = string.Format("{0}", StringAssist.RandomString(32));
|
||||
if (await db.Queryable<game_account>().Where(it => it.token == token).AnyAsync() == false)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
public async Task<bool> UpdateAccountToken(string accId)
|
||||
{
|
||||
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_account>();
|
||||
string token = await CreateToken();
|
||||
bool result = await db.Updateable<game_account>().SetColumns(it => it.token == token)
|
||||
.Where(it => it.accId == accId).ExecuteCommandAsync() > 0;
|
||||
if (result)
|
||||
{
|
||||
await ClearCache(accId);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user