/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKTelSvcChg
*   ソースファイル名：JKKTelSvcChg.java
*   作成者          ：富士通
*   日付            ：2013年3月31日
*＜機能概要＞
*   電話番号変更共通部品
*   
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00.00    2013/03/31   FJ）        新規作成
*   v6.00.00    2014/01/22   FJ）大山    OM-2014-0000124
*   v8.00.00    2014/02/26   FJ）藤田    ANK-1855-00-00
*   v9.00.00    2014/05/07   FJ）星野    ANK-2056-00-00
*   v72.00.01   2024/09/12   FJ）藤井    ANK-4494-00-00
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.custom.constant.JKKTelnoStatJudgeConstCC;
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.SCCallException;
import com.fujitsu.futurity.bp.x21.values.MessageID;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111B030CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111B030CBSMsg1List;

public class JKKTelSvcChg extends AbstractCommonComponent {

	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKTelSvcChgMapperCC mapper = null;

	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;
	
	/** 変更前サービス契約内訳番号	 */
	public String CHBF_SVC_KEI_UCWK_NO = "chbf_svc_kei_ucwk_no";
	/** 変更後サービス契約内訳番号	 */
	public String CHAF_SVC_KEI_UCWK_NO = "chaf_svc_kei_ucwk_no"; 
	/** 異動区分 */
	public String IDO_DIV = "ido_div";
	/** 番ポ工事完了年月日 */
	public String BMP_KOJI_FIN_YMD = "bmp_koji_fin_ymd";
	/** サービス解約理由コード */
	public String SVC_DLRE_CD = "svc_dlre_cd";
	/** 変更前サービス契約内訳番号 */
	public String SVC_DSL_MEMO = "svc_dsl_memo";
	/** 機器出荷有無 */
	public String KKSHKA_UM = "kkshka_um";

	/** 運用年月日*/
	private String opDtm = "";

	public static final String SVC_DLRE_CD_DSL = "01";
	/**************************************************************************/
	/** 作業項目マップ                                                       **/
	/**************************************************************************/
	/** 作業項目マップのキー                      **/
	public static final String WORK_KEY                    = "WORK";
	/** 作業項目マップ　更新年月日時分秒          **/
	public static final String WORK_SVCKEI_UPD_DTM         = "WORK_UPD_DTM";
	/** 作業領域キー 移転元解約によるトーキ       **/
	public static final String WORK_ITN_DSL_TOKI_RSV_TELNO = "WORK_ITN_DSL_TOKI_RSV_TELNO";
	/** 作業領域キー 光電話・番号解約（電話番号） **/
	public static final String WORK_DSL_TELNO              = "WORK_DSL_TELNO";
	// ANK-1429-00-00 住所変更に伴うVA移動機器登録の解除対応 2013/03/23 START
	/** 作業領域キー 移転先サービス契約番号 **/
	public static final String WORK_ITENS_SVC_KEI_NO       = "WORK_ITENS_SVC_KEI_NO";
	/** 作業領域キー 移転先サービス契約回線内訳番号 **/
	public static final String WORK_ITENS_SVKEI_KISUW_NO   = "WORK_ITENS_SVKEI_KISUW_NO";
	/** 作業領域キー 移転先工事の工事案件番号 **/
	public static final String WORK_ITENS_KOJIAN_NO        = "WORK_ITENS_KOJIAN_NO";
	/** 作業領域キー 移転元サービス契約回線内訳番号 **/
	public static final String WORK_ITNM_SVKEI_KISUW_NO    = "WORK_ITNM_SVKEI_KISUW_NO";

