/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKCoursechgTchiMailSend
*	ソースファイル名	：JBSbatKKCoursechgTchiMailSend.java
*	作成者				：富士通　
*	作成日				：2012年03月01日
*＜機能概要＞
*　コース変更通知メール送信部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/01   富士通		新規作成
*	v5.00.00	2013/01/09   藤本		【ANK-1273-00-00】eoモバイル3G　eo64移行プランの乗換対応
*	v5.00.00	2013/02/21   藤本		【ANK-1393-00-00】メール文言変更対応
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.util.table.JBSbatCC_M_MAIL;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_M_PPLAN;
import eo.business.util.table.JBSbatKK_T_IDO_RSV;
import eo.business.util.table.JBSbatKK_T_OPSVKEI_ISP;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKCoursechgTchiMailSend extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(サービス契約＜ｅｏモバイル＞)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI_EOMOBA = "KK_T_SVC_KEI_EOMOBA";

	/** テーブル(オプションサービス契約＜ＩＳＰ＞)*/
	private static final String D_TBL_NAME_KK_T_OPSVKEI_ISP = "KK_T_OPSVKEI_ISP";

	/** SQL定義キー(KK_INSERT_003)*/
	private static final String KK_T_SVC_KEI_KK_INSERT_003 = "KK_INSERT_003";

	/** SQL定義キー(KK_INSERT_002)*/
	private static final String KK_T_SVC_KEI_EOMOBA_KK_INSERT_002 = "KK_INSERT_002";

	/** SQL定義キー(KK_SELECT_011)*/
	private static final String KK_T_OPSVKEI_ISP_KK_SELECT_011 = "KK_SELECT_011";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(サービス契約＜ｅｏモバイル＞)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_EOMOBA = null;

	/** テーブルアクセスクラス(オプションサービス契約＜ＩＳＰ＞)*/
	private JBSbatSQLAccess db_KK_T_OPSVKEI_ISP = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	// TAI-2012-0000090 2012/09/21 ADD START
	/** テーブル(サービス契約排他制御)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_EXC_CTRL = "KK_T_SVKEI_EXC_CTRL";
	
	/** テーブルアクセスクラス(サービス契約排他制御)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_EXC_CTRL = null;
	
	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_T_SVKEI_EXC_CTRL_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_UPDATE_001)*/
	private static final String KK_T_SVKEI_EXC_CTRL_KK_UPDATE_001 = "KK_UPDATE_001";
	// TAI-2012-0000090 2012/09/21 ADD END

	/** 単項目チェック項目マップ */
	private HashMap<String, String> singleChkKmkMap = null;

	/** 送信予定年月日時分秒設定キー */
	private static final String MAIL_SEND_RSV_DTM = "MAIL_SEND_RSV_DTM";

	/** メールの送信パターン(ﾃﾞｨﾚｲﾄ) */
	private static final String MAIL_SEND_PATTERN_CD_02 = "02";

	/** メールの送信パターンコード設定キー */
	private static final String MAIL_SEND_PATTERN_CD = "MAIL_SEND_PATTERN_CD";

	/** メールの送信先アドレス設定キー */
	private static final String MLAD_TO = "MLAD_TO";

	/** メールの送信先アドレス表示名設定キー */
	private static final String MLAD_TO_NM = "MLAD_TO_NM";

	/** 本文に埋め込む非定型な置換文字列設定キー*/
	private static final String TEXT_HTK_CKAN_MOJI = "TEXT_HTK_CKAN_MOJI";

	/** コース変更通知メールコード*/
	private static final String COURSECHG_MAIL_CODE = "KKM1000003";

	/** ご利用開始年月日 */
	private String useStaymd = null;

	// ANK-1393-00-00 メール文言変更対応 2013/02/21 START
	/** ご利用開始年 */
	private String useStaYear = null;
	// ANK-1393-00-00 メール文言変更対応 2013/02/21 END

	/** ご利用開始月 */
	private String useStaGetu = null;

	// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/09 START
	/** 業務パラメータID(eo64移行乗換プラン) */
	private static final String ID_PPLAN_EO64  = "KK_PPLAN_EO64";

	/** 業務パラメータ設定値 eo64乗換移行プランの区切り文字 */
	private static final String PPLAN_EO64_LIST_SEP = ",";

	/** 業務パラメータ設定値 eo64乗換移行プランの変更前・変更後料金プランコードの区切り文字 */
	private static final String PPLAN_EO64_BF_AF_SEP = ":";

	/** eo64移行乗換プランのリスト */
	private List<String> eo64PplanList;
	// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/09 END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_SVC_KEI_EOMOBA = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_EOMOBA);
		db_KK_T_OPSVKEI_ISP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OPSVKEI_ISP);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// TAI-2012-0000090 2012/09/21 ADD START
		// サービス契約排他制御のDBアクセスクラスを作成
		db_KK_T_SVKEI_EXC_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_EXC_CTRL);
		// TAI-2012-0000090 2012/09/21 ADD END

		useStaymd = JBSbatDateUtil.adjustDate(super.opeDate, 1);					// ご利用開始年月日（運用日の翌日）
		// ANK-1393-00-00 メール文言変更対応 2013/02/21 START
		useStaYear = useStaymd.substring(0, 4);	// ご利用開始年
		// ANK-1393-00-00 メール文言変更対応 2013/02/21 END
		useStaGetu = String.valueOf(Integer.parseInt(useStaymd.substring(4, 6)));	// ご利用開始月
		batchUserId = super.batchUserId;											// バッチ処理ユーザ

		// 単項目チェック用Map生成
		singleChkKmkMap = new HashMap<String, String>();
		singleChkKmkMap.put("DB-KK_T_SVC_KEI-.SYSID", "サービス契約.ＳＹＳＩＤに紐付くお客様.お客様名");
		singleChkKmkMap.put("DB-KK_T_SVC_KEI-.PPLAN_CD", "サービス契約.料金プランコードに紐付く料金プラン.料金プラン名");
		singleChkKmkMap.put("DB-KK_T_OPSVKEI_ISP-KK_SELECT_011.MLAD", 
				"サービス契約.サービス契約番号に紐付くサービスオプション契約＜ＩＳＰ＞.メールアドレス");

		// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/04 START
		// 業務パラメータ管理からeo64移行乗換プランを取得
		eo64PplanList = getEo64PplanList();
		// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/04 END

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// メール送信共通部品パタメータ格納
		HashMap<String, Object> map = new HashMap<String, Object>();

		// メッセージ部品のパラメータ
		HashMap<String, String> itemValueMap1 = new HashMap<String, String>();

		// 変数定義
		String svcKeiNo   = null;	// サービス契約番号
		String geneAddDtm = null;	// 世代登録年月日時分秒
		String sysDateTime = null;	// 処理日時分秒を取得
		// ANK-1393-00-00 メール文言変更対応 2013/02/21 START
