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.JKKSmtvlIdoInfAddConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2441C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2441C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2441D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2441D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2451B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2451B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2451C010CBSMsg;

@SuppressWarnings({"unchecked"})
public class JKKSmtvlMskmInfoTrkmCC extends AbstractCommonComponent {

	//*********************************************
	// 入出力項目
	//*********************************************
	/** 入出力項目 レコード区分 */
	public static final String PARAM_REC_DIV = "rec_div";

	/** 入出力項目 処理区分 */
	public static final String PARAM_TRAN_DIV = "tran_div";

	/** 入出力項目 事業者区分 */
	public static final String PARAM_JIGYOSHA_DIV = "jigyosha_div";

	/** 入出力項目 事業者コード */
	public static final String PARAM_JIGYOSHA_CD = "jigyosha_cd";

	/** 入出力項目 事業者契約管理番号 */
	public static final String PARAM_JIGYOSHA_KEI_KNRI_NO = "jigyosha_kei_knri_no";

	/** 入出力項目 クロスセル料金種別 */
	public static final String PARAM_CROSS_SEL_PRC_SBT = "cross_sel_prc_sbt";

	/** 入出力項目 契約コード */
	public static final String PARAM_KEI_CD = "kei_cd";

	/** 入出力項目 割引料金グループコード */
	public static final String PARAM_WRIBPRC_GRP_CD = "wribprc_grp_cd";

	/** 入出力項目 割引料金ステータス */
	public static final String PARAM_WRIBPRC_GRP_STAT = "wribprc_grp_stat";

	/** 入出力項目 割引料金登録年月日 */
	public static final String PARAM_WRIBPRC_ADD_YMD = "wribprc_add_ymd";

	/** 入出力項目 割引料金更新年月日 */
	public static final String PARAM_WRIBPRC_UPD_YMD = "wribprc_upd_ymd";

	/** 入出力項目 割引料金解除年月日 */
	public static final String PARAM_WRIBPRC_RLS_YMD = "wribprc_rls_ymd";

	/** 入出力項目 割引料金引継ぎ番号 */
	public static final String PARAM_WRIBPRC_HKTGI_NO = "wribprc_hktgi_no";

	/** 入出力項目 割引料金引継ぎ種別 */
	public static final String PARAM_WRIBPRC_HKTGI_SBT = "wribprc_hktgi_sbt";

	/** 入出力項目 エラーコード */
	public static final String PARAM_ERR_CD = "err_cd";

	/** 入出力項目 KDDIエラーコード */
	public static final String PARAM_KDDI_ERR_CD = "kddi_err_cd";
	
	/** 入出力項目 コース名称コード */
	public static final String PARAM_COURSE_NM_CD = "course_nm_cd";

	/** 入出力項目 ネットサービス申込年月日 */
	public static final String PARAM_NET_SVC_MSKM_YMD = "net_svc_mskm_ymd";

	/** 入出力項目 ネットサービス課金開始年月日 */
	public static final String PARAM_NET_SVC_CHRG_STAYMD = "net_svc_chrg_staymd";

	/** 入出力項目 電話サービス１申込年月日 */
	public static final String PARAM_TEL1_SVC_MSKM_YMD = "tel1_svc_mskm_ymd";

	/** 入出力項目 電話サービス１課金開始年月日 */
	public static final String PARAM_TEL1_SVC_CHRG_STAYMD = "tel1_svc_chrg_staymd";

	/** 入出力項目 SYSID */
	public static final String PARAM_SYSID = "sysid";

	/** 入出力項目 サービス契約番号（ネット） */
	public static final String PARAM_SVC_KEI_NO_NET = "svc_kei_no_net";

	/** 入出力項目 サービス契約番号（電話） */
	public static final String PARAM_SVC_KEI_NO_TEL = "svc_kei_no_tel";

	/** 入出力項目 他事業者割引契約番号 */
	public static final String PARAM_TAJGS_WRIB_KEI_NO = "tajgs_wrib_kei_no";

	/** 入出力項目 他事業者割引契約更新年月日時分秒 */
	public static final String PARAM_TAJGS_WRIB_KEI_UPD_DTM = "tajgs_wrib_kei_upd_dtm";
	
	/** 入出力項目 ＫＤＤＩ割引契約異動通知番号（ネット） */
	public static final String PARAM_KDDI_WKEI_IDT_NO_NET = "kddi_wkei_idt_no_net";
	
	/** 入出力項目 事業者契約管理番号 */
	public static final String PARAM_KDDI_JGS_KEI_KANRI_NO = "kddi_jgs_kei_kanri_no";
	
	/** WORK 異動区分 */
	public static final String WK_IDO_DIV = "ido_div";

	/** WORK 進捗ステータス */
	public static final String WK_PRG_STAT = "prg_stat";

	/** WORK 異動理由コード */
	public static final String WK_IDO_RSN_CD = "ido_rsn_cd";

	/** WORK KDDI割引契約異動通知結果コード */
	public static final String WK_KDDI_WKEI_IDT_RSLT_CD = "kddi_wkei_idt_rslt_cd";

	/** WORK KDDI割引契約異動通知エラーコード */
	public static final String WK_KDDI_WKEI_IDT_ERR_CD = "kddi_wkei_idt_err_cd";

	/** WORK スマートバリュー異動詳細コード */
	public static final String WK_SMTVL_IDO_DTL_CD = "smtvl_ido_dtl_cd";

	/** WORK KDDI割引契約異動通知内容 */
	public static final String WK_KDDI_WKEI_IDT_NAIYO = "kddi_wkei_idt_naiyo";

	/** WORK 申込種別コード */
	public static final String WK_MSKM_SBT_CD = "mskm_sbt_cd";
	
	/** WORK サービス契約番号 */
	public static final String WK_SVC_KEI_NO = "svc_kei_no";
	
	/** WORK 申込更新年月日時分秒（更新前） */
	public static final String WK_MSKM_UPD_DTM_BF = "mskm_upd_dtm_bf";
	
	/** WORK 申込明細番号 */
	public static final String WK_MSKM_DTL_NO = "mskm_dtl_no";
	
