/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSvcKeiNaiyoDtlShokaiOpsCC
*	ソースファイル名：JKKSvcKeiNaiyoDtlShokaiOpsCC.java
*	作成者			：FJ)吉田
*	日付			：2019年04月08日
*＜機能概要＞
*	サービス契約内容詳細照会（オペレータ支援）CCの共通コンポーネントクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v42.00.00	2019/04/08	FJ)吉田		【ANK-3593-00-00】オペレータ支援対応に伴うeo顧客機能改修（お客さまカルテ）
*	v42.00.01	2019/05/30	FJ)吉田		【ANK-3593-00-00】オペレータ支援対応に伴うeo顧客機能改修（お客さまカルテ）
*	v45.00.00	2019/09/27	FJ)後藤		【ANK-3758-00-00】解約情報取得対応
*	v47.00.00	2019/11/01	FJ)後藤		【ANK-3766-00-00】営業チャネルでの既契約者対応
*	v49.00.00	2020/04/21	FJ)坂本		【ANK-3831-00-00】オペレータ支援向けAPI・画面機能変更(2020年5月下旬リリース)
*	v50.00.00	2020/06/09	FJ)大島		【ANK-3862-02-00】【WEB電話オプション外出し対応】050番号返却対応
*	v50.01.00	2020/06/01	FJ)中原		【ANK-3754-00-00】トビラフォン対応
*	v51.00.00	2020/10/29	FJ)謝		【ANK-3927-00-00】オペレータ支援向けAPI機能変更(2020年12月中旬リリース)
*	v53.00.00 	2021/05/12	GDC)ミコ		【ANK-4030-00-00】オペレータ支援向けAPI機能変更（2021年6月）
*   v65.00.00	2023/02/10	FJ)小竹		【ANK-4346-00-00】【eo定期】CCMG再構築対応
*   v73.00.00	2024/08/09	GDC)v.auditor	【ANK-4427-00-00】NTT卸対応（STEP1）-機能改修
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
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.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
//ANK-4346-00-00 DEL START
//import eo.ejb.cbs.cbsmsg.ECN0021B008CBSMsg;
//import eo.ejb.cbs.cbsmsg.ECN0021B008CBSMsg1List;
//ANK-4346-00-00 DEL END
import eo.ejb.cbs.cbsmsg.EKK0351B011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B011CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B014CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B014CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0441B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451B040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B040CBSMsg1List;

public class JKKSvcKeiNaiyoDtlShokaiOpsCC extends AbstractCommonComponent{

	// ----------
	// TemplateID
	// ----------
	/** TamplateID：EKK0451B040_割引サービス契約一覧照会（オペレータ支援） */
	private final String TEMPLATE_ID_EKK0451B040 = "EKK0451B040";
	// ANK-3758-00-00 MOD START
	///** TamplateID：EKK0351B011_オプションサービス契約一覧照会（割引用） */
	//private final String TEMPLATE_ID_EKK0351B011 = "EKK0351B011";
	/** TamplateID：EKK0351B011_オプションサービス契約一覧照会（オペレーター支援） */
	private final String TEMPLATE_ID_EKK0351B014 = "EKK0351B014";
	// ANK-3758-00-00 MOD END
// ANK-4346-00-00 DEL START
//	/** TamplateID：ECN0021B008_コンテンツ契約一覧照会(オペレータ支援) */
//	private final String TEMPLATE_ID_ECN0021B008 = "ECN0021B008";
// ANK-4346-00-00 DEL END
	/** TamplateID：ECN0021B008_コンテンツ契約一覧照会(オペレータ支援) */
	private final String TEMPLATE_ID_EKK0441B005 = "EKK0441B005";
	
	
	// ------------------------
	// CCパラメータ
	// ------------------------
	/** CCパラメータ：ボディ情報 */
	private final String CC_PARAM_BODY_INFO = "BODY_INFO";
	/** CCパラメータ：エラー情報 */
	private final String CC_PARAM_ERROR_INFO = "ERROR_INFO";
	
	// ------------------------
	// リクエストパラメータ定数(使用しない定数は定義していない) 
	// ------------------------
	
	/** パラメータ：エラーコード */
	private final String PARAM_ERRCODE = "errCode";
	/** パラメータ：エラーメッセージ */
	private final String PARAM_ERRMESSAGE = "errMessage";
	
	/** パラメータ：SYSID */
	private final String PARAM_SYSID = "sysid";
	/** パラメータ：回線単位契約情報リスト */
	private final String PARAM_KISN_TANI_KEI_IF_LIST = "kisn_tani_kei_if_list";
	/** パラメータ：サービス契約回線内訳番号 */
	private final String PARAM_SVC_KEI_KAISEN_UCWK_NO = "svc_kei_kaisen_ucwk_no";
	/** パラメータ：回線内サービス契約番号リスト */
	private final String PARAM_KISN_NAI_SVC_KEI_NO_LIST = "kisn_nai_svc_kei_no_list";
	/** パラメータ：サービス契約番号 */
	private final String PARAM_SVC_KEI_NO = "svc_kei_no";
	/** パラメータ：回線内請求契約番号リスト */
	private final String PARAM_KISN_NAI_SEIKY_KEI_NO_LIST = "kisn_nai_seiky_kei_no_list";
	/** パラメータ：請求契約番号 */
	private final String PARAM_SEIKY_KEI_NO = "seiky_kei_no";
	
