/*********************************************************************
*	All Rights reserved,Copyright c Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：プロジェクト共通
*	モジュール名	：JKKBatDchskmChk
*	ソースファイル名：JKKBatDchskmChk.java
*	作成者			：富士通
*	日付			：2012年06月29日
*＜機能概要＞
*	データ抽出項目の設定可否チェック
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/06/29	富士通		新規作成
*
**********************************************************************/
package eo.business.common;

import static eo.common.util.JKKWrisvcDchskmCommonUtil.WRIB_DCHS_SKBT_FLAG_DCHS;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import eo.business.util.table.JBSbatKK_M_DCHSKM;
import eo.business.util.table.JBSbatKK_M_DCHSKM_SETE_JKN;
import eo.business.util.table.JBSbatKK_T_DCHSKMST_TG_KEI;
import eo.common.util.JKKWrisvcDchskmCommonUtil;
import eo.common.util.JPCDateUtil;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;


/**
 * データ抽出項目の設定可否チェック等を行う共通クラスです。<p>
 * <br>
 * @author 富士通
 */
public class JKKBatDchskmChk
{
	/** テーブルアクセスクラス(データ抽出項目対象サービス)*/
	private JBSbatSQLAccess db_KK_M_DCHSKM_TG_SVC = null;

	/** テーブルアクセスクラス(アンケート)*/
	private JBSbatSQLAccess db_KK_M_ENQUETE = null;

	/** テーブルアクセスクラス(データ抽出項目設定)*/
	private JBSbatSQLAccess db_KK_T_DCHSKMST = null;

	/** テーブルアクセスクラス(データ抽出項目設定対象契約)*/
	private JBSbatSQLAccess db_KK_T_DCHSKMST_TG_KEI = null;

	/** テーブルアクセスクラス(申込明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_DCHSKM_TG_SVC_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_ENQUETE_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_006)*/
	private static final String KK_T_DCHSKMST_KK_SELECT_006 = "KK_SELECT_006";

	/** SQL定義キー(KK_SELECT_007)*/
	private static final String KK_T_DCHSKMST_KK_SELECT_007 = "KK_SELECT_007";

	/** SQL定義キー(KK_SELECT_009)*/
	private static final String KK_T_DCHSKMST_KK_SELECT_009 = "KK_SELECT_009";

	/** SQL定義キー(KK_SELECT_005)*/
	private static final String KK_T_DCHSKMST_TG_KEI_KK_SELECT_005 = "KK_SELECT_005";

	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_T_MSKM_DTL_KK_SELECT_002 = "KK_SELECT_002";

	/** SQL定義キー(KK_SELECT_018)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_018 = "KK_SELECT_018";

	/** SQL定義キー(KK_SELECT_116)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_116 = "KK_SELECT_116";

	/** SQL定義キー(KK_SELECT_117)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_117 = "KK_SELECT_117";

	/** SQL定義キー(KK_SELECT_118)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_118 = "KK_SELECT_118";

	/** SQL定義キー(KK_SELECT_119)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_119 = "KK_SELECT_119";

	/** テーブル(データ抽出項目対象サービス)*/
	private static final String D_TBL_NAME_KK_M_DCHSKM_TG_SVC = "KK_M_DCHSKM_TG_SVC";

	/** テーブル(アンケート)*/
	private static final String D_TBL_NAME_KK_M_ENQUETE = "KK_M_ENQUETE";

	/** テーブル(データ抽出項目設定)*/
	private static final String D_TBL_NAME_KK_T_DCHSKMST = "KK_T_DCHSKMST";

	/** テーブル(データ抽出項目設定対象契約)*/
	private static final String D_TBL_NAME_KK_T_DCHSKMST_TG_KEI = "KK_T_DCHSKMST_TG_KEI";

	/** テーブル(申込明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** データ抽出項目設定条件 アンケートリスト */
	public static final String SETE_JKN_SBT_ENQUETE_LIST = "sete_jkn_sbt_enquete_list";
	
	/** データ抽出項目設定条件 申込形態リスト */
	public static final String SETE_JKN_SBT_MSKM_FORM_LIST = "sete_jkn_sbt_mskm_form_list";
	
	/** データ抽出項目設定条件 代理店リスト */
	public static final String SETE_JKN_SBT_AGENT_LIST = "sete_jkn_sbt_agent_list";

