/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：CKA901SFLogic
*   ソースファイル名：CKA901SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年12月16日
*＜機能概要＞
*   名寄せ連携を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v6.00.00    2014/01/14   FJ）山口    【OM-2014-0000195】エスケープ処理修正
*   v17.00.00   2015/07/17   FJ) 山岡    【ANK-2557-00-00_PMP再構築対応】リクエスト、レスポンス時のログ出力を追加
*   v16.00.00   2014/09/14   FJ) 山岡    【ANK-2480-00-00】 新電力1-2　
*   v16.00.01   2014/10/05   FJ) 山岡    【IT1-2015-0000104】 　
*   v16.00.02   2014/10/07   FJ) 山岡    【IT1-2015-0000105】 　
*   v47.00.00   2019/11/08   FJ) 三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
* **********************************************************************/
package eo.web.webview.CKA901SF;

import static eo.common.constant.JCKStrConst.*;
import static eo.web.webview.common.JCKLcsApiCommonUtil.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.common.JCKWebCommon;
import eo.web.webview.common.JKKCommonConst;


import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

/**
 * 名寄せ連携
 * @author FJ
 *
 */
@SuppressWarnings("serial")
public class CKA901SFLogic extends JCCWebBusinessLogic
{
	/**
	 * 処理コードとサービスの対応表
	 */
	private static final Map<String, String> PROCESS_MAP = new HashMap<String, String>();

	/**
	 * サービスと必須入力エラーにする項目名の対応表
	 */
	private static final Map<String, String[]> REQUIRE_MAP = new HashMap<String, String[]>();

	/**
	 * サービスとドメイン(形式)、桁数エラー時の戻りコードの対応表
	 */
	private static final Map<String, String> DOMAIN_ERR_MAP = new HashMap<String, String>();

	// ANK-3706-00-00 ADD START
	/**
	 * パスワードリマインダチェック定義リスト
	 */
	private static final ArrayList<Object> PWD_REMINDER_CHECK_LIST = new ArrayList<Object>();
	// ANK-3706-00-00 ADD END

