/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：エリアリクエスト取消
*   ソースファイル名：FUW00401SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年02月13日
*＜機能概要＞
*   エリアリクエスト取消の画面制御を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.01.00    2012/08/02   FJ）大塚    「案件番号：ANK-0329-00-00」フロント受付システム24時間365日稼動対応
*   v4.02.00    2012/12/08   FJ) 楠本    【IT2-2012-0001881】お客様名全角混入対応
*   v4.03.00    2012/12/23   FJ）藤原    「対策番号：TAI-2012-0000136-163」エリアリクエスト入力への遷移対応
*   v4.04.00    2013/01/11   FJ）齋藤    「障害番号：ST2-2013-0000031」メール住所3(建物・部屋番号)未設定障害対応
*   v4.05.00    2013/01/17   FJ) 藤原    「障害番号：ST2-2013-0000033」メール送信設定変更対応
*   v4.06.00    2013/02/07   FJ) 齋藤    「障害番号：品質強化-No.357」引継項目一部初期化処理障害対応
*   v6.00.00    2013/12/20   FJ) 文元    「障害番号：OM-2013-0005102」同一問合せ客エリアリクエスト登録対応（問合せ番号未設定を、設定するよう変更)
*   v7.00       2014/01/27   FJ）中谷    【OM-2014-0000310】メール送信登録の別トランザクション対応
**********************************************************************/

package eo.web.webview.FUW00401SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
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.JFUStrConst;
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.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0195_FUSV0195OPDBMapper;
import eo.web.webview.mapping.FUSV0196_FUSV0196OPDBMapper;

