/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCKSV902401CC
*   ソースファイル名：JCKSV902401CC.java
*   作成者          ：富士通
*   日付            ：2011年12月16日
*＜機能概要＞
*  お客様情報を本登録移行します。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/12/21   FJ）関      新規作成
*   v5.00.00	2013/02/12   FJ) 関      【ANK-1393-00-00】メール文言変更対応
*   v12.00.00	2015/01/09   FJ)宇野     【ANK-2381-00-00】eoIDなしの新規申込対応
*　 v26.00.00   2016/09/20   FJ)森脇     OM-2016-0002054対応
*   v27.00.00   2016/10/10   FJ) 阮      ANK-2987-00-00対応  
*   v33.00.00   2017/07/28   FJ) 辻本    【ANK-3194-00-00】コンテンツ同意・コンテンツ連絡先メールアドレスの挙動改善
*	v37.00.00	2018/06/28	FJ)河邊		【ANK-3424-00-00】IBUKI→eoお客様情報更新IFの改修
*   v41.00.00   2019/04/16   FJ)岡井     【ANK-3612-00-00】eoマイページからのお客さま情報自動更新機能改善
*   v47.00.00   2019/11/07   FJ) 三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*   v48.00.00   2020/02/17   FJ)美濃原   【ANK-3814-00-00】eoIDログインセキュリティ強化フォロー対応
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.*;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.*;
import static eo.common.constant.JCKStrConst.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.CKSV9022_CKSV9022OP_CKSV902201CC;
import com.fujitsu.futurity.bp.custom.constant.CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list;
import com.fujitsu.futurity.bp.custom.constant.CKSV9024_CKSV9024OP_CKSV902401CC;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
// ANK-2381-00-00 ADD START
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
// ANK-2381-00-00 ADD END
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.common.util.JCKLcsCommonUtil;
import eo.common.util.JKKStringUtil;
import eo.common.util.JZMCommonUtil;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011B050CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011B050CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011B120CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011B120CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011C030CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011C090CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011C100CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0021C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0021C020CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECKA9020001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECN0131D011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681C010CBSMsg;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JSYejbSysDate;

/**
 * お客様情報を本登録移行します。
 * <BR>
 * @author 富士通
 */
public class JCKSV902401CC extends AbstractCommonComponent implements ICommonComponent
{
	/** 当CCの内部でしか使わないエラーコード */
	private static final String PMP_ERR_OTHER = "OTHER";
	
	// ANK-2381-00-00 ADD START
	/** OPERATOR-ID */
	private static final String OPE_MNV1 = "MVN1";
	private static final String OPE_MNV2 = "MVN2";
	private static final String OPE_MNV3 = "MVN3";
	// ANK-2381-00-00 ADD END

	// ANK-3612-00-00 ADD START
	/** OPERATOR-ID */
	private static final String OPE_PMP1 = "EIFPMP1";
	private static final String OPE_PMP2 = "EIFPMP2";
	private static final String OPE_PMP3 = "EIFPMP3";

	/** 都道府県・市区町村の最大文字数 */
	private static final int MAX_LEN_STATE_CITY = 16;
	// ANK-3612-00-00 ADD END

	// ANK-3194-00-00 ADD START
	/** 異動区分："00089"(コンテンツ利用規約同意登録) */
	private static final String IDO_DIV_00089 = JKKStrConst.CD00576_CONTENTS_AGREEMENT;
	/** 異動予約詳細コード："031"(お客様情報仮登録) */
	private static final String IDO_RSV_DTL_CD_031 = "031";
	/** 異動予約状態コード："01"(反映済) */
	private static final String IDO_RSV_STAT_CD_01 = JKKStrConst.CD01168_IDO_RSV_STAT_CD_01;
	/** 異動予約状態コード："04"(異動予約対象外) */
	private static final String IDO_RSV_STAT_CD_04 = "04";
	// ANK-3194-00-00 ADD END
// ANK-3424-00-00 2018/06/28 ADD START
	/** 日付形式(日時) */
	private static final String TYPE_DTM = "YYYYMMDDHHMMSSSSS";
// ANK-3424-00-00 2018/06/28 ADD END

