Beispiel #1
0
        //自动滚项目
        private void order_auto_add_thread()
        {
            while (true)
            {
                try
                {
                    var dc = new BathDBDataContext(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);
                                    }
                                }
                                else 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.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();
                }
                catch
                {
                }
            }
        }