/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：契約管理システム
*   モジュール名    ：はぴe契約追加補正登録
*   ソースファイル名：KKW14109SFLogic.java
*   作成者          ：FJ
*   日付            ：2012年08月16日
*＜機能概要＞
*   はぴe審査情報補正の変更を行う
*＜修正履歴＞
*	バージョン	修正日			修正者		修正内容
*	v4.00.00	2012/08/10		FJ			新規作成
*	v4.00.01	2013/02/18		FJ			ST2-2013-0000809：物理削除対応
*	v9.00.00	2014/07/13		FJ）福岡	OM-2014-0002233
*	v11.00.00   2014/10/17   	FJ）福岡    OM-2014-0002463
**********************************************************************/

package eo.web.webview.KKW14109SF;

import java.util.ArrayList;
import java.util.HashMap;

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 eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JKKStringUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.common.JKKWebCommon;
import eo.web.webview.mapping.KKSV0635_KKSV0635OPDBMapper;
import eo.web.webview.mapping.KKSV0636_KKSV0636OPDBMapper;
import eo.web.webview.mapping.KKSV0743_KKSV0743OPDBMapper;
import eo.web.webview.mapping.KKSV0795_KKSV0795OPDBMapper;

/**
 * はぴe契約追加補正登録を行います。<p>
 * はぴe契約補正対象一覧画面より遷移します。<p>
 * <BR>
 * @author 富士通
 *
 */
@SuppressWarnings("serial")
public class KKW14109SFLogic extends JCCWebBusinessLogic
{
	/** メッセージID（登録確認−未検索チェック） */
	private static final String MESSAGE_ID_ADD_NOT_SEARCH = JPCOnlineMessageConstant.EKBC310_NW;
	/** 画面項目名（対象お客様ID） */
	private static final String SCREEN_ITEM_ID_TRGT_CUST_ID = "trgt_cust_id";
	
/* v4.00.01 del start ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
	/** 積算対象サービス契約補正コード(2:削除補正) */
	private static final String SKSN_TRGT_SVKEI_HOSEI_CD_DEL = "2"; 
	
/* v4.00.01 del end   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
	
	/**
	 * 初期表示処理<br>
	 * <br>
	 * １．マッピングのために、DataBeanに遷移元情報を設定します。<br>
	 * ２．はぴe契約追加補正登録初期表示サービスの呼び出しを行います。<br>
	 * ３．画面表示用にDataBeanに格納します。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionInit() throws Exception 
	{
		boolean result = true;

		// 前画面からの引継情報を取得します
		// 画面情報を取得し、サービスフォームBeanに設定。
		JCCWebCommon.getScreenInfo(this);
		
// v9.00.00 ADD START
		
		executeInitSvc();
		
		setPullDownChoice();
		
// v9.00.00 ADD END
		
		// 取得情報をログ出力
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_初期表示情報出力[start]★★★", null, null, null);
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_初期表示情報出力[end]★★★", null, null, null);

		return result;
	}

// v9.00.00 ADD START
	/**
	 * 初期表示サービス実行処理<br>
	 * プルダウン情報の生成処理を行う.<br>
	 * <br>
	 * 
	 * @throws Exception
	 */
	private void executeInitSvc() throws Exception {
		
		HashMap<String, Object> inputMap  = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		KKSV0795_KKSV0795OPDBMapper mapper = new KKSV0795_KKSV0795OPDBMapper();
		mapper.setKKSV079501SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV079502SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		doService("KKSV0795", "KKSV0795OP", inputMap, outputMap);
		
		JKKWebCommon.setPulldownList(bean, outputMap, KKW14109SFConst.SKEKKA_INFO, "KKSV079501SC", false);
		JKKWebCommon.setPulldownList(bean, outputMap, KKW14109SFConst.SKEKKA_RSN_INFO, "KKSV079502SC", false);
	}
	