	/**
	 * 処理コードとサービスの対応表をセットする
	 */
	static
	{
		/**
		 * 処理コードとサービスの対応表をセットする
		 */
		PROCESS_MAP.put("01", "CKSV9002");

		/**
		 * 処理区分,業務区分ごとの必須入力項目の定義
		 */
		// ANK-3706-00-00 MOD START
		//REQUIRE_MAP.put("01,0", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "CONTACT_MAIL_ADDRESS", "PWD_REMINDER_QUESTION_CODE", "PWD_REMINDER_ANSWER", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN","DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER"});
		REQUIRE_MAP.put("01,0", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "CONTACT_MAIL_ADDRESS", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN","DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER"});
		// ANK-3706-00-00 MOD END
		// ANK-3706-00-00 MOD START
		//REQUIRE_MAP.put("01,1", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "FIRST_NAME", "SECOND_NAME", "FIRST_NAME_KANA", "SECOND_NAME_KANA", "GENDER", "ZIP_CODE", "ADDRESS1", "ADDRESS2", "DATE_OF_BIRTH", "CONTACT_MAIL_ADDRESS", "PWD_REMINDER_QUESTION_CODE", "PWD_REMINDER_ANSWER", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN", "DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER" });
		REQUIRE_MAP.put("01,1", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "FIRST_NAME", "SECOND_NAME", "FIRST_NAME_KANA", "SECOND_NAME_KANA", "GENDER", "ZIP_CODE", "ADDRESS1", "ADDRESS2", "DATE_OF_BIRTH", "CONTACT_MAIL_ADDRESS", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN", "DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER" });
		// ANK-3706-00-00 MOD END
		// ANK-3706-00-00 MOD START
		//REQUIRE_MAP.put("01,2", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "CONTACT_MAIL_ADDRESS", "CHANGE_PROC_MAILADDRESS", "PWD_REMINDER_QUESTION_CODE", "PWD_REMINDER_ANSWER", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN", "DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER", "URL"});
		REQUIRE_MAP.put("01,2", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "CONTACT_MAIL_ADDRESS", "CHANGE_PROC_MAILADDRESS", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN", "DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER", "URL"});
		// ANK-3706-00-00 MOD END
		// ANK-3706-00-00 MOD START
		//REQUIRE_MAP.put("01,3", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "FIRST_NAME", "SECOND_NAME", "FIRST_NAME_KANA", "SECOND_NAME_KANA", "GENDER", "ZIP_CODE", "ADDRESS1", "ADDRESS2", "DATE_OF_BIRTH", "CONTACT_MAIL_ADDRESS", "CHANGE_PROC_MAILADDRESS", "PWD_REMINDER_QUESTION_CODE", "PWD_REMINDER_ANSWER", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN", "DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER", "URL"});
		REQUIRE_MAP.put("01,3", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "EO_ID", "EO_ID_PASSWORD", "FIRST_NAME", "SECOND_NAME", "FIRST_NAME_KANA", "SECOND_NAME_KANA", "GENDER", "ZIP_CODE", "ADDRESS1", "ADDRESS2", "DATE_OF_BIRTH", "CONTACT_MAIL_ADDRESS", "CHANGE_PROC_MAILADDRESS", "OKYAKUSAMA_ID_ISP", "DST_UPDATE_TIMESTAMP_M00010_IN", "DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].OKYAKUSAMA_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].SERVICE_CONTRACT_ID", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].RECEPTION_DIV", "MAIL_SETTING_INFORMATION.MAIL_RECEPTION_SETTING_LIST[*].MAIL_RECEPTION_SETTINGS.MAIL_RECEPTION_SETTING[*].COLUMN_NUMBER", "URL"});
		// ANK-3706-00-00 MOD END
		REQUIRE_MAP.put("01,4", new String[]{"BUSINESS_DIV", "DST_SYS_ID", "ORG_SYS_ID", "DST_UPDATE_TIMESTAMP_M00010_IN", "DST_UPDATE_TIMESTAMP_M00280_IN", "ORG_UPDATE_TIMESTAMP_M00010_IN", "ORG_UPDATE_TIMESTAMP_M00280_IN"});

		/**
		 * 単項目、単項目関連チェックエラー時の戻りコード
		 */
		DOMAIN_ERR_MAP.put("01", "92");
		
		// ANK-3706-00-00 ADD START
		/**
		 * パスワードリマインダ関連チェックをする処理の「処理区分」と「業務区分」を設定する
		 */
		PWD_REMINDER_CHECK_LIST.add("01,0");	// 名寄せ	未移行→マスター会員(個人)(ﾒｰﾙｱﾄﾞﾚｽ変更ﾒｰﾙなし)
		PWD_REMINDER_CHECK_LIST.add("01,1");	// 名寄せ	未移行→マスター会員(法人)(ﾒｰﾙｱﾄﾞﾚｽ変更ﾒｰﾙなし)
		PWD_REMINDER_CHECK_LIST.add("01,2");	// 名寄せ	未移行→マスター会員(個人)(ﾒｰﾙｱﾄﾞﾚｽ変更ﾒｰﾙあり)
		PWD_REMINDER_CHECK_LIST.add("01,3");	// 名寄せ	未移行→マスター会員(法人)(ﾒｰﾙｱﾄﾞﾚｽ変更ﾒｰﾙあり)
		// ANK-3706-00-00 ADD END

	}

	/** AxM会員情報更新依頼サービスID */
	private static final String axmRequestService = "CKSV9001";

	/** PMP連携用メール送信サービスID */
	private static final String mailSendService   = "CKSV9049";

	/** PMP連携用CCMGAPI呼出サービスID */
	private static final String ccmgApiService    = "CKSV9051";

	//* 20150914 ANK-2480-00-00対応　ADD START *//
	/** eo電気契約お客様変更サービスID*/
	private static final String getEodkService = "CKSV9055";
	//* 20150914 ANK-2480-00-00対応　ADD END *//
	
	//* 20151007 IT1-2015-0000105 ADD START *//
	/** サービス契約一覧照会（料金グループコード）サービスID */
	private static final String getEoService = "CKSV9056";
	//* 20151007 IT1-2015-0000105 ADD END *//
	
	/**
	 * APIリクエスト時
	 * 
	 * @return boolean 処理結果
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean action_Init() throws Exception
	{

		DEBUG_LOG.info("action_Init Start!");

		X31SDataBeanAccess bean = getServiceFormBean();

		// 例外退避用(ログ出力用)
		Throwable exception = null;

		// 戻りコード
		String returnCd = null;

		// 処理区分
		String processDiv = null;

		// 業務区分
		String businessDiv = null;

		// 受信データ(Map)
		Map requestMap = null;

		// 更新サービスIFの実行結果
		HashMap resultMapUpd = null;
		
		// 返却用マップの作成と初期化
		Map returnMap    = createReturnMap();
		
		//* 20150914 ANK-2480-00-00対応　ADD START *//
		//サービス契約一覧照会マップ
		Map resultMapGet = null;
		//* 20150914 ANK-2480-00-00対応　ADD END *//
		
		//* 20151007 IT1-2015-0000105 ADD START   *//
		HashMap<String, Object>  MapCKSV9056SC = null;
		//* 20151007 IT1-2015-0000105 ADD END   *//
		
		// 業務規制チェック
		if (!checkRegulationForUpdateApi(this))
		{
			return setErrorXml(bean, returnMap, PMP_ERR_SYSTEM);
		}

		//************************************************************
		// 更新サービス呼び出し
		//************************************************************
		boolean updErr = false;
		try
		{
			//************************************************************
			// リクエストデータ取得
			//************************************************************
			requestMap = (Map)getReceiveXmlFromPmp(getSessionId()).get("LKA12020_RECEIVE");

			//************************************************************
			// 不正リクエスト/必須入力チェック
			//************************************************************
			String checkReturnCd = checkRequest(REQUIRE_MAP, requestMap);
			if (checkReturnCd != null)
			{
				return setErrorXml(bean, returnMap, checkReturnCd);
			}
			// ANK-3706-00-00 ADD START
			//************************************************************
			// パスワードリマインダ関連チェック判定処理
			//************************************************************
			// パスワードリマインダ関連チェック判定処理のリターンコード
			String pwdReminderCheckReturnCd = pwdReminderKnrnCheck(PWD_REMINDER_CHECK_LIST, requestMap);
			// エラーの場合
			if (pwdReminderCheckReturnCd != null)
			{
				return setErrorXml(bean, returnMap, pwdReminderCheckReturnCd);
			}
			// ANK-3706-00-00 ADD END

			//************************************************************
			// eoIDパスワードの変換処理(エスケープ文字を退避しているので戻す)
			//************************************************************
			String eoIdPassword = (String)JCKWebCommon.getObjFromMap(requestMap, "EO_ID_PASSWORD");
			if (eoIdPassword != null)
			{
				requestMap.put("EO_ID_PASSWORD", escapeCdChenge(eoIdPassword));
			}
			//************************************************************
			// ニックネームの変換処理(エスケープ文字を退避しているので戻す)
			//************************************************************
			String nickName = (String)JCKWebCommon.getObjFromMap(requestMap, "NICKNAME");
			if (nickName != null)
			{
				requestMap.put("NICKNAME", escapeCdChenge(nickName));
			}

			//************************************************************
			// 更新サービスIDの取得
			//************************************************************
			processDiv = (String)JCKWebCommon.getObjFromMap(requestMap, "PROCESS_DIV");
			String serviceId = PROCESS_MAP.get(processDiv);


			//************************************************************
			// 業務区分の取得
			//************************************************************
			businessDiv = (String)JCKWebCommon.getObjFromMap(requestMap, "BUSINESS_DIV");
		
			
			//* 20151007 IT1-2015-0000105 ADD START   *//
			//************************************************************
			// サービス契約一覧照会（料金グループコード）サービス呼び出し
			//************************************************************
			
			HashMap scparamMap = new HashMap();
			HashMap scinputMap = new HashMap();
			HashMap resultMapSc = new HashMap();

			// サービスへのデータセット
			scparamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, getEoService);
			scparamMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, getEoService + "OP");

			//パラメータの設定
			createCksv9056scMap(getEoService ,"1" , requestMap, scinputMap);
			
			// サービス契約一覧照会（料金グループコード）SC呼び出し
			callService(this, scparamMap, scinputMap, resultMapSc);
			
			//取得結果の設定
			MapCKSV9056SC = (HashMap<String, Object>) resultMapSc.get("CKSV9056SC");
			
			//* 20151007 IT1-2015-0000105 ADD END   *//

			//************************************************************
			// 更新サービス呼び出し
			//************************************************************
			HashMap paramMap = new HashMap();
			HashMap inputMap = new HashMap();
			resultMapUpd = new HashMap();

			// サービスへのデータセット
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, serviceId);
			paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, serviceId + "OP");

