/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKaitoriKikiSksi
*	ソースファイル名	：JBSbatKKKaitoriKikiSksi.java
*	作成者				：富士通　
*	作成日				：2012年04月09日
*＜機能概要＞
*　買取機器情報ファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.0.0		2012/04/09	FJ)濱村		新規作成
*	v3.0.1		2012/12/14	FJ)井熊		【ST1-2012-0001071】紐づけ可能なサービス契約と機器の組み合わせで出力させる
*	v5.0.0		2013/03/27	FJ)井熊		【ST3-2013-0000825】性能障害 アンローダ化
*	v6.0.0		2013/11/26	FJ)山裾		【OM-2013-0004278】ディレード処理で連携されたデータは処理対象外とする
*	v7.0.0		2014/01/29	FJ)出羽		【OM-2014-0000261】解約日の判定、回復のステータス判定を追加
*	v7.0.1		2014/03/19	FJ)鈴木		【OM-2013-0004222】機器の返品済判定を追加
*	v9.0.0		2014/05/22	FJ)山裾		【ANK-2041-00-00】解約・回復コードに強制解約を追加
*   v28.00.00   2017/01/31  FJ)江藤     【OM-2016-0001720】買取機器情報送信（ディレイド用）バッチ廃止
*********************************************************************/
package eo.business.service;

import java.text.SimpleDateFormat;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFE187;
import eo.business.util.file.JBSbatKKIFM434;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
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 JBSbatKKKaitoriKikiSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI_UCWK = "KK_T_SVC_KEI_UCWK";

	/** テーブル(サービス契約)*/
	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";

	/** SQL定義キー(KK_SELECT_064)*/
	private static final String KK_T_SVC_KEI_UCWK_KK_SELECT_064 = "KK_SELECT_064";

	/** SQL定義キー(KK_SELECT_153)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_153 = "KK_SELECT_153";

	/** SQL定義キー(KK_SELECT_059)*/
	private static final String KK_T_OP_SVC_KEI_KK_SELECT_059 = "KK_SELECT_059";

	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;
	
// 2014.03.19 OM-2013-0004222 add start
	/** テーブル(返品機器)*/
	private static final String D_TBL_NAME_DK_T_HMPIN_KIKI = "DK_T_HMPIN_KIKI";
	/** SQL定義キー(KK_SELECT_004)*/
	private static final String DK_T_HMPIN_KIKI_KK_SELECT_004 = "KK_SELECT_004";
	/** テーブルアクセスクラス(返品機器)*/
	private JBSbatSQLAccess db_DK_T_HMPIN_KIKI = null;
// 2014.03.19 OM-2013-0004222 add end
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 異動区分(回復) */
	private static final String IDO_DIV_KAIHK = JKKBatConst.IDO_DIV_KAIHK;

	/** 解約・回復コード(解約) */
	private static final String DSL_KAIHK_CD_DSL = "01";

	/** 解約・回復コード(回復) */
	private static final String DSL_KAIHK_CD_KAIHK = "02";

	// 2014.05.22 ANK-2041-00-00 Add Start
	/** 解約・回復コード(強制解約) */
	private static final String DSL_KAIHK_CD_KYO_DSL = "03";
	// 2014.05.22 ANK-2041-00-00 Add End
	
	/** 親契約識別コード(サービス契約回線内訳) */
	private static final String OYA_KEI_SKBT_CD_02 = "02";

	/** 親契約識別コード(サービス契約内訳) */
	private static final String OYA_KEI_SKBT_CD_03 = "03";

	/** 親契約識別コード(オプションサービス契約) */
	private static final String OYA_KEI_SKBT_CD_04 = "04";

	/** 日付フォーマット */
	public static final String DATE_FORMAT = "yyyyMMdd";
	
	/** 作業中の機器提供サービス契約番号 */
	private String mWorkKKTK_NO = "";
	/** 出力した前回の機器ステータス変数 */
	private String mWorkMaeKKTK_STAT = "";
	/** 出力した前回の機器ステータス 解約 */
	private static final String MAE_STAT_DSL = "DSL_DATA";
	/** 出力した前回の機器ステータス 回復 */
	private static final String MAE_STAT_KAIHUKU = "KAIHUKU_DATA";

	/** 日付 */
	SimpleDateFormat sdf = null;

	//■■■ ST1-2012-0001071 M.IKUMA Start ■■■
	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";
	/** SQL定義キー(KK_SELECT_120)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_120 = "KK_SELECT_120";
	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;
	/** 機器提供サービス契約番号*/
	private String mKktk_Svc_kei_no = null;
	//■■■ ST1-2012-0001071 M.IKUMA   End ■■■
	
	// OM-2016-0001720 2017/01/31 DEL START