	/** パラメータ：オプションサービス情報リスト */
	private final String PARAM_OP_SVC_IF_LIST = "op_svc_if_list";
	/** パラメータ：オプションサービス契約番号 */
	private final String PARAM_OP_SVC_KEI_NO = "op_svc_kei_no";
	/** パラメータ：オプションサービスコード */
	private final String PARAM_OP_SVC_CD = "op_svc_cd";
	/** パラメータ：オプションサービス名称 */
	private final String PARAM_OP_SVC_NM = "op_svc_nm";
	/** パラメータ：オプションサービス契約ステータス */
	private final String PARAM_OP_SVC_KEI_STAT = "op_svc_kei_stat";
	// ANK-3758-00-00 ADD START
	/** パラメータ：オプションサービス解約年月日 */
	private final String PARAM_OP_SVC_DSL_YMD = "op_svc_dsl_ymd";
	/** パラメータ：オプションサービス解約理由コード */
	private final String PARAM_OP_SVC_DLRE_CD = "op_svc_dlre_cd";
	// ANK-3758-00-00 ADD END
	// ANK-3766-00-00 ADD START
	/** パラメータ： サービス契約内訳番号*/
	private final String PARAM_OP_SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";
	/** パラメータ： 通話料指定額到達通知指定金額*/
	private final String PARAM_TWRYO_STIAM_TTU_TCHI_STIAM = "twryo_stiam_ttu_tchi_stiam";
	/** パラメータ： メールアドレス*/
	private final String PARAM_MLAD = "mlad";
	// ANK-3766-00-00 ADD END
// ANK-3831-00-00 ADD START
	/** パラメータ： 初期POPIDパスワード*/
	private final String PARAM_SHK_POP_ID_PWD = "shk_pop_id_pwd";
// ANK-3831-00-00 ADD END
// ANK-3754-00-00 ADD START
	/** パラメータ： トビラフォンID*/
	private final String PARAM_TOBILAPH_ID = "tobilaph_id";
// ANK-3754-00-00 ADD END
// ANK-3927-00-00 ADD START
	/** パラメータ：オプションサービス開始年月日 */
	private final String PARAM_OP_SVC_STAYMD = "op_svc_staymd";
	/** パラメータ：オプションサービス終了年月日 */
	private final String PARAM_OP_SVC_ENDYMD = "op_svc_endymd";
	/** パラメータ：オプションサービス課金開始年月日 */
	private final String PARAM_OP_SVC_CHRG_STAYMD = "op_svc_chrg_staymd";
	/** パラメータ：オプションサービス課金終了年月日 */
	private final String PARAM_OP_SVC_CHRG_ENDYMD = "op_svc_chrg_endymd";
	/** パラメータ：オプション料金プランコード */
	private final String PARAM_OP_PPLAN_CD = "op_pplan_cd";
	/** パラメータ：オプション料金プラン名 */
	private final String PARAM_OP_PPLAN_NM = "op_pplan_nm";
	/** パラメータ：オプションプラン開始年月日 */
	private final String PARAM_OP_PLAN_STAYMD = "op_plan_staymd";
	/** パラメータ：オプションプラン終了年月日 */
	private final String PARAM_OP_PLAN_ENDYMD = "op_plan_endymd";
	/** パラメータ：オプションプラン課金開始年月日 */
	private final String PARAM_OP_PLAN_CHRG_STAYMD = "op_plan_chrg_staymd";
	/** パラメータ：オプションプラン課金終了年月日 */
	private final String PARAM_OP_PLAN_CHRG_ENDYMD = "op_plan_chrg_endymd";
	/** パラメータ：オプション違約金発生コード */
	private final String PARAM_OP_PNLTY_HASSEI_CD = "op_pnlty_hassei_cd";
	/** パラメータ：オプション回復年月日 */
	private final String PARAM_OP_KAIHK_YMD = "op_kaihk_ymd";
// ANK-3927-00-00 ADD END
	// ANK-3758-00-00 ADD START
	/** パラメータ：サブオプションサービス情報リスト */
	private final String PARAM_SBOP_SVC_IF_LIST = "sbop_svc_if_list";
	/** パラメータ：サブオプションサービス契約番号 */
	private final String PARAM_SBOP_SVC_KEI_NO = "sbop_svc_kei_no";
	/** パラメータ：サブオプションサービスコード */
	private final String PARAM_SBOP_SVC_CD = "sbop_svc_cd";
	/** パラメータ：サブオプションサービス名称 */
	private final String PARAM_SBOP_SVC_NM = "sbop_svc_nm";
	/** パラメータ：サブオプションサービス契約ステータス */
	private final String PARAM_SBOP_SVC_KEI_STAT = "sbop_svc_kei_stat";
	/** パラメータ：サブオプションサービス解約年月日 */
	private final String PARAM_SBOP_SVC_DSL_YMD = "sbop_svc_dsl_ymd";
	/** パラメータ：サブオプションサービス解約理由コード */
	private final String PARAM_SBOP_SVC_DLRE_CD = "sbop_svc_dlre_cd";
	/** パラメータ：追加容量 */
	private final String PARAM_SBOP_SVC_ADD_CAPA = "add_capa";
	// ANK-3758-00-00 ADD END
// ANK-3831-00-00 ADD START
	/** パラメータ： メールエイリアス*/
	private final String PARAM_ML_ALIAS = "ml_alias";
// ANK-3831-00-00 ADD END
// ANK-3927-00-00 ADD START
	/** パラメータ：サブオプションサービス開始年月日 */
	private final String PARAM_SBOP_SVC_STAYMD = "sbop_svc_staymd";
	/** パラメータ：サブオプションサービス終了年月日 */
	private final String PARAM_SBOP_SVC_ENDYMD = "sbop_svc_endymd";
	/** パラメータ：サブオプションサービス課金開始年月日 */
	private final String PARAM_SBOP_SVC_CHRG_STAYMD = "sbop_svc_chrg_staymd";
	/** パラメータ：サブオプションサービス課金終了年月日 */
	private final String PARAM_SBOP_SVC_CHRG_ENDYMD = "sbop_svc_chrg_endymd";
	/** パラメータ：サブオプション料金プランコード */
	private final String PARAM_SBOP_PPLAN_CD = "sbop_pplan_cd";
	/** パラメータ：サブオプション料金プラン名 */
	private final String PARAM_SBOP_PPLAN_NM = "sbop_pplan_nm";
	/** パラメータ：サブオプションプラン開始年月日 */
	private final String PARAM_SBOP_PLAN_STAYMD = "sbop_plan_staymd";
	/** パラメータ：サブオプションプラン終了年月日 */
	private final String PARAM_SBOP_PLAN_ENDYMD = "sbop_plan_endymd";
	/** パラメータ：サブオプションプラン課金開始年月日 */
	private final String PARAM_SBOP_PLAN_CHRG_STAYMD = "sbop_plan_chrg_staymd";
	/** パラメータ：サブオプションプラン課金終了年月日 */
	private final String PARAM_SBOP_PLAN_CHRG_ENDYMD = "sbop_plan_chrg_endymd";
	/** パラメータ：サブオプション違約金発生コード */
	private final String PARAM_SBOP_PNLTY_HASSEI_CD = "sbop_pnlty_hassei_cd";
	/** パラメータ：サブオプション回復年月日 */
	private final String PARAM_SBOP_KAIHK_YMD = "sbop_kaihk_ymd";
// ANK-3927-00-00 ADD END
	/** パラメータ：割引サービス情報リスト */
	private final String PARAM_WRIB_SVC_IF_LIST = "wrib_svc_if_list";
	/** パラメータ：割引サービス契約番号 */
	private final String PARAM_WRIB_SVC_KEI_NO = "wrib_svc_kei_no";
	/** パラメータ：割引サービスコード */
	private final String PARAM_WRIB_SVC_CD = "wrib_svc_cd";
	/** パラメータ：割引サービス名称 */
	private final String PARAM_WRIB_SVC_NM = "wrib_svc_nm";
	/** パラメータ：割引サービス契約ステータス */
	private final String PARAM_WRIB_SVC_KEI_STAT = "wrib_svc_kei_stat";
	// ANK-3758-00-00 ADD START
	/** パラメータ：割引サービス解約年月日 */
	private final String PARAM_WRIB_SVC_DSL_YMD = "wrib_svc_dsl_ymd";
	/** パラメータ：割引サービス解約理由コード */
	private final String PARAM_WRIB_SVC_DLRE_CD = "wrib_svc_dlre_cd";
	// ANK-3758-00-00 ADD END
	
	// ANK-3766-00-00 ADD START
	/** パラメータ：サービス契約内訳番号 */
	private final String PARAM_WRIB_SVC_KEI_UCWK_NO = "svc_kei_ucwk_no";
	// ANK-3766-00-00 ADD END
// ANK-3927-00-00 ADD START
	/** パラメータ：申込起算年月日 */
	private final String PARAM_MSKM_KISAN_YMD = "mskm_kisan_ymd";
	/** パラメータ：割引サービス開始年月日 */
	private final String PARAM_WRIB_SVC_STAYMD = "wrib_svc_staymd";
	/** パラメータ：割引サービス終了年月日 */
	private final String PARAM_WRIB_SVC_ENDYMD = "wrib_svc_endymd";
	/** パラメータ：割引サービス課金開始年月日 */
	private final String PARAM_WRIB_SVC_CHRG_STAYMD = "wrib_svc_chrg_staymd";
	/** パラメータ：割引サービス課金終了年月日 */
	private final String PARAM_WRIB_SVC_CHRG_ENDYMD = "wrib_svc_chrg_endymd";
	/** パラメータ：割引料金プランコード */
	private final String PARAM_WRIB_PPLAN_CD = "wrib_pplan_cd";
	/** パラメータ：割引料金プラン名 */
	private final String PARAM_WRIB_PPLAN_NM = "wrib_pplan_nm";
	/** パラメータ：割引プラン開始年月日 */
	private final String PARAM_WRIB_PLAN_STAYMD = "wrib_plan_staymd";
	/** パラメータ：割引プラン終了年月日 */
	private final String PARAM_WRIB_PLAN_ENDYMD = "wrib_plan_endymd";
	/** パラメータ：割引プラン課金開始年月日 */
	private final String PARAM_WRIB_PLAN_CHRG_STAYMD = "wrib_plan_chrg_staymd";
	/** パラメータ：割引プラン課金終了年月日 */
	private final String PARAM_WRIB_PLAN_CHRG_ENDYMD = "wrib_plan_chrg_endymd";
	/** パラメータ：割引違約金発生コード */
	private final String PARAM_WRIB_PNLTY_HASSEI_CD = "wrib_pnlty_hassei_cd";
	/** パラメータ：割引回復年月日 */
	private final String PARAM_WRIB_KAIHK_YMD = "wrib_kaihk_ymd";
// ANK-3927-00-00 ADD END
	