	/** WORK 他事業者割引契約更新年月日時分秒（更新前） */
	public static final String WK_TAJGS_UPD_DTM_BF = "mskm_tajgs_upd_dtm_bf";
	
	/** WORK 他事業者割引契約番号 */
	public static final String WK_TAJGS_WRIB_KEI_NO = "tajgs_wrib_kei_no";

	/** WORK 他事業者割引契約対象契約番号 */
	public static final String WK_TAJGSWKEI_TGKEI_NO = "tajgswkei_tgkei_no";
	
	/** 処理区分 2:割引料金登録（契約番号未確認） */
	private static final String PARAM_TRAN_DIV_ADD = "2";

	/** 処理区分 4:割引料金の終了 */
	private static final String PARAM_TRAN_DIV_DSL = "4";
	
	/** 異動区分 スマートバリュー登録・変更 */
	private static final String IDO_DIV_SMTV_ADD_CHGE ="00070";
	
	/** 異動区分 スマートバリュー解約 */
	private static final String IDO_DIV_SMTV_DSL ="00071";
	
	/** 進捗ステータス スマートバリュー登録・変更完了 */
	private static final String PRG_STAT_SMTV_ADD_CHGE ="F090";
	
	/** 進捗ステータス スマートバリュー登録・変更完了 */
	private static final String PRG_STAT_SMTV_DSL ="F091";

	/** KDDI割引契約異動通知結果コード 正常終了 */
	private static final String KDDI_WKEI_IDT_ERR_CD_NORMAL ="0";
	
	/** KDDI割引契約異動通知結果コード エラー */
	private static final String KDDI_WKEI_IDT_ERR_CD_ERR ="1";
	
	/** 異動理由コード 56：その他 */
	private static final String IDO_RSN_CD_OTHER = "56";

	/** 申込種別コード スマートバリュー登録・変更申込 */
	private static final String MSKM_SBT_SMTV_ADD_CHGE ="00043";
	
	/** 申込種別コード スマートバリュー解約申込 */
	private static final String MSKM_SBT_SMTV_ADD_DSL ="00044";
	
	/** 年月日項目の初期値 */
	public static final String YMD_SHKV = "20991231";
	
	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;
	
