/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		    ：契約管理システム
 *	モジュール名	        ：JKKGetDslKeiInfoEssCC
 *	ソースファイル名      ：JKKGetDslKeiInfoEssCC.java
 *	作成者			：GDC） Melvin Gungog
 *	日付			    ：2022年01月18日
 *＜機能概要＞
 *	解約時契約状態照会（営業支援）
 *＜修正履歴＞
 *	バージョン            修正日              修正者                      修正内容
 *  v57.00.00         2022/01/18         GDC） Melvin Gungog         【ANK-4173-00-00】【eo顧客】解約後の契約情報表示、再申込対応】
 *  v57.00.01         2022/03/01         FJ) 星野                    【IT1-2022-0000013】
 *  v65.00.00         2023/02/27         FJ）中原                    【ANK-4346-00-00】【eo定期】CCMG再構築対応
 *  v61.00.00         2023/04/11         FJ）藤本涼                  【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKGetSvkeiStatConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.fujitsu.futurity.model.common.check.DatetimeCheck;
import com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCDateUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECK0201B001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECN0021B008CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0021B008CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B011CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B012CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0381A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0381A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0441B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;

/**
 * 解約時契約状態照会（営業支援）CC
 * @author GDC） Melvin Gungog
 *
 */
public class JKKGetDslKeiInfoEssCC extends AbstractCommonComponent {
	
	/** エラー情報 */
	private static final String ERROR_INFO = "ERROR_INFO";
	/** エラーコード */
	private static final String ERROR_CODE = "errCode";
	/** エラーメッセージ */
	private static final String ERROR_MESSAGE = "errMessage";

	/** SYSID */
	private static final String SYSID = "sysid";
	
	/** サービス契約回線内訳番号 */
	private static final String SVC_KEI_KAISEN_UCWK_NO = "svcKeiKaisenUcwkNo";
	
	/** サービス終了日 */
	private static final String SVC_DSL_YMD = "svcDslYmd";
	
	/** サービスコード (ネット) */
	private static final String SVC_CD_01 = "01";
	
	/** サービスコード (電話) */
	private static final String SVC_CD_02 = "02";

	/** サービスコード (テレビ) */
	private static final String SVC_CD_03 = "03";
	
	/** サービスコード インデックス(ネット) */
	private static final Integer SVC_NET = 0;
	
	/** サービスコード インデックス(電話) */
	private static final Integer SVC_PHONE = 1;

	/** サービスコード インデックス(テレビ) */
	private static final Integer SVC_TV = 2;
	
	private static final Map<String, Integer> svcCdMap = new HashMap<String, Integer>();
	static{
		svcCdMap.put(SVC_CD_01, SVC_NET);
		svcCdMap.put(SVC_CD_02, SVC_PHONE);
		svcCdMap.put(SVC_CD_03, SVC_TV);
	}
	
	/** サービス契約ステータス取得部品用Mapキー */
	private static final String MAP_KEY_GET_SVKEI_STAT = "JKKGetSvkeiStat";
	
	/** 割引解約キャンセル契機コード （自動適用） */
	private static final String DSL_CNCL_OPTY_CD_1 = "1";
	
	/** テンプレートID EKK0081B011 */
	private static final String TEMPLATE_ID_EKK0081B011 = "EKK0081B011";
	
	/** テンプレートID EKK0081A010 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	
	/** テンプレートID EKK0451B002 */
	private static final String TEMPLATE_ID_EKK0451B002 = "EKK0451B002";
	
	/** テンプレートID EKK0451A010 */
	private static final String TEMPLATE_ID_EKK0451A010 = "EKK0451A010";
	
	/** テンプレートID EZM0321A010 */
	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";
	
	/** テンプレートID EKK0161B010 */
	private static final String TEMPLATE_ID_EKK0161B010 = "EKK0161B010";
	
	/** テンプレートID EKK0341B012 */
	private static final String TEMPLATE_ID_EKK0341B012 = "EKK0341B012";
	
	/** テンプレートID EKK0191A010 */
	private static final String TEMPLATE_ID_EKK0191A010 = "EKK0191A010";

	/** テンプレートID EKK2811B010 */
	private static final String TEMPLATE_ID_EKK2811B010 = "EKK2811B010";
	
	/** テンプレートID EKK0351B002 */
	private static final String TEMPLATE_ID_EKK0351B002 = "EKK0351B002";
	
	/** テンプレートID EKK0401B001 */
	private static final String TEMPLATE_ID_EKK0401B001 = "EKK0401B001";
	
	/** テンプレートID ECN0021B008 */
	private static final String TEMPLATE_ID_ECN0021B008 = "ECN0021B008";
	
	/** テンプレートID ECK0201B001 */
	private static final String TEMPLATE_ID_ECK0201B001 = "ECK0201B001";
	
	/** テンプレートID EKK0161B004 */
	private static final String TEMPLATE_ID_EKK0161B004 = "EKK0161B004";
	
	/** テンプレートID EKK0081B004 */
	private static final String TEMPLATE_ID_EKK0081B004 = "EKK0081B004";
	
	/** テンプレートID EKK2441B003 */
	private static final String TEMPLATE_ID_EKK2441B003 = "EKK2441B003";
	
	/** テンプレートID EKK0321B005 */
	private static final String TEMPLATE_ID_EKK0321B005 = "EKK0321B005";
	
	/** テンプレートID EKK0441B002 */
	private static final String TEMPLATE_ID_EKK0441B002 = "EKK0441B002";
	
	/** テンプレートID EKK0161A010 */
	private static final String TEMPLATE_ID_EKK0161A010 = "EKK0161A010";
	
// ANK-4173-01-00対応 20220221 星野 ADD START
	/** テンプレートID EKK0341B501 */
	private static final String TEMPLATE_ID_EKK0341B501 = "EKK0341B501";
// ANK-4173-01-00対応 20220221 星野 ADD END
	
	/** テンプレートID EKK0381A010 */
	private static final String TEMPLATE_ID_EKK0381A010 = "EKK0381A010";
	
	/** 空白 */
	private static final String EMPTY = "";
	/** 無 */
	private static final String NONE = "0";
	/** 有 */
	private static final String YES = "1";
	/** 降順 */
	private static final String SORT_DIV_2 = "2";
	/** 照会 */
	private static final String TRN_DIV_00 = "00";
	/** 割引解約キャンセル契機コード 1*/
	private static final String WRIB_DSL_CNCL_OPTY_CD_1 = "1";
	
	private static final String WORK_PARAM_ID = "KK_GH_TKKKMDL";
	
	private static final String CHK_RSLT_0 = "0";
	
	/** コンテンツサービスコード：eoアプリマーケット */
	private static final String CONT_SVC_CD_EOAPLMARKET = "0053";
	
//	/** 解約時申込明細番号 (ネット)*/
//	private String dslCnclMskmDtlNoNet = null;
//	
//	/** 解約時申込明細番号 (電話) */
//	private String dslCnclMskmDtlNoPhone = null;
//	
//	/** 解約時申込明細番号（テレビ） */
//	private String dslCnclMskmDtlNoTv = null;
	
//	/** サービス終了日 */
//	private String svcDslYmd = null;
	