	/** パラメータ：請求オプションサービス情報リスト */
	private final String PARAM_SEIOP_SVC_IF_LIST = "seiop_svc_if_list";
	/** パラメータ：請求オプションサービス契約番号 */
	private final String PARAM_SEIOPSVC_KEI_NO = "seiopsvc_kei_no";
	/** パラメータ：請求オプションサービスコード */
	private final String PARAM_SEIOPSVC_CD = "seiopsvc_cd";
	/** パラメータ：請求オプションサービス名称 */
	private final String PARAM_SEIOPSVC_NM = "seiopsvc_nm";
	/** パラメータ：請求オプションサービス契約ステータス */
	private final String PARAM_SEIOPSVC_KEI_STAT = "seiopsvc_kei_stat";
	// ANK-3758-00-00 ADD START
	/** パラメータ：請求オプションサービス解約年月日 */
	private final String PARAM_SEIOPSVC_DSL_YMD = "seiopsvc_dsl_ymd";
	/** パラメータ：請求オプションサービス解約理由コード */
	private final String PARAM_SEIOPSVC_DLRE_CD = "seiopsvc_dlre_cd";
	// ANK-3758-00-00 ADD END
	
// ANK-4346-00-00 DEL START
//	/** パラメータ：コンテンツ契約情報リスト */
//	private final String PARAM_CONT_KEI_IF_LIST = "cont_kei_if_list";
//	/** パラメータ：コンテンツ契約番号 */
//	private final String PARAM_CONT_KEI_NO = "cont_kei_no";
//	/** パラメータ：コンテンツサービスコード */
//	private final String PARAM_CONT_SVC_CD = "cont_svc_cd";
//	/** パラメータ：コンテンツサービス名称 */
//	private final String PARAM_CONT_SVC_NM = "cont_svc_nm";
//	/** パラメータ：コンテンツ支払方法コード */
//	private final String PARAM_CONT_PAYWAY_CD = "cont_payway_cd";
//	/** パラメータ：コンテンツ支払方法名称 */
//	private final String PARAM_CONT_PAYWAY_NM = "cont_payway_nm";
//	// ANK-3758-00-00 ADD START
//	/** パラメータ：コンテンツ契約終了年月日時分秒 */
//	private final String PARAM_CONT_KEI_END_DTM = "cont_kei_end_dtm";
//	/** パラメータ：コンテンツ契約状態コード */
//	private final String PARAM_CONT_KEI_STAT_CD = "cont_kei_stat_cd";
//	// ANK-3758-00-00 ADD END
// ANK-4346-00-00 DEL END
	// ANK-3862-02-00 ADD START
	/** 050オプション電話番号 */
	private final String PARAM_N_050_OP_TELNO = "n_050_op_telno";
	// ANK-3862-02-00 ADD END
	
	// ----------
	// エラー定数
	// ----------
	/** エラーコード */
	public static final String ERROR_CODE = "errCode";
	/** エラーメッセージ */
	public static final String ERROR_MESSAGE = "errMessage";
	/** リターンメッセージ取得キー */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	/** リターンメッセージの書式指定文字列 */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	/** エラー項目接尾辞 */
	private static final String ERRITEM_SUFFIX = "_err";
	
	// ----------
	// 内部定数
	// ----------
// ANK-4346-00-00 DEL START
//	/** コンテンツサービスコード：eoアプリマーケット */
//	private static final String CONT_SVC_CD_EOAPLMARKET = "0053";
// ANK-4346-00-00 DEL END
	
	// ANK-4030-00-00 ADD START
	/** オプション利用開始日 */
	private static final String OP_SVC_USE_STA_YMD = "op_svc_use_sta_ymd";
	
	/** オプション利用終了予定日 */
	private static final String OP_USE_END_RSYMD = "op_use_end_rsymd";
	
	/** ケーブルガイド申込数 */
	private static final String CABLE_GUIDE_MSKM_CNT = "cable_guide_mskm_cnt";
	
	// ANK-4427-00-00 ADD START
	/** eo光type N電話番号 */
	private static final String TYPEN_TELNO = "typen_telno";
	// ANK-4427-00-00 ADD END
	
	/** サブオプション利用開始日 */
	private static final String SBOP_SVC_USE_STA_YMD = "sbop_svc_use_sta_ymd";
	
	/** サブオプション利用終了予定日 */
	private static final String SBOP_USE_END_RSYMD = "sbop_use_end_rsymd";
	// ANK-4030-00-00 ADD END
	
