/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKKeishaLineShokaiCC
*	ソースファイル名：JKKKeishaLineShokaiCC.java
*	作成者			：FJ)吉田
*	日付			：2019年01月24日
*＜機能概要＞
*	契約情報照会(LINE)の共通コンポーネントクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v41.00.00	2019/01/24	FJ)吉田		【ANK-3355-00-00】LINEへの契約情報連携
*	v41.00.01	2019/02/20	FJ)吉田		【IT1-2019-0000028】表示文言全半角統一
*	v41.00.02	2019/02/25	FJ)吉田		【IT1-2019-0000030】特定のサービスを含むデータを照会するとエラー
*	v41.00.03	2019/02/28	FJ)吉田		【IT2-2019-0000015】お客様併合分割・請求併合時表示不正
*	v41.00.03	2019/03/08	FJ)吉田		【IT2-2019-0000021】コース変更遡及解約(撤去)時に照会するとエラー
*	v41.00.04	2019/03/15	FJ)吉田		【ANK-3355-10-00】LINE情報連携
*	v53.00.00	2021/04/23	FJ)吉村		【ANK-3989-03-00】マンション光コンセント方式への5G・10Gコース追加
*	v60.00.00	2022/06/10	FJ)原		【ANK-4244-00-00】【eo定期】MT既設賃貸対応
*	v74.00.00	2024/12/11	FJ)北尾		【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
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 eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCDateUtil;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B523CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B523CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B012CBSMsg1List;
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.EKK0881A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0881A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0891A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0891A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK3001B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK3001B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg2List;

/**
 * 契約情報照会(LINE)の共通コンポーネントクラスです。
 * <BR>
 * @author FJ)吉田
 */
public class JKKKeishaLineShokaiCC extends AbstractCommonComponent
{
	// -------------
	// 作業用マップ
	// -------------
	/** 作業用マップ名 */
	private final String WORK_MAP_NAME = "WM_JKKKeishaLineShokaiCC";
	/** 作業用マップキー：ECK0011A010_お客さま一意照会 */
	private final String WORK_KEY_ECK0011A010 = "WM_ECK0011A010";
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/** 作業用マップキー：EKK0321B012_請求契約番号一覧照会(CMP) */
//	private final String WORK_KEY_EKK0321B012 = "WM_EKK0321B012";
//	/** 作業用マップキー：EKK0081B042_サービス契約番号(代表)一覧照会(CMP) */
//	private final String WORK_KEY_EKK0081B042 = "WM_EKK0081B042";
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	/** 作業用マップキー：EKK0081A010_サービス契約一意照会 */
	private final String WORK_KEY_EKK0081A010 = "WM_EKK0081A010";
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/** 作業用マップキー：EKK0161B512_サービス契約内訳一覧照会（サービス契約番号） */
//	private final String WORK_KEY_EKK0161B512 = "WM_EKK0161B512";
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	/** 作業用マップキー：EKK3001B010_契約内容通知書表示文言一覧照会 */
	private final String WORK_KEY_EKK3001B010 = "WM_EKK3001B010";
	/** 作業用マップキー：EKKA0040001_eo電気契約一意照会 */
	private final String WORK_KEY_EKKA0040001 = "WM_EKKA0040001";
	/** 作業用マップキー：EKK0451B002_割引サービス契約一覧照会（サービス契約番号） */
	private final String WORK_KEY_EKK0451B002 = "WM_EKK0451B002";
	/** 作業用マップキー：EKK0451B002_割引サービス契約一意照会 */
	private final String WORK_KEY_EKK0451A010 = "WM_EKK0451A010";
	/** 作業用マップキー：EKK0891A010_提供方式契約一意照会 */
	private final String WORK_KEY_EKK0891A010 = "WM_EKK0891A010";
	// ANK-4244-00-00 ADD START
	/** 作業用マップキー：EKK0881A010_回線使用契約一意照会 */
	private final String WORK_KEY_EKK0881A010 = "WM_EKK0881A010";
	// ANK-4244-00-00 ADD END
	// ▼▼▼ ANK-3355-10-00 DEL START ▼▼▼
//	/** 作業用マップキー：EKK0161A010_サービス契約内訳一意照会 */
//	private final String WORK_KEY_EKK0161A010 = "WM_EKK0161A010";
	// ▲▲▲ ANK-3355-10-00 DEL END ▲▲▲
	// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
	/** 作業用マップキー：EKK0081B523_サービス契約識別情報一覧 */
	private final String WORK_KEY_EKK0081B523 = "WM_EKK0081B523";
	/** 作業用マップキー：EKK0321B005_課金先一覧照会（サービス契約番号） */
	private final String WORK_KEY_EKK0321B005 = "WM_EKK0321B005";
	// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
	// ▼▼▼ ANK-3355-10-00 ADD START ▼▼▼
	/** 作業用マップキー：JKKChowriInfoCC_長割情報照会CC */
	private final String WORK_KEY_JKKChowriInfoCC = "WM_JKKChowriInfoCC";
	// ▲▲▲ ANK-3355-10-00 ADD END ▲▲▲
	
	// ----------
	// TemplateID
	// ----------
	/** TamplateID：ECK0011A010_お客さま一意照会 */
	private final String TEMPLATE_ID_ECK0011A010 = "ECK0011A010";
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/** TamplateID：EKK0321B012_請求契約番号一覧照会(CMP) */
//	private final String TEMPLATE_ID_EKK0321B012 = "EKK0321B012";
//	/** TamplateID：EKK0081B042_サービス契約番号(代表)一覧照会(CMP) */
//	private final String TEMPLATE_ID_EKK0081B042 = "EKK0081B042";
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	/** TamplateID：EKK0081A010_サービス契約一意照会 */
	private final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/** TamplateID：EKK0161B512_サービス契約内訳一覧照会（サービス契約番号） */
//	private final String TEMPLATE_ID_EKK0161B512 = "EKK0161B512";
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	/** TamplateID：EKK3001B010_契約内容通知書表示文言一覧照会 */
	private final String TEMPLATE_ID_EKK3001B010 = "EKK3001B010";
	/** TamplateID：EKKA0040001_eo電気契約一意照会 */
	private final String TEMPLATE_ID_EKKA0040001 = "EKKA0040001";
	/** TamplateID：EKK0451B002_割引サービス契約一覧照会（サービス契約番号） */
	private final String TEMPLATE_ID_EKK0451B002 = "EKK0451B002";
	/** TamplateID：EKK0451B002_割引サービス契約一意照会 */
	private final String TEMPLATE_ID_EKK0451A010 = "EKK0451A010";
	/** TamplateID：EKK0891A010_提供方式契約一意照会 */
	private final String TEMPLATE_ID_EKK0891A010 = "EKK0891A010";
	// ▼▼▼ ANK-3355-10-00 DEL START ▼▼▼
//	/** TamplateID：EKK0161A010_サービス契約内訳一意照会 */
//	private final String TEMPLATE_ID_EKK0161A010 = "EKK0161A010";
	// ▲▲▲ ANK-3355-10-00 DEL END ▲▲▲
	// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
	/** TamplateID：EKK0081B523_サービス契約識別情報一覧 */
	private final String TEMPLATE_ID_EKK0081B523 = "EKK0081B523";
	/** TamplateID：EKK0321B005_課金先一覧照会（サービス契約番号） */
	private final String TEMPLATE_ID_EKK0321B005 = "EKK0321B005";
	// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
	// ANK-4244-00-00 ADD START
	/** TamplateID：EKK0881A010_回線使用契約一意照会 */
	private final String TEMPLATE_ID_EKK0881A010 = "EKK0881A010";
	// ANK-4244-00-00 ADD END
	// ▼▼▼ ANK-3355-10-00 ADD START ▼▼▼
	/** TamplateID：JKKChowriInfoCC_長割情報照会CC */
	private final String TEMPLATE_ID_JKKChowriInfoCC = "KKSV033413CC";
	// ▲▲▲ ANK-3355-10-00 ADD END ▲▲▲
	
	// ------------------------
	// CCパラメータ
	// ------------------------
	/** CCパラメータ：ボディ情報 */
	private final String CC_PARAM_BODY_INFO = "BODY_INFO";
	/** CCパラメータ：エラー情報 */
	private final String CC_PARAM_ERROR_INFO = "ERROR_INFO";
	
	// ------------------------
	// リクエストパラメータ定数
	// ------------------------
	/** リクエストパラメータ：SYSID */
	private final String REQ_PARAM_SYSID = "sysid";
	
	// ------------------------
	// レスポンスパラメータ定数
	// ------------------------
	/** レスポンスパラメータ：エラーコード */
	private final String RES_PARAM_ERRCODE = "errCode";
	/** レスポンスパラメータ：エラーメッセージ */
	private final String RES_PARAM_ERRMESSAGE = "errMessage";
	/** レスポンスパラメータ：会員種別 */
	private final String RES_PARAM_MEMBER_SBT = "member_sbt_cd";
	/** レスポンスパラメータ：契約データ */
	private final String RES_PARAM_KEI_DATA_LIST = "kei_data_list";
	/** レスポンスパラメータ：請求先番号 */
	private final String RES_PARAM_SEIKY_KEI_NO = "seiky_kei_no";
	/** レスポンスパラメータ：契約詳細データ */
	private final String RES_PARAM_KEI_DTAIL_DATA_LIST = "kei_dtail_data_list";
	/** レスポンスパラメータ：契約サービス名称 */
	private final String RES_PARAM_KYK_SVC_NM = "kyk_svc_nm";
	/** レスポンスパラメータ：契約期間 */
	private final String RES_PARAM_KEI_PRD = "kei_prd";
	/** レスポンスパラメータ：長割有無 */
	private final String RES_PARAM_CHOKZUWRI_UM = "chokzuwri_um";
	/** レスポンスパラメータ：即割有無 */
	private final String RES_PARAM_SOKUWRIB_UM = "sokuwrib_um";
	/** レスポンスパラメータ：高速割有無 */
	private final String RES_PARAM_KOSOKU_UM = "kosoku_um";
	
	// ----------
	// エラー定数
	// ----------
	/** エラーコード */
	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";
	
	// ------------
	// クラス用定数
	// ------------
	/** 有無区分：無 */
	private final String UMKBN_N = "0";
	/** 有無区分：有 */
	private final String UMKBN_U = "1";
	
	/** お客様入退会コード：退会済 */
	private final String CUST_NTAIKAICD_TAIKAI = "1";
	
	/** 料金コースコード：卸光ネット */
	private final String PCRS_CD_ORS_NET = "A88";
	/** 料金コースコード：eo光電話(１番号コース) */
	private final String PCRS_CD_TEL = "A31";
	// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
	/** 料金コースコード：eo光電話(２番号コース) */
	private final String PCRS_CD_TEL_2 = "A32";
	// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/** 料金コースコード：eo光テレビ(再送信) */
//	private final String PCRS_CD_SAISOUSIN = "A23";
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	/** 料金コースコード：eo光テレビ(地デジ・ＢＳコース) */
	private final String PCRS_CD_BS = "A37";
	/** 料金コースコード：eo光テレビ(ＳＤコース) */
	private final String PCRS_CD_SD = "A38";
	/** 料金コースコード：eo光テレビ(ＨＤコース) */
	private final String PCRS_CD_HD = "A39";
	/** 料金コースコード：eo光テレビ(再送信（多チャンネル）ＳＤコース) */
	private final String PCRS_CD_SD_CH = "A24";
	/** 料金コースコード：eo光テレビ(ｅｏ光テレビ再送信（多チャンネル）ＨＤコース) */
	private final String PCRS_CD_HD_CH = "A64";
	// ▼▼▼ IT1-2019-0000030 ADD START ▼▼▼
	/** 料金コースコード：eo光テレビ(再送信（地デジ・ＢＳコース）) */
	private final String PCRS_CD_SAISOUSIN_BS = "A75";
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/** 料金コースコード：eo光テレビ(ＫＣＮ（役務提供）) */
//	private final String PCRS_CD_KCN = "A25";
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	// ▲▲▲ IT1-2019-0000030 ADD END ▲▲▲
	// ANK-4592-00-00 ADD START
	/** 料金コースコード：eo光テレビ(ＣＳコース(ベーシック)) */
	private final String PCRS_CD_CS_BASIC = "AC0";
	/** 料金コースコード：eo光テレビ(ＣＳコース(プレミアム)) */
	private final String PCRS_CD_CS_PREMIUM = "AC1";
	// ANK-4592-00-00 ADD END
	
