/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUBmpKhChkCC
*   ソースファイル名：JFUBmpKhChkCC.java
*   作成者          ：富士通
*   日付            ：2022年02月20日
*＜機能概要＞
*   番号ポータビリティ可否チェックコモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日		修正者		修正内容
*   v57.00.00	2022/02/20	FJ)杉本		ANK-4217-00-00_一般Webサービス申込機能再構築に伴うAPI作成
*   v72.00      2024/05/08	FJ)美濃原	ANK-4494-00-00_【eo定期】 双方向番ポ対応
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import com.fujitsu.futurity.bp.custom.constant.JFUMkmInfoAddFrontiaConstCC;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.common.check.EmsizeCharCheck;
import com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;

/**
 * 番号ポータビリティ可否チェックコモンコンポーネント部品です。
 * 
 * <br>
 * @author 富士通
 */
public class JFUBmpKhChkCC extends JFUBaseCC
{

	/** IN項目：電話番号 */
	private static final String TELNO = "telno";
	/** IN項目：郵便番号 */
	private static final String PCD = "pcd";
	/** IN項目：住所 */
	private static final String ADDRESS = "address";

	/** レスポンスキー 処理結果 */
	private static final String OUT_RESULT = "result";
	/** レスポンスキー 電話番号 */
	private static final String OUT_TELNO = TELNO;
	/** レスポンスキー 郵便番号 */
	private static final String OUT_PCD = PCD;
	/** レスポンスキー 住所 */
	private static final String OUT_ADDRESS = ADDRESS;
	/** レスポンスキー 理由コード */
	private static final String OUT_REASON_CD = "reason_cd";

	/** 番ポチェックINPUTキー 電話番号リスト */
	private static final String BMP_TELNO_LIST = "tel_no_list";
	/** 番ポチェックINPUTキー 電話番号 */
	private static final String BMP_TELNO = "tel_no";
	/** 番ポチェックINPUT値 機能コード:"1" */
	private static final String FUNC_CODE = "1";

	/** 番ポチェックRESULTキー チェック結果リスト */
	private static final String ERR_UM = "err_um";
	/** 番ポチェックRESULTキー チェック結果リスト エラー無し */
	private static final String ERR_UM_OK = "0";
	/** 番ポチェックRESULTキー チェック結果リスト エラー有り */
	private static final String ERR_UM_NG = "1";

	/** CCパラメータ：ボディ情報 */
	private static final String BODY_INFO = "BODY_INFO";
	/** CCパラメータ：エラー情報 */
	private static final String ERROR_INFO = "ERROR_INFO";
	/** CCパラメータ：エラーコード */
	private static final String ERROR_CODE = "errCode";
	/** CCパラメータ：エラーメッセージ */
	private static final String ERROR_MESSAGE = "errMessage";

	/** 属性チェック 半角英数字1 */
	private static final String ATTR_TEL2 = "tel2";

	/** APIエラーコード_1001：必須チェックエラー */
	private static final String RES_KEY_ERROR_CODE_1001 = "1001";
	/** APIエラーコード_1002：属性チェックエラー */
	private static final String RES_KEY_ERROR_CODE_1002 = "1002";
	/** APIエラーコード_1003：桁数チェックエラー */
	private static final String RES_KEY_ERROR_CODE_1003 = "1003";

	/** 処理結果 可 */
	private static final String RESULT_OK = "1";
	/** 処理結果 否 */
	private static final String RESULT_NG = "0";

	/** OPTAGE番号利用中エラー */
	private static final String REASON_CD_001 = "001";
	/** 番号ポータビリティ可能エリアチェックエラー */
	private static final String REASON_CD_002 = "002";

	/** APIリターンコード_0000 正常終了 */
	private static final String RETURN_CD_0000 = "0000";
	/** APIリターンコード_5000_業務エラー */
	private static final String RETURN_CD_5000 = "5000";