/**
 * エリアリクエスト取消画面のVIEWロジックです。
 * <br>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00401SFLogic extends JCCWebBusinessLogic
{
	/** 表示する */
	private final static Boolean DISP_ON = true;

	/** 表示しない */
	private final static Boolean DISP_OFF = false;

	/** リクエストパラメータ */
	private final static String REQ_ID = "id";

	/** ユースケースID（FUSV0195） */
	private static final String USECASE_ID_FUSV0195 = "FUSV0195";

	/** ユースケースID（FUSV0196） */
	private static final String USECASE_ID_FUSV0196 = "FUSV0196";
	
	/** CC */
	private static final String FUSV019601CC = "FUSV019601CC";	
	
	/** エリアリクエスト一覧照会明細 */
	private static final String EFU0011B010CBSMsg1List = "EFU0011B010CBSMsg1List";

	/** データタイプビーンの要素番号（問合せ客リスト） */
	private static final Integer PROSCST_LIST_NUMBER = 0;

	/** 分割後氏名の苗字要素番号 **/
	private static final int FAMILY_ARRAY_NUM = 0;

	/** 分割後氏名の名前要素番号 **/
	private static final int FIRST_ARRAY_NUM = 1;

	/** ハイフン */
	private static final String HI_FUN = "-";

	// エリアリクエスト取消登録用定数 
	/** 問合せ内容 **/
	private static final String TOIAWASE_NAIYO = "エリアリクエスト取消";

	// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod Start
	/** APLConst.propertiesから取得するキー(送信元メールアドレス(送信者)) */
	private static final String AREA_REQ_DEL_FROM_MLAD = "AREA_REQ_DEL_FROM_MLAD";

	/** APLConst.propertiesから取得するキー(送信先メールアドレス(送信先)) */
	private static final String AREA_REQ_DEL_TO_MLAD = "AREA_REQ_DEL_TO_MLAD";

	/** APLConst.propertiesから取得するキー(送信先メールアドレス(BCC)) */
	private static final String AREA_REQ_DEL_BCC_MLAD = "AREA_REQ_DEL_BCC_MLAD";
	// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod End

	/** 画面エラー用のid */
	private static final String NAME = "Name";

	/**
	 * エリアリクエスト取消画面（FUW00401）の初期表示処理
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		
		// 共有フォームBean取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		
		// 20130112 Fujiwara Add Start
		// 遷移元画面IDの取得
		String beforeScreenId = JCCWebCommon.getScreenId(this);
		// 20130112 Fujiwara Add End

		// フロント新規設定
		X31SDataBeanAccessArray beanFrontArr = commoninfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO);
		if (beanFrontArr.getCount() == 0)
		{
			beanFrontArr.addDataBean();
		}
		X31SDataBeanAccess beanFront = beanFrontArr.getDataBean(0);
		beanFront.sendMessageString(CommonInfoCFConst.FU_KBN_05, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.FU_KBN_N);

		// リクエストパラメータの取得
		// サンキューメールのリンクから遷移した場合に取得できます。
		String req_param_id = getRequestParams().get(REQ_ID) != null ? String.valueOf(getRequestParams().get(REQ_ID)) : null;

		// サンキューメールのリンクより
		if (req_param_id != null)
		{
			// リクエストパラメータを、サービスフォームBeanのKEY_問合せ客番号に格納する
			serviceFormBean.sendMessageString(FUW00401SFConst.KEY_PROSCST_NO, X31CWebConst.DATABEAN_SET_VALUE, req_param_id);

			// FUSV0195サービスを利用して問合せ客情報を取得する
			FUSV0195_FUSV0195OPDBMapper mapper = new FUSV0195_FUSV0195OPDBMapper(); // 設定値格納用マッパ
			HashMap<String, String> paramMap = new HashMap<String, String>(); // ユースケースIDマップ
			HashMap<String, Object> inputMap = new HashMap<String, Object>(); // 入力データマップ
			HashMap<String, Object> outputMap = new HashMap<String, Object>(); // 結果データマップ
			X31SDataBeanAccess[] beans_can = { serviceFormBean }; // 豆缶（IMRC定義の順序に合わせる事）

			// ユースケースIDをセット
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0195);

			// BPへの上りマッピング
			mapper.setFUSV019501CC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);

			try
			{
				//サービスをキック
				invokeService(paramMap, inputMap, outputMap);
			}
			catch (JCCWebServiceException se)
			{
				// システムエラー
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}

			// BPから下りマッピング
			mapper.getFUSV019501SC(beans_can, outputMap);

			// データタイプBeanの呼出
			X31SDataBeanAccess proscstBean = serviceFormBean.getDataBeanArray(FUW00401SFConst.PROSCSTLIST).getDataBean(PROSCST_LIST_NUMBER);

			// DBより取得した名前を格納
			String name = proscstBean.sendMessageString(FUW00401SFConst.PROSCST_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			String kana = proscstBean.sendMessageString(FUW00401SFConst.PROSCST_KANA_01, X31CWebConst.DATABEAN_GET_VALUE);

			// 名前が存在すれば全角スペースで分けて姓名ごとに分割して格納する
			if (!name.equals(""))
			{
				String[] nameArray = name.split("　");

				serviceFormBean.sendMessageString(FUW00401SFConst.NAME_SEI, X31CWebConst.DATABEAN_SET_VALUE, nameArray[FAMILY_ARRAY_NUM]);
				// 2012/12/08 IT2-2012-0001881 kusumoto Start
				serviceFormBean.sendMessageString(FUW00401SFConst.NAME_MEI, X31CWebConst.DATABEAN_SET_VALUE, (
						name.length() > nameArray[FIRST_ARRAY_NUM].length()+1) ? (name.substring(nameArray[FAMILY_ARRAY_NUM].length()+1,name.length())) : (""));
				// 2012/12/08 IT2-2012-0001881 kusumoto End
			}

			// かなが存在すれば全角スペースで分けて姓名ごとに分割して格納する（格納する際、ひらがなに変換）
			if (!kana.equals(""))
			{
				String[] kanaArray = kana.split("　");

				// 2013/03/21 ST2-2013-0001610 kusumoto Start
				serviceFormBean.sendMessageString(FUW00401SFConst.KANA_SEI, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon
						.convFullKataToFullHiraV(kanaArray[FAMILY_ARRAY_NUM]));
				// 2012/12/08 IT2-2012-0001881 kusumoto Start
				serviceFormBean.sendMessageString(FUW00401SFConst.KANA_MEI, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon
						.convFullKataToFullHiraV((
						kana.length() > kanaArray[FIRST_ARRAY_NUM].length()+1) ? (kana.substring(kanaArray[FAMILY_ARRAY_NUM].length()+1,kana.length())) : ("")));
				// 2012/12/08 IT2-2012-0001881 kusumoto End
				// 2013/03/21 ST2-2013-0001610 kusumoto End
			}
		}

		// 20130112 Fujiwara Mod Start
		if ((req_param_id != null) && (req_param_id.equals("")) ||
				JFUStrConst.EMPTY.equals(beforeScreenId) || beforeScreenId == null)
		{
			// サンキューメールからの遷移の時、または
			// 遷移元画面ＩＤが無い場合、戻るボタンを非表示
			serviceFormBean.sendMessageBoolean(FUW00401SFConst.BACK_BTN_DISP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_OFF);
		}
		// 20130112 Fujiwara Mod End
		else
		{
			// サンキューメール以外からの遷移の時、戻るボタンを表示
			serviceFormBean.sendMessageBoolean(FUW00401SFConst.BACK_BTN_DISP_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_ON);
		}

		/* 2013/02/07 引継項目一部初期化処理障害対応 Y.Saitou ADD-START */
		// 遷移先画面ＩＤ、遷移先画面名を設定（直接画面に遷移してくるので入っていない）
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00401);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00401);
		/* 2013/02/07 引継項目一部初期化処理障害対応 Y.Saitou ADD-END */

		// 業務規制情報を設定する。
		this.setWorkKiseiList();

		return true;
	}

	/**
	 * エリアリクエスト取消(FUW00401) 戻るボタン
	 * 
	 * <br>
	 * @return true
	 */
	public boolean back()
	{
		// 20121223 fujiwara mod start
		// 遷移元画面ＩＤを設定
		JCCWebCommon.setScreenId(this,JFUScreenConst.SCREEN_ID_FUW00302, JFUScreenConst.SCREEN_ID_FUW00401);

		setNextScreen(JFUScreenConst.SCREEN_ID_FUW00302, JFUScreenConst.SCREEN_NAME_FUW00302);
		// 20121223 fujiwara mod end

		return true;
	}

	/**
	 * エリアリクエスト取消(FUW00401) 次へボタン
	 * 
	 * <br>
	 * @return true
	 */
	public boolean next() throws Exception
	{
		Boolean proscstNoFlg = false; // 問合せ客番号存在フラグ true:存在する false:存在しない

		// サービスフォームBean
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 問合せ客番号を取得
		String proscstNo = serviceFormBean.sendMessageString(FUW00401SFConst.KEY_PROSCST_NO, X31CWebConst.DATABEAN_GET_VALUE);

		// 問合せ客番号が存在する場合
		if ((proscstNo != null) && (!proscstNo.equals("")))
		{
			proscstNoFlg = true;
		}

		// 対応履歴に登録する値の取得

		// 問合せ内容
		serviceFormBean.sendMessageString(FUW00401SFConst.CONTOIAWASENAIYOU, X31CWebConst.DATABEAN_SET_VALUE, TOIAWASE_NAIYO);
		// お客様ランクコード
		serviceFormBean.sendMessageString(FUW00401SFConst.CUST_RANK_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CUST_RANK_CD_USUAL);
		// 連絡手段コード
		serviceFormBean.sendMessageString(FUW00401SFConst.RRK_WAY_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.RRK_WAY_CD_OTHER);
		// 削除対象外フラグ
		serviceFormBean.sendMessageString(FUW00401SFConst.DEL_TRGT_GAI_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.DEL_TRGT_GAI_FLG_0);

		// 入力された名前を格納（姓と名の間に全角スペースを挿入）
		String name =
				serviceFormBean.sendMessageString(FUW00401SFConst.NAME_SEI, X31CWebConst.DATABEAN_GET_VALUE).concat("　").concat(
						serviceFormBean.sendMessageString(FUW00401SFConst.NAME_MEI, X31CWebConst.DATABEAN_GET_VALUE));

		// 入力されたかなを格納（姓と名の間に全角スペースを挿入）
		String kana =
				serviceFormBean.sendMessageString(FUW00401SFConst.KANA_SEI, X31CWebConst.DATABEAN_GET_VALUE).concat("　").concat(
						serviceFormBean.sendMessageString(FUW00401SFConst.KANA_MEI, X31CWebConst.DATABEAN_GET_VALUE));

		// 格納した名前とかなをサービスフォームBeanのDB登録用項目に格納（かなは格納の際、カタカナ変換）
		serviceFormBean.sendMessageString(FUW00401SFConst.PROSCST_NM, X31CWebConst.DATABEAN_SET_VALUE, name);
		serviceFormBean.sendMessageString(FUW00401SFConst.PROSCST_KANA, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon
				.convFullHiraToFullKataV(kana));

		// メール設定
		settingMailList(serviceFormBean);

		// 問合せ客番号が存在する場合
		if (proscstNoFlg)
		{
			// エリアリクエスト現在工程コード キャンセル申し出(028)
			serviceFormBean.sendMessageString(FUW00401SFConst.AREA_REQ_NOW_STEP_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD01516_028);
		}

		// FUSV0196サービスを利用してエリアリクエスト取消登録の入力チェックを実施する
		FUSV0196_FUSV0196OPDBMapper mapper = new FUSV0196_FUSV0196OPDBMapper(); // 設定値格納用マッパ
		HashMap<String, String> paramMap = new HashMap<String, String>(); // ユースケースIDマップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>(); // 入力データマップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>(); // 結果データマップ
		X31SDataBeanAccess[] beans_can = { serviceFormBean }; // IMRCでマッピングしたBeanの配列（IMRC定義の順序に合わせる事）

		// ユースケースIDをセット
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0196);

		// 上りマッパを使ってマッピングしたBean配列内の引数をサービスへ渡す手続き

		// 問合せ客番号が存在する場合
		if (proscstNoFlg)
		{
			mapper.setFUSV019601CC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
			mapper.setFUSV019604SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_2);
		}
		mapper.setFUSV019602SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV019603SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV019605SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_2);

		// サービスＩＦによる入力チェック
		try
		{
			//サービスをキック
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 問合せ客番号が存在する場合
		if (proscstNoFlg)
		{
			// エリアリクエスト工程チェック
			if (!chkAreaNeqCowCtepCd(outputMap))
			{
				// エリアリクエストチェックエラー表示 メッセージIDがないのでコメントアウトにしておく。
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF1700_KW, NAME);
				this.setNextScreen(JFUScreenConst.SCREEN_ID_FUW00401, JFUScreenConst.SCREEN_NAME_FUW00401);
				return true;
			}
		}
		// エリアリクエスト工程チェックが問題ない場合、次の画面へ遷移する。
		setNextScreen(JFUScreenConst.SCREEN_ID_FUW00402, JFUScreenConst.SCREEN_NAME_FUW00402);

		return true;
	}

	/**
	 * エリアリクエスト取消(FUW00402) 戻るボタン
	 * 
	 * <br>
	 * @return true
	 */
	public boolean back_402()
	{
		initPartServiceBean();

		setNextScreen(JFUScreenConst.SCREEN_ID_FUW00401, JFUScreenConst.SCREEN_NAME_FUW00401);

		return true;
	}

	/**
	 * エリアリクエスト取消(FUW00402) 完了ボタン
	 * 
	 * <br>
	 * @return true
	 */
	public boolean next_402() throws Exception
	{
		// サービスフォームBean
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// FUSV0196サービスを利用してエリアリクエスト取消登録を実施する
		FUSV0196_FUSV0196OPDBMapper mapper = new FUSV0196_FUSV0196OPDBMapper(); // 設定値格納用マッパ
		HashMap<String, String> paramMap = new HashMap<String, String>(); // ユースケースIDマップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>(); // 入力データマップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>(); // 結果格納用マップを生成
		X31SDataBeanAccess[] beans_can = { serviceFormBean }; // IMRCでマッピングしたBeanの配列（IMRC定義の順序に合わせる事）

		// 問合せ客番号を取得
		String proscstNo = serviceFormBean.sendMessageString(FUW00401SFConst.KEY_PROSCST_NO, X31CWebConst.DATABEAN_GET_VALUE);

		// ユースケースIDをセット
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0196);

		// 上りマッパを使ってマッピングしたBean配列内の引数をサービスへ渡す手続き
		if ((proscstNo != null) && (!proscstNo.equals("")))
		{
			mapper.setFUSV019601CC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
			mapper.setFUSV019604SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
		}
		mapper.setFUSV019602SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV019603SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV019605SC(beans_can, inputMap, JPCModelConstant.FUNC_CD_1);

		// サービスＩＦによる入力チェック
		try
		{
			//サービスをキック
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 更新不可エラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0204);
		}

		setNextScreen(JFUScreenConst.SCREEN_ID_FUW00403, JFUScreenConst.SCREEN_NAME_FUW00403);

		// 申込完了メール送信部品呼出処理
		JFUWebCommon.sendMskmFinMail(this, inputMap, USECASE_ID_FUSV0196);

		return true;
	}

	/**
	 * エリアリクエスト現在工程チェック
	 * <br>
	 * @param resultMap
	 */
	@SuppressWarnings("unchecked")
	private boolean chkAreaNeqCowCtepCd(HashMap<String, Object> resultMap)
	{
		boolean flg = false; // 返却する真偽値
		HashMap<String, Object> parentMap = null;

		// FUSV019601CCマップが存在する場合
		if (resultMap.containsKey(FUSV019601CC))
		{
			parentMap = (HashMap)resultMap.get(FUSV019601CC);
		}

		if (parentMap != null)
		{
			// エリアリクエスト一覧照会明細を取得
			ArrayList childList = (ArrayList)parentMap.get(EFU0011B010CBSMsg1List);

			// エリアリクエストが存在しない場合
			if (childList == null || childList.size() == 0)
			{
				return flg;
			}
			else
			{
				// 検索結果レコードが1件の場合
				if (childList.size() == 1)
				{
					HashMap<String, Object> childMap = (HashMap<String, Object>)childList.get(0);
					// エリアリクエスト現在工程コードを取得
					String area_req_now_step_cd = (String)childMap.get("area_req_now_step_cd");

					// エリアリクエスト現在工程コードがエリア受付中の場合、trueを設定する。
					if (JFUStrConst.CD01516_021.equals(area_req_now_step_cd))
					{
						flg = true;
					}
				}
				else
				{
					// 検索結果が複数件の場合も、取消しは行う
					flg = true;
				}
			}
		}
		return flg;
	}

	/**
	 * 遷移先設定
	 * 
	 * @param  nextScreenId      遷移先画面ID
	 * @param  nextScreenName    遷移先画面名
	 */
	private void setNextScreen(String nextScreenId, String nextScreenName)
	{
		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		
		// 遷移先画面ＩＤ、遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);
	}

	/**
	 * サービスフォームBeanの引継項目一部初期化
	 * @return void
	 */
	private void initPartServiceBean()
	{
		// サービスフォームBean
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		/* 2013/02/07 引継項目一部初期化処理障害対応 Y.Saitou DEL */

		/** 以下、項目初期化処理 **/
		// 登録用問合せ客名
		serviceFormBean.sendMessage(FUW00401SFConst.PROSCST_NM, X31CWebConst.DATABEAN_CLEAR);

		// 登録用問合せ客カナ名
		serviceFormBean.sendMessage(FUW00401SFConst.PROSCST_KANA, X31CWebConst.DATABEAN_CLEAR);

		// 問合せ内容
		serviceFormBean.sendMessage(FUW00401SFConst.CONTOIAWASENAIYOU, X31CWebConst.DATABEAN_CLEAR);

		// サービス契約番号
		serviceFormBean.sendMessage(FUW00401SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_CLEAR);

		// 削除対象外フラグ
		serviceFormBean.sendMessage(FUW00401SFConst.DEL_TRGT_GAI_FLG, X31CWebConst.DATABEAN_CLEAR);

		// お客様ランクコード
		serviceFormBean.sendMessage(FUW00401SFConst.CUST_RANK_CD, X31CWebConst.DATABEAN_CLEAR);

		// 連絡手段コード
		serviceFormBean.sendMessage(FUW00401SFConst.RRK_WAY_CD, X31CWebConst.DATABEAN_CLEAR);

		// エリアリクエスト現在工程コード
		serviceFormBean.sendMessage(FUW00401SFConst.AREA_REQ_NOW_STEP_CD, X31CWebConst.DATABEAN_CLEAR);

		/* 2013/02/07 引継項目一部初期化処理障害対応 Y.Saitou DEL */
	}

	/**
	 * メールの設定を行います。
	 * @param serviceFormBean サービスフォームBean
	 * @throws Exception 
	 */
	private void settingMailList(X31SDataBeanAccess serviceFormBean) throws Exception
	{
		// サンキューメールからの遷移かどうか判別する。
		Boolean mailFlg = false;
		
		// 問合せ客リストを取得
		X31SDataBeanAccessArray inquiryList = serviceFormBean.getDataBeanArray(FUW00401SFConst.PROSCSTLIST);
		X31SDataBeanAccess inquiryListBean = inquiryList.getDataBean(0);
		// 問合せ番号を取得
		String inquiryNo = inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 問合せ番号がnullでないかつ、""でない場合はtrueにする。
		if (!"".equals(inquiryNo) && inquiryNo != null)
		{
			mailFlg = true;
		}

		// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod Start
		// 送信元メールアドレス
		serviceFormBean.sendMessageString(FUW00401SFConst.SENDM_MLAD, X31CWebConst.DATABEAN_SET_VALUE, 
				JFUWebCommon.getApplicationConst(AREA_REQ_DEL_FROM_MLAD));
		// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod end

		// メール送信先リスト
		X31SDataBeanAccessArray mailSendListArray = serviceFormBean.getDataBeanArray(FUW00401SFConst.MLAD_LIST);
		mailSendListArray.clearArray();

		mailSendListArray.addDataBean();
		X31SDataBeanAccess sendDatatype = mailSendListArray.getDataBean(mailSendListArray.getCount() - 1);

		// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod Start
		// メール送信先タイプ 送信先メールアドレス
		sendDatatype.sendMessageString(FUW00401SFConst.MLAD_03, X31CWebConst.DATABEAN_SET_VALUE, 
				JFUWebCommon.getApplicationConst(AREA_REQ_DEL_TO_MLAD));
		// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod end

		// メール送信先タイプ メールアドレス設定フィールドコード TO
		sendDatatype.sendMessageString(FUW00401SFConst.MLAD_SET_FIELD_CD_03, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00788_01);

		// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod Start
		// 送信先メールアドレス2(BCC)
		String bccMailAd = JFUWebCommon.getApplicationConst(AREA_REQ_DEL_BCC_MLAD);
		// 2013/01/17 障害対応（ST2-2013-0000033） Fujiwara Mod end

		mailSendListArray.addDataBean();
		sendDatatype = mailSendListArray.getDataBean(mailSendListArray.getCount() - 1);

		// メール送信先タイプ 送信先メールアドレス
		sendDatatype.sendMessageString(FUW00401SFConst.MLAD_03, X31CWebConst.DATABEAN_SET_VALUE, bccMailAd);

		// メール送信先タイプ メールアドレス設定フィールドコード BCC
		sendDatatype.sendMessageString(FUW00401SFConst.MLAD_SET_FIELD_CD_03, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00788_04);

		// ----メール本文非定型文字列リスト----
		X31SDataBeanAccessArray htkMojiListArray = serviceFormBean.getDataBeanArray(FUW00401SFConst.CUST_HTK_MOJI_LIST);
		htkMojiListArray.clearArray();

		// ■本文非定型置換文字 お名前
		String name =
				serviceFormBean.sendMessageString(FUW00401SFConst.NAME_SEI, X31CWebConst.DATABEAN_GET_VALUE).concat("　").concat(
						serviceFormBean.sendMessageString(FUW00401SFConst.NAME_MEI, X31CWebConst.DATABEAN_GET_VALUE));

		htkMojiListArray.addDataBean();
		X31SDataBeanAccess htkMojiDatatype = htkMojiListArray.getDataBean(htkMojiListArray.getCount() - 1);

		htkMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_HTK_CKAM_MOJI_02, X31CWebConst.DATABEAN_SET_VALUE, name);

		// ■本文非定型置換文字 メール本文

		String reason = serviceFormBean.sendMessageString(FUW00401SFConst.AREA_REQ_CL_CLRE, X31CWebConst.DATABEAN_GET_VALUE);

		htkMojiListArray.addDataBean();
		htkMojiDatatype = htkMojiListArray.getDataBean(htkMojiListArray.getCount() - 1);

		htkMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_HTK_CKAM_MOJI_02, X31CWebConst.DATABEAN_SET_VALUE, reason);

		if (mailFlg == true)
		{
			// ----メール明細非定型文字列リスト1----
			X31SDataBeanAccessArray htkDtlMojiListArray1 = serviceFormBean.getDataBeanArray(FUW00401SFConst.MAIL_DETAIL_MOJI_LIST);
			htkDtlMojiListArray1.clearArray();

			// ■明細非定型置換文字 受付番号(問合せ番号でやってみる)
			htkDtlMojiListArray1.addDataBean();
			X31SDataBeanAccess htkDtlMojiDatatype1 = htkDtlMojiListArray1.getDataBean(htkDtlMojiListArray1.getCount() - 1);

			String receiptNo = inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_NO_01, X31CWebConst.DATABEAN_GET_VALUE);

			// メール明細コード
			htkDtlMojiDatatype1.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_RECEIPT);
			htkDtlMojiDatatype1.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, receiptNo);

			// ----メール明細非定型文字列リスト2----
			X31SDataBeanAccessArray htkDtlMojiListArray = serviceFormBean.getDataBeanArray(FUW00401SFConst.MAIL_DETAIL_MOJI_LIST);
			//		htkDtlMojiListArray.clearArray();

			// ■明細非定型置換文字 申込日付
			String mskmDate = dateFormat(JCCWebCommon.getSysDate());

			htkDtlMojiListArray.addDataBean();
			X31SDataBeanAccess htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, mskmDate);

			// ■明細非定型置換文字 郵便番号
			String zipCd =
					inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_PCD_01, X31CWebConst.DATABEAN_GET_VALUE).substring(0, 3) + HI_FUN
							+ inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_PCD_01, X31CWebConst.DATABEAN_GET_VALUE).substring(3);

			htkDtlMojiListArray.addDataBean();
			htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, zipCd);

			// ■明細非定型置換文字 住所1(府県・市区町村)
			String address1 =
					inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE)
							+ inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE);

			htkDtlMojiListArray.addDataBean();
			htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, address1);

			// ■明細非定型置換文字 住所2(字・丁目・番地等)
			String address2 = "　";

			address2 =
					inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE)
							+ inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE)
							+ inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE);

			if ("".equals(address2) || address2 == null)
			{
				address2 = "　";
			}

			htkDtlMojiListArray.addDataBean();
			htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, address2);

			/* 2013/01/11 ST2-2013-0000031 Y.Saitou MOD-START */
			// ■明細非定型置換文字 住所3(建物・部屋番号)
			String address3 = "	";
			address3 =
					inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE)
							+ inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);

			if ("".equals(address3) || address3 == null)
			{
				address3 = "	";
			}/* 2013/01/11 ST2-2013-0000031 Y.Saitou MOD-END */

			htkDtlMojiListArray.addDataBean();
			htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, address3);

			// ■明細非定型置換文字 電話番号 PROSCST_TELNO_01

			String telNo1 = inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE);

			// 電話暗号分割処理

			htkDtlMojiListArray.addDataBean();
			htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, telNo1);
		}
		else
		{
			// ----メール明細非定型文字列リスト1----
			X31SDataBeanAccessArray htkDtlMojiListArray1 = serviceFormBean.getDataBeanArray(FUW00401SFConst.MAIL_DETAIL_MOJI_LIST);
			htkDtlMojiListArray1.clearArray();

			// ■明細非定型置換文字 
			htkDtlMojiListArray1.addDataBean();
			X31SDataBeanAccess htkDtlMojiDatatype1 = htkDtlMojiListArray1.getDataBean(htkDtlMojiListArray1.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype1.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, "FUD1000062");
			//			htkDtlMojiDatatype1.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, "");

			// ----メール明細非定型文字列リスト2----
			X31SDataBeanAccessArray htkDtlMojiListArray = serviceFormBean.getDataBeanArray(FUW00401SFConst.MAIL_DETAIL_MOJI_LIST);

			// ■明細非定型置換文字 

			htkDtlMojiListArray.addDataBean();
			X31SDataBeanAccess htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);

			// メール明細コード
			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, "FUD1000063");
			//			htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		//		// ■明細非定型置換文字 電話番号 PROSCST_TELNO_01
		//
		//		String telNo2 = inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
		//
		//		htkDtlMojiListArray.addDataBean();
		//		htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);
		//
		//		// メール明細コード
		//		htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
		//		htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, telNo2);
		//
		//		// ■本文非定型置換文字 電話番号 PROSCST_TELNO_01
		//
		//		String telNo3 = inquiryListBean.sendMessageString(FUW00401SFConst.PROSCST_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
		//
		//		htkDtlMojiListArray.addDataBean();
		//		htkDtlMojiDatatype = htkDtlMojiListArray.getDataBean(htkDtlMojiListArray.getCount() - 1);
		//
		//		// メール明細コード
		//		htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.MAIL_DTL_CD_04, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.MAIL_DTL_CD_ADDRESS);
		//		htkDtlMojiDatatype.sendMessageString(FUW00401SFConst.TEXT_DETAIL_CKAN_MOJI_04, X31CWebConst.DATABEAN_SET_VALUE, telNo3);
	}

	/**
	 * フロント業務リスト
	 * @param commonInfoBean
	 * @return workKiseiListBean
	 */
	private X31SDataBeanAccess getWorkKiseiList(X31SDataBeanAccess commonInfoBean)
	{
		// フロント業務リストを取得
		X31SDataBeanAccessArray array = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_WORK_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess frontWorkListBean = array.getDataBean(0);

		return frontWorkListBean;
	}

	/**
	 * 業務規制情報を設定する。
	 * @return boolean true:規制中  false:規制中でない
	 */
	private void setWorkKiseiList()
	{
		// 業務規制情報取得
		HashMap<String, Object> workKiseiInfoMap = JCCWebCommon.getBusinessControlMap(this);

		// 業務規制情報マップから、フロント２４時間３６５日稼動対象規制情報を取得
		HashMap<?, ?> workKiseiMap = (HashMap<?, ?>)workKiseiInfoMap.get(JFUStrConst.WORK_KISEI_FUGKW0009);

		// 業務規制フラグの取得
		String kiseiFlg = (String)workKiseiMap.get(JFUStrConst.KISEI_FLG);

		// 業務規制情報設定処理

		// 共有フォームBeanの取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 業務規制リスト取得
		X31SDataBeanAccess workKiseiListBean = getWorkKiseiList(commonInfoBean);

		// フロント稼動対象規制フラグを設定(フロント２４時間３６５日稼動対象規制)
		if (JFUStrConst.CD01306_1.equals(kiseiFlg))
		{
			workKiseiListBean.sendMessageString(CommonInfoCFConst.FRONT_KADO_TRGT_KISEI_FLG_48, X31CWebConst.DATABEAN_SET_VALUE,
					JFUStrConst.CD01306_1);
		}
		else
		{
			workKiseiListBean.sendMessageString(CommonInfoCFConst.FRONT_KADO_TRGT_KISEI_FLG_48, X31CWebConst.DATABEAN_SET_VALUE,
					JFUStrConst.CD01306_0);
		}
	}

	/**
	 * 指定した日付文字列をyyyy/mm/dd形式に整形する。
	 * 
	 * <br>
	 * @param pstrDate yyyymmdd形式の文字列
	 * @return yyyy/mm/dd形式の文字列
	 */
	private String dateFormat(String pstrDate)
	{
		if (pstrDate == null)
		{
			return null;
		}

		if (pstrDate.length() < 8)
		{
			return pstrDate;
		}

		// 区切り文字
		String strCeparator = "/";

		// バッファ
		StringBuffer sb = new StringBuffer();

		// 整形処理
		sb.append(pstrDate.substring(0, 4));
		sb.append(strCeparator);
		sb.append(pstrDate.substring(4, 6));
		sb.append(strCeparator);
		sb.append(pstrDate.substring(6, 8));

		return sb.toString();
	}
}