/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCKSV902501CC
*   ソースファイル名：JCKSV902501CC.java
*   作成者          ：富士通
*   日付            ：2011年12月20日
*＜機能概要＞
*  お客様情報を変更する。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/12/20   FJ）三浦    新規作成
*   v5.00.00    2013/02/08   FJ）関      【ST1-2013-0000284】最終更新日時チェックを削除
*   v8.00.00    2014/03/25   FJ）山口    【ANK-1962-00-00】S-IF入力項目変更対応
*   v8.00.01    2014/06/11   FJ）窪田    OM-2014-0002141対応
*   v37.00.00   2018/04/12   FJ）岩本    【ANK-3326-00-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.01   2020/03/13   FJ) 三原    【ST-2020-0000013】CMPから電話番号を変更をしたら指示書が出ない
**********************************************************************/

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.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.CKSV9025_CKSV9025OP_CKSV902501CC;
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.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
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.ECK0011C100CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0021C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0031C010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201B004CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0201E010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECKA9020001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;

/**
 * お客様情報を変更する。
 * <BR>
 * @author 富士通
 */
public class JCKSV902501CC 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 workDiv = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.WORK_DIV);
		String sysid = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.SYSID);
		String sei = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.SEI);
		String nm = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.NM);
		String kanaSei = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.KANA_SEI);
		String kanaNm = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.KANA_NM);
		String sex = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.SEX);
		String pcd = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.PCD);
		String adStateCity = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.AD_STATE_CITY);
		String adOther = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.AD_OTHER);
		String adMansion = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.AD_MANSION);
		String telno = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.TELNO);
		String birthd = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.BIRTHD);
		String pwdReminderQsCd = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.PWD_REMINDER_QS_CD);
		String pwdReminderAns = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.PWD_REMINDER_ANS);
		String nkname = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.NKNAME);
		//String ckUpdDtm = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.CK_UPD_DTM);
		//String kkUpdDtm = (String)inMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.KK_UPD_DTM);

		// リターンコード初期化
		String returnCd = PMP_NORMAL_END;

		// 運用日付
		String opeDate = JCCBPCommon.getOpeDate(null);
		
		//***************************************************
		// 内部で使用する変数の初期化
		//***************************************************
		String lastCustUpdDtm = null;
		String contCustSexCd = null;
		String contCustBirthd = null;
		String contTelno = null;
		String rrksNoContTelno = null;
		String memberSbtCd = null;
		String nowPwdReminderQsCd = null;
		String nowPwdReminderAns = null; 
		String nowNkname = null;
		String mlad = null;
		String nknameChgeYmd = 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-3814-00-00 DEL START
		// ANK-3706-00-00 ADD START
		//String keishaTelno = "";
		// ANK-3706-00-00 ADD END
		// ANK-3814-00-00 DEL END
		// ST-2020-0000013 ADD START
		// 連絡先電話番号（初期値設定）
		String contentRrksTelno = ""; 
		// ST-2020-0000013 ADD END
		
		//***************************************************
		// PMP連携用排他制御
		//***************************************************
		Map result = callECKA9020001(handle, param, sysid, "1");
		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);
				lastCustUpdDtm = chkCkUpdDtm;
				if (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;   // その他エラー
			}
		}
		
		//***************************************************
		// お客様情報取得
		//***************************************************
		Map<String, Object> custInfo = null;
		// 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))
		{
			result = callECK0011B050(handle, param, "1", sysid);
			if (isSuccess(result))
			{
				CAANMsg[] dataList = getResultMsgList(result, ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST);
				if ((null == dataList) || (0 == dataList.length))
				{
					returnCd = PMP_ERR_NODATA;   // データなし
				}
				else
				{
					custInfo = copyMsgToMap(dataList[0], ECK0011B050CBSMsg1List.class, ECK0011B050CBSMsg1List.class);
					String mapKeyPre = ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST + "[0].";
					contCustSexCd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.CONT_CUST_SEX_CD);
					contCustBirthd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.CONT_CUST_BIRTHD);
					memberSbtCd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.MEMBER_SBT_CD);
					nowPwdReminderQsCd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.PWD_REMINDER_QS_CD);
					nowPwdReminderAns = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.PWD_REMINDER_ANS); 
					nowNkname = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.NKNAME);
					mlad = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.MLAD);
					nknameChgeYmd = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.NKNAME_CHGE_YMD);
					
					contTelno = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.CONT_TELNO);
					rrksNoContTelno = getResultString(result, mapKeyPre + ECK0011B050CBSMsg1List.RRKS_NO_CONT_TELNO);
					// 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);
					wkSijishoMap.put(ECK0011B050CBSMsg1List.KEISHA_TELNO, wkTelno);
					wkSijishoMap.put(ECK0011B050CBSMsg1List.MEMBER_SBT_CD, memberSbtCd);
					// ANK-3814-00-00 ADD END
				}
			}
			else
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}
		
		//***************************************************
		// 同一人チェック
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if("0".equals(workDiv))
			{
				if (!checkSameMmb(handle, param, kanaSei + "　" + kanaNm, birthd, mlad, sysid))
				{
					returnCd = PMP_ERR_MMB_DUP;   // フリガナ氏名、生年月日、連絡用アドレス重複エラー
				}
			}
		}
		
		//***************************************************
		// ニックネーム更新日チェック
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if("1".equals(workDiv))
			{
				if (!checkUpdFailPrd(handle, param, opeDate, WORK_PARAM_ID_NKNM_CHGFAIL_DAYS, nknameChgeYmd))
				{
					returnCd = PMP_ERR_NKNM_TERM;   // ニックネーム規定の期間以内の更新エラー
				}
			}
			
		}
		
		//***************************************************
		// ニックネーム重複チェック
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if("1".equals(workDiv))
			{
				if (!checkDupNkName(handle, param, nkname))
				{
					returnCd = PMP_ERR_NKNM_DUP;   // ニックネーム重複エラー
				}
			}
		}
