/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKVseiopsvsonzai
*	ソースファイル名	：JBSbatKVseiopsvsonzai.java
*	作成者				：富士通　
*	作成日				：2014年05月26日
*＜機能概要＞
*　請求オプション存在チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v9.00.00	2014/05/26   富士通		新規作成
*	v9.00.01	2014/06/16   舩橋		IT1-2014-0000217
*   v9.00.02	2014/06/25   乾		    ST4-2014-0000038
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.business.util.file.JBSbatKVIFM034;
import eo.business.util.file.JBSbatKVIFM041;
import eo.business.util.table.JBSbatKK_T_KAKINS;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SEIOPSVC_KEI;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKVseiopsvsonzai extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(課金先)*/
	private static final String D_TBL_NAME_KK_T_KAKINS = "KK_T_KAKINS";

	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(請求オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_SEIOPSVC_KEI = "KK_T_SEIOPSVC_KEI";

	/** SQL定義キー(KV_SELECT_003)*/
	private static final String KK_T_KAKINS_KV_SELECT_003 = "KV_SELECT_003";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String KK_T_SEIKY_KEI_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_026)*/
	private static final String KK_T_SVC_KEI_KV_SELECT_026 = "KV_SELECT_026";

	/** SQL定義キー(KV_SELECT_004)*/
	private static final String KK_T_SEIOPSVC_KEI_KV_SELECT_004 = "KV_SELECT_004";

	/** テーブルアクセスクラス(課金先)*/
	private JBSbatSQLAccess db_KK_T_KAKINS = null;

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(請求オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_SEIOPSVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 調査内容区分メッセージ(請求書発行希望・ネット系サービス解約済・請求オプションあり) */
	private static final String MSG_CHOSA_NAIYO_KBN_01 = "請求書発行希望・ネット系サービス解約済・請求オプションあり";
	/** 調査内容区分メッセージ(請求書発行希望・ネット系サービスあり・請求オプションなし) */
	private static final String MSG_CHOSA_NAIYO_KBN_02 = "請求書発行希望・ネット系サービスあり・請求オプションなし";
	/** 調査内容区分メッセージ(請求書発行希望・ネット系サービスなし・請求オプションあり) */
	private static final String MSG_CHOSA_NAIYO_KBN_03 = "請求書発行希望・ネット系サービスなし・請求オプションあり";
	/** 調査内容区分メッセージ(請求書発行非希望・ネット系サービス解約済・請求オプションあり) */
	private static final String MSG_CHOSA_NAIYO_KBN_04 = "請求書発行非希望・ネット系サービス解約済・請求オプションあり";
	/** 調査内容区分メッセージ(請求書発行非希望・ネット系サービスあり・請求オプションあり) */
	private static final String MSG_CHOSA_NAIYO_KBN_05 = "請求書発行非希望・ネット系サービスあり・請求オプションあり";
	/** 調査内容区分メッセージ(請求書発行非希望・ネット系サービスなし・請求オプションあり) */
	private static final String MSG_CHOSA_NAIYO_KBN_06 = "請求書発行非希望・ネット系サービスなし・請求オプションあり";
	/** 調査内容区分メッセージ(DB不整合・課金先なし) */
	private static final String MSG_CHOSA_NAIYO_KBN_08 = "DB不整合・課金先なし";
	/** 調査内容区分メッセージ(DB不整合・請求契約なし) */
	private static final String MSG_CHOSA_NAIYO_KBN_09 = "DB不整合・請求契約なし";
    
	/** 要否(否)*/
	private static final String YH_HI = "0";
	/** 要否(要)*/
	private static final String YH_YO = "1";

	/** サービス契約ステータス(解約済)*/
	private static final String SVC_KEI_STAT_KAIYAKU = "910";
	/** サービス契約ステータス(キャンゼル済)*/
	private static final String SVC_KEI_STAT_CANCEL = "920";

	/** サービス契約(取得できない)*/
	private static final String SVC_NOT_GET = "1";
	/** サービス契約(解約済み・キャンセル済みのみ存在)*/
	private static final String SVC_NOMI_SONZAI = "2";
	/** サービス契約(解約済み・キャンセル済み以外が存在)*/
	private static final String SVC_IGAI_SONZAI = "3";

	/** 請求オプションサービス契約ステータス(サービス提供中)*/
	private static final String SEIOPSVC_KEI_STAT_TEIKYO = "100";
	/** 請求オプションサービス契約ステータス(休止・中断中)*/
	private static final String SEIOPSVC_KEI_STAT_CHUSI = "210";
	/** 請求オプションサービス契約ステータス(停止中)*/
	private static final String SEIOPSVC_KEI_STAT_TEISI = "220";

	/** ヘッダ出力処理用フラグ */
	private boolean booHeaderOutputFlg = false;

	/** 調査内容 */
	private String Chosa_Naiyo = "";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラス(課金先)を生成します
		db_KK_T_KAKINS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAKINS);

		// DBアクセスクラス(請求契約)を生成します
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);

		// DBアクセスクラス(サービス契約)を生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);

		// DBアクセスクラス(請求オプションサービス契約)を生成します
		db_KK_T_SEIOPSVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIOPSVC_KEI);
	}

	/**
	 * 主処理
	 * @param inMap　入力電文(当日異動情報_ALLファイルのレコードセット)
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
// ST4-2014-0000038 ADD START
		try{
// ST4-2014-0000038 ADD END
		//　課金先レコードセット
		JBSbatCommonDBInterface resultKakin =null;

		// 請求契約レコードセット
		JBSbatCommonDBInterface resultSeiky = null;

		// サービス契約レコードセット
		JBSbatCommonDBInterface resultSvc = null;

		// サービス契約レコードセット(1レコード目のみ)
		JBSbatCommonDBInterface recSvc = null;

		// 請求オプションサービス契約レコードセット
		JBSbatCommonDBInterface resultSeiOpSvc = null;

		// 請求オプション課金期間チェック結果ファイル用入出力インターフェイスオブジェクトを生成
		JBSbatServiceInterfaceMap mapKVIFM041 = new JBSbatServiceInterfaceMap();

		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// ファイル出力 (請求オプション存在チェック結果ファイル ヘッダー部
		// ※初回のみ行う
		if (!booHeaderOutputFlg)
		{
			// 入力レコードが無い場合、空ファイルを出力する
			if (inMap == null){
				super.commonItem.getOutPutFile().write("");
			} else {
				// ファイル出力 (請求オプション存在チェック結果ファイル ヘッダー部)
				mapKVIFM041 = this.getOutputHeaderData();
				outputBean.addOutMapList(mapKVIFM041);
			}

			booHeaderOutputFlg = true;
		}

		//**************************
		// 請求契約番号の取得
		//**************************
		// サービス契約番号をもとに「課金先」より同一請求契約番号に紐付く適用期間中の
		// 請求契約番号を取得する。
		Object[] setParamKakin = {inMap.getString(JBSbatKVIFM034.SVC_KEI_NO),
								super.opeDate, super.opeDate};
		this.executeKK_T_KAKINS_KV_SELECT_003(setParamKakin);
		resultKakin = this.db_KK_T_KAKINS.selectNext();

		// 請求契約番号が取得できない場合は、調査内容を「DB不整合・課金先なし」として
		// チェック結果を出力する。
		if (resultKakin == null)
		{
			// ファイル出力 (請求オプション存在チェック結果ファイル 明細部)
			mapKVIFM041 = this.getOutputDetailData(inMap, null, null, null,MSG_CHOSA_NAIYO_KBN_08);
			outputBean.addOutMapList(mapKVIFM041);
			return outputBean;
		}

		// 課金先の内容確認
		while (resultKakin != null){

			//**************************
			// 請求契約の取得
			//**************************
			// 請求契約番号をもとに「請求契約」より請求契約ステータスが請求中の
			// 請求契約データを取得する。
			Object[] setParamSeiky = {resultKakin.getString(JBSbatKK_T_KAKINS.SEIKY_KEI_NO),
									  super.opeDate};
			this.executeKK_T_SEIKY_KEI_KV_SELECT_001(setParamSeiky);
			resultSeiky = this.db_KK_T_SEIKY_KEI.selectNext();

			// 請求契約データが取得できない場合は、調査内容を「DB不整合・請求契約なし」として
			// チェック結果を出力する。
			if (resultSeiky == null)
			{
				// ファイル出力 (請求オプション存在チェック結果ファイル 明細部)
				mapKVIFM041 = this.getOutputDetailData(inMap, null, null, null,MSG_CHOSA_NAIYO_KBN_09);
				outputBean.addOutMapList(mapKVIFM041);
			}
			else {

				//**************************
				// サービス契約の取得
				//**************************
				// 課金先のサービス契約番号をもとに「サービス契約」よりネット系サービスありの
				// サービス契約データを取得する。
				Object[] setParamSvc = {resultKakin.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO),
										  super.opeDate};
				this.executeKK_T_SVC_KEI_KV_SELECT_026(setParamSvc);
				resultSvc = this.db_KK_T_SVC_KEI.selectNext();

				// 取得したサービス契約情報をリストへ一時保持
				ArrayList<JBSbatCommonDBInterface> svcList = new ArrayList<JBSbatCommonDBInterface>();

				//**************************
				// サービス契約の判定
				//**************************
				String Svc_Status = SVC_NOT_GET;

				// サービス契約の確認
				if (resultSvc != null) {
					Svc_Status = SVC_NOMI_SONZAI;

					// サービス契約ステータスの確認
					while (resultSvc != null){
					    svcList.add(resultSvc);

					    if(!SVC_KEI_STAT_KAIYAKU.equals(resultSvc.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)) 
						&& !SVC_KEI_STAT_CANCEL.equals(resultSvc.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))){
					    	Svc_Status = SVC_IGAI_SONZAI;
					    	break;
					    }

					    resultSvc = this.db_KK_T_SVC_KEI.selectNext();
					}

					// サービス契約情報の1レコード目を取得
					recSvc = svcList.get(0);
				}
				else{
					recSvc = null;
				}

				//***************************************
				// 請求オプションサービス契約の取得
				//***************************************
				// 課金先の請求契約番号をもとに「請求オプションサービス契約」より
				// 請求オプションサービス契約データを取得する。
				Object[] setParamOpt = {resultKakin.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO),
										  super.opeDate};
				this.executeKK_T_SEIOPSVC_KEI_KV_SELECT_004(setParamOpt);
				resultSeiOpSvc = this.db_KK_T_SEIOPSVC_KEI.selectNext();

				//**************************
				// 調査内容の判定
				//**************************
				Chosa_Naiyo = "";

				// 「請求書発行希望・ネット系サービス解約済・請求オプションあり」
				if(YH_YO.equals(resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH))
				&& SVC_NOMI_SONZAI.equals(Svc_Status)
				&& resultSeiOpSvc != null
				&& (SEIOPSVC_KEI_STAT_TEIKYO.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
				||  SEIOPSVC_KEI_STAT_CHUSI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
				||  SEIOPSVC_KEI_STAT_TEISI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT)))) {
					Chosa_Naiyo = MSG_CHOSA_NAIYO_KBN_01;
				}
				// 「請求書発行希望・ネット系サービスあり・請求オプションなし」
				else if(YH_YO.equals(resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH))
					  && SVC_IGAI_SONZAI.equals(Svc_Status)
					  && resultSeiOpSvc == null) {
					Chosa_Naiyo = MSG_CHOSA_NAIYO_KBN_02;
				}
				// 「請求書発行希望・ネット系サービスなし・請求オプションあり」
				else if(YH_YO.equals(resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH))
					  && SVC_NOT_GET.equals(Svc_Status)
					  && resultSeiOpSvc != null
					  && (SEIOPSVC_KEI_STAT_TEIKYO.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_CHUSI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_TEISI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT)))) {
					Chosa_Naiyo = MSG_CHOSA_NAIYO_KBN_03;
				}
				// 「請求書発行非希望・ネット系サービス解約済・請求オプションあり」
				else if(YH_HI.equals(resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH))
					  && SVC_NOMI_SONZAI.equals(Svc_Status)
					  && resultSeiOpSvc != null
					  && (SEIOPSVC_KEI_STAT_TEIKYO.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_CHUSI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_TEISI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT)))) {
					Chosa_Naiyo = MSG_CHOSA_NAIYO_KBN_04;
				}
				// 「請求書発行非希望・ネット系サービスあり・請求オプションあり」
				else if(YH_HI.equals(resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH))
					  && SVC_IGAI_SONZAI.equals(Svc_Status)
					  && resultSeiOpSvc != null
					  && (SEIOPSVC_KEI_STAT_TEIKYO.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_CHUSI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_TEISI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT)))) {
					Chosa_Naiyo = MSG_CHOSA_NAIYO_KBN_05;
				}
				// 「請求書発行非希望・ネット系サービスなし・請求オプションあり」
				else if(YH_HI.equals(resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH))
					  && SVC_NOT_GET.equals(Svc_Status)
					  && resultSeiOpSvc != null
					  && (SEIOPSVC_KEI_STAT_TEIKYO.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_CHUSI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT))
					  ||  SEIOPSVC_KEI_STAT_TEISI.equals(resultSeiOpSvc.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT)))) {
					Chosa_Naiyo = MSG_CHOSA_NAIYO_KBN_06;
				}

				// 調査内容判定
				if(!"".equals(Chosa_Naiyo)){
					// ファイル出力 (請求オプション存在チェック結果ファイル 明細部)
					mapKVIFM041 = this.getOutputDetailData(inMap, resultSeiky, recSvc, resultSeiOpSvc, Chosa_Naiyo);
					outputBean.addOutMapList(mapKVIFM041);
				}
			}

			
			resultKakin = this.db_KK_T_KAKINS.selectNext();
		}

		return outputBean;
// ST4-2014-0000038 ADD START
		}catch(Exception e){
			return null;
		}
// ST4-2014-0000038 ADD START
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		// DBアクセスクラスをクローズします
		db_KK_T_KAKINS.close();
		db_KK_T_SEIKY_KEI.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_SEIOPSVC_KEI.close();
	}

	/**
	 * SQLKEY(KV_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 executeKK_T_KAKINS_KV_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_KK_T_KAKINS.selectBySqlDefine(paramList, KK_T_KAKINS_KV_SELECT_003);
	}

	/**
	 * SQLKEY(KV_SELECT_001)で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_SEIKY_KEI_KV_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_KV_SELECT_001);
	}

	/**
	 * SQLKEY(KV_SELECT_026)で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_KV_SELECT_026(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KV_SELECT_026);
	}

	/**
	 * SQLKEY(KV_SELECT_004)で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_SEIOPSVC_KEI_KV_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SEIOPSVC_KEI.selectBySqlDefine(paramList, KK_T_SEIOPSVC_KEI_KV_SELECT_004);
	}

	/**
	 * ファイル出力レコード取得 (請求オプション存在チェック結果ファイル ヘッダー部)
	 * 
	 * @return              レコードオブジェクト
	 * @throws Exception    各種エラー
	 */
	private JBSbatServiceInterfaceMap getOutputHeaderData() throws Exception
	{
		// 請求オプション存在チェック結果ファイル用入出力インターフェイスオブジェクトを生成
		JBSbatServiceInterfaceMap mapKVIFM041 = new JBSbatServiceInterfaceMap();

		// 01.サービス契約番号
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_KEI_NO, "サービス契約番号");
		// 02.SYSID
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_SYSID, "SYSID");
		// 03.請求契約番号
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_SEIKY_KEI_NO, "請求契約番号");
		// 04.請求オプション契約番号
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_SEIOPSVC_KEI_NO, "請求オプション契約番号");
		// 05.請求オプションステータス
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_SEIOPSVC_KEI_STAT, "請求オプションステータス");
		// 06.オプション課金開始日
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_SVC_CHRG_STAYMD, "オプション課金開始日");
		// 07.オプション課金終了日
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_SVC_CHRG_ENDYMD, "オプション課金終了日");
		// 08.請求書発行要否
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_SEIKYUS_HAKKO_YH, "請求書発行要否");
		// 09.初回請求年月
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_FIRST_SEIKY_YM, "初回請求年月");
		// 10.サービス契約ステータス
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_KEI_STAT, "サービス契約ステータス");
		// 11.サービス課金開始日
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_CHRG_STAYMD, "サービス課金開始日");
		// 12.サービス課金終了日
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_CHRG_ENDYMD, "サービス課金終了日");
		// 13.調査内容区分
		mapKVIFM041.setString(JBSbatKVIFM041.CHO_NAIYO_KBN, "調査内容区分");
		// 14.サービス契約登録運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_ADD_UNYO_YMD, "サービス契約登録運用年月日");
		// 15.サービス契約登録処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_ADD_TRN_ID, "サービス契約登録処理ID");
		// 16.サービス契約更新運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_UPD_UNYO_YMD, "サービス契約更新運用年月日");
		// 17.サービス契約更新処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_UPD_TRN_ID, "サービス契約更新処理ID");
		// 18.サービス契約削除運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_DEL_UNYO_YMD, "サービス契約削除運用年月日");
		// 19.サービス契約削除処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.SVC_DEL_TRN_ID, "サービス契約削除処理ID");
		// 20.請求契約登録運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_ADD_UNYO_YMD, "請求契約登録運用年月日");
		// 21.請求契約登録処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_ADD_TRN_ID, "請求契約登録処理ID");
		// 22.請求契約更新運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_UPD_UNYO_YMD, "請求契約更新運用年月日");
		// 23.請求契約更新処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_UPD_TRN_ID, "請求契約更新処理ID");
		// 24.請求契約削除運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_DEL_UNYO_YMD, "請求契約削除運用年月日");
		// 25.請求契約削除処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.SEI_DEL_TRN_ID, "請求契約削除処理ID");
		// 26.請求ＯＰ登録運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_ADD_UNYO_YMD, "請求ＯＰ登録運用年月日");
		// 27.請求ＯＰ登録処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_ADD_TRN_ID, "請求ＯＰ登録処理ID");
		// 28.請求ＯＰ更新運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_UPD_UNYO_YMD, "請求ＯＰ更新運用年月日");
		// 29.請求ＯＰ更新処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_UPD_TRN_ID, "請求ＯＰ更新処理ID");
		// 30.請求ＯＰ削除運用年月日
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_DEL_UNYO_YMD, "請求ＯＰ削除運用年月日");
		// 31.請求ＯＰ削除処理ID
		mapKVIFM041.setString(JBSbatKVIFM041.OPT_DEL_TRN_ID, "請求ＯＰ削除処理ID");

		// 出力フラグを設定
		mapKVIFM041.setOutFlg(true);

		return mapKVIFM041;
	}
	/**
	 * ファイル出力レコード取得 (請求オプション存在チェック結果ファイル 明細部)
	 * 
	 * @param inMap         入力電文(請求オプションサービスのレコードセット)
	 * @param resultSeiky   請求契約レコードセット
	 * @param resultSvc     サービス契約レコードセット
	 * @param resultOpt     請求オプションサービス契約レコードセット
	 * @param chosaNaiyoKbn 調査内容区分
	 * @return              レコードオブジェクト
	 * @throws Exception    各種エラー
	 */
	private JBSbatServiceInterfaceMap getOutputDetailData(
			 JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface resultSeiky,
			 JBSbatCommonDBInterface resultSvc, JBSbatCommonDBInterface resultOpt, String chosaNaiyoKbn) throws Exception
	{
		// 請求オプション存在チェック結果ファイル用入出力インターフェイスオブジェクトを生成
		JBSbatServiceInterfaceMap mapKVIFM041 = new JBSbatServiceInterfaceMap();

		// 請求契約レコードセットから値を設定する。
		if (resultSeiky != null)
		{
// IT1-2014-0000217 ADD START
			// 03.請求契約番号
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_SEIKY_KEI_NO, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO));
// IT1-2014-0000217 ADD END
			// 08.請求書発行要否
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_SEIKYUS_HAKKO_YH, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.SEIKYUS_HAKKO_YH));
			// 09.初回請求年月
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_FIRST_SEIKY_YM, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.FIRST_SEIKY_YM));
			// 20.請求契約登録運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_ADD_UNYO_YMD, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.ADD_UNYO_YMD));
			// 21.請求契約登録処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_ADD_TRN_ID, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.ADD_TRN_ID));
			// 22.請求契約更新運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_UPD_UNYO_YMD, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.UPD_UNYO_YMD));
			// 23.請求契約更新処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_UPD_TRN_ID, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.UPD_TRN_ID));
			// 24.請求契約削除運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_DEL_UNYO_YMD, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.DEL_UNYO_YMD));
			// 25.請求契約削除処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.SEI_DEL_TRN_ID, resultSeiky.getString(JBSbatKK_T_SEIKY_KEI.DEL_TRN_ID));
		}

		// サービス契約レコードセットから値を設定する。
		if (resultSvc != null)
		{
			// 01.サービス契約番号
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_KEI_NO, resultSvc.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
			// 02.SYSID
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_SYSID, resultSvc.getString(JBSbatKK_T_SVC_KEI.SYSID));
			// 10.サービス契約ステータス
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_KEI_STAT, resultSvc.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT));
			// 11.サービス課金開始日
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_CHRG_STAYMD, resultSvc.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD));
			// 12.サービス課金終了日
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_CHRG_ENDYMD, resultSvc.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD));
			// 14.サービス契約登録運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_ADD_UNYO_YMD, resultSvc.getString(JBSbatKK_T_SVC_KEI.ADD_UNYO_YMD));
			// 15.サービス契約登録処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_ADD_TRN_ID, resultSvc.getString(JBSbatKK_T_SVC_KEI.ADD_TRN_ID));
			// 16.サービス契約更新運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_UPD_UNYO_YMD, resultSvc.getString(JBSbatKK_T_SVC_KEI.UPD_UNYO_YMD));
			// 17.サービス契約更新処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_UPD_TRN_ID, resultSvc.getString(JBSbatKK_T_SVC_KEI.UPD_TRN_ID));
			// 18.サービス契約削除運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_DEL_UNYO_YMD, resultSvc.getString(JBSbatKK_T_SVC_KEI.DEL_UNYO_YMD));
			// 19.サービス契約削除処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_DEL_TRN_ID, resultSvc.getString(JBSbatKK_T_SVC_KEI.DEL_TRN_ID));
		}

		// 請求オプションサービス契約レコードセットから値を設定する。
		if (resultOpt != null)
		{
// IT1-2014-0000217 DEL START
//			// 03.請求契約番号
//			mapKVIFM041.setString(JBSbatKVIFM041.OPT_SEIKY_KEI_NO, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIKY_KEI_NO));
// IT1-2014-0000217 DEL END
			// 04.請求オプション契約番号
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_SEIOPSVC_KEI_NO, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_NO));
			// 05.請求オプションステータス
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_SEIOPSVC_KEI_STAT, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_STAT));
			// 06.オプション課金開始日
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_SVC_CHRG_STAYMD, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.SVC_CHRG_STAYMD));
			// 07.オプション課金終了日
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_SVC_CHRG_ENDYMD, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.SVC_CHRG_ENDYMD));
			// 26.請求ＯＰ登録運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_ADD_UNYO_YMD, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.ADD_UNYO_YMD));
			// 27.請求ＯＰ登録処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_ADD_TRN_ID, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.ADD_TRN_ID));
			// 28.請求ＯＰ更新運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_UPD_UNYO_YMD, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.UPD_UNYO_YMD));
			// 29.請求ＯＰ更新処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_UPD_TRN_ID, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.UPD_TRN_ID));
			// 30.請求ＯＰ削除運用年月日
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_DEL_UNYO_YMD, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.DEL_UNYO_YMD));
			// 31.請求ＯＰ削除処理ID
			mapKVIFM041.setString(JBSbatKVIFM041.OPT_DEL_TRN_ID, resultOpt.getString(JBSbatKK_T_SEIOPSVC_KEI.DEL_TRN_ID));
		}

		// 13.調査内容区分
		mapKVIFM041.setString(JBSbatKVIFM041.CHO_NAIYO_KBN, chosaNaiyoKbn);

		// 入力電文(請求オプションサービスのレコードセット)から値を設定する。
		if(MSG_CHOSA_NAIYO_KBN_08.equals(chosaNaiyoKbn)
		|| MSG_CHOSA_NAIYO_KBN_09.equals(chosaNaiyoKbn)) {
			// 01.サービス契約番号
			mapKVIFM041.setString(JBSbatKVIFM041.SVC_SVC_KEI_NO, inMap.getString(JBSbatKVIFM034.SVC_KEI_NO));
		}

		// 出力フラグを設定
		mapKVIFM041.setOutFlg(true);

		return mapKVIFM041;
	}

}