			// サービスへのパラメータ作成
			createServiceMap(processDiv ,businessDiv , requestMap, inputMap);

			// サービスの呼出
			X31CMessageResult msgResult = callService(this, paramMap, inputMap, resultMapUpd);
			if(msgResult != null)
			{
				String errReturnCd = getReturnCdForSvcErr(DOMAIN_ERR_MAP, processDiv, msgResult, null);
				if (errReturnCd != null){
					return setErrorXml(bean, returnMap, errReturnCd);
				}
			}

			// サービスが返却したリターンコードを取得
			returnCd = (String)JCKWebCommon.getObjFromMap(resultMapUpd, serviceId + "01CC.return_cd");
			updErr = (PMP_NORMAL_END.equals(returnCd)) ? false : true;

		}
		catch (Exception e)
		{
			exception = e;
			updErr = true;
		}

		//************************************************************
		// CCMG API連携サービス呼び出し
		//************************************************************
		boolean ccmgErr = false;
		try {
			if (!updErr)
			{
				// 名寄せの実行結果から「CCMG連携実行要否＿結果」を取得
				String ccmgRunYh = (String)JCKWebCommon.getObjFromMap(resultMapUpd, "CKSV900201CC.ccmg_run_yh_res");

				if (PMP_CCMG_RENKEI_RUN_YO.equals(ccmgRunYh))
				{
					HashMap paramMap4Ccmg = new HashMap();
					HashMap inputMap4Ccmg = new HashMap();
					HashMap outputMap4Ccmg = new HashMap();

					// サービスへのデータセット
					paramMap4Ccmg.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, ccmgApiService);
					paramMap4Ccmg.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, ccmgApiService + "OP");

					// CCMG API呼出サービスへのパラメータ作成
					createServiceMap4Ccmg(processDiv, resultMapUpd, requestMap, inputMap4Ccmg);

					// サービスの呼出
					X31CMessageResult msgResult4Ccmg = callService(this, paramMap4Ccmg, inputMap4Ccmg, outputMap4Ccmg);

					// エラー処理
					String returnCdCcmg = (String)JCKWebCommon.getObjFromMap(outputMap4Ccmg, "CKSV905101CC.return_cd");
					if ((msgResult4Ccmg != null)||(!PMP_NORMAL_END.equals(returnCdCcmg)))
					{
						ccmgErr = true;
					}
				}
			}
		} catch (Exception e) {
			exception = e;
			ccmgErr = true;
		}

		//************************************************************
		// メール送信サービス呼び出し
		//************************************************************
		boolean mailErr = false;
		try {
			if (!updErr)
			{
				if ("01".equals(processDiv) && ("2".equals(businessDiv) || "3".equals(businessDiv)))
				{
					HashMap paramMap4Mail = new HashMap();
					HashMap inputMap4Mail = new HashMap();
					HashMap outputMap4Mail = new HashMap();

					// サービスへのデータセット
					paramMap4Mail.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, mailSendService);
					paramMap4Mail.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, mailSendService + "OP");

					// メール送信サービスへのパラメータ作成
					createServiceMap4Mail(processDiv, resultMapUpd, requestMap, inputMap4Mail);

					// サービスの呼出
					X31CMessageResult msgResult4Mail = callService(this, paramMap4Mail, inputMap4Mail, outputMap4Mail);

					// エラー処理
					String returnCdMail = (String)JCKWebCommon.getObjFromMap(outputMap4Mail, "CKSV904901CC.return_cd");
					if ((msgResult4Mail != null)||(!PMP_NORMAL_END.equals(returnCdMail)))
					{
						mailErr = true;
					}
				}
			}
		} catch (Exception e) {
			exception = e;
			mailErr = true;
		}

		//************************************************************
		// 会員情報更新依頼サービス呼び出し（名寄せされる会員分）
		//************************************************************
		boolean axmErr = false;
		try
		{
			if (!updErr)
			{
	
				HashMap paramMap4AxmReq = new HashMap();
				HashMap inputMap4AxmReq = new HashMap();
				HashMap outputMap4AxmReq = new HashMap();

				// サービスへのデータセット
				paramMap4AxmReq.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, axmRequestService);
				paramMap4AxmReq.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, axmRequestService + "OP");

				// 会員情報更新依頼サービスへのパラメータ作成
				createServiceMap4AxmReq(axmRequestService , "0", requestMap, inputMap4AxmReq);

				// サービスの呼出
				X31CMessageResult msgResult4AxmReq = callService(this, paramMap4AxmReq, inputMap4AxmReq, outputMap4AxmReq);

				// エラー処理
				String errFlgAxm = (String)JCKWebCommon.getObjFromMap(outputMap4AxmReq, "CKSV900101CC.err_flg");
				if ((msgResult4AxmReq != null)||(!"0".equals(errFlgAxm)))
				{
					axmErr = true;
				}
			}
		}
		catch (Exception e)
		{
			exception = e;
			axmErr = true;
		}

		//************************************************************
		// 会員情報更新依頼サービス呼び出し（名寄せ先会員分）
		//************************************************************
		try
		{
			if (!updErr && !axmErr)
			{
	
				axmErr = false;
				HashMap paramMap4AxmReq = new HashMap();
				HashMap inputMap4AxmReq = new HashMap();
				HashMap outputMap4AxmReq = new HashMap();

				// サービスへのデータセット
				paramMap4AxmReq.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, axmRequestService);
				paramMap4AxmReq.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, axmRequestService + "OP");

				// 会員情報更新依頼サービスへのパラメータ作成
				createServiceMap4AxmReq(axmRequestService , "1", requestMap, inputMap4AxmReq);

				// サービスの呼出
				X31CMessageResult msgResult4AxmReq = callService(this, paramMap4AxmReq, inputMap4AxmReq, outputMap4AxmReq);

				// エラー処理
				String errFlgAxm = (String)JCKWebCommon.getObjFromMap(outputMap4AxmReq, "CKSV900101CC.err_flg");
				if ((msgResult4AxmReq != null)||(!"0".equals(errFlgAxm)))
				{
					axmErr = true;
				}
			}
		}
		catch (Exception e)
		{
			exception = e;
			axmErr = true;
		}
		
		//* 20150914 ANK-2480-00-00対応　ADD START *//
		//************************************************************
		// eo電気契約お客様変更
		//************************************************************
		try
		{
			if (!updErr && !axmErr)
			{
				//* 20151007 IT1-2015-0000105  MOD START *//
				
				List inputlist = (List)MapCKSV9056SC.get("EKK0081B016CBSMsg1List");

				int n = 0;
				
				//EKK0081B016CBSMsg1Listのデータが存在する場合、サービスを呼出
				if( n < inputlist.size())
				{
					HashMap paramMap = new HashMap();
					HashMap inputMap = new HashMap();
					resultMapGet = new HashMap();
	
					// サービスへのデータセット
					paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, getEodkService);
					paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, getEodkService + "OP");
	
					// eo電気契約お客様変更サービスへのパラメータ作成
					createeoGetServiceMap4AxmReq(getEodkService ,"1" , requestMap, inputMap ,MapCKSV9056SC);
					
					// サービスの呼出
					X31CMessageResult msgResult = callService(this, paramMap, inputMap, resultMapGet);
				}
				//* 20151007 IT1-2015-0000105  MOD END  *//

