/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK0081B041TPDA
*	ソースファイル名：JSYejbEKK0081B041TPDA.java
*	作成者			：EK948321
*	日付			：2018年03月08日
*＜機能概要＞
*	契約者情報照会(卸先事業者)テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ37.0.0	2018/03/13	FJ) 北村	【ANK-3366-00-00】eo光設備卸対応
*	ｖ37.1.0	2018/04/19	FJ) 北村	【IT1-2018-0000045】卸先事業者が適用期間外の場合に「契約存在チェックエラー」になる
*	ｖ38.0.0	2018/08/16	FJ) 和田(さ)【IT1-2018-0000109】レスポンス値が未設定の場合に「""」と設定されている
*	ｖ39.0.0	2018/10/17	FJ) 大崎	【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*	ｖ39.0.1	2018/11/21	FJ) 舘山	【ST-2018-0000055】ＳＴＢが複数台返却される
*	ｖ39.0.2	2018/12/05	FJ) 植木	【ANK-3478-03-00】テレビ開通後のガイド誌冊数情報の照会API対応
*	ｖ39.0.3	2019/01/14	FJ) 田原	【OM-2019-0000059】工程進捗の返却対応
*	ｖ50.0.0	2020/06/01	FJ) 中原	【ANK-3754-00-00】トビラフォン対応
*    v52.0.0	2021/02/12	FJ) 中原	【ANK-3991-00-00】STB新機種追加(2021年4月〜)
*   ｖ61.0.0	2023/04/11	FJ) 藤本涼	【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
********************************************************************************/

package eo.ejb.cbs.sqlf;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.base.CAANSQLFacility;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
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 com.fujitsu.futurity.model.ejb.common.fw.TemplateDBAccessHandler;

import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B041CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B041CBSMsg1List;
import eo.ejb.common.JKKModelCommon;

