/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom						 *
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatACContISPChrgIfTrkm
 *	ソースファイル名	：JBSbatACContISPChrgIfTrkm.java
 *	作成者				：富士通　
 *	作成日				：2011年06月02日
 *＜機能概要＞
 *　コンテンツ利用ＩＳＰ課金情報取込部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/06/02   富士通		新規作成
 *	v3.00		2012/05/15   FJ)永田	【ANK-0024-04-00】
 *	v3.01		2012/08/22   FJ)冨井	【ST2-2012-0001498】サービス契約蓄積スキーマ参照に変更
 *	v3.02		2012/08/29   FJ)岡田	【TG1-2012-0000137・138】金額の属性チェック変更
 *	v3.03		2012/10/03   FJ)岡田	【TG1-2012-0000203】請求契約番号設定不備対応
 *	v4.00		2012/12/27   FJ) 早崎	【TG1-2012-0000204】エラー情報出力項目「通信料」追加
 *	v4.01		2013/01/21   FJ) 浜口	【TG1-2012-0000181】サービス契約ステータス対象「解約済 or 停止中」→「キャンセル済」へ変更
 *	v5.00		2013/02/26   FJ) 浜口	【ANK-1419-00-00】050IP電話アプリ案件
 *	v5.01		2013/04/05   FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
 *	v5.02		2013/07/08   FJ) 狭間	【ST4-2013-0000495】性能改善の為、アンロード＆マッチング方式に変更
 *	v8.00		2013/12/18   FJ) 田内	【ANK-1584-00-00】「０５０電話番号」追加。組合せチェック追加。
 *	v8.01		2014/06/11   FJ）江森	【OM-2014-0002076】エラーデータ、料金計算結果リスト出力時の料金項目コード変換処理を追加
 *	v10.00		2014/08/20   FJ）中作	【OM-2014-0002690】障害対応
 *	v67.0.0		2023/08/22   FJ）佐野	【ANK-4455-00-00】コンテンツ料金取込処理改善
*	v65.00.00	2023/03/27   FJ) 小竹   【ANK-4346-00-00】【eo定期】CCMG再構築対応
 *********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatACIFM014;
import eo.business.util.file.JBSbatACIFM015;
import eo.business.util.file.JBSbatACIFM229;
import eo.business.util.table.JBSbatAC_T_SVKEI_CHIKUSEKI;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JPCUtilCommon;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatCheckUtil;


/**
 * (クラスの機能概要) <p>
 *<BR>
 * @author 富士通
 */
public class JBSbatACContISPChrgIfTrkm extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";

	/** テーブル(料金項目抽出変換)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE = "CH_M_PRC_KMK_CS_CHGE";
	
//ANK-4455-00-00 ADD START
	/** テーブル(サービス契約蓄積)*/
	private static final String D_TBL_NAME__AC_T_SVKEI_CHIKUSEKI = "AC_T_SVKEI_CHIKUSEKI";
//ANK-4455-00-00 ADD END

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String ZM_M_WORK_PARAM_KNRI_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(CH_SELECT_005)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_CH_SELECT_005 = "CH_SELECT_005";
	
//ANK-4455-00-00 ADD START
	/** SQL定義キー(AC_SELECT_015)*/
	private static final String AC_T_SVKEI_CHIKUSEKI_AC_SELECT_015 = "AC_SELECT_015";
	
	/** SQL定義キー(AC_SELECT_016)*/
	private static final String AC_T_SVKEI_CHIKUSEKI_AC_SELECT_016 = "AC_SELECT_016";
//ANK-4455-00-00 ADD END

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;
	
//ANK-4455-00-00 ADD START
	/** テーブルアクセスクラス(サービス契約蓄積)*/
	private JBSbatSQLAccess db_AC_T_SVKEI_CHIKUSEKI = null;
//ANK-4455-00-00 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 請求時期指定の規定値 */
	private static final String SEIKY_JIKI_SHITEI = "1";

	/** 請求年月の有効範囲 */
	private static final int SEIKY_YM_SCOPE = 11;

	/** 月差取得時の基準日 */
	private static final String MONTH_DIFF_BASE_DAY = "01";

	/** [システムパラメータ]処理識別コード */
	private String sysTranSkbtCd = JACStrConst.KARA_MOJI;

	/** [システムパラメータ]外部料金取込システム区分 */
	private String sysOutPrcTrkmSysDiv = JACStrConst.KARA_MOJI;

	/** [コード名称管理]取込元 */
	private String cdTeigiTrkmMt = JACStrConst.KARA_MOJI;

	/** [コード名称管理]請求時期指定 */
	private HashMap<String, String> cdTeigiSeikyJikiMap = null;
	
	/** 未請求一時金ありエラー */
	private String[] ichjikinErr = null;

	/** [業務パラメータ]エラーメッセージ */
	private HashMap<String, String> wkParamErrMsgMap = null;

	/** 単項目チェック項目マップ */
	private HashMap<String, String> singleChkKmkMap = null;

	/** 料金計算月 */
	private String prcCalcYm = JACStrConst.KARA_MOJI;

	/** 料金グループコード */
	private String wkPrcGrpCd = JACStrConst.KARA_MOJI;

	/** 請求契約番号 */
	private String wkSeikyKeiNo = JACStrConst.KARA_MOJI;

	/** 未請求一時金ありエラーコード */
	private String ichjikinErrCd = JACStrConst.KARA_MOJI;

	/** コンテンツ利用ISP課金エラー情報（料金結果リスト） */
	private ArrayList<ArrayList<Object>> outErrInfo = null;
	
	/** 出力ファイル定義 */
	private static final String PRM_OTD = "OTD";

	/** コンテンツ利用ISP課金エラー情報ファイル件数 */
	private int 	errInfCnt 	= 0;
	
	/** 退避．050アプリ変換料金項目引当マップ*/
	private HashMap<String, String> aplPrcHkatMap = null;
	
	/** 退避．必須詳細料金項目Set*/
	private HashSet<String> reDtPrcSet = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
