/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACDnpUseChgOtPrcTr
*	ソースファイル名	：JBSbatACDnpUseChgOtPrcTr.java
*	作成者				：富士通　
*	作成日				：2011年07月22日
*＜機能概要＞
*　電報利用課金外部料金取込データ作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/22   富士通		新規作成
*	v4.00.00    2013/02/15   FJ)早崎	【ST3-2013-0000395】
*	v4.00.01	2013/03/26   FJ)小柴	【内部管理番号-0000613】ファイル出力オブジェクト生成時のエンコード設定ずれ防止対応
*	v4.00.02	2013/04/05  FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*	v5.00.00	2013/07/11  FJ) 狭間	【IT1-2013-0001363】（水平展開）lineToObjectの第三引数適正化
*	v5.00.01	2013/10/13   FJ)前田	【OM-2013-0002763】システムエラー時にステータスを更新するように修正
*	v5.00.02	2013/10/15   FJ)北端	【OM-2013-0002763】処理完了後に「処理中」のレコードがあればステータスを「完了」に更新
*	v5.00.03	2013/11/19   FJ)北端	【OM-2013-0004341】ディレイドス処理依頼のテータス更新のパラメータ修正
*	v8.00.00	2013/12/11   FJ)柴田	【ANK-1584-00-00】出力ファイルにサービス詳細識別番号を追加。
*	v8.00.01	2014/01/16   FJ)垣内	【OM-2014-0000198】業務エラーがある場合、ディレイド処理管理更新をしないよう修正
*	v8.00.02	2014/03/25   FJ)江森	【OM-2014-0001163】エラー発生時にディレイド処理結果コードを業務エラーにするように修正。
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.util.file.JBSbatACIFM014;
import eo.business.util.file.JBSbatACIFM015;
import eo.business.util.file.JBSbatACIFM032;
import eo.business.util.file.JBSbatACIFM034;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_OPUT_NM;
import eo.business.util.table.JBSbatKK_M_PCRS;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
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.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JCCbatGetSystemDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACDnpUseChgOtPrcTr 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_KMK_OPUT_NM = "CH_M_PRC_KMK_OPUT_NM";

	/** テーブル(課金先)*/
	private static final String D_TBL_NAME_KK_T_KAKINS = "KK_T_KAKINS";

	/** テーブル(料金コース)*/
	private static final String D_TBL_NAME_KK_M_PCRS = "KK_M_PCRS";

	/** 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_001)*/
	private static final String CH_M_PRC_KMK_OPUT_NM_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String KK_T_KAKINS_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String KK_M_PCRS_AC_SELECT_001 = "AC_SELECT_001";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/** テーブルアクセスクラス(料金項目出力名称)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_OPUT_NM = null;

	/** テーブルアクセスクラス(課金先)*/
	private JBSbatSQLAccess db_KK_T_KAKINS = null;

	/** テーブルアクセスクラス(料金コース)*/
	private JBSbatSQLAccess db_KK_M_PCRS = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 処理識別コード */
	private String trnSkbtCd = "";
	
	/** 外部料金取込システム区分 */
	private String outPrcSysDiv = "";
	
	/** データチェックエラーメッセージ */
	private String dataChkErrMsg = "";
	
	/** ディレイド処理依頼番号 */
	private String[] shoriIraiNo = null;

	/** 電子ファイル管理(レコード件数) */
	private int eFileRecord = 0;
	
	/** 電子ファイル管理チェック */
	private boolean eFileCheckFlg = false;
	
	/** エラー判定フラグ */
	private boolean errFlg = false;

	private ArrayList<JBSbatServiceInterfaceMap> eFileList = new  ArrayList<JBSbatServiceInterfaceMap>();
	
	/**
	 * 初期処理
	 * @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_KMK_OPUT_NM = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_OPUT_NM);
		db_KK_T_KAKINS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAKINS);
		db_KK_M_PCRS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PCRS);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		/** (1) 情報付加  */
		
		// (a) 処理識別コード
		trnSkbtCd 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPT_ADD);
		
		// (b) 外部料金取込システム区分
		outPrcSysDiv 	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPS_DEMPO_CHRG);
		
		paramUtil.close();
		
		// (c) データチェックエラーメッセージ
		executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(new Object[] {JACStrConst.WKPARA_AC_MSG_SEIKYAPLYERR, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface workRecord = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		if (workRecord != null)
		{
			dataChkErrMsg = workRecord.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 inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 変数宣言
		HashMap resultMap = new HashMap();
		boolean checkFlg = false;
		Object[] setParam = null;
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap bmpOutPrcMap = new JBSbatServiceInterfaceMap();
		JBSbatServiceInterfaceMap bmpErrMap = new JBSbatServiceInterfaceMap();

		try
		{
			/** (1) 電子ファイル情報保持 */
			if (!eFileCheckFlg) 
			{
				// ディレイド処理依頼番号チェック
				String[] freeItem = this.freeItem.split(JACStrConst.FREE_DIV);
				this.eFileList = this.getInMap(freeItem[0], freeItem[1]);
				shoriIraiNo = new String[eFileRecord];
				for (int i = 0; i < eFileRecord; i++) 
				{
					JBSbatServiceInterfaceMap eFileMap = this.eFileList.get(i);
					shoriIraiNo[i] = eFileMap.getString(JBSbatACIFM034.DLYD_TRN_REQ_NO);
				}
				// 初回のみチェックする
				eFileCheckFlg = true;
			}

			/** (2) データチェック */
			// レコードの１件を取得
			resultMap = inMap.getMap();

			/** レコードが不正の場合、次のレコードへ */
			if (resultMap.isEmpty()) 
			{
				return outputItem;
			}

			// (b) 請求契約番号チェック

			// 請求契約番号
			Object seikyKeiNo = resultMap.get(JBSbatACIFM032.SEIKY_KEI_NO);

			// 請求契約場番号がnullの場合
			if (seikyKeiNo == null || seikyKeiNo.equals("")) 
			{
				// エラーデータとみなす
				checkFlg = true;
			} 
			else 
			{
				setParam = new Object[] {
						resultMap.get(JBSbatACIFM032.SVC_KEI_NO),
						super.opeDate, super.opeDate, super.opeDate };
				checkFlg = this.sikyKeiNoCheck(setParam);
			}

			if (!checkFlg) 
			{
				/** (3) 情報付与 */
				bmpOutPrcMap = this.chrgOutPrcMapping(resultMap);
				bmpOutPrcMap.setOutFlg(true);
				/** (4) 電報利用課金外部料金データ作成 */
				outputItem.addOutMapList(bmpOutPrcMap);
			} 
			else 
			{
				/** (5) 電報利用課金情報エラーデータ作成 */
				// (a) エラー情報付与
				bmpErrMap = this.chrgInfoErrDataMapping(resultMap);
				bmpErrMap.setOutFlg(true);
				// (b) 電報利用課金情報エラーデータ作成
				outputItem.addOutMapList_2(bmpErrMap);
				
				// エラー判定フラグをtrueに設定
				errFlg = true;
			}

		}
		catch (Exception e)
		{
			this.commonItem.getConnection().rollback();
			// 番ポあり、番ポなしで２レコード
			for (int i = 0; i < eFileRecord; i++)
			{
				// ディレイド処理依頼への更新
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo[i], JACStrConst.DLYD_TRN_RSLT_CD_SYS_ERR, null);
				
			}
			this.commonItem.getConnection().commit();
			throw e;
		}
		
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		
		/** (1) データ更新 */
		// (a) ディレイド処理依頼の更新
		// エラーが発生した場合
		if(errFlg)
		{
			for (int i = 0; i < eFileRecord; i++)
			{
				// ディレイド処理依頼への更新
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo[i], JACStrConst.DLYD_TRN_RSLT_CD_WORK_ERR, null);
			}
			this.commonItem.getConnection().commit();
		}
		else
		{
			for (int i = 0; i < eFileRecord; i++)
			{
				// ディレイド処理依頼ステータスが"004"（処理中）のもののみ更新
				JBSbatServiceInterfaceMap eFileMap = this.eFileList.get(i);

				if(JACStrConst.DLYD_TRN_STAT_TRN_CHU.equals(eFileMap.getString(JBSbatACIFM034.DLYD_TRN_REQ_STAT)))
				{
					// ディレイド処理依頼への更新
					JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo[i], JACStrConst.DLYD_TRN_RSLT_CD_FIN, null);
				}
			}
		}

			
		// 全JOB完了後、上記の「ディレイド処理依頼への更新」が行われた後もなお、
		// ステータスが「処理中」として残っているレコードは
		// 同番ポ種別の重複レコードを見なしてステータスを「完了」にする
		this.changeStatus();
		
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_ZM_M_CD_NM_KANRI.close();
		db_CH_M_PRC_KMK_OPUT_NM.close();
		db_KK_T_KAKINS.close();
		db_KK_M_PCRS.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * 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_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_KMK_OPUT_NM_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());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_OPUT_NM.selectBySqlDefine(paramList, CH_M_PRC_KMK_OPUT_NM_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 executeKK_T_KAKINS_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());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_T_KAKINS.selectBySqlDefine(paramList, KK_T_KAKINS_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 executeKK_M_PCRS_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_M_PCRS.selectBySqlDefine(paramList, KK_M_PCRS_AC_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 電子ファイル管理のファイル読み込みを行います。<p>
	 * <p>
	 * 入力電文と同様、JBSbatServiceInterfaceMap を返す。<br>
	 * エンコードはShift-JIS、読み込み位置は1行目固定<br>
	 * ループ(主処理を含む)で使用しない。使用したファイルのクローズまで行う。
	 * </p>
	 * @param fileDef ファイル定義
	 * @param fileName ファイル名 
	 * @return ファイル定義型(JBSbatServiceInterfaceMap)で受け取ったファイルの一行
	 * @throws Exception スローされる例外
	 */
	private ArrayList<JBSbatServiceInterfaceMap> getInMap(String fileDef, String fileName) throws Exception
	{
		ArrayList<JBSbatServiceInterfaceMap> rtnEFileList = new  ArrayList<JBSbatServiceInterfaceMap>();
		JBSbatInputFileUtil inFileObj = new JBSbatInputFileUtil(fileName);
		
		// 電子ファイル情報ファイル読み込み
		JBSbatDefFileUtil defFileUtil = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue("IND") + fileDef, inFileObj);
		
		inFileObj.setEncode(JACStrConst.ENCODE_MS932);
		inFileObj.createReader();
		
		while (inFileObj.ready())
		{
			// レコードの１件を取得
			JBSbatServiceInterfaceMap retInMap = defFileUtil.lineToObject(inFileObj.readLine(), inFileObj, 0);
			// リストに設定
			rtnEFileList.add(retInMap);
			// レコードのカウントアップ
			eFileRecord++;
		}

		// ファイルのクローズを行う
		if (inFileObj != null)
		{
			inFileObj.close();
			inFileObj = null;
		}

		return rtnEFileList;
	}
	
	/**
	 * 請求契約番号チェックを行います。<br>
	 * <p>
	 * <b>処理概要</b><br>
	 * 電報利用課金情報(正常データ).サービス契約番号を元に<br>
	 * 課金先に存在するかをチェックする。<br>
	 * <p>
	 * @param param 課金先の検索を行うためのバイント変数の値配列。
	 * @return チェック結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean sikyKeiNoCheck(Object[] param) throws Exception
	{
		// 変数宣言
		boolean checkFlg = false;
		
		executeKK_T_KAKINS_AC_SELECT_002(param);
		JBSbatCommonDBInterface kakinRecord = db_KK_T_KAKINS.selectNext();
		if(kakinRecord != null)
		{
			// 請求契約ステータスが「100:請求契約中」以外の場合
			String seikyKeiStat = kakinRecord.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_STAT);
			if (!JACStrConst.SEIKY_KEI_STAT_CHU.equals(seikyKeiStat))
			{
				checkFlg = true;
			}
		}
		else
		{
			checkFlg = true;
		}
		return checkFlg;
	}
	
	/**
	 * 課金外部料金データのマッピングを行います。<br>
	 * <p>
	 * 課金外部料金データの出力内容を設定する。<br>
	 * <p>
	 * @param inMap 電報利用課金情報(正常データ)
	 * @return ファイル内容
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap chrgOutPrcMapping(HashMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 課金外部料金データの内容を設定
		// システムパラメータ管理.システムパラメータ設定値１ ⇒ 課金外部料金データ.処理識別コード
		outMap.setString(JBSbatACIFM014.TRAN_SKBT_CD , trnSkbtCd);
		
		// 電報利用課金情報(正常データ).請求契約番号 ⇒ 課金外部料金データ.請求契約番号
		outMap.setString(JBSbatACIFM014.SEIKY_KEI_NO, inMap.get("SEIKY_KEI_NO"));
		
		// 電報利用課金情報(正常データ).サービス契約番号 ⇒ 課金外部料金データ.サービス契約番号
		outMap.setString(JBSbatACIFM014.SVC_KEI_NO, inMap.get("SVC_KEI_NO"));
		
		// 電報利用課金情報(正常データ).料金グループコード ⇒ 課金外部料金データ.料金グループコード
		outMap.setString(JBSbatACIFM014.PRC_GRP_CD, inMap.get("PRC_GRP_CD"));
		
		// 電報利用課金情報(正常データ).料金コースコード ⇒ 課金外部料金データ.料金コースコード
		outMap.setString(JBSbatACIFM014.PCRS_CD, inMap.get("PCRS_CD"));
		
		// 電報利用課金情報(正常データ).料金サービスコード ⇒ 課金外部料金データ.料金サービスコード
		outMap.setString(JBSbatACIFM014.PRC_SVC_CD, inMap.get("PRC_SVC_CD"));
		
		// 電報利用課金情報(正常データ).料金項目コード ⇒ 課金外部料金データ.料金項目コード
		outMap.setString(JBSbatACIFM014.PRC_KMK_CD, inMap.get("PRC_KMK_CD"));
		
		// 電報利用課金情報(正常データ).請求時期間指定 ⇒ 課金外部料金データ.請求時期間指定
		outMap.setString(JBSbatACIFM014.SEIKY_JIKI_SHITEI, inMap.get("SEIKY_PRD_SHITEI"));
		
		// 電報利用課金情報(正常データ).請求年月 ⇒ 課金外部料金データ.請求年月
		outMap.setString(JBSbatACIFM014.SEIKY_YM, inMap.get("SEIKY_YM"));
		
		// 電報利用課金情報(正常データ).請求金額 ⇒ 課金外部料金データ.請求金額
		outMap.setString(JBSbatACIFM014.SEIKY_AMNT, inMap.get("SEIKY_AMNT"));
		
		// システムパラメータ管理.システムパラメータ設定値１ ⇒ 課金外部料金データ.外部料金取込システム区分
		outMap.setString(JBSbatACIFM014.OUT_PRC_TRKM_SYS_DIV, outPrcSysDiv);
		
		// 空文字 ⇒ 課金外部料金データ.サービス詳細識別番号
		outMap.setString(JBSbatACIFM014.SVC_DTL_SKBT_NO, JACStrConst.KARA_MOJI);
		
		// ファイルの設定内容を返す
		return outMap;
	}
	
	/**
	 * 課金情報(エラーデータ)のマッピングを行います。<br>
	 * <p>
	 * 課金情報(エラーデータ)の出力内容を設定する。<br>
	 * <p>
	 * @param inMap 電報利用課金情報(正常データ)
	 * @return ファイル内容
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap chrgInfoErrDataMapping(HashMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 課金外部料金データの内容を設定
		// コード名称管理.コード区分名 ⇒ 課金情報(エラーデータ).取込元
		String trkmMtNm = this.getCdDivNm(JZM0171Constant.CD00888, outPrcSysDiv);
		outMap.setString(JBSbatACIFM015.TRKM_MT , trkmMtNm);
		
		// 電報利用課金情報(正常データ).請求契約番号 ⇒ 課金情報(エラーデータ).請求契約番号
		outMap.setString(JBSbatACIFM015.SEIKY_NO, inMap.get("SEIKY_KEI_NO"));
		
		// 電報利用課金情報(正常データ).サービス契約番号 ⇒ 課金情報(エラーデータ).サービス契約番号
		outMap.setString(JBSbatACIFM015.SVC_KEI_NO, inMap.get("SVC_KEI_NO"));
		
		// 空文字 ⇒ 課金情報(エラーデータ).サービス詳細識別番号
		outMap.setString(JBSbatACIFM015.SVC_DTL_SKBT_NO, JACStrConst.KARA_MOJI);
		
		// 業務パラメータ管理.業務パラメータ設定値 ⇒ 課金情報(エラーデータ).エラー内容
		outMap.setString(JBSbatACIFM015.ERR_NAIYO, dataChkErrMsg);
		
		// 電報利用課金情報(正常データ).料金コースコード ⇒ 課金情報(エラーデータ).料金コースコード
		outMap.setString(JBSbatACIFM015.PCRS_CD, inMap.get("PCRS_CD"));
		
		// 料金コース.料金コース名 ⇒ 課金情報(エラーデータ).料金コース名
		String prcCourseNm = this.getPrcCourseNm((String)inMap.get("PCRS_CD"));
		outMap.setString(JBSbatACIFM015.PCRS_NM, prcCourseNm);
		
		// 電報利用課金情報(正常データ).料金サービスコード ⇒ 課金情報(エラーデータ).料金サービスコード
		outMap.setString(JBSbatACIFM015.PRC_SVC_CD, inMap.get("PRC_SVC_CD"));
		
		// 電報利用課金情報(正常データ).料金項目コード ⇒ 課金情報(エラーデータ).料金項目コード
		outMap.setString(JBSbatACIFM015.PRC_KMK_CD, inMap.get("PRC_KMK_CD"));
		
		// 料金項目出力名称.料金項目名称 ⇒ 課金情報(エラーデータ).料金内訳名
		String prcUcwkNm = this.getPrcUcwkNm((String)inMap.get("PRC_GRP_CD"),
												(String)inMap.get("PCRS_CD"),
												(String)inMap.get("PRC_SVC_CD"),
												(String)inMap.get("PRC_KMK_CD"));
		outMap.setString(JBSbatACIFM015.PRC_UCWK_NM, prcUcwkNm);
		
		// 電報利用課金情報(正常データ).請求時期間指定コード ⇒ 課金情報(エラーデータ).請求時期間指定コード
		outMap.setString(JBSbatACIFM015.SEIKY_JIKI_SHITEI_CD, inMap.get("SEIKY_PRD_SHITEI"));
		
		// コード名称管理.コード区分名 ⇒ 課金情報(エラーデータ).請求時期間指定名
		String seikyJikiShiteiNm = this.getCdDivNm(JZM0171Constant.CD00972, String.valueOf(inMap.get("SEIKY_PRD_SHITEI")));
		outMap.setString(JBSbatACIFM015.SEIKY_JIKI_SHITEI_NM, seikyJikiShiteiNm);
		
		// 電報利用課金情報(正常データ).請求年月 ⇒ 課金情報(エラーデータ).請求年月
		outMap.setString(JBSbatACIFM015.SEIKY_YM, inMap.get("SEIKY_YM"));
		
		// 電報利用課金情報(正常データ).請求金額 ⇒ 課金情報(エラーデータ).請求金額
		outMap.setString(JBSbatACIFM015.SEIKY_AMNT, inMap.get("SEIKY_AMNT"));
		
		// ファイルの設定内容を返す
		return outMap;
	}
	
	/**
	 * コード名称管理より名称の取得を行います。<br>
	 * <p>
	 * コード種別コード、コード区分を元にコード名称管理より値を取得する。<br>
	 * <p>
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return コード区分名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getCdDivNm(String cdSbtCd, String cdDiv) throws Exception
	{
		String cdDivNm = "";
		
		executeZM_M_CD_NM_KANRI_AC_SELECT_001(new Object[] {cdSbtCd, cdDiv, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface cdDivNmRecord = db_ZM_M_CD_NM_KANRI.selectNext();
		if (cdDivNmRecord != null)
		{
			cdDivNm = cdDivNmRecord.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
		}
		else
		{
			// コード名称管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { JBSbatZM_M_CD_NM_KANRI.TABLE_NAME });
		}
		
		return cdDivNm;
	}
	
	/**
	 * 料金コースより料金コース名の取得を行います。<br>
	 * <p>
	 * 料金コースコードを元にコード名称管理より値を取得する。<br>
	 * <p>
	 * @param prcCourseCd 料金コースコード
	 * @return 料金コース名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getPrcCourseNm(String prcCourseCd) throws Exception
	{
		String prcCourseNm = "";
		
		executeKK_M_PCRS_AC_SELECT_001(new Object[] {prcCourseCd, super.opeDate});
		JBSbatCommonDBInterface prcCourseNmRecord = db_KK_M_PCRS.selectNext();
		if (prcCourseNmRecord != null)
		{
			prcCourseNm = prcCourseNmRecord.getString(JBSbatKK_M_PCRS.PCRS_NM);
		}
		else
		{
			// 料金コーステーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { JBSbatKK_M_PCRS.TABLE_NAME });
		}
		
		return prcCourseNm;
	}
	
	/**
	 * 料金項目出力名称より料金内訳名の取得を行います。<br>
	 * <p>
	 * 以下の値を元に料金項目出力名称より値を取得する。<br>
	 * 　・料金グループコード<br>
	 * 　・料金コースコード<br>
	 * 　・料金サービスコード<br>
	 * 　・料金項目コード<br>
	 * <p>
	 * @param prcGrpCd    料金グループコード
	 * @param prcCourseCd 料金コースコード
	 * @param prcSvcCd    料金サービスコード
	 * @param prcKmkCd    料金項目コード
	 * @return 料金内訳名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getPrcUcwkNm(String prcGrpCd, String prcCourseCd, String prcSvcCd, String prcKmkCd) throws Exception
	{
		String prcUcwkNm = "";
		
		executeCH_M_PRC_KMK_OPUT_NM_AC_SELECT_001(new Object[] {prcGrpCd, prcCourseCd, prcSvcCd, prcKmkCd, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface prcUcwkNmRecord = db_CH_M_PRC_KMK_OPUT_NM.selectNext();
		if (prcUcwkNmRecord != null)
		{
			prcUcwkNm = prcUcwkNmRecord.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_NM);
		}
		else
		{
			// 料金項目出力名称から取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { JBSbatCH_M_PRC_KMK_OPUT_NM.TABLE_NAME });
		}
		return prcUcwkNm;
	}

	/*
	 * 当JOBへのディレイドバッチ依頼のステータスが処理中のレコードを完了にする<br>
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void changeStatus() throws Exception {
		JBSbatSQLAccess stmt = new JBSbatSQLAccess(commonItem, "CC_T_DLYD_TRN_REQ");
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		dbList.setValue(JCCbatGetSystemDateUtil.getSystemDateTime().get("sysDateTimeStamp"));
		dbList.setValue(commonItem.getBatchUserId());
		dbList.setValue("EO30E0110J0");
		stmt.executeBySqlDefine(dbList, "AC_UPDATE_001");
	}
}
