/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKPackOpHktgiAdd
*	ソースファイル名	：JBSbatKKPackOpHktgiAdd.java
*	作成者				：富士通　
*	作成日				：2024年10月01日
*＜機能概要＞
*　パックオプション引継登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v72.00.00	2024/10/01   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JCCBatchEsbInterface;
import eo.business.util.table.JBSbatKK_T_IDO_RSV;
import eo.common.constant.JPCBatchMessageConstant;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKPackOpHktgiAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(割引サービス契約)*/
	private static final String D_TBL_NAME_KK_T_WRIB_SVC_KEI = "KK_T_WRIB_SVC_KEI";
	
	/** SQL定義キー(KK_SELECT_005)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_083= "KK_SELECT_083";
	
	/** テーブルアクセスクラス(異動予約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** レコード読込件数*/
	private int recordCnt = 0;
		
	/** リターンコード*/
	private String  returnCode = "0";

	/** ファミリーパック割引*/
	private static final String WRIB_SVC_CD1 = "W00000006";
	
	/** ｅｏセキュリティーパック*/
	private static final String WRIB_SVC_CD2 = "W00000010";
	
	/** ユースケースID*/
	private static final String USECASE_ID = "KKSV1040";
	
	/** タイトル*/
	private static final String TITLE_1 = "PackOpHktgiUpd";
	
	/** 機能コード*/
	private static final String FUNC_CODE = "func_code";
	
	/** 異動区分*/
	private static final String IDO_DIV = "ido_div";
	
	/** サービス契約番号(引継先契約者情報)*/
	private static final String HIKISAKI_SVC_KEI_NO = "hikisaki_svc_kei_no";
	
	/** サービス契約番号*/
	private static final String SVC_KEI_NO = "svc_kei_no";
	
	/** 申込明細番号*/
	private static final String MSKM_DTL_NO = "mskm_dtl_no";
	
	/** 割引サービスコード*/
	private static final String WRIB_SVC_CD = "wrib_svc_cd";
	
	/** 割引サービス契約番号*/
	private static final String WRIB_SVC_KEI_NO = "wrib_svc_kei_no";
	
	/** 割引サービス対象契約番号*/
	private static final String WRIB_SVC_TRGT_KEI_NO = "wrib_svc_trgt_kei_no";
	
	/** 異動予約番号*/
	private static final String IDO_RSV_NO = "ido_rsv_no";
	
	/** 更新年月日時分秒(異動予約・更新前)*/
	private static final String UPD_DTM_BF = "upd_dtm_bf";
	
	/** 反映更新*/
	private static final String CHK_ADD = "1";
	
	/** 取消更新*/
	private static final String CHK_CANCEL = "0";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_KK_T_WRIB_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// レコード件数カウントアップ
		recordCnt++;
		
		// リターンコード初期化
		returnCode = "0";
		
		//割引サービス契約番号を取得
		String WribSvcKeiNo = inMap.getString(JBSbatKK_T_IDO_RSV.WRIB_SVC_KEI_NO);
		
		// 乗換元の割引サービス契約情報を取得する。
		// 取得条件を設定
		Object[] whereParam= new Object[2];
		// 運用日
		whereParam[0] = commonItem.getOpeDate();
		// 割引サービス契約番号
		whereParam[1] = WribSvcKeiNo;
		
		// 割引サービス契約テーブルデータ取得
		executeKK_T_WRIB_SVC_KEI_KK_SELECT_083(whereParam);
		JBSbatCommonDBInterface mapWribSvcKei = db_KK_T_WRIB_SVC_KEI.selectNext();
		
		
		// サービス電文MAPの定義
		// ユースケースIDを格納するMAP
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, "KKSV1040OP");
		
		// マッピング
		HashMap<Object, Object> inputMap= new HashMap<Object, Object>();
		HashMap<String, Object> useInfoMap = new HashMap<String, Object>();

		// 共通電文設定
		// 異動区分
		useInfoMap.put(IDO_DIV, inMap.getString(JBSbatKK_T_IDO_RSV.IDO_DIV));
		// 異動予約番号
		useInfoMap.put(IDO_RSV_NO, inMap.getString(JBSbatKK_T_IDO_RSV.IDO_RSV_NO));
		// 更新年月日時分秒
		useInfoMap.put(UPD_DTM_BF, inMap.getString(JBSbatKK_T_IDO_RSV.UPD_DTM));

		// サービス契約内訳の取得が0件の場合、取消更新の電文を設定
		if(mapWribSvcKei == null)
		{
			// 機能コード
			useInfoMap.put(FUNC_CODE, CHK_CANCEL);
		} 
		// 割引サービス契約から割引コード(ファミリーパック・セキュリティーパック)を取得できていれば(有件)、反映更新の電文を設定
		else if( (WRIB_SVC_CD1.equals(mapWribSvcKei.getString("WRIB_SVC_CD")))
				|| (WRIB_SVC_CD2.equals(mapWribSvcKei.getString("WRIB_SVC_CD"))) )
		{
			// 機能コード
			useInfoMap.put(FUNC_CODE, CHK_ADD);
			// サービス契約番号(引継先契約者情報)
			useInfoMap.put(HIKISAKI_SVC_KEI_NO, inMap.getString(JBSbatKK_T_IDO_RSV.PARAMETER_1));
			// サービス契約番号
			useInfoMap.put(SVC_KEI_NO, mapWribSvcKei.getString("SVC_KEI_NO"));
			// 申込明細番号
			useInfoMap.put(MSKM_DTL_NO, inMap.getString(JBSbatKK_T_IDO_RSV.MSKM_DTL_NO));
			// 割引サービスコード
			useInfoMap.put(WRIB_SVC_CD, mapWribSvcKei.getString("WRIB_SVC_CD"));
			// 割引サービス契約番号
			useInfoMap.put(WRIB_SVC_KEI_NO, WribSvcKeiNo);
			// 割引サービス対象契約番号
			useInfoMap.put(WRIB_SVC_TRGT_KEI_NO, mapWribSvcKei.getString("WRIB_SVC_TRGT_KEI_NO"));
		}
		
		// inputMapにマップをセット
		inputMap.put(TITLE_1, useInfoMap);
		
		// サービスの処理結果が格納されるMAP
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		// サービス呼び出し
		JCCBatchEsbInterface.invokeService(commonItem, paramMap, inputMap, outputMap);
		
		returnCode = JCCBatchEsbInterface.getReturnCode(outputMap);
		
		if (!JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode))
		{
			// エラーログ出力
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
					new String[]{"【パックオプション引継登録適用エラー】リターンコード：" + returnCode + "　入力電文：" + inputMap.toString()});
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
		}
		super.logPrint.printDebugLog("inputMap:" + inputMap.toString());
		super.logPrint.printDebugLog("returnCode:" + returnCode);
		super.logPrint.printDebugLog("execute_END");
		return null;
	}
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/



	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_WRIB_SVC_KEI.close();
		
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * SQLKEY(KK_SELECT_083)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_WRIB_SVC_KEI_KK_SELECT_083(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString()); //1.運用日
		paramList.setValue(param[1].toString()); //2.割引サービス契約番号
		paramList.setValue(param[0].toString()); //3.運用日
		paramList.setValue(param[0].toString()); //4.運用日

		// DBアクセスを実行します
		db_KK_T_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_083);
	}	
}
