/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CHW00106SFLogic
*	ソースファイル名：CHW00106SFLogic.java
*	作成者			：富士通
*	日付			：2011年11月14日
*＜機能概要＞
*	請求書再発行画面のビューロジック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/14	富士通		新規作成
*	v5.00.00	2013/05/08	FJ)高川		メッセージ領域背景色対応
*   v5.00.00	2013/07/03  FJ) 林	   【LT-2013-0000205】 印刷様式：口振領収書のみにてデグレード修正対応
*   v5.00.01	2013/07/15  FJ)近藤    【LT-2013-0000410】 関連チェックエラー時の選択値初期化防止対応
*   v5.00.02	2013/07/31  FJ)小野    【LT-2013-0000616】 一部収納済である請求の、うち消費税が"＊"で表示されない
*   v5.00.03	2013/08/21  FJ)垣内    【OM-2013-0000494】 料金対応記録の金額が０円で表示される
*   v5.00.04	2013/11/11  FJ)小野    【OM-2013-0003528】請求書再発行で窓口の場合、ケイ・オプティコムご利用料金を請求内訳に作成する。
*   v38.00.00	2018/09/03  FJ)麻生    【ANK-3361-00-00】振込用紙発行手数料の変更
*   v52.00.00	2020/10/19	FJ)三原		【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
*	v53.00.00	2021/06/09	FJ)三原		【ANK-4070-00-00】窓口払い手数料の顧客負担方式導入　STEP2
*   v53.00.01	2021/06/18	FJ)三原		【IT1-2021-0000060】エラー時のメッセージ不正
*	v54.00.00	2021/09/01	FJ)西窪		【ANK-4102-00-00】窓口払い手数料の顧客負担方式導入 STEP3
*   v67.00.01	2023/08/21	FJ)中川		【ANK-4415-00-00】口振請求及びWeb申込システム移行 STEP1
*   v71.00.00   2024/04/04  FJ)久山		【ANK-4468-00-00】eo光ネット「シンプルプラン」追加対応
*   v71.00.01   2024/05/20  FJ)久山		【ANK-4468-00-01】eo光ネット「シンプルプラン」追加対応
**********************************************************************/
package eo.web.webview.CHW00106SF;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
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.common.util.JPCUtilCommon;
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.JCHCommonServiceUtil;
import eo.web.webview.common.JCHPageTransferUtil;
import eo.web.webview.common.JCHPulldownUtil;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.mapping.CHSV0038_CHSV0038OPDBMapper;
import eo.web.webview.mapping.CHSV0039_CHSV0039OPDBMapper;


/**
 * 請求書再発行画面のビューロジックを提供します。<p>
 * <BR>
 * @author 富士通
 */
