/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKUKojiakInfoChsht
*	ソースファイル名	：JBSbatKUKojiakInfoChsht.java
*	作成者				：富士通　
*	作成日				：2011年05月17日
*＜機能概要＞
*　工事案件情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/05/17   FJ)中西	新規作成
*	v3.00.00	2012/03/07   FJ)田中	【ANK-0151-00-00】追加情報(ＩＯ／新設) TK番号追加
*	v3.00.00	2012/03/19   FJ)田中	【ANK-0375-00-00】基本情報 設置場所番号追加
*	v3.00.00	2012/03/22   FJ)高橋	【ANK-0363-00-00】ＦＴＴＨ従量制プラン_STEP2
*	v3.00.00	2012/04/02   FJ)田中	【ANK-0374-00-00】追加情報連携項目追加
*	v3.00.00	2012/04/02   FJ)田中	【ANK-0487-00-00】追加情報連携項目追加
*	v7.00.00	2013/10/30   FJ)黒田	【ANK-1578-00-00】多機能ルーター(機器追加)
*	v7.00.00	2014/01/15   FJ)阪口	【TAI-2014-0000003】メッセージのMJ⇒MN対応
*	v7.00.01	2014/01/28   FJ)阪口	【OM-2014-0000315】抽出データの再検索
*	v7.00.00	2014/02/02   FJ)中西	【OM-2014-0000459】多機能ルータ ルータレンタルコード
*	v8.00.00	2014/02/25   FJ)阪口	【ANK-1813-00-00】EPON→GEPON交換工事本格実施に伴うシステム改修
*	v10.00.00	2014/06/12   FJ)佐野	【ANK-2138-00-00】スマリン端末のトムソン同梱について
*	v10.00.00	2014/07/23   FJ)坂本	【ANK-1918-00-00】ＵＳ管理Ｓ向けｅｏ顧客ＳのＩ／Ｆ改修
*	v10.00.01	2014/09/12   FJ)阪口	【ANK-1918-03-00】撤去（解約）案件情報の連携タイミングの見直し
*	v48.00.00	2019/11/25   FJ)謝		【ANK-3736-00-00】【eo】宅内機器管理機能の適正化に伴うOPMS／MUSe連携データのレイアウト変更
**********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKUBatCheckUtil;
import eo.business.util.file.JBSbatKKIFI033;
import eo.business.util.file.JBSbatKUIFM011;
import eo.business.util.table.JBSbatKK_T_KAISEN_TG_SVKEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.business.util.table.JBSbatKU_T_SVKEI_KOJIAK;
import eo.common.constant.JKUStrConst;
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 JBSbatKUKojiakInfoChsht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
// ANK-3736-00-00 ADD START
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";

	/** SQL定義キー(KU_SELECT_002)*/
	private static final String KK_T_SVC_KEI_KU_SELECT_002 = "KU_SELECT_002";

	/** SQL定義キー(KU_SELECT_001)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KU_SELECT_001 = "KU_SELECT_001";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;
// ANK-3736-00-00 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** ▼▼▼▼▼▼業務チームで作成した宣言です 開始▼▼▼▼▼▼ */
	
	/** 工事案件番号 */
	private String kojiakNo = "";
	
	/** ▲▲▲▲▲▲業務チームで作成した宣言です 終了▲▲▲▲▲▲ */

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
// ANK-3736-00-00 ADD START
		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
// ANK-3736-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 入出力インターフェースオブジェクトを初期化
		JBSbatServiceInterfaceMap outMap1 = new JBSbatServiceInterfaceMap();
		JBSbatServiceInterfaceMap outMap2 = new JBSbatServiceInterfaceMap();
		
		// 前回の工事案件番号と今回の工事案件番号が異なる場合のみ出力
		if(!kojiakNo.equals(inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO)))
		{
			// 出力電文作成
			outMap1 = this.setOutMapZoku(inMap);
			
			// 出力フラグを設定
			outMap1.setOutFlg(true);
			
			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList(outMap1);
		}
		
		// 機器契約抽出対象工事情報の出力判定
		if(JKUBatCheckUtil.judgeOutData(inMap.getString(JBSbatKU_T_KOJIAK.HOJIN_PRC_GRP_CD), inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD), inMap.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD)))
		{
			// 出力電文作成
			outMap2 = this.setOutMapKiki(inMap);
			
			// 出力フラグを設定
			outMap2.setOutFlg(true);
			
			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList_2(outMap2);
// ANK-3736-00-00 ADD START
			// 移設の場合
			if (JKUStrConst.CD00577_ISETSU.equals(inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD)))
			{
				// サービス契約よりサービスコードを取得する
				Object[] whereParam1 = new Object[2];
				whereParam1[0] = inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO);
				whereParam1[1] = super.opeDate;
				
				// 検索処理実行
				executeKK_T_SVC_KEI_KU_SELECT_002(whereParam1);
				JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
				if (svcKeiMap != null)
				{
					// サービスコード
					String svcCd = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD);
					
					// ネットの場合
					if (JKUStrConst.CD00130_NET.equals(svcCd))
					{
						// 同一回線内の電話のサービス契約番号を取得する
						Object[] whereParam2 = new Object[5];
						whereParam2[0] = super.opeDate;
						whereParam2[1] = inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO);
						whereParam2[2] = super.opeDate;
						whereParam2[3] = super.opeDate;
						whereParam2[4] = JKUStrConst.CD00130_TEL;
						
						// 検索処理実行
						executeKK_T_KAISEN_TG_SVKEI_KU_SELECT_001(whereParam2);
						JBSbatCommonDBInterface kaisenTgSvkeiMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
						if (kaisenTgSvkeiMap != null)
						{
							// 出力電文作成
							JBSbatServiceInterfaceMap outMapTel = this.setOutMapKikiIsetsu(inMap, kaisenTgSvkeiMap.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_NO));
							
							// 出力フラグを設定
							outMapTel.setOutFlg(true);
							
							// 出力共通電文に入出力インターフェースを設定する。
							outputBean.addOutMapList_2(outMapTel);
						}
					}
					// 電話の場合
					else if (JKUStrConst.CD00130_TEL.equals(svcCd))
					{
						// 同一回線内のネットのサービス契約番号を取得する
						Object[] whereParam2 = new Object[5];
						whereParam2[0] = super.opeDate;
						whereParam2[1] = inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO);
						whereParam2[2] = super.opeDate;
						whereParam2[3] = super.opeDate;
						whereParam2[4] = JKUStrConst.CD00130_NET;
						
						// 検索処理実行
						executeKK_T_KAISEN_TG_SVKEI_KU_SELECT_001(whereParam2);
						JBSbatCommonDBInterface kaisenTgSvkeiMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
						if (kaisenTgSvkeiMap != null)
						{
							// 出力電文作成
							JBSbatServiceInterfaceMap outMapNet = this.setOutMapKikiIsetsu(inMap, kaisenTgSvkeiMap.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_NO));
							
							// 出力フラグを設定
							outMapNet.setOutFlg(true);
							
							// 出力共通電文に入出力インターフェースを設定する。
							outputBean.addOutMapList_2(outMapNet);
						}
					}
				}
			}
