/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：顧客契約
*   モジュール名    ：Eメール情報登録、Eメール情報登録確認、Eメール情報完了
*   ソースファイル名：KKW00801SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年03月31日
*＜機能概要＞
*   Eメールのオプション情報を登録する画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00       2011/04/01   FJ）富士通    新規作成
*   v1.01       2011/07/28   FJ）富士通    IT1-2011-0000025障害対応
*   v3.00       2012/04/30   FJ）森本      異動理由メモ対応
*   v3.01       2012/08/07   FJ）砂川      【IT1-2012-0000930】AxM連携サービスの分割対応
*	v4.00       2013/01/25   FJ）泉        【IT2-2013-0000036】照査前登録画面から遷移時のEメールの表示件数対応
*	v4.01       2013/01/28   FJ）清崎      【IT1-2013-0000167】キャンセルSOD発行対応
*	v5.00       2013/03/17   FJ）清崎      【ANK-1429-00-00】転居元のメールオプション件数のカウント対応
*	v6.00		2013/10/30	 FJ) 西面	   【IT1-2013-0001648】メールBOX容量計算方法変更対応
*  v32.00       2017/06/28   FJ) 三原      【ANK-3149-20-00】新セキュリティパック導入(メールウイルスチェックの自動登録)
**********************************************************************/
package eo.web.webview.KKW00801SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0001_KKSV0001OPDBMapper;
import eo.web.webview.mapping.KKSV0002_KKSV0002OPDBMapper;



