private void MainWindow_Load(object sender, EventArgs e) { var db = new WatcherDBDataContext(connectionString); if (!db.DatabaseExists()) { MessageBox.Show("连接IP不对或者网络不通,请重试!"); this.Close(); return; } m_thread_order = new Thread(new ThreadStart(orderTimer_Elapsed)); m_thread_order.IsBackground = true; m_thread_order.Start(); m_thread_unnormal = new Thread(new ThreadStart(seatTimer_Elapsed)); m_thread_unnormal.IsBackground = true; m_thread_unnormal.Start(); timeLimit.Text = get_config_by_key("time_limit"); moneyLimit.Text = get_config_by_key("money_limit"); if (timeLimit.Text != "") { tl = Convert.ToInt32(timeLimit.Text); } ml = moneyLimit.Text; m_thread_clearMemory = new Thread(new ThreadStart(clear_Memory)); m_thread_clearMemory.IsBackground = true; m_thread_clearMemory.Start(); this.WindowState = FormWindowState.Minimized; }
//获取员工权限 public static bool getAuthority(WatcherDBDataContext db, Employee employee, string pro) { var authority = db.Authority.FirstOrDefault(x => x.emplyeeId == employee.id); if (authority == null) { authority = db.Authority.FirstOrDefault(x => x.jobId == employee.jobId); } var proVal = authority.GetType().GetProperty(pro); //if (proVal == null) //return true; return(Convert.ToBoolean(proVal.GetValue(authority, null))); }
//获取手牌消费金额 public double get_seat_expense(WatcherDBDataContext dc, Seat seat) { var orders = dc.Orders.Where(x => x.systemId == seat.systemId && x.deleteEmployee == null && !x.paid); double money = 0; var tmp_orders = orders.Where(x => x.priceType == null || x.priceType == "停止消费"); if (tmp_orders.Count() != 0) { money = tmp_orders.Sum(x => x.money); } tmp_orders = orders.Where(x => x.priceType == "每小时"); if (tmp_orders.Count() != 0) { money += tmp_orders.Sum(x => x.money * Math.Ceiling((DateTime.Now - x.inputTime).TotalHours)); } return(Math.Round(money, 0)); }
//每隔1秒监听一次,检测异常手牌 private void seatTimer_Elapsed() { while (true) { try { var dc = new WatcherDBDataContext(connectionString); TransactionOptions transOptions = new TransactionOptions() { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }; using (new TransactionScope(TransactionScopeOption.Required, transOptions)) { var seats = dc.Seat.Where(x => x.status == 2); seats = seats.Where(x => x.unwarn == null); seats = seats.Where(x => x.paying == null || !x.paying.Value); seats = seats.Where(x => x.ordering == null || !x.ordering.Value); foreach (Seat seat in seats) { if (tl != -1 && (DateTime.Now - seat.openTime.Value).TotalHours >= tl) { seat.status = 6; continue; } if (ml != "" && get_seat_expense(dc, seat) >= Convert.ToDouble(ml)) { seat.status = 6; continue; } } } dc.SubmitChanges(); Thread.Sleep(5 * 60 * 1000); } catch { } } }
//轮询订单数据库,查看是否需要添加 private void check_Orders() { //var dao = new DAO(connectionString); var dc = new WatcherDBDataContext(connectionString); TransactionOptions transOptions = new TransactionOptions() { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }; using (new TransactionScope(TransactionScopeOption.Required, transOptions)) { var all_menus = dc.Menu.Where(x => x.addAutomatic); var menus = all_menus.Select(x => x.name).ToList();//需要自动续费的项目名称 var orders = dc.Orders.Where(x => menus.Contains(x.menu) && !x.paid && x.deleteEmployee == null && x.stopTiming == null); var seats = dc.Seat.Where(x => x.status == 2 || x.status == 6 || x.status == 7); seats = seats.Where(x => x.ordering == null || !x.ordering.Value); seats = seats.Where(x => x.paying == null || !x.paying.Value); foreach (var seat in seats) { var seat_orders = orders.Where(x => x.text == seat.text); var add_menus = seat_orders.Select(x => x.menu).Distinct(); foreach (var add_menu in add_menus) { var add_orders = seat_orders.Where(x => x.menu == add_menu && (x.priceType == null || x.priceType != "停止消费")); if (add_orders.Count() == 0) { continue; } var max_time = add_orders.Max(x => x.inputTime); var max_order = add_orders.OrderByDescending(x => x.inputTime).FirstOrDefault(); if (max_order == null || max_order.priceType == "每小时") { continue; } var the_menu = all_menus.FirstOrDefault(x => x.name == add_menu); double menu_time = the_menu.timeLimitHour.Value * 60 + the_menu.timeLimitMiniute.Value; if ((the_menu.timeLimitType == null || the_menu.timeLimitType == "限时长") && (DateTime.Now - max_order.inputTime).TotalMinutes < menu_time) { continue; } else if ((the_menu.timeLimitType != null && the_menu.timeLimitType == "限时间")) { DateTime dt = DateTime.Parse(DateTime.Now.ToLongDateString() + " " + the_menu.timeLimitHour.ToString() + ":" + the_menu.timeLimitMiniute.ToString() + ":00"); DateTime dt_st = DateTime.Parse(DateTime.Now.ToLongDateString() + " 8:00:00"); if (!(max_order.inputTime <= dt_st && DateTime.Now >= dt)) { continue; } } if (the_menu.addType == "按项目单位") { Orders new_order = new Orders(); new_order.menu = max_order.menu; new_order.text = max_order.text; new_order.systemId = seat.systemId; new_order.number = 1; new_order.money = the_menu.price; new_order.technician = max_order.technician; new_order.techType = max_order.techType; new_order.inputTime = DateTime.Now; new_order.inputEmployee = "电脑加收"; new_order.paid = false; //如果这个检查手牌的状态在进SeatExpenseForm之前,但是subitchanges在进SeatExpenseForm之后, //那么dgvExpense将会看不到超时浴资 dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, seat); if ((seat.status == 2 || seat.status == 6 || seat.status == 7) && (seat.paying == null || !seat.paying.Value) && (seat.ordering == null || !seat.ordering.Value)) { dc.Orders.InsertOnSubmit(new_order); //dc.SubmitChanges(); } //string cmd_str = @" declare @status int" // + @" declare @ordering bit, @paying bit" // + @" select @status=status, @paying=paying, @ordering=ordering from [Seat] where text='" // + seat.text + "'" // + @" if (@status=2 or @status=6 or @status=7) and (@paying is null or @paying=0) and (@ordering is null or @ordering=0)" // + @" insert into [Orders](menu,text,systemId,number,money,technician,techType,inputTime,inputEmployee,paid)" // + @"values('" + max_order.menu + "','" + max_order.text + "','" + seat.systemId + "',1," + the_menu.price + ","; //if (max_order.technician == null) // cmd_str += "null"; //else // cmd_str += "'" + max_order.technician + "'"; //if (max_order.techType == null) // cmd_str += ",null"; //else // cmd_str += ",'" + max_order.techType + "'"; //cmd_str += ",getdate(),'电脑加收','False')"; //dao.execute_command(cmd_str); } else if (the_menu.addType == "按时间") { //string cmd_str = @" declare @status int" // + @" declare @ordering bit, @paying bit" // + @" select @status=status, @paying=paying, @ordering=ordering from [Seat] where text='" // + seat.text + "'" // + @" if (@status=2 or @status=6 or @status=7) and (@paying is null or @paying=0) and (@ordering is null or @ordering=0)" // + @" insert into [Orders](menu,text,systemId,number,priceType,money,technician,techType,inputTime,inputEmployee,paid)" // + @"values('" + max_order.menu + "','" + max_order.text + "','" + seat.systemId + "',1,'每小时'," + // Convert.ToDouble(the_menu.addMoney) + ","; //if (max_order.technician == null) // cmd_str += "null"; //else // cmd_str += "'" + max_order.technician + "'"; //if (max_order.techType == null) // cmd_str += ",null"; //else // cmd_str += ",'" + max_order.techType + "'"; //cmd_str += ",getdate(),'电脑加收','False')"; //dao.execute_command(cmd_str); Orders new_order = new Orders(); new_order.menu = max_order.menu; new_order.text = max_order.text; new_order.systemId = seat.systemId; new_order.number = 1; new_order.priceType = "每小时"; new_order.money = Convert.ToDouble(the_menu.addMoney); new_order.technician = max_order.technician; new_order.techType = max_order.techType; new_order.inputTime = DateTime.Now; new_order.inputEmployee = "电脑加收"; new_order.paid = false; dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, seat); if ((seat.status == 2 || seat.status == 6 || seat.status == 7) && (seat.paying == null || !seat.paying.Value) && (seat.ordering == null || !seat.ordering.Value)) { dc.Orders.InsertOnSubmit(new_order); //dc.SubmitChanges(); } } } } } dc.SubmitChanges(); }