	/** 料金コースコード： スマートコンパクト*/
	private final String PCRS_CD_SMART_COMPACT = "A85";
	/** 料金コースコード： スマートベーシック*/
	private final String PCRS_CD_SMART_BASIC = "A86";
	/** 料金コースコード： スマートプレミアム*/
	private final String PCRS_CD_SMART_PREMIUM = "A87";
	
	/** 料金グループコード：eo光ネット(ホーム) */
	private final String PRC_GRP_CD_NET_HOME = "02";
	/** 料金グループコード：eo光ネット(メゾン) */
	private final String PRC_GRP_CD_NET_MEZON = "03";
	/** 料金グループコード：eo光ネット(マンション) */
	private final String PRC_GRP_CD_NET_MANTION = "04";
	/** 料金グループコード：eo光電気 */
	private final String PRC_GRP_CD_ELEC = "17";
	/** 料金グループコード：mineo */
	private final String PRC_GRP_CD_MINEO = "51";
	
	/** 契約サービス名称：電話 １番号コース */
	// ▼▼▼ IT1-2019-0000028 MOD START ▼▼▼
//	private final String SVC_KEI_NM_TEL_1 = "eo光電話　１番号コース";
	private final String SVC_KEI_NM_TEL_1 = "ｅｏ光電話　１番号コース";
	// ▲▲▲ IT1-2019-0000028 MOD END ▲▲▲
	/** 契約サービス名称：電話 ２番号コース */
	// ▼▼▼ IT1-2019-0000028 MOD START ▼▼▼
//	private final String SVC_KEI_NM_TEL_2 = "eo光電話　２番号コース";
	private final String SVC_KEI_NM_TEL_2 = "ｅｏ光電話　２番号コース";
	// ▲▲▲ IT1-2019-0000028 MOD END ▲▲▲
	/** 契約サービス名称：テレビ */
	// ▼▼▼ IT1-2019-0000028 MOD START ▼▼▼
//	private final String SVC_KEI_NM_TV = "eo光テレビ　";
	private final String SVC_KEI_NM_TV = "ｅｏ光テレビ　";
	// ▲▲▲ IT1-2019-0000028 MOD END ▲▲▲
	/** 契約サービス名称：eo電気 */
	// ▼▼▼ IT1-2019-0000028 MOD START ▼▼▼
//	private final String SVC_KEI_NM_ELEC = "eo電気";
	private final String SVC_KEI_NM_ELEC = "ｅｏ電気";
	// ▲▲▲ IT1-2019-0000028 MOD END ▲▲▲
	/** 契約サービス名称：mineo */
	// ▼▼▼ IT1-2019-0000028 MOD START ▼▼▼
//	private final String SVC_KEI_NM_MINEO = "mineo";
	private final String SVC_KEI_NM_MINEO = "ｍｉｎｅｏ";
	// ▲▲▲ IT1-2019-0000028 MOD END ▲▲▲
	
	/** 割引サービス契約ステータス：010(受付済) */
	private final String WRIB_SVC_KEI_STAT_010 = "010";
	/** 割引サービス契約ステータス：100(サービス提供中) */
	private final String WRIB_SVC_KEI_STAT_100 = "100";
	
	/** 申込種別コード：00001(新規申込) */
	private final String MSKM_SBT_CD_NEWMSKM = "00001";
	
	/** 文言表示条件識別コード：01（サービス契約） */
	private final String MNGN_DSP_JKN_SBT_CD_SVC_KEI = "01";
	/** 文言表示条件識別コード：02（サービス契約内訳） */
	private final String MNGN_DSP_JKN_SBT_CD_SVC_KEI_UCWK = "02";
	/** 文言表示条件識別コード：08（割引サービス契約） */
	private final String MNGN_DSP_JKN_SBT_CD_WRIB_SVC_KEI = "08";
	
	/** 表示順識別コード：008(ネット) */
	private final String DSP_PST_SKCD_NET = "008";
	/** 表示順識別コード：024(テレビ) */
	private final String DSP_PST_SKCD_TV = "024";
	
	/** 提供料金種別コード：001(VDSL-S方式) */
	private final String TK_PRC_SBT_CD_VDSL_S = "001";
	
	/** マンションVDSLプランコード：01(VDSL) */
	private final String MANSION_VDSL_PLAN_CD_VDSL = "01";
	/** マンションVDSLプランコード：02(VDSL-S) */
	private final String MANSION_VDSL_PLAN_CD_VDSL_S = "02";
	/** メンバー種別コード：マスター会員(10) */
	private final String MEMBER_SBT_CD_MASTER = "10";
	/** メンバー種別コード：パートナー会員(99) */
	private final String MEMBER_SBT_CD_PARTNER = "99";
	
	/** 会員種別コード：マスター会員(個人) */
	private final String MEMBER_SBT_CD_MASTER_KOJIN = "10";
	/** 会員種別コード：マスター会員(法人) */
	private final String MEMBER_SBT_CD_MASTER_HOJIN = "20";
	
	//ANK-3989-03-00 ADD START
	/** 文言表示条件識別コード(マンション光配線、マンション光コンセント方式判定) */
	private static final String MNGN_DSP_JKN_KSITE_CD_1G = "034";
	/** 文言表示条件識別コード(マンション光配線、マンション光コンセント方式の5G判定) */
	private static final String MNGN_DSP_JKN_KSITE_CD_5G = "035";
	/** 文言表示条件識別コード(マンション光配線、マンション光コンセント方式の10G判定) */
	private static final String MNGN_DSP_JKN_KSITE_CD_10G = "036";
	//ANK-3989-03-00 ADD END
	