	/** エラーメッセージ */
	public static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	/**
	 * スマートバリュー申込情報取込反映の初期処理です。<br>
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}

		// リターンコードに正常を設定
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, JCMConstants.RET_NORMAL);
	}

	/**
	 * スマートバリュー申込情報取込反映<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite executeMain(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪スマートバリュー申込情報取込CC 開始");
		
		init(param, fixedText);
		
		// ユーザデータリスト取得
		ArrayList<HashMap<String, Object>> userDataList = (ArrayList<HashMap<String, Object>>)param.getData(fixedText);
		
		// ユーザデータリスト数分ループ
		for (HashMap<String, Object> userData : userDataList)
		{
			HashMap<String, Object> work = new HashMap<String, Object>();
			
			// エラーコードを取得
			String errCd = (String)userData.get(PARAM_ERR_CD);
			// 処理区分を取得
			String tranDiv = (String)userData.get(PARAM_TRAN_DIV);
			// 他事者割引契約番号を取得
			String tajfsWribKeiNo = (String)userData.get(PARAM_TAJGS_WRIB_KEI_NO);
			
			// エラーが存在しない場合
			if(isNullorBlank(errCd))
			{
				// 処理区分:登録
				if(PARAM_TRAN_DIV_ADD.equals(tranDiv))
				{
					// 他事業者割引契約番号が設定されていない場合
					if(isNullorBlank(tajfsWribKeiNo))
					{
						// スマートバリュー情報登録処理
						addSmtvlInf(handle, param, fixedText, userData, work);
					}
					// 他事業者割引契約番号が設定されている場合
					else
					{
						// スマートバリュー情報更新処理
						updSmtvlInf(handle, param, fixedText, userData, work);
					}
					
					// 20130522 スマートバリュー品向による問題@ ADD START
					// サービス開始異動情報登録処理
					addSmtvlIdoInfSvcStart(handle, param, fixedText, userData, work);
					// 20130522 スマートバリュー品向による問題@ ADD END

				}
				// 処理区分:解約
				else if (PARAM_TRAN_DIV_DSL.equals(tranDiv))
				{
					// スマートバリュー情報解約処理
					dslSmtvlInf(handle, param, fixedText, userData, work);
				}
			}
			// エラーが存在する場合
			else
			{
				// スマートバリュー情報エラー処理
				errSmtvlInf(handle, param, fixedText, userData, work);
			}
		}
		
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪スマートバリュー申込情報取込CC 終了");
		// 処理終了
		return param;
	}
	
	/**
	 * スマートバリュー情報登録処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void addSmtvlInf(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, 
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪スマートバリュー情報登録処理 開始");
		
		
		// スマートバリュー情報登録処理で共通で使用するワークエリアの設定
		work.put(WK_IDO_DIV, IDO_DIV_SMTV_ADD_CHGE);							// 異動区分：スマートバリュー登録・変更
		work.put(WK_PRG_STAT, PRG_STAT_SMTV_ADD_CHGE);							// 進捗ステータス：スマートバリュー登録・変更完了
		work.put(WK_IDO_RSN_CD, IDO_RSN_CD_OTHER);								// 異動理由コード:その他
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL START
//		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_NORMAL);		// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL END
		work.put(WK_KDDI_WKEI_IDT_ERR_CD, null);								// KDDI割引契約異動通知エラーコード

		// 申込・申込明細処理
		work.put(WK_MSKM_SBT_CD, MSKM_SBT_SMTV_ADD_CHGE);						// 申込種別コード：スマートバリュー登録・変更申込
		addMskmMskmDtl(handle, param, fixedText, userData, work);
		
		// 他事業者割引契約対象契約適用終了処理　※ネット・電話共に適用終了する
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		tendTajgswkeiTgkei(handle, param, fixedText, userData, work);	

		// 他事業者割引契約登録締結処理
		addCncTajgswkei(handle, param, fixedText, userData, work);

		// 進捗登録処理（ネット）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		addPrg(handle, param, fixedText, userData, work);

		// 進捗登録処理（電話）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_TEL));	// サービス契約番号：サービス契約番号（ネット）
		addPrg(handle, param, fixedText, userData, work);

		// スマートバリュー異動情報登録処理（申込情報の登録）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM);				// スマートバリュー異動詳細コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_NORMAL);		// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_KDDI_WKEI_IDT_NAIYO, getKddiWkeiIdtNaiyo(userData));		// KDDI割引契約異動通知内容
		addSmtvlIdoInf(handle, param, fixedText, userData, work);	

		// スマートバリュー異動情報登録処理（申込取込結果の登録）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM_TKRT);			// スマートバリュー異動詳細コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, null);		// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_KDDI_WKEI_IDT_NAIYO, null);									// KDDI割引契約異動通知内容
		addSmtvlIdoInf(handle, param, fixedText, userData, work);	

		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪スマートバリュー情報登録処理 終了");
		return;
	}

	/**
	 * スマートバリュー情報更新処理
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void updSmtvlInf(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		// スマートバリュー情報更新処理で共通で使用するワークエリアの設定
		work.put(WK_IDO_DIV, IDO_DIV_SMTV_ADD_CHGE);	// 異動区分：スマートバリュー登録・変更
		work.put(WK_PRG_STAT, PRG_STAT_SMTV_ADD_CHGE);	// 進捗ステータス：スマートバリュー登録・変更完了
		work.put(WK_IDO_RSN_CD, IDO_RSN_CD_OTHER);	// 異動理由コード:その他
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL START
//		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_NORMAL);	// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL END
		work.put(WK_KDDI_WKEI_IDT_ERR_CD, null);	// KDDI割引契約異動通知エラーコード

		// 他事業者割引契約締結処理
		cncTajgswkei(handle, param, fixedText, userData, work);

		// 進捗登録処理（ネット）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		addPrg(handle, param, fixedText, userData, work);
		
		// 進捗登録処理（電話）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_TEL));	// サービス契約番号：サービス契約番号（電話）
		addPrg(handle, param, fixedText, userData, work);
		
		// スマートバリュー異動情報登録処理（申込情報の登録）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM);	// スマートバリュー異動詳細コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_NORMAL);	// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_KDDI_WKEI_IDT_NAIYO, getKddiWkeiIdtNaiyo(userData));	// KDDI割引契約異動通知内容
		addSmtvlIdoInf(handle, param, fixedText, userData, work);	
		
		// スマートバリュー異動情報登録処理（申込取込結果の登録）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM_TKRT);	// スマートバリュー異動詳細コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, null);	// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_KDDI_WKEI_IDT_NAIYO, null);	// KDDI割引契約異動通知内容
		addSmtvlIdoInf(handle, param, fixedText, userData, work);
		return;
	}

	/**
	 * スマートバリュー情報解約処理
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void dslSmtvlInf(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		//  スマートバリュー情報解約処理で共通で使用するワークエリアの設定
		work.put(WK_IDO_DIV, IDO_DIV_SMTV_DSL);		// 異動区分：スマートバリュー解約
		work.put(WK_PRG_STAT, PRG_STAT_SMTV_DSL);	// 進捗ステータス：スマートバリュー解約完了
		work.put(WK_IDO_RSN_CD, IDO_RSN_CD_OTHER);	// 異動理由コード:その他
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL START
//		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_NORMAL);	// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL END
		work.put(WK_KDDI_WKEI_IDT_ERR_CD, null);	// KDDI割引契約異動通知エラーコード
		
		
		// 申込・申込明細処理
		// 申込種別コード：スマートバリュー解約申込
		work.put(WK_MSKM_SBT_CD, MSKM_SBT_SMTV_ADD_DSL);		
		addMskmMskmDtl(handle, param, fixedText, userData, work);
		
		// 他事業者割引契約解約処理
		dslTajgswkei(handle, param, fixedText, userData, work);

		// 進捗登録処理（ネット）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		addPrg(handle, param, fixedText, userData, work);
		
		// 進捗登録処理（電話）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_TEL));	// サービス契約番号：サービス契約番号（電話）
		addPrg(handle, param, fixedText, userData, work);
		
		// スマートバリュー異動情報登録処理（申込情報の登録）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM);	// スマートバリュー異動詳細コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_NORMAL);	// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_KDDI_WKEI_IDT_NAIYO, getKddiWkeiIdtNaiyo(userData));	// KDDI割引契約異動通知内容
		addSmtvlIdoInf(handle, param, fixedText, userData, work);	
		
		// スマートバリュー異動情報登録処理（申込取込結果の登録）
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM_TKRT);	// スマートバリュー異動詳細コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, null);	// KDDI割引契約異動通知結果コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_KDDI_WKEI_IDT_NAIYO, null);		// スマートバリュー異動詳細コード
		
		addSmtvlIdoInf(handle, param, fixedText, userData, work);
		
		return;

	}

	/**
	 * スマートバリュー情報エラー処理
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void errSmtvlInf(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		// スマートバリュー情報エラー処理で共通で使用するワークエリアの設定
		work.put(WK_IDO_DIV, IDO_DIV_SMTV_ADD_CHGE);						// 異動区分：スマートバリュー登録・変更
		work.put(WK_PRG_STAT, PRG_STAT_SMTV_ADD_CHGE);						// 進捗ステータス：スマートバリュー登録・変更完了
		work.put(WK_IDO_RSN_CD, IDO_RSN_CD_OTHER);							// 異動理由コード:その他
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL START
//		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_ERR);		// KDDI割引契約異動通知結果コード
//		work.put(WK_KDDI_WKEI_IDT_ERR_CD, (String)userData.get(PARAM_ERR_CD));	// KDDI割引契約異動通知エラーコード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 DEL END
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 START
		// 取込エラーの連携履歴をスマートバリュー照会画面に表示するため(仮登録のスマートバリューが存在する場合のみ表示されることになる)
		work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/15 END

		// スマートバリュー異動情報登録処理（申込情報の登録）
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM);			// スマートバリュー異動詳細コード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, KDDI_WKEI_IDT_ERR_CD_ERR);		// KDDI割引契約異動通知結果コード
		work.put(WK_KDDI_WKEI_IDT_ERR_CD, (String)userData.get(PARAM_ERR_CD));	// KDDI割引契約異動通知エラーコード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_KDDI_WKEI_IDT_NAIYO, getKddiWkeiIdtNaiyo(userData));	// KDDI割引契約異動通知内容
		addSmtvlIdoInf(handle, param, fixedText, userData, work);	
		
		// スマートバリュー異動情報登録処理（申込取込結果の登録）
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD START
		work.put(WK_KDDI_WKEI_IDT_RSLT_CD, null);		// KDDI割引契約異動通知結果コード
		work.put(WK_KDDI_WKEI_IDT_ERR_CD, null);	// KDDI割引契約異動通知エラーコード
		// ANK-1272-00-00 【スマートバリュー】フォロー対応 2013/01/24 ADD END
		work.put(WK_SMTVL_IDO_DTL_CD, JKKStrConst.CD01445_MSKM_TKRT);		// スマートバリュー異動詳細コード
		work.put(WK_KDDI_WKEI_IDT_NAIYO, null);								// KDDI割引契約異動通知内容
		addSmtvlIdoInf(handle, param, fixedText, userData, work);
		return;
	}
	
	/**
	 * 申込・申込明細登録処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void addMskmMskmDtl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪申込・申込明細録処理 開始");
		
		// 申込・申込内容承認登録サービスインターフェイス呼出
		CAANMsg msgEKK0011D020 = callSvcInter(handle, 
												param, 
												editInMsgEKK0011D020(param, userData, work),
												new EKK0011D020CBSMsg().getContents(), 
												userData);
		CAANMsg[] eKK0011D020CBSMSG1list = (CAANMsg[])msgEKK0011D020.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
		HashMap<String, Object> eKK0011D020CBSMSG1 = eKK0011D020CBSMSG1list[0].getMsgData();
		
		work.put(WK_MSKM_UPD_DTM_BF, (String)msgEKK0011D020.getString(EKK0011D020CBSMsg.UPD_DTM));
		work.put(WK_MSKM_DTL_NO, (String)eKK0011D020CBSMSG1.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		
		// 申込明細照査・後続業務依頼サービスインターフェイス呼出
		callSvcInter(handle, 
					param, 
					editInMsgEKK0021C060(param, userData, work), 
					new EKK0021C060CBSMsg().getContents(), 
					userData);
		
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪申込・申込明細登録処理 終了");
		return;
	}
	
	/**
	 * 他事業者割引契約対象契約適用終了処理<br>
	 * 
	 * サービス契約番号紐づく他事業者割引契約が既に解約されている場合、<br>
	 * その他事業者割引契約に紐づく他事業者割引契約対象契約に適用終了日を設定し紐付けを解除する。<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void tendTajgswkeiTgkei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約対象契約適用終了処理 開始");
		
		// 更新年月日時分秒（更新前）を初期化
		work.put(WK_TAJGS_UPD_DTM_BF, "");
		
		// 他事業者割引契約一覧照会処理を呼び出す
		CAANMsg msgEKK2441B003 = callEKK2441B003(handle, param, fixedText, userData, work);
		
		if(msgEKK2441B003 != null)
		{
			// 他事業者割引契約解約年月日
			String dslYmd = (String)msgEKK2441B003.getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_DSL_YMD);
			
			if(isValidYmd(dslYmd))
			{
				// 他事業者割引契約対象契約一覧照会処理を呼び出す
				work.put(WK_TAJGS_WRIB_KEI_NO, msgEKK2441B003.getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_NO));
				work.put(WK_TAJGS_UPD_DTM_BF, msgEKK2441B003.getString(EKK2441B003CBSMsg1List.LAST_UPD_DTM));
				CAANMsg[] msgEKK2451B001List = callEKK2451B001(handle, param, fixedText, userData, work);
				
				for (CAANMsg msgEKK2451B001 : msgEKK2451B001List)
				{
					// 他事業者割引契約対象契約適用終了を呼び出す
					work.put(WK_TAJGS_WRIB_KEI_NO, msgEKK2451B001.getString(EKK2451B001CBSMsg1List.TAJGS_WRIB_KEI_NO));
					work.put(WK_TAJGSWKEI_TGKEI_NO, msgEKK2451B001.getString(EKK2451B001CBSMsg1List.TAJGSWKEI_TGKEI_NO));
					CAANMsg msgEKK2451C010 = callEKK2451C010(handle, param, fixedText, userData, work);
					if(msgEKK2451C010 != null)
					{
						work.put(WK_TAJGS_UPD_DTM_BF,(String)msgEKK2451C010.getString(EKK2451C010CBSMsg.UPD_DTM));
					}
				}
			}
		}
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約対象契約適用終了処理 終了");
		return;
	}

	/**
	 * 他事業者割引契約申込登録締結処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void addCncTajgswkei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約申込登録締結処理 開始");
		
		// 他事業者割引契約申込登録締結サービスインターフェースを呼び出す
		CAANMsg resultMsg = callSvcInter(handle, 
											param, 
											editInMsgEKK2441D020(param, userData, work), 
											new EKK2441D020CBSMsg().getContents(), 
											userData);
		if(resultMsg != null)
		{
			userData.put(PARAM_KDDI_JGS_KEI_KANRI_NO,(String)resultMsg.getString(EKK2441D020CBSMsg.KDDI_JGS_KEI_KANRI_NO));
		}

		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約申込登録締結処理 終了");
		return;
	}

	/**
	 * 他事業者割引契約締結処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void cncTajgswkei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約締結処理 開始");
		
		// 他事業者割引契約締結サービスインターフェイスを呼び出す
		callSvcInter(handle, 
					param, 
					editInMsgEKK2441C010(param, userData, work), 
					new EKK2441C010CBSMsg().getContents(), 
					userData);

		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約締結処理 終了");
		return;
	}
	
	/**
	 * 他事業者割引契約解約処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void dslTajgswkei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約解約処理 開始");

		// サービスインターフェース呼び出し
		callSvcInter(handle, 
					param, 
					editInMsgEKK2441C040(param, userData, work), 
					new EKK2441C040CBSMsg().getContents(), 
					userData);
		
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪他事業者割引契約解約処理 終了");
		return;
	}

	/**
	 * 進捗登録処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void addPrg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪進捗登録処理 開始");
		// サービスインターフェース呼び出し
		callSvcInter(handle, 
					param, 
					editInMsgEKK1091D010(param, userData, work), 
					new EKK1091D010CBSMsg().getContents(),
					userData);
		
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪進捗登録処理 終了");
		
		return;
	}
	/**
	 * スマートバリュー異動情報登録処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void addSmtvlIdoInf(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪スマートバリュー異動情報登録処理 開始");
		
		HashMap<String, Object> trgtData = new HashMap<String, Object>();
		
		// 異動区分
		trgtData.put(JKKSmtvlIdoInfAddConstCC.IDO_DIV, work.get(WK_IDO_DIV));
		// 進捗ステータス
		trgtData.put(JKKSmtvlIdoInfAddConstCC.PRG_STAT, work.get(WK_PRG_STAT));
		// 進捗年月日時分秒
		trgtData.put(JKKSmtvlIdoInfAddConstCC.PRG_DTM, JCCBPCommon.getOpeDateTimeStamp(null));
		// スマートバリュー異動詳細コード
		trgtData.put(JKKSmtvlIdoInfAddConstCC.SMTVL_IDO_DTL_CD, (String)work.get(WK_SMTVL_IDO_DTL_CD));
		// KDDI割引契約異動通知結果コード
		trgtData.put(JKKSmtvlIdoInfAddConstCC.KDDI_WKEI_IDT_RSLT_CD, (String)work.get(WK_KDDI_WKEI_IDT_RSLT_CD));
		// KDDI割引契約異動通知エラーコード
		trgtData.put(JKKSmtvlIdoInfAddConstCC.KDDI_WKEI_IDT_ERR_CD, (String)work.get(WK_KDDI_WKEI_IDT_ERR_CD));
		// KDDI割引契約異動通知内容
		trgtData.put(JKKSmtvlIdoInfAddConstCC.KDDI_WKEI_IDT_NAIYO, (String)work.get(WK_KDDI_WKEI_IDT_NAIYO));
		// サービス契約番号
		trgtData.put(JKKSmtvlIdoInfAddConstCC.SVC_KEI_NO, work.get(WK_SVC_KEI_NO));
		
		String IdoInfAddFixedText ="JKKSmtvlIdoInfAdd";  
		
		param.setData(IdoInfAddFixedText, trgtData);
		
		JKKBpCommon.addSmtvlIdoInf(handle, param, trgtData, IdoInfAddFixedText);
		
		if (JKKStrConst.CD01445_MSKM_TKRT.equals((String)work.get(WK_SMTVL_IDO_DTL_CD)))
		{
			// スマートバリュー異動詳細コードが申込取込結果の場合、
			// 採番したＫＤＤＩ割引契約異動通知番号も戻り値に設定
			String kddiWkeiIdoNo = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.KDDI_WKEI_IDT_NO);
			userData.put(PARAM_KDDI_WKEI_IDT_NO_NET, kddiWkeiIdoNo);
		}
		
		JKKBpCommon.printBpDebugLog(this.getClass(), "♪♪♪スマートバリュー異動情報登録処理 終了");

		return;
	}
	

	/**
	 * 他事業者割引契約一覧照会(サービス契約番号)サービスインターフェースを呼び出します。<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @throws Throwable
	 */
	private CAANMsg callEKK2441B003(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		// 照会結果
		CAANMsg msgEKK2441B003 = null;

		// 上りマッピング処理
		HashMap<String, Object> inMapEKK2441B003 = editInMsgEKK2441B003(param, userData, work);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK2441B003 = callSvcInter(handle, param, inMapEKK2441B003, new EKK2441B003CBSMsg().getContents(), userData);

		// 結果を返却
		CAANMsg[] rsltMsgListEKK2441B003 = rsltMsgEKK2441B003.getCAANMsgList(EKK2441B003CBSMsg.EKK2441B003CBSMSG1LIST);
		if (rsltMsgListEKK2441B003.length > 0)
		{
			msgEKK2441B003 = rsltMsgListEKK2441B003[0];
		}

		return msgEKK2441B003;
	}
	
