Package clips.directory.editors.update.updaters.dlo

Source Code of clips.directory.editors.update.updaters.dlo.UpdaterFacilityClients

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package clips.directory.editors.update.updaters.dlo;

import beans.user.client.facilityClient.FacilityClient;
import beans.user.client.facilityClient.FacilityClientDetails;
import beans.user.client.facilityClient.FacilityDocumentDetails;
import beans.user.client.updater.UpdaterClientBean;
import beans.user.client.updater.UpdaterClientBeanRemote;
import cli_fmw.delegate.SharedBean;
import cli_fmw.delegate.directory.UpdaterDirectory;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.directory.simple.DirectorySimpleItem;
import cli_fmw.main.ClipsException;
import clips.delegate.directory.simple.clientDocumentType.DirectoryDocumentType;
import clips.delegate.directory.simple.exemptionType.DirectoryExcemption;
import clips.delegate.directory.simple.name.DirectoryName;
import clips.delegate.directory.simple.pathron.DirectoryPathron;
import clips.delegate.directory.simple.surname.DirectorySurname;
import clips.login.UserInfo;
import clips.main.ClipsConfig;
import framework.beans.directory.simple.entities.Sex;
import framework.generic.ClipsServerException;
import framework.utils.Comparator;
import framework.utils.Converter;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import org.xBaseJ.micro.DBF;
import org.xBaseJ.micro.fields.DateField;
import org.xBaseJ.micro.fields.Field;
import org.xBaseJ.micro.xBaseJException;

/**
*
* @author lacoste
*/
public class UpdaterFacilityClients extends UpdaterDirectory {

    private DirectorySurname dirSurname;
    private DirectoryName dirName;
    private DirectoryPathron dirPathron;
    private DirectoryDocumentType dirDocumentType;
    private DirectoryExcemption dirExemption;
    private Date nullDate= new Date();

    private enum Col {
        SS,
        SN_POL,
        FAM,
        IM,
        OT,
        W,
        DR,
        SN_DOC,
        C_DOC,
        ADRES,
        DOM,
        KOR,
        KV,
        OKATO_REG,
        S_EDV,
        DB_EDV,
        DE_EDV,
        C_KAT1,
        C_KAT2,
        DATE_RSB,
        DATE_RSE,
        U_TYPE,
        D_TYPE,
        C_REG
  }

    private enum ColDoc {
        SS,
        C_KAT,
        NAME_DL,
        SN_DL,
        DATE_BL,
        DATE_EL
  }


    @Override
    public String getFilename() {
        return "C_REGO.DBF";
    }

    @Override
    public String getTitle() {
        return "Льготники";
    }

    @Override
    protected void updateImpl() throws ClipsException {
        Calendar cal = new GregorianCalendar(9999, 99, 99);
        nullDate = cal.getTime();

        SharedBean<UpdaterClientBeanRemote> bean =
            new SharedBean<UpdaterClientBeanRemote>(UpdaterClientBean.class.getSimpleName());
        ClipsConfig cfg = ClipsConfig.getInstance();

        File file = new File(cfg.getLastDBFImportPath(), getFilename());
        DBF dbf = createDBF(file);
        HashMap<Col, Field> fields = new HashMap<Col, Field>();
        try {
            for (int i = 0; i < Col.values().length; i++) {
                Col col = Col.values()[i];
                fields.put(col, dbf.getField(col.toString()));
            }
        } catch (xBaseJException ex) {
            throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
        }
        int recordCount = dbf.getRecordCount();

        System.out.println("Загрузка фамилий, имен, отчеств и профессий");
        out.println("Загрузка фамилий, имен, отчеств и профессий");
        HashSet<String> famList = new HashSet<String>(recordCount);
        HashSet<String> namList = new HashSet<String>(recordCount);
        HashSet<String> patronList = new HashSet<String>(recordCount);
        for (int i = 0; i < recordCount; i++) {
            try {
                dbf.read();
                famList.add(Converter.firstUpper(fields.get(Col.FAM).get().trim(), true));
                namList.add(Converter.firstUpper(fields.get(Col.IM).get().trim(), true));
                patronList.add(Converter.firstUpper(fields.get(Col.OT).get().trim(), true));
            } catch (IOException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            } catch (xBaseJException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            }
        }
        bean.get().updateSurnames(famList);
        dirSurname = DirectoryLocator.getDirectory(DirectorySurname.class, true);
        System.out.println("Фамилии загружены");
        out.println("Фамилии загружены");
        bean.get().updateNames(namList);
        dirName = DirectoryLocator.getDirectory(DirectoryName.class, true);
        System.out.println("Имена загружены");
        out.println("Имена загружены");
        bean.get().updatePatrons(patronList);
        dirPathron = DirectoryLocator.getDirectory(DirectoryPathron.class, true);
        System.out.println("Отчества загружены");
        out.println("Отчества загружены");

        dirDocumentType = DirectoryLocator.getDirectory(DirectoryDocumentType.class, true);
        dirExemption = DirectoryLocator.getDirectory(DirectoryExcemption.class, true);

        try {
            dbf.startTop();
        } catch (IOException ex) {
            throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
        } catch (xBaseJException ex) {
            throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName(), ex);
        }