public class CHW00106SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID(請求書再発行画面情報取得) */
	private static final String USECASE_ID_CHSV0038 = "CHSV0038";

	/** ユースケースID(請求書再発行登録) */
	private static final String USECASE_ID_CHSV0039 = "CHSV0039";

	/** マップID */
	private static final String MAP_CC_ID = "TUSHINSVCPRCCHOHYOCC";

	/** メッセージＩＤ(ＮＧワード) */
	private static final String MESSAGE_ID_NG_WORD = "EKB8580-KW";

	/** 発行種別(請求書の再印刷) */
	private static final String PRINT_DIV_REPRINT = "2";
	
	/**
	 * 請求書再発行画面の初期表示処理を行います。
	 * <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_CHW00106))
		{
			initPrintScreen();
		}

		return true;
	}

	/**
	 * 【印刷確認ボタン押下時の処理】
	 * 請求書再発行確認画面に遷移します。
	 * <br>
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean printCfm() throws Exception
	{

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean, commoninfoBean};

		// v5.00.01 2013/07/15 LT-2013-0000410 ADD START
		// 初期化フラグ設定
		paramBeans[0].sendMessageBoolean(CHW00106SFConst.INITIALIZE_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		// v5.00.01 2013/07/15 LT-2013-0000410 ADD END
		
		// 印刷様式の選択値をセット
		String printYoshikiCd = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.PRINT_YOSHIKI_INFO, CHW00106SFConst.PRINT_YOSHIKI_CD_LIST_01, CHW00106SFConst.PRINT_YOSHIKI_CD_SEL_01);

		String printYoshikiNm = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.PRINT_YOSHIKI_INFO, CHW00106SFConst.PRINT_YOSHIKI_NM_DSP_LIST_01, CHW00106SFConst.PRINT_YOSHIKI_CD_SEL_01);

		// 手数料の選択値をセット
		String handCommisionCd = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.HAND_COMMISION_INFO, CHW00106SFConst.HAND_COMMISION_CD_LIST_04, CHW00106SFConst.HAND_COMMISION_CD_SEL_04);

		String handCommisionNm = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.HAND_COMMISION_INFO, CHW00106SFConst.HAND_COMMISION_NM_LIST_04, CHW00106SFConst.HAND_COMMISION_CD_SEL_04);

		String selOutputPrcGrpCd = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.HAND_COMMISION_INFO, CHW00106SFConst.OUTPUT_PRC_GRP_CD_LIST_04, CHW00106SFConst.HAND_COMMISION_CD_SEL_04);

		String selOutPcrsCd = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.HAND_COMMISION_INFO, CHW00106SFConst.OUT_PCRS_CD_LIST_04, CHW00106SFConst.HAND_COMMISION_CD_SEL_04);

		String selOutPrcSvcCd = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.HAND_COMMISION_INFO, CHW00106SFConst.OUT_PRC_SVC_CD_LIST_04, CHW00106SFConst.HAND_COMMISION_CD_SEL_04);

		String selOutPrcKmkCd = JCHPulldownUtil.getSelectedValue(paramBeans, 
				CHW00106SFConst.HAND_COMMISION_INFO, CHW00106SFConst.OUT_PRC_KMK_CD_LIST_04, CHW00106SFConst.HAND_COMMISION_CD_SEL_04);

		paramBeans[0].sendMessageString(CHW00106SFConst.PRINT_YOSHIKI_CD, X31CWebConst.DATABEAN_SET_VALUE, printYoshikiCd);
		paramBeans[0].sendMessageString(CHW00106SFConst.PRINT_YOSHIKI_NM, X31CWebConst.DATABEAN_SET_VALUE, printYoshikiNm);

		paramBeans[0].sendMessageString(CHW00106SFConst.HAND_COMMISION_CD, X31CWebConst.DATABEAN_SET_VALUE, handCommisionCd);
		paramBeans[0].sendMessageString(CHW00106SFConst.HAND_COMMISION_NM, X31CWebConst.DATABEAN_SET_VALUE, handCommisionNm);
		paramBeans[0].sendMessageString(CHW00106SFConst.SEL_OUTPUT_PRC_GRP_CD, X31CWebConst.DATABEAN_SET_VALUE, selOutputPrcGrpCd);
		paramBeans[0].sendMessageString(CHW00106SFConst.SEL_OUT_PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, selOutPcrsCd);
		paramBeans[0].sendMessageString(CHW00106SFConst.SEL_PRC_SVC_CD, X31CWebConst.DATABEAN_SET_VALUE, selOutPrcSvcCd);
		paramBeans[0].sendMessageString(CHW00106SFConst.SEL_OUT_PRC_KMK_CD, X31CWebConst.DATABEAN_SET_VALUE, selOutPrcKmkCd);

		// ANK-3838-00-00 MOD START
		//if (JACStrConst.PRINT_YSK_CD_MADO.equals(printYoshikiCd))
		if (JACStrConst.PRINT_YSK_CD_MADO.equals(printYoshikiCd) || JACStrConst.PRINT_YSK_CD_MADO_CUST.equals(printYoshikiCd))
		// ANK-3838-00-00 MOD END
		{
			// 支払期限日
			String payYear = paramBeans[0].sendMessageString(CHW00106SFConst.PAY_KIGEN_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
			String payMonth = paramBeans[0].sendMessageString(CHW00106SFConst.PAY_KIGEN_MON, X31CWebConst.DATABEAN_GET_VALUE);
			String payDay = paramBeans[0].sendMessageString(CHW00106SFConst.PAY_KIGEN_DAY, X31CWebConst.DATABEAN_GET_VALUE);
			paramBeans[0].sendMessageString(CHW00106SFConst.PAY_KIGEN_YMD, X31CWebConst.DATABEAN_SET_VALUE, payYear + payMonth + payDay);

			// 取扱期限日
			String handingYear = paramBeans[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
			String handingMonth = paramBeans[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_MON, X31CWebConst.DATABEAN_GET_VALUE);
			String handingDay = paramBeans[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_DAY, X31CWebConst.DATABEAN_GET_VALUE);
			paramBeans[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_YMD, X31CWebConst.DATABEAN_SET_VALUE, handingYear + handingMonth + handingDay);

			// バーコード様式名称をセット
			X31SDataBeanAccessArray barcodeInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.BARCODE_YOSHIKI_INFO);
			int barcodeSelIdx = Integer.parseInt(paramBeans[0].sendMessageString(CHW00106SFConst.BARCODE_SELECT_INDEX, X31CWebConst.DATABEAN_GET_VALUE));
			String barcodeCd = barcodeInfo.getDataBean(barcodeSelIdx).sendMessageString(CHW00106SFConst.BARCODE_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
			String barcodeNm = barcodeInfo.getDataBean(barcodeSelIdx).sendMessageString(CHW00106SFConst.BARCODE_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
			paramBeans[0].sendMessageString(CHW00106SFConst.BARCODE_YOSHIKI_CD, X31CWebConst.DATABEAN_SET_VALUE, barcodeCd);
			paramBeans[0].sendMessageString(CHW00106SFConst.BARCODE_YOSHIKI_NM, X31CWebConst.DATABEAN_SET_VALUE, barcodeNm);

		}
		else
		{
			if (JACStrConst.PRINT_YSK_CD_KOZA.equals(printYoshikiCd) || JACStrConst.PRINT_YSK_CD_CRDT.equals(printYoshikiCd))
			{
				// 発行種別名称をセット
				X31SDataBeanAccessArray hakkSbtInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_SBT_INFO);
				int hakkSbtSelIdx = Integer.parseInt(paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_SBT_SELECT_INDEX, X31CWebConst.DATABEAN_GET_VALUE));
				String hakkSbtCd = hakkSbtInfo.getDataBean(hakkSbtSelIdx).sendMessageString(CHW00106SFConst.HAKKO_SBT_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
				String hakkSbtNm = hakkSbtInfo.getDataBean(hakkSbtSelIdx).sendMessageString(CHW00106SFConst.HAKKO_SBT_NM_03, X31CWebConst.DATABEAN_GET_VALUE);
				paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, hakkSbtCd);
				paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_SBT_NM, X31CWebConst.DATABEAN_SET_VALUE, hakkSbtNm);
			}

			// 空文字をセット
			paramBeans[0].sendMessageString(CHW00106SFConst.PAY_KIGEN_YMD, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.KARA_MOJI);
			paramBeans[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_YMD, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.KARA_MOJI);
			paramBeans[0].sendMessageString(CHW00106SFConst.BARCODE_YOSHIKI_NM, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.KARA_MOJI);
		}

		 // サービス実行
		if (!this.execCHSV0039(paramBeans))
		{
			return true;
		}

		// メッセージ領域の背景色の設定
		JCCWebCommon.setMessageAreaBackColor(this, "1");

		// IT1-2021-0000060 ADD START
		// オンライン運用日付
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// 支払期限日
		String payKigenYmd = paramBeans[0].sendMessageString(CHW00106SFConst.PAY_KIGEN_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		if (opeDate != null && !"".equals(opeDate) && payKigenYmd != null && !"".equals(payKigenYmd))
		{
			// 支払期限がオンライン運用日付から数えて6日以内だった場合、エラー
			int year = Integer.parseInt(opeDate.substring(0, 4)); 	// オンライン運用日付　年
			int month = Integer.parseInt(opeDate.substring(4, 6)); 	// オンライン運用日付　月
			int day = Integer.parseInt(opeDate.substring(6, 8)); 	// オンライン運用日付　日
			GregorianCalendar cal = new GregorianCalendar(year, month - 1, day);
			
			// オンライン運用日付から数えて6日間はエラーとなるので、オンライン運用日付に5日足す
			cal.add(GregorianCalendar.DATE, 5);
			
			DecimalFormat df1 = new DecimalFormat("0000");
			DecimalFormat df2 = new DecimalFormat("00");
			String opeDate_5 = df1.format(cal.get(GregorianCalendar.YEAR))
								+ df2.format(cal.get(GregorianCalendar.MONTH) + 1)
								+ df2.format(cal.get(GregorianCalendar.DATE));
			
			// 支払期限年月日が「オンライン運用日付+5日」以内の日付になる場合は、エラー
			if (opeDate_5.compareTo(payKigenYmd) >= 0)
			{
				// エラーメッセージの設定
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF560_KW,
					new String[] {"支払期限日に運用日+6日以降の日付"}, "PAY_KIGEN_YEAR");
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF560_KW,
					new String[] {"支払期限日に運用日+6日以降の日付"}, "PAY_KIGEN_MON");
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF560_KW,
					new String[] {"支払期限日に運用日+6日以降の日付"}, "PAY_KIGEN_DAY");
				
				return false;
			}
		}
		// IT1-2021-0000060 ADD END
		
		// メッセージの設定
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[] {"再発行"});
		
		// ANK-3838-00-00 ADD START
		// 印刷様式が"4"(顧客負担)である、かつ、支払用紙が"1"(コンビニ＋パーフェクト)、かつ、パーフェクト口座有無が"0"(パーフェクト口座なし)である場合
		if (JACStrConst.PRINT_YSK_CD_MADO_CUST.equals(paramBeans[0].sendMessageString(CHW00106SFConst.PRINT_YOSHIKI_CD, X31CWebConst.DATABEAN_GET_VALUE))
			&& JACStrConst.PAY_YOSHI_CONV_PERF.equals(paramBeans[0].sendMessageString(CHW00106SFConst.PAY_YOSHI_SELECT_INDEX, X31CWebConst.DATABEAN_GET_VALUE))
			&& JACStrConst.PKOZA_UM_NASHI.equals(paramBeans[0].sendMessageString(CHW00106SFConst.PKOZA_UM, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// メッセージの設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBB310__I,
				new String[] {"パーフェクト口座を申し込んでいない", "請求書にパーフェクト口座情報が印字されません。"});
		}
		// ANK-3838-00-00 ADD END
		// IT1-2021-0000060 DEL START
//		// ANK-4070-00-00 ADD START
//		// オンライン運用日付
//		String opeDate = JCCWebCommon.getOpeDate(this, null);
//		
//		// 支払期限日
//		String payKigenYmd = paramBeans[0].sendMessageString(CHW00106SFConst.PAY_KIGEN_YMD, X31CWebConst.DATABEAN_GET_VALUE);
//		
//		if (opeDate != null && !"".equals(opeDate) && payKigenYmd != null && !"".equals(payKigenYmd))
//		{
//			// 支払期限がオンライン運用日付から数えて6日以内だった場合、エラー
//			int year = Integer.parseInt(opeDate.substring(0, 4)); 	// オンライン運用日付　年
//			int month = Integer.parseInt(opeDate.substring(4, 6)); 	// オンライン運用日付　月
//			int day = Integer.parseInt(opeDate.substring(6, 8)); 	// オンライン運用日付　日
//			GregorianCalendar cal = new GregorianCalendar(year, month - 1, day);
//			
//			// オンライン運用日付から数えて6日間はエラーとなるので、オンライン運用日付に5日足す
//			cal.add(GregorianCalendar.DATE, 5);
//			
//			DecimalFormat df1 = new DecimalFormat("0000");
//			DecimalFormat df2 = new DecimalFormat("00");
//			String opeDate_5 = df1.format(cal.get(GregorianCalendar.YEAR))
//								+ df2.format(cal.get(GregorianCalendar.MONTH) + 1)
//								+ df2.format(cal.get(GregorianCalendar.DATE));
//			
//			// 支払期限年月日が「オンライン運用日付+5日」以内の日付になる場合は、エラー
//			if (opeDate_5.compareTo(payKigenYmd) >= 0)
//			{
//				// エラーメッセージの設定
//				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF560_KW,
//					new String[] {"支払期限日に運用日+6日以降の日付"}, "PAY_KIGEN_YEAR");
//				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF560_KW,
//					new String[] {"支払期限日に運用日+6日以降の日付"}, "PAY_KIGEN_MON");
//				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF560_KW,
//					new String[] {"支払期限日に運用日+6日以降の日付"}, "PAY_KIGEN_DAY");
//				
//				return false;
//			}
//		}
//		// ANK-4070-00-00 ADD END
		// IT1-2021-0000060 DEL END

		// 遷移先画面を設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_CHW00107);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_CHW00107);

		return true;
	}


	/**
	 * 閉じるを処理します。
	 * <br>
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean close() throws Exception
	{

		// 遷移先画面IDを取得し、子画面を閉じる共通処理を呼出す
		return JCHPageTransferUtil.closeTransfer(this, JCCWebCommon.getScreenId(this));
	}

	/**
	 * 確定完了を処理します。
	 * <br>
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public boolean fixFin() throws Exception
	{

		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean, commoninfoBean};

		// ユーザーIDの取得
		String userId = commoninfoBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0039);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0039_CHSV0039OPDBMapper mapper = new CHSV0039_CHSV0039OPDBMapper();
		mapper.setCHSV003905SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);				// 料金項目抽出変換一覧照会[ECH0401B010]
		mapper.setCHSV003901SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);				// 再請求登録[ECH0051D012]
		mapper.setCHSV003902SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);				// 請求債権関連登録[ECH0041D010]
		mapper.setCHSV003903SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);				// 料金スケジュール定義一意照会[ECH0501A010]
		mapper.setCHSV003904SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);				// 一時金登録[EAC0171D010]
		// 各CC部品のマッピングを行う。
		mapper.setGETWORKPARAMLISTCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// 業務パラメータ管理情報取得CC
		mapper.setTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1, this);		// 顧客対応記録登録CC
		mapper.setADDHOTVOICCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1, this);		// ホットボイスCC
		mapper.setPRCTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1, this);	// 料金対応記録登録CC
		mapper.setTUSHINSVCPRCCHOHYOCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// 帳票出力CC
		// ANK-3838-00-00 ADD START
		mapper.setCHSV003907SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);				// 請求情報連携（さくらKCS）[ECHA0010001]
		// ANK-3838-00-00 ADD END
		//ANK-4468-00-01 DEL START
//		//ANK-4468-00-00 ADD START
//		mapper.setGETCHANGEGROUPKEIINFCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // GETCHANGEGROUPKEIINFCC : グループ計変更情報取得情報取得
//		//ANK-4468-00-00 ADD END
		//ANK-4468-00-01 DEL END

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// ファイル格納マップ
		HashMap<String, Object> attachMap = new HashMap<String, Object>();

		HashMap<String, Object> ccMap = (HashMap<String, Object>)inDataMap.get(MAP_CC_ID);

		// ユーザーID
		ccMap.put("user_id", userId);

		// サービスの呼び出し
// ANK-4415-00-00 MOD START
//		invokeService(paramMap, inDataMap, outputMap, attachMap);
		try
		{
			invokeService(paramMap, inDataMap, outputMap, attachMap);
		}
		catch(Exception e)
		{
			HashMap<String, Object> resultMap = null;
			String khriDayStkuErrFlg = "";
			resultMap = (HashMap)outputMap.get("TUSHINSVCPRCCHOHYOCC");
			if(resultMap != null)
			{
				khriDayStkuErrFlg = (String) resultMap.get("err_flg");
			}
			if("KHRIDAY_STKU_ERR".equals(khriDayStkuErrFlg))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5440_JW,
					new String[] {"口座支払方法受付区分が取得不可", "請求書再発行"});
				return false;
			}
		}
// ANK-4415-00-00 MOD END

		ArrayList outFileInfList = (ArrayList)attachMap.get("TELEGRAM_INFO_ATTACH_FILE_LIST");
		ArrayList printInfoList = new ArrayList();
		HashMap<String, Object> printInfoMap = new HashMap<String, Object>();
		
		// ANK-4102-00-00 ADD START
		if(outFileInfList != null)
		{
		// ANK-4102-00-00 ADD END
			for (int i = 0; i < outFileInfList.size(); i++)
			{
				// 出力する帳票の情報を取得
				HashMap outFileInfMap = (HashMap)outFileInfList.get(i);
				// 出力するファイルデータを取得
				byte[] outFileData = (byte[])outFileInfMap.get("TELEGRAM_INFO_ATTACH_FILE");
				// 出力するファイル名を取得
				String outFileName = (String)outFileInfMap.get("TELEGRAM_INFO_ATTACH_ITEM_NAMAE");
				// ダウンロード部品を呼出
				// 出力するファイルをセッションに格納する
				HashMap<String, Object> printInfo = new HashMap<String, Object>();
				printInfo.put("output_chohyo", outFileData);
				printInfo.put("chohyo_name", outFileName + String.valueOf(i) + ".pdf");
				
				printInfoList.add(printInfo);
			}
			printInfoMap.put("print_info_list", printInfoList);
	
			JCCWebCommon.setScreenInfo(this, JACScreenConst.SCREEN_ID_ACW00699, printInfoMap);
			
			if (outFileInfList.size() == 1)
			{
				bean.sendMessageString(CHW00106SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, "1");
			}
			else
			{
				bean.sendMessageString(CHW00106SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, "2");
			}
		
		// ANK-4102-00-00 ADD START
		}
		else
		{
			bean.sendMessageString(CHW00106SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, "3");
		}
		// ANK-4102-00-00 ADD END

		return true;
	}

	/**
	 * 修正を処理します。
	 * <br>
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean shusei() throws Exception
	{

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean};

		paramBeans[0].sendMessageBoolean(CHW00106SFConst.INITIALIZE_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面を設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_CHW00106);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_CHW00106);

		return true;
	}

	/**
	 * 請求書再発行画面の初期表示処理を行います。
	 * <br>
	 */
	private void initPrintScreen()
	{

		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean};

		// 請求書再発行サービス実行
		this.execCHSV0038(paramBeans);

		// 督促ステータスの設定
		String toksokSt = paramBeans[0].sendMessageString(CHW00106SFConst.TOKUSOKU_STAT, X31CWebConst.DATABEAN_GET_VALUE);
		if(JCHWebCommon.isNullOrEmpty(toksokSt))
		{
			// "督促なし"を設定
			paramBeans[0].sendMessageString(CHW00106SFConst.TOKUSOKU_STAT, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.TOKUSOKU_STAT_NASHI);
		}

		// 取扱期限日の初期値設定
		this.setKigenValue(paramBeans);

		// 帳票出力フラグの初期化
		paramBeans[0].sendMessageString(CHW00106SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, "0");

	}

	/**
	 * 請求書再発行画面サービスを実行します。
	 * <br>
	 * @param paramBeans 請求書再発行画面サービスフォームBean
	 */
	private void execCHSV0038(X31SDataBeanAccess[] paramBeans)
	{

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0038);

		// 初期化フラグを設定
		paramBeans[0].sendMessageBoolean(CHW00106SFConst.INITIALIZE_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0038_CHSV0038OPDBMapper mapper = new CHSV0038_CHSV0038OPDBMapper();
		mapper.setCHSV003801SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// 印刷様式[EZM0171B012]
		mapper.setCHSV003802SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// バーコード様式[EZM0171B012]
		mapper.setCHSV003803SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// 発行種別[EZM0171B012]
		mapper.setCHSV003804SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// 定額料金手数料[EAC0281B020]
		mapper.setCHSV003806SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_4);		// 債権一覧(窓口支払)[ECH0011B010]
		mapper.setCHSV003807SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);		// 請求一覧(口座振替)[EKK0051B030]
		mapper.setCHSV003808SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_3);		// 請求一覧(クレジット)[EKK0051B030]
		mapper.setCHSV003809SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_4);		// 請求一覧(口振領収書)[EKK0051B030]
		// ANK-3361-00-00 ADD START
		mapper.setGETPRCKMKCSCHGELISTCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_4);	// 業務パラメータ管理情報取得CC
		// ANK-3361-00-00 ADD END
		// ANK-3838-00-00 ADD START
		mapper.setCHSV003810SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// 支払用紙[EZM0171B012]
		mapper.setCHSV003811SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);		// パーフェクト口座一意照会[ECH0941A010]
		// ANK-3838-00-00 ADD END

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getCHSV003801SC(paramBeans, outputMap);		// 印刷様式[EZM0171B012]
		mapper.getCHSV003802SC(paramBeans, outputMap);		// バーコード様式[EZM0171B012]
		mapper.getCHSV003803SC(paramBeans, outputMap);		// 発行種別[EZM0171B012]
		mapper.getCHSV003804SC(paramBeans, outputMap);		// 定額料金手数料[EAC0281B020]
		mapper.getCHSV003806SC(paramBeans, outputMap);		// 債権一覧(窓口支払)[ECH0011B010]
		mapper.getCHSV003807SC(paramBeans, outputMap);		// 請求一覧(口座振替)[EKK0051B030]
		mapper.getCHSV003808SC(paramBeans, outputMap);		// 請求一覧(クレジット)[EKK0051B030]
		mapper.getCHSV003809SC(paramBeans, outputMap);		// 請求一覧(口振領収書)[EKK0051B030]
		// ANK-3361-00-00 ADD START
		mapper.getGETPRCKMKCSCHGELISTCC(paramBeans, outputMap);
		// ANK-3361-00-00 ADD END
		// ANK-3838-00-00 ADD START
		mapper.getCHSV003810SC(paramBeans, outputMap);		// 支払用紙[EZM0171B012]
		mapper.getCHSV003811SC(paramBeans, outputMap);		// パーフェクト口座一意照会[ECH0941A010]
		// ANK-3838-00-00 ADD END

		paramBeans[0].sendMessageString(CHW00106SFConst.BARCODE_SELECT_INDEX, X31CWebConst.DATABEAN_SET_VALUE, "0");
		paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_SBT_SELECT_INDEX, X31CWebConst.DATABEAN_SET_VALUE, "0");

		// 窓口支払の明細件数をセット
		X31SDataBeanAccessArray hakkoMadoInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_MADO_INFO);
		paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_MADO_DSP_CNT, X31CWebConst.DATABEAN_SET_VALUE, hakkoMadoInfo.getCount().toString());

		// 口座振替の明細件数をセット
		X31SDataBeanAccessArray hakkoKozaInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_KOZA_INFO);
		paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_KOZA_DSP_CNT, X31CWebConst.DATABEAN_SET_VALUE, hakkoKozaInfo.getCount().toString());

		// クレジットの明細件数をセット
		X31SDataBeanAccessArray hakkoCrdtInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_CRDT_INFO);
		paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_CRDT_DSP_CNT, X31CWebConst.DATABEAN_SET_VALUE, hakkoCrdtInfo.getCount().toString());

		// 領収書の明細件数をセット
		X31SDataBeanAccessArray hakkoRcptInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_RECEIPT_INFO);
		paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_RECEIPT_DSP_CNT, X31CWebConst.DATABEAN_SET_VALUE, hakkoRcptInfo.getCount().toString());

		// 発行対象情報の表示色設定
		this.setCtrlValueInHakkoTarget(paramBeans);

		// ボタン制御値の設定
		this.setCntrlValueOfBtnHakkoTarget(paramBeans);
	}

	/**
	 * 請求書再発行登録サービスを実行します。
	 * <br>
	 * @param paramBeans 請求書再発行画面サービスフォームBean
	 * @return boolean
	 */
	@SuppressWarnings("unchecked")
	private boolean execCHSV0039(X31SDataBeanAccess[] paramBeans)
	{

		String printYoshiki = paramBeans[0].sendMessageString(CHW00106SFConst.PRINT_YOSHIKI_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// 選択されたレコードを判定し、再請求登録に必要な明細情報を作成する
		paramBeans[0].getDataBeanArray(CHW00106SFConst.RE_SEIKY_DETAIL_INFO).clearArray();

		// 発行種別コード
		String printDiv = paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// 印刷様式が「0:窓口支払(企業負担)」、「3:口振領収書のみ」、「4:窓口支払(顧客負担)」の場合
		// ANK-3838-00-00 MOD START
		//if (JACStrConst.PRINT_YSK_CD_MADO.equals(printYoshiki) || JACStrConst.PRINT_YSK_CD_RCPT.equals(printYoshiki))
		if (JACStrConst.PRINT_YSK_CD_MADO.equals(printYoshiki) || JACStrConst.PRINT_YSK_CD_RCPT.equals(printYoshiki) || JACStrConst.PRINT_YSK_CD_MADO_CUST.equals(printYoshiki))
		// ANK-3838-00-00 MOD END
		{
			// 印刷様式が「0:窓口支払」、「4:窓口支払(顧客負担)」の場合
			// ANK-3838-00-00 MOD START
			//if (JACStrConst.PRINT_YSK_CD_MADO.equals(printYoshiki))
			if (JACStrConst.PRINT_YSK_CD_MADO.equals(printYoshiki) || JACStrConst.PRINT_YSK_CD_MADO_CUST.equals(printYoshiki))
			// ANK-3838-00-00 MOD END
			{
				X31SDataBeanAccessArray madoInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_MADO_INFO);
				BigDecimal amntSum = new BigDecimal(0);
				for (int i = 0; i < madoInfo.getCount(); i++)
				{
					boolean isChk = madoInfo.getDataBean(i).sendMessageBoolean(CHW00106SFConst.CHK_MADO_05, X31CWebConst.DATABEAN_GET_VALUE);
					madoInfo.getDataBean(i).sendMessageString(CHW00106SFConst.CHECKED_VAL_05, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(isChk));
					if (isChk)
					{
						String seikyNo = madoInfo.getDataBean(i).sendMessageString(CHW00106SFConst.SEIKY_NO_MADO_05, X31CWebConst.DATABEAN_GET_VALUE);
						String seikyYm = madoInfo.getDataBean(i).sendMessageString(CHW00106SFConst.SEIKY_YM_MADO_05, X31CWebConst.DATABEAN_GET_VALUE);
						String amnt = madoInfo.getDataBean(i).sendMessageString(CHW00106SFConst.MINOU_AMNT_MADO_05, X31CWebConst.DATABEAN_GET_VALUE);
						String jutoAmnt = madoInfo.getDataBean(i).sendMessageString(CHW00106SFConst.JUTO_AMNT_MADO_05, X31CWebConst.DATABEAN_GET_VALUE);
						String saikenNo = madoInfo.getDataBean(i).sendMessageString(CHW00106SFConst.SAIKEN_NO_MADO_05, X31CWebConst.DATABEAN_GET_VALUE);
						String saikenStat = madoInfo.getDataBean(i).sendMessageString(CHW00106SFConst.SAIKEN_STAT_05, X31CWebConst.DATABEAN_GET_VALUE);

						X31SDataBeanAccessArray detailList = paramBeans[0].getDataBeanArray(CHW00106SFConst.RE_SEIKY_DETAIL_INFO);
						X31SDataBeanAccess subbean = detailList.addDataBean();
						subbean.sendMessageString(CHW00106SFConst.SEIKY_NO_09, X31CWebConst.DATABEAN_SET_VALUE, seikyNo);
						subbean.sendMessageString(CHW00106SFConst.SEIKY_YM_09, X31CWebConst.DATABEAN_SET_VALUE, seikyYm);
						subbean.sendMessageString(CHW00106SFConst.AMNT_09, X31CWebConst.DATABEAN_SET_VALUE, amnt);
						subbean.sendMessageString(CHW00106SFConst.JUTO_AMNT_09, X31CWebConst.DATABEAN_SET_VALUE, jutoAmnt);
						subbean.sendMessageString(CHW00106SFConst.SAIKEN_NO_09, X31CWebConst.DATABEAN_SET_VALUE, saikenNo);
						subbean.sendMessageString(CHW00106SFConst.SAIKEN_STAT_09, X31CWebConst.DATABEAN_SET_VALUE, saikenStat);

						// 金額に値がない場合は、0として計算させる
						if (JACStrConst.KARA_MOJI.equals(amnt))
						{
							amnt = "0";
						}

						amntSum = amntSum.add(new BigDecimal(amnt));
					}
				}
				// 計算した金額合計を設定
				paramBeans[0].sendMessageString(CHW00106SFConst.AMNT_GOKEI, X31CWebConst.DATABEAN_SET_VALUE, amntSum.toString());
			}
			// 印刷様式が「3:口振領収書のみ」の場合
			else if (JACStrConst.PRINT_YSK_CD_RCPT.equals(printYoshiki))
			{
				// 選択位置を取得
				int idx = Integer.valueOf(paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_RECEIPT_SEL_IDX, X31CWebConst.DATABEAN_GET_VALUE));

				X31SDataBeanAccessArray receiptInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_RECEIPT_INFO);
				String seikyNo = receiptInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_NO_RECEIPT_08, X31CWebConst.DATABEAN_GET_VALUE);
				String seikyYm = receiptInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_YM_RECEIPT_08, X31CWebConst.DATABEAN_GET_VALUE);
				String amnt = receiptInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.RYOSYU_AMNT_RECEIPT_08, X31CWebConst.DATABEAN_GET_VALUE);

				X31SDataBeanAccessArray detailList = paramBeans[0].getDataBeanArray(CHW00106SFConst.RE_SEIKY_DETAIL_INFO);
				X31SDataBeanAccess subbean = detailList.addDataBean();
				subbean.sendMessageString(CHW00106SFConst.SEIKY_NO_09, X31CWebConst.DATABEAN_SET_VALUE, seikyNo);
				subbean.sendMessageString(CHW00106SFConst.SEIKY_YM_09, X31CWebConst.DATABEAN_SET_VALUE, seikyYm);
				subbean.sendMessageString(CHW00106SFConst.AMNT_09, X31CWebConst.DATABEAN_SET_VALUE, amnt);
			}
		}
		else if (JACStrConst.PRINT_YSK_CD_KOZA.equals(printYoshiki))
		{
			// 選択されたレコードを判定し、再請求登録に必要な明細情報を作成する
			X31SDataBeanAccessArray detailList = paramBeans[0].getDataBeanArray(CHW00106SFConst.RE_SEIKY_DETAIL_INFO);

			// 選択位置を取得
			int idx = Integer.valueOf(paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_KOZA_SEL_IDX, X31CWebConst.DATABEAN_GET_VALUE));

			X31SDataBeanAccessArray kozaInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_KOZA_INFO);
			String seikyNo = kozaInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_NO_KOZA_06, X31CWebConst.DATABEAN_GET_VALUE);
			String seikyYm = kozaInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_YM_KOZA_06, X31CWebConst.DATABEAN_GET_VALUE);
			
			String amnt = kozaInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.MISYU_AMNT_KOZA_06, X31CWebConst.DATABEAN_GET_VALUE);
			if(printDiv.equals(PRINT_DIV_REPRINT))
			{
				amnt = kozaInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_AMNT_KOZA_06, X31CWebConst.DATABEAN_GET_VALUE);
			}

			X31SDataBeanAccess subbean = detailList.addDataBean();
			subbean.sendMessageString(CHW00106SFConst.SEIKY_NO_09, X31CWebConst.DATABEAN_SET_VALUE, seikyNo);
			subbean.sendMessageString(CHW00106SFConst.SEIKY_YM_09, X31CWebConst.DATABEAN_SET_VALUE, seikyYm);
			subbean.sendMessageString(CHW00106SFConst.AMNT_09, X31CWebConst.DATABEAN_SET_VALUE, amnt);
		}
		else if (JACStrConst.PRINT_YSK_CD_CRDT.equals(printYoshiki))
		{
			// 選択されたレコードを判定し、再請求登録に必要な明細情報を作成する
			X31SDataBeanAccessArray detailList = paramBeans[0].getDataBeanArray(CHW00106SFConst.RE_SEIKY_DETAIL_INFO);

			// 選択位置を取得
			int idx = Integer.valueOf(paramBeans[0].sendMessageString(CHW00106SFConst.HAKKO_CRDT_SEL_IDX, X31CWebConst.DATABEAN_GET_VALUE));

			X31SDataBeanAccessArray creditInfo = paramBeans[0].getDataBeanArray(CHW00106SFConst.HAKKO_CRDT_INFO);
			String seikyNo = creditInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_NO_CRDT_07, X31CWebConst.DATABEAN_GET_VALUE);
			String seikyYm = creditInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_YM_CRDT_07, X31CWebConst.DATABEAN_GET_VALUE);
			String amnt = creditInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.MISYU_AMNT_CRDT_07, X31CWebConst.DATABEAN_GET_VALUE);
			if(printDiv.equals(PRINT_DIV_REPRINT))
			{
				amnt = creditInfo.getDataBean(idx).sendMessageString(CHW00106SFConst.SEIKY_AMNT_CRDT_07, X31CWebConst.DATABEAN_GET_VALUE);
			}

			X31SDataBeanAccess subbean = detailList.addDataBean();
			subbean.sendMessageString(CHW00106SFConst.SEIKY_NO_09, X31CWebConst.DATABEAN_SET_VALUE, seikyNo);
			subbean.sendMessageString(CHW00106SFConst.SEIKY_YM_09, X31CWebConst.DATABEAN_SET_VALUE, seikyYm);
			subbean.sendMessageString(CHW00106SFConst.AMNT_09, X31CWebConst.DATABEAN_SET_VALUE, amnt);
		}

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0039);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0039_CHSV0039OPDBMapper mapper = new CHSV0039_CHSV0039OPDBMapper();
		mapper.setCHSV003905SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);				// 料金項目抽出変換一覧照会[ECH0401B010]
		mapper.setCHSV003901SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);				// 再請求登録[ECH0051D012]
		mapper.setCHSV003902SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);				// 請求債権関連登録[ECH0041D010]
		mapper.setCHSV003903SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);				// 料金スケジュール定義一意照会[ECH0501A010]
		mapper.setCHSV003904SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);				// 一時金登録[EAC0171D010]
		// 各CC部品のマッピングを行う。
		mapper.setTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2, this);		// 顧客対応記録登録CC
		mapper.setADDHOTVOICCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2, this);		// ホットボイスCC
		mapper.setPRCTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2, this);	// 料金対応記録登録CC
		//ANK-4468-00-01 DEL START
