/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKPopPwdShkkaRnkAddCC
 *   ソースファイル名：JKKPopPwdShkkaRnkAddCC.java
 *   作成者          ：富士通
 *   日付            ：2011年08月12日
 *＜機能概要＞
 *   POPPW初期化連携
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/08/12   FJ）桜井    新規作成
 *   v1.01.00    2012/03/14   CUBE 藤川   ST1-2012-0000012 ＰＭＰより連携されたリクエストパラメータ変更に伴う修正
 *  v22.00.00    2016/01/15   FJ）栗秋    ANK-2608-00-00 メール受信設定API サービス契約状態制御追加
 *
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAddSjishoConst;
import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKSodSendConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.JSYbpmLog;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;



/**
 * POPPW初期化連携
 * <p>
 * <br>
 * Myポータル画面から連携されたPOPIdのPOPPWを初期化する <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JKKPopPwdShkkaRnkAddCC extends AbstractCommonComponent
{
	
	/** ----- 作業用クラスフィールド ----- **/
	// IT1-2013-0000291 2013/02/26 MOD START
//	private static String oPE_DATE = "";
	private String oPE_DATE = "";	
	// IT1-2013-0000291 2013/02/26 MOD END
	
//	/** 結果のキャッシュ **/
//	private static final ArrayList<HashMap<String, Object>> CASH_RESULTS = new ArrayList<HashMap<String, Object>>();
//	
//	/** ----- リクエストパラメータ定数 ----- **/
//	/** 処理区分**/
//	private static final String PROCESS_DIV = "PROCESS_DIV";
//	
//	/** 処理区分 ＰＯＰＩＤのパスワード初期化**/
//	private static final String PROCESS_DIV_POP= "01";
	
	/** POPPW初期化連携登録　作業項目リスト **/
	private static final String KKSV011501CC = "KKSV011501CC";
	
//	/** オーダ種別コード **/
//	private static final String ODR_STB_CD_NET = "1";
//	
//	/** サービスオーダコード **/
//	private static final String SVC_ODR_CD_ML = "03";
//	
//	/** オーダ発行条件コード **/
//	private static final String ODR_HAKKO_JOKEN_CD_SOKUJI = "01";
//	
//	/** 要求種別 **/
//	private static final String YOKYU_SBT_CD_CHG = "04";
	
	/** POPIDリスト **/
	private static final String POPID_LIST = "POP_ID_LIST";

	/** SYSID **/
	private static final String SYSID = "sysid";
	
	/** SYSID(データ取得用) **/
	private static final String REQSYSID = "SYS_ID";
	
	/** SYSID(データ取得用) **/
	private static final String REQPOPID = "POPID";

	/** サービス契約番号 **/
	private static final String SVC_KEI_NO = "svc_kei_no";

	/** オプションサービスコード **/
	private static final String OP_SVC_CD_EMAIL = "B001";
	
	/** 申込種別コード オプション申込み **/
	private static final String MSKM_STB_CD_00026 = "00026";
	
//	/** オーダ内容コード **/
//	private static final String ODR_NAIYO_CD_POP = "109";
	
	/** 異動区分 **/
	private static final String IDO_DIV_00052 = "00052";
	
	/** POPID **/
	private static final String POP_ID = "pop_id";

	/** 進捗ステータス お客様パスワード初期化 **/
	private static final String PRG_STAT_5301 = "5301";
	
	/** ----- スキーマID定数 ----- **/
	/** 申込内容承認登録 **/
	private static final String TEMPLATE_ID_EKK0011D020 = "EKK0011D020";
	
	/** 申込明細照査・後続業務依頼 **/
	private static final String TEMPLATE_ID_EKK0021C060 = "EKK0021C060";
	
	/** 解約済以外サービス契約一覧照会（SYSID） **/
	private static final String TEMPLATE_ID_EKK0081B003 = "EKK0081B003";

	/** オプションサービス契約＜ISP＞一意照会 **/
	private static final String TEMPLATE_ID_EKK0361A010 = "EKK0361A010";

	/** オプションサービス契約＜ISP＞利用中Eメール一覧照会 **/
	private static final String TEMPLATE_ID_EKK0361B002 = "EKK0361B002";
	
//	/** 申込明細登録 **/
//	private static final String TEMPLATE_ID_EKK0021D010 = "EKK0021D010";

	/** オプションサービス契約<ISP>情報変更 **/
	private static final String TEMPLATE_ID_EKK0361C050 = "EKK0361C050";
	
//	/** オーダ発行条件登録 **/
//	private static final String TEMPLATE_ID_EKK1081D010 = "EKK1081D010";
	
	/** 進捗登録 **/
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	
//	/** オーダ情報作成ワーク登録 **/
//	private static final String TEMPLATE_ID_EKK1551D010 = "EKK1551D010";
	
	/** オプションサービス契約一意照会 **/
	private static final String TEMPLATE_ID_EKK0351A010 = "EKK0351A010";

	// 2012-03-13 ST1-2012-0000012 ADD_START
	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	
//	/** 機能コード 1 */
//	private static final String FUNC_CD_1 = "1";
	/** 機能コード 2 */
	private static final String FUNC_CD_2 = "2";
	
	/** サービスコード 01:インターネット */
	private static final String SVC_CD_01 = "01";
	
	/** オプションサービス契約番号 */
	private static final String OP_SVC_KEI_NO = "op_svc_kei_no";
	
	/** 世代登録年月日時分秒 */
	private static final String GENE_ADD_DTM = "gene_add_dtm";
	
	/** リターンコード 対象データなし */
	private static final int RTN_NO_DATA = 99;

	// 2012-03-13 ST1-2012-0000012 ADD_END

	//↓↓↓2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↓↓↓
	public static final String SJISHO_MAP = "KKSV0115_SJISHO";
	
	public static final String RETURN_CODE = "return_code";
	//↑↑↑2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↑↑↑

	// ST1-2012-0000989 ADD_START
	private static final String FUNC_CODE_1 = "1";
	// ST1-2012-0000989 ADD_END
	

//↓↓↓2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↓↓↓
//	/** オプション排他用更新年月日 */
//	private String opLastUpdDtm = "";
//↑↑↑2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↑↑↑


	/**
	 *　POPPW初期化連携
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		
		HashMap<String, Object> requestParam = null;
		int statusCode = 0;

		//作業日の取得
		oPE_DATE = JCCBPCommon.getOpeDate(null);
		
//		//キャッシュのクリア
//		CASH_RESULTS.clear();
		
		//リクエストパラメータの取得
		requestParam = analyzeRequestParam(param);
	
		{
			//メイン処理開始
			statusCode = mainProc(
					handle, 
					param, 
					requestParam,
					fixedText);
		
//↓↓↓2012-08-27無効　ST1-2012-000418対応のついで（業務エラーとFWエラー切り分け）↓↓↓
//			//エラー発生の場合はSCCallExceptionで返す
//			if(statusCode != 0)
//			{
//				new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));
//			}
//↑↑↑2012-08-27無効　ST1-2012-000418対応のついで（業務エラーとFWエラー切り分け）↑↑↑
		}
		
		//リターンコードの設定
		//↓↓↓2012-08-27変更　ST1-2012-000418対応のついで（業務エラーとFWエラー切り分け）↓↓↓
		//param.setControlMapData(SCControlMapKeys.RETURN_CODE, String.valueOf(statusCode));
		setReturnCode(param, statusCode);
		//↑↑↑2012-08-27変更　ST1-2012-000418対応のついで（業務エラーとFWエラー切り分け）↑↑↑
		
		//処理終了
		return param;
		
	}


	/**
	 * メイン処理
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param requestParam リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return SIF呼び出し時のリターンコード
	 * @throws Throwable
	 */
	private int mainProc(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap<String, Object> requestParam,
			String fixedText) throws Throwable
	{
		//初期処理
		//POPIDの取得
		HashMap<String, Object> popIdList2 = (HashMap<String, Object>)requestParam.get(POPID_LIST);
		
		ArrayList<HashMap<String, Object>> eKK0081B003HashList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> retirnList = new HashMap<String,Object>();
		HashMap<String, Object> wkResultHash = new HashMap<String, Object>();
		
		int statusCode = 0;

		ArrayList<HashMap<String, Object>> eKK0081A010HashList = new ArrayList<HashMap<String, Object>>();		//2012-04-11追加


		//サービス契約一覧照会呼び出しと抽出
		statusCode = callEKK0081B003SC(
				param, 
				handle, 
				requestParam, 
				eKK0081B003HashList,
				wkResultHash);

		//失敗していたらステータスコードを返却する
		if(statusCode != 0)
		{
			return statusCode;
		}
		
//		int setCnt = 0;
		
		//サービス契約の取得分だけループ
		for(int i = 0 ; i < eKK0081B003HashList.size() ; i++)
		{
			
			HashMap<String, Object> eKK0081B003Hash = null;
			
			//１要素の取得
			eKK0081B003Hash = eKK0081B003HashList.get(i);

			if (!SVC_CD_01.equals(eKK0081B003Hash.get(EKK0081B003CBSMsg1List.SVC_CD))) 
			{
				continue;
			}
		
			String svckeiNo = (String) eKK0081B003Hash.get(EKK0081B003CBSMsg1List.SVC_KEI_NO);	//2012-04-11追加

			HashMap<String, Object> eKK0081A010Hash = new HashMap<String, Object>();
	
			// サービス契約一意照会
			statusCode = callEKK0081A010SC(param, handle, eKK0081A010Hash, svckeiNo);
			
			//失敗していたらステータスコードを返却する
			if(statusCode != 0)
			{
				return statusCode;
			}
			
			ArrayList<HashMap<String, Object>> eKK0361B002HashList = null;
			eKK0361B002HashList = new ArrayList<HashMap<String, Object>>();
			CAANMsg[] eKK0081A010CBSMSG1list = (CAANMsg[])eKK0081A010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
			HashMap<String, Object> eKK0081A010 = (HashMap<String, Object>)eKK0081A010CBSMSG1list[0].getMsgData();

			// ANK-2608-00-00 2016/01/15 ADD START
			//サービス契約ステータスが照査済:020（照査OK：照査解約完了コード=1）、締結:030、サービス提供中:100、休止:210、停止中:220、でない場合は対象外
			if (!(
				("020".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT)) && "1".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SHOSA_DSL_FIN_CD)))
				||	"030".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT))
				||	"100".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT))
				||	"210".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT))
				||	"220".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT))
			))
			{
				continue;
			}
			//料金グループコードが"04:マンション"でサービス契約ステータスが照査済：020の場合はサービス利用開始希望年月日を確認する
			if(("04".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.PRC_GRP_CD)) && ("020".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT)) || "030".equals(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT))))){
				//サービス利用開始希望年月日が運用日より大きい場合は対象外
				String strSvcUseStaKiboYmd = null;
				if(eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_USE_STA_KIBO_YMD) != null){
					strSvcUseStaKiboYmd = eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_USE_STA_KIBO_YMD).toString();
					int numOpeDate = Integer.parseInt(oPE_DATE); // 運用日（数値）
					int numSvcUseStaKiboYmd = Integer.parseInt(strSvcUseStaKiboYmd); // サービス利用開始希望年月日（数値）
					if (numOpeDate < numSvcUseStaKiboYmd)
					{
						continue;
					}
				}
				else
				{
					continue;
				}
			}
			// ANK-2608-00-00 2016/01/15 ADD END
			
