/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：住所情報変更コンポーネント部品クラス
 *  ソースファイル名：JKKUsePlaceAdInfUpdCC.java
 *  作成者          ：FJ
 *  日付            ：2021年12月15日
 *＜機能概要＞
 *  利用場所住所を変更する
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v56.00.00    2021/12/15  FJ)舘山    【ANK-4174-00-00】開通前マイページ関連業務改善（2022年1月下旬リリース）
 *  v61.00.00    2023/04/11  FJ藤本涼   【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAdInfChgConstCC;
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.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 eo.common.constant.JKKStrConst;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011B030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011B030CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0021A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0021C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0031A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0031A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0031C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0041A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0041A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0041C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0061A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0061A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0061C010CBSMsg;

/**
 * 利用場所ｓ住所情報変更コンポーネント部品クラス.
 * <br>
 * @author FJ
 */
public class JKKUsePlaceAdKojiChgCC extends AbstractCommonComponent 
{
	/** 工事案件一覧照会 */
	private static final String TEMPLATE_ID_EKU0011B030 = "EKU0011B030";
	
	/** 工事案件（eo光ネット）諸変更 */
	private static final String TEMPLATE_ID_EKU0021C010 = "EKU0021C010";
	/** 工事案件（eo光テレビ）諸変更 */
	private static final String TEMPLATE_ID_EKU0031C010 = "EKU0031C010";
	/** 工事案件（eo光テレビ回線）諸変更 */
	private static final String TEMPLATE_ID_EKU0041C010 = "EKU0041C010";
	/** 工事案件(eo光ネットマンション)諸変更 */
	private static final String TEMPLATE_ID_EKU0061C010 = "EKU0061C010";
	/** 進捗登録*/
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	
	/** 工事案件<eo光ネット>一意照会 */
	private static final String TEMPLATE_ID_EKU0021A010 = "EKU0021A010";

	/** 工事案件<eo光テレビ>一意照会 */
	private static final String TEMPLATE_ID_EKU0031A010 = "EKU0031A010";

	/** 工事案件<eo光テレビ回線>一意照会 */
	private static final String TEMPLATE_ID_EKU0041A010 = "EKU0041A010";

	/** 工事案件<eo光ネットマンション>一意照会 */
	private static final String TEMPLATE_ID_EKU0061A010 = "EKU0061A010";
	
	/** 固定値_工事受付コード "070":内容変更*/
	private static final String KOJI_UK_CD = "070";
	
	/** 固定値_工事受付詳細コード "A1":回線情報変える */
	private static final String KOJI_UK_DTAIL_CD = "A4";
	
	/** サービス契約回線内訳番号 */	
	private static final String PARAM_SVC_KEI_KAISEN_UCWK_NO = "svc_kei_kaisen_ucwk_no";
	/** 郵便番号 */
	private static final String PARAM_AD_PCD = "ad_pcd";
	/** 都道府県名 */	
	private static final String PARAM_AD_STATE_NM = "ad_state";
	/** 市区町村名 */	
	private static final String PARAM_AD_CITY_NM = "ad_city";
	/** 大字通称名 */	
	private static final String PARAM_AD_OAZTSU_NM = "ad_oaztsu";
	/** 字丁目名 */	
	private static final String PARAM_AD_AZCHO_NM = "ad_azcho";
	/** 番地号 */	
	private static final String PARAM_AD_BNCHIGO = "ad_bnchigo";
	/** 建物名 */	
	private static final String PARAM_AD_ADRTTM = "ad_adrttm";
	/** 部屋番号 */	
	private static final String PARAM_AD_ADRRM = "ad_adrrm";
	
	/** 回線場所住所未確定フラグ */
	private static final String KISN_PLC_AD_MI_FIX_FLG = "kisn_plc_ad_mi_fix_flg";

	/** 回線場所住所コード */
	private static final String KAISEN_PLACE_AD_CD = "kaisen_place_ad_cd";

	/** サービス契約リスト */
	private static final String SVC_KEI_LIST = "svc_kei_list";
	
	/** サービス契約回線内訳マップ */
	private static final String SVC_KEI_KAISEN_UW_MAP = "target_svc_kei_kaisen_uw_map";
	
	/** ステータス */
	private static final String STATUS = "status";

