/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCKchgechuMladChsht
*	ソースファイル名	：JBSbatCKchgechuMladChsht.java
*	作成者				：富士通　
*	作成日				：2011年07月28日
*＜機能概要＞
*　変更中メールアドレスクリア対象抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/28   富士通		新規作成
*  v33.00.00	2017/08/06   FJ)三原	ANK-3194-00-00_コンテンツ同意・メールアドレス登録改善
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCKIFM904;
import eo.business.util.table.JBSbatCK_T_RRKS;
import eo.business.util.table.JBSbatKK_T_IDO_RSV;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;

import static eo.common.constant.JPCBatchMessageConstant.ECKB0010CE;
import static eo.common.constant.JPCBatchMessageConstant.ECKB0020CE;
import static eo.common.constant.JPCBatchMessageConstant.ECKB0030CE;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCKchgechuMladChsht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(連絡先)*/
	private static final String D_TBL_NAME_CK_T_RRKS = "CK_T_RRKS";

	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** SQL定義キー(CK_SELECT_901)*/
	private static final String CK_T_RRKS_CK_SELECT_901 = "CK_SELECT_901";

	/** SQL定義キー(CK_SELECT_901)*/
	private static final String ZM_M_WORK_PARAM_KNRI_CK_SELECT_901 = "CK_SELECT_901";

	/** テーブルアクセスクラス(連絡先)*/
	private JBSbatSQLAccess db_CK_T_RRKS = null;

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 変更中メールアドレス確定可能日数 */
	private int dateCnt = 0;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		//運用日付を設定します。
		String opeDate = commonItem.getOpeDate();

		// DBアクセスクラスを生成します
		db_CK_T_RRKS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_RRKS);
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
		
		// バッチパラメータ(フリー項目)から業務パラメータIDを取得する。
		String paramId = commonItem.getFreeItem();
		
		if ((paramId == null) || ("".equals(paramId)))
		{
			throw new JBSbatBusinessException(ECKB0010CE, new String[] { "フリー項目1",  "変更中メールアドレス確定可能日数の業務パラメータID"});
		}
		
		// 業務パラメータID から業務パラメータ設定値を取得する。
		List<JBSbatCommonDBInterface> workParamList = getTargetParamList(paramId , opeDate);
		
		// 業務パラメータを取得できない場合
		if(workParamList.isEmpty())
		{
			throw new JBSbatBusinessException(ECKB0020CE, new String[] { "業務パラメータ",  "業務パラメータID:" + paramId });
		}
		
		//変更中メールアドレス確定可能日数の取得
		String dateCntStr = (String)workParamList.get(0).getValue("WORK_PARAM_SETTE_VALUE");
		
		try
		{
			dateCnt = Integer.parseInt(dateCntStr);
		}
		catch (NumberFormatException e)
		{
			throw new JBSbatBusinessException(ECKB0030CE, new String[] { "業務パラメータから取得した変更中メールアドレス確定可能日数",  "(" + dateCntStr + ")" });
		}
		
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 現在日の取得(システム日付)
		// ※変更中メールアドレスクリアのタイミング等を考慮し、あえて運用日付ではなくシステム日付を使用。
