/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKCustMemberSbtChgCC
 *   ソースファイル名：JKKCustMemberSbtChgCC.java
 *   作成者          ：富士通
 *   日付            ：2014年02月21日
 *＜機能概要＞
 *   お客様会員種別変更（マスター会員に格上時の振る舞いを行う）
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v8.00.00    2014/02/21   FJ）藤田    新規作成
 *   v8.01.00    2014/03/11   FJ）阮      【ST-2014-0000077】会員別指示書登録の制御対応
 *   v8.02.00    2014/03/13   FJ）阮      【ST-2014-0000081】支払い入力方法支援指示書登録の仕様対応
 *   v8.03.00    2014/05/19   FJ）藤田    【ANK-2097-00-00】 マスター昇格時のISP決済口自動設定
 *   v8.04.00    2014/05/22   FJ）藤田    【ST-2014-0000105】ファミリー会員からの照査時、グループが切り替わらない
 *   v8.05.00    2014/05/28   FJ）藤田    【ANK-2097-00-00】 仕様変更対応。オープン会員からの昇格時もCCMG連携をする。
 *   v9.00.00    2014/08/07   FJ) 田中    【OM-2014-0002622】ホスティング契約が存在する場合契約者住所情報とコンテンツ住所情報を同期する
 *  v10.00.00    2014/08/11   FJ）藤田    【ANK-2213-00-00】 対応
 *  v10.01.00    2014/08/26   FJ）藤田    【ANK-2213-00-00】 戻し対応（顧客都合により案件保留）
 *  v10.02.00    2014/08/28   FJ）藤田    【ANK-2213-00-00】 再開
 *  v10.03.00    2014/09/14   FJ) 田中    【OM-2014-0002974】対応
 *  v10.04.00    2014/11/05   FJ) 藤田    【OM-2014-0003342】照査時にコンテンツお客様名が同期されない
 *  v33.00.00    2017/06/19   FJ) 辻本    【ANK-3179-00-00】解約済み契約の請求明細表示
 *  v63.00.00    2022/12/16   FJ) 北村    【ANK-4341-00-00】mineo照査時の2段階認証ON対応
 *  v71.00.00    2024/09/04   FJ) アラ    【ANK-4571-00-00】mineo申込時のISP合算先登録処理改善
 *
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.callECH0231B010;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.callECK0151D010Map;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.callECN0131B006;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.callECN0131D011ForIspks;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.callECN0131E011;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.needCallApiMmbSbtUpd;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.requestCcmgApiChgMmbSbtDsl;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.getResultMsgList;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.getResultString;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.isSuccess;
import static eo.common.constant.JCKStrConst.PAYWAY_INPSUP_CD_ISPKS;
import static eo.common.constant.JCKStrConst.PMP_CCMG_RENKEI_UPD_NM;
import static eo.common.constant.JCKStrConst.SJISHO_TRN_CD_REPLICA_API;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.fujitsu.futurity.bp.custom.constant.JKKAddSjishoConst;
import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
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 com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JCKStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECH0231B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0231B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011B004CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011C120CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0021C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0111B002CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0121B020CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0121B020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
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.ECN0131B006CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0131B006CBSMsgList;
import eo.ejb.cbs.cbsmsg.ECN0131C011CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0131E011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B519CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B519CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0201B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0201B001CBSMsg1List;

public class JKKCustMemberSbtChgCC extends AbstractCommonComponent {

	/** エラーメッセージ */
	public static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	/** お客様回復CCマップの補助キー **/
	public static final String CUSTKAIHK_MAPKEY_SUFFIX = "_CUSTMMBSBT_CHG_CUSTKAIHK_MAP";

	/** お客様会員種別変更CCでの指示書CCマップのキー **/
	public static final String SJISHO_MAP = "_CUSTMMBSBT_CHG_SJISHO_MAP";

	/** サービスオーダ発行処理CCマップのキー **/
	public static final String HAKKOSOD_MAP = "_CUSTMMBSBT_CHG_HAKKOSOD_MAP";

	/** サービス契約番号 **/
	public static final String SVC_KEI_NO = "svc_kei_no";

	/** お客様ID **/
	public static final String SYSID = "sysid";

	/** 運用日付 **/
	private String oPE_DATE;

	// ANK-4341-00-00 ADD START
	/** 呼出元サービス KKSV076601CC */
	private static final String KKSV076601CC = "KKSV076601CC_CUSTMMBSBT_CHG_SJISHO_MAP";
	// ANK-4341-00-00 ADD END
	
	/** スポットログイン変更対象サービス契約内訳リスト **/
	private List<Map<String, Object>> targetUcwkList;