//↓↓↓2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↓↓↓
//			// 最終更新日時設定
//			setLastUpdDtm(eKK0081A010);
//↑↑↑2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↑↑↑
			
			//オプションサービス契約＜ISP＞利用中Eメール一覧照会
			statusCode = callEKK0361B002SC(
					param, 
					handle, 
					requestParam,
					eKK0361B002HashList,
					eKK0081A010,
					wkResultHash);
			
			//失敗していたらステータスコードを返却する
			if(statusCode != 0)
			{
				return statusCode;
			}
			
			ArrayList<HashMap<String, Object>> eKK0361A010HashList = null;
	
			//オプションサービスの取得分だけループ
			for(int j = 0 ; j < eKK0361B002HashList.size() ; j++)
			{
				HashMap<String, Object> eKK0361B002Hash = null;
				
				//１要素の取得
				eKK0361B002Hash = eKK0361B002HashList.get(j);
				//オプションサービス契約番号
				String opSvcKeiNo = (String) eKK0361B002Hash.get(EKK0361B002CBSMsg1List.OP_SVC_KEI_NO);
				
				eKK0361A010HashList = new ArrayList<HashMap<String, Object>>();
				
				//オプションサービス契約＜ISP＞一意照会からPOPIDを取得
				statusCode = callEKK0361A010SC(
						param, 
						handle, 
						requestParam,
						eKK0361A010HashList,
						eKK0361B002Hash,
						wkResultHash);
				
				//失敗していたらステータスコードを返却する
				if(statusCode != 0)
				{
					return statusCode;
				}
				
				//Ｍｙポータルから取得したPOPIDと一意照会から取得したPOPIDを確認
				HashMap<String, Object> popIdList = (HashMap<String, Object>)requestParam.get(POPID_LIST);
				HashMap<String, Object>  popHash = null;
				String popId = null;
				String popHashId = null;
				
				for(int m = 0; m < eKK0361A010HashList.size(); m++)
				{
					popHash = (HashMap<String, Object>)eKK0361A010HashList.get(m);
					popHashId = (String)popHash.get(POP_ID);
					
					for(int k = 0; k < popIdList.size(); k++)
					{
						//↓↓↓2012-04-11差し替え↓↓↓
						//popId = (String)popIdList.get(REQPOPID + Integer.toString(k+1));
						String newTag = REQPOPID + "_" + String.format("%02d", k);
						popId = (String)popIdList.get(newTag);
						//↑↑↑2012-04-11差し替え↑↑↑
						if(popId.equals(popHashId))
						{
							eKK0081A010HashList.add(eKK0081A010);
							retirnList.put(opSvcKeiNo, popHash);
//							setCnt++;
						}
					}
				}
			}
			// 2012-03-13 ST1-2012-0000012 ADD_END
		
		}
		
