/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKAdHenkoHoyuDataUpdOtr
*	ソースファイル名	：JBSbatKKAdHenkoHoyuDataUpdOtr.java
*	作成者				：富士通　
*	作成日				：2012年09月01日
*＜機能概要＞
*　住所マスタ最新レコードデータ抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00    2012/09/01  富士通	    新規作成
*	v45.00.00	2019/09/02	FJ)謝		【ANK-3689-00-00】住所統廃合処理改善対応
*	v47.00.00	2019/12/26	FJ)謝		【OM-2019-0001393】障害対応
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.common.JZMBatCommon;
import eo.business.util.table.JBSbatKK_T_CHG_AD_JGRTWK;
import eo.business.util.table.JBSbatZM_M_AD;
import eo.common.constant.JPCStrConst;
import eo.common.util.JPCAdCommonCheckUtil;
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 JBSbatKKAdHenkoHoyuDataUpdOtr extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	///** テーブル(問合せ客)*/
	private static final String PROSCST_SKEMA_ID = "CK0051";
	///** テーブル(予備機器配送)*/
	private static final String YBKIKI_HAISO_SKEMA_ID = "DK0061";
	///** テーブル(先行設計)*/
	private static final String SENKO_DSGN_SKEMA_ID = "KU0101";

	/** テーブルアクセスクラス*/
	private JBSbatSQLAccess db_CHG_AD_JGRTWK = null;
	private JBSbatSQLAccess db_CK_T_PROSCST = null;
	private JBSbatSQLAccess db_DK_T_YBKIKI_HAISO = null;
	private JBSbatSQLAccess db_KU_T_SENKO_DSGN = null;
// OM-2019-0001393 ADD START
	/** SQL定義キー(KK_SELECT_012)*/
	private static final String ZM_M_AD_KK_SELECT_012 = "KK_SELECT_012";
	/** テーブルアクセスクラス(住所)*/
	private JBSbatSQLAccess db_ZM_M_AD = null;
// OM-2019-0001393 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
// OM-2019-0001393 ADD START
	/** 変更前住所リスト*/
	private HashMap<String, JBSbatCommonDBInterface> adBfList = null;
// OM-2019-0001393 ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスを生成します
		db_CHG_AD_JGRTWK = new JBSbatSQLAccess(commonItem, "KK_T_CHG_AD_JGRTWK");
		db_CK_T_PROSCST = new JBSbatSQLAccess(commonItem, "CK_T_PROSCST");
		db_DK_T_YBKIKI_HAISO = new JBSbatSQLAccess(commonItem, "DK_T_YBKIKI_HAISO");
		db_KU_T_SENKO_DSGN = new JBSbatSQLAccess(commonItem, "KU_T_SENKO_DSGN");
// OM-2019-0001393 ADD START
		db_ZM_M_AD = new JBSbatSQLAccess(commonItem, "ZM_M_AD");
// OM-2019-0001393 ADD END

		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
// OM-2019-0001393 ADD START
		adBfList = new HashMap<String, JBSbatCommonDBInterface>();
// OM-2019-0001393 ADD END
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{

	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		String strChgAdJgrtwkNo = JZMBatCommon.getInMapData(inMap, "CHG_AD_JGRTWK_NO");
		String strSkemaId = JZMBatCommon.getInMapData(inMap, "CHG_TG_SCHEMA_ID");
		String strItemName = JZMBatCommon.getInMapData(inMap, "CHG_TG_KMK_NM_EINM").trim();
// ANK-3689-00-00 ADD START
		// 郵便番号
		String pcd = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.PCD));
		// 都道府県名
		String stateNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.STATE_NM));
		// 市区町村名
		String cityNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.CITY_NM));
		// 大字通称名
		String oaztsuNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OAZTSU_NM));
		// 字丁目名
		String azchoNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AZCHO_NM));
		// 旧郵便番号
		String oldPcd = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OLD_PCD));
		// 旧都道府県名
		String oldStateNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OLD_STATE_NM));
		// 旧市区町村名
		String oldCityNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OLD_CITY_NM));
		// 旧大字通称名
		String oldOaztsuNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OLD_OAZTSU_NM));
		// 旧字丁目名
		String oldAzchoNm = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OLD_AZCHO_NM));