	/**************************************************************************/
	/** エイジング種別コード                                                 **/
	/**************************************************************************/
	/** エイジング種別コード：電話番号         */
	public static final String AGING_SBT_CD_TEL     = "001";
	/** エイジング種別コード：固定IPアドレス   */
	public static final String AGING_SBT_CD_IP      = "002";
	/** エイジング種別コード：URL              */
	public static final String AGING_SBT_CD_URL     = "005";
	/** エイジング種別コード：WebID            */
	public static final String AGING_SBT_CD_WEB_ID  = "006";
	/** エイジング種別コード：PopID            */
	public static final String AGING_SBT_CD_POP_ID  = "007";
	/** エイジング種別コード：エイリアス       */
	public static final String AGING_SBT_CD_ALIAS   = "008";
	/** エイジング種別コード：メールアドレス   */
	public static final String AGING_SBT_CD_MLAD    = "009";
	/** エイジング種別コード：メーリングリスト */
	public static final String AGING_SBT_CD_MLLIST  = "010";
	/** エイジング種別コード：PPP認証ID（サービス契約＜eo光電話＞）           */
	public static final String AGING_SBT_CD_PPP_ID  = "012";
	/** エイジング種別コード：ISP認証ID（サービス契約内訳＜eo光ネット＞）     */
	public static final String AGING_SBT_CD_ISP_ID  = "013";
	/** エイジング種別コード：SIPユーザーID（サービス契約内訳約＜eo光電話＞） */
	public static final String AGING_SBT_CD_SIP_ID  = "014";
	/** エイジング種別コード：ADSL認証ID（サービス契約内訳＜eoADSL(Flets)＞） */
	public static final String AGING_SBT_CD_ADSL_ID = "015";
	/**************************************************************************/
	/** エイジングステータス                                                 **/
	/**************************************************************************/
	/** エイジングステータス：使用中 */
	private static final String AGING_STAT_USE = "100";
	/**************************************************************************/
	/** エイジングマップキー                                                 **/
	/**************************************************************************/
	/** エイジングマップキー：エイジング種別コード */
	public static final String AGING_MAP_KEY_AGING_SBT_CD   = "aging_sbt_cd";
	/** エイジングマップキー：エイジング対象値     */
	public static final String AGING_MAP_KEY_AGING_TG_VALUE = "aging_tg_value";
	/** エイジングマップキー：エイジング開始年月日     */
	public static final String AGING_MAP_KEY_AGING_USE_DTM = "aging_use_dtm";