	/**
	 * プルダウン選択値設定<br>
	 * 初期表示時,プルダウン情報に対する初期設定を実施する.<br>
	 * <br>
	 * 
	 */
	private void setPullDownChoice() {
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		/** 審査結果 */
		X31SDataBeanAccess pullDownInfoBean = bean.getDataBeanArray(KKW14109SFConst.SKEKKA_INFO).getDataBean(0);
		// 選択値
		ArrayList<String> pullDownInfoList = new ArrayList<String>();
		getPulldownSelected(pullDownInfoBean, pullDownInfoList);
		pullDownInfoBean.sendMessageString(KKW14109SFConst.INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, (String) pullDownInfoList.get(0));
		
		/** 審査結果理由 */
		X31SDataBeanAccess pullDownRsnInfoBean = bean.getDataBeanArray(KKW14109SFConst.SKEKKA_RSN_INFO).getDataBean(0);
		// 選択値
		// indexを調べてselectedにする
		ArrayList<String> pullDownRsnInfoList = new ArrayList<String>();
		getPulldownSelected(pullDownRsnInfoBean, pullDownRsnInfoList);
		pullDownRsnInfoBean.sendMessageString(KKW14109SFConst.INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, (String) pullDownRsnInfoList.get(0));
		
	}
	
