/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCHSksAtenaChohyoCC
*   ソースファイル名：JCHSksAtenaChohyoCC.java
*   作成者          ：FJ
*   日付            ：2023年06月08日
*＜機能概要＞
*   請求書（宛名）帳票出力CC部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2023/06/08	富士通		新規作成
*	v70.00.00   2024/02/05  FJ) 寺田	【ANK-4539-00-00】インボイス対応 STEP3
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JCHSksAtenaConstCC;
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.AttachmentFileMapKeys;
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.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JACCommonUtil;
import eo.common.util.JCHCommonFormatUtil;
import eo.ejb.cbs.cbsmsg.ECC0041A110CBSMsg;
import eo.ejb.cbs.cbsmsg.ECC0041A110CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg1List;

/**
 * 請求収納の各サービスより呼び出される請求書（宛名）帳票出力CC部品です。<p>
 * <BR>
 * @author FJ
 */
public class JCHSksAtenaChohyoCC extends AbstractCommonComponent
{

	/** マップID */
	private static final String MAP_ID = "SKSATENACHOHYOCC";

	/** 日付区分（年） */
	private static final String DATE_KBN_YEAR = "1";

	/** 日付区分（月） */
	private static final String DATE_KBN_MON = "2";

	/** 日付区分（日） */
	private static final String DATE_KBN_DAY = "3";

	/** 帳票出力＿お客様名文字数 */
	private static final int CHOHYO_OUT_NAME_LENGTH = 15;

	/** テンプレートID(請求契約一意照会) */
	private static final String TEMPLATE_ID_EKK0491A010 = "EKK0491A010";

	/** テンプレートID(帳票生成) */
	private static final String TEMPLATE_ID_ECC0041A110 = "ECC0041A110";

	/** テンプレートID(業務パラメータ管理一覧照会) */
	private static final String TEMPLATE_ID_EZM0321B010 = "EZM0321B010";

	/** 業務パラメータＩＤ */
	private static final String WK_PARA_ID = "CH_HONBUN_";
	/** 業務パラメータＩＤ（本文1） */
	private static final String WK_PARA_ID_TEXT01 = "CH_HONBUN_01";
	/** 業務パラメータＩＤ（本文2） */
	private static final String WK_PARA_ID_TEXT02 = "CH_HONBUN_02";
	/** 業務パラメータＩＤ（本文3） */
	private static final String WK_PARA_ID_TEXT03 = "CH_HONBUN_03";
	/** 業務パラメータＩＤ（本文4） */
	private static final String WK_PARA_ID_TEXT04 = "CH_HONBUN_04";
	/** 業務パラメータＩＤ（本文5） */
	private static final String WK_PARA_ID_TEXT05 = "CH_HONBUN_05";
	/** 業務パラメータＩＤ（本文6） */
	private static final String WK_PARA_ID_TEXT06 = "CH_HONBUN_06";
	/** 業務パラメータＩＤ（本文7） */
	private static final String WK_PARA_ID_TEXT07 = "CH_HONBUN_07";
	/** 業務パラメータＩＤ（本文8） */
	private static final String WK_PARA_ID_TEXT08 = "CH_HONBUN_08";
	/** 業務パラメータＩＤ（本文9） */
	private static final String WK_PARA_ID_TEXT09 = "CH_HONBUN_09";
	/** 業務パラメータＩＤ（本文10） */
	private static final String WK_PARA_ID_TEXT10 = "CH_HONBUN_10";

	/** 帳票定義NO（請求書（宛名）） */
	private static final String CHOHYO_SVCR_NO = "PCHZ00000000010"; 

	/** 改行文字 */
	private static final String LINE_SEP = "line.separator";
	/**  カンマ区切り */
	public static final String CSV = ",";
	/** エスケープ文字 (")  */
	private static final String SINGLE_DBLQUOTE = "\"";

	/** 住所分割文字数(通常) */
	private static final int ADDRESS_NORMAL_LINE_LENGTH = 24;

	/** 住所分割文字数(小さいサイズ) */
	private static final int ADDRESS_SMALL_LINE_LENGTH = 31;

	/** 住所分割数 */
	private static final int ADDRESS_SPLIT_COUNT = 4;

	/** 送付先住所の編集部品の結果 を格納するmapのキー */
	private static final String EDIT_FLG_KEY = "EDIT_FLG";
	/** 送付先住所の編集部品の結果 正常サイズ */
	private static final String EDIT_FLG_NORMAL = "NORMAL";
	/** 送付先住所の編集部品の結果 小さいサイズ */
	private static final String EDIT_FLG_SMALL = "SMALL";

