/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCRHotVoiceChuushutu
*	ソースファイル名	：JBSbatCRHotVoiceChuushutu.java
*	作成者				：富士通　
*	作成日				：2011年06月13日
*＜機能概要＞
*　ホットボイス抽出処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/13   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCRBatCommon;
import eo.business.util.table.JBSbatCC_T_EFILE_KANRI;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatCK_T_PROSCST;
import eo.business.util.table.JBSbatCR_M_TAIORRK_BATCTRL;
import eo.business.util.table.JBSbatCR_T_TAIOKRK_DTL;
import eo.business.util.table.JBSbatCR_T_TAIOKRK_UCWK;
import eo.business.util.table.JBSbatCR_T_TAIOKRK_UW_CTGR;
import eo.business.util.table.JBSbatCR_T_TAIO_KIROK;
import eo.business.util.table.JBSbatCR_T_TORK_EFILE_KNRI;
import eo.business.util.table.JBSbatKK_M_SVC;
import eo.business.util.table.JBSbatKK_T_KAISEN_TG_SVKEI;
import eo.business.util.table.JBSbatKK_T_KAISEN_USE_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_CD_NM_KANRI;
import eo.business.util.table.JBSbatZM_M_USER;
import eo.common.constant.JCRStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCRUtilCommon;
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;

