/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKSmtvlIdoInfAdd
*   ソースファイル名：JKKSmtvlIdoInfAdd.java
*   作成者          ：富士通
*   日付            ：2012年07月03日
*＜機能概要＞
*   スマートバリュー異動情報登録部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00.00    2012/07/03   FJ）        新規作成
*   v4.00.01    2012/11/02   FJ）藤本    【IT1-2012-0001823】KDDI割引契約異動通知に強制解約の異動が登録されない
*   v5.00.00    2013/01/10   FJ）江藤    【ANK-1272-00-00】【スマートバリュー】フォロー対応
*   v5.01.00    2013/02/20   FJ）横井    ANK-1425-00-00 【スマートバリュー】ネット契約の種別、電話の種別が設定されない
*   v10.00.00   2014/09/18   FJ) 谷口    OM-2014-0003081 住変中に移転元ネットが解約されると異動情報が作成される
*   v31.00.00   2017/11/21   FJ) 孫      ANK-3136-00-00_OPMSハードウエア保守切れ対応(STEP2-2)「スマートバリュー異動情報登録共通機能
*   v40.00.00   2018/11/27   FJ) 澤田    OM-2018-0001117_仮キャン契機スマバリ異動Ｄ/EO29D0710Jを実行したら、異常終了します。
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKSmtvlIdoInfAddConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
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.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.common.util.JKKCommonUtil;
import eo.common.util.JPCDateChecker;
import eo.ejb.cbs.cbsmsg.EKK2101B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2441B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2451B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2451B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2461D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2471B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2471B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0081B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0081B010CBSMsg1List;

/**
 * スマートバリュー異動情報登録部品です。<p>
 * <br>
 * @author FJ
 */
public class JKKSmtvlIdoInfAdd extends AbstractCommonComponent
{
	/** 年月日項目の初期値 */
	public static final String YMD_SHKV = "20991231";

	/** エラーメッセージ */
	public static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/** エラーメッセージ：処理対象外の異動区分 */
	private static final String ERR_MSG_TG_GAI_PRG_STAT = "処理対象外の進捗ステータスです。";

	/** エラーメッセージ：パラメータ設定不正 */
	private static final String ERR_MSG_PARAM = "リクエストパラメータに誤りがあります。";

	/** エラーメッセージ：他事業者割引コード変換のマスタデータが不正 */
	private static final String ERR_MSG_TAJGSWR_CD_CHG = "他事業者割引コード変換に該当するデータがありません。";
	
	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKSmtvlIdoInfAddMapperCC mapper = null;
	
	// OM-2018-0001117 ADD START
	/** エラーメッセージ：処理対象外の仮キャンセルデータ */
	private static final String ERR_MSG_TG_GAI_SMTVL_KARI = "処理対象外の仮キャンセルのデータです。";
	// OM-2018-0001117 ADD END

	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;