/**
*  テンプレートDBアクセス部品　EKK0081B041_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEKK0081B041TPDA extends CAANSQLFacility implements TemplateDBAccessHandler
{
	
	
	/** 工事進捗 作業中 */
	public static final String SAGYO_CHU = "1";
	/** 工事進捗 作業完了 */
	public static final String SAGYO_KANRYO = "2";
	/** 工事進捗 ご利用開始 */
	public static final String GORIYO_KAISHI = "008";
	/** 工事進捗 お客様宅内工事 */
	public static final String OKYAKUSAMA_TAKUNAIKOJI = "007";
	/** 工事進捗 光ケーブル幹線工事 */
	public static final String HIKARIKANSENKOJI = "006";
	/** 工事進捗 承諾証受領 */
	public static final String SHODAKUSHO_JURYO = "005";
	/** 工事進捗 お客様宅内調査 */
	public static final String OKYAKUSAMA_TAKUNAICHOSA = "003";
	/** 工事進捗 お客様宅内調査日程調整 */
	public static final String OKYAKUSAMA_TAKUNAI_CHOSEI = "002";
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEKK0081B041TPDA()
	{
	}
	
	/**
	*   EKK0081B041_SQLF
	*   <br>
	*   @param inMsg    入力値の格納されたCBSMsg
	*   @param inContext Agentから渡されたAgentDispatchContext
	*   @return void
	*/
	public void invoke(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		
		if(chkKnrn(inMsg, inContext))
		{
			// サービス契約(ネット)
			Map<String, String> svcKeiNet = new HashMap<String, String>();
			// サービス契約(電話)
			Map<String, String> svcKeiTel = new HashMap<String, String>();
			// サービス契約(テレビ)
			Map<String, String> svcKeiTv = new HashMap<String, String>();
			// ネット契約付加情報
			Map<String, String> netKeiFukaMap = new HashMap<String, String>();
			// テレビ契約付加情報
			Map<String, String> tvKeiFukaMap = new HashMap<String, String>();
			// テレビガイド誌オプション情報
			Map<String, String> tvKeiFukaTvGuideOpMap = new HashMap<String, String>();
			// 電話契約付加情報リスト
			List<Map<String, String>> telKeiFukaList = new ArrayList<Map<String, String>>();
			// テレビ契約付加リスト
			List<Map<String, String>> tvKeiFukaList = new ArrayList<Map<String, String>>();
			// 工事情報
			Map<String, String> kojiInfoMap = new HashMap<String, String>();
			
			if(!getKaisenTgSvkei(inMsg, inContext, svcKeiNet, svcKeiTel, svcKeiTv))
			{
				return;
			}
			netKeiFukaMap = getNetKeiFkInfo(svcKeiNet, inMsg, inContext);
			
			// eo光電話契約してたら実行
			if (!svcKeiTel.isEmpty())
			{
				telKeiFukaList = getTelKeiFuka(svcKeiTel, inMsg, inContext);
			}
			
			// eo光テレビ契約してたら実行
			if (!svcKeiTv.isEmpty())
			{
				if(JKKStrConst.CD00134_A38.equals(svcKeiTv.get("PCRS_CD")) || JKKStrConst.CD00134_TV_HD.equals(svcKeiTv.get("PCRS_CD")))
				{
					tvKeiFukaList = getTvKeiFukaInfoSTBList(inMsg, inContext, svcKeiTv);
				}
				tvKeiFukaTvGuideOpMap = getTvGuideShiOp(inMsg, inContext, svcKeiTv);
			}
			// 工事情報取得
			if(JKKStrConst.CD00037_SVCTK_CHU.compareTo(svcKeiNet.get("SVC_KEI_STAT")) > 0)
			{
				kojiInfoMap = getKojiInfo(svcKeiNet, inMsg, inContext);
			}
			
			Map<String, String> resultMap = createResult(svcKeiNet, svcKeiTel, svcKeiTv, netKeiFukaMap, telKeiFukaList, tvKeiFukaTvGuideOpMap, 
					tvKeiFukaList, kojiInfoMap, inMsg, inContext);

			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = new CAANMsg[1];
			outMsg1[0] = new CAANMsg("eo.ejb.cbs.cbsmsg.EKK0081B041CBSMsg1List", (HashMap)resultMap);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKK0081B041CBSMsg1List", outMsg1);
		}
	}
	
	/**
	 * 関連チェック処理
	 * @param inMsg 入力値が格納されたCBSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return チェック項目に引っかからなかった場合:true
	 *          結果が0件の場合:false
	 *          取得した卸先事業者コードとＫＥＹ＿卸先事業者コードが一致しなかった場合:false
	 *          該当するサービス契約のグループコードが02だった場合:false
	 *          
	 */
	private boolean chkKnrn(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		try
		{
			// コネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			
			// 関連チェック（ネット契約チェック）SQL文
			StringBuffer sql_buff = new StringBuffer();
			sql_buff.append(" SELECT  ")
			.append("       KK0081.PRC_GRP_CD, ")
			// IT1-2018-0000045 MOD START
//			.append("       CH0911.ORSJGS_CD ")  
			.append("       CH0911.ORSJGS_CD, ")
			.append("       CH0911.ORSJGS_TSTAYMD, ")
			.append("       CH0911.ORSJGS_TENDYMD ")
			// IT1-2018-0000045 MOD END
			.append(" FROM       KK_T_SVC_KEI KK0081 ")
			.append(" INNER JOIN CK_T_CUST CK0011 ")
			.append(" ON CK0011.SYSID = KK0081.SYSID ")
			.append(" LEFT OUTER JOIN CH_M_ORSJGS CH0911 ")
			.append(" ON CH0911.ORSJGS_CD = CK0011.ORSJGS_CD ")
			.append(" WHERE KK0081.SVC_KEI_NO = '").append(inMsg.getString(EKK0081B041CBSMsg.KEY_SVC_KEI_NO)).append("'")
			.append(" AND KK0081.SVC_KEI_STAT IN ('010', '020', '030', '100', '210', '220') ")
			.append(" AND KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = ")
			.append(" 	(SELECT MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX ")
			.append(" 	FROM   KK_T_SVC_KEI KK0081_GENE ")
			.append(" 	WHERE  KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
			.append(" 	AND    KK0081_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append(" 	AND    KK0081_GENE.RSV_APLY_CD = '2' ")
			.append(" 	AND    KK0081_GENE.MK_FLG = '0') ")
			.append(" AND CK0011.RSV_APLY_YMD || CK0011.GENE_ADD_DTM = ")
			.append(" 	(SELECT MAX(CK0011_GENE.RSV_APLY_YMD || CK0011_GENE.GENE_ADD_DTM) AS CK0011_MAX ")
			.append(" 	FROM   CK_T_CUST CK0011_GENE ")
			.append(" 	WHERE  CK0011_GENE.SYSID = CK0011.SYSID ")
			.append(" 	AND    CK0011_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append(" 	AND    CK0011_GENE.RSV_APLY_CD = '2' ")
			.append(" 	AND    CK0011_GENE.MK_FLG = '0') ")
// ANK-3478-03-00 MOD START			
//			.append(" AND CH0911.GENE_ADD_DTM = ")
//			.append(" 	(SELECT MAX(CH0911_GENE.GENE_ADD_DTM) AS CH0911_MAX ")
			// LEFT OUTER JOINのマスタに対してカレント取りしている為、合致しない場合はレコードが出力されない
			// その為、この条件に合致しない場合でもレコードが出力されるようにNVL関数を使用して対応
			.append(" AND NVL(CH0911.GENE_ADD_DTM, 'NULL') = ")
			.append(" 	(SELECT NVL(MAX(CH0911_GENE.GENE_ADD_DTM), 'NULL') AS CH0911_MAX ")
// ANK-3478-03-00 MOD END
			.append(" 	FROM   CH_M_ORSJGS CH0911_GENE ")
			.append(" 	WHERE  CH0911_GENE.ORSJGS_CD = CH0911.ORSJGS_CD ")
			// IT1-2018-0000045 DEL START
//			.append(" 	AND '").append(opeDate).append("' BETWEEN CH0911_GENE.ORSJGS_TSTAYMD AND CH0911_GENE.ORSJGS_TENDYMD ")
			// IT1-2018-0000045 DEL END
			.append(" 	AND    CH0911_GENE.MK_FLG = '0') ");
			
			pstmt = con.prepareStatement(sql_buff.toString());
			
			// ログの出力（SQL文の出力）
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_buff);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			if (!rsltQuery.next())
			{
				inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
				inMsg.set(EKK0081B041CBSMsg.KEY_SVC_KEI_NO_ERR, "EA");
				return false;
			}

			// 該当するお客様の卸先事業者コードが適用中でない、またはＫＥＹ＿卸先事業者コードと一致しない場合はエラー
			String orsjgsCd = rsltQuery.getString("ORSJGS_CD");
			// IT1-2018-0000045 ADD START
			String orsjgsTstaymd = rsltQuery.getString("ORSJGS_TSTAYMD");
			String orsjgsTendymd = rsltQuery.getString("ORSJGS_TENDYMD");
			// IT1-2018-0000045 ADD END
			
			// IT1-2018-0000045 MOD START
//			if (JKKStringUtil.isNullBlank(orsjgsCd) || !orsjgsCd.equals(inMsg.getString(EKK0081B041CBSMsg.KEY_ORSJGS_CD)))
			if (JKKStringUtil.isNullBlank(orsjgsCd) || !orsjgsCd.equals(inMsg.getString(EKK0081B041CBSMsg.KEY_ORSJGS_CD))
					|| !(orsjgsTstaymd.compareTo(opeDate) <= 0) || !(opeDate.compareTo(orsjgsTendymd) <= 0))
			// IT1-2018-0000045 MOD END
			{
				inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
				inMsg.set(EKK0081B041CBSMsg.KEY_ORSJGS_CD_ERR, "EA");
				return false;
			}
			
			// 該当するサービス契約のグループコードが"02"(eo光ネット(ホームタイプ))でない場合はエラー
			if (!JKKStrConst.CD00133_02.equals(rsltQuery.getString("PRC_GRP_CD")))
			{
				inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
				inMsg.set(EKK0081B041CBSMsg.KEY_SVC_KEI_NO_ERR, "EB");
				return false;
			}
		}
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con, pstmt, rsltQuery);
		}
		return true;
	}
	
	
	/**
	 * 回線対象サービス契約を取得します。
	 * <br>
	 * @param inMsg 入力値が格納されたCBSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNet サービス契約(ネット)Map
	 * @param svcKeiTel サービス契約(電話)Map
	 * @param svcKeiTv  サービス契約(テレビ)Map
	 * @return 契約存在チェックに引っかかった場合:false
	 *          回線対象サービス契約が取得できた場合:true
	 */
	private boolean getKaisenTgSvkei(CAANMsg inMsg, AgentDispatchContext inContext, Map<String, String> svcKeiNet, Map<String, String> svcKeiTel,
			Map<String, String> svcKeiTv)
	{
		
		// コネクション
		Connection con1 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		try
		{
			// コネクション取得
			con1 = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			
			// 回線対象サービス契約取得 SQL文
			StringBuffer sql_Buff1 = new StringBuffer();
			sql_Buff1.append(" SELECT  ")
			.append("     KK0081.SVC_KEI_NO, ")
			.append("     KK0081.PRC_GRP_CD, ")
			.append("     KK0081.PCRS_CD, ")
			.append("     KK0081.SVC_KEI_STAT, ")
			.append("     KK0081.SVC_STA_YMD, ")
			.append("     KK0081.SVC_CHRG_STAYMD, ")
			.append("     KK0241.SVC_KEI_KAISEN_UCWK_NO ")
			.append(" FROM ")
			.append("     KK_T_KAISEN_TG_SVKEI KK0241 ")
			.append(" INNER JOIN ")
			.append("     KK_T_SVC_KEI KK0081 ")
			.append("  ON KK0241.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
			.append(" WHERE ")
			.append("     KK0241.SVC_KEI_KAISEN_UCWK_NO = ")
			.append("     (SELECT MAX(KK0241_01.SVC_KEI_KAISEN_UCWK_NO) ")
			.append("      FROM   KK_T_KAISEN_TG_SVKEI KK0241_01 ")
			.append("      WHERE  KK0241_01.SVC_KEI_NO = '").append(inMsg.getString(EKK0081B041CBSMsg.KEY_SVC_KEI_NO)).append("'")
			.append("      AND    KK0241_01.KAISEN_UCWK_USE_STAYMD <= '").append(opeDate).append("'")
			.append("      AND    KK0241_01.KAISEN_UCWK_USE_ENDYMD = ")
			.append("          (SELECT MAX(KK0241_02.KAISEN_UCWK_USE_ENDYMD) AS KK0241_MAX ")
			.append("           FROM   KK_T_KAISEN_TG_SVKEI KK0241_02 ")
			.append("           WHERE  KK0241_02.SVC_KEI_NO = KK0241_01.SVC_KEI_NO ")
			.append("           AND    KK0241_02.KAISEN_UCWK_USE_STAYMD <= '").append(opeDate).append("'")
			.append("           AND    KK0241_02.MK_FLG = '0') ")
			.append("     ) ")
			.append(" AND KK0081.SVC_KEI_STAT IN ('010', '020', '030', '100', '210', '220') ")
			.append(" AND KK0081.PRC_GRP_CD IN ('02', '10', '11') ")
			.append(" AND KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = ")
			.append("     (SELECT MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) AS KK0081_MAX ")
			.append("      FROM   KK_T_SVC_KEI KK0081_GENE ")
			.append("      WHERE  KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
			.append("      AND    KK0081_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("      AND    KK0081_GENE.RSV_APLY_CD = '2' ")
			.append("      AND    KK0081_GENE.MK_FLG = '0') ");
			
			// prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff1.toString());
			
			// ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff1);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// 取得結果の設定
			Map<String, String> targetMap = new HashMap<String, String>();
			
			// 契約存在チェック
			if (!rsltQuery.next())
			{
				inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
				inMsg.set(EKK0081B041CBSMsg.KEY_SVC_KEI_NO_ERR, "EA");
				return false;
			}

			do
			{
				String prcGrpCd = rsltQuery.getString("PRC_GRP_CD");
				if (JKKStrConst.CD00133_02.equals(prcGrpCd))
				{
					targetMap = svcKeiNet;
				}
				else if (JKKStrConst.CD00133_10.equals(prcGrpCd))
				{
					targetMap = svcKeiTel;
				}
				else if (JKKStrConst.CD00133_11.equals(prcGrpCd))
				{
					targetMap = svcKeiTv;
				}
				targetMap.put("SVC_KEI_NO", rsltQuery.getString("SVC_KEI_NO"));
				targetMap.put("PRC_GRP_CD" , rsltQuery.getString("PRC_GRP_CD"));
				targetMap.put("PCRS_CD" , rsltQuery.getString("PCRS_CD"));
				targetMap.put("SVC_KEI_STAT" , rsltQuery.getString("SVC_KEI_STAT"));
				targetMap.put("SVC_STA_YMD" , rsltQuery.getString("SVC_STA_YMD"));
				targetMap.put("SVC_CHRG_STAYMD" , rsltQuery.getString("SVC_CHRG_STAYMD"));
				targetMap.put("SVC_KEI_KAISEN_UCWK_NO" , rsltQuery.getString("SVC_KEI_KAISEN_UCWK_NO"));
				
			}
			while (rsltQuery.next());

		}
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con1, pstmt, rsltQuery);
		}

		return true;
	}

	/**
	 * ネット付加情報を取得します。
	 * <br>
	 * @param svcKeiNet サービス契約(ネット)
	 * @param inMsg 入力項目が格納されたCBSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return ネット付加情報
	 */
	private Map<String, String> getNetKeiFkInfo(Map<String, String> svcKeiNet, CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con2 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// ネット契約付加情報
		Map<String, String> netKeiFukaMap = new HashMap<String, String>();

		try
		{
			// コネクション取得
			con2 = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
				
			// ネット契約付加情報取得
			StringBuffer sql_Buff2 = new StringBuffer();
			sql_Buff2.append(" SELECT  ")
				.append("     KK0341.KKTK_SVC_KEI_NO, ")
				.append("     KK0341.KKTK_SVC_KEI_STAT, ")
				.append("     KK2811.PCRS_CD ")
				.append(" FROM ")
				.append("     KK_T_KKTK_SVC_KEI KK0341 ")
				.append(" INNER JOIN ")
				.append("  KK_T_KKOP_SVC_KEI KK2811 ")
				.append("  ON KK0341.KKTK_SVC_KEI_NO = KK2811.KKTK_SVC_KEI_NO ")
				.append(" WHERE ")
				.append("     KK0341.SVC_KEI_KAISEN_UCWK_NO = '").append(svcKeiNet.get("SVC_KEI_KAISEN_UCWK_NO")).append("'")
				.append("     AND KK0341.KKTK_SVC_KEI_STAT = '").append(svcKeiNet.get("SVC_KEI_STAT")).append("'")
				// ANK-4315-00-00 MOD START
//				.append("     AND KK0341.KKTK_SVC_CD = 'C024' ")
				.append("     AND KK0341.KKTK_SVC_CD IN ('C024','C025') ")
				// ANK-4315-00-00 MOD END
				.append("     AND KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM = ")
				.append("     (SELECT MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) AS KK0341_MAX")
				.append("     FROM   KK_T_KKTK_SVC_KEI KK0341_GENE")
				.append("     WHERE  KK0341_GENE.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO")
				.append("     AND    KK0341_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
				.append("     AND    KK0341_GENE.RSV_APLY_CD = '2' ")
				.append("     AND    KK0341_GENE.MK_FLG = '0') ")
				.append("    AND KK2811.KKOP_SVC_KEI_STAT = '").append(svcKeiNet.get("SVC_KEI_STAT")).append("'")
				.append("    AND KK2811.KKOP_SVC_CD = 'G01' ")
				.append("    AND KK2811.RSV_APLY_YMD || KK2811.GENE_ADD_DTM =")
				.append(" (SELECT MAX(KK2811_GENE.RSV_APLY_YMD || KK2811_GENE.GENE_ADD_DTM) AS KK2811_MAX")
				.append("  FROM   KK_T_KKOP_SVC_KEI KK2811_GENE")
				.append("  WHERE  KK2811_GENE.KKOP_SVC_KEI_NO = KK2811.KKOP_SVC_KEI_NO ")
				.append("  AND     KK2811_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
				.append("  AND     KK2811_GENE.RSV_APLY_CD = '2' ")
				.append("  AND     KK2811_GENE.MK_FLG = '0') ");
			
				
			// prepareStatementにSQL文をセット
			pstmt = con2.prepareStatement(sql_Buff2.toString());
				
			// ログ出力（SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff2);
				
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
				
			if (rsltQuery.next())
			{
				// 取得結果の設定
				netKeiFukaMap.put("KKTK_SVC_KEI_NO", rsltQuery.getString("KKTK_SVC_KEI_NO"));
				netKeiFukaMap.put("KKTK_SVC_KEI_STAT", rsltQuery.getString("KKTK_SVC_KEI_STAT"));
				netKeiFukaMap.put("PCRS_CD", rsltQuery.getString("PCRS_CD"));
			}
		}
		
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con2, pstmt, rsltQuery);
		}
		return netKeiFukaMap;
	}
	
	
	/**
	 * 電話契約付加情報を取得します。
	 * <br>
	 * @param svcKeiTel サービス契約(電話)
	 * @param inMsg 入力値が格納されたCBSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 電話契約付加情報
	 */
	private List<Map<String, String>> getTelKeiFuka(Map<String, String> svcKeiTel, CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// 電話契約付加情報取得
		List<Map<String, String>> telKeiFukaList = new ArrayList<Map<String, String>>();

		try
		{
			// コネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			
			// 電話契約付加情報取得SQL
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT  ")
			.append("     KK0161.SVC_KEI_UCWK_NO, ")
			.append("     KK0161.SVC_KEI_UCWK_STAT, ")
			.append("     KK0191.TELNO_JUN, ")
			.append("     KK0191.TELNO, ")
			.append("     KK0191.VA_PORT_NO, ")
			.append("     KK0351.OP_SVC_KEI_NO, ")
			.append("     KK0351.PPLAN_CD AS PPLAN_CD_OP, ")
			.append("     KK0351.OP_SVC_CD, ")
			.append("     CASE KK0351.OP_SVC_CD ")
			.append("     WHEN 'B022' THEN '発信者番号通知'")
			.append("     ELSE KK0351.OP_SVC_NM ")
			.append("     END AS OP_SVC_NM, ")
			.append("     KK0401.SBOP_SVC_KEI_NO, ")
			.append("     KK0401.PPLAN_CD AS PPLAN_CD_SBOP, ")
			.append("     KK0401.SBOP_SVC_CD, ")
			.append("     KK0401.SBOP_SVC_NM ")
			.append(" FROM ")
			.append("     KK_T_SVC_KEI_UCWK KK0161 ")
			.append(" INNER JOIN ")
			.append("     KK_T_SVKEIUW_EOH_TEL KK0191 ")
			.append("  ON  ")
			.append("      KK0191.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ")
			.append("  AND KK0191.GENE_ADD_DTM = KK0161.GENE_ADD_DTM ")
			.append("  LEFT OUTER JOIN ")
			.append("     (SELECT KK0351_01.SVC_KEI_UCWK_NO, ")
			.append("             KK0351_01.OP_SVC_KEI_NO, ")
			.append("             KK0351_01.PPLAN_CD, ")
			.append("             KK0351_01.OP_SVC_CD, ")
			.append("             (SELECT KK0821.OP_SVC_NM ")
			.append("              FROM   KK_M_OP_SVC KK0821 ")
			.append("              WHERE  KK0821.OP_SVC_CD = KK0351_01.OP_SVC_CD ")
			.append("              AND    KK0821.OP_SVC_TSTAYMD <=  '").append(opeDate).append("'")
			.append("              AND    KK0821.OP_SVC_TENDYMD >=  '").append(opeDate).append("'")
// ANK-3478-03-00 MOD START
//			.append("              AND    KK0821.GENE_ADD_DTM = ")
//			.append("                 (SELECT MAX(KK0821_GENE.GENE_ADD_DTM) AS KK0821_MAX ")
			.append("              AND    KK0821.RSV_APLY_YMD || KK0821.GENE_ADD_DTM = ")
			.append("                 (SELECT MAX(KK0821_GENE.RSV_APLY_YMD || KK0821_GENE.GENE_ADD_DTM) AS KK0821_MAX ")
// ANK-3478-03-00 MOD END
			.append("                  FROM   KK_M_OP_SVC KK0821_GENE ")
			.append("                  WHERE  KK0821_GENE.OP_SVC_CD = KK0821.OP_SVC_CD ")
// ANK-3478-03-00 ADD START
			.append("                  AND    KK0821_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
// ANK-3478-03-00 ADD END
			.append("                  AND    KK0821_GENE.MK_FLG = '0') ")
			.append("             ) AS OP_SVC_NM ")
			.append("      FROM   KK_T_OP_SVC_KEI KK0351_01 ")
			.append("      WHERE  KK0351_01.OP_SVC_KEI_STAT = '").append(svcKeiTel.get("SVC_KEI_STAT")).append("'")
			.append("      AND    KK0351_01.OP_SVC_CD <> 'B072 '")
// ANK-3754-00-00 ADD START
			.append("      AND    KK0351_01.OP_SVC_CD <> 'B135 '")
// ANK-3754-00-00 ADD END
// ANK-3478-03-00 MOD START
//			.append("      AND    KK0351_01.GENE_ADD_DTM = ")
//			.append("             (SELECT MAX(KK0351_GENE.GENE_ADD_DTM) AS KK0351_MAX ")
			.append("      AND    KK0351_01.RSV_APLY_YMD || KK0351_01.GENE_ADD_DTM = ")
			.append("             (SELECT MAX(KK0351_GENE.RSV_APLY_YMD || KK0351_GENE.GENE_ADD_DTM) AS KK0351_MAX ")
// ANK-3478-03-00 MOD END
			.append("              FROM   KK_T_OP_SVC_KEI KK0351_GENE ")
			.append("              WHERE  KK0351_GENE.OP_SVC_KEI_NO = KK0351_01.OP_SVC_KEI_NO ")
			.append("              AND    KK0351_GENE.RSV_APLY_YMD <=  '").append(opeDate).append("'")
			.append("              AND    KK0351_GENE.RSV_APLY_CD = '2' ")
			.append("              AND    KK0351_GENE.MK_FLG = '0') ")
			.append("      ) KK0351 ")
			.append("  ON ")
			.append("      KK0351.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ")
			.append("  LEFT OUTER JOIN ")
			.append("     (SELECT KK0401_01.OP_SVC_KEI_NO, ")
			.append("             KK0401_01.SBOP_SVC_KEI_NO, ")
			.append("             KK0401_01.PPLAN_CD, ")
			.append("             KK0401_01.SBOP_SVC_CD, ")
			.append("             (SELECT KK0831.SBOP_SVC_NM ")
			.append("              FROM   KK_M_SBOP_SVC KK0831  ")
			.append("              WHERE  KK0831.SBOP_SVC_CD = KK0401_01.SBOP_SVC_CD ")
			.append("              AND '").append(opeDate).append("' BETWEEN KK0831.SBOP_SVC_TSTAYMD AND KK0831.SBOP_SVC_TENDYMD ")
			.append("              AND    KK0831.GENE_ADD_DTM = ")
			.append("                 (SELECT MAX(KK0831_GENE.GENE_ADD_DTM) AS KK0831_MAX ")
			.append("                  FROM   KK_M_SBOP_SVC KK0831_GENE ")
			.append("                  WHERE  KK0831_GENE.SBOP_SVC_CD = KK0831.SBOP_SVC_CD ")
			.append("                  AND    KK0831_GENE.MK_FLG = '0') ")
			.append("             ) AS SBOP_SVC_NM ")
			.append("      FROM   KK_T_SBOP_SVC_KEI KK0401_01 ")
			.append("      WHERE  KK0401_01.SBOP_SVC_KEI_STAT = '").append(svcKeiTel.get("SVC_KEI_STAT")).append("'")
// ANK-3478-03-00 MOD START
//			.append("      AND    KK0401_01.GENE_ADD_DTM = ")
//			.append("             (SELECT MAX(KK0401_GENE.GENE_ADD_DTM) AS KK0401_MAX ")
			.append("      AND    KK0401_01.RSV_APLY_YMD || KK0401_01.GENE_ADD_DTM = ")
			.append("             (SELECT MAX(KK0401_GENE.RSV_APLY_YMD || KK0401_GENE.GENE_ADD_DTM) AS KK0401_MAX ")
// ANK-3478-03-00 MOD END
			.append("              FROM   KK_T_SBOP_SVC_KEI KK0401_GENE ")
			.append("              WHERE  KK0401_GENE.OP_SVC_KEI_NO = KK0401_01.OP_SVC_KEI_NO ")
// ANK-3478-03-00 ADD START
			.append("              AND    KK0401_GENE.SBOP_SVC_KEI_NO = KK0401_01.SBOP_SVC_KEI_NO ")
// ANK-3478-03-00 ADD END
			.append("              AND    KK0401_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("              AND    KK0401_GENE.RSV_APLY_CD = '2' ")
			.append("              AND    KK0401_GENE.MK_FLG = '0') ")
			.append("      ) KK0401  ")
			.append("  ON KK0351.OP_SVC_KEI_NO = KK0401.OP_SVC_KEI_NO ")
			.append(" WHERE ")
			.append("      KK0161.SVC_KEI_NO = '").append(svcKeiTel.get("SVC_KEI_NO")).append("'")
			.append("      AND KK0161.SVC_KEI_UCWK_STAT = '").append(svcKeiTel.get("SVC_KEI_STAT")).append("'")
			.append("      AND KK0161.KEIZK_AF_KEI_CHGECHU_FLG = '0' ")
			.append("      AND KK0191.MK_FLG = '0' ")
			.append("      AND KK0161.RSV_APLY_YMD || KK0161.GENE_ADD_DTM = ")
			.append("           (SELECT MAX(KK0161_GENE.RSV_APLY_YMD || KK0161_GENE.GENE_ADD_DTM) AS KK0161_MAX")
			.append("            FROM   KK_T_SVC_KEI_UCWK KK0161_GENE ")
			.append("            WHERE  KK0161_GENE.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ")
			.append("            AND    KK0161_GENE.RSV_APLY_YMD <=  '").append(opeDate).append("'")
			.append("            AND    KK0161_GENE.RSV_APLY_CD = '2'")
			.append("            AND    KK0161_GENE.MK_FLG = '0' ")
			.append("     ) ")
			.append(" AND (KK0351.OP_SVC_CD IS NOT NULL AND KK0351.OP_SVC_NM IS NOT NULL ")
			.append("     OR KK0351.OP_SVC_CD IS NULL AND KK0351.OP_SVC_NM IS NULL)  ")
			.append(" AND (KK0401.SBOP_SVC_CD IS NOT NULL AND KK0401.SBOP_SVC_NM IS NOT NULL ")
			.append("     OR KK0401.SBOP_SVC_CD IS NULL AND KK0401.SBOP_SVC_NM IS NULL) ")
			.append(" ORDER BY ")
			.append("     KK0191.TELNO_JUN, KK0351.OP_SVC_CD, KK0401.SBOP_SVC_CD ");
		
			// prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sql_Buff.toString());
			
			// ログの出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			while (rsltQuery.next())
			{
				// Map
				Map<String, String> kariMap = new HashMap<String, String>();
				// 取得結果の設定
				kariMap.put("SVC_KEI_UCWK_NO", rsltQuery.getString("SVC_KEI_UCWK_NO"));
				kariMap.put("SVC_KEI_UCWK_STAT", rsltQuery.getString("SVC_KEI_UCWK_STAT"));
				kariMap.put("TELNO_JUN", rsltQuery.getString("TELNO_JUN"));
				kariMap.put("TELNO", rsltQuery.getString("TELNO"));
				kariMap.put("VA_PORT_NO", rsltQuery.getString("VA_PORT_NO"));
				kariMap.put("OP_SVC_KEI_NO", rsltQuery.getString("OP_SVC_KEI_NO"));
				kariMap.put("PPLAN_CD_OP", rsltQuery.getString("PPLAN_CD_OP"));
				kariMap.put("OP_SVC_CD", rsltQuery.getString("OP_SVC_CD"));
				kariMap.put("OP_SVC_NM", rsltQuery.getString("OP_SVC_NM"));
				kariMap.put("SBOP_SVC_KEI_NO", rsltQuery.getString("SBOP_SVC_KEI_NO"));
				kariMap.put("PPLAN_CD_SBOP", rsltQuery.getString("PPLAN_CD_SBOP"));
				kariMap.put("SBOP_SVC_CD", rsltQuery.getString("SBOP_SVC_CD"));
				kariMap.put("SBOP_SVC_NM", rsltQuery.getString("SBOP_SVC_NM"));
				
				telKeiFukaList.add(kariMap);
			}	
		}
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con, pstmt, rsltQuery);
		}
		return telKeiFukaList;
	}

	/**
	 * テレビ契約付加情報を取得します。
	 * <br>
	 * @param inMsg 入力値が格納されたCBSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiTv サービス契約(テレビ)Map
	 * @return テレビ契約付加情報
	 */
	private  List<Map<String, String>> getTvKeiFukaInfoSTBList(CAANMsg inMsg, AgentDispatchContext inContext, Map<String, String> svcKeiTv)
	{
		// コネクションの作成
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// ResultSet
		ResultSet rsltQuery = null;
		
		List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
		
		try
		{
			// コネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			// テレビ契約付加情報取得
			StringBuffer sql_buff = new StringBuffer();
	
			sql_buff.append(" SELECT  ")
			.append("     KK0341.KKTK_SVC_KEI_NO, ")
			.append("     CASE KK0341.PCRS_CD ")
			.append("         WHEN 'C95' THEN '01' ")
			.append("         WHEN 'C97' THEN '02' ")
			.append("         WHEN 'C96' THEN '03' ")
			.append("         WHEN 'C93' THEN '04' ")
			.append("         WHEN 'C15' THEN '05' ")
			.append("         WHEN 'C14' THEN '06' ")
			.append("         WHEN 'C92' THEN '07' ")
			.append("         WHEN 'C13' THEN '08' ")
			.append("         WHEN 'C12' THEN '09' ")
		// ANK-3488-00-00 ADD START
			.append("         WHEN 'C98' THEN '10' ")
			.append("         WHEN 'C99' THEN '11' ")
		// ANK-3488-00-00 ADD END
		// ANK-3991-00-00 ADD START
			.append("         WHEN 'CA4' THEN '10' ")
			.append("         WHEN 'CA5' THEN '11' ")
		// ANK-3991-00-00 ADD END
			.append("         ELSE '' ")
			.append("     END AS STB_SBT, ")
			.append("     CASE KK0341.PCRS_CD ")
			.append("         WHEN 'C95' THEN 'オンデマンド対応' ")
			.append("         WHEN 'C97' THEN 'オンデマンド対応５００ＧＢ' ")
			.append("         WHEN 'C96' THEN 'オンデマンド対応４Ｋ対応２ＴＢ' ")
			.append("         WHEN 'C93' THEN 'ブルーレイ機能付き１ＴＢ' ")
			.append("         WHEN 'C12' THEN '標準' ")
			.append("         WHEN 'C13' THEN '２５０ＧＢ' ")
			.append("         WHEN 'C14' THEN 'ＤＶＤ機能付き５００ＧＢ' ")
			.append("         WHEN 'C15' THEN 'ブルーレイ機能付き５００ＧＢ' ")
			.append("         WHEN 'C92' THEN '５００ＧＢ' ")
		// ANK-3488-00-00 ADD START
			.append("         WHEN 'C98' THEN 'オンデマンド・４Ｋ録画機能なし' ")
			.append("         WHEN 'C99' THEN 'オンデマンド・４Ｋ　２ＴＢ' ")
		// ANK-3488-00-00 ADD END
		// ANK-3991-00-00 ADD START
			.append("         WHEN 'CA4' THEN 'オンデマンド・４Ｋ録画機能なし' ")
			.append("         WHEN 'CA5' THEN 'オンデマンド・４Ｋ　２ＴＢ' ")
		// ANK-3991-00-00 ADD END
			.append("         ELSE '' ")
			.append("     END AS STB_SBT_NM, ")
			.append("     CASE KK0161.PCRS_CD ")
			.append("         WHEN 'A87' THEN '01' ")
			.append("         WHEN 'A86' THEN '02' ")
			.append("         WHEN 'A85' THEN '03' ")
			.append("         WHEN 'A41' THEN '04' ")
			.append("         WHEN 'A40' THEN '05' ")
			.append("         WHEN 'A36' THEN '06' ")
			.append("         WHEN 'A35' THEN '07' ")
			.append("         WHEN 'A33' THEN '08' ")
			.append("         WHEN 'A34' THEN '09' ")
			.append("         ELSE '' ")
			.append("     END AS TV_COURSE, ")
			.append("     CASE KK0161.PCRS_CD ")
			.append("         WHEN 'A87' THEN 'スマートプレミアム' ")
			.append("         WHEN 'A86' THEN 'スマートベーシック' ")
			.append("         WHEN 'A85' THEN 'スマートコンパクト' ")
			.append("         WHEN 'A41' THEN 'プレミアムＨＤ' ")
			.append("         WHEN 'A40' THEN 'ベーシックＨＤ' ")
			.append("         WHEN 'A36' THEN 'コンパクト' ")
			.append("         WHEN 'A35' THEN 'スタンダード' ")
			.append("         WHEN 'A33' THEN 'バリュー' ")
			.append("         WHEN 'A34' THEN 'ライト' ")
			.append("         ELSE '' ")
			.append("     END AS TV_COURSE_NM ")
			.append(" FROM ")
			.append("     KK_T_SVC_KEI_UCWK KK0161 ")
			.append(" INNER JOIN ")
			.append("     KK_T_KKTK_SVC_KEI KK0341 ")
			.append(" ON ")
			.append("     KK0341.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO ")
			.append(" WHERE ")
			.append("     KK0161.SVC_KEI_NO = '").append(svcKeiTv.get("SVC_KEI_NO")).append("'")
			.append(" AND KK0161.SVC_KEI_UCWK_STAT = '").append(svcKeiTv.get("SVC_KEI_STAT")).append("'")
// ▽▽▽ ST-2018-0000055 ADD START
			// 内訳のカレント条件が漏れているため追加
			.append(" AND (KK0161.RSV_APLY_YMD || KK0161.GENE_ADD_DTM) = ")
			.append("  (SELECT MAX(KK0161_GENE.RSV_APLY_YMD || KK0161_GENE.GENE_ADD_DTM) ")
			.append("    FROM KK_T_SVC_KEI_UCWK KK0161_GENE")
			.append("    WHERE KK0161_GENE.SVC_KEI_UCWK_NO = KK0161.SVC_KEI_UCWK_NO")
			.append("      AND KK0161_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("      AND KK0161_GENE.RSV_APLY_CD = '2'")
			.append("      AND KK0161_GENE.MK_FLG = '0') ")
// ▲▲▲ ST-2018-0000055 ADD END
			.append(" AND KK0341.KKTK_SVC_KEI_STAT = '").append(svcKeiTv.get("SVC_KEI_STAT")).append("'")
			.append(" AND KK0341.KKTK_SVC_CD = 'C009' ")
			.append(" AND KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM = ")
			.append("     (SELECT MAX(KK0341_GENE.RSV_APLY_YMD || KK0341_GENE.GENE_ADD_DTM) AS KK0341_MAX ")
			.append("      FROM   KK_T_KKTK_SVC_KEI KK0341_GENE ")
			.append("      WHERE  KK0341_GENE.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO ")
			.append("      AND    KK0341_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("      AND    KK0341_GENE.RSV_APLY_CD = '2' ")
			.append("      AND    KK0341_GENE.MK_FLG = '0') ");
			
			// prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sql_buff.toString());
			
			// ログの出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_buff);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			while (rsltQuery.next())
			{
				Map<String, String> kariMap = new HashMap<String, String>();
				// 取得結果の設定
				
				kariMap.put("STB_SBT", rsltQuery.getString("STB_SBT"));
				kariMap.put("STB_SBT_NM", rsltQuery.getString("STB_SBT_NM"));
				kariMap.put("TV_COURSE", rsltQuery.getString("TV_COURSE"));
				kariMap.put("TV_COURSE_NM", rsltQuery.getString("TV_COURSE_NM"));
				
				resultList.add(kariMap);
			}
		}
		
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con, pstmt, rsltQuery);
		}
		return resultList;
	}
	
	/**
	 * テレビガイド誌オプションを取得します。
	 * <br>
	 * @param inMsg 入力項目が格納されたCVSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiTv サービス契約テレビ
	 * @return テレビ契約付加テレビ契約ガイド誌
	 */
	private Map<String, String> getTvGuideShiOp(CAANMsg inMsg, AgentDispatchContext inContext, Map<String, String> svcKeiTv)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		Map<String, String> resltMap = new HashMap<String, String>();
		
		try
		{
			// コネクションを取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			// テレビガイド誌オプションSQL作成
			StringBuffer sql_buff = new StringBuffer();
// ANK-3478-03-00 MOD START
//			sql_buff.append(" SELECT  ")
			sql_buff.append(" SELECT ")
			.append("     KK.OP_SVC_KEI_NO, ")
			.append("     KK.CABLE_GUIDE_MSKM_CNT ")
			.append(" FROM ")
			.append(" ( ")
			.append("     SELECT ")
// ANK-3478-03-00 MOD END
			.append("     KK0351.OP_SVC_KEI_NO, ")
			.append("     KK0381.CABLE_GUIDE_MSKM_CNT ")
			.append(" FROM ")
			.append("     KK_T_OP_SVC_KEI KK0351 ")
			.append(" INNER JOIN ")
			.append("     KK_T_OPSVKEI_TV KK0381 ")
			.append(" ON ")
			.append("     KK0381.OP_SVC_KEI_NO = KK0351.OP_SVC_KEI_NO ")
			.append(" AND KK0381.GENE_ADD_DTM = KK0351.GENE_ADD_DTM ")
			.append(" WHERE ")
			.append("     KK0351.SVC_KEI_NO = '").append(svcKeiTv.get("SVC_KEI_NO")).append("'")
// ANK-3478-03-00 DEL START
//			.append(" AND KK0351.OP_SVC_KEI_STAT = '").append(svcKeiTv.get("SVC_KEI_STAT")).append("'")
// ANK-3478-03-00 DEL END
			.append(" AND KK0351.OP_SVC_CD = 'B068' ")
// ANK-3478-03-00 MOD START
//			.append(" AND KK0351.GENE_ADD_DTM = ")
//			.append("        (SELECT MAX(KK0351_GENE.GENE_ADD_DTM) AS KK0351_MAX ")
			.append(" AND KK0351.RSV_APLY_YMD || KK0351.GENE_ADD_DTM = ")
			.append("        (SELECT MAX(KK0351_GENE.RSV_APLY_YMD || KK0351_GENE.GENE_ADD_DTM) AS KK0351_MAX ")
// ANK-3478-03-00 MOD END
			.append("         FROM   KK_T_OP_SVC_KEI KK0351_GENE ")
			.append("         WHERE  KK0351_GENE.OP_SVC_KEI_NO = KK0351.OP_SVC_KEI_NO ")
			.append("         AND    KK0351_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("         AND    KK0351_GENE.RSV_APLY_CD = '2' ")
// ANK-3478-03-00 MOD START
//			.append("         AND    KK0351_GENE.MK_FLG = '0')");
			.append("         AND    KK0351_GENE.MK_FLG = '0')")
// ANK-3478-03-00 MOD END
// ANK-3478-03-00 ADD START
			.append(" AND KK0351.OP_SVC_KEI_STAT NOT IN ('910', '920') ")
			.append(" AND KK0381.MK_FLG = '0' ")
			.append(" ORDER BY KK0351.OP_SVC_KEI_STAT DESC ")
			.append(" ) KK ")
			.append(" WHERE ")
			.append("     ROWNUM = 1 ");
// ANK-3478-03-00 ADD END
			// prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sql_buff.toString());
			
			// ログの出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_buff);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			if (rsltQuery.next())
			{
				resltMap.put("CABLE_GUIDE_MSKM_CNT", rsltQuery.getString("CABLE_GUIDE_MSKM_CNT"));
			}
		}
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con, pstmt, rsltQuery);
		}
		return resltMap;
	}
	
	/**
	 * スターチャンネルセット割引の有無を判定します。
	 * <br>
	 * @param svcKeiTv サービス契約(テレビ)
	 * @param inMsg 入力値が格納されたCVSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return スターチャンネル割引が存在する場合:true
	 *          スターチャンネル割引が存在しない場合:false
	 */
	private boolean getStarChannelWari(Map<String, String> svcKeiTv, CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// スターチャンネルの取得結果
		int cnt = 0;
		
		try
		{
			// コネクションを取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			// スターチャンネルセット割引有無判定SQL
			StringBuffer  sql_buff = new StringBuffer();
			sql_buff.append(" SELECT  ")
				.append("     COUNT(*) AS CNT ")
				.append(" FROM ")
				.append("     KK_T_WRISVC_TG_KEI KK0481 ")
				.append(" INNER JOIN ")
				.append("     KK_T_WRIB_SVC_KEI KK0451 ")
				.append(" ON ")
				.append("     KK0451.WRIB_SVC_KEI_NO = KK0481.WRIB_SVC_KEI_NO ")
				.append(" INNER JOIN ")
				.append("     KK_M_WRIB_SVC KK0841 ")
				.append(" ON ")
				.append("     KK0841.WRIB_SVC_CD = KK0451.WRIB_SVC_CD ")
				.append(" WHERE ")
				.append("     KK0481.SVC_KEI_NO = '").append(svcKeiTv.get("SVC_KEI_NO")).append("'")
// ▽▽▽ ST-2018-0000055 ADD START
				// 割引契約にカレントの条件を追加する
				.append(" AND ")
				.append(" (KK0451.RSV_APLY_YMD || KK0451.GENE_ADD_DTM) = ")
				.append("   (SELECT MAX(KK0451_GENE.RSV_APLY_YMD || KK0451_GENE.GENE_ADD_DTM) ")
				.append("      FROM KK_T_WRIB_SVC_KEI KK0451_GENE ")
				.append("     WHERE KK0451_GENE.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO ")
				.append("       AND KK0451_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
				.append("       AND KK0451_GENE.RSV_APLY_CD = '2' ")
				.append("       AND KK0451_GENE.MK_FLG = '0') ")
// ▲▲▲ ST-2018-0000055 ADD END
				.append(" AND '").append(opeDate).append("' BETWEEN KK0481.WRISVC_TG_KEI_TSTAYMD AND KK0481.WRISVC_TG_KEI_TENDYMD ")
// ANK-3478-03-00 ADD START
				.append(" AND KK0481.MK_FLG = '0' ")
// ANK-3478-03-00 ADD END
				.append(" AND KK0451.WRIB_SVC_CD = 'W00000009' ")
				.append(" AND KK0451.WRIB_SVC_KEI_STAT IN ('010','100') ")
// ANK-3478-03-00 MOD START
//				.append(" AND '").append(opeDate).append("' BETWEEN KK0841.WRIB_SVC_TSTAYMD AND KK0841.WRIB_SVC_TENDYMD ");
				.append(" AND '").append(opeDate).append("' BETWEEN KK0841.WRIB_SVC_TSTAYMD AND KK0841.WRIB_SVC_TENDYMD ")
				.append(" AND KK0841.MK_FLG = '0' ");
// ANK-3478-03-00 MOD END
			
			// prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sql_buff.toString());
			
			// ログの出力(SQL)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_buff);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			Map<String, String> starChannelWariMap = new HashMap<String, String>();
			
			if (rsltQuery.next())
			{
				starChannelWariMap.put("CNT", rsltQuery.getString("CNT"));
			}
			cnt = Integer.parseInt(starChannelWariMap.get("CNT"));
			
			if(cnt > 0)
			{
				return true;
			}
		}
		catch(SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con, pstmt, rsltQuery);
		}
		return false;
	}
	
	/**
	 * 工事情報を取得します。
	 * <br>
	 * @param svcKeiNet サービス契約ネット
	 * @param inMsg 入力値が格納されたCVSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 工事情報
	 */
	private Map<String, String> getKojiInfo(Map<String, String> svcKeiNet, CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		
		Map<String, String> kojiInfoMap = new HashMap<String, String>();
		try
		{
			// コネクションを取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			// 工事情報取得SQL
			StringBuffer sql_buff = new StringBuffer();
			
			sql_buff.append(" SELECT  ")
			.append("     KU0151.KOJIAK_NO, ")
			.append("     KU0151.STEP_HROUTE_CHOSA_DSGN_CD, ")
			.append("     KU0151.STEP_CUST_TAKCHO_NTADJ_CD, ")
			.append("     KU0151.STEP_CUST_TAKCHO_CD,  ")
			.append("     KU0151.STEP_VARI_KYOKA_SHINSEI_CD, ")
			.append("     KU0151.STEP_TAKCHO_SDAKS_RCP_CD, ")
			.append("     KU0151.STEP_HCABLE_LINE_KOJI_CD, ")
			.append("     KU0151.STEP_CUST_TAKNI_KOJI_CD, ")
			.append("     KU0151.STEP_USE_STA_CD,  ")
			.append("     KU0151.TAKNIKJ_RSV_YMD,  ")
			.append("     KU0151.CANCEL_FLG ")
			.append(" FROM ")
			.append("     KU_T_SVKEI_KOJIAK KU0081 ")
			.append(" INNER JOIN ")
			.append("     KU_T_KOJIAK KU0011 ")
			.append(" ON ")
			.append("     KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ")
			.append(" INNER JOIN ")
			.append("      KU_T_KOJI_STEP_PRG KU0151 ")
			.append(" ON KU0151.KOJIAK_NO = KU0011.KOJIAK_NO ")
			.append(" WHERE ")
			.append("     KU0081.SVC_KEI_NO = '").append(svcKeiNet.get("SVC_KEI_NO")).append("'")
			.append(" AND '").append(opeDate).append("'BETWEEN KU0081.SVKEI_KOJIAK_TSTAYMD AND KU0081.SVKEI_KOJIAK_TENDYMD ")
			.append(" AND KU0081.MK_FLG = '0' ")
			.append(" AND KU0011.KOJIAK_SBT_CD = '001' ")
			.append(" AND KU0011.KOJIAK_STAT <> '900' ")
			.append(" AND KU0011.MK_FLG = '0'    ")
			.append(" AND KU0151.KOJIAK_NO = KU0011.KOJIAK_NO ")
			.append(" AND KU0151.KOJI_STEP_PRG_YMD = ")
			.append("     (SELECT MAX(KOJI_STEP_PRG_YMD) AS KU0151_MAX ")
			.append("      FROM   KU_T_KOJI_STEP_PRG KU0151_GENE ")
			.append("      WHERE  KU0151_GENE.KOJIAK_NO = KU0151.KOJIAK_NO ")
			.append("      AND    KU0151_GENE.MK_FLG = '0') ")
			.append(" AND KU0151.CANCEL_FLG = '0' ");
			
			// StatementにSQL文をセット
			pstmt = con.prepareStatement(sql_buff.toString());
			
			// ログの出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_buff);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			if (rsltQuery.next())
			{
				kojiInfoMap.put("KOJIAK_NO", rsltQuery.getString("KOJIAK_NO"));
				kojiInfoMap.put("STEP_HROUTE_CHOSA_DSGN_CD", rsltQuery.getString("STEP_HROUTE_CHOSA_DSGN_CD"));
				kojiInfoMap.put("STEP_CUST_TAKCHO_NTADJ_CD", rsltQuery.getString("STEP_CUST_TAKCHO_NTADJ_CD"));
				kojiInfoMap.put("STEP_CUST_TAKCHO_CD", rsltQuery.getString("STEP_CUST_TAKCHO_CD"));
				kojiInfoMap.put("STEP_VARI_KYOKA_SHINSEI_CD", rsltQuery.getString("STEP_VARI_KYOKA_SHINSEI_CD"));
				kojiInfoMap.put("STEP_TAKCHO_SDAKS_RCP_CD", rsltQuery.getString("STEP_TAKCHO_SDAKS_RCP_CD"));
				kojiInfoMap.put("STEP_HCABLE_LINE_KOJI_CD", rsltQuery.getString("STEP_HCABLE_LINE_KOJI_CD"));
				kojiInfoMap.put("STEP_CUST_TAKNI_KOJI_CD", rsltQuery.getString("STEP_CUST_TAKNI_KOJI_CD"));
				kojiInfoMap.put("STEP_USE_STA_CD", rsltQuery.getString("STEP_USE_STA_CD"));
				kojiInfoMap.put("TAKNIKJ_RSV_YMD", rsltQuery.getString("TAKNIKJ_RSV_YMD"));
				kojiInfoMap.put("CANCEL_FLG", rsltQuery.getString("CANCEL_FLG"));
			}
		}
		
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con, pstmt, rsltQuery);
		}
		return kojiInfoMap;
	}

	/**
	 * レスポンス項目に必要な項目をMapに格納します
	 * @param svcKeiNet サービス契約(ネット)
	 * @param svcKeiTel サービス契約(電話)
	 * @param svcKeiTv サービス契約(テレビ)
	 * @param netKeiFukaMap ネット契約付加情報
	 * @param telKeiFukaList 電話契約付加情報
	 * @param tvKeiFukaTvGuideOpMap テレビガイド誌オプション
	 * @param tvKeiFukaList テレビ契約付加情報
	 * @param kojiInfoMap 工事情報
	 * @param inMsg 入力項目が格納されたCVSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return レスポンス項目
	 */
	private Map<String, String> createResult(Map<String, String> svcKeiNet, Map<String, String> svcKeiTel, 
			Map<String, String> svcKeiTv, Map<String, String> netKeiFukaMap, List<Map<String, String>> telKeiFukaList, 
			Map<String, String> tvKeiFukaTvGuideOpMap, List<Map<String, String>> tvKeiFukaList, Map<String, String> kojiInfoMap, CAANMsg inMsg,
			AgentDispatchContext inContext)
	{
		Map<String, String> resultMap = new HashMap<String, String>();
		String telPcrsCd = svcKeiTel.get("PCRS_CD");
		
		// 契約状態(ネット)設定
		setContractState(resultMap, svcKeiNet, EKK0081B041CBSMsg1List.SVC_KEI_STAT_NET);
		// サービス開始日(ネット)設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_STA_YMD_NET, svcKeiNet.get("SVC_STA_YMD"));
		// 課金開始日(ネット)設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_CHRG_STAYMD_NET, svcKeiNet.get("SVC_CHRG_STAYMD"));
		// 多機能ルーター種別設定
		setRouter(resultMap, netKeiFukaMap.get("PCRS_CD"));
		// 電話契約設定
		setTel(resultMap, telPcrsCd);
		// 共通キー(電話)設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_KEI_NO_TEL, svcKeiTel.get("SVC_KEI_NO"));
		// 契約状態(電話)設定
		setContractState(resultMap, svcKeiTel, EKK0081B041CBSMsg1List.SVC_KEI_STAT_TEL);
		// サービス開始日(電話)設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_STA_YMD_TEL, svcKeiTel.get("SVC_STA_YMD"));
		// 課金開始日(電話)設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_CHRG_STAYMD_TEL, svcKeiTel.get("SVC_CHRG_STAYMD"));
		// 電話番号１ 設定
		resultMap.put(EKK0081B041CBSMsg1List.TELNO1, getTelNo(telKeiFukaList, "1"));
		// ポート番号１ 設定
		resultMap.put(EKK0081B041CBSMsg1List.VA_PORT_NO1, setVaPortNo(telKeiFukaList, "1"));
		// 電話番号２ 設定
		resultMap.put(EKK0081B041CBSMsg1List.TELNO2, getTelNo(telKeiFukaList, "2"));
		// ポート番号２ 設定
		resultMap.put(EKK0081B041CBSMsg1List.VA_PORT_NO2, setVaPortNo(telKeiFukaList, "2"));
		// オプション（電話番号１）設定
		resultMap.put(EKK0081B041CBSMsg1List.OPTION_TEL1, setOption(telKeiFukaList, inMsg, inContext, "1"));
		// オプション（電話番号２）設定
		resultMap.put(EKK0081B041CBSMsg1List.OPTION_TEL2, setOption(telKeiFukaList, inMsg, inContext, "2"));
		// テレビ契約 設定
		resultMap.put(EKK0081B041CBSMsg1List.TV_KEI, setTvKei(svcKeiTv, inMsg, inContext));
		// 共通キー(テレビ) 設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_KEI_NO_TV, svcKeiTv.get("SVC_KEI_NO"));
		// 契約状態(テレビ) 設定
		setContractState(resultMap, svcKeiTv, EKK0081B041CBSMsg1List.SVC_KEI_STAT_TV);
		// サービス開始日(テレビ) 設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_STA_YMD_TV, svcKeiTv.get("SVC_STA_YMD"));
		// 課金開始日(テレビ) 設定
		resultMap.put(EKK0081B041CBSMsg1List.SVC_CHRG_STAYMD_TV, svcKeiTv.get("SVC_CHRG_STAYMD"));
		// STB種別・STB種別名称・テレビコース・テレビコース名称を取得した数だけ設定
		for (int i = 0; i < 5; i++)
		{
			// STB種別設定
			resultMap.put("stb_sbt" + (i + 1), getStbSbt(tvKeiFukaList, i));
			// STB種別名称設定
			resultMap.put("stb_name" + (i + 1), getStbSbtNm(tvKeiFukaList, i));
			// テレビコース設定
			resultMap.put("tv_course" + (i + 1), getTvCourse(tvKeiFukaList, i));
			// テレビコース名称設定
			resultMap.put("tv_course_name" + (i + 1), getTvCourseNm(tvKeiFukaList, i));
		}
		// テレビガイド誌冊数 設定
		// IT1-2018-0000109 MOD START
//		resultMap.put(EKK0081B041CBSMsg1List.CABLE_GUIDE_MSKM_CNT, setTvGuideShi(tvKeiFukaTvGuideOpMap));
		resultMap.put(EKK0081B041CBSMsg1List.CABLE_GUIDE_MSKM_CNT, 
				setTvGuideShi(tvKeiFukaTvGuideOpMap, resultMap.get(EKK0081B041CBSMsg1List.TV_KEI)));
		// IT1-2018-0000109 MOD END
		// 工事進捗 設定
		resultMap.put(EKK0081B041CBSMsg1List.KOJI_PRG, getKojiStep(kojiInfoMap, svcKeiNet));
		// 工事予定日 設定
		resultMap.put(EKK0081B041CBSMsg1List.TAKNIKJ_RSV_YMD, getKojiSchedule(kojiInfoMap));
		
		return resultMap;
	}
	
	/**
	 * 契約状態を設定します。
	 * <br>
	 * @param resultMap 出力結果を格納するMap
	 * @param svcKei サービス契約
	 * @param key 出力結果に設定するキー名
	 */
	private void setContractState(Map<String, String> resultMap, Map<String, String> svcKei, String key)
	{
		// 必要項目のみをMapに格納
		// サービス契約(ネット).サービス契約ステータスが"220"以外の時はサービス契約ステータスを設定、"220"の場合は"210"を設定
		if (JKKStrConst.CD00037_STAT_STP.equals(svcKei.get("SVC_KEI_STAT")))
		{
			resultMap.put(key, "210");
		} 
		else 
		{
			resultMap.put(key, svcKei.get("SVC_KEI_STAT"));
		}
	}
	
	/**
	 * 多機能ルーター種別を設定します。
	 * <br>
	 * @param resultMap レスポンス項目が格納されたMap
	 * @param pcrsCdString 機器オプションサービス契約.料金コースコード
	 */
	private void setRouter(Map<String, String> resultMap,  String pcrsCdString)
	{
		// 機器オプションサービス契約.料金コースコードが"G01"(有線ルーターの場合)、"1"を設定
		if (JKKStrConst.CD00134_KKOP_YUSEN.equals(pcrsCdString))
		{
			resultMap.put(EKK0081B041CBSMsg1List.TAKINORT_SBT, "1");
		} 
		// 機器オプションサービス契約.料金コースコードが"G02"(無線ルーターの場合)、"2"を設定
		else if (JKKStrConst.CD00134_KKOP_MUSEN.equals(pcrsCdString))
		{
			resultMap.put(EKK0081B041CBSMsg1List.TAKINORT_SBT, "2");
		}
		// 上記以外の場合(該当する機種がない)場合、"0"を設定
		else
		{
			resultMap.put(EKK0081B041CBSMsg1List.TAKINORT_SBT, "0");
		}
	}
	
	/**
	 * 電話契約を設定します。
	 * <br>
	 * @param resltMap レスポンス項目が格納されたMap
	 * @param telPcrsCd サービス契約(電話).料金コースコード
	 */
	private void setTel(Map<String, String> resltMap, String telPcrsCd)
	{
		// サービス契約(電話).料金コースコードが"A31"（１番号コース）の場合、"1"を設定
		if (JKKStrConst.CD00134_A31.equals(telPcrsCd))
		{
			resltMap.put(EKK0081B041CBSMsg1List.TEL_KEI, "1");
		}
		// サービス契約(電話).料金コースコードが"A32"(２番号コース）の場合、"2"を設定
		else if (JKKStrConst.CD00134_A32.equals(telPcrsCd))
		{
			resltMap.put(EKK0081B041CBSMsg1List.TEL_KEI, "2");
		} 
		// 上記以外（サービス契約（電話）が取得できていない場合"0"を設定
		else 
		{
			resltMap.put(EKK0081B041CBSMsg1List.TEL_KEI, "0");
		}
	}
	
	/**
	 * 電話番号を設定します
	 * <br>
	 * @param telKeiFukaList 電話契約付加情報
	 * @param telNoJun 電話番号順番
	 * @return 引数で指定した電話番号順番が電話番号契約付加情報で取得した電話番号順と一致した場合:電話番号契約付加情報.電話番号順番
	 *          引数で指定した電話番号順番と電話契約付加情報.電話番号順番と一致しなかった場合:null
	 */
	private String getTelNo(List<Map<String, String>> telKeiFukaList, String telNoJun)
	{
		for (int i = 0; i < telKeiFukaList.size(); i++)
		{
			if (telNoJun.equals(telKeiFukaList.get(i).get("TELNO_JUN")))
			{
				return telKeiFukaList.get(i).get("TELNO");
			}
		}
		return null;
	}
	
	/**
	 * ポート番号を設定します。
	 * <br>
	 * @param telKeiFukaList 電話契約付加情報
	 * @param telNoJun 電話番号順番
	 * @return 引数で指定した電話番号順番が電話番号契約付加情報で取得した電話番号順と一致した場合:電話番号契約付加情報.VAポート番号
	 *          引数で指定した電話番号順番と電話契約付加情報.電話番号順番と一致しなかった場合:null
	 */
	private String setVaPortNo(List<Map<String, String>> telKeiFukaList, String telNoJun)
	{
		for (int i = 0; i < telKeiFukaList.size(); i++)
		{
			if (telNoJun.equals(telKeiFukaList.get(i).get("TELNO_JUN")))
			{
				return telKeiFukaList.get(i).get("VA_PORT_NO");
			}
		}
		return null;
	}

	/**
	 * オプションを設定します。
	 * <br>
	 * @param telKeiFukaList 電話契約付加情報
	 * @param inMsg 入力値が格納されたCBSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param telNoJun 電話番号順番
	 * @return オプション
	 */
	@SuppressWarnings("null")
	private String setOption(List<Map<String, String>> telKeiFukaList, CAANMsg inMsg, AgentDispatchContext inContext, String telNoJun)
	{
		String opPackNm = "";
		// オプションを連結させる変数
		StringBuffer optionBuffer = new StringBuffer();
		// オプションパックプランコードを格納する
		List<String> opPackPlanCdList = new ArrayList<String>();
		// オプションサービス名を連結させた変数
		StringBuffer opBuffer = new StringBuffer();
		// サブオプションサービス名を連結させた変数
		StringBuffer sbBuffer = new StringBuffer();
		// オプションパックフラグ
		boolean opPacFlg = false;
		// 電話契約付加情報のサイズ分回す
		for (int i = 0; i < telKeiFukaList.size(); i++)
		{
			if (telNoJun.equals(telKeiFukaList.get(i).get("TELNO_JUN")))
			{
				opPacFlg = true;
				// オプションパックを取得する
				List<Map<String, String>> telOpPacList = getTelOpPac(inMsg, inContext, telKeiFukaList, i);
				if(!telOpPacList.isEmpty())
				{
					opPackNm = telOpPacList.get(0).get("WRIB_SVC_NM");
					for (Map<String, String> telOpPac : telOpPacList)
					{
						opPackPlanCdList.add(telOpPac.get("PPLAN_CD"));
					}
					break;
				}
			}
		}
		if (!opPacFlg)
		{
			return null;
		}
		
		// オプション名の編集
//		for (Map<String, String> svcKeiTelKeiFuka : telKeiFukaList)
		for (int i = 0; i < telKeiFukaList.size(); i++)
		{
			if (telNoJun.equals(telKeiFukaList.get(i).get("TELNO_JUN")))
			{
				String pplanCdOp = telKeiFukaList.get(i).get("PPLAN_CD_OP");
				if (!JKKStringUtil.isNullBlank(pplanCdOp))
				{
					// 取得したオプション名を連結する
					if (!opPackPlanCdList.contains(pplanCdOp) && !telKeiFukaList.get(i).get("OP_SVC_NM").isEmpty())
					{
						opBuffer.append(telKeiFukaList.get(i).get("OP_SVC_NM")).append("　");
					}
				}
				String pplanCdSbOp = telKeiFukaList.get(i).get("PPLAN_CD_SBOP");
				if (!JKKStringUtil.isNullBlank(pplanCdSbOp))
				{
					// 取得したサブオプション名を連結する
					if (!opPackPlanCdList.contains(pplanCdSbOp) && !telKeiFukaList.get(i).get("SBOP_SVC_NM").isEmpty())
					{
						sbBuffer.append(telKeiFukaList.get(i).get("SBOP_SVC_NM")).append("　");
					}
				}
			}
		}
		// 連結したオプション名の末尾全角空白を削除する
		String opString = opBuffer.toString();
		// 連結したサブオプション名の末尾全角空白を削除する
		String sbString = sbBuffer.toString();
		
		// オプション名、サブオプション名、オプションパック名を連結する、存在しない場合は連結しない
		if (!opString.isEmpty())
		{
			optionBuffer.append(opString);
		}
		if (!sbString.isEmpty())
		{
			optionBuffer.append(sbString);
		}
		if (!opPackNm.isEmpty())
		{
			optionBuffer.append(opPackNm);
		}
		// オプションの型変換
		String option = optionBuffer.toString().replaceAll("　+$", "");
		if (option == null || ("").equals(option))
		{
			return "";
		}
		
		return option;
	}

	/**
	 * 電話オプションパックを取得します
	 * <br>
	 * @param inMsg 入力値が格納されたCBSMsg
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param telKeiFukaList 電話契約付加情報
	 * @param i 配列の何番目を見ているか受け取る
	 * @return 電話オプションパック
	 */
	private List<Map<String, String>> getTelOpPac(CAANMsg inMsg, AgentDispatchContext inContext, List<Map<String, String>> telKeiFukaList,
			int i)
	{
		// コネクション
		Connection con = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		// 電話オプションパック情報
		List<Map<String, String>> telOpPacList = new ArrayList<Map<String, String>>();

		try
		{
			// コネクション取得
			con = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			// 運用日付を取得
			String opeDate = JKKModelCommon.getOpeDate(inMsg);
			
			// 電話オプション有無判定SQL作成
			StringBuffer sql_Buff = new StringBuffer();
			
			sql_Buff.append(" SELECT  ")
			.append("     KK0481.SVC_KEI_UCWK_NO, ")
			.append("     KK0451.WRIB_SVC_CD, ")
			.append("     KK0841.WRIB_SVC_NM, ")
			.append("     KK2071.PPLAN_CD ")
			.append(" FROM ")
			.append("     KK_T_WRISVC_TG_KEI KK0481 ")
			.append(" INNER JOIN ")
			.append("     KK_T_WRIB_SVC_KEI KK0451 ")
			.append(" ON  KK0481.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO ")
			.append(" INNER JOIN ")
			.append("     KK_M_WRIB_SVC KK0841 ")
			.append(" ON  KK0841.WRIB_SVC_CD = KK0451.WRIB_SVC_CD ")
			.append(" INNER JOIN ")
			.append("     KK_M_WRISVC_KOSE KK2071 ")
			.append(" ON  KK2071.WRIB_SVC_CD = KK0451.WRIB_SVC_CD ")
			.append(" WHERE ")
			.append("     KK0481.SVC_KEI_UCWK_NO = '").append(telKeiFukaList.get(i).get("SVC_KEI_UCWK_NO")).append("'")
			.append(" AND KK0481.GENE_ADD_DTM = ")
			.append("         (SELECT MAX(KK0481_GENE.GENE_ADD_DTM) AS KK0481_MAX ")
			.append("          FROM   KK_T_WRISVC_TG_KEI KK0481_GENE ")
			.append("          WHERE  KK0481_GENE.WRIB_SVC_KEI_NO = KK0481.WRIB_SVC_KEI_NO ")
			.append("          AND    KK0481_GENE.WRIB_SVC_TRGT_KEI_NO = KK0481.WRIB_SVC_TRGT_KEI_NO ")
// ANK-3478-03-00 MOD START
//			.append("          AND    '").append(opeDate).append("'")
//			.append(" BETWEEN KK0481_GENE.WRISVC_TG_KEI_TSTAYMD AND KK0481_GENE.WRISVC_TG_KEI_TENDYMD ")
			.append("          AND    KK0481_GENE.MK_FLG = '0') ")
			.append(" AND '").append(opeDate).append("'")
			.append("     BETWEEN KK0481.WRISVC_TG_KEI_TSTAYMD AND KK0481.WRISVC_TG_KEI_TENDYMD ")
// ANK-3478-03-00 MOD END
			.append(" AND KK0451.WRIB_SVC_CD IN ('W00000007', 'W00000008') ")
			.append(" AND KK0451.WRIB_SVC_KEI_STAT IN ('010', '100')  ")
			.append(" AND KK0451.RSV_APLY_YMD || KK0451.GENE_ADD_DTM = ")
			.append("         (SELECT MAX(KK0451_GENE.RSV_APLY_YMD || KK0451_GENE.GENE_ADD_DTM) AS KK0451_MAX ")
			.append("          FROM   KK_T_WRIB_SVC_KEI KK0451_GENE ")
			.append("          WHERE  KK0451_GENE.WRIB_SVC_KEI_NO = KK0451.WRIB_SVC_KEI_NO ")
			.append("          AND    KK0451_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("          AND    KK0451_GENE.RSV_APLY_CD = '2' ")
			.append("          AND    KK0451_GENE.MK_FLG = '0') ")
			.append("          AND    '").append(opeDate).append("'").append("  BETWEEN KK0841.WRIB_SVC_TSTAYMD AND KK0841.WRIB_SVC_TENDYMD ")
			.append(" AND KK0841.RSV_APLY_YMD || KK0841.GENE_ADD_DTM = ")
			.append("         (SELECT MAX(KK0841_GENE.RSV_APLY_YMD || KK0841_GENE.GENE_ADD_DTM) AS KK0841_MAX ")
			.append("          FROM   KK_M_WRIB_SVC KK0841_GENE ")
			.append("          WHERE  KK0841_GENE.WRIB_SVC_CD = KK0841.WRIB_SVC_CD ")
			.append("          AND    KK0841_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("          AND    KK0841_GENE.MK_FLG = '0') ")
			.append("          AND    '").append(opeDate).append("'").append(" BETWEEN KK2071.WRISVC_KOSE_TSTAYMD AND KK2071.WRISVC_KOSE_TENDYMD ")
			.append(" AND KK2071.RSV_APLY_YMD || KK2071.GENE_ADD_DTM = ")
			.append("         (SELECT MAX(KK2071_GENE.RSV_APLY_YMD || KK2071_GENE.GENE_ADD_DTM) ")
			.append("          FROM   KK_M_WRISVC_KOSE KK2071_GENE ")
			.append("          WHERE  KK2071.WRISVC_KOSE_NO = KK2071_GENE.WRISVC_KOSE_NO ")
			.append("          AND    KK2071_GENE.RSV_APLY_YMD <= '").append(opeDate).append("'")
			.append("          AND    KK2071_GENE.MK_FLG = '0') ");
			
			// prepareStatementにSQL文をセット
			pstmt = con.prepareStatement(sql_Buff.toString());
			
			// ログの出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			while (rsltQuery.next())
			{
				
				Map<String, String> telOpPacMap = new HashMap<String, String>();
				telOpPacMap.put("SVC_KEI_UCWK_NO", rsltQuery.getString("SVC_KEI_UCWK_NO"));
				telOpPacMap.put("WRIB_SVC_CD", rsltQuery.getString("WRIB_SVC_CD"));
				telOpPacMap.put("WRIB_SVC_NM", rsltQuery.getString("WRIB_SVC_NM"));
				telOpPacMap.put("PPLAN_CD", rsltQuery.getString("PPLAN_CD"));
				
				telOpPacList.add(telOpPacMap);
			}
		}
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			closeDB(inMsg, con, pstmt, rsltQuery);
		}
		return telOpPacList;
	}
	
	/**
	 * テレビ契約を設定します。
	 * <br>
	 * @param svcKeiTv サービス契約(テレビ)
	 * @param inMsg 入力項目が格納されたCVSMsg
	 * @param inContext Agentから渡されたAgenDispatchContext
	 * @return サービス契約(テレビ).料金コースコードが"A38",または"A39"の場合："1"
	 *          サービス契約(テレビ).料金コースコードが"A37"(地デジ・BSコース),かつスターチャンネルセット割引が無の場合："2"
	 *          サービス契約(テレビ).料金コースコードが"A37"(地デジ・BSコース),かつスターチャンネルセット割引が有の場合："3"
	 *          サービス契約(テレビ)が取得できていない場合："0"
	 */
	private String setTvKei(Map<String, String> svcKeiTv, CAANMsg inMsg, AgentDispatchContext inContext)
	{
		if (JKKStrConst.CD00134_A38.equals(svcKeiTv.get("PCRS_CD")) || JKKStrConst.CD00134_TV_HD.equals(svcKeiTv.get("PCRS_CD")))
		{
			return "1";
		}
		else if (JKKStrConst.CD00134_A37.equals(svcKeiTv.get("PCRS_CD")))
		{
			if (!getStarChannelWari(svcKeiTv, inMsg, inContext))
			{
				return "2";
			}
			else
			{
				return "3";
			}
		}
		else
		{
			return "0";
		}
	}

	/**
	 * STB種別を取得します。
	 * <br>
	 * @param svcKeiTvKeiFukaList テレビ契約付加情報
	 * @param i 配列の何番目か受け取る引数
	 * @return STB種別
	 */
	private String getStbSbt(List<Map<String, String>> svcKeiTvKeiFukaList, int i)
	{
		if (svcKeiTvKeiFukaList.size() > i)
		{
			return svcKeiTvKeiFukaList.get(i).get("STB_SBT");
		}

		return null;
	}
	
	/**
	 * STB種別名称を取得します。
	 * <br>
	 * @param svcKeiTvKeiFukaList テレビ契約付加情報
	 * @param i 配列の何番目か受け取る変数
	 * @return STB種別名称
	 */
	private String getStbSbtNm(List<Map<String, String>> svcKeiTvKeiFukaList, int i)
	{
		if (svcKeiTvKeiFukaList.size() > i)
		{
			return svcKeiTvKeiFukaList.get(i).get("STB_SBT_NM");
		}
		return null;
	}
	
	/**
	 * テレビコースを取得します。
	 * <br>
	 * @param svcKeiTvKeiFukaList テレビ契約付加情報
	 * @param i 配列の何番目か受け取る変数
	 * @return テレビコース
	 */
	private String getTvCourse(List<Map<String, String>> svcKeiTvKeiFukaList, int i)
	{
		if (svcKeiTvKeiFukaList.size() > i)
		{
			return svcKeiTvKeiFukaList.get(i).get("TV_COURSE");
		}
		return null;
	}
	
	/**
	 * テレビコース名称を取得します。
	 * <br>
	 * @param svcKeiTvKeiFukaList テレビ契約付加情報
	 * @param i 配列の何番目か受け取る変数
	 * @return テレビコース名称
	 */
	private String getTvCourseNm(List<Map<String, String>> svcKeiTvKeiFukaList, int i)
	{
		if (svcKeiTvKeiFukaList.size() > i)
		{
			return svcKeiTvKeiFukaList.get(i).get("TV_COURSE_NM");
		}
		return null;
	}
	
	

	/**
	 * テレビガイド誌冊数の設定内容を取得します。
	 * <br>
	 * @param tvKeiFukaTvGuideOpMap テレビガイド誌オプション
	 * @param tvKei テレビ契約
	 * @return オプションサービス契約<TV>.ケーブルガイド申込数
	 *          テレビ契約ありの場合:ケーブルガイド申込数または"0"
	 *          テレビ契約なしの場合:null
	 */
	// IT1-2018-0000109 MOD START
