/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JCKSearchCustInfoListCC
 *	ソースファイル名：JCKSearchCustInfoListCC.java
 *	作成者			：FJ
 *	日付			：2019年12月09日
 *＜機能概要＞
 *	既契約者検索（営業支援）CC
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *  v47.00.00   2019/12/09  FJ)Neil     ANK-3766-00-00
 *  v57.00.00   2022/01/25   GDC） Melvin Gungog    【ANK-4173-00-00】【eo顧客】解約後の契約情報表示、再申込対応
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
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.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.fujitsu.futurity.model.common.check.DatetimeCheck;
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 eo.common.constant.JCKStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.ECK0011B513CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011B513CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011B514CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011B514CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKU0011B110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011B110CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;

/**
 * 既契約者検索（営業支援）を行う部品。
 * <p>
 * 
 * @author ニール
 * 
 */
public class JCKSearchCustInfoEssCC extends AbstractCommonComponent {

	private static final String SEARCH_WAY = "searchWay";

	private static final String EO_ID = "eoid";

	private static final String NAME_KANA = "nameKana";

	private static final String BIRTH_DATE = "birthDate";

	private static final String TELEPHONE_NUMBER = "telephoneNumber";

	private static final String ZIP_CODE = "zipCode";

	private static final String NUMBER_1 = "1";

	private static final String NUMBER_2 = "2";

	private static final String SVC_CD_05 = "05";
	
	/** 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";

	/**
	 * テンプレートID
	 */
	private static final String TEMPLATE_ID = "ECK0011B513";
	
	private static final String TEMPLATE_ID_EKKA0040001 = "EKKA0040001";
	
	private static final String CONTRACT_LINE_LIST = "contractLineList";

	private static final String SYSID = "sysid";

	private static final String NAME = "name";

	private static final String CONTRACT_ZIP_CODE = "contractZipCode";

	private static final String CONTRACT_ADDRESS = "contractAddress";

	private static final String USE_ZIP_CODE = "useZipCode";

	private static final String USE_ADDRESS = "useAddress";
	
	// ANK-4173-00-00 ADD START
	/** テンプレートID EZM0321A010 */
	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";
	
	/** テンプレートID ECK0011B514 */
	private static final String TEMPLATE_ID_ECK0011B514 = "ECK0011B514";
	
	/** テンプレートID EKU0011B110 */
	private static final String TEMPLATE_ID_EKU0011B110 = "EKU0011B110";
	
	/** サービス終了日 */
	private static final String SVC_DSL_YMD = "svcDslYmd";
	/** 残置設備状況 */
	private static final String ZANCHI_EQUIP_JOKYO = "zanchiEquipJokyo";
	/** サービス契約回線内訳番号 */
	private static final String SVC_KEI_KAISEN_UCWK_NO = "svcKeiKaisenUcwkNo";
	/** 空文字列 */
	private static final String EMPTY = "";
	
	/** 業務パラメータＩＤ */
	private static final String WORK_PARAM_ID = "CK_ZNC_EQUIP_ARI_CD";
	
	/** 残置設備状況 (1) */
	private static final String ZANCHI_EQUIP_JOKYO_1 = "1";
	// ANK-4173-00-00 ADD START

	/**
	 * 上りマッピング処理<br>
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @param mappingData
	 * @return HashMap<String, Object> サービスI/F実行用マップ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
			Object[][] mappingData) throws RequestParameterException {
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());

		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());

		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());

		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));

		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));

		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));

		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		String svcIf = (String)mappingData[0][1];

		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));

		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if (mappingData[i][1] instanceof CAANMsg[])
			{
				 template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			}
			else
			{
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}

		CAANMsg[] templates = new CAANMsg[1];

		templates[0] = template;

		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}

	/**
	 * 単項目チェック
	 * 
	 * @param ccMsg
	 * @return チェックの判定
	 * @throws Exception
	 */
	private boolean checkUnitParam(Map<String, Object> ccMsg) throws Exception {
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		// 検索方法
		String searchWay = (String) ccMsg.get(SEARCH_WAY);

		// 必須チェック
		if (searchWay == null || searchWay.trim().isEmpty()) {
			// 必須チェックエラー
			errList.add(getReqErrInfMap(SEARCH_WAY));
		} else if (!HalfCharCheck.isNumber1Check (searchWay)) // 半角英数１
		{
			// 属性チェックエラー
			errList.add(getFormErrInfMap(SEARCH_WAY, searchWay));
		} else if (!LengthCheck.isLength1Check(searchWay, 1)) // 固定桁
		{
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(SEARCH_WAY, searchWay));
		} else if (!NUMBER_1.equals(searchWay) && !NUMBER_2.equals(searchWay)) {
			errList.add(getSearchWayErrInfMap(SEARCH_WAY, searchWay));
		}

