/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKSmtvlShokaiCC
*   ソースファイル名：JKKSmtvlShokaiCC.java
*   作成者          ：富士通
*   日付            ：2012年07月12日
*＜機能概要＞
*   スマートバリュー情報照会CCです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00.00    2012/07/12   FJ）        新規作成
*   v5.00.00    2013/01/15   FJ）藤本    【ANK-1272-00-00】【スマートバリュー】フォロー対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JPCFomatString;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2451B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2451B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2461B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2461B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0171B010CBSMsg;


/**
 * スマートバリュー情報照会CCです。<p>
 * <br>
 * @author FJ
 */
public class JKKSmtvlShokaiCC extends AbstractCommonComponent
{
	/** 他事業者割引契約一覧照会（サービス契約番号） */
	private static final String EKK2441B003 = "EKK2441B003";

	/** 他事業者割引契約対象契約一覧照会 */
	private static final String EKK2451B001 = "EKK2451B001";

	/** KDDI割引契約異動通知一覧照会 */
	private static final String EKK2461B001 = "EKK2461B001";

	/** コード名称管理一意照会 */
	private static final String EZM0171A010 = "EZM0171A010";

	/** ユーザ定義文字列 */
	private String fixText = null;

	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/** 
	 * 日時書式(yyyyMMddHHmmssSSS)の桁数 
	 */
	private static final int YMDHMSS_LEN = 17;

	/**
	 * スマートバリュー情報照会初期表示の処理を行います。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします。
	 */
	public IRequestParameterReadWrite smtvlShokai(SessionHandle handle,
					IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();
		
		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);
		//引継ぎ情報取得
		work = this.getHktgData(userData);
		
		// 他事業者割引契約一覧照会（サービス契約番号）
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 START
//		this.callEKK2441B003(param, handle, work, resultHash, fixedText);
		this.callEKK2441B003(param, handle, work, resultHash, fixedText, JPCModelConstant.FUNC_CD_1);
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 END

		// 他事業者割引契約一覧照会（サービス契約番号）明細を取得
		CAANMsg[] eKK2441B003CBSMsg1List = (CAANMsg[])resultHash.get(EKK2441B003CBSMsg.EKK2441B003CBSMSG1LIST);

