/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*   モジュール名    ：JPCAdCommonCheckUtil
*   ソースファイル名：JPCAdCommonCheckUtil.java
*   作成者          ：FJ
*   日付            ：2012年06月06日
*＜機能概要＞
*   住所共通ﾁｪｯｸ部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00.00    2011/06/5    FJ）岩佐    新規作成
*
**********************************************************************/

package eo.common.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

import com.fujitsu.futurity.common.JCCGetOperationDate;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JPCStrConst;

/**
 * 住所共通チェック部品です。<p>
 * <p>
 * <BR>
 * @author 富士通
 */
public class JPCAdCommonCheckUtil {
	/** 出力結果ﾊﾟﾗﾒｰﾀ */
	// checkRsltst			⇒ 判定結果
	// foreignAdChk			⇒ 海外住所チェック
	// ad61MojiCh			⇒ 住所６１文字チェック
	// ad61MojiChkdtail		⇒ 住所６１文字チェック詳細
	// pcdConsistencyChk	⇒ 郵便番号整合性チェック
	// adMaxKaiChk			⇒ 住所最下層チェック
	// adMstSonzaiChk		⇒ 住所マスタ存在チェック
	
	//***<< 2012/07/04 キー情報の共通化対応の為、JPCStrConstへ移動 K.IWASA [del] S ***>>/
//	private static final String checkRsltst = "checkRslt";
//	private static final String foreignAdChk = "foreignAdChk";
//	private static final String ad61MojiChk = "ad61MojiChk";
//	private static final String ad61MojiChkdtail = "ad61MojiChkdtail";
//	private static final String pcdConsistencyChk = "pcdConsistencyChk";
//	private static final String adMaxKaiChk = "adMaxKaiChk";
//	private static final String adMstSonzaiChk = "adMstSonzaiChk";
	//***<< 2012/07/04 キー情報の共通化対応の為、JPCStrConstへ移動 K.IWASA [del] E ***>>/
	
	// 海外住所コード
	private static final String foreignAdcd = "00000000000";
	
	// フラグ定義
	private static final String ON   = "1";
	private static final String OFF  = "0";
	
	private static final String PCD_CONSISTENCY_SQL =
		"SELECT COUNT(*) cnt FROM ZM_M_AD AD " +
		"WHERE AD_CD = ? AND PCD = ? AND AD.MK_FLG = '0' AND " +
		"? BETWEEN AD.AD_TSTAYMD AND AD.AD_TENDYMD AND " +
		"RSV_APLY_YMD || GENE_ADD_DTM = " +
		"(SELECT MAX(MAXAD.RSV_APLY_YMD || MAXAD.GENE_ADD_DTM) " +
		"FROM ZM_M_AD MAXAD WHERE MAXAD.AD_CD = AD.AD_CD AND " +
		"RSV_APLY_YMD <= ?  AND MAXAD.MK_FLG = '0')";
	
	private static final String AD_MAXKAI_SQL =
		"SELECT COUNT(*) cnt FROM ZM_M_AD AD " +
		"WHERE  PCD = ? AND" +
		" AD_CD BETWEEN ? AND ? AND  AD.MK_FLG = '0' AND " +
		"? BETWEEN AD.AD_TSTAYMD AND AD.AD_TENDYMD AND " +
		"RSV_APLY_YMD || GENE_ADD_DTM = " +
		"(SELECT MAX(MAXAD.RSV_APLY_YMD || MAXAD.GENE_ADD_DTM) " +
		"FROM ZM_M_AD MAXAD WHERE MAXAD.AD_CD = AD.AD_CD AND " +
		"RSV_APLY_YMD <= ?  AND MAXAD.MK_FLG = '0')";
	
	private static final String AD_MST_SONZAI_SQL =
		"SELECT COUNT(*) cnt FROM ZM_M_AD AD " +
		"WHERE  AD_CD = ? AND AD.MK_FLG = '0' AND " +
		"? BETWEEN AD.AD_TSTAYMD AND AD.AD_TENDYMD AND " +
		"RSV_APLY_YMD || GENE_ADD_DTM = " +
		"(SELECT MAX(MAXAD.RSV_APLY_YMD || MAXAD.GENE_ADD_DTM) " +
		"FROM ZM_M_AD MAXAD WHERE MAXAD.AD_CD = AD.AD_CD AND " +
		"RSV_APLY_YMD <= ?  AND MAXAD.MK_FLG = '0')";
	
