/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUChgSvcPaywayRelCheckCC
*   ソースファイル名：JFUChgSvcPaywayRelCheckCC.java
*   作成者          ：富士通
*   日付            ：2012年06月12日
*＜機能概要＞
*   支払方法変更受付関連チェックコモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00       2012/06/12   FJ）中谷    新規作成【ANK-0358-00-00】支払方法変更申込後の契約状態エラー対応
*   v4.00       2012/07/02   FJ）濱口    変更【ANK-0536-00-00】回線支払方法変更　仕様変更対応
*   v4.00       2012/09/17   FJ）中谷    変更【ANK-0545-00-00】■PMP：サービスコード対応
*   v4.00       2012/10/26   FJ）中谷    変更【IT1-2012-0001705】エラーリファレンス対応
*   v5.00       2013/01/10   FJ) 美濃原  変更【ANK-1399-00-00】フロントＳ文言確認修正対応
*   v47.00      2019/11/25   FJ) 吉田    変更【OM-2018-0000579】全戸一括のお客さまが支払方法変更受付できない
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

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.x01.sc.SCControlMapKeys;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B502CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B502CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B506CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B506CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0491B508CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B508CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0541B502CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0541B502CBSMsg1List;

/**
 * 支払方法変更受付関連チェックコモンコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUChgSvcPaywayRelCheckCC extends JFUBaseNetChgRelCheckCC
{
	/** IN項目:ＫＥＹ＿SYSID */
	private static final String IN_PARAM_KEY_SYSID = "key_sysid";
	/** IN項目:ＫＥＹ＿請求契約番号 */
	private static final String IN_PARAM_KEY_SEIKY_KEI_NO = "key_seiky_kei_no";
	/** IN項目:ＫＥＹ＿サービス契約番号 */
	private static final String IN_PARAM_KEY_SVC_KEI_NO = "key_svc_kei_no";
	/** IN項目:ＫＥＹ＿機器提供サービスコード */
	private static final String IN_PARAM_KKTK_SVC_CD = "key_kktk_svc_cd";

	/* ===== 同一請求番号、同一請求番号以外支払方法変更申込予約存在チェック ===== */
	/* ■□ 請求契約一覧照会（予約手続中）SC ■□ */
	/** テンプレートID(請求契約一覧照会（予約手続中）) */
	private static final String TEMPLATE_ID_1 = "EKK0491B508";
	/** テンプレートID(請求契約一覧照会（予約手続中）明細) */
	private static final String TEMPLATE_ID_1_DETAIL = EKK0491B508CBSMsg.EKK0491B508CBSMSG1LIST;
	/** IN項目リスト(請求契約一覧照会（予約手続中）) */
	private static final List<String> IN_COLUMN_LIST_1 = Arrays.asList(EKK0491B508CBSMsg.KEY_SYSID);
	/** 関連チェックエラー項目(請求契約一覧照会（予約手続中）)１ */
	private static final String ERROR_COLUMN_1_2 = "diff_seikyno_rsv_err";
	/** 関連チェックエラー項目(請求契約一覧照会（予約手続中）)２ */
	private static final String ERROR_COLUMN_1_1 = "same_seikyno_rsv_err";
	/** SC実行結果取得キー(請求契約一覧照会（予約手続中）) */
	private static final String TEMP_TEMPLATE_KEY_1 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_1 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	/* ===== 請求抑止一覧照会（口座番号表示抑止制御）請求抑止コード「05」存在チェック ===== */
	/* ■□請求抑止一覧照会（口座番号表示抑止制御）SC ■□ */
	/** テンプレートID(請求抑止一覧照会（口座番号表示抑止制御）) */
	private static final String TEMPLATE_ID_2 = "EKK0541B502";
	/** テンプレートID(請求抑止一覧照会（口座番号表示抑止制御）)明細 */
	private static final String TEMPLATE_ID_2_DETAIL = EKK0541B502CBSMsg.EKK0541B502CBSMSG1LIST;
	/** IN項目リスト(請求抑止一覧照会（口座番号表示抑止制御）) */
	private static final List<String> IN_COLUMN_LIST_2 = Arrays.asList(EKK0541B502CBSMsg.KEY_SEIKY_KEI_NO);
	/** 関連チェックエラー項目(請求抑止一覧照会（口座番号表示抑止制御）（請求抑止コード「05」存在チェック） */
	private static final String ERROR_COLUMN_2_1 = "seikyu_yokusi_cd_err";
	/** SC実行結果取得キー(請求抑止一覧照会（口座番号表示抑止制御）（請求抑止コード「05」存在チェック) */
	private static final String TEMP_TEMPLATE_KEY_2 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_2 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	/* ===== 同一請求先照会、マンションオーナーＩＤ存在チェック ===== */
	/* ■□ 同一請求先照会SC ■□ */
	/** テンプレートID(同一請求先照会) */
	private static final String TEMPLATE_ID_3 = "EKK0491B030";
	/** 関連チェックエラー項目(同一請求先照会（マンションオーナーＩＤ存在チェック） */
	private static final String ERROR_COLUMN_3_1 = "mansion_owner_id_err";

	/* ===== 請求契約一意照会、お客様名複数存在チェック ===== */
	/* ■□ 請求契約一覧照会SC ■□ */
	/** テンプレートID(請求契約一意照会) */
	private static final String TEMPLATE_ID_4 = "EKK0321B501";
	/** テンプレートID(請求契約一意照会)明細 */
	private static final String TEMPLATE_ID_4_DETAIL = EKK0321B501CBSMsg.EKK0321B501CBSMSG1LIST;
	/** IN項目リスト(請求契約一意照会) */
	private static final List<String> IN_COLUMN_LIST_4 = Arrays.asList(EKK0321B501CBSMsg.KEY_SEIKY_KEI_NO);
	/** 関連チェックエラー項目(請求契約一覧照会（お客様名複数存在チェック） */
	private static final String ERROR_COLUMN_4_1 = "cust_name_err";
	/** SC実行結果取得キー(請求契約一覧照会（お客様名複数存在チェック) */
	private static final String TEMP_TEMPLATE_KEY_4 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_4 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	/* ===== 機器提供サービス契約一覧照会、各種通信機器予約データ存在チェック(C014) ===== */
	/* ■□ 機器提供サービス契約一覧照会SC ■□ */
	/** テンプレートID(機器提供サービス契約一覧照会) */
	private static final String TEMPLATE_ID_5 = "EKK0341B506";
	/** テンプレートID(機器提供サービス契約一覧照会)明細 */
	private static final String TEMPLATE_ID_5_DETAIL = EKK0341B506CBSMsg.EKK0341B506CBSMSG1LIST;
	/** IN項目リスト(機器提供サービス契約一覧照会) */
	private static final List<String> IN_COLUMN_LIST_5 = Arrays.asList(EKK0341B506CBSMsg.KEY_SVC_KEI_NO, EKK0341B506CBSMsg.KEY_KKTK_SVC_CD);
	/** 関連チェックエラー項目(機器提供サービス契約一覧照会（各種通信機器予約データ存在チェック） */
	private static final String ERROR_COLUMN_5_1 = "kktk_svc_cd_014_err";
	/** SC実行結果取得キー(機器提供サービス契約一覧照会（各種通信機器予約データ存在チェック) */
	private static final String TEMP_TEMPLATE_KEY_5 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_5 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	/* ===== 機器提供サービス契約一覧照会、各種通信機器予約データ存在チェック(C015) ===== */
	/* ■□ 機器提供サービス契約一覧照会SC ■□ */
	/** テンプレートID(機器提供サービス契約一覧照会) */
	private static final String TEMPLATE_ID_6 = "EKK0341B506";
	/** テンプレートID(機器提供サービス契約一覧照会)明細 */
	private static final String TEMPLATE_ID_6_DETAIL = EKK0341B506CBSMsg.EKK0341B506CBSMSG1LIST;
	/** IN項目リスト(機器提供サービス契約一覧照会) */
	private static final List<String> IN_COLUMN_LIST_6 = Arrays.asList(EKK0341B506CBSMsg.KEY_SVC_KEI_NO, EKK0341B506CBSMsg.KEY_KKTK_SVC_CD);
	/** 関連チェックエラー項目(機器提供サービス契約一覧照会（各種通信機器予約データ存在チェック） */
	private static final String ERROR_COLUMN_6_1 = "kktk_svc_cd_015_err";
	/** SC実行結果取得キー(機器提供サービス契約一覧照会（各種通信機器予約データ存在チェック) */
	private static final String TEMP_TEMPLATE_KEY_6 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_6 + TEMP_TEMPLATE_PRIFIX_SEP + "2";

	/* ===== 課金先情報の取得(指示書登録用) ===== */
	/* ■□ 課金先一覧照会（請求契約番号）SC ■□ */
	/** テンプレートID(請求契約一意照会) */
	private static final String TEMPLATE_ID_7 = "EKK0321B502";
	/** テンプレートID(請求契約一意照会)明細 */
	private static final String TEMPLATE_ID_7_DETAIL = EKK0321B502CBSMsg.EKK0321B502CBSMSG1LIST;
	/** IN項目リスト(請求契約一意照会) */
	private static final List<String> IN_COLUMN_LIST_7 = Arrays.asList(EKK0321B502CBSMsg.KEY_SVC_KEI_NO);
	/** 関連チェックエラー項目(課金先一覧照会（請求契約番号） */
	private static final String ERROR_COLUMN_7 = EKK0321B502CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(課金先一覧照会（請求契約番号） */
	private static final String TEMP_TEMPLATE_KEY_7 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_7 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

//	// ■サービス契約一覧照会（SYSID）
//	/** テンプレートID：サービス契約一覧照会（SYSID） */
//	private static final String TMP_ID_EKK0081B002 = "EKK0081B002";
//	/** テンプレートID(明細)：サービス契約一覧照会（SYSID） */
//	private static final String TMP_ID_DTL_EKK0081B002 = EKK0081B002CBSMsg.EKK0081B002CBSMSG1LIST;
//	/** IN項目リスト：サービス契約一覧照会（SYSID） */
//	private static final List<String> IN_COL_LIST_EKK0081B002 = Arrays.asList(EKK0081B002CBSMsg.KEY_SYSID);
//	/** 関連チェックエラー項目：サービス契約一覧照会（SYSID） */
//	private static final String ERR_COL_EKK0081B002 = EKK0081B002CBSMsg.KEY_SYSID_ERR;
//	/** SC実行結果取得キー：サービス契約一覧照会（SYSID） */
//	private static final String TMP_KEY_EKK0081B002 = TEMP_TEMPLATE_PRIFIX + TMP_ID_EKK0081B002 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	// ■解約済以外サービス契約一覧照会（SYSID）
	/** テンプレートID：解約済以外サービス契約一覧照会（SYSID） */
	private static final String TMP_ID_EKK0081B003 = "EKK0081B003";
	/** テンプレートID(明細)：解約済以外サービス契約一覧照会（SYSID） */
	private static final String TMP_ID_DTL_EKK0081B003 = EKK0081B003CBSMsg.EKK0081B003CBSMSG1LIST;
	/** IN項目リスト：解約済以外サービス契約一覧照会（SYSID） */
	private static final List<String> IN_COL_LIST_EKK0081B003 = Arrays.asList(EKK0081B003CBSMsg.KEY_SYSID);
	/** 関連チェックエラー項目：解約済以外サービス契約一覧照会（SYSID） */
	private static final String ERR_COL_EKK0081B003 = EKK0081B003CBSMsg.KEY_SYSID_ERR;
	/** SC実行結果取得キー：解約済以外サービス契約一覧照会（SYSID） */
	private static final String TMP_KEY_EKK0081B003 = TEMP_TEMPLATE_PRIFIX + TMP_ID_EKK0081B003 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	// OM-2018-0000579 DEL START
//	// ■請求契約一覧照会（サービス契約番号）
//	/** テンプレートID：請求契約一覧照会（サービス契約番号） */
//	private static final String TMP_ID_EKK0491B507 = "EKK0491B507";
//	/** テンプレートID(明細)：請求契約一覧照会（サービス契約番号） */
//	private static final String TMP_ID_DTL_EKK0491B507 = EKK0491B507CBSMsg.EKK0491B507CBSMSG1LIST;
//	/** IN項目リスト：請求契約一覧照会（サービス契約番号） */
//	private static final List<String> IN_COL_LIST_EKK0491B507 = Arrays.asList(EKK0491B507CBSMsg.KEY_SVC_KEI_NO);
//	/** 関連チェックエラー項目：請求契約一覧照会（サービス契約番号） */
//	private static final String ERR_COL_EKK0491B507 = EKK0491B507CBSMsg.KEY_SVC_KEI_NO_ERR;
//	/** SC実行結果取得キー：請求契約一覧照会（サービス契約番号） */
//	private static final String TMP_KEY_EKK0491B507 = TEMP_TEMPLATE_PRIFIX + TMP_ID_EKK0491B507 + TEMP_TEMPLATE_PRIFIX_SEP + "1";
	// OM-2018-0000579 DEL END

	/**
	 * 支払方法変更受付関連チェック関連チェック実行処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite executeCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		try
		{
			// ユーザデータ取得
			HashMap inMap = (HashMap)param.getData(fixedText);

			// IN項目:ＫＥＹ＿SYSID
			String inParamSysid = (String)inMap.get(IN_PARAM_KEY_SYSID);
			// IN項目:ＫＥＹ＿請求契約番号
			String inParamSeikyKeiNo = (String)inMap.get(IN_PARAM_KEY_SEIKY_KEI_NO);

			/* ■□ 同一請求番号、同一請求番号以外以外支払方法変更申込予約存在チェック ■□ */
			// ●サービス契約一覧照会（SYSID）
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_1);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// 上りマッピング
			setInMapSvcKeiSysidSearch(param, fixedText, inParamSysid);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_1, TEMPLATE_ID_1_DETAIL, IN_COLUMN_LIST_1, ERROR_COLUMN_1_1);

			for (HashMap seikyMap : getTemplateList(inMap, TEMP_TEMPLATE_KEY_1, TEMPLATE_ID_1_DETAIL))
			{
				// 請求契約番号
				String seikyKeiNo = (String)seikyMap.get(EKK0491B508CBSMsg1List.SEIKY_KEI_NO);

				// 自契約の請求先の場合
				if (inParamSeikyKeiNo.equals(seikyKeiNo))
				{
					// 同一請求番号
					setRelationErrorInfo(param, TEMPLATE_ID_1, ERROR_COLUMN_1_1, fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
				// 自契約以外の請求先の場合
				else
				{
					// 同一請求番号以外
					setRelationErrorInfo(param, TEMPLATE_ID_1, ERROR_COLUMN_1_2, fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}

			}

			/* ■□ マンションオーナーＩＤ存在チェック ■□ */
			checkMansOwnerId(handle, param, fixedText, inParamSysid, inMap);

		}
		finally
		{
			// 一時領域削除
			super.deleteTempArea(param, fixedText);
		}
		return param;
	}

	/**
	 * 支払方法変更受付関連チェック関連チェック実行処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite executeCheckMskm(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		try
		{
			// ユーザデータ取得
			HashMap inMap = (HashMap)param.getData(fixedText);

			// IN項目:ＫＥＹ＿SYSID
			//String inParamSysid = (String)inMap.get(IN_PARAM_KEY_SYSID);
			// IN項目:ＫＥＹ＿請求契約番号
			String inParamSeikyKeiNo = (String)inMap.get(IN_PARAM_KEY_SEIKY_KEI_NO);
			// IN項目:ＫＥＹ＿サービス契約番号
			String inParamSvcKeiNo = (String)inMap.get(IN_PARAM_KEY_SVC_KEI_NO);
			// IN項目:ＫＥＹ＿機器提供サービスコードC014
			String inParamKktkSvcCd = (String)inMap.get(IN_PARAM_KKTK_SVC_CD);

			/* ■□ 請求契約一意照会、請求抑止コード「05」存在チェック ■□ */
			// ●請求抑止一覧照会（口座番号表示抑止制御）
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_2);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// 上りマッピング
			setInMapSeikyYSearch(param, fixedText, inParamSeikyKeiNo);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_2, TEMPLATE_ID_2_DETAIL, IN_COLUMN_LIST_2, ERROR_COLUMN_2_1);
			for (HashMap seikyMap : getTemplateList(inMap, TEMP_TEMPLATE_KEY_2, TEMPLATE_ID_2_DETAIL))
			{
				// 請求抑止コード
				String seikyYoksiCd = (String)seikyMap.get(EKK0541B502CBSMsg1List.SEIKY_YOKSI_CD);

				// 請求抑止コード「05」WEB請求情報公開要否 のデータが存在する場合
				if (seikyYoksiCd.equals(JFUStrConst.CD00111_05))
				{
					setRelationErrorInfo(param, TEMPLATE_ID_2, ERROR_COLUMN_2_1, fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
			}

			/* ■□ マンションオーナーＩＤ存在チェック ■□ */
			// 「executeCheck」が申込時にも呼び出されるため、そちらでチェック
			//  checkEKK0491B030(handle, param, fixedText, inParamSysid, inMap);

			/* ■□ お客様名複数存在チェック ■□ */
			// ●請求契約一覧照会SC
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_4);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// 上りマッピング
			setInMapSeikyYSearch(param, fixedText, inParamSeikyKeiNo);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_4, TEMPLATE_ID_4_DETAIL, IN_COLUMN_LIST_4, ERROR_COLUMN_4_1);

			// お客様名(1件目のお客様名を取得)
			int cnt = 0;
			String custTgt = "";
			for (HashMap seikyMap : getTemplateList(inMap, TEMP_TEMPLATE_KEY_4, TEMPLATE_ID_4_DETAIL))
			{
				if (cnt == 0)
				{
					//お客様名 (1件目のお客様名を取得)
					custTgt = (String)seikyMap.get(EKK0321B501CBSMsg1List.CUST_NM);
					cnt++;
				}
				// お客様名(n件目のお客様名を取得)
				String custNm = (String)seikyMap.get(EKK0321B501CBSMsg1List.CUST_NM);
				// SYSIDのお客様名が1件でも異なっている場合
				if (!(custTgt.equals(custNm)))
				{
					setRelationErrorInfo(param, TEMPLATE_ID_4, ERROR_COLUMN_4_1, fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
			}

			/* ■□ 各種通信機器予約データ存在チェック(C014) ■□ */
			// ●請求契約一覧照会SC
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_5);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// 上りマッピング
			setInMapKktkSvcCdSearch014(param, fixedText, inParamSvcKeiNo, inParamKktkSvcCd);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_5, TEMPLATE_ID_5_DETAIL, IN_COLUMN_LIST_5, ERROR_COLUMN_5_1);
			for (HashMap seikyMap : getTemplateList(inMap, TEMP_TEMPLATE_KEY_5, TEMPLATE_ID_5_DETAIL))
			{
				// 件数
				String cnt014 = (String)seikyMap.get(EKK0341B506CBSMsg1List.CNT);

				// 件数が1件でも存在する場合
				if (!(cnt014.equals(JFUStrConst.S_ZERO)))
				{
					setRelationErrorInfo(param, TEMPLATE_ID_5, ERROR_COLUMN_5_1, fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
			}

			/* ■□ 各種通信機器予約データ存在チェック(C015) ■□ */
			// ●請求契約一覧照会SC
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_6);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// 上りマッピング
			setInMapKktkSvcCdSearch015(param, fixedText, inParamSvcKeiNo, inParamKktkSvcCd);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_6, TEMPLATE_ID_6_DETAIL, IN_COLUMN_LIST_6, ERROR_COLUMN_6_1);
			for (HashMap seikyMap : getTemplateList(inMap, TEMP_TEMPLATE_KEY_6, TEMPLATE_ID_6_DETAIL))
			{
				// 件数
				String cnt015 = (String)seikyMap.get(EKK0341B506CBSMsg1List.CNT);

				// 件数が1件でも存在する場合
				if (!(cnt015.equals(JFUStrConst.S_ZERO)))
				{
					setRelationErrorInfo(param, TEMPLATE_ID_6, ERROR_COLUMN_6_1, fixedText);
					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)), String
							.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
				}
			}

			/* ■□ 課金先情報の取得 ■□ */
			// ●課金先一覧照会（請求契約番号）SC
			// ユーザデータ初期化
			initData(param, fixedText, IN_COLUMN_LIST_7);
			// 検索エラーなし設定
			ignoreSearchError(param, fixedText);
			// 上りマッピング
			setInMapKakinsSearch(param, fixedText, inParamSvcKeiNo);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_7, TEMPLATE_ID_7_DETAIL, IN_COLUMN_LIST_7, ERROR_COLUMN_7);

			// 基本料金の課金先データを取得
			for (HashMap kakinsMap : getTemplateList(inMap, TEMP_TEMPLATE_KEY_7, TEMPLATE_ID_7_DETAIL))
			{
				// サービス契約内訳番号
				String svcKeiUcwkNo = (String)kakinsMap.get(EKK0321B502CBSMsg1List.SVC_KEI_UCWK_NO);
				// 機器提供サービス契約番号
				String kktkSvcKeiNo = (String)kakinsMap.get(EKK0321B502CBSMsg1List.KKTK_SVC_KEI_NO);
				// オプションサービス契約番号
				String opSvcKeiNo = (String)kakinsMap.get(EKK0321B502CBSMsg1List.OP_SVC_KEI_NO);
				// 請求オプションサービス契約番号
				String seiOpSvcKeiNo = (String)kakinsMap.get(EKK0321B502CBSMsg1List.SEIOPSVC_KEI_NO);
				// サブオプションサービス契約番号
				String sbopSvcKeiNo = (String)kakinsMap.get(EKK0321B502CBSMsg1List.SBOP_SVC_KEI_NO);
				// 割引サービス契約番号
				String wribSvcKeiNo = (String)kakinsMap.get(EKK0321B502CBSMsg1List.WRIB_SVC_KEI_NO);
				// オーナー契約番号
				String ownrKeiNo = (String)kakinsMap.get(EKK0321B502CBSMsg1List.OWNR_KEI_NO);

				// 基本料金判定
				boolean isBaseKakins =
						JFUBPCommon.isNull(svcKeiUcwkNo) && JFUBPCommon.isNull(kktkSvcKeiNo) && JFUBPCommon.isNull(opSvcKeiNo)
								&& JFUBPCommon.isNull(seiOpSvcKeiNo) && JFUBPCommon.isNull(sbopSvcKeiNo) && JFUBPCommon.isNull(wribSvcKeiNo)
								&& JFUBPCommon.isNull(ownrKeiNo);

				// 基本料金の場合
				if (isBaseKakins)
				{
					// 下りマッピング
					// サービス契約番号
					inMap.put(EKK0321B502CBSMsg1List.SVC_KEI_NO, kakinsMap.get(EKK0321B502CBSMsg1List.SVC_KEI_NO));
					// 請求契約番号
					inMap.put(EKK0321B502CBSMsg1List.SEIKY_KEI_NO, kakinsMap.get(EKK0321B502CBSMsg1List.SEIKY_KEI_NO));
					// 課金先適用開始年月日
					inMap.put(EKK0321B502CBSMsg1List.KAKINS_TSTAYMD, kakinsMap.get(EKK0321B502CBSMsg1List.KAKINS_TSTAYMD));
					// 課金先適用終了年月日
					inMap.put(EKK0321B502CBSMsg1List.KAKINS_TENDYMD, kakinsMap.get(EKK0321B502CBSMsg1List.KAKINS_TENDYMD));
					// 無効フラグ
					inMap.put(EKK0321B502CBSMsg1List.MK_FLG, kakinsMap.get(EKK0321B502CBSMsg1List.MK_FLG));
					// 登録年月日時分秒
					inMap.put(EKK0321B502CBSMsg1List.ADD_DTM, kakinsMap.get(EKK0321B502CBSMsg1List.ADD_DTM));
					// 登録オペレータアカウント
					inMap.put(EKK0321B502CBSMsg1List.ADD_OPEACNT, kakinsMap.get(EKK0321B502CBSMsg1List.ADD_OPEACNT));
					// 更新年月日時分秒
					inMap.put(EKK0321B502CBSMsg1List.UPD_DTM, kakinsMap.get(EKK0321B502CBSMsg1List.UPD_DTM));
					// 更新オペレータアカウント
					inMap.put(EKK0321B502CBSMsg1List.UPD_OPEACNT, kakinsMap.get(EKK0321B502CBSMsg1List.UPD_OPEACNT));
					break;
				}
			}
		}
		finally
		{
			// 一時領域削除
			super.deleteTempArea(param, fixedText);
		}
		return param;
	}

	/**
	 * 上りマッピング項目設定(課金先一覧照会（請求契約番号）)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapKakinsSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0321B502CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}

	/**
	 * 上りマッピング項目設定(サービス契約一覧照会（SYSID）)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysid SYSID
	 * @throws RequestParameterException
	 */
	private void setInMapSvcKeiSysidSearch(IRequestParameterReadWrite param, String fixedText, String sysid) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿SYSID
		inMap.put(EKK0081B002CBSMsg.KEY_SYSID, sysid);
	}

	/**
	 * 上りマッピング項目設定(サービス契約一覧照会（SYSID）)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param seiky_kei_no 請求契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapSeikyYSearch(IRequestParameterReadWrite param, String fixedText, String seiky_kei_no) throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿請求契約番号
		inMap.put(EKK0541B502CBSMsg.KEY_SEIKY_KEI_NO, seiky_kei_no);

	}

	/**
	 * 同一請求先照会、マンションオーナーＩＤ存在チェック
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param inParamSysid SYSID
	 * @param inMap 
	 * @throws Exception 
	 * @throws RequestParameterException
	 */
	private void checkMansOwnerId(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String inParamSysid, HashMap inMap)
			throws Exception
	{
		// OM-2013-0002608：請求契約SYSID修正対応、メソッド内全修正

		// ●EKK0081B002：サービス契約一覧照会（SYSID）
//		// 初期化
//		initData(param, fixedText, IN_COL_LIST_EKK0081B002);
//		// 検索エラーなし設定
//		ignoreSearchError(param, fixedText);
//		// 上りマッピング
//		setEKK0081B002(param, fixedText, inParamSysid);
//		// サービスIF実行
//		executeSC(handle, param, fixedText, TMP_ID_EKK0081B002, TMP_ID_DTL_EKK0081B002, IN_COL_LIST_EKK0081B002, ERR_COL_EKK0081B002);
//		// 結果取得
//		List eKK0081B002List = getTemplateList(inMap, TMP_KEY_EKK0081B002, TMP_ID_DTL_EKK0081B002);

		// ●EKK0081B003：解約済以外サービス契約一覧照会（SYSID）
		// 初期化
		initData(param, fixedText, IN_COL_LIST_EKK0081B003);
		// 検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// 上りマッピング
		setEKK0081B002(param, fixedText, inParamSysid);
		// サービスIF実行
		executeSC(handle, param, fixedText, TMP_ID_EKK0081B003, TMP_ID_DTL_EKK0081B003, IN_COL_LIST_EKK0081B003, ERR_COL_EKK0081B003);
		// 結果取得
		List eKK0081B002List = getTemplateList(inMap, TMP_KEY_EKK0081B003, TMP_ID_DTL_EKK0081B003);

		if(eKK0081B002List == null || eKK0081B002List.size() == 0)
		{
			// サービス契約取得結果なしの場合、エラー
			// ※この処理に来ることはないが、念のために入れておく
			setRelationErrorInfo(param, TEMPLATE_ID_3, ERROR_COLUMN_3_1, fixedText);
			throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)),
					String.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
		}

		// OM-2018-0000579 DEL START
