/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKSvcStaymdHoseiTgCst
*	ソースファイル名	：JBSbatKKSvcStaymdHoseiTgCst.java
*	作成者				：富士通　
*	作成日				：2025年03月13日
*＜機能概要＞
*  サービス開始年月日補正対象抽出対象作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2025/03/13  吉田あ		新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatKKIFM976;
import eo.business.util.table.JBSbatKK_M_PCRS;
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;

public class JBSbatKKSvcStaymdHoseiTgCst extends JBSbatBusinessService {
	
	/** テーブル(料金コース)*/
	private static final String D_TBL_NAME_KK_M_PCRS = "KK_M_PCRS";
	
	/** テーブルアクセスクラス(料金コース)*/
	private JBSbatSQLAccess db_KK_M_PCRS = null;
	
	/** SQL定義キー(KK_SELECT_014)*/
	private static final String KK_M_PCRS_KK_SELECT_014 = "KK_SELECT_014";
	
	/** 定数：(SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398)転居先.サービス開始年月日 */
	public static final String TNKYS_SVC_STA_YMD = "TNKYS_SVC_STA_YMD";
	
	/** 定数：(SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398)転居元.サービス開始年月日 */
	public static final String TNKYM_SVC_STA_YMD = "TNKYM_SVC_STA_YMD";
	
	/** 定数：(SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398).移転元サービス契約番号 */
	public static final String ITENM_SVC_KEI_NO = "ITENM_SVC_KEI_NO";
	
	/** 定数：(SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398)転居先.料金コースコード */
	public static final String TNKYS_PCRS_CD= "TNKYS_PCRS_CD";
	
	/** 定数：(SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398)転居元.料金コース */
	public static final String TNKYM_PCRS_CD = "TNKYM_PCRS_CD";
	
	/** typeN料金コースリスト */
	private ArrayList<String> nttOrsPcrsList = new ArrayList<String>();
	
	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.サービス契約番号 */
	private String svcKeiNo = "";

	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.SYSID */
	private String sysid = "";

	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.転居元_サービス開始年月日 */
	private String tnkymSvcStaYmd = "";

	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.申込明細番号 */
	private String mskmDtlNo = "";
	
	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.転居先_サービス開始年月日 */
	private String tnkysSvcStaYmd = "";
	
	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.移転元サービス契約番号 */
	private String itenmSvcKeiNo = "";
	
	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.転居先_料金コースコード */
	private String tnkysPcrsCd = "";
	
	/** SQL取得結果_KK_T_SVC_KEI_KK_SELECT_398.転居元_料金コースコード */
	private String tnkymPcrsCd = "";
	
	/** ファイル出力.進捗メモ  */
	private  String prgMemo = "";
	
	/** ファイル出力文字列(サービス開始日：(修正前)) */
	public static final String SVC_STAYMD_SHUSEI_BF = "サービス開始日：(修正前)";
	