	/**
	 * お客様情報本登録移行メイン処理。<br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite executeMain(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// 入力パラメータ取得
		Map inMap = (Map)param.getData(fixedText);
		String sysid = (String)inMap.get(CKSV9024_CKSV9024OP_CKSV902401CC.SYSID);
		String ckUpdDtm = (String)inMap.get(CKSV9024_CKSV9024OP_CKSV902401CC.CK_UPD_DTM);
		String kkUpdDtm = (String)inMap.get(CKSV9024_CKSV9024OP_CKSV902401CC.KK_UPD_DTM);
		
		// ANK-2381-00-00 ADD START
		// オペレーターID
		String ope_id = (String)param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		boolean run_flg = true;
		// MVNO実行判定（SOAP連携）
		if (OPE_MNV1.equals(ope_id) || OPE_MNV2.equals(ope_id) || OPE_MNV3.equals(ope_id)) {
			run_flg = false;
		}
		// ANK-2381-00-00 ADD END

		// リターンコード初期化
		String returnCd = PMP_NORMAL_END;

		//***************************************************
		// 内部で使用する変数の初期化
		//***************************************************
		String opeDate = JCCBPCommon.getOpeDate(null);
		String nowContCustNm = null;
		String nowContCustBirth = null;
		String nowMemberSbtCd = null;
		String nowChgechuMlad = null;
		String nowRrksNoChgechuMlad = null;
		String nowEoId = null;
		String nowJoinYmd = null;
		String updDtmSysid = null;
		// ANK-3194-00-00 ADD START
		String contSvcKeiNo = "";
		String nowNkname = "";
		String eoidChgeYmd = "";
		boolean isSameInitEoid = false;
		Map<String, Object> nowCustMap = new HashMap<String, Object>();
		// ANK-3194-00-00 ADD END
		// ANK-3814-00-00 DEL START
		// ANK-3706-00-00 ADD START
		//String nowKeishaTelno = "";
		// ANK-3706-00-00 ADD END
		// ANK-3814-00-00 DEL END

		// ANK-2381-00-00 ADD START
		// MVNO以外から実行された場合、PMP連携用排他制御を行う
		Map result = null;
		if (run_flg)
		{
		// ANK-2381-00-00 ADD END
			
			//***************************************************
			// PMP連携用排他制御
			//***************************************************
			// ANK-2381-00-00 MOD START
//			Map result = callECKA9020001(handle, param, sysid, "1");
			result = callECKA9020001(handle, param, sysid, "1");
			// ANK-2381-00-00 MOD END
			if (isSuccess(result))
			{
				String errFlg = getResultString(result, ECKA9020001CBSMsg.LOCK_ERR_FLG);
				if (!"0".equals(errFlg))
				{
					returnCd = PMP_ERR_EXCLUSION;
				}
			}
			else
			{
				returnCd = PMP_ERR_OTHER;
			}
		}

		//***************************************************
		// お客様情報取得 ＆ 本登録期限チェック
		//***************************************************
		// ANK-3814-00-00 ADD START
		Map<String, String> wkSijishoMap = new HashMap<String, String>();
		// ANK-3814-00-00 ADD END
		if (PMP_NORMAL_END.equals(returnCd) || PMP_ERR_EXCLUSION.equals(returnCd))
		{
			// お客様情報照会(PMP連携用)SC呼出
			result = callECK0011B050(handle, param, "1", sysid);
			if (isSuccess(result))
			{
				CAANMsg[] dataList = getResultMsgList(result, ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST);
				if ((dataList == null) || (dataList.length == 0))
				{
					returnCd = PMP_ERR_REGIST_TERM;   // 本登録有効期限超過エラー
				}
				else
				{
					String mapKeyPre = ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST + "[0].";
					nowContCustNm = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.CONT_CUST_NM);
					nowContCustBirth = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.CONT_CUST_BIRTHD);
					nowMemberSbtCd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.MEMBER_SBT_CD);
					nowChgechuMlad = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.CHGECHU_MLAD);
					nowRrksNoChgechuMlad = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.RRKS_NO_CHGECHU_MLAD);
					nowJoinYmd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.JOIN_YMD);
					nowEoId = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.EOID);
					//updDtmSysid = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.UPD_DTM_SYSID);
					// ANK-3194-00-00 ADD START
					// 標準コンテンツサービス契約番号
					contSvcKeiNo = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.SVC_KEI_NO);
					// ニックネーム
					nowNkname = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.NKNAME);
					// 変更前eoIDが初期eoIDと同じか
					isSameInitEoid = nowEoId.equals(getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.SHK_EOID));
					// eoID変更年月日
					eoidChgeYmd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.EOID_CHGE_YMD);
					// お客様情報照会(PMP連携用)結果マップを取得
					nowCustMap = copyMsgToMap(dataList[0], ECK0011B050CBSMsg1List.class, ECK0011B050CBSMsg1List.class);
					// ANK-3194-00-00 ADD END
					// ANK-3814-00-00 DEL START
					// ANK-3706-00-00 ADD START
					//nowKeishaTelno = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.KEISHA_TELNO);
					// ANK-3706-00-00 ADD END
					// ANK-3814-00-00 DEL END

					// ANK-3814-00-00 ADD START
					// eoIDセキュリティ強化連携電話番号取得
					String wkTelno = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.KEISHA_TELNO);
					String wkMemberSbtCd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.MEMBER_SBT_CD);
					wkSijishoMap.put(ECK0011B050CBSMsg1List.KEISHA_TELNO, wkTelno);
					wkSijishoMap.put(ECK0011B050CBSMsg1List.MEMBER_SBT_CD, wkMemberSbtCd);
					// ANK-3814-00-00 ADD END
				}
			}
			else
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}

		//***************************************************
		// 最終更新日時チェック
		//***************************************************
		String lastCkUpdDtm = null;
		String lastKkUpdDtm = null;
		if (PMP_NORMAL_END.equals(returnCd) || PMP_ERR_EXCLUSION.equals(returnCd))
		{
			result = callECK0011B120(handle, param, sysid);
			if (isSuccess(result))
			{
				String mapKeyPre = ECK0011B120CBSMsg.ECK0011B120CBSMSG1LIST + "[0].";
				String chkCkUpdDtm = getResultString(result, mapKeyPre + ECK0011B120CBSMsg1List.CK_UPD_DTM);
				String chkKkUpdDtm = getResultString(result, mapKeyPre + ECK0011B120CBSMsg1List.KK_UPD_DTM);
				updDtmSysid  = chkCkUpdDtm;
				
				// ANK-2381-00-00 ADD START
				if (run_flg)
				{
				// ANK-2381-00-00 ADD END
					if ((!ckUpdDtm.equals(chkCkUpdDtm)) || (PMP_ERR_EXCLUSION.equals(returnCd)))
					{
						if ((chkCkUpdDtm != null) && (chkKkUpdDtm != null))
						{
							lastCkUpdDtm = chkCkUpdDtm;
							lastKkUpdDtm = chkKkUpdDtm;
							returnCd = PMP_ERR_EXCLUSION;   // 更新日時が異なる時は排他エラー
						}
						else
						{
							returnCd = PMP_ERR_NODATA;   // 該当データが存在しない場合はデータ無しエラー
						}
					}
				}
			}
			else
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}

		//***************************************************
		// 仮登録状態チェック
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別コードが、「マスター会員(個人)」、「マスター会員(法人)」、かつ変更手続中メールアドレス＝""の場合
			if (MMB_SBT_CD_MASTER_KOJIN.equals(nowMemberSbtCd) || MMB_SBT_CD_MASTER_HOJIN.equals(nowMemberSbtCd))
			{
				if (JCKBPCommon.isNullOrBlank(nowRrksNoChgechuMlad))
				{
// ANK-2987-00-00 ADD START
// 連絡先（変更中メールアドレス）が空白でもエラーにはしない
//					returnCd = PMP_ERR_STAT_NOT_TMP;   // 仮登録チェックエラー
// ANK-2987-00-00 ADD END
				}
			}
			// 会員種別コードが、「ファミリー会員(個人)」、「ファミリー会員(法人)」、「オープン会員」、かつ入会年月日≠""の場合
			else if (MMB_SBT_CD_FAMILY_KOJIN.equals(nowMemberSbtCd)
						|| MMB_SBT_CD_FAMILY_HOJIN.equals(nowMemberSbtCd)
						|| MMB_SBT_CD_OPEN.equals(nowMemberSbtCd))
			{
				if (!JCKBPCommon.isNullOrBlank(nowJoinYmd))
				{
					returnCd = PMP_ERR_STAT_NOT_TMP;   // 仮登録チェックエラー
				}
			}
		}

		// ANK-3194-00-00 ADD START
		// 会員種別コードが「マスター会員(個人)」または「マスター会員(法人)」の場合
		if (MMB_SBT_CD_MASTER_KOJIN.equals(nowMemberSbtCd) || MMB_SBT_CD_MASTER_HOJIN.equals(nowMemberSbtCd))
		{
			// お客様情報本登録
			if (PMP_NORMAL_END.equals(returnCd))
			{
				// ANK-3814-00-00 MOD START
				//// ANK-3706-00-00 MOD START
				////Map<String, String> resMap = regHonCustInfo(handle, param, inMap, nowCustMap, sysid, updDtmSysid, nowMemberSbtCd, contSvcKeiNo, nowNkname, nowEoId, isSameInitEoid, eoidChgeYmd, opeDate);
				//Map<String, String> resMap = regHonCustInfo(handle, param, inMap, nowCustMap, sysid, updDtmSysid, nowMemberSbtCd, contSvcKeiNo, nowNkname, nowEoId, isSameInitEoid, eoidChgeYmd, opeDate, nowKeishaTelno);
				//// ANK-3706-00-00 MOD END
				Map<String, String> resMap = regHonCustInfo(handle, param, inMap, nowCustMap, sysid, updDtmSysid, nowMemberSbtCd, contSvcKeiNo, nowNkname, nowEoId, isSameInitEoid, eoidChgeYmd, opeDate, wkSijishoMap);
				// ANK-3814-00-00 MOD END
				nowContCustNm = resMap.get("cont_cust_nm");
				nowEoId = resMap.get("eoid");
				updDtmSysid = resMap.get("upd_dtm_sysid");
				returnCd = resMap.get("return_cd");
			}
		}
		else
		{
		// ANK-3194-00-00 ADD END

			//***************************************************
			// お客様本登録
			//***************************************************
			if (PMP_NORMAL_END.equals(returnCd))
			{
				// 会員種別コードが、「ファミリー会員(個人)」、「ファミリー会員(法人)」、「オープン会員」の場合
				if (MMB_SBT_CD_FAMILY_KOJIN.equals(nowMemberSbtCd) || MMB_SBT_CD_FAMILY_HOJIN.equals(nowMemberSbtCd) || MMB_SBT_CD_OPEN.equals(nowMemberSbtCd))
				{
// ANK-3424-00-00 2018/06/28 ADD START
					if(!run_flg){
						String sysDate  = (String)param.getControlMapData(SCControlMapKeys.OPE_TIME);
	
						int waitTime;
						
						try{
							waitTime = Integer.parseInt(JCCModelCommon.getApplicationConst("MVNO_WAIT_TIME"));
						}
						catch (NumberFormatException e){
							waitTime = 0;
						}
						
						while (true)
						{
							if (sysDate.compareTo(updDtmSysid) > 0)
							{
								// システム日付が更新前の更新年月日時分秒より未来の場合
								break;
							}
							
							try
							{
								// １秒待機
								Thread.sleep(waitTime);
							}
							catch (InterruptedException e)
							{
								throw new RuntimeException(e);
							}
							
							// システム日付を取得
							sysDate = JSYejbSysDate.getDate(TYPE_DTM);
							
						}
						
						param.setControlMapData(SCControlMapKeys.OPE_TIME, sysDate);
					}
// ANK-3424-00-00 2018/06/28 ADD END
					
					// お客様＜個人＞本登録SC呼出
// ANK-3424-00-00 2018/06/28 MOD START
//					result = callECK0021C020(handle, param, opeDate, sysid, updDtmSysid);
					result = callECK0021C020(handle, param, opeDate, sysid, updDtmSysid, run_flg);
// ANK-3424-00-00 2018/06/28 MOD END
					if (isSuccess(result))
					{
						updDtmSysid = getResultString(result, ECK0021C020CBSMsg.UPD_DTM);
					}
					else
					{
						returnCd = PMP_ERR_OTHER;   // その他のエラー
					}
				}
			}
	
			//***************************************************
			// 連絡先メールアドレス本登録
			//***************************************************
			if (PMP_NORMAL_END.equals(returnCd))
			{
// ANK-2987-00-00 ADD START
				if ((MMB_SBT_CD_MASTER_KOJIN.equals(nowMemberSbtCd) || MMB_SBT_CD_MASTER_HOJIN.equals(nowMemberSbtCd)) && (nowChgechuMlad == null || "".equals(nowChgechuMlad)))
				{
					//マスタ会員の場合、変更中メールアドレスが空白の場合は連絡先の本登録を行なわない
				}
				else
				{
// ANK-2987-00-00 ADD END
				// 連絡先(メールアドレス)登録更新
				Map tmpResult = addUpdRrksMlad(handle, param, opeDate, "1", sysid, nowChgechuMlad, updDtmSysid, opeDate);
				result = (Map)tmpResult.get("result");
				if (isError(result))
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
// ANK-2987-00-00 ADD START
				}
// ANK-2987-00-00 ADD END
	
			}
	
			//***************************************************
			// 指示書登録
			//***************************************************
			if (PMP_NORMAL_END.equals(returnCd))
			{
				// ANK-3814-00-00 ADD START
				// 連携電話番号（契約者電話番号、コンテンツ電話番号等）
				String nowKeishaTelno = getSecurityRenkeiTelno(handle, param, sysid, wkSijishoMap.get(ECK0011B050CBSMsg1List.MEMBER_SBT_CD), wkSijishoMap.get(ECK0011B050CBSMsg1List.KEISHA_TELNO));
				// ANK-3814-00-00 ADD END

				// AdminAPI部分更新用の指示書パラメータ作成
				// ANK-3706-00-00 MOD START
				//Map sjishoMap = createShijishoParamAdminApiUpd(sysid, nowChgechuMlad, nowContCustBirth);
				Map sjishoMap = createShijishoParamAdminApiUpd(sysid, nowChgechuMlad, nowContCustBirth, nowKeishaTelno);
				// ANK-3706-00-00 MOD END
				result = callECK0151D010Map(handle, param, sjishoMap);
	
				if (isError(result))
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}

		// ANK-3194-00-00 ADD START
		}
		// ANK-3194-00-00 ADD END

		//***************************************************
		// 返却パラメータ設定
		//***************************************************

		// 最後に実行したSCの実行結果を取得
		result = getLastResult(param);

		// 下りコントロールマップのセット
		setResultCtrlData(param, result, fixedText);

		// SC実行エラーの場合は、結果に応じてリターンコードを設定
		if (PMP_ERR_OTHER.equals(returnCd))
		{
			String scReturnCd = getReturnCode(result).toString();
			String scStatusCd = getStatus(result).toString();
			returnCd = ("0".equals(scReturnCd) && "1000".equals(scStatusCd)) ? PMP_ERR_PARAM : PMP_ERR_SYSTEM;
		}

		// 下りユーザデータマップのセット
		Map<String, Object> resultMap = new HashMap();
		resultMap.put(CKSV9024_CKSV9024OP_CKSV902401CC.RETURN_CD, returnCd);
		resultMap.put(CKSV9024_CKSV9024OP_CKSV902401CC.CK_UPD_DTM_RES, lastCkUpdDtm);	// 最新更新日時(お客様)
		resultMap.put(CKSV9024_CKSV9024OP_CKSV902401CC.KK_UPD_DTM_RES, lastKkUpdDtm);	// 最新更新日時(サービス契約)
		resultMap.put(CKSV9024_CKSV9024OP_CKSV902401CC.CONT_CUST_NM, nowContCustNm);	// コンテンツお客様名
		resultMap.put(CKSV9024_CKSV9024OP_CKSV902401CC.SENDS_MLAD, nowChgechuMlad);		// 送信先メールアドレス
		resultMap.put(CKSV9024_CKSV9024OP_CKSV902401CC.MEMBER_SBT_CD, nowMemberSbtCd);	// 会員種別コード
		resultMap.put(CKSV9024_CKSV9024OP_CKSV902401CC.EOID_RES, nowEoId);				// EOID（返却値）

		setResultUserData(param, fixedText, resultMap);

		//*************************************************
		// 処理結果の判定
		//*************************************************
		if (isError(result))
		{
			// ANK-2381-00-00 MOD START
//			String errMsg = "お客様情報本登録移行CCでエラーが発生しました(リターンコード：" + returnCd + ")";
//			throw new CCException(errMsg, new Exception(errMsg));
			// OM-2016-0002054 MOD START
//			if (run_flg)
//			{
//				String errMsg = "お客様情報本登録移行CCでエラーが発生しました(リターンコード：" + returnCd + ")";
//				throw new CCException(errMsg, new Exception(errMsg));
//			}
			String errMsg = "お客様情報本登録移行CCでエラーが発生しました(リターンコード：" + returnCd + ")";
			throw new CCException(errMsg, new Exception(errMsg));
			// OM-2016-0002054 MOD END
			// ANK-2381-00-00 MOD END
		}

		return param;
	}

	/**
	 * AdminAPI部分更新用の指示書パラメータ作成
	 * @param sysid SYSID
	 * @param rrksMlad 連絡先メールアドレス
	 * @param birth 生年月日
	 * @param keishaTelno 連携電話番号（契約者電話番号、コンテンツ電話番号等）
	 * @return 指示書登録用パラメータ
	 */
	// ANK-3706-00-00 MOD START
	//private Map<String, Object> createShijishoParamAdminApiUpd(String sysid, String rrksMlad, String birth)
	private Map<String, Object> createShijishoParamAdminApiUpd(String sysid, String rrksMlad, String birth, String keishaTelno)
	// ANK-3706-00-00 MOD END
	{
		Map<String, Object> inMap = new HashMap<String, Object>();

		inMap.put(ECK0151D010CBSMsg.TRN_CD, SJISHO_TRN_CD_ADMIN_API);
		inMap.put(ECK0151D010CBSMsg.ERR_CNT, "0");
		inMap.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid);
		inMap.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		// ANK-3706-00-00 MOD START
		//inMap.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "19");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "22");
		// ANK-3706-00-00 MOD END
		inMap.put(ECK0151D010CBSMsg.PARAMETER_1, ADMIN_SJISHO_PARAM1_UPD_PART);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_3, sysid);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_7, rrksMlad);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_8, getAgeFlg(birth, JCCBPCommon.getSysDate()));
		inMap.put(ECK0151D010CBSMsg.PARAMETER_10, ADMIN_SJISHO_PARAM10_HON);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_12, ADMIN_SJISHO_PARAM12_DOI);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_19, JCCBPCommon.getSysDateTime());
		// ANK-3706-00-00 ADD START
		inMap.put(ECK0151D010CBSMsg.PARAMETER_20, keishaTelno);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_21, "");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_22, "");
		// ANK-3706-00-00 ADD END

		return inMap;
	}

	/**
	 * BPチェック用パラメータ作成。<br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return BPチェック用パラメータ
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	{
		// BPチェックはスキップする
		return JCKPmpScParamHenshu.createBpNotCheckParam();
	}

	/**
	 * ＢＰチェック結果を編集する。<br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode) throws Throwable
	{
		return JCKPmpScParamHenshu.editErrorInfo(param, caanMsgs, returnCode);
	}

	// ANK-3194-00-00 ADD START
	/**
	 * NULLを空文字に変換する。
	 * @param value
	 * @return 変換後の文字列
	 */
	private String nullToEmpty(String value)
	{
		return (value == null) ? "" : value;
	}
	
	/**
	 * 異動予約一覧照会SC呼出。<br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param idoDiv 異動区分
	 * @param idoRsvDtlCd 異動予約詳細コード
	 * @param idoRsvStatCd 異動予約状態コード
	 * @param sysid ＳＹＳＩＤ
	 * @return SC実行結果
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	private Map<?, ?> callEKK1681B001(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String idoDiv, String idoRsvDtlCd, String idoRsvStatCd, String sysid) throws RequestParameterException, SCException
	{
		//***************************************************
		// SCへの上りマッピング
		//***************************************************
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		
		// ＫＥＹ＿異動区分
		inMap.put(EKK1681B001CBSMsg.KEY_IDO_DIV, idoDiv);
		// ＫＥＹ＿異動予約詳細コード
		inMap.put(EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, idoRsvDtlCd);
		// ＫＥＹ＿異動予約状態コード
		inMap.put(EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD, idoRsvStatCd);
		// ＫＥＹ＿ＳＹＳＩＤ
		inMap.put(EKK1681B001CBSMsg.KEY_SYSID, sysid);
		
		HashMap<String, Object> paramMap = JCKBPCommon.createScParamForSearch(param, EKK1681B001CBSMsg.class , inMap, funcCd);
		
		//***************************************************
		// SC呼出実行
		//***************************************************
		printDebugLog("異動予約一覧照会SC呼び出し開始");
		Map<?, ?> result = scCallRun(param, handle, paramMap);
		printDebugLog("異動予約一覧照会SC呼び出し完了" + result);
		
		return result;
	}
	
	/**
	 * 異動予約一意照会SC呼出。<br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param idoRsvNo 異動予約番号
	 * @return SC実行結果
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	private Map<?, ?> callEKK1681A010(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String idoRsvNo) throws RequestParameterException, SCException
	{
		//***************************************************
		// SCへの上りマッピング
		//***************************************************
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		
		// ＫＥＹ＿異動予約番号
		inMap.put(EKK1681A010CBSMsg.KEY_IDO_RSV_NO, idoRsvNo);
		
		HashMap<String, Object> paramMap = JCKBPCommon.createScParamForSearch(param, EKK1681A010CBSMsg.class , inMap, funcCd);
		
		//***************************************************
		// SC呼出実行
		//***************************************************
		printDebugLog("異動予約一意照会SC呼び出し開始");
		Map<?, ?> result = scCallRun(param, handle, paramMap);
		printDebugLog("異動予約一意照会SC呼び出し完了" + result);
		
		return result;
	}
	
	/**
	 * 異動予約異動予約状態変更SC呼出。<br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param funcCd 機能コード
	 * @param idoRsvNo 異動予約番号
	 * @param idoRsvHaneiYmd 異動予約反映年月日
	 * @param idoRsvStatCd 異動予約状態コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @return SC実行結果
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	private Map<?, ?> callEKK1681C010(SessionHandle handle, IRequestParameterReadWrite param, String funcCd, String idoRsvNo, String idoRsvHaneiYmd, String idoRsvStatCd, String updDtmBf) throws RequestParameterException, SCException
	{
		//***************************************************
		// SCへの上りマッピング
		//***************************************************
		Map<Object, Object> inMap = new HashMap<Object, Object>();
		
		// 異動予約番号
		inMap.put(EKK1681C010CBSMsg.IDO_RSV_NO, idoRsvNo);
		// 異動予約反映年月日
		inMap.put(EKK1681C010CBSMsg.IDO_RSV_HANEI_YMD, idoRsvHaneiYmd);
		// 異動予約状態コード
		inMap.put(EKK1681C010CBSMsg.IDO_RSV_STAT_CD, idoRsvStatCd);
		// 更新年月日時分秒(更新前)
		inMap.put(EKK1681C010CBSMsg.UPD_DTM_BF, updDtmBf);
		
		HashMap<String, Object> paramMap = JCKBPCommon.createScParam(param, EKK1681C010CBSMsg.class , inMap, funcCd);
		
		//***************************************************
		// SC呼出実行
		//***************************************************
		printDebugLog("異動予約異動予約状態変更SC呼び出し開始");
		Map<?, ?> result = scCallRun(param, handle, paramMap);
		printDebugLog("異動予約異動予約状態変更SC呼び出し完了" + result);
		
		return result;
	}
	
	/**
	 * お客様＜個人＞内容変更用マップを生成します
	 * @param inMap 入力パラメータマップ
	 * @param nowCustMap お客様情報マップ
	 * @param updDtmSysid 更新年月日時分秒（お客様）
	 * @param kepgKjnifTratDoiUm 関電G個人情報取扱同意有無
	 * @param kepgKjnifTratDoiYmd 関電G個人情報取扱同意年月日
	 * @param kepgKjniftFfg 関電G個人情報提供不可フラグ
	 * @param kepgKjniftFfgChgYmd 関電G個人情報提供不可フラグ変更年月日
	 * @param kepgKjniftFfgChgUwyCd 関電G個人情報提供不可フラグ変更受付方法コード
	 * @param kepgKjniftJokyoCd 関電G個人情報提供状況コード
	 * @param kepgKjniftStaYmd 関電G個人情報提供開始年月日
	 * @param kepgKjniftRscd 関電G個人情報提供連携状態コード
	 * @param kepgKjniftRscdChgYmd 関電G個人情報提供連携状態コード変更年月日
	 * @return お客様＜個人＞内容変更用マップ
	 */
	@SuppressWarnings("unchecked")
	private Map getUpdCustMapForKojin(Map inMap, Map<String, Object> nowCustMap, String updDtmSysid, String kepgKjnifTratDoiUm,
																										String kepgKjnifTratDoiYmd,
																										String kepgKjniftFfg,
																										String kepgKjniftFfgChgYmd,
																										String kepgKjniftFfgChgUwyCd,
																										String kepgKjniftJokyoCd,
																										String kepgKjniftStaYmd,
																										String kepgKjniftRscd,
																										String kepgKjniftRscdChgYmd)
	{
		Map custMap = (Map)((HashMap)nowCustMap).clone();
		
		String sysid = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.SYSID);
		
		String custNm = (String)nowCustMap.get(ECK0011B050CBSMsg1List.CUST_NM);
		String custKana = (String)nowCustMap.get(ECK0011B050CBSMsg1List.CUST_KANA);
		String custSexCd = (String)nowCustMap.get(ECK0011B050CBSMsg1List.CUST_SEX_CD);
		String custBirthd = (String)nowCustMap.get(ECK0011B050CBSMsg1List.CUST_BIRTHD);
		String keishaAdCd = (String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_AD_CD);
		String keishaPcd = (String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_PCD);
		String keishaStateNm = nullToEmpty((String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_STATE_NM));
		String keishaCityNm = nullToEmpty((String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_CITY_NM));
		String keishaOaztsuNm = nullToEmpty((String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_OAZTSU_NM));
		String keishaAzcho = nullToEmpty((String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_AZCHO_NM));
		String keishaBnchigo = nullToEmpty((String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_BNCHIGO));
		String keishaAdrttm = nullToEmpty((String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_ADRTTM));
		String keishaAdrrm = nullToEmpty((String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_ADRRM));
		
		// 住所編集部品を利用して契約者住所をコンテンツ住所に変換する
		String[] adInfo = JCKLcsCommonUtil.convAdForEo(keishaStateNm, keishaCityNm, keishaOaztsuNm, keishaAzcho, keishaBnchigo, keishaAdrttm, keishaAdrrm);
		
		// 入力値の設定
		custMap.put(ECK0021C010CBSMsg.SYSID, sysid);											// SYSID
		custMap.put(ECK0021C010CBSMsg.UPD_DTM_BF, updDtmSysid);									// 更新年月日時分秒(更新前)
		custMap.put(ECK0021C010CBSMsg.RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));				// 予約適用年月日
		custMap.put(ECK0021C010CBSMsg.CONT_CUST_NM, custNm);									// コンテンツお客様名
		custMap.put(ECK0021C010CBSMsg.CONT_CUST_KANA, custKana);								// コンテンツお客様カナ名
		custMap.put(ECK0021C010CBSMsg.CONT_CUST_SEX_CD, custSexCd);								// コンテンツお客様性別コード
		custMap.put(ECK0021C010CBSMsg.CONT_CUST_BIRTHD, custBirthd);							// コンテンツお客様生年月日
		custMap.put(ECK0021C010CBSMsg.CONT_AD_CD, keishaAdCd);									// コンテンツ住所コード
		custMap.put(ECK0021C010CBSMsg.CONT_PCD, keishaPcd);										// コンテンツ郵便番号
		custMap.put(ECK0021C010CBSMsg.CONT_STATE_NM, null);										// コンテンツ都道府県名
		custMap.put(ECK0021C010CBSMsg.CONT_CITY_NM, null);										// コンテンツ市区町村名
		custMap.put(ECK0021C010CBSMsg.CONT_OAZTSU_NM, null);									// コンテンツ大字通称名
		custMap.put(ECK0021C010CBSMsg.CONT_AZCHO_NM, null);										// コンテンツ字丁目名
		custMap.put(ECK0021C010CBSMsg.CONT_BNCHIGO, adInfo[0]); 								// コンテンツ番地号
		custMap.put(ECK0021C010CBSMsg.CONT_ADRTTM, adInfo[1] + adInfo[2]);						// コンテンツ住所補記・建物名
		custMap.put(ECK0021C010CBSMsg.CONT_ADRRM, null);										// コンテンツ住所補記・部屋番号
		custMap.put(ECK0021C010CBSMsg.CONT_AD_BNKT_STA_PST, adInfo[3]);							// コンテンツ住所分割開始位置
		custMap.put(ECK0021C010CBSMsg.MMB_SBT_TOKUT_FLG, MMB_SBT_TOKUT_FLG_TOKUTZUMI);			// 会員種別特定フラグ
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIF_TRAT_DOI_UM, kepgKjnifTratDoiUm);				// 関電G個人情報取扱同意有無
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIF_TRAT_DOI_YMD, kepgKjnifTratDoiYmd);			// 関電G個人情報取扱同意年月日
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG, kepgKjniftFfg);							// 関電G個人情報提供不可フラグ
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG_CHG_YMD, kepgKjniftFfgChgYmd);			// 関電G個人情報提供不可フラグ変更年月日
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG_CHG_UWY_CD, kepgKjniftFfgChgUwyCd);		// 関電G個人情報提供不可フラグ変更受付方法コード
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIFT_JOKYO_CD, kepgKjniftJokyoCd);					// 関電G個人情報提供状況コード
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIFT_STAYMD, kepgKjniftStaYmd);					// 関電G個人情報提供開始年月日
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIFT_RSCD, kepgKjniftRscd);						// 関電G個人情報提供連携状態コード
		custMap.put(ECK0021C010CBSMsg.KEPG_KJNIFT_RSCD_CHG_YMD, kepgKjniftRscdChgYmd);			// 関電G個人情報提供連携状態コード変更年月日
		
		return custMap;
	}

	/**
	 * お客様＜法人＞内容変更用マップを生成します
	 * @param inMap 入力パラメータマップ
	 * @param nowCustMap お客様情報マップ
	 * @param updDtmSysid 更新年月日時分秒（お客様）
	 * @param kepgKjnifTratDoiUm 関電G個人情報取扱同意有無
	 * @param kepgKjnifTratDoiYmd 関電G個人情報取扱同意年月日
	 * @param kepgKjniftFfg 関電G個人情報提供不可フラグ
	 * @param kepgKjniftFfgChgYmd 関電G個人情報提供不可フラグ変更年月日
	 * @param kepgKjniftFfgChgUwyCd 関電G個人情報提供不可フラグ変更受付方法コード
	 * @param kepgKjniftJokyoCd 関電G個人情報提供状況コード
	 * @param kepgKjniftStaYmd 関電G個人情報提供開始年月日
	 * @param kepgKjniftRscd 関電G個人情報提供連携状態コード
	 * @param kepgKjniftRscdChgYmd 関電G個人情報提供連携状態コード変更年月日
	 * @return お客様＜法人＞内容変更用マップ
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	// ANK-3612-00-00 MOD START
	//private Map getUpdCustMapForHojin(Map inMap, Map<String, Object> nowCustMap, String updDtmSysid, String kepgKjnifTratDoiUm,
	//																									String kepgKjnifTratDoiYmd,
	//																									String kepgKjniftFfg,
	//																									String kepgKjniftFfgChgYmd,
	//																									String kepgKjniftFfgChgUwyCd,
	//																									String kepgKjniftJokyoCd,
	//																									String kepgKjniftStaYmd,
	//																									String kepgKjniftRscd,
	//																									String kepgKjniftRscdChgYmd)
	//{
	// ANK-3612-00-00 MOD END
	private Map getUpdCustMapForHojin(Map inMap, Map<String, Object> nowCustMap, String updDtmSysid, String kepgKjnifTratDoiUm,
																										String kepgKjnifTratDoiYmd,
																										String kepgKjniftFfg,
																										String kepgKjniftFfgChgYmd,
																										String kepgKjniftFfgChgUwyCd,
																										String kepgKjniftJokyoCd,
																										String kepgKjniftStaYmd,
																										String kepgKjniftRscd,
																										String kepgKjniftRscdChgYmd,
																										SessionHandle handle,
																										IRequestParameterReadWrite param,
																										String opeId,
																										String serviceId) throws Throwable
	{
		Map custMap = (Map)((HashMap)nowCustMap).clone();
		
		String sysid = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.SYSID);
		String sei = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.SEI);
		String nm = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.NM);
		String kanaSei = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.KANA_SEI);
		String kanaNm = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.KANA_NM);
		String sex = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.SEX);
		String pcd = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.PCD);
		String adStateCity = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.AD_STATE_CITY);
		String adOther = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.AD_OTHER);
		String adMansion = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.AD_MANSION);
		String birthd = (String)inMap.get(CKSV9022_CKSV9022OP_CKSV902201CC.BIRTHD);
		
		// ANK-3612-00-00 ADD START
		// コンテンツ住所編集結果
		String adStateCityOther = adStateCity + adOther;
		Map<String, Object> contAdEditRslt = null;
		String[] contAdLst = null;
		if (OPE_PMP1.equals(opeId) || OPE_PMP2.equals(opeId) || OPE_PMP3.equals(opeId))
		{
			if (!JKKStringUtil.isNullSpace(pcd))
			{
				// 住所編集部品のパラメータ作成
				Map<String, Object> trgtData = new HashMap<String, Object>();
				// 編集モード
				trgtData.put(JKKAdEdit.EDIT_MODE, JKKAdEdit.EDIT_MODE_CHG);
				// 郵便番号
				trgtData.put(JKKAdEdit.PCD, pcd);
				// 番地号
				trgtData.put(JKKAdEdit.BNCHIGO, adStateCityOther);
				// 建物名
				trgtData.put(JKKAdEdit.ADRTTM, adMansion);
				// 部屋番号
				trgtData.put(JKKAdEdit.ADRRM, "");
				// 住所編集部品を実行(呼び出し元サービスIDが追加の場合、住所編集部品も修正すること)
				contAdEditRslt = JKKBpCommon.editAd(handle, param, trgtData, serviceId + "01CC");
				// コンテンツ住所分割位置を取得
				contAdLst = JZMCommonUtil.getPtn05(getValue(contAdEditRslt, JKKAdEdit.STATE_NM, ""),
													getValue(contAdEditRslt, JKKAdEdit.CITY_NM, ""),
													getValue(contAdEditRslt, JKKAdEdit.OAZTSU_NM, ""),
													getValue(contAdEditRslt, JKKAdEdit.AZCHO_NM, ""),
													getValue(contAdEditRslt, JKKAdEdit.BNCHIGO, ""),
													getValue(contAdEditRslt, JKKAdEdit.ADRTTM, ""),
													getValue(contAdEditRslt, JKKAdEdit.ADRRM, ""));
			}
		}
		// ANK-3612-00-00 ADD END
		
		// 入力値の設定
		custMap.put(ECK0031C010CBSMsg.SYSID, sysid);											// SYSID
		custMap.put(ECK0031C010CBSMsg.UPD_DTM_BF, updDtmSysid);									// 更新年月日時分秒(更新前)
		custMap.put(ECK0031C010CBSMsg.RSV_APLY_YMD, JCCBPCommon.getOpeDate(null));				// 予約適用年月日
		custMap.put(ECK0031C010CBSMsg.CONT_CUST_NM, sei + PMP_NAME_DELIMITER + nm);				// コンテンツお客様名
		custMap.put(ECK0031C010CBSMsg.CONT_CUST_KANA, kanaSei + PMP_NAME_DELIMITER + kanaNm);	// コンテンツお客様カナ名
		custMap.put(ECK0031C010CBSMsg.CONT_CUST_SEX_CD, sex);									// コンテンツお客様性別コード
		custMap.put(ECK0031C010CBSMsg.CONT_CUST_BIRTHD, birthd);								// コンテンツお客様生年月日
		custMap.put(ECK0031C010CBSMsg.CONT_AD_CD, CONT_AD_CD_DEFAULT);							// コンテンツ住所コード
		custMap.put(ECK0031C010CBSMsg.CONT_PCD, pcd);											// コンテンツ郵便番号
		custMap.put(ECK0021C010CBSMsg.CONT_STATE_NM, null);										// コンテンツ都道府県名
		custMap.put(ECK0021C010CBSMsg.CONT_CITY_NM, null);										// コンテンツ市区町村名
		custMap.put(ECK0021C010CBSMsg.CONT_OAZTSU_NM, null);									// コンテンツ大字通称名
		custMap.put(ECK0021C010CBSMsg.CONT_AZCHO_NM, null);										// コンテンツ字丁目名

		// ANK-3612-00-00 ADD/MOD START
		if (OPE_PMP1.equals(opeId) || OPE_PMP2.equals(opeId) || OPE_PMP3.equals(opeId))
		{
			custMap.put(ECK0031C010CBSMsg.CONT_BNCHIGO, contAdLst[0]);												// コンテンツ番地号
			custMap.put(ECK0031C010CBSMsg.CONT_ADRTTM, contAdLst[1]);												// コンテンツ住所補記・建物名
			custMap.put(ECK0021C010CBSMsg.CONT_ADRRM, contAdLst[2]);												// コンテンツ住所補記・部屋番号
			custMap.put(ECK0031C010CBSMsg.CONT_AD_BNKT_STA_PST, getContAdBnktStaPst(contAdLst[3], adStateCity));	// コンテンツ住所分割開始位置
		}
		else
		{
			custMap.put(ECK0031C010CBSMsg.CONT_BNCHIGO, adStateCity + adOther);										// コンテンツ番地号
			custMap.put(ECK0031C010CBSMsg.CONT_ADRTTM, adMansion);													// コンテンツ住所補記・建物名
			custMap.put(ECK0021C010CBSMsg.CONT_ADRRM, null);														// コンテンツ住所補記・部屋番号
			custMap.put(ECK0031C010CBSMsg.CONT_AD_BNKT_STA_PST, String.valueOf(adStateCity.length() + 1));			// コンテンツ住所分割開始位置
		}
		// ANK-3612-00-00 ADD/MOD END

		custMap.put(ECK0031C010CBSMsg.MMB_SBT_TOKUT_FLG, MMB_SBT_TOKUT_FLG_TOKUTZUMI);			// 会員種別特定フラグ
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIF_TRAT_DOI_UM, kepgKjnifTratDoiUm);				// 関電G個人情報取扱同意有無
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIF_TRAT_DOI_YMD, kepgKjnifTratDoiYmd);			// 関電G個人情報取扱同意年月日
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG, kepgKjniftFfg);							// 関電G個人情報提供不可フラグ
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG_CHG_YMD, kepgKjniftFfgChgYmd);			// 関電G個人情報提供不可フラグ変更年月日
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG_CHG_UWY_CD, kepgKjniftFfgChgUwyCd);		// 関電G個人情報提供不可フラグ変更受付方法コード
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIFT_JOKYO_CD, kepgKjniftJokyoCd);					// 関電G個人情報提供状況コード
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIFT_STAYMD, kepgKjniftStaYmd);					// 関電G個人情報提供開始年月日
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIFT_RSCD, kepgKjniftRscd);						// 関電G個人情報提供連携状態コード
		custMap.put(ECK0031C010CBSMsg.KEPG_KJNIFT_RSCD_CHG_YMD, kepgKjniftRscdChgYmd);			// 関電G個人情報提供連携状態コード変更年月日
		
		return custMap;
	}
	
	/**
	 * お客様情報の部分更新用指示書パラメータ作成
	 * @param sysid SYSID
	 * @param eoid eoID
	 * @param eoidPw eoIDパスワード
	 * @param nkname ニックネーム
	 * @param birthd 生年月日
	 * @param sex 性別
	 * @param rrksMlad 連絡先メールアドレス
	 * @param keishaTelno 連携電話番号（契約者電話番号、コンテンツ電話番号等）
	 * @return 指示書登録用パラメータ
	 */
	// ANK-3706-00-00 MOD START
	//private Map<String, Object> createShijishoParamAdminApiUpdMaster(String sysid, String eoid, String eoidPw, String nkname, String birthd, String sex, String rrksMlad)
	private Map<String, Object> createShijishoParamAdminApiUpdMaster(String sysid, String eoid, String eoidPw, String nkname, String birthd, String sex, String rrksMlad, String keishaTelno)
	// ANK-3706-00-00 MOD END
	{
		Map<String, Object> inMap = new HashMap<String, Object>();
		
		inMap.put(ECK0151D010CBSMsg.TRN_CD, SJISHO_TRN_CD_ADMIN_API);
		inMap.put(ECK0151D010CBSMsg.ERR_CNT, "0");
		inMap.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid);
		inMap.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		// ANK-3706-00-00 MOD START
		//inMap.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "19");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "22");
		// ANK-3706-00-00 MOD END
		inMap.put(ECK0151D010CBSMsg.PARAMETER_1, ADMIN_SJISHO_PARAM1_UPD_PART);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_2, eoid);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_3, sysid);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_4, eoidPw);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_5, nkname);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_7, rrksMlad);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_8, getAgeFlg(birthd, JCCBPCommon.getOpeDate(null)));
		inMap.put(ECK0151D010CBSMsg.PARAMETER_9, sex);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_10, ADMIN_SJISHO_PARAM10_HON);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_12, ADMIN_SJISHO_PARAM12_DOI);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_18, "1");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_19, JCCBPCommon.getSysDateTime());
		// ANK-3706-00-00 ADD START
		inMap.put(ECK0151D010CBSMsg.PARAMETER_20, keishaTelno);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_21, "");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_22, "");
		// ANK-3706-00-00 ADD END

		return inMap;
	}
	
	/**
	 * マスター会員のお客様情報本登録。<br />
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param inMap 入力パラメータマップ
	 * @param nowCustMap お客様情報マップ
	 * @param sysid SYSID
	 * @param updDtmSysid 顧客最終更新年月日時分秒
	 * @param nowMemberSbtCd 会員種別
	 * @param contSvcKeiNo 標準コンテンツサービス契約番号
	 * @param nowNkname ニックネーム
	 * @param nowEoId eoID
	 * @param isSameInitEoid 変更前eoIDと初期eoIDの比較結果
	 * @param eoidChgeYmd eoID変更年月日
	 * @param opeDate 運用日
	 * @param wkSijishoMap 指示書連携の電話番号判定用の情報
	 * @return 結果Map
	 * @throws Throwable
	 */
	// ANK-3814-00-00 MOD START
	//// ANK-3706-00-00 MOD START
	////private Map<String, String> regHonCustInfo(SessionHandle handle, IRequestParameterReadWrite param, Map<String, Object> inMap, Map<String, Object> nowCustMap, String sysid, String updDtmSysid, String nowMemberSbtCd, String contSvcKeiNo, String nowNkname, String nowEoId, boolean isSameInitEoid, String eoidChgeYmd, String opeDate)  throws Throwable
	// private Map<String, String> regHonCustInfo(SessionHandle handle, IRequestParameterReadWrite param, Map<String, Object> inMap, Map<String, Object> nowCustMap, String sysid, String updDtmSysid, String nowMemberSbtCd, String contSvcKeiNo, String nowNkname, String nowEoId, boolean isSameInitEoid, String eoidChgeYmd, String opeDate, String keishaTelno)  throws Throwable
	//// ANK-3706-00-00 MOD END
	private Map<String, String> regHonCustInfo(SessionHandle handle, IRequestParameterReadWrite param, Map<String, Object> inMap,
			Map<String, Object> nowCustMap, String sysid, String updDtmSysid, String nowMemberSbtCd, String contSvcKeiNo, String nowNkname, String nowEoId, boolean isSameInitEoid, String eoidChgeYmd, String opeDate, Map<String, String> wkSijishoMap)  throws Throwable
	// ANK-3814-00-00 MOD END
	{
		// リターンコード初期化
		String returnCd = PMP_NORMAL_END;
		
		Map result = null;
		boolean chkResult = false;
		boolean isEoidChge = false;
		boolean isNknmChge = false;
		String contCustNm = null;
		
		String kepgKjnifTratDoiUm = null;
		String kepgKjnifTratDoiYmd = null;
		String kepgKjniftFfg = null;
		String kepgKjniftFfgChgYmd = null;
		String kepgKjniftFfgChgUwyCd = null;
		String kepgKjniftJokyoCd = null;
		String kepgKjniftStaYmd = null;
		String kepgKjniftRscd = null;
		String kepgKjniftRscdChgYmd = null;
		
		// 異動予約に保持されている仮登録情報
		String idoRsvNo = "";
		String idoRsvUpdDtm = "";
		String idoRsvEoid = "";
		String idoRsvEoidPw = "";
		String idoRsvSei = "";
		String idoRsvNm = "";
		String idoRsvKanaSei = "";
		String idoRsvKanaNm = "";
		String idoRsvSex = "";
		String idoRsvPcd = "";
		String idoRsvAdStateCity = "";
		String idoRsvAdOther = "";
		String idoRsvAdMansion = "";
		String idoRsvTelno = "";
		String idoRsvBirthd = "";
		String idoRsvChgechuMlad = "";
		String idoRsvPwdReminderQsCd = "";
		String idoRsvPwdReminderAns = "";
		String idoRsvNkname = "";
		String idoRsvIspKssaiSvcKeiNo = "";
		String idoRsvMailRcvSvcKeiNo = "";
		String idoRsvTsyrnSvkeiCdSeq = "";
		String idoRsvKmkNumber1 = "";
		String idoRsvRcvDiv1 = "";
		String idoRsvKmkNumber2 = "";
		String idoRsvRcvDiv2 = "";
		String idoRsvKmkNumber3 = "";
		String idoRsvRcvDiv3 = "";
		String idoRsvKmkNumber4 = "";
		String idoRsvRcvDiv4 = "";
		String idoRsvKmkNumber5 = "";
		String idoRsvRcvDiv5 = "";
		
		// ANK-3612-00-00 ADD START
		// オペレーターIDを取得
		String ope_id = (String)param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		// サービスIDを取得
		String serviceId = param.getUsecaseID();
		// ANK-3612-00-00 ADD END
		
		// 標準コンテンツ契約存在チェック
		if (!JCKBPCommon.isNullOrBlank(contSvcKeiNo))
		{
			returnCd = PMP_ERR_OTHER;	// 標準コンテンツ契約が設定済みの場合、システムエラー
		}
		
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 異動予約一覧照会で異動予約存在チェック
			result = callEKK1681B001(handle, param, "1", IDO_DIV_00089, IDO_RSV_DTL_CD_031, IDO_RSV_STAT_CD_04, sysid);
			if (isSuccess(result))
			{
				CAANMsg[] dataList = getResultMsgList(result, EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
				if (dataList == null || dataList.length == 0)
				{
					returnCd = PMP_ERR_REGIST_TERM; // 本登録有効期限超過エラー
				}
				else
				{
					// 異動予約番号
					idoRsvNo = dataList[0].getString(EKK1681B001CBSMsg1List.IDO_RSV_NO);
					
					// 異動予約一意照会
					result = callEKK1681A010(handle, param, "1", idoRsvNo);
					if (isSuccess(result))
					{
						CAANMsg idoRsvMsg = getResultMsgList(result, EKK1681A010CBSMsg.EKK1681A010CBSMSG1LIST)[0];
						
						// 更新年月日時分秒
						idoRsvUpdDtm = idoRsvMsg.getString(EKK1681A010CBSMsg1List.UPD_DTM);
						// eoID
						idoRsvEoid = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_4);
						// eoIDパスワード
						idoRsvEoidPw = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_5);
						// 氏名(姓)
						idoRsvSei = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_6);
						// 氏名(名)
						idoRsvNm = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_7);
						// カナ名(姓)
						idoRsvKanaSei = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_8);
						// カナ名(名)
						idoRsvKanaNm = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_9);
						// 性別
						idoRsvSex = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_10);
						// 郵便番号
						idoRsvPcd = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_11);
						// 住所1
						idoRsvAdStateCity = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_12);
						// 住所2
						idoRsvAdOther = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_13);
						// 住所3
						idoRsvAdMansion = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_14);
						// 電話番号
						idoRsvTelno = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_15);
						// 生年月日
						idoRsvBirthd = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_16);
						// 変更手続き中メールアドレス
						idoRsvChgechuMlad = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_18);
						// パスワードリマインダ質問コード
						idoRsvPwdReminderQsCd = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_19);
						// パスワードリマインダ回答
						idoRsvPwdReminderAns = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_20);
						// ニックネーム
						idoRsvNkname = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_21);
						// サービス契約番号(ISP決済)
						idoRsvIspKssaiSvcKeiNo = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_22);
						// サービス契約番号(メール受信設定)
						idoRsvMailRcvSvcKeiNo = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_23);
						// 他システム連携サービス契約コード通番
						idoRsvTsyrnSvkeiCdSeq = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_24);
						// メール受信設定_項番1
						idoRsvKmkNumber1 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_25);
						// メール受信設定_受信区分1
						idoRsvRcvDiv1 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_26);
						// メール受信設定_項番2
						idoRsvKmkNumber2 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_27);
						// メール受信設定_受信区分2
						idoRsvRcvDiv2 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_28);
						// メール受信設定_項番3
						idoRsvKmkNumber3 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_29);
						// メール受信設定_受信区分3
						idoRsvRcvDiv3 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_30);
						// メール受信設定_項番4
						idoRsvKmkNumber4 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_31);
						// メール受信設定_受信区分4
						idoRsvRcvDiv4 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_32);
						// メール受信設定_項番5
						idoRsvKmkNumber5 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_33);
						// メール受信設定_受信区分5
						idoRsvRcvDiv5 = idoRsvMsg.getString(EKK1681A010CBSMsg1List.PARAMETER_34);
					}
					else
					{
						returnCd = PMP_ERR_OTHER;
					}
				}
			}
			else
			{
				returnCd = PMP_ERR_OTHER;
			}
		}
		
		// eoID更新日チェック
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// eoID変更有無
			isEoidChge = !idoRsvEoid.equals(nowEoId);
			
			// eoIDに変更があり、変更前eoID≠初期eoID
			if (isEoidChge && !isSameInitEoid)
			{
				// 変更不可期間チェック
				chkResult = checkUpdFailPrd(handle, param, opeDate, WORK_PARAM_ID_EOID_CHGFAIL_DAYS, eoidChgeYmd);
				if (!chkResult)
				{
					returnCd = PMP_ERR_EOID_TERM;	// eoID規定の期間以内の更新エラー
				}
			}
		}
		
		// サービス契約番号存在チェック
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// パラメータのメール受信設定.サービス契約番号≠"ZZZZZZZZZZ"
			if (!JCKBPCommon.isNullOrBlank(idoRsvMailRcvSvcKeiNo) && !SVC_KEI_NO_RRKS_MLAD.equals(idoRsvMailRcvSvcKeiNo))
			{
				// サービス契約番号存在チェック
				chkResult = checkSvcKeiNo(handle, param, sysid, idoRsvMailRcvSvcKeiNo);
				if (!chkResult)
				{
					returnCd = PMP_ERR_NODATA_SVCKEINO;	// サービス契約番号なしエラー
				}
			}
		}
		
		// 回線契約状態チェック
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 回線契約状態チェック
			chkResult = checkKisnKeiStat(handle, param, idoRsvIspKssaiSvcKeiNo);
			if (!chkResult)
			{
				returnCd = PMP_ERR_STAT_KSN_KEI;	// 回線契約状態チェックエラー（会員状態・ステータス）
			}
		}
		
		// お客様一意照会
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// お客様一意照会SC呼出
			result = callECK0011A010(handle, param, "2", sysid, opeDate);
			if (isSuccess(result))
			{
				String mapKeyPre = ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST + "[0].";
				// 関電G個人情報取扱同意有無
				kepgKjnifTratDoiUm = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIF_TRAT_DOI_UM);
				// 関電G個人情報取扱同意年月日
				kepgKjnifTratDoiYmd = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIF_TRAT_DOI_YMD);
				// 関電G個人情報提供不可フラグ
				kepgKjniftFfg = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIFT_FFG);
				// 関電G個人情報提供不可フラグ変更年月日
				kepgKjniftFfgChgYmd = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIFT_FFG_CHG_YMD);
				// 関電G個人情報提供不可フラグ変更受付方法コード
				kepgKjniftFfgChgUwyCd = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIFT_FFG_CHG_UWY_CD);
				// 関電G個人情報提供状況コード
				kepgKjniftJokyoCd = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIFT_JOKYO_CD);
				// 関電G個人情報提供開始年月日
				kepgKjniftStaYmd = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIFT_STAYMD);
				// 関電G個人情報提供連携状態コード
				kepgKjniftRscd = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIFT_RSCD);
				// 関電G個人情報提供連携状態コード変更年月日
				kepgKjniftRscdChgYmd = getResultString(result, mapKeyPre + ECK0011A010CBSMsg1List.KEPG_KJNIFT_RSCD_CHG_YMD);
			}
			else
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		
		// お客様<個人>内容変更
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別 マスター会員（個人）
			if (MMB_SBT_CD_MASTER_KOJIN.equals(nowMemberSbtCd))
			{
				// お客様<個人>内容変更SC呼出用マップ取得
				Map custMap = getUpdCustMapForKojin(inMap, nowCustMap, updDtmSysid, kepgKjnifTratDoiUm,
																					kepgKjnifTratDoiYmd,
																					kepgKjniftFfg,
																					kepgKjniftFfgChgYmd,
																					kepgKjniftFfgChgUwyCd,
																					kepgKjniftJokyoCd,
																					kepgKjniftStaYmd,
																					kepgKjniftRscd,
																					kepgKjniftRscdChgYmd);
				// 返却用お客様名を退避
				contCustNm = (String)custMap.get(ECK0021C010CBSMsg.CONT_CUST_NM);
				
				// お客様<個人>内容変更SC呼出
				result = callECK0021C010(handle, param, custMap);
				if (isSuccess(result))
				{
					updDtmSysid = getResultString(result, ECK0021C010CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		// お客様<法人>内容変更
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別が マスター会員（法人）
			if (MMB_SBT_CD_MASTER_HOJIN.equals(nowMemberSbtCd))
			{
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.SEI, idoRsvSei);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.NM, idoRsvNm);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.KANA_SEI, idoRsvKanaSei);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.KANA_NM, idoRsvKanaNm);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.SEX, idoRsvSex);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.PCD, idoRsvPcd);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.AD_STATE_CITY, idoRsvAdStateCity);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.AD_OTHER, idoRsvAdOther);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.AD_MANSION, idoRsvAdMansion);
				inMap.put(CKSV9022_CKSV9022OP_CKSV902201CC.BIRTHD, idoRsvBirthd);
				
				// お客様<法人>内容変更SC呼出用マップ取得
				// ANK-3612-00-00 MOD START
				//Map custMap = getUpdCustMapForHojin(inMap, nowCustMap, updDtmSysid, kepgKjnifTratDoiUm,
				//																	kepgKjnifTratDoiYmd,
				//																	kepgKjniftFfg,
				//																	kepgKjniftFfgChgYmd,
				//																	kepgKjniftFfgChgUwyCd,
				//																	kepgKjniftJokyoCd,
				//																	kepgKjniftStaYmd,
				//																	kepgKjniftRscd,
				//																	kepgKjniftRscdChgYmd,);
				Map custMap = getUpdCustMapForHojin(inMap, nowCustMap, updDtmSysid, kepgKjnifTratDoiUm,
																					kepgKjnifTratDoiYmd,
																					kepgKjniftFfg,
																					kepgKjniftFfgChgYmd,
																					kepgKjniftFfgChgUwyCd,
																					kepgKjniftJokyoCd,
																					kepgKjniftStaYmd,
																					kepgKjniftRscd,
																					kepgKjniftRscdChgYmd,
																					handle,
																					param,
																					ope_id,
																					serviceId);
				// ANK-3612-00-00 MOD END

				// 返却用お客様名を退避
				contCustNm = (String)custMap.get(ECK0031C010CBSMsg.CONT_CUST_NM);
				
				// お客様<法人>内容変更SC呼出
				result = callECK0031C010(handle, param, custMap);
				if (isSuccess(result))
				{
					updDtmSysid = getResultString(result, ECK0031C010CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		// eoID変更
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// eoID変更あり
			if (isEoidChge)
			{
				// eoID変更（eoID変更SC呼出）
				result = callECK0011C030(handle, param, opeDate, sysid, idoRsvEoid, updDtmSysid);
				
				if (isSuccess(result))
				{
					// 更新年月日時分秒を取得
					updDtmSysid = getResultString(result, ECK0011C030CBSMsg.UPD_DTM);
					
					// 初期eoIDと変更前eoIDが異なる場合、変更前eoIDをエイジング終了にする。
					if (!isSameInitEoid)
					{
						// 旧eoIDエイジング終了
						result = chgEoIdAgingStateEnd(handle, param, nowEoId);
						
						// エイジング対象登録SC呼出のエラー判定
						if (isError(result))
						{
							returnCd = PMP_ERR_OTHER;   // その他のエラー
						}
					}
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		// ニックネーム変更
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// ニックネーム変更有無
			isNknmChge = !nullToEmpty(idoRsvNkname).equals(nullToEmpty(nowNkname));
			
			// ニックネーム変更あり
			if (isNknmChge)
			{
				// ニックネーム変更（ニックネーム変更SC呼出）
				result = callECK0011C090(handle, param, opeDate, sysid, idoRsvNkname, updDtmSysid);
				
				if (isSuccess(result))
				{
					// 更新年月日時分秒を取得
					updDtmSysid = getResultString(result, ECK0011C090CBSMsg.UPD_DTM);
					
					// コンテンツ解約時にニックネームのエイジング終了処理が実行されるため
					// その後お客様情報仮登録を実行するとニックネームの変更有無にかかわらずエイジングに入力したニックネームが登録される。
					// 「変更前のニックネーム」というものがエイジングにはそもそも存在しないため旧ニックネームのエイジング終了処理は不要。
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		// パスワードリマインダ変更
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// パスワードリマインダ用質問コードとパスワードリマインダ用回答のいずれかに変更あり
			if (!JCKBPCommon.isNullOrBlank(idoRsvPwdReminderQsCd) && !JCKBPCommon.isNullOrBlank(idoRsvPwdReminderAns))
			{
				if (!idoRsvPwdReminderQsCd.equals((String)nowCustMap.get(ECK0011B050CBSMsg1List.PWD_REMINDER_QS_CD)) || !idoRsvPwdReminderAns.equals((String)nowCustMap.get(ECK0011B050CBSMsg1List.PWD_REMINDER_ANS)))
				{
					// パスワードリマインダ変更SC呼出
					result = callECK0011C100(handle, param, sysid, idoRsvPwdReminderQsCd, idoRsvPwdReminderAns, updDtmSysid);
					if (isSuccess(result))
					{
						updDtmSysid = getResultString(result, ECK0011C100CBSMsg.UPD_DTM);
					}
					else
					{
						returnCd = PMP_ERR_OTHER;   // その他のエラー
					}
				}
			}
		}
		
		// 連絡先メールアドレス本登録
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if (!JCKBPCommon.isNullOrBlank(idoRsvChgechuMlad))
			{
				// 連絡先(メールアドレス)登録更新
				Map tmpResult = addUpdRrksMlad(handle, param, opeDate, "1", sysid, idoRsvChgechuMlad, updDtmSysid, opeDate);
				result = (Map)tmpResult.get("result");
				if (isSuccess(result))
				{
					updDtmSysid = (String)tmpResult.get("upd_dtm_sysid");
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		// 連絡先（電話番号）登録
		if (PMP_NORMAL_END.equals(returnCd))
		{
			String trgtTelno = "";
			
			// 会員種別がマスター会員(個人)の場合
			if (MMB_SBT_CD_MASTER_KOJIN.equals(nowMemberSbtCd))
			{
				// 契約者電話番号
				trgtTelno = (String)nowCustMap.get(ECK0011B050CBSMsg1List.KEISHA_TELNO);
			}
			else
			{
				// 入力パラメータの電話番号
				trgtTelno = idoRsvTelno;
			}
			
			// 更新対象電話番号が設定されている
			if (!JCKBPCommon.isNullOrBlank(trgtTelno))
			{
				// 連絡先(電話番号)登録更新
				Map tmpResult = addUpdRrksTelno(handle, param, opeDate, sysid, trgtTelno, updDtmSysid);
				result = (Map)tmpResult.get("result");
				if (isSuccess(result))
				{
					updDtmSysid = (String)tmpResult.get("upd_dtm_sysid");
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		// サービス契約<ホスティング>登録
		if (PMP_NORMAL_END.equals(returnCd))
		{
			result = addStdardContDoi(handle, param, sysid, opeDate);
			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		
		// 支払方法入力支援登録
		Map<String, String> paywayInsupMap = new HashMap<String, String>();;
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 支払方法入力支援登録SC呼出
			result = callECN0131D011ForIspks(handle, param, sysid, idoRsvIspKssaiSvcKeiNo);
			if (isSuccess(result))
			{
				paywayInsupMap.put("payway_input_shien_cd", getResultString(result, ECN0131D011CBSMsg.PAYWAY_INPUT_SHIEN_CD));
				paywayInsupMap.put("tsyrn_pay_seq", getResultString(result, ECN0131D011CBSMsg.TSYRN_PAY_SEQ));
				paywayInsupMap.put("isp_kssai_svc_kei_no", getResultString(result, ECN0131D011CBSMsg.ISP_KSSAI_SVC_KEI_NO));
				paywayInsupMap.put("crecard_id", getResultString(result, ECN0131D011CBSMsg.CRECARD_ID));
				paywayInsupMap.put("mk_flg", getResultString(result, ECN0131D011CBSMsg.MK_FLG));
				paywayInsupMap.put("add_dtm", getResultString(result, ECN0131D011CBSMsg.ADD_DTM));
				paywayInsupMap.put("add_opeacnt", getResultString(result, ECN0131D011CBSMsg.ADD_OPEACNT));
				paywayInsupMap.put("upd_dtm", getResultString(result, ECN0131D011CBSMsg.UPD_DTM));
				paywayInsupMap.put("upd_opeacnt", getResultString(result, ECN0131D011CBSMsg.UPD_OPEACNT));
			}
			else
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		
		// オプトインメール受信設定登録更新
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if (!JCKBPCommon.isNullOrBlank(idoRsvChgechuMlad))
			{
				List<Map<String, String>> mailRcvSetteList = new ArrayList<Map<String, String>>();
				Map<String, String> rcvSette = null;
				
				if (!JCKBPCommon.isNullOrBlank(idoRsvKmkNumber1) && !JCKBPCommon.isNullOrBlank(idoRsvRcvDiv1))
				{
					rcvSette = new HashMap<String, String>();
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.KMK_NUMBER, idoRsvKmkNumber1);
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.RCV_DIV, idoRsvRcvDiv1);
					mailRcvSetteList.add(rcvSette);
				}
				
				if (!JCKBPCommon.isNullOrBlank(idoRsvKmkNumber2) && !JCKBPCommon.isNullOrBlank(idoRsvRcvDiv2))
				{
					rcvSette = new HashMap<String, String>();
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.KMK_NUMBER, idoRsvKmkNumber2);
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.RCV_DIV, idoRsvRcvDiv2);
					mailRcvSetteList.add(rcvSette);
				}
				
				if (!JCKBPCommon.isNullOrBlank(idoRsvKmkNumber3) && !JCKBPCommon.isNullOrBlank(idoRsvRcvDiv3))
				{
					rcvSette = new HashMap<String, String>();
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.KMK_NUMBER, idoRsvKmkNumber3);
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.RCV_DIV, idoRsvRcvDiv3);
					mailRcvSetteList.add(rcvSette);
				}
				
				if (!JCKBPCommon.isNullOrBlank(idoRsvKmkNumber4) && !JCKBPCommon.isNullOrBlank(idoRsvRcvDiv4))
				{
					rcvSette = new HashMap<String, String>();
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.KMK_NUMBER, idoRsvKmkNumber4);
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.RCV_DIV, idoRsvRcvDiv4);
					mailRcvSetteList.add(rcvSette);
				}
				
				
				if (!JCKBPCommon.isNullOrBlank(idoRsvKmkNumber5) && !JCKBPCommon.isNullOrBlank(idoRsvRcvDiv5))
				{
					rcvSette = new HashMap<String, String>();
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.KMK_NUMBER, idoRsvKmkNumber5);
					rcvSette.put(CKSV9022_CKSV9022OP_CKSV902201CC_mail_rcv_sette_list.RCV_DIV, idoRsvRcvDiv5);
					mailRcvSetteList.add(rcvSette);
				}
				
				// オプトインメール受信設定登録更新
				Map tmpResult = addUpdOptinmRcvSette(handle, param, opeDate, sysid, nowMemberSbtCd, "", idoRsvChgechuMlad, idoRsvMailRcvSvcKeiNo, idoRsvTsyrnSvkeiCdSeq, mailRcvSetteList, updDtmSysid);
				result = (Map)tmpResult.get("result");
				if (isSuccess(result))
				{
					updDtmSysid = (String)tmpResult.get("upd_dtm_sysid");
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		// 指示書登録
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// ANK-3814-00-00 ADD START
			// 連携電話番号（契約者電話番号、コンテンツ電話番号等）
			String keishaTelno = getSecurityRenkeiTelno(handle, param, sysid, wkSijishoMap.get(ECK0011B050CBSMsg1List.MEMBER_SBT_CD), wkSijishoMap.get(ECK0011B050CBSMsg1List.KEISHA_TELNO));
			// ANK-3814-00-00 ADD END

			String tmpBirthd = null;
			String tmpSex = null;
			if (MMB_SBT_CD_MASTER_KOJIN.equals(nowMemberSbtCd))
			{
				tmpBirthd = (String)nowCustMap.get(ECK0011B050CBSMsg1List.CUST_BIRTHD);
				tmpSex = (String)nowCustMap.get(ECK0011B050CBSMsg1List.CUST_SEX_CD);
			}
			else
			{
				tmpBirthd = idoRsvBirthd;
				tmpSex = idoRsvSex;
			}
			
			// AdminAPI部分更新用の指示書パラメータ作成
			// ANK-3706-00-00 MOD START
			//Map sjishoMap = createShijishoParamAdminApiUpdMaster(sysid, idoRsvEoid, idoRsvEoidPw, idoRsvNkname, tmpBirthd, tmpSex, idoRsvChgechuMlad);
			Map sjishoMap = createShijishoParamAdminApiUpdMaster(sysid, idoRsvEoid, idoRsvEoidPw, idoRsvNkname, tmpBirthd, tmpSex, idoRsvChgechuMlad, keishaTelno);
			// ANK-3706-00-00 MOD END
			result = callECK0151D010Map(handle, param, sjishoMap);
			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		
		// 処理済の異動予約を更新
		if (PMP_NORMAL_END.equals(returnCd))
		{
			result = callEKK1681C010(handle, param, "1", idoRsvNo, opeDate, IDO_RSV_STAT_CD_01, idoRsvUpdDtm);
			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		
		Map<String, String> resMap = new HashMap<String, String>();
		resMap.put("cont_cust_nm", contCustNm);
		if (!JCKBPCommon.isNullOrBlank(idoRsvEoid))
		{
			resMap.put("eoid", idoRsvEoid);
		} else {
			resMap.put("eoid", nowEoId);
		}
		resMap.put("upd_dtm_sysid", updDtmSysid);
		resMap.put("return_cd", returnCd);
		return resMap;
	}
	// ANK-3194-00-00 ADD END

	// ANK-3612-00-00 ADD START
	/**
	 * コンテンツ住所分割開始位置を取得します。
	 * @param contAdBnktStaPst コンテンツ住所分割開始位置
	 * @param adStateCity 住所（都道府県/市区町村）
	 * @return コンテンツ住所分割開始位置
	 */
	private String getContAdBnktStaPst(String contAdBnktStaPst, String adStateCity)
	{
		// お客様情報変更画面(CKW00401)の画面表示同様に開始位置は5より小さく16より大きい値は設定しない
		// ※分割開始位置は5〜17までの値となる

		int len = adStateCity.length();
		if (contAdBnktStaPst != null && !"".equals(contAdBnktStaPst))
		{
			int start = Integer.parseInt(contAdBnktStaPst);
			if (start < 5 && len < 5)
			{
				return "5";
			}
			else if (start < 5 && len < 17)
			{
				return String.valueOf(len + 1);
			}
			else if (start < 5 && len > MAX_LEN_STATE_CITY)
			{
				return "17";
			}
		}
		else
		{
			if (len < 17)
			{
				return String.valueOf(len + 1);
			}
			else
			{
				return "17";
			}
		}

		return contAdBnktStaPst;
	}

	/**
	 * 指定された項目の値を取得します。
	 * <br>
	 * @param map 指定された項目を持つマップ
	 * @param key マップのキー
	 * @param defaultVal デフォルト値
	 * @return 指定された項目の値。設定されていない場合はデフォルト値
	 */
	private String getValue(Map<String, Object> map, String key, String defaultVal)
	{
		if (map != null && map.containsKey(key))
		{
			return JKKStringUtil.nullToBlank((String)map.get(key));
		}

		return JKKStringUtil.nullToBlank(defaultVal);
	}
	// ANK-3612-00-00 ADD END
}
