/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKTelSelectOpPackIkoCC
*   ソースファイル名：JKKTelSelectOpPackIkoCC.java
*   作成者          ：FJ
*   日付            ：2014年04月17日
*＜機能概要＞
*   電話セレクトオプションパック移行CC
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*	v9.00.00    2014/05/14  FJ)三宅     新規作成(ANK-2056-00-00)
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.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.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B003CBSMsg1List;

/**
 * 電話セレクトオプションパック操作部品CC
 * 
 * @author 富士通
 */
public class JKKTelSelectOpPackIkoCC extends AbstractCommonComponent {
	
	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKTelSelectOpPackIkoMapperCC mapper = null;
	
	/** ユーザデータ情報 */
	private HashMap<String, Object> inMap = null;

	/** 電話セレクトオプションパック操作の作業領域 */
	private Map<String, Object> ccWorkMap = null;
	
	/** 機能コード 1 */
	private final String FUNC_CD_1 = "1";
	/** 機能コード 2 */
	private final String FUNC_CD_2 = "2";
	
	/** 更新年月日時分秒(更新前)エラー */
	private final String UPD_DTM_BF_ERR = "upd_dtm_bf_err";
	/** リターンコード */
	private final String RETURN_CODE    = "RETURN_CODE";
	
	/** 運用日取得キー */
	private final String OPE_DATE = "OPE_DATE";
	
	/** 申込日 */
	private final String MSKM_DATE = "20140630";
	
	/** パック指定（eo光電話パック3） */
	private final String PACK_STI_PACK3 = "W00000007";
	/** パック指定（eo光電話パック7） */
	private final String PACK_STI_PACK7 = "W00000008";
	
	/** エラー内容（パック割適用済） */
	private final String ERR_NAIYO_APLY_ZM = "すでにeo光電話パック３またはeo光電話パック７が申し込まれています。";
	/** エラー内容（排他エラー） */
	private final String ERR_NAIYO_EXC     = "該当データが他ユーザによって、更新されています。再度読み込みを行ってください。";
	
	/** 登録結果コード */
	enum AddRsltCd {
		ADD_RSLT_CD_OK("0"), ADD_RSLT_CD_NG("1");

		String addRsltCd;

		private AddRsltCd(String addRsltCd) {
			this.addRsltCd = addRsltCd;
		}

		public boolean isMatch(String addRsltCd) {
			return this.addRsltCd.equals(addRsltCd);
		}
		
		public String getCd(){
			return addRsltCd;
		}
	}
	
	/** 電話セレクトオプションパックＣＣ_処理区分 */
	enum TelSelectOpPackCCTrnDiv {
		SYOKAI("00"), ADD("01");

		String telSelectOpPackCCTrnDiv;

		private TelSelectOpPackCCTrnDiv(String telSelectOpPackCCTrnDiv) {
			this.telSelectOpPackCCTrnDiv = telSelectOpPackCCTrnDiv;
		}

		public boolean isMatch(String telSelectOpPackCCTrnDiv) {
			return this.telSelectOpPackCCTrnDiv.equals(telSelectOpPackCCTrnDiv);
		}
		
		public String getCd(){
			return telSelectOpPackCCTrnDiv;
		}
	}
	
	/** パック割区分 */
	enum PackDiv {
		PACK3("1"), PACK7("2");

		String packDiv;

		private PackDiv(String packDiv) {
			this.packDiv = packDiv;
		}

		public boolean isMatch(String packDiv) {
			return this.packDiv.equals(packDiv);
		}
		
		public String getCd(){
			return packDiv;
		}
	}
	
	/**
	 * 
	 * 引数キー
	 * 
	 * ・サービス契約番号
	 * ・サービス契約内訳番号
	 * ・SYSID
	 * ・パック割区分
	 * ・電話番号
	 */
	private final String KEY_SVC_KEI_NO        = "svc_kei_no";
	private final String KEY_SVC_KEI_UCWK_NO   = "svc_kei_ucwk_no";
	private final String KEY_SYSID             = "sysid";
	private final String KEY_PACK_STI          = "pack_sti";
	private final String KEY_TELNO             = "telno";

