/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKBndWdtOvrSendMl
*	ソースファイル名	：JBSbatKKBndWdtOvrSendMl.java
*	作成者				：富士通　
*	作成日				：2012年07月17日
*＜機能概要＞
*　帯域制御通信量超過通知メール作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2012/07/17   富士通		新規作成
*	v4.00		2012/12/22   FJ)近藤	IT1-2012-0002548 メールコード設定値誤り対応
*	v4.01		2013/01/18   FJ)砂川	【ST3-2013-0000101】置換文字の不具合修正
*	v4.02		2013/02/26   FJ)六車	【ANK-1393-00-00】メール文言変更対応
* 	v8.00		2014/02/19   FJ)山裾	【ANK-1876-00-00】帯域制御通信量超過通知メールの送信方法をメールプラットフォームから送信するように修正
* 	v8.01		2014/03/11   FJ)山裾	【IT1-2014-0000088】改行コードの変換をshlにて実装
* 	v10.00.00	2014/08/21   FJ)西面	【OM-2014-0002734】FTTH通信料超過実績検索キー変更
* 	v10.00.01	2014/08/22   FJ)西面	【OM-2014-0002734】料金コースコード、料金プランコードがnullの時の考慮
* 	v12.00.00	2015/02/26   FJ)岡田	【OM-2015-0000129】FTTH通信量超過通知の利用月を前月を取得
* 	v13.00.00	2015/04/22   FJ)藤田	【OM-2015-0000836】月初日は帯域制限を実施しない
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFE244;
import eo.business.util.file.JBSbatKKIFM207;
import eo.business.util.table.JBSbatCC_M_MAIL;
import eo.business.util.table.JBSbatKK_T_FTTH_TSRCK_JSK;
import eo.business.util.table.JBSbatKK_T_OPSVKEI_ISP;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEIUW_EOH_NET;
import eo.business.util.table.JBSbatZM_M_TCHI_MAIL_SENDS;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKBndWdtOvrSendMl 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_UCWK = "KK_T_SVC_KEI_UCWK";

	/** テーブル(オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_OP_SVC_KEI = "KK_T_OP_SVC_KEI";

	/** テーブル(ＦＴＴＨ通信量超過実績)*/
	private static final String D_TBL_NAME_KK_T_FTTH_TSRCK_JSK = "KK_T_FTTH_TSRCK_JSK";

	/** SQL定義キー(KK_SELECT_180)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_180 = "KK_SELECT_180";

	/** SQL定義キー(KK_SELECT_069)*/
	private static final String KK_T_SVC_KEI_UCWK_KK_SELECT_069 = "KK_SELECT_069";

	/** SQL定義キー(KK_SELECT_054)*/
	private static final String KK_T_OP_SVC_KEI_KK_SELECT_054 = "KK_SELECT_054";
	
// v10.00.00 2014/08/21 ADD START
	/** SQL定義キー(KK_SELECT_006)*/
	private static final String KK_T_FTTH_TSRCK_JSK_KK_SELECT_006 = "KK_SELECT_006";
// v10.00.00 2014/08/21 ADD END

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK = null;

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;

	/** テーブルアクセスクラス(ＦＴＴＨ通信量超過実績)*/
	private JBSbatSQLAccess db_KK_T_FTTH_TSRCK_JSK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** メールの送信パターン(ﾃﾞｨﾚｲﾄ) */
	private static final String MAIL_SEND_PATTERN_CD_02 = "02";
	
	// v4.00 2012/12/22 IT1-2012-0002548 MOD START
	/** メールコード 予告用 */
//	private static final String MAIL_CD_YKK = "KK00000001";
	private static final String MAIL_CD_YKK = "KKM1000007";
	
	/** メールコード 実施用 */
