Пример #1
0
        public List <STOP> GetDataFromSTOPDbf(string filename)
        {
            DBFProcessor pr     = new DBFProcessor();
            List <STOP>  result = new List <STOP>();

            try
            {
                DataTable table = DBFProcessor.GetDataTable(filename, string.Format("select * from \"{0}\" where Q=3386;", filename));
                foreach (DataRow row in table.Rows)
                {
                    STOP data = new STOP();
                    data.SCENARIO = (string)(row["SCENARIO"]);
                    data.S_CARD   = (string)(row["S_CARD"]);
                    data.N_CARD   = ((decimal)row["N_CARD"]).ToString();
                    data.ENP      = (string)row["ENP"];
                    data.VSN      = ((string)row["VSN"]).Trim();
                    data.QZ       = (long?)((decimal)row["QZ"]);
                    data.DATE_END = (DateTime?)row["DATE_END"];
                    data.DATE_ARC = (DateTime?)row["DATE_ARC"];
                    data.IST      = (string)row["IST"];
                    result.Add(data);
                }
            }
            finally
            {
                File.Delete(filename);
            }
            return(result);
        }
Пример #2
0
        public void Test_STOP()
        {
            var expectedState = new CpuState();

            expectedState.StopMode = true;

            var actualState = new CpuState();
            var memoryMock  = new Mock <IRandomAccessMemory>();

            var instruction = new STOP();

            instruction.Initialize();

            //act
            while (!instruction.IsFetchNecessary())
            {
                instruction.ExecuteCycle(actualState, memoryMock.Object);
            }

            TestHelper.AssertCpuState(expectedState, actualState);
            memoryMock.Verify(m => m.WriteByte(It.IsAny <ushort>(), It.IsAny <byte>()), Times.Never);
        }
Пример #3
0
            /// <summary>
            /// Восстановить музыку
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>
            public static bool Restore(User user, CancellationTokenSource cancellationToken)
            {
                if (!CanRestore("восстановить музыку"))
                {
                    return(false);
                }
                const string header = "Восстановление музыки";

                PrintConsole.Header(header);

                string customPath = General.ChoisePath(header);

                if (customPath != null && customPath.Length == 0)
                {
                    return(false);
                }

                var data  = JsonConvert.DeserializeObject <Backup.Music.Track[]>(Read(user.GetId().ToString(), "Music", customPath));
                int error = 0;

                cancellationToken = new CancellationTokenSource();
                STOP = Task.Run(() => General.Cancel(cancellationToken), cancellationToken.Token);

                int totalRestore = 0;

                try
                {
                    for (totalRestore = 0; totalRestore < data.Length; totalRestore++)
                    {
                        cancellationToken.Token.ThrowIfCancellationRequested();
                        PrintConsole.Header(header, "Для остановки нажмите [SPACE]\n");
                        PrintConsole.Print($"Восстановлено {totalRestore} из {data.Length}");
                        PrintConsole.Print($"Не удалось восстановить {error}");

                        try
                        {
                            user.GetApi().Audio.Add(data[totalRestore].id.Value, data[totalRestore].owner_id.Value);
                        }
                        catch (Exception ex)
                        {
                            error++;
                        }
                    }

                    return(true);
                }
                catch (Exception ex)
                {
                    STOP.Dispose();
                    if (cts.Token.CanBeCanceled)
                    {
                        PrintConsole.Header(header, $"Восстановлено {totalRestore} треков\nНе удалось восстановить {error}");
                        BackLine.Continue();
                        return(true);
                    }
                    else
                    {
                        PrintConsole.Header(header);
                        PrintConsole.Print(ex.Message, MenuType.Warning);
                        BackLine.Continue();
                        return(false);
                    }
                }
            }