//		String nowDate = JCCBatCommon.getSysDate(); // commonItem.getOpeDate();
		
		//変更中メールアドレスクリア対象データの取得
		List <JBSbatCommonDBInterface> workRkksList = getTargetRkksList(opeDate,dateCnt);
		
		// 対象会員の情報をファイル出力用リストに追加する
		ArrayList<JBSbatServiceInterfaceMap> outMapList = new ArrayList<JBSbatServiceInterfaceMap>();
		for (JBSbatCommonDBInterface mapCust : workRkksList) {
			outMapList.add(convertRecord(mapCust));
		}
		
		// ファイル出力用リストを返却用パラメータにセットする
		JBSbatOutputItem outMap = new JBSbatOutputItem();
		outMap.setOutMapList(outMapList);
		
		return outMap;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CK_T_RRKS.close();
		db_ZM_M_WORK_PARAM_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CK_SELECT_901)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	運用日付
	 *		 	運用日付
	 *		 	日数
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_RRKS_CK_SELECT_901(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());
		// ANK-3194-00-00 ADD START
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		// ANK-3194-00-00 ADD END

		// DBアクセスを実行します
		db_CK_T_RRKS.selectBySqlDefine(paramList, CK_T_RRKS_CK_SELECT_901);
	}

	/**
	 * SQLKEY(CK_SELECT_901)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	運用日付
	 *		 	運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_CK_SELECT_901(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_CK_SELECT_901);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲ */

	/**
	 * 業務パラメータから指定したパラメータ値を取得する.
	 * @param paramId
	 * @param sysDate 運用日付
	 * @return paramList
	 * @throws Exception
	 */
	private List<JBSbatCommonDBInterface> getTargetParamList(String paramId,String sysDate) throws Exception{
		List<JBSbatCommonDBInterface> paramList = new ArrayList<JBSbatCommonDBInterface>();
		Object[] param= {paramId,sysDate,sysDate};
		executeZM_M_WORK_PARAM_KNRI_CK_SELECT_901(param);
		JBSbatCommonDBInterface mapCust = new JBSbatCommonDBInterface();
		
		while (true)
		{
			mapCust = db_ZM_M_WORK_PARAM_KNRI.selectNext();
			if(mapCust != null)
			{
				paramList.add(mapCust);
			}
			else
			{
				break;
			}
			
		}
		return paramList;
	}
	
	/**
	 * 変更中メールアドレス確定可能日数を経過している連絡先情報を取得する。
	 * @param nowDate システム日付
	 * @param mailadressPsddateCnt 変更中メールアドレス確定可能日数
	 * @return rkksList
	 * @throws Exception 
	 */
	private List<JBSbatCommonDBInterface> getTargetRkksList(String nowDate , int mailadressPsddateCnt) throws Exception
	{
		List<JBSbatCommonDBInterface> rkksList = new ArrayList<JBSbatCommonDBInterface>();
		//---------v33.00.00 ANK-3194-00-00_MOD START---------//
		//Object[] param ={ nowDate, nowDate, mailadressPsddateCnt, nowDate , mailadressPsddateCnt };
		Object[] param ={ nowDate, nowDate, mailadressPsddateCnt, nowDate , mailadressPsddateCnt,
				nowDate, mailadressPsddateCnt, nowDate, mailadressPsddateCnt};
		//---------v33.00.00 ANK-3194-00-00_MOD END-----------//
		executeCK_T_RRKS_CK_SELECT_901(param);
		JBSbatCommonDBInterface mapCust = new JBSbatCommonDBInterface();
		
		while(true)
		{
			mapCust = db_CK_T_RRKS.selectNext();
			
			if(mapCust != null)
			{
				rkksList.add(mapCust);
			}
			else
			{
				break;
			}
		}
		return rkksList;
	}
	
	/**
	 * 
	 * @param dbMap
	 * @return sifMap
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap convertRecord(JBSbatCommonDBInterface dbMap) throws Exception
	{

		JBSbatServiceInterfaceMap sifMap = new JBSbatServiceInterfaceMap();
		sifMap.setString(JBSbatCKIFM904.RRKS_NO, dbMap.getString(JBSbatCK_T_RRKS.RRKS_NO));
		sifMap.setString(JBSbatCKIFM904.GENE_ADD_DTM, dbMap.getString(JBSbatCK_T_RRKS.GENE_ADD_DTM));
		sifMap.setString(JBSbatCKIFM904.SYSID, dbMap.getString(JBSbatCK_T_RRKS.SYSID));
		sifMap.setString(JBSbatCKIFM904.UPD_DTM, dbMap.getString(JBSbatCK_T_RRKS.UPD_DTM));
		// ANK-3194-00-00 ADD START
		sifMap.setString(JBSbatCKIFM904.MLAD_CHGE_UK_YMD, dbMap.getString(JBSbatCK_T_RRKS.MLAD_CHGE_UK_YMD));
		sifMap.setString(JBSbatCKIFM904.MLAD, dbMap.getString(JBSbatCK_T_RRKS.MLAD));
		sifMap.setString(JBSbatCKIFM904.IDO_RSV_NO, dbMap.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_NO));
		sifMap.setString(JBSbatCKIFM904.PARAMETER_4, dbMap.getString(JBSbatKK_T_IDO_RSV.PARAMETER_4));
		sifMap.setString(JBSbatCKIFM904.PARAMETER_21, dbMap.getString(JBSbatKK_T_IDO_RSV.PARAMETER_21));
		// ANK-3194-00-00 ADD END
		return sifMap;
	}


}