	// ■ＭＡチェックCC【旧：同番移転可能エリアチェック】JKKChkDobanitenPsbAreaCC
	/** 番ポ電話番号登録可否チェック用 */
	/** 電話番号 */
	private static final String KEY_TEL_NO1 = "key_telno1";
	/** 郵便番号（前） */
	private static final String KEY_PDC_BF = "key_pcd_bf";
	/** 郵便番号（後） */
	private static final String KEY_PDC_AF = "key_pcd_af";
	/** 都道府県 */
	private static final String KEY_STATE_NM = "key_state_nm";
	/** 市区町村 */
	private static final String KEY_CITY_NM = "key_city_nm";
	/** 大字通称名 */
	private static final String KEY_OAZTSU_NM = "key_oaztsu_nm";
	/** 字丁目名 */
	private static final String KEY_AZCHO_NM = "key_azcho_nm";
	/** 例外入力 */
	private static final String KEY_EXCEPTION_INPUT = "key_exception_input";
	/** 同一住所フラグ */
	private static final String SAME_AD_FLG = "same_ad_flg";
	/** 住所コード一覧最大検索件数 */
	private static final String AD_CD_LIST_MAX_SEARCH_NUM = "ad_cd_list_max_search_num";

	/** 番号区画（ＭＡ）１ */
	private static final String TEL_MA_CD1 = "tel_ma_cd1";
	/** 住所コードリスト */
	private static final String AD_CD_LIST = "ad_cd_list";
	/** 番号区画（ＭＡ）リスト */
	private static final String MA_CD_LIST = "ma_cd_list";
	/** 電話番号１−番号区画（ＭＡ） */
	private static final String R_MA_1 = "r_ma_1";
	/** 電話番号１−簡易チェック結果 */
	private static final String KANI_CKRLT_1 = "kani_ckrlt_1";
	/** 電話番号１−簡易チェック結果 NG */
	private static final String KANI_CKRLT_1_NG = "2";

