/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbEKK1071C091Edit
*	ソースファイル名：JKKejbEKK1071C091Edit.java
*	作成者			：富士通
*	日付			：2011年07月14日
*＜機能概要＞
*	エリア審査チェック部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/14	富士通		新規作成
*	v4.00.01	2013/04/02	FJ）清藤	IT1-2013-0000551
*	v56.00.00	2021/11/12	FJ) 新谷	【ANK-4154-00-00】【eo】不要資産削除対応
**********************************************************************/

package eo.ejb.common.edit;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JCCFrameworkException;
import eo.ejb.cbm.entity.KK0241ETMsg;
import eo.ejb.cbm.entity.KK0241LE;
import eo.ejb.cbm.entity.KK0251ETMsg;
import eo.ejb.cbm.entity.KK0861ETMsg;
import eo.ejb.cbm.entity.KK0861LE;
import eo.ejb.cbm.entity.KK0931ETMsg;
import eo.ejb.cbm.entity.KK0931LE;
import eo.ejb.cbm.entity.KK1981ETMsg;
import eo.ejb.cbm.entity.KK2321ETMsg;
import eo.ejb.cbm.entity.KK2321LE;
import eo.ejb.cbs.cbsmsg.EKK1071C091CBSMsg;
import eo.ejb.common.JCCAuthorityCtrlCache;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.db.JKKejbKK0251DBABase;

