private bool _close = false; //线程终止标志

        #endregion Fields

        #region Constructors

        //构造函数
        public SeatExpenseForm(CSeat seat, int _seat_length, bool _seatLock, bool _auto_seat_card, DAO _dao)
        {
            seatLock = _seatLock;
            auto_seat_card = _auto_seat_card;
            seat_length = _seat_length;
            dao = _dao;

            if (seatLock)
            {
                m_Seats.Add(dao.get_seat("text", seat.text));
            }
            else
            {
                string cmd_str = "((chainId is null and text='" + seat.text + "') or (chainId is not null and chainId='" + seat.chainId + "'))"
                    + @" and (status=2 or status=6 or status=7 or status=8)";
                var seats = dao.get_seats(cmd_str);
                m_Seats.AddRange(seats);
            }

            var pars = new List<string>();
            pars.Add("paying");

            var vals = new List<string>();
            vals.Add("True");

            int count = m_Seats.Count;
            string update_str = @"update [Seat] set paying='True' where ";
            for (int i = 0; i < count; i++ )
            {
                update_str += "text='" + m_Seats[i].text + "'";
                if (i != count - 1)
                    update_str += " or ";
            }

            if (!dao.execute_command(update_str))
            {
                BathClass.printErrorMsg("手牌状态更新失败,如有超时浴资,请删除手牌重新载入");
            }

            InitializeComponent();
        }
 public ReserveOverDueForm(Seat seat)
 {
     dao = new DAO(LogIn.connectionString);
     m_seat = dao.get_seat("text='" + seat.text + "'");
     InitializeComponent();
 }
        private void tool_open_seat()
        {
            var db_new = new BathDBDataContext(LogIn.connectionString);
            string text = tSeat.Text;
            m_Seat = db_new.Seat.FirstOrDefault(x => x.text == text);
            if (m_Seat == null || (m_Seat.status != 2 && m_Seat.status != 6 && m_Seat.status != 7 && m_Seat.status != 8))
            {
                GeneralClass.printErrorMsg("手牌不存在或者不在使用中,不可查看消费!");
                return;
            }

            var dao = new DAO(LogIn.connectionString);
            var s = dao.get_seat("text", m_Seat.text);
            OrderCheckForm orderCheckForm = new OrderCheckForm(s, LogIn.connectionString, LogIn.options);
            orderCheckForm.ShowDialog();
            tSeat.Text = "";
        }
        //监控台位数据库改变
        /*private void watchSeat()
        {
            if (m_connection == null)
                m_connection = new SqlConnection(LogIn.connectionString);

            if (m_connection.State != ConnectionState.Open)
                m_connection.Open();

            SqlCommand cmd = m_connection.CreateCommand();
            cmd.Notification = null;//清除
            cmd.CommandText = "select id, oId, text, typeId, systemId, openTime, openEmployee, payTime, payEmployee, chainId, status From dbo.Seat";

            //监控台位数据库
            SqlDependency dependency = new SqlDependency(cmd);
            dependency.OnChange += new OnChangeEventHandler(seat_OnChange);

            //SqlDependency绑定的SqlCommand对象必须要执行一下,才能将SqlDependency对象的HasChange属性设为true
            SqlDataAdapter thisAdapter = new SqlDataAdapter(cmd);
            DataSet posDataSet = new DataSet();
            thisAdapter.Fill(posDataSet, "Seat");

            //刷新台位信息
            if (this.WindowState != FormWindowState.Minimized)
                update_seats();
            //刷新状态栏
            setStatus();
        }

        private delegate void watchSeatDelegate();

        //监控台位数据库改变
        private void seat_OnChange(object sender, SqlNotificationEventArgs e)
        {
            //因为是子线程,需要用invoke方法更新ui
            if (this.InvokeRequired)
            {
                this.Invoke(new watchSeatDelegate(watchSeat), null);
            }
            else
            {
                watchSeat();
            }

            SqlDependency dependency = (SqlDependency)sender;
            //通知之后,当前dependency失效,需要重新设置通知
            dependency.OnChange -= seat_OnChange;
        }*/
        //点击台位按钮
        private void btn_Click(object sender, EventArgs e)
        {
            var db_new = new BathDBDataContext(LogIn.connectionString);
            Button btn = sender as Button;
            btn.Enabled = false;
            btn.Enabled = true;

            var seat = db_new.Seat.FirstOrDefault(x => x.text == btn.Text);
            switch (seat.status)
            {
                case 2://正在使用
                case 6://警告
                case 7://押金离场
                case 8://重新结账
                    var dao = new DAO(LogIn.connectionString);
                    var s = dao.get_seat("text='" + seat.text + "'");
                    OrderCheckForm orderForm = new OrderCheckForm(s, LogIn.connectionString, LogIn.options);
                    orderForm.ShowDialog();
                    break;
                default:
                    break;
            }
        }
        private void print_seat_bill(Seat seat)
        {
            DataGridView dgv = new DataGridView();

            DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
            col.HeaderText = "手牌号";
            dgv.Columns.Add(col);

            DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
            col1.HeaderText = "项目名称";
            dgv.Columns.Add(col1);

            DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn();
            col2.HeaderText = "技师";
            dgv.Columns.Add(col2);

            DataGridViewTextBoxColumn col3 = new DataGridViewTextBoxColumn();
            col3.HeaderText = "单价";
            dgv.Columns.Add(col3);

            DataGridViewTextBoxColumn col4 = new DataGridViewTextBoxColumn();
            col4.HeaderText = "数量";
            dgv.Columns.Add(col4);

            DataGridViewTextBoxColumn col5 = new DataGridViewTextBoxColumn();
            col5.HeaderText = "金额";
            dgv.Columns.Add(col5);

            double money_pay = 0;
            var orders = db.Orders.Where(x => x.systemId == seat.systemId && !x.paid && x.deleteEmployee == null);
            foreach (var order in orders)
            {
                string[] row = new string[6];
                row[0] = order.text;
                row[1] = order.menu;
                row[2] = order.technician;

                var menu = db.Menu.FirstOrDefault(x => x.name == order.menu);
                if (menu != null)
                    row[3] = menu.price.ToString();

                row[4] = order.number.ToString();

                double money_tmp = 0;
                if (order.priceType == "每小时")
                {
                    row[3] = order.money.ToString() + "/时";
                    money_tmp = Math.Ceiling((GeneralClass.Now - order.inputTime).TotalHours) * order.money;
                }
                else
                {
                    money_tmp = order.money;
                }
                money_pay += money_tmp;
                row[5] = money_tmp.ToString();
                dgv.Rows.Add(row);
            }
            List<string> printCols = new List<string>();
            List<string> m_rooms = new List<string>();
            printCols.Add("包厢");
            printCols.Add("手牌");
            printCols.Add("项目名称");
            printCols.Add("技师");
            printCols.Add("单价");
            printCols.Add("数量");
            printCols.Add("金额");

            List<CSeat> seats = new List<CSeat>();
            var dao = new DAO(LogIn.connectionString);
            seats.Add(dao.get_seat("text='" + seat.text + "'"));
            foreach (var s in seats)
            {
                m_rooms.Add(dao.get_seat_room(s.text));
            }

            PrintSeatBill.Print_DataGridView(seats,m_rooms, null, "预打账单", dgv, printCols, money_pay.ToString(),
                LogIn.options.companyName);
        }