public async Task <ResponseMessage> UpdateTitle(Models.UserInfo user, [FromBody] TitleUpdateRequest titleUpdateRequest) { Logger.Trace($"用户{user?.UserName ?? ""}({user?.Id ?? ""})修改称号,请求参数为:\r\n" + (titleUpdateRequest != null ? JsonHelper.ToJson(titleUpdateRequest) : "")); var response = new ResponseMessage(); if (!ModelState.IsValid) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = ModelState.GetAllErrors(); Logger.Warn("修改称号模型验证失败:\r\n{0}", response.Message ?? ""); return(response); } try { response = await _titleManager.UpdateTitleAsync(user, titleUpdateRequest, HttpContext.RequestAborted); } catch (Exception e) { response.Code = ResponseCodeDefines.ServiceError; response.Message = e.Message; Logger.Error($"用户{user?.UserName ?? ""}({user?.Id ?? ""})修改称号,报错:{e.Message}\r\n{e.StackTrace}"); } return(response); }
/// <summary> /// 修改称号 /// </summary> /// <param name="user"></param> /// <param name="titleUpdateRequest"></param> /// <param name="requestAborted"></param> /// <returns></returns> public async Task <ResponseMessage> UpdateTitleAsync(UserInfo user, TitleUpdateRequest titleUpdateRequest, CancellationToken requestAborted) { var response = new ResponseMessage(); if (!user.IsAdmin) { response.Code = ResponseCodeDefines.NotAllow; response.Message = "权限不足"; return(response); } //验证开始值和结束值的连续性 var temp = titleUpdateRequest.titleUpdateListRequests.OrderBy(o => o.StartScore).ToList(); int?endScore = null; foreach (var title in temp) { if (endScore != null) { if (endScore + 1 != title.StartScore) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = "开始值和结束值必须保持连续"; return(response); } } if (title.StartScore >= title.EndScore) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = "开始值和结束值必须保持连续"; return(response); } endScore = title.EndScore; } var periodInfo = await _iTitleStore.GetScorePeriods().Where(w => !w.IsDelete && w.Id == titleUpdateRequest.PeriodId).FirstOrDefaultAsync(); if (periodInfo == null || periodInfo.State != 1) { response.Code = ResponseCodeDefines.ModelStateInvalid; response.Message = "只有进行中的赛季才能操作"; return(response); } var titles = await _iTitleStore.GetScoreTitles().Where(w => w.PeriodId == titleUpdateRequest.PeriodId && !w.IsDelete).ToListAsync(); if (titles == null || titles.Count == 0 || titles.Count != titleUpdateRequest.titleUpdateListRequests.Count) { response.Code = ResponseCodeDefines.NotFound; response.Message = "未找到称号数据"; return(response); } foreach (var title in titles) { if (titleUpdateRequest.titleUpdateListRequests.FirstOrDefault(fi => fi.Id == title.Id) == null) { response.Code = ResponseCodeDefines.NotFound; response.Message = "需要保存的称号数据与赛季ID不对应"; return(response); } } //更新值 var titleListRequests = titleUpdateRequest.titleUpdateListRequests; titles.ForEach(f => { f.Title = titleListRequests.FirstOrDefault(fi => fi.Id == f.Id).Title; f.StartScore = titleListRequests.FirstOrDefault(fi => fi.Id == f.Id).StartScore; f.EndScore = titleListRequests.FirstOrDefault(fi => fi.Id == f.Id).EndScore; f.Icon = titleListRequests.FirstOrDefault(fi => fi.Id == f.Id)?.Icon?.Replace(_config["FileUrl"], ""); f.Card = titleListRequests.FirstOrDefault(fi => fi.Id == f.Id)?.Card?.Replace(_config["FileUrl"], ""); f.UpdateTime = DateTime.Now; f.UpdateUser = user.Id; f.FontColor = titleListRequests.FirstOrDefault(fi => fi.Id == f.Id).FontColor; }); //保存更新 await _iTitleStore.UpdateTitleListAsync(titles, requestAborted); // 触发赛季和排行榜 await _sendClientMessageHelper.SendInfos(new List <Dto.Common.SendClientType>() { Dto.Common.SendClientType.Season, Dto.Common.SendClientType.Rank }); return(response); }