/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCKSV902601CC
*   ソースファイル名：JCKSV902601CC.java
*   作成者          ：富士通
*   日付            ：2011年12月10日
*＜機能概要＞
*  指定されたSYSIDの標準コンテンツを解約します。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/12/10   FJ）眞方    新規作成
*   v8.00.00    2014/03/25   FJ）山口    【ANK-1962-00-00】S-IF入力項目変更対応
*   v8.00.00    2014/06/11   FJ) 窪田    OM-2014-0002141対応
*   V9.00.00    2014/07/17   FJ) 窪田    ST-2014-0000131対応
*   v27.00.00   2016/10/10   FJ) 阮      ANK-2987-00-00対応    
*   v27.01.00   2016/11/07   FJ) 澤田    ANK-2987-08-00対応  
*   v47.00.00   2019/11/07   FJ) 三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*   v48.00.00   2020/02/17   FJ) 美濃原  【ANK-3814-00-00】eoIDログインセキュリティ強化フォロー対応
*   v48.00.00   2020/03/13   FJ) 美濃原  【ST-2020-0000012】解約時の契約者電話番号連携不備
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import static eo.common.constant.JCKStrConst.*;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.*;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.CKSV9026_CKSV9026OP_CKSV902601CC;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.model.base.CAANMsg;

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.ECK0011C020CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011C180CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0021C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0111B002CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0111B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0121B020CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0121B020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECKA9020001CBSMsg;

/**
 * 指定されたSYSIDの標準コンテンツを解約します。
 * <BR>
 * @ author 富士通
 */
public class JCKSV902601CC extends AbstractCommonComponent implements ICommonComponent
{
	/** 当CCの内部でしか使わないエラーコード */
	private static final String PMP_ERR_OTHER = "OTHER";

