namespace Application.Domain; public class UnitUserRelationService(ISqlSugarClient DbClient, IRedisCache redis) : IUnitUserRelationService, ITransient { #region 好友关系 public async Task GetUserFriendCount(string userId) { var db = DbClient.AsTenant().GetConnectionWithAttr(); return await db.Queryable().Where(it => it.frId.Contains(userId)).CountAsync(); } public async Task> GetUserFriend(string userId) { List result = new List(); var db = DbClient.AsTenant().GetConnectionWithAttr(); var data = await db.Queryable().Where(it => it.frId.Contains(userId)) .ToListAsync(); foreach (var item in data) { RelationView temp = new RelationView(); string otUser = item.userId == userId ? item.toId : item.userId; temp.user = await UserModelTool.GetUserView(otUser); temp.near = (long)item.near; var mapService = App.GetService(); var onMap = await mapService.GetUserOnMapInfo(otUser); temp.mapName = onMap.mapName; temp.cityName = onMap.cityName; temp.sort = TimeExtend.GetTimeStampBySeconds((DateTime)item.addTime); temp.isOnline = onMap.isOnline; result.Add(temp); } return result; } public async Task CheckIsFriend(string userId, string toId) { string frId = StringAssist.GetSortKey(userId, toId); var db = DbClient.AsTenant().GetConnectionWithAttr(); return await db.Queryable().Where(it => it.frId == frId).AnyAsync(); } public async Task AddFriend(string userId, string toId) { unit_user_friend friend = new unit_user_friend(); friend.frId = StringAssist.GetSortKey(userId, toId); friend.userId = userId; friend.toId = toId; friend.near = 0; friend.addTime = DateTime.Now; var db = DbClient.AsTenant().GetConnectionWithAttr(); return await db.Insertable(friend).ExecuteCommandAsync() > 0; } public async Task DeleteFriend(string userId, string toId) { string frId = StringAssist.GetSortKey(userId, toId); var db = DbClient.AsTenant().GetConnectionWithAttr(); return await db.Deleteable().Where(it => it.frId == frId).ExecuteCommandAsync() > 0; } #endregion #region 仇人 public async Task> GetUserEnemyData(string userId) { var db = DbClient.AsTenant().GetConnectionWithAttr(); var data = await db.Queryable().Where(it => it.userId == userId) .OrderByDescending(it => it.addTime) .ToListAsync(); List result = new List(); foreach (var item in data) { RelationView temp = new RelationView(); temp.user = await UserModelTool.GetUserView(item.eId); temp.near = 0; var mapService = App.GetService(); var onMap = await mapService.GetUserOnMapInfo(item.eId); temp.mapName = onMap.mapName; temp.cityName = onMap.cityName; temp.sort = TimeExtend.GetTimeStampBySeconds((DateTime)item.addTime); temp.isOnline = onMap.isOnline; result.Add(temp); } return result; } public async Task CheckUserEnemy(string userId, string eId) { string euId = $"{userId}_{eId}"; var db = DbClient.AsTenant().GetConnectionWithAttr(); return await db.Queryable().Where(it => it.euId == euId).AnyAsync(); } public async Task AddUserEnemy(string userId, string eId) { string euId = $"{userId}_{eId}"; unit_user_enemy enemy = new unit_user_enemy() { euId = euId, userId = userId, eId = eId, addTime = DateTime.Now }; var db = DbClient.AsTenant().GetConnectionWithAttr(); return await db.Insertable(enemy).ExecuteCommandAsync() > 0; } public async Task DeleteUserEnemy(string userId, string eId) { string euId = $"{userId}_{eId}"; var db = DbClient.AsTenant().GetConnectionWithAttr(); return await db.Deleteable().Where(it => it.euId == euId).ExecuteCommandAsync() > 0; } #endregion }