	/**
	 * 渡されたお客様IDに対してマスタ会員に変更する処理
	 * ・すでにマスタ会員の場合は何もしない
	 * ・退会されている場合は回復
	 * @param param
	 * @param handle
	 * @param custMap お客様一意照会結果のマップ
	 * @param svc_kei_no	サービス契約番号
	 * @return
	 * @throws Throwable
	 */
	public String execute(
			SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		Map<String, Object> custMap = (Map<String, Object>)param.getData(fixedText);
		String svc_kei_no = (String)custMap.get(SVC_KEI_NO);
		String sysid = (String)custMap.get(SYSID);

		// 運用日付設定
		this.oPE_DATE = JCCBPCommon.getOpeDate(null);
		// 初期化
		targetUcwkList = new ArrayList();
		
		String memberSbtCd 		= (String) custMap.get(ECK0011A010CBSMsg1List.MEMBER_SBT_CD);
		String keisyaTypeCd 	= (String) custMap.get(ECK0011A010CBSMsg1List.KEISHA_TYPE_CD);
		String currentSysid 	= (String) custMap.get(ECK0011A010CBSMsg1List.SYSID);
		String eonetidMiIkoFlgBefore = (String) custMap.get(ECK0011A010CBSMsg1List.EONETID_MI_IKO_FLG);
		// 変更前会員種別コードを取得(後の処理で、変数に変更後の値が設定される)
		String regitMemberSbtCd = (String) custMap.get(ECK0011A010CBSMsg1List.MEMBER_SBT_CD);
		
		//更新日時
		String ck0011UpdDtm     = (String) custMap.get(ECK0011A010CBSMsg1List.LAST_UPD_DTM);

		boolean isGroup = false;
		// *************************************************** //
		// お客様回復ＣＣ                                      //
		// *************************************************** //
		// お客様退会年月日がある場合、お客様回復処理を行い、上位に戻る
		String cust_taikai_ymd = (String) custMap.get(ECK0011A010CBSMsg1List.CUST_TAIKAI_YMD);
		if (!JKKBpCommon.isNull(cust_taikai_ymd))
		{
			String custKaihkMapKey = fixedText + CUSTKAIHK_MAPKEY_SUFFIX;
			// お客様回復
			editCustKaihkMap(param, custKaihkMapKey, svc_kei_no, sysid);
			(new JCKCustKaihkCmnCC()).execute(handle, param, custKaihkMapKey);
			
			return regitMemberSbtCd;
		}

//		// *************************************************** //
//		// 料金グループコード判定                              //
//		// *************************************************** //
//		if (PRC_GRP_CD_TV_KCN.equals(prcGrpCd) || PRC_GRP_CD_TV_SSS.equals(prcGrpCd))
//		{
//			return regitMemberSbtCd;
//		}

		// *************************************************** //
		// 会員種別判定                                        //
		// *************************************************** //
		// 会員種別コードによって処理を分岐
		if(memberSbtCd.equals(JCKStrConst.CD00039_MASTER_KOJIN)
			|| memberSbtCd.equals(JCKStrConst.CD00039_MASTER_HOJIN)
		)
		{
// ANK-4341-00-00 DEL START
			//// マスター会員の場合は特に何もしない
// ANK-4341-00-00 DEL END
			// ※ ケース１：既にマスター会員の場合
			// ※ ケース２：１SYSID、複数サービス契約の場合で
			//    １サービス契約目の処理でマスター会員に変更された場合
// ANK-4341-00-00 ADD START 
			// MINEOの照査で呼ばれた場合、
			if(KKSV076601CC.equals(fixedText + SJISHO_MAP))
			{
				// お客様の基本情報の【更新】を指示書登録CCに連携
				JKKBpCommon.putAxMRenkeiDataKbn11(
						param, fixedText + SJISHO_MAP, JKKAddSjishoConst.TRN_KBN_UPD, new String[]{svc_kei_no}, currentSysid, new String[]{"3","6","11"});
				// 指示書登録処理
				JKKAddSjishoCC addSjishoCC = new JKKAddSjishoCC();
				addSjishoCC.addSjisho(handle, param, fixedText + SJISHO_MAP);
			}		
// ANK-4341-00-00 ADD END 
			return regitMemberSbtCd;
		}

		// 会員種別コードがマスター以外の場合
		// 契約者タイプコードで個人か法人判断する
		if(keisyaTypeCd.equals(JCKStrConst.CD00036_KOJIN))
		{
			regitMemberSbtCd = JCKStrConst.CD00039_MASTER_KOJIN;
		}
		else if (
				keisyaTypeCd.equals(JCKStrConst.CD00036_HOJIN)
				|| keisyaTypeCd.equals(JCKStrConst.CD00036_JISHA_USE)
		)
		{
			// OM-2014-0002622対応 20140807 田中 MOD START
//			regitMemberSbtCd = JCKStrConst.CD00039_MASTER_KOJIN;
			regitMemberSbtCd = JCKStrConst.CD00039_MASTER_HOJIN;
			// OM-2014-0002622対応 20140807 田中 MOD END
		}
		else if (keisyaTypeCd.equals(JCKStrConst.CD00036_MNT))
		{
			// お客様＜個人＞一意照会
			CAANMsg[] eck0021a010Msgs = callECK0021A010SC(param, handle, currentSysid);
			CAANMsg[] workECK0021A010 = eck0021a010Msgs[0].getCAANMsgList(ECK0021A010CBSMsg.ECK0021A010CBSMSG1LIST);
			// お客様＜法人＞一意照会
			CAANMsg[] eck0031a010Msgs =  callECK0031A010SC(param, handle, currentSysid);
			CAANMsg[] workECK0031A010 = eck0031a010Msgs[0].getCAANMsgList(ECK0031A010CBSMsg.ECK0031A010CBSMSG1LIST);
			
			String keisyaFlg = "0";
			if(workECK0021A010 != null)
			{
				if (workECK0021A010.length > 0) {
					regitMemberSbtCd = JCKStrConst.CD00039_MASTER_KOJIN;
					keisyaFlg = "1";
				}
			}
			
			if(workECK0031A010 != null)
			{
				if (workECK0031A010.length > 0)
				{
					regitMemberSbtCd = JCKStrConst.CD00039_MASTER_HOJIN;
					keisyaFlg = "1";
				}
			}
			
			if("0".equals(keisyaFlg))
			{
				regitMemberSbtCd = JCKStrConst.CD00039_MASTER_HOJIN;
			}
		}

		// ANK-2213-00-00 対応 藤田 2014/08/11 ADD START
		// コンテンツ同意(サービス提供中のホスティング契約の存在)の確認
		boolean existsContentsAgreement = false;
		// ANK-2213-00-00 対応 藤田 2014/08/11 ADD END
		
		// OM-2014-0002622対応 20140807 田中 ADD START
		HashMap<String, Object> wkMap = null;
		ArrayList<Object> wkErrorList = null;
		
		JKKSIFEKK0081Mapper mapperEKK0081 = new JKKSIFEKK0081Mapper();
		CAANMsg templateEKK0081B519 = mapperEKK0081.getMappedTemplateEKK0081B519(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))
				{
					// ANK-2213-00-00 対応 藤田 2014/08/11 ADD START
					existsContentsAgreement = true;
					// ANK-2213-00-00 対応 藤田 2014/08/11 ADD END
					
					// 契約者情報をコンテンツ情報にコピー
					// お客様が個人の場合
					if (JCKStrConst.CD00039_MASTER_KOJIN.equals(regitMemberSbtCd))
					{
						// お客様＜個人＞一意照会
						CAANMsg[] eck0021a010Msgs = callECK0021A010SC(param, handle, currentSysid);
						CAANMsg[] workECK0021A010 = eck0021a010Msgs[0].getCAANMsgList(ECK0021A010CBSMsg.ECK0021A010CBSMSG1LIST);
						
						// お客様情報＜個人＞変更を実行
						HashMap<String, Object> updCustMap = editMapECK0021C010(param, custMap, workECK0021A010[0]).get(0);
						
						// SIF実行
						ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
						Map<?, ?> rslt = scCall.run(updCustMap, handle);
						// 結果を取得
						wkErrorList = this.editResultRPECK0021C010(rslt, param);
						CAANMsg[] eck0021c010Templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
						CAANMsg eck0021c010Template = eck0021c010Templates[0];
						
						// 更新日付を書き換え
						custMap.put(ECK0011A010CBSMsg1List.UPD_DTM, eck0021c010Template.getString(ECK0021C010CBSMsg.UPD_DTM));
						
					} 
					// お客様が法人の場合
					else if(JCKStrConst.CD00039_MASTER_HOJIN.equals(regitMemberSbtCd))
					{	
						// お客様＜法人＞一意照会
						CAANMsg[] eck0031a010Msgs =  callECK0031A010SC(param, handle, currentSysid);
						CAANMsg[] workECK0031A010 = eck0031a010Msgs[0].getCAANMsgList(ECK0031A010CBSMsg.ECK0031A010CBSMSG1LIST);
					
						// お客様情報＜法人＞変更を実行
						HashMap<String, Object> updCustMap = editMapECK0031C010(param, custMap, workECK0031A010[0]).get(0);
						
						// SIF実行
						ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
						Map<?, ?> rslt = scCall.run(updCustMap, handle);
						// 結果を取得
						wkErrorList = this.editResultRPECK0031C010(rslt, param);
						CAANMsg[] eck0031c010Templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
						CAANMsg eck0031c010Template = eck0031c010Templates[0];
						
						// お客様一意照会の結果に更新時間を上書き
						custMap.put(ECK0011A010CBSMsg1List.UPD_DTM, eck0031c010Template.getString(ECK0031C010CBSMsg.UPD_DTM));
					}
					
					// 連絡先一覧照会
					CAANMsg[] eck0201b001Msgs =  callECK0201B001SC(param, handle, currentSysid);
					CAANMsg[] workECK0201B001 = eck0201b001Msgs[0].getCAANMsgList(ECK0201B001CBSMsg.ECK0201B001CBSMSG1LIST);
					
					// OM-2014-0002974対応 20140914 田中 ADD START
					// 連絡先登録フラグ
					boolean renSakiInsertFlg = true;
					// OM-2014-0002974対応 20140914 田中 ADD END
					
					for (int j = 0; j < workECK0201B001.length; j++) {
						
						// OM-2014-0002974対応 20140914 田中 ADD START
						// コンテンツの連絡先が存在するかのチェック
						if (checkContRenSaki(workECK0201B001[j])){
						// OM-2014-0002974対応 20140914 田中 ADD END
						
							// 連絡先変更を実行
							// OM-2014-0002974対応 20140914 田中 MOD STRT
//							HashMap<String, Object> updCustMap = editMapECK0201D010(param, custMap, workECK0201B001[0]).get(0);
							HashMap<String, Object> updCustMap = editMapECK0201C010(param, custMap, workECK0201B001[j]).get(0);
							// OM-2014-0002974対応 20140914 田中 MOD END
							
							// SIF実行
							ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
							Map<?, ?> rslt = scCall.run(updCustMap, handle);
							// 結果を取得
							// OM-2014-0002974対応 20140914 田中 MOD STRT
//							wkErrorList = this.editResultRPECK0201D010(rslt, param);
							wkErrorList = this.editResultRPECK0201C010(rslt, param);
							// OM-2014-0002974対応 20140914 田中 MOD END
							CAANMsg[] eck0021c010Templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
							CAANMsg eck0021c010Template = eck0021c010Templates[0];
							
							// 更新日付を書き換え
							// OM-2014-0002974対応 20140914 田中 MOD STRT
//							ck0011UpdDtm = eck0021c010Template.getString(ECK0011C120CBSMsg.UPD_DTM);
							ck0011UpdDtm = eck0021c010Template.getString(ECK0201C010CBSMsg.UPD_DTM);
							// OM-2014-0002974対応 20140914 田中 MOD END
							
							// OM-2014-0002974対応 20140914 田中 ADD START
							// 変更があった場合は連絡先の登録処理を行わない
							renSakiInsertFlg = false;
						}
						// OM-2014-0002974対応 20140914 田中 ADD END
						
					}
					
					// OM-2014-0002974対応 20140914 田中 ADD START
					// 既存の連絡先にコンテンツの連絡先が存在しない場合
					if (renSakiInsertFlg) {
						// 連絡先の登録処理を行う
						HashMap<String, Object> updCustMap = editMapECK0201D010(param, custMap).get(0);
						// SIF実行
						ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
						Map<?, ?> rslt = scCall.run(updCustMap, handle);
						// 結果を取得
						wkErrorList = this.editResultRPECK0201D010(rslt, param);
						CAANMsg[] eck0021d010Templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
						CAANMsg eck0021d010Template = eck0021d010Templates[0];
						
						// 更新日付を書き換え
						ck0011UpdDtm = eck0021d010Template.getString(ECK0201D010CBSMsg.UPD_DTM);
					}
					// OM-2014-0002974対応 20140914 田中 ADD END
					
					// 処理終了後にループを抜ける
					break;
				}
			}
		}
		// OM-2014-0002622対応 20140807 田中 ADD END
		
		// ANK-2213-00-00 対応 藤田 2014/08/11 ADD START
		// ISP決済口作成フラグ
		boolean ispKessaiCreateFlg = false;
		// オープン会員の場合に、新規契約を照査されたmineoに対してISP決済口として設定する。
		if (JKKStrConst.CD00039_30.equals(memberSbtCd))
		{
			// コンテンツ同意
			if (existsContentsAgreement)
			{
				ispKessaiCreateFlg = true;
				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);
					// ANK-4751-00-00 MOD START
					// サービスコードが"mineo"、"ホスティング"以外のもの
//					if (!JKKStrConst.CD00130_51.equals(svcCd)
//					  && !JKKStrConst.CD00130_04.equals(svcCd))
//					{
					String svcKeiStat = eKK0081Map.getString(EKK0081B519CBSMsg1List.SVC_KEI_STAT);
					if (!JKKStrConst.CD00130_51.equals(svcCd)
							  && !JKKStrConst.CD00130_04.equals(svcCd)
							  && (!(JKKStrConst.CD00037_DSL_ZM.equals(svcKeiStat) || JKKStrConst.CD00037_CANCEL_ZM.equals(svcKeiStat)))
						)
					{
					// ANK-4751-00-00 MOD END
						// 他のeoサービス契約があるため、。
						// ISP決済口作成フラグを"false"とし、ループを抜ける
						ispKessaiCreateFlg = false;
						break;
					}
				}
			}
			// ANK-4751-00-00 DEL START
