/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTelKaihoTrnJssi
*	ソースファイル名	：JBSbatKKTelKaihoTrnJssi.java
*	作成者				：富士通　
*	作成日				：2012年07月19日
*＜機能概要＞
*　ｅｏ電話番号開放処理実施部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/07/19   富士通		新規作成
*	v4.00.00    2012/11/12   FJ) 藤川   IT1-2012-0001936 電話番号予約種別コード追加（通常払出時には電話番号予約の復元（登録）処理を行わない）
* 	v72.00.00   2024/08/20   FJ) 張    【ANK-4494-00-00】【eo定期】 双方向番ポ対応_STEP2
*********************************************************************/
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.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM235;
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;
import eo.framework.util.JBSbatStringUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTelKaihoTrnJssi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(電話番号予約復活用ワーク)*/
	private static final String D_TBL_NAME_KK_T_TLN_RSV_HKT_WK = "KK_T_TLN_RSV_HKT_WK";

	/** テーブル(エイジング)*/
	private static final String D_TBL_NAME_ZM_T_AGING = "ZM_T_AGING";

	/** テーブル(電話番号予約)*/
	private static final String D_TBL_NAME_ZM_T_TELNO_RSV = "ZM_T_TELNO_RSV";

	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_T_TLN_RSV_HKT_WK_KK_SELECT_002 = "KK_SELECT_002";

	/** SQL定義キー(KK_DELETE_001)*/
	private static final String ZM_T_AGING_KK_DELETE_001 = "KK_DELETE_001";

	/** SQL定義キー(KK_INSERT_001)*/
	private static final String ZM_T_TELNO_RSV_KK_INSERT_001 = "KK_INSERT_001";
	
	// ANK-4494-00-00 ADD START
	/** 電話番号状態判断CC ユースケースID */
	private static final String USECASE_ID = "KKSV1036";
	
	/** 電話番号状態判断CC オペレーションID */
	private static final String OPERATION_ID = "KKSV1036OP";
	
	/** 電話番号状態判断CC リクエストキー　電話番号状態判断 */
	private static final String KKSV103601CC = "KKSV103601CC";
	
	/** 電話番号状態判断CC レスポンスキー　ポートアウトあり */
	private static final String PORTOUTSTATUM_ARI = "1";
	
	// ANK-4494-00-00 ADD END
	
	/** テーブルアクセスクラス(電話番号予約復活用ワーク)*/
	private JBSbatSQLAccess db_KK_T_TLN_RSV_HKT_WK = null;

	/** テーブルアクセスクラス(エイジング)*/
	private JBSbatSQLAccess db_ZM_T_AGING = null;

	/** テーブルアクセスクラス(電話番号予約)*/
	private JBSbatSQLAccess db_ZM_T_TELNO_RSV = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 電話番号予約ステータス　予約中 */
	private static final String TELNO_RSV_STAT_RSVING= "100";
	/** 電話番号予約シーケンス */
	private static final String SEQ_TELNO_RSV_NO = "SEQ_TELNO_RSV_NO";

	// 2012-11-12 IT1-2012-0001936 ADD_START
	/** 電話番号予約種別コード 99：通常払出時に設定される */
	private static final String TELNO_RSV_SBT_CD_99 = "99";
	// 2012-11-12 IT1-2012-0001936 ADD_END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_TLN_RSV_HKT_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_TLN_RSV_HKT_WK);
		db_ZM_T_AGING = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_AGING);
		db_ZM_T_TELNO_RSV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_TELNO_RSV);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// @解放可能チェック
		String tlnRsvHktWkNo = inMap.getString(JBSbatKKIFM235.TLN_RSV_HKT_WK_NO);
		JBSbatCommonDBInterface kaihoTln = executeKK_T_TLN_RSV_HKT_WK_KK_SELECT_002(new Object[]{tlnRsvHktWkNo});
		if (kaihoTln == null) {
			// ログ出力
			super.logPrint.printBusinessErrorLog("EKKB0290AW", new String[] {tlnRsvHktWkNo});
			return null;
		}
// ANK-4494-00-00 ADD START
		//ポートアウト状態判定：ポートアウト状態であれば、解放不可
		//電話番号取得
		String telno = "";
		telno = kaihoTln.getString("TELNO");
		if(telno != null && !"".equals(telno)){
			String portOutStatUm = "";
			//---------------------------------------------------
			// 入力ファイルの情報を取得
			//---------------------------------------------------
			HashMap<String, Object> telnoMap = new HashMap<String, Object>();
			// 電話番号
			telnoMap.put("key_telno",           telno);
			
			// KKSV1036_電話番号状態判断を呼出し
			HashMap<String, Object> outputMap = doExecute(telnoMap);
			
			// サービス実行後の結果を取得する
			HashMap kksv103601CCMap = (HashMap) outputMap.get("KKSV103601CC");
			if(kksv103601CCMap == null){
				return null;
			}
			ArrayList telnoStatJudgeCCMap = (ArrayList)kksv103601CCMap.get("TELNOSTATJUDGECC_LIST");
			HashMap telNoStatJudgeCcListHashMap = (HashMap)telnoStatJudgeCCMap.get(0);
			// ポートアウト有無取得
			portOutStatUm        = (String)telNoStatJudgeCcListHashMap.get("portOutStatUm");
			//ポートアウト状態であれば、解放不可
			if (PORTOUTSTATUM_ARI.equals(portOutStatUm)) {
				// ログ出力
				super.logPrint.printDebugLog(tlnRsvHktWkNo + ":ポートアウトされているため、解放不可。" );
				return null;
			}
		}
		