//		HashMap<String, Object> popIdList = (HashMap<String, Object>)requestParam.get(POPID_LIST);
//		HashMap<String, Object>  popHash = null;
//		String popId = null;
//		String popHashId = null;
//		int getCnt = 0;
//		
//		//一意照会のPOPIDがＭｙポータルのPOPIDと一致するPOPIDが少ない場合エラーで返す。
//		for(int i = 0; i < popIdList2.size(); i++)
//		{
//			popId = (String)popIdList.get(REQPOPID + Integer.toString(i+1));
//			
//			for(int j = 0; j < retirnList.size(); j++)
//			{
//				popHash = (HashMap<String, Object>)retirnList.get(j);
//				popHashId = (String)popHash.get(POP_ID);
//				
//				if(popId.equals(popHashId))
//				{
//					getCnt++;
//					break;
//				}
//			}
//		}
//		
		//MYポータルのPOPIDの数と合わなかったらエラー
		if(popIdList2.size() > retirnList.size())		//2012-04-11書き換え
		{
			//↓↓↓2012-08-27追加　ST1-2012-000418対応↓↓↓
			String msg = "リクエストのPOPID数とオプションサービス契約の検索結果数のチェックで";
			JSYbpmLog.println(JSYbpmLog.ERROR, getClass(), retirnList, "BPX210E009", new String[]{msg}, null);
			//↑↑↑2012-08-27追加　ST1-2012-000418対応↑↑↑
			//一致しない場合はエラーを返す
			return 1;
		}
			
		if(retirnList != null && retirnList.size() != 0)
		{
			//↓↓↓2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↓↓↓
			String sysid = null;
			ArrayList<String> opSvcKeiNos = new ArrayList<String>();
			//↑↑↑2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↑↑↑
			
			//異動日時
			// IT1-2013-0000039 進捗スキーマ異動年月日時分秒対応 2013/01/11 START
//			String idoDtm = JKKBpCommon.getOpeDateTimeStamp(null);
			String idoDtm = JCCBPCommon.getSysDateTimeStamp();
			// IT1-2013-0000039 進捗スキーマ異動年月日時分秒対応 2013/01/11 END

			int i= (-1);
			for(Object ekk0361a010map: retirnList.values())
			{
				i ++;		//2012-04-11追加

				HashMap<String, Object> eKK0081A010 = eKK0081A010HashList.get(i);	//2012-04-11追加

				HashMap<String, Object> popIdSkkHashList = (HashMap<String, Object>)ekk0361a010map;		//2012-04-11変更
				
				ArrayList<HashMap<String, Object>> eKK0351A010HashList = null;
//				ArrayList<HashMap<String, Object>> EKK0321B002HashList = null;
				eKK0351A010HashList = new ArrayList<HashMap<String, Object>>();
				
				//オプションサービス契約一意照会から登録情報を取得
				statusCode = callEKK0351A010SC(
						param, 
						handle, 
						requestParam,
						eKK0351A010HashList,
						popIdSkkHashList,
						wkResultHash);
				
				//失敗していたらステータスコードを返却する
				if(statusCode != 0)
				{
					return statusCode;
				}
				
				String svcKeiNo = null;
		
				HashMap<String, Object> eKK0351A010Hash = null;
				
				//１要素の取得
				eKK0351A010Hash = eKK0351A010HashList.get(0);
				
				svcKeiNo = (String)eKK0351A010Hash.get(SVC_KEI_NO);
				
				if(i == 0)
				{
					//1回目は申込内容承認登録を行う
					statusCode = callEKK0011D020SC(
							param,
							handle,
							eKK0081A010,
							wkResultHash);
				}
//				else
//				{
//					//2回目以降は申込明細のみ作成する
//					statusCode = callEKK0021D010SC(
//							param, 
//							handle, 
//							eKK0081A010Hash,
//							wkResultHash);
//				}
				
				//失敗していたらステータスコードを返却する
				if(statusCode != 0)
				{
					return statusCode;
				}
				
				//オプションサービス契約<ISP>情報変更
				statusCode = callEKK0361C050SC(
						param, 
						handle, 
						requestParam,
						wkResultHash,
						eKK0351A010Hash,
						popIdSkkHashList,
						i);
		
				//失敗していたらステータスコードを返却する
				if(statusCode != 0)
				{
					return statusCode;
				}
				if (0 == i)
				{
					//申込内容照査・後続業務依頼
					statusCode = callEKK0021C060SC(
							param, 
							handle, 
							requestParam, 
							wkResultHash,
							i);
				}
				//失敗していたらステータスコードを返却する
				if(statusCode != 0)
				{
					return statusCode;
				}
				
				//進捗登録
				statusCode = callEKK1091D010SC(
						param, 
						handle, 
						requestParam, 
						wkResultHash,
						svcKeiNo,
						(String)eKK0351A010Hash.get(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO), idoDtm);		//2012-04-12追加
				
				//失敗していたらステータスコードを返却する
				if(statusCode != 0)
				{
					return statusCode;
				}
				
//				//オーダ発行処理
//				statusCode = callEKK1081D010SC(
//						param, 
//						handle, 
//						requestParam,
//						wkResultHash,
//						1,
//						svcKeiNo);
//				
//				if(statusCode != 0)
//				{
//					return statusCode;
//				}
//		
//				
//				//オーダ情報処理
//				statusCode = callEKK1551D010SC(
//						param, 
//						handle, 
//						requestParam, 
//						wkResultHash,
//						1);
//				
//				if(statusCode != 0)
//				{
//					return statusCode;
//				}
				
				// 2012-03-13 ST1-2012-0000012 ADD_START
				// オーダー発行CC
				hakkoSOD(param, handle, eKK0351A010Hash, eKK0081A010);
				
				// 指示書CC呼出
				//↓↓↓2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↓↓↓
				sysid = (String) eKK0351A010Hash.get(EKK0351A010CBSMsg1List.SYSID);
				opSvcKeiNos.add((String) eKK0351A010Hash.get(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO));
				//↑↑↑2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↑↑↑
				// 2012-03-13 ST1-2012-0000012 ADD_END
			}
			//↓↓↓2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↓↓↓
			String[] arr = new String[opSvcKeiNos.size()];

			//連携データ区分 03 ：POPIDの情報
			JKKBpCommon.putAxMRenkeiDataKbn(
					param, SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_POPID, JKKAddSjishoConst.TRN_KBN_UPD, 
					opSvcKeiNos.toArray(arr), sysid);
			//↑↑↑2012-08-27追加　ST1-2012-000418対応のついでに指示書CC対応↑↑↑
		}
		else
		{
			statusCode = RTN_NO_DATA;
		}
		
		return statusCode;
		
	}
	
	/**
	 * リクエストパラメータの取得
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return リクエストパラメータのHash
	 * @throws RequestParameterException 例外時にスローされます
	 */
	private HashMap<String, Object> analyzeRequestParam(IRequestParameterReadWrite param) 
	throws RequestParameterException
	{
		
		HashMap<String, Object> paramData = null;

		//データの受け取り
		paramData = (HashMap<String, Object>)param.getData(KKSV011501CC);

		return paramData;
		
	}
	
	
	// 2012-03-13 ST1-2012-0000012 ADD_START
	
	/**
	 * SOD発行CC呼出
	 * @param param
	 * @param handle
	 * @param eKK0351A010Hash
	 * @param eKK0081A010Hash
	 * 
	 */
	private void hakkoSOD(IRequestParameterReadWrite param, SessionHandle handle,
			HashMap<String, Object> eKK0351A010Hash, HashMap<String, Object> eKK0081A010) throws Throwable{
		
		// SOD対象データマップ
		HashMap<String, Object> sodTrgtData = new HashMap<String, Object>();
		// SOD対象データリスト
		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
		sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
		
		HashMap<String, Object> sodMap = new HashMap<String, Object>();
		trgtDataList.add(sodMap);

		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, (String)eKK0081A010.get(SYSID));
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, IDO_DIV_00052);
		// ST1-2012-0000989 2012-12-18 ADD_START
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_PASSWORD_SHORI_DIV, JKKHakkoSODConstCC.SAIHAKKO_DIV_SHOKIKA);
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_PASSWORD_SAIHAKKO_DIV, JKKHakkoSODConstCC.SHORI_DIV_POP);
		// ST1-2012-0000989 2012-12-18 ADD_END
		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
		
		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, (String)eKK0081A010.get(SVC_KEI_NO));
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);
		
		// サービス契約内訳情報
		HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, "");
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, "");
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);
		
		// オプションサービス契約情報
		HashMap<String, Object> opSvcKeiInfo = new HashMap<String, Object>();
		// ST1-2012-0000989 2012-12-18 DEL_START
//		opSvcKeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_OPSVKEI_NO, eKK0351A010Hash.get(OP_SVC_KEI_NO));
//		opSvcKeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_OPSVKEI_GENE_ADD_DTM, eKK0351A010Hash.get(GENE_ADD_DTM));
		// ST1-2012-0000989 2012-12-18 DEL_END
		opSvcKeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_NO, eKK0351A010Hash.get(OP_SVC_KEI_NO));
		opSvcKeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_GENE_ADD_DTM, eKK0351A010Hash.get(GENE_ADD_DTM));
		sodMap.put(JKKHakkoSODConstCC.OPSVKEI_INFO, opSvcKeiInfo);
		
		// 機器提供サービス契約情報
		HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();
		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, kktsvkeiInfo);
		
		 // サービスオーダ発行CCを呼び出す
		 JKKHakkoSODCC hakkoSODCC = new JKKHakkoSODCC();
		// ST1-2012-0000989 2012-12-18 ADD_START
		 sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, FUNC_CODE_1);
		// ST1-2012-0000989 2012-12-18 ADD_END
		 param.setData("sodTrgtData", sodTrgtData);
		 hakkoSODCC.hakkoSOD(handle, param, "sodTrgtData");
	}
	
	
	/**
	 * 業務データの取得処理です。
	 * 
	 * @param rslt
	 *            SVIFの実行結果データ
	 * @return 業務データ
	 */
	private HashMap<String, Object> getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate.getMsgData();
	}
	
	/**
	 * サービス契約一意照会SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHash 結果のハッシュ
	 * @param index 処理順番
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0081A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> resultHash,
			String svcKeiNo)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0081A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0081A010CBSMsg.class.getName());
		mappingEKK0081A010InMsg(template, svcKeiNo);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		//SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング処理
		editResultRP(sIFResult, param);

		// エラーチェック処理
		errChk(sIFResult);

		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			// SIFの実行結果を設定
			resultHash.putAll(getWorkCAANMsg(sIFResult));
		}

		return status;
		
	}
	
	/**
	 * templateに対してEKK0081A010の条件に関する部分を設定する
	 * @param template
	 * @param svcKeiNo サービス契約番号
	 */
	private void mappingEKK0081A010InMsg(CAANMsg template, String svcKeiNo)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010);

		// 機能コード--サービス契約一意照会
		template.set(EKK0081A010CBSMsg.FUNC_CODE, FUNC_CD_2);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);

		// ＫＥＹ＿予約適用年月日
		template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, oPE_DATE);
	}
	
//↓↓↓2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↓↓↓
//	/**
//	 * 最終更新年月日時分秒設定
//	 * @param retHash
//	 */
//	private void setLastUpdDtm(HashMap<String, Object> retHash)
//	{
//		// 排他制御用更新年月日時分秒
//		opLastUpdDtm = (String)retHash.get("last_upd_dtm");
//	}
//↑↑↑2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↑↑↑
	// 2012-03-13 ST1-2012-0000012 ADD_END
	
//	/**
//	 * オーダ情報作成ワーク登録SIFを呼び出し
//	 * @param param リクエストパラメータ
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param resultHash 結果のハッシュ
//	 * @param index 処理順番
//	 * @return サービスインターフェースのリターンコード
//	 * @throws RequestParameterException, SCException 例外時にスローされます
//	 */
//	private int callEKK1551D010SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash,
//			int index)
//			throws RequestParameterException, SCException
//	{
//		
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//
//		//サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		//EKK1551D010への呼び出しパラメータ設定
//		template = new CAANMsg(EKK1551D010CBSMsg.class.getName());
//		mappingEKK1551D010InMsg(template, inHash, resultHash, index);
//		editBasicCmn(param, template);
//		
//		//リクエスト用クラスの設定
//		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
//
//		//SC呼び出しクラスの生成
//		scCall = new ServiceComponentRequestInvoker();
//		
//		//SIFの呼び出し
//		sIFResult = scCall.run(sIFRequest, handle);
//
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//
//			resultHash.put(
//					TEMPLATE_ID_EKK1551D010, 
//					mappingEKK1551D010SCOutMsg(resultMsgs));
//			
//		}
//
//		return status;
//		
//	}
	

