*/
@Override
@PermitAll // MBean からの呼び出し対応
public int addPvt(PatientVisitModel pvt) {
PatientModel patient = pvt.getPatient();
String facilityId = DEFAULT_FACILITY_OID;
// MBean からの呼び出しの場合は ctx.getCallerPrincipal().getName() が "anonymous" を返す
String callerId = ctx.getCallerPrincipal().getName();
if (callerId.contains(IInfoModel.COMPOSITE_KEY_MAKER)) {
// 施設IDを認証にパスしたユーザがある場合は facilityId を更新する
facilityId = getCallersFacilityId(ctx);
}
pvt.setFacilityId(facilityId);
patient.setFacilityId(facilityId);
PatientModel exist = null;
// 既存の患者かどうか調べる
try {
exist = (PatientModel) em
.createQuery("from PatientModel p where p.facilityId = :fid and p.patientId = :pid")
.setParameter("fid", facilityId)
.setParameter("pid", patient.getPatientId())
.getSingleResult();
//
// 健康保険情報を更新する
//
Collection<HealthInsuranceModel> ins = patient.getHealthInsurances();
if (ins != null && ins.size() > 0) {
// 健康保険を更新する
Collection old = em.createQuery("from HealthInsuranceModel h where h.patient.id = :pk")
.setParameter("pk", exist.getId())
.getResultList();
// 現在の保険情報を削除する
for (Iterator iter = old.iterator(); iter.hasNext(); ) {
HealthInsuranceModel model = (HealthInsuranceModel) iter.next();
em.remove(model);
}
// 新しい健康保険情報を登録する
Collection<HealthInsuranceModel> newOne = patient.getHealthInsurances();
for (HealthInsuranceModel model : newOne) {
model.setPatient(exist);
em.persist(model);
}
}
// 名前を更新する 2007-04-12
exist.setFamilyName(patient.getFamilyName());
exist.setGivenName(patient.getGivenName());
exist.setFullName(patient.getFullName());
exist.setKanaFamilyName(patient.getKanaFamilyName());
exist.setKanaGivenName(patient.getKanaGivenName());
exist.setKanaName(patient.getKanaName());
exist.setRomanFamilyName(patient.getRomanFamilyName());
exist.setRomanGivenName(patient.getRomanGivenName());
exist.setRomanName(patient.getRomanName());
// 性別
exist.setGender(patient.getGender());
exist.setGenderDesc(patient.getGenderDesc());
exist.setGenderCodeSys(patient.getGenderCodeSys());
// Birthday
exist.setBirthday(patient.getBirthday());
// 住所、電話を更新する
exist.setAddress(patient.getAddress());
exist.setTelephone(patient.getTelephone());
//exist.setMobilePhone(patient.getMobilePhone());
// PatientVisit との関係を設定する
pvt.setPatient(exist);
// トータルの病名数をセット
pvt.setByomeiCount(getByomeiCount(exist.getId()));
// 今日の病名数をセット
pvt.setByomeiCountToday(getByomeiCountToday(exist.getId()));
} catch (NoResultException e) {
// 新規患者であれば登録する
// 患者属性は cascade=PERSIST で自動的に保存される
em.persist(patient);