	/**
	 * 番号ポータビリティ可否チェック処理です。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// 返却用ボディ
		Map<String, Object> bodyMap = new HashMap<String, Object>();

		inMap.put(BODY_INFO, bodyMap);
		// 処理結果
		bodyMap.put(OUT_RESULT, RESULT_NG);
		// 電話番号
		bodyMap.put(OUT_TELNO, inMap.get(TELNO));
		// 郵便番号
		bodyMap.put(OUT_PCD, inMap.get(PCD));
		// 住所
		bodyMap.put(OUT_ADDRESS, inMap.get(ADDRESS));
		// エラーリスト
		inMap.put(ERROR_INFO, new ArrayList<Map<String, String>>());

		// 単項目チェック
		if (!checkUnitParam(inMap))
		{
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
			return param;
		}

		// ■番ポ電話番号登録チェックCC
		JFUBmpTelNoAddChkCC bmpCheckCC = new JFUBmpTelNoAddChkCC();

		// チェック用変数の設定
		IRequestParameterReadWrite chkParam = param;
		HashMap chkMap = (HashMap)chkParam.getData(fixedText);

		// チェック対象情報の設定
		setInParams(chkMap);

		// チェック実行
		bmpCheckCC.execute(handle, chkParam, fixedText);

		// チェック結果の判定
		chkMap = (HashMap)chkParam.getData(fixedText);
		String chekRslt = (String) chkMap.get(ERR_UM);
		printlnEjbLog("*** JFUBmpTelNoAddChkCC   err_um[" + chekRslt + "]");

		String reason_cd = null;
		if (chekRslt.equals(ERR_UM_OK))
		{
			// ■ＭＡチェックCC【旧：同番移転可能エリアチェック】
			// チェック対象情報の設定
			HashMap<String, Object> checkMap = setJKKChkDobanitenPsbAreaCC(handle, inMap, chkParam, fixedText);

			// 返却マップに設定
			chkParam.setData("JKKChkDobanitenPsbAreaCC", checkMap);

			JKKChkDobanitenPsbAreaCC psbAreaCC = new JKKChkDobanitenPsbAreaCC();
			psbAreaCC.executeMain(handle, chkParam, "JKKChkDobanitenPsbAreaCC");
			// チェック結果の判定
			chkMap = (HashMap)chkParam.getData("JKKChkDobanitenPsbAreaCC");
			// "1":OK、"2":NG、"3"：審査不可、NULL：エラー発生時
			String result = (String) chkMap.get(KANI_CKRLT_1);
			printlnEjbLog(getMsgDobanitenPsbAreaCC(chkMap));
			if (KANI_CKRLT_1_NG.equals(result)){
				chekRslt = ERR_UM_NG;
				reason_cd = REASON_CD_002;
			} else {
				chekRslt = ERR_UM_OK;
			}
		} else {
			reason_cd = REASON_CD_001;
		}

		if (chekRslt.equals(ERR_UM_OK))
		{
			// 処理結果 OK
			bodyMap.put(OUT_RESULT, RESULT_OK);
		}else {
			// 処理結果 NG
			bodyMap.put(OUT_REASON_CD, reason_cd);
		}

		// 一度ユーザデータを削除し、再度設定する
		param.removeData(fixedText);
		param.setData(fixedText, bodyMap);

		// 正常終了
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_0000);
		param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);

		return param;
	}

	/**
	 * 単項目チェック
	 * 
	 * @param ccMsg
	 * @return チェックの判定
	 * @throws Exception
	 */
	private boolean checkUnitParam(Map<String, Object> ccMsg) throws Exception
	{
		HashMap<String, String> checkUnitParamMap = new HashMap<String, String>();
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		// ===========================================================================
		// 単項目チェック
		// ===========================================================================
		checkUnitParamMap.put(TELNO, "tel2:10,11");

		checkUnitParamMap.put(PCD, JFUMkmInfoAddFrontiaConstCC.ATTR_HANNKAKUSUUJI1 + ":7,7");
		checkUnitParamMap.put(ADDRESS, JFUMkmInfoAddFrontiaConstCC.ATTR_ZENKAKU + ":1,61");

		checkUnitParam(errList, ccMsg, checkUnitParamMap, true);

		// エラーが存在する場合
		if (errList.size() > 0)
		{
			ccMsg.put(ERROR_INFO, errList);
			return false;
		}

		return true;
	}

