/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：KKW22201SFLogic
 *   ソースファイル名：KKW22201SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2018年03月20日
 *＜機能概要＞
 *   eo光卸キャンセル依頼画面のビューロジックです。
 *＜修正履歴＞
 *   バージョン   修正日       修正者      修正内容
 *	v37.00.00	 2018/03/20	  FJ) 藤井	【ANK-3366-00-00】eo光卸設備
 *   
 **********************************************************************/
package eo.web.webview.KKW22201SF;

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.JPCUtilCommon;
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.mapping.KKSV0894_KKSV0894OPDBMapper;
import eo.web.webview.mapping.KKSV0897_KKSV0897OPDBMapper;




/**
 * KKW22201のビューロジックです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW22201SFLogic extends JCCWebBusinessLogic
{

	/**
	 * ページングのコマンドID
	 */
	private static final String PAGING_CMD = "paging";
	/**
	 * ソート順（昇順）
	 */
	private static final String ORDERTYPE_ASC = "1";
	/**
	 * ソート順（降順）
	 */
	private static final String ORDERTYPE_DESC = "2";
	/**
	 * 検索フラグ（要）
	 */
	private static final String SEARCH_FLG_Y = "1";
	/**
	 * 検索フラグ（不要）
	 */
	private static final String SEARCH_FLG_N = "0";
	/**
	 * 検索用チェック済除外（要）
	 */
	private static final String CANCEL_JGI_FLG_Y = "1";
	/**
	 * 検索用ＮＧ除外（要）
	 */
	private static final String SEARCH_KEYORSJGS_KEI_IDT_RSLT_CD_Y = "1";
	/**
	 * 卸先事業者契約異動通知状態コード(未通知)
	 */
	private static final String ORSJGS_KEI_IDT_STAT_CD_N = "0";
	/**
	 * 卸先事業者契約異動通知状態コード(通知済)
	 */
	private static final String ORSJGS_KEI_IDT_STAT_CD_Y = "1";
	/**
	 * 卸先事業者契約異動通知結果コード(OK)
	 */
	private static final String ORSJGS_KEI_IDT_RSLT_CD_OK = "1";

	/**
	 * ページャ表示の画面ID（セッションキー）
	 */
	private static final String SCREENID = JKKScreenConst.SCREEN_ID_KKW22201;

	

	/**
	 * 初期表示処理<br>
	 * <br>
	 * １．画面情報を取得し、サービスフォームBeanに設定します。<br>
	 * ２．プルダウン表示のためのサービスの呼び出しを行います。<br>
	 * ３．検索要の場合（後続画面からの戻り遷移時）は、検索実行処理を行います。<br>
	 * ４．画面表示用にDataBeanに格納します。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionInit() throws Exception 
	{
		boolean result = true;

		// 画面情報を取得し、サービスフォームBeanに設定。
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};

		// 検索フラグ取得
		String search_flg = bean.sendMessageString(KKW22201SFConst.SEARCH_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 検索「要」以外の場合
		if (!SEARCH_FLG_Y.equals(search_flg))
		{
			// 受付日を設定する。
			String opeDate = JCCWebCommon.getOpeDate(this, null);
			bean.sendMessageString(KKW22201SFConst.UK_YEAR_FROM, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.toYearFromYmd(opeDate));
			bean.sendMessageString(KKW22201SFConst.UK_MON_FROM, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.toMonthFromYmd(opeDate));
			bean.sendMessageString(KKW22201SFConst.UK_DAY_FROM, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.toDayFromYmd(opeDate));
			bean.sendMessageString(KKW22201SFConst.UK_YEAR_TO, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.toYearFromYmd(opeDate));
			bean.sendMessageString(KKW22201SFConst.UK_MON_TO, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.toMonthFromYmd(opeDate));
			bean.sendMessageString(KKW22201SFConst.UK_DAY_TO, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.toDayFromYmd(opeDate));
		}

		// 検索系フラグ、および検索結果の初期化
		beforeSearch(bean);
	
		// 検索「要」の場合
		if (SEARCH_FLG_Y.equals(search_flg))
		{
			// 上りマッピング処理(サービス項目-DataBean項目マッピング)
			KKSV0894_KKSV0894OPDBMapper mapper = new KKSV0894_KKSV0894OPDBMapper();
			HashMap<String, Object> input = new HashMap<String, Object>();
			HashMap<String, Object> output = new HashMap<String, Object>();

			mapper.setKKSV089401SC(paramBean, input, JPCModelConstant.FUNC_CD_1);
			
			// ページング情報上りマッピング
			JCCWebCommon.upmapperPageLinkInfo(this, "KKSV089401SC", input, SCREENID);
		
			//サービス呼出処理
			 invokeService(input, output, "KKSV0894", "KKSV0894OP");
			
			mapper.getKKSV089401SC(paramBean, output);

			// 検索後処理
			afterSearch(output, bean);
		}
			
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// 画面名を共有フォームBeanの項目に設定する
		
		commoninfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_NAME_KKW22201);

		// チェックボックスの選択値の初期化
		setCheckBoxSelected(bean, search_flg);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return result;
	}

	/**
	 * 検索処理<br>
	 * <br>
	 * １．検索条件を退避します。
	 * ２．検索実行処理を行います。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionSearch() throws Exception 
	{
		boolean result = true;

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// 自画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22201);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22201);

		// 検索条件の取り出し

		// 受付日（自）
		String rnkiymd_y_f = bean.sendMessageString(KKW22201SFConst.UK_YEAR_FROM, X31CWebConst.DATABEAN_GET_VALUE);
		String rnkiymd_m_f = bean.sendMessageString(KKW22201SFConst.UK_MON_FROM, X31CWebConst.DATABEAN_GET_VALUE);
		String rnkiymd_d_f = bean.sendMessageString(KKW22201SFConst.UK_DAY_FROM , X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW22201SFConst.SEARCH_ORSJGS_KEI_IDO_HASSEI_YMD_FROM, X31CWebConst.DATABEAN_SET_VALUE,
				rnkiymd_y_f + rnkiymd_m_f + rnkiymd_d_f);		// 検索用受付年月日（自）
		// 受付日（至）
		String RNKIymd_y_t = bean.sendMessageString(KKW22201SFConst.UK_YEAR_TO , X31CWebConst.DATABEAN_GET_VALUE);
		String RNKIymd_m_t = bean.sendMessageString(KKW22201SFConst.UK_MON_TO, X31CWebConst.DATABEAN_GET_VALUE);
		String RNKIymd_d_t = bean.sendMessageString(KKW22201SFConst.UK_DAY_TO, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW22201SFConst.SEARCH_ORSJGS_KEI_IDO_HASSEI_YMD_TO, X31CWebConst.DATABEAN_SET_VALUE,
				RNKIymd_y_t + RNKIymd_m_t + RNKIymd_d_t);		// 検索用受付年月日（至）

		// キャンセル済みを除外取得
		Boolean can_jgi = bean.sendMessageBoolean(KKW22201SFConst.CANCEL_JGI_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		if (can_jgi.booleanValue())
		{
			// 再検索用キャンセル済みを除外
			bean.sendMessageString(KKW22201SFConst.SEARCH_CHK_EXCLU_FLAG, 
					X31CWebConst.DATABEAN_SET_VALUE, CANCEL_JGI_FLG_Y);
		}
		else
		{
			// 再検索用キャンセル済みを除外
			bean.sendMessageString(KKW22201SFConst.SEARCH_CHK_EXCLU_FLAG, 
					X31CWebConst.DATABEAN_SET_VALUE, "");
		}

		// NGを除く取得
		Boolean ng_jgi = bean.sendMessageBoolean(KKW22201SFConst.NG_JGI_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		if (ng_jgi.booleanValue())
		{
			// 再検索用NGを除く
			bean.sendMessageString(KKW22201SFConst.SEARCH_KEYORSJGS_KEI_IDT_RSLT_CD, 
					X31CWebConst.DATABEAN_SET_VALUE, SEARCH_KEYORSJGS_KEI_IDT_RSLT_CD_Y);
		}
		else
		{
			// 再検索用NGを除く
			bean.sendMessageString(KKW22201SFConst.SEARCH_KEYORSJGS_KEI_IDT_RSLT_CD, 
					X31CWebConst.DATABEAN_SET_VALUE, "");
		}

		bean.sendMessageString(KKW22201SFConst.SEARCH_SVC_KEI_NO, 
				X31CWebConst.DATABEAN_SET_VALUE, bean.sendMessageString(KKW22201SFConst.SVS_KEI_NO,
						X31CWebConst.DATABEAN_GET_VALUE));			// 検索用お客様ID

		bean.sendMessageString(KKW22201SFConst.SEARCH_KOJIAK_NO, 
				X31CWebConst.DATABEAN_SET_VALUE, bean.sendMessageString(KKW22201SFConst.KOJIAK_NO,
						X31CWebConst.DATABEAN_GET_VALUE));			// 検索用工事案件番号

		// ソート番号クリア
		bean.sendMessageString(KKW22201SFConst.SORT_NUM, X31CWebConst.DATABEAN_SET_VALUE, "");
		// ソート項目Noクリア
		bean.sendMessageString(KKW22201SFConst.ORDER_NUM, X31CWebConst.DATABEAN_SET_VALUE, "");
		// ソート順クリア
		bean.sendMessageString(KKW22201SFConst.ORDER_TYPE, X31CWebConst.DATABEAN_SET_VALUE, "");
		
		// ページング情報削除
		JCCWebCommon.clearPageLinkInfo(this, SCREENID);

		// 検索系フラグ、および検索結果の初期化
		beforeSearch(bean);

		// 検索処理実行
		 HashMap<String, Object> output = execSearch(bean);

		// 検索後処理
		afterSearch(output, bean);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return result;
	}

	/**
	 * ページャ処理<BR>
	 * <br>
	 * １．検索実行処理を行います。<br>
	 * 　　（ソート情報は保持）
	 * <p>
	 * @return 正常／異常
	 * @throws Exception
	 */
	public boolean actionPaging() throws Exception
	{
		boolean result = true;

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 検索系フラグ、および検索結果の初期化
		beforeSearch(bean);

		//検索処理実行
		 HashMap<String, Object> output = execSearch(bean);

		// 検索後処理
		afterSearch(output, bean);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return result;
	}

	/**
	 * ソート処理（昇順）<BR>
	 * <br>
	 * １．押下された▼▲より、ソート項目を調べます。<BR>
	 * ２．検索実行処理を実行します。<BR>
	 * <p>
	 * @return 正常／異常
	 * @throws Exception
	 */
	public boolean actionSortAsc() throws Exception
	{
		boolean result = true;

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ソート番号取得
		String sort_num = bean.sendMessageString(KKW22201SFConst.SORT_NUM, X31CWebConst.DATABEAN_GET_VALUE);

		// ソート項目No
		bean.sendMessageString(KKW22201SFConst.ORDER_NUM, X31CWebConst.DATABEAN_SET_VALUE, sort_num);
		// ソート順
		bean.sendMessageString(KKW22201SFConst.ORDER_TYPE, X31CWebConst.DATABEAN_SET_VALUE, ORDERTYPE_ASC);

		// 検索系フラグ、および検索結果の初期化
		beforeSearch(bean);

		//検索処理実行
		 HashMap<String, Object> output = execSearch(bean);

		// 検索後処理
		afterSearch(output, bean);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return result;
	}

	/**
	 * ソート処理（降順）<BR>
	 * <br>
	 * １．押下された▼▲より、ソート項目を調べます。<BR>
	 * ２．検索実行処理を実行します。<BR>
	 * <p>
	 * @return 正常／異常
	 * @throws Exception
	 */
	public boolean actionSortDesc() throws Exception
	{
		boolean result = true;

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// ソート番号取得
		String sort_num = bean.sendMessageString(KKW22201SFConst.SORT_NUM, X31CWebConst.DATABEAN_GET_VALUE);

		// ソート項目No
		bean.sendMessageString(KKW22201SFConst.ORDER_NUM, X31CWebConst.DATABEAN_SET_VALUE, sort_num);
		// ソート順
		bean.sendMessageString(KKW22201SFConst.ORDER_TYPE, X31CWebConst.DATABEAN_SET_VALUE, ORDERTYPE_DESC);

		// 検索系フラグ、および検索結果の初期化
		beforeSearch(bean);

		//検索処理実行
		 HashMap<String, Object> output = execSearch(bean);

		// 検索後処理
		afterSearch(output, bean);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return result;
	}

	/**
	 * 更新確認処理<br>
	 * <br>
	 * １．変更有無を調べ、変更行を変更情報に退避します。
	 * ２．サービスの呼び出しを行います（チェックのみ）。<br>
	 * 　　・卸先事業者契約異動通知一覧照会サービスIF<br>
	 * 　　・卸先事業者契約異動通知更新サービスIF<br>
	 * ３．  更新確認画面へ遷移します。
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionUpdIcrn() throws Exception 
	{
		boolean result = true;

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		// 変更情報退避用を一旦クリア
		X31SDataBeanAccessArray datalistUpd = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST_UPD);
		datalistUpd.clearArray();

		// 更新前比較用
		X31SDataBeanAccessArray datalistBf = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST_MOD);

		// 卸先事業者契約異動通知一覧の数だけ繰り返して設定
		X31SDataBeanAccessArray datalist = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST);

		boolean updflg = false;	// 更新有無用

		for (int i = 0; i < datalist.getCount(); i++)
		{
			// 卸先事業者契約異動通知（変更後）
			X31SDataBeanAccess dataBean = datalist.getDataBean(i);
			
			// キャンセルＮＧ
			boolean rslt_cancel_ng = dataBean.sendMessageBoolean(KKW22201SFConst.RSLT_CANCEL_NG_01,
					X31CWebConst.DATABEAN_GET_VALUE);
			// ＮＧ理由
			String rslt_ng_rsn = dataBean.sendMessageString(KKW22201SFConst.RSLT_NG_RSN_01,
					X31CWebConst.DATABEAN_GET_VALUE);
			// 卸先事業者契約異動通知状態コード
			String orsjgs_kei_idt_stat_cd = dataBean.sendMessageString(KKW22201SFConst.ORSJGS_KEI_IDT_STAT_CD_01,
					X31CWebConst.DATABEAN_GET_VALUE);
			// 卸先事業者契約異動通知結果コード
			String orsjgs_kei_idt_rslt_cd = dataBean.sendMessageString(KKW22201SFConst.ORSJGS_KEI_IDT_RSLT_CD_01,
					X31CWebConst.DATABEAN_GET_VALUE);
			// 更新前退避用と比較
			X31SDataBeanAccess dataBeanBf = datalistBf.getDataBean(i);
			
			// キャンセルNG（更新前）
			boolean rslt_cancel_ng_bf = dataBeanBf.sendMessageBoolean(KKW22201SFConst.RSLT_CANCEL_NG_01,
					X31CWebConst.DATABEAN_GET_VALUE);	
			// NG理由（更新前）
			String rslt_ng_rsn_bf = dataBeanBf.sendMessageString(KKW22201SFConst.RSLT_NG_RSN_01,
					X31CWebConst.DATABEAN_GET_VALUE);
			
			// キャンセルＮＧ またはＮＧ理由に変更があった場合、 updflgをtrueに設定
			if(
				(rslt_cancel_ng != rslt_cancel_ng_bf)
				|| (rslt_ng_rsn != null && !rslt_ng_rsn.equals(rslt_ng_rsn_bf) )
				|| (rslt_ng_rsn == null && rslt_ng_rsn_bf != null)
			){
				updflg = true;
			}
			
			
			// 変更ありの場合は更新情報に退避（次画面表示用）
			if (updflg)
			{
				//卸先事業者契約異動通知状態コードが未通知でかつ、卸先事業者契約異動通知結果コードがOKを設定済の明細が選択されている場合
				if (
					ORSJGS_KEI_IDT_STAT_CD_N.equals(orsjgs_kei_idt_stat_cd) 
					&& ORSJGS_KEI_IDT_RSLT_CD_OK.equals(orsjgs_kei_idt_rslt_cd)
					&& rslt_cancel_ng
				){
					// メッセージ表示用
					String[] msgInfo = {"明細の処理結果がOKで設定済の" , "キャンセルNG依頼"};
					// メッセージ出力
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0930_NW, msgInfo);
					return result;

				}

				//卸先事業者契約異動通知状態コードが通知済が選択されている場合
				if ( 
					ORSJGS_KEI_IDT_STAT_CD_Y.equals(orsjgs_kei_idt_stat_cd)
					&& rslt_cancel_ng
				){
					// メッセージ表示用
					String[] msgInfo = {"明細のステータスが通知済の" , "キャンセルNG依頼"};
					// メッセージ出力
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0930_NW, msgInfo);
					return result;

				}

				X31SDataBeanAccess dataBeanUpd = datalistUpd.addDataBean();
				String[] itemNames = dataBeanUpd.getItemNameList();

				for (int j = 0; j < itemNames.length; j++)
				{
					Object val = dataBean.sendMessageObject(itemNames[j],  X31CWebConst.DATABEAN_GET_VALUE);
					if (val instanceof Boolean)
					{
						dataBeanUpd.sendMessageBoolean(itemNames[j], X31CWebConst.DATABEAN_SET_VALUE, (Boolean)val);
					}
					else if (val instanceof String)
					{
						dataBeanUpd.sendMessageString(itemNames[j], X31CWebConst.DATABEAN_SET_VALUE, (String)val);
					}
				}

				updflg = false;

			}
		}

		Integer updCnt = datalistUpd.getCount();
		// 変更がある場合
		if (updCnt != null && updCnt.intValue() > 0)
		{

			// 検索フラグ「要」設定
			bean.sendMessageString(KKW22201SFConst.SEARCH_FLG, X31CWebConst.DATABEAN_SET_VALUE, SEARCH_FLG_Y);

			// 上りマッピング処理(サービス項目-DataBean項目マッピング)
			KKSV0897_KKSV0897OPDBMapper mapper = new KKSV0897_KKSV0897OPDBMapper();
			HashMap<String, Object> input = new HashMap<String, Object>();
			HashMap<String, Object> output = new HashMap<String, Object>();

			mapper.setKKSV089701SC(paramBean, input, JPCModelConstant.FUNC_CD_2);

			//サービス呼出処理
			invokeService(input, output, "KKSV0897", "KKSV0897OP");


			// 共有フォームBeanのデータBeanアクセスクラスを取得。
			X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
			
			// メッセージ表示用
			String[] msgInfo = {"eo光卸キャンセル依頼"};
			// メッセージ出力
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, msgInfo);

			// 遷移先の画面IDを共有フォームBeanの項目に設定する
			commoninfoBean.sendMessageString(
					CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
					JKKScreenConst.SCREEN_ID_KKW22202);
			commoninfoBean.sendMessageString(
					CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
					JKKScreenConst.SCREEN_NAME_KKW22202);

			// 戻り先画面IDを設定
			JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW22202, JKKScreenConst.SCREEN_ID_KKW22201);

			// DataBeanをログ出力
			JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		}else{
			// 変更なしエラーとしてメッセージ出力。画面遷移は行わない。
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5370_NW);
			return result;
		}

		
		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_KKW22201);
		commoninfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_NAME_KKW22201);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return result;

	}

	/**
	 * 確定処理<br>
	 * <br>
	 * １．サービスの呼び出しを行います（チェック＆登録（更新））。<br>
	 * 　　・卸先事業者契約異動通知更新サービスIF<br>
	 * 　　・卸先事業者契約異動通知登録サービスIF<br>
	 * ２．一覧変更完了画面へ遷移します。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception
	 */
	public boolean actionFix() throws Exception
	{
		boolean result = true;

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};

		// 上りマッピング処理(サービス項目-DataBean項目マッピング)
		KKSV0897_KKSV0897OPDBMapper mapper = new KKSV0897_KKSV0897OPDBMapper();
		HashMap<String, Object> input = new HashMap<String, Object>();
		HashMap<String, Object> output = new HashMap<String, Object>();

		mapper.setKKSV089701SC(paramBean, input, JPCModelConstant.FUNC_CD_1);
		
		//サービス呼出処理
		invokeService(input, output, "KKSV0897", "KKSV0897OP");


		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// 遷移先の画面IDを共有フォームBeanの項目に設定する
		commoninfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_ID_KKW22203);
		commoninfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_NAME_KKW22203);

		// メッセージ表示用
		String[] msgInfo = {"eo光卸キャンセル依頼の登録"};
		// メッセージ出力
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, msgInfo);

		return result;
	}

	/**
	 * 完了処理<br>
	 * <br>
	 * １．一覧照会画面に戻ります。<br>
	 * ２．検索条件は初期化を行います。<br>
	 * <br>
	 *
	 * @return 正常／異常
	 * @throws Exception 
	 */
	public boolean actionFin() throws Exception
	{
		boolean result = true;

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// 検索フラグ「不要」設定
		bean.sendMessageString(KKW22201SFConst.SEARCH_FLG, X31CWebConst.DATABEAN_SET_VALUE, SEARCH_FLG_N);


		// 遷移先の画面IDを共有フォームBeanの項目に設定する
		commoninfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22201 );

		// デバッグ
		JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "遷移先の画面ID:" + JKKScreenConst.SCREEN_ID_KKW22201, null, null, null);
		
		// 戻り先画面IDを設定
		JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW22203, JKKScreenConst.SCREEN_ID_KKW22201);
		

		// 再検索
		actionInit();

		return result;

	}

	/**
	 * サービス呼出処理<br>
	 * <br>
	 * サービスの呼び出しを行います。<br>
	 * <br>
	 * @param usecase_id ユースケースID
	 * @param operation_id オペレーションID
	 * @return APサーバでエラーが発生した場合は、エラーメッセージ情報オブジェクトが返却されます。<br>
	 * 正常終了時には、null値が返却されます。
	 * @throws Exception 
	 */
	private X31CMessageResult invokeService(HashMap<String, Object> input, HashMap<String, Object> output, String usecase_id, String operation_id) throws Exception
	{
		X31CMessageResult msgResult = null;		// 戻り値用

		// パラメタ設定
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, usecase_id);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, operation_id);

		// メッセージリストの初期化
		clearMessageResultList();

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		// サービスの呼び出し
		msgResult = invokeService(paramMap, input, output);

		// DataBeanをログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return msgResult;
	}

	/**
	 * 検索前処理<br>
	 * <br>
	 * 検索系フラグ、および検索結果の初期化を行います。<BR>
	 * <br>
	 * @param bean データBeanアクセスクラス
	 */
	private void beforeSearch(X31SDataBeanAccess bean) 
	{
		// 一覧表示部分を非表示にする
		bean.sendMessageBoolean(KKW22201SFConst.LIST_DISP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// 卸先事業者異動通知一覧クリア
		X31SDataBeanAccessArray knytcslist = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST);
		knytcslist.clearArray();
		// 卸先事業者異動通知変更新情報（次画面用）クリア
		X31SDataBeanAccessArray knytcslistUpd = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST_MOD);
		knytcslistUpd.clearArray();
		// 卸先事業者異動通知更新情報クリア
		X31SDataBeanAccessArray knytcslistIns = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST_UPD);
		knytcslistIns.clearArray();


		
	}

	/**
	 * 検索実行処理<BR>
	 * <BR>
	 * 検索処理を実行します。
	 * １．eo光卸キャンセル依頼検索処理SCを呼び出します。
	 * ２．エラーがあれば、ステータスに従いメッセージをセットします。
	 * ３．エラーがなければ、一覧表示部分を表示します。
	 * <p>
	 * @param bean サービスフォームBean
	 * @throws Exception
	 */
	private HashMap<String, Object> execSearch(X31SDataBeanAccess bean) throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] paramBean = {bean};

		// 検索フラグ設定
		bean.sendMessageString(KKW22201SFConst.SEARCH_FLG, X31CWebConst.DATABEAN_SET_VALUE, SEARCH_FLG_Y);

		// 上りマッピング処理(サービス項目-DataBean項目マッピング)
		KKSV0894_KKSV0894OPDBMapper mapper = new KKSV0894_KKSV0894OPDBMapper();
		HashMap<String, Object> input = new HashMap<String, Object>();
		HashMap<String, Object> output = new HashMap<String, Object>();
		mapper.setKKSV089401SC(paramBean, input, JPCModelConstant.FUNC_CD_1);

		// ページング情報上りマッピング
		JCCWebCommon.upmapperPageLinkInfo(this, "KKSV089401SC", input, SCREENID);

		// サービス呼出処理
		invokeService(input, output, "KKSV0894", "KKSV0894OP");

		// 下りマッピング処理(サービス項目-DataBean項目マッピング)
		mapper.getKKSV089401SC(paramBean, output);

		// 入力有無フラグクリア
		bean.sendMessageString(KKW22201SFConst.INFLG, X31CWebConst.DATABEAN_SET_VALUE, "");
		
		return output;
	}

	/**
	 * 検索後処理<br>
	 * <br>
	 * 検索サービスインターフェイス呼出後、検索結果よりデータセットを行います。<br>
	 * 取得データの検索エラーフラグが以下の場合は結果欄を表示しません。<BR>
	 * ・検索結果が0件の場合<BR>
	 * ・検索結果が最大検索件数超えの場合<BR>
	 * <br>
	 * @param bean サービスフォームBean
	 */
	private void afterSearch(HashMap<String, Object> output, X31SDataBeanAccess bean) 
	{
		// 検索結果のHashMapから、指定したSCタイトルの検索エラーフラグを取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg("KKSV089401SC", output);

		// 取得データ件数チェック
		if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			// 検索結果が0件の場合の処理
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
		}
		else if(JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			// 検索結果が最大検索件数超えの場合の処理
			String[] str = {JCCWebCommon.getSearchConst("KKW22201_MAX_SHOW_CNT")};
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0340__I, str);
		}
		else
		{
			if(JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
			{
				// 表示ページに該当するデータがない場合の処理
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0350__I);
			}

			// ページング情報下りマッピング
			JCCWebCommon.downmapperPageLinkInfo(this, "KKSV089401SC", output, SCREENID);

			// ページングのコマンドマップIDをセッションに設定
			JCCWebCommon.setSearchCommand(this, PAGING_CMD);

			// 一覧表示「要」をセットする。
			bean.sendMessageBoolean(KKW22201SFConst.LIST_DISP_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);

			// 更新前退避用
			X31SDataBeanAccessArray datalistBf = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST_MOD);

			if (datalistBf != null)
			{
				datalistBf.clearArray();
				
				// 卸先事業者契約異動通知一覧の数だけ繰り返して設定
				X31SDataBeanAccessArray datalist = bean.getDataBeanArray(KKW22201SFConst.ORSJGS_KEI_IDT_LIST);
				for (int i = 0; i < datalist.getCount(); i++)
				{
					X31SDataBeanAccess dataBean = datalist.getDataBean(i);

					X31SDataBeanAccess dataBeanBf = datalistBf.addDataBean();
					String[] itemNames = dataBeanBf.getItemNameList();

					for (int j = 0; j < itemNames.length; j++)
					{
						
						Object val = dataBean.sendMessageObject(itemNames[j],  X31CWebConst.DATABEAN_GET_VALUE);
						if (val instanceof Boolean)
						{
							dataBeanBf.sendMessageBoolean(itemNames[j], X31CWebConst.DATABEAN_SET_VALUE, (Boolean)val);
						}
						else if (val instanceof String)
						{
							dataBeanBf.sendMessageString(itemNames[j], X31CWebConst.DATABEAN_SET_VALUE, (String)val);
						}
					}

				}
			}
		}
	}

	/**
	 * チェックボックスの選択値を設定します。
	 * <BR>
	 * 
	 * @param bean データBeanアクセスクラス
	 * @param search_flg 検索フラグ
	 */
	private void setCheckBoxSelected(X31SDataBeanAccess bean, String search_flg)
	{
		// 検索フラグ「要」であれば、検索条件より選択値を設定
		if (SEARCH_FLG_Y.equals(search_flg))
		{
			// 検索用チェック済除外
			String search_chk_exclu_flag = bean.sendMessageString(KKW22201SFConst.SEARCH_CHK_EXCLU_FLAG,
					X31CWebConst.DATABEAN_GET_VALUE);
			if (CANCEL_JGI_FLG_Y.equals(search_chk_exclu_flag))
			{
				// キャンセル済みを除くチェックボックスをcheckedにする
				bean.sendMessageBoolean(KKW22201SFConst.CANCEL_JGI_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
			}
			else
			{
				// キャンセル済みを除くチェックボックスをcheckedにしない
				bean.sendMessageBoolean(KKW22201SFConst.CANCEL_JGI_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
			}
		}
		// チェックボックスの選択値の初期化
		else
		{
			// キャンセル済みを除くチェックボックスをcheckedにする
			bean.sendMessageBoolean(KKW22201SFConst.CANCEL_JGI_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
			// NGを除くチェックボックスをcheckedにする
			bean.sendMessageBoolean(KKW22201SFConst.NG_JGI_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
			// お客さまIDをクリア
			bean.sendMessageString(KKW22201SFConst.SVS_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, "");
			// 工事案件番号をクリア
			bean.sendMessageString(KKW22201SFConst.KOJIAK_NO, X31CWebConst.DATABEAN_SET_VALUE, "");
			
			
		}
	}
}