//		String[] htk_cakn_moji = new String[3];		// メール本文非定型文字格納
		String[] htk_cakn_moji = new String[4];		// メール本文非定型文字格納
		// ANK-1393-00-00 メール文言変更対応 2013/02/21 END
		String[] mail_to = new String[1];			// メール送信先アドレス
		String[] mail_toNm = new String[1];			// メール送信先アドレス表示名
		boolean result = false;					// レコード存在チェック追加

		// 処理対象レコード情報取得
		svcKeiNo   = inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);	// サービス契約番号
		geneAddDtm = inMap.getString(JBSbatKK_T_SVC_KEI.GENE_ADD_DTM);	// 世代登録年月日時分秒

		// 処理日時分秒を取得
		sysDateTime = JCCBatCommon.getSysDateTimeStamp();

		// メール送信共通部品処理結果格納
		HashMap<String, Object> result_map = null;

		// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/09 START
		// eo64移行プラン乗換対象チェック
		result = checkEo64PplanNorikae(inMap.getMap(), eo64PplanList);

		// eo64移行プラン乗換対象のコース変更の場合、処理をスキップする。
		if (result)
		{
			// 正常終了(警告もなし)とするため、エラーフラグは立てない
			return null;
		}
		// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/09 END

		// お客様名と料金プラン名の必須チェック
		result = isSingleCheckKK_T_SVC_KEI_KK_SELECT_141(inMap.getMap(), singleChkKmkMap);

		// 必須チェックエラーの場合、エラーとして処理をスキップする。
		if(result  ==  false)
		{
			super.commonItem.setErrFlg(true);	// 処理をスキップ
			return null;
		}
		
		// 送信先メールアドレスを取得
		Object[] whereParam1 = {
				svcKeiNo,
				useStaymd
			};
		executeKK_T_OPSVKEI_ISP_KK_SELECT_011(whereParam1);
		JBSbatCommonDBInterface opsvkeiIspMap1 = db_KK_T_OPSVKEI_ISP.selectNext();

		// オプションサービス契約レコード存在チェック
		itemValueMap1.put(JBSbatKK_T_SVC_KEI.SVC_KEI_NO, svcKeiNo);	// サービス契約番号の設定
		result = isExistCheckKK_T_OPSVKEI_ISP_KK_SELECT_011(opsvkeiIspMap1, itemValueMap1);

		// 存在しない場合、エラーとして処理をスキップする。
		if(result  ==  false)
		{
			super.commonItem.setErrFlg(true);	// 処理をスキップ
			return null;
		}

		// メールアドレス必須チェック
		result = isSingleCheckKK_T_OPSVKEI_ISP_KK_SELECT_011(opsvkeiIspMap1.getMap(), singleChkKmkMap);

		// 必須チェックエラーの場合、エラーとして処理をスキップする。
		if(result  ==  false)
		{
			super.commonItem.setErrFlg(true);	// 処理をスキップ
			return null;
		}
		// 送信予定年月日時分秒の設定
		map.put(MAIL_SEND_RSV_DTM, sysDateTime);

		// メール送信パターンの設定
		map.put(MAIL_SEND_PATTERN_CD, MAIL_SEND_PATTERN_CD_02);

		// メールコードの設定
		map.put(JBSbatCC_M_MAIL.MAIL_CD, COURSECHG_MAIL_CODE);

		// メール送信先アドレス（TO）の設定。
		mail_to[0] = opsvkeiIspMap1.getString(JBSbatKK_T_OPSVKEI_ISP.MLAD);
		map.put(MLAD_TO, mail_to);

		// メール送信先アドレス表示名（TO）の設定。＜お客様名＞
		mail_toNm[0] = inMap.getString(JBSbatCK_T_CUST.CUST_NM);
		map.put(MLAD_TO_NM, mail_toNm);

		// メール本文非定型部１（お客様名）
		htk_cakn_moji[0] = inMap.getString(JBSbatCK_T_CUST.CUST_NM);

		// メール本文非定型部２（料金プラン名）
		htk_cakn_moji[1] = (String)inMap.get(JBSbatKK_M_PPLAN.PPLAN_NM);

		// ANK-1393-00-00 メール文言変更対応 2013/02/21 START
		// メール本文非定型部３（ご利用開始年）
		htk_cakn_moji[2] = useStaYear;

		// メール本文非定型部４（ご利用開始月）