	/**
	 * 単項目チェック
	 *
	 * @param errorList
	 * @param ccMsg
	 * @param itemInfoMap
	 * @param isReqChk
	 * @throws Exception
	 */
	private void checkUnitParam(List<Map<String, String>> errorList, Map<String, Object> ccMsg, HashMap<String, String> itemInfoMap, boolean isReqChk) throws Exception
	{
		Set<Entry<String, String>> itemInfoMapEntrySet = itemInfoMap.entrySet();

		for (Entry<String, String> entry : itemInfoMapEntrySet)
		{
			// チェック情報をチェックパターンと桁数値に分割
			String itemCkeckInfo = entry.getValue();
			String[] itemCkeckInfoArray = itemCkeckInfo.split(JFUStrConst.HALF_COLON);

			String itemCkeckPattern = null;
			int itemCkeckLenMin = 0;
			int itemCkeckLenMax = 0;

			if (itemCkeckInfoArray != null && itemCkeckInfoArray.length == 2)
			{
				// チェックパターン
				itemCkeckPattern = itemCkeckInfoArray[0];

				// 桁数値を最小値と最大値に分割
				String[] itemCkeckLenArray = itemCkeckInfoArray[1].split(JFUStrConst.COMMA);
				if (itemCkeckLenArray != null && itemCkeckLenArray.length == 2)
				{
					// 桁数：最小値を取得。
					itemCkeckLenMin = Integer.parseInt(itemCkeckLenArray[0]);
					// 桁数：最大値を取得。
					itemCkeckLenMax = Integer.parseInt(itemCkeckLenArray[1]);
				}
			}

			// 必須チェック
			if (JFUBPCommon.isNull(ccMsg.get(entry.getKey())))
			{
				if (isReqChk)
				{
					// 必須チェックエラー
					errorList.add(getItemErrInfMap(ccMsg, entry.getKey(), RES_KEY_ERROR_CODE_1001));
				}
			}
			else if (itemCkeckPattern != null)
			{
				// 項目値
				String itemName = entry.getKey();
				String itemValue = (String)ccMsg.get(itemName);

				// 桁数チェック
				if (itemCkeckLenMax != 0 && !LengthCheck.isLength2Check(itemValue, itemCkeckLenMin, itemCkeckLenMax))
				{
					// 桁数チェックエラー
					errorList.add(getItemErrInfMap(ccMsg, itemName, RES_KEY_ERROR_CODE_1003));
				}
				// 属性チェック
				// 各チェックパターンによりチェックを行う
				else if (JFUMkmInfoAddFrontiaConstCC.ATTR_HANNKAKUSUUJI1
						.equals(itemCkeckPattern)
						&& !HalfCharCheck.isNumber1Check(itemValue)) {
					// 属性チェックエラー半角数字1
					errorList
							.add(getItemErrInfMap(
									ccMsg,
									itemName,
									JFUMkmInfoAddFrontiaConstCC.RES_KEY_ERROR_CODE_1002));
				}
				else if (JFUMkmInfoAddFrontiaConstCC.ATTR_ZENKAKU
					.equals(itemCkeckPattern)
					&& !EmsizeCharCheck.isEmsizeCheck(itemValue)) {
				// 属性チェックエラー全角
				errorList
						.add(getItemErrInfMap(
								ccMsg,
								itemName,
								JFUMkmInfoAddFrontiaConstCC.RES_KEY_ERROR_CODE_1002));
				}
				// 各チェックパターンによりチェックを行う
				else if (ATTR_TEL2.equals(itemCkeckPattern) && !HalfCharCheck.isTelno2Check(itemValue))
				{
					// 属性チェックエラー半角英数字1
					errorList.add(getItemErrInfMap(ccMsg, itemName, RES_KEY_ERROR_CODE_1002));
				}
				
			}
		}
	}

	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @param dataMap データマップ
	 * @param itemName 項目名
	 * @param errCode エラーコード
	 * @return Map<String, String>
	 */
	@SuppressWarnings("unchecked")
	private Map<String, String> getItemErrInfMap(Map dataMap, String itemName, String errCode)
	{
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JFUStrConst.HALF_COLON + JFUBPCommon.nvl((String)dataMap.get(itemName), "");

		returnMap.put(ERROR_CODE, errCode);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}

	/**
	 * IN項目を返却マップに格納します。
	 * 
	 * <br>
	 * @param inMap ユーザデータ
	 * @return 結果格納マップ
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> setInParams(HashMap inMap)
	{
		ArrayList<HashMap<String, Object>> telNoList = new ArrayList();

		for (int i = 0; i < 1; i++)
		{
			HashMap telNoMap = new HashMap();

			// 値を設定
			telNoMap.put(BMP_TELNO, inMap.get(TELNO));
			telNoList.add(telNoMap);
		}

		// 電話番号リスト
		inMap.put(BMP_TELNO_LIST, telNoList);
		// 機能コード
		inMap.put("func_code", FUNC_CODE);

		return inMap;
	}

	/**
	 * ＭＡチェックの上りマッピング【旧：同番移転可能エリアチェックCC】
	 * 
	 * @param handle
	 * @param inMap 入力パラメータ
	 * @param chkParam チェック用パラメータ
	 * @param fixedText サービスメッセージ
	 * @return parentMap
	 * @throws SCCallException 
	 */
	public HashMap<String, Object> setJKKChkDobanitenPsbAreaCC(SessionHandle handle, HashMap inMap, IRequestParameterReadWrite chkParam,
			String fixedText) throws SCCallException
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// getBmpAddressParam,JFUSplitAddressInfoCC
		Map<String, Object> editedBmpAddress = getBmpAddressParam(handle, chkParam, fixedText, inMap);