	/**
	 * 電話番号変更共通部品の初期処理です。
	 * 
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return void
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// マッパーの初期化
		if (null == this.mapper)
		{
			this.mapper = new JKKTelSvcChgMapperCC();
		}
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}
		
		// 運用日を取得する。
		opDtm = JKKBpCommon.getOpeDateTimeStamp(null);
	}

	/**
	 * 電話番号変更確定処理です。<br>
	 * 電話番号変更の確定を行います。<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		パラメータオブジェクト
	 * @param	inMap		業務情報を保持するマップ
	 * @param	fixedText	ユーザ任意文字列
	 * @throws	Throwable 
	 */
	@SuppressWarnings("unchecked")
	public void runChgTelSvc(SessionHandle handle, IRequestParameterReadWrite param, HashMap inMap, String fixedText)
	throws Throwable
	{
		// 初期処理を呼び出す
		init(param,fixedText);
		
		// inMapから、各種データを取得する。
		//　変更前サービス契約内訳番号
		String tmpChbfSvcKeiUcwkNo = (String)inMap.get(CHBF_SVC_KEI_UCWK_NO);
		//　変更後サービス契約内訳番号
		String tmpChafSvcKeiUcwkNo = (String)inMap.get(CHAF_SVC_KEI_UCWK_NO);
		//　異動区分
		String tmpIdoDiv = (String)inMap.get(IDO_DIV);
		//　番ポ工事完了年月日
		String tmpBmpKojiFinYmd = (String)inMap.get(BMP_KOJI_FIN_YMD);
		//　サービス解約理由コード
		String tmpSvcDslCd = (String)inMap.get(SVC_DLRE_CD);
		//　サービス解約理由メモ
		String tmpSvcDslMemo = (String)inMap.get(SVC_DSL_MEMO);
		// 機器出荷有無
		String tmpkkShkaUmu = (String)inMap.get(KKSHKA_UM);		
		
		// サービス契約内訳一意照会（旧電話番号）を実行する。

		// サービス契約一意照会
		HashMap<String, Object> mapEKK0161A010 = null;
		Map<?, ?> rsltEKK0161A010 = null;
		
		// サービス契約一意照会
		HashMap<String, Object> mapAfEKK0161A010 = null;
		Map<?, ?> rsltAfEKK0161A010 = null;
		
		// サービス契約内訳一意照会実行処理
		mapEKK0161A010 = this.mapper.editInMsgEKK0161A010(param, fixedText, tmpChbfSvcKeiUcwkNo);
		rsltEKK0161A010 = this.scCall.run(mapEKK0161A010, handle);
		this.mapper.editResultRPEKK0161A010(rsltEKK0161A010, param, fixedText);
		errChk(rsltEKK0161A010);

		// 業務データの取得
		CAANMsg workEKK0161A010 = getWorkCAANMsg(rsltEKK0161A010);
		CAANMsg[] msgEKK0161A010List = workEKK0161A010.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		if (0 == msgEKK0161A010List.length)
		{
			return;
		}
		CAANMsg msgEKK0161A010 = msgEKK0161A010List[0];

		String mskmDtlNo = (String)msgEKK0161A010.getString(EKK0161A010CBSMsg1List.MSKM_DTL_NO);

		HashMap<String, Object> mapEKK0081A010 = null;
		Map<?, ?> rsltEKK0081A010 = null;

		String tmpSvcKeiNo = msgEKK0161A010.getString(EKK0161A010CBSMsg1List.SVC_KEI_NO);
		
		// サービス契約一意照会実行処理
		mapEKK0081A010 = this.mapper.editInMsgEKK0081A010(param, fixedText, tmpSvcKeiNo);
		rsltEKK0081A010 = this.scCall.run(mapEKK0081A010, handle);
		this.mapper.editResultRPEKK0081A010(rsltEKK0081A010, param, fixedText);
		errChk(rsltEKK0081A010);

		// 業務データの取得
		CAANMsg workEKK0081A010 = getWorkCAANMsg(rsltEKK0081A010);
		CAANMsg[] msgEKK0081A010List = workEKK0081A010.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if (0 == msgEKK0081A010List.length)
		{
			return;
		}
		CAANMsg msgEKK0081A010 = msgEKK0081A010List[0];

		// ******************************************************* //
		// サービス契約内訳＜eo光電話＞一意照会実行処理            //
		// ******************************************************* //
		HashMap<String, Object> mapEKK0191A010 = this.mapper.editInMsgEKK0191A010(param, fixedText, tmpChbfSvcKeiUcwkNo);
		Map<?, ?> rsltEKK0191A010 = this.scCall.run(mapEKK0191A010, handle);
		this.mapper.editResultRPEKK0191A010(rsltEKK0191A010, param, fixedText);
		errChk(rsltEKK0191A010);
		// 業務データの取得処理
		CAANMsg workEKK0191A010 = getWorkCAANMsg(rsltEKK0191A010);
		CAANMsg msgEKK0191A010  = workEKK0191A010.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST)[0];
		
		// ANK-4494-00-00 STEP2 ADD START
		// 変更前電話番号がポートアウト中かどうか
		boolean isPortOut = isPortOut(handle, param, msgEKK0191A010.getString(EKK0191A010CBSMsg1List.TELNO));
		// ANK-4494-00-00 STEP2 ADD END