//		htk_cakn_moji[2] = useStaGetu;
		htk_cakn_moji[3] = useStaGetu;
		// ANK-1393-00-00 メール文言変更対応 2013/02/21 END

		// 置換文字列の設定
		map.put(TEXT_HTK_CKAN_MOJI, htk_cakn_moji);

		// メール送信情報格納処理の呼び出し
		result_map = mailSenfExecute(commonItem, map);

		// TAI-2012-0000090 2012/09/21 ADD START
		// サービス契約排他制御レコードロック
		executeKK_T_SVKEI_EXC_CTRL_KK_SELECT_001(new Object[]{svcKeiNo});
		JBSbatCommonDBInterface svkeiExcCtrlMap = db_KK_T_SVKEI_EXC_CTRL.selectNext();
		if(svkeiExcCtrlMap != null)
		{
		// TAI-2012-0000090 2012/09/21 ADD END
			// サービス契約＜ｅｏモバイル＞のコース変更通知メール作成年月日更新
			// 履歴管理のためINSERT処理
			Object[] whereParam2 = {
					sysDateTime, 		// 世代登録年月日時分秒
					super.opeDate,		// コース変更通知メール作成年月日
					svcKeiNo,			// サービス契約番号（取得元）
					geneAddDtm			// 世代登録年月日時分秒（取得元）
				};
			executeKK_T_SVC_KEI_EOMOBA_KK_INSERT_002(whereParam2);
	
			// サービス契約＜ｅｏモバイル＞のコース変更通知メール作成年月日更新
			// 履歴管理のためINSERT処理
			Object[] whereParam3 = {
					sysDateTime, 		// 世代登録年月日時分秒
					svcKeiNo,			// サービス契約番号（取得元）
					geneAddDtm			// 世代登録年月日時分秒（取得元）
				};
			executeKK_T_SVC_KEI_KK_INSERT_003(whereParam3);
			
		// TAI-2012-0000090 2012/09/21 ADD START
			// サービス契約排他制御の最終更新年月日時分秒を更新
			Object[] svkeiExcCtrlParam = {
					sysDateTime,		// 最終更新年月日時分秒
					sysDateTime,		// 更新年月日時分秒
					super.batchUserId,	// 更新オペレータアカウント
					svcKeiNo			// サービス契約番号
			};
			executeKK_T_SVKEI_EXC_CTRL_KK_UPDATE_001(svkeiExcCtrlParam);
		}
		// TAI-2012-0000090 2012/09/21 ADD END

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_KK_T_SVC_KEI_EOMOBA.close();
		db_KK_T_OPSVKEI_ISP.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		// TAI-2012-0000090 2012/09/21 ADD START
		db_KK_T_SVKEI_EXC_CTRL.close();
		// TAI-2012-0000090 2012/09/21 ADD END
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 *入力情報（サービス契約）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 DB-KK_T_SVC_KEI-.SYSID			サービス契約.ＳＹＳＩＤ
	 *			 DB-KK_T_SVC_KEI-.PPLAN_CD			サービス契約.料金プランコード
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKK_T_SVC_KEI_KK_SELECT_141(HashMap rsMap, HashMap<String, String> itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// お客様名項目チェック
		strValue = (String)rsMap.get("CUST_NM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0230TW", new String[]{
															(String)itemvalueMap.get("DB-KK_T_SVC_KEI-.SYSID")});
			return false;
		}

		// 料金プラン名項目チェック
		strValue = (String)rsMap.get("PPLAN_NM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0230TW", new String[]{
															(String)itemvalueMap.get("DB-KK_T_SVC_KEI-.PPLAN_CD")});
			return false;
		}

		return true;
	}

	/**
	 * SQLKEY(KK_INSERT_003)で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_INSERT_003(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.executeBySqlDefine(paramList, KK_T_SVC_KEI_KK_INSERT_003);
	}

	/**
	 * SQLKEY(KK_INSERT_002)で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_EOMOBA_KK_INSERT_002(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_EOMOBA.executeBySqlDefine(paramList, KK_T_SVC_KEI_EOMOBA_KK_INSERT_002);
	}

	/**
	 * SQLKEY(KK_SELECT_011)で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_OPSVKEI_ISP_KK_SELECT_011(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_OPSVKEI_ISP.selectBySqlDefine(paramList, KK_T_OPSVKEI_ISP_KK_SELECT_011);
	}

	/**
	 *入力情報（オプションサービス契約＜ＩＳＰ＞）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 DB-KK_T_OPSVKEI_ISP-KK_SELECT_011.MLAD			オプションサービス契約＜ＩＳＰ＞.メールアドレス
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKK_T_OPSVKEI_ISP_KK_SELECT_011(HashMap rsMap, HashMap<String, String> itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// メールアドレス項目チェック
		strValue = (String)rsMap.get("MLAD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0230TW", new String[]{
															(String)itemvalueMap.get("DB-KK_T_OPSVKEI_ISP-KK_SELECT_011.MLAD")});
			return false;
		}

		return true;
	}

	/**
	 *入力情報（オプションサービス契約＜ＩＳＰ＞）の存在チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.存在チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		nRsCnt:レコード数
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 * </pre>
	 * <p>
	 * @param rsDB レコードデータオブジェクト。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isExistCheckKK_T_OPSVKEI_ISP_KK_SELECT_011(JBSbatCommonDBInterface rsDB, HashMap<String, String> itemvalueMap)
	{
		int nRsCnt = 0;
		if(rsDB != null)
		{
			nRsCnt = 1;
		}
		// 存在チェックを行います(SQLKEY=KK_SELECT_011)
		if(nRsCnt != 1)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0210CE", new String[]{
															"オプションサービス契約＜ＩＳＰ＞", 
															"対象となるサービス契約番号：" + (String)itemvalueMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_NO) });
			return false;
		}
		return true;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	// TAI-2012-0000090 2012/09/21 ADD START
	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SEC.SVC_KEI_NO
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVKEI_EXC_CTRL_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_SVKEI_EXC_CTRL.selectBySqlDefine(paramList, KK_T_SVKEI_EXC_CTRL_KK_SELECT_001);
	}

	/**
	 * SQLKEY(KK_UPDATE_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_T_SVKEI_EXC_CTRL_KK_UPDATE_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_T_SVKEI_EXC_CTRL.executeBySqlDefine(paramList, KK_T_SVKEI_EXC_CTRL_KK_UPDATE_001);
	}
	// TAI-2012-0000090 2012/09/21 ADD END

	/**
	 * メール送信情報格納処理。<br>
	 * <p>
	 * @param commonItem バッチ共通電文
	 * @param map パラメータ情報格納
     * @return HashMap map 採番部品で発行した採番値をセットしたHashMap。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private HashMap<String, Object> mailSenfExecute(JBSbatCommonItem commonItem, HashMap<String, Object> map) throws Exception
	{
		// メール送信情報格納処理を呼び出します。
		HashMap<String, Object> result_map = JCCBatCommon.insertTMailSend(commonItem, map);

		return result_map;
	}

	// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/09 START
	/**
	 * 業務パラメータ管理からeo64移行乗換プランの業務パラメータ設定値を取得し、
	 * 区切り文字で区切った結果をリストに格納して返します。<br>
	 * 
	 * @return eo64移行乗換プランの変更前・変更後料金プランコードのリスト
	 * @throws Exception 業務パラメータ取得処理に失敗した場合
	 */
	private List<String> getEo64PplanList() throws Exception
	{
		// 業務パラメータ取得
		String pplanEo64SetteValue = JKKBatCommon.getWorkParamSetteValue(super.commonItem, ID_PPLAN_EO64);
		List<String> eo64PplanList = new ArrayList<String>();
		if (null != pplanEo64SetteValue && !"".equals(pplanEo64SetteValue))
		{
			eo64PplanList = Arrays.asList(pplanEo64SetteValue.split(PPLAN_EO64_LIST_SEP));
		}
		else
		{
			super.logPrint.printDebugLog("業務パラメータ管理にeo64移行乗換プラン(業務パラメータID："
				+ ID_PPLAN_EO64 + ")が設定されていません。");
		}

		return eo64PplanList;
	}

	/**
	 * eo64移行プラン乗換対象のコース変更かどうかのチェックを行います。<br>
	 * 
	 * @param inMap 入力電文
	 * @param eo64PplanList eo64移行乗換プランのリスト
	 * @return eo64移行プラン乗換対象のコース変更の場合はtrue、そうでない場合はfalse
	 * @throws Exception 業務パラメータ取得処理に失敗した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean checkEo64PplanNorikae(HashMap inMap, List<String>eo64PplanList) throws Exception
	{
		for (String eo64Pplan : eo64PplanList)
		{
			// 旧・新料金プランコードが、eo64移行プラン乗換対象の場合
			String[] eo64PplanBfAf = eo64Pplan.split(PPLAN_EO64_BF_AF_SEP);
			String oldPplanCd = (String)inMap.get(JBSbatKK_T_IDO_RSV.OLD_PPLAN_CD);
			String newPplanCd = (String)inMap.get(JBSbatKK_T_IDO_RSV.NEW_PPLAN_CD);
			if (null != eo64PplanBfAf && 2 == eo64PplanBfAf.length
				&& eo64PplanBfAf[0].equals(oldPplanCd)
				&& eo64PplanBfAf[1].equals(newPplanCd))
			{
				// 処理対象外
				super.logPrint.printDebugLog("eo64移行プラン乗換対象のコース変更のため処理対象外"
					+ " サービス契約番号[" + (String)inMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_NO) + "]"
					+ " 旧料金プランコード[" + oldPplanCd + "] 新料金プランコード[" + newPplanCd + "]");
				return true;
			}
		}

		// eo64移行プラン乗換対象のコース変更でない
		return false;
	}
	// ANK-1273-00-00 eoモバイル3G　eo64移行プランの乗換対応 2013/01/09 END
}