//	// 2013/11/26 OM-2013-0004278 Add Start
//	/** CSV囲い文字(ダブルクォーテーション) */
//	private static final String KAKOIMOJI = "\"";
//
//	/** 買取機器情報ファイル項目マップ */
//	private static final HashMap<String, String> KIKI_INF_ITEM = new HashMap<String, String>()
//	{
//		{
//			put(String.valueOf(0), JBSbatKKIFE187.SVC_KEI_NO);
//			put(String.valueOf(1), JBSbatKKIFE187.KKTK_SVC_KEI_NO);
//			put(String.valueOf(2), JBSbatKKIFE187.TAKNKIKI_MODEL_CD);
//			put(String.valueOf(3), JBSbatKKIFE187.KIKI_SEIZO_NO);
//			put(String.valueOf(4), JBSbatKKIFE187.DSL_KAIHK_CD);
//			put(String.valueOf(5), JBSbatKKIFE187.KKTK_SBT_CD);
//			put(String.valueOf(6), JBSbatKKIFE187.DSL_DAY);
//		}
//	};
//	
//	/** 買取機器情報リスト */
//	private ArrayList<HashMap<String, String>> kikiInfList = null;
//	// 2013/11/26 OM-2013-0004278 Add End
	// OM-2016-0001720 2017/01/31 DEL END
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		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);
		
// 2014.03.19 OM-2013-0004222 add start
		db_DK_T_HMPIN_KIKI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HMPIN_KIKI);
// 2014.03.19 OM-2013-0004222 add end
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		this.sdf = new SimpleDateFormat(DATE_FORMAT);

		//■■■ ST1-2012-0001071 M.IKUMA Start ■■■
		// DBアクセスクラスを生成
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		//■■■ ST1-2012-0001071 M.IKUMA   End ■■■

		// OM-2016-0001720 2017/01/31 DEL START
//		// 2013/11/26 OM-2013-0004278 Add Start
//		// フリー項目取得
//		String[] freeItem = super.freeItem.split(JKKBatConst.S_PARAM_DELIM);
//		
//		// 起動パラメータ FREE より、買取機器情報ファイルを取得する
//		String infPass = freeItem[0];
//		
//		// ファイルを読込み、読込んだ情報を買取機器情報リストに格納する
//		kikiInfList = new ArrayList<HashMap<String, String>>();
//		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(infPass)));
//		String  lineData = br.readLine();
//		while(lineData != null)
//		{
//			// リストに格納された一行分のファイルデータを格納
//			HashMap<String, String> recordMap = convNonQuateStringToList(commonItem, lineData);
//			
//			// 対象ディレード連携済リストに追加
//			kikiInfList.add(recordMap);
//
//			// CSVファイル一行読込み
//			lineData = br.readLine();
//		}
//		// 2013/11/26 OM-2013-0004278 Add End
		// OM-2016-0001720 2017/01/31 DEL END
		
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// #####################################
		// # アンローダ化対応 有効な情報を選別 #
		// #####################################
		if(!this.checkInMap(inMap))
		{
			// 次のレコードへスキップする
			return null;
		}
		
		// 機器提供サービス契約番号
		String kktk_svc_kei_no = inMap.getString(JBSbatKKIFM434.KKTK_SVC_KEI_NO);
		// 解約年月日
		String svc_dsl_ymd = inMap.getString(JBSbatKKIFM434.SVC_DSL_YMD);
		// 回復年月日
		String kaihk_ymd = inMap.getString(JBSbatKKIFM434.KAIHK_YMD);