//			// 上記判定にてISP決済口作成フラグがまだ"true"の場合、
//			// 今までに会員種別が変更されていない純粋なオープン会員かを判定
//			if (ispKessaiCreateFlg)
//			{
//				JKKSIFECK0011Mapper mapperECK0011 = new JKKSIFECK0011Mapper();
//				// 今までにオープン会員"以外"になった履歴があるかをチェック
//				CAANMsg templateECK0011B004 = mapperECK0011.getMappedTemplateECK0011B004(sysid, null, null, "1");
//				// SIF実行
//				CAANMsg[] resultMsgsECK0011B004 = callScCmn(param, handle, templateECK0011B004, mapperECK0011);
//				if (resultMsgsECK0011B004 != null)
//				{
//					CAANMsg[] eck0011B004CBSMsg1List = resultMsgsECK0011B004[0].getCAANMsgList(ECK0011B004CBSMsg.ECK0011B004CBSMSG1LIST);
//					for (int i=0; i < eck0011B004CBSMsg1List.length; i++)
//					{
//						CAANMsg custHistory = eck0011B004CBSMsg1List[i];
//						String histMemberSbtCd = custHistory.getString(ECK0011B004CBSMsg1List.MEMBER_SBT_CD);
//						if (!JKKStrConst.CD00039_30.equals(histMemberSbtCd))
//						{
//							// ISP決済口作成フラグを"false"とし、ループを抜ける
//							ispKessaiCreateFlg = false;
//							break;
//						}
//					}
//				}
//			}
			// ANK-4751-00-00 DEL END
		}
		// ANK-2213-00-00 対応 藤田 2014/08/11 ADD END

		// 更新前会員種別コードを保持
		String memberSbtCdBefore = memberSbtCd;
		
		// ANK-3179-00-00 ADD START
		String dslAfSkssnsKh = null;
		// 「更新前の会員種別コードが"30:オープン会員"」且つ「更新後の会員種別コードが"10:マスター会員(個人)"または"20:マスター会員(法人)"」の場合
		if (JCKStrConst.CD00039_OPEN.equals(memberSbtCdBefore) && (JCKStrConst.CD00039_MASTER_KOJIN.equals(regitMemberSbtCd) || JCKStrConst.CD00039_MASTER_HOJIN.equals(regitMemberSbtCd)))
		{
			// 解約後請求書参照可否を"0(否)"に設定する
			dslAfSkssnsKh = JCKStrConst.CD00003_FAIL;
		}
		// ANK-3179-00-00 ADD END
		
		// 会員種別変更を実行
		// ANK-3179-00-00 MOD START
