状態アイコン表示色
状態アイコンの背景色を増やした。病名が付いていない場合,初診の場合に加えて,カルテ記載がされていない場合を加えた。状態に応じて背景の色を変えることで表示する。
client/DocumentPeeker.java の作成
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package open.dolphin.client; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.GregorianCalendar; import java.util.List; import open.dolphin.delegater.DocumentDelegater; import open.dolphin.dto.DiagnosisSearchSpec; import open.dolphin.dto.DocumentSearchSpec; import open.dolphin.infomodel.DocInfoModel; import open.dolphin.infomodel.DocumentModel; import open.dolphin.infomodel.IInfoModel; import open.dolphin.infomodel.KarteBean; import open.dolphin.infomodel.ModuleModel; import open.dolphin.infomodel.PatientVisitModel; import open.dolphin.infomodel.ProgressCourse; import org.apache.log4j.Logger; /** * ちょっとカルテ内容をチェックして pvt に必要な情報をセットする */ public class DocumentPeeker { private Logger logger; private DocumentDelegater ddl; private GregorianCalendar today; private GregorianCalendar yesterday; public DocumentPeeker() { today = new GregorianCalendar(); ddl = new DocumentDelegater(); yesterday = new GregorianCalendar(); yesterday.add(GregorianCalendar.DATE, -1); yesterday.set(Calendar.HOUR_OF_DAY, 23); logger = ClientContext.getBootLogger(); } public void setByomeiCount(PatientVisitModel pvt) { KarteBean karte = ddl.getKarte(pvt.getPatient().getId(), today.getTime()); // PatientVisitModel に病名数をセットする Long karteId = karte.getId(); DiagnosisSearchSpec spec = new DiagnosisSearchSpec(); spec.setCode(DiagnosisSearchSpec.PATIENT_SEARCH); spec.setKarteId(karteId); int byomeiCount = ddl.getDiagnosisList(spec).size(); // 今までについている病名の総数 int byomeiCountToday = 0; if (byomeiCount != 0) { spec.setFromDate(yesterday.getTime()); byomeiCountToday = ddl.getDiagnosisList(spec).size(); // 今日ついた病名の総数 } pvt.setByomeiCount(byomeiCount); pvt.setByomeiCountToday(byomeiCountToday); //logger.info("pt id = " + pvt.getPatientId()); //logger.info("total byomei count = " + byomeiCount + " today byomei count = " + byomeiCountToday); } // カルテに pvt.getLeastKarteSize() 文字以下の記載しか無ければ empty karte と判定 public void checkEmptyKarte(PatientVisitModel pvt) { KarteBean karte = ddl.getKarte(pvt.getPatient().getId(), today.getTime()); Long karteId = karte.getId(); DocumentSearchSpec spec = new DocumentSearchSpec(); spec.setKarteId(karteId); spec.setFromDate(yesterday.getTime()); spec.setDocType(IInfoModel.DOCTYPE_KARTE); spec.setIncludeModifid(false); spec.setCode(DocumentSearchSpec.DOCTYPE_SEARCH); spec.setAscending(false); List<DocInfoModel> docInfoList = (List<DocInfoModel>) ddl.getDocumentList(spec); pvt.setKarteEmpty(false); //logger.info("pvt.getPatientId() = " + pvt.getPatientId()); //logger.info("docInfoList size = " + docInfoList.size()); // 今日のカルテがない人はマークしない。今日のカルテを作った段階で,カルテ内容チェックする if (docInfoList.size() != 0) { // DocumentModule をとるための手続 Long id = docInfoList.get(0).getDocPk(); List<Long> docIds = new ArrayList<Long>(); docIds.add(id); List<DocumentModel> docList = ddl.getDocuments(docIds); DocumentModel model = docList.get(0); Collection<ModuleModel> modules = model.getModules(); String xml = null; if (modules != null) { for (ModuleModel bean : modules) { String role = bean.getModuleInfo().getStampRole(); if (role.equals(IInfoModel.ROLE_SOA_SPEC)) xml = ((ProgressCourse) bean.getModel()).getFreeText(); } if (extractText(xml).length() <= pvt.getLeasKarteSize()) pvt.setKarteEmpty(true); } else pvt.setKarteEmpty(true); } } // カルテの内容から text を抜き出す private String extractText(String xml) { StringBuffer buf = new StringBuffer(); String head[] = xml.split("<text>"); for (String str : head) { String tail[] = str.split("</text>"); if (tail.length == 2) buf.append(tail[0].trim()); } //logger.info("extractText: " + buf.toString()); return buf.toString(); } }
plugin/WatingListImpl.java の編集
public class WatingListImpl extends AbstractMainComponent { ・ ・ private WatingListView view; ////↓ private DocumentPeeker peeker = new DocumentPeeker(); private final Color SHOSHIN_COLOR = new Color(180,220,240); //青っぽい色 private final Color KARTE_EMPTY_COLOR = new Color(250,200,160); //茶色っぽい色 private final Color DIAGNOSIS_EMPTY_COLOR = new Color(243,255,15); //黄色 ////↑ ・ ・ protected class PvtChecker implements Runnable { ・ ・ // 結果を追加する if (newVisitCount > 0) { for (int i = 0; i < newVisitCount; i++) { ////↓ 受付番号表示 PatientVisitModel pvt = (PatientVisitModel) result.get(i); pvt.setNumber(firstResult+i+1); // 病名が1つでもあるかどうか,初診かどうかを pvt にセット peeker.setByomeiCount(pvt); // カルテ記載されているかどうか peeker.checkEmptyKarte(pvt); ////↑ dataList.add(result.get(i)); ・ ・ protected class PvtChecker2 implements Callable{ ・ ・ // // cnt 以降は新しいレコードなのでそのまま追加する // for (int i = index; i < result.size(); i++) { ////↓ // 受付番号表示 PatientVisitModel pvt = (PatientVisitModel) result.get(i); pvt.setNumber(firstResult+i+1); dataList.add(result.get(i)); //dataList.add(result.get(index++)); // 病名が1つでもあるかどうか,初診かどうかを pvt にセット peeker.setByomeiCount(pvt); // カルテ記載されているかどうか peeker.checkEmptyKarte(pvt); ////↑ ・ ・ protected class KarteStateRenderer extends DefaultTableCellRenderer { Color fore = pvt != null && pvt.getState() == ChartImpl.CANCEL_PVT ? CANCEL_PVT_COLOR : table.getForeground(); this.setForeground(fore); } ////↓ 状態に応じて背景色を変更 if (pvt != null) { // 初診 if (pvt.isShoshin()) this.setBackground(SHOSHIN_COLOR); // カルテ記載がまだ if (pvt.isKarteEmpty()) this.setBackground(KARTE_EMPTY_COLOR); // 病名ついてない if (!pvt.hasByomei()) this.setBackground(DIAGNOSIS_EMPTY_COLOR); } ////↑
client/KarteEditor.java の編集
private void save2(final SaveParams params) throws DolphinException { ・ ・ // // SOAPane をダンプし model に追加する // KartePaneDumper_2 dumper = new KartePaneDumper_2(); KarteStyledDocument doc = (KarteStyledDocument) soaPane.getTextPane().getDocument(); dumper.dump(doc); ModuleModel[] soa = dumper.getModule(); if (soa != null && soa.length > 0) { logger.debug("soaPane dumped, number of SOA modules = " + soa.length); model.addModule(soa); } else { logger.debug("soaPane dumped, no module"); } ////↓ カルテ記載があるかどうか記録。10文字以下だったら未記載と判定。 PatientVisitModel pvt = this.getContext().getPatientVisit(); if (doc.getLength() <= pvt.getLeasKarteSize()) pvt.setKarteEmpty(true); else pvt.setKarteEmpty(false); ////↑
client/DiagnosisDocument.java の編集
class DiagnosisPutTask extends DBTask> { ・ ・ @Override protected List<Long> doInBackground() throws Exception { ・ ・ ////↓ PatientVisitModel に病名数をセットする new DocumentPeeker().setByomeiCount(getContext().getPatientVisit()); ////↑
infomodel/PatientVisitModel.java の編集
//カルテ記載がまだかどうか public void setKarteEmpty(boolean k) { karteEmpty = k; } public boolean isKarteEmpty() { return karteEmpty; } public int getLeasKarteSize() { return LEAST_KARTE_SIZE; }
« ショートカットいろいろ | トップページ | 検索機能強化 »
「OpenDolphin」カテゴリの記事
- Java 17 への移行(7) - OpenDolphin client の対応 (2023.02.04)
- Java 17 への移行(6) - Hibernate 6 でやらかす(2023.02.03)
- Java 17 への移行(5) - OpenDolphin server の対応(2023.02.02)
- Java 17 への移行(4) - OpenSearch の準備 [ubuntu 編](2023.02.01)
- Java 17 への移行(3) - OpenSearch の準備 [mac 編](2023.01.31)