/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：com.fujitsu.futurity.bp.custom.common
*   ソースファイル名：JCNIspPaywayInsCC.java
*   作成者          ：富士通
*   日付            ：2011年11月23日
*＜機能概要＞
*   決済方法登録(ISP)処理を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/11/23   FJ          新規作成
*   v3.00.00	2012/08/28   FJ)小林	【ST1-2012-0000438】支払方法未登録に対する利用停止INPUTへの対応(ファミリー会員)
*   v4.00.00	2012/11/21   FJ)小林	【ST1-2012-0000982】CCMGAPIリターンコード"99070"(メール送信失敗)、"53001"(契約なし)を正常扱いとする。
*   v5.00.00	2013/10/24   FJ)味岡	【 OM-2013-0003637】登録対象会員が仮登録だった場合のリターンコードの変更(99:システムエラー → 19:契約状態エラー)
*   v16.00.00	2015/09/24   FJ)笹川	【ANK-2480-00-00】新電力対応
*   v34.00.00   2017/08/22   FJ)山地	【ANK-3210-00-00】【eo電気】電気単独対応（STEP3）
*   v47.00.00   2019/12/19   FJ)三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*   v48.00.00   2020/02/17   FJ)美濃原  【ANK-3814-00-00】eoIDログインセキュリティ強化フォロー対応
*   v65.00.00	2023/12/15	 FJ)渋谷	【ANK-4346-00-00】【eo定期】CCMG再構築対応
*   v65.00.01	2024/01/19	 FJ)張	    【ANK-4346-00-00】【eo定期】CCMG再構築対応
*   v65.00.02	2024/01/27	 FJ)張	    【ANK-4346-00-00】【eo定期】CCMG再構築対応
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.getSecurityRenkeiTelno;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.getResultMsgList;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.getResultString;
import static com.fujitsu.futurity.bp.custom.common.JCNDslCommonUtil.printSyslog4War;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.CNSV0036_CNSV0036OP_CNSV003601CC;
import com.fujitsu.futurity.bp.custom.constant.CNSV0036_CNSV0036OP_CNSV003601CC_payment_setting_list;
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.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
import com.fujitsu.futurity.bp.x21.values.MessageID;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.common.JSYbpmLog;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JCNStrConst;
import eo.ejb.cbs.cbsmsg.ECH0231B020CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0231B020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011B050CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011C011CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0131B001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0131B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECN0131C011CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0131D011CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0131E011CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0210001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0220001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECNA0220001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECNA9010001CBSMsg;

/**
 *  決済方法登録(ISP)処理を行います。
 * <BR>
 * @author 富士通
 */
public class JCNIspPaywayInsCC extends AbstractCommonComponent implements ICommonComponent
{
	/** 共通コンポーネントID */
	public static String CCID = "CNSV003601CC";
	
	/** 空文字 */
	private static final String S_BLANK = JCNStrConst.S_BLANK;
	
	/** SC実行結果格納用(リターンコード)*/
	private static String rtnCode = "";
	
	/** SC実行結果格納用(ステータス)*/
	private static int status = 0;
	
	/** 督促ステータス格納用*/
	private static String tokusokuStas = "";
	
	/** リターンコード(正常終了)*/
	private static final String RETURN_CD_OK = JCNStrConst.RETURN_CD_OK;
	
	/** リターンコード(システムエラー)*/
	private static final String RETURN_CD_SYS_ERR = JCNStrConst.RETURN_CD_SYS_ERR;
	
	/** リターンコード(パラメータエラー)*/
	private static final String RETURN_CD_PARAM_ERR = JCNStrConst.RETURN_CD_PARAM_ERR;
	
	/** リターンコード(回線状態エラー)*/
	private static final String RETURN_CD_STATUS_ERR = JCNStrConst.RETURN_CD_STATUS_ERR;
	
// ANK-3210-00-00 DEL START
//v16.00.00 2015/09/24 Add Start
// 	/** リターンコード(ISP決済先エラー)*/
// 	private static final String RETURN_CD_ISP_ERR = JCNStrConst.RETURN_CD_ISP_ERR;
//v16.00.00 2015/09/24 Add End
// ANK-3210-00-00 DEL END
	
	/** 支払方法入力支援コード(ISP決済)*/
	private static final String PAYWAY_INPUT_SHIEN_CD_ISP = JCNStrConst.PAYWAY_INPUT_SHIEN_CD_ISP;
	
	/** サービス契約ステータス：停止中(220) */
	private static final String SVC_KEI_STAT_STOP = JCNStrConst.SVC_KEI_STAT_STOP;
	
	/** 督促ステータス：利用停止済み(20) */
	private static final String TOKUSOKU_STAT_STOP = JCNStrConst.TOKUSOKU_STAT_STOP;
	
	/** 会員種別コード：ファミリー会員個人(11) */
	private static final String MEMBER_SBT_CD_11 = JCNStrConst.MEMBER_SBT_CD_11;
	
	/** 会員種別コード：ファミリー会員法人(21) */
	private static final String MEMBER_SBT_CD_21 = JCNStrConst.MEMBER_SBT_CD_21;
	
	/** ISP利用停止フラグ：利用停止 */
	private static final String ISP_STOP_FLG_STOP = JCNStrConst.ISP_STOP_FLG_STOP;
	
	/** ISP利用停止フラグ：利用可 */
	private static final String ISP_STOP_FLG_POSIBLE = JCNStrConst.ISP_STOP_FLG_POSIBLE;
	
	/** AxMテーブルID(支払方法情報レプリカ登録) */
	private static final String AXM_TBL_ID_TNM00060 = JCNStrConst.AXM_TBL_ID_TNM00060;
	
	/** 指示書登録用PG_ID */
	private static final String PG_ID = JCNStrConst.PG_ID;
	
	/** 更新者(コンテンツ管理連携パラメータ） */
	private static final String API_CONTENTS_UPDATE_NAME = JCNStrConst.API_CONTENTS_UPDATE_NAME;
	
	/** CCMGAPIリターンコード(コンテンツ管理連携パラメータ） */
	private static final String CCMG_API_RETUN_CD_OK =JCNStrConst.CCMG_API_RETUN_CD_OK;
	
	/** CCMGAPIリターンコード(メール送信エラー） */
	private static final String CONTENTS_RESPONSE_SENDMAIL_ERROR = "99070";
	
	/** CCMGAPIリターンコード(契約情報なし） */
	private static final String CONTENTS_RESPONSE_NO_CONTRACT = "53001";
	
	//ANK-4346-00-00 ADD START
	/** SCの最終実行結果取得用のマップキー(当部品内でのみ使用) */
	public static final String LAST_RESULT_KEY = "LCS_LAST_RESULT";
	//ANK-4346-00-00 ADD END
	
	/**
	 * 共通コンポーネント実行
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return 
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite executeIspPaywayInsMain(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// 下りユーザデータマップのセット
		@SuppressWarnings("unused")
		Map<String, Object> resultMap = new HashMap();
		// 初期値として正常終了を設定
		setResultUserData(param, CCID, returnParamMake(RETURN_CD_OK, S_BLANK));
		
		// 入力パラメータ格納
		Map<String, Object> ccParam = (Map<String, Object>)param.getData(CCID);
		
		Object paymentList = ccParam.get(CNSV0036_CNSV0036OP_CNSV003601CC.PAYMENT_SETTING_LIST);
		
		List<Map> paymentListMap = new ArrayList();
		paymentListMap = (List)paymentList;
		
		//パラメータ格納変数
		String sys_id = "";
		String okyakusama_id = "";
		String isp_stop_flg = "";
		
		/*******************************/
		/** パラメータチェック         */
		/*******************************/
		if(!checkParam(paymentListMap))
		{
			// パラメータエラー
			setResultUserData(param, CCID, returnParamMake(RETURN_CD_PARAM_ERR, S_BLANK));
			
			return param;
		}
		