//		ArrayList<HashMap> wkMapArray = editMapMemberSbt(param, custMap, regitMemberSbtCd);
		ArrayList<HashMap> wkMapArray = editMapMemberSbt(param, custMap, regitMemberSbtCd, dslAfSkssnsKh);
		// ANK-3179-00-00 MOD END
		for (int i=0; i < wkMapArray.size(); i++) {
			HashMap<String, Object> updCustMap = wkMapArray.get(i);
			// SIF実行
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
			Map<?, ?> rslt = scCall.run(updCustMap, handle);
			// 結果を取得
			// OM-2014-0002622対応 20140807 田中 MOD START
//			ArrayList<Object> wkErrorList = this.editResultRPECK0011C120(rslt, param);
			wkErrorList = this.editResultRPECK0011C120(rslt, param);
			// OM-2014-0002622対応 20140807 田中 MOD END
			CAANMsg[] eck0011c120Templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
			CAANMsg eck0011c120Template = eck0011c120Templates[0];
			if (!eck0011c120Template.isNull(ECK0011C120CBSMsg.SHK_EOID)) 
			{
//				shk_eoId = eck0011c120Template.getString(ECK0011C120CBSMsg.SHK_EOID);
				sysid = eck0011c120Template.getString(ECK0011C120CBSMsg.SYSID);
				currentSysid = sysid;
			}
			
			// 更新日付を書き換え
			ck0011UpdDtm = eck0011c120Template.getString(ECK0011C120CBSMsg.UPD_DTM);
		}
		
		// ファミリーのグループリーダであるお客様のIDを保存
		String grp_leader_sysid = null;
		// ファミリー会員グループ一覧照会（SYSID）を実行
		{
			JKKSIFECK0111Mapper mapper = new JKKSIFECK0111Mapper();
			CAANMsg template = mapper.getMappedTemplateECK0111B002(sysid);
			// SIF実行
			// OM-2014-0002622対応 20140807 田中 MOD START
//			CAANMsg[] resultMsgs = callScCmn(param, handle, template, mapper);
			resultMsgs = callScCmn(param, handle, template, mapper);
			// OM-2014-0002622対応 20140807 田中 MOD END
			CAANMsg[] eck0111MsgList = resultMsgs[0].getCAANMsgList(ECK0111B002CBSMsg.ECK0111B002CBSMSG1LIST);
			if (null != eck0111MsgList && eck0111MsgList.length > 0) {
				isGroup = true;
				// IT2-2014-0000129 対応 藤田 2014/2/21 ADD START
				grp_leader_sysid = eck0111MsgList[0].getString("grp_leader_sysid");
				// IT2-2014-0000129 対応 藤田 2014/2/21 ADD END
			}
		}

		//グループ登録、お客様グループ設定
		if(!isGroup ||
				JCKStrConst.CD00039_FAMILY_HOJIN.equals(memberSbtCdBefore)
				|| JCKStrConst.CD00039_FAMILY_KOJIN.equals(memberSbtCdBefore)){
			
			// ST-2014-0000105 ファミリー会員からの照査時、グループが切り替わらない 藤田 2014/05/22 ADD START
			// お客様グループ設定一覧照会(PMP連携用)を実行
			JKKSIFECK0121Mapper mapperECK0121 = new JKKSIFECK0121Mapper();
			CAANMsg templateECK0121B020 = mapperECK0121.getMappedTemplateECK0121B020(sysid);
			// SIF実行
			CAANMsg[] resultMsgsECK0121B020 = callScCmn(param, handle, templateECK0121B020, mapperECK0121);
			// ST-2014-0000105 ファミリー会員からの照査時、グループが切り替わらない 藤田 2014/05/22 ADD END
			
			//グループ登録	
			{
				JKKSIFECK0111Mapper mapper = new JKKSIFECK0111Mapper();
				CAANMsg templateECK0111D010 = mapper.getMappedTemplateECK0111D010(sysid, this.oPE_DATE, null, ck0011UpdDtm);
				// SIF実行
				callScCmn(param, handle, templateECK0111D010, mapper);
			}
			
			// お客様グループ設定
			//元ファミリー会員の場合、元のお客様グループ設定を無効にする
			if (JCKStrConst.CD00039_FAMILY_HOJIN.equals(memberSbtCdBefore) || JCKStrConst.CD00039_FAMILY_KOJIN.equals(memberSbtCdBefore))
			{
				// ST-2014-0000105 ファミリー会員からの照査時、グループが切り替わらない 藤田 2014/05/22 MOD START
//				// お客様グループ設定一覧照会(PMP連携用)を実行
//				JKKSIFECK0121Mapper mapper = new JKKSIFECK0121Mapper();
//				CAANMsg templateECK0121B020 = mapper.getMappedTemplateECK0121B020(sysid);
//				// SIF実行
//				CAANMsg[] resultMsgs = callScCmn(param, handle, templateECK0121B020, mapper);
				// お客様グループ設定無効を実行
				if (resultMsgsECK0121B020 != null && resultMsgsECK0121B020.length > 0) {
					CAANMsg[] eck0121MsgList = resultMsgsECK0121B020[0].getCAANMsgList(ECK0121B020CBSMsg.ECK0121B020CBSMSG1LIST);
					if (null != eck0121MsgList && 0 < eck0121MsgList.length)
					{
						String cust_grp_sette_no = eck0121MsgList[0].getString(ECK0121B020CBSMsg1List.CUST_GRP_SETTE_NO);
						CAANMsg templateECK0121C020 = mapperECK0121.getMappedTemplateECK0121C020(cust_grp_sette_no, this.oPE_DATE, ck0011UpdDtm);
						// SIF実行
						callScCmn(param, handle, templateECK0121C020, mapperECK0121);
					}
				}
				// ST-2014-0000105 ファミリー会員からの照査時、グループが切り替わらない 藤田 2014/05/22 MOD END
			}

			// IT2-2014-0000129 対応 藤田 2014/2/21 ADD START
			// 対象のお客様の会員種別がファミリー会員の場合の処理
			if (JCKStrConst.CD00039_FAMILY_HOJIN.equals(memberSbtCdBefore)
					|| JCKStrConst.CD00039_FAMILY_KOJIN.equals(memberSbtCdBefore))
			{
				// スポットログインIDの置き換え
				if (grp_leader_sysid != null) {
					updateWifiSpotLoginSysid(handle, param, sysid, grp_leader_sysid);
					// スポットログインの変更に伴い、Wi-Fiスポット・変更のSOD発行
					this.hakkoSodCc(handle, param, grp_leader_sysid, fixedText);
				}
				
				//***************************************************
				// CCMG連携
				//***************************************************
				boolean mmbSbtUpdApicalled = needCallApiMmbSbtUpd(eonetidMiIkoFlgBefore, memberSbtCdBefore, regitMemberSbtCd);
				if (mmbSbtUpdApicalled)
				{
					boolean res =  requestCcmgApiChgMmbSbtDsl(handle, param, sysid, eonetidMiIkoFlgBefore, memberSbtCdBefore, regitMemberSbtCd, sysid, PMP_CCMG_RENKEI_UPD_NM);
					if (!res)
					{
						// ログ出力 : ローカル環境ではAPIに繋がらないため、常にエラー
						JSYejbLog.println(JSYejbLog.ERROR,this.getClass(),"CCMG連携(会員種別変更解約API呼出) 処理 - 失敗");
//						// システムエラー
//						throw new Exception();
					}
				}
	
				//***************************************************
				// 支払い方法入力支援の更新
				//***************************************************
				Map result = callECN0131B006(handle, param, sysid);
				if (isSuccess(result))
				{
					JKKSIFEKK0081Mapper mapper = new JKKSIFEKK0081Mapper();
					// サービス契約一覧照会（SYSID） 
					CAANMsg template = mapper.getMappedTemplateEKK0081B519(grp_leader_sysid, "1");
					// SIF実行
					// OM-2014-0002622対応 20140807 田中 MOD START
//					CAANMsg[] resultMsgs = callScCmn(param, handle, template, mapper);
					resultMsgs = callScCmn(param, handle, template, mapper);
					// OM-2014-0002622対応 20140807 田中 MOD END
					// 親であったお客様のサービス契約一覧を取得
					Set<String> parantCustSvcKeiSet = new HashSet<String>();
					if (resultMsgs.length > 0)
					{
						CAANMsg[] svcKeiList = resultMsgs[0].getCAANMsgList(EKK0081B519CBSMsg.EKK0081B519CBSMSG1LIST);
						for (int i=0; i < svcKeiList.length; i++)
						{
							CAANMsg svcKei = svcKeiList[i];
							String parantCustSvcKeiNo = svcKei.getString(EKK0081B519CBSMsg1List.SVC_KEI_NO);
							parantCustSvcKeiSet.add(parantCustSvcKeiNo);
						}
					}
					
					// 親マスタ会員に紐づいている支払い方法入力支援（ISP決済サービス契約番号）を削除する。
					CAANMsg[] dataList = getResultMsgList(result, ECN0131B006CBSMsg.ECN0131B006CBSMSGLIST);
					for (int i=0; i < dataList.length; i++)
					{
						CAANMsg payway = dataList[i];
						// ISP決済サービス契約番号
						String isp_kssai_svc_kei_no = payway.getString(ECN0131B006CBSMsgList.ISP_KSSAI_SVC_KEI_NO);
						// 支払い方法入力支援コード -> ISP決済
						String payway_input_shien_cd = payway.getString(ECN0131B006CBSMsgList.PAYWAY_INPUT_SHIEN_CD);
						if (JCKStrConst.PAYWAY_INPSUP_CD_ISPKS.equals(payway_input_shien_cd)) {
							if (isp_kssai_svc_kei_no != null && parantCustSvcKeiSet.contains(isp_kssai_svc_kei_no)) {
								
// ST-2013-0000081 2013/03/13 ADD START
								//***************************************************
								// 督促データの取得
								//***************************************************
								result = callECH0231B010(handle, param, "1", sysid);
								if (!isSuccess(result))
								{
									throw new Exception();
								}
								String mapKey = ECH0231B010CBSMsg.ECH0231B010CBSMSG1LIST + "[0].";
								String tokusokuStat = getResultString(result, mapKey + ECH0231B010CBSMsg1List.TOKUSOKU_STAT);
// ST-2013-0000081 2013/03/13 ADD END
								
								//***************************************************
								// 親マスター会員の所有するISP決済先の「支払い方法入力支援」を削除する
								//***************************************************
								String paywayNo = payway.getString(ECN0131B006CBSMsgList.PAYWAY_NO);
								String updDtm = payway.getString(ECN0131B006CBSMsgList.UPD_DTM);
								result = callECN0131E011(handle, param, paywayNo, updDtm);
								if (!isSuccess(result)) {
									throw new Exception();
								}
								
								//***************************************************
								// 指示書登録(支払方法入力支援情報(旧ISP決済分)の無効連携)
								//***************************************************
								String svcKeiNoBf = payway.getString(ECN0131B006CBSMsgList.ISP_KSSAI_SVC_KEI_NO);
								String paywayInputShienCd = payway.getString(ECN0131B006CBSMsgList.PAYWAY_INPUT_SHIEN_CD);
								String tsyrnPaySeq = payway.getString(ECN0131B006CBSMsgList.TSYRN_PAY_SEQ);
								String addDtm = payway.getString(ECN0131B006CBSMsgList.ADD_DTM);
								String addOpeacnt = payway.getString(ECN0131B006CBSMsgList.ADD_OPEACNT);
								String bfPaywayInputShienInfoUpdDtm = getResultString(result, ECN0131E011CBSMsg.UPD_DTM);
								String bfPaywayInputShienInfoUpdOpacnt = getResultString(result, ECN0131E011CBSMsg.UPD_OPEACNT);
								String bfPaywayInputShienInfoMkFlg = getResultString(result, ECN0131E011CBSMsg.MK_FLG);
								

								
// ST-2013-0000081 2013/03/13 MOD START
//								Map<String, Object> paywayDelMap = createShijishoParamPaywayAdd(grp_leader_sysid, svcKeiNoBf, paywayInputShienCd, paywayNo, tsyrnPaySeq, addDtm,
//										 addOpeacnt, bfPaywayInputShienInfoUpdDtm, bfPaywayInputShienInfoUpdOpacnt, bfPaywayInputShienInfoMkFlg, null);
								Map<String, Object> paywayDelMap = createShijishoParamPaywayAdd(sysid, svcKeiNoBf, paywayInputShienCd, paywayNo, tsyrnPaySeq, addDtm,
										addOpeacnt, bfPaywayInputShienInfoUpdDtm, bfPaywayInputShienInfoUpdOpacnt, bfPaywayInputShienInfoMkFlg, tokusokuStat);
// ST-2013-0000081 2013/03/13 MOD END
								result = callECK0151D010Map(handle, param, paywayDelMap);

								// ANK-2097-00-00 マスター昇格時のISP決済口自動設定 藤田 2014/05/19 DEL START
//								//***************************************************
//								// サービス契約<Mineo>をISP決済先とする「支払い方法入力支援」を生成する
//								//***************************************************
//								result = callECN0131D011ForIspks(handle, param, sysid, svc_kei_no);
//								if (!isSuccess(result)) {
//									throw new Exception();
//								}
								// ANK-2097-00-00 マスター昇格時のISP決済口自動設定 藤田 2014/05/19 DEL END
// ST-2013-0000081 2013/03/13 DEL START
//								//***************************************************
//								// 督促データの取得
//								//***************************************************
//								result = callECH0231B010(handle, param, "1", sysid);
//								if (!isSuccess(result))
//								{
//									throw new Exception();
//								}
//								String mapKeyPre = ECH0231B010CBSMsg.ECH0231B010CBSMSG1LIST + "[0].";
//								String afTokusokuStat = getResultString(result, mapKeyPre + ECH0231B010CBSMsg1List.TOKUSOKU_STAT);
								
//								//***************************************************
//								// 指示書登録(支払方法入力支援情報(新ISP決済分)の登録連携)
//								//***************************************************
//								// 更新結果から取得
//								String afPaywayInputShienInfoPaywayNo = getResultString(result, ECN0131C011CBSMsg.KEY_PAYWAY_NO);
//								String afPaywayInputShienInfoTsyrnPaySeq = getResultString(result, ECN0131C011CBSMsg.TSYRN_PAY_SEQ);
//								String afPaywayInputShienInfoUpdDtm = getResultString(result, ECN0131C011CBSMsg.UPD_DTM);
//								String afPaywayInputShienInfoUpdOpacnt = getResultString(result, ECN0131C011CBSMsg.UPD_OPEACNT);
//								String afPaywayInputShienInfoMkFlg = getResultString(result, ECN0131C011CBSMsg.MK_FLG);
//								// 登録年月日時分秒、登録オペレータアカウントは更新結果から取得できないため
//								// 一覧照会の結果より取得
//								String afPaywayInputShienInfoAddDtm = payway.getString(ECN0131B006CBSMsgList.ADD_DTM);
//								String afPaywayInputShienInfoAddOpacnt = payway.getString(ECN0131B006CBSMsgList.ADD_OPEACNT);
//								Map<String, Object> paywayAddMap = createShijishoParamPaywayAdd(sysid, svc_kei_no, PAYWAY_INPSUP_CD_ISPKS,
//										afPaywayInputShienInfoPaywayNo, afPaywayInputShienInfoTsyrnPaySeq, afPaywayInputShienInfoAddDtm,
//										afPaywayInputShienInfoAddOpacnt, afPaywayInputShienInfoUpdDtm, afPaywayInputShienInfoUpdOpacnt, afPaywayInputShienInfoMkFlg, afTokusokuStat);
//								result = callECK0151D010Map(handle, param, paywayAddMap);
// ST-2013-0000081 2013/03/13 DEL END
// ST-2013-0000081 2013/03/13 ADD START
								// ANK-2097-00-00 マスター昇格時のISP決済口自動設定 藤田 2014/05/19 DEL START
//								// 支払方法入力支援情報（新ISP決済分）の【登録】を指示書登録CCに連携
//								JKKBpCommon.putAxMRenkeiDataKbn08(
//										param, fixedText + SJISHO_MAP, JKKAddSjishoConst.TRN_KBN_ADD, new String[]{svc_kei_no}, sysid);
								// ANK-2097-00-00 マスター昇格時のISP決済口自動設定 藤田 2014/05/19 DEL END
								
// ST-2013-0000081 2013/03/13 ADD END
							}
						}
					}
				} else {
					// システムエラー
					throw new Exception();
				}
			}
			// IT2-2014-0000129 対応 藤田 2014/2/21 ADD END
			// ANK-2097-00-00 マスター昇格時のISP決済口自動設定 藤田 2014/05/28 ADD START
			// 元の会員種別がオープン会員の場合
			else if (JCKStrConst.CD00039_OPEN.equals(memberSbtCdBefore))
			{
				//***************************************************
				// CCMG連携
				//***************************************************
				boolean mmbSbtUpdApicalled = needCallApiMmbSbtUpd(eonetidMiIkoFlgBefore, memberSbtCdBefore, regitMemberSbtCd);
				if (mmbSbtUpdApicalled)
				{
					boolean res =  requestCcmgApiChgMmbSbtDsl(handle, param, sysid, eonetidMiIkoFlgBefore, memberSbtCdBefore, regitMemberSbtCd, sysid, PMP_CCMG_RENKEI_UPD_NM);
					if (!res)
					{
						// ログ出力 : ローカル環境ではAPIに繋がらないため、常にエラー
						JSYejbLog.println(JSYejbLog.ERROR,this.getClass(),"CCMG連携(会員種別変更解約API呼出) 処理 - 失敗");
					}
				}
			}
			// ANK-2097-00-00 マスター昇格時のISP決済口自動設定 藤田 2014/05/28 ADD END
		}
		
		//連携データ区分01「お客様のグループ情報」
		JKKBpCommon.putAxMRenkeiDataKbn(
				param, fixedText + SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_CUST_GRP, JKKAddSjishoConst.TRN_KBN_ADD, 
				new String[]{}, currentSysid);
		//連携データ区分11「お客様の基本情報」
