/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTicketShinIdoIfCstSksi
*	ソースファイル名	：JBSbatKKTicketShinIdoIfCstSksi.java
*	作成者				：富士通　
*	作成日				：2016年05月20日
*＜機能概要＞
*　チケット申請中異動情報抽出結果作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v26.00.00	2016/06/02	FJ)謝		【ANK-2687-00-00】プレミアムサポート施策 新規作成
*	v26.00.01	2016/08/02	FJ)謝		【IT2-2016-0000040】障害対応
*	v26.00.02	2016/09/23	FJ)謝		【OT-2016-0000007】障害対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTicketShinIdoIfCstSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 異動情報抽出結果送信 */
	private static final String FILE_KKIFE338002 = "KKIFE338002.csv";
	
	/** 異動情報抽出結果（工事完了日） */
	private static final String FILE_KKIFM705004 = "KKIFM705004.csv";
	
	/** 異動情報抽出結果（出荷完了日＋10日） */
	private static final String FILE_KKIFM705005 = "KKIFM705005.csv";
	
	/** 異動情報抽出結果（異動予約反映日） */
	private static final String FILE_KKIFM705006 = "KKIFM705006.csv";
	
	/** 異動情報抽出結果送信ファイルオブジェクト */
	private JBSbatBusinessFileUtil kkife338002FileObj = null;
	
	/** 異動情報抽出結果（工事完了日）ファイルパス */
	private String kkifm705004FilePath = null;
	
	/** 異動情報抽出結果（出荷完了日＋10日）ファイルパス */
	private String kkifm705005FilePath = null;
	
	/** 異動情報抽出結果（異動予約反映日）ファイルパス */
	private String kkifm705006FilePath = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// フリー項目を取得する
		String[] freeItems = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		
		// 異動情報抽出結果（工事完了日）ファイルパス
		kkifm705004FilePath = freeItems[0] + FILE_KKIFM705004;
		
		// 異動情報抽出結果（出荷完了日＋10日）ファイルパス
		kkifm705005FilePath = freeItems[0] + FILE_KKIFM705005;
		
		// 異動情報抽出結果（異動予約反映日）ファイルパス
		kkifm705006FilePath = freeItems[0] + FILE_KKIFM705006;
		
		// 異動情報抽出結果送信ファイルオブジェクトを生成する
		kkife338002FileObj = JKKBatCommon.createBusinessFileUtil(freeItems[0] + FILE_KKIFE338002,
				JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 異動情報抽出結果送信作成（異動情報抽出結果（工事完了日））
		outputKkife338KjFinYmd();
		
		// 異動情報抽出結果送信作成（異動情報抽出結果（出荷完了日＋10日））
		outputKkife338ShkaFinYmdPlus10();
		
		// 異動情報抽出結果送信作成（異動情報抽出結果（異動予約反映））
		outputKkife338IdoRsvHaneiYmd();
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		// ファイルを閉じる
		JKKBatCommon.closeBusinessFileUtil(kkife338002FileObj);
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 異動情報抽出結果送信（異動情報抽出結果（工事完了日））の出力を行う。<br>
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void outputKkife338KjFinYmd() throws Exception
	{
		BufferedReader br = null;
		try
		{
			// 異動情報抽出結果（工事完了日）ファイルの件数分を繰返す
			InputStreamReader is = new InputStreamReader(new FileInputStream(kkifm705004FilePath), JKKStrConst.ENCODE_SJIS);
			br = new BufferedReader(is);
			
			while (br.ready())
			{
				// 1行読込み
				String[] data              = br.readLine().split(",");
				String sysid               = data[0].substring(1, data[0].length() - 1);		// ＳＹＳＩＤ
				String sisakShinseiSeq     = data[1].substring(1, data[1].length() - 1);		// 施策申請枝番
				String svcKeiNo            = data[2].substring(1, data[2].length() - 1);		// サービス契約番号
				String cmpAddOptntyCd      = data[3].substring(1, data[3].length() - 1);		// キャンペーン登録契機コード
				String cmpAddOptyTgKey1    = data[4].substring(1, data[4].length() - 1);		// キャンペーン登録契機対象キー１
				String cmpAddOptyTgKey2    = data[5].substring(1, data[5].length() - 1);		// キャンペーン登録契機対象キー２
				String cmpAddOptyTgKey3    = data[6].substring(1, data[6].length() - 1);		// キャンペーン登録契機対象キー３
				String cmpAddOptyTgKey4    = data[7].substring(1, data[7].length() - 1);		// キャンペーン登録契機対象キー４
				String cmpAddOptyTgKey5    = data[8].substring(1, data[8].length() - 1);		// キャンペーン登録契機対象キー５
				String ck0011Sysid         = data[12].substring(1, data[12].length() - 1);		// お客様＿ＳＹＳＩＤ
				String kk0081SvcKeiNo      = data[13].substring(1, data[13].length() - 1);		// サービス契約＿サービス契約番号
				String ku0011KojiakNo      = data[14].substring(1, data[14].length() - 1);		// 工事案件＿工事案件番号
				String ku0011KojiakStat    = data[15].substring(1, data[15].length() - 1);		// 工事案件＿工事案件ステータス
				String ku0011KojiakJssiYmd = data[16].substring(1, data[16].length() - 1);		// 工事案件＿工事案件実施年月日
				String cmpAddKjtDiv        = "";												// キャンペーン登録期日到来区分
				String cmpAddKjtYmd        = "";												// キャンペーン登録期日到来年月日
				String trnRsltCd           = JBSbatKKConst.TRN_RSLT_CD_NORMAL;					// 処理結果コード
				
				// 処理結果コード判定
				// お客様＿SYSIDが未設定の場合
				if (!JKKBatCommon.isNotNull(ck0011Sysid))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "SYSID", sysid});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				// サービス契約＿サービス契約番号が未設定の場合
				else if (!JKKBatCommon.isNotNull(kk0081SvcKeiNo))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "サービス契約番号", svcKeiNo});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				// 工事案件＿工事案件番号が未設定の場合
				else if (!JKKBatCommon.isNotNull(ku0011KojiakNo))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "工事案件番号", cmpAddOptyTgKey1});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				
				// キャンペーン登録期日到来区分判定
				// 処理結果コードが「00：正常終了」の場合
				if (JBSbatKKConst.TRN_RSLT_CD_NORMAL.equals(trnRsltCd))
				{
					// 工事案件＿工事案件ステータスが「900：中止」の場合
					if (JBSbatKKConst.CD00474_KOJIAK_STAT_900.equals(ku0011KojiakStat))
					{
						// キャンペーン登録期日到来区分を「99：取消済」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_CL_ZM;
					}
					// 工事案件＿工事案件実施年月日が「未設定」の場合
					else if (!JKKBatCommon.isNotNull(ku0011KojiakJssiYmd))
					{
						// キャンペーン登録期日到来区分を「00：未到来」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_MI_TOURAI;
					}
					// 工事案件＿工事案件実施年月日がバッチ運用日付より大きい場合
					else if (ku0011KojiakJssiYmd.compareTo(super.opeDate) > 0)
					{
						// キャンペーン登録期日到来区分を「00：未到来」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_MI_TOURAI;
					}
					// 工事案件＿工事案件実施年月日がバッチ運用日付以下の場合
					else if (ku0011KojiakJssiYmd.compareTo(super.opeDate) <= 0)
					{
						// キャンペーン登録期日到来区分を「01：到来済」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_TOURAI_ZM;
					}
				}
				
				// キャンペーン登録期日到来年月日判定
				// キャンペーン登録期日到来区分が「01：到来済」の場合
				if (JBSbatKKConst.CMP_ADD_KJT_DIV_TOURAI_ZM.equals(cmpAddKjtDiv))
				{
					// キャンペーン登録期日到来年月日を工事案件＿工事案件実施年月日とする
					cmpAddKjtYmd = ku0011KojiakJssiYmd;
				}
				
				// 異動情報抽出結果送信にデータ情報を出力する
				ArrayList<String> outputInfo = new ArrayList<String>();
				
				// 項目設定
				outputInfo.add(sysid);					// SYSID
				outputInfo.add(sisakShinseiSeq);		// 施策申請枝番
				outputInfo.add(svcKeiNo);				// サービス契約番号
				outputInfo.add(cmpAddOptntyCd);			// キャンペーン登録契機コード
				outputInfo.add(cmpAddOptyTgKey1);		// キャンペーン登録契機対象キー1
				outputInfo.add(cmpAddOptyTgKey2);		// キャンペーン登録契機対象キー2
				outputInfo.add(cmpAddOptyTgKey3);		// キャンペーン登録契機対象キー3
				outputInfo.add(cmpAddOptyTgKey4);		// キャンペーン登録契機対象キー4
				outputInfo.add(cmpAddOptyTgKey5);		// キャンペーン登録契機対象キー5
				outputInfo.add(cmpAddKjtDiv);			// キャンペーン登録期日到来区分
				outputInfo.add(cmpAddKjtYmd);			// キャンペーン登録期日到来年月日
				outputInfo.add(trnRsltCd);				// 処理結果コード
				
				JKKBatCommon.printDoubleQuoteBusinessFileUtil(kkife338002FileObj, outputInfo);
			}
		}
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
			if (null != br)
			{
				br.close();
			}
		}
	}
	
	/**
	 * 異動情報抽出結果送信（異動情報抽出結果（出荷完了日＋10日））の出力を行う。<br>
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void outputKkife338ShkaFinYmdPlus10() throws Exception
	{
		BufferedReader br = null;
		try
		{
			// 異動情報抽出結果（工事完了日）ファイルの件数分を繰返す
			InputStreamReader is = new InputStreamReader(new FileInputStream(kkifm705005FilePath), JKKStrConst.ENCODE_SJIS);
			br = new BufferedReader(is);
			
			while (br.ready())
			{
				// 1行読込み
				String[] data            = br.readLine().split(",");
				String sysid             = data[0].substring(1, data[0].length() - 1);		// ＳＹＳＩＤ
				String sisakShinseiSeq   = data[1].substring(1, data[1].length() - 1);		// 施策申請枝番
				String svcKeiNo          = data[2].substring(1, data[2].length() - 1);		// サービス契約番号
				String cmpAddOptntyCd    = data[3].substring(1, data[3].length() - 1);		// キャンペーン登録契機コード
				String cmpAddOptyTgKey1  = data[4].substring(1, data[4].length() - 1);		// キャンペーン登録契機対象キー１
				String cmpAddOptyTgKey2  = data[5].substring(1, data[5].length() - 1);		// キャンペーン登録契機対象キー２
				String cmpAddOptyTgKey3  = data[6].substring(1, data[6].length() - 1);		// キャンペーン登録契機対象キー３
				String cmpAddOptyTgKey4  = data[7].substring(1, data[7].length() - 1);		// キャンペーン登録契機対象キー４
				String cmpAddOptyTgKey5  = data[8].substring(1, data[8].length() - 1);		// キャンペーン登録契機対象キー５
				String ck0011Sysid       = data[12].substring(1, data[12].length() - 1);	// お客様＿ＳＹＳＩＤ
				String kk0081SvcKeiNo    = data[13].substring(1, data[13].length() - 1);	// サービス契約＿サービス契約番号
				String dk0011HaisoNo     = data[17].substring(1, data[17].length() - 1);	// 配送＿配送番号
				String dk0011HaisoStat   = data[18].substring(1, data[18].length() - 1);	// 配送＿配送ステータス
				String dk0011HaisoFinYmd = data[19].substring(1, data[19].length() - 1);	// 配送＿配送完了年月日
// OT-2016-0000007 ADD START
				String kk0341KktkSvcKeiStat = data[23].substring(1, data[23].length() - 1);		// 機器提供サービス契約＿機器提供サービス契約ステータス
// OT-2016-0000007 ADD END
				String cmpAddKjtDiv      = "";												// キャンペーン登録期日到来区分
				String cmpAddKjtYmd      = "";												// キャンペーン登録期日到来年月日
				String trnRsltCd         = JBSbatKKConst.TRN_RSLT_CD_NORMAL;				// 処理結果コード
				
				// 処理結果コード判定
				// お客様＿SYSIDが未設定の場合
				if (!JKKBatCommon.isNotNull(ck0011Sysid))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "SYSID", sysid});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				// サービス契約＿サービス契約番号が未設定の場合
				else if (!JKKBatCommon.isNotNull(kk0081SvcKeiNo))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "サービス契約番号", svcKeiNo});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				// 配送＿配送番号が未設定の場合
				else if (!JKKBatCommon.isNotNull(dk0011HaisoNo))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
// IT2-2016-0000040 MOD START
//							sysid, sisakShinseiSeq, "未存在", "配送番号", cmpAddOptyTgKey1});
							sysid, sisakShinseiSeq, "未存在", "配送番号", cmpAddOptyTgKey1 + "、" + cmpAddOptyTgKey2});
// IT2-2016-0000040 MOD END
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
// OT-2016-0000007 ADD START
				// 機器提供サービス契約＿機器提供サービス契約ステータスが未設定の場合
				else if (!JKKBatCommon.isNotNull(kk0341KktkSvcKeiStat))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "機器提供サービス契約ステータス", cmpAddOptyTgKey1 + "、" + cmpAddOptyTgKey2});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
// OT-2016-0000007 ADD END
				
				// キャンペーン登録期日到来区分判定
				// 処理結果コードが「00：正常終了」の場合
				if (JBSbatKKConst.TRN_RSLT_CD_NORMAL.equals(trnRsltCd))
				{
// OT-2016-0000007 ADD START
					// 機器提供サービス契約＿機器提供サービス契約ステータスが「910：解約済」、または「920：キャンセル済」の場合
					if (JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_910.equals(kk0341KktkSvcKeiStat)
							|| JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_920.equals(kk0341KktkSvcKeiStat))
					{
						// キャンペーン登録期日到来区分を「99：取消済」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_CL_ZM;
					}
					else
// OT-2016-0000007 ADD END
					// 配送＿配送ステータスが「005：中止」の場合
					if (JBSbatKKConst.CD00009_HAISO_STAT_005.equals(dk0011HaisoStat))
					{
						// キャンペーン登録期日到来区分を「99：取消済」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_CL_ZM;
					}
					// 配送＿配送完了年月日が「未設定」の場合
					else if (!JKKBatCommon.isNotNull(dk0011HaisoFinYmd))
					{
						// キャンペーン登録期日到来区分を「00：未到来」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_MI_TOURAI;
					}
					// 配送＿配送完了年月日＋１０日がバッチ運用日付より大きい場合
					else if (JBSbatDateUtil.adjustDate(dk0011HaisoFinYmd, 10).compareTo(super.opeDate) > 0)
					{
						// キャンペーン登録期日到来区分を「00：未到来」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_MI_TOURAI;
					}
					// 配送＿配送完了年月日＋１０日がバッチ運用日付以下の場合
					else if (JBSbatDateUtil.adjustDate(dk0011HaisoFinYmd, 10).compareTo(super.opeDate) <= 0)
					{
						// キャンペーン登録期日到来区分を「01：到来済」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_TOURAI_ZM;
					}
				}
				
				// キャンペーン登録期日到来年月日判定
				// キャンペーン登録期日到来区分が「01：到来済」の場合
				if (JBSbatKKConst.CMP_ADD_KJT_DIV_TOURAI_ZM.equals(cmpAddKjtDiv))
				{
					// キャンペーン登録期日到来年月日を配送＿配送完了年月日＋１０日とする
					cmpAddKjtYmd = JBSbatDateUtil.adjustDate(dk0011HaisoFinYmd, 10);
				}
				
				// 異動情報抽出結果送信にデータ情報を出力する
				ArrayList<String> outputInfo = new ArrayList<String>();
				
				// 項目設定
				outputInfo.add(sysid);					// SYSID
				outputInfo.add(sisakShinseiSeq);		// 施策申請枝番
				outputInfo.add(svcKeiNo);				// サービス契約番号
				outputInfo.add(cmpAddOptntyCd);			// キャンペーン登録契機コード
				outputInfo.add(cmpAddOptyTgKey1);		// キャンペーン登録契機対象キー1
				outputInfo.add(cmpAddOptyTgKey2);		// キャンペーン登録契機対象キー2
				outputInfo.add(cmpAddOptyTgKey3);		// キャンペーン登録契機対象キー3
				outputInfo.add(cmpAddOptyTgKey4);		// キャンペーン登録契機対象キー4
				outputInfo.add(cmpAddOptyTgKey5);		// キャンペーン登録契機対象キー5
				outputInfo.add(cmpAddKjtDiv);			// キャンペーン登録期日到来区分
				outputInfo.add(cmpAddKjtYmd);			// キャンペーン登録期日到来年月日
				outputInfo.add(trnRsltCd);				// 処理結果コード
				
				JKKBatCommon.printDoubleQuoteBusinessFileUtil(kkife338002FileObj, outputInfo);
			}
		}
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
			if (null != br)
			{
				br.close();
			}
		}
	}
	
	/**
	 * 異動情報抽出結果送信（異動情報抽出結果（異動予約反映））の出力を行う。<br>
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void outputKkife338IdoRsvHaneiYmd() throws Exception
	{
		BufferedReader br = null;
		try
		{
			// 異動情報抽出結果（工事完了日）ファイルの件数分を繰返す
			InputStreamReader is = new InputStreamReader(new FileInputStream(kkifm705006FilePath), JKKStrConst.ENCODE_SJIS);
			br = new BufferedReader(is);
			
			while (br.ready())
			{
				// 1行読込み
				String[] data               = br.readLine().split(",");
				String sysid                = data[0].substring(1, data[0].length() - 1);		// ＳＹＳＩＤ
				String sisakShinseiSeq      = data[1].substring(1, data[1].length() - 1);		// 施策申請枝番
				String svcKeiNo             = data[2].substring(1, data[2].length() - 1);		// サービス契約番号
				String cmpAddOptntyCd       = data[3].substring(1, data[3].length() - 1);		// キャンペーン登録契機コード
				String cmpAddOptyTgKey1     = data[4].substring(1, data[4].length() - 1);		// キャンペーン登録契機対象キー１
				String cmpAddOptyTgKey2     = data[5].substring(1, data[5].length() - 1);		// キャンペーン登録契機対象キー２
				String cmpAddOptyTgKey3     = data[6].substring(1, data[6].length() - 1);		// キャンペーン登録契機対象キー３
				String cmpAddOptyTgKey4     = data[7].substring(1, data[7].length() - 1);		// キャンペーン登録契機対象キー４
				String cmpAddOptyTgKey5     = data[8].substring(1, data[8].length() - 1);		// キャンペーン登録契機対象キー５
				String ck0011Sysid          = data[12].substring(1, data[12].length() - 1);		// お客様＿ＳＹＳＩＤ
				String kk0081SvcKeiNo       = data[13].substring(1, data[13].length() - 1);		// サービス契約＿サービス契約番号
				String kk1681IdoRsvNo       = data[20].substring(1, data[20].length() - 1);		// 異動予約＿異動予約番号
				String kk1681IdoRsvHaneiYmd = data[21].substring(1, data[21].length() - 1);		// 異動予約＿異動予約反映日
				String kk1681IdoRsvStatCd   = data[22].substring(1, data[22].length() - 1);		// 異動予約＿異動予約状態コード
				String cmpAddKjtDiv         = "";												// キャンペーン登録期日到来区分
				String cmpAddKjtYmd         = "";												// キャンペーン登録期日到来年月日
				String trnRsltCd            = JBSbatKKConst.TRN_RSLT_CD_NORMAL;					// 処理結果コード
				
				// 処理結果コード判定
				// お客様＿SYSIDが未設定の場合
				if (!JKKBatCommon.isNotNull(ck0011Sysid))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "SYSID", sysid});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				// サービス契約＿サービス契約番号が未設定の場合
				else if (!JKKBatCommon.isNotNull(kk0081SvcKeiNo))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "サービス契約番号", svcKeiNo});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				// 異動予約＿異動予約番号が未設定の場合
				else if (!JKKBatCommon.isNotNull(kk1681IdoRsvNo))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "未存在", "異動予約", cmpAddOptyTgKey1});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				// 異動予約＿異動予約状態コードが「04：異動予約対象外」の場合、エラー
				else if (JBSbatKKConst.CD01168_IDO_RSV_STAT_CD_04.equals(kk1681IdoRsvStatCd))
				{
					// %1%,%2%：%3%エラー（%4%：%5%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1290AI, new String[]{
							sysid, sisakShinseiSeq, "異動予約状態コード", "異動予約状態コード", kk1681IdoRsvStatCd});
					trnRsltCd = JBSbatKKConst.TRN_RSLT_CD_ERR;
				}
				
				// キャンペーン登録期日到来区分判定
				// 処理結果コードが「00：正常終了」の場合
				if (JBSbatKKConst.TRN_RSLT_CD_NORMAL.equals(trnRsltCd))
				{
					// 異動予約＿異動予約状態コードが「02：取消済」の場合
					if (JBSbatKKConst.CD01168_IDO_RSV_STAT_CD_02.equals(kk1681IdoRsvStatCd))
					{
						// キャンペーン登録期日到来区分を「99：取消済」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_CL_ZM;
					}
					// 異動予約＿異動予約反映日が「未設定」の場合
					else if (!JKKBatCommon.isNotNull(kk1681IdoRsvHaneiYmd))
					{
						// キャンペーン登録期日到来区分を「00：未到来」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_MI_TOURAI;
					}
					// 異動予約＿異動予約反映日がバッチ運用日付より大きい場合
					else if (kk1681IdoRsvHaneiYmd.compareTo(super.opeDate) > 0)
					{
						// キャンペーン登録期日到来区分を「00：未到来」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_MI_TOURAI;
					}
					// 異動予約＿異動予約反映日がバッチ運用日付以下の場合
					else if (kk1681IdoRsvHaneiYmd.compareTo(super.opeDate) <= 0)
					{
						// キャンペーン登録期日到来区分を「01：到来済」とする
						cmpAddKjtDiv = JBSbatKKConst.CMP_ADD_KJT_DIV_TOURAI_ZM;
					}
				}
				
				// キャンペーン登録期日到来年月日判定
				// キャンペーン登録期日到来区分が「01：到来済」の場合
				if (JBSbatKKConst.CMP_ADD_KJT_DIV_TOURAI_ZM.equals(cmpAddKjtDiv))
				{
					// キャンペーン登録期日到来年月日を異動予約＿異動予約反映日とする
					cmpAddKjtYmd = kk1681IdoRsvHaneiYmd;
				}
				
				// 異動情報抽出結果送信にデータ情報を出力する
				ArrayList<String> outputInfo = new ArrayList<String>();
				
				// 項目設定
				outputInfo.add(sysid);					// SYSID
				outputInfo.add(sisakShinseiSeq);		// 施策申請枝番
				outputInfo.add(svcKeiNo);				// サービス契約番号
				outputInfo.add(cmpAddOptntyCd);			// キャンペーン登録契機コード
				outputInfo.add(cmpAddOptyTgKey1);		// キャンペーン登録契機対象キー1
				outputInfo.add(cmpAddOptyTgKey2);		// キャンペーン登録契機対象キー2
				outputInfo.add(cmpAddOptyTgKey3);		// キャンペーン登録契機対象キー3
				outputInfo.add(cmpAddOptyTgKey4);		// キャンペーン登録契機対象キー4
				outputInfo.add(cmpAddOptyTgKey5);		// キャンペーン登録契機対象キー5
				outputInfo.add(cmpAddKjtDiv);			// キャンペーン登録期日到来区分
				outputInfo.add(cmpAddKjtYmd);			// キャンペーン登録期日到来年月日
				outputInfo.add(trnRsltCd);				// 処理結果コード
				
				JKKBatCommon.printDoubleQuoteBusinessFileUtil(kkife338002FileObj, outputInfo);
			}
		}
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
			if (null != br)
			{
				br.close();
			}
		}
	}
}
