生年月日検索
患者検索のキーワード入力で,検索キーワードの頭にアルファベット+スペースを付けると,それぞれ下記のような検索ができるようになっている。この機能を拡張して,B 年-月-日 で生年月日検索ができるようにした。なお,年号で入力する場合は,最初の B を省略できるようにした。
例)B H12-3-4 または H12-3-4 または B 2000-03-04 などと入力する。
例)B H12-3-4 または H12-3-4 または B 2000-03-04 などと入力する。
N | 名前検索 |
K | カナ検索 |
A | 住所検索 |
Z | 郵便番号検索 |
T | 電話番号検索 |
I | ID 検索 |
E | メールアドレス検索 |
O | その他 ID 検索(コーディングされていない) |
B | 生年月日検索(今回作成) |
dto/PatientSearchSpec.java
//pns^ public static final int BIRTHDAY_SEARCH = 12; private String birthday; public void setBirthday(String birthday) { this.birthday = birthday; } public String getBirthday() { return birthday; } //pns$
ejb/RemotePatientServiceImpl.java
public Collection getPatients(PatientSearchSpec spec) { ・ ・ //pns^ case PatientSearchSpec.BIRTHDAY_SEARCH: String birthday = spec.getBirthday(); if (!birthday.endsWith("%")) { birthday += "%"; } ret = em.createQuery("from PatientModel p where p.facilityId = :fid and p.birthday like :birthday") .setMaxResults(50) .setParameter("fid", fid) .setParameter("birthday", birthday) .getResultList(); //pns$
infomodel/ModelUtils.java
/** 年号=>西暦変換 H22-7-26 => 2010-07-26 by pns * @param nengoBirthday * @return mmlBirthday */ public static String toSeireki(String nengoBirthday) { try { StringTokenizer st = new StringTokenizer(nengoBirthday, "-"); String yearStr = st.nextToken(); String monthStr = st.nextToken(); String dateStr = st.nextToken(); String nengo = yearStr.substring(0,1); int year = Integer.valueOf(yearStr.substring(1)); if ("M".equals(nengo) || "m".equals(nengo)) year = year + 1867; else if ("T".equals(nengo) || "t".equals(nengo)) year = year + 1911; else if ("S".equals(nengo) || "s".equals(nengo)) year = year + 1925; else if ("H".equals(nengo) || "h".equals(nengo)) year = year + 1988; else year = Integer.valueOf(yearStr); // 西暦で入ってきた場合 if (monthStr.length() == 1) monthStr = "0" + monthStr; if (dateStr.length() == 1) dateStr = "0" + dateStr; StringBuilder mmlBirthday = new StringBuilder(); mmlBirthday.append(Integer.toString(year)); mmlBirthday.append("-"); mmlBirthday.append(monthStr); mmlBirthday.append("-"); mmlBirthday.append(dateStr); return mmlBirthday.toString(); } catch (Exception ex) { System.out.println("ModelUtils.java: " + ex); return null; } }
plugin/PatientSearchImpl.java
private void find(String text) { ・ ・ } else if (text.startsWith("O ") || text.startsWith("o ")) { spec.setCode(PatientSearchSpec.OTHERID_SEARCH); text = text.substring(2); spec.setOtherId(text); //pns^ 誕生日検索 } else if (text.startsWith("B ") || text.startsWith("b ")) { spec.setCode(PatientSearchSpec.BIRTHDAY_SEARCH); text = text.substring(2); spec.setBirthday(ModelUtils.toSeireki(text)); } else if (isNengoDate(text)) { spec.setCode(PatientSearchSpec.BIRTHDAY_SEARCH); spec.setBirthday(ModelUtils.toSeireki(text)); //pns$ ・ ・ private boolean isNengoDate(String text) { return text==null? false: text.matches("[MmTtSsHh][0-9]+-[0-9]+-[0-9]+"); }