static void Main(string[] args) { DozoryApi api = new DozoryApi(); OrgAuth auth = new OrgAuth(152,"*****"); List<int> arg = new List<int>(); arg.Add(40558); arg.Add(137495); //string url = UrlConstuctor.GetOrgMembersStatusUrl(152, "tOwPW4GB", arg,DateTime.Now.AddDays(1)); Dictionary<int, PersonInfo> result = DozoryApi.GetPersonsInfo(arg); //OrgInfo result = DozoryApi.GetOrgMembers(152); //string url = UrlConstuctor.getStorageUrl(auth, DateTime.Now, StorageType.Main); //List<StorageOperation> result = DozoryApi.GetStorageDay(auth, DateTime.Now.AddDays(-1), StorageType.Main); //string url = UrlConstuctor.GetTreasureUrl(auth, DateTime.Now, TreasureType.Money); //List<TreasureOperation> result = DozoryApi.GetTreasureDay(auth, DateTime.Now.AddDays(-1), TreasureType.Money); //List<string> llist = Logs.GetLogsByDay(DateTime.Now); Console.WriteLine("100500"); }
/// <summary> /// Создатель /// </summary> /// <param name="begin">Начальная дата</param> /// <param name="end">Конечная дата</param> /// <param name="storages">Перечень складов</param> /// <param name="treasures">Перечень казн</param> /// <param name="org">Данные организации</param> public Reqest(DateTime begin, DateTime end, List<StorageType> storages, List<TreasureType> treasures, OrgAuth org) { _begin = begin; _treasures = treasures; _storages = storages; _end = end; _org = org; }
/// <summary> /// Создатель класса /// </summary> /// <param name="org">Данные об организации</param> /// <param name="begin">Начальная дата</param> /// <param name="end">Конечная дата</param> public Responce(OrgAuth org, DateTime begin, DateTime end) { _org = org; _end = end; _begin = begin; _storages = new Dictionary<StorageType, List<StorageOperation>>(); _treasures = new Dictionary<TreasureType, List<TreasureOperation>>(); }
/// <summary> /// Создание url для доступа к API склада /// </summary> /// <param name="auth">Данные авторизации организации</param> /// <param name="date">Дата</param> /// <param name="storageType">Тип склада</param> /// <returns></returns> public static string GetStorageUrl(OrgAuth auth, DateTime date, StorageType storageType) { string result; string type; string dt = date.Day.ToString().PadLeft(2, '0') + "." + date.Month.ToString().PadLeft(2, '0') + "." + date.Year; if (storageType == StorageType.Main) { type = "storage"; } else if (storageType == StorageType.Second) { type = "aux_storage"; } else if (storageType == StorageType.Mods) { type = "mods_storage"; } else if (storageType == StorageType.Prof) { type = "prof_storage"; } else if (storageType == StorageType.Lib) { type = "lib_storage"; } else { throw new SetParameterError("Задан некорректный тип склада!"); } result = MainUrl + "?rm=org_storage_info"; result += "&org_id=" + auth.Id; result += "&date=" + dt; result += "&type=" + type; result += "&sign=" + Md5(auth.Id + auth.Password + dt + type); return result; }
/// <summary> /// Создание url для доступа к API казны /// </summary> /// <param name="auth">Данные авторизации организации</param> /// <param name="date">Дата</param> /// <param name="treasureType">Тип казны</param> /// <returns></returns> public static string GetTreasureUrl(OrgAuth auth, DateTime date, TreasureType treasureType) { string result; string type; string dt = date.Day.ToString().PadLeft(2, '0') + "." + date.Month.ToString().PadLeft(2, '0') + "." + date.Year; if (treasureType == TreasureType.Money) { type = "money"; } else if (treasureType == TreasureType.Taler) { type = "talers"; } else if (treasureType == TreasureType.Exp) { type = "exp"; } else { throw new SetParameterError("Задан некорректный тип склада!"); } result = MainUrl + "?rm=org_treasury_info"; result += "&org_id=" + auth.Id; result += "&date=" + dt; result += "&type=" + type; result += "&sign=" + Md5(auth.Id + auth.Password + dt + type); return result; }
/// <summary> /// Проверка онлайн-статуса членов организации /// </summary> /// <param name="auth">Авторизация организации</param> /// <param name="list">Спмсок ID персонажей</param> /// <param name="date">Текущая дата по мск</param> /// <returns></returns> public static Dictionary<int, PersonStatus> GetOrgMembersStatus(OrgAuth auth, List<int> list, DateTime date) { var result = new Dictionary<int, PersonStatus>(); result.Clear(); //Остаток после полных партий int mod = list.Count%MaxPersonsInQuery; //Полных партий int full = list.Count/MaxPersonsInQuery; //оставшиеся - тоже партия if (mod != 0) full++; var doc = new XmlDocument(); for (int i = 0; i < full; i++) { int ii = 0; var arguments = new List<int>(); //Пока не набираем полную партию или не кончается список пишем id в запрос while ((ii != MaxPersonsInQuery) || (ii != list.Count)) { arguments.Add(list[ii]); ii++; } //Получаем строку запроса string query = UrlConstuctor.GetOrgMembersStatusUrl(auth.Id, auth.Password, arguments, date); //Загружаем данные о персонажах doc.Load(query); //Проверяем на наличие ошибки XmlNodeList errors = doc.GetElementsByTagName("error"); if (errors.Count == 0) { XmlNodeList persons = doc.GetElementsByTagName("person"); //Перебмраем пришедшие данные foreach (XmlNode person in persons) { int id = Int32.Parse(person.Attributes["id"].Value); PersonStatus status = PersonStatus.Online; if (person.Attributes["status"].Value == "offline") { status = PersonStatus.Offline; } result.Add(id, status); } } else { //Если ошибка throw new ApiAccessError(errors[0].InnerText); } } return result; }
/// <summary> /// Загрузка списка финансовых операций за указанную дату /// </summary> /// <param name="auth">Данные авторизации организации</param> /// <param name="date">Дата</param> /// <param name="type">Тип склада</param> /// <returns></returns> public static List<TreasureOperation> GetTreasureDay(OrgAuth auth, DateTime date, TreasureType type) { var result = new List<TreasureOperation>(); result.Clear(); string url = UrlConstuctor.GetTreasureUrl(auth, date, type); var doc = new XmlDocument(); XmlNodeList list; doc.Load(url); list = doc.GetElementsByTagName("error"); if (list.Count == 0) { list = doc.GetElementsByTagName("action"); foreach (XmlNode item in list) { DateTime dateTime = DateTime.Parse(item.Attributes[0].Value); string nick = item.ChildNodes[0].InnerText; string direction = item.ChildNodes[1].InnerText; float value = float.Parse(item.ChildNodes[2].InnerText); var operation = new TreasureOperation(dateTime, nick, direction, value); result.Add(operation); } } else { //Ошибка доступа! throw new ApiAccessError(list[0].InnerText); } return result; }
/// <summary> /// Загрузка списка складских операций за указанную дату /// </summary> /// <param name="auth">Данные авторизации организации</param> /// <param name="date">Дата</param> /// <param name="type">Тип склада</param> /// <returns></returns> public static List<StorageOperation> GetStorageDay(OrgAuth auth, DateTime date, StorageType type) { var result = new List<StorageOperation>(); string query = UrlConstuctor.GetStorageUrl(auth, date, type); var doc = new XmlDocument(); doc.Load(query); XmlNodeList errors = doc.GetElementsByTagName("error"); if (errors.Count == 0) { XmlNodeList list = doc.GetElementsByTagName("action"); foreach (XmlNode element in list) { DateTime dateTime = DateTime.Parse(element.Attributes[0].Value); string person = element.ChildNodes[0].InnerText; int personId = Int32.Parse(element.ChildNodes[1].InnerText); string item = element.ChildNodes[2].InnerText; int instanceId = Int32.Parse(element.ChildNodes[3].InnerText); string typeAction = element.ChildNodes[4].InnerText; var operation = new StorageOperation(dateTime, person, personId, item, instanceId, typeAction); result.Add(operation); } } else { //Если ошибка throw new ApiAccessError(errors[0].InnerText); } return result; }
private void BtnImportClick(object sender, EventArgs e) { DateTime begin = dtp_begin.Value; DateTime end = dtp_end.Value; OrgAuth auth = null; int sources = 0; if (!bgw_download.IsBusy && !bgw_report.IsBusy){ //Начинаем импорт try { //Создаем авторизовывалку if (tb_id.Value != 0 && !String.IsNullOrEmpty(tb_pass.Text)) { auth = new OrgAuth((int)tb_id.Value, tb_pass.Text); } else{ MessageBox.Show("Не указан логин или пароль доступа к данным", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } //Собираем список складов List<StorageType> storages = new List<StorageType>(); if (ch_storage_main.Checked) { storages.Add(StorageType.Main);sources++; } if (ch_storage_second.Checked) { storages.Add(StorageType.Second); sources++; } if (ch_storage_mods.Checked) { storages.Add(StorageType.Mods); sources++; } if (ch_storage_prof.Checked) { storages.Add(StorageType.Prof); sources++; } if (ch_storage_lib.Checked) { storages.Add(StorageType.Lib); sources++; } //Собираем список казн List<TreasureType> treasures = new List<TreasureType>(); if (ch_treasure_money.Checked) { treasures.Add(TreasureType.Money); sources++; } if (ch_treasure_taler.Checked) { treasures.Add(TreasureType.Taler); sources++; } int days = (end - begin).Days + 1; if (days < 1) { MessageBox.Show("Некорректно указан диапазон дат", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (sources == 0) { MessageBox.Show("Не выбран не один из доступных источников", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } progress.Maximum = sources*days; //Отключаем контролы gb_org.Enabled = false; gb_dates.Enabled = false; gb_sources.Enabled = false; //gb_control.Enabled = false; progress.Value = 0; bgw_download.RunWorkerAsync(new Reqest(begin, end, storages, treasures, auth)); btn_import.Text = "Прервать импорт"; } catch (Exception exception){ MessageBox.Show(exception.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }else{ //отменяем импорт if (MessageBox.Show("Прервать импорт данных?", "Необходимо подтверждение", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == DialogResult.OK){ if (bgw_download.IsBusy){ bgw_download.CancelAsync(); } if (bgw_download.IsBusy){ bgw_download.CancelAsync(); } btn_import.Text = "Начать импорт"; } } }