/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKUsePlaceSvcAdUpd
*	ソースファイル名	：JBSbatKKUsePlaceSvcAdUpd.java
*	作成者				：富士通　
*	作成日				：2014年03月24日
*＜機能概要＞
*　利用場所住所サービス上書き部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v8.00.00	2014/03/25  FJ)神吉		【OM-2014-0000876】障害対応
*	v10.00.00	2014/11/16	FJ)星野		【OM-2014-0003632】障害対応
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM590;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatCK_T_CUST_KOJIN;
import eo.business.util.table.JBSbatCK_T_RRKS;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringUtil;
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.JCCBatchEsbInterface;


/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKUsePlaceSvcAdUpd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/* ++++++++++ v10.00.00 追加開始 ++++++++++ */
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";
	/** テーブル(お客様＜個人＞)*/
	private static final String D_TBL_NAME_CK_T_CUST_KOJIN = "CK_T_CUST_KOJIN";
	/** テーブル(連絡先)*/
	private static final String D_TBL_NAME_CK_T_RRKS = "CK_T_RRKS";
	
	/** SQL定義キー(KK_SELECT_020)*/
	private static final String CK_T_CUST_KK_SELECT_020 = "KK_SELECT_020";
	/** SQL定義キー(KK_SELECT_003)*/
	private static final String CK_T_RRKS_KK_SELECT_003 = "KK_SELECT_003";
	
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
	/** テーブルアクセスクラス(お客様＜個人＞)*/
	private JBSbatSQLAccess db_CK_T_CUST_KOJIN = null;
	/** テーブルアクセスクラス(連絡先)*/
	private JBSbatSQLAccess db_CK_T_RRKS = null;
	/* ++++++++++ v10.00.00 追加終了 ++++++++++ */
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/* ++++++++++ v10.00.00 追加開始 ++++++++++ */
		// DBアクセスクラスを生成します
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_CK_T_CUST_KOJIN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST_KOJIN);
		db_CK_T_RRKS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_RRKS);
		/* ++++++++++ v10.00.00 追加終了 ++++++++++ */
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		// ユースケースIDを格納するMAP
		HashMap<Object, Object>  paramMapOpn = new HashMap<Object, Object>();
		paramMapOpn.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, "KKSV0786");
		paramMapOpn.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, "KKSV0786OP");
		
		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> inputMapOpn = new HashMap<String, Object>();
		
		/** サービス契約番号（契約者利用場所住所変更情報ファイル） */
		String svcKeiNo_590 = inMap.getString(JBSbatKKIFM590.SVC_KEI_NO);
		
		/** 運用日（契約者利用場所住所変更情報ファイル） */
		String opeDate_590 = inMap.getString(JBSbatKKIFM590.OPE_DATE);
		
		/** システム日時（契約者利用場所住所変更情報ファイル） */
		String sysDtm_590 = inMap.getString(JBSbatKKIFM590.SYS_DTM);
		
		/** ＳＹＳＩＤ（契約者利用場所住所変更情報ファイル） */
		String sysId_590 = inMap.getString(JBSbatKKIFM590.SYSID);
		
		/** お客様名（契約者利用場所住所変更情報ファイル） */
		String custNm_590 = inMap.getString(JBSbatKKIFM590.CUST_NM);
		
		/** お客様カナ名（契約者利用場所住所変更情報ファイル） */
		String custKana_590 = inMap.getString(JBSbatKKIFM590.CUST_KANA);
		
		/** 契約者住所コード（契約者利用場所住所変更情報ファイル） */
		String keishaAdCd_590 = inMap.getString(JBSbatKKIFM590.KEISHA_AD_CD);
		
		/** 契約者郵便番号（契約者利用場所住所変更情報ファイル） */
		String keishaPcd_590 = inMap.getString(JBSbatKKIFM590.KEISHA_PCD);
		
		/** 契約者都道府県名（契約者利用場所住所変更情報ファイル） */
		String keishaStateNm_590 = inMap.getString(JBSbatKKIFM590.KEISHA_STATE_NM);
		
		/** 契約者市区町村名（契約者利用場所住所変更情報ファイル） */
		String keisshaCityNm_590 = inMap.getString(JBSbatKKIFM590.KEISHA_CITY_NM);
		
		/** 契約者大字通称名（契約者利用場所住所変更情報ファイル） */
		String keishaOaztsuNm_590 = inMap.getString(JBSbatKKIFM590.KEISHA_OAZTSU_NM);
		
		/** 契約者字丁目名（契約者利用場所住所変更情報ファイル） */
		String keishaAzchoNm_590 = inMap.getString(JBSbatKKIFM590.KEISHA_AZCHO_NM);
		
		/** 契約者番地号（契約者利用場所住所変更情報ファイル） */
		String keishaAdBnchigo_590 = inMap.getString(JBSbatKKIFM590.KEISHA_AD_BNCHIGO);
		
		/** 契約者住所補記・建物名（契約者利用場所住所変更情報ファイル） */
		String keishaAdrttm_590 = inMap.getString(JBSbatKKIFM590.KEISHA_ADRTTM);
		
		/** 契約者住所補記・部屋番号（契約者利用場所住所変更情報ファイル） */
		String keishaAdrrm_590 = inMap.getString(JBSbatKKIFM590.KEISHA_ADRRM);
		
		/* ++++++++++ v10.00.00 追加開始 ++++++++++ */
		String gen_tel_no;			// お客様自宅電話番号
		String cust_ktai_tel_no;	// お客様携帯電話番号
		String cust_rrks_tel_no;	// お客様連絡先電話番号
		String rrks_offc_nm;		// 連絡先勤務先名
		
		String keishaTypeCd;			// 契約者タイプコード
		
		// SYSIDを元にお客様検索
		// 利用場所住所上書きはバッチ運用日＋１日で更新しているので、それに合わせてカレントを取得
		executeCK_T_CUST_KK_SELECT_020(new Object[]{sysId_590, JBSbatDateUtil.adjustDate(super.opeDate, 1)});
		JBSbatCommonDBInterface dbInfoCust = db_CK_T_CUST.selectNext();
		if(dbInfoCust!=null)
		{
			// お客様.契約者電話番号をお客様自宅電話番号に設定（お客様情報変更に合わせる）
			gen_tel_no = dbInfoCust.getString(JBSbatCK_T_CUST.KEISHA_TELNO);
			// 契約者タイプコード取得
			keishaTypeCd = dbInfoCust.getString(JBSbatCK_T_CUST.KEISHA_TYPE_CD);
			
			String geneAddDtmCust = dbInfoCust.getString(JBSbatCK_T_CUST.GENE_ADD_DTM);
			
			// お客様<個人>PK検索
			JBSbatCommonDBInterface dbInfoKojin = executeCK_T_CUST_KOJIN_PKSELECT(new Object[]{sysId_590, geneAddDtmCust});
			if(dbInfoKojin!=null){
				// 連絡先勤務名に設定
				rrks_offc_nm = dbInfoKojin.getString(JBSbatCK_T_CUST_KOJIN.OFFC_NM);
			}else{
				rrks_offc_nm = "";
			}

			
		}else{
			gen_tel_no = "";
			rrks_offc_nm = "";
			
			keishaTypeCd = "";
		}
		
		// SYSIDを元に連絡先検索
		// 利用場所住所上書きはバッチ運用日＋１日で更新しているので、それに合わせてカレントを取得
		executeCK_T_RRKS_KK_SELECT_003(new Object[]{sysId_590, JBSbatDateUtil.adjustDate(super.opeDate, 1)});
		JBSbatCommonDBInterface dbInfoRrks = db_CK_T_RRKS.selectNext();
		String rrksTelnoKtai = "";
		String rrksTelnoEtc = "";
		while(dbInfoRrks!=null){
			String rrkWayCd = dbInfoRrks.getString(JBSbatCK_T_RRKS.RRK_WAY_CD);
			// 連絡方法コード「電話」以外は対象外
			if(!"003".equals(rrkWayCd)){
				dbInfoRrks = db_CK_T_RRKS.selectNext();
				continue;
			}
			String rrksSbtCd = dbInfoRrks.getString(JBSbatCK_T_RRKS.RRKS_SBT_CD);
			
			// 連絡先種別コード「2:携帯」
			if("2".equals(rrksSbtCd)){
				rrksTelnoKtai = dbInfoRrks.getString(JBSbatCK_T_RRKS.TELNO);
				
			// 連絡先種別コード「5:その他」
			}else if("5".equals(rrksSbtCd)){
				rrksTelnoEtc = dbInfoRrks.getString(JBSbatCK_T_RRKS.TELNO);
			}
			dbInfoRrks = db_CK_T_RRKS.selectNext();
		}
		
		
		// お客様携帯電話番号に設定
		cust_ktai_tel_no = rrksTelnoKtai;
		
		// 契約者タイプコードが法人の場合
		if("2".equals(keishaTypeCd)){
			// お客様連絡先電話番号は連絡先の「その他」から設定
			cust_rrks_tel_no = rrksTelnoEtc;
			
		// 上記以外の場合
		}else{
			// お客様連絡先電話番号はお客様.契約者電話番号を設定
			if(dbInfoCust!=null){
				cust_rrks_tel_no = dbInfoCust.getString(JBSbatCK_T_CUST.KEISHA_TELNO);
			}else{
				cust_rrks_tel_no = "";
			}
		}
		/* ++++++++++ v10.00.00 追加終了 ++++++++++ */
		
		// inputMapに設定するデータをHashMapで構築する。
		HashMap<String, Object>  dataMapOpn = new HashMap<String, Object>();
		
		dataMapOpn.put("func_code", "1");							// 機能コード
		dataMapOpn.put("key_svc_kei_no", svcKeiNo_590);				// サービス契約番号
		dataMapOpn.put("key_opedate", opeDate_590);					// 運用日
		dataMapOpn.put("key_system_dtm", sysDtm_590);				// システム日時
		dataMapOpn.put("sysid", sysId_590);							// ＳＹＳＩＤ
		dataMapOpn.put("cust_nm", custNm_590);						// お客様名
		dataMapOpn.put("cust_kana", custKana_590);					// お客様名カナ
		
		/* ++++++++++ v10.00.00 修正開始 ++++++++++ */
