/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKWribRslAddCreate
*   ソースファイル名：JKKWribRslAddCreate.java
*   作成者          ：FJ
*   日付            ：2013年10月01日
*＜機能概要＞
*   割引解約新規作成部品
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*	v4.00.00	2013/10/01	FJ			新規作成
*	v9.00.00	2014/06/21	FJ			IT1-2014-0000227
*	v50.00.00	2020/07/09	FJ)平野		ANK-3754-00-00 トビラフォン対応
*	v50.00.01	2020/08/13	FJ)吉田		OM-2020-0000935 サービス開始日更新時にセキュリティパックの課金先が作成されない
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
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.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0481B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg1List;

/**
 * 割引解約新規作成部品
 * 
 * @author 富士通
 */
public class JKKWribRslAddCreateCC extends AbstractCommonComponent {
	
	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKWribRslAddCreateMapperCC mapper = null;
	
	/** ユーザデータ情報 */
	private HashMap<String, Object> inMap = null;

	/** 割引解約新規作成用の作業領域 */
	private Map<String, Object> ccWorkMap = null;
	
	/** 機能コード */
	private final String FUNC_CD_1 = "1";
	private final String FUNC_CD_2 = "2";
	
	/**
	 * 
	 * 引数キー
	 * 
	 * ・機能コード
	 * ・SYSID
	 * ・サービス契約番号
	 * ・異動区分
	 * ・解約理由コード
	 * ・申込明細番号
	 * 
	 */
	private final String KEY_FUNC_CD     = "func_cd";
	private final String KEY_SYSID       = "sysid";
	private final String KEY_SVC_KEI_NO  = "svc_kei_no";
	private final String KEY_IDO_DIV     = "ido_div";
	private final String KEY_SVC_DLRE_CD = "svc_dlre_cd";
	private final String KEY_MSKM_DTL_NO = "mskm_dtl_no";
	
	/**
	 * 
	 * 作業領域キー
	 * 
	 * ・割引サービス契約番号List → key：割引サービス契約番号、val：サービス契約番号
	 * ・サービス契約番号List     → key：割引サービス契約番号、val：EKK0451A010 Msg
	 * 
	 */
	private final String KEY_WRIB_SVC_KEI_NO_LIST  = "WRIB_SVC_KEI_NO_LIST";
	private final String KEY_WRIB_SVC_KEI_INF_LIST = "WRIB_SVC_KEI_INF_LIST";
	
	/** ファミリーパック */
	private final String FAMIPA_CD = "W00000006";
	
	// OM-2020-0000935 ADD START
	/** セキュリティパック */
	private final String SEKYUPA_CD = "W00000010";
	// OM-2020-0000935 ADD END
	
// v9.00.00 ADD START
	
	/** セッションハンドル */
	private SessionHandle cmnHandle = null;
	
	/** 業務データ取得用I/F */
	private IRequestParameterReadWrite cmnParam = null;
	
	/** 電話セレクトオプションパック：電話パック３ */
	private final String TEL_PACK_3 = "W00000007";
	