// ST-2014-0000077 2014/03/10 MOD START
//		JKKBpCommon.putAxMRenkeiDataKbn(
//				param, fixedText + 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))
		{
			// お客様の基本情報の【更新】を指示書登録CCに連携
			JKKBpCommon.putAxMRenkeiDataKbn11(
					param, fixedText + SJISHO_MAP, JKKAddSjishoConst.TRN_KBN_UPD, new String[]{svc_kei_no}, currentSysid, new String[]{"3","6","11"});
		}
		else
		// 「オープン」会員以外の場合は【登録】で指示書連携すること
		{
			// お客様の基本情報の【登録】を指示書登録CCに連携
			JKKBpCommon.putAxMRenkeiDataKbn(
					param, fixedText + SJISHO_MAP, JKKAddSjishoConst.RENKEI_DATA_KBN_CUST_INF, JKKAddSjishoConst.TRN_KBN_ADD, 
					new String[]{svc_kei_no}, currentSysid);
		}
// ST-2014-0000077 2014/03/10 MOD END

		// ANK-2213-00-00 対応 藤田 2014/08/11 ADD START
		/** 有効なホスティング契約があり、ISP決済口となっているサービス契約が存在しない場合に **/
		/** 今回照査対象となったmineoサービス契約をISP決済口として登録する **/
		if (ispKessaiCreateFlg)
		{
			//***************************************************
			// サービス契約<Mineo>をISP決済先とする「支払い方法入力支援」を生成する
			//***************************************************
			Map result = callECN0131D011ForIspks(handle, param, sysid, svc_kei_no);
			if (!isSuccess(result)) {
				throw new Exception();
			}

			// 支払方法入力支援情報（新ISP決済分）の【登録】を指示書登録CCに連携
			JKKBpCommon.putAxMRenkeiDataKbn08(
					param, fixedText + SJISHO_MAP, JKKAddSjishoConst.TRN_KBN_ADD, new String[]{svc_kei_no}, sysid);
		}
		// ANK-2213-00-00 対応 藤田 2014/08/11 ADD END

		// 指示書登録処理
		JKKAddSjishoCC addSjishoCC = new JKKAddSjishoCC();
		addSjishoCC.addSjisho(handle, param, fixedText + SJISHO_MAP);
		
		return regitMemberSbtCd;
	}

	/**
	 * Wi-FiスポットログインSysid更新
	 * 親マスター会員にあたる「お客様」が所有するサービス契約内訳＜eoモバイル＞について、
	 * スポットログインIDに今回マスタに昇格する対象のお客様のsysidがある場合は、
	 * 親の「お客様」のsysidで置き換える。
	 * 
	 * @param handle
	 * @param param
	 * @param targetSysid ファミリー会員からマスタ会員へ格上げされるお客様ID
	 * @param parentSysid ファミリー会員のリーダー(親)お客様ID
	 * @throws Throwable
	 */
	private void updateWifiSpotLoginSysid(
			SessionHandle handle, IRequestParameterReadWrite param,
			String targetSysid, String parentSysid)
		throws Throwable
	{
		if (targetSysid == null || parentSysid == null)
		{
			return;
		}
		
		// 同じsysidが指定されている場合は処理対象外
		if (targetSysid.equals(parentSysid))
		{
			return;
		}
		
		// サービス契約内訳一覧照会（SYSID）を実行
		JKKSIFEKK0161Mapper mapperUcwkAll = new JKKSIFEKK0161Mapper();
		CAANMsg templateUcwkAll = mapperUcwkAll.getMappedTemplateEKK0161B003(parentSysid);
		// SIF実行
		CAANMsg[] resultMsgsUcwkAll = callScCmn(param, handle, templateUcwkAll, mapperUcwkAll);
		
		// サービス契約内訳＜eoモバイル＞一覧照会（スポットログインSYSID）を実行
		JKKSIFEKK0201Mapper mapperSpot = new JKKSIFEKK0201Mapper();
		CAANMsg templateSpot = mapperSpot.getMappedTemplateEKK0201B001(targetSysid);
		// SIF実行
		CAANMsg[] resultMsgsSpot = callScCmn(param, handle, templateSpot, mapperSpot);
		
		// 判定用ハッシュの作成
		Set<String> targetUcwkNoSet = new HashSet<String>();
		if (resultMsgsSpot.length > 0)
		{
			CAANMsg[] resultMsgsSpotList = resultMsgsSpot[0].getCAANMsgList(EKK0201B001CBSMsg.EKK0201B001CBSMSG1LIST);
			
			for (int i=0; i < resultMsgsSpotList.length; i++)
			{
				CAANMsg msgSpot = resultMsgsSpotList[i];
				String svc_kei_ucwk_no = (String)msgSpot.getString(EKK0201B001CBSMsg1List.SVC_KEI_UCWK_NO);
				targetUcwkNoSet.add(svc_kei_ucwk_no);
			}
		}
		
		// parentSysidを元に取得したサービス契約内訳一覧から対象となるものを抽出
		if (resultMsgsUcwkAll.length > 0)
		{
			CAANMsg[] resultMsgsUcwkAllList = resultMsgsUcwkAll[0].getCAANMsgList(EKK0161B003CBSMsg.EKK0161B003CBSMSG1LIST);
		
			for (int i=0; i < resultMsgsUcwkAllList.length; i++)
			{
				CAANMsg msgUcwk = resultMsgsUcwkAllList[i];
				String svc_kei_ucwk_no = (String)msgUcwk.getString(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_NO);
				if (targetUcwkNoSet.contains(svc_kei_ucwk_no)) {
					Map<String, Object> m = new HashMap();
					m.put("svc_kei_ucwk_no", svc_kei_ucwk_no);
					targetUcwkList.add(m);
				}
			}
		}
		
		// スポットログインSYSIDを更新（親のsysidに置き換える）
		for (int i=0; i < targetUcwkList.size(); i++)
		{
			Map<String, Object> targetUcwk = targetUcwkList.get(i);
			String svc_kei_ucwk_no = (String)targetUcwk.get("svc_kei_ucwk_no");

			// サービス契約内訳一意照会を実行
			JKKSIFEKK0161Mapper mapperSingle = new JKKSIFEKK0161Mapper();
			CAANMsg templateSingle = mapperSingle.getMappedTemplateEKK0161A010(svc_kei_ucwk_no, null);
			// SIF実行
			CAANMsg[] resultMsgsSingle = callScCmn(param, handle, templateSingle, mapperSingle);
			if (resultMsgsSingle.length > 0) {
				CAANMsg[] svcKeiUcwk = resultMsgsSingle[0].getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
				if (svcKeiUcwk.length > 0) {
					String upd_dtm_bf = svcKeiUcwk[0].getString(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
					// SOD発行用に保存 サービス契約番号
					String svc_kei_no = svcKeiUcwk[0].getString(EKK0161A010CBSMsg1List.SVC_KEI_NO);
					targetUcwk.put("svc_kei_no", svc_kei_no);
					// SOD発行用に保存 世代登録年月日時分秒
					String gene_add_dtm = svcKeiUcwk[0].getString(EKK0161A010CBSMsg1List.GENE_ADD_DTM);
					targetUcwk.put("gene_add_dtm", gene_add_dtm);
					// スポットログインSYSID変更
					CAANMsg templateSpotUpd = mapperSpot.getMappedTemplateEKK0201C080(
							svc_kei_ucwk_no, null, parentSysid, upd_dtm_bf);
					// SIF実行
					callScCmn(param, handle, templateSpotUpd, mapperSpot);
				}
			}
		}
	}

	/**
	 * サービスオーダ発行処理
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param リクエストパラメータ
	 * @param sysid sysid
	 * @throws Throwable
	 */
	private void hakkoSodCc(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String sysid,
			String fixedText
		)
			throws Throwable
	{
		// 対象データマップ
		HashMap<String, Object> hakkoSodCcTrgtData = new HashMap<String, Object>();
		// 対象データリスト
		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
		hakkoSodCcTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
		// 機能コード
		hakkoSodCcTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		
		for (int i=0; i < targetUcwkList.size(); i++)
		{
			Map<String, Object> targetUcwk = targetUcwkList.get(i);
			String svc_kei_no = (String)targetUcwk.get("svc_kei_no");
			String svc_kei_ucwk_no = (String)targetUcwk.get("svc_kei_ucwk_no");
			String gene_add_dtm = (String)targetUcwk.get("gene_add_dtm");
			
			// SODマップ
			HashMap<String, Object> sodMap = new HashMap<String, Object>();
			// SOD基本情報
			HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
			sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, sysid);
//			sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, idoDiv);
			sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYORI_DIV, JKKHakkoSODConstCC.KEI_SVC_CTL_YOKYU_ODR_SKCD_041);
			sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
			// サービス契約情報
			HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
			svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, svc_kei_no);
			sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);
			// サービス契約内訳情報
			HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
			svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, svc_kei_ucwk_no);
			svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, gene_add_dtm);
			sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);
			trgtDataList.add(sodMap);
		}

		param.setData(fixedText + HAKKOSOD_MAP, hakkoSodCcTrgtData);
		// ■サービスオーダ発行処理を実施
		JKKHakkoSODCC hakkkoSodCc = new JKKHakkoSODCC();
		hakkkoSodCc.hakkoSOD(handle, param, fixedText + HAKKOSOD_MAP);
	}

	/**
	 * 支払い方法入力支援の指示書パラメータ作成。<br />
	 * @param sysid SYSID
	 * @param svcKeiNo サービス契約番号
	 * @param paywayInpsupCd 支払い方法入力支援コード
	 * @param paywayNo 支払い方法番号
	 * @param tsyrnPaySeq 他システム連携支払い通番
	 * @param addDtm 登録年月日時分秒
	 * @param addOpeacnt 登録オペレータアカウント
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeacnt 更新オペレータアカウント
	 * @param mkFlg 無効フラグ
	 * @param tokusokuStat 督促ステータス
	 * @return 指示書登録用パラメータ
	 */
	private Map<String, Object> createShijishoParamPaywayAdd(String sysid, String svcKeiNo, String paywayInpsupCd, String paywayNo,
			String tsyrnPaySeq, String addDtm, String addOpeacnt, String updDtm, String updOpeacnt, String mkFlg, String tokusokuStat)
	{
		Map<String, Object> inMap = new HashMap<String, Object>();
		inMap.put(ECK0151D010CBSMsg.TRN_CD, SJISHO_TRN_CD_REPLICA_API);
		inMap.put(ECK0151D010CBSMsg.ERR_CNT, "0");
		inMap.put(ECK0151D010CBSMsg.TRGT_TABLE_ID, "TNM00060");
		inMap.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid);
		inMap.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "13");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_1, sysid);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_2, paywayInpsupCd);   // 支払方法入力支援コード
		inMap.put(ECK0151D010CBSMsg.PARAMETER_3, tsyrnPaySeq);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_4, svcKeiNo);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_5, null);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_6, mkFlg);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_7, addDtm);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_8, addOpeacnt);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_9, null);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_10, updDtm);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_11, updOpeacnt);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_12, null);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_13, tokusokuStat);
		return inMap;
	}

	/**
	 * お客様回復CC 入力マップ編集
	 * 
	 * @param param リクエストパラメータ
	 * @param mapNm マップID
	 * @param svc_kei_no サービス契約番号
	 * @throws RequestParameterException 例外
	 */
	private void editCustKaihkMap(IRequestParameterReadWrite param, String mapNm, String svc_kei_no, String sysid)
	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", sysid);
		
		//サービス契約番号
		targetMap.put("svc_kei_no", svc_kei_no);
	}

	/**
	 * ECK0021A010 お客様＜個人＞一意照会を実行します（カレントを取得）
	 * <br>
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param sysid sysid
	 * @param resultHash 照会結果
	 * @throws Throwable 任意の例外
	 */
	private CAANMsg[] callECK0021A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String sysid
	) throws Throwable
	{
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		// ECK0021A010への呼び出しパラメータ設定
		template = new CAANMsg(ECK0021A010CBSMsg.class.getName());
		JKKSIFECK0021Mapper mapper = new JKKSIFECK0021Mapper();
		template = mapper.getMappedTemplateECK0021A010(sysid);
		// SIF実行
		resultMsgs = callScCmn(param, handle, template, mapper);
		return resultMsgs;
	}

	/**
	 * ECK0021A010 お客様＜法人＞一意照会を実行します（カレントを取得）
	 * <br/>
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param sysid sysid
	 * @param resultHash 照会結果
	 * @throws Throwable 任意の例外
	 */
	private CAANMsg[] callECK0031A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String sysid
	) throws Throwable
	{
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		// ECK0031A010への呼び出しパラメータ設定
		JKKSIFECK0031Mapper mapper = new JKKSIFECK0031Mapper();
		template = mapper.getMappedTemplateECK0031A010(sysid);
		// SIF実行
		resultMsgs = callScCmn(param, handle, template, mapper);
		return resultMsgs;
	}

	/**
	 * 会員種別変更のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param userDataIndex param内の業務データのインデックス
	 * @param custMap 一意照会の結果データ
	 * @param regitMemberSbtCd param内の業務データのインデックス
	 * @param dslAfSkssnsKh 解約後請求書参照可否
	 * @return 実行結果
	 * @throws Throwable
	 */
	private ArrayList<HashMap> editMapMemberSbt(IRequestParameterReadWrite param,
			// ANK-3179-00-00 MOD START
//			Map<String, Object> custMap, String regitMemberSbtCd)
			Map<String, Object> custMap, String regitMemberSbtCd, String dslAfSkssnsKh)
			// ANK-3179-00-00 MOD END
	throws Throwable
	{
		HashMap<String, Object> rslt = null;
		ArrayList<HashMap> wkMapArray = null;
		
		// お客様一意照会の結果データを取得
		wkMapArray = new ArrayList();
		JKKSIFECK0011Mapper mapper = new JKKSIFECK0011Mapper();
		String sysid = (String)custMap.get(ECK0011A010CBSMsg1List.SYSID);
		String upd_dtm_bf = (String)custMap.get(ECK0011A010CBSMsg1List.UPD_DTM);
		// ANK-3179-00-00 MOD START
//		CAANMsg templateECK0011C120 = mapper.getMappedTemplateECK0011C120(sysid, upd_dtm_bf, regitMemberSbtCd);
		CAANMsg templateECK0011C120 = mapper.getMappedTemplateECK0011C120(sysid, upd_dtm_bf, regitMemberSbtCd, dslAfSkssnsKh);
		// ANK-3179-00-00 MOD END
		mapper.editTemplateCommon(param, templateECK0011C120);
		
		rslt = mapper.editInMsgCmn(param);
		rslt.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{templateECK0011C120});
		wkMapArray.add(rslt);
		
		return wkMapArray;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param msgList 実行結果マップリスト
	 * @param param 業務データ取得・書込用I/F
	 * @return エラー情報
	 * @throws Exception
	 */
	public ArrayList<Object> editResultRPECK0011C120(Map<?, ?> msgList, IRequestParameterReadWrite param)
	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(ECK0011C120CBSMsg.STATUS);
		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> errorList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		errorList = (errorList == null ? new ArrayList<Object>() : errorList);
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errorList));
		
		// エラー発生時はExceptionを設定
		if (errorList != null && !errorList.isEmpty())
		{
			throw new SCCallException("", ((Integer)returnCode).toString(), templates[0].getInt(ECK0011C120CBSMsg.STATUS));
		}

		return errorList;
	}
	
	/**
	 * 
	 * @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 = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	
	// OM-2014-0002622対応 20140807 田中 ADD START
	/**
	 * ECK0201B001 連絡先一意照会を実行します（カレントを取得）
	 * <br>
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param sysid sysid
	 * @param resultHash 照会結果
	 * @throws Throwable 任意の例外
	 */
	private CAANMsg[] callECK0201B001SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String sysid
	) throws Throwable
	{
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		// ECK0021A010への呼び出しパラメータ設定
		template = new CAANMsg(ECK0201B001CBSMsg.class.getName());
		JKKSIFECK0201Mapper mapper = new JKKSIFECK0201Mapper();
		template = mapper.getMappedTemplateECK0201B001(sysid);
		// SIF実行
		resultMsgs = callScCmn(param, handle, template, mapper);
		return resultMsgs;
	}
	
	/**
	 * お客様＜個人＞変更のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param custMap 一意照会の結果データ
	 * @param workECK0021A010 お客様＜個人＞の一意照会の結果データ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private ArrayList<HashMap> editMapECK0021C010(IRequestParameterReadWrite param,
			Map<String, Object> custMap, CAANMsg workECK0021A010)
	throws Throwable
	{
		HashMap<String, Object> rslt = null;
		ArrayList<HashMap> wkMapArray = null;
		
		wkMapArray = new ArrayList();
		JKKSIFECK0021Mapper mapper = new JKKSIFECK0021Mapper();
		CAANMsg templateECK0021C010 = mapper.editInMsgECK0021C010(param, custMap, workECK0021A010);

		// OM-2014-0003342 照査時にコンテンツお客様名が同期されない 2014/11/05 藤田 ADD START
		// コンテンツお客様名 ← お客様名
		templateECK0021C010.set(ECK0011A010CBSMsg1List.CONT_CUST_NM, templateECK0021C010.getString(ECK0011A010CBSMsg1List.CUST_NM));
		// コンテンツお客様カナ名 ← お客様カナ名
		templateECK0021C010.set(ECK0011A010CBSMsg1List.CONT_CUST_KANA, templateECK0021C010.getString(ECK0011A010CBSMsg1List.CUST_KANA));
		// コンテンツお客様性別コード ← お客様性別コード
		templateECK0021C010.set(ECK0011A010CBSMsg1List.CONT_CUST_SEX_CD, templateECK0021C010.getString(ECK0011A010CBSMsg1List.CUST_SEX_CD));
		// コンテンツお客様生年月日 ← お客様生年月日
		templateECK0021C010.set(ECK0011A010CBSMsg1List.CONT_CUST_BIRTHD, templateECK0021C010.getString(ECK0011A010CBSMsg1List.CUST_BIRTHD));
		// OM-2014-0003342 照査時にコンテンツお客様名が同期されない 2014/11/05 藤田 ADD END
		
		mapper.editTemplateCommon(param, templateECK0021C010);
		
		rslt = mapper.editInMsgCmn(param);
		rslt.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{templateECK0021C010});
		wkMapArray.add(rslt);
		
		return wkMapArray;
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:お客様情報＜個人＞変更
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param msgList 実行結果マップリスト
	 * @param param 業務データ取得・書込用I/F
	 * @return エラー情報
	 * @throws Exception
	 * @since 2011.06.07
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<Object> editResultRPECK0021C010(Map<?, ?> msgList, IRequestParameterReadWrite param)
	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(ECK0021C010CBSMsg.STATUS);
		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> errorList = new ArrayList<Object>();
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errorList));
		
		// エラー発生時はExceptionを設定
		if (errorList != null && !errorList.isEmpty())
		{
			throw new SCCallException("", ((Integer)returnCode).toString(), templates[0].getInt(ECK0021C010CBSMsg.STATUS));
		}

		return errorList;
	}
	
	/**
	 * お客様＜法人＞変更のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param custMap 一意照会の結果データ
	 * @param workECK0021A010 お客様＜個人＞の一意照会の結果データ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private ArrayList<HashMap> editMapECK0031C010(IRequestParameterReadWrite param,
			Map<String, Object> custMap, CAANMsg workECK0031A010)
	throws Throwable
	{
		HashMap<String, Object> rslt = null;
		ArrayList<HashMap> wkMapArray = null;
		
		wkMapArray = new ArrayList();
		JKKSIFECK0031Mapper mapper = new JKKSIFECK0031Mapper();
		CAANMsg templateECK0031C010 = mapper.editInMsgECK0031C010(param, custMap, workECK0031A010);
		
		// OM-2014-0003342 照査時にコンテンツお客様名が同期されない 2014/11/05 藤田 ADD START
		// コンテンツお客様名 ← お客様名
		templateECK0031C010.set(ECK0011A010CBSMsg1List.CONT_CUST_NM, templateECK0031C010.getString(ECK0011A010CBSMsg1List.CUST_NM));
		// コンテンツお客様カナ名 ← お客様カナ名
		templateECK0031C010.set(ECK0011A010CBSMsg1List.CONT_CUST_KANA, templateECK0031C010.getString(ECK0011A010CBSMsg1List.CUST_KANA));
		// コンテンツお客様性別コード ← お客様性別コード
		templateECK0031C010.set(ECK0011A010CBSMsg1List.CONT_CUST_SEX_CD, templateECK0031C010.getString(ECK0011A010CBSMsg1List.CUST_SEX_CD));
		// コンテンツお客様生年月日 ← お客様生年月日
		templateECK0031C010.set(ECK0011A010CBSMsg1List.CONT_CUST_BIRTHD, templateECK0031C010.getString(ECK0011A010CBSMsg1List.CUST_BIRTHD));
		// OM-2014-0003342 照査時にコンテンツお客様名が同期されない 2014/11/05 藤田 ADD END
		
		mapper.editTemplateCommon(param, templateECK0031C010);
		
		rslt = mapper.editInMsgCmn(param);
		rslt.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{templateECK0031C010});
		wkMapArray.add(rslt);
		
		return wkMapArray;
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:お客様情報＜法人＞変更
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param msgList 実行結果マップリスト
	 * @param param 業務データ取得・書込用I/F
	 * @return エラー情報
	 * @throws Exception
	 * @since 2011.06.07
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<Object> editResultRPECK0031C010(Map<?, ?> msgList, IRequestParameterReadWrite param)
	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(ECK0031C010CBSMsg.STATUS);
		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> errorList = new ArrayList<Object>();
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errorList));
		
		// エラー発生時はExceptionを設定
		if (errorList != null && !errorList.isEmpty())
		{
			throw new SCCallException("", ((Integer)returnCode).toString(), templates[0].getInt(ECK0031C010CBSMsg.STATUS));
		}

		return errorList;
	}
	
	/**
	 * 連絡先登録のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param custMap 一意照会の結果データ
	 * @param workECK0201B001 連絡先のデータ
	 * @return 実行結果
	 * @throws Throwable
	 */
	// OM-2014-0002974対応 20140914 田中 MOD START