//	private static final String MAIL_CD_JSHI = "KK00000011";
	private static final String MAIL_CD_JSHI = "KKM1000008";
	// v4.00 2012/12/22 IT1-2012-0002548 MOD END
	
	/** 送信区分 予告通知 */
	private static final String SEND_KBN_YOKOKU = "1";
	
	/** 送信区分 実施通知 */
	private static final String SEND_KBN_JISHI = "2";
	
	/** ユースケースID 帯域制限実施 */
	private static final String USECASE_ID_KKSV0571 = "KKSV0571";
	
	/** CCタイトル サービスオーダ発行 */
	private static final String CC_TITLE_JKKHAKKOSODCC = "JKKHakkoSODCC";
	
	/** 処理区分 帯域制限実施 */
	private static final String SYORI_DIV_011 = "011";
	
	/** サービスIFのリターンコード(正常) */
	private static final String RETURN_CODE_SUCCESS = "0";
	
	// 2014/02/19 ANK-1876-00-00 Add Start
	/** 改行コード */
	private static final String LF  = "LF";
	/** テーブル(メール) */
	private static final String D_TBL_NAME_CC_M_MAIL = "CC_M_MAIL";
	/** SQL定義キー(KK_SELECT_004) */
	private static final String CC_M_MAIL_KK_SELECT_004 = "KK_SELECT_004";
	/** テーブルアクセスクラス(メール) */
	private JBSbatSQLAccess db_CC_M_MAIL = null;
	/** 帯域制御通信量超過通知ファイル出力件数 */
	private int BndWdtOvrTchiCount = 0;
	/** 帯域制御通信量超過通知（件数）ファイルパス */
	private String BndWdtOvrTchiCntFilePath = null;
	/** 帯域制御通信量超過通知（フラグ）ファイルパス */
	private String BndWdtOvrTchiFlgFilePath = null;
	/** 帯域制御通信量超過通知（件数）ファイル */
	private JBSbatOutputFileUtil BndWdtOvrTchiCntFile = null;
	/** 帯域制御通信量超過通知（フラグ）ファイル */
	private JBSbatOutputFileUtil BndWdtOvrTchiFlgFile = null;
	/** メール情報リスト */
	private ArrayList<HashMap<String, JBSbatCommonDBInterface>> mailInfList = new ArrayList<HashMap<String, JBSbatCommonDBInterface>>();
	// 2014/02/19 ANK-1876-00-00 Add 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_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		db_KK_T_OP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OP_SVC_KEI);
		db_KK_T_FTTH_TSRCK_JSK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_FTTH_TSRCK_JSK);

		// 2014/02/19 ANK-1876-00-00 Add Start
		db_CC_M_MAIL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_M_MAIL);
		// 2014/02/19 ANK-1876-00-00 Add End
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// 2014/02/19 ANK-1876-00-00 Add Start
		// フリー項目取得
		String[] mfreeItem = super.freeItem.split(";");
		// 帯域制御通信量超過通知（件数）ファイルパス格納
		this.BndWdtOvrTchiCntFilePath = mfreeItem[0];
		// 帯域制御通信量超過通知（フラグ）ファイルパス格納
		this.BndWdtOvrTchiFlgFilePath = mfreeItem[1];
		
		// 帯域制御通信量超過通知（件数）ファイル
		BndWdtOvrTchiCntFile = new JBSbatOutputFileUtil(this.BndWdtOvrTchiCntFilePath);
		BndWdtOvrTchiCntFile.setEncode(JKKBatConst.SJIS);
		BndWdtOvrTchiCntFile.setLine(LF);
		BndWdtOvrTchiCntFile.createWriter();
		
		// 帯域制御通信量超過通知（フラグ）ファイル
		BndWdtOvrTchiFlgFile = new JBSbatOutputFileUtil(this.BndWdtOvrTchiFlgFilePath);
		BndWdtOvrTchiFlgFile.setEncode(JKKBatConst.SJIS);
		BndWdtOvrTchiFlgFile.setLine(LF);
		BndWdtOvrTchiFlgFile.createWriter();

		// 2014/02/19 ANK-1876-00-00 Add End
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		if (!isSingleCheckKKIFM207_INF1(inMap.getMap(), getItemvalueMap()))
		{
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
			return null;
		}
		
		// システム日付
		String sysDateTime = JCCBatCommon.getSysDateTimeStamp();
		// バッチ運用日から年月日を分割して取得する
		String opeDateYear = super.opeDate.substring(0,4);
		String opeDateMonth = super.opeDate.substring(4,6);
		String opeDateDay = super.opeDate.substring(6,8);
		
		// サービス契約番号
		String svcKeiNo = inMap.getString(JBSbatKKIFM207.SVC_KEI_NO);
		// SYSID
		String sysId = inMap.getString(JBSbatKKIFM207.SYSID);
		// 契約者氏名
		String keiShaNm = inMap.getString(JBSbatKKIFM207.KEISHA_NM);
		// メール宛先
		String mlad = inMap.getString(JBSbatKKIFM207.MLAD);
		// 帯域制限通知通信量
		String tchiTshiryo = inMap.getString(JBSbatKKIFM207.TIKI_SGN_TCHI_TSHIRYO);
		// 送信区分
		String sendKbn = inMap.getString(JBSbatKKIFM207.SEND_KBN);
		
		// 2014/02/19 ANK-1876-00-00 Del Start
//		// -------------------------------------------------------
//		// 送信区分が予告通知もしくは実施通知であれば
//		// メール送信バッチ共通部品を呼び出す
//		// -------------------------------------------------------
//		if (SEND_KBN_YOKOKU.equals(sendKbn) || SEND_KBN_JISHI.equals(sendKbn))
//		{
//			insertTMailSend(sysDateTime, sendKbn, mlad, keiShaNm, opeDateYear, opeDateMonth, opeDateDay, tchiTshiryo);
//		}
		// 2014/02/19 ANK-1876-00-00 Del End
		
		// -------------------------------------------------------
		// 送信区分が実施通知であればＳＯＤ発行部品を呼び出す
		// -------------------------------------------------------
		// OM-2015-0000836 月初日は帯域制限を実施しない 2015/04/22 藤田 MOD START
