/// <summary> /// 添加赛季 /// </summary> /// <returns></returns> public async Task <ResponseMessage> CreatePeriod(UserInfo userInfo, CreatePeriodRequest createPeriodRequest) { var response = new ResponseMessage(); var scorePeriod = new Period(); scorePeriod.Id = Guid.NewGuid().ToString(); scorePeriod.IsDelete = false; scorePeriod.Memo = createPeriodRequest.Memo; scorePeriod.StartDate = createPeriodRequest.StartDate; scorePeriod.Caption = createPeriodRequest.Caption; scorePeriod.CreateTime = DateTime.Now; scorePeriod.CreateUser = userInfo.Id; scorePeriod.UpdateTime = DateTime.Now; scorePeriod.UpdateUser = userInfo.Id; scorePeriod.State = 0; scorePeriod.EndDate = createPeriodRequest.EndDate; scorePeriod.PlayingUrl = createPeriodRequest.PlayingUrl; scorePeriod.SystemUrl = createPeriodRequest.SystemUrl; //复制一份上一个赛季的称号信息 //先查询有没有进行中的赛季 var periods = await _rankTitleStore.GetScorePeriods().Where(w => !w.IsDelete && w.State == 1).FirstOrDefaultAsync(); var rankInfoList = new List <RankTitle>(); if (periods == null) { //在查询上一个赛季 periods = await _rankTitleStore.GetScorePeriods().Where(w => !w.IsDelete).OrderByDescending(o => o.EndDate).FirstOrDefaultAsync(); } if (periods != null) { rankInfoList = await _rankTitleStore.GetScoreTitles().Where(w => !w.IsDelete && w.PeriodId == periods.Id).ToListAsync(); rankInfoList.ForEach(fo => { fo.Id = Guid.NewGuid().ToString(); fo.PeriodId = scorePeriod.Id; fo.UpdateTime = DateTime.Now; fo.UpdateUser = userInfo.Id; fo.CreateTime = DateTime.Now; fo.CreateUser = userInfo.Id; }); } //事务保存 using (var trans = await _transaction.BeginTransaction()) { try { if (rankInfoList.Any()) { await _rankTitleStore.AddTitleListAsync(rankInfoList); } await _scorePeriodStore.CreatePeriodAsync(scorePeriod); trans.Commit(); } catch (Exception e) { trans.Rollback(); throw new Exception("保存事务失败", e); } } // 触发赛季 await _sendClientMessageManager.SendInfo(Dto.Common.SendClientType.Season); return(response); }
/// <summary> /// 新增/修改用户 /// </summary> /// <param name="user"></param> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task <ResponseMessage> Save(UserInfo user, UserSaveRequest request, CancellationToken cancellationToken = default(CancellationToken)) { var response = new ResponseMessage(); if (!user.IsAdmin) { response.Code = ResponseCodeDefines.NotAllow; response.Message = "权限不足"; return(response); } if (string.IsNullOrWhiteSpace(request.Id)) { if (request.LoginName == null) { response.Code = ResponseCodeDefines.ArgumentNullError; response.Message = "登陆名不能为空"; return(response); } if (await _userStore.GetUserInfos().AnyAsync(a => a.LoginName.Equals(request.LoginName), cancellationToken)) { response.Code = ResponseCodeDefines.ObjectAlreadyExists; response.Message = "新增用户的登陆名已经存在"; return(response); } // 新增 var addUser = new UserInfo { Id = Guid.NewGuid().ToString(), LoginName = request.LoginName, UserName = request.UserName, OrganizationName = request.OrganizationName, GroupName = request.GroupName, IsAdmin = request.IsAdmin, CreateUser = user.Id, CreateTime = DateTime.Now, IsDelete = false, ZenTao = request.ZenTao, }; ScoreInfo scoreInfo = null; var scorePeriod = await _scoreInfoStore.GetScorePeriods().Where(w => !w.IsDelete && w.State == 1).FirstOrDefaultAsync(); if (scorePeriod != null) { var scoreInfoOld = await _scoreInfoStore.GetScoreInfos().Where(w => w.PeriodId == scorePeriod.Id && !w.IsDelete && w.UserId == addUser.Id).FirstOrDefaultAsync(); if (scoreInfoOld == null) { var nowTime = DateTime.Now; scoreInfo = new ScoreInfo { Id = Guid.NewGuid().ToString(), UserId = addUser.Id, CreateUser = addUser.Id, CreateTime = nowTime, IsDelete = false, Score = 0, ConsumableScore = 0, PeriodId = scorePeriod.Id, UpdateTime = nowTime, UpdateUser = addUser.Id }; } } using (var trans = await _transaction.BeginTransaction()) { try { if (scoreInfo != null) { await _scoreInfoStore.CreateScoreInfo(scoreInfo); } await _userStore.Create(new List <UserInfo> { addUser }, cancellationToken); trans.Commit(); } catch (Exception) { trans.Rollback(); throw; } } // 触发排行榜变化 await _sendClientMessageManager.SendInfo(Dto.Common.SendClientType.Rank); } else { // 修改 var entity = await _userStore.GetUserInfos().Where(a => a.Id.Equals(request.Id)).FirstOrDefaultAsync(cancellationToken); if (!string.IsNullOrWhiteSpace(request.LoginName)) { if (entity.UserId != null && request.LoginName != entity.LoginName) { response.Code = ResponseCodeDefines.NotAllow; response.Message = "已经登陆的用户不允许修改登陆名"; return(response); } if (await _userStore.GetUserInfos().AnyAsync(a => a.LoginName.Equals(request.LoginName) && a.Id != request.Id, cancellationToken)) { response.Code = ResponseCodeDefines.ObjectAlreadyExists; response.Message = "用户的登陆名与其他用户名重复"; return(response); } } if (entity.IsAdmin == true && request.IsAdmin == false) { var adminList = await _userStore.GetUserInfos().Where(w => !w.IsDelete && w.IsAdmin).ToListAsync(); if (adminList.Count == 1 && adminList[0].Id == entity.Id) { response.Code = ResponseCodeDefines.ObjectAlreadyExists; response.Message = "您已经是最后一个管理员了,不能取消自己的管理员权限。"; return(response); } } entity.LoginName = string.IsNullOrWhiteSpace(request.LoginName) ? entity.LoginName : request.LoginName; entity.UserName = request.UserName ?? entity.UserName; entity.OrganizationName = request.OrganizationName ?? entity.OrganizationName; entity.GroupName = request.GroupName ?? entity.GroupName; entity.IsAdmin = request.IsAdmin; entity.ZenTao = request.ZenTao; await _userStore.Update(new List <UserInfo> { entity }, cancellationToken); } return(response); }