		// サービス契約の解約確定処理を実行する。
		// サービス契約内訳解約確定実行処理
		// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 ADD START
		// 照査状態からの番号変更（変更前の電話番号のサービス契約内訳はキャンセル:920）に対して解約確定処理をスキップ
		String updDtmBf = msgEKK0161A010.getString(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
		String svcKeiUcwkStat = msgEKK0161A010.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
		if (JKKSvcConst.SVC_KEI_STAT_030.compareTo(svcKeiUcwkStat) <= 0
			&& JKKSvcConst.SVC_KEI_STAT_910.compareTo(svcKeiUcwkStat) >= 0)
		{
		// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 ADD END
			HashMap<String, Object> mapEKK0161C190 = this.mapper.editInMsgEKK0161C190(param, inMap, fixedText, msgEKK0161A010, msgEKK0081A010, mskmDtlNo, SVC_DLRE_CD_DSL, tmpSvcDslMemo);
	//		mergeSvcLeiLastUpdDtm(param, mapEKK0161C190);
			Map<?, ?> rsltEKK0161C190 = this.scCall.run(mapEKK0161C190, handle);
			this.mapper.editResultRPEKK0161C190(rsltEKK0161C190, param, fixedText);
			errChk(rsltEKK0161C190);
			CAANMsg msgEKK0161C190 = getWorkCAANMsg(rsltEKK0161C190);
			// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 ADD START
			updDtmBf = msgEKK0161C190.getString(EKK0161C190CBSMsg.UPD_DTM);
			// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 ADD END
		}

		// ******************************************************* //
		// エイジング使用終了処理                                  //
		// ******************************************************* //
		// ANK-4494-00-00 STEP2 ADD START
		// 変更前の電話番号がポートアウト中ではない場合、エイジング使用終了処理を実施する。
		if (!isPortOut)
		{
		// ANK-4494-00-00 STEP2 ADD END
			// エイジング使用終了処理(電話番号)
			HashMap<String, Object> agingMap = new HashMap<String, Object>();
			agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_TEL);
			agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, msgEKK0191A010.getString(EKK0191A010CBSMsg1List.TELNO));
			updateAgingUseEnd(handle, param, fixedText, agingMap);
		// ANK-4494-00-00 STEP2 ADD START
		}
		// ANK-4494-00-00 STEP2 ADD END

		// ******************************************************* //
		// エイジング使用終了処理（SIP）                           //
		// ******************************************************* //
		// エイジング使用終了処理(SIP)
		String strSip_Usr_Id = msgEKK0191A010.getString(EKK0191A010CBSMsg1List.SIP_USER_ID);
		if(strSip_Usr_Id != null && !"".equals(strSip_Usr_Id)) {
			HashMap<String, Object> agingMap2 = new HashMap<String, Object>();
			agingMap2.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_SIP_ID);
			agingMap2.put(AGING_MAP_KEY_AGING_TG_VALUE, strSip_Usr_Id);
			updateAgingUseEnd(handle, param, fixedText, agingMap2);
		}

		// サービス契約内訳一意照会（新電話番号）
		// サービス契約内訳一意照会実行処理
		mapAfEKK0161A010 = this.mapper.editInMsgEKK0161A010(param, fixedText, tmpChbfSvcKeiUcwkNo);
		rsltAfEKK0161A010 = this.scCall.run(mapEKK0161A010, handle);
		this.mapper.editResultRPEKK0161A010(rsltEKK0161A010, param, fixedText);
		errChk(rsltAfEKK0161A010);

		// 業務データの取得
		CAANMsg workAfEKK0161A010 = getWorkCAANMsg(rsltEKK0161A010);
		CAANMsg[] msgAfEKK0161A010List = workAfEKK0161A010.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		if (0 == msgAfEKK0161A010List.length)
		{
			return;
		}
		CAANMsg msgAfEKK0161A010 = msgAfEKK0161A010List[0];

		String mskmAfDtlNo = (String)msgAfEKK0161A010.getString(EKK0161A010CBSMsg1List.MSKM_DTL_NO);
		
		// ******************************************************* //
		// サービス契約内訳＜eo光電話＞一意照会実行処理            //
		// ******************************************************* //
		HashMap<String, Object> mapAfEKK0191A010 = this.mapper.editInMsgEKK0191A010(param, fixedText, tmpChafSvcKeiUcwkNo);
		Map<?, ?> rsltAfEKK0191A010 = this.scCall.run(mapAfEKK0191A010, handle);
		this.mapper.editResultRPEKK0191A010(rsltAfEKK0191A010, param, fixedText);
		errChk(rsltAfEKK0191A010);
		// 業務データの取得処理
		CAANMsg workAfEKK0191A010 = getWorkCAANMsg(rsltAfEKK0191A010);
		CAANMsg[] msgAfEKK0191A010List  = workAfEKK0191A010.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
		if (0 == msgAfEKK0191A010List.length)
		{
			return;
		}
		CAANMsg msgAfEKK0191A010 = msgAfEKK0191A010List[0];
		
		// *************************************************************  //
		// サービス契約内訳＜eo光電話＞サービス契約内訳<eo光電話>使用開始 //
		// *************************************************************  //
		// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 DEL START
