Esempio n. 1
0
            public void Update()
            {
                string sql = string.Format("update t_member set Balance='{0}',Lottery='{1}' where ICCardID='{2}' and MerchID='{3}'", 币余额, 票余额, 会员卡号, 商户号);

                //DataAccess ac = new DataAccess();
                //ac.Execute(sql);
                XCCloudRS232BLL.ExecuteSql(sql);
            }
Esempio n. 2
0
        void UpdateAlertDB(string headAddress, bool AlertValue, string AlertType, int lockGame, string Code)
        {
            string sql = "";

            if (AlertValue)
            {
                sql = string.Format("if not exists(select * from flw_game_alarm where AlertContent like '{2}' and State='0' and Segment='{0}' and HeadAddress='{1}') begin INSERT INTO flw_game_alarm (ICCardID,Segment,HeadAddress,AlertType,HappenTime,State,LockGame,LockMember,AlertContent) VALUES (0,'{0}','{1}','{2}',GETDATE(),0,{3},0,'{2}') end",
                                    Code, headAddress, AlertType, lockGame);
            }
            else
            {
                sql = string.Format("UPDATE flw_game_alarm SET EndTime=GETDATE(),State=1 where Segment='{0}' and HeadAddress='{1}' and AlertType='{2}' and State=0",
                                    Code, headAddress, AlertType);
            }
            //DataAccess ac = new DataAccess();
            //ac.Execute(sql);
            XCCloudRS232BLL.ExecuteSql(sql);
        }
