/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKIntrInfoChgCfmCC
 *	ソースファイル名：JKKIntrInfoChgCfmCC.java
 *	作成者			：FJ
 *	日付			：2014年01月09日
 *＜機能概要＞
 *	紹介コード更新CC
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v7.00.00	2014/01/21	FJ		新規作成
 *	v7.00.01	2014/02/06      FJ)西面		【ANK-1756-00-00】紹介コード対応
 *	v7.00.02	2014/02/07      FJ)西面		【ANK-1756-00-00】紹介コード対応
 *	v7.00.03	2014/02/14      FJ)西面		【IT1-2014-0000062】マンション名対応
 *	v7.00.04	2014/02/25		FJ)西面		【OM-2014-0000818】割引サービス契約ステータス判定
 *	v41.00.00	2019/02/01		FJ)中野		【ANK-3548-00-00】紹介コードの事前発番対応
 *	v68.00.00	2023/11/07		FJ)北谷		【ANK-4416-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.custom.constant.JKKSvcConst;
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 com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081C310CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0311A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0311A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0311B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0311B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0311B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0311B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0311C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0481A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0481B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0481B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2391B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2391B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2891A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2891A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2891C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2891D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2891E010CBSMsg;

public class JKKIntrInfoChgCfmCC extends AbstractCommonComponent {

	// ******************************************
	// 機能コード
	// ******************************************

	// 機能コード：1
	private static final String FUNC_CD_1 = "1";
	// 機能コード：2：
	private static final String FUNC_CD_2 = "2";

	// *********************************************
	// サービスIF
	// *********************************************

	// サービス契約一意照会
	private static final String EKK0081A010 = "EKK0081A010";

	// 紹介一覧照会
	private static final String EKK0311B001 = "EKK0311B001";

	// 紹介コード更新
	private static final String EKK0081C310 = "EKK0081C310";

	// 開通後紹介キャンペーン適用ワーク一意照会
	private static final String EKK2891A010 = "EKK2891A010";

	// 開通後紹介キャンペーン適用ワーク情報変更
	private static final String EKK2891C020 = "EKK2891C020";

	// 開通後紹介キャンペーン適用ワーク登録
	private static final String EKK2891D010 = "EKK2891D010";

	// 開通後紹介キャンペーン適用ワーク削除
	private static final String EKK2891E010 = "EKK2891E010";

	//ANK-1756-00-00 2014/02/06 DEL START
	// 割引サービス適用条件一覧紹介
	//private static final String EKK2311B004 = "EKK2311B004";
	//ANK-1756-00-00 2014/02/06 DEL END
	
	// 割引サービス対象契約一覧紹介
	private static final String EKK0481B001 = "EKK0481B001";

	// 割引サービス契約一意照会
	private static final String EKK0451A010 = "EKK0451A010";

	// 進捗登録
	private static final String EKK1091D010 = "EKK1091D010";

	//ANK-1756-00-00 2014/02/06 ADD START
	private static final String EKK2391B003 = "EKK2391B003";
	//ANK-1756-00-00 2014/02/06 ADD END
	
	// ANK-4416-00-00 ADD START
	// クーポンコード一覧照会
	private static final String EKK0311B002 = "EKK0311B002";
	
	// クーポンコード一意照会
	private static final String EKK0311A010 = "EKK0311A010";
	
	// クーポンコード更新
	private static final String EKK0311C010 = "EKK0311C010";
	
	// 進捗更新
	private static final String EKK1091C010 = "EKK1091C010";
	// ANK-4416-00-00 ADD END
	
	// ******************************************
	// ユーザ定義文字列
	// ******************************************

	// 異動区分.登録内容修正
	private static final String IDO_DIV_00032 = "00032";

	// 処理区分 登録
	private static final String TRN_DIV_INSERT = "0";
	
	//ANK-1756-00-00 2014/02/06 DEL START
	// 割引サービス適用条件種別コード(紹介)
	//private static final String WRSV_APLY_JKN_SBT_CD_02 = "02";
	//ANK-1756-00-00 2014/02/06 DEL END
	
	//v7.00.04 2014/02/25 Del Start
	//割引サービス契約ステータス（受付済み)
	//private static final String WRIB_SVC_KEI_STAT_010 ="010";
	//v7.00.04 2014/02/25 Del End
	
	//v7.00.04 2014/02/25 Add Start
	
	//割引サービス契約ステータス (解約済)
	private static final String WRIB_SVC_KEI_STAT_910 ="910";
	
	//割引サービス契約ステータス (キャンセル済)
	private static final String WRIB_SVC_KEI_STAT_920 ="920";
	
	//v7.00.04 2014/02/25 Add End
	
	//ANK-1756-00-00 2014/02/06 ADD START
	//データ抽出項目設定条件種別コード(紹介）
	private static final String DCHSKM_SETE_JKN_SBT_CD_12 ="12";
	//ANK-1756-00-00 2014/02/06 ADD END
	
	//ANK-4416-00-00 ADD START
	//key 紹介コード(:1)
	private static final String KEY_INTR ="1";
	//key クーポンコード(:2)
	private static final String KEY_COUPON ="2";
	//更新 紹介コード(:1)
	private static final String UPD_INTR_CD ="1";
	//更新 クーポンコード(:2)
	private static final String UPD_COUPON_CD ="2";
	//ANK-4416-00-00 ADD END
	
	/**
	 * デバッグログを出力します。<BR>
	 * 
	 * @param dumpObj 出力するオブジェクト
	 */
	@SuppressWarnings("static-access")
	private void printlnEjbLog(Object dumpObj) {
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JKKIntrInfoChgCfmCC：業務log；" + dumpObj, null, null, null);
	}

	/**
	 * 紹介コード一覧取得処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getIntrInfo(SessionHandle handle,
											IRequestParameterReadWrite param, String fixedText)
											throws Throwable {
		printlnEjbLog("getIntrInfo start");
		
		// 作業用マップ
		HashMap<String, Object> workMap = new HashMap<String, Object>();

		// ユーザデータ情報
		HashMap inMap = (HashMap) param.getData(fixedText);

		// 処理結果格納用マップ
		HashMap intrInfoCC = new HashMap<String, Object>();

		// 照会一覧取得処理の実行判定を行う
		if (!checkTrnChk(inMap)) {
			
			//ANK-4416-00-00 MOD START
			//printlnEjbLog("checkTrnChk 両方値無し");
			printlnEjbLog("checkTrnChk 全て値無し");
			//ANK-4416-00-00 MOD END
			
			// 以降の処理を中断する
			return param;
		}

		// 処理区分を判定する 初期表示 or 検索
		//初期表示
		if (checkTrnDiv(inMap)) {
			
			printlnEjbLog("checkTrnDiv 初期表示処理開始");
			
			// 初期表示の場合
			// 紹介コード情報を取得する
			callEKK0081A010SC(param, handle, workMap, inMap);
			// ANK-4416-00-00 ADD START
			// クーポンコード情報を取得する
			callEKK0311B002SC(param, handle, workMap, inMap);
			//ANK-4416-00-00 ADD END

			// ANK-4416-00-00 MOD START
			// 紹介コード一覧取得処理の実行判定のため、取得したサービス契約の結果に紹介コードが存在するかを行う
//			if (!checkIntrCd(workMap)) {
//				
//				printlnEjbLog("checkIntrCd 紹介コードが存在しない");
//				
//				// 紹介コードが存在しない場合、処理を中断する
//				return param;
//			}
//		}
//
//		// 紹介コードに紐付く紹介者情報を取得する
//		callEKK0311B001SC(param, handle, workMap, inMap, intrInfoCC);
			
			//紹介コード一覧取得処理の実行判定結果格納用
			boolean checkIntrCdResult = checkIntrCd(workMap);
			boolean checkCouponCdResult = checkCouponCd(workMap);
			
			
			//取得したサービス契約の結果に紹介コードが存在するかを行う
			if ((!checkIntrCdResult)
					//取得した紹介スキーマの結果にクーポンコードが存在するかを行う
					 &&(!checkCouponCdResult))
			{
				printlnEjbLog("checkIntrCd 紹介コードが存在しない");
				printlnEjbLog("checkCouponCd クーポンコードが存在しない");
				
				// 紹介コードとクーポンコードどちらも存在しない場合、処理を中断する
				return param;
			}
			
			if(checkIntrCdResult){
				// 紹介コードに紐付く紹介者情報を取得する
				callEKK0311B001SC(param, handle, workMap, inMap, intrInfoCC);
			}
			if(checkCouponCdResult){
				// クーポンコードに紐付く紹介情報を取得する
				callEKK0311A010SC(param, handle, workMap, inMap, intrInfoCC);
			}
		//検索	
		}else{
					
			if(!JKKStringUtil.isNullBlank((String)inMap.get("intr_cd"))){
				// 紹介コードに紐付く紹介者情報を取得する
				callEKK0311B001SC(param, handle, workMap, inMap, intrInfoCC);
				callEKK0311A010SC_search(param, handle, workMap, inMap, intrInfoCC, KEY_INTR);
			}
	
			if(!JKKStringUtil.isNullBlank((String)inMap.get("coupon_cd"))){
				// クーポンコードに紐付く紹介情報を取得する
				callEKK0311A010SC_search(param, handle, workMap, inMap, intrInfoCC, KEY_COUPON);
			}
		}
		//ANK-4416-00-00 MOD END
		
		param.setData(fixedText, intrInfoCC);
		
		printlnEjbLog("getIntrInfo end");
		
		// 結果を返却する。
		return param;
	}

	/**
	 * 紹介コード更新処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite chgIntrInfo(SessionHandle handle,
													IRequestParameterReadWrite param, 
													String fixedText)
													throws Throwable {

		printlnEjbLog("chgIntrInfo start");
		
		// 作業用マップ
		HashMap<String, Object> workMap = new HashMap<String, Object>();
		HashMap<String, Object> intrInfoChgCC = new HashMap<String,Object>();

		// ユーザデータ情報
		HashMap inMap = (HashMap) param.getData(fixedText);
		
// v7.00.02 add start
		
		// 割引画面より遷移時
		if (!isCallIntrView(inMap)) {
			
			chgWribIntrInfo(handle, param, fixedText);
			return param;
		}
// v7.00.02 add end
		
		
		// サービス契約一意照会I/Fを呼び出す
		callEKK0081A010SC(param, handle, workMap, inMap);

		// 紹介コードが存在するかを判定する
		if (isIntrCdBlank(workMap, inMap)) {
			
			printlnEjbLog("chgIntrInfo 紹介コード存在なし");
			
			// 存在しない場合、以降の処理の必要がないため中断する
			return param;
		}

		// 異動区分を元に呼出元を特定する
		if (isCallIntrView(inMap)) {

			printlnEjbLog("isCallIntrView 紹介コード画面より呼出");
			
			
			// 紹介コード更新画面から呼び出された場合、サービス契約スキーマを更新する
			callEKK0081C310SC(param, handle, workMap, inMap);
			
			if(!JKKStringUtil.isNullBlank((String)workMap.get("svc_kei_no_err_o"))){
				
				intrInfoChgCC.put("svc_kei_no_err_o", workMap.get("svc_kei_no_err_o"));
				
				intrInfoChgCC.put("err_flg_o", workMap.get("err_flg_o"));
				
				param.setData(fixedText, intrInfoChgCC);
				
				return param;
				
			}
			

		}else{
			
			printlnEjbLog("isCallIntrView 紹介コード画面以外より呼出");
			
			//紹介コード画面以外から呼び出された場合、割引サービス契約番号を取得し、紹介の割引かを判別する
			if(!isIntrWrib(param, handle, workMap, inMap)){
				
				//紹介以外の割引の場合、処理を中断する
				return param;
			}
			
		}

		// サービス契約ステータスを確認する
		if (!isSvcKeiStart(workMap)) {

			printlnEjbLog("isSvcKeiStart サービス提供中以前");
			
			// サービス提供中以前だった場合、登録対象外のため処理を中断する
			
			//ANK-1756-00-00 2014/02/06 ADD START
			if (isCallIntrView(inMap)) {
				
				// 紹介コード更新から呼ばれていた場合は進捗を登録する
				//ANK-4416-00-00 MOD START
				//callEKK1091D010SC(param, handle, workMap, inMap);
				callEKK1091D010SC(param, handle, workMap, inMap, UPD_INTR_CD);
				//ANK-4416-00-00 MOD END
				
				}
			//ANK-1756-00-00 2014/02/06 ADD END
			
			// サービス提供中以前だった場合、登録対象外のため進捗を登録し処理を中断する

			return param;
		}

		// 開通後紹介キャンペーン一意照会
		callEKK2891A010SC(param, handle, workMap, inMap);

		// 処理区分を判定する
		if (checkChgTrnDiv(inMap)) {

			printlnEjbLog("checkChgTrnDiv 登録処理");
			
			// 登録の場合
			insertTrn(param, handle, workMap, inMap);

		} else {

			printlnEjbLog("checkChgTrnDiv 削除処理");
			
			// 削除の場合
			deleteTrn(param, handle, workMap, inMap);

			// 処理を中断する

		}

		// 異動区分によって呼出元を判定する
		if (isCallIntrView(inMap)) {

			printlnEjbLog("isCallIntrView 紹介コード更新より呼出");
			
			// 紹介コード更新から呼ばれていた場合は進捗を登録する
			//ANK-4416-00-00 MOD START
			//callEKK1091D010SC(param, handle, workMap, inMap);
			callEKK1091D010SC(param, handle, workMap, inMap, UPD_INTR_CD);
			//ANK-4416-00-00 MOD END
		}

		printlnEjbLog("chgIntrInfo end");
		
		return param;
	}
	
	
// v7.00.02 add start
	/**
	 * 紹介コード更新処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite chgWribIntrInfo(SessionHandle handle,
														IRequestParameterReadWrite param, 
														String fixedText)
														throws Throwable {
		printlnEjbLog("chgWribIntrInfo start");
		
		// 作業用マップ
		HashMap<String, Object> tWorkMap = new HashMap<String, Object>();
		HashMap<String, Object> eWorkMap = new HashMap<String, Object>();

		// ユーザデータ情報
		HashMap inMap = (HashMap) param.getData(fixedText);
		
		// 保持用
		ArrayList<String> bkSvcWList = new ArrayList<String>();
		// 割引サービス契約番号を特定
		ArrayList<String> wList = isWrib(param, handle, tWorkMap, inMap);
		
		// 紹介CP時のみ
		for (String wSvcKeiNo : wList) {
			
			// サービス契約番号特定
			String svcKeiNo = retSvcKeiNo(callEKK0481B001SC(param, handle, eWorkMap, inMap, wSvcKeiNo));
			
			// チェック（同一サービスはスキップ）
			if (bkSvcWList.contains(svcKeiNo)) continue;
			
			// 上書き[inMap 被紹介者サービス契約番号（inMap.hi_svc_kei_no）]
			inMap.put("hi_svc_kei_no", svcKeiNo);
			
			// サービス契約（ステータス判定用）
			callEKK0081A010SC(param, handle, eWorkMap, inMap);
			
			// サービス契約ステータスを確認する
			if (!isSvcKeiStart(eWorkMap)) {
				printlnEjbLog("isSvcKeiStart サービス提供中以前");
				continue;
			}
			
			// 開通後紹介キャンペーン一意照会
			callEKK2891A010SC(param, handle, eWorkMap, inMap);
			
			// 処理区分を判定する
			if (checkChgTrnDiv(inMap)) {
				printlnEjbLog("checkChgTrnDiv 登録処理");
				
				// 登録の場合
				insertTrn(param, handle, eWorkMap, inMap);

			} else {
				printlnEjbLog("checkChgTrnDiv 削除処理");
				
				// 削除の場合
				deleteTrn(param, handle, eWorkMap, inMap);
			}
			
			// 処理済サービス契約番号を保持
			bkSvcWList.add(svcKeiNo);
			
			// 作業用work初期化
			eWorkMap.clear();
		}
		
		printlnEjbLog("chgWribIntrInfo end");
		
		return param;
	}
	
	/**
	 * 
	 * 取得した割引サービス契約番号を元に
	 * 紹介の割引かを判別する
	 * 
	 * @param  wSvcKeiNo
	 * @param  tgList
	 * @return 
	 * @throws Throwable
	 */
	private String retSvcKeiNo(ArrayList<HashMap<String, String>> tgList)throws Throwable{ 
		printlnEjbLog("chgWribIntrInfo start");
		
		String ret = "";
		
		for (HashMap<String, String> map : tgList) {
			
			if ("01".equals(map.get("tg_kei_skbt_cd"))) {
				ret = map.get("svc_kei_no");
			}
		}
		printlnEjbLog("戻り：" + ret);
		printlnEjbLog("chgWribIntrInfo end");
		return ret;
	}
	