//	private ArrayList<HashMap> editMapECK0201D010(IRequestParameterReadWrite param,
//			Map<String, Object> custMap, CAANMsg workECK0201B001)
	private ArrayList<HashMap> editMapECK0201D010(IRequestParameterReadWrite param, Map<String, Object> custMap)
	// OM-2014-0002974対応 20140914 田中 MOD END
	throws Throwable
	{
		HashMap<String, Object> rslt = null;
		ArrayList<HashMap> wkMapArray = null;
		
		wkMapArray = new ArrayList();
		JKKSIFECK0201Mapper mapper = new JKKSIFECK0201Mapper();
		// OM-2014-0002974対応 20140914 田中 MOD START
//		CAANMsg templateECK0201D010 = mapper.editInMsgECK0201D010(param, custMap, workECK0201B001);
		CAANMsg templateECK0201D010 = mapper.editInMsgECK0201D010(param, custMap);
		// OM-2014-0002974対応 20140914 田中 MOD END
		mapper.editTemplateCommon(param, templateECK0201D010);
		
		rslt = mapper.editInMsgCmn(param);
		rslt.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{templateECK0201D010});
		wkMapArray.add(rslt);
		
		return wkMapArray;
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:連絡先登録
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param msgList 実行結果マップリスト
	 * @param param 業務データ取得・書込用I/F
	 * @return エラー情報
	 * @throws Exception
	 * @since 2011.06.07
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<Object> editResultRPECK0201D010(Map<?, ?> msgList, IRequestParameterReadWrite param)
	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(ECK0201D010CBSMsg.STATUS);
		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> errorList = new ArrayList<Object>();
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errorList));
		
		// エラー発生時はExceptionを設定
		if (errorList != null && !errorList.isEmpty())
		{
			throw new SCCallException("", ((Integer)returnCode).toString(), templates[0].getInt(ECK0201D010CBSMsg.STATUS));
		}

		return errorList;
	}
	// OM-2014-0002622対応 20140807 田中 ADD END
	
	// 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;
	}
	
	/**
	 * 連絡先変更のマッピング処理です。
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param custMap 一意照会の結果データ
	 * @param workECK0201B001 連絡先のデータ
	 * @return 実行結果
	 * @throws Throwable
	 */
	private ArrayList<HashMap> editMapECK0201C010(IRequestParameterReadWrite param,
			Map<String, Object> custMap, CAANMsg workECK0201B001)
	throws Throwable
	{
		HashMap<String, Object> rslt = null;
		ArrayList<HashMap> wkMapArray = null;
		
		wkMapArray = new ArrayList();
		JKKSIFECK0201Mapper mapper = new JKKSIFECK0201Mapper();
		CAANMsg templateECK0201C010 = mapper.editInMsgECK0201C010(param, custMap, workECK0201B001);
		mapper.editTemplateCommon(param, templateECK0201C010);
		
		rslt = mapper.editInMsgCmn(param);
		rslt.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{templateECK0201C010});
		wkMapArray.add(rslt);
		
		return wkMapArray;
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:連絡先変更
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param msgList 実行結果マップリスト
	 * @param param 業務データ取得・書込用I/F
	 * @return エラー情報
	 * @throws Exception
	 * @since 2011.06.07
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<Object> editResultRPECK0201C010(Map<?, ?> msgList, IRequestParameterReadWrite param)
	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(ECK0201C010CBSMsg.STATUS);
		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> errorList = new ArrayList<Object>();
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errorList));
		
		// エラー発生時はExceptionを設定
		if (errorList != null && !errorList.isEmpty())
		{
			throw new SCCallException("", ((Integer)returnCode).toString(), templates[0].getInt(ECK0201C010CBSMsg.STATUS));
		}

		return errorList;
	}
	// OM-2014-0002974対応 20140914 田中 ADD END
}