	/**
	 * スマートバリュー異動情報登録の初期処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// マッパーの初期化
		if (null == this.mapper)
		{
			this.mapper = new JKKSmtvlIdoInfAddMapperCC();
		}
		// IT1-2012-0001821 2012/10/31 start
		if (param.getData(fixedText) == null)
		{  //本来は呼び出し側でparamに詰め込むべき
			param.setData(fixedText, new HashMap<String, Object>());
		}
		// IT1-2012-0001821 2012/10/31 end

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}

		// リターンコードに正常を設定
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, JCMConstants.RET_NORMAL);
	}

	/**
	 * スマートバリュー異動情報の登録処理を行います。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public void addSmtvlIdoInf(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData, String fixedText)
	throws Throwable
	{
		init(param, fixedText);

		// 対象データから業務情報を取得
		String svcKeiNo = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.SVC_KEI_NO);
		// ANK-1425-00-00 2013/02/20 ADD START
		String idoDiv = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.IDO_DIV);
		// ANK-1425-00-00 2013/02/20 ADD END
		String prgStat = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.PRG_STAT);

		// 入力パラメータチェック処理
		// ANK-3136-00-00 2017/11/27 MOD START
		//String errMsg = chkInput(handle, param, trgtData);
		String errMsg = chkInput(handle, param, trgtData, fixedText);
		// ANK-3136-00-00 2017/11/27 MOD END
		if (!JKKCommonUtil.isNull(errMsg))
		{
			// 処理対象外の場合
			if (ERR_MSG_TG_GAI_PRG_STAT.equals(errMsg))
			{
				// 処理終了
				return;
			}
			// OM-2018-0001117 ADD START
			// 処理対象外の仮キャンセルデータの場合
			else if (ERR_MSG_TG_GAI_SMTVL_KARI.equals(errMsg))
			{
				// 処理終了
				return;
			}
			// OM-2018-0001117 ADD END
			else
			{
				// ▼▼▼▼▼LT-2013-0000381 2013/07/11 工事取消キャンセルにて工事案件中止理由コードが設定されない MOD START▼▼▼▼▼
				// エラーロジックの変更を当対応で同時対応。これによりerrファイルが出力され、メッセージもログに表示されるようになる。
//				// チェックエラー
//				throw new CCException(errMsg, new Exception());
				throw new CCException("", new SCCallException(errMsg, String.valueOf(9051), 8011));
				// ▲▲▲▲▲LT-2013-0000381 2013/07/11 工事取消キャンセルにて工事案件中止理由コードが設定されない MOD END  ▲▲▲▲▲
			}
		}

		// 入力パラメータ.進捗ステータスが「スマートバリュー登録・変更完了」「スマートバリュー解約完了」以外の場合
		if (!JKKStrConst.CD00647_SMTVL_ADD_CHG_FIN.equals(prgStat) && !JKKStrConst.CD00647_SMTVL_DSL_FIN.equals(prgStat))
		{
			// スマートバリュー取得処理
			// ANK-1425-00-00 2013/02/20 MOD START
//			CAANMsg msgEKK2441B003 = getSmtvl(handle, param, fixedText, svcKeiNo, prgStat);
			CAANMsg msgEKK2441B003 = getSmtvl(handle, param, fixedText, svcKeiNo, idoDiv, prgStat);
			// ANK-1425-00-00 2013/02/20 MOD END
	
			if (msgEKK2441B003 != null)
			{
				// IT1-2012-0001823 KDDI割引契約異動通知に強制解約の異動が登録されない 2012/11/02 START
//				// 他事業者割引契約締結年月日
//				String tajgsWribKeiCncYmd = msgEKK2441B003.getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_CNC_YMD);
//				// 運用日付
//				String operateDate = JCCBPCommon.getOpeDate(null);
				// IT1-2012-0001823 KDDI割引契約異動通知に強制解約の異動が登録されない 2012/11/02 END
				if (isKariAdd(msgEKK2441B003))
				{
					// スマートバリュー仮登録申込キャンセル処理
					cnclSmtvlKariAddMkm(handle, param, fixedText, trgtData, msgEKK2441B003);
				}
				// IT1-2012-0001823 KDDI割引契約異動通知に強制解約の異動が登録されない 2012/11/02 START
//				else if (JPCDateChecker.isPastDate(tajgsWribKeiCncYmd, operateDate, "1"))
				else
				// IT1-2012-0001823 KDDI割引契約異動通知に強制解約の異動が登録されない 2012/11/02 END
				{
					// KDDI割引契約異動通知登録処理
					addKddiWkeiIdt(handle, param, fixedText, trgtData, msgEKK2441B003);
				}
			}
		}
		// 入力パラメータ.進捗ステータスが「スマートバリュー登録・変更完了」「スマートバリュー解約完了」の場合
		else
		{
			CAANMsg msgEKK2441B003 = null;
			// サービス契約番号が設定されている場合
			if (!JKKCommonUtil.isNull(svcKeiNo))
			{
				// スマートバリュー取得処理
				// ANK-1425-00-00 2013/02/20 MOD START
//				msgEKK2441B003 = getSmtvl(handle, param, fixedText, svcKeiNo, prgStat);
				msgEKK2441B003 = getSmtvl(handle, param, fixedText, svcKeiNo, idoDiv, prgStat);
				// ANK-1425-00-00 2013/02/20 MOD END
			}
			// KDDI割引契約異動通知登録処理
			addKddiWkeiIdt(handle, param, fixedText, trgtData, msgEKK2441B003);
		}
	}

	/**
	 * 入力パラメータのチェックを行います。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @return エラーメッセージ
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	// ANK-3136-00-00 2017/11/27 MOD START
	//private String chkInput(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData)
	private String chkInput(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData, String fixedText) throws Throwable
	// ANK-3136-00-00 2017/11/27 MOD END
	{
		// 必須チェック
		String idoDiv = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.IDO_DIV);
		String prgStat = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.PRG_STAT);
		String prgDtm = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.PRG_DTM);

		// 異動区分、進捗ステータス、進捗年月日時分秒が設定されていない
		if (JKKCommonUtil.isNull(idoDiv) || JKKCommonUtil.isNull(prgStat) || JKKCommonUtil.isNull(prgDtm))
		{
			return ERR_MSG_PARAM + "必須項目が設定されていません。";
		}

		// 処理対象異動チェック
		// 入力パラメータ.進捗ステータスが「コース変更完了」「照査OK」「照査取消」「光電話番号回復完了」「光電話番号解約完了」
		// 「回復完了」「解約完了」「強制解約完了」「キャンセル完了」「休止開始完了」「サービス提供中」
		// 「スマートバリュー登録・変更完了」「スマートバリュー解約完了」
		// 「工事仮キャンセル受付」以外の場合
		if (!JKKStrConst.CD00647_COURSECHG_FIN.equals(prgStat) && !JKKStrConst.CD00647_SHOSA_OK.equals(prgStat)
			&& !JKKStrConst.CD00647_SHOSA_CL.equals(prgStat) && !JKKStrConst.CD00647_HTELNO_KAIHK_FIN.equals(prgStat)
			&& !JKKStrConst.CD00647_HTELNO_DSL_FIN.equals(prgStat) && !JKKStrConst.CD00647_KAIHK_FIN.equals(prgStat)
			&& !JKKStrConst.CD00647_DSL_FIN.equals(prgStat) && !JKKStrConst.CD00647_KSI_DSL_FIN.equals(prgStat)
			&& !JKKStrConst.CD00647_CNCL_FIN.equals(prgStat) && !JKKStrConst.CD00647_PAUSE_STA_FIN.equals(prgStat)
			&& !JKKStrConst.CD00647_SVCTK_CHU.equals(prgStat) && !JKKStrConst.CD00647_SMTVL_ADD_CHG_FIN.equals(prgStat)
			//ANK-3136-00-00 2017/11/21 MOD START
			//&& !JKKStrConst.CD00647_SMTVL_DSL_FIN.equals(prgStat))
			&& !JKKStrConst.CD00647_SMTVL_DSL_FIN.equals(prgStat) && !JKKStrConst.CD00647_SMTVL_KARI_FIN.equals(prgStat))
			//ANK-3136-00-00 2017/11/21 MOD END
		{
			// 異動情報登録処理の対象外
			return ERR_MSG_TG_GAI_PRG_STAT;
		}

		String smtvlIdoDtlCd = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.SMTVL_IDO_DTL_CD);
		String svcKeiNo = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.SVC_KEI_NO);
		String svcKeiUcwkNo = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.SVC_KEI_UCWK_NO);

		// 入力パラメータ.進捗ステータスが「スマートバリュー登録・変更完了」「スマートバリュー解約完了」「コース変更完了」の場合
		if (JKKStrConst.CD00647_SMTVL_ADD_CHG_FIN.equals(prgStat) || JKKStrConst.CD00647_SMTVL_DSL_FIN.equals(prgStat)
			|| JKKStrConst.CD00647_COURSECHG_FIN.equals(prgStat))
		{
			if (JKKCommonUtil.isNull(smtvlIdoDtlCd))
			{
				// スマートバリュー異動詳細コードが設定されていないのでエラー
				return ERR_MSG_PARAM + "スマートバリュー異動詳細コードが設定されていません。";
			}
		}

		// 入力パラメータ.進捗ステータスが「スマートバリュー登録・変更完了」「スマートバリュー解約完了」以外の場合
		if (!JKKStrConst.CD00647_SMTVL_ADD_CHG_FIN.equals(prgStat) && !JKKStrConst.CD00647_SMTVL_DSL_FIN.equals(prgStat))
		{
			if (JKKCommonUtil.isNull(svcKeiNo))
			{
				// サービス契約番号が設定されていないのでエラー
				return ERR_MSG_PARAM + "サービス契約番号が設定されていません。";
			}
		}

		// 入力パラメータ.進捗ステータスが「光電話番号回復完了」「光電話番号解約完了」の場合
		if (JKKStrConst.CD00647_HTELNO_KAIHK_FIN.equals(prgStat) || JKKStrConst.CD00647_HTELNO_DSL_FIN.equals(prgStat))
		{
			if (JKKCommonUtil.isNull(svcKeiUcwkNo))
			{
				// サービス契約内訳番号が設定されていないのでエラー
				return ERR_MSG_PARAM + "サービス契約内訳番号が設定されていません。";
			}
		}

		// 入力パラメータ.進捗ステータスが「キャンセル完了」で、スマートバリュー異動詳細コードが設定されていない場合
		if (JKKStrConst.CD00647_CNCL_FIN.equals(prgStat) && JKKCommonUtil.isNull(smtvlIdoDtlCd))
		{
			String kojiakStpRsnCd1 = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.KOJIAK_STP_RSN_CD_1);
			String kojiakStpRsnCd2 = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.KOJIAK_STP_RSN_CD_2);
			List idoRsnCdList = (List)trgtData.get(JKKSmtvlIdoInfAddConstCC.IDO_RSN_CD_LIST);
			if (JKKCommonUtil.isNull(kojiakStpRsnCd1) && JKKCommonUtil.isNull(kojiakStpRsnCd2)
				&& (idoRsnCdList == null || idoRsnCdList.isEmpty()))
			{
				// 工事案件中止理由コード1、工事案件中止理由コード2、異動理由コードリストが設定されていないのでエラー
				return ERR_MSG_PARAM + "工事案件中止理由コード1、工事案件中止理由コード2、異動理由コードリストが設定されていません。";
			}
		}
		//ANK-3136-00-00 2017/11/21 ADD START
		if (JKKStrConst.CD00647_SMTVL_KARI_FIN.equals(prgStat) && !JKKCommonUtil.isNull(svcKeiNo))
		{
			String kojiakNo = null;
			String kojiakStat = null;
			String kojiakSbtCd = null;
			String kojiUkOptntyIdoDiv = null;
			List<String> kojiStatList = new LinkedList<String>();
			// 工事案件ステータス : 依頼中
			kojiStatList.add(JKKStrConst.CD00474_140);
			// 工事案件ステータス : 宅内調査完了済
			kojiStatList.add(JKKStrConst.CD00474_150);
			// 工事案件ステータス : 工事会社決定済
			kojiStatList.add(JKKStrConst.CD00474_160);
			// 工事案件ステータス : 宅内機器予定登録済
			kojiStatList.add(JKKStrConst.CD00474_170);
			// 工事案件ステータス : 仮鍵開発行依頼済
			kojiStatList.add(JKKStrConst.CD00474_180);
			// 工事案件ステータス : 現場作業完了済
			kojiStatList.add(JKKStrConst.CD00474_190);
			
			// サービス契約案件一覧照会情報取得処理
			CAANMsg[] msgListEKU0081B010 = searchSvcKeiKojiAnk(handle, param, fixedText, svcKeiNo);

			if(msgListEKU0081B010 != null && msgListEKU0081B010.length > 0)
			{
				// OM-2018-0001117 ADD START
				boolean bol = false; 
				// OM-2018-0001117 ADD END
				for(int k = 0; k<msgListEKU0081B010.length; k++)
				{
					// 工事案件番号を保存
					kojiakNo = msgListEKU0081B010[k].getString(EKU0081B010CBSMsg1List.KOJIAK_NO);
					
					//工事案件一意照会取得処理
					CAANMsg[] msgListEKU0011A010 = searchKojiAnk(handle, param, fixedText, kojiakNo);
					
					if(msgListEKU0011A010 != null)
					{
						//工事案件ステータスを保存
						kojiakStat = msgListEKU0011A010[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT);
						//工事案件種別コードを保存
						kojiakSbtCd = msgListEKU0011A010[0].getString(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD);
						//工事受付契機異動区分を保存
						kojiUkOptntyIdoDiv = msgListEKU0011A010[0].getString(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
	
						//工事案件ステータスが「依頼済：140」〜「現場作業完了済：190」以外の場合
						if(!kojiStatList.contains(kojiakStat)
							//または、工事案件種別コードが「新設：001」、工事受付契機異動区分が「新規申込：00001」、「サービス追加：00002」以外の場合
							|| !(kojiakSbtCd.equals(JKKStrConst.CD00577_NEWESTA) && (kojiUkOptntyIdoDiv.equals(JKKStrConst.KU0011_KJ_OP_IDO_DIV_00001) 
									|| kojiUkOptntyIdoDiv.equals(JKKStrConst.KU0011_KJ_OP_IDO_DIV_00002))))
						{
							// OM-2018-0001117 DEL START
							//return ERR_MSG_PARAM + "工事案件ステータスが「依頼中」〜「現場作業完了済」以外、工事案件種別が「新設」、工事案件受付契機異動区分が「新規申込」、「サービス追加」以外で設定されています。";
							// OM-2018-0001117 DEL END
						}
						// OM-2018-0001117 DEL START
						else
						{
							bol = true;
						}
						// OM-2018-0001117 DEL END
					}
				}
				// OM-2018-0001117 ADD START
				// 対象の工事なしの場合
				if (!bol)
				{
					// 異動情報登録処理の対象外
					return ERR_MSG_TG_GAI_SMTVL_KARI;
				}
				// OM-2018-0001117 ADD END
			}
		}
		
		
		//ANK-3136-00-00 2017/11/21 ADD END
		
		// チェックOK
		return "";
	}

	/**
	 * 他事業者割引契約・他事業者割引契約対象契約の一覧照会を行い、仮登録/有効中のスマートバリューを取得します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @param idoDiv 異動区分
	 * @param prgStat 進捗ステータス
	 * @return 他事業者割引契約一覧照会(サービス契約番号)結果
	 * @throws Throwable
	 */
	// ANK-1425-00-00 2013/02/20 MOD START
//	private CAANMsg getSmtvl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String prgStat)
	private CAANMsg getSmtvl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String idoDiv, String prgStat)
	// ANK-1425-00-00 2013/02/20 MOD END
	throws Throwable
	{
		CAANMsg msgEKK2441B003 = null;

		// 他事業者割引契約一覧照会処理を呼び出す
		CAANMsg tmpEKK2441B003 = searchTajgsWribKei(handle, param, fixedText, svcKeiNo);

		if (tmpEKK2441B003 != null)
		{
			// 他事業者割引契約番号
			String tajgsWribKeiNo = tmpEKK2441B003.getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_NO);

			if (isKariAdd(tmpEKK2441B003))
			{
				// 仮登録のスマートバリュー
				msgEKK2441B003 = tmpEKK2441B003;
			}
			else
			{
				// 進捗ステータスが「スマートバリュー登録・変更完了」「スマートバリュー解約完了」の場合
				if (JKKStrConst.CD00647_SMTVL_ADD_CHG_FIN.equals(prgStat) || JKKStrConst.CD00647_SMTVL_DSL_FIN.equals(prgStat))
				{
					msgEKK2441B003 = tmpEKK2441B003;
				}
				// 進捗ステータスが上記以外の場合
				else
				{
					// 他事業者割引契約対象契約一覧照会処理を呼び出す
					CAANMsg[] msgListEKK2451B001 = searchTajgswkeiTgkei(handle, param, fixedText, tajgsWribKeiNo);

					if (msgListEKK2451B001 != null && msgListEKK2451B001.length == 2)
					{
						// スマートバリュー有効中判定
						String tajgsWribKeiDslYmd = tmpEKK2441B003.getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_DSL_YMD);
						String tajgsWribKeiCnclYmd = tmpEKK2441B003.getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_CNCL_YMD);
						String dslTajgsTchYmd1 = msgListEKK2451B001[0].getString(EKK2451B001CBSMsg1List.DSL_TAJGS_TCH_YMD);
						String dslTajgsTchYmd2 = msgListEKK2451B001[1].getString(EKK2451B001CBSMsg1List.DSL_TAJGS_TCH_YMD);
						// 運用日付
						String operateDate = JCCBPCommon.getOpeDate(null);

						// 他事業者割引契約解約年月日がnull、初期値、運用日を含まない未来日のいずれかであること
						// 他事業者割引契約キャンセル年月日がnull、または初期値であること
						// 他事業者割引契約対象契約一覧照会結果の内、解約他事業者通知年月日がnull、または初期値のレコードが1件以上存在すること
						if ((JKKCommonUtil.isNull(tajgsWribKeiDslYmd) || YMD_SHKV.equals(tajgsWribKeiDslYmd) || JPCDateChecker.isFutureDate(tajgsWribKeiDslYmd, operateDate, "0"))
							&& (JKKCommonUtil.isNull(tajgsWribKeiCnclYmd) || YMD_SHKV.equals(tajgsWribKeiCnclYmd))
							&& ((JKKCommonUtil.isNull(dslTajgsTchYmd1) || YMD_SHKV.equals(dslTajgsTchYmd1))
								|| (JKKCommonUtil.isNull(dslTajgsTchYmd2) || YMD_SHKV.equals(dslTajgsTchYmd2))))
						{
							// ANK-1425-00-00 2013/02/20 MOD START
//							// 有効中のスマートバリューが存在する
//							msgEKK2441B003 = tmpEKK2441B003;
							// OM-2014-0003081 2014/09/19 MOD START
							// 「住所変更」ではないかつ「解約」でもない
//							if (!JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv))
							if (!JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv) && !JKKStrConst.CD00576_DSL.equals(idoDiv))
							// OM-2014-0003081 2014/09/19 MOD END
							{
								// 有効中のスマートバリューが存在する
								msgEKK2441B003 = tmpEKK2441B003;
							}
							else
							{
								//  ■解約→新規の移転元サービス契約の場合は処理対象外
								//  ※住所変更の場合は、スマートバリューに紐づく両契約の状態を判定しない。
								//    一方でも満たさなくスマートバリューの適合条件をみなさない場合は、キャンセルする。
								CAANMsg[] msgListEKK2101B002 = searchAdchgDtl(handle, param, fixedText, svcKeiNo);
								if(msgListEKK2101B002 != null && msgListEKK2101B002.length > 0)
								{
									for (CAANMsg msgEKK2101B002 : msgListEKK2101B002)
									{
										// 変更前識別番号（移転元サービス契約番号）
										String chbfSkbtNo = msgEKK2101B002.getString(EKK2101B002CBSMsg1List.CHBF_SKBT_NO);
										
										// 変更後識別番号（移転先サービス契約番号）
										String chafSkbtNo = msgEKK2101B002.getString(EKK2101B002CBSMsg1List.CHAF_SKBT_NO);
										
										// 解約→新規の場合、変更前識別番号、変更後識別番号がともにされており、サービス契約番号が異なる。
										if(chbfSkbtNo != null && chafSkbtNo != null && !chbfSkbtNo.equals(chafSkbtNo))
										{
											// 仮登録/有効中のスマートバリュー無し扱いする
										}
										else
										{
											msgEKK2441B003 = tmpEKK2441B003;
										}
									}
								}
								// 20130528 スマートバリュー品向による問題Q 住変の移転先サービス契約の場合、異動情報が作成されない不具合対応 ADD START
								else
								{
									msgEKK2441B003 = tmpEKK2441B003;
								}
								// 20130528 スマートバリュー品向による問題Q 住変の移転先サービス契約の場合、異動情報が作成されない不具合対応 ADD END
								
							}
							// ANK-1425-00-00 2013/02/20 MOD END
						}
					}
				}
			}
		}

		return msgEKK2441B003;
	}

	/**
	 * 他事業者割引契約申込キャンセルサービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param trgtData 対象データ
	 * @param msgEKK2441B003 他事業者割引契約一覧照会(サービス契約番号)結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void cnclSmtvlKariAddMkm(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap trgtData, CAANMsg msgEKK2441B003)
	throws Throwable
	{
		String prgStat = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.PRG_STAT);
		String smtvlIdoDtlCd = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.SMTVL_IDO_DTL_CD);

		// 入力パラメータ.進捗ステータスが「コース変更完了」「解約完了」「強制解約完了」「キャンセル完了」「休止開始完了」「工事仮キャンセル受付」の場合
		// 「コース変更完了」の場合は、スマートバリュー異動詳細コードが「スマートバリュー対象外」(従量制への変更)のみ
		if ((JKKStrConst.CD00647_COURSECHG_FIN.equals(prgStat) && JKKStrConst.CD01445_SMTVL_TG_GAI.equals(smtvlIdoDtlCd))
			|| JKKStrConst.CD00647_DSL_FIN.equals(prgStat) || JKKStrConst.CD00647_KSI_DSL_FIN.equals(prgStat)
			|| JKKStrConst.CD00647_CNCL_FIN.equals(prgStat) || JKKStrConst.CD00647_PAUSE_STA_FIN.equals(prgStat)
			//ANK-3136-00-00 2017/11/21 ADD START
			|| JKKStrConst.CD00647_SMTVL_KARI_FIN.equals(prgStat)
			//ANK-3136-00-00 2017/11/21 ADD END
		)
		{
			// ANK-1272-00-00 スマートバリューのキャンセル機能を部品化 MOD START 
//			// 上りマッピング処理
//			HashMap<String, Object> inMapEKK2441C030 = this.mapper.editInMsgEKK2441C030(param, msgEKK2441B003);
//			// サービスインターフェース呼び出し
//			callSvcInter(handle, param, fixedText, inMapEKK2441C030, new EKK2441C030CBSMsg().getContents());
			
			// スマートバリューキャンセル部品呼び出し
			JKKBpCommon.cancelSmtvl(handle, param, trgtData, fixedText);
			// ANK-1272-00-00 スマートバリューのキャンセル機能を部品化 MOD END 
		}
	}

	/**
	 * KDDI割引契約異動通知登録サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param trgtData 対象データ
	 * @param msgEKK2441B003 他事業者割引契約一覧照会(サービス契約番号)結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void addKddiWkeiIdt(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap trgtData, CAANMsg msgEKK2441B003)
	throws Throwable
	{
		// KDDI割引契約異動通知に登録するスマートバリュー解約キャンセル理由コードを決定する
		String smtvlDslCnclRsnCd = "";
		String smtvlIdoDtlCd = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.SMTVL_IDO_DTL_CD);
		String prgStat = (String)trgtData.get(JKKSmtvlIdoInfAddConstCC.PRG_STAT);
		
		// スマートバリュー異動詳細コードが「工事NG起因解約」「照査NG起因キャンセル」の場合
		if (JKKStrConst.CD01445_KJ_NG_KIIN_DSL.equals(smtvlIdoDtlCd) || JKKStrConst.CD01445_SHOSA_NG_KIIN_CNCL.equals(smtvlIdoDtlCd))
		{
			// 「事業者都合」を設定
			smtvlDslCnclRsnCd = JKKStrConst.CD01453_JGS_TUGO;
		}
		// スマートバリュー異動詳細コードが「強制解約後の光電話自動キャンセル」の場合
		else if (JKKStrConst.CD01445_KSI_DSL_HTEL_AT_CNCL.equals(smtvlIdoDtlCd))
		{
			// 「お客様都合」を設定
			smtvlDslCnclRsnCd = JKKStrConst.CD01453_CUST_TUGO;
		}
		// 進捗ステータスが「照査取消」「光電話番号解約完了」「解約完了」「強制解約完了」「休止開始完了」の場合
		else if (JKKStrConst.CD00647_SHOSA_CL.equals(prgStat) || JKKStrConst.CD00647_HTELNO_DSL_FIN.equals(prgStat)
			|| JKKStrConst.CD00647_DSL_FIN.equals(prgStat) || JKKStrConst.CD00647_KSI_DSL_FIN.equals(prgStat)
			|| JKKStrConst.CD00647_PAUSE_STA_FIN.equals(prgStat))
		{
			// 「お客様都合」を設定
			smtvlDslCnclRsnCd = JKKStrConst.CD01453_CUST_TUGO;
		}

		// 他事業者割引コード変換一覧照会処理を呼び出す
		boolean dslCnclRsnCdFlg = "".equals(smtvlDslCnclRsnCd);
		CAANMsg[] msgListEKK2471B001 = searchTajgswrCdChg(handle, param, fixedText, trgtData, dslCnclRsnCdFlg);
		if (msgListEKK2471B001 == null || msgListEKK2471B001.length == 0)
		{
			// ▼▼▼▼▼LT-2013-0000381 2013/07/11 工事取消キャンセルにて工事案件中止理由コードが設定されない MOD START▼▼▼▼▼
			// エラーロジックの変更を当対応で同時対応。これによりerrファイルが出力され、メッセージもログに表示されるようになる。
//			// チェックエラー
//			// マスタが設定されていないのでエラー
//			throw new CCException(ERR_MSG_TAJGSWR_CD_CHG, new Exception());
			throw new CCException("", new SCCallException(ERR_MSG_TAJGSWR_CD_CHG, String.valueOf(9051), 8011));
			// ▲▲▲▲▲LT-2013-0000381 2013/07/11 工事取消キャンセルにて工事案件中止理由コードが設定されない MOD END  ▲▲▲▲▲
		}

		// KDDI割引契約異動通知種別コード、他事業者割引契約処理コード、スマートバリュー解約キャンセル理由コードを決定
		String kddiWkeiIdtSbtCd = "";
		String tajgsWribKeiTranCd = "";
		// スマートバリュー解約キャンセル理由コードに「事業者都合」が存在しているかどうか
		boolean existsJgsTugo = false;

		for (CAANMsg msgEKK2471B001 : msgListEKK2471B001)
		{
			// 他事業者割引コード変換種別コードを取得
			String tajgswrCdChgSbtCd = msgEKK2471B001.getString(EKK2471B001CBSMsg1List.TAJGSWR_CD_CHG_SBT_CD);

			// 他事業者割引コード変換種別コードが「異動区分」の場合
			if (JKKStrConst.CD01500_IDO_DIV.equals(tajgswrCdChgSbtCd))
			{
				// KDDI割引契約異動通知種別コードを設定
				kddiWkeiIdtSbtCd = msgEKK2471B001.getString(EKK2471B001CBSMsg1List.KDDI_WKEI_IDT_SBT_CD);
				// 他事業者割引契約処理コードを設定
				tajgsWribKeiTranCd = msgEKK2471B001.getString(EKK2471B001CBSMsg1List.TAJGS_WRIB_KEI_TRAN_CD);
			}
			// 他事業者割引コード変換種別コードが「解約キャンセル理由コード」の場合
			else if (JKKStrConst.CD01500_DSL_CNCL.equals(tajgswrCdChgSbtCd))
			{
				// スマートバリュー解約キャンセル理由コードを取得
				smtvlDslCnclRsnCd = msgEKK2471B001.getString(EKK2471B001CBSMsg1List.SMTVL_DSL_CNCL_RSN_CD);

				// スマートバリュー解約キャンセル理由コードに「事業者都合」の場合
				if (JKKStrConst.CD01453_JGS_TUGO.equals(smtvlDslCnclRsnCd))
				{
					existsJgsTugo = true;
					if (!JKKCommonUtil.isNull(kddiWkeiIdtSbtCd) && !JKKCommonUtil.isNull(tajgsWribKeiTranCd))
					{
						break;
					}
				}
			}
		}

		// スマートバリュー解約キャンセル理由コードに「事業者都合」が存在する場合
		if (existsJgsTugo)
		{
			// スマートバリュー解約キャンセル理由コードに「事業者都合」を設定
			smtvlDslCnclRsnCd = JKKStrConst.CD01453_JGS_TUGO;
		}

		// KDDI割引契約異動通知状態コードを決定
		// デフォルトは「未通知」を設定
		String kddiWkeiIdtStatCd = JKKStrConst.CD01446_MI_TCHI;
		
		// ANK-1272-00-00 KDDIからKOPTへの通知の場合、KDDI割引契約異動通知年月日時分秒を設定 ADD START
		String kddiWkeiIdtDtm = null;
		// ANK-1272-00-00 KDDIからKOPTへの通知の場合、KDDI割引契約異動通知年月日時分秒を設定 ADD END

		// 進捗ステータスが「スマートバリュー登録・変更完了」「スマートバリュー解約完了」の場合
		if (JKKStrConst.CD00647_SMTVL_ADD_CHG_FIN.equals(prgStat) || JKKStrConst.CD00647_SMTVL_DSL_FIN.equals(prgStat))
		{
			// スマートバリュー異動詳細コードが「申込」の場合
			if (JKKStrConst.CD01445_MSKM.equals(smtvlIdoDtlCd))
			{
				// 「通知不要」を設定
				kddiWkeiIdtStatCd = JKKStrConst.CD01446_TCHI_FUYO;
				// ANK-1272-00-00 KDDIからKOPTへの通知の場合、KDDI割引契約異動通知年月日時分秒を設定 ADD START
				kddiWkeiIdtDtm = JCCBPCommon.getSysDateTimeStamp();
				// ANK-1272-00-00 KDDIからKOPTへの通知の場合、KDDI割引契約異動通知年月日時分秒を設定 ADD END
				
			}
			// スマートバリュー異動詳細コードが「申込取込結果」の場合
			else if (JKKStrConst.CD01445_MSKM_TKRT.equals(smtvlIdoDtlCd))
			{
				// 「通知待ち(ファイル作成済)」を設定
				kddiWkeiIdtStatCd = JKKStrConst.CD01446_TCHI_STAY;
			}
		}

		// 上りマッピング処理
		// ANK-1272-00-00 KDDIからKOPTへの通知の場合、KDDI割引契約異動通知年月日時分秒を設定 MOD START
		HashMap<String, Object> inMapEKK2461D010 = this.mapper.editInMsgEKK2461D010(param, trgtData, msgEKK2441B003,
													kddiWkeiIdtStatCd, kddiWkeiIdtSbtCd, tajgsWribKeiTranCd, smtvlDslCnclRsnCd, kddiWkeiIdtDtm);
		// ANK-1272-00-00 KDDIからKOPTへの通知の場合、KDDI割引契約異動通知年月日時分秒を設定 MOD END
		
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK2461D010 = callSvcInter(handle, param, fixedText, inMapEKK2461D010, new EKK2461D010CBSMsg().getContents());

		// 下りマッピング処理
		this.mapper.editResultRPEKK2461D010(rsltMsgEKK2461D010, param, fixedText);
	}

	/**
	 * 他事業者割引契約一覧照会(サービス契約番号)サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @return 他事業者割引契約一覧照会(サービス契約番号)結果
	 * @throws Throwable
	 */
	private CAANMsg searchTajgsWribKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)
	throws Throwable
	{
		// 照会結果
		CAANMsg msgEKK2441B003 = null;

		// 上りマッピング処理
		HashMap<String, Object> inMapEKK2441B003 = this.mapper.editInMsgEKK2441B003(param, svcKeiNo);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK2441B003 = callSvcInter(handle, param, fixedText, inMapEKK2441B003, new EKK2441B003CBSMsg().getContents());

		// 結果を返却
		CAANMsg[] rsltMsgListEKK2441B003 = rsltMsgEKK2441B003.getCAANMsgList(EKK2441B003CBSMsg.EKK2441B003CBSMSG1LIST);
		if (rsltMsgListEKK2441B003.length > 0)
		{
			msgEKK2441B003 = rsltMsgListEKK2441B003[0];
		}

		return msgEKK2441B003;
	}

	/**
	 * 他事業者割引契約対象契約一覧照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param tajgsWribKeiNo 他事業者割引契約番号
	 * @return 他事業者割引契約対象契約一覧照会結果
	 * @throws Throwable
	 */
	private CAANMsg[] searchTajgswkeiTgkei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String tajgsWribKeiNo)
	throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK2451B001 = this.mapper.editInMsgEKK2451B001(param, tajgsWribKeiNo);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK2451B001 = callSvcInter(handle, param, fixedText, inMapEKK2451B001, new EKK2451B001CBSMsg().getContents());

		CAANMsg[] msgListEKK2451B001 = rsltMsgEKK2451B001.getCAANMsgList(EKK2451B001CBSMsg.EKK2451B001CBSMSG1LIST);

		return msgListEKK2451B001;
	}

	/**
	 * 他事業者割引コード変換一覧照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param trgtData 対象データ
	 * @param dslCnclRsnCdFlg 解約キャンセル理由コードを取得するかどうか
	 * @return 他事業者割引コード変換一覧照会結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg[] searchTajgswrCdChg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap trgtData, boolean dslCnclRsnCdFlg)
	throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK2471B001 = this.mapper.editInMsgEKK2471B001(param, trgtData, dslCnclRsnCdFlg);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK2471B001 = callSvcInter(handle, param, fixedText, inMapEKK2471B001, new EKK2471B001CBSMsg().getContents());

		// 結果を返却
		CAANMsg[] msgListEKK2471B001 = rsltMsgEKK2471B001.getCAANMsgList(EKK2471B001CBSMsg.EKK2471B001CBSMSG1LIST);

		return msgListEKK2471B001;
	}

	/**
	 * 他事業者割引契約一覧照会(サービス契約番号)結果から、スマートバリューが仮登録状態かどうかを返します。
	 * <br>
	 * @param msgEKK2441B003 他事業者割引契約一覧照会(サービス契約番号)結果
	 * @return 仮登録の場合はtrue、仮登録でない場合はfalse
	 */
	private boolean isKariAdd(CAANMsg msgEKK2441B003)
	{
		// 他事業者割引契約締結年月日
		String tajgsWribKeiCncYmd = msgEKK2441B003.getString(EKK2441B003CBSMsg1List.TAJGS_WRIB_KEI_CNC_YMD);

		// 他事業者割引契約締結年月日がnull、または初期値の場合は、仮登録
		return JKKCommonUtil.isNull(tajgsWribKeiCncYmd) || YMD_SHKV.equals(tajgsWribKeiCncYmd);
	}

	// ANK-1425-00-00 2013/02/20 ADD START
	/**
	 * 住所変更明細一覧照会処理
	 * <br>
	 * 住所変更明細一覧照会（変更前識別番号）サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @return 住所変更明細一覧照会結果
	 * @throws Throwable
	 */
	private CAANMsg[] searchAdchgDtl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)
	throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK2101B002 = this.mapper.editInMsgEKK2101B002(param, svcKeiNo);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK2101B002 = callSvcInter(handle, param, fixedText, inMapEKK2101B002, new EKK2101B002CBSMsg().getContents());

		// 結果を返却
		CAANMsg[] msgListEKK2101B002  = rsltMsgEKK2101B002.getCAANMsgList(EKK2101B002CBSMsg.EKK2101B002CBSMSG1LIST);
		
		return msgListEKK2101B002;
	}
	// ANK-1425-00-00 2013/02/20 ADD END

	// ANK-3136-00-00 2017/11/21 ADD START
	/**
	 * サービス契約_工事案件一覧照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @return サービス契約_工事案件一覧照会結果
	 * @throws Throwable
	 */
	private CAANMsg[] searchSvcKeiKojiAnk(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiNo)
	throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKU0081B010 = this.mapper.editInMsgEKU0081B010(param, svcKeiNo);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKU0081B010 = callSvcInter(handle, param, fixedText, inMapEKU0081B010, new EKU0081B010CBSMsg().getContents());
		// 結果を返却
		CAANMsg[] msgListEKU0081B010 = rsltMsgEKU0081B010.getCAANMsgList(EKU0081B010CBSMsg.EKU0081B010CBSMSG1LIST);

		return msgListEKU0081B010;
	}
	
	/**
	 * 工事案件一意照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param kojiakNo 工事案件番号
	 * @return 工事案件一意照会結果
	 * @throws Throwable
	 */
	private CAANMsg[] searchKojiAnk(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String kojiakNo)
	throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKU0011A010 = this.mapper.editInMsgEKU0011A010(param, kojiakNo);
		// サービスインターフェース呼び出し
		CAANMsg msgList = callSvcInter(handle, param, fixedText, inMapEKU0011A010, new EKU0011A010CBSMsg().getContents());

		CAANMsg[] rsltMsgEKU0011A010 = msgList.getCAANMsgList(EKU0011A010CBSMsg.EKU0011A010CBSMSG1LIST);
		
		return rsltMsgEKU0011A010;
	}
	// ANK-3136-00-00 2017/11/21 ADD END
	
	/*
	 * --------------------------------------------------------------------------------------------
	 *  以下共通で使用するUtil系のメソッド ↓↓↓↓↓
	 * --------------------------------------------------------------------------------------------
	 */

	/**
	 * サービスインターフェース呼び出し処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param siInMap サービスインターフェースの入力マップ
	 * @param contents サービスインターフェースのテンプレート項目の配列
	 * @return 業務データ
	 * @throws Throwable 
	 */
	private CAANMsg callSvcInter(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			HashMap<String, Object> siInMap,
			Object[][] contents)
			throws Throwable
	{
		
		// サービスインターフェースの呼び出し
		Map<?, ?> rsltMap = this.scCall.run(siInMap, handle);
		// エラーマッピング処理
		this.mapper.editResultRP(rsltMap, param, fixedText, contents);
		// エラーチェック処理
		errChk(rsltMap);
		// 業務データ取得処理
		CAANMsg workData = getWorkCAANMsg(rsltMap);

		return workData;
	}

	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @throws SCCallException 
	 */
	private 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(JCMConstants.STATUS_INT_KEY);
		
		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}

	/**
	 * 業務データの取得処理です。
	 * <br>
	 * @param workMapKey 業務データのマップキー
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private CAANMsg getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate;
	}
}