// ANK-3689-00-00 ADD END
// OM-2019-0001393 ADD START
		// 住所コード
		String adCd = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AD_CD));
		// 新住所コード
		String newAdCd = getNullToStr(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AD_CD));
		// 住所コードが新住所コードと一致する場合
		if (adCd.equals(newAdCd))
		{
			JBSbatCommonDBInterface adMap = null;
			
			if (adBfList.containsKey(adCd))
			{
				adMap = adBfList.get(adCd);
			}
			else
			{
				// 住所マスタより一世代前のレコードを取得する
				String [] whereParam = {adCd};
				executeZM_M_AD_KK_SELECT_012(whereParam);
				adMap = db_ZM_M_AD.selectNext();
				adBfList.put(adCd, adMap);
			}
			
			if (adMap != null)
			{
				// 郵便番号
				pcd = getNullToStr(adMap.getString(JBSbatZM_M_AD.PCD));
				// 都道府県名
				stateNm = getNullToStr(adMap.getString(JBSbatZM_M_AD.STATE_NM));
				// 市区町村名
				cityNm = getNullToStr(adMap.getString(JBSbatZM_M_AD.CITY_NM));
				// 大字通称名
				oaztsuNm = getNullToStr(adMap.getString(JBSbatZM_M_AD.OAZTSU_NM));
				// 字丁目名
				azchoNm = getNullToStr(adMap.getString(JBSbatZM_M_AD.AZCHO_NM));
			}
		}
// OM-2019-0001393 ADD END

		// 住所チェック
		HashMap<String,Object> ad61MojiChkMap = JPCAdCommonCheckUtil.ad61MojiChk(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AD_CD), 
				inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.PCD),
				"0",
				inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.STATE_NM),
				inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.CITY_NM),
				inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OAZTSU_NM),
				inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AZCHO_NM),
				inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OLD_BNCHIGO),
				"",
				"");
		
		// 変更対象住所一覧ワークの処理ステータスの更新
		if (!(Boolean)ad61MojiChkMap.get(JPCStrConst.ad61MojiChk)) {
			// 変更対象住所一覧ワークの処理ステータスの更新
			//パラメタを設定（SET句）
			JBSbatCommonDBInterface valueMap = new JBSbatCommonDBInterface ();
			valueMap. setValue("AD_TOHAIGO_TRN_STAT_CD", JKKBatConst.HENKO_ADD_CD_ZM);

			//パラメタを設定（WHERE句）
			JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface ();
			whereMap. setValue("CHG_AD_JGRTWK_NO", strChgAdJgrtwkNo);

			//UPDATE文を実行する。
			db_CHG_AD_JGRTWK.updateByPrimaryKeys(whereMap, valueMap);
			
			return null;
		}

// ANK-3689-00-00 ADD START
		// 郵便番号、都道府県、市区町村、大字通称名、字丁目名のいずれかが不一致の場合
		if (!pcd.equals(oldPcd)
				|| !stateNm.equals(oldStateNm)
				|| !cityNm.equals(oldCityNm)
				|| !oaztsuNm.equals(oldOaztsuNm)
				|| !azchoNm.equals(oldAzchoNm))
		{
			// 変更対象住所一覧ワークの処理ステータスの更新
			// パラメタを設定（SET句）
			JBSbatCommonDBInterface valueMap = new JBSbatCommonDBInterface ();
			// 住所統廃合処理状態コード：処理完了
			valueMap. setValue("AD_TOHAIGO_TRN_STAT_CD", JKKBatConst.HENKO_ADD_CD_ZM);

			// パラメタを設定（WHERE句）
			JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface ();
			whereMap. setValue("CHG_AD_JGRTWK_NO", strChgAdJgrtwkNo);

			// UPDATE文を実行する。
			db_CHG_AD_JGRTWK.updateByPrimaryKeys(whereMap, valueMap);
			
			return null;
		}