	/**
	 * 請求書（宛名）帳票出力 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite outputSksAtenaChohyo(SessionHandle handle, 
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(MAP_ID);

		if (inMap == null)
		{
			inMap = new HashMap<String, Object>();
			param.setData(MAP_ID, inMap);
		}

		// 機能コード ← 請求書（宛名）帳票マップ．機能コード
		String funcCd = (String)inMap.get(JCHSksAtenaConstCC.FUNC_CD);
		
		IRequestParameterReadWrite rtnParam = null;

		// 請求書（宛名）情報取得
		getInfoSksAtena(handle, param, fixedText, inMap, false);

		// CSV編集処理
		byte[] csvData = makeCSVDataSksAtenaChohyo(param);

		// 帳票生成処理
		rtnParam = createList(handle, param, csvData, funcCd, CHOHYO_SVCR_NO);

		return rtnParam;
	}

	// ▼▼ 帳票処理 ▼▼

	/**
	 * 帳票生成処理
	 * @param handle
	 * @param param
	 * @param csvData
	 * @param funcCd
	 * @param chohyoTeigiNo
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite createList(SessionHandle handle, 
			IRequestParameterReadWrite param, byte[] csvData, String funcCd, String chohyoTeigiNo) throws Exception
	{
		if(!JPCModelConstant.FUNC_CD_1.equals(funcCd))
		{
			return param;
		}

		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータ作成
		HashMap<String, Object> parentMapCC = (HashMap<String, Object>)param.getData(MAP_ID);

		String userId = parentMapCC.get(JCHSksAtenaConstCC.ECC0041A110_USER_ID).toString();

		parentMapCC.put(JCHSksAtenaConstCC.ECC0041A110_CHOHYO_TEIGI_NO, chohyoTeigiNo);
		parentMapCC.put(JCHSksAtenaConstCC.ECC0041A110_DATA_FILE, (byte[])csvData);
		parentMapCC.put(JCHSksAtenaConstCC.ECC0041A110_USER_ID, userId);
		// 帳票形成処理種別："1"（PDF形式）
		parentMapCC.put(JCHSksAtenaConstCC.ECC0041A110_TRAN_SBT, "1");

		/*
		 * 上りマッピング処理
		 */
		paramMap = editInMsg(param);

		/*
		 * ＳＣ呼出実行
		 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/*
		 * 下りマッピング処理
		 */
		IRequestParameterReadWrite rtnParam = editOutMsg(result, param);