	/**
	 * サービス契約内容詳細照会（オペレータ支援）を行う。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return IRequestParameterReadWrite
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite searchSvcKeiDtlOps(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ------------
		// CCマップ取得
		// ------------
		// サービス契約内容詳細照会（オペレータ支援）CCマップの取得
		Map<String, Object> ccMsg = (Map<String, Object>)param.getData(fixedText);
		
		// ------------------
		// 各種エラーチェック
		// ------------------
		// 単項目チェック
		if (!unitErrorChk(ccMsg))
		{
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return param;
		}
		
		// サービス契約内容詳細照会メイン処理
		getSvcKeiDtl(handle, param, fixedText, ccMsg);
		
		return param;
	}
	
	/**
	 * 単項目エラーチェックを行います。
	 * 
	 * @param ccMsg 
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private boolean unitErrorChk(Map<String, Object> ccMsg)
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
		String itemValue = null;
		List<Map<String, Object>> kisnTaniKeiIfList = null;
		Map<String, Object> kisnTaniKeiIfMap = null;
		
		// SYSID
		itemValue = (String)ccMsg.get(PARAM_SYSID);
		// 必須チェック
		if (JKKStringUtil.isNullBlank(itemValue))
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap());
			setErrorList(ccMsg, errList);
			return false;
		}
		// 属性チェック
		else if (!HalfCharCheck.isEnNumber1Check(itemValue))
		{
			// 属性チェックエラー
			errList.add(getFormErrInfMap());
			setErrorList(ccMsg, errList);
			return false;
		}
		// 桁数チェック
		else if (!LengthCheck.isLength1Check(itemValue, 10))
		{
			// 桁数チェックエラー
			errList.add(getLenErrInfMap());
			setErrorList(ccMsg, errList);
			return false;
		}
		
		// 回線単位契約情報リスト
		kisnTaniKeiIfList = (List<Map<String, Object>>) ccMsg.get(PARAM_KISN_TANI_KEI_IF_LIST);
		
		for (int listcnt = 0; listcnt < kisnTaniKeiIfList.size(); listcnt++)
		{
			// 回線単位契約情報
			kisnTaniKeiIfMap = kisnTaniKeiIfList.get(listcnt);
			
			// サービス契約回線内訳番号
			itemValue = (String)kisnTaniKeiIfMap.get(PARAM_SVC_KEI_KAISEN_UCWK_NO);
			// 必須チェック
			if (JKKStringUtil.isNullBlank(itemValue))
			{
				// 必須チェックエラー
				errList.add(getReqErrInfMap());
				setErrorList(ccMsg, errList);
				return false;
			}
			// 属性チェック
			else if (!HalfCharCheck.isEnNumber1Check(itemValue))
			{
				// 属性チェックエラー
				errList.add(getFormErrInfMap());
				setErrorList(ccMsg, errList);
				return false;
			}
			// 桁数チェック
			else if (!LengthCheck.isLength1Check(itemValue, 12))
			{
				// 桁数チェックエラー
				errList.add(getLenErrInfMap());
				setErrorList(ccMsg, errList);
				return false;
			}
			
			// 回線内サービス契約番号リスト
			List<Map<String,Object>> kisnNaiSvcKeiNoList = (List<Map<String, Object>>) kisnTaniKeiIfList.get(listcnt).get(PARAM_KISN_NAI_SVC_KEI_NO_LIST);
			
			for (int dtlListcnt = 0; dtlListcnt < kisnNaiSvcKeiNoList.size(); dtlListcnt++)
			{
				// 回線内サービス契約番号マップ
				Map<String,Object> kisnNaiSvcKeiNoMap = kisnNaiSvcKeiNoList.get(dtlListcnt);
				// サービス契約番号
				itemValue = (String)kisnNaiSvcKeiNoMap.get(PARAM_SVC_KEI_NO);
				// 値が入っていなければエラーチェックしない
				if (JKKStringUtil.isNullBlank(itemValue))
				{
					continue;
				}
				// 属性チェック
				else if (!HalfCharCheck.isEnNumber1Check(itemValue))
				{
					// 属性チェックエラー
					errList.add(getFormErrInfMap());
					setErrorList(ccMsg, errList);
					return false;
				}
				// 桁数チェック
				else if (!LengthCheck.isLength1Check(itemValue, 10))
				{
					// 桁数チェックエラー
					errList.add(getLenErrInfMap());
					setErrorList(ccMsg, errList);
					return false;
				}
			}
		}
		
		return true;
	}
	
	/**
	 * サービス契約内容詳細照会（オペレータ支援）メイン処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void getSvcKeiDtl(SessionHandle handle,IRequestParameterReadWrite param, String fixedText, Map<String, Object> ccMsg) throws Throwable
	{
		// 取得データ無フラグ
		boolean noDataFlg = true;
		
		// ----------------------------
		// 回線単位契約情報リストの作成
		// ----------------------------
		// 回線単位契約情報リスト
		List<Map<String, Object>> kisnTaniKeiIfList = (List<Map<String, Object>>)ccMsg.get(PARAM_KISN_TANI_KEI_IF_LIST);
		
		for(int listcnt = 0; listcnt < kisnTaniKeiIfList.size(); listcnt++)
		{
			// 回線内サービス契約番号リスト
			List<Map<String,Object>> kisnNaiSvcKeiNoList = (List<Map<String, Object>>) kisnTaniKeiIfList.get(listcnt).get(PARAM_KISN_NAI_SVC_KEI_NO_LIST);
			
			for(int dtlListcnt = 0; dtlListcnt < kisnNaiSvcKeiNoList.size(); dtlListcnt++)
			{
				// 回線内サービス契約番号マップ
				Map<String,Object> kisnNaiSvcKeiNoMap = kisnNaiSvcKeiNoList.get(dtlListcnt);
				// 回線内サービス契約番号マップからサービス契約番号を取得する
				String svcKeiNo = (String) kisnNaiSvcKeiNoMap.get(PARAM_SVC_KEI_NO);
				
				// オプションサービス情報リストの作成
				List<Map<String, Object>> opSvcIfList = getOpSvcIfList(handle, param, fixedText, ccMsg, svcKeiNo);
				
				// 割引サービス情報リストの作成
				List<Map<String, Object>> wribSvcIfList = getWribSvcIfList(handle, param, fixedText, ccMsg, svcKeiNo);
				
				// データが取得できている場合は取得データ無フラグを変更
				if (opSvcIfList.size() > 0 ) 
				{
					noDataFlg = false;
				}
				else
				{
					// サービス契約番号が空の場合、
					// あるいは、データが存在しなかった場合
					// 割引サービス情報のマップ
					Map<String, Object> opSvcIfMap = new HashMap<String, Object>();
					
					// オプションサービス契約番号
					opSvcIfMap.put(PARAM_OP_SVC_KEI_NO, "");
					// オプションサービスコード
					opSvcIfMap.put(PARAM_OP_SVC_CD, "");
					// オプションサービス名称
					opSvcIfMap.put(PARAM_OP_SVC_NM, "");
					// オプションサービス契約ステータス
					opSvcIfMap.put(PARAM_OP_SVC_KEI_STAT, "");
					// オプションサービス解約年月日
					opSvcIfMap.put(PARAM_OP_SVC_DSL_YMD, "");
					// オプションサービス解約理由コード
					opSvcIfMap.put(PARAM_OP_SVC_DLRE_CD, "");
					// ANK-3766-00-00 ADD START
					// サービス契約内訳番号
					opSvcIfMap.put(PARAM_OP_SVC_KEI_UCWK_NO, "");
					// 通話料指定額到達通知指定金額
					opSvcIfMap.put(PARAM_TWRYO_STIAM_TTU_TCHI_STIAM, "");
					// メールアドレス
					opSvcIfMap.put(PARAM_MLAD, "");
					// ANK-3766-00-00 ADD END
// ANK-3831-00-00 ADD START
					// 初期POPIDパスワード
					opSvcIfMap.put(PARAM_SHK_POP_ID_PWD, "");
// ANK-3831-00-00 ADD END
// ANK-3862-02-00 ADD START
					// 050オプション電話番号
					opSvcIfMap.put(PARAM_N_050_OP_TELNO, "");
// ANK-3862-02-00 ADD START
// ANK-3754-00-00 ADD START
					// トビラフォンID
					opSvcIfMap.put(PARAM_TOBILAPH_ID, "");
// ANK-3754-00-00 ADD END
// ANK-3927-00-00 ADD START
					// オプションサービス開始年月日
					opSvcIfMap.put(PARAM_OP_SVC_STAYMD, "");
					// オプションサービス終了年月日
					opSvcIfMap.put(PARAM_OP_SVC_ENDYMD, "");
					// オプションサービス課金開始年月日
					opSvcIfMap.put(PARAM_OP_SVC_CHRG_STAYMD, "");
					// オプションサービス課金終了年月日
					opSvcIfMap.put(PARAM_OP_SVC_CHRG_ENDYMD, "");
					// オプション料金プランコード
					opSvcIfMap.put(PARAM_OP_PPLAN_CD, "");
					// オプション料金プラン名
					opSvcIfMap.put(PARAM_OP_PPLAN_NM, "");
					// オプションプラン開始年月日
					opSvcIfMap.put(PARAM_OP_PLAN_STAYMD, "");
					// オプションプラン終了年月日
					opSvcIfMap.put(PARAM_OP_PLAN_ENDYMD, "");
					// オプションプラン課金開始年月日
					opSvcIfMap.put(PARAM_OP_PLAN_CHRG_STAYMD, "");
					// オプションプラン課金終了年月日
					opSvcIfMap.put(PARAM_OP_PLAN_CHRG_ENDYMD, "");
					// オプション違約金発生コード
					opSvcIfMap.put(PARAM_OP_PNLTY_HASSEI_CD, "");
					// オプション回復年月日
					opSvcIfMap.put(PARAM_OP_KAIHK_YMD, "");
// ANK-3927-00-00 ADD END
// ANK-4030-00-00 ADD START
					// オプション利用開始日
					opSvcIfMap.put(OP_SVC_USE_STA_YMD, "");
					// オプション利用終了予定日
					opSvcIfMap.put(OP_USE_END_RSYMD, "");
					// ケーブルガイド申込数
					opSvcIfMap.put(CABLE_GUIDE_MSKM_CNT, "");
//ANK-4030-00-00 ADD END
// ANK-4427-00-00 ADD START
					//eo光type N電話番号
					opSvcIfMap.put(TYPEN_TELNO, "");
// ANK-4427-00-00 ADD END
					opSvcIfList.add(opSvcIfMap);
				}
				
				// オプションサービス情報リストのマッピング
				kisnNaiSvcKeiNoMap.put(PARAM_OP_SVC_IF_LIST, opSvcIfList);
				
				// データが取得できている場合は取得データ無フラグを変更
				if (wribSvcIfList.size() > 0 ) 
				{
					noDataFlg = false;
				}
				else
				{
					// サービス契約番号が空の場合、
					// あるいは、データが存在しなかった場合
					// 割引サービス情報のマップ
					Map<String, Object> wribSvcIfMap = new HashMap<String, Object>();
					// 
					// 割引サービス契約番号
					wribSvcIfMap.put(PARAM_WRIB_SVC_KEI_NO, "");
					// 割引サービスコード
					wribSvcIfMap.put(PARAM_WRIB_SVC_CD, "");
					// 割引サービス名
					wribSvcIfMap.put(PARAM_WRIB_SVC_NM, "");
					// 割引サービス契約ステータス
					wribSvcIfMap.put(PARAM_WRIB_SVC_KEI_STAT, "");
					// 割引サービス解約年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_DSL_YMD, "");
					// 割引サービス解約理由コード
					wribSvcIfMap.put(PARAM_WRIB_SVC_DLRE_CD, "");
					// ANK-3766-00-00 ADD START
					// サービス契約内訳番号
					wribSvcIfMap.put(PARAM_WRIB_SVC_KEI_UCWK_NO, "");
					// ANK-3766-00-00 ADD END
// ANK-3927-00-00 ADD START
					// 申込起算年月日
					wribSvcIfMap.put(PARAM_MSKM_KISAN_YMD, "");
					// 割引サービス開始年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_STAYMD, "");
					// 割引サービス終了年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_ENDYMD, "");
					// 割引サービス課金開始年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_CHRG_STAYMD, "");
					// 割引サービス課金終了年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_CHRG_ENDYMD, "");
					// 割引料金プランコード
					wribSvcIfMap.put(PARAM_WRIB_PPLAN_CD, "");
					// 割引料金プラン名
					wribSvcIfMap.put(PARAM_WRIB_PPLAN_NM, "");
					// 割引プラン開始年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_STAYMD, "");
					// 割引プラン終了年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_ENDYMD, "");
					// 割引プラン課金開始年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_CHRG_STAYMD, "");
					// 割引プラン課金終了年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_CHRG_ENDYMD, "");
					// 割引違約金発生コード
					wribSvcIfMap.put(PARAM_WRIB_PNLTY_HASSEI_CD, "");
					// 割引回復年月日
					wribSvcIfMap.put(PARAM_WRIB_KAIHK_YMD, "");
// ANK-3927-00-00 ADD END
					
					// 割引サービス情報リストに追加
					wribSvcIfList.add(wribSvcIfMap);
				}
				
				// 割引サービス情報リストのマッピング
				kisnNaiSvcKeiNoMap.put(PARAM_WRIB_SVC_IF_LIST, wribSvcIfList);
				
			}
			
			// 回線内請求契約番号リスト
			List<Map<String,Object>> kisnNaiSeikyKeiNoList = (List<Map<String, Object>>) kisnTaniKeiIfList.get(listcnt).get(PARAM_KISN_NAI_SEIKY_KEI_NO_LIST);
			
			for (int dtlListcnt = 0; dtlListcnt < kisnNaiSeikyKeiNoList.size(); dtlListcnt++)
			{
				Map<String,Object> kisnNaiSeikyKeiNoMap = kisnNaiSeikyKeiNoList.get(dtlListcnt);
				
				// 請求オプションサービス情報リストの作成
				// ANK-3758-00-00 MOD START
				List<Map<String,Object>> SeiOpSvcIfList = getSeiOpSvcIfList(handle, param, fixedText, ccMsg, (String)kisnNaiSeikyKeiNoMap.get(PARAM_SEIKY_KEI_NO));
				
				if (SeiOpSvcIfList.size() > 0) 
				{
					noDataFlg = false;
				}
				else {
					// 請求オプションサービス情報のマップ
					Map<String, Object> sekyuOpSvcIfMap = new HashMap<String, Object>();

					// 請求オプションサービス契約番号
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_KEI_NO, "");
					// 請求オプションサービスコード
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_CD, "");
					// 請求オプションサービス名称
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_NM, "");
					// 請求オプションサービス契約ステータス
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_KEI_STAT, "");
					// 請求オプションサービス解約年月日
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_DSL_YMD, "");
					// 請求オプションサービス解約理由コード
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_DLRE_CD, "");

					SeiOpSvcIfList.add(sekyuOpSvcIfMap);
				}
				// ANK-3758-00-00 ADD END
				
				// 請求オプションサービス情報リストのマッピング
				kisnNaiSeikyKeiNoMap.put(PARAM_SEIOP_SVC_IF_LIST, SeiOpSvcIfList);
			}
		}
		
		// SYSID
		String sysid = (String)ccMsg.get(PARAM_SYSID);
// ANK-4346-00-00 DEL START
//		// コンテンツ情報リストの作成
//		List<Map<String, Object>> contKeiIfList = getContKeiIfList(handle, param, fixedText, ccMsg, sysid);
//		
//		if (contKeiIfList.size() > 0 ) 
//		{
//			noDataFlg = false;
//		}
//		// データが存在しない場合
//		else
//		{
//			// コンテンツサービス情報のマップ
//			Map<String, Object> contKeiIfMap = new HashMap<String, Object>();
//			
//			// コンテンツ契約番号
//			contKeiIfMap.put(PARAM_CONT_KEI_NO, "");
//			// コンテンツサービスコード
//			contKeiIfMap.put(PARAM_CONT_SVC_CD, "");
//			// コンテンツサービス名称
//			contKeiIfMap.put(PARAM_CONT_SVC_NM, "");
//			// コンテンツ支払方法コード
//			contKeiIfMap.put(PARAM_CONT_PAYWAY_CD, "");
//			// コンテンツ支払方法名称
//			contKeiIfMap.put(PARAM_CONT_PAYWAY_NM, "");
//			// コンテンツ契約終了年月日時分秒
//			contKeiIfMap.put(PARAM_CONT_KEI_END_DTM, "");
//			// コンテンツ契約状態コード
//			contKeiIfMap.put(PARAM_CONT_KEI_STAT_CD, "");
//			
//			contKeiIfList.add(contKeiIfMap);
//		}
// ANK-4346-00-00 DEL END
		
		// 取得データがない場合、エラーを返却する。
		if (noDataFlg)
		{ 
			// 件数結果チェックエラー
			setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2001, "");
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return;
		}
		
		// ボディ情報マップ
		Map<String, Object> bodyMap = new HashMap<String, Object>();
		// 取得したデータをボディ情報マップにセットする
		// SYSID
		bodyMap.put(PARAM_SYSID, sysid);
		// 回線単位契約情報リスト
		bodyMap.put(PARAM_KISN_TANI_KEI_IF_LIST, kisnTaniKeiIfList);
// ANK-4346-00-00 DEL START
//		// コンテンツ契約情報リスト
//		if (contKeiIfList.size() > 0 ) 
//		{
//			bodyMap.put(PARAM_CONT_KEI_IF_LIST, contKeiIfList);
//		}
// ANK-4346-00-00 DEL END
		
		// 作成したボディ情報をセット
		ccMsg.put(CC_PARAM_BODY_INFO, bodyMap);
		// 空のエラー情報をセット
		ccMsg.put(CC_PARAM_ERROR_INFO, new ArrayList<Map<String, String>>());
	}
	
	/**
	 * 割引サービス情報リストの作成を行います。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param svcKeiNo 
	 * @return
	 * @throws Throwable 
	 */
	private List<Map<String, Object>> getWribSvcIfList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, Map<String, Object> ccMsg, String svcKeiNo) throws Throwable
	{
		// 割引サービス情報リスト
		List<Map<String, Object>> wribSvcIfList = new ArrayList<Map<String, Object>>();

		// サービス契約番号が空ではない場合
		if (!JKKStringUtil.isNullBlank(svcKeiNo))
		{
			// EKK0451B040_割引サービス契約一覧照会（オペレータ支援）の実行
			CAANMsg[] resultEKK0451B040 = execEKK0451B040(handle, param, fixedText, svcKeiNo);
			
			// データが存在する場合
			if (resultEKK0451B040 != null && resultEKK0451B040.length > 0)
			{
				for (int dataCnt = 0; dataCnt < resultEKK0451B040.length; dataCnt++)
				{
					// 割引サービス情報のマップ
					Map<String, Object> wribSvcIfMap = new HashMap<String, Object>();
					
					// 割引サービスコード取得
					String wribSvcCd = resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_CD);
					// 割引サービス契約ステータス取得
					String wribSvcKeiStat = resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_KEI_STAT);
					
					// 出力対象のデータかチェックする。
					// 地デジ・ＢＳコース　スターチャンネルセット割引の場合
					// ANK-3758-00-00 DEL START
//					if (JKKStrConst.WRIB_SVC_BS_STAR_CHANNEL_SET.equals(wribSvcCd))
//					{
//						// 割引サービス契約ステータスが"300"(適用中),"910"(解約済),"920"(キャンセル済)の場合は処理しない
//						// v42.00.01 ANK-3593-00-00 MOD START
////						if (!wribSvcKeiStat.equals(JKKStrConst.CD00055_APLYZM) &&
////							!wribSvcKeiStat.equals(JKKStrConst.CD00055_DSLZM) &&
////							!wribSvcKeiStat.equals(JKKStrConst.CD00055_CSLZM))
//						if (wribSvcKeiStat.equals(JKKStrConst.CD00055_APLYZM) ||
//						wribSvcKeiStat.equals(JKKStrConst.CD00055_DSLZM) ||
//						wribSvcKeiStat.equals(JKKStrConst.CD00055_CSLZM))
//						// v42.00.01 ANK-3593-00-00 MOD END
//						{
//							continue;
//						}
//					}
//					// 地デジ・ＢＳコース　スターチャンネルセット割引以外の場合
//					else
//					{
//						// 割引サービス契約ステータスが"010"(受付済),"100"(サービス提供中)以外の場合は処理しない
//						if (!wribSvcKeiStat.equals(JKKStrConst.CD00055_UKZM) &&
//							!wribSvcKeiStat.equals(JKKStrConst.CD00055_SVCTK_CHU))
//						{
//							continue;
//						}
//					}
					// ANK-3758-00-00 DEL END

					// 出力対象の割引サービス情報であれば、マッピングを行う。
					// 割引サービス契約番号
					wribSvcIfMap.put(PARAM_WRIB_SVC_KEI_NO, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_KEI_NO)));
					// 割引サービスコード
					wribSvcIfMap.put(PARAM_WRIB_SVC_CD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_CD)));
					// 割引サービス名
					wribSvcIfMap.put(PARAM_WRIB_SVC_NM, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_NM)));
					// 割引サービス契約ステータス
					wribSvcIfMap.put(PARAM_WRIB_SVC_KEI_STAT, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_KEI_STAT)));
					// ANK-3758-00-00 ADD START
					// 割引サービス解約年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_DSL_YMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_DSL_YMD)));
					// 割引サービス解約理由コード
					wribSvcIfMap.put(PARAM_WRIB_SVC_DLRE_CD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_DLRE_CD)));
					// ANK-3758-00-00 ADD END
					// ANK-3766-00-00 ADD START
					// サービス契約内訳番号
					wribSvcIfMap.put(PARAM_WRIB_SVC_KEI_UCWK_NO, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.SVC_KEI_UCWK_NO)));
					// ANK-3766-00-00 ADD END
