/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JFUBPCommon
*	ソースファイル名：JFUBPCommon.java
*	作成者			：富士通
*	日付			：2010年08月27日
*＜機能概要＞
*	フロントＢＰ共通アクセッサー部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2010/08/27	FJ）西川	新規作成
*   v4.00       2012/11/27  FJ）中谷    変更【IT1-2012-0002162】サービス課金終了年月日設定値の改修
*   v5.00       2013/02/14  FJ）文元   【ST2-2013-0000685】日付の加減算を追加
*   v8.00       2014/04/14  FJ）文元   【ANK-1997-00-00】取扱コードよりデータ抽出項目情報取得処理を追加
*   v10.00.00   2014/07/07  FJ）谷本   【ANK-2135-00-00】BSオプションチャンネル「スターチャンネル」とのセット割検討
*   v39.00.00   2018/08/29  FJ）美濃原 【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*   v53.00.00   2021/04/16  FJ）美濃原 【ANK-4009-00-00】CX戦略WG方針対応
*   v56.00      2021/12/06   FJ）美濃原  変更【ANK-4103-00-00】マンション光コンセントタイプのWeb受付対応
*   v60.00      2022/06/20   FJ）美濃原  変更【ANK-4244-00-00】【eo定期】MT既設賃貸対応
*   v61.01      2023/09/19   FJ) 張本    変更【ANK-4315-14-00】【eoホームゲートウェイ導入対応】工事スキップ時に機器毎に配送が別れる母体事象の解消
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.values.MessageID;
import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.common.JSYbpmLog;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JFUStrConst;
import eo.common.util.JFUCommonUtil;

