/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKCpCancelDataChstu
*	ソースファイル名	：JBSbatKKCpCancelDataChstu.java
*	作成者				：富士通　
*	作成日				：2025年02月06日
*＜機能概要＞
*　キャンペンキャンセル対象抽出
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v75.00.00	2025/02/06  FJ)張		新規作成
*	v75.00.01	2025/04/23  FJ)大路		【ANK-4687-00-00】202507月CP対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.table.JBSbatKK_T_WRIB_SVC_KEI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
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 JBSbatKKCpCancelDataChstu extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";
	
	/** テーブル(割引サービス契約)*/
	private static final String D_TBL_NAME_KK_T_WRIB_SVC_KEI = "KK_T_WRIB_SVC_KEI";
	
	/** SQL定義キー(KK_SELECT_017)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_017 = "KK_SELECT_017";
	
	/** SQL定義キー(KK_SELECT_085)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_085 = "KK_SELECT_085";
	
// ANK-4687-00-00 ADD START
	/** SQL定義キー(KK_SELECT_086)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_086 = "KK_SELECT_086";
// ANK-4687-00-00 ADD END
	
	/**
	 * 業務パラメータID（キャンペンキャンセル対象CP）
	 */
	private static final String KK_CP_CANCEL_TG = "KK_CP_CANCEL_TG%";
	
	/**
	 * チェック項目区分［移転元サービス契約番号（自動適用ＣＣ）］
	 */
	private static final String ITENM_SVC_KEI_NO = "1";
	
// ANK-4687-00-00 ADD START
	/**
	 * チェック項目区分［移転元サービス契約番号（自動適用ＣＣ以外）］
	 */
	private static final String ITENM_SVC_KEI_NO_2 = "2";
