添加项目文件。
This commit is contained in:
@@ -0,0 +1,665 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using AdminService.GameConfigs;
|
||||
using AdminService.User;
|
||||
using AdminService.User.Param;
|
||||
using AdminService.User.Response;
|
||||
using Common;
|
||||
using Common.Utils;
|
||||
using CommonDomain;
|
||||
using CommonDomain.BaseModel;
|
||||
using CommonDomain.Enum;
|
||||
using CommonInfrastructure;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using RedisService;
|
||||
using UserDomain.Entity;
|
||||
|
||||
namespace AdminApi.AdminUser
|
||||
{
|
||||
[ApiController, Route("adminapi/[controller]")]
|
||||
[Authorize]
|
||||
public class AdminUserController : BaseController
|
||||
{
|
||||
private readonly IAdminUserService _userService;
|
||||
private readonly IRedisService _redisService;
|
||||
|
||||
public AdminUserController(IAdminUserService userService, IRedisService redisService)
|
||||
{
|
||||
_userService = userService;
|
||||
_redisService = redisService;
|
||||
}
|
||||
|
||||
[HttpPost("GetUserList")]
|
||||
public async Task<PageResponse<UserListItemDto>> GetUserList(AdminUserListParam param)
|
||||
{
|
||||
var result = await _userService.GetAdminUserList(param);
|
||||
var onlineUserIds = _redisService.GetAllLoginUserIds().ToHashSet(StringComparer.Ordinal);
|
||||
var dtos = (result.list ?? new List<UserEntity>()).Select(u =>
|
||||
{
|
||||
var dto = MapToUserListItemDto(u);
|
||||
dto.IsOnline = onlineUserIds.Contains(u.Id);
|
||||
if (dto.CurrentGameType != 3)
|
||||
{
|
||||
var session = _redisService.GetRedisUserCId(u.Id);
|
||||
if (session == null || string.IsNullOrWhiteSpace(session.RoomId))
|
||||
{
|
||||
dto.CurrentGameType = 0;
|
||||
dto.RoomNumber = "";
|
||||
}
|
||||
}
|
||||
return dto;
|
||||
}).ToList();
|
||||
return this.ToPageResult(dtos, result.count);
|
||||
}
|
||||
|
||||
[HttpGet("GetUserDetail")]
|
||||
public async Task<BaseResponse<UserEntity>> GetUserDetail(string userId)
|
||||
{
|
||||
var result = await _userService.GetUser(userId);
|
||||
if (result == null)
|
||||
return this.ToFailResult<UserEntity>("用户不存在");
|
||||
|
||||
return this.ToResult(result);
|
||||
}
|
||||
|
||||
[HttpPost("UpdateUserAssets")]
|
||||
public async Task<BaseResponse<string>> UpdateUserAssets(UpdateUserAssetsParam param)
|
||||
{
|
||||
var result = await _userService.UpdateUserAssets(param);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpGet("GetUserStatistics")]
|
||||
public async Task<BaseResponse<UserStatisticsDto>> GetUserStatistics()
|
||||
{
|
||||
var result = await _userService.GetUserStatistics();
|
||||
return this.ToResult(MapToUserStatisticsDto(result));
|
||||
}
|
||||
|
||||
[HttpGet("GetEmailStatistics")]
|
||||
public async Task<BaseResponse<EmailStatisticsDto>> GetEmailStatistics()
|
||||
{
|
||||
var result = await _userService.GetEmailStatistics();
|
||||
return this.ToResult(MapToEmailStatisticsDto(result));
|
||||
}
|
||||
|
||||
[HttpPost("BatchBanUser")]
|
||||
public async Task<BaseResponse<string>> BatchBanUser(BatchBanUserParam param)
|
||||
{
|
||||
var result = await _userService.BatchBanUser(param);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpGet("UnbanUser")]
|
||||
public async Task<BaseResponse<string>> UnbanUser(string userId)
|
||||
{
|
||||
var result = await _userService.UnbanUser(userId);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("BatchSendEmail")]
|
||||
public async Task<BaseResponse<string>> BatchSendEmail(BatchSendEmailParam param)
|
||||
{
|
||||
var result = await _userService.BatchSendEmail(param);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpGet("CancelUser")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> CancelUser()
|
||||
{
|
||||
var result = await _userService.CancelUser(loginUser);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpGet("DeleteUser")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> DeleteUser(string id)
|
||||
{
|
||||
var result = await _userService.DeleteUser(id);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("BatchDeleteUser")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> BatchDeleteUser([FromBody] BatchDeleteUserParam param)
|
||||
{
|
||||
var result = await _userService.BatchDeleteUser(param.UserIds);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("BanUser")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> BanUser([FromBody] BanUserParam param)
|
||||
{
|
||||
var result = await _userService.BanUser(param.UserId, param.Reason, param.Days);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("UpdateUser")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> UpdateUser(UpdateUserDataParam param)
|
||||
{
|
||||
var result = await _userService.UpdateUser(param);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("SendEmail")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> SendEmail(SendEmailParam param)
|
||||
{
|
||||
var result = await _userService.SendEmail(param, loginUser);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("GetEmailList")]
|
||||
[Authorize]
|
||||
public async Task<PageResponse<EmailListItemDto>> GetEmailList([FromBody] EmailListQueryParam param)
|
||||
{
|
||||
var (list, count) = await _userService.GetEmailList(param);
|
||||
var userIds = list.Where(e => !string.IsNullOrWhiteSpace(e.UserId))
|
||||
.Select(e => e.UserId).Distinct().ToList();
|
||||
var userNames = await _userService.GetEmailUserNamesAsync(userIds);
|
||||
var dtos = list.Select(e =>
|
||||
{
|
||||
userNames.TryGetValue(e.UserId ?? "", out var info);
|
||||
return new EmailListItemDto
|
||||
{
|
||||
Id = e.Id,
|
||||
UserId = e.UserId ?? "",
|
||||
UserName = info.UserName,
|
||||
UserNumber = info.UserNumber,
|
||||
Title = e.Title ?? "",
|
||||
IsRead = e.IsRead,
|
||||
IsReward = e.IsReward,
|
||||
RewardGold = e.RewardGold,
|
||||
RewardDiamond = e.RewardDiamond,
|
||||
SendTime = e.SendTime,
|
||||
ReadTime = e.ReadTime,
|
||||
ExpireTime = e.ExpireTime,
|
||||
RewardText = BuildRewardText(e)
|
||||
};
|
||||
}).ToList();
|
||||
return this.ToPageResult(dtos, (int)count);
|
||||
}
|
||||
|
||||
[HttpGet("DeleteEmail")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> DeleteEmail(string id)
|
||||
{
|
||||
var result = await _userService.DeleteEmail(id);
|
||||
if (result.ok)
|
||||
return this.ToResult("删除成功");
|
||||
else
|
||||
return this.ToFailResult<string>(result.message ?? "删除失败");
|
||||
}
|
||||
|
||||
[HttpPost("BatchDeleteEmail")]
|
||||
[Authorize]
|
||||
public async Task<BaseResponse<string>> BatchDeleteEmail([FromBody] List<string> ids)
|
||||
{
|
||||
var (success, fail) = await _userService.BatchDeleteEmail(ids);
|
||||
if (fail == 0)
|
||||
return this.ToResult($"成功删除 {success} 条");
|
||||
return this.ToResult($"删除完成:成功 {success} 条,失败 {fail} 条");
|
||||
}
|
||||
|
||||
[HttpPost("SetUserType")]
|
||||
public async Task<BaseResponse<string>> SetUserType(string userId, int userType)
|
||||
{
|
||||
var result = await _userService.SetUserType(userId, userType);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("BatchSetUserType")]
|
||||
public async Task<BaseResponse<string>> BatchSetUserType([FromBody] BatchSetUserTypeParam param)
|
||||
{
|
||||
var result = await _userService.BatchSetUserType(param.UserIds, param.UserType);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("SetBlackUser")]
|
||||
public async Task<BaseResponse<string>> SetBlackUser(string userId, bool isBlack)
|
||||
{
|
||||
var result = await _userService.SetBlackUser(userId, isBlack);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("BatchSetBlackUser")]
|
||||
public async Task<BaseResponse<string>> BatchSetBlackUser([FromBody] BatchSetBlackUserParam param)
|
||||
{
|
||||
var result = await _userService.BatchSetBlackUser(param.UserIds, param.IsBlack);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("UpdateUserFactor")]
|
||||
public async Task<BaseResponse<string>> UpdateUserFactor([FromBody] UpdateUserFactorFlatParam param)
|
||||
{
|
||||
var factor = new PlayerFactor
|
||||
{
|
||||
ViolateValue = param.ViolateValue,
|
||||
MissRate = param.MissRate,
|
||||
CompensateQuota = param.CompensateQuota,
|
||||
PenaltyQuota = param.PenaltyQuota,
|
||||
CompensateRate = param.CompensateRate,
|
||||
PenaltyRate = param.PenaltyRate,
|
||||
AdditionalFactor = param.AdditionalFactor
|
||||
};
|
||||
var result = await _userService.UpdateUserFactor(param.UserId, factor);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpGet("GetBlackFactorConfig")]
|
||||
public async Task<BaseResponse<PlayerFactorDto>> GetBlackFactorConfig()
|
||||
{
|
||||
var result = await _userService.GetBlackFactorConfig();
|
||||
return this.ToResult(MapToPlayerFactorDto(result));
|
||||
}
|
||||
|
||||
[HttpPost("ResetUserFactor")]
|
||||
public async Task<BaseResponse<string>> ResetUserFactor(string userId)
|
||||
{
|
||||
var result = await _userService.ResetUserFactor(userId);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpGet("InitUserPassword")]
|
||||
public async Task<BaseResponse<string>> InitUserPassword([FromQuery] string userId)
|
||||
{
|
||||
var result = await _userService.InitUserPassword(userId);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpGet("InitSafeBoxPassword")]
|
||||
public async Task<BaseResponse<string>> InitSafeBoxPassword([FromQuery] string userId)
|
||||
{
|
||||
var result = await _userService.InitSafeBoxPassword(userId);
|
||||
if (result.isok)
|
||||
return this.ToResult(result.msg);
|
||||
else
|
||||
return this.ToFailResult<string>(result.msg);
|
||||
}
|
||||
|
||||
[HttpPost("GetUserFactorList")]
|
||||
public async Task<PageResponse<UserFactorListItemDto>> GetUserFactorList([FromBody] UserFactorListParam param)
|
||||
{
|
||||
var result = await _userService.GetUserFactorList(param);
|
||||
|
||||
var pageIps = (result.list ?? new List<UserEntity>())
|
||||
.Where(u => !string.IsNullOrEmpty(u.RegisterIp))
|
||||
.Select(u => u.RegisterIp!)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
Dictionary<string, int> ipCounts = new Dictionary<string, int>();
|
||||
if (pageIps.Count > 0)
|
||||
{
|
||||
var allUsersWithSameIp = await _userService.GetUsersByRegisterIps(pageIps);
|
||||
ipCounts = allUsersWithSameIp
|
||||
.GroupBy(u => u.RegisterIp)
|
||||
.ToDictionary(g => g.Key, g => g.Count());
|
||||
}
|
||||
|
||||
var dtos = (result.list ?? new List<UserEntity>()).Select(u => new UserFactorListItemDto
|
||||
{
|
||||
Id = u.Id,
|
||||
Number = u.BaseInfo?.Number ?? "",
|
||||
UserName = u.BaseInfo?.UserName ?? "",
|
||||
Mobile = u.BaseInfo?.Mobile ?? "",
|
||||
UserType = u.UserType,
|
||||
RegisterIp = u.RegisterIp ?? "",
|
||||
LoginIp = u.Static?.LastLoginIp ?? "",
|
||||
IpCount = !string.IsNullOrEmpty(u.RegisterIp) && ipCounts.ContainsKey(u.RegisterIp) ? ipCounts[u.RegisterIp] : 1,
|
||||
IsBlack = u.PlayerFactor?.IsBlack ?? false,
|
||||
ViolateValue = u.PlayerFactor?.ViolateValue ?? 0.2,
|
||||
MissRate = u.PlayerFactor?.MissRate ?? 0,
|
||||
CompensateQuota = u.PlayerFactor?.CompensateQuota ?? 0,
|
||||
PenaltyQuota = u.PlayerFactor?.PenaltyQuota ?? 0,
|
||||
CompensateRate = u.PlayerFactor?.CompensateRate != null ? new CompensateRateDto
|
||||
{
|
||||
BossRate = u.PlayerFactor.CompensateRate.BossRate,
|
||||
GoldRate = u.PlayerFactor.CompensateRate.GoldRate,
|
||||
SpecialRate = u.PlayerFactor.CompensateRate.SpecialRate,
|
||||
Ordinary = u.PlayerFactor.CompensateRate.Ordinary
|
||||
} : new CompensateRateDto(),
|
||||
PenaltyRate = u.PlayerFactor?.PenaltyRate != null ? new PenaltyRateDto
|
||||
{
|
||||
BossRate = u.PlayerFactor.PenaltyRate.BossRate,
|
||||
GoldRate = u.PlayerFactor.PenaltyRate.GoldRate,
|
||||
SpecialRate = u.PlayerFactor.PenaltyRate.SpecialRate,
|
||||
Ordinary = u.PlayerFactor.PenaltyRate.Ordinary
|
||||
} : new PenaltyRateDto(),
|
||||
CreateTime = u.CreateTime,
|
||||
TotalRecharge = u.Static?.TotalRecharge ?? 0,
|
||||
TotalRechargeGold = u.Static?.TotalRechargeGold ?? 0,
|
||||
TotalConsumeGold = u.Static?.TotalConsumeGold ?? 0,
|
||||
CurrentGold = u.Assets?.Gold ?? 0,
|
||||
Profit = (u.Assets?.Gold ?? 0) - ((u.Static?.TotalRechargeGold ?? 0) + (u.PlayerFactor?.StartingBonus ?? 0)),
|
||||
AdditionalFactor = u.PlayerFactor?.AdditionalFactor ?? 0,
|
||||
StartingBonus = u.PlayerFactor?.StartingBonus ?? 0
|
||||
});
|
||||
return this.ToPageResult(dtos, result.count);
|
||||
}
|
||||
|
||||
|
||||
private static UserListItemDto MapToUserListItemDto(UserEntity entity)
|
||||
{
|
||||
return new UserListItemDto
|
||||
{
|
||||
Id = entity.Id,
|
||||
Number = entity.BaseInfo?.Number ?? "",
|
||||
NickName = entity.BaseInfo?.UserName ?? "",
|
||||
Avatar = entity.BaseInfo?.AvatarUrl ?? "",
|
||||
Mobile = entity.BaseInfo?.Mobile ?? "",
|
||||
Diamond = entity.Assets?.Diamond ?? 0,
|
||||
Gold = entity.Assets?.Gold ?? 0,
|
||||
SafeBoxGold = entity.SafeBox?.Amount ?? 0,
|
||||
VipLevel = entity.Assets?.VipLevel ?? 0,
|
||||
UserType = entity.UserType,
|
||||
IsBan = entity.BanInfo?.IsBan ?? false,
|
||||
BanReason = entity.BanInfo?.BanReason,
|
||||
BanEndTime = entity.BanInfo?.BanEndTime ?? 0,
|
||||
IsBlack = entity.PlayerFactor?.IsBlack ?? false,
|
||||
RegisterTime = entity.CreateTime,
|
||||
RegisterIp = entity.RegisterIp ?? "",
|
||||
LastLoginIp = entity.Static?.LastLoginIp ?? "",
|
||||
LastLoginTime = entity.Static?.LastLoginTime ?? 0,
|
||||
RoomNumber = entity.Static?.RoomNumber ?? "",
|
||||
CurrentGameType = entity.Static?.CurrentGameType ?? 0,
|
||||
Channel = entity.BaseInfo?.Channel ?? "",
|
||||
TotalRecharge = (long)(entity.Static?.TotalRecharge ?? 0)
|
||||
};
|
||||
}
|
||||
|
||||
private static UserStatisticsDto MapToUserStatisticsDto(UserStatistics stat)
|
||||
{
|
||||
return new UserStatisticsDto
|
||||
{
|
||||
TotalUsers = stat.TotalUsers,
|
||||
TodayRegisteredUsers = stat.TodayRegisteredUsers,
|
||||
MonthRegisteredUsers = stat.MonthRegisteredUsers,
|
||||
OnlineUsers = stat.OnlineUsers,
|
||||
BannedUsers = stat.BannedUsers,
|
||||
VipUsers = stat.VipUsers,
|
||||
VipLevelCount = stat.VipLevelCount ?? new Dictionary<int, long>(),
|
||||
TotalGold = stat.TotalGold,
|
||||
TotalDiamond = stat.TotalDiamond
|
||||
};
|
||||
}
|
||||
|
||||
private static EmailStatisticsDto MapToEmailStatisticsDto(EmailStatistics stat)
|
||||
{
|
||||
return new EmailStatisticsDto
|
||||
{
|
||||
TotalEmails = stat.TotalEmails,
|
||||
RewardEmails = stat.RewardEmails,
|
||||
UnclaimedEmails = stat.UnclaimedEmails,
|
||||
TodayEmails = stat.TodayEmails,
|
||||
MonthEmails = stat.MonthEmails
|
||||
};
|
||||
}
|
||||
|
||||
private static PlayerFactorDto MapToPlayerFactorDto(PlayerFactor factor)
|
||||
{
|
||||
if (factor == null)
|
||||
return new PlayerFactorDto();
|
||||
|
||||
return new PlayerFactorDto
|
||||
{
|
||||
IsBlack = factor.IsBlack,
|
||||
IsIgnore = factor.IsIgnore,
|
||||
ViolateValue = factor.ViolateValue,
|
||||
CompensateRate = factor.CompensateRate?.BossRate ?? 1,
|
||||
PenaltyRate = factor.PenaltyRate?.BossRate ?? 0,
|
||||
CompensateQuota = factor.CompensateQuota,
|
||||
PenaltyQuota = factor.PenaltyQuota,
|
||||
StartingBonus = factor.StartingBonus
|
||||
};
|
||||
}
|
||||
|
||||
private static string BuildRewardText(UserEmail email)
|
||||
{
|
||||
var parts = new List<string>();
|
||||
if (email.RewardGold > 0)
|
||||
parts.Add($"金币{email.RewardGold:N0}");
|
||||
if (email.RewardDiamond > 0)
|
||||
parts.Add($"钻石{email.RewardDiamond}");
|
||||
if (email.RewardItems != null)
|
||||
{
|
||||
foreach (var item in email.RewardItems)
|
||||
{
|
||||
if (item != null && !string.IsNullOrWhiteSpace(item.Name))
|
||||
parts.Add($"{item.Name}*{item.Count}");
|
||||
}
|
||||
}
|
||||
return parts.Count > 0 ? string.Join(" ", parts) : "无";
|
||||
}
|
||||
|
||||
|
||||
|
||||
[HttpGet("GetUserProps")]
|
||||
public async Task<BaseResponse<List<BaseProductCount>>> GetUserProps(string userId)
|
||||
{
|
||||
var result = await _userService.GetUserProps(userId);
|
||||
return this.ToResult(result);
|
||||
}
|
||||
|
||||
[HttpPost("AddUserProp")]
|
||||
public async Task<BaseResponse<string>> AddUserProp(string userId, string propNumber, int count)
|
||||
{
|
||||
var res = await _userService.AddUserProp(userId, propNumber, count);
|
||||
if (res.isok) return this.ToResult(res.msg);
|
||||
return this.ToFailResult<string>(res.msg);
|
||||
}
|
||||
|
||||
[HttpPost("UpdateUserPropCount")]
|
||||
public async Task<BaseResponse<string>> UpdateUserPropCount(string userId, string propNumber, int count)
|
||||
{
|
||||
var res = await _userService.UpdateUserPropCount(userId, propNumber, count);
|
||||
if (res.isok) return this.ToResult(res.msg);
|
||||
return this.ToFailResult<string>(res.msg);
|
||||
}
|
||||
|
||||
[HttpPost("DeleteUserProp")]
|
||||
public async Task<BaseResponse<string>> DeleteUserProp(string userId, string propNumber)
|
||||
{
|
||||
var res = await _userService.DeleteUserProp(userId, propNumber);
|
||||
if (res.isok) return this.ToResult(res.msg);
|
||||
return this.ToFailResult<string>(res.msg);
|
||||
}
|
||||
|
||||
[HttpGet("SyncAllUserLevel")]
|
||||
public async Task<BaseResponse<string>> SyncAllUserLevel()
|
||||
{
|
||||
var (total, updated, msg) = await _userService.SyncAllUserLevel();
|
||||
return this.ToResult(msg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class UserListItemDto
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Number { get; set; }
|
||||
public string NickName { get; set; }
|
||||
public string Avatar { get; set; }
|
||||
public string Mobile { get; set; }
|
||||
public int Diamond { get; set; }
|
||||
public long Gold { get; set; }
|
||||
public long SafeBoxGold { get; set; }
|
||||
public int VipLevel { get; set; }
|
||||
public int UserType { get; set; }
|
||||
public bool IsBan { get; set; }
|
||||
public string BanReason { get; set; }
|
||||
public long BanEndTime { get; set; }
|
||||
public bool IsBlack { get; set; }
|
||||
public long RegisterTime { get; set; }
|
||||
public string RegisterIp { get; set; }
|
||||
public string LastLoginIp { get; set; }
|
||||
public long LastLoginTime { get; set; }
|
||||
public string RoomNumber { get; set; }
|
||||
public int CurrentGameType { get; set; }
|
||||
public bool IsOnline { get; set; }
|
||||
public string Channel { get; set; }
|
||||
public long TotalRecharge { get; set; }
|
||||
}
|
||||
|
||||
public class UserStatisticsDto
|
||||
{
|
||||
public long TotalUsers { get; set; }
|
||||
public long TodayRegisteredUsers { get; set; }
|
||||
public long MonthRegisteredUsers { get; set; }
|
||||
public long OnlineUsers { get; set; }
|
||||
public long BannedUsers { get; set; }
|
||||
public long VipUsers { get; set; }
|
||||
public Dictionary<int, long> VipLevelCount { get; set; }
|
||||
public long TotalGold { get; set; }
|
||||
public long TotalDiamond { get; set; }
|
||||
}
|
||||
|
||||
public class EmailStatisticsDto
|
||||
{
|
||||
public long TotalEmails { get; set; }
|
||||
public long RewardEmails { get; set; }
|
||||
public long UnclaimedEmails { get; set; }
|
||||
public long TodayEmails { get; set; }
|
||||
public long MonthEmails { get; set; }
|
||||
}
|
||||
|
||||
public class PlayerFactorDto
|
||||
{
|
||||
public bool IsBlack { get; set; }
|
||||
public bool IsIgnore { get; set; }
|
||||
public double ViolateValue { get; set; }
|
||||
public double CompensateRate { get; set; }
|
||||
public double PenaltyRate { get; set; }
|
||||
public int CompensateQuota { get; set; }
|
||||
public int PenaltyQuota { get; set; }
|
||||
public long StartingBonus { get; set; }
|
||||
}
|
||||
|
||||
public class UserFactorListItemDto
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Number { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public string Mobile { get; set; }
|
||||
public int UserType { get; set; }
|
||||
public string RegisterIp { get; set; }
|
||||
public string LoginIp { get; set; }
|
||||
public int IpCount { get; set; }
|
||||
public bool IsBlack { get; set; }
|
||||
public double ViolateValue { get; set; }
|
||||
public double MissRate { get; set; }
|
||||
public int CompensateQuota { get; set; }
|
||||
public int PenaltyQuota { get; set; }
|
||||
public CompensateRateDto CompensateRate { get; set; }
|
||||
public PenaltyRateDto PenaltyRate { get; set; }
|
||||
public long CreateTime { get; set; }
|
||||
public double TotalRecharge { get; set; }
|
||||
public long TotalRechargeGold { get; set; }
|
||||
public long TotalConsumeGold { get; set; }
|
||||
public long CurrentGold { get; set; }
|
||||
public long Profit { get; set; }
|
||||
public double AdditionalFactor { get; set; }
|
||||
public long StartingBonus { get; set; }
|
||||
}
|
||||
|
||||
public class CompensateRateDto
|
||||
{
|
||||
public double BossRate { get; set; } = 1;
|
||||
public double GoldRate { get; set; } = 1;
|
||||
public double SpecialRate { get; set; } = 1;
|
||||
public double Ordinary { get; set; } = 1;
|
||||
}
|
||||
|
||||
public class PenaltyRateDto
|
||||
{
|
||||
public double BossRate { get; set; } = 1;
|
||||
public double GoldRate { get; set; } = 1;
|
||||
public double SpecialRate { get; set; } = 1;
|
||||
public double Ordinary { get; set; } = 1;
|
||||
}
|
||||
|
||||
public class BanUserParam
|
||||
{
|
||||
public string UserId { get; set; } = "";
|
||||
|
||||
public string Reason { get; set; } = "";
|
||||
|
||||
public int Days { get; set; } = 0;
|
||||
}
|
||||
|
||||
public class EmailListItemDto
|
||||
{
|
||||
public string Id { get; set; } = "";
|
||||
public string UserId { get; set; } = "";
|
||||
public string UserName { get; set; } = "";
|
||||
public string UserNumber { get; set; } = "";
|
||||
public string Title { get; set; } = "";
|
||||
public bool IsRead { get; set; }
|
||||
public bool IsReward { get; set; }
|
||||
public long RewardGold { get; set; }
|
||||
public int RewardDiamond { get; set; }
|
||||
public long SendTime { get; set; }
|
||||
public long ReadTime { get; set; }
|
||||
public long ExpireTime { get; set; }
|
||||
public string RewardText { get; set; } = "";
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user