Example #1
0
        /// <summary>
        /// Списывает кролика.
        /// Если кролик подсосный, то обнуляет поле с Кормилицей.
        /// Если кролик кормилица, то обнуляет детям поле с кормилицей
        /// </summary>
        /// <param name="sql">sql-подключение</param>
        /// <param name="rid">ID кролика</param>
        /// <param name="when">Дата списания</param>
        /// <param name="reason">Причина списания</param>
        /// <param name="notes">Заметки</param>
        public static void killRabbit(MySqlConnection sql, int rid, int daysPast, int reason, string notes)
        {
            if (rid == 0)
            {
                return;
            }

            string   when = DBHelper.DaysPastSqlDate(daysPast);
            AddressR a    = freeTier(sql, rid);

            freeName(sql, rid);
            MySqlCommand cmd = new MySqlCommand(String.Format("SELECT COALESCE(r_parent, 0) AS r_parent FROM rabbits WHERE r_id={0:d};", rid), sql);

            if (cmd.ExecuteScalar().ToString() != "0")  //если подсосный
            {
                cmd.CommandText = String.Format("UPDATE rabbits SET r_parent = NULL WHERE r_id={0:d};", rid);
                cmd.ExecuteNonQuery();
            }
            else
            {
                // если не подсосный, то ищем подсосных
                cmd = new MySqlCommand(String.Format("SELECT r_id FROM rabbits WHERE r_parent = {0:d};", rid), sql);
                MySqlDataReader rd = cmd.ExecuteReader();
                if (rd.Read())
                {
                    int c1 = rd.GetInt32("r_id");
                    rd.Close();
                    if (c1 != 0)
                    {
                        RabbitGetter.placeRabbit(sql, c1, a.Farm, a.Floor, a.Section);
                        cmd.CommandText = String.Format("UPDATE rabbits SET r_parent = NULL WHERE r_id={0:d};", c1);
                        cmd.ExecuteNonQuery();
                    }
                }
                else
                {
                    rd.Close();
                }
            }
            cmd.CommandText = String.Format("UPDATE rabbits SET r_parent = NULL, r_farm={1}, r_tier={2}, r_area={3}, r_tier_id={4} WHERE r_parent={0};",
                                            rid, DBHelper.Nullable(a.Farm), DBHelper.Nullable(a.TierId), a.Section, a.Floor
                                            );
            cmd.ExecuteNonQuery();

            cmd.CommandText = String.Format(@"COMMIT; CALL killRabbitDate({0:d}, {1:d}, '{2:s}', {3:s});", rid, reason, notes, when);
            cmd.ExecuteNonQuery();
        }
Example #2
0
        /// <summary>
        /// Освобождает клетку, в которой сидел кролик.
        /// </summary>
        /// <param name="rabbit">ID кролика, который сидит в клетке</param>
        public static AddressR freeTier(MySqlConnection sql, int rabbit)
        {
            MySqlCommand    cmd = new MySqlCommand(String.Format(@"SELECT 
    r_id, 
    r_farm, 
    r_tier, 
    r_tier_id, 
    r_area, 
    t_busy1, 
    t_busy2, 
    t_busy3, 
    t_busy4, 
    Coalesce(m_upper,0) AS m_upper, 
    Coalesce(m_lower,0) AS m_lower,
    m_id 
FROM rabbits 
    LEFT JOIN tiers ON r_tier = t_id
    LEFT JOIN minifarms ON r_farm = m_id
WHERE r_id={0:d}", rabbit), sql);
            MySqlDataReader rd  = cmd.ExecuteReader();
            AddressR        a   = null;

            if (rd.Read())
            {
                a = new AddressR(
                    DBHelper.GetNullableInt(rd, "r_farm"),
                    DBHelper.GetNullableInt(rd, "r_tier_id"),
                    rd.GetInt32("r_area"),
                    DBHelper.GetNullableInt(rd, "r_tier")
                    );
                int bs = DBHelper.GetNullableInt(rd, "t_busy" + (a.Section + 1).ToString());
                if (bs != rabbit)
                {
                    a.TierId = 0;
                }
            }
            rd.Close();

            if (a != null)
            {
                cmd.CommandText = String.Format("UPDATE tiers SET t_busy{0:d}=0 WHERE t_id={1:d};", a.Section + 1, a.TierId);
                cmd.ExecuteNonQuery();///Освобождает клетку
                ///Проверяет наличие кролика в таблице  rabbits с таким же адресом
                cmd.CommandText = String.Format(@"SELECT r_id 
                    FROM rabbits 
                    WHERE r_farm={0:d} AND r_tier={1:d} AND r_tier_id={2:d} AND r_area={3:d} AND r_id<>{4:d} AND r_parent IS NULL LIMIT 1;",
                                                DBHelper.Nullable(a.Farm), DBHelper.Nullable(a.TierId), a.Floor, a.Section, rabbit);
                rd = cmd.ExecuteReader();

                if (rd.Read())  ///если имеется, то клетка в таблице tiers заселяется найденным кроликом
                {
                    cmd.CommandText = String.Format("UPDATE tiers SET t_busy{0:d}={2:d} WHERE t_id={1:d};", a.Section + 1, a.TierId, rd.GetInt32("r_id"));
                    rd.Close();
                    cmd.ExecuteNonQuery();
                }
                else
                {
                    rd.Close();
                }
            }
            return(a);
        }