		//取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)rtnParam.getControlMapData(SCControlMapKeys.RETURN_CODE);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status))) 
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", rtnCode, Integer.parseInt(status));
			throw scCallEx;
		}

		return rtnParam;
	}

	/**
	 * 帳票生成処理用メッセージ設定処理
	 * @param param
	 * @param csvData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param) throws RequestParameterException
	{
		/* ◇パラメータマップ生成 */
		HashMap<String, Object> paramMap = this.createNewParamMap(param);

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(MAP_ID);

		CAANMsg template = new CAANMsg(ECC0041A110CBSMsg.class.getName());
		// テンプレートID
		template.set(ECC0041A110CBSMsg.TEMPLATEID, TEMPLATE_ID_ECC0041A110);

		// 機能コード
		template.set(ECC0041A110CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// 検索処理パターン
		template.setNull(ECC0041A110CBSMsg.SEARCH_TYPE);

		// 最大検索件数
		template.setNull(ECC0041A110CBSMsg.MAX_SEARCH_NUM);

		// 表示件数
		template.setNull(ECC0041A110CBSMsg.DISPLAY_NUM);

		// 表示ページ番号
		template.setNull(ECC0041A110CBSMsg.DISPLAY_PAGE_NUM);

		// オペレータID
		template.set(ECC0041A110CBSMsg.OPERATORID, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// 運用日付
		template.set(ECC0041A110CBSMsg.OPERATEDATE, param.getControlMapData(SCControlMapKeys.OPE_DATE));

		// 運用日時
		template.set(ECC0041A110CBSMsg.OPERATEDATETIME,  param.getControlMapData(SCControlMapKeys.OPE_TIME));


		// ◇業務データの設定
		// 帳票定義体の電子ファイル管理番号
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHSksAtenaConstCC.ECC0041A110_CHOHYO_TEIGI_NO))) 
		{
			template.setNull(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO, inMap.get(JCHSksAtenaConstCC.ECC0041A110_CHOHYO_TEIGI_NO));
		}
		
		// データファイルの電子ファイル管理番号
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHSksAtenaConstCC.ECC0041A110_DATA_FILE_NO))) 
		{
			template.setNull(ECC0041A110CBSMsg.DATA_FILE_NO);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.DATA_FILE_NO, inMap.get(JCHSksAtenaConstCC.ECC0041A110_DATA_FILE_NO));
		}
		
		// データファイル
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHSksAtenaConstCC.ECC0041A110_DATA_FILE))) 
		{
			template.setNull(ECC0041A110CBSMsg.DATA_FILE);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.DATA_FILE, inMap.get(JCHSksAtenaConstCC.ECC0041A110_DATA_FILE));
		}

		// ユーザーID
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHSksAtenaConstCC.ECC0041A110_USER_ID))) 
		{
			template.setNull(ECC0041A110CBSMsg.USER_ID);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.USER_ID, inMap.get(JCHSksAtenaConstCC.ECC0041A110_USER_ID));
		}
		
		// 処理種別
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHSksAtenaConstCC.ECC0041A110_TRAN_SBT))) 
		{
			template.setNull(ECC0041A110CBSMsg.TRAN_SBT);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.TRAN_SBT, inMap.get(JCHSksAtenaConstCC.ECC0041A110_TRAN_SBT));
		}
		// 帳票出力環境識別コード
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHSksAtenaConstCC.ECC0041A110_CHOHYO_OPUT_ENV_SKBT_CD))) 
		{
			template.setNull(ECC0041A110CBSMsg.CHOHYO_OPUT_ENV_SKBT_CD);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.CHOHYO_OPUT_ENV_SKBT_CD, inMap.get(JCHSksAtenaConstCC.ECC0041A110_CHOHYO_OPUT_ENV_SKBT_CD));
		}

		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * 帳票生成処理用メッセージ取得処理
	 * @param msgList
	 * @param param
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsg(Map<?, ?> msgList, IRequestParameterReadWrite param) throws Exception
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);

		// 結果を詰めるマップを取得。
		HashMap<String, Object> dataMap = null;
		ArrayList dataList = null;

		/* 業務データ設定 */
		dataMap = (HashMap<String, Object>)param.getData(MAP_ID);

		if(dataMap == null) 
		{
			dataMap = new HashMap<String, Object>();
			param.setData(MAP_ID, dataMap);
		}

		// 検索系 共通部
		dataMap.put(JCHSksAtenaConstCC.ECC0041A110_TOTAL_SEARCH_NUM, parentTemplate.getString("total_search_num"));
		dataMap.put(JCHSksAtenaConstCC.ECC0041A110_TOTAL_PAGE_NUM, parentTemplate.getString("total_page_num"));
		dataMap.put(JCHSksAtenaConstCC.ECC0041A110_SEARCH_ERR_FLG, parentTemplate.getString("search_err_flg"));

		templateArray = parentTemplate.getCAANMsgList(ECC0041A110CBSMsg.ECC0041A110CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("ECC0041A110CBSMsg1List");

		if (dataList == null) 
		{
			dataList = new ArrayList();
		}

		int dataListNum = dataList.size();

		if (templateArray != null) 
		{
			for(int i = 0; i < templateArray.length; i++) 
			{
				CAANMsg childTemplate = templateArray[i];
				if(i >= dataList.size() - dataListNum)
				{
					dataList.add(new HashMap<String, Object>());
				}
				HashMap<String, Object> childMap = (HashMap<String, Object>)dataList.get(i + dataListNum);

				if (childTemplate.isNull(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO)) 
				{
					childMap.put(JCHSksAtenaConstCC.ECC0041A110_OUTPUT_CHOHYO, new byte[0]);
				} 
				else
				{
					// byte配列の場合は添付ファイルエリアに格納する
					HashMap<Object, Object> map = new HashMap<Object, Object>();
					ArrayList<HashMap> list = (ArrayList)param.getControlMapData(SCControlMapKeys.ATTACHMENT_FILE_DOWN);
					if (list == null)
					{
						list = new  ArrayList<HashMap>();
					}
					
					map.put(AttachmentFileMapKeys.IDENTIFY_CD, MAP_ID);
					map.put(AttachmentFileMapKeys.LIST_NAME, "ECC0041A110CBSMsg1List");
					map.put(AttachmentFileMapKeys.ITEM_NAME, JCHSksAtenaConstCC.ECC0041A110_OUTPUT_CHOHYO);
					map.put(AttachmentFileMapKeys.INDEX, Integer.toString(i));
					map.put(AttachmentFileMapKeys.FILE, childTemplate.getObject(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO));
					list.add(map);
					param.setControlMapData(SCControlMapKeys.ATTACHMENT_FILE_DOWN, list);
				}


				if (childTemplate.isNull(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO_NM)) 
				{
					childMap.put(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO_NM, JACStrConst.KARA_MOJI);
				} 
				else 
				{
					childMap.put(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO_NM, childTemplate.getString(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO_NM));
				}
				
				if (childTemplate.isNull(ECC0041A110CBSMsg1List.SEND_RESULT_CD)) 
				{
					childMap.put(ECC0041A110CBSMsg1List.SEND_RESULT_CD, JACStrConst.KARA_MOJI);
				} 
				else 
				{
					childMap.put(ECC0041A110CBSMsg1List.SEND_RESULT_CD, childTemplate.getString(ECC0041A110CBSMsg1List.SEND_RESULT_CD));
				}
			}
		}
		dataMap.put("ECC0041A110CBSMsg1List", dataList);

		// エラー情報の設定
		IRequestParameterReadWrite rtnParam = editErrorInfo(param, templates, (Integer)return_code);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)rtnParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		rtnParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return rtnParam;
	}
	// ▲▲ 帳票処理 ▲▲

	/**
	 * 帳票マップに指定されたキー情報を基に【請求書（宛名）】情報を取得します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @param reHakko 再発行フラグ
	 * @return リクエストパラメータ
	 * @throws Exception 例外が発生した場合
	 */
	public IRequestParameterReadWrite getInfoSksAtena(SessionHandle handle, 
			IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> chohyoReqMap, boolean reHakko) throws Exception
	{

		/* ◇請求契約一意照会サービスインターフェイス */
		execEKK0491A010(handle, param, chohyoReqMap);

		/* ◇業務パラメータ管理一覧照会サービスインターフェイス */
		execEZM0321B010(handle, param, chohyoReqMap);

		return param;
	}

	/**
	 * 請求契約一意照会サービスインタフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @throws Exception 例外が発生した場合
	 */
	private void execEKK0491A010(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> chohyoReqMap) throws Exception
	{
		/* ◇パラメータマップ生成 */
		HashMap<String, Object> paramMap = this.createNewParamMap(param);

		/* ◇テンプレートリスト生成 */
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();

		// 上りマッピング
		ArrayList<CAANMsg> templateEKK0491A010 = editInMsgEKK0491A010(param, chohyoReqMap);
		for (CAANMsg msg : templateEKK0491A010)
		{
			templateList.add(msg);
		}
		CAANMsg[] templates = templateList.toArray(new CAANMsg[templateList.size()]);
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		// ＳＣ呼出実行
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		// 下りマッピング
		editOutMsgEKK0491A010(result, param);
	}

	/**
	 * 請求契約一意照会サービスインターフェイス用メッセージ設定処理<br>
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @return ArrayList<CAANMsg>
	 * @throws RequestParameterException
	 */
	private ArrayList<CAANMsg> editInMsgEKK0491A010(IRequestParameterReadWrite param,
								HashMap<String, Object> chohyoReqMap) throws RequestParameterException
	{
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();

		/* ◇ユーザデータ情報 */
		CAANMsg template = new CAANMsg(EKK0491A010CBSMsg.class.getName());
		this.setTemplateCommonItem(param, template, 
				EKK0491A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0491A010, EKK0491A010CBSMsg.FUNC_CODE);

		/* ◇業務データの設定 */
		// 機能コード
		template.set(EKK0491A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// 帳票出力依頼リストマップ.ＫＥＹ＿請求契約番号 → ＫＥＹ＿請求契約番号
		String seikyKeiNo = (String)chohyoReqMap.get(JCHSksAtenaConstCC.EKK0491A010_KEY_SEIKY_KEI_NO);
		if (chohyoReqMap == null || seikyKeiNo == null || JACStrConst.KARA_MOJI.equals(seikyKeiNo))
		{
			template.setNull(EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO);
		}
		else
		{
			template.set(EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO, seikyKeiNo);
		}

		// NULL → ＫＥＹ＿世代登録年月日時分秒
		template.setNull(EKK0491A010CBSMsg.KEY_GENE_ADD_DTM);

		// 部品呼び出し → ＫＥＹ＿予約適用年月日
		template.set(EKK0491A010CBSMsg.KEY_RSV_APLY_YMD, com.fujitsu.futurity.bp.custom.common.JCCBPCommon.getOpeDate(JACStrConst.SYS_CD_CH));

		templateList.add(template);

		return templateList;
	}

	/**
	 * 請求契約一意照会サービスインターフェイス用メッセージ取得処理<br>
	 * 
	 * @param msgList メッセージリスト
	 * @param param リクエストパラメータ
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgEKK0491A010(Map<?, ?> msgList,
			IRequestParameterReadWrite param) throws Exception
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);

		// 業務データ設定
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(MAP_ID);
		if (dataMap == null)
		{
			dataMap = new HashMap<String, Object>();
			param.setData(MAP_ID, dataMap);
		}

		templateArray = parentTemplate.getCAANMsgList(EKK0491A010CBSMsg.EKK0491A010CBSMSG1LIST);
		if (templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];

// ANK-4539-00-00 ADD START
				// 通信サービス料金マップ.請求先番号 ← 請求契約一意照会明細.請求先番号
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SEIKY_KEI_NO))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SEIKY_KEI_NO, new String());
				} 
				else 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SEIKY_KEI_NO, childTemplate.getString(EKK0491A010CBSMsg1List.SEIKY_KEI_NO));
				}
// ANK-4539-00-00 ADD END

				// 通信サービス料金マップ.送付先名 ← 請求契約一意照会明細.送付先名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_NM))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_NM, new String());
				} 
				else 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_NM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_NM));
				}
				// 通信サービス料金マップ.送付先部課名 ← 請求契約一意照会明細.送付先部課名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_BKM))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_BKM, new String());
				} 
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_BKM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_BKM));
				}
				// 通信サービス料金マップ.送付先担当者名 ← 請求契約一意照会明細.送付先担当者名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_TNTSHA_NM))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_TNTSHA_NM, new String());
				}
				else 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_TNTSHA_NM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_TNTSHA_NM));
				}
				// 通信サービス料金マップ.送付先郵便番号 ← 請求契約一意照会明細.送付先郵便番号
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_PCD))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_PCD, new String());
				} 
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_PCD, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_PCD));
				}
				// 通信サービス料金マップ.送付先都道府県名 ← 請求契約一意照会明細.送付先都道府県名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_STATE_NM))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_STATE_NM, new String());
				} 
				else 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_STATE_NM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_STATE_NM));
				}
				// 通信サービス料金マップ.送付先市区町村名 ← 請求契約一意照会明細.送付先市区町村名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_CITY_NM))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_CITY_NM, new String());
				}
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_CITY_NM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_CITY_NM));
				}
				// 通信サービス料金マップ.送付先大字通称名 ← 請求契約一意照会明細.送付先大字通称名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_OAZTSU_NM)) 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_OAZTSU_NM, new String());
				}
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_OAZTSU_NM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_OAZTSU_NM));
				}
				// 通信サービス料金マップ.送付先字丁目名 ← 請求契約一意照会明細.送付先字丁目名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_AZCHO_NM))
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_AZCHO_NM, new String());
				} 
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_AZCHO_NM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_AZCHO_NM));
				}
				// 通信サービス料金マップ.送付先住所補記・建物名 ← 請求契約一意照会明細.送付先住所補記・建物名
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_ADRTTM)) 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_ADRTTM, new String());
				}
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_ADRTTM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_ADRTTM));
				}
				// 通信サービス料金マップ.送付先住所補記・部屋番号 ← 請求契約一意照会明細.送付先住所補記・部屋番号
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_ADRRM)) 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_ADRRM, new String());
				}
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_ADRRM, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_ADRRM));
				}
				// 通信サービス料金マップ.送付先番地号 ← 請求契約一意照会明細.送付先番地号
				if (childTemplate.isNull(EKK0491A010CBSMsg1List.SOHUS_BNCHIGO)) 
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_BNCHIGO, new String());
				}
				else
				{
					dataMap.put(JCHSksAtenaConstCC.EKK0491A010_SOHUS_BNCHIGO, childTemplate.getString(EKK0491A010CBSMsg1List.SOHUS_BNCHIGO));
				}
			}
		}

		// エラー情報の設定
		editErrorInfo(param, templates, (Integer)return_code);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		// 例外通知
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status)))
		{
			throw new Exception();
		}

		return param;
	}

	/**
	 * サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException RequestParameterException
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, 
									CAANMsg[] templates, int returnCode) throws RequestParameterException
	{

		for (CAANMsg template : templates)
		{
			String templateId = template.getString("templateID");
			CAANMsg[] workTemplates = { template };
			if (TEMPLATE_ID_EKK0491A010.equals(templateId))
			{
				// 請求契約一意照会
				editErrorInfoEKK0491A010(param, workTemplates, returnCode);
			}
			else if (TEMPLATE_ID_EZM0321B010.equals(templateId))
			{
				// 業務パラメータ管理一覧照会
				editErrorInfoEZM0321B010(param, workTemplates, returnCode);
			}
			else if (TEMPLATE_ID_ECC0041A110.equals(templateId))
			{
				// 帳票生成
				editErrorInfoECC0041A110(param, workTemplates, returnCode);
			}
		}

		return param;
	}

	/**
	 * 請求契約一意照会サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfoEKK0491A010(IRequestParameterReadWrite param
			, CAANMsg[] templates, int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(EKK0491A010CBSMsg.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);
		}

		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(MAP_ID);

		// 請求契約一意照会マップ.ＫＥＹ＿請求契約番号 → ＫＥＹ＿請求契約番号 のエラー情報返却
		if (!template.isNull(EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO_ERR))
		{
			if (!inMap.containsKey(EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO_ERR))
			{
				inMap.put(EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO_ERR, template.getString(EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO_ERR));
			}
		}
		// 請求契約一意照会マップ.ＫＥＹ＿世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(EKK0491A010CBSMsg.KEY_GENE_ADD_DTM_ERR))
		{
			if (!inMap.containsKey(EKK0491A010CBSMsg.KEY_GENE_ADD_DTM_ERR))
			{
				inMap.put(EKK0491A010CBSMsg.KEY_GENE_ADD_DTM_ERR, template.getString(EKK0491A010CBSMsg.KEY_GENE_ADD_DTM_ERR));
			}
		}

		return param;
	}

	/**
	 * 帳票生成サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfoECC0041A110(IRequestParameterReadWrite param
			, CAANMsg[] templates, int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(ECC0041A110CBSMsg.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);
		}

		HashMap<String, Object> inMap = null;

		/* ユーザデータ情報 */
		inMap = (HashMap<String, Object>)param.getData(MAP_ID);

		// 帳票生成.帳票定義体の電子ファイル管理番号→ 帳票定義体の電子ファイル管理番号 のエラー情報返却
		if (!template.isNull(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO_ERR)) 
		{
			if (!inMap.containsKey(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO_ERR)) 
			{
				inMap.put(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO_ERR, template.getString(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO_ERR));
			}
		}
		// 帳票生成.データファイルの電子ファイル管理番号→ データファイルの電子ファイル管理番号 のエラー情報返却
		if (!template.isNull(ECC0041A110CBSMsg.DATA_FILE_NO_ERR)) 
		{
			if (!inMap.containsKey(ECC0041A110CBSMsg.DATA_FILE_NO_ERR)) 
			{
				inMap.put(ECC0041A110CBSMsg.DATA_FILE_NO_ERR, template.getString(ECC0041A110CBSMsg.DATA_FILE_NO_ERR));
			}
		}
		// 帳票生成.データファイル→ データファイル のエラー情報返却
		if (!template.isNull(ECC0041A110CBSMsg.DATA_FILE_ERR)) 
		{
			if (!inMap.containsKey(ECC0041A110CBSMsg.DATA_FILE_ERR)) 
			{
				inMap.put(ECC0041A110CBSMsg.DATA_FILE_ERR, template.getString(ECC0041A110CBSMsg.DATA_FILE_ERR));
			}
		}
		// 帳票生成.ユーザーID→ ユーザーID のエラー情報返却
		if (!template.isNull(ECC0041A110CBSMsg.USER_ID_ERR)) 
		{
			if (!inMap.containsKey(ECC0041A110CBSMsg.USER_ID_ERR)) 
			{
				inMap.put(ECC0041A110CBSMsg.USER_ID_ERR, template.getString(ECC0041A110CBSMsg.USER_ID_ERR));
			}
		}
		// 帳票生成.処理種別→ 処理種別 のエラー情報返却
		if (!template.isNull(ECC0041A110CBSMsg.TRAN_SBT_ERR)) 
		{
			if (!inMap.containsKey(ECC0041A110CBSMsg.TRAN_SBT_ERR)) 
			{
				inMap.put(ECC0041A110CBSMsg.TRAN_SBT_ERR, template.getString(ECC0041A110CBSMsg.TRAN_SBT_ERR));
			}
		}

		// 帳票生成.FAX送信先コード区分→ FAX送信先コード区分 のエラー情報返却
		if (!template.isNull(ECC0041A110CBSMsg.CHOHYO_OPUT_ENV_SKBT_CD_ERR)) 
		{
			if (!inMap.containsKey(ECC0041A110CBSMsg.CHOHYO_OPUT_ENV_SKBT_CD_ERR)) 
			{
				inMap.put(ECC0041A110CBSMsg.CHOHYO_OPUT_ENV_SKBT_CD_ERR, template.getString(ECC0041A110CBSMsg.CHOHYO_OPUT_ENV_SKBT_CD_ERR));
			}
		}

		return param;
	}

	/**
	 * 通信サービス料金内訳リスト情報をCSV形式のバイナリデータに変換する。
	 * @param param
	 * @param bothDispMap 内訳両出力マップ
	 * @return byte[]
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private byte[] makeCSVDataSksAtenaChohyo(IRequestParameterReadWrite param) throws Exception
	{
		HashMap<String, Object> parentMapCC = null;
		parentMapCC = (HashMap<String, Object>)param.getData(MAP_ID);

		StringBuffer sb = new StringBuffer();

		// フォーマット編集
		// 通常文字サイズ か 小さい文字サイズ かのフラグ
		HashMap<String, String> editFlgMap = new HashMap<String, String>();
		
		// 送付先
		ArrayList<String> addressList = editSohusaki(parentMapCC, editFlgMap);
		
		// 住所リストから更新用住所配列を取得
		String[] strAddress1 = getAddressArray(addressList.get(0), editFlgMap);
		String[] strAddress2 = getAddressArray(addressList.get(1), editFlgMap);
		String[] strAddress3 = getAddressArray(addressList.get(2), editFlgMap);
		String[] strAddress4 = getAddressArray(addressList.get(3), editFlgMap);
		
		// 送付先名・部課名・担当者名
		ArrayList<String> sohusNmList = editSohusakiName(parentMapCC);
		
		// 送付先郵便番号
		String sohusPcd = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_PCD);

		// 処理年月日
		String trnYmd = com.fujitsu.futurity.bp.custom.common.JCCBPCommon.getOpeDate(JACStrConst.SYS_CD_CH);
		String trnYear = editYmd(trnYmd, DATE_KBN_YEAR);
		String trnMonth = editYmd(trnYmd, DATE_KBN_MON);
		String trnDay = editYmd(trnYmd, DATE_KBN_DAY);

		sb.append(getStringToDblQuote(sohusPcd))						// 郵便番号
		.append(CSV + getStringToDblQuote(strAddress1[0]))				// 送付住所1-1
		.append(CSV + getStringToDblQuote(strAddress2[0]))				// 送付住所1-2
		.append(CSV + getStringToDblQuote(strAddress3[0]))				// 送付住所1-3
		.append(CSV + getStringToDblQuote(strAddress4[0]))				// 送付住所1-4
		.append(CSV + getStringToDblQuote(strAddress1[1]))				// 送付住所2-1
		.append(CSV + getStringToDblQuote(strAddress2[1]))				// 送付住所2-2
		.append(CSV + getStringToDblQuote(strAddress3[1]))				// 送付住所2-3
		.append(CSV + getStringToDblQuote(strAddress4[1]))				// 送付住所2-4
		.append(CSV + getStringToDblQuote((String)sohusNmList.get(0)))	// 送付先名
		.append(CSV + getStringToDblQuote((String)sohusNmList.get(1)))	// 送付先部課名
		.append(CSV + getStringToDblQuote((String)sohusNmList.get(2)))	// 送付先担当者名
		.append(CSV + getStringToDblQuote(trnYear))						// 処理年
		.append(CSV + getStringToDblQuote(trnMonth))					// 処理月
		.append(CSV + getStringToDblQuote(trnDay))						// 処理日
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_01)))	// 本文1行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_02)))	// 本文2行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_03)))	// 本文3行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_04)))	// 本文4行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_05)))	// 本文5行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_06)))	// 本文6行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_07)))	// 本文7行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_08)))	// 本文8行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_09)))	// 本文9行目
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_10)))	// 本文10行目
// ANK-4539-00-00 ADD START
		.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SEIKY_KEI_NO)))			// お客さま番号：請求契約番号
// ANK-4539-00-00 ADD END
		.append(System.getProperty(LINE_SEP));

		//UTF-8のバイト配列に変換して返す
		return sb.toString().getBytes("UTF-8");
	}

	/**
	 * 編集した送付先住所を返します。
	 * @param parentMapCC
	 * @param editFlgMap
	 * @return ArrayList
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<String> editSohusaki(HashMap<String, Object> parentMapCC, HashMap<String, String> editFlgMap) throws Exception
	{
		ArrayList<String> addList = new ArrayList<String>();
		addList.add("");
		addList.add("");
		addList.add("");
		addList.add("");

		String[] paramEditAddr = new String[7];

		paramEditAddr[0] = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_STATE_NM);
		paramEditAddr[1] = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_CITY_NM);
		paramEditAddr[2] = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_OAZTSU_NM);
		paramEditAddr[3] = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_AZCHO_NM);
		paramEditAddr[4] = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_BNCHIGO);
		paramEditAddr[5] = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_ADRTTM);
		paramEditAddr[6] = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_ADRRM);

		JCHCommonFormatUtil chComFmtUtil = new JCHCommonFormatUtil();

		// 通常文字サイズで編集
		String[] retEditAddr = chComFmtUtil.editAddress(paramEditAddr, ADDRESS_NORMAL_LINE_LENGTH, ADDRESS_SPLIT_COUNT);

		if (retEditAddr != null)
		{
			editFlgMap.put(EDIT_FLG_KEY, EDIT_FLG_NORMAL);
			
			if (!retEditAddr[0].equals(JCHCommonFormatUtil.EDIT_RESULT_NORMAL))
			{
				// 小さい文字サイズで編集
				retEditAddr = chComFmtUtil.editAddress(paramEditAddr, ADDRESS_SMALL_LINE_LENGTH, ADDRESS_SPLIT_COUNT);

				editFlgMap.put(EDIT_FLG_KEY, EDIT_FLG_SMALL);

			}
			
			for (int i = 1; i < retEditAddr.length; i++)
			{
				addList.set(i - 1, retEditAddr[i]);
			}
		}

		return addList;
	}

	/**
	 * 編集した年・月・日を返します。
	 * @param strDate
	 * @param kbnYmd
	 * @return String
	 * @throws Exception
	 */
	private String editYmd(String strDate, String kbnYmd) throws Exception
	{
		String rtnValue = JACStrConst.KARA_MOJI;

		if(strDate != null && !JACStrConst.KARA_MOJI.equals(strDate))
		{
			if (DATE_KBN_YEAR.equals(kbnYmd))
			{
				// 年の切り出し
				rtnValue = strDate.substring(0, 4);
			}
			else if (DATE_KBN_MON.equals(kbnYmd))
			{
				// 月の切り出し
				rtnValue = strDate.substring(4, 6);
			}
			else if (DATE_KBN_DAY.equals(kbnYmd))
			{
				// 日の切り出し
				rtnValue = strDate.substring(6, 8);
			}
		}

		return rtnValue;
	}

	/**
	 * サービスインタフェースに渡すパラメータマップを新規に作成します。
	 * マップには共通項目である電文ヘッダ、コントロールマップを設定します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @return paramMap
	 * @throws RequestParameterException パラメータ取得で例外が発生した場合
	 */
	private HashMap<String, Object> createNewParamMap(IRequestParameterReadWrite param) 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));
		
		return paramMap;
	}

	/**
	 * テンプレートの共通項目を設定します。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param template テンプレート
	 * @param templateIdKey テンプレートIDキー名
	 * @param templateIdVal テンプレートID値
	 * @param templateFuncCdKey テンプレート機能コードキー名
	 * @return template
	 * @throws RequestParameterException パラメータ取得で例外が発生した場合
	 */
	private CAANMsg setTemplateCommonItem(IRequestParameterReadWrite param, CAANMsg template, 
											String templateIdKey, String templateIdVal, String templateFuncCdKey) throws RequestParameterException
	{
		// テンプレートID
		template.set(templateIdKey, templateIdVal);

		// 機能コード（デフォルト：１）
		template.set(templateFuncCdKey, JPCModelConstant.FUNC_CD_1);

		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);

		return template;
	}

	/**
	 * 文字列を「"」で囲みます。
	 * @param arg0 対象文字列
	 * @return "対象文字列"
	 */
	private String getStringToDblQuote(String arg0)
	{
		return SINGLE_DBLQUOTE + arg0 + SINGLE_DBLQUOTE;
		
	}

	/**
	 * 編集したお客様名を返します。
	 * @param parentMapCC
	 * @return String
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<String> editSohusakiName(HashMap<String, Object> parentMapCC) throws Exception
	{
		ArrayList<String> nameList = new ArrayList<String>();

		String sohusNm = "";
		String sohusBkm = "";
		String sohusTntshaNm = "";
		
		sohusNm = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_NM);
		sohusBkm = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_BKM);
		sohusTntshaNm = (String)parentMapCC.get(JCHSksAtenaConstCC.EKK0491A010_SOHUS_TNTSHA_NM);

		nameList.add(JACCommonUtil.editStrLength(sohusNm, CHOHYO_OUT_NAME_LENGTH));
		nameList.add(JACCommonUtil.editStrLength(sohusBkm, CHOHYO_OUT_NAME_LENGTH));
		nameList.add(JACCommonUtil.editStrLength(sohusTntshaNm, CHOHYO_OUT_NAME_LENGTH));
		ArrayList<String> resultNameList = JACCommonUtil.editNameList(nameList);

		return resultNameList;
	}

	/**
	 * 住所配列取得処理。
	 * 「第2引数のeditFlgMap = NORMAL」である場合、返却配列の0番目の要素に住所を格納、
	 * それ以外場合、返却配列の1番目の要素に住所を格納し、返却する。
	 * 
	 * @param strAddress 住所文字列
	 * @param editFlgMap 正常サイズか小さいフォントサイズかのフラグも持つmap
	 * @return 住所配列
	 */
	private String[] getAddressArray(String strAddress, HashMap<String, String> editFlgMap)
	{
		String[] addressArray = new String[2];
		addressArray[0] = "";
		addressArray[1] = "";

		String editFlg = editFlgMap.get(EDIT_FLG_KEY);
		
		if (EDIT_FLG_NORMAL.equals(editFlg))
		{
			addressArray[0] = strAddress;
		}
		else
		{
			addressArray[1] = strAddress;
		}

		return addressArray;
	}

	/**
	 * 業務パラメータ管理一覧照会サービスインタフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @throws Exception 例外が発生した場合
	 */
	private void execEZM0321B010(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> chohyoReqMap) throws Exception
	{
		/* ◇パラメータマップ生成 */
		HashMap<String, Object> paramMap = this.createNewParamMap(param);

		/* ◇テンプレートリスト生成 */
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();

		// 上りマッピング
		ArrayList<CAANMsg> templateEZM0321B010 = editInMsgEZM0321B010(param, chohyoReqMap);
		for (CAANMsg msg : templateEZM0321B010)
		{
			templateList.add(msg);
		}
		CAANMsg[] templates = templateList.toArray(new CAANMsg[templateList.size()]);
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		// ＳＣ呼出実行
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		// 下りマッピング
		editOutMsgEZM0321B010(result, param);
	}
	
	/**
	 * 業務パラメータ管理一覧照会サービスインターフェイス用メッセージ設定処理<br>
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @return ArrayList<CAANMsg>
	 * @throws RequestParameterException
	 */
	private ArrayList<CAANMsg> editInMsgEZM0321B010(IRequestParameterReadWrite param,
								HashMap<String, Object> chohyoReqMap) throws RequestParameterException
	{
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();

		/* ◇ユーザデータ情報 */
		CAANMsg template = new CAANMsg(EZM0321B010CBSMsg.class.getName());
		this.setTemplateCommonItem(param, template, 
				EZM0321B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0321B010, EZM0321B010CBSMsg.FUNC_CODE);

		/* ◇業務データの設定 */
		// 機能コード
		template.set(EZM0321B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// 業務パラメータＩＤ → ＫＥＹ＿業務パラメータＩＤ
		template.set(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID, WK_PARA_ID);

		// 部品呼び出し → ＫＥＹ＿業務パラメータ適用年月日
		template.set(EZM0321B010CBSMsg.KEY_WORK_PARAM_APLY_YMD, com.fujitsu.futurity.bp.custom.common.JCCBPCommon.getOpeDate(JACStrConst.SYS_CD_CH));

		templateList.add(template);

		return templateList;
	}
	
	/**
	 * 業務パラメータ管理一覧照会サービスインターフェイス用メッセージ取得処理<br>
	 * 
	 * @param msgList メッセージリスト
	 * @param param リクエストパラメータ
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgEZM0321B010(Map<?, ?> msgList,
			IRequestParameterReadWrite param) throws Exception
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);

		// 業務データ設定
		HashMap<String, Object> dataMap = (HashMap<String, Object>)param.getData(MAP_ID);
		if (dataMap == null)
		{
			dataMap = new HashMap<String, Object>();
			param.setData(MAP_ID, dataMap);
		}

		templateArray = parentTemplate.getCAANMsgList(EZM0321B010CBSMsg.EZM0321B010CBSMSG1LIST);
		
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_01, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_02, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_03, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_04, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_05, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_06, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_07, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_08, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_09, new String());
		dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_10, new String());
		
		if (templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];

				// 請求書（宛名）マップ.業務パラメータID ←業務パラメータ管理一覧照会明細.業務パラメータID
				if (!childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_ID))
				{
					// 業務パラメータID = 「CH_HONBUN_01」
					if (WK_PARA_ID_TEXT01.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_01, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_01, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_02」
					else if (WK_PARA_ID_TEXT02.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_02, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_02, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_03」
					else if (WK_PARA_ID_TEXT03.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_03, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_03, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_04」
					else if (WK_PARA_ID_TEXT04.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_04, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_04, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_05」
					else if (WK_PARA_ID_TEXT05.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_05, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_05, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_06」
					else if (WK_PARA_ID_TEXT06.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_06, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_06, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_07」
					else if (WK_PARA_ID_TEXT07.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_07, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_07, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_08」
					else if (WK_PARA_ID_TEXT08.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_08, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_08, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_09」
					else if (WK_PARA_ID_TEXT09.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_09, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_09, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
					// 業務パラメータID = 「CH_HONBUN_10」
					else if (WK_PARA_ID_TEXT10.equals(childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID)))
					{
						// 請求書（宛名）.業務パラメータ設定値 ← 業務パラメータ管理一覧照会明細.業務パラメータ設定値
						if (childTemplate.isNull(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_10, new String());
						} 
						else
						{
							dataMap.put(JCHSksAtenaConstCC.EZM0321B010_WORK_PARAM_SETTE_VALUE_10, childTemplate.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
						}
					}
				}
			}
		}

		// エラー情報の設定
		editErrorInfo(param, templates, (Integer)return_code);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		// 例外通知
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status)))
		{
			throw new Exception();
		}

		return param;
	}
	
	/**
	 * 請求契約一意照会サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfoEZM0321B010(IRequestParameterReadWrite param
			, CAANMsg[] templates, int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(EZM0321B010CBSMsg.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);
		}

		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(MAP_ID);

		// 業務パラメータ管理一覧照会マップ.ＫＥＹ＿業務パラメータID → ＫＥＹ＿業務パラメータID のエラー情報返却
		if (!template.isNull(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR))
		{
			if (!inMap.containsKey(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR))
			{
				inMap.put(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR, template.getString(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR));
			}
		}
		// 業務パラメータ管理一覧照会マップ.ＫＥＹ＿業務パラメータ適用年月日 → ＫＥＹ＿業務パラメータ適用年月日 のエラー情報返却
		if (!template.isNull(EZM0321B010CBSMsg.KEY_WORK_PARAM_APLY_YMD_ERR))
		{
			if (!inMap.containsKey(EZM0321B010CBSMsg.KEY_WORK_PARAM_APLY_YMD_ERR))
			{
				inMap.put(EZM0321B010CBSMsg.KEY_WORK_PARAM_APLY_YMD_ERR, template.getString(EZM0321B010CBSMsg.KEY_WORK_PARAM_APLY_YMD_ERR));
			}
		}

		return param;
	}
}