//	/**
//	 * EKK1551D010の結果をHashとして抽出する
//	 * @param resultMsgs EKK1551D010のテンプレートリスト
//	 * @return EKK1551D010の結果部分
//	 */
//	private HashMap<String, Object> mappingEKK1551D010SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		
//		HashMap<String, Object> retHash = null;
//		CAANMsg msg = null;
//		
//		//結果の抽出
//		msg = resultMsgs[0];
//		
//		//結果の取得
//		retHash = msg.getMsgData();
//		
//		return retHash;
//		
//	}
//	
//	/**
//	 * templateに対してEKK1551D010の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param jkkOpsvkeiTelIktAddCC 処理対象ハッシュ
//	 * @param resultHash 結果ハッシュ
//	 * @param index 処理順番
//	 */
//	private void mappingEKK1551D010InMsg(
//			CAANMsg template, 
//			HashMap<String, Object> inHash, 
//			HashMap<String, Object> resultHash,
//			int index)
//	{
//		
//		HashMap<String, Object> eKK1081D010Hash = null;
//
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK1551D010CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(EKK1551D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1551D010);
//
//		//機能コード
//		template.set(EKK1551D010CBSMsg.FUNC_CODE, "1");
//
//		//パラメータ設定
//		eKK1081D010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK1081D010);
//		
//		//オーダー発行条件番号
//		template.set(
//				EKK1551D010CBSMsg.ODR_HAKKO_JOKEN_NO, 
//				eKK1081D010Hash.get(EKK1081D010CBSMsg.ODR_HAKKO_JOKEN_NO));
//		
//		//オーダー内容コード
//		if(index == 1)
//		{
//
//			template.set(
//					EKK1551D010CBSMsg.ODR_NAIYO_CD, 
//					ODR_NAIYO_CD_POP);
//			
//		}
//		else
//		{
//			
//			template.set(
//					EKK1551D010CBSMsg.ODR_NAIYO_CD, 
//					ODR_NAIYO_CD_POP);
//
//		}
//
//	}
	
	/**
	 * 進捗登録SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHash 結果のハッシュ
	 * @param svcKeiNo サービス契約番号
	 * @param idoDtm 
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK1091D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			String svcKeiNo,
			String opSvcKeiNo, String idoDtm)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK1091D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK1091D010CBSMsg.class.getName());
		
		// 2012 -3-14 ST1-2012-0000012 EDIT_START
		mappingEKK1091D010InMsg(template, inHash, svcKeiNo, resultHash, opSvcKeiNo, idoDtm);
		// 2012 -3-14 ST1-2012-0000012 EDIT_END
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{

			resultHash.put(
					TEMPLATE_ID_EKK1091D010, 
					mappingEKK1091D010SCOutMsg(resultMsgs));
			
		}

		return status;
		
	}
	

	/**
	 * EKK1091D010の結果をHashとして抽出する
	 * @param resultMsgs EKK1091D010のテンプレートリスト
	 * @return EKK1091D010の結果部分
	 */
	private HashMap<String, Object> mappingEKK1091D010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		retHash = msg.getMsgData();
		
		return retHash;
		
	}
	
	/**
	 * templateに対してEKK1091D010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param svcKeiNo サービス契約番号
	 * @param opSvcKeiNo 
	 * @param idoDtm 
	 * @throws  RequestParameterException, SCException
	 */
	private void mappingEKK1091D010InMsg(CAANMsg template,
			HashMap<String, Object> inHash,
			String svcKeiNo, HashMap<String, Object> resultHash, String opSvcKeiNo, String idoDtm)
	throws RequestParameterException, SCException
	{

		// 2012-3-14 ST1-2012-0000012 ADD_START
		//申込内容承認登録のHashMap
		HashMap<String, Object> eKK0011D020Hash = null;
		// 2012-3-14 ST1-2012-0000012 ADD_END
		
		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK1091D010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK1091D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1091D010);

		//機能コード
		template.set(EKK1091D010CBSMsg.FUNC_CODE, "1");

		// 2012-3-14 ST1-2012-0000012 ADD_START
		
		CAANMsg[] eKK0011D020CBSMSG1LIST = null;
		CAANMsg eKK0011D020CBSMSG = null;
		HashMap<String, Object> retHash = null;
		
		//申込明細情報取得
		eKK0011D020Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0011D020);
		eKK0011D020CBSMSG1LIST = 
			(CAANMsg[])eKK0011D020Hash.get(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
		
		eKK0011D020CBSMSG = eKK0011D020CBSMSG1LIST[0];
		
		retHash = eKK0011D020CBSMSG.getMsgData();
		// 2012-3-14 ST1-2012-0000012 ADD_END
		
		//サービス契約番号
		template.set(
				EKK1091D010CBSMsg.SVC_KEI_NO, 
				svcKeiNo);
		
		// 2012-3-14 ST1-2012-0000012 ADD_START
		//申込明細番号
		template.set(
				EKK1091D010CBSMsg.MSKM_DTL_NO, 
				retHash.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 2012-3-14 ST1-2012-0000012 ADD_END
		
		//異動区分
		template.set(
				EKK1091D010CBSMsg.IDO_DIV, 
				IDO_DIV_00052);
		
		//異動年月日時分秒
		//↓↓↓2012-04-11差し替え↓↓↓
		//template.set(EKK1091D010CBSMsg.IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null));
		template.set(EKK1091D010CBSMsg.IDO_DTM, idoDtm);
		//↑↑↑2012-04-11差し替え↑↑↑
		
		//進捗ステータス
		template.set(
				EKK1091D010CBSMsg.PRG_STAT, 
				PRG_STAT_5301);
		
		//異動理由明細
//		CAANMsg[] ekk1091D010CBSMsg1List = null;
//		CAANMsg ekk1091D010CBSMsg1 = null;
//		ArrayList<HashMap<String, Object>> ido_rsn_cd_list = null;
//		HashMap<String, Object> ido_rsn_cd_element = null;
//		HashMap<String, Object> ido_rsn_cd = new HashMap();
		
		CAANMsg idoRsnTemp = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
		setSvcIFMapping("56", EKK1091D010CBSMsg1List.IDO_RSN_CD, idoRsnTemp);
		setSvcIFMapping(null, EKK1091D010CBSMsg1List.IDO_RSN_MEMO, idoRsnTemp);
		CAANMsg[] list = new CAANMsg[1];
		list[0] = idoRsnTemp;
		
		// 異動理由コード（本来はいらない）
		template.set(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, list);
		
		
//		template.set(
//				EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST,
//				ekk1091D010CBSMsg1List);
		
		//↓↓↓2012-04-11追加↓↓↓
		//オプションサービス契約番号
		template.set(EKK1091D010CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);
		//↑↑↑2012-04-11追加↑↑↑
	}
	
//	/**
//	 * オーダ発行条件登録SIFを呼び出し
//	 * @param param リクエストパラメータ
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param resultHash 結果のハッシュ
//	 * @param index 処理順番
//	 * @param svcKeiNo サービス契約番号
//	 * @return サービスインターフェースのリターンコード
//	 * @throws RequestParameterException, SCException 例外時にスローされます
//	 */
//	private int callEKK1081D010SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash,
//			int index,
//			String svcKeiNo)
//			throws RequestParameterException, SCException
//	{
//		
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//
//		//サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		//EKK1081D010への呼び出しパラメータ設定
//		template = new CAANMsg(EKK1081D010CBSMsg.class.getName());
//		mappingEKK1081D010InMsg(template, inHash, index, svcKeiNo);
//		editBasicCmn(param, template);
//		
//		//リクエスト用クラスの設定
//		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
//
//		//SC呼び出しクラスの生成
//		scCall = new ServiceComponentRequestInvoker();
//		
//		//SIFの呼び出し
//		sIFResult = scCall.run(sIFRequest, handle);
//
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//
//			resultHash.put(
//					TEMPLATE_ID_EKK1081D010, 
//					mappingEKK1081D010SCOutMsg(resultMsgs));
//			
//		}
//
//		return status;
//		
//	}
//	
//
//	/**
//	 * EKK1081D010の結果をHashとして抽出する
//	 * @param resultMsgs EKK1081D010のテンプレートリスト
//	 * @return EKK1081D010の結果部分
//	 */
//	private HashMap<String, Object> mappingEKK1081D010SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		
//		HashMap<String, Object> retHash = null;
//		CAANMsg msg = null;
//		
//		//結果の抽出
//		msg = resultMsgs[0];
//		
//		//結果の取得
//		retHash = msg.getMsgData();
//		
//		return retHash;
//		
//	}
	
//	/**
//	 * templateに対してEKK1081D010の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param index 処理順番
//	 * @param svcKeiNo サービス契約番号
//	 */
//	private void mappingEKK1081D010InMsg(
//			CAANMsg template, 
//			HashMap<String, Object> inHash,
//			int index,
//			String svcKeiNo)
//	{
//
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK1081D010CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(EKK1081D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1081D010);
//
//		//機能コード
//		template.set(EKK1081D010CBSMsg.FUNC_CODE, "1");
//
//		//サービス契約番号
//		template.set(
//				EKK1081D010CBSMsg.SVC_KEI_NO, 
//				svcKeiNo);
//		
//		
//		//パラメータ設定
//		if(index == 1)
//		{
//			
//			//オーダ種別
//			template.set(
//					EKK1081D010CBSMsg.ORDER_SBT_CD, 
//					ODR_STB_CD_NET);
//
//			//サービスオーダーコード
//			template.set(
//					EKK1081D010CBSMsg.SVC_ORDER_CD, 
//					SVC_ODR_CD_ML);
//			
//			//要求種別コード
//			template.set(
//					EKK1081D010CBSMsg.YOKYU_SBT_CD, 
//					YOKYU_SBT_CD_CHG);
//			
//			//オーダー発行条件コード
//			template.set(
//					EKK1081D010CBSMsg.ODR_HAKKO_JOKEN_CD, 
//					ODR_HAKKO_JOKEN_CD_SOKUJI);
//		
//		}
//		else
//		{
//			
//			//オーダ種別
//			template.set(
//					EKK1081D010CBSMsg.ORDER_SBT_CD, 
//					ODR_STB_CD_NET);
//
//			//サービスオーダーコード
//			template.set(
//					EKK1081D010CBSMsg.SVC_ORDER_CD, 
//					SVC_ODR_CD_ML);
//			
//			//要求種別コード
//			template.set(
//					EKK1081D010CBSMsg.YOKYU_SBT_CD, 
//					YOKYU_SBT_CD_CHG);
//			
//			//オーダー発行条件コード
//			template.set(
//					EKK1081D010CBSMsg.ODR_HAKKO_JOKEN_CD, 
//					ODR_HAKKO_JOKEN_CD_SOKUJI);
//
//		}
//	}
	
//	/**
//	 * 申込明細登録SIFを呼び出し
//	 * @param param リクエストパラメータ
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param jkkOpsvkeiTelIktAddCC 処理対象Hash
//	 * @param resultHash 結果のハッシュ
//	 * @return サービスインターフェースのリターンコード
//	 * @throws RequestParameterException, SCException 例外時にスローされます
//	 */
//	private int callEKK0021D010SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash)
//			throws RequestParameterException, SCException
//	{
//		
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//
//		//サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		//EKK0021D010への呼び出しパラメータ設定
//		template = new CAANMsg(EKK0021D010CBSMsg.class.getName());
//		mappingEKK0021D010InMsg(template, inHash, resultHash);
//		editBasicCmn(param, template);
//		
//		//リクエスト用クラスの設定
//		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
//
//		//SC呼び出しクラスの生成
//		scCall = new ServiceComponentRequestInvoker();
//		
//		//SIFの呼び出し
//		sIFResult = scCall.run(sIFRequest, handle);
//
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//			resultHash.put(
//					TEMPLATE_ID_EKK0021D010, 
//					mappingEKK0021D010SCOutMsg(resultMsgs));
//			
//		}
//
//		return status;
//		
//	}
//	
//	/**
//	 * templateに対してEKK0021D010の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param jkkOpsvkeiTelIktAddCC 処理対象
//	 * @param resultHash 結果のハッシュ
//	 */
//	private void mappingEKK0021D010InMsg(
//			CAANMsg template, 
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash)
//	{
//		//申込内容承認登録のHashMap
//		HashMap<String, Object> eKK0011D020Hash = null;
//		
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new EKK0021D010CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(EKK0021D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0021D010);
//
//		//機能コード
//		template.set(EKK0021D010CBSMsg.FUNC_CODE, "1");
//
//		//パラメータ設定
//		eKK0011D020Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0011D020);
//		
//		//申込番号
//		template.set(
//				EKK0021D010CBSMsg.MSKM_NO, 
//				eKK0011D020Hash.get(EKK0011D020CBSMsg.MSKM_NO));
//		
//		//申込年月日
//		template.set(
//				EKK0021D010CBSMsg.MSKM_YMD,
//				oPE_DATE);
//
//		//SYSID
//		template.set(EKK0021D010CBSMsg.SYSID, inHash.get(REQSYSID));
//
//		// 排他用更新年月日時分秒
//		template.set(EKK0021D010CBSMsg.UPD_DTM_BF, mskmLastUpdDtm);
//	}
//	
//	/**
//	 * EKK0021D010の結果をHashとして抽出する
//	 * @param resultMsgs EKK0021D010のテンプレートリスト
//	 * @return EKK0021D010の結果部分
//	 */
//	private HashMap<String, Object> mappingEKK0021D010SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		
//		HashMap<String, Object> retHash = null;
//		CAANMsg msg = null;
//		
//		//結果の抽出
//		msg = resultMsgs[0];
//		
//		//結果の取得
//		retHash = msg.getMsgData();
//
//		// 排他制御用更新年月日時分秒
//		mskmLastUpdDtm = (String)retHash.get("upd_dtm");
//
//		return retHash;
//		
//	}
	
	/**
	 * 申込明細照査・後続業務依頼結SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHash 結果のハッシュ
	 * @param i 登録回数
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0021C060SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			int i)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0021C060への呼び出しパラメータ設定
		template = new CAANMsg(EKK0021C060CBSMsg.class.getName());
		mappingEKK0021C060InMsg(template, inHash, resultHash, i);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{

			resultHash.put(
					TEMPLATE_ID_EKK0021C060, 
					mappingEKK0021C060SCOutMsg(resultMsgs));

		}

		return status;
		
	}
	

	/**
	 * EKK0021C060の結果をHashとして抽出する
	 * @param resultMsgs EKK0021C060のテンプレートリスト
	 * @return EKK0021C060の結果部分
	 */
	private HashMap<String, Object> mappingEKK0021C060SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		retHash = msg.getMsgData();
		
		return retHash;
		
	}
	
	/**
	 * templateに対してEKK0021C060の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param requestParam アプリ固有のパラメータ
	 * @param resultHash 結果ハッシュ
	 */
	private void mappingEKK0021C060InMsg(CAANMsg template,
			HashMap<String, Object> inHash, 
			HashMap<String, Object> resultHash,
			int i)
	{

		HashMap<String, Object> eKK0011D020Hash = null;
		HashMap<String, Object> retHash = null;
		CAANMsg[] eKK0011D020CBSMSG1LIST = null;
		CAANMsg eKK0011D020CBSMSG = null;
		
		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0021C060CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0021C060CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0021C060);

		//機能コード
		template.set(EKK0021C060CBSMsg.FUNC_CODE, "1");
		