		// 番ポ電話番号
		String telNo = (String)inMap.get(TELNO);
		// 電話番号を設定
		parentMap.put(KEY_TEL_NO1, telNo);

		// 郵便番号
		String pcd = (String)inMap.get(PCD);
		String pcd_bf = pcd.substring(0, 3);
		String pcd_af = pcd.substring(3, 7);
		parentMap.put(KEY_PDC_BF, pcd_bf);
		parentMap.put(KEY_PDC_AF, pcd_af);

		// 都道府県	
		parentMap.put(KEY_STATE_NM, (String)editedBmpAddress.get("state_nm"));
		// 市区町村	
		parentMap.put(KEY_CITY_NM,(String)editedBmpAddress.get("city_nm"));
		// 大字通称名	
		parentMap.put(KEY_OAZTSU_NM, (String)editedBmpAddress.get("oaztsu_nm"));
		// 字丁目名	
		parentMap.put(KEY_AZCHO_NM, (String)editedBmpAddress.get("azcho_nm"));

		// 例外入力
		parentMap.put(KEY_EXCEPTION_INPUT, "1");

		// 同一住所フラグ
		parentMap.put(SAME_AD_FLG, "1");

		// 住所コード一覧最大検索件数
		parentMap.put(AD_CD_LIST_MAX_SEARCH_NUM, JFUStrConst.MAX_SEARCH_NUM);

