/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKSvcAreaKkkuMstCC
 *   ソースファイル名：JKKSvcAreaKkkuMstCC.java
 *   作成者          ：富士通
 *   日付            ：2012年09月04日
 *＜機能概要＞
 *   サービスエリア警告マスタ
 *   サービスエリア警告マスタ画面の初期表示、登録、更新、削除処理などを行う
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v4.00.00    2012/09/05   FJ）藤川    新規作成
 *
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKSvcAreaKkkuMstConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKTrgtAdInfoSearchConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
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.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JPCModelConstant;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EKK0781B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0931A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0931B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0931B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0931C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0931D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0931E010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0171B010CBSMsg1List;
import eo.ejb.common.JKKejbPagingUtil;

@SuppressWarnings({"unchecked"})
public class JKKSvcAreaKkkuMstCC extends AbstractCommonComponent {

	/**************************************************************************/
	/** ユーザ定義                                                           **/
	/**************************************************************************/
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/**************************************************************************/
	/** サービスIF                                                           **/
	/**************************************************************************/
	/** 料金グループ一覧照会（サービスコード） */
	private static final String EKK0781B002 = "EKK0781B002";
	/** サービス提供エリア警告対象住所一意照会 */
	private static final String EKK0931A010 = "EKK0931A010";
	/** サービス提供エリア警告対象住所一覧照会 */
	private static final String EKK0931B001 = "EKK0931B001";
	/** サービス提供エリア警告対象住所変更 */
	private static final String EKK0931C010 = "EKK0931C010";
	/** サービス提供エリア警告対象住所登録 */
	private static final String EKK0931D010 = "EKK0931D010";
	/** サービス提供エリア警告対象住所論理削除 */
	private static final String EKK0931E010 = "EKK0931E010";
	/** コード名称管理一覧照会 */
	private static final String EZM0171B010 = "EZM0171B010";

	/**************************************************************************/
	/** 機能コード                                                           **/
	/**************************************************************************/
	/** 機能コード：１ */
	private static final String FUNC_CD_1 = JPCModelConstant.FUNC_CD_1;
	/** 機能コード：２ */
	private static final String FUNC_CD_2 = JPCModelConstant.FUNC_CD_2;
	/** 機能コード：３ */
	private static final String FUNC_CD_3 = JPCModelConstant.FUNC_CD_3;
	/** 機能コード：４ */
	private static final String FUNC_CD_4 = JPCModelConstant.FUNC_CD_4;
	/** 機能コード：５ */
	private static final String FUNC_CD_5 = JPCModelConstant.FUNC_CD_5;

	/**************************************************************************/
	/** ユーザ定義文字列                                                     **/
	/**************************************************************************/
	// IT1-2013-0000291 2013/02/26 MOD START
//	private static String fixText = null;
	private String fixText = null;
	// IT1-2013-0000291 2013/02/26 MOD END

	/**************************************************************************/
	/** その他                                                               **/
	/**************************************************************************/
	private static final String DSP_ALL = "ＡＬＬ";

	/** 01：都道府県以下全域 */
	private static final String SVTA_KKKU_WDASTISCP_CD_01 = "01";
	/** 02：市区町村以下全域 */
	private static final String SVTA_KKKU_WDASTISCP_CD_02 = "02";
	/** 03：大字通称以下全域 */
	private static final String SVTA_KKKU_WDASTISCP_CD_03 = "03";
	/** 04：字丁目以下全域 */
	private static final String SVTA_KKKU_WDASTISCP_CD_04 = "04";

	private static final String MAX_YMD = "20991231";

	/**************************************************************************/
	/** 入力キー                                                             **/
	/**************************************************************************/
	/** ＫＥＹ＿都道府県名 */
	private static final String KEY_STATE_NM   = "key_state_nm";
	/** ＫＥＹ＿市区町村名 */
	private static final String KEY_CITY_NM    = "key_city_nm";
	/** ＫＥＹ＿大字通称名 */
	private static final String KEY_OAZTSU_NM  = "key_oaztsu_nm";
	/** ＫＥＹ＿料金グループコード */
	private static final String KEY_PRC_GRP_CD = "prc_grp_cd";

	/**************************************************************************/
	/** 住所情報検索                                                         **/
	/**************************************************************************/
	private static final String TRGT_DATA_AD = "trgt_data_ad";
	private static final String AD_LIST      = "ad_list";
	private static final String STATE_LIST   = "state_list";
	private static final String CITY_LIST    = "city_list";
	private static final String OAZTSU_LIST  = "oaztsu_list";
	private static final String AZCHO_LIST   = "azcho_list";

	/**************************************************************************/
	/** 料金プラン情報検索                                                   **/
	/**************************************************************************/
	private static final String TRGT_DATA_PPLAN = "trgt_data_pplan";
	private static final String PPLAN_LIST      = "pplan_list";

	private static final String SVTA_KKKU_TAIAD_NO = "svta_kkku_taiad_no";

	private static final String[][] SEARCH_LIST =
	{
		{SVTA_KKKU_TAIAD_NO,        EKK0931B001CBSMsg1List.SVTA_KKKU_TAIAD_NO},
		{"svc_cd",                  EKK0931B001CBSMsg1List.SVC_CD},
		{"prc_grp_cd",              EKK0931B001CBSMsg1List.PRC_GRP_CD},
		{"prc_grp_cd_nm",           EKK0931B001CBSMsg1List.PRC_GRP_NM},
		{"pcrs_cd",                 EKK0931B001CBSMsg1List.PCRS_CD},
		{"pcrs_cd_nm",              EKK0931B001CBSMsg1List.PCRS_NM},
		{"pplan_cd",                EKK0931B001CBSMsg1List.PPLAN_CD},
		{"pplan_cd_nm",             EKK0931B001CBSMsg1List.PPLAN_NM},
		{"chk_sbt_cd",              EKK0931B001CBSMsg1List.CHK_SBT_CD},
		{"chk_sbt_cd_nm",           EKK0931B001CBSMsg1List.CHK_SBT_CD_NM},
		{"auto_shosa_chk_tg_cd",    EKK0931B001CBSMsg1List.AUTO_SHOSA_CHK_TG_CD},
		{"auto_shosa_chk_tg_cd_nm", EKK0931B001CBSMsg1List.AUTO_SHOSA_CHK_TG_CD_NM},
		{"svta_kkku_tg_pcd",        EKK0931B001CBSMsg1List.SVTA_KKKU_TG_PCD},
		{"svta_kkku_taiad_cd",      EKK0931B001CBSMsg1List.SVTA_KKKU_TAIAD_CD},
		{"svta_kkku_tg_state_nm",   EKK0931B001CBSMsg1List.SVTA_KKKU_TG_STATE_NM},
		{"svta_kkku_tg_city_nm",    EKK0931B001CBSMsg1List.SVTA_KKKU_TG_CITY_NM},
		{"svta_kkku_tg_oaztsu_nm",  EKK0931B001CBSMsg1List.SVTA_KKKU_TG_OAZTSU_NM},
		{"svta_kkku_tg_azcho_nm",   EKK0931B001CBSMsg1List.SVTA_KKKU_TG_AZCHO_NM},
		{"svta_kkku_tg_bnchigo",    EKK0931B001CBSMsg1List.SVTA_KKKU_TG_BNCHIGO},
		{"svta_kkku_wdastiscp_cd",  EKK0931B001CBSMsg1List.SVTA_KKKU_WDASTISCP_CD},
		{"svta_kkku_rsn_memo",      EKK0931B001CBSMsg1List.SVTA_KKKU_RSN_MEMO}
	};