		String eoID = (String) ccMsg.get(EO_ID);
		String nameKana = (String) ccMsg.get(NAME_KANA);
		String birthDate = (String) ccMsg.get(BIRTH_DATE);
		String telephoneNumber = (String) ccMsg.get(TELEPHONE_NUMBER);
		String zipCode = (String) ccMsg.get(ZIP_CODE);

		if (eoID == null || eoID.trim().isEmpty()) {
			// 単項目チェックなし
		} else if (!HalfCharCheck.isEnNumber2Check(eoID)) { // 半角英数２
			// 属性チェックエラー
			errList.add(getFormErrInfMap(EO_ID, eoID));
		} else if (!LengthCheck.isLength2Check(eoID, 1, 80)) {
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(EO_ID, eoID));
		}

		if (birthDate == null || birthDate.trim().isEmpty()) {
			// 単項目チェックなし
		} else if (!DatetimeCheck.isDateCheck(birthDate)) {
			// 属性チェックエラー
			errList.add(getFormErrInfMap(BIRTH_DATE, birthDate));
		} else if (!LengthCheck.isLength1Check(birthDate, 8)) { 
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(BIRTH_DATE, birthDate));
		}
		
		if (nameKana == null || nameKana.trim().isEmpty()) {
			// 単項目チェックなし
		} else if (!EmsizeCharCheck.isEmsizeEnNumKanaCheck(nameKana)) {
			// 属性チェックエラー
			errList.add(getFormErrInfMap(NAME_KANA, nameKana));
		} else if (!LengthCheck.isLength2Check(nameKana, 1, 121)) { 
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(NAME_KANA, nameKana));
		}
		
		if (telephoneNumber == null || telephoneNumber.trim().isEmpty()) {
			// 単項目チェックなし
		} else if (!HalfCharCheck.isEnNumber2Check(telephoneNumber)) {
			// 属性チェックエラー
			errList.add(getFormErrInfMap(TELEPHONE_NUMBER, telephoneNumber));
		} else if (!LengthCheck.isLength2Check(telephoneNumber, 10, 11)) {
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(TELEPHONE_NUMBER, telephoneNumber));
		}
		
		if (zipCode == null || zipCode.trim().isEmpty()) {
			// 単項目チェックなし
		} else if (!HalfCharCheck.isNumber1Check(zipCode)) {
			// 属性チェックエラー
			errList.add(getFormErrInfMap(ZIP_CODE, zipCode));
		} else if (!LengthCheck.isLength1Check(zipCode, 7)) { 
			// 桁数チェックエラー
			errList.add(getLenErrInfMap(ZIP_CODE, zipCode));
		}
		
		// eoIDチェックエラー
		if (NUMBER_1.equalsIgnoreCase(searchWay)) {
			if (eoID == null || eoID.trim().isEmpty()) {
				// 必須チェックエラー
				errList.add(getOthersErrInfMap(EO_ID, eoID));
			}
		// お客さま情報チェックエラー
		} else if (NUMBER_2.equalsIgnoreCase(searchWay)) {

			if (nameKana == null || nameKana.trim().isEmpty()) {
				// 必須チェックエラー
				errList.add(getOthersErrInfMap(NAME_KANA, nameKana));
			}

			if (birthDate == null || birthDate.trim().isEmpty()) {
				// 必須チェックエラー
				errList.add(getOthersErrInfMap(BIRTH_DATE, birthDate));
			}
			
			if (telephoneNumber == null || telephoneNumber.trim().isEmpty()) {
				// 必須チェックエラー
				errList.add(getOthersErrInfMap(TELEPHONE_NUMBER, telephoneNumber));
			}
			
			if (zipCode == null || zipCode.trim().isEmpty()) {
				// 必須チェックエラー
				errList.add(getOthersErrInfMap(ZIP_CODE, zipCode));
			}
		}

		// エラーが存在する場合
		if (errList.size() > 0) {
			ccMsg.put(ERROR_INFO, errList);
			return false;
		}

		return true;
	}

	/**
	 * 既契約者検索（営業支援）を行います。 <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            リクエストパラメータ
	 * @param fixedText
	 *            ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 *             例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText)
			throws Throwable {
		// 既契約者検索（営業支援）CCマップ
		Map<String, Object> ccMsg = (Map<String, Object>) param
				.getData(fixedText);
		
		// ANK-4173-00-00 ADD START
		String[] kojiScopeCdList = null;
		String eoID = null;
		String name = null;
		String nameKana = null;
		String birthDate = null;
		String telephoneNumber = null;
		String contractZipCode = null;
		String contractAddress = null;
		String zipCode = null;
		String useZipCode = null;
		String useAddress = null;
		String svcDslYmd = null;
		String zanchiEquipJokyo = null;
		String svcKeiKaisenUcwkNo = null;
		String sysid = null;
		boolean remainingEquipmentFlg = false;
		
		// サービスIF結果取得(ECK0011B514)
		CAANMsg[] eCK0011B514CBSMsg1List = null;
		// ANK-4173-00-00 ADD END

		try {
			// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

			// 単項目チェック
			if (!checkUnitParam(ccMsg)) {
				param.setControlMapData(SCControlMapKeys.RETURN_CODE,
						JKKStrConst.RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
				return param;
			}

			String pcd = (String) ccMsg.get(ZIP_CODE);
			String searchWay = (String) ccMsg.get(SEARCH_WAY);
			String funcCode = NUMBER_1;
			
			if (NUMBER_2.equals(searchWay)) {
				funcCode = NUMBER_2;
			}
			
			// お客様一覧照会（営業支援）の上りマッピング
			Object[][] eck0011b513In =
			{
				{ECK0011B513CBSMsg.TEMPLATEID, TEMPLATE_ID},
				{ECK0011B513CBSMsg.FUNC_CODE, funcCode},
				{ECK0011B513CBSMsg.KEY_EOID, (String) ccMsg.get(EO_ID)},
				{ECK0011B513CBSMsg.KEY_CUST_KANA, (String) ccMsg.get(NAME_KANA)},
				{ECK0011B513CBSMsg.KEY_CUST_BIRTHD, (String) ccMsg.get(BIRTH_DATE)},
				{ECK0011B513CBSMsg.KEY_TELNO, (String) ccMsg.get(TELEPHONE_NUMBER)},
				{ECK0011B513CBSMsg.KEY_PCD, pcd}
			};
			
			CAANMsg eck0011b513Msg = callSC(handle, scCall, param, fixedText, eck0011b513In, new ECK0011B513CBSMsg().getContents());
			
			// お客様一覧照会（営業支援）明細
			CAANMsg[] eck0011b513Msg1List = eck0011b513Msg.getCAANMsgList(ECK0011B513CBSMsg.ECK0011B513CBSMSG1LIST);
			
			// ANK-4173-00-00 DEL START
			// サービスIF実行結果チェック
//			if (!checkResult(param, ccMsg, eck0011b513Msg1List))
//			{
//				return param;
//			}
			// ANK-4173-00-00 DEL END
			
			boolean hasZipCodeFound = false;
			List<Map<String,String>> contractLineList = new ArrayList<Map<String,String>>();
			
			for (CAANMsg eck0011b513Msg1 : eck0011b513Msg1List) {
				String svcCD = eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.SVC_CD);
				String useZipCodeFor05 = "";
				String useAddressFor05 = "";
				
				if (SVC_CD_05.equalsIgnoreCase(svcCD)) {
					String svcKeiNo = eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.SVC_KEI_NO);
					
					CAANMsg childTemplate = new CAANMsg(EKKA0040001CBSMsg1List.class.getName());
					// 機能コード："1"
					childTemplate.set(EKKA0040001CBSMsg1List.KEY_FUNC_CODE, JPCModelConstant.FUNC_CD_1);
					// サービス契約番号
					childTemplate.set(EKKA0040001CBSMsg1List.KEY_SVC_KEI_NO, svcKeiNo);
					
					// 電気契約一意照会条件明細
					CAANMsg[] ekka0040001Msg1List = new CAANMsg[]{childTemplate};
					
					// eo電気契約一意照会の上りマッピング
					Object[][] ekka0040001In =
					{
						{EKKA0040001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKKA0040001},
						// 機能コード："1"
						{EKKA0040001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
						// 電気契約一意照会条件明細
						{EKKA0040001CBSMsg.EKKA0040001CBSMSG1LIST, ekka0040001Msg1List}
					};
					
					CAANMsg ekka0040001Msg = callSC(handle, scCall, param, fixedText, ekka0040001In, new EKKA0040001CBSMsg().getContents());
					CAANMsg[] ekka0040001Msg2List = ekka0040001Msg.getCAANMsgList(EKKA0040001CBSMsg.EKKA0040001CBSMSG2LIST);
					int length = ekka0040001Msg2List != null ? ekka0040001Msg2List.length : 0;
					
					for (int i = 0; i < length; i++) {
						CAANMsg ekka0040001Msg2 = ekka0040001Msg2List[i];
						String ryobshPCD = JKKStringUtil.nullToBlank( ekka0040001Msg2.getString(EKKA0040001CBSMsg2List.RYOBSH_PCD) );
						
						if (NUMBER_2.equalsIgnoreCase(searchWay) && pcd.equals(ryobshPCD)) {
							hasZipCodeFound = true;
						}
						useZipCodeFor05 = ryobshPCD;
						useAddressFor05 = JKKStringUtil.nullToBlank( ekka0040001Msg2.getString( EKKA0040001CBSMsg2List.RYOBSH_STATE_NM) )
						 + JKKStringUtil.nullToBlank( ekka0040001Msg2.getString( EKKA0040001CBSMsg2List.RYOBSH_CITY_NM) )
						 + JKKStringUtil.nullToBlank( ekka0040001Msg2.getString( EKKA0040001CBSMsg2List.RYOBSH_OAZTSU_NM) )
						 + JKKStringUtil.nullToBlank( ekka0040001Msg2.getString( EKKA0040001CBSMsg2List.RYOBSH_AZCHO_NM) )
						 + JKKStringUtil.nullToBlank( ekka0040001Msg2.getString( EKKA0040001CBSMsg2List.RYOBSH_BNCHIGO) )
						 + JKKStringUtil.nullToBlank( ekka0040001Msg2.getString( EKKA0040001CBSMsg2List.RYOBSH_ADRTTM) )
						 + JKKStringUtil.nullToBlank( ekka0040001Msg2.getString( EKKA0040001CBSMsg2List.RYOBSH_ADRRM) );
					}
					
					if (!hasZipCodeFound && NUMBER_2.equalsIgnoreCase(searchWay)) {
						continue;
					}
				}
				
				Map<String, String> contractLineMap = new HashMap<String, String>();
				contractLineMap.put(SYSID,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.SYSID) ) );
				contractLineMap.put(NAME,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.NM) ) );
				contractLineMap.put(NAME_KANA,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.NM_KANA) ) );
				contractLineMap.put(BIRTH_DATE,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.CUST_BIRTHD) ) );
				contractLineMap.put(TELEPHONE_NUMBER,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.KEISHA_TELNO) ) );
				contractLineMap.put(CONTRACT_ZIP_CODE,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.KEISHA_PCD) ) );
				contractLineMap.put(CONTRACT_ADDRESS,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.KEISHA_AD) ) );

				if( useZipCodeFor05 == null || "".equals(useZipCodeFor05) )
				{
					contractLineMap.put(USE_ZIP_CODE,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.KAISEN_PLACE_PCD) ) );
				}
				else
				{
					contractLineMap.put(USE_ZIP_CODE,  useZipCodeFor05);
				}
				if( useAddressFor05 == null || "".equals(useAddressFor05) )
				{
					contractLineMap.put(USE_ADDRESS,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.KAISEN_PLACE_AD) ) );
				}
				else
				{
					contractLineMap.put(USE_ADDRESS,  useAddressFor05);
				}
				
				// ANK-4173-00-00 ADD START
				contractLineMap.put(SVC_DSL_YMD,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.SVC_ENDYMD) ) );
				contractLineMap.put(ZANCHI_EQUIP_JOKYO,  EMPTY );
				contractLineMap.put(SVC_KEI_KAISEN_UCWK_NO,  JKKStringUtil.nullToBlank( eck0011b513Msg1.getString(ECK0011B513CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO) ) );
				// ANK-4173-00-00 ADD END

				contractLineList.add(contractLineMap);
			}
			
			// ANK-4173-00-00 ADD START
			// (4)EZM0321A010 業務パラメータ管理一意照会
			kojiScopeCdList = getBusinessParams(handle, scCall, param, fixedText);
			
			// eoID
			eoID = (String)ccMsg.get(EO_ID);
			// 氏名（カナ）
			nameKana = (String)ccMsg.get(NAME_KANA);
			// 生年月日
			birthDate = (String) ccMsg.get(BIRTH_DATE);
			// 電話番号
			telephoneNumber = (String) ccMsg.get(TELEPHONE_NUMBER);
			// 郵便番号
			zipCode = (String) ccMsg.get(ZIP_CODE);
			
			// (5)ECK0011B514 お客様一覧照会（営業支援）（解約時契約状態）
			eCK0011B514CBSMsg1List = getECK0011B514CAANMsg(handle, scCall, param, fixedText, funcCode, eoID, nameKana, birthDate, telephoneNumber, zipCode);
			int length = eCK0011B514CBSMsg1List != null ? eCK0011B514CBSMsg1List.length : 0;
			for (int i = 0; i < length; i++)
			{
				CAANMsg eCK0011B514 = eCK0011B514CBSMsg1List[i];
				
				// ECK0011B514.サービス契約回線内訳番号
				svcKeiKaisenUcwkNo = eCK0011B514.getString(ECK0011B514CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
				// sysid
				sysid = eCK0011B514.getString(ECK0011B514CBSMsg1List.SYSID);
				// サービス終了日
				svcDslYmd = eCK0011B514.getString(ECK0011B514CBSMsg1List.SVC_ENDYMD);
				
				// (6)残置設備判定
				remainingEquipmentFlg = checkRemainingEquipment(handle, scCall, param, fixedText, svcKeiKaisenUcwkNo, sysid, svcDslYmd, kojiScopeCdList);
				if (remainingEquipmentFlg)
				{
					Map<String, String> contractLineMap = new HashMap<String, String>();
					
					// sysid
					sysid = eCK0011B514.getString(ECK0011B514CBSMsg1List.SYSID);
					// 氏名
					name = eCK0011B514.getString(ECK0011B514CBSMsg1List.NM);
					// 氏名（カナ）
					nameKana = eCK0011B514.getString(ECK0011B514CBSMsg1List.NM_KANA);
					// 生年月日
					birthDate = eCK0011B514.getString(ECK0011B514CBSMsg1List.CUST_BIRTHD);
					// 電話番号
					telephoneNumber = eCK0011B514.getString(ECK0011B514CBSMsg1List.KEISHA_TELNO);
					// 契約者住所郵便番号
					contractZipCode = eCK0011B514.getString(ECK0011B514CBSMsg1List.KEISHA_PCD);
					// 契約者住所
					contractAddress = eCK0011B514.getString(ECK0011B514CBSMsg1List.KEISHA_AD);
					// 利用場所住所郵便番号
					useZipCode = eCK0011B514.getString(ECK0011B514CBSMsg1List.KAISEN_PLACE_PCD);
					// 利用場所住所
					useAddress = eCK0011B514.getString(ECK0011B514CBSMsg1List.KAISEN_PLACE_AD);
					// サービス終了日
					svcDslYmd = eCK0011B514.getString(ECK0011B514CBSMsg1List.SVC_ENDYMD);
					// 残置設備状況
					zanchiEquipJokyo = ZANCHI_EQUIP_JOKYO_1;
					// サービス契約回線内訳番号
					svcKeiKaisenUcwkNo = eCK0011B514.getString(ECK0011B514CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
					
					// (7)レスポンス編集
					contractLineMap.put(SYSID, sysid);
					contractLineMap.put(NAME, name);
					contractLineMap.put(NAME_KANA, nameKana);
					contractLineMap.put(BIRTH_DATE, birthDate);
					contractLineMap.put(TELEPHONE_NUMBER, telephoneNumber);
					contractLineMap.put(CONTRACT_ZIP_CODE, contractZipCode);
					contractLineMap.put(CONTRACT_ADDRESS, contractAddress);
					contractLineMap.put(USE_ZIP_CODE, useZipCode);
					contractLineMap.put(USE_ADDRESS, useAddress);
					contractLineMap.put(SVC_DSL_YMD, svcDslYmd);
					contractLineMap.put(ZANCHI_EQUIP_JOKYO, zanchiEquipJokyo);
					contractLineMap.put(SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);
					
					contractLineList.add(contractLineMap);
				}
			}
			// ANK-4173-00-00 ADD END
			
			// サービスIF実行結果チェック
			if (!checkResult(param, ccMsg, contractLineList))
			{
				return param;
			}
			
			ccMsg.put(CONTRACT_LINE_LIST, contractLineList);
			
			// 正常終了
			param.setControlMapData(SCControlMapKeys.RETURN_CODE,
					JKKStrConst.RETURN_CD_0000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
		}
		// サービスインターフェース呼び出しでエラーが発生した場合
		catch (SCCallException scCallEx) {
			// システムエラーを設定する
			param.setControlMapData(SCControlMapKeys.RETURN_CODE,
					JKKStrConst.RETURN_CD_9000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE,
					JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
		}
// ANK-4173-00-00 ADD START
		catch (Exception scCallEx) {
			// システムエラーを設定する
			param.setControlMapData(SCControlMapKeys.RETURN_CODE,
					JKKStrConst.RETURN_CD_9000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE,
					JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
		}
// ANK-4173-00-00 ADD START

		return param;
	}

	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @param itemName
	 *            項目名
	 * @return Map<String, String>
	 */
	private Map<String, String> getReqErrInfMap(String itemName) {
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JKKStrConst.COLON;

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1001);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}

	/**
	 * 単項目チェックの属性エラーマップ作成メソッドです。
	 * 
	 * @param itemName
	 *            項目名
	 * @param itemValue
	 *            項目値
	 * @return Map<String, String>
	 */
	private Map<String, String> getFormErrInfMap(String itemName,
			String itemValue) {
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JKKStrConst.COLON + itemValue;

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1002);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}

	/**
	 * 単項目チェックの桁数エラーマップ作成メソッドです。
	 * 
	 * @param itemName
	 *            項目名
	 * @param itemValue
	 *            項目値
	 * @return
	 */
	private Map<String, String> getLenErrInfMap(String itemName,
			String itemValue) {
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JKKStrConst.COLON + itemValue;

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1003);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}

	/**
	 * 単項目チェックのコード範囲エラーマップ作成メソッドです。
	 * 
	 * @param itemName
	 *            項目名
	 * @param itemValue
	 *            項目値
	 * @return Map<String, String>
	 */
	private Map<String, String> getSearchWayErrInfMap(String itemName,
			String itemValue) {
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JKKStrConst.COLON + itemValue;

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1004);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}

	/**
	 * 
	 * @param itemName
	 * @param itemValue
	 * @return Map<String, String>
	 */
	private Map<String, String> getOthersErrInfMap(String itemName,
			String itemValue) {
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JKKStrConst.COLON + itemValue;

		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1005);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}
	
	// ANK-4173-00-00 ADD START
	/**
	 * 業務パラメータ管理一意照会
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @return CAANMsg[]
	 * @throws Throwable
	 */
	private CAANMsg[] getEZM0321A010CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText) throws Throwable
	{
		CAANMsg[] result = null;
		CAANMsg ezm0321A010Msg = null;
		
		Object[][] ezm0321A010 =
		{
			{EZM0321A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0321A010},
			{EZM0321A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, WORK_PARAM_ID}
		};
		
		ezm0321A010Msg = callSC(handle, scCall, param, fixedText, ezm0321A010, new EZM0321A010CBSMsg().getContents());
		result = ezm0321A010Msg.getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * お客様一覧照会（営業支援）（解約時契約状態）
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param eoID
	 * @param custKana
	 * @param custBirthD
	 * @param telNo
	 * @param pcd
	 * @return CAANMsg[]
	 * @throws Throwable 
	 */
	private CAANMsg[] getECK0011B514CAANMsg(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			String funcCode, 
			String eoID,
			String custKana,
			String custBirthD,
			String telNo,
			String pcd) throws Throwable
	{
		CAANMsg[] result = null;
		CAANMsg eck0011B514Msg = null;
		
		Object[][] eck0011B514 =
		{
			{ECK0011B514CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0011B514},
			{ECK0011B514CBSMsg.FUNC_CODE, funcCode},
			{ECK0011B514CBSMsg.KEY_EOID, eoID},
			{ECK0011B514CBSMsg.KEY_CUST_KANA, custKana},
			{ECK0011B514CBSMsg.KEY_CUST_BIRTHD, custBirthD},
			{ECK0011B514CBSMsg.KEY_TELNO, telNo},
			{ECK0011B514CBSMsg.KEY_PCD, pcd}
		};
		
		eck0011B514Msg = callSC(handle, scCall, param, fixedText, eck0011B514, new ECK0011B514CBSMsg().getContents());
		result = eck0011B514Msg.getCAANMsgList(ECK0011B514CBSMsg.ECK0011B514CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * 工事案件一覧照会（サービス契約回線内訳番号）
	 * <br>
	 */
	private CAANMsg[] getEKU0011B110CAANMsg(SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param,
		String fixedText,
		String svcKeiKaisenUcwkNo, 
		String sysid, 
		String svcDslYmd
	) throws Throwable
	{
		CAANMsg[] result = null;
		CAANMsg eku0011B110Msg = null;
		
		Object[][] eku0011B110 =
		{
			{EKU0011B110CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0011B110},
			{EKU0011B110CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
			{EKU0011B110CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo},
			{EKU0011B110CBSMsg.KEY_SYSID, sysid},
			{EKU0011B110CBSMsg.KEY_SVC_ENDYMD, svcDslYmd}
		};
		
		eku0011B110Msg = callSC(handle, scCall, param, fixedText, eku0011B110, new EKU0011B110CBSMsg().getContents());
		result = eku0011B110Msg.getCAANMsgList(EKU0011B110CBSMsg.EKU0011B110CBSMSG1LIST);
		
		return result;
	}
	
	/**
	 * EZM0321A010 業務パラメータ管理一意照会
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	private String[] getBusinessParams(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText) throws Throwable
	{
		// サービスIF結果取得(EZM0321A010)
		CAANMsg[] ezm0321a010MsgList = null;
		
		ezm0321a010MsgList = getEZM0321A010CAANMsg(handle, scCall, param, fixedText);
		if (ezm0321a010MsgList != null)
		{
			// 業務パラメータ設定値取得
			String paramSetteValue = ezm0321a010MsgList[0].getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
			
			// カンマ区切り分割し、GH宅内機器型式リストを作成
			return paramSetteValue.split(",");
		}
		
		else
		{
			throw new CCException("業務パラメータ管理にGH宅内機器型式が設定されていません", new Exception());
		}
	}
	
	/**
	 * 残置設備判定
	 * <br>
	 */
	private boolean checkRemainingEquipment(SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param,
		String fixedText,
		String svcKeiKaisenUcwkNo,
		String sysid, 
		String svcDslYmd, 
		String[] kojiScopeCdList
	) throws Throwable
	{
		// (6-1)EKU0011B110 工事案件一覧照会（サービス契約回線内訳番号）
		// ArrayList<CAANMsg>：finTekkyoKojiList を作成する
		ArrayList<CAANMsg> finTekkyoKojList = new ArrayList<CAANMsg>();
		
		String kojiakSbtCd = null;
		String kojiakStat = null;
		String mansKojiakStatCd = null;
		String kojiScopeCd = null;
		String tempkojiakFinDtm = null;
		
		// サービスIF結果取得(EKU0011B110)
		CAANMsg[] eKU0011B110CBSMsg1List = null;
		
		// サービス契約回線内訳番号を検索条件に、工事案件を取得する。
		eKU0011B110CBSMsg1List = getEKU0011B110CAANMsg(handle, scCall, param, fixedText, svcKeiKaisenUcwkNo, sysid, svcDslYmd);
		int length = eKU0011B110CBSMsg1List != null ? eKU0011B110CBSMsg1List.length : 0;
		for (int i = 0; i < length; i++)
		{
			CAANMsg eKU0011B110 = eKU0011B110CBSMsg1List[i];
			
			// EKU0011B110.工事案件種別コード
			kojiakSbtCd = eKU0011B110.getString(EKU0011B110CBSMsg1List.KOJIAK_SBT_CD);
			// EKU0011B110.工事案件ステータス
			kojiakStat = eKU0011B110.getString(EKU0011B110CBSMsg1List.KOJIAK_STAT);
			// EKU0011B110.マンション工事案件状態コード
			mansKojiakStatCd = eKU0011B110.getString(EKU0011B110CBSMsg1List.MANS_KOJIAK_STAT_CD);
			
			// 工事案件完了年月日時分秒
			String kojiakFinDtm = eKU0011B110.getString(EKU0011B110CBSMsg1List.KOJIAK_FIN_DTM);
			
			/**
			 * (6-2)完了済撤去工事判定
			 * EKU0011B110.工事案件種別コード ＝ "002(撤去解約) または "004"(住変撤去)
			 * かつ
			 * ( EKU0011B110.工事案件ステータス ＝ "200"(工事完了済)  または EKU0011B110.マンション工事案件状態コード ＝ "200"(工事完了済) )
			 */
			if ((JCKStrConst.KOJIAK_SBT_CD_002.equals(kojiakSbtCd)
					|| JCKStrConst.KOJIAK_SBT_CD_004.equals(kojiakSbtCd))
					&& (JCKStrConst.KOJIAK_STAT_CD_200.equals(kojiakStat)
					|| JCKStrConst.MANS_KOJIAK_STAT_CD_200.equals(mansKojiakStatCd)))
			{
				// (6-1)で作成した finTekkyoKojiList に、(6-2)の検索結果を追加する。
				finTekkyoKojList.add(eKU0011B110); 
				
				if (tempkojiakFinDtm == null 
						|| kojiakFinDtm.compareTo(tempkojiakFinDtm) > 0)
				{
					tempkojiakFinDtm = kojiakFinDtm;
				}
			}
		}
		
		// (6-3)直近工事完了判定
		int size = finTekkyoKojList.size() > 0 ? finTekkyoKojList.size() : 0;
		for (int j =0; j < size; j++)
		{
			CAANMsg finTekkyoKoj = finTekkyoKojList.get(j);
			String kojiakFinDtm = finTekkyoKoj.getString(EKU0011B110CBSMsg1List.KOJIAK_FIN_DTM);
			
			if (kojiakFinDtm.compareTo(tempkojiakFinDtm) == 0)
			{
				// (6-4)残置設備あり判定
				if (Arrays.asList(kojiScopeCdList).contains( finTekkyoKoj.getString(EKU0011B110CBSMsg1List.KOJI_SCOPE_CD) ))
				{
					// 条件に該当する工事案件が見つかったらtrue
					return true;
				}
			}
		}
		
		// ここまで来たら該当なし
		return false;
	}
	// ANK-4173-00-00 ADD END

	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @param contents
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			Object[][] mappingData, Object[][] contents)
	throws Throwable
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		int return_code = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		editErrorInfoCom(param, templates, return_code, dataMapKey, mappingData, contents);
		
		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		
		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));

		// 異常の場合、SCCallExceptionを生成してスローする
		if(JPCModelConstant.NORMAL_END < return_code || JPCModelConstant.WARNING < status)
		{
			throw new SCCallException("戻り値不正", String.valueOf(return_code), status);
		}

		return msg;
	}
	
	// ANK-4173-00-00 DEL START