// 2014.03.19 OM-2013-0004222 add start
		// 機器変更番号
		String kiki_chg_no = inMap.getString(JBSbatKKIFM434.KIKI_CHG_NO);
// 2014.03.19 OM-2013-0004222 add end
		
		// 解約、回復どちらかに値があるかチェック
		if((svc_dsl_ymd == null || "".equals(svc_dsl_ymd)) && (kaihk_ymd == null || "".equals(kaihk_ymd)))
		{
			// どちらにも値がないのでスキップ
			return null;
		}

		// 出力ファイル情報
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		// 出力ファイルデータMAP
		JBSbatServiceInterfaceMap outDataMap = new JBSbatServiceInterfaceMap();
		
		// 解約年月日に日付がセットされている場合
		if (svc_dsl_ymd != null && !"".equals(svc_dsl_ymd))
		{
			// 前回出力したレコードの機器提供サービス契約番号と比較する
			if(this.mWorkKKTK_NO.equals(kktk_svc_kei_no))
			{
				// 前回出力した機器のステータスを比較
				if(this.mWorkMaeKKTK_STAT.equals(MAE_STAT_DSL))
				{
					// 同一機器の場合、連続で解約情報は出力しないのでレコードをスキップする
					return null;
				}
			}
			// 出力した機器提供サービス契約番号を格納する
			this.mWorkKKTK_NO = kktk_svc_kei_no;
			// 出力する解約ステータスをセットする
			this.mWorkMaeKKTK_STAT = MAE_STAT_DSL;
			// 解約機器情報をファイルへ出力する
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD START
//			setOutFileData(inMap, DSL_KAIHK_CD_DSL, outDataMap);
			
			// 2014.05.22 ANK-2041-00-00 Mod Start
//			setOutFileData(inMap, DSL_KAIHK_CD_DSL, outDataMap, svc_dsl_ymd);
			if (JBSbatKKConst.SVC_DLRE_CD_KSI.equals(inMap.getString(JBSbatKKIFM434.SVC_DLRE_CD)))
			{
				setOutFileData(inMap, DSL_KAIHK_CD_KYO_DSL, outDataMap, svc_dsl_ymd);
			}
			else
			{
				setOutFileData(inMap, DSL_KAIHK_CD_DSL, outDataMap, svc_dsl_ymd);
			}
			// 2014.05.22 ANK-2041-00-00 Mod End
			
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD END
		}
		else
		// 回復年月日に値がセットされている場合
		{
			// 異動区分を取得
			String ido_div = inMap.getString(JBSbatKKIFM434.IDO_DIV);
			// 回復の異動区分かチェック
			if(!IDO_DIV_KAIHK.equals(ido_div))
			{
				// 回復ではないのでスキップ
				return null;
			}
			
			// 前回出力したレコードの機器提供サービス契約番号と比較する
			if(this.mWorkKKTK_NO.equals(kktk_svc_kei_no))
			{
				// 前回出力した機器のステータスを比較
				if(this.mWorkMaeKKTK_STAT.equals(MAE_STAT_KAIHUKU))
				{
					// 同一機器の場合、連続で回復情報は出力しないのでレコードをスキップする
					return null;
				}
			}
			
			// OM-2016-0001720 2017/01/31 DEL START
//			// 2013/11/26 OM-2013-0004278 Add Start
//			//すでにディレード処理で連携されている場合
//			if(isTgKktkSvcKeiNo(kktk_svc_kei_no))
//			{
//				//連携済みなのでスキップ
//				return null;
//			}
//			// 2013/11/26 OM-2013-0004278 Add End
			// OM-2016-0001720 2017/01/31 DEL END
			
// 2014.03.19 OM-2013-0004222 add start
			if(isHempinzumi(kktk_svc_kei_no, kiki_chg_no)) {
				// 返品済の機器は対象外とする。
				return null;
			}
// 2014.03.19 OM-2013-0004222 add end
			
			// 出力した機器提供サービス契約番号を格納する
			this.mWorkKKTK_NO = kktk_svc_kei_no;
			// 出力する回復ステータスをセットする
			this.mWorkMaeKKTK_STAT = MAE_STAT_KAIHUKU;
			// 回復機器情報をファイルへ出力する
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD START
//			setOutFileData(inMap, DSL_KAIHK_CD_KAIHK, outDataMap);
			setOutFileData(inMap, DSL_KAIHK_CD_KAIHK, outDataMap, kaihk_ymd);
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD END
		}

		outputItem.addOutMapList(outDataMap);
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI_UCWK.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_OP_SVC_KEI.close();
		