/**
 * <p>
 * エリア審査チェッククラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK1071C091Edit extends JKKejbKK1071Edit
{

	/** 審査チェック結果 OK */
	private static final String CHECK_OK = "00";

	/** 審査詳細種別コード エリアチェック判定 */
	private static final String JDG_KINO_SBT_AREA = "029";

	/** 審査詳細種別コード 関電営業所存在チェック */
	private static final String JDG_KINO_SBT_KANSAI = "030";

	/** 審査詳細種別コード サービス対象エリア警告対象判定 メゾン物件 */
	private static final String JDG_KINO_SBT_MESON = "032";

	/** 審査詳細種別コード サービス対象エリア警告対象判定 KCNサービス提供エリア */
	private static final String JDG_KINO_SBT_KCN = "033";

	/** 審査詳細種別コード サービス対象エリア警告対象判定 KCAT・KCNサービス提供エリア */
	private static final String JDG_KINO_SBT_KCAT = "034";

	/** 審査詳細種別コード サービス対象エリア警告対象判定 ホームタイプ未展開エリア */
	private static final String JDG_KINO_SBT_HOME = "035";

	/** 審査詳細種別コード サービス対象エリア警告対象判定 マンションタイプ物件 */
	private static final String JDG_KINO_SBT_MANSION = "036";

	/** 審査詳細種別コード サービス対象エリア警告対象判定 再送信エリア */
	private static final String JDG_KINO_SBT_RESEND = "037";

	/** サービスエリアチェック種別コード メゾン物件警告 */
	private static final String SVC_AREA_SBT_MESON = "01";

	/** サービスエリアチェック種別コード ＫＣＮサービス提供エリア警告 */
	private static final String SVC_AREA_SBT_KCN = "02";

	/** サービスエリアチェック種別コード ＫＣＡＴ・ＫＣＮサービス提供エリア警告 */
	private static final String SVC_AREA_SBT_KCAT = "03";

	/** サービスエリアチェック種別コード ホームタイプ未展開エリア警告 */
	private static final String SVC_AREA_SBT_HOME = "04";

	/** サービスエリアチェック種別コード マンションタイプ物件警告 */
	private static final String SVC_AREA_SBT_MANSION = "05";

	/** サービスエリアチェック種別コード 再送信エリア警告 */
	private static final String SVC_AREA_SBT_RESEND = "06";

	/** サービス提供エリア警告広域指定範囲コード 都道府県以下全域 */
	private static final String SVC_AREA_ALERT_STATE = "01";

	/** サービス提供エリア警告広域指定範囲コード 市区町村以下全域 */
	private static final String SVC_AREA_ALERT_CITY = "02";

	/** サービス提供エリア警告広域指定範囲コード 大字通称以下全域 */
	private static final String SVC_AREA_ALERT_OAZA = "03";

	/** サービス提供エリア警告広域指定範囲コード 字丁目以下全域 */
	private static final String SVC_AREA_ALERT_JICHO = "04";

	/** マンション物件コード マンション */
	private static final String MANSION_BUKKEN_MANS = "001";

	/** 無効フラグ 有効 */
	private static final String MK_FLG_VALID = "0";

	/** 審査詳細種別コード-サービスエリアチェック種別コードマッチ用配列 */
	private static final String[][] DTL_AREA =
			{{JDG_KINO_SBT_MESON, SVC_AREA_SBT_MESON}
			, {JDG_KINO_SBT_KCN, SVC_AREA_SBT_KCN}
			, {JDG_KINO_SBT_KCAT, SVC_AREA_SBT_KCAT}
			, {JDG_KINO_SBT_HOME, SVC_AREA_SBT_HOME}
			, {JDG_KINO_SBT_MANSION, SVC_AREA_SBT_MANSION}
			, {JDG_KINO_SBT_RESEND, SVC_AREA_SBT_RESEND}};

	/** 審査対象画面タブコード 利用場所情報 */
	private static final String JDG_SCREEN_TAB_PLACE = "02";

	/** 審査対象画面項目コード ご利用場所 */
	private static final String JDG_SCREEN_CST_PLACE = "002";

	/** 審査詳細メッセージID エリアチェック判定 */
	private static final String JDG_MESSAGE_ID_AREA = "EKB3040-KW";

	/** 審査詳細メッセージID サービス対象エリア警告対象判定 */
	private static final String JDG_MESSAGE_ID_SVC = "EKB8090--I";

	/** 審査詳細メッセージID 関電営業所存在チェック0件 */
	private static final String JDG_MESSAGE_ID_KANSAI_ZERO = "EKB3020-KW";

	/** 審査詳細メッセージID 関電営業所存在チェック複数件 */
	private static final String JDG_MESSAGE_ID_KANSAI_OVER = "EKBA990--Q";

	/** メッセージ埋込み文字定義配列 */
	private static final HashMap<String, String> MESSAGE_INPUT_MAP = new HashMap<String, String>();

	static
	{
		MESSAGE_INPUT_MAP.put(JDG_KINO_SBT_MESON, "対象のエリア,メゾン物件警告");
		MESSAGE_INPUT_MAP.put(JDG_KINO_SBT_KCN, "対象のエリア,ＫＣＮサービス提供エリア警告");
		MESSAGE_INPUT_MAP.put(JDG_KINO_SBT_KCAT, "対象のエリア,ＫＣＡＴ・ＫＣＮサービス提供エリア警告");
		MESSAGE_INPUT_MAP.put(JDG_KINO_SBT_HOME, "対象のエリア,ホームタイプ未展開エリア警告");
		MESSAGE_INPUT_MAP.put(JDG_KINO_SBT_MANSION, "対象のエリア,マンションタイプ物件警告");
		MESSAGE_INPUT_MAP.put(JDG_KINO_SBT_RESEND, "対象のエリア,再送信エリア警告");
	}

	/**
	 * コンストラクタです。
	 */
	public JKKejbEKK1071C091Edit()
	{
	}

	/**
	 * <p>
	 * エリア審査チェック処理を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 * @throws Exception
	 */
	public Object getAreaOkChkRslt(CAANMsg inMsg, AgentDispatchContext inContext) throws Exception
	{
		// チェック結果設定用リスト
		ArrayList<String> retArray = new ArrayList<String>();

		// エリアチェック判定を行う
		retArray.add(areaCheck(inMsg, inContext));

		// ANK-4154-00-00 2021/11/24 ADD START
		// 権限設定プロパティファイル 設定値取得
		HashMap<String, String> authPropMap = new HashMap<String, String>();
		JCCAuthorityCtrlCache.setPath();
		try
		{
			authPropMap = JCCAuthorityCtrlCache.getMapOnline("KKW086010PJP");
		}
		catch (Exception e)
		{
			throw new JCCFrameworkException("権限制御定義ファイルキャッシュ情報の取得に失敗しました。", e);
		}

		// 利用場所警告エリアチェック実行権限があるか判定
		boolean doChkWarUsePlaceArea = true;
		if (authPropMap != null) {
			for(String key : authPropMap.keySet())
			{
				if (key.contains("KKW08601") && authPropMap.get(key).contains("DELETE"))
				{
					doChkWarUsePlaceArea = false;
					break;
				}
			}
		}

		if (doChkWarUsePlaceArea)
		{
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "excute:svcAreaCheck#getAreaOkChkRslt");
		// ANK-4154-00-00 2021/11/24 ADD END
			// サービス対象エリア警告対象判定を行う
			retArray.addAll(svcAreaCheck(inMsg, inContext));
		// ANK-4154-00-00 2021/11/24 ADD START
		}
		else
		{
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "skip:svcAreaCheck#getAreaOkChkRslt");
		}
		// ANK-4154-00-00 2021/11/24 ADD END

		// 関電営業所存在チェックを行う
		retArray.add(kansaiBusiofficeChk(inMsg, inContext));

		// チェック結果の配列を作成する
		String[] checkRslt = new String[retArray.size()];

		for (int i = 0; i < retArray.size(); i++)
		{
			checkRslt[i] = retArray.get(i);
		}

		// チェック結果の返却
		return new JKKejbKK1071Edit().getJudgeJudgeRsltCd(checkRslt);

	}

	/**
	 * <p>
	 * エリアチェック処理を行う（エリアチェック判定）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 * @throws Exception
	 */
	public String areaCheck(CAANMsg inMsg, AgentDispatchContext inContext) throws Exception
	{
		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();

		// 審査詳細実施条件のエラー結果コードを取得する
		String errRsltCd = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C091CBSMsg.JDG_JSSI_KINO_SKBT_CD), JDG_KINO_SBT_AREA);

		// エラー結果取得コードが取得できなかった場合は処理を行わない
		if (errRsltCd == null || "".equals(errRsltCd))
		{
			return CHECK_OK;
		}

		// サービス契約回線内訳_経度、サービス契約回線内訳_緯度のいずれかが設定されていない場合
		if (inMsg.isNull(EKK1071C091CBSMsg.LGTD)
				|| inMsg.isNull(EKK1071C091CBSMsg.LTTD))
		{
			// マンション物件の検索を行う
			CAANMsg[] ret = findByMansionKK0861(inMsg);

			// データが取得できなかった場合はチェックエラーとする
			if (ret.length < 1)
			{
				createAreaCheck(inMsg, inContext, errRsltCd);
				return errRsltCd;				
			}

			return CHECK_OK;
		}

		// 引数設定
		String prcGrpCd = inMsg.getString(EKK1071C091CBSMsg.PRC_GRP_CD);
		String pcrsCd = inMsg.getString(EKK1071C091CBSMsg.PCRS_CD);
		String lgtd = inMsg.getString(EKK1071C091CBSMsg.LGTD);
		String lttd = inMsg.getString(EKK1071C091CBSMsg.LTTD);

		// エリアチェック判定を行い、チェックエラーの場合は審査詳細に登録してfalseを返却する
		if (!kk1071.isAreaCheck(prcGrpCd, pcrsCd, lgtd, lttd))
		{
			createAreaCheck(inMsg, inContext, errRsltCd);
			return errRsltCd;
		}

		return CHECK_OK;
	}

	/**
	 * <p>
	 * エリアチェック処理を行う（サービス対象エリア警告対象判定）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 */
	public ArrayList<String> svcAreaCheck(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 結果返却用のリストの設定
		ArrayList<String> arrayRslts = new ArrayList<String>();
		
		// チェックに必要な項目が1つでもNullの場合は処理を行わない
		if (isContentsAllNull(inMsg))
		{
			arrayRslts.add(CHECK_OK);
			return arrayRslts;
		}

		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();

		// サービス提供エリア警告対象住所の全件検索を行う
		CAANMsg[] retKK0931 = findByConditionKK0931(inMsg);

		// レコードが取得できなかった場合は処理を行わない
		if (retKK0931.length == 0)
		{
			arrayRslts.add(CHECK_OK);
			return arrayRslts;
		}

		for (int i = 0; i < DTL_AREA.length; i++)
		{
			// 審査詳細実施条件のエラー結果コードを取得する
			String errRsltCd = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C091CBSMsg.JDG_JSSI_KINO_SKBT_CD), DTL_AREA[i][0]);

			// エラー結果取得コードが取得できなかった場合は次の明細へ
			if (errRsltCd == null || "".equals(errRsltCd))
			{
				continue;
			}

			// サービス提供エリア警告対象住所の件数分処理を行う
			for (int j = 0; j < retKK0931.length; j++)
			{
				// チェック種別コードが審査詳細種別コードごとに定義された値と一致しない場合は次の明細へ
				if (!DTL_AREA[i][1].equals(retKK0931[j].getString(KK0931ETMsg.CHK_SBT_CD)))
				{
					continue;
				}

				// サービス提供エリア警告広域指定範囲コードが
				// 都道府県以下全域、市区町村以下全域、大字通称以下全域、字丁目以下全域のいずれかの場合
				// チェックエラーとして審査詳細に登録してエラー用フラグにtrueを返却する
				if (SVC_AREA_ALERT_STATE.equals(retKK0931[j].getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD))
						|| SVC_AREA_ALERT_CITY.equals(retKK0931[j].getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD))
						|| SVC_AREA_ALERT_OAZA.equals(retKK0931[j].getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD))
						|| SVC_AREA_ALERT_JICHO.equals(retKK0931[j].getString(KK0931ETMsg.SVTA_KKKU_WDASTISCP_CD)))
				{
					createSvcAreaCheck(inMsg, inContext, errRsltCd, DTL_AREA[i][0]);
					arrayRslts.add(errRsltCd);
				}
			}
		}

		return arrayRslts;
	}

	/**
	 * <p>
	 * 関電営業所存在チェックを行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 */
	private String kansaiBusiofficeChk(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// サービス契約番号が未設定の場合は処理を行わない
		if (inMsg.isNull(EKK1071C091CBSMsg.SVC_KEI_NO))
		{
			return CHECK_OK;
		}

		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();

		// 審査詳細実施条件のエラー結果コードを取得する
		String errRsltCd = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C091CBSMsg.JDG_JSSI_KINO_SKBT_CD), JDG_KINO_SBT_KANSAI);

		// エラー結果取得コードが取得できなかった場合は処理を行わない
		if (errRsltCd == null || "".equals(errRsltCd))
		{
			return CHECK_OK;
		}

		// サービス契約番号に紐付く関電営業所コードが全て設定されている場合、審査チェックＯＫとする
		if (isAllNotNullBusOffice(inMsg))
		{
			return CHECK_OK;
		}

		// サービス契約回線内訳_回線場所郵便番号が未設定の場合、審査チェックＮＧとする
		if (inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_PCD))
		{
			createBusiofficeCheck(inMsg, inContext, errRsltCd, JDG_MESSAGE_ID_KANSAI_ZERO);
			return errRsltCd;
		}

		// 郵便番号別関電営業所候補の検索を行う
		CAANMsg[] retMsgKK2321List = findByBusiofficeKK2321(inMsg);

		// 取得したレコード内で適用期間中の件数をカウントする
		Long lngCnt = 0L;
		for (CAANMsg retMsgKK2321: retMsgKK2321List)
		{
			if (super.isChtYmdRange(retMsgKK2321.getString(KK2321ETMsg.PCDB_KPCOFC_KHO_TSTAYMD), retMsgKK2321
					.getString(KK2321ETMsg.PCDB_KPCOFC_KHO_TENDYMD), JKKModelCommon.getOpeDate(inMsg)))
			{
				lngCnt++;
			}
		}

		// カウントされたレコード件数に関わらず、審査チェックＮＧとする
		// （0件か1件以上かでエラーメッセージを変更）
		if (lngCnt < 1)
		{
			createBusiofficeCheck(inMsg, inContext, errRsltCd, JDG_MESSAGE_ID_KANSAI_ZERO);
			return errRsltCd;
		}
		if (lngCnt > 0)
		{
			createBusiofficeCheck(inMsg, inContext, errRsltCd, JDG_MESSAGE_ID_KANSAI_OVER);
			return errRsltCd;
		}

		// 到達不可ロジック
		return CHECK_OK;
	}

	/**
	 * <p>
	 * チェックに必要な項目が全て未設定であるかを判定します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return チェックに必要な項目が全て未設定の場合true。それ以外の場合false。
	 */
	private boolean isContentsAllNull(CAANMsg inMsg)
	{
		// サービス契約回線内訳_回線場所住所コードが設定されている場合は処理を行う
		if (!inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_AD_CD)) 
		{
			return false;
		}

		// サービス契約回線内訳_回線場所郵便番号が設定されている場合は処理を行う
		if (!inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_PCD)) 
		{
			return false;
		}

		// サービス契約回線内訳_回線場所都道府県名が設定されている場合は処理を行う
		if (!inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_STATE_NM)) 
		{
			return false;
		}

		// サービス契約回線内訳_回線場所市区町村名が設定されている場合は処理を行う
		if (!inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_CITY_NM)) 
		{
			return false;
		}

		// サービス契約回線内訳_大字通称名が設定されている場合は処理を行う
		if (!inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_OAZTSU_NM)) 
		{
			return false;
		}

		// サービス契約回線内訳_回線場所字丁目名が設定されている場合は処理を行う
		if (!inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_AZCHO_NM)) 
		{
			return false;
		}

		// サービス契約回線内訳_回線場所番地号が設定されている場合は処理を行う
		if (!inMsg.isNull(EKK1071C091CBSMsg.KAISEN_PLACE_BNCHIGO)) 
		{
			return false;
		}

		// 全てnullの場合は処理を行わない
		return true;
	}

	/**
	 * <p>
	 * サービス契約番号に紐付く関電営業所コードが全て設定されているかを判定します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return サービス契約番号に紐付く関電営業所コードが全て設定されている場合true。それ以外の場合false。
	 */
	private boolean isAllNotNullBusOffice(CAANMsg inMsg)
	{
		// 回線対象サービス契約の検索を行う
		CAANMsg[] retMsgKK0241List = findByConditionKK0241(inMsg);

		for (CAANMsg retMsgKK0241: retMsgKK0241List)
		{
			// 適用期間中のレコードのみ対象とする
			if (super.isChtYmdRange(retMsgKK0241.getString(KK0241ETMsg.KAISEN_UCWK_USE_STAYMD), retMsgKK0241
					.getString(KK0241ETMsg.KAISEN_UCWK_USE_ENDYMD), JKKModelCommon.getOpeDate(inMsg)))
			{
				CAANMsg retMsgKK0251 = findByCurrentKK0251(inMsg, retMsgKK0241.getString(KK0241ETMsg.SVC_KEI_KAISEN_UCWK_NO));

				// カレントが存在しない場合は次の明細へ
				if (null == retMsgKK0251)
				{
					continue;
				}

				// 関電営業所コードが未設定の場合、falseを返却する
				if (retMsgKK0251.isNull(KK0251ETMsg.KEPCO_BUSIOFFICE_CD))
				{
					return false;
				}
			}
		}

		// 関電営業所コードが全て設定されていた場合、trueを返却する
		return true;
	}

	/**
	 * <p>
	 * サービス提供エリア警告対象住所の全件検索を行います。
	 * </p>
	 * 
	 * @param inMsg 引数用ETメッセージ
	 * @return 検索結果のレコード
	 */
	private CAANMsg[] findByConditionKK0931(CAANMsg inMsg)
	{
		// サービス提供エリア警告対象住所の全件検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0931ETMsg.class.getName());
		inETMsg.set(KK0931ETMsg.SVC_CD, inMsg.getString(EKK1071C091CBSMsg.SVC_CD));
		inETMsg.set(KK0931ETMsg.PRC_GRP_CD, inMsg.getString(EKK1071C091CBSMsg.PRC_GRP_CD));
		inETMsg.set(KK0931ETMsg.PCRS_CD, inMsg.getString(EKK1071C091CBSMsg.PCRS_CD));
		inETMsg.set(KK0931ETMsg.PPLAN_CD, inMsg.getString(EKK1071C091CBSMsg.PPLAN_CD));
		inETMsg.set(KK0931ETMsg.SVTA_KKKU_TAIAD_CD, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_AD_CD));
		inETMsg.set(KK0931ETMsg.SVTA_KKKU_TG_PCD, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_PCD));
		inETMsg.set(KK0931ETMsg.SVTA_KKKU_TG_STATE_NM, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_STATE_NM));
		inETMsg.set(KK0931ETMsg.SVTA_KKKU_TG_CITY_NM, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_CITY_NM));
		inETMsg.set(KK0931ETMsg.SVTA_KKKU_TG_OAZTSU_NM, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_OAZTSU_NM));
		inETMsg.set(KK0931ETMsg.SVTA_KKKU_TG_AZCHO_NM, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_AZCHO_NM));
		inETMsg.set(KK0931ETMsg.SVTA_KKKU_TG_BNCHIGO, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_BNCHIGO));
		inETMsg.set(KK0931ETMsg.MK_FLG, MK_FLG_VALID);

		CAANMsg[] otETMsg = null;

		try
		{
			otETMsg = new KK0931LE().findByCondition(inETMsg);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		return otETMsg;
	}

	/**
	 * <p>
	 * 審査詳細の登録を行います（エリアチェック.エリアチェック判定）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd エラー結果コード
	 */
	private void createAreaCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd)
	{
		// 審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C091CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_KINO_SBT_AREA);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JDG_SCREEN_TAB_PLACE);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JDG_SCREEN_CST_PLACE);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, JDG_MESSAGE_ID_AREA);

		// 登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		// PKが重複していた場合は関連制約エラーとする
		if (!createFlg)
		{
			inMsg.set(EKK1071C091CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C091CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}

	}

	/**
	 * <p>
	 * 審査詳細の登録を行います（エリアチェック.サービス対象エリア警告対象判定）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd エラー結果コード
	 * @param kinoSbtCd 審査詳細種別コード
	 */
	private void createSvcAreaCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd, String kinoSbtCd)
	{
		// 審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C091CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, kinoSbtCd);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JDG_SCREEN_TAB_PLACE);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JDG_SCREEN_CST_PLACE);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, JDG_MESSAGE_ID_SVC);
		inETMsg.set(KK1981ETMsg.MSG_UMKM_MOJI, MESSAGE_INPUT_MAP.get(kinoSbtCd));

		// 登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		// PKが重複していた場合は関連制約エラーとする
		if (!createFlg)
		{
			inMsg.set(EKK1071C091CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C091CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}

	}

	/**
	 * <p>
	 * 審査詳細の登録を行います（関電営業所存在チェック）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd エラー結果コード
	 * @param msgId メッセージID
	 */
	private void createBusiofficeCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd, String msgId)
	{
		// 審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C091CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_KINO_SBT_KANSAI);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JDG_SCREEN_TAB_PLACE);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JDG_SCREEN_CST_PLACE);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, msgId);

		// 登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		// PKが重複していた場合は関連制約エラーとする
		if (!createFlg)
		{
			inMsg.set(EKK1071C091CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C091CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}

	}

	/**
	 * <p>
	 * 指定されたサービス契約番号に紐付く有効な回線対象サービス契約のレコードを取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 指定されたサービス契約番号に紐付く有効な回線対象サービス契約レコード
	 */
	private CAANMsg[] findByConditionKK0241(CAANMsg inMsg)
	{
		// 全件検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0241ETMsg.class.getName());
		inETMsg.set(KK0241ETMsg.SVC_KEI_NO, inMsg.getString(EKK1071C091CBSMsg.SVC_KEI_NO));
		inETMsg.set(KK0241ETMsg.MK_FLG, MK_FLG_VALID);

		// 全件検索を行う
		try 
		{
			return new KK0241LE().findByCondition(inETMsg);
		}
		catch (CAANException se)
		{
			throw new RuntimeException(se);
		}
	}

	/**
	 * <p>
	 * 指定されたサービス契約回線内訳番号に紐付く有効なサービス契約回線内訳のレコードを取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param svcKeiKaiUcwkNo サービス契約回線内訳番号
	 * @return 指定されたサービス契約回線内訳番号に紐付く有効なサービス契約回線内訳レコード
	 */
	private CAANMsg findByCurrentKK0251(CAANMsg inMsg, String svcKeiKaiUcwkNo)
	{
		// カレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0241ETMsg.class.getName());
		inETMsg.set(KK0251ETMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaiUcwkNo);
		inETMsg.set(KK0251ETMsg.MK_FLG, MK_FLG_VALID);

		// カレント検索を行う
		return new JKKejbKK0251DBABase().findByCurrent(inETMsg);
	}

	/**
	 * <p>
	 * 指定されたマンション物件番号に紐付く有効なマンションのマンション物件のレコードを取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 指定されたマンション物件番号に紐付く有効なマンション物件レコード
	 */
	private CAANMsg[] findByMansionKK0861(CAANMsg inMsg)
	{
		// 全件検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0861ETMsg.class.getName());
		inETMsg.set(KK0861ETMsg.MANSION_BUKKEN_NO, inMsg.getString(EKK1071C091CBSMsg.MANSION_BUKKEN_NO));
		inETMsg.set(KK0861ETMsg.MANSION_BUKKEN_CD, MANSION_BUKKEN_MANS);
		inETMsg.set(KK0861ETMsg.MK_FLG, MK_FLG_VALID);

		// 全件検索を行う
		try 
		{
			return new KK0861LE().findByCondition(inETMsg);
		}
		catch (CAANException se)
		{
			throw new RuntimeException(se);
		}
	}

	/**
	 * <p>
	 * 指定された郵便番号に紐付く有効な郵便番号別関電営業所候補のレコードを取得します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 指定された郵便番号に紐付く有効な郵便番号別関電営業所候補レコード
	 */
	private CAANMsg[] findByBusiofficeKK2321(CAANMsg inMsg)
	{
		// 全件検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK2321ETMsg.class.getName());
		inETMsg.set(KK2321ETMsg.PCD, inMsg.getString(EKK1071C091CBSMsg.KAISEN_PLACE_PCD));
		inETMsg.set(KK2321ETMsg.MK_FLG, MK_FLG_VALID);

		// 全件検索を行う
		try 
		{
			return new KK2321LE().findByCondition(inETMsg);
		}
		catch (CAANException se)
		{
			throw new RuntimeException(se);
		}
	}

}