//		if (SEND_KBN_JISHI.equals(sendKbn))
		if (SEND_KBN_JISHI.equals(sendKbn) && !"01".equals(opeDateDay))
		// OM-2015-0000836 月初日は帯域制限を実施しない 2015/04/22 藤田 MOD END
		{
			HashMap<String, Object> inputMap = new HashMap<String, Object>();
			
			// サービス契約番号
			inputMap.put("svc_kei_no", svcKeiNo);
			// SYSID
			inputMap.put("sysid", sysId);

			setSodParam(svcKeiNo, sysId, inputMap);

			// ユースケースIDを格納
			HashMap<String, Object> paramMap = new HashMap<String, Object>();
			paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID_KKSV0571);
			
			// サービスの処理結果の格納用MAP
			HashMap<String, Object> outputMap = new HashMap<String, Object>();

			JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);
			
			String returnCode = JCCBatchEsbInterface.getReturnCode(outputMap);
			if(!RETURN_CODE_SUCCESS.equals(returnCode))
			{//サービスがエラーを返した場合
				StringBuffer err_msg = new StringBuffer();
				err_msg.append("ステータスコード ：" + returnCode);
				super.logPrint.printBusinessErrorLog("EKKB0010CW", 
						new String[]{ err_msg.toString() });
			}
			
			StringBuilder sb = new StringBuilder();
			sb.append("サービス契約番号:").append(svcKeiNo).append("の帯域制御実施SODを発行しました。");
			commonItem.getLogPrint().printDebugLog(sb.toString());
		}
		
		// -------------------------------------------------------
		// FTTH通信量超過実績を更新する
		// -------------------------------------------------------
		updateFtthTsrckJsk(svcKeiNo, sendKbn);
		
		// 2014/02/19 ANK-1876-00-00 Mod Start
		// -------------------------------------------------------
		// 送信区分が予告通知もしくは実施通知であれば
		// メール送信バッチ共通部品を呼び出す
		// -------------------------------------------------------
		if (SEND_KBN_YOKOKU.equals(sendKbn) || SEND_KBN_JISHI.equals(sendKbn))
		{
			// 出力ファイル情報
			JBSbatOutputItem outputItem = new JBSbatOutputItem();
			
			insertTMailSend(sysDateTime, sendKbn, mlad, keiShaNm, opeDateYear, opeDateMonth, opeDateDay, tchiTshiryo, svcKeiNo, outputItem);
			BndWdtOvrTchiCount++;
			return outputItem;
		}
		else
		{
			return null;
		}

//		return null;
		// 2014/02/19 ANK-1876-00-00 Mod End
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_KK_T_SVC_KEI_UCWK.close();
		db_KK_T_OP_SVC_KEI.close();
		db_KK_T_FTTH_TSRCK_JSK.close();
		// 2014/02/19 ANK-1876-00-00 Add Start
		db_CC_M_MAIL.close();
		// 2014/02/19 ANK-1876-00-00 Add End
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		// 2014/02/19 ANK-1876-00-00 Add Start
		
		// 帯域制御通信量超過通知（件数）ファイルの出力
		this.BndWdtOvrTchiCntFile.write(String.format("%1$05d", BndWdtOvrTchiCount));
		this.BndWdtOvrTchiCntFile.close();

		// 帯域制御通信量超過通知（フラグ）ファイルの出力
		this.BndWdtOvrTchiFlgFile.close();
		
		// 2014/02/19 ANK-1876-00-00 Add End
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	// 2014/02/19 ANK-1876-00-00 Add Start
	/**
	 * SQLKEY(KK_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.引数でバイント変数を設定します。&lt;br&gt;
	 * 
	 * 2.DBアクセスを実行します。&lt;br&gt;
	 * 
	 * 3.メソッドの呼び出し方です。&lt;br&gt;
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	印刷依頼年月日
	 * 	 	通知書ステータス
	 * </pre>
	 * <p>
	 * 
	 * @param param
	 *            バイント変数の値配列。
	 * @return list 取得結果リスト
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeCC_M_MAIL_KK_SELECT_004(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());

		// DBアクセスを実行します
		db_CC_M_MAIL.selectBySqlDefine(paramList, CC_M_MAIL_KK_SELECT_004);

		JBSbatCommonDBInterface mailInfo = db_CC_M_MAIL.selectNext();

		// メール情報が取得できなかった場合は異常終了
		if (mailInfo == null)
		{
			// メールマスタ不正
			String[] msgParam = new String[] { "メールマスタ" };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0150JE, msgParam);
		}
		
		return mailInfo;
	}

	// 2014/02/19 ANK-1876-00-00 Add End
	/**
	 *入力情報（メール用帯域制限超過通知情報ファイル）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFM207-INF1.SVC_KEI_NO			メール用帯域制限超過通知情報ファイル.サービス契約番号
	 *			 TXT-KKIFM207-INF1.SYSID			メール用帯域制限超過通知情報ファイル.ＳＹＳＩＤ
	 *			 TXT-KKIFM207-INF1.KEISHA_NM			メール用帯域制限超過通知情報ファイル.契約者氏名
	 *			 TXT-KKIFM207-INF1.MLAD			メール用帯域制限超過通知情報ファイル.メール宛先
	 *			 TXT-KKIFM207-INF1.TIKI_SGN_TCHI_TSHIRYO			メール用帯域制限超過通知情報ファイル.帯域制限通知通信量
	 *			 TXT-KKIFM207-INF1.SEND_KBN			メール用帯域制限超過通知情報ファイル.送信区分
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKKIFM207_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// サービス契約番号項目チェック
		strValue = (String)rsMap.get("SVC_KEI_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.SVC_KEI_NO")});
			return false;
		}
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.SVC_KEI_NO")});
			return false;
		}

		// ＳＹＳＩＤ項目チェック
		strValue = (String)rsMap.get("SYSID");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.SYSID")});
			return false;
		}
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.SYSID")});
			return false;
		}

		// 契約者氏名項目チェック
		strValue = (String)rsMap.get("KEISHA_NM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.KEISHA_NM")});
			return false;
		}

		// メール宛先項目チェック
		strValue = (String)rsMap.get("MLAD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.MLAD")});
			return false;
		}

		// 帯域制限通知通信量項目チェック
		strValue = (String)rsMap.get("TIKI_SGN_TCHI_TSHIRYO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.TIKI_SGN_TCHI_TSHIRYO")});
			return false;
		}

		// 送信区分項目チェック
		strValue = (String)rsMap.get("SEND_KBN");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM207-INF1.SEND_KBN")});
			return false;
		}

		return true;
	}
	
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_FTTH_TSRCK_JSK_PKSELECT_FORUPDATE(JBSbatCommonDBInterface whereParam) throws Exception
	{
		// DBアクセスを実行します
		return db_KK_T_FTTH_TSRCK_JSK.selectByPrimaryKeysForUpdate(whereParam);
	}
	
	/**
	 * SQLKEY(KK_SELECT_180)で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_180(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_180);
	}

	/**
	 * SQLKEY(KK_SELECT_069)で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_UCWK_KK_SELECT_069(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());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KK_SELECT_069);
	}

	/**
	 * SQLKEY(KK_SELECT_054)で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_OP_SVC_KEI_KK_SELECT_054(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_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_054);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_FTTH_TSRCK_JSK_PKSELECT(JBSbatCommonDBInterface whereParam) throws Exception
	{
		// DBアクセスを実行します
		return db_KK_T_FTTH_TSRCK_JSK.selectByPrimaryKeys(whereParam);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeKK_T_FTTH_TSRCK_JSK_PKUPDATE(
			JBSbatCommonDBInterface setMap, JBSbatCommonDBInterface whereMap) throws Exception
	{
		// DBアクセスを実行します
		return db_KK_T_FTTH_TSRCK_JSK.updateByPrimaryKeys(whereMap, setMap);
		
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * SOD発行に必要なパラメータを設定します
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param sysId SYSID
	 */
	private void setSodParam(String svcKeiNo, String sysId, HashMap<String, Object> inputMap)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		ArrayList<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
		HashMap<String, Object> sodMap = new HashMap<String, Object>();
		HashMap<String, Object> sodKihonInfoMap = new HashMap<String, Object>();
		HashMap<String, Object> svcKeiInfoMap = new HashMap<String, Object>();
		
		// ------------------------------------
		// SOD基本情報を設定する
		// ------------------------------------
		// SYSID
		sodKihonInfoMap.put("sysid", sysId);		
		// 処理区分
		sodKihonInfoMap.put("syori_div", SYORI_DIV_011);
		
		// SOD基本情報をSOD情報に設定する
		sodMap.put("sod_kihon_info", sodKihonInfoMap);
		
		// ------------------------------------
		// サービス契約情報を設定する
		// ------------------------------------
		// サービス契約番号
		svcKeiInfoMap.put("svc_kei_no", svcKeiNo);
		// サービス契約情報をSOD情報に設定する
		sodMap.put("svc_kei_info", svcKeiInfoMap);
		
		// ------------------------------------
		// SOD情報をリストに設定する
		// ------------------------------------
		dataList.add(sodMap);
		
		// ------------------------------------
		// リストをデータマップに設定する
		// ------------------------------------
		dataMap.put("trgt_data_list", dataList);
		// 機能コードを設定
		dataMap.put("func_code", "1");	
		
		// CCのタイトルをキーにデータを格納
		inputMap.put(CC_TITLE_JKKHAKKOSODCC, dataMap);
	}
	
	/**
	 * メール送信に登録します。
	 * 
	 * @param sysDateTime システム日付
	 * @param sendKbn 送信区分
	 * @param mlad メールアドレス
	 * @param keiShaNm 契約者氏名
	 * @param opeDateYear 運用日 年
	 * @param opeDateMonth 運用日 月
	 * @param opeDateDay 運用日 日
	 * @param tchiTshiryo 帯域制限通知通信量
	 * @param svcKeiNo サービス契約番号
	 * @param outputItem 出力ファイル情報
	 */
