/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CHSV0010_CHSV0010OPDBMapper
 *	ソースファイル名：CHSV0010_CHSV0010OPDBMapper.java
 *	作成者			：富士通
 *	日付			：2012年02月03日
 *＜機能概要＞
 *	BP（入金登録債権充当）へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/02/03	富士通		新規作成
 *	v6.00.00	2013/10/23	FJ)鈴木		【OM-2013-0002865】入金経路が総合口座の場合、引落金融機関、支店を選択可能とする
 *	v6.00.01	2013/11/12	FJ)小野		【OM-2013-0004206】督促金額がゼロになった時の不良顧客削除処理を追加。
 *	v9.00.00	2014/08/14	FJ)早崎		【OM-2014-0002711】督促情報更新・不良顧客削除条件の修正。
 *	v14.00.00   2015/05/22	FJ)寺村		【OM-2015-0000812】督促状態の変更に伴うAxM指示書連携不足
 *	v67.00.00	2023/05/30	GDC)ml.alcantara	【ANK-4415-00-00】口振請求及びWeb申込システム移行 STEP1
**********************************************************************/
package eo.web.webview.mapping;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CHW00801SF.CHW00801SFConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.common.JCRWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CHSV0010_CHSV0010OPDBMapper
{

	/**
	 * コンストラクタ
	 */
	public CHSV0010_CHSV0010OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV001001CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccessArray arraybean = null;
		X31SDataBeanAccess beanTemp = null;
		ArrayList list = null;

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 入金経路により振り分ける項目
		String nyukinRouteCd = bean[0].sendMessageString(CHW00801SFConst.NYUKIN_ROUTE_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String bankCd = bean[0].sendMessageString(CHW00801SFConst.BANK_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String bankShitenCd = bean[0].sendMessageString(CHW00801SFConst.BANK_SHITEN_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String yuuchoBankCd = bean[0].sendMessageString(CHW00801SFConst.YUUCHO_BANK_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String yuuchoBankShitenCd = bean[0].sendMessageString(CHW00801SFConst.YUUCHO_BANK_SHITEN_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String uketoriBumonCd = bean[0].sendMessageString(CHW00801SFConst.UKETORI_BUMON_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String shiteiKozaCd = bean[0].sendMessageString(CHW00801SFConst.SHITEIKOZA_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// 入金経路コード → 入金登録債権充当マップ.入金経路コード
		parentMap.put("nyukin_route_cd", nyukinRouteCd);

		// 収納機関コード → 入金登録債権充当マップ.収納機関コード
		parentMap.put("shunokikan_cd", bean[0].sendMessageString(CHW00801SFConst.SHUNOKIKAN_CD, X31CWebConst.DATABEAN_GET_VALUE));

		// 収納日 → 入金登録債権充当マップ.外部組織収納年月日
		parentMap.put("shuno_ymd", bean[0].sendMessageString(CHW00801SFConst.SHUNO_DAY, X31CWebConst.DATABEAN_GET_VALUE));

		// 領収日 → 入金登録債権充当マップ.領収年月日
		parentMap.put("receipt_ymd", bean[0].sendMessageString(CHW00801SFConst.RECEIPT_DAY, X31CWebConst.DATABEAN_GET_VALUE));

		// 入金額 → 入金登録債権充当マップ.入金額
		parentMap.put("nyukin_amnt", bean[0].sendMessageString(CHW00801SFConst.NYUKIN_AMNT, X31CWebConst.DATABEAN_GET_VALUE));

		// 請求契約番号 → 入金登録債権充当マップ.請求契約番号
		parentMap.put("seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 金融機関コード → 入金登録債権充当マップ.窓口金融機関コード
		// 金融機関支店コード → 入金登録債権充当マップ.窓口金融機関支店コード
		if (JACStrConst.NYKNKEIRCD_MDGC.equals(nyukinRouteCd))
		{
			parentMap.put("madoguchi_bank_cd", bankCd);
			parentMap.put("madoguchi_bank_shiten_cd", bankShitenCd);
		}

		// 金融機関コード → 入金登録債権充当マップ.口座振替金融機関コード
		// 金融機関支店コード → 入金登録債権充当マップ.口座振替金融機関支店コード
		//ANK-4415-00-00 MOD START
//		if (JACStrConst.NYKNKEIRCD_KOZA.equals(nyukinRouteCd))
		if (JACStrConst.NYKNKEIRCD_KOZA_CP.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_KOZA_SMBCFS.equals(nyukinRouteCd))
		//ANK-4415-00-00 MOD END
		{
			parentMap.put("khri_bank_cd", bankCd);
			parentMap.put("khri_bank_shiten_cd", bankShitenCd);
		}

		// クレジットカード会社コード → 入金登録債権充当マップ.クレジットカード会社コード
		if (JACStrConst.NYKNKEIRCD_CREDIT.equals(nyukinRouteCd))
		{
			parentMap.put("crecard_comp_cd", bean[0].sendMessageString(CHW00801SFConst.CRECARD_COMP_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 債権回収委託会社コード → 入金登録債権充当マップ.債権回収委託会社コード
		if (JACStrConst.NYKNKEIRCD_SAIKEN_KAISHU.equals(nyukinRouteCd))
		{
			parentMap.put("sknksitkcm_cd", bean[0].sendMessageString(CHW00801SFConst.SKNKSITKCM_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 指定口座コード → 入金登録債権充当マップ.指定口座コード
		if (JACStrConst.NYKNKEIRCD_GENKIN.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_TTL_KOZA.equals(nyukinRouteCd))
		{
			parentMap.put("shiteikoza_cd", shiteiKozaCd);
		}

		// 金融機関コード → 入金登録債権充当マップ.払込先金融機関コード
		// 金融機関支店コード → 入金登録債権充当マップ.払込先金融機関支店コード
		if (JACStrConst.NYKNKEIRCD_MDGC.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_TTL_KOZA.equals(nyukinRouteCd)) // 窓口入金または総合口座の場合
		{
			parentMap.put("hrakmisaki_bank_cd", bankCd);
			parentMap.put("hrakmisaki_bank_shiten_cd", bankShitenCd);
		}

		// 受取り部門コード → 入金登録債権充当マップ.受取組織コード
		/* TODO : 郵便振込の組織コードの設定先は確認が必要。 */
		if (JACStrConst.NYKNKEIRCD_GENKIN.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_TTL_KOZA.equals(nyukinRouteCd)
				|| JACStrConst.NYKNKEIRCD_YUBIN_FURIKM.equals(nyukinRouteCd))
		{
			parentMap.put("uketori_org_cd", uketoriBumonCd);
		}

		// 受取り部門コード → 入金登録債権充当マップ.社内使用分組織コード
		if (JACStrConst.NYKNKEIRCD_SHANAI_USE.equals(nyukinRouteCd))
		{
			parentMap.put("syayobun_org_cd", uketoriBumonCd);
		}

		// コンビニエンスストアコード → 入金登録債権充当マップ.コンビニエンスストアコード
		//v52.00.00 Mod Start
//		if (JACStrConst.NYKNKEIRCD_CVSTORE.equals(nyukinRouteCd))
		if (JACStrConst.NYKNKEIRCD_CVSTORE.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_CVSTORE_ETC.equals(nyukinRouteCd))
		//v52.00.00 Mod End
		{
			parentMap.put("cvstore_cd", bean[0].sendMessageString(CHW00801SFConst.CVSTORE_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 受取り部門コード → 入金登録債権充当マップ.郵券受取組織コード
		if (JACStrConst.NYKNKEIRCD_YUKEN.equals(nyukinRouteCd))
		{
			parentMap.put("yuken_uketori_org_cd", uketoriBumonCd);
		}

		// 金融機関コード → 入金登録債権充当マップ.郵便振込金融機関コード
		// 金融機関支店コード → 入金登録債権充当マップ.郵便振込金融機関支店コード
		if (JACStrConst.NYKNKEIRCD_YUBIN_FURIKM.equals(nyukinRouteCd))
		{
			parentMap.put("yhrikomi_bank_cd", yuuchoBankCd);
			parentMap.put("yhrikomi_bank_shiten_cd", yuuchoBankShitenCd);
		}

		// ゆうちょ銀行金融機関コード → 入金登録債権充当マップ.郵便振込金融機関コード
		// ゆうちょ銀行金融機関支店コード → 入金登録債権充当マップ.郵便振込金融機関支店コード
		//ANK-4415-00-00 MOD START
//		if (JACStrConst.NYKNKEIRCD_YUBIN_AUTO.equals(nyukinRouteCd))
		if (JACStrConst.NYKNKEIRCD_YUBIN_AUTO_CP.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_YUBIN_AUTO_SMBCFS.equals(nyukinRouteCd))
		//ANK-4415-00-00 MOD END
		{
			parentMap.put("yjhri_bank_cd", yuuchoBankCd);
			parentMap.put("yjhri_bank_shiten_cd", yuuchoBankShitenCd);
		}

		// 預り金 → 入金登録債権充当マップ.預り金
		parentMap.put("azukin", bean[0].sendMessageString(CHW00801SFConst.AZUKIN, X31CWebConst.DATABEAN_GET_VALUE));

		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray(CHW00801SFConst.MINO_SAIKEN_ICRN_INFO);
		if (parentMap.containsKey("saiken_juto_list"))
		{
			list = (ArrayList)parentMap.get("saiken_juto_list");
		}
		else
		{
			list = new ArrayList();
		}

		// OM-2014-0002711 ADD START
		ArrayList allList = new ArrayList();
		// OM-2014-0002711 ADD END
		
		if (arraybean != null && arraybean.getCount() > 0)
		{
			// 未収金額合計 → 入金登録債権充当マップ.未収金額合計
			parentMap.put("mishugokei", bean[0].sendMessageString(CHW00801SFConst.MISHUGOKEI, X31CWebConst.DATABEAN_GET_VALUE));

			// リストを逆順に読み、処理を実行
			int listSize = arraybean.getCount();
			for (int i = listSize - 1; i >= 0; i--)
//			for (int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);

				// 未納債権一覧情報.選択
				boolean choice = subbean.sendMessageBoolean(CHW00801SFConst.CHOICE_09, X31CWebConst.DATABEAN_GET_VALUE);

				// 選択されている情報のみをマッピングする
				if (choice)
				{
					HashMap childMap = new HashMap();

					if (subbean != null)
					{
						// 未納債権一覧情報.債権番号 → 入金登録債権充当マップ.債権充当明細リスト.債権番号
						childMap.put("saiken_no", subbean.sendMessageString(CHW00801SFConst.SAIKEN_NO_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.更新年月日時分秒 → 入金登録債権充当マップ.債権充当明細リスト.更新前債権更新年月日時分秒
						childMap.put("saiken_upd_dtm_af", subbean.sendMessageString(CHW00801SFConst.UPD_DTM_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.充当額 → 入金登録債権充当マップ.債権充当明細リスト.充当額
						childMap.put("juto_amnt", subbean.sendMessageString(CHW00801SFConst.JUTO_AMNT_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.充当額 → 入金登録債権充当マップ.債権充当明細リスト.充当額＿行合計
						childMap.put("juto_line_amnt", subbean.sendMessageString(CHW00801SFConst.JUTO_AMNT_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.未納額 → 入金登録債権充当マップ.債権充当明細リスト.未収額
						childMap.put("misyu_amnt", subbean.sendMessageString(CHW00801SFConst.MINO_AMNT_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.預り金 → 入金登録債権充当マップ.債権充当明細リスト.預り金
						childMap.put("azukin", bean[0].sendMessageString(CHW00801SFConst.AZUKIN, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.債権ステータスコード → 入金登録債権充当マップ.債権充当明細リスト.債権ステータスコード
						childMap.put("saiken_stat_cd", subbean.sendMessageString(CHW00801SFConst.SAIKEN_STAT_CD_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.充当額合計 → 入金登録債権充当マップ.債権充当明細リスト.充当額合計
						childMap.put("juto_amnt_sum", this.getJutoAmntSum(bean));

						// 未納債権一覧情報.入金額 → 入金登録債権充当マップ.債権充当明細リスト.入金額
						childMap.put("nyukin_amnt", bean[0].sendMessageString(CHW00801SFConst.NYUKIN_AMNT, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.支払方法コード → 入金登録債権充当マップ.債権充当明細リスト.支払方法コード
						childMap.put("seiky_way_cd", subbean.sendMessageString(CHW00801SFConst.SEIKY_WAY_CD_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.請求年月 → 入金登録債権充当マップ.債権充当明細リスト.請求年月
						childMap.put("seiky_ym", subbean.sendMessageString(CHW00801SFConst.SEIKY_YM_09, X31CWebConst.DATABEAN_GET_VALUE));

						// 未納債権一覧情報.請求番号 → 入金登録債権充当マップ.債権充当明細リスト.請求番号
						childMap.put("seiky_no", subbean.sendMessageString(CHW00801SFConst.SEIKY_NO_09, X31CWebConst.DATABEAN_GET_VALUE));
					}

					list.add(childMap);
				}
				
				// OM-2014-0002711 ADD START
				// 画面表示されている未納債権一覧情報を退避させる
				HashMap allChildMap = new HashMap();
				
				if (subbean != null)
				{
					// 未納債権一覧情報.債権番号 → 入金登録債権充当マップ.債権充当明細リスト.債権番号
					allChildMap.put("saiken_no", subbean.sendMessageString(CHW00801SFConst.SAIKEN_NO_09, X31CWebConst.DATABEAN_GET_VALUE));

					// 未納債権一覧情報.未納額 → 入金登録債権充当マップ.債権充当明細リスト.未収額
					allChildMap.put("misyu_amnt", subbean.sendMessageString(CHW00801SFConst.MINO_AMNT_09, X31CWebConst.DATABEAN_GET_VALUE));
				}
				
				allList.add(allChildMap);
				// OM-2014-0002711 ADD END
			}
		}
		parentMap.put("saiken_juto_list", list);
		
		// OM-2014-0002711 ADD START
		parentMap.put("saiken_all_list", allList);
		// OM-2014-0002711 ADD END

		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray(CHW00801SFConst.AZUKIN_LIST_INFO);
		if (parentMap.containsKey("azukin_list"))
		{
			list = (ArrayList)parentMap.get("azukin_list");
		}
		else
		{
			list = new ArrayList();
		}
		if (arraybean != null && arraybean.getCount() > 0)
		{
			for (int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);
				HashMap childMap = null;
				if (list.size() - 1 >= i)
				{
					childMap = (HashMap)list.get(i);
				}
				else
				{
					childMap = new HashMap();
				}

				if (subbean != null)
				{
					// 預り金明細情報.金庫番号 → 入金登録債権充当マップ.預り金明細リスト.金庫番号
					childMap.put("knk_no", subbean.sendMessageString(CHW00801SFConst.KNK_NO_10, X31CWebConst.DATABEAN_GET_VALUE));

					// 預り金明細情報.精算方法コード → 入金登録債権充当マップ.預り金明細リスト.精算方法コード
					childMap.put("ssn_way_cd", subbean.sendMessageString(CHW00801SFConst.SSN_WAY_CD_10, X31CWebConst.DATABEAN_GET_VALUE));

					// 預り金明細情報.金庫金額 → 入金登録債権充当マップ.預り金明細リスト.金庫金額
					childMap.put("knk_amnt", subbean.sendMessageString(CHW00801SFConst.KNK_AMNT_10, X31CWebConst.DATABEAN_GET_VALUE));

					// 預り金明細情報.入金番号 → 入金登録債権充当マップ.預り金明細リスト.入金番号
					childMap.put("nyukin_no", subbean.sendMessageString(CHW00801SFConst.NYUKIN_NO_10, X31CWebConst.DATABEAN_GET_VALUE));

					// 預り金明細情報.金庫更新年月日時分秒 → 入金登録債権充当マップ.預り金明細リスト.金庫更新年月日時分秒
					childMap.put("knk_upd_dtm", subbean.sendMessageString(CHW00801SFConst.KNK_UPD_DTM_10, X31CWebConst.DATABEAN_GET_VALUE));
				}

				list.add(childMap);
			}
		}
		parentMap.put("azukin_list", list);

		outputMap.put("CHSV001001CC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　       ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setPRCSCHDLTEIGI(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 部品呼び出し → 料金スケジュール定義一意照会マップ.ＫＥＹ＿運用日
		parentMap.put("key_unyo_day", JCCWebCommon.getOpeDate(bl, null));

		outputMap.put("PRCSCHDLTEIGI", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setSEIKYUCWKSAIKEN(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求契約番号 → 請求内訳債権番号一覧照会マップ１.ＫＥＹ＿請求契約番号
		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("MAP_SEIKY_UCWK", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setUPDATESEIKYUCWK(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 入金フラグ
		parentMap.put("nyukin_flg", JACStrConst.AMNT_HANNEI_CD_GNSN);

		outputMap.put("UPDSEIKYUW", parentMap);
		outputMap.put("ADDSEIKYUW", parentMap);
		outputMap.put("DELSEIKYUW", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　       ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setTOKUSOKUUNIQUE(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求契約番号 → 督促一意照会マップ.ＫＥＹ＿請求契約番号
		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 部品呼び出し → 督促一意照会マップ.ＫＥＹ＿督促管理年月日
		parentMap.put("key_tokusoku_kanri_ymd", JCCWebCommon.getOpeDate(bl, null));

		outputMap.put("TOKUSOKUUNIQUE", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setTOKUSOKUSTATUS(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		outputMap.put("TOKUSOKUSTATUS", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setTOKUSOKUSAIKENKANREN(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		outputMap.put("TOKUSOKUSAIKENKANREN", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setUPDATETOKUSOKU(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 部品呼び出し → 督促異動イベントコード（入金登録画面）
		parentMap.put("tokusoku_ido_evnt_cd", JACStrConst.TKSKIDO_EVCD_NYKIN_ADD_DISP);

		outputMap.put("UPDATETOKUSOKU", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：入金登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setHURYOCUSTDELCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求契約番号 → 不良顧客削除マップ.請求契約番号
		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 料金対応記録追加モード"1"(請求先単位)
		parentMap.put("prc_taio_kirok_add_mode", "1");

		// 料金対応記録種別コード
		parentMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_NYUKIN_ADD);

		outputMap.put("HURYOCUSTDELCC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setINSERTTOKUSOKUIDO(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 部品呼び出し → 督促異動イベントコード（入金登録画面）
		parentMap.put("tokusoku_ido_event_cd", JACStrConst.TKSKIDO_EVCD_NYKIN_ADD_DISP);

		outputMap.put("INSERTTOKUSOKUIDO", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setRUNCCFLG(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		outputMap.put("RUNCCFLG", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setJKKUSESTPRLSRUNCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求契約番号 → 利用停止解除対象抽出マップ.抽出対象請求契約番号
		parentMap.put("chsht_trgt_seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("JKKUSESTPRLSRUNCC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　 ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setTAIOKIROKADDCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl)
	{

		if (bean == null)
		{
			return null;
		}
		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		String wkkbtOrgCd = JCRWebCommon.getWkkbtOrgCd(bean[1]);
		String wkkbtOrgNm = JCRWebCommon.getWkkbtOrgNm(bean[1]);
		String userId = bean[1].sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String userNm = bean[1].sendMessageString(CommonInfoCFConst.USER_NM, X31CWebConst.DATABEAN_GET_VALUE);
		String dtm = JCCWebCommon.getSysDateTime();

		ArrayList<HashMap<String, Object>> taioKirokAddList = new ArrayList<HashMap<String, Object>>();

		HashMap<String, Object> childMap = new HashMap<String, Object>();

		// 入金登録["112"固定] → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_NYUKIN_ADD);

		// 手動入金["1302"固定] → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_dtl_bunrui_cd", JACStrConst.TKRK_SBTD_MANUAL_NYUKIN);

		// "請求書再発行" → 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put("title", JACScreenConst.SCREEN_NAME_CHW00801);

		// 記事 → 対応記録登録マップ.対応記録登録リスト.問合せ内容
		childMap.put("toiawase_naiyo", bean[0].sendMessageString("記事", X31CWebConst.DATABEAN_GET_VALUE));

		// 業務個別設定組織コード → 対応記録登録マップ.対応記録登録リスト.業務個別設定組織コード
		childMap.put("wkkbt_org_cd", wkkbtOrgCd);

		// 業務個別設定組織名 → 対応記録登録マップ.対応記録登録リスト.業務個別設定組織名
		childMap.put("wkkbt_org_nm", wkkbtOrgNm);

		// ユーザーＩＤ → 対応記録登録マップ.対応記録登録リスト.ユーザーＩＤ
		childMap.put("user_id", userId);

		// ユーザー名 → 対応記録登録マップ.対応記録登録リスト.ユーザー名
		childMap.put("user_nm", userNm);

		// 年月日時分秒 → 対応記録登録マップ.対応記録登録リスト.年月日時分秒
		childMap.put("dtm", dtm);

		// 応対区分カテゴリーリストの作成
		ArrayList<HashMap<String, Object>> rspCtgrList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> ctgrMap = new HashMap<String, Object>();

		// 入金登録["112"固定] → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別コード
		ctgrMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_NYUKIN_ADD);

		// 手動入金["1302"固定] → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別詳細コード
		ctgrMap.put("prc_taio_kirok_dtl_bunrui_cd", JACStrConst.TKRK_SBTD_MANUAL_NYUKIN);

		// taio_kirok_add_listにrsp_ctgr_listを追加
		rspCtgrList.add(ctgrMap);
		childMap.put("rsp_ctgr_list", rspCtgrList);

		taioKirokAddList.add(childMap);

		parentMap.put("taio_kirok_add_list", taioKirokAddList);

		parentMap.put("seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(JACStrConst.TAIOKIROKADDCC_MAP_ID, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：請求書再発行
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　 ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setADDHOTVOICCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 応対区分カテゴリーリストの作成
		ArrayList<HashMap<String, Object>> rspCtgrList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> ctgrMap = new HashMap<String, Object>();
		rspCtgrList.add(ctgrMap);

		parentMap.put("RSP_CTGR_List", rspCtgrList);
		outputMap.put("ADDHOTVOICCC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：入金登録 [1]:共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　 ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setPRCTAIOKIROKADDCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl)
	{

		if (bean == null)
		{
			return null;
		}
		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccessArray arraybean = null;
		X31SDataBeanAccess beanTemp = null;
		List<HashMap<String, Object>> list = null;

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		if(parentMap.containsKey("prc_taio_kirok_list")){
			list = (ArrayList)parentMap.get("prc_taio_kirok_list");
		}else{
			list = new ArrayList();
		}

		HashMap childMap = new HashMap();

		// ユーザＩＤ → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応ユーザＩＤ
		childMap.put("prc_taio_user_id", bean[1].sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE));

		// 請求契約番号 → 料金対応記録登録マップ.料金対応記録明細リスト.請求契約番号
		childMap.put("seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 料金対応記録種別コード(：入金登録) → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_NYUKIN_ADD);

		// 料金対応記録種別詳細コード(：手動入金) → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_sbt_dtl_cd", JACStrConst.TKRK_SBTD_MANUAL_NYUKIN);

		// 記事 → 料金対応記録登録マップ.料金対応記録明細リスト.記事
		childMap.put("kiji", bean[0].sendMessageString(CHW00801SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE));

		// "請求書再発行" → 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put("title", JACScreenConst.SCREEN_NAME_CHW00801);

		// 未収金額合計（変更前） → 料金対応記録登録マップ.料金対応記録明細リスト.変更前金額
		childMap.put("chg_bf_amnt", bean[0].sendMessageString(CHW00801SFConst.MISHUGOKEI, X31CWebConst.DATABEAN_GET_VALUE));

		// 未収金額合計から充当額を引いて未収金額合計（変更後）を算出する
		BigDecimal mishuGokei = new BigDecimal(bean[0].sendMessageString(CHW00801SFConst.MISHUGOKEI, X31CWebConst.DATABEAN_GET_VALUE));
		String jutoSum = (this.getJutoAmntSum(bean));
		BigDecimal mishuGokeiAf = mishuGokei.subtract(new BigDecimal(jutoSum));

		// 未収金額合計（変更後） → 料金対応記録登録マップ.料金対応記録明細リスト.変更後金額
		childMap.put("chg_af_amnt", String.valueOf(mishuGokeiAf));

		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray(CHW00801SFConst.MINO_SAIKEN_ICRN_INFO);
		if (arraybean != null && arraybean.getCount() > 0)
		{
			for (int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);

				// 未納債権一覧情報.選択
				boolean choice = subbean.sendMessageBoolean(CHW00801SFConst.CHOICE_09, X31CWebConst.DATABEAN_GET_VALUE);

				// 選択している情報のみをマッピングする
				if (choice)
				{
					if (subbean != null)
					{
						// 未納債権一覧情報.請求年月 → 料金対応記録登録マップ.料金対応記録明細リスト.記録対象年月
						childMap.put("kirok_tg_ym", subbean.sendMessageString(CHW00801SFConst.SEIKY_YM_09, X31CWebConst.DATABEAN_GET_VALUE));
					}
					break;
				}
			}
		}

		// 対応履歴表示 → 料金対応記録登録マップ.料金対応記録明細リスト.対応履歴連動対象フラグ
		childMap.put("taiorrki_rendo_tg_flg", JCHWebCommon.getRendoFlg(bean[0], CHW00801SFConst.TAIO_RIREKI_DSP));

		list.add(childMap);

		parentMap.put("prc_taio_kirok_list", list);

		outputMap.put(JACStrConst.PRCTAIOKIROKADDCC_MAP_ID, parentMap);

		return outputMap;
	}

//v14.00.00 2015/05/22 ADD START
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：入金登録　[1]：共有フォームBean
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setJKKUSESTPKAIJOADDSHIJISHOCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		// 利用停止後指示書登録CC内で呼ばれるmapper部品内ではこちらを使用しているので設定する。
		parentMap.put("func_cd", func_code);

		// 請求契約番号 → 利用停止解除後指示書登録マップ.請求契約番号
		parentMap.put("seiky_kei_no", bean[0].sendMessageString(CHW00801SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("JKKUSESTPKAIJOADDSHIJISHOCC", parentMap);
						
		return outputMap;
	}
//v14.00.00 2015/05/22 ADD END

	/**
	 * 充当額合計取得
	 * 
	 * @param bean　[0]：入金登録
	 * @return 充当額合計
	 */
	private String getJutoAmntSum(X31SDataBeanAccess[] bean)
	{
		BigDecimal amntSum = BigDecimal.ZERO;

		X31SDataBeanAccessArray info = bean[0].getDataBeanArray(CHW00801SFConst.MINO_SAIKEN_ICRN_INFO);
		for (int idx = 0; idx < info.getCount(); idx++)
		{
			X31SDataBeanAccess subbean = info.getDataBean(idx);
			boolean choice = subbean.sendMessageBoolean(CHW00801SFConst.CHOICE_09, X31CWebConst.DATABEAN_GET_VALUE);
			if (choice)
			{
				String jutoAmnt = subbean.sendMessageString(CHW00801SFConst.JUTO_AMNT_09, X31CWebConst.DATABEAN_GET_VALUE);
				if (!JACStrConst.KARA_MOJI.equals(jutoAmnt.trim()))
				{
					amntSum = amntSum.add(new BigDecimal(jutoAmnt));
				}
			}
		}

		return String.valueOf(amntSum);
	}

}