/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSvkeiShosaBaseCC
*	ソースファイル名：JKKSvkeiShosaBaseCC.java
*	作成者			：富士通
*	日付			：2012年09月24日
*＜機能概要＞
*	サービス契約照査CCの基底クラスです。<br/>
*	ロット２追加案件対応で、顧客管理情報更新機能のみこちらに分離します。
*
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/09/24	富士通		新規作成
*	v8.00.00	2014/06/20	FJ)田中		【OM-2014-0001926】ホスティング契約が存在する場合契約者住所情報とコンテンツ住所情報を同期する
*	v9.00.00	2014/06/18	FJ)藤本		【OM-2014-0002178】オープン会員が追加したモバイル契約を照査するとマイポータルにログインできなくなる
*	v9.01.00	2014/06/23	FJ)田中		【OM-2014-0001926】関連対応 連絡先登録S-IF呼び出し時のキーを修正
*  v10.00.00    2014/09/14	FJ)田中		【OM-2014-0002974】対応
*  v33.00.00	2017/06/19	FJ) 辻本	【ANK-3179-00-00】解約済み契約の請求明細表示
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAddSjishoConst;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.custom.constant.JKKSvkeiShosaConstCC;
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.IRequestParameterReadOnly;
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.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JCKStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0111B002CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0121B020CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0121B020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0201B001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0201C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B519CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B519CBSMsg1List;

/**
 * サービス契約照査CC基底クラス
 * 
 * @author 富士通
 * @since 2012-09-24 v4.0.0 ロット２追加案件対応
 */
public abstract class JKKSvkeiShosaBaseCC extends AbstractCommonComponent
{

	/** お客様一意照会 */
	protected static final String MAP_KEY_ECK0011A010 = "ECK0011A010";

	/** お客様＜個人＞一意照会 */
	protected static final String MAP_KEY_ECK0021A010 = "ECK0021A010";

	/** お客様＜法人＞一意照会 */
	protected static final String MAP_KEY_ECK0031A010 = "ECK0031A010";

	/** 会員種別変更 */
	protected static final String MAP_KEY_ECK0011C120 = "ECK0011C120";

	// 2012-03-08 追加↓↓↓
	/** グループ登録 */
	protected static final String MAP_KEY_ECK0111D010 = "ECK0111D010";
	// 2012-03-08 追加↑↑↑

	// 20130211 ST2-2013-0000652 ADD START 
	/** ファミリー会員グループ一覧照会（SYSID） */
	protected static final String MAP_KEY_ECK0111B002 = "ECK0111B002";
	// 20130211 ST2-2013-0000652 ADD END

	//↓↓↓2012-09-24追加　ロット２ ANK-0024-05-00↓↓↓
	/** お客様グループ設定一覧照会(PMP連携用) */
	protected static final String MAP_KEY_ECK0121B020 = "ECK0121B020";

	/** お客様グループ設定無効 */
	protected static final String MAP_KEY_ECK0121C020 = "ECK0121C020";
	//↑↑↑2012-09-24追加　ロット２ ANK-0024-05-00↑↑↑
	
	// OM-2014-0001926対応 20140620 田中 ADD START
	/** 連絡先一覧照会 **/
	protected static final String MAP_KEY_ECK0201B001 = "ECK0201B001";
	/** 連絡先登録 **/
	protected static final String MAP_KEY_ECK0201D010 = "ECK0201D010";
	// OM-2014-0002974対応 20140914 田中 ADD START
	/** 連絡先変更 **/
	protected static final String MAP_KEY_ECK0201C010 = "ECK0201C010";
	// OM-2014-0002974対応 20140914 田中 ADD END
	/** お客様＜個人＞内容変更 **/
	protected static final String MAP_KEY_ECK0021C010 = "ECK0021C010";
	/** お客様＜法人＞内容変更 **/
	protected static final String MAP_KEY_ECK0031C010 = "ECK0031C010";
	// OM-2014-0001926対応 20140620 田中 ADD END
	

	// 2012/07/07 IT2-2012-0000990 ADD START
	/** 会員種別コード　00：非eo会員 */
	public static final String MBTYPE_CD_MST_NOT = "00";
	// 2012/07/07 IT2-2012-0000990 ADD END

	/** 会員種別コード　10：マスター会員（個人） */
	public static final String MBTYPE_CD_MST_KOJIN = "10";
	
	/** 会員種別コード　20：マスター会員（法人） */
	public static final String MBTYPE_CD_MST_HOJIN = "20";
	
	/** 契約者タイプコード　1：個人 */
	public static final String KSH_TYPE_CO_KOJIN = "1";
	
	/** 契約者タイプコード　2：法人 */
	public static final String KSH_TYPE_CO_HOJIN = "2";
	
	/** 契約者タイプコード　3：保守用 */
	public static final String KSH_TYPE_CO_MNT = "3";
	
	/** 契約者タイプコード　4：自社利用 */
	public static final String KSH_TYPE_CO_JISHA_USE = "4";

	/** 料金グループコード　02：eo光ネットホームタイプ */
	public static final String PRC_GRP_CD_HOME = "02";
	
	/** 料金グループコード　03：eo光ネットメゾンタイプ */
	public static final String PRC_GRP_CD_MEZON = "03";
	
	/** 料金グループコード　04：eo光ネットマンションタイプ */
	public static final String PRC_GRP_CD_MANS = "04";
	
	/** 料金グループコード　05：eoADSL(eAccess) */
	public static final String PRC_GRP_CD_EACCESS = "05";
	