	/**
	 * 他事業者割引契約対象契約一覧照会サービスインターフェースを呼び出します。<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @throws Throwable
	 */
	private CAANMsg[] callEKK2451B001(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMap = editInMsgEKK2451B001(param, userData, work);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsg = callSvcInter(handle, param, inMap, new EKK2451B001CBSMsg().getContents(), userData);

		CAANMsg[] msgList = rsltMsg.getCAANMsgList(EKK2451B001CBSMsg.EKK2451B001CBSMSG1LIST);

		return msgList;
	}
	/**
	 * 他事業者割引契約対象契約適用終了サービスインターフェースを呼び出します。<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @throws Throwable
	 */
	private CAANMsg callEKK2451C010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMap = editInMsgEKK2451C010(param, userData, work);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsg = callSvcInter(handle, param, inMap, new EKK2451C010CBSMsg().getContents(), userData);

		return rsltMsg;
	}
	
	
	/**
	 * サービスインターフェース呼び出し処理です。<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param siInMap サービスインターフェースの入力マップ
	 * @param contents サービスインターフェースのテンプレート項目の配列
	 * @return 業務データ
	 * @throws Throwable 
	 */
	private CAANMsg callSvcInter(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> siInMap,
			Object[][] contents,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		// サービスインターフェースの呼び出し
		Map<?, ?> rsltMap = this.scCall.run(siInMap, handle);
		// エラーマッピング処理
		editResultRP(rsltMap, param, contents, userData);
		// エラーチェック処理
		errChk(rsltMap);
		// 業務データ取得処理
		CAANMsg workData = getWorkCAANMsg(rsltMap);

		return workData;
	}

	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @throws SCCallException 
	 */
	private void errChk(
			Map<?, ?> msgList) 
			throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}

	/**
	 * 業務データの取得処理です。
	 * <br>
	 * @param workKey 業務データのマップキー
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private CAANMsg getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate;
	}
	
	/**
	 * 条件部の共通する項目の設定する
	 * 
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	private void editInMsgBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
	}
	
	/**
	 * サービスI/F実行用の上り情報を生成する
	 * 
	 * @param param リクエストパラメータ
	 * @param template 条件の設定先
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 * @exception RequestParameterException
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException 
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文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));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;

	}
	
	/**
	 * 持ちうるフィールドに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);
		}
	}

	/**
	 * EKK0011D020_申込内容承認登録
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0011D020(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0011D020CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0011D020CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK0011D020CBSMsg.TEMPLATEID, "EKK0011D020");

		// 機能コード
		template.set(EKK0011D020CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// SYSID
		template.set(EKK0011D020CBSMsg.SYSID, (String)userData.get(PARAM_SYSID));

		// 申込種別コード
		template.set(EKK0011D020CBSMsg.MSKM_SBT_CD, (String)work.get(WK_MSKM_SBT_CD));

		// 申込受付年月日時分秒
		template.set(EKK0011D020CBSMsg.MSKM_UK_DTM, JCCBPCommon.getOpeDateTimeStamp(null));

		// 申込年月日
		template.set(EKK0011D020CBSMsg.MSKM_YMD, JCCBPCommon.getOpeDate(null));

		// コンシューマ営業用申込状態識別コード(04:承認済固定)
		template.set(EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, "04");

		// 申込内容承認登録明細の枠を作成
		CAANMsg[] eKK0011D020CBSMSG1LIST = null;
		CAANMsg eKK0011D020CBSMSG1 = null;
		eKK0011D020CBSMSG1 = new CAANMsg(EKK0011D020CBSMsg1List.class.getName());
		fillCAANMSGNullMapping(eKK0011D020CBSMSG1, new EKK0011D020CBSMsg1List().getContents());
		eKK0011D020CBSMSG1LIST = new CAANMsg[]
		{
			eKK0011D020CBSMSG1
		};
		
		template.set(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST, eKK0011D020CBSMSG1LIST);
		
		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * EKK0011D020_申込明細照査・後続業務依頼
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK0021C060(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK0021C060CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0021C060CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK0021C060CBSMsg.TEMPLATEID, "EKK0021C060");

		// 機能コード
		template.set(EKK0021C060CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 申込明細番号
		template.set(EKK0021C060CBSMsg.MSKM_DTL_NO, work.get(WK_MSKM_DTL_NO));

		// 後続業務依頼年月日
		template.set(EKK0021C060CBSMsg.KZKWRK_REQYMD, JCCBPCommon.getOpeDate(null));

		// 異動区分
		template.set(EKK0021C060CBSMsg.IDO_DIV, work.get(WK_IDO_DIV));

		// 更新年月日時分秒(更新前)
		template.set(EKK0021C060CBSMsg.UPD_DTM_BF, work.get(WK_MSKM_UPD_DTM_BF));
		
		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * EKK2441B003_他事業者割引契約一覧照会
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK2441B003(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK2441B003CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2441B003CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK2441B003CBSMsg.TEMPLATEID, "EKK2441B003");

		// 機能コード
		template.set(EKK2441B003CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿サービス契約番号
		template.set(
				EKK2441B003CBSMsg.KEY_SVC_KEI_NO, 
				(String)work.get("svc_kei_no"));

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * EKK2451B001_他事業者割引契約対象契約一覧照会
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK2451B001(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK2451B001CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2451B001CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK2451B001CBSMsg.TEMPLATEID, "EKK2451B001");

		// 機能コード
		template.set(EKK2451B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		
		// ＫＥＹ＿他事業者割引契約番号
		template.set(
				EKK2451B001CBSMsg.KEY_TAJGS_WRIB_KEI_NO,
				(String)work.get(WK_TAJGS_WRIB_KEI_NO));

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}

	/**
	 * EKK2451C010_他事業者割引契約対象契約適用終了
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK2451C010(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK2451C010CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2451C010CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK2451C010CBSMsg.TEMPLATEID, "EKK2451C010");

		// 機能コード
		template.set(EKK2451C010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 他事業者割引契約番号
		template.set(
				EKK2451C010CBSMsg.TAJGS_WRIB_KEI_NO,
				(String)work.get(WK_TAJGS_WRIB_KEI_NO));

		// 他事業者割引契約対象契約番号
		template.set(
				EKK2451C010CBSMsg.TAJGSWKEI_TGKEI_NO,
				(String)work.get(WK_TAJGSWKEI_TGKEI_NO));

		// ＫＥＹ＿更新年月日時分秒(更新前)
		template.set(
				EKK2451C010CBSMsg.UPD_DTM_BF,
				(String)work.get(WK_TAJGS_UPD_DTM_BF));

		// 上り情報を生成
		return editInMsgCmn(param, template);
	}
	
	/**
	 * EKK2441D020_他事業者割引契約申込登録締結
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK2441D020(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK2441D020CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2441D020CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK2441D020CBSMsg.TEMPLATEID, "EKK2441D020");

		// 機能コード
		template.set(EKK2441D020CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// ＫＤＤＩバリューコード
		String kddiValcd = (String)userData.get(PARAM_WRIBPRC_GRP_CD);
		template.set(
				EKK2441D020CBSMsg.KDDI_VAL_CD,
				kddiValcd.trim());

		// 申込明細番号
		template.set(
				EKK2441D020CBSMsg.MSKM_DTL_NO,
				(String)work.get(WK_MSKM_DTL_NO));

		// 他事業者割引契約申込受付年月日
		template.set(
				EKK2441D020CBSMsg.TAJGS_WRIB_KEI_MKM_UK_YMD,
				(String)userData.get(PARAM_WRIBPRC_ADD_YMD));
		
		// 他事業者割引契約締結年月日
		template.set(
				EKK2441D020CBSMsg.TAJGS_WRIB_KEI_CNC_YMD,
				(String)userData.get(PARAM_WRIBPRC_ADD_YMD));
		
		//　他事業者通知抑止有無
		template.set(
				EKK2441D020CBSMsg.TAJGS_TCH_YOKSI_UM,
				"0");// なし固定
		
		// 他事業者割引契約申込登録締結明細
		CAANMsg[] ekk2441D020CBSMSG1LIST = null;
		CAANMsg  ekk2441D020CBSMSG1net = new CAANMsg(EKK2441D020CBSMsg1List.class.getName());
		CAANMsg  ekk2441D020CBSMSG1tel = new CAANMsg(EKK2441D020CBSMsg1List.class.getName());
		ekk2441D020CBSMSG1net.set(EKK2441D020CBSMsg1List.SVC_KEI_NO_KK2451, (String)userData.get(PARAM_SVC_KEI_NO_NET));
		ekk2441D020CBSMSG1tel.set(EKK2441D020CBSMsg1List.SVC_KEI_NO_KK2451, (String)userData.get(PARAM_SVC_KEI_NO_TEL));
		ekk2441D020CBSMSG1LIST = new CAANMsg[]
		{
				ekk2441D020CBSMSG1net,ekk2441D020CBSMSG1tel
		};
		
		template.set(
				EKK2441D020CBSMsg.EKK2441D020CBSMSG1LIST,
				ekk2441D020CBSMSG1LIST);
		
		// 上り情報を生成
		return editInMsgCmn(param, template);
	}
	
	/**
	 * EKK2441C010_他事業者割引契約締結
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK2441C010(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK2441C010CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2441C010CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK2441C010CBSMsg.TEMPLATEID, "EKK2441C010");

		// 機能コード
		template.set(EKK2441C010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 他事業者割引契約番号
		template.set(
				EKK2441C010CBSMsg.TAJGS_WRIB_KEI_NO,
				(String)userData.get(PARAM_TAJGS_WRIB_KEI_NO));

		// ＫＤＤＩバリューコード
		// ※割引料金グループコードは、10桁で連携されるためtrimする。
		String kddiValcd = (String)userData.get(PARAM_WRIBPRC_GRP_CD);
		template.set(
				EKK2441C010CBSMsg.KDDI_VAL_CD,
				kddiValcd.trim());

		// 他事業者割引契約締結年月日
		template.set(
				EKK2441C010CBSMsg.TAJGS_WRIB_KEI_CNC_YMD,
				(String)userData.get(PARAM_WRIBPRC_ADD_YMD));

		// 更新年月日時分秒（更新前）
		template.set(
				EKK2441C010CBSMsg.UPD_DTM_BF,
				(String)userData.get(PARAM_TAJGS_WRIB_KEI_UPD_DTM));
		
		// 上り情報を生成
		return editInMsgCmn(param, template);
	}
	
	
	/**
	 * EKK2441C040_他事業者割引契約解約
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK2441C040(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK2441C040CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2441C040CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK2441C040CBSMsg.TEMPLATEID, "EKK2441C040");

		// 機能コード
		template.set(EKK2441C040CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 他事業者割引契約番号
		template.set(
				EKK2441C040CBSMsg.TAJGS_WRIB_KEI_NO,
				(String)userData.get(PARAM_TAJGS_WRIB_KEI_NO));

		// 他事業者割引契約解約年月日
		template.set(
				EKK2441C040CBSMsg.TAJGS_WRIB_KEI_DSL_YMD,
				(String)userData.get(PARAM_WRIBPRC_RLS_YMD));

		// 更新年月日時分秒（更新前）
		template.set(
				EKK2441C040CBSMsg.UPD_DTM_BF,
				(String)userData.get(PARAM_TAJGS_WRIB_KEI_UPD_DTM));
		
		// 上り情報を生成
		return editInMsgCmn(param, template);
	}
	
	/**
	 * EKK1091D010_進捗登録
	 * サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userData ユーザデータ
	 * @param work ワーク
	 * @return S/I上り情報
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK1091D010(
			IRequestParameterReadWrite param,
			HashMap<String, Object> userData,
			HashMap<String, Object> work)
			throws RequestParameterException
	{
		CAANMsg template = new CAANMsg(EKK1091D010CBSMsg.class.getName());

		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK1091D010CBSMsg().getContents());

		// 共通部を設定
		editInMsgBasicCmn(param, template);

		// テンプレートID(SIFのID)
		template.set(EKK1091D010CBSMsg.TEMPLATEID, "EKK1091D010");

		// 機能コード
		template.set(EKK1091D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 申込明細番号
		template.set(EKK1091D010CBSMsg.MSKM_DTL_NO, (String)work.get(WK_MSKM_DTL_NO));

		// サービス契約番号
		template.set(EKK1091D010CBSMsg.SVC_KEI_NO, (String)work.get(WK_SVC_KEI_NO));

		// 異動区分
		template.set(EKK1091D010CBSMsg.IDO_DIV, (String)work.get(WK_IDO_DIV));

		// 異動年月日時分秒
		// IT1-2013-0000039 進捗スキーマ異動年月日時分秒対応 2013/01/11 START
//		template.set(EKK1091D010CBSMsg.IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null));
		template.set(EKK1091D010CBSMsg.IDO_DTM, JCCBPCommon.getSysDateTimeStamp());
		// IT1-2013-0000039 進捗スキーマ異動年月日時分秒対応 2013/01/11 END

		// 進捗ステータス
		template.set(EKK1091D010CBSMsg.PRG_STAT, (String)work.get(WK_PRG_STAT));
		
		// 異動理由明細の枠を作成
		CAANMsg[] eKK1091D010CBSMSG1LIST = null;

		CAANMsg  eKK1091D010CBSMSG1 = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
		eKK1091D010CBSMSG1.set(EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)work.get(WK_IDO_RSN_CD));
		eKK1091D010CBSMSG1.setNull(EKK1091D010CBSMsg1List.IDO_RSN_MEMO);
		eKK1091D010CBSMSG1LIST = new CAANMsg[]
		{
				eKK1091D010CBSMSG1
		};
		
		template.set(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, eKK1091D010CBSMSG1LIST);

		
		// 上り情報を生成
		return editInMsgCmn(param, template);
	}
	
	
	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @param contents サービスインターフェースのテンプレート項目の配列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private IRequestParameterReadWrite editResultRP(
			Map<?, ?> msgList,
			IRequestParameterReadWrite param,
			Object[][] contents,
			HashMap<String, Object> inMap) 
			throws Throwable 
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_"
				+ String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_"
					+ formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		// ユーザデータ情報
		// ユーザデータは、パラメータでわたす
//		HashMap inMap = (HashMap)param.getData(fixedText);

		// ユーザデータ情報にエラー情報をマッピング
		for(int i = 0 ; contents != null && i < contents.length ; i++)
		{
			String element = null;
			element = (String)contents[i][0];
			if (element.indexOf("_err") > 0)
			{
				if (!template.isNull(element))
				{
					if (!inMap.containsKey(element))
					{
						inMap.put(element, template.getString(element));
					}
				}
			}
		}

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	/**
	 * 値がnullまたは空白かを判定する<br>
	 * @param arg
	 * @return 値がnullまたは空白の場合true
	 */
	private boolean isNullorBlank(String arg)
	{
		if (arg == null || "".equals(arg))
		{
			return true;
		}
		
		return false;
	}
	/**
	 * NULLを空文字に置き換える<br>
	 * 
	 * @param obj null又は文字列
	 * @return 文字列
	 */
	private String replaceNulltoBlank(Object obj)
	{
		if (obj == null)
		{
			return "";
		}
		else
		{
			return obj.toString();
		}
	}

	/**
	 * 有効な年月日か判定する<br>
	 * 
	 * @param str 検査対象文字列（年月日）
	 * @return true:有効な日付／false:左記以外
	 */
	private boolean isValidYmd(String str)
	{
		if (str == null || "".equals(str.trim()) || YMD_SHKV.equals(str))
		{
			return false;
		}
		return true;
	}	

	/**
	 * KDDI割引契約異動通知内容の編集
	 * 
	 * @param userData ユーザデータ
	 * @return ユーザデータをカンマ区切りで編集した文字列
	 */
	private String getKddiWkeiIdtNaiyo(HashMap<String, Object> userData)
	{
		
		return replaceNulltoBlank(userData.get(PARAM_REC_DIV)) + ',' 
				+ replaceNulltoBlank(userData.get(PARAM_TRAN_DIV)) + ',' 
				+ replaceNulltoBlank(userData.get(PARAM_JIGYOSHA_DIV)) + ',' 
				+ replaceNulltoBlank(userData.get(PARAM_JIGYOSHA_CD)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_JIGYOSHA_KEI_KNRI_NO)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_CROSS_SEL_PRC_SBT)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_KEI_CD)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_WRIBPRC_GRP_CD)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_WRIBPRC_GRP_STAT)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_WRIBPRC_ADD_YMD)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_WRIBPRC_UPD_YMD)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_WRIBPRC_RLS_YMD)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_WRIBPRC_HKTGI_NO)) + ','
				+ replaceNulltoBlank(userData.get(PARAM_WRIBPRC_HKTGI_SBT));
	}
	// 20130522 スマートバリュー品向による問題@ ADD START
	/**
	 * サービス開始異動情報登録処理
	 * 課金開始日が未来日に申込取込(登録)を行った場合、
	 * 課金開始日連携のトリガとなる異動情報は、サービス開始バッチでは作成されないため（サービス開始バッチが動いた後であるため）
	 * 本機能で擬似的に課金開始日連携用の異動情報を登録する。
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param userData ユーザデータ
	 * @param work ワーク
	 */
	private void addSmtvlIdoInfSvcStart(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			HashMap<String, Object> userData, HashMap<String, Object> work) throws Throwable
	{
		if (isExecuteSvcStartIdoInfAdd((String)userData.get(PARAM_NET_SVC_CHRG_STAYMD)))
		{
			work.put(WK_IDO_DIV, JKKStrConst.CD00576_00001);						// 異動区分：新規契約
			work.put(WK_PRG_STAT, JKKStrConst.CD00647_SVCTK_CHU);					// 進捗ステータス：サービス提供中
			work.put(WK_SMTVL_IDO_DTL_CD, null);									// スマートバリュー異動詳細コード
			work.put(WK_KDDI_WKEI_IDT_RSLT_CD, null);								// KDDI割引契約異動通知結果コード
			work.put(WK_KDDI_WKEI_IDT_ERR_CD, null);								// KDDI割引契約異動通知エラーコード
			work.put(WK_KDDI_WKEI_IDT_NAIYO, null);									// KDDI割引契約異動通知内容
			work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_NET));	// サービス契約番号：サービス契約番号（ネット）
			addSmtvlIdoInf(handle, param, fixedText, userData, work);	
			
		}
		
		if (isExecuteSvcStartIdoInfAdd((String)userData.get(PARAM_TEL1_SVC_CHRG_STAYMD)))
		{
			work.put(WK_IDO_DIV, JKKStrConst.CD00576_00001);						// 異動区分：新規契約
			work.put(WK_PRG_STAT, JKKStrConst.CD00647_SVCTK_CHU);					// 進捗ステータス：サービス提供中
			work.put(WK_SMTVL_IDO_DTL_CD, null);									// スマートバリュー異動詳細コード
			work.put(WK_KDDI_WKEI_IDT_RSLT_CD, null);								// KDDI割引契約異動通知結果コード
			work.put(WK_KDDI_WKEI_IDT_ERR_CD, null);								// KDDI割引契約異動通知エラーコード
			work.put(WK_KDDI_WKEI_IDT_NAIYO, null);									// KDDI割引契約異動通知内容
			work.put(WK_SVC_KEI_NO, (String)userData.get(PARAM_SVC_KEI_NO_TEL));	// サービス契約番号：サービス契約番号（電話）
			addSmtvlIdoInf(handle, param, fixedText, userData, work);	
		}

		return;
	}
	// 20130522 スマートバリュー品向による問題@ ADD END
	// 20130522 スマートバリュー品向による問題@ ADD START
	/**
	 * サービス開始異動情報登録判定
	 * 
	 * @param svcChrgStaYmd サービス課金開始年月日
	 * @return 判定結果 true:登録要 false:登録不要
	 */
	private boolean isExecuteSvcStartIdoInfAdd(String svcChrgStaYmd)
	{
		if (isValidYmd(svcChrgStaYmd) && svcChrgStaYmd.compareTo(JCCBPCommon.getBatOpeDate(null)) > 0)
		{
			// 課金開始日が運用日より未来の場合
			return true;
		}
		return false;
	}
	// 20130522 スマートバリュー品向による問題@ ADD END
}