		// 他事業者割引契約が存在する場合
		if (eKK2441B003CBSMsg1List != null && eKK2441B003CBSMsg1List.length > 0)
		{
			HashMap<String, Object> eKK2441B003CBSMsg1 = eKK2441B003CBSMsg1List[0].getMsgData();

			// 検索条件を取得
			// 他事業者割引契約番号
			work.put("tajgs_wrib_kei_no", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_NO));
			// 他事業者通知抑止有無
			work.put("tajgs_tch_yoksi_um", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_TCH_YOKSI_UM));

			// 他事業者割引契約対象契約一覧照会
			this.callEKK2451B001(param, handle, work, resultHash, fixedText);

			// コード名称管理一意照会
			this.callEZM0171A010(param, handle, work, resultHash, fixedText);

			// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 START
			// KDDI割引契約異動通知一覧照会のＫＥＹ＿他事業者割引契約番号を作成する
			// 他事業者割引契約一覧照会（サービス契約番号）※適用終了を含む
			HashMap<String, Object> tmpResultHash= new HashMap<String, Object>();
			this.callEKK2441B003(param, handle, work, tmpResultHash, fixedText, JPCModelConstant.FUNC_CD_3);
			CAANMsg[] tmpEKK2441B003CBSMsg1List = (CAANMsg[])tmpResultHash.get(EKK2441B003CBSMsg.EKK2441B003CBSMSG1LIST);

			// 取得した他事業者割引契約番号をカンマ区切りで連結する
			StringBuilder tajgsWribKeiNoList = new StringBuilder();
			for (int i = 0; i < tmpEKK2441B003CBSMsg1List.length; i++)
			{
				HashMap<String, Object> tmpEKK2441B003CBSMsg1 = tmpEKK2441B003CBSMsg1List[i].getMsgData();
				if (0 < i)
				{
					tajgsWribKeiNoList.append(",");
				}
				tajgsWribKeiNoList.append((String)tmpEKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_NO));
			}

			// 他事業者割引契約番号リスト
			work.put("tajgs_wrib_kei_no_list", tajgsWribKeiNoList.toString());
			// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 END

			// KDDI割引契約異動通知一覧照会
			this.callEKK2461B001(param, handle, work, resultHash, fixedText);
		}

		// 戻りパラメータを設定
		this.editReturnMapInit(userData, resultHash);

		return param;
	}

	/**
	 * 引継ぎデータ取得
	 * @param userData 入力データマップ
	 * @param screenStatus 初期表示処理、登録・再申込処理、更新処理
	 * @return
	 */
	private HashMap<String, Object> getHktgData(Map<String, Object> userData)
	{
		HashMap<String, Object> work = new HashMap<String, Object>();

		// 検索処理パターン
		work.put("search_type", (String)userData.get("search_type"));

		// 最大検索件数
		work.put("max_search_num", (String)userData.get("max_search_num"));

		// 表示件数
		work.put("display_num", (String)userData.get("display_num"));

		// 表示ページ番号
		work.put("display_page_num", (String)userData.get("display_page_num"));
		
		// サービス契約番号
		work.put("svc_kei_no", (String)userData.get("svc_kei_no"));

		// 機能コード
		work.put("func_code", (String)userData.get("func_code"));

		return work;
	}

	// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 START
	/**
	 * EKK2441B003_他事業者割引契約一覧照会（サービス契約番号）SIFを呼び出します。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param work 引継ぎデータ
	 * @param resultHash 他事業者割引契約一覧照会（サービス契約番号）結果格納用
	 * @param fixedText ユーザ任意文字列
	 * @param funcCode 機能コード
	 * @return SIF呼び出し結果のステータス
	 * @throws Throwable 例外時にスローします。
	 */
	private int callEKK2441B003(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
				HashMap<String, Object> resultHash, String fixedText, String funcCode) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);

		// SIF呼び出しパラメータ設定
		template = new CAANMsg(EKK2441B003CBSMsg.class.getName());
		this.mappingEKK2441B003InMsg(template, work, funcCode);
		this.editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, new EKK2441B003CBSMsg().getContents());

		// エラーチェック処理
		errChk(sIFResult);

		// 業務データ取得
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 END

	// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 START
	/**
	 * templateに対してEKK2441B003_他事業者割引契約一覧照会（サービス契約番号）の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 * @param funcCode 機能コード
	 */
	private void mappingEKK2441B003InMsg(CAANMsg template, HashMap<String, Object> work, String funcCode)
	{
		// templateID
		template.set(EKK2441B003CBSMsg.TEMPLATEID, EKK2441B003);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK2441B003CBSMsg.KEY_SVC_KEI_NO, (String)work.get("svc_kei_no"));

		// 機能コード
		template.set(EKK2441B003CBSMsg.FUNC_CODE, funcCode);
	}
	// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 END

	/**
	 * EKK2451B001_他事業者割引契約対象契約一覧照会SIFを呼び出します。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param work 引継ぎデータ
	 * @param resultHash 他事業者割引契約対象契約一覧照会結果格納用
	 * @param fixedText ユーザ任意文字列
	 * @return SIF呼び出し結果のステータス
	 * @throws Throwable 例外時にスローします。
	 */
	private int callEKK2451B001(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
				HashMap<String, Object> resultHash, String fixedText) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);

		// SIF呼び出しパラメータ設定
		template = new CAANMsg(EKK2451B001CBSMsg.class.getName());
		this.mappingEKK2451B001InMsg(template, work);
		this.editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, new EKK2451B001CBSMsg().getContents());

		// エラーチェック処理
		errChk(sIFResult);

		// 業務データ取得
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}

	/**
	 * templateに対してEKK2451B001_他事業者割引契約対象契約一覧照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK2451B001InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// templateID
		template.set(EKK2451B001CBSMsg.TEMPLATEID, EKK2451B001);

		// ＫＥＹ＿他事業者割引契約番号
		template.set(EKK2451B001CBSMsg.KEY_TAJGS_WRIB_KEI_NO, (String)work.get("tajgs_wrib_kei_no"));

		// 機能コード
		template.set(EKK2451B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
	}

	/**
	 * EZM0171A010_コード名称管理一意照会SIFを呼び出します。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param resultHash コード名称管理一意照会結果格納用
	 * @param fixedText ユーザ任意文字列
	 * @return SIF呼び出し結果のステータス
	 * @throws Throwable 例外時にスローします。
	 */
	private int callEZM0171A010(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, String fixedText) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);

		// SIF呼び出しパラメータ設定
		template = new CAANMsg(EZM0171A010CBSMsg.class.getName());
		this.mappingEZM0171A010InMsg(template, work);
		this.editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, new EZM0171B010CBSMsg().getContents());

		// エラーチェック処理
		errChk(sIFResult);

		// 業務データ取得
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}

	/**
	 * templateに対してEZM0171A010_コード名称管理一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEZM0171A010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// templateID
		template.set(EZM0171A010CBSMsg.TEMPLATEID, EZM0171A010);

		// ＫＥＹ＿コード種別コード ← 「他事業者通知抑止有無」
		template.set(EZM0171A010CBSMsg.KEY_CD_SBT_CD, JZM0171Constant.CD01525);

		// ＫＥＹ＿コード区分
		template.set(EZM0171A010CBSMsg.KEY_CD_DIV, (String)work.get("tajgs_tch_yoksi_um"));

		// 機能コード
		template.set(EZM0171A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
	}

	/**
	 * EKK2461B001_KDDI割引契約異動通知一覧照会SIFを呼び出します。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param work 引継ぎデータ
	 * @param resultHash コード名称管理一覧照会結果格納用
	 * @param fixedText ユーザ任意文字列
	 * @return SIF呼び出し結果のステータス
	 * @throws Throwable 例外時にスローします。
	 */
	private int callEKK2461B001(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
				HashMap<String, Object> resultHash, String fixedText) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);

		// SIF呼び出しパラメータ設定
		template = new CAANMsg(EKK2461B001CBSMsg.class.getName());
		this.mappingEKK2461B001InMsg(template, work);
		this.editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, new EKK2461B001CBSMsg().getContents());

		// エラーチェック処理
		errChk(sIFResult);

		// 業務データ取得
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}

	/**
	 * templateに対してEKK2461B001_KDDI割引契約異動通知一覧照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK2461B001InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// templateID
		template.set(EKK2451B001CBSMsg.TEMPLATEID, EKK2461B001);

		// 検索処理パターン
		template.set(EKK2451B001CBSMsg.SEARCH_TYPE, (String)work.get("search_type"));

		// 最大検索件数
		template.set(EKK2451B001CBSMsg.MAX_SEARCH_NUM, (String)work.get("max_search_num"));

		// 表示件数
		template.set(EKK2451B001CBSMsg.DISPLAY_NUM, (String)work.get("display_num"));

		// 表示ページ番号
		template.set(EKK2451B001CBSMsg.DISPLAY_PAGE_NUM, (String)work.get("display_page_num"));

		// ＫＥＹ＿他事業者割引契約番号
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 START
//		template.set(EKK2451B001CBSMsg.KEY_TAJGS_WRIB_KEI_NO, (String)work.get("tajgs_wrib_kei_no"));
		template.set(EKK2451B001CBSMsg.KEY_TAJGS_WRIB_KEI_NO, (String)work.get("tajgs_wrib_kei_no_list"));
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 END

		// 機能コード
		template.set(EKK2451B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
	}

	/**
	 * 初期表示返却用に取得データを編集しセットします。<br>
	 * 
	 * @param userData 戻りパラメータ
	 * @param resultHash SIF結果格納用
	 * @throws Throwable 例外時にスローします。
	 */
	private void editReturnMapInit(Map<String, Object> userData, HashMap<String, Object> resultHash) throws Throwable
	{
		// 他事業者割引契約一覧照会（サービス契約番号）明細
		CAANMsg[] eKK2441B003CBSMsg1List = (CAANMsg[])resultHash.get(EKK2441B003CBSMsg.EKK2441B003CBSMSG1LIST);

		ArrayList<HashMap<String, Object>> tajgsWribKeiList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> tajgsWribKeiMap = new HashMap<String, Object>();

		// KDDIバリューコード
		String kddiValCd = "";

		if (eKK2441B003CBSMsg1List != null && eKK2441B003CBSMsg1List.length > 0)
		{
			HashMap<String, Object> eKK2441B003CBSMsg1 = eKK2441B003CBSMsg1List[0].getMsgData();

			// 他事業者割引契約番号
			tajgsWribKeiMap.put("tajgs_wrib_kei_no", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_NO));

			// 世代登録年月日時分秒
			tajgsWribKeiMap.put("gene_add_dtm", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.GENE_ADD_DTM));

			// 他事業者割引提供事業者コード
			tajgsWribKeiMap.put("tajgs_wrib_tk_jgs_cd", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_TK_JGS_CD));

			// KDDIバリューコード
			kddiValCd = (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.KDDI_VAL_CD);
			tajgsWribKeiMap.put("kddi_val_cd", kddiValCd);

			// KDDI事業者契約管理番号
			tajgsWribKeiMap.put("kddi_jgs_kei_kanri_no", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.KDDI_JGS_KEI_KANRI_NO));

			// 他事業者割引契約申込受付年月日
			tajgsWribKeiMap.put("tajgs_wrib_kei_mkm_uk_ymd", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_MKM_UK_YMD));

			// 他事業者割引契約キャンセル年月日
			tajgsWribKeiMap.put("tajgs_wrib_kei_cncl_ymd", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_CNCL_YMD));

			// 他事業者割引契約締結年月日
			tajgsWribKeiMap.put("tajgs_wrib_kei_cnc_ymd", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_CNC_YMD));

			// 他事業者割引契約解約年月日
			tajgsWribKeiMap.put("tajgs_wrib_kei_dsl_ymd", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_DSL_YMD));

			// 最終更新年月日時分秒
			tajgsWribKeiMap.put("last_upd_dtm", (String)eKK2441B003CBSMsg1.get(EKK2441B003CBSMsg1List.LAST_UPD_DTM));

			// コード名称管理一意照会明細
			CAANMsg[] eZM0171A010CBSMsg1List = (CAANMsg[])resultHash.get(EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST);
			if (null != eZM0171A010CBSMsg1List && 0 < eZM0171A010CBSMsg1List.length)
			{
				HashMap<String, Object> eZM0171A010CBSMsg1 = eZM0171A010CBSMsg1List[0].getMsgData();
				// 他事業者通知抑止有無名称
				tajgsWribKeiMap.put("tajgs_tch_yoksi_um_nm", (String)eZM0171A010CBSMsg1.get(EZM0171A010CBSMsg1List.CD_DIV_NM));
			}

			// 他事業者割引契約対象契約一覧照会明細
			CAANMsg[] eKK2451B001CBSMsg1List = (CAANMsg[])resultHash.get(EKK2451B001CBSMsg.EKK2451B001CBSMSG1LIST);

			if (null != eKK2451B001CBSMsg1List && 0 < eKK2451B001CBSMsg1List.length)
			{
				for (int i = 0; i < eKK2451B001CBSMsg1List.length; i++)
				{
					HashMap<String, Object> eKK2451B001CBSMsg1 = eKK2451B001CBSMsg1List[i].getMsgData();

					// サービスコード取得
					String svcCd = (String)eKK2451B001CBSMsg1.get(EKK2451B001CBSMsg1List.SVC_CD);

					// ネットサービスの場合
					if (JKKStrConst.CD00130_01.equals(svcCd))
					{
						// 解約他事業者通知年月日（ネット）
						tajgsWribKeiMap.put("dsl_tajgs_tch_ymd_net", (String)eKK2451B001CBSMsg1.get(EKK2451B001CBSMsg1List.DSL_TAJGS_TCH_YMD));

						// 料金プラン変更通知年月日
						tajgsWribKeiMap.put("ppchg_tajgs_tch_ymd", (String)eKK2451B001CBSMsg1.get(EKK2451B001CBSMsg1List.PPCHG_TAJGS_TCH_YMD));
					}
					// 電話サービスの場合
					else if (JKKStrConst.CD00130_02.equals(svcCd))
					{
						// 解約他事業者通知年月日（電話）
						tajgsWribKeiMap.put("dsl_tajgs_tch_ymd_tel", (String)eKK2451B001CBSMsg1.get(EKK2451B001CBSMsg1List.DSL_TAJGS_TCH_YMD));
					}
				}
			}

			tajgsWribKeiList.add(tajgsWribKeiMap);
		}

		userData.put("EKK2441B003CBSMsg1List", tajgsWribKeiList);

		// KDDI割引契約異動通知一覧照会
		// 総検索件数
		userData.put("total_search_num", resultHash.get(EKK2461B001CBSMsg.TOTAL_SEARCH_NUM));

		// 総ページ数
		userData.put("total_page_num", resultHash.get(EKK2461B001CBSMsg.TOTAL_PAGE_NUM));

		// 検索エラーフラグ
		userData.put("search_err_flg", resultHash.get(EKK2461B001CBSMsg.SEARCH_ERR_FLG));

		// KDDI割引契約異動通知一覧照会明細
		CAANMsg[] eKK2461B001CBSMsg1List = (CAANMsg[])resultHash.get(EKK2461B001CBSMsg.EKK2461B001CBSMSG1LIST);

		ArrayList<HashMap<String, Object>> kddiWkeiIdtList = new ArrayList<HashMap<String, Object>>();

		if (eKK2461B001CBSMsg1List != null && eKK2461B001CBSMsg1List.length > 0)
		{
			for (int i = 0; i < eKK2461B001CBSMsg1List.length; i++)
			{
				HashMap<String, Object> eKK2461B001CBSMsg1 = eKK2461B001CBSMsg1List[i].getMsgData();
				HashMap<String, Object> kddiWkeiIdtMap = new HashMap<String, Object>();

				// KDDIバリューコード
				// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 START
//				kddiWkeiIdtMap.put("kddi_val_cd", kddiValCd);
				kddiWkeiIdtMap.put("kddi_val_cd", (String)eKK2461B001CBSMsg1.get(EKK2461B001CBSMsg1List.KDDI_VAL_CD));
				// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 END

				// KDDI割引契約異動通知年月日時分秒
				String kddiWkeiIdtDtmYmdhmss = (String)eKK2461B001CBSMsg1.get(EKK2461B001CBSMsg1List.KDDI_WKEI_IDT_DTM);
				String kddiWkeiIdtDtm = kddiWkeiIdtDtmYmdhmss;
				if (null != kddiWkeiIdtDtmYmdhmss && YMDHMSS_LEN == kddiWkeiIdtDtmYmdhmss.length())
				{
					kddiWkeiIdtDtm = JPCFomatString.formatDatetimeSS(kddiWkeiIdtDtmYmdhmss.substring(0, 14));
				}

				kddiWkeiIdtMap.put("kddi_wkei_idt_dtm", kddiWkeiIdtDtm);

				// KDDI割引契約異動通知種別コード名称
				kddiWkeiIdtMap.put("kddi_wkei_idt_sbt_cd_nm", (String)eKK2461B001CBSMsg1.get(EKK2461B001CBSMsg1List.KDDI_WKEI_IDT_SBT_CD_NM));

				// 他事業者割引契約処理コード名称
				kddiWkeiIdtMap.put("tajgs_wrib_kei_tran_cd_nm", (String)eKK2461B001CBSMsg1.get(EKK2461B001CBSMsg1List.TAJGS_WRIB_KEI_TRAN_CD_NM));

				// KDDI割引契約異動通知結果コード名称
				kddiWkeiIdtMap.put("kddi_wkei_idt_rslt_cd_nm", (String)eKK2461B001CBSMsg1.get(EKK2461B001CBSMsg1List.KDDI_WKEI_IDT_RSLT_CD_NM));

				// KDDI割引契約異動通知エラーコード名称
				kddiWkeiIdtMap.put("kddi_wkei_idt_err_cd_nm", (String)eKK2461B001CBSMsg1.get(EKK2461B001CBSMsg1List.KDDI_WKEI_IDT_ERR_CD_NM));

				kddiWkeiIdtList.add(kddiWkeiIdtMap);
			}
		}

		userData.put("EKK2461B001CBSMsg1List", kddiWkeiIdtList);
	}

	/**
	 * 条件部の共通する項目の設定
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	public void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
	}

	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		//電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		
		//ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		
		//オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		
		//サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		//依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		
		//依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		
		//依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		
		//オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
				
		return paramMap;
		
	}

	/**
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param contents サービスインターフェースのテンプレート項目の配列
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editResultRP(Map<?, ?> msgList, IRequestParameterReadWrite param, Object[][] contents)
			throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixText);

		for (int i = 0; contents != null && i < contents.length; i++)
		{
			String element = null;
			element = (String)contents[i][0];
			if (element.indexOf("_err") > 0)
			{
				if (!template.isNull(element))
				{
					if (!inMap.containsKey(element))
					{
						inMap.put(element, template.getString(element));
					}
				}
			}
		}

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}


	/**
	 * エラーチェック処理です。 <br>
	 * 
	 * @param msgList サービスインタフェース実行結果
	 * @return void
	 * @throws SCCallException
	 */
	private void errChk(Map<?, ?> msgList) throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}

	/**
	 * 業務データの取得処理です。
	 * 
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private HashMap<String, Object> getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate.getMsgData();
	}
}
