/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCHTushinSvcSeikyBnktChohyoCC
*   ソースファイル名：JCHTushinSvcSeikyBnktChohyoCC.java
*   作成者          ：富士通
*   日付            ：2012年09月21日
*＜機能概要＞
*   通信サービス料金分割帳票CC部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/09/21	富士通		新規作成
*	v5.00.00	2013/07/03  FJ) 林	   【LT-2013-0000205】 送付先住所を住所編集部品にて編集する対応
*	v5.01.00	2013/07/24  FJ) 早崎   【LT-2013-0000588】 窓口請求書発行時のコンビニ支払期限編集追加
*	v5.02.00	2013/10/02  FJ) 垣内   【OM-2013-0002870】 OCR番号のバージョン情報を固定値で設定
*	v5.02.01	2013/11/21	FJ) 北端   【OM-2013-0004389】 収入印紙貼付欄マスク化有無の判定金額閾値を業務パラメータの「印紙税対象金額」から取得。
*	v8.00.00	2014/01/20	FJ) 北端   【ANK-1589-00-00】消費税に伴う料金施策（増税対応）
*	v9.00.00	2014/04/21  FJ) 林	   【OM-2014-0001510】EANバーコード印紙フラグ設定不備対応
*	v9.00.01	2014/06/04	FJ) 鈴木   【OM-2014-0001921】住所欄のフォントサイズ不正対応
*	v12.00.00	2014/12/08	FJ) 桑島   【IT1-2014-0000385】帳票出力対応（EANバーコード100万対応）
*	v52.00.00	2020/11/06	FJ) 三原	【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
*   v54.00.00   2021/09/01  FJ) 西窪   【ANK-4102-00-00】窓口払い手数料の顧客負担方式導入 STEP3
*	v54.00.01	2021/09/16	FJ) 西窪	【IT2-2021-0000029】EANバーコード設定値修正
*	v56.00.00	2021/11/26	FJ) 吉田	【ANK-4131-00-00】窓口払い手数料の顧客負担方式導入 STEP4
*	v57.00.00	2022/02/25  FJ）西窪	【ANK-4206-00-00】請求書再発行時の発行回数改善対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JCHTushinSvcBnktConstCC;
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.JCHCommonBarcodeEdit;
import eo.common.util.JCHCommonFormatUtil;
import eo.common.util.JCHStampDutyUtil;
import eo.common.util.JCRUtilCommon;
import eo.common.util.JKKStringConverter;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECC0041A110CBSMsg;
import eo.ejb.cbs.cbsmsg.ECC0041A110CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECH0941A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0941A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;

/**
 * 請求書分割発行サービスより呼び出される通信サービス料金分割帳票CC部品です。<p>
 * <BR>
 * @author 富士通
 */
public class JCHTushinSvcBnktChohyoCC extends AbstractCommonComponent
{
	/** マップID */
	private static final String MAP_ID = "TUSHINSVCPRCBNKTCHOHYOCC";

	/** 日付区分（年） */
	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 AMNT_HENSHU_KETA_MAX = 14;

	/** 帳票出力＿お客様名文字数 */
	private static final int CHOHYO_OUT_NAME_LENGTH = 15;

	// ANK-4131-00-00 ADD START
	/** 帳票出力＿金融機関名文字数 */
	private static final int CHOHYO_OUT_BANK_NM_LENGTH = 15;
	
	/** 帳票出力＿金融機関支店名文字数 */
	private static final int CHOHYO_OUT_BANK_SHITEN_NM_LENGTH = 15;
	// ANK-4131-00-00 ADD END

	/** テンプレートID(業務パラメータ取得) */
	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";

	/** テンプレートID(帳票生成) */
	private static final String TEMPLATE_ID_ECC0041A110 = "ECC0041A110";

	// ANK-4131-00-00 ADD START
	/** テンプレートID(パーフェクト口座一意照会) */
	private static final String TEMPLATE_ID_ECH0941A010 = "ECH0941A010";
	// ANK-4131-00-00 ADD END

	/**
	 * 曜日コード（1:日〜7:土）
	 */
	private static final String DAY1_CODE = "1";
	private static final String DAY2_CODE = "2";
	private static final String DAY3_CODE = "3";
	private static final String DAY4_CODE = "4";
	private static final String DAY5_CODE = "5";
	private static final String DAY6_CODE = "6";
	private static final String DAY7_CODE = "7";

	/**
	 * 曜日名称（1:日〜7:土）
	 */
	private static final String DAY1_NM = "日";
	private static final String DAY2_NM = "月";
	private static final String DAY3_NM = "火";
	private static final String DAY4_NM = "水";
	private static final String DAY5_NM = "木";
	private static final String DAY6_NM = "金";
	private static final String DAY7_NM = "土";

	/** 固定値"0" */
	private static final String ZERO = "0";

	// ANK-3838-00-00 DEL START
//	/** 日付(20991231) */
//	private static final String CONTENT_YMD = "20991231";
//	
//	/** ハイフン(--) */
//	private static final String HYPHEN = "--";
	// ANK-3838-00-00 DEL END
	
	// ANK-3838-00-00 MOD START
	///** 帳票定義NO（請求書(窓口)） */
	//private static final String CHOHYO_MADO_NO = "PCHZ00000000001"; 
	/** 帳票定義NO（窓口／コンビニ)） */
	private static final String CHOHYO_MADO_NO = "PCHZ00000000007";
	// ANK-3838-00-00 MOD END
	// ANK-4131-00-00 ADD START
	/** 帳票定義NO（請求書(窓口/コンビニ・パーフェクト)） */
	private static final String CHOHYO_MADO_CONV_PERF_NO = "PCHZ00000000008"; 
	// ANK-4131-00-00 ADD END

	/** 改行文字 */
	private static final String LINE_SEP = "line.separator";
	/**  カンマ区切り */
	public static final String CSV = ",";
	/** エスケープ文字 (")  */
	private static final String SINGLE_DBLQUOTE = "\"";
	/** 改行コード */
	public static final String KAIGYO_CD = "\r\n";

	/** 
	 * 年月日書式(yyyyMMdd)の桁数 
	 */
	private static final int YMD = 8;

	/** 
	 * 日時書式(yyyyMMddHHmmss)の桁数 
	 */
	private static final int YMDHMS = 14;

	/** 収入印紙貼付欄マスク化 */
	private static final String SN_INS_HRTK_MASK_AST = "*******";

	/** 住所分割文字数(通常) */
	private int ADDRESS_NORMAL_LINE_LENGTH = 24;

	/** 住所分割文字数(小さいサイズ) */
	private int ADDRESS_SMALL_LINE_LENGTH = 31;

	/** 住所分割数 */
	private int ADDRESS_SPLIT_COUNT = 4;

// 2014.06.04 OM-2014-0001921 add start
	/** 送付先住所の編集部品の結果 を格納する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";
// 2014.06.04 OM-2014-0001921 add end
	// ANK-4131-00-00 ADD START
	/** 支払用紙 コンビニ */
	private static final String PAY_YOSHI_CONV = "0";
	
	/** 支払用紙 コンビニ＋パーフェクト */
	private static final String PAY_YOSHI_CONV_PERF = "1";
	// ANK-4131-00-00 ADD END
	// IT2-2021-0000029 DEL START
//	// ANK-4102-00-00 ADD START
//	/**
//	 * 請求書分割発行確認画面の画面ID
//	 */
//	public static final String SCREEN_ID_CHW02202 = "CHW02202";
//	// ANK-4102-00-00 ADD END
	// IT2-2021-0000029 DEL END

	/**
	 * 通信サービス料金帳票出力
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite outputTushinSvcPrcBnktChohyo(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(JCHTushinSvcBnktConstCC.FUNC_CD);

		// 機能コードが"0"の場合、処理せずに終了
		if("0".equals(funcCd))
		{
			return param;
		}

		// ANK-4131-00-00 ADD START
		// 支払用紙 ← 通信サービス料金帳票マップ．帳票出力依頼リスト．支払用紙
		String payYoshi = (String)inMap.get("pay_yoshi");
		// ANK-4131-00-00 ADD END
		IRequestParameterReadWrite rtnParam = null;

		// 業務パラメータ管理
		getInfoTushinSvcPrcBnkt(handle, param, fixedText, inMap);

		// CSV編集処理
		// ANK-4131-00-00 ADD START
		// 支払用紙がコンビニの場合
		if (PAY_YOSHI_CONV.equals(payYoshi))
		{
			// ANK-4131-00-00 ADD END
			// ANK-3838-00-00 MOD START
			//byte[] csvData = makeCSVDataTushinSvcBnkt(param);
			byte[] csvData = makeCSVDataUsePrcSeikyshoMadoCnvBnkt(param);
			// ANK-3838-00-00 MOD END
	
			// 帳票生成処理
			rtnParam = createList(handle, param, csvData, funcCd, CHOHYO_MADO_NO);
			// ANK-4131-00-00 ADD START
		}
		// 支払用紙がコンビニ＋パーフェクトの場合
		else if (PAY_YOSHI_CONV_PERF.equals(payYoshi))
		{
			// 請求書(窓口／コンビニ・パーフェクト)情報取得処理
			getInfoSeikyshoMadoConvPerf(handle, param, fixedText, inMap);
			
			// CSV編集処理
			byte[] csvData = makeCSVDataUsePrcSeikyshoMadoConvPerfBnkt(param);
			
			// 帳票生成処理
			rtnParam = createList(handle, param, csvData, funcCd, CHOHYO_MADO_CONV_PERF_NO);
		}
		// ANK-4131-00-00 ADD END

		return rtnParam;
	}

	// ▼▼ 通信サービス料金分割情報出力関連処理 ▼▼
	
	/**
	 * 通信サービス料金分割帳票マップに指定されたキー情報を基に
	 * 【通信サービス料金請求書】情報を取得します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @return リクエストパラメータ
	 * @throws Exception 例外が発生した場合
	 */
	public IRequestParameterReadWrite getInfoTushinSvcPrcBnkt(SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText, HashMap<String, Object> chohyoReqMap) throws Exception
	{
		/* ◇業務パラメータ管理一意照会サービスインターフェイス */
		execEZM0321A010(handle, param, chohyoReqMap);

		return param;
	}

