Exemple #1
0
        public async Task <string> PointPay(PointPayInput input)
        {
            var orderInfo = _sellAppService.GetOrderInfo(input.OrderId);

            if (orderInfo == null)
            {
                throw new LotteryDataException("下单失败,请稍后重试");
            }
            if (!orderInfo.OrderCost.Equals(input.Price))
            {
                throw new LotteryDataException("订单金额错误,请核对订单信息");
            }
            var userInfo = await _userInfoService.GetUserInfoById(_lotterySession.UserId);

            if (userInfo.Points < input.Price)
            {
                throw new LotteryDataException("积分余额不足,您可以通过分享App、签到等多种途径获取积分");
            }

            string lotteryId;

            if (!_sellAppService.PointPay(input, out lotteryId))
            {
                throw new HttpException("兑换失败,请稍后重试");
            }
            await AllotDefaultPlanNorm(userInfo.Id, lotteryId);

            var notes = $"{DateTime.Now.ToString("yyyy-MM-dd")}日,积分兑换授权";

            await SendCommandAsync(new AddPointRecordCommand(Guid.NewGuid().ToString(), -input.Price,
                                                             PointType.SignAdditional, PointOperationType.Increase, notes, _lotterySession.UserId));

            return("兑换成功");
        }
Exemple #2
0
 public bool PointPay(PointPayInput input, out string lotteryId)
 {
     try
     {
         lotteryId = _sellCallBackService.PointPay(input, _lotterySession.UserId);
         return(true);
     }
     catch (Exception e)
     {
         _logger.Error(e.Message);
         lotteryId = "";
         return(false);
     }
 }
Exemple #3
0
        public string PointPay(PointPayInput input, string userId)
        {
            using (var conn = GetLotteryConnection())
            {
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    var orderDto = conn.QueryList <OrderInfoInfo>(new { SalesOrderNo = input.OrderId },
                                                                  TableNameConstants.OrderdRecordTable, transaction: transaction).First();
                    var authRank = conn
                                   .QueryList <AuthRankDto>(new { Id = orderDto.AuthRankId }, TableNameConstants.AuthRankTable, transaction: transaction)
                                   .First();

                    var authinfoLast = conn.QueryList <AuthOrderInfo>(new
                    {
                        AuthUserId = userId,
                        LotteryId  = orderDto.LotteryId,
                        Status     = AuthStatus.Normal
                    }, TableNameConstants.AuthorizeRecordTable, transaction: transaction).OrderByDescending(p => p.CreateTime).FirstOrDefault();

                    var memberInfo = conn
                                     .QueryList <MemberInfoDto>(new
                    {
                        UserId    = userId,
                        LotteryId = orderDto.LotteryId,
                    }, TableNameConstants.MemberTable, transaction: transaction)
                                     .FirstOrDefault();

                    orderDto.PayCost         = input.Price;
                    orderDto.Status          = PayStatus.Payed;
                    orderDto.Payer           = userId;
                    orderDto.ThirdPayOrderNo = "";
                    orderDto.PayOrderNo      = OrderHelper.GenerateOrderNo(OrderType.Pay, SellType.Rmb);
                    orderDto.PayType         = PayType.PaysApi;
                    orderDto.PayTime         = DateTime.Now;

                    conn.Update(orderDto, new { orderDto.Id }, TableNameConstants.OrderdRecordTable,
                                transaction: transaction);

                    var authinfo = new AuthOrderInfo()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        AuthRankId  = orderDto.AuthRankId,
                        AuthUserId  = userId,
                        AuthOrderNo = OrderHelper.GenerateOrderNo(OrderType.Order, SellType.Rmb),
                        //  InvalidDate = DateTime.Now.AddMonths(orderDto.Count),
                        AuthTime     = DateTime.Now,
                        AuthType     = SellType.Point,
                        CreateBy     = userId,
                        CreateTime   = DateTime.Now,
                        Notes        = authRank.MemberRank.GetChineseDescribe(),
                        Status       = AuthStatus.Normal,
                        SaleRecordId = orderDto.Id,
                        LotteryId    = orderDto.LotteryId
                    };

                    if (authinfoLast == null)
                    {
                        authinfo.InvalidDate = DateTime.Now.AddMonths(orderDto.Count);
                    }
                    else
                    {
                        authinfo.InvalidDate = authinfoLast.InvalidDate.AddMonths(orderDto.Count);

                        authinfoLast.UpdateBy   = userId;
                        authinfoLast.UpdateTime = DateTime.Now;
                        authinfoLast.Status     = AuthStatus.Invalid;
                        conn.Update(authinfoLast, new { Id = authinfoLast.Id }, TableNameConstants.AuthorizeRecordTable, transaction);
                    }
                    conn.Insert(authinfo, TableNameConstants.AuthorizeRecordTable, transaction);

                    if (memberInfo == null)
                    {
                        memberInfo = new MemberInfoDto()
                        {
                            Id              = Guid.NewGuid().ToString(),
                            InvalidDate     = authinfo.InvalidDate,
                            LastAuthOrderId = authinfo.Id,
                            LotteryId       = orderDto.LotteryId,
                            MemberRank      = (int)authRank.MemberRank,
                            Status          = MemberStatus.Normal,
                            UserId          = userId,
                            CreateBy        = userId,
                            CreateTime      = DateTime.Now
                        };
                        conn.Insert(memberInfo, TableNameConstants.MemberTable, transaction);
                    }
                    else
                    {
                        memberInfo.MemberRank  = (int)authRank.MemberRank;
                        memberInfo.InvalidDate = authinfo.InvalidDate;
                        memberInfo.UpdateBy    = userId;
                        memberInfo.UpdateTime  = DateTime.Now;
                        conn.Update(memberInfo, new { Id = memberInfo.Id }, TableNameConstants.MemberTable, transaction);
                    }



                    #region 指标配置

                    //var userNormConigs = conn.QueryList<NormConfigDto>(new { UserId = userInfo.Id, IsEnable = 1 }, TableNameConstants.NormConfigTable, transaction: transaction);

                    //if (!userNormConigs.Safe().Any())
                    //{
                    //    var normConfigs = conn.QueryList<NormConfigDto>(new { LotteryId = orderDto.LotteryId, IsDefualt = 1, IsEnable = 1 }, TableNameConstants.NormConfigTable, transaction: transaction);

                    //    foreach (var normConfig in normConfigs)
                    //    {
                    //        normConfig.UserId = userInfo.Id;
                    //        normConfig.Id = Guid.NewGuid().ToString();
                    //        conn.Insert(normConfig, TableNameConstants.NormConfigTable, transaction);
                    //    }
                    //}

                    #endregion 指标配置

                    #region 清除相关缓存

                    var redisKey1 = string.Format(RedisKeyConstants.MEMBERRANK_MEMBERPOWER_KEY, orderDto.LotteryId,
                                                  authRank.MemberRank);
                    var redisKey2 = string.Format(RedisKeyConstants.MEMBERRANK_ROLE_KEY, orderDto.LotteryId,
                                                  authRank.MemberRank);
                    var redisKey3 = string.Format(RedisKeyConstants.USERINFO_KEY, userId);
                    var redisKey4 = string.Format(RedisKeyConstants.OPERATION_MEMBERINFO_KEY, orderDto.LotteryId);
                    _cacheManager.RemoveByPattern(redisKey1);
                    _cacheManager.RemoveByPattern(redisKey2);
                    _cacheManager.RemoveByPattern(redisKey3);
                    _cacheManager.RemoveByPattern(redisKey4);
                    transaction.Commit();

                    return(orderDto.LotteryId);

                    #endregion 清除相关缓存
                }
            }
        }