/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKIcjknCC
*	ソースファイル名：JKKIcjknCC.java
*	作成者			：富士通
*	日付			：2012年06月15日
*＜機能概要＞
*	一時金登録/変更操作CCクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00		2012/06/15	FJ)今西		新規作成
*	v3.01		2012/07/12	FJ)砂川		【ST2-2012-0001368】事務手数料判定結果取得S-IFの異動区分に"TDIS情報登録"を設定する対応
*	v3.02		2012/08/29	FJ)藤原		【ST2-2012-0001593】S-I/F項目の完了状態コード追加に伴い、マッピング追加
*	v4.00		2012/09/19	FJ)藤原		【TAI-2012-0000093】電話帳掲載登録画面について最大3つの掲載内容を登録可とする
*	v4.05		2013/01/08	FJ)泉		【TAI-2012-0000101】単項目関連チェックの「対象選択チェック」に関する処理を追加
*	v5.00		2013/01/24	FJ)藤原		【ANK-1306-00-00】	一時金変更、論理削除の処理を削除
*	v5.01		2013/09/25	FJ)藤原		【OM-2013-0002371】一時金登録時に過去の一時金データを取り消しする対応
*	v7.00		2014/02/10	FJ)鈴木		【OM-2014-0000251】OM-2013-0002371 の対応を削除する。
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.KKSV0058_KKSV0058OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0058_KKSV0058OP_IcjknCC;
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.bpm.reqchk.exception.ReqChkException;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
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.ejb.cbs.cbsmsg.EKK1021B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1021B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1021C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1021C011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1021C011CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1021D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1051B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1051B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1051C020CBSMsg;

/**
 * 一時金登録/変更操作CCクラス
 * @author 富士通
 */
@SuppressWarnings({"unchecked"})
public class JKKIcjknCC extends AbstractCommonComponent
{
	/** ----- リクエスト・レスポンス パラメータ ----- **/
	/** 根元の要素 **/
	private static final String ICJKNCC = KKSV0058_KKSV0058OP.ICJKNCC;			// "IcjknCC";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = KKSV0058_KKSV0058OP_IcjknCC.SVC_KEI_NO;	// "svc_kei_no";
	/** 電話帳掲載区分 */
	private static final String DNWACHO_KEISAI_DIV = KKSV0058_KKSV0058OP_IcjknCC.DNWACHO_KEISAI_DIV;		// "dnwacho_keisai_div";
	/** 事務手数料選択チェック */
	private static final String ICHIJIKIN_CHK = KKSV0058_KKSV0058OP_IcjknCC.ICHIJIKIN_CHK;		// "ichijikin_chk";
	/** 事務手数料選択区分 */
	private static final String ICHIJIKIN_DIV = KKSV0058_KKSV0058OP_IcjknCC.ICHIJIKIN_DIV;		// "ichijikin_div";
	/** 一時金指定額 */
	private static final String ICHIJKN_SHITEI_AMNT = KKSV0058_KKSV0058OP_IcjknCC.ICHIJKN_SHITEI_AMNT;		// "ichijkn_shitei_amnt";
	/** サービス契約内訳番号 */
	private static final String SVC_KEI_UCWK_NO = KKSV0058_KKSV0058OP_IcjknCC.SVC_KEI_UCWK_NO;		// "svc_kei_ucwk_no";
	/** サービス契約ステータス */
	private static final String SVC_KEI_STAT = KKSV0058_KKSV0058OP_IcjknCC.SVC_KEI_STAT;
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";
	
	/** ----- スキーマID定数 ----- **/
	/** 事務手数料判定結果取得 **/
	private static final String TEMPLATE_ID_EKK1021C011 = "EKK1021C011";
	/** 一時金設定登録 **/
	private static final String TEMPLATE_ID_EKK1021D010 = "EKK1021D010";
// 2014.02.10 OM-2014-0000251 DEL start
//	// 2013/9/23 OM-2013-0002371 Add Start
//	/** 一時金設定一覧照会(サービス契約番号） **/
//	private static final String TEMPLATE_ID_EKK1021B004 = "EKK1021B004";
//	/** 一時金設定変更 **/
//	private static final String TEMPLATE_ID_EKK1021C010 = "EKK1021C010";
//	/** 未取消契約一時金一覧照会 **/
//	private static final String TEMPLATE_ID_EKK1051B001 = "EKK1051B001";
//	/** 契約一時金取消 **/
//	private static final String TEMPLATE_ID_EKK1051C020 = "EKK1051C020";
//	// 2013/9/23 OM-2013-0002371 Add End
// 2014.02.10 OM-2014-0000251 DEL end
	
// 2013/01/24 ANK-1306-00-00 add start
	/** サービス契約ステータス「受付済」 */
	private static final String SVC_KEI_STAT_UK_ZM = "010";
	
	/** 掲載手数料識別コード「無」 */
	private static final String KEISAI_CMS_SKBT_CD_MU = "1";
	
	/** 掲載手数料識別コード「有」 */
	private static final String KEISAI_CMS_SKBT_CD_YU = "2";
	
	/** 掲載手数料識別コード「指定額」 */
	private static final String KEISAI_CMS_SKBT_CD_STIAM = "3";
// 2013/01/24 ANK-1306-00-00 add end
	
	/** 掲載手数料コード区分（一時金設定コード）「指定額」 */
	private static final String KEISAI_COMMISION_CD_AMNT = "04";
	
	/** 移動区分：光電話・TDIS情報登録 */
	private static final String IDO_DIV_00047 = "00047";
	
// 2012/08/29 ST2-2012-0001593 add start
	/** 一時金設定完了状態コード：未完了 */
	private static final String FIN_STAT_CD_MI = "0";
// 2012/08/29 ST2-2012-0001593 add end
	
// 2013/01/08 TAI-2012-0000101 add start
	/** 電話帳掲載区分：タウンページ */
	private static final String DNWACHO_KEISAI_DIV_TOWNPAGE = "2";
	