		for(int i = 0; i < paymentListMap.size(); i++)
		{
			String resultCd = "";
			
			sys_id = (String)paymentListMap.get(i).get(CNSV0036_CNSV0036OP_CNSV003601CC_payment_setting_list.SYS_ID);
			okyakusama_id = (String)paymentListMap.get(i).get(CNSV0036_CNSV0036OP_CNSV003601CC_payment_setting_list.OKYAKUSAMA_ID);
			isp_stop_flg = (String)paymentListMap.get(i).get(CNSV0036_CNSV0036OP_CNSV003601CC_payment_setting_list.ISP_STOP_FLG);
			// ISP利用停止フラグ読み替え処理
			if(!ISP_STOP_FLG_STOP.equals(isp_stop_flg))
			{
				isp_stop_flg = ISP_STOP_FLG_POSIBLE;
			}
			
			/*************************************/
			/** お客様一意照会取得処理           */
			/*************************************/
			// 会員種別取得
			Map<?, ?> custResult = callCkParamSc(handle, param, sys_id);
			
			if(custResult == null)
			{
				printErrorLog("お客様から会員種別コードが取得できませんでした。" + "(KEY:SYSID=" + sys_id + ")");
				// 回線状態エラー(お客様データ不在としては扱わない)
				setResultUserData(param, CCID, returnParamMake(RETURN_CD_STATUS_ERR, S_BLANK));
				break;
			}
			
			String memSbtCd = getResultString(custResult, ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST + "[0]" + "." 
					+  ECK0011A010CBSMsg1List.MEMBER_SBT_CD);
			String updDtm = getResultString(custResult, ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST + "[0]" + "." 
					+  ECK0011A010CBSMsg1List.UPD_DTM);
			
			// ANK-3814-00-00 DEL START
			// ANK-3706-00-00 ADD START
			// 契約者電話番号
			//String keishaTelno = getResultString(custResult, ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST + "[0]" + "." 
			//		+  ECK0011A010CBSMsg1List.KEISHA_TELNO);
			// ANK-3706-00-00 ADD END
			// ANK-3814-00-00 DEL END
			// ANK-3814-00-00 ADD START
			// eoIDセキュリティ強化連携電話番号取得
			String wkTelno = getResultString(custResult, ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST + "[0]" + "." 
					+  ECK0011A010CBSMsg1List.KEISHA_TELNO);
			String keishaTelno = getSecurityRenkeiTelno(handle, param, sys_id, memSbtCd, wkTelno);
			// ANK-3814-00-00 ADD END
			
			/*************************************/
			/** 支払方法入力支援一覧取得処理     */
			/*************************************/
			Map<?, ?> result = callPayweyListSc(handle, param, sys_id);
			if(result == null)
			{
				printErrorLog("支払方法入力支援一覧(ISP決済)の取得に失敗しました。" + "(KEY:SYSID=" + sys_id + ")");
				// システムエラー
				setResultUserData(param, CCID, returnParamMake(RETURN_CD_STATUS_ERR, S_BLANK));
				break;
			}
			String ispNo = replaceNullToBlank(getResultString(result, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
					+  ECN0131B001CBSMsg1List.ISP_KSSAI_SVC_KEI_NO));
			
			/*************************************/
			/** 回線状態・督促状態取得処理       */
			/*************************************/
			String kkStat = "";
			if(!isNullOrBlank(okyakusama_id)){
				kkStat = callFtthStatusSc(handle, param, okyakusama_id);
			
//			else
//			{
//				kkStat = callFtthStatusSc(handle, param, ispNo);
//			}
			
				if(!RETURN_CD_OK.equals(kkStat))
				{
					if(RETURN_CD_SYS_ERR.equals(kkStat))
					{
						printErrorLog("回線状態・督促状態取得に失敗しました。" + "(KEY:SVC_KEI_NO=" + okyakusama_id + ")");
					}
					// エラー
					setResultUserData(param, CCID, returnParamMake(kkStat, ""));
					break;
				}
			}
			
// ANK-3210-00-00 DEL START
//v16.00.00 2015/09/24 Add Start
//			/****************************************/
//			/** ISP決済方法登録時、サービスチェック */
//			/****************************************/
//			//お客様IDが未設定(支払方法ISP削除の場合)は実行しない。
//			if(!isNullOrBlank(okyakusama_id))
//			{
//				if(!callservCheck(handle, param, sys_id, okyakusama_id))
//				{
//					//ISP決済先エラー
//					setResultUserData(param, CCID, returnParamMake(RETURN_CD_ISP_ERR, S_BLANK));
//					break;
//				}
//			}
//v16.00.00 2015/09/24 Add End
// ANK-3210-00-00 DEL END
			
			/*************************************/
			/** コンテンツISP利用情報変更処理    */
			/** ファミリー会員の場合のみ         */
			/*************************************/
			// 「11」:ファミリー会員、または、「21」:ファミリー会員(法人)
			// かつ 入力パラメータ.お客様ID≠更新前お客様IDの場合
			if((MEMBER_SBT_CD_11.equals(memSbtCd) ||
					MEMBER_SBT_CD_21.equals(memSbtCd))
					&& (!ispNo.equals(replaceNullToBlank(okyakusama_id)))){
			
				// コンテンツISP利用情報変更
				resultCd = callUpdateCust(handle, param, sys_id, isp_stop_flg, updDtm);
				if(RETURN_CD_STATUS_ERR.equals(resultCd))
				{
					printErrorLog("コンテンツISP利用情報変更に失敗しました。対象会員が仮登録会員です。" + "(KEY:SYSID=" + sys_id + ")");
					// システムエラー
					setResultUserData(param, CCID, returnParamMake(RETURN_CD_STATUS_ERR, S_BLANK));
					break;
				}
				
				if(RETURN_CD_SYS_ERR.equals(resultCd))
				{
					printErrorLog("コンテンツISP利用情報変更に失敗しました。お客様スキーマ更新エラー。" + "(KEY:SYSID=" + sys_id + ")");
					// システムエラー
					setResultUserData(param, CCID, returnParamMake(RETURN_CD_SYS_ERR, S_BLANK));
					break;
				}

				// 会員情報更新CBSMsg.決済情報リスト.決済情報.お客さまID＝""の場合
				// (入力パラメータ.お客様IDが未設定の場合は、ファミリー会員のISP利用停止とみなし論理削除する。)
				if(isNullOrBlank(okyakusama_id)){
					/*************************************/
					/** 支払方法入力支援削除処理         */
					/** (指示書登録含む)                 */
					/*************************************/
					resultCd = callDeletePaywey(handle, param, result);
					if(RETURN_CD_SYS_ERR.equals(resultCd))
					{
						printErrorLog("支払方法入力支援削除処理(論理削除)に失敗しました。" + "(KEY:SYSID=" + sys_id + ")");
						// システムエラー
						setResultUserData(param, CCID, returnParamMake(RETURN_CD_SYS_ERR, S_BLANK));
						break;
					}
				}
			}
			
			/*************************************/
			/** お客様更新指示書作成処理         */
			/** ファミリー会員の場合のみ         */
			/*************************************/
			if((MEMBER_SBT_CD_11.equals(memSbtCd) || 
					MEMBER_SBT_CD_21.equals(memSbtCd))
					&& (!ispNo.equals(replaceNullToBlank(okyakusama_id))))
			{
				// ANK-3706-00-00 MOD START
				//if(!callUpdCustShiji(handle, param, sys_id, isp_stop_flg))
				if(!callUpdCustShiji(handle, param, sys_id, isp_stop_flg, keishaTelno))
				// ANK-3706-00-00 MOD END
				{
					printErrorLog("コンテンツISP利用情報変更に失敗しました。" + "(KEY:SYSID=" + sys_id + ")");
					// システムエラー
					setResultUserData(param, CCID, returnParamMake(RETURN_CD_SYS_ERR, S_BLANK));
					break;
				}
			}
			/*************************************/
			/** 支払方法入力支援登録処理         */
			/** (指示書登録含む)                 */
			/*************************************/
			// 会員情報更新CBSMsg.決済情報リスト.決済情報.お客さまID≠""の場合
			// かつ 会員情報更新CBSMsg.決済情報リスト.決済情報.お客さまID≠会員情報更新CBSMsg.更新前会員情報(ISP決済お客さまID)の場合
			if(!isNullOrBlank(okyakusama_id)
					&& !ispNo.equals(okyakusama_id)){

				if(isNullOrBlank(ispNo))
				{
					//登録
					resultCd = callInsertPaywey(handle, param, sys_id, okyakusama_id);
					if(RETURN_CD_SYS_ERR.equals(resultCd))
					{
						printErrorLog("支払方法入力支援登録に失敗しました。" + "(KEY:SYSID=" + sys_id + ")");
						// システムエラー
						setResultUserData(param, CCID, returnParamMake(RETURN_CD_SYS_ERR, S_BLANK));
						break;
					}
				}
				else
				{
					//更新
					resultCd = callUpdPaywey(handle, param, sys_id, okyakusama_id, result);
					if(RETURN_CD_SYS_ERR.equals(resultCd))
					{
						printErrorLog("支払方法入力支援更新に失敗しました。" + "(KEY:SYSID=" + sys_id + ")");
						// システムエラー
						setResultUserData(param, CCID, returnParamMake(RETURN_CD_SYS_ERR, S_BLANK));
						break;
					}
				}
			}
			// INPUTお客様IDが登録内容と変更がない場合は、処理終了。
			if(ispNo.equals(replaceNullToBlank(okyakusama_id)))
			{
				continue;
			}
			
			/*************************************/
			/** CCMG連携(ISP決済方法変更API)     */
			/*************************************/
			// お客様IDが未設定(支払方法ISP削除の場合)は実行しない。
			if(!isNullOrBlank(okyakusama_id))
			{
				if(!callPaywayUpdCCMG(handle, param, sys_id, okyakusama_id))
				{
					// システムエラー
					setResultUserData(param, CCID, returnParamMake(RETURN_CD_SYS_ERR, S_BLANK));
					break;
				}
			}
			/*************************************/
			/** CCMG連携(ISP決済強制解約予告API) */
			/*************************************/
			// 入力パラメータ.お客様IDが未設定の場合は、ISP利用停止とみなし実行する。
			if(MEMBER_SBT_CD_11.equals(memSbtCd) ||
					MEMBER_SBT_CD_21.equals(memSbtCd))
			{
				if(isNullOrBlank(okyakusama_id))
				{
					if(!callPaywayDissolCCMG(handle, param, sys_id))
					{
						// システムエラー
						setResultUserData(param, CCID, returnParamMake(RETURN_CD_SYS_ERR, S_BLANK));
						break;
					}
				}
			}
			
		}
		