        int counter = 0;
        GregorianCalendar gc1 = new GregorianCalendar();
        ArrayList<FacilityClientDetails> clientList = new ArrayList<FacilityClientDetails>(recordCount);

        HashMap<String, Integer> snilsMap = new HashMap<String, Integer>();

        for (int i = 0; i < recordCount; i++) {
            try {
                dbf.read();
                if ((counter%500) == 0) {
                    try {
                        UserInfo.get().disturbServer();
                    } catch (Throwable ex) {
                        //пофиг
                    }
                }
                if ((i%1000) == 0) {
                    System.out.println("Обновление льготников: " +  i/((float)recordCount)*100 + "% (" + i + ") запись");
                    GregorianCalendar gc2 = new GregorianCalendar();
                    long mc = gc2.getTimeInMillis() - gc1.getTimeInMillis();
                    System.out.println("Work time: " + mc + " ms");
                }
                if (dbf.deleted()) {
                    continue;
                }

                FacilityClientDetails c = new FacilityClientDetails();

                //код изменения
                int uType = 0;
                try {
                    uType = Integer.parseInt(fields.get(Col.U_TYPE).get().trim());
                    if (uType < 0 || uType > 3) {
                        throw new NumberFormatException();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : код изменения некорректен " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : код изменения некорректен " + dbf.getName() + " snils=(" + c.snils + ")");
                    uType = 0;
                }

                String snils = fields.get(Col.SS).get().trim();
                if (snilsMap.containsKey(snils)) {
                    throw new ClipsException("Повторяющийся СНИЛС " + dbf.getName() + " snils=(" + snils + ")" + " строка=" + i);
                }
                snilsMap.put(snils, uType);

                c.snils = snils;
                c.uType = uType;
                c.polisSN = fields.get(Col.SN_POL).get().trim();
                c.surnameId = dirSurname.getItemFromTitle(Converter.firstUpper(fields.get(Col.FAM).get().trim(), true)).getID();
                c.nameId = dirName.getItemFromTitle(Converter.firstUpper(fields.get(Col.IM).get().trim(), true)).getID();
                c.pathronId = dirPathron.getItemFromTitle(Converter.firstUpper(fields.get(Col.OT).get().trim(), true)).getID();

                //пол льготника
                String sex = fields.get(Col.W).get().trim();
                if (sex.toUpperCase().equals("М")) {
                    c.sexId = Sex.CLIENT_SEX_MALE;
                } else if (sex.toUpperCase().equals("Ж")) {
                    c.sexId = Sex.CLIENT_SEX_FEMALE;
                } else {
                    System.out.println("У пациента неопределен пол. " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : У пациента неопределен пол. " + dbf.getName() + " snils=(" + c.snils + ")");
                    c.sexId = Sex.CLIENT_SEX_MALE;
                    String fam = fields.get(Col.FAM).get().trim();
                    if (fam.endsWith("а")) {
                        c.sexId = Sex.CLIENT_SEX_FEMALE;
                    } else {
                        String nam = fields.get(Col.IM).get().trim();
                        if (nam.endsWith("а") || nam.endsWith("я")) {
                            c.sexId = Sex.CLIENT_SEX_FEMALE;
                        }
                    }
                    out.println("Пол выставлен : " + (c.sexId == Sex.CLIENT_SEX_MALE ? "Муж." : "Жен."));
                }

                //дата рождения
                c.bornDate = null;
                try {
                    Calendar bornDate = ((DateField)fields.get(Col.DR)).getCalendar();
                    if (Comparator.dataEqual(nullDate, bornDate.getTime())) {
                        c.bornDate = null;
                    }
                    else {
                        c.bornDate = bornDate.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата рождения пациента некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : Дата рождения пациента некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                }

                //документ, удостоверяющий личность
                DirectorySimpleItem doctype = dirDocumentType.getItemFromExtKey(fields.get(Col.C_DOC).get().trim());
                if (doctype == null) {
                    c.docTypeId = 0;
                    System.out.println("Предупреждение : не найден тип документа " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : не найден тип документа " + dbf.getName() + " snils=(" + c.snils + ")");
                }
                else {
                    c.docTypeId = doctype.getID();
                }
                c.docSN = fields.get(Col.SN_DOC).get().trim();

                //адрес, регистрация
                c.address = fields.get(Col.ADRES).get().trim();
                c.building = fields.get(Col.DOM).get().trim();
                c.corpus = fields.get(Col.KOR).get().trim();
                c.flat = fields.get(Col.KV).get().trim();
                c.okatoReg = fields.get(Col.OKATO_REG).get().trim();

                //льготность
                Integer flag = null;
                try {
                    flag = Integer.parseInt(fields.get(Col.S_EDV).get().trim());
                    if (flag < 0 || flag > 1) {
                        throw new NumberFormatException();
                    }
                } catch (NumberFormatException ex) {
                    flag = null;
                    System.out.println("Предупреждение : признак получения НСУ некорректен " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : признак получения НСУ некорректен " + dbf.getName() + " snils=(" + c.snils + ")");
                }
                c.flagNSU = flag;
                c.nsuBegin = null;
                try {
                    Calendar nsuBegin = ((DateField)fields.get(Col.DB_EDV)).getCalendar();
                    if (Comparator.dataEqual(nullDate, nsuBegin.getTime())) {
                        c.nsuBegin = null;
                    }
                    else {
                        c.nsuBegin = nsuBegin.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата начала действия права на получение НСУ некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : Дата начала действия права на получение НСУ некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                }
                c.nsuEnd = null;
                try {
                    Calendar nsuEnd = ((DateField)fields.get(Col.DE_EDV)).getCalendar();
                    if (Comparator.dataEqual(nullDate, nsuEnd.getTime())) {
                        c.nsuEnd = null;
                    }
                    else {
                        c.nsuEnd = nsuEnd.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата окончания действия права на получение НСУ некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : Дата окончания действия права на получение НСУ некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                }
                DirectorySimpleItem exemp1 = dirExemption.getItemFromExtKey(fields.get(Col.C_KAT1).get().trim());
                if (exemp1 == null) {
                    c.exemp1Id = 0;
                }
                else {
                    c.exemp1Id = exemp1.getID();
                }
                DirectorySimpleItem exemp2 = dirExemption.getItemFromExtKey(fields.get(Col.C_KAT2).get().trim());
                if (exemp2 == null) {
                    c.exemp2Id = 0;
                }
                else {
                    c.exemp2Id = exemp2.getID();
                }

                if (c.exemp1Id == 0 && c.exemp2Id == 0) {
                    System.out.println("Предупреждение : не найдена категория льготности " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : не найдена категория льготности " + dbf.getName() + " snils=(" + c.snils + ")");
                }
                else if (c.exemp1Id != 0 && c.exemp2Id != 0) {
                    System.out.println("Предупреждение : указаны две категории льготности " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : указаны две категории льготности " + dbf.getName() + " snils=(" + c.snils + ")");
                }

                //даты включения в регистр и исключения из регистра
                c.regBegin = null;
                try {
                    Calendar regBegin = ((DateField)fields.get(Col.DATE_RSB)).getCalendar();
                    if (Comparator.dataEqual(nullDate, regBegin.getTime())) {
                        c.regBegin = null;
                    }
                    else {
                        c.regBegin = regBegin.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата включения в региональный Регистр некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : Дата включения в региональный Регистр некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                }
                c.regEnd = null;
                try {
                    Calendar regEnd = ((DateField)fields.get(Col.DATE_RSE)).getCalendar();
                    if (Comparator.dataEqual(nullDate, regEnd.getTime())) {
                        c.regEnd = null;
                    }
                    else {
                        c.regEnd = regEnd.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата исключения из регионального Регистра некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                    out.println("Предупреждение : Дата исключения из регионального Регистра некорректна " + dbf.getName() + " snils=(" + c.snils + ")");
                }

                //признак "особый случай"
                c.dType = fields.get(Col.D_TYPE).get().trim();

                c.c_reg = fields.get(Col.C_REG).get().trim();

                clientList.add(c);
            } catch (IOException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            } catch (xBaseJException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            }
        }
        closeDBF(dbf);
        GregorianCalendar gc2 = new GregorianCalendar();
        long mc = gc2.getTimeInMillis() - gc1.getTimeInMillis();
        System.out.println("Закончилось чтение льготников из файла. Work time: " + mc + " ms");
        out.println("Закончилось чтение льготников из файла. Work time: " + mc + " ms");

       
        File fileDoc = new File(cfg.getLastDBFImportPath(), "C_REGL.DBF");
        DBF dbfDoc = createDBF(fileDoc);
        HashMap<ColDoc, Field> docFields = new HashMap<ColDoc, Field>();
        try {
            for (int i = 0; i < ColDoc.values().length; i++) {
                ColDoc col = ColDoc.values()[i];
                docFields.put(col, dbfDoc.getField(col.toString()));
            }
        } catch (xBaseJException ex) {
            throw new ClipsException("Ошибка при чтении данных из файла " + dbfDoc.getName(), ex);
        }
        recordCount = dbfDoc.getRecordCount();

        gc1 = new GregorianCalendar();
        ArrayList<FacilityDocumentDetails> docList = new ArrayList<FacilityDocumentDetails>(recordCount);

        Set<String> snilsSet = new HashSet<String>();

        for (int i = 0; i < recordCount; i++) {
            try {
                dbfDoc.read();
                if ((counter%500) == 0) {
                    try {
                        UserInfo.get().disturbServer();
                    } catch (Throwable ex) {
                        //пофиг
                    }
                }
                if ((i%1000) == 0) {
                    System.out.println("Обновление данных о документах льготности : " +  i/((float)recordCount)*100 + "% (" + i + ") запись");
                    gc2 = new GregorianCalendar();
                    mc = gc2.getTimeInMillis() - gc1.getTimeInMillis();
                    System.out.println("Work time: " + mc + " ms");
                }
                if (dbfDoc.deleted()) {
                    continue;
                }
                FacilityDocumentDetails d = new FacilityDocumentDetails();

                String snils = docFields.get(ColDoc.SS).get().trim();

                Integer uType = snilsMap.get(snils);
                if (snilsSet.contains(snils) && uType != null && uType != FacilityClient.CHANGES_IN_INFO) {
                    throw new ClipsException("Повторяющийся СНИЛС " + dbfDoc.getName() + " snils=(" + snils + ")" + " строка=" + i);
                }
                snilsSet.add(snils);
               
                d.snils = snils;

                DirectorySimpleItem exemp = dirExemption.getItemFromExtKey(docFields.get(ColDoc.C_KAT).get().trim());
                if (exemp == null) {
                    d.exempId = 0;
                    System.out.println("Предупреждение : не найден тип льготности " + dbfDoc.getName() + " snils=(" + d.snils + ")");
                    out.println("Предупреждение : не найден тип льготности " + dbfDoc.getName() + " snils=(" + d.snils + ")");
                }
                else {
                    d.exempId = exemp.getID();
                }
                d.docType = docFields.get(ColDoc.NAME_DL).get().trim();
                d.docSN = docFields.get(ColDoc.SN_DL).get().trim();

                d.gspBegin = null;
                try {
                    Calendar nsuBegin = ((DateField)docFields.get(ColDoc.DATE_BL)).getCalendar();
                    if (Comparator.dataEqual(nullDate, nsuBegin.getTime())) {
                        d.gspBegin = null;
                    }
                    else {
                        d.gspBegin = nsuBegin.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата начала действия права на ГСП некорректна " + dbfDoc.getName() + " snils=(" + d.snils + ")");
                    out.println("Предупреждение : Дата начала действия права на ГСП некорректна " + dbfDoc.getName() + " snils=(" + d.snils + ")");
                }

                d.gspEnd = null;
                try {
                    Calendar nsuEnd = ((DateField)docFields.get(ColDoc.DATE_EL)).getCalendar();
                    if (Comparator.dataEqual(nullDate, nsuEnd.getTime())) {
                        d.gspEnd = null;
                    }
                    else {
                        d.gspEnd = nsuEnd.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата окончания действия права на ГСП некорректна " + dbfDoc.getName() + " snils=(" + d.snils + ")");
                    out.println("Предупреждение : Дата окончания действия права на ГСП некорректна " + dbfDoc.getName() + " snils=(" + d.snils + ")");
                }


                docList.add(d);
            } catch (IOException ex) {
                closeDBF(dbfDoc);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbfDoc.getName() + " (строка " + i + ")", ex);
            } catch (xBaseJException ex) {
                closeDBF(dbfDoc);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbfDoc.getName() + " (строка " + i + ")", ex);
            }
        }
        closeDBF(dbfDoc);
        gc2 = new GregorianCalendar();
        mc = gc2.getTimeInMillis() - gc1.getTimeInMillis();
        System.out.println("Закончилось чтение данных о документах о льготности из файла. Work time: " + mc + " ms");
        out.println("Закончилось чтение данных о документах о льготности из файла. Work time: " + mc + " ms");
        System.out.println("---------------------------------------------------");
        out.println("---------------------------------------------------");
        try {
            bean.get().updateFacilityClients(clientList, docList);
        } catch (ClipsServerException ex) {
            throw new ClipsException("Ошибка при записи в базу списка льготников", ex);
        }
    }

}
TOP

Related Classes of clips.directory.editors.update.updaters.dlo.UpdaterFacilityClients

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.