/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKCashPostOperateCC
*	ソースファイル名：JKKCashPostOperateCC.java
*	作成者			：FJ）澤田
*	日付			：2019年05月23日
*＜機能概要＞ 
*	キャッシュバック操作の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v44.00.00	2019/05/23  FJ）澤田	新規作成【ANK-3610-00-00】CASHPOST登録
*   v46.00.00	2019/10/07  FJ）岡井	【ANK-3704-00-00】CASHPOST連携機能開発
*   v49.00.00	2020/04/08  FJ）岡井	【ANK-3837-00-00】CASHPOST連携：住所変更時のCP付け替え機能
*   v57.00.00	2022/02/08	FJ) 平野	【ANK-4193-00-00】CASHPOSTお客さま受取結果反映
*	v59.00.00	2022/04/06  FJ) 美濃原	【ANK-4229-00-00】CASHPOST登録結果のメール送付
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKCommonUtil;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECK0011B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B014CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B014CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK3191B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3191B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK3201A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3201A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK3201B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3201B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK3201B020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3201B020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK3201C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3201D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3201E010CBSMsg;

/**
 *キャッシュバック操作の共通コンポーネントクラスです。
 * <BR>
 * @author FJ
 */
public class JKKCashPostOperateCC extends AbstractCommonComponent
{
	/**  サービス契約一覧照会<SYSID>*/
	private static final String TEMPLATE_ID_EKK0081B002 = "EKK0081B002";
	
	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	
	/** キャッシュポストマスタ一覧照会 */
	private static final String TEMPLATE_ID_EKK3191B010 = "EKK3191B010";
	
	/** キャッシュポスト一覧照会 */
	private static final String TEMPLATE_ID_EKK3201B010 = "EKK3201B010";
	
	/** キャッシュポストサービス契約更新 */
	private static final String TEMPLATE_ID_EKK3201C010 = "EKK3201C010";
	
	/** キャッシュポストサービス契約登録 */
	private static final String TEMPLATE_ID_EKK3201D010 = "EKK3201D010";
	
	/** キャッシュポストサービス契約削除 */
	private static final String TEMPLATE_ID_EKK3201E010 = "EKK3201E010";
	
	/** 進捗登録 */
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	
	// ANK-3704-00-00 ADD START
	/** サービス契約一覧照会（複数指定） */
	private static final String TEMPLATE_ID_EKK0081B014 = "EKK0081B014";
	
	/** キャッシュポストサービス契約一覧照会（CASHPOSTコード） */
	private static final String TEMPLATE_ID_EKK3201B020 = "EKK3201B020";
	// ANK-3704-00-00 ADD END
	
	// ANK-4229-00-00 ADD START
	/** キャッシュポスト一意照会 */
	private static final String TEMPLATE_ID_EKK3201A010 = "EKK3201A010";
	// ANK-4229-00-00 ADD END
	
	/** 処理区分 初回処理 **/
	private static final String SHORI_DIV_1 = "1";
		
	/** 処理区分 照会 **/
	private static final String SHORI_DIV_2 = "2";
	
	/** 処理区分 更新 **/
	private static final String SHORI_DIV_3 = "3";
	
	/** 処理区分 照会(割引情報一覧照会) **/
	private static final String SHORI_DIV_4 = "4";

	/** リターンメッセージの書式指定文字列 */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	
	/** エラー項目接尾辞 */
	private static final String ERRITEM_SUFFIX = "_err";
	
	/** リターンメッセージ取得キー */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	
	/** CASHPOSTサービス契約ステータス（登録済） */
	public static final String CASHPOST_STAT_010 = "010";
	
	/** CASHPOSTサービス契約ステータス（送信済） */
	public static final String CASHPOST_STAT_100 = "100";
	
	/** 登録用情報リスト */
	public static final String KEY_ADD_INFO_LIST = "add_info_list";
	
	/** 更新用情報リスト */
	public static final String KEY_UPD_INFO_LIST = "upd_info_list";
	
	/** 解約用情報リスト */
	public static final String KEY_DEL_INFO_LIST = "del_info_list";

	// ANK-3704-00-00 ADD START
	/** その他情報リスト */
	public static final String KEY_OTHER_INFO_LIST = "other_info_list";

	/** CASHPOST基準日種別：001(サービス初回申込日) */
	public static final String CASHPOST_STDARDDAY_SBT_001 = "001";
	// ANK-3704-00-00 ADD END

	// ANK-3837-00-00 ADD START
	/** 付け替え選択状態 付け替える **/
	private static final String TKE_SEL_1 = "1";
	// ANK-3837-00-00 ADD END

	/*************************************************************/
	/** 進捗ステータス                                          **/
	/*************************************************************/
	/** 進捗ステータス：I004 CASHPOST送金登録完了 */
	private static final String PRG_STAT_I004 = "I004";
	
	/** サービス契約ステータス（照査済） */
	public static final String SVC_KEI_STAT_020 = "020";
	/** サービス契約ステータス（締結済） */
	public static final String SVC_KEI_STAT_030 = "030";
	/** サービス契約ステータス（サービス提供中） */
	public static final String SVC_KEI_STAT_100 = "100";
	/** サービス契約ステータス（休止・中断中） */
	public static final String SVC_KEI_STAT_210 = "210";
	/** サービス契約ステータス（停止中） */
	public static final String SVC_KEI_STAT_220 = "220";
	
	// ANK-3837-00-00 ADD START
	/** 付け替え可能料金グループコードリスト */
	public static final List<String> NET_PRC_GRP_CD_LIST = Arrays.asList("02", "03", "04");
	// ANK-3837-00-00 ADD END
	
	/** 入力項目：異動理由明細 */
	private static final String IDO_RSN_CD_LIST = "ido_rsn_cd_list";
	/** 入力項目：異動理由コード */
	private static final String IDO_RSN_CD = "ido_rsn_cd";
	/** 入力項目：異動理由メモ */
	private static final String IDO_RSN_MEMO = "ido_rsn_memo";
	
	// ANK-4229-00-00 ADD START	
	/** キャッシュポストサービス契約一意照会の取得項目 */
	private static final List<String> EKK3201A010_TENKI_LIST =
			Arrays.asList(EKK3201A010CBSMsg1List.CASHPOST_KEI_NO, EKK3201A010CBSMsg1List.GENE_ADD_DTM, EKK3201A010CBSMsg1List.CASHPOST_KEI_STAT,
					EKK3201A010CBSMsg1List.SVC_KEI_NO, EKK3201A010CBSMsg1List.CASHPOST_CD, EKK3201A010CBSMsg1List.SOHU_AMNT,
					EKK3201A010CBSMsg1List.CASHPOST_RNKI_YMD, EKK3201A010CBSMsg1List.MLAD, EKK3201A010CBSMsg1List.UKETORI_NINSHO_KEY,
					EKK3201A010CBSMsg1List.ADD_DTM, EKK3201A010CBSMsg1List.ADD_OPEACNT, EKK3201A010CBSMsg1List.UPD_DTM,
					EKK3201A010CBSMsg1List.UPD_OPEACNT, EKK3201A010CBSMsg1List.DEL_DTM, EKK3201A010CBSMsg1List.DEL_OPEACNT,
					EKK3201A010CBSMsg1List.MK_FLG, EKK3201A010CBSMsg1List.ADD_UNYO_YMD, EKK3201A010CBSMsg1List.ADD_TRN_ID,
					EKK3201A010CBSMsg1List.UPD_UNYO_YMD, EKK3201A010CBSMsg1List.UPD_TRN_ID, EKK3201A010CBSMsg1List.DEL_UNYO_YMD,
					EKK3201A010CBSMsg1List.DEL_TRN_ID, EKK3201A010CBSMsg1List.CASHPOST_UK_NO, EKK3201A010CBSMsg1List.CASHPOST_ENDTIME,
					EKK3201A010CBSMsg1List.SITE_KANRI_NO, EKK3201A010CBSMsg1List.CASHPOST_ADD_YMD, EKK3201A010CBSMsg1List.ADD_MAIL_SEND_FLG,
					EKK3201A010CBSMsg1List.ADD_MAIL_SAKSEI_YMD, EKK3201A010CBSMsg1List.RPSRC_CASHPOST_KEI_NO);

	/** CASHPOST契約の項目転記（初期値設定）SVC_KEI_NO,CASHPOST_CDを除く */
	private static final List<String> CASHPOST_TENKI_LIST =
			Arrays.asList(EKK3201A010CBSMsg1List.CASHPOST_KEI_NO, EKK3201A010CBSMsg1List.GENE_ADD_DTM, EKK3201A010CBSMsg1List.CASHPOST_KEI_STAT,
					EKK3201A010CBSMsg1List.SOHU_AMNT, EKK3201A010CBSMsg1List.CASHPOST_RNKI_YMD, EKK3201A010CBSMsg1List.MLAD,
					EKK3201A010CBSMsg1List.UKETORI_NINSHO_KEY, EKK3201A010CBSMsg1List.ADD_DTM, EKK3201A010CBSMsg1List.ADD_OPEACNT,
					EKK3201A010CBSMsg1List.UPD_DTM, EKK3201A010CBSMsg1List.UPD_OPEACNT, EKK3201A010CBSMsg1List.MK_FLG,
					EKK3201A010CBSMsg1List.CASHPOST_UK_NO, EKK3201A010CBSMsg1List.CASHPOST_ENDTIME, EKK3201A010CBSMsg1List.SITE_KANRI_NO,
					EKK3201A010CBSMsg1List.CASHPOST_ADD_YMD, EKK3201A010CBSMsg1List.ADD_MAIL_SEND_FLG, EKK3201A010CBSMsg1List.ADD_MAIL_SAKSEI_YMD,
					EKK3201A010CBSMsg1List.RPSRC_CASHPOST_KEI_NO);
	// ANK-4229-00-00 ADD END