	/** ファイル出力文字列((修正後)) */
	public static final String SHUSEI_AF = " (修正後)";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_KK_M_PCRS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PCRS);
		
		//バッチ運用日付を取得
		this.opeDate = commonItem.getOpeDate();
		
		// NTT卸料金コースリストの取得
		getNttOrsPcrsList();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception {
		
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		//出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// SQL取得結果(KK_T_SVC_KEI_KK_SELECT_398)の読み取り
		getKkSelect398(inMap);
		
		// 転居先_料金コースコードがTypeNまたは転居元_NTT卸区分がTypeNの場合、出力対象
		if (nttOrsPcrsList.contains(tnkysPcrsCd) || nttOrsPcrsList.contains(tnkymPcrsCd))
		{
			editPrgmemo(inMap);
			outputBean = outputSvcStaymdHoseiTgCsTg(outputBean);
			
		}// 上記以外
		else{
			// なにもしない
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputBean;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	@Override
	public void terminal() throws Exception {
		
		/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_M_PCRS.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 料金コースよりNTT卸区分が設定されている料金コースの取得。<br>
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * 
	 */
	private void getNttOrsPcrsList() throws Exception
	{
		// NTT卸区分が設定されている料金コース情報を取得する
		String[] param = new String[3];
		param[0] = super.opeDate;
		param[1] = super.opeDate;
		param[2] = super.opeDate;
		executeKK_M_PCRS_KK_SELECT_014(param);
		JBSbatCommonDBInterface pcrsMap = db_KK_M_PCRS.selectNext();
		
		while(pcrsMap != null)
		{
			// NTT卸料金コースリスト
			nttOrsPcrsList.add(pcrsMap.getString(JBSbatKK_M_PCRS.PCRS_CD));
			pcrsMap = db_KK_M_PCRS.selectNext();
		}
	}
	
	/**
	 * SQLKEY(KK_SELECT_014)で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_M_PCRS_KK_SELECT_014(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_KK_M_PCRS.selectBySqlDefine(paramList, KK_M_PCRS_KK_SELECT_014);
	}
	
	/**
	 * 
	 * SQL実行結果の読み込みを行います。
	 * 
	 * @param inMap SQL実行結果の値。
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void getKkSelect398(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		
		/************/
		/** 初期化 **/
		/************/
		svcKeiNo = "";
		sysid = "";
		tnkymSvcStaYmd = "";
		mskmDtlNo = "";
		tnkysSvcStaYmd = "";
		itenmSvcKeiNo = "";
		tnkysPcrsCd = "";
		tnkymPcrsCd = "";
		
		svcKeiNo       = JCCBatCommon.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));	// サービス契約番号
		sysid          = JCCBatCommon.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SYSID));		    // ＳＹＳＩＤ
		tnkymSvcStaYmd = JCCBatCommon.Rtrim(inMap.getString(TNKYM_SVC_STA_YMD));				// 転居元.サービス開始年月日
		mskmDtlNo      = JCCBatCommon.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.MSKM_DTL_NO));	// 申込明細番号
		tnkysSvcStaYmd = JCCBatCommon.Rtrim(inMap.getString(TNKYS_SVC_STA_YMD));				// 転居先.サービス開始年月日
		itenmSvcKeiNo  = JCCBatCommon.Rtrim(inMap.getString(ITENM_SVC_KEI_NO));					// 移転元サービス契約番号
		tnkysPcrsCd    = JCCBatCommon.Rtrim(inMap.getString(TNKYS_PCRS_CD));					// 転居先.料金コースコード
		tnkymPcrsCd    = JCCBatCommon.Rtrim(inMap.getString(TNKYM_PCRS_CD));					// 転居元.料金コースコード
		
	}
	
	/**
	 * サービス開始年月日補正対象抽出対象の出力を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatOutputItem outputSvcStaymdHoseiTgCsTg(JBSbatOutputItem outputBean) throws Exception
	{
		//入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		//項目を設定
		outmap.setString(JBSbatKKIFM976.SVC_KEI_NO, svcKeiNo);				// サービス契約番号
		outmap.setString(JBSbatKKIFM976.SYSID, sysid);						// ＳＹＳＩＤ
		outmap.setString(JBSbatKKIFM976.SVC_STAYMD, tnkymSvcStaYmd);		// サービス開始年月日
		outmap.setString(JBSbatKKIFM976.MSKM_DTL_NO, mskmDtlNo);			// 申込明細番号
		outmap.setString(JBSbatKKIFM976.PRG_MEMO, prgMemo);					// 進捗メモ
		
		//出力フラグを設定
		outmap.setOutFlg(true);
		//出力共通電文に入出力インターフェースを設定する。
		outputBean.addOutMapList(outmap);
		//出力共通電文を返却
		return outputBean;
	}
	
	/**
	 * 
	 * 進捗メモの編集を行います。
	 * 
	 * @param inMap 中間ファイルの値。
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private String editPrgmemo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 初期化
		prgMemo = "";
		
		// サービス開始日：(修正前) + 転居先.サービス開始年月日 + (修正後) + 転居元.サービス開始年月日
		prgMemo = SVC_STAYMD_SHUSEI_BF + tnkysSvcStaYmd + SHUSEI_AF + tnkymSvcStaYmd;
		
		return prgMemo;

	}
}
