/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTmcpSvcDslInfoCst
*	ソースファイル名	：JBSbatKKTmcpSvcDslInfoCst.java
*	作成者				：富士通　
*	作成日				：2018年10月10日
*＜機能概要＞
*　端末補償サービス解約情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v39.00.00	2018/10/10	FJ)周藤		【ANK-3484-00-00】端末補償サービス導入対応 新規作成
*	v39.00.01	2018/10/24	FJ)周藤		【IT1-2018-0000181】障害対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM841;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SBOP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTmcpSvcDslInfoCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_OP_SVC_KEI = "KK_T_OP_SVC_KEI";

	/** テーブル(サブオプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_SBOP_SVC_KEI = "KK_T_SBOP_SVC_KEI";

	/** SQL定義キー(KK_SELECT_368)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_368 = "KK_SELECT_368";

	/** SQL定義キー(KK_SELECT_138)*/
	private static final String KK_T_OP_SVC_KEI_KK_SELECT_138 = "KK_SELECT_138";

	/** SQL定義キー(KK_SELECT_034)*/
	private static final String KK_T_SBOP_SVC_KEI_KK_SELECT_034 = "KK_SELECT_034";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;

	/** テーブルアクセスクラス(サブオプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_SBOP_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** ダブルクォーテーション*/
	private static final String S_DUBLLEQ = "\"";
	
	/** コンマ*/
	private static final String S_COMMA = ",";
	
	/** 端末補償サービス連携識別コード '05'(解約)*/
	private static final String TMCP_RNKI_SKCD = "05";
	
	/** エラーメッセージ(置換え文字列：%2%) */
	private static final String MASSEAGE = "ファイル出力";
	
	/** データ(1件) */
	private String dataLine = null;

	/** 端末補償解約連携対象ファイルパス */
	private String tmcpDslRnkiTgFilePath = null;

	/** 端末補償解約連携対象ファイルオブジェクト */
	private JBSbatInputFileUtil tmcpDslRnkiTgFileObj = null;

	/** 端末補償解約連携対象ファイル定義オブジェクト */
	private JBSbatDefFileUtil tmcpDslRnkiTgFileDefObj = null;
	
	/** 端末補償解約連携情報送信ファイル出力ディレクトリパス */
	private String tmcpDslRnkiInfFileOutDirPath = null;
	
	/** 端末補償解約連携情報送信ファイル名 */
	private String tmcpDslRnkiInfFileNm = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_OP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OP_SVC_KEI);
		db_KK_T_SBOP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SBOP_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// FreeItem取得(FREE項目には「入力ファイル定義名;入力ファイルパス;出力ディレクトリパス;出力ファイル名」が設定されている)
		String[] freeItems = commonItem.getFreeItem().split(";");
		
		if (null != freeItems && freeItems.length == 4)
		{
			// 端末補償解約連携対象ファイルパス
			tmcpDslRnkiTgFilePath = freeItems[1];
			// 端末補償解約連携対象ファイルオブジェクトを生成する
			tmcpDslRnkiTgFileObj = new JBSbatInputFileUtil(tmcpDslRnkiTgFilePath);
			// 端末補償解約連携対象定義ファイル名を取得する
			String tmcpDslRnkiTgFileDefName = JBSbatAplConst.getAplConstValue("IND") + freeItems[0] + ".def";
			// 端末補償解約連携対象定義ファイルオブジェクトを生成する
			tmcpDslRnkiTgFileDefObj  = new JBSbatDefFileUtil(tmcpDslRnkiTgFileDefName, tmcpDslRnkiTgFileObj);
			// Readerオブジェクトを生成する。
			tmcpDslRnkiTgFileObj.createReader();
			
			// 端末補償解約連携情報送信ファイル出力ディレクトリパス
			tmcpDslRnkiInfFileOutDirPath = freeItems[2];
			// 端末補償解約連携情報送信ファイル名
			tmcpDslRnkiInfFileNm = freeItems[3];
		}
		else 
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"FREE"});
		}
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// ファイルパス
		String outFilePath = tmcpDslRnkiInfFileOutDirPath + tmcpDslRnkiInfFileNm;
		
		// 一時ファイル読込み処理
		BufferedWriter wr = null;
		
		try
		{
			wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFilePath), JKKBatConst.S_CHR_CODE));
			
			// レコード数分処理を繰り返す
			while (tmcpDslRnkiTgFileObj.ready())
			{
				// ファイルレコード取得
				dataLine = tmcpDslRnkiTgFileObj.readLine();
				
				// 定義ファイルに設定された区切り文字で分割
				String[] cols = dataLine.split(tmcpDslRnkiTgFileDefObj.getDelimiter(), -1);
				
				// 分割データをマップに登録
				HashMap<String, String> splitData = setMap(cols);
				
				// 入力ファイル.サービス契約ステータス ＝ '910'(解約済)の場合
				if(JBSbatKKConst.SVC_KEI_STAT_DLS_ZM.equals(splitData.get(JBSbatKKIFM841.SVC_KEI_STAT)))
				{
					// 入力ファイル.申込明細番号 ≠ 入力ファイル.申込明細番号(サービス契約)の場合
					if(!splitData.get(JBSbatKKIFM841.MSKM_DTL_NO).equals(splitData.get(JBSbatKKIFM841.MSKM_DTL_NO_SVC_KEI)))
					{
						// 解約後異動確認
						if(checkDslAfIdo(splitData))
						{
							// 回復可能期間超過判定
							if(!checkOverKaihkPsbPrd(splitData))
							{
								// 回復可能期間超過判定結果がfalseのとき、次のレコードに移る
								continue;
							}
						}
					}
//IT1-2018-0000181 ADD START
					// 入力ファイル.申込明細番号 ＝ 入力ファイル.申込明細番号(サービス契約)の場合
					else
					{
						// 回復可能期間超過判定
						if(!checkOverKaihkPsbPrd(splitData))
						{
							// 回復可能期間超過判定結果がfalseのとき、次のレコードに移る
							continue;
						}
					}
//IT1-2018-0000181 ADD END
				}
				// レコード整形
				String record = modRecord(splitData);
				
				// ファイル書き込み
				wr.write(record);
				wr.write("\n");
				wr.flush();
			}
		}
		catch(IOException e)
		{
			throw new JBSbatBusinessException("EKKB0250CE", new String[]{tmcpDslRnkiInfFileNm, MASSEAGE});
		}
		finally
		{
			if (null != wr)
			{
				wr.close();
			}
			if (tmcpDslRnkiTgFileObj != null)
			{
				tmcpDslRnkiTgFileObj.close();
			}
		}
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_KK_T_OP_SVC_KEI.close();
		db_KK_T_SBOP_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_368)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_368(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_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_368);
	}

	/**
	 * SQLKEY(KK_SELECT_138)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	オプションサービス契約番号
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_OP_SVC_KEI_KK_SELECT_138(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_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_138);
	}

	/**
	 * SQLKEY(KK_SELECT_034)で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_SBOP_SVC_KEI_KK_SELECT_034(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_SBOP_SVC_KEI.selectBySqlDefine(paramList, KK_T_SBOP_SVC_KEI_KK_SELECT_034);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 入力ファイルをマップにセットする。<br>
	 * @param cols 設定項目の値
	 * @return splitData 設定項目マップ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private HashMap<String, String> setMap(String[] cols) throws Exception 
	{
		// マップ初期化
		HashMap<String, String> splitData = new HashMap<String, String>();
		
		// 端末補償契約番号
		splitData.put(JBSbatKKIFM841.TMCP_KEI_NO, cols[0]);
		// オプションサービス契約番号
		splitData.put(JBSbatKKIFM841.OP_SVC_KEI_NO, cols[1]);
		// サブオプションサービス契約番号
		splitData.put(JBSbatKKIFM841.SBOP_SVC_KEI_NO, cols[2]);
		// オプションサービスコード
		splitData.put(JBSbatKKIFM841.OP_SVC_CD, cols[3]);
		// サブオプションサービスコード
		splitData.put(JBSbatKKIFM841.SBOP_SVC_CD, cols[4]);
		// 申込年月日
		splitData.put(JBSbatKKIFM841.MSKM_YMD, cols[5]);
		// サービスキャンセル年月日
		splitData.put(JBSbatKKIFM841.CL_YMD, cols[6]);
		// サービス開始年月日
		splitData.put(JBSbatKKIFM841.SVC_STA_YMD, cols[7]);
		// 解約年月日
		splitData.put(JBSbatKKIFM841.DSL_YMD, cols[8]);
		// 申込明細番号
		splitData.put(JBSbatKKIFM841.MSKM_DTL_NO, cols[9]);
		// サービス契約番号
		splitData.put(JBSbatKKIFM841.SVC_KEI_NO, cols[10]);
		// 申込明細番号(サービス契約)
		splitData.put(JBSbatKKIFM841.MSKM_DTL_NO_SVC_KEI, cols[11]);
		// サービス終了年月日
		splitData.put(JBSbatKKIFM841.SVC_ENDYMD, cols[12]);
		// 回復可能期間
		splitData.put(JBSbatKKIFM841.KAIHK_PSB_PRD, cols[13]);
		// サービス契約ステータス
		splitData.put(JBSbatKKIFM841.SVC_KEI_STAT, cols[14]);
		
		return splitData;
	}
	
	/**
	 * 解約後異動確認処理<br>
	 * @param splitData 設定項目の値
	 * @return boolean true:処理続行/false:次レコードへ移行
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean checkDslAfIdo(HashMap<String, String> splitData) throws Exception 
	{
		// サービス契約番号
		String svcKeiNo = splitData.get(JBSbatKKIFM841.SVC_KEI_NO);
		// オプションサービス契約番号
		String opSvcKeiNo = splitData.get(JBSbatKKIFM841.OP_SVC_KEI_NO);
		// サブオプションサービス契約番号
		String sbopSvcKeiNo = splitData.get(JBSbatKKIFM841.SBOP_SVC_KEI_NO);
		// 申込明細番号(比較)
		String mskmYmdHkk = "";
		
		// 申込明細番号(サービス契約)を取得
		String mskmYmdSvcKei = getMskmYmdSvcKei(svcKeiNo);
		
		// サブオプションサービス契約番号がnullのとき
		if(sbopSvcKeiNo == null || "".equals(sbopSvcKeiNo))
		{
			// 申込明細番号(オプションサービス契約)を取得
			mskmYmdHkk = getMskmYmdOpSvcKei(opSvcKeiNo);
		}
		// サブオプションサービス契約番号がnull以外のとき
		else
		{
			// 申込明細番号(サブオプションサービス契約)を取得
			mskmYmdHkk = getMskmYmdSbopSvcKei(sbopSvcKeiNo);
		}
		
		// サービス契約とオプション、サブオプションサービス契約の申込明細番号が同じ場合、処理を続行
		if(mskmYmdSvcKei.equals(mskmYmdHkk))
		{
			return true;
		}
		
		return false;
	}

	/**
	 * 回復可能期間超過判定<br>
	 * @param splitData 設定項目の値
	 * @return boolean true:処理続行/false:次レコードへ移行
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean checkOverKaihkPsbPrd(HashMap<String, String> splitData) throws Exception 
	{
		// サービス終了年月日
		String svcEndymd = splitData.get(JBSbatKKIFM841.SVC_ENDYMD);
		// 回復可能期間
		int kaihkPsbPrd = Integer.parseInt(splitData.get(JBSbatKKIFM841.KAIHK_PSB_PRD));
		
		// 入力ファイル.サービス終了年月日+入力ファイル.回復可能期間 < バッチ運用日+1となる場合、処理を続行
		if(0 < JBSbatDateUtil.adjustDate(commonItem.getOpeDate(), 1)
				.compareTo(JBSbatDateUtil.adjustDate(svcEndymd, kaihkPsbPrd)))
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * 申込明細番号(サービス契約)を取得する<br>
	 * @param svcKeiNo 設定項目の値
	 * @return mskmYmdSvcKei  申込明細番号(サービス契約)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getMskmYmdSvcKei(String svcKeiNo) throws Exception 
	{
		// 設定値のマップを作成する
		Object[] setParam = new Object[3];
		// サービス契約番号
		setParam[0] = svcKeiNo;
		// 予約適用年月日
		setParam[1] = commonItem.getOpeDate();
		// 予約適用年月日
		setParam[2] = commonItem.getOpeDate();
		
		// DBアクセスを実行する
		executeKK_T_SVC_KEI_KK_SELECT_368(setParam);
		// 結果を取得
		JBSbatCommonDBInterface result = db_KK_T_SVC_KEI.selectNext();
		
		// 申込明細番号を取得
		if(result != null)
		{
			if(result.getString(JBSbatKK_T_SVC_KEI.MSKM_DTL_NO) != null
					&& !"".equals(result.getString(JBSbatKK_T_SVC_KEI.MSKM_DTL_NO)))
			{
				return result.getString(JBSbatKK_T_SVC_KEI.MSKM_DTL_NO);
			}
		}
		// 申込明細番号が存在しない場合、空白を返す。
		return "";
	}
	
	/**
	 * 申込明細番号(オプションサービス契約)を取得する<br>
	 * @param opSvcKeiNo 設定項目の値
	 * @return mskmYmdSvcKei  申込明細番号(オプションサービス契約)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getMskmYmdOpSvcKei(String opSvcKeiNo) throws Exception 
	{
		// 設定値のマップを作成する
		Object[] setParam = new Object[3];
		// オプションサービス契約番号
		setParam[0] = opSvcKeiNo;
		// 予約適用年月日
		setParam[1] = commonItem.getOpeDate();
		// 予約適用年月日
		setParam[2] = commonItem.getOpeDate();
		
		// DBアクセスを実行する
		executeKK_T_OP_SVC_KEI_KK_SELECT_138(setParam);
		// 結果を取得
		JBSbatCommonDBInterface result = db_KK_T_OP_SVC_KEI.selectNext();
		
		// 申込明細番号を取得
		if(result != null)
		{
			if(result.getString(JBSbatKK_T_OP_SVC_KEI.MSKM_DTL_NO) != null
					&& !"".equals(result.getString(JBSbatKK_T_OP_SVC_KEI.MSKM_DTL_NO)))
			{
				return result.getString(JBSbatKK_T_OP_SVC_KEI.MSKM_DTL_NO);
			}
		}
		// 申込明細番号が存在しない場合、空白を返す。
		return "";
	}
	
	/**
	 * 申込明細番号(サブオプションサービス契約)を取得する<br>
	 * @param sbopSvcKeiNo 設定項目の値
	 * @return mskmYmdSvcKei  申込明細番号(サブオプションサービス契約)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getMskmYmdSbopSvcKei(String sbopSvcKeiNo) throws Exception 
	{
		// 設定値のマップを作成する
		Object[] setParam = new Object[3];
		// サブオプションサービス契約番号
		setParam[0] = sbopSvcKeiNo;
		// 予約適用年月日
		setParam[1] = commonItem.getOpeDate();
		// 予約適用年月日
		setParam[2] = commonItem.getOpeDate();
		
		// DBアクセスを実行する
		executeKK_T_SBOP_SVC_KEI_KK_SELECT_034(setParam);
		// 結果を取得
		JBSbatCommonDBInterface result = db_KK_T_SBOP_SVC_KEI.selectNext();
		
		// 申込明細番号を取得
		if(result != null)
		{
			if(result.getString(JBSbatKK_T_SBOP_SVC_KEI.MSKM_DTL_NO) != null
					&& !"".equals(result.getString(JBSbatKK_T_SBOP_SVC_KEI.MSKM_DTL_NO)))
			{
				return result.getString(JBSbatKK_T_SBOP_SVC_KEI.MSKM_DTL_NO);
			}
		}
		// 申込明細番号が存在しない場合、空白を返す。
		return "";
	}
	
	/**
	 * レコードを整形する。<br>
	 * @param splitData 設定項目の値
	 * @param record 整形後の値
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String modRecord(HashMap<String, String> splitData) throws Exception 
	{
		// 整形後レコード格納配列
		ArrayList<String> record = new ArrayList<String>();
		
		// 端末補償契約番号
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.TMCP_KEI_NO) + S_DUBLLEQ);
		// オプションサービス契約番号
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.OP_SVC_KEI_NO) + S_DUBLLEQ);
		// サブオプションサービス契約番号
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.SBOP_SVC_KEI_NO) + S_DUBLLEQ);
		// オプションサービスコード
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.OP_SVC_CD) + S_DUBLLEQ);
		// サブオプションサービスコード
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.SBOP_SVC_CD) + S_DUBLLEQ);
		// 端末補償サービス連携識別コード = '05'(解約)
		record.add(S_DUBLLEQ + TMCP_RNKI_SKCD + S_DUBLLEQ);
		// 申込年月日
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.MSKM_YMD) + S_DUBLLEQ);
		// キャンセル年月日
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.CL_YMD) + S_DUBLLEQ);
		// サービス開始年月日
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.SVC_STA_YMD) + S_DUBLLEQ);
		// 解約年月日
		record.add(S_DUBLLEQ + splitData.get(JBSbatKKIFM841.DSL_YMD) + S_DUBLLEQ);
		
		return makeStr(record);
	}
	
	/**
	 * 配列を連結します
	 * @param record レコード
	 * @return String
	 */
	private String makeStr(ArrayList<String> record)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeStr]");
		
		StringBuffer strBuf = new StringBuffer();
		
		for (int i = 0; i < record.size() - 1; i++)
		{
			strBuf.append(record.get(i) + S_COMMA);
		}
		
		strBuf.append(record.get(record.size()-1));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}
}