		// 終了判定
		String returnCd = (String)ccParam.get(CNSV0036_CNSV0036OP_CNSV003601CC.RETURN_CD);
		if(RETURN_CD_SYS_ERR.equals(returnCd))
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", String.valueOf(rtnCode), status);
			throw scCallEx;
		}
		
		
		return param;
	}
	
	/**
	 * 返却パラメータ作成処理
	 * @param retrnCd リターンコード
	 * @param ckUpdDtm お客様更新日付(排他エラー時のみ)
	 * @return resultMap
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private Map<String, Object> returnParamMake(String retrnCd, String ckUpdDtm) throws Throwable
	{
		Map<String, Object> resultMap = new HashMap();
		
		resultMap.put(CNSV0036_CNSV0036OP_CNSV003601CC.RETURN_CD, retrnCd);
		resultMap.put(CNSV0036_CNSV0036OP_CNSV003601CC.CK_UPD_DTM_RES, ckUpdDtm);
		resultMap.put(CNSV0036_CNSV0036OP_CNSV003601CC.KK_UPD_DTM_RES, "");
		
		return resultMap;
	}
	
	/**
	 * パラメータチェック
	 * @param List<Map> paymentListMap
	 * @return true:チェックOK,false:チェックNG
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private boolean checkParam(List<Map> paymentListMap) throws Throwable
	{
		boolean rtn = true;
		
		
		
		// 決済情報リストなし
		if(paymentListMap.size() == 0){
			return false;
		}
		
		String sys_id = "";
		String okyakusama_id = "";
		String isp_stop_flg = "";
		
		// 決済情報リスト
		for(int i = 0; i < paymentListMap.size(); i++)
		{
			sys_id = (String)paymentListMap.get(i).get(CNSV0036_CNSV0036OP_CNSV003601CC_payment_setting_list.SYS_ID);
			okyakusama_id = (String)paymentListMap.get(i).get(CNSV0036_CNSV0036OP_CNSV003601CC_payment_setting_list.OKYAKUSAMA_ID);
			isp_stop_flg = (String)paymentListMap.get(i).get(CNSV0036_CNSV0036OP_CNSV003601CC_payment_setting_list.ISP_STOP_FLG);
			
			// SYSID
			if(isNullOrBlank(sys_id))
			{
				return false;
			}

			// お客さまID、ISP決済利用停止フラグの両方が未設定の場合、パラメータエラー
			if(isNullOrBlank(okyakusama_id)
					&& isNullOrBlank(isp_stop_flg))
			{
				return false;
			}
			// お客さまID、ISP決済利用停止フラグの両方が設定の場合、パラメータエラー
			if(!isNullOrBlank(okyakusama_id)
					&& !isNullOrBlank(isp_stop_flg))
			{
				return false;
			}
		}
		
		return rtn;
	}
	
	/**
	 * お客様一意照会SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @return お客様.会員種別
	 * @throws Throwable
	 */
	private Map<?, ?> callCkParamSc(SessionHandle handle, IRequestParameterReadWrite param, String sysid) throws Throwable
	{
		/***************************************************/
		/** お客様一意照会SCへの上りマッピング */
		/***************************************************/
		String templateId = "ECK0011A010";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECK0011A010CBSMsg.KEY_SYSID, sysid);
		param4serviceIf.put(ECK0011A010CBSMsg.KEY_GENE_ADD_DTM, JCCBPCommon.getOpeDateTimeStamp(null));
		param4serviceIf.put(ECK0011A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECK0011A010CBSMsg.class , param4serviceIf, "2");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			result = null;
			return result;
		}
		return result;
	}
	
	/**
	 * 支払方法入力支援一覧の取得処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @return 取得結果(SCエラー発生時はNULL)
	 * @throws Throwable
	 */
	private Map<?, ?> callPayweyListSc(SessionHandle handle, IRequestParameterReadWrite param, String sysid) throws Throwable
	{
		/***************************************************/
		/** 支払方法入力支援一覧SCへの上りマッピング */
		/***************************************************/
		String templateId = "ECN0131B001";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECN0131B001CBSMsg.KEY_SYSID, sysid);
		param4serviceIf.put(ECN0131B001CBSMsg.KEY_PAYWAY_INPUT_SHIEN_CD, PAYWAY_INPUT_SHIEN_CD_ISP);
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECN0131B001CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			result = null;
			return result;
		}
		return result;
	}
	
	/**
	 * 回線契約状態・督促状態の取得処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param okyakusama_id お客様ID
	 * @return 00:チェックOK,19:チェックNG,99:システムエラー
	 * @throws Throwable
	 */
	private String callFtthStatusSc(SessionHandle handle, IRequestParameterReadWrite param, String okyakusama_id) throws Throwable
	{
		/***************************************************/
		/** 回線契約状態情報取得SCへの上りマッピング */
		/***************************************************/
		String templateId = "ECH0231B020";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECH0231B020CBSMsg.KEY_SVC_KEI_NO, okyakusama_id);
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECH0231B020CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			return RETURN_CD_SYS_ERR;
		}
		
		// サービス契約ステータス
		String svcStas = getResultString(result, ECH0231B020CBSMsg.ECH0231B020CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECH0231B020CBSMsg1List.SVC_KEI_STAT);
		
		// 督促ステータス
		tokusokuStas = getResultString(result, ECH0231B020CBSMsg.ECH0231B020CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECH0231B020CBSMsg1List.TOKUSOKU_STAT);
		
		// 督促ステータスは督促があった場合のみ取得されるため、取得できなかった場合は読みかえる
		if(isNullOrBlank(tokusokuStas))
		{
			tokusokuStas = "00";
		}
		
		if (SVC_KEI_STAT_STOP.equals(svcStas) || TOKUSOKU_STAT_STOP.equals(tokusokuStas))
		{
			return RETURN_CD_STATUS_ERR;
		}

		return RETURN_CD_OK;
	}
	
	/**
	 * コンテンツISP利用情報変更SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @param isp_stop_flg ISP利用停止フラグ
	 * @return 00:正常終了,99:システムエラー
	 * @throws Throwable
	 */
	private String callUpdateCust(SessionHandle handle, IRequestParameterReadWrite param, String sysid, String isp_stop_flg, String updDtmBf) throws Throwable
	{
		
		/************************************************/
		/** コンテンツISP利用情報変更への上りマッピング */
		/************************************************/
		String templateId = "ECK0011C011";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECK0011C011CBSMsg.SYSID, sysid);
		param4serviceIf.put(ECK0011C011CBSMsg.CONT_ISP_USE_FAIL_FLG, isp_stop_flg);
		param4serviceIf.put(ECK0011C011CBSMsg.UPD_DTM_BF, updDtmBf);
		String opeDate = JCCBPCommon.getOpeDate("");
		if(ISP_STOP_FLG_POSIBLE.equals(isp_stop_flg))
		{
			opeDate = "";
		}
		param4serviceIf.put(ECK0011C011CBSMsg.CONT_ISP_USE_STP_YMD, opeDate);
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECK0011C011CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		
		// お客様の状態が仮登録会員の場合はリターンコード「19:回線状態エラー」を返却
		if(("0".equals(rtnCode) && 1150 == status)) 
		{
			return RETURN_CD_STATUS_ERR;
		}
		
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			return RETURN_CD_SYS_ERR;
		}
		
		return RETURN_CD_OK;
	}
	
	
	/**
	 * 支払方法入力支援登録SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @param okyakusama_id お客様ID
	 * @return 00:正常終了,99:システムエラー
	 * @throws Throwable
	 */
	private String callInsertPaywey(SessionHandle handle, IRequestParameterReadWrite param, String sysid, String okyakusama_id) throws Throwable
	{
		
		/***********************************************************/
		/** 支払方法入力支援登録SCへの上りマッピング */
		/***********************************************************/
		String templateId = "ECN0131D011";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECN0131D011CBSMsg.SYSID, sysid);
		param4serviceIf.put(ECN0131D011CBSMsg.PAYWAY_INPUT_SHIEN_CD, PAYWAY_INPUT_SHIEN_CD_ISP);
		param4serviceIf.put(ECN0131D011CBSMsg.ISP_KSSAI_SVC_KEI_NO, okyakusama_id);