//		String updDtmBf = msgEKK0161C190.getString(EKK0161C190CBSMsg.UPD_DTM);
		// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 DEL END
		
		// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 ADD START
		String svcKeiStat = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
		// 親のサービス契約が締結済以下の場合には使用開始しない
		if (JKKSvcConst.SVC_KEI_STAT_030.compareTo(svcKeiStat) < 0)
		{
		// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 ADD END
			// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 MOD START
			HashMap<String, Object> mapEKK0191C050;
			// 異動区分が未設定または"住変確定"でない場合
			if (tmpIdoDiv == null || !JKKSvcConst.IDO_DIV_ADCHGFIX.equals(tmpIdoDiv))
			{
				// 番号変更、番ポ情報変更（番号切替）からの実行
				mapEKK0191C050 = this.mapper.editInMsgEKK0191C050(param, fixedText, tmpChafSvcKeiUcwkNo,tmpIdoDiv,msgAfEKK0191A010,updDtmBf, tmpkkShkaUmu, "1");
			} else {
				// 住変確定からの実行
				mapEKK0191C050 = this.mapper.editInMsgEKK0191C050(param, fixedText, tmpChafSvcKeiUcwkNo,tmpIdoDiv,msgAfEKK0191A010,updDtmBf, tmpkkShkaUmu);
			}
//			HashMap<String, Object> mapEKK0191C050 = this.mapper.editInMsgEKK0191C050(param, fixedText, tmpChafSvcKeiUcwkNo,tmpIdoDiv,msgAfEKK0191A010,updDtmBf, tmpkkShkaUmu);
			// ANK-1855-00-00 照査・締結時の番号変更対応 2014/02/26 藤田 MOD END
			
			Map<?, ?> rsltEKK0191C050 = this.scCall.run(mapEKK0191C050, handle);
			this.mapper.editResultRPEKK0191C050(rsltEKK0191C050, param, fixedText);
			errChk(rsltEKK0191C050);
			// 業務データの取得処理
			CAANMsg workEKK0191C050 = getWorkCAANMsg(rsltEKK0191C050);
			
// ANK-2056-00-00対応 20140507 ADD START
			String updDtm = workEKK0191C050.getString(EKK0191C050CBSMsg.UPD_DTM);
			
			// 異動区分が住所変更・確定の場合
			if(JKKSvcConst.IDO_DIV_ADCHGFIX.equals(tmpIdoDiv)){
				
				// 旧番号に紐づくセレクトオプションパックを照会
				ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPackList(handle, param, tmpSvcKeiNo, tmpChbfSvcKeiUcwkNo); 
				
				if(wribSvcKeiList!=null){
					for(HashMap<String, Object> wribSvcKeiMap : wribSvcKeiList){
						String wribSvcKeiStat = (String)wribSvcKeiMap.get("wrib_svc_kei_stat");
						// 解約済・キャンセル済は対象外
						if("910".equals(wribSvcKeiStat) || "920".equals(wribSvcKeiStat)){
							continue;
						}
						String sysid = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SYSID);
						String packDiv = (String)wribSvcKeiMap.get("pack_div");
						String wribSvcKeiNo = (String)wribSvcKeiMap.get("wrib_svc_kei_no");
						
						// 新番号への紐付け登録を行う
						opPackHimoAdd(handle, param, sysid, tmpSvcKeiNo, tmpChafSvcKeiUcwkNo, packDiv, wribSvcKeiNo, tmpIdoDiv, mskmDtlNo, updDtm);
					}
				}

			}