	/**
	 * 住所ﾁｪｯｸ共通部品<p>
	 * 入力情報のチェック対象を基に各種住所に対する
	 * チェックを実施する
	 * @住所コードがnullの場合、判定不能のため判定結果をエラーとする。
	 * A各チェックを実施し判定結果更新する。
	 * Bexception発生時は判定結果をfalseとする
	 * ※チェック内容
	 *   海外住所チェック
	 *   住所６１文字チェック
	 *   郵便番号整合性チェック
	 *   住所最下層チェック
	 *   住所マスタ存在チェック
	 * <BR>
	 * @param checkTrgt          チェック対象
	 * @param con                DBコネクション
	 * @param adcd               住所コード
	 * @param pcd                郵便番号
	 * @param admaninputFlg      手動入力フラグ
	 * @param stateNm            都道府県名
	 * @param cityNm             市区町村名
	 * @param oaztsuNm           大字通称名
	 * @param oaztsuNm           字丁目名
	 * @param bnchigo            番地号
	 * @param adrttm             住所補記・建物名
	 * @param adrrm              住所補記・部屋番号
	 * @return                   判定結果
	 */
	public static HashMap<String,Object> commonAdInputChk(HashMap<String, Boolean> checkTrgt,
															Connection con,
															String adcd, 
															String pcd,
															String admaninputFlg,
															String stateNm,
															String cityNm,
															String oaztsuNm,
															String azchoNm,
															String bnchigo,
															String adrttm,
															String adrrm,
															String opeDate)
	{
		// 出力結果格納先を生成
		HashMap<String,Object> checkRslt = new HashMap<String,Object>();
		
		//初期値を設定する
		checkRslt.put(JPCStrConst.checkRsltst, true);
		checkRslt.put(JPCStrConst.foreignAdChk, false);
		checkRslt.put(JPCStrConst.ad61MojiChk, false);
		checkRslt.put(JPCStrConst.ad61MojiChkdtail, 0);
		checkRslt.put(JPCStrConst.pcdConsistencyChk, false);
		checkRslt.put(JPCStrConst.adMaxKaiChk, false);
		checkRslt.put(JPCStrConst.adMstSonzaiChk, false);
		
		// 住所コードが11桁以外の場合はnullを返却
		if(adcd == null || adcd.length() != 11 ) {
			
			checkRslt.put(JPCStrConst.checkRsltst, false);
			return  checkRslt;
		}
		
		// 海外住所ﾁｪｯｸを実施するか判定する
		if(null != checkTrgt.get(JPCStrConst.foreignAdChk) && checkTrgt.get(JPCStrConst.foreignAdChk) == true){
			// 海外住所ﾁｪｯｸを実施する
			boolean foreignAdrslt = foreignAdChk(adcd, admaninputFlg);
			
			checkRslt.put(JPCStrConst.foreignAdChk, foreignAdrslt);
			
		}
		
		// 住所６１文字チェックの実施判定
		if(null != checkTrgt.get(JPCStrConst.ad61MojiChk) && checkTrgt.get(JPCStrConst.ad61MojiChk) == true){
			
			// 住所６１文字チェックの実施
			HashMap<String,Object> ad61Mojirslt =
				ad61MojiChk(adcd, pcd, admaninputFlg, stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
			
			checkRslt.put(JPCStrConst.ad61MojiChk, ad61Mojirslt.get(JPCStrConst.ad61MojiChk));
			checkRslt.put(JPCStrConst.ad61MojiChkdtail, ad61Mojirslt.get(JPCStrConst.ad61MojiChkdtail));
			
		}
		
		// 郵便番号整合性チェックの実施判定
		if(null != checkTrgt.get(JPCStrConst.pcdConsistencyChk) && checkTrgt.get(JPCStrConst.pcdConsistencyChk) == true){
			
			// 郵便番号整合性チェックの実施
			try {
				boolean pcdConsistencyrslt = pcdConsistencyChk(con, adcd, pcd, admaninputFlg, opeDate);
				
				checkRslt.put(JPCStrConst.pcdConsistencyChk, pcdConsistencyrslt);
			}
			catch (Exception e)
			{
				checkRslt.put(JPCStrConst.checkRsltst, false);
				return  checkRslt;
			}
		}
		
		// 最下層住所チェックの実施判定
		if(null != checkTrgt.get(JPCStrConst.adMaxKaiChk) && checkTrgt.get(JPCStrConst.adMaxKaiChk) == true){
			
			try {
				// 最下層住所チェックの実施
				boolean adMaxKairslt = adMaxKaiChk(con, adcd, pcd, opeDate);
				checkRslt.put(JPCStrConst.adMaxKaiChk, adMaxKairslt);
			}
			catch (Exception e)
			{
				checkRslt.put(JPCStrConst.checkRsltst, false);
				return  checkRslt;
			}
		}
		
		// 住所マスタ存在チェックの実施判定
		if(null != checkTrgt.get(JPCStrConst.adMstSonzaiChk) && checkTrgt.get(JPCStrConst.adMstSonzaiChk) == true){
			
			try {
				// 住所マスタ存在チェックの実施判定
				boolean adMstSonzai = adMstSonzaiChk(con, adcd, admaninputFlg, opeDate);
				checkRslt.put(JPCStrConst.adMstSonzaiChk, adMstSonzai);
				
			}
			catch (Exception e)
			{
				checkRslt.put(JPCStrConst.checkRsltst, false);
				return  checkRslt;
			}
		}
		
		return checkRslt;
	}
	
	/**
	 * 海外住所ﾁｪｯｸ<p>
	 * 住所コードがALL0の場合は手動入力フラグが1でないと
	 * 不正な状態となるため、上記の場合にfalse、
	 * 上記以外はtrueを返却する
	 *   住所マスタ存在チェック
	 * <BR>
	 * @param adcd               住所コード
	 * @param admaninputFlg      手動入力フラグ
	 * @return  true ：海外住所の場合、または通常の住所の場合
	 * @return  false：住所コードALL0で手動入力ではない場合
	 * */
	public static Boolean foreignAdChk(String adcd, String admaninputFlg) {
		
		boolean rslt = true;
		
		// 住所コードが"00000000000"で手動入力フラグが"0"の場合、falseを返却
		if (foreignAdcd.equals(adcd) && OFF.equals(admaninputFlg)){
			
			rslt = false;
		}
		// 判定結果を返却する
		return rslt;
	}
	
	/**
	 * 住所６１文字ﾁｪｯｸ<p>
	 * <p>
	 * <BR>
	 * 住所コードを基に、各項目の文字列数が超過していないか判定を行う
	 * 判定内容については以下の通り
	 *             文字数
	 * 住所コード    都道府県 市区町村 大字通称 字丁目 番地号
	 * ***********   4        12       18       12     15
	 * ********000   4        12       18       0      27
	 * *****000000   4        12       0        0      45
	 * **000000000   4        0        0        0      57
	 * 00000000000   0        0        0        0      61
	 * <BR>
	 * @param adcd               住所コード
	 * @param admaninputFlg      手動入力フラグ
	 * @param stateNm            都道府県名
	 * @param cityNm             市区町村名
	 * @param oaztsuNm           大字通称名
	 * @param oaztsuNm           字丁目名
	 * @param bnchigo            番地号
	 * @return ad61MojiChk true  :文字数チェックで全てＯＫの場合
	 * @return ad61MojiChk false :文字数チェックで１項目でもＮＧの場合
	 * @return ad61MojiChkdtail  :番地号の最大文字数
	 */
	public static HashMap<String,Object> ad61MojiChk(String adcd, 
								String pcd,
								String admaninputFlg,
								String stateNm,
								String cityNm,
								String oaztsuNm,
								String azchoNm,
								String bnchigo,
								String adrttm,
								String adrrm) {
		
		//住所コードの分割を行う
		String adcd1 = adcd.substring(2, 11);
		String adcd2 = adcd.substring(5, 11);
		String adcd3 = adcd.substring(8, 11);
		
		// 各チェック項目の最大文字数の初期値設定
		int stateNmmax  = 0;
		int cityNmmax   = 0;
		int oaztsuNmmax = 0;
		int azchoNmmax  = 0;
		int bnchigomax  = 0;
		
		//■各項目に対する文字列数を取得
		
		int stateNmleng  = 0;
		int cityNmleng   = 0;
		int oaztsuNmleng = 0;
		int azchoNmleng  = 0;
		int bnchigoleng  = 0;
		
		// 入力情報の都道府県名の文字列数を取得(nullの場合は0とする)
		if (stateNm != null) {
			stateNmleng = stateNm.length();
		}
		
		// 入力情報の市区町村名の文字列数を取得(nullの場合は0とする)
		if (cityNm != null) {
			cityNmleng = cityNm.length();
		}
		
		// 入力情報の大字通称名の文字列数を取得(nullの場合は0とする)
		if (oaztsuNm != null) {
			oaztsuNmleng = oaztsuNm.length();
		}
		
		// 入力情報の字町目の文字列数を取得(nullの場合は0とする)
		if (azchoNm != null) {
			azchoNmleng = azchoNm.length();
		}
		// 入力情報の番地号の文字列数を取得(nullの場合は0とする)
		if (bnchigo != null) {
			bnchigoleng = bnchigo.length();
		}
		
		//■各項目に対する最大文字列数を取得
		// 手動入力フラグが"1"の場合は全項目に入力あり
		if(ON.equals(admaninputFlg)) {
			
			//***<< 2012/09/03 住所チェック仕様変更 K.IWASA [upd] S>>***/
			// 手動フラグが設定されていても。住所コードall0の場合は番地号による。
			if(foreignAdcd.equals(adcd)){
				
				bnchigomax  = 61;
			} else {
				// 手動フラグが設定されている場合で住所コードall0以外の場合
				stateNmmax  = 4;
				cityNmmax   = 12;
				oaztsuNmmax = 18;
				azchoNmmax  = 12;
				bnchigomax  = 15;
				
			}
//			
//			stateNmmax  = 4;
//			cityNmmax   = 12;
//			oaztsuNmmax = 18;
//			azchoNmmax  = 12;
//			bnchigomax  = 15;
			
			//***<< 2012/09/03 住所チェック仕様変更 K.IWASA [upd] E >>***/
			
		} else {
			
			// すべてが0の場合は番地号に集約
			if(foreignAdcd.equals(adcd)){
			
				bnchigomax  = 61;
			
			// 下9桁が0の場合は都道府県に入力有
			} else if ("000000000".equals(adcd1)){
				
				stateNmmax  = 4;
				bnchigomax  = 57;
				
			// 下6桁が0の場合は都道府県、市区町村名に入力有
			} else if ("000000".equals(adcd2)){
				
				stateNmmax  = 4;
				cityNmmax   = 12;
				bnchigomax  = 45;
			
			// 下3桁が0の場合は都道府県、市区町村名、大字通称名が入力あり
			} else if ("000".equals(adcd3)){
				
				stateNmmax  = 4;
				cityNmmax   = 12;
				oaztsuNmmax = 18;
				bnchigomax  = 27;
				
			// 上記以外の場合は全項目に入力あり
			} else {
				
				stateNmmax  = 4;
				cityNmmax   = 12;
				oaztsuNmmax = 18;
				azchoNmmax  = 12;
				bnchigomax  = 15;
				
			}
		}
		
		// 返却結果を設定する情報を設定
		HashMap<String,Object> ad61Mojirslt = new HashMap<String,Object>();
		ad61Mojirslt.put(JPCStrConst.ad61MojiChk, true);
		ad61Mojirslt.put(JPCStrConst.ad61MojiChkdtail, bnchigomax);
		
		
		//■文字列チェックを実施
		// 都道府県名のチェック
		if(stateNmleng > stateNmmax) {
			ad61Mojirslt.put(JPCStrConst.ad61MojiChk, false);
			return ad61Mojirslt;
		}
		
		// 市区町村名のチェック
		if(cityNmleng > cityNmmax) {
			ad61Mojirslt.put(JPCStrConst.ad61MojiChk, false);
			return ad61Mojirslt;
		}

		// 大字通称名のチェック
		if(oaztsuNmleng > oaztsuNmmax) {
			ad61Mojirslt.put(JPCStrConst.ad61MojiChk, false);
			return ad61Mojirslt;
		}

		// 字丁目名のチェック
		if(azchoNmleng > azchoNmmax) {
			ad61Mojirslt.put(JPCStrConst.ad61MojiChk, false);
			return ad61Mojirslt;
		}

		// 番地号のチェック
		if(bnchigoleng > bnchigomax) {
			ad61Mojirslt.put(JPCStrConst.ad61MojiChk, false);
			return ad61Mojirslt;
		}
		
		
		
		return ad61Mojirslt;
	}
	
	/**
	 * 郵便番号整合性ﾁｪｯｸ<p>
	 * <BR>
	 * 入力情報の住所コードと郵便番号をキーに
	 * 住所マスタを検索し取得できた場合はＯＫ
	 * 存在しない場合ＮＧとする
	 * <BR>
	 * @param adcd               住所コード
	 * @param pcd                郵便番号
	 * @param admaninputFlg      手動入力フラグ
	 * @return true  :取得できた場合
	 * @return false :取得できなかった場合
	 * <BR>
	 */
	public static Boolean pcdConsistencyChk(Connection con, String adcd, 
									String pcd,
									String admaninputFlg,
									String opeDate)throws Exception {
		// 返却値の初期値を設定
		boolean rslt = true;
		
		// 手動入力フラグが"1"の場合はチェック対象外
		if (ON.equals(admaninputFlg)) {
			
			return rslt;
		}
		
		// ■住所コードと郵便番号で住所ﾏｽﾀをカウントする
		// sqlの定義を実施
		StringBuffer sql = new StringBuffer();
		sql.append(PCD_CONSISTENCY_SQL);
		
		if (con == null)
		{
			throw new Exception("Connectionがnullです。");
		}
		
		// 初期値設定
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		// (b)PreparedStatementの設定
		stmt = con.prepareStatement(sql.toString());
		// 検索条件を設定
		stmt.setString(1, adcd);
		stmt.setString(2, pcd);
		stmt.setString(3, opeDate);
		stmt.setString(4, opeDate);
		
		// 初期値設定
		Long cnt = 0L;
		
		try
		{
			// SQLを発行
			rs = adMstSearch(stmt, sql);

			if (rs != null && rs.next()){
				// 値の取得
				cnt = rs.getLong("CNT");
			}
			else
			{
				return false;
			}
			
			if (cnt == 0L) {
				rslt = false;
			}

		}
		// Exceptionの場合
		catch (Exception e)
		{
			throw new Exception(adcd + ":住所マスタの検索に失敗しました。", e);
		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [ins] [S]
		finally
		{

			if (stmt != null)
			{
				stmt.close();
			}
			if (rs != null)
			{
				rs.close();
				
			}
		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [ins] [E]
		
		return rslt;
	}
	
	/**
	 * 住所最下層ﾁｪｯｸ<p>
	 * マスタ検索不要な場合を判定し結果を返却
	 * 住所コードが***********の場合はtrueを返却
	 * 住所コードが00000000000の場合はfalse返却
	 * 
	 * 入力情報の住所コードを基にマスタの検索条件を以下の条件で取得する
	 *               検索キー
	 * 住所コード    下限          上限
	 * ********000   ********000   ********999
	 * *****000000   *****000000   *****999999
	 * **000000000   **000000000   **999999999
	 * 
	 * 住所コードが***********の場合はtrueを返却
	 * 住所コードが00000000000の場合はfalse返却
	 * 
	 * 
	 * 住所マスタを検索し2件以上取得できた場合はNG
	 * 存在しない場合ＮＧとする
	 * <BR>
	 * @param adcd    住所コード
	 * @param pcd     郵便番号
	 * @return true  :最下層住所の場合
	 * @return false :最下層住所でない場合
	 * <BR>
	 */
	public static Boolean adMaxKaiChk(Connection con,
									String adcd, 
									String pcd,
									String opeDate)throws Exception {
		
		//住所コードの分割を行う
		String adcd1 = adcd.substring(0, 2);
		String adcd2 = adcd.substring(2, 5);
		String adcd3 = adcd.substring(5, 8);
		String adcd4 = adcd.substring(8, 11);
		
		// 住所コードがall0の場合は最下層でない
		if (foreignAdcd.equals(adcd)) {
			
			return false;
		}
		
		// 初期値設定
		String serchMin = null;
		String serchMax = null;
		boolean rslt = true;
		
		// 検索キーを設定する
		// 住所コード下9桁が0の場合は**000000000〜**999999999が検索範囲
		if ("000000000".equals(adcd2 + adcd3 + adcd4)) {
			
			serchMin = adcd1 + "000000000";
			serchMax = adcd1 + "999999999";
			
		// 住所コード下6桁が0の場合は*****000000〜*****999999が検索範囲
		} else if ("000000".equals(adcd3 + adcd4)){
			
			serchMin = adcd1 + adcd2 + "000000";
			serchMax = adcd1 + adcd2 + "999999";
			
		// 住所コード下3桁が0の場合は********000〜********999が検索範囲
		} else if ("000".equals(adcd4)){
			
			serchMin = adcd1 + adcd2 + adcd3 + "000";
			serchMax = adcd1 + adcd2 + adcd3 + "999";
			
		// 住所コード***********の場合はＯＫを返却する
		} else {
			
			return true;
		}
				
		// 入力情報の郵便番号と上記で取得した住所マスタの範囲で件数を取得する
		// SQLの定義を実施
		StringBuffer sql = new StringBuffer();
		sql.append(AD_MAXKAI_SQL);
		
		if (con == null)
		{
			throw new Exception("Connectionがnullです。");
		}
		
		// 初期値設定
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		// (b)PreparedStatementの設定
		stmt = con.prepareStatement(sql.toString());
		// 検索条件を設定
		stmt.setString(1, pcd);
		stmt.setString(2, serchMin);
		stmt.setString(3, serchMax);
		stmt.setString(4, opeDate);
		stmt.setString(5, opeDate);
		
		// 初期値を設定する
		Long cnt = 0L;
		
		try
		{
			// SQLを発行
			rs = adMstSearch(stmt, sql);

			if (rs != null && rs.next()){
				// 値の取得
				cnt = rs.getLong("CNT");
			}
			else
			{
				rslt = false;
			}
			
			if (cnt != 1L) {
				rslt = false;
			}
		}
		// Exceptionの場合
		catch (Exception e)
		{
			throw new Exception(adcd + ":住所マスタの検索に失敗しました。", e);
		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [ins] [S]
		finally
		{

			if (stmt != null)
			{
				stmt.close();
			}
			if (rs != null)
			{
				rs.close();
				
			}
		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [ins] [E]
		return rslt;
	}
	
	/**
	 *  住所ﾏｽﾀ存在ﾁｪｯｸ<p>
	 * <BR>
	 * 入力情報の住所コードを基に
	 * 住所マスタを検索し取得できた場合はＯＫ
	 * 存在しない場合ＮＧとする
	 * <BR>
	 * @param adcd               住所コード
	 * @param admaninputFlg      手動入力フラグ
	 * @return true  :取得できた場合
	 * @return false :取得できなかった場合
	 * <BR>
	 */
	public static Boolean adMstSonzaiChk(Connection con,
									String adcd, 
									String pcd,
									String opeDate) throws Exception {
		
		
		
		boolean rslt = true;
		
		// 住所コードで住所ﾏｽﾀを検索する
		// sqlの定義を実施
		StringBuffer sql = new StringBuffer();
		sql.append(AD_MST_SONZAI_SQL);
		
		if (con == null)
		{
			throw new Exception("Connectionがnullです。");
		}
		
		// 初期値設定
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		// (b)PreparedStatementの設定
		stmt = con.prepareStatement(sql.toString());
		// 検索条件を設定
		stmt.setString(1, adcd);
		stmt.setString(2, opeDate);
		stmt.setString(3, opeDate);
		
		// 初期値設定
		Long cnt = 0L;
		
		try
		{
			// SQLを発行
			rs = adMstSearch(stmt, sql);		

			if (rs != null && rs.next()){
				// 値の取得
				cnt = rs.getLong("CNT");
			}
			else
			{
				return false;
			}
			
			if (cnt == 0L) {
				rslt = false;
			}
		}
		catch (Exception e)
		{
			throw new Exception(adcd + ":住所マスタの検索に失敗しました。", e);
		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [ins] [S]
		finally
		{

			if (stmt != null)
			{
				stmt.close();
			}
			if (rs != null)
			{
				rs.close();
				
			}
		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [ins] [E]
		
		return rslt;
	}
	
	/**
	 *  住所ﾏｽﾀ検索処理<p>
	 * <BR>
	 * 入力情報のSQLを基に
	 * 住所マスタを検索し取得結果を返却する
	 * exception発生時はexceptionをスローする
	 * <BR>
	 * @param con      DBコネクション
	 * @param sql      sql
	 * @return true  :取得できた場合
	 * <BR>
	 */
	private static ResultSet adMstSearch(PreparedStatement stmt,
										StringBuffer sql) throws Exception {
		
		// 初期値設定
		ResultSet rs = null;
		
		try
		{
			// SQLを発行
			//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [upd] [S]
//			rs = stmt.executeQuery(sql.toString());
			rs = stmt.executeQuery();
			//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [upd] [E]
			
		}
		catch (SQLException e)
		{
			throw new Exception(":住所マスタの検索に失敗しました。", e);
		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [del] [S]
//		finally
//		{
//
//			if (stmt != null)
//			{
//				stmt.close();
//			}
//			if (rs != null)
//			{
//				rs.close();
//				
//			}
//		}
		//***<< 2012/09/06 契約チーム指摘対応 K.IWASA [del] [E]
		return rs;
	}
}