/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCHPrcChoseiHenkoCreateCC
*   ソースファイル名：JCHPrcChoseiHenkoCreateCC.java
*   作成者          ：富士通
*   日付            ：2012年05月13日
*＜機能概要＞
*   請求契約一意照会CC部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/05/13	富士通		新規作成
*	v5.00.00	2013/07/29	富士通		【IT1-2013-0001466】記事の改行を除去するように修正
*	v5.00.01	2013/09/24	FJ) 林		【OM-2013-0002534】
*                                        料金変更かつ機能コード4の場合、 料金変更登録一覧明細（表示用）より電子ファイルデータ情報を作成するよう修正
*	v5.00.02	2013/11/02	FJ)小野		【OM-2013-0003878】全角ハイフンが文字化けする事象に対応。
*	v8.00.00	2014/03/12	FJ) 林		【TG1-2014-0000004】消費税に伴う料金施策（増税対応）
*	v9.00.00	2014/05/16	FJ) 林		【IT1-2014-0000136】料金調整変更リスト金額表示不正対応
*	v9.00.01	2014/05/26	FJ) 林		【IT1-2014-0000164】料金調整変更リスト削除金額表示不正対応
*	v9.00.02	2014/05/31	FJ) 林		【IT1-2014-0000169】料金調整変更リストFTTH金額表示不正対応
*	v12.00.00	2015/03/04	FJ)桑島		【OM-2014-0003792】料金対応記録設定対応
*	v16.00.00	2015/06/04	FJ)酒井		【ANK-2480-00-00】新電力対応
*	v36.00.00	2017/12/15	FJ)清原		【ANK-3296-00-00】標準工事費分割請求
*	v71.00.00   2024/04/26  FJ）久山	【ANK-4468-00-00】eo光ネット「シンプルプラン」追加対応
*	v71.00.01   2024/05/29  FJ）久山	【ANK-4468-00-01】eo光ネット「シンプルプラン」追加対応
*	v73.00.00   2024/12/02  FJ）久山	【ANK-4427-10-00】NTT卸対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.bp.custom.constant.JCHPrcTaioKirokAddConstCC;
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 eo.common.constant.JACStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCHCommonFormatUtil;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECH0101D011CBSMsg2List;
import eo.ejb.cbs.cbsmsg.ECH0101D012CBSMsg2List;


/**
 * 料金調整、料金変更により呼び出されるCSVデータ作成CC部品です。<p>
 * <BR>
 * @author 富士通
 */
public class JCHPrcChoseiHenkoCreateCC extends AbstractCommonComponent {

	/** 料金調整：請求内訳登録マップID */
	private static final String MAP_SC_ID_CHSV002601SC = "CHSV002601SC";

	/** 料金変更：請求内訳登録マップID */
	private static final String MAP_SC_ID_CHSV002001SC = "CHSV002001SC";

	/** 料金調整：電子ファイル管理登録マップID */
	private static final String MAP_SC_ID_CHSV002602SC = "CHSV002602SC";

	/** 料金変更：電子ファイル管理登録マップID */
	private static final String MAP_SC_ID_CHSV002002SC = "CHSV002002SC";
	
	//ANK-4468-00-00 ADD START
	/** グループ計変更情報取得情報取得マップID */
	private static final String MAP_CC_ID_GETCHANGEGROUPKEIINFCC = "GETCHANGEGROUPKEIINFCC";
	
	/** インデント数 */
    public static final String INDENT_CNT = "indent_cnt";
	//ANK-4468-00-00 ADD END

	/** 改行文字 */
	private static final String LINE_SEP = "line.separator";

	/**  カンマ区切り */
	private static final String CSV = ",";

	/** エスケープ文字 (")  */
	private static final String SINGLE_DBLQUOTE = "\"";

	/** 時刻連結子(:)  */
	private static final String TIME_CONNECTOR = ":";
	
	/** 改行コード(CR_LF) */
	private static final String CR_LF = "\r\n";
	
	/** 通信量数量付帯文字 */
	private static final String TSUSIN_A_STRING = "MB";
	
	/**
	 * 請求内訳登録（ECH0101D010）の結果を基に料金調整リストを形成します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception 例外が発生した場合
	 */
	public IRequestParameterReadWrite createPrcChoseiList(SessionHandle handle, 
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 対応記録情報設定
		setTaioKirokInfo(param, MAP_SC_ID_CHSV002601SC);

		// 電子ファイル管理登録マップを取得
		parentMap = (HashMap<String, Object>)param.getData(MAP_SC_ID_CHSV002602SC);

		//ANK-4468-00-00 ADD START
		// シンプルプラングループ計変更情報取得
		getChangeGroupKei(handle, param, MAP_CC_ID_GETCHANGEGROUPKEIINFCC);
		//ANK-4468-00-00 ADD END
		
		// 請求内訳情報一時マップを取得
		ArrayList<HashMap<String, Object>> seikyUcwkTmpMapList = createSeikyUcwkMapList(param, MAP_SC_ID_CHSV002601SC);

		// CSVデータ形成
		byte[] binaryFile = createCsvPrcChoseiList(param, seikyUcwkTmpMapList);

		// CSVデータ設定
		parentMap.put("efile", binaryFile);

		param.setData(MAP_SC_ID_CHSV002602SC, parentMap);

		return param;
	}

	/**
	 * 請求内訳登録（ECH0101D010）の結果を基に料金変更リストを形成します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception 例外が発生した場合
	 */
	public IRequestParameterReadWrite createPrcHenkoList(SessionHandle handle, 
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 対応記録情報設定
		setTaioKirokInfo(param, MAP_SC_ID_CHSV002001SC);

		// 電子ファイル管理登録マップを取得
		parentMap = (HashMap<String, Object>)param.getData(MAP_SC_ID_CHSV002002SC);

		//ANK-4468-00-00 ADD START
		// シンプルプラングループ計変更情報取得
		getChangeGroupKei(handle, param, MAP_CC_ID_GETCHANGEGROUPKEIINFCC);
		//ANK-4468-00-00 ADD END
		
		// 請求内訳情報一時マップを取得
		ArrayList<HashMap<String, Object>> seikyUcwkTmpMapList = createSeikyUcwkMapList(param, MAP_SC_ID_CHSV002001SC);

		// CSVデータ形成
		byte[] binaryFile = createCsvPrcChoseiList(param, seikyUcwkTmpMapList);

		// CSVデータ設定
		parentMap.put("efile", binaryFile);

		param.setData(MAP_SC_ID_CHSV002002SC, parentMap);

		return param;
	}

