Files
Kg.SeaTime/Service/Application.Web/Controllers/Chat/ChatController.cs
Putoo f8d4a28d53 121
2026-05-30 17:32:27 +08:00

217 lines
6.6 KiB
C#

using Microsoft.AspNetCore.Mvc;
namespace Application.Web.Controllers.Chat;
/// <summary>
/// 公聊接口
/// </summary>
[Route("Chat/[controller]/[action]")]
[ApiController]
[Authorize]
public class ChatController : ControllerBase
{
private readonly IGameChatService _chatService;
private readonly IGameGoodsService _goodsService;
private readonly IUnitUserService _userService;
public ChatController(IGameChatService chatService, IGameGoodsService goodsService, IUnitUserService userService)
{
_chatService = chatService;
_goodsService = goodsService;
_userService = userService;
}
/// <summary>
/// 获取公聊信息
/// </summary>
/// <param name="type"></param>
/// <param name="page"></param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> GetChatData(int type, int page)
{
string userId = StateHelper.userId;
int areaId = StateHelper.areaId;
string teamId = "";
string groupId = "";
RefAsync<int> Total = 0;
var data = await _chatService.GetChatData(userId, type, areaId, teamId, groupId, page, 10, Total);
//物品数量
int sendGoodsCount = 0;
string sendGoodsName = "";
switch (type)
{
case 0:
sendGoodsCount = await _goodsService.GetUserGoodsCount(userId, GameConfig.SendChatGoodsBase);
sendGoodsName = "小海螺";
break;
case 3:
sendGoodsCount = await _goodsService.GetUserGoodsCount(userId, GameConfig.SendChatGoodsArea);
sendGoodsName = "大海螺";
break;
case 4:
sendGoodsCount = await _goodsService.GetUserGoodsCount(userId, GameConfig.SendChatGoodsService);
sendGoodsName = "金海螺";
break;
}
int chatRole = await _userService.GetUserConfigInfo(userId, nameof(UserEnum.ConfigCode.ChatRole)); //获取聊天权限
return PoAction.Ok(new { data, total = Total.Value, sendGoodsCount, sendGoodsName, chatRole });
}
/// <summary>
/// 发言
/// </summary>
/// <param name="pars"></param>
/// <returns></returns>
[HttpPost]
public async Task<IPoAction> SendChat([FromBody] SendChatParms pars)
{
if (string.IsNullOrEmpty(pars.sign))
{
return PoAction.Message("发言内容不能为空!");
}
string userId = StateHelper.userId;
int areaId = StateHelper.areaId;
string par = string.Empty;
string code = nameof(GameChatEnum.Code.Public);
int goodsId = 0;
bool isSend = false;
switch (pars.type)
{
case 0:
isSend = true;
code = nameof(GameChatEnum.Code.Public);
goodsId = GameConfig.SendChatGoodsBase;
break;
case 1:
isSend = true;
code = nameof(GameChatEnum.Code.Team);
par = "";
break;
case 2:
isSend = true;
code = nameof(GameChatEnum.Code.Group);
par = "";
break;
case 3:
isSend = true;
goodsId = GameConfig.SendChatGoodsArea;
code = nameof(GameChatEnum.Code.Region);
break;
case 4:
isSend = true;
goodsId = GameConfig.SendChatGoodsService;
code = nameof(GameChatEnum.Code.Dress);
break;
}
if (isSend == false)
{
return PoAction.Message("无法发言!");
}
int chatRole = await _userService.GetUserConfigInfo(userId, nameof(UserEnum.ConfigCode.ChatRole));
if (chatRole < 0)
{
return PoAction.Message("发言权限已被系统限制!");
}
bool upGoods = true;
if (goodsId != 0)
{
bool checkGoods = true;
if ((nameof(GameChatEnum.Code.Region) == code || nameof(GameChatEnum.Code.Public) == code) && chatRole > 0)
{
checkGoods = false;
upGoods = false;
}
else if (nameof(GameChatEnum.Code.Dress) == code && chatRole > 1)
{
checkGoods = false;
upGoods = false;
}
if (checkGoods)
{
var myCount = await _goodsService.GetUserGoodsCount(userId, goodsId);
if (myCount < 1)
{
return PoAction.Message("暂无发言道具,去商城购买海螺才可以发言哦!");
}
}
}
string sign = StringAssist.NoHTML(pars.sign);
bool result = await _chatService.SendChat(userId, areaId, code, sign, par);
if (result)
{
if (goodsId != 0 && upGoods) //扣除道具
{
await _goodsService.UpdateUserGoods(userId, 0, goodsId, 1, "发言");
}
return PoAction.Ok(true);
}
else
{
return PoAction.Message("发送失败,请稍后尝试!");
}
}
/// <summary>
/// 删除聊天记录
/// </summary>
/// <param name="chatId"></param>
/// <returns></returns>
[HttpGet]
public async Task<IPoAction> DeleteChat(string chatId)
{
var chatInfo = await _chatService.GetChatInfo(chatId);
if (chatInfo == null)
{
return PoAction.Message("发言不存在!");
}
if (chatInfo.state != 1)
{
return PoAction.Message("发言不存在!");
}
if (chatInfo.areaId != StateHelper.areaId)
{
return PoAction.Message("发言不存在!");
}
bool IsOp = false;
string userId = StateHelper.userId;
int chatRole = await _userService.GetUserConfigInfo(userId, nameof(UserEnum.ConfigCode.ChatRole));
if ((chatInfo.code == nameof(GameChatEnum.Code.Public) || chatInfo.code == nameof(GameChatEnum.Code.Region)) &&
chatRole > 0)
{
IsOp = true;
}
else if (chatRole > 1 && chatInfo.code == nameof(GameChatEnum.Code.Dress))
{
IsOp = true;
}
if (IsOp == false)
{
return PoAction.Message("无权限!");
}
if (await _chatService.DeleteChat(chatId, userId))
{
return PoAction.Ok(true);
}
else
{
return PoAction.Message("操作失败,请稍后尝试!");
}
}
}