//* IT1-2015-0000104  20151005 DEL START *//				
				//エラー処理
//				String errFlgAxm = (String)JCKWebCommon.getObjFromMap(resultMapGet, "CKSV9055.err_flg");
//				if ((msgResult != null)||(!"0".equals(errFlgAxm)))
//				{
//					axmErr = true;
//				}
//* IT1-2015-0000104  20151005 DEL START *//
				
			}
		}catch (Exception e)
		{
			exception = e;
		}
		//* 20150914 ANK-2480-00-00対応　ADD END *//
		
		// 例外が発生している場合はログ出力
		if (exception != null){
			printErrorLog("名寄せ連携で例外が発生しました", exception);
		}

		// 結果の返却
		if (returnCd == null || "".equals(returnCd)) {
			// 異常終了
			return setErrorXml(bean, returnMap, PMP_ERR_SYSTEM);
		} else {
			// 正常終了
			return setResultXml(bean, returnMap, requestMap, resultMapUpd, mailErr, axmErr, ccmgErr);
		}
	}

	/**
	 * 返却用マップの作成と初期化<br />
	 * @return 返却用マップ
	 */
	@SuppressWarnings("unchecked")
	private Map createReturnMap()
	{
		Map returnMap  = new LinkedHashMap();
		returnMap.put("DST_UPDATE_TIMESTAMP_M00010_OUT", "");
		returnMap.put("DST_UPDATE_TIMESTAMP_M00280_OUT", "");
		returnMap.put("ORG_UPDATE_TIMESTAMP_M00010_OUT", "");
		returnMap.put("ORG_UPDATE_TIMESTAMP_M00280_OUT", "");
		returnMap.put("RETURN_CODE", "");
		return returnMap;
	}

	/**
	 * 更新サービスへの入力パラメータを作成する
	 * @param processDiv 処理区分
	 * @param receiveMap 受信データ
	 * @param inputMap サービスへの入力パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void createServiceMap(String processDiv, String businessDiv, Map receiveMap, Map inputMap) throws Exception
	{
		// 名寄せ
		HashMap<String, Object> mapCc01 = new HashMap<String, Object>();
		mapCc01.put("gyomu_kbn", receiveMap.get("BUSINESS_DIV"));
		mapCc01.put("nayose_saki_sysid", receiveMap.get("DST_SYS_ID"));
		mapCc01.put("sysid", receiveMap.get("ORG_SYS_ID"));
		if(("0".equals(businessDiv)) || ("1".equals(businessDiv)) || ("2".equals(businessDiv)) || ("3".equals(businessDiv)))
		{
			mapCc01.put("eoid", receiveMap.get("EO_ID"));
			mapCc01.put("eoid_pwd", receiveMap.get("EO_ID_PASSWORD"));
			if(("1".equals(businessDiv)) || ("3".equals(businessDiv)))
			{
				mapCc01.put("cont_cust_nm", receiveMap.get("FIRST_NAME") + "　" + receiveMap.get("SECOND_NAME"));
				mapCc01.put("cont_cust_kana", receiveMap.get("FIRST_NAME_KANA") + "　" + receiveMap.get("SECOND_NAME_KANA"));
				mapCc01.put("cont_cust_sex_cd", receiveMap.get("GENDER"));
				mapCc01.put("cont_pcd", receiveMap.get("ZIP_CODE"));
				mapCc01.put("cont_bnchigo", (String)receiveMap.get("ADDRESS1") + (String)receiveMap.get("ADDRESS2"));
				mapCc01.put("cont_adrttm", receiveMap.get("ADDRESS3"));
				mapCc01.put("cont_ad_bnkt_sta_pst", String.valueOf(((String)receiveMap.get("ADDRESS1")).length() + 1));
				mapCc01.put("telno", receiveMap.get("TEL_NUMBER"));
				mapCc01.put("cont_cust_birthd", receiveMap.get("DATE_OF_BIRTH"));
			}

			mapCc01.put("rrks_mlad", receiveMap.get("CONTACT_MAIL_ADDRESS"));

			if(("2".equals(businessDiv)) || ("3".equals(businessDiv)))
			{
				mapCc01.put("henko_tetuzukityu_mlad", receiveMap.get("CHANGE_PROC_MAILADDRESS"));
			}

			mapCc01.put("pwd_reminder_qs_cd", receiveMap.get("PWD_REMINDER_QUESTION_CODE"));
			mapCc01.put("pwd_reminder_ans", receiveMap.get("PWD_REMINDER_ANSWER"));
			mapCc01.put("nkname", receiveMap.get("NICKNAME"));
			mapCc01.put("ispks_svc_kei_no", receiveMap.get("OKYAKUSAMA_ID_ISP"));
	
			HashMap mailSettingInformation = (HashMap)receiveMap.get("MAIL_SETTING_INFORMATION");
			
			Map mailReceptionSettingList = (Map)mailSettingInformation.get("MAIL_RECEPTION_SETTING_LIST");
			
			Map mailReceptionSettings = (Map)mailReceptionSettingList.get("MAIL_RECEPTION_SETTINGS");
			
			List<Map> mailReceptionSetting = new ArrayList();
			
			Object objSetting = mailReceptionSettings.get("MAIL_RECEPTION_SETTING");
			if (objSetting instanceof Map)
			{
				mailReceptionSetting.add((Map)objSetting);
			}
			else if (objSetting instanceof List)
			{
				mailReceptionSetting = (List)objSetting;
			}
			
			mapCc01.put("svc_kei_no", mailReceptionSettingList.get("OKYAKUSAMA_ID"));
			mapCc01.put("op_svc_kei_no",  mailReceptionSettingList.get("SERVICE_CONTRACT_ID"));
			
			List<Map> workList = new ArrayList<Map>();
			for (int i = 0; i < mailReceptionSetting.size(); i++)
			{
				Map<String, Object> work = new HashMap<String, Object>();
				work.put("kmk_number", JCKWebCommon.convOptinmNoForEo((String)mailReceptionSetting.get(i).get("COLUMN_NUMBER")));
				work.put("rcv_div", mailReceptionSetting.get(i).get("RECEPTION_DIV"));
				workList.add(work);
			}
			mapCc01.put("mail_rcv_sette_list", workList);
		}

		mapCc01.put("nayose_saki_ck_upd_dtm", receiveMap.get("DST_UPDATE_TIMESTAMP_M00010_IN"));
		mapCc01.put("nayose_saki_kk_upd_dtm", receiveMap.get("DST_UPDATE_TIMESTAMP_M00280_IN"));
		mapCc01.put("ck_upd_dtm", receiveMap.get("ORG_UPDATE_TIMESTAMP_M00010_IN"));
		mapCc01.put("kk_upd_dtm", receiveMap.get("ORG_UPDATE_TIMESTAMP_M00280_IN"));

		inputMap.put("CKSV900201CC", mapCc01);
	}

	/**
	 * CCMG API呼出サービスへの入力パラメータを作成する。
	 * @param processDiv 処理区分
	 * @param msgResult 
	 * @param receiveMap 受信データ
	 * @param inputMap サービスへの入力パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void createServiceMap4Ccmg(String processDiv, Map outputMap, Map receiveMap, Map inputMap) throws Exception
	{
		HashMap<String, Object> mapCc01 = new HashMap<String, Object>();

		// 機能コード
		mapCc01.put("func_cd", "3");

		// SYSID
		mapCc01.put("sysid", (String)receiveMap.get("DST_SYS_ID"));

		// ISP決済サービス契約番号
		mapCc01.put("ispks_svc_kei_no", (String)receiveMap.get("OKYAKUSAMA_ID_ISP"));

		inputMap.put("CKSV905101CC", mapCc01);

	}

	/**
	 * メール送信サービスへの入力パラメータを作成する。
	 * @param processDiv 処理区分
	 * @param msgResult 
	 * @param receiveMap 受信データ
	 * @param inputMap サービスへの入力パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void createServiceMap4Mail(String processDiv, Map outputMap, Map receiveMap, Map inputMap) throws Exception
	{
		// SYSID取得
		String sysid = (String)receiveMap.get("DST_SYS_ID");

		HashMap<String, Object> mapCc01 = new HashMap<String, Object>();

		// SYSID
		mapCc01.put("sysid", sysid);

		// メールアドレス
		mapCc01.put("mlad", (String)receiveMap.get("CHANGE_PROC_MAILADDRESS"));

		// コンテンツお客様名
		String contCustNm = (String)JCKWebCommon.getObjFromMap(outputMap, "CKSV900201CC.cont_cust_nm_res");
		// URL
		String url = (String)receiveMap.get("URL");

		// メールコード（メールアドレス仮登録完了通知）
		mapCc01.put("mail_cd", MAIL_CD_MLAD_KARI_ADD_FIN_TCHI);

		// 埋め込み文字リスト
		List repTextList = new ArrayList();
		mapCc01.put("rep_text_list", repTextList);

		// 埋め込み文字の設定（お客様名）
		Map repTextMap1 = new HashMap();
		repTextMap1.put("rep_text", contCustNm);
		repTextList.add(repTextMap1);

		// 埋め込み文字の設定（URL）
		Map repTextMap2 = new HashMap();
		repTextMap2.put("rep_text", url);
		repTextList.add(repTextMap2);

		inputMap.put("CKSV904901CC", mapCc01);

	}

	/**
	 * AxM会員情報更新依頼サービスへの入力パラメータを作成する。
	 * @param serviceId サービスID
	 * @param funcCd 機能コード（0：名寄せされるSYSIDが処理対象、1：名寄せ先SYSIDが処理対象）
	 * @param msgResult 
	 * @param receiveMap 受信データ
	 * @param inputMap サービスへの入力パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void createServiceMap4AxmReq(String serviceId, String funcCd, Map receiveMap, Map inputMap) throws Exception
	{
		HashMap<String, Object> mapCc01 = new HashMap<String, Object>();
		if ("0".equals(funcCd))
		{
			mapCc01.put("upd_trgt_sysid", receiveMap.get("DST_SYS_ID"));
		}
		else
		{
			mapCc01.put("upd_trgt_sysid", receiveMap.get("ORG_SYS_ID"));
		}
		inputMap.put("CKSV900101CC", mapCc01);
	}

	//* 20150914 ANK-2480-00-00 ADD START *//
	/**
	 * サービス契約一覧照会(料金グループコード)への入力パラメータを作成する。
	 * @param serviceId サービスID
	 * @param funcCd 機能コード（0：名寄せされるSYSIDが処理対象、1：名寄せ先SYSIDが処理対象）
	 * @param msgResult 
	 * @param receiveMap 受信データ
	 * @param inputMap サービスへの入力パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	//*20151007 IT1-2015-0000105 MOD START *//
