private NLaboItem createNLaboItem(InFacilityLaboItem item) {

    NLaboItem nLaboItem = new NLaboItem();
    nLaboItem.setItemCode(item.getMedisCode());
    nLaboItem.setItemName(item.getItemName());
    nLaboItem.setMedisCode(item.getMedisCode());
    nLaboItem.setParentCode(item.getParentCode());
    nLaboItem.setGroupCode(item.getGroupCode());
    nLaboItem.setGroupName(item.getGroupName());
    nLaboItem.setLaboCode(item.getLaboCode());
    nLaboItem.setNormalValue(item.getNormalValue());
    nLaboItem.setSpecimenCode(item.getSpecimenCode());
    nLaboItem.setSpecimenName(item.getSpecimenName());
    nLaboItem.setReportStatus("E");
    nLaboItem.setValue(item.getItemValue());
    nLaboItem.setAbnormalFlg(item.getAbnormalFlg());
    nLaboItem.setUnit(item.getUnit());
    return nLaboItem;
  }
Exemplo n.º 2
0
  @Override
  public PatientModel create(String fid, NLaboModule module) {

    String pid = module.getPatientId();

    // 施設IDと LaboModule の患者IDで 患者を取得する
    PatientModel patient =
        (PatientModel)
            em.createQuery("from PatientModel p where p.facilityId=:fid and p.patientId=:pid")
                .setParameter("fid", fid)
                .setParameter("pid", pid)
                .getSingleResult();

    // --------------------------------------------------------
    if (patient != null) {

      // 患者の健康保険を取得する
      List<HealthInsuranceModel> insurances =
          (List<HealthInsuranceModel>)
              em.createQuery(QUERY_INSURANCE_BY_PATIENT_PK)
                  .setParameter(PK, patient.getId())
                  .getResultList();
      patient.setHealthInsurances(insurances);
    }
    // --------------------------------------------------------

    String fidPid = fid + ":" + pid;
    module.setPatientId(fidPid);

    // item の patientId を変更する
    Collection<NLaboItem> items = module.getItems();
    for (NLaboItem item : items) {
      item.setPatientId(fidPid);
    }

    // --------------------------------------------------------
    // patientId & 検体採取日 & ラボコード で key
    // これが一致しているモジュールは再報告として削除してから登録する。
    // --------------------------------------------------------
    String sampleDate = module.getSampleDate();
    String laboCode = module.getLaboCenterCode();
    String moduleKey = module.getModuleKey();
    if (moduleKey != null) {
      StringBuilder sb = new StringBuilder();
      sb.append(pid).append(".").append(sampleDate).append(".").append(laboCode);
      String test = sb.toString();
      if (test.equals(moduleKey)) {
        sb = new StringBuilder();
        sb.append(fid);
        sb.append(":");
        sb.append(moduleKey);
        moduleKey = sb.toString();
        module.setModuleKey(moduleKey);
        System.err.println("corrected moduke key=" + module.getModuleKey());
      }
    }

    NLaboModule exist = null;

    try {
      if (moduleKey != null) {
        exist =
            (NLaboModule)
                em.createQuery(QUERY_MODULE_BY_MODULE_KEY)
                    .setParameter(MODULEKEY, moduleKey)
                    .getSingleResult();
        System.err.println("module did exist");

      } else {
        exist =
            (NLaboModule)
                em.createQuery(QUERY_MODULE_BY_PID_SAMPLEDATE_LABCODE)
                    .setParameter(FIDPID, fidPid)
                    .setParameter(SAMPLEDATE, sampleDate)
                    .setParameter(LABOCODE, laboCode)
                    .getSingleResult();
      }

    } catch (Exception e) {
      exist = null;
    }

    // Cascade.TYPE=ALL
    if (exist != null) {
      em.remove(exist);
      System.err.println("module did remove");
    }

    // 永続化する
    em.persist(module);

    return patient;
  }
  private void save() throws Exception {

    @SuppressWarnings("unchecked")
    List<InFacilityLaboItem> list = setTableModel.getDataProvider();
    // laboCode(facilityId)を設定する
    String fid = Project.getFacilityId();
    for (InFacilityLaboItem item : list) {
      item.setLaboCode(fid);
    }
    // まずは施設内検査項目を登録する。
    MasudaDelegater del = MasudaDelegater.getInstance();
    del.updateInFacilityLaboItemList(list);

    // ついでNLaboModuleを登録する。
    String pid = chart.getPatient().getPatientId();
    String fidPid = fid + ":" + pid;
    String ptName = chart.getPatient().getFullName();
    String sampleDate = dateFld.getText().trim();
    // 検査箋(検査モジュール)のキー = patientId.sampleDate.labCode
    StringBuilder buf = new StringBuilder();
    buf.append(pid);
    buf.append(".");
    buf.append(sampleDate);
    buf.append(".");
    buf.append(fid);
    String testKey = buf.toString();

    // NLaboModuleを作成
    NLaboModule nLaboModule = new NLaboModule();

    // NLaboItemを作成
    List<NLaboItem> nLaboItemList = new ArrayList<>();
    for (InFacilityLaboItem item : list) {
      String itemValue = item.getItemValue();
      if (itemValue == null || itemValue.trim().isEmpty()) {
        continue;
      }
      NLaboItem nLaboItem = createNLaboItem(item);
      nLaboItem.setPatientId(fidPid);
      nLaboItem.setLaboCode(fid);
      nLaboItem.setSampleDate(sampleDate);
      nLaboItem.setLaboModule(nLaboModule);
      nLaboItemList.add(nLaboItem);
    }
    // 空ならリターン
    if (nLaboItemList.isEmpty()) {
      return;
    }

    // NLaboModuleに情報設定
    nLaboModule.setPatientId(pid); // ここはただのPatientID
    nLaboModule.setPatientName(ptName);
    nLaboModule.setPatientSex(male ? "M" : "F");
    nLaboModule.setSampleDate(sampleDate);
    nLaboModule.setLaboCenterCode(fid);
    nLaboModule.setModuleKey(testKey);
    nLaboModule.setReportFormat("NLab");
    // nLaboModule.setNumOfItems(String.valueOf(nLaboItemList.size()));
    nLaboModule.setItems(nLaboItemList);

    // NLaboModuleをデータベースに登録する
    LaboDelegater ldel = LaboDelegater.getInstance();
    ldel.postNLaboModule(nLaboModule);
  }