//	private void insertTMailSend(String sysDateTime, String sendKbn, String mlad, String keiShaNm, String opeDateYear, String opeDateMonth, String opeDateDay, String tchiTshiryo)
	private void insertTMailSend(String sysDateTime, String sendKbn, String mlad, String keiShaNm, String opeDateYear, String opeDateMonth, String opeDateDay, String tchiTshiryo, String svcKeiNo, JBSbatOutputItem outputItem) throws Exception
	{
		// 2014/02/19 ANK-1876-00-00 Del Start
//		HashMap<String, Object> mailMap = null;
		// 2014/02/19 ANK-1876-00-00 Del End
		// ▼▼▼ ST3-2013-0000101 Delete Start ▼▼▼
//		String[] caknMoji = new String[5];
		// ▲▲▲ ST3-2013-0000101 Delete End   ▲▲▲
		//ANK-1393-00-00 Delete Start
		// ▼▼▼ ST3-2013-0000101 Add Start ▼▼▼
		//String[] caknMoji = new String[6];
		// ▲▲▲ ST3-2013-0000101 Add End   ▲▲▲
		//ANK-1393-00-00 Delete End
		//ANK-1393-00-00 Add Start
		String[] caknMoji = new String[3];
		//ANK-1393-00-00 Add End
		
		// 2014/02/19 ANK-1876-00-00 Mod Start
//		String[] mailTo = new String[1];
//		String[] mailToNm = new String[1];
//		String mailCd = null;
//		
//		// メール送信共通部品パタメータ格納
//		mailMap = new HashMap<String, Object>();
//		
//		// 送信予定年月日時分秒
//		mailMap.put(JCCbatSendMailUtil.MAIL_SEND_RSV_DTM, sysDateTime);
//		
//		// メール送信パターン
//		mailMap.put(JCCbatSendMailUtil.MAIL_SEND_PATTERN_CD, MAIL_SEND_PATTERN_CD_02);
//
//		// メールコード
//		if (SEND_KBN_YOKOKU.equals(sendKbn))
//		{
//			mailCd = MAIL_CD_YKK;
//		}
//		else
//		{
//			mailCd = MAIL_CD_JSHI;
//		}
//		mailMap.put(JBSbatCC_M_MAIL.MAIL_CD, mailCd);
//
//		// メール送信先アドレス（TO）
//		mailTo[0] = mlad;
//		mailMap.put(JCCbatSendMailUtil.MLAD_TO, mailTo);
//
//		// メール送信先アドレス表示名（TO）
//		mailToNm[0] = keiShaNm;
//		mailMap.put(JCCbatSendMailUtil.MLAD_TO_NM, mailToNm);
//		//ANK-1393-00-00 Delete Start
//		// メール本文非定型部１（契約者氏名）
//		//caknMoji[0] = keiShaNm;
//		// メール本文非定型部２（運用年）
//		//caknMoji[1] = opeDateYear;
//		// メール本文非定型部３（運用月）
//		//caknMoji[2] = opeDateMonth;
//		// メール本文非定型部４（運用日）
//		//caknMoji[3] = opeDateDay;
//		// メール本文非定型部５（帯域制限通知通信量）
//		//caknMoji[4] = tchiTshiryo;
//		// ▼▼▼ ST3-2013-0000101 Delete Start ▼▼▼
//		//caknMoji[4] = "100";
//		// ▲▲▲ ST3-2013-0000101 Delete End   ▲▲▲
//		// ▼▼▼ ST3-2013-0000101 Add Start ▼▼▼
//		// メール本文非定型部６（帯域制限通知通信量MB）
//		//caknMoji[5] = tchiTshiryo;
//		// ▲▲▲ ST3-2013-0000101 Add End   ▲▲▲
//		//ANK-1393-00-00 Delete End
		
		// 出力ファイルデータMAP
		JBSbatServiceInterfaceMap outDataMap = new JBSbatServiceInterfaceMap();
		
		// メールコード
		String mailCd = null;
		if (SEND_KBN_YOKOKU.equals(sendKbn))
		{
			mailCd = MAIL_CD_YKK;
		}
		else
		{
			mailCd = MAIL_CD_JSHI;
		}

		// メールコードを基にメール情報マップからメールの情報を取得する
		JBSbatCommonDBInterface mailInfo = getMailInfoMap(mailCd);
		
		// お客様ＩＤ
		outDataMap.setString(JBSbatKKIFE244.CUST_ID, svcKeiNo);
		// メール宛先
		outDataMap.setString(JBSbatKKIFE244.MAIL_ATE_SAKI, mlad);
		// メール送信者名
		outDataMap.setString(JBSbatKKIFE244.MAIL_SENDER_NM, mailInfo.getString(JBSbatCC_M_MAIL.SENDM_MLAD_DSP_NM));
		// メール送信者
		outDataMap.setString(JBSbatKKIFE244.MAIL_SENDER, mailInfo.getString(JBSbatCC_M_MAIL.SENDM_MLAD));
		// メール返信先
		outDataMap.setString(JBSbatKKIFE244.ML_HNSIN_SK, mailInfo.getString(JBSbatCC_M_MAIL.HNSIN_MLAD));
		// エラーメール返信先
		outDataMap.setString(JBSbatKKIFE244.ERR_ML_HNSIN_SK, mailInfo.getString(JBSbatCC_M_MAIL.ERR_MLAD));
		// ＢＣＣ
		outDataMap.setString(JBSbatKKIFE244.BCC, " ");
		// メール題名
		outDataMap.setString(JBSbatKKIFE244.ML_DAIMEI, mailInfo.getString(JBSbatCC_M_MAIL.MAIL_TITLE));
		// 2014/02/19 ANK-1876-00-00 Mod End
		
		//ANK-1393-00-00 Add Start
		// メール本文非定型部１（契約者氏名）
		caknMoji[0] = keiShaNm;
		// メール本文非定型部２（帯域制限通知通信量）
		caknMoji[1] = tchiTshiryo;
		// メール本文非定型部３（帯域制限通知通信量MB）
		caknMoji[2] = tchiTshiryo;
		//ANK-1393-00-00 Add End

		// 2014/02/19 ANK-1876-00-00 Mod Start
//		// 置換文字列
//		mailMap.put(JCCbatSendMailUtil.TEXT_HTK_CKAN_MOJI, caknMoji);
//		
//		// メール送信処理呼び出し
//		JCCBatCommon.insertTMailSend(commonItem, mailMap);
		
		// メール本文
		outDataMap.setString(JBSbatKKIFE244.ML_TEXT, repTextDataString(mailInfo.getString(JBSbatCC_M_MAIL.MAIL_TEXT), caknMoji));
		
		// 対応記録タイトル
		outDataMap.setString(JBSbatKKIFE244.TIOKRK_TITLE, mailInfo.getString(JBSbatZM_M_TCHI_MAIL_SENDS.TAIO_KIROK_TITLE));
		
		//出力フラグを設定
		outDataMap.setOutFlg(true);
		outputItem.addOutMapList(outDataMap);
		// 2014/02/19 ANK-1876-00-00 Mod End
	}
	
	/**
	 * ＦＴＴＨ通信量超過実績を更新します。
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param sendKbn 送信区分
	 * @throws Exception
	 */
	private void updateFtthTsrckJsk(
			String svcKeiNo, String sendKbn) throws Exception
	{
		// サービス契約から料金コースコードと料金プランコードを取得する
		Object[] svcKeiParam = {svcKeiNo, super.opeDate};
		executeKK_T_SVC_KEI_KK_SELECT_180(svcKeiParam);
		JBSbatCommonDBInterface resultMap = db_KK_T_SVC_KEI.selectNext();
		String pcrsCd = null;
		String pplanCd = null;
		if (null != resultMap)
		{
			pcrsCd = resultMap.getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
			pplanCd = resultMap.getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
		}
		
		// --------------------------------------------------------------------------------
		// FTTH通信量超過実績スキーマをロックする
		// --------------------------------------------------------------------------------
		// FTTH通信利用年月
		String nengetsu = getTargetNengetsu(0);
		
		// --------------------------------------------------------------------------------
		// 帯域制限対象者スキーマを更新する
		// --------------------------------------------------------------------------------
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		
//v10.00.00 2014/08/21 Add Start
		HashMap<String,String> ftthJskInfoFirst = new HashMap<String,String>();
		
		HashMap<String,String> ftthJskInfoSecond = new HashMap<String,String>();
//v10.00.00 2014/08/21 Add End
		
		// 実施通知の場合
		if (SEND_KBN_JISHI.equals(sendKbn))
		{
			// FTTH通信量初回超過通知年月日
//v10.00.00 2014/08/21 Mod Start
			//String ftthFstYmd = getLastMonthFtthFstYmd(svcKeiNo, pcrsCd, pplanCd);
			//setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD, ftthFstYmd);
			getFtthJskInfo(svcKeiNo,ftthJskInfoFirst,getTargetNengetsu(1));
			setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD, ftthJskInfoFirst.get(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD));
//v10.00.00 2014/08/21 Mod End
			// 帯域制御実施済フラグ
			setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.TIK_CTL_JSSI_ZM_FLG, "1");
			// 帯域制御実施年月日
			setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.TIK_CTL_JSSI_YMD, super.opeDate);
			// ISP認証ID
			String ninshoId = getNinshoId(svcKeiNo);
			setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.ISP_NINSHO_ID, ninshoId);
			// マルチセッション用認証ID
			String mltNinshoId = getMltNinshoId(svcKeiNo);
			setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.MLTISE_NINSHO_ID, mltNinshoId);
			
		}
		// 予告通知の場合
		else if (SEND_KBN_YOKOKU.equals(sendKbn))
		{
			// FTTH通信量初回超過通知年月日
			setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD, super.opeDate);
		}
		else
		{
			// FTTH通信量初回超過通知年月日
//v10.00.00 2014/08/21 Mod Start
			//String ftthFstYmd = getLastMonthFtthFstYmd(svcKeiNo, pcrsCd, pplanCd);
			//setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD, ftthFstYmd);
			getFtthJskInfo(svcKeiNo,ftthJskInfoFirst,getTargetNengetsu(1));
			setMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD, ftthJskInfoFirst.get(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD));
