/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKUseStpAddShijishoCC
*   ソースファイル名：JKKUseStpAddShijishoCC.java
*   作成者          ：富士通
*   日付            ：2013年04月04日
*＜機能概要＞
*   利用停止後指示書登録を行う。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00.00    2013/04/04   FJ）        新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKAddSjishoConst;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
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.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;

/**
 * 
 * 利用停止実行CCクラス
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JKKUseStpAddShijishoCC extends AbstractCommonComponent
{

	/*********** クラスフィールド ******************/
	/** ----- 作業用クラスフィールド ----- **/
	/** 運用日付 */
	private String oPE_DATE = "";
	/** 処理結果フラグ **/
	private boolean wk_Fuka_flg = false;
	
	/** ----- リクエスト・レスポンス パラメータ ----- **/
	
	/** ----- 利用停止 ----- **/
	/** 処理結果 */
	private static final String SYORI_RESULT = "syori_result";
	// ▼2013-04-10修正▼
//	/** 利用停止対象者リスト */
//	private static final String USE_STP_LST = "use_stp_lst";
	/** 利用停止対象者SYSID */
	private static final String USE_STP_SYSID = "use_stp_sysid";
	// ▲2013-04-10修正▲
	/** 利用停止不可対象者リスト */
	private static final String FUKA_USE_STP_LST = "fuka_use_stp_lst";

	/** 処理結果(利用停止実行) */
	private static final String SYORI_RESULT_OK = "0";
	/** 処理結果(利用停止不可サービスあり) */
	private static final String SYORI_RESULT_FUKA = "1";
	
	// IT1-2013-0000609 2013/04/02 ADD START
	/** 指示書CCマップのキー */
	private static final String SJISHO_MAP = "JKKAddSjishoCC";
	
	// ▼2013-04-10削除▼
//	/** コンテンツ支払い方法コード ＩＳＰ決済 **/
//	private static final String CD00828_ISPKS = "2";
//	
//	/** 支払方法入力支援一覧照会 **/
//	private static final String TEMPLATE_ID_ECN0131B008 = "ECN0131B008";
	// ▲2013-04-10削除▲
	
	/** サービス契約番号 */
	private static final String SYSID = "sysid";

	// IT1-2013-0000609 2013/04/02 ADD END
	
	// ▼2013-04-10削除▼