	/** 電話セレクトオプションパック：電話パック７ */
	private final String TEL_PACK_7 = "W00000008";
// v9.00.00 ADD END
// ANK-3754-00-00 ADD START
	/** 電話セレクトオプションパック：あんしん電話パック */
	private final String TEL_PACK_ANSN_TEL_PACK = "W00000023";
// ANK-3754-00-00 ADD END

	
	/** 割引サービス契約ステータス */
	private final String WRIB_SVC_KEI_STAT_100 = "100";
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>割引解約新規作成処理を実施する.<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param handle    セッションハンドル
	 * @param param     リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite execute(SessionHandle handle,
												IRequestParameterReadWrite param,
												String fixedText) throws Throwable {
		printlnEjbLog("execute start");
		
		// 初期処理
		initSetUp(handle, param, fixedText);
		
		// 入力データチェック
		chkInMap(handle, param);
		
		// 機能コード「チェックのみ」の場合は、主処理は行わない
		if (this.FUNC_CD_2.equals(this.ccWorkMap.get(this.KEY_FUNC_CD)))
			return param;
		
		// メイン処理実行
		main(handle, param);

		printlnEjbLog("execute end");
		return param;
	}

	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>主処理<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param  handle セッションハンドル
	 * @param  param  リクエストパラメータ
	 * @throws Throwable 
	 */
	private void main(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable {
		printlnEjbLog("main start");
		
		// 割引サービス対象契約情報を取得・設定
		serchEkk0481Inf();
		
		// 割引サービス契約情報を取得・設定
		serchEkk0451Inf();
		
		// 割引サービス契約解約
		rsl();
		
		// 割引サービス契約新規
		add();
		
		printlnEjbLog("main end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>KK0451_割引サービス契約を検索<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void serchEkk0451Inf() throws Throwable {
		printlnEjbLog("serchEkk0451Inf start");
		
		final String comStat   = "wrib_svc_kei_stat";
		
		// サービス契約情報
		HashMap<String, HashMap<String, Object>> svcInf = 
			(HashMap<String, HashMap<String, Object>>) this.ccWorkMap.get(this.KEY_WRIB_SVC_KEI_NO_LIST);
		
		// 割引解約新規に必要な情報
		HashMap<String,Object> workMap = new HashMap<String, Object>();
		
		Iterator<String> ite = svcInf.keySet().iterator();
		while (ite.hasNext()) {
			String key = ite.next();
			
			CAANMsg[] ekk0451a010 = this.mapper.callEKK0451A010(this.FUNC_CD_2, key);
			
			// [100：サービス提供中]以外は対象外
			if (!this.WRIB_SVC_KEI_STAT_100.equals(ekk0451a010[0].getString(comStat))) {
				ite.remove();
				continue;
			}
			
			// ↑以外は,必要な値を保持.
			workMap.put(key, ekk0451a010[0]);
		}
		
		this.ccWorkMap.put(this.KEY_WRIB_SVC_KEI_INF_LIST, workMap);
		printlnEjbLog("serchEkk0451Inf end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>KK0481_割引サービス対象契約を検索<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @throws Throwable 
	 */
	private void serchEkk0481Inf() throws Throwable {
		printlnEjbLog("serchEkk0481Inf start");
		
		final String comWribSvcKeiNo = "wrib_svc_kei_no";
		
		// KK0481_割引サービス対象契約
		CAANMsg[] ekk0481b002List = this.mapper.callEKK0481B002(this.FUNC_CD_1, (String) this.ccWorkMap.get(this.KEY_SVC_KEI_NO));
		
		// key：割引サービス契約番号
		// val：（key：割引サービス対象契約番号、value：EKK0481A010Msg）
		HashMap<String, HashMap<String, Object>> wriInf = new HashMap<String, HashMap<String, Object>>();
		
		// 割引の紐づき情報を取得する
		ArrayList<String> wriKeiNoList = new ArrayList<String>();
		ArrayList<String> svcKeiNoList = new ArrayList<String>();
		for (CAANMsg ekk0481b002 : ekk0481b002List) {
			
			HashMap<String, Object> map    = new HashMap<String, Object>();
			
			// サービス契約番号：初期化
			svcKeiNoList.clear();
			
			String wKeiNo = ekk0481b002.getString(comWribSvcKeiNo);
			
			if (!JKKStringUtil.isNullBlank(wKeiNo) && !wriKeiNoList.contains(wKeiNo)) {
				
				// 割引サービス契約番号：設定
				wriKeiNoList.add(wKeiNo);
				
				CAANMsg[] ekk0481b001List = this.mapper.callEKK0481B001(this.FUNC_CD_2, wKeiNo);
				for (CAANMsg ekk0481b001 : ekk0481b001List) {
					
					String wribTgKeiNo = ekk0481b001.getString(EKK0481B001CBSMsg1List.WRIB_SVC_TRGT_KEI_NO);
					
					CAANMsg[] ekk0481a010List = this.mapper.callEKK0481A010(this.FUNC_CD_2,
																				wKeiNo,
																				wribTgKeiNo);
					// keyは一意に特定
					map.put(wKeiNo+wribTgKeiNo, ekk0481a010List[0]);
				}
				// 割引に紐づく,サービス契約番号を保持
				wriInf.put(wKeiNo, map);
			}
		}
		this.ccWorkMap.put(this.KEY_WRIB_SVC_KEI_NO_LIST, wriInf);
		printlnEjbLog("serchEkk0481Inf end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>CAANMsg(EKK0451A010)返却処理を実施<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @throws Throwable 
	 * 
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg isRslTg(String wribKey) throws Throwable  {
		printlnEjbLog("isRslTg start");
		
		// サービス契約情報
		HashMap<String, CAANMsg> svcInf = (HashMap<String, CAANMsg>) this.ccWorkMap.get(this.KEY_WRIB_SVC_KEI_INF_LIST);
		
		Iterator<String> ite = svcInf.keySet().iterator();
		while (ite.hasNext()) {
			String key = ite.next();
			
			if (key.equals(wribKey))
				return svcInf.get(key);
		}
		printlnEjbLog("isRslTg end");
		return null;
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>割引の解約処理を実施<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @throws Throwable 
	 * 
	 */
	@SuppressWarnings("unchecked")
	private void rsl() throws Throwable  {
		printlnEjbLog("rsl start");
		
		// 割引サービス契約情報
		HashMap<String, CAANMsg> wribsvcInf = (HashMap<String, CAANMsg>) this.ccWorkMap.get(this.KEY_WRIB_SVC_KEI_INF_LIST);
		
		Iterator<String> ite = wribsvcInf.keySet().iterator();
		while (ite.hasNext()) {
			String key = ite.next();
			
			// 一意情報取得
			CAANMsg tgMsg = isRslTg(key);
			
			// 解約
			CAANMsg ekk0451C020Msg = this.mapper.callEKK0451C020(this.FUNC_CD_1,
																	this.ccWorkMap,
																	tgMsg);
			// 解約確定
			CAANMsg ekk0451C030Msg = this.mapper.callEKK0451C030(this.FUNC_CD_1,
																	this.ccWorkMap,
																	tgMsg,
																	ekk0451C020Msg);
			
			// 最終更新年月日付け替え
			setLstYmdToAll(wribsvcInf, ekk0451C030Msg.getString(EKK0451C030CBSMsg.UPD_DTM));
		}
		printlnEjbLog("rsl end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>最終更新年月日を設定.<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param  wribsvcInf
	 * @param  tgYmd
	 * @throws Throwable 
	 */
	private void setLstYmdToAll(HashMap<String, CAANMsg> wribsvcInf, String tgYmd) throws Throwable {
		Iterator<String> ite = wribsvcInf.keySet().iterator();
		while (ite.hasNext()) {
			String key = ite.next();
			CAANMsg tgMsg = isRslTg(key);
			tgMsg.set(EKK0451A010CBSMsg1List.LAST_UPD_DTM, tgYmd);
		}
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>割引の新規処理を実施<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @throws Throwable 
	 * 
	 */
	@SuppressWarnings("unchecked")
	private void add() throws Throwable  {
		printlnEjbLog("add start");
		
		// 割引サービス契約情報
		HashMap<String, CAANMsg> wribsvcInf = (HashMap<String, CAANMsg>) this.ccWorkMap.get(this.KEY_WRIB_SVC_KEI_INF_LIST);
		
		// 割引サービス対象契約情報
		HashMap<String, HashMap<String, Object>> wribTgSvcInf = 
			(HashMap<String, HashMap<String, Object>>) this.ccWorkMap.get(this.KEY_WRIB_SVC_KEI_NO_LIST);
		
		Iterator<String> ite = wribsvcInf.keySet().iterator();
		while (ite.hasNext()) {
			String key = ite.next();
			
			// 一意情報取得
			CAANMsg tgMsg = isRslTg(key);
			
			// 対象情報取得
			HashMap<String, Object> tgList = wribTgSvcInf.get(key);
			
// v9.00.00 ADD START
			
			// セレクトオプションパック時は別処理.
			if (isSelctTelPack(tgMsg.getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD))) {
				
				// JKKTelSelectOpPackOperateCC呼び出し
				execJKKTelSelectOpPackOperateCC(tgMsg, tgList);
				
				// 最終更新年月日付け替え
				HashMap<String, Object> map = (HashMap<String, Object>) this.cmnParam.getData("JKKTelSelectOpPackOperateCC");
				setLstYmdToAll(wribsvcInf, (String) map.get("upd_dtm"));
				
				continue;
			}
// v9.00.00 ADD END
			
			// 新規
			CAANMsg ekk0451Msg = this.mapper.callEKK0451D010(this.FUNC_CD_1,
																this.ccWorkMap,
																tgMsg,
																tgList);
			// OM-2020-0000935 MOD START
//			// ファミリーパックの場合,課金先を登録する.
//			if (isFamipa(tgMsg.getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD))) {
			// ファミリーパックあるいはセキュリティパックの場合,課金先を登録する.
			if (isFamipa(tgMsg.getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD))
					 || isSekyupa(tgMsg.getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD))) {
			// OM-2020-0000935 MOD END
				// サービス契約番号特定.必ず一意に特定可能.
				String svcKeiNo = "";
				Iterator<String> tgIte = tgList.keySet().iterator();
				while (tgIte.hasNext()) {
					String iteKey = tgIte.next();
					CAANMsg caMsg = (CAANMsg) tgList.get(iteKey);
					svcKeiNo = caMsg.getString("svc_kei_no");
					break;
				}
				
				// EKK0321B002
				CAANMsg[] ekk0321b002 = this.mapper.callEKK0321B002(this.FUNC_CD_1, svcKeiNo);
				
				// EKK0491A010
				CAANMsg[] ekk0491a010 = this.mapper.callEKK0491A010(this.FUNC_CD_2, ekk0321b002[0].getString(EKK0321B002CBSMsg1List.SEIKY_KEI_NO));
				
				// EKK0321D010last_upd_dtm
				this.mapper.callEKK0321D010(this.FUNC_CD_1,
												ekk0321b002[0].getString(EKK0321B002CBSMsg1List.SEIKY_KEI_NO),
												ekk0451Msg.getString(EKK0451D010CBSMsg.WRIB_SVC_KEI_NO),
												ekk0491a010[0].getString(EKK0491A010CBSMsg1List.LAST_UPD_DTM));
			}
			// 最終更新年月日付け替え
			setLstYmdToAll(wribsvcInf, ekk0451Msg.getString(EKK0451D010CBSMsg.UPD_DTM));
		}
		printlnEjbLog("add end");
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>割引サービスコードがファミリーパックか否かを判定<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @param  wribSvcCd
	 * @return true:ファミリーパック、false：ファミリーパック以外
	 */
	private boolean isFamipa(String wribSvcCd) {
		return this.FAMIPA_CD.equals(wribSvcCd) ? true : false;
	}
	
	// OM-2020-0000935 ADD START
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>割引サービスコードがセキュリティパックか否かを判定<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @param  wribSvcCd
	 * @return true:セキュリティパック、false：セキュリティパック以外
	 */
	private boolean isSekyupa(String wribSvcCd) {
		return this.SEKYUPA_CD.equals(wribSvcCd) ? true : false;
	}
	// OM-2020-0000935 ADD END
	
	/**
	 * 
	 * <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) throws RequestParameterException {
		printlnEjbLog("initSetUp start");
		
		// オンライン運用日付
		String opeDate = JCCBPCommon.getOpeDate(null);
		
		// CC-SCマッピングクラスのインスタンス生成
		this.mapper = new JKKWribRslAddCreateMapperCC(handle, param, opeDate);
		
		// ユーザデータ情報
		this.inMap = (HashMap<String, Object>) param.getData(fixedText);
		printlnEjbLog("fixedText=" + fixedText);
		
		// 割引解約新規作成部品クラス用の作業領域
		this.ccWorkMap = new HashMap();
		
// v9.00.00 ADD START
		
		// セッションハンドル
		this.cmnHandle = handle;
		
		// リクエストパラメータ
		this.cmnParam  = param;
		
// v9.00.00 ADD END
		
		printlnEjbLog("initSetUp end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>入力データをチェック.<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param handle セッションハンドル
	 * @param param  リクエストパラメータ
	 * @throws Throwable 
	 */
	private void chkInMap(SessionHandle handle, IRequestParameterReadWrite param) throws Throwable {
		printlnEjbLog("chkInMap start");
		
		// 機能コード
		setterWorkParam(this.KEY_FUNC_CD);
		
		// SYSID
		setterWorkParam(this.KEY_SYSID);
		
		// サービス契約番号
		setterWorkParam(this.KEY_SVC_KEI_NO);
		
		// 異動区分
		setterWorkParam(this.KEY_IDO_DIV);
		
		// 解約理由コード
		setterWorkParam(this.KEY_SVC_DLRE_CD);
		
		// 申込明細番号
		setterWorkParam(this.KEY_MSKM_DTL_NO);
		
		printlnEjbLog("chkInMap end");
	}
	
	/**
	 * 
	 * <dl>
	 * <dt>処理概要：
	 * <dd>keyに紐づく引数を内部mapへ保持<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param  key 
	 * @throws CCException 
	 */
	private void setterWorkParam(String key) throws CCException {
		
		String obj = (String) this.inMap.get(key);
		
		if (!JKKStringUtil.isNullBlank(obj)) {
			printlnEjbLog(key + "=" + obj);
			this.ccWorkMap.put(key, obj);
		} else {
			printlnEjbLog(key + "=NULL");
			throw new CCException(key + "=NULL", 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);
	}
	
// v9.00.00 ADD START
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd><BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @throws Throwable 
	 */
	private void execJKKTelSelectOpPackOperateCC(CAANMsg msg, HashMap<String, Object> tgMsg) throws Throwable {
		
		final String fixedText = "JKKTelSelectOpPackOperateCC";
		
		JKKTelSelectOpPackOperateCC opCC = new JKKTelSelectOpPackOperateCC();
		
		// パラメータ設定
		setCrePackCC(fixedText, msg, tgMsg);
		
		// 実行
		opCC.execute(this.cmnHandle, this.cmnParam, fixedText);
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd><BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @throws Throwable 
	 */
	@SuppressWarnings("cast")
	private void setCrePackCC(String key, CAANMsg msg, @SuppressWarnings("unused") HashMap<String, Object> tgMsg) throws Throwable {
		
		@SuppressWarnings("hiding")
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		String wKei = msg.getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_NO);
		String wCd  = msg.getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD);
		String wYmd = msg.getString(EKK0451A010CBSMsg1List.LAST_UPD_DTM);
		String swNo = retSvcKeiUcwkNo(wKei);
		
		// 機能コード
		inMap.put("func_cd", this.FUNC_CD_1);													// 1 ：チェック＆登録
		// 処理区分
		inMap.put("trn_div", "01");															// 01：登録
		// SYSID
		inMap.put("sysid", (String) this.ccWorkMap.get(this.KEY_SYSID));					// KEY_SYSID
		// サービス契約番号
		inMap.put("svc_kei_no", (String) this.ccWorkMap.get(this.KEY_SVC_KEI_NO));			// KEY_SVC_KEI_NO
		// サービス契約内訳番号
		inMap.put("svc_kei_ucwk_no", swNo);													// ★業務判定
		// 申込明細番号
		inMap.put("mskm_dtl_no", (String) this.ccWorkMap.get(this.KEY_MSKM_DTL_NO));		// KEY_MSKM_DTL_NO
		// サービス解約理由コード
		inMap.put("svc_dlre_cd", (String) this.ccWorkMap.get(this.KEY_SVC_DLRE_CD));		// KEY_SVC_DLRE_CD
		// サービスキャンセル理由コード
		inMap.put("svc_cancel_rsn_cd", "");													// 05：その他理由によるキャンセル
		// 起算日
		inMap.put("kisan_ymd", JCCBPCommon.getOpeDate(null));								// 運用日
		// 利用開始希望日
		inMap.put("use_sta_kibo_ymd", "");													// 設定不要
		// 異動区分
		inMap.put("ido_div", (String) this.ccWorkMap.get(this.KEY_IDO_DIV));				// KEY_IDO_DIV
		// パック割区分
		// ANK-3754-00-00 MOD START
		// inMap.put("pack_div", this.TEL_PACK_3.equals(wCd) ? "1" : "2");						// ★業務判定
		if(this.TEL_PACK_3.equals(wCd)){
			inMap.put("pack_div", "1");						// ★業務判定
		}else if(this.TEL_PACK_7.equals(wCd)){
			inMap.put("pack_div", "2");
		}else if(this.TEL_PACK_ANSN_TEL_PACK.equals(wCd)){
			inMap.put("pack_div", "3");
		}
		// ANK-3754-00-00 MOD END
		// 課金区分
		inMap.put("kakin_div", "2");														// 2 ：非課金
		// 違約金区分
		inMap.put("pnlty_div", "0");														// 0 ：違約金無
		// 割引サービス契約番号
		inMap.put("wrib_svc_kei_no", "");													// 設定不要
		// 更新年月日時分秒（更新前）
		inMap.put("kk0081_upd_dtm", wYmd);													// ★業務判定
		// ソート区分
		inMap.put("sort_div", "");															// 設定不要
		
		this.cmnParam.setData(key, inMap);
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd><BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @param  wribSvcCd
	 * @return true:電話セレクトオプションパック、false：電話セレクトオプションパック以外
	 * @throws Throwable 
	 */
	private String retSvcKeiUcwkNo(String wKeiNo) throws Throwable {
		
		// 対象契約識別コード（サービス契約内訳）
		final String skbtCd_Ucwk = "03";
		
		// 割引サービス契約に紐づく,割引サービス対象契約を取得
		CAANMsg[] ekk0481b001List = this.mapper.callEKK0481B001(this.FUNC_CD_1, wKeiNo);
		
		for (CAANMsg tg : ekk0481b001List) {
			String ucNo = tg.getString(EKK0481B001CBSMsg1List.SVC_KEI_UCWK_NO);
			String tgCd   = tg.getString(EKK0481B001CBSMsg1List.TG_KEI_SKBT_CD);
			
			// サービス契約内訳 且つ サービス契約内訳番号特定済
			if (skbtCd_Ucwk.equals(tgCd) && !JKKStringUtil.isNullBlank(ucNo))
				return ucNo;
		}
		return "";
	}
	
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>割引サービスコードが電話セレクトオプションパックか否かを判定<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * @param  wribSvcCd
	 * @return true:電話セレクトオプションパック、false：電話セレクトオプションパック以外
	 */
	private boolean isSelctTelPack(String wribSvcCd) {
		// ANK-3754-00-00 MOD START		
//		return Arrays.asList(new String[] {this.TEL_PACK_3, this.TEL_PACK_7}).contains(wribSvcCd) ? true : false;
		return Arrays.asList(new String[] {this.TEL_PACK_3, this.TEL_PACK_7,this.TEL_PACK_ANSN_TEL_PACK}).contains(wribSvcCd) ? true : false;
		// ANK-3754-00-00 MOD END	
	}
	
// v9.00.00 ADD END
}