//		if(i == 0)
		{
			//パラメータ設定
			eKK0011D020Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0011D020);
			eKK0011D020CBSMSG1LIST = 
				(CAANMsg[])eKK0011D020Hash.get(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
			
			eKK0011D020CBSMSG = eKK0011D020CBSMSG1LIST[0];
			
			retHash = eKK0011D020CBSMSG.getMsgData();
		}
//		else
//		{
//			//パラメータ設定
//			eKK0011D020Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0021D010);
//		}
		
		//申込明細番号
		template.set(
				EKK0021C060CBSMsg.MSKM_DTL_NO, 
				retHash.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		
		//運用年月日
		template.set(EKK0021C060CBSMsg.KZKWRK_REQYMD, oPE_DATE);
		
		//更新年月日時分秒（更新前）
		template.set(EKK0021C060CBSMsg.UPD_DTM_BF, eKK0011D020Hash.get(EKK0011D020CBSMsg.UPD_DTM));

	}
	
	/**
	 * オプションサービス契約<ISP>情報変更SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param popIdSkkHash 結果のハッシュ
	 * @param resultHash 結果のハッシュ
	 * @param eKK0351A010Hash 結果のハッシュ
	 * @param popIdSkkHashList 結果のハッシュ
	 * @param i 更新回数
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0361C050SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> eKK0351A010Hash,
			HashMap<String, Object> popIdSkkHashList,
			int i)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0361D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0361C050CBSMsg.class.getName());
		mappingEKK0361C050InMsg(template, inHash, resultHash, eKK0351A010Hash, popIdSkkHashList, i);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{

			resultHash.put(
					TEMPLATE_ID_EKK0361C050, 
					mappingEKK0361C050SCOutMsg(resultMsgs));
			
		}

		return status;
		
	}
	
	/**
	 * EKK0361C050の結果をHashとして抽出する
	 * @param resultMsgs EKK0361C050のテンプレートリスト
	 * @return EKK0361D010の結果部分
	 */
	private HashMap<String, Object> mappingEKK0361C050SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		retHash = msg.getMsgData();
		