	/**
	 * 解約時契約状態照会（営業支援）を行う。
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return IRequestParameterReadWrite リクエストパラメータ
	 * @throws Exception 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		Map<String, Object> ccMsg = (Map<String, Object>) param.getData(fixedText);
		
		String sysid = JKKStringUtil.nullToBlank((String)ccMsg.get(SYSID));
		
		String svcKeiKaisenUcwkNo = JKKStringUtil.nullToBlank((String)ccMsg.get(SVC_KEI_KAISEN_UCWK_NO));
		
		String svcDslYmd = JKKStringUtil.nullToBlank((String)ccMsg.get(SVC_DSL_YMD));
		
		// サービスIF結果取得(EKK0081B011)
		CAANMsg[] eKK0081B011CBSMsg1List = null;
		
		try
		{
			//(1)入力パラメータチェック（単項目チェック）
			if (!checkUnitParam(ccMsg))
			{
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
				return param;
			}
			
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
			
			// (2)EKK0081B011 同一利用場所サービス契約一覧照会
			eKK0081B011CBSMsg1List = getServiceContractList(handle, scCall, param, fixedText, svcKeiKaisenUcwkNo, sysid);
			
			// (3)回線契約情報取得処理
			 CAANMsg[] lineContractInformation = lineContractProcessing(handle, scCall, param, fixedText, eKK0081B011CBSMsg1List, svcDslYmd);
			
			// (3-4)解約時申込明細番号取得処理
			// 解約時申込明細番号 (ネット)
			String dslCnclMskmDtlNoNet = getDslCnclMskmDtlNo(handle, param, lineContractInformation[SVC_NET]);
			// 解約時申込明細番号 (電話)
			String dslCnclMskmDtlNoPhone = getDslCnclMskmDtlNo(handle, param, lineContractInformation[SVC_PHONE]);
			// 解約時申込明細番号（テレビ）
			String dslCnclMskmDtlNoTv = getDslCnclMskmDtlNo(handle, param, lineContractInformation[SVC_TV]);

			// (4)件数結果チェック
			if (!checkGetNumResult(ccMsg, lineContractInformation))
			{
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
				return param;
			}
			
			// (5)eo光ネット情報編集処理
			editEOHikariNetInfo(handle, scCall, param, fixedText, ccMsg, sysid, svcDslYmd, lineContractInformation[SVC_NET], dslCnclMskmDtlNoNet, dslCnclMskmDtlNoPhone);
			
			// (6)eo光電話情報編集処理
			editOpticalPhoneInfo(handle, scCall, param, fixedText, ccMsg, lineContractInformation[SVC_PHONE], dslCnclMskmDtlNoPhone);
			
			// (7)eo光テレビ情報編集処理
			editEOOpticalTV(handle, scCall, param, fixedText, ccMsg, lineContractInformation[SVC_TV], dslCnclMskmDtlNoTv);
			
			// (8)その他項目編集処理
			editMiscellaneousItem(handle, scCall, param, fixedText, ccMsg, sysid, svcDslYmd, lineContractInformation);
			
			// 正常終了
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_0000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
		}
		
		catch (Exception e)
		{
			// システムエラーを設定する
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_9000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
			throw new CCException("", e);
		}
		
		return param;
	}
	
	/**
	 * 共通項目のメッセージを作成する。
	 * @param param リクエストパラメータ
	 * @param mappingData マッピングデータ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			/* CAANMsg[]の場合 */
			if (mappingData[i][1] instanceof CAANMsg[])
			{
				template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			}
			/* CAANMsg[]の以外 */
			else
			{
				/* nullの場合*/
				if (EMPTY.equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				/* 他の場合*/
				else 
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * エラー情報を取得する。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param fixedText サービスメッセージ
	 * @param mappingData マッピングデータ
	 * @return param リクエストパラメータ
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates,
														int returnCode,
														String fixedText,
														Object[][] mappingData) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		/* 0以外のとき */
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		/* nullのとき */
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		/* nullの場合 */
		if (obj == null)
		{
			bpStatus = -1;
		}
		/* 他の場合 */
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		/* セクタが比べる*/
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		HashMap<String, String> inMap = null;
		
		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(fixedText);
		
		for (int i = 0; i < mappingData.length; i++)
		{
			/* nullチェック　*/
			if (!template.isNull(mappingData[i][0] + "_err"))
			{
				/* ユーザデータ情報にエラーを確認する　*/
				if (!inMap.containsKey(mappingData[i][0] + "_err"))
				{
					inMap.put(mappingData[i][0] + "_err", template.getString(mappingData[i][0] + "_err"));
				}
			}
		}
		return param;
	}
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param mappingData マッピングデータ
	 * @return CAANMsg サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			Object[][] mappingData) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)return_code, fixedText, mappingData);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		
		/* エラー情報のマップないとき、新しいエラー情報をイニシャライズする*/
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		/* 異常の場合、SCCallExceptionを生成してスローする */
		if (!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		return msg;
	}
	
	/**
	 * 同一利用場所サービス契約一覧照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ	
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @param sysid SYSID
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0081B011CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiKaisenUcwkNo,
			String sysid) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0081B011Msg = null;
		
		Object[][] ekk0081b011 =
		{
			{EKK0081B011CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B011},
			{EKK0081B011CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0081B011CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo},
			{EKK0081B011CBSMsg.KEY_SYSID, sysid}
		};
		
		ekk0081B011Msg = callSC(handle, scCall, param, fixedText, ekk0081b011);
		result = ekk0081B011Msg.getCAANMsgList(EKK0081B011CBSMsg.EKK0081B011CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * サービス契約一意照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg getEKK0081A010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0081A010Msg = null;
		
		Object[][] ekk0081a010 =
		{
			{EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010},
			{EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2},
			{EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
			{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)}
		};
		
		ekk0081A010Msg = callSC(handle, scCall, param, fixedText, ekk0081a010);
		result = ekk0081A010Msg.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		if(result==null || result.length<=0)
		{
			return null;
		}
		else
		{
			return result[0];
		}
	}
	
	/**
	 * 割引サービス契約一覧照会（サービス契約番号）
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0451B002CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0451B002Msg = null;
		
		Object[][] ekk0451B002 =
		{
			{EKK0451B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451B002},
			{EKK0451B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0451B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		ekk0451B002Msg = callSC(handle, scCall, param, fixedText, ekk0451B002);
		result = ekk0451B002Msg.getCAANMsgList(EKK0451B002CBSMsg.EKK0451B002CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * 割引サービス契約一意照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param wribSvcKeiNo 割引サービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0451A010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String wribSvcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0451A010Msg = null;
		
		Object[][] ekk0451A010 =
		{
			{EKK0451A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451A010},
			{EKK0451A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2},
			{EKK0451A010CBSMsg.KEY_WRIB_SVC_KEI_NO, wribSvcKeiNo},
			{EKK0451A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)}
		};
		
		ekk0451A010Msg = callSC(handle, scCall, param, fixedText, ekk0451A010);
		result = ekk0451A010Msg.getCAANMsgList(EKK0451A010CBSMsg.EKK0451A010CBSMSG1LIST);
		
		return result;
	}
		
	/**
	 * 業務パラメータ管理一意照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEZM0321A010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ezm0321A010Msg = null;
		
		Object[][] ezm0321A010 =
		{
			{EZM0321A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0321A010},
			{EZM0321A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, WORK_PARAM_ID}
		};
		
		ezm0321A010Msg = callSC(handle, scCall, param, fixedText, ezm0321A010);
		result = ezm0321A010Msg.getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
		
		return result;
	}

	/**
	 * サービス解約時同時解約電話番号一覧照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0161B010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0161b010Msg = null;
		
		Object[][] ekk0451b002 =
		{
			{EKK0161B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161B010},
			{EKK0161B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0161B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
		};
		
		ekk0161b010Msg = callSC(handle, scCall, param, fixedText, ekk0451b002);
		result = ekk0161b010Msg.getCAANMsgList(EKK0161B010CBSMsg.EKK0161B010CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * サービス契約内訳＜eo光電話＞一意照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiKaisenUcwkNo サービス契約内訳番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0191A010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiUcwkNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0191a010Msg = null;
		
		Object[][] ekk0191a010 =
		{
			{EKK0191A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191A010},
			{EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_4},
			{EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo},
		};
		
		ekk0191a010Msg = callSC(handle, scCall, param, fixedText, ekk0191a010);
		result = ekk0191a010Msg.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
		
		return result;
	}
	
	
	/**
	 * 機器提供サービス契約一覧照会（接続機器情報）
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @return 例外が発生した場合
	 * @throws Exception
	 */
	private CAANMsg[] getEKK0341B012CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0341B012Msg = null;
		
		Object[][] ekk0341B012 =
		{
			{EKK0341B012CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341B012},
			{EKK0341B012CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0341B012CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		ekk0341B012Msg = callSC(handle, scCall, param, fixedText, ekk0341B012);
		result = ekk0341B012Msg.getCAANMsgList(EKK0341B012CBSMsg.EKK0341B012CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * 機器オプションサービス契約一覧照会（機器提供ＳＶ）
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param kktkSvcKeiNo 機器提供サービス契約
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK2811B010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String kktkSvcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk2811B010Msg = null;
		
		Object[][] ekk2811B010 =
		{
			{EKK2811B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2811B010},
			{EKK2811B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK2811B010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo},
			{EKK2811B010CBSMsg.KEY_KKOP_SVC_STAT , JKKStrConst.OP_SVC_STAT_DSLZUMI + "," + JKKStrConst.OP_SVC_STAT_CANCELZUMI},
		};
		
		ekk2811B010Msg = callSC(handle, scCall, param, fixedText, ekk2811B010);
		result = ekk2811B010Msg.getCAANMsgList(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * オプションサービス契約一覧照会（サービス契約番号）
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0351B002CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo,
			String svcKeiUcwkNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0351B002Msg = null;
		
		Object[][] ekk0351B002 =
		{
			{EKK0351B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351B002},
			{EKK0351B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0351B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
			{EKK0351B002CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo},
		};
		
		ekk0351B002Msg = callSC(handle, scCall, param, fixedText, ekk0351B002);
		result = ekk0351B002Msg.getCAANMsgList(EKK0351B002CBSMsg.EKK0351B002CBSMSG1LIST);
		
		return result;
	}
		
		/**
		 * オプションサービス契約一覧照会（サービス契約番号）
		 * @param handle セッションハンドル
		 * @param scCall SC呼び出し部品
		 * @param param リクエストパラメータ
		 * @param fixedText サービスメッセージ
		 * @param svcKeiNo サービス契約番号
		 * @return CAANMsg[] サービスIF
		 * @throws Exception 例外が発生した場合
		 */
		private CAANMsg[] getEKK0351B002CAANMsg(SessionHandle handle,
				ServiceComponentRequestInvoker scCall,
				IRequestParameterReadWrite param,
				String fixedText,
				String svcKeiNo) throws Exception
		{
			CAANMsg[] result = null;
			CAANMsg ekk0351B002Msg = null;
			
			Object[][] ekk0351B002 =
			{
				{EKK0351B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351B002},
				{EKK0351B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
				{EKK0351B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
			};
			
			ekk0351B002Msg = callSC(handle, scCall, param, fixedText, ekk0351B002);
			result = ekk0351B002Msg.getCAANMsgList(EKK0351B002CBSMsg.EKK0351B002CBSMSG1LIST);
			
			return result;
		}
	
		/**
		 * オプションサービス契約一覧照会（サービス契約番号）
		 * @param handle セッションハンドル
		 * @param scCall SC呼び出し部品
		 * @param param リクエストパラメータ
		 * @param fixedText サービスメッセージ
		 * @param svcKeiNo サービス契約番号
		 * @return CAANMsg[] サービスIF
		 * @throws Exception 例外が発生した場合
		 */
		private CAANMsg[] getEKK0351B002CAANMsgTV(SessionHandle handle,
				ServiceComponentRequestInvoker scCall,
				IRequestParameterReadWrite param,
				String fixedText,
				String svcKeiNo) throws Exception
		{
			CAANMsg[] result = null;
			CAANMsg ekk0351B002Msg = null;
			
			Object[][] ekk0351B002 = new Object[][]
			{
				{EKK0351B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351B002},
				{EKK0351B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
				{EKK0351B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
				{EKK0351B002CBSMsg.KEY_OP_SVC_CD , JKKStrConst.OP_SVC_CABLE_GUDMG},
			};

			
			ekk0351B002Msg = callSC(handle, scCall, param, fixedText, ekk0351B002);
			result = ekk0351B002Msg.getCAANMsgList(EKK0351B002CBSMsg.EKK0351B002CBSMSG1LIST);
			
			return result;
		}
	
	
	/**
	 * サブオプションサービス契約一覧照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0401B001CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String opSvcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0401B001Msg = null;
		
		Object[][] ekk0401B001 =
		{
			{EKK0401B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401B001},
			{EKK0401B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo}
		};
		
		ekk0401B001Msg = callSC(handle, scCall, param, fixedText, ekk0401B001);
		result = ekk0401B001Msg.getCAANMsgList(EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * オプションサービス契約一覧照会（サービス契約番号）
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysid SYSID
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getECN0021B008CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String sysid) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ECN0021B008Msg = null;
		
		Object[][] ECN0021B008 =
		{
		  {ECN0021B008CBSMsg.TEMPLATEID, TEMPLATE_ID_ECN0021B008}
		, {ECN0021B008CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
		, {ECN0021B008CBSMsg.KEY_SYSID, sysid}
		, {ECN0021B008CBSMsg.KEY_OUT_CONT_SVC_CD, CONT_SVC_CD_EOAPLMARKET}	// KKIFE416を踏襲しeoアプリマーケットは除外
		};
		
		ECN0021B008Msg = callSC(handle, scCall, param, fixedText, ECN0021B008);
		result = ECN0021B008Msg.getCAANMsgList(ECN0021B008CBSMsg.ECN0021B008CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * 連絡先一覧照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysid SYSID
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getECK0201B001CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String sysid) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg eck0201B001Msg = null;
		
		Object[][] eck0201B001 =
		{
				{ECK0201B001CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0201B001},
				{ECK0201B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
				{ECK0201B001CBSMsg.KEY_SYSID, sysid},
				{ECK0201B001CBSMsg.KEY_RRK_WAY_CD , JKKStrConst.CD00790_MLAD},
				{ECK0201B001CBSMsg.KEY_RRKS_SBT_CD , JKKStrConst.CD00254_OTHER},
		};
		
		eck0201B001Msg = callSC(handle, scCall, param, fixedText, eck0201B001);
		result = eck0201B001Msg.getCAANMsgList(ECK0201B001CBSMsg.ECK0201B001CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * サービス契約内訳一覧照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNO サービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0161B004CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNO) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0161B004Msg = null;
		
		Object[][] ekk0161B004 =
		{
			{EKK0161B004CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161B004},
			{EKK0161B004CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_3},
			{EKK0161B004CBSMsg.KEY_SVC_KEI_NO, svcKeiNO}
		};
		
		ekk0161B004Msg = callSC(handle, scCall, param, fixedText, ekk0161B004);
		result = ekk0161B004Msg.getCAANMsgList(EKK0161B004CBSMsg.EKK0161B004CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * サービス契約一覧照会（SYSID）2
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysid SYSID
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0081B004CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String sysid) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0081B004Msg = null;
		
		Object[][] ekk0081B004 =
		{
			{EKK0081B004CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B004},
			{EKK0081B004CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0081B004CBSMsg.KEY_SYSID, sysid},
			{EKK0081B004CBSMsg.KEY_PRC_GRP_CD, JKKStrConst.CD00133_17},
			{EKK0081B004CBSMsg.DISPLAY_NUM, "100" },
			{EKK0081B004CBSMsg.DISPLAY_PAGE_NUM, "1" },
			{EKK0081B004CBSMsg.MAX_SEARCH_NUM, "2000" }
		};
		
		ekk0081B004Msg = callSC(handle, scCall, param, fixedText, ekk0081B004);
		result = ekk0081B004Msg.getCAANMsgList(EKK0081B004CBSMsg.EKK0081B004CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * 他事業者割引契約一覧照会（サービス契約番号）
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK2441B003CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk2441B003Msg = null;
		
		Object[][] ekk2441B003 =
		{
			{EKK2441B003CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2441B003},
			{EKK2441B003CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK2441B003CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		ekk2441B003Msg = callSC(handle, scCall, param, fixedText, ekk2441B003);
		result = ekk2441B003Msg.getCAANMsgList(EKK2441B003CBSMsg.EKK2441B003CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * 課金先一覧照会（サービス契約番号）
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0321B005CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0321B005Msg = null;
		
		Object[][] ekk0321B005 =
		{
			{EKK0321B005CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0321B005},
			{EKK0321B005CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0321B005CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		ekk0321B005Msg = callSC(handle, scCall, param, fixedText, ekk0321B005);
		result = ekk0321B005Msg.getCAANMsgList(EKK0321B005CBSMsg.EKK0321B005CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * 
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param seikyKeiNo 
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0441B002CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String seikyKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0441B002Msg = null;
		
		Object[][] ekk0441B002 =
		{
			{EKK0441B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0441B002},
			{EKK0441B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0441B002CBSMsg.KEY_SEIKY_KEI_NO, seikyKeiNo}
		};
		
		ekk0441B002Msg = callSC(handle, scCall, param, fixedText, ekk0441B002);
		result = ekk0441B002Msg.getCAANMsgList(EKK0441B002CBSMsg.EKK0441B002CBSMSG1LIST);
		
		return result;
	}
	
	
	/**
	 * サービス契約内訳一意照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0161A010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiUcwkNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0161a010Msg = null;
		
		Object[][] ekk0161a010 =
		{
			{EKK0161A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161A010},
			{EKK0161A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2},
			{EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo},
			{EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)}
		};
		
		ekk0161a010Msg = callSC(handle, scCall, param, fixedText, ekk0161a010);
		result = ekk0161a010Msg.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		
		return result;
	}
	
// ANK-4173-01-00対応 20220221 星野 ADD START
	/**
	 * 機器提供サービス契約一覧照会(サービス契約内訳番号)
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0341B501CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiUcwkNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg EKK0341B501Msg = null;
		
		Object[][] EKK0341B501 =
		{
			{EKK0341B501CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341B501},
			{EKK0341B501CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKK0341B501CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo},
		};
		
		EKK0341B501Msg = callSC(handle, scCall, param, fixedText, EKK0341B501);
		result = EKK0341B501Msg.getCAANMsgList(EKK0341B501CBSMsg.EKK0341B501CBSMSG1LIST);
		
		return result;
	}
// ANK-4173-01-00対応 20220221 星野 ADD END
	
	/**
	 * オプションサービス契約<TV>一意照会
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @return CAANMsg[] サービスIF
	 * @throws Exception 例外が発生した場合
	 */
	private CAANMsg[] getEKK0381A010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String opSvcKeiNo) throws Exception
	{
		CAANMsg[] result = null;
		CAANMsg ekk0381a010Msg = null;
		
		Object[][] ekk0381a010 =
		{
			{EKK0381A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0381A010},
			{EKK0381A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2},
			{EKK0381A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo},
		};
		
		ekk0381a010Msg = callSC(handle, scCall, param, fixedText, ekk0381a010);
		result = ekk0381a010Msg.getCAANMsgList(EKK0381A010CBSMsg.EKK0381A010CBSMSG1LIST);
		
		return result;
	}
	
	
	/**
	 * 同一利用場所サービス契約一覧照会
	 * <br>
	 * @param handle セッションハンドル
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param svcKeiKaisenUcwkNo
	 * @param sysid
	 * @return
	 * @throws Exception
	 */
	private CAANMsg[] getServiceContractList(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiKaisenUcwkNo,
			String sysid) throws Exception
	{
			return getEKK0081B011CAANMsg(handle, scCall, param, fixedText, svcKeiKaisenUcwkNo, sysid);	
	}
	
	/**
	 * 回線契約情報取得処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param eKK0081B011CBSMsg1List
	 * @throws Throwable 
	 */
	private CAANMsg[] lineContractProcessing(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			CAANMsg[] eKK0081B011CBSMsg1List,
			String svcDslYmd
	) throws Throwable
	{
		CAANMsg[] lineContractInformation = new CAANMsg[3];
		
		int length = eKK0081B011CBSMsg1List != null ? eKK0081B011CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0081B011CBSMsg = eKK0081B011CBSMsg1List[i];
			
			// サービスコード
			String svcCd = eKK0081B011CBSMsg.getString(EKK0081B011CBSMsg1List.SVC_CD);
			Integer svcCdIndex = svcCdMap.get(svcCd);
			if(svcCdIndex==null)
			{
				continue;
			}
			// サービス契約番号
			String svcKeiNo = eKK0081B011CBSMsg.getString(EKK0081B011CBSMsg1List.SVC_KEI_NO);
			// サービス契約ステータス
			String svcKeiStat = eKK0081B011CBSMsg.getString(EKK0081B011CBSMsg1List.SVC_KEI_STAT);
			
			// (3-1)サービスコード・ステータス判定
			if (JKKStrConst.CD00037_DSL_ZM.equals(svcKeiStat))
			{
				// (3-2)EKK0081A010　サービス契約一意照会
				CAANMsg resultContractInfo = getEKK0081A010CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
				
				// (3-3)サービス終了年月日判定
				lineContractInformation[svcCdIndex] = getDojiDslContract(lineContractInformation[svcCdIndex], resultContractInfo, svcDslYmd);
			}
		}
		
		return lineContractInformation;
	}

	private String getDslCnclMskmDtlNo(
		SessionHandle handle,
		IRequestParameterReadWrite param, 
		CAANMsg lineContractInfo
	)throws Throwable 
	{
		String dslCnclMskmDtlNo = null;
		if(lineContractInfo != null)
		{
			// サービス契約番号
			String svcKeiNo = lineContractInfo.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
			HashMap<String, Object> svkeiStatMap = new HashMap<String, Object>();
			svkeiStatMap.put(JKKGetSvkeiStatConstCC.IDO_DIV, EMPTY);
			svkeiStatMap.put(JKKGetSvkeiStatConstCC.KEY_SVC_KEI_NO, svcKeiNo);
			svkeiStatMap.put(JKKGetSvkeiStatConstCC.KEY_SVC_KEI_UCWK_NO, null);
			param.setData(MAP_KEY_GET_SVKEI_STAT, svkeiStatMap);
			
			// 一世代前のサービス契約ステータスを取得する
			JKKGetSvkeiStat.getLastSvcKeiStat(handle, param, MAP_KEY_GET_SVKEI_STAT);
			dslCnclMskmDtlNo = (String)svkeiStatMap.get(JKKGetSvkeiStatConstCC.DSL_CNCL_MSKM_DTL_NO);
		}
		
		return dslCnclMskmDtlNo;
	}
		
	/**
	 * サービス終了年月日判定
	 * <br>
	 */
	private CAANMsg getDojiDslContract(CAANMsg cur, CAANMsg target, String svcDslYmd) {
		
		// サービス終了年月日
		String targetSvcEndYmd = target.getString(JKKStrConst.SVC_ENDYMD);
		
		int svcEndymdDiff = JPCUtilCommon.subtractMonth(svcDslYmd, targetSvcEndYmd);
		
		// ( リクエストパラメータ.サービス終了日　の年月 -  EKK0081A010.サービス終了年月日　の年月) = 0 または 1 の場合、
		if (svcEndymdDiff == 0 || svcEndymdDiff == 1)
		{
			if(cur == null)
			{
				return target;
			}
			else
			{
				// 既に サービス契約一意照会結果 が設定されている場合は、「サービス終了年月日」が大きい方を保持する。
				String curSvcEndYmd = cur.getString(JKKStrConst.SVC_ENDYMD);
				if( curSvcEndYmd.compareTo(targetSvcEndYmd) >= 0 )
				{
					return cur;
				}
				else
				{
					return target;
				}
			}
		}
		else
		{
			return cur;
		}
	}

	/**
	 * eo光ネット情報編集処理
	 * <br>
	 */
	@SuppressWarnings("unchecked")
	private void editEOHikariNetInfo(
		SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param,
		String fixedText,
		Map<String, Object> ccMsg,
		String sysid,
		String svcDslYmd, 
		CAANMsg ekk0081A010Net, 
		String dslCnclMskmDtlNoNet, 
		String dslCnclMskmDtlNoPhone
	) throws Exception
	{
		
		String svcEndYmd = null;
		String svcStaYmd = null;
		String pcrsCd = null;
		String pcrsNm = null;
		String svcKeiNo = null;
		
		
		if (ekk0081A010Net != null)
		{
			// eo光ネット情報
			HashMap<String, Object> eohntInfo = new HashMap<String, Object>();
			
			// サービス契約一意照会結果（ネット）.サービス終了年月日　の年
			svcEndYmd = ekk0081A010Net.getString(EKK0081A010CBSMsg1List.SVC_ENDYMD);
			// サービス契約一意照会結果（ネット）.サービス開始年月日　の年
			svcStaYmd = ekk0081A010Net.getString(EKK0081A010CBSMsg1List.SVC_STA_YMD);
			// サービス契約一意照会結果（ネット）.料金コースコード
			pcrsCd = ekk0081A010Net.getString(EKK0081A010CBSMsg1List.PCRS_CD);
			// サービス契約一意照会結果（ネット）.料金コースコード名称
			pcrsNm = ekk0081A010Net.getString(EKK0081A010CBSMsg1List.PCRS_CD_NM);
			// サービス契約一意照会結果（ネット）
			svcKeiNo = ekk0081A010Net.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
			
			
			int usedYears = 0;
			try{
				/** 利用年数
				 * ・開始翌年同日から「1年」 それまでは「0年」
				 * ・算出は日単位のため、月差を算出後に日差分を補正する
				 **/
				// 月差を算出
				int subtractMonth = JPCUtilCommon.subtractMonth(svcEndYmd, svcStaYmd);
				// 12で割って年差とする(intの除算なので小数点以下切り捨て 開始翌年同月で「1年」となる)
				usedYears = subtractMonth/12;
				
				
				// 開始終了が同月（n年ジャスト）の場合
				if(subtractMonth % 12 == 0)
				{
					// 日差により終了日が開始日に至らない場合の考慮
					// サービス開始日：2020/1/2、サービス終了日：2021/1/1 →利用年数「0年」
					String endDd = svcEndYmd.substring(6,8);
					String staDd = svcStaYmd.substring(6,8);
					
					if(endDd.compareTo(staDd) < 0)
					{
						usedYears--;
					}
				}
				
				// 念のため、マイナスになってるようなら0に
				if(usedYears < 0)
				{
					usedYears = 0;
				}
			}
			catch(Exception e)
			{
				// 例外発生時は利用年数0年とする
				usedYears = 0;
			}
			
			// (5-3)サービス契約関連項目編集処理
			setServiceContractRelatedItems(eohntInfo, ccMsg, usedYears, pcrsCd, pcrsNm);
			
			// (5-4)ネット割引関連項目編集処理
			editNetDiscount(handle, scCall, param, fixedText, dslCnclMskmDtlNoNet, dslCnclMskmDtlNoPhone, svcKeiNo, eohntInfo);
			
			// (5-5)ネット機器関連項目編集処理
			editNetDevices(handle, scCall, param, fixedText, dslCnclMskmDtlNoNet, dslCnclMskmDtlNoPhone, svcKeiNo, eohntInfo);
			
			// (5-6)ネットオプション関連項目編集処理
			editNetOptions(handle, scCall, param, fixedText, dslCnclMskmDtlNoNet, svcKeiNo, eohntInfo);
			
			// (5-7)ネットその他項目編集処理
			editNetOthers(handle, scCall, param, fixedText, sysid, svcDslYmd, eohntInfo);
			
			// (5-8)eo光ネット情報設定処理
			ccMsg.put("eohntInfo", eohntInfo);
		}
		
		else
		{
			// (5-2)サービス契約関連項目編集処理（契約なし）
			// 利用年数
			ccMsg.put("useNensu", EMPTY);
			// eo光ネット情報
			ccMsg.put("eohntInfo", new HashMap());
		}
	}
	
	/**
	 * eo光電話情報編集処理
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ	
	 * @param ccMsg サービスIF
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void editOpticalPhoneInfo(
		SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param,
		String fixedText,
		Map<String, Object> ccMsg, 
		CAANMsg ekk0081A010Tel, 
		String dslCnclMskmDtlNoPhone
	) throws Throwable
	{
		// (6)eo光電話情報編集処理
		// (6-1)電話契約有無判定
		// (6-2)サービス契約関連項目編集処理（契約なし）
		HashMap<String, Object> eohtlInfo = new HashMap<String, Object>();
		
		// (6-3)サービス契約関連項目編集処理
		
		if (null != ekk0081A010Tel)
		{
			
			// サービス契約番号
			String svcKeiNo = JKKStringUtil.nullToBlank(ekk0081A010Tel.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
			
			// サービス契約一意照会結果（電話）.料金コースコード
			String pcrsCd = ekk0081A010Tel.getString(EKK0081A010CBSMsg1List.PCRS_CD);
			// サービス契約一意照会結果（電話）.料金コースコード名称
			String pcrsNm = ekk0081A010Tel.getString(EKK0081A010CBSMsg1List.PCRS_CD_NM);
			
			// (6-3)サービス契約関連項目編集処理
			eohtlInfo.put("pcrsCd", pcrsCd);			// 30 料金コースコード
			eohtlInfo.put("pcrsNm", pcrsNm);			// 31 料金コース名
			
			
			// (6-4)EKK0161B010 サービス解約時同時解約電話番号一覧照会
			ArrayList<HashMap<String, Object>> eohtlNoList = new ArrayList<HashMap<String, Object>>();
			
			
			// サービスIF結果取得(EKK0161B010) (電話)
			CAANMsg[] ekk0161b010CBSMsg1List = null;
			ekk0161b010CBSMsg1List = getEKK0161B010CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
			
			// (6-5)処理対象判定
			if (null != ekk0161b010CBSMsg1List && ekk0161b010CBSMsg1List.length > 0)
			{
				for (CAANMsg caanMsg: ekk0161b010CBSMsg1List)
				{
					// チェック結果
					String chkResult = caanMsg.getString(EKK0161B010CBSMsg1List.CHK_RSLT);
					// サービス契約内訳番号
					String svcKeiUcwkNo = caanMsg.getString(EKK0161B010CBSMsg1List.SVC_KEI_UCWK_NO);
					
					if (CHK_RSLT_0.equals(chkResult))
					{
						// (6-6)電話番号関連項目編集処理
						HashMap<String, Object> eohtlNoInfoMap = new HashMap<String, Object>();
						eohtlNoInfoMap.put("telno", EMPTY); 
						eohtlNoInfoMap.put("bmpUm", NONE); 
						
						
						// サービスIF結果取得(EKK0191A010) (電話)
						CAANMsg[] ekk0191a010CBSMsg1List = null;
						ekk0191a010CBSMsg1List = getEKK0191A010CAANMsg(handle, scCall, param, fixedText, svcKeiUcwkNo);
						
						if (null != ekk0191a010CBSMsg1List && ekk0191a010CBSMsg1List.length > 0)
						{
							// 34 電話番号
							eohtlNoInfoMap.put("telno", ekk0191a010CBSMsg1List[0].getString(EKK0191A010CBSMsg1List.TELNO));
							// 35 番ポ有無
							eohtlNoInfoMap.put("bmpUm", ekk0191a010CBSMsg1List[0].getString(EKK0191A010CBSMsg1List.BMP_UM));
						}
						
						// (6-6)電話割引関連項目編集処理
						// (6-6-1) 電話割引関連項目初期設定
						eohtlNoInfoMap.put("ansnTelPackUm", NONE); 		// 36  あんしん電話パック有無
						eohtlNoInfoMap.put("eohtlPack3Um", NONE); 		// 37 eo光電話パック３有無
						eohtlNoInfoMap.put("eohtlPack7Um", NONE);		// 38 eo光電話パック７有無
						
						// (6-6-2) 電話セレクトオプションパック操作部品
						String fixedTextPackCC = "fixedTextPackCC";
						JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
						//電話セレクトオプションパック操作CCに渡すパラメータを作成
						HashMap<String, Object> paramMapPackCC = new HashMap<String, Object>();
						paramMapPackCC.put("func_cd", JPCModelConstant.FUNC_CD_1);
						paramMapPackCC.put("trn_div", TRN_DIV_00); //照会
						paramMapPackCC.put("svc_kei_no", ekk0081A010Tel.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
						paramMapPackCC.put("svc_kei_ucwk_no", svcKeiUcwkNo);
						paramMapPackCC.put("sort_div", SORT_DIV_2);
						param.setData(fixedTextPackCC, paramMapPackCC);
						//照会を実行
						param = telSelectOpPackOperateCC.execute(handle, param, fixedTextPackCC);
						
						HashMap<String, Object> retMapPackCC = (HashMap<String, Object>)param.getData(fixedTextPackCC);
						ArrayList<HashMap<String, Object>> retList = (ArrayList<HashMap<String, Object>>)retMapPackCC.get("wrib_svc_kei_list"); 
						
						for(int i=0; i<retList.size(); i++){
							// 割引サービス契約番号
							String wribSvcKeiNo = (String)retList.get(i).get("wrib_svc_kei_no");
							
							// (6-6-3) 電話パック割引項目編集処理
							// サービスIF結果取得(EKK0451A010) (電話)
							CAANMsg[] ekk0451a010CBSMsg1List = null;
							ekk0451a010CBSMsg1List = getEKK0451A010CAANMsg(handle, scCall, param, fixedText, wribSvcKeiNo);
							
							if (null != ekk0451a010CBSMsg1List && ekk0451a010CBSMsg1List.length > 0)
							{
								String wribDslCnclOptyCd = ekk0451a010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_DSL_CNCL_OPTY_CD);
								String wribSvcCd = ekk0451a010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD);
								String mskmDtlNo = ekk0451a010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.MSKM_DTL_NO);
								String wribSvcKeiStat = ekk0451a010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT);
								
								if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(wribSvcKeiStat) 
										|| JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(wribSvcKeiStat))
										&& WRIB_DSL_CNCL_OPTY_CD_1.equals(wribDslCnclOptyCd) 
										&& mskmDtlNo.equals(dslCnclMskmDtlNoPhone))
								{
									// EKK0451A001.割引サービスコード　=　"W00000023"(あんしん電話パック)
									if (JKKStrConst.CD00138_ANSN_TEL_PACK.equals(wribSvcCd))
									{
										eohtlNoInfoMap.put("ansnTelPackUm", YES);	// 36 あんしん電話パック有無
									}
									
									// EKK0451A001.割引サービスコード　=　"W00000007"(eo光電話パック３)
									if (JKKStrConst.CD00138_EOHTL_PACK_3.equals(wribSvcCd)) 
									{
										eohtlNoInfoMap.put("eohtlPack3Um", YES);	// 37 eo光電話パック３有無
									}
									
									// EKK0451A001.割引サービスコード　=　"W00000008"(eo光電話パック７)
									if (JKKStrConst.CD00138_EOHTL_PACK_7.equals(wribSvcCd)) 
									{
										eohtlNoInfoMap.put("eohtlPack7Um", YES);	// 38 eo光電話パック７有無
									}
								}
							}
						}
						
						// (6-7)電話オプション関連項目編集処理
						// (6-7-1) ネットオプション関連項目初期設定
						eohtlNoInfoMap.put("ansnHcsSvcUm", NONE);					// 39  あんしん発着信サービス有無
						eohtlNoInfoMap.put("hasinshaNoDspUm", NONE);				// 40 発信者番号表示有無
						eohtlNoInfoMap.put("hitchiIncmhiUm", NONE);					// 41 非通知着信拒否有無
						eohtlNoInfoMap.put("warkmiTelUm", NONE);					// 42 割込電話有無
						eohtlNoInfoMap.put("tensoTelUm", NONE);						// 43 転送電話有無
						eohtlNoInfoMap.put("tensoTelChoiceUm", NONE);				// 44 転送電話選択有無
						eohtlNoInfoMap.put("stinoIncomingChoiceUm", NONE);			// 45 指定番号着信選択有無
						eohtlNoInfoMap.put("_050NoPlusUm", NONE);					// 46 ０５０ナンバープラス有無（数字で始まる項目名はSOAPのタグ命名規約でエラーとなるため、頭にアンダーバーを付与）
						eohtlNoInfoMap.put("mwktelKyohiSvcUm", NONE);				// 47 迷惑電話拒否サービス有無
						eohtlNoInfoMap.put("twryoUpplTchiUm", NONE);				// 48 通話料上限通知有無
						eohtlNoInfoMap.put("twdlSohuUm", NONE);						// 49 通話明細送付有無
						eohtlNoInfoMap.put("kokusaiTelStpUm", NONE); 				// 50 国際電話停止有無
						
						// (6-7-2) オプションサービス契約一覧照会
						// サービスIF結果取得(EKK0451A010) (電話)
						CAANMsg[] ekk0351b002CBSMsg1List = null;
						ekk0351b002CBSMsg1List = getEKK0351B002CAANMsg(handle, scCall, param, fixedText, svcKeiNo, svcKeiUcwkNo);
						
						if (null != ekk0351b002CBSMsg1List && ekk0351b002CBSMsg1List.length > 0)
						{
							for (CAANMsg caanMsg2: ekk0351b002CBSMsg1List)
							{
								// オプションサービス契約ステータス
								String opSvcKeiStat = caanMsg2.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
								// 申込明細番号
								String mskmDtlNo = caanMsg2.getString(EKK0351B002CBSMsg1List.MSKM_DTL_NO);
								// オプションサービスコード
								String opSvcCd = caanMsg2.getString(EKK0351B002CBSMsg1List.OP_SVC_CD);
								// オプションサービス契約番号
								String opSvcKeiNo = caanMsg2.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
								
								if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(opSvcKeiStat) 
										|| JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(opSvcKeiStat)) 
										&& mskmDtlNo.equals(dslCnclMskmDtlNoPhone))
								{
									// (6-7-3) EKK0351B002.オプションサービスコード = "B135"(あんしん発着信サービス) の場合：
									if (JKKStrConst.OP_SVC_CD_ANSN_HCS_SVC.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("ansnHcsSvcUm", YES);				// 39 あんしん発着信サービス有無
									}
									
									// (6-7-4) EKK0351B002.オプションサービスコード = "B025"(発信者番号表示) の場合：
									if (JKKStrConst.OP_SVC_CD_HASINSHA_DSP.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("hasinshaNoDspUm", YES);				// 40 発信者番号表示有無
										
										// サービスIF結果取得(EKK0401B001) (電話)
										CAANMsg[] ekk0401b001CBSMsg1List = null;
										ekk0401b001CBSMsg1List = getEKK0401B001CAANMsg(handle, scCall, param, fixedText, opSvcKeiNo);
										
										if (null != ekk0401b001CBSMsg1List && ekk0401b001CBSMsg1List.length > 0)
										{
											// サブオプションサービスコード
											String sbopSvcCd = ekk0401b001CBSMsg1List[0].getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
											// サブオプションサービス契約ステータス
											String opSvcKeiStat2 = ekk0401b001CBSMsg1List[0].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
											// 申込明細番号                  ekk0401b001CBSMsg1List
											String mskmDtlNo2 = ekk0401b001CBSMsg1List[0].getString(EKK0401B001CBSMsg1List.MSKM_DTL_NO);
											
											if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(opSvcKeiStat2) || JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(opSvcKeiStat2)) 
													&& mskmDtlNo2.equals(dslCnclMskmDtlNoPhone))
											{
												// EKK0401B001.サブオプションサービスコード　=　"D08"(非通知着信拒否)
												if (JKKStrConst.CD00137_HITCHI_KYOHI.equals(sbopSvcCd))
												{
													eohtlNoInfoMap.put("hitchiIncmhiUm", YES);				// 41 非通知着信拒否有無
												}
												
											}
										}
									}
									
									// ((6-7-5) EKK0351B002.オプションサービスコード = "B023"(割込電話／複数通話) の場合：
									if (JKKStrConst.OP_SVC_CD_WARKMI_TEL.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("warkmiTelUm", YES);					// 42 割込電話有無
									}
									
									// (6-7-6) EKK0351B002.オプションサービスコード = "B024"(転送電話) の場合：
									if (JKKStrConst.OP_SVC_CD_TNS_TEL.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("tensoTelUm", YES);					// 43 転送電話有無
										
										// サービスIF結果取得(EKK0401B001) (電話)
										CAANMsg[] ekk0401b001CBSMsg1List = null;
										ekk0401b001CBSMsg1List = getEKK0401B001CAANMsg(handle, scCall, param, fixedText, opSvcKeiNo);
										
										if (null != ekk0401b001CBSMsg1List && ekk0401b001CBSMsg1List.length > 0)
										{
											// サブオプションサービスコード
											String sbopSvcCd3 = ekk0401b001CBSMsg1List[0].getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
											// サブオプションサービス契約ステータス
											String opSvcKeiStat3 = ekk0401b001CBSMsg1List[0].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
											// 申込明細番号
											String mskmDtlNo3 = ekk0401b001CBSMsg1List[0].getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO);
											
											if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(opSvcKeiStat3) || JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(opSvcKeiStat3)) 
													&& mskmDtlNo3.equals(dslCnclMskmDtlNoPhone))
											{
												// EKK0401B001.サブオプションサービスコード　=　"D07"(転送電話選択)
												if (JKKStrConst.CD00137_TNS_TEL_CHOICE.equals(sbopSvcCd3))
												{
													eohtlNoInfoMap.put("tensoTelChoiceUm", YES);						// 44 転送電話選択有無
												}
											}
										}
									}
									
									
									// (6-7-7) EKK0351B002.オプションサービスコード = "B027"(指定番号着信選択) の場合：
									if (JKKStrConst.OP_SVC_CD_STINO_INCOM_CHOICE.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("stinoIncomingChoiceUm", YES);					// 45 指定番号着信選択有無
									}
									
									// (6-7-8) EKK0351B002.オプションサービスコード = "B029"(０５０ナンバープラス) の場合：
									if (JKKStrConst.OP_SVC_CD_050_NUMBER_PLUS.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("_050NoPlusUm", YES);								// 46 ０５０ナンバープラス有無（数字で始まる項目名はSOAPのタグ命名規約でエラーとなるため、頭にアンダーバーを付与）
									}
									
									// (6-7-9) EKK0351B002.オプションサービスコード = "B026"(迷惑電話拒否) の場合：
									if (JKKStrConst.OP_SVC_CD_MWKTEL_KYOHI.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("mwktelKyohiSvcUm", YES);						// 47  迷惑電話拒否サービス有無
									}
									
									// (6-7-10) EKK0351B002.オプションサービスコード = "B072"(通話料上限通知) の場合：
									if (JKKStrConst.OP_SVC_CD_TWRYO_UPPL_TCH.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("twryoUpplTchiUm", YES);							// 48  通話料上限通知有無
									}
									
									// (6-7-11) EKK0351B002.オプションサービスコード = "B028"(通話明細送付) の場合：
									if (JKKStrConst.OP_SVC_CD_SEND_CALL_DETAILS.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("twdlSohuUm", YES);								// 49  通話明細送付有無
									}
									
									// (6-7-12) EKK0351B002.オプションサービスコード = "B071"(国際電話利用停止機能) の場合：
									if (JKKStrConst.OP_SVC_CD_STP_INT_CALL.equals(opSvcCd))
									{
										eohtlNoInfoMap.put("kokusaiTelStpUm", YES);							// 50  国際電話停止有無
									}
								}
							}
						}
						// (6-8)eo光電話番号情報設定処理
						eohtlNoList.add(eohtlNoInfoMap);
					}
				}
			}
			// (6-9)eo光電話リスト情報設定処理
			eohtlInfo.put("eohtlNoList", eohtlNoList);
			ccMsg.put("eohtlInfo", eohtlInfo);
		}
		else
		{
			// (6-2)サービス契約関連項目編集処理（契約なし）
			ccMsg.put("eohtlInfo", new HashMap());
		}
	}

	/**
	 * eo光テレビ情報編集処理
	 * <br>
	 */
	@SuppressWarnings("unchecked")
	private void editEOOpticalTV(
		SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param,
		String fixedText,
		Map<String, Object> ccMsg,
		CAANMsg ekk0081A010Tv, 
		String dslCnclMskmDtlNoTv
	) throws Exception
	{
		String pcrsCd = null;
		String pcrsNm = null;
		String svcKeiNo = null;
		
		/**
		 * (7-1)テレビ契約有無判定
		 * 	(3)で取得した
		 * 		サービス契約一意照会結果（テレビ）
		 * 		が未設定の場合、false。
		 * 		上記以外の場合、true。
		 **/
		if (ekk0081A010Tv != null)
		{
			// HashMap：eohtvInfo を作成する。
			HashMap<String, Object> eohtvInfo = new HashMap<String, Object>();
			// ArrayList<HashMap<String, Object>>：eohtvStbList を作成する。
			ArrayList <HashMap <String, Object>> eohtvStbList = new ArrayList <HashMap <String, Object>>();
			
			// サービス契約一意照会結果（テレビ）.料金コースコード
			pcrsCd = ekk0081A010Tv.getString(EKK0081A010CBSMsg1List.PCRS_CD);
			// サービス契約一意照会結果（テレビ）.料金コースコード
			pcrsNm = ekk0081A010Tv.getString(EKK0081A010CBSMsg1List.PCRS_CD_NM);
			// サービス契約一意照会結果（ネット）
			svcKeiNo = ekk0081A010Tv.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
			
			// (7-3)サービス契約関連項目編集処理
			editServiceContracts(handle, scCall, param, fixedText, dslCnclMskmDtlNoTv, pcrsCd, pcrsNm, svcKeiNo, eohtvInfo);
			
			// (7-4)の検索結果をループ処理
			processSearchResult(handle, scCall, param, fixedText, dslCnclMskmDtlNoTv, pcrsCd, pcrsNm, svcKeiNo, eohtvStbList);
			
			// (7-9)eo光テレビ情報設定処理
			// ArrayList<HashMap<String, Object>>：eohtvStbList　を (7-3)で作成したHashMap：eohtvInfo に設定する。
			eohtvInfo.put("eohtvStbList", eohtvStbList);
			// HashMap：eohtvInfo をリクエストパラメーターに設定する。
			ccMsg.put("eohtvInfo", eohtvInfo);
		}
		
		else
		{
			// (7-2)サービス契約関連項目編集処理（契約なし）
			ccMsg.put("eohtvInfo", new HashMap());
		}
	}
	
	private void editMiscellaneousItem(
		SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param,
		String fixedText,
		Map<String, Object> ccMsg,
		String sysid,
		String svcDslYmd, 
		CAANMsg[] lineContractInformation
	) throws Exception
	{
		// (8-1)電気契約有無編集処理
		editElectricalContract(handle, scCall, param, fixedText, ccMsg, sysid, svcDslYmd);
		
		// (8-2)スマートバリュー有無編集処理
		editSmartValue(handle, scCall, param, fixedText, ccMsg, svcDslYmd, lineContractInformation);
		
		// (8-3)NHK団体一括支払有無編集処理
		editNHKCollectivePayment(handle, scCall, param, fixedText, ccMsg, svcDslYmd, lineContractInformation);
	}
	
	/**
	 * サービス契約関連項目編集処理
	 * <br>
	 * @param eohntInfo
	 * @param usedYears
	 * @param pcrsCd
	 * @param pcrsNm
	 */
	private void setServiceContractRelatedItems(HashMap<String, Object> eohntInfo,
			Map<String, Object> ccMsg,
			int usedYears,
			String pcrsCd,
			String pcrsNm)
	{
		// 利用年数
		ccMsg.put("useNensu", usedYears);
		// 料金コースコード
		eohntInfo.put("pcrsCd", pcrsCd);
		// 料金コース名
		eohntInfo.put("pcrsNm", pcrsNm);
	}
	
	/**
	 * ネット割引関連項目編集処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param svcKeiNo
	 * @param eohntInfo
	 * @throws Exception
	 */
	private void editNetDiscount(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String dslCnclMskmDtlNoNet, 
			String dslCnclMskmDtlNoPhone, 
			String svcKeiNo,
			HashMap<String, Object> eohntInfo) throws Exception
	{
		String wribSvcCd = null;
		String wribSvcKeiNo = null;
		String wribSvcKeiStat = null;
		String wribDslCnclOptyCd = null;
		String mskmDtlNo = null;
		String wribSvcKeiAtKeizkSkcd = null;
		
		// サービスIF結果取得(EKK0451B002) 
		CAANMsg[] eKK0451B002CBSMsg1List = null;
		// サービスIF結果取得(EKK0451A010) 
		
		
		// (5-4-1)ネット割引関連項目初期設定
		setupInitNetDiscount(eohntInfo);
		
		// (5-4-2)割引サービス契約一覧照会
		eKK0451B002CBSMsg1List = getEKK0451B002CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
		int length = eKK0451B002CBSMsg1List != null ? eKK0451B002CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0451B002 = eKK0451B002CBSMsg1List[i];
			
			// EKK0451B002.割引サービスコード
			wribSvcCd = eKK0451B002.getString(EKK0451B002CBSMsg1List.WRIB_SVC_CD);
			// EKK0451B002.割引サービス契約番号
			wribSvcKeiNo = eKK0451B002.getString(EKK0451B002CBSMsg1List.WRIB_SVC_KEI_NO);
			
			// (5-4-3) 長割関連項目編集処理
			// EKK0451B002.割引サービスコード　=　"W00000041"（長期継続利用割引）
			if (JKKStrConst.WRIB_SVC_CHOKI_KEIZK_USE_WRIB.equals(wribSvcCd))
			{
				// 割引サービス契約番号をキーに割引サービス契約を取得する。
				CAANMsg[] eKK0451A010CBSMsg1List = getEKK0451A010CAANMsg(handle, scCall, param, fixedText, wribSvcKeiNo);
				
				if (eKK0451A010CBSMsg1List.length > 0)
				{
					// EKK0451A010.割引サービス契約ステータス
					wribSvcKeiStat = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT);
					// EKK0451A010.割引解約キャンセル契機コード
					wribDslCnclOptyCd = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_DSL_CNCL_OPTY_CD);
					// EKK0451A010.申込明細番号
					mskmDtlNo = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.MSKM_DTL_NO);
					// EKK0451A010.割引サービス契約自動継続識別コード
					wribSvcKeiAtKeizkSkcd = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_AT_KEIZK_SKCD);
					
				}
				
				/** EKK0451A010.割引サービス契約ステータス　=　"910"（解約済） または "920"（キャンセル済）
				* かつ
				* EKK0451A010.割引解約キャンセル契機コード　=　"1"（自動適用）
				* かつ
				* EKK0451A010.申込明細番号 ＝  (3)で取得した 解約時申込明細番号（ネット）　または　(3)で取得した 解約時申込明細番号（電話）
				**/
				if ((JKKStrConst.CD00055_DSLZM.equals(wribSvcKeiStat)
						|| JKKStrConst.CD00055_CSLZM.equals(wribSvcKeiStat))
						&& DSL_CNCL_OPTY_CD_1.equals(wribDslCnclOptyCd)
						&& (mskmDtlNo.equals(dslCnclMskmDtlNoNet)
							|| mskmDtlNo.equals(dslCnclMskmDtlNoPhone)))
				{
					// 長割有無
					eohntInfo.put("lenWariUm", YES);
					// 長割自動継続申込有無
					eohntInfo.put("lenWariAtKeizkMskmUm", wribSvcKeiAtKeizkSkcd);
				}
			}
			
			// (5-4-4) セキュリティパック関連項目編集処理
			// EKK0451B002.割引サービスコード　=　"W00000010"（eoセキュリティパック）
			else if (JKKStrConst.WRIB_SVC_CD_SECURITY_PACK.equals(wribSvcCd))
			{
				// 割引サービス契約番号をキーに割引サービス契約を取得する。
				CAANMsg[] eKK0451A010CBSMsg1List = getEKK0451A010CAANMsg(handle, scCall, param, fixedText, wribSvcKeiNo);
				
				if (eKK0451A010CBSMsg1List.length > 0)
				{
					// EKK0451A010.割引サービス契約ステータス
					wribSvcKeiStat = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT);
					// EKK0451A010.割引解約キャンセル契機コード
					wribDslCnclOptyCd = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_DSL_CNCL_OPTY_CD);
					// EKK0451A010.申込明細番号
					mskmDtlNo = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.MSKM_DTL_NO);
					// EKK0451A010.割引サービス契約自動継続識別コード
					wribSvcKeiAtKeizkSkcd = eKK0451A010CBSMsg1List[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_AT_KEIZK_SKCD);
					
				}
				
				/** EKK0451A010.割引サービス契約ステータス　=　"910"（解約済） または "920"（キャンセル済）
					* かつ
				 * EKK0451A010.割引解約キャンセル契機コード　=　"1"（自動適用）
					* かつ
					* EKK0451A010.申込明細番号 ＝  (3)で取得した 解約時申込明細番号（ネット）　または　(3)で取得した 解約時申込明細番号（電話）
				 **/
				if ((JKKStrConst.CD00055_DSLZM.equals(wribSvcKeiStat)
						|| JKKStrConst.CD00055_CSLZM.equals(wribSvcKeiStat))
						&& DSL_CNCL_OPTY_CD_1.equals(wribDslCnclOptyCd)
						&& (mskmDtlNo.equals(dslCnclMskmDtlNoNet) 
						|| mskmDtlNo.equals(dslCnclMskmDtlNoPhone)))
				{
					// ｅｏセキュリティーパック有無
					eohntInfo.put("eoSecurityPackUm", YES);
				}
			}
		}
	}
	
	/**
	 * ネット割引関連項目初期設定
	 * <br>
	 * @param eohntInfo
	 */
	private void setupInitNetDiscount(HashMap<String, Object> eohntInfo)
	{
		// 長割有無
		eohntInfo.put("lenWariUm", NONE);
		// 長割自動継続申込有無
		eohntInfo.put("lenWariAtKeizkMskmUm", EMPTY);
		// ｅｏセキュリティーパック有無
		eohntInfo.put("eoSecurityPackUm", NONE);
	}
	
	private void editNetDevices(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String dslCnclMskmDtlNoNet, 
			String dslCnclMskmDtlNoPhone, 
			String svcKeiNo,
			HashMap<String, Object> eohntInfo) throws Exception
	{
		String[] ghTknkikiModelCdList = null;
		
		String kktkSvcKeiNo = null;
		String kktkSvcKeiStat = null;
		String mskmDtlNo = null;
		String taknkikiSbtCd = null;
		String pcrsCdKktk = null;
		String taknkikiModelCd = null;
		
		// サービスIF結果取得(EKK0341B012)
		CAANMsg[] eKK0341B012CBSMsg1List = null;
		
		// (5-5-1) ネット機器関連項目初期設定
		setupInitNetDevices(eohntInfo);
		
		// (5-5-2) 業務パラメータ管理一意照会
		ghTknkikiModelCdList = getJobParams(handle, scCall, param, fixedText);
		
		// (5-5-3) 機器提供サービス契約一覧照会
		eKK0341B012CBSMsg1List = getEKK0341B012CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
		int length = eKK0341B012CBSMsg1List != null ? eKK0341B012CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0341B012 = eKK0341B012CBSMsg1List[i];
			
			//EKK0341B012.機器提供サービス契約番号
			kktkSvcKeiNo = eKK0341B012.getString(EKK0341B012CBSMsg1List.KKTK_SVC_KEI_NO);
			// EKK0341B012.機器提供サービス契約ステータス
			kktkSvcKeiStat = eKK0341B012.getString(EKK0341B012CBSMsg1List.KKTK_SVC_KEI_STAT);
			// EKK0341B012.申込明細番号
			mskmDtlNo = eKK0341B012.getString(EKK0341B012CBSMsg1List.MSKM_DTL_NO);
			// EKK0341B012.宅内機器種別コード
			taknkikiSbtCd = eKK0341B012.getString(EKK0341B012CBSMsg1List.TAKNKIKI_SBT_CD);
			// EKK0341B012.料金コースコード
			pcrsCdKktk = eKK0341B012.getString(EKK0341B012CBSMsg1List.PCRS_CD_KKTK);
			// EKK0341B012.宅内機器型式コード
			taknkikiModelCd = eKK0341B012.getString(EKK0341B012CBSMsg1List.TAKNKIKI_MODEL_CD);
			
			if ((JKKStrConst.CD00056_STAT_DSLZUMI.equals(kktkSvcKeiStat)
					|| JKKStrConst.CD00056_STAT_CANCELZUMI.equals(kktkSvcKeiStat))
					&& (mskmDtlNo.equals(dslCnclMskmDtlNoNet) 
							|| mskmDtlNo.equals(dslCnclMskmDtlNoPhone)))
			{
				// ANK-4315-00-00 MOD START
				// (5-5-4) EKK0341B012.宅内機器種別コード　=　"R0"（多機能ルーター）,"S0"（ホームゲートウェイ）　の場合
//				if (JKKStrConst.TAKNKIKI_SBT_CD_TAKINORT.equals(taknkikiSbtCd))
				if (JKKStrConst.TAKNKIKI_SBT_CD_TAKINORT.equals(taknkikiSbtCd) || JKKStrConst.TAKNKIKI_SBT_CD_HGW.equals(taknkikiSbtCd))
				// ANK-4315-00-00 MOD END
				{
					setMultifunctionRouter(handle, scCall, param, fixedText, dslCnclMskmDtlNoNet, dslCnclMskmDtlNoPhone, eohntInfo, kktkSvcKeiNo);
				}
				
				/**
				 * (5-5-5)
				 * EKK0341B012.宅内機器種別コード　=　"G0"（ＰＬＣモデム）
				 * かつ　EKK0341B012.料金コースコード　=　"CA2"（eoメッシュWi-Fi）　の場合：
				 */
				else if (JKKStrConst.TAKNKIKI_SBT_CD_PLC.equals(taknkikiSbtCd)
						&& JKKStrConst.CD00134_MESH_WIFI.equals(pcrsCdKktk))
				{
					// ｅｏメッシュＷｉ−Ｆｉ有無
					eohntInfo.put("eoMeshuWifiUm", YES);
				}
				/**
				 * (5-5-6)
				 * EKK0341B012.宅内機器種別コード　=　"G0"（ＰＬＣモデム）
				 * かつ　EKK0341B012.料金コースコード　=　"CA1"（eo無線LAN中継機）　の場合：
				 */
				else if (JKKStrConst.TAKNKIKI_SBT_CD_PLC.equals(taknkikiSbtCd)
						&& JKKStrConst.CD00134_WLR_LAN.equals(pcrsCdKktk))
				{
					// ｅｏ無線ＬＡＮ中継機有無
					eohntInfo.put("eoMlanChkekiUm", YES);
				}
				/**
				 * (5-5-7)
				 * EKK0341B012.宅内機器種別コード　=　"Q0"（IP-STB）
				 * かつ　EKK0341B012.料金コースコード　=　"CA3"（ストリーミングメディアプレーヤー）　の場合：
				 */
				else if (JKKStrConst.TAKNKIKI_SBT_CD_SMP.equals(taknkikiSbtCd)
						&& JKKStrConst.CD00134_SMP.equals(pcrsCdKktk))
				{
					// ストリーミングメディアプレーヤー有無
					eohntInfo.put("smpUm", YES);
				}
				
				/**
				 * 
				 * (5-5-7)
				 * EKK0341B012.宅内機器種別コード　=　"P0"（タブレット）　の場合：
				 * EKK0341B012.宅内機器型式コード　が　(5-5-2)で取得した「ＧＨ宅内機器型式コードリスト」に含まれる場合：
				 */
				else if (JKKStrConst.TAKNKIKI_SBT_CD_TABLET.equals(taknkikiSbtCd))
				{
					if (Arrays.asList(ghTknkikiModelCdList).contains(taknkikiModelCd))
					{
						// GH有無
						eohntInfo.put("ghUm", YES);
					}
					
					else
					{
						// スマートリンクタブレット有無
						eohntInfo.put("smlnTabletUm", YES);
					}
				}
			}
		}
	}
	
	/**
	 * ネット割引関連項目初期設定
	 * <br>
	 * @param eohntInfo
	 */
	private void setupInitNetDevices(HashMap<String, Object> eohntInfo)
	{
		// ｅｏ光多機能ルーター（レンタル）有無
		eohntInfo.put("eohTakinortRentUm", NONE);
		// 無線ルーター機能有無
		eohntInfo.put("musenRouterKinoUm", NONE);
		// ｅｏメッシュＷｉ−Ｆｉ有無
		eohntInfo.put("eoMeshuWifiUm", NONE);
		// ｅｏ無線ＬＡＮ中継機有無
		eohntInfo.put("eoMlanChkekiUm", NONE);
		// ストリーミングメディアプレーヤー有無
		eohntInfo.put("smpUm", NONE);
		// スマートリンクタブレット有無
		eohntInfo.put("smlnTabletUm", NONE);
		// GH有無
		eohntInfo.put("ghUm", NONE);
	}
	
	/**
	 * 業務パラメータ管理一意照会
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Exception
	 */
	private String[] getJobParams(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText) throws Exception
	{
		// サービスIF結果取得(EZM0321A010)
		CAANMsg[] ezm0321a010MsgList = null;
		
		ezm0321a010MsgList = getEZM0321A010CAANMsg(handle, scCall, param, fixedText);
		if (ezm0321a010MsgList != null)
		{
			// 業務パラメータ設定値取得
			String paramSetteValue = ezm0321a010MsgList[0].getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
			
			// カンマ区切り分割し、GH宅内機器型式リストを作成
			return paramSetteValue.split(",");
		}
		
		else
		{
			throw new CCException("業務パラメータ管理にGH宅内機器型式が設定されていません", new Exception());
		}
	}
	/**
	 * 
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param eohntInfo
	 * @param kktkSvcKeiNo
	 * @throws Exception
	 */
	private void setMultifunctionRouter(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String dslCnclMskmDtlNoNet, 
			String dslCnclMskmDtlNoPhone, 
			HashMap<String, Object> eohntInfo,
			String kktkSvcKeiNo) throws Exception
	{
		// サービスIF結果取得(EKK2811B010)
		CAANMsg[] eKK2811B010CBSMsg1List = null;
		
		String pcrsCd = null;
		String mskmDtlNo = null;
		
		// ｅｏ光多機能ルーター（レンタル）有無
		eohntInfo.put("eohTakinortRentUm", YES);
		
		eKK2811B010CBSMsg1List = getEKK2811B010CAANMsg(handle, scCall, param, fixedText, kktkSvcKeiNo);
		int length = eKK2811B010CBSMsg1List != null ? eKK2811B010CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK2811B010 = eKK2811B010CBSMsg1List[i];
			
			// EKK2811B010.料金コースコード
			pcrsCd = eKK2811B010.getString(EKK2811B010CBSMsg1List.PCRS_CD);
			// EKK2811B010.申込明細番号
			mskmDtlNo = eKK2811B010.getString(EKK2811B010CBSMsg1List.MSKM_DTL_NO);
			
			/**
			 * EKK2811B010.料金コースコード　=　"G02"（無線ルーター機能）
			 * 　かつ
			 * EKK2811B010.申込明細番号 = (3)で取得した 解約時申込明細番号（ネット）　または　(3)で取得した 解約時申込明細番号（電話）
			 */
			if (JKKStrConst.CD00134_KKOP_MUSEN.equals(pcrsCd)
					&& (mskmDtlNo.equals(dslCnclMskmDtlNoNet)
						|| mskmDtlNo.equals(dslCnclMskmDtlNoPhone)))
			{
				// 無線ルーター機能有無
				eohntInfo.put("musenRouterKinoUm", YES);
			}
		}
	}
	
	/**
	 * ネットオプション関連項目編集処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param svcKeiNo
	 * @param eohntInfo
	 * @throws Exception
	 */
	private void editNetOptions(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String dslCnclMskmDtlNoNet, 
			String svcKeiNo,
			HashMap<String, Object> eohntInfo) throws Exception
	{
		String opSvcKeiStat = null;
		String mskmDtlNo = null;
		String opSvcCd = null;
		String opSvcKeiNo = null;
		
		// サービスIF結果取得(EKK0351B002)
		CAANMsg[] eKK0351B002CBSMsg1List = null;
		
		// (5-6-1) ネットオプション関連項目初期設定
		setupInitNetOptions(eohntInfo);
		
		// (5-6-2) オプションサービス契約一覧照会
		eKK0351B002CBSMsg1List = getEKK0351B002CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
		int length = eKK0351B002CBSMsg1List != null ? eKK0351B002CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0351B002 = eKK0351B002CBSMsg1List[i];
			
			// EKK0351B002.オプションサービス契約ステータス
			opSvcKeiStat = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
			// EKK0351B002.申込明細番号
			mskmDtlNo = eKK0351B002.getString(EKK0351B002CBSMsg1List.MSKM_DTL_NO);
			// EKK0351B002.オプションサービスコード
			opSvcCd = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_CD);
			// EKK0351B002.オプションサービス契約番号
			opSvcKeiNo = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
			
			/**
			 * EKK0351B002.オプションサービス契約ステータス　=　"910"（解約済） または "920"（キャンセル済）
			 * かつ
			 * EKK0351B002.申込明細番号 = (3)で取得した 解約時申込明細番号（ネット）　または　(3)で取得した 解約時申込明細番号（電話）
			 **/
			if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(opSvcKeiStat)
					|| JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(opSvcKeiStat))
					&& mskmDtlNo.equals(dslCnclMskmDtlNoNet) )
			{
				// (5-6-3) EKK0351B002.オプションサービスコード = "B077"(スマートリンクプレミアム) の場合：
				if (JKKStrConst.OP_SVC_CD_SMARTLINK_PREMIUM.equals(opSvcCd))
				{
					// スマートリンクプレミアム有無
					eohntInfo.put("smlnPremiumUm", YES);
				}
				
				// (5-6-4) EKK0351B002.オプションサービスコード = "B021"(リモートサポートプラス) の場合：
				else if (JKKStrConst.OP_SVC_CD_RMTSPRT_PLUS.equals(opSvcCd))
				{
					// リモートサポートプラス有無
					eohntInfo.put("rmtsprtPlusUm", YES);
				}
				
				// (5-6-5) EKK0351B002.オプションサービスコード = "B131"(インターネットサギウォール) の場合：
				else if (JKKStrConst.OP_SVC_CD_INETSGWL.equals(opSvcCd))
				{
					// インターネットサギウォール有無
					eohntInfo.put("inetsgwlUm", YES);
				}
				
// IT1-2022-0000013対応 20220301 星野 DEL START
//				// (5-6-6) EKK0351B002.オプションサービスコード = "B016"(有害サイトブロック) の場合：
//				else if (JKKStrConst.OP_SVC_CD_B016.equals(opSvcCd))
//				{
//					// 有害サイトブロック有無
//					eohntInfo.put("ygsiteblckUm", YES);
//				}
// IT1-2022-0000013対応 20220301 星野 DEL END
				
				// (5-6-7) EKK0351B002.オプションサービスコード = "B004"(固定グローバルＩＰアドレス) の場合：
				else if (JKKStrConst.OP_SVC_CD_B004.equals(opSvcCd))
				{
					// 固定IPアドレス有無
					eohntInfo.put("fixipadUm", YES);
				}
				
				// (5-6-8) EKK0351B002.オプションサービスコード = "B133"(ＰＣプラン) の場合：
				else if (JKKStrConst.OP_SVC_CD_PC_PLAN.equals(opSvcCd))
				{
					setPCWidePlan(handle, scCall, param, fixedText, dslCnclMskmDtlNoNet, eohntInfo, opSvcKeiNo);
				}
				
				// (5-6-9) EKK0351B002.オプションサービスコード = "B134"(ＴＶプラン) の場合：
				else if (JKKStrConst.OP_SVC_CD_TV_PLAN.equals(opSvcCd))
				{
					// TVプラン有無
					eohntInfo.put("tvPlanUm", YES);
				}
			}
		}
	}
	
	/**
	 * ネットオプション関連項目初期設定
	 * <br>
	 * @param eohntInfo
	 */
	private void setupInitNetOptions(HashMap<String, Object> eohntInfo)
	{
		// スマートリンクプレミアム有無
		eohntInfo.put("smlnPremiumUm", NONE);
		// リモートサポートプラス有無
		eohntInfo.put("rmtsprtPlusUm", NONE);
		// インターネットサギウォール有無
		eohntInfo.put("inetsgwlUm", NONE);
// IT1-2022-0000013対応 20220301 星野 DEL START
//		// 有害サイトブロック有無
//		eohntInfo.put("ygsiteblckUm", NONE);
// IT1-2022-0000013対応 20220301 星野 DEL END
		// 固定IPアドレス有無
		eohntInfo.put("fixipadUm", NONE);
		// PCプラン有無
		eohntInfo.put("pcPlanUm", NONE);
		// PCワイドプラン有無
		eohntInfo.put("pcWidePlanUm", NONE);
		// TVプラン有無
		eohntInfo.put("tvPlanUm", NONE);
	}
	
	/**
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param eohntInfo
	 * @param opSvcKeiNo
	 * @throws Exception
	 */
	private void setPCWidePlan(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText, 
			String dslCnclMskmDtlNoNet, 
			HashMap<String, Object> eohntInfo,
			String opSvcKeiNo) throws Exception
	{
		// サービスIF結果取得(EKK0401B001)
		CAANMsg[] eKK0401B001CBSMsg1List = null;
		
		String sbopSvcCd = null;
		String sbopSvcKeiStat = null;
		String mskmDtlNo = null;
		
		// PCワイドプラン有無
		eohntInfo.put("pcPlanUm", YES);
		
		eKK0401B001CBSMsg1List = getEKK0401B001CAANMsg(handle, scCall, param, fixedText, opSvcKeiNo);
		int length = eKK0401B001CBSMsg1List != null ? eKK0401B001CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0401B001 = eKK0401B001CBSMsg1List[i];
			
			// EKK0401B001.サブオプションサービスコード
			sbopSvcCd = eKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
			// EKK0401B001.サブオプションサービスコード
			sbopSvcKeiStat = eKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
			// EKK0401B001.サブオプションサービスコード
			mskmDtlNo = eKK0401B001.getString(EKK0401B001CBSMsg1List.MSKM_DTL_NO);
			
			/**
			 * EKK0401B001.サブオプションサービスコード　=　"D12"(ＰＣワイドプラン)
			 * かつ
			 * EKK0401B001.サブオプションサービス契約ステータス　=　"910"（解約済） または "920"（キャンセル済）
			 * かつ
			 * EKK0401B001.申込明細番号 = (3)で取得した 解約時申込明細番号（ネット）　または　(3)で取得した 解約時申込明細番号（電話）
			 **/
			if (JKKStrConst.CD00137_PC_WIDE_PLAN.equals(sbopSvcCd)
					&& (JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(sbopSvcKeiStat)
							|| JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(sbopSvcKeiStat))
					&& mskmDtlNo.equals(dslCnclMskmDtlNoNet) 
			)
			{
				// PCワイドプラン有無
				eohntInfo.put("pcWidePlanUm", YES);
			}
		}
	}
	
	/**
	 * ネットその他項目編集処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param sysid
	 * @param svcDslYmd
	 * @param eohntInfo
	 * @throws Exception
	 */
	private void editNetOthers(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String sysid,
			String svcDslYmd,
			HashMap<String, Object> eohntInfo) throws Exception
	{
		// ANK-4346-00-00 DEL START
		// (5-7-1) コンテンツ関連項目編集処理
		//setMaxSecurityVersion(handle, scCall, param, fixedText, sysid, svcDslYmd,  eohntInfo);
		// ANK-4346-00-00 DEL END
		
		// (5-7-2) メールアドレス設定処理
		setEmailAddress(handle, scCall, param, fixedText, sysid, eohntInfo);
	}
	
	// ANK-4346-00-00 DEL START
	///**
	// * コンテンツ関連項目編集処理
	// * <br>
	// * @param handle
	// * @param scCall
	// * @param param
	// * @param fixedText
	// * @param ccMsg
	// * @param sysid
	// * @param svcDslYmd
	// * @param eohntInfo
	// * @throws Exception
	// */
	//private void setMaxSecurityVersion(SessionHandle handle,
	//		ServiceComponentRequestInvoker scCall,
	//		IRequestParameterReadWrite param,
	//		String fixedText,
	//		String sysid,
	//		String svcDslYmd,
	//		HashMap<String, Object> eohntInfo) throws Exception
	//{
	//	String contSvcCd = null;
	//	String contKeiEndDtm = null;
	//	
	//	// サービスIF結果取得(ECN0021B008)
	//	CAANMsg[] eCN0021B008CBSMsg1List = null;
	//	
	//	setMaxSecurityInitProc(eohntInfo);
	//	
	//	eCN0021B008CBSMsg1List = getECN0021B008CAANMsg(handle, scCall, param, fixedText, sysid);
	//	int length = eCN0021B008CBSMsg1List != null ? eCN0021B008CBSMsg1List.length : 0;
	//	for (int i = 0; i < length; i++)
	//	{
	//		CAANMsg ECN0021B008 = eCN0021B008CBSMsg1List[i];
	//		
	//		// ECN0021B008.コンテンツサービスコード
	//		contSvcCd = ECN0021B008.getString(ECN0021B008CBSMsg1List.CONT_SVC_CD);
	//		// ECN0021B008.コンテンツ契約終了年月日時分秒
	//		contKeiEndDtm = ECN0021B008.getString(ECN0021B008CBSMsg1List.CONT_KEI_END_DTM);
	//		// リクエストパラメータ.サービス終了日 の前月初日(YYYYMM) + "01000000"(DDHHMMSS)
	//		svcDslYmd = JPCDateUtil.addMonth(svcDslYmd, -1).substring(0, 6) + "01000000";
	//		
	//		/**
	//		 * ECN0021B008.コンテンツサービスコード = "0069"(ウイルスバスター マルチデバイス 月額版 for eo)
	//		 * かつ
	//		 * ECN0021B008.コンテンツ契約終了年月日時分秒 ≧ リクエストパラメータ.サービス終了日 の前月初日(YYYYMMDD) + "000000"(HHMMSS)
	//		 */
	//		if (JKKStrConst.CONT_SVC_CD_VIRUSBUSTER.equals(contSvcCd)
	//				&& (contKeiEndDtm.compareTo(svcDslYmd) >= 0))
	//		{
	//			// ウィルスバスター月額版有無
	//			eohntInfo.put("virusbusterGtgkBanUm", YES);
	//		}
	//// IT1-2022-0000013対応 20220301 星野 ADD START
	//		/**
	//		 * ECN0021B008.コンテンツサービスコード = "0068"(有害Webフィルター)
	//		 * かつ
	//		 * ECN0021B008.コンテンツ契約終了年月日時分秒 ≧ リクエストパラメータ.サービス終了日 の前月初日(YYYYMMDD) + "000000"(HHMMSS)
	//		 */
	//		else if (JKKStrConst.CONT_SVC_CD_YUGAI_WEB_FLT.equals(contSvcCd)
	//				&& (contKeiEndDtm.compareTo(svcDslYmd) >= 0))
	//		{
	//			// 有害サイトブロック有無
	//			eohntInfo.put("ygsiteblckUm", YES);
	//		}
	//// IT1-2022-0000013対応 20220301 星野 ADD END
	//	}
	//}
	//
	///**
	// * 
	// * @param eohntInfo
	// */
	//private void setMaxSecurityInitProc(HashMap<String, Object> eohntInfo)
	//{
	//	// ウィルスバスター月額版有無
	//	eohntInfo.put("virusbusterGtgkBanUm", NONE);
	//	// IT1-2022-0000013対応 20220301 星野 ADD START
	//	// 有害サイトブロック有無
	//	eohntInfo.put("ygsiteblckUm", NONE);
	//	// IT1-2022-0000013対応 20220301 星野 ADD END
	//}
	// ANK-4346-00-00 DEL START
	
	/**
	 * メールアドレス設定処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param sysid
	 * @param eohntInfo
	 * @throws Exception
	 */
	private void setEmailAddress(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String sysid,
			HashMap<String, Object> eohntInfo) throws Exception
	{
		String emailAddress = null;
		
		setEmailAddressInitProc(eohntInfo);
		
		// サービスIF結果取得(ECK0201B001)
		CAANMsg[] eCK0201B001CBSMsg1List = getECK0201B001CAANMsg(handle, scCall, param, fixedText, sysid);
		if(eCK0201B001CBSMsg1List==null)
		{
			return;
		}
		for(CAANMsg eck0201B001 : eCK0201B001CBSMsg1List)
		{
			// 連絡先分類コード = "1"(回線系連絡先) の場合
			if( JKKStrConst.CD00871_KAISEN_RRS.equals(eck0201B001.getString(ECK0201B001CBSMsg1List.RRKS_BUNRUI_CD)) )
			{
				// ECK0201B001.メールアドレス
				emailAddress =eck0201B001.getString(ECK0201B001CBSMsg1List.MLAD);
				
				// メールアドレス
				eohntInfo.put("mlad", emailAddress);
			}
		}
	}
	
	/**
	 * 
	 * @param eohntInfo
	 */
	private void setEmailAddressInitProc(HashMap<String, Object> eohntInfo)
	{
		// メールアドレス
		eohntInfo.put("mlad", EMPTY);
	}
	
	/**
	 * サービス契約関連項目編集処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param pcrsCd
	 * @param pcrsNm
	 * @param svcKeiNo
	 * @param eohtvInfo
	 * @throws Exception
	 */
	private void editServiceContracts(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String dslCnclMskmDtlNoTv, 
			String pcrsCd,
			String pcrsNm,
			String svcKeiNo,
			HashMap<String, Object> eohtvInfo) throws Exception
	{
		String opSvcKeiStat = null;
		String mskmDtlNo = null;
		String opSvcKeiNo = null;
		
		// サービスIF結果取得(EKK0351B002)
		CAANMsg[] eKK0351B002CBSMsg1List = null;
		
		// eohtvInfo に下記のとおり編集する。
		// 料金コースコード
		eohtvInfo.put("pcrsCd", pcrsCd);
		// 料金コース名
		eohtvInfo.put("pcrsNm", pcrsNm);
		
		// eohtvInfo に下記のとおり初期設定する。
		setupIniteohTVInfor(eohtvInfo);
		
		// 以下のサービスIFを実行し、オプションサービス契約を取得する。
		eKK0351B002CBSMsg1List = getEKK0351B002CAANMsgTV(handle, scCall, param, fixedText, svcKeiNo);
		int length = eKK0351B002CBSMsg1List != null ? eKK0351B002CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0351B002 = eKK0351B002CBSMsg1List[i];
			
			// EKK0351B002.オプションサービス契約ステータス
			opSvcKeiStat = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
			// EKK0351B002.申込明細番号
			mskmDtlNo = eKK0351B002.getString(EKK0351B002CBSMsg1List.MSKM_DTL_NO);
			
			opSvcKeiNo = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO);
			
			/**
			 * EKK0351B002.オプションサービス契約ステータス　=　"910"（解約済） または "920"（キャンセル済）
			 * かつ
			 * EKK0351B002.申込明細番号 = (3)で取得した 解約時申込明細番号（テレビ）
			 **/
			if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(opSvcKeiStat)
					|| JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(opSvcKeiStat))
					&& mskmDtlNo.equals(dslCnclMskmDtlNoTv))
			{
				
				// サービスIF結果取得(EKK0381A010)
				CAANMsg[] eKK0381A010CBSMsg1List = null;
				
				// 以下のサービスIFを実行し、オプションサービス契約を取得する。
				eKK0381A010CBSMsg1List = getEKK0381A010CAANMsg(handle, scCall, param, fixedText, opSvcKeiNo);
				
				if (null != eKK0381A010CBSMsg1List && eKK0381A010CBSMsg1List.length > 0)
				{
					// ケーブルガイド申込数
					String cableGuideMskmCnt = eKK0381A010CBSMsg1List[0].getString(EKK0381A010CBSMsg1List.CABLE_GUIDE_MSKM_CNT);
					
					eohtvInfo.put("cableGuideMskmCnt", cableGuideMskmCnt);	// 54 ケーブルガイド申込数
				}
			}
		}
	}
	
	/**
	 * 
	 * @param eohtvInfo
	 */
	private void setupIniteohTVInfor(HashMap<String, Object> eohtvInfo)
	{
		// ケーブルガイド申込数
		eohtvInfo.put("cableGuideMskmCnt", EMPTY);
	}
	
	/**
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param pcrsCd
	 * @param pcrsNm
	 * @param svcKeiNo
	 * @throws Exception
	 */
	private void processSearchResult(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String dslCnclMskmDtlNoTv, 
			String pcrsCd,
			String pcrsNm,
			String svcKeiNo,
			ArrayList <HashMap <String, Object>> eohtvStbList) throws Exception
	{
		String svcKeiUcwkStat = null;
		String mskmDtlNo = null;
		String svcKeiUcwkNo = null;
		
		// サービスIF結果取得(EKK0161B004)
		CAANMsg[] eKK0161B004CBSMsg1List = null;
		
		//以下のサービスIFを実行し、サービス契約内訳を取得する。
		eKK0161B004CBSMsg1List = getServiceContactList(handle, scCall, param, fixedText, svcKeiNo);
		int length = eKK0161B004CBSMsg1List != null ? eKK0161B004CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0161B004 = eKK0161B004CBSMsg1List[i];
			
			// EKK0161B004.サービス契約内訳ステータス
			svcKeiUcwkStat = eKK0161B004.getString(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			// EKK0161B004.申込明細番号
			mskmDtlNo = eKK0161B004.getString(EKK0161B004CBSMsg1List.MSKM_DTL_NO);
			
			svcKeiUcwkNo = eKK0161B004.getString(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			
			/**
			 * (7-5)処理対象判定
			 * 		EKK0161B004.サービス契約内訳ステータス　=　"910"（解約済） または "920"（キャンセル済）
			 * 		かつ
			 * 		EKK0161B004.申込明細番号 = (3)で取得した 解約時申込明細番号（テレビ）
			 * 		の場合、true。
			 * 		上記以外の場合、false。
			 **/
			if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(svcKeiUcwkStat)
					|| JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(svcKeiUcwkStat))
					&& mskmDtlNo.equals(dslCnclMskmDtlNoTv))
			{
				/**
				 * (7-6)STB関連項目編集処理
				 * 		HashMap：eohtvStbInfo を作成する。
				 **/
				HashMap<String, Object> eohtvStbInfo = new HashMap<String, Object>();
				eohtvStbInfo.put("pcrsCd", EMPTY);
				eohtvStbInfo.put("pcrsNm", EMPTY);
				eohtvStbInfo.put("taknkikiModelCd", EMPTY);
				
				//以下のサービスIFを実行し、サービス契約内訳を取得する。
				CAANMsg[] eKK0161A010BSMsg1List = getEKK0161A010CAANMsg(handle, scCall, param, fixedText, svcKeiUcwkNo);
				
				if (null != eKK0161A010BSMsg1List && eKK0161A010BSMsg1List.length > 0) 
				{
					// 料金コースコード
					String stbPcrsCd = eKK0161A010BSMsg1List[0].getString(EKK0161A010CBSMsg1List.PCRS_CD);
					// 料金コース名
					String stbPcrsCdNm = eKK0161A010BSMsg1List[0].getString(EKK0161A010CBSMsg1List.PCRS_CD_NM);
					
					// eohtvStbInfo に下記のとおり編集する。
					// 料金コースコード
					eohtvStbInfo.put("pcrsCd", stbPcrsCd);
					// 料金コース名
					eohtvStbInfo.put("pcrsNm", stbPcrsCdNm);
					
// ANK-4173-01-00対応 20220221 星野 ADD START
					// 機器提供サービス契約一覧照会(サービス契約内訳番号)
					CAANMsg[] ekk0341B501CBSMsg1List = getEKK0341B501CAANMsg(handle, scCall, param, fixedText, svcKeiUcwkNo);
					if( null != ekk0341B501CBSMsg1List && ekk0341B501CBSMsg1List.length > 0 )
					{
						for(CAANMsg ekk0341B501 : ekk0341B501CBSMsg1List)
						{
							// 宅内機器種別コード = A0
							// 機器提供サービス契約ステータス　=　"910"（解約済） または "920"（キャンセル済）
							// かつ 申込明細番号 = (3)で取得した 解約時申込明細番号（テレビ）
							String taknKikiSbtCd = ekk0341B501.getString(EKK0341B501CBSMsg1List.TAKNKIKI_SBT_CD);
							String kktkSvcKeiStat = ekk0341B501.getString(EKK0341B501CBSMsg1List.KKTK_SVC_KEI_STAT);
							String mskmDtlNoKktk = ekk0341B501.getString(EKK0341B501CBSMsg1List.MSKM_DTL_NO);
							
							if(
								JKKStrConst.TAKNKIKI_SBT_CD_STB.equals(taknKikiSbtCd)
								&& ( JKKStrConst.CD00056_STAT_DSLZUMI.equals(kktkSvcKeiStat)
									|| JKKStrConst.CD00056_STAT_CANCELZUMI.equals(kktkSvcKeiStat)
								)
								&& mskmDtlNoKktk.equals(dslCnclMskmDtlNoTv)
							)
							{
								// 宅内機器型式コード
								eohtvStbInfo.put("taknkikiModelCd", ekk0341B501.getString(EKK0341B501CBSMsg1List.TAKNKIKI_MODEL_CD));
							}
							
						}
					}
// ANK-4173-01-00対応 20220221 星野 ADD END
				}
				
				
				// (7-7)テレビオプション関連項目編集処理
				editTVOptions(handle, scCall, param, fixedText, dslCnclMskmDtlNoTv, svcKeiNo, svcKeiUcwkNo, eohtvStbInfo);
				
				// (7-8)eo光STB情報設定処理
				eohtvStbList.add(eohtvStbInfo);
			}
		}
	}
	
	/**
	 * (7-4)EKK0161B004 サービス契約内訳一覧照会
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @return
	 * @throws Exception
	 */
	private CAANMsg[] getServiceContactList(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		return getEKK0161B004CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
	}
	
	/**
	 * (7-7)テレビオプション関連項目編集処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @throws Exception
	 */
	private void editTVOptions(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String dslCnclMskmDtlNoTv, 
			String svcKeiNo,
			String svcKeiUcwkNo,
			HashMap<String, Object> eohtvStbInfo) throws Exception
	{
		String opSvcKeiStat = null;
		String mskmDtlNo = null;
		String opSvcCd = null;
		String opSvcCdNm = null;
		
		// サービスIF結果取得(EKK0351B002)
		CAANMsg[] eKK0351B002CBSMsg1List = null;
		
		// ArrayList<HashMap<String, Object>>：opChannelList を作成する。
		ArrayList <HashMap <String, Object>> opChannelList = new ArrayList <HashMap <String, Object>>();
		
		// 以下のサービスIFを実行し、オプションサービス契約を取得する。
		eKK0351B002CBSMsg1List = getEKK0351B002CAANMsg(handle, scCall, param, fixedText, svcKeiNo, svcKeiUcwkNo);
		int length = eKK0351B002CBSMsg1List != null ? eKK0351B002CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0351B002 = eKK0351B002CBSMsg1List[i];
			
			// EKK0351B002.オプションサービス契約ステータス
			opSvcKeiStat = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
			// EKK0351B002.申込明細番号
			mskmDtlNo = eKK0351B002.getString(EKK0351B002CBSMsg1List.MSKM_DTL_NO);
			// EKK0351B002.オプションサービスコード
			opSvcCd = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_CD);
			// EKK0351B002.オプションサービスコード名称
			opSvcCdNm = eKK0351B002.getString(EKK0351B002CBSMsg1List.OP_SVC_CD_NM);
			
			/**
			 * EKK0351B002.オプションサービス契約ステータス　=　"910"（解約済） または "920"（キャンセル済）
			 * かつ
			 * EKK0351B002.申込明細番号 = (3)で取得した 解約時申込明細番号（テレビ）
			 **/
			if ((JKKStrConst.OP_SVC_STAT_DSLZUMI.equals(opSvcKeiStat)
					|| JKKStrConst.OP_SVC_STAT_CANCELZUMI.equals(opSvcKeiStat))
					&& mskmDtlNo.equals(dslCnclMskmDtlNoTv))
			{
				// HashMap：opChannelOpSvcInfo を作成する。
				HashMap<String, Object> opChannelOpSvcInfo = new HashMap<String, Object>();
				
				// opChannelOpSvcInfo に下記のとおり編集する。
				// オプションチャンネル_オプションサービスコード
				opChannelOpSvcInfo.put("opChannelOpSvcCd", opSvcCd);
				// オプションチャンネル_オプションサービス名
				opChannelOpSvcInfo.put("opChannelOpSvcNm", opSvcCdNm);
				
				// 編集したHashMap：opChannelOpSvcInfoを　ArrayList<HashMap<String, Object>>：opChannelList　に追加する。
				opChannelList.add(opChannelOpSvcInfo);
			}
		}
		
		// 繰り返し処理完了後、ArrayList<HashMap<String, Object>>：opChannelList　を(7-6)で作成したHashMap：eohtvStbInfo　に設定する。
		eohtvStbInfo.put("opChannelList", opChannelList);
	}
	
	/**
	 * 電気契約有無編集処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param sysid
	 * @throws Exception
	 */
	private void editElectricalContract(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			Map<String, Object> ccMsg,
			String sysid, 
			String svcDslYmd
	) throws Exception
	{
		String svcKeiStat = null;
		String svcKeiNo = null;
		String svcKeiEndYmd = null;
		int svcKeiEndYmdDiff = 0;
		
		// サービスIF結果取得(EKK0081B004)
		CAANMsg[] eKK0081B004CBSMsg1List = null;
		
		// 下記のとおりリクエストパラメータ出力項目を初期設定する。
		ccMsg.put("elKeiUm", NONE);
		
		eKK0081B004CBSMsg1List = getEKK0081B004CAANMsg(handle, scCall, param, fixedText, sysid);
		int length = eKK0081B004CBSMsg1List != null ? eKK0081B004CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0081B004 = eKK0081B004CBSMsg1List[i];
			
			// EKK0081B004.サービス契約ステータス
			svcKeiStat = eKK0081B004.getString(EKK0081B004CBSMsg1List.SVC_KEI_STAT);
			// EKK0081B004.サービス契約番号
			svcKeiNo = eKK0081B004.getString(EKK0081B004CBSMsg1List.SVC_KEI_NO);
			
			if (JKKStrConst.CD00037_DSL_ZM.equals(svcKeiStat))
			{
				//  EKK0081A010.サービス終了年月日
				svcKeiEndYmd = getServiceEndYmd(handle, scCall, param, fixedText, svcKeiNo);
				// EKK0081A010.サービス終了年月日　の年月 - リクエストパラメータ.サービス終了日　の年月
				svcKeiEndYmdDiff = JPCUtilCommon.subtractMonth(svcDslYmd, svcKeiEndYmd);
				
				//  ( リクエストパラメータ.サービス終了日　の年月 - EKK0081A010.サービス終了年月日　の年月 )
				if (svcKeiEndYmdDiff == 0
						|| svcKeiEndYmdDiff == 1)
				{
					// 電気契約有無
					ccMsg.put("elKeiUm", YES);
				}
			}
		}
	}
	
	/**
	 * EKK0081A010.サービス終了年月日　の年月
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @return
	 * @throws Exception
	 */
	private String getServiceEndYmd(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo) throws Exception
	{
		// サービスIF結果取得(EKK0081A010)
		 CAANMsg eKK0081A010CBSMsg1 = getEKK0081A010CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
		
		// EKK0081A010.サービス終了年月日　の年月
		 String svcKeiEndYmd = eKK0081A010CBSMsg1.getString(EKK0081A010CBSMsg1List.SVC_ENDYMD);
		
		return svcKeiEndYmd;
	}
	
	/**
	 * スマートバリュー有無編集処理
	 * <br>
	 */
	private void editSmartValue(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			Map<String, Object> ccMsg,
			String svcDslYmd, CAANMsg[] lineContractInformation) throws Exception
	{
		String svcKeiNoNet = null;
		String svcKeiNoPhone = null;
		
		// 下記のとおりリクエストパラメータ出力項目を初期設定する。
		initRequestParam(ccMsg);
		
		// サービス契約一意照会結果（ネット）.サービス契約番号
		if(lineContractInformation[SVC_NET] != null)
		{
			svcKeiNoNet = lineContractInformation[SVC_NET].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		}
		// サービス契約一意照会結果（電話）.サービス契約番号
		if(lineContractInformation[SVC_PHONE] != null)
		{
			svcKeiNoPhone = lineContractInformation[SVC_PHONE].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		}
		
		// 下記のとおりリクエストパラメータ出力項目を編集する。
		setSmartValue(handle, scCall, param, fixedText,ccMsg, svcKeiNoNet, svcKeiNoPhone, svcDslYmd);
	}
	
	/**
	 * 下記のとおりリクエストパラメータ出力項目を初期設定する。
	 * <br>
	 * @param ccMsg
	 */
	private void initRequestParam(Map<String, Object> ccMsg)
	{
		// スマートバリュー有無
		ccMsg.put("smtvlUm", NONE);
	}
	
	/**
	 * 下記のとおりリクエストパラメータ出力項目を編集する。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param svcKeiNoNet
	 * @param svcKeiNoPhone
	 * @param svcDslYmd
	 * @throws Exception
	 */
	private void setSmartValue(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			Map<String, Object> ccMsg,
			String svcKeiNoNet,
			String svcKeiNoPhone,
			String svcDslYmd) throws Exception
	{
		// ネット・電話いずれかでスマートバリューがあれば有設定
		if( hasSmartValue(handle, scCall, param, fixedText, ccMsg, svcDslYmd, svcKeiNoNet)
			|| hasSmartValue(handle, scCall, param, fixedText, ccMsg, svcDslYmd, svcKeiNoPhone)
		)
		{
			// スマートバリュー有無
			ccMsg.put("smtvlUm", YES);
		}
	}

	private boolean hasSmartValue(
		SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param, 
		String fixedText,
		Map<String, Object> ccMsg, 
		String svcDslYmd, 
		String svcKeiNo
	) throws Exception 
	{
		if(JKKStringUtil.isNullSpace(svcKeiNo))
		{
			return false;
		}
		
		// EKK2441B003
		CAANMsg[] eKK2441B003CBSMsg1List = getEKK2441B003CAANMsg(handle, scCall, param, fixedText, svcKeiNo);
		
		if (eKK2441B003CBSMsg1List.length > 0)
		{
			// EKK2441B003.他事業者割引契約解約年月日　の年月 （ネット）
			String tajgsWribKeiDslYmd = eKK2441B003CBSMsg1List[0].getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_DSL_YMD);
			//  リクエストパラメータ.サービス終了日 　の年月 - 　EKK2441B003.他事業者割引契約解約年月日　の年月 （ネット）
			int dateDiff = JPCUtilCommon.subtractMonth(svcDslYmd, tajgsWribKeiDslYmd);
			
			// ( リクエストパラメータ.サービス終了日 　の年月 - 　EKK2441B003.他事業者割引契約解約年月日　の年月 （ネット） )　≦　1 の場合：
			if (dateDiff <= 1)
			{
				// スマートバリュー有
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * NHK団体一括支払有無編集処理
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param svcDslYmd
	 * @param eKK0081A010CBSMsg1ListNet
	 * @param eKK0081A010CBSMsg1ListPhone
	 * @param eKK0081A010CBSMsg1ListTV
	 * @throws Exception
	 */
	private void editNHKCollectivePayment(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			Map<String, Object> ccMsg,
			String svcDslYmd, 
			CAANMsg[] lineContractInformation) throws Exception
	{
		String svcKeiNoNet = null;
		String svcKeiNoPhone = null;
		String svcKeiNoTV = null;
		
		// 下記のとおりリクエストパラメータ出力項目を初期設定する。
		initRequestParam2(ccMsg);
		
		// サービス契約一意照会結果（ネット）.サービス契約番号
		if(lineContractInformation[SVC_NET] != null)
		{
			svcKeiNoNet = lineContractInformation[SVC_NET].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		}
		// サービス契約一意照会結果（電話）.サービス契約番号
		if(lineContractInformation[SVC_PHONE] != null)
		{
			svcKeiNoPhone = lineContractInformation[SVC_PHONE].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		}
		// サービス契約一意照会結果（テレビ）.サービス契約番号
		if(lineContractInformation[SVC_TV] != null)
		{
			svcKeiNoTV  = lineContractInformation[SVC_TV].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		}
		
		// 下記のとおりリクエストパラメータ出力項目を編集する。
		setNHKGroupPayment(handle, scCall, param, fixedText,ccMsg, svcKeiNoNet, svcKeiNoPhone, svcKeiNoTV, svcDslYmd);
	}
	
	/**
	 * <br>
	 * @param ccMsg
	 */
	private void initRequestParam2(Map<String, Object> ccMsg)
	{
		// NHK団体一括支払有無
		ccMsg.put("nhkGrpIktPayUm", NONE);
	}
	
	/**
	 * 下記のとおりリクエストパラメータ出力項目を編集する。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param svcKeiNoNet
	 * @param svcKeiNoPhone
	 * @param svcKeiNoTV
	 * @param svcDslYmd
	 * @throws Exception
	 */
	private void setNHKGroupPayment(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			Map<String, Object> ccMsg,
			String svcKeiNoNet,
			String svcKeiNoPhone,
			String svcKeiNoTV,
			String svcDslYmd) throws Exception
	{
		String seikyKeiNoNet = null;
		String seikyKeiNoPhone = null;
		String seikyKeiNoTV = null;
		
		
		if(!JKKStringUtil.isNullSpace(svcKeiNoNet))
		{
			// サービスIF結果取得(EKK0321B005)（ネット）
			CAANMsg[] eKK0321B005CBSMsg1ListNet = getEKK0321B005CAANMsg(handle, scCall, param, fixedText, svcKeiNoNet);
			
			if (eKK0321B005CBSMsg1ListNet.length > 0)
			{
				// 請求契約番号（ネット）
				seikyKeiNoNet = eKK0321B005CBSMsg1ListNet[0].getString(EKK0321B005CBSMsg1List.SEIKY_KEI_NO);
				
				processNHKGroupPayment(handle, scCall, param, fixedText, ccMsg, seikyKeiNoNet, svcDslYmd);
			}
		}
		
		if(!JKKStringUtil.isNullSpace(svcKeiNoPhone))
		{
			// サービスIF結果取得(EKK0321B005)（電話）
			CAANMsg[] eKK0321B005CBSMsg1ListPhone = null;
			// EKK0321B005（電話）
			eKK0321B005CBSMsg1ListPhone = getEKK0321B005CAANMsg(handle, scCall, param, fixedText, svcKeiNoPhone);
			if (eKK0321B005CBSMsg1ListPhone.length > 0)
			{
				// 請求契約番号（電話）
				seikyKeiNoPhone = eKK0321B005CBSMsg1ListPhone[0].getString(EKK0321B005CBSMsg1List.SEIKY_KEI_NO);
				
				processNHKGroupPayment(handle, scCall, param, fixedText, ccMsg, seikyKeiNoPhone, svcDslYmd);
			}
		}
		
		if(!JKKStringUtil.isNullSpace(svcKeiNoTV))
		{
			// サービスIF結果取得(EKK0321B005)（テレビ）
			CAANMsg[] eKK0321B005CBSMsg1ListTV = null;
			// EKK0321B005（テレビ）
			eKK0321B005CBSMsg1ListTV = getEKK0321B005CAANMsg(handle, scCall, param, fixedText, svcKeiNoTV);
			if (eKK0321B005CBSMsg1ListTV.length > 0)
			{
				// 請求契約番号（テレビ）
				seikyKeiNoTV = eKK0321B005CBSMsg1ListTV[0].getString(EKK0321B005CBSMsg1List.SEIKY_KEI_NO);
				
				processNHKGroupPayment(handle, scCall, param, fixedText, ccMsg, seikyKeiNoTV, svcDslYmd);
			}
		}
	}
	
	/**
	 * 
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param ccMsg サービスIF
	 * @param seikyKeiNo
	 * @param svcDslYmd
	 * @throws Exception
	 */
	private void processNHKGroupPayment(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			Map<String, Object> ccMsg,
			String seikyKeiNo,
			String svcDslYmd) throws Exception
	{
		String seiopsvcCd = null;
		String svcEndymd = null;
		int dateDiff = 0;
		
		// サービスIF結果取得(EKK0441B002)（ネット）
		CAANMsg[] eKK0441B002CBSMsg1List = null;
		
		// EKK0441B002
		eKK0441B002CBSMsg1List = getEKK0441B002CAANMsg(handle, scCall, param, fixedText, seikyKeiNo);
		int length = eKK0441B002CBSMsg1List != null ? eKK0441B002CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKK0441B002 = eKK0441B002CBSMsg1List[i];
			
			// EKK0441B002.請求オプションサービスコード
			seiopsvcCd = eKK0441B002.getString(EKK0441B002CBSMsg1List.SEIOPSVC_CD);
			// EKK0441B002.サービス終了年月日　の年月
			svcEndymd = eKK0441B002.getString(EKK0441B002CBSMsg1List.SVC_ENDYMD);
			
			dateDiff = JPCUtilCommon.subtractMonth(svcDslYmd, svcEndymd);
			
			if (JKKStrConst.CD00131_NHKDTIKSH.equals(seiopsvcCd)
					&& dateDiff <= 1)
			{
				ccMsg.put("nhkGrpIktPayUm", YES);
			}
		}
		
	}
	
	/**
	 * 単項目チェックを行い、チェック結果を返しま。
	 * @param ccMsg サービスIF
	 * @return チェックの判定
	 * @throws Exception
	 */
	private boolean checkUnitParam(Map<String, Object> ccMsg) throws Exception
	{
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
		
		String sysId = (String) ccMsg.get(SYSID);
		String svcKeiKaisenUcwkNo = (String) ccMsg.get(SVC_KEI_KAISEN_UCWK_NO);
		String svcDslYmd = (String) ccMsg.get(SVC_DSL_YMD);
		
		if (JKKStringUtil.isNullBlank(sysId)) 
		{
			errList.add(getReqErrInfMap(SYSID));
		}
		
		else if (!HalfCharCheck.isEnNumber1Check (sysId))
		{
			errList.add(getFormErrInfMap(SYSID, sysId));
		} 
		
		else if (!LengthCheck.isLength1Check(sysId, 10))
		{
			errList.add(getLenErrInfMap(SYSID, sysId));
		}
		
		if (JKKStringUtil.isNullBlank(svcKeiKaisenUcwkNo)) 
		{
			errList.add(getReqErrInfMap(SVC_KEI_KAISEN_UCWK_NO));
		}
		
		else if (!HalfCharCheck.isEnNumber1Check (svcKeiKaisenUcwkNo))
		{
			errList.add(getFormErrInfMap(SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo));
		} 
		
		else if (!LengthCheck.isLength1Check(svcKeiKaisenUcwkNo, 12))
		{
			errList.add(getLenErrInfMap(SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo));
		}
		
		if (JKKStringUtil.isNullBlank(svcDslYmd)) 
		{
			errList.add(getReqErrInfMap(SVC_DSL_YMD));
		}
		
		else if (!LengthCheck.isLength1Check(svcDslYmd, 8))
		{
			errList.add(getLenErrInfMap(SVC_DSL_YMD, svcDslYmd));
		}
		
		else if (!DatetimeCheck.isDateCheck(svcDslYmd))
		{
			errList.add(getFormErrInfMap(SVC_DSL_YMD, svcDslYmd));
		} 
		
		if (errList.size() > 0) 
		{
			ccMsg.put(ERROR_INFO, errList);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * <br>
	 * @return 必須エラーマップ
	 */
	private Map<String, String> getReqErrInfMap(String itemName)
	{
		Map<String, String> returnMap = new HashMap<String, String>();
		
		// エラーメッセージ設定
		String errMessage = itemName;
		
		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1001);
		returnMap.put(ERROR_MESSAGE, errMessage);
		
		return returnMap;
	}
	
	/**
	 * 単項目チェックの属性エラーマップ作成メソッドです。
	 * 
	 * @param itemName
	 *            項目名
	 * @param itemValue
	 *            項目値
	 * @return Map<String, String>
	 */
	private Map<String, String> getFormErrInfMap(String itemName,
			String itemValue) {
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JKKStrConst.COLON + itemValue;

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1002);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}
	
	/**
	 * 単項目チェックの桁数エラーマップ作成メソッドです。
	 * 
	 * @param itemName
	 *            項目名
	 * @param itemValue
	 *            項目値
	 * @return
	 */
	private Map<String, String> getLenErrInfMap(String itemName,
			String itemValue) {
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JKKStrConst.COLON + itemValue;

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1003);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}
	
	/**
	 * 数値結果チェックを実行し、チェック結果を返します。
	 * <br>
	 * @param ccMsg
	 * @param eKK0081A010CBSMsg1ListNet
	 * @param eKK0081A010CBSMsg1ListPhone
	 * @param eKK0081A010CBSMsg1ListTV
	 * @return チェックの判定
	 * @throws Exception
	 */
	private boolean checkGetNumResult(Map<String, Object> ccMsg, 
			CAANMsg[] lineContractInformation)
	{
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		if (null == lineContractInformation[SVC_NET] && null == lineContractInformation[SVC_PHONE] && null == lineContractInformation[SVC_TV])
		{
			errList.add(getNumResultErrInfMap());
		}

		if (errList.size() > 0)
		{
			ccMsg.put(ERROR_INFO, errList);
			return false;
		}

		return true;
	}
	
	/**
	 *
	 * <br>
	 * @return 属性エラーマップ
	 */
	private Map<String, String> getNumResultErrInfMap()
	{
		Map<String, String> returnMap = new HashMap<String, String>();
		
		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_2001);
		returnMap.put(ERROR_MESSAGE, EMPTY);

		return returnMap;
	}
	

}