// ANK-3326-00-00 ADD START
		//***************************************************
		// 仮登録中チェック
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if ("1".equals(workDiv) || "2".equals(workDiv) || "3".equals(workDiv))
			{
				// 異動予約一覧照会SC呼出
				result = callEKK1681B001(handle, param, "1", "00089", "031", "04", sysid);
				if (isSuccess(result))
				{
					CAANMsg[] dataList = getResultMsgList(result, EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
					if (dataList != null && dataList.length > 0)
					{
						//返却パラメータの設定の処理を行う
						returnCd = PMP_ERR_KARI_ADD_CHU;   // 仮登録中エラー
					}
				}
				else {
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
// ANK-3326-00-00 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;   // その他のエラー
			}
		}
		
		// ST-2020-0000013 ADD START
		//***************************************************
		//連絡先履歴一覧照会(SYSID)
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			// 基準年月日時分秒＝運用日付
			String base_dtm = JCCBPCommon.getOpeDateTimeStamp(null);
			// 連絡先コード ※条件無しのためnullセット
			String rrks_cd = null;
			// 連絡方法コード＝"003"：電話番号
			String rrk_way_cd = JKKStrConst.CD00790_TELNO;
			// 連絡先種別コード＝"1"：自宅
			String rrks_sbt_cd = JKKStrConst.CD00254_HOME;
			// 連絡先分類コード＝"1"：コンテンツ系連絡先
			String rrks_bunrui_cd = JKKStrConst.CD00871_CONT_RRS;
			Map<?, ?> paramMap2 = callECK0201B004(handle, param, JPCModelConstant.FUNC_CD_1, sysid, base_dtm, rrks_cd, rrk_way_cd, rrks_sbt_cd, rrks_bunrui_cd);
			
			if (isSuccess(paramMap2))
			{
				CAANMsg[] dataList1 = getResultMsgList(paramMap2, ECK0201B004CBSMsg.ECK0201B004CBSMSG1LIST);
				if (dataList1 != null && dataList1.length != 0)
				{
					// 結果マップを取得
					Map<?, ?> wMap = copyMsgToMap(dataList1[0], ECK0201B004CBSMsg1List.class, ECK0201B004CBSMsg1List.class);
					if (wMap != null && wMap.size() > 0)
					{
						String wkTelNo = (String)wMap.get(ECK0201B004CBSMsg1List.TELNO);
						if (!JKKStringUtil.isNullBlank(wkTelNo))
						{
							// 電話番号
							contentRrksTelno = wkTelNo;
						}
					}
				}
			}
		}
		// ST-2020-0000013 ADD END
		
		//***************************************************
		//お客様内容変更
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if("0".equals(workDiv) && !"20".equals(memberSbtCd))
			{
				Map custKojinInfo = (Map)((HashMap)custInfo).clone();
				custKojinInfo.put(ECK0021C010CBSMsg.SYSID, sysid);										// SYSID
				custKojinInfo.put(ECK0021C010CBSMsg.UPD_DTM_BF, lastCustUpdDtm);						// 更新年月日時分秒(更新前)
				custKojinInfo.put(ECK0021C010CBSMsg.RSV_APLY_YMD, opeDate);		// 予約適用年月日
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_CUST_NM, sei + "　" + nm);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_CUST_KANA, kanaSei + "　" + kanaNm);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_CUST_SEX_CD, sex);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_CUST_BIRTHD, birthd);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_PCD, pcd);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_BNCHIGO, adStateCity + adOther);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_ADRTTM, adMansion);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_AD_BNKT_STA_PST, String.valueOf(adStateCity.length() + 1));
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_AD_CD, null);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_STATE_NM, null);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_CITY_NM, null);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_OAZTSU_NM, null);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_AZCHO_NM, null);
				custKojinInfo.put(ECK0021C010CBSMsg.CONT_ADRRM, null);

				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個人情報提供連携状態コード変更年月日
				
				// お客様<個人>内容変更SC呼出
				result = callECK0021C010(handle, param, custKojinInfo);
				if (isSuccess(result))
				{
					lastCustUpdDtm = getResultString(result, ECK0021C010CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
			else if("0".equals(workDiv) && "20".equals(memberSbtCd))
			{
				Map custHojinInfo = (Map)((HashMap)custInfo).clone();
				custHojinInfo.put(ECK0031C010CBSMsg.SYSID, sysid);									// SYSID
				custHojinInfo.put(ECK0031C010CBSMsg.UPD_DTM_BF, lastCustUpdDtm);					// 更新年月日時分秒(更新前)
				custHojinInfo.put(ECK0031C010CBSMsg.RSV_APLY_YMD, opeDate);	// 予約適用年月日
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_CUST_NM, sei + "　" + nm);					// コンテンツお客様名
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_CUST_KANA, kanaSei + "　" + kanaNm);		// コンテンツお客様カナ名
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_CUST_SEX_CD, sex);							// コンテンツお客様性別コード
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_CUST_BIRTHD, birthd);						// コンテンツお客様生年月日
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_PCD, pcd);									// コンテンツ郵便番号
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_BNCHIGO, adStateCity + adOther);			// コンテンツ番地号
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_ADRTTM, adMansion);						// コンテンツ住所補記・建物名
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_AD_BNKT_STA_PST,
													String.valueOf(adStateCity.length() + 1));		// コンテンツ住所分割開始位置
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_AD_CD, null);
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_STATE_NM, null);
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_CITY_NM, null);
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_OAZTSU_NM, null);
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_AZCHO_NM, null);
				custHojinInfo.put(ECK0031C010CBSMsg.CONT_ADRRM, null);

				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個人情報提供連携状態コード変更年月日

				// お客様<法人>内容変更SC呼出
				result = callECK0031C010(handle, param, custHojinInfo);
				if (isSuccess(result))
				{
					lastCustUpdDtm = getResultString(result, ECK0031C010CBSMsg.UPD_DTM);
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		//***************************************************
		// 連絡先（電話番号）登録更新
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			//業務区分が0の場合
			if(("0".equals(workDiv)))
			{
				//リクエストパラメータの電話番号が設定されている場合
				if(!JCKBPCommon.isNullOrBlank(telno))
				{
					//登録されている電話番号とリクエストパラメータの電話番号が同一でない場合
					if(contTelno == null || !contTelno.equals(telno))
					{
						Map tmpResult = addUpdRrksTelno(handle, param, opeDate, sysid, telno, lastCustUpdDtm);
						result = (Map)tmpResult.get("result");
						if (isSuccess(result))
						{
							lastCustUpdDtm = (String)tmpResult.get("upd_dtm_sysid");
						}
						else
						{
							returnCd = PMP_ERR_OTHER;   // その他のエラー
						}
					}
				}
				//リクエストパラメータの電話番号が設定されていない場合で連絡先番号（コンテンツ電話番号）が設定されている場合
				else if(!JCKBPCommon.isNullOrBlank(rrksNoContTelno))
				{
					//result = callECK0201E010(handle, param, rrksNoContTelno, geneAddDtmContTelno, lastCustUpdDtm);
					result = delRrks(handle, param, rrksNoContTelno);
					if (isSuccess(result))
					{
						//更新時の更新年月日時分秒を取得する。
						lastCustUpdDtm = getResultString(result, ECK0201E010CBSMsg.UPD_DTM);
					}
					else
					{
						returnCd = PMP_ERR_OTHER;   // その他のエラー
					}
				}
				
			}
		}
		
		//***************************************************
		// ニックネーム変更
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			//業務区分が１の場合
			if("1".equals(workDiv))
			{
				Map tmpResult = chgNkNm(handle, param, opeDate, sysid, nkname, nowNkname, lastCustUpdDtm);
				result = (Map)tmpResult.get("result");
				if (isSuccess(result))
				{
					lastCustUpdDtm = (String)tmpResult.get("upd_dtm_sysid");
				}
				else
				{
					returnCd = PMP_ERR_OTHER;   // その他のエラー
				}
			}
		}
		
		//***************************************************
		// パスワードリマインダ変更
		//***************************************************
		if (PMP_NORMAL_END.equals(returnCd))
		{
			//業務区分が２または３の場合
			if("2".equals(workDiv) || "3".equals(workDiv))
			{
				// ANK-3706-00-00 ADD START
				// パスワードリマインダ用質問コード(pwdReminderQsCd)とパスワードリマインダ用回答(pwdReminderAns)がnullで入ることがあるため、
				// nullできた場合は""に置き換える
				if (pwdReminderQsCd == null)
				{
					pwdReminderQsCd = "";
				}
				if (pwdReminderAns == null)
				{
					pwdReminderAns = "";
				}
				
				// 現在のパスワードリマインダ用質問コード
				if (nowPwdReminderQsCd == null)
				{
					nowPwdReminderQsCd = "";
				}
				// 現在のパスワードリマインダ用回答
				if (nowPwdReminderAns == null)
				{
					nowPwdReminderAns = "";
				}
				// ANK-3706-00-00 ADD END
				if(!pwdReminderQsCd.equals(nowPwdReminderQsCd) || !pwdReminderAns.equals(nowPwdReminderAns))
				{
					result = callECK0011C100(handle, param, sysid, pwdReminderQsCd, pwdReminderAns, lastCustUpdDtm);
					if (isSuccess(result))
					{
						//更新時の更新年月日時分秒を取得する。
						lastCustUpdDtm = getResultString(result, ECK0011C100CBSMsg.UPD_DTM);
					}
					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
			
			// お客様情報変更CCの指示書作成
			boolean shijishoFlg = false;
			
			// ST-2020-0000013 MOD START
			// 業務区分が"0"、かつ、生年月日、性別、電話番号が変更されている場合、指示書を作成する。
			//if(("0".equals(workDiv) && (!birthd.equals(contCustBirthd) || !sex.equals(contCustSexCd))))
			if(("0".equals(workDiv) && (!birthd.equals(contCustBirthd) || !sex.equals(contCustSexCd) || !contentRrksTelno.equals(keishaTelno))))
			// ST-2020-0000013 MOD END
			{
				shijishoFlg = true;
			}
			else if ("1".equals(workDiv) || "3".equals(workDiv))
			{
				shijishoFlg = true;
			}
			
			if (shijishoFlg)
			{
				// ANK-3706-00-00 MOD START
				//Map sjishoMap = createShijisho(inMap, opeDate, contCustBirthd, contCustSexCd);
				Map sjishoMap = createShijisho(inMap, opeDate, contCustBirthd, contCustSexCd, keishaTelno);
				// ANK-3706-00-00 MOD END
				result = callECK0151D010Map(handle, param, sjishoMap);
			}
			
			
			if (isError(result))
			{
				returnCd = PMP_ERR_OTHER;   // その他のエラー
			}
		}

		//***************************************************
		// 返却パラメータ設定
		//***************************************************

		// 最後に実行した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(CKSV9025_CKSV9025OP_CKSV902501CC.RETURN_CD, returnCd);
		resultMap.put(CKSV9025_CKSV9025OP_CKSV902501CC.CK_UPD_DTM_RES, lastCkUpdDtm); // 返却最新更新日時(お客様)
		resultMap.put(CKSV9025_CKSV9025OP_CKSV902501CC.KK_UPD_DTM_RES, lastKkUpdDtm); // 返却最新更新日時(サービス契約)
		setResultUserData(param, fixedText, resultMap);

		//*************************************************
		// 処理結果の判定
		//*************************************************
		if (isError(result))
		{
			String errMsg = "お客様情報変更CCでエラーが発生しました(リターンコード：" + returnCd + ")";
			throw new CCException(errMsg, new Exception(errMsg));
		}

		return param;
	}

	/**
	 * お客様情報変更用の指示書パラメータ作成。
	 * @param dateMap データマッ
	 * @param opeDate 運用日日付
	 * @param nowbirthd 誕生日
	 * @param nowSex 性別
	 * @param keishaTelno 連携電話番号（契約者電話番号、コンテンツ電話番号等）
	 * @return 指示書登録用パラメータ
	 * @throws Throwable
	 */
	// ANK-3706-00-00 MOD START
	//private Map<String, Object> createShijisho(Map<String, Object> dateMap, String opeDate, String nowbirthd, String nowSex) throws Throwable
	private Map<String, Object> createShijisho(Map<String, Object> dateMap, String opeDate, String nowbirthd, String nowSex, String keishaTelno) throws Throwable
	// ANK-3706-00-00 MOD END
	{
		String workDiv = (String)dateMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.WORK_DIV);
		String sysid = (String)dateMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.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_UPD_PART);
		inMap.put(ECK0151D010CBSMsg.PARAMETER_3, sysid);
		
		if("3".equals(workDiv))
		{
			inMap.put(ECK0151D010CBSMsg.PARAMETER_4, (String)dateMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.EOID_PW));
		}
		
		if("1".equals(workDiv))
		{
			inMap.put(ECK0151D010CBSMsg.PARAMETER_5, (String)dateMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.NKNAME));
		}
		
		if("0".equals(workDiv))
		{
			String birthd = (String)dateMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.BIRTHD);
			String sex = (String)dateMap.get(CKSV9025_CKSV9025OP_CKSV902501CC.SEX);
			
			//リクエストパラメータの生年月日と登録されている生年月日が違う場合
			if(!nowbirthd.equals(birthd))
			{
				inMap.put(ECK0151D010CBSMsg.PARAMETER_8, getAgeFlg(birthd, opeDate));
			}
			//リクエストパラメータの性別と登録されている性別が違う場合
			if(!nowSex.equals(sex))
			{
				inMap.put(ECK0151D010CBSMsg.PARAMETER_9, sex);
			}
		}

		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);
	}
}
