/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKKkopHiChrgJdg
*   ソースファイル名：JKKKkopHiChrgJdg.java
*   作成者          ：富士通
*   日付            ：2014年05月07日
*＜機能概要＞
*   機器オプション非課金判定処理クラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v9.00.00    2014/05/07   FJ）江藤    新規作成(【ANK-2054-00-00】スマートリンク端末補償)
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.Map;
import java.lang.String;

import com.fujitsu.futurity.bp.custom.constant.JKKKkopHiChrgJdgConstCC;
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.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2541B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2541B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg1List;


public class JKKKkopHiChrgJdg extends AbstractCommonComponent
{
	/** エラーメッセージ */
	public static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;
	
	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKKkopHiChrgJdgMapperCC mapper = null;

	/** 割賦契約状態 割賦無し */
	private static final String KAP_KEI_SKY_NON = "0";
	
	/** 割賦契約状態 課金開始前 */
	private static final String KAP_SKY_STAT_CHG_STA_BF = "1";
	
	/** 割賦契約状態 課金開始後 */
	private static final String KAP_SKY_STAT_CHG_STA_AF = "2";
	
	/**
	 * 初期処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// マッパーの初期化
		if (null == this.mapper)
		{
			this.mapper = new JKKKkopHiChrgJdgMapperCC();
		}

		if (param.getData(fixedText) == null)
		{  //本来は呼び出し側でparamに詰め込むべき
			param.setData(fixedText, new HashMap<String, Object>());
		}

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}

		// リターンコードに正常を設定
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, JCMConstants.RET_NORMAL);
	}
	
	/**
	 * 入力パラメータのチェックを行います。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @return エラーメッセージ
	 */
	@SuppressWarnings("unchecked")
	private String chkInput(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData)
	{
		String strVal;
		
		// サービス契約サービス課金終了年月日
		strVal = (String)trgtData.get(JKKKkopHiChrgJdgConstCC.SVKEI_SVC_CHRG_ENDYMD);
		
		if (JKKBpCommon.isNull(strVal))
		{
			return "サービス契約サービス課金終了年月日が未設定";
		}
		
		// 機器オプションサービス契約番号
		strVal = (String)trgtData.get(JKKKkopHiChrgJdgConstCC.KKOP_SVC_KEI_NO);
		
		if (JKKBpCommon.isNull(strVal))
		{
			return "機器オプションサービス契約番号が未設定";
		}
		
		// 機器オプションサービス契約サービス終了年月日
		strVal = (String)trgtData.get(JKKKkopHiChrgJdgConstCC.KKOP_SVC_ENDYMD);
		
		if (JKKBpCommon.isNull(strVal))
		{
			return "機器オプションサービス契約サービス終了年月日が未設定";
		}
		
		return "";
	}
	/**
	 * 非課金判定処理<br>
	 * 機器オプションサービス契約の課金・非課金を判定する<br>
	 * ＜前提条件＞<br>
	 * ・本体のサービス契約の解約に伴う機器オプションサービス契約の課金・非課金を判定します<br>
	 * ・本体のサービス契約の解約前に呼び出される場合があるため、INPUTのサービス契約サービス課金終了年月日を設定してください<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public void jdgHiChrg(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData, String fixedText) 
	throws Throwable
	{
		init(param, fixedText);
		
		// 入力パラメータチェック処理
		String errMsg = chkInput(handle, param, trgtData);

		if (!JKKCommonUtil.isNull(errMsg))
		{
			// チェックエラー
			throw new CCException("", new SCCallException(errMsg, String.valueOf(9051), 8011));
		}
		
		// ■機器オプションサービス契約一意照会
		CAANMsg msgEKK2811A010 = callEKK2811A010SC(handle, param, trgtData, fixedText, (String)trgtData.get(JKKKkopHiChrgJdgConstCC.KKOP_SVC_KEI_NO));
		
		// ■機器オプションサービス毎に非課金判定を行う
		String kkopSvcCd = (String)msgEKK2811A010.getString(EKK2811A010CBSMsg1List.KKOP_SVC_CD);
		
		if (JKKStrConst.KKOP_SVC_CD_TNMT_COMPS.equals(kkopSvcCd))
		{
			// ■タブレット端末補償の非課金判定
			jdgHiChrgTabletTmcp(handle, param, trgtData, fixedText, msgEKK2811A010);
		}
		else
		{
			// 2014//05/07時点では、タブレット端末補償以外の呼出はない
		}
		
	}
	
	/**
	 * タブレット端末補償非課金判定処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK2811A010 機器オプションサービス契約一意照会結果
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void jdgHiChrgTabletTmcp(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,CAANMsg msgEKK2811A010 
	) throws Throwable
	{
		
		// ■機器提供サービス契約一意照会
		CAANMsg msgEKK0341A010 = callEKK0341A010SC(handle, param, trgtData, fixedText, msgEKK2811A010.getString(EKK2811A010CBSMsg1List.KKTK_SVC_KEI_NO));
		
		// ■サービス契約一意照会
		CAANMsg msgEKK0081A010 = callEKK0081A010SC(handle, param, trgtData, fixedText, msgEKK0341A010.getString(EKK0341A010CBSMsg1List.SVC_KEI_NO));
		
		// ■出力パラメータ設定用変数
 		// 解約時課金フラグ
		String dsljiChrgFlg = JKKKkopHiChrgJdgConstCC.CHRG;
		
		// 機器オプションサービス契約サービス課金終了年月日
		String kkopSvcChrgEndymd = (String)trgtData.get(JKKKkopHiChrgJdgConstCC.SVKEI_SVC_CHRG_ENDYMD);
		
		// ■本体サービス契約が非課金の場合
		if (isSvkeiHiChrg(handle, param, trgtData, fixedText, msgEKK0081A010))
		{
			// 非課金
			dsljiChrgFlg = JKKKkopHiChrgJdgConstCC.HICHRG;
		}
		// ■本体サービス契約が課金の場合
		else
		{
			// ■割賦契約の状態により、非課金を判定する
			
			// 割賦請求状態取得
			String kapSkyStat = getKapSkyStat(handle, param, trgtData, fixedText, msgEKK0341A010);
			
			// 割賦契約が存在し課金開始前の場合
			if(KAP_SKY_STAT_CHG_STA_BF.equals(kapSkyStat))
			{
				// 非課金
				dsljiChrgFlg = JKKKkopHiChrgJdgConstCC.HICHRG;
				
			}
			// 割賦契約が存在し課金開始後の場合
			else if (KAP_SKY_STAT_CHG_STA_AF.equals(kapSkyStat))
			{
				
			}
			// 割賦が存在しない場合
			else
			{
				
			}
		}
		
		// ■この時点で非課金と決定していない場合、機器オプションの状態により非課金を判定
		if (!JKKKkopHiChrgJdgConstCC.HICHRG.equals(dsljiChrgFlg))
		{
			
			if (isKkopSvkeiHiChrg(handle, param, trgtData, fixedText, msgEKK2811A010 ))
			{
				// 非課金
				dsljiChrgFlg = JKKKkopHiChrgJdgConstCC.HICHRG;
			}
			else
			{
				// 課金
			}
		}
		
		// ■出力パラメータ設定
		trgtData.put(JKKKkopHiChrgJdgConstCC.DSLJI_CHRG_FLG, dsljiChrgFlg);
		trgtData.put(JKKKkopHiChrgJdgConstCC.KKOP_SVC_CHRG_ENDYMD, kkopSvcChrgEndymd);
	}
	

	/**
	 * 本体サービス契約の非課金判定<br>	
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会結果
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isSvkeiHiChrg(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,CAANMsg msgEKK0081A010
	) throws Throwable
	{
		// ■入力パラメータ取得
		// サービス契約サービス課金開始年月日
		String svkeiSvcChrgStaymd = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD);
		// サービス契約サービス課金終了年月日
		String svkeiSvcChrgEndymd = (String)trgtData.get(JKKKkopHiChrgJdgConstCC.SVKEI_SVC_CHRG_ENDYMD);
		
		// サービス契約のサービス課金開始年月日が未設定
		if (JKKBpCommon.isNull(svkeiSvcChrgStaymd))
		{
			return true;
		}
		// サービス契約のサービス課金開始年月日が設定済
		else
		{
			if (JKKBpCommon.isNull(svkeiSvcChrgEndymd))
			{
				// サービス契約が解約済の状態で呼出されているため、
			}
			else
			{
				// サービス契約の課金開始と課金終了が逆点
				if (svkeiSvcChrgStaymd.compareTo(svkeiSvcChrgEndymd) > 0)
				{
					return true;
				}
				else
				{
					// サービス契約が課金開始後
				}
			}
		}
		
		return false;
	}

	/**
	 * 割賦請求状態取得<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 機器提供サービス契約一意照会結果
	 * @return 割賦契約状態(KAP_SKY_STAT_CHG_STA_AF、KAP_SKY_STAT_CHG_STA_BF、KAP_KEI_SKY_NON)
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private String getKapSkyStat(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,CAANMsg msgEKK0341A010
	) throws Throwable
	{
		// 割賦契約存在フラグ true：有効な割賦契約が存在する
		boolean existsKap = false;
		
		// 割賦請求開始フラグ true：割賦契約課金開始年月日が設定されている
		boolean isKapSeikySta = false;
		
		String result = null;
		
		// 割賦契約一覧照会（機器提供サービス契約番号）
		CAANMsg[] msgListEKK2541B001 = callEKK2541B001SC(handle, param, trgtData, fixedText, msgEKK0341A010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		
		if(msgListEKK2541B001 != null && msgListEKK2541B001.length > 0)
		{
			for (CAANMsg msgEKK2541B001 : msgListEKK2541B001)
			{
				// 割賦契約ステータス
				String kapKeiStat = msgEKK2541B001.getString(EKK2541B001CBSMsg1List.KAP_KEI_STAT);
				
				if (!JKKStrConst.CD00037_DSL_ZM.equals(kapKeiStat) && !JKKStrConst.CD00037_CANCEL_ZM.equals(kapKeiStat))
				{
					// 解約・キャンセル以外割賦契約が存在する場合、割賦契約存在フラグにtrueを設定
					existsKap = true;
					
					// 割賦契約課金開始年月日に値が設定されている場合、請求開始していると判定
					if(!JKKBpCommon.isNull(msgEKK2541B001.getString(EKK2541B001CBSMsg1List.KAP_KEI_CHRG_STAYMD)))
					{
						isKapSeikySta = true;
						break;
					}
				}
			}
		}
		
		if (existsKap)
		{
			if (isKapSeikySta)
			{
				// 課金開始後
				result = KAP_SKY_STAT_CHG_STA_AF;
			}
			else
			{
				// 課金開始前
				result = KAP_SKY_STAT_CHG_STA_BF;
			}
		}
		else
		{
			// 割賦無し
			result = KAP_KEI_SKY_NON;
		}
		
		return result;
		
	}

	/**
	 * 機器オプションサービス契約の非課金判定<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK2811A010 機器オプションサービス契約一意照会結果
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isKkopSvkeiHiChrg(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,CAANMsg msgEKK2811A010 
	) throws Throwable
	{
		
		// 機器オプションサービス契約サービス開始年月日
		String kkopSvcStaymd = msgEKK2811A010.getString(EKK2811A010CBSMsg1List.SVC_STAYMD);
		
		// 機器オプションサービス契約サービス終了年月日
		String kkopSvcEndymd = (String)trgtData.get(JKKKkopHiChrgJdgConstCC.KKOP_SVC_ENDYMD);
		
		// 機器オプションサービス契約のサービス開始年月日が未設定
		if (JKKBpCommon.isNull(kkopSvcStaymd))
		{
			// 非課金
			return true;
		}
		// 機器オプションサービス契約のサービス開始年月日が設定済
		else
		{
			// サービス開始年月日と同日に解約する場合
			if(kkopSvcStaymd.equals(kkopSvcEndymd))
			{
				// 非課金
				return true;
			}
			else
			{
				// 課金
			}
		}
		
		return false;
	}
	
	/**
	 * 機器オプションサービス契約一意照会処理
	 * <br>
	 * 機器オプションサービス契約一意照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @return 機器オプションサービス契約一意照会結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callEKK2811A010SC(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,String kkopSvcKeiNo
	) throws Throwable
	{
		// 照会結果
		CAANMsg msg = null;

		// 上りマッピング処理
		HashMap<String, Object> inMap = this.mapper.editInMsgEKK2811A010(param, kkopSvcKeiNo);
		
		// サービスインターフェース呼び出し
		CAANMsg rsltMsg = callSvcInter(handle, param, fixedText, inMap, new EKK2811A010CBSMsg().getContents());

		// 結果を返却
		CAANMsg[] rsltMsgList = rsltMsg.getCAANMsgList(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
		if (rsltMsgList != null && rsltMsgList.length > 0)
		{
			msg = rsltMsgList[0];
		}
		else
		{
			throw new CCException("", new SCCallException("機器オプションサービス契約一意照会 該当データなし", String.valueOf(9051), 8011));
		}

		return msg;
	}
	
	/**
	 * 機器提供サービス契約一意照会処理
	 * <br>
	 * 機器提供サービス契約一意照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @return 機器提供サービス契約一意照会結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callEKK0341A010SC(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,String kktkSvcKeiNo
	) throws Throwable
	{
		// 照会結果
		CAANMsg msg = null;

		// 上りマッピング処理
		HashMap<String, Object> inMap = this.mapper.editInMsgEKK0341A010(param, kktkSvcKeiNo);
		
		// サービスインターフェース呼び出し
		CAANMsg rsltMsg = callSvcInter(handle, param, fixedText, inMap, new EKK0341A010CBSMsg().getContents());

		// 結果を返却
		CAANMsg[] rsltMsgList = rsltMsg.getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		if (rsltMsgList != null && rsltMsgList.length > 0)
		{
			msg = rsltMsgList[0];
		}
		else
		{
			throw new CCException("", new SCCallException("機器提供サービス契約一意照会 該当データなし", String.valueOf(9051), 8011));
		}

		return msg;
	}
	
	/**
	 * サービス契約一意照会処理
	 * <br>
	 * サービス契約一意照会サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @return サービス契約一意照会結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callEKK0081A010SC(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,String svcKeiNo
	) throws Throwable
	{
		// 照会結果
		CAANMsg msg = null;

		// 上りマッピング処理
		HashMap<String, Object> inMap = this.mapper.editInMsgEKK0081A010(param, svcKeiNo);
		
		// サービスインターフェース呼び出し
		CAANMsg rsltMsg = callSvcInter(handle, param, fixedText, inMap, new EKK0081A010CBSMsg().getContents());

		// 結果を返却
		CAANMsg[] rsltMsgList = rsltMsg.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if (rsltMsgList != null && rsltMsgList.length > 0)
		{
			msg = rsltMsgList[0];
		}
		else
		{
			throw new CCException("", new SCCallException("サービス契約一意照会 該当データなし", String.valueOf(9051), 8011));
		}

		return msg;
	}
	
	/**
	 * 割賦契約一覧照会（機器提供サービス契約番号）処理
	 * <br>
	 * 割賦契約一覧照会（機器提供サービス契約番号）サービスインターフェースを呼び出します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @return 割賦契約一覧照会（機器提供サービス契約番号）結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg[] callEKK2541B001SC(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap trgtData
			,String fixedText
			,String kktkSvcKeiNo
	) throws Throwable
	{

		// 上りマッピング処理
		HashMap<String, Object> inMap = this.mapper.editInMsgEKK2541B001(param, kktkSvcKeiNo);
		
		// サービスインターフェース呼び出し
		CAANMsg rsltMsg = callSvcInter(handle, param, fixedText, inMap, new EKK2541B001CBSMsg().getContents());

		// 結果を返却
		CAANMsg[] rsltMsgList = rsltMsg.getCAANMsgList(EKK2541B001CBSMsg.EKK2541B001CBSMSG1LIST);

		return rsltMsgList;
	}
	
	/*
	 * --------------------------------------------------------------------------------------------
	 *  以下共通で使用する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;
	}

}
