/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：契約管理システム
*   モジュール名    ：フェムトセルオプション更新
*   ソースファイル名：KKW02410SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年06月11日
*＜機能概要＞
*   フェムトセルオプションの更新を行う。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00       2012/06/11   FJ）森本    新規作成
*   v4.01       2012/10/07   FJ）近藤    品質管理レビュー結果反映
*   v4.02		2012/11/05   FJ) 清崎    【ANK-1223-00-00】進捗補足事項編集対応 
*   v5.00       2013/02/22   FJ）近藤    【ST1-2013-0000397】フェムトセル異動情報登録CC追加対応
**********************************************************************/
package eo.web.webview.KKW02410SF;

import java.util.HashMap;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW02410SF.KKW02410SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0577_KKSV0577OPDBMapper;
import eo.web.webview.mapping.KKSV0578_KKSV0578OPDBMapper;
import eo.web.webview.mapping.KKSV0579_KKSV0579OPDBMapper;

/**
 * フェムトセルオプション情報の変更を行う。<p>
 * オプションサービス契約一覧画面より遷移します。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")

public class KKW02410SFLogic extends JCCWebBusinessLogic {

	/**
	 * メッセージエリア
	 */
	private static final  String[] MSGSTRING = {
		"フェムトセルオプションの解約",
		"フェムトセルオプションの回復"
		};
	
	// 2012/11/05 [ANK-1223-00-00]進捗補足事項編集対応 ADD START
	private static final String FEMTSEL_INFO = "フェムトセル情報";
	private static final String DSL = "解約";
	private static final String KAIHK = "回復";
	// 2012/11/05 [ANK-1223-00-00]進捗補足事項編集対応 ADD END
	
	// v4.01 20121007 DEL START
