private List <CustomerOrder> ParseOrders(string orderStr)
        {
            List <CustomerOrder> orderList = new List <CustomerOrder>();
            var orderElements = orderStr.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);;

            foreach (string element in orderElements)
            {
                //(Fried sausage,cowgirl,1.0);
                if (element.Length > 0)
                {
                    string sourceStr = element.Substring(1, element.Length - 2);

                    string[] infos = sourceStr.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    if (infos.Length >= 3 && infos.Length <= 4)
                    {
                        var order = new CustomerOrder();
                        if (infos[0].Contains("&"))
                        {
                            int pos = infos[0].IndexOf('&');
                            order.foods.Add(infos[0].Substring(0, pos));
                            order.foods.Add(infos[0].Substring(pos + 1, infos[0].Length - pos - 1));
                        }
                        else
                        {
                            order.foods.Add(infos[0]);
                        }
                        order.customer = infos[1];
                        //MyDebug.WriteLine(sourceStr + " ==== " + infos[2]);
                        order.weight = infos[2].ToFloat();

                        if (infos.Length == 4)
                        {
                            order.latestFirstCome = infos[3].ToInt32();
                        }
                        orderList.Add(order);

                        MyDebug.Assert(CustomerDataManager.GetInstance().IsCustomerKey(order.customer), "Error customer key : " + order.customer + ", Order :" + element);
                        m_customers.Add(order.customer);
                        if (order.foods.Count == 1)
                        {
                            MyDebug.Assert(FoodDataManager.GetInstance().IsFoodKey(order.foods[0]), "Error food key : " + order.foods[0] + ", Order :" + element);
                            m_foods.Add(order.foods[0]);
                        }
                        else
                        {
                            string combineFood = string.Format("{0}&{1}", order.foods[0], order.foods[1]);
                            MyDebug.Assert(FoodDataManager.GetInstance().IsFoodKey(combineFood), "Error food key : " + combineFood + ", Order :" + element);
                            m_foods.Add(combineFood);
                        }
                    }
                    else
                    {
                        MyDebug.Assert(false, element);
                    }
                }
            }
            return(orderList);
        }
        private List <CustomerOrder> ParseSpecialOrders(string orderStr)
        {
            List <CustomerOrder> orderList = new List <CustomerOrder>();
            var orderElements = orderStr.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);;

            foreach (string element in orderElements)
            {
                //([7,8],Fried bread,ents);
                if (element.Length > 0)
                {
                    // 去掉括号
                    string sourceStr = element.Substring(2, element.Length - 3);

                    var order = new CustomerOrder();

                    int      index       = sourceStr.IndexOf(']');
                    string   intervalStr = sourceStr.Substring(0, index);
                    string[] interval    = intervalStr.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    MyDebug.Assert(interval.Length == 2, "");
                    order.interval.min = interval[0].ToInt32();
                    order.interval.max = interval[1].ToInt32();

                    int    lastIdx  = sourceStr.LastIndexOf(',');
                    string foodName = sourceStr.Substring(index + 2, lastIdx - index - 2);
                    if (foodName.Contains("&"))
                    {
                        int pos = foodName.IndexOf('&');
                        order.foods.Add(foodName.Substring(0, pos));
                        order.foods.Add(foodName.Substring(pos + 1, foodName.Length - pos - 1));
                    }
                    else
                    {
                        order.foods.Add(foodName);
                    }

                    string customerName = sourceStr.Substring(lastIdx + 1, sourceStr.Length - lastIdx - 1);
                    order.customer = customerName;

                    orderList.Add(order);

                    MyDebug.Assert(CustomerDataManager.GetInstance().IsCustomerKey(order.customer), "Error customer key : " + order.customer + ", Order :" + element);
                    m_customers.Add(order.customer);
                    if (order.foods.Count == 1)
                    {
                        MyDebug.Assert(FoodDataManager.GetInstance().IsFoodKey(order.foods[0]), "Error food key : " + order.foods[0] + ", Order :" + element);
                        m_foods.Add(order.foods[0]);
                    }
                    else
                    {
                        string combineFood = string.Format("{0}&{1}", order.foods[0], order.foods[1]);
                        MyDebug.Assert(FoodDataManager.GetInstance().IsFoodKey(combineFood), "Error food key : " + combineFood + ", Order :" + element);
                        m_foods.Add(combineFood);
                    }
                }
            }
            return(orderList);
        }
