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); }
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); }
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; } }
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; } }
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); }