/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKGetKsCtrlDataMans
*	ソースファイル名	：JBSbatKKGetKsCtrlDataMans.java
*	作成者				：富士通　
*	作成日				：2011年08月25日
*＜機能概要＞
*　監視制御データ抽出（マンション情報）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2011/08/25   富士通		新規作成
*	v1.01		2012/02/19	FJ）藤原	ST1-2012-0000006~9
*	v2.00		2012/03/29	FJ）伊藤	IT1-2012-0000346
*	v4.00		2013/02/07	FJ）鷲塚	IT1-2013-0000212 マンション通信設備コード、提供設備帯域種別コード変換対応
*	v4.01		2013/03/10	FJ) 鷲塚	KT1-2013-0000333 適用終了日について設定
*	v4.02		2013/03/12	FJ) 鷲塚	KT1-2013-0000343 ペアID対応
*	v53.00		2021/04/07	FJ) 上村	ANK-3989-00-00_マンション光コンセント方式への5G・10Gコース追加
*	v53.01		2021/04/07	FJ) 上村	ANK-4031-00-00_【eo】KOSMOS連携の処理見直し
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFE161;
import eo.business.util.file.JBSbatKKIFM420;
import eo.business.util.table.JBSbatKK_T_TK_HOSHIKI_KEI;
import eo.business.util.table.JBSbatKK_T_KAISEN_USE_KEI;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
* 監視制御データ抽出（マンション情報）<BR>
* <BR>
* 監視制御システムに連携するマンション情報を抽出し、外部用マンション情報送信ファイルを生成する。<BR>
* 対象は、提供方式契約情報のデータ全件とする。<BR>
* ただし、マンションIDがNULLのデータは抽出対象外とする。<BR>
*<BR>
* @author 富士通
*/
public class JBSbatKKGetKsCtrlDataMans extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	// IT1-2013-0000212 2013/02/07 ADD START
	/**
	 * マンション通信設備コード
	 **/
	/** 01: ＶＤＳＬ */
	private static final String MANS_TUSHIN_EQUIP_CD_VDSL = "01";
	/** 02: イーサ */
	private static final String MANS_TUSHIN_EQUIP_CD_ETH = "02";
	/** 03: 光回線 */
	private static final String MANS_TUSHIN_EQUIP_CD_HIKARI = "03";

	/**
	 * 変換後マンション通信設備コード
	 **/
	/** 01: ＶＤＳＬ（１００Ｍ） */
	private static final String CHAF_MANS_TUSHIN_EQUIP_CD_VDSL = "31";
	/** 02: イーサネット（１００Ｍ） */
	private static final String CHAF_MANS_TUSHIN_EQUIP_CD_ETHERNET = "11";
	/** 03: ＯＮＵ */
	private static final String CHAF_MANS_TUSHIN_EQUIP_CD_ONU = "50";

	/**
	 * 提供設備帯域種別コード
	 **/
	/** 005: １０Ｍ/１０Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_10M_10M = "005";
	/** 001: １００Ｍ/３５Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_100M_35M = "001";
	/** 006: １００Ｍ/１００Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_100M_100M = "006";
	/** 007: １Ｇ/１Ｇ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_1G_1G = "007";
	/** 004: ２８Ｍ/２８Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_28M_28M = "004";
	/** 003: ５１Ｍ/６Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_51M_6M = "003";
	/** 002: ７０Ｍ/３０Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_70M_30M = "002";
	//ANK-3989-00-00 ADD START
	/** 008: ５Ｇ/５Ｇ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_5G_5G = "008";
	/** 009: １０Ｇ/１０Ｇ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_10G_10G = "009";
	//ANK-3989-00-00 ADD END

	/**
	 * 変換後提供設備帯域種別コード
	 **/
	/** 0: １０Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_10M = "0";
	/** 1: １００Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_100M = "1";
	/** 2: １Ｇ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_1G = "2";
	/** 3: ２８Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_28M = "3";
	/** 4: ５１Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_51M = "4";
	/** 5: ７０Ｍ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_70M = "5";
	// IT1-2013-0000212 2013/02/07 ADD END
	//ANK-3989-00-00 ADD START
	/** 6: ５Ｇ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_5G = "6";
	/** 7: １０Ｇ */
	private static final String TK_EQUIP_TAIIKI_SBT_CD_10G = "7";
	//ANK-3989-00-00 ADD END
	
	/** マンションID(退避用) */
	private String mansionID_Before = "";
	/** マンション情報Map(退避用) */
	private HashMap<String, String> mansionIDMap = null;

	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
		this.mansionIDMap = new HashMap<String, String>();
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		//1つ目レコードをmapに入れる→return null
		if(this.mansionIDMap.get(JBSbatKKIFM420.MANSION_ID) == null)
		{
			this.mansionIDMap = inMap.getMap();
			return null;
		}
		
		mansionID_Before = mansionIDMap.get(JBSbatKKIFM420.MANSION_ID);
		String mansionID = inMap.getString(JBSbatKKIFM420.MANSION_ID);
		
		//マンションIDの場合
		if(mansionID_Before.equals(mansionID))
		{
			//1つ目と2つ目をmansionIDで比較し同じならマージ
			mansionIDMap.put(JBSbatKKIFE161.TK_EQUIP_SBT_CD2,
					inMap.getString(JBSbatKKIFM420.TK_HOSHIKI_PATTERN_CD));			//提供設備種別コード2
			mansionIDMap.put(JBSbatKKIFE161.TK_EQUIP_TAIIKI_SBT_CD2,
					inMap.getString(JBSbatKKIFM420.TONAI_SPEED_CD));				// 提供設備帯域種別コード2
			//マージしたものを出力
			this.setFileMap(mansionIDMap, outputBean);
			//mapの中身をクリア
			this.mansionIDMap = new HashMap<String, String>();
		}
		else
		{
			//異なれば1つ目を出力する
			this.setFileMap(mansionIDMap, outputBean);
			//2つ目を1つ目に入れる
			this.mansionIDMap = inMap.getMap();
		}
		
		// KT1-2013-0000343 2013/03/12 MOD END
		// 出力共通電文を返却
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * ファイル出力マップに値を設定します
	 * 
	 * @param mansionIDMap マンション情報マップ
	 * @param mapKKIFE035 ファイル出力マップ
	 * @param mansionID マンションID
	 * @throws Exception
	 */
	private void setFileMap(HashMap<String,String> mansionIDMap, JBSbatOutputItem outputBean)
	throws Exception 
	{
		
		ArrayList<String> mansionIDList = new ArrayList<String>();
		// 出力対象のマンションIDを保持
		mansionIDList.add(mansionIDMap.get(JBSbatKKIFM420.MANSION_ID));

		// ペアIDが設定されている場合は、出力対象としてペアIDを保持
		if (null != mansionIDMap.get(JBSbatKKIFM420.PAIRID) &&
				!"".equals(JBSbatStringUtil.Rtrim(mansionIDMap.get(JBSbatKKIFM420.PAIRID))))
		{
			mansionIDList.add(mansionIDMap.get(JBSbatKKIFM420.PAIRID));
		}

		for (String mansionID : mansionIDList)
		{
			// 入出力インターフェイスオブジェクトを生成
			JBSbatServiceInterfaceMap mapKKIFE035 = new JBSbatServiceInterfaceMap();
			
			// 項目を設定
			mapKKIFE035.setString(JBSbatKKIFE161.MANSION_ID, mansionID);			// マンションID 
			
			mapKKIFE035.setString(JBSbatKKIFE161.RSV_APLY_YMD,
					(mansionIDMap.get(JBSbatKKIFM420.UPD_DTM)).substring(0, 8));	// 予約適用年月日
			
			mapKKIFE035.setString(JBSbatKKIFE161.APLY_NO, "1");						// 適用通番
			
			mapKKIFE035.setString(JBSbatKKIFE161.APLY_ENDYMD,
					getCkan2099(mansionIDMap.get(JBSbatKKIFM420.SVC_END_YMD)));		// 適用終了日
			
			mapKKIFE035.setString(JBSbatKKIFE161.MK_FLG, "0");						// 無効フラグ
			//ANK-4031-00-00 MOD START
//			mapKKIFE035.setString(JBSbatKKIFE161.MANSION_KANA, 						// 【マンション物件】マンションカナ名
//					mansionIDMap.get(JBSbatKKIFM420.MANSION_KANA));					// マンション物件カナ名
//			
//			mapKKIFE035.setString(JBSbatKKIFE161.MANSION_NM, 						// 【マンション物件】マンション名
//					mansionIDMap.get(JBSbatKKIFM420.MANSION_NM));					// マンション名
//			
//			mapKKIFE035.setString(JBSbatKKIFE161.MANSION_BUKKEN_AD_CD, 
//					mansionIDMap.get(JBSbatKKIFM420.MANSION_BUKKEN_AD_CD));			// マンション物件住所コード
			
			mapKKIFE035.setString(JBSbatKKIFE161.MANSION_KANA, 						// 【提供方式契約】マンションカナ名
			mansionIDMap.get(JBSbatKKIFM420.MSBSN_KRTG_BKN_KANA));					// マンション営業管理対象物件カナ名
	
			mapKKIFE035.setString(JBSbatKKIFE161.MANSION_NM, 						// 【提供方式契約】マンション名
			mansionIDMap.get(JBSbatKKIFM420.MSBSN_KRTG_BKN_NM));					// マンション営業管理対象物件名
	
			mapKKIFE035.setString(JBSbatKKIFE161.MANSION_BUKKEN_AD_CD, 
			mansionIDMap.get(JBSbatKKIFM420.MSBSN_KRTG_BKN_AD_CD));			// マンション営業管理対象物件住所コード
			//ANK-4031-00-00 MOD END
			String mansTushinEquipCd = (String)mansionIDMap.get(JBSbatKKIFM420.MANS_TUSHIN_EQUIP_CD);
			// マンション通信種別コード変換
			String chaf_mansTushinEquipCd = changeMansTushinEquipCd(mansTushinEquipCd);
			mapKKIFE035.setString(JBSbatKKIFE161.MANS_TUSHIN_EQUIP_CD, chaf_mansTushinEquipCd);// マンション通信種別コード
			
			mapKKIFE035.setString(JBSbatKKIFE161.TK_EQUIP_SBT_CD1, 
					mansionIDMap.get(JBSbatKKIFM420.TK_HOSHIKI_PATTERN_CD));		// 提供設備種別コード1
			
			mapKKIFE035.setString(JBSbatKKIFE161.TK_EQUIP_SBT_CD2, 
					mansionIDMap.get(JBSbatKKIFE161.TK_EQUIP_SBT_CD2));				// 提供設備種別コード2
			
			// 提供設備帯域種別コード１
			String tkEquipTaiikiSbtCd1 = (String)mansionIDMap.get(JBSbatKKIFM420.TONAI_SPEED_CD);
			
			// 提供設備帯域種別コード１→変換
			String chaf_tkEquipTaiikiSbtCd1 = changeTkEquipTaiikiSbtCd(tkEquipTaiikiSbtCd1);
			mapKKIFE035.setString(JBSbatKKIFE161.TK_EQUIP_TAIIKI_SBT_CD1, chaf_tkEquipTaiikiSbtCd1);
			
			// 提供設備帯域種別コード２
			String tkEquipTaiikiSbtCd2 = (String)mansionIDMap.get(JBSbatKKIFE161.TK_EQUIP_TAIIKI_SBT_CD2);
			
			// 提供設備帯域種別コード２→変換
			String chaf_tkEquipTaiikiSbtCd2 = changeTkEquipTaiikiSbtCd(tkEquipTaiikiSbtCd2);
			mapKKIFE035.setString(JBSbatKKIFE161.TK_EQUIP_TAIIKI_SBT_CD2, chaf_tkEquipTaiikiSbtCd2);
			
			// 出力フラグを設定
			mapKKIFE035.setOutFlg(true);
			
			// 出力共通電文入出力インターフェイスを設定する
			outputBean.addOutMapList(mapKKIFE035);
		}
	}
	
	
	// IT1-2013-0000212 2013/02/07 ADD START
	
	/**
	 * マンション通信種別コード変換
	 * 
	 * @param mansTushinEquipCd マンション通信種別コード
	 * @return retCode 変換後マンション通信種別コード
	 */
	private String changeMansTushinEquipCd(String mansTushinEquipCd)
	{
		String retCode = "";
		
		if (MANS_TUSHIN_EQUIP_CD_VDSL.equals(mansTushinEquipCd))
		{
			retCode = CHAF_MANS_TUSHIN_EQUIP_CD_VDSL;
		}
		else if (MANS_TUSHIN_EQUIP_CD_ETH.equals(mansTushinEquipCd))
		{
			retCode = CHAF_MANS_TUSHIN_EQUIP_CD_ETHERNET;
		}
		else if (MANS_TUSHIN_EQUIP_CD_HIKARI.equals(mansTushinEquipCd))
		{
			retCode = CHAF_MANS_TUSHIN_EQUIP_CD_ONU;
		}
		else
		{
			logPrint.printDebugLog("コード変換失敗(マンション通信種別コード:" + mansTushinEquipCd + ")" + mansionID_Before);
		}
		
		return retCode;
	}

	/**
	 * 提供設備帯域種別コード１変換
	 * 
	 * @param tkEquipTaiikiSbtCd 提供設備帯域種別コード
	 * @return retCode 変換後提供設備帯域種別コード
	 */
	private String changeTkEquipTaiikiSbtCd(String tkEquipTaiikiSbtCd)
	{
		String retCode = "";
		
		if (TK_EQUIP_TAIIKI_SBT_CD_10M_10M.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_10M;
		}
		else if (TK_EQUIP_TAIIKI_SBT_CD_100M_35M.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_100M;
		}
		else if (TK_EQUIP_TAIIKI_SBT_CD_100M_100M.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_100M;
		}
		else if (TK_EQUIP_TAIIKI_SBT_CD_1G_1G.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_1G;
		}
		else if (TK_EQUIP_TAIIKI_SBT_CD_28M_28M.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_28M;
		}
		else if (TK_EQUIP_TAIIKI_SBT_CD_51M_6M.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_51M;
		}
		else if (TK_EQUIP_TAIIKI_SBT_CD_70M_30M.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_70M;
		}	
		//ANK-3989-00-00 ADD START
		else if (TK_EQUIP_TAIIKI_SBT_CD_5G_5G.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_5G;
		}
		else if (TK_EQUIP_TAIIKI_SBT_CD_10G_10G.equals(tkEquipTaiikiSbtCd))
		{
			retCode = TK_EQUIP_TAIIKI_SBT_CD_10G;
		//ANK-3989-00-00 ADD END
		}
		else
		{
			logPrint.printDebugLog("コード変換失敗(提供設備帯域種別コード:" + tkEquipTaiikiSbtCd + ")" + mansionID_Before);
		}
		
		return retCode;
	}
	// IT1-2013-0000212 2013/02/07 ADD END

	// KT1-2013-0000333 2013/03/03 ADD START
	
	/**
	 * 2099年を9999年に置換<BR>
	 * <BR>
	 * 入力文字列が20991231である場合に99999999で返却します。<BR>
	 * <BR>
	 * @param ymd 置換前年月日
	 * @return 20991231の場合99999999、それ以外の場合は入力値
	 * @throws Exception 
	 */
	private String getCkan2099(String ymd) throws Exception
	{
		String target_value = "20991231";
		if(ymd == null || "".equals(ymd) || target_value.equals(ymd))
		{
			return "99999999";
		}
		return ymd;
	}
	// KT1-2013-0000333 2013/03/03 ADD END

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