	/**
	 * 工事案件情報の利用場所を更新する。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, 
												IRequestParameterReadWrite param, 
												String fixedText) throws Throwable
	{
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
		
		// サービス契約一覧
		ArrayList<HashMap<String, Object>> svc_kei_list = (ArrayList<HashMap<String, Object>>)paramMap.get(SVC_KEI_LIST);
		// サービス契約回線内訳番号
		String kaisenUcwkNo = (String)paramMap.get(PARAM_SVC_KEI_KAISEN_UCWK_NO);

		// -----------
		ArrayList<HashMap<String,Object>> ipList = new ArrayList<HashMap<String,Object>>();
		// -----------
		ArrayList<HashMap<String,Object>> tvList = new ArrayList<HashMap<String,Object>>();
		
		// ネット系・テレビ系
		for (HashMap<String,Object> kk0081_a010_map : svc_kei_list)
		{
			// 受付済以外
			if ("010".equals(kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT)))
			{
				continue;
			}
			//
			if ("03".equals(kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_CD)))
			{
				tvList.add(kk0081_a010_map);
			}
			else
			{
				if (ipList.size() > 0 && "01".equals(kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_CD)))
				{
					// ネットを先頭に追加する
					ipList.add(0, kk0081_a010_map);
				}
				else
				{
					ipList.add(kk0081_a010_map);
				}
			}
		}
		
		// ＩＰ工事更新
		if (updateKojiak(handle, param, fixedText, ipList, kaisenUcwkNo))
		{
			// 進捗を登録する
			addPrg(handle, param, fixedText, ipList, kaisenUcwkNo);
		}
		// ＴＶ工事更新
		if (updateKojiak(handle, param, fixedText, tvList, kaisenUcwkNo))
		{
			// 進捗を登録する
			addPrg(handle, param, fixedText, tvList, kaisenUcwkNo);
		}
		return param;
	}
	
	/**
	 * 工事案件諸変更を実行する。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param targetList
	 * @param kaisenUcwkNo
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean updateKojiak(SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText, 
			ArrayList<HashMap<String,Object>> targetList,
			String kaisenUcwkNo) throws Exception
	{
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);

		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		for (HashMap<String,Object> ekk0081a010 : targetList)
		{
			// ＳＹＳＩＤ
			String baseSysid = (String)ekk0081a010.get(EKK0081A010CBSMsg1List.SYSID);
			
			// 工事案件一覧照会 EKU0011B030
			Object[][] eku0011b030IN = {{EKU0011B030CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0011B030},
										{EKU0011B030CBSMsg.FUNC_CODE, "1"},
										{EKU0011B030CBSMsg.SEARCH_TYPE, "1"},
										{EKU0011B030CBSMsg.MAX_SEARCH_NUM, "2000"},
										{EKU0011B030CBSMsg.TOTAL_PAGE_NUM, "1"},
										{EKU0011B030CBSMsg.TOTAL_SEARCH_NUM, "1"},
										{EKU0011B030CBSMsg.KEY_SVC_KEI_NO, ekk0081a010.get(EKK0081A010CBSMsg1List.SVC_KEI_NO)},
										{EKU0011B030CBSMsg.KEY_KOJIAK_STAT, "120,130,140,150,160,170,180,190,200"},
										// ANK-4315-00-00 MOD START
//										{EKU0011B030CBSMsg.KEY_KOJIAK_SBT_CD, "001,003,008,009,012"},
										{EKU0011B030CBSMsg.KEY_KOJIAK_SBT_CD, "001,003,008,009,012,015"},
										// ANK-4315-00-00 MOD END
										// 回線と一致するかをチェック
										};
			// データが取得できない場合、終了する。
			CAANMsg[] eku0011b030OUT = callSC(handle, scCall, param, fixedText, eku0011b030IN).getCAANMsgList(EKU0011B030CBSMsg.EKU0011B030CBSMSG1LIST);
			if (eku0011b030OUT == null || eku0011b030OUT.length == 0)
			{
				continue;
			}
			// ***************** 最新工事か仕掛中の工事を取得する ****************
			// SYSIDを比較し、一致するSYSIDがなければ処理しない
			Object sysid = eku0011b030OUT[0].getString(EKU0011B030CBSMsg1List.SYSID);
			if (baseSysid == null || !baseSysid.equals(sysid))
			{
				continue;
			}
			// マンション物件コード
			String mansionBukkenCd = eku0011b030OUT[0].getString(EKU0011B030CBSMsg1List.MANSION_BUKKEN_CD);
			// 工事案件番号
			String kojiakNo = eku0011b030OUT[0].getString(EKU0011B030CBSMsg1List.KOJIAK_NO);
			// 新築物件コード
			String newConstBukkenCd = eku0011b030OUT[0].getString(EKU0011B030CBSMsg1List.NEWCONST_BUKKEN_CD);
			
			// 呼び出す
			Object[][] inMsg = null;
			
			//工事案件諸変更のパターン取得
			int ptn = getKojiPtn((String)ekk0081a010.get(EKK0081A010CBSMsg1List.PRC_GRP_CD), mansionBukkenCd);
			if(1 == ptn)
			{
				// EKU0021A010_工事案件<eo光ネット>一意照会
				Object[][] eku0021a010IN = {
						{EKU0021A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0021A010},
						{EKU0021A010CBSMsg.FUNC_CODE, "1"},
						{EKU0021A010CBSMsg.KEY_KOJIAK_NO, kojiakNo},
				};
				CAANMsg[] eku0021a010OUT = callSC(handle, scCall, param, fixedText, eku0021a010IN).getCAANMsgList(EKU0021A010CBSMsg.EKU0021A010CBSMSG1LIST);
				if (eku0021a010OUT == null || eku0021a010OUT.length == 0)
				{
					continue;
				}
				// 工事案件（eo光ネット）諸変更
				inMsg = editInMsgEKU0021C010(paramMap, ekk0081a010, kaisenUcwkNo, newConstBukkenCd, eku0021a010OUT[0]);
			}
			else if(2 == ptn)
			{
				// EKU0031A010_工事案件<eo光ＴＶ>一意照会
				Object[][] eku0031a010IN = {
						{EKU0031A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0031A010},
						{EKU0031A010CBSMsg.FUNC_CODE, "1"},
						{EKU0031A010CBSMsg.KEY_KOJIAK_NO, kojiakNo},
				};
				CAANMsg[] eku0031a010OUT = callSC(handle, scCall, param, fixedText, eku0031a010IN).getCAANMsgList(EKU0031A010CBSMsg.EKU0031A010CBSMSG1LIST);
				if (eku0031a010OUT == null || eku0031a010OUT.length == 0)
				{
					continue;
				}
				// 工事案件（eo光テレビ）諸変更
				inMsg = editInMsgEKU0031C010(paramMap, ekk0081a010, kaisenUcwkNo, newConstBukkenCd, eku0031a010OUT[0]);
			}
			else if(3 == ptn)
			{
				// EKU0031A010_工事案件<eo光ＴＶ>一意照会
				Object[][] eku0041a010IN = {
						{EKU0041A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0041A010},
						{EKU0041A010CBSMsg.FUNC_CODE, "1"},
						{EKU0041A010CBSMsg.KEY_KOJIAK_NO, kojiakNo},
				};
				CAANMsg[] eku0041a010OUT = callSC(handle, scCall, param, fixedText, eku0041a010IN).getCAANMsgList(EKU0041A010CBSMsg.EKU0041A010CBSMSG1LIST);
				if (eku0041a010OUT == null || eku0041a010OUT.length == 0)
				{
					continue;
				}
				// 工事案件（eo光テレビ回線）諸変更
				inMsg = editInMsgEKU0041C010(paramMap, ekk0081a010, kaisenUcwkNo, newConstBukkenCd, eku0041a010OUT[0]);
			}
			else if(4 == ptn)
			{
				// EKU0061A010_工事案件＜eo光ネットマンション＞一意照会
				Object[][] eku0061a010IN = {
						{EKU0061A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0061A010},
						{EKU0061A010CBSMsg.FUNC_CODE, "1"},
						{EKU0061A010CBSMsg.KEY_KOJIAK_NO, kojiakNo},
				};
				CAANMsg[] eku0061a010OUT = callSC(handle, scCall, param, fixedText, eku0061a010IN).getCAANMsgList(EKU0061A010CBSMsg.EKU0061A010CBSMSG1LIST);
				if (eku0061a010OUT == null || eku0061a010OUT.length == 0)
				{
					continue;
				}
				
				// 工事案件(eo光ネットマンション)諸変更
				inMsg = editInMsgEKU0061C010(paramMap, ekk0081a010, kaisenUcwkNo, mansionBukkenCd, newConstBukkenCd, eku0061a010OUT[0]);
			}
			
			// 諸変更を呼び出す
			if (0 < ptn)
			{
				callSC(handle, scCall, param, fixedText, inMsg);
			}
			// 諸変更登録完了
			return true;
		}
		return false;
	}
	
	/**
	 * 進捗を登録する
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param targetList
	 * @param kaisenUcwkNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void addPrg(SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText, 
			ArrayList<HashMap<String,Object>> targetList,
			String kaisenUcwkNo) throws Throwable
	{
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);

		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		for (HashMap<String,Object> ekk0081a010 : targetList)
		{
			// EKK1091D010
			Object[][] ekk1091d010IN = {
					{EKK1091D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1091D010},
					{EKK1091D010CBSMsg.FUNC_CODE, "1"},
					{EKK1091D010CBSMsg.SVC_KEI_NO, ekk0081a010.get(EKK0081A010CBSMsg1List.SVC_KEI_NO)},
					{EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, kaisenUcwkNo},
					{EKK1091D010CBSMsg.IDO_DIV, paramMap.get(JKKAdInfChgConstCC.PARAM_KEY_IDO_DIV )},
					{EKK1091D010CBSMsg.IDO_DTM, JCCBPCommon.getSysDateTimeStamp()},
					{EKK1091D010CBSMsg.PRG_STAT, JKKAdInfChgConstCC.CD00647_E030},
					{EKK1091D010CBSMsg.PRG_TKJK_1, ""},
					{EKK1091D010CBSMsg.PRG_TKJK_2, ""},
			};
			// 
			callSC(handle, scCall, param, fixedText, ekk1091d010IN);
		}
		
	}
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle,
							ServiceComponentRequestInvoker scCall,
							IRequestParameterReadWrite param,
							String dataMapKey,
							Object[][] mappingData) throws Exception
	{
		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 returnCode = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		
		int templateStatus = msg.getInt(STATUS);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (obj == null)
		{
			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);
		}
		
		setErrorInf(msg, (HashMap<String, Object>)param.getData(dataMapKey));
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status.intValue()))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return msg;
	}

	/**
	 * エラー情報を設定します。
	 * 
	 * @param msg
	 * @param map
	 * 
	 */
	@SuppressWarnings("unchecked")
	private void setErrorInf(CAANMsg msg, HashMap<String, Object> map)
	{
		Iterator<String> msgKey = msg.getSchema().getSchemaKeySet().iterator();
		
		while (msgKey.hasNext())
		{
			String key = msgKey.next();
			
			if (key.endsWith("_err"))
			{
				if (!msg.isNull(key))
				{
					if (!map.containsKey(key))
					{
						map.put(key, msg.getString(key));
					}
				}
			}
		}
	}