//v10.00.00 2014/08/21 Mod End

		}
		
//v10.00.00 2014/08/21 Add Start
		ftthJskInfoSecond = new HashMap<String,String>();
		getFtthJskInfo(svcKeiNo,ftthJskInfoSecond,getTargetNengetsu(0));
//v10.00.01 2014/08/22 Mod Start
//		pcrsCd = ftthJskInfoSecond.get(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD);
//		pplanCd = ftthJskInfoSecond.get(JBSbatKK_T_FTTH_TSRCK_JSK.PPLAN_CD);
		//料金コースコードが取得できた場合、取得した料金コースコード、料金プランコードを設定する。
		if (!JKKStringUtil.isNullBlank(ftthJskInfoSecond.get(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD))) {
			pcrsCd = ftthJskInfoSecond.get(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD);
			pplanCd = ftthJskInfoSecond.get(JBSbatKK_T_FTTH_TSRCK_JSK.PPLAN_CD);
		}
//v10.00.01 2014/08/22 Mod End
//v10.00.00 2014/08/21 Add End
		
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		// サービス契約番号
		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.SVC_KEI_NO, svcKeiNo);
		// 料金コースコード
		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD, pcrsCd);
		// 料金プランコード
		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.PPLAN_CD, pplanCd);
		// FTTH通信利用年月
		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TUSHIN_USE_YM, nengetsu);
		
		// --------------------------------------------------------------------------------
		// FTTH通信量超過実績スキーマをロックする
		// --------------------------------------------------------------------------------
		lockFtthTsrckJsk(svcKeiNo, pcrsCd, pplanCd);

		int cnt = executeKK_T_FTTH_TSRCK_JSK_PKUPDATE(setMap, whereMap);
		
		if (1 > cnt)
		{
			throw new JBSbatBusinessError();
		}
	}
	
	/**
	 * 運用日より更新対象の年月を取得します
	 * 
	 * @param year 年
	 * @param month 月
	 * @param date 否
	 * @return 年月
	 */
