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

            try
            {
                DataTable table = DBFProcessor.GetDataTable(filename, string.Format("select * from \"{0}\" where Q='P2';", filename));
                foreach (DataRow row in table.Rows)
                {
                    NOMP data = new NOMP();
                    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"];
                    data.LPU_ID  = (long?)((decimal)row["LPU_ID"]);
                    data.DATE_IN = (DateTime?)row["DATE_IN"];
                    data.SPOS    = (int?)((decimal)row["SPOS"]);
                    result.Add(data);
                }
            }
            finally
            {
                File.Delete(filename);
            }
            return(result);
        }
Пример #2
0
        public List <NOMP> GetDataFromNOMPdbf(string dbfFilePath, Nomernik.History nompHistory)
        {
            List <NOMP> dataFromDBF = NomernikDao.Instance.GetDataFromNOMPDbf(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 <NOMP> dataFromDB = new List <NOMP>(dataFromDBF.Count);

            dataFromDB = NomernikDao.Instance.NOMP_Find(dataFromDBF);

            int j = 0;

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

                    if (flagChange)
                    {
                        elementDBF.Status = 4;
                    }
                    else
                    {
                        elementDBF.Status = 3;
                    }
                    elementDBF.ClientID = lastInNOMP.ClientID;
                }
                else
                {
                    if (group.Count > 0)
                    {
                        if (group.Count == 1)
                        {
                            //клиент найден, уникален, записей в таблицу NOMP еще не было  -> 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)
                            {
                                NOMP temp = group.OrderBy(b => b.DATE_IN).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.NOMP_Save(items, nompHistory);

            return(dataFromDBF);
        }