/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKWrbSvcKeiStaClChst
*	ソースファイル名	：JBSbatKKWrbSvcKeiStaClChst.java
*	作成者				：富士通　
*	作成日				：2013年09月26日
*＜機能概要＞
*　割引サービス契約開始取消対象抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00.00	2014/02/06  FJ)古内		新規作成
*	v10.00.00	2014/10/15  FJ)山野		【OM-2014-0003285】障害対応
*	v22.00.00	2015/11/26	FJ)杉本		【ANK-2732-00-00】プロジェクト正常化 サービス開始に関するソース可読性向上
*	v46.00.00	2019/11/11	FJ)吉田		【OM-2019-0001070】初回CDRによる電話サービス開始時割引適用回数初期化
*********************************************************************/
package eo.business.service;

import java.util.HashSet;
import java.util.Set;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.util.file.JBSbatKKIFM520;
import eo.business.util.table.JBSbatKK_M_WRIB_SVC_DTL;
import eo.business.util.table.JBSbatKK_T_KOJI_DLY_KEHSI;
import eo.business.util.table.JBSbatKK_T_WRIB_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_WRISVC_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_WRISVC_TG_KEI;
import eo.common.util.JKKStringUtil;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKWrbSvcKeiStaClChst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(割引サービス対象契約)*/
	private static final String D_TBL_NAME_KK_T_WRISVC_TG_KEI = "KK_T_WRISVC_TG_KEI";

	/** テーブル(割引サービス契約)*/
	private static final String D_TBL_NAME_KK_T_WRIB_SVC_KEI = "KK_T_WRIB_SVC_KEI";

	/** テーブル(割引サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_WRISVC_KEI_UCWK = "KK_T_WRISVC_KEI_UCWK";

	/** SQL定義キー(KK_SELECT_018)*/
	private static final String KK_T_WRISVC_KEI_UCWK_KK_SELECT_018 = "KK_SELECT_018";

	/** SQL定義キー(KK_SELECT_057)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_057 = "KK_SELECT_057";

	/** SQL定義キー(KK_SELECT_049)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_049 = "KK_SELECT_049";

	/** SQL定義キー(KK_SELECT_050)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_050 = "KK_SELECT_050";

	/** SQL定義キー(KK_SELECT_051)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_051 = "KK_SELECT_051";

	/** SQL定義キー(KK_SELECT_052)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_052 = "KK_SELECT_052";

	/** SQL定義キー(KK_SELECT_053)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_053 = "KK_SELECT_053";

	/** SQL定義キー(KK_SELECT_054)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_054 = "KK_SELECT_054";

	/** テーブルアクセスクラス(割引サービス対象契約)*/
	private JBSbatSQLAccess db_KK_T_WRISVC_TG_KEI = null;

	/** テーブルアクセスクラス(割引サービス契約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI = null;

	/** テーブルアクセスクラス(割引サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_WRISVC_KEI_UCWK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_WRISVC_TG_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRISVC_TG_KEI);
		db_KK_T_WRIB_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);
		db_KK_T_WRISVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRISVC_KEI_UCWK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		JBSbatOutputItem out_bean = new JBSbatOutputItem();
		
		String svcKeiNo = inMap.getString(JBSbatKK_T_KOJI_DLY_KEHSI.SVC_KEI_NO);
		String hoseiBfSvcChrgStaYmd = inMap.getString(JBSbatKK_T_KOJI_DLY_KEHSI.HOSEI_BF_SVC_CHRG_STAYMD);
		String kojiDlyHoseiYmd = inMap.getString(JBSbatKK_T_KOJI_DLY_KEHSI.KOJI_DLY_HOSEI_YMD);
		String hoseiAfSvcChrgStaYmd = inMap.getString(JBSbatKK_T_KOJI_DLY_KEHSI.HOSEI_AF_SVC_CHRG_STAYMD);
		String svcChrgStaYmdChgreCD = inMap.getString(JBSbatKK_T_KOJI_DLY_KEHSI.SVC_CHRG_STAYMD_CHGRE_CD);
		
		// ++++++++++ v22.00.00 変更開始 ++++++++++
//		if (!"20".equals(svcChrgStaYmdChgreCD) && !"30".equals(svcChrgStaYmdChgreCD))
		if (!JBSbatKKConst.CD00869_SVC_CHRG_STAYMD_CHGRE_CD_20.equals(svcChrgStaYmdChgreCD) && !JBSbatKKConst.CD00869_SVC_CHRG_STAYMD_CHGRE_CD_30.equals(svcChrgStaYmdChgreCD))
		// ++++++++++ v22.00.00 変更終了 ++++++++++
		{
			// 処理対象外
			super.logPrint.printDebugLog("execute_END");
			return null;
		}
		
		// ****************************************************************************************************
		//  割引サービス契約番号に紐づく「割引サービス契約」のカレント及び「割引サービス契約内訳」を取得
		// ****************************************************************************************************
		
		// ************ 各種契約に紐づく割引サービス契約番号の抽出 ************
		Set<String> wribSvcKeiNoList = new HashSet<String>();
		wribSvcKeiNoList.addAll(search(db_KK_T_WRISVC_TG_KEI, 
				                       KK_T_WRISVC_TG_KEI_KK_SELECT_049, 
				                       JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO, 
				                       svcKeiNo));
		wribSvcKeiNoList.addAll(search(db_KK_T_WRISVC_TG_KEI, 
				                       KK_T_WRISVC_TG_KEI_KK_SELECT_050, 
				                       JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO, 
				                       svcKeiNo, super.opeDate));
		wribSvcKeiNoList.addAll(search(db_KK_T_WRISVC_TG_KEI, 
				                       KK_T_WRISVC_TG_KEI_KK_SELECT_051, 
				                       JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO, 
				                       svcKeiNo, super.opeDate, svcKeiNo, super.opeDate));
		wribSvcKeiNoList.addAll(search(db_KK_T_WRISVC_TG_KEI, 
				                       KK_T_WRISVC_TG_KEI_KK_SELECT_052, 
				                       JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO, 
				                       svcKeiNo, super.opeDate, svcKeiNo, super.opeDate, super.opeDate));
		wribSvcKeiNoList.addAll(search(db_KK_T_WRISVC_TG_KEI, 
				                       KK_T_WRISVC_TG_KEI_KK_SELECT_053, 
				                       JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO, 
				                       svcKeiNo, super.opeDate, svcKeiNo, super.opeDate, super.opeDate));
		wribSvcKeiNoList.addAll(search(db_KK_T_WRISVC_TG_KEI, 
				                       KK_T_WRISVC_TG_KEI_KK_SELECT_054, 
				                       JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO, 
				                       svcKeiNo, super.opeDate, svcKeiNo, super.opeDate, super.opeDate, super.opeDate));
		
		for (String wribSvcKeiNo : wribSvcKeiNoList)
		{
			// 割引サービス契約の取得
			executeKK_T_WRIB_SVC_KEI_KK_SELECT_057(wribSvcKeiNo, super.opeDate);
			JBSbatCommonDBInterface wribSvcKeiInfo = db_KK_T_WRIB_SVC_KEI.selectNext();
			if (wribSvcKeiInfo == null)
			{
				continue;
			}
			// 割引サービス契約内訳の取得
			// OM-2019-0001070 MOD START
//			executeKK_T_WRISVC_KEI_UCWK_KK_SELECT_018(wribSvcKeiNo);
			executeKK_T_WRISVC_KEI_UCWK_KK_SELECT_018(super.opeDate, wribSvcKeiNo);
			// OM-2019-0001070 MOD END
			JBSbatCommonDBInterface wribSvcKeiUwInfo = null;
			while ((wribSvcKeiUwInfo = db_KK_T_WRISVC_KEI_UCWK.selectNext()) != null)
			{
				// OM-2019-0001070 ADD START
				String aplyCntHambetCd = wribSvcKeiUwInfo.getString(JBSbatKK_M_WRIB_SVC_DTL.APLY_CNT_HAMBET_CD);
				String wribArplyCnt = wribSvcKeiUwInfo.getString(JBSbatKK_T_WRISVC_KEI_UCWK.WRIB_APLY_CNT);
				if (JKKStringUtil.isNullBlank(wribArplyCnt))
				{
					wribArplyCnt = "0";
				}
				if (!"2".equals(aplyCntHambetCd) || "0".equals(wribArplyCnt))
				{
				// OM-2019-0001070 ADD END
					JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
					outmap.setString(JBSbatKKIFM520.WRIB_SVC_KEI_NO,     wribSvcKeiInfo.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_NO));
					outmap.setString(JBSbatKKIFM520.GENE_ADD_DTM,        wribSvcKeiInfo.getString(JBSbatKK_T_WRIB_SVC_KEI.GENE_ADD_DTM));
					outmap.setString(JBSbatKKIFM520.RIB_SVC_KEI_UCWK_NO, wribSvcKeiUwInfo.getString(JBSbatKK_T_WRISVC_KEI_UCWK.WRIB_SVC_KEI_UCWK_NO));
					outmap.setString(JBSbatKKIFM520.GENE_ADD_DTM_UCWK,   wribSvcKeiUwInfo.getString(JBSbatKK_T_WRISVC_KEI_UCWK.GENE_ADD_DTM));
					//++++++++++ v10.00.00 追加開始 ++++++++++
					outmap.setString(JBSbatKKIFM520.SVC_KEI_NO,          svcKeiNo);
					//++++++++++ v10.00.00 追加終了 ++++++++++
					outmap.setOutFlg(true);
					out_bean.addOutMapList(outmap);
				// OM-2019-0001070 ADD START
				}
				// OM-2019-0001070 ADD END
			}
			
		}
		
		super.logPrint.printDebugLog("execute_END");
		return out_bean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_WRISVC_TG_KEI.close();
		db_KK_T_WRIB_SVC_KEI.close();
		db_KK_T_WRISVC_KEI_UCWK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_055)で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_WRIB_SVC_KEI_KK_SELECT_057(Object... param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_057);
	}
	
	/**
	 * SQLKEY(KK_SELECT_016)で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_WRISVC_KEI_UCWK_KK_SELECT_018(Object... param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		// OM-2019-0001070 ADD START
		paramList.setValue(param[1].toString());
		// OM-2019-0001070 ADD END
		
		// DBアクセスを実行します
		db_KK_T_WRISVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_WRISVC_KEI_UCWK_KK_SELECT_018);
	}
	
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 引数で指定されたＳＱＬ定義を及びパラメータにて検索を行い、getKeyに該当する項目のリストを返却する。
	 * 
	 */
	private Set<String> search(JBSbatSQLAccess dbAccess, String sqlDefKey, String getKey, Object... whereParam) throws Exception
	{
		Set<String> holder = new HashSet<String>();
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		for (Object obj : whereParam)
		{
			if (obj == null)
			{
				paramList.setValue("");
			}
			else
			{
				paramList.setValue(obj.toString());
			}
		}
		
		// DBアクセスを実行します
		dbAccess.selectBySqlDefine(paramList, sqlDefKey);
		
		// 検索結果を取得します。
		JBSbatCommonDBInterface outDbMap = null;
		
		while ((outDbMap = dbAccess.selectNext()) != null)
		{
			holder.add(outDbMap.getString(getKey));
		}
		return holder;
	}
}