/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKEoidMmbYkInfCst
*	ソースファイル名	：JBSbatKKEoidMmbYkInfCst.java
*	作成者				：富士通　
*	作成日				：2011年08月05日
*＜機能概要＞
*　ｅｏＩＤ会員有効性情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/05	FJ）庭山	新規作成
*	v3.00.00	2012/05/29	FJ）団		【ANK-0299-00-00】（督促STの遷移による会員種別変更）対応
*	v3.01.00	2012/09/18	FJ) 団		【ST1-2012-0000582】対応（タイムスタンプ取得JCCBatCommon→JBSbatDateUtilに修正）
*	v4.00.00	2012/11/06	FJ) 団		【ST1-2012-0000703】対応
*	v4.01.00	2013/03/15	FJ) 団		【IT1-2013-0000477】対応
*	v4.02.00	2013/03/19  FJ）岡田	【IT1-2013-0000498】横展開対応。
*	v5.00.00	2013/03/19  FJ) 団		【IT1-2013-0000541】障害対応
*	v5.00.01	2013/03/22  FJ) 団		【IT1-2013-0000563】障害対応
*	v5.00.02	2013/03/23  FJ) 団		【IT1-2013-0000614】障害対応
*	v5.00.03	2013/03/26  FJ) 団		【IT1-2013-0000662】障害対応
*	v5.00.04	2013/05/24  FJ) 小野	【TAI-2013-0000026】Shell側で実装できない分をJava側で行う対応（分割元・併合元の不要データ削除）
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM028;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
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 JBSbatKKEoidMmbYkInfCst extends JBSbatBusinessService
{

	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** SQL定義キー(KK_SELECT_262)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_262 = "KK_SELECT_262";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**
	 * 異動区分（お客様併合）
	 */
	private static final String IDO_DIV_CUST_HEIGOU = "00013";
	
	/**
	 * 異動区分（お客様分割）
	 */
	private static final String IDO_DIV_CUST_BNKT = "00014";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");

		JBSbatOutputItem out_bean = null;

		//レコードが終了した場合　処理を抜ける。
		if(null == inMap)
		{
			return out_bean;
		}
		
		// 異動区分
		String inIdo_div = inMap.getString(JBSbatKKIFM028.IDO_DIV);
		
		// 異動区分が「分割」または「併合」の場合、分割元・併合元のSYSIDを持っているレコードのみを抽出する対象とするための判定処理
		if (IDO_DIV_CUST_HEIGOU.equals(inIdo_div) || IDO_DIV_CUST_BNKT.equals(inIdo_div)) {
		
			String inSvc_kei_no = inMap.getString(JBSbatKKIFM028.SVC_KEI_NO);
			String inGene_add_dtm = inMap.getString(JBSbatKKIFM028.GENE_ADD_DTM);
			String inSysid = inMap.getString(JBSbatKKIFM028.SYSID);
			
			// 判定結果がfalseの場合はファイルに出力しないので処理終了
			if (!isOutputTrgtForBKHG(inSvc_kei_no, inGene_add_dtm, inSysid)) {
				return out_bean;
			}
		}
		else 
		{
			// Shellで抽出したデータをそのまま出力するため処理なし
		}

		// 出力退避領域の情報を出力します。
		out_bean = setOutData(inMap);
		
		super.logPrint.printDebugLog("execute_END");

		return out_bean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_262)で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_T_SVC_KEI_KK_SELECT_262(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());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_262);
	}

	/**
	 * 異動区分「分割」「併合」時のファイル出力対象かどうか判定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.Shellで抽出したレコードのSYSIDと検索結果のSYSIDが一致した場合はファイル出力対象とする。
	 * 　Shellで抽出したレコードのSYSIDと検索結果のSYSIDが一致しない場合は出力対象外とする。
	 * 
	 * </pre>
	 * @param svc_kei_no
	 * @param gene_add_dtm
	 * @param inSysid
	 * @return
	 * @throws Exception
	 */
	private boolean isOutputTrgtForBKHG(String svc_kei_no, String gene_add_dtm, String inSysid) throws Exception
	{
		String[] param262 = new String[5];
		param262[0] = svc_kei_no;
		param262[1] = svc_kei_no;
		param262[2] = gene_add_dtm;
		param262[3] = gene_add_dtm;
		param262[4] = svc_kei_no;
		
		executeKK_T_SVC_KEI_KK_SELECT_262(param262);
		JBSbatCommonDBInterface db_map_262 = db_KK_T_SVC_KEI.selectNext();
		if(db_map_262 != null)
		{
			String motoSysIDFromDB = JBSbatStringUtil.Rtrim(db_map_262.getString(JBSbatKK_T_SVC_KEI.SYSID));
			super.logPrint.printDebugLog("検索した併合元・分割元のSYSID：" + motoSysIDFromDB);
			// 抽出レコードのSYSIDと検索結果のSYSIDが一致した場合は、分割・併合のレコードとしてファイル出力対象とする（trueを返す）
			if (inSysid != null && inSysid.equals(motoSysIDFromDB))
			{
				return true;
			}
		}
		else
		{
			super.logPrint.printDebugLog("併合元・分割元のSYSID取得結果なし：");
		}
		// 検索結果が無い場合や、抽出レコードのSYSIDと検索結果のSYSIDが一致しなかった場合はファイル出力しないためfalseを返す
		return false;
	}
	
	/**
	 * ｅｏＩＤ会員有効性情報抽出ファイル出力の処理をします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ｅｏＩＤ会員有効性情報抽出ファイルの出力処理をします。<br>
	 *
	 *
	 * </pre>
	 * <p>
	 * @param map 退避領域。
	 * @return JBSbatOutputItem　出力情報。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatOutputItem setOutData(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatOutputItem out_bean = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		
		out_map.setString(JBSbatKKIFM028.SYSID, inMap.getString(JBSbatKKIFM028.SYSID));
		out_map.setString(JBSbatKKIFM028.SVC_KEI_NO, inMap.getString(JBSbatKKIFM028.SVC_KEI_NO));
		out_map.setString(JBSbatKKIFM028.GENE_ADD_DTM, inMap.getString(JBSbatKKIFM028.GENE_ADD_DTM));
		out_map.setString(JBSbatKKIFM028.SHOSA_YMD, inMap.getString(JBSbatKKIFM028.SHOSA_YMD));
		out_map.setString(JBSbatKKIFM028.SVC_STA_YMD, inMap.getString(JBSbatKKIFM028.SVC_STA_YMD));
		out_map.setString(JBSbatKKIFM028.SVC_ENDYMD, inMap.getString(JBSbatKKIFM028.SVC_ENDYMD));
		out_map.setString(JBSbatKKIFM028.MK_FLG, inMap.getString(JBSbatKKIFM028.MK_FLG));
		out_map.setString(JBSbatKKIFM028.ADD_DTM, inMap.getString(JBSbatKKIFM028.ADD_DTM));
		out_map.setString(JBSbatKKIFM028.ADD_OPEACNT, inMap.getString(JBSbatKKIFM028.ADD_OPEACNT));
		out_map.setString(JBSbatKKIFM028.ADD_TRN_ID, inMap.getString(JBSbatKKIFM028.ADD_TRN_ID));
		out_map.setString(JBSbatKKIFM028.UPD_DTM, inMap.getString(JBSbatKKIFM028.UPD_DTM));
		out_map.setString(JBSbatKKIFM028.UPD_OPEACNT, inMap.getString(JBSbatKKIFM028.UPD_OPEACNT));
		out_map.setString(JBSbatKKIFM028.UPD_TRN_ID, inMap.getString(JBSbatKKIFM028.UPD_TRN_ID));
		out_map.setString(JBSbatKKIFM028.SVC_CD, inMap.getString(JBSbatKKIFM028.SVC_CD));
		out_map.setString(JBSbatKKIFM028.PRC_GRP_CD, inMap.getString(JBSbatKKIFM028.PRC_GRP_CD));
		out_map.setString(JBSbatKKIFM028.PCRS_CD, inMap.getString(JBSbatKKIFM028.PCRS_CD));
		out_map.setString(JBSbatKKIFM028.PPLAN_CD, inMap.getString(JBSbatKKIFM028.PPLAN_CD));
		out_map.setString(JBSbatKKIFM028.MEMBER_SBT_CD, inMap.getString(JBSbatKKIFM028.MEMBER_SBT_CD));
		out_map.setString(JBSbatKKIFM028.TOKUSOKU_STAT, inMap.getString(JBSbatKKIFM028.TOKUSOKU_STAT));
		out_map.setString(JBSbatKKIFM028.UPD_FLG, inMap.getString(JBSbatKKIFM028.UPD_FLG));
		out_map.setString(JBSbatKKIFM028.IDO_DIV, inMap.getString(JBSbatKKIFM028.IDO_DIV));
		out_map.setString(JBSbatKKIFM028.TRN_TG_FLG, inMap.getString(JBSbatKKIFM028.TRN_TG_FLG));
		out_map.setString(JBSbatKKIFM028.SHOSA_CL_YMD, inMap.getString(JBSbatKKIFM028.SHOSA_CL_YMD));
		out_map.setString(JBSbatKKIFM028.GENE_ADD_DTM_SVC,inMap.getString(JBSbatKKIFM028.GENE_ADD_DTM_SVC));
		out_map.setOutFlg(true);
		out_bean.addOutMapList(out_map);

		return out_bean;
	}

}