	/**************************************************************************/
	/** メイン処理＜初期表示＞                                               **/
	/**************************************************************************/
	/**
	 * サービスエリア警告マスタ初期表示<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	public IRequestParameterReadWrite initDsp(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		fixText = fixedText;

		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);

		// 機能コード
		String funcCd = (String)userData.get(JKKSvcAreaKkkuMstConstCC.FUNC_CODE);

		// 機能コードのより、サービスIFの実行制御を行う
		if (FUNC_CD_1.equals(funcCd))
		{
			// +++++++++++++++++++++++++++++++++++++ //
			// １：一覧照会画面初期表示              //
			// +++++++++++++++++++++++++++++++++++++ //
			initNewDsp(handle, param, fixedText, funcCd, userData);
			initNewDspFunc1(handle, param, fixedText, userData);
		}
		else if (FUNC_CD_2.equals(funcCd))
		{
			// +++++++++++++++++++++++++++++++++++++ //
			// ２：登録画面初期表示                  //
			// +++++++++++++++++++++++++++++++++++++ //
			initNewDsp(handle, param, fixedText, funcCd, userData);
		}
		else if (FUNC_CD_3.equals(funcCd) || FUNC_CD_4.equals(funcCd))
		{
			// +++++++++++++++++++++++++++++++++++++ //
			// ３：更新画面初期表示                  //
			// ４：削除画面初期表示                  //
			// +++++++++++++++++++++++++++++++++++++ //
			initUpdDsp(handle, param, fixedText, funcCd, userData);
		}
		else if (FUNC_CD_5.equals(funcCd))
		{
			// +++++++++++++++++++++++++++++++++++++ //
			// ５：住所検索戻り表示                  //
			// +++++++++++++++++++++++++++++++++++++ //
			initNewDspFunc1(handle, param, fixedText, userData);
		}

		// 処理終了
		return param;
	}

	/**
	 * サービスエリア警告マスタ新規系初期表示<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @param	funcCd		機能コード
	 * @param	userData	ユーザデータ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	private IRequestParameterReadWrite initNewDsp(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String funcCd,
			Map<String, Object> userData
	) throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();

		// 引継ぎ情報取得
		work = getHktgDataInit(userData, funcCd);

		// ******************************************** //
		// 料金グループ一覧照会（サービスコード）       //
		// ******************************************** //
		callEKK0781B002SC(param, handle, work, resultHash);
		editData(userData, resultHash, "prc_grp_list", EKK0781B002CBSMsg.EKK0781B002CBSMSG1LIST);

		// ******************************************** //
		// コード名称管理一覧照会                       //
		// ※サービスエリアチェック種別コード           //
		// ******************************************** //
		callEZM0171B010SC(param, handle, "CD00629", FUNC_CD_3, resultHash);
		editEZM0171B010(userData, resultHash, "svc_area_ck_sbt_cd_list");

		// ******************************************** //
		// コード名称管理一覧照会                       //
		// ※対象コード（自動照査チェック）             //
		// ******************************************** //
		callEZM0171B010SC(param, handle, "CD00619", FUNC_CD_3, resultHash);
		editEZM0171B010(userData, resultHash, "auto_shosa_check_list");

		// ******************************************** //
		// 住所情報リスト取得（都道府県）               //
		// ******************************************** //
		callTrgtAdInfoSearchCC(handle, param, userData, FUNC_CD_1);

		// 処理終了
		return param;
	}

	/**
	 * サービスエリア警告マスタ新規系初期表示<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @param	userData	ユーザデータ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	private void initNewDspFunc1(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			Map<String, Object> userData
	) throws Throwable
	{
		// 料金グループコード取得
		String prcGrpCd = (String)userData.get(KEY_PRC_GRP_CD);
		if (prcGrpCd != null && ! "".equals(prcGrpCd))
		{
			// ******************************************** //
			// 料金プランリスト取得                         //
			// ******************************************** //
			callPplanChangeCC(handle, param, userData, FUNC_CD_1);
		}

		// 都道府県名取得
		String stateNm = (String)userData.get(KEY_STATE_NM);
		if (stateNm != null && ! "".equals(stateNm))
		{
			// ******************************************** //
			// 住所情報リスト取得（市区町村）               //
			// ******************************************** //
			callTrgtAdInfoSearchCC(handle, param, userData, FUNC_CD_2);
		}

		// 市区町村名取得
		String cityNm = (String)userData.get(KEY_CITY_NM);
		if (cityNm != null && ! "".equals(cityNm))
		{
			// ******************************************** //
			// 住所情報リスト取得（大字通称）               //
			// ******************************************** //
			callTrgtAdInfoSearchCC(handle, param, userData, FUNC_CD_3);
		}

		// 大字通称名取得
		String oaztsuNm = (String)userData.get(KEY_OAZTSU_NM);
		if (oaztsuNm != null && ! "".equals(oaztsuNm))
		{
			// ******************************************** //
			// 住所情報リスト取得（字区町）                 //
			// ******************************************** //
			callTrgtAdInfoSearchCC(handle, param, userData, FUNC_CD_4);
		}
	}

	/**
	 * サービスエリア警告マスタ更新系初期表示<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @param	funcCd		機能コード
	 * @param	userData	ユーザデータ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	private IRequestParameterReadWrite initUpdDsp(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String funcCd,
			Map<String, Object> userData
	) throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();

		// 引継ぎ情報取得
		work = getHktgDataInit(userData, funcCd);
		work.put(JKKSvcAreaKkkuMstConstCC.FUNC_CODE, funcCd);

		// ============================================================== //
		// サービス提供エリア警告対象住所番号をひとつだけ取り出す         //
		// ============================================================== //
		// ※カンマ区切りで複数の番号が設定されている場合は、             //
		// 　同料金プラン名称、別料金プランコードの                       //
		// 　同時登録データであるため、任意の一番号のみを取り出す         //
		// ============================================================== //
		String[] svtaKkkuTaiadNo = ((String)userData.get(JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_INIT)).split(",");

		if (FUNC_CD_3.equals(funcCd))
		{
			// ******************************************** //
			// コード名称管理一覧照会                       //
			// ※対象コード（自動照査チェック）             //
			// ******************************************** //
			callEZM0171B010SC(param, handle, "CD00619", FUNC_CD_3, resultHash);
			editEZM0171B010(userData, resultHash, "auto_shosa_check_list");
		}

		// ******************************************** //
		// サービス提供エリア警告対象住所一意照会       //
		// ******************************************** //
		List<HashMap<String, Object>> svtaKkkuInfoist = new ArrayList<HashMap<String, Object>>();

		for (int i = 0; i < svtaKkkuTaiadNo.length; i++)
		{
			// サービス提供エリア警告対象住所番号
			work.put(JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_INIT, svtaKkkuTaiadNo[i]);

			callEKK0931A010SC(param, handle, work, resultHash);
			chgCAANMsgToListAdd(svtaKkkuInfoist, resultHash, EKK0931A010CBSMsg.EKK0931A010CBSMSG1LIST);
		}
		userData.put("svc_area_kkku_list", svtaKkkuInfoist);

		// 処理終了
		return param;
	}

	/**************************************************************************/
	/** メイン処理＜検索＞                                                   **/
	/**************************************************************************/
	/**
	 * サービスエリア警告マスタ検索処理<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	public IRequestParameterReadWrite searchSvcAreaKkkuMst(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText
	) throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();

		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);

		// 機能コード
		String funcCd = (String)userData.get(JKKSvcAreaKkkuMstConstCC.FUNC_CODE);

		// 引継ぎ情報取得
		work = getHktgDataSearch(userData);
		work.put(JKKSvcAreaKkkuMstConstCC.FUNC_CODE, funcCd);

		// サービス提供エリア警告対象住所一覧照会
		callEKK0931B001SC(param, handle, work, resultHash);

		// 取得結果を返却用に編集する
		editSearchInfo(userData, resultHash);

		// 処理終了
		return param;
	}

	/**************************************************************************/
	/** 取得結果編集処理                                                     **/
	/**************************************************************************/
	private void editData(Map<String, Object> userData, HashMap<String, Object> resultHash, String returnKey, String listKey)
	{
		userData.put(returnKey, chgCAANMsgToList(resultHash, listKey));
	}