//ANK-4455-00-00 ADD START
		db_AC_T_SVKEI_CHIKUSEKI = new JBSbatSQLAccess(commonItem, D_TBL_NAME__AC_T_SVKEI_CHIKUSEKI);
//ANK-4455-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		aplPrcHkatMap = new HashMap<String, String>();
		reDtPrcSet = new HashSet<String>();

		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);

		// システムパラメータより処理識別コードを取得する
		sysTranSkbtCd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPT_ADD);

		// 業務パラメータより外部料金取込システム区分を取得する
		sysOutPrcTrkmSysDiv = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPS_CONT_ISP_CHRG);
		
		// 業務パラメータより050アプリ変換の機能識別コードを取得する
		String wkAplSk = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_050_APP_CNG);
		
		// 業務パラメータより必須詳細料金項目の機能識別コードを取得する
		String wkReDtPrc = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_RE_DT_PRC);

		paramUtil.close();
		
		// 取得した機能識別コードにバッチ運用日の月の前々月の月部分を付与
		String aplSkTuki = wkAplSk.concat(JPCUtilCommon.addMonth(super.opeDate , -2).substring(4, 6));

		// 料金項目抽出変換スキーマから精算料金項目を取得する
		getAplCd(aplSkTuki);
		
		// 料金項目抽出変換スキーマから必須詳細料金項目を取得する
		getReDtPrcSet(wkReDtPrc);

		// 業務パラメータよりデータチェックエラーメッセージを取得する
		wkParamErrMsgMap = getDataChkErrMsg();

		// コード名称定義より取込元（コンテンツ）を取得する(コード区分略称を使用)
		cdTeigiTrkmMt = getCdNmKanri(JZM0171Constant.CD00888, JACStrConst.CD_DIV_TRKM_MT_3)[1];

		// コード名称定義より請求時期指定を取得する
		cdTeigiSeikyJikiMap = getCdNmKanri(JZM0171Constant.CD00972);

		//コード名定義より未請求一時金ありエラーを取得
		ichjikinErrCd = wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_RSLT_ICJKIN_ERR);
		ichjikinErr = getCdNmKanri(JZM0171Constant.CD01172, ichjikinErrCd);

		// 料金計算月を取得する
		executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_001(new Object[] {JACStrConst.EVENT_CD_PRC_CALC_DAY, super.opeDate});
		JBSbatCommonDBInterface record = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		if (record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM) != null)
		{
			prcCalcYm = record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM);
		}
		else
		{
			// 料金スケジュール管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME });
		}
		
		outErrInfo = new ArrayList<ArrayList<Object>>();

		// 単項目チェック用Map生成
		singleChkKmkMap = new HashMap<String, String>();
		singleChkKmkMap.put("TXT-ACIFI006-INF1.SVC_KEI_NO", "コンテンツ利用ＩＳＰ課金外部料金取込データ.サービス契約番号");
// ANK-4346-00-00 ADD START
		singleChkKmkMap.put("TXT-ACIFI006-INF1.N_050_TELNO", "コンテンツ利用ＩＳＰ課金外部料金取込データ.050電話番号");