//v12.00.00 2015/02/26 MOD START
//	private String getTargetNengetsu(int minus)
//	{
//		// バッチ運用日から年月日を分割して取得する
//		String opeDateYear = super.opeDate.substring(0,4);
//		String opeDateMonth = super.opeDate.substring(4,6);
//		String opeDateDay = super.opeDate.substring(6,8);
//		
//		int yearInt = Integer.parseInt(opeDateYear);
//		int monthInt = Integer.parseInt(opeDateMonth);
//		int dateInt = Integer.parseInt(opeDateDay);
//		
//		if (0 == dateInt - 1)
//		{
//			monthInt = monthInt - 1;
//		}
//		
//		if (0 == monthInt)
//		{
//			monthInt = 12;
//			yearInt = yearInt - 1;
//		}
//		
//		monthInt = monthInt - minus;
//		
//		StringBuilder nengetsu = new StringBuilder();
//		nengetsu.append(yearInt);
//		if (10 > monthInt)
//		{
//			nengetsu.append("0");
//		}
//		nengetsu.append(monthInt);
//		return nengetsu.toString();
//		
//	}
	private String getTargetNengetsu(int minus) throws Exception
	{
		//運用日−１日に対して引数分引いた年月を取得る
		return JCCBatCommon.addMonth(JCCBatCommon.addDay(super.opeDate, -1),-minus).toString().substring(0,6);
	}