Esempio n. 3
0
        public object replaceDevice(Dictionary <string, object> dicParas)
        {
            try
            {
                string errMsg         = string.Empty;
                string mobileToken    = dicParas.ContainsKey("mobileToken") ? dicParas["mobileToken"].ToString() : string.Empty;
                string oldDeviceToken = dicParas.ContainsKey("oldDeviceToken") ? dicParas["oldDeviceToken"].ToString() : string.Empty;
                string newDeviceToken = dicParas.ContainsKey("newDeviceToken") ? dicParas["newDeviceToken"].ToString() : string.Empty;

                Base_MerchInfo merch = MerchBusiness.GetMerchModel(mobileToken);
                if (merch.IsNull())
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "用户令牌无效"));
                }

                Base_DeviceInfo oldDevice = DeviceBusiness.GetDeviceModel(oldDeviceToken);
                if (oldDevice.IsNull())
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "您要替换的设备令牌无效"));
                }

                //设备所属商户不是当前商户
                if (oldDevice.MerchID != merch.ID)
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "该设备不属于当前商户,没有权限操作该设备"));
                }

                //新设备实体
                Base_DeviceInfo newDevice = DeviceBusiness.GetDeviceModel(newDeviceToken);
                if (newDevice.IsNull())
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "当前扫面的设备令牌无效"));
                }

                //判断设备类别是否相同
                if (oldDevice.DeviceType != newDevice.DeviceType)
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "设备类型不同,不能替换"));
                }

                DeviceTypeEnum currDeviceType = (DeviceTypeEnum)oldDevice.DeviceType;
                int            category       = 0;

                switch (currDeviceType)
                {
                case DeviceTypeEnum.Router:
                    category = 1;
                    break;

                case DeviceTypeEnum.SlotMachines:
                case DeviceTypeEnum.DepositMachine:
                    category = 2;
                    break;

                case DeviceTypeEnum.Clerk:
                case DeviceTypeEnum.Terminal:
                    category = 3;
                    break;
                }

                if (category != 0)
                {
                    string         sql        = "exec ReplaceDevice @oldDeviceId,@newDeviceId,@merchId,@category";
                    SqlParameter[] parameters = new SqlParameter[4];
                    parameters[0] = new SqlParameter("@oldDeviceId", oldDevice.ID);
                    parameters[1] = new SqlParameter("@newDeviceId", newDevice.ID);
                    parameters[2] = new SqlParameter("@merchId", merch.ID);
                    parameters[3] = new SqlParameter("@category", category);
                    int ret = XCCloudRS232BLL.ExecuteSql(sql, parameters);
                    if (ret == 0)
                    {
                        return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "设备替换失败"));
                    }
                }

                //修改设备缓存状态
                DeviceStatusBusiness.SetDeviceState(oldDevice.Token, DeviceStatusEnum.未激活.ToDescription());
                DeviceStatusBusiness.SetDeviceState(newDevice.Token, DeviceStatusEnum.离线.ToDescription());

                return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.T, ""));
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Esempio n. 4
0
        public object removeDevice(Dictionary <string, object> dicParas)
        {
            try
            {
                string errMsg      = string.Empty;
                string mobileToken = dicParas.ContainsKey("mobileToken") ? dicParas["mobileToken"].ToString() : string.Empty;
                string deviceToken = dicParas.ContainsKey("deviceToken") ? dicParas["deviceToken"].ToString() : string.Empty;

                Base_MerchInfo merch = MerchBusiness.GetMerchModel(mobileToken);
                if (merch.IsNull())
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "用户令牌无效"));
                }

                Base_DeviceInfo device = DeviceBusiness.GetDeviceModel(deviceToken);
                if (device.IsNull())
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "设备令牌无效"));
                }

                //设备所属商户不是当前商户
                if (device.MerchID != merch.ID)
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "该设备已被其他商户绑定,没有权限操作该设备"));
                }

                //开始解除绑定
                device.MerchID = 0;
                device.Status  = (int)DeviceStatusEnum.未激活;

                DeviceTypeEnum currDeviceType = (DeviceTypeEnum)device.DeviceType;
                bool           ret            = false;

                switch (currDeviceType)
                {
                case DeviceTypeEnum.Router:
                {
                    string sql = string.Format("exec RemoveMerchRouter {0}", device.ID);
                    XCCloudRS232BLL.ExecuteSql(sql);

                    //ret = DeviceBusiness.UpdateDevice(device);
                }
                break;

                case DeviceTypeEnum.SlotMachines:
                case DeviceTypeEnum.DepositMachine:
                {
                    //获取外设绑定关系实体
                    Data_MerchDevice md = MerchDeviceBusiness.GetMerchDeviceModel(device.ID);

                    using (var transactionScope = new System.Transactions.TransactionScope(TransactionScopeOption.RequiresNew))
                    {
                        DeviceBusiness.UpdateDevice(device);
                        ret = MerchDeviceBusiness.DeleteMerchDevice(md);

                        transactionScope.Complete();
                    }
                }
                break;

                case DeviceTypeEnum.Clerk:
                case DeviceTypeEnum.Terminal:
                {
                    //获取终端绑定关系实体
                    Data_MerchSegment ms = MerchSegmentBusiness.GetMerchSegmentModel(device.ID);

                    using (var transactionScope = new System.Transactions.TransactionScope(TransactionScopeOption.RequiresNew))
                    {
                        DeviceBusiness.UpdateDevice(device);
                        ret = MerchSegmentBusiness.DeleteMerchSegment(ms);

                        transactionScope.Complete();
                    }
                }
                break;
                }

                if (ret)
                {
                    DeviceStatusBusiness.SetDeviceState(device.Token, DeviceStatusEnum.未激活.ToDescription());
                }

                return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.T, ""));
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Esempio n. 5
0
        public Recv机头卡片报警指令(FrameData f, DateTime RecvDateTime)
        {
            RecvData = f;
            机头地址     = PubLib.Hex2String(f.commandData[0]);
            if (f.commandLength < 12)
            {
                return;
            }
            IC卡号码 = Encoding.ASCII.GetString(f.commandData, 1, 8);
            IC卡号码 = IC卡号码.Replace("\0", "");
            int cardid = 0;

            if (!int.TryParse(IC卡号码, out cardid))
            {
                IC卡号码 = "0";
            }
            卡片类型      = f.commandData[9];
            报警类别      = f.commandData[10];
            处理结果      = f.commandData[11];
            AlertType = "";
            switch (报警类别)
            {
            case 0:
                AlertType = "用户异常退币报警";
                break;

            case 1:
                AlertType = "非法专卡专用解锁";
                break;

            case 2:
                AlertType = "专卡专用解锁";
                break;

            case 3:
                AlertType = "非法送分券解锁";
                break;

            case 4:
                AlertType = "常规解锁";
                break;

            case 5:
                AlertType = "退币锁定";
                break;

            default:
                AlertType = "未知错误报警";
                break;
            }
            流水号 = BitConverter.ToUInt16(f.commandData, 12);

            Info.HeadInfo.机头绑定信息 bind = new Info.HeadInfo.机头绑定信息();
            bind.控制器令牌 = f.Code;
            bind.短地址   = 机头地址;
            Info.HeadInfo.机头信息 机头   = Info.HeadInfo.GetHeadInfoByShort(bind);
            string             管理卡号 = "0";

            if (机头 != null)
            {
                管理卡号 = 机头.常规.管理卡号;
            }
            if (!int.TryParse(管理卡号, out cardid))
            {
                管理卡号 = "0";
            }
            object obj = null;
            //DataAccess ac = new DataAccess();
            int res = UDPServerHelper.CheckRepeat(f.Code, 机头地址, IC卡号码, CommandType.机头卡片报警指令, ref obj, 流水号);

            if (res == 0)
            {
                switch (报警类别)
                {
                case 0:
                case 1:
                    int d = 0;
                    if (!int.TryParse(管理卡号, out d))
                    {
                        管理卡号 = "0";
                    }
                    if (!int.TryParse(IC卡号码, out d))
                    {
                        IC卡号码 = "0";
                    }
                    string sql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),null,0,0,0,'会员卡号:{4}')",
                                               管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                    //ac.Execute(sql);
                    XCCloudRS232BLL.ExecuteSql(sql);
                    break;

                case 2:
                {
                    //if (卡片类型 == 1)  //管理卡
                    {
                        if (机头.状态.超级解锁卡标识)
                        {
                            AlertType = "超级卡解锁专卡专用解锁";
                        }
                        string dbsql = "";
                        if (!机头.状态.超级解锁卡标识 && 处理结果 == 1)            //普通卡,处理结果成功的直接写2
                        {
                            dbsql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),GETDATE(),2,0,0,'会员卡号:{4}')",
                                                  管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                        }
                        else
                        {
                            dbsql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),null,0,0,0,'会员卡号:{4}')",
                                                  管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                        }
                        //ac.Execute(dbsql);
                        XCCloudRS232BLL.ExecuteSql(dbsql);
                    }
                    string IC = 机头.常规.当前卡片号;
                    //if (Info.CoinInfo.被动退分解锁队列.ContainsKey(IC))
                    //{
                    //    if (处理结果 == 0)
                    //    {
                    //        Info.CoinInfo.被动退分解锁队列[IC].是否允许退分标识 = false;
                    //        Info.CoinInfo.被动退分解锁队列[IC].错误信息 = string.Format("机头编号:{0} 有分;", 机头.常规.机头长地址);
                    //    }
                    //    else
                    //    {
                    //        机头.常规.当前卡片号 = "";
                    //    }
                    //    Info.CoinInfo.被动退分解锁队列[IC].当前序号++;
                    //    if (Info.CoinInfo.被动退分解锁队列[IC].当前序号 >= Info.CoinInfo.被动退分解锁队列[IC].机头列表.Count)
                    //    {
                    //        //发送完毕
                    //        //ServiceDll.ClientCall.远程强制退分应答(Info.CoinInfo.被动退分解锁队列[IC].错误信息, IC, (Info.CoinInfo.被动退分解锁队列[IC].错误信息 == ""));
                    //        //StringBuilder sb1 = new StringBuilder();
                    //        //sb1.Append("=============================================\r\n");
                    //        //sb1.AppendFormat("{0:yyyy-MM-dd HH:mm:ss.fff}  远程强制退分应答\r\n", DateTime.Now);
                    //        //sb1.AppendFormat("IC卡号:{0}\r\n", IC);
                    //        //sb1.AppendFormat("结果:{0}\r\n", Info.CoinInfo.被动退分解锁队列[IC].错误信息);
                    //        //UIClass.接收内容 = sb1.ToString();
                    //    }

                    //}
                }
                break;

                case 3:
                {
                    机头.状态.是否正在使用限时送分优惠 = (处理结果 == 1);
                    机头.常规.是否为首次投币      = (处理结果 == 1);
                    if (处理结果 == 0)
                    {
                        string qsql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),null,0,0,0,'会员卡号:{4}')",
                                                    管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                        //ac.Execute(qsql);
                        XCCloudRS232BLL.ExecuteSql(qsql);
                    }
                    else
                    {
                        if (机头.状态.超级解锁卡标识)          //超级管理卡
                        {
                            string dbsql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),null,0,0,0,'会员卡号:{4}')",
                                                         管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                            //ac.Execute(dbsql);
                            XCCloudRS232BLL.ExecuteSql(dbsql);
                        }
                        else
                        {
                            AlertType = "解锁限时送分";
                            string dbsql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),GETDATE(),2,0,0,'会员卡号:{4}')",
                                                         管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                            //ac.Execute(dbsql);
                            XCCloudRS232BLL.ExecuteSql(dbsql);
                        }
                    }
                }
                break;

                case 4:                //常规解锁,解除报警,修改数据库
                {
                    if (机头.状态.超级解锁卡标识) //超级管理卡
                    {
                        AlertType = "超级卡解锁常规锁定";
                        string dbsql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),null,0,0,0,'会员卡号:{4}')",
                                                     管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                        //ac.Execute(dbsql);
                        XCCloudRS232BLL.ExecuteSql(dbsql);
                    }
                    string usql = string.Format("update flw_game_alarm set EndTime=GETDATE(),ICCardID='{2}',`state`=1 where `state`=0 and LockGame=1 and MerchID='{0}' and DeviceID='{1}'", 机头.商户号, 机头.常规.机头编号, 管理卡号);
                    //ac.Execute(usql);
                    XCCloudRS232BLL.ExecuteSql(usql);
                }
                break;

                case 5:
                {
                    if (机头.状态.超级解锁卡标识)          //超级管理卡
                    {
                        AlertType = "超级卡解锁退币锁定";
                        string dbsql = string.Format("INSERT INTO flw_game_alarm VALUES ('{0}','{1}','{2}','{3}',GETDATE(),null,0,0,0,'会员卡号:{4}')",
                                                     管理卡号, 机头.商户号, 机头.常规.机头编号, AlertType, IC卡号码);
                        //ac.Execute(dbsql);
                        XCCloudRS232BLL.ExecuteSql(dbsql);
                    }
                }
                break;

                default:
                    break;
                }

                if (处理结果 == 1)
                {
                    机头.常规.当前卡片号 = "";
                }

                应答数据 = new Ask.Ask机头卡片报警指令(机头地址, 流水号);
                UDPServerHelper.InsertRepeat(f.routeAddress, 机头地址, IC卡号码, CommandType.机头卡片报警指令, CommandType.机头卡片报警指令应答, 应答数据, 流水号, RecvDateTime);
            }
            else if (res == 1)
            {
                应答数据 = (Ask.Ask机头卡片报警指令)obj;
            }
            else
            {
                //重复性检查出错
                return;
            }
            byte[] dataBuf = PubLib.GetBytesByObject(应答数据);
            SendData     = PubLib.GetFrameDataBytes(f, dataBuf, CommandType.机头卡片报警指令应答);
            SendDataTime = DateTime.Now;
        }
        bool 电子退币SQL(Info.HeadInfo.机头信息 head, UInt16 SN, int Coins, string ICCard, int RepeadCode, CoinType cType, ref Info.HeadInfo.IC卡模式进出币应答结构 投币应答, ref string msg)
        {
            bool res = false;
            int  pCoin = 0, bValue = 0;
            bool isAllowOut = true, isAllowIn = true, isAllowZKZY = false;
            bool 是否超分报警 = false;

            Info.CoinInfo       coin   = new Info.CoinInfo();
            Info.CoinInfo.会员卡信息 member = coin.GetMemberInfo(ICCard, head.常规.路由器编号);
            if (member == null)
            {
                return(res);
            }
            member.退币时间 = DateTime.Now;

            //DataAccess ac = new DataAccess();

            string sqlString = "";

            if (head.彩票模式 && cType == CoinType.电子退币)
            {
                cType = CoinType.IC退彩票;
            }

            Info.PushRule.GetCurRule(head.常规.游戏机编号, out pCoin, out isAllowOut, out isAllowIn, out isAllowZKZY);

            //启用退币保护,并且退币数误差在设定值正负1个范围内则触发事件
            if (head.常规.退币保护启用标志 && head.常规.退币信号超时退币个数 - 1 <= Coins && head.常规.退币信号超时退币个数 + 1 >= Coins)
            {
                msg += "触发退币保护功能\r\n";
                if (Info.GameInfo.TBProtect(head.常规.游戏机编号))
                {
                    member.机头上下分 = false;
                    退币报警锁机头      = true;
                    //Command.Ask.Ask机头锁定解锁指令 a = new Command.Ask.Ask机头锁定解锁指令(head.常规.机头地址, true);
                    sqlString = string.Format("exec TBProc '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}'",
                                              head.常规,
                                              head.常规.机头地址,
                                              SN,
                                              Coins,
                                              ICCard,
                                              (int)cType,
                                              1,  //锁用户
                                              1,  //退币保护
                                              0,  //超分
                                              0,  //是否添加流水
                                              0); //彩票模式
                    //ac.Execute(sqlString);
                    XCCloudRS232BLL.ExecuteSql(sqlString);
                    return(false);
                }
            }
            else
            {
                Info.GameInfo.ClearTimeoutCount(head.常规.游戏机编号, head.常规.退币保护启用标志);
            }

            if (!head.状态.是否正在使用限时送分优惠)  //正常退币
            {
                head.常规.当前卡片号   = "";
                head.常规.是否为首次投币 = true;
                bValue         += Coins;
                投币应答.锁机头        = false;
                投币应答.机头能上分      = isAllowIn;
                投币应答.机头能打票      = isAllowOut;
                msg            += "正常退币数据\r\n";
                if ((0 - head.投币.盈利数 > head.投币.每天净退币上限 || Coins > head.投币.单次退币上限) && !head.状态.是否忽略超分报警 && !head.彩票模式)
                {
                    投币应答.锁机头           = true;
                    投币应答.超出当日机头最大净退币上线 = true;
                    msg   += "触发超额报警\r\n";
                    是否超分报警 = true;
                }
                else
                {
                    投币应答.锁机头           = false;
                    投币应答.超出当日机头最大净退币上线 = false;
                }
                投币应答.币余额 = bValue;
                res      = true;
            }
            else   //当前机头正在使用限时送分,则要判断最小退币数
            {
                if (head.投币.最小退币数 > Coins)
                {
                    //不满足退币条件
                    投币应答.币余额   = member.币余额;
                    投币应答.机头能上分 = isAllowIn;
                    投币应答.机头能打票 = isAllowOut;
                    int 数 = Coins / pCoin;
                    投币应答.发脉冲数          = (head.开关.启用第二路上分信号) ?  数 * head.参数.第二路上分线投币时给游戏机信号数 :  数 * head.参数.投币时给游戏机信号数;
                    投币应答.是否将退币上回游戏机    = true;
                    投币应答.是否正在使用限时送分优惠券 = true;
                    msg += "限时送分中不满足退币条件\r\n";
                    return(false);
                }
                else
                {
                    //满足退币条件
                    head.常规.当前卡片号        = "";
                    head.常规.是否为首次投币      = true;
                    head.投币.退币数         += Coins;
                    head.状态.是否正在使用限时送分优惠 = false;
                    bValue            += Coins;
                    投币应答.是否正在使用限时送分优惠券 = false;
                    投币应答.币余额           = bValue;
                    res  = true;
                    msg += "限时送分中满足退币条件\r\n";
                }
            }


            sqlString = string.Format("exec TBProc '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}'",
                                      head.常规.路由器编号,
                                      head.常规.机头地址,
                                      SN,
                                      Coins,
                                      ICCard,
                                      (int)cType,
                                      ((bValue > PubLib.会员余额上限 || member.退币数 - member.投币数 > PubLib.会员净退币数上限) && head.彩票模式) ? 1 : 0,
                                      0,
                                      是否超分报警 ? 1 : 0,
                                      res ? 1 : 0,
                                      head.彩票模式 ? 1 : 0);

            //DataTable dt = ac.ExecuteQueryReturnTable(sqlString);
            DataTable dt  = XCCloudRS232BLL.ExecuterSqlToTable(sqlString);
            DataRow   row = dt.Rows[0];

            //有效电子投币
            if (head.彩票模式)
            {
                bValue = Convert.ToInt32(row["lottery"].ToString());
            }
            else
            {
                bValue = Convert.ToInt32(row["balance"].ToString());
            }
            投币应答.币余额           = bValue;
            投币应答.是否启用卡片专卡专用    = (row["LockHead"].ToString() == "1");
            投币应答.是否正在使用限时送分优惠券 = head.状态.是否正在使用限时送分优惠;
            msg += "找到会员信息\r\n";

            if (head.彩票模式)
            {
                member.锁会员 = false;
                member.票余额 = bValue;
            }
            else
            {
                member.币余额 = bValue;
                if (bValue > PubLib.会员余额上限 || member.退币数 - member.投币数 > PubLib.会员净退币数上限)
                {
                    member.锁会员 = true;
                    msg       += "写入新余额并锁定会员\r\n";
                }
                else
                {
                    member.锁会员 = false;
                    msg       += "写入新余额\r\n";
                }
            }

            member.Update();

            return(res);
        }