/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUJpAnkHTPlanChgCC
*   ソースファイル名：JFUJpAnkHTPlanChgCC.java
*   作成者          ：富士通
*   日付            ：2016年05月02日
*＜機能概要＞
*   JP案件中eo光ネットホームタイププラン変更コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v24.00    2016/05/02   FJ）西川    新規作成
*   v40.00    2018/12/27   FJ）張本    変更【ANK-3412-03-00】特約プログラム対応
*   v41.00    2019/02/27   FJ）張本    変更【ANK-3412-17-00】【５ギガ・１０ギガ】EG切替中のコース変更登録時のチケット利用情報連携
*   v48.00    2020/02/01   FJ）大島    変更【ANK-3777-00-00】【10G】コース変更時のWEB導線見直し
*   v52.00    2021/01/22   FJ) 張本    変更【ANK-3987-00-00】Netflix導入対応（STEP2）
*   v56.00    2022/01/04   FJ）西川    変更【ANK-4018-00-00】【eo定期】5G・10Gコースの料金改訂対応
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

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.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECC0041D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECR0511B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECR0511D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0261D010CBSMsg;

/**
 * JP案件中eo光ネットホームタイププラン変更コモンコンポーネント部品
 *
 * <br>
 * @author 富士通
 */
public class JFUJpAnkHTPlanChgCC extends JFUBaseCC
{

	/** コロン */
	private static final String COLON = "：";

	/** ダブルクォートカンマ */
	private static final String DUBLLEQ_COMMA = "\",";

	/** IN項目:変更前料金コースコード */
	private static final String NOW_PCRS_CD = "now_pcrs_cd";
	/** IN項目:変更後料金コースコード */
	private static final String CHG_PCRS_CD = "chg_pcrs_cd";

	/** ルーター交換結果(料金コース速度コード(カレント)) */
	private static final String RESULT_PCRS_SPEEDCD_CURRENT = "pcrsSpeedCdCurrent";
	/** ルーター交換結果(料金コース速度コード(予約)) */
	private static final String RESULT_PCRS_SPEED_CD_RESERVE = "pcrsSpeedCdReserve";
	/** コース変更有無 */
	private static final String RESULT_CRS_CHG_UM = "crs_chg_um";
	/** ルーター速度種別(プラン変更前) */
	private static final String RESULT_ROUTER_SPEED_SBT_BF = "router_speed_sbt_bf";
	/** ルーター速度種別(プラン変更後) */
	private static final String RESULT_ROUTER_SPEED_SBT_AF = "router_speed_sbt_af";

	/** コース変更申込みによるルーター交換有無 */
	private static final String ROUTER_CHANGE_UM = "router_change_um";
	/** 機器変更有無 */
	private static final String KIKI_CHG_UM = "kiki_chg_um";

	/** コース変更申込みによる工事有無 */
	private static final String KOJI_UM = "koji_um";

	/** フロント用共通関連チェック定義ファイルパス取得キー */
	private static final String KEY_XML_FILE_PATH = "FUROUTER_SPEED_SBT_SETTING_FILE_PATH";
	/** フロント用共通関連チェック定義ファイル */
	private static final String XML_FILE_PATH = JCCBPCommon.getApplicationConst(KEY_XML_FILE_PATH);

	/** XML操作用：料金コース速度コード・ルーター速度種別相関 */
	private static final String TAG_PCRS_SPEED_CD_ROUTER_SPEED_SBT_MAPPING = "PCRS_SPEED_CD_ROUTER_SPEED_SBT_MAPPING";
	/** XML操作用：ルーター速度種別 */
	private static final String TAG_ROUTER_SPEED_SBT = "ROUTER_SPEED_SBT";
	/** XML操作用：料金コース速度コード */
	private static final String ATTR_PCRS_SPEED_CD = "pcrs_speed_cd";