//		param4serviceIf.put(ECN0131D011CBSMsg.CRECARD_ID, S_BLANK);
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECN0131D011CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			return RETURN_CD_SYS_ERR;
		}
		
		/***************************************************/
		/** 指示書登録処理実行                             */
		/***************************************************/
		if(!callPaywayInsertShiji(handle, param, result))
		{
			return RETURN_CD_SYS_ERR;
		}
		
		return RETURN_CD_OK;
	}
	
	/**
	 * 支払方法入力支援更新SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @param okyakusama_id お客様ID
	 * @return 00:正常終了,99:システムエラー
	 * @throws Throwable
	 */
	private String callUpdPaywey(SessionHandle handle, IRequestParameterReadWrite param, String sysid, String okyakusama_id, Map<?, ?> paywayMap) throws Throwable
	{
		
		/***********************************************************/
		/** 支払方法入力支援更新SCへの上りマッピング */
		/***********************************************************/
		String templateId = "ECN0131C011";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECN0131C011CBSMsg.KEY_PAYWAY_NO, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.PAYWAY_NO));
		param4serviceIf.put(ECN0131C011CBSMsg.KEY_UPD_DTM, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.UPD_DTM));
		param4serviceIf.put(ECN0131C011CBSMsg.PAYWAY_INPUT_SHIEN_CD, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.PAYWAY_INPUT_SHIEN_CD));
		param4serviceIf.put(ECN0131C011CBSMsg.TSYRN_PAY_SEQ, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.TSYRN_PAY_SEQ));
		param4serviceIf.put(ECN0131C011CBSMsg.ISP_KSSAI_SVC_KEI_NO, okyakusama_id);
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECN0131C011CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			return RETURN_CD_SYS_ERR;
		}
		
		/***************************************************/
		/** 指示書登録処理実行                             */
		/***************************************************/
		if(!callPaywayUpdateShiji(handle, param, result, sysid))
		{
			return RETURN_CD_SYS_ERR;
		}
		
		return RETURN_CD_OK;
	}
	
	/**
	 * 支払方法入力支援削除SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param paywayMap 支払方法入力支援一覧取得結果
	 * @return 00:正常終了,99:システムエラー
	 * @throws Throwable
	 */
	private String callDeletePaywey(SessionHandle handle, IRequestParameterReadWrite param, Map<?, ?> paywayMap) throws Throwable
	{
		
		/***********************************************************/
		/** 支払方法入力支援削除SCへの上りマッピング */
		/***********************************************************/
		String templateId = "ECN0131E011";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECN0131E011CBSMsg.KEY_PAYWAY_NO, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.PAYWAY_NO));
		param4serviceIf.put(ECN0131E011CBSMsg.KEY_UPD_DTM, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.UPD_DTM));
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECN0131E011CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			return RETURN_CD_SYS_ERR;
		}
		
		/***************************************************/
		/** 指示書登録処理実行                             */
		/***************************************************/
		if(!callPaywayDeleteShiji(handle, param, paywayMap, result))
		{
			return RETURN_CD_SYS_ERR;
		}
		
		return RETURN_CD_OK;
	}
	
	/**
	 * 指示書登録(登録時)SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param insertResult 登録結果マップ
	 * @return true:登録OK,false:登録NG
	 * @throws Throwable
	 */
	private boolean callPaywayInsertShiji(SessionHandle handle, IRequestParameterReadWrite param, Map<?, ?> insertResult) throws Throwable
	{
		
		String sysId = getResultString(insertResult, ECN0131D011CBSMsg.SYSID);
		
		/***********************************************************/
		/** 指示書登録SCへの上りマッピング */
		/***********************************************************/
		String templateId = "ECK0151D010";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECK0151D010CBSMsg.TRN_CD, JCNStrConst.TRN_CD_REPRICA);
		param4serviceIf.put(ECK0151D010CBSMsg.TRGT_TABLE_ID, AXM_TBL_ID_TNM00060);
		param4serviceIf.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "13");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_1, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_2, getResultString(insertResult, ECN0131D011CBSMsg.PAYWAY_INPUT_SHIEN_CD));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_3, getResultString(insertResult, ECN0131D011CBSMsg.TSYRN_PAY_SEQ));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_4, getResultString(insertResult, ECN0131D011CBSMsg.ISP_KSSAI_SVC_KEI_NO));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_5, getResultString(insertResult, ECN0131D011CBSMsg.CRECARD_ID));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_6, getResultString(insertResult, ECN0131D011CBSMsg.MK_FLG));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_7, getResultString(insertResult, ECN0131D011CBSMsg.ADD_DTM));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_8, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_9, PG_ID);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_10, getResultString(insertResult, ECN0131D011CBSMsg.UPD_DTM));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_11, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_12, PG_ID);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_13, tokusokuStas);
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECK0151D010CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			printErrorLog("指示書登録(登録時)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysId + ")");
			return false;
		}
		
		return true;
	}
	
	/**
	 * 指示書登録(削除時)SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param paywayMap 支払方法入力支援一覧結果マップ
	 * @param delMap 支払方法入力支援削除結果マップ
	 * @return true:登録OK,false:登録NG
	 * @throws Throwable
	 */
	private boolean callPaywayDeleteShiji(SessionHandle handle, IRequestParameterReadWrite param, Map<?, ?> paywayMap, Map<?, ?> delMap) throws Throwable
	{
		
		String sysId = getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.SYSID);
		
		/***********************************************************/
		/** 指示書登録SCへの上りマッピング */
		/***********************************************************/
		String templateId = "ECK0151D010";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECK0151D010CBSMsg.TRN_CD, JCNStrConst.TRN_CD_REPRICA);
		param4serviceIf.put(ECK0151D010CBSMsg.TRGT_TABLE_ID, AXM_TBL_ID_TNM00060);
		param4serviceIf.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "13");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_1, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_2, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.PAYWAY_INPUT_SHIEN_CD));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_3, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.TSYRN_PAY_SEQ));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_4, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.ISP_KSSAI_SVC_KEI_NO));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_5, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.CRECARD_ID));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_6, getResultString(delMap, ECN0131E011CBSMsg.MK_FLG));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_7, getResultString(paywayMap, ECN0131B001CBSMsg.ECN0131B001CBSMSG1LIST + "[" + 0 + "]" + "." 
				+  ECN0131B001CBSMsg1List.UPD_DTM));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_8, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_9, PG_ID);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_10, getResultString(delMap, ECN0131E011CBSMsg.UPD_DTM));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_11, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_12, PG_ID);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_13, tokusokuStas);
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECK0151D010CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			printErrorLog("指示書登録(削除時)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysId + ")");
			return false;
		}
		
		return true;
	}
	
	/**
	 * 指示書登録(更新時)SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param paywayMap 支払方法入力支援更新結果マップ
	 * @return true:登録OK,false:登録NG
	 * @throws Throwable
	 */
	private boolean callPaywayUpdateShiji(SessionHandle handle, IRequestParameterReadWrite param, Map<?, ?> paywayMap ,String sysId) throws Throwable
	{
		
		/***********************************************************/
		/** 指示書登録SCへの上りマッピング */
		/***********************************************************/
		String templateId = "ECK0151D010";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECK0151D010CBSMsg.TRN_CD, JCNStrConst.TRN_CD_REPRICA);
		param4serviceIf.put(ECK0151D010CBSMsg.TRGT_TABLE_ID, AXM_TBL_ID_TNM00060);
		param4serviceIf.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "13");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_1, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_2, getResultString(paywayMap, ECN0131C011CBSMsg.PAYWAY_INPUT_SHIEN_CD));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_3, getResultString(paywayMap, ECN0131C011CBSMsg.TSYRN_PAY_SEQ));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_4, getResultString(paywayMap, ECN0131C011CBSMsg.ISP_KSSAI_SVC_KEI_NO));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_5, getResultString(paywayMap, ECN0131C011CBSMsg.CRECARD_ID));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_6, getResultString(paywayMap, ECN0131C011CBSMsg.MK_FLG));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_7, getResultString(paywayMap, ECN0131C011CBSMsg.UPD_DTM));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_8, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_9, PG_ID);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_10, getResultString(paywayMap, ECN0131C011CBSMsg.UPD_DTM));
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_11, sysId);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_12, PG_ID);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_13, tokusokuStas);
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECK0151D010CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			printErrorLog("指示書登録(更新時)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysId + ")");
			return false;
		}
		
		return true;
	}
	
	/**
	 * 指示書登録(会員情報更新時)SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @param deisp_stop_flglMap ISP利用停止フラグ
	 * @param keishaTelno 連携電話番号（契約者電話番号、コンテンツ電話番号等）
	 * @return true:登録OK,false:登録NG
	 * @throws Throwable
	 */
	// ANK-3706-00-00 MOD START
	//private boolean callUpdCustShiji(SessionHandle handle, IRequestParameterReadWrite param, String sysid, String isp_stop_flg) throws Throwable
	private boolean callUpdCustShiji(SessionHandle handle, IRequestParameterReadWrite param, String sysid, String isp_stop_flg, String keishaTelno) throws Throwable
	// ANK-3706-00-00 MOD END
	{
		
		/***********************************************************/
		/** 指示書登録SCへの上りマッピング */
		/***********************************************************/
		String templateId = "ECK0151D010";
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		param4serviceIf.put(ECK0151D010CBSMsg.TRN_CD, "A01");
		param4serviceIf.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid);
		param4serviceIf.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		// ANK-3706-00-00 MOD START
		//param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "19");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "22");
		// ANK-3706-00-00 MOD END
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_1, "PU");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_3, sysid);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_11, isp_stop_flg);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_19, JCCBPCommon.getOpeDateTimeStamp(null));
		// ANK-3706-00-00 ADD START
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_20, keishaTelno);
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_21, "");
		param4serviceIf.put(ECK0151D010CBSMsg.PARAMETER_22, "");
		// ANK-3706-00-00 ADD END
		
		HashMap<String, Object> paramMap = createScParam(param, templateId, ECK0151D010CBSMsg.class , param4serviceIf, "1");

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		Map<?, ?> result = scCall.run(paramMap, handle);
		// 処理結果判定
		resultChkSc(result);
		if(!("0".equals(rtnCode) && 0 == status)) 
		{
			printErrorLog("指示書登録(会員情報更新時)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysid + ")");
			return false;
		}
		
		return true;
	}
	
	/**
	 * CCMG連携(ISP決済方法変更API)SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @param okyakusama_id サービス契約番号
	 * @return true:結果OK,false:結果NG
	 * @throws Throwable
	 */
	private boolean callPaywayUpdCCMG(SessionHandle handle, IRequestParameterReadWrite param, String sysid, String okyakusama_id) throws Throwable
	{
		/***********************************************************/
		/** CCMG連携(ISP決済方法変更API)SCへの上りマッピング       */
		/***********************************************************/
		//ANK-4346-00-00 DEL START
//		String templateId = "ECNA9010001";
//      String templateId = "ECNA0220001";
		//ANK-4346-00-00 DEL END
		//ANK-4346-00-00 MOD START
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
//		param4serviceIf.put(ECNA9010001CBSMsg.IN_SYS_ID, sysid);
//		param4serviceIf.put(ECNA9010001CBSMsg.SVC_KEI_NO, );
//		param4serviceIf.put(ECNA9010001CBSMsg.UPD_ID, sysid);
//		param4serviceIf.put(ECNA9010001CBSMsg.UPD_NM, API_CONTENTS_UPDATE_NAME);
		param4serviceIf.put(ECNA0220001CBSMsg.SYSID, sysid);
		param4serviceIf.put(ECNA0220001CBSMsg.SETTLEMENT_WAY_ID, okyakusama_id);
		param4serviceIf.put(ECNA0220001CBSMsg.UPDATE_ID, sysid);
		param4serviceIf.put(ECNA0220001CBSMsg.UPDATE_NAME, API_CONTENTS_UPDATE_NAME);
		//ANK-4346-00-00 MOD END
		
		//ANK-4346-00-00 MOD START
//		HashMap<String, Object> paramMap = createScParam(param, templateId, ECNA9010001CBSMsg.class , param4serviceIf, "3");
//      HashMap<String, Object> paramMap = createScParam(param, templateId, ECNA0220001CBSMsg.class , param4serviceIf, "1");		
		HashMap<String, Object> paramMap = JCKBPCommon.createScParamForSearch(param, ECNA0220001CBSMsg.class , param4serviceIf, "1");
		//ANK-4346-00-00 MOD END

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		//ANK-4346-00-00 ADD START
		printDebugLog("CCMG連携(ISP決済方法変更API呼出)SC呼び出し開始");
		Map<?, ?> result = scCallRun(param, handle, paramMap);
		printDebugLog("CCMG連携(ISP決済方法変更API呼出)SC呼び出し完了" + result);
		//ANK-4346-00-00 ADD END
		//ANK-4346-00-00 DEL START
		//ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		//Map<?, ?> result = scCall.run(paramMap, handle);
		//ANK-4346-00-00 DEL END
		// 処理結果判定
		resultChkSc(result);
		// ANK-4346-00-00 MOD START
//		if(!("0".equals(rtnCode) && 0 == status)) 
//		{
//			printErrorLog("CCMG連携(ISP決済方法変更API)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysid + ")");
//			return false;
//		}
//		String returnCdApi = getResultString(result, ECNA9010001CBSMsg.ERR_CD);
//		if(!CCMG_API_RETUN_CD_OK.equals(returnCdApi))
//		{
//			printErrorLog("CCMG連携(ISP決済方法変更API)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysid
//					+ ",CCMG_API_RETURN_CD=" + returnCdApi + ")");
//			return false;
//		}
      //ANK-4346-00-00 ADD START
		CAANMsg[] resultMap =(CAANMsg[]) result.get("templates");
		int status = resultMap[0].getInt(ECNA0220001CBSMsg.STATUS);
 	//ANK-4346-00-00 ADD END
		CAANMsg[] ResultList = getResultMsgList(result, ECNA0220001CBSMsg.ECNA0220001CBSMSG1LIST);
		
		String err_cd = "";
		String httpstacd = "";
		if(ResultList != null && ResultList.length != 0)
		{
			err_cd = ResultList[0].getString(ECNA0220001CBSMsg1List.ERR_CD);
			httpstacd = ResultList[0].getString(ECNA0220001CBSMsg1List.HTTPSTATUS);
		}
		// ANK-4346-00-00 MOD START
		//if(!"204".equals(httpstacd))
		if(0 != status)
		{
		// ANK-4346-00-00 MOD END
			String strMessage1 = "CNIFE054_ISP決済方法変更";
			String strMessage2 =  "HTTPステータスコード={" + httpstacd
			+ "}、エラーコード={" + err_cd + "}、SYSID={" + sysid + "}、決済方法ID={" + okyakusama_id +  "}";
			String strMessage = strMessage1 + "が異常終了しました。" + strMessage2;
			//JSYbpmLog.println(JSYLogBase.EXECUTION, JCKPmpCommonUtil.class ,strMessage, "",  new String[]{"", ""}, "");
			JSYbpmLog.println(JSYLogBase.EXECUTION, JCKPmpCommonUtil.class, strMessage , "BPCON0E004", new String[]{"", ""}, "");
			// メッセージログ（システムログ）にメッセージID「EKBF880-KW」に該当するメッセージを出力する
			printSyslog4War("CNIFE054","EKBF880-KW",strMessage);
			return false;
		}
		// ANK-4346-00-00 MOD END
		return true;
	}
	
	/**
	 * CCMG連携(ISP決済強制解約予告API)SCの実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param sysid SYSID
	 * @return true:結果OK,false:結果NG
	 * @throws Throwable
	 */
	private boolean callPaywayDissolCCMG(SessionHandle handle, IRequestParameterReadWrite param, String sysid) throws Throwable
	{
		/***********************************************************/
		/** CCMG連携(ISP決済強制解約予告API)SCへの上りマッピング       */
		/***********************************************************/
		//ANK-4346-00-00 DEL START
//		String templateId = "ECNA9010001";
//      String templateId = "ECNA0220001";
		// ANK-4346-00-00 DEL END
		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
		// ANK-4346-00-00 MOD START
//		param4serviceIf.put(ECNA9010001CBSMsg.IN_SYS_ID, sysid);
//		param4serviceIf.put(ECNA9010001CBSMsg.UPD_ID, sysid);
//		param4serviceIf.put(ECNA9010001CBSMsg.UPD_NM, API_CONTENTS_UPDATE_NAME);
		param4serviceIf.put(ECNA0220001CBSMsg.SYSID, sysid);
		param4serviceIf.put(ECNA0220001CBSMsg.UPDATE_ID, sysid);
		param4serviceIf.put(ECNA0220001CBSMsg.UPDATE_NAME, API_CONTENTS_UPDATE_NAME);
		// ANK-4346-00-00 MOD END
		
		// ANK-4346-00-00 MOD START
//		HashMap<String, Object> paramMap = createScParam(param, templateId, ECNA9010001CBSMsg.class , param4serviceIf, "4");
//		HashMap<String, Object> paramMap = createScParam(param, templateId, ECNA0220001CBSMsg.class , param4serviceIf, "1");
		HashMap<String, Object> paramMap = JCKBPCommon.createScParamForSearch(param, ECNA0220001CBSMsg.class , param4serviceIf, "1");
		
		// ANK-4346-00-00 MOD END

		/***************************************************/
		/** SC呼出実行                                     */
		/***************************************************/
		//ANK-4346-00-00 ADD START
		printDebugLog("CCMG連携(ISP決済方法変更API呼出)SC呼び出し開始");
		Map<?, ?> result = scCallRun(param, handle, paramMap);
		printDebugLog("CCMG連携(ISP決済方法変更API呼出)SC呼び出し完了" + result);
		//ANK-4346-00-00 ADD END
		//ANK-4346-00-00 DEL START
		//ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		//Map<?, ?> result = scCall.run(paramMap, handle);
		//ANK-4346-00-00 DEL END
		
		// 処理結果判定
		resultChkSc(result);
		// ANK-4346-00-00 MOD START
//		if(!("0".equals(rtnCode) && 0 == status)) 
//		{
//			printErrorLog("CCMG連携(ISP決済強制解約予告)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysid + ")");
//			return false;
//		}
//		
//		String returnCdApi = getResultString(result, ECNA9010001CBSMsg.ERR_CD);
//		
//		// ※エラーコードが "00000"(正常)、"99070"(メール送信失敗)、"53001"(契約なし) の場合は "0"(正常)、それ以外は "1"(異常) を設定
//		if(!CCMG_API_RETUN_CD_OK.equals(returnCdApi)
//				&& !CONTENTS_RESPONSE_SENDMAIL_ERROR.equals(returnCdApi)
//				&& !CONTENTS_RESPONSE_NO_CONTRACT.equals(returnCdApi))
//		{
//			printErrorLog("CCMG連携(ISP決済強制解約予告API)SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysid
//					+ ",CCMG_API_RETURN_CD=" + returnCdApi + ")");
//			return false;
//		}
       //ANK-4346-00-00 ADD START
		CAANMsg[] resultMap =(CAANMsg[]) result.get("templates");
		int status = resultMap[0].getInt(ECNA0220001CBSMsg.STATUS);
		//ANK-4346-00-00 ADD END
		CAANMsg[] ResultList = getResultMsgList(result, ECNA0220001CBSMsg.ECNA0220001CBSMSG1LIST);
		
		String err_cd = "";
		String httpstacd = "";
		if(ResultList != null && ResultList.length != 0)
		{
			err_cd = ResultList[0].getString(ECNA0220001CBSMsg1List.ERR_CD);
			httpstacd = ResultList[0].getString(ECNA0220001CBSMsg1List.HTTPSTATUS);
		}
		// ANK-4346-00-00 MOD START
		//if(!"204".equals(httpstacd))
		if(0 != status)
		{
		// ANK-4346-00-00 MOD END
			String strMessage1 = "CNIFE054_ISP決済方法変更";
			String strMessage2 =  "HTTPステータスコード={" + httpstacd
			+ "}、エラーコード={" + err_cd + "}、SYSID={" + sysid + "}";
			String strMessage = strMessage1 + "が異常終了しました。" + strMessage2;
			//JSYbpmLog.println(JSYLogBase.EXECUTION, JCKPmpCommonUtil.class ,strMessage, "",  new String[]{"", ""}, "");
			JSYbpmLog.println(JSYLogBase.EXECUTION, JCKPmpCommonUtil.class, strMessage , "BPCON0E004", new String[]{"", ""}, "");
			// メッセージログ（システムログ）にメッセージID「EKBF880-KW」に該当するメッセージを出力する
			printSyslog4War("CNIFE054","EKBF880-KW",strMessage);
			return false;
		}
		// ANK-4346-00-00 MOD END

		return true;
	}
	
	
