private NLaboItem createNLaboItem(InFacilityLaboItem item) { NLaboItem nLaboItem = new NLaboItem(); nLaboItem.setItemCode(item.getMedisCode()); nLaboItem.setItemName(item.getItemName()); nLaboItem.setMedisCode(item.getMedisCode()); nLaboItem.setParentCode(item.getParentCode()); nLaboItem.setGroupCode(item.getGroupCode()); nLaboItem.setGroupName(item.getGroupName()); nLaboItem.setLaboCode(item.getLaboCode()); nLaboItem.setNormalValue(item.getNormalValue()); nLaboItem.setSpecimenCode(item.getSpecimenCode()); nLaboItem.setSpecimenName(item.getSpecimenName()); nLaboItem.setReportStatus("E"); nLaboItem.setValue(item.getItemValue()); nLaboItem.setAbnormalFlg(item.getAbnormalFlg()); nLaboItem.setUnit(item.getUnit()); return nLaboItem; }
@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; }
private void save() throws Exception { @SuppressWarnings("unchecked") List<InFacilityLaboItem> list = setTableModel.getDataProvider(); // laboCode(facilityId)を設定する String fid = Project.getFacilityId(); for (InFacilityLaboItem item : list) { item.setLaboCode(fid); } // まずは施設内検査項目を登録する。 MasudaDelegater del = MasudaDelegater.getInstance(); del.updateInFacilityLaboItemList(list); // ついでNLaboModuleを登録する。 String pid = chart.getPatient().getPatientId(); String fidPid = fid + ":" + pid; String ptName = chart.getPatient().getFullName(); String sampleDate = dateFld.getText().trim(); // 検査箋(検査モジュール)のキー = patientId.sampleDate.labCode StringBuilder buf = new StringBuilder(); buf.append(pid); buf.append("."); buf.append(sampleDate); buf.append("."); buf.append(fid); String testKey = buf.toString(); // NLaboModuleを作成 NLaboModule nLaboModule = new NLaboModule(); // NLaboItemを作成 List<NLaboItem> nLaboItemList = new ArrayList<>(); for (InFacilityLaboItem item : list) { String itemValue = item.getItemValue(); if (itemValue == null || itemValue.trim().isEmpty()) { continue; } NLaboItem nLaboItem = createNLaboItem(item); nLaboItem.setPatientId(fidPid); nLaboItem.setLaboCode(fid); nLaboItem.setSampleDate(sampleDate); nLaboItem.setLaboModule(nLaboModule); nLaboItemList.add(nLaboItem); } // 空ならリターン if (nLaboItemList.isEmpty()) { return; } // NLaboModuleに情報設定 nLaboModule.setPatientId(pid); // ここはただのPatientID nLaboModule.setPatientName(ptName); nLaboModule.setPatientSex(male ? "M" : "F"); nLaboModule.setSampleDate(sampleDate); nLaboModule.setLaboCenterCode(fid); nLaboModule.setModuleKey(testKey); nLaboModule.setReportFormat("NLab"); // nLaboModule.setNumOfItems(String.valueOf(nLaboItemList.size())); nLaboModule.setItems(nLaboItemList); // NLaboModuleをデータベースに登録する LaboDelegater ldel = LaboDelegater.getInstance(); ldel.postNLaboModule(nLaboModule); }