	// ▲▲ 通信サービス料金分割情報出力関連処理 ▲▲
	
	// ▼▼ サービスIF呼び出し ▼▼
	
	/**
	 * 業務パラメータ管理一意照会サービスインタフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @throws Exception 例外が発生した場合
	 */
	private void execEZM0321A010(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> templateEZM0321A010 = editInMsgEZM0321A010(param, chohyoReqMap);
		for (CAANMsg msg : templateEZM0321A010)
		{
			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);

		// 下りマッピング
		editOutMsgEZM0321A010(result, param);
	}
	
	// ANK-4131-00-00 ADD START
	/**
	 * パーフェクト口座一意照会サービスインタフェイスを実行します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @param isUcwkListPrint 内訳書を出力するかを判定するフラグ
	 * @throws Exception 例外が発生した場合
	 */
	private void execECH0941A010(SessionHandle handle, IRequestParameterReadWrite param,
			HashMap<String, Object> chohyoReqMap, boolean isUcwkListPrint) throws Exception
	{
		/* ◇パラメータマップ生成 */
		HashMap<String, Object> paramMap = this.createNewParamMap(param);
		
		/* ◇テンプレートリスト生成 */
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();
		
		// 上りマッピング
		ArrayList<CAANMsg> templateECH0941A010 = editInMsgECH0941A010(param, chohyoReqMap);
		for (CAANMsg msg : templateECH0941A010)
		{
			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);
		
		// 下りマッピング
		editOutMsgECH0941A010(result, param);
	}
	// ANK-4131-00-00 ADD END
	
	// ▲▲ サービスIF呼び出し ▲▲

	// ▼▼ サービスIF用メッセージ設定処理 ▼▼

	/**
	 * 業務パラメータ管理一意照会サービスインターフェイス用メッセージ設定処理<br>
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @param wkpara 業務パラメータ識別
	 * @return ArrayList<CAANMsg>
	 * @throws RequestParameterException
	 */
	private ArrayList<CAANMsg> editInMsgEZM0321A010(IRequestParameterReadWrite param,
				HashMap<String, Object> chohyoReqMap) throws RequestParameterException
	{
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();

		/* ◇ユーザデータ情報 */
		CAANMsg template = new CAANMsg(EZM0321A010CBSMsg.class.getName());
		this.setTemplateCommonItem(param, template, 
				EZM0321A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0321A010, EZM0321A010CBSMsg.FUNC_CODE);

		/* ◇業務データの設定 */
		// 機能コード
		template.set(EZM0321A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		if (chohyoReqMap == null)
		{
			template.setNull(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID);
		}
		else
		{
			template.set(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, JACStrConst.WKPARA_CH_INSHI_TAX_TG_AMNT);
		}
		templateList.add(template);

		return templateList;
	}
	
	// ANK-4131-00-00 ADD START
	/**
	 * パーフェクト口座一意照会サービスインターフェイス用メッセージ設定処理<br>
	 * @param param リクエストパラメータ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @return ArrayList<CAANMsg>
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<CAANMsg> editInMsgECH0941A010(IRequestParameterReadWrite param, HashMap<String, Object> chohyoReqMap) throws RequestParameterException
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(MAP_ID);
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();
		
		/* ◇ユーザデータ情報 */
		CAANMsg template = new CAANMsg(ECH0941A010CBSMsg.class.getName());
		this.setTemplateCommonItem(param, template, 
				ECH0941A010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECH0941A010, ECH0941A010CBSMsg.FUNC_CODE);
		
		/* ◇業務データの設定 */
		// 機能コード
		template.set(ECH0941A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
		
		String seikyKeiNo = "";
		if (chohyoReqMap != null)
		{
			// 帳票出力依頼リストマップ.ＫＥＹ＿請求番号 → パーフェクト口座一意照会マップ.ＫＥＹ＿請求契約番号
			seikyKeiNo = (String)chohyoReqMap.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO);
			if (seikyKeiNo == null || JACStrConst.KARA_MOJI.equals(seikyKeiNo))
			{
				template.setNull(ECH0941A010CBSMsg.KEY_SEIKY_KEI_NO);
			} 
			else
			{
				template.set(ECH0941A010CBSMsg.KEY_SEIKY_KEI_NO, seikyKeiNo);
			}
		}
		
		templateList.add(template);
		
		return templateList;
	}
	// ANK-4131-00-00 ADD END

	// ▼▼ サービスIF用メッセージ取得処理 ▼▼

