/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.directory.editors.update.updaters;
import beans.doctor.disease.updater.EmcIdAndDateBorn;
import beans.doctor.sicklist.SicklistBean;
import beans.doctor.sicklist.SicklistBeanRemote;
import cli_fmw.delegate.SharedBean;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.SelectorEditableExceptional;
import clips.delegate.client.CollaboratorFunctionsChunk;
import clips.delegate.config.ConfigLocal;
import clips.delegate.directory.filtered.DirectoryService;
import clips.delegate.directory.filtered.DirectoryServiceItem;
import clips.delegate.job.JobLocal;
import clips.login.UserInfo;
import beans.directory.service.entity.ServiceGroup;
import beans.directory.simple.entities.DisabilityType;
import beans.doctor.diagnosis.DiagnosisDetails;
import beans.doctor.sicklist.entity.SickLongDetails;
import beans.doctor.sicklist.entity.SicklistDetails;
import cli_fmw.main.audit.AuditManager;
import clips.delegate.doctor.EmcLocal;
import framework.utils.Converter;
import framework.utils.DateTimeUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
/**
*
* @author vip
*/
public class UpdaterSickLists extends UpdaterMedData {
private SharedBean<SicklistBeanRemote> sickListBean = new SharedBean<SicklistBeanRemote>(SicklistBean.class.getSimpleName());
private AuditManager am;
public UpdaterSickLists(AuditManager am) {
this.am = am;
}
@Override
public void updateImpl() throws ClipsException {
super.updateImpl();
System.out.println("Запись больничных в базу");
DirectoryService dirService = DirectoryLocator.getDirectory(DirectoryService.class);
HashMap<String, DirectoryServiceItem> serviceMap = new HashMap<String, DirectoryServiceItem>();
SelectorEditableExceptional<DirectoryServiceItem> servItems = dirService.getItems();
for (int i = 0; i < servItems.size(); i++) {
DirectoryServiceItem item = servItems.get(i);
if (item.getID() != 0 && !item.getCode().trim().isEmpty()
&& item.getGroup().getID() == ServiceGroup.SERVICE_GROUP_VISIT) {
serviceMap.put(item.getCode().trim(), item);
}
}
Set<Entry<Integer, SstData>> sstSet = sstMap.entrySet();
float size = sstSet.size();
int counter = 0;
for (Iterator<Entry<Integer, SstData>> it = sstSet.iterator(); it.hasNext();) {
//через каждые 1000 заболеваний напоминаем серваку, что юзер здесь, ато 1 раз отвалился
if ((counter % 1000) == 0) {
try {
UserInfo.get().disturbServer();
} catch (Throwable ex) {
//пофиг
}
}
Entry<Integer, SstData> entry = it.next();
it.remove();
SstData sstData = entry.getValue();
ArrayList<EmcIdAndDateBorn> emcList = clientMap.get(sstData.lnumber);
if (emcList == null) {
System.out.println("Не найден пациент № " + sstData.lnumber + " stat_ds.dbf " + " (N_SYST = " + sstData.nSyst + ")");
out.println("Не найден пациент № " + sstData.lnumber + " stat_ds.dbf " + " (N_SYST = " + sstData.nSyst + ")");
counter++;
continue;
}
int emcID = sstData.getTrueEmc(emcList);
if (emcID == 0) {
System.out.println("Не найден пациент № " + sstData.lnumber + " дата рождения " + Converter.dateToString(sstData.bithdate)
+ " stat_ds.dbf " + " (N_SYST = " + sstData.nSyst + ")");
out.println("Не найден пациент № " + sstData.lnumber + " дата рождения " + Converter.dateToString(sstData.bithdate)
+ " stat_ds.dbf " + " (N_SYST = " + sstData.nSyst + ")");
counter++;
continue;
}
if (sstData.blBeg == null || sstData.blEnd == null) {
//Больничного нет, пробегаем
counter++;
continue;
}
DiagnosisDetails diag = null;
CollaboratorFunctionsChunk cfc = null;
for (int i = 0; i < sstData.dniList.size(); i++) {
DniData dni = sstData.dniList.get(i);
System.out.println("Поиск больничного по посещению (" + counter/size*100 + "%)");
String serviceCode = dni.mes.substring(3);
int serviceID = serviceMap.get(serviceCode).getID();
cfc = findCollFuncByExtKey(String.valueOf(dni.idWrach), sstData.vmu);
try {
diag = updaterStattalonBean.get().getDiagnosisDetails(serviceID, emcID, cfc.getId(), dni.date);
if (diag != null) {
break;
}
} catch (Exception ex) {
updaterStattalonBean.clear();
System.out.println(MessageBox.parseException(ex));
out.println(MessageBox.parseException(ex));
}
}
if (diag != null) {
SicklistDetails s = null;
try {
//Проверить есть ли на данный диагноз и посещение больничный
s = updaterStattalonBean.get().getSicklist(diag.id);
} catch (Exception ex) {
updaterStattalonBean.clear();
System.out.println(MessageBox.parseException(ex));
out.println(MessageBox.parseException(ex));
counter ++;
continue;
}
if (s == null) {
//Только если есть диагноз и больничный для него отсутствует в базе то создаем больничный
s = new SicklistDetails();
}
// s.organizationID = UserInfo.get().getCollaborator().getLpu().getID();
EmcLocal emc = new EmcLocal(emcID, am);
List<JobLocal> jobList = emc.getClient().getJobList();
if (jobList.size() > 0) {
s.entID = jobList.get(0).getEnterprise().getID();
}
s.diagOpenID = diag.getId();
s.disabID = sstData.blPrich != 0 ? sstData.blPrich : 1;
if (!sstData.blSex.isEmpty() || !sstData.blAge.isEmpty()) {
//Указаны поля по уходу
s.disabID = DisabilityType.DISABILITY_TYPE_DISEATED_SUPPORT;
}
s.openerID = cfc.getCollaborator().getID();
s.dateOpen = sstData.blBeg;
SickLongDetails sld = new SickLongDetails();
sld.collID = cfc.getCollaborator().getID();
sld.date = sstData.blEnd;
sld.serrenID = diag.serviceRenderID;
s.sickLongList = new ArrayList<SickLongDetails>();
s.sickLongList.add(sld);
/*try {
sickListBean.get().initByID(s.id, UserInfo.get().getSessionId());
sickListBean.get().updateImpl(s);
} catch (Exception ex) {
sickListBean.clear();
System.out.println(MessageBox.parseException(ex));
continue;
}*/
//Создан успешно теперь выставляем серийник.
s.serial = "АА 0000000";
s.registratorID = UserInfo.get().getCollaborator().getID();
/*try {
sickListBean.get().initByID(s.id, UserInfo.get().getSessionId());
sickListBean.get().updateImpl(s);
} catch (Exception ex) {
sickListBean.clear();
System.out.println(MessageBox.parseException(ex));
continue;
}*/
//Серийник выставлен успешно теперь закрываем.
s.dateToWork = DateTimeUtils.getNextDay(sstData.blEnd);
s.diagCloseID = diag.getId();
s.serrenCloseID = diag.serviceRenderID;
s.closerID = cfc.getCollaborator().getID();
try {
sickListBean.get().initByID(s.id, UserInfo.get().getSessionId());
sickListBean.get().update(s);
} catch (Exception ex) {
sickListBean.clear();
System.out.println(MessageBox.parseException(ex));
out.println(MessageBox.parseException(ex));
counter ++;
continue;
}
} else {
System.out.println("Не найден диагноз по статталону, N_SYST = " + sstData.nSyst);
out.println("Не найден диагноз по статталону, N_SYST = " + sstData.nSyst);
counter ++;
continue;
}
counter++;
}
}
@Override
public String getTitle() {
return "Больничные";
}
}