//	/**
//	 * 
//	 * @param param
//	 * @param ccMsg
//	 * @param eck0011b513Msg1List
//	 * @return boolean
//	 * @throws Exception
//	 */
//	private boolean checkResult(IRequestParameterReadWrite param, Map<String, Object> ccMsg, CAANMsg[] eck0011b513Msg1List)
//	throws Exception
//	{
//		
//		// エラーメッセージ設定
//		String errMessage = "指定されたデータが存在しません。";
//		
//		// 取得件数が0件の場合、業務エラーを設定する
//		if (eck0011b513Msg1List == null || eck0011b513Msg1List.length == 0)
//		{
//			// エラーリスト
//			List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
//			
//			Map<String, String> returnMap = new HashMap<String, String>();
//			
//			// 業務エラー設定
//			returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_2001);
//			returnMap.put(ERROR_MESSAGE, errMessage);
//			errList.add(returnMap);
//			ccMsg.put(ERROR_INFO, errList);
//
//			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
//			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
//			return false;
//		}
//
//		return true;
//	}
	// ANK-4173-00-00 DEL END
	
	/**
	 * 
	 * @param param
	 * @param ccMsg
	 * @param contractLineList
	 * @return boolean
	 * @throws Exception
	 */
	private boolean checkResult(IRequestParameterReadWrite param, Map<String, Object> ccMsg, List<Map<String,String>> contractLineList)
	throws Exception
	{
		
		// エラーメッセージ設定
		String errMessage = "指定されたデータが存在しません。";
		
		// 取得件数が0件の場合、業務エラーを設定する
		if (contractLineList == null || contractLineList.isEmpty())
		{
			// エラーリスト
			List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
			
			Map<String, String> returnMap = new HashMap<String, String>();
			
			// 業務エラー設定
			returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_2001);
			returnMap.put(ERROR_MESSAGE, errMessage);
			errList.add(returnMap);
			ccMsg.put(ERROR_INFO, errList);

			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
			return false;
		}

		return true;
	}
	
	/**
	 * エラー情報を取得します。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String dataMapKey,
			Object[][] mappingData, Object[][] contents)
	throws RequestParameterException
	{
		CAANMsg template = templates[0];
		
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}
		
		if (null == JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)))
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (null == obj)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		Map<String, String> inMap = null;
		
		// ユーザデータ情報
		inMap = (Map<String, String>)param.getData(dataMapKey);
		
		for (int i = 0; null != contents && i < contents.length ; i++)
		{
			String itemNm = (String)contents[i][0];
			if (itemNm.endsWith("_err"))
			{
				String errCd = (String)template.getString(itemNm);
				if (!JKKStringUtil.isNullBlank(errCd))
				{
					inMap.put(itemNm, errCd);
				}
			}
		}
		return param;
	}
}