	/** 料金グループコード　06：eoADSL(フレッツ) */
	public static final String PRC_GRP_CD_FU = "06";
	
	/** 料金グループコード　07：eoモバイル(Wi-Fi) */
	public static final String PRC_GRP_CD_WIFI = "07";
	
	/** 料金グループコード　08：eoモバイル(EM) */
	public static final String PRC_GRP_CD_EM = "08";
	
	/** 料金グループコード　09：eoモバイル(UQ-WiMAX) */
	public static final String PRC_GRP_CD_WIMAX = "09";
	
	/** 料金グループコード　10：eo光電話 */
	public static final String PRC_GRP_CD_HTEL = "10";
	
	/** 料金グループコード　11：eo光テレビ(K-CAT) */
	public static final String PRC_GRP_CD_TV_KCAT = "11";
	
	/** 料金グループコード　12：eo光テレビ(KCN) */
	public static final String PRC_GRP_CD_TV_KCN = "12";
	
	/** 料金グループコード　13：eo光テレビ(再送信) */
	public static final String PRC_GRP_CD_TV_SSS = "13";

	

	/** 一意照会、一覧照会のサービスインタフェース呼び出しで使用するマッパー群 */
	protected JKKSvkeiShosaShokaiMapperCC shokaiMapper = null;
	
	/** 照査OKの場合にサービスインタフェース呼び出しで使用するマッパー群 */
	protected JKKSvkeiShosaShosaOkMapperCC shosaOkMapper = null;
	
	/** 排他対応更新年月日管理マッパー **/
	protected JKKExclusiveMapper kkExclusiveMapper = null;



	// 2012/08/22 ST2-2012-0001585 ADD START 更新前会員種別コード保持用変数を追加
	/** 会員種別コード(更新前) */
	protected String memberSbtCdBefore  = null;
	// 2012/08/22 ST2-2012-0001585 ADD END

	/**
	 * 現在処理中のSYSID
	 * @since 2012-04-23 巻@　指示書CC取込み対応
	 */
	protected String currentSysid = null;

	/**
	 * 初期eoId
	 * @since 2012-09-25 ロット２追加案件 ANK-0024-05-00
	 */
	protected String shk_eoId = null;


	/**
	 * お客様管理情報を更新します
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param rsltShokai 一覧照会／一意照会結果　一式の入ったマップ
	 * @param prcGrpCd 料金グループコード
	 * @param svc_kei_no サービス契約番号
	 * @param cntrAi 処理順番
	 * @param errorList エラー情報
	 * @return メンバー種別
	 * @throws Throwable 任意の例外
	 * @since 2012-09-24 ロット２ ANK-0024-05-00
	 */
	@SuppressWarnings("unchecked")
	protected String updCustinfo(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> rsltShokai, String prcGrpCd, String svc_kei_no, int cntrAi, ArrayList<Object> errorList) throws Throwable
	{
		//お客様情報の取得
		CAANMsg[] workECK0011A010 = getWorkParentData(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST, rsltShokai, MAP_KEY_ECK0011A010);

		String memberSbtCd = workECK0011A010[0].getString(ECK0011A010CBSMsg1List.MEMBER_SBT_CD);
//		String shk_eoid = workECK0011A010[0].getString(ECK0011A010CBSMsg1List.SHK_EOID);
		String keisyaTypeCd =  workECK0011A010[0].getString(ECK0011A010CBSMsg1List.KEISHA_TYPE_CD);
		//↓↓↓2012-04-23追加　巻@　指示書CC取込み対応↓↓↓
		currentSysid = workECK0011A010[0].getString(ECK0011A010CBSMsg1List.SYSID);
		//↑↑↑2012-04-23追加　巻@　指示書CC取込み対応↑↑↑
		// 2012/07/07 IT2-2012-0000990 ADD START
		// 変更前会員種別コードを取得(後の処理で、変数に変更後の値が設定される)
		String regitMemberSbtCd = workECK0011A010[0].getString(ECK0011A010CBSMsg1List.MEMBER_SBT_CD);
		// 2012/07/07 IT2-2012-0000990 ADD END
		// 20130211 ST2-2013-0000652 ADD START
		boolean isGroup = false;
		// 20130211 ST2-2013-0000652 ADD END
		// ▼▼▼▼▼ ST2-2013-0000028 UPD START ▼▼▼▼▼
		// *************************************************** //
		// お客様回復ＣＣ                                      //
		// *************************************************** //
		//↓↓↓2012-09-24追加　ロット２追加案件 ANK-0024-05-00↓↓↓
		// お客様退会年月日がある場合、お客様回復処理を行い、上位に戻る
		String cust_taikai_ymd = workECK0011A010[0].getString(ECK0011A010CBSMsg1List.CUST_TAIKAI_YMD);
		if (!JKKBpCommon.isNull(cust_taikai_ymd))
		{
			// お客様回復
			editCustKaihkMap(param, JKKSvkeiShosaConstCC.CUSTKAIHK_MAP, svc_kei_no);
			(new JCKCustKaihkCmnCC()).execute(handle, param, JKKSvkeiShosaConstCC.CUSTKAIHK_MAP);

			return regitMemberSbtCd;
		}
		//↑↑↑2012-09-24追加　ロット２追加案件 ANK-0024-05-00↑↑↑

		// *************************************************** //
		// 料金グループコード判定                              //
		// *************************************************** //
		if (PRC_GRP_CD_TV_KCN.equals(prcGrpCd) || PRC_GRP_CD_TV_SSS.equals(prcGrpCd))
		{
			return regitMemberSbtCd;
		}

		// *************************************************** //
		// 会員種別判定                                        //
		// *************************************************** //
		// 会員種別コードによって処理を分岐
		// 20120517 ST2-2012-0000717 START
		if(
				memberSbtCd.equals(MBTYPE_CD_MST_KOJIN)
				|| memberSbtCd.equals(MBTYPE_CD_MST_HOJIN)
		)
		// 20120517 ST2-2012-0000717 END
		{
			// マスター会員の場合は特に何もしない
			// ※ ケース１：既にマスター会員の場合
			// ※ ケース２：１SYSID、複数サービス契約の場合で
			//    １サービス契約目の処理でマスター会員に変更された場合
			return regitMemberSbtCd;
		}
		// ▲▲▲▲▲ ST2-2013-0000028 UPD E N D ▲▲▲▲▲

		// 会員種別コードがマスター以外の場合
		// 契約者タイプコードで個人か法人判断する
		if(keisyaTypeCd.equals(KSH_TYPE_CO_KOJIN))
		{
			regitMemberSbtCd = MBTYPE_CD_MST_KOJIN;
		}
		else if (
				keisyaTypeCd.equals(KSH_TYPE_CO_HOJIN)
				|| keisyaTypeCd.equals(KSH_TYPE_CO_JISHA_USE)
		)
		{
			regitMemberSbtCd = MBTYPE_CD_MST_HOJIN;
		}
		else if (keisyaTypeCd.equals(KSH_TYPE_CO_MNT))
		{
			ArrayList<HashMap> workECK0021A010Array = null;	// お客様個人一意照会
			ArrayList<HashMap> workECK0031A010Array = null;	// お客様法人一意照会
		
			// 一意照会(個人)の結果データを取得
			workECK0021A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0021A010);
			workECK0031A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0031A010);
			