/**
 * フロントＢＰ共通アクセッサー部品
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUBPCommon extends JPCBPCommon
{

	// ■B-CASの機器登録判定処理（getUpdBcasFlg）
	/** B-CASの機器登録判定処理　「B-CAS不要STB」    →「B-CAS不要STB」     0：登録、更新無し */
	public static final int BCAS_NOT_ADD = 0;
	/** B-CASの機器登録判定処理　「B-CAS不要STB」    →「B-CAS不要STB以外」 1：B-CAS登録処理 */
	public static final int BCAS_ADD = 1;
	/** B-CASの機器登録判定処理　「B-CAS不要STB以外」→「B-CAS不要STB」     2：B-CAS返品更新処理 */
	public static final int BCAS_HENPIN = 2;
	/** B-CASの機器登録判定処理　「B-CAS不要STB以外」→「B-CAS不要STB以外」 3：登録、更新無し（異動無し） */
	public static final int BCAS_IDO_NASI = 3;

	// ■工事連携多機能ルーター機能コード取得処理（getKojiTakinortKinoCd）
	/** 多機能ルーター機能コード(ルーター機能のみ) */
	public static final String TAKINORT_KINO_CD_RT_ONLY = "A";
	/** 多機能ルーター機能コード(ＶＡ機能のみ) */
	public static final String TAKINORT_KINO_CD_VA_ONLY = "B";
	/** 多機能ルーター機能コード(ルーター＋ＶＡ機能) */
	public static final String TAKINORT_KINO_CD_RT_VA = "C";

	// ■工事連携多機能ルータールーター機能識別コード取得（getKojiTakinortRtRtKinoSkcd）
	/** 多機能ルータールーター機能識別コード(無線ルーター機能) */
	public static final String TAKINORT_RT_KINO_SKBT_CD_MUSEN = "0";
	/** 多機能ルータールーター機能識別コード(有線ルーター機能) */
	public static final String TAKINORT_RT_KINO_SKBT_CD_YUSEN = "1";

	/**
	 * null値変換処理
	 * <br>
	 * @param arg 引数
	 * @return 引数がnullの場合はnull、null以外の場合は引数を返却する。
	 */
	public static String nvl(String arg)
	{
		return JFUCommonUtil.nvl(arg, null);
	}

	/**
	 * null値変換処理
	 * <br>
	 * @param arg1 引数１
	 * @param arg2 引数２
	 * @return 引数１がnullの場合は引数２、null以外の場合は引数１を返却する。
	 */
	public static String nvl(String arg1, String arg2)
	{
		return JFUCommonUtil.nvl(arg1, arg2);
	}

	/**
	 * サービス(SC)項目値取得処理
	 * <br>
	 * @param param リクエストパラメータ
	 * @param scName 取得対象のSC名
	 * @param itemName 取得対象の項目名
	 * @return 取得値がnullの場合はnull、null以外の場合は取得値を返却する。
	 * @throws RequestParameterException RequestParameter用例外クラス
	 */
	public static String getBPValueString(IRequestParameterReadOnly param, String scName, String itemName) throws RequestParameterException
	{
		return JFUCommonUtil.getMapValueString((Map<Object, Object>)param.getData(scName), itemName, null);
	}

	/**
	 * サービス(SC)項目値取得処理
	 * <br>
	 * @param param リクエストパラメータ
	 * @param scName 取得対象のSC名
	 * @param itemName 取得対象の項目名
	 * @param value 指定値
	 * @return 取得値がnullの場合は指定値、null以外の場合は取得値を返却する。
	 * @throws RequestParameterException RequestParameter用例外クラス
	 */
	public static String getBPValueString(IRequestParameterReadOnly param, String scName, String itemName, String value)
			throws RequestParameterException
	{
		return JFUCommonUtil.getMapValueString((Map<Object, Object>)param.getData(scName), itemName, value);
	}

	/**
	 * オンライン日付(翌月月初)取得処理
	 * <br>
	 * @param arg null or 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日の年月日
	 * @throws ParseException
	 */
	public static String getBeginOfNextMonthOnlineDate(String arg) throws ParseException
	{
		return JFUCommonUtil.getBeginOfNextMonthDate(null == arg ? JFUBPCommon.getOpeDate(null) : arg);
	}

	/**
	 * 指定日付(翌月月初)取得処理
	 * 指定した年月の翌月月初の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日付(yyyyMMdd)
	 * @throws ParseException
	 */
	public static String getBeginOfNextMonthDate(String arg) throws ParseException
	{
		return JFUCommonUtil.getBeginOfNextMonthDate(arg);
	}

	/**
	 * オンライン日付(当月月末)取得処理
	 * <br>
	 * @param arg null or 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日の年月日
	 */
	public static String getEndOfMonthOnlineDate(String arg)
	{
		return JFUCommonUtil.getEndOfMonthDate(null == arg ? JFUBPCommon.getOpeDate(null) : arg);
	}

	/**
	 * 指定日付(月末)取得処理
	 * 指定した年月の月末日の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末日付(yyyyMMdd)
	 */
	public static String getEndOfMonthDate(String arg)
	{
		return JFUCommonUtil.getEndOfMonthDate(arg);
	}

	/**
	 * オンライン日付日付(月末加減算)取得処理
	 * 指定した年月の月末日の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末加減算日付(yyyyMMdd)
	 */
	public static String getEndOfMonthAddOnlineDate(String arg0, int arg1)
	{
		return JFUCommonUtil.getEndOfMonthAddDate((null == arg0 ? JFUBPCommon.getOpeDate(null) : arg0), arg1);
	}

	/**
	 * 指定日付(月末加減算)取得処理
	 * 指定した年月の月末日の年月日を返却します。
	 * <br>
	 * @param arg 年月(yyyyMM) or 年月日(yyyyMMdd)
	 * @return String 月末加減算日付(yyyyMMdd)
	 */
	public static String getEndOfMonthAddDate(String arg0, int arg1)
	{
		return JFUCommonUtil.getEndOfMonthAddDate(arg0, arg1);
	}

	/**
	 * 日付の加減算処理
	 * 日付の加減算を行います。
	 * <br>
	 * @param arg0 加算対象の日付(yyyyMMddまたはyyyyMMddHHmmss)
	 * @param arg1 加算する日数
	 * @return String 加減算した日付
	 */
	public static String addSubtractDay(String arg0, int arg1)
	{
		return JFUCommonUtil.addSubtractDay(arg0, arg1);
	}

	/**
	 * バイト配列変換
	 * 引数の文字列をバイト配列に変換します。
	 * @param str 変換する文字列
	 * @param encoding 変換するエンコーディング
	 * @return 変換されたバイト配列
	 */
	public static byte[] toBytes(String str, String encoding)
	{
		return JDKStirngToBytes.toBytes(str, encoding);
	}

	/**
	 * CSVカラム取得
	 * 引数の値を文字列に変換後、カンマとダブルクォーテーションを付加して返却します。
	 * @param obj 処理対象オブジェクト
	 * @param topFlg Trueの場合、上1桁目にカンマを付加しない
	 * @return String カンマとダブルクォーテーションを付加した後の文字列
	 */
	public static String getChohyoCsvCol(Object obj, boolean topFlg)
	{
		String val = "";
		if (!JFUCommonUtil.isNull(obj))
		{
			val = (String)obj;
		}

		if (topFlg == false)
		{
			return JFUStrConst.COMMA + JFUCommonUtil.getStringToDblQuote(val);
		}

		return JFUCommonUtil.getStringToDblQuote(val);
	}

	/**
	 * 料金シミュレーションＣＣ呼出
	 *
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	public static IRequestParameterReadWrite getSrcSimulation(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	{
		JACPrcSimulation cc = new JACPrcSimulation();
		return cc.getPrcSimulation(handle, param, fixedText);
	}

	/**
	 * 初期費用一覧照会部品呼出
	 *
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Exception
	 * @throws Throwable
	 */
	public static IRequestParameterReadWrite getResultData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JFUInitialCostShokaiUtil costShokai = new JFUInitialCostShokaiUtil();
		return costShokai.getResultData(handle, param, fixedText);
	}

	/**
	 * オブジェクトに値が設定されているか判定します。
	 * <br>
	 * @param arg0 判定するオブジェクト
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	public static boolean isNull(Object arg0)
	{
		return JFUCommonUtil.isNull(arg0);
	}

	/**
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ管理クラス
	 * @throws RequestParameterException
	 */
	public static IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)
			throws RequestParameterException
	{
		return JFUBaseUtil.editErrorInfo(param, templates, returnCode);
	}

	/**
	 * サービスIF実行
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetail テンプレートID(明細)
	 * @param inColumnList IN項目リスト
	 * @param errorColumn エラー項目
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	protected static IRequestParameterReadWrite executeSC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String templateId, String templateIdDetail, List<String> inColumnList, String errorColumn) throws Exception
	{
		return JFUBaseUtil.executeSC(handle, param, fixedText, templateId, templateIdDetail, inColumnList, errorColumn);
	}

	/**
	 * サービスIF実行
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetailList テンプレートID(明細)リスト
	 * @param inColumnList
	 * @param errorColumn エラー項目
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	protected static IRequestParameterReadWrite executeSC(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String templateId, List<String> templateIdDetailList, List<String> inColumnList, String errorColumn) throws Exception
	{
		return JFUBaseUtil.executeSC(handle, param, fixedText, templateId, templateIdDetailList, inColumnList, errorColumn);
	}

	/**
	 * 機能コード設定
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param funcCode 機能コード
	 * @throws RequestParameterException
	 */
	protected static void setFuncCode(IRequestParameterReadWrite param, String fixedText, String funcCode) throws RequestParameterException
	{
		JFUBaseUtil.setFuncCode(param, fixedText, funcCode);
	}

	/**
	 * 機能コード取得
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return 機能コード
	 * @throws RequestParameterException
	 */
	protected static String getFuncCode(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		return JFUBaseUtil.getFuncCode(param, fixedText);
	}

	/**
	 * 一時領域のテンプレート値取得
	 *
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param columnKey 項目キー
	 * @return 一時領域のテンプレート値
	 */
	protected static String getTemplateValue(HashMap<String, Object> dataMap, String parentKey, String columnKey)
	{
		return JFUBaseUtil.getTemplateValue(dataMap, parentKey, columnKey);
	}

	/**
	 * 一時領域のテンプレート値取得(明細部)
	 *
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @param columnKey 項目キー
	 * @param index 配列番号
	 * @return 一時領域のテンプレート値(明細部)
	 */
	protected static String getTemplateListValue(HashMap dataMap, String parentKey, String listKey, String columnKey, int index)
	{
		return JFUBaseUtil.getTemplateListValue(dataMap, parentKey, listKey, columnKey, index);
	}

	/**
	 * 一時領域のテンプレートマップ取得(明細部)
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @param index 配列番号
	 * @return 一時領域のテンプレートマップ
	 */
	protected static HashMap getTemplateListMap(HashMap dataMap, String parentKey, String listKey, int index)
	{
		return JFUBaseUtil.getTemplateListMap(dataMap, parentKey, listKey, index);
	}

	/**
	 * 一時領域のテンプレート明細リスト取得
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @return 一時領域のテンプレート明細リスト
	 */
	protected static List<HashMap> getTemplateList(HashMap dataMap, String parentKey, String listKey)
	{
		return JFUBaseUtil.getTemplateList(dataMap, parentKey, listKey);
	}

	/**
	 * 最大のSC実行結果取得キー取得
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentBaseKey テンプレート取得キー(通番なし)
	 * @return 最大のSC実行結果取得キー
	 */
	protected static String getMaxTempTempleteKey(HashMap dataMap, String parentBaseKey)
	{
		return JFUBaseUtil.getMaxTempTempleteKey(dataMap, parentBaseKey);
	}

	/**
	 * 一時領域のテンプレート明細存在チェック
	 * <br>
	 * @param dataMap ユーザデータ
	 * @param parentKey テンプレート取得キー
	 * @param listKey  テンプレート取得キー(明細部)
	 * @return true:存在 false:未存在
	 */
	protected static boolean isExistsTemplateDetail(HashMap dataMap, String parentKey, String listKey)
	{
		return JFUBaseUtil.isExistsTemplateDetail(dataMap, parentKey, listKey);
	}

	/**
	 * 一時領域の一括削除
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	protected static void deleteTempArea(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		JFUBaseUtil.deleteTempArea(param, fixedText);
	}

	/**
	 * ユーザーデータの初期化
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param columnList 項目リスト
	 * @throws RequestParameterException
	 */
	protected static void initData(IRequestParameterReadWrite param, String fixedText, List<String> columnList) throws RequestParameterException
	{
		JFUBaseUtil.initData(param, fixedText, columnList);
	}

	/**
	 * 検索エラーなし設定
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	protected static void ignoreSearchError(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		JFUBaseUtil.ignoreSearchError(param, fixedText);
	}

	/**
	 * 関連チェックエラー情報設定
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param templateId テンプレートID
	 * @param errColumn エラー項目
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	protected static void setRelationErrorInfo(IRequestParameterReadWrite param, String templateId, String errColumn, String fixedText)
			throws RequestParameterException
	{
		JFUBaseUtil.setRelationErrorInfo(param, templateId, errColumn, fixedText);
	}

	/**
	 * マップのコピー
	 *
	 * <br>
	 * @param dest 先のマップ
	 * @param org 元のマップ
	 */
	protected static void copyProperties(HashMap<String, Object> dest, HashMap<String, Object> org)
	{
		JFUBaseUtil.copyProperties(dest, org);
	}

	/**
	 * チェック処理
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetail テンプレートID(明細)
	 * @param inColumnList IN項目リスト
	 * @return チェック処理用マップ
	 * @throws Exception
	 */
	protected static HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String templateId, String templateIdDetail, List<String> inColumnList) throws Exception
	{
		return JFUBaseUtil.getInvokeCBS(handle, param, fixedText, templateId, templateIdDetail, inColumnList);
	}

	/**
	 * デバッグログを出力します。
	 * @param cls クラス
	 * @param debugMsg メッセージ
	 */
	public static void printBpDebugLog(Class cls, String debugMsg)
	{
		JSYbpmLog.println(JSYLogBase.DEBUG, cls, debugMsg, MessageID.DEB_X21_DEBUG_MSG, new String[] { JFUStrConst.EMPTY, JFUStrConst.EMPTY },
				JFUStrConst.EMPTY);
	}

	/**
	 * 変数デバッグ確認。
	 *
	 * <br>
	 * @param groupNm 集計単位名
	 * @param wribCampList リスト
	 */
	public static String listDebug(String groupNm, ArrayList wribCampList, String key, String wTab)
	{
		StringBuffer sb = new StringBuffer();
		try
		{
			if (wribCampList == null || wribCampList.size() == 0)
			{
				return sb.toString();
			}
			int idx = 0;
			for (int i = 0; i < wribCampList.size(); i++)
			{
				sb.append(wTab + "＠＠＠ " + key + " 配列(" + idx + ")" + "\r\n");
				wTab = wTab + "\t";
				Object value = (HashMap)wribCampList.get(i);
				if (value == null)
				{
					sb.append(wTab + "＠＠＠ " + "=[" + value + "]" + "\r\n");
				}
				else if (value instanceof String)
				{
					sb = sb.append((String)value);
				}
				else if (value instanceof Map)
				{
					sb = sb.append(mapDebug(groupNm, (HashMap)value, wTab));
				}
				else if (value instanceof List)
				{
					sb = sb.append(listDebug(groupNm, (ArrayList)value, key, wTab));
				}
				else
				{
					sb.append(wTab + "＠＠＠ タイプ対応外 \r\n");
				}
				idx++;
			}
		}
		catch (Exception ex)
		{
			// 処理続行
			return sb.toString();
		}
		return sb.toString();
	}

	/**
	 * Mapデバッグ確認。
	 *
	 * <br>
	 * @param groupNm 名称
	 * @param wkMap マップ
	 */
	public static String mapDebug(String groupNm, HashMap wkMap, String wTab)
	{
		StringBuffer sb = new StringBuffer();
		try
		{
			if (wkMap == null || wkMap.size() == 0)
			{
				return sb.toString();
			}
			Iterator<String> itr = wkMap.keySet().iterator();
			wTab = wTab + "\t";
			while (itr.hasNext())
			{
				String key = (String)itr.next();
				Object value = wkMap.get(key);
				if (value == null)
				{
					sb.append(wTab + "＠＠＠ " + key + "=[" + value + "]" + "\r\n");
				}
				else if (value instanceof String)
				{
					sb.append(wTab + "＠＠＠ " + key + "=[" + value + "]" + "\r\n");
				}
				else if (value instanceof Map)
				{
					sb = sb.append(mapDebug(groupNm, (HashMap)value, wTab));
				}
				else if (value instanceof List)
				{
					sb = sb.append(listDebug(groupNm, (ArrayList)value, key, wTab));
				}
				else
				{
					sb.append(wTab + "＠＠＠ タイプ対応外 \r\n");
				}
			}
		}
		catch (Exception ex)
		{
			// 処理続行
			return sb.toString();
		}

		return sb.toString();
	}

	/**
	 * 宅内機器型式取得処理です。<br>
	 *
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Exception
	 * @throws Throwable
	 */
	public static List<HashMap> getTaknkiki(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JFUGetTaknkikiModelInfoUtil taknkikiModel = new JFUGetTaknkikiModelInfoUtil();
		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixedText);

		return taknkikiModel.getTaknkiki(handle, param, inMap);
	}

	/**
	 * 宅内機器型式リスト取得処理(STB用)です。<br>
	 *
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Exception
	 * @throws Throwable
	 */
	public static List<HashMap> getTaknkikiStbList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JFUGetTaknkikiModelInfoUtil taknkikiModel = new JFUGetTaknkikiModelInfoUtil();
		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixedText);

		return taknkikiModel.getTaknkikiStbList(handle, param, inMap);
	}

	/**
	 * サービス契約(HTなど、日割系)のサービス課金終了日を返します。
	 *
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdSvcKeiHt(String arg)
	{
		return JFUBaseUtil.getSvcChrgEndYmdSvcKeiHt(arg);
	}

	/**
	 * オプションサービス契約(TV以外、月額系)のサービス課金終了日を返します。
	 *
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdOp(String arg)
	{
		return JFUBaseUtil.getSvcChrgEndYmdOp(arg);
	}

	/**
	 * オプションサービス契約(TV、月額系)のサービス課金終了日を返します。
	 *
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdOpTv(String arg)
	{
		return JFUBaseUtil.getSvcChrgEndYmdOpTv(arg);
	}

	/**
	 * 機器提供サービス契約(レンタル、月額系)のサービス課金終了日を返します。
	 *
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdKiki(String arg)
	{
		return JFUBaseUtil.getSvcChrgEndYmdKiki(arg);
	}

	/**
	 * 割引サービス契約(HTなど、日割系)のサービス課金終了日を返します。
	 *
	 * <br>
	 * @param arg パラメータ
	 * @return サービス課金終了日
	 */
	public static String getSvcChrgEndYmdWribHt(String arg)
	{
		return JFUBaseUtil.getSvcChrgEndYmdWribHt(arg);
	}

	/**
	 * 条件返却処理
	 * <br>
	 * @param cond 条件
	 * @param arg1 引数１
	 * @param arg2 引数２
	 * @return 条件がTrueの場合引数１、Falseの場合は引数２を返却する。
	 */
	public static String iif(Boolean tf, String arg1, String arg2)
	{
		return tf ? arg1: arg2;
	}

	/**
	 * 最終更新年月日時分秒を設定します。（ネット）
	 *
	 * @param param リクエストパラメータ
	 * @param lastUpdDtm 最終更新年月日時分秒
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public static IRequestParameterReadWrite setNetSvkeiLastUpdDtm(IRequestParameterReadWrite param, String lastUpdDtm)
			throws Exception
	{
		JFUAddCommonUtil addCommonUtil = new JFUAddCommonUtil();
		return addCommonUtil.setNetSvkeiLastUpdDtm(param, lastUpdDtm);
	}

	/**
	 * 最終更新年月日時分秒を取得します。（ネット）
	 *
	 * @param param リクエストパラメータ
	 * @param lastUpdDtm 最終更新年月日時分秒
	 * @return 最後に更新した最終更新年月日時分秒
	 * @throws Exception
	 */
	public static String getNetSvkeiLastUpdDtm(IRequestParameterReadWrite param, String lastUpdDtm) throws Exception
	{
		JFUAddCommonUtil addCommonUtil = new JFUAddCommonUtil();
		return addCommonUtil.getNetSvkeiLastUpdDtm(param, lastUpdDtm);
	}

	/**
	 * 最終更新年月日時分秒を設定します。（電話）
	 *
	 * @param param リクエストパラメータ
	 * @param lastUpdDtm 最終更新年月日時分秒
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public static IRequestParameterReadWrite setTelSvkeiLastUpdDtm(IRequestParameterReadWrite param, String lastUpdDtm)
			throws Exception
	{
		JFUAddCommonUtil addCommonUtil = new JFUAddCommonUtil();
		return addCommonUtil.setTelSvkeiLastUpdDtm(param, lastUpdDtm);
	}

	/**
	 * 最終更新年月日時分秒を取得します。（電話）
	 *
	 * @param param リクエストパラメータ
	 * @param lastUpdDtm 最終更新年月日時分秒
	 * @return 最後に更新した最終更新年月日時分秒
	 * @throws Exception
	 */
	public static String getTelSvkeiLastUpdDtm(IRequestParameterReadWrite param, String lastUpdDtm) throws Exception
	{
		JFUAddCommonUtil addCommonUtil = new JFUAddCommonUtil();
		return addCommonUtil.getTelSvkeiLastUpdDtm(param, lastUpdDtm);
	}

	/**
	 * 最終更新年月日時分秒を設定します。（テレビ）
	 *
	 * @param param リクエストパラメータ
	 * @param lastUpdDtm 最終更新年月日時分秒
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public static IRequestParameterReadWrite setTvSvkeiLastUpdDtm(IRequestParameterReadWrite param, String lastUpdDtm)
			throws Exception
	{
		JFUAddCommonUtil addCommonUtil = new JFUAddCommonUtil();
		return addCommonUtil.setTvSvkeiLastUpdDtm(param, lastUpdDtm);
	}

	/**
	 * 最終更新年月日時分秒を取得します。（テレビ）
	 *
	 * @param param リクエストパラメータ
	 * @param lastUpdDtm 最終更新年月日時分秒
	 * @return 最後に更新した最終更新年月日時分秒
	 * @throws Exception
	 */
	public static String getTvSvkeiLastUpdDtm(IRequestParameterReadWrite param, String lastUpdDtm) throws Exception
	{
		JFUAddCommonUtil addCommonUtil = new JFUAddCommonUtil();
		return addCommonUtil.getTvSvkeiLastUpdDtm(param, lastUpdDtm);
	}

	/**
	 * 最終更新年月日時分秒を取得します。（テレビ）
	 *
	 * @param param リクエストパラメータ
	 * @param lastUpdDtm 最終更新年月日時分秒
	 * @return 最後に更新した最終更新年月日時分秒
	 * @throws Exception
	 */
	public static String getTvSvkeiLastUpdDtm(IRequestParameterReadOnly param, String lastUpdDtm) throws Exception
	{
		JFUAddCommonUtil addCommonUtil = new JFUAddCommonUtil();
		return addCommonUtil.getTvSvkeiLastUpdDtm(param, lastUpdDtm);
	}

	/**
	 * 取扱コードよりデータ抽出項目情報を取得します。
	 *
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	public static IRequestParameterReadWrite getDchskmByTratCd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	{
		JFUGetDchskmUtil getDchskmUtil = new JFUGetDchskmUtil();
		return getDchskmUtil.getDchskmByTratCd(handle, param, fixedText);
	}

	/**
	 * テレビコース名表示切替部品呼出
	 *
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Exception
	 * @throws Throwable
	 */
	public static IRequestParameterReadWrite getTvCourseDspSwch(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Exception
	{
		JFUTvCourseDspSwchUtil util = new JFUTvCourseDspSwchUtil();
		return util.getResultData(handle, param, fixedText);
	}

	/**
	 * サービスIF実行
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param templateId テンプレートID
	 * @param templateIdDetail テンプレートID(明細)
	 * @param inColumnList IN項目リスト
	 * @param errorColumn エラー項目
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	protected static IRequestParameterReadWrite addCaseFileRnkData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JFUCaseFileRnkDataUtil util = new JFUCaseFileRnkDataUtil();
		return util.addCaseFileRnkData(handle, param, fixedText);
	}

	/**
	 * 業務パラメータ取得処理
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param work_param_id 業務パラメータID
	 * @return 業務パラメータ設定値（有効期間考慮。取得不可の場合は空文字。）
	 * @throws Exception
	 */
	protected static String getWorkParamKnri(SessionHandle handle, IRequestParameterReadWrite param, String work_param_id) throws Exception
	{
		JFUWorkParamKnriUtil util = new JFUWorkParamKnriUtil();
		return util.getResultData(handle, param, work_param_id);
	}

	/**
	 * 業務パラメータ取得処理（リスト型）<br>
	 * カンマ区切りの項目をリスト型で返却
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param work_param_id 業務パラメータID
	 * @return 業務パラメータ設定値（有効期間考慮。取得不可の場合は空リスト。）
	 * @throws Exception
	 */
	protected static List<String> getWorkParamSplit(SessionHandle handle, IRequestParameterReadWrite param, String work_param_id) throws Exception
	{
		JFUWorkParamKnriUtil util = new JFUWorkParamKnriUtil();
		return util.getResultSplit(handle, param, work_param_id);
	}

	/**
	 * BCAS不要判定処理（isBcasFuyo）（テレビ）。
	 *
	 * <br>
	 * @param master_hdd_capa_list 「B-CAS不要STB」に該当するHDD容量コード。業務パラメータから取得したもの。
	 * @param hdd_capa_cd ＨＤＤ容量コード
	 * @return true：ＨＤＤ容量コードリストにＨＤＤ容量コードが存在する場合（B-CAS不要STB) false：存在しない場合
	 */
	public static boolean isBcasFuyo(List<String> master_hdd_capa_list, String hdd_capa_cd)
	{
		if ((master_hdd_capa_list == null || master_hdd_capa_list.size() == 0))
		{
			return false;
		}
		if (master_hdd_capa_list.contains(hdd_capa_cd))
		{
			// B-CAS不要STB
			return true;
		}

		return false;
	}

	/**
	 * B-CASの機器登録判定処理（getUpdBcasFlg）
	 *
	 * <br>
	 * @param master_hdd_capa_list ＨＤＤ容量コードリスト（業務パラメータ）
	 * @param hdd_capa_cd_old ＨＤＤ容量コード（変更前）※STB追加の場合はnull（空文字）
	 * @param hdd_capa_cd_new ＨＤＤ容量コード（変更後）※空文字の場合は、変更前と同じ扱い
	 * @return 0：登録、更新無し、1：B-CAS登録処理、2：B-CAS返品更新処理、3：登録、更新無し（異動無し）
	 */
	public static int getUpdBcasFlg(List<String> master_hdd_capa_list, String hdd_capa_cd_old, String hdd_capa_cd_new)
	{

		String oldCapa = nvl(hdd_capa_cd_old, JFUStrConst.EMPTY);
		String newHddCd = nvl(hdd_capa_cd_new, JFUStrConst.EMPTY);

		if (JFUStrConst.EMPTY.equals(newHddCd))
		{
			newHddCd = oldCapa;
		}

		boolean isNewStbFuyo = isBcasFuyo(master_hdd_capa_list, newHddCd);
		//【STB追加処理】
		if (JFUStrConst.EMPTY.equals(oldCapa))
		{
			if (isNewStbFuyo)
			{
				// 「B-CAS不要STB」追加
				// B-CAS登録、更新無し
				return BCAS_NOT_ADD;
			}
			// B-CAS登録処理
			return BCAS_ADD;
		}

		//【STB変更処理】
		boolean isOldStbFuyo = isBcasFuyo(master_hdd_capa_list, hdd_capa_cd_old);
		// ■変更前「B-CAS不要STB」
		if (isOldStbFuyo)
		{
			if (isNewStbFuyo)
			{
				// 「B-CAS不要STB」→「B-CAS不要STB」
				// B-CAS登録、更新無し
				return BCAS_NOT_ADD;
			}
			else
			{
				// 「B-CAS不要STB」→「B-CAS不要STB以外」
				// 変更後のB-CAS登録処理
				return BCAS_ADD;
			}
		}
		else
		{
			// ■変更前「B-CAS不要STB以外」
			if (isNewStbFuyo)
			{
				// 「B-CAS不要STB以外」→「B-CAS不要STB」
				// 変更前の返品更新処理
				return BCAS_HENPIN;
			}
			else
			{
				// 「B-CAS不要STB以外」→「B-CAS不要STB以外」
				// B-CASの機器は存在する。交換せずに流用して使用。
				return BCAS_IDO_NASI;
			}
		}

	}

	/**
	 * 工事連携多機能ルーター機能コード取得メソッド
	 *
	 * @param tempData
	 * @return A:ルーターのみ有効 B:VAのみ有効 C:ルーターとVA両方が有効
	 */
	public static String getKojiTakinortKinoCd(HashMap<String, String> tempData)
	{
		String rtnCd = JFUStrConst.EMPTY;
		if (tempData == null || tempData.size() == 0)
		{
			return rtnCd;
		}

		// ルーターの機器オプション有効判定
		boolean rutarAriFlg = false;
		if (tempData.containsKey(JFUStrConst.KK2801_KKOP_SVC_CD_G01))
		{
			rutarAriFlg = true;
		}
		// 電話アダプター機能オプション有効判定
		boolean vaAriFlg = false;
		if (tempData.containsKey(JFUStrConst.KK2801_KKOP_SVC_CD_G02))
		{
			vaAriFlg = true;
		}

		// ルーターとVA両方が有効な場合
		if (rutarAriFlg == true && vaAriFlg == true)
		{
			rtnCd = TAKINORT_KINO_CD_RT_VA;
		}
		// ルーターのみ有効
		else if (rutarAriFlg == true && vaAriFlg == false)
		{
			rtnCd = TAKINORT_KINO_CD_RT_ONLY;
		}
		// VAのみ有効
		else if (rutarAriFlg == false && vaAriFlg == true)
		{
			rtnCd = TAKINORT_KINO_CD_VA_ONLY;
		}

		return rtnCd;
	}

	/**
	 * 工事連携多機能ルータールーター機能識別コード取得メソッド
	 *
	 * @param tempData
	 * @return 0:無線 1:有線
	 */
	public static String getKojiTakinortRtRtKinoSkcd(HashMap<String, String> tempData)
	{

		String rtnCd = JFUStrConst.EMPTY;
		if (tempData == null || tempData.size() == 0)
		{
			return rtnCd;
		}

		String pcrsCd = nvl(tempData.get("takino_pcrs_cd"));
		if (JFUStrConst.CD00134_G01.equals(pcrsCd))
		{
			rtnCd = TAKINORT_RT_KINO_SKBT_CD_YUSEN;
		}
		else if (JFUStrConst.CD00134_G02.equals(pcrsCd))
		{
			rtnCd = TAKINORT_RT_KINO_SKBT_CD_MUSEN;
		}

		return rtnCd;
	}

	/**
	 * 提供方式変更種別の判定を行う。
	 *
	 * <br>
	 * @param tk_hoshiki_cd 提供方式コード
	 * @param tk_hoshiki_pattern_cd 提供方式パターンコード
	 * @param tonai_speed_cd 棟内速度コード
	 * @param hhs_1gonly_flg 光配線１Ｇのみフラグ（ＭＯＮＭＯＳ管理物件）
	 * @param kanyu_kei_pay_hoshiki_cd 加入契約支払方式コード
	 * @return 設定あり：料金コースと画面表示コースが異なる
	 */
	public static String getTkHoshikiChgSbtCd(String tk_hoshiki_cd, String tk_hoshiki_pattern_cd, String tonai_speed_cd, String hhs_1gonly_flg, String kanyu_kei_pay_hoshiki_cd)
	{
		// 注）JFUBPCommon、JFUWebCommonにロジックあり

		// 補足：光配線（光コンセント、MANMOS管理（全戸一括）を除く）、イーサは 1Gの場合に 100Mと1Gのコース選択が基本的に可能。
		//       光コンセント、MANMOS管理（全戸一括）は棟内速度のみ申込可能。

		// ※光コンセントは「提供方式コード、提供方式パターンコード、棟内速度コード」で判定を行う。
		if (JFUStrConst.TK_HOSHIKI_HIKARI_HAISEN.equals(tk_hoshiki_cd) && JFUStrConst.CD01213_51.equals(tk_hoshiki_pattern_cd)
				&& (!isNull(tonai_speed_cd)))
		{
			// 光コンセント
			return JFUStrConst.TK_HOSHIKI_CHG_SBT_CD_CONCENT;
		}
		// ※光配線（速度変更）＝ MANMOS管理（全戸一括）は、「光配線１Ｇのみフラグ、加入契約支払方式コード」で判定を行う。
		if (JFUStrConst.HIKARIKA_MANS_FLG_1.equals(hhs_1gonly_flg) && (JFUStrConst.CD01216_003.equals(kanyu_kei_pay_hoshiki_cd))
				&& (!isNull(tonai_speed_cd)))
		{
			// 光配線（全戸一括）
			return JFUStrConst.TK_HOSHIKI_CHG_SBT_CD_HIKARI;
		}
		return JFUStrConst.EMPTY;
	}

	/**
	 * 機器配送情報連結ＣＣ呼出
	 *
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @param mskm_no 申込番号
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	public static void execKikiHaisoInfoRnkt(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String mskm_no)
			throws Throwable
	{
		HashMap<String, Object> outMap = new HashMap<String, Object>();

		// 申込番号
		outMap.put("key_mskm_no", mskm_no);
		// パラメタ設定
		param.setData(fixedText, outMap);

		// 機器配送情報連結CC
		JKKKikiHaisoInfoRnktCC cc = new JKKKikiHaisoInfoRnktCC();
		cc.execute(handle, param, fixedText);
	}
}

