/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatAC050UseStp
*	ソースファイル名	：JBSbatAC050UseStp.java
*	作成者				：富士通　
*	作成日				：2017年06月23日
*＜機能概要＞
*　ＬａＬａＣａｌｌ通話料上限超過分利用停止部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v35.00.00	2017/06/23   FJ)塩津	ANK-3164-00-00 LaLaCall通話料上限超過対応
*********************************************************************/
package eo.business.service;

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.JBSbatKKConst;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.table.JBSbatAC_T_CN050AP_TWRCKTC;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatCN_T_CONT_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.common.util.JCHStringUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatAC050UseStp extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(超過通知管理)*/
	private static final String D_TBL_NAME_AC_T_CN050AP_TWRCKTC = "AC_T_CN050AP_TWRCKTC";

	/** テーブル(コンテンツ契約内訳)*/
	private static final String D_TBL_NAME_CN_T_CONT_KEI_UCWK = "CN_T_CONT_KEI_UCWK";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** SQL定義キー(AC_SELECT_003)*/
	private static final String AC_T_CN050AP_TWRCKTC_AC_SELECT_003 = "AC_SELECT_003";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String CN_T_CONT_KEI_UCWK_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_004)*/
	private static final String CK_T_CUST_AC_SELECT_004 = "AC_SELECT_004";

	/** SQL定義キー(AC_UPDATE_002)*/
	private static final String AC_T_CN050AP_TWRCKTC_AC_UPDATE_002 = "AC_UPDATE_002";

	/** SQL定義キー(AC_INSERT_001)*/
	private static final String CN_T_CONT_KEI_UCWK_AC_INSERT_001 = "AC_INSERT_001";

	/** テーブルアクセスクラス(超過通知管理)*/
	private JBSbatSQLAccess db_AC_T_CN050AP_TWRCKTC = null;

	/** テーブルアクセスクラス(コンテンツ契約内訳)*/
	private JBSbatSQLAccess db_CN_T_CONT_KEI_UCWK = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 050超過通知種別コード(利用停止) */
	public static final String CN050AP_OVER_TCH_SBT_CD_USE_STP = "4";
	
	/** ユースケースID */
	private static final String USECASE_ID = "CNSV0048";
	
	/** 050電話利用停止・利用停止解除依頼(ECNA0110001) */
	private static final String SC_TITLE_CNSV004802 = "CNSV004802SC";
	
	/** 機能コード */
	private static final String FUNC_CD = "1";
	
	/** ステータス設定(利用停止)*/
	private static final String STATUS_SETTE_USE_STP = "1";
	
	/** コード区分(音声のみ)*/
	private static final String ONLY_VOICE = "1";
	
	/** リターンコード(正常終了)*/
	private static final String RETURN_CODE_SUCCESS = "000";
	
	/** 050アプリサービス利用状態コード(利用停止) */
	public static final String CN050APSV_USE_STAT_CD_USE_STP = "3";
	
	/** ファイル連携先ディレクトリ定義キー */
	private static final String CR_FILE_DIR_KEY = "CR_TWS_RK_FILE_DIR";
	
	/** ファイル連携先ディレクトリ(フルパス) */
	private String crFileDir = null;
	
	/** ダブルクォーテーション*/
	private static final String S_DUBLLEQ = "\"";
	
	/** 改行コード */
	private static final String RETURN_CODE  = "\r\n";
	
	/** ファイル名(共通部) */
	private static final String FILE_NAME = "CASE_050TUWASTP_";
	
	/** ファイル出力文字列(加入者) */
	public static final String KOKYAKU_TYPE = "加入者";

	/** ファイル出力文字列(クローズ) */
	public static final String FILE_CLOSE = "クローズ";

	/** ファイル出力文字列(処理中) */
	public static final String FILE_TRN = "処理中";
	
	/** ファイル出力文字列(OTHER SYST) */
	public static final String WORK_PARAM_ID_KK_TAIORRK_ADD_USER = "OTHER SYST";
	
	/** ファイル出力文字列(他システム) */
	public static final String FILE_TSYS = "他システム";

	/** ファイル出力文字列(タイトル) */
	public static final String FILE_TITLE = "【LaLa Call】通話料金の上限金額超過による利用停止";
	
	/** CASEファイル出力件数 */
	private int outmapCnt = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_AC_T_CN050AP_TWRCKTC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_CN050AP_TWRCKTC);
		db_CN_T_CONT_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CONT_KEI_UCWK);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public void execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 050番号利用停止対象者抽出の実行
		JBSbatCommonDBInterface Cn050ApUseStpTrgtList = getCn050ApUseStpTrgt();
		
		// 050番号利用停止の実行
		doCNSV0048(Cn050ApUseStpTrgtList);
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_T_CN050AP_TWRCKTC.close();
		db_CN_T_CONT_KEI_UCWK.close();
		db_CK_T_CUST.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(AC_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 executeAC_T_CN050AP_TWRCKTC_AC_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_AC_T_CN050AP_TWRCKTC.selectBySqlDefine(paramList, AC_T_CN050AP_TWRCKTC_AC_SELECT_003);
	}

	/**
	 * SQLKEY(CN_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	050電話番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_T_CONT_KEI_UCWK_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CN_T_CONT_KEI_UCWK.selectBySqlDefine(paramList, CN_T_CONT_KEI_UCWK_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_004)で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_AC_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_AC_SELECT_004);
	}

	/**
	 * SQLKEY(AC_UPDATE_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	超過通知年月日
	 *		 	050電話番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_CN050AP_TWRCKTC_AC_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_AC_T_CN050AP_TWRCKTC.executeBySqlDefine(paramList, AC_T_CN050AP_TWRCKTC_AC_UPDATE_002);
	}

	/**
	 * SQLKEY(AC_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	050アプリサービス利用状態コード
	 *		 	設備利用停止年月日
	 *		 	050電話番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_T_CONT_KEI_UCWK_AC_INSERT_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_CN_T_CONT_KEI_UCWK.executeBySqlDefine(paramList, CN_T_CONT_KEI_UCWK_AC_INSERT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 050番号利用停止の実行
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface getCn050ApUseStpTrgt() throws Exception
	{
		// 050番号利用停止対象者の抽出
		/**------------------------------------------------------------------------------------------------  
		 * バインド変数設定
		 *-------------------------------------------------------------------------------------------------*/
		Object[] cn050ApUseStp = new Object[]
			      		                  {
												super.opeDate.substring(0, 6),
			      								CN050AP_OVER_TCH_SBT_CD_USE_STP,
			      								"20991231"
			      		                  };
			
		/**------------------------------------------------------------------------------------------------  
		 * SQL実行
		 *-------------------------------------------------------------------------------------------------*/
		
		// 超過通知管理スキーマ検索実行	
		this.executeAC_T_CN050AP_TWRCKTC_AC_SELECT_003(cn050ApUseStp);
		
		// 検索結果の取得
		JBSbatCommonDBInterface dbCn050ApUseStpTrgtInf = db_AC_T_CN050AP_TWRCKTC.selectNext();
		
		return dbCn050ApUseStpTrgtInf;
	}
	
	/**
	 * CNSV0048(050番号利用停止・利用停止解除依頼)のサービスを実行します。<br>
	 * 
	 * @param dbCn050ApUseStpTrgtInf 050番号利用停止対象者
	 * @throws Exception
	 */
	private void doCNSV0048(JBSbatCommonDBInterface dbCn050ApUseStpTrgtInf) throws Exception
	{
		// 格納先ディレクトリ情報を取得する
		this.crFileDir = JKKBatCommon.getApplicationConst(CR_FILE_DIR_KEY) + "/";
		// ファイル名に使用する日時情報(yyyymmddhhmmss)を取得する
		String sSysData = JKKBatCommon.getSysDateTime().substring(0, 14);
		// CASECSVファイル
		String caseCvsFile = this.crFileDir + FILE_NAME + sSysData + ".CSV";
		
		// CASECSVファイル
		JBSbatBusinessFileUtil caseCvsFileObj = null;
		
		// CASECSVファイルを生成する。
		caseCvsFileObj = JCCBatCommon.createBusinessFileUtil(caseCvsFile, JKKBatConst.SJIS, RETURN_CODE, JKKBatConst.CONMA);
		
		// CASE件数
		String caseCntFile = this.crFileDir + FILE_NAME + JKKBatCommon.getSysDateTime().substring(0, 14) + "_CNT.TXT";
		// CASEフラグファイル
		String caseFlgFile = this.crFileDir + FILE_NAME + JKKBatCommon.getSysDateTime().substring(0, 14) + "_FTP.FLG";
		
		// CASE件数
		JBSbatBusinessFileUtil caseCntFileObj = null;
		// CASEフラグファイル
		JBSbatBusinessFileUtil caseFlgFileObj = null;
		
		// 検索結果がなくなるまでループを行う
		while(dbCn050ApUseStpTrgtInf != null)
		{
			// SYSIDと050電話番号を設定
			String sysid = dbCn050ApUseStpTrgtInf.getString(JBSbatAC_T_CN050AP_TWRCKTC.SYSID);
			String cn050Ap_Telno = dbCn050ApUseStpTrgtInf.getString(JBSbatAC_T_CN050AP_TWRCKTC.N_050_TELNO);
			
			/**------------------------------------------------------------------------------------------------  
			 * バインド変数設定
			 *-------------------------------------------------------------------------------------------------*/
			Object[] contKei = new Object[]
				      		                  {
													sysid,
													cn050Ap_Telno
				      		                  };
			
			/**------------------------------------------------------------------------------------------------  
			 * SQL実行
			 *-------------------------------------------------------------------------------------------------*/
			
			// コンテンツ契約内訳スキーマ検索実行	
			this.executeCN_T_CONT_KEI_UCWK_AC_SELECT_001(contKei);
			
			// 検索結果の取得
			JBSbatCommonDBInterface dbCn050ApUseStpTrgtCnkeiNo = db_CN_T_CONT_KEI_UCWK.selectNext();
			
			// コンテンツ契約内訳にSYSID、050電話番号に一致するコンテンツ契約番号が存在するとき
			if(dbCn050ApUseStpTrgtCnkeiNo != null)
			{
				String contKeiNo = dbCn050ApUseStpTrgtCnkeiNo.getString(JBSbatCN_T_CONT_KEI_UCWK.CONT_KEI_NO);
				
				// ●サービス呼び出し処理
				// ユースケースID格納用マップを生成
				HashMap<String, Object> paramMap = new HashMap<String, Object>();
				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
					 
				// サービスに渡す業務データを格納するMAP
				HashMap<String, Object> inputMap = new HashMap<String, Object>();
				
				// 共通情報のマッピング（CNSV004801SC）
				HashMap<String, Object> dataMap1 = new HashMap<String, Object>();
					
				// 機能コード
				dataMap1.put("func_code", FUNC_CD);
				
				// コンテンツ契約番号
				dataMap1.put("key_cont_kei_no", contKeiNo);
					
				inputMap.put("CNSV004801SC", dataMap1);
					
				// 共通情報のマッピング（CNSV004802SC）
				HashMap<String, Object> dataMap2 = new HashMap<String, Object>();
				
				// 機能コード
				dataMap2.put("func_code", FUNC_CD);
				
				// ステータス設定
				dataMap2.put("status_reason", STATUS_SETTE_USE_STP);
					
				// コード区分
				dataMap2.put("service_flg", ONLY_VOICE);
				
				inputMap.put("CNSV004802SC", dataMap2);
				
				// サービスの処理結果が格納されるMAP
				HashMap<Object, Object> outputMap = new HashMap<Object, Object>();
				
				// 050番号利用停止CCを実行する
				JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);
				
				// CNSV004802CCのリターンコードを取得
				String returnCd = (String)getParamFromMap(outputMap, SC_TITLE_CNSV004802, "return_code");
				
				// リターンコードが"000"(正常)以外の場合、
				if(!(RETURN_CODE_SUCCESS).equals(returnCd))
				{
					// サービスインターフェイスエラーの場合は、下記のログ出力
					super.logPrint.printBusinessErrorLog("EACB1020CW", new String[]{"SYSID=" + sysid + " 050番号=" + cn050Ap_Telno + " returnCode=" + returnCd + " 050番号利用停止処理でエラーが発生しました。"});
				}
				else
				{
					/**------------------------------------------------------------------------------------------------  
					 * バインド変数設定
					 *-------------------------------------------------------------------------------------------------*/
					Object[] cn050ApUseStp = new Object[]
						      		                  {
															super.opeDate,
															sysid,
															cn050Ap_Telno,
															super.opeDate.substring(0, 6),
															CN050AP_OVER_TCH_SBT_CD_USE_STP
						      		                  };
				
					/**------------------------------------------------------------------------------------------------  
					 * SQL実行
					 *-------------------------------------------------------------------------------------------------*/
					// 利用停止年月日の設定
					this.executeAC_T_CN050AP_TWRCKTC_AC_UPDATE_002(cn050ApUseStp);
					
					// コンテンツ契約内訳番号の設定
					String contKeiUcwkNo = dbCn050ApUseStpTrgtCnkeiNo.getString(JBSbatCN_T_CONT_KEI_UCWK.CONT_KEI_UCWK_NO);
					
					/**------------------------------------------------------------------------------------------------  
					 * バインド変数設定
					 *-------------------------------------------------------------------------------------------------*/
					Object[] contKeiUcwk = new Object[]
						      		                  {
															JKKBatCommon.getSysDateTimeStamp(),
															CN050APSV_USE_STAT_CD_USE_STP,
															super.opeDate,
															contKeiUcwkNo
						      		                  };
					
					/**------------------------------------------------------------------------------------------------  
					 * SQL実行
					 *-------------------------------------------------------------------------------------------------*/
					// 050アプリサービス利用状態コードと設備停止年月日の設定
					this.executeCN_T_CONT_KEI_UCWK_AC_INSERT_001(contKeiUcwk);
					
					/**------------------------------------------------------------------------------------------------  
					 * バインド変数設定
					 *-------------------------------------------------------------------------------------------------*/
					Object[] cust = new Object[]
						      		                  {
															JBSbatKKConst.SVC_CD_HOSTING,
															super.opeDate,
															sysid,
															super.opeDate
						      		                  };
					
					/**------------------------------------------------------------------------------------------------  
					 * SQL実行
					 *-------------------------------------------------------------------------------------------------*/
					// EOID,サービス契約番号の取得
					this.executeCK_T_CUST_AC_SELECT_004(cust);
					
					// 検索結果の取得
					JBSbatCommonDBInterface dbCustInfo = db_CK_T_CUST.selectNext();
					
					// 必須項目に値が取得できない場合、メッセージ出力し終了。
					if(null == dbCustInfo)
					{
						// 必須項目チェックエラーのログを出力
						super.logPrint.printBusinessErrorLog("EACB1020CW", new String[]{"SYSID=" + sysid + "に対応するサービス契約番号が存在しません。"});
					}
					else
					{
						// CASEファイルにデータを設定
						setOutFileData(dbCustInfo, caseCvsFileObj);
					}
				}
			}
			else
			{
				// 必須項目チェックエラーのログを出力
				super.logPrint.printBusinessErrorLog("EACB1020CW", new String[]{"SYSID=" + sysid + "に対応するコンテンツ契約番号が存在しません。"});
			}
			// 検索結果の取得
			dbCn050ApUseStpTrgtInf = db_AC_T_CN050AP_TWRCKTC.selectNext();
		}
		
		// CASE件数ファイルを生成する。
		caseCntFileObj = JCCBatCommon.createBusinessFileUtil(caseCntFile, JKKBatConst.SJIS, RETURN_CODE, JKKBatConst.SPACE);

		// CASE件数ファイルへ出力する。
		JCCBatCommon.printBusinessFileUtil(caseCntFileObj, S_DUBLLEQ + String.valueOf(this.outmapCnt) + S_DUBLLEQ);

		// CASEフラグファイルを生成する。
		caseFlgFileObj = JCCBatCommon.createBusinessFileUtil(caseFlgFile, JKKBatConst.SJIS, JKKBatConst.SPACE, JKKBatConst.SPACE);
	}

	/**
	 * マップから指定されたキーの値を取得する。
	 * (使用例）<BR/>
	 *     getParamFromXml("LKA11020_RECEIVE", "PROCESS_DIV");<BR/>
	 * 
	 * @param map マップ
	 * @param allKeys キー名
	 * @return 値
	 */
	@SuppressWarnings("unchecked")
	public static Object getParamFromMap(Map map, String...allKeys)
	{

		Map nowMap = map;
		Object returnVal = null;
		for (int i = 0; i < allKeys.length; i++)
		{
			String key = allKeys[i];
			int idx = -1;
			if (key.matches("[a-zA-Z0-9_\\-]+\\[[0-9]+\\]"))
			{
				idx = new Integer(key.replaceFirst("^[a-zA-Z0-9_\\-]+\\[", "").replace("]", ""));
				key = key.replaceFirst("\\[[0-9]+\\]", "");
			}
			if (nowMap.containsKey(key))
			{
				Object val = nowMap.get(key);
				if ((val instanceof List) && (idx >= 0))
				{
					List nowList = (List)val;
					val = nowList.get(idx);
				}
				if (val instanceof Map)
				{
					nowMap = (Map)val;
				}
				if (i == allKeys.length - 1)
				{
					returnVal = val;
				}
			}
			else
			{
				return null;
			}
		}
		
		return returnVal;
	}
	
	/**
	 * CASEファイルの出力処理<br>
	 * 
	 * @param dbEoID EOID
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception
	 */
	private void setOutFileData(JBSbatCommonDBInterface dbCustInfo, JBSbatBusinessFileUtil caseCvsFileObj) throws Exception
	{
		// CASEファイル出力リスト
		ArrayList<String> outputDataList = new ArrayList<String>();
		outputVal(KOKYAKU_TYPE, outputDataList); // 顧客タイプ
		outputVal(dbCustInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO), outputDataList); // お客様ID
		outputVal(JKKBatConst.SPACE, outputDataList); // 顧客氏名
		outputVal(JKKBatConst.SPACE, outputDataList); // 顧客氏名（カナ）
		outputVal(JKKBatConst.SPACE, outputDataList); // 電話番号
		outputVal(JKKBatConst.SPACE, outputDataList); // 電話番号2
		outputVal(JKKBatConst.SPACE, outputDataList); // 郵便番号
		outputVal(JKKBatConst.SPACE, outputDataList); // 住所1
		outputVal(JKKBatConst.SPACE, outputDataList); // 住所2
		outputVal(JKKBatConst.SPACE, outputDataList); // 住所3
		outputVal(JKKBatConst.SPACE, outputDataList); // 性別
		outputVal(JKKBatConst.SPACE, outputDataList); // 生年月日
		outputVal(FILE_CLOSE, outputDataList); // 状態
		outputVal(FILE_TRN, outputDataList); // ステータス
		outputVal(JKKBatCommon.formatDatetimeSS(JKKBatCommon.getSysDateTime()), outputDataList); // 作成日時
		outputVal(WORK_PARAM_ID_KK_TAIORRK_ADD_USER, outputDataList); // 受付者
		outputVal(WORK_PARAM_ID_KK_TAIORRK_ADD_USER, outputDataList); // 担当者
		outputVal(JKKBatConst.SPACE, outputDataList); // キュー名
		outputVal(FILE_TSYS, outputDataList);// 受付種別
		outputVal(FILE_TITLE, outputDataList);//タイトル
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ１
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ２
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ３
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ４
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ５
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ６
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ７
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ８
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ９
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ１０
		outputVal(JKKBatConst.SPACE, outputDataList); // カテゴリ１１
		outputVal(JKKBatConst.SPACE, outputDataList); // 問い合わせ履歴
		outputVal(JKKBatConst.SPACE, outputDataList); // 問合せ客ID
		outputVal(dbCustInfo.getString(JBSbatCK_T_CUST.EOID), outputDataList); // eoID
		outputVal(JKKBatConst.SPACE, outputDataList); // 受付番号
		outputVal(JKKBatConst.SPACE, outputDataList); // エスカレーション日時
		outputVal(JKKBatConst.SPACE, outputDataList); // コールバック時間指定タイプ
		outputVal(JKKBatConst.SPACE, outputDataList); // 業務個別組織コード
		
		// CASECSVファイルへ出力する。
		JCCBatCommon.printBusinessFileUtil(caseCvsFileObj, outputDataList);
		
		// CASEファイル出力件数をカウントアップ
		this.outmapCnt++;
	}
	
	/**
	 * 出力用文字列の作成処理です。
	 *
	 * @param value 対象文字列
	 * @param list 出力対象リスト
	 * @return 対象文字列の結合情報
	 */
	private static List<String> outputVal(String value, List<String> list)
	{
		list.add(S_DUBLLEQ + value + S_DUBLLEQ);
		return list;
	}
}