	/**
	 * 業務パラメータ管理一意照会サービスインターフェイス用メッセージ取得処理<br>
	 * 
	 * @param msgList メッセージリスト
	 * @param param リクエストパラメータ
	 * @param wkpara 業務パラメータ識別
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgEZM0321A010(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(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
		if (templateArray != null)
		{
			for (int i = 0; i < templateArray.length; i++)
			{
				CAANMsg childTemplate = templateArray[i];

				// 帳票出力マップ.印紙税対象金額 ← 業務パラメータ管理一意照会明細.業務パラメータ設定値
				if (childTemplate.isNull(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE))
				{
					dataMap.put(JCHTushinSvcBnktConstCC.INSHI_TAX_TG_AMNT, new String());
				}
				else
				{
					dataMap.put(JCHTushinSvcBnktConstCC.INSHI_TAX_TG_AMNT, childTemplate.getString(EZM0321A010CBSMsg1List.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;
	}

	// ANK-4131-00-00 ADD START
	/**
	 * パーフェクト口座一意照会サービスインターフェイス用メッセージ取得処理<br>
	 * 
	 * @param msgList メッセージリスト
	 * @param param リクエストパラメータ
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgECH0941A010(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);
		}
		
		ArrayList dataList = null;
		
		if (parentTemplate != null)
		{
			templateArray = parentTemplate.getCAANMsgList(ECH0941A010CBSMsg.ECH0941A010CBSMSG1LIST);
		}
		
		dataList = (ArrayList)dataMap.get("ECH0941A010CBSMsg1List");

		if (dataList == null)
		{
			dataList = new ArrayList();
		}
		
		if (templateArray != null)
		{
			int uwSize = templateArray.length;
			
			for (int i = 0; i < uwSize; i++) 
			{
				CAANMsg childTemplate = templateArray[i];
				if (i >= dataList.size()) 
				{
					dataList.add(new HashMap());
				}
				
				HashMap<String, Object> childMap = (HashMap)dataList.get(i);
				
				// 通信サービス料金マップ.パーフェクト口座一意照会明細.請求契約番号 ← パーフェクト口座一意照会明細.請求契約番号
				if (childTemplate.isNull(ECH0941A010CBSMsg1List.SEIKY_KEI_NO)) 
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_SEIKY_KEI_NO, new String());
				}
				else
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_SEIKY_KEI_NO, childTemplate.getString(ECH0941A010CBSMsg1List.SEIKY_KEI_NO));
				}
				
				// 通信サービス料金マップ.パーフェクト口座一意照会明細.パーフェクト口座番号 ← パーフェクト口座一意照会明細.パーフェクト口座番号
				if (childTemplate.isNull(ECH0941A010CBSMsg1List.PKOZA_NO)) 
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_NO, new String());
				}
				else
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_NO, childTemplate.getString(ECH0941A010CBSMsg1List.PKOZA_NO));
				}
				
				// 通信サービス料金マップ.パーフェクト口座一意照会明細.パーフェクト口座利用有無 ← パーフェクト口座一意照会明細.パーフェクト口座利用有無
				if (childTemplate.isNull(ECH0941A010CBSMsg1List.PKOZA_USE_UM)) 
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_USE_UM, new String());
				}
				else
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_USE_UM, childTemplate.getString(ECH0941A010CBSMsg1List.PKOZA_USE_UM));
				}
				
				// 通信サービス料金マップ.パーフェクト口座一意照会明細.パーフェクト口座金融機関名 ← パーフェクト口座一意照会明細.パーフェクト口座金融機関名
				if (childTemplate.isNull(ECH0941A010CBSMsg1List.PKOZA_BANK_NM)) 
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_BANK_NM, new String());
				}
				else
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_BANK_NM, childTemplate.getString(ECH0941A010CBSMsg1List.PKOZA_BANK_NM));
				}
				
				// 通信サービス料金マップ.パーフェクト口座一意照会明細.パーフェクト口座支店名 ← パーフェクト口座一意照会明細.パーフェクト口座支店名
				if (childTemplate.isNull(ECH0941A010CBSMsg1List.PKOZA_SHITEN_NM)) 
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_SHITEN_NM, new String());
				}
				else
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_SHITEN_NM, childTemplate.getString(ECH0941A010CBSMsg1List.PKOZA_SHITEN_NM));
				}
			}
		}
		
		dataMap.put("ECH0941A010CBSMsg1List", dataList);
		
		// エラー情報の設定
		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;
	}
	// ANK-4131-00-00 ADD END
	// ▲▲ サービスIF用メッセージ取得処理 ▲▲

	/**
	 * テンプレートの共通項目を設定します。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param template テンプレート
	 * @param templateIdKey テンプレートIDキー名
	 * @param templateIdVal テンプレートID値
	 * @param templateFuncCdKey テンプレート機能コードキー名
	 * @return CAANMsg
	 * @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 handle
	 * @param param
	 * @param csvData
	 * @param funcCd
	 * @param chohyo_teigi_no
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite createList(SessionHandle handle, 
			IRequestParameterReadWrite param, byte[] csvData, String funcCd, String chohyo_teigi_no) 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(JCHTushinSvcBnktConstCC.ECC0041A110_USER_ID).toString();

		parentMapCC.put(JCHTushinSvcBnktConstCC.ECC0041A110_CHOHYO_TEIGI_NO, chohyo_teigi_no);
		parentMapCC.put(JCHTushinSvcBnktConstCC.ECC0041A110_DATA_FILE, (byte[])csvData);
		parentMapCC.put(JCHTushinSvcBnktConstCC.ECC0041A110_USER_ID, userId);
		// 帳票形成処理種別："1"（PDF形式）
		parentMapCC.put(JCHTushinSvcBnktConstCC.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(JCHTushinSvcBnktConstCC.ECC0041A110_CHOHYO_TEIGI_NO))) 
		{
			template.setNull(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.CHOHYO_TEIGI_NO, inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_CHOHYO_TEIGI_NO));
		}
		
		// データファイルの電子ファイル管理番号
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_DATA_FILE_NO))) 
		{
			template.setNull(ECC0041A110CBSMsg.DATA_FILE_NO);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.DATA_FILE_NO, inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_DATA_FILE_NO));
		}
		
		// データファイル
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_DATA_FILE))) 
		{
			template.setNull(ECC0041A110CBSMsg.DATA_FILE);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.DATA_FILE, inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_DATA_FILE));
		}

		// ユーザーID
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_USER_ID))) 
		{
			template.setNull(ECC0041A110CBSMsg.USER_ID);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.USER_ID, inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_USER_ID));
		}
		
		// 処理種別
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_TRAN_SBT))) 
		{
			template.setNull(ECC0041A110CBSMsg.TRAN_SBT);
		}
		else
		{
			template.set(ECC0041A110CBSMsg.TRAN_SBT, inMap.get(JCHTushinSvcBnktConstCC.ECC0041A110_TRAN_SBT));
		}
		// 帳票出力環境識別コード
		if (JACStrConst.KARA_MOJI.equals(inMap.get(JCHTushinSvcBnktConstCC.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(JCHTushinSvcBnktConstCC.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(JCHTushinSvcBnktConstCC.ECC0041A110_TOTAL_SEARCH_NUM, parentTemplate.getString("total_search_num"));
		dataMap.put(JCHTushinSvcBnktConstCC.ECC0041A110_TOTAL_PAGE_NUM, parentTemplate.getString("total_page_num"));
		dataMap.put(JCHTushinSvcBnktConstCC.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();
		}

		if (templateArray != null) 
		{
			for(int i = 0; i < templateArray.length; i++) 
			{
				CAANMsg childTemplate = templateArray[i];
				if(i >= dataList.size())
				{
					dataList.add(new HashMap<String, Object>());
				}
				HashMap<String, Object> childMap = (HashMap<String, Object>)dataList.get(i);

				if (childTemplate.isNull(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO)) 
				{
					childMap.put(JCHTushinSvcBnktConstCC.ECC0041A110_OUTPUT_CHOHYO, new byte[0]);
				} 
				else
				{
					//childMap.put("output_chohyo", (byte[])childTemplate.getObject(ECC0041A110CBSMsg1List.OUTPUT_CHOHYO));
					// byte配列の場合は添付ファイルエリアに格納する
					HashMap<Object, Object> map = new HashMap<Object, Object>();
					ArrayList<HashMap> list = new  ArrayList<HashMap>();
					map.put(AttachmentFileMapKeys.IDENTIFY_CD, MAP_ID);
					map.put(AttachmentFileMapKeys.LIST_NAME, "ECC0041A110CBSMsg1List");
					map.put(AttachmentFileMapKeys.ITEM_NAME, JCHTushinSvcBnktConstCC.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;
	}
	// ▲▲ 帳票処理 ▲▲
	// ANK-4131-00-00 ADD START
	/**
	 * 通信サービス料金帳票マップに指定されたキー情報を基に
	 * 請求書(窓口／コンビニ・パーフェクト)情報を取得します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param chohyoReqMap 帳票出力依頼リストマップ
	 * @return リクエストパラメータ
	 * @throws Exception 例外が発生した場合
	 */
	public IRequestParameterReadWrite getInfoSeikyshoMadoConvPerf(SessionHandle handle, IRequestParameterReadWrite param,
			String fixedText, HashMap<String, Object> chohyoReqMap) throws Exception
	{
		
		execECH0941A010(handle, param, chohyoReqMap, false);
		
		return param;
	}
	// ANK-4131-00-00 ADD END

	// ▼▼ エラー情報マッピング処理 ▼▼