	/**
	 * 契約情報照会(LINE)を行う。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return IRequestParameterReadWrite
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite searchKeishaLine(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ------------
		// CCマップ取得
		// ------------
		// 契約情報照会(LINE)CCマップの取得
		Map<String, Object> ccMsg = (Map<String, Object>)param.getData(fixedText);
		
		// ----------------
		// 作業用マップ取得
		// ----------------
		HashMap workmap = getCCWorkMap(param);
		
		// ------------------
		// 各種エラーチェック
		// ------------------
		// 単項目チェック
		if (!unitErrorChk(ccMsg))
		{
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return param;
		}
		
		// 関連チェック
		if (!parameterErrorChk(handle, param, fixedText, ccMsg))
		{
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return param;
		}
		
		// --------------------
		// 対象サービス情報取得
		// --------------------
		List<Map<String, String>> resultEck0011a010 = (List<Map<String, String>>)workmap.get(WORK_KEY_ECK0011A010);
		// 会員種別
		String memberSbtCd = resultEck0011a010.get(0).get(ECK0011A010CBSMsg1List.MEMBER_SBT_CD);
		String orsjgsCd = resultEck0011a010.get(0).get(ECK0011A010CBSMsg1List.ORSJGS_CD);
		// マスター会員かつ卸先事業者コードがNULL以外の場合
		if (MEMBER_SBT_CD_MASTER.equals(memberSbtCd) && !JKKStringUtil.isNullBlank(orsjgsCd))
		{
			// 会員種別をパートナー会員に変更する
			memberSbtCd = MEMBER_SBT_CD_PARTNER;
		}
		
		// 契約データ(請求契約番号に紐付くサービスのリスト)
		List<Map<String, Object>> keiDataList = new ArrayList<Map<String, Object>>();
		
		// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//		// EKK0321B012：請求契約番号一覧照会(CMP)
//		execEKK0321B012(handle, param, fixedText, (String)ccMsg.get(REQ_PARAM_SYSID));
//		
//		
//		// 請求契約番号一覧を取得
//		List<Map<String, String>> resultEkk0321b012 = (List)workmap.get(WORK_KEY_EKK0321B012);
//		
//		// 請求契約番号の件数分ループ
//		for (int i = 0; i < resultEkk0321b012.size(); i++)
//		{
//			// 契約データ(請求契約番号に紐づくサービスのマップ)
//			Map<String, Object> keiDataMap = new HashMap<String, Object>();
//			// 請求契約番号
//			String seikyKeyNo = resultEkk0321b012.get(i).get(EKK0321B012CBSMsg1List.SEIKY_KEI_NO);
//			
//			// EKK0081B042：サービス契約番号(代表)一覧照会(CMP)
//			execEKK0081B042(handle, param, fixedText, seikyKeyNo);
//			// 請求契約番号に紐づくサービス契約番号を取得
//			List<Map<String, String>> resultEkk0081b042 = (List)workmap.get(WORK_KEY_EKK0081B042);
//			
//			// 契約詳細データリスト(サービス契約番号に紐づく詳細データのマップのリスト)
//			List<Map<String, String>> keiDtailDataList = new ArrayList<Map<String, String>>();
			// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
		
		// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
		// サービス契約未存在フラグ
		boolean existKeiFlg = false;
		
		// 卸ネット単独フラグ
		boolean existOrsOnlyFlg = false;
		
		// 既に契約リストに登録済みのサービス契約番号を管理するリスト
		List<String> svcKeiNoList = new ArrayList<String>();
		
		// EKK0081B523：サービス契約識別情報照会(PMP連携用)
		execEKK0081B523(handle, param, fixedText, (String)ccMsg.get(REQ_PARAM_SYSID));
		List<Map<String, String>> resultEkk0081b523 = (List)workmap.get(WORK_KEY_EKK0081B523);
		// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
		
		// 取得サービス契約の件数分ループ
		// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
//		for(int j = 0; j < resultEkk0081b042.size(); j++)
		for(int i = 0; i < resultEkk0081b523.size(); i++)
		// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
		{
			// 契約詳細データのマップ
			Map<String, String> keiDtailDataMap = new HashMap<String, String>();
			
			// --------------------
			// マップデータ用変数
			// --------------------
			// 契約サービス名称
			String kykSvcNm = "";
			// 契約期間
			String keiPrd = "";
			// 長割有無
			String chokzuwriUm  = "";
			// 即割有無
			String sokuwribUm  = "";
			// 高速割有無
			String kosokuUm  = "";
			
			// サービス契約番号
			// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
			// サービス契約番号
//			String svcKeiNo = resultEkk0081b042.get(j).get(EKK0081B042CBSMsg1List.SVC_KEI_NO);
			String svcKeiNo = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.SVC_KEI_NO);
			// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
			
			// EKK0081A010：サービス契約一意照会
			execEKK0081A010(handle, param, fixedText, svcKeiNo);
			// サービス契約番号の詳細データを取得
			List<Map<String, String>> resultEkk0081a010 = (List)workmap.get(WORK_KEY_EKK0081A010);
			
			// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
//			// サービスコード
//			String svcCd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.SVC_CD);
//			// 料金グループコード
//			String prcGrpCd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.PRC_GRP_CD);
//			// 料金コースコード
//			String pcrsCd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.PCRS_CD);
//			// 料金プランコード
//			String pplanCd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.PPLAN_CD);
			// 文言照会に使用するデータ取得
			// サービスコード
			String svcCd = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.SVC_CD_NEW);
			// 料金グループコード
			String prcGrpCd = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.PRC_GRP_CD_NEW);
			// 料金コースコード
			String pcrsCd = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.PCRS_CD_NEW);
			// 料金プランコード
			String pplanCd = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.PPLAN_CD_NEW);
			// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
			// ▼▼▼ ANK-3355-10-00 DEL START ▼▼▼
//			// サービス開始年月日
//			String svcStatYmd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.SVC_STA_YMD);
			// ▲▲▲ ANK-3355-10-00 DEL END ▲▲▲
			
			// 卸ネットの場合は返却しない
			if (PCRS_CD_ORS_NET.equals(pcrsCd))
			{
				// 卸の契約が存在するとしてフラグを立てておく
				existOrsOnlyFlg = true;
				continue;
			}
			
			// EKK3001B010：契約内容通知書表示文言一覧照会用inputマップ
			HashMap<String, String> inputMap = new HashMap<String, String>();
			
			// 料金グループコード：02(ネット（ホーム）)、もしくは、料金グループコード：03(ネット（メゾン）)
			if (PRC_GRP_CD_NET_HOME.equals(prcGrpCd) || PRC_GRP_CD_NET_MEZON.equals(prcGrpCd))
			{
				// EKK0451B002：割引サービス契約一覧照会（サービス契約番号）
				execEKK0451B002(handle, param, fixedText, svcKeiNo);
				
				List<Map<String, String>> resultEkk0451b002 = (List)workmap.get(WORK_KEY_EKK0451B002);
				
				// 長割(長期継続割引)
				chokzuwriUm = getWribUm(JKKStrConst.WRIB_SVC_CHOKI_KEIZK_USE_WRIB, resultEkk0451b002);
				// 即割
				sokuwribUm = getWribUm(JKKStrConst.WRIB_SVC_SOKU_WRIB, resultEkk0451b002);
				// 高速割
				kosokuUm = getWribUm(JKKStrConst.WRIB_SVC_HIGH_SPEED_WRIB, resultEkk0451b002);
				
				inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI);
				inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PPLAN_CD, pplanCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_SOKU_WARI_UM, sokuwribUm);
				inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
				inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_NET);
				
				// EKK3001B010：契約内容通知書表示文言一覧照会
				execEKK3001B010(handle, param, fixedText, inputMap);
				
				List<Map<String, String>> resultEkk3001b010 = (List)workmap.get(WORK_KEY_EKK3001B010);
				
				// サービス契約名称を取得
				kykSvcNm = getKykSvcNm(resultEkk3001b010);
			}
			// 料金グループコード：04(ネット（マンション）)の場合
			else if(PRC_GRP_CD_NET_MANTION.equals(prcGrpCd))
			{
				// 提供方式契約番号
				String tkHoshikiKeiNo = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO);
				
				// EKK0891A010：提供方式契約一意照会
				execEKK0891A010(handle, param, fixedText, tkHoshikiKeiNo);
				
				List<Map<String, String>> resultEkk0891a010 = (List)workmap.get(WORK_KEY_EKK0891A010);
				
				String mansTkHskPtnCd = resultEkk0891a010.get(0).get(EKK0891A010CBSMsg1List.TK_HOSHIKI_PATTERN_CD);
				String mansTkHskCd = resultEkk0891a010.get(0).get(EKK0891A010CBSMsg1List.TK_HOSHIKI_CD);
				String manshionVdslPlanCd = resultEkk0891a010.get(0).get(EKK0891A010CBSMsg1List.TK_PRC_SBT_CD);
				//ANK-3989-03-00 ADD START
				String TonaiSpeedCd = resultEkk0891a010.get(0).get(EKK0891A010CBSMsg1List.TONAI_SPEED_CD);
				//ANK-3989-03-00 ADD END
				
				inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI);
				inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PPLAN_CD, pplanCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_MANS_TK_HSK_PTN_CD, mansTkHskPtnCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_MANSION_TK_HOSHIKI_CD, mansTkHskCd);
				if (TK_PRC_SBT_CD_VDSL_S.equals(manshionVdslPlanCd))
				{
					inputMap.put(EKK3001B010CBSMsg.KEY_MANSION_VDSL_PLAN_CD, MANSION_VDSL_PLAN_CD_VDSL_S);
				}
				else
				{
					inputMap.put(EKK3001B010CBSMsg.KEY_MANSION_VDSL_PLAN_CD, MANSION_VDSL_PLAN_CD_VDSL);
				}
				inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
				inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_NET);

				//ANK-4244-00-00 ADD START
				// 回線使用契約番号
				String kaisenUseKeiNo = resultEkk0891a010.get(0).get(EKK0891A010CBSMsg1List.KAISEN_USE_KEI_NO);
				
				// EKK0881A010：回線使用契約一意照会
				execEKK0881A010(handle, param, fixedText, kaisenUseKeiNo);
				
				List<Map<String, String>> resultEKK0881a010 = (List)workmap.get(WORK_KEY_EKK0881A010);
				String mansHhs1gOnlyFlg = resultEKK0881a010.get(0).get(EKK0881A010CBSMsg1List.HHS_1GONLY_FLG);
				//ANK-4244-00-00 ADD END

				//ANK-3989-03-00 ADD START
				//提供方式コードが"008"(光配線)かつ提供方式パターンコードが"51"(マンション光コンセント)、または、提供方式コードが"008"(光配線)かつ提供方式パターンコードが"50"(マンションONU)かつ光配線1Gのみフラグが"1"の場合
				//ANK-4244-00-00 MOD START
//				if (JKKStrConst.CD00590_OPTICAL.equals(mansTkHskCd) && JKKStrConst.TK_HOSHIKI_PATTERN_CD_51.equals(mansTkHskPtnCd))
				if (JKKStrConst.CD00590_OPTICAL.equals(mansTkHskCd) && JKKStrConst.TK_HOSHIKI_PATTERN_CD_51.equals(mansTkHskPtnCd)
						|| JKKStrConst.CD00590_OPTICAL.equals(mansTkHskCd) && JKKStrConst.TK_HOSHIKI_PATTERN_CD_50.equals(mansTkHskPtnCd) && JKKStrConst.HHS_1GONLY_FLG_1.equals(mansHhs1gOnlyFlg))
				//ANK-4244-00-00 MOD END
				{
					// 棟内速度コードが"008"（5G/5G）の場合は、
					// 文言表示条件個別指定コードが"035"(マンション光配線方式5G)のレコードをセットする
					if (JKKStrConst.TONAI_SPEED_CD_5G.equals(TonaiSpeedCd))
					{
						inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_KSITEI_CD, MNGN_DSP_JKN_KSITE_CD_5G);
					}
					// 棟内速度コードが"009"（10G/10G）の場合は、
					// 文言表示条件個別指定コードが"036"(マンション光配線方式10G)のレコードをセットする
					else if (JKKStrConst.TONAI_SPEED_CD_10G.equals(TonaiSpeedCd))
					{
						inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_KSITEI_CD, MNGN_DSP_JKN_KSITE_CD_10G);
					}
					else
					// 上記以外の棟内速度コードの場合は、
					// 文言表示条件個別指定コードが"034"(マンション光配線方式1G)のレコードをセットする
					{
						inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_KSITEI_CD, MNGN_DSP_JKN_KSITE_CD_1G);
					}
				}
				//ANK-3989-03-00 ADD END
				
				// EKK3001B010：契約内容通知書表示文言一覧照会
				execEKK3001B010(handle, param, fixedText, inputMap);
				
				List<Map<String, String>> resultEkk3001b010 = (List)workmap.get(WORK_KEY_EKK3001B010);
				
				// サービス契約名称を取得
				kykSvcNm = getKykSvcNm(resultEkk3001b010);
			}
			// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
			// サービスコード：02(電話)の場合
//			else if (JKKStrConst.CD00130_02.equals(svcCd))
//			{
			// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
			// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
			// １番号コース
//			if (PCRS_CD_TEL.equals(pcrsCd))
			else if (PCRS_CD_TEL.equals(pcrsCd))
			// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
			{
				kykSvcNm = SVC_KEI_NM_TEL_1;
			}
			// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
			// ２番号コース
//			else
			else if (PCRS_CD_TEL_2.equals(pcrsCd))
			{
				// 2番号コースでは、EKK0081B523_サービス契約識別情報一覧の仕様上、電話番号ごとに返却されるため、
				// 同じサービス契約のデータが２件取得される。
				// 複数件出力しないため、既に処理済のサービス契約番号であれば処理しない
				if (!svcKeiNoList.contains(svcKeiNo))
				{
					// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
					kykSvcNm = SVC_KEI_NM_TEL_2;
					// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
					svcKeiNoList.add(svcKeiNo);
				}
				else
				{
					continue;
				}
			}
			// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
			// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//			}
//			// サービスコード：03(テレビ)の場合
//			else if (JKKStrConst.CD00130_03.equals(svcCd))
//			{
			// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
			// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
			// 料金コースコード＝地デジ・ＢＳコースの場合
//			if (PCRS_CD_BS.equals(pcrsCd))
			else if (PCRS_CD_BS.equals(pcrsCd))
				// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
			{
				// スターチャンネルが存在するか確認する
				// EKK0451B002：割引サービス契約一覧照会（サービス契約番号）
				execEKK0451B002(handle, param, fixedText, svcKeiNo);
				
				List<Map<String, String>> resultEkk0451b002 = (List)workmap.get(WORK_KEY_EKK0451B002);
				
				// スターチャンネル
				String starCh = getWribUm(JKKStrConst.WRIB_SVC_BS_STAR_CHANNEL_SET, resultEkk0451b002);
				// スターチャンネルが存在すれば
				if (UMKBN_U.equals(starCh))
				{
					// 割引サービス契約一意照会を行う。
					Map<String, String> ekk0451b002Map = getWribSvcKeiMap(JKKStrConst.WRIB_SVC_BS_STAR_CHANNEL_SET, resultEkk0451b002);
					
					String wribSvcKeiNo = ekk0451b002Map.get(EKK0451B002CBSMsg1List.WRIB_SVC_KEI_NO);
					
					// EKK0451B002：割引サービス契約一覧
					execEKK0451A010(handle, param, fixedText, wribSvcKeiNo);
					
					List<Map<String, String>> resulEkk0451a010 = (List)workmap.get(WORK_KEY_EKK0451A010);
					
					pcrsCd = resulEkk0451a010.get(0).get(EKK0451A010CBSMsg1List.PCRS_CD);
					pplanCd = resulEkk0451a010.get(0).get(EKK0451A010CBSMsg1List.PPLAN_CD);
					
					// スターチャンネル用に契約内容通知書表示文言一覧照会のキー項目をセットする
					inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_WRIB_SVC_KEI);
					inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
					inputMap.put(EKK3001B010CBSMsg.KEY_PPLAN_CD, pplanCd);
					inputMap.put(EKK3001B010CBSMsg.KEY_WRIB_SVC_CD, JKKStrConst.WRIB_SVC_BS_STAR_CHANNEL_SET);
					inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
					inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_TV);
				}
				// スターチャンネルが存在しなければ
				else
				{
					// 契約内容通知書表示文言一覧照会のキー項目をセットする
					inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI);
					inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
					inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
					inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
					inputMap.put(EKK3001B010CBSMsg.KEY_PPLAN_CD, pplanCd);
					inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
					inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_TV);
				}
				
				// EKK3001B010：契約内容通知書表示文言一覧照会
				execEKK3001B010(handle, param, fixedText, inputMap);
				
				List<Map<String, String>> resultEkk3001b010 = (List)workmap.get(WORK_KEY_EKK3001B010);
				
				// サービス契約名称を取得
				kykSvcNm = getKykSvcNm(resultEkk3001b010);
			}
			// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//			// 料金コースコード＝再送信の場合
//			else if(PCRS_CD_SAISOUSIN.equals(pcrsCd))
//			{
//				// 再送信用に契約内容通知書表示文言一覧照会のキー項目をセットする
//				inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI);
//				inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
//				inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
//				inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
//				inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
//				inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_TV);
//				
//				// EKK3001B010：契約内容通知書表示文言一覧照会
//				execEKK3001B010(handle, param, fixedText, inputMap);
//				
//				List<Map<String, String>> resultEkk3001b010 = (List)workmap.get(WORK_KEY_EKK3001B010);
//				
//				// サービス契約名称を取得
//				kykSvcNm = getKykSvcNm(resultEkk3001b010);
//			}
			// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
			// ▼▼▼ IT1-2019-0000030 ADD START ▼▼▼
			// 料金コースコード＝再送信(地デジ・ＢＳ)の場合
			else if(PCRS_CD_SAISOUSIN_BS.equals(pcrsCd))
			{
				// 契約内容通知書表示文言一覧照会のキー項目をセットする
				inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI);
				inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PPLAN_CD, pplanCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
				inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_TV);
				
				// EKK3001B010：契約内容通知書表示文言一覧照会
				execEKK3001B010(handle, param, fixedText, inputMap);
				
				List<Map<String, String>> resultEkk3001b010 = (List)workmap.get(WORK_KEY_EKK3001B010);
				
				// サービス契約名称を取得
				kykSvcNm = getKykSvcNm(resultEkk3001b010);
			}
				// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//				// 料金コースコード＝ＫＣＮ（役務提供）
//				else if(PCRS_CD_KCN.equals(pcrsCd))
//				{
//					// ＫＣＮの場合は出力対象としない
//					continue;
//				}
				// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
				// ▲▲▲ IT1-2019-0000030 ADD END ▲▲▲
				// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
				// 料金コースコード＝ＨＤ、ＳＤ、ＨＤ（多チャンネル）、ＳＤ（多チャンネル）コースの場合(サービス内訳のデータを用いる条件)
//				else
			else if (
					   PCRS_CD_HD.equals(pcrsCd)
					|| PCRS_CD_SD.equals(pcrsCd)
					|| PCRS_CD_HD_CH.equals(pcrsCd)
					|| PCRS_CD_SD_CH.equals(pcrsCd)
					)
			// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
			{
				// ▼▼▼ IT2-2019-0000021 ADD START ▼▼▼
				// サービス契約内訳番号
				String svcKeiUcwkNo = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.SVC_KEI_UCWK_NO);
				
				// サービス契約内訳番号が入っている場合
				if (!JKKStringUtil.isNullBlank(svcKeiUcwkNo))
				{
					// ▲▲▲ IT2-2019-0000021 ADD END ▲▲▲
					// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//					// EKK0161B512：サービス契約内訳一覧照会（サービス契約番号）
//					execEKK0161B512(handle, param, fixedText, svcKeiNo);
//					
//					List<Map<String, String>> resultEkk0161b512 = (List)workmap.get(WORK_KEY_EKK0161B512);
					// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
					
					// サービス契約名称の頭につける文言
					String headKykSvcNm = "";
					// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
					// ＨＤ、ＳＤ、ＨＤ（多チャンネル）、ＳＤ（多チャンネル）コースの場合
//					if (
//							   PCRS_CD_HD.equals(pcrsCd)
//							|| PCRS_CD_SD.equals(pcrsCd)
//							|| PCRS_CD_HD_CH.equals(pcrsCd)
//							|| PCRS_CD_SD_CH.equals(pcrsCd)
//							)
//					{
					// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
					headKykSvcNm = SVC_KEI_NM_TV;
					// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//					}
					
//					for (int k = 0; k < resultEkk0161b512.size(); k++)
//					{
//						// TV用契約名称
//						String kykSvcNmTv = "";
//						// TV用サービス契約期間
//						String keiPrdTv = "";
//						// TV用契約詳細データマップ
//						Map<String, String> keiDtailDataTvMap = new HashMap<String, String>();
//					// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
				// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
//				// 料金コースコード
//				pcrsCd = resultEkk0161b512.get(k).get(EKK0161B512CBSMsg1List.PCRS_CD);
//				// 料金プランコード
//				pplanCd = resultEkk0161b512.get(k).get(EKK0161B512CBSMsg1List.PPLAN_CD);
					// 料金コースコード
					pcrsCd = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.UCWK_PCRS_CD_NEW);
					// 料金プランコード
					pplanCd = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.UCWK_PPLAN_CD_NEW);
					// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
				
					// 料金プランコードが設定不要な料金コースの場合
					if (PCRS_CD_SMART_COMPACT.equals(pcrsCd)
						|| PCRS_CD_SMART_BASIC.equals(pcrsCd)
						|| PCRS_CD_SMART_PREMIUM.equals(pcrsCd))
					{
						// 料金プランコードを設定せず、契約内容通知書表示文言一覧照会のキー項目をセットする
						inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI_UCWK);
						inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
						inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
						inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
						inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
						inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_TV);
					}
					else
					{
						// 契約内容通知書表示文言一覧照会のキー項目をセットする
						inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI_UCWK);
						inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
						inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
						inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
						inputMap.put(EKK3001B010CBSMsg.KEY_PPLAN_CD, pplanCd);
						inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
						inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_TV);
					}
					
					// EKK3001B010：契約内容通知書表示文言一覧照会
					execEKK3001B010(handle, param, fixedText, inputMap);
					
					List<Map<String, String>> resultEkk3001b010 = (List)workmap.get(WORK_KEY_EKK3001B010);
					
					// サービス契約名称を取得
						// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
//					kykSvcNmTv = headKykSvcNm + getKykSvcNm(resultEkk3001b010);
					kykSvcNm = headKykSvcNm + getKykSvcNm(resultEkk3001b010);
						// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
						
					// サービス契約内訳番号
					// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
//					String svcKeiUcwkNo = resultEkk0161b512.get(k).get(EKK0161B512CBSMsg1List.SVC_KEI_UCWK_NO);
					// ▼▼▼ IT2-2019-0000021 DEL START ▼▼▼
//					String svcKeiUcwkNo = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.SVC_KEI_UCWK_NO);
					// ▲▲▲ IT2-2019-0000021 DEL START ▲▲▲
					// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
					// ▼▼▼ ANK-3355-10-00 DEL START ▼▼▼
//					// EKK0161A010：サービス契約内訳一意照会
//					execEKK0161A010(handle, param, fixedText, svcKeiUcwkNo);
//					
//					List<Map<String, String>> resultEkk0161a010 = (List)workmap.get(WORK_KEY_EKK0161A010);
//					
//					// サービス開始日
//					svcStatYmd = resultEkk0161a010.get(0).get(EKK0161A010CBSMsg1List.SVC_STA_YMD);
					// ▲▲▲ ANK-3355-10-00 DEL END ▲▲▲
						// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//						// サービス契約期間を取得
//						keiPrdTv = getKeiPrd(param, svcStatYmd);
//						
//						// --------------------
//						// マップデータセット
//						// --------------------
//						// 契約詳細データマップに追加
//						keiDtailDataTvMap.put(RES_PARAM_KYK_SVC_NM, kykSvcNmTv);
//						keiDtailDataTvMap.put(RES_PARAM_KEI_PRD, keiPrdTv);
//						keiDtailDataTvMap.put(RES_PARAM_SOKUWRIB_UM, sokuwribUm);
//						keiDtailDataTvMap.put(RES_PARAM_CHOKZUWRI_UM, chokzuwriUm);
//						keiDtailDataTvMap.put(RES_PARAM_KOSOKU_UM, kosokuUm);
//						
//						// 契約詳細データリストに追加
//						keiDtailDataList.add(keiDtailDataTvMap);
//						// inputマップを初期化
//						inputMap = new HashMap<String, String>();
//					}
//					// 以降の処理は行わず、次のデータへ移る
//					continue;
//				}
			// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
					// ▼▼▼ IT2-2019-0000021 ADD START ▼▼▼
				}
				// サービス契約内訳番号が入っていないとき
				else
				{
					kykSvcNm = resultEkk0081b523.get(i).get(EKK0081B523CBSMsg1List.PCRS_NM_NEW);
				}
				// ▲▲▲ IT2-2019-0000021 ADD END ▲▲▲
			}
			// ANK-4592-00-00 ADD START
			// 料金コースコード＝ＣＳコースの場合
			else if (PCRS_CD_CS_BASIC.equals(pcrsCd) || PCRS_CD_CS_PREMIUM.equals(pcrsCd))
			{
				// 契約内容通知書表示文言一覧照会のキー項目をセットする
				inputMap.put(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, MNGN_DSP_JKN_SBT_CD_SVC_KEI);
				inputMap.put(EKK3001B010CBSMsg.KEY_SVC_CD, svcCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PRC_GRP_CD, prcGrpCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PCRS_CD, pcrsCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_PPLAN_CD, pplanCd);
				inputMap.put(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, MSKM_SBT_CD_NEWMSKM);
				inputMap.put(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, DSP_PST_SKCD_TV);
				
				// EKK3001B010：契約内容通知書表示文言一覧照会
				execEKK3001B010(handle, param, fixedText, inputMap);
				
				List<Map<String, String>> resultEkk3001b010 = (List)workmap.get(WORK_KEY_EKK3001B010);
				
				// サービス契約名称の接頭語を付与する
				kykSvcNm = SVC_KEI_NM_TV + getKykSvcNm(resultEkk3001b010);
			}
			// ANK-4592-00-00 ADD END
			// 料金グループコード：17(電気)の場合
			else if (PRC_GRP_CD_ELEC.equals(prcGrpCd))
			{
				// ▼▼▼ IT1-2019-0000019 ADD START ▼▼▼
				try
				{
				// ▲▲▲ IT1-2019-0000019 ADD END ▲▲▲
					// EKKA0040001：eo電気契約一意照会
					execEKKA0040001(handle, param, fixedText, svcKeiNo);
					
					List<Map<String, String>> resultEkka0040001 = (List)workmap.get(WORK_KEY_EKKA0040001);
					
					// データが取得できなかった場合、規定値を返却する。
					if (resultEkka0040001 == null || resultEkka0040001.size() <= 0)
					{
						kykSvcNm = SVC_KEI_NM_ELEC;
					}
					else
					{
						kykSvcNm = resultEkka0040001.get(0).get(EKKA0040001CBSMsg2List.RYKN_MENU_NM);
					}
				// ▼▼▼ IT1-2019-0000019 ADD START ▼▼▼
				}
				catch (Throwable e)
				{
					// 異常終了の場合、規定値を返却する。
					kykSvcNm = SVC_KEI_NM_ELEC;
				}
				// ▲▲▲ IT1-2019-0000019 ADD END ▲▲▲
			}
			// 料金グループコード：51(mineo)の場合
			else if (PRC_GRP_CD_MINEO.equals(prcGrpCd))
			{
				kykSvcNm = SVC_KEI_NM_MINEO;
			}
			// 上記以外のデータの場合
			else
			{
				continue;
			}
			
			// ▼▼▼ ANK-3355-10-00 MOD START ▼▼▼
//			// サービス契約期間を取得
//			keiPrd = getKeiPrd(param, svcStatYmd);
			// ネット(ホーム)の場合のみ期間の計算を行う。
			if (PRC_GRP_CD_NET_HOME.equals(prcGrpCd))
			{
				// 長割情報照会CCを呼び出す
				execJKKChowriInfoCC(handle, param, fixedText, svcKeiNo);
				Map<String, Object> resultJkkChowriInfoCC = (Map<String, Object>) workmap.get(WORK_KEY_JKKChowriInfoCC);
				
				// 長割情報照会で取得したご利用開始日とご利用継続期間から、契約期間を出力するか判断する。
				// ご利用開始日
				String gryuStatDate = JKKStringUtil.nullToBlank((String) resultJkkChowriInfoCC.get("gryu_kis_b"));
				// ご利用継続期間
				String gryuKizkKkn = JKKStringUtil.nullToBlank((String) resultJkkChowriInfoCC.get("gryu_kizk_kkn"));
				
				// ご利用開始日が運用日以前、かつご利用継続期間が"0"以上の場合、契約期間を表示する。
				if (
						!JKKStringUtil.isNullBlank(gryuStatDate) &&
						!JKKStringUtil.isNullBlank(gryuKizkKkn) &&
						gryuStatDate.compareTo(JCCBPCommon.getOpeDate(null)) <= 0 &&
						gryuKizkKkn.compareTo("0") >= 0
					)
				{
					keiPrd = gryuKizkKkn;
				}
			}
			// ▲▲▲ ANK-3355-10-00 MOD END ▲▲▲
			
			// --------------------
			// マップデータセット
			// --------------------
			// 契約詳細データマップに追加
			keiDtailDataMap.put(RES_PARAM_KYK_SVC_NM, kykSvcNm);
			keiDtailDataMap.put(RES_PARAM_KEI_PRD, keiPrd);
			keiDtailDataMap.put(RES_PARAM_SOKUWRIB_UM, sokuwribUm);
			keiDtailDataMap.put(RES_PARAM_CHOKZUWRI_UM, chokzuwriUm);
			keiDtailDataMap.put(RES_PARAM_KOSOKU_UM, kosokuUm);
			
			// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
			// EKK0321B005：課金先一覧照会（サービス契約番号）
			execEKK0321B005(handle, param, fixedText, svcKeiNo);
			// 課金先データを取得
			List<Map<String, String>> resultEkk0321b005 = (List)workmap.get(WORK_KEY_EKK0321B005);
			// 請求契約番号
			String seikyKeyNo = resultEkk0321b005.get(0).get(EKK0321B012CBSMsg1List.SEIKY_KEI_NO);
			
			// データ挿入フラグ
			boolean noEntFlg = true;
			
			// 契約リストの中身を確認する。
			for (int j = 0; j < keiDataList.size(); j++)
			{
				// 契約データリストから契約データマップの請求契約番号を取得する
				String tmpSeikyuKeiNo = (String)keiDataList.get(j).get(RES_PARAM_SEIKY_KEI_NO);
				
				// 取得した請求契約番号と契約データマップの請求契約番号が同じ場合
				if (seikyKeyNo.equals(tmpSeikyuKeiNo))
				{
					// 既に請求契約番号に紐付く契約明細データリストが存在しているので、
					// そのリストを取得して作成した契約明細データマップを追加する。
					// 契約明細データリスト
					List<Map<String, String>> keiDtailDataList = (List<Map<String, String>>) keiDataList.get(j).get(RES_PARAM_KEI_DTAIL_DATA_LIST);
					keiDtailDataList.add(keiDtailDataMap);
					noEntFlg = false;
					break;
				}
			}
			// まだ挿入されていなければ
			if(noEntFlg)
			{
				// 新しく契約明細データリストを作成
				// 契約明細データリスト
				List<Map<String, String>> keiDtailDataList = new ArrayList<Map<String, String>>();
				// 契約データマップ
				Map<String, Object> keiDataMap = new HashMap<String, Object>();
				// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
				// 契約詳細データリストに追加
				keiDtailDataList.add(keiDtailDataMap);
				// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//		}
//		// 契約データ明細リストにデータが入っている場合
//		if (keiDtailDataList != null && keiDtailDataList.size() > 0)
//		{
				// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
				// 契約データマップに追加
				keiDataMap.put(RES_PARAM_SEIKY_KEI_NO, seikyKeyNo);
				keiDataMap.put(RES_PARAM_KEI_DTAIL_DATA_LIST, keiDtailDataList);
				
				// 契約データリストに追加
				keiDataList.add(keiDataMap);
			}
			// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
			// 出力対象の契約が存在しているとしてtrueに設定
			existKeiFlg = true;
			// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
		}
		
		// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
		// 卸のほかに出力対象のサービス契約が存在しない場合エラー
		if (existOrsOnlyFlg && !existKeiFlg) 
		{
			// 卸単独ネットのみエラー
			setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2004, "");
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return param;
		}
		// 卸も含め、出力対象のサービスが存在しない場合はエラー
		if (!existKeiFlg)
		{
			// 対象サービス契約存在チェックエラー
			setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2005, "");
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			return param;
		}
		
		// 契約データリストをソートする。
		Collections.sort(keiDataList, new KeiDatalistSort());
		// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲
		
		// --------------------
		// マップデータセット
		// --------------------
		Map<String, Object> bodyMap = new HashMap<String, Object>();
		bodyMap.put(RES_PARAM_MEMBER_SBT, memberSbtCd);
		bodyMap.put(RES_PARAM_KEI_DATA_LIST, keiDataList);
		
		ccMsg.put(CC_PARAM_BODY_INFO, bodyMap);
		ccMsg.put(CC_PARAM_ERROR_INFO, new ArrayList<Map<String, String>>());
		
		return param;
	}
	
	/**
	 * 作業項目情報の取得を行います。<br>
	 * 作業項目情報がない場合は作成します。<br>
	 * 
	 * @param workMap 作業領域
	 * @return 作業項目情報
	 */
	@SuppressWarnings("unchecked")
	private HashMap getCCWorkMap(IRequestParameterReadWrite param) throws RequestParameterException {
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		HashMap clarisWorkMap = (HashMap)workMap.get(WORK_MAP_NAME);
		if (clarisWorkMap == null)
		{
			clarisWorkMap = new HashMap();
			workMap.put(WORK_MAP_NAME, clarisWorkMap);
		}
		return clarisWorkMap;
	}
	