	/* ■□ 料金コース一意照会SC ■□ */
	/** テンプレートID(料金コース一意照会) */
	private static final String TEMPLATE_ID_EKK0791A010 = "EKK0791A010";
	/** テンプレートID(料金コース一意照会明細) */
	private static final String TEMPLATE_ID_EKK0791A010_DETAIL = EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST;
	/** IN項目リスト(料金コース一意照会) */
	private static final List<String> IN_COLUMN_LIST_EKK0791A010 =
			Arrays.asList(EKK0791A010CBSMsg.KEY_PCRS_CD, EKK0791A010CBSMsg.KEY_GENE_ADD_DTM, EKK0791A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェックエラー項目(料金コース一意照会) */
	private static final String ERROR_COLUMN_EKK0791A010 = EKK0791A010CBSMsg.KEY_PCRS_CD_ERR;
	/** SC実行結果取得キー(料金コース一意照会) */
	private static final String TEMP_TEMPLATE_KEY_EKK0791A010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0791A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 工事案件一意照会SC ■□ */
	/** テンプレートID(工事案件一意照会) */
	private static final String TEMPLATE_ID_EKU0011A010 = "EKU0011A010";
	/** テンプレートID(工事案件一意照会明細) */
	private static final String TEMPLATE_ID_EKU0011A010_DETAIL = EKU0011A010CBSMsg.EKU0011A010CBSMSG1LIST;
	/** IN項目リスト(工事案件一意照会) */
	private static final List<String> IN_COLUMN_LIST_EKU0011A010 = Arrays.asList(EKU0011A010CBSMsg.KEY_KOJIAK_NO);
	/** 関連チェックエラー項目(工事案件一意照会) */
	private static final String ERROR_COLUMN_EKU0011A010 = "kojiak_err";
	/** SC実行結果取得キー(工事案件一意照会) */
	private static final String TEMP_TEMPLATE_KEY_EKU0011A010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKU0011A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ CASEファイル作成ワーク一覧照会SC ■□ */
	/** テンプレートID(CASEファイル作成ワーク一覧照会) */
	private static final String TEMPLATE_ID_ECR0511B010 = "ECR0511B010";
	/** テンプレートID(CASEファイル作成ワーク一覧照会) */
	private static final String TEMPLATE_ID_ECR0511B010_DETAIL = ECR0511B010CBSMsg.ECR0511B010CBSMSG1LIST;
	/** IN項目リスト(CASEファイル作成ワーク一覧照会) */
	private static final List<String> IN_COLUMN_LIST_ECR0511B010 =
			Arrays.asList(ECR0511B010CBSMsg.KEY_CSFL_SBT_CD, ECR0511B010CBSMsg.KEY_CSFL_SKSI_ZM_FLG, ECR0511B010CBSMsg.KEY_CSFL_SWK_NO,
					ECR0511B010CBSMsg.KEY_MSKMSHO_NO, ECR0511B010CBSMsg.KEY_SVC_KEI_NO);
	/** 関連チェックエラー項目(CASEファイル作成ワーク一覧照会) */
	private static final String ERROR_COLUMN_ECR0511B010 = ECR0511B010CBSMsg.KEY_CSFL_SBT_CD_ERR;
	/** SC実行結果取得キー(CASEファイル作成ワーク一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_ECR0511B010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_ECR0511B010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 電子ファイル管理登録SC ■□ */
	/** テンプレートID(電子ファイル管理登録) */
	private static final String TEMPLATE_ID_ECC0041D010 = "ECC0041D010";
	/** テンプレートID(電子ファイル管理登録明細) */
	private static final String TEMPLATE_ID_ECC0041D010_DETAIL = null;
	/** IN項目リスト(電子ファイル管理登録) */
	private static final List<String> IN_COLUMN_LIST_ECC0041D010 =
			Arrays.asList(ECC0041D010CBSMsg.SYS_CD, ECC0041D010CBSMsg.FILE_CD, ECC0041D010CBSMsg.EFILE, ECC0041D010CBSMsg.FILE_DEL_YMD,
					ECC0041D010CBSMsg.FILE_SIZE);
	/** 関連チェックエラー項目(電子ファイル管理登録) */
	private static final String ERROR_COLUMN_ECC0041D010 = null;
	/** SC実行結果取得キー(電子ファイル管理登録) */
	private static final String TEMP_TEMPLATE_KEY_ECC0041D010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_ECC0041D010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ ダウンロードファイル管理登録SC ■□ */
	/** テンプレートID(ダウンロードファイル管理登録) */
	private static final String TEMPLATE_ID_EZM0261D010 = "EZM0261D010";
	/** テンプレートID(ダウンロードファイル管理登録明細) */
	private static final String TEMPLATE_ID_EZM0261D010_DETAIL = null;
	/** IN項目リスト(ダウンロードファイル管理登録) */
	private static final List<String> IN_COLUMN_LIST_EZM0261D010 =
			Arrays.asList(EZM0261D010CBSMsg.SYORI_KANRI_NUM, EZM0261D010CBSMsg.BUNSHO_KANRI_NO, EZM0261D010CBSMsg.FILE_NM, EZM0261D010CBSMsg.SIZE,
					EZM0261D010CBSMsg.DATA_CNT, EZM0261D010CBSMsg.FILE_ADD_DTM, EZM0261D010CBSMsg.FILE_DEL_YMD);
	/** 関連チェックエラー項目(ダウンロードファイル管理登録) */
	private static final String ERROR_COLUMN_EZM0261D010 = null;
	/** SC実行結果取得キー(ダウンロードファイル管理登録) */
	private static final String TEMP_TEMPLATE_KEY_EZM0261D010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EZM0261D010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/** 送付先住所：ご契約者住所 */
	private static final String SEND_TO_CONTRACT = "1";
	/** 送付先住所：ご利用場所住所 */
	private static final String SEND_TO_USE_PLACE = "2";
	/** 送付先住所：その他住所 */
	private static final String SEND_TO_SONOTA = "3";

	/** 5G・10Gルーター機器自動交換共通CC */
	static final String CC_RT_KIKI_ATKN = "JKKRouterKikiAtknCmnCC";

	/**
	 * JP案件中eo光ネットホームタイププラン変更情報登録処理
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite addJpAnkHTPlanChg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{

		// ●ファイル管理登録処理(コース変更申込)
		fixedText = "HTPlanChg";
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 工事案件番号（新設）
		String jpAnkKojiakNo = (String)inMap.get("jp_ank_kojiak_no");
		// JP工事案件（新設）情報
		HashMap<String, String> kojiakNewInfo = selectEKU0011A010(handle, param, fixedText, jpAnkKojiakNo);

		// 工事案件番号（撤去）
		String tekkyoKojiakNo = (String)kojiakNewInfo.get(EKU0011A010CBSMsg1List.AD_CHG_TEKKYO_KJAK_NO);
		// JP工事案件（撤去）情報
		HashMap<String, String> kojiakTekkyoInfo = selectEKU0011A010(handle, param, fixedText, tekkyoKojiakNo);

		addFileInfo(handle, param, fixedText, kojiakNewInfo, kojiakTekkyoInfo);
		this.deleteTempArea(param, fixedText);

		// ●ファイル管理登録処理(JP案件の工事取消)
		fixedText = "JpAnKCancel";
		addFileInfo(handle, param, fixedText, kojiakNewInfo, kojiakTekkyoInfo);
		this.deleteTempArea(param, fixedText);

		return param;
	}

	/**
	 * 工事情報取得処理
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	private HashMap<String, String> selectEKU0011A010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String kojiakNo)
			throws Exception
	{
		HashMap inMap = (HashMap)param.getData(fixedText);
		HashMap<String, String> kojiAkMap = new HashMap<String, String>();

		if (JFUBPCommon.isNull(kojiakNo))
		{
			return kojiAkMap;
		}

		// サービス契約番号
		String svcKeiNo = (String)inMap.get("svc_kei_no");

		// ●工事案件一意照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_EKU0011A010);
		// 上りマッピング
		setInMapKojiAkUniqueSearch(param, fixedText, kojiakNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKU0011A010, TEMPLATE_ID_EKU0011A010_DETAIL, IN_COLUMN_LIST_EKU0011A010,
				ERROR_COLUMN_EKU0011A010);
		List<HashMap> kojiAkUniqueList =
				getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKU0011A010), TEMPLATE_ID_EKU0011A010_DETAIL);

		if (kojiAkUniqueList == null || kojiAkUniqueList.size() == 0)
		{
			return kojiAkMap;
		}

		for (HashMap<String, Object> kojiAkUniqueMap : kojiAkUniqueList)
		{
			// 工事受付契機異動区分
			String kojiakIdoDiv = (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);

			if (JFUStrConst.CD00576_00067.equals(kojiakIdoDiv))
			{
				// E-PON→GE-PON設備切替の場合
				// JP案件のコース変更収容工事中と判断。

				// ●CASEファイル作成ワーク一覧照会
				// ユーザデータ初期化
				initData(param, fixedText, IN_COLUMN_LIST_ECR0511B010);
				// 検索エラーなし設定
				ignoreSearchError(param, fixedText);

				// 上りマッピング
				setInMapCsflSwkSearch(param, fixedText, svcKeiNo, kojiakNo);

				// サービスIF実行
				executeSC(handle, param, fixedText, TEMPLATE_ID_ECR0511B010, TEMPLATE_ID_ECR0511B010_DETAIL, IN_COLUMN_LIST_ECR0511B010,
						ERROR_COLUMN_ECR0511B010);
				List<HashMap> csflSwkList =
						getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_ECR0511B010), TEMPLATE_ID_ECR0511B010_DETAIL);

				if (csflSwkList == null || csflSwkList.size() == 0)
				{
					// JP案件のコース変更収容工事中のコース変更の2重申込みが存在しない場合

					// 工事案件番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_NO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_NO));
					// 工事案件ステータス
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_STAT, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_STAT));
					// 工事案件ステータス名
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_STAT_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_STAT_NM));
					// 住所変更撤去工事案件番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.AD_CHG_TEKKYO_KJAK_NO, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.AD_CHG_TEKKYO_KJAK_NO));
					// SYSID
					kojiAkMap.put(EKU0011A010CBSMsg1List.SYSID, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.SYSID));
					// 連携サービス契約番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.RNKI_SVC_KEI_NO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.RNKI_SVC_KEI_NO));
					// 請求契約番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.SEIKY_KEI_NO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.SEIKY_KEI_NO));
					// 工事案件種別コード
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD));
					// 工事案件種別名
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_SBT_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_NM));
					// 申込受付年月日
					kojiAkMap.put(EKU0011A010CBSMsg1List.MSKM_UK_YMD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.MSKM_UK_YMD));
					// 場所番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.PLACE_NO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.PLACE_NO));
					// 転宅先住所コード
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_CD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_CD));
					// 転宅先郵便番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_PCD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_PCD));
					// 転宅先都道府県名
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_STATE_NM, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_STATE_NM));
					// 転宅先市区町村名
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_CITY_NM, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_CITY_NM));
					// 転宅先大字通称名
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_OAZTSU_NM, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_OAZTSU_NM));
					// 転宅先字丁目名
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AZCHO_NM, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AZCHO_NM));
					// 転宅先住所番地号
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_BNCHIGO, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_AD_BNCHIGO));
					// 転宅先住所補記・建物名
					kojiAkMap
							.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRTTM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRTTM));
					// 転宅先住所補記・部屋番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRRM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_SAKI_ADRRM));
					// お客様名
					kojiAkMap.put(EKU0011A010CBSMsg1List.CUST_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_NM));
					// お客様カナ名
					kojiAkMap.put(EKU0011A010CBSMsg1List.CUST_KANA, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_KANA));
					// お客様自宅電話番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.CUST_HOME_TELNO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_HOME_TELNO));
					// お客様携帯電話番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.CUST_KTAI_TELNO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_KTAI_TELNO));
					// お客様連絡先電話番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.CUST_RRKS_TELNO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.CUST_RRKS_TELNO));
					// 連絡先勤務先名
					kojiAkMap.put(EKU0011A010CBSMsg1List.RRKS_OFFC_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.RRKS_OFFC_NM));
					// 開通後電話利用希望有無
					kojiAkMap.put(EKU0011A010CBSMsg1List.OPEN_AF_TEL_USE_KIBO_UM, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.OPEN_AF_TEL_USE_KIBO_UM));
					// 契約者住所コード
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_AD_CD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_AD_CD));
					// 契約者郵便番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_PCD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_PCD));
					// 契約者都道府県名
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_STATE_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_STATE_NM));
					// 契約者市区町村名
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_CITY_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_CITY_NM));
					// 契約者大字通称名
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_OAZTSU_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_OAZTSU_NM));
					// 契約者字丁目名
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_AZCHO_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_AZCHO_NM));
					// 契約者住所番地号
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_AD_BNCHIGO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_AD_BNCHIGO));
					// 契約者住所補記・建物名
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_ADRTTM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_ADRTTM));
					// 契約者住所補記・部屋番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.KEISHA_ADRRM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KEISHA_ADRRM));
					// 転宅前住所コード
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_CD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_CD));
					// 転宅前郵便番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_PCD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_PCD));
					// 転宅前都道府県名
					kojiAkMap
							.put(EKU0011A010CBSMsg1List.TENTAKU_BF_STATE_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_STATE_NM));
					// 転宅前市区町村名
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_CITY_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_CITY_NM));
					// 転宅前大字通称名
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_OAZTSU_NM, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.TENTAKU_BF_OAZTSU_NM));
					// 転宅前字丁目名
					kojiAkMap
							.put(EKU0011A010CBSMsg1List.TENTAKU_BF_AZCHO_NM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_AZCHO_NM));
					// 転宅前住所番地号
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_BNCHIGO, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.TENTAKU_BF_AD_BNCHIGO));
					// 転宅前住所補記・建物名
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRTTM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRTTM));
					// 転宅前住所補記・部屋番号
					kojiAkMap.put(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRRM, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.TENTAKU_BF_ADRRM));
					// 工事受付契機異動区分
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV, (String)kojiAkUniqueMap
							.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV));
					// 工事案件連絡事項
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_RRK_JIKO, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_RRK_JIKO));
					// 工事案件備考1
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_BIKO_1, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_BIKO_1));
					// 工事案件備考2
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_BIKO_2, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_BIKO_2));
					// 工事案件実施年月日
					kojiAkMap.put(EKU0011A010CBSMsg1List.KOJIAK_JSSI_YMD, (String)kojiAkUniqueMap.get(EKU0011A010CBSMsg1List.KOJIAK_JSSI_YMD));
					break;
				}
				else
				{
					// 2重申込みエラー
					// 工事未完了エラー
					setRelationErrorInfo(param, "EKU0011B010", "kojiak_err", fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
			}
		}
		return kojiAkMap;
	}

	/**
	 * 上りマッピング項目設定(工事案件一意照会)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param kojiAkNo 工事案件番号
	 * @throws RequestParameterException
	 */
	private void setInMapKojiAkUniqueSearch(IRequestParameterReadWrite param, String fixedText, String kojiAkNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿工事案件番号
		inMap.put(EKU0011A010CBSMsg.KEY_KOJIAK_NO, kojiAkNo);

	}

	/**
	 * 上りマッピング項目設定(CASEファイル作成ワーク一覧照会)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @param kojiAkNo 工事案件番号
	 * @throws RequestParameterException
	 */
	private void setInMapCsflSwkSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String kojiAkNo)
			throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿ＣＡＳＥファイル種別コード(001:コース変更申込)
		inMap.put(ECR0511B010CBSMsg.KEY_CSFL_SBT_CD, JFUStrConst.CD01688_001);
		// ＫＥＹ＿申込書番号(JP案件中のコース変更と工事案件番号は同じ)
		inMap.put(ECR0511B010CBSMsg.KEY_MSKMSHO_NO, kojiAkNo);
		// ＫＥＹ＿サービス契約番号
		inMap.put(ECR0511B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}