/**
 * Ｅメールのオプション、サブオプションの登録を行う画面です。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW00801SFLogic extends  JCCWebBusinessLogic
{
	/** 顧客契約引継情報項目キー */
	private static final String[] CUST_KEI_HKTGI_KEYS = {
		JKKCommonConst.HKTGI_SYSID,
		JKKCommonConst.HKTGI_SVC_KEI_NO,
		JKKCommonConst.HKTGI_IDO_DIV,
		JKKCommonConst.HKTGI_IDO_RSN_CD,
		JKKCommonConst.HKTGI_OP_SVC_KEI_NO,
		JKKCommonConst.HKTGI_TRAN_DIV,
		JKKCommonConst.HKTGI_MSKM_NO,
		JKKCommonConst.HKTGI_MSKM_DTL_NO,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_NM,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_VALUE
	};

	
	/** コード：有無　の「無」 */
	static final String CD00002_MU = "0";


	/**
	 * 初期表示を行います。
	 * <br>
	 * @return true/false
	 * @exception Exception
	 */
	public boolean actionInit() throws Exception
	{
		
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを取得 
		String screenId = commoninfoBean.sendMessageString( CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE );

		// 遷移先画面IDから、行う表示処理を決定する
		if (JKKScreenConst.SCREEN_ID_KKW00801.equals(screenId)){
		
			actionInitKKW00801();

		}else if(JKKScreenConst.SCREEN_ID_KKW00802.equals(screenId)){
		
		}else if(JKKScreenConst.SCREEN_ID_KKW00803.equals(screenId)){

		}
		
		return true;
		
	}



	/**
	 * KKW00801起動処理
	 * 
	 * @return true/false
	 * @exception Exception
	 */
	private boolean actionInitKKW00801() throws Exception
	{
		// ユースケースID格納用のHashMap
		HashMap<String, Object> paramMap = null;
		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = null;
		// サービス呼出結果を格納するHashMap
		HashMap<String, Object> outputMap = null;

		inputMap = new HashMap<String, Object>();
		outputMap = new HashMap<String, Object>();
		paramMap = new HashMap<String, Object>();

		// 運用日付を取得
		String unyo_ymd = JCCWebCommon.getOpeDate(this, null);

		// サービスフォームBean アクセスクラスの取得
		// 第1引数：サービスフォームID
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean =
		{
			svcFormBean
		};

		// Sessionからの引継情報受け取り
		initDataKKW00801SFBean(svcFormBean);

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0001);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0001);

		// 運用年月日を設定
		svcFormBean.sendMessageString(KKW00801SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, unyo_ymd);

		// 上りマッピング処理開始
		KKSV0001_KKSV0001OPDBMapper mapper = new KKSV0001_KKSV0001OPDBMapper();

		// EKK0081A010 サービス契約一意照会
		mapper.setKKSV000101SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		// EKK0811A010 料金コース_オプションサービス一意照会
		mapper.setKKSV000102SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		// EKK0451B010 割引サービス契約一覧照会（割引サービス指定）
		mapper.setKKSV000103SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		// EZM0171B010 コード名称管理一覧照会（ウィルスチェック有無）
		mapper.setKKSV000105SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// EKK0321B002 課金先一覧照会（請求契約番号・サービス契約番号）
		mapper.setKKSV000106SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// EKK0351B002 オプションサービス契約一覧照会（サービス契約番号）
		mapper.setKKSV000107SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);		//2011-11-16

		// EKK1091B001 進捗一覧照会
		mapper.setKKSV000108SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);		//2012-02-20 ST2-2012-0000185対応

		// EKK0021A010 申込明細一意照会
		mapper.setKKSV000109SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);		//2012-02-20 ST2-2012-0000185対応

		// ANK-1429-00-00 2013/03/17 ADD START
		// 転居元Ｅメール情報件数取得部品
		mapper.setKKSV000110CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);		//2012-02-20 ST2-2012-0000185対応
		// ANK-1429-00-00 2013/03/17 ADD END
		
		//ANK-3149-20-00 ADD START
		// EKK0451B010 割引サービス契約一覧照会（割引サービス指定）
		mapper.setKKSV000110SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// EKK0451B010 割引サービス契約一覧照会（割引サービス指定）
		mapper.setKKSV000111SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		//ANK-3149-20-00 ADD END
		
		// サービス呼出処理
		invokeService(paramMap, inputMap, outputMap);

		// 下りマッピング
		// IT2-2013-0000167 2013/01/28 MOD START
		//mapper.getKKSV000101SC(paramBean, outputMap);
		mapper.getKKSV000101SC(paramBean, outputMap);
		// IT2-2013-0000167 2013/01/28 MOD END
		mapper.getKKSV000102SC(paramBean, outputMap);
		mapper.getKKSV000103SC(paramBean, outputMap);
		mapper.getKKSV000104SC(paramBean, outputMap);
		mapper.getKKSV000105SC(paramBean, outputMap);
		mapper.getKKSV000106SC(paramBean, outputMap);
		mapper.getKKSV000107SC(paramBean, outputMap);		//2011-11-16
		mapper.getKKSV000108SC(paramBean, outputMap);		//2012-02-20 ST2-2012-0000185対応
		mapper.getKKSV000109SC(paramBean, outputMap);		//2012-02-20 ST2-2012-0000185対応
		//ANK-3149-20-00 ADD START
		//isExistsFamilyPackはファミリーパック、セキュリティーパック、プレミアムパックのいずれかを持っているときtrue。
		//getKKSV000103SCでウイルスチェック固定フラグがfalseのとき実行する
		boolean isExistsFamilyPack = svcFormBean.sendMessageBoolean(KKW00801SFConst.VIRUS_CHK_ENABLED,X31CWebConst.DATABEAN_GET_VALUE);
		if (!isExistsFamilyPack)
		{
			mapper.getKKSV000110SC(paramBean, outputMap);
		}
		//getKKSV000103SC、getKKSV000110SCでウイルスチェック固定フラグがfalseのとき実行する
		isExistsFamilyPack = svcFormBean.sendMessageBoolean(KKW00801SFConst.VIRUS_CHK_ENABLED,X31CWebConst.DATABEAN_GET_VALUE);
		if (!isExistsFamilyPack)
		{
			mapper.getKKSV000111SC(paramBean, outputMap);
		}
		//ANK-3149-20-00 ADD END


		//初期表示サービスの取得データをサービスフォームBeanにセット
		editServiceFormBean(svcFormBean, outputMap, unyo_ymd);

		return true;
	}



	/**
	 * 
	 * @param svcFormBean
	 * @param outputMap
	 * @param unyo_ymd
	 * @throws Exception
	 */
	private void editServiceFormBean(X31SDataBeanAccess svcFormBean, HashMap<String,Object> outputMap, String unyo_ymd) throws Exception
	{
		// ファミリーパック契約の有無
		boolean isExistsFamilyPack = false;
		isExistsFamilyPack = svcFormBean.sendMessageBoolean(KKW00801SFConst.VIRUS_CHK_ENABLED,
					X31CWebConst.DATABEAN_GET_VALUE);


		//メールボックス容量選択値のオプション値を計算
		TreeMap<Integer, String> mlbox_op_list = calclulateMailBoxCapacities(svcFormBean);
		Set<Entry<Integer, String>> mlboxMap = mlbox_op_list.entrySet();
		Integer free_mlbox_capa = getFreeMailBoxCapacity(svcFormBean);

		//有無
		TreeMap<Integer, String> umu_op_list = getCD00002DisplayValue(svcFormBean);
		Set<Entry<Integer,String>> umuMap = umu_op_list.entrySet();


		// 画面表示用データを作成
		X31SDataBeanAccessArray mladList = svcFormBean.getDataBeanArray(KKW00801SFConst.MLAD_LIST);
		mladList.clearArray();
		String unyoYYYY = unyo_ymd.substring(0, 4);
		String unyoMM = unyo_ymd.substring(4, 6);
		String unyoDD = unyo_ymd.substring(6, 8);

		//登録可能件数を算出
		int maxCnt = svcFormBean.sendMessageLong(KKW00801SFConst.MLAD_REG_OK_CNT, X31CWebConst.DATABEAN_GET_VALUE).intValue();
		
		// ANK-1429-00-00 2013/03/17 ADD START
		//転居元のメールオプション件数を算出
		HashMap tkmMailCntMap = (HashMap) outputMap.get("TenkyomtEmailInfoNumCC");
		int tkmMailCnt = (Integer) tkmMailCntMap.get("tkm_mail_num");
		// ANK-1429-00-00 2013/03/17 ADD END
		X31SDataBeanAccessArray ekk0351b002List = svcFormBean.getDataBeanArray(KKW00801SFConst.EKK0351B002CBSMSG1LIST);
		int regCnt = ekk0351b002List.getCount().intValue();
		
		// IT2-2013-0000036 2013/01/25 ADD START
		X31SDataBeanAccess ekk0351b002Inf = null;
		String opSvcKeiStat = "";
		int addCnt = 0;
		
		for (int i = 0; i < regCnt; i++)
		{
			ekk0351b002Inf = ekk0351b002List.getDataBean(i);
			opSvcKeiStat = ekk0351b002Inf.sendMessageString(KKW00801SFConst.OP_SVC_KEI_STAT_06, X31CWebConst.DATABEAN_GET_VALUE);
			
			if (!(JKKCommonConst.SVC_KEI_STAT_910.equals(opSvcKeiStat) || JKKCommonConst.SVC_KEI_STAT_920.equals(opSvcKeiStat)))			
			{
				addCnt++;
			}		
		}
		// IT2-2013-0000036 2013/01/25 ADD END
		
		// ANK-1429-00-00 2013/03/17 MOD START
//		maxCnt -= addCnt;
		maxCnt -= addCnt += tkmMailCnt;
		// ANK-1429-00-00 2013/03/17 MOD END

		for (int cntf = 0; cntf < maxCnt; cntf ++)
		{
			X31SDataBeanAccess subbean = mladList.addDataBean();
			// 利用開始年月日を設定
			subbean.sendMessageString(KKW00801SFConst.USE_STAYMD_YEAR_01, X31CWebConst.DATABEAN_SET_VALUE, unyoYYYY);
			subbean.sendMessageString(KKW00801SFConst.USE_STAYMD_MON_01, X31CWebConst.DATABEAN_SET_VALUE, unyoMM);
			subbean.sendMessageString(KKW00801SFConst.USE_STAYMD_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, unyoDD);

			String selectedInd = null;
			String selectedVal = null;

			// メールボックス容量のオプション値を設定
			X31SDataBeanAccessArray mlboxArr = subbean.getDataBeanArray(KKW00801SFConst.MLBOX_CAP_OP_LIST);
			mlboxArr.clearArray();
			int cnt1 = 0;
			for (Entry<Integer, String> entr: mlboxMap)
			{
				String buf = Integer.toString(cnt1+1);

				X31SDataBeanAccess opBean = mlboxArr.addDataBean();
				
				String mbVal = String.valueOf(entr.getKey());

				//メールボックス容量オプション名
				StringBuilder hoge = new StringBuilder(buf).append(". ").append(entr.getValue());
				opBean.sendMessageString(KKW00801SFConst.PD_OP_NM_02, X31CWebConst.DATABEAN_SET_VALUE, hoge.toString());
				opBean.sendMessageString(KKW00801SFConst.PD_ID_02, X31CWebConst.DATABEAN_SET_VALUE, mbVal);

				if (entr.getKey().intValue() <= free_mlbox_capa.intValue())
				{
					selectedInd = String.valueOf(cnt1);
					selectedVal = mbVal;
				}

				cnt1 ++;
			}
			subbean.sendMessageString(KKW00801SFConst.MLBOX_CAPA_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, selectedInd);
			subbean.sendMessageString(KKW00801SFConst.MLBOX_CAPA_MB_01, X31CWebConst.DATABEAN_SET_VALUE, selectedVal);

			// ウィルスチェック有無のオプション値を設定
			X31SDataBeanAccessArray virusChkArr = subbean.getDataBeanArray(KKW00801SFConst.VIRUS_CHK_OP_LIST);
			virusChkArr.clearArray();
			selectedInd = null;
			for (Entry<Integer, String> entr: umuMap)
			{
				String buf = String.valueOf(entr.getKey());
				if (CD00002_MU.equals(buf) && isExistsFamilyPack) {
					// ファミリーパック契約が存在する場合、ウィルスチェック有無コンボは有のみとする
					continue;
				}
				X31SDataBeanAccess opBean = virusChkArr.addDataBean();
				StringBuilder hoge = new StringBuilder(buf).append(". ").append(entr.getValue());
				opBean.sendMessageString(KKW00801SFConst.PD_OP_NM_02, X31CWebConst.DATABEAN_SET_VALUE, hoge.toString());
				opBean.sendMessageString(KKW00801SFConst.PD_ID_02, X31CWebConst.DATABEAN_SET_VALUE, buf);
				if (selectedInd == null)
				{
					selectedInd = buf;
				}
			}
			subbean.sendMessageString(KKW00801SFConst.VIRUS_CHK_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, selectedInd);
		}

		// 請求契約番号の取得
		X31SDataBeanAccessArray seiky_kei_Info = svcFormBean.getDataBeanArray(KKW00801SFConst.KAKINS_LIST);
		X31SDataBeanAccess seiky_kei_subbean = seiky_kei_Info.getDataBean(0);

		String seiky_kei_no = seiky_kei_subbean.sendMessageString(KKW00801SFConst.SEIKY_KEI_NO_05, X31CWebConst.DATABEAN_GET_VALUE);
		svcFormBean.sendMessageString(KKW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiky_kei_no);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
	}



	/**
	 * 
	 * @param svcFormBean
	 * @return
	 */
	private TreeMap<Integer, String> getCD00002DisplayValue(X31SDataBeanAccess svcFormBean)
	{
		TreeMap<Integer, String> retMap = new TreeMap<Integer, String>();
		
		//コード名称管理照会結果
		X31SDataBeanAccessArray arr = svcFormBean.getDataBeanArray(KKW00801SFConst.VIRUS_CHK_UMU_LIST);
		
		for (int i = 0; i < arr.getCount(); i ++)
		{
			X31SDataBeanAccess bean = arr.getDataBean(i);
			//コード区分値
			String n = bean.sendMessageString(KKW00801SFConst.CD_DIV_03, X31CWebConst.DATABEAN_GET_VALUE);
			//コード区分名
			String e = bean.sendMessageString(KKW00801SFConst.CD_DIV_NM_03, X31CWebConst.DATABEAN_GET_VALUE);
			retMap.put(Integer.valueOf(n), e);
		}

		return retMap;
	}



	/**
	 * 
	 * @param svcFormBean
	 * @return
	 */
	private Integer getFreeMailBoxCapacity(X31SDataBeanAccess svcFormBean)
	{
		//料金コース＿サブオプションサービス一覧照会結果
		X31SDataBeanAccessArray arr = svcFormBean.getDataBeanArray(KKW00801SFConst.EKK1881B001CBSMSG1LIST);
		X31SDataBeanAccess bean = arr.getDataBean(0);		//「メールボックス」だけなので１件のはず

		//無料値
		String freeVal = bean.sendMessageString(KKW00801SFConst.SVCTK_BUT_MRYO_VALUE_07, X31CWebConst.DATABEAN_GET_VALUE);

		return Integer.valueOf(freeVal);
	}



	/**
	 * 
	 * @param svcFormBean
	 * @return
	 */
	private TreeMap<Integer, String> calclulateMailBoxCapacities(X31SDataBeanAccess svcFormBean)
	{
		TreeMap<Integer, String> ret = new TreeMap<Integer, String>();
		
		//料金コース＿サブオプションサービス一覧照会結果
		X31SDataBeanAccessArray arr = svcFormBean.getDataBeanArray(KKW00801SFConst.EKK1881B001CBSMSG1LIST);
		X31SDataBeanAccess bean = arr.getDataBean(0);		//「メールボックス」だけなので１件のはず
		
		//初期値
		String iniVal = bean.sendMessageString(KKW00801SFConst.SVCTK_BUT_SHK_VALUE_07, X31CWebConst.DATABEAN_GET_VALUE);
		int iniInt = Integer.parseInt(iniVal);
		//最大値
		String maxVal = bean.sendMessageString(KKW00801SFConst.SVCTK_BUT_MAX_VALUE_07, X31CWebConst.DATABEAN_GET_VALUE);
		int maxInt = Integer.parseInt(maxVal);
		//増減値
		String incVal = bean.sendMessageString(KKW00801SFConst.SVCTK_BUT_ZOUGEN_VALUE_07, X31CWebConst.DATABEAN_GET_VALUE);
		int incInt = Integer.parseInt(incVal);

		for (int i = iniInt; i < maxInt; i += incInt)
		{
			ret.put(Integer.valueOf(i), fineCapa(i));
		}
		ret.put(Integer.valueOf(maxInt), fineCapa(maxInt));

		// 初期容量を設定（オプションサービス契約．容量への設定用）
		svcFormBean.sendMessageString(KKW00801SFConst.SHK_CAPA, X31CWebConst.DATABEAN_SET_VALUE, iniVal);

		return ret;
	}



	/**
	 * 
	 * @param i
	 * @return
	 */
	private String fineCapa(int i)
	{
		String ret;

		if (i >= 1000)
		{
			//IT1-2013-0001648 2013/10/30 MOD START
			//float p = ((float)i) / 1000.0F;
			float p = ((float)i) / 1024.0F;
			//IT1-2013-0001648 2013/10/30 MOD END
			int finep = (int)(p * 10.0F);		//小数点２位以下を切り捨て
			p = (float)finep / 10.0F;
			ret = String.valueOf(p) + "GB";
		}
		else
		{
			ret = String.valueOf(i) + "MB";
		}

		return ret;
	}



	/**
	 * 引き継ぎ情報を取得し、サービスフォームBeanに設定する
	 * @param  svcFormBean  DataBeanアクセスクラス
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception 
	 */
	public void initDataKKW00801SFBean(X31SDataBeanAccess svcFormBean) throws Exception
	{

		// 引継ぎデータ
		JCCWebCommon.getScreenInfo(this);

		// 引継ぎ項目の情報からデータ移し変え
		getSessionKKW00801SFBean(svcFormBean);

	}

	/**
	 * 登録ボタン押下時に項目のチェックを行います。 <br>
	 * 
	 * @return true/false
	 * @exception Exception
	 */
	public boolean actionAddEmailInfo() throws Exception
	{
		callKKSV0002(JPCModelConstant.FUNC_CD_2);
		return true;
	}

	/**
	 * 確定ボタン押下時にデータの登録を行います。
	 * <br>
	 * @return true/false
	 * @exception Exception
	 */
	public boolean actionFixEmailInfo() throws Exception
	{
		callKKSV0002(JPCModelConstant.FUNC_CD_1);
		return true;
	}



	/**
	 * Eメール登録確認サービスをCALLします
	 * 
	 * @param funcCode
	 *            機能コード
	 */
	private void callKKSV0002(String funcCode)
	{

		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean =
		{
			svcFormBean
		};

		// 運用日付を取得
		String unyo_ymd = JCCWebCommon.getOpeDate(this, null);
		String unyo_dtm = JCCWebCommon.getOpeDateTimeStamp(this, null);	//unyo_ymd + "000000000";

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0002);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0002);

		// 運用年月日を設定
		svcFormBean.sendMessageString(KKW00801SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, unyo_ymd);
		svcFormBean.sendMessageString(KKW00801SFConst.UNYO_DTM, X31CWebConst.DATABEAN_SET_VALUE, unyo_dtm);

		X31SDataBeanAccessArray mladList = svcFormBean.getDataBeanArray(KKW00801SFConst.MLAD_LIST);


		for (int i = 0; i < mladList.getCount().intValue(); i++)
		{
			X31SDataBeanAccess mladInfo = mladList.getDataBean(i);
			
			String selCapaValue = "";		//表示用メールボックス容量
			String selCapaMb = "0";			//登録用メールボックス容量値[MB]
			String selVirusValue = "";		//表示用ウィルスチェック有無
			
			//メールアドレス（入力）
			String mlad = mladInfo.sendMessageString(KKW00801SFConst.MLAD_ACCOUNT_01, X31CWebConst.DATABEAN_GET_VALUE);

			if (mlad != null && 0 < mlad.length())
			{
				// 選択番号よりインデックスを取得
				int selCapaIndex = Integer.parseInt(mladInfo.sendMessageString(KKW00801SFConst.MLBOX_CAPA_INDEX_01,
						X31CWebConst.DATABEAN_GET_VALUE));
				int selVirusIndex = Integer.parseInt(mladInfo.sendMessageString(KKW00801SFConst.VIRUS_CHK_INDEX_01,
						X31CWebConst.DATABEAN_GET_VALUE));
	
				// インデックスより表示名称を取得
				//メールＢＯＸ容量
				X31SDataBeanAccessArray mlboxCapaList = mladInfo.getDataBeanArray(KKW00801SFConst.MLBOX_CAP_OP_LIST);
				X31SDataBeanAccess bean = mlboxCapaList.getDataBean(selCapaIndex);
				selCapaValue = bean.sendMessageString(KKW00801SFConst.PD_OP_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
				selCapaMb = bean.sendMessageString(KKW00801SFConst.PD_ID_02, X31CWebConst.DATABEAN_GET_VALUE);
				//ウィルスチェック
				X31SDataBeanAccessArray virusChkList = mladInfo.getDataBeanArray(KKW00801SFConst.VIRUS_CHK_OP_LIST);
				bean = virusChkList.getDataBean(selVirusIndex);
				selVirusValue = bean.sendMessageString(KKW00801SFConst.PD_OP_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
			}

			// 表示用項目を設定
			mladInfo.sendMessageString(KKW00801SFConst.MLBOX_CAPA_VALUE_01, X31CWebConst.DATABEAN_SET_VALUE, selCapaValue);
			mladInfo.sendMessageString(KKW00801SFConst.VIRUS_CHK_VALUE_01, X31CWebConst.DATABEAN_SET_VALUE, selVirusValue);
			//登録用メールボックス容量値[MB]
			mladInfo.sendMessageString(KKW00801SFConst.MLBOX_CAPA_MB_01, X31CWebConst.DATABEAN_SET_VALUE, selCapaMb);
		}

		// start FJ)森本 v3.00.00 申込画面入力支援ワーク情報更新CC対応
		// ネットタブオプション情報制御コードに"1"を設定
		svcFormBean.sendMessageString(KKW00801SFConst.NET_TAB_OP_IF_CTL_CD, X31CWebConst.DATABEAN_SET_VALUE, "1");
		// end FJ)森本 v3.00.00　申込画面入力支援ワーク情報更新CC対応

		// 上りマッピング処理開始
		KKSV0002_KKSV0002OPDBMapper mapper = new KKSV0002_KKSV0002OPDBMapper();

		// KKSV0002 Eメール情報登録確認サービス
		mapper.setKKSV000201CC(paramBean, inputMap, funcCode);

		// start FJ)森本 v3.00.00 申込画面入力支援ワーク情報更新CC対応
		// 申込画面入力支援ワーク情報更新CC
		mapper.setUpdMkmScinsprtWkCC(paramBean, inputMap, funcCode);	
		// end FJ)森本 v3.00.00　申込画面入力支援ワーク情報更新CC対応

		// サービス呼出処理
		invokeService(paramMap, inputMap, outputMap);

		// KKSV0002 Eメール情報登録確認サービス
		mapper.getKKSV000201CC(paramBean, outputMap);

		// IT1-2012-0000930 ADD START
		if(JPCModelConstant.FUNC_CD_1.equals(funcCode))
		{
			exeAxmRenkei(paramBean, inputMap, outputMap);
		}
		// IT1-2012-0000930 ADD END

		// /// メッセージ表示処理 /////
		String[] str =
		{
			KKW00801SFConst.FIX_MSG
		};
		
		//登録しますか？　メッセージ
		String msgid = "EKB0370--I";
		String nextId = JKKScreenConst.SCREEN_ID_KKW00802;
		String nextNm = JKKScreenConst.SCREEN_NAME_KKW00802;

		//確定の場合、「登録完了」メッセージを設定
		if (JPCModelConstant.FUNC_CD_1.equals(funcCode))
		{
			nextId = JKKScreenConst.SCREEN_ID_KKW00803;
			nextNm = JKKScreenConst.SCREEN_NAME_KKW00803;
			msgid = "EKB4390--I";
		}

		// DataBean設定処理
		setCmnInfoBean(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextId);
		setCmnInfoBean(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, nextNm);

		JCCWebCommon.setMessageInfo(this, msgid, str);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
	}



	/**
	 * 修正ボタン押下時に遷移元画面の処理を行います。
	 * <br>
	 * @return true/false
	 * @exception Exception
	 */
	public boolean actionModEmailInfo() throws Exception
	{
		
		// 共有フォームBean設定（遷移先画面ID）
		setCmnInfoBean(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00801);
		setCmnInfoBean(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00801);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
	}
	
	/**
	 * 完了ボタン押下時にオプションサービス契約一覧照会画面に遷移を行います。
	 * <br>
	 * @return true/false
	 * @exception Exception
	 */
	public boolean actionFinEmailInfo() throws Exception
	{
		
		// 共有フォームBean設定（遷移先画面ID）
		setCmnInfoBean(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
		setCmnInfoBean(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02301);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
	}
	
	/**
	 * 遷移元画面に戻る処理を行います。
	 * <br>
	 * @return true/false
	 */
	/* +++++++++++++++++ v1.01.00 修正開始 +++++++++++++++++ */
//	public boolean actionback()
	public boolean actionBack()
	/* +++++++++++++++++ v1.01.00 修正終了 +++++++++++++++++ */
	{
		
		//共有フォームBean設定()
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		commonBean.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;
	}
	
	/**
	 * 共通ＢＥＡＮへデータをセットします。
	 * <br>
	 * @param componentID データをセットする共通ＢＥＡＮの項目
	 * @param eventID 配列型ではない項目の値をvalueで指定した値に変更する
	 * @param values 共通ＢＥＡＮにセットする値
	 */
	private void setCmnInfoBean(String componentID, String eventID, String values)
	{

		//共有Beanの呼出し
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		//共有BeanのSCREEN_ID、SCREEN_NMに遷移先の画面IDをセット
		//画面遷移ID受渡の場合第1引数：共有Bean項目名、第2引数：SET_VALUE or GET_VALUE、第3引数：遷移先画面ID
		//第1引数：共有Bean項目名、第2引数：SET_VALUE or GET_VALUE、第3引数：遷移先画面名
		commoninfoBean.sendMessageString(componentID, eventID, values);
	}

	/**	
	 * 引き継ぎ情報を取得し、サービス契約情報更新(eo光ネット)サービスフォームBeanに設定する	
	 * @param  svcFormBean  DataBeanアクセスクラス	
	 * @throws Exception 	
	 */	
	private void getSessionKKW00801SFBean(X31SDataBeanAccess svcFormBean) throws Exception	
	{
		String str = null;
		Integer maxIndex = null;
		
		// 引継情報を取得
		HashMap<String, Object> map = JCCWebCommon.getScreenInfo(this);
		X31SDataBeanAccessArray custKeiHktgiList =  svcFormBean.getDataBeanArray(KKW00801SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);

		String ido_div = custKeiHktgiInf.sendMessageString(KKW00801SFConst.IDO_DIV_04, X31CWebConst.DATABEAN_GET_VALUE);
		String sys_id  = custKeiHktgiInf.sendMessageString(KKW00801SFConst.SYSID,   X31CWebConst.DATABEAN_GET_VALUE);
		String svc_Kei_No = custKeiHktgiInf.sendMessageString(KKW00801SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		String tranDiv = custKeiHktgiInf.sendMessageString(KKW00801SFConst.TRAN_DIV_04, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 引継情報をDataBeanに設定
		svcFormBean.sendMessageString(KKW00801SFConst.IDO_DIV_04, X31CWebConst.DATABEAN_SET_VALUE, ido_div);
		svcFormBean.sendMessageString(KKW00801SFConst.SYSID, X31CWebConst.DATABEAN_SET_VALUE, sys_id);
		svcFormBean.sendMessageString(KKW00801SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svc_Kei_No);
		svcFormBean.sendMessageString(KKW00801SFConst.TRAN_DIV_04, X31CWebConst.DATABEAN_SET_VALUE, tranDiv);

		// ▼異動理由メモ対応 Start
		String ido_rsn_memo = custKeiHktgiInf.sendMessageString(KKW00801SFConst.IDO_RSN_MEMO_04, X31CWebConst.DATABEAN_GET_VALUE);
		// ▲異動理由メモ対応 End
		
		maxIndex = (Integer) custKeiHktgiInf
				.sendMessage(KKW00801SFConst.IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_COUNT);

		for(int i = 0 ; i < maxIndex.intValue(); i ++){
			str = custKeiHktgiInf.sendMessageString(KKW00801SFConst.IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_VALUE, i);
			svcFormBean.sendMessageString(
					KKW00801SFConst.IDO_RSN_CD_04,
					X31CWebConst.DATABEAN_ADD_VALUE, 
					i, 
					str
					);
			// ▼異動理由メモ対応 Start
			// 異動理由.異動理由メモの設定
			svcFormBean.sendMessageString(KKW00801SFConst.IDO_RSN_MEMO_04, X31CWebConst.DATABEAN_SET_VALUE, ido_rsn_memo);
			// ▲異動理由メモ対応 End
		}
		
	}

	/**	
	 * <dd>メソッド名：引継情報データマップ取得
	 * <dd>メソッド説明：引数のサービスフォームBeanより引継情報データマップの生成を行う。
	 * <dd>備考：引継情報データタイプの可変項目はString[]のみ対応。
	 * @param bean サービスフォームBean
	 * @param hktgiKey 引継情報データタイプのキー
	 * @param hktgiPrmKeys 引継情報データタイプの項目キーリスト	
	 * @return HashMap<String, Object> 引継情報データマップ
	 */
	private HashMap<String, Object> getHktgiDataMap(X31SDataBeanAccess bean, String hktgiKey , String[] hktgiPrmKeys)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();

		X31SDataBeanAccessArray infList =  bean.getDataBeanArray(hktgiKey);
		for (int i = 0 ; i < infList.getCount() ; i++)
		{
			HashMap<String, Object> inMap = new HashMap<String, Object>();

			X31SDataBeanAccess inf = infList.getDataBean(i);
			for (int j = 0 ; j < hktgiPrmKeys.length ; j++)	
			{
				try
				{
					inMap.put(hktgiPrmKeys[j], inf.sendMessageObject(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE));
				}
				catch (X31SRuntimeException ex)	
				{
					// 可変項目の場合(String[]のみ対応)	
					int length = (Integer)inf.sendMessage(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_COUNT);
					String[] obj = new String[length];
					for (int k = 0 ; k < length ; k++)
					{
						obj[k] = inf.sendMessageString(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE, k);
					}
					inMap.put(hktgiPrmKeys[j], obj);
				}
			}
			dataList.add(inMap);
		}
		dataMap.put(hktgiKey, dataList);

		return dataMap;	
	}
	// IT1-2012-0000930 ADD START
	/**
	 * AxM連携サービスの呼出処理
	 * @param paramBean DataBeanアクセス配列
	 * @return なし
	 */
	@SuppressWarnings("unchecked")
	private void exeAxmRenkei(X31SDataBeanAccess[] paramBean, HashMap inputMap, HashMap outputMap)
	{
		// 登録実行後の結果マップを取得
		HashMap resMap = (HashMap)outputMap.get("KKSV000201CC");
		if(resMap == null || resMap.get("JKKEmailInfoAddCfmCCList") == null)
		{
			return;
		}
		ArrayList resList = (ArrayList)resMap.get("JKKEmailInfoAddCfmCCList");
		if(resList == null || resList.get(0) == null)
		{
			return;
		}
		HashMap resSubMap = (HashMap)resList.get(0);
		// メールアドレスドメインがない場合（照査前の場合）はAxM連携を実施しない
		if(resSubMap == null || resSubMap.get("mlad_domain") == null || "".equals(resSubMap.get("mlad_domain")))
		{
			return;
		}
		
		// 登録用入力データから即日登録の有無を確認し、AxM連携処理を実施する
		HashMap addMap = (HashMap)inputMap.get("KKSV000201CC");
		if(addMap == null || addMap.get("JKKEmailInfoAddCfmCCList") == null)
		{
			return;
		}
		ArrayList addList = (ArrayList)addMap.get("JKKEmailInfoAddCfmCCList");
		HashMap addSubMap = null;
		String use_start_y = null;
		String use_start_m = null;
		String use_start_d = null;
		String use_start_ymd = null;
		String unyo_ymd = paramBean[0].sendMessageString(KKW00801SFConst.UNYO_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		for(int i = 0; i < addList.size(); i++)
		{
			use_start_ymd = "";
			
			addSubMap = (HashMap)addList.get(i);
			if(addSubMap == null)
			{
				continue;
			}
			use_start_y = (String)addSubMap.get("use_staymd_year");
			use_start_m = (String)addSubMap.get("use_staymd_mon");
			use_start_d = (String)addSubMap.get("use_staymd_day");
			use_start_ymd = use_start_y + use_start_m + use_start_d;
			
			// 即時登録の場合にのみAxM連携処理を実施
			if(use_start_ymd.equals(unyo_ymd))
			{
				// サービス呼び出しの際の引数を生成
				HashMap paramMap2 = new HashMap();
				HashMap inputMap2 = new HashMap();
				HashMap outputMap2 = new HashMap();

				// サービスIDのセット
				paramMap2.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CKSV9001");
				paramMap2.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "CKSV9001OP");

				// サービスへのデータセット
				HashMap mapRenkeiCC = new HashMap();
				inputMap2.put("CKSV900101CC", mapRenkeiCC);
				mapRenkeiCC.put("upd_trgt_sysid", paramBean[0].sendMessageString(KKW00801SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE));

				// AxM連携サービスの呼出
				X31CMessageResult msgResult2 = invokeService(paramMap2, inputMap2, outputMap2);

				return;
			}
		}
	}
	// IT1-2012-0000930 ADD END
}