			String keisyaFlg = "0";
			
			if(workECK0021A010Array != null)
			{
				for (int o = 0; o < workECK0021A010Array.size(); o++)
				{
					CAANMsg[] workECK0021A010 = getWorkData(ECK0021A010CBSMsg.ECK0021A010CBSMSG1LIST, (Map)workECK0021A010Array.get(o));
					if(workECK0021A010 != null)
					{
						for (int p = 0; p < workECK0021A010.length; p++)
						{
							regitMemberSbtCd = MBTYPE_CD_MST_KOJIN;
							keisyaFlg = "1";
							break;
						}
					}
				}
			}
			
			if(workECK0031A010Array != null)
			{
				for (int r = 0; r < workECK0031A010Array.size(); r++)
				{
					CAANMsg[] workECK0031A010 = getWorkData(ECK0031A010CBSMsg.ECK0031A010CBSMSG1LIST, (Map)workECK0031A010Array.get(r));
					if(workECK0031A010 != null)
					{
						for (int s = 0; s < workECK0031A010.length; s++)
						{
							regitMemberSbtCd = MBTYPE_CD_MST_HOJIN;
							keisyaFlg = "1";
							break;
						}
					}
				}
			}
			
			if("0".equals(keisyaFlg))
			{
				regitMemberSbtCd = MBTYPE_CD_MST_HOJIN;
			}
		}
		
		// OM-2014-0001926対応 20140620 田中 ADD START
		HashMap<String, Object> wkMap = null;
		ArrayList<Object> wkErrorList = null;
		
		JKKSIFEKK0081Mapper mapperEKK0081 = new JKKSIFEKK0081Mapper();
		CAANMsg templateEKK0081B519 = mapperEKK0081.getMappedTemplateEKK0081B519(workECK0011A010[0].getString(ECK0011A010CBSMsg1List.SYSID), "1");
		// SIF実行
		CAANMsg[] resultMsgs = callScCmn(param, handle, templateEKK0081B519, mapperEKK0081);
		if (resultMsgs != null && resultMsgs.length > 0)
		{
			// SYSIDに紐づくサービス契約をまわしてホスティングサービス契約を確認する。
			CAANMsg[] svcKeiList = resultMsgs[0].getCAANMsgList(EKK0081B519CBSMsg.EKK0081B519CBSMSG1LIST);
			for (int i=0; i < svcKeiList.length; i++)
			{
				CAANMsg eKK0081Map = svcKeiList[i];
				String svcCd = eKK0081Map.getString(EKK0081B519CBSMsg1List.SVC_CD);
				String svcKeiStat = eKK0081Map.getString(EKK0081B519CBSMsg1List.SVC_KEI_STAT);
				// サービスコードが"ホスティング"かつサービス提供中
				if (JKKStrConst.CD00130_04.equals(svcCd)
				 && JKKSvcConst.SVC_KEI_STAT_100.equals(svcKeiStat))
				{
					// 契約者情報をコンテンツ情報にコピー
					// お客様が個人の場合
					if (MBTYPE_CD_MST_KOJIN.equals(regitMemberSbtCd))
					{
						// お客様情報＜個人＞変更を実行
						wkMap = editMapCustKojin(param, rsltShokai);
						
						wkErrorList = runShosa(handle, param, wkMap, MAP_KEY_ECK0021C010);
						errorList.addAll(wkErrorList);
					} 
					// お客様が法人の場合
					else if(MBTYPE_CD_MST_HOJIN.equals(regitMemberSbtCd))
					{	
						// お客様情報＜法人＞変更を実行
						wkMap = editMapCustHojin(param, rsltShokai);
					
						wkErrorList = runShosa(handle, param, wkMap, MAP_KEY_ECK0031C010);
						errorList.addAll(wkErrorList);
					}
					
					// 連絡先登録
					wkMap = editMapRrks(param, rsltShokai);
				
					// OM-2014-0001926関連対応 20140623 田中 MOD START
//					wkErrorList = runShosa(handle, param, wkMap, MAP_KEY_ECK0031C010);
					// OM-2014-0002974対応 20140914 田中 MOD START
//					wkErrorList = runShosa(handle, param, wkMap, MAP_KEY_ECK0201D010);
					wkErrorList = runShosa(handle, param, wkMap, (String)wkMap.get("map_key"));
					// OM-2014-0002974対応 20140914 田中 MOD END
					// OM-2014-0001926関連対応 20140623 田中 MOD END
					
					errorList.addAll(wkErrorList);
					
					// 処理終了後にループを抜ける
					break;
				}
			}
		}
		// OM-2014-0001926対応 20140620 田中 ADD END
		
		// ANK-3179-00-00 ADD START
		String dslAfSkssnsKh = null;
		// 「更新前の会員種別コードが"30:オープン会員"」且つ「更新後の会員種別コードが"10:マスター会員(個人)"または"20:マスター会員(法人)"」の場合
		if (JCKStrConst.CD00039_OPEN.equals(memberSbtCd) && (MBTYPE_CD_MST_KOJIN.equals(regitMemberSbtCd) || MBTYPE_CD_MST_HOJIN.equals(regitMemberSbtCd)))
		{
			// 解約後請求書参照可否を"0(否)"に設定する
			dslAfSkssnsKh = JCKStrConst.CD00003_FAIL;
		}
		// ANK-3179-00-00 ADD END
		
		// 会員種別変更を実行
		// OM-2014-0001926対応 20140620 田中 MOD START