	/**
	 * 取得した割引サービス契約番号を元に
	 * 紹介の割引かを判別する
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return true 紹介の割引 false 紹介以外の割引
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<String> isWrib(IRequestParameterReadWrite param, 
									SessionHandle handle,
									HashMap<String, Object> workMap, 
									HashMap<String, Object> inMap)
									throws Throwable{ 
		
		printlnEjbLog("isWrib start");
		
		ArrayList<String> ret = new ArrayList<String>();
		ArrayList<HashMap<String,String>> wribSvcKeiMap = new ArrayList<HashMap<String,String>>();
		ArrayList<String> wribCdList = callEKK2391B003SC(param, handle, workMap, inMap);
		
		// リクエストパラメーターより割引サービス契約番号を取得
		wribSvcKeiMap = (ArrayList<HashMap<String,String>>)inMap.get("wrib_svc_kei_list");
		
		for (HashMap<String, String> tgMap : wribSvcKeiMap) {
			// WorkMapへ割引サービス契約番号セット
			workMap.put("wrib_svc_kei_no", tgMap.get("wrib_svc_kei_no"));
			// 割引サービス契約一意照会を実行する
			callEKK0451A010SC(param, handle, workMap, inMap);
			// 割引サービス契約一意照会より取得した割引サービスコードを取得
			String wribSvcCd = (String) workMap.get("wrib_svc_cd");
			//紹介に紐づく割引かを確認
			if (wribCdList.contains(wribSvcCd)) {
				ret.add(tgMap.get("wrib_svc_kei_no"));
			}
		}
		
		printlnEjbLog("isWrib end");
		return ret;
	}
	
	/** 
	 * 
	 * 割引サービス対象契約一覧照会インターフェイスを呼び出す
	 * 
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param tgWribSvcKeiNo
	 * @return サービス契約に被も付く割引サービス契約番号を返却する
	 * @throws Throwable
	 */
	private ArrayList<HashMap<String, String>> callEKK0481B001SC(IRequestParameterReadWrite param, 
													SessionHandle handle,
													HashMap<String, Object> workMap, 
													HashMap<String, Object> inMap,
													String tgWribSvcKeiNo)
													throws Throwable {
		
		printlnEjbLog("callEKK0481B001SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		ArrayList<HashMap<String, String>> ret = new ArrayList<HashMap<String, String>>();

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0481B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0481B001CBSMsg.class.getName());
		mappingEKK0481B001InMsg(template, tgWribSvcKeiNo);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		ret = getEKK0481B001InMsg(sIFResult);
		
		printlnEjbLog("callEKK0481B001SC end");
		
		return ret;
	}
	
	/**
	 * 
	 * templateに対してEKK0481B001の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0481B001InMsg(CAANMsg template, String tgWribSvcKeiNo) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0481B001CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0481B001CBSMsg.TEMPLATEID, EKK0481B001);

		// 機能コード："2"サービス対象契約一覧紹介 */
		template.set(EKK0481B001CBSMsg.FUNC_CODE, FUNC_CD_1);

		// 割引サービス対象契約:リクエストより取得した割引サービス対象契約を設定する
		template.set(EKK0481B001CBSMsg.KEY_WRIB_SVC_KEI_NO, tgWribSvcKeiNo);
	}
	
	/**
	 * 割引サービス対象契約一覧紹介の結果を取得
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private ArrayList<HashMap<String, String>> getEKK0481B001InMsg(Map<?, ?> sIFResult) throws RequestParameterException {

		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0481B001CBSMsg.EKK0481B001CBSMSG1LIST);

		ArrayList<HashMap<String, String>> ret = new ArrayList<HashMap<String, String>>();

		if (null == templateArray || 0 == templateArray.length) {
			return ret;
		}
		
		for (int i = 0; i < templateArray.length; i++) {
			
			HashMap<String, String> map = new HashMap<String, String>();
			
			// サービス契約 
			map.put("svc_kei_no",    templateArray[i].getString(EKK0481B001CBSMsg1List.SVC_KEI_NO));
			map.put("tg_kei_skbt_cd",templateArray[i].getString(EKK0481B001CBSMsg1List.TG_KEI_SKBT_CD));
			ret.add(map);
		}
		return ret;
	}
// v7.00.02 add end
	
	
	/**サービス契約一意照会インターフェイス呼出処理
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK0081A010SC(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap)
									throws Throwable {
		
		printlnEjbLog("callEKK0081A010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0081A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0081A010CBSMsg.class.getName());
		mappingEKK0081A010InMsg(template, inMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK0081A010InMsg(sIFResult, workMap);
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK0081A010SC end");
		
		return status;
	}

	/**紹介一覧紹介<紹介コード>インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param intrInfoCC
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK0311B001SC(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap,
									HashMap<String, Object> intrInfoCC)
									throws Throwable {
		
		printlnEjbLog("callEKK0311B001SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0311B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0311B001CBSMsg.class.getName());
		mappingEKK0311B001InMsg(template, inMap, workMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK0311B001InMsg(sIFResult, intrInfoCC);
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK0311B001SC end");
		
		return status;
	}

	/**サービス契約情報変更<紹介コード>インターフェイスを呼出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK0081C310SC(IRequestParameterReadWrite param, 
										SessionHandle handle,
										HashMap<String, Object> workMap, 
										HashMap<String, Object>inMap)
										throws Throwable{
		
		printlnEjbLog("callEKK0081C310SC start");
		
			HashMap<String, Object> sIFRequest = null;
			CAANMsg template = null;
			ServiceComponentRequestInvoker scCall = null;
			Map<?, ?> sIFResult = null;
			int status = 0;

			// サービスIF共通の情報を設定
			sIFRequest = editInMsgCmn(param);

			// EKK0081C310への呼び出しパラメータ設定
			template = new CAANMsg(EKK0081C310CBSMsg.class.getName());
			mappingEKK0081C310InMsg(template,inMap,workMap);
			editBasicCmn(param, template,workMap);

			// リクエスト用クラスの設定
			sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

			// SC呼び出しクラスの生成
			scCall = new ServiceComponentRequestInvoker();

			// SIFの呼び出し
			sIFResult = scCall.run(sIFRequest, handle);
			
			//エラーマッピング
			editResultRP(sIFResult, param, inMap, workMap);
			
			//エラー情報確認
			
			if(!JKKStringUtil.isNullBlank((String)workMap.get("svc_kei_no_err_o"))){
				
				return status;
				
			}
			
			// ステータスコードの取得
			status = template.getInt(JCMConstants.STATUS_INT_KEY);

			printlnEjbLog("callEKK0081C310SC end");
			
			return status;
		}

	
	/**紹介後キャンペーン適用ワーク一意照会を呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK2891A010SC(IRequestParameterReadWrite param,
											SessionHandle handle, 
											HashMap<String, Object> workMap,
											HashMap<String, Object> inMap)
											throws Throwable {
		
		printlnEjbLog("callEKK2891A010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK2891A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK2891A010CBSMsg.class.getName());
		mappingEKK2891A010InMsg(template, inMap, workMap);

		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK2891A010Msg(sIFResult, workMap);
		workMap.putAll(getWorkCAANMsg(sIFResult));
		
		
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK2891A010SC end");
		
		return status;
	}

	
	
	/**紹介後キャンペーン適用ワーク削除インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK2891E010SC(IRequestParameterReadWrite param,
											SessionHandle handle, 
											HashMap<String, Object> workMap,
											HashMap<String, Object> inMap) 
											throws Throwable {
		
		printlnEjbLog("callEKK2891E010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK2891E010への呼び出しパラメータ設定
		template = new CAANMsg(EKK2891E010CBSMsg.class.getName());
		mappingEKK2891E010InMsg(template, inMap, workMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK2891E010SC end");
		
		return status;
	}

	
	
	/**開通後紹介キャンペーン適用ワーク情報変更インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK2891C020SC(IRequestParameterReadWrite param,
											SessionHandle handle, 
											HashMap<String, Object> workMap,
											HashMap<String, Object> inMap) 
											throws Throwable {
		
		printlnEjbLog("callEKK2891C020SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK2891C020への呼び出しパラメータ設定
		template = new CAANMsg(EKK2891C020CBSMsg.class.getName());
		mappingEKK2891C020InMsg(template, inMap, workMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK2891C020SC end");
		
		return status;
	}

	
	/**進捗登録インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param updInfo 更新情報(1:紹介コード 2:クーポンコード)
	 * @return ステータスコードを返却する
	 * @throws Throwable
	 */
	//ANK-4416-00-00 MOD START
