/** * カルテを開く。 * * @param value 対象患者 */ public void openKarte() { if (canOpen(getSelectedPatinet())) { // 来院情報を生成する PatientVisitModel pvt = new PatientVisitModel(); pvt.setId(0L); pvt.setNumber(number++); pvt.setPatientModel(getSelectedPatinet()); // -------------------------------------------------------- // 受け付けを通していないのでログイン情報及び設定ファイルを使用する // 診療科名、診療科コード、医師名、医師コード、JMARI // 2.0 // --------------------------------------------------------- pvt.setDeptName(Project.getUserModel().getDepartmentModel().getDepartmentDesc()); pvt.setDeptCode(Project.getUserModel().getDepartmentModel().getDepartment()); pvt.setDoctorName(Project.getUserModel().getCommonName()); if (Project.getUserModel().getOrcaId() != null) { pvt.setDoctorId(Project.getUserModel().getOrcaId()); } else { pvt.setDoctorId(Project.getUserModel().getUserId()); } pvt.setJmariNumber(Project.getString(Project.JMARI_CODE)); // 来院日 pvt.setFacilityId(Project.getUserModel().getFacilityModel().getFacilityId()); pvt.setPvtDate(ModelUtils.getDateTimeAsString(new Date())); // カルテコンテナを生成する getContext().openKarte(pvt); } }
/** リストで選択された患者を受付に登録する。 */ public void addAsPvt() { // 来院情報を生成する PatientVisitModel pvt = new PatientVisitModel(); pvt.setId(0L); pvt.setNumber(number++); pvt.setPatientModel(getSelectedPatinet()); // -------------------------------------------------------- // 受け付けを通していないのでログイン情報及び設定ファイルを使用する // 診療科名、診療科コード、医師名、医師コード、JMARI // 2.0 // --------------------------------------------------------- pvt.setDeptName(Project.getUserModel().getDepartmentModel().getDepartmentDesc()); pvt.setDeptCode(Project.getUserModel().getDepartmentModel().getDepartment()); pvt.setDoctorName(Project.getUserModel().getCommonName()); if (Project.getUserModel().getOrcaId() != null) { pvt.setDoctorId(Project.getUserModel().getOrcaId()); } else { pvt.setDoctorId(Project.getUserModel().getUserId()); } pvt.setJmariNumber(Project.getString(Project.JMARI_CODE)); // 来院日 pvt.setPvtDate(ModelUtils.getDateTimeAsString(new Date())); final PatientVisitModel fPvt = pvt; SimpleWorker worker = new SimpleWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { PVTDelegater1 pdl = new PVTDelegater1(); pdl.addPvt(fPvt); return null; } @Override protected void succeeded(Void result) {} @Override protected void failed(Throwable cause) {} @Override protected void startProgress() { doStartProgress(); } @Override protected void stopProgress() { doStopProgress(); } }; worker.execute(); }
/** * CLAIM送信を行う。 * * @param sendModel 送信するDocuentModel * @throws Exception */ public void send(DiagnosisSendWrapper wrapper) throws Exception { // s.oh^ 2013/12/10 傷病名のCLAIM送信する/しない Properties config = new Properties(); StringBuilder sbPath = new StringBuilder(); sbPath.append(System.getProperty("jboss.home.dir")); sbPath.append(File.separator); sbPath.append("custom.properties"); File f = new File(sbPath.toString()); FileInputStream fin = new FileInputStream(f); InputStreamReader isr = new InputStreamReader(fin, "JISAutoDetect"); config.load(isr); isr.close(); String claimSend = config.getProperty("diagnosis.claim.send"); if (claimSend != null && claimSend.equals("false")) { return; } // s.oh$ // 新規病名 List<RegisteredDiagnosisModel> addedDiagnosis = wrapper.getAddedDiagnosis(); // 更新病名 List<RegisteredDiagnosisModel> updatedDiagnosis = wrapper.getUpdatedDiagnosis(); // minagawa^ LSC 1.4 傷病名の削除 2013/06/24 // 削除病名 List<RegisteredDiagnosisModel> deletedDiagnosis = wrapper.getDeletedDiagnosis(); // minagawa$ // 実際にCLAIM送信する病名 List<RegisteredDiagnosisModel> actualList = new ArrayList<RegisteredDiagnosisModel>(); // 新規病名を送信する if (addedDiagnosis != null && addedDiagnosis.size() > 0) { for (RegisteredDiagnosisModel rdm : addedDiagnosis) { if (isDorcaUpdatedDisease(rdm) || isPureDisease(rdm)) { actualList.add(rdm); } } if (!actualList.isEmpty()) { if (DEBUG) { debug("-------- Send Diagnosis List to add ----------------"); for (RegisteredDiagnosisModel r : actualList) { debug(r.getDiagnosis()); } } } } // 更新された病名を CLAIM 送信する // detuched object のみ if (updatedDiagnosis != null && updatedDiagnosis.size() > 0) { if (DEBUG) { debug("-------- Send Diagnosis List to update ----------------"); for (RegisteredDiagnosisModel r : updatedDiagnosis) { debug(r.getDiagnosis()); } } actualList.addAll(updatedDiagnosis); } // minagawa^ LSC 1.4 傷病名の削除 2013/06/24 if (deletedDiagnosis != null && deletedDiagnosis.size() > 0) { if (DEBUG) { debug("-------- Send Diagnosis List to delete ----------------"); for (RegisteredDiagnosisModel r : updatedDiagnosis) { debug(r.getDiagnosis()); } } actualList.addAll(deletedDiagnosis); } if (actualList.isEmpty()) { return; } // minagawa$ // DocInfo & RD をカプセル化したアイテムを生成する ArrayList<DiagnosisModuleItem> moduleItems = new ArrayList<DiagnosisModuleItem>(); for (RegisteredDiagnosisModel rd : actualList) { DocInfoModel docInfo = new DocInfoModel(); docInfo.setDocId(GUIDGenerator.generate(docInfo)); docInfo.setTitle(IInfoModel.DEFAULT_DIAGNOSIS_TITLE); docInfo.setPurpose(IInfoModel.PURPOSE_RECORD); docInfo.setFirstConfirmDate(ModelUtils.getDateTimeAsObject(rd.getConfirmDate())); docInfo.setConfirmDate(ModelUtils.getDateTimeAsObject(rd.getFirstConfirmDate())); // s.oh^ 2013/05/10 傷病名対応 rd.setDiagnosisCode(HAND_CODE); // ORCAから取り込んだ場合、コードに0000999を設定する // s.oh$ DiagnosisModuleItem mItem = new DiagnosisModuleItem(); mItem.setDocInfo(docInfo); mItem.setRegisteredDiagnosisModule(rd); moduleItems.add(mItem); } // ヘルパー用の値を生成する String confirmDate = wrapper.getConfirmDate(); // ヘルパークラスを生成する DiseaseHelper dhl = new DiseaseHelper(); dhl.setPatientId(wrapper.getPatientId()); // 患者ID dhl.setConfirmDate(confirmDate); // 確定日 dhl.setDiagnosisModuleItems(moduleItems); // RD+DocInfo dhl.setGroupId(GUIDGenerator.generate(dhl)); // GroupId dhl.setDepartment(wrapper.getDepartment()); // 診療科コード dhl.setDepartmentDesc(wrapper.getDepartmentDesc()); // 診療科名 dhl.setCreatorName(wrapper.getCreatorName()); // 担当医名 dhl.setCreatorId(wrapper.getCreatorLicense()); // 担当医コード dhl.setJmariCode(wrapper.getJamariCode()); // JMARI code dhl.setCreatorLicense(wrapper.getCreatorLicense()); // 医療資格 dhl.setFacilityName(wrapper.getFacilityName()); // 施設名 if (DEBUG) { debug("患者ID=" + dhl.getPatientId()); debug("確定日=" + dhl.getConfirmDate()); debug("GroupId=" + dhl.getGroupId()); debug("診療科コード=" + dhl.getDepartment()); debug("診療科名=" + dhl.getDepartmentDesc()); debug("担当医名=" + dhl.getCreatorName()); debug("担当医コード=" + dhl.getCreatorId()); debug("JMARI code=" + dhl.getJmariCode()); debug("医療資格=" + dhl.getCreatorLicense()); debug("施設名=" + dhl.getFacilityName()); } // ログのために基本情報を生成する StringBuilder sb = new StringBuilder(); sb.append(confirmDate).append(" "); sb.append(wrapper.getPatientId()).append(" "); sb.append(wrapper.getPatientName()).append(" "); sb.append(wrapper.getPatientGender()); String baseInfo = sb.toString(); // -------------------------------------------------------- // CLIAM message を生成する // -------------------------------------------------------- VelocityContext context = VelocityHelper.getContext(); context.put(OBJECT_NAME, dhl); StringWriter sw = new StringWriter(); BufferedWriter bw = new BufferedWriter(sw); Velocity.mergeTemplate(TEMPLATE_NAME, TEMPLATE_ENC, context, bw); bw.flush(); bw.close(); String claimMessage = sw.toString(); // minagawa^ CLAIM Log log(claimMessage); // if (DEBUG) { // debug(claimMessage); // } // minagawa$ // -------------------------------------------------------- // ORCAへ接続する Socket socket = new Socket(host, port); OutputStream out = socket.getOutputStream(); DataOutputStream dout = new DataOutputStream(out); BufferedOutputStream writer = new BufferedOutputStream(dout); InputStream in = socket.getInputStream(); DataInputStream din = new DataInputStream(in); BufferedInputStream reader = new BufferedInputStream(din); // Writes UTF8 data writer.write(claimMessage.getBytes(enc)); writer.write(EOT); writer.flush(); // Reads result int c = reader.read(); if (c == ACK) { sb = new StringBuilder(); sb.append(ACK_STR).append(baseInfo); log(sb.toString()); } else if (c == NAK) { sb = new StringBuilder(); sb.append(NAK_STR).append(baseInfo); log(sb.toString()); } writer.close(); reader.close(); socket.close(); }
// s.oh^ 2014/08/19 施設患者一括表示機能 public void visitAll() { List<PatientModel> list = getTableModel().getDataProvider(); if (list == null) return; for (PatientModel model : list) { // 来院情報を生成する PatientVisitModel pvt = new PatientVisitModel(); pvt.setId(0L); pvt.setNumber(number++); pvt.setPatientModel(model); // -------------------------------------------------------- // 受け付けを通していないのでログイン情報及び設定ファイルを使用する // 診療科名、診療科コード、医師名、医師コード、JMARI // 2.0 // --------------------------------------------------------- pvt.setDeptName(Project.getUserModel().getDepartmentModel().getDepartmentDesc()); pvt.setDeptCode(Project.getUserModel().getDepartmentModel().getDepartment()); pvt.setDoctorName(Project.getUserModel().getCommonName()); if (Project.getUserModel().getOrcaId() != null) { pvt.setDoctorId(Project.getUserModel().getOrcaId()); } else { pvt.setDoctorId(Project.getUserModel().getUserId()); } String jamri; if (Project.claimSenderIsServer()) { ServerInfoDelegater sid = new ServerInfoDelegater(); try { jamri = sid.getJamri(); } catch (Exception ex) { jamri = Project.getString(Project.JMARI_CODE); Log.outputFuncLog(Log.LOG_LEVEL_0, Log.FUNCTIONLOG_KIND_ERROR, ex.toString()); } } else { jamri = Project.getString(Project.JMARI_CODE); } pvt.setJmariNumber(jamri); // 来院日 pvt.setPvtDate(ModelUtils.getDateTimeAsString(new Date())); final PatientVisitModel fPvt = pvt; SimpleWorker worker = new SimpleWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { PVTDelegater1 pdl = new PVTDelegater1(); pdl.addPvt(fPvt); return null; } @Override protected void succeeded(Void result) {} @Override protected void failed(Throwable cause) {} @Override protected void startProgress() { doStartProgress(); } @Override protected void stopProgress() { doStopProgress(); } }; worker.execute(); } Window parent = SwingUtilities.getWindowAncestor(getUI()); JOptionPane.showMessageDialog(parent, "一括受付しました。", "一括受付", JOptionPane.WARNING_MESSAGE); Log.outputFuncLog(Log.LOG_LEVEL_0, Log.FUNCTIONLOG_KIND_INFORMATION, "一括受付しました。"); }