/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKUGenesisPidKnriInfoCst
*	ソースファイル名	：JBSbatKUGenesisPidKnriInfoCst.java
*	作成者				：富士通　
*	作成日				：2012年05月09日
*＜機能概要＞
*　ＧｅｎｅｓｉｓＰＩＤ管理情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/05/09   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKUIFE024;
import eo.business.util.table.JBSbatCK_T_MANSION_OWNR;
import eo.business.util.table.JBSbatKK_T_MANSION_BUKKEN;
import eo.business.util.table.JBSbatKK_T_OWNR_KEI;
import eo.common.constant.JKUStrConst;
import eo.common.util.JKUCommonUtil;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKUGenesisPidKnriInfoCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/**▼▼▼▼▼▼業務が作成した宣言です 開始▼▼▼▼▼▼*/

	/** ログ出力用項目名設定Map */
	private HashMap<String, String> messageMap = new HashMap<String, String>();
	
	/**▲▲▲▲▲▲業務が作成した宣言です 終了▲▲▲▲▲▲*/
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// ログ出力用項目名設定Mapを設定
		messageMap = createMessageMap();
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 単項目チェックを実行する
		if(false == isSingleCheckKK_T_OWNR_KEI_KU_SELECT_001(inMap.getMap(), messageMap))
		{
			throw new JBSbatBusinessError();
		}
		
		// ---スキーマのコード値を、Genesis向けに変換する
		
		// マンション物件コードをP-ID識別フラグに変換する
		String mansionBukkenCd = inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_CD);
		String pidSkbtFlg = JKUCommonUtil.convMansionBukkenCd(
				mansionBukkenCd, JKUStrConst.RNKI_SYSTEM_GENESIS);
				
		// ---正しく変換されたことをチェックする
		
		// P-ID識別フラグ変換チェック
		if (null == pidSkbtFlg)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKUB0180CE", new String[]{
					(String)messageMap.get("DB-KK_T_OWNR_KEI-.MANSION_BUKKEN_CD"),
					mansionBukkenCd});
			
			throw new JBSbatBusinessError();
		}
		
		// ---ファイルに項目を設定する
		
		// 出力共通電文に入出力インターフェースを設定する。
		outputBean.addOutMapList(setOutMap(inMap, pidSkbtFlg));
		
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 *入力情報（オーナー契約）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 DB-KK_T_OWNR_KEI-.PID			オーナー契約.Ｐ−ＩＤ
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKK_T_OWNR_KEI_KU_SELECT_001(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// Ｐ−ＩＤ項目チェック
		strValue = (String)rsMap.get("PID");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKUB0200TE", new String[]{
															(String)itemvalueMap.get("DB-KK_T_OWNR_KEI-.PID")});
			return false;
		}

		return true;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	/**▼▼▼▼▼▼業務チームで作成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * 項目チェックで使用するitemvalueMapを生成します。
	 * HashMap<String,String> 項目名が格納されたHashMap。
	 * @return messageMap 埋め込み文字の値。
	 */	
	private HashMap<String, String> createMessageMap()
	{
		HashMap<String, String> retMap = new HashMap<String, String>();
		
		retMap.put("DB-KK_T_OWNR_KEI-.PID", "オーナー契約.P-ID");
		retMap.put("DB-KK_T_OWNR_KEI-.MANSION_BUKKEN_CD", "マンション物件.マンション物件コード");
		
		return retMap;
	}
	
	/**
	 * 出力共通電文を設定します。
	 * @param inMap	入力電文(オーナー契約)
	 * @param pidSkbtFlg	P-ID識別フラグ
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMap(JBSbatServiceInterfaceMap inMap, String pidSkbtFlg) throws Exception
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 出力フラグを設定
		outMap.setOutFlg(true);	
		
		// P-ID識別フラグ
		outMap.setString(JBSbatKUIFE024.PID_SKBT_FLG, pidSkbtFlg);
		// とりまとめID
		outMap.setString(JBSbatKUIFE024.TORIMATOME_ID, inMap.getString(JBSbatKK_T_OWNR_KEI.PID));
		// 適用開始日(nullの場合は登録年月日時分秒の年月日部分を設定)
		String tstymd = inMap.getString(JBSbatKK_T_OWNR_KEI.SVC_STAYMD);
		if("".equals(tstymd) || tstymd == null)
		{
			String addymd = inMap.getString(JBSbatKK_T_OWNR_KEI.ADD_DTM).substring(0, 8);
			outMap.setString(JBSbatKUIFE024.TSTAYMD, addymd);
		}
		else
		{
			outMap.setString(JBSbatKUIFE024.TSTAYMD, inMap.getString(JBSbatKK_T_OWNR_KEI.SVC_STAYMD));
		}
		// 適用終了日(nullの場合は"20991231"固定)
		String tendymd = inMap.getString(JBSbatKK_T_OWNR_KEI.SVC_ENDYMD);
		if("".equals(tendymd) || tendymd == null)
		{
			outMap.setString(JBSbatKUIFE024.TENDYMD, JKUStrConst.MAX_YMD);
		}
		else
		{
			outMap.setString(JBSbatKUIFE024.TENDYMD, inMap.getString(JBSbatKK_T_OWNR_KEI.SVC_ENDYMD));
		}
		// 建物名漢字
		outMap.setString(JBSbatKUIFE024.TTM_KANJI, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_NM));
		// 建物名カナ
		outMap.setString(JBSbatKUIFE024.TTM_KANA, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_KANA));
		// 契約者タイプ
		outMap.setString(JBSbatKUIFE024.KEISHA_TYPE, null);
		// 契約者名
		outMap.setString(JBSbatKUIFE024.KEISHA_NM, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_NM));
		// 契約者名カナ
		outMap.setString(JBSbatKUIFE024.KEISHA_KANA, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_KANA));
		// 契約者住所コード
		outMap.setString(JBSbatKUIFE024.KEISHA_AD_CD, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_AD_CD));
		// 契約者郵便番号
		outMap.setString(JBSbatKUIFE024.KEISHA_PCD, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_PCD));
		// 契約者都道府県
		outMap.setString(JBSbatKUIFE024.KEISHA_STATE, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_STATE_FSTNM));
		// 契約者市区町村
		outMap.setString(JBSbatKUIFE024.KEISHA_CITY, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_CITY_FSTNM));
		// 契約者大字通称名
		outMap.setString(JBSbatKUIFE024.KEISHA_OAZTSU, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_OAZTSU_FSTNM));
		// 契約者字丁目名
		outMap.setString(JBSbatKUIFE024.KEISHA_AZCHO, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_AZCHO_FSTNM));
		// 契約者住所番地号
		outMap.setString(JBSbatKUIFE024.KEISHA_BNCHIGO, inMap.getString(JBSbatCK_T_MANSION_OWNR.MANSION_OWNR_BNCHIGO));
		// 総棟数
		outMap.setString(JBSbatKUIFE024.TTL_TOU_CNT, inMap.get(JBSbatKK_T_MANSION_BUKKEN.TTL_TOU_CNT));
		// 総戸数
		outMap.setString(JBSbatKUIFE024.TTL_KOSU, inMap.get(JBSbatKK_T_MANSION_BUKKEN.KOSU));
		// P-IDメモ
		outMap.setString(JBSbatKUIFE024.PID_MEMO, inMap.getString(JBSbatKK_T_OWNR_KEI.PID_MEMO));
		// 建物住所コード
		outMap.setString(JBSbatKUIFE024.TTM_AD_CD, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_AD_CD));
		// 建物郵便番号
		outMap.setString(JBSbatKUIFE024.TTM_PCD, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_PCD));
		// 建物都道府県
		outMap.setString(JBSbatKUIFE024.TTM_STATE, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_STATE_NM));
		// 建物市区町村
		outMap.setString(JBSbatKUIFE024.TTM_CITY, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_CITY_NM));
		// 建物大字通称名
		outMap.setString(JBSbatKUIFE024.TTM_OAZTSU, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANS_BUKKEN_OAZTSU_NM));
		// 建物字丁目名
		outMap.setString(JBSbatKUIFE024.TTM_AZCHO, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_AZCHO_NM));
		// 建物住所番地号
		outMap.setString(JBSbatKUIFE024.TTM_BNCHIGO, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_BNCHIGO));
		// 建物住所補記･建物名
		outMap.setString(JBSbatKUIFE024.TTM_ADRTTM, inMap.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_NM));
		
		return outMap;
	}
	/**▲▲▲▲▲▲業務チームで作成したメソッドです 終了▲▲▲▲▲▲*/
}