//	private int callEKK1091D010SC(IRequestParameterReadWrite param,
//									SessionHandle handle, 
//									HashMap<String, Object> workMap,
//									HashMap<String, Object> inMap) throws Throwable {
	private int callEKK1091D010SC(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap,
									String updInfo) throws Throwable {
	//ANK-4416-00-00 MOD END
	
		printlnEjbLog("callEKK1091D010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK1091D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK1091D010CBSMsg.class.getName());
		//ANK-4416-00-00 MOD START
		//mappingEKK1091D010InMsg(template, inMap, workMap);
		mappingEKK1091D010InMsg(template, inMap, workMap, updInfo);
		//ANK-4416-00-00 MOD END
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK1091D010SC end");
		
		return status;
	}

//ANK-1756-00-00 2014/02/06 DEL START
//	/**割引サービス適用条件一覧照会インターフェイスを呼び出す
//	 * @param param
//	 * @param handle
//	 * @param workMap
//	 * @param inMap
//	 * @return 割引サービス適用条件種別コードに紐付く割引サービスコードのリストを返却する
//	 * @throws Throwable
//	 */
//	private ArrayList<String> callEKK2311B004SC(IRequestParameterReadWrite param, 
//													SessionHandle handle,
//													HashMap<String, Object> workMap, 
//													HashMap<String, Object> inMap)
//													throws Throwable {
//		
//		printlnEjbLog("callEKK2311B004SC start");
//		
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//
//		ArrayList<String> wribCdList = null;
//
//		
//
//		// サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//
//		// EKK2311B004への呼び出しパラメータ設定
//		template = new CAANMsg(EKK2311B004CBSMsg.class.getName());
//		mappingEKK2311B004InMsg(template, inMap);
//		editBasicCmn(param, template, workMap);
//
//		// リクエスト用クラスの設定
//		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
//				new CAANMsg[] { template });
//
//		// SC呼び出しクラスの生成
//		scCall = new ServiceComponentRequestInvoker();
//
//		// SIFの呼び出し
//		sIFResult = scCall.run(sIFRequest, handle);
//
//		// エラーマッピング
//		editResultRP(sIFResult, param, inMap, workMap);
//
//		// SIFの実行結果を設定
//		wribCdList = getEKK2311B004InMsg(sIFResult, workMap);
//		// ステータスコードの取得
//
//		printlnEjbLog("callEKK2311B004SC end");
//
//		return wribCdList;
//	}
//ANK-1756-00-00 2014/02/06 DEL END
	
	//ANK-1756-00-00 2014/02/06 ADD START
	/**データ抽出項目設定条件
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return データ抽出項目設定条件種別コードに紐付く割引サービスコードのリストを返却する
	 * @throws Throwable
	 */
	private ArrayList<String> callEKK2391B003SC(IRequestParameterReadWrite param, 
													SessionHandle handle,
													HashMap<String, Object> workMap, 
													HashMap<String, Object> inMap)
													throws Throwable {
		
		printlnEjbLog("callEKK2391B003SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;

		ArrayList<String> wribCdList = null;

		

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK2391B003への呼び出しパラメータ設定
		template = new CAANMsg(EKK2391B003CBSMsg.class.getName());
		mappingEKK2391B003InMsg(template, inMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		wribCdList = getEKK2391B003InMsg(sIFResult, workMap);
		// ステータスコードの取得

		printlnEjbLog("callEKK2391B003SC end");

		return wribCdList;
	}
	//ANK-1756-00-00 2014/02/06 ADD END
	
	
	/** 割引サービス対象契約一覧照会インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return サービス契約に被も付く割引サービス契約番号を返却する
	 * @throws Throwable
	 */
	private ArrayList<String> callEKK0481B001SC(IRequestParameterReadWrite param, 
													SessionHandle handle,
													HashMap<String, Object> workMap, 
													HashMap<String, Object> inMap)
													throws Throwable {
		
		printlnEjbLog("callEKK0481B001SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		ArrayList wribSvcKeiList = new ArrayList<String>();
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0481B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0481B001CBSMsg.class.getName());
		mappingEKK0481B001InMsg(template, inMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		wribSvcKeiList = getEKK0481B001InMsg(sIFResult, workMap);
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK0481B001SC end");
		
		return wribSvcKeiList;
	}

	
	
	/**割引サービス契約一意照会インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコード
	 * @throws Throwable
	 */
	private int callEKK0451A010SC(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap) 
									throws Throwable {
		
		printlnEjbLog("callEKK0451A010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0451A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0451A010CBSMsg.class.getName());
		mappingEKK0451A010InMsg(template, inMap, workMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK0451A010InMsg(sIFResult, workMap);
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK0451A010SC end");
		
		return status;
	}

	
	/**開通後紹介キャンペーン適用ワーク登録インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK2891D010SC(IRequestParameterReadWrite param,
											SessionHandle handle, 
											HashMap<String, Object> workMap,
											HashMap<String, Object> inMap) 
											throws Throwable {
		
		printlnEjbLog("callEKK2891D010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK2891D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK2891D010CBSMsg.class.getName());
		mappingEKK2891D010InMsg(template, inMap, workMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK2891D010SC end");
		
		return status;
	}

	/**
	 * @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;

	}

	/**
	 * templateに対してEKK0081A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0081A010InMsg(CAANMsg template,
											HashMap<String, Object> inMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0081A010CBSMsg.TEMPLATEID, EKK0081A010);

		// 機能コード："2"サービス契約一意照会(カレント) */
		template.set(EKK0081A010CBSMsg.FUNC_CODE, FUNC_CD_2);

		// サービス契約番号:リクエストより取得した被紹介者サービス契約番号を設定する
		template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, (String) inMap
				.get("hi_svc_kei_no"));

		// v7.00.02 mod start
		// 予約適用年月日:現在日付を入力
//		template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD,
//				com.fujitsu.futurity.bp.custom.common.JFUBPCommon
//						.getOpeDateTimeStamp(null).substring(0, 8));

		template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD,
				JCCBPCommon.getOpeDate(null));
		// v7.00.02 mod end
	}

	/**
	 * templateに対してEKK0311B001の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0311B001InMsg(CAANMsg template,
											HashMap<String, Object> inMap, 
											HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0311B001CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0311B001CBSMsg.TEMPLATEID, EKK0311B001);

		// 機能コード："1"
		template.set(EKK0311B001CBSMsg.FUNC_CODE, FUNC_CD_1);

		// 紹介コードを入力する
		if (checkTrnDiv(inMap)) {
			template.set(EKK0311B001CBSMsg.KEY_INTR_CD, (String) workMap
					.get("intr_cd"));
		} else {
			template.set(EKK0311B001CBSMsg.KEY_INTR_CD, (String) inMap
					.get("intr_cd"));
		}

	}

	/**
	 * templateに対してEKK0081C310の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0081C310InMsg(CAANMsg template,
												HashMap<String, Object> inMap, 
												HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081C310CBSMsg()
				.getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0081C310CBSMsg.TEMPLATEID, EKK0081C310);

		// 機能コード："リクエストパラメータ"
		template.set(EKK0081C310CBSMsg.FUNC_CODE, (String) inMap
				.get("func_code"));

		// サービス契約番号
		template.set(EKK0081C310CBSMsg.SVC_KEI_NO, (String) inMap
				.get("hi_svc_kei_no"));

		// 紹介コード
		template.set(EKK0081C310CBSMsg.INTR_CD, (String) inMap
				.get("intr_cd"));
		
		// 異動区分
		template.set(EKK0081C310CBSMsg.IDO_DIV, (String) inMap
				.get("ido_div"));
		
		// 更新前年月日時分秒
		template.set(EKK0081C310CBSMsg.UPD_DTM_BF, workMap.get("upd_dtm_bf"));

	}

	/**
	 * templateに対してEKK2891A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 * @param workMap
	 */
	private void mappingEKK2891A010InMsg(CAANMsg template,
													HashMap<String, Object> inMap, 
													HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK2891A010CBSMsg()
				.getContents());

		// テンプレートID(SIFのID)
		template.set(EKK2891A010CBSMsg.TEMPLATEID, EKK2891A010);

		// 機能コード："1"
		template.set(EKK2891A010CBSMsg.FUNC_CODE, FUNC_CD_1);

		// サービス契約番号
		template.set(EKK2891A010CBSMsg.KEY_SVC_KEI_NO, inMap
				.get("hi_svc_kei_no"));
		

	}

	/**
	 * templateに対してEKK2891C020の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK2891C020InMsg(CAANMsg template,
													HashMap<String, Object> inMap, 
													HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK2891C020CBSMsg()
				.getContents());

		// テンプレートID(SIFのID)
		template.set(EKK2891C020CBSMsg.TEMPLATEID, EKK2891C020);

		// 機能コード："リクエストパラメータを設定"
		template
				.set(EKK2891C020CBSMsg.FUNC_CODE, inMap.get("func_code"));

		// サービス契約番号
		template.set(EKK2891C020CBSMsg.SVC_KEI_NO, inMap
				.get("hi_svc_kei_no"));

		// 紹介コード
		if (isCallIntrView(inMap)) {
			template
					.set(EKK2891C020CBSMsg.INTR_CD, inMap.get("intr_cd"));
		} else {
			template.set(EKK2891C020CBSMsg.INTR_CD, workMap
					.get("intr_cd"));
		}

		// v7.00.02 mod start
		// 紹介コード設定年月日
//		template.set(EKK2891C020CBSMsg.INTR_CD_SETTE_YMD,
//				com.fujitsu.futurity.bp.custom.common.JFUBPCommon
//						.getOpeDateTimeStamp(null).substring(0, 8));
		
		template.set(EKK2891C020CBSMsg.INTR_CD_SETTE_YMD,
				JCCBPCommon.getOpeDate(null));
		// v7.00.02 mod end

		// 照会キャンペーン割引サービス契約登録年月日
		template.set(EKK2891C020CBSMsg.INTR_CMP_WRIBSVK_ADD_YMD, workMap
				.get("intr_cmp_wribsvk_add_ymd"));
		
		// 更新年月日
		template.set(EKK2891C020CBSMsg.UPD_DTM_BF, workMap
				.get("wk_upd_dtm_bf"));

	}

	/**
	 * templateに対してEKK2891E010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK2891E010InMsg(CAANMsg template,
													HashMap<String, Object> inMap,
													HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK2891E010CBSMsg()
				.getContents());

		// テンプレートID(SIFのID)
		template.set(EKK2891E010CBSMsg.TEMPLATEID, EKK2891E010);

		// 機能コード："リクエストパラメータより設定"
		template.set(EKK2891E010CBSMsg.FUNC_CODE, (String) inMap
				.get("func_code"));

		// サービス契約番号:リクエストより取得した被紹介者サービス契約番号を設定する
		template.set(EKK2891E010CBSMsg.SVC_KEI_NO, (String) inMap
				.get("hi_svc_kei_no"));
		
		// 更新年月日
		template.set(EKK2891C020CBSMsg.UPD_DTM_BF, workMap
				.get("wk_upd_dtm_bf"));


	}

	/**
	 * templateに対してEKK1091D010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 * @param updInfo 更新情報(1:紹介コード 2:クーポンコード)
	 */
	//ANK-4416-00-00 MOD START
//	private void mappingEKK1091D010InMsg(CAANMsg template,
//											HashMap<String, Object> inMap, 
//											HashMap<String, Object> workMap) {
	private void mappingEKK1091D010InMsg(CAANMsg template,
											HashMap<String, Object> inMap, 
											HashMap<String, Object> workMap,
											String updInfo) {
	//ANK-4416-00-00 MOD END

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK1091D010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK1091D010CBSMsg.TEMPLATEID, EKK1091D010);

		// 機能コード："リクエストパラメータ"*/
		template.set(EKK1091D010CBSMsg.FUNC_CODE, (String) inMap
				.get("func_code"));

		// 申込明細番号:サービス契約一意照会より取得した被紹介者申込明細番号を設定する
		template.set(EKK1091D010CBSMsg.MSKM_DTL_NO, (String) workMap
				.get("hi_mskm_dtl_no"));

		// サービス契約番号:被紹介者のサービス契約番号
		template.set(EKK1091D010CBSMsg.SVC_KEI_NO, (String) inMap
				.get("hi_svc_kei_no"));

		// 異動区分 : リクエストパラメータ
		template.set(EKK1091D010CBSMsg.IDO_DIV, (String) inMap
				.get("ido_div"));

		// v7.00.02 mod start
		// 異動区分 : 異動年月日時分秒
//		template.set(EKK1091D010CBSMsg.IDO_DTM,
//				com.fujitsu.futurity.bp.custom.common.JFUBPCommon
//						.getOpeDateTimeStamp(null));	
		
		template.set(EKK1091D010CBSMsg.IDO_DTM,
				JCCBPCommon.getOpeDateTimeStamp(null));
		// v7.00.02 mod end

		// 進捗ステータス
		template.set(EKK1091D010CBSMsg.PRG_STAT, JKKSvcConst.PRG_STAT_1002);

		// 進捗特記事項
		//ANK-4416-00-00 MOD START
		//template.set(EKK1091D010CBSMsg.PRG_TKJK_1, makePrgThik(inMap, workMap));
		if(UPD_INTR_CD.equals(updInfo))
		{
			String intrCdMsg = makePrgThik(inMap, workMap);
			
			template.set(EKK1091D010CBSMsg.PRG_TKJK_1, intrCdMsg);
			
			//クーポンコード更新時用に格納しておく
			inMap.put("intr_cd_msg", intrCdMsg);
			
		}else if(UPD_COUPON_CD.equals(updInfo))
		{
			template.set(EKK1091D010CBSMsg.PRG_TKJK_2, makePrgThik2(inMap, workMap));
		}
		//ANK-4416-00-00 MOD END

	}

	/**
	 * templateに対してEKK0481B001の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0481B001InMsg(CAANMsg template,
											HashMap<String, Object> inMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0481B001CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0481B001CBSMsg.TEMPLATEID, EKK0481B001);

		// 機能コード："2"サービス対象契約一覧紹介 */
		template.set(EKK0481B001CBSMsg.FUNC_CODE, FUNC_CD_1);

		// サービス契約番号:リクエストより取得した被紹介者サービス契約番号を設定する
		template.set(EKK0481B001CBSMsg.KEY_SVC_KEI_NO, (String) inMap
				.get("hi_svc_kei_no"));

	}

	/**
	 * templateに対してEKK0451A010の条件に関する部分を設定する
	 * 
	 * @param inMap
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0451A010InMsg(CAANMsg template,
											HashMap<String, Object> inMap, 
											HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0451A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0451A010CBSMsg.TEMPLATEID, EKK0451A010);

		// 機能コード："2"割引サービス契約一意照会(カレント) */
		template.set(EKK0451A010CBSMsg.FUNC_CODE, FUNC_CD_2);

		// 割引サービス契約番号:リクエストより取得した割引サービス契約番号を設定する
		template.set(EKK0451A010CBSMsg.KEY_WRIB_SVC_KEI_NO, (String) workMap
				.get("wrib_svc_kei_no"));

		// v7.00.02 mod start
		// 予約適用年月日:現在日付を入力