	/** 電話帳掲載区分：重複掲載 */
	private static final String DNWACHO_KEISAI_DIV_DBLE = "4"; 
	
	/** エラーフラグ：0(メッセージ表示なし) */
	private static final String ERR_FLG_MU = "0"; 
	
	/** エラーフラグ：1(タウン手数料メッセージ表示) */
	private static final String ERR_FLG_TOWNPAGE = "1";
	
	/** エラーフラグ：2(重複掲載手数料メッセージ表示) */
	private static final String ERR_FLG_DBLE = "2";
// 2013/01/08 TAI-2012-0000101 add start
// 2014.02.10 OM-2014-0000251 DEL start
//	// 2013/9/25 OM-2013-0002371 Add Start
//	/** 一時金設定_完了状態コード：未完了 */
//	private static final String FIN_STAT_CD_MI_FIN = "0";
//	/** 一時金設定_完了状態コード：完了 */
//	private static final String FIN_STAT_CD_FIN = "1";
//	/** 一時金設定_完了状態コード：対象外 */
//	private static final String FIN_STAT_CD_OUT = "2";
//	/** 取消連携状態コード：取消済 */
//	private static final String CL_RENKEI_STAT_CD_CLZM = "1";
//	/** 一時支払料金番号 タウンページ掲載手数料（１） */
//	private static final String TMP_PAY_PRC_NO_TOWN_PAGE_1 = "010450076010";
//	/** 一時支払料金番号 タウンページ掲載手数料（２） */
//	private static final String TMP_PAY_PRC_NO_TOWN_PAGE_2 = "010450186010";
//	/** 一時支払料金番号 タウンページ掲載手数料（３） */
//	private static final String TMP_PAY_PRC_NO_TOWN_PAGE_3 = "010450196010";
//	// 2013/9/25 OM-2013-0002371 Add End
// 2014.02.10 OM-2014-0000251 DEL end
	
	/********** クラス変数 ***********/
	
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	/**
	 * メインメソッド（大元の呼び出し先）
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite chkIcjkn(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText) throws Throwable
	{
		int statusCode = 0;
		
		HashMap<String, Object> paramHash;
		
		// (1) リクエストパラメータ情報取得
		paramHash = analyzeRequestParam(param);
		
		//メイン処理の実行
		statusCode = mainProc(
				handle,
				param,
				paramHash,
				fixedText);
		
		if(statusCode != 0)
		{
			throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));
		}
		
		//リターンコードの設定
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, String.valueOf(statusCode));
		
		//リターンパラメータ情報取得
		returnSetParam(param, paramHash);
		
		//処理終了
		return param;
	}
	
	/**
	 * リクエストパラメータの取得
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return リクエストパラメータのHash
	 * @throws RequestParameterException 例外時にスローされます
	 */
	private HashMap<String, Object> analyzeRequestParam(IRequestParameterReadWrite param)
			throws RequestParameterException
	{
		HashMap<String, Object> paramData = null;
		HashMap<String, Object> rootData = null;
		
		paramData = new HashMap<String, Object>();
		
		//--データの受け取り
		//まずは根元の要素を取得
		rootData = (HashMap<String, Object>)param.getData(ICJKNCC);
		
		paramData.put(JCMConstants.FUNC_CODE_KEY, rootData.get(JCMConstants.FUNC_CODE_KEY));
		// 電話帳掲載区分
		paramData.put(DNWACHO_KEISAI_DIV, rootData.get(DNWACHO_KEISAI_DIV));
		// 事務手数料選択チェック
		paramData.put(ICHIJIKIN_CHK, rootData.get(ICHIJIKIN_CHK));
		// 事務手数料選択区分
		paramData.put(ICHIJIKIN_DIV, rootData.get(ICHIJIKIN_DIV));
		// 一時金指定額
		paramData.put(ICHIJKN_SHITEI_AMNT, rootData.get(ICHIJKN_SHITEI_AMNT));
		// サービス契約番号
		paramData.put(SVC_KEI_NO, rootData.get(SVC_KEI_NO));
		// サービス契約内訳番号
		paramData.put(SVC_KEI_UCWK_NO, rootData.get(SVC_KEI_UCWK_NO));
// 2013/01/24 ANK-1306-00-00 add start
		// サービス契約ステータス
		paramData.put(SVC_KEI_STAT, rootData.get(SVC_KEI_STAT));
// 2013/01/24 ANK-1306-00-00 add end
		
		return paramData;
	}
	
	/**
	 * リターンパラメータをセットする
	 * 
	 * @param param
	 * @param paramHash
	 * @throws RequestParameterException
	 */
	private void returnSetParam(IRequestParameterReadWrite param, HashMap<String, Object> paramHash)
			throws RequestParameterException
	{
	}
	