	/**
	 * 取得結果を返却用に編集する（検索処理）<br>
	 * <br>
	 * @param	userData
	 * @param	resultHash
	 * @return	なし
	 */
	private void editSearchInfo(
			Map<String, Object> userData,
			HashMap<String, Object> resultHash
	)
	{
		ArrayList<HashMap<String, Object>> searchList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> searchMap = new HashMap<String, Object>();

		// オプションサービス契約一覧照会マップ.総検索件数 ← 総検索件数
		if (resultHash.get(EKK0931B001CBSMsg.TOTAL_SEARCH_NUM) == null) {
			userData.put("total_search_num", new String());
		} else {
			userData.put("total_search_num", resultHash.get(EKK0931B001CBSMsg.TOTAL_SEARCH_NUM));
		}

		// オプションサービス契約一覧照会マップ.総ページ数 ← 総ページ数
		if (resultHash.get(EKK0931B001CBSMsg.TOTAL_SEARCH_NUM) == null) {
			userData.put("total_page_num", new String());
		} else {
			userData.put("total_page_num", resultHash.get(EKK0931B001CBSMsg.TOTAL_PAGE_NUM));
		}

		// オプションサービス契約一覧照会マップ.検索エラーフラグ ← 検索エラーフラグ
		if (resultHash.get(EKK0931B001CBSMsg.TOTAL_SEARCH_NUM) == null) {
			userData.put("search_err_flg", new String());
		} else {
			userData.put("search_err_flg", resultHash.get(EKK0931B001CBSMsg.SEARCH_ERR_FLG));
		}

		CAANMsg[] eKK0931B001CBSMSG1list = (CAANMsg[])resultHash.get(EKK0931B001CBSMsg.EKK0931B001CBSMSG1LIST);
		if (eKK0931B001CBSMSG1list != null && eKK0931B001CBSMSG1list.length != 0)
		{
			for (int i = 0; i < eKK0931B001CBSMSG1list.length; i++)
			{
				searchMap = new HashMap<String, Object>();
				HashMap<String, Object> eKK0931B001CBSMSG1 = eKK0931B001CBSMSG1list[i].getMsgData();

				// 取得項目セット
				for(int j = 0; j < SEARCH_LIST.length; j++)
				{
					searchMap.put(SEARCH_LIST[j][0], (String)eKK0931B001CBSMSG1.get(SEARCH_LIST[j][1]));
				}

				String staYmd = (String)eKK0931B001CBSMSG1.get(EKK0931B001CBSMsg1List.SVTA_KKKU_TAIAD_TSTAYMD);
				String endYmd = (String)eKK0931B001CBSMSG1.get(EKK0931B001CBSMsg1List.SVTA_KKKU_TAIAD_TENDYMD);

				if (MAX_YMD.equals(staYmd) || isNull(staYmd))
				{
					// サービス提供エリア警告対象住所適用開始年月日	
					searchMap.put("svta_kkku_taiad_tstaymd", "");
				}
				else
				{
					// サービス提供エリア警告対象住所適用開始年月日	
					searchMap.put("svta_kkku_taiad_tstaymd", JPCUtilCommon.formatDate(staYmd));
				}


				if (MAX_YMD.equals(endYmd) || isNull(endYmd))
				{
					// サービス提供エリア警告対象住所適用終了年月日	
					searchMap.put("svta_kkku_taiad_tendymd", "");
				}
				else
				{
					// サービス提供エリア警告対象住所適用終了年月日	
					searchMap.put("svta_kkku_taiad_tendymd", JPCUtilCommon.formatDate(endYmd));
				}

				// サービス提供エリア警告広域指定範囲コードにより表示項目を編集する（ＡＬＬ表示）

				// 都道府県以下全域
				if (SVTA_KKKU_WDASTISCP_CD_01.equals(eKK0931B001CBSMSG1.get(EKK0931B001CBSMsg1List.SVTA_KKKU_WDASTISCP_CD)))
				{
					// サービス提供エリア警告対象市区町村名	
					searchMap.put("svta_kkku_tg_city_nm",   DSP_ALL);
					// サービス提供エリア警告対象大字通称名	
					searchMap.put("svta_kkku_tg_oaztsu_nm", DSP_ALL);
					// サービス提供エリア警告対象字丁目名	
					searchMap.put("svta_kkku_tg_azcho_nm",  DSP_ALL);
					// サービス提供エリア警告対象番地号	
					searchMap.put("svta_kkku_tg_bnchigo",   DSP_ALL);
				}
				// 市区町村以下全域
				else if (SVTA_KKKU_WDASTISCP_CD_02.equals(eKK0931B001CBSMSG1.get(EKK0931B001CBSMsg1List.SVTA_KKKU_WDASTISCP_CD)))
				{
					// サービス提供エリア警告対象大字通称名	
					searchMap.put("svta_kkku_tg_oaztsu_nm", DSP_ALL);
					// サービス提供エリア警告対象字丁目名	
					searchMap.put("svta_kkku_tg_azcho_nm",  DSP_ALL);
					// サービス提供エリア警告対象番地号	
					searchMap.put("svta_kkku_tg_bnchigo",   DSP_ALL);
				}
				// 大字通称名以下全域
				else if (SVTA_KKKU_WDASTISCP_CD_03.equals(eKK0931B001CBSMSG1.get(EKK0931B001CBSMsg1List.SVTA_KKKU_WDASTISCP_CD)))
				{
					// サービス提供エリア警告対象字丁目名	
					searchMap.put("svta_kkku_tg_azcho_nm", DSP_ALL);
					// サービス提供エリア警告対象番地号	
					searchMap.put("svta_kkku_tg_bnchigo",  DSP_ALL);
				}
				// 字丁目名以下全域
				else if (SVTA_KKKU_WDASTISCP_CD_04.equals(eKK0931B001CBSMSG1.get(EKK0931B001CBSMsg1List.SVTA_KKKU_WDASTISCP_CD)))
				{
					// サービス提供エリア警告対象番地号	
					searchMap.put("svta_kkku_tg_bnchigo", DSP_ALL);
				}

				searchList.add(searchMap);
			}
		}

		// ▼▼▼▼▼ 2013/01/31 IT2-2013-0000011 ADD START ▼▼▼▼▼
		// ============================================================== //
		//                      ※※ グループ化 ※※                      //
		// ============================================================== //
		// ※サービスエリア警告マスタメンテ登録画面にて、                 //
		// 　入力項目の料金プラン名称を一意にグループ化を行う。           //
		// 　そのため、同料金プラン名称で別料金プランコードを             //
		// 　同時に登録できるようになる。（その他の内容は一緒）           //
		// 　また検索結果についても、                                     //
		// 　同料金プラン名称、別料金プランコードのレコードを             //
		// 　一意にグループ化する必要がある。                             //
		// 　（システム上、同時に登録したレコードを一意に）               //
		// ============================================================== //
		searchList = setSvcAreaKkkuMstList(searchList);
		// グループ化に伴い、総検索件数、総ページ数を再セット
		if (searchList != null)
		{
			// オプションサービス契約一覧照会マップ.総検索件数 ← 総検索件数
			userData.put("total_search_num", String.valueOf(searchList.size()));

			// 表示件数
			Long lDispNum = Long.parseLong((String)userData.get("display_num"));
			// 表示ページ数
			Long lDispPage = Long.parseLong((String)userData.get("display_page_num"));

			// 総ページ数の算出
			String strMaxPage = JKKejbPagingUtil.calcTotalPage(Long.parseLong(String.valueOf(searchList.size())), lDispNum);

			// オプションサービス契約一覧照会マップ.総ページ数 ← 総ページ数
			userData.put("total_page_num", strMaxPage);

			// 検索対象を算出する
			long[] iPages = JKKejbPagingUtil.calcSearchRows(lDispPage, lDispNum);
			int lRowSta = Integer.parseInt(String.valueOf(iPages[0]));		// ページ開始レコード行
			int lRowEnd = Integer.parseInt(String.valueOf(iPages[1]));		// ページ終了レコード行

			if (lRowEnd > searchList.size())
			{
				lRowEnd = searchList.size();
			}

			// リストコピー
			ArrayList<HashMap<String, Object>> searchCopyList = (ArrayList<HashMap<String, Object>>)searchList.clone();
			// 返却リスト初期化
			searchList.clear();

			// 対象ページの情報のみ返却
			for (int i = lRowSta; i <= lRowEnd; i++)
			{
				searchList.add((HashMap<String, Object>)searchCopyList.get(i - 1));
			}
		}
		// ▲▲▲▲▲ 2013/01/31 IT2-2013-0000011 ADD E N D ▲▲▲▲▲

		userData.put("svc_area_kkku_mst_list", searchList);
	}

