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

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

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

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

import beans.directory.dlodruglist.DloDrugListDetails;
import cli_fmw.delegate.directory.UpdaterDirectory;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ClipsException;
import clips.delegate.directory.complex.DirectoryDloDrugSection;
import clips.delegate.directory.complex.DirectoryDrugList;
import clips.delegate.directory.complex.DirectoryDrugListItem;
import clips.delegate.directory.simple.dlo.DirectoryDrugDosageForm;
import clips.delegate.directory.simple.dlo.DirectoryDrugDosageUnit;
import clips.delegate.directory.simple.dlo.DirectoryDrugFarmGroup;
import clips.delegate.directory.simple.dlo.DirectoryDrugMNN;
import clips.delegate.directory.simple.dlo.DirectoryDrugTradeName;
import clips.delegate.directory.simple.dlo.DirectoryDrugVolumeUnit;
import clips.delegate.directory.simple.dlo.DirectoryDrugWeightUnit;
import clips.main.ClipsConfig;
import framework.utils.Comparator;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
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 UpdaterDloDrugList extends UpdaterDirectory {

    private DirectoryDrugTradeName dirTradeName;
    private DirectoryDrugMNN dirMNN;
    private DirectoryDrugDosageForm dirDosageForm;
    private DirectoryDrugDosageUnit dirDosageUnit;
    private DirectoryDrugVolumeUnit dirVolumeUnit;
    private DirectoryDrugWeightUnit dirWeightUnit;
    private DirectoryDrugFarmGroup dirFarmGroup;
    private DirectoryDloDrugSection dirSection;
    private Date nullDate= new Date();

    private enum Col {
        NOMK_LS,
        NAME_MED,
        C_TRN,
        C_MNN,
        C_LF,
        D_LS,
        C_DLS,
        N_DOZA,
        V_LF,
        C_VLF,
        M_LF,
        C_MLF,
        N_FV,
        NAME_FCT,
        NAME_CNF,
        NAME_PCK,
        NAME_CNP,
        COMPL,
        C_FARG,
        FLAG_KEK,
        FLAG1,
        FLAG2,
        DATE_B,
        DATE_E,
        MSG_TEXT,
        C_RLP
  }

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

    @Override
    public String getTitle() {
        return "Перечень льготных ЛС";
    }

    @Override
    protected void updateImpl() throws ClipsException {
        ClipsConfig cfg = ClipsConfig.getInstance();

        Calendar cal = new GregorianCalendar(9999, 99, 99);
        nullDate = cal.getTime();

        DirectoryDrugList drugList = DirectoryLocator.getDirectory(DirectoryDrugList.class);
        dirTradeName = DirectoryLocator.getDirectory(DirectoryDrugTradeName.class);
        dirMNN = DirectoryLocator.getDirectory(DirectoryDrugMNN.class);
        dirDosageForm = DirectoryLocator.getDirectory(DirectoryDrugDosageForm.class);
        dirDosageUnit = DirectoryLocator.getDirectory(DirectoryDrugDosageUnit.class);
        dirVolumeUnit = DirectoryLocator.getDirectory(DirectoryDrugVolumeUnit.class);
        dirWeightUnit = DirectoryLocator.getDirectory(DirectoryDrugWeightUnit.class);
        dirFarmGroup = DirectoryLocator.getDirectory(DirectoryDrugFarmGroup.class);
        dirSection = DirectoryLocator.getDirectory(DirectoryDloDrugSection.class);

        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);
        }

        GregorianCalendar gc1 = new GregorianCalendar();
        int recordCount = dbf.getRecordCount();
        for (int i = 0; i < recordCount; i++) {
            try {
                dbf.read();
                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;
                }

                DloDrugListDetails det = new DloDrugListDetails();

                det.code = Integer.parseInt(fields.get(Col.NOMK_LS).get().trim());
                det.title = fields.get(Col.NAME_MED).get().trim();
                det.tradeNameId = dirTradeName.getItemFromExtKey(fields.get(Col.C_TRN).get().trim()).getID();
                det.mnnId = dirMNN.getItemFromExtKey(fields.get(Col.C_MNN).get().trim()).getID();
                det.dosageFormId = dirDosageForm.getItemFromExtKey(fields.get(Col.C_LF).get().trim()).getID();
                det.dosage = fields.get(Col.D_LS).get().trim();
                det.dosageUnitId = dirDosageUnit.getItemFromExtKey(fields.get(Col.C_DLS).get().trim()).getID();
                det.dosageQuantity = Integer.parseInt(fields.get(Col.N_DOZA).get().trim());
                det.volume = Double.parseDouble(fields.get(Col.V_LF).get().trim());
                det.volumeUnitId = dirVolumeUnit.getItemFromExtKey(fields.get(Col.C_VLF).get().trim()).getID();
                det.weight = Double.parseDouble(fields.get(Col.M_LF).get().trim());
                det.weightUnitId = dirWeightUnit.getItemFromExtKey(fields.get(Col.C_MLF).get().trim()).getID();
                det.packNumber = Integer.parseInt(fields.get(Col.N_FV).get().trim());
                det.producer = fields.get(Col.NAME_FCT).get().trim();
                det.producerCountry = fields.get(Col.NAME_CNF).get().trim();
                det.packer = fields.get(Col.NAME_PCK).get().trim();
                det.packerCountry = fields.get(Col.NAME_CNP).get().trim();
                det.completeness = fields.get(Col.COMPL).get().trim();
                det.farmGroupId = dirFarmGroup.getItemFromExtKey(fields.get(Col.C_FARG).get().trim()).getID();

                int flag = Integer.parseInt(fields.get(Col.FLAG_KEK).get().trim());
                if (flag == 0) {
                    det.kekRequired = false;
                }
                else {
                    det.kekRequired = true;
                }

                flag = Integer.parseInt(fields.get(Col.FLAG1).get().trim());
                if (flag == 0) {
                    det.vital = false;
                }
                else {
                    det.vital = true;
                }

                flag = Integer.parseInt(fields.get(Col.FLAG2).get().trim());
                if (flag == 0) {
                    det.forbidden = false;
                }
                else {
                    det.forbidden = true;
                }

                det.dateIn = null;
                try {
                    Calendar nsuBegin = ((DateField)fields.get(Col.DATE_B)).getCalendar();
                    if (Comparator.dataEqual(nullDate, nsuBegin.getTime())) {
                        det.dateIn = null;
                    }
                    else {
                        det.dateIn = nsuBegin.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата вкючения в перечень некорректна " + dbf.getName() + " code=(" + det.code + ")");
                    out.println("Предупреждение : Дата включения в перечень некорректна " + dbf.getName() + " code=(" + det.code + ")");
                }

                det.dateOut = null;
                try {
                    Calendar nsuBegin = ((DateField)fields.get(Col.DATE_E)).getCalendar();
                    if (Comparator.dataEqual(nullDate, nsuBegin.getTime())) {
                        det.dateOut = null;
                    }
                    else {
                        det.dateOut = nsuBegin.getTime();
                    }
                } catch (NumberFormatException ex) {
                    System.out.println("Предупреждение : Дата исключения из перечня некорректна " + dbf.getName() + " code=(" + det.code + ")");
                    out.println("Предупреждение : Дата исключения из перечня некорректна " + dbf.getName() + " code=(" + det.code + ")");
                }

                det.msg = fields.get(Col.MSG_TEXT).get().trim();
                try {
                    det.sectionId = dirSection.getItemByCode(Integer.parseInt(fields.get(Col.C_RLP).get().trim())).getID();
                } catch (ClipsException ex) {
                    det.sectionId = 0;
                    System.out.println("Предупреждение: Не найден раздел перечня " + dbf.getName() + " code=(" + det.code + ")");
                    out.println("Предупреждение: Не найден раздел перечня " + dbf.getName() + " code=(" + det.code + ")");
                }

                DirectoryDrugListItem item = new DirectoryDrugListItem(det);
                drugList.getItems().append(item);
            } catch (IOException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            } catch (xBaseJException ex) {
                closeDBF(dbf);
                throw new ClipsException("Ошибка при чтении данных из файла " + dbf.getName() + " (строка " + i + ")", ex);
            }
        }
    }

}
TOP

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

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.