状態アイコン表示色
状態アイコンの背景色を増やした。病名が付いていない場合,初診の場合に加えて,カルテ記載がされていない場合を加えた。状態に応じて背景の色を変えることで表示する。
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」カテゴリの記事
- OpenDolphin: Java 25 / WildFly 38 への移行(2025.11.09)
- 運用17年目のまとめ(2025.02.03)
- IME on/off の切換 - その2(2024.12.02)
- OrcaController オルコン(2024.11.28)
- OpenDolphin: java 21 / wildfly 34 への移行(2024.11.08)



