/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKBankTohaigoTran
*	ソースファイル名	：JBSbatKKBankTohaigoTran.java
*	作成者				：FJ)古田
*	作成日				：2011年09月30日
*＜機能概要＞
*　金融機関統廃合処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/30  FJ)古田		新規作成
*	v2.00.00	2012/04/11	FJ)倉上		【TAI-2012-0000027】排他制御対応。
*	v3.00.00	2012/05/01	FJ)岡田		【巻@登録テーブル項目同期】対応
*	v3.01.00	2012/08/21	FJ)岡田		【ANK-0607-00-99】処理ID設定漏れ対応
*	v4.00.00	2013/03/25	FJ)石原		【IT1-2013-0000498】システムエラー対処の横展開
*	v5.00.00	2013/05/30	FJ)団		【IT1-2013-0001249】障害対応
*	v5.00.01	2013/10/07	FJ)中作		【OM-2013-0003128】障害対応
*	v28.00.00	2017/01/11	FJ)和田		【OM-2016-0002100】金融機関マスタ　廃止猶予期間終了日の不一致
*	v28.00.01	2017/02/20	FJ)星野		【OM-2017-0000187】障害対応
*	v37.00.00	2018/05/30	FJ)河邊		【OM-2018-0000400】収納機関別入金集計表出力不備
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatKKIFE112;
import eo.business.util.file.JBSbatKKIFM096;
import eo.business.util.table.JBSbatKK_M_BANK;
import eo.common.util.JKKStringConverter;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKBankTohaigoTran extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(金融機関)*/
	private static final String D_TBL_NAME_KK_M_BANK = "KK_M_BANK";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_BANK_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_UPDATE_001)*/
	private static final String KK_M_BANK_KK_UPDATE_001 = "KK_UPDATE_001";

	/** テーブルアクセスクラス(金融機関)*/
	private JBSbatSQLAccess db_KK_M_BANK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** データ種別（変更無） */
	private static final String DATA_SBT_NO_UPD = "0";
	
	/** データ種別（追加） */
	private static final String DATA_SBT_ADD = "1";

	/** データ種別（変更） */
	private static final String DATA_SBT_UPD = "2";

	/** データ種別（廃止） */
	private static final String DATA_SBT_HAISHI = "3";

	/** 金融機関適用終了年月日 */
	private static final String BANK_TEND_YMD = "20991231";

	/** 登録パターン１
	 * （予約適用年月日:データ種別付加年月日8
	 *  金融機関適用開始年月日:データ種別付加年月日8
	 *  金融機関適用終了年月日:20991231
	 *  廃止猶予期間終了年月日:20991231) OM-2018-0000400
	 */
	private static final String INS_PATTERN1 = "1";

	/** 登録パターン２
	 * （予約適用年月日:データ種別付加年月日8
	 *  金融機関適用開始年月日:金融機関.金融機関適用開始年月日
	 *  金融機関適用終了年月日:20991231
	 *  廃止猶予期間終了年月日:20991231) OM-2018-0000400
	 */
	private static final String INS_PATTERN2 = "2";

	/** 登録パターン３
	 * （予約適用年月日:バッチ運用日
	 *  金融機関適用開始年月日:金融機関.金融機関適用開始年月日
	 *  金融機関適用終了年月日:データ種別付加年月日8
	 *  廃止猶予期間終了年月日:データ種別付加年月日8の12ヶ月後）
	 * 
	 */
	private static final String INS_PATTERN3 = "3";

	/** リスト出力パターン１
	 * （付加年月日:データ種別付加年月日8
	 *  金融機関適用開始年月日:空白
	 *  金融機関適用終了年月日:空白
	 *  廃止猶予期間終了年月日:空白） 
	 */
	private static final String LIST_PATTERN1 = "1";

	/** リスト出力パターン２
	 * （付加年月日:データ種別付加年月日8
	 *  金融機関適用開始年月日:データ種別付加年月日8
	 *  金融機関適用終了年月日:20991231
	 *  廃止猶予期間終了年月日:20991231) OM-2018-0000400
	 */
	private static final String LIST_PATTERN2 = "2";

	/** リスト出力パターン３
	 * （付加年月日:データ種別付加年月日8
	 *  金融機関適用開始年月日:金融機関.予約適用年月日
	 *  金融機関適用終了年月日:金融機関.金融機関適用終了年月日
	 *  廃止猶予期間終了年月日:20991231) OM-2018-0000400
	 */
	private static final String LIST_PATTERN3 = "3";

	/** リスト出力パターン４
	 * （付加年月日:データ種別付加年月日8
	 *  金融機関適用開始年月日:金融機関.予約適用年月日
	 *  金融機関適用終了年月日:データ種別付加年月日8
	 *  廃止猶予期間終了年月日:データ種別付加年月日8の12ヶ月後）
	 */
	private static final String LIST_PATTERN4 = "4";
	
	/** 金融機関コード */
	private String kinyukikanCd = "";

	/** 金融機関支店コード */
	private String shitenCd = "";

	/** データ種別 */
	private String dataSbt = "";

	/** データ種別 */
	private String dataSbtHukaYmd8 = "";

	/** 備考 */
	private String biko = "";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/** ▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼ */
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_M_BANK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_BANK);
		/** ▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲ */
		super.logPrint.printDebugLog("initial_START");

		super.logPrint.printDebugLog("initial_END");
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		super.logPrint.printDebugLog("execute_START");

		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// 金融機関マスタ検索データ
		JBSbatCommonDBInterface outDbMap = null;
		
		// ファイル出力変数
		JBSbatServiceInterfaceMap listMap = null;

		// データ種別
		dataSbt = inMap.getString(JBSbatKKIFM096.DATA_SBT);

		// 金融機関コード
		kinyukikanCd = inMap.getString(JBSbatKKIFM096.BANK_CD);

		// 金融機関支店コード
		shitenCd = inMap.getString(JBSbatKKIFM096.BANK_SHITEN_CD);

		// データ種別付加年月日8
		dataSbtHukaYmd8 = getDataSbtHukaYmd8(inMap);

		// 備考
		biko = JBSbatInterface.trim(inMap.getString(JBSbatKKIFM096.BIKO));

		// 処理対象データ（データ種別が0変更無：0、追加：1、変更：2、廃止：3）の場合登録処理を行い、それ以外の場合リストのみを出力します。
		if(isTaishoData(inMap))
		{
			if(!"".equals(biko))
			{
				// ファイル出力を行います。
				outputBean.addOutMapList(createKkife112(inMap, LIST_PATTERN1, outDbMap));

				return outputBean;
			}

			// 対象データを検索します。
			String[] selectParam01 = { kinyukikanCd, shitenCd };
			executeKK_M_BANK_KK_SELECT_001(selectParam01);

			// 検索結果取得
			outDbMap = db_KK_M_BANK.selectNext();

			// データが存在する場合
			if(outDbMap != null)
			{
				JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
				
				whereMap.setValue(JBSbatKK_M_BANK.BANK_CD, JBSbatStringUtil.Rtrim(outDbMap.getString(JBSbatKK_M_BANK.BANK_CD)));
				whereMap.setValue(JBSbatKK_M_BANK.BANK_SHITEN_CD, JBSbatStringUtil.Rtrim(outDbMap.getString(JBSbatKK_M_BANK.BANK_SHITEN_CD)));
				whereMap.setValue(JBSbatKK_M_BANK.GENE_ADD_DTM, JBSbatStringUtil.Rtrim(outDbMap.getString(JBSbatKK_M_BANK.GENE_ADD_DTM)));
				
				super.logPrint.printDebugLog("排他検索実施");
				super.logPrint.printDebugLog("金融機関コード:::::" + outDbMap.getString(JBSbatKK_M_BANK.BANK_CD));
				super.logPrint.printDebugLog("金融機関支店コード:::::" + outDbMap.getString(JBSbatKK_M_BANK.BANK_SHITEN_CD));
				super.logPrint.printDebugLog("世代登録年月日時分秒:::::" + outDbMap.getString(JBSbatKK_M_BANK.GENE_ADD_DTM));
				// 金融統廃合TBLを排他検索を実施。
				JBSbatCommonDBInterface outmap = db_KK_M_BANK.selectByPrimaryKeysForUpdateWait(whereMap);
				
				// 排他検索結果の判断
				if (null == outmap)
				{
					super.logPrint.printBusinessErrorLog("EKKB0360KE",
							new String[]{"金融機関TBL", outDbMap.getString(JBSbatKK_M_BANK.BANK_CD)});
					super.logPrint.printDebugLog("排他エラーが発生しました。{BANK_CD:" + outDbMap.getString(JBSbatKK_M_BANK.BANK_CD) + "}");
					return null;
				}
				
				// 変更なしの場合
				if(DATA_SBT_NO_UPD.equals(dataSbt))
				{
					return null;
				}
				// 追加（1）の場合
				else if(DATA_SBT_ADD.equals(dataSbt))
				{

					outputBean.addOutMapList(execAddShori(inMap, outDbMap));
				}
				// 変更（2）の場合
				else if(DATA_SBT_UPD.equals(dataSbt))
				{

					outputBean.addOutMapList(execUpdateShori(inMap, outDbMap));
				}
				// 廃止（3）の場合
				else if(DATA_SBT_HAISHI.equals(dataSbt))
				{

					listMap = execHaishiShori(inMap, outDbMap);

					if(listMap != null)
					{
						outputBean.addOutMapList(listMap);
					}
				}
			}
			else
			{
				// データ未存在
				// 変更無（0）または追加（1）または変更（2）の場合
				if(DATA_SBT_NO_UPD.equals(dataSbt) || DATA_SBT_ADD.equals(dataSbt) || DATA_SBT_UPD.equals(dataSbt))
				{

					// 金融機関マスタにデータを登録します。
					insertBankMst(inMap, INS_PATTERN1, outDbMap);

					// 金融機関マスタ更新結果リストを出力します。
					outputBean.addOutMapList(createKkife112(inMap, LIST_PATTERN2, outDbMap));

				}
				else
				{
					// 廃止の場合処理しません。
					return null;
				}
			}
		}
		else
		{
			// 業務エラーログ出力
			super.logPrint.printBusinessErrorLog("EKKB0130CE", new String[] { "金融機関コード："
																+ kinyukikanCd + " 店舗コード：" + shitenCd + " データ種別" });

			super.commonItem.setErrFlg(true);
			// ファイル出力を行います。
			biko = "データ不正";
			outputBean.addOutMapList(createKkife112(inMap, LIST_PATTERN1, outDbMap));
		}

		super.logPrint.printDebugLog("execute_END");

		return outputBean;

	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		super.logPrint.printDebugLog("terminal_START");
		/** ▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼ */
		// DBアクセスクラスをクローズします
		db_KK_M_BANK.close();
		/** ▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲ */
		super.logPrint.printDebugLog("terminal_END");
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(KK_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 executeKK_M_BANK_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_M_BANK.selectBySqlDefine(paramList, KK_M_BANK_KK_SELECT_001);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	金融機関コード				BANK_CD
	 *		 	金融機関支店コード				BANK_SHITEN_CD
	 *		 	世代登録年月日時分秒				GENE_ADD_DTM
	 *		 	金融機関名				BANK_NM
	 *		 	金融機関カナ名				BANK_KANA
	 *		 	金融機関支店名				BANK_SHITEN_NM
	 *		 	金融機関支店カナ名				BANK_SHITEN_KANA
	 *		 	予約適用年月日				RSV_APLY_YMD
	 *		 	金融機関適用開始年月日				BANK_TSTAYMD
	 *		 	金融機関適用終了年月日				BANK_TENDYMD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	表示順				DSP_JUN
	 *		 	廃止猶予期間終了年月日				HAISHI_YUYO_PRD_ENDYMD
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @return 処理件数
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeKK_M_BANK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("BANK_CD", setParam[0]);
		setMap.setValue("BANK_SHITEN_CD", setParam[1]);
		setMap.setValue("GENE_ADD_DTM", setParam[2]);
		setMap.setValue("BANK_NM", setParam[3]);
		setMap.setValue("BANK_KANA", setParam[4]);
		setMap.setValue("BANK_SHITEN_NM", setParam[5]);
		setMap.setValue("BANK_SHITEN_KANA", setParam[6]);
		setMap.setValue("RSV_APLY_YMD", setParam[7]);
		setMap.setValue("BANK_TSTAYMD", setParam[8]);
		setMap.setValue("BANK_TENDYMD", setParam[9]);
		setMap.setValue("ADD_DTM", setParam[10]);
		setMap.setValue("ADD_OPEACNT", setParam[11]);
		setMap.setValue("UPD_DTM", setParam[12]);
		setMap.setValue("UPD_OPEACNT", setParam[13]);
		setMap.setValue("DSP_JUN", setParam[14]);
		setMap.setValue("HAISHI_YUYO_PRD_ENDYMD", setParam[15]);
		setMap.setValue("DEL_DTM", setParam[16]);
		setMap.setValue("DEL_OPEACNT", setParam[17]);
		setMap.setValue("MK_FLG", setParam[18]);
		setMap.setValue("ADD_UNYO_YMD", setParam[19]);
		setMap.setValue("ADD_TRN_ID", setParam[20]);
		setMap.setValue("UPD_UNYO_YMD", setParam[21]);
		setMap.setValue("UPD_TRN_ID", setParam[22]);
		setMap.setValue("DEL_UNYO_YMD", setParam[23]);
		setMap.setValue("DEL_TRN_ID", setParam[24]);
		
		// DBアクセスを実行します
		return db_KK_M_BANK.insertByPrimaryKeys(setMap);
	}

	/**
	 * SQLKEY(KK_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	BANK_TENDYMD
	 *		 	UPD_DTM
	 *		 	UPD_OPEACNT
	 *		 	UPD_UNYO_YMD
	 *		 	UPD_TRN_ID
	 *		 	BANK_CD
	 *		 	BANK_SHITEN_CD
	 *		 	BANK_TSTAYMD
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return 処理件数
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeKK_M_BANK_KK_UPDATE_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());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());

		// DBアクセスを実行します
		return db_KK_M_BANK.executeBySqlDefine(paramList, KK_M_BANK_KK_UPDATE_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 対象のレコードが処理対象か判断します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.データ種別が0、1、2、3か判断します。<br>
	 * </pre>
	 * <p>
	 * @param inMap　入力電文
	 * @return 0、1、2、3の場合true それ以外の場合false
	 * @throws Exception 
	 */
	private boolean isTaishoData(JBSbatServiceInterfaceMap inMap) throws Exception
	{

		if(DATA_SBT_ADD.equals(dataSbt) || DATA_SBT_UPD.equals(dataSbt) || DATA_SBT_HAISHI.equals(dataSbt) || DATA_SBT_NO_UPD.equals(dataSbt))
		{
			return true;
		}

		return false;
	}
	
	/**
	 * 
	 *  金融機関統廃合更新結果リストの作成を行います。
	 * @param inMap　入力電文
	 * @param listPatt　リスト出力パターン
	 * @param bankOutDbMap　金融機関マスタ検索データ
	 * @return JBSbatServiceInterfaceMap
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap createKkife112(JBSbatServiceInterfaceMap inMap, String listPatt, JBSbatCommonDBInterface bankOutDbMap)
			throws Exception
	{
		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();

		// 更新内容
		// データ種が「"0"」の場合
		if ("0".equals(dataSbt))
		{
			// 更新内容		
			outmap.setString(JBSbatKKIFE112.UPD_NAIYO, "変更なし");
		}
		// データ種が「"1"」の場合
		else if ("1".equals(dataSbt))
		{
			// 更新内容		
			outmap.setString(JBSbatKKIFE112.UPD_NAIYO, "新規");
		}
		// データ種が「"2"」の場合
		else if ("2".equals(dataSbt))
		{
			// 更新内容		
			outmap.setString(JBSbatKKIFE112.UPD_NAIYO, "変更");
		}
		else
		{
			// 更新内容		
			outmap.setString(JBSbatKKIFE112.UPD_NAIYO, "廃止");
		}
		
		// 金融機関コード
		outmap.setString(JBSbatKKIFE112.BANK_CD, inMap.getString(JBSbatKKIFM096.BANK_CD));
		// 店舗コード
		outmap.setString(JBSbatKKIFE112.BANK_SHITEN_CD, inMap.getString(JBSbatKKIFM096.BANK_SHITEN_CD));
		// 金融機関カナ
		outmap.setString(JBSbatKKIFE112.BANK_KANA, inMap.getString(JBSbatKKIFM096.BANK_KANA));
		// 店舗名カナ
		outmap.setString(JBSbatKKIFE112.BANK_SHITEN_KANA, inMap.getString(JBSbatKKIFM096.BANK_SHITEN_KANA));
		// 付加CD
		outmap.setString(JBSbatKKIFE112.HUKA_CD, inMap.getString(JBSbatKKIFM096.HUKA_CD));

		// 付加年月日:データ種別付加年月日8 金融機関適用開始年月日:空白 金融機関適用終了年月日:空白 廃止猶予期間終了年月日:空白
		if(LIST_PATTERN1.equals(listPatt))
		{
			// 付加年月日
			outmap.setString(JBSbatKKIFE112.HUKA_YMD, dataSbtHukaYmd8);
			// 金融機関適用開始年月日
			outmap.setString(JBSbatKKIFE112.BANK_TSTAYMD, "");
			// 金融機関適用終了年月日
			outmap.setString(JBSbatKKIFE112.BANK_TENDYMD, "");
			// 廃止猶予期間終了年月日
			outmap.setString(JBSbatKKIFE112.HAISHI_YUYO_PRD_ENDYMD, "");
		}
		// 付加年月日:データ種別付加年月日8 金融機関適用開始年月日:データ種別付加年月日8 金融機関適用終了年月日:20991231 廃止猶予期間終了年月日:20991231 OM-2018-0000400
		else if(LIST_PATTERN2.equals(listPatt))
		{
			// 付加年月日
			outmap.setString(JBSbatKKIFE112.HUKA_YMD, dataSbtHukaYmd8);
			// 金融機関適用開始年月日
			outmap.setString(JBSbatKKIFE112.BANK_TSTAYMD, dataSbtHukaYmd8);
			// 金融機関適用終了年月日
			outmap.setString(JBSbatKKIFE112.BANK_TENDYMD, BANK_TEND_YMD);
			// 廃止猶予期間終了年月日
// OM-2018-0000400 2018/05/30 MOD START
//			outmap.setString(JBSbatKKIFE112.HAISHI_YUYO_PRD_ENDYMD, "");
			outmap.setString(JBSbatKKIFE112.HAISHI_YUYO_PRD_ENDYMD, JBSbatKKConst.S_MAX_DATE);
// OM-2018-0000400 2018/05/30 MOD END

		}
		// 付加年月日:データ種別付加年月日8 金融機関適用開始年月日:金融機関.予約適用年月日
		//				金融機関適用終了年月日:金融機関.金融機関適用終了年月日 廃止猶予期間終了年月日:20991231 OM-2018-0000400
		else if(LIST_PATTERN3.equals(listPatt))
		{
			// 付加年月日
			outmap.setString(JBSbatKKIFE112.HUKA_YMD, dataSbtHukaYmd8);
			// 金融機関適用開始年月日
			outmap.setString(JBSbatKKIFE112.BANK_TSTAYMD, JBSbatStringUtil.Rtrim(bankOutDbMap.getString(JBSbatKK_M_BANK.RSV_APLY_YMD)));
			// 金融機関適用終了年月日
			outmap.setString(JBSbatKKIFE112.BANK_TENDYMD, JBSbatStringUtil.Rtrim(bankOutDbMap.getString(JBSbatKK_M_BANK.BANK_TENDYMD)));
			// 廃止猶予期間終了年月日
// OM-2018-0000400 2018/05/30 MOD START
//			outmap.setString(JBSbatKKIFE112.HAISHI_YUYO_PRD_ENDYMD, "");
			outmap.setString(JBSbatKKIFE112.HAISHI_YUYO_PRD_ENDYMD, JBSbatKKConst.S_MAX_DATE);
// OM-2018-0000400 2018/05/30 MOD END

		}
		// 付加年月日:データ種別付加年月日8 金融機関適用開始年月日:金融機関.予約適用年月日
		//				金融機関適用終了年月日:データ種別付加年月日8 廃止猶予期間終了年月日:データ種別付加年月日8の12ヶ月後
		else if(LIST_PATTERN4.equals(listPatt))
		{
			// 付加年月日
			outmap.setString(JBSbatKKIFE112.HUKA_YMD, dataSbtHukaYmd8);
			// 金融機関適用開始年月日
			outmap.setString(JBSbatKKIFE112.BANK_TSTAYMD, JBSbatStringUtil.Rtrim(bankOutDbMap.getString(JBSbatKK_M_BANK.RSV_APLY_YMD)));
			// 金融機関適用終了年月日
			outmap.setString(JBSbatKKIFE112.BANK_TENDYMD, dataSbtHukaYmd8);
			// 廃止猶予期間終了年月日
			// OM-2016-0002100 MDD START
//			outmap.setString(JBSbatKKIFE112.HAISHI_YUYO_PRD_ENDYMD, JBSbatInterface.adjustMonth(dataSbtHukaYmd8, 6));
			outmap.setString(JBSbatKKIFE112.HAISHI_YUYO_PRD_ENDYMD, JBSbatInterface.adjustMonth(dataSbtHukaYmd8, 12));
			// OM-2016-0002100 MDD END
		}

		// 備考
		outmap.setString(JBSbatKKIFE112.BIKO, biko);
		// 出力フラグを設定
		outmap.setOutFlg(true);

		return outmap;
	}
	
	/**
	 * 
	 *  金融機関マスタにデータを登録します。
	 * @param inMap　入力電文
	 * @param insertPatt　登録パターン
	 * @param bankOutDbMap　金融機関マスタの検索結果
	 * @return boolean 処理結果
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean insertBankMst(JBSbatServiceInterfaceMap inMap, String insertPatt, JBSbatCommonDBInterface bankOutDbMap) throws Exception
	{
		// [0]:金融機関コード
		// [1]:金融機関支店コード
		// [2]:世代登録年月日時分秒
		// [3]:金融機関名
		// [4]:金融機関カナ名
		// [5]:金融機関支店名
		// [6]:金融機関支店カナ名
		// [7]:予約適用年月日
		// [8]:金融機関適用開始年月日
		// [9]:金融機関適用終了年月日
		// [10]:登録年月日時分秒
		// [11]:登録オペレータアカウント
		// [12]:更新年月日時分秒
		// [13]:更新オペレータアカウント
		// [14]:表示順
		// [15]:廃止猶予期間終了年月日
		// [16]:削除年月日時分秒
		// [17]:削除オペレータアカウント
		// [18]:無効フラグ
		// [19]:登録運用年月日
		// [20]:登録処理ID
		// [21]:更新運用年月日
		// [22]:更新処理ID
		// [23]:削除運用年月日
		// [24]:削除処理ID
		

		// システム日付を取得
		String sysdate = JCCBatCommon.getSysDateTimeStamp();

		String[] setParam = new String[25];
		setParam[0] = inMap.getString(JBSbatKKIFM096.BANK_CD);
		setParam[1] = inMap.getString(JBSbatKKIFM096.BANK_SHITEN_CD);
		setParam[2] = sysdate;
		setParam[3] = inMap.getString(JBSbatKKIFM096.BANK_NM);
		setParam[4] = JKKStringConverter.convertFull(inMap.getString(JBSbatKKIFM096.BANK_KANA));
		setParam[5] = inMap.getString(JBSbatKKIFM096.BANK_SHITEN_NM);
		setParam[6] = JKKStringConverter.convertFull(inMap.getString(JBSbatKKIFM096.BANK_SHITEN_KANA));

		// 予約適用年月日:データ種別付加年月日8 金融機関適用開始年月日:データ種別付加年月日8
		//					金融機関適用終了年月日:20991231 廃止猶予期間終了年月日:20991231 OM-2018-0000400
		if(INS_PATTERN1.equals(insertPatt))
		{
			setParam[7] = dataSbtHukaYmd8;
			setParam[8] = dataSbtHukaYmd8;
			setParam[9] = BANK_TEND_YMD;
// OM-2018-0000400 2018/05/30 MOD START
//			setParam[15] = "";
			setParam[15] = JBSbatKKConst.S_MAX_DATE;
// OM-2018-0000400 2018/05/30 MOD END
		}
		// 予約適用年月日:データ種別付加年月日8 金融機関適用開始年月日:金融機関.金融機関適用開始年月日
		//					金融機関適用終了年月日:20991231 廃止猶予期間終了年月日:20991231 OM-2018-0000400
		else if(INS_PATTERN2.equals(insertPatt))
		{
			setParam[7] = dataSbtHukaYmd8;
			setParam[8] = JBSbatStringUtil.Rtrim(bankOutDbMap.getString(JBSbatKK_M_BANK.BANK_TSTAYMD));
			setParam[9] = BANK_TEND_YMD;
// OM-2018-0000400 2018/05/30 MOD START
//			setParam[15] = "";
			setParam[15] = JBSbatKKConst.S_MAX_DATE;
// OM-2018-0000400 2018/05/30 MOD END
		}
		// 予約適用年月日:バッチ運用日 金融機関適用開始年月日:金融機関.金融機関適用開始年月日
		//					金融機関適用終了年月日:データ種別付加年月日8 廃止猶予期間終了年月日:データ種別付加年月日8の12ヶ月後
		else if(INS_PATTERN3.equals(insertPatt))
		{
			setParam[7] = super.opeDate;
			setParam[8] = JBSbatStringUtil.Rtrim(bankOutDbMap.getString(JBSbatKK_M_BANK.BANK_TSTAYMD));
			setParam[9] = dataSbtHukaYmd8;
			setParam[15] = JBSbatInterface.adjustMonth(dataSbtHukaYmd8, 12);
		}

		setParam[10] = sysdate;
		setParam[11] = super.batchUserId;
		setParam[12] = sysdate;
		setParam[13] = super.batchUserId;
		setParam[14] = "0";
		setParam[16] = "";
		setParam[17] = "";
		setParam[18] = "0";
		setParam[19] = "";
		setParam[20] = "";
		setParam[21] = "";
		setParam[22] = "";
		setParam[23] = "";
		setParam[24] = "";

		int result = executeKK_M_BANK_PKINSERT(setParam);

		if(result == 0)
		{
			return false;
		}

		return true;
	}
	
	/**
	 * 
	 *  データ種別付加年月日8を取得します。
	 * @param inMap　入力電文
	 * @return データ種別付加年月日8　空白の場合運用日付
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private String getDataSbtHukaYmd8(JBSbatServiceInterfaceMap inMap) throws Exception
	{

		String dataSbthukaymd = JBSbatInterface.trim(inMap.getString(JBSbatKKIFM096.DATA_SBT_HUKA_YMD_8));

		if("".equals(dataSbthukaymd))
		{
			return super.opeDate;
		}

		return dataSbthukaymd;

	}
	
	/**
	 * 
	 *  予約適用年月日とデータ種別付加年月日8を比較し
	 *  備考に設定する文言を返却します。
	 * @param bankOutDbMap　金融機関マスタの検索結果
	 * @return 備考
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private String getErrBikoRsvAplyYmdCmHukaYmd8(JBSbatCommonDBInterface bankOutDbMap) throws Exception
	{

		String retBiko = "";

		// 予約適用年月日
		String rsvAplyYmd = JBSbatInterface.trim(bankOutDbMap.getString(JBSbatKK_M_BANK.RSV_APLY_YMD));

		// 金融機関の予約適用年月日 = 金融機関データのデータ種別付加年月日8 の場合
		if(rsvAplyYmd.compareTo(dataSbtHukaYmd8) == 0)
		{
			retBiko = "適用開始日重複エラー";
		}
		else
		{
			retBiko = "適用期間重複エラー";
		}

		return retBiko;
	}
	
	/**
	 * 
	 *  金融機関マスタの金融機関適用終了年月日を更新します。
	 * @param inMap　入力電文
	 * @param bankOutDbMap　金融機関マスタの検索結果
	 * @return boolean 処理結果
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean updateBankMst(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface bankOutDbMap) throws Exception
	{
		
		// システム日付を取得
		String sysdate = JCCBatCommon.getSysDateTimeStamp();

		String[] setParam = new String[8];
		// 金融機関適用終了年月日
		setParam[0] = dataSbtHukaYmd8;
		// 更新日付
		setParam[1] = sysdate;
		// 更新オペレータアカウント
		setParam[2] = super.batchUserId;
		// 更新運用日
		setParam[3] = super.opeDate;
		// 更新処理ID
// OM-2017-0000187 星野 MOD START
//		String updTrnId = this.getTrnId();
		String updTrnId = JCCBatCommon.getTrnId();
// OM-2017-0000187 星野 MOD END
		setParam[4] = updTrnId;
		// 金融機関コード
		setParam[5] = inMap.getString(JBSbatKKIFM096.BANK_CD);
		// 金融機関支店コード
		setParam[6] = inMap.getString(JBSbatKKIFM096.BANK_SHITEN_CD);
		// 金融機関適用開始年月日
		setParam[7] = JBSbatStringUtil.Rtrim(bankOutDbMap.getString(JBSbatKK_M_BANK.BANK_TSTAYMD));

		int resultCnt = executeKK_M_BANK_KK_UPDATE_001(setParam);

		if(resultCnt == 0)
		{
			return false;
		}

		return true;
	}
	
// OM-2017-0000187 星野 DEL START
//	/**
//	 * 処理IDを取得します。
//	 * <br>
//	 * @return 処理ID
//	 * @throws Exception メソッド内で発生した例外全般。
//	 */
//	private String getTrnId() throws Exception
//	{
//		// ログファイル名を取得します。
//		// ファイルパス＋bus_KS973021_PROGRAM00101_20110728125247955_0000040904e7d.log
//		String trnId = JBSbatLogUtil.APP_FILE_NAME;
//		
//		// ファイル名を抜き出します。
//		String filename 
//			= trnId.substring(trnId.lastIndexOf("/"), trnId.length() - 4 );
//		
//		String [] strList = filename.split("_");
//		
//		// 文字列を結合して返却します。
//		return strList[1] + "_" +strList[2] + "_" + strList[4] ;
//	}
// OM-2017-0000187 星野 DEL END
	
	/**
	 *  追加処理を実行します。
	 * @param inMap　入力電文
	 * @param bankOutDbMap　金融機関マスタの検索結果
	 * @return JBSbatServiceInterfaceMap ファイル出力Map
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap execAddShori(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface bankOutDbMap) throws Exception
	{
		super.logPrint.printDebugLog("execAddShori_START");

		JBSbatServiceInterfaceMap retMap = null;

		// 金融機関適用終了年月日
		String bank_tEndYmd = JBSbatInterface.trim(bankOutDbMap.getString(JBSbatKK_M_BANK.BANK_TENDYMD));

		// 金融機関の金融機関適用終了年月日 < 金融機関データのデータ種別付加年月日8 の場合
		if(!BANK_TEND_YMD.equals(bank_tEndYmd) && !"".equals(bank_tEndYmd) && bank_tEndYmd.compareTo(dataSbtHukaYmd8) < 0)
		{

			// 金融機関マスタにデータを登録します。
			insertBankMst(inMap, INS_PATTERN1, bankOutDbMap);
			// 金融機関マスタ更新結果リストを出力します。
			retMap = createKkife112(inMap, LIST_PATTERN2, bankOutDbMap);

		}
		// 金融機関の金融機関適用終了年月日 >= 金融機関データのデータ種別付加年月日8
		// または金融機関の金融機関適用終了年月日が未設定の場合
		else
		{

			// 備考にセットする文言を取得します。
			biko = getErrBikoRsvAplyYmdCmHukaYmd8(bankOutDbMap);
			// 金融機関マスタ更新結果リストを出力します。
			retMap = createKkife112(inMap, LIST_PATTERN3, bankOutDbMap);
		}

		super.logPrint.printDebugLog("execAddShori_END");

		return retMap;
	}
	
	/**
	 *  変更処理を実行します。
	 * @param inMap　入力電文
	 * @param bankOutDbMap　金融機関マスタの検索結果
	 * @return JBSbatServiceInterfaceMap ファイル出力Map
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap execUpdateShori(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface bankOutDbMap) throws Exception
	{
		super.logPrint.printDebugLog("execUpdateShori_START");

		JBSbatServiceInterfaceMap retMap = null;

		// 金融機関適用終了年月日
		String bank_tEndYmd = JBSbatInterface.trim(bankOutDbMap.getString(JBSbatKK_M_BANK.BANK_TENDYMD));

		// 予約適用年月日
		String rsvAplyYmd = JBSbatInterface.trim(bankOutDbMap.getString(JBSbatKK_M_BANK.RSV_APLY_YMD));
		
		// 金融機関の金融機関適用終了年月日 < 金融機関データのデータ種別付加年月日8 の場合
		if(!BANK_TEND_YMD.equals(bank_tEndYmd) && !"".equals(bank_tEndYmd) && bank_tEndYmd.compareTo(dataSbtHukaYmd8) < 0)
		{

			// 金融機関マスタにデータを登録します。
			insertBankMst(inMap, INS_PATTERN1, bankOutDbMap);
			// 金融機関マスタ更新結果リストを出力します。
			retMap = createKkife112(inMap, LIST_PATTERN2, bankOutDbMap);

		}
		// 金融機関の金融機関適用終了年月日 >= 金融機関データのデータ種別付加年月日8
		// または金融機関の金融機関適用終了年月日が未設定の場合
		else
		{

			// データ種別付加年月日8の前日
			String dataSbtHukaYmd8BefDay = JBSbatInterface.adjustDate(dataSbtHukaYmd8, -1);

			// 金融機関.予約適用年月日 ＜ 金融機関統廃合データ取込.データ種別付加年月日８の前日の場合
			if(rsvAplyYmd.compareTo(dataSbtHukaYmd8BefDay) < 0)
			{

				// 金融機関マスタにデータを登録します。
				insertBankMst(inMap, INS_PATTERN2, bankOutDbMap);
				// 金融機関マスタ更新結果リストを出力します。
				retMap = createKkife112(inMap, LIST_PATTERN2, bankOutDbMap);

			}
			// 金融機関.予約適用年月日 ＞＝ 金融機関統廃合データ取込.データ種別付加年月日８の前日の場合
			else
			{
				// 備考にセットする文言を取得します。
				biko = getErrBikoRsvAplyYmdCmHukaYmd8(bankOutDbMap);
				// 金融機関マスタ更新結果リストを出力します。
				retMap = createKkife112(inMap, LIST_PATTERN3, bankOutDbMap);
			}
		}
		
		super.logPrint.printDebugLog("execUpdateShori_END");

		return retMap;
	}
	
	/**
	 *  廃止処理を実行します。
	 * @param inMap　入力電文
	 * @param bankOutDbMap　金融機関マスタの検索結果
	 * @return JBSbatServiceInterfaceMap ファイル出力Map
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap execHaishiShori(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface bankOutDbMap) throws Exception
	{
		super.logPrint.printDebugLog("execHaishiShori_START");

		JBSbatServiceInterfaceMap retMap = null;

		// 金融機関適用終了年月日
		String bank_tEndYmd = JBSbatInterface.trim(bankOutDbMap.getString(JBSbatKK_M_BANK.BANK_TENDYMD));

		// 予約適用年月日
		String rsvAplyYmd = JBSbatInterface.trim(bankOutDbMap.getString(JBSbatKK_M_BANK.RSV_APLY_YMD));

		// 金融機関の金融機関適用終了年月日 < 金融機関データのデータ種別付加年月日8
		// または金融機関の金融機関適用終了年月日が未設定の場合
		if(BANK_TEND_YMD.equals(bank_tEndYmd) || "".equals(bank_tEndYmd) || bank_tEndYmd.compareTo(dataSbtHukaYmd8) < 0)
		{

			// 金融機関の予約適用年月日 < 金融機関データのデータ種別付加年月日8 の場合
			if(rsvAplyYmd.compareTo(dataSbtHukaYmd8) < 0)
			{

				// 金融機関マスタにデータを登録します。
				insertBankMst(inMap, INS_PATTERN3, bankOutDbMap);
				// 金融機関マスタのデータを更新します。
				updateBankMst(inMap, bankOutDbMap);
				// 金融機関マスタ更新結果リストを出力します。
				retMap = createKkife112(inMap, LIST_PATTERN4, bankOutDbMap);

			}
			else
			{
				// 備考にセットする文言を取得します。
				biko = "開始終了日逆転エラー";
				// 金融機関マスタ更新結果リストを出力します。
				retMap = createKkife112(inMap, LIST_PATTERN3, bankOutDbMap);
			}
		}

		super.logPrint.printDebugLog("execHaishiShori_END");

		return retMap;
	}
}
