package open.dolphin.delegater;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import open.dolphin.converter.PatientVisitModelConverter;
import open.dolphin.infomodel.*;
import open.dolphin.util.BeanUtils;
import org.codehaus.jackson.map.ObjectMapper;
/**
* User 関連の Business Delegater クラス。
*
* @author Kazushi Minagawa, Digital Globe, Inc.
*/
public final class PVTDelegater1 extends BusinessDelegater {
private static final String RES_PVT = "/pvt";
/**
* 受付情報 PatientVisitModel をデータベースに登録する。
* @param pvtModel 受付情報 PatientVisitModel
* @return 保存に成功した個数
* @throws java.lang.Exception
*/
public int addPvt(PatientVisitModel pvtModel) throws Exception {
// Converter
PatientVisitModelConverter conv = new PatientVisitModelConverter();
conv.setModel(pvtModel);
// JSON
ObjectMapper mapper = this.getSerializeMapper();
byte[] data = mapper.writeValueAsBytes(conv);
// POST
String entityStr = postEasyJson(RES_PVT, data, String.class);
// Count
return Integer.parseInt(entityStr);
}
/** *
* 来院情報を取得する。
* @param date 検索する来院日
* @param firstRecord 何番目のレコードから取得するか
* @return
* @throws java.lang.Exception PatientVisitModel のコレクション
*/
public Collection<PatientVisitModel> getPvt(String[] date, int firstRecord) throws Exception {
// PATH
StringBuilder sb = new StringBuilder();
sb.append(RES_PVT);
sb.append("/");
sb.append(date[0]);
sb.append(CAMMA);
sb.append(String.valueOf(firstRecord));
sb.append(CAMMA);
sb.append(date[1]);
sb.append(CAMMA);
sb.append(date[2]);
String path = sb.toString();
// GET
PatientVisitList result = getEasyJson(path, PatientVisitList.class);
// Decode
List<PatientVisitModel> list = result.getList();
if (list != null && list.size() > 0) {
for (PatientVisitModel pm : list) {
decodeHealthInsurance(pm.getPatientModel());
}
}
return list;
}
/**
* 担当分と未決定分の来院情報を取得する。
* @param did 担当ID
* @param unassigened 未決定ID 19999
* @param date 来院日
* @param firstRecord 最初のレコード
* @return 来院情報リスト
* @throws java.lang.Exception
*/
public Collection<PatientVisitModel> getPvtForAssigned(String did, String unassigened, String[] date, int firstRecord) throws Exception {
// PATH
StringBuilder sb = new StringBuilder();
sb.append(RES_PVT);
sb.append(did).append(CAMMA);
sb.append(unassigened).append(CAMMA);
sb.append(date[0]).append(CAMMA);
sb.append(String.valueOf(firstRecord)).append(CAMMA);
sb.append(date[1]).append(CAMMA);
sb.append(date[2]);
String path = sb.toString();
// GET
PatientVisitList result = getEasyJson(path, PatientVisitList.class);
// Decode
List<PatientVisitModel> list = result.getList();
if (list != null && list.size() > 0) {
for (PatientVisitModel pm : list) {
decodeHealthInsurance(pm.getPatientModel());
}
}
return list;
}
/**
* バイナリの健康保険データをオブジェクトにデコードする。
* @param patient 患者モデル
*/
private void decodeHealthInsurance(PatientModel patient) {
// Health Insurance を変換をする beanXML2PVT
Collection<HealthInsuranceModel> c = patient.getHealthInsurances();
if (c != null && c.size() > 0) {
ArrayList<PVTHealthInsuranceModel> list = new ArrayList<>(c.size());
for (HealthInsuranceModel model : c) {
try {
// byte[] を XMLDecord
PVTHealthInsuranceModel hModel = (PVTHealthInsuranceModel)BeanUtils.xmlDecode(model.getBeanBytes());
list.add(hModel);
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
patient.setPvtHealthInsurances(list);
patient.getHealthInsurances().clear();
patient.setHealthInsurances(null);
}
}
}