2014年11月12日水曜日

(2)SpringMVC+Thymelef+Bootstrap で実用アプリの開発: アプリケーションの機能、モデル作成

健康管理アプリケーション(healthcare)全体は、カレンダー(定期検診、通院、ヘルパーの予約などの予定を管理)、お薬手帳(個人カルテ、処方箋などの管理)、バイタル管理(日々のバイタルを管理)などの機能が考えられます。このブログでは、デモアプリとして、その一部のバイタル管理の実装を説明します。

アプリケーションの機能(バイタル管理)
患者(健康な人の場合も)のバイタル(血圧、体温、体重、血糖値など)を管理します。
  • バイタルデータの保存:毎日、定期的にバイタルを測定して入力/保存します。
  • バイタルの一覧表示:システム日から遡って1週間ごとの測定したバイタルの一覧を表示します。
  • チャートの表示:一覧表示された測定値をグラフで表示します。
  • データのエキスポート:Excellファイル や PDF として登録データを出力します。
  • データのインポート:Excell ファイルからデータを読み込みます。
  • 薬管理と組み合わせた場合、モバイル端末への通知行うようにします。

モデルの作成
バイタルの測定値を管理するための Vital エンティティは次のようなものです:
バイタルマスターに設定した、順序、予定時間で、特定のタイプのバイタルを測定し、測定値と実際に記入された時間を保存します(注意:デモアプリでは実際の入力時間を設定するとデータ作成が面倒なため、予定時間をそのまま測定時間として設定することにします)。

また、これらの Vital の1日分を保持する Vod エンティティは次のようなものです:
Vital のタイプや測定時間は患者ごとに異なります。本来はユーザーごとにマスターを登録するべきですが、デモアプリでは簡単にするために1ユーザーのマスターのみ登録しています。
特定の患者(ユーザー)に対して、測定するバイタルタイプと測定時間を指定するマスター :
決められた予定時間に、特定のタイプ(血糖値、血圧など)のバイタルを測定します。同じタイプでも異なる時間に測定するた、め入力する人がわかりやすい名前(空腹時血糖など)をつけます。また、それぞれの患者(ユーザー)によって、注意すべき基準値が異なるため、それらも設定できるようにします。
例えば、マスターには次のようなデータを設定します:


リポジトリの作成
上記の各エンティの CRUD 操作のためのリポジトリを作成します。
com.itrane.healthcare.repo.VodRepository :
その他のリポジトリ: GitHub のソースコードを参照してください。

サービスの作成
上述したアプリケーションの機能を実現するためのサービスを作成します。
com.trane.healthcare.service.VodServiceImpl :
その他のサービス: GitHub のソースコードを参照してください。

マスターの初期化とダミーデータの作成
このアプリケーションでは、マスター保守などの機能は実装していません。また上述した機能(一覧表示、チャート表示、エクスポートなど)を確認する都合上、アプリケーション起動時にバイタルマスターにマスターデータを登録し、1ヶ月分の Vod データを登録しておきます。ここでは、アプリケーション・コンテキストの作成後の初期化処理でこれを行います。
com.trane.healthcare.init.WebAppConfig.java に次のコードを追加します:
これにより、InitMaster クラスの @PostConstruct 注釈付きメソッドの initData() が実行されてバイタルマスターテーブルにデータが登録されます。また CreateDummyData クラスの @PostConstruct 注釈付きメソッドの createData() が実行されてバイタルテーブルに1ヶ月分のデータが登録されます。
Vod に登録されたデータの一部:

Vital に登録されたデータの一部:

エンティティの関連
アプリケーションを起動して、MySQLWorkBench のリバースエンジニアリングの機能を使って、エンティティ間の関連が設計通りであることを確認できます。


まとめ
eclipslink を使ったデータベース設定、上述のモデルと対応するリポジトリやサービスを使用して、それぞれのエンティティに対応するテーブルが作成され、初期データが登録されます。さらに各エンティティの関連が意図した通りであることも確認できました。次回は日々のバイタル測定値を入力する画面を作成します。

ソースコード
GitHub からソースコードをダウンロードすることができます: branch2

0 件のコメント: