/** 申請ファイルアップロード準備 */
  private String prepareUploadDate(Shinsei shinsei, File toDir) {
    File receivedFile = null;
    byte[] receivedData = shinsei.getShinseiData();
    String outDirPath = toDir.getAbsolutePath();
    InputStream in = null;
    OutputStream out = null;

    try {
      receivedFile = File.createTempFile("dataset", ".zip");

      in = new ByteArrayInputStream(receivedData);
      out = new FileOutputStream(receivedFile);
      IOUtils.copy(in, out);

      if (receivedFile.length() > MAX_ZIP_FILE_SIZE) {
        log.debug("ZIPファイルサイズの制限超過しています。[" + receivedFile.length() + "]");
        return "TOO_LARGE_FILE";
      }

      new ZipFile(receivedFile.getAbsolutePath(), "UTF-8").extract(outDirPath);
      log.debug("申請データの展開先:" + outDirPath);
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      IOUtils.closeQuietly(in);
      IOUtils.closeQuietly(out);
      if (!receivedFile.delete()) {
        log.info("申請ファイルが削除できませんでした。:" + receivedFile.getAbsolutePath());
      }
    }
    return "SUCCESS";
  }
  /** 勤務表XMLファイル保存 */
  @Override
  public Shinsei saveShinsei(Shinsei shinsei) {
    Shinsei reload;
    // sessionIdを使用し、tmp directory作成
    File tmpDir = SystemUtiltity.getTemporaryDirectory();
    log.debug("path : " + tmpDir.getAbsolutePath());

    prepareUploadDate(shinsei, tmpDir);

    File kinmuhyoFile = null;
    String[] files = tmpDir.list();
    for (int i = 0; i < files.length; i++) {
      if (files[i].endsWith(".xml")) {
        kinmuhyoFile = new File(tmpDir.getAbsoluteFile() + File.separator + files[i]);
      }
    }

    XmlDocument kinmuhyoXml = new XmlDocument(kinmuhyoFile);

    // 申請番号生成
    String shinseiKubun = kinmuhyoXml.getAttributeValue(XPATH_SHINSEI_KUBUN);

    // 申請区分が「勤務表」の場合
    if (shinseiKubun.equals(ShinseiKubun.KINMUHYO.getValue())) {
      String nengetsu = kinmuhyoXml.getAttributeValue(XPATH_NENGETSU).replace("-", "");
      String shainBango = kinmuhyoXml.getAttributeValue(XPATH_SHAIN_ID);
      String shinseiBango = nengetsu + shainBango + ShinseiKubun.KINMUHYO;

      shinsei.setShinseiBango(shinseiBango);
      shinsei.setShinseiKubun(ShinseiKubun.KINMUHYO);
      shinsei.setShinseiJokyo(ShinseiJokyo.UKETSUKE_KANRYO);
      shinsei.setShinseiFile(kinmuhyoXml.toString());
      // DB保存
      reload = shinseiDao.addShinsei(shinsei);

    } else {
      log.error("申請書が勤務表ではありません。");
      return null;
    }

    // tmp directory削除
    SystemUtiltity.deleteFile(tmpDir);

    return reload;
  }