// ANK-3210-00-00 DEL START
//v16.00.00 2015/09/24 Add Start
//	/**
//	 * サービス契約一意照会SCの実行
//	 * @param handle セッションハンドル
//	 * @param param リクエストパラメータ
//	 * @param sysid SYSID
//	 * @return true:結果OK,false:結果NG
//	 * @throws Throwable
//	 */
//	private boolean callservCheck(SessionHandle handle, IRequestParameterReadWrite param, String sysid, String okyakusama_id) throws Throwable
//	{
//		/***********************************************************/
//		/** サービス契約一意照会SCへの上りマッピング       */
//		/***********************************************************/
//		String templateId = "EKK0081A010";
//		Map<Object, Object> param4serviceIf = new HashMap<Object, Object>();
//		param4serviceIf.put(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, okyakusama_id);
//		param4serviceIf.put(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));
//
//		HashMap<String, Object> paramMap = createScParam(param, templateId, EKK0081A010CBSMsg.class , param4serviceIf, "2");
//
//		/***************************************************/
//		/** SC呼出実行                                     */
//		/***************************************************/
//		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
//		
//		Map<?, ?> result = scCall.run(paramMap, handle);
//		// 処理結果判定
//		resultChkSc(result);
//		if(!("0".equals(rtnCode) && 0 == status)) 
//		{
//			printErrorLog("サービス契約一意照会SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysid + ")");
//			return false;
//		}
//		String retGrpCd = getResultString(result, EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST + "[0]" + "." 
//				+  EKK0081A010CBSMsg1List.PRC_GRP_CD);
//		if("17".equals(retGrpCd))
//		{
//			printErrorLog("サービス契約一意照会SCにてエラーが発生しました。" + "(KEY:SYSID=" + sysid + ", PRC_GRP_CD=" + retGrpCd + ")");
//			return false;
//		}
//		return true;
//	}
//v16.00.00 2015/09/24 Add End
// ANK-3210-00-00 DEL END
	
	/**
	 * SC呼出用のパラメータを作成します。
	 * @param param リクエストパラメータ
	 * @param templateId テンプレートID
	 * @param cbsMsgClass CBSMsgクラス
	 * @param param4serviceIf サービスインターフェイス用パラメータ
	 * @param funcCode 機能コード
	 * @return SC呼出用パラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private static HashMap<String, Object> createScParam(IRequestParameterReadOnly param,
			String templateId, Class<?> cbsMsgClass , Map param4serviceIf, String funcCode) throws RequestParameterException
	{

		// 受け取ったリクエストパラメータを元に、ＳＣ呼出用の上りマップを生成する。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		CAANMsg[] templates = new CAANMsg[1];

		CAANMsg template = new CAANMsg(cbsMsgClass.getName());

		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文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());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		Object clientHostName = param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME);
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, clientHostName);

		// 依頼元IPアドレス
		Object clientIPAddress = param.getControlMapData(SCControlMapKeys.REQ_HOSTIP);
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, clientIPAddress);

		// 依頼元画面ID
		Object clientViewId = param.getControlMapData(SCControlMapKeys.REQ_VIEWID);
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, clientViewId);

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		paramMap.put(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);

		// **********************************************
		// 【取得元：ユーザデータ
		// **********************************************

		// テンプレートIDのセット
		paramMap.put(JCMConstants.TEMPLATE_ID_KEY, templateId);
		template.set(JCMConstants.TEMPLATE_ID_KEY, templateId);
		template.set(JCMConstants.FUNC_CODE_KEY, funcCode);
		
		setNullOtherColumn(cbsMsgClass, param4serviceIf);
		
		// 入力パラメータのセット
		template.setMsgDataOfAll((HashMap)param4serviceIf);
		templates[0] = template;

		paramMap.put("templates", templates);

		return paramMap;
	}
	
	/**
	 * 入力パラメータ値の指定がない項目にnullをセットする。<br/>
	 * @param cbsMsgClass CBSMsgクラス
	 * @param param4serviceIf サービスインターフェイス用パラメータ
	 */
	@SuppressWarnings("unchecked")
	public static void setNullOtherColumn(Class<?> cbsMsgClass, Map param4serviceIf) 
	{

		try 
		{
			java.lang.reflect.Field fieldContents = cbsMsgClass.getDeclaredField("CONTENTS");
			fieldContents.setAccessible(true);
			Object[][] contents = (Object[][])fieldContents.get(cbsMsgClass);

			// サービスインターフェイスの列情報を取得
			Map<String, String> colInfo = new HashMap<String, String>();
			for (int i = 0; i < contents.length; i++) 
			{
				Object[] obj = contents[i];
				colInfo.put(obj[0].toString(), obj[1].toString());
			}

			/* エラーフィールド(項目末尾が"_err"の項目)の定義されている項目を入力項目と見なし
			   当該フィールドについて、パラメータ値の指定がない場合は項nullをセットする */
			for (int i = 0; i < contents.length; i++) 
			{
				Object[] obj = contents[i];
				String errFieldName = obj[0].toString();
				if (errFieldName.matches(".*_err$"))
				{
					String fieldName = errFieldName.replaceAll("_err$", "");
					String colDataType = colInfo.get(fieldName);
					if (("String".equals(colDataType))||("Long".equals(colDataType))) 
					{
						// 指定がない項目にnullをセット
						if (!param4serviceIf.containsKey(fieldName))
						{
							param4serviceIf.put(fieldName, null);
						}
					}
				}
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * SCの返却情報からCAANMsgリストを取得する。
	 * @param result SCの返却情報
	 * @param listName リスト名
	 * @return CAANMsgリスト
	 */
	public static CAANMsg[] getResultMsgList(Map<?, ?> result, String listName)
	{
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = parentTemplate.getCAANMsgList(listName);
		if (templateArray == null)
		{
			templateArray = new CAANMsg[]{};
		}
		return templateArray;
	}
	
	/**
	 * SCの返却情報から任意の項目のデータを文字列で取得する。
	 * @param result SCの返却情報
	 * @param columnName 項目名
	 * @return 対象項目のデータ
	 */
	public static String getResultString(Map<?, ?> result, String columnName)
	{
		String strVal = null;

		CAANMsg[] templates = (CAANMsg[]) result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg caanMsg = templates[0];
		String[] colNames = columnName.split("\\.");
		for (int i = 0; i < colNames.length; i++) 
		{
			String tmpColName = colNames[i];
			if (tmpColName.matches(".+\\[[0-9]+\\]$")) 
			{
				String listName = tmpColName.replaceAll("\\[[0-9]+\\]", "");
				String indexStr = tmpColName.replace(listName, "").replaceAll("(\\[|\\])", "");
				int index = Integer.parseInt(indexStr);
				if (caanMsg != null)
				{
					CAANMsg[] listData = caanMsg.getCAANMsgList(listName);
					if (listData == null)
					{
						break;
					}
					else if ((listData.length - 1) >= index)
					{
						caanMsg = listData[index];
					}
					else
					{
						break;
					}
				}
			} 
			else
			{
				if (i == (colNames.length - 1))
				{
					if (caanMsg != null)
					{
						strVal = caanMsg.getString(tmpColName);
					}
				}
				else
				{
					if (caanMsg != null)
					{
						caanMsg = caanMsg.getCAANMsg(tmpColName);
					}
				}
			}
		}
		return strVal;
	}
	
	/**
	 * 下りユーザデータマップのセット。
	 * @param param リクエストパラメータ
	 * @param scMapkey SCのID
	 * @param userData 追加でセットするユーザデータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public static void setResultUserData(IRequestParameterReadWrite param, String scMapkey, Map userData) throws Throwable
	{

		// SCから取得したデータのセット
		if (userData != null)
		{
			Map<String, Object> userDataRef = (Map<String, Object>)param.getData(scMapkey);
			Iterator iterator = userData.keySet().iterator();
			while (iterator.hasNext()) 
			{
				String mapKey = (String)iterator.next();
				Object mapVal = userData.get(mapKey);
				userDataRef.put(mapKey, mapVal);
			}
		}
	}
	
	/**
	 * SC処理結果取得
	 * @param result オブジェクト名
	 * @return boolean(true:正常,false:エラー)
	 */
	private void resultChkSc(Map<?, ?> result)
	{
		rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		CAANMsg[] templates = (CAANMsg[]) result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		status = msg.getInt(JCMConstants.STATUS_INT_KEY);
	}
	
	/**
     * メソッド名  ：null、空文字判定
     * メソッド説明：nullもしくは空文字の判定を行う
     * 備考：
     * @param strCheck 対象文字列
     * @return true :対象文字列がnullもしくは空文字
     *          false:上記以外
     */
	private static boolean isNullOrBlank(String strCheck) 
	{
		
		// 対象文字列が対象文字列がnullもしくは空文字の場合、trueを返す
		return strCheck == null || S_BLANK.equals(strCheck);
	}
	
	/**
	 * メソッド名  ：null文字→空文字変換
	 * メソッド説明：対象文字列がnull文字の場合、空文字に変換して返す
	 * 備考    
	 * @param base 対象文字列
	 * @return 変換後文字列
	 */
    public static String replaceNullToBlank(String base) {
    	
    	// 引数の対象文字列がnullの場合
        if(base == null) {
        	// 空文字を返す
            return S_BLANK;
        }
        
        // 引数の対象文字列がnullでない場合、そのまま返す
        return base;
    }

	/**
	 * エラーログ出力
	 * @param errMsg エラーメッセージ
	 */
	private void printErrorLog(String errMsg)
	{
		StackTraceElement[] steAll = Thread.currentThread().getStackTrace();
		String errorInfo = "";
		if (steAll.length >= 3) 
		{
			StackTraceElement ste = steAll[2];
			errorInfo = JCNStrConst.S_LINE_SEPARAOR_LF + "	at " + ste.getClassName() + "." + ste.getMethodName() + 
			"(" + ste.getFileName() + ":" + ste.getLineNumber()+")"+ JCNStrConst.S_LINE_SEPARAOR_LF;
		}
		JSYbpmLog.println(JSYLogBase.ERROR, this.getClass() , errorInfo, MessageID.DEB_X21_DEBUG_MSG,  
				new String[]{"### CCでエラー発生 ###", errMsg } , "");
	}
	
	// ANK-4346-00-00 ADD START
	/**
	 * デバッグログ出力
	 * @param debugMsg デバッグメッセージ
	 */
	@SuppressWarnings("unchecked")
	public static void printDebugLog(String debugMsg){
		Class cls = getTargetClass();
		JSYbpmLog.println(JSYLogBase.DEBUG, cls , debugMsg, MessageID.DEB_X21_DEBUG_MSG,  new String[]{"", ""}, "");
	}
	
	/**
	 * 呼出元のクラスを取得する。
	 * @return クラスClass
	 */
	@SuppressWarnings("unchecked")
	private static Class getTargetClass(){
		StackTraceElement[] steAll = Thread.currentThread().getStackTrace();
		StackTraceElement ste = steAll[3];
		Class cls = null;
		try {
			cls = Class.forName(ste.getClassName());
		} catch (ClassNotFoundException e) {
			// スタックトレースからの参照の為、Classが存在しない事はありえない
		}
		return cls;
	}
	
	/**
	 * SCを実行します。
	 * <br />
	 * SCの実行結果はリクエストパラメータのユーザデータにも設定される。(マップキー：#LCS_LAST_RESULT# )
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param paramMap パラメータマップ
	 * @return 実行結果
	 * @throws SCException
	 * @throws RequestParameterException
	 */
	public static Map<?, ?> scCallRun(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> paramMap) throws SCException,
			RequestParameterException
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		param.setData(LAST_RESULT_KEY, result);
		return result;
	}
	// ANK-4346-00-00 ADD END

}
