/**
  * 文字コード変換結果を返します。
  *
  * @param data 変換元
  * @param encode 変換を実行するか
  * @return 変換結果
  */
 private Object getORCADecodeString(Object data, boolean encode) {
   if (data == null) {
     return data;
   }
   String result = String.valueOf(data);
   if (encode) {
     try {
       result = new String(result.getBytes("Shift_JIS"), "MS932");
     } catch (Exception e) {
       VRLogger.warning("文字コードの変換に失敗しました。");
     }
   }
   return result;
 }
예제 #2
0
  /**
   * 初期化処理を行ないます。
   *
   * @param affair 業務情報
   * @throws Exception 処理例外
   */
  protected void initAction(ACAffairInfo affair) throws Exception {
    // エラーなし
    final int NO_ERROR = 0;
    // DB接続エラー
    final int DB_ERROR = 1;
    // 自事業所なし
    final int NO_PROVIDER = 2;
    // 保険者なし
    final int NO_INSURER = 4;
    // 利用者なし
    final int NO_PATIENT = 8;
    // PDFビューワなし
    final int NOT_FOUND_PDF_VIEWER = 16;
    // システムバージョン不正
    final int SYSTEM_VERSION_ERROR = 32;
    // DBMSバージョン不正
    final int DBMS_VERSION_ERROR = 64;
    // DBバージョン不正
    final int DB_MASTER_VERSION_ERROR = 128;
    int errorFlag = NO_ERROR;

    // メインメニューキャッシュをクリア
    QkanSystemInformation.getInstance().setMenuTree(null);

    // システム日付をセット
    Date systemDate = QkanSystemInformation.getInstance().getSystemDate();
    VRMap map = new VRHashMap();
    map.setData("SYSTEM_DATE", systemDate);
    getCombos().setSource(map);
    getCombos().bindSource();

    boolean properityReloaded = false;
    ACPropertyXML xml = ACFrame.getInstance().getPropertyXML();
    if (xml != null) {
      // 設定ファイルを再読み込みする。
      try {
        xml.read();
        properityReloaded = true;
      } catch (Exception ex) {
        VRLogger.info(ex);
      }
    }
    String systemVersion = "取得失敗";
    // 設定ファイル(QkanPropertyXML.xml)のプロパティ「Version/no」を取得する。
    if (properityReloaded && ACFrame.getInstance().hasProperty("Version/no")) {
      // 取得できた場合
      // システムの「システムバージョン」に、取得した値を設定する。
      systemVersion = getProperty("Version/no");
      setState_VALID_VERSION();
    } else {
      // 取得できなかった場合
      errorFlag |= SYSTEM_VERSION_ERROR;
      setState_INVALID_VERSION();
    }
    // システムの「システムバージョン」に、「取得失敗」を設定する。
    QkanSystemInformation.getInstance().setSystemVersion(systemVersion);

    String dbmsVersion = "unknown";
    String schemeVersion = "取得失敗";
    String masterDataVersion = "取得失敗";
    if (errorFlag == NO_ERROR) {
      // DBの接続チェックを行う。
      if (getDBManager().canConnect()) {
        // 成功した場合
        // 次処理へ。

        ACDBManager dbm = getDBManager();
        if (dbm instanceof ACLoggerDBManager) {
          dbm = ((ACLoggerDBManager) dbm).getAdaptee();
        }
        if (dbm instanceof BridgeFirebirdDBManager) {
          try {
            dbmsVersion = ((BridgeFirebirdDBManager) dbm).getDBMSVersion();
          } catch (Exception ex) {
          }
        }
        if (("unknown".equals(dbmsVersion)) || (dbmsVersion.indexOf("Firebird 1.0") >= 0)) {
          errorFlag |= DBMS_VERSION_ERROR;
          setState_INVALID_DBMS();
        } else {
          setState_VALID_DB();
        }
      } else {
        // 失敗した場合
        errorFlag |= DB_ERROR;
        setState_INVALID_DB_CONNECTION();
      }

      if (errorFlag == NO_ERROR) {
        // モジュールの対象バージョンに合わせてデータベースを整形する。
        try {
          new ACVersionAdjuster()
              .adjustment(
                  getDBManager(),
                  "version/update.xml",
                  new QkanVersionAdjustmentListener(getDBManager()));
          systemVersion = QkanSystemInformation.getInstance().getSystemVersion();
        } catch (Exception ex) {
          VRLogger.info(ex);
        }

        // 給付管理台帳システムバージョン情報取得用のSQL文を取得する。
        // getSQL_GET_QKAN_VERSION(null);
        // 取得したSQL文を発行する。
        VRList versionList = getDBManager().executeQuery(getSQL_GET_QKAN_VERSION(null));

        // 取得件数が0件より多い場合
        if (versionList.size() > 0) {
          // システムの「マスタデータバージョン」に、取得したマスタデータバージョンを設定する。
          // setMasterDataVersion((マスターデータバージョン));
          masterDataVersion =
              ACCastUtilities.toString(
                  VRBindPathParser.get("MASTER_DATA_VERSION", (VRMap) versionList.getData()));

          // システムにマスタデータバージョンを退避する。
          // setSchemeVersion((スキーマバージョン));
          schemeVersion =
              ACCastUtilities.toString(
                  VRBindPathParser.get("SCHEME_VERSION", (VRMap) versionList.getData()));

        } else {
          // 取得件数が0件の場合
          errorFlag |= DB_MASTER_VERSION_ERROR;
          setState_INVALID_MASTER_VERSION();
        }
      }
    }

    // 画面の「システムバージョン(systemVersion)」に、「取得失敗」を設定する。
    getSystemVersion().setText(systemVersion);
    // システムの「マスタデータバージョン」に、取得したマスタデータバージョンを設定する。
    // setMasterDataVersion((マスターデータバージョン));
    QkanSystemInformation.getInstance().setMasterDataVersion(masterDataVersion);
    // システムにマスタデータバージョンを退避する。
    // setSchemeVersion((スキーマバージョン));
    QkanSystemInformation.getInstance().setSchemeVersion(schemeVersion);

    if (errorFlag == NO_ERROR) {
      // コードマスタ取得用のSQL文を取得する。
      // getSQL_GET_MASTER_CODE(null);
      // 取得したSQL文を発行する。
      VRList masterCodeList = getDBManager().executeQuery(getSQL_GET_MASTER_CODE(null));
      // 取得件数が0件より多い場合
      if (masterCodeList.size() > 0) {
        // システムの「コードマスタ」に設定するための形式に変換する。
        // ・CODE_ID毎にArrayListに格納する。
        // ・KEY : CODE_ID, VALUE : CODE_ID毎のレコード集合
        // として、レコードに格納する。
        // システムの「コードマスタ」に、変換したレコードを格納する。
        // setCodeMaster((変換したレコード));
        VRMap fullCodeM = new VRHashMap();
        Integer lastKey = null;
        VRList codeM = null;
        Iterator it = masterCodeList.iterator();
        while (it.hasNext()) {
          VRMap row = (VRMap) it.next();
          Integer key = Integer.valueOf(String.valueOf(VRBindPathParser.get("CODE_ID", row)));
          if (key != null) {
            if (!key.equals(lastKey)) {
              codeM = new VRArrayList();
              fullCodeM.setData(key, codeM);
              lastKey = key;
            }
            codeM.addData(row);
          }
        }
        // コードマスタをシステム共通に設定
        QkanSystemInformation.getInstance().setMasterCode(fullCodeM);

      } else {
        // 取得件数が0件の場合
        // システムの「コードマスタ」に、空のレコードを格納する。
        // setCodeMaster((空のレコード));
        QkanSystemInformation.getInstance().setMasterCode(null);
      }

      // 業務情報レコードを取得する。
      // ウィンドウタイトルに、取得レコードのKEY : WINDOW_TITLEのVALUEを設定する。
      // 業務ボタンバーのテキストに、取得レコードのKEY : AFFAIR_TITLEのVALUEを設定する。
      setAffairTitle("QM001");

      // 「事業所一覧(providerList)」に設定する自事業所一覧取得用のSQL文を取得する。
      // getSQL_GET_MY_PROVIDER(null);
      // 取得したSQL文を発行する。
      VRList providerList = getDBManager().executeQuery(getSQL_GET_MY_PROVIDER(null));

      // レコード数が0件より多い場合
      if (providerList.size() > 0) {
        // コンボアイテム設定用のレコード comboItemMap を生成する。
        VRMap comboItemMap = new VRHashMap();
        // 取得したレコード集合を、comboItemMap の KEY : PROVIDER_LISTS の
        // VALUE
        // として設定する。
        comboItemMap.setData("PROVIDER_LISTS", providerList);

        // 「コンボ領域(combos)」のmodelとして、comboItemMapを設定する。
        getContents().setModelSource(comboItemMap);

        // 「コンボ領域(combos)」にmodelを展開する。
        getContents().bindModelSource();

        // 取得したリストの一番上を選択状態にする。
        getProviderList().setSelectedIndex(0);

        setState_VALID_PROVIDER();
      } else {
        // レコード数が0件の場合

        setState_INVALID_PROVIDER();
        errorFlag |= NO_PROVIDER;
      }

      if (errorFlag == NO_ERROR) {
        if (QkanCommon.getInsurerInfo(getDBManager()).isEmpty()) {
          // 保険者がない場合
          setState_INVALID_INSURER();
          errorFlag |= NO_INSURER;
        } else {
          // 保険者が有る場合
          setState_VALID_INSURER();
        }
        if (QkanCommon.getPatientInfo(getDBManager()).isEmpty()) {
          // 利用者がない場合
          setState_INVALID_PATIENT();
          errorFlag |= NO_PATIENT;
        } else {
          // 利用者が有る場合
          setState_VALID_PATIENT();
        }

        if (String.valueOf(System.getProperty("os.name")).toLowerCase().indexOf("mac") < 0) {
          // Mac以外
          if (hasProperty("Acrobat/Path") && new File(getProperty("Acrobat/Path")).exists()) {
            setState_VALID_PDF_VIEWER();
          } else {
            setState_INVALID_PDF_VIEWER();
            errorFlag |= NOT_FOUND_PDF_VIEWER;
          }
        } else {
          // Macの場合
          setState_VALID_PDF_VIEWER();
        }

        // 印刷用PDFファイル格納用フォルダが存在するかチェックする。
        File pdfFile = new File("pdf");

        // 存在する場合
        if (pdfFile.exists()) {
          // 印刷用PDFファイル格納用フォルダ内の全てのPDFファイルを削除する。
          String[] fileList = pdfFile.list();
          for (int i = 0; i < fileList.length; i++) {
            File deleteFile = new File(pdfFile, fileList[i]);
            deleteFile.delete();
          }
        }
      }

      // 番号管理テーブルの再採番

      getDBManager().beginTransaction();
      try {
        getDBManager().executeUpdate(getSQL_UPDATE_NO_OF_SERVICE(null));
        getDBManager().executeUpdate(getSQL_UPDATE_NO_OF_PROVIDER_SERVICE(null));
        getDBManager().executeUpdate(getSQL_UPDATE_NO_OF_CLAIM(null));
        getDBManager().commitTransaction();
      } catch (Exception ex) {
        getDBManager().rollbackTransaction();
        VRLogger.info(ex);
      }
    }

    StringBuffer sb = new StringBuffer();
    sb.append("OS : ");
    sb.append(System.getProperty("os.name", "unknown"));
    String patch = System.getProperty("sun.os.patch.level", "");
    if (!patch.equalsIgnoreCase("unknown")) {
      sb.append(" ");
      sb.append(patch);
    }
    sb.append(ACConstants.LINE_SEPARATOR);
    sb.append("VM : ");
    sb.append(System.getProperty("java.vendor", "unknown"));
    sb.append(" ");
    sb.append(System.getProperty("java.version", "-"));
    sb.append(ACConstants.LINE_SEPARATOR);
    sb.append("Firebird : ");
    sb.append(dbmsVersion);
    sb.append(ACConstants.LINE_SEPARATOR);
    sb.append("システムversion : ");
    sb.append(systemVersion);
    sb.append(ACConstants.LINE_SEPARATOR);
    sb.append("データversion : ");
    sb.append(masterDataVersion);
    sb.append(ACConstants.LINE_SEPARATOR);
    sb.append("スキーマversion : ");
    sb.append(schemeVersion);

    getEnvironment().setText(sb.toString());

    // 画面最大化
    ACFrame.getInstance().setExtendedState(Frame.MAXIMIZED_BOTH);

    try {
      // 設定ファイル変更対応
      if (!ACFrame.getInstance().hasProperty("Claim/Cleaned")) {
        if (ACFrame.getInstance().hasProperty("Claim/Folder")) {
          Object m = ACFrame.getInstance().getPropertyXML().getData("Claim");
          if (m instanceof Map) {
            ((Map) m).remove("Folder");
          }
        }
        if (ACFrame.getInstance().hasProperty("Claim/Info")) {
          Object m = ACFrame.getInstance().getPropertyXML().getData("Claim");
          if (m instanceof Map) {
            ((Map) m).remove("Info");
          }
        }
        ACFrame.getInstance().getPropertyXML().setForceValueAt("Claim/Cleaned", "true");
        ACFrame.getInstance().getPropertyXML().write();
      }
    } catch (Exception ex) {

    }

    if ((affair.getParameters() != null)
        && (affair.getParameters().get("STOP_AUTO_LOGIN") != null)) {
      // メインメニューの明示的なログアウトでは自動ログインを禁止
      affair.getParameters().remove("STOP_AUTO_LOGIN");
    } else {
      if ((errorFlag == NO_ERROR)
          && getProviderList().isSelected()
          && getProviderList().getItemCount() == 1) {
        // 自動ログイン
        startActionPerformed(null);
      }
    }
  }