// 2014.03.19 OM-2013-0004222 add start
		db_DK_T_HMPIN_KIKI.close();
// 2014.03.19 OM-2013-0004222 add end
		
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_064)で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_UCWK_KK_SELECT_064(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KK_SELECT_064);
	}

	/**
	 * SQLKEY(KK_SELECT_153)で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_153(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_KK_SELECT_153);
	}

	/**
	 * SQLKEY(KK_SELECT_059)で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_059(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KK_SELECT_059);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 買取機器情報ファイルに出力する情報を設定します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.買取機器情報ファイル出力情報取得処理。
	 * </pre>
	 * <p>
	 * @param inMap　入力電文
	 * @param cdDslKaihk 解約・回復コード
	 * @param outDataMap 出力ファイルデータMAP
	 * @throws Exception
	 */
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD START
//	private void setOutFileData(JBSbatServiceInterfaceMap inMap, String cdDslKaihk, JBSbatServiceInterfaceMap outDataMap) throws Exception
	private void setOutFileData(JBSbatServiceInterfaceMap inMap, String cdDslKaihk, JBSbatServiceInterfaceMap outDataMap, String svc_dsl_ymd) throws Exception
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD END
	{
		// 出力ファイル設定用サービス契約番号
		String outSvcKeiNo = "";

		//■■■ ST1-2012-0001071 M.IKUMA Start ■■■
		// 機器提供サービス契約番号を取得
		this.mKktk_Svc_kei_no = inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO);
		//■■■ ST1-2012-0001071 M.IKUMA Start ■■■

		// サービス契約番号
		if (inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_NO) != null
				&& !"".equals(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_NO)))
		{
			outSvcKeiNo = inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_NO);
		}
		else
		{
			if (OYA_KEI_SKBT_CD_02.equals(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.OYA_KEI_SKBT_CD)))
			{
				// サービス契約回線内訳からサービス契約番号を取得
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD START
//				outSvcKeiNo = getSvcKeiKaisenUcwkNoData(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_KAISEN_UCWK_NO));
				// 2014.05.22 ANK-2041-00-00 Mod Start
//				if (DSL_KAIHK_CD_DSL.equals(cdDslKaihk))
				if (DSL_KAIHK_CD_DSL.equals(cdDslKaihk) || DSL_KAIHK_CD_KYO_DSL.equals(cdDslKaihk))
				// 2014.05.22 ANK-2041-00-00 Mod End
				{
					outSvcKeiNo = getSvcKeiKaisenUcwkNoDataDsl(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_KAISEN_UCWK_NO), svc_dsl_ymd);
				}
				else {
					outSvcKeiNo = getSvcKeiKaisenUcwkNoDataKihk(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_KAISEN_UCWK_NO));
				}
