/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKEoTVChgeSvcFix
*	ソースファイル名	：JBSbatKKEoTVChgeSvcFix.java
*	作成者				：富士通　
*	作成日				：2012年12月23日
*＜機能概要＞
*　eoテレビ変更サービス確定部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/12/23	FJ)神吉		新規作成（【IT1-2012-0002055】割引登録CC呼出対応）
*	v4.01.00	2013/03/26	FJ)柳		【IT1-2013-0000498】品質強化対策
*	v5.00.00	2013/10/24	FJ)岡田		【OM-2013-0003453】障害対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM282;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.log.JBSbatLogUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKEoTVChgeSvcFix extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** ユースケースID(割引サービス自動適用) */
	private static final String USECASE_ID_WRISVC_AUTO_APLY = "KKSV0679";
	
	/** CCタイトル(割引サービス自動適用) */
	private static final String CC_TITLE_WRISVC_AUTO_APLY = "KKSV067901CC";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// ユースケースIDを格納するMAPを生成します。
		HashMap<String, Object> paramMap0679 = new HashMap<String, Object>();
		paramMap0679.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID_WRISVC_AUTO_APLY);
		
		/** ＳＹＳＩＤ（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String sysId_282 = inMap.getString(JBSbatKKIFM282.SYSID);
		
		/** 登録／変更区分（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String AddChgeDiv_282 = inMap.getString(JBSbatKKIFM282.ADD_CHGE_DIV);
		
		/** 申込番号（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String mskmNo_282 = inMap.getString(JBSbatKKIFM282.MSKM_NO);
		
		/** 申込種別コード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String MskmSbt_282 = inMap.getString(JBSbatKKIFM282.MSKM_SBT_CD);
		
		/** 異動区分（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String idoDiv_282 = inMap.getString(JBSbatKKIFM282.IDO_DIV);
		
		/** サービス解約理由コード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String svcDlreCd_282 = inMap.getString(JBSbatKKIFM282.SVC_DLRE_CD);
		
		/** 対象契約識別コード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String tgKeiSkbtCd_282 = inMap.getString(JBSbatKKIFM282.TG_KEI_SKBT_CD);
		
		/** サービス契約内訳番号（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String svcKeiucwkNo_282 = inMap.getString(JBSbatKKIFM282.SVC_KEI_UCWK_NO);
		
		/** サービス契約内訳ステータス（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String svcKeiUcwkStat_282 = inMap.getString(JBSbatKKIFM282.SVC_KEI_UCWK_STAT);
		
		/** 機器提供サービス契約番号（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String kktkSvcKeiNo_282 = inMap.getString(JBSbatKKIFM282.KKTK_SVC_KEI_NO);
		
		/** 機器提供サービス契約ステータス（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String kktkSvcKeiStat_282 = inMap.getString(JBSbatKKIFM282.KKTK_SVC_KEI_STAT);
		
		/** オプションサービス契約番号（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String opSvcKeiNo_282 = inMap.getString(JBSbatKKIFM282.OP_SVC_KEI_NO);
		
		/** オプションサービス契約ステータス（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String opSvcKeiStat_282 = inMap.getString(JBSbatKKIFM282.OP_SVC_KEI_STAT);
		
		/** 料金コースコード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String pcrsCd_282 = inMap.getString(JBSbatKKIFM282.PCRS_CD);
		
		/** 料金プランコード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String pPlanCd_282 = inMap.getString(JBSbatKKIFM282.PPLAN_CD);
		
		/** オプションサービスコード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String opSvcCd_282 = inMap.getString(JBSbatKKIFM282.OP_SVC_CD);
		
		/** 機器提供サービスコード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String kktkSvcCd_282 = inMap.getString(JBSbatKKIFM282.KKTK_SVC_CD);
		
		/** 機器提供種別コード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String kktkSbtCd_282 = inMap.getString(JBSbatKKIFM282.KKTK_SBT_CD);
		
		/** 変更前料金コースコード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String chgeBfPcrsCd_282 = inMap.getString(JBSbatKKIFM282.CHGE_BF_PCRS_CD);
		
		/** 変更前料金プランコード（ｅｏテレビ変更確定割引サービス情報ファイル） */
		String chgeBfPplanCd_282 = inMap.getString(JBSbatKKIFM282.CHGE_BF_PPLAN_CD);
		
		// サービスに渡す業務データを格納するMAPを生成します。
		HashMap<String, Object> inputMap0679 = new HashMap<String, Object>();
		
		// inputMap0047に設定するデータ用HashMapを生成します。
		HashMap<String, Object> dataMap0679 = new HashMap<String, Object>();
		
		// SYSID
		dataMap0679.put("sysid", sysId_282);
		
		// 登録／変更区分
		dataMap0679.put("add_chge_div", AddChgeDiv_282);
		
		// 申込番号
		dataMap0679.put("mskm_no", mskmNo_282);
		
		// 申込種別コード
		dataMap0679.put("mskm_sbt_cd", MskmSbt_282);
		
		// 異動区分→"00018：eoテレビ変更"
		dataMap0679.put("ido_div", idoDiv_282);
		
		// 機能コード
		dataMap0679.put("func_code", "1");
		
		// サービス解約理由コード
		dataMap0679.put("svc_dlre_cd", svcDlreCd_282);
		
		// サービス契約グループリスト
		ArrayList<Object> svcKeiGrpList = new ArrayList<Object>();
		HashMap<String, Object> svcKeiGrpMap = new HashMap<String, Object>();
		
		// グループ区分
		svcKeiGrpMap.put("grp_div", "00");
		
		// サービス契約リスト
		ArrayList<Object> svcKeiList = new ArrayList<Object>();
		HashMap<String, String> svcKeiMap = new HashMap<String, String>();
		
		// 対象契約識別コード
		svcKeiMap.put("tg_kei_skbt_cd", tgKeiSkbtCd_282);
		
		// サービス契約内訳番号
		svcKeiMap.put("svc_kei_ucwk_no", svcKeiucwkNo_282);
		
		// サービス契約内訳ステータス
		svcKeiMap.put("svc_kei_ucwk_stat", svcKeiUcwkStat_282);
		
		// 機器提供サービス契約番号
		svcKeiMap.put("kktk_svc_kei_no", kktkSvcKeiNo_282);
		
		// 機器提供サービス契約ステータス
		svcKeiMap.put("kktk_svc_kei_stat", kktkSvcKeiStat_282);
		
		// オプションサービス契約番号
		svcKeiMap.put("op_svc_kei_no", opSvcKeiNo_282);
		
		// オプションサービス契約ステータス
		svcKeiMap.put("op_svc_kei_stat", opSvcKeiStat_282);
		
		// 料金コースコード
		svcKeiMap.put("pcrs_cd", pcrsCd_282);
		
		// 料金プランコード
		svcKeiMap.put("pplan_cd", pPlanCd_282);
		
		// オプションサービスコード
		svcKeiMap.put("op_svc_cd", opSvcCd_282);
		
		// 機器提供サービスコード
		svcKeiMap.put("kktk_svc_cd", kktkSvcCd_282);
		
		// 機器提供種別コード
		svcKeiMap.put("kktk_sbt_cd", kktkSbtCd_282);
		
		// 変更前料金コースコード
		svcKeiMap.put("chge_bf_pcrs_cd", chgeBfPcrsCd_282);
		
		// 変更前料金プランコード
		svcKeiMap.put("chge_bf_pplan_cd", chgeBfPplanCd_282);
		
		svcKeiList.add(svcKeiMap);
		
		svcKeiGrpMap.put("svc_kei_list", svcKeiList);
		
		svcKeiGrpList.add(svcKeiGrpMap);
		
		dataMap0679.put("svc_kei_grp_list", svcKeiGrpList);
		
		// ログレベルがデバッグモードの場合
		if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
		{
			super.logPrint.printDebugLog("ＳＹＳＩＤ：" +  sysId_282);
			super.logPrint.printDebugLog("登録／変更区分：" +  AddChgeDiv_282);
			super.logPrint.printDebugLog("申込番号：" +  mskmNo_282);
			super.logPrint.printDebugLog("申込種別コード：" +  MskmSbt_282);
			super.logPrint.printDebugLog("サービス解約理由コード：" +  svcDlreCd_282);
			super.logPrint.printDebugLog("異動区分：" +  idoDiv_282);
			super.logPrint.printDebugLog("対象契約識別コード：" +  tgKeiSkbtCd_282);
			super.logPrint.printDebugLog("サービス契約内訳番号：" +  svcKeiucwkNo_282);
			super.logPrint.printDebugLog("サービス契約内訳ステータス：" +  svcKeiUcwkStat_282);
			super.logPrint.printDebugLog("機器提供サービス契約番号：" +  kktkSvcKeiNo_282);
			super.logPrint.printDebugLog("機器提供サービス契約ステータス：" +  kktkSvcKeiStat_282);
			super.logPrint.printDebugLog("オプションサービス契約番号：" +  opSvcKeiNo_282);
			super.logPrint.printDebugLog("オプションサービス契約ステータス：" +  opSvcKeiStat_282);
			super.logPrint.printDebugLog("料金コースコード：" +  pcrsCd_282);
			super.logPrint.printDebugLog("料金プランコード：" +  pPlanCd_282);
			super.logPrint.printDebugLog("オプションサービスコード：" +  opSvcCd_282);
			super.logPrint.printDebugLog("機器提供サービスコード：" +  kktkSvcCd_282);
			super.logPrint.printDebugLog("機器提供種別コード：" +  kktkSbtCd_282);
			super.logPrint.printDebugLog("変更前料金コースコード：" +  pcrsCd_282);
			super.logPrint.printDebugLog("変更前料金プランコード：" +  pPlanCd_282);
		}
		
		// CCタイトル
		String ccTitleOpn = CC_TITLE_WRISVC_AUTO_APLY;
		
		// inputMap0679にデータ用HashMapをサービスIDをKeyとして設定します。
		inputMap0679.put(ccTitleOpn, dataMap0679);
		
		// サービスの処理結果が格納されるMAPを生成します。
		HashMap<Object, Object> outMap0679 = new HashMap<Object, Object>();
		
		// 割引サービス自動適用部品CCを呼び出します。
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap0679, inputMap0679, outMap0679);
		
		// 部品からのリターンコードを取得します。
		String returnCode = (String)outMap0679.get("RETURN_CODE");
		super.logPrint.printDebugLog("★RETURN_CODE：" + returnCode);
		
		// サービスインターフェースよりエラーが返却された場合
		if(!"0000".equals(returnCode))
		{			

			StringBuffer sb = new StringBuffer();
			sb.append(" SYSID：" +sysId_282);
			sb.append("、登録／変更区分："+AddChgeDiv_282);
			sb.append("、申込番号："+ mskmNo_282);
			sb.append("、申込種別コード："+ MskmSbt_282);
			sb.append("、サービス解約理由コード："+ svcDlreCd_282);

			// 「サービスインターフェイスエラーの場合は、下記のログ出力する。
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
				new String[]{"割引サービス自動適用CCでエラーが発生しました(リターンコード):" + returnCode + sb.toString()});

			//エラーフラグ設定
			super.commonItem.setErrFlg(true);
			
			//出力情報を返却
			return new JBSbatOutputItem() ;
		}
		
		super.logPrint.printDebugLog("execute_END");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