//v12.00.00 2015/02/26 MOD END
//v10.00.00 2014/08/21 Del Start
//	/**
//	 * 前月の利用年月のFTTH通信量初回超過通知年月日を取得します
//	 * 
//	 * @param svcKeiNo サービス契約番号
//	 * @param pcrsCd 料金コースコード
//	 * @param pplanCd 料金プランコード
//	 * @return FTTH通信量初回超過通知年月日
//	 * @throws Exception
//	 */
//	private String getLastMonthFtthFstYmd(String svcKeiNo, String pcrsCd, String pplanCd) throws Exception
//	{
//		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
//		String ftthFstYmd = null;
//
//		// サービス契約番号
//		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.SVC_KEI_NO, svcKeiNo);
//		// 料金コースコード
//		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD, pcrsCd);
//		// 料金プランコード
//		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.PPLAN_CD, pplanCd);
//		// FTTH通信利用年月
//		String tshinYm = getTargetNengetsu(1);
//		whereMap.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TUSHIN_USE_YM, tshinYm);
//		
//		JBSbatCommonDBInterface ftthInfo = executeKK_T_FTTH_TSRCK_JSK_PKSELECT(whereMap);
//
//		if (null != ftthInfo)
//		{
//			ftthFstYmd = ftthInfo.getString(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD);
//		}
//		
//		return ftthFstYmd;
//	}
//v10.00.00 2014/08/21 Del End
	
	/**
	 * 認証IDを取得します
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @return カンマ連結した認証ID
	 * @throws Exception
	 */
	private String getNinshoId(String svcKeiNo) throws Exception
	{
		JBSbatCommonDBInterface param = new JBSbatCommonDBInterface();
		
		// ----------------------------------------------------------
		// サービス契約内訳から認証IDを取得する
		// ----------------------------------------------------------
		// サービス契約番号
		param.setValue(svcKeiNo);
		// 運用日
		param.setValue(super.opeDate);
		param.setValue(super.opeDate);
		// サービス契約番号
		param.setValue(svcKeiNo);
		// 運用日
		param.setValue(super.opeDate);
		param.setValue(super.opeDate);
		
		executeKK_T_SVC_KEI_UCWK_KK_SELECT_069(param.getList().toArray());
		
		JBSbatCommonDBInterface svcKeiUcwkInfo = db_KK_T_SVC_KEI_UCWK.selectNext();
		
		String ninshoId = svcKeiUcwkInfo.getString(JBSbatKK_T_SVKEIUW_EOH_NET.ISP_NINSHO_ID);
		
		return ninshoId;
	}
		
	/**
	 * マルチセッション用認証IDを取得します
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @return マルチセッション用認証ID
	 * @throws Exception
	 */
	private String getMltNinshoId(String svcKeiNo) throws Exception
	{
		JBSbatCommonDBInterface param = new JBSbatCommonDBInterface();

		// ----------------------------------------------------------
		// オプションサービス契約からマルチセッション用認証IDを取得する
		// ----------------------------------------------------------
		param = new JBSbatCommonDBInterface();
		
		// サービス契約番号
		param.setValue(svcKeiNo);
		// 運用日
		param.setValue(super.opeDate);
		// オプションサービスコード
		param.setValue("B015");
		// 運用日
		param.setValue(super.opeDate);
		
		executeKK_T_OP_SVC_KEI_KK_SELECT_054(param.getList().toArray());
		
		JBSbatCommonDBInterface opSvcKeiInfo = db_KK_T_OP_SVC_KEI.selectNext();
		
		String mltiNinshoId = "";
		if (null != opSvcKeiInfo)
		{
			mltiNinshoId = opSvcKeiInfo.getString(JBSbatKK_T_OPSVKEI_ISP.MLTISE_NINSHO_ID);
		}
		
		return mltiNinshoId;
	}
	
	/**
	 * FTTH通信量実績をロックします
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param pcrsCd 料金コースコード
	 * @param pplanCd 料金プランコード
	 * @throws Exception
	 */
	private void lockFtthTsrckJsk(String svcKeiNo, String pcrsCd, String pplanCd) throws Exception
	{
		JBSbatCommonDBInterface lockParam = new JBSbatCommonDBInterface();
		// サービス契約番号
		lockParam.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.SVC_KEI_NO, svcKeiNo);
		// 料金コースコード
		lockParam.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD, pcrsCd);
		// 料金プランコード
		lockParam.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.PPLAN_CD, pplanCd);
		// FTTH通信利用年月
		String nengetsu = getTargetNengetsu(0);
		lockParam.setValue(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TUSHIN_USE_YM, nengetsu);
		
		executeKK_T_FTTH_TSRCK_JSK_PKSELECT_FORUPDATE(lockParam);
	}
	
	/**
	 * エラーメッセージに関する項目値を格納されたHashMap<String, String>を生成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.エラーメッセージに関する項目値を格納されたHashMapを生成する。<br>
	 *
	 * 2.エラーメッセージに関する項目値を格納されたHashMapに値を設定する。<br>
	 * </pre>
	 * <p>
	 * @return itemvalueMap エラーメッセージに関する項目値を格納されたHashMap
	 */
	private HashMap<String, String> getItemvalueMap()
	{
		// エラーメッセージに関する項目値が格納されたHashMapを設定
		HashMap<String, String> itemvalueMap = new HashMap<String, String>();
		itemvalueMap.put("TXT-KKIFM207-INF1.SVC_KEI_NO", "メール用帯域制限超過通知情報ファイル.サービス契約番号");
		itemvalueMap.put("TXT-KKIFM207-INF1.SYSID", "メール用帯域制限超過通知情報ファイル.ＳＹＳＩＤ");
		itemvalueMap.put("TXT-KKIFM207-INF1.KEISHA_NM", "メール用帯域制限超過通知情報ファイル.契約者氏名");
		itemvalueMap.put("TXT-KKIFM207-INF1.MLAD", "メール用帯域制限超過通知情報ファイル.メール宛先");
		itemvalueMap.put("TXT-KKIFM207-INF1.TIKI_SGN_TCHI_TSHIRYO", "メール用帯域制限超過通知情報ファイル.帯域制限通知通信量");
		itemvalueMap.put("TXT-KKIFM207-INF1.SEND_KBN", "メール用帯域制限超過通知情報ファイル.送信区分");

		return itemvalueMap;
	}
	// 2014/02/19 ANK-1876-00-00 Add Start
	/**
	 * メールコードを基にメール情報マップからメールの情報を取得する
	 * <p>
	 * </p>
	 * @param mailCd メールコード
	 * @return メール情報
	 */
	private JBSbatCommonDBInterface getMailInfoMap(String mailCd) throws Exception
	{
		String wFindFlg = "0";
		HashMap<String, JBSbatCommonDBInterface> newMailInfMap = new HashMap<String, JBSbatCommonDBInterface>();
		JBSbatCommonDBInterface mailInfo = new JBSbatCommonDBInterface();

		if (mailInfList != null)
		{
			for(HashMap<String, JBSbatCommonDBInterface> mailInfMap : mailInfList)
			{
				JBSbatCommonDBInterface tgMailInfo = mailInfMap.get(mailCd);
				
				if (tgMailInfo != null)
				{
					// メール情報マップに該当のメールコードが存在する
					mailInfo = tgMailInfo;
					wFindFlg = "1";
					break;
				}
			}
		}
		
		// メール情報マップに該当のメールコードが存在しない
		if (mailInfList.size() == 0 || wFindFlg.equals("0"))
		{
			// メール情報を取得し、メール情報マップに格納する
			Object[] param = new String[] {
					 super.opeDate
					,super.opeDate
					,mailCd
					,super.opeDate
					,super.opeDate
					,super.opeDate };
			mailInfo = this.executeCC_M_MAIL_KK_SELECT_004(param);
			newMailInfMap.put(mailCd, mailInfo);
			mailInfList.add(newMailInfMap);
		}
		
		return mailInfo;
	}

	/**
	 * 文字列内の可変文字を置き換える
	 * <p>
	 * </p>
	 * @param textData 可変文字を含む文字列
	 * @param param    変換する文字列
	 * @return 変換結果（改行コード変更後）
	 */
	private String repTextDataString(String textData, String[] param)
	{
		for(Object chgString : param)
		{
			if (chgString != null)
			{
				textData = textData.replaceFirst("%", chgString.toString());
			}
		}
		
		// 2014/03/11 IT1-2014-0000088 Mod Start
//		return textData.replaceAll("\r\n", "\n");
		return textData;
		// 2014/03/11 IT1-2014-0000088 Mod End
	}
	// 2014/02/19 ANK-1876-00-00 Add End