// v7.0.0 2014/01/29 [OM-2014-0000261] MOD END
			}
			else if (OYA_KEI_SKBT_CD_03.equals(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.OYA_KEI_SKBT_CD)))
			{
				// サービス契約内訳からサービス契約番号を取得
				outSvcKeiNo = getSvcKeiUcwkData(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_UCWK_NO));
			}
			else if (OYA_KEI_SKBT_CD_04.equals(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.OYA_KEI_SKBT_CD)))
			{
				// オプションサービス契約からサービス契約番号を取得
				outSvcKeiNo = getOpSvcKeiNoData(inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.OP_SVC_KEI_NO));
			}
		}
		outDataMap.setString(JBSbatKKIFE187.SVC_KEI_NO, outSvcKeiNo);

		// 機器提供サービス契約番号
		outDataMap.setString(JBSbatKKIFE187.KKTK_SVC_KEI_NO,
				inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO));

		// 宅内機器型式コード
		outDataMap.setString(JBSbatKKIFE187.TAKNKIKI_MODEL_CD,
				inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.TAKNKIKI_MODEL_CD));

		// 機器製造番号
		outDataMap.setString(JBSbatKKIFE187.KIKI_SEIZO_NO,
				inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO));

		// 解約・回復コード
		outDataMap.setString(JBSbatKKIFE187.DSL_KAIHK_CD, cdDslKaihk);

		// 機器提供種別コード
		outDataMap.setString(JBSbatKKIFE187.KKTK_SBT_CD,
				inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SBT_CD));

		// 解約日
		// 2014.05.22 ANK-2041-00-00 Mod Start
//		if (DSL_KAIHK_CD_DSL.equals(cdDslKaihk))
		if (DSL_KAIHK_CD_DSL.equals(cdDslKaihk) || DSL_KAIHK_CD_KYO_DSL.equals(cdDslKaihk))
		// 2014.05.22 ANK-2041-00-00 Mod End
		{
			outDataMap.setString(JBSbatKKIFE187.DSL_DAY,
					inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_DSL_YMD));
		}

		outDataMap.setOutFlg(true);
	}

// v7.0.0 2014/01/29 [OM-2014-0000261] DEL START
//	/**
//	 * サービス契約回線内訳に紐づくサービス契約番号を取得します。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.サービス契約回線内訳に紐づくサービス契約番号取得処理。
//	 * </pre>
//	 * <p>
//	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
//	 * @param svcCd サービスコード
//	 * @return svcKeiNo サービス契約番号
//	 * @throws Exception
//	 */
//	private String getSvcKeiKaisenUcwkNoData(String svcKeiKaisenUcwkNo) throws Exception
//	{
//		String svcKeiNo = "";
//		String[] params = new String[]{svcKeiKaisenUcwkNo, super.opeDate};
//		executeKK_T_SVC_KEI_KK_SELECT_153(params);
//		JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
//		if (svcKeiMap != null)
//		{
//
//			//■■■ ST1-2012-0001071 M.IKUMA Start ■■■
////			svcKeiNo = svcKeiMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO);
//			do
//			{
//				// サービス契約が機器提供サービス契約に紐づけ可能かチェック
//				if(this.checkMatch(svcKeiMap))
//				{
//					// 紐づき可能なので出力用サービス契約番号として出力する
//					svcKeiNo = svcKeiMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO);
//					break;
//				}
//				else
//				{
//					// 次のサービス契約レコードをチェックする
//					svcKeiMap = db_KK_T_SVC_KEI.selectNext();
//				}
//			}
//			while(svcKeiMap != null);
//			// 紐づくサービス契約が見つからない場合はカラ文字で出力する
//			//■■■ ST1-2012-0001071 M.IKUMA   End ■■■
//
//		}
//		return svcKeiNo;
//	}
// v7.0.0 2014/01/29 [OM-2014-0000261] DEL END

