Пример #1
0
        /// <summary>
        /// 撤销投注
        /// </summary>
        /// <param name="betcode"></param>
        private void CannelBettNum(string betcode)
        {
            if (string.IsNullOrEmpty(betcode))
            {
                AppGlobal.RenderResult(ApiCode.Fail);
                return;
            }
            IBetDetailService betDetailService = IoC.Resolve <IBetDetailService>();
            //验证请求参数是否正确
            var fs = betDetailService.Where(item => item.BetCode == betcode).FirstOrDefault();

            if (null == fs)
            {
                AppGlobal.RenderResult(ApiCode.Fail);
                return;
            }
            //撤单处理
            fs.Stauts = BetResultType.SysCancel;
            betDetailService.Save();

            //返还金额
            ISysUserBalanceService sysUserBalanceService = IoC.Resolve <ISysUserBalanceService>();
            var details = new SysUserBalanceDetail()
            {
                RelevanceNo = fs.BetCode,
                SerialNo    = "b" + Utils.BuilderNum(),
                Status      = 0,
                TradeAmt    = fs.TotalAmt,
                TradeType   = TradeType.撤单返款,
                UserId      = fs.UserId
            };

            sysUserBalanceService.UpdateUserBalance(details, fs.TotalAmt);
        }
Пример #2
0
        /// <summary>
        /// 终止追号
        /// </summary>
        private void CannelCatchNum(string catchNum, string catchNumIssueCode)
        {
            ISysCatchNumService      sysCatchNumService      = IoC.Resolve <ISysCatchNumService>();
            ISysCatchNumIssueService sysCatchNumIssueService = IoC.Resolve <ISysCatchNumIssueService>();
            //验证当前单号是否正在进行
            var fs = sysCatchNumService.Where(item => item.CatchNumCode == catchNum).FirstOrDefault();

            if (fs == null)
            {
                //非法撤单
                AppGlobal.RenderResult(ApiCode.Fail);
                return;
            }
            //获取注单详情
            var source = sysCatchNumIssueService.GetCatchIssue(catchNum);

            //获取用户余额
            CatchNumIssue catchNumIssue = null;
            int           noCannelCount = 0;

            foreach (var item in source)
            {
                //未开奖的状态才允许撤单
                if (catchNumIssueCode == item.CatchNumIssueCode)
                {
                    fs.UserCannelIssue++;
                    fs.UserCannelMonery += item.TotalAmt;
                    item.Stauts          = BetResultType.SysCancel; //对本注进行撤单
                    catchNumIssue        = item;
                }
                if (item.Stauts == BetResultType.NotOpen)
                {
                    noCannelCount++;
                }
            }
            //撤单
            sysCatchNumIssueService.Save();
            if (noCannelCount <= 0) //全部撤销
            {
                sysCatchNumService.CannelCatch(catchNum);
            }
            sysCatchNumService.Save();

            //返还金额
            if (catchNumIssue != null)
            {
                ISysUserBalanceService sysUserBalanceService = IoC.Resolve <ISysUserBalanceService>();
                var details = new SysUserBalanceDetail()
                {
                    RelevanceNo = catchNumIssue.CatchNumIssueCode,
                    SerialNo    = "b" + Utils.BuilderNum(),
                    Status      = 0,
                    TradeAmt    = catchNumIssue.TotalAmt,
                    TradeType   = TradeType.追号返款,
                    UserId      = fs.UserId
                };
                sysUserBalanceService.UpdateUserBalance(details, catchNumIssue.TotalAmt);
            }
        }
        /// <summary>
        /// 修改用户余额
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="amt"></param>
        public void UpdateUserBanance(int uid, decimal amt, TradeType tp, string relevanceNo, int moneryType)
        {
            //修改当前用户余额

            var item = new SysUserBalanceDetail()
            {
                OpUserId    = uid,
                SerialNo    = "d" + Ytg.Comm.Utils.BuilderNum(),
                Status      = 0,
                TradeType   = tp,
                UserId      = uid,
                RelevanceNo = relevanceNo
            };

            mSysUserBalanceService.UpdateUserBalance(item, moneryType == 0 ? amt : -amt);
        }