	// ▼▼▼▼▼ 2013/01/31 IT2-2013-0000011 ADD START ▼▼▼▼▼
	/**
	 * グループ化<br>
	 * <br>
	 * @param	svcAreaKkkuMstList
	 */
	private ArrayList<HashMap<String, Object>> setSvcAreaKkkuMstList(ArrayList<HashMap<String, Object>> svcAreaKkkuMstList)
	{
		if (svcAreaKkkuMstList == null || svcAreaKkkuMstList.size() == 0)
		{
			return svcAreaKkkuMstList;
		}

		// サービスエリア警告マスタ一覧ワーク
		ArrayList<HashMap<String, Object>> workList = new ArrayList<HashMap<String, Object>>();

		for (int i = 0; i < svcAreaKkkuMstList.size(); i++)
		{
			// サービスエリア警告マスタ情報取得
			HashMap<String, Object> svcAreaKkkuMstInfo = svcAreaKkkuMstList.get(i);

			// リスト追加フラグ
			boolean addFlg = true;

			// インデックス
			int workInfoIndex = 0;

			for (int j = 0; j < workList.size(); j++)
			{
				// ワーク情報取得
				HashMap<String, Object> workMap = workList.get(j);

				if (
					isEqualsData(svcAreaKkkuMstInfo, workMap, "svc_cd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "prc_grp_cd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "pplan_cd_nm")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "auto_shosa_chk_tg_cd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "chk_sbt_cd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_tg_pcd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_taiad_cd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_tg_state_nm")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_tg_city_nm")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_tg_oaztsu_nm")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_tg_azcho_nm")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_tg_bnchigo")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_wdastiscp_cd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_taiad_tstaymd")
					&& isEqualsData(svcAreaKkkuMstInfo, workMap, "svta_kkku_taiad_tendymd")
				)
				{
					// 追加フラグ＝ＯＦＦ
					addFlg = false;
					// インデックス取得
					workInfoIndex = j;
					break;
				}
			}

			// ワークリストに追加
			if (addFlg)
			{
				workList.add(svcAreaKkkuMstInfo);
			}
			// ワークリストの情報を変更
			else
			{
				// ワークリストの情報を取得
				HashMap<String, Object> workMap = workList.get(workInfoIndex);

				workMap.put(
						SVTA_KKKU_TAIAD_NO,
						(String)workMap.get(SVTA_KKKU_TAIAD_NO) + "," + (String)svcAreaKkkuMstInfo.get(SVTA_KKKU_TAIAD_NO)
				);
			}
		}

		return workList;
	}

	/**
	 * 比較<br>
	 * <br>
	 * @param	compMoto
	 * @param	compSaki
	 * @param	key
	 * @return
	 */
	private boolean isEqualsData(HashMap<String, Object> compMoto, HashMap<String, Object> compSaki, String key)
	{
		boolean ret = false;

		if (compMoto != null && compSaki != null)
		{
			String motoData = (String)compMoto.get(key);
			String sakiData = (String)compSaki.get(key);

			if (motoData == null)
			{
				motoData = "";
			}
			if (sakiData == null)
			{
				sakiData = "";
			}

			// 比較対象が同じか判定
			if (motoData.equals(sakiData))
			{
				ret = true;
			}
		}

		return ret;
	}
	// ▲▲▲▲▲ 2013/01/31 IT2-2013-0000011 ADD E N D ▲▲▲▲▲

	/**************************************************************************/
	/** メイン処理＜登録＞                                                   **/
	/**************************************************************************/
	/**
	 * サービスエリア警告マスタ登録処理<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	public IRequestParameterReadWrite addSvcAreaKkkuMst(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();

		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);

		// 引継ぎ情報取得
		List<Map<String,String>> pplan_list = (List<Map<String,String>>)userData.get("pplan_list");
		work = getHktgDataAdd(userData);

		// サービス提供エリア警告対象住所登録
		for(int i = 0; i < pplan_list.size(); i++)
		{
			// 料金コースコード	
			work.put(JKKSvcAreaKkkuMstConstCC.PCRS_CD,  pplan_list.get(i).get("pcrs_cd"));
			// 料金プランコード	
			work.put(JKKSvcAreaKkkuMstConstCC.PPLAN_CD, pplan_list.get(i).get("pplan_cd"));

			callEKK0931D010SC(param, handle, work, resultHash);
		}

		// 処理終了
		return param;
	}

	/**************************************************************************/
	/** メイン処理＜更新＞                                                   **/
	/**************************************************************************/
	/**
	 * サービスエリア警告マスタ更新処理<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	public IRequestParameterReadWrite updSvcAreaKkkuMst(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();

		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);

		// 機能コード
		String funcCd = (String)userData.get(JKKSvcAreaKkkuMstConstCC.FUNC_CODE);

		// 引継ぎ情報取得
		work = getHktgDataUpd(userData);
		work.put(JKKSvcAreaKkkuMstConstCC.FUNC_CODE, funcCd);

		List<Map<String,String>> svta_kkku_taiad_list = (List<Map<String,String>>)userData.get("svta_kkku_taiad_list");

		// サービス提供エリア警告対象住所変更
		for(int i = 0; i < svta_kkku_taiad_list.size(); i++)
		{
			// サービス提供エリア警告対象住所番号
			work.put(JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_UPD,  svta_kkku_taiad_list.get(i).get("svta_kkku_taiad_no"));
			// 更新前更新年月日時分秒
			work.put(JKKSvcAreaKkkuMstConstCC.UPD_DTM_UPD,             svta_kkku_taiad_list.get(i).get("upd_dtm"));

			callEKK0931C010SC(param, handle, work, resultHash);
		}

		// 処理終了
		return param;
	}

	/**************************************************************************/
	/** メイン処理＜削除＞                                                   **/
	/**************************************************************************/
	/**
	 * サービスエリア警告マスタ削除処理（論理削除）<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		リクエストパラメータ
	 * @param	fixedText	サービスメッセージ
	 * @return				リクエストパラメータ
	 * @throws	Throwable	例外時にスローします
	 */
	public IRequestParameterReadWrite delSvcAreaKkkuMst(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		fixText = fixedText;
		HashMap<String, Object> work;
		HashMap<String, Object> resultHash= new HashMap<String, Object>();

		Map<String, Object> userData = (HashMap<String, Object>)param.getData(fixText);

		// 機能コード
		String funcCd = (String)userData.get(JKKSvcAreaKkkuMstConstCC.FUNC_CODE);

		// 引継ぎ情報取得
		work = getHktgDataDel(userData);
		work.put(JKKSvcAreaKkkuMstConstCC.FUNC_CODE, funcCd);

		List<Map<String,String>> svta_kkku_taiad_list = (List<Map<String,String>>)userData.get("svta_kkku_taiad_list");

		// サービス提供エリア警告対象住所論理削除
		for(int i = 0; i < svta_kkku_taiad_list.size(); i++)
		{
			// サービス提供エリア警告対象住所番号
			work.put(JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_DEL,  svta_kkku_taiad_list.get(i).get("svta_kkku_taiad_no"));
			// 更新前更新年月日時分秒
			work.put(JKKSvcAreaKkkuMstConstCC.UPD_DTM_DEL,             svta_kkku_taiad_list.get(i).get("upd_dtm"));

			callEKK0931E010SC(param, handle, work, resultHash);
		}

		// 処理終了
		return param;
	}

	/**************************************************************************/
	/** ＣＣ部品呼出                                                         **/
	/**************************************************************************/
	/**
	 * 住所情報リスト取得<br>
	 * <br>
	 * @param	handle
	 * @param	param
	 * @param	userData
	 * @param	funcCd
	 * @throws	Throwable
	 */
	private HashMap<String, Object> callTrgtAdInfoSearchCC(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			Map<String, Object> userData,
			String funcCd
	) throws Throwable
	{
		JKKTrgtAdInfoSearchCC trgtAdInfoSearch = new JKKTrgtAdInfoSearchCC();

		HashMap<String, Object> hktg = new HashMap<String, Object>();

		// 機能コード
		hktg.put(JKKTrgtAdInfoSearchConstCC.FUNC_CODE,     funcCd);
		// 都道府県名
		hktg.put(JKKTrgtAdInfoSearchConstCC.KEY_STATE_NM,  (String)userData.get(KEY_STATE_NM));
		// 市区町村名
		hktg.put(JKKTrgtAdInfoSearchConstCC.KEY_CITY_NM,   (String)userData.get(KEY_CITY_NM));
		// 大字通称名
		hktg.put(JKKTrgtAdInfoSearchConstCC.KEY_OAZTSU_NM, (String)userData.get(KEY_OAZTSU_NM));

		param.setData(TRGT_DATA_AD, hktg);
		trgtAdInfoSearch.getTrgtAddInfo(handle, param, TRGT_DATA_AD);

		// 住所情報リスト取得
		HashMap<String, Object> resultMap = (HashMap<String, Object>)param.getData(TRGT_DATA_AD);
		ArrayList adList = (ArrayList)resultMap.get(AD_LIST);

		// 返却キー取得
		String returnKey = "";
		if (FUNC_CD_1.equals(funcCd))
		{
			returnKey = STATE_LIST;
		}
		else if (FUNC_CD_2.equals(funcCd))
		{
			returnKey = CITY_LIST;
		}
		else if (FUNC_CD_3.equals(funcCd))
		{
			returnKey = OAZTSU_LIST;
		}
		else if (FUNC_CD_4.equals(funcCd))
		{
			returnKey = AZCHO_LIST;
		}

		userData.put(returnKey, adList);
		userData.put(AD_LIST,   adList);

		return resultMap;
	}

	private HashMap<String, Object> callPplanChangeCC(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			Map<String, Object> userData,
			String funcCd
	) throws Throwable
	{
		JKKPplanChangeCC pplanChange = new JKKPplanChangeCC();

		HashMap<String, Object> hktg = new HashMap<String, Object>();

		// 機能コード
		hktg.put(JKKTrgtAdInfoSearchConstCC.FUNC_CODE, funcCd);
		// 料金グループコード
		hktg.put("prc_grp_cd",                         (String)userData.get(KEY_PRC_GRP_CD));

		param.setData(TRGT_DATA_PPLAN, hktg);
		pplanChange.pplanChange(handle, param, TRGT_DATA_PPLAN);

		// 料金プランリスト取得
		HashMap<String, Object> resultMap = (HashMap<String, Object>)param.getData(TRGT_DATA_PPLAN);
		ArrayList pplanList = (ArrayList)resultMap.get(PPLAN_LIST);

		userData.put(PPLAN_LIST, pplanList);

		return resultMap;
	}

	/**************************************************************************/
	/** 引継データ取得処理＜初期表示＞                                       **/
	/**************************************************************************/
	/**
	 * 引継ぎデータ取得（初期表示）<br>
	 * <br>
	 * @param	userData
	 * @param	funcCd
	 * @return	
	 */
	private HashMap<String, Object> getHktgDataInit(Map<String, Object> userData, String funcCd)
	{
		HashMap<String, Object> work = new HashMap<String, Object>();

		// 検索、登録の初期表示時は引継ぎなし

// ▼▼▼▼▼ 複数取得のため、上位階層で取得 ▼▼▼▼▼
//		// 更新、削除時のみ取得できる
//		if (userData.containsKey(JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_INIT))
//		{
//			// サービス提供エリア警告対象住所番号
//			setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_INIT);
//		}
// ▲▲▲▲▲ 複数取得のため、上位階層で取得 ▲▲▲▲▲

		return work;
	}

	/**************************************************************************/
	/** 引継データ取得処理＜検索＞                                           **/
	/**************************************************************************/
	/**
	 * 引継ぎデータ取得（検索）<br>
	 * <br>
	 * @param	userData
	 * @return	
	 */
	private HashMap<String, Object> getHktgDataSearch(Map<String, Object> userData)
	{
		HashMap<String, Object> work = new HashMap<String, Object>();

		// 検索条件＿サービスコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_SVC_CD);
		// 検索条件＿料金グループコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_PRC_GRP_CD);
		// 検索条件＿料金コースコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_PCRS_CD);
		// 検索条件＿料金プランコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_PPLAN_CD);
		// 検索条件＿チェック種別コード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_CHECK_SBT_CD);
		// 検索条件＿自動照査チェックコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_AUTO_SHOSA_CHECK_CD);
		// 検索条件＿郵便番号
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_PCD);
		// 検索条件＿住所コード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_AD_CD);
		// 検索条件＿都道府県名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_STATE_NM);
		// 検索条件＿市区町村名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_CITY_NM);
		// 検索条件＿大字通称名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_OAZTSU_NM);
		// 検索条件＿字丁目名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_AZCHO_NM);
		// 検索条件＿番地号（前方一致）
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_BNCHIGO);

		if ((Boolean)userData.get(JKKSvcAreaKkkuMstConstCC.SEARCH_BNCHIGO_PART_MATCH))
		{
			// 1:部分一致検索
			work.put(JKKSvcAreaKkkuMstConstCC.SEARCH_BNCHIGO_PART_MATCH, "1");
		}
		else
		{
			// 1以外:前方一致検索
			work.put(JKKSvcAreaKkkuMstConstCC.SEARCH_BNCHIGO_PART_MATCH, "0");
		}

		// 検索条件＿適用開始年月日
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_TSTAYMD);
		// 検索条件＿適用終了年月日
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SEARCH_TENDYMD);

		work.put("search_type",      (String)userData.get("search_type"));
		work.put("max_search_num",   (String)userData.get("max_search_num"));

		// ページング処理はこちらで行う
		work.put("display_num",      "99999");
		work.put("display_page_num", "1");

		return work;
	}

	/**************************************************************************/
	/** 引継データ取得処理＜登録＞                                           **/
	/**************************************************************************/
	/**
	 * 引継ぎデータ取得（登録）<br>
	 * <br>
	 * @param	userData
	 * @return	
	 */
	private HashMap<String, Object> getHktgDataAdd(Map<String, Object> userData)
	{
		HashMap<String, Object> work = new HashMap<String, Object>();

		// 機能コード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.FUNC_CODE);
		// サービスコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SVC_CD);
		// 料金グループコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.PRC_GRP_CD);
		// チェック種別コード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.CHECK_SBT_CD);
		// 郵便番号
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.PCD);
		// 住所コード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.AD_CD);
		// 都道府県名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.STATE_NM);
		// 市区町村名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.CITY_NM);
		// 大字通称名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.OAZTSU_NM);
		// 字丁目名
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.AZCHO_NM);
		// 番地号
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.BNCHIGO);
		// 自動照査チェックコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.AUTO_SHOSA_CHECK_CD_ADD);
		// 適用開始年月日
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.TSTAYMD);
		// 適用終了年月日
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.TENDYMD_ADD);
		// サービス提供エリア警告広域指定範囲コード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_WDASTISCP_CD);
		// 備考
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.BIKO_ADD);

		return work;
	}

	/**************************************************************************/
	/** 引継データ取得処理＜更新＞                                           **/
	/**************************************************************************/
	/**
	 * 引継ぎデータ取得（更新）<br>
	 * <br>
	 * @param	userData
	 * @return	
	 */
	private HashMap<String, Object> getHktgDataUpd(Map<String, Object> userData)
	{
		HashMap<String, Object> work = new HashMap<String, Object>();

// ▼▼▼▼▼ 複数取得のため、上位階層でセット ▼▼▼▼▼
//		// サービス提供エリア警告対象住所番号
//		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_UPD);
// ▲▲▲▲▲ 複数取得のため、上位階層でセット ▲▲▲▲▲
		// 自動照査チェックコード
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.AUTO_SHOSA_CHECK_CD_UPD);
		// 適用終了年月日
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.TENDYMD_UPD);
		// 備考
		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.BIKO_UPD);
