/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatZMRoleAuthIktUpd
*	ソースファイル名	：JBSbatZMRoleAuthIktUpd.java
*	作成者				：富士通　
*	作成日				：2012年06月07日
*＜機能概要＞
*　ロール＿権限一括更新処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/06/07  FJ) 伊藤	新規作成
*	v3.00.00	2012/06/07  FJ) 伊藤	【SGY-2012-000006】新規作成のため
*   v4.00.00	2012/11/14	FJ) 伊藤	【TAI-2012-0000140】品質強化対策
*   v5.00.00	2013/08/14	FJ) 日野	【OT-2013-0000713】ディレイド文字コード変更
*   v11.00.00	2014/11/17	FJ) 斉藤	【OM-2014-0003673】複写登録時の論理削除データ対応
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JPCBatCommon;
import eo.business.common.JZMBatConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.log.JBSbatLogPrintControl;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
* ロール＿権限一括更新処理クラスです。<p>
*<BR>
* @author 富士通
*/
public class JBSbatZMRoleAuthIktUpd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ロール)*/
	private static final String D_TBL_NAME_ZM_M_ROLE = "ZM_M_ROLE";

	/** テーブル(権限)*/
	private static final String D_TBL_NAME_ZM_M_AUTHORITY = "ZM_M_AUTHORITY";

	/** テーブル(ロール＿権限)*/
	private static final String D_TBL_NAME_ZM_M_ROLE_AUTHORITY = "ZM_M_ROLE_AUTHORITY";

	/** SQL定義キー(ZM_SELECT_001)*/
	private static final String ZM_M_ROLE_ZM_SELECT_001 = "ZM_SELECT_001";

	/** SQL定義キー(ZM_SELECT_002)*/
	private static final String ZM_M_ROLE_ZM_SELECT_002 = "ZM_SELECT_002";

	/** SQL定義キー(ZM_SELECT_001)*/
	private static final String ZM_M_AUTHORITY_ZM_SELECT_001 = "ZM_SELECT_001";

	/** SQL定義キー(ZM_SELECT_001)*/
	private static final String ZM_M_ROLE_AUTHORITY_ZM_SELECT_001 = "ZM_SELECT_001";

	/** SQL定義キー(ZM_DELETE_001)*/
	private static final String ZM_M_ROLE_AUTHORITY_ZM_DELETE_001 = "ZM_DELETE_001";

	/** SQL定義キー(ZM_INSERT_001)*/
	private static final String ZM_M_ROLE_AUTHORITY_ZM_INSERT_001 = "ZM_INSERT_001";

	/** SQL定義キー(ZM_UPDATE_001)*/
	private static final String ZM_M_ROLE_AUTHORITY_ZM_UPDATE_001 = "ZM_UPDATE_001";

	/** SQL定義キー(ZM_DELETE_001)*/
	private static final String ZM_M_ROLE_ZM_DELETE_001 = "ZM_DELETE_001";

	/** SQL定義キー(ZM_INSERT_001)*/
	private static final String ZM_M_ROLE_ZM_INSERT_001 = "ZM_INSERT_001";

	/** SQL定義キー(ZM_UPDATE_001)*/
	private static final String ZM_M_ROLE_ZM_UPDATE_001 = "ZM_UPDATE_001";

	/** SQL定義キー(ZM_UPDATE_002)*/
	private static final String ZM_M_ROLE_ZM_UPDATE_002 = "ZM_UPDATE_002";

	/** SQL定義キー(ZM_UPDATE_002)*/
	private static final String ZM_M_ROLE_AUTHORITY_ZM_UPDATE_002 = "ZM_UPDATE_002";

	/** テーブルアクセスクラス(ロール)*/
	private JBSbatSQLAccess db_ZM_M_ROLE = null;

	/** テーブルアクセスクラス(権限)*/
	private JBSbatSQLAccess db_ZM_M_AUTHORITY = null;

	/** テーブルアクセスクラス(ロール＿権限)*/
	private JBSbatSQLAccess db_ZM_M_ROLE_AUTHORITY = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
	/** 依頼ジョブID */
	private static final String IRAI_JOB_ID = "EOG1G0110J0";
	/** 初期エンコード */
	private static final String DEFAULT_ENCODE = "MS932";
	/** 処理区分 */
	private static final String SHORI_KBN = "SHORI_KBN";
	/** ロールコード */
	private static final String ROLE_CD = "ROLE_CD";
	/** ロール名 */
	private static final String ROLE_NM = "ROLE_NM";
	/** ロール適用開始日 */
	private static final String ROLE_TSTA_YMD = "ROLE_TSTA_YMD";
	/** ロール適用終了日 */
	private static final String ROLE_TEND_YMD = "ROLE_TEND_YMD";
	/** ロール更新年月日 */
	private static final String TMP_UPD_DT = "ROLE_TMP_UPD_DT";
	/** 権限コード */
	private static final String TMP_AUTHORITY_CD = "TMP_AUTHORITY_CD";
	/** 権限更新年月日時分秒 */
	private static final String TMP_AUTHORITY_DT = "TMP_AUTHORITY_DT";
	/** 業務エラーCD */
	private static final String COMP_CD = "1";
	/** 業務エラーCD */
	private static final String WORK_ERR_CD = "2";
	/** ディレイド処理結果コード（システムエラー） */
	private static final String SYSTEM_ERR_CD = "3";
	/** 初期適用開始年月日 */
	private static final String DEFAULT_TSTA_YMD = "18680125";
	/** 初期適用終了年月日 */
	private static final String DEFAULT_TEND_YMD = "20991231";
	/** 処理依頼ファイル文字列 */
	private String fileStr = null;
	/** 処理依頼内容 */
	private HashMap<String, Object> dlydShoriIraiData = null;
	/** 処理依頼ファイル詳細リスト */
	private ArrayList<HashMap<String, String>> dShoriIraiDetailList = null;
	/** 処理依頼ファイル詳細 */
	private HashMap<String, String> dShoriIraiFileDetail = null;
	/** エラーファイル名(先頭部) */
	private static final String ERROR_FILENAME = "EOG1G0110J0_";
	/** エラーファイル名(先頭部) */
	private static final String FILE_SEPARATOR = System.getProperty("file.separator");
	/** 一時ファイル保存先パス */
	private String tempFilePath = null;
	/** エラーメッセージリスト */
	private ArrayList<String> errList = null;
	/** 対象ロール情報 */
	private HashMap<String, String> roleInfoMap = null;
	/* ++++++++++ v1.0.0 追加終了 ++++++++++ */

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_ROLE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_ROLE);
		db_ZM_M_AUTHORITY = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_AUTHORITY);
		db_ZM_M_ROLE_AUTHORITY = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_ROLE_AUTHORITY);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
		// プロパティーファイルチェックと情報取得
		checkApplicationProperty();

		/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
		ArrayList<HashMap<String, Object>> dlydShoriIraiList = 
			JCCBatCommon.getShoriIraiInfo(commonItem, IRAI_JOB_ID);

		// ディレイド存在チェック
		if (dlydShoriIraiList == null || dlydShoriIraiList.size() == 0)
		{
			// 処理依頼が0件の場合、処理依頼が存在しないため処理を終了する。
			commonItem.getLogPrint().printDebugLog("ディレイド処理依頼は存在しません。");
			return null;
		}

		try
		{
			dlydShoriIraiData = dlydShoriIraiList.get(dlydShoriIraiList.size() - 1);

			String shoriKbn = null;
			fileStr = new String((byte[])dlydShoriIraiData.get("INPUT_EFILE"), DEFAULT_ENCODE);
			dShoriIraiDetailList = getDlydShoriIraiData();
			errList = new ArrayList<String>();

			commonItem.getLogPrint().printDebugLog("処理依頼番号：" + dlydShoriIraiData.get("DLYD_TRN_REQ_NO") + " ロール_権限一括更新処理開始");
			commonItem.getLogPrint().printDebugLog("電子ファイル管理番号：" + dlydShoriIraiData.get("INPUT_EFILE_KANRI_NO"));

			boolean execResultFlg = true;
			shoriKbn = dShoriIraiDetailList.get(0).get(SHORI_KBN);
			if ("0".equals(shoriKbn))
			{
				execResultFlg = execNewInsertData();
			}
			else if ("1".equals(shoriKbn) || "2".equals(shoriKbn))
			{
				execResultFlg = execAddOrDelData();
			}
			else if ("3".equals(shoriKbn))
			{
				execResultFlg = execCopyInsertData();
			}
			else if ("4".equals(shoriKbn))
			{
				execResultFlg = execBulkDeleteData();
			}

			//業務エラー発生時
			if (!execResultFlg)
			{
				commonItem.getConnection().rollback();
				commonItem.getLogPrint().printDebugLog("処理依頼番号：" + dlydShoriIraiData.get("DLYD_TRN_REQ_NO") + "  ロールバック実行");

				if (tempFilePath != null)
				{
					String errFilePath = entryErrFile(tempFilePath);
					HashMap<String, String> shoriKekkaMap = JCCBatCommon.updateShoriIraiResult(commonItem,
							dlydShoriIraiData.get("DLYD_TRN_REQ_NO").toString(), WORK_ERR_CD, errFilePath);

					deleteTempFile(errFilePath);
					commonItem.getLogPrint().printDebugLog("ディレイド処理依頼結果： 業務エラー");
					commonItem.getLogPrint().printDebugLog("エラー電子ファイル管理番号： " + shoriKekkaMap.get("EFILE_KAMRI_NO"));
				}
				else
				{
					JCCBatCommon.updateShoriIraiResult(commonItem,
							dlydShoriIraiData.get("DLYD_TRN_REQ_NO").toString(), WORK_ERR_CD, null);

					commonItem.getLogPrint().printDebugLog("ディレイド処理依頼結果： 業務エラー");
				}
				return null;
			}

			commonItem.getLogPrint().printDebugLog("処理依頼番号：" + dlydShoriIraiData.get("DLYD_TRN_REQ_NO") + "  コミット実行");

			JCCBatCommon.updateShoriIraiResult(commonItem,
					dlydShoriIraiData.get("DLYD_TRN_REQ_NO").toString(), COMP_CD, null);

			commonItem.getLogPrint().printDebugLog("ディレイド処理依頼結果： 正常");
		}
		catch(Exception ex)
		{
			// 想定外の例外発生時

			// ロールバック
			commonItem.getConnection().rollback();

			// 処理結果登録
			JCCBatCommon.updateShoriIraiResult(commonItem,
					dlydShoriIraiData.get("DLYD_TRN_REQ_NO").toString(), SYSTEM_ERR_CD, null);

			// 処理結果登録のコミット
			super.commit();

			commonItem.getLogPrint().printDebugLog("ディレイド処理依頼結果： システムエラー");
			throw ex;
		}

		/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_ROLE.close();
		db_ZM_M_AUTHORITY.close();
		db_ZM_M_ROLE_AUTHORITY.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(ZM_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_ZM_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE.selectBySqlDefine(paramList, ZM_M_ROLE_ZM_SELECT_001);
	}

	/**
	 * SQLKEY(ZM_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 *		 	更新年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_ZM_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE.selectBySqlDefine(paramList, ZM_M_ROLE_ZM_SELECT_002);
	}

	/**
	 * SQLKEY(ZM_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	権限コード
	 *		 	更新年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_AUTHORITY_ZM_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_ZM_M_AUTHORITY.selectBySqlDefine(paramList, ZM_M_AUTHORITY_ZM_SELECT_001);
	}

	/**
	 * SQLKEY(ZM_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_AUTHORITY_ZM_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE_AUTHORITY.selectBySqlDefine(paramList, ZM_M_ROLE_AUTHORITY_ZM_SELECT_001);
	}

	/**
	 * SQLKEY(ZM_DELETE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 *		 	権限コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_AUTHORITY_ZM_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		// DBアクセスを実行します
		
		db_ZM_M_ROLE_AUTHORITY.executeBySqlDefine(paramList, ZM_M_ROLE_AUTHORITY_ZM_DELETE_001);
	}

	/**
	 * SQLKEY(ZM_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 *		 	権限コード
	 *		 	ロール_権限適用開始年月日
	 *		 	ロール_権限適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_AUTHORITY_ZM_INSERT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE_AUTHORITY.executeBySqlDefine(paramList, ZM_M_ROLE_AUTHORITY_ZM_INSERT_001);
	}

	/**
	 * SQLKEY(ZM_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 *		 	権限コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_AUTHORITY_ZM_UPDATE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE_AUTHORITY.executeBySqlDefine(paramList, ZM_M_ROLE_AUTHORITY_ZM_UPDATE_001);
	}

	/**
	 * SQLKEY(ZM_DELETE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_ZM_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE.executeBySqlDefine(paramList, ZM_M_ROLE_ZM_DELETE_001);
	}

	/**
	 * SQLKEY(ZM_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 *		 	ロール名
	 *		 	ロール適用開始年月日
	 *		 	ロール適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_ZM_INSERT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		
		/* ++++++++++ v4.0.0 修正開始 ++++++++++ */
		
		// ロール適用終了年月日が空文字("")の場合、20991231をセットする。
		if(JZMBatConst.BLANK.equals(param[3].toString()))
		{
			paramList.setValue(JZMBatConst.IN_ENDYMD);
		}
		else
		{
			paramList.setValue(param[3].toString());
		}
		
		/* ++++++++++ v1.0.0 修正終了 ++++++++++ */

		// DBアクセスを実行します
		db_ZM_M_ROLE.executeBySqlDefine(paramList, ZM_M_ROLE_ZM_INSERT_001);
	}

	/**
	 * SQLKEY(ZM_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロール名
	 *		 	ロール適用開始年月日
	 *		 	ロール適用終了年月日
	 *		 	ロールコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_ZM_UPDATE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		/* ++++++++++ v4.0.0 修正開始 ++++++++++ */
		
		// ロール適用終了年月日が空文字("")の場合、20991231をセットする。
		if(JZMBatConst.BLANK.equals(param[2].toString()))
		{
			paramList.setValue(JZMBatConst.IN_ENDYMD);
		}
		else
		{
			paramList.setValue(param[2].toString());
		}
		
		/* ++++++++++ v1.0.0 修正終了 ++++++++++ */
		
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE.executeBySqlDefine(paramList, ZM_M_ROLE_ZM_UPDATE_001);
	}

	/**
	 * SQLKEY(ZM_UPDATE_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_ZM_UPDATE_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE.executeBySqlDefine(paramList, ZM_M_ROLE_ZM_UPDATE_002);
	}

	/**
	 * SQLKEY(ZM_UPDATE_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ロールコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_ROLE_AUTHORITY_ZM_UPDATE_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_ROLE_AUTHORITY.executeBySqlDefine(paramList, ZM_M_ROLE_AUTHORITY_ZM_UPDATE_002);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/* ++++++++++ v1.0.0 追加開始 ++++++++++ */

	/**
	 * ディレイド処理依頼ファイルの詳細を取得します。<br>
	 *
	 * @return ファイル情報マップリスト
	 * @throws Exception 例外
	 */
	private ArrayList<HashMap<String, String>> getDlydShoriIraiData() throws Exception
	{
		//空文字対策を行った上で分割
		String[] lineData = fileStr.split(JZMBatConst.CRLF);
		String[] dataArray = null;
		ArrayList<HashMap<String, String>> dataMapList = new ArrayList<HashMap<String, String>>();

		HashMap<String, String> dlydShoriIraiDataWk = null;
		roleInfoMap = new HashMap<String, String>();

		for (int i = 0; i < lineData.length; i++)
		{	

			dataArray = (lineData[i] + " ").split(JZMBatConst.CONMA);

			//対象ロールコードを設定
			if(i == 0)
			{
				roleInfoMap.put(ROLE_CD, dataArray[1]);
				roleInfoMap.put(ROLE_NM, dataArray[2]);
				roleInfoMap.put(ROLE_TSTA_YMD, dataArray[3]);
				roleInfoMap.put(ROLE_TEND_YMD, dataArray[4]);
				roleInfoMap.put(TMP_UPD_DT, dataArray[5]);
			}

			dlydShoriIraiDataWk = new HashMap<String, String>();
			dlydShoriIraiDataWk.put(SHORI_KBN, dataArray[0]);
			dlydShoriIraiDataWk.put(ROLE_CD, dataArray[1]);
			dlydShoriIraiDataWk.put(ROLE_NM, dataArray[2]);
			dlydShoriIraiDataWk.put(ROLE_TSTA_YMD, dataArray[3]);
			dlydShoriIraiDataWk.put(ROLE_TEND_YMD, dataArray[4]);
			dlydShoriIraiDataWk.put(TMP_UPD_DT, dataArray[5]);
			dlydShoriIraiDataWk.put(TMP_AUTHORITY_CD, dataArray[6]);
			dlydShoriIraiDataWk.put(TMP_AUTHORITY_DT, JPCBatCommon.trim(dataArray[7]));

			dataMapList.add(dlydShoriIraiDataWk);
		}

		return dataMapList;
	}

	/**
	 * ロール及びロール_権限情報の新規登録。<br>
	 * 処理区分が「0」の場合の処理。<br>
	 * 
	 * @return 処理結果フラグ
	 * @throws Exception 例外
	 */
	private boolean execNewInsertData() throws Exception
	{

		executeZM_M_ROLE_ZM_SELECT_001(new String[]{roleInfoMap.get(ROLE_CD)});
		int cnt = ((BigDecimal)db_ZM_M_ROLE.selectNext().getValue("CNT")).intValue();

		//ロールの存在チェック
		if (cnt == 0)
		{
			//ロールの追加(論理削除されたデータ対策で削除登録形式)
			executeZM_M_ROLE_ZM_DELETE_001(new String[]{roleInfoMap.get(ROLE_CD)});
			executeZM_M_ROLE_ZM_INSERT_001(new String[]{roleInfoMap.get(ROLE_CD), roleInfoMap.get(ROLE_NM),
					roleInfoMap.get(ROLE_TSTA_YMD), roleInfoMap.get(ROLE_TEND_YMD)});
		}
		else
		{
			//ロール　存在チェックエラー
			setErrMsg(JPCBatchMessageConstant.EZMB0170KW, new String[]{"テーブル名：ロールマスタ　" +
					"KEY：" + roleInfoMap.get(ROLE_CD)});
			return false;
		}

		for (int i = 0; i < dShoriIraiDetailList.size(); i++)
		{
			dShoriIraiFileDetail = dShoriIraiDetailList.get(i);

			executeZM_M_AUTHORITY_ZM_SELECT_001(new String[]{dShoriIraiFileDetail.get(TMP_AUTHORITY_CD),
					dShoriIraiFileDetail.get(TMP_AUTHORITY_DT)});
			cnt = ((BigDecimal)db_ZM_M_AUTHORITY.selectNext().getValue("CNT")).intValue();
			//権限の排他チェック
			if (cnt == 1)
			{	
				//ロール_権限の追加(論理削除されたデータ対策で削除登録形式)
				executeZM_M_ROLE_AUTHORITY_ZM_DELETE_001(new String[]{roleInfoMap.get(ROLE_CD), dShoriIraiFileDetail.get(TMP_AUTHORITY_CD)});
				executeZM_M_ROLE_AUTHORITY_ZM_INSERT_001(new String[]{roleInfoMap.get(ROLE_CD), dShoriIraiFileDetail.get(TMP_AUTHORITY_CD),
						DEFAULT_TSTA_YMD, DEFAULT_TEND_YMD});
			}
			else
			{
				//権限　排他チェックエラー
				setErrMsg(JPCBatchMessageConstant.EZMB0190KW, new String[]{"権限マスタ",
						dShoriIraiFileDetail.get(TMP_AUTHORITY_CD)});
	
				return false;
			}
		}

		return true;
	}

	/**
	 * ロール_権限情報の追加。<br>
	 * 処理区分が「1」「2」の場合の処理。<br>
	 * 
	 * @return 処理結果フラグ
	 * @throws Exception 例外
	 */
	private boolean execAddOrDelData() throws Exception
	{
		executeZM_M_ROLE_ZM_SELECT_002(new String[]{roleInfoMap.get(ROLE_CD), roleInfoMap.get(TMP_UPD_DT)});
		int cnt = ((BigDecimal)db_ZM_M_ROLE.selectNext().getValue("CNT")).intValue();

		//ロールの排他チェック
		if (cnt == 1)
		{
			executeZM_M_ROLE_ZM_UPDATE_001(new String[]{roleInfoMap.get(ROLE_NM), roleInfoMap.get(ROLE_TSTA_YMD),
					roleInfoMap.get(ROLE_TEND_YMD), roleInfoMap.get(ROLE_CD)});
		}
		else
		{
			setErrMsg(JPCBatchMessageConstant.EZMB0190KW, new String[]{"ロールマスタ", roleInfoMap.get(ROLE_CD)});
			return false;
		}
		
		for (int i = 0; i < dShoriIraiDetailList.size(); i++)
		{
			dShoriIraiFileDetail = dShoriIraiDetailList.get(i);
			
			/* ++++++++++ v4.0.0 修正開始 ++++++++++ */
			String tmpAuthorityCd = (String)dShoriIraiFileDetail.get(TMP_AUTHORITY_CD);
			if(!JZMBatConst.BLANK.equals(tmpAuthorityCd)) 
			{
				executeZM_M_AUTHORITY_ZM_SELECT_001(new String[]{tmpAuthorityCd,
						dShoriIraiFileDetail.get(TMP_AUTHORITY_DT)});
				cnt = ((BigDecimal)db_ZM_M_AUTHORITY.selectNext().getValue("CNT")).intValue();
				//権限の排他チェック
				if (cnt == 1)
				{
					if ("1".equals(dShoriIraiFileDetail.get(SHORI_KBN)))
					{
						
						// 処理区分"1" 追加の場合
						executeZM_M_ROLE_AUTHORITY_ZM_DELETE_001(new String[]{roleInfoMap.get(ROLE_CD),
								dShoriIraiFileDetail.get(TMP_AUTHORITY_CD)});
						executeZM_M_ROLE_AUTHORITY_ZM_INSERT_001(new String[]{roleInfoMap.get(ROLE_CD),
								dShoriIraiFileDetail.get(TMP_AUTHORITY_CD), DEFAULT_TSTA_YMD, DEFAULT_TEND_YMD});
					}
					else
					{
						
						// 処理区分"2" 削除の場合
						executeZM_M_ROLE_AUTHORITY_ZM_UPDATE_001(new String[]{roleInfoMap.get(ROLE_CD),
								dShoriIraiFileDetail.get(TMP_AUTHORITY_CD)});
					}
				}
				else
				{
					setErrMsg(JPCBatchMessageConstant.EZMB0190KW, new String[]{"権限マスタ",
							dShoriIraiFileDetail.get(TMP_AUTHORITY_CD)});
					
					return false;
				}
			}
			
			/* ++++++++++ v1.0.0 修正終了 ++++++++++ */
			
		}

		return true;
	}

	/**
	 * ロール、ロール_権限情報の複写登録。<br>
	 * 処理区分が「3」の場合の処理。<br>
	 * 
	 * @return 処理結果フラグ
	 * @throws Exception 例外
	 */
	private boolean execCopyInsertData() throws Exception
	{
		executeZM_M_ROLE_ZM_SELECT_002(new String[]{roleInfoMap.get(ROLE_CD),
				roleInfoMap.get(TMP_UPD_DT)});
		int cnt = ((BigDecimal)db_ZM_M_ROLE.selectNext().getValue("CNT")).intValue();

		//複写元ロール排他チェック
		if (cnt == 1)
		{
			dShoriIraiFileDetail = dShoriIraiDetailList.get(1);

			executeZM_M_ROLE_ZM_SELECT_001(new String[]{dShoriIraiFileDetail.get(ROLE_CD)});
			cnt = ((BigDecimal)db_ZM_M_ROLE.selectNext().getValue("CNT")).intValue();
			//複写先ロール存在チェック
			if (cnt == 0)
			{
				executeZM_M_ROLE_ZM_DELETE_001(new String[]{dShoriIraiFileDetail.get(ROLE_CD)});
				executeZM_M_ROLE_ZM_INSERT_001(new String[]{dShoriIraiFileDetail.get(ROLE_CD),
						dShoriIraiFileDetail.get(ROLE_NM), dShoriIraiFileDetail.get(ROLE_TSTA_YMD),
						dShoriIraiFileDetail.get(ROLE_TEND_YMD)});

				executeZM_M_ROLE_AUTHORITY_ZM_SELECT_001(new String[]{roleInfoMap.get(ROLE_CD)});

				JBSbatCommonDBInterface resultMap = db_ZM_M_ROLE_AUTHORITY.selectNext();
				while(resultMap != null)
				{
					executeZM_M_ROLE_AUTHORITY_ZM_DELETE_001(new String[]{dShoriIraiFileDetail.get(ROLE_CD),
							resultMap.getString("AUTHORITY_CD")});

					executeZM_M_ROLE_AUTHORITY_ZM_INSERT_001(new String[]{dShoriIraiFileDetail.get(ROLE_CD),
							resultMap.getString("AUTHORITY_CD"), DEFAULT_TSTA_YMD, DEFAULT_TEND_YMD});
					resultMap = db_ZM_M_ROLE_AUTHORITY.selectNext();
				}
			}
			else
			{
				setErrMsg(JPCBatchMessageConstant.EZMB0170KW, new String[]{"テーブル名：ロールマスタ　" +
						"KEY：" + dShoriIraiFileDetail.get(ROLE_CD)});
				return false;
			}
		}
		else
		{
			setErrMsg(JPCBatchMessageConstant.EZMB0190KW, new String[]{"ロールマスタ",
					roleInfoMap.get(ROLE_CD)});
			return false;
		}

		return true;
	}

	/**
	 * ロール、ロール_権限情報の一括削除。<br>
	 * 処理区分が「4」の場合の処理。<br>
	 * 
	 * @return 処理結果フラグ
	 * @throws Exception 例外
	 */
	private boolean execBulkDeleteData() throws Exception
	{
		executeZM_M_ROLE_ZM_SELECT_001(new String[]{roleInfoMap.get(ROLE_CD)});
		int cnt = ((BigDecimal)db_ZM_M_ROLE.selectNext().getValue("CNT")).intValue();

		//ロール　存在チェック
		if (cnt == 1)
		{
			executeZM_M_ROLE_AUTHORITY_ZM_UPDATE_002(new String[]{roleInfoMap.get(ROLE_CD)});
			executeZM_M_ROLE_ZM_UPDATE_002(new String[]{roleInfoMap.get(ROLE_CD)});

		}
		else
		{
			setErrMsg(JPCBatchMessageConstant.EZMB0180KW, new String[]{"ロールマスタ",
					"ロールコード：" + roleInfoMap.get(ROLE_CD)});
			return false;
		}

		return true;
	}

	/**
	 * エラーファイル作成
	 * @param tempDirPath	一時保存ディレクトリパス
	 * @return エラーファイル名
	 * @throws Exception 例外
	 */
	private String entryErrFile(String tempDirPath) throws Exception
	{
		String errFileName = tempDirPath + FILE_SEPARATOR + ERROR_FILENAME + JCCBatCommon.getSysDateTimeStamp() + ".TXT";
		entryErrFileData(commonItem, errFileName);

		return errFileName;
	}

	/**
	 * エラーファイル電子ファイル管理登録
	 * @param commonItem 共通情報
	 * @param errFilePath エラーファイルパス情報
	 * @throws Exception 例外
	 */
	private void entryErrFileData(JBSbatCommonItem commonItem, String errFilePath) throws Exception
	{
		// エラーファイル作成
		JBSbatBusinessFileUtil errFileObj =
			JCCBatCommon.createBusinessFileUtil(errFilePath, DEFAULT_ENCODE, JZMBatConst.CRLF, "");
		commonItem.getLogPrint().printDebugLog("エラーファイル作成:" + errFilePath);
		
		for(int i = 0; i < errList.size(); i++)
		{
			// ファイルにエラー情報を書き込む
			JCCBatCommon.printBusinessFileUtil(errFileObj, errList.get(i));
		}
		// ファイルオブジェクトのクローズ
		JCCBatCommon.closeBusinessFileUtil(errFileObj);
		commonItem.getLogPrint().printDebugLog("エラーファイルオブジェクトクローズ処理実行");

		return;
	}

	/**
	 * エラーメッセージリスト格納処理(行数なし)
	 * @param msgId			メッセージID
	 * @param chikanMoji	置換文字列
	 * @return エラーメッセージ
	 * return 
	 */
	private String setErrMsg(String msgId, String[] chikanMoji)
	{
		// エラーメッセージ作成
		String errMsg = JBSbatLogPrintControl.getMessage(msgId, chikanMoji);

		commonItem.getLogPrint().printBusinessErrorLog(msgId, chikanMoji);
		commonItem.getLogPrint().printDebugLog(errMsg);
		errList.add(errMsg);

		return errMsg;
	}

	/**
	 * プロパティ情報設定とチェック<br>
	 * 初期処理でプロパティ情報を取得し設定します<br>
	 */
	private void checkApplicationProperty()
	{
		// 共通マスタ一時ファイル保存パス取得＆チェック
		tempFilePath = checkTempFilePath();
	}

	/**
	 * 共通マスタ一時ファイル保存先パス取得とチェック<br>
	 * @return 共通マスタ一時ファイル保存先パス
	 */
	private String checkTempFilePath()
	{
		boolean existError = false;

		// 一時ファイル保存先パスを取得
		String hozonPath = JCCBatCommon.getApplicationConst("ZM_TEMP_FILE_DIR_PATH");
		if (hozonPath == null || "".equals(hozonPath.trim()))
		{
			// EZMB0210CW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EZMB0210CW, new String[] {"共通マスタ一時ファイル保存先パス"});
			existError = true;
		}
		else
		{
			if (!new File(hozonPath).exists())
			{
				// 存在しない場合
				// EZMB0200KW:指定されたパスが存在しません。(%1%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EZMB0200KW, new String[] {hozonPath});
				existError = true;
			}
			commonItem.getLogPrint().printDebugLog("共通マスタ一時ファイル保存先パス取得:" + hozonPath);
		}
		if (existError == true)
		{
			hozonPath = null;
		}
		
		return hozonPath;
	}

	/**
	 * 一時ファイル削除処理<br>
	 * @param errFilePath 共通マスタ一時ファイルパス
	 */
	private void deleteTempFile(String errFilePath)
	{
		File errTempFile = new File(errFilePath);
		if (errTempFile.exists())
		{
			new File(errFilePath).delete();
			commonItem.getLogPrint().printDebugLog("共通マスタ一時ファイル削除:" + errTempFile.getPath());
		}
	}
	/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
}