		return parentMap;

	}

	/**
	 * 住所コードの取得、住所情報の分割
	 * @param outputMap
	 * @throws SCCallException 
	 */
	@SuppressWarnings("unchecked")
	public Map<String, Object> getBmpAddressParam(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, Map<String, Object> inMap) throws SCCallException
	{

		// フロンティアから連携された住所を設定
		Map<String, Object> bmpAddress = new HashMap<String, Object>();
		bmpAddress.put("edit_mode", "1");
		bmpAddress.put("pcd", inMap.get(PCD));
		bmpAddress.put("state_nm", "");
		bmpAddress.put("city_nm", "");
		bmpAddress.put("oaztsu_nm", "");
		bmpAddress.put("azcho_nm", "");
		bmpAddress.put("bnchigo", inMap.get(ADDRESS));
		bmpAddress.put("adrttm", "");
		bmpAddress.put("adrrm", "");

		Map<String, Object> editedBmpAddress;
		try
		{
			editedBmpAddress = JKKBpCommon.editAd(handle, param, bmpAddress, fixedText);
		}
		catch (Throwable e)
		{
			// TODO 仮メッセージ
			e.printStackTrace();
			throw new SCCallException("住所コードの取得、住所情報の分割エラー[" +  e.toString() + "]", String.valueOf(0), JPCModelConstant.RELATION_ERR);
		}
		printlnEjbLog("【editAd in】\n" + getMsgEditAd(bmpAddress));
		printlnEjbLog("【editAd out】\n" + getMsgEditAd(editedBmpAddress));

// 住所情報分割処理（JFUSplitAddressInfoCC）は実行していない
//		addressEdit(param, "FUSV016008CC", editedBmpAddress);

//		JFUSplitAddressInfoCC editAddress = new JFUSplitAddressInfoCC();
//		editAddress.splitAddressInfo(handle, param, "FUSV016006CC");
//
//		HashMap<String, Object> outUsePlaceAddress = (HashMap)param.getData("FUSV016006CC");

		return editedBmpAddress;
	}

	/**
	 * 住所分割結果を設定
	 * 
	 * @param param
	 * @param fixedText
	 * @param addMap
	 * @throws Throwable
	 */
	private void addressEdit(IRequestParameterReadWrite param, String fixedText, Map<String, Object> addMap) throws Throwable
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		if (!JFUBPCommon.isNull(addMap.get("ad_cd")))
		{
			parentMap.put("ad_cd", addMap.get("ad_cd"));
		} else {
			parentMap.put("ad_cd", "00000000000");
		}
		parentMap.put("state_nm", addMap.get("state_nm"));
		parentMap.put("city_nm", addMap.get("city_nm"));
		parentMap.put("oaztsu_nm", addMap.get("oaztsu_nm"));
		parentMap.put("azcho_nm", addMap.get("azcho_nm"));
		if (addMap.containsKey("bnchigo"))
		{
			parentMap.put("after_bnchi", addMap.get("bnchigo"));
		}
		else if (addMap.containsKey("after_bnchi"))
		{
			parentMap.put("after_bnchi", addMap.get("after_bnchi"));
		}
		parentMap.put("pcd", addMap.get("pcd"));
		parentMap.put("adrttm", addMap.get("adrttm"));
		parentMap.put("adrrm", addMap.get("adrrm"));

		param.setData(fixedText, parentMap);
	}

	/**
	 * チェック処理（共通処理）です。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@Override
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * デバッグログを出力します。<BR>
	 *
	 * @param dumpObj 出力するオブジェクト
	 */
	private void printlnEjbLog(Object dumpObj)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), dumpObj, null, null, null);
	}


	/**
	 * メッセージ編集
	 * 
	 * @param chkMap 結果マップ
	 * @return メッセージ
	 */
	private String getMsgEditAd(Map<String, Object> chkMap)
	{
		StringBuffer sb = new StringBuffer();
		try
		{
			if (chkMap == null || chkMap.size() == 0)
			{
				return sb.toString();
			}
			Iterator<String> itr = chkMap.keySet().iterator();
			while (itr.hasNext())
			{
				String key = (String)itr.next();
				Object value = chkMap.get(key);
				if (value == null)
				{
					sb.append(" " + key + "=[]" + "\r\n");
				}
				else if (value instanceof String)
				{
					sb.append( " " + key + "=[" + value + "]" + "\r\n");
				}
			}
		}
		catch (Exception ex)
		{
			// 処理続行
			return sb.toString();
		}

		return sb.toString();
	}

	/**
	 * メッセージ編集
	 * 
	 * @param chkMap 結果マップ
	 * @return メッセージ
	 */
	private String getMsgDobanitenPsbAreaCC(HashMap chkMap)
	{
		StringBuffer sb = new StringBuffer();

		String tel_ma_cd1 = (String)chkMap.get("tel_ma_cd1");
		String l_ad_cd = (String)chkMap.get("l_ad_cd");
		String kani_ckrlt_1 = (String)chkMap.get(KANI_CKRLT_1);
		List macdList = (ArrayList)chkMap.get("ma_cd_list");
		String l_ma_cd = JFUStrConst.EMPTY;
		if (macdList != null && macdList.size() > 0)
		{
			HashMap childMap = (HashMap)macdList.get(0);
			if (childMap != null)
			{
				l_ma_cd = (String)childMap.get("l_ma_cd");
			}
		}

		sb.append("kani_ckrlt_1[" + JFUBPCommon.nvl(kani_ckrlt_1, "") + "], ");
		sb.append("l_ad_cd[" + JFUBPCommon.nvl(l_ad_cd, "") + "], ");
		sb.append("tel_ma_cd1[" + JFUBPCommon.nvl(tel_ma_cd1, "") + "], ");
		sb.append("l_ma_cd[" + JFUBPCommon.nvl(l_ma_cd, "") + "], ");
		return sb.toString();
	}

}