//	/**
//	 * コード種別コード(事業者)
//	 */
//	private static final  String SBTCD = "CD00255";
	// v4.01 20121007 DEL END
	
	/**
	 * 初期表示処理を行います。
	 * <br>
	 * @return true:正常
	 * @exception Exceptionがスローされます。
	 */
	public boolean actionInit() throws Exception
	{
		// 画面情報を取得し、サービスフォームBeanに設定。
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};

		// メッセージ表示用
		String[] msgInfo = new String[1];

		// DataBean設定処理（引継情報）
		setHktgiBean(paramBean);

		// 初期表示サービス呼出処理
		executeInitSvc(paramBean);

		// 処理区分の取得
		String trandiv = bean.sendMessageString(KKW02410SFConst.TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE);

		// DataBean設定処理(サービスの呼び出し結果を設定)
		setDataInit(paramBean, trandiv);

		// 処理区分が解約の場合
		if(JKKCommonConst.OP_TRAN_DIV_DSL.equals(trandiv))
		{
			// メッセージの設定
			msgInfo[0] = MSGSTRING[0];
			// メッセージ出力
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, msgInfo);
		}

		// 処理区分が回復の場合
		else if(JKKCommonConst.OP_TRAN_DIV_KAIHK.equals(trandiv))
		{
			// メッセージの設定
			msgInfo[0] = MSGSTRING[1];
			// メッセージ出力
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, msgInfo);
		}

		// v4.01 20121007 ADD START
		// 自画面の画面名を設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02410);
		// v4.01 20121007 ADD END

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;

	}

	/**
	 * 戻る処理<br>
	 * <br>
	 * １．呼び出し元画面に戻ります。<br>
	 * <br>
	 *
	 * @return true
	 * @throws Exception 
	 */
	public boolean actionBack() throws Exception
	{

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先の画面IDを取得し共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;

	}

	/**
	 * DataBean設定処理（初期表示）<br>
	 * <br>
	 * 画面DataBeanに必要な項目をセットします。<br>
	 * <br>
	 * @param paramBean DataBean項目の配列
	 * @param trandiv 処理区分
	 */
	private void setDataInit(X31SDataBeanAccess[] paramBean, String trandiv)
	{
		// 運用年月日取得
		String unyo_ymd = paramBean[0].sendMessageString(KKW02410SFConst.USE_YMD, X31CWebConst.DATABEAN_GET_VALUE);

		// 処理区分が解約の場合
		if(JKKCommonConst.OP_TRAN_DIV_DSL.equals(trandiv))
		{
			// 運用年月日→利用終了日
			paramBean[0].sendMessageString(KKW02410SFConst.USE_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, unyo_ymd);
		}
		// 2012/11/05 [ANK-1223-00-00]進捗補足事項編集対応 ADD START
		// 処理区分が解約の場合
		if(JKKCommonConst.OP_TRAN_DIV_DSL.equals(trandiv))
		{
		// 進捗特記事項１
		paramBean[0].sendMessageString(KKW02410SFConst.PRG_TKJK_1, X31CWebConst.DATABEAN_SET_VALUE, FEMTSEL_INFO + DSL);
		}
		else
		{
		// 進捗特記事項１
		paramBean[0].sendMessageString(KKW02410SFConst.PRG_TKJK_1, X31CWebConst.DATABEAN_SET_VALUE, FEMTSEL_INFO + KAIHK);
		// 2012/11/05 [ANK-1223-00-00]進捗補足事項編集対応 ADD END
		}
		}

	/**
	 * フェムトセルオプション情報照会サービス実行処理(初期表示用)
	 * <br>
	 * @param paramBean DataBean項目の配列
	 */
	private void executeInitSvc(X31SDataBeanAccess[] paramBean)
	{
		
		// フェムトセルオプション情報照会
		HashMap<String, Object> paramMap = new HashMap<String, Object>();		// パラメタ設定用マップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>();		// 入力用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();		// 結果格納用マップ

		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0577");

		// 上りマッピング処理(サービス項目-DataBean項目マッピング)
		KKSV0577_KKSV0577OPDBMapper mapper = new KKSV0577_KKSV0577OPDBMapper();

		// オプションサービス契約一意照会
		mapper.setKKSV057701SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setKKSV057702SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		// サービス呼出処理
		invokeService(paramMap, inputMap, outputMap);

		// 下りマッピング処理(サービス項目-DataBean項目マッピング)
		// オプションサービス契約一意照会
		mapper.getKKSV057701SC(paramBean, outputMap);
		mapper.getKKSV057702SC(paramBean, outputMap);

	}

	/**
	 * DataBean設定処理（初回データ保持用）<br>
	 * <br>
	 * 画面DataBeanに必要な項目をセットします。<br>
	 * <br>
	 * @param paramBean DataBean項目の配列
	 */
	private void setHktgiBean(X31SDataBeanAccess[] paramBean)
	{
		// 運用日付取得してDataBeanにセットする
		String use_ymd = JCCWebCommon.getOpeDate(this, null);
		paramBean[0].sendMessageString(KKW02410SFConst.USE_YMD, X31CWebConst.DATABEAN_SET_VALUE, use_ymd);

		// 顧客契約引継リストの取得
		X31SDataBeanAccessArray hktgilist = paramBean[0].getDataBeanArray(KKW02410SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess hktgiBean = hktgilist.getDataBean(0);

		//引継リストから取得した項目をDataBeanにセットしなおす
		// SYSID
		String sysid = hktgiBean.sendMessageString(KKW02410SFConst.SYSID_01, X31CWebConst.DATABEAN_GET_VALUE);
		paramBean[0].sendMessageString(KKW02410SFConst.SYSID,  X31CWebConst.DATABEAN_SET_VALUE, sysid);

		// サービス契約番号
		String svc_kei_no = hktgiBean.sendMessageString(KKW02410SFConst.SVC_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		paramBean[0].sendMessageString(KKW02410SFConst.SVC_KEI_NO,  X31CWebConst.DATABEAN_SET_VALUE, svc_kei_no);

		// 異動区分
		String ido_div = hktgiBean.sendMessageString(KKW02410SFConst.IDO_DIV_01, X31CWebConst.DATABEAN_GET_VALUE);
		paramBean[0].sendMessageString(KKW02410SFConst.IDO_DIV,  X31CWebConst.DATABEAN_SET_VALUE, ido_div);

		// 異動理由コードの設定
		X31SDataBeanAccessArray ido_rsn_list = paramBean[0].getDataBeanArray(KKW02410SFConst.IDO_RSN_LIST);

		// 異動理由メモの取得
		String ido_rsn_memo = hktgiBean.sendMessageString(KKW02410SFConst.IDO_RSN_MEMO_01, X31CWebConst.DATABEAN_GET_VALUE);

		// 異動理由コードの要素数を取得
		int cnt = (Integer)hktgiBean.sendMessage(KKW02410SFConst.IDO_RSN_CD_01, X31CWebConst.DATABEAN_GET_COUNT);

		// 異動理由コードの要素数分繰り返す
		for(int i = 0; i < cnt; i++)
		{
			X31SDataBeanAccess ido_rsn_bean = null;
			if(ido_rsn_list.getCount() - 1 >= i)
			{
				ido_rsn_bean = ido_rsn_list.getDataBean(i);
			}
			else
			{
				ido_rsn_bean = ido_rsn_list.addDataBean();
			}
			if (ido_rsn_bean == null) 
			{
				continue;
			}

			// 異動理由コードの取得
			String ido_rsn_cd = hktgiBean.sendMessageString(KKW02410SFConst.IDO_RSN_CD_01, X31CWebConst.DATABEAN_GET_VALUE, i);

			// 異動理由.異動理由コードの設定
			ido_rsn_bean.sendMessageString(KKW02410SFConst.IDO_RSN_CD_02, X31CWebConst.DATABEAN_SET_VALUE, ido_rsn_cd);

			// 異動理由.異動理由メモの設定
			ido_rsn_bean.sendMessageString(KKW02410SFConst.IDO_RSN_MEMO_02, X31CWebConst.DATABEAN_SET_VALUE, ido_rsn_memo);

		}

		// オプションサービス契約番号
		String op_svc_kei_no = hktgiBean.sendMessageString(KKW02410SFConst.OP_SVC_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE, 0);
		paramBean[0].sendMessageString(KKW02410SFConst.OP_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, op_svc_kei_no);

		// 処理区分
		String tran_div = hktgiBean.sendMessageString(KKW02410SFConst.TRAN_DIV_01, X31CWebConst.DATABEAN_GET_VALUE);
		paramBean[0].sendMessageString(KKW02410SFConst.TRAN_DIV,  X31CWebConst.DATABEAN_SET_VALUE, tran_div);

		// 申込番号
		String mskm_no = hktgiBean.sendMessageString(KKW02410SFConst.MSKM_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		paramBean[0].sendMessageString(KKW02410SFConst.MSKM_NO, X31CWebConst.DATABEAN_SET_VALUE, mskm_no);

		// 申込明細番号
		String mskm_dtl_no = hktgiBean.sendMessageString(KKW02410SFConst.MSKM_DTL_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		paramBean[0].sendMessageString(KKW02410SFConst.MSKM_DTL_NO, X31CWebConst.DATABEAN_SET_VALUE, mskm_dtl_no);
		// v4.01 20121007 DEL START
		//予約適用年月日
//		paramBean[0].sendMessageString(KKW02410SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, "20991231");
		// v4.01 20121007 DEL END
	}

	/**
	 * 確定ボタン押下時処理<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionFix() throws Exception
	{
		boolean result = true;

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};

		// 処理区分の取得
		String trandiv = bean.sendMessageString(KKW02410SFConst.TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE);

		// 返却メッセージＩＤ
		String rtn_msg_id = "";

		// メッセージ表示用
		String[] msgInfo = new String[1];

		// 処理区分が解約の場合
		if(JKKCommonConst.OP_TRAN_DIV_DSL.equals(trandiv))
		{
			// 解約確認サービス呼出処理
			executeDslSvc(paramBean, JPCModelConstant.FUNC_CD_1);
			
			// v4.01 20121007 DEL START
			// 返却メッセージＩＤを取得
//			rtn_msg_id = paramBean[0].sendMessageString(KKW02410SFConst.RTN_MSG_ID, X31CWebConst.DATABEAN_GET_VALUE);
			// v4.01 20121007 DEL END
			
			// メッセージの設定
			msgInfo[0] = MSGSTRING[0];
		}

		// 処理区分が回復の場合
		else if(JKKCommonConst.OP_TRAN_DIV_KAIHK.equals(trandiv))
		{
			// 回復サービス呼出処理
			executeKaihkSvc(paramBean, JPCModelConstant.FUNC_CD_1);
			
			// 返却メッセージＩＤを取得
			rtn_msg_id = paramBean[0].sendMessageString(KKW02410SFConst.RTN_MSG_ID, X31CWebConst.DATABEAN_GET_VALUE);
			
			// メッセージの設定
			msgInfo[0] = MSGSTRING[1];
		}

		// 画面遷移
		if ("".equals(rtn_msg_id)) 
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
					JKKScreenConst.SCREEN_ID_KKW02411);
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
					JKKScreenConst.SCREEN_NAME_KKW02411);

			// メッセージ出力
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, msgInfo);
		}
		else
		{
			// v4.01 20121007 MOD START
			// メッセージの設定
//			String[] str = getMsgRep(trandiv, rtn_msg_id);
			String[] str = {"回復可能期間外", "回復"};
//			if (str == null) 
//			{
//				// メッセージ出力(IDのみ)
//				JCCWebCommon.setMessageInfo(this, rtn_msg_id);
//			}
//			else
//			{
				// メッセージ出力(置換文字あり)
				JCCWebCommon.setMessageInfo(this, rtn_msg_id, str);
//			}
			// v4.01 20121007 MOD END
		}

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return result;
	}

	// v4.01 20121007 DEL START
//	/**
//	 * 置換メッセージ取得処理<br>
//	 * <br>
//	 * 返却メッセージＩＤに対応する置換文字列を取得する。<br>
//	 * <br>
//	 * @param trandiv 処理区分
//	 * @param rtn_msg_id 返却メッセージＩＤ
//	 * @return 置換用メッセージ
//	 */
//	private String[] getMsgRep(String trandiv, String rtn_msg_id)
//	{
//		
//		// 処理区分が解約の場合
//		if(JKKCommonConst.OP_TRAN_DIV_DSL.equals(trandiv))
//		{
//			// 利用状態チェック（EKB5440-JW）
//			if (JPCOnlineMessageConstant.EKB5440_JW.equals(rtn_msg_id)) 
//			{
//				String[] str = {"解約済", "解約"};
//				return str;
//			}
//		}
//		// 処理区分が回復の場合
//		else if(JKKCommonConst.OP_TRAN_DIV_KAIHK.equals(trandiv))
//		{
//			
//			// 回復可能期間（EKB5440-JW）
//			if (JPCOnlineMessageConstant.EKB5440_JW.equals(rtn_msg_id)) 
//			{
//				String[] str = {"回復可能期間外", "回復"};
//				return str;
//			}
//			// 回復可能期間（EKB5440-JW）
//			if (JPCOnlineMessageConstant.EKB1530_JW.equals(rtn_msg_id)) 
//			{
//				String[] str = null;
//				return str;
//			}
//		}
//		
//		return null;
//		
//	}
	// v4.01 20121007 DEL END

	/**
	 * フェムトセルオプション情報解約確認実行処理
	 * <br>
	 * @param paramBean DataBean項目の配列
	 * @param func_code  機能コード
	 */
	private void executeDslSvc(X31SDataBeanAccess[] paramBean, String func_code)
	{
		
		// 変数の定義
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		// フェムトセルオプション情報解約確認サービス
		paramMap = new HashMap<String, Object>();		// パラメタ設定用マップ
		inputMap = new HashMap<String, Object>();		// 入力用マップ
		outputMap = new HashMap<String, Object>();		// 結果格納用マップ
		
		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0578");
		
		// 上りマッピング処理(サービス項目-DataBean項目マッピング)
		KKSV0578_KKSV0578OPDBMapper mapper = new KKSV0578_KKSV0578OPDBMapper();
		
		// 解約CCマッピング
		mapper.setOpSvcKeiDslCC(paramBean, inputMap, func_code);
		// SODCCマッピング
		mapper.setJKKHakkoSODCC(paramBean, inputMap, func_code);
		// v5.00 2013/02/22 【ST1-2013-0000397】 ADD START
		// フェムトセル異動情報登録CCマッピング
		mapper.setFmtcelIdoInfAddCC(paramBean, inputMap, func_code);
		// v5.00 2013/02/22 【ST1-2013-0000397】 ADD END
		
		// 返却IDをクリア
		paramBean[0].sendMessageString(KKW02410SFConst.RTN_MSG_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		
		// サービス実行
		invokeService(paramMap, inputMap, outputMap);
		
		// 結果取得
		mapper.getOpSvcKeiDslCC(paramBean, outputMap);	
		
	}

	/**
	 * フェムトセルオプション情報回復サービス実行処理
	 * <br>
	 * @param paramBean DataBean項目の配列
	 * @param func_code  機能コード
	 */
	private void executeKaihkSvc(X31SDataBeanAccess[] paramBean, String func_code)
	{
		
		// 変数の定義
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		// フェムトセルオプション情報回復サービス
		paramMap = new HashMap<String, Object>();		// パラメタ設定用マップ
		inputMap = new HashMap<String, Object>();		// 入力用マップ
		outputMap = new HashMap<String, Object>();		// 結果格納用マップ
		
		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0579");
		
		// 上りマッピング処理(サービス項目-DataBean項目マッピング)
		KKSV0579_KKSV0579OPDBMapper mapper = new KKSV0579_KKSV0579OPDBMapper();
		
		// 回復CC
		mapper.setOpSvcKeiKaihkCC(paramBean, inputMap, func_code);
		// SODCCマッピング
		mapper.setJKKHakkoSODCC(paramBean, inputMap, func_code);
		// WORKマッピング
		mapper.setKKSV0009WORK(paramBean, inputMap, "");
		// v5.00 2013/02/22 【ST1-2013-0000397】 ADD START
		// フェムトセル異動情報登録CCマッピング
		mapper.setFmtcelIdoInfAddCC(paramBean, inputMap, func_code);
		// v5.00 2013/02/22 【ST1-2013-0000397】 ADD END
		// 返却IDをクリア
		paramBean[0].sendMessageString(KKW02410SFConst.RTN_MSG_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		
		// サービス実行
		invokeService(paramMap, inputMap, outputMap);
		
		// 結果取得
		mapper.getOpSvcKeiKaihkCC(paramBean, outputMap);
	}

	/**
	 * 完了処理<br>
	 * <br>
	 * １．呼び出し元画面に戻ります。<br>
	 * <br>
	 * @return true:正常
	 * @exception Exceptionがスローされます。
	 */
	public boolean actionFin() throws Exception
	{
		
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先の画面IDを取得し共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCCWebCommon.getScreenId(this));

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
		
	}
}