// ANK-3927-00-00 ADD START
					// 申込起算年月日
					wribSvcIfMap.put(PARAM_MSKM_KISAN_YMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.MSKM_KISAN_YMD)));
					// 割引サービス開始年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_STAYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_STAYMD)));
					// 割引サービス終了年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_ENDYMD)));
					// 割引サービス課金開始年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_CHRG_STAYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_CHRG_STAYMD)));
					// 割引サービス課金終了年月日
					wribSvcIfMap.put(PARAM_WRIB_SVC_CHRG_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_SVC_CHRG_ENDYMD)));
					// 割引料金プランコード
					wribSvcIfMap.put(PARAM_WRIB_PPLAN_CD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_PPLAN_CD)));
					// 割引料金プラン名
					wribSvcIfMap.put(PARAM_WRIB_PPLAN_NM, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_PPLAN_NM)));
					// 割引プラン開始年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_STAYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_PLAN_STAYMD)));
					// 割引プラン終了年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_PLAN_ENDYMD)));
					// 割引プラン課金開始年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_CHRG_STAYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_PLAN_CHRG_STAYMD)));
					// 割引プラン課金終了年月日
					wribSvcIfMap.put(PARAM_WRIB_PLAN_CHRG_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_PLAN_CHRG_ENDYMD)));
					// 割引違約金発生コード
					wribSvcIfMap.put(PARAM_WRIB_PNLTY_HASSEI_CD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_PNLTY_HASSEI_CD)));
					// 割引回復年月日
					wribSvcIfMap.put(PARAM_WRIB_KAIHK_YMD, JKKStringUtil.nullToBlank(resultEKK0451B040[dataCnt].getString(EKK0451B040CBSMsg1List.WRIB_KAIHK_YMD)));