//		//ANK-4468-00-00 ADD START
//		mapper.setGETCHANGEGROUPKEIINFCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // GETCHANGEGROUPKEIINFCC : グループ計変更情報取得情報取得
//		//ANK-4468-00-00 ADD END
		//ANK-4468-00-01 DEL END

		// NGワードチェックフラグを設定
		((HashMap)inDataMap.get(JACStrConst.PRCTAIOKIROKADDCC_MAP_ID)).put(JACStrConst.KEY_NGWORD_CHECK_FLG, "1");

		mapper.setTUSHINSVCPRCCHOHYOCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);		// 帳票出力CC
		// ANK-3838-00-00 ADD START
		mapper.setCHSV003907SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);				// 請求情報連携（さくらKCS）[ECHA0010001]
		// ANK-3838-00-00 ADD END

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// ＮＧワードチェック
		ArrayList<String> ngWordList = JCHCommonServiceUtil.getNgWordList(outputMap);

		// NGワードが存在する場合、警告メッセージ表示
		if (!ngWordList.isEmpty())
		{
			for (int i = 0; i < ngWordList.size(); i++)
			{
				JCCWebCommon.setMessageInfo(this, MESSAGE_ID_NG_WORD, new String[]{ CHW00106SFConst.KIJI, ngWordList.get(i)});
			}
			return false;
		}

		return true;
	}

	/**
	 * 支払期限日の初期値を設定します。
	 * <br>
	 * @param bean 請求書再発行画面Bean
	 * @return boolean true:合算
	 */
	private void setKigenValue(X31SDataBeanAccess[] bean)
	{

		String tokusokuStat = bean[0].sendMessageString(CHW00106SFConst.TOKUSOKU_STAT, X31CWebConst.DATABEAN_GET_VALUE);

		// 督促ステータスが「20:利用停止済」以降の場合
		if (Integer.parseInt(JACStrConst.TOKUSOKU_STAT_USE_STOP) <= Integer.parseInt(tokusokuStat))
		{
			// ANK-3838-00-00 DEL START
//		    // 取扱期限日（年）
//			bean[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_YEAR, X31CWebConst.DATABEAN_SET_VALUE, "2099");
//		    // 取扱期限日（月）
//			bean[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_MON, X31CWebConst.DATABEAN_SET_VALUE, "12");
//		    // 取扱期限日（日）
//			bean[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_DAY, X31CWebConst.DATABEAN_SET_VALUE, "31");
			// ANK-3838-00-00 DEL END
			// ANK-3838-00-00 ADD START
			// 運用日付を取得する
			String opeDate = JCCWebCommon.getOpeDate(this, null);
			
			// 運用日(yyyyMM)の翌月
			String opeYm = "";
			if (opeDate != null)
			{
				try {
					opeYm = JPCUtilCommon.addMonth(opeDate, 1).substring(0, 6);
				} catch (ParseException e) {
					// TODO 自動生成された catch ブロック
					e.printStackTrace();
				}
			}
			
			// 運用日の翌月末日
			String nextMonthEndOfMonth = opeYm + JPCUtilCommon.getEndOfMonth(opeYm);
			
			if (nextMonthEndOfMonth != null && !"".equals(nextMonthEndOfMonth))
			{
				// 取扱期限日の初期値として運用日付に取扱期限年月日指定可能月数を加算した日付を設定する
				// 取扱期限日（年）
				bean[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_YEAR, X31CWebConst.DATABEAN_SET_VALUE, nextMonthEndOfMonth.substring(0, 4));
			    // 取扱期限日（月）
				bean[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_MON, X31CWebConst.DATABEAN_SET_VALUE, nextMonthEndOfMonth.substring(4, 6));
			    // 取扱期限日（日）
				bean[0].sendMessageString(CHW00106SFConst.HANDING_KIGEN_DAY, X31CWebConst.DATABEAN_SET_VALUE, nextMonthEndOfMonth.substring(6, 8));
			}
			// ANK-3838-00-00 ADD END
		}
	}

	/**
	 * 発行対象情報の制御値を設定します。
	 * <br>
	 * @param bean 請求書再発行Bean
	 */
	private void setCtrlValueInHakkoTarget(X31SDataBeanAccess[] bean)
	{

		// 窓口支払の場合
		X31SDataBeanAccessArray madoInfo = bean[0].getDataBeanArray(CHW00106SFConst.HAKKO_MADO_INFO);
		for (int i = 0; i < madoInfo.getCount().intValue(); i++)
		{
			X31SDataBeanAccess subBean = madoInfo.getDataBean(i);
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			if (i % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			} 
			subBean.sendMessageString(CHW00106SFConst.DSP_CNTRL_VALUE_MADO_05, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}

		// 口座振替の場合
		X31SDataBeanAccessArray kozaInfo = bean[0].getDataBeanArray(CHW00106SFConst.HAKKO_KOZA_INFO);
		for (int i = 0; i < kozaInfo.getCount().intValue(); i++)
		{
			X31SDataBeanAccess subBean = kozaInfo.getDataBean(i);
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			if (i % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			} 
			subBean.sendMessageString(CHW00106SFConst.DSP_CNTRL_VALUE_KOZA_06, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}

		// クレジットの場合
		X31SDataBeanAccessArray crdtInfo = bean[0].getDataBeanArray(CHW00106SFConst.HAKKO_CRDT_INFO);
		for (int i = 0; i < crdtInfo.getCount().intValue(); i++)
		{
			X31SDataBeanAccess subBean = crdtInfo.getDataBean(i);
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			if (i % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			} 
			subBean.sendMessageString(CHW00106SFConst.DSP_CNTRL_VALUE_CRDT_07, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}

		// 口振領収書のみの場合
		X31SDataBeanAccessArray rcptInfo = bean[0].getDataBeanArray(CHW00106SFConst.HAKKO_RECEIPT_INFO);
		for (int i = 0; i < rcptInfo.getCount().intValue(); i++)
		{
			X31SDataBeanAccess subBean = rcptInfo.getDataBean(i);
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			if (i % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			} 
			subBean.sendMessageString(CHW00106SFConst.DSP_CNTRL_VALUE_RECEIPT_08, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}
	}

	/**
	 * 発行対象情報の有無により各ボタンの制御値を設定します。
	 * <br>
	 * @param bean 請求書再発行画面Bean
	 */
	private void setCntrlValueOfBtnHakkoTarget(X31SDataBeanAccess[] bean)
	{
//		String jsfDisabledCntrlValue = JACStrConst.CTL_VALUE_TRUE;
//
//		X31SDataBeanAccessArray madoInfo = bean[0].getDataBeanArray(CHW00106SFConst.HAKKO_MADO_INFO);
//		if (0 < madoInfo.getCount().intValue())
//		{
//			jsfDisabledCntrlValue = JACStrConst.CTL_VALUE_FALSE;
//		}

		// 印刷確認ボタン
		bean[0].sendMessageString(CHW00106SFConst.DISABLED_CNTRL_VALUE_BTNPRINTCFM, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.CTL_VALUE_FALSE);
	}

	/**
	 * 支払確定確認画面 印刷確定処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean printFin() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		String outputFlg = bean.sendMessageString(CHW00106SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		
		HashMap<String, Object> printInfoMap = JCCWebCommon.getScreenInfo(this, JACScreenConst.SCREEN_ID_ACW00699);
		if (printInfoMap != null)
		{
			ArrayList printInfoList = (ArrayList)printInfoMap.get("print_info_list");
			
			HashMap<String, Object> printInfo = (HashMap)printInfoList.get(0);
			if(printInfo != null && printInfo.containsKey("output_chohyo") && printInfo.containsKey("chohyo_name"))
			{
				JCCWebCommon.setTempDownloadFile(this, (byte[])printInfo.get("output_chohyo")
						, (String)printInfo.get("chohyo_name"));
				
				if ("1".equals(outputFlg))
				{
					bean.sendMessageString(CHW00106SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, "0");
					JCCWebCommon.removeScreenInfo(this, JACScreenConst.SCREEN_ID_CHW00107);
				}
			}
		}
		
		return true;
	}

	/**
	 * 支払確定確認画面 印刷確定処理(内訳)
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean printFin2() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		HashMap<String, Object> printInfoMap = JCCWebCommon.getScreenInfo(this, JACScreenConst.SCREEN_ID_ACW00699);
		if (printInfoMap != null)
		{
			ArrayList printInfoList = (ArrayList)printInfoMap.get("print_info_list");
			
			HashMap<String, Object> printInfo = (HashMap)printInfoList.get(1);
			if(printInfo != null && printInfo.containsKey("output_chohyo") && printInfo.containsKey("chohyo_name"))
			{
				JCCWebCommon.setTempDownloadFile(this, (byte[])printInfo.get("output_chohyo")
						, (String)printInfo.get("chohyo_name"));
				
				bean.sendMessageString(CHW00106SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, "0");
				JCCWebCommon.removeScreenInfo(this, JACScreenConst.SCREEN_ID_CHW00107);
			}
		}
		
		return true;
	}

	/**
	 * アンロード処理.<br>
	 * 自画面がクローズした時、呼び元に戻る。
	 * 
	 * @return boolean
	 * @throws Exception
	 */
	public boolean unload() throws Exception
	{
		return this.close();
	}
}
