// masuda$ // ChartEventListener @Override public void propertyChange(PropertyChangeEvent pce) { if (tableModel == null) { return; } ChartEventModel evt = (ChartEventModel) pce.getNewValue(); int sRow = -1; long ptPk = evt.getPtPk(); List<PatientModel> list = tableModel.getDataProvider(); // minagawa^ // ChartEventModel.EVENT eventType = evt.getEventType(); int eventType = evt.getEventType(); // minagawa$ switch (eventType) { case ChartEventModel.PVT_STATE: for (int row = 0; row < list.size(); ++row) { PatientModel pm = list.get(row); if (ptPk == pm.getId()) { sRow = row; pm.setOwnerUUID(evt.getOwnerUUID()); break; } } break; case ChartEventModel.PM_MERGE: for (int row = 0; row < list.size(); ++row) { PatientModel pm = list.get(row); if (ptPk == pm.getId()) { sRow = row; // pm = msg.getPatientModel(); list.set(row, evt.getPatientModel()); break; } } break; case ChartEventModel.PVT_MERGE: for (int row = 0; row < list.size(); ++row) { PatientModel pm = list.get(row); if (ptPk == pm.getId()) { sRow = row; // pm = msg.getPatientVisitModel().getPatientModel(); list.set(row, evt.getPatientVisitModel().getPatientModel()); break; } } break; default: break; } if (sRow != -1) { tableModel.fireTableRowsUpdated(sRow, sRow); } }
/** * カルテがオープンされているかどうかを返す。 * * @return オープンされている時 true */ private boolean isKarteOpened(PatientModel patient) { if (patient != null) { boolean opened = false; java.util.List<ChartImpl> allCharts = ChartImpl.getAllChart(); for (ChartImpl chart : allCharts) { if (chart.getPatient().getId() == patient.getId()) { opened = true; break; } } return opened; } return false; }
@Override public PatientModel create(String fid, NLaboModule module) { String pid = module.getPatientId(); // 施設IDと LaboModule の患者IDで 患者を取得する PatientModel patient = (PatientModel) em.createQuery("from PatientModel p where p.facilityId=:fid and p.patientId=:pid") .setParameter("fid", fid) .setParameter("pid", pid) .getSingleResult(); // -------------------------------------------------------- if (patient != null) { // 患者の健康保険を取得する List<HealthInsuranceModel> insurances = (List<HealthInsuranceModel>) em.createQuery(QUERY_INSURANCE_BY_PATIENT_PK) .setParameter(PK, patient.getId()) .getResultList(); patient.setHealthInsurances(insurances); } // -------------------------------------------------------- String fidPid = fid + ":" + pid; module.setPatientId(fidPid); // item の patientId を変更する Collection<NLaboItem> items = module.getItems(); for (NLaboItem item : items) { item.setPatientId(fidPid); } // -------------------------------------------------------- // patientId & 検体採取日 & ラボコード で key // これが一致しているモジュールは再報告として削除してから登録する。 // -------------------------------------------------------- String sampleDate = module.getSampleDate(); String laboCode = module.getLaboCenterCode(); String moduleKey = module.getModuleKey(); if (moduleKey != null) { StringBuilder sb = new StringBuilder(); sb.append(pid).append(".").append(sampleDate).append(".").append(laboCode); String test = sb.toString(); if (test.equals(moduleKey)) { sb = new StringBuilder(); sb.append(fid); sb.append(":"); sb.append(moduleKey); moduleKey = sb.toString(); module.setModuleKey(moduleKey); System.err.println("corrected moduke key=" + module.getModuleKey()); } } NLaboModule exist = null; try { if (moduleKey != null) { exist = (NLaboModule) em.createQuery(QUERY_MODULE_BY_MODULE_KEY) .setParameter(MODULEKEY, moduleKey) .getSingleResult(); System.err.println("module did exist"); } else { exist = (NLaboModule) em.createQuery(QUERY_MODULE_BY_PID_SAMPLEDATE_LABCODE) .setParameter(FIDPID, fidPid) .setParameter(SAMPLEDATE, sampleDate) .setParameter(LABOCODE, laboCode) .getSingleResult(); } } catch (Exception e) { exist = null; } // Cascade.TYPE=ALL if (exist != null) { em.remove(exist); System.err.println("module did remove"); } // 永続化する em.persist(module); return patient; }