using System.Linq; using Common; using CommonDomain.BaseModel; using CommonInfrastructure; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using UserApi; using UserDomain; using UserDomain.Entity; using UserService; using UserService.Response; using UserService.Param; using UserService.Tasks; using UserService.Tasks.Param; using UserService.User; using UserService.BattleOrder; using UserService.GameConfigs; namespace UserApi.Hall { [ApiController, Route("api/[controller]")] [Authorize] public class HallController : BaseController { private readonly IUserService _userService; private readonly ITaskService _taskService; private readonly IBattleOrderService _battleOrderService; private readonly IActivityConfigService _activityConfigService; public HallController(IUserService userService, ITaskService taskService, IBattleOrderService battleOrderService, IActivityConfigService activityConfigService) { _userService = userService; _taskService = taskService; _battleOrderService = battleOrderService; _activityConfigService = activityConfigService; } /// /// 存入保险箱 /// [HttpGet("SaveSafeBox")] public async Task> SaveSafeBox(int gold) { var res = await _userService.SaveSafeBox(gold, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 取出保险箱 /// [HttpGet("GetSafeBox")] public async Task> GetSafeBox(long gold, string password) { var res = await _userService.GetSafeBox(gold, password, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 设置保险箱密码 /// [HttpGet("SetSafeBoxPassword")] public async Task> SetSafeBoxPassword(string password) { var res = await _userService.SetSafeBoxPassword(password, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 重设保险箱密码 - 通过短信验证码重置 /// [HttpGet("ResetSafeBoxPassword")] public async Task> ResetSafeBoxPassword(string password, string code) { var res = await _userService.ResetSafeBoxPassword(password, code, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 领取救济金 /// [HttpGet("GetRelief")] public async Task> GetRelief() { var res = await _userService.GetReliefGold(loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 合成碎片 /// [HttpGet("SynthesisFragment")] public async Task> SynthesisFragment(string propNumber) { var res = await _userService.SyntheticFragments(propNumber, loginUser); if (res.isok) return this.ToResult(res.model); else return this.ToFailResult(res.msg); } /// /// 购买道具 /// [HttpGet("BuyProp")] public async Task> BuyProp(string propNumber, int count = 1) { var res = await _userService.BuyProps(propNumber, count, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 使用VIP经验包 /// [HttpGet("UseVipExp")] public async Task> UseVipExp(int count = 1) { var res = await _userService.UseVipExp(count, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 购买金币 /// [HttpGet("BuyGold")] public async Task> BuyGold(string number, int count = 1) { var res = await _userService.BuyGold(number, count, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 购买钻石 /// [HttpGet("BuyDiamond")] public async Task> BuyDiamond(string number, int count = 1) { var res = await _userService.BuyDiamond(number, count, loginUser); if (res.isok) return this.ToResult(res.url); else return this.ToFailResult(res.msg); } /// /// 签到 /// [HttpGet("SignIn")] public async Task> SignIn() { var res = await _userService.Sign(loginUser); if (res.isok) return this.ToResult(res.result); else return this.ToFailResult(res.msg); } /// /// 获取签到状态 - 返回当前签到进度与可领取状态 /// [HttpGet("GetSignStatus")] public async Task> GetSignStatus() { var res = await _userService.GetSignStatus(loginUser); return this.ToResult(res); } /// /// 切换使用的炮台 /// [HttpGet("ChangeCannon")] public async Task> ChangeCannon(string number) { var res = await _userService.ChangeCannon(number, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 切换使用的翅膀 /// [HttpGet("ChangeWing")] public async Task> ChangeWing(string number) { var res = await _userService.ChangeWing(number, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 切换使用的战神 /// [HttpGet("ChangeGodWar")] public async Task> ChangeGodWar(string number) { var res = await _userService.ChangeGodWar(number, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 卸载当前使用的炮台并切换为默认基础炮台(不会删除已拥有的炮台) /// [HttpGet("UnloadCannon")] public async Task> UnloadCannon(string number) { var res = await _userService.UnloadCannon(number, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 卸载当前使用的翅膀(不会删除已拥有的翅膀) /// [HttpGet("UnloadWing")] public async Task> UnloadWing(string number) { var res = await _userService.UnloadWing(number, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 卸载当前使用的战神(不会删除已拥有的战神) /// [HttpGet("UnloadGodWar")] public async Task> UnloadGodWar(string number) { var res = await _userService.UnloadGodWar(number, loginUser); if (res.isok) return this.ToResult(res.msg); else return this.ToFailResult(res.msg); } /// /// 领取Vip每日礼包 /// [HttpGet("GetVipDayGift")] public async Task> GetVipDayGift() { var res = await _userService.GetVipDayGift(loginUser); if (res.isok) return this.ToResult(res.model); else return this.ToFailResult(res.msg); } /// /// 领取Vip权益 /// [HttpGet("GetVipGift")] public async Task> GetVipGift(int vipLevel) { var res = await _userService.GetVipGift(vipLevel, loginUser); if (res.isok) return this.ToResult(res.model); else return this.ToFailResult(res.msg); } /// /// 获取用户任务列表 /// [HttpGet("GetUserTaskList")] [Authorize] public async Task> GetUserTaskList(int taskType) { var result = await _taskService.GetUserTaskList(new GetUserTaskListParam() { TaskType = taskType }, loginUser.UserId); var dtos = result.Select(MapToUserTaskDto).ToList(); return this.ToListResult(dtos); } private static UserTaskDto MapToUserTaskDto(UserTask entity) { if (entity == null) return new UserTaskDto(); return new UserTaskDto { Id = entity.Id ?? "", UserId = entity.UserId ?? "", Number = entity.Number ?? "", Remark = entity.Remark ?? "", TaskType = (int)entity.TaskType, TaskEvent = (int)entity.TaskEvent, TaskCount = entity.TaskCount, Count = entity.Count, IsFinish = entity.IsFinish, OtherId = entity.OtherId ?? "", IsGet = entity.IsGet, TaskAddTime = entity.TaskAddTime, TaskEndTime = entity.TaskEndTime, TaskFinishTime = entity.TaskFinishTime, Exp = entity.Exp }; } /// /// 领取任务奖励 /// [HttpGet("DistributeRewards")] public async Task> DistributeRewards(string id) { var result = await _taskService.DistributeRewards(id, loginUser.UserId); if (result.isok) return this.ToResult(result.msg); else return this.ToFailResult(result.msg); } /// /// 获取资产变动记录 /// [HttpPost("GetUserRewardList")] public async Task> GetUserRewardList(GetUserRewardListParam param) { param.UserId = loginUser.UserId; var res = await _userService.GetUserRewardList(param); if(res.list==null || res.list.Count()==0) return this.ToPageResult(null, res.count); var dtos = res.list.Select(MapToUserRewardDto).ToList(); return this.ToPageResult(dtos, res.count); } private static UserRewardDto MapToUserRewardDto(UserReward entity) { if (entity == null) return new UserRewardDto(); return new UserRewardDto { Id = entity.Id ?? "", UserId = entity.UserId ?? "", Type = entity.Type, Source = (int)entity.Source, CurrencyType = entity.CurrencyType, BeforeCount = entity.BeforeCount, ChangeCount = entity.ChangeCount, AfterCount = entity.AfterCount, OtherId = entity.OtherId ?? "", OtherUserId = entity.OtherUserId ?? "", Remark = entity.Remark ?? "", RoomName = entity.RoomName ?? "", RoomInfo = entity.RoomInfo ?? "", Tax = entity.Tax, CreateTime = entity.CreateTime }; } public class UserTaskDto { public string Id { get; set; } public string UserId { get; set; } public string Number { get; set; } public string Remark { get; set; } public int TaskType { get; set; } public int TaskEvent { get; set; } public int TaskCount { get; set; } public double Count { get; set; } public bool IsFinish { get; set; } public string OtherId { get; set; } public bool IsGet { get; set; } public long TaskAddTime { get; set; } public long TaskEndTime { get; set; } public long TaskFinishTime { get; set; } public long Exp { get; set; } } public class UserRewardDto { public string Id { get; set; } public string UserId { get; set; } public int Type { get; set; } public int Source { get; set; } public int CurrencyType { get; set; } public long BeforeCount { get; set; } public long ChangeCount { get; set; } public long AfterCount { get; set; } public string OtherId { get; set; } public string OtherUserId { get; set; } public string Remark { get; set; } public string RoomName { get; set; } public string RoomInfo { get; set; } public int Tax { get; set; } public long CreateTime { get; set; } } /// /// 获取用户战令信息 /// [HttpGet("GetBattleOrder")] public async Task> GetBattleOrder() { var result = await _battleOrderService.GetUserBattleOrderWithConfigAsync(loginUser.UserId); return this.ToResult(result); } /// /// 获取各等级奖励领取状态 /// [HttpGet("GetBattleOrderLevelStatus")] public async Task> GetBattleOrderLevelStatus() { var result = await _battleOrderService.GetLevelRewardStatusAsync(loginUser.UserId); return this.ToResult(result); } /// /// 一键领取战令奖励 /// [HttpGet("ReceiveAllBattleOrderRewards")] public async Task> ReceiveAllBattleOrderRewards() { var result = await _battleOrderService.ReceiveAllRewardsAsync(loginUser.UserId); if (result.success) return this.ToListResult(result.rewards); else return this.ToListFailResult(result.message); } /// /// 领取指定等级战令奖励 /// [HttpGet("ReceiveBattleOrderLevelReward")] public async Task> ReceiveBattleOrderLevelReward( int level) { var result = await _battleOrderService.ReceiveLevelRewardAsync(loginUser.UserId, level); if (result.success) return this.ToListResult(result.rewards); else return this.ToListFailResult(result.message); } /// /// 购买战令等级 /// [HttpGet("BuyBattleOrderLevel")] public async Task> BuyBattleOrderLevel(int levelCount) { var result = await _battleOrderService.BuyLevelsAsync(loginUser.UserId, levelCount); if (result.success) return this.ToResult(new BuyBattleOrderLevelResponse { NewLevel = result.newLevel, Cost = result.cost }); else return this.ToFailResult(result.message); } /// /// 购买战令进阶 /// [HttpGet("BuyBattleOrderAdvance")] public async Task> BuyBattleOrderAdvance(int type) { var result = await _battleOrderService.BuyAdvanceAsync(loginUser.UserId, type); if (result.success) return this.ToResult(new BuyBattleOrderAdvanceResponse { Success = true, Message = result.message, PurchasedAdvances = result.purchasedAdvances }); else return this.ToFailResult(result.message); } /// /// 一键领取所有任务奖励 /// [HttpGet("ReceiveAllTaskRewards")] public async Task> ReceiveAllTaskRewards() { var result = await _taskService.ReceiveAllTaskRewardsAsync(loginUser.UserId); if (result.success) return this.ToResult(new { message = result.message, totalExp = result.totalExp }); else return this.ToFailResult(result.message); } /// /// 获取用户排行榜 /// [HttpGet("GetRanking")] public async Task> GetRanking(int type = 1) { var config = await _activityConfigService.Get(); var rankingConfig = config?.RankingRewardConfig; if (rankingConfig != null && rankingConfig.IsMaintaining) { return this.ToFailResult( string.IsNullOrEmpty(rankingConfig.MaintainingMessage) ? "当前排行榜正在维护中,请稍后再试" : rankingConfig.MaintainingMessage); } var result = await _userService.GetRanking(loginUser, type); return this.ToResult(result); } /// /// 使用大喇叭发送全服广播 /// [HttpGet("SendBroadcast")] public async Task> SendBroadcast(string message) { var res = await _userService.SendBroadcast(message, loginUser); if (res.isok) return this.ToResult(res.msg); return this.ToFailResult(res.msg); } /// /// 获取象棋分区总数 /// [AllowAnonymous] [HttpGet("GetChessRoomPartitionCount")] public async Task> GetChessRoomPartitionCount([FromServices] UserService.GameConfigs.IGameConfigService gameConfigService) { var config = await gameConfigService.Get(); if (config == null) return this.ToFailResult("配置不存在"); var total = config.RoomConfigs .Where(r => r.GameType == CommonDomain.Enum.GameTypeEnum.中国象棋) .Sum(r => r.RoomPartitionNum); return this.ToResult(total); } } }