	/**
	 * 単項目エラーチェックを行います。
	 * 
	 * @param ccMsg 
	 * @return
	 */
	private boolean unitErrorChk(Map<String, Object> ccMsg)
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
		String itemValue = null;
		
		// SYSID
		itemValue = (String)ccMsg.get(REQ_PARAM_SYSID);
		// 必須チェック
		if ( itemValue == null || "".equals(itemValue) )
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap(REQ_PARAM_SYSID));
		}
		else if (!HalfCharCheck.isEnNumber1Check(itemValue))
		{
			// 属性チェックエラー
			errList.add(getFormErrInfMap(REQ_PARAM_SYSID));
		}
		else if (!LengthCheck.isLength1Check(itemValue, 10))
		{
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(REQ_PARAM_SYSID));
		}
		
		// エラーが存在する場合
		if (errList.size() > 0)
		{
			// body用マップ
			Map<String, Object> bodyMap = new HashMap<String, Object>();
			// 契約データリスト
			List<Map<String, Object>> keiDataList = new ArrayList<Map<String, Object>>();
			// 契約データマップ
			Map<String, Object> keiDataMap = new HashMap<String, Object>();
			// 契約明細データリスト
			List<Map<String, String>> keiDtailDataList = new ArrayList<Map<String, String>>();
			// 契約明細データマップ
			Map<String, String> keiDtailDataMap = new HashMap<String, String>();
			
			// 契約詳細データリスト作成
			// 契約サービス名称
			keiDtailDataMap.put(RES_PARAM_KYK_SVC_NM, "");
			// 契約期間
			keiDtailDataMap.put(RES_PARAM_KEI_PRD, "");
			// 長割有無
			keiDtailDataMap.put(RES_PARAM_CHOKZUWRI_UM, "");
			// 即割有無
			keiDtailDataMap.put(RES_PARAM_SOKUWRIB_UM, "");
			// 高速割有無
			keiDtailDataMap.put(RES_PARAM_KOSOKU_UM, "");
			
			// 契約明細データマップ
			keiDtailDataList.add(keiDtailDataMap);
			
			// 契約データリスト作成
			// 請求契約番号
			keiDataMap.put(RES_PARAM_SEIKY_KEI_NO, "");
			// 契約データマップ
			keiDataMap.put(RES_PARAM_KEI_DTAIL_DATA_LIST, keiDtailDataList);
			
			// 契約データリスト
			keiDataList.add(keiDataMap);
			
			// body用マップ作成
			// 会員種別コード
			bodyMap.put(RES_PARAM_MEMBER_SBT, "");
			bodyMap.put(RES_PARAM_KEI_DATA_LIST, keiDataList);
			
			ccMsg.put(CC_PARAM_BODY_INFO, bodyMap);
			ccMsg.put(CC_PARAM_ERROR_INFO, errList);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 関連チェックエラーを行います。
	 * 
	 * @param ccMsg
	 * @return
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean parameterErrorChk(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, Map<String, Object> ccMsg) throws Throwable {
		
		HashMap workmap = getCCWorkMap(param);
		
		// ECK0011A010:お客さま一意照会
		execECK0011A010(handle, param, fixedText, (String)ccMsg.get(REQ_PARAM_SYSID));
		
		// お客さま一意照会の結果を取得する。
		// データリスト
		List<Map<String, String>> resultEck0011a010List = (List<Map<String, String>>)workmap.get(WORK_KEY_ECK0011A010);

		// お客さま一意照会の結果がない場合
		if(resultEck0011a010List == null || resultEck0011a010List.size() == 0)
		{
			// SYSID存在チェックエラー
			setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2001, "");
			return false;
		}
		else
		{
			HashMap dataChildList = (HashMap)resultEck0011a010List.get(0);
			
			// 会員種別コード
			String memberSbtCd = (String)dataChildList.get(ECK0011A010CBSMsg1List.MEMBER_SBT_CD);
			// マスター会員（個人）:10、マスター会員（法人）:20でなければエラー
			if (memberSbtCd != null && !(MEMBER_SBT_CD_MASTER_KOJIN.equals(memberSbtCd) || MEMBER_SBT_CD_MASTER_HOJIN.equals(memberSbtCd)))
			{
				// 会員種別コードチェックエラー
				setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2002, "");
				return false;
			}
			
			// お客様入退会コード
			String custNtaikaiCd = (String)dataChildList.get(ECK0011A010CBSMsg1List.CUST_NTAIKAI_CD);
			// お客様入退会コード:1であればエラー
			if (custNtaikaiCd != null && (CUST_NTAIKAICD_TAIKAI.equals(custNtaikaiCd)))
			{
				// 会員ステータスチェックエラー
				setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2003, "");
				return false;
			}
			
			// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//			// EKK0321B012：請求契約番号一覧照会(CMP)