Пример #4
0
            /// <summary>
            /// Восстановить список групп
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>

            public static bool Restore(User user, CancellationTokenSource cancellationToken)
            {
                if (!CanRestore("восстановить список сообществ"))
                {
                    return(false);
                }

                const string header = "Восстановление сообществ";

                PrintConsole.Header(header);


                //string userid = ChoiseBackup(MainData.Profiles.GetUser(0).API);


                string customPath = General.ChoisePath(header);

                if (customPath != null && customPath.Length == 0)
                {
                    return(false);
                }


                Backup.Groups.Data[] groups = JsonConvert.DeserializeObject <Backup.Groups.Data[]>(Read(user.GetId().ToString(), "Groups", customPath));

                cancellationToken = new CancellationTokenSource();
                STOP = Task.Run(() => General.Cancel(cancellationToken), cancellationToken.Token);

                try
                {
                    for (int i = 0; i < groups.Length; i++)
                    {
                        cancellationToken.Token.ThrowIfCancellationRequested();
                        PrintConsole.Header("Восстановление сообществ", "Для остановки нажмите [SPACE]\n");
                        PrintConsole.Print($"Восстановлено {i} из {groups.Length} сообществ.", MenuType.InfoHeader);
                        try
                        {
                            user.GetApi().Groups.Join(groups[i].id);
                        }
                        catch (Exception ex)
                        {
                        }

                        BackLine.Clear();
                    }

                    PrintConsole.Print($"Восстановлено {groups.Length} сообществ.");
                    BackLine.Continue();

                    return(true);
                }
                catch (Exception ex)
                {
                    STOP.Dispose();
                    if (cts.Token.CanBeCanceled)
                    {
                        PrintConsole.Header(header, $"Восстановлено {groups.Length} сообществ.");
                        BackLine.Continue();
                        return(true);
                    }
                    else
                    {
                        PrintConsole.Header(header);
                        PrintConsole.Print(ex.Message, MenuType.Warning);
                        BackLine.Continue();
                        return(false);
                    }
                }
            }
