コード例 #1
0
ファイル: Program.cs プロジェクト: YLytv/DozorySharp
        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");
        }
コード例 #2
0
ファイル: Request.cs プロジェクト: YLytv/DozoryLogExport
 /// <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;
 }
コード例 #3
0
ファイル: Responce.cs プロジェクト: YLytv/DozoryLogExport
        /// <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>>();
        }
コード例 #4
0
ファイル: UrlConstuctor.cs プロジェクト: YLytv/DozorySharp
        /// <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;
        }
コード例 #5
0
ファイル: UrlConstuctor.cs プロジェクト: YLytv/DozorySharp
        /// <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;
        }
コード例 #6
0
ファイル: Api.cs プロジェクト: YLytv/DozorySharp
        /// <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;
        }
コード例 #7
0
ファイル: Api.cs プロジェクト: YLytv/DozorySharp
        /// <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;
        }
コード例 #8
0
ファイル: Api.cs プロジェクト: YLytv/DozorySharp
        /// <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;
        }
コード例 #9
0
ファイル: mainform.cs プロジェクト: YLytv/DozoryLogExport
        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 = "Начать импорт";
                }
            }
        }