	/**
	 * 請求先情報、請求内訳情報一時マップを基にCSVデータを形成し返却を行う。
	 * <br>
	 * @param param リクエストパラメータ
	 * @param seikyUcwkTmpMapList 請求内訳情報一時マップ
	 * @return CSVデータ(byte配列)
	 * @throws RequestParameterException パラメータ取得で例外が発生した場合
	 */
	private byte[] createCsvPrcChoseiList(IRequestParameterReadWrite param, ArrayList<HashMap<String, Object>> seikyUcwkTmpMapList) throws Exception
	{
		HashMap<String, Object> seikySakiMap = (HashMap<String, Object>)param.getData("PRCCHOSEIHENKOCREATECC");

		StringBuffer sb = new StringBuffer();
		for( int i = 0; i < seikyUcwkTmpMapList.size(); i++)
		{
			String kaiPageKey = null;
			String choseiAmntBf = JACStrConst.KARA_MOJI;
			String choseiAmntAf = JACStrConst.KARA_MOJI;
			String choseiAmntSag = JACStrConst.KARA_MOJI;

			HashMap<String, Object> seikyUcwkMap = seikyUcwkTmpMapList.get(i);

			// 改ページキー
			kaiPageKey = (String)seikySakiMap.get("ope_id") + 
						this.dateFormatHms((String)seikySakiMap.get("ope_date")) + 
						(String)seikySakiMap.get("seiky_ym") + 
						(String)seikySakiMap.get("seiky_kei_no");

			// 埋込み項目コード
			String umkmKmkCd = (String)seikyUcwkMap.get("umkm_kmk_cd");
			// 金額表示カラム数
			String amntDspColumCnt = (String)seikyUcwkMap.get("amnt_dsp_colum_cnt");
			// 料金項目コード
			String prcKmkCd = (String)seikyUcwkMap.get("key_prc_kmk_cd");
			
			// 埋込み項目コード＝"2"（埋込み料金項目を全角に置き換える）または埋込み項目コード＝"6"（埋込み料金項目(単位を付加しない)）もしくは、金額表示カラム数≠"0"（表示しない）の場合
			// 調整前金額・調整後金額・差額を設定する
			//v36.00.00 ANK-3296-00-00 Mod Start
//			if (JACStrConst.UMKM_KMK_CD_FULL.equals(umkmKmkCd) || !JACStrConst.AMNT_DSP_COLUM_CNT_ZERO.equals(amntDspColumCnt))
			if (JACStrConst.UMKM_KMK_CD_FULL.equals(umkmKmkCd) || JACStrConst.UMKM_KMK_CD_FULL_NO_TANI.equals(umkmKmkCd) 
					|| !JACStrConst.AMNT_DSP_COLUM_CNT_ZERO.equals(amntDspColumCnt))
			//v36.00.00 ANK-3296-00-00 Mod End
			{
				// 調整区分（追加）の場合
				if(JACStrConst.PRC_ADJ_DIV_ADD_NM.equals(seikyUcwkMap.get("div_adj_prc_nm")))
				{
					// 調整前金額
					choseiAmntBf = JACStrConst.KARA_MOJI;
					// 調整差額(追加料金項目を設定)
					choseiAmntSag = (String)seikyUcwkMap.get("amnt_adj_af_prc");
				}
				else
				{
					// 調整前金額
					choseiAmntBf = (String)seikyUcwkMap.get("amnt_adj_bf_prc");
				}
				// 調整区分（削除）の場合
				if(JACStrConst.PRC_ADJ_DIV_DEL_NM.equals(seikyUcwkMap.get("div_adj_prc_nm")))
				{
					// 調整後金額
					choseiAmntAf = JACStrConst.KARA_MOJI;
					
					// 調整差額(調整前金額＊-1を設定)
					String sAmnt = (String)seikyUcwkMap.get("amnt_adj_bf_prc");
					if (!JCHCommonFormatUtil.isNull(sAmnt))
					{
						BigDecimal btAmnt = new BigDecimal(sAmnt);
						choseiAmntSag = String.valueOf(btAmnt.multiply(new BigDecimal("-1")));
					}
				}
				else
				{
					// 調整後金額
					choseiAmntAf = (String)seikyUcwkMap.get("amnt_adj_af_prc");
				}
				// 調整区分（変更）の場合
				if(JACStrConst.PRC_ADJ_DIV_CHG_NM.equals(seikyUcwkMap.get("div_adj_prc_nm")))
				{
					// 調整差額(調整後金額 - 調整前金額)
					choseiAmntSag = this.calcSubtraction((String)seikyUcwkMap.get("amnt_adj_af_prc"), (String)seikyUcwkMap.get("amnt_adj_bf_prc"), true);
				}
			}
			
			// 埋込み項目コード＝"2"（埋込み料金項目を全角に置き換える）又は"6"：埋込み料金項目(単位を付加しない)
			// かつ料金項目コード末尾＝"2"（数量）の場合
			//v36.00.00 ANK-3296-00-00 Mod Start
			//if (JACStrConst.UMKM_KMK_CD_FULL.equals(umkmKmkCd) && "2".equals(prcKmkCd.substring(10, 11)))
			if ((JACStrConst.UMKM_KMK_CD_FULL.equals(umkmKmkCd) || JACStrConst.UMKM_KMK_CD_FULL_NO_TANI.equals(umkmKmkCd))
					&& "2".equals(prcKmkCd.substring(10, 11)))
			//v36.00.00 ANK-3296-00-00 Mod End
			{
// v16.00.00 ANK-2480-00-00 ADD START
				// 料金グループコードが"17"(eo電気)の場合又は埋込み項目コード＝"6"：埋込み料金項目(単位を付加しない)の場合
//v36.00.00 ANK-3296-00-00 Mod Start
//				if(JKKStrConst.CD00133_17.equals((String)seikyUcwkMap.get("prc_grp_cd_out")))
				if(JKKStrConst.CD00133_17.equals((String)seikyUcwkMap.get("prc_grp_cd_out")) 
						|| JACStrConst.UMKM_KMK_CD_FULL_NO_TANI.equals(umkmKmkCd))
//v36.00.00 ANK-3296-00-00 Mod End
				{
					if (!JCHCommonFormatUtil.isNull(choseiAmntBf))
					{
						choseiAmntBf = JACStrConst.KARA_MOJI;
					}
					if (!JCHCommonFormatUtil.isNull(choseiAmntAf))
					{
						choseiAmntAf = JACStrConst.KARA_MOJI;
					}
					if (!JCHCommonFormatUtil.isNull(choseiAmntSag))
					{
						choseiAmntSag = JACStrConst.KARA_MOJI;
					}
				}
				else
				{
// v16.00.00 ANK-2480-00-00 ADD END
				
					if (!JCHCommonFormatUtil.isNull(choseiAmntBf))
					{
						choseiAmntBf = choseiAmntBf + TSUSIN_A_STRING;
					}
					if (!JCHCommonFormatUtil.isNull(choseiAmntAf))
					{
						choseiAmntAf = choseiAmntAf + TSUSIN_A_STRING;
					}
					if (!JCHCommonFormatUtil.isNull(choseiAmntSag))
					{
						choseiAmntSag = choseiAmntSag + TSUSIN_A_STRING;
					}
// v16.00.00 ANK-2480-00-00 ADD START
				}
// v16.00.00 ANK-2480-00-00 ADD END
			}
			
			// TODO: 2012/5/10時点での定義体のレイアウト（マンションが絡むID番号、料金内訳名は修正が必要）
			// 共通部
			sb.append(getStringToDblQuote(kaiPageKey));														// 改ページキー
			if( i == 0)
			{
				sb.append(CSV + getStringToDblQuote((String)seikySakiMap.get("ope_id")))						// 操作者コード
				.append(CSV + getStringToDblQuote((String)seikySakiMap.get("ope_nm")))							// 操作者名
				.append(CSV + getStringToDblQuote(editKouban(i)))												// 項番
				.append(CSV + getStringToDblQuote(this.dateFormatHms((String)seikySakiMap.get("ope_date"))))	// 操作時刻
				.append(CSV + getStringToDblQuote(editSeikyYm((String)seikySakiMap.get("seiky_ym"))))			// 請求年月
				.append(CSV + getStringToDblQuote((String)seikySakiMap.get("seiky_kei_no")))					// 請求契約番号
				.append(CSV + getStringToDblQuote((String)seikySakiMap.get("shs_kana")))						// 請求先名（カナ）
				.append(CSV + getStringToDblQuote((String)seikySakiMap.get("tokusoku_stat")))					// 督促ステータス
				.append(CSV + getStringToDblQuote(delCrlf((String)seikySakiMap.get("kiji"))));					// 記事
			}
			else
			{
				sb.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 操作者コード
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 操作者名
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 項番
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 操作時刻
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 請求年月
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 請求契約番号
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 請求先名（カナ）
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI))			// 督促ステータス
				.append(CSV + getStringToDblQuote(JACStrConst.KARA_MOJI));			// 記事
			}
			// 明細部
			sb.append(CSV + getStringToDblQuote((String)seikyUcwkMap.get("id_no")))							// ID番号
			.append(CSV + getStringToDblQuote((String)seikyUcwkMap.get("key_pcrs_cd")))						// 料金プランコード（料金コースコード）
			.append(CSV + getStringToDblQuote((String)seikyUcwkMap.get("key_prc_svc_cd")))					// 料金サービスコード
			.append(CSV + getStringToDblQuote((String)seikyUcwkMap.get("key_prc_kmk_cd")))					// 料金項目コード
			.append(CSV + getStringToDblQuote((String)seikyUcwkMap.get("prc_uw")))							// 料金内訳名
			.append(CSV + getStringToDblQuote((String)seikyUcwkMap.get("div_adj_prc_nm")))					// 調整区分
			.append(CSV + getStringToDblQuote(JPCUtilCommon.formatNumber(choseiAmntBf)))					// 調整前金額
			.append(CSV + getStringToDblQuote(JPCUtilCommon.formatNumber(choseiAmntAf)))					// 調整後金額
			.append(CSV + getStringToDblQuote(JPCUtilCommon.formatNumber(choseiAmntSag)));					// 調整差額