Beispiel #3
0
        static public FoodDataManager GetInstance()
        {
            if (_instance == null)
            {
                _instance = new FoodDataManager();
            }

            return(_instance);
        }
        public void parseRequirement(string requirementStr)
        {
            if (requirementStr.Length > 0)
            {
                var reqStrList = requirementStr.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);;
                foreach (string reqStr in reqStrList)
                {
                    if (reqStr == "no_lost")
                    {
                        requirements.allowLostCustomer = false;
                    }
                    else if (reqStr == "no_burn")
                    {
                        requirements.allowBurn = false;
                    }
                    else
                    {
                        if (reqStr.Length > 0 && reqStr.Contains("*"))
                        {
                            int    index = reqStr.IndexOf('*');
                            string key   = reqStr.Substring(0, index);
                            int    num   = reqStr.Substring(index + 1, reqStr.Length - index - 1).ToInt32();

                            if (CustomerDataManager.GetInstance().IsCustomerKey(key))
                            {
                                requirements.requiredCustomers.Add(new Requirements.NameAndNumber(key, num));
                            }
                            else if (FoodDataManager.GetInstance().IsFoodKey(key))
                            {
                                requirements.requiredFoods.Add(new Requirements.NameAndNumber(key, num));
                            }
                        }
                    }
                }
            }
        }
        public void AddOrders(List <OrderData> orders)
        {
            var cnn = new SQLiteConnection(m_connectString);

            if (cnn.State != System.Data.ConnectionState.Connecting)
            {
                cnn.Open();

                var cmd = cnn.CreateCommand();
                cmd.CommandText = "INSERT INTO orderfood(customer_id,customer_key,Name_CN,food_id,food_key,foodname_cn,wait_time,tips,consider_time) VALUES(@customer_id,@customer_key,@Name_CN,@food_id,@food_key,@foodname_cn,@wait_time,@tips,@consider_time)";

                foreach (OrderData ord in orders)
                {
                    var cusInfo  = CustomerDataManager.GetInstance().GetCustomer(ord.customer);
                    var foodInfo = FoodDataManager.GetInstance().GetFood(ord.food);

                    cmd.Parameters.Add("customer_id", System.Data.DbType.Int32).Value   = cusInfo.id;
                    cmd.Parameters.Add("customer_key", System.Data.DbType.String).Value = cusInfo.key;
                    cmd.Parameters.Add("Name_CN", System.Data.DbType.String).Value      = cusInfo.display_name["cn"];

                    cmd.Parameters.Add("food_id", System.Data.DbType.Int32).Value      = foodInfo.id;
                    cmd.Parameters.Add("food_key", System.Data.DbType.String).Value    = foodInfo.key;
                    cmd.Parameters.Add("foodname_cn", System.Data.DbType.String).Value = foodInfo.display_name["cn"];

                    cmd.Parameters.Add("wait_time", System.Data.DbType.Double).Value     = ord.wait_time;
                    cmd.Parameters.Add("tips", System.Data.DbType.Int32).Value           = ord.tip;
                    cmd.Parameters.Add("consider_time", System.Data.DbType.Double).Value = ord.consider_time;
                    int ret = cmd.ExecuteNonQuery();
                    MyDebug.WriteLine("Add Order result : " + ret);
                }
                cmd.Dispose();
            }

            cnn.Close();
            cnn.Dispose();
        }
        public void UpdateOrders(List <OrderData> orders)
        {
            var cnn = new SQLiteConnection(m_connectString);

            if (cnn.State != System.Data.ConnectionState.Connecting)
            {
                cnn.Open();

                string addCmd = "INSERT INTO orderfood(customer_id,customer_key,Name_CN,food_id,food_key,foodname_cn,wait_time,tips,consider_time) VALUES(@customer_id,@customer_key,@Name_CN,@food_id,@food_key,@foodname_cn,@wait_time,@tips,@consider_time)";
                foreach (OrderData ord in orders)
                {
                    //cmd.CommandText = string.Format("SELECT * FROM orderfood WHERE customer_key={0},food_key={1}", ord.customer, ord.food);
                    var findCmd = cnn.CreateCommand();
                    findCmd.CommandText = string.Format("SELECT food_key " +
                                                        "FROM orderfood " +
                                                        "WHERE customer_key='{0}' AND food_key='{1}'", ord.customer, ord.food);
                    var  reader  = findCmd.ExecuteReader();
                    bool isExsit = reader.Read();
                    reader.Close();
                    findCmd.Dispose();

                    var updateOrAddCmd = cnn.CreateCommand();
                    if (isExsit)
                    {// 找到了
                        updateOrAddCmd.CommandText = string.Format("UPDATE orderfood " +
                                                                   "SET customer_id=@customer_id,customer_key=@customer_key,Name_CN=@Name_CN,food_id=@food_id,food_key=@food_key,foodname_cn=@foodname_cn,wait_time=@wait_time,tips=@tips,consider_time=@consider_time " +
                                                                   "WHERE customer_key='{0}' AND food_key='{1}'", ord.customer, ord.food);
                        MyDebug.WriteLine("Update Order");
                    }
                    else
                    {// 找不到
                        updateOrAddCmd.CommandText = addCmd;
                        MyDebug.WriteLine("Create Order");
                    }

                    var cusInfo  = CustomerDataManager.GetInstance().GetCustomer(ord.customer);
                    var foodInfo = FoodDataManager.GetInstance().GetFood(ord.food);

                    updateOrAddCmd.Parameters.Add("customer_id", System.Data.DbType.Int32).Value   = cusInfo.id;
                    updateOrAddCmd.Parameters.Add("customer_key", System.Data.DbType.String).Value = cusInfo.key;
                    updateOrAddCmd.Parameters.Add("Name_CN", System.Data.DbType.String).Value      = cusInfo.display_name["cn"];

                    updateOrAddCmd.Parameters.Add("food_id", System.Data.DbType.Int32).Value      = foodInfo.id;
                    updateOrAddCmd.Parameters.Add("food_key", System.Data.DbType.String).Value    = foodInfo.key;
                    updateOrAddCmd.Parameters.Add("foodname_cn", System.Data.DbType.String).Value = foodInfo.display_name["cn"];

                    updateOrAddCmd.Parameters.Add("wait_time", System.Data.DbType.Double).Value     = ord.wait_time;
                    updateOrAddCmd.Parameters.Add("tips", System.Data.DbType.Int32).Value           = ord.tip;
                    updateOrAddCmd.Parameters.Add("consider_time", System.Data.DbType.Double).Value = ord.consider_time;

                    try
                    {
                        int updateOrAddResult = updateOrAddCmd.ExecuteNonQuery();
                        MyDebug.WriteLine("Update Order result : " + updateOrAddResult);
                    }
                    catch (Exception e)
                    {
                        MyDebug.WriteLine(e);
                    }
                    updateOrAddCmd.Dispose();
                }
            }

            cnn.Close();
        }