// ANK-4687-00-00 ADD END
	
	/**
	 * 割引登録契機コード（手動）
	 */
	private static final String WRIB_ADD_OPTY_CD = "1";
	
	/**
	 *業務パラメータ管理情報保持領域
	 * */
	private ArrayList<String> workParamKnri_List = null;
	
	/**
	 *対象割引サービス契約番号情報保持領域
	 * */
	private ArrayList<String> tgWribKeiNo_List = null;
	
	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;
	
	/** テーブルアクセスクラス(割引サービス契約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI = null;
	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		//業務パラメータ管理情報保持領域
		workParamKnri_List = new ArrayList<String> ();
		
		//対象割引サービス契約番号保持領域
		tgWribKeiNo_List = new ArrayList<String>();

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_KK_T_WRIB_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);
		
		// キャンペンキャンセル対象とするキャンペン情報検索
		selectCpCancelCdInfo();
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		//キャンペンキャンセル対象を抽出し、「tgWribKeiNo_List」へ割引サービス契約番号を格納
		getTgWribKeiNoInfo();
		
		
		//対象割引サービス契約番号出力
		JBSbatOutputItem out_bean = new JBSbatOutputItem();
		
		// 割引サービス契約番号出力
		retOutFile(out_bean);
		
		
		return out_bean;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_KK_T_WRIB_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務パラメータ管理マスタ情報を取得します。
	 * 
	 * @param 
	 * @throws Exception 
	 */
	private void selectCpCancelCdInfo() throws Exception
	{
        super.logPrint.printDebugLog("selectCpCancelCdInfo() START");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// 業務パラメータID
		whereParam.setValue(KK_CP_CANCEL_TG);
		
		// 業務パラメータ適用開始年月日
		whereParam.setValue(super.opeDate);
		
		// 業務パラメータ適用終了年月日
		whereParam.setValue(super.opeDate);
		

		super.logPrint.printDebugLog("■[selectCpCancelCdInfo][whereParam=" + whereParam.getList().toString() + "]");
		
		// 業務パラメータ情報抽出
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_017(whereParam.getList().toArray());
		
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_ZM_M_WORK_PARAM_KNRI.selectNext();
		
		while(dbMap != null)
		{
			// キャンセル対象とするキャンペーン情報を取得する
			String cpCancelCdInfo = dbMap.getString((JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
// ANK-4687-00-00 MOD START
//			//「割引サービスコード」と「チェック項目区分」を分ける
//			String[] parts = cpCancelCdInfo.split(",", 2);
//			if (parts.length > 1){
//				//チェック項目区分
//				String checkKomokuKubun = "";
//				checkKomokuKubun = parts[1];
//				// チェック項目区分が移転元サービス契約番号（自動適用ＣＣ）の割引サービスコードはキャンセル対象とする
//				if (ITENM_SVC_KEI_NO.equals(checkKomokuKubun)){
//					String cpCancelCd = "";
//					cpCancelCd = parts[0];
//					workParamKnri_List.add(cpCancelCd);
//					
//				}
//			}
			workParamKnri_List.add(cpCancelCdInfo);
// ANK-4687-00-00 MOD END
			dbMap =  db_ZM_M_WORK_PARAM_KNRI.selectNext();
		}
		super.logPrint.printDebugLog("selectCpCancelCdInfo() END");
	}
	
	/**
	 * 割引サービス契約情報を取得します。
	 * 
	 * @param 
	 * @throws Exception 
	 */
// ANK-4687-00-00 MOD START
//	private void selectWribSvcCdInfo(String wribSvcCd) throws Exception
	private void selectWribSvcCdInfo(String wribSvcCd, String chkKmkDiv) throws Exception
// ANK-4687-00-00 MOD END
	{
        super.logPrint.printDebugLog("selectWribSvcCdInfo() START");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
// ANK-4687-00-00 ADD START
		//予約適用年月日
		whereParam.setValue(super.opeDate);
// ANK-4687-00-00 ADD END
		
		// 割引サービスコード
		whereParam.setValue(wribSvcCd);
		
		//割引登録年月日
		whereParam.setValue(super.opeDate);
		
		//予約適用年月日
		whereParam.setValue(super.opeDate);

		super.logPrint.printDebugLog("■[selectWribSvcCdInfo][whereParam=" + whereParam.getList().toString() + "]");
		
// ANK-4687-00-00 MOD START
//		// 割引サービス契約情報抽出
//		executeKK_T_WRIB_SVC_KEI_KK_SELECT_085(whereParam.getList().toArray());
		
		// チェック項目区分が"1"［移転元サービス契約番号（自動適用ＣＣ）］の場合
		if (ITENM_SVC_KEI_NO.equals(chkKmkDiv)){
			// 割引サービス契約情報抽出
			executeKK_T_WRIB_SVC_KEI_KK_SELECT_085(whereParam.getList().toArray());
		} 
		// チェック項目区分が"2"［移転元サービス契約番号（自動適用ＣＣ以外）］の場合
		else if (ITENM_SVC_KEI_NO_2.equals(chkKmkDiv)){
			// 割引サービス契約情報抽出
			executeKK_T_WRIB_SVC_KEI_KK_SELECT_086(whereParam.getList().toArray());
		} else {
			super.logPrint.printDebugLog("selectWribSvcCdInfo() END");
			return;
		}
// ANK-4687-00-00 MOD END
		
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_KK_T_WRIB_SVC_KEI.selectNext();
		
		while(dbMap != null)
		{
			//キャンペンキャンセル対象とする割引サービス契約番号を取得する
			String wribSvcKeiNo = dbMap.getString((JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_NO));
			tgWribKeiNo_List.add(wribSvcKeiNo);
			dbMap =  db_KK_T_WRIB_SVC_KEI.selectNext();
		}
		super.logPrint.printDebugLog("selectWribSvcCdInfo() END");
	}
	
	/**
	 * 対象割引サービス契約番号を取得します。
	 * 
	 * @throws Exception 
	 */
	private void getTgWribKeiNoInfo() throws Exception
	{
		super.logPrint.printDebugLog("getTgWribKeiNoInfo() START");
		if(workParamKnri_List.size() != 0)
		{
			
			for (int i = 0; i < workParamKnri_List.size(); i++)
			{
// ANK-4687-00-00 MOD START
//				String workParamKnri = "";
//				workParamKnri = workParamKnri_List.get(i);
				String[] workParamKnri  = workParamKnri_List.get(i).split(",", 2);
// ANK-4687-00-00 MOD END
// ANK-4687-00-00 MOD START
//				super.logPrint.printDebugLog("■キャンペンキャンセル対象割引サービスコード　" + workParamKnri);
				super.logPrint.printDebugLog("■キャンペンキャンセル対象割引サービスコード　" + workParamKnri[0]);
// ANK-4687-00-00 MOD END
// ANK-4687-00-00 MOD START
//				selectWribSvcCdInfo(workParamKnri);
				selectWribSvcCdInfo(workParamKnri[0], workParamKnri[1]);
// ANK-4687-00-00 MOD END
			
			}
		}
		super.logPrint.printDebugLog("getTgWribKeiNoInfo() END");
	}
	
	/**
	 * SQLKEY(KK_SELECT_017)で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_KK_SELECT_017(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_KK_SELECT_017);
	}
	
	/**
	 * SQLKEY(CH_SELECT_085)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービスコード
	 *		 	割引登録契機コード：手動"1"
	 *		 	バッチ運用日付
	 *		 	
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_WRIB_SVC_KEI_KK_SELECT_085(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
// ANK-4687-00-00 ADD START
		paramList.setValue(param[3].toString());
// ANK-4687-00-00 ADD END

		// DBアクセスを実行します
		db_KK_T_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_085);
	}
	
// ANK-4687-00-00 ADD START
	/**
	 * SQLKEY(CH_SELECT_086)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービスコード
	 *		 	割引登録契機コード：手動設定"2"
	 *		 	バッチ運用日付
	 *		 	
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_WRIB_SVC_KEI_KK_SELECT_086(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());

		// DBアクセスを実行します
		db_KK_T_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_086);
	}
// ANK-4687-00-00 ADD END
	
	/** 
	 * 
	 * 出力共通電文クラスへの設定を行う.
	 * 
	 * @param outBean
	 */
	private void retOutFile(JBSbatOutputItem outBean) {
		
		for (String wribSvcKno : this.tgWribKeiNo_List) {
			
			// 出力対象項目格納領域作成
			JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
			
			outMap.set(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_NO, wribSvcKno);
			outMap.setOutFlg(true);
			
			outBean.addOutMapList(outMap);
		}
	}
}