// ANK-3927-00-00 ADD END

					// 割引サービス情報リストに追加
					wribSvcIfList.add(wribSvcIfMap);
				}
			}
		}
		
		return wribSvcIfList;
	}
	
	/**
	 * オプションサービス情報リストの作成を行います。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @param svcKeiNo 
	 * @return
	 */
	private List<Map<String, Object>> getOpSvcIfList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, Map<String, Object> ccMsg, String svcKeiNo) throws Throwable 
	{
		// オプションサービス情報リスト
		List<Map<String, Object>> opSvcIfList = new ArrayList<Map<String, Object>>();
		
		
		// サービス契約番号が空ではない場合
		if (!JKKStringUtil.isNullBlank(svcKeiNo))
		{
			// EKK0351B014_オプションサービス契約一覧照会（割引用）の実行
			// ANK-3758-00-00 MOD START
			CAANMsg[] resultEKK0351B014 = execEKK0351B014(handle, param, fixedText, svcKeiNo);
			
			// データが存在する場合
			if (resultEKK0351B014 != null && resultEKK0351B014.length > 0)
			{
				// オプション登録作業用マップ
				Map<String, Map<String, Object>> tmpOpSvcListMap = new HashMap<String, Map<String, Object>>();
				
				List<Map<String, Object>> sbopSvcIfMapList = new ArrayList<Map<String, Object>>();
				
				for (int dataCnt = 0; dataCnt < resultEKK0351B014.length; dataCnt++)
				{
					// オプションサービス情報のマップ
					Map<String, Object> opSvcIfMap = new HashMap<String, Object>();
					String opSvcKeiNo = JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_KEI_NO));
					
					if (!tmpOpSvcListMap.containsKey(opSvcKeiNo)) {
						// オプションサービス契約番号
						opSvcIfMap.put(PARAM_OP_SVC_KEI_NO, opSvcKeiNo);
						// オプションサービスコード
						opSvcIfMap.put(PARAM_OP_SVC_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_CD)));
						// オプションサービス名称
						opSvcIfMap.put(PARAM_OP_SVC_NM, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_NM)));
						// オプションサービス契約ステータス
						opSvcIfMap.put(PARAM_OP_SVC_KEI_STAT, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_KEI_STAT)));
						// オプションサービス解約年月日
						opSvcIfMap.put(PARAM_OP_SVC_DSL_YMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SVC_DSL_YMD)));
						// オプションサービス解約理由コード
						opSvcIfMap.put(PARAM_OP_SVC_DLRE_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SVC_DLRE_CD)));
						// ANK-3766-00-00 ADD START
						// サービス契約内訳番号
						opSvcIfMap.put(PARAM_OP_SVC_KEI_UCWK_NO, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SVC_KEI_UCWK_NO)));
						// 通話料指定額到達通知指定金額
						opSvcIfMap.put(PARAM_TWRYO_STIAM_TTU_TCHI_STIAM, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.TWRYO_STIAM_TTU_TCHI_STIAM)));
						// メールアドレス
						opSvcIfMap.put(PARAM_MLAD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.MLAD)));
						// ANK-3766-00-00 ADD END
// ANK-3831-00-00 ADD START
						// 初期POPIDパスワード
						opSvcIfMap.put(PARAM_SHK_POP_ID_PWD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SHK_POP_ID_PWD)));
// ANK-3831-00-00 ADD END
// ANK-3862-02-00 ADD START
						// 050オプション電話番号
						opSvcIfMap.put(PARAM_N_050_OP_TELNO, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.N_050_OP_TELNO)));
// ANK-3862-02-00 ADD END
// ANK-3754-00-00 ADD START
						// トビラフォンID
						opSvcIfMap.put(PARAM_TOBILAPH_ID, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.TOBILAPH_ID)));
// ANK-3754-00-00 ADD END
// ANK-3927-00-00 ADD START
						// オプションサービス開始年月日
						opSvcIfMap.put(PARAM_OP_SVC_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_STAYMD)));
						// オプションサービス終了年月日
						opSvcIfMap.put(PARAM_OP_SVC_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_ENDYMD)));
						// オプションサービス課金開始年月日
						opSvcIfMap.put(PARAM_OP_SVC_CHRG_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_CHRG_STAYMD)));
						// オプションサービス課金終了年月日
						opSvcIfMap.put(PARAM_OP_SVC_CHRG_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_CHRG_ENDYMD)));
						// オプション料金プランコード
						opSvcIfMap.put(PARAM_OP_PPLAN_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_PPLAN_CD)));
						// オプション料金プラン名
						opSvcIfMap.put(PARAM_OP_PPLAN_NM, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_PPLAN_NM)));
						// オプションプラン開始年月日
						opSvcIfMap.put(PARAM_OP_PLAN_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_PLAN_STAYMD)));
						// オプションプラン終了年月日
						opSvcIfMap.put(PARAM_OP_PLAN_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_PLAN_ENDYMD)));
						// オプションプラン課金開始年月日
						opSvcIfMap.put(PARAM_OP_PLAN_CHRG_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_PLAN_CHRG_STAYMD)));
						// オプションプラン課金終了年月日
						opSvcIfMap.put(PARAM_OP_PLAN_CHRG_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_PLAN_CHRG_ENDYMD)));
						// オプション違約金発生コード
						opSvcIfMap.put(PARAM_OP_PNLTY_HASSEI_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_PNLTY_HASSEI_CD)));
						// オプション回復年月日
						opSvcIfMap.put(PARAM_OP_KAIHK_YMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_KAIHK_YMD)));
// ANK-3927-00-00 ADD END
// ANK-4030-00-00 ADD START
						// オプション利用開始日
						opSvcIfMap.put(OP_SVC_USE_STA_YMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_SVC_USE_STA_YMD)));
						// オプション利用終了予定日
						opSvcIfMap.put(OP_USE_END_RSYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.OP_USE_END_RSYMD)));
						// ケーブルガイド申込数
						opSvcIfMap.put(CABLE_GUIDE_MSKM_CNT, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.CABLE_GUIDE_MSKM_CNT)));
// ANK-4030-00-00 ADD END
// ANK-4427-00-00 ADD START
						//eo光type N電話番号
						opSvcIfMap.put(TYPEN_TELNO, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.TYPEN_TELNO)));
// ANK-4427-00-00 ADD END
						
						
						tmpOpSvcListMap.put(opSvcKeiNo, opSvcIfMap);
					}
					
					
					// サブオプションが設定されている場合、設定する
					
					if (!StringUtils.isEmpty(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_KEI_NO))) {
						Map<String, Object> sbopSvcIfMap = new HashMap<String, Object>();
						
						sbopSvcIfMap.put(PARAM_SBOP_SVC_KEI_NO, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_KEI_NO)));
						
						sbopSvcIfMap.put(PARAM_SBOP_SVC_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_CD)));
						
						sbopSvcIfMap.put(PARAM_SBOP_SVC_NM, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_NM)));
						
						sbopSvcIfMap.put(PARAM_SBOP_SVC_KEI_STAT, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_KEI_STAT)));
						
						sbopSvcIfMap.put(PARAM_SBOP_SVC_DSL_YMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_DSL_YMD)));
						
						sbopSvcIfMap.put(PARAM_SBOP_SVC_DLRE_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_DLRE_CD)));
						
						sbopSvcIfMap.put(PARAM_SBOP_SVC_ADD_CAPA, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.ADD_CAPA)));
						
// ANK-3831-00-00 ADD START
						sbopSvcIfMap.put(PARAM_ML_ALIAS, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.ML_ALIAS)));