	/**
	 * 共通領域のメッセージを作成します。
	 * 
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @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 ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		setNullToMsg(template);
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}

	/**
	 * 未入力項目にnullを設定します。
	 * @param msg
	 */
	@SuppressWarnings("unchecked")
	private void setNullToMsg(CAANMsg msg)
	{
		Iterator<String> caanMsgKeys = msg.getSchema().getSchemaKeySet().iterator();
		while (caanMsgKeys.hasNext())
		{
			String key = caanMsgKeys.next();
			if (key.endsWith("_err"))
			{
				String tmpKey = key.substring(0, key.length() - 4);
				
				if (!msg.containsKeyOfMsgData(tmpKey))
				{
					msg.setNull(tmpKey);
				}
			}
		}
	}

	/**
	 * 工事案件(eo光ネット)諸変更用のメッセージを作成します。
	 * 
	 * @param ccMsg
	 * @param kk0081_a010_map
	 * @param svcKeiKaisenUcwkNo
	 * @param newConstBukkenCd
	 * @param eku0021a010
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgEKU0021C010(HashMap<String, Object> ccMsg,
											HashMap<String, Object> kk0081_a010_map,
											String svcKeiKaisenUcwkNo, String newConstBukkenCd, CAANMsg eku0021a010) throws Exception
	{
		HashMap<String, Object> ekk0251a010 = (HashMap<String, Object>)ccMsg.get(SVC_KEI_KAISEN_UW_MAP);
		Object[][] inMsg = {
				{EKU0021C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0021C010},
				{EKU0021C010CBSMsg.FUNC_CODE, "1"},
				{EKU0021C010CBSMsg.SVC_KEI_NO, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_KEI_NO)},
				{EKU0021C010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo},
				// 申込明細番号
				{EKU0021C010CBSMsg.KOJI_UK_CD, KOJI_UK_CD},
				{EKU0021C010CBSMsg.KOJI_UK_DTAIL_CD, KOJI_UK_DTAIL_CD},
				{EKU0021C010CBSMsg.KOJI_UK_OPTNTY_IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null)},
				{EKU0021C010CBSMsg.SVC_CD, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_CD)},
				{EKU0021C010CBSMsg.SYSID, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SYSID)},
				// 住所情報
				{EKU0021C010CBSMsg.PLACE_NO, 			ccMsg.get(JKKAdInfChgConstCC.PARAM_KEY_ITENS_PLACE_NO)}, 	//場所番号
				{EKU0021C010CBSMsg.SETPLACE_AD_CD, 		ccMsg.get(KAISEN_PLACE_AD_CD)}, 	// 設置場所住所コード
				{EKU0021C010CBSMsg.SETPLACE_PCD, 		ccMsg.get(PARAM_AD_PCD)}, 			// 設置場所郵便番号
				{EKU0021C010CBSMsg.SETPLACE_STATE_NM, 	ccMsg.get(PARAM_AD_STATE_NM)}, 		// 設置場所都道府県名
				{EKU0021C010CBSMsg.SETPLACE_CITY_NM, 	ccMsg.get(PARAM_AD_CITY_NM)}, 		// 設置場所市区町村名
				{EKU0021C010CBSMsg.SETPLACE_OAZTSU_NM, 	ccMsg.get(PARAM_AD_OAZTSU_NM)}, 	// 設置場所大字通称名
				{EKU0021C010CBSMsg.SETPLACE_AZCHO_NM, 	ccMsg.get(PARAM_AD_AZCHO_NM)}, 		// 設置場所字丁目名
				{EKU0021C010CBSMsg.SETPLACE_AD_BNCHIGO, ccMsg.get(PARAM_AD_BNCHIGO)}, 		// 設置場所住所番地号
				{EKU0021C010CBSMsg.SETPLACE_ADRTTM, 	ccMsg.get(PARAM_AD_ADRTTM)}, 		// 設置場所住所補記・建物名
				{EKU0021C010CBSMsg.SETPLACE_ADRRM, 		ccMsg.get(PARAM_AD_ADRRM)}, 		// 設置場所住所補記・部屋番号
				{EKU0021C010CBSMsg.KOJI_SAKI_AD_MI_FIX_FLG, ccMsg.get(KISN_PLC_AD_MI_FIX_FLG)}, // 工事先住所未確定フラグ
				{EKU0021C010CBSMsg.KAISEN_PLACE_TELNO, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KAISEN_PLACE_TELNO)}, // 回線場所電話番号
				{EKU0021C010CBSMsg.LGTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LGTD)},			// 経度
				{EKU0021C010CBSMsg.LTTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LTTD)},			// 緯度
				{EKU0021C010CBSMsg.ZAHYO_HOSEI_UM, 		ekk0251a010.get(EKK0251A010CBSMsg1List.ZAHYO_HOSEI_UM)},// 座標補正有無
				{EKU0021C010CBSMsg.AD_FORM_CD, 			ekk0251a010.get(EKK0251A010CBSMsg1List.AD_FORM_CD)},	// 住所形態コード
				{EKU0021C010CBSMsg.NYUKYO_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.SHUGJ_NYUKYO_FLR_CNT_CD)},	// 入居階数
				{EKU0021C010CBSMsg.KCKU_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KODATE_KCKU_FLR_CNT_CD)},	// 建築階数
				{EKU0021C010CBSMsg.DIRECTION_CD_1, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_1)},	//方角コード1 
				{EKU0021C010CBSMsg.DIRECTION_CD_2, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_2)},	//方角コード2 
				{EKU0021C010CBSMsg.NEWCONST_BUKKEN_CD, 	newConstBukkenCd},											// 新築物件コード
				{EKU0021C010CBSMsg.HUKKAT_ANKEN_FLG, 	eku0021a010.getString(EKU0021A010CBSMsg1List.HUKKAT_ANKEN_FLG)},// 復活案件フラグ
				{EKU0021C010CBSMsg.SAME_EQUIP_RE_MSKM_CD, 	eku0021a010.getString(EKU0021A010CBSMsg1List.SAME_EQUIP_RE_MSKM_CD)}, // 同一設備再申込コード
				{EKU0021C010CBSMsg.CUST_SOS_USE_UM, 	ekk0251a010.get(EKK0251A010CBSMsg1List.CUST_SOS_USE_UM)},// お客様SOS利用有無
		};
		
		return inMsg;
	}

	/**
	 * 工事案件(eo光テレビ)諸変更用のメッセージを作成します。
	 * 
	 * @param ccMsg
	 * @param kk0081_a010_map
	 * @param svcKeiKaisenUcwkNo
	 * 
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgEKU0031C010(HashMap<String, Object> ccMsg, 
											HashMap<String, Object> kk0081_a010_map,
											String svcKeiKaisenUcwkNo, 
											String newConstBukkenCd, 
											CAANMsg eku0031a010) throws Exception
	{
		HashMap<String, Object> ekk0251a010 = (HashMap<String, Object>)ccMsg.get(SVC_KEI_KAISEN_UW_MAP);
		Object[][] inMsg = {
				{EKU0031C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0031C010},
				{EKU0031C010CBSMsg.FUNC_CODE, "1"},
				{EKU0031C010CBSMsg.SVC_KEI_NO, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_KEI_NO)},
				{EKU0031C010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo},
				// 申込明細番号
				{EKU0031C010CBSMsg.KOJI_UK_CD, KOJI_UK_CD},
				{EKU0031C010CBSMsg.KOJI_UK_DTAIL_CD, KOJI_UK_DTAIL_CD},
				{EKU0031C010CBSMsg.KOJI_UK_OPTNTY_IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null)},
				{EKU0031C010CBSMsg.SVC_CD, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_CD)},
				{EKU0031C010CBSMsg.SYSID, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SYSID)},
				// 住所情報
				{EKU0031C010CBSMsg.PLACE_NO, 			ccMsg.get(JKKAdInfChgConstCC.PARAM_KEY_ITENS_PLACE_NO)},// 場所番号
				{EKU0031C010CBSMsg.SETPLACE_AD_CD, 		ccMsg.get(KAISEN_PLACE_AD_CD)}, // 設置場所住所コード
				{EKU0031C010CBSMsg.SETPLACE_PCD, 		ccMsg.get(PARAM_AD_PCD)}, 		// 設置場所郵便番号
				{EKU0031C010CBSMsg.SETPLACE_STATE_NM, 	ccMsg.get(PARAM_AD_STATE_NM)}, 	// 設置場所都道府県名
				{EKU0031C010CBSMsg.SETPLACE_CITY_NM, 	ccMsg.get(PARAM_AD_CITY_NM)}, 	// 設置場所市区町村名
				{EKU0031C010CBSMsg.SETPLACE_OAZTSU_NM, 	ccMsg.get(PARAM_AD_OAZTSU_NM)}, // 設置場所大字通称名
				{EKU0031C010CBSMsg.SETPLACE_AZCHO_NM, 	ccMsg.get(PARAM_AD_AZCHO_NM)}, 	// 設置場所字丁目名
				{EKU0031C010CBSMsg.SETPLACE_AD_BNCHIGO, ccMsg.get(PARAM_AD_BNCHIGO)}, 	// 設置場所住所番地号
				{EKU0031C010CBSMsg.SETPLACE_ADRTTM, 	ccMsg.get(PARAM_AD_ADRTTM)}, 	// 設置場所住所補記・建物名
				{EKU0031C010CBSMsg.SETPLACE_ADRRM, 		ccMsg.get(PARAM_AD_ADRRM)}, 	// 設置場所住所補記・部屋番号
				{EKU0031C010CBSMsg.KOJI_SAKI_AD_MI_FIX_FLG, ccMsg.get(KISN_PLC_AD_MI_FIX_FLG)}, // 工事先住所未確定フラグ
				{EKU0031C010CBSMsg.KAISEN_PLACE_TELNO, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KAISEN_PLACE_TELNO)}, // 回線場所電話番号
				{EKU0031C010CBSMsg.LGTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LGTD)},			// 経度
				{EKU0031C010CBSMsg.LTTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LTTD)},			// 緯度
				{EKU0031C010CBSMsg.ZAHYO_HOSEI_UM, 		ekk0251a010.get(EKK0251A010CBSMsg1List.ZAHYO_HOSEI_UM)},// 座標補正有無
				{EKU0031C010CBSMsg.AD_FORM_CD, 			ekk0251a010.get(EKK0251A010CBSMsg1List.AD_FORM_CD)},	// 住所形態コード
				{EKU0031C010CBSMsg.NYUKYO_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.SHUGJ_NYUKYO_FLR_CNT_CD)},	// 入居階数
				{EKU0031C010CBSMsg.KCKU_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KODATE_KCKU_FLR_CNT_CD)},	// 建築階数
				{EKU0031C010CBSMsg.DIRECTION_CD_1, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_1)},	//方角コード1 
				{EKU0031C010CBSMsg.DIRECTION_CD_2, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_2)},	//方角コード2 
				{EKU0031C010CBSMsg.NEWCONST_BUKKEN_CD, 	newConstBukkenCd},											// 新築物件コード
				{EKU0031C010CBSMsg.HUKKAT_ANKEN_FLG, 	eku0031a010.getString(EKU0031A010CBSMsg1List.HUKKAT_ANKEN_FLG)},// 復活案件フラグ
				{EKU0031C010CBSMsg.SAME_EQUIP_RE_MSKM_CD, 	eku0031a010.getString(EKU0031A010CBSMsg1List.SAME_EQUIP_RE_MSKM_CD)}, // 同一設備再申込コード
				{EKU0031C010CBSMsg.MANSSBSYS_RNKI_KIJIRAN, 	eku0031a010.getString(EKU0031A010CBSMsg1List.MANSSBSYS_RNKI_KIJIRAN)},// マンション設備システム連携用記事欄
				{EKU0031C010CBSMsg.DMPS_ANKEN_NO, 			eku0031a010.getString(EKU0031A010CBSMsg1List.DMPS_ANKEN_NO)},// 電波障害案件番号
				{EKU0031C010CBSMsg.DMPSANK_SBT_CD, 			eku0031a010.getString(EKU0031A010CBSMsg1List.DMPSANK_SBT_CD)},// 電波障害案件種別コード
				{EKU0031C010CBSMsg.CUST_SOS_USE_UM, 	ekk0251a010.get(EKK0251A010CBSMsg1List.CUST_SOS_USE_UM)},// お客様SOS利用有無
		};
		
		return inMsg;
	}
	
	/**
	 * 工事案件(eo光テレビ回線)諸変更用のメッセージを作成します。
	 * 
	 * @param ccMsg
	 * @param kk0081_a010_map
	 * @param svcKeiKaisenUcwkNo
	 * 
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgEKU0041C010(HashMap<String, Object> ccMsg, 
												HashMap<String, Object> kk0081_a010_map,
												String svcKeiKaisenUcwkNo, 
												String newConstBukkenCd, 
												CAANMsg eku0041a010) throws Exception
	{
		HashMap<String, Object> ekk0251a010 = (HashMap<String, Object>)ccMsg.get(SVC_KEI_KAISEN_UW_MAP);
		Object[][] inMsg = {
				{EKU0041C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0041C010},
				{EKU0041C010CBSMsg.FUNC_CODE, "1"},
				{EKU0041C010CBSMsg.SVC_KEI_NO, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_KEI_NO)},
				{EKU0041C010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo},
				// 申込明細番号
				{EKU0041C010CBSMsg.KOJI_UK_CD, KOJI_UK_CD},
				{EKU0041C010CBSMsg.KOJI_UK_DTAIL_CD, KOJI_UK_DTAIL_CD},
				{EKU0041C010CBSMsg.KOJI_UK_OPTNTY_IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null)},
				{EKU0041C010CBSMsg.SVC_CD, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_CD)},
				{EKU0041C010CBSMsg.SYSID, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SYSID)},
				// 住所情報
				{EKU0041C010CBSMsg.PLACE_NO,			ccMsg.get(JKKAdInfChgConstCC.PARAM_KEY_ITENS_PLACE_NO)}, // 場所番号
				{EKU0041C010CBSMsg.SETPLACE_AD_CD, 		ccMsg.get(KAISEN_PLACE_AD_CD)}, // 設置場所住所コード
				{EKU0041C010CBSMsg.SETPLACE_PCD, 		ccMsg.get(PARAM_AD_PCD)}, 		// 設置場所郵便番号
				{EKU0041C010CBSMsg.SETPLACE_STATE_NM, 	ccMsg.get(PARAM_AD_STATE_NM)},	// 設置場所都道府県名
				{EKU0041C010CBSMsg.SETPLACE_CITY_NM, 	ccMsg.get(PARAM_AD_CITY_NM)},	// 設置場所市区町村名
				{EKU0041C010CBSMsg.SETPLACE_OAZTSU_NM, 	ccMsg.get(PARAM_AD_OAZTSU_NM)},	// 設置場所大字通称名
				{EKU0041C010CBSMsg.SETPLACE_AZCHO_NM, 	ccMsg.get(PARAM_AD_AZCHO_NM)},	// 設置場所字丁目名
				{EKU0041C010CBSMsg.SETPLACE_AD_BNCHIGO, ccMsg.get(PARAM_AD_BNCHIGO)},	// 設置場所住所番地号
				{EKU0041C010CBSMsg.SETPLACE_ADRTTM, 	ccMsg.get(PARAM_AD_ADRTTM)},	// 設置場所住所補記・建物名
				{EKU0041C010CBSMsg.SETPLACE_ADRRM, 		ccMsg.get(PARAM_AD_ADRRM)}, 	// 設置場所住所補記・部屋番号
				{EKU0041C010CBSMsg.KAISEN_PLACE_TELNO, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KAISEN_PLACE_TELNO)}, // 回線場所電話番号
				{EKU0041C010CBSMsg.LGTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LGTD)},			// 経度
				{EKU0041C010CBSMsg.LTTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LTTD)},			// 緯度
				{EKU0041C010CBSMsg.ZAHYO_HOSEI_UM, 		ekk0251a010.get(EKK0251A010CBSMsg1List.ZAHYO_HOSEI_UM)},// 座標補正有無
				{EKU0041C010CBSMsg.AD_FORM_CD, 			ekk0251a010.get(EKK0251A010CBSMsg1List.AD_FORM_CD)},	// 住所形態コード
				{EKU0041C010CBSMsg.NYUKYO_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.SHUGJ_NYUKYO_FLR_CNT_CD)},	// 入居階数
				{EKU0041C010CBSMsg.KCKU_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KODATE_KCKU_FLR_CNT_CD)},	// 建築階数
				{EKU0041C010CBSMsg.DIRECTION_CD_1, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_1)},	//方角コード1 
				{EKU0041C010CBSMsg.DIRECTION_CD_2, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_2)},	//方角コード2 
				{EKU0041C010CBSMsg.NEWCONST_BUKKEN_CD, 	newConstBukkenCd},											// 新築物件コード
				{EKU0041C010CBSMsg.HUKKAT_ANKEN_FLG, 	eku0041a010.getString(EKU0041A010CBSMsg1List.HUKKAT_ANKEN_FLG)},// 復活案件フラグ
				{EKU0041C010CBSMsg.SAME_EQUIP_RE_MSKM_CD, 	eku0041a010.getString(EKU0041A010CBSMsg1List.SAME_EQUIP_RE_MSKM_CD)}, // 同一設備再申込コード
				{EKU0041C010CBSMsg.DMPS_ANKEN_NO, 			eku0041a010.getString(EKU0041A010CBSMsg1List.DMPS_ANKEN_NO)},// 電波障害案件番号
				{EKU0041C010CBSMsg.DMPSANK_SBT_CD, 			eku0041a010.getString(EKU0041A010CBSMsg1List.DMPSANK_SBT_CD)},// 電波障害案件種別コード
				{EKU0041C010CBSMsg.CUST_SOS_USE_UM, 	ekk0251a010.get(EKK0251A010CBSMsg1List.CUST_SOS_USE_UM)},// お客様SOS利用有無
		};
		
		return inMsg;
	}

	/**
	 * 工事案件(eo光ネットマンション)諸変更用のメッセージを作成します。
	 * 
	 * @param ccMsg
	 * @param kk0081_a010_map
	 * @param svcKeiKaisenUcwkNo
	 * @param mansionBukkenCd
	 * @param mansTushinEquipCd
	 * @param mansRmTushinKikiSbtCd
	 * 
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] editInMsgEKU0061C010(HashMap<String, Object> ccMsg,
											HashMap<String, Object> kk0081_a010_map,
											String svcKeiKaisenUcwkNo,
											String mansionBukkenCd, 
											String newConstBukkenCd, 
											CAANMsg eku0061a010) throws Exception
	{
		String mansRmTushinKikiSbtCd = eku0061a010.getString(EKU0061A010CBSMsg1List.MANS_RM_TUSHIN_KIKI_SBT_CD);
		String mansTushinEquipCd = eku0061a010.getString(EKU0061A010CBSMsg1List.MANS_TUSHIN_EQUIP_CD);
		
		HashMap<String, Object> ekk0251a010 = (HashMap<String, Object>)ccMsg.get(SVC_KEI_KAISEN_UW_MAP);
		Object[][] inMsg = {
				{EKU0061C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0061C010},
				{EKU0061C010CBSMsg.FUNC_CODE, "1"},
				{EKU0061C010CBSMsg.SVC_KEI_NO, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_KEI_NO)},
				{EKU0061C010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo},
				{EKU0061C010CBSMsg.KOJI_UK_CD, KOJI_UK_CD},
				{EKU0061C010CBSMsg.KOJI_UK_DTAIL_CD, KOJI_UK_DTAIL_CD},
				{EKU0061C010CBSMsg.KOJI_UK_OPTNTY_IDO_DTM, JCCBPCommon.getOpeDateTimeStamp(null)},
				{EKU0061C010CBSMsg.SVC_CD, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_CD)},
				{EKU0061C010CBSMsg.PRC_GRP_CD, kk0081_a010_map.get(EKK0081A010CBSMsg1List.PRC_GRP_CD)},
				
				{EKU0061C010CBSMsg.MANS_RM_TUSHIN_KIKI_SBT_CD, mansRmTushinKikiSbtCd}, // マンション部屋通信機器種別コード
				{EKU0061C010CBSMsg.MANS_TUSHIN_EQUIP_CD, mansTushinEquipCd},
				{EKU0061C010CBSMsg.SYSID, kk0081_a010_map.get(EKK0081A010CBSMsg1List.SYSID)},
				// 住所情報
				{EKU0061C010CBSMsg.PLACE_NO, 			ccMsg.get(JKKAdInfChgConstCC.PARAM_KEY_ITENS_PLACE_NO)}, // 場所番号
				{EKU0061C010CBSMsg.SETPLACE_AD_CD, 		ccMsg.get(KAISEN_PLACE_AD_CD)},	// 設置場所住所コード
				{EKU0061C010CBSMsg.SETPLACE_PCD, 		ccMsg.get(PARAM_AD_PCD)},		// 設置場所郵便番号
				{EKU0061C010CBSMsg.SETPLACE_STATE_NM, 	ccMsg.get(PARAM_AD_STATE_NM)},	// 設置場所都道府県名
				{EKU0061C010CBSMsg.SETPLACE_CITY_NM, 	ccMsg.get(PARAM_AD_CITY_NM)},	// 設置場所市区町村名
				{EKU0061C010CBSMsg.SETPLACE_OAZTSU_NM, 	ccMsg.get(PARAM_AD_OAZTSU_NM)},	// 設置場所大字通称名
				{EKU0061C010CBSMsg.SETPLACE_AZCHO_NM, 	ccMsg.get(PARAM_AD_AZCHO_NM)},	// 設置場所字丁目名
				{EKU0061C010CBSMsg.SETPLACE_AD_BNCHIGO, ccMsg.get(PARAM_AD_BNCHIGO)},	// 設置場所住所番地号
				{EKU0061C010CBSMsg.SETPLACE_ADRTTM, 	ccMsg.get(PARAM_AD_ADRTTM)},	// 設置場所住所補記・建物名
				{EKU0061C010CBSMsg.SETPLACE_ADRRM, 		ccMsg.get(PARAM_AD_ADRRM)},		// 設置場所住所補記・部屋番号
				{EKU0061C010CBSMsg.KOJI_SAKI_AD_MI_FIX_FLG, ccMsg.get(KISN_PLC_AD_MI_FIX_FLG)},// 工事先住所未確定フラグ
				{EKU0061C010CBSMsg.KAISEN_PLACE_TELNO, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KAISEN_PLACE_TELNO)}, // 回線場所電話番号
				{EKU0061C010CBSMsg.LGTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LGTD)},			// 経度
				{EKU0061C010CBSMsg.LTTD, 				ekk0251a010.get(EKK0251A010CBSMsg1List.LTTD)},			// 緯度
				{EKU0061C010CBSMsg.ZAHYO_HOSEI_UM, 		ekk0251a010.get(EKK0251A010CBSMsg1List.ZAHYO_HOSEI_UM)},// 座標補正有無
				{EKU0061C010CBSMsg.AD_FORM_CD, 			ekk0251a010.get(EKK0251A010CBSMsg1List.AD_FORM_CD)},	// 住所形態コード
				{EKU0061C010CBSMsg.NYUKYO_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.SHUGJ_NYUKYO_FLR_CNT_CD)},	// 入居階数
				{EKU0061C010CBSMsg.KCKU_FLR_CNT_CD, 	ekk0251a010.get(EKK0251A010CBSMsg1List.KODATE_KCKU_FLR_CNT_CD)},	// 建築階数
				{EKU0061C010CBSMsg.DIRECTION_CD_1, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_1)},	//方角コード1 
				{EKU0061C010CBSMsg.DIRECTION_CD_2, 		ekk0251a010.get(EKK0251A010CBSMsg1List.DIRECTION_CD_2)},	//方角コード2 
				{EKU0061C010CBSMsg.NEWCONST_BUKKEN_CD, 	newConstBukkenCd},											// 新築物件コード
				{EKU0061C010CBSMsg.HUKKAT_ANKEN_FLG, 	eku0061a010.getString(EKU0061A010CBSMsg1List.HUKKAT_ANKEN_FLG)},// 復活案件フラグ
				{EKU0061C010CBSMsg.SAME_EQUIP_RE_MSKM_CD, 	eku0061a010.getString(EKU0061A010CBSMsg1List.SAME_EQUIP_RE_MSKM_CD)}, // 同一設備再申込コード
				{EKU0061C010CBSMsg.MANSION_BUKKEN_CD, 		mansionBukkenCd}, // マンション物件コード
				{EKU0061C010CBSMsg.MANSSBSYS_RNKI_KIJIRAN, 	eku0061a010.getString(EKU0061A010CBSMsg1List.MANSSBSYS_RNKI_KIJIRAN)},// マンション設備システム連携用記事欄
				{EKU0061C010CBSMsg.CUST_SOS_USE_UM, 	ekk0251a010.get(EKK0251A010CBSMsg1List.CUST_SOS_USE_UM)},	// お客様SOS利用有無
		};
		
		return inMsg;
	}

	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。<br>
	 * <br>
	 * @param handle セッションハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return HashMap
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	@SuppressWarnings("unchecked")
	public  HashMap<String, Object> getInvokeCBS(SessionHandle handle, 
												IRequestParameterReadWrite param, 
												String fixedText) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		List<CAANMsg> templates = new ArrayList<CAANMsg>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文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));
		
		// チェック用サービスインターフェイス
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, Arrays.asList(templates));
		return paramMap;
	}

	/**
	 * 工事諸変更のパターンを取得します。
	 * 
	 * @param svcInf
	 * @param mansionBukkenCd
	 * 
	 * @return int 0:対象外、1:eo光ネット、2:eo光テレビ、3:eo光テレビ回線、4:eo光ネットマンション
	 */
	private int getKojiPtn(String prcGrpCd, String mansionBukkenCd)
	{
		
		// eo光ネットホームタイプの場合
		if (JKKStrConst.CD00133_02.equals(prcGrpCd))
		{
			return 1;
		}
		// eo光ネットメゾンタイプ、eo光ネットマンションタイプの場合
		else if (JKKStrConst.CD00133_03.equals(prcGrpCd) || JKKStrConst.CD00133_04.equals(prcGrpCd))
		{
			return 4;
		}
		// eo光テレビ(K-CAT)、eo光テレビ(再送信)の場合
		else if (JKKStrConst.CD00133_11.equals(prcGrpCd) || JKKStrConst.CD00133_13.equals(prcGrpCd))
		{
			return 2;
		}
		// eo光テレビ(KCN)の場合
		else if (JKKStrConst.CD00133_12.equals(prcGrpCd))
		{
			return 3;
		}
		// eo光電話の場合
		else if (JKKStrConst.CD00133_10.equals(prcGrpCd))
		{
			// ホームの場合
			if (mansionBukkenCd == null || "".equals(mansionBukkenCd))
			{
				return 1;
			}
			else
			{
				return 4;
			}
		}
		
		return 0;
	}
}
