using Microsoft.AspNetCore.Mvc; namespace Application.Web.Controllers.User; [ApiExplorerSettings(GroupName = "User")] [Route("User/[controller]/[action]")] [ApiController] [Authorize] public class UserController : ControllerBase { private readonly IUnitUserService _userService; private readonly IUnitUserAttrService _attrService; private readonly IUnitUserAccService _accService; private readonly IGameMapService _mapService; private readonly IUnitUserRelationService _relationService; private readonly IGameGoodsService _goodsService; private readonly IGameChatService _chatService; public UserController(IUnitUserService userService, IUnitUserAttrService attrService, IUnitUserAccService accService, IGameMapService mapService, IUnitUserRelationService relationService, IGameGoodsService goodsService, IGameChatService chatService) { _userService = userService; _attrService = attrService; _accService = accService; _mapService = mapService; _relationService = relationService; _goodsService = goodsService; _chatService = chatService; } /// /// 获取个人资料信息 /// /// [HttpGet] public async Task GetUserInfo() { string userId = StateHelper.userId; var userInfo = await _userService.GetUserInfoByUserId(userId); //基础资料 object user = new { userInfo.userNo, userInfo.nick, userInfo.sex, userInfo.sign }; var attrInfo = await _attrService.GetUserAttrModel(userId); //基础属性 var expInfo = await _attrService.GetUserExp(userId); object exp = new { expInfo.exp, expInfo.upExp }; var vigourInfo = await _attrService.GetUserVigourInfo(userId); var accInfo = await _accService.GetUserAccInfo(userId); object acc = new { accInfo.gold, accInfo.cowry, accInfo.teach, accInfo.renown }; object result = new { user, attr = attrInfo, exp, vigourInfo.vitality, acc }; return PoAction.Ok(result); } /// /// 获取基础资料信息 /// /// /// [HttpGet] public async Task GetUserBaseInfo(string? no) { string userId = StateHelper.userId; if (!string.IsNullOrEmpty(no)) { var userInfo = await _userService.GetUserInfoByUserNo(no); //基础资料 if (userInfo == null) { return PoAction.Message("玩家不存在!", 102); } if (userInfo.userId == userId) { return PoAction.Message("用户本身!", 101); } if (userInfo.areaId != StateHelper.areaId) { return PoAction.Message("玩家不存在!", 102); } userId = userInfo.userId; } var model = await UserModelTool.GetUserView(userId); return PoAction.Ok(model); } /// /// 获取用户资料 /// /// /// [HttpGet] public async Task GetHomeInfo(string? no) { string userId = StateHelper.userId; var userInfo = await _userService.GetUserInfoByUserNo(no); //基础资料 if (userInfo == null) { return PoAction.Message("玩家不存在!", 102); } if (userInfo.userId == userId) { return PoAction.Message("用户本身!", 101); } if (userInfo.areaId != StateHelper.areaId) { return PoAction.Message("玩家不存在!", 102); } object user = new { userInfo.userNo, userInfo.nick, userInfo.sex, userInfo.sign }; var attrInfo = await _attrService.GetUserAttrModel(userInfo.userId); //基础属性 var accInfo = await _accService.GetUserAccInfo(userInfo.userId); object acc = new { accInfo.teach }; var online = await _mapService.GetUserOnMap(userInfo.userId); int isOnline = online.upTime > TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddMinutes(0 - GameConfig.OnLineTime)) ? 1 : 0; var onMapInfo = await _mapService.GetMapInfo(online.mapId); var onCity = await _mapService.GetCityInfo((int)onMapInfo.cityId); string onMapName = $"{onCity.cityName}-{onMapInfo.mapName}"; bool isFriend = await _relationService.CheckIsFriend(userId, userInfo.userId); bool isEnemy = await _relationService.CheckUserEnemy(userId, userInfo.userId); object result = new { user, attr = new { attrInfo.lev }, acc, isOnline, onMapName, isFriend, isEnemy }; return PoAction.Ok(result); } /// /// 更新昵称 /// /// /// [HttpPost] public async Task UpdateUserNick([FromBody] UpdateNickParms parms) { parms.nick = StringAssist.NoHTML(parms.nick); if (string.IsNullOrEmpty(parms.nick)) { return PoAction.Message("昵称不能为空!"); } string userId = StateHelper.userId; var userInfo = await _userService.GetUserInfoByUserId(userId); if (userInfo.nick == parms.nick) { return PoAction.Message("昵称无变化,无需修改!"); } if (await _userService.CheckUserNickIsAt(parms.nick)) { return PoAction.Message("昵称已存在!"); } var myGoods = await _goodsService.GetUserGoodsCount(userId, GameConfig.GameUpdateNickNeedGoods); if (myGoods < 1) { return PoAction.Message("暂无改名道具!"); } if (await _goodsService.UpdateUserGoods(userId, 0, GameConfig.GameUpdateNickNeedGoods, 1, "改名使用")) { if (await _userService.UpdateUserNick(userId, parms.nick)) { string sign = $"玩家注意:【{UbbTool.HomeUbb(userInfo.userNo, userInfo.nick)}】已将昵称修改为【{parms.nick}】"; await _chatService.SendChat("0", StateHelper.areaId, nameof(GameChatEnum.Code.Region), sign); return PoAction.Ok(true); } else { return PoAction.Message("操作失败,请稍后尝试!"); } } else { return PoAction.Message("操作失败,请稍后尝试!"); } } /// /// 变更性别 /// /// /// [HttpPost] public async Task UpdateUserSex([FromBody] UpdateSexParms parms) { parms.sex = parms.sex == "男" ? "男" : "女"; string userId = StateHelper.userId; var userInfo = await _userService.GetUserInfoByUserId(userId); if (userInfo.sex == parms.sex) { return PoAction.Message("已是当前性别,无需修改!"); } var myGoods = await _goodsService.GetUserGoodsCount(userId, GameConfig.GameUpdateSexNeedGoods); if (myGoods < 1) { return PoAction.Message("暂无性别变更道具!"); } if (await _goodsService.UpdateUserGoods(userId, 0, GameConfig.GameUpdateSexNeedGoods, 1, "变更性别使用")) { if (await _userService.UpdateUserSex(userId, parms.sex)) { return PoAction.Ok(true); } else { return PoAction.Message("操作失败,请稍后尝试!"); } } else { return PoAction.Message("操作失败,请稍后尝试!"); } } /// /// 更新签名 /// /// /// [HttpPost] public async Task UpdateUserSign([FromBody] UpdateSignParms parms) { if (parms.sign.Length > 80) { return PoAction.Message("签名不能超过80个字符!"); } parms.sign = StringAssist.NoHTML(parms.sign); string userId = StateHelper.userId; if (await _userService.UpdateUserSign(userId, parms.sign)) { return PoAction.Ok(true); } else { return PoAction.Message("操作失败,请稍后尝试!"); } } }