// ANK-4346-00-00 ADD END
		singleChkKmkMap.put("TXT-ACIFI006-INF1.PRC_KMK_CD", "コンテンツ利用ＩＳＰ課金外部料金取込データ.料金項目コード");
		singleChkKmkMap.put("TXT-ACIFI006-INF1.SEIKY_JIKI_SHITEI", "コンテンツ利用ＩＳＰ課金外部料金取込データ.請求時期指定");
		singleChkKmkMap.put("TXT-ACIFI006-INF1.SEIKY_YM", "コンテンツ利用ＩＳＰ課金外部料金取込データ.請求年月");
		singleChkKmkMap.put("TXT-ACIFI006-INF1.SEIKY_AMNT", "コンテンツ利用ＩＳＰ課金外部料金取込データ.請求金額");
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 単項目チェック(レイアウトチェック)
		if (!isSingleCheckACIFI006_INF1(inMap.getMap(), singleChkKmkMap))
		{
			// エラーの場合は処理終了
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0500CE);
		}

		// 出力共通電文オブジェクト生成
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// データチェック
		String errMsg = chkData(inMap);
		if (!JACStrConst.KARA_MOJI.equals(errMsg))
		{
			// エラーデータへ格納
			outputBean.addOutMapList_2(setErrDataFileMap(inMap, errMsg));
		}
		else
		{
			// 情報付加処理
			
			// 料金項目コード
			String prcKmkCd = inMap.getString(JBSbatACIFM229.PRC_KMK_CD);
			
			// サービス識別番号
			String svcDtlSkbtNo = inMap.getString(JBSbatACIFM229.N_050_TELNO).trim();
			
//ANK-4455-00-00 ADD START
			String[] files = freeItem.split(JACStrConst.FREE_DIV);
			//サービス契約番号
			String svcKeiNo = inMap.getString(JBSbatACIFM229.SVC_KEI_NO).trim();
			//料金コースコードが取得できなかった場合
			if(JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatACIFM229.PCRS_CD)))
			{
				//サービス契約蓄積を検索する
				executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_015(new Object[] {svcKeiNo,  files[3], files[2], super.opeDate, super.opeDate});
				JBSbatCommonDBInterface record = db_AC_T_SVKEI_CHIKUSEKI.selectNext();
				if (record != null)
				{
					inMap.setString(JBSbatACIFM229.PRC_GRP_CD, record.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_GRP_CD));
					inMap.setString(JBSbatACIFM229.PCRS_CD, record.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PCRS_CD));
					inMap.setString(JBSbatACIFM229.PRC_SVC_CD, record.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_SVC_CD));
					// 料金グループコード
					wkPrcGrpCd = inMap.getString(JBSbatACIFM229.PRC_GRP_CD);
				}
				else
				{
					executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_016(new Object[] {svcKeiNo,  files[3], files[2], super.opeDate, super.opeDate});
					JBSbatCommonDBInterface record_1 = db_AC_T_SVKEI_CHIKUSEKI.selectNext();
					if (record_1 != null)
					{
						inMap.setString(JBSbatACIFM229.PRC_GRP_CD, record_1.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_GRP_CD));
						inMap.setString(JBSbatACIFM229.PCRS_CD, record_1.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PCRS_CD));
						inMap.setString(JBSbatACIFM229.PRC_SVC_CD, record_1.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_SVC_CD));
						// 料金グループコード
						wkPrcGrpCd = inMap.getString(JBSbatACIFM229.PRC_GRP_CD);
					}
				}
			}
//ANK-4455-00-00 ADD END
			
			if(JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatACIFM229.PCRS_CD)))
			{
				//エラー情報を出力する（コンテンツ利用ISP課金エラー情報（料金計算結果リスト））
				ArrayList<Object> errInfoData = createErrInfo(inMap, ichjikinErrCd);
				
				outErrInfo.add(errInfoData);
				
			}
			// 組合せチェック＜識別番号指定エラー（入力不可）＞
			else if (!reDtPrcSet.contains(prcKmkCd) && !JACStrConst.KARA_MOJI.equals(svcDtlSkbtNo))
			{
				// エラーデータへ格納
				outputBean.addOutMapList_2(setErrDataFileMap(inMap, wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_SKBT_NO_HUKA)));
				
			}
			// 組合せチェック＜識別番号指定エラー（入力必須）＞
			else if (reDtPrcSet.contains(prcKmkCd) && JACStrConst.KARA_MOJI.equals(svcDtlSkbtNo))
			{
				// エラーデータへ格納
				outputBean.addOutMapList_2(setErrDataFileMap(inMap, wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_SKBT_NO_HISSU)));
			}
			else
			{
				// 正常
				outputBean.addOutMapList(setNormalDataFileMap(inMap));
			}
		}

		return outputBean;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		String[] files = freeItem.split(JACStrConst.FREE_DIV);
		
		//コンテンツ利用ISP課金エラー情報取得
		JBSbatOutputFileUtil errInfoFile = new JBSbatOutputFileUtil(files[1]);
		String errInfoFileDefName = JBSbatAplConst.getAplConstValue(PRM_OTD) + files[0];
		JBSbatDefFileUtil errInfoFileDef = new JBSbatDefFileUtil(errInfoFileDefName, errInfoFile);
		
		//コンテンツ利用ISP課金エラー情報出力
		createFile(files[1], outErrInfo, errInfoFile.getEncode(), JACBatCommon.chgKaigyo(errInfoFile.getLine()), errInfoFileDef.getDelimiter());
		
		// 出力件数ログ出力
		String[] msgParam = new String[]{"コンテンツ利用ISP課金エラー情報(料金計算結果リスト：" + files[1], Integer.toString(this.errInfCnt)};
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0780AI, msgParam);
		
		/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_ZM_M_CD_NM_KANRI.close();
		db_CH_M_PRC_SCHDL_TEIGI.close();
		db_CH_M_PRC_KMK_CS_CHGE.close();
//ANK-4455-00-00 ADD START
		db_AC_T_SVKEI_CHIKUSEKI.close();