// v7.0.0 2014/01/29 [OM-2014-0000261] ADD START
	/**
	 * 解約時のサービス契約回線内訳に紐づくサービス契約番号を取得します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.サービス契約回線内訳に紐づくサービス契約番号取得処理。
	 * </pre>
	 * <p>
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @param svcCd サービスコード
	 * @return svcKeiNo サービス契約番号
	 * @throws Exception
	 */
	private String getSvcKeiKaisenUcwkNoDataDsl(String svcKeiKaisenUcwkNo, String svc_dsl_ymd) throws Exception
	{
		String svcKeiNo = "";
		String[] params = new String[]{svcKeiKaisenUcwkNo, super.opeDate};
		executeKK_T_SVC_KEI_KK_SELECT_153(params);
		JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
		if (svcKeiMap != null)
		{
			do
			{
				// サービス契約が機器提供サービス契約に紐づけ可能かチェック
				if(this.checkMatch(svcKeiMap))
				{
					// 最初の発見のときはサービス契約番号を記憶
					if ("".equals(svcKeiNo))
					{
						svcKeiNo = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
					}
					// 機器提供サービス契約のサービス解約年月日と同じサービス契約のサービス解約年月日か？
					if (svc_dsl_ymd.equals(svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_DSL_YMD)))
					{
						// サービス契約番号を出力
						svcKeiNo = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
						break;
					}
				}
				// 次のサービス契約レコードをチェックする
				svcKeiMap = db_KK_T_SVC_KEI.selectNext();
			}
			while(svcKeiMap != null);
			// 紐づくサービス契約が見つからない場合はカラ文字で出力する
		}
		return svcKeiNo;
	}

	/**
	 * 回復時のサービス契約回線内訳に紐づくサービス契約番号を取得します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.サービス契約回線内訳に紐づくサービス契約番号取得処理。
	 * </pre>
	 * <p>
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @param svcCd サービスコード
	 * @return svcKeiNo サービス契約番号
	 * @throws Exception
	 */
	private String getSvcKeiKaisenUcwkNoDataKihk(String svcKeiKaisenUcwkNo) throws Exception
	{
		String svcKeiNo = "";
		String[] params = new String[]{svcKeiKaisenUcwkNo, super.opeDate};
		executeKK_T_SVC_KEI_KK_SELECT_153(params);
		JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
		if (svcKeiMap != null)
		{
			do
			{
				// サービス契約が機器提供サービス契約に紐づけ可能かチェック
				if(this.checkMatch(svcKeiMap))
				{
					// 最初の発見のときはサービス契約番号を記憶
					if ("".equals(svcKeiNo))
					{
						svcKeiNo = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
					}
					// サービス提供中のサービス契約番号か
					if ("100".equals(svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)))
					{
						// サービス契約番号を出力
						svcKeiNo = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
						break;
					}
				}
				// 次のサービス契約レコードをチェックする
				svcKeiMap = db_KK_T_SVC_KEI.selectNext();
			}
			while(svcKeiMap != null);
			// 紐づくサービス契約が見つからない場合はカラ文字で出力する
		}
		return svcKeiNo;
	}

