Ejemplo n.º 1
0
        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;
            }));
        }
Ejemplo n.º 3
0
        /// <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);
        }