// ANK-2056-00-00対応 20140507 ADD END
		}
		
		HashMap<String, Object> agingstaMap = new HashMap<String, Object>();
		agingstaMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_TEL);
		agingstaMap.put(AGING_MAP_KEY_AGING_TG_VALUE, msgAfEKK0191A010.getString(EKK0191A010CBSMsg1List.TELNO));
		agingstaMap.put(AGING_MAP_KEY_AGING_USE_DTM,  opDtm);

		// *************************************************************  //
		// エイジング登録                                                 //
		// *************************************************************  //
//		HashMap<String, Object> mapEZM0111D010 = this.mapper.editInMsgEZM0111D010(param, fixedText, agingstaMap);
//		Map<?, ?> rsltEZM0111D010 = this.scCall.run(mapEZM0111D010, handle);
//		this.mapper.editResultRPEZM0111D010(rsltEZM0111D010, param, fixedText);
//		errChk(rsltEZM0111D010);
//		// 業務データの取得処理
//		CAANMsg workEZM0111D010 = getWorkCAANMsg(rsltEZM0111D010);
		
	}

// ANK-2056-00-00対応 20140507 ADD START
	private ArrayList<HashMap<String, Object>> getTelSelectOpPackList(
		SessionHandle handle, 
		IRequestParameterReadWrite param,
		String svcKeiNo, 
		String svcKeiUcwkNo
	) throws Throwable {
		JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
		String fixedTextPackCC = "TelSelectOpPackOperate";
		HashMap<String, Object> paramMapPackCC = new HashMap<String, Object>();
		paramMapPackCC.put("func_cd", "1");
		paramMapPackCC.put("trn_div","00"); //照会
		paramMapPackCC.put("svc_kei_no",svcKeiNo);
		paramMapPackCC.put("svc_kei_ucwk_no",svcKeiUcwkNo);
		param.setData(fixedTextPackCC, paramMapPackCC);
		//照会を実行
		param = telSelectOpPackOperateCC.execute(handle, param, fixedTextPackCC);
		
		HashMap<String, Object> retMapPackCC = (HashMap<String, Object>)param.getData(fixedTextPackCC);
		ArrayList<HashMap<String, Object>> wribSvcKeiList = (ArrayList<HashMap<String, Object>>)retMapPackCC.get("wrib_svc_kei_list");
		return wribSvcKeiList;
	}
	
	private void opPackHimoAdd(
			SessionHandle handle,
			IRequestParameterReadWrite param, 
			String sysid, 
			String svcKeiNo,
			String svcKeiUcwkNo, 
			String packDiv, 
			String wribSvcKeiNo,
			String idoDiv, 
			String mskmDtlNo, 
			String updDtm
	) throws Throwable {
		String workFixedText = "TelSelectOpPackOperateHimogae";
		JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
		
		// 対象データマップ
		HashMap<String, Object> opPackTrgtData = new HashMap<String, Object>();
		
		// 機能コード
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_FUNC_CD, JPCModelConstant.FUNC_CD_1);
		
		// 処理区分（紐付登録）
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_TRN_DIV, "05");
		
		// SYSID
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SYSID, sysid);
		
		// サービス契約番号
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SVC_KEI_NO, svcKeiNo);
		
		// サービス契約内訳番号
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		
		// 申込明細番号
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_MSKM_DTL_NO, mskmDtlNo);
		
		// 解約理由コード
		// 未設定
		
		// サービスキャンセル理由コード
		// 未設定
		
		// 起算日
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_KISAN_YMD, JCCBPCommon.getOpeDate(null));
		
		// 利用開始希望日
		// 未設定
		
		// 異動区分
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_IDO_DIV, idoDiv);
		
		// パック割区分
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_PACK_DIV, packDiv);
		
		// 課金区分
		// 未設定
		
		// 割引サービス契約番号
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_WRIB_SVC_KEI_NO, wribSvcKeiNo);
		
		// 更新年月日
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_KK0081_UPD_DTM, updDtm);
		
		param.setData(workFixedText, opPackTrgtData);
		//紐付け登録を実行
		telSelectOpPackOperateCC.execute(handle, param, workFixedText);
	}