//		// 請求契約情報取得処理
//		for (int i = 0; i < eKK0081B002List.size(); i++)
//		{
//			HashMap eKK0081B002Map = (HashMap)eKK0081B002List.get(i);
//
//			if(eKK0081B002Map == null || eKK0081B002Map.size() == 0)
//			{
//				continue;
//			}
//
//			// サービス契約番号
//			String svcKeiNo = (String)eKK0081B002Map.get(EKK0081B002CBSMsg1List.SVC_KEI_NO);
//			// サービス契約ステータス
//			String svcKeiStat = (String)eKK0081B002Map.get(EKK0081B002CBSMsg1List.SVC_KEI_STAT);
//
//			if(JFUBPCommon.isNull(svcKeiNo) || JFUStrConst.CD00037_910.equals(svcKeiStat) || JFUStrConst.CD00037_920.equals(svcKeiStat))
//			{
//				// サービス契約番号が存在しない、サービス契約ステータスが「"910"または"920"」のどれかの場合
//				continue;
//			}
//
//			// ●EKK0491B507：請求契約一覧照会（サービス契約番号）
//			// 初期化
//			initData(param, fixedText, IN_COL_LIST_EKK0491B507);
//			// 検索エラーなし設定
//			ignoreSearchError(param, fixedText);
//			// 上りマッピング
//			setEKK0491B507(param, fixedText, svcKeiNo);
//			// サービスIF実行
//			executeSC(handle, param, fixedText, TMP_ID_EKK0491B507, TMP_ID_DTL_EKK0491B507, IN_COL_LIST_EKK0491B507, ERR_COL_EKK0491B507);
//			// 結果取得
//			List eKK0491B507List = getTemplateList(inMap, TMP_KEY_EKK0491B507, TMP_ID_DTL_EKK0491B507);
//
//			if(eKK0491B507List == null || eKK0491B507List.size() == 0)
//			{
//				continue;
//			}
//
//			for (int j = 0; j < eKK0491B507List.size(); j++)
//			{
//				HashMap eKK0491B507Map = (HashMap)eKK0491B507List.get(j);
//				if(eKK0491B507Map == null || eKK0491B507Map.size() == 0)
//				{
//					continue;
//				}
//
//				// マンションオーナーID
//				String mansionOwnrId = (String)eKK0491B507Map.get(EKK0491B507CBSMsg1List.MANSION_OWNR_ID);
//				// 請求契約ステータス
//				String seikyKeiStat = (String)eKK0491B507Map.get(EKK0491B507CBSMsg1List.SEIKY_KEI_STAT);
//
//				if(JFUStrConst.CD00057_100.equals(seikyKeiStat)
//						&& !(null == mansionOwnrId || "".equals(mansionOwnrId) || "null".equals(mansionOwnrId)))
//				{
//					// 請求契約ステータスが「100」、かつ、マンションオーナーIDがセットされている場合
//					setRelationErrorInfo(param, TEMPLATE_ID_3, ERROR_COLUMN_3_1, fixedText);
//					throw new SCCallException(String.valueOf(param.getControlMapData(SCControlMapKeys.RETURN_MESSAGE)),
//							String.valueOf(RETURN_CODE_NORMAL), JPCModelConstant.RELATION_ERR);
//				}
//			}
//		}
		// OM-2018-0000579 DEL END
	}

	/**
	 * 上りマッピング項目設定(サービス契約一覧照会（SYSID）)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysid SYSID
	 * @throws RequestParameterException
	 */
	private void setEKK0081B002(IRequestParameterReadWrite param, String fixedText, String sysid) throws RequestParameterException
	{
		// 機能コード設定(2)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿SYSID
		inMap.put(EKK0081B002CBSMsg.KEY_SYSID, sysid);
	}

	// OM-2018-0000579 DEL START