	/**
	 * ファイル管理登録処理(電子ファイル管理登録、ダウンロードファイル管理登録、CASEファイル作成ワーク登録）
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	private void addFileInfo(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, String> kojiakNewInfo,
			HashMap<String, String> kojiakTekkyoInfo) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ●電子ファイル管理登録
		// ユーザデータ初期化
		setInMapECC0041D010(param, fixedText);
		String fileSize = (String)inMap.get(ECC0041D010CBSMsg.FILE_SIZE);

		// 上りマッピングと登録サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_ECC0041D010, TEMPLATE_ID_ECC0041D010_DETAIL, IN_COLUMN_LIST_ECC0041D010,
				ERROR_COLUMN_ECC0041D010);

		// 処理結果取得
		HashMap ecc0041d010Map = (HashMap)inMap.get(getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_ECC0041D010));
		ecc0041d010Map.put(ECC0041D010CBSMsg.FILE_SIZE, fileSize);

		// ●ダウンロードファイル管理登録
		// ユーザデータ初期化
		setInMapEZM0261D010(param, fixedText, ecc0041d010Map);
		// 上りマッピングと登録サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EZM0261D010, TEMPLATE_ID_EZM0261D010_DETAIL, IN_COLUMN_LIST_EZM0261D010,
				ERROR_COLUMN_EZM0261D010);
		// 処理結果取得
		HashMap ezm0261d010Map = (HashMap)inMap.get(getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EZM0261D010));

		// ●CASEファイル作成ワーク登録
		setInMapECR0511D010(handle, param, fixedText, kojiakNewInfo, kojiakTekkyoInfo);
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		JFUBPCommon.addCaseFileRnkData(handle, param, fixedText);
	}

	/**
	 * 上りマッピング項目設定(電子ファイル管理登録）
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> setInMapECC0041D010(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException,
			UnsupportedEncodingException
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
		StringBuffer efileBf = new StringBuffer();

		// ヘッダー情報

		// 申込内容
		if ("HTPlanChg".equals(fixedText))
		{
// ANK-3777-00-00 MOD START
			// コース変更申込の場合
			efileBf.append("\"申込内容\",\"SYSID\",\"お客さまID\",\"申込日\",\"変更後コース\",\"即割（変更後）\",\"高速割（変更後）\",\"工事案件番号\",\"工事アポ連絡先\",\"現在登録機器\",\"多機能ルーター（変更後）\",\"機器送付先\",\"登録証送付先\",\"チケット残枚数\",\"利用施策\",\"必要チケット枚数\"\r\n");
// ANK-3777-00-00 MOD END

			efileBf.append(JFUStrConst.S_DUBLLEQ).append("収容替え工事中コース変更申し込み").append(DUBLLEQ_COMMA);

		}
		else
		{
			// JP案件の工事取消の場合
			efileBf.append("\"申込内容\",\"SYSID\",\"お客さまID\",\"申込日\",\"変更後コース\",\"工事案件番号\",\"工事アポ連絡先\",\"現在登録機器\",\"機器送付先\",\"登録証送付先\"\r\n");

			efileBf.append(JFUStrConst.S_DUBLLEQ).append("JP案件キャンセル").append(DUBLLEQ_COMMA);
		}

		//SYSID
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(toEmpty(inMap.get("sysid"))).append(DUBLLEQ_COMMA);

		//お客さまID
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(toEmpty(inMap.get("svc_kei_no"))).append(DUBLLEQ_COMMA);

		//申込日
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(String.valueOf(inMap.get("YYYYMMDDhhmmssSSS")).substring(0, 8)).append(DUBLLEQ_COMMA);

		//変更後コース
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(toEmpty(inMap.get("chg_pcrs_nm"))).append(DUBLLEQ_COMMA);

		// 即割（変更後）
		if ("HTPlanChg".equals(fixedText))
		{
			String skwrDispNm = "-";
			String skwrDispFlg = (String)toEmpty(inMap.get("skwr_disp_flg"));
			if ("1".equals(skwrDispFlg))
			{
				// 即割表示

				String nowSelSokuwari = (String)toEmpty(inMap.get("now_sel_sokuwari"));
				String chgSelSokuwari = (String)toEmpty(inMap.get("chg_sel_sokuwari"));

				if ("1".equals(nowSelSokuwari))
				{
					skwrDispNm = "申し込み済み";
				}
				else if ("1".equals(chgSelSokuwari))
				{
					skwrDispNm = "申し込む";
				}
				else
				{
					skwrDispNm = "申し込まない";
				}
			}

			//即割コース
			efileBf.append(JFUStrConst.S_DUBLLEQ).append(skwrDispNm).append(DUBLLEQ_COMMA);
		}
		else
		{
			// 出力しない
		}

		// 高速割（変更後）
		if ("HTPlanChg".equals(fixedText))
		{
			//高速割コース
			efileBf.append(JFUStrConst.S_DUBLLEQ).append("-").append(DUBLLEQ_COMMA);
		}
		else
		{
			// 出力しない
		}

		//工事案件番号(JP案件の工事番号「住所変更(新設)」)
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(toEmpty(inMap.get("jp_ank_kojiak_no"))).append(DUBLLEQ_COMMA);

		//工事アポ連絡先(登録証送付ありの場合、選択された住所にひもづく電話番号を編集)
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(toEmpty(inMap.get("disp_sendto_telno"))).append(DUBLLEQ_COMMA);

		// 現在登録機器(契約がある場合、多機能ルーター or 有線ルーター or 無線ルーターの製造番号を編集)
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(toEmpty(inMap.get("kiki_seizo_no"))).append(DUBLLEQ_COMMA);
// ANK-3777-00-00 ADD START
		if ("HTPlanChg".equals(fixedText))
		{
			// 多機能ルーター（変更後）（多機能ルーター申し込まれた場合に申込内容を編集）
			efileBf.append(JFUStrConst.S_DUBLLEQ).append(toEmpty(inMap.get("router_mskm"))).append(DUBLLEQ_COMMA);
		}
// ANK-3777-00-00 ADD END
		//機器送付先
		efileBf.append(JFUStrConst.S_DUBLLEQ).append("工事会社配送").append(DUBLLEQ_COMMA);

		String sendAddress = (String)toEmpty(inMap.get("send_address"));
		String sendAddressNm = JFUStrConst.EMPTY;
		if (SEND_TO_CONTRACT.equals(sendAddress))
		{
			// ご契約者住所の場合
			sendAddressNm = "契約者住所";

		}
		else if (SEND_TO_USE_PLACE.equals(sendAddress))
		{
			// ご利用場所住所の場合
			sendAddressNm = "利用場所住所";
		}
		else if (SEND_TO_SONOTA.equals(sendAddress))
		{
			// その他住所の場合
			sendAddressNm = toEmpty(inMap.get("disp_sendto_zip_cd")) + toEmpty(inMap.get("disp_sendto_address"));
		}
		else
		{
			// 上記以外で値が設定されている場合
			// 送付先住所オプション不正
		}
		efileBf.append(JFUStrConst.S_DUBLLEQ).append(sendAddressNm);

		if ("HTPlanChg".equals(fixedText))
		{
			efileBf.append(DUBLLEQ_COMMA);
		}
		else
		{
			efileBf.append(JFUStrConst.S_DUBLLEQ);
		}

		// チケット残枚数
		if ("HTPlanChg".equals(fixedText))
		{
			String ticNumDisp = "-";
			String ticNum = (String)toEmpty(inMap.get("tic_num"));

			if (!JFUBPCommon.isNull(ticNum))
			{
				ticNumDisp = ticNum + "枚";
			}

			//チケット残枚数
			efileBf.append(JFUStrConst.S_DUBLLEQ).append(ticNumDisp).append(DUBLLEQ_COMMA);
		}
		else
		{
			// 出力しない
		}

		// 利用施策
		if ("HTPlanChg".equals(fixedText))
		{
			String sisakNmDisp = "-";
			String sisakNm = (String)toEmpty(inMap.get("sisak_nm"));

			if (!JFUBPCommon.isNull(sisakNm))
			{
				sisakNmDisp = sisakNm;
			}

			//利用施策
			efileBf.append(JFUStrConst.S_DUBLLEQ).append(sisakNmDisp).append(DUBLLEQ_COMMA);
		}
		else
		{
			// 出力しない
		}

		// 必要チケット枚数
		if ("HTPlanChg".equals(fixedText))
		{
			String necTicNumDisp = "-";
			String necTicNum = (String)toEmpty(inMap.get("necessary_ticket_cnt"));

			if (!JFUBPCommon.isNull(necTicNum))
			{
				necTicNumDisp = necTicNum + "枚";
			}

			//必要チケット枚数
			efileBf.append(JFUStrConst.S_DUBLLEQ).append(necTicNumDisp).append(JFUStrConst.S_DUBLLEQ);
		}
		else
		{
			// 出力しない
		}

		efileBf.append(JFUStrConst.RETURN_CODE);

		String efile = efileBf.toString();

		JSYejbLog.println(JSYLogBase.DEBUG, this.getClass(), "csvData>>>" + efile);

		byte[] efileByteArray = efile.getBytes("Windows-31J");

		//SJISのバイト配列に変換して返す
		inMap.put(ECC0041D010CBSMsg.FILE_CD, JFUStrConst.EMPTY);

		inMap.put(ECC0041D010CBSMsg.SYS_CD, "FU");
		inMap.put(ECC0041D010CBSMsg.FILE_CD, JFUStrConst.EMPTY);
		inMap.put(ECC0041D010CBSMsg.EFILE, efileByteArray);
		inMap.put(ECC0041D010CBSMsg.FILE_DEL_YMD, "20991231");
		inMap.put(ECC0041D010CBSMsg.FILE_SIZE, String.valueOf(efileByteArray.length));

		return inMap;
	}

	/**
	 * 上りマッピング項目設定(ダウンロードファイル管理登録）
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param ecc0041d010Map 電子ファイル管理登録マップ
	 * @return
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> setInMapEZM0261D010(IRequestParameterReadWrite param, String fixedText, HashMap ecc0041d010Map)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// 機能コード設定(1:チェック&更新)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ダウンロードファイル管理登録.処理管理番号
		if ("HTPlanChg".equals(fixedText))
		{
			inMap.put(EZM0261D010CBSMsg.SYORI_KANRI_NUM, "000000000148");
		}
		else
		{
			inMap.put(EZM0261D010CBSMsg.SYORI_KANRI_NUM, "000000000149");
		}

		// ダウンロードファイル管理登録.ファイル名
		if ("HTPlanChg".equals(fixedText))
		{
			inMap.put(EZM0261D010CBSMsg.FILE_NM, "収容替え工事中コース変更申し込み_" + inMap.get("YYYYMMDDhhmmssSSS") + ".csv");
		}
		else
		{
			inMap.put(EZM0261D010CBSMsg.FILE_NM, "JP案件キャンセル_" + inMap.get("YYYYMMDDhhmmssSSS") + ".csv");
		}
		// 電子ファイル管理登録マップ.電子ファイル管理番号 → ダウンロードファイル管理登録.電子ファイル管理番号
		inMap.put(EZM0261D010CBSMsg.BUNSHO_KANRI_NO, ecc0041d010Map.get("efile_kanri_no"));
		// 電子ファイル管理登録マップ.ファイルサイズ → ダウンロードファイル管理登録.ファイルサイズ
		inMap.put(EZM0261D010CBSMsg.SIZE, ecc0041d010Map.get("file_size"));
		// 内部変数.データ件数 → ダウンロードファイル管理登録.データ件数
		inMap.put(EZM0261D010CBSMsg.DATA_CNT, "1");
		// 電子ファイル管理登録マップ.登録年月日時分秒 → ダウンロードファイル管理登録.ファイル登録日時
		inMap.put(EZM0261D010CBSMsg.FILE_ADD_DTM, ecc0041d010Map.get("add_dtm"));

		return inMap;
	}

	/**
	 * 上りマッピング項目設定(CASEファイル作成ワーク登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws Exception
	 */
	private void setInMapECR0511D010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, String> kojiakNewInfo,
			HashMap<String, String> kojiakTekkyoInfo) throws Exception
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// CASEファイル種別コード
		if ("HTPlanChg".equals(fixedText))
		{
			// 「001：JP案件の工事取消」
			inMap.put(ECR0511D010CBSMsg.CSFL_SBT_CD, "001");
		}
		else
		{
			// 「002：」
			inMap.put(ECR0511D010CBSMsg.CSFL_SBT_CD, "002");
		}
		// 申込受付年月日時分秒
		inMap.put(ECR0511D010CBSMsg.MSKM_UK_DTM, inMap.get("YYYYMMDDhhmmssSSS"));
		// 問合せ客タイプ名
		inMap.put(ECR0511D010CBSMsg.PROSCST_TYPE_NM, "加入者");
		// サービス契約番号
		inMap.put(ECR0511D010CBSMsg.SVC_KEI_NO, toEmpty(inMap.get("svc_kei_no")));
		// 問合せ客名
		inMap.put(ECR0511D010CBSMsg.PROSCST_NM, JFUStrConst.EMPTY);
		// 問合せ客カナ名
		inMap.put(ECR0511D010CBSMsg.PROSCST_KANA, JFUStrConst.EMPTY);
		// 問合せ客電話番号
		inMap.put(ECR0511D010CBSMsg.PROSCST_TELNO, JFUStrConst.EMPTY);
		// 問合せ客携帯電話番号
		inMap.put(ECR0511D010CBSMsg.PROSCST_KTAI_TELNO, JFUStrConst.EMPTY);
		// 問合せ客郵便番号
		inMap.put(ECR0511D010CBSMsg.PROSCST_PCD, JFUStrConst.EMPTY);
		// 問合せ客住所
		inMap.put(ECR0511D010CBSMsg.PROSCST_AD, JFUStrConst.EMPTY);
		// 問合せ客性別
		inMap.put(ECR0511D010CBSMsg.PROSCST_SEX, JFUStrConst.EMPTY);
		// 問合せ客生年月日
		inMap.put(ECR0511D010CBSMsg.PROSCST_BIRTHD, JFUStrConst.EMPTY);
		// 問合せ状態名
		inMap.put(ECR0511D010CBSMsg.TOIAWASE_STAT_NM, "クローズ");
		// 対応記録ステータス名
		inMap.put(ECR0511D010CBSMsg.TAIOKRK_STAT_NM, "処理中");
		// 受付者
		inMap.put(ECR0511D010CBSMsg.UKETSUKESYA, "OTHER_SYSTEM");
		// 担当者
		inMap.put(ECR0511D010CBSMsg.TNTSHA, "OTHER_SYSTEM");
		// キューBOX名
		if ("HTPlanChg".equals(fixedText))
		{
			inMap.put(ECR0511D010CBSMsg.QUE_BOX_NM, "【受付】コース変更申込");
		}
		else
		{
			inMap.put(ECR0511D010CBSMsg.QUE_BOX_NM, "【受付】JP案件の工事取消");
		}
		// 問合せ受付種別名
		inMap.put(ECR0511D010CBSMsg.TOIAWASE_UK_SBT_NM, "他システム");
		// タイトル
		if ("HTPlanChg".equals(fixedText))
		{
			inMap.put(ECR0511D010CBSMsg.TITLE, "収容替え工事中コース変更申し込み");
		}
		else
		{
			inMap.put(ECR0511D010CBSMsg.TITLE, "JP案件キャンセル");
		}
		// カテゴリー名1
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_1, "ｉｎｆｏメール");
		// カテゴリー名2
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_2, "ユーザーサポート");
		// カテゴリー名3
		if ("HTPlanChg".equals(fixedText))
		{
			inMap.put(ECR0511D010CBSMsg.CTGR_NM_3, "コース変更手続き");
		}
		else
		{
			inMap.put(ECR0511D010CBSMsg.CTGR_NM_3, "JP案件の工事取消手続き");
		}
		// カテゴリー名4
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_4, "フォームメール");
		// カテゴリー名5
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_5, JFUStrConst.EMPTY);
		// カテゴリー名6
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_6, JFUStrConst.EMPTY);
		// カテゴリー名7
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_7, JFUStrConst.EMPTY);
		// カテゴリー名8
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_8, JFUStrConst.EMPTY);
		// カテゴリー名9
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_9, JFUStrConst.EMPTY);
		// カテゴリー名10
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_10, JFUStrConst.EMPTY);
		// カテゴリー名11
		inMap.put(ECR0511D010CBSMsg.CTGR_NM_11, JFUStrConst.EMPTY);

		// 対応記録履歴
		// 【データ部】
		StringBuffer taioKirokRirekiBf = new StringBuffer();
		int num = 0;
		// カテゴリー名3
		if ("HTPlanChg".equals(fixedText))
		{
			// SYSID
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("SYSID")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("sysid"))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append(JFUStrConst.RETURN_CODE);
			// 現在のサービス
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("現在のサービス")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("now_svc_nm"))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append(JFUStrConst.RETURN_CODE);
			// 現在のコース
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("現在のコース")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("now_plan_nm"))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append(JFUStrConst.RETURN_CODE);
			// 即割（変更前）
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("即割（変更前）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("now_sokuwari_stat"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			// 長割
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("長割")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("now_chowari_stat"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			// 自動継続
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("自動継続")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("now_ib_svc_kei_at_keizk_stat"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			// 変更後のコース
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("変更後のコース")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("chg_pcrs_nm"))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append(JFUStrConst.RETURN_CODE);

			// 即割（変更後）
			String skwrDispNm = "-";
			String skwrDispFlg = (String)toEmpty(inMap.get("skwr_disp_flg"));
			if ("1".equals(skwrDispFlg))
			{
				// 即割表示

				String nowSelSokuwari = (String)toEmpty(inMap.get("now_sel_sokuwari"));
				String chgSelSokuwari = (String)toEmpty(inMap.get("chg_sel_sokuwari"));

				if ("1".equals(nowSelSokuwari))
				{
					skwrDispNm = "申し込み済み";
				}
				else if ("1".equals(chgSelSokuwari))
				{
					skwrDispNm = "申し込む";
				}
				else
				{
					skwrDispNm = "申し込まない";
				}
			}
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("即割（変更後）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(skwrDispNm).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(
							JFUStrConst.RETURN_CODE);

			HashMap resultMap = changeRouter(handle, param, fixedText);

			boolean isRouterChange = false;

			// ルーター速度種別(変更前)
			int routerSpeedSbtBf = Integer.parseInt(JFUBPCommon.nvl((String)resultMap.get(RESULT_ROUTER_SPEED_SBT_BF), JFUStrConst.S_ZERO));
			// ルーター速度種別（変更後）
			int routerSpeedSbtAf = Integer.parseInt(JFUBPCommon.nvl((String)resultMap.get(RESULT_ROUTER_SPEED_SBT_AF), JFUStrConst.S_ZERO));

			// 100M→100M超のプラン変の場合
			if (routerSpeedSbtAf > routerSpeedSbtBf)
			{
				resultMap.put(KOJI_UM, JFUStrConst.CD00002_1);
			}

			// 交換が必要なルーターの場合
			HashMap rtCCMap = (HashMap)param.getData(CC_RT_KIKI_ATKN);

			if (rtCCMap != null)
			{
				// 機器交換ありの場合
				if (JFUStrConst.CD00002_1.equals(rtCCMap.get(KIKI_CHG_UM)))
				{
					resultMap.put(ROUTER_CHANGE_UM, JFUStrConst.CD00002_1);
					isRouterChange = true;
				}
			}

			// 最終結果をユーザデータに格納
			param.setData("JpAnkNtCrsChgInfo", resultMap);
// ANK-3777-00-00 MOD START
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("多機能ルーター")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF);
			String router_mskm = (String)toEmpty(inMap.get("router_mskm"));
			if (isRouterChange)
			{
				taioKirokRirekiBf.append("交換要");
				if (!JFUStrConst.EMPTY.equals(router_mskm) && !"-".equals(router_mskm))
				{
					taioKirokRirekiBf.append("、").append(router_mskm);
				}
			}
			else
			{
				if (!JFUStrConst.EMPTY.equals(router_mskm) && !"-".equals(router_mskm))
				{
					taioKirokRirekiBf.append(router_mskm);
				}
				else
				{
					taioKirokRirekiBf.append("-");
				}
			}
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
// ANK-3777-00-00 MOD END
			String sendAddress = (String)toEmpty(inMap.get("send_address"));
			String sendAddressNm = JFUStrConst.EMPTY;
			if (SEND_TO_CONTRACT.equals(sendAddress))
			{
				// ご契約者住所の場合
				sendAddressNm = "契約者住所";

			}
			else if (SEND_TO_USE_PLACE.equals(sendAddress))
			{
				// ご利用場所住所の場合
				sendAddressNm = "利用場所住所";
			}
			else if (SEND_TO_SONOTA.equals(sendAddress))
			{
				// その他住所の場合
				sendAddressNm = "その他";
			}
			else
			{
				// 上記以外で値が設定されている場合
				// 送付先住所オプション不正
			}

			// ＩＤ登録証送付先住所選択
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("ＩＤ登録証送付先住所選択")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(sendAddressNm).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(
							JFUStrConst.RETURN_CODE);
			//送付先氏名
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("送付先氏名")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("disp_sendto_name"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			//送付先氏名(かな)
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("送付先氏名(かな)")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("disp_sendto_name_kana"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			//送付先郵便番号
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("送付先郵便番号")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("disp_sendto_zip_cd"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			//送付先住所
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("送付先住所")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("disp_sendto_address"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			//送付先電話番号
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("送付先電話番号")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("disp_sendto_telno"))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);

			// チケット残枚数
			String ticNumDisp = "-";
			String ticNum = (String)toEmpty(inMap.get("tic_num"));

			if (!JFUBPCommon.isNull(ticNum))
			{
				ticNumDisp = ticNum + "枚";
			}
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append("チケット残枚数").append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(ticNumDisp).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append(JFUStrConst.RETURN_CODE);

			// 利用施策
			String sisakNmDisp = "-";
			String sisakNm = (String)toEmpty(inMap.get("sisak_nm"));

			if (!JFUBPCommon.isNull(sisakNm))
			{
				sisakNmDisp = sisakNm;
			}
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append("利用施策").append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(sisakNmDisp).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append(JFUStrConst.RETURN_CODE);

			// 必要チケット枚数
			String necTicNumDisp = "-";
			String necTicNum = (String)toEmpty(inMap.get("necessary_ticket_cnt"));

			if (!JFUBPCommon.isNull(necTicNum))
			{
				necTicNumDisp = necTicNum + "枚";
			}
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append("必要チケット枚数").append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(necTicNumDisp).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF);

		}
		else
		{
			// JP案件の工事取消の場合
			// SYSID
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("SYSID")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(inMap.get("sysid"))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF)
					.append(JFUStrConst.RETURN_CODE);
			//工事案件番号（新設）
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("工事案件番号（新設）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(kojiakNewInfo.get(EKU0011A010CBSMsg1List.KOJIAK_NO))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			//工事案件種別（新設）
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("工事案件種別（新設）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(kojiakNewInfo.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD))).append(COLON)
					.append(toEmpty(kojiakNewInfo.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_NM))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(
							JFUStrConst.RETURN_CODE);
			//工事案件ステータス（新設）
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("工事案件ステータス（新設）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(kojiakNewInfo.get(EKU0011A010CBSMsg1List.KOJIAK_STAT))).append(COLON)
					.append(toEmpty(kojiakNewInfo.get(EKU0011A010CBSMsg1List.KOJIAK_STAT_NM))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(
							JFUStrConst.RETURN_CODE);
			//工事案件番号（撤去）
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("工事案件番号（撤去）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(kojiakTekkyoInfo.get(EKU0011A010CBSMsg1List.KOJIAK_NO))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			//工事案件種別（撤去）
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("工事案件種別（撤去）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(kojiakTekkyoInfo.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD))).append(
							COLON).append(toEmpty(kojiakTekkyoInfo.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_NM))).append(
							JFUStrConst.KIGOU_B_KAKKO_END_HALF).append(JFUStrConst.RETURN_CODE);
			//工事案件ステータス（撤去）
			taioKirokRirekiBf.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(padNumToStr(++num)).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF).append("工事案件ステータス（撤去）")
					.append(JFUStrConst.KIGOU_B_KAKKO_STA_HALF).append(toEmpty(kojiakTekkyoInfo.get(EKU0011A010CBSMsg1List.KOJIAK_STAT))).append(COLON)
					.append(toEmpty(kojiakTekkyoInfo.get(EKU0011A010CBSMsg1List.KOJIAK_STAT_NM))).append(JFUStrConst.KIGOU_B_KAKKO_END_HALF);

		}

		inMap.put(ECR0511D010CBSMsg.TAIO_KIROK_RIREKI, taioKirokRirekiBf.toString());

		// 問合せ客番号
		inMap.put(ECR0511D010CBSMsg.PROSCST_NO, JFUStrConst.EMPTY);
		// eoID
		inMap.put(ECR0511D010CBSMsg.EOID, JFUStrConst.EMPTY);
		// 申込書番号
		if ("HTPlanChg".equals(fixedText))
		{
			inMap.put(ECR0511D010CBSMsg.MSKMSHO_NO, toEmpty(kojiakNewInfo.get(EKU0011A010CBSMsg1List.KOJIAK_NO)));
		}
		else
		{
			inMap.put(ECR0511D010CBSMsg.MSKMSHO_NO, JFUStrConst.EMPTY);
		}
		// コールバック希望年月日時分秒
		inMap.put(ECR0511D010CBSMsg.CALLBK_KIBO_DTM, JFUStrConst.EMPTY);
		// コールバック時間指定タイプ名
		inMap.put(ECR0511D010CBSMsg.CALLBK_TIME_STI_TYPE_NM, JFUStrConst.EMPTY);
		// CASEファイル作成済フラグ
		inMap.put(ECR0511D010CBSMsg.CSFL_SKSI_ZM_FLG, "0");
		// CASEファイル作成年月日
		inMap.put(ECR0511D010CBSMsg.CSFL_SKSI_YMD, JFUStrConst.EMPTY);
	}

	/**
	 * ルーター自動交換判定処理
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 * @throws Throwable
	 */
	private HashMap<String, String> changeRouter(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, String> resultMap = new HashMap<String, String>();

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// IN項目:変更前料金コースコード
		String nowPcrsCd = (String)inMap.get(NOW_PCRS_CD);
		// IN項目:変更後料金コースコード
		String chgPcrsCd = (String)inMap.get(CHG_PCRS_CD);

		// ●料金コース一意照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_EKK0791A010);
		// 上りマッピング
		setInMapPcrsSearch(param, fixedText, nowPcrsCd);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0791A010, TEMPLATE_ID_EKK0791A010_DETAIL, IN_COLUMN_LIST_EKK0791A010,
				ERROR_COLUMN_EKK0791A010);

		// 料金コース速度コード(コース変更前)
		String pcrsSpeedCdCurrent =
				getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0791A010), TEMPLATE_ID_EKK0791A010_DETAIL,
						EKK0791A010CBSMsg1List.PCRS_SPEED_CD, 0);

		// 料金コース速度コード(コース変更後)
		String pcrsSpeedCdReserve = null;

		// コース変更有の場合
		String crsChgUm = JFUStrConst.CD00002_0;
		if (!JFUBPCommon.isNull(chgPcrsCd) && !nowPcrsCd.equals(chgPcrsCd))
		{
			// ●料金コース一意照会
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_EKK0791A010);
			// 上りマッピング
			setInMapPcrsSearch(param, fixedText, chgPcrsCd);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0791A010, TEMPLATE_ID_EKK0791A010_DETAIL, IN_COLUMN_LIST_EKK0791A010,
					ERROR_COLUMN_EKK0791A010);
			// 料金コース速度コード(予約)
			pcrsSpeedCdReserve =
					getTemplateListValue(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0791A010), TEMPLATE_ID_EKK0791A010_DETAIL,
							EKK0791A010CBSMsg1List.PCRS_SPEED_CD, 0);
			// コース変更有無に「1」を設定
			crsChgUm = JFUStrConst.CD00002_1;
		}
		else
		{
			// 料金コース速度コード(予約)にカレントと 同値を設定
			pcrsSpeedCdReserve = pcrsSpeedCdCurrent;
			// コース変更有無に「0」を設定
			crsChgUm = JFUStrConst.CD00002_0;
		}

		// ●プラン変更前後で速度が速いほうのルーター速度種別を算出
		// XMLデータ取得
		Element root = getRouterNodeList();
		// ルーター速度種別コード(プラン変更前)
		String routerSpeedSbtBf = getRouterSpeedSbt(pcrsSpeedCdCurrent, root);
		// ルーター速度種別コード(プラン変更後)
		String routerSpeedSbtAf = getRouterSpeedSbt(pcrsSpeedCdReserve, root);

		// ルーター交換結果(料金コース速度コード(カレント))
		resultMap.put(RESULT_PCRS_SPEEDCD_CURRENT, pcrsSpeedCdCurrent);
		// ルーター交換結果(料金コース速度コード(予約))
		resultMap.put(RESULT_PCRS_SPEED_CD_RESERVE, pcrsSpeedCdReserve);
		// コース変更有無
		resultMap.put(RESULT_CRS_CHG_UM, crsChgUm);
		// ルーター速度種別(プラン変更前)
		resultMap.put(RESULT_ROUTER_SPEED_SBT_BF, routerSpeedSbtBf);
		// ルーター速度種別(プラン変更後)
		resultMap.put(RESULT_ROUTER_SPEED_SBT_AF, routerSpeedSbtAf);

		return resultMap;
	}

	/**
	 * 上りマッピング項目設定(料金コース一意照会)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param pcrsCd 料金コースコード
	 * @throws RequestParameterException
	 */
	private void setInMapPcrsSearch(IRequestParameterReadWrite param, String fixedText, String pcrsCd) throws RequestParameterException
	{
		// 機能コード設定(2:カレント)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿料金コースコード
		inMap.put(EKK0791A010CBSMsg.KEY_PCRS_CD, pcrsCd);
		// ＫＥＹ＿予約適用年月日
		inMap.put(EKK0791A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));
	}

	/**
	 * XML読み込み
	 * <br>
	 * @return エレメント
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 * @throws IOException
	 */
	private Element getRouterNodeList() throws ParserConfigurationException, SAXException, IOException
	{
		// XMLパース
		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		Document doc = builder.parse(new File(XML_FILE_PATH));
		return doc.getDocumentElement();
	}

	/**
	 * ルーター速度種別取得
	 * <br>
	 * @param pcrsSpeedCd 料金コース速度コード
	 * @param root XMLデータ
	 * @return ルーター速度種別
	 */
	private String getRouterSpeedSbt(String pcrsSpeedCd, Element root)
	{
		NodeList pcrsRootList = root.getElementsByTagName(TAG_PCRS_SPEED_CD_ROUTER_SPEED_SBT_MAPPING);
		Element pcrsRoot = (Element)pcrsRootList.item(0);
		NodeList routerSpeedSbtList = pcrsRoot.getElementsByTagName(TAG_ROUTER_SPEED_SBT);

		Element svcElement = null;

		for (int i = 0; i < routerSpeedSbtList.getLength(); i++)
		{
			svcElement = (Element)routerSpeedSbtList.item(i);
			if (pcrsSpeedCd.equals(svcElement.getAttribute(ATTR_PCRS_SPEED_CD)))
			{
				break;
			}
		}

		return svcElement.getTextContent();
	}

	/**
	 * 前0埋めの2桁文字列変換処理
	 *
	 * <br>
	 * @param num 数値
	 * @return 2桁の文字列
	 */
	private String padNumToStr(int num)
	{
		return num < 10 ? JPCUtilCommon.padNumFormString(String.valueOf(num), 2) : String.valueOf(num);
	}

	/**
	 * NULLを空文字変換
	 *
	 * <br>
	 * @param value 値
	 * @return NULLの場合は、空文字に変換した値
	 */
	private String toEmpty(Object value)
	{
		if (value == null)
		{
			return JFUStrConst.EMPTY;
		}

		if (value instanceof String)
		{
			return (String)value;
		}
		else
		{
			return String.valueOf(value);
		}
	}

	/**
	 * チェック処理
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@Override
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}
}
