/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW07111SFLogic
*   ソースファイル名：FUW07111SFLogic.java
*   作成者          ：富士通
*   日付            ：2021年10月11日
*＜機能概要＞
*    eo光無線ルーター申込画面サービスフォームBeanビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v55.00      2021/10/11   FJ）西川  【ANK-4146-00-00】【eo定期】多機能ルーター枯渇対応 STEP2
**********************************************************************/
package eo.web.webview.FUW07111SF;

import static eo.common.constant.JPCModelConstant.FUNC_CD_1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SWebLog;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JZMAdOutputEdit;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0350_FUSV0350OPDBMapper;
import eo.web.webview.mapping.FUSV0351_FUSV0351OPDBMapper;

/**
 * eo光無線ルーター申込画面サービスフォームBeanビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW07111SFLogic extends JCCWebBusinessLogic
{

	/** ゼロ */
	private static final String ZERO = "0";

	/** サービスID : eo光無線ルーター申込(初期表示) */
	private static final String SVC_ID_INIT = "FUSV0350";

	/** サービスID : eo光無線ルーター申込(申し込む) */
	private static final String SVC_ID_MSKM = "FUSV0351";

	/** eo光無線ルーター申込（初期表示）マップ */
	private static final String SC_TITLE_FUSV035001CC = "FUSV035001CC";

	/** テンプレートID(機器提供サービス契約料金コース変更) */
	private static final String TEMPLATE_ID_SVC_KEI_KKTK_UPD = "EKK0341C160";
	/** テンプレートID(機器提供サービス契約登録) */
	private static final String TEMPLATE_ID_SVC_KEI_KKTK_TRK = "EKK0341D010";

	/** Mapキー：工事案件一覧照会明細 */
	private static final String MAP_KEY_EKU0011B010CBSMsg1LIST = "EKU0011B010CBSMsg1List";

	/** Mapキー：住所変更明細一覧照会 */
	private static final String MAP_KEY_EKK2101B001CBSMsg1LIST = "EKK2101B001CBSMsg1List";

	/** アイテムID(upd_dtm_bf) */
	private static final String ITEM_ID_UPD_DTM_DF = "upd_dtm_bf";
	/** アイテムID(kktk_svc_cd) */
	private static final String ITEM_ID_KKTK_SVC_CD = "kktk_svc_cd";
	/** アイテムID(ido_div) */
	private static final String ITEM_ID_IDO_DIV = "ido_div";

	/** サービスユースケースID：eo光無線ルーター申込(申し込む) */
	private static final String SVC_USECASE_ID_FUSV0351 = "FUSV0351";

	/** 料金プラン固定単価（オプション申込料金）一覧照会.料金プラン固定単価（オプション申込料金）明細 */
	private static final String EKK0601B001_LIST = "EKK0601B001CBSMsg1List";
	/** 料金プラン固定単価（オプション申込料金）一覧照会 */
	private static final String SC_TITLE_FUSV035001 = "FUSV035001SC";
	/** 料金プラン固定金額 */
	private static final String PPLAN_KOTEI_AMNT = "pplan_kotei_amnt";
	/** 料金プラン固定単位コード名 */
	private static final String PPLAN_KOTEI_TANI_CD_NM = "pplan_kotei_tani_cd_nm";

	/** 初期費用一覧照会CC 事務手数料有無マップ */
	private static final String CC_TITLE_FUSV035001 = "FUSV035001CC";

	/** 料金表(初期費用タイトル 事務手数料) */
	private static final String PRC_INIT_COLUMN_JIMUTE = "DISPSETTING/SETTING[@screenId='FUW07111']/DISPCTL[@id='JIMUTE']";

	/** 項目：事務手数料有無 */
	private static final String JMTE_UM = "jmte_um";

	private static final String QUERY_MRT_MURYO_WRIB_SVC_CD_PATH = "DISPSETTING/SETTING[@screenId='FUW07111']/DISPCTL[@id='MRT_MRYO_WRIB_SVC_CD']";

	/**  APLConst.propertiesから取得するキー */
	private static final String FU_N_MSKM_FIN_MAIL_KOPT_BCC_MLAD = "FU_N_MSKM_FIN_MAIL_KOPT_BCC_MLAD";

	/**
	 * 初期処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean init() throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 初期処理(init) START ★");

		// ■設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// ****************************************************************************************************
		// *初期設定
		// *****************************************************************************************************
		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean宣言
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// 当機能でのみ使用するワーク
		HashMap<String, String> tempData = new HashMap<String, String>();

		// ----------------------------------------------
		// 共有フォームBean情報の取得
		// ----------------------------------------------
		setCommonInfoBeanToSvcFormBean(serviceInfoBean, commonInfoBean);

		// ----------------------------------------------
		// サービス呼出処理
		// ----------------------------------------------
		callSvcFUSV0350(serviceInfoBean, commonInfoBean, outputMap);

		// ----------------------------------------------
		// サービスフォームBean設定
		// ----------------------------------------------
		setSvcFormBean(serviceInfoBean, outputMap, tempData);

		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);

		// ****************************************************************************************************
		// * 遷移先画面情報の設定(eo光無線ルーター申込画面へ遷移)
		// *****************************************************************************************************
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW07111);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW07111);

		X31SWebLog.DEBUG_LOG.debug("★ 初期処理(init) END ★");

		return true;

	}

	/**
	 * 登録処理
	 * <br>
	 * @return	処理結果
	 * @throws Exception	例外
	 */
	public boolean mskm() throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ 登録処理(mskm) START ★");

		// ****************************************************************************************************
		// *初期設定
		// *****************************************************************************************************
		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean宣言
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 利用可能サービスチェック
		JFUWebCommon.checkCommonRelation(this, SVC_USECASE_ID_FUSV0351);

		// ■設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// ----------------------------------------------
		// サービス呼出処理
		// ----------------------------------------------
		callSvcFUSV0351(serviceInfoBean, commonInfoBean, FUNC_CD_1);

		// 申込完了メール送信部品呼出処理
		JFUWebCommon.sendMskmFinMail(this, "FUW07111_1", null, JFUWebCommon.getApplicationConst(FU_N_MSKM_FIN_MAIL_KOPT_BCC_MLAD));

		// ****************************************************************************************************
		// * 遷移先画面情報の設定(eo光無線ルーター申込画面へ遷移)
		// *****************************************************************************************************
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW07112);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW07112);

		X31SWebLog.DEBUG_LOG.debug("★ 登録処理(mskm) END ★");

		return true;

	}

	/**
	 * サービス呼出処理（FUSV0350_eo光無線ルーター申込(初期表示)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param outputMap SIFアウトプット
	 * @throws Exception		すべての例外
	 */
	private void callSvcFUSV0350(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, HashMap<String, Object> outputMap) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0350_eo光無線ルーター申込(初期表示)）(callSvcFUSV0350) START ★");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { bean, this.getCommonInfoBean() };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_INIT);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0350_FUSV0350OPDBMapper mapper = new FUSV0350_FUSV0350OPDBMapper();

		// サービスの入力値設定
		// eo光無線ルーター申込み照会コモンコンポーネント部品上りマッピング
		mapper.setFUSV035001CC(paramBean, inputMap, FUNC_CD_1);

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		// 業務エラー例外（JCCWebServiceException）が発生している場合
		catch (JCCWebServiceException jwse)
		{
			X31CMessageResult msgRes = jwse.getMessageList();

			for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgRes.getMessageMoreInfoList()))
			{
				// 利用サービスエラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus()) && JFUStrConst.RELATION_CHECK_TEMPLATE_ID_SVC_KEI.equals(moreInfo.getTemplateId())
						&& JFUStrConst.RELATION_CHECK_ITEM_SVC_KEI.equals(moreInfo.getItemId()) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					X31SWebLog.DEBUG_LOG.debug("共通関連チェック【利用サービスエラー】");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}

				// ルーター保有エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus()) && "EKK2811B503".equals(moreInfo.getTemplateId())
						&& "key_svc_kei_kaisen_ucwk_no".equals(moreInfo.getItemId()) && "EA".equals(moreInfo.getItemCheckErr()))
				{
					X31SWebLog.DEBUG_LOG.debug("保有ルーターチェック【ルーター保有エラー】");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}

				// ルーター保有エラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus()) && "EKK0341B002".equals(moreInfo.getTemplateId())
						&& "key_kktk_svc_kei_no".equals(moreInfo.getItemId()) && "EA".equals(moreInfo.getItemCheckErr()))
				{
					X31SWebLog.DEBUG_LOG.debug("保有ルーターチェック【ルーター保有エラー】");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
			
			}

			// 上記以外はシステムエラー
			X31SWebLog.DEBUG_LOG.info("----- FUW07111_callSvcFUSV0350() サービス実行エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0350_eo光無線ルーター申込(初期表示)）(callSvcFUSV0350) END ★");
	}

	/**
	 * サービスフォームBean設定
	 * <br>
	 * @param bean					サービスフォームBean
	 * @param outputMap SIFアウトプット
	 * @throws Exception			すべての例外
	 */
	private void setSvcFormBean(X31SDataBeanAccess bean, HashMap<String, Object> outputMap, HashMap<String, String> tempData) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ サービスフォームBean設定（setSvcFormBean） START ★");

		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		HashMap<String, ArrayList<HashMap<String, String>>> fusv0350CC1Map = null;
		String kikiSoryoUm = JFUStrConst.EMPTY;

		if (outputMap.containsKey(SC_TITLE_FUSV035001CC))
		{
			fusv0350CC1Map = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(SC_TITLE_FUSV035001CC);
		}

		if (fusv0350CC1Map == null)
		{
			X31SWebLog.DEBUG_LOG.debug("【eo光無線ルーター申込（初期表示）マップ情報 未設定エラー】");
			// システムエラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 提供方式コード
		String tkHoshikiCd = (String)((HashMap)fusv0350CC1Map).get("tk_hoshiki_cd");
		// 提供方式パターンコード
		String tkHoshikiPatternCd = (String)((HashMap)fusv0350CC1Map).get("tk_hoshiki_pattern_cd");

		if (JFUStrConst.CD01213_51.equals(tkHoshikiPatternCd))
		{
			// eo光ネットの契約がマンションタイプ光コンセントの場合

			// サービス契約ステータスが有効でないためエラー
			X31SWebLog.DEBUG_LOG.info("----- FUW07111_setSvcFormBean() 光コンセントの場合エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.TK_HOSHIKI_PATTERN_CD, tkHoshikiPatternCd);
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.TK_HOSHIKI_CD, tkHoshikiCd);

		// 工事案件一覧照会明細
		ArrayList<HashMap<String, String>> kojiakList = fusv0350CC1Map.get(MAP_KEY_EKU0011B010CBSMsg1LIST);
		if (kojiakList != null && kojiakList.size() > 0)
		{
			// ■未完了工事の有無のチェック
			for (int n = 0; n < kojiakList.size(); n++)
			{
				if (!checkMiFinKoji(kojiakList.get(n)))
				{
					// 未完了の工事が存在しているためエラー
					X31SWebLog.DEBUG_LOG.info("----- FUW07111_callSvcFUSV0350() 申込不可となる未完了の工事が存在しているためエラー -----");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0109);
				}
			}
		}

		// 住所変更明細一覧照会明細
		ArrayList<HashMap<String, String>> adchgDtlList = fusv0350CC1Map.get(MAP_KEY_EKK2101B001CBSMsg1LIST);
		// 住所変更中チェック
		if (adchgDtlList != null && adchgDtlList.size() > 0)
		{
			HashMap<String, String> adchgDtlMap = adchgDtlList.get(0);

			// 元回線工事案件番号
			String motoKojiak_no = "";
			// 先回線工事案件番号
			String sakiKojiak_no = "";

			if (adchgDtlMap.get("chbf_skbt_no") != null)
			{
				motoKojiak_no = adchgDtlMap.get("chbf_skbt_no");
			}
			if (adchgDtlMap.get("chaf_skbt_no") != null)
			{
				sakiKojiak_no = adchgDtlMap.get("chaf_skbt_no");
			}

			// 住所変更中工事案件チェック
			// 工事案件リストを回して住変明細の工事案件と当たるものを探す
			for (int n = 0; n < kojiakList.size(); n++)
			{
				String kojiak_no = kojiakList.get(n).get("kojiak_no");
				// 住所明細の工事案件と当たった場合（元）
				if (kojiak_no.equals(motoKojiak_no))
				{
					// 工事案件ステータスが取消済(900)か確認する
					if (!checkAdchgKojiakCancel(kojiakList.get(n)))
					{
						// 住所変更中のレコードが存在しているためエラー
						X31SWebLog.DEBUG_LOG.info("----- FUW07111_callSvcFUSV0350() 住所変更中のレコードが存在しているためエラー -----");
						throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0109);
					}
				}
				// 住所明細の工事案件と当たった場合（先）
				if (kojiak_no.equals(sakiKojiak_no))
				{
					// 工事案件ステータスが取消済(900)か確認する
					if (!checkAdchgKojiakCancel(kojiakList.get(n)))
					{
						// 住所変更中のレコードが存在しているためエラー
						X31SWebLog.DEBUG_LOG.info("----- FUW07111_callSvcFUSV0350() 住所変更中のレコードが存在しているためエラー -----");
						throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0109);
					}
				}
			}
		}

		// 【補足】申込対象の機器で、保持している機器のステータスが"サービス提供中"になるまで、申込は不可（多機能を除く）。
		kikiSoryoUm = (String)((HashMap)outputMap.get(SC_TITLE_FUSV035001CC)).get("kikiSoryoUm");
		// 機器送料有無 kiki_soryo_um
		bean.sendMessageString(FUW07111SFConst.KIKI_SORYO_UM, X31CWebConst.DATABEAN_SET_VALUE, kikiSoryoUm);

		// ----------------------------------------------
		// 料金表情報の設定
		// ----------------------------------------------

		// 多機能ルーター申込の場合
		// 選択オプションデータ作成
		createOptioinData(bean, outputMap);

		// ●料金表マッピング
		JFUWebCommon.setPrcInfoArea(bean, outputMap, CC_TITLE_FUSV035001, CC_TITLE_FUSV035001, JFUScreenConst.SCREEN_ID_FUW07111);
		X31SWebLog.DEBUG_LOG.debug("★ サービスフォームBean設定（setSvcFormBean） END ★");
	}

	/**
	 * 料金表リストを作成します。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @throws Exception
	 */
	private void createOptioinData(X31SDataBeanAccess bean, HashMap<String, Object> outputMap) throws Exception
	{

		// ●固定単価
		HashMap<String, ArrayList<HashMap<String, String>>> fusv0350CC1Map = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(SC_TITLE_FUSV035001CC);

		ArrayList<HashMap<String, String>> pplan_kttanka_list = fusv0350CC1Map.get("pplan_kttanka_tkn_list");

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報
		// -------------------------------------------------
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		X31SDataBeanAccess svcKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_INFO).getDataBean(0);

		List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
		for (HashMap<String, String> dataMap : pplan_kttanka_list)
		{
			// 料金表データ作成（後続のJFUWebCommon.setPrcInfoArea()メソッドで使用）
			Map<String, Object> childMap = new HashMap<String, Object>();
			// 料金プラン固定料金
			String pplanKoteiAmnt = dataMap.get(PPLAN_KOTEI_AMNT);

			if (JFUStrConst.KOJI_SBT_019.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.KOJI_SBT_23))
					|| JFUStrConst.KOJI_SBT_020.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.KOJI_SBT_23)))
			{
				// 無線機能無料マンションまたは無線LAN中継機無料マンションの場合は、多機能ルーター月額料金0円
				pplanKoteiAmnt = ZERO;
			}
			else if (ZERO.equals(pplanKoteiAmnt))
			{
				// 金額が0円の場合は、無料表示を行う。
				pplanKoteiAmnt = JFUStrConst.FREE_LABEL;
			}
			childMap.put(PPLAN_KOTEI_AMNT, pplanKoteiAmnt);
			// 料金プラン固定単位コード名
			childMap.put(PPLAN_KOTEI_TANI_CD_NM, dataMap.get(PPLAN_KOTEI_TANI_CD_NM));
			dataList.add(childMap);
		}

		// 料金表データ作成（後続のJFUWebCommon.setPrcInfoArea()メソッドで使用）
		Map<String, Object> dataMap = new HashMap<String, Object>();
		dataMap.put(EKK0601B001_LIST, dataList);

		outputMap.put(SC_TITLE_FUSV035001, dataMap);

		// ●初期費用
		// 名称の変更
		ArrayList<HashMap<String, String>> eKK0721A010List = fusv0350CC1Map.get("EKK0721A010CBSMsg1List");
		if (!JFUWebCommon.isNull(eKK0721A010List))
		{
			HashMap<String, String> ekk0721A010Map = eKK0721A010List.get(0);
			ekk0721A010Map.put("tmp_pay_prc_nm", JFUWebCommon.getDispItem(PRC_INIT_COLUMN_JIMUTE));
		}

		// 事務手数料有無
		String jmteUm = (String)((HashMap)outputMap.get(CC_TITLE_FUSV035001)).get(JMTE_UM);
		if (JFUStrConst.CD00002_0.equals(jmteUm))
		{
			// 料金表の初期費用（事務手数料）を削除する
			fusv0350CC1Map.put("EKK0721A010CBSMsg1List", null);
			// 機器送料有無に"0"（無）を設定
			bean.sendMessageString(FUW07111SFConst.KIKI_SORYO_UM, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_0);
		}
	}

	/**
	 * 共有フォームBean情報の取得(サービスフォームBeanに設定)
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @throws Exception		すべての例外
	 */
	private void setCommonInfoBeanToSvcFormBean(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean) throws Exception
	{

		X31SWebLog.DEBUG_LOG.debug("★共有フォームBean情報の取得(サービスフォームBeanに設定)（setCommonInfoBeanToSvcFormBean） START ★");

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.SSO情報
		// -------------------------------------------------
		X31SDataBeanAccess ssoInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SSO_INFO).getDataBean(0);
		setSsoInfo(bean, ssoInfo);

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報
		// -------------------------------------------------
		X31SDataBeanAccess genCustKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.GEN_CUST_KEI_INFO).getDataBean(0);
		setGenCustKeiInfo(bean, genCustKeiInfo);

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報
		// -------------------------------------------------
		X31SDataBeanAccess svcKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_INFO).getDataBean(0);
		String nowPcrsCd = JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.PCRS_CD_23);
		if (!JFUStrConst.PCRS_CD_5G10G.contains(nowPcrsCd))
		{
			// eo光ネットの現在の契約コースが5ギガ／10ギガコース以外の場合。（コース変更予約中なども現在のコースで判断する。変更先コースでの判断は行わない。）

			// 業務共通例外クラス："0102"（契約状態エラー）
			X31SWebLog.DEBUG_LOG.info("----- FUW07111_setCommonInfoBeanToSvcFormBean() eo光ネットの現在の契約コースが5ギガ／10ギガコース以外エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// -------------------------------------------------
		// 共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報.サービス契約回線内訳情報
		// -------------------------------------------------
		X31SDataBeanAccess svcKeiKaisenUcwkInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_KAISEN_UCWK_INFO).getDataBean(0);
		setSvcKeiKaisenUcwkInfo(bean, svcKeiKaisenUcwkInfo);

		// -------------------------------------
		// 住所 keisha_ad
		// -------------------------------------
		// 住所出力編集処理部品にて結合（パターン01）
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KEISHA_AD, JZMAdOutputEdit.getPtn01(JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_STATE_NM_22),
				JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_CITY_NM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_OAZTSU_NM_22),
				JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_AZCHO_NM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_BNCHIGO_22),
				JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_ADRTTM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_ADRRM_22)));

		X31SWebLog.DEBUG_LOG.debug("★共有フォームBean情報の取得(サービスフォームBeanに設定)（setCommonInfoBeanToSvcFormBean） END ★");

	}

	/**
	 * SSO情報をサービスフォームBeanに設定します。
	 * <br>
	 * @param bean			サービスフォームBean
	 * @param ssoInfo		共有フォームBean.WEB変更情報.SSO情報
	 * @throws Exception	すべての例外
	 */
	private void setSsoInfo(X31SDataBeanAccess bean, X31SDataBeanAccess ssoInfo) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★SSO情報をサービスフォームBeanに設定（setSsoInfo） START ★");

		// --------------------------------------------------------------------------------------------------------------------
		// 21 ＳＳＯ情報 sso_info
		// --------------------------------------------------------------------------------------------------------------------
		// 提供方法 tk_way
		String tk_way = JFUWebCommon.getDataBeanItemByPath(ssoInfo, CommonInfoCFConst.TK_WAY_21);

		// -------------------------------------
		// 提供方法 tk_way  機器提供種別コード kktk_sbt_cd
		// -------------------------------------
		if (!"02".equals(tk_way))
		{
			// 「提供方法」が"02"（レンタル）以外の場合
			// 業務共通例外クラス："0120"（申し込み受付不可エラー）
			X31SWebLog.DEBUG_LOG.info("----- 提供条件に買取の指定 申し込み受付不可エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0120);

		}

		// 型番号 model_no
		String model_no = JFUWebCommon.getDataBeanItemByPath(ssoInfo, CommonInfoCFConst.MODEL_NO_21);
		if (!"*EORTWR*".equals(model_no))
		{
			// 型番号が"*EORTWR*"の場合

			// 業務共通例外クラス："0120"（申し込み受付不可エラー）
			X31SWebLog.DEBUG_LOG.info("----- 型番号にルータ、PLC以外を指定 申し込み受付不可エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0120);
		}
		X31SWebLog.DEBUG_LOG.debug("★SSO情報をサービスフォームBeanに設定（setSsoInfo） END ★");
	}

	/**
	 * 現顧客契約情報をサービスフォームBeanに設定します。
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param genCustKeiInfo	共有フォームBean.WEB変更情報.現顧客契約情報
	 * @throws Exception		すべての例外
	 */
	private void setGenCustKeiInfo(X31SDataBeanAccess bean, X31SDataBeanAccess genCustKeiInfo) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★現顧客契約情報をサービスフォームBeanに設定（setGenCustKeiInfo） START ★");

		// --------------------------------------------------------------------------------------------------------------------
		// 22 現顧客契約情報 gen_cust_kei_info
		// --------------------------------------------------------------------------------------------------------------------
		// お客様名 cust_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KEISHA_NM, JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.CUST_NM_22));
		// お客様名カナ cust_kana
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.CUST_KANA, JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.CUST_KANA_22));
		// 契約者郵便番号 keisha_pcd
		String keisha_pcd = JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_PCD_22);
		// ※ハイフン編集して画面表示用の「郵便番号」に設定（"〒"はJSPに記載）
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.PCD, JFUWebCommon.hyhunPcd(keisha_pcd));

		// 電話番号 telno
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KEISHA_TELNO, JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.TELNO_22));

		// -------------------------------------
		// 住所 keisha_ad
		// -------------------------------------
		// 住所出力編集処理部品にて結合（パターン01）
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KEISHA_AD, JZMAdOutputEdit.getPtn01(JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_STATE_NM_22),
				JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_CITY_NM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_OAZTSU_NM_22),
				JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_AZCHO_NM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_BNCHIGO_22),
				JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_ADRTTM_22), JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.KEISHA_ADRRM_22)));

		X31SWebLog.DEBUG_LOG.debug("★現顧客契約情報をサービスフォームBeanに設定（setGenCustKeiInfo） END ★");

	}

	/**
	 * サービス契約回線内訳情報をサービスフォームBeanに設定します。
	 * <br>
	 * @param bean					サービスフォームBean
	 * @param svcKeiKaisenUcwkInfo	共有フォームBean.WEB変更情報.現顧客契約情報.サービス契約情報.サービス契約回線内訳情報
	 * @throws Exception			すべての例外
	 */
	private void setSvcKeiKaisenUcwkInfo(X31SDataBeanAccess bean, X31SDataBeanAccess svcKeiKaisenUcwkInfo) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★サービス契約回線内訳情報をサービスフォームBeanに設定（setSvcKeiKaisenUcwkInfo） START ★");

		// --------------------------------------------------------------------------------------------------------------------
		// 26 サービス契約回線内訳情報 svc_kei_kaisen_ucwk_info
		// --------------------------------------------------------------------------------------------------------------------

		// 回線場所住所未確定フラグ kisn_plc_ad_mi_fix_flg
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KISN_PLC_AD_MI_FIX_FLG, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KISN_PLC_AD_MI_FIX_FLG_26));
		// 回線場所＿契約者住所差異フラグ kaisen_plc_ksh_ad_sai_flg
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLC_KSH_AD_SAI_FLG, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLC_KSH_AD_SAI_FLG_26));
		// マンション物件番号 mansion_bukken_no
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.MANSION_BUKKEN_NO, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.MANSION_BUKKEN_NO_26));
		// 回線場所電話番号 kaisen_place_telno
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_TELNO, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_TELNO_26));
		// 回線場所住所コード kaisen_place_ad_cd
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_AD_CD, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_AD_CD_26));
		// 回線場所郵便番号 kaisen_place_pcd
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_PCD, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_PCD_26));
		// 回線場所都道府県名 kaisen_place_state_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_STATE_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_STATE_NM_26));
		// 回線場所市区町村名 kaisen_place_city_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_CITY_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_CITY_NM_26));
		// 回線場所大字通称名 kaisen_place_oaztsu_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_OAZTSU_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_OAZTSU_NM_26));
		// 回線場所字丁目名 kaisen_place_azcho_nm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_AZCHO_NM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_AZCHO_NM_26));
		// 回線場所番地号 kaisen_place_bnchigo
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_BNCHIGO, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_BNCHIGO_26));
		// 回線場所住所補記・建物名 kaisen_place_adrttm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_ADRTTM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_ADRTTM_26));
		// 回線場所住所補記・部屋番号 kaisen_place_adrrm
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KAISEN_PLACE_ADRRM, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KAISEN_PLACE_ADRRM_26));
		// 回線場所区画整理中フラグ kisn_plc_kkk_seiri_chu_flg
		JFUWebCommon.setDataBeanItemByPath(bean, FUW07111SFConst.KISN_PLC_KKK_SEIRI_CHU_FLG, JFUWebCommon.getDataBeanItemByPath(svcKeiKaisenUcwkInfo, CommonInfoCFConst.KISN_PLC_KKK_SEIRI_CHU_FLG_26));

		X31SWebLog.DEBUG_LOG.debug("★サービス契約回線内訳情報をサービスフォームBeanに設定（setSvcKeiKaisenUcwkInfo） END ★");

	}

	/**
	 * 申込不可となる未完了工事の有無のチェック
	 * <br>
	 * @param kojiak_list_dtl 工事案件
	 * @return true：処理対象、false：処理対象外
	 */
	private boolean checkMiFinKoji(HashMap<String, String> kojiak_list_dtl)
	{
		X31SWebLog.DEBUG_LOG.debug("★申込不可となる未完了の工事が存在する。(checkMiFinKoji) START ★");

		// 工事案件種別コード
		String kojiak_sbt_cd = kojiak_list_dtl.get("kojiak_sbt_cd");
		// 工事案件ステータス
		String kojiak_stat = kojiak_list_dtl.get("kojiak_stat");

		int kojiak_sbt_cd_flg = 0;
		int kojiak_stat_flg = 0;

		//■工事案件種別コード判定
		if (JFUStrConst.CD00577_001.equals(kojiak_sbt_cd))
		{ // 新設
			kojiak_sbt_cd_flg = 1;
		}
		else if (JFUStrConst.CD00577_002.equals(kojiak_sbt_cd))
		{ // 撤去(解約)
			kojiak_sbt_cd_flg = 1;
		}
		else if (JFUStrConst.CD00577_003.equals(kojiak_sbt_cd))
		{ // 住変(新設)
			kojiak_sbt_cd_flg = 1;
		}
		else if (JFUStrConst.CD00577_004.equals(kojiak_sbt_cd))
		{ // 住変(撤去)
			kojiak_sbt_cd_flg = 1;
		}
		else if (JFUStrConst.CD00577_009.equals(kojiak_sbt_cd))
		{ // プラン変更（収容替）
			kojiak_sbt_cd_flg = 1;
		}
		else if (JFUStrConst.CD00577_012.equals(kojiak_sbt_cd))
		{ // 面開発
			kojiak_sbt_cd_flg = 1;
		}

		//■工事案件ステータス判定
		if (JFUStrConst.CD00474_140.equals(kojiak_stat))
		{ // 依頼済
			kojiak_stat_flg = 1;
		}
		else if (JFUStrConst.CD00474_150.equals(kojiak_stat))
		{ // 宅内調査完了済
			kojiak_stat_flg = 1;
		}
		else if (JFUStrConst.CD00474_160.equals(kojiak_stat))
		{ // 工事会社決定済
			kojiak_stat_flg = 1;
		}
		else if (JFUStrConst.CD00474_170.equals(kojiak_stat))
		{ // 宅内機器予定登録済
			kojiak_stat_flg = 1;
		}
		else if (JFUStrConst.CD00474_180.equals(kojiak_stat))
		{ // 仮鍵開発行依頼済
			kojiak_stat_flg = 1;
		}

		if (kojiak_stat_flg == 1 && kojiak_sbt_cd_flg == 1)
		{
			X31SWebLog.DEBUG_LOG.debug("★申込不可となる未完了の工事が存在する。(checkMiFinKoji) false END ★");
			return false;
		}
		else
		{
			X31SWebLog.DEBUG_LOG.debug("★申込不可となる未完了の工事が存在しない。(checkMiFinKoji) true END ★");
			return true;
		}
	}

	/**
	 * 住変中の工事案件が取消済かチェック
	 * <br>
	 * @param kojiak_list_dtl 工事案件
	 * @return コース選択
	 */
	private boolean checkAdchgKojiakCancel(HashMap<String, String> kojiak_list_dtl)
	{
		X31SWebLog.DEBUG_LOG.debug("★ 住変中の工事案件が取消済かチェック(checkAdchgKojiakCancel) START ★");

		// 工事案件ステータス
		String kojiak_stat = kojiak_list_dtl.get("kojiak_stat");

		int kojiak_stat_flg = 0;

		if (JFUStrConst.CD00474_900.equals(kojiak_stat))
		{ // 取消済
			kojiak_stat_flg = 1;
		}

		if (kojiak_stat_flg == 1)
		{
			X31SWebLog.DEBUG_LOG.debug("★ 住変中の工事案件が取消済かチェック(checkAdchgKojiakCancel) false END ★");
			return false;
		}
		else
		{
			X31SWebLog.DEBUG_LOG.debug("★ 住変中の工事案件が取消済かチェック(checkAdchgKojiakCancel) true END ★");
			return true;
		}
	}

	/**
	 * サービス呼出処理（FUSV0351_eo光無線ルーター申込(申し込む)）
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commonInfoBean	共有フォームBean
	 * @param func_cd			機能コード
	 * @throws Exception		すべての例外
	 */
	private void callSvcFUSV0351(X31SDataBeanAccess bean, X31SDataBeanAccess commonInfoBean, String func_cd) throws Exception
	{
		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0351_eo光無線ルーター申込(申し込む)）(callSvcFUSV0351) START ★");

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { bean, commonInfoBean };

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_MSKM);

		// 設定値格納用マップを生成。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// DataBean-BPマッピング
		FUSV0351_FUSV0351OPDBMapper mapper = new FUSV0351_FUSV0351OPDBMapper();

		// サービスの入力値設定
		// eo光無線ルーター申込（申し込む）作業項目マップ01上りマッピング
		// eo光無線ルーター申込み登録コモンコンポーネント部品上りマッピング
		mapper.setFUSV035101CC(paramBean, inputMap, func_cd);

		X31SDataBeanAccess svcKeiInfo = commonInfoBean.getDataBeanArray(JFUWebCommon.SVC_KEI_INFO).getDataBean(0);
		// 無線ルータの申し込み、変更がある場合

		if (JFUStrConst.KOJI_SBT_019.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.KOJI_SBT_23))
				|| JFUStrConst.KOJI_SBT_020.equals(JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.KOJI_SBT_23)))
		{
			// 無線機能無料マンションの場合
			String wribSvcCd = JFUWebCommon.getDispItem(QUERY_MRT_MURYO_WRIB_SVC_CD_PATH);
			if (!JFUWebCommon.isNull(wribSvcCd))
			{
				// 「＜集営案件＞無線ルーター利用料永年無料(W40000100)」
				mapper.setFUSV035110CC(paramBean, inputMap, func_cd, wribSvcCd);
			}
		}

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);

		}
		// 業務エラー例外（JCCWebServiceException）が発生している場合
		catch (JCCWebServiceException se)
		{
			X31SWebLog.DEBUG_LOG.info("----- FUW07111_callSvcFUSV0351() サービス実行エラー -----");
			checkInsertErr(se);
		}

		X31SWebLog.DEBUG_LOG.debug("★ サービス呼出処理（FUSV0351_eo光無線ルーター申込(申し込む)）(callSvcFUSV0351) END ★");

	}

	/**
	 *  登録時のエラー内容判定
	 * <br>
	 * @param se
	 */
	private void checkInsertErr(JCCWebServiceException se)
	{
		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();
		X31CMessageMoreInfo[] moreInfo = msgResult.getMessageMoreInfoList();
		X31CMessageMoreInfo info = moreInfo[0];// 関連チェック系は必ずエラーが1つのため0番目から取得する。
		String templateid = info.getTemplateId();
		String itemid = info.getItemId();
		String status = info.getStatus();
		String errFlg = info.getItemCheckErr();

		// ステータスが"1100"（内部スキーマ関連チェックエラー）または"1400"（概念スキーマの関連チェックでエラー発生)
		// または"1300"（外部スキーマの相関チェックでエラー発生)の場合
		if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) || String.valueOf(JPCModelConstant.ENTITY_RELATION_ERR).equals(status)
				|| String.valueOf(JPCModelConstant.STATUSTRANS_ERR).equals(status) || String.valueOf(JPCModelConstant.TEMPLATE_CORRELATION_ERR).equals(status))
		{
			// テンプレートIDが"EKK0341C160"(機器提供サービス契約料金コース変更)かつエラーフラグが"EA"の場合
			if (TEMPLATE_ID_SVC_KEI_KKTK_UPD.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg))
			{
				// アイテムIDが"upd_dtm_df"(更新年月日時分秒(更新前))の場合
				if (ITEM_ID_UPD_DTM_DF.equals(itemid))
				{
					// 業務共通例外クラス："0201"（お客様情報変更エラー）
					X31SWebLog.DEBUG_LOG.info("----- FUW07111_checkInserErr() 機器提供サービス契約料金コース変更EAエラー -----");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0201);
				}
			}
			// テンプレートIDが"EKK0341C160"(機器提供サービス契約料金コース変更)かつ エラーフラグが"ED""EL""EP""EM"のいづれかの場合
			else if (TEMPLATE_ID_SVC_KEI_KKTK_UPD.equals(templateid)
					&& (JFUStrConst.RELATION_CHECK_ERR_ED.equals(errFlg) || JFUStrConst.RELATION_CHECK_ERR_EL.equals(errFlg) || JFUStrConst.RELATION_CHECK_ERR_EP.equals(errFlg) || JFUStrConst.RELATION_CHECK_ERR_EM
							.equals(errFlg)))
			{
				// アイテムIDが"ido_div"(異動予約)の場合
				if (ITEM_ID_IDO_DIV.equals(itemid))
				{
					// 業務共通例外クラス："0102"（契約状態エラー）
					X31SWebLog.DEBUG_LOG.info("----- FUW07111_checkInserErr() 機器提供サービス契約料金コース変更ED-EL-EP-EMエラー -----");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
			}
			// テンプレートIDが"EKK0341D010"(機器提供サービス契約登録)、かつエラーフラグが"ED"の場合
			else if (TEMPLATE_ID_SVC_KEI_KKTK_TRK.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_ED.equals(errFlg))
			{
				// アイテムが"機器提供サービスコード：kktk_svc_cd"の場合
				if (ITEM_ID_KKTK_SVC_CD.equals(itemid))
				{
					// 業務共通例外クラス："0201"（お客様情報変更エラー）
					X31SWebLog.DEBUG_LOG.info("----- FUW07111_checkInserErr() 機器提供サービス契約登録EDエラー -----");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0201);
				}
			}
			// テンプレートIDが"EKK0341D010"(機器提供サービス契約登録)、かつエラーフラグが"EA"の場合
			else if (TEMPLATE_ID_SVC_KEI_KKTK_TRK.equals(templateid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg))
			{
				// アイテムIDが"upd_dtm_df"(更新年月日時分秒(更新前))の場合
				if (ITEM_ID_UPD_DTM_DF.equals(itemid))
				{
					// 業務共通例外クラス："0201"（お客様情報変更エラー）
					X31SWebLog.DEBUG_LOG.info("----- FUW07111_checkInserErr() サービス契約料金プラン変更EAエラー -----");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0201);
				}
			}

		}

		// 業務共通例外クラス："0002"（システムエラー）
		X31SWebLog.DEBUG_LOG.info("----- FUW07111_checkInserErr() システムエラー -----");
		throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);

	}
}