// ANK-2056-00-00対応 20140507 ADD END

	/**
	 * 業務データの取得処理です。
	 * <br>
	 * @param workMapKey 業務データのマップキー
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private static CAANMsg getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate;
	}

	/**
	 * 業務データリストの取得処理です。
	 * <br>
	 * @param workMapKey 業務データのマップキー
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private CAANMsg[] getWorkCAANMsgList(String workMapKey, Map<?, ?> rslt)
	{
		CAANMsg parentTemplate = getWorkCAANMsg(rslt);
		CAANMsg[] template = parentTemplate.getCAANMsgList(workMapKey);

		return template;
	}

	/**
	 * ユーザ定義文字列がユーザ情報になければデータを作成します。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param workMapKey 業務データのマップキー
	 * @return true：作成した　False：存在していたため作成不要
	 * @throws RequestParameterException 
	 */
	private boolean createUserData(IRequestParameterReadWrite param, String workMapKey) 
	throws RequestParameterException
	{
		if (param.getData(workMapKey) == null)
		{
			param.setData(workMapKey, new HashMap<String, Object>());
			return true;
		}
		
		return false;
	}
	
	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * return void
	 * @throws SCCallException 
	 */
	private static void errChk(Map<?, ?> msgList) 
	throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス
		int templateStatus = template.getInt(EKK0081A010CBSMsg.STATUS);
		
		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = "INVALID_RETURN_MESSAGE";
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	/**
	 * 更新年月日(更新前)に関する項目を作業項目から抽出し設定する
	 * @param param
	 * @param outMsg
	 */
	@SuppressWarnings("unchecked")
	private void mergeSvcLeiLastUpdDtm(
			IRequestParameterReadWrite param,
			HashMap<String, Object> outMsg
	) throws RequestParameterException
	{
		String updDtm;
		HashMap<String, Object> workHash;
		CAANMsg[] templates;
		CAANMsg template;

		workHash = (HashMap<String, Object>)param.getData(WORK_KEY);
		updDtm = (String)workHash.get(WORK_SVCKEI_UPD_DTM);

		templates = (CAANMsg[])outMsg.get("templates");
		template = templates[0];

		template.set("upd_dtm_bf", updDtm);
	}
	
	/**
	 * エイジング使用終了実行処理です。<br>
	 * <br>
	 * @param	handle		セッションマネージャなどを持ったハンドル
	 * @param	param		モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param	fixedText	ユーザ任意文字列
	 * @param	agingMap	エイジング登録データ
	 * @return	void
	 * @throws	Throwable 
	 */
	private void updateAgingUseEnd(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			HashMap<String, Object> agingMap
	) throws Throwable
	{

		HashMap<String, Object> mapEZM0111B030 = this.mapper.editInMsgEZM0111B030(param, fixedText, agingMap);
		Map<?, ?> rsltEZM0111B030 = this.scCall.run(mapEZM0111B030, handle);
		this.mapper.editResultRPEZM0111B030(rsltEZM0111B030, param, fixedText);
		errChk(rsltEZM0111B030);

		CAANMsg workEZM0111B030 = getWorkCAANMsg(rsltEZM0111B030);
		CAANMsg[] msgEZM0111B030List = workEZM0111B030.getCAANMsgList(EZM0111B030CBSMsg.EZM0111B030CBSMSG1LIST);

		if (null != msgEZM0111B030List && 0 < msgEZM0111B030List.length)	//2012-05-09指示書CC取込み対応PTで障害のため改修
		{
			CAANMsg msgEZM0111B030 = msgEZM0111B030List[0];
			String agingStat = (String)msgEZM0111B030.getString(EZM0111B030CBSMsg1List.AGING_STAT);
			if (AGING_STAT_USE.equals(agingStat))
			{
				HashMap<String, Object> mapEZM0111D010 = this.mapper.editInMsgEZM0111C010(param, fixedText, agingMap, msgEZM0111B030List[0]);
				Map<?, ?> rsltEZM0111D010 = this.scCall.run(mapEZM0111D010, handle);
				this.mapper.editResultRPEZM0111C010(rsltEZM0111D010, param, fixedText);
				errChk(rsltEZM0111D010);
				
				CAANMsg msgEZM0111C010 = getWorkCAANMsg(rsltEZM0111D010);
				
				HashMap<String, Object> mapEZM0111C030 = this.mapper.editInMsgEZM0111C030(param, fixedText, agingMap, msgEZM0111C010,opDtm);
				Map<?, ?> rsltEZM0111C030 = this.scCall.run(mapEZM0111C030, handle);
				this.mapper.editResultRPEZM0111C030(rsltEZM0111C030, param, fixedText);
				errChk(rsltEZM0111C030);
				
				CAANMsg msgEZM0111C030 = getWorkCAANMsg(rsltEZM0111C030);
				
			}
		}
		else
		{
			JSYejbLog.println(JSYejbLog.ERROR, getClass(), mapEZM0111B030, MessageID.ERR_ERROR_MSG, new String[]{"使用終了エイジング"}, null);
		}
	}
	
	// ANK-4494-00-00 STEP2 ADD START
	/**
	 * 電話番号がポートアウト中か判定
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param telno 電話番号
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	protected boolean isPortOut(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String telno
	) throws Throwable
	{
		
		if (StringUtils.isEmpty(telno))
		{
			// 電話番号が空の場合
			return false;
		}
		
		HashMap<String, Object> telNoStatJudgeCc = new HashMap<String, Object>();
		
		telNoStatJudgeCc.put(JKKTelnoStatJudgeConstCC.TELNO, telno);
		
		// 電話番号状態判定部品を呼び出し
		JKKTelnoStatJudgeCC TelnoStatJudgeCC = new JKKTelnoStatJudgeCC();
		param.setData("telnoStatJudgeCc", telNoStatJudgeCc);
		TelnoStatJudgeCC.telnoStatJudge(handle, param, "telnoStatJudgeCc");
		
		HashMap<String, Object> telnoStatJudgeCcHashMap = (HashMap<String, Object>)param.getData("telnoStatJudgeCc");
		
		ArrayList<HashMap<String, Object>> telNoStatJudgeCcList = (ArrayList<HashMap<String, Object>>)telnoStatJudgeCcHashMap.get(JKKTelnoStatJudgeConstCC.TELNOSTATJUDGECC_LIST);
		HashMap<String, Object> telNoStatJudgeCcListHashMap = (HashMap<String, Object>)telNoStatJudgeCcList.get(0);
		String portoutStatUm = (String)telNoStatJudgeCcListHashMap.get(JKKTelnoStatJudgeConstCC.PORTOUTSTATUM);
		
		if (JKKTelnoStatJudgeConstCC.PORTOUTSTATUM_ARI.equals(portoutStatUm))
		{
			// 対象の電話番号がポートアウト中の場合
			return true;
		}
		else
		{
			return false;
		}
	}
	// ANK-4494-00-00 STEP2 ADD END

}