//		HashMap<String, Object> wkMap = editMapMemberStb(param, cntrAi, rsltShokai, regitMemberSbtCd)
		// ANK-3179-00-00 MOD START
//		wkMap = editMapMemberStb(param, cntrAi, rsltShokai, regitMemberSbtCd);;
		wkMap = editMapMemberStb(param, cntrAi, rsltShokai, regitMemberSbtCd, dslAfSkssnsKh);
		// ANK-3179-00-00 MOD END
		// OM-2014-0001926対応 20140620 田中 MOD END

		// 2012/08/22 ST2-2012-0001585 ADD START 更新前会員種別コードを保持
		memberSbtCdBefore = memberSbtCd;
		// 2012/08/22 ST2-2012-0001585 ADD END
		
		//↓↓↓2012-04-23更新　巻@　指示書CC取込み対応↓↓↓
		// OM-2014-0001926対応 20140620 田中 MOD START
//		ArrayList<Object> wkErrorList = runShosa(handle, param, wkMap, MAP_KEY_ECK0011C120);
		wkErrorList = runShosa(handle, param, wkMap, MAP_KEY_ECK0011C120);
		// OM-2014-0001926対応 20140620 田中 MOD END
	//	wkErrorList = runSjisho(handle, param, wkMap, MAP_KEY_ECK0011C120);
		//↑↑↑2012-04-23更新　巻@　指示書CC取込み対応↑↑↑
		errorList.addAll(wkErrorList);
		

		
		// 20130211 ST2-2013-0000652 ADD START
		ArrayList<HashMap> workECK0111B002Array = null;	// ファミリー会員グループ一覧照会（SYSID）
		// ファミリー会員グループ一覧照会（SYSID）
		workECK0111B002Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0111B002);
		
		if(workECK0111B002Array != null)
		{
			CAANMsg[] workECK0111B002 = getWorkData(ECK0111B002CBSMsg.ECK0111B002CBSMSG1LIST, (Map)workECK0111B002Array.get(0));
			
			if(workECK0111B002 != null && workECK0111B002.length > 0){
				isGroup = true;
			}
		}

		// 20130211 ST2-2013-0000652 ADD END
		// 2012-03-08 追加↓↓↓
		//グループ登録、お客様グループ設定
		// 20130211 ST2-2013-0000652 MOD START
		// ANK-1584-00-00_Ｌ２−ＭＶＮＯサービス対応 2014/01/06 START
		// ファイミリ会員の場合の処理を行うために、条件を追加
		if(!isGroup ||
				JCKStrConst.CD00039_FAMILY_HOJIN.equals(memberSbtCdBefore) 
				|| JCKStrConst.CD00039_FAMILY_KOJIN.equals(memberSbtCdBefore)){
		// ANK-1584-00-00_Ｌ２−ＭＶＮＯサービス対応 2014/01/06 END
			wkMap = editMapGrp(param, cntrAi, rsltShokai);
			
			wkErrorList = runMakeGrp(handle, param, wkMap);
			errorList.addAll(wkErrorList);
		}
		// 20130211 ST2-2013-0000652 MOD END
		// 2012-03-08 追加↑↑↑
//↓↓↓2012-04-23更新　巻@　指示書CC取込み対応↓↓↓
		//連携データ区分01「お客様のグループ情報」
		JKKBpCommon.putAxMRenkeiDataKbn(
				param, JKKSvkeiShosaConstCC.SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_CUST_GRP, JKKAddSjishoConst.TRN_KBN_ADD, 
				new String[]{}, currentSysid);
		//連携データ区分11「お客様の基本情報」
		// OM-2014-0002178 オープン会員が追加したモバイル契約を照査するとマイポータルにログインできなくなる 2014/06/18 START
