public async Task <ResponseMessage> CratePeriod(Models.UserInfo user, [FromBody] CreatePeriodRequest createPeriodRequest) { Logger.Trace($"用户{user?.UserName ?? ""}({user?.Id ?? ""})添加赛季,请求参数为:\r\n" + (createPeriodRequest != null ? JsonHelper.ToJson(createPeriodRequest) : "")); var response = new ResponseMessage(); if (!ModelState.IsValid) { response.Code = ResponseCodeDefines.ArgumentNullError; response.Message = "模型验证失败" + ModelState.GetAllErrors(); Logger.Warn("添加赛季验证失败:\r\n{0}", response.Message ?? ""); return(response); } if (user.IsAdmin == false) { response.Code = ResponseCodeDefines.NotAllow; response.Message = "没有权限"; Logger.Trace("没有权限:\r\n{0}", response.Message ?? ""); } var prefixs = new string[] { "ScorePeriodController" }; var key = $"{user.Id}{createPeriodRequest.Caption}{createPeriodRequest.EndDate.Date}"; try { // 防止重复提交 await _cache.LockSubmit(prefixs, key, "CratePeriod", HttpContext.RequestAborted); response = await _scorePeriodManager.CreatePeriod(user, createPeriodRequest); } catch (Exception e) { response.Code = ResponseCodeDefines.ServiceError; response.Message = e.Message; Logger.Error($"用户{user?.UserName ?? ""}({user?.Id ?? ""})添加赛季,报错:{e.Message}\r\n{e.StackTrace}"); } finally { // 成功失败都要移除 await _cache.UnlockSubmit(prefixs, key); } return(response); }
public async Task <CreatePeriodResponse> CreatePeriodAsync(CreatePeriodRequest request) { return(await Task.Run(() => { var response = new CreatePeriodResponse(); try { var newPeriod = Period.StartPeriod(request.Start, request.End); unitOfWork.PeriodRepository.Create(newPeriod); unitOfWork.Commit(); } catch (Exception ex) { response.Exception = ex; } return response; })); }
/// <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); }