	/**
	 * 
	 * 戻り値キー
	 * 
	 * ・ｅｏ光電話セレクトオプションパック登録結果コード
	 * ・エラー内容
	 * ・申込明細番号
	 * ・請求契約番号
	 */
	private final String KEY_ADD_RSLT_CD  = "add_rslt_cd";
	private final String KEY_ERR_NAIYO    = "err_naiyo";
	private final String KEY_MSKM_DTL_NO  = "mskm_dtl_no";
	private final String KEY_SEIKY_KEI_NO = "seiky_kei_no";
	
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>割引解約新規作成処理を実施する.<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param handle    セッションハンドル
	 * @param param     リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle,
												IRequestParameterReadWrite param,
												String fixedText) throws Throwable {
		printlnEjbLog("JKKTelSelectOpPackIkoCC.execute start");
		
		// 運用日取得（バッチ運用日）
		String opeDate = JCCBPCommon.getBatOpeDate(null);
		
		// 初期処理
		initSetUp(handle, param, fixedText, opeDate);
		
		// 入力パラメータの設定
		setInMap(handle, param);
		
		// 呼出元返却パラメータ用変数
		String addRsltCd  = "";
		String errNaiyo   = "";
		String mskmDtlNo  = "";
		String seikyKeiNo = "";
		
		ArrayList<HashMap<String, String>> aplyZmWribList = aplyZmWribInf(handle, param);
		// 有効なｅｏ光電話パック３・ｅｏ光電話パック７存在チェック
		boolean aplyWrib = false;
		if(!JKKStringUtil.isNullEmpty(aplyZmWribList))
		{
			for(HashMap<String, String> wribInf : aplyZmWribList)
			{
				String wribSvcKeiStat = wribInf.get("wrib_svc_kei_stat");
				if(!JKKStrConst.CD00055_DSLZM.equals(wribSvcKeiStat) && !JKKStrConst.CD00055_CSLZM.equals(wribSvcKeiStat))
				{
					aplyWrib = true;
				}
			}
		}
		
		if(!aplyWrib)
		{
			// 適用済でないのでとりあえず、"正常"を設定
			addRsltCd = AddRsltCd.ADD_RSLT_CD_OK.getCd();
			
			// 最終更新年月日時分秒
			String lastUpdDtm = getLastUpdDtm();
			
			try{
				//--------------------------------------------------
				// 申込・申込明細の登録
				//--------------------------------------------------
				mskmDtlNo = addMskmAndMskmDtl();
				
				//--------------------------------------------------
				// 電話セレクトオプションパックの登録
				//--------------------------------------------------
				addTelSelectOpPack(handle, param, mskmDtlNo, lastUpdDtm);
				
				//--------------------------------------------------
				// 進捗・異動理由の登録
				//--------------------------------------------------
				addPrgAndIdoRsn(mskmDtlNo);
			}
			catch(Throwable th)
			{
				//--------------------------------------------------
				// 排他確認
				//--------------------------------------------------
				ArrayList errInfArr = (ArrayList)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
				HashMap itemErrMap = null;
				String  errCd  = "";
				if(errInfArr.size() > 0)
				{
					HashMap errInf = (HashMap)errInfArr.get(0);
					if(errInf != null && errInf.containsKey("ITEM_CHECK_ERRORS"))
					{
						itemErrMap = (HashMap)errInf.get("ITEM_CHECK_ERRORS");
						
						if(itemErrMap.containsKey(UPD_DTM_BF_ERR))
						{
							errCd = (String)itemErrMap.get(UPD_DTM_BF_ERR);
						}
					}
				}
				if(!JKKStringUtil.isNullBlank(errCd))
				{
					// 排他エラー発生のため登録結果コードを"エラー"に変更
					addRsltCd = AddRsltCd.ADD_RSLT_CD_NG.getCd();
					// 排他エラー時のエラー内容を設定
					errNaiyo  = ERR_NAIYO_EXC;
				}
				
				//--------------------------------------------------
				// 結果の返却
				//--------------------------------------------------
				this.inMap.put(KEY_ADD_RSLT_CD,  addRsltCd);
				this.inMap.put(KEY_ERR_NAIYO,    errNaiyo);
				this.inMap.put(KEY_MSKM_DTL_NO,  mskmDtlNo);
				this.inMap.put(KEY_SEIKY_KEI_NO, seikyKeiNo);
				
				throw th;
			}
			
			// 排他エラーなしのため、電話セレクトオプションパック登録後の後続処理を実施
			//--------------------------------------------------
			// 請求契約番号の取得
			//--------------------------------------------------
			// 上にて登録した割引サービス契約番号を取得する
			String wribSvcKeiNo = "";
			aplyZmWribList.clear();
			aplyZmWribList = aplyZmWribInf(handle, param);
			if(!JKKStringUtil.isNullEmpty(aplyZmWribList))
			{
				for(HashMap<String, String> wribInf : aplyZmWribList)
				{
					String wribSvcKeiStat = wribInf.get("wrib_svc_kei_stat");
					if(!JKKStrConst.CD00055_DSLZM.equals(wribSvcKeiStat) && !JKKStrConst.CD00055_CSLZM.equals(wribSvcKeiStat))
					{
						wribSvcKeiNo = wribInf.get("wrib_svc_kei_no");
						printlnEjbLog("登録した割引サービス契約番号：" + wribSvcKeiNo);
						break;
					}
				}
			}
			// サービス契約が紐付く請求契約番号を取得
			String seikyKeiNoWk = getSeikyKeiNo();
			
			// 請求契約番号に紐付く各種契約番号
			CAANMsg[] seikyMsgArg = getKakinsList(seikyKeiNoWk);
			for(CAANMsg seikyMsg : seikyMsgArg)
			{
				String wribSvcKeiNoKakins = seikyMsg.getString(EKK0321B003CBSMsg1List.WRIB_SVC_KEI_NO);
				if(!JKKStringUtil.isNullBlank(wribSvcKeiNo) && !JKKStringUtil.isNullBlank(wribSvcKeiNoKakins) && wribSvcKeiNo.equals(wribSvcKeiNoKakins))
				{
					// 登録した電話セレクトオプションパックの割引サービス契約番号と請求契約番号から取得した割引サービス契約番号が一致
					seikyKeiNo = seikyKeiNoWk;
				}
			}
		}
		else
		{
			// 既に適用済であったため、"エラー"を設定
			addRsltCd = AddRsltCd.ADD_RSLT_CD_NG.getCd();
			// 適用済時のエラー内容を設定
			errNaiyo  = ERR_NAIYO_APLY_ZM;
		}
		
		//--------------------------------------------------
		// 結果の返却
		//--------------------------------------------------
		this.inMap.put(KEY_ADD_RSLT_CD,  addRsltCd);
		this.inMap.put(KEY_ERR_NAIYO,    errNaiyo);
		this.inMap.put(KEY_MSKM_DTL_NO,  mskmDtlNo);
		this.inMap.put(KEY_SEIKY_KEI_NO, seikyKeiNo);
		
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.execute end");
		return param;
	}

	/**
	 * ｅｏ光電話パック３・ｅｏ光電話パック７の割引情報を取得する
	 * 
	 * @param handle
	 * @param param
	 * @return 割引情報リスト
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<String, String>> aplyZmWribInf(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable {
		printlnEjbLog("JKKTelSelectOpPackIkoCC.isWribAplyZm start");
		
		//------------------------------------------
		// 電話セレクトオプションパックＣＣ呼出し
		//------------------------------------------
		String fixedText = "wribAplyZm";
		HashMap dataMap = new HashMap();
		// 機能コード
		dataMap.put("func_cd",         "1");										// チェック＆登録
		// 処理区分
		dataMap.put("trn_div",         TelSelectOpPackCCTrnDiv.SYOKAI.getCd());		// 照会
		// サービス契約番号
		dataMap.put("svc_kei_no",      (String)this.ccWorkMap.get(this.KEY_SVC_KEI_NO));
		// サービス契約内訳番号
		dataMap.put("svc_kei_ucwk_no", (String)this.ccWorkMap.get(this.KEY_SVC_KEI_UCWK_NO));
		
		param.setData(fixedText, dataMap);
		
		printlnEjbLog("call JKKTelSelectOpPackOperateCC.execute start");
		
		(new JKKTelSelectOpPackOperateCC()).execute(handle, param, fixedText);
		
		printlnEjbLog("call JKKTelSelectOpPackOperateCC.execute end");
		
		//------------------------------------------
		// 照会結果の取得
		//------------------------------------------
		HashMap rtrnMap = (HashMap)param.getData(fixedText);
		ArrayList<HashMap<String, String>> wribSvcKeiList = (ArrayList<HashMap<String, String>>)rtrnMap.get("wrib_svc_kei_list");
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.isWribAplyZm end");
		return wribSvcKeiList;
	}

	/**
	 * サービス契約番号をもとに最終更新年月日時分秒を取得する
	 * 
	 * @param  param
	 * @return lastUpdDtm
	 * @throws Throwable
	 */
	private String getLastUpdDtm() throws Throwable
	{
		printlnEjbLog("JKKTelSelectOpPackIkoCC.getLastUpdDtm start");
		
		// サービス契約番号
		String svcKeiNo = (String)this.ccWorkMap.get(this.KEY_SVC_KEI_NO);
		
		CAANMsg[] ekk0081a010 = this.mapper.callEKK0081A010(this.FUNC_CD_2, svcKeiNo);
		
		// 最終更新年月日時分秒を取得
		String lastUpdDtm = ekk0081a010[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.getLastUpdDtm end");
		return lastUpdDtm;
	}

	/**
	 * 申込・申込明細の登録を行う
	 * 
	 * @return 申込明細番号
	 * @throws Throwable
	 */
	private String addMskmAndMskmDtl() throws Throwable
	{
		printlnEjbLog("JKKTelSelectOpPackIkoCC.addMskmAndMskmDtl start");
		
		// 申込・申込明細（申込内容承認登録）
		CAANMsg ekk0011d020 = this.mapper.callEKK0011D020(this.FUNC_CD_1, (String)this.ccWorkMap.get(this.KEY_SYSID));
		
		// 申込明細（後続業務依頼）
		this.mapper.callEKK0021C060(this.FUNC_CD_1, ekk0011d020);
		
		// 申込明細番号取得
		CAANMsg[] mskmDtl = ekk0011d020.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
		String mskmDtlNo  = mskmDtl[0].getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO);
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.addMskmAndMskmDtl end");
		return mskmDtlNo;
	}

	/**
	 * 電話セレクトオプションパックの登録を行う
	 * 
	 * @return 登録結果の更新年月日時分秒
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void addTelSelectOpPack(SessionHandle handle, IRequestParameterReadWrite param, String mskmDtlNo, String lastUpdDtm) throws Throwable
	{
		printlnEjbLog("JKKTelSelectOpPackIkoCC.addTelSelectOpPack start");
		
		//------------------------------------------
		// 電話セレクトオプションパックＣＣ呼出し
		//------------------------------------------
		HashMap dataMap = new HashMap();
		// 機能コード
		dataMap.put("func_cd",         "1");									// チェック＆登録
		// 処理区分
		dataMap.put("trn_div",         TelSelectOpPackCCTrnDiv.ADD.getCd());	// 登録
		// サービス契約番号
		dataMap.put("svc_kei_no",      (String)this.ccWorkMap.get(this.KEY_SVC_KEI_NO));
		// サービス契約内訳番号
		dataMap.put("svc_kei_ucwk_no", (String)this.ccWorkMap.get(this.KEY_SVC_KEI_UCWK_NO));
		// ＳＹＳＩＤ
		dataMap.put("sysid",           (String)this.ccWorkMap.get(this.KEY_SYSID));
		// 申込明細番号
		dataMap.put("mskm_dtl_no",     mskmDtlNo);
		// 起算日
		dataMap.put("kisan_ymd",       this.MSKM_DATE);
		// 異動区分
		dataMap.put("ido_div",         JKKStrConst.CD00576_00031);
		// パック割区分
		if(PACK_STI_PACK3.equals((String)this.ccWorkMap.get(this.KEY_PACK_STI)))
		{
			// パック指定に "ｅｏ光電話パック３" が連携されてきている
			dataMap.put("pack_div",    PackDiv.PACK3.getCd());
		}
		else
		{
			// パック指定に "ｅｏ光電話パック７" が連携されてきている
			dataMap.put("pack_div",    PackDiv.PACK7.getCd());
		}
		// 更新年月日時分秒（更新前）
		dataMap.put("kk0081_upd_dtm",  lastUpdDtm);
		
		String fixedText = "addTelSelectOpPack";
		param.setData(fixedText, dataMap);
		
		printlnEjbLog("call JKKTelSelectOpPackOperateCC.execute start");
		
		param = (new JKKTelSelectOpPackOperateCC()).execute(handle, param, fixedText);
		
		printlnEjbLog("call JKKTelSelectOpPackOperateCC.execute end");
		printlnEjbLog("JKKTelSelectOpPackIkoCC.addTelSelectOpPack end");
	}

	/**
	 * 進捗・異動理由の登録を行う
	 * 
	 * @return 申込明細番号
	 * @throws Throwable
	 */
	private String addPrgAndIdoRsn(String mskmDtlNo) throws Throwable
	{
		printlnEjbLog("JKKTelSelectOpPackIkoCC.addMskmAndMskmDtl start");
		
		// 進捗・異動理由
		String svcKeiNo     = (String)this.ccWorkMap.get(this.KEY_SVC_KEI_NO);
		String telno        = (String)this.ccWorkMap.get(this.KEY_TELNO);
		String packSti      = (String)this.ccWorkMap.get(this.KEY_PACK_STI);
		
		CAANMsg ekk0011d020 = this.mapper.callEKK1091D010(this.FUNC_CD_1, mskmDtlNo, svcKeiNo, telno, packSti);
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.addMskmAndMskmDtl end");
		return ekk0011d020.getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO);
	}

	/**
	 * 
	 * 請求契約番号を取得する
	 * 
	 * @return seikyKeiNo
	 * @throws Throwable 
	 */
	private String getSeikyKeiNo() throws Throwable
	{
		printlnEjbLog("JKKTelSelectOpPackIkoCC.getSeikyKeiNo start");
		
		// KK0321_課金先
		CAANMsg[] ekk0321b002List = this.mapper.callEKK0321B002(this.FUNC_CD_1, (String)this.ccWorkMap.get(JKKTelSelectOpPackOperateCC.KEY_SVC_KEI_NO));
		
		String seikyKeiNo = ekk0321b002List[0].getString(EKK0321B002CBSMsg1List.SEIKY_KEI_NO);
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.getSeikyKeiNo end");
		return seikyKeiNo;
	}

	/**
	 * 
	 * 課金先情報を取得する
	 * 
	 * @return seikyKeiNo
	 * @throws Throwable 
	 */
	private CAANMsg[] getKakinsList(String seikyKeiNo) throws Throwable
	{
		printlnEjbLog("JKKTelSelectOpPackIkoCC.getKakinsList start");
		
		// KK0321_課金先
		CAANMsg[] ekk0321b003List = this.mapper.callEKK0321B003(this.FUNC_CD_1, seikyKeiNo, (String)this.ccWorkMap.get(JKKTelSelectOpPackOperateCC.KEY_SVC_KEI_NO));
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.getKakinsList end");
		return ekk0321b003List;
	}


	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>初期設定を実施<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param  handle    セッションハンドル
	 * @param  param     リクエストパラメータ
	 * @param  fixedText サービスメッセージ
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings({ "unchecked" })
	private void initSetUp(SessionHandle handle,
								IRequestParameterReadWrite param,
								String fixedText,
								String opeDate) throws RequestParameterException {
		printlnEjbLog("JKKTelSelectOpPackIkoCC.initSetUp start");
		
		// CC-SCマッピングクラスのインスタンス生成
		this.mapper = new JKKTelSelectOpPackIkoMapperCC(handle, param, opeDate);
		
		// ユーザデータ情報
		this.inMap = (HashMap<String, Object>) param.getData(fixedText);
		printlnEjbLog("fixedText=" + fixedText);
		
		// 電話セレクトオプションパック操作部品クラス用の作業領域
		this.ccWorkMap = new HashMap();
		this.ccWorkMap.put(OPE_DATE, opeDate);
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.initSetUp end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>入力パラメータの設定.<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param handle セッションハンドル
	 * @param param  リクエストパラメータ
	 * @throws Throwable 
	 */
	private void setInMap(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable {
		printlnEjbLog("JKKTelSelectOpPackIkoCC.setInMap start");
		
		// サービス契約番号
		setterWorkParam(this.KEY_SVC_KEI_NO,      "1");
		
		// サービス契約内訳番号
		setterWorkParam(this.KEY_SVC_KEI_UCWK_NO, "1");
		
		// ＳＹＳＩＤ
		setterWorkParam(this.KEY_SYSID,           "1");
		
		// パック指定
		setterWorkParam(this.KEY_PACK_STI,        "1");
		
		// 電話番号
		setterWorkParam(this.KEY_TELNO,           "1");
		
		//---------------------------
		// 設定値チェック
		//---------------------------
		// パック指定
		List<String> packDivList = Arrays.asList(PACK_STI_PACK3, PACK_STI_PACK7);
		setterWorkParamValue(this.KEY_PACK_STI, packDivList);
		
		printlnEjbLog("JKKTelSelectOpPackIkoCC.setInMap end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>keyに紐づく引数を内部mapへ保持<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param  key 
	 * @throws CCException 
	 */
	private void setterWorkParam(String key, String nullDiv) throws CCException {
		
		String obj = (String) this.inMap.get(key);
		
		if (!JKKStringUtil.isNullBlank(obj) || "1".equals(nullDiv)) {
			printlnEjbLog(key + "=" + obj);
			this.ccWorkMap.put(key, obj);
		} else {
			printlnEjbLog(key + "=NULL");
			throw new CCException(key + "=NULL", new Exception());
		}
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>keyに紐づく引数を内部mapへ保持<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param  key 
	 * @throws CCException 
	 */
	private void setterWorkParamValue(String key, List valueList) throws CCException {
		
		String obj = (String) this.inMap.get(key);
		
		if(JKKStringUtil.isNullBlank(obj))
		{
			return;
		}
		
		if (!valueList.contains(obj)) {
			printlnEjbLog(key + "=対象外の値が設定されています");
			throw new CCException(key + "=対象外の値が設定されています", new Exception());
		}
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>デバッグログを出力します<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param dumpObj 出力するオブジェクト
	 */
	@SuppressWarnings("static-access")
	private void printlnEjbLog(Object dumpObj) {
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), dumpObj, null, null, null);
	}
}
