/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatFUCaseFileRnkData
*	ソースファイル名	：JBSbatFUCaseFileRnkData.java
*	作成者				：富士通
*	作成日				：2016年04月28日
*＜機能概要＞
*　ＣＡＳＥファイル連携部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v24.00.00	2016/04/28	富士通		新規作成
*	v25.00.00	2016/06/03	富士通		【ANK-2730-03-00】作成日時に申込受付年月日を設定
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.table.JBSbatCR_T_CSFL_SWK;
import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
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.util.JBSbatBusinessFileUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatFUCaseFileRnkData extends JBSbatBusinessService
{
	/** メッセージキー */
	private static final String EFUB0030KE = JPCBatchMessageConstant.EFUB0030KE;

	/** 住所１分割開始位置 */
	private static final int AD_1_START_INDEX = 0;

	/** 住所２分割開始位置 */
	private static final int AD_2_START_INDEX = 30;

	/** 住所３分割開始位置 */
	private static final int AD_3_START_INDEX = 60;

	/** 住所１分割文字数 */
	private static final int AD_1_LENGTH = 30;

	/** 住所２分割文字数 */
	private static final int AD_2_LENGTH = 30;

	/** CASEファイル種別コード 001:コース変更申込  */
	private static final String COURSE_CHANGE_MSKM = "001";

	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ＣＡＳＥファイル作成ワーク)*/
	private static final String D_TBL_NAME_CR_T_CSFL_SWK = "CR_T_CSFL_SWK";

	/** SQL定義キー(FU_SELECT_001)*/
	private static final String CR_T_CSFL_SWK_FU_SELECT_001 = "FU_SELECT_001";

	/** SQL定義キー(FU_UPDATE_001)*/
	private static final String CR_T_CSFL_SWK_FU_UPDATE_001 = "FU_UPDATE_001";

	/** テーブルアクセスクラス(ＣＡＳＥファイル作成ワーク)*/
	private JBSbatSQLAccess db_CR_T_CSFL_SWK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	@Override
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CR_T_CSFL_SWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_CSFL_SWK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		String strJobid = commonItem.getJobid();
		String strBatchUserId = commonItem.getBatchUserId();
		String strSqlDefFilePath = commonItem.getSqlDefFilePath();
		super.logPrint.printDebugLog(strJobid + ":" + strBatchUserId);
		super.logPrint.printDebugLog(strJobid + ":" + strSqlDefFilePath);

		// FREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		if (strFreeParam == null || strFreeParam.length() == 0)
		{
			throw new JBSbatBusinessException(EFUB0030KE);
		}

		// パラメータを区切り文字で分割する
		String[] lines = strFreeParam.split(JFUStrConst.S_PARAM_DELIM);
		// 出力ファイル×３、CASEファイル種別コードがあるため、最低でも4つ取得される
		if (lines == null || lines.length < 4)
		{
			throw new JBSbatBusinessException(EFUB0030KE);
		}

		// CASEファイル種別コード
		String[] codeParam = new String[lines.length - 3];
		// 出力ファイル以降をコピー
		System.arraycopy(lines, 3, codeParam, 0, lines.length - 3);

		// オンライン運用日付を取得する。
		String strOnlineOpeDate = commonItem.getOnlineOpeDate();
		// 1. CASEファイル作成ワークデータ抽出
		// 更新対象のCASEファイル作成ワークリスト格納領域を生成する。
		ArrayList<HashMap<String, String>> caseFileRnkInfoMapList = new ArrayList<HashMap<String, String>>();

		int recordCnt = 0;

		// CASEファイル種別コード件数分実行
		for(int i = 0; i < codeParam.length; i++)
		{
			// CASEファイル作成ワークデータ抽出結果格納領域を生成する。
			JBSbatCommonDBInterface selCaseFileInfo = new JBSbatCommonDBInterface();
			selCaseFileInfo.setValue(codeParam[i]); // CASEファイル種別コード
			// CASEファイル作成ワークデータを抽出する。
			executeCR_T_CSFL_SWK_FU_SELECT_001(selCaseFileInfo.getList().toArray());

			for (selCaseFileInfo = db_CR_T_CSFL_SWK.selectNext(); null != selCaseFileInfo;
					selCaseFileInfo = db_CR_T_CSFL_SWK.selectNext())
			{
				// 取得したレコードを1件づつ読込みSQL取得項目を各変数へ格納する。
				recordCnt++;

				// 更新対象のCASEファイル作成ワークデータリスト格納領域を生成する。
				HashMap<String, String> caseFileRnkInfoMap = new HashMap<String, String>();

				// SQL結果格納
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CSFL_SWK_NO, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CSFL_SWK_NO));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CSFL_SBT_CD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CSFL_SBT_CD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.MSKM_UK_DTM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.MSKM_UK_DTM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_TYPE_NM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_TYPE_NM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.SVC_KEI_NO, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.SVC_KEI_NO));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_NM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_NM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_KANA, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_KANA));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_TELNO, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_TELNO));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_KTAI_TELNO, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_KTAI_TELNO));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_PCD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_PCD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_AD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_AD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_SEX, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_SEX));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_BIRTHD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_BIRTHD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.TOIAWASE_STAT_NM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.TOIAWASE_STAT_NM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.TAIOKRK_STAT_NM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.TAIOKRK_STAT_NM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.UKETSUKESYA, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.UKETSUKESYA));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.TNTSHA, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.TNTSHA));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.QUE_BOX_NM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.QUE_BOX_NM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.TOIAWASE_UK_SBT_NM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.TOIAWASE_UK_SBT_NM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.TITLE, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.TITLE));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_1, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_1));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_2, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_2));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_3, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_3));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_4, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_4));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_5, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_5));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_6, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_6));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_7, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_7));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_8, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_8));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_9, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_9));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_10, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_10));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CTGR_NM_11, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CTGR_NM_11));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.TAIO_KIROK_RIREKI, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.TAIO_KIROK_RIREKI));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.PROSCST_NO, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.PROSCST_NO));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.EOID, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.EOID));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.MSKMSHO_NO, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.MSKMSHO_NO));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CALLBK_KIBO_DTM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CALLBK_KIBO_DTM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CALLBK_TIME_STI_TYPE_NM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CALLBK_TIME_STI_TYPE_NM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CSFL_SKSI_ZM_FLG, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CSFL_SKSI_ZM_FLG));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.CSFL_SKSI_YMD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.CSFL_SKSI_YMD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.ADD_DTM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.ADD_DTM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.ADD_OPEACNT, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.ADD_OPEACNT));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.UPD_DTM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.UPD_DTM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.UPD_OPEACNT, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.UPD_OPEACNT));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.DEL_DTM, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.DEL_DTM));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.DEL_OPEACNT, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.DEL_OPEACNT));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.MK_FLG, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.MK_FLG));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.ADD_UNYO_YMD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.ADD_UNYO_YMD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.ADD_TRN_ID, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.ADD_TRN_ID));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.UPD_UNYO_YMD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.UPD_UNYO_YMD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.UPD_TRN_ID, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.UPD_TRN_ID));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.DEL_UNYO_YMD, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.DEL_UNYO_YMD));
				caseFileRnkInfoMap.put(JBSbatCR_T_CSFL_SWK.DEL_TRN_ID, getString(selCaseFileInfo, JBSbatCR_T_CSFL_SWK.DEL_TRN_ID));

				caseFileRnkInfoMapList.add(caseFileRnkInfoMap);
			}
		}

		if (recordCnt == 0)
		{
			super.logPrint.printDebugLog(strJobid + ":対象データが0件の為、後続処理を行わずに終了。");
			return null;
		}

		// ======= ▼▼▼ 整形した情報をCASEファイルへ出力する。 ▼▼▼ =======

		// CASECSVファイル
		String caseCvsFile = lines[0];
		// CASE件数
		String caseCntFile = lines[1];
		// CASEフラグファイル
		String caseFlgFile = lines[2];

		JBSbatBusinessFileUtil caseCvsFileObj = null;
		JBSbatBusinessFileUtil caseCntFileObj = null;
		JBSbatBusinessFileUtil caseFlgFileObj = null;

		try
		{
			// 2. CASEファイル作成
			// CASECSVファイルを生成する。
			caseCvsFileObj = JCCBatCommon.createBusinessFileUtil(caseCvsFile, JFUStrConst.SJIS, JFUStrConst.RETURN_CODE, JFUStrConst.S_SEP_CAM);
			super.logPrint.printDebugLog(strJobid + ":CASECSVファイル名:" + caseCvsFile);

			for (int i = 0; i < caseFileRnkInfoMapList.size(); i++)
			{
				HashMap<String, String> outMap = caseFileRnkInfoMapList.get(i);

				// CASEファイル出力リスト
				ArrayList<String> caseFileRnkDataList = new ArrayList<String>();
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_TYPE_NM), caseFileRnkDataList);// 顧客タイプ
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.SVC_KEI_NO), caseFileRnkDataList);// お客様ID
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_NM), caseFileRnkDataList);// 顧客氏名
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_KANA), caseFileRnkDataList);// 顧客氏名(カナ)
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_TELNO), caseFileRnkDataList);// 電話番号
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_KTAI_TELNO), caseFileRnkDataList);// 電話番号2
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_PCD), caseFileRnkDataList);// 郵便番号
				outputVal(bnktVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_AD),
							AD_1_START_INDEX, AD_1_LENGTH), caseFileRnkDataList);// 住所1
				outputVal(bnktVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_AD),
							AD_2_START_INDEX, AD_2_LENGTH), caseFileRnkDataList);// 住所2
				int ad3Length = 0;
				if(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_AD) != null)
				{
					ad3Length = outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_AD).length();
				}
				outputVal(bnktVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_AD),
							AD_3_START_INDEX, ad3Length), caseFileRnkDataList);// 住所3
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_SEX), caseFileRnkDataList);// 性別
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_BIRTHD), caseFileRnkDataList);// 生年月日
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.TOIAWASE_STAT_NM), caseFileRnkDataList);// 状態
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.TAIOKRK_STAT_NM), caseFileRnkDataList);// ステータス
				outputVal(JPCUtilCommon.formatDatetimeSS(
						outMap.get(JBSbatCR_T_CSFL_SWK.MSKM_UK_DTM).substring(0, 14)), caseFileRnkDataList); // 作成日時(申込受付日時をセット)
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.UKETSUKESYA), caseFileRnkDataList);// 受付者
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.TNTSHA), caseFileRnkDataList);// 担当者
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.QUE_BOX_NM), caseFileRnkDataList);// キュー名
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.TOIAWASE_UK_SBT_NM), caseFileRnkDataList);// 受付種別
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.TITLE), caseFileRnkDataList);// タイトル
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_1), caseFileRnkDataList);// カテゴリ１
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_2), caseFileRnkDataList);// カテゴリ２
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_3), caseFileRnkDataList);// カテゴリ３
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_4), caseFileRnkDataList);// カテゴリ４
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_5), caseFileRnkDataList);// カテゴリ５
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_6), caseFileRnkDataList);// カテゴリ６
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_7), caseFileRnkDataList);// カテゴリ７
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_8), caseFileRnkDataList);// カテゴリ８
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_9), caseFileRnkDataList);// カテゴリ９
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_10), caseFileRnkDataList);// カテゴリ１０
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CTGR_NM_11), caseFileRnkDataList);// カテゴリ１１
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.TAIO_KIROK_RIREKI), caseFileRnkDataList);// 問合せ履歴
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.PROSCST_NO), caseFileRnkDataList);// 問合せ客ID
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.EOID), caseFileRnkDataList);// eoID
				if(COURSE_CHANGE_MSKM.equals(outMap.get(JBSbatCR_T_CSFL_SWK.CSFL_SBT_CD)))
				{
					outputVal(JFUStrConst.EMPTY, caseFileRnkDataList);// 申込書番号
				}
				else
				{
					outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.MSKMSHO_NO), caseFileRnkDataList);// 申込書番号
				}
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CALLBK_KIBO_DTM), caseFileRnkDataList);// エスカレーション日時
				outputVal(outMap.get(JBSbatCR_T_CSFL_SWK.CALLBK_TIME_STI_TYPE_NM),
						caseFileRnkDataList);// コールバック時間指定タイプ

				// CASECSVファイルへ出力する。
				JCCBatCommon.printBusinessFileUtil(caseCvsFileObj, caseFileRnkDataList);
			}

			// 3.「CASEファイル作成ワークテーブル」の更新
			// ======= ▼▼▼ 抽出対象データに対して対応履歴連携年月日、対応履歴連携済フラグを更新を行う。 ▼▼▼ =======

			for (int i = 0; i < caseFileRnkInfoMapList.size(); i++)
			{
				HashMap<String, String> outMap = caseFileRnkInfoMapList.get(i);
				// CASEファイル作成ワーク番号
				String cshlSwkNo = outMap.get(JBSbatCR_T_CSFL_SWK.CSFL_SWK_NO);

				super.logPrint.printDebugLog(strJobid + ":CASEファイル作成ワークのCASEファイル作成年月日、CASEファイル作成済フラグを更新する。");
				super.logPrint.printDebugLog(strJobid + ":オンライン運用日:" + strOnlineOpeDate);
				super.logPrint.printDebugLog(strJobid + ":CASEファイル作成ワーク番号:" + cshlSwkNo);

				// CASEファイル作成ワーク（更新）
				JBSbatCommonDBInterface updCaseFileRnkInfo = new JBSbatCommonDBInterface();
				updCaseFileRnkInfo.setValue(strOnlineOpeDate); // オンライン運用日
				updCaseFileRnkInfo.setValue(cshlSwkNo); // サービスCASEファイル作成ワーク番号
				executeCR_T_CSFL_SWK_FU_UPDATE_001(updCaseFileRnkInfo.getList().toArray());
			}

			// 4. CASEファイル連携
			// CASE件数ファイルを生成する。
			caseCntFileObj = JCCBatCommon.createBusinessFileUtil(caseCntFile, JFUStrConst.SJIS, JFUStrConst.RETURN_CODE, JFUStrConst.EMPTY);
			super.logPrint.printDebugLog(strJobid + ":CASE件数ファイル名:" + caseCntFile);

			// CASE件数ファイルへ出力する。
			JCCBatCommon.printBusinessFileUtil(caseCntFileObj, String.valueOf(caseFileRnkInfoMapList.size()));

			// CASEフラグファイルを生成する。
			caseFlgFileObj = JCCBatCommon.createBusinessFileUtil(caseFlgFile, JFUStrConst.SJIS, JFUStrConst.EMPTY, JFUStrConst.EMPTY);
			super.logPrint.printDebugLog(strJobid + ":CASEフラグファイル名:" + caseFlgFile);
		}
		catch (Exception e)
		{

			super.logPrint.printDebugLog(strJobid + ":例外発生の為、生成ファイルのクローズ処理を行う。");

			// 生成ファイルのクローズ処理
			if (null != caseCvsFileObj)
			{
				JCCBatCommon.closeBusinessFileUtil(caseCvsFileObj);
			}
			if (null != caseCntFileObj)
			{
				JCCBatCommon.closeBusinessFileUtil(caseCntFileObj);
			}
			if (null != caseFlgFileObj)
			{
				JCCBatCommon.closeBusinessFileUtil(caseFlgFileObj);
			}

			super.logPrint.printDebugLog(strJobid + ":例外発生の為、更新データがある場合はロールバックを行う。");

			throw e;
		}
		if (null != caseCvsFileObj)
		{
			JCCBatCommon.closeBusinessFileUtil(caseCvsFileObj);
		}
		if (null != caseCntFileObj)
		{
			JCCBatCommon.closeBusinessFileUtil(caseCntFileObj);
		}
		if (null != caseFlgFileObj)
		{
			JCCBatCommon.closeBusinessFileUtil(caseFlgFileObj);
		}


		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	@Override
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CR_T_CSFL_SWK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 *
	 * SQLKEY(FU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	CASEファイル種別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_CSFL_SWK_FU_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CR_T_CSFL_SWK.selectBySqlDefine(paramList, CR_T_CSFL_SWK_FU_SELECT_001);
	}

	/**
	 *
	 * SQLKEY(FU_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	運用日付
	 *		 	CASEファイル作成ワーク番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_CSFL_SWK_FU_UPDATE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CR_T_CSFL_SWK.executeBySqlDefine(paramList, CR_T_CSFL_SWK_FU_UPDATE_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 *
	 * 出力用文字列の作成処理です。
	 *
	 * @param value 対象文字列
	 * @param list 出力対象リスト
	 * @return 対象文字列の結合情報(ダブルクォーテーション)
	 */
	private static List<String> outputVal(String value, List<String> list)
	{
		list.add(JFUStrConst.S_DUBLLEQ + value + JFUStrConst.S_DUBLLEQ);
		return list;
	}

	/**
	 *
	 * 文字列の分割処理です。
	 *
	 * @param value 分割対象文字列
	 * @param startIdx 分割開始位置
	 * @param endLength 分割文字数
	 * @return 分割対象文字列を分割した結果
	 */
	private static String bnktVal(String value, int startIdx , int endLength)
	{
		// 分割対象文字列がnullの場合
		if(value == null)
		{
			// 空文字を返却
			return "";
		}
		// 分割対象文字列の文字数が分割開始位置よりも小さい場合
		if(value.length() < startIdx)
		{
			// 空文字を返却
			return "";
		}
		// 分割対象文字列の文字数が分割開始位置＋分割文字数よりも小さい場合
		else if(value.length() < startIdx + endLength)
		{
			// 分割開始位置から分割対象文字列の最後尾の文字列までを返却
			return value.substring(startIdx, value.length());
		}
		// 分割開始位置から分割開始位置から分割文字数だけ分割して返却
		return value.substring(startIdx,  startIdx + endLength);
	}

	/**
	 *
	 * DB取得データの空文字変換処理です。
	 *
	 * @param dbIf ＤＢアクセス時にバインド変数に値を設定するインターフェース
	 * @param key 取得する値のキー（ＤＢ項目名）
	 * @return 置換文字列
	 * @throws Exception 例外
	 */
	private static String getString(JBSbatCommonDBInterface dbIf, String key) throws Exception
	{
		String val = dbIf.getString(key);
		return val == null ? JFUStrConst.EMPTY : val;
	}
}