//	private String setTvGuideShi(Map<String, String> tvKeiFukaTvGuideOpMap)
	private String setTvGuideShi(Map<String, String> tvKeiFukaTvGuideOpMap, String tvKei)
	// IT1-2018-0000109 MOD END
	{
		// IT1-2018-0000109 MOD START
//		if (tvKeiFukaTvGuideOpMap.containsKey("CABLE_GUIDE_MSKM_CNT"))
//		{
//			return tvKeiFukaTvGuideOpMap.get("CABLE_GUIDE_MSKM_CNT");
//		}
//		return "0";

		// テレビ契約なしの場合はnull
		if ("0".equals(tvKei))
		{
			return null;
		}
		// テレビ契約ありの場合はオプションサービスを確認
		if (tvKeiFukaTvGuideOpMap.containsKey("CABLE_GUIDE_MSKM_CNT") 
				&& !JKKStringUtil.isNullBlank(tvKeiFukaTvGuideOpMap.get("CABLE_GUIDE_MSKM_CNT")))
		{
			return tvKeiFukaTvGuideOpMap.get("CABLE_GUIDE_MSKM_CNT");
		}
		return "0";
		// IT1-2018-0000109 MOD END
	}
	
	/**
	 * 工事進捗を取得します。
	 * <br>
	 * @param kojiInfoMap 工事情報
	 * @param svcKeiNet サービス契約（ネット）
	 * @return 工事工程進捗.工程ご利用開始コードが１または２の場合："008"
	 *          工事工程進捗.工程お客様宅内工事コードが１または２の場合:"007"
	 *          工事工程進捗.工程光ケーブル線路工事コードが１または２の場合:"006"
	 *          工事工程進捗.工程宅内調査承諾書受領コードが１または２の場合:"005"
	 *          工事工程進捗.工程お客様宅内調査コードが１または２の場合："003"
	 *          工事工程進捗.工程お客様宅内調査日程調査コードが１または２の場合："002"
	 *          工事工程進捗が存在しない、進捗状況がキャンセルとなっている。また工程光ルート調査設計コード/工程各種許可申請コードが１の場合:null
	 */
	private String getKojiStep(Map<String, String> kojiInfoMap, Map<String, String> svcKeiNet)
	{
		String kojiStepString = null;
		if (JKKStrConst.CD00037_SVCTK_CHU.compareTo(svcKeiNet.get("SVC_KEI_STAT")) > 0)
		{
			if (!kojiInfoMap.isEmpty())
			{
				if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_USE_STA_CD")) || SAGYO_KANRYO.equals(kojiInfoMap.get("STEP_USE_STA_CD")))
				{
					return GORIYO_KAISHI;
				}
				// OM-2019-0000059 MOD START
//				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_CUST_TAKNI_KOJI_CD")))
//				{
//					return OKYAKUSAMA_TAKUNAIKOJI;
//				}
//				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_HCABLE_LINE_KOJI_CD")))
//				{
//					return HIKARIKANSENKOJI;
//				}
//				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_TAKCHO_SDAKS_RCP_CD")))
//				{
//					return SHODAKUSHO_JURYO;
//				}
//				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_CUST_TAKCHO_CD")))
//				{
//					return OKYAKUSAMA_TAKUNAICHOSA;
//				}
//				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_CUST_TAKCHO_NTADJ_CD")))
//				{
//					return OKYAKUSAMA_TAKUNAI_CHOSEI;
//				}
				
				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_CUST_TAKNI_KOJI_CD")) || SAGYO_KANRYO.equals(kojiInfoMap.get("STEP_CUST_TAKNI_KOJI_CD")))
				{
					return OKYAKUSAMA_TAKUNAIKOJI;
				}
				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_HCABLE_LINE_KOJI_CD")) || SAGYO_KANRYO.equals(kojiInfoMap.get("STEP_HCABLE_LINE_KOJI_CD")))
				{
					return HIKARIKANSENKOJI;
				}
				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_TAKCHO_SDAKS_RCP_CD")) || SAGYO_KANRYO.equals(kojiInfoMap.get("STEP_TAKCHO_SDAKS_RCP_CD")))
				{
					return SHODAKUSHO_JURYO;
				}
				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_CUST_TAKCHO_CD")) || SAGYO_KANRYO.equals(kojiInfoMap.get("STEP_CUST_TAKCHO_CD")))
				{
					return OKYAKUSAMA_TAKUNAICHOSA;
				}
				else if (SAGYO_CHU.equals(kojiInfoMap.get("STEP_CUST_TAKCHO_NTADJ_CD")) || SAGYO_KANRYO.equals(kojiInfoMap.get("STEP_CUST_TAKCHO_NTADJ_CD")))
				{
					return OKYAKUSAMA_TAKUNAI_CHOSEI;
				}
				
				// OM-2019-0000059 MOD END
			}
		}
		else
		{
			return GORIYO_KAISHI;
		}
		return kojiStepString;
	}
	
	/**
	 * 工事予定日を取得します。
	 * <br>
	 * @param kojiInfoMap 工事情報
	 * @return 工事工程進捗.宅内工事予定年月日に年月日が存在した場合:宅内工事予定年月日
	 *          工事工程進捗.宅内工事予定年月日に年月日が存在しない場合:null
	 */
	private String getKojiSchedule(Map<String, String> kojiInfoMap)
	{
		if (checkDate(kojiInfoMap.get("TAKNIKJ_RSV_YMD"), 8))
		{
			return kojiInfoMap.get("TAKNIKJ_RSV_YMD");
		}
		else
		{
			return null;
		}
	}



	/**
	 * DB関連オブジェクトの解放処理を行います。
	 * <br>
	 * @param inMsg 入力項目で取得した結果を格納したCBSMsg
	 * @param con Connectionオブジェクト
	 * @param pstmt PreparedStatementオブジェクト
	 * @param rsltQuery ResultSetオブジェクト
	 */
	private void closeDB(CAANMsg inMsg, Connection con, PreparedStatement pstmt, ResultSet rsltQuery)
	{
		// 資源の解放
		try 
		{
			if (rsltQuery != null)
			{
				rsltQuery.close();
			}
			if (pstmt != null)
			{
				pstmt.close();
			}
			if (con != null)
			{
				closeConnection(con);
			}
		}
		catch (SQLException e)
		{
			inMsg.set(EKK0081B041CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	 * オブジェクトに値が設定されているか判定します。
	 * <br>
	 * @param arg0 判定するオブジェクト
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	protected static boolean isNull(Object arg0) 
	{
		if (arg0 == null) 
		{
			return true;
		}

		return 0 == arg0.toString().length();
	}
	
	/**
     * 日付の妥当性チェックを行います。
     * <br>
     * @param date yyyyMMddもしくはyyyyMM形式の日付
     * @param length チェック対象の日付の桁数
     * @return boolean
     */
	private static boolean checkDate(String date, int length) 
	{
		// 引数チェック
		if(isNull(date)) 
		{
			return false;
		}

		try 
		{
			int yyyy = Integer.parseInt(date.substring(0, 4));

			int mm = Integer.parseInt(date.substring(4, 6));

			int dd = 1;

			if (length == 8) 
			{
				dd = Integer.parseInt(date.substring(6, 8));
			}

			// 月は 0 から始まる。（0:１月 となる。）
			Calendar cl = new GregorianCalendar(yyyy, mm - 1, dd);

			// カレンダークラスにより、日付が調整されてしまっている場合は、エラーである。
			if ((cl.get(Calendar.YEAR) != yyyy) 
					|| ((cl.get(Calendar.MONTH) + 1) != mm) 
					|| (cl.get(Calendar.DATE) != dd)) 
			{
				return false;
			}
			else 
			{
				return true;
			}
		}
		catch (NumberFormatException e) 
		{
			return false;
		}
	}
}