Пример #5
0
        public List <STOP> GetDataFromSTOPdbf(string dbfFilePath, Nomernik.History nompHistory)
        {
            List <STOP> dataFromDBF = NomernikDao.Instance.GetDataFromSTOPDbf(dbfFilePath);

            //добавляем нули, т.к.
            //в нашей базе номер старого полиса хранится  с нулями с начала строки, т.е. 0000000001
            foreach (var item in dataFromDBF)
            {
                if (!string.IsNullOrEmpty(item.N_CARD))
                {
                    if (item.N_CARD.ToString().Length > 0 && item.N_CARD.ToString().Length < 10)
                    {
                        while (item.N_CARD.ToString().Length != 10)
                        {
                            item.N_CARD = "0" + item.N_CARD;
                        }
                    }
                }
            }

            List <STOP> dataFromDB = new List <STOP>(dataFromDBF.Count);

            dataFromDB = NomernikDao.Instance.STOP_Find(dataFromDBF);

            int j = 0;

            foreach (var elementDBF in dataFromDBF)
            {
                //группируем по ENP и по N_CARD
                List <STOP> group = new List <STOP>();
                group.AddRange(dataFromDB.FindAll(a => a.ENP == elementDBF.ENP));
                group.AddRange(dataFromDB.FindAll(a => a.N_CARD == elementDBF.N_CARD));
                //ищем в группе ID !=0  Это значит, что запись уже есть в истории номерников и выбираем последнюю запись из этой подгруппы
                STOP lastInNOMP = group.FindAll(a => a.Id != 0).OrderBy(b => b.Id).LastOrDefault();
                if (lastInNOMP != null)
                {
                    //обрабатываем в результаты 4.3 - данные не изменились и 4.4 - данные изменились
                    //флаг -> были ли изменения? По умолчанию - нет
                    bool flagChange = false;
                    if (elementDBF.SCENARIO != lastInNOMP.SCENARIO)
                    {
                        flagChange = true;
                    }
                    if (elementDBF.S_CARD != lastInNOMP.S_CARD)
                    {
                        flagChange = true;
                    }
                    if (elementDBF.N_CARD != lastInNOMP.N_CARD)
                    {
                        flagChange = true;
                    }
                    if (elementDBF.VSN != lastInNOMP.VSN)
                    {
                        flagChange = true;
                    }
                    if (elementDBF.QZ != lastInNOMP.QZ)
                    {
                        flagChange = true;
                    }
                    if (elementDBF.DATE_END != lastInNOMP.DATE_END)
                    {
                        flagChange = true;
                    }
                    if (elementDBF.DATE_ARC != lastInNOMP.DATE_ARC)
                    {
                        flagChange = true;
                    }
                    if (elementDBF.IST != lastInNOMP.IST)
                    {
                        flagChange = true;
                    }

                    if (flagChange)
                    {
                        elementDBF.Status = 4;
                    }
                    else
                    {
                        elementDBF.Status = 3;
                    }
                    elementDBF.ClientID = lastInNOMP.ClientID;
                }
                else
                {
                    if (group.Count > 0)
                    {
                        if (group.Count == 1)
                        {
                            //клиент найден, уникален, записей в таблицу STOP еще не было  -> 4.5
                            elementDBF.Status   = 5;
                            elementDBF.ClientID = group.FirstOrDefault().ClientID;
                        }

                        if (group.Count > 1)
                        {
                            //проверяем на уникальность
                            int  countClientId = 1;
                            long?ClientId      = group.FirstOrDefault().ClientID;
                            foreach (var elem in group)
                            {
                                if (elem.ClientID != ClientId)
                                {
                                    countClientId++;
                                }
                            }

                            //ClientId уникален?
                            if (countClientId == 1)
                            {
                                STOP temp = group.OrderBy(b => b.DATE_ARC).LastOrDefault();
                                //уникален -> 4.5
                                elementDBF.Status   = 5;
                                elementDBF.ClientID = temp.ClientID;
                            }
                            else
                            {
                                //в результаты говорим, что найденный у нас клиент не уникален 4.2
                                elementDBF.Status = 2;
                                //пытаемся понять: может все-таки это один клиент несмотря на то, что у него разные ClientID
                                //сравниваем фио и дату рождения
                                List <Nomernik.ClientShotInfo> listClient = NomernikDao.Instance.ClientsShotInfo_Get(group.Select(a => (long)a.ClientID).Distinct());
                                elementDBF.Comment = elementDBF.Comment + string.Format("Найдены {0} клиента(ов). ", listClient.Count());
                                elementDBF.Comment = elementDBF.Comment + "ClientID = ";
                                bool     flag       = true;
                                string   firstname  = listClient.FirstOrDefault().Firstname;
                                string   secondname = listClient.FirstOrDefault().Secondname;
                                string   lastname   = listClient.FirstOrDefault().Lastname;
                                DateTime?birthday   = listClient.FirstOrDefault().Birthday;
                                foreach (var el in listClient)
                                {
                                    elementDBF.Comment = elementDBF.Comment + string.Format("{0}, ", el.ClientID);
                                    if (el.Firstname != firstname)
                                    {
                                        flag = false;
                                    }
                                    if (el.Secondname != secondname)
                                    {
                                        flag = false;
                                    }
                                    if (el.Lastname != lastname)
                                    {
                                        flag = false;
                                    }
                                    if (el.Birthday != birthday)
                                    {
                                        flag = false;
                                    }

                                    firstname  = el.Firstname;
                                    secondname = el.Secondname;
                                    lastname   = el.Lastname;
                                    birthday   = el.Birthday;
                                }
                                elementDBF.Comment = elementDBF.Comment.TrimEnd(',', ' ');
                                elementDBF.Comment = elementDBF.Comment + ". ";

                                if (flag)
                                {
                                    elementDBF.Comment = elementDBF.Comment + "Есть предположение, что это один клиент. ФИО и дата рождения совпадают.";
                                }
                                else
                                {
                                    elementDBF.Comment = elementDBF.Comment + "Это разные клиенты. ФИО и/или дата рождения не совпадают.";
                                }
                            }
                        }
                    }
                    else
                    {
                        //в результаты - клиент в системе не найден 4.1
                        elementDBF.Status = 1;
                    }
                }

                foreach (var elem in group)
                {
                    dataFromDB.Remove(elem);
                }
                j++;
            }

            //записать в БД надо только со статусом 4 и 5
            var items = dataFromDBF.Where(i => (i.Status == 4 || i.Status == 5));

            NomernikDao.Instance.STOP_Save(items, nompHistory);

            return(dataFromDBF);
        }