//↓↓↓2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↓↓↓
//		// 排他制御用更新年月日時分秒
//		opLastUpdDtm = (String)retHash.get("upd_dtm");
//↑↑↑2013-09-10削除　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↑↑↑
		return retHash;
		
	}
	
	/**
	 * templateに対してEKK0361C050の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param resultHash 結果のハッシュ
	 * @param eKK0351A010HashLsit アプリ固有のパラメータ
	 * @param popIdSkkHashList アプリ固有のパラメータ
	 */
	private void mappingEKK0361C050InMsg(
			CAANMsg template, 
			HashMap<String, Object> inHash, 
			HashMap<String, Object> resultHash,
			HashMap<String, Object> eKK0351A010HashLsit,
			HashMap<String, Object> popIdSkkHashList,
			int i)
	{
		HashMap<String, Object> eKK0351A010Hash = null;
		HashMap<String, Object> eKK0361A010Hash = null;
		HashMap<String, Object> eKK0011D020Hash = null;

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0361C050CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0361C050CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361C050);

		//機能コード
		template.set(EKK0361C050CBSMsg.FUNC_CODE, "1");

		//パラメータ設定
		eKK0351A010Hash = eKK0351A010HashLsit;
		eKK0361A010Hash = popIdSkkHashList;
		
		// 2012 -3-14 ST1-2012-0000012 ADD_START
		
		CAANMsg[] eKK0011D020CBSMSG1LIST = null;
		CAANMsg eKK0011D020CBSMSG = null;
		HashMap<String, Object> retHash = null;
		
		//パラメータ設定
		eKK0011D020Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0011D020);
		eKK0011D020CBSMSG1LIST = 
			(CAANMsg[])eKK0011D020Hash.get(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
		
		eKK0011D020CBSMSG = eKK0011D020CBSMSG1LIST[0];
		
		retHash = eKK0011D020CBSMSG.getMsgData();
		
		// 2012 -3-14 ST1-2012-0000012 ADD_END
		
		//オプションサービス契約番号
		template.set(
				EKK0361C050CBSMsg.OP_SVC_KEI_NO, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO));
		
		//申込明細番号
		template.set(
				EKK0361C050CBSMsg.MSKM_DTL_NO, 
//				eKK0011D020Hash.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
				
				// 2012 -3-14 ST1-2012-0000012 EDIT_START
				
				retHash.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
				
				// 2012 -3-14 ST1-2012-0000012 EDIT_END
		//試用加入年月日
		template.set(
				EKK0361C050CBSMsg.FTRIAL_KANYU_YMD, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.FTRIAL_KANYU_YMD));
		
		//本加入年月日
		template.set(
				EKK0361C050CBSMsg.HONKANYU_YMD, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.HONKANYU_YMD));
		
		//本加入移行期限年月日
		template.set(
				EKK0361C050CBSMsg.HONKANYU_IKO_KIGEN_YMD, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.HONKANYU_IKO_KIGEN_YMD));
		
		//違約金発生コード
		template.set(
				EKK0361C050CBSMsg.PNLTY_HASSEI_CD, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.PNLTY_HASSEI_CD));
		
		//異動区分
		template.set(
				EKK0361C050CBSMsg.IDO_DIV, 
				IDO_DIV_00052);
		
		//希望メールアカウント1
		template.set(
				EKK0361C050CBSMsg.KIBO_ML_ACCOUNT_1, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.KIBO_ML_ACCOUNT_1));
		
		//希望メールアカウント2
		template.set(
				EKK0361C050CBSMsg.KIBO_ML_ACCOUNT_2, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.KIBO_ML_ACCOUNT_2));
		
		//希望メールアカウント3
		template.set(
				EKK0361C050CBSMsg.KIBO_ML_ACCOUNT_3, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.KIBO_ML_ACCOUNT_3));
		
		//固定IPアドレス
		template.set(
				EKK0361C050CBSMsg.KOTEI_IP_AD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.KOTEI_IP_AD));
		
		//ネットマスク
		template.set(
				EKK0361C050CBSMsg.NETMASK, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.NETMASK));
		
		//メールアドレス
		template.set(
				EKK0361C050CBSMsg.MLAD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MLAD));
		
		//容量
		template.set(
				EKK0361C050CBSMsg.CAPA, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.CAPA));
		
		//URL(ドメイン)
		template.set(
				EKK0361C050CBSMsg.URL_DOMAIN, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.URL_DOMAIN));
		
		//URL(アカウント)
		template.set(
				EKK0361C050CBSMsg.URL_ACCOUNT, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.URL_ACCOUNT));
		
		//メーリングリスト名
		template.set(
				EKK0361C050CBSMsg.MLLIST_NM, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MLLIST_NM));
		
		//メーリングリスト呼称
		template.set(
				EKK0361C050CBSMsg.MLLIST_KOSHO, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MLLIST_KOSHO));
		
		//メーリングリスト公開要否
		template.set(
				EKK0361C050CBSMsg.MLLIST_KOKAI_YH, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MLLIST_KOKAI_YH));
		
		//メーリングリスト最大ユーザー数
		template.set(
				EKK0361C050CBSMsg.MLLIST_MAX_USER_CNT, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MLLIST_MAX_USER_CNT));
		
		//メーリングリスト管理者メールアドレス
		template.set(
				EKK0361C050CBSMsg.MLLIST_KRISHA_MLAD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MLLIST_KRISHA_MLAD));
		
		//独自ドメイン名
		template.set(
				EKK0361C050CBSMsg.DOKUJI_DOMAIN_NM, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DOKUJI_DOMAIN_NM));
		
		//ホスティングメールアカウント数
		template.set(
				EKK0361C050CBSMsg.HOSML_ACCOUNT_CNT, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOSML_ACCOUNT_CNT));
		
		//ホスティングメールボックス総容量
		template.set(
				EKK0361C050CBSMsg.HOSML_BOX_CAPA, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOSML_BOX_CAPA));
		
		//ホスティングメール管理者ID
		template.set(
				EKK0361C050CBSMsg.HOSML_KRISHA_ID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOSML_KRISHA_ID));
		
		//ホスティング初期メール管理者IDパスワード
		template.set(
				EKK0361C050CBSMsg.HOSTING_SHKM_KRISHA_ID_PWD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOSTING_SHKM_KRISHA_ID_PWD));
		
		//ホスティングメール管理者POPID
		template.set(
				EKK0361C050CBSMsg.HOSML_KRISHA_POP_ID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOSML_KRISHA_POP_ID));
		
		//ホスティング初期メール管理者POPIDパスワード
		template.set(
				EKK0361C050CBSMsg.HOS_SHKM_KRISHA_POP_ID_PWD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOS_SHKM_KRISHA_POP_ID_PWD));
		
		//ホスティングメール管理者メールアドレス
		template.set(
				EKK0361C050CBSMsg.HOSML_KRISHA_MLAD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOSML_KRISHA_MLAD));
		
		//ホスティングメール管理者メールボックス容量
		template.set(
				EKK0361C050CBSMsg.HOSML_KRISHA_MAIL_BOX_CAPA, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.HOSML_KRISHA_MAIL_BOX_CAPA));
		
		//ダイヤルパッドID
		template.set(
				EKK0361C050CBSMsg.DPAD_ID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DPAD_ID));
		
		//ダイヤルパッドISPID
		template.set(
				EKK0361C050CBSMsg.DPAD_ISP_ID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DPAD_ISP_ID));
		
		//ダイヤルパッドMAPID
		template.set(
				EKK0361C050CBSMsg.DPAD_MAPID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DPAD_MAPID));
		
		//ダイヤルパッドPIN
		template.set(
				EKK0361C050CBSMsg.DPAD_PIN, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DPAD_PIN));
		
		//ダイヤルパッドメールアドレス
		template.set(
				EKK0361C050CBSMsg.DPAD_MLAD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DPAD_MLAD));
		
		//ダイヤルパッドID公開要否
		template.set(
				EKK0361C050CBSMsg.DPAD_ID_KOKAI_YH, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DPAD_ID_KOKAI_YH));
		
		//VoIPユーザーID
		template.set(
				EKK0361C050CBSMsg.VOIP_USER_ID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.VOIP_USER_ID));
		
		//DNS設定コード
		template.set(
				EKK0361C050CBSMsg.DNS_SETTE_CD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.DNS_SETTE_CD));
		
		//メールゲートウェイ管理者ID
		template.set(
				EKK0361C050CBSMsg.MAIL_GW_KRISHA_ID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MAIL_GW_KRISHA_ID));
		
		//メールゲートウェイ管理者IDパスワード
		template.set(
				EKK0361C050CBSMsg.MAIL_GW_KRISHA_ID_PWD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.SPOT_YGSITEBLCK_TRGT_SYSID));
		
		//メールゲートウェイ管理者メールアドレス
		template.set(
				EKK0361C050CBSMsg.MAIL_GW_KRISHA_MLAD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MAIL_GW_KRISHA_MLAD));
		
		//メールゲートウェイ受信メールサーバーIPアドレス
		template.set(
				EKK0361C050CBSMsg.MAIL_GW_RCV_MSERVER_IP_AD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MAIL_GW_RCV_MSERVER_IP_AD));
		
		//メールゲートウェイ送信メールサーバーIPアドレス
		template.set(
				EKK0361C050CBSMsg.MAIL_GW_SEND_MSERVER_IP_AD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.MAIL_GW_SEND_MSERVER_IP_AD));
		
		//メールゲートウェイアカウント数
		template.set(
				EKK0361C050CBSMsg.ML_GW_ACCOUNT_CNT, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.ML_GW_ACCOUNT_CNT));
		
		//サービス個別設定連絡先メールアドレス
		template.set(
				EKK0361C050CBSMsg.SVC_KBT_SET_RRKS_MLAD, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.SVC_KBT_SET_RRKS_MLAD));
		
		//通話明細公開要否
		template.set(
				EKK0361C050CBSMsg.TUWA_DTL_KOKAI_YH, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.TUWA_DTL_KOKAI_YH));
		
		//更新年月日時分秒(更新前)
