/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名			：JBSbatKKTkKeiKjFinJiRzkazmBknInfHanei
*	ソースファイル名		：JBSbatKKTkKeiKjFinJiRzkazmBknInfHanei.java
*	作成者			：GDC)J.Hortilano
*	作成日			：2021年09月10日
*＜機能概要＞
*　撤去系工事完了時ローゼット化済物件情報反映
*＜修正履歴＞
*	バージョン		修正日		修正者			修正内容
*  v56.00.00    2021/09/20  GDC)J.Hortilano     【ANK-4038-00-00】光ローゼット化対応
*
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.table.JBSbatKK_T_KJ_FIN_WK;
import eo.business.util.table.JBSbatKK_T_RZKAZM_BKNAD_IF;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.common.constant.JACStrConst;
import eo.common.constant.JKKStrConst;
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;

/**
 * 撤去系工事完了時ローゼット化済物件情報反映
 * @author j.hortilano
 *
 */
public class JBSbatKKTkKeiKjFinJiRzkazmBknInfHanei extends JBSbatBusinessService {
	
	/** 工事完了ワーク */
	private static final String D_TBL_NAME_KK_T_KJ_FIN_WK = "KK_T_KJ_FIN_WK";
	
	/** サービス契約回線内訳 */
	private static final String D_TBL_NAME_KK_T_SVKEI_KAISEN_UW = "KK_T_SVKEI_KAISEN_UW";
	
	/** ローゼット化済物件住所情報 */
	private static final String D_TBL_NAME_KK_T_RZKAZM_BKNAD_IF = "KK_T_RZKAZM_BKNAD_IF";
	
	/** SQL定義キー(KK_SELECT_037)*/
	private static final String KK_T_KJ_FIN_WK_KK_SELECT_037 = "KK_SELECT_037";
	
	/** SQL定義キー(KK_SELECT_062)*/
	private static final String KK_T_SVKEI_KAISEN_UW_KK_SELECT_062 = "KK_SELECT_062";
	
	/** テーブルアクセスクラス(工事完了ワーク)*/
	private JBSbatSQLAccess db_KK_T_KJ_FIN_WK = null;
	
