public static void MakeFuck(MySqlConnection sql, int femaleId, int maleId, int daysPast, int worker, bool syntetic) { OneRabbit f = RabbitGetter.GetRabbit(sql, femaleId); String type = F**k.GetFuckTypeStr(FuckType.Sluchka); string when = DBHelper.DaysPastSqlDate(daysPast); if (syntetic) { type = F**k.GetFuckTypeStr(FuckType.Syntetic); } else if (f.Status > 0) { type = F**k.GetFuckTypeStr(FuckType.Vyazka); } MySqlCommand cmd = new MySqlCommand(String.Format("UPDATE f***s SET f_last=0 WHERE f_rabid={0:d};", femaleId), sql); cmd.ExecuteNonQuery(); cmd.CommandText = String.Format(@"INSERT INTO f***s(f_rabid,f_date,f_partner,f_state,f_type,f_last,f_notes,f_worker) VALUES({0:d},{1:s},{2:d},'sukrol','{3:s}',1,'',{4:d});", femaleId, when, maleId, type, worker); cmd.ExecuteNonQuery(); // cmd.CommandText = String.Format("SELECT r_status,TODAYS(r_last_fuck_okrol FROM rabbits WHERE r_id="); cmd.CommandText = String.Format("UPDATE rabbits SET r_event_date={0:s}, r_event='{1:s}', r_rate=r_rate+IF(MONTH(r_event_date) BETWEEN 8 AND 12,{3:d},0) WHERE r_id={2:d};", when, type, femaleId, Rate.AUTUMN_FUCK_RATE); cmd.ExecuteNonQuery(); if (!syntetic)///если ИО то не ставим, что самец работал { cmd.CommandText = String.Format("UPDATE rabbits SET r_last_fuck_okrol={0:s}, r_rate=r_rate+1 WHERE r_id={1:d};", when, maleId); cmd.ExecuteNonQuery(); } }
public int NewRabbit(OneRabbit r, int mom) { int rId = RabbitGetter.newRabbit(sql, r, mom); #if !DEMO Import.RabbitImp(sql, rId, r.Group); #endif return(rId); }
public int NewRabbit(OneRabbit r, int mom, int clientId, string fileGuid) { int oldId = r.ID; int rId = RabbitGetter.newRabbit(sql, r, mom); Import.RabbitImp(sql, rId, r.Group, clientId, oldId, fileGuid); if (Import.AscendantExists(sql, oldId, clientId)) { Import.AdaptExportedAscendant(sql, oldId, clientId, rId, r.Sex); } return(rId); }
/// <summary> /// Получает список забитых кроликов /// </summary> /// <param name="dt">Дата забоя</param> public static DeadRabbit[] getVictims(MySqlConnection sql, DateTime dt) { List <DeadRabbit> result = new List <DeadRabbit>(); MySqlCommand cmd = new MySqlCommand("", sql); cmd.CommandText = String.Format(@"SELECT {1:s}, d_date FROM dead WHERE d_reason=3 AND DATE(d_date)='{0:yyyy-MM-dd}';", dt, RabbitGetter.getAdultRabbit_FieldsSet(RabAliveState.DEAD)); MySqlDataReader rd = cmd.ExecuteReader(); while (rd.Read()) { result.Add(RabbitGetter.fillDeadRabbit(rd)); } rd.Close(); return(result.ToArray()); }
/// <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(); }
public void SetRabbitVaccine(int rid, int vid, DateTime date) { RabbitGetter.SetRabbitVaccine(sql, rid, vid, date); }
public void SetRabbitVaccine(int rid, int vid) { RabbitGetter.SetRabbitVaccine(sql, rid, vid); }
public int makeOkrol(int female, int daysPast, int children, int dead) { return(RabbitGetter.MakeOkrol(sql, female, daysPast, children, dead)); }
public RabVac[] GetRabVac(int rabId) { return(RabbitGetter.GetRabVacs(sql, rabId)); }
public int GetAliveChildrenCount(int rid, Rabbit.SexType parentSex) { return(RabbitGetter.GetAliveChildrenCount(sql, rid, parentSex)); }
public OneRabbit GetRabbit(int rid, RabAliveState state) { return(RabbitGetter.GetRabbit(sql, rid, state)); }
public void setRabbitSex(int rid, Rabbit.SexType sex) { RabbitGetter.setRabbitSex(sql, rid, sex); }
public OneRabbit getLiveDeadRabbit(int rabbit) { return(RabbitGetter.getLiveDeadRabbit(sql, rabbit)); }
public void KillRabbit(int id, int daysPast, int reason, string notes) { RabbitGetter.killRabbit(sql, id, daysPast, reason, notes); }
public void CountKids(int rid, int dead, int killed, int added, int yid) { RabbitGetter.countKids(sql, rid, dead, killed, added, yid); }
public void setBon(int rabbit, string bon) { RabbitGetter.setBon(sql, rabbit, bon); }
public void replaceRabbit(int rid, int farm, int tierFloor, int sec) { RabbitGetter.replaceRabbit(sql, rid, farm, tierFloor, sec); }
//public ICatalog getVaccines() //{ // return new Vaccines(sql); //} public string makeName(int nm, int sur, int sec, int grp, Rabbit.SexType sex) { return(RabbitGetter.makeName(sql, nm, sur, sec, grp, sex)); }
public void RabVacUnable(int rid, int vid, bool unable) { RabbitGetter.RabVacUnable(sql, rid, vid, unable); }
public int CloneRabbit(int rid, int count, Rabbit.SexType sex, int mom) { return(RabbitGetter.cloneRabbit(sql, rid, count, sex, mom)); }
public OneRabbit[] getParents(int rabbit, int age) { return(RabbitGetter.getParents(sql, rabbit, age)); }
public void SetRabbit(OneRabbit r) { RabbitGetter.SetRabbit(sql, r); }
public Rabbit[] GetDescendants(int ascendantId) { return(RabbitGetter.GetDescendants(sql, ascendantId)); }
public OneRabbit GetRabbit(int rid) { return(RabbitGetter.GetRabbit(sql, rid)); }
public Dictionary <string, int> GetDeadChildrenCount(int rid, Rabbit.SexType parentSex) { return(RabbitGetter.GetDeadChildrenCount(sql, rid, parentSex)); }
public AdultRabbit[] getMothers(int age, int agediff) { return(RabbitGetter.getMothers(sql, age, agediff)); }
public void placeSucker(int sucker, int mother) { RabbitGetter.placeSucker(sql, sucker, mother); }
public void makeProholost(int female, int daysPast) { RabbitGetter.MakeProholost(sql, female, daysPast); }
/// <summary> /// Получает родословную кролика с заданным rabId /// </summary> /// <param name="rabId">ID кролика</param> /// <param name="con"></param> /// <param name="lineage">Стэк родословной для предотвращения рекурсии</param> /// <returns></returns> private static RabTreeData getRabbitGenTree(MySqlConnection con, int rabId, int birthplace, int nameId, Stack <int> lineage)//, int level) { if (rabId == 0) { return(null); } //проверка на рекурсию, которая могла возникнуть после конвертации из старой mia-файла if (lineage.Count > 700) { //_logger.Warn("cnt:" + lineage.Count.ToString() + " we have suspect infinity inheritance loop: " + String.Join(",", Array.ConvertAll<int, string>(lineage.ToArray(), new Converter<int, string>(convIntToString)))); return(null); } lineage.Push(rabId); MySqlCommand cmd = new MySqlCommand("", con); MySqlDataReader rd = null; RabAliveState state = RabAliveState.ALIVE; bool inFarm = true; string query = @"SELECT r_id, {0:s} name, Coalesce(r_name,0) AS r_name, Coalesce(r_surname,0) AS r_surname, Coalesce(r_secname,0) AS r_secname, Coalesce(r_mother, 0) AS r_mother, Coalesce(r_father, 0) AS r_father, r_bon, r_born, r_breed, b_short_name, TO_DAYS(NOW())-TO_DAYS(r_born) age, Coalesce(r_birthplace,0) birthplace FROM {1:s} INNER JOIN breeds ON b_id = r_breed WHERE r_id={2:d} LIMIT 1;"; #if !DEMO if (birthplace != 0) //если ищем импортированного кролика { List <OneImport> lst = Import.Search(con, new Filters(Filters.RAB_ID, rabId.ToString())); inFarm = lst.Count > 0; ///если кролик не был импортирован в поголовье ///может возникнуть ситуация, что импортированный кролик имеет id родителя, который содержится и в import_ascendants и в imports if (inFarm && Import.AscendantExists(con, rabId, birthplace)) ///устранение неоднозначности { inFarm = RabbitGetter.GetRabbit(con, rabId).NameID == nameId; } } #endif if (inFarm) { cmd.CommandText = String.Format(query, "rabname(r_id,1)", "rabbits", rabId); rd = cmd.ExecuteReader(); if (!rd.HasRows) { rd.Close(); cmd.CommandText = String.Format(query, "deadname(r_id,1)", "dead", rabId); rd = cmd.ExecuteReader(); state = RabAliveState.DEAD; } } if (!inFarm) { cmd.CommandText = String.Format(query, String.Format("ascname(r_id,{0:d},1)", birthplace), "import_ascendants", rabId); rd = cmd.ExecuteReader(); state = RabAliveState.IMPORTED_ASCENDANT; } RabTreeData res = null; if (rd != null && rd.Read()) { res = new RabTreeData( rd.GetInt32("r_id"), rd.GetString("name"), rd.GetInt32("r_name"), rd.GetDateTime("r_born"), rd.GetInt32("r_breed") ); res.Bon = Rabbit.GetFBon(rd.GetString("r_bon"), true); res.BreedShortName = rd.GetString("b_short_name"); res.BirthPlace = rd.GetInt32("birthplace"); int mom = rd.GetInt32("r_mother"); int dad = rd.GetInt32("r_father"); int surname = rd.GetInt32("r_surname"); int secname = rd.GetInt32("r_secname"); rd.Close(); res.State = state; RabTreeData m = getRabbitGenTree(con, mom, birthplace, surname, lineage); RabTreeData d = getRabbitGenTree(con, dad, birthplace, secname, lineage); if (m != null) { res.Mother = m; } if (d != null) { res.Father = d; } } rd.Close(); return(res); }
public void combineGroups(int rabfrom, int rabto) { RabbitGetter.combineGroups(sql, rabfrom, rabto); }