//	/**
//	 * 利用停止後指示書登録メソッド
//	 * @param handle セッションハンドル
//	 * @param param リクエストパラメータ
//	 * @param fixedText サービスメッセージ
//	 * @return リクエストパラメータ
//	 * @throws Throwable 例外時にスローします
//	 */
//	public IRequestParameterReadWrite runUseStpAddShijisho(
//			SessionHandle handle, 
//			IRequestParameterReadWrite param, 
//			String fixedText) throws Throwable
//	{
//		int statusCode = 0;
//		
//		HashMap<String, Object> paramHash = new HashMap<String, Object>();
//		HashMap<String, Object> useStpHash = null;
//		HashMap<String, Object> use_stp_map = null;
//
//		//作業日の取得
//		oPE_DATE = JCCBPCommon.getOpeDate(null);
//		
//		//リクエストパラメータ情報取得
//		use_stp_map = (HashMap<String, Object>)param.getData(fixedText);
//		
//		//対象者リスト取得
//		ArrayList<HashMap<String, Object>> useStpTrgtLst = (ArrayList<HashMap<String, Object>>)use_stp_map.get(USE_STP_LST);
//
//		//利用停止不可対象者リスト生成
//		ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst = new ArrayList<HashMap<String, Object>>();
//
//		//繰り返し処理
//		//利用停止対象者数分ループ
//		for(int i = 0 ; i < useStpTrgtLst.size() ; i++)
//		{
//			useStpHash = useStpTrgtLst.get(i);
//			String sysid = (String)useStpHash.get(SYSID);
//
//			paramHash.put(SYSID, sysid);
//			
//			printlnEjbLog("＃＃＃＃JKKUseStpAddShijishoCC.runUseStpAddShijisho() sysid=" + sysid);
//			//メイン処理の実行
//			statusCode = runUseStpAddShijishoProc(
//					handle, 
//					param, 
//					paramHash, 
//					fixedText,
//					fukaUseStpTrgtLst);
//			
//			if(statusCode != 0)
//			{
//				//リターンコードの設定
//				String formatStatus = String.format("%1$04d", statusCode);
//				param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
//				throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));
//			}
//		}
//		
//		//処理結果設定
//		if(wk_Fuka_flg)
//		{
//			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_FUKA);
//		}
//		else
//		{
//			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_OK);
//		}
//
//		//処理結果書き戻し
//		param.setData(fixedText, use_stp_map);
//
//		//リターンコードの設定
//		String formatStatus = String.format("%1$04d", statusCode);
//		param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
//		
//		//処理終了
//		return param;
//		
//	}
	// ▲2013-04-10削除▲

	// ▼2013-04-10追加▼
	/**
	 * 利用停止後指示書(8:支払方法の情報)登録メソッド
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite runUseStpAddShijisho08(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText) throws Throwable
	{
		int statusCode = 0;
		
		HashMap<String, Object> paramHash = new HashMap<String, Object>();
		HashMap<String, Object> use_stp_map = null;

		//作業日の取得
		oPE_DATE = JCCBPCommon.getOpeDate(null);
		
		//リクエストパラメータ情報取得
		use_stp_map = (HashMap<String, Object>)param.getData(fixedText);
		
		//対象者SYSID取得
		String sysid = (String) use_stp_map.get(USE_STP_SYSID);

		//利用停止不可対象者リスト生成
		ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst = new ArrayList<HashMap<String, Object>>();

		//利用停止対象者SYSID設定
		paramHash.put(SYSID, sysid);
		
		printlnEjbLog("＃＃＃＃JKKUseStpAddShijishoCC.runUseStpAddShijisho() sysid=" + sysid);
		//メイン処理の実行
		statusCode = runUseStpAddShijishoProc08(
				handle, 
				param, 
				paramHash, 
				fixedText,
				fukaUseStpTrgtLst);
		
		if(statusCode != 0)
		{
			//リターンコードの設定
			String formatStatus = String.format("%1$04d", statusCode);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));
		}
		
		//処理結果設定
		if(wk_Fuka_flg)
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_FUKA);
		}
		else
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_OK);
		}

		//処理結果書き戻し
		param.setData(fixedText, use_stp_map);

		//リターンコードの設定
		String formatStatus = String.format("%1$04d", statusCode);
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
		
		//処理終了
		return param;
		
	}
	
	/**
	 * 利用停止後指示書(11:お客様の基本情報)登録メソッド
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite runUseStpAddShijisho11(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText) throws Throwable
	{
		int statusCode = 0;
		
		HashMap<String, Object> paramHash = new HashMap<String, Object>();
		HashMap<String, Object> use_stp_map = null;

		//作業日の取得
		oPE_DATE = JCCBPCommon.getOpeDate(null);
		
		//リクエストパラメータ情報取得
		use_stp_map = (HashMap<String, Object>)param.getData(fixedText);
		
		//対象者SYSID取得
		String sysid = (String) use_stp_map.get(USE_STP_SYSID);

		//利用停止不可対象者リスト生成
		ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst = new ArrayList<HashMap<String, Object>>();

		//利用停止対象者SYSID設定
		paramHash.put(SYSID, sysid);
		
		printlnEjbLog("＃＃＃＃JKKUseStpAddShijishoCC.runUseStpAddShijisho() sysid=" + sysid);
		//メイン処理の実行
		statusCode = runUseStpAddShijishoProc11(
				handle, 
				param, 
				paramHash, 
				fixedText,
				fukaUseStpTrgtLst);
		
		if(statusCode != 0)
		{
			//リターンコードの設定
			String formatStatus = String.format("%1$04d", statusCode);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));
		}
		
		//処理結果設定
		if(wk_Fuka_flg)
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_FUKA);
		}
		else
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_OK);
		}

		//処理結果書き戻し
		param.setData(fixedText, use_stp_map);

		//リターンコードの設定
		String formatStatus = String.format("%1$04d", statusCode);
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
		
		//処理終了
		return param;
		
	}
	// ▲2013-04-10追加▲

	// ▼2013-04-12追加▼
	/**
	 * 利用停止解除後指示書(8:支払方法の情報)登録メソッド
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite runUseStpKaijoAddShijisho08(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText) throws Throwable
	{
		int statusCode = 0;
		
		HashMap<String, Object> paramHash = new HashMap<String, Object>();
		HashMap<String, Object> use_stp_map = null;

		//作業日の取得
		oPE_DATE = JCCBPCommon.getOpeDate(null);
		
		//リクエストパラメータ情報取得
		use_stp_map = (HashMap<String, Object>)param.getData(fixedText);
		
		//対象者SYSID取得
		String sysid = (String) use_stp_map.get(USE_STP_SYSID);

		//利用停止不可対象者リスト生成
		ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst = new ArrayList<HashMap<String, Object>>();

		//利用停止対象者SYSID設定
		paramHash.put(SYSID, sysid);
		
		printlnEjbLog("＃＃＃＃JKKUseStpAddShijishoCC.runUseStpAddShijisho() sysid=" + sysid);
		//メイン処理の実行
		statusCode = runUseStpKaijoAddShijishoProc08(
				handle, 
				param, 
				paramHash, 
				fixedText,
				fukaUseStpTrgtLst);
		
		if(statusCode != 0)
		{
			//リターンコードの設定
			String formatStatus = String.format("%1$04d", statusCode);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));
		}
		
		//処理結果設定
		if(wk_Fuka_flg)
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_FUKA);
		}
		else
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_OK);
		}

		//処理結果書き戻し
		param.setData(fixedText, use_stp_map);

		//リターンコードの設定
		String formatStatus = String.format("%1$04d", statusCode);
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
		
		//処理終了
		return param;
		
	}
	// ▲2013-04-12追加▲

	/**
	 * 利用停止解除後指示書(11:お客様の基本情報)登録メソッド
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite runUseStpKaijoAddShijisho(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText) throws Throwable
	{
		int statusCode = 0;
		
		HashMap<String, Object> paramHash = new HashMap<String, Object>();
		HashMap<String, Object> use_stp_map = null;

		//作業日の取得
		oPE_DATE = JCCBPCommon.getOpeDate(null);
		
		//リクエストパラメータ情報取得
		use_stp_map = (HashMap<String, Object>)param.getData(fixedText);
		
		//対象者SYSID取得
		String sysid = (String) use_stp_map.get(USE_STP_SYSID);

		//利用停止不可対象者リスト生成
		ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst = new ArrayList<HashMap<String, Object>>();

		//利用停止対象者SYSID設定
		paramHash.put(SYSID, sysid);
		
		printlnEjbLog("＃＃＃＃JKKUseStpAddShijishoCC.runUseStpAddShijisho() sysid=" + sysid);
		//メイン処理の実行
		statusCode = runUseStpKaijoAddShijishoProc(
				handle, 
				param, 
				paramHash, 
				fixedText,
				fukaUseStpTrgtLst);
		
		if(statusCode != 0)
		{
			//リターンコードの設定
			String formatStatus = String.format("%1$04d", statusCode);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));
		}
		
		//処理結果設定
		if(wk_Fuka_flg)
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_FUKA);
		}
		else
		{
			use_stp_map.put(SYORI_RESULT, SYORI_RESULT_OK);
		}

		//処理結果書き戻し
		param.setData(fixedText, use_stp_map);

		//リターンコードの設定
		String formatStatus = String.format("%1$04d", statusCode);
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
		
		//処理終了
		return param;
		
	}

	// ▼2013-04-10削除▼
//	/**
//	 * 利用停止後指示書登録メイン処理
//	 * @param handle セッションマネージャなどを持ったハンドル
//	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
//	 * @param requestParam リクエストパラメータ
//	 * @param fixedText ユーザ任意文字列
//	 * @param fukaUseStpTrgtLst 利用停止不可対象リスト
//	 * @return リターンコード
//	 * @throws Throwable
//	 */
//	private int runUseStpAddShijishoProc(
//			SessionHandle handle, 
//			IRequestParameterReadWrite param, 
//			HashMap<String, Object> requestParam,
//			String fixedText,
//			ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst) throws Throwable
//	{
//		HashMap<String, Object> resultHash =  new HashMap<String, Object>();
//		ArrayList<HashMap<String, Object>> eKK0321B002HashList = null;
//		int statusCode = 0;
//		boolean svcUseStp_flg = false;
//		ArrayList<HashMap<String, Object>> hakkoSODDataList = new ArrayList<HashMap<String,Object>>();
//		
//		String sysid = (String)requestParam.get(SYSID);
//		
//
//		/*************************************************************************************/
//		/** お客様スキーマ更新                                                              **/
//		/*************************************************************************************/
//		// 変更前 会員ISP決済状態コード：通常(0)
//		String ispKessaiStatCdBef = "0";
//		
//		// 変更後 会員ISP決済状態コード：すべてのISP決済先が利用停止中(1)
//		String ispKessaiStatCdAft = "1";
//		
//		String ret = updCustInf(handle, param, fixedText, sysid, ispKessaiStatCdBef, ispKessaiStatCdAft);
//
//		if ("1".equals(ret)) {
//			// 更新しなかった場合は指示書登録もしない。
//			return 0;
//		}
//		/*************************************************************************************/
//		/** 指示書登録ＣＣ用データ作成                                                      **/
//		/*************************************************************************************/
//		// サービス契約番号格納リスト
//		ArrayList<String> sknList = new ArrayList<String>();
//
//		String[] sv = new String[sknList.size()];
//		
//		// 8:支払方法の情報
//		
//		// SYSID、ISP決済をキーとして、支払方法入力支援一覧照会を呼び出す
//		statusCode = callECN0131B008SC(param, handle, requestParam, resultHash, sysid);
//		
//		if(statusCode != 0)
//		{
//			return statusCode;
//		}
//		
//		// 支払方法入力支援一覧照会の結果を取得
//		ArrayList<HashMap<String, Object>> eCN0131B008HashList = (ArrayList<HashMap<String, Object>>)resultHash.get(TEMPLATE_ID_ECN0131B008);
//
//		// 支払いがＩＳＰ決済の場合のみ、連携データ区分08「支払方法入力支援の情報 」を実施
//		if (eCN0131B008HashList != null && eCN0131B008HashList.size() > 0) 
//		{
//			// 連携データ区分08「支払方法入力支援の情報 」
//			JKKBpCommon.putAxMRenkeiDataKbn08(
//					param,
//					SJISHO_MAP,
//					JKKAddSjishoConst.TRN_KBN_ADD,
//					sknList.toArray(sv),
//					sysid
//			);
//		}
//		
//		// 11：お客様の基本情報
//		ArrayList<String> updTrgt = new ArrayList<String>();
//
//		// パラメータ11(ISP利用停止フラグ)
//		updTrgt.add("11");
//		
//		// パラメータ17(会員状態)
//		updTrgt.add("17");
//		
//		String[] v1 = new String[updTrgt.size()];
//		
//		// 連携データ区分11「お客様の基本情報」
//		JKKBpCommon.putAxMRenkeiDataKbn11(
//				param,
//				SJISHO_MAP,
//				JKKAddSjishoConst.TRN_KBN_UPD,
//				sknList.toArray(sv),
//				sysid,
//				updTrgt.toArray(v1)
//		);
//		
//		/*************************************************************************************/
//		/** 指示書登録ＣＣ実行                                                              **/
//		/*************************************************************************************/
//		(new JKKAddSjishoCC()).addSjisho(handle, param, SJISHO_MAP);
//		// IT1-2013-0000609 2013/04/02 ADD END
//		
//
//		//正常
//		return 0;
//	}
	// ▲2013-04-10削除▲
	
	// ▼2013-04-10追加▼
	/**
	 * 利用停止後指示書(8:支払方法の情報)登録メイン処理
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param requestParam リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @param fukaUseStpTrgtLst 利用停止不可対象リスト
	 * @return リターンコード
	 * @throws Throwable
	 */
	private int runUseStpAddShijishoProc08(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap<String, Object> requestParam,
			String fixedText,
			ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst) throws Throwable
	{
		String sysid = (String)requestParam.get(SYSID);
		

		/*************************************************************************************/
		/** 指示書登録ＣＣ用データ作成                                                      **/
		/*************************************************************************************/
		// サービス契約番号格納リスト
		ArrayList<String> sknList = new ArrayList<String>();

		String[] sv = new String[sknList.size()];
		
		// 8:支払方法の情報
		
		// 連携データ区分08「支払方法入力支援の情報 」
		JKKBpCommon.putAxMRenkeiDataKbn08(
				param,
				SJISHO_MAP,
				JKKAddSjishoConst.TRN_KBN_ADD,
				sknList.toArray(sv),
				sysid
		);
		
		/*************************************************************************************/
		/** 指示書登録ＣＣ実行                                                              **/
		/*************************************************************************************/
		(new JKKAddSjishoCC()).addSjisho(handle, param, SJISHO_MAP);
		
		//正常
		return 0;
	}
	
	/**
	 * 利用停止後指示書(11:お客さま基本情報)登録メイン処理
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param requestParam リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @param fukaUseStpTrgtLst 利用停止不可対象リスト
	 * @return リターンコード
	 * @throws Throwable
	 */
	private int runUseStpAddShijishoProc11(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap<String, Object> requestParam,
			String fixedText,
			ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst) throws Throwable
	{
		String sysid = (String)requestParam.get(SYSID);
		

		/*************************************************************************************/
		/** お客様スキーマ更新                                                              **/
		/*************************************************************************************/
		// 変更前 会員ISP決済状態コード：通常(0)
		String ispKessaiStatCdBef = "0";
		
		// 変更後 会員ISP決済状態コード：すべてのISP決済先が利用停止中(1)
		String ispKessaiStatCdAft = "1";
		
		String ret = updCustInf(handle, param, fixedText, sysid, ispKessaiStatCdBef, ispKessaiStatCdAft);

// ▼2013-04-10削除▼
//		if ("1".equals(ret)) {
//			// 更新しなかった場合は指示書登録もしない。
//			return 0;
//		}
		/*************************************************************************************/
		/** 指示書登録ＣＣ用データ作成                                                      **/
		/*************************************************************************************/
		// サービス契約番号格納リスト
		ArrayList<String> sknList = new ArrayList<String>();

		String[] sv = new String[sknList.size()];
		
		// 11：お客様の基本情報
		ArrayList<String> updTrgt = new ArrayList<String>();
		
		// パラメータ17(会員状態)
		updTrgt.add("17");
		
		String[] v1 = new String[updTrgt.size()];
		
		// 連携データ区分11「お客様の基本情報」
		JKKBpCommon.putAxMRenkeiDataKbn11(
				param,
				SJISHO_MAP,
				JKKAddSjishoConst.TRN_KBN_UPD,
				sknList.toArray(sv),
				sysid,
				updTrgt.toArray(v1)
		);
		
		/*************************************************************************************/
		/** 指示書登録ＣＣ実行                                                              **/
		/*************************************************************************************/
		(new JKKAddSjishoCC()).addSjisho(handle, param, SJISHO_MAP);
		// IT1-2013-0000609 2013/04/02 ADD END
		

		//正常
		return 0;
	}
	// ▲2013-04-10追加▲
	
	// ▼2013-04-10追加▼
	/**
	 * 利用停止解除後指示書(8:支払方法の情報)登録メイン処理
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param requestParam リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @param fukaUseStpTrgtLst 利用停止不可対象リスト
	 * @return リターンコード
	 * @throws Throwable
	 */
	private int runUseStpKaijoAddShijishoProc08(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap<String, Object> requestParam,
			String fixedText,
			ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst) throws Throwable
	{
		String sysid = (String)requestParam.get(SYSID);
		
		/*************************************************************************************/
		/** 指示書登録ＣＣ用データ作成                                                      **/
		/*************************************************************************************/
		// サービス契約番号格納リスト
		ArrayList<String> sknList = new ArrayList<String>();
		
		String[] sv = new String[sknList.size()];
		
		// 8:支払方法の情報
		
		// 連携データ区分08「支払方法入力支援の情報 」
		JKKBpCommon.putAxMRenkeiDataKbn08(
				param,
				SJISHO_MAP,
				JKKAddSjishoConst.TRN_KBN_ADD,
				sknList.toArray(sv),
				sysid
		);
		
		/*************************************************************************************/
		/** 指示書登録ＣＣ実行                                                              **/
		/*************************************************************************************/
		(new JKKAddSjishoCC()).addSjisho(handle, param, SJISHO_MAP);
		
		//正常
		return 0;
	}
	// ▲2013-04-12追加▲
	
	/**
	 * 利用停止解除後指示書(11:お客さまの基本情報)登録メイン処理
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param requestParam リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @param fukaUseStpTrgtLst 利用停止不可対象リスト
	 * @return リターンコード
	 * @throws Throwable
	 */
	private int runUseStpKaijoAddShijishoProc(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap<String, Object> requestParam,
			String fixedText,
			ArrayList<HashMap<String, Object>> fukaUseStpTrgtLst) throws Throwable
	{
		HashMap<String, Object> resultHash =  new HashMap<String, Object>();
		int statusCode = 0;
		boolean svcUseStp_flg = false;
		
		String sysid = (String)requestParam.get(SYSID);
		

		/*************************************************************************************/
		/** お客様スキーマ更新                                                              **/
		/*************************************************************************************/
		// 変更前 会員ISP決済状態コード：利用停止中(1)
		String ispKessaiStatCdBef = "1";
		
		// 変更後 会員ISP決済状態コード：通常
		String ispKessaiStatCdAft = "0";

		// 変更後 コンテンツISP利用不可フラグ：利用可(0)
		String contIspUseFailFlgAft = "0";
		
		updCustInf(handle, param, fixedText, sysid, ispKessaiStatCdBef, ispKessaiStatCdAft);

		
		/*************************************************************************************/
		/** 指示書登録ＣＣ用データ作成                                                      **/
		/*************************************************************************************/
		// サービス契約番号格納リスト
		ArrayList<String> sknList = new ArrayList<String>();

		String[] sv = new String[sknList.size()];
		
		// ▼2013-04-10削除▼
//		// 8:支払方法の情報
//		
//		// SYSID、ISP決済をキーとして、支払方法入力支援一覧照会を呼び出す
//		statusCode = callECN0131B008SC(param, handle, requestParam, resultHash, sysid);
//		
//		if(statusCode != 0)
//		{
//			return statusCode;
//		}
//		
//		// 支払方法入力支援一覧照会の結果を取得
//		ArrayList<HashMap<String, Object>> eCN0131B008HashList = (ArrayList<HashMap<String, Object>>)resultHash.get(TEMPLATE_ID_ECN0131B008);
//
//		// 支払いがＩＳＰ決済の場合のみ、連携データ区分08「支払方法入力支援の情報 」を実施
//		if (eCN0131B008HashList != null && eCN0131B008HashList.size() > 0) 
//		{
//			// 連携データ区分08「支払方法入力支援の情報 」
//			JKKBpCommon.putAxMRenkeiDataKbn08(
//					param,
//					SJISHO_MAP,
//					JKKAddSjishoConst.TRN_KBN_ADD,
//					sknList.toArray(sv),
//					sysid
//			);
//		}
		// ▲2013-04-10削除▲
		
		// 11：お客様の基本情報
		ArrayList<String> updTrgt = new ArrayList<String>();

		// ▼2013-04-10削除▼
//		// パラメータ11(ISP利用停止フラグ)
//		updTrgt.add("11");
		// ▲2013-04-10削除▲
		
		// パラメータ17(会員状態)
		updTrgt.add("17");
		
		String[] v1 = new String[updTrgt.size()];
		
		// 連携データ区分11「お客様の基本情報」
		JKKBpCommon.putAxMRenkeiDataKbn11(
				param,
				SJISHO_MAP,
				JKKAddSjishoConst.TRN_KBN_UPD,
				sknList.toArray(sv),
				sysid,
				updTrgt.toArray(v1)
		);
		
		/*************************************************************************************/
		/** 指示書登録ＣＣ実行                                                              **/
		/*************************************************************************************/
		(new JKKAddSjishoCC()).addSjisho(handle, param, SJISHO_MAP);

		//正常
		return 0;
	}
	
	// ▼2013-04-10削除▼