// v7.0.0 2014/01/29 [OM-2014-0000261] ADD END

	/**
	 * サービス契約内訳のサービス契約番号を取得します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.サービス契約内訳のサービス契約番号取得処理。
	 * </pre>
	 * <p>
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return svcKeiNo サービス契約番号
	 * @throws Exception
	 */
	private String getSvcKeiUcwkData(String svcKeiUcwkNo) throws Exception
	{
		String svcKeiNo = "";
		String[] params = new String[]{svcKeiUcwkNo, super.opeDate};
		executeKK_T_SVC_KEI_UCWK_KK_SELECT_064(params);
		JBSbatCommonDBInterface svcKeiUcwkMap = db_KK_T_SVC_KEI_UCWK.selectNext();
		if (svcKeiUcwkMap != null)
		{
			svcKeiNo = svcKeiUcwkMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO);
		}
		return svcKeiNo;
	}

	/**
	 * オプションサービス契約に紐づくサービス契約番号を取得します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.オプションサービス契約に紐づくサービス契約番号取得処理。
	 * </pre>
	 * <p>
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @return svcKeiNo サービス契約番号
	 * @throws Exception
	 */
	private String getOpSvcKeiNoData(String opSvcKeiNo) throws Exception
	{
		String svcKeiNo = "";
		String[] params1 = new String[]{opSvcKeiNo, super.opeDate};
		executeKK_T_OP_SVC_KEI_KK_SELECT_059(params1);
		JBSbatCommonDBInterface opSvcKeiMap = db_KK_T_OP_SVC_KEI.selectNext();
		if (opSvcKeiMap != null)
		{
			if (opSvcKeiMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_NO) != null
					&& !"".equals(opSvcKeiMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_NO)))
			{
				svcKeiNo = opSvcKeiMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_NO);
			}
			else if (opSvcKeiMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_UCWK_NO) != null
					&& !"".equals(opSvcKeiMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_UCWK_NO)))
			{
				svcKeiNo = getSvcKeiUcwkData(opSvcKeiMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_UCWK_NO));
			}
		}
		return svcKeiNo;
	}

	//■■■ ST1-2012-0001071 M.IKUMA Start ■■■
	/**
	 * 機器提供サービス契約がサービス契約に紐づけ可能かチェック
	 * 
	 * @param dataMap サービス契約番号を含むデータマップ
	 * @return true:紐づけ可能 false;紐づけ不可
	 * @throws Exception 各種エラー
	 */
	private boolean checkMatch(JBSbatCommonDBInterface dataMap) throws Exception
	{
		// 機器提供サービス契約番号とサービス契約番号で料金コース_機器提供サービスコードを検索する
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(dataMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
		paramList.setValue(this.mKktk_Svc_kei_no);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		paramList.setValue(super.opeDate);
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_120);
		JBSbatCommonDBInterface result = db_KK_T_KKTK_SVC_KEI.selectNext();
		if(result != null)
		{
			// 紐づけ可能
			return true;
		}
		else
		{
			// 紐づけ不可能
			return false;
		}
	}
	//■■■ ST1-2012-0001071 M.IKUMA   End ■■■

	/**
	 * 入力データの各種値をチェックして有効なレコードを選別する
	 * 
	 * @param inMap 入力レコード（アンロードデータ）
	 * @return true:出力するデータ false:スキップするデータ
	 * @throws Exception 各種エラー
	 */
	private boolean checkInMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 無効フラグ
		String mk_flg = inMap.getString(JBSbatKKIFM434.MK_FLG);
		if(mk_flg == null || "".equals(mk_flg) || !mk_flg.equals("0"))
		{
			// 無効フラグが有効でない
			return false;
		}
		
		// 予約適用コード
		String rsv_aply_cd = inMap.getString(JBSbatKKIFM434.RSV_APLY_CD);
		if(rsv_aply_cd == null || "".equals(rsv_aply_cd) || !rsv_aply_cd.equals("2"))
		{
			// 予約適用コードが予約確定ではない
			return false;
		}
		
		// 宅内機器モデルコード
		String takunai_model_cd = inMap.getString(JBSbatKKIFM434.TAKNKIKI_MODEL_CD);
		if(takunai_model_cd == null || "".equals(takunai_model_cd))
		{
			// 宅内モデルコードに値がない
			return false;
		}
		
		// 機器製造番号
		String kiki_seizo_no = inMap.getString(JBSbatKKIFM434.KIKI_SEIZO_NO);
		if(kiki_seizo_no == null || "".equals(kiki_seizo_no))
		{
			// 機器製造番号に値がない
			return false;
		}
		
		// この入力レコードを出力する
		return true;
	}

	// OM-2016-0001720 2017/01/31 DEL START
