/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：ACW01402SFLogic
 *	ソースファイル名：ACW01402SFLogic.java
 *	作成者			：富士通
 *	日付			：2012年02月15日
 *＜機能概要＞
 *	FTTH通信量登録画面のビューロジック部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/02/15	富士通		新規作成
 *	v4.00.00	2013/05/08	FJ)高川		メッセージ領域背景色対応
 *
 **********************************************************************/
package eo.web.webview.ACW01402SF;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHPageTransferUtil;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.mapping.ACSV0025_ACSV0025OPDBMapper;
import eo.web.webview.mapping.ACSV0026_ACSV0026OPDBMapper;

/**
 * FTTH通信量登録画面のビューロジックを提供します。
 * <p>
 * <BR>
 * 
 * @author 富士通
 */
public class ACW01402SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID:FTTH通信量一覧情報取得 */
	private static final String USECASE_ID_ACSV0025 = "ACSV0025";

	/** ユースケースID:FTTH通信量登録 */
	private static final String USECASE_ID_ACSV0026 = "ACSV0026";

	/** メッセージＩＤ(検索結果:指定されたデータが存在しません。) */
	private static final String MESSAGE_ID_SSN_TRGT_NONE = "EKB0330--I";

	/** 課金非課金コード:非課金 */
	private static final String HICHRG_CD_HI = "2";
	/** 課金非課金名称:非課金 */
	private static final String HICHRG_NM_HI = "非";

	/** 改行文字 */
	private static final String LINE_SEP = "line.separator";

	/** 退避．サービス契約番号 */
	private String bkSvcKeiNo = JACStrConst.KARA_MOJI;
	
	/** 退避．請求契約番号 */
	private String bkSekyKeiNo = JACStrConst.KARA_MOJI;

	/** 退避．請求年月 */
	private String bkSekyYm = JACStrConst.KARA_MOJI;
	/**
	 * 明細一覧ソートキー
	 */
	private static final String[] DETAIL_LIST_SORT_KEYS = { "use_ymd" };

	/**
	 * FTTH通信量登録画面の初期表示処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを判定して画面IDに対応する初期表示処理を呼び出す
		String screenId = commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		if (screenId.equals(JACScreenConst.SCREEN_ID_ACW01402))
		{
			initScreen();
		}

		return true;
	}

	/**
	 * FTTH通信量登録確認画面へ遷移を行います。<br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean registCfm() throws Exception
	{
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// FTTH通信量登録サービス実行
		this.execACSV0026(paramBeans, JPCModelConstant.FUNC_CD_2); // チェックのみ

		// メッセージ領域の背景色の設定
		JCCWebCommon.setMessageAreaBackColor(this, "1");

		// メッセージの設定
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[] {"登録"});

		// 遷移先画面を設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01403);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01403);

		return true;
	}

	/**
	 * 戻るボタンを押下した場合、FTTH通信量一覧画面へ遷移し再検索を行います。<br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean back() throws Exception
	{
		// 遷移先画面IDを取得し、戻り遷移共通処理を呼出す
		return JCHPageTransferUtil.backTransfer(this, JCCWebCommon.getScreenId(this));
	}

	/**
	 * 確定完了ボタン押下した場合、FTTH通信量登録処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean fixFin() throws Exception
	{
		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// FTTH通信量登録サービス実行
		this.execACSV0026(paramBeans, JPCModelConstant.FUNC_CD_1); // チェック＆登録

		// 明細インデックスをクリア
		paramBeans[0].sendMessageString(ACW01402SFConst.DETAIL_ICRN_SEL_INDEX, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.KARA_MOJI);

		// 遷移先画面を設定する
		this.back();

		return true;
	}

	/**
	 * 修正ボタン押下した場合、入力した内容を破棄してFTTH通信量登録画面に遷移します。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean shusei() throws Exception
	{
		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// 明細一覧情報の初期化
		paramBeans[0].getDataBeanArray(ACW01402SFConst.DETAIL_INFO).clearArray();

		// FTTH通信量一覧情報取得サービス実行
		this.execACSV0025(paramBeans);

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面を設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01402);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01402);

		return true;
	}

	/**
	 * FTTH通信量登録画面の初期表示処理を行います。 <br>
	 */
	private void initScreen()
	{
		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// FTTH通信量一覧情報取得サービス実行
		this.execACSV0025(paramBeans);
	}

	/**
	 * FTTH通信量登録画面初期表示サービスを実行します。 <br>
	 * 
	 * @param paramBeans FTTH通信量登録画面サービスフォームBean
	 */
	private void execACSV0025(X31SDataBeanAccess[] paramBeans)
	{
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_ACSV0025);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		ACSV0025_ACSV0025OPDBMapper mapper = new ACSV0025_ACSV0025OPDBMapper();

		mapper.setACSV002501SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0591B010:通信量検索情報照会
		mapper.setACSV002502SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0601B030:通信量合計利用年月一覧照会
		mapper.setACSV002503SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0591B020:通信量明細一覧照会
		mapper.setACSV002504SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0601B020:通信量合計情報照会

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getACSV002501SC(paramBeans, outputMap);
		mapper.getACSV002503SC(paramBeans, outputMap);
		mapper.getACSV002504SC(paramBeans, outputMap);

		// 背景色の設定
		this.setDspCtrlValue(paramBeans);

		// ボタン制御値の設定
		this.setDisabledCntrlValue(paramBeans);

		// エラーメッセージの設定
		this.setErrorMessage(paramBeans);
	}

	/**
	 * FTTH通信量登録サービスを実行します。 <br>
	 * 
	 * @param paramBeans FTTH通信量登録画面サービスフォームBean
	 * @param funcCd 機能コード
	 */
	private void execACSV0026(X31SDataBeanAccess[] paramBeans, String funcCd)
	{
		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_ACSV0026);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		ACSV0026_ACSV0026OPDBMapper mapper = new ACSV0026_ACSV0026OPDBMapper();
		
		mapper.setACSV002601SC(paramBeans, inDataMap, funcCd); // EAC0591D010:通信量情報明細登録
		mapper.setACSV002602SC(paramBeans, inDataMap, funcCd); // EAC0601C010:通信量情報合計更新
		mapper.setACSV002603SC(paramBeans, inDataMap, funcCd); // ECC0111D010:ディレイド処理依頼登録

		// 登録結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// バイナリ用Map
		HashMap<String, Object> attachMap = null;
		attachMap = new HashMap<String, Object>();

		// 機能コード = "1"の場合
		if(funcCd.equals(JPCModelConstant.FUNC_CD_1))
		{
		this.bkSvcKeiNo = bean.sendMessageString(ACW01402SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);

		attachMap = getAttachMap(bkSekyKeiNo, bkSekyYm, bkSvcKeiNo);	

		}
		
		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap, attachMap);

		if (JPCModelConstant.FUNC_CD_2.equals(funcCd))
		{
			// 明細一覧情報Beanの作成
			this.makeDetailInfoBean(paramBeans, outputMap);

			// 補正通信量合計の再計算
			this.reCalcGokeiInfo(paramBeans);

			// 背景色の設定
			this.setDspCtrlValue(paramBeans);

			// ボタン制御値の設定
			this.setDisabledCntrlValue(paramBeans);
		}

	}

	/**
	 * エラーメッセージ設定処理。 <br>
	 * 
	 * @param bean FTTH通信量登録画面Bean
	 */
	private void setErrorMessage(X31SDataBeanAccess[] bean)
	{
		if (isExistDetailInfo(bean) == false)
		{
			JCCWebCommon.setMessageInfo(this, MESSAGE_ID_SSN_TRGT_NONE);
		}
	}

	/**
	 * 明細一覧情報の存在を判定します。 <br>
	 * 
	 * @param bean FTTH通信量登録画面Bean
	 */
	private boolean isExistDetailInfo(X31SDataBeanAccess[] bean)
	{
		boolean isExist = false;

		X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01402SFConst.DETAIL_INFO);
		if (detailInfo.getCount().intValue() > 0)
		{
			isExist = true;
		}

		return isExist;
	}

	/**
	 * 明細一覧情報の背景色を設定します。 <br>
	 * 
	 * @param bean FTTH通信量登録画面Bean
	 */
	private void setDspCtrlValue(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01402SFConst.DETAIL_INFO);
		for (int i = 0; i < detailInfo.getCount().intValue(); i++)
		{
			X31SDataBeanAccess subBean = detailInfo.getDataBean(i);

			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			if (i % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			}
			subBean.sendMessageString(ACW01402SFConst.DSP_CNTRL_VALUE_01, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}
	}

	/**
	 * 明細一覧情報の有無により各ボタンの制御値を設定します。 <br>
	 * 
	 * @param bean FTTH通信量登録画面Bean
	 */
	private void setDisabledCntrlValue(X31SDataBeanAccess[] bean)
	{
		String jsfDisabledCntrlValue = JACStrConst.CTL_VALUE_TRUE;
		String htmlDisabledCntrlValue = JACStrConst.CTL_VALUE_DISABLED;

		// ラジオボタン非活性制御値
		bean[0].sendMessageString(ACW01402SFConst.DSBL_CTL_HTML_RADIO_BTN, X31CWebConst.DATABEAN_SET_VALUE, htmlDisabledCntrlValue);

		// 明細一覧が1件以上かつ利用月が当月の場合
		X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01402SFConst.DETAIL_INFO);
		if (0 < detailInfo.getCount().intValue())
		{
			jsfDisabledCntrlValue = JACStrConst.CTL_VALUE_FALSE;
			htmlDisabledCntrlValue = JACStrConst.KARA_MOJI;
		}

		// 利用日非活性制御値
		bean[0].sendMessageString(ACW01402SFConst.DSBL_CTL_JSF_USE_HI, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);
		// 補正通信量非活性制御値
		bean[0].sendMessageString(ACW01402SFConst.DSBL_CTL_JSF_HOSEI_TSRYO, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);

	}

	/**
	 * I/Fの戻り値より明細一覧情報Beanを作成します。 <br>
	 * 
	 * @param bean FTTH通信量登録画面Bean
	 * @param outputMap 登録結果格納用マップ
	 */
	private void makeDetailInfoBean(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		// ソート用リストの生成
		ArrayList<HashMap<String, Comparable<String>>> sortList = new ArrayList<HashMap<String, Comparable<String>>>();

		X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01402SFConst.DETAIL_INFO);
		X31SDataBeanAccess subBean = null;

		// 明細一覧情報Beanよりリストを作成
		for (int i = 0; i < detailInfo.getCount().intValue(); i++)
		{
			// ソート用マップ
			HashMap<String, Comparable<String>> rcdMap = new HashMap<String, Comparable<String>>();

			subBean = detailInfo.getDataBean(i);

			// 既存レコードをマップに設定
			rcdMap.put("seiky_kei_no", subBean.sendMessageString(ACW01402SFConst.SEIKY_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("pcrs_cd", subBean.sendMessageString(ACW01402SFConst.PCRS_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("prc_svc_cd", subBean.sendMessageString(ACW01402SFConst.PRC_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("ninsho_id", subBean.sendMessageString(ACW01402SFConst.NINSHO_ID_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("seiky_ym", subBean.sendMessageString(ACW01402SFConst.SEIKY_YM_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("use_ymd", subBean.sendMessageString(ACW01402SFConst.USE_YMD_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("use_tsryo", subBean.sendMessageString(ACW01402SFConst.USE_TSRYO_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("hosei_tsryo", subBean.sendMessageString(ACW01402SFConst.HOSEI_TSRYO_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("goukei_tsryo", subBean.sendMessageString(ACW01402SFConst.GOKEI_TSRYO_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("hichrg", subBean.sendMessageString(ACW01402SFConst.HICHRG_01, X31CWebConst.DATABEAN_GET_VALUE));
			rcdMap.put("upd_dtm", subBean.sendMessageString(ACW01402SFConst.UPD_DTM_BF_01, X31CWebConst.DATABEAN_GET_VALUE));

			sortList.add(rcdMap);
		}

		HashMap<String, Object> parentMap = null;
		if (outputMap.containsKey("ACSV002601SC"))
		{
			parentMap = (HashMap) outputMap.get("ACSV002601SC");
		}

		// 新規に登録するMAP
		HashMap<String, Comparable<String>> newMap = new HashMap<String, Comparable<String>>();
		// 1件目の明細一覧情報
		X31SDataBeanAccess prevBean = detailInfo.getDataBean(0);

		// 新規登録するMAPをリストに追加
		// 請求契約番号
		newMap.put("seiky_kei_no", prevBean.sendMessageString(ACW01402SFConst.SEIKY_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE));
		
		this.bkSekyKeiNo = prevBean.sendMessageString(ACW01402SFConst.SEIKY_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 料金コースコード
		newMap.put("pcrs_cd", prevBean.sendMessageString(ACW01402SFConst.PCRS_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 料金サービスコード
		newMap.put("prc_svc_cd", prevBean.sendMessageString(ACW01402SFConst.PRC_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 認証ＩＤ
		newMap.put("ninsho_id", prevBean.sendMessageString(ACW01402SFConst.NINSHO_ID_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 請求年月
		newMap.put("seiky_ym", prevBean.sendMessageString(ACW01402SFConst.SEIKY_YM_01, X31CWebConst.DATABEAN_GET_VALUE));
		
		this.bkSekyYm = prevBean.sendMessageString(ACW01402SFConst.SEIKY_YM_01, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 利用年月 + 利用日
		newMap.put("use_ymd", bean[0].sendMessageString(ACW01402SFConst.USE_YM, X31CWebConst.DATABEAN_GET_VALUE)
				+ bean[0].sendMessageString(ACW01402SFConst.INPUT_USE_HI, X31CWebConst.DATABEAN_GET_VALUE));
		// 利用通信量（ＭＢ）
		newMap.put("use_tsryo", (String) parentMap.get("use_tsryo"));
		// 補正通信量（ＭＢ）
		String hoseiTsryo = JCHWebCommon.calcDivide_ROUND_UP((String) parentMap.get("hosei_tsryo_out"), "1000", 2, true);
		newMap.put("hosei_tsryo", hoseiTsryo);
		// 合計（利用通信量＋補正）
		newMap.put("goukei_tsryo", JCHWebCommon.calcAdd((String) parentMap.get("use_tsryo"), hoseiTsryo, true));
		// 非課金
		String hichrg = (String) parentMap.get("chrg_kh");
		newMap.put("hichrg", JACStrConst.KARA_MOJI);
		if (JCHWebCommon.isNotNullOrEmpty(hichrg))
		{
			if (HICHRG_CD_HI.equals(hichrg))
			{
				newMap.put("hichrg", HICHRG_NM_HI);
			}
		}
		// 更新年月日時分秒
		newMap.put("upd_dtm", (String) parentMap.get("upd_dtm"));

		sortList.add(newMap);

		// キー値でソート
		Collections.sort(sortList, new Comparator<Object>()
		{
			/**
			 * ソート処理
			 * 
			 * @param sortList
			 * @param workObj
			 * @return int
			 */
			public int compare(Object sortList, Object workObj)
			{
				return JCHWebCommon.compare(sortList, workObj, DETAIL_LIST_SORT_KEYS);
			}
		});

		X31SDataBeanAccessArray detailInfoNew = bean[0].getDataBeanArray(ACW01402SFConst.DETAIL_INFO);

		// 明細一覧情報のクリア
		detailInfoNew.clearArray();

		X31SDataBeanAccess newBean = null;
		for (int i = 0; i < sortList.size(); i++)
		{
			subBean = null;

			HashMap<String, Comparable<String>> childMap = (HashMap<String, Comparable<String>>) sortList.get(i);

			if (childMap.size() > 0)
			{
				newBean = detailInfoNew.addDataBean();
				// 明細一覧情報.請求契約番号 ← 請求契約番号
				newBean.sendMessageString(ACW01402SFConst.SEIKY_KEI_NO_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("seiky_kei_no"));

				// 明細一覧情報.料金コースコード ← 料金コースコード
				newBean.sendMessageString(ACW01402SFConst.PCRS_CD_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("pcrs_cd"));

				// 明細一覧情報.料金サービスコード ← 料金サービスコード
				newBean.sendMessageString(ACW01402SFConst.PRC_SVC_CD_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("prc_svc_cd"));

				// 明細一覧情報.認証ＩＤ ← 認証ＩＤ
				newBean.sendMessageString(ACW01402SFConst.NINSHO_ID_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("ninsho_id"));

				// 明細一覧情報.請求年月 ← 請求年月
				newBean.sendMessageString(ACW01402SFConst.SEIKY_YM_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("seiky_ym"));

				// 明細一覧情報.利用年月日 ← 利用年月日
				newBean.sendMessageString(ACW01402SFConst.USE_YMD_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("use_ymd"));

				// 明細一覧情報.利用通信量（ＭＢ） ← 利用通信量（ＭＢ）
				newBean.sendMessageString(ACW01402SFConst.USE_TSRYO_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("use_tsryo"));

				// 明細一覧情報.補正通信量（ＭＢ） ← 補正通信量（ＭＢ）
				newBean.sendMessageString(ACW01402SFConst.HOSEI_TSRYO_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("hosei_tsryo"));

				// 明細一覧情報.合計（利用通信量＋補正） ← 合計（利用通信量＋補正）
				newBean.sendMessageString(ACW01402SFConst.GOKEI_TSRYO_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("goukei_tsryo"));

				// 明細一覧情報.非課金 ← 非課金
				newBean.sendMessageString(ACW01402SFConst.HICHRG_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("hichrg"));

				// 明細一覧情報.更新年月日時分秒 ← 更新年月日時分秒
				newBean.sendMessageString(ACW01402SFConst.UPD_DTM_BF_01, X31CWebConst.DATABEAN_SET_VALUE, (String) childMap.get("upd_dtm"));
			}
		}
	}

	/**
	 * 合計情報の再計算を行います。 <br>
	 * 
	 * @param bean FTTH通信量登録画面Bean
	 */
	private void reCalcGokeiInfo(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray gokeiInfo = bean[0].getDataBeanArray(ACW01402SFConst.GOKEI_INFO);

		if (gokeiInfo.getCount().intValue() > 0)
		{
			String hoseiGk = null;

			// 選択されている補正通信量
			X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01402SFConst.DETAIL_INFO);
			// 明細一覧情報Beanよりリストを作成
			for (int i = 0; i < detailInfo.getCount().intValue(); i++)
			{
				X31SDataBeanAccess detailBean = detailInfo.getDataBean(i);
				String hoseiTsryo = detailBean.sendMessageString(ACW01402SFConst.HOSEI_TSRYO_01, X31CWebConst.DATABEAN_GET_VALUE);
				// 補正通信量合計 + 補正通信量(入力値)を加算
				hoseiGk = JCHWebCommon.calcAdd(hoseiGk, hoseiTsryo, true);
			}

			X31SDataBeanAccess subBean = gokeiInfo.getDataBean(0);
			// 加算結果の小数点以下切り上げ
			String hoseiTsryoGk = JCHWebCommon.calcDivide_ROUND_UP(hoseiGk, "1", 0, true);
			// 補正通信量合計に計算結果をセット
			subBean.sendMessageString(ACW01402SFConst.HOSEI_TSRYO_GOKEI_02, X31CWebConst.DATABEAN_SET_VALUE, hoseiTsryoGk);

			String useGk = subBean.sendMessageString(ACW01402SFConst.USE_TSRYO_GOKEI_02, X31CWebConst.DATABEAN_GET_VALUE);
			// 利用通信量合計 + 補正通信量合計を加算
			String gokei = JCHWebCommon.calcAdd(useGk, hoseiTsryoGk, true);
			// 合計に計算結果をセット(利用通信量合計 + 補正通信量合計)
			subBean.sendMessageString(ACW01402SFConst.GOKEI_TSRYO_GOKEI_02, X31CWebConst.DATABEAN_SET_VALUE, gokei);

			String mryoTsryo = subBean.sendMessageString(ACW01402SFConst.MRYO_TSRYO_02, X31CWebConst.DATABEAN_GET_VALUE);
			// 合計 - 無料通信量を減算
			String seikyTg = JCHWebCommon.calcSubtract(gokei, mryoTsryo, true);
			// 請求対象に計算結果をセット(合計 - 無料通信量)
			subBean.sendMessageString(ACW01402SFConst.SEIKY_TG_TSRYO_02, X31CWebConst.DATABEAN_SET_VALUE, seikyTg);
		}
	}
	
	/**
	 * attachMapを作成します。<BR />
	 * @param seikyKeiNo 請求契約番号
	 * @param seikyYm 請求年月
	 * @param svcKeiNo サービス契約番号
	 * @return attachMap
	 */
	@SuppressWarnings("unchecked")
	public static HashMap<String, Object> getAttachMap(String seikyKeiNo, String seikyYm, String svcKeiNo) 
	{
		
		StringBuffer sb = new StringBuffer();
		
		sb.append(seikyKeiNo)
		   .append(",")
		   .append(seikyYm)
		   .append(",")
		   .append(svcKeiNo)
		   .append("\r\n");
		
		// バイナリ用Map
		HashMap<String, Object> attachMap = new HashMap<String, Object>();
		
		HashMap<String, Object> fileMap = new HashMap<String, Object>();
		ArrayList fileList = new ArrayList();
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE,  sb.toString().getBytes());
		fileList.add(fileMap);
		attachMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE_LIST, fileList);
		
		return attachMap;
	}

}