// ANK-3831-00-00 ADD END
// ANK-3927-00-00 ADD START
						// サブオプションサービス開始年月日
						sbopSvcIfMap.put(PARAM_SBOP_SVC_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_STAYMD)));
						// サブオプションサービス終了年月日
						sbopSvcIfMap.put(PARAM_SBOP_SVC_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_ENDYMD)));
						// サブオプションサービス課金開始年月日
						sbopSvcIfMap.put(PARAM_SBOP_SVC_CHRG_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_CHRG_STAYMD)));
						// サブオプションサービス課金終了年月日
						sbopSvcIfMap.put(PARAM_SBOP_SVC_CHRG_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_CHRG_ENDYMD)));
						// サブオプション料金プランコード
						sbopSvcIfMap.put(PARAM_SBOP_PPLAN_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_PPLAN_CD)));
						// サブオプション料金プラン名
						sbopSvcIfMap.put(PARAM_SBOP_PPLAN_NM, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_PPLAN_NM)));
						// サブオプションプラン開始年月日
						sbopSvcIfMap.put(PARAM_SBOP_PLAN_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_PLAN_STAYMD)));
						// サブオプションプラン終了年月日
						sbopSvcIfMap.put(PARAM_SBOP_PLAN_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_PLAN_ENDYMD)));
						// サブオプションプラン課金開始年月日
						sbopSvcIfMap.put(PARAM_SBOP_PLAN_CHRG_STAYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_PLAN_CHRG_STAYMD)));
						// サブオプションプラン課金終了年月日
						sbopSvcIfMap.put(PARAM_SBOP_PLAN_CHRG_ENDYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_PLAN_CHRG_ENDYMD)));
						// サブオプション違約金発生コード
						sbopSvcIfMap.put(PARAM_SBOP_PNLTY_HASSEI_CD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_PNLTY_HASSEI_CD)));
						// サブオプション回復年月日
						sbopSvcIfMap.put(PARAM_SBOP_KAIHK_YMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_KAIHK_YMD)));
// ANK-3927-00-00 ADD END
// ANK-4030-00-00 ADD START
						// サブオプション利用開始日
						sbopSvcIfMap.put(SBOP_SVC_USE_STA_YMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_SVC_USE_STA_YMD)));
						// サブオプション利用終了予定日
						sbopSvcIfMap.put(SBOP_USE_END_RSYMD, JKKStringUtil.nullToBlank(resultEKK0351B014[dataCnt].getString(EKK0351B014CBSMsg1List.SBOP_USE_END_RSYMD)));
// ANK-4030-00-00 ADD END

						// 既にサブオプションのリストがある場合は追加する
						if (tmpOpSvcListMap.get(opSvcKeiNo).containsKey(PARAM_SBOP_SVC_IF_LIST)) {
							((List<Map<String, Object>>) tmpOpSvcListMap.get(opSvcKeiNo).get(PARAM_SBOP_SVC_IF_LIST)).add(sbopSvcIfMap);
						} else {
							sbopSvcIfMapList = new ArrayList<Map<String, Object>>();
							sbopSvcIfMapList.add(sbopSvcIfMap);
							tmpOpSvcListMap.get(opSvcKeiNo).put(PARAM_SBOP_SVC_IF_LIST, sbopSvcIfMapList);
						}
						
					}
					
					
				}
				
				for (String key : tmpOpSvcListMap.keySet()) {
					opSvcIfList.add(tmpOpSvcListMap.get(key));
				}
				// ANK-3758-00-00 MOD END
				return opSvcIfList;
			}
		}
		
		return opSvcIfList;
	}
	
	/**
	 * 請求オプションサービス情報リストの作成を行います。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccMsg
	 * @return
	 */
	private List<Map<String, Object>> getSeiOpSvcIfList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, Map<String, Object> ccMsg, String seikyKeiNo) throws Throwable 
	{
		
		// 請求オプションサービス情報リスト
		List<Map<String, Object>> sekyuOpSvcIfList = new ArrayList<Map<String, Object>>();
		// ANK-3758-00-00 MOD START
		if (!JKKStringUtil.isNullBlank(seikyKeiNo)) 
		{
			// EKK0351B011_請求オプションサービス契約一覧照会（割引用）の実行
			CAANMsg[] resultEKK0441B005 = execEKK0441B005(handle, param, fixedText, seikyKeiNo);
			
			if (resultEKK0441B005 != null && resultEKK0441B005.length > 0) 
			{
				for (int dataCnt = 0; dataCnt < resultEKK0441B005.length; dataCnt++)
				{
					// 請求オプションサービス情報のマップ
					Map<String, Object> sekyuOpSvcIfMap = new HashMap<String, Object>();
					
					// 請求オプションサービス契約番号
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_KEI_NO, JKKStringUtil.nullToBlank(resultEKK0441B005[dataCnt].getString(EKK0441B005CBSMsg1List.SEIOPSVC_KEI_NO)));
					// 請求オプションサービスコード
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_CD, JKKStringUtil.nullToBlank(resultEKK0441B005[dataCnt].getString(EKK0441B005CBSMsg1List.SEIOPSVC_CD)));
					// 請求オプションサービス名称
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_NM, JKKStringUtil.nullToBlank(resultEKK0441B005[dataCnt].getString(EKK0441B005CBSMsg1List.SEIOPSVC_NM)));
					// 請求オプションサービス契約ステータス
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_KEI_STAT, JKKStringUtil.nullToBlank(resultEKK0441B005[dataCnt].getString(EKK0441B005CBSMsg1List.SEIOPSVC_KEI_STAT)));
					// 請求オプションサービス解約年月日
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_DSL_YMD, JKKStringUtil.nullToBlank(resultEKK0441B005[dataCnt].getString(EKK0441B005CBSMsg1List.SVC_DSL_YMD)));
					// 請求オプションサービス解約理由コード
					sekyuOpSvcIfMap.put(PARAM_SEIOPSVC_DLRE_CD, JKKStringUtil.nullToBlank(resultEKK0441B005[dataCnt].getString(EKK0441B005CBSMsg1List.SVC_DLRE_CD)));
					
					sekyuOpSvcIfList.add(sekyuOpSvcIfMap);
				}
			}
		}
		// ANK-3758-00-00 MOD END
		
		return sekyuOpSvcIfList;
	}
	