// ▼▼▼▼▼ 複数取得のため、上位階層でセット ▼▼▼▼▼
//		// 更新年月日分秒
//		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.UPD_DTM_UPD);
// ▲▲▲▲▲ 複数取得のため、上位階層でセット ▲▲▲▲▲

		return work;
	}

	/**************************************************************************/
	/** 引継データ取得処理＜削除＞                                           **/
	/**************************************************************************/
	/**
	 * 引継ぎデータ取得（削除）<br>
	 * <br>
	 * @param	userData
	 * @return	
	 */
	private HashMap<String, Object> getHktgDataDel(Map<String, Object> userData)
	{
		HashMap<String, Object> work = new HashMap<String, Object>();

// ▼▼▼▼▼ 複数取得のため、上位階層でセット ▼▼▼▼▼
//		// サービス提供エリア警告対象住所番号
//		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_DEL);
//		// 更新年月日分秒
//		setWorkMap(work, userData, JKKSvcAreaKkkuMstConstCC.UPD_DTM_DEL);
// ▲▲▲▲▲ 複数取得のため、上位階層でセット ▲▲▲▲▲

		return work;
	}

	/**************************************************************************/
	/** コード名称管理取得処理                                               **/
	/**************************************************************************/
	/**
	 * 取得結果より返却用に編集（コード名称管理）<br>
	 * <br>
	 * @param	userData
	 * @param	resultHash
	 * @param	mapKey
	 * @return	
	 */
	private void editEZM0171B010(Map<String, Object> userData, HashMap<String, Object> resultHash, String mapKey)
	{
		HashMap<String, Object> cdMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> cdList = new ArrayList<HashMap<String, Object>>();

		// 料金グループコード別料金プラン一覧照会結果
		CAANMsg[] eZM0171B010CBSMSG1list = (CAANMsg[])resultHash.get(EZM0171B010CBSMsg.EZM0171B010CBSMSG1LIST);

		if (eZM0171B010CBSMSG1list != null && eZM0171B010CBSMSG1list.length > 0)
		{
			for(int i=0; i < eZM0171B010CBSMSG1list.length; i++)
			{
				HashMap<String, Object> eZM0171B010CBSMSG1 = eZM0171B010CBSMSG1list[i].getMsgData();
				cdMap = new HashMap<String, Object>();
				// コード区分
				cdMap.put("cd_div",    (String)eZM0171B010CBSMSG1.get(EZM0171B010CBSMsg1List.CD_DIV));
				// コード区分名
				cdMap.put("cd_div_nm", (String)eZM0171B010CBSMSG1.get(EZM0171B010CBSMsg1List.CD_DIV_NM));

				cdList.add(cdMap);
			}
		}
		userData.put(mapKey, cdList);
	}

	/**************************************************************************/
	/** S/IF呼出処理                                                         **/
	/**************************************************************************/
	/**
	 * 料金グループ一覧照会（サービスコード）<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	work
	 * @param	resultHash
	 * @return	
	 * @throws	Throwable
	 */
	private int callEKK0781B002SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		CAANMsg template = null;

		// EKK0781B002への呼び出しパラメータ設定
		template = new CAANMsg(EKK0781B002CBSMsg.class.getName());
		mappingEKK0781B002InMsg(template, work);

		return callServiceCmn(param, handle, resultHash, template, new EKK0781B002CBSMsg().getContents());
	}

	/**
	 * templateに対してEKK0781B002の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template
	 * @param	work
	 */
	private void mappingEKK0781B002InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0781B002CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0781B002CBSMsg.TEMPLATEID, EKK0781B002);
		// 機能コード--料金グループコード別料金プラン一覧照会
		template.set(EKK0781B002CBSMsg.FUNC_CODE,  FUNC_CD_1);
	}

	/**
	 * コード名称管理一覧照会<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	codeSbtCd
	 * @param	funcCd
	 * @param	resultHash
	 * @return	
	 * @throws	Throwable
	 */
	private int callEZM0171B010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String codeSbtCd,
			String funcCd,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		CAANMsg template = null;

		// EZM0171B010への呼び出しパラメータ設定
		template = new CAANMsg(EZM0171B010CBSMsg.class.getName());
		mappingEZM0171B010InMsg(template, funcCd, codeSbtCd);

		return callServiceCmn(param, handle, resultHash, template, new EZM0171B010CBSMsg().getContents());
	}

	/**
	 * templateに対してEZM0171B010の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template
	 * @param	funcCd
	 * @param	codeSbtCd
	 */
	private void mappingEZM0171B010InMsg(CAANMsg template, String funcCd, String codeSbtCd)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EZM0171B010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EZM0171B010CBSMsg.TEMPLATEID,    EZM0171B010);
		// 機能コード--コード名称管理一覧照会
		template.set(EZM0171B010CBSMsg.FUNC_CODE,     funcCd);
		// ＫＥＹ＿サービスコード
		template.set(EZM0171B010CBSMsg.KEY_CD_SBT_CD, codeSbtCd);
	}

	/**
	 * サービス提供エリア警告対象住所一意照会<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	work
	 * @param	resultHash
	 * @return	
	 * @throws	Throwable
	 */
	private int callEKK0931A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		CAANMsg template = null;

		// EKK0931A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0931A010CBSMsg.class.getName());
		mappingEKK0931A010InMsg(template, work);

		return callServiceCmn(param, handle, resultHash, template, new EKK0931A010CBSMsg().getContents());
	}

	/**
	 * templateに対してEKK0931A010の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template
	 * @param	work
	 */
	private void mappingEKK0931A010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0931A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0931A010CBSMsg.TEMPLATEID, EKK0931A010);
		// 機能コード--サービス提供エリア警告対象住所一意照会
		template.set(EKK0931A010CBSMsg.FUNC_CODE,  FUNC_CD_1);

		// ＫＥＹ＿サービス提供エリア警告対象住所番号
		setTemplate(template, work, EKK0931A010CBSMsg.KEY_SVTA_KKKU_TAIAD_NO, JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_UPD);
	}

	/**
	 * サービス提供エリア警告対象住所一覧照会<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	work
	 * @param	resultHash
	 * @return	
	 * @throws	Throwable
	 */
	private int callEKK0931B001SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		CAANMsg template = null;

		// EKK0931B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0931B001CBSMsg.class.getName());
		mappingEKK0931B001InMsg(template, work);

		return callServiceCmn(param, handle, resultHash, template, new EKK0931B001CBSMsg().getContents());
	}

	/**
	 * templateに対してEKK0931B001の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template
	 * @param	work
	 */
	private void mappingEKK0931B001InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0931B001CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0931B001CBSMsg.TEMPLATEID, EKK0931B001);
		// 機能コード--サービス提供エリア警告対象住所一覧照会
		template.set(EKK0931B001CBSMsg.FUNC_CODE,  FUNC_CD_1);

		// ＫＥＹ＿サービスコード	
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVC_CD,                               JKKSvcAreaKkkuMstConstCC.SEARCH_SVC_CD);
		// ＫＥＹ＿料金グループコード
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_PRC_GRP_CD,                           JKKSvcAreaKkkuMstConstCC.SEARCH_PRC_GRP_CD);
// ▼▼▼▼▼ 料金プランコード複数検索のため、料金コースコードは条件から除外 ▼▼▼▼▼
//		// ＫＥＹ＿料金コースコード	
//		setTemplate(template, work, EKK0931B001CBSMsg.KEY_PCRS_CD,                              JKKSvcAreaKkkuMstConstCC.SEARCH_PCRS_CD);
// ▲▲▲▲▲ 料金プランコード複数検索のため、料金コースコードは条件から除外 ▲▲▲▲▲
		// ＫＥＹ＿料金プランコード	
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_PPLAN_CD,                             JKKSvcAreaKkkuMstConstCC.SEARCH_PPLAN_CD);
		// ＫＥＹ＿チェック種別コード
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_CHK_SBT_CD,                           JKKSvcAreaKkkuMstConstCC.SEARCH_CHECK_SBT_CD);
		// ＫＥＹ＿自動照査チェック対象コード
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_AUTO_SHOSA_CHK_TG_CD,                 JKKSvcAreaKkkuMstConstCC.SEARCH_AUTO_SHOSA_CHECK_CD);
		// ＫＥＹ＿サービス提供エリア警告対象郵便番号
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TG_PCD,                     JKKSvcAreaKkkuMstConstCC.SEARCH_PCD);
		// ＫＥＹ＿サービス提供エリア警告対象住所コード
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TAIAD_CD,                   JKKSvcAreaKkkuMstConstCC.SEARCH_AD_CD);
		// ＫＥＹ＿サービス提供エリア警告対象都道府県名
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TG_STATE_NM,                JKKSvcAreaKkkuMstConstCC.SEARCH_STATE_NM);
		// ＫＥＹ＿サービス提供エリア警告対象市区町村名
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TG_CITY_NM,                 JKKSvcAreaKkkuMstConstCC.SEARCH_CITY_NM);
		// ＫＥＹ＿サービス提供エリア警告対象大字通称名
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TG_OAZTSU_NM,               JKKSvcAreaKkkuMstConstCC.SEARCH_OAZTSU_NM);
		// ＫＥＹ＿サービス提供エリア警告対象字丁目名
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TG_AZCHO_NM,                JKKSvcAreaKkkuMstConstCC.SEARCH_AZCHO_NM);
		// ＫＥＹ＿サービス提供エリア警告対象番地号
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TG_BNCHIGO,                 JKKSvcAreaKkkuMstConstCC.SEARCH_BNCHIGO);
		// ＫＥＹ＿サービス提供エリア警告対象番地号部分一致フラグ
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TG_BNCHIGO_BUBUN_ICCHI_FLG, JKKSvcAreaKkkuMstConstCC.SEARCH_BNCHIGO_PART_MATCH);
		// ＫＥＹ＿サービス提供エリア警告対象住所適用開始年月日
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TAIAD_TSTAYMD,              JKKSvcAreaKkkuMstConstCC.SEARCH_TSTAYMD);
		// ＫＥＹ＿サービス提供エリア警告対象住所適用終了年月日
		setTemplate(template, work, EKK0931B001CBSMsg.KEY_SVTA_KKKU_TAIAD_TENDYMD,              JKKSvcAreaKkkuMstConstCC.SEARCH_TENDYMD);

		setTemplate(template, work, EKK0931B001CBSMsg.SEARCH_TYPE,                              "search_type");
		setTemplate(template, work, EKK0931B001CBSMsg.MAX_SEARCH_NUM,                           "max_search_num");
		setTemplate(template, work, EKK0931B001CBSMsg.DISPLAY_NUM,                              "display_num");
		setTemplate(template, work, EKK0931B001CBSMsg.DISPLAY_PAGE_NUM,                         "display_page_num");
	}

	/**
	 * サービス提供エリア警告対象住所登録<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	work
	 * @param	resultHash
	 * @return	
	 * @throws	Throwable
	 */
	private int callEKK0931D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		CAANMsg template = null;

		// EKK0931D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0931D010CBSMsg.class.getName());
		mappingEKK0931D010InMsg(template, work);

		return callServiceCmn(param, handle, resultHash, template, new EKK0931D010CBSMsg().getContents());
	}

	/**
	 * templateに対してEKK0931D010の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template
	 * @param	work
	 */
	private void mappingEKK0931D010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0931D010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0931D010CBSMsg.TEMPLATEID, EKK0931D010);

		// 機能コード--サービス提供エリア警告対象住所登録
		setTemplate(template, work, EKK0931D010CBSMsg.FUNC_CODE,               JKKSvcAreaKkkuMstConstCC.FUNC_CODE);
		// サービスコード
		setTemplate(template, work, EKK0931D010CBSMsg.SVC_CD,                  JKKSvcAreaKkkuMstConstCC.SVC_CD);
		// 料金グループコード
		setTemplate(template, work, EKK0931D010CBSMsg.PRC_GRP_CD,              JKKSvcAreaKkkuMstConstCC.PRC_GRP_CD);
		// 料金コースコード
		setTemplate(template, work, EKK0931D010CBSMsg.PCRS_CD,                 JKKSvcAreaKkkuMstConstCC.PCRS_CD);
		// 料金プランコード
		setTemplate(template, work, EKK0931D010CBSMsg.PPLAN_CD,                JKKSvcAreaKkkuMstConstCC.PPLAN_CD);
		// チェック種別コード
		setTemplate(template, work, EKK0931D010CBSMsg.CHK_SBT_CD,              JKKSvcAreaKkkuMstConstCC.CHECK_SBT_CD);
		// サービス提供エリア警告対象住所コード
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TAIAD_CD,      JKKSvcAreaKkkuMstConstCC.AD_CD);
		// サービス提供エリア警告対象郵便番号
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TG_PCD,        JKKSvcAreaKkkuMstConstCC.PCD);
		// サービス提供エリア警告対象都道府県名
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TG_STATE_NM,   JKKSvcAreaKkkuMstConstCC.STATE_NM);
		// サービス提供エリア警告対象市区町村名
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TG_CITY_NM,    JKKSvcAreaKkkuMstConstCC.CITY_NM);
		// サービス提供エリア警告対象大字通称名
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TG_OAZTSU_NM,  JKKSvcAreaKkkuMstConstCC.OAZTSU_NM);
		// サービス提供エリア警告対象字丁目名
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TG_AZCHO_NM,   JKKSvcAreaKkkuMstConstCC.AZCHO_NM);
		// サービス提供エリア警告対象番地号
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TG_BNCHIGO,    JKKSvcAreaKkkuMstConstCC.BNCHIGO);
		// サービス提供エリア警告対象住所適用開始年月日
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TAIAD_TSTAYMD, JKKSvcAreaKkkuMstConstCC.TSTAYMD);
		// サービス提供エリア警告対象住所適用終了年月日
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_TAIAD_TENDYMD, JKKSvcAreaKkkuMstConstCC.TENDYMD_ADD);
		// サービス提供エリア警告広域指定範囲コード
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_WDASTISCP_CD,  JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_WDASTISCP_CD);
		// 自動照査チェック対象コード
		setTemplate(template, work, EKK0931D010CBSMsg.AUTO_SHOSA_CHK_TG_CD,    JKKSvcAreaKkkuMstConstCC.AUTO_SHOSA_CHECK_CD_ADD);
		// サービス提供エリア警告理由メモ
		setTemplate(template, work, EKK0931D010CBSMsg.SVTA_KKKU_RSN_MEMO,      JKKSvcAreaKkkuMstConstCC.BIKO_ADD);
	}

	/**
	 * サービス提供エリア警告対象住所変更<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	work
	 * @param	resultHash
	 * @return	
	 * @throws	Throwable
	 */
	private int callEKK0931C010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		CAANMsg template = null;

		// EKK0931C010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0931C010CBSMsg.class.getName());
		mappingEKK0931C010InMsg(template, work);

		return callServiceCmn(param, handle, resultHash, template, new EKK0931C010CBSMsg().getContents());
	}

	/**
	 * templateに対してEKK0931C010の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template
	 * @param	work
	 */
	private void mappingEKK0931C010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0931C010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0931C010CBSMsg.TEMPLATEID, EKK0931C010);

		// 機能コード--サービス提供エリア警告対象住所登録
		setTemplate(template, work, EKK0931C010CBSMsg.FUNC_CODE,               JKKSvcAreaKkkuMstConstCC.FUNC_CODE);
		// サービス提供エリア警告対象住所番号
		setTemplate(template, work, EKK0931C010CBSMsg.SVTA_KKKU_TAIAD_NO,      JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_UPD);
		// サービス提供エリア警告対象住所適用終了年月日
		setTemplate(template, work, EKK0931C010CBSMsg.SVTA_KKKU_TAIAD_TENDYMD, JKKSvcAreaKkkuMstConstCC.TENDYMD_UPD);
		// 自動照査チェック対象コード
		setTemplate(template, work, EKK0931C010CBSMsg.AUTO_SHOSA_CHK_TG_CD,    JKKSvcAreaKkkuMstConstCC.AUTO_SHOSA_CHECK_CD_UPD);
		// サービス提供エリア警告理由メモ
		setTemplate(template, work, EKK0931C010CBSMsg.SVTA_KKKU_RSN_MEMO,      JKKSvcAreaKkkuMstConstCC.BIKO_UPD);
		// 更新年月日時分秒（更新前）
		setTemplate(template, work, EKK0931C010CBSMsg.UPD_DTM_BF,              JKKSvcAreaKkkuMstConstCC.UPD_DTM_UPD);
	}

	/**
	 * サービス提供エリア警告対象住所論理削除<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	work
	 * @param	resultHash
	 * @return	
	 * @throws	Throwable
	 */
	private int callEKK0931E010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		CAANMsg template = null;

		// EKK0931E010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0931E010CBSMsg.class.getName());
		mappingEKK0931E010InMsg(template, work);

		return callServiceCmn(param, handle, resultHash, template, new EKK0931E010CBSMsg().getContents());
	}

	/**
	 * templateに対してEKK0931E010の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template
	 * @param	work
	 */
	private void mappingEKK0931E010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0931E010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0931E010CBSMsg.TEMPLATEID, EKK0931E010);

		// 機能コード--サービス提供エリア警告対象住所登録
		setTemplate(template, work, EKK0931E010CBSMsg.FUNC_CODE,          JKKSvcAreaKkkuMstConstCC.FUNC_CODE);
		// サービス提供エリア警告対象住所番号
		setTemplate(template, work, EKK0931E010CBSMsg.SVTA_KKKU_TAIAD_NO, JKKSvcAreaKkkuMstConstCC.SVTA_KKKU_TAIAD_NO_DEL);
		// 更新年月日時分秒（更新前）
		setTemplate(template, work, EKK0931E010CBSMsg.UPD_DTM_BF,         JKKSvcAreaKkkuMstConstCC.UPD_DTM_DEL);
	}

	/**************************************************************************/
	/** 共通処理                                                             **/
	/**************************************************************************/
	/**
	 * 共通処理<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		(I) 業務データ取得用I/F
	 * @param	fixedText	(I) ユーザ定義文字列
	 * @return	
	 * @exception	Throwableがスローされます 。
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		HashMap<String, Object> map = new HashMap<String, Object>();
		// SCインプット共通データ
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		map.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		map.put(JCMConstants.USECASE_ID_KEY,     param.getUsecaseID());
		// オペレーションID
		map.put(JCMConstants.OPERATION_ID_KEY,   param.getOperationID());
		// サービス呼び出し区分
		map.put(JCMConstants.CALL_TYPE_KEY,      param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		map.put(JCMConstants.CLIENT_HOST_NAME_KEY,  param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		map.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		map.put(JCMConstants.INVOKE_GAMEN_ID_KEY,   param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		map.put(JCMConstants.OPERATOR_ID_KEY,       param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		map.put(JCMConstants.TEMPLATE_LIST_KEY,     null);

		return map;
	}

	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * @param	param		デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param	templates	CAANMsgクラス配列
	 * @param	returnCode	リターンコード
	 * @return				業務データ取得・書込用I/F
	 * @throws	Throwable
	 */
	public IRequestParameterReadWrite editErrorInfo(
			IRequestParameterReadWrite param,
			CAANMsg[] templates,
			int returnCode
	) throws Throwable
	{
		return param;
	}

	/**
	 * 業務データの取得処理です。<br>
	 * <br>
	 * @param	rslt	SVIFの実行結果データ
	 * @return			業務データ
	 */
	private HashMap<String, Object> getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate.getMsgData();
	}

	/**
	 * Nullマッピングで埋める<br>
	 * <br>
	 * @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);
		}
	}

	/**
	 * S/IF実効共通処理<br>
	 * <br>
	 * @param	param
	 * @param	handle
	 * @param	resultHash
	 * @param	template
	 * @param	contents
	 * @return	
	 * @throws	Throwable
	 */
	private int callServiceCmn(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> resultHash,
			CAANMsg template,
			Object[][] contents
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, contents);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}

	/**
	 * 条件部の共通する項目の設定<br>
	 * <br>
	 * @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
	 * @return
	 * @throws	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;

	}

	/**
	 * エラーチェック処理です。 <br>
	 * <br>
	 * @param	msgList		サービスインタフェース実行結果
	 * @throws	SCCallException
	 */
	private void errChk(Map<?, ?> msgList) throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}

	/**
	 * S/IF取得結果をリストに変換<br>
	 * <br>
	 * @param	resultHash
	 * @param	resultListKey
	 * @return	
	 */
	private List<HashMap<String, Object>> chgCAANMsgToList(HashMap<String, Object> resultHash, String resultListKey)
	{
		List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

		CAANMsg[] caanMsgs = (CAANMsg[])resultHash.get(resultListKey);
		if (caanMsgs.length != 0)
		{
			for (int i = 0; i < caanMsgs.length; i++)
			{
				HashMap<String, Object> caanMsg = caanMsgs[i].getMsgData();
				list.add(caanMsg);
			}
		}

		return list;
	}

	/**
	 * S/IF取得結果をリストに変換<br>
	 * <br>
	 * @param	resultHash
	 * @param	resultListKey
	 * @return	
	 */
	private List<HashMap<String, Object>> chgCAANMsgToListAdd(
			List<HashMap<String, Object>> list,
			HashMap<String, Object> resultHash,
			String resultListKey
	)
	{
		CAANMsg[] caanMsgs = (CAANMsg[])resultHash.get(resultListKey);
		if (caanMsgs.length != 0)
		{
			for (int i = 0; i < caanMsgs.length; i++)
			{
				HashMap<String, Object> caanMsg = caanMsgs[i].getMsgData();
				list.add(caanMsg);
			}
		}

		return list;
	}

	/**
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする<br>
	 * <br>
	 * @param	msgList		CAANMsgクラス
	 * @param	param		業務データ取得・書込用I/F
	 * @param	contents	ユーザ任意文字列
	 * @return				業務データ取得・書込用I/F
	 * @throws	Throwable
	 */
	private IRequestParameterReadWrite editResultRP(Map<?, ?> msgList, IRequestParameterReadWrite param, Object[][] contents)
	throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
		//String templateId = template.getString(JCMConstants.TEMPLATE_ID_KEY);
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixText);

		// ユーザデータ情報にエラー情報をマッピング

		for (int i = 0; contents != null && i < contents.length; i++)
		{
			String element = null;
			element = (String)contents[i][0];
			if (element.indexOf("_err") > 0)
			{
				if (!template.isNull(element))
				{
					if (!inMap.containsKey(element))
					{
						inMap.put(element, template.getString(element));
					}
				}
			}
		}

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}

	/**
	 * オブジェクトに値が設定されているか判定します。<br>
	 * <br>
	 * @param	arg0	判定するオブジェクト
	 * @return			オブジェクトに値が設定されていない場合はtrue
	 */
	private boolean isNull(Object arg0) 
	{
		if (arg0 == null) 
		{
			return true;
		}

		return 0 == arg0.toString().length();
	}

	/**
	 * ワークマップセット<br>
	 * <br>
	 * @param	work
	 * @param	userData
	 * @param	key
	 */
	private void setWorkMap(HashMap<String, Object> work, Map<String, Object> userData, String key)
	{
		work.put(key, (String)userData.get(key));
	}

	/**
	 * テンプレートセット<br>
	 * <br>
	 * @param	template
	 * @param	work
	 * @param	templateKey
	 * @param	workKey
	 */
	private void setTemplate(CAANMsg template, Map<String, Object> work, String templateKey, String workKey)
	{
		if (work == null || work.get(workKey) == null || "".equals(work.get(workKey)))
		{
			template.setNull(templateKey);
		}
		else
		{
			template.set(templateKey, (String)work.get(workKey));
		}
	}
}
