/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom                        *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKHikkoshiNewKeiIfKojin
*	ソースファイル名	：JBSbatKKHikkoshiNewKeiIfKojin.java
*	作成者				：富士通　
*	作成日				：2011年09月01日
*＜機能概要＞
*　引越新規契約情報抽出_個人部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/01   富士通		新規作成
*	v3.00.00	2012/06/26   FJ)藤本	【SGY-2012-0000037】住所変更対応
*	v3.01.00	2012/08/10   FJ)藤本	【ST2-2012-0001503】住所部品の戻り値のNullチェック追加
*	v3.02.00	2012/09/24   FJ)藤本	【ST2-2012-0001714】運用日の前日を抽出するように修正
*	v3.03.00	2012/10/26   FJ)藤本	【ST1-2012-0000713】運用日で抽出するように修正
*	v3.04.00	2012/11/07   FJ)藤本	【IT2-2012-0001652】個人が存在しない場合はエラーとしない
*	v4.00.00	2013/01/17   FJ)団		【ST2-2013-0000113】連携ファイル制御で範囲指定するよう修正
*	v4.01.00	2013/02/22   FJ)柳		【ST1-2013-0000350】お客様ID対応
*	v4.02.00	2013/03/22   FJ)柳		【IT1-2013-0000498】対応
*	v4.03.00	2013/03/26  FJ)藤本		【ST1-2013-0000499】対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM043;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatCK_T_RRKS;
import eo.business.util.table.JBSbatKK_T_ADCHG_DTL;
import eo.business.util.table.JBSbatKK_T_PRG;
import eo.business.util.table.JBSbatKK_T_RNKI_FILE_CTRL;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.common.util.JZMAdOutputEdit;
import eo.framework.application.JBSbatBusinessException;
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;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKHikkoshiNewKeiIfKojin extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	private static final String D_TBL_NAME_KK_T_RNKI_FILE_CTRL = "KK_T_RNKI_FILE_CTRL";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";
	
	/** テーブル(住所変更明細)*/
	private static final String D_TBL_NAME_KK_T_ADCHG_DTL = "KK_T_ADCHG_DTL";

	/** SQL定義キー(KK_SELECT_182)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_182 = "KK_SELECT_182";

	/** SQL定義キー(KK_SELECT_009)*/
	private static final String CK_T_CUST_KK_SELECT_009 = "KK_SELECT_009";
	
	/** SQL定義キー(KK_SELECT_017)*/
	private static final String KK_T_ADCHG_DTL_KK_SELECT_017 = "KK_SELECT_017";
	
	/** テーブルアクセスクラス(連携ファイル制御)*/
	private JBSbatSQLAccess db_KK_T_RNKI_FILE_CTRL = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
	
	/** テーブルアクセスクラス(住所変更明細)*/
	private JBSbatSQLAccess db_KK_T_ADCHG_DTL = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 出力元 */
	private static final String JOB_ID = "EO20G0140J0";
	
	/** 局コード */
	private static final String KYOKU_CODE = "11";
	
	/** 空白*/
	private static final String SPACE = "";
	
	/** 料金コード*/
	private static final String RYOKIN_PLAN_CODE = "041";
	
	/** 電障コード（固定値）*/
	private static final String DENSYO_CODE = "9999999999";
	
	/** 物理バッチID（KKPRC01601）*/
	private static final String BAT_ID = "KKPRC01601";
	
	/** ファイルID（KKIFE044）*/
	private static final String FILE_ID = "KKIFE044  ";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_RNKI_FILE_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_RNKI_FILE_CTRL);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_KK_T_ADCHG_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_ADCHG_DTL);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		JBSbatCommonDBInterface db_map = null;
		String znkiJssiTimestamp = "";

		// 連携ファイル制御を検索します。
		String[] para1 = {BAT_ID, FILE_ID};
		db_map = executeKK_T_RNKI_FILE_CTRL_PKSELECT(para1);
		// 前回実施日が取得できた場合
		if (null != db_map)
		{
			znkiJssiTimestamp = JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_RNKI_FILE_CTRL.ZNKI_TRAN_RUN_DTM));
		}
		// 前回実施日が取得できなかった場合、バッチ運用日-1日を「前回運用日」とします。
		if("".equals(znkiJssiTimestamp))
		{
			znkiJssiTimestamp = JBSbatDateUtil.adjustDate(super.opeDate, -1) + "000000000";
		}
		
		// 抽出開始タイムスタンプ
		String searhTimeStamp = this.getSearchTimeStamp();
		
		// 対象となるサービス契約の検索を行います。
		String[] para2 = {znkiJssiTimestamp, searhTimeStamp, super.opeDate};
		this.executeKK_T_SVC_KEI_KK_SELECT_182(para2);
		JBSbatCommonDBInterface svcKeiResult = db_KK_T_SVC_KEI.selectNext();
		if(null == svcKeiResult)
		{
			super.logPrint.printDebugLog("異動日時＞「" + znkiJssiTimestamp + "」、異動日時＜＝「" + searhTimeStamp + "」の住所変更新設の検索結果がありませんでした。");
		}
		else
		{
			while(null != svcKeiResult)
			{
				// 入出力インターフェースオブジェクトを生成(異動情報結果ファイル用)
				JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
				
				// お客様（個人）情報を設定します。
				boolean result = setCustInfo(svcKeiResult, outmap);
				
				if (result)
				{
					// 初期検索で取得した異動情報を異動情報ファイル（etv１）ファイルに設定します。
					setIdoInfo(svcKeiResult, outmap);
					
					//出力フラグを設定
					outmap.setOutFlg(true);

					//出力共通電文に入出力インターフェースを設定する。
					outputBean.addOutMapList(outmap);
				}
				else
				{
					// 入出力インターフェースオブジェクトを生成(異動情報結果ファイル用)
					JBSbatServiceInterfaceMap outmap1 = new JBSbatServiceInterfaceMap();
					
					// 初期検索で取得した異動情報を異動情報ファイル（etv１）ファイルに設定します。
					setIdoInfo(svcKeiResult, outmap1);
					
					//出力フラグを設定
					outmap1.setOutFlg(true);

					//出力共通電文に入出力インターフェースを設定する。
					outputBean.addOutMapList_2(outmap1);
				}
				svcKeiResult = db_KK_T_SVC_KEI.selectNext();
				

			}
		}
		
		super.logPrint.printDebugLog("execute_END");
		
		return outputBean;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_RNKI_FILE_CTRL.close();
		db_KK_T_SVC_KEI.close();
		db_CK_T_CUST.close();
		db_KK_T_ADCHG_DTL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	BUTSURI_BAT_ID
	 *		 	FILE_ID
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_RNKI_FILE_CTRL_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("BUTSURI_BAT_ID", whereParam[0]);
		whereMap.setValue("FILE_ID", whereParam[1]);

		// DBアクセスを実行します
		return db_KK_T_RNKI_FILE_CTRL.selectByPrimaryKeys(whereMap);
	}

	/**
	 * SQLKEY(KK_SELECT_182)で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_182(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_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_182);
	}

	/**
	 * SQLKEY(KK_SELECT_009)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	RSV_APLY_YMD
	 *		 	SYSID
	 *		 	RSV_APLY_YMD
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KK_SELECT_009(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_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_009);
	}
	
	/**
	 * SQLKEY(KK_SELECT_017)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ADCHG_NO
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_ADCHG_DTL_KK_SELECT_017(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_ADCHG_DTL.selectBySqlDefine(paramList, KK_T_ADCHG_DTL_KK_SELECT_017);
	}
	
	
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 異動情報ファイル（etv1）情報(個人)の設定<br>
	 * <p>
	 * @param inMap 初期検索情報
	 * @param outmap 入出力インターフェースオブジェクト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private void setIdoInfo(JBSbatCommonDBInterface inMap, JBSbatServiceInterfaceMap outmap) throws Exception
	{
		
		// お客様ＩＤ ← 住所変更明細の変更前識別番号
		outmap.setString(JBSbatKKIFM043.SVC_KEI_NO, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));

		// 異動区分 ← 「10000」を設定
		outmap.setString(JBSbatKKIFM043.IDO_DIV, "10000");
		
		// 引越先サービス契約番号 ← サービス契約．サービス契約番号
		outmap.setString(JBSbatKKIFM043.HIKKOSHI_SKI_SVKEI_NO, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_ADCHG_DTL.CHBF_SKBT_NO)));

		
		// 局コード ← 固定値を設定（”11”）
		outmap.setString(JBSbatKKIFM043.KYOKU_CD, KYOKU_CODE);
		
		// コース ← 空白を設定
		outmap.setString(JBSbatKKIFM043.COURSE, SPACE);
		
		// ＳＴＢ台数 ← 空白を設定
		outmap.setString(JBSbatKKIFM043.STB_CNT, SPACE);
		
		// 利用場所郵便番号 ← サービス契約回線内訳．回線場所郵便番号
		outmap.setString(JBSbatKKIFM043.KAISEN_PLACE_PCD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD)));
		
		// 利用場所住所 ← サービス契約回線内訳の「回線場所都道府県名」+「回線場所市区町村名」+「回線場所大字通称名」+「回線場所字丁目名」+
		// 					「回線場所番地号」+「回線場所住所補記・建物名」+「回線場所住所補記・部屋番号」を設定。(121桁を超える場合はカットする)
		String kaisen_place_ad = JZMAdOutputEdit.getPtn01(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM)),
															JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM)),
															JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM)),
															JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM)),
															JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO)),
															JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM)),
															JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM)));
		
		if(121 < JBSbatStringUtil.Rtrim(kaisen_place_ad).length())
		{
			kaisen_place_ad = kaisen_place_ad.substring(0, 121);
		}
		outmap.setString(JBSbatKKIFM043.KAISEN_PLACE_AD, kaisen_place_ad);
		
		// 請求先郵便番号 ← 空白を設定
		outmap.setString(JBSbatKKIFM043.SEIKYS_PCD, SPACE);
		
		// 請求先住所 ← 空白を設定
		outmap.setString(JBSbatKKIFM043.SEIKYS_AD, SPACE);
		
		// 送付先名（カナ） ← 空白を設定
		outmap.setString(JBSbatKKIFM043.SOHUS_NM_KANA, SPACE);
		
		// 送付先名１ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.SOHUS_NM1, SPACE);
		
		// 送付先名２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.SOHUS_NM1, SPACE);
		
		// 送付先名３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.SOHUS_NM2, SPACE);
		
		// 送付先電話番号 ← 空白を設定
		outmap.setString(JBSbatKKIFM043.SOHUS_TELNO, SPACE);
		
		// 異動日 ← 進捗。進捗年月日時分秒
		outmap.setString(JBSbatKKIFM043.IDO_DAY, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_PRG.PRG_DTM)));
		
		// 料金プラン ← 固定値を設定（”041”）
		outmap.setString(JBSbatKKIFM043.PPLAN, RYOKIN_PLAN_CODE);
		
		// 更新日 ← 空白（編集処理にてシステム日時を設定）
		outmap.setString(JBSbatKKIFM043.UPD_DAY, SPACE);
		
		// マンションコード ← 空白を設定
		outmap.setString(JBSbatKKIFM043.MANSION_CD, SPACE);
		
		// 電障コード ← 固定値を設定（”9999999999”）
		outmap.setString(JBSbatKKIFM043.DENSHO_CD, DENSYO_CODE);
		
		
		// 住所変更明細の検索を行います。
		String[] para = {JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_ADCHG_DTL.ADCHG_NO))};
		this.executeKK_T_ADCHG_DTL_KK_SELECT_017(para);
		
		JBSbatCommonDBInterface adchgDtlResult = db_KK_T_ADCHG_DTL.selectNext();

		if(null == adchgDtlResult)
		{
			// 案件番号 ← 空白を設定
			outmap.setString(JBSbatKKIFM043.KOJIAK_NO, SPACE);
		} else {
			// 案件番号 ← 住所変更明細種別コード(06)の変更前識別番号
			outmap.setString(JBSbatKKIFM043.KOJIAK_NO, JBSbatStringUtil.Rtrim(adchgDtlResult.getString(JBSbatKK_T_ADCHG_DTL.CHBF_SKBT_NO)));
		}
		
		// ケーブルガイド申込数 ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CABLE_GUIDE_MOSHIKOMI, SPACE);
		
		// 工事案件対象宅内機器情報を設定します。
		setKjakTgTkkikiInfo(outmap);
		
		// 編集用異動区分 ← 進捗．異動区分
		outmap.setString(JBSbatKKIFM043.HENSHU_IDO_DIV, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_PRG.IDO_DIV)));
		
		// 編集用進捗ステータス ← 進捗．進捗ステータス
		outmap.setString(JBSbatKKIFM043.HENSHU_PRG_STAT, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_PRG.PRG_STAT)));
		
		// 照査年月日 ← サービス契約．照査年月日
		outmap.setString(JBSbatKKIFM043.SHOSA_YMD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SHOSA_YMD)));
		
		// サービス課金終了年月日 ← サービス契約．サービス課金終了年月日
		outmap.setString(JBSbatKKIFM043.SVC_CHRG_ENDYMD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD)));
		
		// サービスキャンセル年月日 ← サービス契約．サービスキャンセル年月日
		outmap.setString(JBSbatKKIFM043.SVC_CANCEL_YMD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CANCEL_YMD)));
		
		// 回復年月日 ← サービス契約．回復年月日
		outmap.setString(JBSbatKKIFM043.KAIHK_YMD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.KAIHK_YMD)));
		
		// サービス停止年月日 ← サービス契約．サービス停止年月日
		outmap.setString(JBSbatKKIFM043.SVC_STP_YMD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_STP_YMD)));
		
		// サービス停止解除年月日 ← サービス契約．サービス停止解除年月日
		outmap.setString(JBSbatKKIFM043.SVC_STP_RLS_YMD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_STP_RLS_YMD)));
		
		// プラン開始年月日
		outmap.setString(JBSbatKKIFM043.PLAN_STAYMD, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.PLAN_STAYMD)));
		
		// 登録年月日時分秒 ← 進捗．登録年月日時分秒
		outmap.setString(JBSbatKKIFM043.ADD_DTM, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_PRG.ADD_DTM)));
		
		// 申込明細番号 ← KK_T_SVC_KEI．MSKM_DTL_NO
		outmap.setString(JBSbatKKIFM043.MSKM_DTL_NO, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.MSKM_DTL_NO)));
		
		// ＳＹＳＩＤ ← サービス契約．ＳＹＳＩＤ
		outmap.setString(JBSbatKKIFM043.SYSID, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SYSID)));
		
		// 出力元 ← 固定値を設定（”EO20G0140J0”）
		outmap.setString(JBSbatKKIFM043.OPUT_MT, JOB_ID);
	}
	
	/**
	 * お客様情報の設定<br>
	 * <p>
	 * @param inMap 入力情報
	 * @param outmap 出力情報（お客様情報あり）
	 * @return true：お客様情報あり、false：お客様情報なし
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private boolean setCustInfo(JBSbatCommonDBInterface inMap, JBSbatServiceInterfaceMap outmap) throws Exception
	{
		// SYSIDを取得します。
		String sys_id = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SYSID));
		
		Object[] para = new Object[4];
		para[0] = sys_id;
		para[1] = super.opeDate;
		para[2] = sys_id;
		para[3] = super.opeDate;
		
		
		// お客様(個人)情報を取得します。
		executeCK_T_CUST_KK_SELECT_009(para);
		
		JBSbatCommonDBInterface resultMap = db_CK_T_CUST.selectNext();
		
		// 検索結果がある場合
		if (resultMap != null)
		{
			// 郵便番号 ← お客様．契約者郵便番号
			outmap.setString(JBSbatKKIFM043.KEISHA_PCD, JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_PCD)));
			
			// 住所 ← お客様の「契約者都道府県名」+「契約者市区町村名」+「契約者大字通称名」+「契約者字丁目名」
			// 			+「契約者番地号」+「契約者住所補記・建物名」+「契約者住所補記・部屋番号」を設定。(121桁を超える場合はカットする)
			String ad = JZMAdOutputEdit.getPtn01(JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_STATE_NM)),
													JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_CITY_NM)),
													JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_OAZTSU_NM)),
													JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_AZCHO_NM)),
													JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_BNCHIGO)),
													JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_ADRTTM)),
													JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.KEISHA_ADRRM)));
			if(121 < JBSbatStringUtil.Rtrim(ad).length())
			{
				ad = ad.substring(0, 121);
			}
			
			outmap.setString(JBSbatKKIFM043.AD, ad);
			
			// 契約者名カナ ← お客様．お客様カナ名
			outmap.setString(JBSbatKKIFM043.KEISHA_NM_KANA, JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.CUST_KANA)));
			
			// 契約者名１ ← 「お客様．お客様名」の1〜15文字
			// 契約者名２ ← 「お客様．お客様名」の16〜30文字
			// 契約者名３ ← 「お客様．お客様名」の31〜45文字
			// 端末設置場所名１ ← 「お客様．お客様名」の1〜15文字
			// 端末設置場所名２ ← 「お客様．お客様名」の16〜30文字
			// 端末設置場所名３ ← 「お客様．お客様名」の31〜45文字
			String cust_nm = JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.CUST_NM));
			if (!"".equals(cust_nm))
			{
				outmap.setString(JBSbatKKIFM043.KEISHA_NM1, getMojiBunkatsu(cust_nm, 0, 15));
				outmap.setString(JBSbatKKIFM043.KEISHA_NM2, getMojiBunkatsu(cust_nm, 15, 30));
				outmap.setString(JBSbatKKIFM043.KEISHA_NM3, getMojiBunkatsu(cust_nm, 30, 45));
				outmap.setString(JBSbatKKIFM043.TNMT_SETPLACE_NM1, getMojiBunkatsu(cust_nm, 0, 15));
				outmap.setString(JBSbatKKIFM043.TNMT_SETPLACE_NM2, getMojiBunkatsu(cust_nm, 15, 30));
				outmap.setString(JBSbatKKIFM043.TNMT_SETPLACE_NM3, getMojiBunkatsu(cust_nm, 30, 45));
			}
			
			// 電話番号 ← 個人：連絡先の「電話番号」を設定
			outmap.setString(JBSbatKKIFM043.TELNO, JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_RRKS.TELNO)));
			
			// 端末設置場所名（カナ） ← お客様．お客様カナ名
			outmap.setString(JBSbatKKIFM043.TNMT_SETPLACE_NM_KANA, JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_CUST.CUST_KANA)));
			
			// 端末設置場所電話番号 ← 個人の場合：連絡先．TELNO
			outmap.setString(JBSbatKKIFM043.TNMT_SETPLACE_NM_TELNO, JBSbatStringUtil.Rtrim(resultMap.getString(JBSbatCK_T_RRKS.TELNO)));
			
			// 性別  ← 空白を設定
			outmap.setString(JBSbatKKIFM043.CUST_SEX_CD, SPACE);
			
			// 生年月日  ← 空白を設定
			outmap.setString(JBSbatKKIFM043.CUST_BIRTHD, SPACE);
			
			return true;
		}
		else
		{
			super.logPrint.printDebugLog("お客様＜個人＞に存在しません。SYSID：" + sys_id);
			return false;
		}
	}
	
	/**
	 * 工事案件対象宅内機器情報の設定<br>
	 * <p>
	 * @param outmap 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private void setKjakTgTkkikiInfo(JBSbatServiceInterfaceMap outmap) throws Exception
	{
		// ＳＴＢ異動区分１ ← 工事案件対象宅内機器．宅内機器異動コード
		outmap.setString(JBSbatKKIFM043.STB_IDO_CD1, SPACE);
		
		// 変更前ＳＴＢ型番号１ ← 工事案件対象宅内機器．予定宅内機器型式コード
		outmap.setString(JBSbatKKIFM043.CHBF_STB_MODEL_NO1, SPACE);
		
		// 変更前ＳＴＢＩＤ１ ← 工事案件対象宅内機器．予定ＳＴＢ−ＩＤ
		outmap.setString(JBSbatKKIFM043.CHBF_STB_ID1, SPACE);
		
		// 変更前ＨＤＤ容量コード１ ← 工事案件対象宅内機器．予定ＨＤＤ容量コード
		outmap.setString(JBSbatKKIFM043.CHBF_HDD_CAPA_CD1, SPACE);
		
		// 変更後ＨＤＤ容量コード１ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_HDD_CAPA_CD1, SPACE);
		
		// 変更前メーカーコード１ ← 工事案件対象宅内機器．予定メーカーコード
		outmap.setString(JBSbatKKIFM043.CHBF_MAKER_CD1, SPACE);
		
		// 変更後メーカーコード１ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_MAKER_CD1, SPACE);
		
		// ＳＴＢ異動区分２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.STB_IDO_CD2, SPACE);
		
		// 変更前ＳＴＢ型番号２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_MODEL_NO2, SPACE);
		
		// 変更前ＳＴＢＩＤ２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_ID2, SPACE);
		
		// 変更前ＨＤＤ容量コード２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_HDD_CAPA_CD2, SPACE);
		
		// 変更後ＨＤＤ容量コード２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_HDD_CAPA_CD2, SPACE);
		
		// 変更前メーカーコード２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_MAKER_CD2, SPACE);
		
		// 変更後メーカーコード２ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_MAKER_CD2, SPACE);
		
		// ＳＴＢ異動区分３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.STB_IDO_CD3, SPACE);
		
		// 変更前ＳＴＢ型番号３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_MODEL_NO3, SPACE);
		
		// 変更前ＳＴＢＩＤ３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_ID3, SPACE);
		
		// 変更前ＨＤＤ容量コード３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_HDD_CAPA_CD3, SPACE);
		
		// 変更後ＨＤＤ容量コード３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_HDD_CAPA_CD3, SPACE);
		
		// 変更前メーカーコード３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_MAKER_CD3, SPACE);
		
		// 変更後メーカーコード３ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_MAKER_CD3, SPACE);
		
		// ＳＴＢ異動区分４ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.STB_IDO_CD4, SPACE);
		
		// 変更前ＳＴＢ型番号４ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_MODEL_NO4, SPACE);
		
		// 変更前ＳＴＢＩＤ４ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_ID4, SPACE);
		
		// 変更前ＨＤＤ容量コード４ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_HDD_CAPA_CD4, SPACE);
		
		// 変更後ＨＤＤ容量コード４ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_HDD_CAPA_CD4, SPACE);
		
		// 変更前メーカーコード４ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_MAKER_CD4, SPACE);
		
		// 変更後メーカーコード４ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_MAKER_CD4, SPACE);
		
		// ＳＴＢ異動区分５ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.STB_IDO_CD5, SPACE);
		
		// 変更前ＳＴＢ型番号５ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_MODEL_NO5, SPACE);
		
		// 変更前ＳＴＢＩＤ５ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_STB_ID5, SPACE);
		
		// 変更前ＨＤＤ容量コード５ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_HDD_CAPA_CD5, SPACE);
		
		// 変更後ＨＤＤ容量コード５ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_HDD_CAPA_CD5, SPACE);
		
		// 変更前メーカーコード５ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHBF_MAKER_CD5, SPACE);
		
		// 変更後メーカーコード５ ← 空白を設定
		outmap.setString(JBSbatKKIFM043.CHAF_MAKER_CD5, SPACE);
	}
	
	/**
	 * 指定したインデックスの文字列を返します。<br>
	 * <p>
	 * @param str 対象文字列
	 * @param start 開始位置
	 * @param end 終了位置
	 * @return 分割した文字列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @throws IOException 
	 */	
	private String getMojiBunkatsu(String str, int start , int end) throws Exception
	{
		
		int length = str.length();
		String result = "";
		
		if (start != 0)
		{
			if (length >= end)
			{
				result = str.substring(start, end);
			}
			else if (length >= start && length <= end)
			{
				result = str.substring(start, length);
			}
			else
			{
				result = SPACE;
			}
		}
		else if (length >= start  && length >= end)
		{
			result =  str.substring(start, end);
		}
		else
		{
			result =  str.substring(start, length);
		}
		return result;
	}
	
	/**
	 * EO20G0110J0にて出力された抽出開始タイムスタンプを取得します。<br>
	 * <p>
	 * @return 抽出開始時分秒
	 * @throws JBSbatBusinessException 
	 * @throws IOException 業務サービス内で発生した例外全般。
	 */	
	private String getSearchTimeStamp() throws JBSbatBusinessException, IOException
	{
		String searhTimeStamp = "";
		
		// 読み込みファイル名取得
		String file_name = commonItem.getFreeItem();
		BufferedReader br = null;
		
		// 前回処理実行年月日時分秒保持ファイルを読み込みます。
		try
		{
			InputStreamReader is = new InputStreamReader(new FileInputStream(file_name), "Shift-JIS");
			br = new BufferedReader(is);
			
			if (br.ready())
			{
				// １行読込み
				searhTimeStamp = br.readLine();
			}
		}
		catch (IOException e)
		{
			// 前回処理実行年月日時分秒保持ファイルがない場合はエラー。
			throw new JBSbatBusinessException("EKKB0020CE", new String[]{file_name});
		}
		finally
		{
			if (null != br)
			{
				br.close();
			}
		}
		return searhTimeStamp;
	}
}