// ANK-4346-00-00 DEL START
//	/**
//	 * コンテンツ契約情報リストの作成を行います。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @param fixedText
//	 * @param ccMsg
//	 * @param sysid 
//	 * @return
//	 * @throws Throwable 
//	 */
//	private List<Map<String, Object>> getContKeiIfList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, Map<String, Object> ccMsg, String sysid) throws Throwable {
//		
//		// コンテンツサービス情報リスト
//		List<Map<String, Object>> contKeiIfList = new ArrayList<Map<String, Object>>();
//		
//		// ECN0021B008_コンテンツ契約一覧照会(オペレータ支援)の実行
//		CAANMsg[] resultECN0021B008 = execECN0021B008(handle, param, fixedText, sysid);
//		
//		// データが存在する場合
//		if (resultECN0021B008 != null && resultECN0021B008.length > 0)
//		{
//			for (int dataCnt = 0; dataCnt < resultECN0021B008.length; dataCnt++)
//			{
//				// コンテンツサービス情報のマップ
//				Map<String, Object> contKeiIfMap = new HashMap<String, Object>();
//				
//				// コンテンツ契約番号
//				contKeiIfMap.put(PARAM_CONT_KEI_NO, JKKStringUtil.nullToBlank(resultECN0021B008[dataCnt].getString(ECN0021B008CBSMsg1List.CONT_KEI_NO)));
//				// コンテンツサービスコード
//				contKeiIfMap.put(PARAM_CONT_SVC_CD, JKKStringUtil.nullToBlank(resultECN0021B008[dataCnt].getString(ECN0021B008CBSMsg1List.CONT_SVC_CD)));
//				// コンテンツサービス名称
//				contKeiIfMap.put(PARAM_CONT_SVC_NM, JKKStringUtil.nullToBlank(resultECN0021B008[dataCnt].getString(ECN0021B008CBSMsg1List.CONT_SVC_NM)));
//				// コンテンツ支払方法コード
//				contKeiIfMap.put(PARAM_CONT_PAYWAY_CD, JKKStringUtil.nullToBlank(resultECN0021B008[dataCnt].getString(ECN0021B008CBSMsg1List.CONT_PAYWAY_CD)));
//				// コンテンツ支払方法名称
//				contKeiIfMap.put(PARAM_CONT_PAYWAY_NM, JKKStringUtil.nullToBlank(resultECN0021B008[dataCnt].getString(ECN0021B008CBSMsg1List.CONT_PAYWAY_NM)));
//				// ANK-3758-00-00 ADD START
//				// コンテンツ契約終了年月日時分秒
//				contKeiIfMap.put(PARAM_CONT_KEI_END_DTM, JKKStringUtil.nullToBlank(resultECN0021B008[dataCnt].getString(ECN0021B008CBSMsg1List.CONT_KEI_END_DTM)));
//				// コンテンツ契約状態コード
//				contKeiIfMap.put(PARAM_CONT_KEI_STAT_CD, JKKStringUtil.nullToBlank(resultECN0021B008[dataCnt].getString(ECN0021B008CBSMsg1List.CONT_KEI_STAT_CD)));
//				// ANK-3758-00-00 ADD END
//				
//				contKeiIfList.add(contKeiIfMap);
//			}
//		}
//		
//		return contKeiIfList;
//	}
// ANK-4346-00-00 DEL END
	
	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @return
	 */
	public Map<String, String> getReqErrInfMap()
	{
		String errorCode = JKKStrConst.RETURN_CD_1001;
		String errorMessage = "";
		
		return getCommonErrInfMap(errorCode, errorMessage);
	}
	
	/**
	 * 単項目チェックの属性エラーマップ作成メソッドです。
	 * 
	 * @return
	 */
	public Map<String, String> getFormErrInfMap()
	{
		String errorCode = JKKStrConst.RETURN_CD_1002;
		String errorMessage = "";
		
		return getCommonErrInfMap(errorCode, errorMessage);
	}
	
	/**
	 * 単項目チェックの桁数エラーマップ作成メソッドです。
	 * 
	 * @return
	 */
	public Map<String, String> getLenErrInfMap()
	{
		String errorCode = JKKStrConst.RETURN_CD_1003;
		String errorMessage = "";
		
		return getCommonErrInfMap(errorCode, errorMessage);
	}
	
	/**
	 * レスポンス項目を設定します。
	 * <br>
	 * @param ccMsg お客様住所情報更新受付(CMP)CCマップ
	 * @param returnCode リターンコード
	 * @param returnMessage リターンメッセージ
	 */
	private void setResponse(IRequestParameterReadWrite param,  Map<String, Object> ccMsg, String errCode, String errMessage)
	throws Exception
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
		// body用マップ
		Map<String, Object> bodyMap = new HashMap<String, Object>();
		
		// 引数のエラー情報をエラーリストにセット
		errList.add(getCommonErrInfMap(errCode, errMessage));
		
		ccMsg.put(CC_PARAM_BODY_INFO, bodyMap);
		ccMsg.put(CC_PARAM_ERROR_INFO, errList);
	}
	
	/**
	 * 各業務エラーチェックのエラーマップ作成メソッド
	 * 
	 * @param return_cd
	 * @param errorMessage
	 * @return
	 */
	private Map<String, String> getCommonErrInfMap(String return_cd, String errorMessage)
	{
		Map<String, String> returnMap = new HashMap<String, String>();
		
		returnMap.put(PARAM_ERRCODE, return_cd);
		returnMap.put(PARAM_ERRMESSAGE, errorMessage);
		
		return returnMap;
	}
	
	/**
	 * 引数に指定したレスポンス情報を用いて
	 * エラー時のレスポンスデータを作成します。
	 * 
	 * @param ccMsg
	 * @param errList
	 */
	private void setErrorList(Map<String, Object> ccMsg, List<Map<String, String>> errList)
	{
		// body用マップ
		Map<String, Object> bodyMap = new HashMap<String, Object>();
		
		ccMsg.put(CC_PARAM_BODY_INFO, bodyMap);
		ccMsg.put(CC_PARAM_ERROR_INFO, errList);
	}
	
	/**
	 * EKK0451B040_割引サービス契約一覧照会（オペレータ支援）を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo 
	 * @param sysid
	 * @return 
	 * @throws Throwable
	 */
	private CAANMsg[] execEKK0451B040(SessionHandle handle,IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws Throwable
	{
		// 上りマッピング
		Object[][] inmap = {
				  {EKK0451B040CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451B040}
				, {EKK0451B040CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
				, {EKK0451B040CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		// SC実行
		CAANMsg[] msgList = callSC(handle,  param, inmap,
				fixedText, new EKK0451B040CBSMsg().getContents()).getCAANMsgList(EKK0451B040CBSMsg.EKK0451B040CBSMSG1LIST);
		
		return msgList;
	}
	
	/**
	 * EKK0351B014_オプションサービス契約一覧照会（割引用）を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo 
	 * @param sysid
	 * @return 
	 * @throws Throwable
	 */
	 // ANK-3758-00-00 MOD START
	private CAANMsg[] execEKK0351B014(SessionHandle handle,IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws Throwable
	{
		// 上りマッピング
		Object[][] inmap = {
				  {EKK0351B014CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351B014}
				, {EKK0351B014CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKK0351B014CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		// SC実行
		CAANMsg[] msgList = callSC(handle,  param, inmap,
				fixedText, new EKK0351B014CBSMsg().getContents()).getCAANMsgList(EKK0351B014CBSMsg.EKK0351B014CBSMSG1LIST);
		// ANK-3758-00-00 MOD END
		return msgList;
	}
	
// ANK-4346-00-00 DEL START
//	/**
//	 * ECN0021B008_コンテンツ契約一覧照会(オペレータ支援)を呼び出す。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @param fixedText
//	 * @param sysid 
//	 * @param sysid
//	 * @return 
//	 * @throws Throwable
//	 */
//	private CAANMsg[] execECN0021B008(SessionHandle handle,IRequestParameterReadWrite param, String fixedText, String sysid) throws Throwable
//	{
//		// 上りマッピング
//		Object[][] inmap = {
//				  {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}
//		};
//		
//		// SC実行
//		CAANMsg[] msgList = callSC(handle,  param, inmap,
//				fixedText, new ECN0021B008CBSMsg().getContents()).getCAANMsgList(ECN0021B008CBSMsg.ECN0021B008CBSMSG1LIST);
//		
//		return msgList;
//	}
// ANK-4346-00-00 DEL END
	
	// ANK-3758-00-00 ADD START
	/**
	 * ECN0021B008_請求オプション契約一覧照会(オペレータ支援)を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param sysid 
	 * @param sysid
	 * @return 
	 * @throws Throwable
	 */
	private CAANMsg[] execEKK0441B005(SessionHandle handle,IRequestParameterReadWrite param, String fixedText, String seikyKeiNo) throws Throwable
	{
		// 上りマッピング
		Object[][] inmap = {
				  {EKK0441B005CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0441B005}
				, {EKK0441B005CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
				, {EKK0441B005CBSMsg.KEY_SEIKY_KEI_NO, seikyKeiNo}
		};
		
		// SC実行
		CAANMsg[] msgList = callSC(handle,  param, inmap,
				fixedText, new EKK0441B005CBSMsg().getContents()).getCAANMsgList(EKK0441B005CBSMsg.EKK0441B005CBSMSG1LIST);
		
		return msgList;
	}
	// ANK-3758-00-00 ADD END
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param mappingData マッピングデータ
	 * @param fixedText ユーザ定義文字列
	 * @param contents CAANMsgのコンテンツ
	 * @return CAANMsg
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle,
			IRequestParameterReadWrite param, Object[][] mappingData,
			String fixedText, Object[][] contents) throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// サービスI/F呼出し実行
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		// SCからの戻り値からCAANMsgを取得
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object returnCode = result.get(JCMConstants.RET_CD_INT_KEY);
		// ステータス取得
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// エラー情報の設定
		editErrorInfo(param, templates, (Integer)returnCode, fixedText, contents);
		
		// エラー情報のマップを取得
		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));
		
		// 異常の場合、CCExceptionを生成してスローする
		if(!("0".equals(returnCode.toString()) && 0 == status))
		{
			throw new CCException("サービスコンポーネントエラー", new Exception());
		}
		
		return msg;
	}
	
	/**
	 * 共通項目のメッセージを作成します。
	 * @param param リクエストパラメータ
	 * @param mappingData マッピングデータ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		// サービスインターフェイスID
		String svcIf = (String)mappingData[0][1];
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if (mappingData[i][1] instanceof CAANMsg[])
			{
				template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			}
			else
			{
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		
		templates[0] = template;
		
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}
	
	/**
	 * エラー情報を設定します。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ定義文字列
	 * @param contents CAANMsgのコンテンツ
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode, String fixedText, Object[][] contents) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (bpStatus < templateStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// ユーザデータ情報
		HashMap<String, String> inMap = (HashMap<String, String>)param.getData(fixedText);
		
		for (int i = 0; null != contents && i < contents.length ; i++)
		{
			String itemNm = (String)contents[i][0];
			if (itemNm.endsWith(ERRITEM_SUFFIX))
			{
				String errCd = (String)template.getString(itemNm);
				if (!JKKStringUtil.isNullBlank(errCd))
				{
					inMap.put(itemNm, errCd);
				}
			}
		}
		
		return param;
	}
}