// ANK-4494-00-00 ADD END
// 2012-11-12 IT1-2012-0001936 ADD_START
		// 電話番号予約種別コード
		String tlnRsvSbtCd = kaihoTln.getString("TELNO_RSV_SBT_CD");
// 2012-11-12 IT1-2012-0001936 ADD_END

		// Aエイジングの削除
		executeZM_T_AGING_KK_DELETE_001(new Object[]{inMap.getString(JBSbatKKIFM235.TELNO)});
		
// 2012-11-12 IT1-2012-0001936 EDIT_START
		// 電話番号予約種別コードが"99"の場合は通常払出のため、電話番号予約の復元（登録）処理は行わない
		if (TELNO_RSV_SBT_CD_99.equals(tlnRsvSbtCd))
		{
			// 何もしない
		}
		else
		{
			// B電話番号予約の復元（登録）
			execInsertTelnoRsv(tlnRsvHktWkNo);
		}
// 2012-11-12 IT1-2012-0001936 EDIT_END
		
		// C電話番号予約復活用ワークの削除
		executeKK_T_TLN_RSV_HKT_WK_PKDELETE(new Object[]{tlnRsvHktWkNo});
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_TLN_RSV_HKT_WK.close();
		db_ZM_T_AGING.close();
		db_ZM_T_TELNO_RSV.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_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 JBSbatCommonDBInterface executeKK_T_TLN_RSV_HKT_WK_KK_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// 2013-05-01 IT1-2013-0001102 DEL START
//		paramList.setValue(super.opeDate);		// 2013-04-09追加 IKK-2013-0000855対応 バッチ運用日を追加
		// 2013-05-01 IT1-2013-0001102 DEL END
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_TLN_RSV_HKT_WK.selectBySqlDefine(paramList, KK_T_TLN_RSV_HKT_WK_KK_SELECT_002);
		return db_KK_T_TLN_RSV_HKT_WK.selectNext();
	}

	/**
	 * SQLKEY(KK_DELETE_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 executeZM_T_AGING_KK_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_T_AGING.executeBySqlDefine(paramList, ZM_T_AGING_KK_DELETE_001);
	}

	/**
	 * SQLKEY(KK_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	電話番号予約番号
	 *		 	電話番号予約ステータス
	 *		 	登録年月日時分秒
	 *		 	登録オペレータアカウント
	 *		 	更新年月日時分秒
	 *		 	更新オペレータアカウント
	 *		 	削除年月日時分秒
	 *		 	削除オペレータアカウント
	 *		 	無効フラグ
	 *		 	登録運用年月日
	 *		 	登録処理ID
	 *		 	更新運用年月日
	 *		 	更新処理ID
	 *		 	削除運用年月日
	 *		 	削除処理ID
	 *		 	電話番号予約復活用ワーク番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_TELNO_RSV_KK_INSERT_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());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());

		// DBアクセスを実行します
		db_ZM_T_TELNO_RSV.executeBySqlDefine(paramList, ZM_T_TELNO_RSV_KK_INSERT_001);
	}

	/**
	 * PK(ＰＫ　削除)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TLN_RSV_HKT_WK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_TLN_RSV_HKT_WK_PKDELETE(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TLN_RSV_HKT_WK_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KK_T_TLN_RSV_HKT_WK.deleteByPrimaryKeys(whereMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 電話番号予約を登録する
	 * @param tlnRsvHktWkNo 電話番号予約復活用ワーク番号
	 * @throws Exception 各種エラー
	 */
	private void execInsertTelnoRsv(String tlnRsvHktWkNo) throws Exception
	{
		String seq = JCCBatCommon.getNextSeq(commonItem, SEQ_TELNO_RSV_NO);
		String dtm = JKKBatCommon.getSysDateTimeStamp();
		Object param[] = {
				JBSbatStringUtil.padNumFormString(seq, 12)
				,TELNO_RSV_STAT_RSVING
				,dtm
				,super.batchUserId
				,dtm
				,super.batchUserId
				,""
				,""
				,JKKBatConst.S_MK_FLG
				,super.opeDate
				,JKKBatCommon.getTrnId()
				,super.opeDate
				,JKKBatCommon.getTrnId()
				,""
				,""
				,tlnRsvHktWkNo
		};
		executeZM_T_TELNO_RSV_KK_INSERT_001(param);
	}
	
// ANK-4494-00-00 ADD START
	/**
	 * 電話番号状態判断呼び出し処理
	 * 
	 * @param inMap 入力電文
	 * @return HashMap<String, Object> 処理結果
	 * @throws Exception
	 */
	private HashMap<String, Object> doExecute(HashMap<String, Object> excuteMap) throws Exception
	{
		
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// サービスの処理結果が格納されるMAP
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスＩＤのセット
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID);
		
		// inputMapにCCに必要な情報をセットする
		inputMap.put(KKSV103601CC, excuteMap);
		
		// 電話番号状態判断CCを呼び出す
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);
		
		// 処理結果を返却する
		return outputMap;
	}
// ANK-4494-00-00 ADD END
}
