Esempio n. 1
0
        public Nomernik.History NOMPHistory_Get()
        {
            List <SqlParameter> parameters = new List <SqlParameter>();
            SqlParameter        result     = parameters.AddInputOutputParameter("@result", SqlDbType.BigInt, 0);

            try
            {
                Nomernik.History history = Execute_Get(NomernikHistoryMaterializer.Instance, "NOMPHistory_Get", parameters);
                return(history);
            }
            catch
            {
                return(null);
            }
        }
Esempio n. 2
0
        public void STOP_Save(IEnumerable <STOP> listSTOP, Nomernik.History nompHistory)
        {
            List <SqlParameter> parameters = new List <SqlParameter>();
            STOPTableSet        set        = new STOPTableSet(listSTOP);

            parameters.AddInputParameter("@stopTable", SqlDbType.Structured, set.STOPResultTable);
            parameters.AddInputParameter("@LoadDate", SqlDbType.DateTime, nompHistory.LoadDate);
            parameters.AddInputParameter("@FileDate", SqlDbType.DateTime, nompHistory.FileDate);
            parameters.AddInputParameter("@UserID", SqlDbType.BigInt, nompHistory.UserID);
            parameters.AddInputParameter("@CountAll", SqlDbType.BigInt, nompHistory.CountAll);
            parameters.AddInputParameter("@CountOur", SqlDbType.BigInt, nompHistory.CountOur);
            parameters.AddInputParameter("@CountChange", SqlDbType.BigInt, listSTOP.Count());
            //в процедуре идет запись данных в таблицу STOP и истории в STOPHistory
            Execute_StoredProcedure("STOP_Save", parameters);
        }
Esempio n. 3
0
 public NOMPReport(List <NOMP> listNOMP, Nomernik.History nompHistory)
 {
     ListNOMP     = listNOMP;
     NompHistory  = nompHistory;
     TemplatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", "Templates", "NOMPReport.xlsx");
 }
Esempio n. 4
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);
        }