	/**
	 * メイン処理
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param requestParam リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return SIF呼び出し時のリターンコード
	 * @throws Throwable
	 */
	public int mainProc(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> requestParam,
			String fixedText) throws Throwable
	{
		// TAI-2012-0000101 2013/01/05 ADD START
		// (2) エラーチェック処理
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(ICJKNCC);
		String err_flg = chkErr(inMap);
		inMap.put("err_flg", err_flg);
		// TAI-2012-0000101 2013/01/05 ADD END
		
		HashMap<String, Object> resultHash = new HashMap<String, Object>();
		int statusCode = 0;

// 2014.02.10 OM-2014-0000251 DEL start
//		// 2013/9/23 OM-2013-0002371 Add Start
//		// 一時金設定一覧照会(サービス契約番号）
//		statusCode = callEKK1021B004SC(param, handle, requestParam, resultHash);
//		if(statusCode != 0)
//		{
//			return statusCode;
//		}
//		// 一時金設定変更
//		HashMap ekk1021b004ParentMap = null;
//		ArrayList ekk1021b004List = null;
//		HashMap ekk1021b004Map = null;
//		String icjknSetteNo = null;			// 一時金設定番号
//		String finStatCd = null;			// 完了状態コード
//		ArrayList setteFinZmNoList = null;	// 設定完了済番号リスト
//		
//		if(null != resultHash && null != resultHash.get(TEMPLATE_ID_EKK1021B004))
//		{
//			ekk1021b004ParentMap = (HashMap)resultHash.get(TEMPLATE_ID_EKK1021B004);
//			
//			if(null != ekk1021b004ParentMap && null != ekk1021b004ParentMap.get("EKK1021B004CBSMsg1List"))
//			{
//				ekk1021b004List = (ArrayList)ekk1021b004ParentMap.get("EKK1021B004CBSMsg1List");
//				
//				for(int i = 0; i < ekk1021b004List.size(); i++)
//				{
//					ekk1021b004Map = (HashMap)ekk1021b004List.get(i);
//					
//					if(isNullBlank(ekk1021b004Map, "fin_stat_cd"))
//					{
//						finStatCd = (String)ekk1021b004Map.get("fin_stat_cd");
//						
//						// 完了状態コードが「完了」の場合、設定完了済番号リストに一時金設定番号を格納
//						if(FIN_STAT_CD_FIN.equals(finStatCd))
//						{
//							// 一時金設定番号を取り出す
//							icjknSetteNo = (String)ekk1021b004Map.get("icjkn_sette_no");
//							
//							if(null == setteFinZmNoList)
//							{
//								// 設定完了済番号リストを初期化
//								setteFinZmNoList = new ArrayList();
//							}
//							// 設定完了済番号リストに一時金設定番号を格納
//							setteFinZmNoList.add(icjknSetteNo);
//						}
//						// 完了状態コードが「未完了」の場合、一時金設定変更S-IFで完了状態コードを「対象外」に更新する。
//						else if(FIN_STAT_CD_MI_FIN.equals(finStatCd))
//						{
//							// 一時金設定変更
//							statusCode = callEKK1021C010SC(param, handle, requestParam, ekk1021b004Map, resultHash);
//							if(statusCode != 0)
//							{
//								return statusCode;
//							}
//						}
//					}
//				}
//			}
//		}
//		
//		// 未取消契約一時金一覧照会
//		if(null != setteFinZmNoList && setteFinZmNoList.size() > 0)
//		{
//			// 設定完了済番号リストに格納されている一時金設定番号の数だけ繰り返す
//			for(int i = 0; i < setteFinZmNoList.size(); i++)
//			{
//				icjknSetteNo = (String)setteFinZmNoList.get(i);
//				
//				statusCode = callEKK1051B001SC(param, handle, icjknSetteNo, resultHash);
//				if(statusCode != 0)
//				{
//					return statusCode;
//				}
//				
//				// 契約一時金取消
//				HashMap ekk1051b001ParentMap = null;
//				ArrayList ekk1051b001List = null;
//				HashMap ekk1051b001Map = null;
//				
//				if(null != resultHash && null != resultHash.get(TEMPLATE_ID_EKK1051B001))
//				{
//					ekk1051b001ParentMap = (HashMap)resultHash.get(TEMPLATE_ID_EKK1051B001);
//					
//					if(null != ekk1051b001ParentMap && null != ekk1051b001ParentMap.get("EKK1051B001CBSMsg1List"))
//					{
//						ekk1051b001List = (ArrayList)ekk1051b001ParentMap.get("EKK1051B001CBSMsg1List");
//						
//						for(int j = 0; j < ekk1051b001List.size(); j++)
//						{
//							ekk1051b001Map = (HashMap)ekk1051b001List.get(j);
//							
//							// 取消連携状態コードがNULLの時に契約一時金取消を実施する
//							if(!(isNullBlank(ekk1051b001Map, "cl_renkei_stat_cd")))
//							{
//								statusCode = callEKK1051C020SC(param, handle, requestParam, ekk1051b001Map, resultHash);
//								if(statusCode != 0)
//								{
//									return statusCode;
//								}
//							}
//						}
//					}
//				}
//			}
//		}
//		
//		// 2013/9/23 OM-2013-0002371 Add End
// 2014.02.10 OM-2014-0000251 DEL end
		
// 2013/01/24 ANK-1306-00-00 add start
		// 掲載手数料識別コード
		String keisai_cms_skbt_cd = (String)inMap.get(ICHIJIKIN_DIV);
		// 掲載手数料が無の場合
		if(null == keisai_cms_skbt_cd ||
				"".equals(keisai_cms_skbt_cd) ||
				KEISAI_CMS_SKBT_CD_MU.equals(keisai_cms_skbt_cd))
		{
			// 処理を終了する
			return statusCode;
		}
// 2013/01/24 ANK-1306-00-00 add end
		
		statusCode = callEKK1021C011SC(param, handle, requestParam, resultHash);
		if(statusCode != 0)
		{
			return statusCode;
		}
		
		// 一時金設定登録
		statusCode = exeIcjknTran(handle, param, requestParam, resultHash);
		
		return statusCode;
	}
	
// 2014.02.10 OM-2014-0000251 DEL start
//	// 2013/9/23 OM-2013-0002371 Add Start
//	/**
//	 * 一時金設定一覧照会(サービス契約番号）取得S-IFを呼び出し
//	 * @param param リクエストパラメータ
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param resultHash 結果のハッシュ
//	 * @return サービスインターフェースのリターンコード
//	 * @throws Throwable 例外時にスローされます
//	 */
//	private int callEKK1021B004SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash)
//			throws Throwable
//	{
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//		
//		// サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		// EKK1021B004への呼び出しパラメータ設定
//		template = new CAANMsg(EKK1021B004CBSMsg.class.getName());
//		mappingEKK1021B004InMsg(template, inHash);
//		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, ICJKNCC);
//		// エラーチェック処理
//		errChk(sIFResult);
//		
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//		
//			resultHash.put(
//					TEMPLATE_ID_EKK1021B004,
//					mappingEKK1021B004SCOutMsg(resultMsgs));
//		}
//		
//		return status;
//	}
//	
//	/**
//	 * templateに対してEKK1021B004の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param requestParam アプリ固有のパラメータ
//	 */
//	private void mappingEKK1021B004InMsg(CAANMsg template, HashMap<String, Object> inHash)
//	{
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK1021B004CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(EKK1021B004CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1021B004);
//		
//		//機能コード
//		template.set(EKK1021B004CBSMsg.FUNC_CODE, "2");
//		
//		template.set(EKK1021B004CBSMsg.KEY_SVC_KEI_UCWK_NO, inHash.get(SVC_KEI_UCWK_NO));
//		
//	}
//	
//	/**
//	 * EKK1021B004の結果をHashとして抽出する
//	 * @param resultMsgs EKK1021B004のテンプレートリスト
//	 * @return EKK1021B004の結果部分
//	 */
//	private HashMap<String, Object> mappingEKK1021B004SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		CAANMsg parentTemplate = resultMsgs[0];
//		CAANMsg[] templateArray = null;
//		
//		// 結果を詰めるマップを取得。
//		HashMap dataMap = new HashMap();
//		ArrayList dataList = null;
//		
//		templateArray = parentTemplate.getCAANMsgList(EKK1021B004CBSMsg.EKK1021B004CBSMSG1LIST);
//		dataList = (ArrayList)dataMap.get("EKK1021B004CBSMsg1List");
//		
//		if (dataList == null) 
//		{
//			dataList = new ArrayList();
//		}
//		
//		if (templateArray != null) 
//		{
//			HashMap childMap = null;;
//			
//			for (int i = 0; i < templateArray.length; i++) 
//			{
//				CAANMsg childTemplate = templateArray[i];
//				childMap = new HashMap();
//				
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.TMP_PAY_PRC_NO))
//				{
//					continue;
//				}
//				else
//				{
//					String tmpPayPrcNo = childTemplate.getString(EKK1021B004CBSMsg1List.TMP_PAY_PRC_NO);
//					
//					// 一時支払料金番号がタウンページ掲載手数料のもののみを選択
//					if("".equals(tmpPayPrcNo) || 
//							!(TMP_PAY_PRC_NO_TOWN_PAGE_1.equals(tmpPayPrcNo) 
//									|| TMP_PAY_PRC_NO_TOWN_PAGE_2.equals(tmpPayPrcNo) 
//									|| TMP_PAY_PRC_NO_TOWN_PAGE_3.equals(tmpPayPrcNo)))
//					{
//						continue;
//					}
//				}
//				
//				// 一時金設定一覧照会明細.一時金設定番号
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.ICJKN_SETTE_NO)) 
//				{
//					childMap.put("icjkn_sette_no", "");
//				} 
//				else 
//				{
//					childMap.put("icjkn_sette_no", childTemplate.getString(EKK1021B004CBSMsg1List.ICJKN_SETTE_NO));
//				}
//				// 一時金設定一覧照会明細.一時支払料金番号
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.TMP_PAY_PRC_NO)) 
//				{
//					childMap.put("tmp_pay_prc_no", "");
//				} 
//				else 
//				{
//					childMap.put("tmp_pay_prc_no", childTemplate.getString(EKK1021B004CBSMsg1List.TMP_PAY_PRC_NO));
//				}
//				// 一時金設定一覧照会明細.一時金設定コード
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.ICJKN_SETTE_CD)) 
//				{
//					childMap.put("icjkn_sette_cd", "");
//				} 
//				else 
//				{
//					childMap.put("icjkn_sette_cd", childTemplate.getString(EKK1021B004CBSMsg1List.ICJKN_SETTE_CD));
//				}
//				// 一時金設定一覧照会明細.一時金指定率
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.ICJKN_SHITEI_RT)) 
//				{
//					childMap.put("icjkn_shitei_rt", "");
//				} 
//				else 
//				{
//					childMap.put("icjkn_shitei_rt", childTemplate.getString(EKK1021B004CBSMsg1List.ICJKN_SHITEI_RT));
//				}
//				// 一時金設定一覧照会明細.一時金指定額
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.ICJKN_SHITEI_AMNT)) 
//				{
//					childMap.put("icjkn_shitei_amnt", "");
//				} 
//				else 
//				{
//					childMap.put("icjkn_shitei_amnt", childTemplate.getString(EKK1021B004CBSMsg1List.ICJKN_SHITEI_AMNT));
//				}
//				// 一時金設定一覧照会明細.完了状態コード
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.FIN_STAT_CD)) 
//				{
//					childMap.put("fin_stat_cd", "");
//				} 
//				else 
//				{
//					childMap.put("fin_stat_cd", childTemplate.getString(EKK1021B004CBSMsg1List.FIN_STAT_CD));
//				}
//				// 一時金設定一覧照会明細.更新年月日時分秒
//				if (childTemplate.isNull(EKK1021B004CBSMsg1List.UPD_DTM)) 
//				{
//					childMap.put("upd_dtm", "");
//				} 
//				else 
//				{
//					childMap.put("upd_dtm", childTemplate.getString(EKK1021B004CBSMsg1List.UPD_DTM));
//				}
//				
//				dataList.add(childMap);
//			}
//			dataMap.put("EKK1021B004CBSMsg1List",dataList);
//		}
//		
//		return dataMap;
//	}
//	
//	/**
//	 * 一時金設定変更取得S-IFを呼び出し
//	 * @param param リクエストパラメータ
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param resultHash 結果のハッシュ
//	 * @return サービスインターフェースのリターンコード
//	 * @throws Throwable 例外時にスローされます
//	 */
//	private int callEKK1021C010SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			HashMap<String, Object> requestParam,
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash)
//			throws Throwable
//	{
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//		
//		// サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		// EKK1021C010への呼び出しパラメータ設定
//		template = new CAANMsg(EKK1021C010CBSMsg.class.getName());
//		mappingEKK1021C010InMsg(template, requestParam, inHash);
//		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, ICJKNCC);
//		// エラーチェック処理
//		errChk(sIFResult);
//		
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//		
//			resultHash.put(
//					TEMPLATE_ID_EKK1021C010,
//					mappingEKK1021C010SCOutMsg(resultMsgs));
//		}
//		
//		return status;
//	}
//	
//	/**
//	 * templateに対してEKK1021C010の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param requestParam アプリ固有のパラメータ
//	 * @throws SCCallException 
//	 */
//	private void mappingEKK1021C010InMsg(CAANMsg template, HashMap<String, Object> requestParam, 
//			HashMap<String, Object> inHash) throws SCCallException
//	{
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK1021C010CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(EKK1021C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1021C010);
//		
//		//機能コード
//		template.set(EKK1021D010CBSMsg.FUNC_CODE, requestParam.get(FUNC_CODE));
//		
//		// 一時金設定番号
//		if(isNullBlank(inHash, "icjkn_sette_no"))
//		{
//			template.set(EKK1021C010CBSMsg.ICJKN_SETTE_NO, inHash.get("icjkn_sette_no"));
//		}
//		// 一時支払料金番号
//		if(isNullBlank(inHash, "tmp_pay_prc_no"))
//		{
//			template.set(EKK1021C010CBSMsg.TMP_PAY_PRC_NO, inHash.get("tmp_pay_prc_no"));
//		}
//		// 一時金設定コード
//		if(isNullBlank(inHash, "icjkn_sette_cd"))
//		{
//			template.set(EKK1021C010CBSMsg.ICJKN_SETTE_CD, inHash.get("icjkn_sette_cd"));
//		}
//		// 一時金指定率
//		if(isNullBlank(inHash, "icjkn_shitei_rt"))
//		{
//			template.set(EKK1021C010CBSMsg.ICJKN_SHITEI_RT, inHash.get("icjkn_shitei_rt"));
//		}
//		// 一時金指定額
//		if(isNullBlank(inHash, "icjkn_shitei_amnt"))
//		{
//			template.set(EKK1021C010CBSMsg.ICJKN_SHITEI_AMNT, inHash.get("icjkn_shitei_amnt"));
//		}
//		// 完了状態コード → 対象外
//		template.set(EKK1021C010CBSMsg.FIN_STAT_CD, FIN_STAT_CD_OUT);
//		// 更新年月日時分秒(更新前)
//		if(isNullBlank(inHash, "upd_dtm"))
//		{
//			template.set(EKK1021C010CBSMsg.UPD_DTM_BF, inHash.get("upd_dtm"));
//		}
//	}
//	
//	/**
//	 * EKK1021C010の結果をHashとして抽出する
//	 * @param resultMsgs EKK1021C010のテンプレートリスト
//	 * @return EKK1021C010の結果部分
//	 */
//	private HashMap<String, Object> mappingEKK1021C010SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		CAANMsg parentTemplate = resultMsgs[0];
//		CAANMsg[] templateArray = null;
//		
//		// 結果を詰めるマップを取得。
//		HashMap dataMap = new HashMap();
//		
//		if (templateArray != null) 
//		{
//			// 一時金設定変更明細.更新年月日時分秒
//			if (parentTemplate.isNull(EKK1021D010CBSMsg.UPD_DTM)) 
//			{
//				dataMap.put("upd_dtm", "");
//			} 
//			else 
//			{
//				dataMap.put("upd_dtm", parentTemplate.getString(EKK1021D010CBSMsg.UPD_DTM));
//			}
//		}
//		
//		return dataMap;
//	}
//	
//	/**
//	 * 未取消契約一時金一覧照会取得S-IFを呼び出し
//	 * @param param リクエストパラメータ
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param resultHash 結果のハッシュ
//	 * @return サービスインターフェースのリターンコード
//	 * @throws Throwable 例外時にスローされます
//	 */
//	private int callEKK1051B001SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			String icjknSetteNo,
//			HashMap<String, Object> resultHash)
//			throws Throwable
//	{
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//		
//		// サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		// EKK1051B001への呼び出しパラメータ設定
//		template = new CAANMsg(EKK1051B001CBSMsg.class.getName());
//		mappingEKK1051B001InMsg(template, icjknSetteNo);
//		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, ICJKNCC);
//		// エラーチェック処理
//		errChk(sIFResult);
//		
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//		
//			resultHash.put(
//					TEMPLATE_ID_EKK1051B001,
//					mappingEKK1051B001SCOutMsg(resultMsgs));
//		}
//		
//		return status;
//	}
//	
//	/**
//	 * templateに対してEKK1051B001の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param requestParam アプリ固有のパラメータ
//	 */
//	private void mappingEKK1051B001InMsg(CAANMsg template, String icjknSetteNo)
//	{
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK1051B001CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(EKK1051B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1051B001);
//		
//		//機能コード
//		template.set(EKK1051B001CBSMsg.FUNC_CODE, "1");
//		
//		template.set(EKK1051B001CBSMsg.KEY_ICJKN_SETTE_NO, icjknSetteNo);
//		
//	}
//	
//	/**
//	 * EKK1051B001の結果をHashとして抽出する
//	 * @param resultMsgs EKK1051B001のテンプレートリスト
//	 * @return EKK1051B001の結果部分
//	 */
//	private HashMap<String, Object> mappingEKK1051B001SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		CAANMsg parentTemplate = resultMsgs[0];
//		CAANMsg[] templateArray = null;
//		
//		// 結果を詰めるマップを取得。
//		HashMap dataMap = new HashMap();
//		ArrayList dataList = null;
//		
//		templateArray = parentTemplate.getCAANMsgList(EKK1051B001CBSMsg.EKK1051B001CBSMSG1LIST);
//		dataList = (ArrayList)dataMap.get("EKK1051B001CBSMsg1List");
//		
//		if (dataList == null) 
//		{
//			dataList = new ArrayList();
//		}
//		
//		if (templateArray != null) 
//		{
//			HashMap childMap = null;;
//			
//			for (int i = 0; i < templateArray.length; i++) 
//			{
//				CAANMsg childTemplate = templateArray[i];
//				childMap = new HashMap();
//				
//				// 未取消契約一時金一覧照会明細.契約一時金番号
//				if (childTemplate.isNull(EKK1051B001CBSMsg1List.KICJKN_NO)) 
//				{
//					childMap.put("kicjkn_no", "");
//				} 
//				else 
//				{
//					childMap.put("kicjkn_no", childTemplate.getString(EKK1051B001CBSMsg1List.KICJKN_NO));
//				}
//				// 未取消契約一時金一覧照会明細.取消連携状態コード
//				if (childTemplate.isNull(EKK1051B001CBSMsg1List.CL_RENKEI_STAT_CD)) 
//				{
//					childMap.put("cl_renkei_stat_cd", "");
//				} 
//				else 
//				{
//					childMap.put("cl_renkei_stat_cd", childTemplate.getString(EKK1051B001CBSMsg1List.CL_RENKEI_STAT_CD));
//				}
//				// 未取消契約一時金一覧照会明細.更新年月日時分秒
//				if (childTemplate.isNull(EKK1051B001CBSMsg1List.UPD_DTM)) 
//				{
//					childMap.put("upd_dtm", "");
//				} 
//				else 
//				{
//					childMap.put("upd_dtm", childTemplate.getString(EKK1051B001CBSMsg1List.UPD_DTM));
//				}
//				
//				dataList.add(childMap);
//			}
//			dataMap.put("EKK1051B001CBSMsg1List",dataList);
//		}
//		
//		return dataMap;
//	}
//	
//	/**
//	 * 契約一時金取消取得S-IFを呼び出し
//	 * @param param リクエストパラメータ
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param resultHash 結果のハッシュ
//	 * @return サービスインターフェースのリターンコード
//	 * @throws Throwable 例外時にスローされます
//	 */
//	private int callEKK1051C020SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			HashMap<String, Object> requestParam,
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash)
//			throws Throwable
//	{
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//		
//		// サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		// EKK1051C020への呼び出しパラメータ設定
//		template = new CAANMsg(EKK1051C020CBSMsg.class.getName());
//		mappingEKK1051C020InMsg(template, requestParam, inHash);
//		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, ICJKNCC);
//		// エラーチェック処理
//		errChk(sIFResult);
//		
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//		
//			resultHash.put(
//					TEMPLATE_ID_EKK1051C020,
//					mappingEKK1051C020SCOutMsg(resultMsgs));
//		}
//		
//		return status;
//	}
//	
//	/**
//	 * templateに対してEKK1051C020の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param requestParam アプリ固有のパラメータ
//	 * @throws SCCallException 
//	 */
//	private void mappingEKK1051C020InMsg(CAANMsg template, HashMap<String, Object> requestParam, 
//			HashMap<String, Object> inHash) throws SCCallException
//	{
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK1051C020CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(EKK1051C020CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1051C020);
//		
//		//機能コード
//		template.set(EKK1021D010CBSMsg.FUNC_CODE, requestParam.get(FUNC_CODE));
//		
//		// 一時支払料金番号
//		if(isNullBlank(inHash, "kicjkn_no"))
//		{
//			template.set(EKK1051C020CBSMsg.KICJKN_NO, inHash.get("kicjkn_no"));
//		}
//		// 取消連携状態コード → 取消済
//		template.set(EKK1051C020CBSMsg.CL_RENKEI_STAT_CD, CL_RENKEI_STAT_CD_CLZM);
//		// 更新年月日時分秒(更新前)
//		if(isNullBlank(inHash, "upd_dtm"))
//		{
//			template.set(EKK1051C020CBSMsg.UPD_DTM_BF, inHash.get("upd_dtm"));
//		}
//	}
//	
//	/**
//	 * EKK1051C020の結果をHashとして抽出する
//	 * @param resultMsgs EKK1051C020のテンプレートリスト
//	 * @return EKK1051C020の結果部分
//	 */
//	private HashMap<String, Object> mappingEKK1051C020SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		CAANMsg parentTemplate = resultMsgs[0];
//		CAANMsg[] templateArray = null;
//		
//		// 結果を詰めるマップを取得。
//		HashMap dataMap = new HashMap();
//		
//		if (templateArray != null) 
//		{
//			// 契約一時金取消明細.更新年月日時分秒
//			if (parentTemplate.isNull(EKK1021D010CBSMsg.UPD_DTM)) 
//			{
//				dataMap.put("upd_dtm", "");
//			} 
//			else 
//			{
//				dataMap.put("upd_dtm", parentTemplate.getString(EKK1021D010CBSMsg.UPD_DTM));
//			}
//		}
//		
//		return dataMap;
//	}
//	// 2013/9/23 OM-2013-0002371 Add End
// 2014.02.10 OM-2014-0000251 DEL end
	
	// TAI-2012-0000101 2013/01/05 ADD START
	/**
	 * 単項目関連チェックを行う
	 * 
	 * @param icjknErrFlg 一時金エラーフラグ
	 * @throws ReqChkException 例外時にスローします
	 * @return エラーフラグ
	 */
	private String chkErr(HashMap icjknErrFlg) throws ReqChkException
	{	
		String err_flg = ERR_FLG_MU;
		// 電話帳掲載取得
		String dnwacho_keisai_cd = (String) icjknErrFlg.get(DNWACHO_KEISAI_DIV);
		// 掲載手数料チェック取得
		Boolean keisai_commision_chk = Boolean.valueOf((String) icjknErrFlg.get(ICHIJIKIN_CHK));
		// 掲載手数料取得
		String keisai_commision_cd = (String) icjknErrFlg.get(ICHIJIKIN_DIV);
		
		// エラーチェック（対象選択チェック）
		if(keisai_commision_chk == true)
		{	
		    // 電話帳掲載 ＝ タウンページ かつ 掲載手数料 ≠ 無
			if(dnwacho_keisai_cd.equals(DNWACHO_KEISAI_DIV_TOWNPAGE) && !(keisai_commision_cd.equals(KEISAI_CMS_SKBT_CD_MU)))
			{
				err_flg = ERR_FLG_TOWNPAGE;
			}
			// 電話帳掲載 ＝ 重複掲載 かつ 掲載手数料 ≠ 無
			if(dnwacho_keisai_cd.equals(DNWACHO_KEISAI_DIV_DBLE) && !(keisai_commision_cd.equals(KEISAI_CMS_SKBT_CD_MU)))
			{
				err_flg = ERR_FLG_DBLE;
			}
		}
		return err_flg;
	}
	// TAI-2012-0000101 2013/01/05 ADD END
	
	/**
	 * 一時金設定登録を行います。<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param requestParam リクエストパラメータ
	 * @param resultHash 結果格納用
	 * @return SIF呼び出し時のリターンコード
	 * @throws Throwable
	 */
	public int exeIcjknTran(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> requestParam,
			HashMap<String, Object> resultHash) throws Throwable
	{
		int statusCode = 0;
		// 一時金設定登録
		statusCode = callEKK1021D010SC(param, handle, requestParam, resultHash);
		if(statusCode != 0)
		{
			return statusCode;
		}
		return 0;
	}
	/**
	 * 事務手数料判定結果取得S-IFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK1021C011SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		// EKK1021C011への呼び出しパラメータ設定
		template = new CAANMsg(EKK1021C011CBSMsg.class.getName());
		mappingEKK1021C011InMsg(template, inHash);
		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, ICJKNCC);
		// エラーチェック処理
		errChk(sIFResult);
		
		//結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
		
			resultHash.put(
					TEMPLATE_ID_EKK1021C011,
					mappingEKK1021C011SCOutMsg(resultMsgs));
		}
		
		return status;
	}
	
	/**
	 * 事務手数料判定結果取得の結果をHashとして抽出する
	 * @param resultMsgs EKK0081A010のテンプレートリスト
	 * @return EKK0081A010の結果部分
	 */
	private HashMap<String, Object> mappingEKK1021C011SCOutMsg(CAANMsg[] resultMsgs)
	{
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		msgList = 
			(CAANMsg[])msg.getMsgData().get(EKK1021C011CBSMsg.EKK1021C011CBSMSG1LIST);
		retHash = msgList[0].getMsgData();
		
		return retHash;
	}
	
	/**
	 * templateに対してEKK1021C011の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK1021C011InMsg(CAANMsg template, HashMap<String, Object> inHash)
	{
		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK1021C011CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK1021C011CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1021C011);
		
		//機能コード--サービス契約一意照会(ここだけはカレント)
		template.set(EKK1021C011CBSMsg.FUNC_CODE, "1");
		
		// 異動区分
		// ST2-2012-0001368 DELETE START
//		template.set(EKK1021C011CBSMsg.IDO_DIV, inHash.get(IDO_DIV));
		// ST2-2012-0001368 DELETE END
		// ST2-2012-0001368 ADD START
		template.set(EKK1021C011CBSMsg.IDO_DIV, IDO_DIV_00047);
		// ST2-2012-0001368 ADD END
// 2013/01/24 ANK-1306-00-00 add start
		// 掲載手数料識別コード
		// 掲載手数料識別コードが「有」または「指定額」の場合
		if(KEISAI_CMS_SKBT_CD_YU.equals(inHash.get(ICHIJIKIN_DIV)) ||
				KEISAI_CMS_SKBT_CD_STIAM.equals(inHash.get(ICHIJIKIN_DIV)))
		{
			template.set(EKK1021C011CBSMsg.KEISAI_CMS_SKBT_CD, "");
		}
		// それ以外の場合
		else
		{
			template.set(EKK1021C011CBSMsg.KEISAI_CMS_SKBT_CD, inHash.get(ICHIJIKIN_DIV));
		}
// 2013/01/24 ANK-1306-00-00 add end
	}
	
	/**
	 * 一時金設定登録SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK1021D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;
		
		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK1021D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK1021D010CBSMsg.class.getName());
		mappingEKK1021D010SCInMsg(template, inHash, resultHash);
		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, ICJKNCC);
		// エラーチェック処理
		errChk(sIFResult);
		
		//結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			resultHash.put(
					TEMPLATE_ID_EKK1021D010, 
					mappingEKK1021D010SCOutMsg(resultMsgs));
		}
		
		return status;
	}
	
	/**
	 * EKK1021D010の結果をHashとして抽出する
	 * @param resultMsgs EKK1021D010のテンプレートリスト
	 * @return EKK1021D010の結果部分
	 */
	private HashMap<String, Object> mappingEKK1021D010SCOutMsg(CAANMsg[] resultMsgs)
	{
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		retHash = (HashMap<String, Object>)msg.getMsgData();
		
		return retHash;
	}
	
	/**
	 * templateに対してEKK1021D010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param resultHash アプリ固有のパラメータ
	 */
	private void mappingEKK1021D010SCInMsg(CAANMsg template, HashMap<String, Object> inHash, HashMap<String, Object> resultHash)
	{
		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK1021D010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK1021D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1021D010);
		
		//機能コード
		template.set(EKK1021D010CBSMsg.FUNC_CODE, inHash.get(FUNC_CODE));
		
		// 判定結果
		String judge_rslt_ekk1021C011 = null;
		// 一時金支払料金番号
		String tmp_pay_prc_no_ekk1021C011 = null;
		// 一時金設定コード
		String icjkn_sette_cd_ekk1021C011 = null;
		
		HashMap<String, Object> eKK1021C011Hash = null;
		if(resultHash.containsKey(TEMPLATE_ID_EKK1021C011))
		{
			eKK1021C011Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK1021C011);
			if(eKK1021C011Hash.containsKey(EKK1021C011CBSMsg1List.JUDGE_RSLT))
			{
				judge_rslt_ekk1021C011 = (String)eKK1021C011Hash.get(EKK1021C011CBSMsg1List.JUDGE_RSLT);
			}
		}
		
		if(!"1".equals(judge_rslt_ekk1021C011))
		{
			return;
		}
		
		// 事務手数料判定結果取得の結果取得
		if(resultHash.containsKey(TEMPLATE_ID_EKK1021C011))
		{
			eKK1021C011Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK1021C011);
			// 判定結果を取得
			if(eKK1021C011Hash.containsKey(EKK1021C011CBSMsg1List.JUDGE_RSLT))
			{
				judge_rslt_ekk1021C011 = (String) eKK1021C011Hash.get(EKK1021C011CBSMsg1List.JUDGE_RSLT);
			}
			// 一時支払料金番号を取得
			if(eKK1021C011Hash.containsKey(EKK1021C011CBSMsg1List.TMP_PAY_PRC_NO))
			{
				tmp_pay_prc_no_ekk1021C011 = (String) eKK1021C011Hash.get(EKK1021C011CBSMsg1List.TMP_PAY_PRC_NO);
			}
			// 一時金設定コードを取得
			if(eKK1021C011Hash.containsKey(EKK1021C011CBSMsg1List.ICJKN_SETTE_CD))
			{
				icjkn_sette_cd_ekk1021C011 = (String) eKK1021C011Hash.get(EKK1021C011CBSMsg1List.ICJKN_SETTE_CD);
			}
		}
		
		// 一時支払料金番号
		if(tmp_pay_prc_no_ekk1021C011 != null && !"".equals(tmp_pay_prc_no_ekk1021C011))
		{
			template.set(EKK1021D010CBSMsg.TMP_PAY_PRC_NO, tmp_pay_prc_no_ekk1021C011);
		}
		
		// 指定額である場合
		if(KEISAI_CMS_SKBT_CD_STIAM.equals(inHash.get(ICHIJIKIN_DIV)))
		{
			// 一時金設定コード
			template.set(EKK1021D010CBSMsg.ICJKN_SETTE_CD, KEISAI_COMMISION_CD_AMNT);
			// 指定額
			template.set(EKK1021D010CBSMsg.ICJKN_SHITEI_AMNT, inHash.get(ICHIJKN_SHITEI_AMNT));
		}
		// 指定額でない場合
		else if(icjkn_sette_cd_ekk1021C011 != null && !"".equals(icjkn_sette_cd_ekk1021C011))
		{
			// 一時金設定コード
			template.set(EKK1021D010CBSMsg.ICJKN_SETTE_CD, icjkn_sette_cd_ekk1021C011);
			// 指定額
			template.set(EKK1021D010CBSMsg.ICJKN_SHITEI_AMNT, "");
		}
		
		// サービス契約番号
		template.set(EKK1021D010CBSMsg.SVC_KEI_NO, inHash.get(SVC_KEI_NO));
		
		// サービス契約内訳番号
		template.set(EKK1021D010CBSMsg.SVC_KEI_UCWK_NO, inHash.get(SVC_KEI_UCWK_NO));
		
		// サービス契約ステータスが「受付済」の場合
		if(SVC_KEI_STAT_UK_ZM.equals(inHash.get(SVC_KEI_STAT)))
		{
			// 完了状態コード
			template.set(EKK1021D010CBSMsg.FIN_STAT_CD, "");
		}
		// サービス契約ステータスが「受付済」以外の場合
		else
		{
			// 完了状態コード
			template.set(EKK1021D010CBSMsg.FIN_STAT_CD, FIN_STAT_CD_MI);
		}
	}
	
	/**
	 * 持ちうるフィールドにNullマッピングで埋める
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	private void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
	{
		
		//要素ごとのループ
		for(int i = 0 ; i < contents.length ; i++)
		{
			Object element = null;
			
			//キーに該当する箇所の取得
			element = contents[i][0];
			
			//Nullでマッピング
			msg.setNull((String)element);
		}
	}
	
	/**
	 * 条件部の共通する項目の設定
	 * @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;
	}
	
	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private IRequestParameterReadWrite editResultRP(
			Map<?, ?> msgList,
			IRequestParameterReadWrite param,
			String fixedText) 
			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);
		
		// テンプレートID、ステータス取得
		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);
		}
		
		//エラー情報のマップを取得
		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);
		}
	}
	// 2013/9/25 OM-2013-0002371 Add Start
	/**
	 * NULLまたは空文字チェック処理
	 * <br>
	 * @param inMap 入力マップ
	 * @param key キー項目
	 * @return boolean(nullまたは空文字の場合はfalse、それ以外の場合はtrue)
	 * @throws SCCallException 
	 */
	private boolean isNullBlank(HashMap inMap, String key) throws SCCallException
	{
		if(null == inMap || null == inMap.get(key) || "".equals(inMap.get(key)))
		{
			return false;
		}
		return true;
	}
	// 2013/9/25 OM-2013-0002371 Add End
}