//ANK-4455-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	/**
	 *入力情報（コンテンツ利用ＩＳＰ課金外部料金取込データ）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-ACIFI006-INF1.SVC_KEI_NO			コンテンツ利用ＩＳＰ課金外部料金取込データ.サービス契約番号
	 *			 TXT-ACIFI006-INF1.SVC_KEI_NO			コンテンツ利用ＩＳＰ課金外部料金取込データ.サービス契約番号
	 *			 TXT-ACIFI006-INF1.SVC_KEI_NO			コンテンツ利用ＩＳＰ課金外部料金取込データ.サービス契約番号
	 *			 TXT-ACIFI006-INF1.N_050_TELNO			コンテンツ利用ＩＳＰ課金外部料金取込データ.050電話番号
	 *			 TXT-ACIFI006-INF1.N_050_TELNO			コンテンツ利用ＩＳＰ課金外部料金取込データ.050電話番号
	 *			 TXT-ACIFI006-INF1.PRC_KMK_CD			コンテンツ利用ＩＳＰ課金外部料金取込データ.料金項目コード
	 *			 TXT-ACIFI006-INF1.PRC_KMK_CD			コンテンツ利用ＩＳＰ課金外部料金取込データ.料金項目コード
	 *			 TXT-ACIFI006-INF1.PRC_KMK_CD			コンテンツ利用ＩＳＰ課金外部料金取込データ.料金項目コード
	 *			 TXT-ACIFI006-INF1.SEIKY_JIKI_SHITEI			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求時期指定
	 *			 TXT-ACIFI006-INF1.SEIKY_JIKI_SHITEI			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求時期指定
	 *			 TXT-ACIFI006-INF1.SEIKY_JIKI_SHITEI			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求時期指定
	 *			 TXT-ACIFI006-INF1.SEIKY_YM			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求年月
	 *			 TXT-ACIFI006-INF1.SEIKY_YM			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求年月
	 *			 TXT-ACIFI006-INF1.SEIKY_YM			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求年月
	 *			 TXT-ACIFI006-INF1.SEIKY_AMNT			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求金額
	 *			 TXT-ACIFI006-INF1.SEIKY_AMNT			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求金額
	 *			 TXT-ACIFI006-INF1.SEIKY_AMNT			コンテンツ利用ＩＳＰ課金外部料金取込データ.請求金額
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckACIFI006_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// サービス契約番号項目チェック
		strValue = (String)rsMap.get("SVC_KEI_NO");
		
		// 必須チェック
		if(strValue == null || JACStrConst.KARA_MOJI.equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SVC_KEI_NO")});
			return false;
		}
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SVC_KEI_NO")});
			return false;
		}
		
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SVC_KEI_NO")});
			return false;
		}

// ANK-4346-00-00 ADD START
		// 050電話番号項目チェック
		strValue = (String)rsMap.get("N_050_TELNO");
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "11"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.N_050_TELNO")});
			return false;
		}
		
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.N_050_TELNO")});
			return false;
		}
// ANK-4346-00-00 ADD END

		// 料金項目コード項目チェック
		strValue = (String)rsMap.get("PRC_KMK_CD");
		
		// 必須チェック
		if(strValue == null || JACStrConst.KARA_MOJI.equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.PRC_KMK_CD")});
			return false;
		}
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "11"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.PRC_KMK_CD")});
			return false;
		}
		
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.PRC_KMK_CD")});
			return false;
		}

// ANK-4346-00-00 DEL START
//		// 請求時期指定項目チェック
//		strValue = (String)rsMap.get("SEIKY_JIKI_SHITEI");
//		
//		// 必須チェック
//		if(strValue == null || JACStrConst.KARA_MOJI.equals(strValue))
//		{
//			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
//					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_JIKI_SHITEI")});
//			return false;
//		}
//		
//		// 桁数チェック
//		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "1"}))
//		{
//			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
//					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_JIKI_SHITEI")});
//			return false;
//		}
//		
//		// 属性チェック
//		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
//		{
//			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
//					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_JIKI_SHITEI")});
//			return false;
//		}
// ANK-4346-00-00 DEL END

		// 請求年月項目チェック
		strValue = (String)rsMap.get("SEIKY_YM");
		
		// 必須チェック
		if(strValue == null || JACStrConst.KARA_MOJI.equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_YM")});
			return false;
		}
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "6"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_YM")});
			return false;
		}
		
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0480CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_YM")});
			return false;
		}

		// 請求金額項目チェック
		strValue = (String)rsMap.get("SEIKY_AMNT");
		
		// 必須チェック
		if(strValue == null || JACStrConst.KARA_MOJI.equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_AMNT")});
			return false;
		}
		
		// 桁数チェック
// ANK-4346-00-00 MOD START
//		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "12"}))
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "1", "7"}))
// ANK-4346-00-00 MOD END
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_AMNT")});
			return false;
		}
		
		// 属性チェック
// ANK-4346-00-00 MOD START
//		if(!JBSbatCheckUtil.invoke(strValue.trim(), new String[]{"hannkakuesuuji6"}))
		if(!JBSbatCheckUtil.invoke(strValue.trim(), new String[]{"hannkakusuuji1"}))
