2222
This commit is contained in:
284
Service/Application.Web/Controllers/Map/StoreController.cs
Normal file
284
Service/Application.Web/Controllers/Map/StoreController.cs
Normal file
@@ -0,0 +1,284 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Application.Web.Controllers.Map;
|
||||
|
||||
/// <summary>
|
||||
/// 商店接口
|
||||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "Map")]
|
||||
[Route("Map/[controller]/[action]")]
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
public class StoreController : ControllerBase
|
||||
{
|
||||
private readonly IGameStoreService _storeService;
|
||||
private readonly IGameMapService _mapService;
|
||||
private readonly IUnitUserAccService _accService;
|
||||
private readonly IUnitUserWeight _weightService;
|
||||
private readonly IGameEquService _equService;
|
||||
private readonly IGameGoodsService _goodsService;
|
||||
|
||||
public StoreController(IGameStoreService storeService, IGameMapService mapService, IUnitUserAccService accService,
|
||||
IUnitUserWeight weightService, IGameEquService equService, IGameGoodsService goodsService)
|
||||
{
|
||||
_storeService = storeService;
|
||||
_mapService = mapService;
|
||||
_accService = accService;
|
||||
_weightService = weightService;
|
||||
_equService = equService;
|
||||
_goodsService = goodsService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取npc商店信息
|
||||
/// </summary>
|
||||
/// <param name="npcId"></param>
|
||||
/// <param name="page"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<IPoAction> GetNpcStore(int npcId, int page)
|
||||
{
|
||||
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不存在!");
|
||||
}
|
||||
|
||||
var onMap = await _mapService.GetUserOnMapId(userId);
|
||||
if (npcInfo.mapId != onMap)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
RefAsync<int> Total = 0;
|
||||
var data = await _storeService.GetStoreData(npcId, areaId, page, 10, Total);
|
||||
|
||||
return PoAction.Ok(new { data, total = Total.Value, npcInfo.npcName });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 购买物品
|
||||
/// </summary>
|
||||
/// <param name="parms"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IPoAction> Buy([FromBody] StoreBuyParms parms)
|
||||
{
|
||||
parms.count = parms.count < 1 ? 1 : parms.count;
|
||||
string userId = StateHelper.userId;
|
||||
int areaId = StateHelper.areaId;
|
||||
var npcInfo = await _mapService.GetNpcInfo(parms.npcId);
|
||||
if (npcInfo == null)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
if (npcInfo.status != 1)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
var onMap = await _mapService.GetUserOnMapId(userId);
|
||||
if (npcInfo.mapId != onMap)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
var storeInfo = await _storeService.GetStoreInfo(parms.storeId);
|
||||
if (storeInfo == null)
|
||||
{
|
||||
return PoAction.Message("商品已下架!");
|
||||
}
|
||||
|
||||
if (!GameTool.AreaVerify(areaId, storeInfo.areaId))
|
||||
{
|
||||
return PoAction.Message("商品已下架!");
|
||||
}
|
||||
|
||||
if (storeInfo.npcId != parms.npcId)
|
||||
{
|
||||
return PoAction.Message("商品已下架!");
|
||||
}
|
||||
|
||||
//此处需要计算负重
|
||||
var needWeight = await GameTool.GetPropWeight(storeInfo.type, storeInfo.parameter);
|
||||
needWeight = needWeight * parms.count;
|
||||
if (await _weightService.CheakUserWeight(userId, needWeight) == false)
|
||||
{
|
||||
return PoAction.Message("负重不足!");
|
||||
}
|
||||
|
||||
long need = parms.count * (long)storeInfo.price;
|
||||
var myAcc = await _accService.GetUserAccInfo(userId, storeInfo.payType);
|
||||
if (myAcc < need)
|
||||
{
|
||||
return PoAction.Message($"您的{GameTool.GetCurrencyName(storeInfo.payType)}不足!");
|
||||
}
|
||||
|
||||
if (await _accService.UpdateUserAccBath(userId, 0, storeInfo.payType, need, nameof(AccEnum.Name.Npc商城),
|
||||
$"商城购买物品:{storeInfo.name}×{parms.count}"))
|
||||
{
|
||||
await GameBus.UpdateBag(userId, 1, storeInfo.type, storeInfo.parameter, parms.count, "Npc商店购买");
|
||||
return PoAction.Ok(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return PoAction.Message("购买失败,请稍后尝试!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 出售物品
|
||||
/// </summary>
|
||||
/// <param name="npcId"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="query"></param>
|
||||
/// <param name="page"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<IPoAction> GetNpcSale(int npcId, int type, string? query, int page)
|
||||
{
|
||||
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不存在!");
|
||||
}
|
||||
|
||||
var onMap = await _mapService.GetUserOnMapId(userId);
|
||||
if (npcInfo.mapId != onMap)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
RefAsync<int> total = 0;
|
||||
|
||||
if (type == 0)
|
||||
{
|
||||
var data = await _equService.GetUserEquData(userId, 0, query, page, 10, total, true);
|
||||
return PoAction.Ok(new { data, total.Value });
|
||||
}
|
||||
else if (type == 1)
|
||||
{
|
||||
List<string> code = new List<string>() { nameof(GoodsEnum.Code.Drug) };
|
||||
var data = await _goodsService.GetUserGoodsData(userId, code, new List<string>(), query, page, 10, total);
|
||||
return PoAction.Ok(new { data, total.Value });
|
||||
}
|
||||
else if (type == 2)
|
||||
{
|
||||
List<string> code = new List<string>();
|
||||
List<string> noCode = new List<string>() { nameof(GoodsEnum.Code.Drug) };
|
||||
var data = await _goodsService.GetUserGoodsData(userId, code, noCode, query, page, 10, total);
|
||||
return PoAction.Ok(new { data, total.Value });
|
||||
}
|
||||
else
|
||||
{
|
||||
return PoAction.Ok(new { data = new List<string>(), total.Value });
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 出售物品
|
||||
/// </summary>
|
||||
/// <param name="parms"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IPoAction> Sale([FromBody] StoreSaleParms parms)
|
||||
{
|
||||
parms.count = parms.count < 1 ? 1 : parms.count;
|
||||
string userId = StateHelper.userId;
|
||||
int areaId = StateHelper.areaId;
|
||||
var npcInfo = await _mapService.GetNpcInfo(parms.npcId);
|
||||
if (npcInfo == null)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
if (npcInfo.status != 1)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
var onMap = await _mapService.GetUserOnMapId(userId);
|
||||
if (npcInfo.mapId != onMap)
|
||||
{
|
||||
return PoAction.Message("Npc不存在!");
|
||||
}
|
||||
|
||||
if (parms.type == 0)//装备
|
||||
{
|
||||
var equInfo = await _equService.GetUserEquInfo(parms.id);
|
||||
if (equInfo == null)
|
||||
{
|
||||
return PoAction.Message("装备不存在!");
|
||||
}
|
||||
|
||||
if (equInfo.userId != userId)
|
||||
{
|
||||
return PoAction.Message("装备不存在!");
|
||||
}
|
||||
|
||||
if (equInfo.isOn == 1)
|
||||
{
|
||||
return PoAction.Message("穿戴中的装备无法出售!");
|
||||
}
|
||||
|
||||
if (equInfo.isLock == 1)
|
||||
{
|
||||
return PoAction.Message("装备已锁定!");
|
||||
}
|
||||
|
||||
if (await _equService.DeductUserEqu(userId, new List<unit_user_equ>() { equInfo }, "出售装备"))
|
||||
{
|
||||
await _accService.UpdateUserCopper(userId, 1, (int)equInfo.sysPrice, "出售装备");
|
||||
return PoAction.Ok(true, $"出售成功,获得{equInfo.sysPrice}铜贝!");
|
||||
}
|
||||
else
|
||||
{
|
||||
return PoAction.Message("出售失败,请稍后尝试!");
|
||||
}
|
||||
}
|
||||
else //物品
|
||||
{
|
||||
var goodsInfo = await _goodsService.GetUserGoodsInfo(parms.id);
|
||||
if (goodsInfo == null)
|
||||
{
|
||||
return PoAction.Message("物品不存在!");
|
||||
}
|
||||
|
||||
if (goodsInfo.userId != userId)
|
||||
{
|
||||
return PoAction.Message("物品不存在!");
|
||||
}
|
||||
|
||||
if (goodsInfo.count < parms.count)
|
||||
{
|
||||
return PoAction.Message("物品不足!");
|
||||
}
|
||||
|
||||
if (await _goodsService.UpdateUserGoods(userId, 0, (int)goodsInfo.goodsId, parms.count, "出售物品"))
|
||||
{
|
||||
long copper = (int)goodsInfo.sysPrice * parms.count;
|
||||
await _accService.UpdateUserCopper(userId, 1, copper, "出售装备");
|
||||
return PoAction.Ok(true, $"出售成功,获得{copper}铜贝!");
|
||||
}
|
||||
else
|
||||
{
|
||||
return PoAction.Message("出售失败,请稍后尝试!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user