//			execEKK0321B012(handle, param, fixedText, (String)ccMsg.get(REQ_PARAM_SYSID));
//			
//			// 請求契約番号一覧を取得
//			List<Map<String, String>> resultEkk0321b012 = (List)workmap.get(WORK_KEY_EKK0321B012);
//			
//			// サービス契約未存在フラグ
//			boolean existKeiFlg = true;
//			
//			// 卸ネット単独フラグ
//			boolean existOrsOnlyFlg = true;
//			
//			// 請求契約番号一覧を取得できた場合
//			if (resultEkk0321b012 != null)
//			{
//				// 請求契約番号の件数分ループ
//				for (int i = 0; i < resultEkk0321b012.size(); i++)
//				{
//					// 請求契約番号
//					String seikyKeyNo = resultEkk0321b012.get(i).get(EKK0321B012CBSMsg1List.SEIKY_KEI_NO);
//					
//					// EKK0081B042：サービス契約番号(代表)一覧照会(CMP)
//					execEKK0081B042(handle, param, fixedText, seikyKeyNo);
//					// 請求契約番号に紐づくサービス契約番号を取得
//					List<Map<String, String>> resultEkk0081b042 = (List)workmap.get(WORK_KEY_EKK0081B042);
//					
//					// データが存在する場合
//					if (resultEkk0081b042 != null && resultEkk0081b042.size() > 0)
//					{
//						// サービス契約番号の件数分ループ
//						for(int j = 0; j < resultEkk0081b042.size(); j++)
//						{
//							// サービス契約番号
//							String svcKeiNo = resultEkk0081b042.get(j).get(EKK0081B042CBSMsg1List.SVC_KEI_NO);
//							
//							// EKK0081A010：サービス契約一意照会
//							execEKK0081A010(handle, param, fixedText, svcKeiNo);
//							// サービス契約番号の詳細データを取得
//							List<Map<String, String>> resultEkk0081a010 = (List)workmap.get(WORK_KEY_EKK0081A010);
//							
//							// サービスコード
//							String svcCd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.SVC_CD);
//							// 料金コースコード
//							String pcrsCd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.PCRS_CD);
//							// 料金グループコード
//							String prcGrpCd = resultEkk0081a010.get(0).get(EKK0081A010CBSMsg1List.PRC_GRP_CD);
//							
//							// 出力対象サービス契約の場合
//							if (PRC_GRP_CD_NET_HOME.equals(prcGrpCd) ||
//								 PRC_GRP_CD_NET_MEZON.equals(prcGrpCd) || 
//								 PRC_GRP_CD_NET_MANTION.equals(prcGrpCd) ||
//								 JKKStrConst.CD00130_02.equals(svcCd) ||
//								 JKKStrConst.CD00130_03.equals(svcCd) ||
//								 PRC_GRP_CD_ELEC.equals(prcGrpCd)  ||
//								 PRC_GRP_CD_MINEO.equals(prcGrpCd))
//							{
//								// サービス契約が存在すると判定する
//								existKeiFlg = false;
//								// 料金コースコードが卸ネット契約以外の場合
//								if (!PCRS_CD_ORS_NET.equals(pcrsCd))
//								{
//									// 卸ネット単独ではないと判定する
//									existOrsOnlyFlg = false;
//								}
//							}
//						}
//					}
//				}
//			}
//			// サービス契約が存在しない場合
//			if (existKeiFlg)
//			{
//				// 対象サービス契約存在チェックエラー
//				setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2005, "");
//				return false;
//			}
//			// 卸ネット契約しかない場合
//			if (existOrsOnlyFlg)
//			{
//				// 卸単独ネットのみエラー
//				setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2004, "");
//				return false;
//			}
			// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
		}
		
		return true;
	}
	
	/**
	 * 割引サービス契約で取得したデータから、指定の割引サービスのステータスを確認し、
	 * 割引が有効か無効か判定したものを返却します。
	 * 
	 * @return true:有効 false:無効
	 */
	private String getWribUm(String keyWribSvcCd, List<Map<String, String>> resultEkk0451b002)
	{
		if(resultEkk0451b002 != null)
		{
			for (int i = 0; i < resultEkk0451b002.size(); i++ )
			{
				String wribSvcCd = resultEkk0451b002.get(i).get(EKK0451B002CBSMsg1List.WRIB_SVC_CD);
				// 引数で指定した割引サービス出なければ
				if (!wribSvcCd.equals(keyWribSvcCd))
				{
					continue;
				}
				
				// 割引契約ステータス
				String wribStat = resultEkk0451b002.get(i).get(EKK0451B002CBSMsg1List.WRIB_SVC_KEI_STAT);
				
				if (WRIB_SVC_KEI_STAT_010.equals(wribStat) || WRIB_SVC_KEI_STAT_100.equals(wribStat))
				{
					return UMKBN_U;
				}
			}
		}
		return UMKBN_N;
	}
	/**
	 * 割引サービス契約で取得したデータから、指定の割引サービスのデータを取得します。
	 * 
	 * @param keyWribSvcCd
	 * @param resultEkk0451b002
	 * @return
	 */
	private Map<String, String> getWribSvcKeiMap(String keyWribSvcCd, List<Map<String, String>> resultEkk0451b002){
		
		if(resultEkk0451b002 != null)
		{
			for (int i = 0; i < resultEkk0451b002.size(); i++)
			{
				String wribSvcCd = resultEkk0451b002.get(i).get(EKK0451B002CBSMsg1List.WRIB_SVC_CD);
				// 引数で指定した割引サービス出なければ
				if (!wribSvcCd.equals(keyWribSvcCd))
				{
					continue;
				}
				
				// 割引契約ステータス
				String wribStat = resultEkk0451b002.get(i).get(EKK0451B002CBSMsg1List.WRIB_SVC_KEI_STAT);
				
				if (WRIB_SVC_KEI_STAT_010.equals(wribStat) || WRIB_SVC_KEI_STAT_100.equals(wribStat))
				{
					return resultEkk0451b002.get(i);
				}
			}
		}
		return new HashMap<String, String>();
	}
	
	/**
	 * 取得した契約内容通知書表示文言の結果から名称を取得します。
	 * 名称が取得できなかった場合、空を返します。
	 * 
	 * @param resultEkk3001b010
	 * @return
	 */
	private String getKykSvcNm (List<Map<String, String>> resultList)
	{
		String kykSvcNm = "";
		// サービス契約名称を取得
		if(resultList != null && resultList.size() > 0)
		{
			kykSvcNm = JKKStringUtil.nullToBlank(resultList.get(0).get(EKK3001B010CBSMsg1List.DSP_MNGN));
		}
		
		return kykSvcNm;
	}
	
	// ▼▼▼ ANK-3355-10-00 DEL START ▼▼▼
