String message = "ORCA 接続中";
String note = "移行病名チェック";
int maxEstimation = 10000;
int delay = 3000;
Task task = new Task<Boolean>(c, message, note, maxEstimation) {
@Override
protected Boolean doInBackground() throws Exception {
Boolean found = false;
// 病名コードを切り出して(接頭語,接尾語は捨てる)コードのリストを作る
// 重複は不要なので,HashSet を使う
HashSet<String> codeSet = new HashSet<String>();
for (RegisteredDiagnosisModel rd : rdList) {
String[] codes = rd.getDiagnosisCode().split("\\.");
// codes のうち,7桁のものが srycd コード
for (String code : codes) {
if (code.length() == 7) codeSet.add(code);
}
}
//dao 取得
OrcaMasterDao dao = SqlDaoFactory.createOrcaMasterDao();
// orca の tbl_byomei から code に対応する DiseaseEntry を取ってくる
List<OrcaEntry> entries = dao.getByomeiEntries(codeSet.toArray(new String[0]));
for (OrcaEntry entry : entries) {
// DisUseDate が 99999999 でないならば,移行病名または廃止病名
if (! entry.getEndDate().equals("99999999")) {
// 対応する rd の status に移行病名をセット
for (RegisteredDiagnosisModel rd : rdList) {
if (rd.getDiagnosisCode().equals(entry.getCode())) {
rd.setStatus(IKOU_BYOMEI_RECORD);
found = true;
}
}
}
}
return found;
}
@Override
protected void succeeded(Boolean found) {
if (found) {
// fire すると選択が解除されてしまうので,選択を保存・復帰する
int[] selected = diagTable.getSelectedRows();
tableModel.fireTableDataChanged();
for(int row : selected) {
diagTable.getSelectionModel().setSelectionInterval(row, row);
}
}
}
};
task.setMillisToDecidePopup(delay);
task.execute();
}