//		template.set(EKK0451A010CBSMsg.KEY_RSV_APLY_YMD,
//				com.fujitsu.futurity.bp.custom.common.JFUBPCommon
//						.getOpeDateTimeStamp(null).substring(0, 8));
		
		template.set(EKK0451A010CBSMsg.KEY_RSV_APLY_YMD,
				JCCBPCommon.getOpeDate(null));
		// v7.00.02 mod end

	}

//ANK1756-00-00 2014/02/06 DEL START
//	/**
//	 * templateに対してEKK2311B004の条件に関する部分を設定する
//	 * 
//	 * @param template
//	 * @param inHash
//	 */
//	private void mappingEKK2311B004InMsg(CAANMsg template,
//												HashMap<String, Object> inMap) {
//
//		// 全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK2311B004CBSMsg()
//				.getContents());
//
//		// テンプレートID(SIFのID)
//		template.set(EKK2311B004CBSMsg.TEMPLATEID, EKK2311B004);
//
//		// 機能コード："2"サービス契約一意照会(カレント) */
//		template.set(EKK2311B004CBSMsg.FUNC_CODE, FUNC_CD_1);
//
//		template.set(EKK2311B004CBSMsg.KEY_WRSV_APLY_JKN_SBT_CD,
//				WRSV_APLY_JKN_SBT_CD_02);
//
//	}
//ANK1756-00-00 2014/02/06 DEL END

//ANK-1756-00-00 2014/02/06 ADD START
	/**
	 * templateに対してEKK2311B004の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inMap
	 */
	private void mappingEKK2391B003InMsg(CAANMsg template,
												HashMap<String, Object> inMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK2391B003CBSMsg()
				.getContents());

		// テンプレートID(SIFのID)
		template.set(EKK2391B003CBSMsg.TEMPLATEID, EKK2391B003);

		// 機能コード："1"*/
		template.set(EKK2391B003CBSMsg.FUNC_CODE, FUNC_CD_1);

		//データ抽出項目設定条件種別コード
		template.set(EKK2391B003CBSMsg.KEY_DCHSKM_SETE_JKN_SBT_CD,DCHSKM_SETE_JKN_SBT_CD_12);

	}
