/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKGetTanmaBuyTuchi
*	ソースファイル名	：JBSbatKKGetTanmaBuyTuchi.java
*	作成者				：富士通　
*	作成日				：2012年07月24日
*＜機能概要＞
*　端末購入通知書ファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2012/07/24  FJ)井熊		新規作成
*	v4.01		2013/02/13	FJ)鷲塚		【IT1-2013-0000266】守口倉庫I/F対応(トレーラレコード出力)
*	v4.02		2013/02/18	FJ)井熊		【IT1-2013-0000292】トレーラーレコードの日付を運用年月日に修正
*	v4.03		2013/04/23	FJ)井熊		【OT-2013-0000661】 登録オペレータアカウントの取得方法を変更
*	v6.00		2013/12/16	FJ)山裾		【OM-2013-0002906】 性能改善対応
*	v52.00.00	2021/01/26	FJ)三原		【ANK-3987-00-00】Netflix導入対応(STEP2)
*	v52.00.01	2021/02/18	FJ)三原		【IT1-2021-0000018】照査でつけたSMPの購入通知書が端末購入通知書データ抽出バッチ(日次)で抽出される
*	v63.00.00	2022/10/24	FJ)中尾		【ANK-4309-00-00】電子交付同意時の出力先端末購入通知書ファイルの変更
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatConst;
import eo.business.common.JZMBatConst;
import eo.business.util.file.JBSbatKKIFE207;
import eo.business.util.file.JBSbatKKIFM237;
import eo.business.util.file.JBSbatKKIFM572;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_M_KAP_PLAN;
import eo.business.util.table.JBSbatKK_T_KANUORESO_HAKKO;
import eo.business.util.table.JBSbatKK_T_KAP_KEI;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatZM_M_TKMDL_KNRN_INFO;
import eo.common.util.JPCUtilCommon;
import eo.common.util.JZMAdEdit;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKGetTanmaBuyTuchi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** テーブル(割賦契約)*/
	private static final String D_TBL_NAME_KK_T_KAP_KEI = "KK_T_KAP_KEI";

	/** テーブル(割賦契約)*/
	private static final String D_TBL_NAME_KK_M_KAP_PLAN = "KK_M_KAP_PLAN";

	/** SQL定義キー(KK_SELECT_034)*/
	private static final String CK_T_CUST_KK_SELECT_034 = "KK_SELECT_034";

	/** SQL定義キー(KK_SELECT_085)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_085 = "KK_SELECT_085";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_KAP_PLAN_KK_SELECT_001 = "KK_SELECT_001";

	// ANK-3987-00-00 ADD START
	/** SQL定義キー(KK_SELECT_089)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_089 = "KK_SELECT_089";
	
	/** SQL定義キー(CH_SELECT_001)*/
	private static final String KK_T_KKTK_SVC_KEI_CH_SELECT_001 = "CH_SELECT_001";
	// ANK-3987-00-00 ADD END

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;

	/** テーブルアクセスクラス(割賦契約)*/
	private JBSbatSQLAccess db_KK_T_KAP_KEI = null;

	/** テーブルアクセスクラス(割賦契約)*/
	private JBSbatSQLAccess db_KK_M_KAP_PLAN = null;