//		dataMapOpn.put("cust_ktai_tel_no", "");						// お客様携帯電話番号
//		dataMapOpn.put("cust_rrks_tel_no", "");						// お客様連絡先電話番号
//		dataMapOpn.put("rrks_offc_nm", "");							// 連絡先勤務先名
		
		dataMapOpn.put("gen_tel_no", JKKStringUtil.nullToBlank(gen_tel_no));					// お客様自宅電話番号
		dataMapOpn.put("cust_ktai_tel_no", JKKStringUtil.nullToBlank(cust_ktai_tel_no));		// お客様携帯電話番号
		dataMapOpn.put("cust_rrks_tel_no", JKKStringUtil.nullToBlank(cust_rrks_tel_no));		// お客様連絡先電話番号
		dataMapOpn.put("rrks_offc_nm", JKKStringUtil.nullToBlank(rrks_offc_nm));				// 連絡先勤務先名
		/* ++++++++++ v10.00.00 修正終了 ++++++++++ */
		
		dataMapOpn.put("keisha_ad_cd", keishaAdCd_590);				// 契約者住所コード
		dataMapOpn.put("keisha_pcd", keishaPcd_590);				// 契約者郵便番号
		dataMapOpn.put("keisha_state_nm", keishaStateNm_590);		// 契約者都道府県名
		dataMapOpn.put("keisha_city_nm", keisshaCityNm_590);		// 契約者市区町村名
		dataMapOpn.put("keisha_oaztsu_nm", keishaOaztsuNm_590);		// 契約者大字通称名
		dataMapOpn.put("keisha_azcho_nm", keishaAzchoNm_590);		// 契約者字丁目名
		dataMapOpn.put("keisha_ad_bnchigo", keishaAdBnchigo_590);	// 契約者番地号
		dataMapOpn.put("keisha_adrttm", keishaAdrttm_590);			// 契約者住所補記・建物名
		dataMapOpn.put("keisha_adrrm", keishaAdrrm_590);			// 契約者住所補記・部屋番号
		
		dataMapOpn.put("cust_nm_chg_flg", true);					// お客様名変更フラグ
		dataMapOpn.put("cust_kana_chg_flg", true);					// お客様名カナ変更フラグ
		dataMapOpn.put("cust_ktai_tel_no_chg_flg", false);			// お客様携帯電話番号変更フラグ
		dataMapOpn.put("cust_rrks_tel_no_chg_flg", false);			// お客様連絡先電話番号変更フラグ
		dataMapOpn.put("rrks_offc_nm_chg_flg", false);				// 連絡先勤務先名変更フラグ
		dataMapOpn.put("keisha_ad_cd_chg_flg", true);				// 契約者住所コード変更フラグ
		dataMapOpn.put("keisha_pcd_chg_flg", true);					// 契約者郵便番号変更フラグ
		dataMapOpn.put("keisha_state_nm_chg_flg", true);			// 契約者都道府県名変更フラグ
		dataMapOpn.put("keisha_city_nm_chg_flg", true);				// 契約者市区町村名変更フラグ
		dataMapOpn.put("keisha_oaztsu_nm_chg_flg", true);			// 契約者大字通称名変更フラグ
		dataMapOpn.put("keisha_azcho_nm_chg_flg", true);			// 契約者字丁目名変更フラグ
		dataMapOpn.put("keisha_ad_bnchigo_chg_flg", true);			// 契約者番地号変更フラグ
		dataMapOpn.put("keisha_adrttm_chg_flg", true);				// 契約者住所補記・建物名変更フラグ
		dataMapOpn.put("keisha_adrrm_chg_flg", true);				// 契約者住所補記・部屋番号変更フラグ
		
		inputMapOpn.put("KKSV078601CC", dataMapOpn);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// 予約フラグ
		parentMap.put("rsv_flg", false);
		
		inputMapOpn.put("CKSV0009WORK01", parentMap);

		
		// サービスの処理結果が格納されるMAP
		HashMap<Object, Object> outputMapOpn = new HashMap<Object, Object>();
		
		// サービス呼び出し
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMapOpn, inputMapOpn, outputMapOpn);
		
		// 部品からのリターンコードを取得します。
		String returnCode = (String)outputMapOpn.get("RETURN_CODE");
		super.logPrint.printDebugLog("★RETURN_CODE：" + returnCode);
		
		// サービスインターフェースよりエラーが返却された場合
		if(!"0000".equals(returnCode))
		{			
			StringBuffer sb = new StringBuffer();
			sb.append(" サービス契約番号：" +svcKeiNo_590);

			// 「サービスインターフェイスエラーの場合は、下記のログ出力する。
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
				new String[]{"お客様名変更時工事案件反映CCでエラーが発生しました(リターンコード):" + returnCode + sb.toString()});
			
			//エラーフラグ設定
			super.commonItem.setErrFlg(true);
			
			//出力情報を返却
			return new JBSbatOutputItem() ;
			}

		

		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/* ++++++++++ v10.00.00 追加開始 ++++++++++ */
		// DBアクセスクラスをクローズします
		db_CK_T_CUST.close();
		db_CK_T_CUST_KOJIN.close();
		db_CK_T_RRKS.close();
		/* ++++++++++ v10.00.00 追加終了 ++++++++++ */
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/* ++++++++++ v10.00.00 追加開始 ++++++++++ */
	/**
	 * SQLKEY(KK_SELECT_020)で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_020(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_020);
	}
	
	/**
	 * SQLKEY(KK_SELECT_003)で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_RRKS_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_RRKS.selectBySqlDefine(paramList, CK_T_RRKS_KK_SELECT_003);
	}
	
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SYSID
	 *		 	GENE_ADD_DTM
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeCK_T_CUST_KOJIN_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SYSID", whereParam[0]);
		whereMap.setValue("GENE_ADD_DTM", whereParam[1]);

		// DBアクセスを実行します
		return db_CK_T_CUST_KOJIN.selectByPrimaryKeys(whereMap);
	}
	/* ++++++++++ v10.00.00 追加終了 ++++++++++ */
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