//	// IT1-2013-0000609 2013/04/03 ADD Start
//	/**
//	 * ECN0131B008の結果をHashとして抽出する
//	 * @param resultMsgs ECN0131B008のテンプレートリスト
//	 * @return ECN0131B008の結果部分
//	 */
//	private ArrayList<HashMap<String, Object>> mappingECN0131B008SCOutMsg(CAANMsg[] resultMsgs)
//	{
//		
//		ArrayList<HashMap<String, Object>> retHashList = null;
//		CAANMsg[] msgs = null;
//		
//		//結果の抽出
//		retHashList = new ArrayList<HashMap<String, Object>>();
//		msgs = resultMsgs[0].getCAANMsgList(ECN0131B008CBSMsg.ECN0131B008CBSMSG1LIST);
//		for(int i = 0 ; i < msgs.length ; i++)
//		{
//			retHashList.add(msgs[i].getMsgData());
//		}
//		
//		return retHashList;
//	}
//	// IT1-2013-0000609 2013/04/03 ADD End
//
//	// IT1-2013-0000609 2013/04/03 ADD Start
//	/**
//	 * templateに対してECN0131B008の条件に関する部分を設定する
//	 * @param template 条件の設定先
//	 * @param inHash 設定条件
//	 * @param sysid SYSID
//	 * @param requestParam アプリ固有のパラメータ
//	 */
//	private void mappingECN0131B008InMsg(CAANMsg template, HashMap<String, Object> inHash, String sysid)
//	{
//
//		//まずは全条件のNullマッピング
//		fillCAANMSGNullMapping(template, new ECN0131B008CBSMsg().getContents());
//		
//		//テンプレートID(SIFのID)
//		template.set(ECN0131B008CBSMsg.TEMPLATEID, TEMPLATE_ID_ECN0131B008);
//
//		//機能コード
//		template.set(ECN0131B008CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
//
//		//ＫＥＹ＿ＳＹＳＩＤ
//		template.set(ECN0131B008CBSMsg.KEY_SYSID, sysid);
//		
//		//ＫＥＹ＿支払方法入力支援コード:ＩＳＰ決済
//		template.set(ECN0131B008CBSMsg.KEY_PAYWAY_INPUT_SHIEN_CD, CD00828_ISPKS);
//		
//	}
//	// IT1-2013-0000609 2013/04/03 ADD END
//	
//	/**
//	 * 持ちうるフィールドにNullマッピングで埋める
//	 * @param msg 対象クラス
//	 * @param contents 対応クラスのフィールド列挙
//	 */
//	private void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
//	{
//		
//		//要素ごとのループ
//		for(int i = 0 ; i < contents.length ; i++)
//		{
//			
//			Object element = null;
//			
//			//キーに該当する箇所の取得
//			element = contents[i][0];
//
//			//Nullでマッピング
//			msg.setNull((String)element);
//			
//		}
//	}
//	
//	/**
//	 * 条件部の共通する項目の設定
//	 * @param param リクエストパラメータ
//	 * @param template template 条件の設定先
//	 * @throws RequestParameterException
//	 */
//	private void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
//	throws RequestParameterException
//	{
//		
//		// オペレータID
//		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
//		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);
//
//		// 運用日付
//		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
//		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);
//
//		// 運用日時
//		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
//		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
//		
//	}
//	
//	/**
//	 * サービスI/F実行用の共通部を設定します<br>
//	 * <br>
//	 * 
//	 * @param param (I) 業務データ取得用I/F
//	 * @param msg データ登録内容
//	 * @return オプションサービス契約作成数
//	 * @throws RequestParameterException
//	 * @exception RequestParameterExceptionがスローされます 。
//	 */
//	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
//	throws RequestParameterException
//	{
//		HashMap<String, Object> paramMap = new HashMap<String, Object>();
//
//		//電文ID
//		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
//		
//		//ユースケースID
//		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
//		
//		//オペレーションID
//		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
//		
//		//サービス呼び出し区分
//		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
//		
//		//依頼先ホスト名
//		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
//		
//		//依頼元IPアドレス
//		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
//		
//		//依頼元画面ID
//		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
//		
//		//オペレータID
//		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
//		
//		return paramMap;
//	}
//	
//	
//	// IT1-2013-0000609 2013/04/02 ADD START
//	/**
//	 * 支払方法入力支援一覧照会SIFを呼び出し
//	 * @param param リクエストパラメータ	
//	 * @param handle セッションハンドル
//	 * @param inHash 条件用Hash
//	 * @param resultHash 結果のハッシュ
//	 * @param svcKeiNo サービス契約番号
//	 * @return サービスインターフェースのリターンコード
//	 * @throws RequestParameterException, SCException 例外時にスローされます
//	 */
//	private int callECN0131B008SC(
//			IRequestParameterReadWrite param,
//			SessionHandle handle,
//			HashMap<String, Object> inHash,
//			HashMap<String, Object> resultHash,
//			String sysid)
//			throws RequestParameterException, SCException
//	{
//		
//		HashMap<String, Object> sIFRequest = null;
//		CAANMsg[] resultMsgs = null;
//		CAANMsg template = null;
//		ServiceComponentRequestInvoker scCall = null;
//		Map<?, ?> sIFResult = null;
//		int status = 0;
//
//		//サービスIF共通の情報を設定
//		sIFRequest = editInMsgCmn(param);
//		
//		//ECN0131B008への呼び出しパラメータ設定
//		template = new CAANMsg(ECN0131B008CBSMsg.class.getName());
//		mappingECN0131B008InMsg(template, inHash, sysid);
//		editBasicCmn(param, template);
//		
//		//リクエスト用クラスの設定
//		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});
//
//		//SC呼び出しクラスの生成
//		scCall = new ServiceComponentRequestInvoker();
//		
//		//SIFの呼び出し
//		sIFResult = scCall.run(sIFRequest, handle);
//
//		//結果の取得
//		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
//		
//		//ステータスコードの取得
//		status = template.getInt(JCMConstants.STATUS_INT_KEY);
//		
//		//ステータスが0以外はエラーとなっている
//		if(status == 0)
//		{
//			resultHash.put(
//					TEMPLATE_ID_ECN0131B008, 
//					mappingECN0131B008SCOutMsg(resultMsgs));
//		}
//
//		return status;
//		
//	}
//	// IT1-2013-0000609 2013/04/02 ADD END
	// ▲2013-04-10削除▲

	private String updCustInf(
		SessionHandle handle, 
		IRequestParameterReadWrite param, 
		String fixedText,
		String sysid,
		String ispKessaiStatCdBef, 
		String ispKessaiStatCdAft
		) throws Exception {
			

		/** お客様スキーマの更新 */
		return updCust(handle, param, fixedText, sysid, ispKessaiStatCdBef, ispKessaiStatCdAft);
	}

	private String updCust(
		SessionHandle handle, 
		IRequestParameterReadWrite param, 
		String fixedText,
		String sysid,
		String ispKessaiStatCdBef, 
		String ispKessaiStatCdAft
		) throws Exception {
			
		
		/** 事前準備 */
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// ・ECK0011A010  お客様一意照会
		condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_SYSID, sysid);
		condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
		reqMap = mapper.setECK0011A010(param, fixedText, condMap);
		resMap = scCall.run(reqMap, handle);
		HashMap<String, Object> ck0011_a010_map = mapper.getECK0011A010(param, fixedText, resMap);
		mapper.scResultCheck(param);