	/**
	 * プルダウン選択処理<br>
	 * 
	 * @param param 
	 */
	private void getPulldownSelected(X31SDataBeanAccess bean, ArrayList<String> param) {
		
		final String conStanDard = ".";
		final String conSetKigo  = "：";
		
		// Object指定のため、プルダウン共通.
		Integer count = (Integer) bean.sendMessage(KKW14109SFConst.CD_DIV_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
		
		for (int i = 0; i < count; i++) {
			
			String cd = bean.sendMessageString(KKW14109SFConst.CD_DIV_LIST_01,    X31CWebConst.DATABEAN_GET_VALUE, i);		// コード
			String nm = bean.sendMessageString(KKW14109SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);		// 名称
			
			if (!JKKStringUtil.isNullBlank(cd) && !JKKStringUtil.isNullBlank(nm)) {
				
				StringBuffer tgBuf = new StringBuffer();
				
				// 軸以降を取得して,切り出し
				int nmCnt = nm.indexOf(conStanDard);
				String cusNm = nm.substring(nmCnt+1);
				
				// 結合
				String tgNm = tgBuf.append(cd).append(conSetKigo).append(cusNm).toString();
				
				// 上書き.
				bean.sendMessageString(KKW14109SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_SET_VALUE, i, tgNm);
			}
		}
		
		// 初期値設定.
		param.add("0");
	}
	
	/**
	 * プルダウンの選択内容設定処理
	 * <br>
	 * 
	 * @param paramBean 
	 * @param keyInfo   
	 * @param keyCd     
	 * @param keyNm     
	 */
	private void setSltPulldownBean(X31SDataBeanAccess[] paramBean, String keyInfo, String keyCd, String keyNm) {
		
		// ================================================================
		// 
		// プルダウン情報の取得
		// 
		// ================================================================
		// 選択コード
		String code = getPulldownCode(paramBean, keyInfo);
		// 選択コード名称
		String name = getPulldownNm(paramBean, keyInfo);

		// ================================================================
		// 
		// プルダウン情報の設定
		// 
		// ================================================================
		// 選択コード
		paramBean[0].sendMessageString(keyCd, X31CWebConst.DATABEAN_SET_VALUE, code);
		// 選択コード名称
		paramBean[0].sendMessageString(keyNm, X31CWebConst.DATABEAN_SET_VALUE, name);
	}
	
	/**
	 * プルダウンの選択コードを取得する.
	 * <br>
	 * 
	 * @param  paramBean 
	 * @param  keyInfo   
	 * @return 
	 */
	private String getPulldownCode(X31SDataBeanAccess[] paramBean, String keyInfo) {
		
		// ================================================================
		// 
		// プルダウン情報の取得
		// 
		// ================================================================
		X31SDataBeanAccessArray list = paramBean[0].getDataBeanArray(keyInfo);
		
		// プルダウンリストの取得
		X31SDataBeanAccess subbean = list.getDataBean(0);
		// 添え字の取得
		String index = subbean.sendMessageString(KKW14109SFConst.INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		// 添え字からコードを取得
		String value = subbean.sendMessageString(KKW14109SFConst.CD_DIV_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));

		return value;
	}	
	
	/**
	 * プルダウンの選択コード名を取得する.
	 * <br>
	 * 
	 * @param  paramBean 
	 * @param  keyInfo   
	 * @return 
	 */
	private String getPulldownNm(X31SDataBeanAccess[] paramBean, String keyInfo) {
		
		// ================================================================
		// 
		// プルダウン情報の取得
		// 
		// ================================================================
		X31SDataBeanAccessArray list = paramBean[0].getDataBeanArray(keyInfo);
		
		// プルダウンリストの取得
		X31SDataBeanAccess subbean = list.getDataBean(0);
		// 添え字の取得
		String index = subbean.sendMessageString(KKW14109SFConst.INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		// 添え字からコード名を取得
		String value = subbean.sendMessageString(KKW14109SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));

		return value;
	}
// v9.00.00 ADD END
	
	/**
	 * 検索処理<br>
	 * <br>
	 * １．DataBeanの設定処理
	 * ２．サービス呼出処理
	 * ３．画面表示用のDataBean格納処理<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionSearch() throws Exception
	{
		// サービスフォームBean
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		// 運用日を設定
		bean.sendMessageString(KKW14109SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		
		// サービス呼び出し戻り値用
		X31CMessageResult msgResult = null;
		
		// サービス呼出前処理
		resultOutputDataClear(bean, 1);
		
		//-------------------------
		// サービス呼び出し
		//-------------------------
		HashMap<String, Object> inputMap  = new HashMap<String, Object>();		// サービスへの入力情報作成のためのMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();		// サービスへからの出力情報取得のためのMap
		
		KKSV0635_KKSV0635OPDBMapper mapper = new KKSV0635_KKSV0635OPDBMapper();
		mapper.setKKSV063501SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setKKSV063502SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
/* v4.00.01 del start ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		mapper.setKKSV063503SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
/* v4.00.01 del end   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
		msgResult = doService("KKSV0635", "KKSV0635OP", inputMap, outputMap);
		if(msgResult == null)
		{
			// 下りマッピングを実施します
			// マッピングデータから、画面で必要な項目を設定します。
			storeDataBeanInit(paramBean, outputMap);
		}
		
		// 遷移先画面設定（自画面IDを設定）
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14109);
		
		// 取得情報をログ出力
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_検索処理情報出力[start]★★★", null, null, null);
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_検索処理情報出力[end]★★★", null, null, null);

		return true;
	}

	/**
	 * 登録画面「登録確認」ボタン押下
	 * １．DataBean設定処理
	 * ２．サービス呼出処理
	 * ３．遷移先画面設定
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception 
	 */
	public boolean actionCfm() throws Exception
	{
		// 戻り値、true固定
		boolean result = true;	

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};

		//--------------------------
		// 入力チェック
		//--------------------------
		if(inputCheckCfm(bean))
		{
			return false;
		}

		
// v9.00.00 ADD START
		// ================================================================
		// 
		// プルダウン選択値情報設定
		// コード選択値,名称選択値に対して選択情報を格納する.
		// 
		// ================================================================
		// 補正審査結果コード情報
		setSltPulldownBean(paramBean, KKW14109SFConst.SKEKKA_INFO, KKW14109SFConst.SKEKKA_CD_CHOICE, KKW14109SFConst.SKEKKA_CD_NM_CHOICE);
		// 補正審査結果理由コード情報
		setSltPulldownBean(paramBean, KKW14109SFConst.SKEKKA_RSN_INFO, KKW14109SFConst.SKEKKA_RSN_CD_CHOICE, KKW14109SFConst.SKEKKA_RSN_CD_NM_CHOICE);
// v9.00.00 ADD END
		
		// 運用日を設定
		bean.sendMessageString(KKW14109SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));

		// サービス呼び出し戻り値用
		X31CMessageResult msgResult = null;
		