/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/	
	/** 契約年月日カラム名 ,*/
	private static final String KEI_YEAR_YMD = "KEI_YEAR_YMD";
	/** レコード数カウンタ */
	private int recont = 0;
	/** ファイル括り文字 */
	private static final String SCOPE  = "\"";
	
	// ANK-3987-00-00 ADD START
	/** 通知書フラグ_0(eoスマートリンクタブレット端末購入通知書) */
	private static final String TCHISHO_FLG_0  = "0";

	/** 通知書フラグ_1(ストリーミングメディアプレーヤー購入通知書) */
	private static final String TCHISHO_FLG_1  = "1";

	/** 購入形態_01(一括) */
	private static final String BUY_FORM_01  = "01";
	// ANK-3987-00-00 ADD END
	
	// ANK-4309-00-00 ADD START
	/** 端末購入通知書ファイル（新規同時申込_電子交付同意済み） */
	private JBSbatOutputFileUtil newRequestDenshiKouhuDoiZumiFile = null;
	
	/** 端末購入通知書ファイル（新規同時申込_電子交付同意済み）定義 */
	private JBSbatDefFileUtil newRequestDenshiKouhuDoiZumidef = null;
	
	/** 機能コード */
	private static String funccode = null;
	// ANK-4309-00-00 ADD END
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		db_KK_T_KAP_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAP_KEI);
		db_KK_M_KAP_PLAN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_KAP_PLAN);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
		
		// ANK-4309-00-00 ADD START
		// フリー項目より以下を取得
		//・申込フラグ
		//・出力ファイル定義
		//・出力ファイルパス
		String[] freeParam = commonItem.getFreeItem().split(";");
		funccode = freeParam[0];
		
		// 新規同時申込の場合
		if (funccode.equals("0")) 
		{
			String outputDef = freeParam[1];
			String outputFilePath = freeParam[2];
			
			// 出力ファイルオブジェクトの生成
			newRequestDenshiKouhuDoiZumiFile = new JBSbatOutputFileUtil(outputFilePath);
			// 文字コードの設定
			newRequestDenshiKouhuDoiZumiFile.setEncode(JKKBatConst.SJIS);
			// 改行コードの設定
			newRequestDenshiKouhuDoiZumiFile.setLine(JZMBatConst.CRLF);
			// ジョブIDの設定
			newRequestDenshiKouhuDoiZumiFile.setJobID(commonItem.getJobid());
			// 出力定義ファイルオブジェクトの生成
			String dslAfSkssnsInfoExtrctnFileDefNm = JBSbatAplConst.getAplConstValue("OTD") + outputDef;
			newRequestDenshiKouhuDoiZumidef = new JBSbatDefFileUtil(dslAfSkssnsInfoExtrctnFileDefNm, newRequestDenshiKouhuDoiZumiFile);
			
			newRequestDenshiKouhuDoiZumiFile.createWriter();
		}
		// ANK-4309-00-00 ADD END
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// IT1-2021-0000018 DEL START
//		// ANK-3987-00-00 ADD START
//		// 通知書判定処理
//		// 通知書判定フラグ(0:eoスマートリンクタブレット端末購入通知書,1:ストリーミングメディアプレーヤー購入通知書)
//		String tchishoFlg = judgeTchisho(inMap);
//		// 通知書が"0"(eoスマートリンクタブレット端末購入通知書)の場合
//		if (TCHISHO_FLG_0.equals(tchishoFlg))
//		{
//		// ANK-3987-00-00 ADD END
		// IT1-2021-0000018 DEL END
			// 2013/12/16 OM-2013-0002906 Add Start
			// 汎用サービス契約番号に値が設定されている（＝すでに登録済み）場合は、処理対象外
			if (!isNullOrEmpty(inMap.getString(JBSbatKKIFM572.VARI_SVC_KEI_NO)))
			{
				return null;
			}
			// 2013/12/16 OM-2013-0002906 Add End
		// IT1-2021-0000018 DEL START