			// 改行
			sb.append(System.getProperty(LINE_SEP));
		}

		return toBytes(sb.toString());
	}

	/**
	 * 請求内訳登録（ECH0101D010）の結果を抽出し、請求内訳情報一時マップを形成します。<br>
	 * <br>
	 * @param param リクエストパラメータ
	 * @param mapKey 対象マップID
	 * @return 請求内訳情報一時マップリスト
	 * @throws RequestParameterException パラメータ取得で例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<String, Object>> createSeikyUcwkMapList(IRequestParameterReadWrite param, String mapId) throws Exception
	{
		//ANK-4468-00-00 ADD START
		HashMap<String, Object> simpleIdWorkParamValue = (HashMap<String, Object>) param.getData(MAP_CC_ID_GETCHANGEGROUPKEIINFCC);
		ArrayList<HashMap<String, Object>> simpleIdList = (ArrayList<HashMap<String, Object>>) simpleIdWorkParamValue.get("EZM0321B010CBSMsg1List_1");
		int listSize1 = simpleIdList.size();
		ArrayList<String>  simpleIdList1 = new ArrayList<String>();
		for (int i = 0; i < listSize1; i++)
		{
			HashMap childMap1 = (HashMap)simpleIdList.get(i);
			
			if (childMap1 != null)
			{
				// シンプルプランID計の業務パラメータ設定値取得
				simpleIdList1.add((String)childMap1.get("work_param_sette_value"));
			}
		}
		
		HashMap<String, Object> simpleGroupKeiWorkParamValue = (HashMap<String, Object>) param.getData(MAP_CC_ID_GETCHANGEGROUPKEIINFCC);
		ArrayList<HashMap<String, Object>> simpleGroupKeiList = (ArrayList<HashMap<String, Object>>) simpleGroupKeiWorkParamValue.get("EZM0321B010CBSMsg1List_2");
		int listSize2 = simpleGroupKeiList.size();
		ArrayList<String>  simpleGroupKeiList1 = new ArrayList<String>();
		for (int i = 0; i < listSize2; i++)
		{
			HashMap childMap2 = (HashMap)simpleGroupKeiList.get(i);
			
			if (childMap2 != null)
			{
				// シンプルプラン料金グループ計の業務パラメータ設定値取得
				simpleGroupKeiList1.add((String)childMap2.get("work_param_sette_value"));
			}
		}
		
		HashMap<String, Object> simplePrcKmkNm = (HashMap<String, Object>) param.getData(MAP_CC_ID_GETCHANGEGROUPKEIINFCC);
		ArrayList<HashMap<String, Object>> simplePrcKmkNmList = (ArrayList<HashMap<String, Object>>) simplePrcKmkNm.get("ECH0391A010CBSMsg1List");
		String rePrcKmkNm = "";
		if(!JKKStringUtil.isNullEmpty(simplePrcKmkNmList))
		{
			Object objectPrcKmkNm = simplePrcKmkNmList.get(0).get("prc_kmk_nm");
			
			if(objectPrcKmkNm != null)
			{
				// シンプルプラン料金項目名称取得
				rePrcKmkNm = objectPrcKmkNm.toString();
			}
		}
		//ANK-4468-00-00 ADD END

		HashMap<String, Object> parentMap = null;
		ArrayList childList = null;
		
		ArrayList<HashMap<String, Object>> returnList =  new ArrayList<HashMap<String, Object>>();;
		parentMap = (HashMap<String, Object>)param.getData(mapId);
		
		String funcCd = null;
		if(parentMap != null)
		{
			funcCd = (String)parentMap.get("func_code");
		}
		
		childList = null;
		
		// 対象マップIDを判定し、抽出するリスト名を設定
		String containsListName = null;
		if(MAP_SC_ID_CHSV002601SC.equals(mapId))
		{
			containsListName = "ECH0101D011CBSMsg2List";
		}
		else if(MAP_SC_ID_CHSV002001SC.equals(mapId))
		{
			containsListName = "ECH0101D012CBSMsg2List";
		}
		
		// 機能コード"1"の場合、登録確認時に作成した電子ファイルデータ情報を使用する
		if(JPCModelConstant.FUNC_CD_1.equals(funcCd))
		{
			parentMap = (HashMap<String, Object>)param.getData("efile_data_info_list");
			
			if(parentMap != null && parentMap.containsKey(containsListName))
			{
				childList = (ArrayList)parentMap.get(containsListName);
			}
		}
		// 機能コード"3"の場合、料金変更/調整登録一覧明細（表示用）より電子ファイルデータ情報を作成する
		else if(JPCModelConstant.FUNC_CD_3.equals(funcCd))
		{
			if(parentMap != null && parentMap.containsKey(containsListName))
			{
				childList = (ArrayList)parentMap.get(containsListName);
			}
		}
		// 機能コード"4"の場合、料金変更登録一覧明細（表示用）より電子ファイルデータ情報を作成する
		else if(JPCModelConstant.FUNC_CD_4.equals(funcCd) && MAP_SC_ID_CHSV002001SC.equals(mapId))
		{
			if(parentMap != null && parentMap.containsKey(containsListName))
			{
				childList = (ArrayList)parentMap.get(containsListName);
			}
		}
		
		if (childList != null)
		{
			//ANK-4468-00-00 ADD START
			//シンプルプランID計判定
			boolean prcKmkNmFlg = false;
			//ANK-4468-00-01 MOD START
//			if (simpleIdJudge(childList, simpleIdList1))
			if (simpleIdJudge(childList, simpleIdList1, mapId))
			//ANK-4468-00-01 MOD END
			{
				prcKmkNmFlg = true;
			}
			//ANK-4468-00-00 ADD END
			int iNo = 0;
			for(int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);
				HashMap<String, Object> returnMap = new HashMap<String, Object>();
			
				//ANK-4468-00-00 ADD START
				//ANK-4468-00-01 MOD START
//				if (prcKmkNmFlg == true)
				if (prcKmkNmFlg && !JKKStringUtil.isNullEmpty(rePrcKmkNm))
				//ANK-4468-00-01 MOD END
				{
					//シンプルプラン料金グループ計の判定
					if (simpleGroupKeiList1.contains(simpleCdJoin(childMap, mapId)))
					{
						/** インデントの編集 */
						String strIndCnt = (String)childMap.get(INDENT_CNT);
						
						int iIndent = 0;
						if (strIndCnt != null)
						{
							iIndent = Integer.parseInt(strIndCnt);
						}
						// インデントを作成。
						StringBuffer sbIndent = new StringBuffer(10);
						for (int ix=0; ix<iIndent; ix++)
						{
							sbIndent.append("　");
						}
						// 料金項目名称を取得し、インデントを付加する
						rePrcKmkNm = sbIndent.append(rePrcKmkNm).toString();
						
						childMap.put("prc_kmk_nm", rePrcKmkNm);
					}
				}
				//ANK-4468-00-00 ADD END
				
				if (childMap != null) 
				{
					// 一時マップ.ＩＤ番号 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.サービス契約番号または請求契約番号
					// 制御フラグに応じて設定
					String svkeiNoDspCtrlFlg = (String)childMap.get("svkei_no_dsp_ctrl_flg");
					String usePrdDspCtrlFlg = (String)childMap.get("use_prd_dsp_ctrl_flg");

					if (svkeiNoDspCtrlFlg != null && JACStrConst.SVKEI_NO_DSP_CTRL_FLG_ON.equals(svkeiNoDspCtrlFlg))
					{
						iNo++;
						// 一時マップ.Ｎｏ ← No
						returnMap.put("no", String.valueOf(iNo));
						// 一時マップ.ＩＤ番号 ← 請求内訳一覧照会マップ.請求内訳一覧明細.サービス契約番号
						returnMap.put("id_no", (String)childMap.get("svc_kei_no_out"));
					}
					else if(usePrdDspCtrlFlg != null && JACStrConst.USE_PRD_DSP_CTRL_FLG_ON.equals(usePrdDspCtrlFlg))
					{
						// 変更前の利用開始終了マップリストと、請求内訳一覧照会結果の利用開始年月日・利用終了年月日を基に
						// 判定を行い、判定によって出力用文字列を形成し「ＩＤ番号」へ設定
						String useStaymd = (String)childMap.get("use_staymd_out");
						String useEndymd = (String)childMap.get("use_endymd_out");
						String prcKmkCd = (String)childMap.get("prc_kmk_cd_out");

						HashMap<String, Object> prcChoseiHenkoCreateMap = (HashMap<String, Object>)param.getData("PRCCHOSEIHENKOCREATECC");
						ArrayList<HashMap<String, Object>> useStaEndYmdMapList = (ArrayList<HashMap<String, Object>>)prcChoseiHenkoCreateMap.get("useStaEndYmdMapList");
						
						String henkoUm = new String(JACStrConst.SPACE_1);
						
						for (int j = 0; j < useStaEndYmdMapList.size(); j++)
						{
							HashMap<String, Object> useStaEndYmdMap = useStaEndYmdMapList.get(j);
							String staYmdBf = (String)useStaEndYmdMap.get("use_staymd");
							String endYmdBf = (String)useStaEndYmdMap.get("use_endymd");
							String prcKmkCdBf = (String)useStaEndYmdMap.get("key_prc_kmk_cd");
							
							if(prcKmkCd.equals(prcKmkCdBf)
								&& (!useStaymd.equals(staYmdBf) || !useEndymd.equals(endYmdBf)))
							{
								henkoUm = JACStrConst.ASTERISK;
							}
						}
						
						returnMap.put("id_no", henkoUm + useStaymd + JACStrConst.HYPHEN + useEndymd);
					}
					else
					{
						returnMap.put("no", new String());
						returnMap.put("id_no", new String());
					}
					// 一時マップ.料金コースコード ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.料金コースコード
					returnMap.put("key_pcrs_cd", (String)childMap.get("pcrs_cd_out"));
					// 一時マップ.料金サービスコード ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.料金サービスコード
					returnMap.put("key_prc_svc_cd", (String)childMap.get("prc_svc_cd_out"));
					// 一時マップ.料金項目コード ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.料金項目コード
					returnMap.put("key_prc_kmk_cd", (String)childMap.get("prc_kmk_cd_out"));
					// 一時マップ.調整前金額 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.金額
					returnMap.put("amnt_adj_bf_prc", (String)childMap.get("amnt"));
					// 一時マップ.利用開始日 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.利用開始年月日
					returnMap.put("use_staymd", (String)childMap.get("use_staymd_out"));
					// 一時マップ.利用終了日 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.利用終了年月日
					returnMap.put("use_endymd", (String)childMap.get("use_endymd_out"));
					// 一時マップ.料金内訳 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.料金項目名称
					returnMap.put("prc_uw", (String)childMap.get("prc_kmk_nm"));
					// 一時マップ.埋込み項目コード ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.埋込み項目コード
					returnMap.put("umkm_kmk_cd", (String)childMap.get("umkm_kmk_cd"));
					// 一時マップ.利用期間表示制御フラグ ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.利用期間表示制御フラグ
					returnMap.put("use_prd_dsp_ctrl_flg", (String)childMap.get("use_prd_dsp_ctrl_flg"));
					// 一時マップ.金額表示カラム数 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.金額表示カラム数
					returnMap.put("amnt_dsp_colum_cnt", (String)childMap.get("amnt_dsp_colum_cnt"));
					// 一時マップ.調整後金額 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.調整後金額
					returnMap.put("amnt_adj_af_prc", (String)childMap.get("cyosei_amnt"));
					// 一時マップ.料金訂正可否 ← 料金調整登録マップ.料金調整登録一覧明細（表示用）.料金訂正可否
					returnMap.put("prc_teisei_kh", (String)childMap.get("prc_teisei_kh"));
// v16.00.00 ANK-2480-00-00 ADD START
					// 一時マップ.料金グループ ← 料金調整登録マップ.料金グループ
					returnMap.put("prc_grp_cd_out", (String)childMap.get("prc_grp_cd_out"));
// v16.00.00 ANK-2480-00-00 ADD EMD
				}
				else
				{
					returnMap.put("no", new String());
					returnMap.put("id_no", new String());
					returnMap.put("key_pcrs_cd", new String());
					returnMap.put("key_prc_svc_cd", new String());
					returnMap.put("key_prc_kmk_cd", new String());
					returnMap.put("amnt_adj_bf_prc", new String());
					returnMap.put("use_staymd", new String());
					returnMap.put("use_endymd", new String());
					returnMap.put("prc_uw", new String());
					returnMap.put("umkm_kmk_cd", new String());
					returnMap.put("use_prd_dsp_ctrl_flg", new String());
					returnMap.put("amnt_dsp_colum_cnt", new String());
					returnMap.put("amnt_adj_af_prc", new String());
					returnMap.put("prc_teisei_kh", new String());
// v16.00.00 ANK-2480-00-00 ADD START
					returnMap.put("prc_grp_cd_out", new String());
// v16.00.00 ANK-2480-00-00 ADD END
				}

				// 仮値設定
				returnMap.put("div_adj_prc", JACStrConst.KARA_MOJI);
				returnMap.put("div_adj_prc_nm", JACStrConst.KARA_MOJI);
				returnMap.put("key_svc_kei_no", (String)childMap.get("svc_kei_no_out"));

				// 料金区分、料金訂正可否を判定用に取得
				String prcDiv = (String)childMap.get("prc_div");
				String teiseiKh = (String)childMap.get("prc_teisei_kh");

				// 追加行の場合
				if (JACStrConst.PRC_ADJ_DIV_ADD.equals(prcDiv))
				{
					returnMap.put("div_adj_prc", JACStrConst.PRC_ADJ_DIV_ADD);
					returnMap.put("div_adj_prc_nm", JACStrConst.PRC_ADJ_DIV_ADD_NM);
					if (JACStrConst.PRC_TEISEI_KH_PSB.equals(teiseiKh))
					{
						returnMap.put("key_svc_kei_no", (String)childMap.get("svc_kei_no_out"));
					}
					else
					{
						returnMap.put("div_adj_prc", JACStrConst.KARA_MOJI);
					}
				}
				// 変更行の場合
				else if (JACStrConst.PRC_ADJ_DIV_CHG.equals(prcDiv))
				{
					if (JACStrConst.PRC_TEISEI_KH_PSB.equals(teiseiKh))
					{
						returnMap.put("div_adj_prc", JACStrConst.PRC_ADJ_DIV_CHG);
					}
					returnMap.put("div_adj_prc_nm", JACStrConst.PRC_ADJ_DIV_CHG_NM);
				}
				// 削除行の場合
				else if (JACStrConst.PRC_ADJ_DIV_DEL.equals(prcDiv))
				{
					if (JACStrConst.PRC_TEISEI_KH_PSB.equals(teiseiKh))
					{
						returnMap.put("div_adj_prc", JACStrConst.PRC_ADJ_DIV_DEL);
					}
					returnMap.put("div_adj_prc_nm", JACStrConst.PRC_ADJ_DIV_DEL_NM);
				}
				// 内訳情報をリストに格納
				returnList.add(returnMap);
			}
		}
		// 内訳情報リストを返却
		return returnList;
	}

	/**
	 * 料金調整/料金変更（ECH0101D011/ECH0101D012）の結果を抽出し、料金対応記録・対応記録の項目にデータを設定します。<br>
	 * <br>
	 * @param param リクエストパラメータ
	 * @param mapKey 対象マップID
	 * @return 請求内訳情報一時マップリスト
	 * @throws RequestParameterException パラメータ取得で例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private void setTaioKirokInfo(IRequestParameterReadWrite param, String mapId) throws Exception
	{
		String containsListName = null;
		if(MAP_SC_ID_CHSV002601SC.equals(mapId))
		{
			containsListName = "ECH0101D011CBSMsg3List";
		}
		else if(MAP_SC_ID_CHSV002001SC.equals(mapId))
		{
			containsListName = "ECH0101D012CBSMsg3List";
		}
		
		HashMap<String, Object> parentMap = (HashMap<String, Object>)param.getData(mapId);
		
		//請求種別コード取得
		String seikySbtCd = (String)parentMap.get("seiky_sbt_cd");
		
		String seikyAmnt[] = null;
		if(parentMap != null && parentMap.containsKey(containsListName))
		{
			seikyAmnt = getSeikyAmnt(parentMap, containsListName);
		}
		
		if(seikyAmnt != null)
		{
			HashMap<String, Object> prcTaioKirokCCMap = (HashMap<String, Object>)param.getData(JCHPrcTaioKirokAddConstCC.MAP_CC_ID);
			ArrayList<HashMap<String, Object>> prcTaioKirokList = (ArrayList<HashMap<String, Object>>)prcTaioKirokCCMap.get("prc_taio_kirok_list");
			for (int i = 0; i < prcTaioKirokList.size(); i++)
			{
				HashMap<String, Object> prcTaioKirokMap = prcTaioKirokList.get(i);
				
				// 変更前金額
				if (seikyAmnt[0] != null)
				{
					prcTaioKirokMap.put(JCHPrcTaioKirokAddConstCC.MAP_KEY_CHG_BF_AMNT, seikyAmnt[0]);
				}
				else
				{
					prcTaioKirokMap.put(JCHPrcTaioKirokAddConstCC.MAP_KEY_CHG_BF_AMNT, "");
				}
				// 変更後金額
				if (seikyAmnt[1] != null)
				{
					prcTaioKirokMap.put(JCHPrcTaioKirokAddConstCC.MAP_KEY_CHG_AF_AMNT, seikyAmnt[1]);
				}
				else
				{
					prcTaioKirokMap.put(JCHPrcTaioKirokAddConstCC.MAP_KEY_CHG_AF_AMNT, "");
				}
				
				// 入金取消の場合、料金対応記録種別詳細コードを変更
				if (seikyAmnt[1] == null || ("0".equals(seikyAmnt[1])))
				{
					String taioKirokSbtDtlCd = (String)prcTaioKirokMap.get(JCHPrcTaioKirokAddConstCC.MAP_KEY_PRC_TAIO_KIROK_SBT_DTL_CD);
					if (taioKirokSbtDtlCd.equals(JACStrConst.TKRK_SBTD_SEIKY_AMNT_ADJ))
					{
						// 料金調整オンライン：請求金額調整 → 料金調整オンライン：請求削除
						taioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_SEIKY_DEL_ADJ;
					}
					else if (taioKirokSbtDtlCd.equals(JACStrConst.TKRK_SBTD_SEIKY_AMNT_CHG))
					{
						//OM-2014-0003792 ADD START
						// 料金変更オンライン：請求金額変更 → 料金変更オンライン：請求削除
						//taioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_SEIKY_DEL_CHG;
						
						
						if(seikySbtCd != null && !JACStrConst.KARA_MOJI.equals(seikySbtCd) && JACStrConst.SIKYSHBTS_JUIJ_SEIKY.equals(seikySbtCd))
						{
							// 随時請求削除 → 料金変更オンライン：請求削除
							taioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_ZUIJI_SEIKY_DEL;
						}
						else
						{
							// 料金変更オンライン：請求金額変更 → 料金変更オンライン：請求削除
							taioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_SEIKY_DEL_CHG;
						}
						//OM-2014-0003792 ADD END
					}
					else if (taioKirokSbtDtlCd.equals(JACStrConst.TKRK_SBTD_SEIKY_AMNT_ADJ_BATCH))
					{
						// 料金調整バッチ：請求金額調整 → 料金調整バッチ：請求削除
						taioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_SEIKY_DEL_ADJ_BATCH;
					}
					else if (taioKirokSbtDtlCd.equals(JACStrConst.TKRK_SBTD_SEIKY_AMNT_CHG_BATCH))
					{
						// 料金変更バッチ：請求金額変更 → 料金変更バッチ：請求削除
						taioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_SEIKY_DEL_CHG_BATCH;
					}
					prcTaioKirokMap.put(JCHPrcTaioKirokAddConstCC.MAP_KEY_PRC_TAIO_KIROK_SBT_DTL_CD, taioKirokSbtDtlCd);
					
					//OM-2014-0003792 ADD START
					if(JACStrConst.TKRK_SBTD_ZUIJI_SEIKY_DEL.equals(taioKirokSbtDtlCd))
					{
						prcTaioKirokMap.put(JCHPrcTaioKirokAddConstCC.MAP_KEY_TITLE, JACStrConst.ZUIJI_SEIKY_DEL);
					}
					//OM-2014-0003792 ADD END
					
					
					HashMap<String, Object> taioKirokCCMap = (HashMap<String, Object>)param.getData(JACStrConst.TAIOKIROKADDCC_MAP_ID);
					if (taioKirokCCMap != null)
					{
						if(taioKirokCCMap.containsKey("taio_kirok_add_list"))
						{
							ArrayList<HashMap<String, Object>> taioKirokList = (ArrayList<HashMap<String, Object>>)taioKirokCCMap.get("taio_kirok_add_list");
							for (HashMap<String, Object> taioKirokMap : taioKirokList)
							{
								taioKirokMap.put("prc_taio_kirok_dtl_bunrui_cd", taioKirokSbtDtlCd);
								ArrayList<HashMap<String, Object>> ctgrList = (ArrayList<HashMap<String, Object>>)taioKirokMap.get("rsp_ctgr_list");
								for (HashMap<String, Object> ctgrMap : ctgrList)
								{
									ctgrMap.put("prc_taio_kirok_dtl_bunrui_cd", taioKirokSbtDtlCd);
								}
							}
						}
					}
				}
			}
		}
	}
	
	/**
	 * 請求金額(前)/(後)取得処理.<br>
	 * @param HashMap<String, Object>
	 * @param String リストキー
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private String[] getSeikyAmnt(HashMap<String, Object> parentMap, String listKey) throws Exception
	{
		// 請求額(後)
		String seikyAmntAf = null;
		// 請求額(前)
		String seikyAmntBf = null;
		
		ArrayList childList = (ArrayList)parentMap.get(listKey);
		
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			
			// 金額
			String amnt = (String)childMap.get("amnt_sum_seiky");
			// 料金項目コード名称
			String prcKmkCdName = (String)childMap.get("prc_kmk_cd_name_out_sum_seiky");
			
			// 請求額(前)
			if (JACStrConst.SEIKY_AMNT_BF.equals(prcKmkCdName))
			{
				seikyAmntBf = amnt;
			}
			// 請求額(後)
			else if (JACStrConst.SEIKY_AMNT_AF.equals(prcKmkCdName))
			{
				seikyAmntAf = amnt;
			}
		}
		
 		String[] seikyAmntArray = new String[2];
 		seikyAmntArray[0] = seikyAmntBf;
 		seikyAmntArray[1] = seikyAmntAf;
		
		return seikyAmntArray;
	}
	
	//ANK-4468-00-00 ADD START
	/**
	 * シンプルプラングループ計変更情報取得
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @throws Exception 
	 */
	public void getChangeGroupKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JCHGetChangeGroupKeiInfCC changeGroupKeiCC = new JCHGetChangeGroupKeiInfCC();

		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(MAP_CC_ID_GETCHANGEGROUPKEIINFCC);

		if (inMap == null)
		{
			inMap = new HashMap<String, Object>();
			param.setData(MAP_CC_ID_GETCHANGEGROUPKEIINFCC, inMap);
		}
		
		//ANK-4468-00-01 ADD START
		inMap.put("func_code", JPCModelConstant.FUNC_CD_1);
		//ANK-4468-00-01 ADD END
		
		// ANK-4427-10-00 ADD START
		HashMap<String, Object> PRCCHOSEIHENKOCREATECCMap = (HashMap<String, Object>)param.getData("PRCCHOSEIHENKOCREATECC");

		// 請求年月
		String seikyYm = (String)PRCCHOSEIHENKOCREATECCMap.get("seiky_ym");
		inMap.put("key_seiky_ym", seikyYm);
		// ANK-4427-10-00 ADD END
		changeGroupKeiCC.getChangeGroupKeiInf(handle, param, MAP_CC_ID_GETCHANGEGROUPKEIINFCC);
	}
	
	/**
	 * シンプルプランID計の判定。
	 * 
	 * @param childList
	 * @param simpleIdList
	 * @return
	 * @throws Exception 
	 */
	//ANK-4468-00-01 MOD START