	/**
	 * サービス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_EZM0321A010.equals(templateId))
			{
				// 帳票生成
				editErrorInfoEZM0321A010(param, workTemplates, returnCode);
			}
			else if (TEMPLATE_ID_ECC0041A110.equals(templateId))
			{
				// 帳票生成
				editErrorInfoECC0041A110(param, workTemplates, returnCode);
			}
			// ANK-4131-00-00 ADD START
			else if (TEMPLATE_ID_ECH0941A010.equals(templateId))
			{
				// 帳票生成
				editErrorInfoECH0941A010(param, workTemplates, returnCode);
			}
			// ANK-4131-00-00 ADD END
		}

		return param;
	}

	/**
	 * 業務パラメータ管理一意照会サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param リクエストパラメータ
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfoEZM0321A010(IRequestParameterReadWrite param
			, CAANMsg[] templates, int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(EZM0321A010CBSMsg.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(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_ERR))
		{
			if (!inMap.containsKey("key_work_param_id_err"))
			{
				inMap.put("key_work_param_id_err", template.getString(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_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;
	}

	// ANK-4131-00-00 ADD START
	/**
	 * パーフェクト口座一意照会実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfoECH0941A010(IRequestParameterReadWrite param
			, CAANMsg[] templates, int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];
		
		int templateStatus = template.getInt(ECH0941A010CBSMsg.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(ECH0941A010CBSMsg.KEY_SEIKY_KEI_NO_ERR)) 
		{
			if (!inMap.containsKey(ECH0941A010CBSMsg.KEY_SEIKY_KEI_NO_ERR)) 
			{
				inMap.put(ECH0941A010CBSMsg.KEY_SEIKY_KEI_NO_ERR, template.getString(ECH0941A010CBSMsg.KEY_SEIKY_KEI_NO_ERR));
			}
		}
		
		return param;
	}
	// ANK-4131-00-00 ADD END
	// ▲▲ エラー情報マッピング処理 ▲▲

	// ANK-3838-00-00 DEL START
//	/**
//	 * 通信サービス料金請求書情報をCSV形式のバイナリデータに変換する。
//	 * @param param
//	 * @return byte[]
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private byte[] makeCSVDataTushinSvcBnkt(IRequestParameterReadWrite param) throws Exception
//	{
//		HashMap<String, Object> parentMapCC = null;
//		parentMapCC = (HashMap<String, Object>)param.getData(MAP_ID);
//
//		ArrayList childList = (ArrayList)parentMapCC.get("seikyUwList");
//		ArrayList seikyKeiykList = (ArrayList)parentMapCC.get("seikyKeiykList");
//		HashMap<String, Object> seikyKeiykMap = (HashMap<String, Object>)seikyKeiykList.get(0);
//		StringBuffer sb = new StringBuffer();
//
//// 2014.06.04 OM-2014-0001921 add start
//		// 通常文字サイズ か 小さい文字サイズ かのフラグ
//		HashMap<String, String> editFlgMap = new HashMap<String, String>();
////2014.06.04 OM-2014-0001921 add end
//
//		// フォーマット編集
//		// 送付先
//// 2014.06.04 OM-2014-0001921 mod start
////		ArrayList<String> addressList = editSohusaki(seikyKeiykMap);
//		ArrayList<String> addressList = editSohusaki(seikyKeiykMap, editFlgMap);
//// 2014.06.04 OM-2014-0001921 mod end
//
//// 2014.06.04 OM-2014-0001921 add start
//		// 住所リストから更新用住所配列を取得
//		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);
////2014.06.04 OM-2014-0001921 add end
//
//		// 送付先名・部課名・担当者名
//		ArrayList<String> sohusNmList = editSohusakiName(seikyKeiykMap);
//
//		// カスタマーバーコード
//		String customerBarCd = editCustomerBarCd(seikyKeiykMap);
//
//		// 発行番号
//		String hakkoNum = editHakkoNo(parentMapCC);
//
//		// 発行日
//		String hakkoYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.HAKKOU_YMD)).trim();
//		String hakkoYear = editYmd(hakkoYmd, DATE_KBN_YEAR);
//		String hakkoMonth = editYmd(hakkoYmd, DATE_KBN_MON);
//		String hakkoDay = editYmd(hakkoYmd, DATE_KBN_DAY);
//
//		// ご請求年月
//		String seikyYm = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_YM)).trim();
//		String seikyYear = editYmd(seikyYm, DATE_KBN_YEAR);
//		String seikyMonth = editYmd(seikyYm, DATE_KBN_MON);
//		
//		// 支払期限日
//		String payYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.KIGEN_PAY_YMD)).trim();
//		String payYear = editYmd(payYmd, DATE_KBN_YEAR);
//		String payMonth = editYmd(payYmd, DATE_KBN_MON);
//		String payDay = editYmd(payYmd, DATE_KBN_DAY);
//		String strWeek = this.getDayOfWeek(payYmd);
//
//		// EAN取扱期限年月日
//		String eanYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.KIGEN_YMD)).trim();
//		String eanMonth = editZeroSpace(editYmd(eanYmd, DATE_KBN_MON));
//		String eanDay = editZeroSpace(editYmd(eanYmd, DATE_KBN_DAY));
//		
//		// EAN取扱期限年月日が"20991231"の場合
//		if(CONTENT_YMD.equals(eanYmd))
//		{
//			// 月日共にハイフン(--)を設定する
//			eanMonth = HYPHEN;
//			eanDay = HYPHEN;
//		}
//		
//		String ocrAmnt = "0" ;
//		
//		if((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM) != null && 
//				!JACStrConst.KARA_MOJI.equals((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM)))
//		{
//			ocrAmnt = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM);
//		}
//		Long amnt = new Long(ocrAmnt);
//
//		// お客様番号(請求先番号)
//		String seikyKeiNo = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO);
//		// 運用日
//		String opeDate = com.fujitsu.futurity.bp.custom.common.JCCBPCommon.getOpeDate(JACStrConst.SYS_CD_CH);
//		// バーコード様式コード
//		String barcodeSbt = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.BARCODE_CD_SELECT);
//
//		JCHCommonFormatUtil chComFmtUtil = new JCHCommonFormatUtil();
//
//		// OCRバーコード情報
//		ArrayList<String> ocrInfoList = chComFmtUtil.getOcrInf(seikyYm, seikyKeiNo, JCHTushinSvcBnktConstCC.HAKKO_SEQ, amnt, opeDate);
//		String ocrNo = JCHCommonFormatUtil.listToString(ocrInfoList);
//
//		// OCR番号
//		String strOcr = ocrNo.substring(0, 32);
//
//		// お知らせ
//		ArrayList<String> infoList = editInformation(seikyKeiykMap);
//		
//		// 手数料負担方式コード
//		String commisionFtnHskCd = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.COMMISION_FTN_HSK_CD);
//		
//		// EANバーコード情報
//		ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(JCHTushinSvcBnktConstCC.HAKKO_SEQ), barcodeSbt, eanYmd, JACStrConst.KARA_MOJI, amnt, opeDate);
//		
//		//IT1-2014-0000385　ADD　START
//		// EANバーコード情報　金額が100万以上の場合、EANバーコードを出力しない為、EANバーコードに空文字を設定する。
//		
//		// EANバーコード
//		String eanBarcode = JCHCommonFormatUtil.listToString(eanInfoList);
//		
//		if(eanBarcode == null)
//		{
//			eanBarcode = JACStrConst.KARA_MOJI;
//		}
//		else
//		{
//			eanBarcode = eanBarcode.trim();
//		}
//		
//		if(JACStrConst.EAN_SKBTS_XX.equals(eanBarcode))
//		{
//			eanBarcode = JACStrConst.KARA_MOJI;
//		}
//		
//		//IT1-2014-0000385　ADD　END
//
//		// 印紙税対象額を「発行日」を基準日として取得する
//		long inshiTaxTgAmnt = Long.valueOf(JCHStampDutyUtil.getTaxableAmount(JACStrConst.CALLER_SCREEN, null, hakkoYmd));
//
//		// 収入印紙貼付欄マスク
//		String shInsHrtkMask  = JACStrConst.KARA_MOJI;
//		
//		int seikyAmnt = Integer.parseInt((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM));
//		if(seikyAmnt < inshiTaxTgAmnt)
//		{
//			// 印紙税対象ではない
//			shInsHrtkMask = SN_INS_HRTK_MASK_AST;
//		}
//		
//		// 明細行形成
//		for(int i = 0; i < childList.size(); i++) 
//		{
//			HashMap<String, Object> msg = (HashMap<String, Object>)childList.get(i);
//
//			// 金額
//			String strAmnt = new String();
//			// 金額内訳
//			String strUwAmnt = new String();
//
//			strAmnt = (String)msg.get(JCHTushinSvcBnktConstCC.AMNT);
//			strAmnt = editAmnt(strAmnt);
//			strUwAmnt = (String)msg.get(JCHTushinSvcBnktConstCC.UW_AMNT);
//			strUwAmnt = editAmnt(strUwAmnt);
//
//			sb.append(getStringToDblQuote((String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_PCD)))					// 郵便番号
//// 2014.06.04 OM-2014-0001921 mod start
////			.append(CSV + getStringToDblQuote((String)addressList.get(0)))				// 送付住所1
////			.append(CSV + getStringToDblQuote((String)addressList.get(1)))				// 送付住所2
////			.append(CSV + getStringToDblQuote((String)addressList.get(2)))				// 送付住所3
////			.append(CSV + getStringToDblQuote((String)addressList.get(3)))				// 送付住所4
//			.append(CSV + getStringToDblQuote(strAddress1[0]))		// 送付住所1
//			.append(CSV + getStringToDblQuote(strAddress2[0]))		// 送付住所2
//			.append(CSV + getStringToDblQuote(strAddress3[0]))		// 送付住所3
//			.append(CSV + getStringToDblQuote(strAddress4[0]))		// 送付住所4
//// 2014.06.04 OM-2014-0001921 mod end
//			.append(CSV + getStringToDblQuote((String)sohusNmList.get(0)))				// 送付先名
//			.append(CSV + getStringToDblQuote((String)sohusNmList.get(1)))				// 送付先部署名
//			.append(CSV + getStringToDblQuote((String)sohusNmList.get(2)))				// 送付先担当者名
//
//			.append(CSV + getStringToDblQuote(customerBarCd))	// カスタマーバーコード
//			.append(CSV + getStringToDblQuote(hakkoNum))		// 発行番号
//			.append(CSV + getStringToDblQuote(""))				// 請求書印刷番号１
//			.append(CSV + getStringToDblQuote(""))				// 請求書印刷番号２
//
//			.append(CSV + getStringToDblQuote(hakkoYear))		// 発行年月日（年）
//			.append(CSV + getStringToDblQuote(hakkoMonth))		// 発行年月日（月）
//			.append(CSV + getStringToDblQuote(hakkoDay))		// 発行年月日（日）
//			.append(CSV + getStringToDblQuote(seikyYear))		// 請求月（年）
//			.append(CSV + getStringToDblQuote(seikyMonth))		// 請求月（月）
//			
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM)))				// 請求額
//			.append(CSV + getStringToDblQuote("*********"))		// うち消費税
//			.append(CSV + getStringToDblQuote(payYear))			// 支払期限日（年）
//			.append(CSV + getStringToDblQuote(payMonth))		// 支払期限日（月）
//			.append(CSV + getStringToDblQuote(payDay))			// 支払期限日（日）
//			.append(CSV + getStringToDblQuote(strWeek))			// 支払期限日（曜日）
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO)))			// お客様番号
//
//			.append(CSV + getStringToDblQuote((String)infoList.get(0)))				// お知らせ１
//			.append(CSV + getStringToDblQuote((String)infoList.get(1)))				// お知らせ２
//			.append(CSV + getStringToDblQuote((String)infoList.get(2)))				// お知らせ３
//			.append(CSV + getStringToDblQuote((String)infoList.get(3)))				// お知らせ４
//			.append(CSV + getStringToDblQuote((String)infoList.get(4)))				// お知らせ５
//			.append(CSV + getStringToDblQuote((String)infoList.get(5)))				// お知らせ６
//			.append(CSV + getStringToDblQuote((String)infoList.get(6)))				// お知らせ７
//			.append(CSV + getStringToDblQuote((String)infoList.get(7)))				// お知らせ８
//
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_1)))				// お問合せ先１
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_2)))				// お問合せ先２
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_3)))				// お問合せ先３
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_4)))				// お問合せ先４
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_5)))				// お問合せ先５
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_6)))				// お問合せ先６
//
//			.append(CSV + getStringToDblQuote((String)msg.get(JCHTushinSvcBnktConstCC.PRC_UCWK)))							// 料金内訳
//			.append(CSV + getStringToDblQuote(strAmnt))			// 金額
//			.append(CSV + getStringToDblQuote(strUwAmnt))		// 金額内訳
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM)))					// 金額合計
//			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.UW_AMNT_SUM)))				// 金額内訳合計
//			.append(CSV + getStringToDblQuote(JACStrConst.OCR_VER_INFO))		// バージョン番号
//			.append(CSV + getStringToDblQuote(strOcr))			// OCR
//
//			.append(CSV + getStringToDblQuote(payYear))			// 支払期限日（年）
//			.append(CSV + getStringToDblQuote(payMonth))		// 支払期限日（月）
//			.append(CSV + getStringToDblQuote(payDay))			// 支払期限日（日）
//			
//			//IT1-2014-0000385　ADD　START
//			//.append(CSV + getStringToDblQuote(JCHCommonFormatUtil.listToString(eanInfoList)))		// EANバーコード
//			.append(CSV + getStringToDblQuote(eanBarcode))		// EANバーコード
//			//IT1-2014-0000385　ADD　END
//
//			.append(CSV + getStringToDblQuote(eanMonth))		// コンビニ支払期限月
//			.append(CSV + getStringToDblQuote(eanDay))			// コンビニ支払期限日
//
//			.append(CSV + getStringToDblQuote(shInsHrtkMask))	// 収入印紙貼付欄マスク
//
//// 2014.06.04 OM-2014-0001921 add start
//			.append(CSV + getStringToDblQuote(strAddress1[1]))			// 送付住所1-2
//			.append(CSV + getStringToDblQuote(strAddress2[1]))			// 送付住所2-2
//			.append(CSV + getStringToDblQuote(strAddress3[1]))			// 送付住所3-2
//			.append(CSV + getStringToDblQuote(strAddress4[1]))			// 送付住所4-2
//// 2014.06.04 OM-2014-0001921 add end
//
//			.append(System.getProperty(LINE_SEP));
//		}
//		return sb.toString().getBytes("UTF-8");
//	}
	// ANK-3838-00-00 DEL END

	// ANK-3838-00-00 ADD START
	/**
	 * ご利用料金請求書(窓口／コンビニ)情報をCSV形式のバイナリデータに変換する。
	 * @param param
	 * @return byte[]
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private byte[] makeCSVDataUsePrcSeikyshoMadoCnvBnkt(IRequestParameterReadWrite param) throws Exception
	{
		HashMap<String, Object> parentMapCC = null;
		parentMapCC = (HashMap<String, Object>)param.getData(MAP_ID);
		
		ArrayList childList = (ArrayList)parentMapCC.get("seikyUwList");
		ArrayList seikyKeiykList = (ArrayList)parentMapCC.get("seikyKeiykList");
		HashMap<String, Object> seikyKeiykMap = (HashMap<String, Object>)seikyKeiykList.get(0);
		StringBuffer sb = new StringBuffer();
		
		// 通常文字サイズ か 小さい文字サイズ かのフラグ
		HashMap<String, String> editFlgMap = new HashMap<String, String>();
		
		// フォーマット編集
		// 送付先
		ArrayList<String> addressList = editSohusaki(seikyKeiykMap, 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(seikyKeiykMap);
		
		// カスタマーバーコード
		String customerBarCd = editCustomerBarCd(seikyKeiykMap);
		
		// 発行日
		String hakkoYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.HAKKOU_YMD)).trim();
		String hakkoYear = editYmd(hakkoYmd, DATE_KBN_YEAR);
		String hakkoMonth = editYmd(hakkoYmd, DATE_KBN_MON);
		String hakkoDay = editYmd(hakkoYmd, DATE_KBN_DAY);
		
		// ご請求年月
		String seikyYm = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_YM)).trim();
		String seikyYear = editYmd(seikyYm, DATE_KBN_YEAR);
		String seikyMonth = editYmd(seikyYm, DATE_KBN_MON);
		
		// 請求書発行番号
		String seikyshoHakkoNo = seikyYm.substring(2,6) + "-" + (String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO);
		
		// 支払期限日
		String payYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.KIGEN_PAY_YMD)).trim();
		String payYear = editYmd(payYmd, DATE_KBN_YEAR);
		String payMonth = editYmd(payYmd, DATE_KBN_MON);
		String payDay = editYmd(payYmd, DATE_KBN_DAY);
		String strWeek = this.getDayOfWeek(payYmd);
		
		// EAN取扱期限年月日
		String eanYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.KIGEN_YMD)).trim();
		String eanMonth = editZeroSpace(editYmd(eanYmd, DATE_KBN_MON));
		String eanDay = editZeroSpace(editYmd(eanYmd, DATE_KBN_DAY));
		
		String ocrAmnt = "0" ;
		
		if((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM) != null && 
				!JACStrConst.KARA_MOJI.equals((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM)))
		{
			ocrAmnt = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM);
		}
		Long amnt = new Long(ocrAmnt);
		
		// お客様番号(請求先番号)
		String seikyKeiNo = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO);
		// 運用日
		String opeDate = com.fujitsu.futurity.bp.custom.common.JCCBPCommon.getOpeDate(JACStrConst.SYS_CD_CH);
		// バーコード様式コード
		String barcodeSbt = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.BARCODE_CD_SELECT);
		
		JCHCommonFormatUtil chComFmtUtil = new JCHCommonFormatUtil();
		
		// お知らせ
		ArrayList<String> infoList = editInformation(seikyKeiykMap);
		
		// 手数料負担方式コード
		String commisionFtnHskCd = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.COMMISION_FTN_HSK_CD);
		
		// IT2-2021-0000029 DEL START
//		// ANK-4102-00-00 ADD START
//		// EANバーコード情報取得にて呼び元画面IDでの判定を行うため共通メッセージに画面ＩＤを設定する。
//		HashMap<String, Object> commonMsg = new HashMap<String, Object>();
//		commonMsg.put(JCMConstants.INVOKE_GAMEN_ID_KEY, SCREEN_ID_CHW02202);
//		JCCWebAddTrnId.set(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP, commonMsg);
//		// ANK-4102-00-00 ADD END
		// IT2-2021-0000029 DEL END
		
		// ANK-4206-00-00 ADD START
		// 群番号
		String gunNo = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.GUN_NO);
		// ANK-4206-00-00 ADD END
		
		// EANバーコード情報
		// ANK-4206-00-00 MOD START
//		ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(JCHTushinSvcBnktConstCC.HAKKO_SEQ), barcodeSbt, eanYmd, JACStrConst.KARA_MOJI, amnt, opeDate, commisionFtnHskCd);
		ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(JCHTushinSvcBnktConstCC.HAKKO_SEQ), barcodeSbt, eanYmd, JACStrConst.KARA_MOJI, amnt, opeDate, commisionFtnHskCd, gunNo);
		// ANK-4206-00-00 MOD END
		// IT2-2021-0000029 DEL START
//		// ANK-4102-00-00 ADD START
//		JCCWebAddTrnId.remove(JCMConstants.ADD_TRN_ID_MESSAGE_COMMON_MAP);
//		// ANK-4102-00-00 ADD END
		// IT2-2021-0000029 DEL END
		
		// EANバーコード
		String eanBarcode = JCHCommonFormatUtil.listToString(eanInfoList);
		
		if(eanBarcode == null)
		{
			eanBarcode = JACStrConst.KARA_MOJI;
		}
		else
		{
			eanBarcode = eanBarcode.trim();
		}
		
		if(JACStrConst.EAN_SKBTS_XX.equals(eanBarcode))
		{
			eanBarcode = JACStrConst.KARA_MOJI;
		}
		
		// 印紙税対象額を「発行日」を基準日として取得する
		long inshiTaxTgAmnt = Long.valueOf(JCHStampDutyUtil.getTaxableAmount(JACStrConst.CALLER_SCREEN, null, hakkoYmd));
		
		// 収入印紙貼付欄マスク
		String shInsHrtkMask  = JACStrConst.KARA_MOJI;
		
		int seikyAmnt = Integer.parseInt((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM));
		if(seikyAmnt < inshiTaxTgAmnt)
		{
			// 印紙税対象ではない
			shInsHrtkMask = SN_INS_HRTK_MASK_AST;
		}
		
		// 明細行形成
		for(int i = 0; i < childList.size(); i++) 
		{
			HashMap<String, Object> msg = (HashMap<String, Object>)childList.get(i);
			
			// 金額
			String strAmnt = new String();
			// 金額内訳
			String strUwAmnt = new String();
			
			strAmnt = (String)msg.get(JCHTushinSvcBnktConstCC.AMNT);
			strAmnt = editAmnt(strAmnt);
			strUwAmnt = (String)msg.get(JCHTushinSvcBnktConstCC.UW_AMNT);
			strUwAmnt = editAmnt(strUwAmnt);
			
			sb.append(getStringToDblQuote((String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_PCD)))				// 郵便番号
			.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(customerBarCd))				// カスタマーバーコード
			.append(CSV + getStringToDblQuote(seikyshoHakkoNo))				// 請求書発行番号
			.append(CSV + getStringToDblQuote(hakkoYear))					// 発行年月日（年）
			.append(CSV + getStringToDblQuote(hakkoMonth))					// 発行年月日（月）
			.append(CSV + getStringToDblQuote(hakkoDay))					// 発行年月日（日）
			.append(CSV + getStringToDblQuote(seikyYear))					// 請求月（年）
			.append(CSV + getStringToDblQuote(seikyMonth))					// 請求月（月）
			.append(CSV + getStringToDblQuote(editStr((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM), 12)))	// 請求額
			.append(CSV + getStringToDblQuote("*********"))					// うち消費税
			.append(CSV + getStringToDblQuote(payYear))						// 支払期限日（年）
			.append(CSV + getStringToDblQuote(payMonth))					// 支払期限日（月）
			.append(CSV + getStringToDblQuote(payDay))						// 支払期限日（日）
			.append(CSV + getStringToDblQuote(strWeek))						// 支払期限日（曜日）
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO)))			// お客様番号
			// お問合せ先
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_1)))		// お問合せ先１
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_2)))		// お問合せ先２
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_3)))		// お問合せ先３
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_5)))		// お問合せ先４
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_6)))		// お問合せ先５
			// お知らせ文言
			.append(CSV + getStringToDblQuote((String)infoList.get(0)))		// お知らせ１
			.append(CSV + getStringToDblQuote((String)infoList.get(1)))		// お知らせ２
			.append(CSV + getStringToDblQuote((String)infoList.get(2)))		// お知らせ３
			.append(CSV + getStringToDblQuote((String)infoList.get(3)))		// お知らせ４
			.append(CSV + getStringToDblQuote((String)infoList.get(4)))		// お知らせ５
			.append(CSV + getStringToDblQuote((String)infoList.get(5)))		// お知らせ６
			.append(CSV + getStringToDblQuote((String)infoList.get(6)))		// お知らせ７
			.append(CSV + getStringToDblQuote((String)infoList.get(7)))		// お知らせ８
			.append(CSV + getStringToDblQuote((String)msg.get(JCHTushinSvcBnktConstCC.PRC_UCWK)))						// 料金内訳
			.append(CSV + getStringToDblQuote(editStr(strAmnt.trim(), 9)))	// 金額
			.append(CSV + getStringToDblQuote(editStr(strUwAmnt.trim(), 9)))// 金額内訳
			.append(CSV + getStringToDblQuote(editStr((String) parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM), 9)))	// 金額合計
			.append(CSV + getStringToDblQuote(eanBarcode))					// EANバーコード
			.append(CSV + getStringToDblQuote(eanMonth))					// コンビニ支払期限月
			.append(CSV + getStringToDblQuote(eanDay))						// コンビニ支払期限日
			.append(CSV + getStringToDblQuote("*********"))					// 内消費税
			.append(CSV + getStringToDblQuote(shInsHrtkMask))				// 収入印紙貼付欄マスク
			.append(System.getProperty(LINE_SEP));
		}
		return sb.toString().getBytes("UTF-8");
	}
	// ANK-3838-00-00 ADD END
	// ANK-4131-00-00 ADD START
	/**
	 * ご利用料金請求書(窓口／コンビニ・パーフェクト)情報をCSV形式のバイナリデータに変換する。
	 * @param param
	 * @return byte[]
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private byte[] makeCSVDataUsePrcSeikyshoMadoConvPerfBnkt(IRequestParameterReadWrite param) throws Exception
	{
		HashMap<String, Object> parentMapCC = null;
		parentMapCC = (HashMap<String, Object>)param.getData(MAP_ID);
		
		ArrayList childList = (ArrayList)parentMapCC.get("seikyUwList");
		ArrayList seikyKeiykList = (ArrayList)parentMapCC.get("seikyKeiykList");
		HashMap<String, Object> seikyKeiykMap = (HashMap<String, Object>)seikyKeiykList.get(0);
		StringBuffer sb = new StringBuffer();
		
		// 通常文字サイズ か 小さい文字サイズ かのフラグ
		HashMap<String, String> editFlgMap = new HashMap<String, String>();
		
		// フォーマット編集
		// 送付先
		ArrayList<String> addressList = editSohusaki(seikyKeiykMap, 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(seikyKeiykMap);
		
		// カスタマーバーコード
		String customerBarCd = editCustomerBarCd(seikyKeiykMap);
		
		// 発行日
		String hakkoYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.HAKKOU_YMD)).trim();
		String hakkoYear = editYmd(hakkoYmd, DATE_KBN_YEAR);
		String hakkoMonth = editYmd(hakkoYmd, DATE_KBN_MON);
		String hakkoDay = editYmd(hakkoYmd, DATE_KBN_DAY);
		
		// ご請求年月
		String seikyYm = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_YM)).trim();
		String seikyYear = editYmd(seikyYm, DATE_KBN_YEAR);
		String seikyMonth = editYmd(seikyYm, DATE_KBN_MON);
		
		// 請求書発行番号
		String seikyshoHakkoNo = seikyYm.substring(2,6) + "-" + (String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO);
		
		// 支払期限日
		String payYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.KIGEN_PAY_YMD)).trim();
		String payYear = editYmd(payYmd, DATE_KBN_YEAR);
		String payMonth = editYmd(payYmd, DATE_KBN_MON);
		String payDay = editYmd(payYmd, DATE_KBN_DAY);
		String strWeek = this.getDayOfWeek(payYmd);
		
		// EAN取扱期限年月日
		String eanYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.KIGEN_YMD)).trim();
		String eanMonth = editZeroSpace(editYmd(eanYmd, DATE_KBN_MON));
		String eanDay = editZeroSpace(editYmd(eanYmd, DATE_KBN_DAY));
		
		String ocrAmnt = "0" ;
		
		if((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM) != null && 
				!JACStrConst.KARA_MOJI.equals((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM)))
		{
			ocrAmnt = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM);
		}
		Long amnt = new Long(ocrAmnt);
		
		// お客様番号(請求先番号)
		String seikyKeiNo = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO);
		// 運用日
		String opeDate = com.fujitsu.futurity.bp.custom.common.JCCBPCommon.getOpeDate(JACStrConst.SYS_CD_CH);
		// バーコード様式コード
		String barcodeSbt = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.BARCODE_CD_SELECT);
		
		JCHCommonFormatUtil chComFmtUtil = new JCHCommonFormatUtil();
		
		// お知らせ
		ArrayList<String> infoList = editInformation(seikyKeiykMap);
		
		// 手数料負担方式コード
		String commisionFtnHskCd = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.COMMISION_FTN_HSK_CD);
		
		// ANK-4206-00-00 ADD START
		// 群番号
		String gunNo = (String)parentMapCC.get(JCHTushinSvcBnktConstCC.GUN_NO);
		// ANK-4206-00-00 ADD END
		
		// EANバーコード情報
		// ANK-4206-00-00 MOD START
//		ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(JCHTushinSvcBnktConstCC.HAKKO_SEQ), barcodeSbt, eanYmd, JACStrConst.KARA_MOJI, amnt, opeDate, commisionFtnHskCd);
		ArrayList<String> eanInfoList = chComFmtUtil.getEanInf(null, seikyYm, seikyKeiNo, Integer.toString(JCHTushinSvcBnktConstCC.HAKKO_SEQ), barcodeSbt, eanYmd, JACStrConst.KARA_MOJI, amnt, opeDate, commisionFtnHskCd, gunNo);
		// ANK-4206-00-00 MOD END
		
		// EANバーコード
		String eanBarcode = JCHCommonFormatUtil.listToString(eanInfoList);
		
		if(eanBarcode == null)
		{
			eanBarcode = JACStrConst.KARA_MOJI;
		}
		else
		{
			eanBarcode = eanBarcode.trim();
		}
		
		if(JACStrConst.EAN_SKBTS_XX.equals(eanBarcode))
		{
			eanBarcode = JACStrConst.KARA_MOJI;
		}
		
		// パーフェクト口座振込先銀行名
		String pkozaHrikomiSakiBankNm = "";
		// パーフェクト口座支店名
		String pkozaShitenNm = "";
		// パーフェクト口座種目
		String pkozaShumoku = "";
		// パーフェクト口座番号
		String pkozaNo = "";
		// パーフェクト口座利用有無
		String pkozaUseUm = "";
		
		// パーフェクト口座一意照会の結果を取得する
		ArrayList childList2 = (ArrayList)parentMapCC.get("ECH0941A010CBSMsg1List");
		if (childList2 != null && childList2.size() > 0)
		{
			HashMap<String, Object> msg = (HashMap<String, Object>)childList2.get(0);
			
			if (msg != null)
			{
				// パーフェクト口座番号
				pkozaNo = (String)msg.get(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_NO);
				// パーフェクト口座利用有無
				pkozaUseUm = (String)msg.get(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_USE_UM);
				
				// パーフェクト口座利用判定
				// パーフェクト口座が""(空)ではない、かつ、パーフェクト口座利用有無が"1"(利用する)の場合
				if ((pkozaNo != null && !"".equals(pkozaNo)) && (pkozaUseUm != null && "1".equals(pkozaUseUm)))
				{
					// パーフェクト口座振込先銀行名
					pkozaHrikomiSakiBankNm = JACCommonUtil.editStrLength((String)msg.get(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_BANK_NM), CHOHYO_OUT_BANK_NM_LENGTH);
					// パーフェクト口座支店名
					pkozaShitenNm = JACCommonUtil.editStrLength((String)msg.get(JCHTushinSvcBnktConstCC.ECH0941A010_PKOZA_SHITEN_NM), CHOHYO_OUT_BANK_SHITEN_NM_LENGTH);
					// パーフェクト口座種目
					pkozaShumoku = JACStrConst.PKOZA_SHUMOKU_HUTSU;
				}
				// 利用しない場合はパーフェクト口座情報は全て空で設定する
				else
				{
					// パーフェクト口座振込先銀行名
					pkozaHrikomiSakiBankNm = "";
					// パーフェクト口座支店名
					pkozaShitenNm = "";
					// パーフェクト口座種目
					pkozaShumoku = "";
					// パーフェクト口座番号
					pkozaNo = "";
				}
			}
		}

		// 印紙税対象額を「発行日」を基準日として取得する
		long inshiTaxTgAmnt = Long.valueOf(JCHStampDutyUtil.getTaxableAmount(JACStrConst.CALLER_SCREEN, null, hakkoYmd));
		
		// 収入印紙貼付欄マスク
		String shInsHrtkMask  = JACStrConst.KARA_MOJI;
		
		int seikyAmnt = Integer.parseInt((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM));
		if(seikyAmnt < inshiTaxTgAmnt)
		{
			// 印紙税対象ではない
			shInsHrtkMask = SN_INS_HRTK_MASK_AST;
		}
		
		// 明細行形成
		for(int i = 0; i < childList.size(); i++) 
		{
			HashMap<String, Object> msg = (HashMap<String, Object>)childList.get(i);
			
			// 金額
			String strAmnt = new String();
			// 金額内訳
			String strUwAmnt = new String();
			
			strAmnt = (String)msg.get(JCHTushinSvcBnktConstCC.AMNT);
			strAmnt = editAmnt(strAmnt);
			strUwAmnt = (String)msg.get(JCHTushinSvcBnktConstCC.UW_AMNT);
			strUwAmnt = editAmnt(strUwAmnt);
			
			sb.append(getStringToDblQuote((String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_PCD)))				// 郵便番号
			.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(customerBarCd))				// カスタマーバーコード
			.append(CSV + getStringToDblQuote(seikyshoHakkoNo))				// 請求書発行番号
			.append(CSV + getStringToDblQuote(hakkoYear))					// 発行年月日（年）
			.append(CSV + getStringToDblQuote(hakkoMonth))					// 発行年月日（月）
			.append(CSV + getStringToDblQuote(hakkoDay))					// 発行年月日（日）
			.append(CSV + getStringToDblQuote(seikyYear))					// 請求月（年）
			.append(CSV + getStringToDblQuote(seikyMonth))					// 請求月（月）
			.append(CSV + getStringToDblQuote(editStr((String)parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM), 12)))	// 請求額
			.append(CSV + getStringToDblQuote("*********"))					// うち消費税
			.append(CSV + getStringToDblQuote(payYear))						// 支払期限日（年）
			.append(CSV + getStringToDblQuote(payMonth))					// 支払期限日（月）
			.append(CSV + getStringToDblQuote(payDay))						// 支払期限日（日）
			.append(CSV + getStringToDblQuote(strWeek))						// 支払期限日（曜日）
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO)))			// お客様番号
			// お問合せ先
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_1)))		// お問合せ先１
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_2)))		// お問合せ先２
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_3)))		// お問合せ先３
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_5)))		// お問合せ先４
			.append(CSV + getStringToDblQuote((String)parentMapCC.get(JCHTushinSvcBnktConstCC.TOIAWASE_SAKI_6)))		// お問合せ先５
			// お知らせ文言
			.append(CSV + getStringToDblQuote((String)infoList.get(0)))		// お知らせ１
			.append(CSV + getStringToDblQuote((String)infoList.get(1)))		// お知らせ２
			.append(CSV + getStringToDblQuote((String)infoList.get(2)))		// お知らせ３
			.append(CSV + getStringToDblQuote((String)infoList.get(3)))		// お知らせ４
			.append(CSV + getStringToDblQuote((String)infoList.get(4)))		// お知らせ５
			.append(CSV + getStringToDblQuote((String)infoList.get(5)))		// お知らせ６
			.append(CSV + getStringToDblQuote((String)infoList.get(6)))		// お知らせ７
			.append(CSV + getStringToDblQuote((String)infoList.get(7)))		// お知らせ８
			.append(CSV + getStringToDblQuote((String)msg.get(JCHTushinSvcBnktConstCC.PRC_UCWK)))						// 料金内訳
			.append(CSV + getStringToDblQuote(editStr(strAmnt.trim(), 9)))	// 金額
			.append(CSV + getStringToDblQuote(editStr(strUwAmnt.trim(), 9)))// 金額内訳
			.append(CSV + getStringToDblQuote(editStr((String) parentMapCC.get(JCHTushinSvcBnktConstCC.AMNT_SUM), 9)))	// 金額合計
			.append(CSV + getStringToDblQuote(editStr((String)parentMapCC.get(JCHTushinSvcBnktConstCC.UW_AMNT_SUM), 9)))	// 内訳合計金額(請求額)
			.append(CSV + getStringToDblQuote(pkozaHrikomiSakiBankNm))		// 振込先銀行名
			.append(CSV + getStringToDblQuote(pkozaShitenNm))				// 支店名
			.append(CSV + getStringToDblQuote(pkozaShumoku))				// 種目
			.append(CSV + getStringToDblQuote(JKKStringConverter.convertFullMark(pkozaNo)))	// 口座番号
			.append(CSV + getStringToDblQuote(eanBarcode))					// EANバーコード
			.append(CSV + getStringToDblQuote(eanMonth))					// コンビニ支払期限月
			.append(CSV + getStringToDblQuote(eanDay))						// コンビニ支払期限日
			.append(CSV + getStringToDblQuote("*********"))					// 内消費税
			.append(CSV + getStringToDblQuote(shInsHrtkMask))				// 収入印紙貼付欄マスク
			.append(System.getProperty(LINE_SEP));
		}
		return sb.toString().getBytes("UTF-8");
	}
	// ANK-4131-00-00 ADD END

	// ▼▼ クラス内共通処理 ▼▼

	/**
	 * 編集した送付先住所を返します。
	 * @param seikyKeiykMap
	 * @return ArrayList
	 * @throws Exception
	 */
// 2014.06.04 OM-2014-0001921 mod start
//	private ArrayList<String> editSohusaki(HashMap<String, Object> seikyKeiykMap) throws Exception
	private ArrayList<String> editSohusaki(HashMap<String, Object> seikyKeiykMap, HashMap<String, String> editFlgMap) throws Exception
	// 2014.06.04 OM-2014-0001921 mod end
	{
		ArrayList<String> addList = new ArrayList<String>();
		addList.add("");
		addList.add("");
		addList.add("");
		addList.add("");

		String[] paramEditAddr = new String[7];

		paramEditAddr[0] = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_STATE_NM);
		paramEditAddr[1] = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_CITY_NM);
		paramEditAddr[2] = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_OAZTSU_NM);
		paramEditAddr[3] = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_AZCHO_NM);
		paramEditAddr[4] = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_BNCHIGO);
		paramEditAddr[5] = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_ADRTTM);
		paramEditAddr[6] = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_ADRRM);

		JCHCommonFormatUtil chComFmtUtil = new JCHCommonFormatUtil();

		// 通常文字サイズで編集
		String[] retEditAddr = chComFmtUtil.editAddress(paramEditAddr, ADDRESS_NORMAL_LINE_LENGTH, ADDRESS_SPLIT_COUNT);

		if (retEditAddr != null)
		{
// 2014.06.04 OM-2014-0001921 add start
			editFlgMap.put(EDIT_FLG_KEY, EDIT_FLG_NORMAL);
//2014.06.04 OM-2014-0001921 add end
			if (!retEditAddr[0].equals(JCHCommonFormatUtil.EDIT_RESULT_NORMAL))
			{
				// 小さい文字サイズで編集
				retEditAddr = chComFmtUtil.editAddress(paramEditAddr, ADDRESS_SMALL_LINE_LENGTH, ADDRESS_SPLIT_COUNT);
// 2014.06.04 OM-2014-0001921 add start
				editFlgMap.put(EDIT_FLG_KEY, EDIT_FLG_SMALL);
// 2014.06.04 OM-2014-0001921 add end
			}
			
			for (int i = 1; i < retEditAddr.length; i++)
			{
				addList.set(i - 1, retEditAddr[i]);
			}
		}

		return addList;
	}

	// ANK-3838-00-00 DEL START