/**
* ホットボイス抽出 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCRHotVoiceChuushutu extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(対応記録明細)*/
	private static final String D_TBL_NAME_CR_T_TAIOKRK_DTL = "CR_T_TAIOKRK_DTL";

	/** テーブル(対応記録内訳)*/
	private static final String D_TBL_NAME_CR_T_TAIOKRK_UCWK = "CR_T_TAIOKRK_UCWK";

	/** テーブル(対応記録)*/
	private static final String D_TBL_NAME_CR_T_TAIO_KIROK = "CR_T_TAIO_KIROK";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";

	/** テーブル(回線使用契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_USE_KEI = "KK_T_KAISEN_USE_KEI";

	/** テーブル(問合せ客)*/
	private static final String D_TBL_NAME_CK_T_PROSCST = "CK_T_PROSCST";

	/** テーブル(対応記録内訳カテゴリー)*/
	private static final String D_TBL_NAME_CR_T_TAIOKRK_UW_CTGR = "CR_T_TAIOKRK_UW_CTGR";

	/** テーブル(サービス契約回線内訳)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_KAISEN_UW = "KK_T_SVKEI_KAISEN_UW";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** テーブル(対応履歴電子ファイル管理)*/
	private static final String D_TBL_NAME_CR_T_TORK_EFILE_KNRI = "CR_T_TORK_EFILE_KNRI";

	/** テーブル(対応記録内訳抽出ワーク)*/
	private static final String D_TBL_NAME_CR_T_TIOKR_UW_CST_WK = "CR_T_TIOKR_UW_CST_WK";

	/** SQL定義キー(CR_SELECT_004)*/
	private static final String CR_T_TAIOKRK_DTL_CR_SELECT_004 = "CR_SELECT_004";

	/** SQL定義キー(CR_SELECT_002)*/
	private static final String CR_T_TAIOKRK_UCWK_CR_SELECT_002 = "CR_SELECT_002";

	/** SQL定義キー(CR_SELECT_008)*/
	private static final String CR_T_TAIO_KIROK_CR_SELECT_008 = "CR_SELECT_008";

	/** SQL定義キー(CR_SELECT_003)*/
	private static final String KK_T_SVC_KEI_CR_SELECT_003 = "CR_SELECT_003";

	/** SQL定義キー(CR_SELECT_001)*/
	private static final String KK_T_KAISEN_TG_SVKEI_CR_SELECT_001 = "CR_SELECT_001";

	/** SQL定義キー(CR_SELECT_001)*/
	private static final String KK_T_KAISEN_USE_KEI_CR_SELECT_001 = "CR_SELECT_001";

	/** SQL定義キー(CR_SELECT_006)*/
	private static final String CK_T_PROSCST_CR_SELECT_006 = "CR_SELECT_006";

	/** SQL定義キー(CR_SELECT_002)*/
	private static final String CR_T_TAIOKRK_UW_CTGR_CR_SELECT_002 = "CR_SELECT_002";

	/** SQL定義キー(CR_SELECT_001)*/
	private static final String KK_T_SVKEI_KAISEN_UW_CR_SELECT_001 = "CR_SELECT_001";

	/** SQL定義キー(CR_SELECT_003)*/
	private static final String CK_T_CUST_CR_SELECT_003 = "CR_SELECT_003";

	/** SQL定義キー(CR_SELECT_004)*/
	private static final String CR_T_TORK_EFILE_KNRI_CR_SELECT_004 = "CR_SELECT_004";

	/** SQL定義キー(CR_SELECT_003)*/
	private static final String CR_T_TORK_EFILE_KNRI_CR_SELECT_003 = "CR_SELECT_003";

	/** SQL定義キー(CR_UPDATE_002)*/
	private static final String CR_T_TORK_EFILE_KNRI_CR_UPDATE_002 = "CR_UPDATE_002";

	/** SQL定義キー(CR_DELETE_002)*/
	private static final String CR_T_TIOKR_UW_CST_WK_CR_DELETE_002 = "CR_DELETE_002";

	/** テーブルアクセスクラス(対応記録明細)*/
	private JBSbatSQLAccess db_CR_T_TAIOKRK_DTL = null;

	/** テーブルアクセスクラス(対応記録内訳)*/
	private JBSbatSQLAccess db_CR_T_TAIOKRK_UCWK = null;

	/** テーブルアクセスクラス(対応記録)*/
	private JBSbatSQLAccess db_CR_T_TAIO_KIROK = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;

	/** テーブルアクセスクラス(回線使用契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_USE_KEI = null;

	/** テーブルアクセスクラス(問合せ客)*/
	private JBSbatSQLAccess db_CK_T_PROSCST = null;

	/** テーブルアクセスクラス(対応記録内訳カテゴリー)*/
	private JBSbatSQLAccess db_CR_T_TAIOKRK_UW_CTGR = null;

	/** テーブルアクセスクラス(サービス契約回線内訳)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_KAISEN_UW = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** テーブルアクセスクラス(対応履歴電子ファイル管理)*/
	private JBSbatSQLAccess db_CR_T_TORK_EFILE_KNRI = null;

	/** テーブルアクセスクラス(対応記録内訳抽出ワーク)*/
	private JBSbatSQLAccess db_CR_T_TIOKR_UW_CST_WK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** テーブル(対応履歴バッチ制御)*/
	private static final String D_TBL_NAME_CR_M_TAIORRK_BATCTRL = "CR_M_TAIORRK_BATCTRL";

	/** テーブルアクセスクラス(対応記録内訳抽出ワーク)*/
	private JBSbatSQLAccess db_CR_M_TAIORRK_BATCTRL = null;
	
	// 定数
	/** CSVファイルの内容を区切る区切り文字 */
	private static final String KUGIRIMOJI = ",";
	
	/** CSVファイル名を作成するための拡張子 */
	private static final String EXT_CSV = ".csv";

	/** 対応記録内訳カテゴリーMAX件数 */
	private static final int UWKCTGLLEN = 11;

	/** 加入者を表す定数 */
	private static final String KANYUUSYA = "加入者";
	
	/** 未加入を表す定数 */
	private static final String MIKANYUU = "未加入";
	
	/** 抽出ファイル保存期間(日) */
	private String hozonKikan = null;
	
	/** 抽出ファイル保存先パス */
	private String hotVoicePath = null;

	/** システム日付時分秒(17桁) */
	private String sysDtms = null;

	/** システム日付時分秒(14桁) */
	private String sysDtm = null;

	/** 主処理実行フラグ */
	private boolean executeFlg = false;

	/** ホットボイスファイルオブジェクト */
	private JBSbatBusinessFileUtil hotVoiceFileObj = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CR_T_TAIOKRK_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIOKRK_DTL);
		db_CR_T_TAIOKRK_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIOKRK_UCWK);
		db_CR_T_TAIO_KIROK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIO_KIROK);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
		db_KK_T_KAISEN_USE_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_USE_KEI);
		db_CK_T_PROSCST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_PROSCST);
		db_CR_T_TAIOKRK_UW_CTGR = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIOKRK_UW_CTGR);
		db_KK_T_SVKEI_KAISEN_UW = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_KAISEN_UW);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_CR_T_TORK_EFILE_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TORK_EFILE_KNRI);
		db_CR_T_TIOKR_UW_CST_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TIOKR_UW_CST_WK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		db_CR_M_TAIORRK_BATCTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_M_TAIORRK_BATCTRL);
		
		// 初期処理開始
		super.logPrint.printDebugLog("初期処理開始");

		// 処理日時取得(共通部品)
		sysDtms = JCRBatCommon.getSysDateTimeStamp();

		// プロパティーファイルチェック＆設定
		String hozonPath = checkApplicationProperty();
		
		// ホットボイス抽出ファイル作成
		createFile(hozonPath);
		
		super.logPrint.printDebugLog("初期処理終了");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 主処理開始
		super.logPrint.printDebugLog("主処理開始");
		
		// 主処理実行フラグをONにする
		executeFlg = true;
		// システム日付時分秒を取得
		sysDtm = inMap.getString("SYSDTM");
		
		// (1),(2)のShell側で実施
		
		// 対応履歴番号取得
		String taioKiokNo = inMap.getString(JBSbatCR_T_TAIOKRK_DTL.TAIO_KIROK_NO);
		
		// (3) ホットボイスデータ検索(SQL定義キー：対応記録内訳テーブルCR_SELECT_002)
		List<JBSbatCommonDBInterface> taioKirokUcwkList = selectUcwkData(taioKiokNo);
		if(taioKirokUcwkList != null)
		{
			for(int i = 0; i < taioKirokUcwkList.size(); i++)
			{
				// (4) ホットボイス抽出情報取得(SQL定義キー:対応記録テーブルCR_SELECT_008)
				Map<String, String> taioKirokMap = selectTaioKiok(taioKiokNo);
				Map<String, String> hotVoiceOutputMap = new HashMap<String, String>();
				String svcKeiyakuNo    = taioKirokMap.get(JBSbatCR_T_TAIO_KIROK.SVC_KEI_NO);
				String toiawaseKyakuNo = taioKirokMap.get(JBSbatCR_T_TAIO_KIROK.PROSCST_NO);

				// サービス契約番号が取得できた場合
				if(svcKeiyakuNo != null && !"".equals(svcKeiyakuNo))
				{
					// (5) (a)〜(e)抽出情報データ情報取得
					hotVoiceOutputMap = selectSvcKeiyaku(svcKeiyakuNo);	
				}
				else
				{
					// 問合せ客情報取得
					// (5) (f)問合せ客情報取得(SQL定義キー:問合せ客テーブルCR_SELECT_001)
					hotVoiceOutputMap = selectToiawaseKyaku(toiawaseKyakuNo);
				}
				
				JBSbatCommonDBInterface taioKirokUcwkData = taioKirokUcwkList.get(i);
				
				String taiokirokUcwkNo = taioKirokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.TAIO_KIROK_UCWK_NO);
				// (5) (g)カテゴリー情報取得(SQL定義キー:対応記録内訳カテゴリーテーブルCR_SELECT_001)
				List<String> ctglList = selectUwkCtgr(taioKiokNo, taiokirokUcwkNo);
				// (6) ホットボイス抽出情報ファイル出力
				writeHotVoiceFile(taioKirokMap, inMap, taioKirokUcwkData, hotVoiceOutputMap, ctglList);
				// (7) 対応記録内訳抽出ワークデータ削除
				deleteUcwkWork(taioKirokUcwkData);
			}
		}

		// 主処理終了
		super.logPrint.printDebugLog("主処理終了");
		return null;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CR_T_TAIOKRK_DTL.close();
		db_CR_T_TAIOKRK_UCWK.close();
		db_CR_T_TAIO_KIROK.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_KAISEN_TG_SVKEI.close();
		db_KK_T_KAISEN_USE_KEI.close();
		db_CK_T_PROSCST.close();
		db_CR_T_TAIOKRK_UW_CTGR.close();
		db_KK_T_SVKEI_KAISEN_UW.close();
		db_CK_T_CUST.close();
		db_CR_T_TORK_EFILE_KNRI.close();
		db_CR_T_TIOKR_UW_CST_WK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		db_CR_M_TAIORRK_BATCTRL.close();

		// 終了処理開始
		super.logPrint.printDebugLog("終了処理開始");
		
		// (1)主処理未実行チェック
		if(!executeFlg)
		{
			// 処理日時取得(共通部品)
			sysDtm = commonItem.getOpeDate() + "235959";

			super.logPrint.printDebugLog("ホットボイス抽出対象レコードはありません。");
		}
		// (2)ファイルクローズ処理
		fileObjClose();
		
		// (3) 重複ファイル削除
		deleteHotVoiceDenshiFile(commonItem, hotVoicePath);
		// (4) 電子ファイル管理テーブル登録
		entryHotVoiceFile(commonItem, hotVoicePath);
		// (5) 保存期間経過ファイル削除
		deleteLimitOverFile();
		
		// (6) 前回実行日更新
		updateJikkoubi();

		// データアクセスオブジェクトクローズ
		JCRBatCommon.closeDataAccessObj(commonItem);

		// 終了処理終了
		super.logPrint.printDebugLog("終了処理終了");
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CR_SELECT_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 executeCR_T_TAIOKRK_UCWK_CR_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CR_T_TAIOKRK_UCWK.selectBySqlDefine(paramList, CR_T_TAIOKRK_UCWK_CR_SELECT_002);
	}

	/**
	 * SQLKEY(CR_SELECT_008)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	対応記録番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_TAIO_KIROK_CR_SELECT_008(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CR_T_TAIO_KIROK.selectBySqlDefine(paramList, CR_T_TAIO_KIROK_CR_SELECT_008);
	}

	/**
	 * SQLKEY(CR_SELECT_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_CR_SELECT_003(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_CR_SELECT_003);
	}

	/**
	 * SQLKEY(CR_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_KAISEN_TG_SVKEI_CR_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_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_CR_SELECT_001);
	}

	/**
	 * SQLKEY(CR_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KAISEN_USE_KEI_CR_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_USE_KEI.selectBySqlDefine(paramList, KK_T_KAISEN_USE_KEI_CR_SELECT_001);
	}

	/**
	 * SQLKEY(CR_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	問合せ客番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_PROSCST_CR_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CK_T_PROSCST.selectBySqlDefine(paramList, CK_T_PROSCST_CR_SELECT_006);
	}

	/**
	 * SQLKEY(CR_SELECT_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 executeCR_T_TAIOKRK_UW_CTGR_CR_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CR_T_TAIOKRK_UW_CTGR.selectBySqlDefine(paramList, CR_T_TAIOKRK_UW_CTGR_CR_SELECT_002);
	}

	/**
	 * SQLKEY(CR_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_SVKEI_KAISEN_UW_CR_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_SVKEI_KAISEN_UW.selectBySqlDefine(paramList, KK_T_SVKEI_KAISEN_UW_CR_SELECT_001);
	}

	/**
	 * SQLKEY(CR_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	適用開始年月日
	 *		 	適用終了年月日
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_CR_SELECT_003(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_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_CR_SELECT_003);
	}

	/**
	 * SQLKEY(CR_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	対応履歴文書ファイル名
	 *		 	文書種別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_TORK_EFILE_KNRI_CR_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CR_T_TORK_EFILE_KNRI.selectBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_SELECT_004);
	}

	/**
	 * SQLKEY(CR_SELECT_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 executeCR_T_TORK_EFILE_KNRI_CR_SELECT_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_CR_T_TORK_EFILE_KNRI.selectBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_SELECT_003);
	}

	/**
	 * SQLKEY(CR_UPDATE_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 executeCR_T_TORK_EFILE_KNRI_CR_UPDATE_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());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_CR_T_TORK_EFILE_KNRI.executeBySqlDefine(paramList, CR_T_TORK_EFILE_KNRI_CR_UPDATE_002);
	}

	/**
	 * SQLKEY(CR_DELETE_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 executeCR_T_TIOKR_UW_CST_WK_CR_DELETE_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CR_T_TIOKR_UW_CST_WK.executeBySqlDefine(paramList, CR_T_TIOKR_UW_CST_WK_CR_DELETE_002);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * プロパティ情報設定とチェック<br>
	 * 初期処理でプロパティ情報を取得し設定します<br>
	 * @return 保存先のパス
	 * @throws Exception 例外
	 */
	private String checkApplicationProperty() throws Exception
	{
		// 抽出ファイル保存期間(日)を取得
		hozonKikan = JCRBatCommon.getApplicationConst("CR_CHUSHUTU_FILE_SAVE_DATE");
		if (hozonKikan == null  || "".equals(hozonKikan.trim()))
		{
			// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0010KW, new String[] { "抽出ファイル保存期間(日)" });
		}
		// 数値チェック
		if(!JCRBatCommon.isHannkakuSuuji1(hozonKikan))
		{
			// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0010KW, new String[] { "抽出ファイル保存期間(日)" });
		}

		// 抽出ファイル保存先パスを取得
		String hozonPath = JCRBatCommon.getApplicationConst("CR_CHUSHUTU_FILE_DIR");
		if (hozonPath == null || "".equals(hozonPath.trim()))
		{
			// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0010KW, new String[] { "取込元CSV配置パス:"});
		}
		else
		{
			File csvPath = JCRUtilCommon.checkDirExist(hozonPath);
			if (csvPath == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0160KW, new String[]{hozonPath});
			}
			super.logPrint.printDebugLog("取込元CSV配置パス:" + csvPath);
		}
		
		return hozonPath;
	}
	
	/**
	 * ホットボイス抽出ファイル作成<br>
	 * @param hozonPath ホットボイス保存パス
	 * @throws Exception 例外
	 */
	private void createFile(String hozonPath) throws Exception
	{
		// ファイル名を取得
		hotVoicePath = hozonPath + JCRStrConst.FILE_KUGIRI  + "HotVoice_" + JCRBatCommon.getSysDate() +  EXT_CSV;
		// ホットボイスファイルを作成
		hotVoiceFileObj = JCRBatCommon.createBusinessFileUtil(hotVoicePath, JCRStrConst.DEFAULT_ENCODE, JCRStrConst.KAIGYO_CD, KUGIRIMOJI);
		super.logPrint.printDebugLog("ホットボイスファイル作成:" + hotVoicePath);
	}

	/**
	 * 対応記録内訳情報取得<br>
	 * @param バッチ処理共通インターフェースリスト
	 * @param taioKiokNo 対応記録番号
	 * @return List<JBSbatCommonDBInterface>
	 * @throws Exception 例外
	 */
	private List<JBSbatCommonDBInterface> selectUcwkData(String taioKiokNo) throws Exception
	{
		// (3) ホットボイスデータ検索(SQL定義キー：対応記録内訳テーブルCR_SELECT_002)
		executeCR_T_TAIOKRK_UCWK_CR_SELECT_002(new Object[]{taioKiokNo});
		return JCRBatCommon.getSelectedDataList(db_CR_T_TAIOKRK_UCWK);
	}

	/**
	 * ホットボイス抽出情報取得<br>
	 * @param  taioKiokNo 対応記録番号
	 * @return Map<String, String> 対応区分抽出結果
	 * @throws Exception 例外
	 */
	private Map<String, String> selectTaioKiok(String taioKiokNo) throws Exception
	{
		// (a) 対応記録テーブルからホットボイス抽出情報の登録に必要なレコードを取得する。
		Map<String, String> taioKirokMap = new HashMap<String, String>();
		executeCR_T_TAIO_KIROK_CR_SELECT_008(new Object[]{taioKiokNo});
		JBSbatCommonDBInterface selectedData = db_CR_T_TAIO_KIROK.selectNext();
		if(selectedData == null)
		{
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.ADD_DTM, "");
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.TITLE, "");
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI, "");
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.SVC_KEI_NO, "");
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.PROSCST_NO, "");
			taioKirokMap.put("STAT_NM", "");
			taioKirokMap.put("SBT_NM", "");
		}
		else
		{
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.ADD_DTM, selectedData.getString(JBSbatCR_T_TAIO_KIROK.ADD_DTM));
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.TITLE, selectedData.getString(JBSbatCR_T_TAIO_KIROK.TITLE));
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI, selectedData.getString(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI));
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.SVC_KEI_NO, selectedData.getString(JBSbatCR_T_TAIO_KIROK.SVC_KEI_NO));
			taioKirokMap.put(JBSbatCR_T_TAIO_KIROK.PROSCST_NO, selectedData.getString(JBSbatCR_T_TAIO_KIROK.PROSCST_NO));
			taioKirokMap.put("STAT_NM", selectedData.getString("STAT_NM"));
			taioKirokMap.put("SBT_NM", selectedData.getString("SBT_NM"));
		}
		return taioKirokMap;
	}

	/**
	 * サービス抽出情報取得<br>
	 * @param  svcKeiyakuNo サービス契約番号
	 * @return Map<String, String> サービス抽出結果
	 * @throws Exception 例外
	 */
	private Map<String, String> selectSvcKeiyaku(String svcKeiyakuNo) throws Exception
	{
		Map<String, String> resultMap = new HashMap<String, String>();
		String sysDate = sysDtm.substring(0, 8);

		// (a)サービス契約テーブルからサービスコードとSYSIDを取得する。(SQL定義キー:サービス契約テーブルCR_SELECT_003)
		executeKK_T_SVC_KEI_CR_SELECT_003(new Object[]{svcKeiyakuNo, sysDate});
		JBSbatCommonDBInterface selectData = db_KK_T_SVC_KEI.selectNext();
		String sysId = selectDbData(selectData, JBSbatKK_T_SVC_KEI.SYSID);

		// サービス契約情報をMapに格納
		resultMap.put(JBSbatKK_T_SVC_KEI.SVC_KEI_NO, svcKeiyakuNo);
		resultMap.put(JBSbatKK_T_SVC_KEI.SVC_CD, selectDbData(selectData, JBSbatKK_T_SVC_KEI.SVC_CD));
		resultMap.put(JBSbatKK_T_SVC_KEI.SYSID, sysId);
		resultMap.put("SVCNM", selectDbData(selectData, JBSbatKK_M_SVC.SVC_NM));

		// (b) 回線対象サービス契約情報取得(SQL定義キー:回線対象サービス契約テーブルCR_SELECT_001)
		executeKK_T_KAISEN_TG_SVKEI_CR_SELECT_001(new Object[]{svcKeiyakuNo, sysDtm, sysDtm});
		selectData = db_KK_T_KAISEN_TG_SVKEI.selectNext();
		String kaisenUwNo = selectDbData(selectData, JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
		resultMap.put(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO, kaisenUwNo);

		if(!"".equals(kaisenUwNo))
		{
			// サービス回線内訳番号が取得できた場合

			// (c) 回線場所情報取得(SQL定義キー:サービス契約回線内訳テーブルCR_SELECT_001)
			executeKK_T_SVKEI_KAISEN_UW_CR_SELECT_001(new Object[]{kaisenUwNo});
			// 回線場所情報取得
			selectData = db_KK_T_SVKEI_KAISEN_UW.selectNext();

			resultMap.put(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD, selectDbData(selectData, JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD));
			resultMap.put(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM, selectDbData(selectData, JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM));
			resultMap.put(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM, selectDbData(selectData, JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM));

		}
		else
		{
			resultMap.put(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD, "");
			resultMap.put(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM, "");
			resultMap.put(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM,  "");
		}

		// SYSIDから回線使用契約テーブルのマンションIDとお客様情報を取得する。
		if(!"".equals(sysId))
		{
			// SYSIDの取得ができた場合

			// (d) 回線使用契約マンション情報取得(SQL定義キー:回線使用契約テーブルCR_SELECT_001)
			executeKK_T_KAISEN_USE_KEI_CR_SELECT_001(new Object[]{sysId, sysDate});
			selectData = db_KK_T_KAISEN_USE_KEI.selectNext();
			resultMap.put(JBSbatKK_T_KAISEN_USE_KEI.MANSION_ID, selectDbData(selectData, JBSbatKK_T_KAISEN_USE_KEI.MANSION_ID));

			// (e) お客様情報取得(SQL定義キー:お客様テーブルCR_SELECT_003)
			executeCK_T_CUST_CR_SELECT_003(new Object[]{sysDate, sysDate, sysId, sysDate});
			selectData = db_CK_T_CUST.selectNext();
			resultMap.put(JBSbatCK_T_CUST.MEMBER_SBT_CD, selectDbData(selectData, JBSbatCK_T_CUST.MEMBER_SBT_CD));
			resultMap.put(JBSbatCK_T_CUST.CUST_BIRTHD, selectDbData(selectData, JBSbatCK_T_CUST.CUST_BIRTHD));
			resultMap.put("SEIBETU", selectDbData(selectData, JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
		}
		else
		{
			resultMap.put(JBSbatKK_T_KAISEN_USE_KEI.MANSION_ID, "");
			resultMap.put(JBSbatCK_T_CUST.MEMBER_SBT_CD, "");
			resultMap.put(JBSbatCK_T_CUST.CUST_BIRTHD, "");
			resultMap.put("SEIBETU", "");
		}

		return resultMap;
	}

	/**
	 * 問合せ客情報抽出情報取得<br>
	 * @param  toiawaseKyakuNo 問合せ客番号
	 * @return Map<String, String> 問合せ客情報抽出情報結果
	 * @throws Exception 例外
	 */
	private Map<String, String> selectToiawaseKyaku(String toiawaseKyakuNo) throws Exception
	{
		Map<String, String> resultMap = new HashMap<String, String>();
		// 問合せ客情報取得(SQL定義キー:問合せ客テーブルCR_SELECT_001)
		
		executeCK_T_PROSCST_CR_SELECT_006(new Object[]{toiawaseKyakuNo});
		JBSbatCommonDBInterface selectData = db_CK_T_PROSCST.selectNext();

		resultMap.put(JBSbatCK_T_PROSCST.PROSCST_PCD, selectDbData(selectData, JBSbatCK_T_PROSCST.PROSCST_PCD));
		resultMap.put(JBSbatCK_T_PROSCST.PROSCST_STATE_NM, selectDbData(selectData, JBSbatCK_T_PROSCST.PROSCST_STATE_NM));
		resultMap.put(JBSbatCK_T_PROSCST.PROSCST_CITY_NM, selectDbData(selectData, JBSbatCK_T_PROSCST.PROSCST_CITY_NM));
		resultMap.put(JBSbatCK_T_PROSCST.PROSCST_ADRTTM, selectDbData(selectData, JBSbatCK_T_PROSCST.PROSCST_ADRTTM));
		resultMap.put("SEIBETU", selectDbData(selectData, JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
		resultMap.put(JBSbatCK_T_PROSCST.PROSCST_BIRTHD, selectDbData(selectData, JBSbatCK_T_PROSCST.PROSCST_BIRTHD));

		return resultMap;
	}
	
	/**
	 * カテゴリー情報取得<br>
	 * @param  taioKiokNo 対応記録番号
	 * @param  toiawaseKyakuNo 対応記録内訳番号
	 * @return Map<String, String> カテゴリー情報
	 * @throws Exception 例外
	 */
	private List<String> selectUwkCtgr(String taioKiokNo, String toiawaseKyakuNo) throws Exception
	{
		List<String> resultList = new ArrayList<String>();
		// カテゴリー情報取得(SQL定義キー:対応記録内訳カテゴリーテーブルCR_SELECT_001)
		executeCR_T_TAIOKRK_UW_CTGR_CR_SELECT_002(new Object[]{taioKiokNo, toiawaseKyakuNo});
		List<JBSbatCommonDBInterface> uwkCtglList =  JCRBatCommon.getSelectedDataList(db_CR_T_TAIOKRK_UW_CTGR);
		if(uwkCtglList != null && uwkCtglList.size() != 0)
		{
			for(int i = 0; i < UWKCTGLLEN; i++)
			{
				if(i < uwkCtglList.size())
				{
					JBSbatCommonDBInterface selectData = uwkCtglList.get(i);
					resultList.add(selectDbData(selectData, JBSbatCR_T_TAIOKRK_UW_CTGR.TAIOKRK_UW_CTGR_NM));
				}
				else
				{
					resultList.add("");
				}
			}
		}
		else
		{
			for(int i = 0; i < UWKCTGLLEN; i++)
			{
				resultList.add("");
			}
		}
		return resultList;
	}
	
	
	/**
	 * NULL文字変換<br>
	 * @param  selectData SQL実行結果
	 * @param  keyData    キー項目
	 * @return String DB取得結果
	 * @throws Exception 例外
	 */
	private String selectDbData(JBSbatCommonDBInterface selectData, String keyData) throws Exception
	{
		String resultData = null;
		
		if(selectData == null)
		{
			return "";
		}
		resultData = selectData.getString(keyData);
		
		if(resultData == null)
		{
			resultData = "";
		}
		return resultData;
	}

	/**
	 * ファイルオブジェクトクローズ処理<br>
	 * 終了処理でファイル作成オブジェクトのクローズを行う。<br>
	 * @throws Exception 例外
	 */
	private void fileObjClose() throws Exception
	{
		// ファイルオブジェクトのクローズ
		JCRBatCommon.closeBusinessFileUtil(hotVoiceFileObj);
		super.logPrint.printDebugLog("ファイルクローズ処理実行");
	}
	

	/**
	 * 電子ファイル管理テーブル登録<br>
	 * ホットボイス抽出ファイルを電子ファイル管理テーブルに登録
	 * @param commonItem バッチ共通パラメータ電文
	 * @param hotVoicePath2 ホットボイス抽出パス
	 * @throws Exception 例外
	 */
	private void entryHotVoiceFile(JBSbatCommonItem commonItem, String hotVoicePath2) throws Exception
	{
		String[] fileData = JCRBatCommon.createDenshiFile(commonItem, null, hotVoicePath2, null);
		// 電子ファイル管理番号取得
		String denshiKanriNo = fileData[0];
		// 対応履歴電子ファイル管理テーブル登録
		entryTaioBunsho(denshiKanriNo, hotVoicePath2);
		// ホットボイス抽出ファイル削除
		File hotVoiceFile = new File(JCRUtilCommon.inspection(hotVoicePath2));
		hotVoiceFile.delete();
		super.logPrint.printDebugLog("取込元CSVファイル配置パス:" + hotVoicePath + "ファイルを削除");
	}

	/**
	 * 前回実行日更新<br>
	 * 終了処理でホットボイス抽出処理の実施日付を登録
	 * @throws Exception 例外
	 */
	private void updateJikkoubi() throws Exception
	{
		JBSbatCommonDBInterface where = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface updateVaule = new JBSbatCommonDBInterface();

		updateVaule.setValue(JBSbatCR_M_TAIORRK_BATCTRL.BATCTRL_VALUE, sysDtm);
		where.setValue(JBSbatCR_M_TAIORRK_BATCTRL.TAIORRK_BATCTRL_NO, JCRStrConst.BATCTRL_HOTVOICE_ZENKAI_DTM);
		db_CR_M_TAIORRK_BATCTRL.updateByPrimaryKeys(where, updateVaule);
		super.logPrint.printDebugLog("前回実行日付更新:" + sysDtm);
	}
	
	/**
	 * 電子ファイル管理テーブル論理削除<br>
	 * @param commonItem バッチ共通パラメータ電文
	 * @param filePath 抽出ファイルパス
	 * @throws Exception 例外
	 */
	private void deleteHotVoiceDenshiFile(JBSbatCommonItem commonItem, String filePath) throws Exception
	{
		String hotVoiceFileName = new File(JCRUtilCommon.inspection(filePath)).getName();
		// 重複ファイルチェック
		executeCR_T_TORK_EFILE_KNRI_CR_SELECT_004(new Object[]{hotVoiceFileName, JCRStrConst.CD_DIV_BUNSHO_SBT_CD_HOTVOICE});
		JBSbatCommonDBInterface batDbInterface = db_CR_T_TORK_EFILE_KNRI.selectNext();
		if(batDbInterface == null)
		{
			super.logPrint.printDebugLog("ファイル名：" + filePath + "は電子ファイル管理テーブルに存在しません。");
			return;
		}
		// 
		super.logPrint.printDebugLog("ファイル名：" + filePath + "は電子ファイル管理テーブルに存在するため論理削除します。");

		// 共通部品電子ファイル管理番号
		String denshiKanriNo = batDbInterface.getString(JBSbatCR_T_TORK_EFILE_KNRI.EFILE_KANRI_NO);
		
		deleteDenshiFile(denshiKanriNo);
	}
	
	/**
	 * 電子文書ファイル論理削除<br>
	 * @param denshiKanriNo 電子対応記録番号
	 * @throws Exception 例外
	 */
	private void deleteDenshiFile(String denshiKanriNo) throws Exception
	{
		if(denshiKanriNo == null)
		{
			return;
		}
		// 対応履歴電子ファイル管理テーブルのレコードを論理削除
		executeCR_T_TORK_EFILE_KNRI_CR_UPDATE_002(new Object[]{sysDtms,
												batchUserId, sysDtms,
												batchUserId, denshiKanriNo});

		// 共通電子ファイル管理テーブルのレコードを論理削除
		JCRBatCommon.deleteDenshiFile(commonItem, denshiKanriNo);
		super.logPrint.printDebugLog("対応履歴電子ファイル管理、電子ファイル管理テーブル論理削除");
		super.logPrint.printDebugLog("電子ファイル管理番号:" + denshiKanriNo);
	}

	/**
	 * 対応履歴電子ファイル管理テーブル登録<br>
	 * ホットボイス抽出ファイルの情報を対応履歴電子ファイル管理テーブルに登録<br>
	 * @param denshiKanriNo 電子対応記録番号
	 * @param failePath 登録対象ファイルパス
	 * @throws Exception 例外
	 */
	private void entryTaioBunsho(String denshiKanriNo, String failePath) throws Exception
	{
		Map<String, String> dataMap = new HashMap<String, String>();
		
		// 文書種別コード
		dataMap.put(JBSbatCR_T_TORK_EFILE_KNRI.BUNSHO_SBT_CD, JCRStrConst.CD_DIV_BUNSHO_SBT_CD_HOTVOICE);

		// 電子ファイル管理番号
		dataMap.put(JBSbatCR_T_TORK_EFILE_KNRI.EFILE_KANRI_NO, denshiKanriNo);

		// 対応履歴文書ファイル名
		dataMap.put(JBSbatCR_T_TORK_EFILE_KNRI.TAIORRKI_BUNSHO_FILE_NM, new File(JCRUtilCommon.inspection(failePath)).getName());

		JCRBatCommon.entryTaioBunsho(commonItem, dataMap);
		super.logPrint.printDebugLog("対応履歴電子ファイル管理、電子ファイル管理テーブル登録");
		super.logPrint.printDebugLog("電子ファイル管理番号:" + denshiKanriNo);
		super.logPrint.printDebugLog("ファイル名:" + failePath);
	}

	/**
	 * ホットボイス抽出情報取得<br>
	 * ホットボイス抽出ファイル書き込み<br>
	 * @param taioKiokData 対応記録情報
	 * @param taioKiokDtl 対応記録明細情報
	 * @param taioKiokUcwkData 対応記録内訳情報
	 * @param hotVoiceOutputMap ホットボイス抽出情報
	 * @param ctglList カテゴリー情報取得
	 * @throws Exception 例外
	 */
	private void writeHotVoiceFile(Map<String, String> taioKiokData,
									JBSbatServiceInterfaceMap taioKiokDtl,
									JBSbatCommonDBInterface taioKiokUcwkData,
									Map<String, String> hotVoiceOutputMap,
									List<String> ctglList) throws Exception
	{
		
		ArrayList<String> inputDataList = new ArrayList<String>();

		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokDtl.getString(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_NO)));					// 1.対応記録_対応記録番号
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.TAIO_KIROK_UCWK_NO)));		// 2.対応記録内訳_対応記録内訳番号

		// サービス契約番号取得
		String svcKeiyakuNo = hotVoiceOutputMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
		if(svcKeiyakuNo != null && !"".equals(svcKeiyakuNo))
		{
			// 加入済み顧客の場合
			inputDataList.add(JCRUtilCommon.addDblQut(KANYUUSYA));																	//  3.顧客タイプ
			inputDataList.add(JCRUtilCommon.addDblQut(svcKeiyakuNo));																//  4.サービス契約番号
			inputDataList.add(JCRUtilCommon.addDblQut(""));																			//  5.問合せ客番号
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD)));			//  6.利用場所郵便番号
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM) +
					hotVoiceOutputMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM)));										//  7.利用場所住所1
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get(JBSbatKK_T_KAISEN_USE_KEI.MANSION_ID)));				//  8.マンションID
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get("SVCNM")));												//  9.サービス名称
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get("SEIBETU")));											// 10.性別
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get(JBSbatCK_T_CUST.CUST_BIRTHD)));							// 11.生年月日
		}
		else
		{
			// 未加入顧客の場合
			inputDataList.add(JCRUtilCommon.addDblQut(MIKANYUU));													//  3.顧客タイプ
			inputDataList.add(JCRUtilCommon.addDblQut(""));															//  4.サービス契約番号
			inputDataList.add(JCRUtilCommon.addDblQut(taioKiokData.get(JBSbatCR_T_TAIO_KIROK.PROSCST_NO)));			//  5.問合せ客番号
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get(JBSbatCK_T_PROSCST.PROSCST_PCD)));		//  6.利用場所郵便番号
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get(JBSbatCK_T_PROSCST.PROSCST_STATE_NM) +
					hotVoiceOutputMap.get(JBSbatCK_T_PROSCST.PROSCST_CITY_NM)));									//  7.利用場所住所1
			inputDataList.add(JCRUtilCommon.addDblQut(""));															//  8.マンションID
			inputDataList.add(JCRUtilCommon.addDblQut(""));															//  9.サービス名称
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get("SEIBETU")));							// 10.性別
			inputDataList.add(JCRUtilCommon.addDblQut(hotVoiceOutputMap.get(JBSbatCK_T_PROSCST.PROSCST_BIRTHD)));	// 11.生年月日
		}

		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokData.get(JBSbatCR_T_TAIO_KIROK.ADD_DTM)));				// 12.作成日付
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokData.get("STAT_NM")));									// 13.問合せ状態名
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokData.get("SBT_NM")));										// 14.問合せ種別名
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokData.get(JBSbatCR_T_TAIO_KIROK.TITLE)));					// 15.タイトル
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokData.get(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI)));		// 16.対応履歴
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokDtl.getString(JBSbatCR_T_TAIOKRK_DTL.ACTION_STA_DTM)));	// 17.アクション開始
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokDtl.getString(JBSbatCR_T_TAIOKRK_DTL.TOIAWASE_NAIYO)));	// 18.問合せ内容
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokDtl.getString(JBSbatCR_T_TAIOKRK_DTL.ANS_NAIYO)));		// 19.回答内容
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokDtl.getString(JBSbatZM_M_USER.USER_NM)));					// 20.ユーザー名
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(0)));												// 21.ワークグループ名
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokUcwkData.getString("RSP_DIV_NM")));						// 22.問合せ内容種別名(応対区分)
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(0)));												// 23.カテゴリー1
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(1)));												// 24.カテゴリー2
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(2)));												// 25.カテゴリー3
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(3)));												// 26.カテゴリー4
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(4)));												// 27.カテゴリー5
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(5)));												// 28.カテゴリー6
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(6)));												// 29.カテゴリー7
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(7)));												// 30.カテゴリー8
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(8)));												// 31.カテゴリー9
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(9)));												// 32.カテゴリー10
		inputDataList.add(JCRUtilCommon.addDblQut(ctglList.get(10)));												// 33.カテゴリー11
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.CUST_KOE)));	// 34.お客様の声
		inputDataList.add(JCRUtilCommon.addDblQut(taioKiokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.CSR_KOE)));	// 35.CSRの声

		// ホットボイス抽出ファイル書き込み
		JCRBatCommon.printBusinessFileUtil(hotVoiceFileObj, inputDataList);
	}
	
	/**
	 * 保存期限経過ファイル論理削除<br>
	 * 終了処理で保存期限が過ぎたホットボイス抽出電子ファイルの論理削除<br>
	 * @throws Exception 例外
	 */
	private void deleteLimitOverFile() throws Exception
	{
		// 保存期限経過ファイル存在チェック
		executeCR_T_TORK_EFILE_KNRI_CR_SELECT_003(new Object[]{JCRStrConst.CD_DIV_BUNSHO_SBT_CD_HOTVOICE, sysDtm, hozonKikan});
		List<JBSbatCommonDBInterface> selectBunshoData = JCRBatCommon.getSelectedDataList(db_CR_T_TORK_EFILE_KNRI);
		if(selectBunshoData == null)
		{
			super.logPrint.printDebugLog("保存期限経過ファイルは存在しません。");
			return;
		}
		super.logPrint.printDebugLog("保存期限経過ファイル削除");
		
		for(int i = 0; i < selectBunshoData.size(); i++)
		{
			String denshiKanriNo = selectBunshoData.get(i).getString(JBSbatCC_T_EFILE_KANRI.EFILE_KANRI_NO);
			// 保存期限経過ファイル削除
			deleteDenshiFile(denshiKanriNo);
		}
	}
	
	
	/**
	 * 対応記録内訳抽出ワークレコード物理削除<br>
	 * @param taioKiokUcwkData 共通DBインターフェース<br>
	 * @throws Exception 例外
	 */
	private void deleteUcwkWork(JBSbatCommonDBInterface taioKiokUcwkData) throws Exception
	{
		executeCR_T_TIOKR_UW_CST_WK_CR_DELETE_002(new Object[]{
				taioKiokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.TAIO_KIROK_NO),
				taioKiokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.TAIO_KIROK_UCWK_NO)});
		
		super.logPrint.printDebugLog("対応記録内訳抽出ワークレコード物理削除:");
		super.logPrint.printDebugLog("対応記録番号:" + taioKiokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.TAIO_KIROK_NO));
		super.logPrint.printDebugLog("対応記録内訳番号:" + taioKiokUcwkData.getString(JBSbatCR_T_TAIOKRK_UCWK.TAIO_KIROK_UCWK_NO));

	}

}
