生年月日検索
患者検索のキーワード入力で,検索キーワードの頭にアルファベット+スペースを付けると,それぞれ下記のような検索ができるようになっている。この機能を拡張して,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]+");
}