//		JKKBpCommon.putAxMRenkeiDataKbn(
//				param, JKKSvkeiShosaConstCC.SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_CUST_INF, JKKAddSjishoConst.TRN_KBN_ADD, 
//				new String[]{svc_kei_no}, currentSysid);

		// 更新前会員種別コードが「オープン会員」「ファミリー会員（個人）」「ファミリー会員（法人）」の場合
		if (JCKStrConst.CD00039_OPEN.equals(memberSbtCdBefore)
			|| JCKStrConst.CD00039_FAMILY_KOJIN.equals(memberSbtCdBefore)
			|| JCKStrConst.CD00039_FAMILY_HOJIN.equals(memberSbtCdBefore))
		{
			// 処理区分：更新
			JKKBpCommon.putAxMRenkeiDataKbn11(
					param, JKKSvkeiShosaConstCC.SJISHO_MAP, JKKAddSjishoConst.TRN_KBN_UPD, new String[]{svc_kei_no}, currentSysid,
					new String[]{
							"3",	// 更新対象項目：SYSID
							"6",	// 更新対象項目：会員種別
							"11"	// 更新対象項目：ISP利用停止フラグ
					});
		}
		// 更新前会員種別コードが「非eo会員」の場合
		else
		{
			// 処理区分：登録
			JKKBpCommon.putAxMRenkeiDataKbn(
					param, JKKSvkeiShosaConstCC.SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_CUST_INF, JKKAddSjishoConst.TRN_KBN_ADD, 
					new String[]{svc_kei_no}, currentSysid);
		}
		// OM-2014-0002178 オープン会員が追加したモバイル契約を照査するとマイポータルにログインできなくなる 2014/06/18 END
