using Microsoft.AspNetCore.Mvc; namespace Application.Web.Controllers.Pub; /// /// 兑换接口 /// [Route("[controller]/[action]")] [ApiController] [Authorize] public class ExchangeController : ControllerBase { private readonly IGameMapService _mapService; private readonly IExchangeService _exchangeService; public ExchangeController(IGameMapService mapService, IExchangeService exchangeService) { _mapService = mapService; _exchangeService = exchangeService; } /// /// 获取兑换信息 /// /// /// [HttpGet] public async Task GetExchangeData(int npcId) { string userId = StateHelper.userId; int areaId = StateHelper.areaId; var npcInfo = await _mapService.GetNpcInfo(npcId); if (npcInfo == null) { return PoAction.Message("Npc不存在!"); } if (npcInfo.status != 1) { return PoAction.Message("Npc不存在!"); } if (!npcInfo.bus.Any(it => it.code == nameof(GameEnum.NpcBusCode.Exchange))) { return PoAction.Message("业务不可用!"); } var onMap = await _mapService.GetUserOnMapId(userId); if (npcInfo.mapId != onMap) { return PoAction.Message("Npc不存在!"); } var data = await _exchangeService.GetExchangeData(npcId); data = data.FindAll(it => GameTool.AreaVerify(areaId, it.areaId) && it.endTime > DateTime.Now); return PoAction.Ok(data); } /// /// 兑换物品 /// /// /// /// /// [HttpGet] public async Task ExchangeOk(int npcId, int exId, int count) { count = count < 1 ? 1 : count; string userId = StateHelper.userId; int areaId = StateHelper.areaId; var npcInfo = await _mapService.GetNpcInfo(npcId); if (npcInfo == null) { return PoAction.Message("Npc不存在!"); } if (npcInfo.status != 1) { return PoAction.Message("Npc不存在!"); } if (!npcInfo.bus.Any(it => it.code == nameof(GameEnum.NpcBusCode.Exchange))) { return PoAction.Message("业务不可用!"); } var onMap = await _mapService.GetUserOnMapId(userId); if (npcInfo.mapId != onMap) { return PoAction.Message("Npc不存在!"); } var exInfo = await _exchangeService.GetExchangeInfo(exId); if (exInfo == null) { return PoAction.Message("兑换不存在!"); } if (exInfo.endTime < DateTime.Now) { return PoAction.Message("兑换已结束!"); } if (GameTool.AreaVerify(areaId, exInfo.areaId) == false) { return PoAction.Message("兑换不存在!"); } int sumCount = await _exchangeService.GetExchangeCount(userId, exId); if ((sumCount + count) > exInfo.count) { int endCount = (int)exInfo.count - sumCount; if (endCount == 0) { return PoAction.Message("您已达到兑换上限!"); } else { return PoAction.Message($"您最多还能兑换{endCount}次!"); } } var result = await GameBus.CheckNeed(userId, exInfo.needData, count); if (result.result) { if (await GameBus.UpdateBag(userId, 0, exInfo.needData, "兑换", count)) { long endTime = TimeExtend.GetTimeStampSecondsByCode(exInfo.exType, (DateTime)exInfo.endTime); if (await _exchangeService.AddUserExchangeLog(userId, exId, count, endTime)) { await GameBus.UpdateBag(userId, 1, exInfo.getData, "兑换", count); return PoAction.Ok(true); } else { return PoAction.Message("兑换失败,请稍后尝试!"); } } else { return PoAction.Message("兑换失败,请稍后尝试!"); } } else { return PoAction.Message("兑换失败,请稍后尝试!"); } } }