Esempio n. 1
0
        public void Payin_To_Balance(AccountType accountType, string category, string userId, string orderId, decimal payMoney, string summary, RedBagCategory redBag = RedBagCategory.FillMoney, string operatorId = "")
        {
            //if (accountType == AccountType.Freeze)
            //    throw new Exception("退款账户不能为冻结账户");

            if (payMoney <= 0M)
            {
                return;
            }
            //throw new Exception("转入金额不能小于0.");

            var balanceManager = new LocalLoginBusiness();
            var fundManager    = new FundManager();
            //查询帐户余额

            var userBalance = balanceManager.QueryUserBalanceInfo(userId);

            if (userBalance == null)
            {
                throw new Exception("用户帐户不存在 - " + userId);
            }

            var payDetailList = new List <PayDetail>();

            payDetailList.Add(new PayDetail
            {
                AccountType = accountType,
                PayMoney    = payMoney,
                PayType     = PayType.Payin,
            });
            var before = 0M;
            var after  = 0M;

            switch (accountType)
            {
            case AccountType.Bonus:
                before = userBalance.BonusBalance;
                after  = userBalance.BonusBalance + payMoney;
                //userBalance.BonusBalance = after;
                break;

            case AccountType.Commission:
                before = userBalance.CommissionBalance;
                after  = userBalance.CommissionBalance + payMoney;
                //userBalance.CommissionBalance = after;
                break;

            case AccountType.FillMoney:
                before = userBalance.FillMoneyBalance;
                after  = userBalance.FillMoneyBalance + payMoney;
                //userBalance.FillMoneyBalance = after;
                break;

            case AccountType.Experts:
                before = userBalance.ExpertsBalance;
                after  = userBalance.ExpertsBalance + payMoney;
                //userBalance.ExpertsBalance = after;
                break;

            case AccountType.RedBag:
                before = userBalance.RedBagBalance;
                after  = userBalance.RedBagBalance + payMoney;
                //userBalance.RedBagBalance = after;
                var RedBagDetail = new C_Fund_RedBagDetail
                {
                    CreateTime     = DateTime.Now,
                    OrderId        = orderId,
                    RedBagCategory = (int)redBag,
                    RedBagMoney    = payMoney,
                    UserId         = userId,
                };
                fundManager.AddRedBagDetail(RedBagDetail);
                break;

            case AccountType.Freeze:
                before = userBalance.FreezeBalance;
                after  = userBalance.FreezeBalance + payMoney;
                //userBalance.FreezeBalance = after;
                break;

            case AccountType.CPS:
                before = userBalance.CPSBalance;
                after  = userBalance.CPSBalance + payMoney;
                //userBalance.CPSBalance = after;
                break;

            default:
                throw new ArgumentException("不支持的账户类型 - " + accountType);
            }
            var FundDetail = new C_Fund_Detail
            {
                Category      = category,
                CreateTime    = DateTime.Now,
                KeyLine       = orderId,
                OrderId       = orderId,
                AccountType   = (int)accountType,
                PayMoney      = payMoney,
                PayType       = (int)PayType.Payin,
                Summary       = summary,
                UserId        = userId,
                BeforeBalance = before,
                AfterBalance  = after,
                OperatorId    = string.IsNullOrEmpty(operatorId) ? userId : operatorId,
            };

            fundManager.AddFundDetail(FundDetail);
            //balanceManager.UpdateUserBalance(userBalance);
            PayToUserBalance(userId, payDetailList.ToArray());
        }
Esempio n. 2
0
        /// <summary>
        /// 收入 --添加用户成长值
        /// 返回用户vip等级
        /// </summary>
        public int Payin_UserGrowth(string category, string orderId, string userId, int userGrowth, string summary)
        {
            if (userGrowth <= 0)
            {
                return(0);
            }

            var balanceManager = new LocalLoginBusiness();
            //var fundManager = new FundManager();
            var user                  = balanceManager.GetRegisterById(userId);
            var userBalance           = balanceManager.QueryUserBalanceInfo(userId);
            var Fund_UserGrowthDetail = new C_Fund_UserGrowthDetail()
            {
                OrderId       = orderId,
                UserId        = userId,
                Category      = category,
                CreateTime    = DateTime.Now,
                BeforeBalance = userBalance.UserGrowth,
                PayMoney      = userGrowth,
                PayType       = (int)PayType.Payin,
                Summary       = summary,
                AfterBalance  = userBalance.UserGrowth + userGrowth,
            };

            DB.GetDal <C_Fund_UserGrowthDetail>().Add(Fund_UserGrowthDetail);

            var payDetailList = new List <PayDetail>();

            payDetailList.Add(new PayDetail
            {
                AccountType = AccountType.UserGrowth,
                PayMoney    = userGrowth,
                PayType     = PayType.Payin,
            });

            var vipLevel = GetUserVipLevel(userBalance.UserGrowth + userGrowth);

            //更新成长值
            //userBalance.UserGrowth += userGrowth;
            //balanceManager.UpdateUserBalance(userBalance);
            PayToUserBalance(userId, payDetailList.ToArray());
            if (user.VipLevel < vipLevel)
            {
                for (int i = user.VipLevel + 1; i <= vipLevel; i++)
                {
                    //达到相应等级赠送红包
                    if (new int[] { 3, 4, 5, 6 }.Contains(i))
                    {
                        var redBag = 0M;
                        switch (i)
                        {
                        case 3:
                            redBag = 2M;
                            break;

                        case 4:
                            redBag = 10M;
                            break;

                        case 5:
                            redBag = 20M;
                            break;

                        case 6:
                            redBag = 88M;
                            break;

                        default:
                            break;
                        }
                        if (redBag > 0M)
                        {
                            Payin_To_Balance(AccountType.RedBag, FundCategory_UserLevelUp, userId, orderId, redBag, string.Format("用户等级提升到{0}级", i), RedBagCategory.UserUpLevel);
                        }
                    }
                }
                //修改vip等级
                user.VipLevel = vipLevel;
                DB.GetDal <C_User_Register>().Update(user);
            }

            return(user.VipLevel);
        }