//	/**
//	 * 編集した発行番号を返します。
//	 * @param parentMapCC
//	 * @return String
//	 * @throws Exception
//	 */
//	private String editHakkoNo(HashMap<String, Object> parentMapCC) throws Exception
//	{
//		StringBuffer sb = new StringBuffer();
//		String hakkoYmd = ((String)parentMapCC.get(JCHTushinSvcBnktConstCC.HAKKOU_YMD)).trim();	// 発行月(MM)
//
//		sb.append(((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_YM)).substring(2, 6));	// 請求年月(YYMM)
//		sb.append(JACStrConst.HYPHEN);
//		sb.append((String)parentMapCC.get(JCHTushinSvcBnktConstCC.SEIKY_KEI_NO));				// お客様番号(請求先番号)
//		sb.append(JACStrConst.HYPHEN);
//		sb.append(JCHTushinSvcBnktConstCC.SEIKY_WAY_CD);										// 支払方法("1"固定)
//		sb.append(JCHTushinSvcBnktConstCC.SEQ_NO);												// シーケンス番号("00"固定)
//		sb.append(editYmd(hakkoYmd, DATE_KBN_MON));
//		sb.append(Integer.toString(JCHTushinSvcBnktConstCC.HAKKO_SEQ));							// 発行シーケンス("9"固定)
//		sb.append(JCHTushinSvcBnktConstCC.GUN);													// 群("6"固定)
//		sb.append(JCHTushinSvcBnktConstCC.SEIKYSYO_KBN);										// 請求書区分("1"固定)
//
//		return sb.toString();
//	}
	// ANK-3838-00-00 DEL END

	/**
	 * 編集した年・月・日を返します。
	 * @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;
	}

	/**
	 * 文字列を「"」で囲みます。
	 * @param arg0 対象文字列
	 * @return "対象文字列"
	 */
	private String getStringToDblQuote(String arg0)
	{
		return SINGLE_DBLQUOTE + arg0 + SINGLE_DBLQUOTE;
		
	}

	/**
	 * 対象日付の曜日を取得します。
	 * <br>
     * @param arg0 対象日付
     * @return String 曜日（1:日曜日〜7:土曜日）
     */
	private String getDayOfWeek(String arg0) 
	{
		if (!isValidParameter(arg0, YMD) && !isValidParameter(arg0, YMDHMS)) 
		{
			throw new IllegalArgumentException("引数の文字列[" + arg0 + "]" + "は不正です。");
		}

		// 曜日（返却値）
		String dayOfWeek = "";

		// 日付妥当性チェック
		if (!checkDate(arg0, 8)) 
		{
			return dayOfWeek;
		}

		// カレンダーオブジェクトを生成する
		int year = Integer.parseInt(arg0.substring(0, 4)); 		// 年

		int month = Integer.parseInt(arg0.substring(4, 6)); 	// 月
		
		int day = Integer.parseInt(arg0.substring(6, 8)); 		// 日

		GregorianCalendar cal = new GregorianCalendar(year, month - 1, day);

		// 曜日を取得する
		dayOfWeek = String.valueOf(cal.get(GregorianCalendar.DAY_OF_WEEK));

		return getDayNm(dayOfWeek);
	}
	
	/**
	 * 対象日付の曜日を取得します。
	 * <br>
     * @param dayNo 対象日付
     * @return String 曜日（1:日〜7:土）
     */
	private static String getDayNm(String dayNo)
	{
		String dayNm = "";

		if (DAY1_CODE.equals(dayNo))
		{
			dayNm = DAY1_NM ;
		} 
		else if (DAY2_CODE.equals(dayNo))
		{
			dayNm = DAY2_NM ;
		} 
		else if (DAY3_CODE.equals(dayNo))
		{
			dayNm = DAY3_NM ;
		}
		else if (DAY4_CODE.equals(dayNo))
		{
			dayNm = DAY4_NM ;
		}
		else if (DAY5_CODE.equals(dayNo))
		{
			dayNm = DAY5_NM ;
		}
		else if (DAY6_CODE.equals(dayNo))
		{
			dayNm = DAY6_NM ;
		}
		else if (DAY7_CODE.equals(dayNo))
		{
			dayNm = DAY7_NM ;
		}
		return dayNm;
	}
	
	/**
	 * 有効なパラメータか判定します。
	 * 文字列に値が設定されていない場合、及び指定された桁数と
	 * 一致しない場合はエラーとします。
	 * <br>
	 * @param arg0 判定する文字列
	 * @param arg1 文字列として有効な桁数
	 * @return パラメータが不正な場合はfalse
	 */
	protected static boolean isValidParameter(String arg0, int arg1) 
	{
		if (null == (arg0))
		{
			return false;
		}

		return arg1 == arg0.length();
	}

	/**
     * 日付の妥当性チェックを行います。
     * <br>
     * @param date yyyyMMddもしくはyyyyMM形式の日付
     * @param length チェック対象の日付の桁数
     * @return boolean
     */
	private static boolean checkDate(String date, int length) 
	{
		// 引数チェック
		if (null == (date)) 
		{
			return false;
		}

		try 
		{
			int yyyy = Integer.parseInt(date.substring(0, 4));

			int mm = Integer.parseInt(date.substring(4, 6));

			int dd = 1;

			if (length == 8) 
			{
				dd = Integer.parseInt(date.substring(6, 8));
			}

			// 月は 0 から始まる。（0:１月 となる。）
			Calendar cl = new GregorianCalendar(yyyy, mm - 1, dd);

			// カレンダークラスにより、日付が調整されてしまっている場合は、エラーである。
			if ((cl.get(Calendar.YEAR) != yyyy) 
					|| ((cl.get(Calendar.MONTH) + 1) != mm) 
					|| (cl.get(Calendar.DATE) != dd)) 
			{
				return false;
			}
			else 
			{
				return true;
			}
		}
		catch (NumberFormatException e) 
		{
			return false;
		}
	}

	/**
	 * 編集したカスタマーバーコードを返します。
	 * @param seikyKeiykMap
	 * @return String
	 * @throws Exception
	 */
	@SuppressWarnings("static-access")
	private String editCustomerBarCd(HashMap<String, Object> seikyKeiykMap) throws Exception
	{
		// 送付先郵便番号
		String sohusPcd = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_PCD);
		// 送付先大字通称名
		String sohusOaztsuNm = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_OAZTSU_NM);
		// 送付先字丁目名
		String sohusAzcho = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_AZCHO_NM);
		// 送付先住所番地号
		String sohusBnchigo = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_BNCHIGO);
		// 送付先住所補記・建物名
		String sohusAdrttm = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_ADRTTM);
		// 送付先住所補記・部屋番号
		String sohusAdrrm = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_ADRRM);
		
		// カスタマバーコードリスト取得
		JCHCommonBarcodeEdit commonBarcodeEdiCst = new JCHCommonBarcodeEdit();

		List<String> customerBarcodeList = 
				commonBarcodeEdiCst.getCustomerBarcode(sohusPcd, sohusOaztsuNm, sohusAzcho, sohusBnchigo, sohusAdrttm, sohusAdrrm);
		
		// カスタマバーコードリストを連結して文字列に編集
		StringBuffer sbCustBcd = new StringBuffer();
		
		if (customerBarcodeList != null)
		{
			// カスタマスタートビット
			sbCustBcd.append(customerBarcodeList.get(0));
			// カスタマ送付先郵便番号
			sbCustBcd.append(customerBarcodeList.get(1));
			// カスタマ送付先住所コード
			sbCustBcd.append(customerBarcodeList.get(2));
			// カスタマチェックデジット
			sbCustBcd.append(customerBarcodeList.get(3));
			// カスタマストップビットコード
			sbCustBcd.append(customerBarcodeList.get(4));
		}
		String editCustomerBarCd = sbCustBcd.toString();

		// 帳票出力用に編集
		String rtnCustomerBarCd = JCHCommonBarcodeEdit.outputListCreator(editCustomerBarCd);

		return rtnCustomerBarCd;
	}
	
	/**
	 * 編集した金額を返します。
	 * @param strAmnt
	 * @param amntHenshuPtnCd
	 * @return String
	 * @throws Exception
	 */
	private String editAmnt(String strAmnt) throws Exception
	{
		String rtnValue = JACStrConst.KARA_MOJI;

		if(strAmnt != null && !JACStrConst.KARA_MOJI.equals(strAmnt))
		{
			rtnValue = JPCUtilCommon.fillHalfSpace(strAmnt, AMNT_HENSHU_KETA_MAX, false);
		}
		return rtnValue;
	}

	/**
	 * 編集したお客様名を返します。
	 * @param seikyKeiykMap
	 * @return ArrayList
	 * @throws Exception
	 */
	private ArrayList<String> editSohusakiName(HashMap<String, Object> seikyKeiykMap) throws Exception
	{
		ArrayList<String> nameList = new ArrayList<String>();
		String sohusNm = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_NM);
		String sohusBkm = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.SOHUS_BKM);
		String sohusTntshaNm = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.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;
	}

	/**
	 * 編集したお知らせを返します。
	 * @param seikyKeiykMap
	 * @return ArrayList
	 * @throws Exception
	 */
	private ArrayList<String> editInformation(HashMap<String, Object> seikyKeiykMap) throws Exception
	{
		ArrayList<String> infoList = new ArrayList<String>();
		String information = (String)seikyKeiykMap.get(JCHTushinSvcBnktConstCC.INFORMATION);
		if(!"".equals(information))
		{
			String[] strList = information.split(KAIGYO_CD);
			for(String strInfo : strList)
			{
				if(infoList.size() > 8)
				{
					break;
				}
				while(strInfo.length() > 32)
				{
					infoList.add(strInfo.substring(0, 32));
					StringBuilder sb = new StringBuilder(strInfo);
					strInfo = sb.delete(0, 32).toString();
				}
				infoList.add(strInfo);
			}
		}
		int infoSize = infoList.size();
		for(int i = infoSize; i < 8; i++)
		{
			infoList.add(JACStrConst.KARA_MOJI);
		}
		ArrayList<String> resultInfoList = infoList;

		return resultInfoList;
	}
	
	/**
	 * 指定された月日のゼロサプレス編集
	 * 
	 * @param strValue ：編集前文字列
	 * @return rtnValue ：編集後文字列
	 * @throws Exception 
	 */
	public String editZeroSpace(String strValue) throws Exception
	{
		// 文字列が未入力である場合
		if (strValue == null || strValue.trim().length() == 0)
		{
			return "  ";
		}
		else
		{
			if(strValue.startsWith("0", 0))
			{
				// １文字目が"0"の場合は空白に置き換える
				strValue = strValue.replaceFirst(ZERO, JACStrConst.SPACE_1);
			}
			return strValue;
		}
	}
	