//↓↓↓2013-09-10変更　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↓↓↓
//		if("".equals(opLastUpdDtm))
//		{
//			template.set(
//					EKK0361C050CBSMsg.UPD_DTM_BF, 
//					eKK0361A010Hash.get(EKK0361A010CBSMsg1List.LAST_UPD_DTM));
////		}
//		else
//		{
//			template.set(
//					EKK0361C050CBSMsg.UPD_DTM_BF, 
//					opLastUpdDtm);
//		}
/**************************************************************************/
		template.set(
				EKK0361C050CBSMsg.UPD_DTM_BF, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.LAST_UPD_DTM));
//↑↑↑2013-09-10変更　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↑↑↑
//↓↓↓2013-09-10追加　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↓↓↓
//		IPv6アドレス(インターフェイスID)
		template.set(
				EKK0361C050CBSMsg.IPV6_AD_IFID, 
				eKK0361A010Hash.get(EKK0361A010CBSMsg1List.IPV6_AD_IFID));
		
//		表示用サービス提供開始年月日
		template.set(
				EKK0361C050CBSMsg.DSP_SVCTK_STAYMD, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.DSP_SVCTK_STAYMD));
		
//		サービス提供物消去処理実施年月日時分秒
		template.set(
				EKK0361C050CBSMsg.SVCTK_BUT_DEL_TRN_JSSI_DTM, 
				eKK0351A010Hash.get(EKK0351A010CBSMsg1List.SVCTK_BUT_DEL_TRN_JSSI_DTM));
