/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSBatCHMineoTkskRlsTgCht
 *	ソースファイル名	：JBSBatCHMineoTkskRlsTgCht.java
 *	作成者				：富士通　
 *	作成日				：2017年02月01日
 *＜機能概要＞
 *　mineo督促解除対象情報抽出部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	28.00.01	2017/02/03  FJ)貝本		【ANK-3124-00-00】mineo利用停止解除条件への支払方法登録有無追加
 *********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatCHIFM268;
import eo.business.util.file.JBSbatCHIFM277;
import eo.business.util.table.JBSbatKK_T_CRECARD;
import eo.business.util.table.JBSbatKK_T_KOZA;
import eo.common.constant.JACStrConst;
import eo.common.util.JKKStringUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.db.JCCBatAddTrnId;
import eo.framework.util.JBSbatCheckUtil;

/**
 * (クラスの機能概要) <p>
 *<BR>
 * @author 富士通
 */
public class JBSBatCHMineoTkskRlsTgCht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(口座)*/
	private static final String D_TBL_NAME_KK_T_KOZA = "KK_T_KOZA";

	/** テーブル(クレジットカード)*/
	private static final String D_TBL_NAME_KK_T_CRECARD = "KK_T_CRECARD";

	/** SQL定義キー(CH_SELECT_002)*/
	private static final String KK_T_KOZA_CH_SELECT_002 = "CH_SELECT_002";

	/** SQL定義キー(CH_SELECT_008)*/
	private static final String KK_T_CRECARD_CH_SELECT_008 = "CH_SELECT_008";

	/** テーブルアクセスクラス(口座)*/
	private JBSbatSQLAccess db_KK_T_KOZA = null;

	/** テーブルアクセスクラス(クレジットカード)*/
	private JBSbatSQLAccess db_KK_T_CRECARD = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 口座ステータス（審査済み）*/
	private static final String KOZA_STATE_SNSZM = "100";

	/** クレジットステータス（審査済み）*/
	private static final String CRE_STATE_SNSZM = "100";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KOZA = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KOZA);
		db_KK_T_CRECARD = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CRECARD);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		//入力.請求方法コードを確認。設定されていない場合、レコード出力しない
		String inSeikyWayCd = inMap.getString(JBSbatCHIFM277.SEIKY_WAY_CD);
		if(JKKStringUtil.isNullBlank(inSeikyWayCd))
		{
			return outputBean;
		}

		//２（口振）か３（郵振）の場合、請求方法番号(口座)をキーに口座スキーマを参照
		if(JACStrConst.SEIKY_KHRI.equals((inSeikyWayCd)) || JACStrConst.SEIKY_YUFUIRI.equals((inSeikyWayCd)))
		{
			//入力.請求方法番号（口座）を取得
			String inSeikyWayNoKoza = (String) inMap.get(JBSbatCHIFM277.SEIKY_WAY_NO_KOZA);

			//請求方法番号（口座）が設定されていない場合、レコードを出力しない
			if(JKKStringUtil.isNullBlank(inSeikyWayNoKoza))
			{
				return outputBean;
			}

			executeKK_T_KOZA_CH_SELECT_002(new Object[]{inSeikyWayNoKoza});

			//口座ステータスが「審査済み」である場合、入力データを出力する
			JBSbatCommonDBInterface kozaStat = db_KK_T_KOZA.selectNext();

			//取得できない場合、データを出力しない
			if(null == kozaStat)
			{
				return outputBean;
			}

			if(KOZA_STATE_SNSZM.equals(kozaStat.getString(JBSbatKK_T_KOZA.KOZA_STAT)))
			{
				outputBean.addOutMapList(createOutMap(inMap));
				return outputBean;
			}
			//上記以外の場合、出力しない。
			else
			{
				return outputBean;
			}
		}

		//４（クレジット）の場合、クレジットカードスキーマを参照
		else if(JACStrConst.SEIKY_CREDIT.equals((inSeikyWayCd)))
		{
			String inSeikyWayNoCreCa = (String) inMap.get(JBSbatCHIFM277.SEIKY_WAY_NO_CRECARD);

			//請求方法番号（クレジット）が設定されていない場合、レコード出力しない
			if(JKKStringUtil.isNullBlank(inSeikyWayNoCreCa))
			{
				return outputBean;
			}

			executeKK_T_CRECARD_CH_SELECT_008(new Object[]{inSeikyWayNoCreCa});

			//クレジットステータスが「100」かつ、クレジット無効年月が設定されていない場合、入力データを成形して出力設定。
			JBSbatCommonDBInterface creCardMap = db_KK_T_CRECARD.selectNext();

			if(null == creCardMap)
			{
				return outputBean;
			}

			String creCardStat = creCardMap.getString(JBSbatKK_T_CRECARD.CRECARD_STAT);
			String crecaMkYm = creCardMap.getString(JBSbatKK_T_CRECARD.CRECA_MK_YM);

			if(CRE_STATE_SNSZM.equals(creCardStat) && JKKStringUtil.isNullBlank(crecaMkYm))
			{
				outputBean.addOutMapList(createOutMap(inMap));
			}
			//上記以外の場合、レコードを出力しない
			else{
				return outputBean;
			}
		}

		return outputBean;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 入力ファイルを出力ファイルに成形します
	 * @param inMap
	 * @return JBSbatServiceInterfaceMap
	 */
	private JBSbatServiceInterfaceMap createOutMap(JBSbatServiceInterfaceMap inMap)
	{

		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();

		//1.サービス契約番号
		outMap.set(JBSbatCHIFM268.SVC_KEI_NO,	inMap.get(JBSbatCHIFM277.SVC_KEI_NO)	);

		//2.サービス契約ステータス
		outMap.set(JBSbatCHIFM268.SVC_KEI_STAT,	inMap.get(JBSbatCHIFM277.SVC_KEI_STAT)	);

		//3.督促番号
		outMap.set(JBSbatCHIFM268.TOKUSOKU_NO,	inMap.get(JBSbatCHIFM277.TOKUSOKU_NO)	);

		//4.督促ステータス
		outMap.set(JBSbatCHIFM268.TOKUSOKU_STAT,	inMap.get(JBSbatCHIFM277.TOKUSOKU_STAT)	);

		//mineo督促ステータス
		outMap.set(JBSbatCHIFM268.MINEO_TKSKST,	inMap.get(JBSbatCHIFM277.MINEO_TKSKST)	);

		outMap.setOutFlg(true);
		return outMap;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KOZA.close();
		db_KK_T_CRECARD.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CH_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SEIKY_WAY_NO_KOZA 
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KOZA_CH_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_KOZA.selectBySqlDefine(paramList, KK_T_KOZA_CH_SELECT_002);
	}

	/**
	 * SQLKEY(CH_SELECT_008)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SEIKY_WAY_NO_CRECARD
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CRECARD_CH_SELECT_008(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_CRECARD.selectBySqlDefine(paramList, KK_T_CRECARD_CH_SELECT_008);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