	/**
	 *キャッシュバック操作を行います。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite main(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ユーザデータ情報
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		IRequestParameterReadWrite retParam = param;
		
		//データマップがNULLの場合、処理を終了する。
		if (dataMap == null)
		{
			// 入力データチェック終了ログ出力
			throw new Exception("データマップ不正");
		}
		// 処理区分がNULLの場合、処理を終了する。
		if (JKKCommonUtil.isNull((String)dataMap.get("shori_div")))
		{
			// 入力データチェック終了ログ出力
			throw new Exception("処理区分不正");
		}
		
		// 処理区分
		String shoriDiv = (String)dataMap.get("shori_div");
		
		// 処理区分が初回処理の場合
		if (SHORI_DIV_1.equals(shoriDiv))
		{
			firstSyori(handle, retParam, fixedText);
		}
		// 処理区分が照会の場合
		else if (SHORI_DIV_2.equals(shoriDiv))
		{
			search(handle, retParam, fixedText);
		}
		// 処理区分が更新(登録・更新・削除)の場合
		else if (SHORI_DIV_3.equals(shoriDiv))
		{
			update(handle, retParam, fixedText);
		}
		// 処理区分が照会(割引情報一覧照会)の場合
		else if (SHORI_DIV_4.equals(shoriDiv))
		{
			search_sysid(handle, retParam, fixedText);
		}
		
		return retParam;
	}
	
	/**
	 *初回処理を実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param dataMap データ取得CCマップ
	 * @throws Throwable 例外が発生した場合
	 */
	private void firstSyori(SessionHandle handle
									, IRequestParameterReadWrite param
									, String fixedText
									) throws Throwable
	{
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		List<HashMap<String, Object>> cashpostSendList = new ArrayList<HashMap<String, Object>>();

		// SYSID
		String sysid = (String)dataMap.get("sysid");
		
		// サービスIF：EKK0081B002_サービス契約一覧照会（SYSID）
		List<HashMap<String, Object>> eKK0081B002Msg1List = getEKK0081B002(handle, param, fixedText, sysid);
		
		// 取得結果を格納
		dataMap.put("info_list", eKK0081B002Msg1List);
		
		// 送信済キャンペーン一覧の編集処理
		if (eKK0081B002Msg1List != null && 0 < eKK0081B002Msg1List.size())
		{
			// サービス契約番号を格納
			ArrayList<String> svcKeiNoList = new ArrayList<String>();
			for (HashMap<String, Object> eKK0081B002Msg : eKK0081B002Msg1List)
			{
				String svcKeiNo = (String)eKK0081B002Msg.get(EKK0081B002CBSMsg1List.SVC_KEI_NO);

				svcKeiNoList.add(svcKeiNo);
			}
			
			// サービスIF：EKK3201B010_キャッシュポストサービス契約一覧照会
			List<HashMap<String, Object>> eKK3201B010Msg1ListWk = getEKK3201B010(handle, param, fixedText, retStringList(svcKeiNoList));
			
			for (HashMap<String, Object>  eKK3201B010Msg1ListWkMsg : eKK3201B010Msg1ListWk)
			{
				//送信済の場合
				if (CASHPOST_STAT_100.equals(eKK3201B010Msg1ListWkMsg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT)))
				{
					cashpostSendList.add(eKK3201B010Msg1ListWkMsg);
				}
			}
		}
		