Пример #4
0
        /// <summary>
        /// 通过存储过程修改用户余额
        /// </summary>
        /// <param name="balanceDetails"></param>
        /// <returns></returns>
        public int UpdateUserBalance(SysUserBalanceDetail balanceDetails, decimal changeMonery)
        {
            int rowCount = 0;

            try
            {
                rowCount = PrivateUpdateUserBalance(balanceDetails, changeMonery);
                //throw new Exception();
            }
            catch (Exception ex)
            {
                //一旦发生事务错误,重新提交
                int whileCount = 0;
                while (true)
                {
                    string msg = balanceDetails.RelevanceNo + " 第" + whileCount + "次执行事务";
                    Console.WriteLine(msg);

                    try
                    {
                        rowCount = PrivateUpdateUserBalance(balanceDetails, changeMonery);
                        break;
                    }
                    catch (Exception ex1)
                    {
                        Console.WriteLine("事务提交失败,尝试重新提交 " + ex1.Message);
                    }
                    System.Threading.Thread.Sleep(1000);//一秒后重新提交
                    whileCount++;
                    if (whileCount > 10)
                    {
                        break;
                    }
                }
                Console.WriteLine(balanceDetails.RelevanceNo + "事务提交Exception " + ex.Message);
            }

            return(rowCount);
        }