//	/**
//	 * 上りマッピング項目設定(請求契約一覧照会（サービス契約番号）)
//	 * <br>
//	 * @param param リクエストパラメータ
//	 * @param fixedText サービスメッセージ
//	 * @param svcKeiNo サービス契約番号
//	 * @throws RequestParameterException
//	 */
//	private void setEKK0491B507(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
//	{
//		// 機能コード設定(1)
//		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);
//
//		// ユーザデータ取得
//		HashMap inMap = (HashMap)param.getData(fixedText);
//
//		// ＫＥＹ＿サービス契約番号
//		inMap.put(EKK0491B507CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
//	}
	// OM-2018-0000579 DEL END

	/**
	 * 上りマッピング項目設定(機器提供サービス契約一覧照会（機器提供サービスコードがC014）)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svc_kei_no サービス契約番号
	 * @param kktk_svc_cd 機器提供サービスコード
	 * @throws RequestParameterException
	 */
	private void setInMapKktkSvcCdSearch014(IRequestParameterReadWrite param, String fixedText, String svc_kei_no, String kktk_svc_cd)
			throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0341B506CBSMsg.KEY_SVC_KEI_NO, svc_kei_no);

		// ＫＥＹ＿機器提供サービスコード
		inMap.put(EKK0341B506CBSMsg.KEY_KKTK_SVC_CD, JFUStrConst.KK0771_KKTK_SVC_CD_C014);
	}

	/**
	 * 上りマッピング項目設定(機器提供サービス契約一覧照会（機器提供サービスコードがC015）)
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svc_kei_no サービス契約番号
	 * @param kktk_svc_cd 機器提供サービスコード
	 * @throws RequestParameterException
	 */
	private void setInMapKktkSvcCdSearch015(IRequestParameterReadWrite param, String fixedText, String svc_kei_no, String kktk_svc_cd)
			throws RequestParameterException
	{
		// 機能コード設定(1)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0341B506CBSMsg.KEY_SVC_KEI_NO, svc_kei_no);
		// ＫＥＹ＿機器提供サービスコード
		inMap.put(EKK0341B506CBSMsg.KEY_KKTK_SVC_CD, JFUStrConst.KK0771_KKTK_SVC_CD_C015);
	}
}
