Beispiel #1
0
 public static void AddNewViper(VipInfo vip, string CardNum)
 {
     if (ControCenter.AddNewViper(vip, CardNum))
     {
         MessageBox.Show("成功");
     }
 }
Beispiel #2
0
 public static bool ReissueCard(VipInfo vip, string NewCard)
 {
     if (vip.ConnectCarNum != null)
     {
         if (DataService.ChangeCardStatus(vip.ConnectCarNum, SentCardInfo.CardStatus.废弃) > 0)
         {
             if (DataService.GetVipId(NewCard) > 0)
             {
                 MessageBox.Show("已存在关联vip");
                 return(false);
             }
             else if (DataService.GetCardInfoAct(NewCard) == null)
             {
                 MessageBox.Show("此卡未发");
                 return(false);
             }
             else if (DataService.ChangeVipConnCard(NewCard, vip) > 0)
             {
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
Beispiel #3
0
 public static bool AddNewViper(VipInfo vip, string CardNum)
 {
     if (DataService.GetVipId(CardNum) > 0 || DataService.GetVipIdFromVipInfo(CardNum) > 0)
     {
         MessageBox.Show("已存在关联vip或vip已关联此卡");
         return(false);
     }
     else if (DataService.GetCardInfoAct(CardNum) == null)
     {
         MessageBox.Show("此卡未发");
         return(false);
     }
     else
     {
         if (vip.Name == "" || vip.Phone == "")
         {
             MessageBox.Show("信息不全");
             return(false);
         }
         if (DataService.AddNewVip(vip, CardNum) > 0)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
 }
Beispiel #4
0
        public static VipInfo SearchVipInfo(string CardNum, VipInfo vipinfo)
        {
            uint VipId = DataService.GetVipId(CardNum);

            vipinfo = DataService.GetVipInfo(VipId, vipinfo);
            return(vipinfo);
        }
Beispiel #5
0
 public static void ReissueCard(VipInfo vip, string NewCard)
 {
     if (ControCenter.ReissueCard(vip, NewCard))
     {
         MessageBox.Show("成功");
     }
 }
Beispiel #6
0
 public static VipInfo SearchVipInfo(string CardNum, VipInfo vip)
 {
     if (CardNum != "未读取到卡号")
     {
         vip = ControCenter.SearchVipInfo(CardNum, vip);
     }
     return(vip);
 }
Beispiel #7
0
        private void updateVipInfo()
        {
            if (textBoxVipId.Text.Length < 3)
            {
                clearVip(false);
                return;
            }
            else if (textBoxVipId.Text.Length == 3)
            {
                int vipId;
                if (int.TryParse(textBoxVipId.Text, out vipId) && vipId > 0)
                {
                    currVip = DbHelper.Instance.GetVipInfo(vipId);
                    if (currVip != null)
                    {
                        //textBoxVipId.Text = currVip.vipId.ToString();
                        textBoxVipName.Text    = currVip.vipName;
                        textBoxTel.Text        = currVip.tel;
                        textBoxCurrBonus.Text  = currVip.bonus.ToString();
                        buttonAddBonus.Enabled = true;
                        buttonConsume.Enabled  = true;
                        return;
                    }
                }
            }
            else if (textBoxVipId.Text.Length > 3)
            {
                //currVip = DbHelper.Instance.GetVipInfoByTel(textBoxVip.Text);
                //if (currVip != null)
                //{
                //    textBoxVipId.Text = currVip.vipId.ToString("");
                //    textBoxVipName.Text = currVip.vipName;
                //    textBoxTel.Text = currVip.tel;
                //    textBoxCurrBonus.Text = currVip.bonus.ToString();
                //    buttonAddBonus.Enabled = true;
                //    buttonConsume.Enabled = true;
                //    return;
                //}

                //var vips = DbHelper.Instance.FindVips(textBoxVip.Text);
                //if (vips.Count > 0)
                //{
                //    listBoxVip.Items.Clear();
                //    listBoxVip.Visible = true;
                //    listBoxVip.Size = new Size(listBoxVip.Size.Width, listBoxVip.ItemHeight * (vips.Count + 1));
                //    foreach (var vip in vips)
                //    {
                //        string text = string.Format("{0}\t{1}\t{2}\t{3}\t{4}", vip.vipId, vip.vipName, vip.tel, vip.maxBonus, vip.bonus);
                //        listBoxVip.Items.Add(vip);
                //    }
                //}
                //else
                //{
                //    listBoxVip.Visible = false;
                //}
            }
            clearVip(false);
        }
Beispiel #8
0
 public static void ReportLoss(string CardNum, VipInfo vip)
 {
     if (ControCenter.ReportLoss(CardNum, vip))
     {
         MessageBox.Show("成功");
     }
     else
     {
         MessageBox.Show("失败");
     }
 }
Beispiel #9
0
        /// <summary>
        /// 保存从终端上来的会员信息
        /// </summary>
        /// <param name="loggingSession">当前用户的登录信息</param>
        /// <param name="vipExchanges">会员信息列表</param>
        /// <returns></returns>
        public string SaveVips(LoggingSessionInfo loggingSession, IList <VipExchangeInfo> vipExchanges)
        {
            ISqlMapper sqlmap = cSqlMapper.Instance(loggingSession.CurrentLoggingManager);

            try
            {
                sqlmap.BeginTransaction();
                Hashtable ht = new Hashtable();
                foreach (VipExchangeInfo vip in vipExchanges)
                {
                    //校验会员是否是新建还是修改
                    VipInfo old_vip = sqlmap.QueryForObject <VipInfo>("Promotion.Vip.SelectByID", vip.ID);
                    bool    is_new  = (old_vip == null);
                    //校验会员号
                    ht["vip_no"] = vip.No;
                    ht["vip_id"] = vip.ID;
                    int count = sqlmap.QueryForObject <int>("Promotion.Vip.CountVip", ht);
                    if (count > 0)
                    {
                        sqlmap.RollBackTransaction();
                        return(string.Format("会员号已经存在[会员号:{0},ID:{1}]", vip.No, vip.ID));
                    }

                    if (is_new)
                    {
                        //新建会员
                        sqlmap.Insert("Promotion.Vip.Insert", vip);
                    }
                    else
                    {
                        //修改会员
                        //判断会员状态
                        if (old_vip.Status == -1)
                        {
                            sqlmap.RollBackTransaction();
                            return(string.Format("会员被停用,不能修改[会员号:{0},ID:{1}]", vip.No, vip.ID));
                        }
                        count = sqlmap.Update("Promotion.Vip.Update", vip);
                        if (count == 0)
                        {
                            sqlmap.RollBackTransaction();
                            return(string.Format("会员版本不正确,不能修改[会员号:{0},ID:{1}]", vip.No, vip.ID));
                        }
                    }
                }
                sqlmap.CommitTransaction();
            }
            catch (Exception ex)
            {
                sqlmap.RollBackTransaction();
                throw ex;
            }
            return("");
        }
Beispiel #10
0
 private void clearVip(bool all)
 {
     currVip = null;
     if (all)
     {
         textBoxVipId.Text = "";
     }
     textBoxVipName.Text    = "";
     textBoxTel.Text        = "";
     textBoxCurrBonus.Text  = "";
     buttonAddBonus.Enabled = false;
     buttonConsume.Enabled  = false;
 }
Beispiel #11
0
        public VipInfo GetVipInfo(int vipId)
        {
            VipInfo       vipInfo = null;
            SQLiteCommand cmd     = conn.CreateCommand();

            cmd.CommandText = "select vipId,vipName,tel,bonus,maxBonus from members where vipId=" + vipId;
            SQLiteDataReader reader = cmd.ExecuteReader();

            if (reader.HasRows && reader.Read())
            {
                vipInfo = new VipInfo(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetFloat(3), reader.GetFloat(4));
            }
            cmd.Dispose();
            return(vipInfo);
        }
Beispiel #12
0
 public static bool ReportLoss(string CardNum, VipInfo vip)
 {
     if (DataService.GetVipId(CardNum) == uint.Parse(vip.VipId))
     {
         if (DataService.ChangeCardStatus(CardNum, SentCardInfo.CardStatus.挂失) > 0)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
Beispiel #13
0
        public VipInfo GetVipInfoByTel(string val)
        {
            VipInfo       vipInfo = null;
            SQLiteCommand cmd     = conn.CreateCommand();

            cmd.CommandText = "select vipId,vipName,tel,bonus,maxBonus from members where tel=@tel";
            cmd.Parameters.AddWithValue("@tel", "%" + val + "%");
            SQLiteDataReader reader = cmd.ExecuteReader();
            int count = 0;

            while (reader.Read())
            {
                count++;
                if (count > 1)
                {
                    vipInfo = null;
                    break;
                }
                vipInfo = new VipInfo(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetFloat(3), reader.GetFloat(4));
            }
            cmd.Dispose();
            return(vipInfo);
        }
Beispiel #14
0
        public List <VipInfo> FindVips(string val)
        {
            List <VipInfo> list            = new List <VipInfo>();
            int            intVal          = 0;
            VipInfo        vipInfoForVipId = null;
            List <VipInfo> listForTel      = new List <VipInfo>();

            if (int.TryParse(val, out intVal) && intVal > 0 && intVal < 1000)
            {
                SQLiteCommand cmd = conn.CreateCommand();
                cmd.CommandText = "select vipId,vipName,tel,bonus,maxBonus from members where vipId=" + val;
                SQLiteDataReader reader = cmd.ExecuteReader();
                if (reader.HasRows && reader.Read())
                {
                    vipInfoForVipId = new VipInfo(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetFloat(3), reader.GetFloat(4));
                }
                cmd.Dispose();
            }
            if (Regex.IsMatch(val, @"^\d{4,12}$"))
            {
                SQLiteCommand cmd = conn.CreateCommand();
                cmd.CommandText = string.Format("select vipId,vipName,tel,bonus,maxBonus from members where tel like '%{0}%' order by tel", val);
                SQLiteDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    if (vipInfoForVipId != null && vipInfoForVipId.vipId == reader.GetInt32(0))
                    {
                        continue;
                    }
                    listForTel.Add(new VipInfo(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetFloat(3), reader.GetFloat(4)));
                }
                cmd.Dispose();
            }
            try
            {
                SQLiteCommand cmd = conn.CreateCommand();
                cmd.CommandText = "select vipId,vipName,tel,bonus,maxBonus from members where vipName like @vipName order by vipName";
                cmd.Parameters.AddWithValue("@vipName", "%" + val + "%");
                SQLiteDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    if (vipInfoForVipId != null && vipInfoForVipId.vipId == reader.GetInt32(0))
                    {
                        continue;
                    }
                    VipInfo vipInfo = new VipInfo(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetFloat(3), reader.GetFloat(4));
                    if (!listForTel.Contains(vipInfo, new EqualityComparer()))
                    {
                        list.Add(vipInfo);
                    }
                }
                cmd.Dispose();
            }
            catch { }
            list.InsertRange(0, listForTel);
            if (vipInfoForVipId != null)
            {
                list.Insert(0, vipInfoForVipId);
            }
            return(list);
        }
Beispiel #15
0
        public ActionResult MemberUpdateForVIP(Dictionary <string, string> queryvalues)
        {
            int  _type  = queryvalues.ContainsKey("Type") ? Convert.ToInt32(queryvalues["Type"]) : 0;
            int  _id    = queryvalues.ContainsKey("ID") ? Convert.ToInt32(queryvalues["ID"]) : 0;
            int  _level = queryvalues.ContainsKey("Grade") ? Convert.ToInt32(queryvalues["Grade"]) : 0;
            int  _point = queryvalues.ContainsKey("Point") ? Convert.ToInt32(queryvalues["Point"]) : 0;
            Role model  = new Role();

            model = RoleBLL.GetRoleByString(new Role()
            {
                ID = _id
            });
            if (model == null)
            {
                return(View(model));
            }
            model.UpdateProperty = _type;
            //数据修改操作
            if (Request.IsAjaxRequest())
            {
                //没有封号不能修改
                if (model.IsFreeze == isSwitch.开)
                {
                    return(Content("-1"));
                }
                if (_type == 3)     //绑定俱乐部
                {
                    //检查是不是俱乐部,不是俱乐部,不让绑定
                    IEnumerable <ClubInfo> clubs = ClubBLL.GetClubInfo(_level);
                    if (clubs != null && clubs.Count() > 0)
                    {
                    }
                    else
                    {
                        return(Content("4"));//不是俱乐部
                    }


                    Beland_Club_C BelandlubC;
                    // model.Minu 传一个时间长短给服务器
                    BelandlubC = Beland_Club_C.CreateBuilder()
                                 .SetClubID((uint)_level)
                                 .SetDwUserID((uint)_id)
                                 .Build();



                    Bind tbind = Cmd.runClient(new Bind(ServiceCmd.SC_BELAND_CLUB, BelandlubC.ToByteArray()));


                    switch ((CenterCmd)tbind.header.CommandID)
                    {
                    case CenterCmd.CS_BELAND_CLUB:
                        Beland_Club_S BelandClubS = Beland_Club_S.ParseFrom(tbind.body.ToBytes());
                        bool          res         = BelandClubS.Suc;
                        if (res)
                        {
                            return(Content("5"));
                        }
                        else
                        {
                            return(Content("6"));
                        }

                    case CenterCmd.CS_CONNECT_ERROR:
                        break;
                    }

                    return(Content("6"));



                    //model.ClubID = _level;
                    //int res = RoleBLL.UpdateRoleClub(model);
                    //if(res == 1)    //绑定不是俱乐部ID
                    //{
                    //    return Content("4");
                    //}
                    //else
                    //{
                    //    return Content(res.ToString());
                    //}
                }
                //玩家数据为空
                if (model.ExtInfo == null)
                {
                    return(Content("-2"));
                }
                else
                {
                    /////////////////////////////////////////////////////////////////////////////////

                    if (SystemType == "2")//万人德州
                    {
                        BExtInfo BExtInfo = BExtInfo.ParseFrom(model.ExtInfo);
                        if (_type == 1)  //修改VIP等级
                        {
                            VipInfo VipInfo22;

                            VipInfo22 = VipInfo.CreateBuilder(BExtInfo.VipInfo)
                                        .SetGrade((int)_level)
                                        .SetCurrent((int)_point)
                                        .Build();


                            BExtInfo = BExtInfo.CreateBuilder(BExtInfo)
                                       .SetVipInfo(VipInfo22)
                                       .Build();
                        }
                        else if (_type == 2) //修改等级
                        {
                            LevelInfo LevelInfo22;

                            LevelInfo22 = LevelInfo.CreateBuilder(BExtInfo.LevelInfo)
                                          .SetLevel(_level)
                                          .SetExp(_point)
                                          .Build();


                            BExtInfo = BExtInfo.CreateBuilder(BExtInfo)
                                       .SetLevelInfo(LevelInfo22)
                                       .Build();
                        }
                        byte[] bs = BExtInfo.ToByteArray();
                        model.ExtInfo = bs;
                        return(Content(RoleBLL.UpdateRole(model).ToString()));
                    }
                    else if (SystemType == "1")
                    {
                        byte[] Data = new byte[4];
                        Array.Copy(model.ExtInfo, 4, Data, 0, 4);
                        int    num   = System.BitConverter.ToInt32(Data, 0);
                        byte[] Grade = System.BitConverter.GetBytes(_level);
                        byte[] Point = System.BitConverter.GetBytes(_point);
                        for (int j = 0; j < 4; j++)
                        {
                            if (_type == 1)  //修改VIP等级
                            {
                                model.ExtInfo[16 + j] = Grade[j];
                                model.ExtInfo[20 + j] = Point[j];
                            }
                            else if (_type == 2) //修改等级
                            {
                                model.ExtInfo[36 + j] = Grade[j];
                                model.ExtInfo[40 + j] = Point[j];
                            }
                        }
                        return(Content(RoleBLL.UpdateRole(model).ToString()));
                    }
                    else
                    {
                    }
                }
            }
            //数据查询操作
            if (model.ExtInfo == null)
            {
                return(View(model));
            }
            else
            {
                if (SystemType == "2")
                {
                    BExtInfo BExtInfo = BExtInfo.ParseFrom(model.ExtInfo);
                    model.VipGrade   = BExtInfo.VipInfo.Grade;   //VIP等级
                    model.VipPoint   = BExtInfo.VipInfo.Current; //VIP等级
                    model.LevelGrade = BExtInfo.LevelInfo.Level; //玩家等级
                    model.LevelPoint = BExtInfo.LevelInfo.Exp;   //玩家等级
                    return(View(model));
                }
                else
                {
                    int    indexData = 4;
                    byte[] numData   = new byte[4];
                    Array.Copy(model.ExtInfo, indexData, numData, 0, 4);
                    int num = System.BitConverter.ToInt32(numData, 0);
                    indexData = indexData + 4;

                    byte[] DataInfo = new byte[num];
                    Array.Copy(model.ExtInfo, 0, DataInfo, 0, num);
                    while (indexData < num)
                    {
                        //类型ID
                        int typeid = System.BitConverter.ToInt32(DataInfo, indexData);
                        indexData = indexData + 4;
                        //数据长度
                        int datanum = System.BitConverter.ToInt32(DataInfo, indexData);
                        indexData = indexData + 4;
                        //VIP等级
                        if (typeid == 1)
                        {
                            model.VipGrade = System.BitConverter.ToInt32(DataInfo, indexData);
                            model.VipPoint = System.BitConverter.ToInt32(DataInfo, indexData + 4);
                            indexData      = indexData + datanum;
                        }
                        //玩家等级
                        else if (typeid == 2)
                        {
                            model.LevelGrade = System.BitConverter.ToInt32(DataInfo, indexData);
                            model.LevelPoint = System.BitConverter.ToInt32(DataInfo, indexData + 4);
                            indexData        = indexData + datanum;
                        }
                        else
                        {
                            indexData = indexData + datanum;
                        }
                    }
                    return(View(model));
                }
            }
        }
Beispiel #16
0
        public bool AddBonus(int vipId, int level, DateTime startTime, DateTime endTime, int duration, float changeBonus, out string msg)
        {
            VipInfo vipInfo = GetVipInfo(vipId);

            if (vipInfo == null)
            {
                msg = "不存在会员号" + vipId;
                return(false);
            }
            SQLiteCommand cmd = conn.CreateCommand();

            cmd.CommandText = string.Format("select startTime,endTime from bonus_change where id=(select max(id) from bonus_change where vipId={0} and status={1} and type<{2})"
                                            , vipId, (int)BonusChangeStatus.Normal, (int)BonusChangeType.Consume);
            SQLiteDataReader reader = cmd.ExecuteReader();

            if (reader.Read())
            {
                DateTime lastStartTime = reader.GetDateTime(0);
                DateTime lastEndTime   = reader.GetDateTime(1);
                if ((startTime >= lastStartTime && startTime < lastEndTime) || (endTime > lastStartTime && endTime <= lastEndTime))
                {
                    msg = string.Format("当前会员该时间段已经积过分,最后一次积分时段为{0}至{1}", lastStartTime, lastEndTime);
                    cmd.Dispose();
                    return(false);
                }
            }
            reader.Dispose();
            SQLiteTransaction transaction = conn.BeginTransaction();

            try
            {
                float currBonus = vipInfo.bonus + changeBonus;
                cmd.CommandText = string.Format("update members set bonus={0},maxBonus=maxBonus+{1},playCount=playCount+1,playDuration=playDuration+{2} where vipId={3}", currBonus, changeBonus, duration, vipId);
                int result = cmd.ExecuteNonQuery();
                if (result != 1)
                {
                    transaction.Rollback();
                    msg = "更新会员积分失败";
                    return(false);
                }
                cmd.CommandText = string.Format("insert into bonus_change(vipId, type, startTime, endTime, duration, changeBonus, currBonus) values({0}, {1}, datetime('{2}'), datetime('{3}'), {4}, {5}, {6})"
                                                , vipId, level, startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss"), duration, changeBonus, currBonus);
                result = cmd.ExecuteNonQuery();
                if (result != 1)
                {
                    transaction.Rollback();
                    msg = "新增积分记录失败";
                    return(false);
                }
                transaction.Commit();
                msg = string.Format("成功积分{0},当前剩余总积分{1}", changeBonus, currBonus);
                return(true);
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                msg = ex.Message;
                return(false);
            }
            finally
            {
                cmd.Dispose();
            }
        }
Beispiel #17
0
        public bool ConsumeBonus(int vipId, List <GoodsInfo> listGoodsInfo, float consumeBonus, out string msg)
        {
            VipInfo vipInfo = GetVipInfo(vipId);

            if (vipInfo == null)
            {
                msg = "不存在会员号" + vipId;
                return(false);
            }
            if (vipInfo.bonus < consumeBonus || listGoodsInfo.Count == 0)
            {
                msg = "兑换积分失败,会员剩余积分不够兑换商品";
                return(false);
            }
            listGoodsInfo.Sort();
            string desc    = "兑换:";
            string consume = "";

            foreach (var goodsInfo in listGoodsInfo)
            {
                desc    += goodsInfo.ToString() + ",";
                consume += string.Format("{0},{1},{2};", goodsInfo.id, goodsInfo.price, goodsInfo.count);
            }
            desc = desc.TrimEnd(',');
            SQLiteCommand     cmd         = conn.CreateCommand();
            SQLiteTransaction transaction = conn.BeginTransaction();

            try
            {
                float changeBonus = -consumeBonus;
                float currBonus   = vipInfo.bonus + changeBonus;
                cmd.CommandText = string.Format("update members set bonus=bonus-{0} where vipId={1}", consumeBonus, vipId);
                int result = cmd.ExecuteNonQuery();
                if (result != 1)
                {
                    transaction.Rollback();
                    msg = "兑换积分失败,更新积分出错";
                    return(false);
                }
                cmd.CommandText = string.Format("insert into bonus_change(vipId, type, changeBonus, currBonus, desc,consume) values({0}, {1}, {2}, {3}, @desc, @consume)"
                                                , vipId, (int)BonusChangeType.Consume, changeBonus, currBonus);
                cmd.Parameters.AddWithValue("@desc", desc);
                cmd.Parameters.AddWithValue("@consume", consume);
                result = cmd.ExecuteNonQuery();
                if (result != 1)
                {
                    transaction.Rollback();
                    msg = "兑换积分失败,生成兑换记录出错";
                    return(false);
                }
                foreach (var goodsInfo in listGoodsInfo)
                {
                    cmd.CommandText = string.Format("update goods set soldCount=soldCount+{0},soldBonus=soldBonus+{1} where id={2}", goodsInfo.count, goodsInfo.price * goodsInfo.count, goodsInfo.id);
                    result          = cmd.ExecuteNonQuery();
                    if (result != 1)
                    {
                        transaction.Rollback();
                        msg = "兑换积分失败,更新商品数量出错";
                        return(false);
                    }
                }
                transaction.Commit();
                msg = string.Format("积分兑换成功,兑换后会员剩余积分为{0}", currBonus);
                return(true);
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                msg = ex.Message;
                return(false);
            }
            finally
            {
                cmd.Dispose();
            }
        }
Beispiel #18
0
        public bool RevokeBonus(long id, int type, string typeName, int status, int vipId, float changeBonus, int duration, string consume, out string msg)
        {
            if (status != (int)BonusChangeStatus.Normal)
            {
                msg = "此记录不能撤销";
                return(false);
            }
            VipInfo vipInfo = GetVipInfo(vipId);

            if (vipInfo == null)
            {
                msg = "不存在会员号" + vipId;
                return(false);
            }
            SQLiteCommand     cmd         = conn.CreateCommand();
            SQLiteTransaction transaction = conn.BeginTransaction();

            try
            {
                float currBonus = vipInfo.bonus - changeBonus;
                if (type == (int)BonusChangeType.Consume)
                {
                    cmd.CommandText = string.Format("update members set bonus={0} where vipId={1}", currBonus, vipId);
                }
                else
                {
                    cmd.CommandText = string.Format("update members set bonus={0},maxBonus=maxBonus-{1},playCount=playCount-1,playDuration=playDuration-{2} where vipId={3}", currBonus, changeBonus, duration, vipId);
                }
                int result = cmd.ExecuteNonQuery();
                if (result != 1)
                {
                    transaction.Rollback();
                    msg = "更新会员积分失败";
                    return(false);
                }
                cmd.CommandText = string.Format("insert into bonus_change(vipId, type, status, changeBonus, currBonus, desc) values({0}, {1}, {2},{3},{4},@desc)"
                                                , vipId, type, (int)BonusChangeStatus.Revoke, -changeBonus, currBonus);
                cmd.Parameters.AddWithValue("@desc", "撤销:序号" + id);
                result = cmd.ExecuteNonQuery();
                if (result != 1)
                {
                    transaction.Rollback();
                    msg = string.Format("撤销{0}记录失败", typeName);
                    return(false);
                }
                cmd.CommandText = string.Format("update bonus_change set status={0} where id={1} and status={2}", (int)BonusChangeStatus.RevokeMark, id, (int)BonusChangeStatus.Normal);
                result          = cmd.ExecuteNonQuery();
                if (result != 1)
                {
                    transaction.Rollback();
                    msg = string.Format("撤销{0}记录失败,可能此记录已撤销过", typeName);
                    return(false);
                }
                transaction.Commit();
                msg = string.Format("成功撤销{0},会员当前总剩余积分为{1}", typeName, currBonus);
                return(true);
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                msg = ex.Message;
                return(false);
            }
            finally
            {
                cmd.Dispose();
            }
        }