//	/**
//	 * 運用年月日とサービス開始日から契約期間（月数）を取得します。
//	 * 
//	 * @param param 
//	 * @param svcStatYmd
//	 * @return
//	 * @throws RequestParameterException 
//	 * @throws ParseException 
//	 */
//	private String getKeiPrd (IRequestParameterReadWrite param, String svcStatYmd) throws RequestParameterException, ParseException
//	{
//		// サービス契約開始年月日が空なら
//		if (JKKStringUtil.isNullEmpty(svcStatYmd))
//		{
//			return "0";
//		}
//		
//		// 運用日付を取得
//		String unyoYmd = JCCBPCommon.getOpeDate(null);
//		// 運用日付とサービス開始年月日を比較し、その月数差を取得する
//		
//		int yearFrom = Integer.parseInt(svcStatYmd.substring(0, 4));		// 年
//		int monthFrom = Integer.parseInt(svcStatYmd.substring(4, 6));		// 月
//		int dayFrom = Integer.parseInt(svcStatYmd.substring(6, 8));		// 日
//		int yearTo = Integer.parseInt(unyoYmd.substring(0, 4)); 		// 年
//		int monthTo = Integer.parseInt(unyoYmd.substring(4, 6)); 	// 月
//		int dayTo = Integer.parseInt(unyoYmd.substring(6, 8)); 	// 日
//		
//		int yearDiff = yearTo - yearFrom; 		// 年差
//		int monthDiff = monthTo - monthFrom; 	// 月差
//		int dayDiff = dayTo - dayFrom;			// 日差
//		
//		monthDiff += yearDiff * 12; // 年差を月差に換算して全体の月差を算出
//		
//		// 月差がマイナス値の場合
//		if (monthDiff < 0)
//		{ 
//			return "0";
//		} 
//		// 月差がプラス値の場合
//		else
//		{ 
//			// 日差がマイナスの場合
//			if (dayDiff < 0)
//			{
//				// 月差を1減らす
//				monthDiff -= 1;
//			}
//		}
//		return String.valueOf(monthDiff);
//	}
	// ▲▲▲ ANK-3355-10-00 DEL END ▲▲▲
	
	/**
	 * レスポンス項目を設定します。
	 * <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>();
		// 契約データリスト
		List<Map<String, Object>> keiDataList = new ArrayList<Map<String, Object>>();
		// 契約データマップ
		Map<String, Object> keiDataMap = new HashMap<String, Object>();
		// 契約明細データリスト
		List<Map<String, String>> keiDtailDataList = new ArrayList<Map<String, String>>();
		// 契約明細データマップ
		Map<String, String> keiDtailDataMap = new HashMap<String, String>();
		
		errList.add(getCommonErrInfMap(errCode, errMessage));
		
		// 契約詳細データリスト作成
		// 契約サービス名称
		keiDtailDataMap.put(RES_PARAM_KYK_SVC_NM, "");
		// 契約期間
		keiDtailDataMap.put(RES_PARAM_KEI_PRD, "");
		// 長割有無
		keiDtailDataMap.put(RES_PARAM_CHOKZUWRI_UM, "");
		// 即割有無
		keiDtailDataMap.put(RES_PARAM_SOKUWRIB_UM, "");
		// 高速割有無
		keiDtailDataMap.put(RES_PARAM_KOSOKU_UM, "");
		
		// 契約明細データマップ
		keiDtailDataList.add(keiDtailDataMap);
		
		// 契約データリスト作成
		// 請求契約番号
		keiDataMap.put(RES_PARAM_SEIKY_KEI_NO, "");
		// 契約データマップ
		keiDataMap.put(RES_PARAM_KEI_DTAIL_DATA_LIST, keiDtailDataList);
		
		// 契約データリスト
		keiDataList.add(keiDataMap);
		
		// body用マップ作成
		// 会員種別コード
		bodyMap.put(RES_PARAM_MEMBER_SBT, "");
		bodyMap.put(RES_PARAM_KEI_DATA_LIST, keiDataList);
		
		ccMsg.put(CC_PARAM_BODY_INFO, bodyMap);
		ccMsg.put(CC_PARAM_ERROR_INFO, errList);
	}
	
	/**
	 * ECK0011A010:お客さま一意照会 を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param ccMsg 
	 * @param ccMsg 
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execECK0011A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String sysid)throws Throwable
	{
		
		// 上りマッピング
		Object[][] eck0011a010In = {
				  {ECK0011A010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0011A010}
				, {ECK0011A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
				, {ECK0011A010CBSMsg.KEY_SYSID, sysid}
				, {ECK0011A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null)}
		};
		
		// SC実行
		CAANMsg[] eck0011a010MsgList = callSC(handle,  param, eck0011a010In,
				fixedText, new ECK0011A010CBSMsg().getContents()).getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
		
		// 下りマッピング
		String[] eck0011a010Out = {
				  ECK0011A010CBSMsg1List.MEMBER_SBT_CD
				, ECK0011A010CBSMsg1List.CUST_NTAIKAI_CD
				, ECK0011A010CBSMsg1List.ORSJGS_CD
		};
		
		// 下りマッピング
		createOutMap(param, eck0011a010MsgList, eck0011a010Out, WORK_KEY_ECK0011A010);
	}
	
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/**
//	 * EKK0321B012：請求契約番号一覧照会(CMP) を呼び出す。
//	 * 上りマッピング、実行、下りマッピングまで行います。
//	 * 実行結果はworkmapに格納されます。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @param fixedText
//	 * @param campaign_cd
//	 * @return
//	 * @throws Throwable
//	 */
//	private void execEKK0321B012(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String sysid)throws Throwable
//	{
//		
//		// 上りマッピング
//		Object[][] ekk0321b012In = {
//				  {EKK0321B012CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0321B012}
//				, {EKK0321B012CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
//				, {EKK0321B012CBSMsg.KEY_SYSID, sysid}
//		};
//		
//		// SC実行
//		CAANMsg[] ekk0321b012MsgList = callSC(handle,  param, ekk0321b012In,
//				fixedText, new EKK0321B012CBSMsg().getContents()).getCAANMsgList(EKK0321B012CBSMsg.EKK0321B012CBSMSG1LIST);
//		
//		// 下りマッピング
//		String[] ekk0321b012Out = {
//				  EKK0321B012CBSMsg1List.SEIKY_KEI_NO
//		};
//		
//		// 下りマッピング
//		createOutMap(param, ekk0321b012MsgList, ekk0321b012Out, WORK_KEY_EKK0321B012);
//	}
//	
//	/**
//	 * EKK0081B042：サービス契約番号(代表)一覧照会(CMP) を呼び出す。
//	 * 上りマッピング、実行、下りマッピングまで行います。
//	 * 実行結果はworkmapに格納されます。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @param fixedText
//	 * @param campaign_cd
//	 * @return
//	 * @throws Throwable
//	 */
//	private void execEKK0081B042(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String seikyuKeiNo)throws Throwable
//	{
//
//		// 上りマッピング
//		Object[][] ekk0081b042In = {
//				  {EKK0081B042CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B042}
//				, {EKK0081B042CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
//				, {EKK0081B042CBSMsg.KEY_SEIKY_KEI_NO, seikyuKeiNo}
//		};
//		
//		// SC実行
//		CAANMsg[] ekk0081b042MsgList = callSC(handle,  param, ekk0081b042In,
//				fixedText, new EKK0081B042CBSMsg().getContents()).getCAANMsgList(EKK0081B042CBSMsg.EKK0081B042CBSMSG1LIST);
//		
//		// 下りマッピング
//		String[] ekk0081b042Out = {
//				  EKK0081B042CBSMsg1List.SVC_KEI_NO
//		};
//		
//		// 下りマッピング
//		createOutMap(param, ekk0081b042MsgList, ekk0081b042Out, WORK_KEY_EKK0081B042);
//	}
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	
	/**
	 * EKK0081A010：サービス契約一意照会 を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execEKK0081A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)throws Throwable
	{

		// 上りマッピング
		Object[][] ekk0081a010In = {
				  {EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010}
				, {EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
				, {EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
				, {EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null)}
		};
		
		// SC実行
		CAANMsg[] ekk0081a010MsgList = callSC(handle,  param, ekk0081a010In,
				fixedText, new EKK0081A010CBSMsg().getContents()).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk0081a010Out = {
				  EKK0081A010CBSMsg1List.SVC_CD
				, EKK0081A010CBSMsg1List.PRC_GRP_CD
				, EKK0081A010CBSMsg1List.PCRS_CD
				, EKK0081A010CBSMsg1List.PPLAN_CD
				, EKK0081A010CBSMsg1List.SVC_STA_YMD
				, EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO
		};
		
		// 下りマッピング
		createOutMap(param, ekk0081a010MsgList, ekk0081a010Out, WORK_KEY_EKK0081A010);
	}
	
	// ▼▼▼ IT2-2019-0000015 DEL START ▼▼▼
//	/**
//	 * EKK0161B512:サービス契約内訳一覧照会（サービス契約番号） を呼び出す。
//	 * 上りマッピング、実行、下りマッピングまで行います。
//	 * 実行結果はworkmapに格納されます。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @param fixedText
//	 * @param campaign_cd
//	 * @return
//	 * @throws Throwable
//	 */
//	private void execEKK0161B512(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)throws Throwable
//	{
//
//		// 上りマッピング
//		Object[][] ekk0161b512In = {
//				  {EKK0161B512CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161B512}
//				, {EKK0161B512CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
//				, {EKK0161B512CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
//		};
//		
//		// SC実行
//		CAANMsg[] ekk0161b512MsgList = callSC(handle,  param, ekk0161b512In,
//				fixedText, new EKK0161B512CBSMsg().getContents()).getCAANMsgList(EKK0161B512CBSMsg.EKK0161B512CBSMSG1LIST);
//		
//		// 下りマッピング
//		String[] ekk0161b512Out = {
//				  EKK0161B512CBSMsg1List.SVC_KEI_UCWK_NO
//				, EKK0161B512CBSMsg1List.PCRS_CD
//				, EKK0161B512CBSMsg1List.PPLAN_CD
//		};
//		
//		// 下りマッピング
//		createOutMap(param, ekk0161b512MsgList, ekk0161b512Out, WORK_KEY_EKK0161B512);
//	}
	// ▲▲▲ IT2-2019-0000015 DEL END ▲▲▲
	
	/**
	 * EKK3001B010：契約内容通知書表示文言一覧照会 を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execEKK3001B010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, String> inputMap )throws Throwable
	{

		// 上りマッピング
		
		Object[][] ekk3001b010In = {
				  {EKK3001B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK3001B010}
				, {EKK3001B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD, inputMap.get(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_SBT_CD)}
				, {EKK3001B010CBSMsg.KEY_SVC_CD, inputMap.get(EKK3001B010CBSMsg.KEY_SVC_CD)}
				, {EKK3001B010CBSMsg.KEY_PRC_GRP_CD, inputMap.get(EKK3001B010CBSMsg.KEY_PRC_GRP_CD)}
				, {EKK3001B010CBSMsg.KEY_PCRS_CD, inputMap.get(EKK3001B010CBSMsg.KEY_PCRS_CD)}
				, {EKK3001B010CBSMsg.KEY_PPLAN_CD, inputMap.get(EKK3001B010CBSMsg.KEY_PPLAN_CD)}
				, {EKK3001B010CBSMsg.KEY_SOKU_WARI_UM, inputMap.get(EKK3001B010CBSMsg.KEY_SOKU_WARI_UM)}
				, {EKK3001B010CBSMsg.KEY_WRIB_SVC_CD, inputMap.get(EKK3001B010CBSMsg.KEY_WRIB_SVC_CD)}
				, {EKK3001B010CBSMsg.KEY_MANS_TK_HSK_PTN_CD, inputMap.get(EKK3001B010CBSMsg.KEY_MANS_TK_HSK_PTN_CD)}
				, {EKK3001B010CBSMsg.KEY_MANSION_TK_HOSHIKI_CD, inputMap.get(EKK3001B010CBSMsg.KEY_MANSION_TK_HOSHIKI_CD)}
				, {EKK3001B010CBSMsg.KEY_MANSION_VDSL_PLAN_CD, inputMap.get(EKK3001B010CBSMsg.KEY_MANSION_VDSL_PLAN_CD)}
				, {EKK3001B010CBSMsg.KEY_MSKM_SBT_CD, inputMap.get(EKK3001B010CBSMsg.KEY_MSKM_SBT_CD)}
				, {EKK3001B010CBSMsg.KEY_DSP_PST_SKCD, inputMap.get(EKK3001B010CBSMsg.KEY_DSP_PST_SKCD)}
				//ANK-3989-03-00 ADD START
				, {EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_KSITEI_CD, inputMap.get(EKK3001B010CBSMsg.KEY_MNGN_DSP_JKN_KSITEI_CD)}
				//ANK-3989-03-00 ADD END
		};

		
		// SC実行
		CAANMsg[] ekk3001b010MsgList = callSC(handle,  param, ekk3001b010In,
				fixedText, new EKK3001B010CBSMsg().getContents()).getCAANMsgList(EKK3001B010CBSMsg.EKK3001B010CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk3001b010Out = {
				  EKK3001B010CBSMsg1List.DSP_MNGN
		};
		
		// 下りマッピング
		createOutMap(param, ekk3001b010MsgList, ekk3001b010Out, WORK_KEY_EKK3001B010);
	}
	
	/**
	 * EKKA0040001：eo電気契約一意照会 を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execEKKA0040001(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)throws Throwable
	{

		// 電気契約一意照会条件明細の作成
		CAANMsg childTemplate = new CAANMsg(EKKA0040001CBSMsg1List.class.getName());
		// 機能コード："1"
		childTemplate.set(EKKA0040001CBSMsg1List.KEY_FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		// サービス契約番号
		childTemplate.set(EKKA0040001CBSMsg1List.KEY_SVC_KEI_NO, svcKeiNo);
		
		// 電気契約一意照会条件明細
		CAANMsg[] ekka0040001Msg1List = new CAANMsg[]{childTemplate};
		
		// 上りマッピング
		Object[][] ekka0040001In = {
				  {EKKA0040001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKKA0040001}
				, {EKKA0040001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKKA0040001CBSMsg.EKKA0040001CBSMSG1LIST, ekka0040001Msg1List}
		};
		
		// SC実行
		CAANMsg[] ekka0040001MsgList = callSC(handle,  param, ekka0040001In,
				fixedText, new EKKA0040001CBSMsg().getContents()).getCAANMsgList(EKKA0040001CBSMsg.EKKA0040001CBSMSG2LIST);
		
		// 下りマッピング
		String[] ekka0040001Out = {
				  EKKA0040001CBSMsg2List.RYKN_MENU_NM
		};
		
		// 下りマッピング
		createOutMap(param, ekka0040001MsgList, ekka0040001Out, WORK_KEY_EKKA0040001);
	}
	
	/**
	 * EKK0451B002：割引サービス契約一覧照会（サービス契約番号） を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execEKK0451B002(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)throws Throwable
	{

		// 上りマッピング
		Object[][] ekk0451b002In = {
				  {EKK0451B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451B002}
				, {EKK0451B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKK0451B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		// SC実行
		CAANMsg[] ekk0451b002MsgList = callSC(handle,  param, ekk0451b002In,
				fixedText, new EKK0451B002CBSMsg().getContents()).getCAANMsgList(EKK0451B002CBSMsg.EKK0451B002CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk0451b002Out = {
				  EKK0451B002CBSMsg1List.WRIB_SVC_KEI_NO
				, EKK0451B002CBSMsg1List.WRIB_SVC_CD
				, EKK0451B002CBSMsg1List.WRIB_SVC_KEI_STAT
		};
		
		// 下りマッピング
		createOutMap(param, ekk0451b002MsgList, ekk0451b002Out, WORK_KEY_EKK0451B002);
	}
	
	/**
	 * EKK0451A010:割引サービス契約一意照会 を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execEKK0451A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String wribSvcKeiNo)throws Throwable
	{
		
		// 上りマッピング
		Object[][] ekk0451a010In = {
				  {EKK0451A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451A010}
				, {EKK0451A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
				, {EKK0451A010CBSMsg.KEY_WRIB_SVC_KEI_NO, wribSvcKeiNo}
				, {EKK0451A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null)}
		};
		
		// SC実行
		CAANMsg[] ekk0451a010MsgList = callSC(handle,  param, ekk0451a010In,
				fixedText, new EKK0451A010CBSMsg().getContents()).getCAANMsgList(EKK0451A010CBSMsg.EKK0451A010CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk0451a010Out = {
				  EKK0451A010CBSMsg1List.PCRS_CD
				, EKK0451A010CBSMsg1List.PPLAN_CD
		};
		
		// 下りマッピング
		createOutMap(param, ekk0451a010MsgList, ekk0451a010Out, WORK_KEY_EKK0451A010);
	}
	
	/**
	 * EKK0891A010：提供方式契約一意照会 を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execEKK0891A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String tkHoshikiKeiNo)throws Throwable
	{
		
		// 上りマッピング
		Object[][] ekk0891a010In = {
				  {EKK0891A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0891A010}
				, {EKK0891A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKK0891A010CBSMsg.KEY_TK_HOSHIKI_KEI_NO, tkHoshikiKeiNo}
		};
		
		// SC実行
		CAANMsg[] ekk0891a010MsgList = callSC(handle,  param, ekk0891a010In,
				fixedText, new EKK0891A010CBSMsg().getContents()).getCAANMsgList(EKK0891A010CBSMsg.EKK0891A010CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk0891a010Out = {
				  EKK0891A010CBSMsg1List.TK_HOSHIKI_PATTERN_CD
				, EKK0891A010CBSMsg1List.TK_HOSHIKI_CD
				, EKK0891A010CBSMsg1List.TK_PRC_SBT_CD
				//ANK-3989-03-00 ADD START
				, EKK0891A010CBSMsg1List.TONAI_SPEED_CD
				//ANK-3989-03-00 ADD END
				//ANK-4244-00-00 ADD START
				, EKK0891A010CBSMsg1List.KAISEN_USE_KEI_NO
				//ANK-4244-00-00 ADD END
		};
		
		// 下りマッピング
		createOutMap(param, ekk0891a010MsgList, ekk0891a010Out, WORK_KEY_EKK0891A010);
	}
	
	// ▼▼▼ ANK-3355-10-00 DEL START ▼▼▼
//	/**
//	 * EKK0161A010：サービス契約内訳一意照会 を呼び出す。
//	 * 上りマッピング、実行、下りマッピングまで行います。
//	 * 実行結果はworkmapに格納されます。
//	 * 
//	 * @param handle
//	 * @param param
//	 * @param fixedText
//	 * @param campaign_cd
//	 * @return
//	 * @throws Throwable
//	 */
//	private void execEKK0161A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiUcwkNo)throws Throwable
//	{
//		
//		// 上りマッピング
//		Object[][] ekk0161a010In = {
//				  {EKK0161A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161A010}
//				, {EKK0161A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
//				, {EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo}
//				, {EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, JCCBPCommon.getOpeDate(null)}
//		};
//		
//		// SC実行
//		CAANMsg[] ekk0161a010MsgList = callSC(handle,  param, ekk0161a010In,
//				fixedText, new EKK0161A010CBSMsg().getContents()).getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
//		
//		// 下りマッピング
//		String[] ekk0161a010Out = {
//				  EKK0161A010CBSMsg1List.SVC_STA_YMD
//		};
//		
//		// 下りマッピング
//		createOutMap(param, ekk0161a010MsgList, ekk0161a010Out, WORK_KEY_EKK0161A010);
//	}
	// ▲▲▲ ANK-3355-10-00 DEL END ▲▲▲
	
	// ▼▼▼ IT2-2019-0000015 ADD START ▼▼▼
	/**
	 * EKK0081B523：サービス契約識別情報照会(PMP連携用) を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	private void execEKK0081B523(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String sysid)throws Throwable
	{
		
		// 上りマッピング
		Object[][] ekk0081b523In = {
				  {EKK0081B523CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B523}
				, {EKK0081B523CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKK0081B523CBSMsg.KEY_SYSID, sysid}
				, {EKK0081B523CBSMsg.KEY_STD_YMD, JCCBPCommon.getOpeDate(null)}
		};
		
		// SC実行
		CAANMsg[] ekk0081b523MsgList = callSC(handle,  param, ekk0081b523In,
				fixedText, new EKK0081B523CBSMsg().getContents()).getCAANMsgList(EKK0081B523CBSMsg.EKK0081B523CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk0081b523Out = {
				  EKK0081B523CBSMsg1List.SVC_KEI_NO
				, EKK0081B523CBSMsg1List.SVC_CD_NEW
				, EKK0081B523CBSMsg1List.PRC_GRP_CD_NEW
				, EKK0081B523CBSMsg1List.PCRS_CD_NEW
				// ▼▼▼ IT2-2019-0000021 ADD START ▼▼▼
				, EKK0081B523CBSMsg1List.PCRS_NM_NEW
				// ▲▲▲ IT2-2019-0000021 ADD END ▲▲▲
				, EKK0081B523CBSMsg1List.PPLAN_CD_NEW
				, EKK0081B523CBSMsg1List.UCWK_PCRS_CD_NEW
				, EKK0081B523CBSMsg1List.UCWK_PPLAN_CD_NEW
				, EKK0081B523CBSMsg1List.SVC_KEI_UCWK_NO
		};
		
		// 下りマッピング
		createOutMap(param, ekk0081b523MsgList, ekk0081b523Out, WORK_KEY_EKK0081B523);
	}
	
	/**
	 * EKK0321B005：課金先一覧照会（サービス契約番号） を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @return
	 * @throws Throwable
	 */
	private void execEKK0321B005(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)throws Throwable
	{
		
		// 上りマッピング
		Object[][] ekk0321b005In = {
				  {EKK0321B005CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0321B005}
				, {EKK0321B005CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKK0321B005CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		// SC実行
		CAANMsg[] ekk0081b523MsgList = callSC(handle,  param, ekk0321b005In,
				fixedText, new EKK0321B005CBSMsg().getContents()).getCAANMsgList(EKK0321B005CBSMsg.EKK0321B005CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk0321b005Out = {
				  EKK0321B005CBSMsg1List.SEIKY_KEI_NO
		};
		
		// 下りマッピング
		createOutMap(param, ekk0081b523MsgList, ekk0321b005Out, WORK_KEY_EKK0321B005);
	}

	// ▲▲▲ IT2-2019-0000015 ADD END ▲▲▲

	// ANK-4244-00-00 ADD START
	/**
	 * EKK0881A010：回線使用契約一意照会 を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param kaisenUseKeiNo
	 * @return
	 * @throws Throwable
	 */
	private void execEKK0881A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String kaisenUseKeiNo)throws Throwable
	{
		
		// 上りマッピング
		Object[][] ekk0881a010In = {
				  {EKK0881A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0881A010}
				, {EKK0881A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				, {EKK0881A010CBSMsg.KEY_KAISEN_USE_KEI_NO, kaisenUseKeiNo}
		};
		
		// SC実行
		CAANMsg[] ekk0881a010MsgList = callSC(handle,  param, ekk0881a010In,
				fixedText, new EKK0321B005CBSMsg().getContents()).getCAANMsgList(EKK0881A010CBSMsg.EKK0881A010CBSMSG1LIST);
		
		// 下りマッピング
		String[] ekk0881A010Out = {
				  EKK0881A010CBSMsg1List.HHS_1GONLY_FLG
		};
		
		// 下りマッピング
		createOutMap(param, ekk0881a010MsgList, ekk0881A010Out, WORK_KEY_EKK0881A010);
	}
	// ANK-4244-00-00 ADD END
	
	// ▼▼▼ ANK-3355-10-00 ADD START ▼▼▼
	/**
	 * JKKChowriInfoCC：長割情報照会照会CC を呼び出す。
	 * 上りマッピング、実行、下りマッピングまで行います。
	 * 実行結果はworkmapに格納されます。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param campaign_cd
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execJKKChowriInfoCC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)throws Throwable
	{
		HashMap workmap = getCCWorkMap(param);
		// 上りマッピング
		Map<String, Object> jkkChowriInfoCCIn = new HashMap<String, Object>();
		jkkChowriInfoCCIn.put("key_svc_kei_no", svcKeiNo);
		param.setData(TEMPLATE_ID_JKKChowriInfoCC, jkkChowriInfoCCIn);
		
		// SC実行
		new JKKChowriInfoCC().searchChowriInfo(handle, param, TEMPLATE_ID_JKKChowriInfoCC);
		
		// 下りマッピング
		Map<String, Object> jkkChowriInfoCCOut = (Map<String, Object>)param.getData(TEMPLATE_ID_JKKChowriInfoCC);
		workmap.put(WORK_KEY_JKKChowriInfoCC, jkkChowriInfoCCOut);
	}
	// ▲▲▲ ANK-3355-10-00 ADD END ▲▲▲
	
	/**
	 * 下りマップを作成し、CCにセットします。
	 * SC実行結果がない場合は、nullでセットされます。
	 * @param param 
	 * 
	 * @param result
	 * @param ccSetKey
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private void createOutMap(IRequestParameterReadWrite param, CAANMsg[] result, String[] outKeyList, String wmKey) throws RequestParameterException
	{
		HashMap workmap = getCCWorkMap(param);
		
		// 作業マップのキー情報を初期化
		// ▼▼▼ IT2-2019-0000015 MOD START ▼▼▼
//		workmap.put(wmKey, null);
		workmap.put(wmKey, new ArrayList<Map<String, String>>());
		// ▲▲▲ IT2-2019-0000015 MOD END ▲▲▲
		
		// データが取得できた場合
		if (null != result && 0 < result.length)
		{
			List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
			// 取得した件数分データを取得する
			for (int i = 0; i < result.length; i++)
			{
				Map<String, String> resultMap = new HashMap<String, String>();
				// 取得キーに設定した値を取得
				for (int j = 0; j < outKeyList.length; j++)
				{
					resultMap.put(outKeyList[j], result[i].getString(outKeyList[j]));
				}
				resultList.add(resultMap);
			}
			
			// 作業マップに追加
			workmap.put(wmKey, resultList);
		}
	}
	
	/**
	 * 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;
	}
	
	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @param itemName 項目名
	 * @return
	 */
	public Map<String, String> getReqErrInfMap(String itemName)
	{
		String errorCode = JKKStrConst.RETURN_CD_1001;
		String errorMessage = "";
		
		return getCommonErrInfMap(errorCode, errorMessage);
	}
	
	/**
	 * 単項目チェックの属性エラーマップ作成メソッドです。
	 * 
	 * @param itemName 項目名
	 * @return
	 */
	public Map<String, String> getFormErrInfMap(String itemName)
	{
		String errorCode = JKKStrConst.RETURN_CD_1002;
		String errorMessage = "";
		
		return getCommonErrInfMap(errorCode, errorMessage);
	}
	
	/**
	 * 単項目チェックの桁数エラーマップ作成メソッドです。
	 * 
	 * @param itemName 項目名
	 * @return
	 */
	public Map<String, String> getLenErrInfMap(String itemName)
	{
		String errorCode = JKKStrConst.RETURN_CD_1003;
		String errorMessage = "";
		
		return getCommonErrInfMap(errorCode, errorMessage);
	}
	
	/**
	 * 各業務エラーチェックのエラーマップ作成メソッド
	 * 
	 * @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(RES_PARAM_ERRCODE, return_cd);
		returnMap.put(RES_PARAM_ERRMESSAGE, errorMessage);
		
		return returnMap;
	}
}
// ソート用クラス
@SuppressWarnings("unchecked")
class KeiDatalistSort implements Comparator<Map>
{
	public int compare(Map c1, Map c2)
	{
		String str1 = (String) c1.get("seiky_kei_no");
		String str2 = (String) c2.get("seiky_kei_no");
		if(str1.compareTo(str2) < 0)
		{
			return -1;
		}
		else if(str1.compareTo(str2) > 0)
		{
			return 1;
		}
		return 0;
	}
}
