/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACTuwaPrcUpplInfOput
*	ソースファイル名	：JBSbatACTuwaPrcUpplInfOput.java
*	作成者				：富士通　
*	作成日				：2012年03月07日
*＜機能概要＞
*　通話料上限超過情報出力部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/07   富士通		新規作成
*	v3.00		2012/08/31   FJ）冨井	【ST2-2012-0001602】埋め込み文字変換対応
*	v3.01		2012/09/26   FJ）岡田	【ST1-2012-0000638】メール送信用通話料上限通知不具合対応
*	v3.02.00	2012/10/17   FJ）垣内	【ST1-2012-0000741】メール通知文の文章内に規約違反
*	v4.00.00	2013/01/09   FJ) 早崎	【KT1-2013-0000007】通話料上限超過情報出力ABEND(ファイルなし)対応
*	v4.01.00	2013/03/14   FJ) 狭間	【ST4-2013-0000064】性能改善の為、入力SQLをアンローダ化
*	v4.02.00	2013/03/20   FJ) 浜口	【KT1-2013-0000305】BCCにスペースを設定
*	v4.03.00	2013/04/13   FJ) 早崎	【KT1-2013-0000496,497】対応
*	v4.04.00	2013/04/15   FJ) 浜口	【残課題一覧No.5】ファイル生成制御上書き対応
*	v4.05.00	2013/05/25   FJ) 早崎	【KT1-2013-0000490】オプションサービス契約スキーマ参照条件修正
*	v4.06.00	2013/06/15   FJ) 垣内	【KT1-2013-0000670】住所結合項目不足対応
*	v5.00.00	2013/08/07   FJ) 早崎	【TG1-2013-0000806】文字化け対応
*	v5.01.00	2013/08/18   FJ) 小柴	【OM-2013-0000124】サービス契約検索処理の引数を追加
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatRknBusinessUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFM211;
import eo.business.util.table.JBSbatAC_T_EOH_TEL_TW_GK;
import eo.business.util.table.JBSbatCC_M_MAIL;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_T_OPSVKEI_ISP;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.business.util.table.JBSbatZM_M_TCHI_MAIL_SENDS;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCHUtilCommon;
import eo.common.util.JPCFomatString;
import eo.common.util.JPCUtilCommon;
import eo.framework.application.JBSbatBusinessException;
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.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACTuwaPrcUpplInfOput extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(メール)*/
	private static final String D_TBL_NAME_CC_M_MAIL = "CC_M_MAIL";

	/** テーブル(通知メール送信先)*/
	private static final String D_TBL_NAME_ZM_M_TCHI_MAIL_SENDS = "ZM_M_TCHI_MAIL_SENDS";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(オプションサービス契約＜ＩＳＰ＞)*/
	private static final String D_TBL_NAME_KK_T_OPSVKEI_ISP = "KK_T_OPSVKEI_ISP";

	/** テーブル(ｅｏ光電話通話合計)*/
	private static final String D_TBL_NAME_AC_T_EOH_TEL_TW_GK = "AC_T_EOH_TEL_TW_GK";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String CC_M_MAIL_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String ZM_M_TCHI_MAIL_SENDS_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_015)*/
	private static final String KK_T_SVC_KEI_AC_SELECT_015 = "AC_SELECT_015";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String KK_T_OPSVKEI_ISP_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_020)*/
	private static final String KK_T_SVC_KEI_AC_SELECT_020 = "AC_SELECT_020";

	/** テーブルアクセスクラス(メール)*/
	private JBSbatSQLAccess db_CC_M_MAIL = null;

	/** テーブルアクセスクラス(通知メール送信先)*/
	private JBSbatSQLAccess db_ZM_M_TCHI_MAIL_SENDS = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(オプションサービス契約＜ＩＳＰ＞)*/
	private JBSbatSQLAccess db_KK_T_OPSVKEI_ISP = null;

	/** テーブルアクセスクラス(ｅｏ光電話通話合計)*/
	private JBSbatSQLAccess db_AC_T_EOH_TEL_TW_GK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 業務パラメータ(メール用通話料上限超過メールコード)*/
	private String acMlTwpUcMlcd = null;

	/** 業務パラメータ（メール用通話料上限超過お客様サポートメールコード） */
	private String acMlTwpUcSpMlcd = null;

	/** 業務パラメータ（通知メール用通話料上限超過メールコード） */
	private String acTmTwpUcMlcd = null;

	/** 業務パラメータ（通知メール用通話料上限超過お客様サポートメールコード） */
	private String acTmTwpUcSpMlcd = null;

	/** 業務パラメータ（ハガキ用通話料上限通知メッセージ） */
	private String acHgkTwpUcMsg = null;

	/** 業務パラメータ（お客様サポート宛てサービス契約番号） */
	private String acCustsprtSvkeiNo = null;

	/** 業務パラメータ（ﾌｧｲﾙ（メール送信用通話料上限通知情報）） */
	private String acMlsTruptInfF = null;

	/** 業務パラメータ（ﾌｧｲﾙ（メール送信用通話料上限通知件数）） */
	private String acMlsTruptCntF = null;

	/** 業務パラメータ（ﾌｧｲﾙ（メール送信用通話料上限通知フラグ）） */
	private String acMlsTruptFlgF = null;

	/** 業務パラメータ（ﾌｧｲﾙ（ハガキ用通話料上限通知情報）） */
	private String acHgkTuwaUptcF = null;

	/** ファイル用年月日時分秒 */
	private String fileYmd = null;

	/** メール用お客様宛情報マップ */
	private HashMap<String, String> mlTwpUcMap = new HashMap<String, String>();

	/** メール用お客様サポート宛情報マップ */
	private HashMap<String, String> mlTwpUcSpMap = new HashMap<String, String>();

	/** 通知メール用お客様宛通知情報マップ */
	private HashMap<String, HashMap<String, String>> acTmTwpUcMap = new HashMap<String, HashMap<String, String>>();

	/** 通知メール用お客様サポート宛通知情報マップ */
	private HashMap<String, HashMap<String, String>> acTmTwpUcSpMap = new HashMap<String, HashMap<String, String>>();
	
	/** 出力件数 */
	private int outputCnt = 0;
	
	/** メール件数 */
	private int mailCnt = 0;
	
	/** ハガキ件数 */
	private int letterCnt = 0;
	
	/** メール送信用通話料上限通知件数件数 */
	private int mailCountCnt = 0;
	
	/** メール送信用通話料上限通知情報ファイル */
	private ArrayList<Object> mlsTruptInfFileInf = null;
	
	/** メール送信用通話料上限通知件数ファイル */
	private ArrayList<Object> mlsTruptCntFileInf = null;
	
	/** メール送信用通話料上限通知フラグファイル */
	private ArrayList<Object> mlsTruptFlgFileInf = null;
	
	/** ハガキ用通話料上限通知情報ファイル */
	private ArrayList<Object> hgkTuwaUptcFileInf = null;

	/** ファイル連番 */
	private static final String FILE_NO = "000";
	
	/** 編集用 バイト数制限値（64） */
	private static final int BYTE_SIZE_64 = 64;
	
	/** 編集用 バイト数制限値（80） */
	private static final int BYTE_SIZE_80 = 80;
	
	/** 編集用 バイト数制限値（90） */
	private static final int BYTE_SIZE_90 = 90;
	
	/** 編集用 バイト数制限値（100） */
	private static final int BYTE_SIZE_100 = 100;
	
	/** 編集用 バイト数制限値（210） */
	private static final int BYTE_SIZE_210 = 210;
	
	/** 編集用 バイト数制限値（500） */
	private static final int BYTE_SIZE_500 = 500;
	
	/** 編集用 バイト数制限値（4200） */
	private static final int BYTE_SIZE_4200 = 4200;
	
	/** ログ用 メッセージ（メール送信用通話料上限通知情報ファイル） */
	private static final String LOG_MSG_LIMIT_INFO = "メール送信用通話料上限通知情報ファイル:";
	
	/** ログ用 メッセージ（メール送信用通話料上限通知件数） */
	private static final String LOG_MSG_LIMIT_CNT = "メール送信用通話料上限通知件数：";
	
	/** ログ用 メッセージ（メール送信用通話料上限通知フラグ） */
	private static final String LOG_MSG_LIMIT_FLG = "メール送信用通話料上限通知フラグ：";
	
	/** ログ用 メッセージ（ハガキ用通話料上限通知情報） */
	private static final String LOG_MSG_LETTER_LIMIT_INFO = "ハガキ用通話料上限通知情報：";
	
	/** 退避．変換用マップ */
	private HashMap<String, String> tmpChgeMap = null;

	/** 変換用マップキー：%1% */
	private static final String MAP_KEY_1 = "%1%";
	
	/** 変換用マップキー：%2% */
	private static final String MAP_KEY_2 = "%2%";
	
	/** 変換用マップキー：%3% */
	private static final String MAP_KEY_3 = "%3%";
	
	/** 変換用マップキー：%4% */
	private static final String MAP_KEY_4 = "%4%";
	
	/** 変換用マップキー：%5% */
	private static final String MAP_KEY_5 = "%5%";
	
	/** 変換用マップキー：%6% */
	private static final String MAP_KEY_6 = "%6%";
	
	/** 変換用マップキー：%7% */
	private static final String MAP_KEY_7 = "%7%";
	
	/** 変換用マップキー：%A% */
	private static final String MAP_KEY_A = "%A%";
	
	/** 変換用マップキー：%B% */
	private static final String MAP_KEY_B = "%B%";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CC_M_MAIL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_M_MAIL);
		db_ZM_M_TCHI_MAIL_SENDS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_TCHI_MAIL_SENDS);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_OPSVKEI_ISP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OPSVKEI_ISP);
		db_AC_T_EOH_TEL_TW_GK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_EOH_TEL_TW_GK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");
		
		// 業務パラメータ取得
		{
			JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
			
			this.acMlTwpUcMlcd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_ML_TWP_UC_MLCD);
			this.acMlTwpUcSpMlcd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_ML_TWP_UC_SP_MLCD);
			this.acTmTwpUcMlcd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_TM_TWP_UC_MLCD);
			this.acTmTwpUcSpMlcd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_TM_TWP_UC_SP_MLCD);
			this.acHgkTwpUcMsg = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_HGK_TWP_UC_MSG);
			this.acCustsprtSvkeiNo = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_CUSTSPRT_SVKEI_NO);
			this.acMlsTruptInfF = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MLS_TRUPT_INF_FID);
			this.acMlsTruptCntF = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MLS_TRUPT_CNT_FID);
			this.acMlsTruptFlgF = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MLS_TRUPT_FLG_FID);
			this.acHgkTuwaUptcF = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_HGK_TUWA_UPTC_FID);
			
			paramUtil.close();
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acMlTwpUcMlcd=" + this.acMlTwpUcMlcd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acMlTwpUcSpMlcd=" + this.acMlTwpUcSpMlcd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acTmTwpUcMlcd=" + this.acTmTwpUcMlcd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acTmTwpUcSpMlcd=" + this.acTmTwpUcSpMlcd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acHgkTwpUcMsg=" + this.acHgkTwpUcMsg + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acCustsprtSvkeiNo=" + this.acCustsprtSvkeiNo + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acMlsTruptInfF=" + this.acMlsTruptInfF + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acMlsTruptCntF=" + this.acMlsTruptCntF + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acMlsTruptFlgF=" + this.acMlsTruptFlgF + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][acHgkTuwaUptcF=" + this.acHgkTuwaUptcF + "]");
		}
		
		// メール情報取得
		{
			// お客様宛のメール送信用通話料上限通知情報取得
			selectCcMMail(this.acMlTwpUcMlcd, this.mlTwpUcMap);
			
			// お客様サポート宛のメール送信用通話料上限通知情報取得
			selectCcMMail(this.acMlTwpUcSpMlcd, this.mlTwpUcSpMap);
			
			// お客様宛のメール送信用通話料上限通知情報取得
			selectZmMTchiMailSends(this.acTmTwpUcMlcd, this.acTmTwpUcMap);
			
			// お客様サポート宛のメール送信用通話料上限通知情報取得
			selectZmMTchiMailSends(this.acTmTwpUcSpMlcd, this.acTmTwpUcSpMap);
			
		}
		
		// ファイル用年月日時分秒作成
		this.fileYmd = super.opeDate.concat(JCCBatCommon.getSysDateTime().substring(8, 14));
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][SysDate=" + JCCBatCommon.getSysDateTimeStamp() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][fileYmd=" + this.fileYmd + "]");
		
		// ファイル名・ファイルインスタンス取得
		{
			
			// メール送信用通話料上限通知情報ファイル生成情報取得
			this.mlsTruptInfFileInf = geneFile(commonItem, this.acMlsTruptInfF, JACStrConst.LINE_LF);
			
			// メール送信用通話料上限通知件数ファイル生成情報取得
			this.mlsTruptCntFileInf = geneFile(commonItem, this.acMlsTruptCntF, JACStrConst.LINE_LF);
			
			// メール送信用通話料上限通知フラグファイル生成情報取得
			this.mlsTruptFlgFileInf = geneFile(commonItem, this.acMlsTruptFlgF, JACStrConst.LINE_LF);
			
			// ハガキ用通話料上限通知情報生成情報取得
			this.hgkTuwaUptcFileInf = geneFile(commonItem, this.acHgkTuwaUptcF, JACStrConst.LINE_CRLF);
			
		}
		
		// 変換用マップ共通箇所設定
		this.tmpChgeMap = new HashMap<String, String>();
		this.tmpChgeMap.put(MAP_KEY_5, super.opeDate.substring(0, 4));	// 運用日の年
		this.tmpChgeMap.put(MAP_KEY_6, super.opeDate.substring(4, 6));	// 運用日の月
		this.tmpChgeMap.put(MAP_KEY_7, super.opeDate.substring(6, 8));	// 運用日の日
		
		assert 	this.tmpChgeMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][this.tmpChgeMap=" + this.tmpChgeMap.toString() + "]") : true;
		assert 	this.mlTwpUcMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][this.mlTwpUcMap=" + this.mlTwpUcMap.toString() + "]") : true;
		assert 	this.mlTwpUcSpMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][this.mlTwpUcSpMap=" + this.mlTwpUcSpMap.toString() + "]") : true;
		assert 	this.acTmTwpUcMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][this.acTmTwpUcMap=" + this.acTmTwpUcMap.toString() + "]") : true;
		assert 	this.acTmTwpUcSpMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][this.acTmTwpUcSpMap=" + this.acTmTwpUcSpMap.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		
		// eo光電話通話合計更新
		{
			// 超過通知コード
			String chokTchiCd = inMap.getString(JBSbatACIFM211.CHOK_TCHI_CD);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][通話料金合計=" + inMap.getBigDecimal(JBSbatACIFM211.PCALL_PRC_GK) + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][通話料指定額到達通知指定金額=" + inMap.getBigDecimal(JBSbatACIFM211.TWRYO_STIAM_TTU_TCHI_STIAM) + "]");
			// 超過通知コードが'2'（再判定中）以外で通話料金合計が通話料指定額到達通知指定金額を超過していない場合は処理スキップ
			if(!JACStrConst.CHOK_TCHI_CD_JUDGE.equals(chokTchiCd)
					&& inMap.getBigDecimal(JBSbatACIFM211.PCALL_PRC_GK).compareTo(inMap.getBigDecimal(JBSbatACIFM211.TWRYO_STIAM_TTU_TCHI_STIAM)) < 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][超過通知コード:(再判定中以外）、かつ通話料指定額未到達][chokTchiCd=" + chokTchiCd + "]");
				return null;
			}
			else if(JACStrConst.CHOK_TCHI_CD_JUDGE.equals(chokTchiCd)
					&& inMap.getBigDecimal(JBSbatACIFM211.PCALL_PRC_GK).compareTo(inMap.getBigDecimal(JBSbatACIFM211.TWRYO_STIAM_TTU_TCHI_STIAM)) < 0)
			{
				// eo光電話合計DB更新
				updateacTEohTelTwGk(inMap, JACStrConst.CHOK_TCHI_CD_ZUMI);
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][超過通知コード:(再判定中）、かつ通話料指定額未到達][chokTchiCd=" + chokTchiCd + "]");
				
				// 次レコードへ
				return null;
			}
			else
			{
				// eo光電話合計DB更新
				updateacTEohTelTwGk(inMap, JACStrConst.CHOK_TCHI_CD_OVER);
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][超過通知コード:(再判定中以外)][chokTchiCd=" + chokTchiCd + "]");
			}
			
		}
		// メール情報取得
		selectKkTOpsvkeiIsp(inMap);
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CC_M_MAIL.close();
		db_ZM_M_TCHI_MAIL_SENDS.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_OPSVKEI_ISP.close();
		db_AC_T_EOH_TEL_TW_GK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		// メール送信用通話料上限通知情報出力処理
		{
			if(0 < this.letterCnt)
			{
				// 変換用マップ設定情報設定
				this.setChgeMapSprt();
				
				// メール送信用通話料上限通知情報（はがき用分）作成処理
				outputRecord(createMlsTruptInfList2(), (JBSbatBusinessFileUtil)this.mlsTruptInfFileInf.get(2));
				
				// メール件数カウントアップ
				this.mailCnt++;
			}
			// ログ出力
			this.logPrint(LOG_MSG_LIMIT_INFO, this.mlsTruptInfFileInf, this.mailCnt);
		}
		
		// メール送信用通話料上限通知件数ファイル出力処理
		{
			
			// メール送信用通話料上限通知件数作成処理
			outputRecord(createMlsTruptCntList(), (JBSbatBusinessFileUtil)this.mlsTruptCntFileInf.get(2));
			
			// メール通知件数件数カウントアップ
			this.mailCountCnt++;
			
			// ログ出力
			this.logPrint(LOG_MSG_LIMIT_CNT, this.mlsTruptCntFileInf, this.mailCountCnt);
		}
		
		// メール送信用通話料上限通知フラグファイルログ出力処理
		this.logPrint(LOG_MSG_LIMIT_FLG, this.mlsTruptFlgFileInf, 1);
		
		// ハガキ用通話料上限通知情報ファイルログ出力処理
		this.logPrint(LOG_MSG_LETTER_LIMIT_INFO, this.hgkTuwaUptcFileInf, this.letterCnt);
		
		// オープン中のファイルをクローズする
		closeFile(this.mlsTruptInfFileInf);
		closeFile(this.mlsTruptCntFileInf);
		closeFile(this.mlsTruptFlgFileInf);
		closeFile(this.hgkTuwaUptcFileInf);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal][処理内ファイル出力件数=" + this.outputCnt + "]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	メールコード
	 *		 	予約適用年月日
	 *		 	メール適用開始年月日
	 *		 	メール適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCC_M_MAIL_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_CC_M_MAIL.selectBySqlDefine(paramList, CC_M_MAIL_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	メールコード
	 *		 	通知メール送信先適用開始年月日
	 *		 	通知メール送信先適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_TCHI_MAIL_SENDS_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_TCHI_MAIL_SENDS.selectBySqlDefine(paramList, ZM_M_TCHI_MAIL_SENDS_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_015)で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_AC_SELECT_015(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());
		paramList.setValue(param[17].toString());
		paramList.setValue(param[18].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_AC_SELECT_015);
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	バッチ運用日
	 *		 	オプションサービス契約ステータス
	 *		 	サービス契約番号
	 *		 	バッチ運用日
	 *		 	バッチ運用日
	 *		 	バッチ運用日
	 *		 	バッチ運用日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_OPSVKEI_ISP_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());

		// DBアクセスを実行します
		db_KK_T_OPSVKEI_ISP.selectBySqlDefine(paramList, KK_T_OPSVKEI_ISP_AC_SELECT_001);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	超過通知コード				CHOK_TCHI_CD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	SVC_KEI_UCWK_NO
	 *		 	PCRS_CD
	 *		 	PRC_SVC_CD
	 *		 	SEIKY_YM
	 *		 	KAKINS_TELNO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_EOH_TEL_TW_GK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("CHOK_TCHI_CD", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_NO", whereParam[0]);
		whereMap.setValue("SVC_KEI_UCWK_NO", whereParam[1]);
		whereMap.setValue("PCRS_CD", whereParam[2]);
		whereMap.setValue("PRC_SVC_CD", whereParam[3]);
		whereMap.setValue("SEIKY_YM", whereParam[4]);
		whereMap.setValue("KAKINS_TELNO", whereParam[5]);

		// DBアクセスを実行します
		db_AC_T_EOH_TEL_TW_GK.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * SQLKEY(AC_SELECT_020)で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_AC_SELECT_020(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.selectBySqlDefine(paramList, KK_T_SVC_KEI_AC_SELECT_020);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	
	/**
	 * 料金管理チームバッチ共通アクセッサー部品でファイル生成します。
	 * @param commonItem 共通伝聞
	 * @param fileId ファイルID
	 * @param lineCd 変換前改行コード
	 * 
	 * @return fileInf ファイル情報
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private ArrayList<Object> geneFile(JBSbatCommonItem commonItem, String fileId, String lineCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][geneFile]");
		
		// （引数：バッチ共通パラメータ, ファイルID, ファイル分割有無, ファイル連番, 請求年月, 自由設定, 文字コード, 変換前改行コード）
		ArrayList<Object> fileInf = JACBatCommon.geneFile(commonItem, fileId, JACStrConst.FILE_DIV_SKBT_CD_MLS_TW, FILE_NO, this.fileYmd, JACStrConst.KARA_MOJI, JACStrConst.KARA_MOJI, JACStrConst.ENCODE_SJIS, lineCd);
		
		String fileNm = (String)fileInf.get(0);							// ファイル名（フルパス）
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][geneFile][fileNm=" + fileNm + "]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][geneFile]");
		return fileInf;
	}

	/**
	 * 通知メール送信先情報を取得します。
	 * 
	 * @param mailCd メールコード
	 * @param resultMap 検索結果
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void selectZmMTchiMailSends(String mailCd, HashMap<String, HashMap<String, String>> resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectCcMMail]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(mailCd);				// メールコード
		paramList.setValue(super.opeDate);		// バッチ運用日
		paramList.setValue(super.opeDate);		// バッチ運用日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectZmMTchiMailSends][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeZM_M_TCHI_MAIL_SENDS_AC_SELECT_001(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_ZM_M_TCHI_MAIL_SENDS.selectNext();
		
		// 結果取得
		if(dbMap != null)
		{
			while (dbMap != null)
			{
				
				// KEY:メールアドレス設定フィールドコード | value:検索結果
				resultMap.put(dbMap.getString(JBSbatZM_M_TCHI_MAIL_SENDS.MLAD_SET_FIELD_CD), dbMap.getMap());
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectZmMTchiMailSends][resultMap=" + resultMap.toString() + "]");
				dbMap = db_ZM_M_TCHI_MAIL_SENDS.selectNext();
			}
		}
		else
		{
			
			// DB未存在エラー
			String[] outCntMsg = {JBSbatZM_M_TCHI_MAIL_SENDS.TABLE_NAME, paramList.getList().toString()};
			
			// エラーコード："EACB0260CH"（DB未存在エラー）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0260CH, outCntMsg);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectCcMMail]");
	}

	/**
	 * メール情報を取得します。
	 * 
	 * @param mailCd メールコード
	 * @param resultMap 検索結果
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void selectCcMMail(String mailCd, HashMap<String, String> resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectCcMMail]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(mailCd);				// メールコード
		paramList.setValue(super.opeDate);		// バッチ運用日
		paramList.setValue(super.opeDate);		// バッチ運用日
		paramList.setValue(super.opeDate);		// バッチ運用日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectCcMMail][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCC_M_MAIL_AC_SELECT_001(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_CC_M_MAIL.selectNext();
		
		// 結果取得
		if(dbMap != null)
		{
			while (dbMap != null)
			{
				
				// 検索結果取を格納
				resultMap.putAll(dbMap.getMap());
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectCcMMail][resultMap=" + resultMap.toString() + "]");
				dbMap = db_CC_M_MAIL.selectNext();
			}
		}
		else
		{
			
			// DB未存在エラー
			String[] outCntMsg = {JBSbatCC_M_MAIL.TABLE_NAME, paramList.getList().toString()};
			
			// エラーコード："EACB0260CH"（DB未存在エラー）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0260CH, outCntMsg);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectCcMMail]");
	}

	/**
	 * サービス契約情報を取得します。
	 * @param inMap 出力情報
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void selectKkTSvcKei(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectKkTSvcKei]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(inMap.getString(JBSbatAC_T_EOH_TEL_TW_GK.SVC_KEI_NO));		// サービス契約番号
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectKkTSvcKei][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeKK_T_SVC_KEI_AC_SELECT_015(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_KK_T_SVC_KEI.selectNext();
		
		// 結果取得
		if(dbMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectKkTSvcKei][KK_T_SVC_KEI_AC_SELECT_015:dbMap=" + dbMap.getMap().toString() + "]");
			// 変換用マップ設定情報設定
			this.setChgeMap(inMap, dbMap);
			
			while (dbMap != null)
			{
				
				// ハガキ用通話料上限通知情報作成処理
				outputRecord(createHgkTuwaUptcInfList(inMap, dbMap), (JBSbatBusinessFileUtil)this.hgkTuwaUptcFileInf.get(2));
				
				// ハガキ件数カウントアップ
				this.letterCnt++;

				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectKkTSvcKei][dbMap=" + dbMap.toString() + "]");
				dbMap = db_KK_T_SVC_KEI.selectNext();
			}
		}
		else
		{
			
			// DB未存在エラー
			String[] outCntMsg = {JBSbatKK_T_SVC_KEI.TABLE_NAME, paramList.getList().toString()};
			
			// エラーコード："EACB0260CH"（DB未存在エラー）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0260CH, outCntMsg);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectKkTSvcKei]");
	}


	/**
	 * オプションサービス契約＜ＩＳＰ＞情報を取得します。
	 * @param inMap 出力情報
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void selectKkTOpsvkeiIsp(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectKkTOpsvkeiIsp]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(super.opeDate);											// バッチ運用日
		paramList.setValue(JACStrConst.SKHK_SVKEI_STAT_CD_SVC_TK); 					// オプションサービス契約ステータス
		paramList.setValue(inMap.getString(JBSbatACIFM211.SVC_KEI_NO));				// サービス契約番号
		paramList.setValue(super.opeDate);											// バッチ運用日
		paramList.setValue(super.opeDate);											// バッチ運用日
		paramList.setValue(super.opeDate);											// バッチ運用日
		paramList.setValue(super.opeDate);											// バッチ運用日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectKkTOpsvkeiIsp][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeKK_T_OPSVKEI_ISP_AC_SELECT_001(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_KK_T_OPSVKEI_ISP.selectNext();
		
		// 結果取得
		if(dbMap != null)
		{
			JBSbatCommonDBInterface dbMapMail = this.selectKkTSvcKeiMail(inMap);
			
			// 変換用マップ設定情報設定
			this.setChgeMap(inMap, dbMapMail);
			
			while (dbMap != null)
			{
				
				// メール送信用通話料上限通知情報作成処理
				outputRecord(createMlsTruptInfList(inMap, dbMap), (JBSbatBusinessFileUtil)this.mlsTruptInfFileInf.get(2));
					
				// メール件数カウントアップ
				this.mailCnt++;

				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectKkTOpsvkeiIsp][dbMap=" + dbMap.toString() + "]");
				dbMap = db_KK_T_OPSVKEI_ISP.selectNext();
			}
		}
		else
		{
			
			// 取得できなかった場合、ハガキ情報取得
			selectKkTSvcKei(inMap);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectKkTOpsvkeiIsp]");
	}

	/**
	 * メール送信用通話料上限通知件数格納用リストを作成します。
	 * 
	 * @return mlsTruptCntList メール送信用通話料上限通知件数格納用リスト
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private ArrayList<String> createMlsTruptCntList() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createMlsTruptCntList]");
		ArrayList<String> list = new ArrayList<String>();
		
		// データ件数
		int dataCnt = this.mailCnt;
		if(0 < this.mailCnt && 0 < this.letterCnt)
		{
			
			// ハガキ件数 ≦ 0 の場合
			dataCnt--;
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][createMlsTruptCntList:ハガキ件数 ≦ 0][dataCnt=" + dataCnt + "]");
		}
		
		// ゼロパディング（左詰め）
		list.add(JPCUtilCommon.fillZero(String.valueOf(dataCnt), 5, false));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createMlsTruptCntList][list=" + list.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createMlsTruptCntList]");
		return list;
	}

	/**
	 * ハガキ用通話料上限通知情報格納リストを作成します。
	 * 
	 * @param inMap 入力情報
	 * @param dbMap 検索結果
	 * @return hgkTuwaUptcList ハガキ用通話料上限通知情報格納リスト
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private ArrayList<String> createHgkTuwaUptcInfList(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface dbMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createHgkTuwaUptcInfList]");
		ArrayList<String> list = new ArrayList<String>();
		
		// 1.サービス契約番号
		list.add(inMap.getString(JBSbatAC_T_EOH_TEL_TW_GK.SVC_KEI_NO));
		
		// 2.SYSID
		list.add(dbMap.getString(JBSbatKK_T_SVC_KEI.SYSID));
		
		// 3.請求契約番号
		list.add(dbMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO));
		
		// 4.契約者氏名
		list.add(JCHUtilCommon.getBcutStr(dbMap.getString(JBSbatCK_T_CUST.CUST_NM), BYTE_SIZE_90));
		
		// 5.契約者郵便番号
		list.add(dbMap.getString(JBSbatCK_T_CUST.KEISHA_PCD));

		// 6.契約者住所
		String keiAdress = makeStr(JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.STATE_NM_CUST))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.CITY_NM_CUST))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.OAZTSU_NM_CUST))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.AZCHO_NM_CUST))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatCK_T_CUST.KEISHA_BNCHIGO))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatCK_T_CUST.KEISHA_ADRTTM))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatCK_T_CUST.KEISHA_ADRRM)));
		list.add(JBSbatStringUtil.Rtrim(JCHUtilCommon.getBcutStr(keiAdress, BYTE_SIZE_90)));
		
		// 7.請求書送付先氏名
		list.add(JCHUtilCommon.getBcutStr(dbMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM), BYTE_SIZE_90));
		
		// 8.請求書送付先郵便番号
		list.add(dbMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_PCD));
		
		// 9.請求書送付先住所
		String souAdress = makeStr(JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.STATE_NM_SEIKY))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.CITY_NM_SEIKY))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.OAZTSU_NM_SEIKY))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.AZCHO_NM_SEIKY))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_BNCHIGO))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_ADRTTM))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_ADRRM)));
		list.add(JBSbatStringUtil.Rtrim(JCHUtilCommon.getBcutStr(souAdress, BYTE_SIZE_90)));
		
		// 10.利用場所郵便番号
		list.add(dbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD));
		
		// 11.利用場所住所
		String riyouAdress = makeStr(JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.STATE_NM_RIYOU))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.CITY_NM_RIYOU))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.OAZTSU_NM_RIYOU))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JACStrConst.AZCHO_NM_RIYOU))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM))
								, JBSbatStringUtil.Rtrim(dbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM)));
		list.add(JBSbatStringUtil.Rtrim(JCHUtilCommon.getBcutStr(riyouAdress, BYTE_SIZE_210)));
		
		// 12.電話単独フラグ
		list.add(JACStrConst.TEL_ONLY_FLG);
		
		// 13.通話料上限通知メッセージ
		list.add(JACbatRknBusinessUtil.ckanUmeMojiHanyo(this.acHgkTwpUcMsg, this.tmpChgeMap));

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createHgkTuwaUptcInfList][list=" + list.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createHgkTuwaUptcInfList]");
		return list;
	}

	/**
	 * メール送信用通話料上限通知情報格納リスト（はがき用分）を作成します。
	 * 
	 * @return mlsTruptInfList メール送信用通話料上限通知情報格納リスト（はがき用分）
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private ArrayList<String> createMlsTruptInfList2() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createMlsTruptInfList2]");
		ArrayList<String> list = new ArrayList<String>();
		
		// 1.サービス契約番号
		list.add(this.acCustsprtSvkeiNo);
		
		// 2.メール宛先
		list.add(JCHUtilCommon.getBcutStr(this.acTmTwpUcSpMap.get(JACStrConst.MLAD_SET_FIELD_CD_TO).get(JBSbatZM_M_TCHI_MAIL_SENDS.SENDS_MLAD), BYTE_SIZE_64));
		
		// 3.メール送信者名
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcSpMap.get(JBSbatCC_M_MAIL.SENDM_MLAD_DSP_NM), BYTE_SIZE_100));
		
		// 4.メール送信者
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcSpMap.get(JBSbatCC_M_MAIL.SENDM_MLAD), BYTE_SIZE_64));
		
		// 5.メール返信先
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcSpMap.get(JBSbatCC_M_MAIL.HNSIN_MLAD), BYTE_SIZE_64));
		
		// 6.エラーメール返信先
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcSpMap.get(JBSbatCC_M_MAIL.ERR_MLAD), BYTE_SIZE_64));
		
		// 7.ＢＣＣ
		list.add(JACStrConst.SPACE_1);
		
		// 8.メール題名
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcSpMap.get(JBSbatCC_M_MAIL.MAIL_TITLE), BYTE_SIZE_500));
		
		// 9.メール本文
		list.add(JCHUtilCommon.getBcutStr(JACbatRknBusinessUtil.ckanUmeMojiHanyo(this.mlTwpUcSpMap.get(JBSbatCC_M_MAIL.MAIL_TEXT), this.tmpChgeMap), BYTE_SIZE_4200));
		
		// 10.対応記録タイトル
		{
			String taioKirokTitle = this.acTmTwpUcSpMap.get(JACStrConst.MLAD_SET_FIELD_CD_TO).get(JBSbatZM_M_TCHI_MAIL_SENDS.TAIO_KIROK_TITLE);
			if(taioKirokTitle == null)
			{
				taioKirokTitle = this.acTmTwpUcSpMap.get(JACStrConst.MLAD_SET_FIELD_CD_BCC).get(JBSbatZM_M_TCHI_MAIL_SENDS.TAIO_KIROK_TITLE);
			}
			list.add(JCHUtilCommon.getBcutStr(taioKirokTitle, BYTE_SIZE_80));
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createMlsTruptInfList2][list=" + list.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createMlsTruptInfList2]");
		return list;
	}

	/**
	 * メール送信用通話料上限通知情報格納リストを作成します。
	 * 
	 * @param inMap 入力情報
	 * @param dbMap 検索結果
	 * @return mlsTruptInfList メール送信用通話料上限通知情報格納リスト
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private ArrayList<String> createMlsTruptInfList(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface dbMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createMlsTruptInfList]");
		ArrayList<String> list = new ArrayList<String>();
		
		// 1.サービス契約番号
		list.add(inMap.getString(JBSbatACIFM211.SVC_KEI_NO));
		
		// 2.メール宛先
		list.add(JCHUtilCommon.getBcutStr(dbMap.getString(JBSbatKK_T_OPSVKEI_ISP.MLAD), BYTE_SIZE_64));
		
		// 3.メール送信者名
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcMap.get(JBSbatCC_M_MAIL.SENDM_MLAD_DSP_NM), BYTE_SIZE_100));
		
		// 4.メール送信者
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcMap.get(JBSbatCC_M_MAIL.SENDM_MLAD), BYTE_SIZE_64));
		
		// 5.メール返信先
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcMap.get(JBSbatCC_M_MAIL.HNSIN_MLAD), BYTE_SIZE_64));
		
		// 6.エラーメール返信先
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcMap.get(JBSbatCC_M_MAIL.ERR_MLAD), BYTE_SIZE_64));
		
		// 7.ＢＣＣ
		list.add(JACStrConst.SPACE_1);
		
		// 8.メール題名
		list.add(JCHUtilCommon.getBcutStr(this.mlTwpUcMap.get(JBSbatCC_M_MAIL.MAIL_TITLE), BYTE_SIZE_500));
		
		// 9.メール本文
		list.add(JCHUtilCommon.getBcutStr(JACbatRknBusinessUtil.ckanUmeMojiHanyo(this.mlTwpUcMap.get(JBSbatCC_M_MAIL.MAIL_TEXT), this.tmpChgeMap), BYTE_SIZE_4200));
		
		// 10.対応記録タイトル
		list.add(JCHUtilCommon.getBcutStr(this.acTmTwpUcMap.get(JACStrConst.MLAD_SET_FIELD_CD_BCC).get(JBSbatZM_M_TCHI_MAIL_SENDS.TAIO_KIROK_TITLE), BYTE_SIZE_80));
		
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createMlsTruptInfList][list=" + list.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createMlsTruptInfList]");
		return list;
	}

	/**
	 * eo光電話合計の更新を行います。
	 * @param inMap 入力情報
	 * @param chokTchiCd 超過通知コード
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void updateacTEohTelTwGk(JBSbatServiceInterfaceMap inMap, String chokTchiCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateacTEohTelTwGk]");

		// 設定値
		JBSbatCommonDBInterface setParam = new JBSbatCommonDBInterface();
		
		// 超過通知コード
		setParam.setValue(chokTchiCd);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateacTEohTelTwGk][setParam=" + setParam.getList().toString() + "]");

		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// サービス契約番号
		whereParam.setValue(inMap.getString(JBSbatACIFM211.SVC_KEI_NO));
		
		// サービス契約内訳番号
		whereParam.setValue(inMap.getString(JBSbatACIFM211.SVC_KEI_UCWK_NO));
		
		// 料金コースコード
		whereParam.setValue(inMap.getString(JBSbatACIFM211.PCRS_CD));
		
		// 料金サービスコード
		whereParam.setValue(inMap.getString(JBSbatACIFM211.PRC_SVC_CD));
		
		// 請求年月
		whereParam.setValue(inMap.getString(JBSbatACIFM211.SEIKY_YM));
		
		// 課金先電話番号
		whereParam.setValue(inMap.getString(JBSbatACIFM211.KAKINS_TELNO));

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateacTEohTelTwGk][whereParam=" + whereParam.getList().toString() + "]");

		// 更新実行
		executeAC_T_EOH_TEL_TW_GK_PKUPDATE(setParam.getList().toArray(), whereParam.getList().toArray());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updateacTEohTelTwGk]");
	}

	/**
	 * ファイルを出力します。
	 * 
	 * @param outList 出力リスト
	 * @param outFileObj ファイルオブジェクト
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void outputRecord(ArrayList<String> outList, JBSbatBusinessFileUtil outFileObj) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputRecord]");
		
		// ファイル出力を行う
		JCCBatCommon.printDoubleQuoteBusinessFileUtil(outFileObj, outList);
		
		// 出力件数カウントアップ
		this.outputCnt++;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputRecord]");
	}

	
	/**
	 * ログを出力します。
	 * 
	 * @param logMsg ログメッセージ用ヘッダ
	 * @param fileInfo ファイル情報
	 * @param outCnt 出力件数
	 * 
	 */
	private void logPrint(String logMsg, ArrayList<Object>  fileInfo, int outCnt)
	{
		
		String[] outCntMsg = {logMsg.concat((String)fileInfo.get(0)), String.valueOf(outCnt)};
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0780AI, outCntMsg);
	}
	
	/**
	 * ファイルをクローズします。
	 * @param fileInfo ファイル情報
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void closeFile(ArrayList<Object> fileInfo) throws Exception
	{
		JBSbatBusinessFileUtil fileInst = (JBSbatBusinessFileUtil)fileInfo.get(2);
		// ファイルインスタンスがNULLでない場合
		if(null != fileInst)
		{
			
			// ファイルクローズ
			JCCBatCommon.closeBusinessFileUtil(fileInst);
		}
	}

	/**
	 * 文字を連結します
	 * @param  string 文字
	 * @return strBuf 連結した文字列
	 */
	private String makeStr(String ...string)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeStr]");
		
		StringBuffer strBuf = new StringBuffer();
		for(String str:string)
		{
			if(str == null)
			{
				strBuf.append(JACStrConst.KARA_MOJI);
			}
			else
			{
				strBuf.append(str);
			}
		}
		
		assert strBuf != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][strBuf][strBuf = " + strBuf.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}
	
	/**
	 * サービス契約情報を取得します。（メール用お客様宛）
	 * @param inMap 出力情報
	 * @return JBSbatCommonDBInterface サービス契約情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatCommonDBInterface selectKkTSvcKeiMail(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectKkTSvcKeiMail]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(super.opeDate);												// バッチ運用日
		paramList.setValue(inMap.getString(JBSbatACIFM211.SVC_KEI_NO));		// サービス契約番号
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectKkTSvcKeiMail][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeKK_T_SVC_KEI_AC_SELECT_020(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_KK_T_SVC_KEI.selectNext();
		
		// 結果取得
		if(dbMap == null)
		{
			
			// DB未存在エラー
			String[] outCntMsg = {JBSbatKK_T_SVC_KEI.TABLE_NAME, paramList.getList().toString()};
			
			// エラーコード："EACB0260CH"（DB未存在エラー）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0260CH, outCntMsg);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectKkTSvcKeiMail][KK_T_SVC_KEI_AC_SELECT_020:dbMap=" + dbMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectKkTSvcKeiMail]");
		return dbMap;
	}
	
	/**
	 * 変換用マップの設定を行います。
	 * @param inMap 出力情報
	 * @param dbMap サービス契約情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setChgeMap(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface dbMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectKkTSvcKeiMail]");
		
		// 入力情報．通話料指定額到達通知指定金額
		String tuwaTuchiAmnt = inMap.getBigDecimal(JBSbatACIFM211.TWRYO_STIAM_TTU_TCHI_STIAM).toString();
		
		this.tmpChgeMap.put(MAP_KEY_1, dbMap.getString(JBSbatCK_T_CUST.CUST_NM));				// お客様．お客様名
		this.tmpChgeMap.put(MAP_KEY_2, dbMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM));			// 請求契約．送付先名
		this.tmpChgeMap.put(MAP_KEY_3, inMap.getString(JBSbatACIFM211.KAKINS_TELNO));			// 入力情報．課金先電話番号
		this.tmpChgeMap.put(MAP_KEY_4, JPCFomatString.formatNumber(tuwaTuchiAmnt));				// 通話料指定額到達通知指定金額（カンマ編集）
		this.tmpChgeMap.put(MAP_KEY_A, String.valueOf(this.mailCnt));							// 退避．メール件数
		this.tmpChgeMap.put(MAP_KEY_B, String.valueOf(this.letterCnt));						// 退避．ハガキ件数
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectKkTSvcKeiMail]");
		return;
	}

	/**
	 * 変換用マップの設定を行います。（メール用お客様サポート宛）
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setChgeMapSprt() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectKkTSvcKeiMail]");
		
		this.tmpChgeMap.put(MAP_KEY_1, JACStrConst.KARA_MOJI);				// ""
		this.tmpChgeMap.put(MAP_KEY_2, JACStrConst.KARA_MOJI);				// ""
		this.tmpChgeMap.put(MAP_KEY_3, JACStrConst.KARA_MOJI);				// ""
		this.tmpChgeMap.put(MAP_KEY_4, JACStrConst.KARA_MOJI);				// ""
		this.tmpChgeMap.put(MAP_KEY_A, String.valueOf(this.mailCnt));		// 退避．メール件数
		this.tmpChgeMap.put(MAP_KEY_B, String.valueOf(this.letterCnt));	// 退避．ハガキ件数
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectKkTSvcKeiMail]");
		return;
	}
}