// ▼2013-04-10削除▼
//		// 変更前会員ISP決済状態コードが変更前の想定と異なる場合、何もしない。
//		if( !ispKessaiStatCdBef.equals( ck0011_a010_map.get(ECK0011A010CBSMsg1List.MMB_ISP_KSSAI_STAT_CD) ) ){
//			return "1";
//		}
// ▲2013-04-10削除▲
		
		// 会員ISP決済状態コードを更新
		ck0011_a010_map.put(ECK0011A010CBSMsg1List.MMB_ISP_KSSAI_STAT_CD, ispKessaiStatCdAft);
		
		// 最終更新年月日時分秒を設定する（排他チェック用）
		ck0011_a010_map.put("upd_dt_cust_upd_dtm_bef", ck0011_a010_map.get(ECK0011A010CBSMsg1List.LAST_UPD_DTM));
		
		// お客様一意照会で取得した契約者タイプコードを元に、更新対象スキーマを特定
		String keisha_type_cd = (String)ck0011_a010_map.get(ECK0011A010CBSMsg1List.KEISHA_TYPE_CD);
		if(JKKAdchgConstCC.CD00036_OWN_ORNER.equals(keisha_type_cd)) {
			
			// ・ECK0021A010  お客様<個人>一意照会
			condMap = new HashMap<String, String>();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SYSID, sysid);
			condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
			reqMap = mapper.setECK0021A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, handle);
			HashMap<String, Object> ck0021_a010_map = mapper.getECK0021A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			/** お客様＜個人＞ 更新 */
			// ・ECK0021C010  お客様<個人>内容変更
			reqMap = mapper.setECK0021C010(param, fixedText, ck0011_a010_map, ck0021_a010_map);
			resMap = scCall.run(reqMap, handle);
			mapper.getECK0021C010(param, fixedText, resMap);
			mapper.scResultCheck(param);

		}else if(JKKAdchgConstCC.CD00036_COMP_ORNER.equals(keisha_type_cd)) {
			
			// ・ECK0031A010  お客様<法人>一意照会
			condMap = new HashMap<String, String>();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SYSID, sysid);
			condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
			reqMap = mapper.setECK0031A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, handle);
			HashMap<String, Object> ck0031_a010_map = mapper.getECK0031A010(param, fixedText, resMap);
			mapper.scResultCheck(param);

			/** お客様＜個人＞ 更新 */
			// ・ECK0021C010  お客様<個人>内容変更
			reqMap = mapper.setECK0031C010(param, fixedText, ck0011_a010_map, ck0031_a010_map);
			resMap = scCall.run(reqMap, handle);
			mapper.getECK0031C010(param, fixedText, resMap);
			mapper.scResultCheck(param);
		}
		return "0";
	}

	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>デバッグログを出力します<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param dumpObj 出力するオブジェクト
	 */
	private void printlnEjbLog(Object dumpObj) {
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), dumpObj, null, null, null);
	}

}
