/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatKVWribVrfyCanpaignInfo
 *	ソースファイル名	：JBSbatKVWribVrfyCanpaignInfo.java
 *	作成者				：富士通　
 *	作成日				：2013年05月28日
 *＜機能概要＞
 *　割引検証キャンペーン情報検証部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2013/05/28   富士通		新規作成
 *********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatKVIFM016;
import eo.business.util.file.JBSbatKVIFM017;
import eo.business.util.file.JBSbatKVIFM018;
import eo.business.util.table.JBSbatKK_M_WRIB_SVC;
import eo.business.util.table.JBSbatKK_M_WRISVC_TG_SVC;
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;

/**
 * (クラスの機能概要)
 * <p>
 *<BR>
 * 
 * @author 富士通
 */
public class JBSbatKVWribVrfyCanpaignInfo extends JBSbatBusinessService
		implements JBSbatMatchServiceInterface {
	/** ▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼ */
	/** テーブル(割引サービス対象サービス) */
	private static final String D_TBL_NAME_KK_M_WRISVC_TG_SVC = "KK_M_WRISVC_TG_SVC";

	/** SQL定義キー(KV_SELECT_001) */
	private static final String KK_M_WRISVC_TG_SVC_KV_SELECT_001 = "KV_SELECT_001";

	/** テーブルアクセスクラス(割引サービス対象サービス) */
	private JBSbatSQLAccess db_KK_M_WRISVC_TG_SVC = null;
	/** ▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲ */

	/** ヘッダ出力処理用フラグ */
	private boolean booHeaderOutputFlg = false; 

	/** キーマッチ処理フラグ */
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ */
	private boolean mastProcFlg;

	/** トランファイル処理フラグ */
	private boolean tranProcFlg;
	
	/** 実行日付 */
	private String opeDate;

	/**
	 * 初期処理
	 * 
	 * @param JBSbatCommonItem
	 *            commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception {
		/** ▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼ */
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		opeDate = super.freeItem;
		
		// DBアクセスクラスを生成します
		db_KK_M_WRISVC_TG_SVC = new JBSbatSQLAccess(commonItem,
				D_TBL_NAME_KK_M_WRISVC_TG_SVC);
		/** ▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 主処理
	 * 
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap svcMap,
			JBSbatServiceInterfaceMap wribMap, JBSbatOutputItem outputInItem)
			throws Exception {

		/** ▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼ */
		super.logPrint.printDebugLog("execute_START");

		// 初回のみ処理
		if (!booHeaderOutputFlg)
		{
			this.editOutputHeaderItem(outputInItem);
			booHeaderOutputFlg = true;
		}
		
		if (svcMap == null && wribMap != null) {
			// サービス契約のみnullの場合
			this.setTranProcFlg(true);
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;

		} else if (svcMap != null && wribMap == null) {
			// 割引サービス契約のみnullの場合
			this.setMastProcFlg(true);
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;
		// 2013/09/09 add start
		} else if (svcMap.getString(JBSbatKVIFM016.SVC_KEI_STAT).equals("910")) {
			// 検証対象外
			super.logPrint.printDebugLog("検証対象外：" + svcMap.getString(JBSbatKVIFM016.SVC_KEI_NO));
			this.setMastProcFlg(true);
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;

		} else if (!wribMap.getString(JBSbatKVIFM017.WRIB_SVC_KEI_STAT).equals("100")) {
			// 検証対象外
			super.logPrint.printDebugLog("検証対象外：" + wribMap.getString(JBSbatKVIFM017.SVC_KEI_NO)
				+ "、" + wribMap.getString(JBSbatKVIFM017.WRIB_SVC_KEI_NO));
			this.setTranProcFlg(true);
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;
		// 2013/09/09 add end
		} else {

			// サービス契約番号を比較
			String strMastData = svcMap.getString(JBSbatKVIFM016.SVC_KEI_NO);
			String strTranData = wribMap.getString(JBSbatKVIFM017.SVC_KEI_NO);
			super.logPrint.printDebugLog("サービス契約：" + strMastData);
			super.logPrint.printDebugLog("割引サービス契約：" + strTranData);

			int intRsrt = strMastData.compareTo(strTranData);

			if (intRsrt == 0) {
				super.logPrint.printDebugLog("サービス契約＝割引サービス契約");

				// 2013/09/09 mod start
				// 割引サービス対象サービスを取得
				String[] param = new String[4];
				param[0] = opeDate;
				param[1] = opeDate;
				param[2] = opeDate;
				param[3] = wribMap.getString(JBSbatKVIFM017.WRIB_SVC_CD);

				executeKK_M_WRISVC_TG_SVC_KV_SELECT_001(param);
				JBSbatCommonDBInterface db_map = db_KK_M_WRISVC_TG_SVC
				.selectNext();

				boolean flg = false;
				// サービス契約に適用されている割引の条件と一致するか判定
				while (db_map != null) {
					super.logPrint.printDebugLog("割引サービス対象サービスの条件から判定");
					if (checkCanpaignInfo(db_map, svcMap)) {
						flg = true;
						break;
					}
					db_map = db_KK_M_WRISVC_TG_SVC.selectNext();
				}

				if (!flg) {
					super.logPrint.printDebugLog("割引サービス契約番号："
						+ wribMap.getString(JBSbatKVIFM017.WRIB_SVC_KEI_NO)
						+ " を出力");

					// 一致するデータがない場合、データを出力
					String[] outData = setOutData(svcMap, wribMap, "割引成立条件を満たしていないＣＰが適用されている。");
					outPutWork(outputInItem, outData);
				}else{
					String ukSta = db_map.getString(JBSbatKK_M_WRIB_SVC.UK_STA_YMDHM).substring(0, 8);
					String ukEnd = db_map.getString(JBSbatKK_M_WRIB_SVC.UK_END_YMDHM).substring(0, 8);
					String addYmd = wribMap.getString(JBSbatKVIFM017.WRIB_ADD_YMD);

					if (ukSta.compareTo(addYmd) > 0 || ukEnd.compareTo(addYmd) < 0){
						super.logPrint.printDebugLog("割引サービス契約番号："
							+ wribMap.getString(JBSbatKVIFM017.WRIB_SVC_KEI_NO)
							+ " を出力");

						// 一致するデータがない場合、データを出力
						String[] outData = setOutData(svcMap, wribMap, "受付期間外のキャンペーンが適用されている。");
						outPutWork(outputInItem, outData);
					}
				}
				// 2013/09/09 mod end
				
				// 割引サービス契約のみ次のデータを読み込む
				this.setMastProcFlg(false);
				this.setTranProcFlg(true);

			} else if (intRsrt < 0) {
				super.logPrint.printDebugLog("サービス契約＜割引サービス契約");
				// サービス契約のみ次のデータを読み込む
				this.setMastProcFlg(true);
				this.setTranProcFlg(false);

			} else {
				super.logPrint.printDebugLog("サービス契約＞割引サービス契約");
				// 割引サービス契約のみ次のデータを読み込む
				this.setMastProcFlg(false);
				this.setTranProcFlg(true);
			}
		}

		super.logPrint.printDebugLog("execute_END");

		return outputInItem;
		/** ▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 業務サービス終了処理
	 * 
	 * @throws Exception
	 */
	public void terminal() throws Exception {
		/** ▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼ */
		// DBアクセスクラスをクローズします
		db_KK_M_WRISVC_TG_SVC.close();
		/** ▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲ */
	}

	/** ▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼ */
	/**
	 * SQLKEY(KV_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.引数でバイント変数を設定します。&lt;br&gt;
	 * 
	 * 2.DBアクセスを実行します。&lt;br&gt;
	 * 
	 * 3.メソッドの呼び出し方です。&lt;br&gt;
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	割引サービス対象契約適用開始年月日
	 * 	 	割引サービス対象契約適用終了年月日
	 * 	 	予約適用年月日
	 * 	 	サービス契約番号
	 * </pre>
	 * <p>
	 * 
	 * @param param
	 *            バイント変数の値配列。
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_WRISVC_TG_SVC_KV_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());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_M_WRISVC_TG_SVC.selectBySqlDefine(paramList,
				KK_M_WRISVC_TG_SVC_KV_SELECT_001);
	}

	/** ▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲ */

	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg() {
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg() {
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg() {
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg
	 *            設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg) {
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg
	 *            設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg) {
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg
	 *            設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg) {
		this.tranProcFlg = tran_ProcFlg;
	}

	/**
	 * 出力データの設定を行う
	 * 
	 * @param svcMap
	 *            サービス契約データ
	 * @param wribMap
	 *            割引サービス契約データ
	 * @param message 検証結果
	 * @return 出力データ
	 * @throws Exception
	 */
	private String[] setOutData(JBSbatServiceInterfaceMap svcMap,
			JBSbatServiceInterfaceMap wribMap, String message) throws Exception {

		String[] outData = new String[56];
		// サービス契約番号
		outData[0] = svcMap.getString(JBSbatKVIFM016.SVC_KEI_NO);
		// サービス契約ステータス
		outData[1] = svcMap.getString(JBSbatKVIFM016.SVC_KEI_STAT);
		// サービス契約ステータス名称
		outData[2] = svcMap.getString(JBSbatKVIFM016.SVC_KEI_STAT_NM);
		// 料金コースコード
		outData[3] = svcMap.getString(JBSbatKVIFM016.PCRS_CD);
		// 料金コース名
		outData[4] = svcMap.getString(JBSbatKVIFM016.PCRS_NM);
		// 料金プランコード
		outData[5] = svcMap.getString(JBSbatKVIFM016.PPLAN_CD);
		// 料金プラン名
		outData[6] = svcMap.getString(JBSbatKVIFM016.PPLAN_NM);
		// 課金先番号
		outData[7] = svcMap.getString(JBSbatKVIFM016.KAKINS_NO);
		// 請求契約番号
		outData[8] = svcMap.getString(JBSbatKVIFM016.SEIKY_KEI_NO);
		// サービス契約回線内訳番号
		outData[9] = svcMap.getString(JBSbatKVIFM016.SVC_KEI_KAISEN_UCWK_NO);
		// プラン開始年月日(サービス)
		outData[10] = svcMap.getString(JBSbatKVIFM016.PLAN_STAYMD);
		// プラン終了年月日(サービス)
		outData[11] = svcMap.getString(JBSbatKVIFM016.PLAN_ENDYMD);
		// プラン課金開始年月日(サービス)
		outData[12] = svcMap.getString(JBSbatKVIFM016.PLAN_CHRG_STAYMD);
		// プラン課金終了年月日(サービス)
		outData[13] = svcMap.getString(JBSbatKVIFM016.PLAN_CHRG_ENDYMD);
		// サービスキャンセル年月日(サービス)
		outData[14] = svcMap.getString(JBSbatKVIFM016.SVC_CANCEL_YMD);
		// サービス開始年月日(サービス)
		outData[15] = svcMap.getString(JBSbatKVIFM016.SVC_STA_YMD);
		// サービス課金開始年月日(サービス)
		outData[16] = svcMap.getString(JBSbatKVIFM016.SVC_CHRG_STAYMD);
		// サービス休止年月日(サービス)
		outData[17] = svcMap.getString(JBSbatKVIFM016.SVC_PAUSE_YMD);
		// サービス休止解除年月日(サービス)
		outData[18] = svcMap.getString(JBSbatKVIFM016.SVC_PAUSE_RLS_YMD);
		// サービス終了年月日(サービス)
		outData[19] = svcMap.getString(JBSbatKVIFM016.SVC_ENDYMD);
		// サービス課金終了年月日(サービス)
		outData[20] = svcMap.getString(JBSbatKVIFM016.SVC_CHRG_ENDYMD);
		// サービス解約起算年月日(サービス)
		outData[21] = svcMap.getString(JBSbatKVIFM016.SVC_DSL_KISAN_YMD);
		// サービス解約年月日(サービス)
		outData[22] = svcMap.getString(JBSbatKVIFM016.SVC_DSL_YMD);
		// 回復年月日(サービス)
		outData[23] = svcMap.getString(JBSbatKVIFM016.KAIHK_YMD);
		// サービスキャンセル取消年月日(サービス)
		outData[24] = svcMap.getString(JBSbatKVIFM016.SVC_CANCEL_CL_YMD);
		// サービス解約取消年月日(サービス)
		outData[25] = svcMap.getString(JBSbatKVIFM016.SVC_DSL_CL_YMD);
		// 割引サービス契約番号
		outData[26] = wribMap.getString(JBSbatKVIFM017.WRIB_SVC_KEI_NO);
		// 割引サービス契約ステータス
		outData[27] = wribMap.getString(JBSbatKVIFM017.WRIB_SVC_KEI_STAT);
		// 割引サービス契約ステータス名称
		outData[28] = wribMap.getString(JBSbatKVIFM017.WRIB_SVC_KEI_STAT_NM);
		// SYSID
		outData[29] = wribMap.getString(JBSbatKVIFM017.SYSID);
		// 割引サービスコード
		outData[30] = wribMap.getString(JBSbatKVIFM017.WRIB_SVC_CD);
		// 表示用キャンペーンコード
		outData[31] = wribMap.getString(JBSbatKVIFM017.DSP_CAMPAIGN_CD);
		// 割引サービスコード
		outData[32] = wribMap.getString(JBSbatKVIFM017.WRIB_SVC_NM);
		// プラン開始年月日（割引）
		outData[33] = wribMap.getString(JBSbatKVIFM017.PLAN_STAYMD);
		// プラン終了年月日（割引）
		outData[34] = wribMap.getString(JBSbatKVIFM017.PLAN_ENDYMD);
		// プラン課金開始年月日（割引）
		outData[35] = wribMap.getString(JBSbatKVIFM017.PLAN_CHRG_STAYMD);
		// プラン課金終了年月日（割引）
		outData[36] = wribMap.getString(JBSbatKVIFM017.PLAN_CHRG_ENDYMD);
		// プラン終了種別コード
		outData[37] = wribMap.getString(JBSbatKVIFM017.PLAN_END_SBT_CD);
		// サービスキャンセル年月日（割引）
		outData[38] = wribMap.getString(JBSbatKVIFM017.SVC_CANCEL_YMD);
		// サービスキャンセル理由コード
		outData[39] = wribMap.getString(JBSbatKVIFM017.SVC_CANCEL_RSN_CD);
		// サービス開始年月日（割引）
		outData[40] = wribMap.getString(JBSbatKVIFM017.SVC_STA_YMD);
		// サービス課金開始年月日（割引）
		outData[41] = wribMap.getString(JBSbatKVIFM017.SVC_CHRG_STAYMD);
		// サービス終了年月日（割引）
		outData[42] = wribMap.getString(JBSbatKVIFM017.SVC_ENDYMD);
		// サービス課金終了年月日（割引）
		outData[43] = wribMap.getString(JBSbatKVIFM017.SVC_CHRG_ENDYMD);
		// サービス解約年月日（割引）
		outData[44] = wribMap.getString(JBSbatKVIFM017.SVC_DSL_YMD);
		// 回復年月日（割引）
		outData[45] = wribMap.getString(JBSbatKVIFM017.KAIHK_YMD);
		// サービスキャンセル取消年月日（割引）
		outData[46] = wribMap.getString(JBSbatKVIFM017.SVC_CANCEL_CL_YMD);
		// サービス解約取消年月日（割引）
		outData[47] = wribMap.getString(JBSbatKVIFM017.SVC_DSL_CL_YMD);
		// 紹介コード
		outData[48] = wribMap.getString(JBSbatKVIFM017.INTR_CD);
		// 申込起算年月日
		outData[49] = wribMap.getString(JBSbatKVIFM017.MSKM_KISAN_YMD);
		// 割引登録契機コード
		outData[50] = wribMap.getString(JBSbatKVIFM017.WRIB_ADD_OPTY_CD);
		// 割引解約キャンセル契機コード
		outData[51] = wribMap.getString(JBSbatKVIFM017.WRIB_DSL_CNCL_OPTY_CD);
		// 割引額算出基準年月日
		outData[52] = wribMap
				.getString(JBSbatKVIFM017.WRIB_AMNT_SNST_STDARDYMD);
		// 割引課金開始月指定コード
		outData[53] = wribMap
				.getString(JBSbatKVIFM017.WRIB_CHRG_STA_MON_STI_CD);
		// 割引登録年月日
		outData[54] = wribMap.getString(JBSbatKVIFM017.WRIB_ADD_YMD);
		
		// 検証結果
		outData[55] = message;

		return outData;
	}

	/**
	 * 不正データ出力処理
	 * 
	 * @param outputInItem
	 *            出力情報
	 * @param outData
	 *            出力するデータ
	 * @throws Exception
	 *             メソッド内で発生した例外全般。
	 */
	private void outPutWork(JBSbatOutputItem outputInItem, String[] outData)
			throws Exception {

		super.logPrint.printDebugLog("【出力開始】");

		// 入出力インタフェースオブジェクトを生成
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();

		// 出力項目を設定する
		// サービス契約番号
		out_map.setString(JBSbatKVIFM018.SVC_KEI_NO, outData[0]);
		// サービス契約ステータス
		out_map.setString(JBSbatKVIFM018.SVC_KEI_STAT, outData[1]);
		// サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM018.SVC_KEI_STAT_NM, outData[2]);
		// 料金コースコード
		out_map.setString(JBSbatKVIFM018.PCRS_CD, outData[3]);
		// 料金コース名
		out_map.setString(JBSbatKVIFM018.PCRS_NM, outData[4]);
		// 料金プランコード
		out_map.setString(JBSbatKVIFM018.PPLAN_CD, outData[5]);
		// 料金プラン名
		out_map.setString(JBSbatKVIFM018.PPLAN_NM, outData[6]);
		// 課金先番号
		out_map.setString(JBSbatKVIFM018.KAKINS_NO, outData[7]);
		// 請求契約番号
		out_map.setString(JBSbatKVIFM018.SEIKY_KEI_NO, outData[8]);
		// サービス契約回線内訳番号
		out_map.setString(JBSbatKVIFM018.SVC_KEI_KAISEN_UCWK_NO, outData[9]);
		// プラン開始年月日(サービス)
		out_map.setString(JBSbatKVIFM018.PLAN_STAYMD_SVC, outData[10]);
		// プラン終了年月日(サービス)
		out_map.setString(JBSbatKVIFM018.PLAN_ENDYMD_SVC, outData[11]);
		// プラン課金開始年月日(サービス)
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_STAYMD_SVC, outData[12]);
		// プラン課金終了年月日(サービス)
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_ENDYMD_SVC, outData[13]);
		// サービスキャンセル年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_YMD_SVC, outData[14]);
		// サービス開始年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_STA_YMD_SVC, outData[15]);
		// サービス課金開始年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_STAYMD_SVC, outData[16]);
		// サービス休止年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_PAUSE_YMD, outData[17]);
		// サービス休止解除年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_PAUSE_RLS_YMD, outData[18]);
		// サービス終了年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_ENDYMD_SVC, outData[19]);
		// サービス課金終了年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_ENDYMD_SVC, outData[20]);
		// サービス解約起算年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_DSL_KISAN_YMD, outData[21]);
		// サービス解約年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_DSL_YMD_SVC, outData[22]);
		// 回復年月日(サービス)
		out_map.setString(JBSbatKVIFM018.KAIHK_YMD_SVC, outData[23]);
		// サービスキャンセル取消年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_CL_YMD_SVC, outData[24]);
		// サービス解約取消年月日(サービス)
		out_map.setString(JBSbatKVIFM018.SVC_DSL_CL_YMD_SVC, outData[25]);
		// 割引サービス契約番号
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_KEI_NO, outData[26]);
		// 割引サービス契約ステータス
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_KEI_STAT, outData[27]);
		// 割引サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_KEI_STAT_NM, outData[28]);
		// ＳＹＳＩＤ
		out_map.setString(JBSbatKVIFM018.SYSID, outData[29]);
		// 割引サービスコード
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_CD, outData[30]);
		// 表示用キャンペーンコード
		out_map.setString(JBSbatKVIFM018.DSP_CAMPAIGN_CD, outData[31]);
		// 割引サービス名
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_NM, outData[32]);
		// プラン終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_STAYMD_WRIB, outData[33]);
		// プラン終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_ENDYMD_WRIB, outData[34]);
		// プラン課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_STAYMD_WRIB, outData[35]);
		// プラン課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_ENDYMD_WRIB, outData[36]);
		// プラン終了種別コード
		out_map.setString(JBSbatKVIFM018.PLAN_END_SBT_CD, outData[37]);
		// サービスキャンセル年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_YMD_WRIB, outData[38]);
		// サービスキャンセル理由コード
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_RSN_CD, outData[39]);
		// サービス開始年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_STA_YMD_WRIB, outData[40]);
		// サービス課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_STAYMD_WRIB, outData[41]);
		// サービス終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_ENDYMD_WRIB, outData[42]);
		// サービス課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_ENDYMD_WRIB, outData[43]);
		// サービス解約年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_DSL_YMD_WRIB, outData[44]);
		// 回復年月日（割引）
		out_map.setString(JBSbatKVIFM018.KAIHK_YMD_WRIB, outData[45]);
		// サービスキャンセル取消年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_CL_YMD_WRIB, outData[46]);
		// サービス解約取消年月日v
		out_map.setString(JBSbatKVIFM018.SVC_DSL_CL_YMD_WRIB, outData[47]);
		// 紹介コード
		out_map.setString(JBSbatKVIFM018.INTR_CD, outData[48]);
		// 申込起算年月日
		out_map.setString(JBSbatKVIFM018.MSKM_KISAN_YMD, outData[49]);
		// 割引解約キャンセル契機コード
		out_map.setString(JBSbatKVIFM018.WRIB_ADD_OPTY_CD, outData[50]);
		// 割引解約キャンセル契機コード
		out_map.setString(JBSbatKVIFM018.WRIB_DSL_CNCL_OPTY_CD, outData[51]);
		// 割引額算出基準年月日
		out_map.setString(JBSbatKVIFM018.WRIB_AMNT_SNST_STDARDYMD, outData[52]);
		// 割引課金開始月指定コード
		out_map.setString(JBSbatKVIFM018.WRIB_CHRG_STA_MON_STI_CD, outData[53]);
		// 割引登録年月日
		out_map.setString(JBSbatKVIFM018.WRIB_ADD_YMD, outData[54]);
		// 検証結果
		out_map.setString(JBSbatKVIFM018.CHECK_RESULT, outData[55]);

		// 出力フラグを設定
		out_map.setOutFlg(true);

		// 出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList(out_map);
		super.logPrint.printDebugLog("【出力終了】");
	}

	/**
	 * テーブルから取得した条件がサービス契約に適用されている割引に適用できる条件かを判定
	 * 
	 * @param map_db
	 *            割引サービス対象サービスのデータ
	 * @param svcMap
	 *            サービス契約マップデータ
	 * @return サービス契約に適用されている割引に合致する条件のデータか
	 * @throws Exception
	 */
	private boolean checkCanpaignInfo(JBSbatCommonDBInterface map_db,
			JBSbatServiceInterfaceMap svcMap) {

		try {
			// サービスコード
			String svcCd = map_db.getString(JBSbatKK_M_WRISVC_TG_SVC.SVC_CD);
			// 料金グループコード
			String prcGrpCd = map_db
					.getString(JBSbatKK_M_WRISVC_TG_SVC.PRC_GRP_CD);
			// 料金コースコード
			String pcrsCd = map_db.getString(JBSbatKK_M_WRISVC_TG_SVC.PCRS_CD);
			// 料金プランコード
			String pplanCd = map_db
					.getString(JBSbatKK_M_WRISVC_TG_SVC.PPLAN_CD);

			// テーブルから取得した条件が対象のサービス契約に合致するか判定
			if ((svcCd == null || svcMap.getString(JBSbatKVIFM016.SVC_CD)
					.equals(svcCd))
					&& (prcGrpCd == null || svcMap.getString(
							JBSbatKVIFM016.PRC_GRP_CD).equals(prcGrpCd))
					&& (pcrsCd == null || svcMap.getString(
							JBSbatKVIFM016.PCRS_CD).equals(pcrsCd))
					&& (pplanCd == null || svcMap.getString(
							JBSbatKVIFM016.PPLAN_CD).equals(pplanCd))) {
				return true;
			}
			return false;

		} catch (Exception e) {
			return false;
		}
	}
	
	/**
	 * 検証結果ファイル（ヘッダ）を編集します。
	 * 
	 * @param outputInItem 出力ファイル
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void editOutputHeaderItem(JBSbatOutputItem outputInItem) throws Exception
	{
		// ヘッダ項目の変数を指定する
		String COLUMN_01 = "サービス契約番号";
		String COLUMN_02 = "サービス契約ステータス";
		String COLUMN_03 = "サービス契約ステータス名称";
		String COLUMN_04 = "料金コースコード";
		String COLUMN_05 = "料金コース名";
		String COLUMN_06 = "料金プランコード";
		String COLUMN_07 = "料金プラン名";
		String COLUMN_08 = "課金先番号";
		String COLUMN_09 = "請求契約番号";
		String COLUMN_10 = "サービス契約回線内訳番号";
		String COLUMN_11 = "プラン開始年月日（サービス）";
		String COLUMN_12 = "プラン終了年月日（サービス）";
		String COLUMN_13 = "プラン課金開始年月日（サービス）";
		String COLUMN_14 = "プラン課金終了年月日（サービス）";
		String COLUMN_15 = "サービスキャンセル年月日（サービス）";
		String COLUMN_16 = "サービス開始年月日（サービス）";
		String COLUMN_17 = "サービス課金開始年月日（サービス）";
		String COLUMN_18 = "サービス休止年月日（サービス）";
		String COLUMN_19 = "サービス休止解除年月日（サービス）";
		String COLUMN_20 = "サービス終了年月日（サービス）";
		String COLUMN_21 = "サービス課金終了年月日（サービス）";
		String COLUMN_22 = "サービス解約起算年月日（サービス）";
		String COLUMN_23 = "サービス解約年月日（サービス）";
		String COLUMN_24 = "回復年月日（サービス）";
		String COLUMN_25 = "サービスキャンセル取消年月日（サービス）";
		String COLUMN_26 = "サービス解約取消年月日（サービス）";
		String COLUMN_27 = "割引サービス契約番号";
		String COLUMN_28 = "割引サービス契約ステータス";
		String COLUMN_29 = "割引サービス契約ステータス名称";
		String COLUMN_30 = "ＳＹＳＩＤ";
		String COLUMN_31 = "割引サービスコード";
		String COLUMN_32 = "表示用キャンペーンコード";
		String COLUMN_33 = "割引サービス名";
		String COLUMN_34 = "プラン開始年月日（割引）";
		String COLUMN_35 = "プラン終了年月日（割引）";
		String COLUMN_36 = "プラン課金開始年月日（割引）";
		String COLUMN_37 = "プラン課金終了年月日（割引）";
		String COLUMN_38 = "プラン終了種別コード";
		String COLUMN_39 = "サービスキャンセル年月日（割引）";
		String COLUMN_40 = "サービスキャンセル理由コード";
		String COLUMN_41 = "サービス開始年月日（割引）";
		String COLUMN_42 = "サービス課金開始年月日（割引）";
		String COLUMN_43 = "サービス終了年月日（割引）";
		String COLUMN_44 = "サービス課金終了年月日（割引）";
		String COLUMN_45 = "サービス解約年月日（割引）";
		String COLUMN_46 = "回復年月日（割引）";
		String COLUMN_47 = "サービスキャンセル取消年月日（割引）";
		String COLUMN_48 = "サービス解約取消年月日（割引）";
		String COLUMN_49 = "紹介コード";
		String COLUMN_50 = "申込起算年月日";
		String COLUMN_51 = "割引登録契機コード";
		String COLUMN_52 = "割引解約キャンセル契機コード";
		String COLUMN_53 = "割引額算出基準年月日";
		String COLUMN_54 = "割引課金開始月指定コード";
		String COLUMN_55 = "割引登録年月日";
		String COLUMN_56 = "検証結果";
		
		// 入出力インタフェースオブジェクトを生成
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		
		// 出力項目を設定する
		out_map.setString(JBSbatKVIFM018.SVC_KEI_NO,				COLUMN_01);			// サービス契約番号
		out_map.setString(JBSbatKVIFM018.SVC_KEI_STAT ,				COLUMN_02);			// サービス契約ステータス
		out_map.setString(JBSbatKVIFM018.SVC_KEI_STAT_NM ,			COLUMN_03);			// サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM018.PCRS_CD ,					COLUMN_04);			// 料金コースコード
		out_map.setString(JBSbatKVIFM018.PCRS_NM ,					COLUMN_05);			// 料金コース名
		out_map.setString(JBSbatKVIFM018.PPLAN_CD ,					COLUMN_06);			// 料金プランコード
		out_map.setString(JBSbatKVIFM018.PPLAN_NM ,					COLUMN_07);			// 料金プラン名
		out_map.setString(JBSbatKVIFM018.KAKINS_NO ,				COLUMN_08);			// 課金先番号
		out_map.setString(JBSbatKVIFM018.SEIKY_KEI_NO ,				COLUMN_09);			// 請求契約番号
		out_map.setString(JBSbatKVIFM018.SVC_KEI_KAISEN_UCWK_NO ,	COLUMN_10);			// サービス契約回線内訳番号
		out_map.setString(JBSbatKVIFM018.PLAN_STAYMD_SVC ,			COLUMN_11);			// プラン開始年月日（サービス）
		out_map.setString(JBSbatKVIFM018.PLAN_ENDYMD_SVC ,			COLUMN_12);			// プラン終了年月日（サービス）
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_STAYMD_SVC ,		COLUMN_13);			// プラン課金開始年月日（サービス）
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_ENDYMD_SVC ,		COLUMN_14);			// プラン課金終了年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_YMD_SVC ,		COLUMN_15);			// サービスキャンセル年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_STA_YMD_SVC ,			COLUMN_16);			// サービス開始年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_STAYMD_SVC ,		COLUMN_17);			// サービス課金開始年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_PAUSE_YMD ,			COLUMN_18);			// サービス休止年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_PAUSE_RLS_YMD ,		COLUMN_19);			// サービス休止解除年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_ENDYMD_SVC ,			COLUMN_20);			// サービス終了年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_ENDYMD_SVC ,		COLUMN_21);			// サービス課金終了年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_DSL_KISAN_YMD ,		COLUMN_22);			// サービス解約起算年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_DSL_YMD_SVC ,			COLUMN_23);			// サービス解約年月日（サービス）
		out_map.setString(JBSbatKVIFM018.KAIHK_YMD_SVC ,			COLUMN_24);			// 回復年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_CL_YMD_SVC ,	COLUMN_25);			// サービスキャンセル取消年月日（サービス）
		out_map.setString(JBSbatKVIFM018.SVC_DSL_CL_YMD_SVC ,		COLUMN_26);			// サービス解約取消年月日（サービス）
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_KEI_NO ,			COLUMN_27);			// 割引サービス契約番号
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_KEI_STAT ,		COLUMN_28);			// 割引サービス契約ステータス
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_KEI_STAT_NM ,		COLUMN_29);			// 割引サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM018.SYSID ,					COLUMN_30);			// ＳＹＳＩＤ
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_CD ,				COLUMN_31);			// 割引サービスコード
		out_map.setString(JBSbatKVIFM018.DSP_CAMPAIGN_CD ,			COLUMN_32);			// 表示用キャンペーンコード
		out_map.setString(JBSbatKVIFM018.WRIB_SVC_NM ,				COLUMN_33);			// 割引サービス名
		out_map.setString(JBSbatKVIFM018.PLAN_STAYMD_WRIB ,			COLUMN_34);			// プラン開始年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_ENDYMD_WRIB ,			COLUMN_35);			// プラン終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_STAYMD_WRIB ,	COLUMN_36);			// プラン課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_CHRG_ENDYMD_WRIB ,	COLUMN_37);			// プラン課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.PLAN_END_SBT_CD ,			COLUMN_38);			// プラン終了種別コード
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_YMD_WRIB ,		COLUMN_39);			// サービスキャンセル年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_RSN_CD ,		COLUMN_40);			// サービスキャンセル理由コード
		out_map.setString(JBSbatKVIFM018.SVC_STA_YMD_WRIB ,			COLUMN_41);			// サービス開始年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_STAYMD_WRIB ,		COLUMN_42);			// サービス課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_ENDYMD_WRIB ,			COLUMN_43);			// サービス終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CHRG_ENDYMD_WRIB ,		COLUMN_44);			// サービス課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_DSL_YMD_WRIB ,			COLUMN_45);			// サービス解約年月日（割引）
		out_map.setString(JBSbatKVIFM018.KAIHK_YMD_WRIB ,			COLUMN_46);			// 回復年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_CANCEL_CL_YMD_WRIB ,	COLUMN_47);			// サービスキャンセル取消年月日（割引）
		out_map.setString(JBSbatKVIFM018.SVC_DSL_CL_YMD_WRIB ,		COLUMN_48);			// サービス解約取消年月日（割引）
		out_map.setString(JBSbatKVIFM018.INTR_CD ,					COLUMN_49);			// 紹介コード
		out_map.setString(JBSbatKVIFM018.MSKM_KISAN_YMD ,			COLUMN_50);			// 申込起算年月日
		out_map.setString(JBSbatKVIFM018.WRIB_ADD_OPTY_CD ,			COLUMN_51);			// 割引登録契機コード
		out_map.setString(JBSbatKVIFM018.WRIB_DSL_CNCL_OPTY_CD ,	COLUMN_52);			// 割引解約キャンセル契機コード
		out_map.setString(JBSbatKVIFM018.WRIB_AMNT_SNST_STDARDYMD ,	COLUMN_53);			// 割引額算出基準年月日
		out_map.setString(JBSbatKVIFM018.WRIB_CHRG_STA_MON_STI_CD ,	COLUMN_54);			// 割引課金開始月指定コード
		out_map.setString(JBSbatKVIFM018.WRIB_ADD_YMD ,				COLUMN_55);			// 割引登録年月日
		out_map.setString(JBSbatKVIFM018.CHECK_RESULT ,				COLUMN_56);			// 検証結果
		
		//出力フラグを設定
		out_map.setOutFlg(true);
		
		//出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList(out_map);
	}
}