Пример #5
0
        /// <summary>
        /// 通过存储过程修改用户余额信息
        /// </summary>
        /// <param name="balanceDetails"></param>
        /// <param name="changeMonery"></param>
        /// <returns></returns>
        private int PrivateUpdateUserBalance(SysUserBalanceDetail balanceDetails, decimal changeMonery)
        {
            string procName = "sp_ChangeUserBalances";

            var p = new System.Data.SqlClient.SqlParameter("@uid", System.Data.DbType.Int32);

            p.Value = balanceDetails.UserId;

            var p2 = new System.Data.SqlClient.SqlParameter("@TradeType", System.Data.DbType.Int32);

            p2.Value = balanceDetails.TradeType;

            var p3 = new System.Data.SqlClient.SqlParameter("@SerialNo", System.Data.DbType.String);

            p3.Value = balanceDetails.SerialNo;

            var p4 = new System.Data.SqlClient.SqlParameter("@relevanceNo", System.Data.DbType.String);

            p4.Value = balanceDetails.RelevanceNo;

            var p5 = new System.Data.SqlClient.SqlParameter("@BankId", System.Data.DbType.Int32);

            p5.Value = balanceDetails.BankId == null ? -1 : balanceDetails.BankId;

            var p6 = new System.Data.SqlClient.SqlParameter("@sumMonery", System.Data.DbType.Decimal);

            p6.Value = changeMonery; //变化金额


            var amt = this.ExProc <System.Int32?>(procName, p, p2, p3, p4, p5, p6);

            if (amt.FirstOrDefault() == null)
            {
                return(-1);
            }
            return(amt.FirstOrDefault().Value);
        }
        /// <summary>
        /// 投注  存储过程
        /// </summary>
        /// <param name="detail"></param>
        /// <param name="balanceDetail"></param>
        /// <returns></returns>
        public decimal?AddBetting(BetDetail detail, SysUserBalanceDetail balanceDetail, int lotteryid, ref int state)
        {
            string spName = "sp_addBetting";

            DbParameter[] pramers = new DbParameter[]
            {
                new System.Data.SqlClient.SqlParameter("@BetCode", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@IssueCode", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@BetContent", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@Model", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@Multiple", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@PalyRadioCode", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@PrizeType", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@UserId", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@TotalAmt", SqlDbType.Decimal),
                new System.Data.SqlClient.SqlParameter("@LotteryCode", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@BetCount", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@BackNum", SqlDbType.Decimal),
                new System.Data.SqlClient.SqlParameter("@BonusLevel", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@PostionName", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@HasState", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@lotteryid", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@TradeType", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@SerialNo", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@nowDate", SqlDbType.VarChar),

                new System.Data.SqlClient.SqlParameter("@IsBuyTogether", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@Subscription", SqlDbType.Decimal),
                new System.Data.SqlClient.SqlParameter("@SurplusMonery", SqlDbType.Decimal),
                new System.Data.SqlClient.SqlParameter("@Bili", SqlDbType.Float),
                new System.Data.SqlClient.SqlParameter("@Secrecy", SqlDbType.Int),


                new System.Data.SqlClient.SqlParameter("@state", SqlDbType.Int)
            };
            pramers[0].Value  = detail.BetCode;
            pramers[1].Value  = detail.IssueCode;
            pramers[2].Value  = detail.BetContent;
            pramers[3].Value  = detail.Model;
            pramers[4].Value  = detail.Multiple;
            pramers[5].Value  = detail.PalyRadioCode;
            pramers[6].Value  = detail.PrizeType;
            pramers[7].Value  = detail.UserId;
            pramers[8].Value  = detail.TotalAmt;
            pramers[9].Value  = detail.LotteryCode;
            pramers[10].Value = detail.BetCount;
            pramers[11].Value = detail.BackNum;
            pramers[12].Value = detail.BonusLevel;
            pramers[13].Value = string.IsNullOrEmpty(detail.PostionName) ? "" : detail.PostionName;
            pramers[14].Value = detail.HasState;
            pramers[15].Value = lotteryid;
            pramers[16].Value = balanceDetail.TradeType;
            pramers[17].Value = balanceDetail.SerialNo;
            pramers[18].Value = DateTime.Now;

            pramers[19].Value = detail.IsBuyTogether;
            pramers[20].Value = detail.Subscription;
            pramers[21].Value = detail.SurplusMonery;
            pramers[22].Value = detail.Bili;
            pramers[23].Value = detail.Secrecy;

            pramers[24].Direction = ParameterDirection.Output;

            this.ExProcNoReader(spName, pramers);
            object parenter = pramers[24].Value;

            if (parenter != null)
            {
                state = Convert.ToInt32(parenter);
            }
            else
            {
                state = -1;
            }

            return(0);
        }
Пример #7
0
        protected void btnSave_Click(object sender, EventArgs e)
        {
            decimal changeMonery = 0m;

            if (!decimal.TryParse(this.txtinMonery.Text.Trim(), out changeMonery) || changeMonery <= 0)
            {
                JsAlert("充值金额格式错误!");
                return;
            }

            var details = new SysUserBalanceDetail()
            {
                RelevanceNo = "system.recharge",
                SerialNo    = "q" + Utils.BuilderNum(),
                Status      = 0,
                TradeAmt    = changeMonery,
                TradeType   = radDefault.Checked?TradeType.系统充值:TradeType.分红,
                UserId      = Convert.ToInt32(Request.QueryString["id"])
            };

            if (radKouk.Checked)
            {
                details.TradeType = TradeType.其他;
                details.TradeAmt  = 0 - details.TradeAmt;
                changeMonery      = 0 - changeMonery;
            }

            var userBalance = IoC.Resolve <ISysUserBalanceService>();

            if (userBalance.UpdateUserBalance(details, changeMonery) > 0)
            {
                if (radDefault.Checked)
                {
                    //普通充值,需增加提款限额
                    double             bili           = 5;
                    ISysSettingService settingService = IoC.Resolve <ISysSettingService>();
                    var fs = settingService.GetAll().Where(x => x.Key == "chongzhiBili").FirstOrDefault();
                    if (null != fs)
                    {
                        if (!double.TryParse(fs.Value, out bili))
                        {
                            bili = 5;
                        }
                    }
                    ISysUserService userServices = IoC.Resolve <ISysUserService>();
                    var             minOutMonery = (changeMonery * (decimal)(bili / 100));
                    if (userServices.UpdateUserMinMinBettingMoney(details.UserId, minOutMonery) > 0)
                    {
                        //更新用户提款流水要求
                    }
                }
                if (Request.Params["tp"] == "1")//分红
                {
                    JsAlert("分红成功", true);
                }
                else if (Request.Params["tp"] == "0")
                {
                    JsAlert("充值成功", true);
                }
                else
                {
                    JsAlert("扣减成功", true);
                }
            }
            else
            {
                JsAlert("充值失败,请关闭后重试", false);
            }
        }
        private void Recharge()
        {
            string  inUserCode = Request.Params["incode"]; //充值用户账号
            string  password   = Request.Params["pwd"];    //充值用户账号
            string  czpq       = Request.Params["czpq"];   //充值类型 1为分红充值
            decimal inMonery   = 0m;                       //充值金额

            if (!decimal.TryParse(Request.Params["inmonery"], out inMonery) ||
                inMonery < 10 || // 充值金额必须大于10 小于等于10000
                string.IsNullOrEmpty(password))
            {
                AppGlobal.RenderResult(ApiCode.ParamEmpty);
                return;
            }
            if (!this.mSysUserBalanceService.VdUserBalancePwd(this.LoginUserId, password))
            {
                //验证资金密码失败
                AppGlobal.RenderResult(ApiCode.Security);
                return;
            }

            //根据用户账号获取用户信息
            var inUserInfo = this.mSysUserService.Get(inUserCode);

            if (null == inUserInfo)//|| inUserInfo.ParentId != this.LoginUserId
            {
                AppGlobal.RenderResult(ApiCode.Fail);
                return;
            }
            var baseUser  = this.mSysUserService.Get(this.LoginUserId);
            int maxMonery = 10000;

            if (baseUser.UserType == UserType.Main || baseUser.UserType == UserType.BasicProy)
            {
                maxMonery = 100000;
            }
            if (inMonery > maxMonery)
            {
                AppGlobal.RenderResult(ApiCode.ParamEmpty);
                return;
            }

            //获取当前登录用户信息
            var loginUserBalance = this.mSysUserBalanceService.GetUserBalance(this.LoginUserId);

            if (loginUserBalance.Status == 1)
            {
                AppGlobal.RenderResult(ApiCode.DisabledMonery);
                return;
            }
            if (null == loginUserBalance ||//金额是否禁用 并且充值的金额不能大于余额
                loginUserBalance.UserAmt < inMonery)
            {
                AppGlobal.RenderResult(ApiCode.Security);
                return;
            }
            var dailiDetails = new SysUserBalanceDetail()
            {
                OccDate     = DateTime.Now,
                OpUserId    = LoginUserId,
                RelevanceNo = inUserCode,
                SerialNo    = "d" + Utils.BuilderNum(),
                Status      = 0,
                TradeAmt    = inMonery,
                TradeType   = czpq == "1" ? TradeType.分红 : TradeType.级充值,
                UserAmt     = loginUserBalance.UserAmt,
                UserId      = inUserInfo.Id,
            };

            if (this.mSysUserBalanceService.UpdateUserBalance(dailiDetails, inMonery) > 0)
            {
                var removeDetails = new SysUserBalanceDetail()
                {
                    OccDate     = DateTime.Now,
                    OpUserId    = this.LoginUserId,
                    RelevanceNo = inUserCode,
                    SerialNo    = "d" + Utils.BuilderNum(),
                    Status      = 0,
                    TradeAmt    = -inMonery,
                    TradeType   = TradeType.充值扣费,
                    UserAmt     = loginUserBalance.UserAmt,
                    UserId      = this.LoginUserId,
                };
                if (czpq == "1")
                {
                    //算分红扣款
                    removeDetails.TradeType = TradeType.分红扣款;
                }
                //充值成功,减少当前用户余额
                if (this.mSysUserBalanceService.UpdateUserBalance(removeDetails, -inMonery) > 0)
                {
                    //若未上级普通充值,需处理充值流水逻辑
                    if (czpq != "1")
                    {
                        if (!Ytg.ServerWeb.Page.PageCode.UserComm.ManagerRecharge(inMonery, dailiDetails.UserId, this.LoginUser.Id))
                        {
                            AppGlobal.RenderResult(ApiCode.Empty);//充值成功,但流水限制错误
                            return;
                        }
                        //减少自身流水
                    }
                    AppGlobal.RenderResult(ApiCode.Success);//充值成功
                    return;
                }
                else
                {
                    //充值失败,撤销
                    dailiDetails.TradeAmt = -inMonery;
                    this.mSysUserBalanceService.UpdateUserBalance(dailiDetails, inMonery);
                }
            }
        }
Пример #9
0
        /// <summary>
        /// 追号  存储过程
        /// </summary>
        /// <param name="detail"></param>
        /// <param name="balanceDetail"></param>
        /// <returns></returns>
        public decimal?AddCatchBetting(CatchNum detail, SysUserBalanceDetail balanceDetail, int lotteryid, string issueStr, decimal detailMonery, ref int state)
        {
            string spName = "sp_catchBetting";

            DbParameter[] pramers = new DbParameter[]
            {
                new System.Data.SqlClient.SqlParameter("@catchNumCode", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@BetContent", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@Model", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@PalyRadioCode", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@PrizeType", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@BackNum", SqlDbType.Decimal),
                new System.Data.SqlClient.SqlParameter("@UserId", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@IsAutoStop", SqlDbType.Bit),
                new System.Data.SqlClient.SqlParameter("@SumAmt", SqlDbType.Decimal),
                new System.Data.SqlClient.SqlParameter("@BeginIssueCode", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@CatchIssue", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@BonusLevel", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@LotteryCode", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@BetCount", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@PostionName", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@HasState", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@detailMonery", SqlDbType.Decimal),
                new System.Data.SqlClient.SqlParameter("@lotteryid", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@TradeType", SqlDbType.Int),
                new System.Data.SqlClient.SqlParameter("@SerialNo", SqlDbType.VarChar),
                new System.Data.SqlClient.SqlParameter("@catchIssueContent", SqlDbType.NVarChar),
                new System.Data.SqlClient.SqlParameter("@state", SqlDbType.Int)
            };
            pramers[0].Value      = detail.CatchNumCode;
            pramers[1].Value      = detail.BetContent;
            pramers[2].Value      = detail.Model;
            pramers[3].Value      = detail.PalyRadioCode;
            pramers[4].Value      = detail.PrizeType;
            pramers[5].Value      = detail.BackNum;
            pramers[6].Value      = detail.UserId;
            pramers[7].Value      = detail.IsAutoStop;
            pramers[8].Value      = detail.SumAmt;
            pramers[9].Value      = detail.BeginIssueCode;
            pramers[10].Value     = detail.CatchIssue;
            pramers[11].Value     = detail.BonusLevel;
            pramers[12].Value     = detail.LotteryCode;
            pramers[13].Value     = detail.BetCount;
            pramers[14].Value     = string.IsNullOrEmpty(detail.PostionName) ? "" : detail.PostionName;
            pramers[15].Value     = detail.HasState;
            pramers[16].Value     = detailMonery;
            pramers[17].Value     = lotteryid;
            pramers[18].Value     = balanceDetail.TradeType;
            pramers[19].Value     = balanceDetail.SerialNo;
            pramers[20].Value     = issueStr;
            pramers[21].Direction = ParameterDirection.Output;

            this.ExProcNoReader(spName, pramers);
            object parenter = pramers[21].Value;

            if (parenter != null)
            {
                state = Convert.ToInt32(parenter);
            }
            else
            {
                state = -1;
            }

            return(0);
        }