//	// 2013/11/26 OM-2013-0004278 Add Start
//	/**
//	 * 出力対象の機器提供サービス契約番号か判定を行う
//	 * <p>
//	 * </p>
//	 * @param kktkSvcKeiNo
//	 * @return true:対象 false:対象外
//	 */
//	private boolean isTgKktkSvcKeiNo(String kktkSvcKeiNo)
//	{
//		for(HashMap<String, String> kikiInfMap : kikiInfList)
//		{
//			String tgKktkSvcKeiNo = kikiInfMap.get(JBSbatKKIFE187.KKTK_SVC_KEI_NO);
//			if(kktkSvcKeiNo != null && kktkSvcKeiNo.equals(tgKktkSvcKeiNo))
//			{
//				// 買取機器情報データマップに該当の機器提供サービス契約番号が存在する
//				return true;
//			}
//		}
//		// 買取機器情報データマップに該当の機器提供サービス契約番号が存在しない
//		return false;
//	}
//
//	/**
//	 * 引数で指定されたCSVファイルの一行データをMapにして返却する
//	 * ダブルクォーテーションで囲まれている場合は、削除した文字列に変換する。
//	 * @param commonItem 共通情報
//	 * @param lineData 一行分のCSVデータ
//	 * @return Map<String> 項目ごとにCSVデータを格納したMap
//	 * @throws Exception 例外
//	 **/
//	static HashMap<String, String> convNonQuateStringToList(JBSbatCommonItem commonItem, String lineData) throws Exception
//	{
//		// CSV指定ファイル読込み
//		// 戻り値格納用Map
//		HashMap<String, String> resultMap = new HashMap<String, String>();
//		try
//		{
//			String[] result = lineData.split(",");
//			
//			for (int i = 0; i < result.length; i++)
//			{
//				String colm = result[i];
//	
//				// 先頭 または 最後がダブルクォートの場合 
//				if (colm.startsWith(KAKOIMOJI))
//				{
//					colm = colm.substring(1);
//				}
//				if (colm.endsWith(KAKOIMOJI))
//				{
//					colm = colm.substring(0, colm.length() - 1);
//				}
//				resultMap.put(KIKI_INF_ITEM.get(String.valueOf(i)), colm);
//			}
//		}
//		catch (NoSuchElementException e)
//		{
//			// 例外処理
//			commonItem.getLogPrint().printDebugLog("JBSbatKKHapieMmbHoseiChk.convNonQuateStringToList NoSuchElementException発生:");
//			throw e;
//		}
//
//		// 1行分のデータを格納したMapを返却
//		return resultMap;
//	}
//	// 2013/11/26 OM-2013-0004278 Add End
	// OM-2016-0001720 2017/01/31 DEL END
	
// 2014.03.19 OM-2013-0004222 add start
	/**
	 * 指定された機器が返品済かどうかを判定します。
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param kiki_chg_no 機器変更番号
	 * @return true:返品済、false:返品済でない
	 * @throws Exception 例外
	 * 
	 */
	private boolean isHempinzumi(String kktk_svc_kei_no, String kiki_chg_no) throws Exception
	{
		// 機器提供サービス契約番号とサービス契約番号で料金コース_機器提供サービスコードを検索する
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(kktk_svc_kei_no);
		paramList.setValue(kiki_chg_no);
		
		db_DK_T_HMPIN_KIKI.selectBySqlDefine(paramList, DK_T_HMPIN_KIKI_KK_SELECT_004);
		JBSbatCommonDBInterface result = db_DK_T_HMPIN_KIKI.selectNext();
		if(result != null)
		{
			// 返品済
			return true;
		}
		else
		{
			// 返品済でない
			return false;
		}
	}
// 2014.03.19 OM-2013-0004222 add end

}