// ANK-3736-00-00 ADD END
		}
		// 今回の工事案件番号を保持
		kojiakNo = inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
		
		// 出力共通電文を返却する
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
// ANK-3736-00-00 ADD START
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_KK_T_KAISEN_TG_SVKEI.close();
// ANK-3736-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

// ANK-3736-00-00 ADD START
	/**
	 * SQLKEY(KU_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KU_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KU_SELECT_002);
	}

	/**
	 * SQLKEY(KU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	予約適用年月日
	 *		 	サービス契約回線内訳番号
	 *		 	回線内訳使用開始年月日
	 *		 	回線内訳使用終了年月日
	 *		 	サービスコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KAISEN_TG_SVKEI_KU_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KU_SELECT_001);
	}
// ANK-3736-00-00 ADD END
	
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/** ▼▼▼▼▼▼業務チームで作成したメソッドです 開始▼▼▼▼▼▼ */
	
	/**
	 * 工事案件情報の出力共通電文を設定します。
	 * @param inMap 入力電文
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMapZoku(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// 工事案件番号
		outMap.setString(JBSbatKUIFM011.KOJIAK_NO, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		// サービス契約番号
		outMap.setString(JBSbatKUIFM011.SVC_KEI_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO));
		// サービス契約回線内訳番号
		outMap.setString(JBSbatKUIFM011.SVC_KEI_KAISEN_UCWK_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO));
		// 工事案件ステータス
		outMap.setString(JBSbatKUIFM011.KOJIAK_STAT, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT));
		// 工事案件種別コード
		outMap.setString(JBSbatKUIFM011.KOJIAK_SBT_CD, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD));
		// 料金グループコード
		outMap.setString(JBSbatKUIFM011.PRC_GRP_CD, inMap.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD));
		// 法人料金グループコード
		outMap.setString(JBSbatKUIFM011.HOJIN_PRC_GRP_CD, inMap.getString(JBSbatKU_T_KOJIAK.HOJIN_PRC_GRP_CD));
		// 連携サービス契約番号
		outMap.setString(JBSbatKUIFM011.RNKI_SVC_KEI_NO, inMap.getString(JBSbatKU_T_KOJIAK.RNKI_SVC_KEI_NO));
		// マンション物件コード
		outMap.setString(JBSbatKUIFM011.MANSION_BUKKEN_CD, inMap.getString(JBSbatKU_T_KOJIAK.MANSION_BUKKEN_CD));
		// 属性変更処理済み年月日時分秒
		outMap.setString(JBSbatKUIFM011.ZOKU_CHG_SYRZM_DTM, "");
		
		return outMap;
	}
	
	/**
	 * 機器契約抽出対象工事情報の出力共通電文を設定します。
	 * @param inMap 入力電文
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMapKiki(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// サービス契約番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO));
		// サービス契約回線内訳番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_KAISEN_UCWK_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO));
		// 工事案件番号
		outMap.setString(JBSbatKKIFI033.KOJIAK_NO, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		// 工事案件ステータス
		outMap.setString(JBSbatKKIFI033.KOJIAK_STAT, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT));
		// 工事案件種別コード
		outMap.setString(JBSbatKKIFI033.KOJIAK_SBT_CD, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD));
		
		return outMap;
	}
	
// ANK-3736-00-00 ADD START
	/**
	 * 機器契約抽出対象工事情報の出力共通電文を設定します。（移設の場合）
	 * @param inMap 入力電文
	 * @param svcKeiNo サービス契約番号
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMapKikiIsetsu(JBSbatServiceInterfaceMap inMap, String svcKeiNo) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// サービス契約番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_NO, svcKeiNo);
		// サービス契約回線内訳番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_KAISEN_UCWK_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO));
		// 工事案件番号
		outMap.setString(JBSbatKKIFI033.KOJIAK_NO, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		// 工事案件ステータス
		outMap.setString(JBSbatKKIFI033.KOJIAK_STAT, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT));
		// 工事案件種別コード
		outMap.setString(JBSbatKKIFI033.KOJIAK_SBT_CD, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD));
		
		return outMap;
	}
// ANK-3736-00-00 ADD END
	/** ▲▲▲▲▲▲業務チームで作成したメソッドです 終了▲▲▲▲▲▲ */
}