		//送信済キャンペーン一覧
		dataMap.put("cashpost_send_list", cashpostSendList);

	}
	
	/**
	 *照会処理を実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param dataMap データ取得CCマップ
	 * @throws Throwable 例外が発生した場合
	 */
	private void search(SessionHandle handle
									, IRequestParameterReadWrite param
									, String fixedText
									) throws Throwable
	{
		//運用日付
		String opeDate = JPCBPCommon.getOpeDate(null);
		
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		// サービス契約番号
		String svcKeiNo = (String)dataMap.get("svc_kei_no");
		// SYSID
		String sysid = (String)dataMap.get("sysid");
		
		// サービスIF実行　EKK3191B010_
		List<HashMap<String, Object>> eKK0081A010Msg1List = getEKK0081A010(handle, param, fixedText, svcKeiNo);
		
		HashMap<String, Object> eKK0081A010Msg = (HashMap<String, Object>)eKK0081A010Msg1List.get(0);

		//サービス契約一意照会が取得できなかった場合 処理終了
		if (!(eKK0081A010Msg != null && 0 < eKK0081A010Msg.size()))
		{
			return;
		}

		// ANK-3837-00-00 ADD START
		String prcGrpCd = (String) eKK0081A010Msg.get(EKK0081A010CBSMsg1List.PRC_GRP_CD);
		// ANK-3837-00-00 ADD END

		// サービスIF：EKK3191B010_キャッシュポスト一覧照会（マスタ情報の取得）
		List<HashMap<String, Object>> eKK3191B010Msg1List = getEKK3191B010(handle, param, fixedText, eKK0081A010Msg);

		// サービスIF：EKK3201B010_キャッシュポストサービス契約一覧照会（契約情報の取得）
		List<HashMap<String, Object>> eKK3201B010Msg1List = getEKK3201B010(handle, param, fixedText, svcKeiNo);

		List<HashMap<String, Object>> cashpostRnkiList = new ArrayList<HashMap<String, Object>>();

		//送金可能キャンペーン一覧の編集処理
		if (null != eKK3191B010Msg1List)
		{
			for (HashMap<String, Object> eKK3191B010Msg : eKK3191B010Msg1List)
			{
				//CASHPOSTコード
				String rnkiCashpostCd = (String)eKK3191B010Msg.get(EKK3191B010CBSMsg1List.CASHPOST_CD);
				//CASHPOST適用開始年月日
				String cashpostTstaymd = (String)eKK3191B010Msg.get(EKK3191B010CBSMsg1List.CASHPOST_TSTAYMD);
				//CASHPOST適用終了年月日
				String cashpostTendymd = (String)eKK3191B010Msg.get(EKK3191B010CBSMsg1List.CASHPOST_TENDYMD);
				//CASHPOST契約有無
				boolean bok_kei = false;

				// ANK-3704-00-00 ADD START
				// CASHPOST申込開始年月日
				String cashpostMskmStaymd = (String)eKK3191B010Msg.get(EKK3191B010CBSMsg1List.CASHPOST_MSKM_STAYMD);
				// CASHPOST申込終了年月日
				String cashpostMskmEndymd = (String)eKK3191B010Msg.get(EKK3191B010CBSMsg1List.CASHPOST_MSKM_ENDYMD);
				// CASHPOST基準日種別
				String cashpostStdarddaySbt = (String)eKK3191B010Msg.get(EKK3191B010CBSMsg1List.CASHPOST_STDARDDAY_SBT);
				// 基準日
				String kijunbi = "";

				// 親番(CASHPOSTコードの上4桁)の設定
				eKK3191B010Msg.put("cashpost_cd_oya_no", rnkiCashpostCd.substring(0, 4));

				// 基準日取得
				if (CASHPOST_STDARDDAY_SBT_001.equals(cashpostStdarddaySbt))
				{
					// 基準日：サービス初回申込日

					// サービスIF：EKK0081B014_サービス契約一覧照会（複数指定）
					List<HashMap<String, Object>> eKK0081B014Msg1List = getEKK0081B014(handle, param, fixedText, svcKeiNo);

					for (HashMap<String, Object> eKK0081B014Msg : eKK0081B014Msg1List)
					{
						kijunbi = (String) eKK0081B014Msg.get(EKK0081B014CBSMsg1List.MSKM_YMD_MSKM);
					}
				}
				// ANK-3704-00-00 ADD END

				for (HashMap<String, Object> eKK3201B010Msg : eKK3201B010Msg1List)
				{
					//キャッシュポスト契約が存在し、受付済みの場合
					if (rnkiCashpostCd.equals(eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_CD)) && CASHPOST_STAT_010.equals(eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT)))
					{
						//CASHPOST契約番号
						eKK3191B010Msg.put("cashpost_kei_no", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_NO));
						//送付金額
						eKK3191B010Msg.put("sohu_amnt", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.SOHU_AMNT));
						//CASHPOSTコード
						eKK3191B010Msg.put("cashpost_cd", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_CD));
						//CASHPOSTキャンペーン名称
						eKK3191B010Msg.put("cashpost_campaign_nm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_CAMPAIGN_NM));
						//CASHPOSTサービス契約ステータス
						eKK3191B010Msg.put("cashpost_kei_stat", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT));
						//CASHPOSTサービス契約ステータス名名称
						eKK3191B010Msg.put("cashpost_kei_stat_nm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT_NM));
						//世代登録年月日時分秒
						eKK3191B010Msg.put("gene_add_dtm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.GENE_ADD_DTM));
						//更新年月日時分秒
						eKK3191B010Msg.put("upd_dtm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.UPD_DTM));
						// ANK-3704-00-00 ADD START
						// 変更可否フラグ(既に受付済の場合は変更可)
						eKK3191B010Msg.put("chg_kh_flg", true);
						// ANK-3704-00-00 ADD END

						// ANK-3704-00-00 ADD START
						// 二重登録表示不正対応
						HashMap<String, Object> eKK3191B010MsgMap = new HashMap<String, Object>();
						eKK3191B010MsgMap.putAll(eKK3191B010Msg);
						// ANK-3704-00-00 ADD END

						cashpostRnkiList.add(eKK3191B010MsgMap);
						bok_kei = true;
					}
					//キャッシュポスト契約が存在し、受付済以外の場合
					else if (rnkiCashpostCd.equals(eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_CD)) && !CASHPOST_STAT_010.equals(eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT)))
					{
						//リストに追加しない
					}
				}
				//キャッシュポスト契約が存在しない場合は、適用日付のチェックを行う。
				if (cashpostTstaymd.compareTo(opeDate) <= 0 && cashpostTendymd.compareTo(opeDate) >= 0 && bok_kei == false)
				{
					// ANK-3704-00-00 ADD START
					// 申込日のチェックを行う
					if (!JKKCommonUtil.isNull(kijunbi) && cashpostMskmStaymd.compareTo(kijunbi) <= 0 && cashpostMskmEndymd.compareTo(kijunbi) >= 0)
					{
						// 変更可否フラグ：申込日が範囲内の場合、変更可
						eKK3191B010Msg.put("chg_kh_flg", true);
					}
					else
					{
						// 変更可否フラグ：申込日が範囲外の場合、変更不可
						eKK3191B010Msg.put("chg_kh_flg", false);
					}
					// ANK-3704-00-00 ADD END

					cashpostRnkiList.add(eKK3191B010Msg);
				}
			}
		}
		
		//送金可能キャンペーン一覧
		dataMap.put("cashpost_rnki_list", cashpostRnkiList);

		// ANK-3837-00-00 ADD START
		// 付替え先サービス契約番号一覧を作成
		List<HashMap<String, Object>> tksSvcKeiNoList = new ArrayList<HashMap<String, Object>>();

		// サービスIF：EKK0081B002_サービス契約一覧照会（SYSID）
		List<HashMap<String, Object>> eKK0081B002Msg1List = getEKK0081B002(handle, param, fixedText, sysid);

		if (eKK0081B002Msg1List != null && eKK0081B002Msg1List.size() > 0)
		{
			for (HashMap<String, Object> eKK0081B002Map : eKK0081B002Msg1List)
			{
				// サービス契約番号
				String tksSvcKeiNo = (String)eKK0081B002Map.get(EKK0081B002CBSMsg1List.SVC_KEI_NO);

				// サービスIF：EKK0081A010_サービス契約一意照会
				List<HashMap<String, Object>> eKK0081A010List = getEKK0081A010(handle, param, fixedText, tksSvcKeiNo);
				HashMap<String, Object> eKK0081A010Map = (HashMap<String, Object>)eKK0081A010List.get(0);

				String tksPrcGrpCd = (String) eKK0081A010Map.get(EKK0081A010CBSMsg1List.PRC_GRP_CD);
				String tksSvcKeiStat = (String) eKK0081A010Map.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT);

				if (svcKeiNo.equals(tksSvcKeiNo))
				{
					// 自身のサービス契約番号の場合は飛ばす
					continue;
				}

				if (!SVC_KEI_STAT_100.equals(tksSvcKeiStat) && !SVC_KEI_STAT_210.equals(tksSvcKeiStat))
				{
					// 付け替え先のサービス契約ステータスが「100：サービス提供中」「210：休止・中断中」以外の場合は飛ばす
					continue;
				}

				if (!NET_PRC_GRP_CD_LIST.contains(prcGrpCd) || !NET_PRC_GRP_CD_LIST.contains(tksPrcGrpCd))
				{
					// 付け替え元がネット以外、または、付け替え先がネット以外の場合は飛ばす
					continue;
				}

				tksSvcKeiNoList.add(eKK0081A010Map);
			}
		}

		// 付替え先サービス契約番号一覧
		dataMap.put("tks_svc_kei_no_list", tksSvcKeiNoList);
		// ANK-3837-00-00 ADD END
	}
	
	/**
	 *更新の処理です。
	 * @param handle
	 * @param param
	 * @param paramMap
	 * @param dataMap
	 * @param scCall
	 * @param result
	 * @param shoriDiv
	 * @throws RequestParameterException
	 */
	private void update(SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText)
			throws RequestParameterException, SCException, Throwable
	{
		Map<?, ?> result = null;
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		//HashMap<String, Object> inMap = new HashMap<String, Object>();
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> addInfoList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> updInfoList = new ArrayList<HashMap<String, Object>>();
		List<HashMap<String, Object>> delInfoList = new ArrayList<HashMap<String, Object>>();

		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		
		//登録用情報リスト
		addInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_ADD_INFO_LIST);
		
		//更新用情報リスト
		updInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_UPD_INFO_LIST);
		
		//解約用情報リスト
		delInfoList = (List<HashMap<String, Object>>)dataMap.get(KEY_DEL_INFO_LIST);
		
		// 進捗の特記メモ
		String prgMemo = "";
		
		// ANK-3837-00-00 ADD START
		// 付け替え選択状態(1：付け替える、左記以外：付け替えない)
		String tkeSel = (String) dataMap.get("tke_sel");
		// ANK-3837-00-00 ADD END
		
		// ANK-3704-00-00 ADD START
		// サービス契約番号
		String svcKeiNo = (String) dataMap.get("svc_kei_no");
		
		// ANK-3837-00-00 MOD START
		if (!TKE_SEL_1.equals(tkeSel))
		{
			// 付け替えない場合に金額チェックを行う
			
			// 登録更新前チェック
			HashMap chkRes = chkSumAmnt(handle, param, fixedText, svcKeiNo, addInfoList, updInfoList, delInfoList);
			
			if ("1".equals(chkRes.get("result")))
			{
				// エラーとなった場合、更新処理は実行しない
				dataMap.put("err_item", "gokei_max_kangen_amnt");
				dataMap.put("err_info", chkRes.get("err_oya_no_list"));
				return;
			}
			// ANK-3704-00-00 ADD END
		}
		// ANK-3837-00-00 MOD END
		
		//更新リストが存在する場合、更新する
		if (updInfoList != null)
		{		
			for (int i = 0; i < updInfoList.size(); i++)
			{
				HashMap<String, Object> childMap = (HashMap<String, Object>)updInfoList.get(i);
				// -------------------------
				//キャッシュポスト契約更新
				// -------------------------
				// ANK-4229-00-00 MOD START
				// 既存レコードの情報を取得
				HashMap<String, Object> beforeRec = getEKK3201A010(handle, param, fixedText, (String)childMap.get(EKK3201D010CBSMsg.CASHPOST_KEI_NO));
				if (beforeRec == null)
				{
					throw new Exception("[更新処理]前世代のレコードが存在しません。 CASHPOST契約番号[" + childMap.get(EKK3201D010CBSMsg.CASHPOST_KEI_NO) + "]");
				}
				// paramMap = editInMsgEKK3201C010(param, childMap);
				paramMap = editInMsgEKK3201C010(param, childMap, beforeRec);
				// ANK-4229-00-00 MOD END
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK3201C010);
				
				ArrayList<CAANMsg> eKK3201List = getRsltList(result);
				if (JKKStringUtil.isNullBlank(prgMemo))
				{
					prgMemo = childMap.get(EKK3201D010CBSMsg.CASHPOST_CD) + ":" + childMap.get("cashpost_campaign_nm") + ":" + childMap.get(EKK3201D010CBSMsg.SOHU_AMNT) + "円";
				}
				else
				{
					prgMemo = prgMemo + "　" + childMap.get(EKK3201D010CBSMsg.CASHPOST_CD) + ":" + childMap.get("cashpost_campaign_nm") + ":" + childMap.get(EKK3201D010CBSMsg.SOHU_AMNT) + "円";
				}
			}
		}
		
		//登録リストが存在する場合、登録する
		if (addInfoList != null)
		{		
			for (int i = 0; i < addInfoList.size(); i++)
			{
				HashMap<String, Object> childMap = (HashMap<String, Object>)addInfoList.get(i);
				// -------------------------
				//キャッシュポスト契約登録
				// -------------------------
				paramMap = editInMsgEKK3201D010(param, childMap);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK3201D010);
				
				ArrayList<CAANMsg> eKK3201List = getRsltList(result);
				
				// ANK-3837-00-00 MOD START
				if (!TKE_SEL_1.equals(tkeSel))
				{
					// 付け替えない場合は通常通り作成する
					if (JKKStringUtil.isNullBlank(prgMemo))
					{
						prgMemo = childMap.get(EKK3201D010CBSMsg.CASHPOST_CD) + ":" + childMap.get("cashpost_campaign_nm") + ":" + childMap.get(EKK3201D010CBSMsg.SOHU_AMNT) + "円";
					}
					else
					{
						prgMemo = prgMemo + "　" + childMap.get(EKK3201D010CBSMsg.CASHPOST_CD) + ":" + childMap.get("cashpost_campaign_nm") + ":" + childMap.get(EKK3201D010CBSMsg.SOHU_AMNT) + "円";
					}
				}
				// ANK-3837-00-00 MOD END
			}
		}
		//削除リストが存在する場合、削除する
		if (delInfoList != null)
		{		
			for (int i = 0; i < delInfoList.size(); i++)
			{
				HashMap<String, Object> childMap = (HashMap<String, Object>)delInfoList.get(i);
				// -------------------------
				//キャッシュポスト契約削除
				// -------------------------
				paramMap = editInMsgEKK3201E010(param, childMap);
				
				result = scCall.run(paramMap, handle);
				
				// エラー情報の設定
				param = editResultRP(result, param, TEMPLATE_ID_EKK3201E010);
				
				ArrayList<CAANMsg> eKK3201List = getRsltList(result);
				
				if (JKKStringUtil.isNullBlank(prgMemo))
				{
					prgMemo = childMap.get(EKK3201D010CBSMsg.CASHPOST_CD) + ":" + childMap.get("cashpost_campaign_nm") + ":取消";
				}
				else
				{
					prgMemo = prgMemo + "　" + childMap.get(EKK3201D010CBSMsg.CASHPOST_CD) + ":" + childMap.get("cashpost_campaign_nm") + ":取消";
				}
			}
		}
		// -------------------------
		//進捗登録
		// -------------------------
		paramMap = editInMsgEKK1091D010(param, dataMap, prgMemo);
		
		result = scCall.run(paramMap, handle);
		
		// エラー情報の設定
		param = editResultRP(result, param, TEMPLATE_ID_EKK1091D010);
	}
	
	/**
	 *SYSID内で照会処理を実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param dataMap データ取得CCマップ
	 * @throws Throwable 例外が発生した場合
	 */
	private void search_sysid(SessionHandle handle
									, IRequestParameterReadWrite param
									, String fixedText
									) throws Throwable
	{
		//運用日付
		String opeDate = JPCBPCommon.getOpeDate(null);
		
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(fixedText);
		// sysid
		String sysid = (String)dataMap.get("sysid");
		
		// 送金可能キャンペーン一覧用リスト
		List<HashMap<String, Object>> cashpostRnkiList = new ArrayList<HashMap<String, Object>>();
		// 送信済キャンペーン一覧用リスト
		List<HashMap<String, Object>> cashpostSendList = new ArrayList<HashMap<String, Object>>();
		
		// サービスIF：サービス契約一覧照会
		List<HashMap<String, Object>> eKK0081B002Msg1List_Rnki = getEKK0081B002(handle, param, fixedText, sysid);
		
		//送金可能キャンペーン一覧
		if (null != eKK0081B002Msg1List_Rnki)
		{
			for (HashMap<String, Object> eKK0081B002Msg : eKK0081B002Msg1List_Rnki)
			{
				// サービス契約番号
				String svcKeiNoWk = (String)eKK0081B002Msg.get(EKK0081B002CBSMsg1List.SVC_KEI_NO);
				
				// サービスIF：EKK0081A010_サービス契約一意照会
				List<HashMap<String, Object>> eKK0081A010Msg1List = getEKK0081A010(handle, param, fixedText, svcKeiNoWk);
				
				// 結果を取得
				HashMap<String, Object> eKK0081A010Msg = (HashMap<String, Object>)eKK0081A010Msg1List.get(0);

				//サービス契約一意照会が取得できなかった場合 処理終了
				if (!(eKK0081A010Msg != null && 0 < eKK0081A010Msg.size()))
				{
					return;
				}
				
				// サービスIF：EKK3191B010_キャッシュポスト一覧照会（マスタ情報の取得）
				List<HashMap<String, Object>> eKK3191B010Msg1List = getEKK3191B010(handle, param, fixedText, eKK0081A010Msg);
				
				// サービスIF：EKK3201B010_キャッシュポストサービス契約一覧照会（契約情報の取得）
				List<HashMap<String, Object>> eKK3201B010Msg1List = getEKK3201B010(handle, param, fixedText, svcKeiNoWk);

				//送金可能キャンペーン一覧の編集処理
				if (null != eKK3191B010Msg1List)
				{
					for (HashMap<String, Object> eKK3191B010Msg : eKK3191B010Msg1List)
					{
						//CASHPOSTコード
						String rnkiCashpostCd = (String)eKK3191B010Msg.get(EKK3191B010CBSMsg1List.CASHPOST_CD);
						
						for (HashMap<String, Object> eKK3201B010Msg : eKK3201B010Msg1List)
						{
							//キャッシュポスト契約が存在し、受付済みの場合
							if (rnkiCashpostCd.equals(eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_CD)) && CASHPOST_STAT_010.equals(eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT)))
							{
								//CASHPOST契約番号
								eKK3191B010Msg.put("cashpost_kei_no", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_NO));
								//送付金額
								eKK3191B010Msg.put("sohu_amnt", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.SOHU_AMNT));
								//CASHPOSTコード
								eKK3191B010Msg.put("cashpost_cd", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_CD));
								//CASHPOSTキャンペーン名称
								eKK3191B010Msg.put("cashpost_campaign_nm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_CAMPAIGN_NM));
								//CASHPOSTサービス契約ステータス
								eKK3191B010Msg.put("cashpost_kei_stat", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT));
								//CASHPOSTサービス契約ステータス名名称
								eKK3191B010Msg.put("cashpost_kei_stat_nm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT_NM));
								//世代登録年月日時分秒
								eKK3191B010Msg.put("gene_add_dtm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.GENE_ADD_DTM));
								//更新年月日時分秒)
								eKK3191B010Msg.put("upd_dtm", eKK3201B010Msg.get(EKK3201B010CBSMsg1List.UPD_DTM));
								cashpostRnkiList.add(eKK3191B010Msg);
								break;
							}
						}
					}
				}
				
				//送信済キャンペーン一覧の編集処理
				for (HashMap<String, Object>  eKK3201B010Msg : eKK3201B010Msg1List)
				{
					//送信済の場合
					if (CASHPOST_STAT_100.equals(eKK3201B010Msg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT)))
					{
						cashpostSendList.add(eKK3201B010Msg);
					}
				}
			}
		}
		
		// 送信済キャンペーン一覧の編集処理
		// サービスIF：EKK0081B002_サービス契約一覧照会（SYSID）
		List<HashMap<String, Object>> eKK0081B002Msg1List = getEKK0081B002(handle, param, fixedText, sysid);
		
		for (HashMap<String, Object> eKK0081B002Msg : eKK0081B002Msg1List)
		{
			String svcKeiNoWk = (String)eKK0081B002Msg.get(EKK0081B002CBSMsg1List.SVC_KEI_NO);
			
			// EKK3201B010_キャッシュポストサービス契約一覧照会
			List<HashMap<String, Object>> eKK3201B010Msg1ListWk = getEKK3201B010(handle, param, fixedText, svcKeiNoWk);
			
			for (HashMap<String, Object>  eKK3201B010Msg1ListWkMsg : eKK3201B010Msg1ListWk)
			{
				//送信済の場合
				if (CASHPOST_STAT_100.equals(eKK3201B010Msg1ListWkMsg.get(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT)))
				{
					cashpostSendList.add(eKK3201B010Msg1ListWkMsg);
				}
			}
		}
		
		//送金可能キャンペーン一覧
		dataMap.put("cashpost_rnki_list", cashpostRnkiList);
		
		//送信済キャンペーン一覧
		dataMap.put("cashpost_send_list", cashpostSendList);
	}
	
	/**
	 *サービス契約一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsgデータ取得CCマップ
	 * @returnオプションサービス契約一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK0081B002(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String sysid)throws Throwable
	{
		//オプションサービス契約一覧照会明細
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//オプションサービス契約一覧照会（サービス契約番号）の上りマッピング
		Object[][] eKK0081B002In =
		{
			{EKK0081B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B002}
			// 機能コード
			, {EKK0081B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
			// ＫＥＹ＿SYSYID
			, {EKK0081B002CBSMsg.KEY_SYSID, sysid}
		};

		// サービスIF実行
		CAANMsg[] eKK0081B002Msg1List = callSC(handle, scCall, param, fixedText, eKK0081B002In,
				new EKK0081B002CBSMsg().getContents()).getCAANMsgList(EKK0081B002CBSMsg.EKK0081B002CBSMSG1LIST);
		
		
		if (null != eKK0081B002Msg1List)
		{
			for (CAANMsg eKK0081B002Msg : eKK0081B002Msg1List)
			{
				// 重複チェック　重複している場合はリストに出力しない。
				if (checkSvcKeiNo(resultList, eKK0081B002Msg.getString(EKK0081B002CBSMsg1List.SVC_KEI_NO)))
				{
					continue;
				}
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK0081B002CBSMsg1List.SVC_KEI_NO, eKK0081B002Msg.getString(EKK0081B002CBSMsg1List.SVC_KEI_NO));
				resultMap.put(EKK0081B002CBSMsg1List.SVC_KEI_STAT, eKK0081B002Msg.getString(EKK0081B002CBSMsg1List.SVC_KEI_STAT));
				resultList.add(resultMap);
			}
		}
		return resultList;
	}
	
	/**
	 *サービス契約一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param svcKeiNo サービス契約番号
	 * @param func_cd 機能コード
	 * @return 結果
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK0081A010(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String svcKeiNo)throws Throwable
	{
		//申込明細一意照会
		List<HashMap<String, Object>> eKK0081A010List = new ArrayList<HashMap<String, Object>>();

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//申込明細一意照会の上りマッピング
		Object[][] eKK0081A010In =
		{
			{EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010}
			// 機能コード："2"
			, {EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
			// ＫＥＹ＿サービス契約番号
			, {EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
			// ＫＥＹ＿適用年月日
			, {EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)}
		};

		// サービスIF実行
		CAANMsg[] eKK0081A010Msg1List = callSC(handle, scCall, param, fixedText, eKK0081A010In,
				new EKK0081A010CBSMsg().getContents()).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		if (null != eKK0081A010Msg1List)
		{
			for (CAANMsg eKK0081A010Msg : eKK0081A010Msg1List)
			{
				HashMap<String, Object> eKK0081A010Map = new HashMap<String, Object>();
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.PRC_GRP_CD, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.PRC_GRP_CD));
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.PCRS_CD, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.PCRS_CD));
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.PPLAN_CD, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.PPLAN_CD));
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.SVC_KEI_NO, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
				eKK0081A010Map.put(EKK0081A010CBSMsg1List.SVC_KEI_STAT, eKK0081A010Msg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
				eKK0081A010List.add(eKK0081A010Map);
			}
		}
		return eKK0081A010List;
	}

	/**
	 *キャッシュポスト一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param svcCd
	 * @return キャッシュポスト一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK3191B010(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, HashMap<String, Object> eKK0081A010Msg)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		//キャッシュポスト一覧照会の上りマッピング
		Object[][] EKK3191B010In =
		{
			{EKK3191B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3191B010}
			// 機能コード："1"
			, {EKK3191B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿料金グループコード
			, {EKK3191B010CBSMsg.KEY_PRC_GRP_CD, eKK0081A010Msg.get(EKK0081A010CBSMsg1List.PRC_GRP_CD)}
			// ＫＥＹ＿料金コースコード
			, {EKK3191B010CBSMsg.KEY_PCRS_CD, eKK0081A010Msg.get(EKK0081A010CBSMsg1List.PCRS_CD)}
			// ＫＥＹ＿料金プランコード
			, {EKK3191B010CBSMsg.KEY_PPLAN_CD, eKK0081A010Msg.get(EKK0081A010CBSMsg1List.PPLAN_CD)}
		};

		// サービスIF実行
		CAANMsg[] EKK3191B010Msg1List = callSC(handle, scCall, param, fixedText, EKK3191B010In,
				new EKK3191B010CBSMsg().getContents()).getCAANMsgList(EKK3191B010CBSMsg.EKK3191B010CBSMSG1LIST);
		
		if (null != EKK3191B010Msg1List)
		{
			for (CAANMsg eKK3191B010Msg : EKK3191B010Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_CD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_CD));
				resultMap.put(EKK3191B010CBSMsg1List.PRC_GRP_CD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.PRC_GRP_CD));
				resultMap.put(EKK3191B010CBSMsg1List.PCRS_CD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.PCRS_CD));
				resultMap.put(EKK3191B010CBSMsg1List.PPLAN_CD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.PPLAN_CD));
				resultMap.put(EKK3191B010CBSMsg1List.MAX_KANGEN_AMNT, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.MAX_KANGEN_AMNT));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_CAMPAIGN_NM, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_CAMPAIGN_NM));
				resultMap.put(EKK3191B010CBSMsg1List.TEMPLATE_CD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.TEMPLATE_CD));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_STDARD_PRD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_STDARD_PRD));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_STDARD_PRD_SBT, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_STDARD_PRD_SBT));
				resultMap.put(EKK3191B010CBSMsg1List.GUIDE_WAY_SBT, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.GUIDE_WAY_SBT));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_TSTAYMD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_TSTAYMD));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_TENDYMD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_TENDYMD));
				resultMap.put(EKK3191B010CBSMsg1List.DSP_JUN, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.DSP_JUN));
				resultMap.put("svc_kei_no", eKK0081A010Msg.get(EKK0081A010CBSMsg1List.SVC_KEI_NO));
				resultMap.put("svc_kei_stat", eKK0081A010Msg.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
				// ANK-3704-00-00 ADD START
				resultMap.put(EKK3191B010CBSMsg1List.GOKEI_MAX_KANGEN_AMNT, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.GOKEI_MAX_KANGEN_AMNT));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_MSKM_STAYMD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_MSKM_STAYMD));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_MSKM_ENDYMD, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_MSKM_ENDYMD));
				resultMap.put(EKK3191B010CBSMsg1List.CASHPOST_STDARDDAY_SBT, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.CASHPOST_STDARDDAY_SBT));
				// ANK-3704-00-00 ADD END
				// ANK-3837-00-00 ADD START
				resultMap.put(EKK3191B010CBSMsg1List.RPDST_CASHPOST_CD_1, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.RPDST_CASHPOST_CD_1));
				resultMap.put(EKK3191B010CBSMsg1List.RPDST_CASHPOST_CD_2, (String)eKK3191B010Msg.getString(EKK3191B010CBSMsg1List.RPDST_CASHPOST_CD_2));
				// ANK-3837-00-00 ADD SEND

				resultList.add(resultMap);
			}
		}
		return resultList;
	}
	
	/**
	 *キャッシュポストサービス契約一覧照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param svcCd
	 * @return キャッシュポスト一覧照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK3201B010(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String svckeino)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		//キャッシュポスト一覧照会の上りマッピング
		Object[][] EKK3201B010In =
		{
			{EKK3201B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3201B010}
			// 機能コード："1"
			, {EKK3201B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿サービスコード
			, {EKK3201B010CBSMsg.KEY_SVC_KEI_NO, svckeino}
		};

		// サービスIF実行
		CAANMsg[] EKK3201B010Msg1List = callSC(handle, scCall, param, fixedText, EKK3201B010In,
				new EKK3201B010CBSMsg().getContents()).getCAANMsgList(EKK3201B010CBSMsg.EKK3201B010CBSMSG1LIST);
		
		if (null != EKK3201B010Msg1List)
		{
			for (CAANMsg eKK3201B010Msg : EKK3201B010Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK3201B010CBSMsg1List.CASHPOST_KEI_NO, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.CASHPOST_KEI_NO));
				resultMap.put(EKK3201B010CBSMsg1List.GENE_ADD_DTM, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.GENE_ADD_DTM));
				resultMap.put(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT));
				resultMap.put(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT_NM, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.CASHPOST_KEI_STAT_NM));
				resultMap.put(EKK3201B010CBSMsg1List.SVC_KEI_NO, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.SVC_KEI_NO));
				resultMap.put(EKK3201B010CBSMsg1List.CASHPOST_CD, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.CASHPOST_CD));
				resultMap.put(EKK3201B010CBSMsg1List.CASHPOST_CAMPAIGN_NM, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.CASHPOST_CAMPAIGN_NM));
				resultMap.put(EKK3201B010CBSMsg1List.SOHU_AMNT, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.SOHU_AMNT));
				resultMap.put(EKK3201B010CBSMsg1List.CASHPOST_RNKI_YMD, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.CASHPOST_RNKI_YMD));
				resultMap.put(EKK3201B010CBSMsg1List.MLAD, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.MLAD));
				resultMap.put(EKK3201B010CBSMsg1List.UKETORI_NINSHO_KEY, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.UKETORI_NINSHO_KEY));
				resultMap.put(EKK3201B010CBSMsg1List.UPD_DTM, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.UPD_DTM));
				// ANK-4193-00-00 ADD START
				resultMap.put(EKK3201B010CBSMsg1List.SITE_KANRI_NO, eKK3201B010Msg.getString(EKK3201B010CBSMsg1List.SITE_KANRI_NO));
				// ANK-4193-00-00 ADD END
				resultList.add(resultMap);
			}
		}
		return resultList;
	}
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return CAANMsg
	 * @throws Throwable 例外が発生した場合
	 */
	private CAANMsg callSC(SessionHandle handle
								, ServiceComponentRequestInvoker scCall
								, IRequestParameterReadWrite param
								, String dataMapKey
								, Object[][] mappingData
								, Object[][] contents) throws Throwable
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);

		Map<?, ?> result = scCall.run(paramMap, handle);

		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);

		CAANMsg msg = templates[0];

		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);

		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);

		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey, mappingData, contents);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);

		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}

		return msg;
	}
	
	/**
	 * エラー情報を取得します。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param
															, CAANMsg[] templates
															, int returnCode
															, String dataMapKey
															, Object[][] mappingData
															, Object[][] contents) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}

		if (null == JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)))
		{
			templateStatus = 0;
		}

		int bpStatus = 0;

		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (null == obj)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);

		for (int i = 0; null != contents && i < contents.length ; i++)
		{
			String itemNm = (String)contents[i][0];
			if (itemNm.endsWith(ERRITEM_SUFFIX))
			{
				String errCd = (String)template.getString(itemNm);
				if (!JKKStringUtil.isNullBlank(errCd))
				{
					inMap.put(itemNm, errCd);
				}
			}
		}

		return param;
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする<br>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param msgList
	 * @param param
	 * @param mapName
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings({ "unchecked", "cast", "boxing" })
	public IRequestParameterReadWrite editResultRP(Map<?, ?> msgList,
			IRequestParameterReadWrite param,
			String mapName) throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = null;
		
		// 業務データ設定
		dataMap = (HashMap)param.getData(mapName);
		if (dataMap == null)
		{
			dataMap = new HashMap();
			param.setData(mapName, dataMap);
		}
				
		CAANMsg msg = templates[0];

		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// エラー情報の設定
		param = editErrorInfo(param, templates, (Integer)return_code, mapName);
		
		// エラー情報のマップを取得
		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));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		
		return param;
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする<br>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param param      業務データ取得・書込用I/F
	 * @param templates  CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @param mapName    SCマップ名
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings({ "unchecked", "cast", "boxing" })
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
			CAANMsg[] templates,
			int returnCode,
			String mapName) throws Throwable
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(ECK0011B002CBSMsg.STATUS);

		if (returnCode != 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<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(mapName);
		
		Iterator<String> it = template.getHashMap().keySet().iterator();
		while (it.hasNext())
		{
			String key = it.next();
			if (key.endsWith("_err"))
			{
				if (!template.isNull(key))
				{
					inMap.put(key, template.getString(key));
				}
			}
		}
		
		return param;
	}
	
	/**
	 *キャッシュポストサービス契約更新のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @param beforeRec 前世代のレコード情報
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
// ANK-4229-00-00 DEL START
//	private HashMap<String, Object> editInMsgEKK3201C010(IRequestParameterReadWrite param,
//			HashMap<String, Object> inMap) throws RequestParameterException
//	{
// ANK-4229-00-00 DEL END
// ANK-4229-00-00 ADD START
	private HashMap<String, Object> editInMsgEKK3201C010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, HashMap<String, Object> beforeRec) throws RequestParameterException
	{
// ANK-4229-00-00 ADD END
		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));
		
		CAANMsg template = new CAANMsg(EKK3201C010CBSMsg.class.getName());
		
// ANK-4229-00-00 ADD START
		// ■■■前世代の内容を転記（初期値設定）■■■
		for (String itemNm : CASHPOST_TENKI_LIST)
		{
			template.set(itemNm, beforeRec.get(itemNm));
		}
// ANK-4229-00-00 ADD END
		
		// テンプレートID
		template.set(EKK3201C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3201C010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK3201C010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK3201C010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);
		
		// CASHPOST契約ステータス
		template.set(EKK3201C010CBSMsg.CASHPOST_KEI_STAT, CASHPOST_STAT_010);
		// CASHPOST契約番号
		template.set(EKK3201C010CBSMsg.CASHPOST_KEI_NO, inMap.get(EKK3201C010CBSMsg.CASHPOST_KEI_NO));
		// 送付金額
		template.set(EKK3201C010CBSMsg.SOHU_AMNT, inMap.get(EKK3201C010CBSMsg.SOHU_AMNT));
		// 更新年月日時分秒（更新前
		template.set(EKK3201C010CBSMsg.UPD_DTM_BF, inMap.get(EKK3201C010CBSMsg.UPD_DTM_BF));
				
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *キャッシュポスト契約登録のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK3201D010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap) 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));
		
		CAANMsg template = new CAANMsg(EKK3201D010CBSMsg.class.getName());
		
// ANK-4229-00-00 ADD START
		// ■■■初期値設定■■■
		for (String itemNm : CASHPOST_TENKI_LIST)
		{
			template.set(itemNm, "");
		}
// ANK-4229-00-00 ADD END
		
		// テンプレートID
		template.set(EKK3201D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3201D010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK3201D010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK3201D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);

		// CASHPOST契約ステータス
		template.set(EKK3201D010CBSMsg.CASHPOST_KEI_STAT, CASHPOST_STAT_010);
		// 送付金額
		template.set(EKK3201D010CBSMsg.SOHU_AMNT, inMap.get(EKK3201D010CBSMsg.SOHU_AMNT));
		// サービス契約番号
		template.set(EKK3201D010CBSMsg.SVC_KEI_NO, inMap.get(EKK3201D010CBSMsg.SVC_KEI_NO));
		// CASHPOSTコード
		template.set(EKK3201D010CBSMsg.CASHPOST_CD, inMap.get(EKK3201D010CBSMsg.CASHPOST_CD));

// ANK-4229-00-00 ADD START
		//運用日付
		String opeDate = JPCBPCommon.getOpeDate(null);
		// CASHPOST登録年月日
		template.set(EKK3201D010CBSMsg.CASHPOST_ADD_YMD, opeDate);
		String new_rpsrc_cashpost_kei_no = (String)inMap.get("new_rpsrc_cashpost_kei_no");
		if (!JKKCommonUtil.isNull(new_rpsrc_cashpost_kei_no)) {
			// ■お客さまID付け替え処理
			// 登録メール送信フラグ
			template.set(EKK3201D010CBSMsg.ADD_MAIL_SEND_FLG, JKKStrConst.CD01335_SENDTG);
			// 付け替え元CASHPOST契約番号
			template.set(EKK3201D010CBSMsg.RPSRC_CASHPOST_KEI_NO, new_rpsrc_cashpost_kei_no);
		} else {
			// ■新規登録処理
			// 登録メール送信フラグ
			template.set(EKK3201D010CBSMsg.ADD_MAIL_SEND_FLG, JKKStrConst.CD01335_SENDMI);
		}
// ANK-4229-00-00 ADD END

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}

	
	/**
	 *キャッシュポスト契約削除のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEKK3201E010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap) 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));
		
		CAANMsg template = new CAANMsg(EKK3201E010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK3201E010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3201E010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK3201E010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK3201E010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);

		// CASHPOST契約番号
		template.set(EKK3201E010CBSMsg.CASHPOST_KEI_NO, inMap.get(EKK3201E010CBSMsg.CASHPOST_KEI_NO));
		// 世代登録年月日時分秒
		template.set(EKK3201E010CBSMsg.GENE_ADD_DTM, inMap.get(EKK3201E010CBSMsg.GENE_ADD_DTM));
		// 更新年月日時分秒(更新前)
		template.set(EKK3201E010CBSMsg.UPD_DTM_BF, inMap.get(EKK3201E010CBSMsg.UPD_DTM_BF));

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 *進捗登録のサービスI/Fのメッセージを作成します。
	 * 
	 * @param param
	 * @param inMap
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 * @throws UnsupportedEncodingException 
	 */
	private HashMap<String, Object> editInMsgEKK1091D010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap, String prgMemo) throws RequestParameterException, UnsupportedEncodingException
	{
		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));
		
		CAANMsg template = new CAANMsg(EKK1091D010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(EKK1091D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1091D010);
		
		// 機能コード
		String funcCode = (String)inMap.get("func_code");
		
		// 機能コードが設定されている場合
		if (!JKKCommonUtil.isNull(funcCode))
		{
			template.set(EKK1091D010CBSMsg.FUNC_CODE, funcCode);
		}
		// 機能コードが設定されていない場合
		else
		{
			template.set(EKK1091D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		}
		
		// オペレータ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);

		// サービス契約番号
		template.set(EKK1091D010CBSMsg.SVC_KEI_NO, (String)inMap.get("svc_kei_no"));
		// 進捗ステータス
		template.set(EKK1091D010CBSMsg.PRG_STAT, PRG_STAT_I004);
		// 異動区分
		template.set(EKK1091D010CBSMsg.IDO_DIV, (String)inMap.get("ido_div"));
		// 異動年月日時分秒
		template.set(EKK1091D010CBSMsg.IDO_DTM, JFUBPCommon.getSysDateTimeStamp());
		
		//特記事項編集
		if(prgMemo.length() < 129)
		{	
			// 進捗特記事項1
			template.set(EKK1091D010CBSMsg.PRG_TKJK_1,  prgMemo.toString());
			// 進捗特記事項2
			template.set(EKK1091D010CBSMsg.PRG_TKJK_2, "");
		}
		else if(prgMemo.length() < 257)
		{
			// 進捗特記事項1
			template.set(EKK1091D010CBSMsg.PRG_TKJK_1,  prgMemo.substring(0, 128));
			// 進捗特記事項2
			template.set(EKK1091D010CBSMsg.PRG_TKJK_2, prgMemo.substring(128));
		}
		else
		{
			// 進捗特記事項1
			template.set(EKK1091D010CBSMsg.PRG_TKJK_1,  prgMemo.substring(0, 128));
			// 進捗特記事項2
			template.set(EKK1091D010CBSMsg.PRG_TKJK_2, prgMemo.substring(128, 256));
		}
		
		// 異動理由明細の作成
		List<Map<String, String>> idoRsnCdList = (List<Map<String, String>>)inMap.get(IDO_RSN_CD_LIST);
		CAANMsg[] ekk1091d010Msg1List = new CAANMsg[idoRsnCdList.size()];
		for (int i = 0; i < idoRsnCdList.size(); i++)
		{
			CAANMsg childTemplate = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
			// 異動理由コード
			childTemplate.set(EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)idoRsnCdList.get(i).get(IDO_RSN_CD));
			// 異動理由メモ
			childTemplate.set(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, (String)idoRsnCdList.get(i).get(IDO_RSN_MEMO));
			ekk1091d010Msg1List[i] = childTemplate;
		}
		template.set(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, ekk1091d010Msg1List);

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 共通項目のメッセージを作成します。
	 * @param param リクエストパラメータ
	 * @param mappingData マッピングデータ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
			Object[][] mappingData) 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));
		
		// サービスインターフェイスID
		String svcIf = (String)mappingData[0][1];
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		
		templates[0] = template;
		
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>サービスIFの結果を取得する<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param rsltMap サービスIFリスト
	 * @return templateList 結果が格納されたリスト
	 * @throws Throwable 
	 */
	private ArrayList<CAANMsg> getRsltList(Map<?, ?> rsltMap) 
	{
		
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])rsltMap.get(JCMConstants.TEMPLATE_LIST_KEY);
		ArrayList<CAANMsg> resultList = new ArrayList<CAANMsg>(Arrays.asList(templates));
		return resultList;
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		return JPCUtilCommon.Rtrim(str);
	}
	
	/**
	 * 進捗用のリストを作成します
	 */
	private void addPrg(HashMap<String, Object> childMap, String mskmDtlNo, String seikyKeiNo,
			String opSvcKeiNo, String svcKeiNo, String wribSvcKeiNo, String wribSvcCd, String opSvcCd, String sbopSvcCd, String sbopSvcKeiNo, String prgStat)
	{
		List<HashMap<String, Object>> tranResultList = new ArrayList<HashMap<String, Object>>();

		tranResultList = (List<HashMap<String, Object>>)childMap.get("tran_result_list");
		HashMap<String, Object> outChildMap = new HashMap<String, Object>();
		
		// 申込明細番号
		outChildMap.put("mskm_dtl_no", mskmDtlNo);
		// 請求契約番号
		outChildMap.put("seiky_kei_no", seikyKeiNo);
		// サービス契約番号
		outChildMap.put("svc_kei_no", svcKeiNo);
		// オプションサービス契約番号
		outChildMap.put("op_svc_kei_no", opSvcKeiNo);
		// 割引サービス契約番号
		outChildMap.put("wrib_svc_kei_no", wribSvcKeiNo);
		// 割引サービスコード
		outChildMap.put("wrib_svc_cd", wribSvcCd);
		// オプションサービスコード
		outChildMap.put("op_svc_cd", opSvcCd);
		// サブオプションサービスコード
		outChildMap.put("sbop_svc_cd", sbopSvcCd);
		// サブオプションサービス契約番号
		outChildMap.put("sbop_svc_kei_no", sbopSvcKeiNo);
		// 進捗ステータス
		outChildMap.put("prg_stat", prgStat);
		
		//リストにマップを追加
		tranResultList.add(outChildMap);
	}
	
	/**
	 * 重複しているかチェックする
	 * 
	 * @param  list     情報
	 * @param  svcKeiNo       サービス契約番号
	 * @return boolean  true：重複あり false：重複なし
	 */
	private boolean checkSvcKeiNo(List<HashMap<String, Object>> list, String svcKeiNo)
	{
		
		for (int i =0; i < list.size(); i++)
		{
			HashMap<String,Object> map = (HashMap<String,Object>)list.get(i);
			
			if (svcKeiNo.equals((String)map.get("svc_kei_no")))
			{
				return true;
			}
		}
		
		
		return false;
	}
	
	private String retStringList(ArrayList<String> tgList) {
		
		StringBuffer ret = new StringBuffer();
		
		for (String str : tgList) 
		{
			ret.append(",");
			ret.append(str);
		}
		
		return ret.toString().substring(1);
	}

	// ANK-3704-00-00 ADD START
	/**
	 * EKK0081B014_サービス契約一覧照会（複数指定）を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param svcCd
	 * @return サービス契約一覧照会（複数指定）明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK0081B014(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String svckeino)throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// サービス契約一覧照会（複数指定）の上りマッピング
		Object[][] EKK0081B014In =
		{
			{EKK0081B014CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B014}
			// 機能コード："1"
			, {EKK0081B014CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿サービスコード
			, {EKK0081B014CBSMsg.KEY_SVC_KEI_NO, "'" + svckeino + "'"}
		};

		// サービスIF実行
		CAANMsg[] EKK0081B014Msg1List = callSC(handle, scCall, param, fixedText, EKK0081B014In,
				new EKK0081B014CBSMsg().getContents()).getCAANMsgList(EKK0081B014CBSMsg.EKK0081B014CBSMSG1LIST);

		if (null != EKK0081B014Msg1List)
		{
			for (CAANMsg eKK0081B014Msg : EKK0081B014Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK0081B014CBSMsg1List.MSKM_YMD_MSKM, eKK0081B014Msg.getString(EKK0081B014CBSMsg1List.MSKM_YMD_MSKM));
				resultList.add(resultMap);
			}
		}

		return resultList;
	}

	/**
	 * 登録更新前の親番号毎の合計最大還元額チェック処理です。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @param addInfoList
	 * @param updInfoList
	 * @param delInfoList
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap chkSumAmnt(SessionHandle handle
								, IRequestParameterReadWrite param
								, String fixedText
								, String svcKeiNo
								, List addInfoList
								, List updInfoList
								, List delInfoList
								) throws Throwable
	{
		HashMap result = new HashMap();
		result.put("result", "0");

		// CASHPOSTコードリスト
		List<String> cashpostCdList = new ArrayList();
		// 親番号リスト
		List<String> cashpostOyaNoList = new ArrayList();
		// CASHPOST契約番号リスト
		List<String> cashpostKeiList = new ArrayList();
		// 親番号リスト(エラー)
		ArrayList cashpostOyaNoErrList = new ArrayList();

		// 入力された金額格納用
		HashMap amntNow = new HashMap();
		// 登録済の金額格納用(※2重登録用：ほぼ入ることはないが念のためチェック対象としておく)
		HashMap amntAddZumi = new HashMap();
		// 合計最大還元額格納用
		HashMap gokeiMaxAmnt = new HashMap();

		// 登録リスト
		if (addInfoList != null && addInfoList.size() > 0)
		{
			for (int i = 0; i < addInfoList.size(); i++)
			{
				HashMap addMap = (HashMap) addInfoList.get(i);

				String sohuAmnt = (String) addMap.get("sohu_amnt");
				String gokeiMaxKangenAmnt = (String) addMap.get("gokei_max_kangen_amnt");
				String cashpostCd = (String) addMap.get("cashpost_cd");
				String oyaNo = cashpostCd.substring(0, 4);

				// CASHPOSTコードを格納
				if (!cashpostCdList.contains(cashpostCd))
				{
					cashpostCdList.add(cashpostCd);
				}

				// 親番号を格納
				if (!cashpostOyaNoList.contains(oyaNo))
				{
					cashpostOyaNoList.add(oyaNo);
				}

				// 入力された金額の合計を計算し親番号毎に格納
				if (amntNow.containsKey(oyaNo))
				{
					int calc = Integer.parseInt((String) amntNow.get(oyaNo)) + Integer.parseInt(sohuAmnt);
					amntNow.put(oyaNo, String.valueOf(calc));
				}
				else
				{
					amntNow.put(oyaNo, sohuAmnt);
				}

				// 親番号毎の合計最大還元額(マスタ値)を格納
				if (!gokeiMaxAmnt.containsKey(oyaNo))
				{
					gokeiMaxAmnt.put(oyaNo, gokeiMaxKangenAmnt);
				}
			}
		}

		// 変更リスト
		if (updInfoList != null && updInfoList.size() > 0)
		{
			for (int i = 0; i < updInfoList.size(); i++)
			{
				HashMap updMap = (HashMap) updInfoList.get(i);

				String sohuAmnt = (String) updMap.get("sohu_amnt");
				String gokeiMaxKangenAmnt = (String) updMap.get("gokei_max_kangen_amnt");
				String cashpostKeiNo = (String) updMap.get("cashpost_kei_no");
				String cashpostCd = (String) updMap.get("cashpost_cd");
				String oyaNo = cashpostCd.substring(0, 4);

				// CASHPOSTコードを格納
				if (!cashpostCdList.contains(cashpostCd))
				{
					cashpostCdList.add(cashpostCd);
				}

				// 親番号を格納
				if (!cashpostOyaNoList.contains(oyaNo))
				{
					cashpostOyaNoList.add(oyaNo);
				}

				// CASHPOST契約番号を格納
				if (!cashpostKeiList.contains(cashpostKeiNo))
				{
					cashpostKeiList.add(cashpostKeiNo);
				}

				// 入力された金額の合計を計算し親番号毎に格納
				if (amntNow.containsKey(oyaNo))
				{
					int calc = Integer.parseInt((String) amntNow.get(oyaNo)) + Integer.parseInt(sohuAmnt);
					amntNow.put(oyaNo, String.valueOf(calc));
				}
				else
				{
					amntNow.put(oyaNo, sohuAmnt);
				}

				// 親番号毎の合計最大還元額(マスタ値)を格納
				if (!gokeiMaxAmnt.containsKey(oyaNo))
				{
					gokeiMaxAmnt.put(oyaNo, gokeiMaxKangenAmnt);
				}
			}
		}

		// 解除リスト
		if (delInfoList != null && delInfoList.size() > 0)
		{
			for (int i = 0; i < delInfoList.size(); i++)
			{
				HashMap delMap = (HashMap) delInfoList.get(i);

				String sohuAmnt = (String) delMap.get("sohu_amnt");
				String gokeiMaxKangenAmnt = (String) delMap.get("gokei_max_kangen_amnt");
				String cashpostCd = (String) delMap.get("cashpost_cd");
				String cashpostKeiNo = (String) delMap.get("cashpost_kei_no");
				String oyaNo = cashpostCd.substring(0, 4);

				// CASHPOSTコードを格納
				if (!cashpostCdList.contains(cashpostCd))
				{
					cashpostCdList.add(cashpostCd);
				}

				// 親番号を格納
				if (!cashpostOyaNoList.contains(oyaNo))
				{
					cashpostOyaNoList.add(oyaNo);
				}

				// CASHPOST契約番号を格納
				if (!cashpostKeiList.contains(cashpostKeiNo))
				{
					cashpostKeiList.add(cashpostKeiNo);
				}

				// 入力された金額の合計を計算し親番号毎に格納
				if (amntNow.containsKey(oyaNo))
				{
					int calc = Integer.parseInt((String) amntNow.get(oyaNo)) + Integer.parseInt("-" + sohuAmnt);
					amntNow.put(oyaNo, String.valueOf(calc));
				}
				else
				{
					amntNow.put(oyaNo, "-" + sohuAmnt);
				}

				// 親番号毎の合計最大還元額(マスタ値)を格納
				if (!gokeiMaxAmnt.containsKey(oyaNo))
				{
					gokeiMaxAmnt.put(oyaNo, gokeiMaxKangenAmnt);
				}
			}
		}

		// 登録済の情報を取得
		List<String> zumiOyaNo = new ArrayList<String>();
		for (int i = 0; i < cashpostCdList.size(); i++)
		{
			String cashpostCd = cashpostCdList.get(i);

			if (zumiOyaNo.contains(cashpostCd.substring(0, 4)))
			{
				// 処理済みの親番号であればスキップ
				continue;
			}

			// CASHPOSTコード(親番号)とサービス契約番号をキーに登録の情報を取得
			List<HashMap<String, Object>> eKK0081B014Msg1List = getEKK3201B020(handle, param, fixedText, svcKeiNo, cashpostCd);

			if (eKK0081B014Msg1List != null && eKK0081B014Msg1List.size() > 0)
			{
				for (HashMap<String, Object> eKK0081B014Msg : eKK0081B014Msg1List)
				{
					String stat = (String) eKK0081B014Msg.get("cashpost_kei_stat");
					String keiNo = (String) eKK0081B014Msg.get("cashpost_kei_no");
					String sohuAmnt = (String) eKK0081B014Msg.get("sohu_amnt");
					String cd = (String) eKK0081B014Msg.get("cashpost_cd");
					String oyaNo = cd.substring(0, 4);

					// 登録済の金額の合計を計算し親番号毎に格納(画面から変更/解除している契約は除く)
					if (CASHPOST_STAT_010.equals(stat) && !cashpostKeiList.contains(keiNo))
					{
						if (amntAddZumi.containsKey(oyaNo))
						{
							int calc = Integer.parseInt((String) amntAddZumi.get(oyaNo)) + Integer.parseInt(sohuAmnt);
							amntAddZumi.put(oyaNo, String.valueOf(calc));
						}
						else
						{
							amntAddZumi.put(oyaNo, sohuAmnt);
						}
					}
				}
			}

			// 処理済みの親番号を格納
			zumiOyaNo.add(cashpostCd.substring(0, 4));
		}

		// 合計最大還元額チェック(親番号毎)
		for (int i = 0; i < cashpostOyaNoList.size(); i++)
		{
			String oyaNo = cashpostOyaNoList.get(i);

			// 親番号毎の登録/変更/解除の金額の合計
			String amntNowSum = (String) amntNow.get(oyaNo);
			// 親番号毎の登録済の金額の合計
			String amntAddZumiSum = (String) amntAddZumi.get(oyaNo);
			// 親番号毎の合計最大還元額
			String gokeiMaxAmntVal = (String) gokeiMaxAmnt.get(oyaNo);

			// 金額が設定されていない場合、0円とする
			if (JKKCommonUtil.isNull(amntNowSum))
			{
				amntNowSum = "0";
			}
			if (JKKCommonUtil.isNull(amntAddZumiSum))
			{
				amntAddZumiSum = "0";
			}

			// 全合計金額を計算
			int sumAmnt = Integer.parseInt(amntNowSum) + Integer.parseInt(amntAddZumiSum);

			if (!JKKCommonUtil.isNull(gokeiMaxAmntVal) && sumAmnt > Integer.parseInt(gokeiMaxAmntVal))
			{
				// 全合計金額が合計最大還元額(マスタ値)を超えている場合、エラーとし親番号を格納する
				HashMap oyaNoMap = new HashMap();
				oyaNoMap.put("err_oya_no", oyaNo);
				cashpostOyaNoErrList.add(oyaNoMap);
			}
		}

		// エラーとなった親番号が存在する場合、エラー情報を格納する
		if (cashpostOyaNoErrList.size() > 0)
		{
			result.put("err_oya_no_list", cashpostOyaNoErrList);
			result.put("result", "1");
		}

		return result;
	}

	/**
	 * EKK3201B020_キャッシュポストサービス契約一覧照会（CASHPOSTコード）を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param svcCd
	 * @return サービス契約一覧照会（複数指定）明細
	 * @throws Throwable 例外が発生した場合
	 */
	private List<HashMap<String, Object>> getEKK3201B020(SessionHandle handle
															, IRequestParameterReadWrite param
															, String fixedText
															, String svckeino
															, String cashpostCd) throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		List<HashMap<String, Object>> resultList = new ArrayList<HashMap<String, Object>>();

		// キャッシュポストサービス契約一覧照会（CASHPOSTコード）の上りマッピング
		Object[][] EKK3201B020In =
		{
			{EKK3201B020CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3201B020}
			// 機能コード："1"
			, {EKK3201B020CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿サービス契約番号
			, {EKK3201B020CBSMsg.KEY_SVC_KEI_NO, svckeino}
			// ＫＥＹ＿CASHPOSTコード
			, {EKK3201B020CBSMsg.KEY_CASHPOST_CD, cashpostCd}
		};

		// サービスIF実行
		CAANMsg[] EKK3201B020Msg1List = callSC(handle, scCall, param, fixedText, EKK3201B020In,
				new EKK3201B020CBSMsg().getContents()).getCAANMsgList(EKK3201B020CBSMsg.EKK3201B020CBSMSG1LIST);

		if (null != EKK3201B020Msg1List)
		{
			for (CAANMsg EKK3201B020Msg : EKK3201B020Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				resultMap.put(EKK3201B020CBSMsg1List.CASHPOST_KEI_NO, EKK3201B020Msg.getString(EKK3201B020CBSMsg1List.CASHPOST_KEI_NO));
				resultMap.put(EKK3201B020CBSMsg1List.CASHPOST_KEI_STAT, EKK3201B020Msg.getString(EKK3201B020CBSMsg1List.CASHPOST_KEI_STAT));
				resultMap.put(EKK3201B020CBSMsg1List.CASHPOST_CD, EKK3201B020Msg.getString(EKK3201B020CBSMsg1List.CASHPOST_CD));
				resultMap.put(EKK3201B020CBSMsg1List.SOHU_AMNT, EKK3201B020Msg.getString(EKK3201B020CBSMsg1List.SOHU_AMNT));
				resultMap.put(EKK3201B020CBSMsg1List.CASHPOST_GRP_SEND_AMNT, EKK3201B020Msg.getString(EKK3201B020CBSMsg1List.CASHPOST_GRP_SEND_AMNT));
				resultList.add(resultMap);
			}
		}

		return resultList;
	}
	// ANK-3704-00-00 ADD END

