Files
Kg.SeaTime/Service/Application.Web/Controllers/Pub/GoodsController.cs
2026-06-27 16:32:11 +08:00

131 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace Application.Web.Controllers.Pub;
/// <summary>
/// 物品接口
/// </summary>
[Route("[controller]/[action]")]
[ApiController]
[Authorize]
public class GoodsController : ControllerBase
{
private readonly IGameGoodsService _goodsService;
private readonly IUnitUserAttrService _attrService;
private readonly IMessageService _messageService;
private readonly IUnitUserWeight _weightService;
public GoodsController(IGameGoodsService goodsService, IUnitUserAttrService attrService,
IMessageService messageService, IUnitUserWeight weightService)
{
_goodsService = goodsService;
_attrService = attrService;
_messageService = messageService;
_weightService = weightService;
}
/// <summary>
/// 获取物品信息
/// </summary>
/// <param name="goodsId">物品ID</param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> GetGoodsInfo(int goodsId)
{
var goodsInfo = await _goodsService.GetGoodsInfo(goodsId);
if (goodsInfo == null)
{
return PoAction.Message("物品不存在!");
}
string userId = StateHelper.userId;
int count = await _goodsService.GetUserGoodsCount(userId, goodsId);
int UseState = 0;
switch (goodsInfo.code)
{
case "Pack":
UseState = 1;
break;
case "Weight":
UseState = 1;
break;
}
return PoAction.Ok(new { goods = goodsInfo, count, use = UseState });
}
/// <summary>
/// 使用物品
/// </summary>
/// <param name="goodsId"></param>
/// <param name="count"></param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> UseGoods(int goodsId, int count)
{
count = count < 1 ? 1 : count;
string userId = StateHelper.userId;
var goodsInfo = await _goodsService.GetGoodsInfo(goodsId);
if (goodsInfo == null)
{
return PoAction.Message("物品不存在!");
}
var MyGoods = await _goodsService.GetUserGoodsCount(userId, goodsId);
if (MyGoods < count)
{
return PoAction.Message("物品不足!");
}
var myLev = await _attrService.GetUserLev(userId);
if (myLev < (int)goodsInfo.lev)
{
return PoAction.Message($"该物品{goodsInfo.lev}级才可使用!");
}
if (await _goodsService.UpdateUserGoods(userId, 0, goodsId, count, "使用物品"))
{
string message = "";
if (goodsInfo.code == nameof(GoodsEnum.Code.Pack)) //使用礼包
{
var park = JsonConvert.DeserializeObject<RandomModel>(goodsInfo.content);
var award = GameBus.GetRandomGoods(park, count);
if (award.Count > 0)
{
message = $"打开[{goodsInfo.goodsName}]×{count},获得:";
foreach (var item in award)
{
message += $"{item.name}+{item.count},";
}
message = message.TrimEnd(',');
await GameBus.UpdateBag(userId, 1, award, $"打开礼包:{goodsInfo.goodsName}×{count}获得");
await _messageService.SendBroadcast(userId, nameof(MessageEnum.BroadcastCode.Award), message);
}
else
{
message = "空空如也,什么也没有得到!";
}
}
else if (goodsInfo.code == nameof(GoodsEnum.Code.Weight))
{
int unitWeight = Convert.ToInt32(goodsInfo.content);
await _weightService.UpdateUserMaxWeight(userId, 1, unitWeight, count, goodsInfo.goodsId,
goodsInfo.goodsName);
message = $"使用[{goodsInfo.goodsName}]×{count},负重+{unitWeight * count}";
}
else if (goodsInfo.code == nameof(GoodsEnum.Code.State))
{
}
return PoAction.Ok(true, message);
}
else
{
return PoAction.Message("使用失败,请稍后尝试!");
}
}
}