	/**
	 * 標準コンテンツ解約メイン処理。<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(CKSV9026_CKSV9026OP_CKSV902601CC.SYSID);
		String ckUpdDtm = (String)inMap.get(CKSV9026_CKSV9026OP_CKSV902601CC.CK_UPD_DTM);
		String kkUpdDtm = (String)inMap.get(CKSV9026_CKSV9026OP_CKSV902601CC.KK_UPD_DTM);

		// リターンコード初期化
		String returnCd = PMP_NORMAL_END;

		//***************************************************
		// 内部で使用する変数の初期化
		//***************************************************
		String opeDate = JCCBPCommon.getOpeDate(null);
		Map<String, Object> custInfo = new HashMap<String, Object>();
		CAANMsg custResultMsg = null;
		String contCustNm = null;
		String updDtmSysid = null;
		String memberSbtCd = null;
		String eoid = null;
		String shkEoidPwd = null;
		String nkname = null;
		String shkEoid = null;
		String svcKeiNo = null;
		String updDtmSvcKei = null;
		String rrkNoMlad = null;
		String keishaTypeCd = null;
		String rrksNoContTelno = null;
		String mlad = null;
		String grpUpdDtm = null;
		String grpUpdOpeacnt = 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;
		// ANK-3706-00-00 ADD START
		// ■ANK-3814-00-00 連携電話番号（契約者電話番号、コンテンツ電話番号等）を設定
		String keishaTelno = "";
		// ANK-3706-00-00 ADD END

		// ST-2014-0000131 ADD START
		Map<String, Object> nowCustMap = new HashMap<String, Object>();
		String grpLeaderSysid = null;
		// ST-2014-0000131 ADD END

		//***************************************************
		// PMP連携用排他制御
		//***************************************************
		Map result = callECKA9020001(handle, param, sysid, "2");
		if (isSuccess(result))
		{
			String errFlg = getResultString(result, ECKA9020001CBSMsg.LOCK_ERR_FLG);
			if (!"0".equals(errFlg))
			{
				returnCd = PMP_ERR_EXCLUSION;
			}
		}
		else
		{
			returnCd = PMP_ERR_OTHER;
		}

		//***************************************************
		// 最終更新日時チェック
		//***************************************************
		String lastCkUpdDtm = null;
		String lastKkUpdDtm = null;
		if (JCKBPCommon.inArray(returnCd, PMP_NORMAL_END, PMP_ERR_EXCLUSION))
		{
			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;
				if ((!kkUpdDtm.equals(chkKkUpdDtm)) || 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))
		{
			result = callECK0011B050(handle, param, "1", sysid);
			if (isSuccess(result))
			{
				
				CAANMsg[] dataList = getResultMsgList(result, ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST);
				if ((dataList == null) || (dataList.length == 0))
				{
					returnCd = PMP_ERR_NODATA;   // データなし
				}
				else
				{
					// お客様情報照会(PMP連携用)結果を取得
					custResultMsg = getResultMsgList(result, ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST)[0];
					// お客様情報照会(PMP連携用)結果マップを取得
					custInfo = copyMsgToMap(custResultMsg, ECK0011B050CBSMsg1List.class, ECK0011B050CBSMsg1List.class);
					String mapKeyPre = ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST + "[0].";
					contCustNm = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.CONT_CUST_NM);
					//updDtmSysid = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.UPD_DTM_SYSID);
					memberSbtCd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.MEMBER_SBT_CD);
					eoid = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.EOID);
					nkname = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.NKNAME);
					shkEoid = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.SHK_EOID);
					shkEoidPwd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.SHK_EOID_PWD);
					svcKeiNo = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.SVC_KEI_NO);
					updDtmSvcKei = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.UPD_DTM_SVC_KEI);
					rrkNoMlad = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.RRKS_NO_MLAD);
					mlad = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.MLAD);
					keishaTypeCd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.KEISHA_TYPE_CD);
					rrksNoContTelno = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.RRKS_NO_CONT_TELNO);
					// ST-2020-0000012 DEL START
					//// ANK-3814-00-00 DEL START
					//// ANK-3706-00-00 ADD START
					////keishaTelno = 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);
					//keishaTelno = getSecurityRenkeiTelno(handle, param, sysid, memberSbtCd, wkTelno);
					//// ANK-3814-00-00 ADD END
					// ST-2020-0000012 DEL END
				}
			}
			else
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		// ST-2014-0000131 ADD START
		//***************************************************
		//グループ情報照会(グループリーダーSYSIDの取得
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// グループ情報照会SC呼出
			result = callECK0111B002(handle, param, "1", sysid);
			if (isSuccess(result))
			{
				CAANMsg[] dataList = getResultMsgList(result, ECK0111B002CBSMsg.ECK0111B002CBSMSG1LIST);
				// お客様情報照会(PMP連携用)結果マップを取得
				nowCustMap = copyMsgToMap(custResultMsg, ECK0111B002CBSMsg1List.class, ECK0111B002CBSMsg1List.class);

				
				String mapKeyPre = ECK0111B002CBSMsg.ECK0111B002CBSMSG1LIST + "[0].";
				grpLeaderSysid = getResultString(result, mapKeyPre + ECK0111B002CBSMsg1List.GRP_LEADER_SYSID);
			}
			printDebugLog("グループリーダーSYSID:[" + grpLeaderSysid + "]");
		}
		// ST-2014-0000131 ADD END
// ANK-2987-00-00 DEL START
//		//***************************************************
//		//オプトインメール受信設定削除
//		//***************************************************
//		if (PMP_NORMAL_END.equals(returnCd))
//		{
//			// 会員種別がマスター会員(個人)、マスター会員(法人)の時のみ実行
//			// ※ファミリー会員、オープン会員は「お客様退会」の副次処理で行われる為、ここでは実施しない。(グループ設定の削除も同様)
//			if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_MASTER_KOJIN, MMB_SBT_CD_MASTER_HOJIN))
//			{
//				result = mkOptinmRcvSetteForContMlad(handle, param, sysid, updDtmSysid);
//				if (isSuccess(result))
//				{
//					String updDtm = getResultString(result, ECK0141C030CBSMsg.UPD_DTM);
//					updDtmSysid = (updDtm != null)&&(!"".equals(updDtm)) ? updDtm : updDtmSysid;
//				}
//				else
//				{
//					returnCd = PMP_ERR_OTHER;   // その他のエラー
//				}
//			}
//		}
// ANK-2987-00-00 DEL START

		//***************************************************
		// eoIDエイジング終了
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd) && (eoid != null) && (!eoid.equals(shkEoid)))
		{
			// 会員種別がマスター会員(保守用のみ)、ファミリー会員、オープン会員の時のみ
			if ((JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_MASTER_KOJIN, MMB_SBT_CD_MASTER_HOJIN) && KEISHA_TYPE_CD_MNT.equals(keishaTypeCd))
			|| (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_FAMILY_KOJIN, MMB_SBT_CD_FAMILY_HOJIN, MMB_SBT_CD_OPEN)))
			{
				result = chgEoIdAgingStateEnd(handle, param, eoid);
				if (isError(result))
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}

		//***************************************************
		// ニックネームエイジング終了
		//***************************************************
		if ((PMP_NORMAL_END.equals(returnCd)) && (!JCKBPCommon.isNullOrBlank(nkname)))
		{
			result = chgNkNameAgingStateEnd(handle, param, nkname);
			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		
		//***************************************************
		// ニックネームクリア
		//***************************************************
		if ((PMP_NORMAL_END.equals(returnCd)) && (!JCKBPCommon.isNullOrBlank(nkname)))
		{
			// 会員種別がマスター会員(個人)、マスター会員(法人)の時のみ実行
			if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_MASTER_KOJIN, MMB_SBT_CD_MASTER_HOJIN))
			{
				result = callECK0011C180(handle, param, sysid, updDtmSysid);
				if (isSuccess(result))
				{
					updDtmSysid = getResultString(result, ECK0011C180CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}

		//***************************************************
		// eoID初期化
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別がマスター会員(個人)、マスター会員(法人) かつ 契約者タイプコードが 保守用 の時のみ実行
			if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_MASTER_KOJIN, MMB_SBT_CD_MASTER_HOJIN)
				&& KEISHA_TYPE_CD_MNT.equals(keishaTypeCd))
			{
				result = callECK0011C020(handle, param, sysid, updDtmSysid);
				if (isSuccess(result))
				{
					updDtmSysid = getResultString(result, ECK0011C020CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}

		// ST-2014-0000131 ADD START
		//***************************************************
		// サービス契約内訳<eoモバイル>変更
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if (!JCKBPCommon.isNullOrBlank(grpLeaderSysid))
			{
				result = callEKK0201C080(handle, param, sysid, grpLeaderSysid, opeDate);
			}
		}
		// ST-2014-0000131 ADD END

		//***************************************************
		//お客様一意照会
		//***************************************************
		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(memberSbtCd))
			{
				Map custKojinInfo = (Map)((HashMap)custInfo).clone();
				custKojinInfo.put(ECK0021C010CBSMsg.SYSID, sysid);
				custKojinInfo.put(ECK0021C010CBSMsg.UPD_DTM_BF, updDtmSysid);
				
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIF_TRAT_DOI_UM, kepgKjnifTratDoiUm);			// 関電G個人情報取扱同意有無
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIF_TRAT_DOI_YMD, kepgKjnifTratDoiYmd);			// 関電G個人情報取扱同意年月日
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG, kepgKjniftFfg);						// 関電G個人情報提供不可フラグ
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG_CHG_YMD, kepgKjniftFfgChgYmd);			// 関電G個人情報提供不可フラグ変更年月日
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIFT_FFG_CHG_UWY_CD, kepgKjniftFfgChgUwyCd);		// 関電G個人情報提供不可フラグ変更受付方法コード
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIFT_JOKYO_CD, kepgKjniftJokyoCd);				// 関電G個人情報提供状況コード
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIFT_STAYMD, kepgKjniftStaYmd);					// 関電G個人情報提供開始年月日
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIFT_RSCD, kepgKjniftRscd);						// 関電G個人情報提供連携状態コード
				custKojinInfo.put(ECK0021C010CBSMsg.KEPG_KJNIFT_RSCD_CHG_YMD, kepgKjniftRscdChgYmd);		// 関電G個人情報提供連携状態コード変更年月日

				result = callECK0021C010ForClearContInfo(handle, param, opeDate, custKojinInfo);
				if (isSuccess(result))
				{
					updDtmSysid = getResultString(result, ECK0021C010CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
			// 会員種別がマスター会員(法人)の時
			else if (MMB_SBT_CD_MASTER_HOJIN.equals(memberSbtCd))
			{
				Map custHojinInfo = (Map)((HashMap)custInfo).clone();
				custHojinInfo.put(ECK0031C010CBSMsg.SYSID, sysid);
				custHojinInfo.put(ECK0031C010CBSMsg.UPD_DTM_BF, updDtmSysid);

				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIF_TRAT_DOI_UM, kepgKjnifTratDoiUm);			// 関電G個人情報取扱同意有無
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIF_TRAT_DOI_YMD, kepgKjnifTratDoiYmd);			// 関電G個人情報取扱同意年月日
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG, kepgKjniftFfg);						// 関電G個人情報提供不可フラグ
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG_CHG_YMD, kepgKjniftFfgChgYmd);			// 関電G個人情報提供不可フラグ変更年月日
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIFT_FFG_CHG_UWY_CD, kepgKjniftFfgChgUwyCd);		// 関電G個人情報提供不可フラグ変更受付方法コード
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIFT_JOKYO_CD, kepgKjniftJokyoCd);				// 関電G個人情報提供状況コード
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIFT_STAYMD, kepgKjniftStaYmd);					// 関電G個人情報提供開始年月日
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIFT_RSCD, kepgKjniftRscd);						// 関電G個人情報提供連携状態コード
				custHojinInfo.put(ECK0031C010CBSMsg.KEPG_KJNIFT_RSCD_CHG_YMD, kepgKjniftRscdChgYmd);		// 関電G個人情報提供連携状態コード変更年月日

				result = callECK0031C010ForClearContInfo(handle, param, opeDate, custHojinInfo);
				if (isSuccess(result))
				{
					updDtmSysid = getResultString(result, ECK0031C010CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}

		//***************************************************
		// 支払方法入力支援削除
		//***************************************************
		List paywayInsuportList = null;
		if (PMP_NORMAL_END.equals(returnCd))
		{
			Map tmpResult = delPaywayInsuportInfo(handle, param, "1", sysid);
			result = (Map)tmpResult.get("result");
			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
			paywayInsuportList = (List)tmpResult.get("payway_insuport_list");
		}

		//***************************************************
		// サービス契約(標準コンテンツ同意)解約
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			result = stdardContDsl(handle, param, svcKeiNo, updDtmSvcKei, opeDate);
			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}

		//***************************************************
		// 処理前のお客様グループ設定データを取得
		//***************************************************
		CAANMsg[] grpSetteList = null;
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別がファミリー会員(個人)、ファミリー会員(法人)の時のみ実行する
			if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_FAMILY_KOJIN, MMB_SBT_CD_FAMILY_HOJIN))
			{
				result = callECK0121B020(handle, param, "2", sysid);
				if (isSuccess(result))
				{
					CAANMsg[] dataList = getResultMsgList(result, ECK0121B020CBSMsg.ECK0121B020CBSMSG1LIST);
					if ((dataList != null) && (dataList.length > 0))
					{
						grpSetteList = dataList;
					}
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}

		//***************************************************
		// お客様退会
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別がファミリー会員(個人)、ファミリー会員(法人)、オープン会員の時のみ実行する
			if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_FAMILY_KOJIN, MMB_SBT_CD_FAMILY_HOJIN, MMB_SBT_CD_OPEN))
			{
				result = callECK0011C060(handle, param, sysid, opeDate, TAIKAI_RSN_CD_CUST_OWN, updDtmSysid);
				if (isSuccess(result))
				{
					updDtmSysid = getResultString(result, ECK0011C180CBSMsg.UPD_DTM);
					grpUpdDtm = getResultString(result, ECK0011C180CBSMsg.UPD_DTM);
					grpUpdOpeacnt = getResultString(result, ECK0011C180CBSMsg.UPD_OPEACNT);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}

		//***************************************************
		// 指示書登録
		//***************************************************
		// ST-2020-0000012 ADD START
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別がマスター会員(個人)、マスター会員(法人)の時のみ実行する
			if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_MASTER_KOJIN, MMB_SBT_CD_MASTER_HOJIN))
			{
				Map renkeiResult = getSecurityRenkeiTelnoSonota(handle, param, sysid);
				if (renkeiResult == null || renkeiResult.size() == 0)
				{
					// お客様スキーマ存在なし（SYSID存在チェックエラー）
					String errMsg = "標準コンテンツ解約CCでエラーが発生しました";
					throw new CCException(errMsg, new Exception(errMsg));
				}
				else
				{
					keishaTelno = (String)renkeiResult.get("outRenkeiTelno");
				}
			}
		}
		// ST-2020-0000012 ADD END
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 会員種別がマスター会員(個人)、マスター会員(法人)の時のみ実行する
			if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_MASTER_KOJIN, MMB_SBT_CD_MASTER_HOJIN))
			{
				// ニックネーム、連絡先メールアドレス連携用の指示書作成
				Map sjishoMap = createShijishoParamClearNknmRrksMlad(sysid);
				result = callECK0151D010Map(handle, param, sjishoMap);
			}

			// 標準コンテンツ規約同意フラグ連携用の指示書作成
			if (isSuccess(result))
			{
				// 会員種別がマスター会員(個人)、マスター会員(法人)の時
				if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_MASTER_KOJIN, MMB_SBT_CD_MASTER_HOJIN))
				{
					// 「標準コンテンツ未同意」用のパラメータ作成
					// ANK-3706-00-00 MOD START
					//Map sjishoMap = createShijishoParamContMidoui(sysid);
					Map sjishoMap = createShijishoParamContMidoui(sysid, keishaTelno);
					// ANK-3706-00-00 MOD END

					// 契約者タイプコードが 保守用の時はeoID、パスワード(初期化データ)も連携
					if (KEISHA_TYPE_CD_MNT.equals(keishaTypeCd))
					{
						sjishoMap = createShijishoParamEoidShkka(sjishoMap, shkEoid, shkEoidPwd);
					}
					result = callECK0151D010Map(handle, param, sjishoMap);
				}
			}

			// 会員情報の削除連携用の指示書作成
			if (isSuccess(result))
			{
				// 会員種別がファミリー会員(個人)、ファミリー会員(法人)、オープン会員の時のみ実行する
				if (JCKBPCommon.inArray(memberSbtCd, MMB_SBT_CD_FAMILY_KOJIN, MMB_SBT_CD_FAMILY_HOJIN, MMB_SBT_CD_OPEN))
				{
					Map sjishoMap = createShijishoParamDelMmb(sysid);
					result = callECK0151D010Map(handle, param, sjishoMap);
				}
			}

			// グループ情報(無効データ)連携用の指示書作成
			if (isSuccess(result))
			{
				if (grpSetteList != null)
				{
					for (CAANMsg grpSetteInfo : grpSetteList) {
						String grpSbtCd = grpSetteInfo.getString(ECK0121B020CBSMsg1List.GRP_SBT_CD);
						grpLeaderSysid = grpSetteInfo.getString(ECK0121B020CBSMsg1List.GRP_LEADER_SYSID);
						String addDtm = grpSetteInfo.getString(ECK0121B020CBSMsg1List.ADD_DTM);
						String addOpeacnt = grpSetteInfo.getString(ECK0121B020CBSMsg1List.ADD_OPEACNT);
						String updDtm = grpUpdDtm;
						String updOpeacnt = grpUpdOpeacnt;
						Map<String, Object> grpAddMap = createShijishoParamGrpDel(sysid, grpLeaderSysid, grpSbtCd, addDtm, addOpeacnt, updDtm, updOpeacnt);
						result = callECK0151D010Map(handle, param, grpAddMap);
					}
				}
			}

			// 支払方法入力支援情報(無効データ)連携用用の指示書作成
			if (isSuccess(result))
			{
				List sjishoList = createShijishoParamDelPaywayInsup(sysid, paywayInsuportList);
				if (sjishoList.size() > 0)
				{
					result = callECK0151D010List(handle, param, sjishoList);
				}
			}

			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}

		//***************************************************
		// CCMG連携
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			boolean res = requestCcmgApiAllDsl(handle, param, sysid, sysid, PMP_CCMG_RENKEI_UPD_NM);
			if (!res)
			{
				returnCd = PMP_ERR_SYSTEM;   // その他のエラー
			}
		}

		//***************************************************
		// 返却パラメータ設定
		//***************************************************

		// 最後に実行した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(CKSV9026_CKSV9026OP_CKSV902601CC.RETURN_CD, returnCd);
		resultMap.put(CKSV9026_CKSV9026OP_CKSV902601CC.CK_UPD_DTM_RES, lastCkUpdDtm); // 最新更新日時(お客様)
		resultMap.put(CKSV9026_CKSV9026OP_CKSV902601CC.KK_UPD_DTM_RES, lastKkUpdDtm); // 最新更新日時(サービス契約)
		resultMap.put(CKSV9026_CKSV9026OP_CKSV902601CC.CONT_CUST_NM, contCustNm); // コンテンツお客様名
		resultMap.put(CKSV9026_CKSV9026OP_CKSV902601CC.RRKS_MLAD, mlad);          // 連絡先メールアドレス
		setResultUserData(param, fixedText, resultMap);

		//*************************************************
		// 処理結果の判定
		//*************************************************
		if (isError(result))
		{
			String errMsg = "標準コンテンツ解約CCでエラーが発生しました)";
			throw new CCException(errMsg, new Exception(errMsg));
		}

		return param;
	}

	/**
	 * ニックネーム、連絡先メールアドレスクリア用の指示書パラメータ作成。<br />
	 * @param sysid
	 * @return 指示書登録用パラメータ
	 */
	private Map<String, Object> createShijishoParamClearNknmRrksMlad(String sysid)
	{
		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_CLEAR);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_3, sysid);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_5, SJISHO_PARAM_CLEAR_FIELD);
		// ANK-2987-08-00 2016/11/07 DEL START
		//inMap.put(ECK0151D010CBSMsg.PARAMETER_7, SJISHO_PARAM_CLEAR_FIELD);
		// ANK-2987-08-00 2016/11/07 DEL END
		inMap.put(ECK0151D010CBSMsg.PARAMETER_19, JCCBPCommon.getSysDateTime());
		return inMap;
	}

	/**
	 * 標準コンテンツ規約同意フラグ(未同意)連携用の指示書パラメータ作成。<br />
	 * @param sysid
	 * @param keishaTelno 連携電話番号（契約者電話番号、コンテンツ電話番号等）
	 * @return 指示書登録用パラメータ
	 */
	// ANK-3706-00-00 MOD START
	//private Map<String, Object> createShijishoParamContMidoui(String sysid)
	private Map<String, Object> createShijishoParamContMidoui(String sysid, 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_12, "0");
		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;
	}

	/**
	 * eoID、パスワード(初期化データ)連携用の指示書パラメータ作成。<br />
	 * @param sjishoMap 指示書登録用パラメータ
	 * @param shkEoid 初期eoID
	 * @param shkEoidPwd 初期eoIDパスワード
	 * @return 指示書登録用パラメータ
	 */
	private Map<String, Object> createShijishoParamEoidShkka(Map<String, Object> sjishoMap, String shkEoid, String shkEoidPwd)
	{
		sjishoMap.put(ECK0151D010CBSMsg.PARAMETER_2, shkEoid);
		sjishoMap.put(ECK0151D010CBSMsg.PARAMETER_4, shkEoidPwd);
		return sjishoMap;
	}

	/**
	 * 会員情報の削除連携用の指示書パラメータ作成。<br />
	 * @param sysid SYSID
	 * @return 指示書登録用パラメータ
	 */
	private Map<String, Object> createShijishoParamDelMmb(String sysid)
	{
		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_DEL);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_19, JCCBPCommon.getSysDateTime());
		return inMap;
	}

	/**
	 * グループ削除用の指示書パラメータ作成。<br />
	 * @param sysid SYSID
	 * @param grpLeaderSysid グループリーダSYSID
	 * @param grpSbtCd グループ種別コード
	 * @param addDtm 登録年月日時分秒
	 * @param addOpeacnt 登録オペレータアカウント
	 * @param updDtm 更新年月日時分秒
	 * @param updOpeacnt 更新オペレータアカウント
	 * @return 指示書登録用パラメータ
	 */
	private Map<String, Object> createShijishoParamGrpDel(String sysid, String grpLeaderSysid, String grpSbtCd, String addDtm, String addOpeacnt, String updDtm, String updOpeacnt)
	{
		Map<String, Object> inMap = new HashMap<String, Object>();
		inMap.put(ECK0151D010CBSMsg.TRN_CD, SJISHO_TRN_CD_REPLICA_API);
		inMap.put(ECK0151D010CBSMsg.TRGT_TABLE_ID, "TNM00030");
		inMap.put(ECK0151D010CBSMsg.ERR_CNT, "0");
		inMap.put(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid);
		inMap.put(ECK0151D010CBSMsg.RSLT_FLG, "0");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_YK_CNT, "10");
		inMap.put(ECK0151D010CBSMsg.PARAMETER_1, grpSbtCd);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_2, grpLeaderSysid);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_3, sysid);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_4, AXM_YK_MK_FLG); 
		inMap.put(ECK0151D010CBSMsg.PARAMETER_5, addDtm);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_6, addOpeacnt);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_7, null);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_8, updDtm);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_9, updOpeacnt);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_10, null);
		return inMap;
	}


	/**
	 * 支払い方法入力支援(無効データ)連携用の指示書パラメータ作成。<br />
	 * ※論理削除の為、"TNM00060_D" でなく "TNM00060" かつ 無効フラグを使用。<br />
	 * @param sysid SYSID
	 * @param paywayInsupList 支払い方法入力支援リスト
	 * @return 指示書登録用パラメータリスト
	 */
	@SuppressWarnings("unchecked")
	private List<Map> createShijishoParamDelPaywayInsup(String sysid, List<Map> paywayInsupList)
	{
		List<Map> list = new ArrayList<Map>();
		if (paywayInsupList != null)
		{
			for (Map rec : paywayInsupList) {
				Map<String, Object> inMap = new HashMap<String, Object>();
				inMap.put(ECK0151D010CBSMsg.TRN_CD, SJISHO_TRN_CD_REPLICA_API);
				inMap.put(ECK0151D010CBSMsg.TRGT_TABLE_ID, "TNM00060");
				inMap.put(ECK0151D010CBSMsg.ERR_CNT, "0");
				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, (String)rec.get("payway_input_shien_cd"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_3, (String)rec.get("tsyrn_pay_seq"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_4, (String)rec.get("isp_kssai_svc_kei_no"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_5, (String)rec.get("crecard_id"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_6, (String)rec.get("mk_flg"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_7, (String)rec.get("add_dtm"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_8, (String)rec.get("add_opeacnt"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_9, null);
				inMap.put(ECK0151D010CBSMsg.PARAMETER_10, (String)rec.get("upd_dtm"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_11, (String)rec.get("upd_opeacnt"));
				inMap.put(ECK0151D010CBSMsg.PARAMETER_12, null);
				inMap.put(ECK0151D010CBSMsg.PARAMETER_13, (String)rec.get("tokusoku_stat"));
				list.add(inMap);
			}
		}
		return list;
	}

	/**
	 * 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);
	}
}