// ANK-4229-00-00 ADD START
	/**
	 *キャッシュポストサービス契約一意照会を行うサービスインターフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param cashpost_kei_no CASHPOST契約番号
	 * @return キャッシュポストサービス契約一意照会明細
	 * @throws Throwable 例外が発生した場合
	 */
	private HashMap<String, Object> getEKK3201A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String cashpost_kei_no) throws Throwable
	{
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		//キャッシュポスト一意照会の上りマッピング
		Object[][] EKK3201A010In = { { EKK3201A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3201A010 }
		// 機能コード："1"
				, { EKK3201A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1 }
				// ＫＥＹ＿CASHPOST契約番号
				, { EKK3201A010CBSMsg.KEY_CASHPOST_KEI_NO, cashpost_kei_no } };

		// サービスIF実行
		CAANMsg[] EKK3201A010Msg1List =
				callSC(handle, scCall, param, fixedText, EKK3201A010In, new EKK3201A010CBSMsg().getContents()).getCAANMsgList(
						EKK3201A010CBSMsg.EKK3201A010CBSMSG1LIST);

		if (null != EKK3201A010Msg1List)
		{
			for (CAANMsg eKK3201A010Msg : EKK3201A010Msg1List)
			{
				HashMap<String, Object> resultMap = new HashMap<String, Object>();
				for (String item : EKK3201A010_TENKI_LIST)
				{
					resultMap.put(item, eKK3201A010Msg.getString(item));
				}
				return resultMap;
			}
		}
		return null;
	}
// ANK-4229-00-00 ADD END
}
