/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW22901SFLogic
*   ソースファイル名：KKW22901SFLogic.java
*   作成者          ：富士通
*   日付            ：2024年12月12日
*＜機能概要＞
*   CSコース用オプションチャンネル登録・更新画面 Viewロジックです。
*＜修正履歴＞
*   バージョン    修正日       修正者          修正内容
*   v74.00.00  2024/12/12   GDC）J.Zabala   【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応
*
**********************************************************************/

package eo.web.webview.KKW22901SF;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.common.util.JPCDateChecker;
import eo.common.util.JPCDateUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW22801SF.KKW22801SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV1050_KKSV1050OPDBMapper;

/**
 * CSコース用オプションチャンネル登録・更新画面 のビューロジック処理を行います。
 * @author GDC)J.Zabala
 *
 */
@SuppressWarnings("serial")
public class KKW22901SFLogic extends JCCWebBusinessLogic
{
	/** ユースケースID : KKSV1050 */
	private static final String USECASE_ID_KKSV1050 = "KKSV1050";
	/** オペレーションID : KKSV1050OP */
	private static final String OPERATION_ID_KKSV1050 = "KKSV1050OP";
	
	/** CC実行時用固定文字列 */
	private static final String KEY_CC_FIXED_TEXT = "JKKCsCrsOpchAddUpdShokaiCC";
	
	/** プロセスID (初期化) */
	private static final String PRC_ID_INIT = "0";
	
	/** プロセスID (チェック) */
	private static final String PRC_ID_CHECK = "1";
	
	/** プロセスID (更新) */
	private static final String PRC_ID_UPD = "2";
	