//ANK-1756-00-00 2014/02/06 ADD END
	
	/**
	 * 条件部の共通する項目の設定
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @param template
	 *            template 条件の設定先
	 * @param workMap
	 * @throws RequestParameterException
	 */
	public void editBasicCmn(IRequestParameterReadOnly param, 
							CAANMsg template,
							HashMap<String, Object> workMap) 
							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);
		workMap.put(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

	}

	/**
	 * templateに対してEKK2891D010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK2891D010InMsg(CAANMsg template,
												HashMap<String, Object> inMap, 
												HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK2891D010CBSMsg()
				.getContents());

		// テンプレートID(SIFのID)
		template.set(EKK2891D010CBSMsg.TEMPLATEID, EKK2891D010);

		// 機能コード："リクエストパラメータを設定"
		template.set(EKK2891D010CBSMsg.FUNC_CODE, inMap.get("func_code"));

		// サービス契約番号
		template.set(EKK2891D010CBSMsg.SVC_KEI_NO, inMap
				.get("hi_svc_kei_no"));

		// 紹介コード
		if (isCallIntrView(inMap)) {
			template.set(EKK2891D010CBSMsg.INTR_CD, inMap.get("intr_cd"));
		} else {
			template.set(EKK2891D010CBSMsg.INTR_CD, workMap
					.get("intr_cd"));
		}

		// v7.00.02 mod start
		// 紹介コード設定年月日
//		template.set(EKK2891D010CBSMsg.INTR_CD_SETTE_YMD,
//				com.fujitsu.futurity.bp.custom.common.JFUBPCommon
//						.getOpeDateTimeStamp(null).substring(0, 8));
		
		template.set(EKK2891D010CBSMsg.INTR_CD_SETTE_YMD,
				JCCBPCommon.getOpeDate(null));

		// v7.00.02 mod end
		// 照会キャンペーン割引サービス契約登録年月日
		template.set(EKK2891D010CBSMsg.INTR_CMP_WRIBSVK_ADD_YMD, workMap
				.get("intr_cmp_wribsvk_add_ymd"));

	}

	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * msgList CAANMsgクラス
	 * param 業務データ取得・書込用I/F
	 * fixedText ユーザ任意文字列
	 * return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editResultRP(Map<?, ?> msgList,
													IRequestParameterReadWrite param, 
													HashMap<String, Object> inMap,
													HashMap<String, Object> workMap)
													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、ステータス取得
		String templateId = template.getString(JCMConstants.TEMPLATE_ID_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);
		// ユーザデータ情報にエラー情報をマッピング
		Object[][] contents = null;
		
		//ANK-1756-00-00 2014/02/06 MOD START
//		if (EKK0081A010.equals(templateId)){
//			contents = new EKK0081A010CBSMsg().getContents();
//		}else if(EKK0311B001.equals(templateId)){	
//			contents = new EKK0311B001CBSMsg().getContents();
//		}else if(EKK0081C310.equals(templateId)){
//			contents = new EKK0081C310CBSMsg().getContents();
//		}else if(EKK2891A010.equals(templateId)){	
//			contents = new EKK2891A010CBSMsg().getContents();
//		}else if(EKK2891C020.equals(templateId)){	
//			contents = new EKK2891C020CBSMsg().getContents();
//		}else if(EKK2891D010.equals(templateId)){
//			contents = new EKK2891D010CBSMsg().getContents();
//		}else if(EKK2891E010.equals(templateId)){	
//			contents = new EKK2891E010CBSMsg().getContents();
//		}else if(EKK2311B004.equals(templateId)){
//			contents = new EKK2311B004CBSMsg().getContents();
//		}else if(EKK0481B001.equals(templateId)){
//			contents = new EKK0481B001CBSMsg().getContents();
//		}else if(EKK0451A010.equals(templateId)){	
//			contents = new EKK0451A010CBSMsg().getContents();
//		}else if(EKK1091D010 .equals(templateId)){
//			contents = new EKK1091D010CBSMsg().getContents();
//		}
		
		if (EKK0081A010.equals(templateId)) {
			contents = new EKK0081A010CBSMsg().getContents();
		} else if (EKK0311B001.equals(templateId)) {
			contents = new EKK0311B001CBSMsg().getContents();
		} else if (EKK0081C310.equals(templateId)) {
			contents = new EKK0081C310CBSMsg().getContents();
		} else if (EKK2891A010.equals(templateId)) {
			contents = new EKK2891A010CBSMsg().getContents();
		} else if (EKK2891C020.equals(templateId)) {
			contents = new EKK2891C020CBSMsg().getContents();
		} else if (EKK2891D010.equals(templateId)) {
			contents = new EKK2891D010CBSMsg().getContents();
		} else if (EKK2891E010.equals(templateId)) {
			contents = new EKK2891E010CBSMsg().getContents();
		} else if (EKK2391B003.equals(templateId)) {
			contents = new EKK2391B003CBSMsg().getContents();
		} else if (EKK0481B001.equals(templateId)) {
			contents = new EKK0481B001CBSMsg().getContents();
		} else if (EKK0451A010.equals(templateId)) {
			contents = new EKK0451A010CBSMsg().getContents();
		} else if (EKK1091D010.equals(templateId)) {
			contents = new EKK1091D010CBSMsg().getContents();
		}
		//ANK-1756-00-00 2014/02/06 MOD END
		//ANK-4416-00-00 ADD START
		else if (EKK0311B002.equals(templateId)) {
			contents = new EKK0311B002CBSMsg().getContents();
		}else if (EKK0311A010.equals(templateId)) {
			contents = new EKK0311A010CBSMsg().getContents();
		}else if (EKK0311C010.equals(templateId)) {
			contents = new EKK0311C010CBSMsg().getContents();
		}else if (EKK1091C010.equals(templateId)) {
			contents = new EKK0311C010CBSMsg().getContents();
		}
		
		//ANK-4416-00-00 ADD END
		

		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));

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = returnCode.toString();
		int status = template.getInt(JCMConstants.STATUS_INT_KEY);

		//サービス契約情報変更(紹介コード）の場合
		if(EKK0081C310.equals(templateId)){
	
			getEKK0081C310Msg(msgList, workMap);
			
			if(!JKKStringUtil.isNullBlank((String)workMap.get("svc_kei_no_err_o"))){
				
				return param;
				
			}
		}
		
		//ANK-4416-00-00 ADD START
		//進捗登録の場合
		if(EKK1091D010.equals(templateId)){
			
			//進捗登録情報を格納
			inMap.put("prg_no", template.getString(EKK1091D010CBSMsg.PRG_NO));
			inMap.put("upd_dtm_bf", template.getString(EKK1091D010CBSMsg.ADD_DTM));
		}
		//ANK-4416-00-00 ADD END
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if (!("0".equals(rtnCode) && 0 == status)) {
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode,
					status);
			throw scCallEx;
		}

		return param;
	}

	/**
	 * 業務データの取得処理です。
	 * @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();
	}

	/**
	 * 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 sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0081A010InMsg(Map<?, ?> sIFResult,
										HashMap<String, Object> workMap) 
										throws RequestParameterException {
		
		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return;
		}
		
		// 更新前世代登録年月日時分秒
		workMap.put("upd_dtm_bf", templateArray[0]
				.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
		// 被紹介者申込明細番号
		workMap.put("hi_mskm_dtl_no", templateArray[0]
				.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
		// 紹介コード
		workMap.put("intr_cd", templateArray[0]
				.getString(EKK0081A010CBSMsg1List.INTR_CD));
		// 更新前紹介コード
		workMap.put("intr_cd_bf", templateArray[0]
				.getString(EKK0081A010CBSMsg1List.INTR_CD));
		// 自動照査処理状態コード
		workMap.put("auto_shosa_tran_stat_cd",templateArray[0]
				.getString(EKK0081A010CBSMsg1List.SHOSA_DSL_FIN_CD));
		// サービス契約ステータス
		workMap.put("svc_kei_stat", templateArray[0]
				.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		//ANK-4416-00-00 ADD START
		// サービスコード
		workMap.put("svc_cd", templateArray[0]
				.getString(EKK0081A010CBSMsg1List.SVC_CD));
		//ANK-4416-00-00 ADD END
	}

	/**
	 * 紹介一覧照会の結果を取得する
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0311B001InMsg(Map<?, ?> sIFResult,
										HashMap<String, Object> intrInfoCC)
										throws RequestParameterException {


		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0311B001CBSMsg.EKK0311B001CBSMSG1LIST);
		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return;
		}
		
		// 紹介者お客さまID
		intrInfoCC.put("sho_svc_kei_no", templateArray[0]
				.getString(EKK0311B001CBSMsg1List.SVC_KEI_NO));
		// 紹介者SYSID
		intrInfoCC.put("sho_sysid", templateArray[0]
				.getString(EKK0311B001CBSMsg1List.SYSID));
		// 紹介者料金グループ名
		intrInfoCC.put("sho_prg_grp_nm", templateArray[0]
				.getString(EKK0311B001CBSMsg1List.PRC_GRP_NM));
		// v7.00.02 mod start
		// 紹介者契約者名
//		intrInfoCC.put("sho_cust_nm", templateArray[0]
//				.getString(EKK0311B001CBSMsg1List.SHOKAISHA_NM));
		
		intrInfoCC.put("sho_cust_nm", templateArray[0]
				.getString(EKK0311B001CBSMsg1List.CUST_NM));
		// v7.00.02 mod end
		// 紹介コード
		intrInfoCC.put("intr_cd", templateArray[0]
				.getString(EKK0311B001CBSMsg1List.INTR_CD));
		// ANK-3548-00-00 ADD START
		//有効期限年月日
		intrInfoCC.put("yk_kigen_ymd", templateArray[0]
				.getString(EKK0311B001CBSMsg1List.YK_KIGEN_YMD));
		// ANK-3548-00-00 ADD END
		

	}

	/**
	 * 開通後紹介キャンペーン適用ワーク一意照会の結果を取得
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK2891A010Msg(Map<?, ?> sIFResult,
											HashMap<String, Object> workMap)
											throws RequestParameterException {

		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK2891A010CBSMsg.EKK2891A010CBSMSG1LIST);
		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return;
		}
		
		// 紹介コード
		workMap.put("wk_intr_cd", templateArray[0]
				.getString(EKK2891A010CBSMsg1List.INTR_CD));
		// 照会キャンペーン割引サービス契約登録年月日
		workMap.put("intr_cmp_wribsvk_add_ymd", templateArray[0]
				.getString(EKK2891A010CBSMsg1List.INTR_CMP_WRIBSVK_ADD_YMD));
		// 更新年月日
		workMap.put("wk_upd_dtm_bf", templateArray[0]
				.getString(EKK2891A010CBSMsg1List.UPD_DTM));

	}

	
	/**
	 * 開通後紹介キャンペーン適用ワーク一意照会の結果を取得
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0081C310Msg(Map<?, ?> sIFResult,
											HashMap<String, Object> workMap)
											throws RequestParameterException {

		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		
		if (null == template) {

			return;
		}
		
		// 紹介コード
		workMap.put("svc_kei_no_err_o", template
				.getString(EKK0081C310CBSMsg.SVC_KEI_NO_ERR_O));
		// 照会キャンペーン割引サービス契約登録年月日
		workMap.put("err_flg_o", template
				.getString(EKK0081C310CBSMsg.ERR_FLG_O));

	}

//ANK1756-00-00 2014/02/06 DEL START
//	/**
//	 * 割引サービス適用条件一覧紹介の結果を取得する
//	 * 
//	 * @param sIFResult
//	 * @param workMap
//	 * @param userData
//	 * @throws RequestParameterException
//	 */
//
//	private ArrayList<String> getEKK2311B004InMsg(Map<?, ?> sIFResult,
//														HashMap<String, Object> workMap) 
//														throws RequestParameterException {
//
//
//		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		CAANMsg template = templates[0];
//		CAANMsg[] templateArray = template.getCAANMsgList(EKK2311B004CBSMsg.EKK2311B004CBSMSG1LIST);
//
//		ArrayList<String> svcCdList = new ArrayList<String>();
//
//		if (null == templateArray
//				|| 0 == templateArray.length) {
//
//			return svcCdList;
//		}
//		
//		for (int i = 0; i < templateArray.length; i++) {
//
//			// 割引サービスコード
//			svcCdList.add(templateArray[i]
//					.getString(EKK2311B004CBSMsg1List.WRIB_SVC_CD));
//
//		}
//
//		return svcCdList;
//	}
//ANK1756-00-00 2014/02/06 DEL END