//↑↑↑2013-09-10追加　商用OM-2013-0001876（複数eo光ネット同一SYSIDの場合にシステムエラー）↑↑↑
	}

	/**
	 * オプションサービス契約＜ISP＞利用中Eメール一覧照会SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHashList 結果のハッシュ
	 * @param eKK0081B003Hash 結果のハッシュ
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0361B002SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			ArrayList<HashMap<String, Object>> resultHashList,
			HashMap<String, Object> eKK0081A010,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0361B002への呼び出しパラメータ設定
		template = new CAANMsg(EKK0361B002CBSMsg.class.getName());
		mappingEKK0361B002InMsg(template, inHash, resultHash, eKK0081A010);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			resultHashList.addAll(mappingEKK0361B002SCOutMsg(resultMsgs));
			
		}

		return status;
		
	}
	
	/**
	 * EKK0361B002の結果をHashとして抽出する
	 * @param resultMsgs EKK0361B002のテンプレートリスト
	 * @return EKK0361B002の結果部分
	 */
	private ArrayList<HashMap<String, Object>> mappingEKK0361B002SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		ArrayList<HashMap<String, Object>> retHashList = null;
		CAANMsg[] msgs = null;
		
		//結果の抽出
		retHashList = new ArrayList<HashMap<String, Object>>();
		msgs = resultMsgs[0].getCAANMsgList(EKK0361B002CBSMsg.EKK0361B002CBSMSG1LIST);
		for(int i = 0 ; i < msgs.length ; i++)
		{
			retHashList.add(msgs[i].getMsgData());
		}

		
		return retHashList;
		
	}
	
	/**
	 * templateに対してEKK0361B002の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param resultHash 結果のハッシュ
	 * @param eKK0081B003Hash アプリ固有のパラメータ
	 */
	private void mappingEKK0361B002InMsg(CAANMsg template,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> eKK0081A010)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0361B002CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0361B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361B002);

		//機能コード--チェック＆登録
		// ANK-2608-00-00 2016/01/15 MOD START
		//template.set(EKK0361B002CBSMsg.FUNC_CODE, "1");
		template.set(EKK0361B002CBSMsg.FUNC_CODE, "3");
		// ANK-2608-00-00 2016/01/15 MOD END
		
		//パラメータ設定
		//サービス契約番号
		template.set(
				EKK0361B002CBSMsg.KEY_SVC_KEI_NO,
				eKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_NO));
		
		//オプションサービスコード
		template.set(EKK0361B002CBSMsg.KEY_OP_SVC_CD, OP_SVC_CD_EMAIL);
	}
	
	/**
	 * サービス契約一覧照会（SYSID）2SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHashList 結果のハッシュ
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0081B003SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			ArrayList<HashMap<String, Object>> resultHashList,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0081B003への呼び出しパラメータ設定
		template = new CAANMsg(EKK0081B003CBSMsg.class.getName());
		mappingEKK0081B003InMsg(template, inHash);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{

			resultHashList.addAll(mappingEKK0081B003SCOutMsg(resultMsgs));
			
		}

		return status;
		
	}
	
	/**
	 * EKK0081B003の結果をHashとして抽出する
	 * @param resultMsgs EKK0081B003のテンプレートリスト
	 * @return EKK0081B003の結果部分
	 */
	private ArrayList<HashMap<String, Object>> mappingEKK0081B003SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		ArrayList<HashMap<String, Object>> retHashList = null;
		CAANMsg[] msgs = null;
		
		//結果の抽出
		retHashList = new ArrayList<HashMap<String, Object>>();
		msgs = resultMsgs[0].getCAANMsgList(EKK0081B003CBSMsg.EKK0081B003CBSMSG1LIST);
		for(int i = 0 ; i < msgs.length ; i++)
		{
			retHashList.add(msgs[i].getMsgData());
		}

		
		return retHashList;
		
	}
	
	/**
	 * templateに対してEKK0081B003の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0081B003InMsg(CAANMsg template, HashMap<String, Object> inHash)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081B003CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0081B003CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B003);

		//機能コード--サービス契約一意照会(ここだけはカレント)
//		template.set(EKK0081B003CBSMsg.FUNC_CODE, "1");
		// OM-2013-0003603 2013/11/13 START
		template.set(EKK0081B003CBSMsg.FUNC_CODE, "2");
		// OM-2013-0003603 2013/11/13 END
		
		//ＫＥＹ＿サービス契約番号
		template.set(EKK0081B003CBSMsg.KEY_SYSID, inHash.get(REQSYSID));
	}
	
	/**
	 * 条件部の共通する項目の設定
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	public void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
	}
	
	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		//電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		
		//ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		
		//オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		
		//サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		//依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		
		//依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		
		//依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		
		//オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
				
		return paramMap;
		
	}
	
	/**
	 * オプションサービス契約＜ISP＞一意照会SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHashList 結果のハッシュ
	 * @param eKK0361B002Hash 結果のハッシュ
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0361A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			ArrayList<HashMap<String, Object>> resultHashList,
			HashMap<String, Object> eKK0361B002Hash,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0361A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0361A010CBSMsg.class.getName());
		mappingEKK0361A010InMsg(template, inHash, resultHash, eKK0361B002Hash);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			resultHashList.addAll(mappingEKK0361A010sSCOutMsg(resultMsgs));
			
		}
		
		return status;
		
	}
	
	/**
	 * templateに対してEKK0081B003の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param resultHash アプリ固有のパラメータ
	 * @param eKK0361B002Hash アプリ固有のパラメータ
	 */
	private void mappingEKK0361A010InMsg(CAANMsg template,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> eKK0361B002Hash)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0361A010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0361A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0361A010);

		//機能コード--サービス契約一意照会
		template.set(EKK0361A010CBSMsg.FUNC_CODE, "2");

		//ＫＥＹ＿サービス契約番号
		template.set(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO, eKK0361B002Hash.get(EKK0361B002CBSMsg1List.OP_SVC_KEI_NO));
	}
	
	/**
	 * EKK0361A010の結果をHashとして抽出する
	 * @param resultMsgs EKK0351A010のテンプレートリスト
	 * @return EKK0351A010の結果部分
	 */
	private ArrayList<HashMap<String, Object>> mappingEKK0361A010sSCOutMsg(CAANMsg[] resultMsgs)
	{
		
		ArrayList<HashMap<String, Object>> retHashList = null;
		CAANMsg[] msgs = null;
		
		//結果の抽出
		retHashList = new ArrayList<HashMap<String, Object>>();
		msgs = resultMsgs[0].getCAANMsgList(EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST);
		
		for(int i = 0 ; i < msgs.length ; i++)
		{
			retHashList.add(msgs[i].getMsgData());
		}
		
		return retHashList;
		
	}
	
	/**
	 * オプションサービス契約一意照会SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param resultHashList 結果のハッシュ
	 * @param eKK0361B002Hash 結果のハッシュ
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0351A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			ArrayList<HashMap<String, Object>> resultHashList,
			HashMap<String, Object> eKK0361B002Hash,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0081B003への呼び出しパラメータ設定
		template = new CAANMsg(EKK0351A010CBSMsg.class.getName());
		mappingEKK0351A010InMsg(template, inHash, resultHash, eKK0361B002Hash);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			resultHashList.addAll(mappingEKK0351A010sSCOutMsg(resultMsgs));
			
		}
		
		return status;
		
	}
	
	/**
	 * templateに対してEKK0081B003の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param resultHash アプリ固有のパラメータ
	 * @param eKK0361B002Hash 照会系のパラメータ
	 */
	private void mappingEKK0351A010InMsg(CAANMsg template,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> eKK0361B002Hash)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0351A010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0351A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351A010);

		//機能コード--サービス契約一意照会
		template.set(EKK0351A010CBSMsg.FUNC_CODE, "2");

		//ＫＥＹ＿サービス契約番号
		template.set(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, eKK0361B002Hash.get(EKK0361B002CBSMsg1List.OP_SVC_KEI_NO));
		//オプションサービス契約番号の取得
		template.set(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, oPE_DATE);
	}
	
	/**
	 * EKK0351A010の結果をHashとして抽出する
	 * @param resultMsgs EKK0351A010のテンプレートリスト
	 * @return EKK0351A010の結果部分
	 */
	private ArrayList<HashMap<String, Object>> mappingEKK0351A010sSCOutMsg(CAANMsg[] resultMsgs)
	{
		
		ArrayList<HashMap<String, Object>> retHashList = null;
		CAANMsg[] msgs = null;
		
		//結果の抽出
		retHashList = new ArrayList<HashMap<String, Object>>();
		msgs = resultMsgs[0].getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
		
		for(int i = 0 ; i < msgs.length ; i++)
		{
			retHashList.add(msgs[i].getMsgData());
		}
		
		return retHashList;
		
	}
	
	/**
	 * 申込内容承認登録SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param jkkOpsvkeiTelIktAddCC 処理対象Hash
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private int callEKK0011D020SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> eKK0081A010,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0011D020への呼び出しパラメータ設定
		template = new CAANMsg(EKK0011D020CBSMsg.class.getName());
		mappingEKK0011D020InMsg(param, template, eKK0081A010, resultHash);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SIFの呼び出し
		resultMsgs = callSvcInter(handle, param, sIFRequest);
		
		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{

			resultHash.put(
					TEMPLATE_ID_EKK0011D020, 
					mappingEKK0011D020SCOutMsg(resultMsgs));

		}

		return status;
	}
	
	/**
	 * templateに対してEKK0011D020の条件に関する部分を設定する
	 * @param param パラメータ
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param resultHash 結果条件
	 */
	private void mappingEKK0011D020InMsg(
			IRequestParameterReadWrite param,
			CAANMsg template, 
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0011D020CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0011D020CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0011D020);

		//機能コード
		template.set(EKK0011D020CBSMsg.FUNC_CODE, "1");

		//パラメータ設定
		//SYSID
		template.set(EKK0011D020CBSMsg.SYSID, inHash.get(SYSID));
		
		//申込種別コード
		template.set(EKK0011D020CBSMsg.MSKM_SBT_CD, MSKM_STB_CD_00026);
		
		//申込受付年月日時分秒
		template.set(
				EKK0011D020CBSMsg.MSKM_UK_DTM,
				oPE_DATE  + "000000000");
			
		//申込年月日
		template.set(
				EKK0011D020CBSMsg.MSKM_YMD,
				oPE_DATE);

		// コンシューマ営業用申込状態識別コード
		template.set(EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, "04");

		//申込内容承認登録明細の枠を作成
		CAANMsg[] eKK0011D020CBSMSG1LIST = null;
		CAANMsg eKK0011D020CBSMSG1 = null;
		eKK0011D020CBSMSG1 = new CAANMsg(EKK0011D020CBSMsg1List.class.getName());
		fillCAANMSGNullMapping(eKK0011D020CBSMSG1, new EKK0011D020CBSMsg1List().getContents());
		eKK0011D020CBSMSG1LIST = new CAANMsg[]{eKK0011D020CBSMSG1};

		template.set(
				EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST,
				eKK0011D020CBSMSG1LIST);
	}
	

	/**
	 * EKK0011D020の結果をHashとして抽出する
	 * @param resultMsgs EKK0011D020のテンプレートリスト
	 * @return EKK0371D010の結果部分
	 */
	private HashMap<String, Object> mappingEKK0011D020SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		retHash = msg.getMsgData();

		return retHash;
		
	}
	
	/**
	 * 持ちうるフィールドにNullマッピングで埋める
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	private void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
	{
		
		//要素ごとのループ
		for(int i = 0 ; i < contents.length ; i++)
		{
			
			Object element = null;
			
			//キーに該当する箇所の取得
			element = contents[i][0];

			//Nullでマッピング
			msg.setNull((String)element);
			
		}
		
	}
	
	/**
	 * マッピングする際に行う共通の判定を行い、項目を設定する。
	 * @param setValue 設定項目値
	 * @param key マッピングキー
	 * @param template CAANMsgクラス
	 * @throws RequestParameterException, SCException
	 */
	private void setSvcIFMapping(Object setValue, String key, CAANMsg template) 
	throws RequestParameterException, SCException
	{
		// 設定項目値が空文字またはnullの場合
		if ("".equals(setValue) || setValue == null)
		{
			template.setNull(key);
		// 設定値がある場合
		}
		else
		{
			template.set(key, setValue);
		}
	}


	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 * @since 2012-08-27 ST1-2012-0000418対応のついで（業務結果とFW処理結果の格納の切り分け）
	 */
	private IRequestParameterReadWrite editResultRP(
			Map<?, ?> msgList,
			IRequestParameterReadWrite param) 
			throws Throwable 
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
//		String templateId = template.getString(JCMConstants.TEMPLATE_ID_KEY);
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_"
				+ String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_"
					+ formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}


	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @return void
	 * @throws Exception 
	 * @since 2012-08-27 ST1-2012-0000418対応のついで（業務結果とFW処理結果の格納の切り分け）
	 */
	private void errChk(Map<?, ?> msgList) throws Exception
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
//			//↓↓↓2012-07-18追加、ST1-2012-0000120対応↓↓↓
//			//運用しやすいエラーメッセージを出力
//			StringBuilder msg = new StringBuilder(getClass().getSimpleName());
//			msg.append("内S-IF呼び出しで");
//			ArrayList<Object> errList = new ArrayList<Object>();
//			errList = TemplateErrorUtil.getErrorInfo(msgList, errList);
//			JSYbpmLog.println(JSYbpmLog.ERROR, getClass(), errList, "BPX210E009", new String[]{msg.toString()}, null);
//			//↑↑↑2012-07-18追加、ST1-2012-0000120対応↑↑↑
			String errMsg = JKKSodSendConstCC.ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}


	/**
	 * 処理結果を示すリターンコードを下りマップにセットします
	 * 
	 * @param param リクエストパラメータ一式
	 * @param statusCode
	 * @throws Exception 
	 * @since 2012-08-27 ST1-2012-0000418対応のついで（業務結果とFW処理結果の格納の切り分け）
	 */
	private void setReturnCode(IRequestParameterReadWrite param, int statusCode) throws Exception
	{
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(KKSV011501CC);
		dataMap.put(RETURN_CODE, String.valueOf(statusCode));
	}


	/**
	 * サービスインターフェース呼び出し処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param siInMap サービスインターフェースの入力マップ
	 * @return 業務データ
	 * @throws Throwable 
	 * @since 2012-08-27 ST1-2012-0000418対応のついで（業務結果とFW処理結果の格納の切り分け）
	 */
	private CAANMsg[] callSvcInter(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> siInMap)
			throws Throwable
	{
		// サービスインターフェースの呼び出し
		Map<?, ?> rsltMap = (new ServiceComponentRequestInvoker()).run(siInMap, handle);

		// エラーマッピング処理
		editResultRP(rsltMap, param);

		// エラーチェック処理
		errChk(rsltMap);

		// 業務データ取得処理
		CAANMsg[] workData = (CAANMsg[])rsltMap.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		return workData;
	}


}