	/**
	 * CSコース用オプションチャンネル登録・更新画面 初期表示処理。
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public boolean actionInit() throws Exception
	{
		
		// 画面情報を取得し、サービスフォームBeanに設定する
		HashMap<String, Object> parameterMap = JCCWebCommon.getScreenInfo(this);
		
		// サービスフォームBeanのアクセスクラス取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 遷移元のイベントを取得
		String queryModeFlg = (String)parameterMap.get(KKW22901SFConst.QUERY_MODE_FLG);
		serviceBean.sendMessageString(KKW22901SFConst.QUERY_MODE_FLG, X31CWebConst.DATABEAN_SET_VALUE, queryModeFlg);
		
		// 運用日付
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		serviceBean.sendMessageString(KKW22901SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
		
		serviceBean.sendMessageString(KKW22901SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.SVC_KEI_NO));
		serviceBean.sendMessageString(KKW22901SFConst.CATV_CUST_NO, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.CATV_CUST_NO));
		serviceBean.sendMessageString(KKW22901SFConst.PCRS, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.PCRS));
		serviceBean.sendMessageString(KKW22901SFConst.PPLAN, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.PPLAN));
		serviceBean.sendMessageString(KKW22901SFConst.KEISHA_NM, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.KEISHA_NM));
		serviceBean.sendMessageString(KKW22901SFConst.KEI_SVC, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.KEI_SVC));
		serviceBean.sendMessageString(KKW22901SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.IDO_DIV));
		serviceBean.sendMessageString(KKW22901SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_SET_VALUE, (String) parameterMap.get(KKW22801SFConst.IDO_RSN_CD));
		
		List<Map<String, Object>> casDataList = (List<Map<String, Object>>) parameterMap.get("casDataList");
		serviceBean.sendMessageString(KKW22901SFConst.FRAME_NO, X31CWebConst.DATABEAN_SET_VALUE, (String) casDataList.get(0).get(KKW22801SFConst.FRAME_NO_01));
		serviceBean.sendMessageString(KKW22901SFConst.CAS_CARD_NO, X31CWebConst.DATABEAN_SET_VALUE, (String) casDataList.get(0).get(KKW22801SFConst.CAS_ID_01));
		
		// サービス呼び出し準備
		X31SDataBeanAccess[] paramBeans = {serviceBean};
		
		// スカパー鍵情報操作サービスに電話する
		callSvc(paramBeans, PRC_ID_INIT);
		
		return true;
	}
	
	/**
	 * KKW22901「更新確認」ボタン
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean forwardTokiCfm() throws Exception
	{
		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラス取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		X31SDataBeanAccessArray keyopn_zm_op_list = serviceBean.getDataBeanArray(KKW22901SFConst.KEYOPN_ZM_OP_LIST);
		for (int i = 0; i < keyopn_zm_op_list.getCount(); i++) 
		{
			X31SDataBeanAccess subBean = keyopn_zm_op_list.getDataBean(i);
			boolean selected = subBean.sendMessageBoolean(KKW22901SFConst.DSL, X31CWebConst.DATABEAN_GET_VALUE);
			if (selected)
			{
				String useEndYear = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_USE_ENDYMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
				String useEndMonth = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_USE_ENDYMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
				String useEndDay = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_USE_ENDYMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
				String useEndDate = useEndYear + useEndMonth + useEndDay;
				subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_USE_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, useEndDate);
				
				String chrgEndYear = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_CHRG_ENDYMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgEndMonth = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_CHRG_ENDYMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgEndDay = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_CHRG_ENDYMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgEndDate = chrgEndYear + chrgEndMonth + chrgEndDay;
				subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_CHRG_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, chrgEndDate);
			}
		}

		X31SDataBeanAccessArray keyopn_psb_op_list = serviceBean.getDataBeanArray(KKW22901SFConst.KEYOPN_PSB_OP_LIST);
		for (int i = 0; i < keyopn_psb_op_list.getCount(); i++)
		{
			X31SDataBeanAccess subBean = keyopn_psb_op_list.getDataBean(i);
			boolean selected = subBean.sendMessageBoolean(KKW22901SFConst.MSKM, X31CWebConst.DATABEAN_GET_VALUE);
			if (selected)
			{
				String useStaYmdRadio = subBean.sendMessageString(KKW22901SFConst.KEYOPN_PSB_USE_STAYMD_RADIO, X31CWebConst.DATABEAN_GET_VALUE);
				if ("0".equals(useStaYmdRadio))
				{
					subBean.sendMessageString(KKW22901SFConst.KEYOPN_PSB_USE_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, "即時");
				}
				else if ("1".equals(useStaYmdRadio))
				{
					subBean.sendMessageString(KKW22901SFConst.KEYOPN_PSB_USE_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, "次月より");
				}
				else if ("2".equals(useStaYmdRadio))
				{
					subBean.sendMessageString(KKW22901SFConst.KEYOPN_PSB_USE_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, "次々月より");
				}
			}
		}
		
		boolean chkResult = performCheck(serviceBean);
		if (!chkResult) 
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22901);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22901);
			return true;
		}
		
		// サービス呼び出し準備
		X31SDataBeanAccess[] paramBeans = {serviceBean};
		
		// スカパー鍵情報操作サービスに電話する
		if (callSvc(paramBeans, PRC_ID_CHECK))
		{
			// メッセージの設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKK0370__I, new String[]{"CSコース用オプションチャンネル登録・更新"});
			
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22902);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22902);
			// 背景を黄色にする。
			JCCWebCommon.setMessageAreaBackColor(this, "1");
		}
		else
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22901);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22901);
		}
		
		return true;
	}
	
	
	/**
	 * KKW22901「戻る」ボタン
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean back() throws Exception
	{
		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// KW22801のデータマップを生成
		Map<String, Object> nextScreenMap = createKkw22801ScrMap(serviceBean);
		
		// 登録画面より戻る際に必要な情報を自画面IDをキーに情報設定を行う
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW22801, (HashMap<String, Object>) nextScreenMap);
		JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW22801, JKKScreenConst.SCREEN_ID_KKW22801);
		
		// 遷移先画面IDを設定する
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22801);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22801);
		
		return true;
	}
	
	/**
	 * KKW22902「確定」ボタン
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean create() throws Exception
	{
		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラス取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		boolean chkResult = performCheck(serviceBean);
		if (!chkResult) 
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22902);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22902);
			// 背景を黄色にする。
			JCCWebCommon.setMessageAreaBackColor(this, "1");
			return true;
		}
		
		// サービス呼び出し準備
		X31SDataBeanAccess[] paramBeans = {serviceBean};
		
		// スカパー鍵情報操作サービスに電話する
		if (callSvc(paramBeans, PRC_ID_UPD))
		{
			// メッセージの設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, new String[]{"CSコース用オプションチャンネル登録・更新"});
			
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22903);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22903);
		}
		else
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22902);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22902);
			// 背景を黄色にする。
			JCCWebCommon.setMessageAreaBackColor(this, "1");
		}
		
		return true;
	}
	
	/**
	 * KKW22902「修正」ボタン
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean forwardShusei() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22901);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22901);
		
		return true;
	}
	
	/**
	 * KKW22903「一覧照会へ」ボタン
	 * @return
	 * @throws Exception
	 */
	public boolean forwardFin() throws Exception 
	{
		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラス取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// KW22801のデータマップを生成
		Map<String, Object> nextScreenMap = createKkw22801ScrMap(serviceBean);
		
		// 登録画面より戻る際に必要な情報を自画面IDをキーに情報設定を行う
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW22801, (HashMap<String, Object>) nextScreenMap);
		JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW22801, JKKScreenConst.SCREEN_ID_KKW22801);
		
		// 遷移先画面IDを設定する
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22801);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22801);
		
		return true;
	}
	
	/**
	 * KW22801のデータマップを生成
	 * @param serviceBean
	 * @return
	 */
	private Map<String, Object> createKkw22801ScrMap(X31SDataBeanAccess serviceBean)
	{
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("契約者名", serviceBean.sendMessageString(KKW22901SFConst.KEISHA_NM, X31CWebConst.DATABEAN_GET_VALUE));
		map.put("お客さまID", serviceBean.sendMessageString(KKW22901SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		map.put("契約サービス", serviceBean.sendMessageString(KKW22901SFConst.KEI_SVC, X31CWebConst.DATABEAN_GET_VALUE));
		map.put("異動区分", serviceBean.sendMessageString(KKW22901SFConst.IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE));
		map.put("異動理由コード", serviceBean.sendMessageString(KKW22901SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_GET_VALUE));
		map.put("枠", serviceBean.sendMessageString(KKW22901SFConst.FRAME_NO, X31CWebConst.DATABEAN_GET_VALUE));
		return map;
	}
	
	/**
	 * チェックの実行
	 * @param serviceBean
	 * @return true:正常終了、false:エラー
	 */
	private boolean performCheck(X31SDataBeanAccess serviceBean)
	{
		boolean errFlg = true;
		
		// 運用日付
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// (3)関連チェック
		
		// 【鍵開け済みオプションの場合】
		X31SDataBeanAccessArray keyopn_psb_op_list = serviceBean.getDataBeanArray(KKW22901SFConst.KEYOPN_ZM_OP_LIST);
		for (int i = 0; i < keyopn_psb_op_list.getCount(); i++)
		{
			X31SDataBeanAccess subBean = keyopn_psb_op_list.getDataBean(i);
			
			boolean selected = subBean.sendMessageBoolean(KKW22901SFConst.DSL, X31CWebConst.DATABEAN_GET_VALUE);
			if (selected)
			{
				String useEndYear = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_USE_ENDYMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
				String useEndMonth = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_USE_ENDYMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
				String useEndDay = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_USE_ENDYMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
				// 鍵開け済みオプション利用終了日
				String useEndYmd = useEndYear + useEndMonth + useEndDay;
				
				// 未来日チェック(運用日＋60日以降の日付を指定されるとエラーとする。)
				int day = JPCDateUtil.subtractDay(useEndYmd, opeDate);
				if (day > 60)
				{
					errFlg = false;
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", "運用日+60日", "日付"}, "keyopn_zm_use_endymd_year" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", "運用日+60日", "日付"}, "keyopn_zm_use_endymd_mon" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", "運用日+60日", "日付"}, "keyopn_zm_use_endymd_day" + i);
				}
				
				// 過去日チェック(運用日より過去日の場合はエラー。)
				if (JPCDateChecker.isPastDate(useEndYmd, opeDate, "0"))
				{
					errFlg = false;
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0690_NW, new String[]{"利用終了日", "過去"}, "keyopn_zm_use_endymd_year" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0690_NW, new String[]{"利用終了日", "過去"}, "keyopn_zm_use_endymd_mon" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0690_NW, new String[]{"利用終了日", "過去"}, "keyopn_zm_use_endymd_day" + i);
				}
				
				String chrgEndYear = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_CHRG_ENDYMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgEndMonth = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_CHRG_ENDYMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgEndDay = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_CHRG_ENDYMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
				// 鍵開け済みオプション課金終了日
				String chrgEndYmd = chrgEndYear + chrgEndMonth + chrgEndDay;
				
				// 課金終了日<=利用終了日（日付妥当性チェック）
				if (JPCDateChecker.isFutureDate(chrgEndYmd, useEndYmd, "0"))
				{
					errFlg = false;
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"課金終了日", "利用終了日", "日付"}, "keyopn_zm_chrg_endymd_year" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"課金終了日", "利用終了日", "日付"}, "keyopn_zm_chrg_endymd_mon" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"課金終了日", "利用終了日", "日付"}, "keyopn_zm_chrg_endymd_day" + i);
				}
				
				String chrgStaYmd = subBean.sendMessageString(KKW22901SFConst.KEYOPN_ZM_OP_CHRG_STAYMD, X31CWebConst.DATABEAN_GET_VALUE);;
				// 課金終了日>=課金開始日（日付妥当性チェック）
				if (!JKKStringUtil.isNullBlank(chrgStaYmd) && JPCDateChecker.isPastDate(chrgEndYmd, chrgStaYmd, "0"))
				{
					errFlg = false;
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "課金開始日以前"}, "keyopn_zm_chrg_endymd_year" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "課金開始日以前"}, "keyopn_zm_chrg_endymd_mon" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "課金開始日以前"}, "keyopn_zm_chrg_endymd_day" + i);
				}
			}
		}
		
		return errFlg;
	}
	
	/**
	 * サービスを呼び出す
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private boolean callSvc(X31SDataBeanAccess[] paramBeans, String processId) throws Exception
	{
		// 変数の定義
		HashMap<String, Object> paramMap = new HashMap<String, Object>();		// パラメタ設定用マップ;
		HashMap<String, Object> inputMap = new HashMap<String, Object>();		// データマップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();		// 結果格納用マップ
	
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_KKSV1050);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID_KKSV1050);
		
		KKSV1050_KKSV1050OPDBMapper mapper = new KKSV1050_KKSV1050OPDBMapper();
		
		if (PRC_ID_INIT.equals(processId))
		{
			mapper.setKKSV105001CC(paramBeans, inputMap, JPCModelConstant.FUNC_CD_3);
		}
		else if (PRC_ID_CHECK.equals(processId))
		{
			mapper.setKKSV105001CC(paramBeans, inputMap, JPCModelConstant.FUNC_CD_2);
		}
		else if (PRC_ID_UPD.equals(processId))
		{
			mapper.setKKSV105001CC(paramBeans, inputMap, JPCModelConstant.FUNC_CD_1);
		}
		
		X31CMessageResult msgResult = null;
		
		try
		{
			msgResult = invokeService(paramMap, inputMap, outputMap);
		}
		catch(Exception e)
		{
			// エラーコードチェック
			if (!serviceErrCdCheck(outputMap))
			{
				return false;
			}
			
			// 上記以外はシステムエラーのため、エラーをFwに返却する。
			throw e;
		}
		
		// エラー処理
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}
		
		//画面上で初期値を設定する
		if (PRC_ID_INIT.equals(processId))
		{
			// 取得情報の下りマッピング
			mapper.getKKSV105001CC(paramBeans, outputMap);
			
			return true;
		}
		
		// エラーコードチェック
		if (!serviceErrCdCheck(outputMap))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * スカパー鍵情報操作エラー処理を行う
	 * <br>
	 * @param outputMap
	 * @return true: エラーなし、false:エラーあり
	 */
	@SuppressWarnings("unchecked")
	private boolean serviceErrCdCheck(HashMap<String, Object> outputMap)
	{
		HashMap<String, Object> resultMap = null;
		String errCd = "";
		String errOpNm = "";
		
		// エラーコードを取得する
		if(outputMap != null && outputMap.containsKey(KEY_CC_FIXED_TEXT))
		{
			resultMap = (HashMap)outputMap.get(KEY_CC_FIXED_TEXT);
			if (resultMap != null)
			{
				errCd = (String) resultMap.get("err_cd");
				errOpNm = (String) resultMap.get("err_op_svc_cd_nm");
			}
		}
		
		if(!JKKStringUtil.isNullBlank(errCd))
		{
			// 登録状態チェック
			if ("04".equals(errCd))
			{
				JCCWebCommon.setMessageInfo(this, "EKBG300-JW", new String[]{errOpNm, "申込"});
				return false;
			}
			// 削除状態チェック
			else if ("05".equals(errCd))
			{
				JCCWebCommon.setMessageInfo(this, "EKBG300-JW", new String[]{errOpNm, "解約"});
				return false;
			}
			// 取消状態チェック
			else if ("09".equals(errCd))
			{
				JCCWebCommon.setMessageInfo(this, "EKBG300-JW", new String[]{errOpNm, "取消"});
				return false;
			}
			// エラーコードチェック
			else 
			{
				JCCWebCommon.setMessageInfo(this, "EKBG260-JW", new String[]{"オプションチャンネルの更新"});
				return false;
			}
		}
		
		return true;
	}
}