// ANK-4346-00-00 MOD END
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
					(String)itemvalueMap.get("TXT-ACIFI006-INF1.SEIKY_AMNT")});
			return false;
		}

		return true;
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 *		 	コード区分
	 *		 	コード適用開始年月日
	 *		 	コード適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 *		 	コード適用開始年月日
	 *		 	コード適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_AC_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_AC_SELECT_002);
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	イベントコード
	 *		 	イベント日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_AC_SELECT_001);
	}

	/**
	 * SQLKEY(CH_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	業務機能識別機能コード
	 *		 	抽出変換コード
	 *		 	適用開始年月日
	 *		 	適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_005(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_CH_SELECT_005);
	}
	
	//ANK-4455-00-00 ADD START
	/**
	 * SQLKEY(AC_SELECT_015)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	請求年月
	 *		 	課金開始年月日
	 *		 	料金サービス管理適用開始年月日
	 *		 	料金サービス管理適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_015(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_AC_T_SVKEI_CHIKUSEKI.selectBySqlDefine(paramList, AC_T_SVKEI_CHIKUSEKI_AC_SELECT_015);
	}
	
	/**
	 * SQLKEY(AC_SELECT_016)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	請求年月
	 *		 	課金開始年月日
	 *		 	料金サービス管理適用開始年月日
	 *		 	料金サービス管理適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_016(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_AC_T_SVKEI_CHIKUSEKI.selectBySqlDefine(paramList, AC_T_SVKEI_CHIKUSEKI_AC_SELECT_016);
	}
	//ANK-4455-00-00 ADD END
	
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 入力ファイルのデータチェックを行う
	 * @param inMap		入力電文
	 * @return JBSbatServiceInterfaceMap	エラー出力電文
	 * @throws Exception
	 */
	private String chkData(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 請求契約番号の初期化処理
		wkSeikyKeiNo = JACStrConst.KARA_MOJI;
		
		// 050電話番号形式チェック
		String n050Telno = inMap.getString(JBSbatACIFM229.N_050_TELNO).trim();
		if (!JACStrConst.KARA_MOJI.equals(n050Telno))
		{
			if (!JBSbatCheckUtil.invoke(n050Telno, new String[]{"tel2"}) || n050Telno.length() != 11) {
				// 050電話番号形式エラー
				return wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_MSG_050_TELNO_ERR);
			}
		}

		// サービス契約番号存在チェック および 料金コースコード取得
		String chkValue = inMap.getString(JBSbatACIFM229.SVC_KEI_NO);
		
		// OM-2014-0002690 MOD START
		//wkPrcGrpCd = inMap.getString(JBSbatACIFM229.PRC_GRP_CD);
		//if (JACStrConst.KARA_MOJI.equals(wkPrcGrpCd))
		//{
		//	// サービス契約番号未存在エラー
		//	return wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR);
		//}
		
		// サービス契約ステータスチェック およびサービス契約ステータス取得
		String svcKeiStat = inMap.getString(JBSbatACIFM229.SVC_KEI_STAT);
		
		// サービス契約存在チェック
		if (JACStrConst.KARA_MOJI.equals(svcKeiStat))
		{
			// サービス契約番号未存在エラー
			return wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR);
		}
		
		if (JACStrConst.SVC_KEI_STAT_CNCL_ZUMI.equals(svcKeiStat))
		{
			// 契約期間外エラー
			return wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_MSG_KEI_PRD_ERR);
		}
		
		// 料金グループコード
		wkPrcGrpCd = inMap.getString(JBSbatACIFM229.PRC_GRP_CD);
		// OM-2014-0002690 MOD END
		
		// 請求契約番号存在チェック および 請求契約番号・請求ステータス取得
		wkSeikyKeiNo = inMap.getString(JBSbatACIFM229.SEIKY_KEI_NO_KAKINS);
		if (JACStrConst.KARA_MOJI.equals(wkSeikyKeiNo))
		{
			// 請求契約番号未存在エラー
			return wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_MSG_NO_SEIKYNOERR);
		}

// ANK-4346-00-00 DEL START
//		// 請求時期指定
//		chkValue = inMap.getString(JBSbatACIFM229.SEIKY_JIKI_SHITEI);
//		if (!SEIKY_JIKI_SHITEI.equals(chkValue))
//		{
//			// 請求時期指定エラー
//			return wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_MSG_SEIKYJKERR);
//		}
// ANK-4346-00-00 DEL END

		// 請求年月
		chkValue = inMap.getString(JBSbatACIFM229.SEIKY_YM);

		// 料金計算月と一致しない場合エラー
		int mDiff = JCCBatCommon.subtractMonth(chkValue + MONTH_DIFF_BASE_DAY, prcCalcYm + MONTH_DIFF_BASE_DAY);

// ANK-4346-00-00 DEL START
		//if (mDiff < 0 || mDiff > SEIKY_YM_SCOPE)
		if (mDiff != 0 )