		// サービス呼び出し
		HashMap<String, Object> inputMap  = new HashMap<String, Object>();		// サービスへの入力情報作成のためのMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();		// サービスへからの出力情報取得のためのMap
		
/* v4.00.01 del start ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
		// 積算対象サービス契約補正コードが[2:削除補正]の場合
		String sksnTrgtHoseiCd = paramBean[0].sendMessageString(KKW14109SFConst.SKSN_TRGT_SVKEI_HOSEI_CD, X31CWebConst.DATABEAN_GET_VALUE);
		
		if (SKSN_TRGT_SVKEI_HOSEI_CD_DEL.equals(sksnTrgtHoseiCd)) {
			
			KKSV0743_KKSV0743OPDBMapper mapper = new KKSV0743_KKSV0743OPDBMapper();
			mapper.setKKSV074301SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
			mapper.setKKSV074302SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
			
			msgResult = doService("KKSV0743", "KKSV0743OP", inputMap, outputMap);
			
		} else {
			
			// 
			// 積算対象サービス契約補正コードが[1:追加補正] 又は [空白]の場合,追加処理のみを実施.
			// 
			// [1:追加補正]時は,エラーとなる.
			// [空白]時は,正常登録処理となる.
			// 
			
/* v4.00.01 del end   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
			KKSV0636_KKSV0636OPDBMapper mapper = new KKSV0636_KKSV0636OPDBMapper();
			mapper.setKKSV063601SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
	
			msgResult = doService("KKSV0636", "KKSV0636OP", inputMap, outputMap);
		
/* v4.00.01 del start ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		}
/* v4.00.01 del end   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
		if(msgResult == null)
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14110);
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14110);
			
			// 変更確認画面メッセージ出力
			String[] msgInfo = new String[]{"、はぴｅ契約追加補正情報の登録"};
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, msgInfo);
		}

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_登録確認処理情報出力[start]★★★", null, null, null);
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_登録確認処理情報出力[end]★★★", null, null, null);
		
		return result;
	}
	
	/**
	 * 戻る処理<br>
	 * <br>
	 * １．呼び出し元画面に戻ります。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionBack() throws Exception
	{
		boolean result = true;

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commonInfoBean = super.getCommonInfoBean();
		
		// 遷移元画面IDをセット
		JCCWebCommon.setScreenId(this, JCCWebCommon.getScreenId(this), JKKScreenConst.SCREEN_ID_KKW14109);
		
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe補正追加登録_戻り先画面ID：" + JCCWebCommon.getScreenId(this), null, null, null);
		
		
		// 遷移先の画面IDを取得し共有フォームBeanの項目に設定する。
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));

		return result;
	}

	/**
	 * 確定処理<br>
	 * <br>
	 * １．サービスの呼び出しを行います。<br>
	 * 　　<li>はぴe審査情報補正登録確認サービス
	 * ２．登録完了画面へ遷移します。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception
	 */
	public boolean actionFix() throws Exception
	{
		boolean result = true;
		HashMap<String, Object> inputMap  = new HashMap<String, Object>();	// サービスへの入力情報作成のためのMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();	// サービスへからの出力情報取得のためのMap

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		// サービスフォームBean
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
/* v4.00.01 del start ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
		X31CMessageResult msgResult;
		
		// 積算対象サービス契約補正コードが[2:削除補正]の場合
		String sksnTrgtHoseiCd = paramBean[0].sendMessageString(KKW14109SFConst.SKSN_TRGT_SVKEI_HOSEI_CD, X31CWebConst.DATABEAN_GET_VALUE);
		
		if (SKSN_TRGT_SVKEI_HOSEI_CD_DEL.equals(sksnTrgtHoseiCd)) {
			
			KKSV0743_KKSV0743OPDBMapper mapper = new KKSV0743_KKSV0743OPDBMapper();
			mapper.setKKSV074301SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
			mapper.setKKSV074302SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
			
			msgResult = doService("KKSV0743", "KKSV0743OP", inputMap, outputMap);
			
		} else {
			
			// 
			// 積算対象サービス契約補正コードが[1:追加補正] 又は [空白]の場合,追加処理のみを実施.
			// 
			// [1:追加補正]時は,エラーとなる.
			// [空白]時は,正常登録処理となる.
			// 
			
/* v4.00.01 del end   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
		// サービス呼び出し処理
		KKSV0636_KKSV0636OPDBMapper mapper = new KKSV0636_KKSV0636OPDBMapper();
		mapper.setKKSV063601SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
/* v4.00.01 mod start ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
//		X31CMessageResult msgResult = doService("KKSV0636", "KKSV0636OP", inputMap, outputMap);
		msgResult = doService("KKSV0636", "KKSV0636OP", inputMap, outputMap);
		
		}
/* v4.00.01 mod end   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
		
		if(msgResult == null)
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14111);
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14111);
			
			// 画面に完了画面の文字列の表示
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB9360__I,  new String[]{"はぴｅ契約追加補正情報の登録"});
		}
		
		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_確定処理情報出力[start]★★★", null, null, null);
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_確定処理情報出力[end]★★★", null, null, null);

		return result;
	}

	/**
	 * 修正処理<br>
	 * <br>
	 * １．電話番号予約登録画面に戻ります。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionShusei() throws Exception
	{
		boolean result = true;

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// 遷移先の画面IDを共有フォームBeanの項目に設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14109);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14109);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_修正処理情報出力[start]★★★", null, null, null);
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_修正処理情報出力[end]★★★", null, null, null);

		return result;
	}
	
	/**
	 * 完了処理<br>
	 * <br>
	 * １．呼び出し元画面に戻ります。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionFin() throws Exception
	{
		boolean result = true;

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// 遷移元画面IDをセット
		JCCWebCommon.setScreenId(this, JCCWebCommon.getScreenId(this), JKKScreenConst.SCREEN_ID_KKW14111);
		
		// 遷移先の画面IDを取得し共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_完了処理情報出力[start]★★★", null, null, null);
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "★★★はぴe契約追加補正登録画面_完了処理情報出力[end]★★★", null, null, null);

		return result;
	}
	
	/**
	 * サービス呼出処理<br>
	 * <br>
	 * はぴe契約追加補正登録関連のサービスの呼び出しを行います。<br>
	 * <br>
	 * @param usecase_id ユースケースID
	 * @param operation_id オペレーションID
	 * @param inputMap サービスへの入力情報Map（Not null）
	 * @param resultOutputMap サービスからの出力情報Map
	 * @return APサーバでエラーが発生した場合は、エラーメッセージ情報オブジェクトが返却されます。<br>
	 * 正常終了時には、null値が返却されます。
	 * @throws Exception 
	 */
	private X31CMessageResult doService(String usecase_id, String operation_id, HashMap<String, Object> inputMap,
			HashMap<String, Object> resultOutputMap) throws Exception
	{
		X31CMessageResult msgResult = null;			// 戻り値用
		HashMap<String, Object> paramMap = null;	// APサーバに依頼する情報を格納したマップオブジェクト

		try
		{
			// パラメタ設定
			paramMap = new HashMap<String, Object>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID,   usecase_id);
			paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, operation_id);
			
			// DataBeanをログ出力
			JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
			
			// サービスの呼び出し
			msgResult = invokeService(paramMap, inputMap, resultOutputMap);
		}
		finally
		{
			paramMap = null;
		}
		