//		// ANK-3987-00-00 ADD START
//		}
//		// ANK-3987-00-00 ADD END
		// IT1-2021-0000018 DEL END
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// ステータス更新用ファイル出力オブジェクト作成
		JBSbatServiceInterfaceMap mapKKIFM237 = new JBSbatServiceInterfaceMap();
		// 外部連携用ファイル出力オブジェクト作成
		JBSbatServiceInterfaceMap mapKKIFE207 = new JBSbatServiceInterfaceMap();
		// ANK-4309-00-00 ADD START
		// 外部連携用退避ファイル出力オブジェクト作成
		JBSbatServiceInterfaceMap mapKKIFE207002 = new JBSbatServiceInterfaceMap();
		
		// 新規同時申込の場合
		if (funccode.equals("0")) 
		{
			// 電子交付同意ありの場合
			if ("1".equals(inMap.getString(JBSbatKK_T_KANUORESO_HAKKO.DNSKH_DOI_ZM_FLG)))
			{
				// 抽出データをファイルオブジェクトへマッピング
				this.setMapData(inMap, mapKKIFM237, mapKKIFE207002);
				
				// 出力フラグを設定
				mapKKIFM237.setOutFlg(true);
				
				// 出力共通電文入出力インターフェイスを設定する
				outputBean.addOutMapList(mapKKIFM237);
				newRequestDenshiKouhuDoiZumiFile.print(mapKKIFE207002, newRequestDenshiKouhuDoiZumidef);
			}
			// 電子交付同意なしの場合
			else
			{
				// 抽出データをファイルオブジェクトへマッピング
				this.setMapData(inMap, mapKKIFM237, mapKKIFE207);
				
				// 出力フラグを設定
				mapKKIFM237.setOutFlg(true);
				mapKKIFE207.setOutFlg(true);
				
				// 出力共通電文入出力インターフェイスを設定する
				outputBean.addOutMapList(mapKKIFM237);
				outputBean.addOutMapList_2(mapKKIFE207);
			}
		}
		// 追加申込の場合
		else
		{
		// ANK-4309-00-00 ADD END
			// 抽出データをファイルオブジェクトへマッピング
			this.setMapData(inMap, mapKKIFM237, mapKKIFE207);
			
			// 出力フラグを設定
			mapKKIFM237.setOutFlg(true);
			mapKKIFE207.setOutFlg(true);
			
			// 出力共通電文入出力インターフェイスを設定する
			outputBean.addOutMapList(mapKKIFM237);
			outputBean.addOutMapList_2(mapKKIFE207);
		// ANK-4309-00-00 ADD START
		}
		// ANK-4309-00-00 ADD END
		
		// ANK-4309-00-00 DEL START
//		recont++;
		// ANK-4309-00-00 DEL END
		
		// 次のレコードへ
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CK_T_CUST.close();
		db_KK_T_KKTK_SVC_KEI.close();
		db_KK_T_KAP_KEI.close();
		db_KK_M_KAP_PLAN.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		// ANK-4309-00-00 ADD START
		// ファイルクローズ
		if (funccode.equals("0")) 
		{
			newRequestDenshiKouhuDoiZumiFile.close();
		}
		// ANK-4309-00-00 ADD END
		// IT1-2013-0000266 2013/02/13 DEL START
//		if(this.recont != 0)
//		{
		// IT1-2013-0000266 2013/02/13 DEL END
		// ANK-4309-00-00 DEL START