// v10.00.00 2014/08/21 ADD START
	
	/**
	 * FTTH通信料超過実績情報取得
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param ftthJskInfo FTTH通信料超過実績マップ
	 * @param pplanCd 対象月
	 * @throws Exception
	 */
	private void getFtthJskInfo(String svcKeiNo, HashMap<String,String> ftthJskInfo, String tgNengetu) throws Exception
	{
		
		//サービス契約、対象年月を元にFTTH通信料超過実績情報を取得する
		Object[] ftthTsrckJskParam = {svcKeiNo, tgNengetu};
		
		executeKK_T_FTTH_TSRCK_JSK_KK_SELECT_006(ftthTsrckJskParam);
		
		JBSbatCommonDBInterface resultMap = db_KK_T_FTTH_TSRCK_JSK.selectNext();

		//情報が取得できた場合、セットする。
		if (null != resultMap)
		{
			//FTTH通信利用年月
			ftthJskInfo.put(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD,resultMap.getString(JBSbatKK_T_FTTH_TSRCK_JSK.FTTH_TSR_FST_CHOK_TCH_YMD)); 
			//料金コースコード
			ftthJskInfo.put(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD,resultMap.getString(JBSbatKK_T_FTTH_TSRCK_JSK.PCRS_CD)); 
			//料金プランコード
			ftthJskInfo.put(JBSbatKK_T_FTTH_TSRCK_JSK.PPLAN_CD,resultMap.getString(JBSbatKK_T_FTTH_TSRCK_JSK.PPLAN_CD)); 
		}
		
	}
	
	private void executeKK_T_FTTH_TSRCK_JSK_KK_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_FTTH_TSRCK_JSK.selectBySqlDefine(paramList, KK_T_FTTH_TSRCK_JSK_KK_SELECT_006);
	}
	
// v10.00.00 2014/08/21 ADD END
}