// ANK-3689-00-00 ADD END

		// 問合せ客
		if (strSkemaId.equals(PROSCST_SKEMA_ID)) {
			// 問合せ客(問合せ客住所コード)
			if (strItemName.equals("PROSCST_AD_CD")) {
				// パラメタを設定する
				JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
				if (null == inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AD_CD)) {
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AD_CD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.PCD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.STATE_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.CITY_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OAZTSU_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AZCHO_NM));
				} else {
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AD_CD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_PCD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_STATE_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_CITY_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_OAZTSU_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AZCHO_NM));
				}
				dbList. setValue(JZMBatCommon.getInMapData(inMap, "PROSCST_NO"));

				//UPDATE文を実行する。
				db_CK_T_PROSCST.executeBySqlDefine(dbList,"KK_UPDATE_002");
			}
		}
		
		
		// 予備機器配送
		if (strSkemaId.equals(YBKIKI_HAISO_SKEMA_ID)) {
			// 予備機器配送(予備機器配送先住所コード)
			if (strItemName.equals("YBKIKI_HISOS_AD_CD")) {
				// パラメタを設定する
				JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
				if (null == inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AD_CD)) {
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AD_CD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.PCD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.STATE_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.CITY_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OAZTSU_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AZCHO_NM));
				} else {
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AD_CD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_PCD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_STATE_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_CITY_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_OAZTSU_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AZCHO_NM));
				}
				dbList. setValue(JZMBatCommon.getInMapData(inMap, "YBKIKI_HAISO_NO"));

				//UPDATE文を実行する。
				db_DK_T_YBKIKI_HAISO.executeBySqlDefine(dbList,"KK_UPDATE_001");
			}
		}
		
		
		// 先行設計
		if (strSkemaId.equals(SENKO_DSGN_SKEMA_ID)) {
			// 先行設計(設置場所住所コード)
			if (strItemName.equals("SETPLACE_AD_CD")) {
				// パラメタを設定する
				JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
				if (null == inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AD_CD)) {
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AD_CD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.PCD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.STATE_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.CITY_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.OAZTSU_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.AZCHO_NM));
				} else {
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AD_CD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_PCD));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_STATE_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_CITY_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_OAZTSU_NM));
					dbList. setValue(inMap.getString(JBSbatKK_T_CHG_AD_JGRTWK.NEW_AZCHO_NM));
				}
				dbList. setValue(JZMBatCommon.getInMapData(inMap, "SNKSKI_NO"));

				//UPDATE文を実行する。
				db_KU_T_SENKO_DSGN.executeBySqlDefine(dbList,"KK_UPDATE_001");

			}
		}

		// 変更対象住所一覧ワークの処理ステータスの更新
		//パラメタを設定（SET句）
		JBSbatCommonDBInterface valueMap = new JBSbatCommonDBInterface ();
		valueMap. setValue("AD_TOHAIGO_TRN_STAT_CD", JKKBatConst.HENKO_ADD_CD_ZM);

		//パラメタを設定（WHERE句）
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface ();
		whereMap. setValue("CHG_AD_JGRTWK_NO", strChgAdJgrtwkNo);

		//UPDATE文を実行する。
		db_CHG_AD_JGRTWK.updateByPrimaryKeys(whereMap, valueMap);

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
		
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CHG_AD_JGRTWK.close();
		db_CK_T_PROSCST.close();
		db_DK_T_YBKIKI_HAISO.close();
		db_KU_T_SENKO_DSGN.close();
// OM-2019-0001393 ADD START
		db_ZM_M_AD.close();
// OM-2019-0001393 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

// OM-2019-0001393 ADD START
	/**
	 * SQLKEY(KK_SELECT_012)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	住所コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_AD_KK_SELECT_012(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_AD.selectBySqlDefine(paramList, ZM_M_AD_KK_SELECT_012);
	}
// OM-2019-0001393 ADD END
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
// ANK-3689-00-00 ADD START
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}
// ANK-3689-00-00 ADD END
}