	/**
	 * <dd>メソッド名	：doAddTmgChk
	 * <dd>メソッド説明	：データ抽出項目適用の登録タイミングのチェックを行う。
	 * 設定可能開始終了年月日 VS 申込年月日
	 * @param  commonItem 業務共通電文
	 * @param  dataMap 業務データ
	 * @return true：チェックOK false：チェックNG
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	@SuppressWarnings("unchecked")
	public boolean doAddTmgChk(JBSbatCommonItem commonItem, HashMap<String, Object> dataMap) throws Exception
	{
		// データ抽出項目
		HashMap<String, Object> dchskmMap = (HashMap<String, Object>)dataMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
		
		String staYmd = ((String)dchskmMap.get(JBSbatKK_M_DCHSKM.SET_PSB_STA_YMDHM.toLowerCase())).substring(0, 8);
		String endYmd = ((String)dchskmMap.get(JBSbatKK_M_DCHSKM.SET_PSB_END_YMDHM.toLowerCase())).substring(0, 8);
		
		// データ抽出項目の設定可能開始年月日 ≦ 申込年月日 ≦ データ抽出項目の設定可能終了年月日 ならOK
		String opeDate = commonItem.getOpeDate();
		if (staYmd.compareTo(opeDate) <= 0 && opeDate.compareTo(endYmd) <= 0)
		{
			return true;
		}
		return false;
	}

	/**
	 * <dd>メソッド名	：doUpplAplyCntChk
	 * <dd>メソッド説明	：データ抽出項目の上限適用回数のチェックを行う。
	 * @param  commonItem 業務共通電文
	 * @param  inSysid SYSID
	 * @param  dataMap 業務データ
	 * @return true：チェックOK false：チェックNG
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	@SuppressWarnings("unchecked")
	public boolean doUpplAplyCntChk(JBSbatCommonItem commonItem, String inSysid, HashMap<String, Object> dataMap) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(データ抽出項目設定)
			db_KK_T_DCHSKMST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_DCHSKMST);
			
			// データ抽出項目の取得データを取り出す
			HashMap<String, Object> dchskm = (HashMap<String, Object>)dataMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
			
			String[] setDchskmParam = {
					inSysid,														// SYSID
					(String)dchskm.get(JBSbatKK_M_DCHSKM.DCHSKM_CD.toLowerCase()),	// データ抽出項目コード
					commonItem.getOpeDate()};										// データ抽出項目設定終了年月日
			
			// データ抽出項目の取得
			executeKK_T_DCHSKMST_KK_SELECT_006(setDchskmParam);
			JBSbatCommonDBInterface dchskmMap = db_KK_T_DCHSKMST.selectNext();
			
			int retCnt = 0;
			if (dchskmMap != null)
			{
				// 適用中件数
				retCnt = Integer.parseInt(dchskmMap.getString("UPPL_APLY_CNT"));
			}
			
			return JKKWrisvcDchskmCommonUtil.chkUpplAplyCnt(dchskm, retCnt);
		}
		finally
		{
			if (db_KK_T_DCHSKMST != null)
			{
				db_KK_T_DCHSKMST.close();
			}
		}
	}

	/**
	 * <dd>メソッド名	：doUpplKeiCntChk
	 * <dd>メソッド説明	：データ抽出項目の上限契約数のチェックを行う。
	 * @param  commonItem 業務共通電文
	 * @param  dataMap 業務データ
	 * @return true：チェックOK false：チェックNG
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	@SuppressWarnings("unchecked")
	public boolean doUpplKeiCntChk(JBSbatCommonItem commonItem, HashMap<String, Object> dataMap) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(データ抽出項目設定)
			db_KK_T_DCHSKMST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_DCHSKMST);
			
			// データ抽出項目の取得データを取り出す
			HashMap<String, Object> dchskm = (HashMap<String, Object>)dataMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
			
			// データ抽出項目コード
			String[] setDchskmParam = {(String)dchskm.get(JBSbatKK_M_DCHSKM.DCHSKM_CD.toLowerCase())};
			
			// データ抽出項目の取得
			executeKK_T_DCHSKMST_KK_SELECT_007(setDchskmParam);
			JBSbatCommonDBInterface dchskmMap = db_KK_T_DCHSKMST.selectNext();
			
			int retCnt = 0;
			if (dchskmMap != null)
			{
				// 契約件数
				retCnt = Integer.parseInt(dchskmMap.getString("UPPL_KEI_CNT"));
			}
			
			return JKKWrisvcDchskmCommonUtil.chkUpplKeiCnt(dchskm, retCnt);
		}
		finally
		{
			if (db_KK_T_DCHSKMST != null)
			{
				db_KK_T_DCHSKMST.close();
			}
		}
	}

	/**
	 * <dd>メソッド名	：doEnqueteNoChk
	 * <dd>メソッド説明	：アンケート番号のチェックを行う。
	 * @param  commonItem 業務共通電文
	 * @param  inSysid SYSID
	 * @param  dataMap 業務データ
	 * @return true：チェックOK false：チェックNG
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	@SuppressWarnings("unchecked")
	public boolean doEnqueteNoChk(JBSbatCommonItem commonItem, String inSysid, HashMap<String, Object> dataMap) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(アンケート)
			db_KK_M_ENQUETE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_ENQUETE);
			
			// データ抽出項目設定条件からアンケートコードの設定リストを取得する
			HashMap<String, Object> dchskmMap = (HashMap<String, Object>)dataMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
			ArrayList<JBSbatCommonDBInterface> list = (ArrayList<JBSbatCommonDBInterface>)dchskmMap.get(SETE_JKN_SBT_ENQUETE_LIST);
			// 設定されていない場合はチェックOK
			if (list.isEmpty())
			{
				return true;
			}
			
			for (JBSbatCommonDBInterface in : list)
			{
				// アンケートコード
				String enqueteCd = in.getString(JBSbatKK_M_DCHSKM_SETE_JKN.DCHSKM_SETE_JKN_VALUE_1);
				String[] enqueteParam = {enqueteCd,									// アンケートコード
										commonItem.getOpeDate(),					// バッチ運用日
										inSysid,									// SYSID
										enqueteCd};									// アンケートコード
				
				// アンケート回答の取得
				executeKK_M_ENQUETE_KK_SELECT_001(enqueteParam);
				JBSbatCommonDBInterface enqueteMap = db_KK_M_ENQUETE.selectNext();
				
				if (enqueteMap != null)
				{
					return true;
				}
			}
			return false;
		}
		finally
		{
			if (db_KK_M_ENQUETE != null)
			{
				db_KK_M_ENQUETE.close();
			}
		}
	}

	/**
	 * <dd>メソッド名	：doMskmFormCdChk
	 * <dd>メソッド説明	：申込形態コードのチェックを行う
	 * @param  commonItem 業務共通電文
	 * @param  inSysid SYSID
	 * @param  dataMap 業務データ
	 * @return true：チェックOK false：チェックNG
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	@SuppressWarnings("unchecked")
	public boolean doMskmFormCdChk(JBSbatCommonItem commonItem, String inSysid, HashMap<String, Object> dataMap) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(申込明細)
			db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
			
			// データ抽出項目設定条件から申込形態コードの設定リストを取得する
			HashMap<String, Object> dchskmMap = (HashMap<String, Object>)dataMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
			ArrayList<JBSbatCommonDBInterface> list = (ArrayList<JBSbatCommonDBInterface>)dchskmMap.get(SETE_JKN_SBT_MSKM_FORM_LIST);
			
			for (JBSbatCommonDBInterface in : list)
			{
				String[] mskmGrpParam = {
						inSysid,															// SYSID
						in.getString(JBSbatKK_M_DCHSKM_SETE_JKN.DCHSKM_SETE_JKN_VALUE_1)};	// 申込形態コード
				
				// 申込形態コードの取得
				executeKK_T_MSKM_DTL_KK_SELECT_002(mskmGrpParam);
				// 取得データの取出
				JBSbatCommonDBInterface mskmMap = db_KK_T_MSKM_DTL.selectNext();
				if (mskmMap != null)
				{
					return true;
				}
			}
			return false;
		}
		finally
		{
			if (db_KK_T_MSKM_DTL != null)
			{
				db_KK_T_MSKM_DTL.close();
			}
		}
	}

	/**
	 * <dd>メソッド名	：doAgntCdChk
	 * <dd>メソッド説明	：代理店コードのチェックを行う
	 * @param  commonItem 業務共通電文
	 * @param  inSysid SYSID
	 * @param  dataMap 業務データ
	 * @return true：チェックOK false：チェックNG
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	@SuppressWarnings("unchecked")
	public boolean doAgntCdChk(JBSbatCommonItem commonItem, String inSysid, HashMap<String, Object> dataMap) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(サービス契約)
			db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
			
			// データ抽出項目設定条件から代理店コードの設定リストを取得する
			HashMap<String, Object> dchskmMap = (HashMap<String, Object>)dataMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
			ArrayList<JBSbatCommonDBInterface> list = (ArrayList<JBSbatCommonDBInterface>)dchskmMap.get(SETE_JKN_SBT_AGENT_LIST);
			// 設定されていない場合はチェックOK
			if (list.isEmpty())
			{
				return true;
			}
			
			for (JBSbatCommonDBInterface in : list)
			{
				String[] agntCdParam = {
						in.getString(JBSbatKK_M_DCHSKM_SETE_JKN.DCHSKM_SETE_JKN_VALUE_1) + "%",	// 代理店コード
						inSysid,											// SYSID
						commonItem.getOpeDate()};							// バッチ運用日
				
				// 代理店コードの取得
				executeKK_T_SVC_KEI_KK_SELECT_018(agntCdParam);
				// 取得データの取出
				JBSbatCommonDBInterface agntMap = db_KK_T_SVC_KEI.selectNext();
				if (agntMap != null)
				{
					return true;
				}
			}
			return false;
		}
		finally
		{
			if (db_KK_T_SVC_KEI != null)
			{
				db_KK_T_SVC_KEI.close();
			}
		}
	}


	/**
	 * <dd>メソッド名	：getTgSvckei
	 * <dd>メソッド説明	：対象サービス契約の取得を行う
	 * @param commonItem 業務共通電文
	 * @param inSysid SYSID
	 * @param inSvcKeiNo サービス契約番号
	 * @param dchskmMap データ抽出項目マップ
	 * @param dchskmstList 締結中データ抽出項目リスト
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<HashMap<String, Object>> getTgSvckei(
			JBSbatCommonItem commonItem,
			String inSysid,
			String inSvcKeiNo,
			HashMap<String, Object> dchskmMap,
			ArrayList<HashMap<String, Object>> dchskmstList) throws Exception
	{
		ArrayList<HashMap<String, Object>> tgKeiKohoSvcKeiList = new ArrayList<HashMap<String, Object>>();
		
		//・データ抽出登録条件コードでチェック対象となる対象サービスを取得する
		ArrayList<HashMap<String, Object>> worklist = getChkTgtServiceList(commonItem, inSysid, inSvcKeiNo, dchskmMap);
		
		for (HashMap<String, Object> mapSvcKei : worklist)
		{
			// サービス契約.サービス契約番号
			String svcKeiNo = (String)mapSvcKei.get("svc_kei_no");
			// 対象契約登録済判定
			HashMap<String, Object> dchskm = (HashMap<String, Object>)dchskmMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
			if (!JKKWrisvcDchskmCommonUtil.jdgTgKeiAddZm(dchskm, dchskmstList, svcKeiNo, WRIB_DCHS_SKBT_FLAG_DCHS))
			{
				// データ抽出項目設定対象契約として登録されていなければ、
				// 対象契約候補サービス契約リストにサービス契約を追加
				tgKeiKohoSvcKeiList.add(mapSvcKei);
			}
		}
		return tgKeiKohoSvcKeiList;
	}
	
	/**
	 * データ抽出項目コードに紐付く対象サービスを取得する
	 * 
	 * @param commonItem
	 * @param dataMap
	 * @return retList
	 * @throws Exception
	 */
	public ArrayList<HashMap<String, Object>> getTgServiceList(JBSbatCommonItem commonItem, HashMap<String, Object> dataMap) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(データ抽出項目対象サービス)
			db_KK_M_DCHSKM_TG_SVC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_DCHSKM_TG_SVC);
			
			ArrayList<HashMap<String, Object>> retList = new ArrayList<HashMap<String, Object>>();
			
			ArrayList<String> paramList = new ArrayList<String>();
			paramList.add((String)dataMap.get(JBSbatKK_M_DCHSKM.DCHSKM_CD.toLowerCase()));
			paramList.add(commonItem.getOpeDate());
			paramList.add(commonItem.getOpeDate());
			paramList.add(commonItem.getOpeDate());
			executeKK_M_DCHSKM_TG_SVC_KK_SELECT_001(paramList.toArray());

			JBSbatCommonDBInterface dchskmTgSvcMap = null;
			while ((dchskmTgSvcMap = db_KK_M_DCHSKM_TG_SVC.selectNext()) != null)
			{
				retList.add(chgMapDataAttrib(dchskmTgSvcMap));
			}
			return retList;
		}
		finally
		{
			if (db_KK_M_DCHSKM_TG_SVC != null)
			{
				db_KK_M_DCHSKM_TG_SVC.close();
			}
		}
	}
	
	/**
	 * マップデータ属性を変更
	 * ・キーを大文字→小文字
	 * ・BigDecimalなど→String
	 * 
	 * @param in
	 * @return retMap
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> chgMapDataAttrib(JBSbatCommonDBInterface in) throws Exception
	{
		HashMap<String, Object> retMap = new HashMap<String, Object>();
		Iterator<String> ite = in.getMap().keySet().iterator();
		
		while (ite.hasNext())
		{
			String key = (String)ite.next();
			
			// キーを大文字→小文字にする、データをString型にする
			retMap.put(key.toLowerCase(), in.getString(key));
		}
		return retMap;
	}
	
	/**
	 * データ抽出登録条件コードでチェック対象となる対象サービスを取得する
	 * 
	 * @param commonItem
	 * @param sysid
	 * @param svcKeiNo
	 * @param dataMap
	 * @return retList
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public ArrayList<HashMap<String, Object>> getChkTgtServiceList(
			JBSbatCommonItem commonItem,
			String sysid,
			String svcKeiNo,
			HashMap<String, Object> dataMap) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(サービス契約)
			db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
			
			ArrayList<HashMap<String, Object>> retList = new ArrayList<HashMap<String, Object>>();
			
			// データ抽出項目の取得データを取り出す
			HashMap<String, Object> dchskm = (HashMap<String, Object>)dataMap.get(JBSbatKK_M_DCHSKM.TABLE_NAME);
			String dchsAddJokenCd = (String)dchskm.get(JBSbatKK_M_DCHSKM.DCHS_ADD_JOKEN_CD.toLowerCase());
			
			ArrayList<String> paramList = new ArrayList<String>();
			
			// 01:条件無し 条件無し
			if (JKKBatConst.CD_SBT_WRIB_ADD_JOKEN_CD_01.equals(dchsAddJokenCd))
			{
				paramList.add(commonItem.getOpeDate());
				paramList.add(sysid);
				executeKK_T_SVC_KEI_KK_SELECT_116(paramList.toArray());
			}
			
			// 02:同一お客様のみ eoIDが同一であること
			else if (JKKBatConst.CD_SBT_WRIB_ADD_JOKEN_CD_02.equals(dchsAddJokenCd))
			{
				paramList.add(commonItem.getOpeDate());
				paramList.add(sysid);
				executeKK_T_SVC_KEI_KK_SELECT_116(paramList.toArray());
			}
			
			// 03:同一請求先のみ 請求先番号が同一であること
			else if (JKKBatConst.CD_SBT_WRIB_ADD_JOKEN_CD_03.equals(dchsAddJokenCd))
			{
				paramList.add(svcKeiNo);
				paramList.add(commonItem.getOpeDate());
				paramList.add(sysid);
				executeKK_T_SVC_KEI_KK_SELECT_117(paramList.toArray());
			}
			
			// 04:同一回線のみ 回線契約が同一であること
			else if (JKKBatConst.CD_SBT_WRIB_ADD_JOKEN_CD_04.equals(dchsAddJokenCd))
			{
				paramList.add(svcKeiNo);
				paramList.add(commonItem.getOpeDate());
				executeKK_T_SVC_KEI_KK_SELECT_118(paramList.toArray());
			}
			
			// 05:同一お客様・請求先 eoID、請求先番号が同一であること
			else if (JKKBatConst.CD_SBT_WRIB_ADD_JOKEN_CD_05.equals(dchsAddJokenCd))
			{
				paramList.add(svcKeiNo);
				paramList.add(commonItem.getOpeDate());
				paramList.add(sysid);
				executeKK_T_SVC_KEI_KK_SELECT_117(paramList.toArray());
			}
			
			// 06:同一請求先回線 請求先番号、回線契約が同一であること
			else if (JKKBatConst.CD_SBT_WRIB_ADD_JOKEN_CD_06.equals(dchsAddJokenCd))
			{
				paramList.add(svcKeiNo);
				paramList.add(svcKeiNo);
				paramList.add(commonItem.getOpeDate());
				paramList.add(sysid);
				executeKK_T_SVC_KEI_KK_SELECT_119(paramList.toArray());
			}
			
			JBSbatCommonDBInterface svcKeiMap = null;
			while ((svcKeiMap = db_KK_T_SVC_KEI.selectNext()) != null)
			{
				// 対象契約識別コード
				svcKeiMap.setValue("tg_kei_skbt_cd", "01");
				retList.add(chgMapDataAttrib(svcKeiMap));
			}
			return retList;
		}
		finally
		{
			if (db_KK_T_SVC_KEI != null)
			{
				db_KK_T_SVC_KEI.close();
			}
		}
	}
	
	/**
	 * 対象のお客様(SYSID)が締結しているデータ抽出項目設定を検索
	 * 
	 * @param commonItem
	 * @param sysid
	 * @return dchskmCdList
	 * @throws Exception
	 */
	public ArrayList<HashMap<String, Object>> getDchskmstList(JBSbatCommonItem commonItem, String sysid) throws Exception
	{
		try
		{
			// テーブルアクセスクラス(データ抽出項目設定)
			db_KK_T_DCHSKMST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_DCHSKMST);
			// テーブルアクセスクラス(データ抽出項目設定対象契約)
			db_KK_T_DCHSKMST_TG_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_DCHSKMST_TG_KEI);
			
			ArrayList<HashMap<String, Object>> dchskmCdList = new ArrayList<HashMap<String, Object>>();
			
			String[] dchskParam = {sysid, commonItem.getOpeDate()};
			
			// データ抽出項目設定の取得
			executeKK_T_DCHSKMST_KK_SELECT_009(dchskParam);
			
			JBSbatCommonDBInterface dchskmMap = null;
			while ((dchskmMap = db_KK_T_DCHSKMST.selectNext()) != null)
			{
				dchskmMap.setValue(JKKWrisvcDchskmCommonUtil.WRIB_DCHS_SKBT_FLAG, JKKWrisvcDchskmCommonUtil.WRIB_DCHS_SKBT_FLAG_DCHS);
				dchskmCdList.add(chgMapDataAttrib(dchskmMap));
			}
			
			for (HashMap<String, Object> mapDchskmst : dchskmCdList)
			{
				/*
				 * データ抽出項目設定対象契約一覧照会
				 */
				String opeDate = commonItem.getOpeDate();
				String[] dchskmstParam = {	opeDate, opeDate, opeDate, opeDate, opeDate, opeDate, opeDate, opeDate,	// バッチ運用日
									opeDate, opeDate, opeDate, opeDate, opeDate, opeDate, opeDate, opeDate,	// バッチ運用日
									(String)mapDchskmst.get("dchskmst_no")};	// データ抽出項目設定番号
				executeKK_T_DCHSKMST_TG_KEI_KK_SELECT_005(dchskmstParam);
				JBSbatCommonDBInterface map2 = null;
				ArrayList<HashMap<String, Object>> svcKeiList = new ArrayList<HashMap<String, Object>>(); 
				while ((map2 = db_KK_T_DCHSKMST_TG_KEI.selectNext()) != null)
				{
					HashMap<String, Object> ccMapDchskmstTgKei = new HashMap<String, Object>();
					ccMapDchskmstTgKei.put("dchskmst_tg_kei_no", map2.getString(JBSbatKK_T_DCHSKMST_TG_KEI.DCHSKMST_TG_KEI_NO));
					ccMapDchskmstTgKei.put("svc_kei_no", map2.getString(JBSbatKK_T_DCHSKMST_TG_KEI.SVC_KEI_NO));
					svcKeiList.add(ccMapDchskmstTgKei);
				}
				mapDchskmst.put("dchskmst_tg_kei_list", svcKeiList);
			}
			
			return dchskmCdList;
		}
		finally
		{
			if (db_KK_T_DCHSKMST != null)
			{
				db_KK_T_DCHSKMST.close();
			}
			if (db_KK_T_DCHSKMST_TG_KEI != null)
			{
				db_KK_T_DCHSKMST_TG_KEI.close();
			}
		}
	}
	
	/**
	 * <dd>メソッド名	：開始調整日取得
	 * <dd>メソッド説明	：開始調整コードと開始調整日より判断を行い調整した日付を返還する
	 * @param  commonItem 業務共通電文
	 * @param  dchskmMap データ抽出項目
	 * @return String    調整後の日付
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public String getStaAdjYmd(JBSbatCommonItem commonItem, HashMap<String, Object> dchskmMap) throws Exception 
	{
		String strYmd = commonItem.getOpeDate();
		
		// 設定可能開始年月日
		String staYmd = JKKBatCommon.getLCutString((String)dchskmMap.get(JBSbatKK_M_DCHSKM.SET_PSB_STA_YMDHM.toLowerCase()), 8);
		// 開始調整コード
		String staAdjCd = (String)dchskmMap.get(JBSbatKK_M_DCHSKM.STA_ADJ_CD.toLowerCase());
		// 開始調整期間
		String strSstaAdj = (String)dchskmMap.get(JBSbatKK_M_DCHSKM.STA_ADJ_PRD.toLowerCase());
		Integer staAdj = 1;
		if(strSstaAdj != null)
		{
			staAdj = Integer.parseInt(strSstaAdj);
		}
		
		// 開始調整コード 1：調整無しの場合
		if(JKKBatConst.STA_ADJ_CD_NONE.equals(staAdjCd))
		{
			strYmd = staYmd;
		}
		// 開始調整コード 2：月数の場合
		else if(JKKBatConst.STA_ADJ_CD_MONTH.equals(staAdjCd))
		{
			strYmd = JPCDateUtil.addMonth(staYmd, staAdj);
		}
		// 開始調整コード 3：日数の場合
		else if(JKKBatConst.STA_ADJ_CD_DAY.equals(staAdjCd))
		{
			strYmd = JPCDateUtil.addDay(staYmd, staAdj);
		}
		return strYmd;
	}

	/**
	 * SQLKEY(KK_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	データ抽出項目コード
	 *		 	データ抽出項目設定終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_DCHSKMST_KK_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_DCHSKMST.selectBySqlDefine(paramList, KK_T_DCHSKMST_KK_SELECT_006);
	}
	
	/**
	 * SQLKEY(KK_SELECT_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	データ抽出項目コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_DCHSKMST_KK_SELECT_007(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_DCHSKMST.selectBySqlDefine(paramList, KK_T_DCHSKMST_KK_SELECT_007);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	アンケート番号
	 *		 	運用年月日
	 *		 	SYSID
	 *		 	アンケート番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_ENQUETE_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_M_ENQUETE.selectBySqlDefine(paramList, KK_M_ENQUETE_KK_SELECT_001);
	}
	
	/**
	 * SQLKEY(KK_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	申込形態コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_MSKM_DTL_KK_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KK_SELECT_002);
	}
	
	/**
	 * SQLKEY(KK_SELECT_018)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	代理店コード
	 *		 	SYSID
	 *		 	バッチ運用日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_018(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_018);
	}

	/**
	 * SQLKEY(KK_SELECT_116)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	予約適用日
	 *		 	SYSID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_116(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_116);
	}

	/**
	 * SQLKEY(KK_SELECT_117)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用日
	 *		 	SYSID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_117(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_117);
	}

	/**
	 * SQLKEY(KK_SELECT_118)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_118(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_118);
	}

	/**
	 * SQLKEY(KK_SELECT_119)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	サービス契約番号
	 *		 	予約適用日
	 *		 	SYSID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_119(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_119);
	}

	/**
	 * SQLKEY(KK_SELECT_009)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	予約適用日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_DCHSKMST_KK_SELECT_009(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_DCHSKMST.selectBySqlDefine(paramList, KK_T_DCHSKMST_KK_SELECT_009);
	}

	/**
	 * SQLKEY(KK_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	予約適用年月日予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	データ抽出項目設定対象契約適用開始年月日
	 *		 	データ抽出項目設定対象契約適用終了年月日
	 *		 	データ抽出項目設定番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_DCHSKMST_TG_KEI_KK_SELECT_005(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());

		// DBアクセスを実行します
		db_KK_T_DCHSKMST_TG_KEI.selectBySqlDefine(paramList, KK_T_DCHSKMST_TG_KEI_KK_SELECT_005);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	データ抽出項目コード
	 *		 	データ抽出項目対象サービス適用開始年月日
	 *		 	データ抽出項目対象サービス適用終了年月日
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_DCHSKM_TG_SVC_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_M_DCHSKM_TG_SVC.selectBySqlDefine(paramList, KK_M_DCHSKM_TG_SVC_KK_SELECT_001);
	}
}