//	private void createeoGetServiceMap4AxmReq(String serviceId, String funcCd, Map receiveMap, Map inputMap, Map MapCKSV9056SC) throws Exception
	private void createeoGetServiceMap4AxmReq(String serviceId, String funcCd, Map receiveMap, Map inputMap, Map MapCKSV9056SC) throws Exception
	//*20151007 IT1-2015-0000105 MOD END *//
	{
		HashMap<String, Object> mapCc01 = new HashMap<String, Object>();
		
		//*20151007 IT1-2015-0000105 MOD START *//
		// 名寄せ元SYSID
		//mapCc01.put("orgsysid", receiveMap.get("ORG_SYS_ID"));
		
		//listMapCKSV9056SC サービス契約一覧照会明細
		List listMapCKSV9056SC = (List)MapCKSV9056SC.get("EKK0081B016CBSMsg1List");
		mapCc01.put("EKK0081B016CBSMsg1List", listMapCKSV9056SC );
		//*20151007 IT1-2015-0000105 MOD END *//
		
		//名寄せ先SYSID
		mapCc01.put("dstsysid", receiveMap.get("DST_SYS_ID"));
		
		// CKSV905501SC
		inputMap.put("CKSV905501SC", mapCc01);
	}
	//* 20150914 ANK-2480-00-00 ADD END *//

	//* 20151007 IT1-2015-0000105 ADD START *//
	/**
	 * サービス契約一覧照会(料金グループコード)への入力パラメータを作成する。
	 * @param serviceId サービスID
	 * @param msgResult 
	 * @param receiveMap 受信データ
	 * @param inputMap サービスへの入力パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void createCksv9056scMap(String serviceId, String funcCd, Map receiveMap, Map inputMap) throws Exception
	{
		HashMap<String, Object> mapSc = new HashMap<String, Object>();
		
		//名寄せ元sysid
		mapSc.put("key_sysid", receiveMap.get("ORG_SYS_ID"));
		
		//料金グループコード(デフォルト」17(eo電気))
		mapSc.put("key_prc_grp_cd", JKKStrConst.CD00133_17);
	
		//CKSV9056SC
		inputMap.put("CKSV9056SC", mapSc);
	}
	//* 20151007 IT1-2015-0000105 ADD END *//
	/**
	 * 
	 * @param returnMap
	 * @param returnCd
	 * @return 返却するXML
	 */
	@SuppressWarnings("unchecked")
	private boolean setErrorXml(X31SDataBeanAccess bean, Map returnMap, String returnCd)
	{
		Map parentMap = new HashMap();
		returnMap.put("RETURN_CODE", returnCd);
		parentMap.put("LKA12020_SEND", returnMap);
/*---< ANK-2557-00-00 mod start >---*/
		//ログ出力
		//String xml = JCKWebCommon.parseMapToXmlForPmp(parentMap);
		String xml = JCKWebCommon.parseMapToXmlForPmp(parentMap,1);
/*---< ANK-2557-00-00 mod end >---*/
		bean.sendMessageString("返却データ", X31CWebConst.DATABEAN_SET_VALUE, xml);

		DEBUG_LOG.info("action_Init End!");

		return true;
	}

	/**
	 * サービス呼び出しが正常終了した時の返却用XML作成
	 * @param processDiv 処理区分
	 * @param receiveMap 受信情報
	 * @param outMap サービス実行結果
	 * @param mailErr メール送信エラー
	 * @param axmErr AxM会員情報更新依頼エラー
	 * @param ccmgErr CCMG連携エラー
	 * @throws Exception
	 * @return 返却用XML
	 */
	@SuppressWarnings("unchecked")
	private boolean setResultXml(X31SDataBeanAccess bean, Map returnMap, Map<?, ?> receiveMap, Map<?, ?> outMap, boolean mailErr, boolean axmErr, boolean ccmgErr) throws Exception
	{
		Map parentMap = new HashMap();

		String returnCd = null;
		String ckDstUpdDtm = null;
		String kkDstUpdDtm = null;
		String ckOrgUpdDtm = null;
		String kkOrgUpdDtm = null;

		returnCd = (String)JCKWebCommon.getObjFromMap(outMap, "CKSV900201CC.return_cd");
		if (PMP_ERR_EXCLUSION.equals(returnCd))
		{
			// 排他エラーの時は更新日時をセット
			ckDstUpdDtm = (String)JCKWebCommon.getObjFromMap(outMap, "CKSV900201CC.nayose_saki_ck_upd_dtm_res");
			kkDstUpdDtm = (String)JCKWebCommon.getObjFromMap(outMap, "CKSV900201CC.nayose_saki_kk_upd_dtm_res");
			ckOrgUpdDtm = (String)JCKWebCommon.getObjFromMap(outMap, "CKSV900201CC.ck_upd_dtm_res");
			kkOrgUpdDtm = (String)JCKWebCommon.getObjFromMap(outMap, "CKSV900201CC.kk_upd_dtm_res");
		}

		// メール送信エラー、AxM連携エラー、CCMG連携エラーの判定
		if (PMP_NORMAL_END.equals(returnCd))
		{
			if (ccmgErr && (axmErr || mailErr))
			{
				returnCd = PMP_ERR_SYSTEM;
			}
			else if (mailErr && axmErr)
			{
				returnCd = PMP_ERR_AXM_MAILSEND;
			}
			else if (mailErr)
			{
				returnCd = PMP_ERR_MAILSEND;
			}
			else if (axmErr)
			{
				returnCd = PMP_ERR_AXM;
			}
			else if (ccmgErr)
			{
				returnCd = PMP_ERR_CCMG;
			}
		}

		returnMap.put("RETURN_CODE", returnCd);
		returnMap.put("DST_UPDATE_TIMESTAMP_M00010_OUT", ckDstUpdDtm);
		returnMap.put("DST_UPDATE_TIMESTAMP_M00280_OUT", kkDstUpdDtm);
		returnMap.put("ORG_UPDATE_TIMESTAMP_M00010_OUT", ckOrgUpdDtm);
		returnMap.put("ORG_UPDATE_TIMESTAMP_M00280_OUT", kkOrgUpdDtm);
		parentMap.put("LKA12020_SEND", returnMap);

/*---< ANK-2557-00-00 mod start >---*/
		//ログ出力
		//String resultXml = JCKWebCommon.parseMapToXmlForPmp(parentMap);
		String resultXml = JCKWebCommon.parseMapToXmlForPmp(parentMap,1);
/*---< ANK-2557-00-00 mod end >---*/

		bean.sendMessageString("返却データ", X31CWebConst.DATABEAN_SET_VALUE, resultXml);

		DEBUG_LOG.info("action_Init End!");

		return true;
	}
}
