/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JBSbatZMDlyd
*   ソースファイル名：JBSbatZMDlyd.java
*   作成者          ：富士通
*   日付            ：2011年04月26日
*＜機能概要＞
*   ディレイド処理依頼部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v2.00.00	2011/04/26	FJ)荒田		新規作成
*
**********************************************************************/
package eo.business.common;

import java.util.HashMap;

import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatZM_T_DATAIKTTRK_KNRI;
import eo.common.util.JCCOracleSeqUtil;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.util.JBSbatDateUtil;

/**
 * ディレイド処理依頼部品です。<p>
 * ジョブで実装します。
 * <BR>
 * @author 富士通
 */public class JBSbatZMDlyd
{
	/**
	 * デフォルト値
	 */
	private static final String DEFAULT_VALUE = "DEF";
	/**
	 * ディレイド処理実施運用年月日
	 */
	private String strDlydDtm = DEFAULT_VALUE;
	/**
	 * 依頼ジョブID
	 */
	private String strJobId = DEFAULT_VALUE;
	/**
	 * 処理管理番号
	 */
	private String strTrnKanriNo = DEFAULT_VALUE;
	/**
	 * ディレイド処理依頼種別コード
	 */
	private String strDlydCode = DEFAULT_VALUE;
	/**
	 * ファイルコード
	 */
	private String strFileCode = DEFAULT_VALUE;
	/**
	 * ファイルパス
	 */
	private String strFilePath = DEFAULT_VALUE;
	/**
	 * ファイル削除年月日
	 */
	private String strFileDelDate = DEFAULT_VALUE;
	/**
	 * DBアクセス（ディレイド処理依頼用）
	 */
	private JBSbatSQLAccess dbAccessDlyd = null;
	/**
	 * DBアクセス（データ一括登録管理用）
	 */
	private JBSbatSQLAccess dbAccessIKTU = null;
	
	/**
	 * シーケンス名 ディレイド処理依頼
	 */
	private static final String SEQ_TABLE_DLYD = "SEQ_DLYD_TRN_REQ_NO";
	/**
	 * シーケンス名 データ一括登録管理
	 */
	private static final String SEQ_TABLE_IKTU = "SEQ_DATAIKTTRK_KNRI_NO";
	/**
	 * 結果返却用HashMap Key
	 */
	/**
	 * 電子ファイル管理番号
	 */
	private static final String KEY_EFILE_KANRI_NO = "key_efile_kanri_no";
	/**
	 * 世代登録年月日時分秒
	 */
	private static final String KEY_GENE_ADD_DTM = "key_gene_add_dtm";
	/**
	 * ディレイド処理依頼番号
	 */
	private static final String KEY_DLYD_TRN_REQ_NO = "key_dlyd_trn_req_no";
	/**
	 * データ一括登録管理管理番号
	 */
	private static final String KEY_DATAIKATTRK_KNRI_NO = "key_dataikattrk_knri_no";
	/**
	 * 処理方式フラグ １：ディレイド処理
	 */
	private static final String TRN_HOSHIKI_FLG_DLYD = "1";

	/**
	 * ディレイド処理依頼に関する情報をセットする。
     * <BR>
	 * @param dlyd_trn_jssi_unyo_dtm ディレイド処理実施運用年月日(yyyyMMddHHmmssSSS)
	 * @param req_job_idd 依頼ジョブID
	 * @param trn_kanri_no 処理管理番号
	 * @param dlydTrnReqSbtCd ディレイド処理依頼種別コード
	 * @throws Exception ディレイド処理実施運用年月日が日付として正しくない場合
	 */
	public void setDyldInfo(String dlyd_trn_jssi_unyo_dtm, String req_job_idd, String trn_kanri_no, String dlydTrnReqSbtCd) throws Exception
	{
		
		//ディレイド処理実施運用年月日セット
		if(dlyd_trn_jssi_unyo_dtm == null || "".equals(dlyd_trn_jssi_unyo_dtm))
		{
			throw new Exception("ディレイド処理実施運用年月日時分秒が指定されていません。");
		}
		if(dlyd_trn_jssi_unyo_dtm.length() < 17)
		{
			throw new Exception("ディレイド処理実施運用年月日時分秒の桁数が不正です。");
		}
		//日付チェック
		boolean blnRetDate = JBSbatDateUtil.checkDate(dlyd_trn_jssi_unyo_dtm.substring(0, 8), 8);
		//時刻チェック
		boolean blnRetTime = JBSbatDateUtil.checkTime(dlyd_trn_jssi_unyo_dtm.substring(8, 17), 9);
		if(blnRetDate == false || blnRetTime == false)
		{
			//日付チェックNG
			throw new Exception("ディレイド処理実施運用年月日時分秒が日時として不正です。");
		}
		strDlydDtm = dlyd_trn_jssi_unyo_dtm;
		//依頼ジョブID
		if(req_job_idd == null || "".equals(req_job_idd))
		{
			throw new Exception("依頼ジョブIDが不正です。");
		}
		strJobId = req_job_idd;
		//処理管理番号
		if(trn_kanri_no == null || "".equals(trn_kanri_no))
		{
			throw new Exception("処理管理番号が不正です。");
		}
		strTrnKanriNo = trn_kanri_no;
		//ディレイド処理依頼種別コード
		if(dlydTrnReqSbtCd == null || "".equals(dlydTrnReqSbtCd))
		{
			throw new Exception("ディレド処理依頼種別コードが不正です。");
		}
		strDlydCode = dlydTrnReqSbtCd;
	}

	/**
	 * 電子ファイル情報をセットする。
     * <BR>
	 * @param fileCode ファイルコード
	 * @param filePath ファイルパス
	 * @param delYMD ファイル削除年月日
	 * @throws Exception ファイル削除年月日が日付として正しくない場合
	 */
	public void setFileInfo(String fileCode, String filePath, String delYMD) throws Exception
	{

		//ファイル削除年月日セット
		if(delYMD == null || "".equals(delYMD))
		{
			throw new Exception("ファイル削除年月日が指定されていません。");
		}
		if(delYMD.length() < 8)
		{
			throw new Exception("ファイル削除年月日の桁数が不正です。");
		}
		//日付チェック
		boolean blnRet = JBSbatDateUtil.checkDate(delYMD, delYMD.length());
		if(!blnRet)
		{
			throw new Exception("ファイル削除年月日が不正です。");
		}
		strFileDelDate = delYMD;
		
		//ファイルコードセット
		if(fileCode == null || "".equals(fileCode))
		{
			throw new Exception("ファイルコードが指定されていません。");
		}
		strFileCode = fileCode;
		//ファイルパスセット
		if(filePath == null || "".equals(filePath))
		{
			throw new Exception("ファイルパスが指定されていません。");
		}
		strFilePath = filePath;
	}

	/**
	 * ディレイド処理依頼を実行する。
     * <BR>
     * @param comInfo 業務共通電文クラス
	 * @return HashMap 
	 * @throws Exception
	 */
	public HashMap<String, String> executeDyldReq(JBSbatCommonItem comInfo) throws Exception
	{
		//返却用HashMap
		HashMap<String, String> retMap = new HashMap<String, String>();
		//電子ファイル登録処理返却値
		String[] retStrArray = null;
		
		/*
		 * フィールドチェック
		 */
		//ディレド処理依頼情報チェック
		if(!isDyldInfoSetting())
		{
			throw new Exception("ディレド処理依頼情報の設定がありません。");
		}
		//電子ファイル情報設定チェック
		boolean blnFileSetting = isFileInfoSetting();
		
		/*
		 * DB接続準備
		 */
		//テーブル ディレイド処理依頼
		dbAccessDlyd = new JBSbatSQLAccess(comInfo, JBSbatCC_T_DLYD_TRN_REQ.TABLE_NAME);
		//テーブル データ一括登録管理
		dbAccessIKTU = new JBSbatSQLAccess(comInfo, JBSbatZM_T_DATAIKTTRK_KNRI.TABLE_NAME);
		
		/*
		 * 電子ファイル登録処理
		 */
		if(blnFileSetting)
		{
			retStrArray = JCCbatDenshiFileUtil.createDenshiFile(comInfo, strFileCode, strFilePath, strFileDelDate);
			//電子ファイル管理番号
			retMap.put(KEY_EFILE_KANRI_NO, retStrArray[0]);
			//世代登録年月日時分秒
			retMap.put(KEY_GENE_ADD_DTM, retStrArray[1]);
		}
		/*
		 * ディレイド処理依頼登録処理
		 */
		createDlydInfo(comInfo, retStrArray, retMap);
		
		/*
		 * データ一括登録管理登録処理
		 */
		createIktuInfo(comInfo, retStrArray, retMap);
		
		return retMap;
	}

	/**
	 * ディレイド処理依頼登録処理。
     * <BR>
     * @param comInfo 業務共通電文クラス
     * @param fileInfo 電子ファイル管理番号、世代登録年月日時分秒
     * @param map 返却用HashMap
	 * @throws Exception
	 */
	private void createDlydInfo(JBSbatCommonItem comInfo, String[] fileInfo, HashMap<String, String> map) throws Exception
	{
		//シーケンス番号取得
		String seqDlyd = JCCOracleSeqUtil.getNextSeq(comInfo.getConnection(), SEQ_TABLE_DLYD);
		/*
		 * パラメータ設定
		 */
		JBSbatCommonDBInterface inDbMapDlyd = new JBSbatCommonDBInterface();
		//ディレイド処理依頼番号
		inDbMapDlyd.setValue(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO, seqDlyd);
		//ディレイド処理実施運用年月日時分秒
		inDbMapDlyd.setValue(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_JSSI_UNYO_DTM, strDlydDtm);
		if(fileInfo != null)
		{
			//入力電子ファイル管理番号
			inDbMapDlyd.setValue(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO, fileInfo[0]);
			//入力電子ファイル世代登録年月日時分秒
			inDbMapDlyd.setValue(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_GENE_ADD_DTM, fileInfo[1]);
		}
		//依頼ジョブID
		inDbMapDlyd.setValue(JBSbatCC_T_DLYD_TRN_REQ.REQ_JOB_ID, strJobId);
		//システムコード
		inDbMapDlyd.setValue(JBSbatCC_T_DLYD_TRN_REQ.SYS_CD, comInfo.getSystemCode());
		//ディレイド処理依頼種別コード
		inDbMapDlyd.setValue(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_SBT_CD, strDlydCode);
		
		//データ登録
		int iCnt = dbAccessDlyd.insertByPrimaryKeys(inDbMapDlyd);
		//ディレイド処理依頼番号
		map.put(KEY_DLYD_TRN_REQ_NO, seqDlyd);
	}

	/**
	 * データ一括登録管理登録処理。
     * <BR>
     * @param comInfo 業務共通電文クラス
     * @param fileInfo 電子ファイル管理番号、世代登録年月日時分秒
     * @param map 返却用HashMap
	 * @throws Exception
	 */
	private void createIktuInfo(JBSbatCommonItem comInfo, String[] fileInfo, HashMap<String , String> map) throws Exception
	{
		//シーケンス番号取得
		String seqIKTU = JCCOracleSeqUtil.getNextSeq(comInfo.getConnection(), SEQ_TABLE_IKTU);
		/*
		 * パラメータ設定
		 */
		JBSbatCommonDBInterface inDbMapDlyd = new JBSbatCommonDBInterface();
		//データ一括登録管理番号
		inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.DATAIKTTRK_KNRI_NO, seqIKTU);
		//ディレイド処理依頼番号
		inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.DLYD_TRN_REQ_NO, map.get(KEY_DLYD_TRN_REQ_NO));
		if(fileInfo != null)
		{
			//入力電子ファイル管理番号
			inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.EFILE_KANRI_NO, fileInfo[0]);
			//ファイル削除年月日
			inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.FILE_DEL_YMD, strFileDelDate);
		}
		//処理依頼年月日時分秒
		inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.TRN_REQ_DTM, JCCBatCommon.getSysDateTime().substring(0, 12));
		//処理方式フラグ
		inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.TRN_HOSHIKI_FLG, TRN_HOSHIKI_FLG_DLYD);
		//処理管理番号
		inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.TRN_KANRI_NO, strTrnKanriNo);
		//処理依頼オペレータアカウント
		inDbMapDlyd.setValue(JBSbatZM_T_DATAIKTTRK_KNRI.TRN_IRAISHA_OPEACNT, comInfo.getBatchUserId());
		
		//データ登録
		int iCnt = dbAccessIKTU.insertByPrimaryKeys(inDbMapDlyd);
		//ディレイド処理依頼番号
		map.put(KEY_DATAIKATTRK_KNRI_NO, seqIKTU);

	}

	/**
	 * ディレイド処理依頼情報設定のチェック。
     * <BR>
	 * @return boolean
	 */
	private boolean isDyldInfoSetting()
	{
		//結果返却用
		
		//ディレイド処理実施運用年月日
		if(DEFAULT_VALUE.equals(strDlydDtm))
		{
			return false;
		}
		//依頼ジョブID
		if(DEFAULT_VALUE.equals(strJobId))
		{
			return false;
		}
		//ディレイド処理依頼種別コード
		if(DEFAULT_VALUE.equals(strDlydCode))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * 電子ファイル情報設定のチェック。
     * <BR>
	 * @return boolean
	 */
	private boolean isFileInfoSetting()
	{
		//ファイルコード
		if(DEFAULT_VALUE.equals(strFileCode))
		{
			return false;
		}
		//ファイルパス
		if(DEFAULT_VALUE.equals(strFilePath))
		{
			return false;
		}
		//ファイル削除年月日
		if(DEFAULT_VALUE.equals(strFileDelDate))
		{
			return false;
		}
		
		return true;
	}
}