// ANK-4346-00-00 DEL START
		{
			// 請求年月エラー
			return wkParamErrMsgMap.get(JACStrConst.WKPARA_AC_MSG_SEIKYYMERR);
		}

		return JACStrConst.KARA_MOJI;
	}

	/**
	 * データチェックエラーメッセージを業務パラメータから取得する
	 * @return	データチェックエラーメッセージMAP
	 * @throws Exception
	 */
	private HashMap<String, String> getDataChkErrMsg() throws Exception
	{
		HashMap<String, String> retErrMsg = new HashMap<String, String>();
		String wkParamValue = JACStrConst.KARA_MOJI;
		
		// 050電話番号形式エラー
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_MSG_050_TELNO_ERR);
		retErrMsg.put(JACStrConst.WKPARA_AC_MSG_050_TELNO_ERR, wkParamValue);

		// サービス契約番号未存在エラー
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR);
		retErrMsg.put(JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR, wkParamValue);

		// サービス契約ステータスエラー
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_MSG_KEI_PRD_ERR);
		retErrMsg.put(JACStrConst.WKPARA_AC_MSG_KEI_PRD_ERR, wkParamValue);

		// 請求契約番号未存在エラー
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_MSG_NO_SEIKYNOERR);
		retErrMsg.put(JACStrConst.WKPARA_AC_MSG_NO_SEIKYNOERR, wkParamValue);

		// 請求時期指定エラー
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_MSG_SEIKYJKERR);
		retErrMsg.put(JACStrConst.WKPARA_AC_MSG_SEIKYJKERR, wkParamValue);

		// 請求年月エラー
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_MSG_SEIKYYMERR);
		retErrMsg.put(JACStrConst.WKPARA_AC_MSG_SEIKYYMERR, wkParamValue);

		//未請求一時金ありエラー
		String[] icjkinerr = getWkParamKanri(JACStrConst.WKPARA_AC_RSLT_ICJKIN_ERR).split(JACStrConst.COMMA);
		wkParamValue = icjkinerr[0];
		retErrMsg.put(JACStrConst.WKPARA_AC_RSLT_ICJKIN_ERR, wkParamValue);

		// 識別番号指定エラー（入力不可）
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_SKBT_NO_HUKA);
		retErrMsg.put(JACStrConst.WKPARA_AC_SKBT_NO_HUKA, wkParamValue);

		// 識別番号指定エラー（入力必須）
		wkParamValue = getWkParamKanri(JACStrConst.WKPARA_AC_SKBT_NO_HISSU);
		retErrMsg.put(JACStrConst.WKPARA_AC_SKBT_NO_HISSU, wkParamValue);

		return retErrMsg;
	}

	/**
	 * 料金項目コード変換情報の取得。
	 * @param wKinoSkbt    業務機能識別コード(050アプリ)
	 * @throws Exception
	 */
	
	private void getAplCd(String wKinoSkbt) throws Exception
	{
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		// 対象キーの設定
		dbList.setValue(super.systemCode); 					// システムコード
		dbList.setValue(wKinoSkbt); 						// 業務機能識別コード
		dbList.setValue(JACStrConst.CHSHT_CHG_CD_CHG); 		// 抽出変換コード（抽出&変換も含む） 
		dbList.setValue(super.opeDate); 					// バッチ運用日
		dbList.setValue(super.opeDate); 					// バッチ運用日

		// 料金項目抽出変換データ取得
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_005(dbList.getList().toArray());
		
		// 料金項目抽出変換データ取得結果
		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		
		if(dbMap == null)
		{
			String[] msgParam = new String[]{JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME, wKinoSkbt};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0260CH, msgParam);
		}
		
		//取得情報をMAPに保持
		while(dbMap != null)
		{
			// キー作成
			String key = dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD);
			
			// 値作成
			String value = dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.OUT_PRC_KMK_CD);

			// キー・取得した情報をマップに格納
			aplPrcHkatMap.put(key, value);

			// 次レコード取得
			dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext(); 
		}
	}
	
	/**
	 * 組み合わせチェック用料金項目コード変換情報の取得。
	 * @param wKinoSkbt    業務機能識別コード(必須詳細料金項目)
	 * @throws Exception
	 */
	
	private void getReDtPrcSet(String wKinoSkbt) throws Exception
	{
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		// 対象キーの設定
		dbList.setValue(super.systemCode); 					// システムコード
		dbList.setValue(wKinoSkbt); 						// 業務機能識別コード
		dbList.setValue(JACStrConst.CHSHT_CHG_CD_CST); 		// 抽出変換コード（抽出のみ） 
		dbList.setValue(super.opeDate); 					// バッチ運用日
		dbList.setValue(super.opeDate); 					// バッチ運用日

		// 料金項目抽出変換データ取得
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_005(dbList.getList().toArray());
		
		// 料金項目抽出変換データ取得結果
		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		
		if(dbMap == null)
		{
			String[] msgParam = new String[]{JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME, wKinoSkbt};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0260CH, msgParam);
		}
		
		//取得情報をMAPに保持
		while(dbMap != null)
		{
			// キー情報をSetに格納
			reDtPrcSet.add(dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD));

			// 次レコード取得
			dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext(); 
		}
	}
	
	/**
	 * エラーファイルの出力項目を設定する
	 * @param inMap		入力電文
	 * @param errMsg	エラー内容
	 * @return	JBSbatServiceInterfaceMap	出力電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setErrDataFileMap(JBSbatServiceInterfaceMap inMap, String errMsg) throws Exception
	{
		JBSbatServiceInterfaceMap retMap = new JBSbatServiceInterfaceMap();

		// 取込先
		retMap.set(JBSbatACIFM015.TRKM_MT, cdTeigiTrkmMt);

		// 請求先番号
		retMap.set(JBSbatACIFM015.SEIKY_NO, wkSeikyKeiNo);

		// サービス契約番号
		retMap.set(JBSbatACIFM015.SVC_KEI_NO, inMap.get(JBSbatACIFM229.SVC_KEI_NO));
		
		// サービス詳細識別番号
		retMap.set(JBSbatACIFM015.SVC_DTL_SKBT_NO, inMap.getString(JBSbatACIFM229.N_050_TELNO).trim());

		// エラー内容
		retMap.set(JBSbatACIFM015.ERR_NAIYO, errMsg);

		// 料金コースコード
		retMap.set(JBSbatACIFM015.PCRS_CD, JACStrConst.KARA_MOJI);

		// 料金コース名称
		retMap.set(JBSbatACIFM015.PCRS_NM, JACStrConst.KARA_MOJI);

		// 料金サービスコード
		retMap.set(JBSbatACIFM015.PRC_SVC_CD, JACStrConst.KARA_MOJI);

		// キー作成
		String key = inMap.getString(JBSbatACIFM229.PRC_KMK_CD);

		// 料金項目コードが050アプリ変換対象の場合
		if(aplPrcHkatMap.containsKey(key))
		{
			// 請求年月に応じた料金項目コードに変換する。
			retMap.set(JBSbatACIFM014.PRC_KMK_CD, aplPrcHkatMap.get(key));
		}
		
		// 料金項目コードが050アプリ変換対象以外の場合
		else
		{
			// 変換せずに出力する
			retMap.set(JBSbatACIFM014.PRC_KMK_CD, inMap.get(JBSbatACIFM229.PRC_KMK_CD));

		}

		// 料金内訳名
		retMap.setString(JBSbatACIFM015.PRC_UCWK_NM, JACStrConst.KARA_MOJI);

		// 請求時期指定コード
		String seikyJikiShiteiCd = inMap.getString(JBSbatACIFM229.SEIKY_JIKI_SHITEI);
		retMap.set(JBSbatACIFM015.SEIKY_JIKI_SHITEI_CD, seikyJikiShiteiCd);

		// 請求時期指定名
		if (cdTeigiSeikyJikiMap.containsKey(seikyJikiShiteiCd))
		{
			retMap.set(JBSbatACIFM015.SEIKY_JIKI_SHITEI_NM, cdTeigiSeikyJikiMap.get(seikyJikiShiteiCd));
		}
		else
		{
			// コード名称管理から請求時期指定名が取得できない場合は空白とする
			retMap.set(JBSbatACIFM015.SEIKY_JIKI_SHITEI_NM, JACStrConst.KARA_MOJI);
		}

		// 請求年月
		retMap.set(JBSbatACIFM015.SEIKY_YM, JCCBatCommon.formatYears(inMap.getString(JBSbatACIFM229.SEIKY_YM)));

		// 請求金額
		retMap.set(JBSbatACIFM015.SEIKY_AMNT, JCCBatCommon.formatNumber(inMap.getString(JBSbatACIFM229.SEIKY_AMNT)));

		// 囲み文字("")付与
		retMap.setMap(JCHbatSeikyKaknoBusinessUtil.quote(retMap.getMap(), JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE));

		retMap.setOutFlg(true);

		return retMap;
	}

	/**
	 * 正常ファイルの出力項目を設定する
	 * @param inMap		入力電文
	 * @param seikyKeiNo	請求契約番号
	 * @param pcrsCd	料金コースコード
	 * @return	JBSbatServiceInterfaceMap	出力電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setNormalDataFileMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap retMap = new JBSbatServiceInterfaceMap();

		// 処理識別コード
		retMap.set(JBSbatACIFM014.TRAN_SKBT_CD, sysTranSkbtCd);

		// 請求契約番号
		retMap.set(JBSbatACIFM014.SEIKY_KEI_NO, wkSeikyKeiNo);

		// サービス契約番号
		retMap.set(JBSbatACIFM014.SVC_KEI_NO, inMap.get(JBSbatACIFM229.SVC_KEI_NO));

		// 料金グループコード
		retMap.set(JBSbatACIFM014.PRC_GRP_CD, wkPrcGrpCd);

		// 料金コースコード
		retMap.set(JBSbatACIFM014.PCRS_CD, inMap.getString(JBSbatACIFM229.PCRS_CD));

		// 料金サービスコード
		retMap.set(JBSbatACIFM014.PRC_SVC_CD, inMap.getString(JBSbatACIFM229.PRC_SVC_CD));

		// キー作成
		String key = inMap.getString(JBSbatACIFM229.PRC_KMK_CD);

		// 料金項目コードが050アプリ変換対象の場合
		if(aplPrcHkatMap.containsKey(key))
		{
			// 請求年月に応じた料金項目コードに変換する。
			retMap.set(JBSbatACIFM014.PRC_KMK_CD, aplPrcHkatMap.get(key));
		}
		
		// 料金項目コードが050アプリ変換対象以外の場合
		else
		{
			// 変換せずに出力する
			retMap.set(JBSbatACIFM014.PRC_KMK_CD, inMap.get(JBSbatACIFM229.PRC_KMK_CD));

		}
		
		// 請求時期指定
		retMap.set(JBSbatACIFM014.SEIKY_JIKI_SHITEI, inMap.get(JBSbatACIFM229.SEIKY_JIKI_SHITEI));

		// 請求年月
		retMap.set(JBSbatACIFM014.SEIKY_YM, inMap.get(JBSbatACIFM229.SEIKY_YM));

		// 請求金額
		retMap.set(JBSbatACIFM014.SEIKY_AMNT, inMap.get(JBSbatACIFM229.SEIKY_AMNT));

		// 外部料金取込システム区分
		retMap.set(JBSbatACIFM014.OUT_PRC_TRKM_SYS_DIV, sysOutPrcTrkmSysDiv);
		
		// サービス詳細識別番号
		retMap.set(JBSbatACIFM014.SVC_DTL_SKBT_NO, inMap.getString(JBSbatACIFM229.N_050_TELNO).trim());

		retMap.setOutFlg(true);

		return retMap;
	}


	/**
	 * エラー情報の出力項目を設定する
	 * @param inMap		入力電文
	 * @param errMsg	エラーコード
	 * @return	JBSbatServiceInterfaceMap	出力電文
	 * @throws Exception
	 */
	ArrayList<Object> createErrInfo(JBSbatServiceInterfaceMap inMap, String errMsg) throws Exception
	{
		
		ArrayList<Object> errInfoData = new ArrayList<Object>();
		
		//エラーコード
		errInfoData.add(errMsg);

		//エラー内容
		errInfoData.add(ichjikinErr[0]);

		//処理日
		errInfoData.add(JPCUtilCommon.formatDate(super.opeDate));

		//請求先番号
		errInfoData.add(wkSeikyKeiNo);

		//請求先カナ名
		errInfoData.add(JACStrConst.KARA_MOJI);

		//サービス契約番号
		errInfoData.add(inMap.get(JBSbatACIFM229.SVC_KEI_NO));
		
		//サービス詳細識別番号
		errInfoData.add(inMap.getString(JBSbatACIFM229.N_050_TELNO).trim());

		//請求年月
		errInfoData.add(inMap.get(JBSbatACIFM229.SEIKY_YM));

		//料金コースコード
		errInfoData.add(JACStrConst.KARA_MOJI);

		//料金サービスコード
		errInfoData.add(JACStrConst.KARA_MOJI);

		// キー作成
		String key = inMap.getString(JBSbatACIFM229.PRC_KMK_CD);

		// 料金項目コードが050アプリ変換対象の場合
		if(aplPrcHkatMap.containsKey(key))
		{
			// 請求年月に応じた料金項目コードに変換する。
			errInfoData.add(aplPrcHkatMap.get(key));
		}
		
		// 料金項目コードが050アプリ変換対象以外の場合
		else
		{
			// 変換せずに出力する
			errInfoData.add(inMap.get(JBSbatACIFM229.PRC_KMK_CD));

		}

		//料金内訳明細
		errInfoData.add(JACStrConst.KARA_MOJI);

		//請求金額
		errInfoData.add(inMap.getString(JBSbatACIFM229.SEIKY_AMNT));

		//通信料
		errInfoData.add(JACStrConst.KARA_MOJI);

		//投入区分
		errInfoData.add(JACStrConst.KARA_MOJI);
		
		
		// コンテンツ利用ISP課金エラー情報エラーファイル出力カウントアップ
		this.errInfCnt++;
		
		return errInfoData;
	}


	/**
	 * 業務パラメータ管理テーブルから業務パラメータ設定値を取得する
	 * @param wkParamId		業務パラメータID
	 * @return	String	業務パラメータ設定値
	 * @throws Exception
	 */
	private String getWkParamKanri(String wkParamId) throws Exception
	{
		executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(new Object[] {wkParamId, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface record = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		if (record != null)
		{
			return record.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		}
		else
		{
			// 業務パラメータ管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME });
		}
	}

	/**
	 * コード名称管理テーブルからコード区分名、コード区分略称を取得する
	 * @param cdSbtCd	コード種別コード
	 * @param cdDiv	コード区分
	 * @return	String[]	0=コード区分名、1=コード区分略称
	 * @throws Exception
	 */
	private String[] getCdNmKanri(String cdSbtCd, String cdDiv) throws Exception
	{
		executeZM_M_CD_NM_KANRI_AC_SELECT_001(new Object[] {cdSbtCd, cdDiv, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface record = db_ZM_M_CD_NM_KANRI.selectNext();
		if (record != null)
		{
			return new String[] {record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM), 
					record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_ALI)};
		}
		else
		{
			// コード名称管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatZM_M_CD_NM_KANRI.TABLE_NAME });
		}
	}

	/**
	 * コード名称管理テーブルからコード区分、コード区分名、コード区分略称を取得する
	 * @param cdSbtCd	コード種別コード
	 * @return	HashMap	key=コード区分、value=コード区分略称
	 * @throws Exception
	 */
	private HashMap<String, String> getCdNmKanri(String cdSbtCd) throws Exception
	{
		HashMap<String, String> retCdNmKanri = new HashMap<String, String>();
		executeZM_M_CD_NM_KANRI_AC_SELECT_002(new Object[] {cdSbtCd, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface record = db_ZM_M_CD_NM_KANRI.selectNext();
		while (record != null)
		{
			retCdNmKanri.put(record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV), 
					record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_ALI));
			record = db_ZM_M_CD_NM_KANRI.selectNext();
		}
		if (retCdNmKanri.size() == 0)
		{
			// コード名称管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatZM_M_CD_NM_KANRI.TABLE_NAME });
		}
		return retCdNmKanri;
	}

	/**
	 * ファイル出力
	 * 
	 * @param file ファイル名
	 * @param arrayList 出力データを格納した配列
	 * @param encode エンコード
	 * @param line 改行コード
	 * @param div 区切文字
	 * @throws Exception
	 */
	private void createFile(String file, ArrayList<ArrayList<Object>> arrayList, String encode, String line, String div) throws Exception
	{
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode.toUpperCase()))
		{
			encode = JACStrConst.ENCODE_MS932;
		}
		
		// ファイルの生成
		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(file, encode, line, div);
		Iterator<ArrayList<Object>> it = arrayList.iterator();
		
		// データ数分繰り返し
		while (it.hasNext())
		{
			// データを取得
			ArrayList<Object> data = it.next();
			
			// ファイルに書き込み
			JCCBatCommon.printBusinessFileUtil(fileUtil, data);
		}
		
		// ファイルを閉じる
		JCCBatCommon.closeBusinessFileUtil(fileUtil);
	}

	
}