	/** テーブルアクセスクラス(サービス契約回線内訳)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_KAISEN_UW = null;
	
	/** テーブルアクセスクラス(ローゼット化済物件住所情報)*/
	private JBSbatSQLAccess db_KK_T_RZKAZM_BKNAD_IF = null;
	
	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception 
	{
		
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		super.logPrint.printDebugLog("[S][initial]");
		
		// DBアクセスクラスを生成します
		db_KK_T_KJ_FIN_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KJ_FIN_WK);
		db_KK_T_SVKEI_KAISEN_UW = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_KAISEN_UW);
		db_KK_T_RZKAZM_BKNAD_IF = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_RZKAZM_BKNAD_IF);
		
		super.logPrint.printDebugLog("[E][initial]");
	}
	
	
	/** 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public JBSbatOutputItem execute() throws Exception
	{
		
		String systemDate = JCCBatCommon.getSysDateTimeStamp();
		
		super.logPrint.printDebugLog("[S][execute] [systemDate=" + systemDate + "]");
		
		String updTrgtKojiakNo = "";
		String svcKeiKaisenUcwkNo = "";
		
		String kaisenPlaceNo = "";
		String kaisenPlaceStateNm = "";
		String kaisenPlaceCityNm = "";
		String kaisenPlaceOaztsuNm = "";
		String kaisenPlaceAzchoNm = "";
		String kaisenPlaceBnchigo = "";
		String kaisenPlaceAdrttm = "";
		String kaisenPlaceAdrrm = "";
		String rozettStcStatCd = "";
		
		
		// "(1)下記の順でSQLを実行し、ローゼット化済のネット系撤去工事の回線情報を取得する。"
		// SQLの実行結果が取得できなかった場合は、処理を終了する。
		JBSbatCommonDBInterface outKK_T_KJ_FIN_WK_KK_SELECT_037DbMap = null;
		JBSbatCommonDBInterface outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap = null;
		JBSbatCommonDBInterface outKK_T_RZKAZM_BKNAD_IF_SELECT_byPKDbMap = null;
		
		// (1-1)SQL定義（KK_T_KJ_FIN_WK-KK_SELECT037）を実行
		executeKK_T_KJ_FIN_WK_KK_SELECT_037();
		outKK_T_KJ_FIN_WK_KK_SELECT_037DbMap = db_KK_T_KJ_FIN_WK.selectNext();
		
		
		ArrayList<String> cacheList = new ArrayList();
		
		while(null != outKK_T_KJ_FIN_WK_KK_SELECT_037DbMap)
		{
			updTrgtKojiakNo = outKK_T_KJ_FIN_WK_KK_SELECT_037DbMap.getString(JBSbatKU_T_KOJIAK.UPD_TRGT_KOJIAK_NO);
			svcKeiKaisenUcwkNo = outKK_T_KJ_FIN_WK_KK_SELECT_037DbMap.getString(JBSbatKK_T_KJ_FIN_WK.SVC_KEI_KAISEN_UCWK_NO);
			
			
			if (null != svcKeiKaisenUcwkNo && !JACStrConst.KARA_MOJI.equals(svcKeiKaisenUcwkNo))
			{
				// (1-2)SQL定義（KK_T_SVKEI_KAISEN_UW-KK_SELECT_062）を実行
				executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_062(svcKeiKaisenUcwkNo);
				outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap = db_KK_T_SVKEI_KAISEN_UW.selectNext();
				
				while (null != outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap)
				{
					kaisenPlaceNo = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_NO);
					kaisenPlaceStateNm = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM);
					kaisenPlaceCityNm = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM);
					kaisenPlaceOaztsuNm = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM);
					kaisenPlaceAzchoNm = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM);
					kaisenPlaceBnchigo = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO);
					kaisenPlaceAdrttm = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM);
					kaisenPlaceAdrrm = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM);
					rozettStcStatCd = outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.ROZETT_STC_STAT_CD);
					
					
					if (null != kaisenPlaceNo && !JACStrConst.KARA_MOJI.equals(kaisenPlaceNo))
					{								
						//(2)SQL定義（KK_T_RZKAZM_BKNAD_IF-ＰＫ　検索）を実行する。
						outKK_T_RZKAZM_BKNAD_IF_SELECT_byPKDbMap = executeKK_T_RZKAZM_BKNAD_IF_SELECT_byPK(kaisenPlaceNo);
						
						// (3)ローゼット設置状態コード = "1"（設置済）の場合、ローゼット化済物件住所情報に登録を行う。
						// その際、今回登録対象の場所番号を、今まで登録した（キャッシュした）場所番号と比較すること。
						// a)同一場所番号が存在する場合、処理を終了する。
						// b)存在しない場合、SQL定義（KK_T_RZKAZM_BKNAD_IF-全項目登録）を実行し、ローゼット化済物件住所情報に登録を行う。
						// 登録処理後、今回登録対象の場所番号をキャッシュする。		
						
						boolean result = cacheList.contains(kaisenPlaceNo);
						
						// a)同一場所番号が存在する場合、処理を終了する。
						if (result) {
							outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap = db_KK_T_SVKEI_KAISEN_UW.selectNext();
							continue;
						}
						
						if (null != outKK_T_RZKAZM_BKNAD_IF_SELECT_byPKDbMap)
						{
							//a)SQLの実行結果が取得できた場合	
							// ローゼット化物件住所情報から物理削除を行う。
							executeKK_T_RZKAZM_BKNAD_IF_DELETE_byPK(kaisenPlaceNo);
						}
						
						// ローゼット設置状態コード = "1"（設置済）の場合、ローゼット化済物件住所情報に登録を行う。
						if (JKKStrConst.ROZETT_STATUS_CD_INSTALLED.equals(rozettStcStatCd))
						{
							// b)存在しない場合、SQL定義（KK_T_RZKAZM_BKNAD_IF-全項目登録）を実行し、ローゼット化済物件住所情報に登録を行う。
							executeKK_T_RZKAZM_BKNAD_IF_INSERT_byPK(
									kaisenPlaceNo,
									kaisenPlaceStateNm,
									kaisenPlaceCityNm,
									kaisenPlaceOaztsuNm,
									kaisenPlaceAzchoNm,
									kaisenPlaceBnchigo,
									kaisenPlaceAdrttm,
									kaisenPlaceAdrrm,
									updTrgtKojiakNo);
						}
						
						// 登録処理後、今回登録対象の場所番号をキャッシュする。
						cacheList.add(kaisenPlaceNo);
					}
					
					outKK_T_SVKEI_KAISEN_UW_KK_SELECT_062DbMap = db_KK_T_SVKEI_KAISEN_UW.selectNext();
				}
			}
			
			outKK_T_KJ_FIN_WK_KK_SELECT_037DbMap = db_KK_T_KJ_FIN_WK.selectNext();
		}
		
		
		super.logPrint.printDebugLog("[E][execute]");
		
		return null;
	}
	
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception 同一サービス契約回線内訳番号が存在する場合、1秒後に登録処理を実行する。
	 */
	public void terminal() throws Exception 
	{	
		super.logPrint.printDebugLog("[S][terminal]");
		
		// DBアクセスクラスをクローズします
		if (db_KK_T_KJ_FIN_WK != null)
		{
			db_KK_T_KJ_FIN_WK.close();
		}
		
		if (db_KK_T_SVKEI_KAISEN_UW != null)
		{
			db_KK_T_SVKEI_KAISEN_UW.close();
		}
		
		if (db_KK_T_RZKAZM_BKNAD_IF != null)
		{
			db_KK_T_RZKAZM_BKNAD_IF.close();
		}
		
		super.logPrint.printDebugLog("[E][terminal]");
	}
	
	
	/**
	 * 当日ローゼット化済のネット系撤去工事が完了したサービス契約回線内訳番号と更新対象工事案件番号を取得する。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KJ_FIN_WK_KK_SELECT_037() throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		super.logPrint.printDebugLog("[L][paramList=" + paramList.getMap().toString() + "]");
		
		// DBアクセスを実行します
		db_KK_T_KJ_FIN_WK.selectBySqlDefine(paramList, KK_T_KJ_FIN_WK_KK_SELECT_037);
	}
	
	
	/**
	 * ローゼット化済のネット系撤去工事の回線情報を取得する。
	 * @param mskmNo 申込番号
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_062(String svcKeiKaisenUcwkNo) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(svcKeiKaisenUcwkNo);
		
		super.logPrint.printDebugLog("[L][paramList=" + paramList.getMap().toString() + "]");
		
		// DBアクセスを実行します
		db_KK_T_SVKEI_KAISEN_UW.selectBySqlDefine(paramList, KK_T_SVKEI_KAISEN_UW_KK_SELECT_062);
	}
	
	
	/**
	 * 登録対象の場所番号の登録情報を取得する。
	 * @param kaisenPlaceNo 回線場所番号
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_RZKAZM_BKNAD_IF_SELECT_byPK(String kaisenPlaceNo) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.PLACE_NO, kaisenPlaceNo);
		
		super.logPrint.printDebugLog("[L][paramList=" + paramList.getMap().toString() + "]");
		
		// DBアクセスを実行します
		return db_KK_T_RZKAZM_BKNAD_IF.selectByPrimaryKeys(paramList);
	}
	
	
	/**
	 * 登録対象の場所番号がすでに登録済みの場合、登録情報を物理削除する。
	 * @param kaisenPlaceNo 回線場所番号
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_RZKAZM_BKNAD_IF_DELETE_byPK(String kaisenPlaceNo) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.PLACE_NO, kaisenPlaceNo);
		
		super.logPrint.printDebugLog("[L][paramList=" + paramList.getMap().toString() + "]");
		
		// DBアクセスを実行します
		db_KK_T_RZKAZM_BKNAD_IF.deleteByPrimaryKeys(paramList);
	}
	
	
	/**
	 * 登録対象の場所番号の情報をローゼット化済物件住所情報に登録を行う。
	 * @param kaisenPlaceNo 回線場所番号
	 * @param kaisenPlaceStateNm 回線場所都道府県名
	 * @param kaisenPlaceCityNm 回線場所市区町村名
	 * @param kaisenPlaceOaztsuNm 回線場所大字通称名
	 * @param kaisenPlaceAzchoNm 回線場所字丁目名
	 * @param kaisenPlaceBnchigo 回線場所番地号
	 * @param kaisenPlaceAdrttm 回線場所住所補記・建物名
	 * @param kaisenPlaceAdrrm 回線場所住所補記・部屋番号
	 * @param updTrgtKojiakNo 更新対象工事案件番号
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_RZKAZM_BKNAD_IF_INSERT_byPK(
			String kaisenPlaceNo, 
			String kaisenPlaceStateNm, 
			String kaisenPlaceCityNm, 
			String kaisenPlaceOaztsuNm, 
			String kaisenPlaceAzchoNm, 
			String kaisenPlaceBnchigo,
			String kaisenPlaceAdrttm,
			String kaisenPlaceAdrrm,
			String updTrgtKojiakNo) throws Exception
	{	
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.PLACE_NO, kaisenPlaceNo);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KAISEN_PLACE_STATE_NM, kaisenPlaceStateNm);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KAISEN_PLACE_CITY_NM, kaisenPlaceCityNm);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KAISEN_PLACE_OAZTSU_NM, kaisenPlaceOaztsuNm);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KAISEN_PLACE_AZCHO_NM, kaisenPlaceAzchoNm);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KAISEN_PLACE_BNCHIGO, kaisenPlaceBnchigo);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KAISEN_PLACE_ADRTTM, kaisenPlaceAdrttm);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KAISEN_PLACE_ADRRM, kaisenPlaceAdrrm);
		setMap.setValue(JBSbatKK_T_RZKAZM_BKNAD_IF.KOJIAK_NO, updTrgtKojiakNo);
		
		super.logPrint.printDebugLog("[L][setMap=" + setMap.getMap().toString() + "]");
		
		// DBアクセスを実行します
		db_KK_T_RZKAZM_BKNAD_IF.insertByPrimaryKeys(setMap);
	}
}