//↑↑↑2012-04-23更新　巻@　指示書CC取込み対応↑↑↑


		return regitMemberSbtCd;
	}


	/**
	 * お客様回復CC 入力マップ編集
	 * 
	 * @param param リクエストパラメータ
	 * @param mapNm マップID
	 * @param svc_kei_no サービス契約番号
	 * @throws RequestParameterException 例外
	 * @since 2012-09-24 ロット２ ANK-0024-05-00
	 */
	@SuppressWarnings("unchecked")
	protected void editCustKaihkMap(IRequestParameterReadWrite param, String mapNm, String svc_kei_no) throws RequestParameterException
	{
		HashMap<String, Object> targetMap = (HashMap<String, Object>)param.getData(mapNm);
		if (null == targetMap)
		{
			targetMap = new HashMap<String, Object>();
			param.setData(mapNm, targetMap);
		}
		
		//機能コード
		targetMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		
		//ＳＹＳＩＤ
		targetMap.put("sysid", currentSysid);
		
		//サービス契約番号
		targetMap.put("svc_kei_no", svc_kei_no);
	}


	/**
	 * 会員種別変更のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userDataIndex param内の業務データのインデックス
	 * @param rsltShokai 一意照会の結果データ
	 * @param regitMemberSbtCd param内の業務データのインデックス
	 * @param dslAfSkssnsKh 解約後請求書参照可否
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editMapMemberStb(IRequestParameterReadWrite param, 
			// ANK-3179-00-00 MOD START
//			int userDataIndex, HashMap<String, Object> rsltShokai, String regitMemberSbtCd)
			int userDataIndex, HashMap<String, Object> rsltShokai, String regitMemberSbtCd, String dslAfSkssnsKh)
			// ANK-3179-00-00 MOD END
	throws Throwable
	{
		HashMap<String, Object> rsltMemberStb = new HashMap();
		HashMap<String, Object> rslt = null;
		
		List<CAANMsg> wkCaanMsgList = null;
		ArrayList<HashMap> wkMapArray = null;
		
		ArrayList<HashMap> workECK0011A010Array = null;	// お客様一意照会
		
		// 一意照会の結果データを取得
		workECK0011A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0011A010);
		
		if (workECK0011A010Array != null) 
		{
			for (int i = 0; i < workECK0011A010Array.size(); i++)
			{
				wkMapArray = new ArrayList();
				CAANMsg[] wkTenplates = getWorkData(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST, (Map)workECK0011A010Array.get(i));
				
				if(wkTenplates != null)
				{
					for (int j = 0; j < wkTenplates.length; j++)
					{
						CAANMsg childTemplate = wkTenplates[j];
						// ANK-3179-00-00 MOD START
//						wkCaanMsgList = shosaOkMapper.editInMsgECK0011C120(param, childTemplate, regitMemberSbtCd);
						wkCaanMsgList = shosaOkMapper.editInMsgECK0011C120(param, childTemplate, regitMemberSbtCd, dslAfSkssnsKh);
						// ANK-3179-00-00 MOD END
						rslt = editInMsgCmn(param, wkCaanMsgList.get(0));
						wkMapArray.add(rslt);
					}
				}
			}
			rsltMemberStb.put(MAP_KEY_ECK0011C120, wkMapArray);
		}
		
		return rsltMemberStb;
	}
	
	// OM-2014-0001926対応 20140620 田中 ADD START
	/**
	 * 
	 * @param param
	 * @param handle
	 * @param template
	 * @return
	 * @throws Throwable
	 */
	private CAANMsg[] callScCmn(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg template,
			JKKSIFMapperBase mapper
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		Map<?, ?> sIFResult = null;

		//テンプレート共通情報を設定
		mapper.editTemplateCommon(param, template);
		
		// サービスIF共通の情報を設定
		sIFRequest = mapper.editInMsgCmn(param);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		sIFResult = (new ServiceComponentRequestInvoker()).run(sIFRequest, handle);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// エラー情報のマッピング
		editResultRP(sIFResult, param);

		errChk(sIFResult);

		// リターンコード取得
		int returnCode = (Integer)sIFResult.get(JCMConstants.RET_CD_INT_KEY);
		if (returnCode != 0) {
			throw new Exception();
		}

		return resultMsgs;
	}
	
	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private IRequestParameterReadWrite editResultRP(
			Map<?, ?> msgList,
			IRequestParameterReadWrite param) 
			throws Throwable 
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_"
				+ String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_"
					+ formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		String tName = template.getString("templateID");		//S-IF名
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}

	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @return void
	 * @throws Exception 
	 * @since 2012-08-27 ST1-2012-0000418対応のついで（業務結果とFW処理結果の格納の切り分け）
	 */
	private void errChk(Map<?, ?> msgList) throws Exception
	{
		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 = "INVALID_RETURN_MESSAGE";
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * お客様情報＜個人＞変更のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param rsltShokai 一意照会の結果データ
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editMapCustKojin(IRequestParameterReadWrite param, HashMap<String, Object> rsltShokai)
	throws Throwable
	{
		HashMap<String, Object> rsltMemberStb = new HashMap();
		HashMap<String, Object> rslt = null;
		
		List<CAANMsg> wkCaanMsgList = null;
		ArrayList<HashMap> wkMapArray = null;
		
		ArrayList<HashMap> workECK0011A010Array = null;	// お客様一意照会
		ArrayList<HashMap> workECK0021A010Array = null;	// お客様個人一意照会
		
		// 一意照会の結果データを取得
		workECK0011A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0011A010);
		
		// 一意照会(個人)の結果データを取得
		workECK0021A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0021A010);
		
		if (workECK0011A010Array != null) 
		{
			for (int i = 0; i < workECK0011A010Array.size(); i++)
			{
				wkMapArray = new ArrayList();
				
				// お客様
				CAANMsg[] wkTenplates1 = getWorkData(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST, (Map)workECK0011A010Array.get(i));
				
				// お客様＜個人＞
				CAANMsg[] wkTenplates2 = getWorkData(ECK0021A010CBSMsg.ECK0021A010CBSMSG1LIST, (Map)workECK0021A010Array.get(i));
				
				
				if(wkTenplates1 != null && wkTenplates2 != null)
				{
					for (int j = 0; j < wkTenplates1.length; j++)
					{
						CAANMsg childTemplate1 = wkTenplates1[j];
						CAANMsg childTemplate2 = wkTenplates2[j];
						wkCaanMsgList = shosaOkMapper.editInMsgECK0021C010(param, childTemplate1, childTemplate2);
						rslt = editInMsgCmn(param, wkCaanMsgList.get(0));
						wkMapArray.add(rslt);
					}
				}
			}
			rsltMemberStb.put(MAP_KEY_ECK0021C010, wkMapArray);
		}
		
		return rsltMemberStb;
	}
	
	/**
	 * お客様情報＜法人＞変更のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param rsltShokai 一意照会の結果データ
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editMapCustHojin(IRequestParameterReadWrite param, HashMap<String, Object> rsltShokai)
	throws Throwable
	{
		HashMap<String, Object> rsltMemberStb = new HashMap();
		HashMap<String, Object> rslt = null;
		
		List<CAANMsg> wkCaanMsgList = null;
		ArrayList<HashMap> wkMapArray = null;
		
		ArrayList<HashMap> workECK0011A010Array = null;	// お客様一意照会
		ArrayList<HashMap> workECK0031A010Array = null;	// お客様個人一意照会
		
		// 一意照会の結果データを取得
		workECK0011A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0011A010);
		
		// 一意照会(法人)の結果データを取得
		workECK0031A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0031A010);
		
		if (workECK0011A010Array != null) 
		{
			for (int i = 0; i < workECK0011A010Array.size(); i++)
			{
				wkMapArray = new ArrayList();
				
				// お客様
				CAANMsg[] wkTenplates1 = getWorkData(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST, (Map)workECK0011A010Array.get(i));
				
				// お客様＜法人＞
				CAANMsg[] wkTenplates2 = getWorkData(ECK0031A010CBSMsg.ECK0031A010CBSMSG1LIST, (Map)workECK0031A010Array.get(i));
				
				
				if(wkTenplates1 != null && wkTenplates2 != null)
				{
					for (int j = 0; j < wkTenplates1.length; j++)
					{
						CAANMsg childTemplate1 = wkTenplates1[j];
						CAANMsg childTemplate2 = wkTenplates2[j];
						wkCaanMsgList = shosaOkMapper.editInMsgECK0031C010(param, childTemplate1, childTemplate2);
						rslt = editInMsgCmn(param, wkCaanMsgList.get(0));
						wkMapArray.add(rslt);
					}
				}
			}
			rsltMemberStb.put(MAP_KEY_ECK0031C010, wkMapArray);
		}
		
		return rsltMemberStb;
	}
	
	/**
	 * 連絡先登録のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param rsltShokai 一意照会の結果データ
	 * @return 実行結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editMapRrks(IRequestParameterReadWrite param, HashMap<String, Object> rsltShokai)
	throws Throwable
	{
		HashMap<String, Object> rsltMemberStb = new HashMap();
		HashMap<String, Object> rslt = null;
		
		List<CAANMsg> wkCaanMsgList = null;
		ArrayList<HashMap> wkMapArray = null;
		
		ArrayList<HashMap> workECK0011A010Array = null;	// お客様一意照会
		ArrayList<HashMap> workECK0201B001Array = null;	// 連絡先一覧照会
		
		// 一意照会の結果データを取得
		workECK0011A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0011A010);
		workECK0201B001Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0201B001);
		
		// OM-2014-0002974対応 20140914 田中 ADD START
		// 連絡先登録フラグ
		boolean renSakiInsertFlg = true;
		// OM-2014-0002974対応 20140914 田中 ADD END
		
		// OM-2014-0002974対応 20140914 田中 ADD START
		// お客様
		CAANMsg[] wkTenplates1 = getWorkData(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST, (Map)workECK0011A010Array.get(0));
		// OM-2014-0002974対応 20140914 田中 ADD END
		
		if (workECK0201B001Array != null) 
		{
			for (int i = 0; i < workECK0201B001Array.size(); i++)
			{
				wkMapArray = new ArrayList();
				
				// OM-2014-0002974対応 20140914 田中 DEL START
				// お客様
//				CAANMsg[] wkTenplates1 = getWorkData(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST, (Map)workECK0011A010Array.get(i));
				// OM-2014-0002974対応 20140914 田中 DEL END
				
				// 連絡先
				CAANMsg[] wkTenplates2 = getWorkData(ECK0201B001CBSMsg.ECK0201B001CBSMSG1LIST, (Map)workECK0201B001Array.get(i));
				
				if(wkTenplates1 != null && wkTenplates2 != null)
				{
					// OM-2014-0002974対応 20140914 田中 MOD START
//					for (int j = 0; j < wkTenplates1.length; j++)
					for (int j = 0; j < wkTenplates2.length; j++)
					// OM-2014-0002974対応 20140914 田中 MOD END
					{
						CAANMsg childTemplate1 = wkTenplates1[0];
						CAANMsg childTemplate2 = wkTenplates2[j];
						
						// OM-2014-0002974対応 20140914 田中 ADD START
						// コンテンツの連絡先が存在するかのチェック
						if (checkContRenSaki(childTemplate2)){
						// OM-2014-0002974対応 20140914 田中 ADD END
						
							// OM-2014-0002974対応 20140914 田中 MOD START
//							wkCaanMsgList = shosaOkMapper.editInMsgECK0201D010(param, childTemplate2, childTemplate1);
//							rslt = editInMsgCmn(param, wkCaanMsgList.get(0));
							CAANMsg updCustMap = shosaOkMapper.editInMsgECK0201C010(param, childTemplate2, childTemplate1);
							rslt = editInMsgCmn(param, updCustMap);
							// OM-2014-0002974対応 20140914 田中 MOD END
							wkMapArray.add(rslt);
						
							// OM-2014-0002974対応 20140914 田中 ADD START
							// 変更があった場合は連絡先の登録処理を行わない
							renSakiInsertFlg = false;
						}
					// OM-2014-0002974対応 20140914 田中 ADD END
					}
				}
			}
			
			// OM-2014-0002974対応 20140914 田中 ADD START
			// 既存の連絡先にコンテンツの連絡先が存在しない場合
			if (renSakiInsertFlg) {
				// 連絡先の登録処理を行う
				CAANMsg updCustMap = shosaOkMapper.editInMsgECK0201D010(param, wkTenplates1[0]);
				rslt = editInMsgCmn(param, updCustMap);
				wkMapArray.add(rslt);
				
			}
			// OM-2014-0002974対応 20140914 田中 ADD END
			
			// OM-2014-0002974対応 20140914 田中 ADD START
			// 既存の連絡先を登録する場合
			if (renSakiInsertFlg) {
			// OM-2014-0002974対応 20140914 田中 ADD END
				// OM-2014-0001926関連対応 20140623 田中 MOD START
//			rsltMemberStb.put(MAP_KEY_ECK0031C010, wkMapArray);
				rsltMemberStb.put(MAP_KEY_ECK0201D010, wkMapArray);
				rsltMemberStb.put("map_key", MAP_KEY_ECK0201D010);
				// OM-2014-0001926関連対応 20140623 田中 MOD END
				
			// OM-2014-0002974対応 20140914 田中 ADD START
			// 既存の連絡先を変更する場合
			} else {
				rsltMemberStb.put(MAP_KEY_ECK0201C010, wkMapArray);
				rsltMemberStb.put("map_key", MAP_KEY_ECK0201C010);
			}
			// OM-2014-0002974対応 20140914 田中 ADD END
		}
		
		return rsltMemberStb;
	}
	// OM-2014-0001926対応 20140620 田中 ADD END

	// 2012-03-08 追加↓↓↓
	/**
	 * グループ登録の実行処理
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param rsltMap 照査実行時に使用するマップのリスト
	 * @return エラー情報
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<Object> runMakeGrp(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> rsltMap) 
		throws Throwable
	{
		ArrayList<Object> errorList = new ArrayList();
		ArrayList<Object> wkErrorList = null;

		// グループ登録
		wkErrorList = runShosa(handle, param, rsltMap, MAP_KEY_ECK0111D010);
		errorList.addAll(wkErrorList);
		
		//↓↓↓2012-09-24追加　ロット２追加案件 ANK-0024-05-00↓↓↓
		// お客様グループ設定無効
		wkErrorList = runShosa(handle, param, rsltMap, MAP_KEY_ECK0121C020);
		errorList.addAll(wkErrorList);
		//↑↑↑2012-09-24追加　ロット２追加案件 ANK-0024-05-00↑↑↑

		return errorList;
	
	}


	/**
	 * グループ登録のマッピング処理
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userDataIndex param内の業務データのインデックス
	 * @param rsltShokai 一意照会の結果データ
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editMapGrp(IRequestParameterReadWrite param, 
			int userDataIndex, HashMap<String, Object> rsltShokai)
	throws Throwable
	{
		HashMap<String, Object> rsltGrp = new HashMap();
		HashMap<String, Object> rslt = null;
		
		List<CAANMsg> wkCaanMsgList = null;
		ArrayList<HashMap> wkMapArray = null;
		
		ArrayList<HashMap> workECK0011A010Array = null;	// お客様一意照会
		
		// 一意照会の結果データを取得
		workECK0011A010Array = (ArrayList)rsltShokai.get(MAP_KEY_ECK0011A010);
		
		if (workECK0011A010Array != null) 
		{
			for (int i = 0; i < workECK0011A010Array.size(); i++)
			{
				wkMapArray = new ArrayList();
				CAANMsg[] wkTenplates = getWorkData(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST, (Map)workECK0011A010Array.get(i));
				
				if(wkTenplates != null)
				{
					for (int j = 0; j < wkTenplates.length; j++)
					{
						CAANMsg childTemplate = wkTenplates[j];
						wkCaanMsgList = shosaOkMapper.editInMsgECK0111D010(param, childTemplate);
						rslt = editInMsgCmn(param, wkCaanMsgList.get(0));
						wkMapArray.add(rslt);
					}
				}
			}
			rsltGrp.put(MAP_KEY_ECK0111D010, wkMapArray);
		}
		
		//↓↓↓2012-09-24追加　ロット２追加案件 ANK-0024-05-00↓↓↓
		//元ファミリー会員の場合、元のお客様グループ設定を無効にする
		if (JCKStrConst.CD00039_FAMILY_HOJIN.equals(memberSbtCdBefore) || JCKStrConst.CD00039_FAMILY_KOJIN.equals(memberSbtCdBefore))
		{
			String cust_grp_sette_no = null;

			//お客様グループ設定照会　結果を取得
			CAANMsg[] workECK0121B020 = getWorkParentData(ECK0121B020CBSMsg.ECK0121B020CBSMSG1LIST, rsltShokai, MAP_KEY_ECK0121B020);
			if (null != workECK0121B020 && 0 < workECK0121B020.length)
			{
				cust_grp_sette_no = workECK0121B020[0].getString(ECK0121B020CBSMsg1List.CUST_GRP_SETTE_NO);
			}
			
			//お客様グループ設定無効
			wkMapArray = new ArrayList();
			wkCaanMsgList = shosaOkMapper.editInMsgECK0121C020(param, cust_grp_sette_no);
			rslt = editInMsgCmn(param, wkCaanMsgList.get(0));
			wkMapArray.add(rslt);
			rsltGrp.put(MAP_KEY_ECK0121C020, wkMapArray);
		}
		//↑↑↑2012-09-24追加　ロット２追加案件 ANK-0024-05-00↑↑↑

		return rsltGrp;
	}
	// 2012-03-08 追加↑↑↑

	// OM-2014-0002974対応 20140914 田中 ADD START
	/**
	 * 該当の連絡先レコードがコンテンツの連絡先かどうかをチェックする
	 * <br>
	 * @param workECK0201B001 連絡先のデータ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private boolean checkContRenSaki(CAANMsg workECK0201B001) throws Throwable
	{
		// 連絡方法コードが003でない場合
		if (!"003".equals(workECK0201B001.getString(ECK0201B001CBSMsg1List.RRK_WAY_CD))) {
			return false;
		}
		
		// 連絡先種別コードが1でない場合
		if(!"1".equals(workECK0201B001.getString(ECK0201B001CBSMsg1List.RRKS_SBT_CD))) {
			return false;
		}
		
		// 連絡先分類コードが1でない場合
		if(!"1".equals(workECK0201B001.getString(ECK0201B001CBSMsg1List.RRKS_BUNRUI_CD))){
			return false;
		}
		
		// 上記以外の場合コンテンツの連絡先として扱いtrueを返す
		return true;
	}
	// OM-2014-0002974対応 20140914 田中 ADD END
	
	/**
	 * 
	 * @param workMapKey
	 * @param rsltShokai
	 * @param shokaiMapKey
	 * @return
	 */
	abstract protected CAANMsg[] getWorkParentData(String workMapKey, Map<String, Object> rsltShokai, String shokaiMapKey);


	/**
	 * 
	 * @param workMapKey
	 * @param rsltShokai
	 * @return
	 */
	abstract protected CAANMsg[] getWorkData(String workMapKey, Map<?, ?> rsltShokai);


	/**
	 * 
	 * @param param
	 * @param msg
	 * @return
	 * @throws RequestParameterException
	 */
	abstract protected HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param, CAANMsg msg) 
	throws RequestParameterException;


	/**
	 * 
	 * @param handle
	 * @param param
	 * @param rsltMap
	 * @param mapKey
	 * @return
	 * @throws Throwable
	 */
	abstract protected ArrayList<Object> runShosa(SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap<String, Object> rsltMap, 
			String mapKey) throws Throwable;

}