// 2014.06.04 OM-2014-0001921 add start
	/**
	 * 住所配列取得処理。
	 * 「第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;
	}
// 2014.06.04 OM-2014-0001921 add end

	// ANK-3838-00-00 ADD START
	/**
	 * 
	 * 処理対象の文字列の長さが指定した文字列数より長い場合、指定した文字列の長さに切り取った文字列を返却する。
	 * 切り取り方は文字列の右から指定した文字数だけ切り出す。
	 * 
	 * @param trgetStr 対象文字列
	 * @param strCutCnt 切り出しする文字数(右端からカウントする)
	 * @return editStr 編集文字列(右端から指定文字数分切り出した文字列)
	 * @throws Exception
	 */
	private String editStr(String tergetStr, int strCutCnt)
	{
		// 対象文字列がnullまたは空文字の場合
		if (tergetStr == null || "".equals(tergetStr))
		{
			// 編集文字列を""(空文字)として返却する
			return "";
		}
		
		// 対象文字列の長さを取得
		int tergetStrLength = tergetStr.length();
		
		// 切り出しする文字数が"0"以下の場合
		if (strCutCnt <= 0)
		{
			// 編集文字列を""(空文字)として返却する
			return "";
		}
		
		// 対象文字列の長さが切り出しする文字数より大きくなる場合
		if (tergetStrLength > strCutCnt)
		{
			return tergetStr.substring(tergetStrLength - strCutCnt);
		}
		// 対象文字列の長さが切り出しする文字数以下となる場合
		else
		{
			// 編集文字列に対象文字列を設定して返却する(編集なし)
			return tergetStr;
		}
	}
	// ANK-3838-00-00 ADD END
}	