//	 private boolean simpleIdJudge(ArrayList childList, ArrayList <String> simpleIdList1)
	 private boolean simpleIdJudge(ArrayList childList, ArrayList <String> simpleIdList1, String mapId) throws Exception
	//ANK-4468-00-01 MOD END
	{
		 boolean prcKmkNmFlg = false;
			
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap<String, String> childMap = (HashMap<String, String>)childList.get(i);
			
			//ANK-4468-00-01 ADD START
			// 料金調整区分が"03"の場合、シンプルプランID計の判定を行わない
			String prcDiv = (String)childMap.get("prc_div");
			if(!JKKStringUtil.isNullEmpty(prcDiv) && JACStrConst.PRC_ADJ_DIV_DEL.equals(prcDiv))
			{
				continue;
			}
			//ANK-4468-00-01 ADD END
			//ANK-4468-00-01 DEL START
//			StringBuffer str_Buff = new StringBuffer();
//			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PRC_GRP_CD_OUT));
//			str_Buff.append(",");
//			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PCRS_CD_OUT));
//			str_Buff.append(",");
//			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PRC_SVC_CD_OUT));
//			str_Buff.append(",");
//			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PRC_KMK_CD_OUT));
//			String cdJoin = str_Buff.toString();
//			
//			StringBuffer str_Buff2 = new StringBuffer();
//			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PRC_GRP_CD_OUT));
//			str_Buff.append(",");
//			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PCRS_CD_OUT));
//			str_Buff.append(",");
//			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PRC_SVC_CD_OUT));
//			str_Buff.append(",");
//			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PRC_KMK_CD_OUT));
//			String cdJoin2 = str_Buff2.toString();
			//ANK-4468-00-01 DEL END
			//ANK-4468-00-01 MOD START
			// シンプルプランID計の業務パラメータ設定値が請求内訳の料金グループコード、料金コースコード、料金サービスコード、料金項目コードと一致する場合
//			if (simpleIdList1.contains(cdJoin) || simpleIdList1.contains(cdJoin2))
			if (simpleIdList1.contains(simpleCdJoin(childMap, mapId)))
			//ANK-4468-00-01 MOD END
			{
				//シンプルプランＩＤ計判定フラグ
				prcKmkNmFlg = true;
				break;
			}
		}
		return prcKmkNmFlg;
	}
	
	/**
	 * シンプルプランコードの文字列結合。
	 * 
	 * @param childMap
	 * @param mapId
	 * @return
	 */
	
	public String simpleCdJoin(HashMap childMap, String mapId) throws Exception
	{
		StringBuffer str_Buff = new StringBuffer();
		if(MAP_SC_ID_CHSV002601SC.equals(mapId))
		{
			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PRC_GRP_CD_OUT));
			str_Buff.append(",");
			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PCRS_CD_OUT));
			str_Buff.append(",");
			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PRC_SVC_CD_OUT));
			str_Buff.append(",");
			str_Buff.append(childMap.get(ECH0101D011CBSMsg2List.PRC_KMK_CD_OUT));
		}
		
		else if(MAP_SC_ID_CHSV002001SC.equals(mapId))
		{
			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PRC_GRP_CD_OUT));
			str_Buff.append(",");
			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PCRS_CD_OUT));
			str_Buff.append(",");
			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PRC_SVC_CD_OUT));
			str_Buff.append(",");
			str_Buff.append(childMap.get(ECH0101D012CBSMsg2List.PRC_KMK_CD_OUT));
		}
		return str_Buff.toString();
	}
	//ANK-4468-00-00 ADD END
	
	// ▼▼ クラス内共通処理 ▼▼
	/**
	 * 項番を「zzz9」形式で返却します。
	 * @param arg0 対象文字列
	 * @return "対象文字列"
	 */
	private String editKouban(int arg0)
	{
		Integer argTmp = arg0;
		String zero = "0000";
		String kouban = zero + argTmp;
		return kouban.substring(kouban.length() - 4);
		
	}

	/**
	 * 請求年月yyyyMMを「yyyy年MM月分」で返却します。
	 * @param arg0 対象文字列
	 * @return "対象文字列"
	 */
	private String editSeikyYm(String arg0)
	{
		String seikyY = arg0.substring(0,4);
		String seikyM = arg0.substring(4,6);
		return seikyY + "年" + seikyM + "月分";
		
	}

	/**
	 * 文字列を「"」で囲みます。
	 * @param arg0 対象文字列
	 * @return "対象文字列"
	 */
	private String getStringToDblQuote(String arg0)
	{
		return SINGLE_DBLQUOTE + arg0 + SINGLE_DBLQUOTE;
		
	}

	/**
	 * NULLか空文字の判定処理.<br>
	 * <br>
	 * 
	 * @param strMoji 判定文字
	 * @return 判定結果 true:Null か 空文字
	 */
	private boolean isNullOrEmpty(String strMoji)
	{
		boolean isEmpty = false;

		if (strMoji == null || JACStrConst.KARA_MOJI.equals(strMoji))
		{
			isEmpty = true;
		}

		return isEmpty;
	}

	/**
	 * 日時書式(yyyyMMddHHmmss)を基に(HH:mm:ss)を返却する.<br>
	 * <br>
	 * 
	 * @param opeDate 対象文字列（時間）
	 * @return 抽出結果
	 */
	private String dateFormatHms(String opeDate)
	{
		String hmsHh = opeDate.substring(8, 10);
		String hmsMm = opeDate.substring(10, 12);
		String hmsSs = opeDate.substring(12, 14);

		return hmsHh + TIME_CONNECTOR + hmsMm + TIME_CONNECTOR + hmsSs;
	}

	/**
	 * 左辺から右辺を減算します。
	 * 
	 * @param str1 計算値（左辺）
	 * @param str2 計算値（右辺）
	 * @param isNullToZero Nullを0に置き換えて計算するかを判断
	 * @return 計算結果
	 */
	private String calcSubtraction(String str1, String str2, Boolean isNullToZero)
	{

		if (isNullToZero)
		{
			if (isNullOrEmpty(str1))
			{
				str1 = "0";
			}

			if (isNullOrEmpty(str2))
			{
				str2 = "0";
			}
		}
		else
		{
			if (isNullOrEmpty(str1) || isNullOrEmpty(str2))
			{
				return null;
			}
		}

		BigDecimal val1 = new BigDecimal(str1);
		BigDecimal val2 = new BigDecimal(str2);

		BigDecimal rtnValue = val1.subtract(val2);

		return rtnValue.toString();
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>CSV出力用に渡された値をバイト配列へ変換する。
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param str 変換する文字列
	 * @param encoding 変換するエンコーディング
	 * @return 変換されたバイト配列
	 */
	public byte[] toBytes(String str)
	{
		try
		{
			byte[] fileByte = new byte[0];
			
			fileByte = str.getBytes(JACStrConst.ENCODE_MS932);
			
			// バイト変換
			return fileByte;
			
		}
		catch (UnsupportedEncodingException e)
		{
			return null;
		}
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>改行コード(CR-LF)を空文字に変換します。
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param target 対象文字列
	 * @return 改行削除後の文字列
	 */
	private String delCrlf(String target) {
		if(target == null)
		{
			return target;
		}
		else if (target.isEmpty())
		{
			return target;
		}
		else
		{
			return target.replaceAll(CR_LF, JACStrConst.KARA_MOJI);
		}
	}
	// ▲▲ クラス内共通処理 ▲▲
}