//	 * 割引サービス適用条件一覧紹介の結果を取得する
//	 * 
//	 * @param sIFResult
//	 * @param workMap
//	 * @param userData
//	 * @throws RequestParameterException
//	 */

	//ANK-1756-00-00 2014/02/06 ADD START
	/**
	 * 
	 * EKK2391B003の結果取得
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @throws RequestParameterException
	 */
	private ArrayList<String> getEKK2391B003InMsg(Map<?, ?> sIFResult,
														HashMap<String, Object> workMap) 
														throws RequestParameterException {


		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK2391B003CBSMsg.EKK2391B003CBSMSG1LIST);

		ArrayList<String> wribCdList = new ArrayList<String>();

		if (null == templateArray
				|| 0 == templateArray.length) {

			return wribCdList;
		}
		
		for (int i = 0; i < templateArray.length; i++) {

			// 割引サービスコード
			wribCdList.add(templateArray[i]
					.getString(EKK2391B003CBSMsg1List.DCHSKM_SETE_JKN_VALUE_1));

		}

		return wribCdList;
	}
	//ANK-1756-00-00 2014/02/06 ADD END
	/**
	 * 割引サービス契約一意照会の結果を取得する
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0451A010InMsg(Map<?, ?> sIFResult,
										HashMap<String, Object> workMap) 
										throws RequestParameterException {

		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0451A010CBSMsg.EKK0451A010CBSMSG1LIST);
		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return;
		}
		
		// 割引サービスコード
		workMap.put("wrib_svc_cd", templateArray[0]
				.getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD));

		// 割引登録年月日
		workMap.put("wrib_add_ymd", templateArray[0]
				.getString(EKK0451A010CBSMsg1List.WRIB_ADD_YMD));
		
		// 割引契約ステータス
		workMap.put("wrib_svc_kei_stat", templateArray[0]
				.getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT));

	}

	/**
	 * 割引サービス対象契約一覧紹介の結果を取得
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private ArrayList<String> getEKK0481B001InMsg(Map<?, ?> sIFResult,
													HashMap<String, Object> workMap) 
													throws RequestParameterException {

		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0481B001CBSMsg.EKK0481B001CBSMSG1LIST);


		ArrayList<String> wribSvcKeiList = new ArrayList<String>();

		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return wribSvcKeiList;
		}
		
		for (int i = 0; i < templateArray.length; i++) {

			// 割引サービス契約
			wribSvcKeiList.add(templateArray[i]
					.getString(EKK0481B001CBSMsg1List.WRIB_SVC_KEI_NO));

		}

		return wribSvcKeiList;

	}

	/**
	 * 処理区分が登録時の処理
	 * 
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param intrInfoCC
	 * @return
	 * @throws Throwable
	 */
	private boolean insertTrn(IRequestParameterReadWrite param,
								SessionHandle handle, 
								HashMap<String, Object> workMap,
								HashMap<String, Object> inMap) 
								throws Throwable {

		if (isSvoaShdcsResult(workMap)) {

			printlnEjbLog("isSvoaShdcsResult ワークスキーマレコード有（更新処理）");
			
			// レコードが存在して場合開通後紹介キャンペーン適用ワーク更新処理へ
			changeSvoaSwk(param, handle, workMap, inMap);

		} else {
			
			printlnEjbLog("isSvoaShdcsResult ワークスキーマレコード無（登録処理）");
			
			// レコードが存在しなかった場合開通後紹介キャンペーン適用ワーク登録処理へ
			insertSvoaSwk(param, handle, workMap, inMap);

		}

		return true;
	}

	/**
	 * 処理区分が削除時の処理
	 * 
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param intrInfoCC
	 * @return true 処理実行 false 処理実行なし
	 * @throws Throwable
	 */
	private boolean deleteTrn(IRequestParameterReadWrite param,
								SessionHandle handle, 
								HashMap<String, Object> workMap,
								HashMap<String, Object> inMap) 
								throws Throwable {

		
		// 開通後紹介キャンペーン適用ワークにレコードが存在するかをチェックする
		if (isSvoaShdcsResult(workMap)) {

			// 開通後紹介キャンペーン適用ワーク削除を呼び出す
			callEKK2891E010SC(param, handle, workMap, inMap);

			return true;
		}

		return false;

	}

	/**
	 * 開通後紹介キャンペーン適用ワーク登録時の処理
	 * 
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return
	 * @throws Throwable
	 */
	private boolean insertSvoaSwk(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap) 
									throws Throwable {

		// 割引の登録年月日を取得
		makeIntrWribAddYmd(param, handle, workMap, inMap);

		// 開通後紹介キャンペーン適用ワーク登録インターフェイス呼出
		callEKK2891D010SC(param, handle, workMap, inMap);

		return true;

	}

	/**
	 * 開通後紹介キャンペーン適用ワーク更新時の処理
	 * 
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return
	 * @throws Throwable
	 */
	private boolean changeSvoaSwk(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap) 
									throws Throwable {

		if (isWrvymdAndIntrCdBlank(workMap)) {
			
			// 両方値がある場合の処理、異動区分を元に更新対象を判定する
			if (!isCallIntrView(inMap)) {

				// 紹介コード更新画面以外から来た場合の処理
				makeIntrWribAddYmd(param, handle, workMap, inMap);

			}

		} else {

			// どちらかに値があった場合の処理、登録年月日に値が存在するかを確認する
			if (!isIntrWribAddYmd(workMap)) {

				// 登録年月日が空白だった場合、登録年月日を取得する
				makeIntrWribAddYmd(param, handle, workMap, inMap);

			}

		}

		// 紹介コードを更新する更新
		callEKK2891C020SC(param, handle, workMap, inMap);

		return true;
	}

	/**
	 * 紹介コードと紹介キャンペーン割引サービス契約登録年月日が両方nullかを判定する
	 * 
	 * @param parentMap
	 * @return true 両方値あり false どちらかに値あり
	 */
	private boolean isWrvymdAndIntrCdBlank(HashMap<String, Object> parentMap) {

		String intrCd = (String) parentMap.get("wk_intr_cd");

		String intrCmpWribsvkAddYmd = (String) parentMap
				.get("intr_cmp_wribsvk_add_ymd");

		if (!JKKStringUtil.isNullBlank(intrCd)
				&& !JKKStringUtil.isNullBlank(intrCmpWribsvkAddYmd)) {

			return true;

		}

		return false;
	}

	/**
	 * 実行チェック処理 処理実行判定のため サービス契約番号、紹介コード両方がNullかの判定を行う
	 * 
	 * @param inMap
	 * @return false 両方Null true どちらかに値が格納されている
	 */
	private boolean checkTrnChk(HashMap<String, Object> inMap) {

		// 被紹介者のサービス契約番号を取得する
		String svcKeiNo = (String) inMap.get("hi_svc_kei_no");

		// 紹介コードを取得する
		String intrCd = (String) inMap.get("intr_cd");
		
		//ANK-4416-00-00 ADD START
		// クーポンコードを取得する
		String couponCd = (String) inMap.get("coupon_cd");
		//ANK-4416-00-00 ADD END

		//ANK-4416-00-00 MOD START
//		if (JKKStringUtil.isNullBlank(svcKeiNo) && JKKStringUtil.isNullBlank(intrCd)) {
		// サービス契約番号と紹介コードとクーポンコードが空白orNullであるかを確認する
		if (JKKStringUtil.isNullBlank(svcKeiNo) && JKKStringUtil.isNullBlank(intrCd) && JKKStringUtil.isNullBlank(couponCd)) {
		//ANK-4416-00-00 MOD END

			// すべてNullだった場合、以降の処理は実行しない

			return false;
		}

		return true;
	}

	/**
	 * 処理区分判定処理 処理区分が初期表示か検索かを判断する
	 * 
	 * @param inMap
	 * @return true 初期表示時 false 検索時
	 */
	private boolean checkTrnDiv(HashMap<String, Object> inMap) {

		// 被紹介者のサービス契約番号を取得する
		String svcKeiNo = (String) inMap.get("hi_svc_kei_no");

		// 処理区分判定のため、被紹介者のサービス契約番号の存在チェックを行う
		if (JKKStringUtil.isNullBlank(svcKeiNo)) {

			return false;
		}

		return true;
	}

	/**
	 * サービス契約一覧処理実行判定を行う
	 * 
	 * @param workMap
	 * @return true 紹介コード有 false 紹介コード無
	 */
	private boolean checkIntrCd(HashMap<String, Object> workMap) {

		// 紹介コードを取得する
		String intrCd = (String) workMap.get("intr_cd");

		if (JKKStringUtil.isNullBlank(intrCd)) {

			return false;
		}

		return true;
	}
	
	//ANK-4416-00-00 ADD START
	/**
	 * 紹介一覧処理実行判定を行う
	 * 
	 * @param workMap
	 * @return true クーポンコード有 false クーポンコード無
	 */
	private boolean checkCouponCd(HashMap<String, Object> workMap) {

		// 紹介コードを取得する
		String couponCd = (String) workMap.get("coupon_cd");

		if (JKKStringUtil.isNullBlank(couponCd)) {

			return false;
		}

		return true;
	}
	//ANK-4416-00-00 ADD END


	/**
	 * 開通後紹介キャンペーン適用ワーク一意紹介実行結果を元に 該当のレコードが存在するかを確認する
	 * 
	 * @param workMap
	 * @return true 存在する場合 false 存在しない場合
	 */
	private boolean isSvoaShdcsResult(HashMap<String, Object> workMap) {

		CAANMsg[] EKK2891A010CBSMsgList = (CAANMsg[]) workMap
				.get(EKK2891A010CBSMsg.EKK2891A010CBSMSG1LIST);
		// 取得結果内容の存在確認
		if (null == EKK2891A010CBSMsgList
				|| 0 == EKK2891A010CBSMsgList.length) {

			return false;
		}

		return true;
	}

	// 2014/0/23追記 後で消します

	/**
	 * 入力された紹介コードとサービスインターフェイスより取得した 紹介コードが両方空白ornullかを判定する
	 * 
	 * @param workMap
	 *            作業マップ
	 * @param inMap
	 *            リクエスト
	 * @return true 両方空白 false 値あり
	 */
	private boolean isIntrCdBlank(HashMap<String, Object> workMap,
			HashMap<String, Object> inMap) {
		
		printlnEjbLog("isIntrCdBlank start");
		
		// 紹介コードが存在するかを判定する
		if (JKKStringUtil.isNullBlank((String) workMap.get("intr_cd"))
				&& JKKStringUtil.isNullBlank((String) inMap.get("intr_cd"))
				&& isCallIntrView(inMap)) {
			
			printlnEjbLog("isIntrCdBlank end");
			
			return true;

		}
		printlnEjbLog("isIntrCdBlank end");
		return false;
	}

	/**
	 * 呼出元が紹介コード更新時かを確認する
	 * 
	 * @param parentMap
	 * @return true 紹介コード更新 false 紹介コード更新以外
	 */
	private boolean isCallIntrView(HashMap<String, Object> parentMap) {

		String idoDiv = (String) parentMap.get("ido_div");

		if (IDO_DIV_00032.equals(idoDiv)) {

			return true;

		}

		return false;
	}

	/**
	 * サービス契約ステータスが提供中以降かを判定する
	 * 
	 * @param parentMap
	 * @return true 提供中以降(解約含む） false 提供中以前(キャンセル済み含む)
	 */
	private boolean isSvcKeiStart(HashMap<String, Object> parentMap) {

		String svcKeiStat = (String) parentMap.get("svc_kei_stat");
		
		
		if (svcKeiStat.compareTo(JKKSvcConst.SVC_KEI_STAT_100) >= 0 && svcKeiStat.compareTo(JKKSvcConst.SVC_KEI_STAT_920) != 0) {

			
			return true;

		}

		return false;

	}

	/**
	 * リクエストパラメータより取得した処理区分によって 処理を判定する
	 * 
	 * @param parentMap
	 * @return true 登録 false 削除
	 */
	private boolean checkChgTrnDiv(HashMap<String, Object> parentMap) {

		String trnDiv = (String) parentMap.get("trn_div");

		if (TRN_DIV_INSERT.equals(trnDiv)) {

			return true;
		}

		return false;
	}

	/**
	 * 紹介キャンペーン割引サービス契約登録年月日が存在するかを確認する
	 * 
	 * @param parentMap
	 * @return true 存在する false 存在しない
	 */
	private boolean isIntrWribAddYmd(HashMap<String, Object> parentMap) {

		String intrCmpWribsvkAddYmd = (String) parentMap
				.get("intr_cmp_wribsvk_add_ymd");

		if (!JKKStringUtil.isNullBlank(intrCmpWribsvkAddYmd)) {

			return true;

		}

		return false;
	}

	/**
	 * 紹介キャンペーン割引サービス契約登録年月日取得処理
	 * 
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return true 紹介の割引サービス契約が存在した場合 false 紹介の割引サービス契約がなかった場合
	 * @throws Throwable
	 */
	private boolean makeIntrWribAddYmd(IRequestParameterReadWrite param,
										SessionHandle handle, 
										HashMap<String, Object> workMap,
										HashMap<String, Object> inMap) 
										throws Throwable {

		ArrayList<String> wribCdList = null;
		ArrayList<String> wribSvcKeiList = null;
		ArrayList<String> wribAddYmdList = new ArrayList<String>();
		// 紹介用割引サービスコードリストを取得
		//ANK-1756-00-00 2014/02/06 DEL START
		//wribCdList = callEKK2311B004SC(param, handle, workMap, inMap);
		//ANK-1756-00-00 2014/02/06 DEL END
		
		//ANK-1756-00-00 2014/02/06 ADD START
		//データ項目抽出設定より、対象割引サービスコードを取得
		wribCdList = callEKK2391B003SC(param, handle, workMap, inMap);
		//ANK=1756-00-00 2014/02/06 ADD END
		
		// 割引サービス契約番号リストを取得
		wribSvcKeiList = callEKK0481B001SC(param, handle, workMap, inMap);

		// 割引サービス契約分ループを行う
		for (int i = 0; i < wribSvcKeiList.size(); i++) {

			// リスト内の割引サービス契約番号を取得
			String wribSvcKei = wribSvcKeiList.get(i);

			// 作業マップに割引サービス契約番号を取得
			workMap.put("wrib_svc_kei_no", wribSvcKei);

			// 割引サービス契約一意照会を実行する
			callEKK0451A010SC(param, handle, workMap, inMap);

			String wribSvcCd = (String) workMap.get("wrib_svc_cd");
			
			String wribSvcKeiStat =(String)workMap.get("wrib_svc_kei_stat");
			
			if (wribCdList.contains(wribSvcCd) 
			//v7.00.04 2014/02/25 Mod Start
					//&& wribSvcKeiStat.compareTo(WRIB_SVC_KEI_STAT_010) == 0
					&& wribSvcKeiStat.compareTo(WRIB_SVC_KEI_STAT_910) != 0
					&& wribSvcKeiStat.compareTo(WRIB_SVC_KEI_STAT_920) != 0) {
			//v7.00.04 2014/02/25 Mod End
				// 紹介の割引が存在した場合割引登録年月日リストに一意照会の結果を格納
				String wribAddYmd = (String)workMap.get("wrib_add_ymd");
				
				wribAddYmdList.add(wribAddYmd);
			}
		}
		
		if(!wribAddYmdList.isEmpty()){
			//最大値を取得する
			
			String maxYmd =checkWribMaxYmd(wribAddYmdList);
			workMap.put("intr_cmp_wribsvk_add_ymd",maxYmd);
			
			return true;
		}
		
		//作業マップ(wrib_add_ymdを初期化する
		workMap.put("intr_cmp_wribsvk_add_ymd", "");

		return false;

	}

	/**
	 * 進捗特記事項を作成する
	 * 
	 * @param inMap
	 * @param workMap
	 * @return 進捗特記事項に登録するためのメッセージ
	 */
	private String makePrgThik(HashMap<String, Object> inMap,
			HashMap<String, Object> workMap) {

		String newIntrCd = (String) inMap.get("intr_cd");
		String oldIntrCd = (String) workMap.get("intr_cd_bf");

		if(JKKStringUtil.isNullBlank(newIntrCd)){
			newIntrCd = "";
		}
		
		if(JKKStringUtil.isNullBlank(oldIntrCd)){
			oldIntrCd = "";
		}
		
		String intrCdMsg = "紹介コード(変更前)" + oldIntrCd + "(変更後)" + newIntrCd;

		return intrCdMsg;

	}

	/**取得した割引サービス契約番号を元に
	 * 紹介の割引かを判別する
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return true 紹介の割引 false 紹介以外の割引
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private boolean isIntrWrib(IRequestParameterReadWrite param, 
									SessionHandle handle,
									HashMap<String, Object> workMap, 
									HashMap<String, Object> inMap)
									throws Throwable{
		
		ArrayList<HashMap<String,String>> wribSvcKeiMap = new ArrayList<HashMap<String,String>>();
		ArrayList<String> wribCdList = null;

		// ANK-1756-00-00 2014/02/06 DEL START
		// 紹介用割引サービスコードリストを取得
		//wribCdList = callEKK2311B004SC(param, handle, workMap, inMap);
		// ANK-1756-00-00 2014/02/06 DEL END
		// ANK-1756-00-00 2014/02/06 ADD START
		wribCdList = callEKK2391B003SC(param, handle, workMap, inMap);
		// ANK=1756-00-00 2014/02/06 ADD END
		
		// リクエストパラメーターより割引サービス契約番号を取得
		wribSvcKeiMap = (ArrayList<HashMap<String,String>>)inMap.get("wrib_svc_kei_list");
		
		for (HashMap<String, String> tgMap : wribSvcKeiMap) {
			
			// WorkMapへ割引サービス契約番号セット
			workMap.put("wrib_svc_kei_no", tgMap.get("wrib_svc_kei_no"));
			
			// 割引サービス契約一意照会を実行する
			callEKK0451A010SC(param, handle, workMap, inMap);
			
			// 割引サービス契約一意照会より取得した割引サービスコードを取得
			String wribSvcCd = (String) workMap.get("wrib_svc_cd");
			
			//紹介に紐づく割引かを確認
			if (wribCdList.contains(wribSvcCd)) {
				return true;
			}
		}
		return false;
	}
	
	/**割引登録年月日リストから
	 * 最も大きい割引登録年月日を取得する
	 * @param wribAddYmdList
	 * @return 最も大きい割引登録年月日
	 */
	private String checkWribMaxYmd(ArrayList<String>  wribAddYmdList){
		
		String maxYmd =wribAddYmdList.get(0);
		String compareYmd = "";
		
		for(int i = 0; i < wribAddYmdList.size(); i++){
			
			compareYmd = wribAddYmdList.get(i);
	
			// v7.00.02 mod start
			//if(maxYmd.compareTo(compareYmd) == -1 ){
			if(maxYmd.compareTo(compareYmd) <= -1 ){
			// v7.00.02 mod end
				
				maxYmd =  compareYmd;
			}
		}
		return maxYmd;
	}
	
	// ANK-4416-00-00 ADD START
	/**
	 * クーポンコード一覧紹介インターフェイスを呼び出す
	 * 
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @return ステータスコード
	 * @throws Throwable
	 */
	private int callEKK0311B002SC(IRequestParameterReadWrite param, 
									SessionHandle handle,
									HashMap<String, Object> workMap, 
									HashMap<String, Object> inMap)
									throws Throwable {
		
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0311B002への呼び出しパラメータ設定
		template = new CAANMsg(EKK0311B002CBSMsg.class.getName());
		mappingEKK0311B002InMsg(template, inMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK0311B002InMsg(sIFResult, workMap);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	/**
	 * templateに対してEKK0311B002の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0311B002InMsg(CAANMsg template,
											HashMap<String, Object> inMap) { 

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0311B002CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0311B002CBSMsg.TEMPLATEID, EKK0311B002);

		// 機能コード："1"
		template.set(EKK0311B002CBSMsg.FUNC_CODE, FUNC_CD_1);
		
		// サービス契約番号を入力する
		template.set(EKK0311B002CBSMsg.KEY_SVC_KEI_NO_MSKMSHA, (String) inMap.get("hi_svc_kei_no"));
	}
	
	/**
	 * クーポンコード一覧照会の結果を取得する
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0311B002InMsg(Map<?, ?> sIFResult,
										HashMap<String, Object> workMap) 
										throws RequestParameterException {

		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0311B002CBSMsg.EKK0311B002CBSMSG1LIST);
		
		if (null == templateArray || 0 == templateArray.length) {
			return;
		}
		
		// クーポンコード
		workMap.put("coupon_cd", templateArray[0]
				.getString(EKK0311B002CBSMsg1List.INTR_CD));
		// 更新前クーポンコード
		workMap.put("coupon_cd_bf", templateArray[0]
				.getString(EKK0311B002CBSMsg1List.INTR_CD));

	}
	
	/**紹介一覧紹介<紹介コード>インターフェイスを呼び出す(検索用)
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param intrInfoCC
	 * @param intrkey keyとなるコード（1:紹介コード 2:クーポンコード）
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK0311A010SC(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap,
									HashMap<String, Object> intrInfoCC)
									throws Throwable {
		
		printlnEjbLog("callEKK0311A010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0311A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0311A010CBSMsg.class.getName());
		mappingEKK0311A010InMsg(template, inMap, workMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK0311A010InMsg(sIFResult, intrInfoCC);
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK0311A010SC end");
		
		return status;
	}
	
	/**
	 * templateに対してEKK0311A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 * @param couponInputFlg クーポンコード入力有無フラグ trueのとき入力有
	 */
	private void mappingEKK0311A010InMsg(CAANMsg template,
											HashMap<String, Object> inMap, 
											HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0311A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0311A010CBSMsg.TEMPLATEID, EKK0311A010);

		// 機能コード："1"
		template.set(EKK0311A010CBSMsg.FUNC_CODE, FUNC_CD_1);

		
		// 紹介コード	
		template.set(EKK0311A010CBSMsg.KEY_INTR_CD, (String) workMap.get("coupon_cd"));
	}
	
	/**
	 * 紹介一覧照会の結果を取得する
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0311A010InMsg(Map<?, ?> sIFResult,
										HashMap<String, Object> intrInfoCC)
										throws RequestParameterException {


		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0311A010CBSMsg.EKK0311A010CBSMSG1LIST);
		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return;
		}

		// クーポンコード
		intrInfoCC.put("coupon_cd", templateArray[0].getString(EKK0311A010CBSMsg1List.INTR_CD));
		
		
	}
	
	/**紹介一覧紹介<紹介コード>インターフェイスを呼び出す(検索用)
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param intrInfoCC
	 * @param intrkey keyとなるコード（1:紹介コード 2:クーポンコード）
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK0311A010SC_search(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap,
									HashMap<String, Object> intrInfoCC,
									String intrkey)
									throws Throwable {
		
		printlnEjbLog("callEKK0311A010SC_search start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0311A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0311A010CBSMsg.class.getName());
		mappingEKK0311A010InMsg_search(template, inMap, workMap, intrkey);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK0311A010InMsg_search(sIFResult, intrInfoCC, intrkey);
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK0311A010SC_search end");
		
		return status;
	}
	
	/**
	 * templateに対してEKK0311A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 * @param couponInputFlg クーポンコード入力有無フラグ trueのとき入力有
	 */
	private void mappingEKK0311A010InMsg_search(CAANMsg template,
											HashMap<String, Object> inMap, 
											HashMap<String, Object> workMap,
											String intrkey) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0311A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0311A010CBSMsg.TEMPLATEID, EKK0311A010);

		// 機能コード："1"
		template.set(EKK0311A010CBSMsg.FUNC_CODE, FUNC_CD_1);

		// 紹介コードを入力する
		if (KEY_INTR.equals(intrkey)) 
		{
			template.set(EKK0311A010CBSMsg.KEY_INTR_CD, (String) inMap.get("intr_cd"));
		}
		else if (KEY_COUPON.equals(intrkey))
		{
			template.set(EKK0311A010CBSMsg.KEY_INTR_CD, (String) inMap.get("coupon_cd"));
		}
	}
	
	/**
	 * 紹介一覧照会の結果を取得する
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0311A010InMsg_search(Map<?, ?> sIFResult,
										HashMap<String, Object> intrInfoCC,
										String intrkey)
										throws RequestParameterException {


		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0311A010CBSMsg.EKK0311A010CBSMSG1LIST);
		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return;
		}
		if (KEY_INTR.equals(intrkey)) 
		{
			//紹介コード
			intrInfoCC.put("intr_cd", templateArray[0].getString(EKK0311A010CBSMsg1List.INTR_CD));
			
			//コード識別子
			intrInfoCC.put("intr_cd_skbts", templateArray[0].getString(EKK0311A010CBSMsg1List.CD_SKBTS));
		}
		else if (KEY_COUPON.equals(intrkey))
		{
			// クーポンコード
			intrInfoCC.put("coupon_cd", templateArray[0].getString(EKK0311A010CBSMsg1List.INTR_CD));
			
			//有効期限年月日
			intrInfoCC.put("coupon_yk_kigen_ymd", templateArray[0].getString(EKK0311A010CBSMsg1List.YK_KIGEN_YMD));
			
			//コード識別子
			intrInfoCC.put("coupon_cd_skbts", templateArray[0].getString(EKK0311A010CBSMsg1List.CD_SKBTS));
			
			//サービス契約番号(申込者)
			intrInfoCC.put("svc_kei_no_mskmsha", templateArray[0].getString(EKK0311A010CBSMsg1List.SVC_KEI_NO_MSKMSHA));
		}
		
		
	}
	
	/**
	 * クーポンコード更新処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite chgCouponInfo(SessionHandle handle,
													IRequestParameterReadWrite param, 
													String fixedText)throws Throwable 
	{
		printlnEjbLog("chgCouponInfo start");
		
		// 作業用マップ
		HashMap<String, Object> workMap = new HashMap<String, Object>();
		HashMap<String, Object> couponInfoCC = new HashMap<String,Object>();

		// ユーザデータ情報
		HashMap inMap = (HashMap) param.getData(fixedText);
		
		// クーポンコードを取得する
		callEKK0311B002SC(param, handle, workMap, inMap);

		// クーポンコードが存在するかを判定する
		if (isCouponCdBlank(workMap, inMap)) 
		{
			printlnEjbLog("chgCouponInfo クーポンコード存在なし");
			
			// 存在しない場合、以降の処理の必要がないため中断する
			return param;
		}

			
		//クーポンコードの入力がある場合
		if(!JKKStringUtil.isNullBlank((String) inMap.get("coupon_cd")))
		{
			// クーポンコードの紹介情報を取得する
			callEKK0311A010SC_upd(param, handle, workMap, inMap, couponInfoCC, true);
			
			//クーポンコードが紹介スキーマに存在しない場合は実行しない
			if(!JKKStringUtil.isNullBlank((String) couponInfoCC.get("coupon_cd"))){
				// 紹介スキーマを更新する
				callEKK0311C010SC(param, handle, workMap, inMap, couponInfoCC, true);
			}
				
		}else
		{
			// クーポンコードの紹介情報を取得する
			callEKK0311A010SC_upd(param, handle, workMap, inMap, couponInfoCC, false);
			// 紹介スキーマを更新する(サービス契約番号(申込者)クリア処理)
			callEKK0311C010SC(param, handle, workMap, inMap,  couponInfoCC, false);
		}
		
		
		// サービス契約一意照会I/Fを呼び出す(進捗登録用データ検索)
		callEKK0081A010SC(param, handle, workMap, inMap);

		
		//進捗番号が存在するとき(紹介コード更新時に進捗の登録がされていた場合)
		if(!JKKStringUtil.isNullBlank((String)inMap.get("prg_no")))
		{
			//進捗を更新する
			callEKK1091C010SC(param, handle, workMap, inMap);
		}else
		{
			//進捗を登録する
			callEKK1091D010SC(param, handle, workMap, inMap, UPD_COUPON_CD);
		}

		
		param.setData(fixedText, workMap);

		printlnEjbLog("chgCouponInfo end");
		
		return param;
	}
	
	/**
	 * 入力されたクーポンコードとサービスインターフェイスより取得した クーポンコードが両方空白ornullかを判定する
	 * 
	 * @param workMap
	 *            作業マップ
	 * @param inMap
	 *            リクエスト
	 * @return true 両方空白 false 値あり
	 */
	private boolean isCouponCdBlank(HashMap<String, Object> workMap,
			HashMap<String, Object> inMap) {
		
		printlnEjbLog("isCouponCdBlank start");
		
		// クーポンコードが存在するかを判定する
		if (JKKStringUtil.isNullBlank((String) workMap.get("coupon_cd"))
				&& JKKStringUtil.isNullBlank((String) inMap.get("coupon_cd"))
				&& isCallIntrView(inMap)) {
			
			printlnEjbLog("isCouponCdBlank end");
			
			return true;

		}
		printlnEjbLog("isCouponCdBlank end");
		return false;
	}
	
	/**紹介一覧紹介<紹介コード>インターフェイスを呼び出す(更新用)
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param intrInfoCC
	 * @param couponInputFlg クーポンコード入力有無フラグ trueのとき入力有
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK0311A010SC_upd(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap,
									HashMap<String, Object> couponInfoCC,
									boolean couponInputFlg)
									throws Throwable {
		
		printlnEjbLog("callEKK0311A010SC_upd start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0311A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0311A010CBSMsg.class.getName());
		mappingEKK0311A010InMsg_upd(template, inMap, workMap, couponInputFlg);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// SIFの実行結果を設定
		getEKK0311A010InMsg_upd(sIFResult, couponInfoCC);
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK0311A010SC_upd end");
		
		return status;
	}
	
	/**
	 * templateに対してEKK0311A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 * @param couponInputFlg クーポンコード入力有無フラグ trueのとき入力有
	 */
	private void mappingEKK0311A010InMsg_upd(CAANMsg template,
											HashMap<String, Object> inMap, 
											HashMap<String, Object> workMap,
											boolean couponInputFlg) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0311A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0311A010CBSMsg.TEMPLATEID, EKK0311A010);

		// 機能コード："1"
		template.set(EKK0311A010CBSMsg.FUNC_CODE, FUNC_CD_1);

		// 紹介コードを入力する
		if (couponInputFlg) {
			//クーポンコードの入力がある場合
			template.set(EKK0311A010CBSMsg.KEY_INTR_CD, (String) inMap.get("coupon_cd"));
		} else {
			//クーポンコードの入力がない場合
			template.set(EKK0311A010CBSMsg.KEY_INTR_CD, (String) workMap.get("coupon_cd"));
		}
	}
	
	/**
	 * 紹介一覧照会の結果を取得する
	 * 
	 * @param sIFResult
	 * @param workMap
	 * @param userData
	 * @throws RequestParameterException
	 */
	private void getEKK0311A010InMsg_upd(Map<?, ?> sIFResult,
										HashMap<String, Object> couponInfoCC)
										throws RequestParameterException {


		CAANMsg[] templates = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];
		CAANMsg[] templateArray = template.getCAANMsgList(EKK0311A010CBSMsg.EKK0311A010CBSMSG1LIST);
		
		if (null == templateArray
				|| 0 == templateArray.length) {

			return;
		}
		
		// クーポンコード
		couponInfoCC.put("coupon_cd", templateArray[0]
				.getString(EKK0311A010CBSMsg1List.INTR_CD));
		
		//被紹介者名
		couponInfoCC.put("hishokai_nm", templateArray[0]
				.getString(EKK0311A010CBSMsg1List.HISHOKAI_NM));
		
		//被紹介者連絡先メールアドレス
		couponInfoCC.put("hishokai_rrks_mlad", templateArray[0]
				.getString(EKK0311A010CBSMsg1List.HISHOKAI_RRKS_MLAD));
		
		//更新年月日時分秒
		couponInfoCC.put("upd_dtm", templateArray[0]
				.getString(EKK0311A010CBSMsg1List.UPD_DTM));
		
		
	}

	/**紹介情報変更<クーポンコード>インターフェイスを呼出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param couponInputFlg クーポンコード入力有無フラグ trueのとき入力有
	 * @return ステータスコードを返却
	 * @throws Throwable
	 */
	private int callEKK0311C010SC(IRequestParameterReadWrite param, 
										SessionHandle handle,
										HashMap<String, Object> workMap, 
										HashMap<String, Object>inMap,
										HashMap<String, Object> couponInfoCC,
										boolean couponInputFlg)
										throws Throwable{
		
		printlnEjbLog("callEKK0311C010SC start");
		
			HashMap<String, Object> sIFRequest = null;
			CAANMsg template = null;
			ServiceComponentRequestInvoker scCall = null;
			Map<?, ?> sIFResult = null;
			int status = 0;

			// サービスIF共通の情報を設定
			sIFRequest = editInMsgCmn(param);

			// EKK0081C310への呼び出しパラメータ設定
			template = new CAANMsg(EKK0311C010CBSMsg.class.getName());
			mappingEKK0311C010InMsg(template,inMap,couponInfoCC,couponInputFlg);
			editBasicCmn(param, template,workMap);

			// リクエスト用クラスの設定
			sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

			// SC呼び出しクラスの生成
			scCall = new ServiceComponentRequestInvoker();

			// SIFの呼び出し
			sIFResult = scCall.run(sIFRequest, handle);
			
			//エラーマッピング
			editResultRP(sIFResult, param, inMap, workMap);
			
			// ステータスコードの取得
			status = template.getInt(JCMConstants.STATUS_INT_KEY);

			printlnEjbLog("callEKK0311C010SC end");
			
			return status;
		}
	
	/**
	 * templateに対してEKK0311C010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0311C010InMsg(CAANMsg template,
												HashMap<String, Object> inMap,
												HashMap<String, Object> couponInfoCC,
												boolean couponInputFlg) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0311C010CBSMsg()
				.getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0311C010CBSMsg.TEMPLATEID, EKK0311C010);

		// 機能コード："リクエストパラメータ"
		template.set(EKK0311C010CBSMsg.FUNC_CODE, (String) inMap.get("func_code"));
		
		// 紹介コード
		template.set(EKK0311C010CBSMsg.INTR_CD, (String) couponInfoCC.get("coupon_cd"));
		
		//被紹介者名
		template.set("hishokai_nm", (String)couponInfoCC.get("hishokai_nm"));
		
		//被紹介者連絡先メールアドレス
		template.set("hishokai_rrks_mlad",(String)couponInfoCC.get("hishokai_rrks_mlad"));

		// サービス契約番号
		if (couponInputFlg) {
			//クーポンコードの入力がある場合
			template.set(EKK0311C010CBSMsg.SVC_KEI_NO_MSKMSHA, (String) inMap.get("hi_svc_kei_no"));
		}else{
			//クーポンコードの入力がない場合
			template.set(EKK0311C010CBSMsg.SVC_KEI_NO_MSKMSHA, new String());
		}
	
		// 更新前年月日時分秒
		template.set(EKK0311C010CBSMsg.UPD_DTM_BF, couponInfoCC.get("upd_dtm"));

	}
	
	/**
	 * 進捗特記事項を作成する
	 * 
	 * @param inMap
	 * @param workMap
	 * @return 進捗特記事項に登録するためのメッセージ
	 */
	private String makePrgThik2(HashMap<String, Object> inMap,
			HashMap<String, Object> workMap) {

		String newCouponCd = (String) inMap.get("coupon_cd");
		String oldCouponCd = (String) workMap.get("coupon_cd_bf");

		if(JKKStringUtil.isNullBlank(newCouponCd)){
			newCouponCd = "";
		}
		
		if(JKKStringUtil.isNullBlank(oldCouponCd)){
			oldCouponCd = "";
		}
		
		String intrCdMsg = "クーポンコード(変更前)" + oldCouponCd + "(変更後)" + newCouponCd;

		return intrCdMsg;

	}
	
	/**進捗更新インターフェイスを呼び出す
	 * @param param
	 * @param handle
	 * @param workMap
	 * @param inMap
	 * @param updInfo 更新情報(1:紹介コード 2:クーポンコード)
	 * @return ステータスコードを返却する
	 * @throws Throwable
	 */
	private int callEKK1091C010SC(IRequestParameterReadWrite param,
									SessionHandle handle, 
									HashMap<String, Object> workMap,
									HashMap<String, Object> inMap) throws Throwable {	
		printlnEjbLog("callEKK1091C010SC start");
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK1091C010への呼び出しパラメータ設定
		template = new CAANMsg(EKK1091C010CBSMsg.class.getName());
		mappinglEKK1091C010InMsg(template, inMap, workMap);
		editBasicCmn(param, template, workMap);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY,
				new CAANMsg[] { template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, inMap, workMap);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		printlnEjbLog("callEKK1091C010SC end");
		
		return status;
	}
	
	/**
	 * templateに対してEKK1091C010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	
	private void mappinglEKK1091C010InMsg(CAANMsg template,
											HashMap<String, Object> inMap, 
											HashMap<String, Object> workMap) {

		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK1091C010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK1091C010CBSMsg.TEMPLATEID, EKK1091D010);

		// 機能コード："リクエストパラメータ"*/
		template.set(EKK1091C010CBSMsg.FUNC_CODE, (String) inMap.get("func_code"));

		// 進捗番号
		template.set(EKK1091C010CBSMsg.PRG_NO, (String) inMap.get("prg_no"));
		
		// 進捗メモ
		template.setNull(EKK1091C010CBSMsg.PRG_MEMO);

		// 進捗特記事項1
		template.set(EKK1091C010CBSMsg.PRG_TKJK_1, (String) inMap.get("intr_cd_msg"));

		// 進捗特記事項2
		template.set(EKK1091C010CBSMsg.PRG_TKJK_2, makePrgThik2(inMap, workMap));
		
		//更新年月日時分秒(更新前)
		template.set(EKK1091C010CBSMsg.UPD_DTM_BF, (String) inMap.get("upd_dtm_bf"));

	}

	// ANK-4416-00-00 ADD END
	
}