		return msgResult;
	}

	/**
	 * 初期表示Data保存処理<br>
	 * <br>
	 * <br>
	 *
	 * @param paramBean DataBeanアクセス配列
	 * @param outputMap 出力データリスト
	 * @return なし
	 * @throws Exception 
	 */
	private void storeDataBeanInit(X31SDataBeanAccess[] paramBean, HashMap<String, Object> outputMap) throws Exception
	{
		KKSV0635_KKSV0635OPDBMapper mapper = new KKSV0635_KKSV0635OPDBMapper();

		if(outputMap != null)
		{
			// 取得情報の下りマッピング
			mapper.getKKSV063501SC(paramBean, outputMap);
			mapper.getKKSV063502SC(paramBean, outputMap);
			
/* v4.00.01 del start ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
			mapper.getKKSV063503SC(paramBean, outputMap);
/* v4.00.01 del end   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
			
			// 存在フラグを取得
			String existFlg = paramBean[0].sendMessageString(KKW14109SFConst.EXIST_FLG, X31CWebConst.DATABEAN_GET_VALUE);
			if("1".equals(existFlg))
			{
				//------------------------------------
				// 利用場所郵便番号の記号編集
				//------------------------------------
				StringBuffer uepcpcd = new StringBuffer(paramBean[0].sendMessageString(KKW14109SFConst.UEPCPCD, X31CWebConst.DATABEAN_GET_VALUE));
				if(uepcpcd != null && uepcpcd.length() != 0)
				{
					// 前から3桁目と4桁目の間にハイフンを挿入・先頭に記号を付与
					uepcpcd.insert(3, "-");
					uepcpcd.insert(0, "〒");
					paramBean[0].sendMessageString(KKW14109SFConst.UEPCPCD, X31CWebConst.DATABEAN_SET_VALUE, uepcpcd.toString());
				}
				
				//------------------------------------
				// 利用場所住所の編集
				//------------------------------------
				// 分かれている住所項目を１つに纏める
				StringBuffer uepcad = new StringBuffer();
				uepcad.append(paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD_STATE,   X31CWebConst.DATABEAN_GET_VALUE));	// 都道府県
				uepcad.append(paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD_CITY,    X31CWebConst.DATABEAN_GET_VALUE));	// 市区町村
				uepcad.append(paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD_OAZTSU,  X31CWebConst.DATABEAN_GET_VALUE));	// 大字通称
				uepcad.append(paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD_AZCHO,   X31CWebConst.DATABEAN_GET_VALUE));	// 字丁目
				uepcad.append(paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD_BNCHIGO, X31CWebConst.DATABEAN_GET_VALUE));	// 番地号
				uepcad.append(paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD_ADRTTM,  X31CWebConst.DATABEAN_GET_VALUE));	// 住所補記・建物
				uepcad.append(paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD_ADRRM,   X31CWebConst.DATABEAN_GET_VALUE));	// 住所補記・部屋番号
				paramBean[0].sendMessageString(KKW14109SFConst.UEPCAD, X31CWebConst.DATABEAN_SET_VALUE, uepcad.toString());
				
				// 「対象サービス契約番号」の内容を「対象サービス契約番号（直前検索分）」に反映
				paramBean[0].sendMessageString(KKW14109SFConst.TRGT_CUST_ID_BF, X31CWebConst.DATABEAN_SET_VALUE,
						paramBean[0].sendMessageString(KKW14109SFConst.TRGT_CUST_ID, X31CWebConst.DATABEAN_GET_VALUE));
			}
			else if("0".equals(existFlg))
			{
				//----------------------------------------
				// 該当のサービス契約番号が存在しない
				//----------------------------------------
				// 検索結果が存在しないメッセージを出力
				String[] msgStr = {"サービス契約", "お客さま"};
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0300_KW, msgStr, SCREEN_ITEM_ID_TRGT_CUST_ID);
				// 検索結果が存在しないので、検索による表示項目をクリア
				resultOutputDataClear(paramBean[0], 2);
			}
		}
	}

	/**
	 * 登録確認時の入力情報のチェック処理
	 * <br>
	 * @param bean DataBean項目
	 * @return errFlg true:エラーあり false:エラーなし
	 */
	private boolean inputCheckCfm(X31SDataBeanAccess bean)
	{
		boolean errFlg = false;

// v11.00.00 ADD START
		
		// 記事に改行コード有
		if (!retIsErrMemo(bean)) {
			
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4840_NW, new String[] {"改行"});
			
			// 単項目チェックエラー扱いで一旦終了.
			return true;
		}
// v11.00.00 ADD END

		String trgtCustId   = bean.sendMessageString(KKW14109SFConst.TRGT_CUST_ID,    X31CWebConst.DATABEAN_GET_VALUE);
		String trgtCustIdBf = bean.sendMessageString(KKW14109SFConst.TRGT_CUST_ID_BF, X31CWebConst.DATABEAN_GET_VALUE);
		
		if(isNotBlank(trgtCustId))
		{
			if(!trgtCustId.equals(trgtCustIdBf))
			{
				JCCWebCommon.setMessageInfo(this, MESSAGE_ID_ADD_NOT_SEARCH, SCREEN_ITEM_ID_TRGT_CUST_ID);
				errFlg = true;
			}
		}
		return errFlg;
	}

	/**
	 * 画面出力・制御に用いる項目で検索結果が設定されるもののクリア処理を行う.
	 * <br>
	 * @param bean     DataBean項目
	 * @param syoriKbn 1:検索前処理 2:検索エラー(0件)
	 */
	private void resultOutputDataClear(X31SDataBeanAccess bean, int syoriKbn)
	{
		// 利用場所郵便番号
		bean.sendMessageString(KKW14109SFConst.UEPCPCD,             X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所
		bean.sendMessageString(KKW14109SFConst.UEPCAD,              X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所（都道府県）
		bean.sendMessageString(KKW14109SFConst.UEPCAD_STATE,        X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所（市区町村）
		bean.sendMessageString(KKW14109SFConst.UEPCAD_CITY,         X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所（大字通称）
		bean.sendMessageString(KKW14109SFConst.UEPCAD_OAZTSU,       X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所（字丁目）
		bean.sendMessageString(KKW14109SFConst.UEPCAD_AZCHO,        X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所（番地号）
		bean.sendMessageString(KKW14109SFConst.UEPCAD_BNCHIGO,      X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所（住所補記・建物）
		bean.sendMessageString(KKW14109SFConst.UEPCAD_ADRTTM,       X31CWebConst.DATABEAN_SET_VALUE, "");
		// 利用場所住所（住所補記・部屋番号）
		bean.sendMessageString(KKW14109SFConst.UEPCAD_ADRRM,        X31CWebConst.DATABEAN_SET_VALUE, "");
		// 契約サービス
		bean.sendMessageString(KKW14109SFConst.PRC_GRP,             X31CWebConst.DATABEAN_SET_VALUE, "");
		// 料金コース
		bean.sendMessageString(KKW14109SFConst.PCRS,                X31CWebConst.DATABEAN_SET_VALUE, "");
		// 契約状態
		bean.sendMessageString(KKW14109SFConst.KEI_STAT,            X31CWebConst.DATABEAN_SET_VALUE, "");
		// 補正情報メモ
		bean.sendMessageString(KKW14109SFConst.HOSEI_SKEKKA_RSN_CD, X31CWebConst.DATABEAN_SET_VALUE, "");
		
		if(syoriKbn == 2)
		{
			// 対象サービス契約番号（直前検索分）
			bean.sendMessageString(KKW14109SFConst.TRGT_CUST_ID_BF,     X31CWebConst.DATABEAN_SET_VALUE, "");
		}
	}

	/**
	 * String型のインスタンスがNULL、長さが0の場合にtrueを返す.
	 * @param  value
	 * @return true:NULLもしくは長さ0 false:NULL,長さが0でない
	 */
	private boolean isBlank(String value)
	{
		if(value == null || value.length() == 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * String型のインスタンスがNULL、長さが0の場合にtrueを返す.
	 * @param  value
	 * @return true:NULL,長さが0でない false:NULLもしくは長さ0
	 */
	private boolean isNotBlank(String value)
	{
		return !isBlank(value);
	}
// v11.00.00 ADD START
	
	/**
	 * 
	 * 改行コードチェック
	 * 
	 * @param  paramBean
	 * @return true：一致、false：不一致
	 */
	private boolean retIsErrMemo(X31SDataBeanAccess paramBean) {
		
		// 記事の改行チェック
		String memo = paramBean.sendMessageString(KKW14109SFConst.HOSEI_SKEKKA_RSN_CD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// そもそも,nullはチェック不要
		if (JKKStringUtil.isNullBlank(memo))
			return true;
		
		final String[] conVals = new String[]{"\\r\\n"}; 
		
		String tg = "";
		for (String val : conVals)
			tg = memo.replaceAll(val, "　");
		
		// 不一致は,改行コードが存在したという事.
		return memo.equals(tg) ? true : false;
	}
//v11.00.00 ADD END
}