//		// トレーラ部出力文字列を生成
//		StringBuffer trailerbuf = new StringBuffer();
//		trailerbuf.append("E");
//		trailerbuf.append(",");
//		trailerbuf.append(this.recont + "");
//		trailerbuf.append(",");
//		// ▼▼▼ [IT1-2013-0000292] 2013/02/18 M.IKUMA Start ▼▼▼
////		trailerbuf.append(JCCBatCommon.getSysDate());
//		trailerbuf.append(super.opeDate);
//		// ▼▼▼ [IT1-2013-0000292] 2013/02/18 M.IKUMA   End ▼▼▼
//		
//		// トレーラレコードの出力
//		super.commonItem.getOutPutFile2().write(SCOPE + trailerbuf.toString().replace(",", SCOPE + "," + SCOPE) + SCOPE);
//		} // IT1-2013-0000266 2013/02/13 DEL
		// ANK-4309-00-00 DEL END
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(KK_SELECT_034)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	運用日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KK_SELECT_034(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_034);
	}

	/**
	 * SQLKEY(KK_SELECT_085)で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_KKTK_SVC_KEI_KK_SELECT_085(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_085);
	}

	/**
	 * SQLKEY(KK_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_M_KAP_PLAN_KK_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());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());

		// DBアクセスを実行します
		db_KK_M_KAP_PLAN.selectBySqlDefine(paramList, KK_M_KAP_PLAN_KK_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 住所編集部品を使って名寄せ対応
	 * 
	 * @param inMap 抽出データ
	 * @param flg 0 契約者住所 それ以外は機器送付先住所
	 * @return 名寄せ対応処理結果
	 * @throws Exception 各種エラー
	 */
	private String[] getNayoseResult(JBSbatServiceInterfaceMap inMap, int flg) throws Exception
	{
		// 格納用配列の作成
		String[] returnObj = new String[11];
		String[] addObj = null;
		JBSbatCommonDBInterface result = null;
		if(flg == 0)
		{
			// 契約者住所を返却
			Object[] params = { inMap.getString(JBSbatCK_T_CUST.SYSID), super.opeDate };
			this.executeCK_T_CUST_KK_SELECT_034(params);
			result = db_CK_T_CUST.selectNext();
			if(result != null)
			{
				returnObj[0] = result.getString(JBSbatCK_T_CUST.KEISHA_AD_CD);
				returnObj[1] = result.getString(JBSbatCK_T_CUST.KEISHA_PCD);
				returnObj[9] = result.getString(JBSbatCK_T_CUST.CUST_NM);
				returnObj[10] = result.getString(JBSbatCK_T_CUST.KEISHA_TYPE_CD);
				addObj = JZMAdEdit.getPtn07(
										result.getString(JBSbatCK_T_CUST.KEISHA_STATE_NM)
										, result.getString(JBSbatCK_T_CUST.KEISHA_CITY_NM)
										, result.getString(JBSbatCK_T_CUST.KEISHA_OAZTSU_NM)
										, result.getString(JBSbatCK_T_CUST.KEISHA_AZCHO_NM)
										, result.getString(JBSbatCK_T_CUST.KEISHA_BNCHIGO)
										, result.getString(JBSbatCK_T_CUST.KEISHA_ADRTTM)
										, result.getString(JBSbatCK_T_CUST.KEISHA_ADRRM));
			}
		}
		else
		{
			Object[] params = { inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO), super.opeDate };
			this.executeKK_T_KKTK_SVC_KEI_KK_SELECT_085(params);
			result = db_KK_T_KKTK_SVC_KEI.selectNext();
			if(result != null)
			{
				// 機器送付先住所を返却
				String kkcd = result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_AD_CD);
				if(kkcd != null && !"".equals(kkcd))
				{
					// 機器送付先住所が存在する
					returnObj[0] = result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_AD_CD);
					returnObj[1] = result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_PCD);
					addObj = JZMAdEdit.getPtn07(
										result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_STATE_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_CITY_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_OAZTSU_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_AZCHO_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_BNCHIGO)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_ADRTTM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_ADRRM));
				}
				else
				{
					// 機器送付先住所が無いので機器設置先住所を返却する
					returnObj[0] = result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_AD_CD);
					returnObj[1] = result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_PCD);
					addObj = JZMAdEdit.getPtn07(
										result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_STATE_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_CITY_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_OAZTSU_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_AZCHO_NM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_BNCHIGO)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_ADRTTM)
										, result.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_STC_SAKI_ADRRM));
				}
			}
		}
		
		if(result != null)
		{
			// 住所情報を格納
			System.arraycopy(addObj, 0, returnObj, 2, addObj.length);
		}
		
		return returnObj;
	}
	
	/**
	 * 販売形態、機器型式コード、商品名をセットして返す。
	 * 
	 * @param inMap 抽出元データ
	 * @return セットデータ
	 * @throws Exception 各種エラー
	 */
	private HashMap<String, String> getKapPmap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		HashMap<String, String> map = new HashMap<String, String>();
		
		Object[] params = { inMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_NO), 
				super.opeDate, 
				super.opeDate, 
				super.opeDate, 
				super.opeDate, 
				super.opeDate
		};
		this.executeKK_M_KAP_PLAN_KK_SELECT_001(params);
		JBSbatCommonDBInterface result = db_KK_M_KAP_PLAN.selectNext();
		if(result != null)
		{
			// 割賦販売形態コード
			String key = JBSbatKK_M_KAP_PLAN.KAP_HAMBAI_FORM_CD;
			map.put(key, result.getString(key));
			// 提供機器型式コード
			key = JBSbatZM_M_TKMDL_KNRN_INFO.TAKNKIKI_MODEL_CD;
			map.put(key, result.getString(key));
			// 宅内機器商品名
			key = JBSbatZM_M_TKMDL_KNRN_INFO.TCHISHO_YO_TKMDL_NM;
			map.put(key, result.getString(key));
		}
		
		return map;
	}

	/**
	 * 抽出データをファイル出力オブジェクトへマッピングする
	 * 
	 * @param inMap 抽出データ
	 * @param mapKKIFM237 更新用中間ファイル
	 * @param mapKKIFE207 外部連携ファイル
	 * @throws Exception 各種エラー
	 */
	private void setMapData(JBSbatServiceInterfaceMap inMap,
			JBSbatServiceInterfaceMap mapKKIFM237,
			JBSbatServiceInterfaceMap mapKKIFE207) throws Exception
	{
		// ANK-3987-00-00 ADD START
		// 通知書判定処理
		// 通知書判定フラグ(0:eoスマートリンクタブレット端末購入通知書,1:ストリーミングメディアプレーヤー購入通知書)
		String tchishoFlg = judgeTchisho(inMap);
		// ANK-3987-00-00 ADD END
		
		// ########################
		// ## 出力データ事前準備 ##
		// ########################
		// 契約者住所を準備 （名寄せ対応）
		String[] nayoses_kei = this.getNayoseResult(inMap, 0);
		// 機器送付先住所を準備 （名寄せ対応）
		String[] nayoses_kiki = this.getNayoseResult(inMap, 1);
		// 割賦プラン関連抽出
		// ANK-3987-00-00 MOD START
		//HashMap<String, String> kapPmap = this.getKapPmap(inMap);
		HashMap<String, String> kapPmap = new HashMap<String, String>();
		// 通知書が"0"(eoスマートリンクタブレット端末購入通知書)の場合
		if (TCHISHO_FLG_0.equals(tchishoFlg))
		{
			kapPmap = this.getKapPmap(inMap);
		}
		// ANK-3987-00-00 MOD END
		// ANK-3987-00-00 ADD START
		// 照査年月日
		String shosaYmd = "";
		// 商品名
		String shohinNm = "";
		// 通知書が"1"(ストリーミングメディアプレーヤー購入通知書)の場合
		if (TCHISHO_FLG_1.equals(tchishoFlg))
		{
			// 照査年月日取得処理
			shosaYmd = this.getShosaYmd(inMap);
			// 商品名取得処理
			shohinNm = this.getShohinNm(inMap);
		}
		// ANK-3987-00-00 ADD END
		
		// 割賦契約番号
		String str = inMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_NO);
		mapKKIFM237.setString(JBSbatKKIFM237.KAP_KEI_NO, str);
		// サービス契約番号
		str = inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
		mapKKIFM237.setString(JBSbatKKIFM237.SVC_KEI_NO, str);
		mapKKIFE207.setString(JBSbatKKIFE207.SVC_KEI_NO, str);
		// SYSID
		str = inMap.getString(JBSbatKK_T_SVC_KEI.SYSID);
		mapKKIFM237.setString(JBSbatKKIFM237.SYSID, str);
		mapKKIFE207.setString(JBSbatKKIFE207.SYSID, str);
		// サービスコード
		str = inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD);
		mapKKIFM237.setString(JBSbatKKIFM237.SVC_CD, str);
		// 料金グループ
		str = inMap.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD);
		mapKKIFM237.setString(JBSbatKKIFM237.PRC_GRP_CD, str);
		// 料金コース
		str = inMap.getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
		mapKKIFM237.setString(JBSbatKKIFM237.PCRS_CD, str);
		// 料金プラン
		str = inMap.getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
		mapKKIFM237.setString(JBSbatKKIFM237.PPLAN_CD, str);
		
		int i = 0;
		// 住所コード
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_AD_CD, str);
		// 契約者郵便番号 （外部連携ファイルはハイフン付与）
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_PCD, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_PCD, JPCUtilCommon.hyhunPcd(str));
		// 契約者都道府県名
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_STATE_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_STATE_NM, str);
		// 契約者市区町村名
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_CITY_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_CITY_NM, str);
		// 契約者大字通称名
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_OAZTSU_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_OAZTSU_NM, str);
		// 契約者字丁目名
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_AZCHO_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_AZCHO_NM, str);
		// 契約者番地号
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_BNCHIGO, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_BNCHIGO, str);
		// 契約者住所補記・建物名
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_ADRTTM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_ADRTTM, str);
		// 契約者住所補記・部屋番号
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.KEISHA_ADRRM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_ADRRM, str);
		// 契約者名
		str = nayoses_kei[i++];
		mapKKIFM237.setString(JBSbatKKIFM237.CUST_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.CUST_NM, str);
		// 契約者タイプコード
		str = nayoses_kei[i++];
		mapKKIFE207.setString(JBSbatKKIFE207.KEISHA_TYPE_CD, str);
		
		// 購入台数
		str = "1";
		mapKKIFE207.setString(JBSbatKKIFE207.KONYU_DAI_SU, str);
		// 契約年月日
		// ANK-3987-00-00 ADD START
		// eoスマートリンクタブレット端末購入通知書の場合
		if (TCHISHO_FLG_0.equals(tchishoFlg))
		{
		// ANK-3987-00-00 ADD END
			str = inMap.getString(KEI_YEAR_YMD); // SQLの独自カラム名、オンラインとバッチそれぞれのSQLを参照
			mapKKIFM237.setString(JBSbatKKIFM237.KEIYAKU_YMD, str);
			mapKKIFE207.setString(JBSbatKKIFE207.KEIYAKU_YMD, str);
		// ANK-3987-00-00 ADD START
		}
		// ストリーミングメディアプレーヤー購入通知書の場合
		else if (TCHISHO_FLG_1.equals(tchishoFlg))
		{
			mapKKIFM237.setString(JBSbatKKIFM237.KEIYAKU_YMD, shosaYmd);
			mapKKIFE207.setString(JBSbatKKIFE207.KEIYAKU_YMD, shosaYmd);
		}
		// ANK-3987-00-00 ADD END
		
		// 購入形態
		// ANK-3987-00-00 ADD START
		// eoスマートリンクタブレット端末購入通知書の場合
		if (TCHISHO_FLG_0.equals(tchishoFlg))
		{
		// ANK-3987-00-00 ADD END
			str = kapPmap.get(JBSbatKK_M_KAP_PLAN.KAP_HAMBAI_FORM_CD);
			mapKKIFM237.setString(JBSbatKKIFM237.KAP_HAMBAI_FORM_CD, str);
			mapKKIFE207.setString(JBSbatKKIFE207.KAP_HAMBAI_FORM_CD, str);
		// ANK-3987-00-00 ADD START
		}
		// ストリーミングメディアプレーヤー購入通知書の場合
		else if (TCHISHO_FLG_1.equals(tchishoFlg))
		{
			// "01"(一括)を設定する
			mapKKIFM237.setString(JBSbatKKIFM237.KAP_HAMBAI_FORM_CD, BUY_FORM_01);
			mapKKIFE207.setString(JBSbatKKIFE207.KAP_HAMBAI_FORM_CD, BUY_FORM_01);
		}
		// ANK-3987-00-00 ADD END
		// 宅内機器型式コード
		// ANK-3987-00-00 ADD START
		// eoスマートリンクタブレット端末購入通知書の場合
		if (TCHISHO_FLG_0.equals(tchishoFlg))
		{
		// ANK-3987-00-00 ADD END
			str = kapPmap.get(JBSbatKK_M_KAP_PLAN.TAKNKIKI_MODEL_CD);
			mapKKIFM237.setString(JBSbatKKIFM237.TAKNKIKI_MODEL_CD, str);
		// ANK-3987-00-00 ADD START
		}
		// ストリーミングメディアプレーヤー購入通知書の場合
		else if (TCHISHO_FLG_1.equals(tchishoFlg))
		{
			str = inMap.getString(JBSbatKKIFM572.TAKNKIKI_MODEL_CD);
			mapKKIFM237.setString(JBSbatKKIFM237.TAKNKIKI_MODEL_CD, str);
		}
		// ANK-3987-00-00 ADD END
		// 商品名（型式） 
		// ANK-3987-00-00 ADD START
		// eoスマートリンクタブレット端末購入通知書の場合
		if (TCHISHO_FLG_0.equals(tchishoFlg))
		{
		// ANK-3987-00-00 ADD END
			str = kapPmap.get(JBSbatZM_M_TKMDL_KNRN_INFO.TCHISHO_YO_TKMDL_NM);
			mapKKIFM237.setString(JBSbatKKIFM237.SYHOHIN_NM, str);
			mapKKIFE207.setString(JBSbatKKIFE207.SYHOHIN_NM, str);
		// ANK-3987-00-00 ADD START
		}
		// ストリーミングメディアプレーヤー購入通知書の場合
		else if (TCHISHO_FLG_1.equals(tchishoFlg))
		{
			mapKKIFM237.setString(JBSbatKKIFM237.SYHOHIN_NM, shohinNm);
			mapKKIFE207.setString(JBSbatKKIFE207.SYHOHIN_NM, shohinNm);
		}
		// ANK-3987-00-00 ADD END
		
		int n = 0;
		// 機器送付先住所コード
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_AD_CD, str);
		// 機器送付先郵便番号（
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_PCD, str);
		// 機器送付先都道府県名
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_STATE_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KIKI_SOHUS_STATE_NM, str);
		// 機器送付先市区町村名
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_CITY_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KIKI_SOHUS_CITY_NM, str);
		// 機器送付先大字通称名
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_OAZTSU_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KIKI_SOHUS_OAZTSU_NM, str);
		// 機器送付先字丁目名
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_AZCHO_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KIKI_SOHUS_AZCHO_NM, str);
		// 機器送付先番地号
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_BNCHIGO, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KIKI_SOHUS_BNCHIGO, str);
		// 機器送付先住所補記・建物名
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_ADRTTM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KIKI_SOHUS_ADRTTM, str);
		// 機器送付先住所補記・部屋番号
		str = nayoses_kiki[n++];
		mapKKIFM237.setString(JBSbatKKIFM237.KIKI_SOHUS_ADRRM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KIKI_SOHUS_ADRRM, str);
		// ご契約受付担当
		str = inMap.getString(JBSbatKK_T_KAP_KEI.TNMT_BUY_UK_TNTSHA_NM);
		mapKKIFM237.setString(JBSbatKKIFM237.KEI_TANTO_NM, str);
		mapKKIFE207.setString(JBSbatKKIFE207.KEI_TANTO_NM, str);
		// 端末購入受け付けオペレータアカウント
		str = inMap.getString(JBSbatKK_T_KAP_KEI.ADD_OPEACNT);
		mapKKIFM237.setString(JBSbatKKIFM237.ADD_OPEACNT, str);
		// ANK-3987-00-00 ADD START
		// 通知書コード
		// eoスマートリンクタブレット端末購入通知書の場合
		if (TCHISHO_FLG_0.equals(tchishoFlg))
		{
			// "210"(eoスマートリンクタブレット端末購入通知書)を設定する
			mapKKIFM237.setString(JBSbatKKIFM237.TCHISHO_CD, JBSbatKKConst.TCHISHO_CD_210);
		}
		// ストリーミングメディアプレーヤー購入通知書の場合
		else if (TCHISHO_FLG_1.equals(tchishoFlg))
		{
			// "220"(ストリーミングメディアプレーヤー購入通知書)を設定する
			mapKKIFM237.setString(JBSbatKKIFM237.TCHISHO_CD, JBSbatKKConst.TCHISHO_CD_220);
		}
		// 端末購入通知書情報番号
		// eoスマートリンクタブレット端末購入通知書の場合
		if (TCHISHO_FLG_0.equals(tchishoFlg))
		{
			// ""を設定する
			mapKKIFM237.setString(JBSbatKKIFM237.TMKNTSHO_INF_NO, "");
		}
		// ストリーミングメディアプレーヤー購入通知書の場合
		else if (TCHISHO_FLG_1.equals(tchishoFlg))
		{
			str = (String)inMap.getString(JBSbatKKIFM572.TMKNTSHO_INF_NO);
			mapKKIFM237.setString(JBSbatKKIFM237.TMKNTSHO_INF_NO, str);
		}
		// ANK-3987-00-00 ADD END
	}

	// 2013/12/16 OM-2013-0002906 Add Start
	/**
	 * nullか空白の判定処理
	 * @param value　判定対象
	 * @return boolean　（true:null、false:null以外）
	 */
	private boolean isNullOrEmpty(String value)
	{
		if ("".equals(value) || value == null)
		{
			return true;
		}

		return false;
	}
	// 2013/12/16 OM-2013-0002906 Add End

	// ANK-3987-00-00 ADD START
	/**
	 * 通知書判定処理
	 * @param inMap　INマップ
	 * @return String　（0:eoスマートリンクタブレット端末購入通知書、1:ストリーミングメディアプレーヤー購入通知書）
	 * @throws Exception 
	 */
	private String judgeTchisho(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		if (inMap == null)
		{
			// "99"(処理対象外の通知書)
			return "99";
		}
		
		// 端末購入通知書情報番号
		String tmkntshoInfNo = (String)inMap.getString(JBSbatKKIFM572.TMKNTSHO_INF_NO);
		
		if (tmkntshoInfNo == null || "".equals(tmkntshoInfNo))
		{
			// 端末購入通知書情報番号は端末購入通知書情報スキーマから取得しているため、
			// 端末購入通知書情報番号に値がない場合はeoスマートリンクタブレット端末購入通知書となり、"0"を返却する
			return "0";
		}
		else
		{
			// 端末購入通知書情報番号は端末購入通知書情報スキーマから取得しているため、
			// 端末購入通知書情報番号に値がある場合はストリーミングメディアプレーヤー購入通知書となり、"1"を返却する
			return "1";
		}
	}

	/**
	 * 機器提供サービス契約から取得した照査年月日を返却します。
	 * 
	 * @param inMap 抽出元データ
	 * @return セットデータ
	 * @throws Exception 各種エラー
	 */
	private String getShosaYmd(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 照査年月日
		String shosaYmd = "";
		
		Object[] params = { inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO), 
				super.opeDate
		};
		this.executeKK_T_KKTK_SVC_KEI_KK_SELECT_089(params);
		JBSbatCommonDBInterface result = db_KK_T_KKTK_SVC_KEI.selectNext();
		if(result != null)
		{
			// 照査年月日を取得
			shosaYmd = result.getString(JBSbatKK_T_KKTK_SVC_KEI.SHOSA_YMD);
		}
		
		return shosaYmd;
	}

	/**
	 * SQLKEY(KK_SELECT_089)で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_KKTK_SVC_KEI_KK_SELECT_089(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_089);
	}

	/**
	 * 宅内機器型式関連情報から取得した通知書用宅内機器型式名を返却します。
	 * 
	 * @param inMap 抽出元データ
	 * @return セットデータ
	 * @throws Exception 各種エラー
	 */
	private String getShohinNm(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 商品名
		String shohinNm = "";
		
		Object[] params = { inMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO), 
				super.opeDate,
				super.opeDate,
				super.opeDate,
				super.opeDate
		};
		this.executeKK_T_KKTK_SVC_KEI_CH_SELECT_001(params);
		JBSbatCommonDBInterface result = db_KK_T_KKTK_SVC_KEI.selectNext();
		if(result != null)
		{
			// 通知書用宅内機器型式名を取得
			shohinNm = result.getString(JBSbatZM_M_TKMDL_KNRN_INFO.TCHISHO_YO_TKMDL_NM);
		}
		
		return shohinNm;
	}

	/**
	 * SQLKEY(CH_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_KKTK_SVC_KEI_CH_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());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_CH_SELECT_001);
	}
	// ANK-3987-00-00 ADD END
}
