byomeiCount の永続化
受付リストが増えると,DocumentPeeker の病名数カウントにけっこう時間がかかり,立ち上げ時や更新ボタンを押した後しばらく待たされてしまっていたので,病名数のカウントを PatientVisitModel 内に永続化して早くできるようにした。試しに受付患者数 150 にしてみたところ,以前の方式だと 20秒くらいかかったが,永続化後は 5 秒程度でカウント終了した。もちろん実際にそんなに患者さんが来ているわけではない。
delegater/PVTDelegater
public int setByomeiCount(long pk, int total, int today) { try { return getService().setByomeiCount(pk, total, today); } catch (NamingException e) { e.printStackTrace(); processError(e); } return 0; }
ejb/RemotePvtService.java
/** * 付いている病名数を書き込む * @param pk * @param total 総病名数 * @param today 今日付いた病名数 * @return */ public int setByomeiCount(long pk, int total, int today);
ejb/RemotePvtServiceImpl.java
public CollectiongetPvt(PatientVisitSpec spec) { ・ ・ //pns^ 病名数をセットする // カルテの PK を得る KarteBean karte = (KarteBean)em.createQuery("from KarteBean k where k.patient.id = :pk") .setParameter("pk", patient.getId()) .getSingleResult(); long karteId = karte.getId(); // トータルの病名数 String byomeiCountQuery = "select count(*) from RegisteredDiagnosisModel r where r.karte.id = :karteId and r.started >= :fromDate"; int totalCount = ((Long) em.createQuery(byomeiCountQuery) .setParameter("karteId", karteId) .setParameter("fromDate", new Date(0L)) .getSingleResult()).intValue(); pvt.setByomeiCount(totalCount); // 今日の病名数 GregorianCalendar yesterday = new GregorianCalendar(); yesterday.add(GregorianCalendar.DATE, -1); yesterday.set(Calendar.HOUR_OF_DAY, 23); int todayCount = ((Long)em.createQuery(byomeiCountQuery) .setParameter("karteId", karteId) .setParameter("fromDate", yesterday.getTime()) .getSingleResult()).intValue(); pvt.setByomeiCountToday(todayCount); //pns$ ・ ・ public int setByomeiCount(long pk, int total, int today) { PatientVisitModel exist = em.find(PatientVisitModel.class, pk); exist.setByomeiCount(total); exist.setByomeiCountToday(today); return 1; }
client/DiagnosisDocument.java
class DiagnosisPutTask extends DBTask> { ・ ・ @Override protected List
doInBackground() throws Exception { ・ ・ // ByomeiCount の永続化 PatientVisitModel pvt = getContext().getPatientVisit(); if (pvt.getPvtDate() != null) { // 今日の受診がなければ pvtDate == null PVTDelegater pdl = new PVTDelegater(); pdl.setByomeiCount(pvt.getId(), pvt.getByomeiCount(), pvt.getByomeiCountToday()); }
infomodel/PatientVisitModel.java
//pns^ pvt model の項目を増やす /** 今まで付いた病名の総数 */ @Column(nullable=false) private int byomeiCount; /** 今日付いた病名の数 */ @Column(nullable=false) private int byomeiCountToday; /** カルテ記載があるかどうか */ @Transient private boolean karteEmpty; /** ORCA から送られる「診療内容」 */ private String memo; //pns$nullable=false を書いても,以前に作られた pvt の byomeiCount が全部 null になってしまい,以下のエラーが出る。
Null value was assigned to a property of primitive type setter of byomeicountデータベースを書き換えて対応する。
# update d_patient_visit set byomeicount=0; # update d_patient_visit set byomeicounttoday=0;
「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)