/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKEmTsushinRrkKktiInfAdd
*	ソースファイル名	：JBSbatKKEmTsushinRrkKktiInfAdd.java
*	作成者				：富士通　
*	作成日				：2013年01月30日
*＜機能概要＞
*　ＥＭ通信履歴確定情報登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/01/30   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM316;
import eo.business.util.file.JBSbatKKIFM317;
import eo.business.util.file.JBSbatKKIFM318;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessError;
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.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKEmTsushinRrkKktiInfAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ＥＭ通信実績)*/
	private static final String D_TBL_NAME_KK_T_EM_TSUSHIN_JSK = "KK_T_EM_TSUSHIN_JSK";

	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";

	/** SQL定義キー(KK_SELECT_014)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_KK_SELECT_014 = "KK_SELECT_014";

	/** テーブルアクセスクラス(ＥＭ通信実績)*/
	private JBSbatSQLAccess db_KK_T_EM_TSUSHIN_JSK = null;

	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 業務パラメータID（月次料金計算済エラー） */
	private String monPrcCalcErrMsg = null;

	/** 料金計算月 */
	private String prcCalcMon = null;

	/** 単項目チェックで使用する項目名Map */
	private HashMap<String, String> itemValueMap = null;

	/** FREE項目を格納する配列 */
	private String[] fleeItemArray = null;

	/** 当日レコード重複を検出するためのリスト */
	private List<List<String>> tjituRecDbleChkList = null;

	/** データ部件数 */
	private String dataCnt = "0";

	/** 入力ファイルオブジェクト */
	private JBSbatInputFileUtil inFileObj = null;

	/** EM契約者コード */
	private String themKeisyaCd = null;

	/** シーケンス名（ＥＭ通信実績） */
	private static final String SEQ_NAME = "SEQ_EM_TSUSHIN_JSK_NO";

	/** シーケンス接頭辞（ＥＭ通信実績） */
	private static final String SEQ_PREFIX = "";
	
	/** シーケンス桁数（ＥＭ通信実績） */
	private static final int SEQ_LEN = 12;
	
	/** フリー項目区切り文字(セミコロン) */
	private static final String DELIM  = JKKBatConst.S_PARAM_DELIM;
	
	/** 料金スケジュール定義.イベントコード（料金計算日） */
	public static final String EVENT_CD_PRC_CALC_DAY = "03";
	
	/** 業務パラメータID（ＥＭ通信履歴確定情報(ヘッダ部)の項目「ファイル種別」の設定値） */
	public static final String WKPARA_KK_EMKO_FILESBT = "KK_EMKO_FILESBT";

	/** 業務パラメータID（ＥＭ通信履歴確定情報(ヘッダ部)の項目「事業者識別コード」の設定値） */
	public static final String WKPARA_KK_EMKO_JIGYOSKBTCD = "KK_EMKO_JIGYOSKBTCD";
	
	/** エラーコード（データ値が不正です。(%1%)） */
	public static final String ERR_EKKB0090TE = "EKKB0090TE";
	
	/** エラーコード（重複するデータが存在します。(%1%)） */
	public static final String ERR_EKKB0220KW = "EKKB0220KW";

	/** 登録件数 */
	private int intInsertCnt = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_EM_TSUSHIN_JSK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_EM_TSUSHIN_JSK);
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// 料金計算月の取得
		prcCalcMon = getSeikyYm();
		// 単項目チェックで使用する項目名
		itemValueMap = getItemValueMap();
		// ファイルディレクトリ(末尾にセパレータ付き);ヘッダファイル名;ヘッダファイル定義;トレーラファイル名;トレーラファイル定義
		fleeItemArray = super.freeItem.split(DELIM);
		super.logPrint.printDebugLog("fleeItemArray[0]:"+fleeItemArray[0]);
		super.logPrint.printDebugLog("fleeItemArray[1]:"+fleeItemArray[1]);
		super.logPrint.printDebugLog("fleeItemArray[2]:"+fleeItemArray[2]);
		super.logPrint.printDebugLog("fleeItemArray[3]:"+fleeItemArray[3]);
		super.logPrint.printDebugLog("fleeItemArray[4]:"+fleeItemArray[4]);
		super.logPrint.printDebugLog("fleeItemArray[5]:"+fleeItemArray[5]);
		// [0] : ファイルディレクトリ(末尾にセパレータ付き)
		// [1] : ヘッダファイル名
		// [2] : ヘッダファイル定義
		// ヘッダファイル取得
		JBSbatServiceInterfaceMap inMapHead = getInMap(fleeItemArray[0], fleeItemArray[1], fleeItemArray[2]);
		// レイアウトチェック(ヘッダ部単項目チェック)
		if (!isSingleCheckKKIFM316(inMapHead.getMap(), itemValueMap))
		{
			// 単項目チェックでエラーが発生したため、処理を終了します。
			throw new JBSbatBusinessException(ERR_EKKB0090TE, new String[]{"ＥＭ通信履歴確定情報（ヘッダ部）"});
		}
		// レイアウトチェック(ファイル識別が"501"以外の場合)
		if (!inMapHead.getString(JBSbatKKIFM316.FILE_SBT).equals(getZmMWorkParamKnri(WKPARA_KK_EMKO_FILESBT,"ファイル種別")))
		{
			// ファイル種別エラー
			throw new JBSbatBusinessException(ERR_EKKB0090TE, 
					new String[]{"ファイル種別:" + inMapHead.getString(JBSbatKKIFM316.FILE_SBT)});
		}
		// レイアウトチェック(事業者識別コードが"KPT0000006"(KOPTコード)以外の場合)
		if (!inMapHead.getString(JBSbatKKIFM316.JIGYOSHA_SKBT_CD).equals(getZmMWorkParamKnri(WKPARA_KK_EMKO_JIGYOSKBTCD,"事業者識別コード")))
		{
			// 事業者識別コードエラー
			throw new JBSbatBusinessException(ERR_EKKB0090TE, 
					new String[]{"事業者識別コード:" + inMapHead.getString(JBSbatKKIFM316.JIGYOSHA_SKBT_CD)});
		}
		// [0] : ファイルディレクトリ(末尾にセパレータ付き)
		// [3] : トレーラファイル名
		// [4] : トレーラファイル定義
		// トレーラファイル取得
		JBSbatServiceInterfaceMap inMapTrail = getInMap(fleeItemArray[0], fleeItemArray[3], fleeItemArray[4]);
		// レイアウトチェック(トレーラ部単項目チェック)
		if (!isSingleCheckKKIFM318(inMapTrail.getMap(), itemValueMap))
		{
			// 単項目チェックでエラーが発生したため、処理を終了します。
			throw new JBSbatBusinessException(ERR_EKKB0090TE, new String[]{"ＥＭ通信履歴確定情報（トレーラ部）"});
		}
		// [5] : データファイル件数
		dataCnt = fleeItemArray[5];
		// データ件数チェック
		if (!dataCnt.equals(inMapTrail.getString(JBSbatKKIFM318.DATA_REC_CNT)))
		{
			throw new JBSbatBusinessException("EKKB0380CE");
		}
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		// レイアウトチェック(データ部単項目チェック)
		if (!isSingleCheckKKIFM317_INF1(inMap.getMap(), itemValueMap))
		{
			// 単項目チェックでエラーが発生したため、処理を終了します。
			throw new JBSbatBusinessException(ERR_EKKB0090TE,new String[]{"ＥＭ通信履歴確定情報（データ部）"});
		}
		// レコード重複チェックデータ
		String emKeisyaCd = inMap.getString(JBSbatKKIFM317.EM_KEISHA_CD);
		List<String> recDbleChkData = Arrays.asList(emKeisyaCd, inMap.getString(JBSbatKKIFM317.TSUSHIN_USE_DAY));
		// レコード重複チェックリストがnullの場合
		if (tjituRecDbleChkList == null)
		{
			// レコード重複チェックリストを初期化
			tjituRecDbleChkList = new ArrayList<List<String>>();
			themKeisyaCd = emKeisyaCd;
		}else{
			// EM契約者コードがブレイクすればチェックリストをクリアする
			if (themKeisyaCd != null && !themKeisyaCd.equals(emKeisyaCd)){
				tjituRecDbleChkList.clear();
				themKeisyaCd = emKeisyaCd;
			}
		}
		// レコード重複チェックリストにレコード重複チェックデータが存在する場合。
		if (tjituRecDbleChkList.contains(recDbleChkData))
		{
			// 当日レコード重複エラー
			commonItem.getLogPrint().printBusinessErrorLog(ERR_EKKB0220KW, 
					new String[]{"ＥＭ契約者コード:" + recDbleChkData.get(0) + " 通信利用日:" + recDbleChkData.get(1)});
			throw new JBSbatBusinessError();
		}
		else
		{
			// レコード重複チェックリストにレコード重複チェックデータを追加する。
			tjituRecDbleChkList.add(recDbleChkData);
			if (prcCalcMon.compareTo(inMap.getString(JBSbatKKIFM317.TSUSHIN_USE_DAY).substring(0, 6)) >= 0)
			{
				// 月次料金計算済エラー
				commonItem.getLogPrint().printBusinessErrorLog(ERR_EKKB0090TE, 
						new String[]{"料金計算月前月:" + prcCalcMon + " 通信利用日:" + inMap.getString(JBSbatKKIFM317.TSUSHIN_USE_DAY)});
				throw new JBSbatBusinessError();
			}
			else
			{
				//ＥＭ通信実績登録
				insertEmTsushinJsk(inMap);
			}
		}
		super.logPrint.printDebugLog("execute_END");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		// 月次料金計算済エラー
		commonItem.getLogPrint().printBusinessErrorLog("EKKB0790AI", new String[]{"ＥＭ通信実績",intInsertCnt+"件"});
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_EM_TSUSHIN_JSK.close();
		db_CH_M_PRC_SCHDL_TEIGI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（ＥＭ通信履歴確定情報（データ部））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFM317-INF1.REC_TYPE			ＥＭ通信履歴確定情報（データ部）.レコードタイプ
	 *			 TXT-KKIFM317-INF1.REC_TYPE			ＥＭ通信履歴確定情報（データ部）.レコードタイプ
	 *			 TXT-KKIFM317-INF1.REC_TYPE			ＥＭ通信履歴確定情報（データ部）.レコードタイプ
	 *			 TXT-KKIFM317-INF1.SIJGSHA_KANRI_CD			ＥＭ通信履歴確定情報（データ部）.再販事業者様管理コード
	 *			 TXT-KKIFM317-INF1.SIJGSHA_KANRI_CD			ＥＭ通信履歴確定情報（データ部）.再販事業者様管理コード
	 *			 TXT-KKIFM317-INF1.MSISDN			ＥＭ通信履歴確定情報（データ部）.ＭＳＩＳＤＮ
	 *			 TXT-KKIFM317-INF1.MSISDN			ＥＭ通信履歴確定情報（データ部）.ＭＳＩＳＤＮ
	 *			 TXT-KKIFM317-INF1.MSISDN			ＥＭ通信履歴確定情報（データ部）.ＭＳＩＳＤＮ
	 *			 TXT-KKIFM317-INF1.EM_KEISHA_CD			ＥＭ通信履歴確定情報（データ部）.ＥＭ契約者コード
	 *			 TXT-KKIFM317-INF1.EM_KEISHA_CD			ＥＭ通信履歴確定情報（データ部）.ＥＭ契約者コード
	 *			 TXT-KKIFM317-INF1.EM_KEISHA_CD			ＥＭ通信履歴確定情報（データ部）.ＥＭ契約者コード
	 *			 TXT-KKIFM317-INF1.TSUSHIN_USE_DAY			ＥＭ通信履歴確定情報（データ部）.通信利用日
	 *			 TXT-KKIFM317-INF1.TSUSHIN_USE_DAY			ＥＭ通信履歴確定情報（データ部）.通信利用日
	 *			 TXT-KKIFM317-INF1.TSUSHIN_USE_DAY			ＥＭ通信履歴確定情報（データ部）.通信利用日
	 *			 TXT-KKIFM317-INF1.USE_BYTE_CNT			ＥＭ通信履歴確定情報（データ部）.利用バイト数
	 *			 TXT-KKIFM317-INF1.USE_BYTE_CNT			ＥＭ通信履歴確定情報（データ部）.利用バイト数
	 *			 TXT-KKIFM317-INF1.USE_BYTE_CNT			ＥＭ通信履歴確定情報（データ部）.利用バイト数
	 *			 TXT-KKIFM317-INF1.YOBI			ＥＭ通信履歴確定情報（データ部）.予備
	 *			 TXT-KKIFM317-INF1.YOBI			ＥＭ通信履歴確定情報（データ部）.予備
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKKIFM317_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// レコードタイプ項目チェック
		strValue = (String)rsMap.get("REC_TYPE");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.REC_TYPE")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.REC_TYPE")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.REC_TYPE")});
			return false;
		}

		// 再販事業者様管理コード項目チェック
		strValue = (String)rsMap.get("SIJGSHA_KANRI_CD");
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "20"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.SIJGSHA_KANRI_CD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.SIJGSHA_KANRI_CD")});
			return false;
		}

		// ＭＳＩＳＤＮ項目チェック
		strValue = (String)rsMap.get("MSISDN");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.MSISDN")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "11"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.MSISDN")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.MSISDN")});
			return false;
		}

		// ＥＭ契約者コード項目チェック
		strValue = (String)rsMap.get("EM_KEISHA_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.EM_KEISHA_CD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.EM_KEISHA_CD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.EM_KEISHA_CD")});
			return false;
		}

		// 通信利用日項目チェック
		strValue = (String)rsMap.get("TSUSHIN_USE_DAY");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.TSUSHIN_USE_DAY")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "8"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.TSUSHIN_USE_DAY")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.TSUSHIN_USE_DAY")});
			return false;
		}

		// 利用バイト数項目チェック
		strValue = (String)rsMap.get("USE_BYTE_CNT");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.USE_BYTE_CNT")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "19"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.USE_BYTE_CNT")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.USE_BYTE_CNT")});
			return false;
		}

		// 予備項目チェック
		strValue = (String)rsMap.get("YOBI");
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "50"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.YOBI")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM317-INF1.YOBI")});
			return false;
		}

		return true;
	}

	/**
	 *入力情報（ＥＭ通信履歴確定情報（ヘッダ部））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFM316-.REC_TYPE			ＥＭ通信履歴確定情報（ヘッダ部）.レコードタイプ
	 *			 TXT-KKIFM316-.REC_TYPE			ＥＭ通信履歴確定情報（ヘッダ部）.レコードタイプ
	 *			 TXT-KKIFM316-.REC_TYPE			ＥＭ通信履歴確定情報（ヘッダ部）.レコードタイプ
	 *			 TXT-KKIFM316-.FILE_SBT			ＥＭ通信履歴確定情報（ヘッダ部）.ファイル種別
	 *			 TXT-KKIFM316-.FILE_SBT			ＥＭ通信履歴確定情報（ヘッダ部）.ファイル種別
	 *			 TXT-KKIFM316-.FILE_SBT			ＥＭ通信履歴確定情報（ヘッダ部）.ファイル種別
	 *			 TXT-KKIFM316-.FILE_SAKSEI_YMD			ＥＭ通信履歴確定情報（ヘッダ部）.ファイル作成年月日
	 *			 TXT-KKIFM316-.FILE_SAKSEI_YMD			ＥＭ通信履歴確定情報（ヘッダ部）.ファイル作成年月日
	 *			 TXT-KKIFM316-.FILE_SAKSEI_YMD			ＥＭ通信履歴確定情報（ヘッダ部）.ファイル作成年月日
	 *			 TXT-KKIFM316-.JIGYOSHA_SKBT_CD			ＥＭ通信履歴確定情報（ヘッダ部）.事業者識別コード
	 *			 TXT-KKIFM316-.JIGYOSHA_SKBT_CD			ＥＭ通信履歴確定情報（ヘッダ部）.事業者識別コード
	 *			 TXT-KKIFM316-.JIGYOSHA_SKBT_CD			ＥＭ通信履歴確定情報（ヘッダ部）.事業者識別コード
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKKIFM316(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// レコードタイプ項目チェック
		strValue = (String)rsMap.get("REC_TYPE");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.REC_TYPE")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.REC_TYPE")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.REC_TYPE")});
			return false;
		}

		// ファイル種別項目チェック
		strValue = (String)rsMap.get("FILE_SBT");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.FILE_SBT")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "3"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.FILE_SBT")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.FILE_SBT")});
			return false;
		}

		// ファイル作成年月日項目チェック
		strValue = (String)rsMap.get("FILE_SAKSEI_YMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.FILE_SAKSEI_YMD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "8"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.FILE_SAKSEI_YMD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.FILE_SAKSEI_YMD")});
			return false;
		}

		// 事業者識別コード項目チェック
		strValue = (String)rsMap.get("JIGYOSHA_SKBT_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.JIGYOSHA_SKBT_CD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.JIGYOSHA_SKBT_CD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM316-.JIGYOSHA_SKBT_CD")});
			return false;
		}

		return true;
	}

	/**
	 *入力情報（ＥＭ通信履歴確定情報（トレーラ部））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFM318-.REC_TYPE			ＥＭ通信履歴確定情報（トレーラ部）.レコードタイプ
	 *			 TXT-KKIFM318-.REC_TYPE			ＥＭ通信履歴確定情報（トレーラ部）.レコードタイプ
	 *			 TXT-KKIFM318-.REC_TYPE			ＥＭ通信履歴確定情報（トレーラ部）.レコードタイプ
	 *			 TXT-KKIFM318-.DATA_REC_CNT			ＥＭ通信履歴確定情報（トレーラ部）.データレコード件数
	 *			 TXT-KKIFM318-.DATA_REC_CNT			ＥＭ通信履歴確定情報（トレーラ部）.データレコード件数
	 *			 TXT-KKIFM318-.DATA_REC_CNT			ＥＭ通信履歴確定情報（トレーラ部）.データレコード件数
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKKIFM318(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// レコードタイプ項目チェック
		strValue = (String)rsMap.get("REC_TYPE");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM318-.REC_TYPE")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM318-.REC_TYPE")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM318-.REC_TYPE")});
			return false;
		}

		// データレコード件数項目チェック
		strValue = (String)rsMap.get("DATA_REC_CNT");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM318-.DATA_REC_CNT")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "9"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0070TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM318-.DATA_REC_CNT")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFM318-.DATA_REC_CNT")});
			return false;
		}

		return true;
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ＥＭ通信実績番号				EM_TSUSHIN_JSK_NO
	 *		 	ＥＭ契約者コード				EM_KEISHA_CD
	 *		 	通信発生年月日				TSUSHIN_HASSEI_YMD
	 *		 	ＥＭ通信実績登録年月日				EM_TSUSHIN_JSK_ADD_YMD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_EM_TSUSHIN_JSK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("EM_TSUSHIN_JSK_NO", setParam[0]);
		setMap.setValue("EM_KEISHA_CD", setParam[1]);
		setMap.setValue("TSUSHIN_HASSEI_YMD", setParam[2]);
		setMap.setValue("EM_TSUSHIN_JSK_ADD_YMD", setParam[3]);
		setMap.setValue("ADD_DTM", setParam[4]);
		setMap.setValue("ADD_OPEACNT", setParam[5]);
		setMap.setValue("UPD_DTM", setParam[6]);
		setMap.setValue("UPD_OPEACNT", setParam[7]);
		setMap.setValue("DEL_DTM", setParam[8]);
		setMap.setValue("DEL_OPEACNT", setParam[9]);
		setMap.setValue("MK_FLG", setParam[10]);
		setMap.setValue("ADD_UNYO_YMD", setParam[11]);
		setMap.setValue("ADD_TRN_ID", setParam[12]);
		setMap.setValue("UPD_UNYO_YMD", setParam[13]);
		setMap.setValue("UPD_TRN_ID", setParam[14]);
		setMap.setValue("DEL_UNYO_YMD", setParam[15]);
		setMap.setValue("DEL_TRN_ID", setParam[16]);
	
		// DBアクセスを実行します
		db_KK_T_EM_TSUSHIN_JSK.insertByPrimaryKeys(setMap);
	}

	/**
	 * SQLKEY(KK_SELECT_014)で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_KK_SELECT_014(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_KK_SELECT_014);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 単項目チェック用項目名Map。
	 * 
	 * @return 単項目チェックで使用する項目名Map
	 */
	private HashMap<String, String> getItemValueMap()
	{
		HashMap<String, String> retMap = new HashMap<String, String>();
		retMap.put("TXT-KKIFM316-.REC_TYPE", 				"ＥＭ通信履歴確定情報（ヘッダ部）.レコードタイプ");
		retMap.put("TXT-KKIFM316-.FILE_SBT", 				"ＥＭ通信履歴確定情報（ヘッダ部）.ファイル種別");
		retMap.put("TXT-KKIFM316-.FILE_SAKSEI_YMD", 		"ＥＭ通信履歴確定情報（ヘッダ部）.ファイル作成年月日");
		retMap.put("TXT-KKIFM316-.JIGYOSHA_SKBT_CD", 		"ＥＭ通信履歴確定情報（ヘッダ部）.事業者識別コード");

		retMap.put("TXT-KKIFM317-INF1.REC_TYPE", 			"ＥＭ通信履歴確定情報（データ部）.レコードタイプ");
		retMap.put("TXT-KKIFM317-INF1.SIJGSHA_KANRI_CD", 	"ＥＭ通信履歴確定情報（データ部）.再販事業者様管理コード");
		retMap.put("TXT-KKIFM317-INF1.MSISDN", 				"ＥＭ通信履歴確定情報（データ部）.ＭＳＩＳＤＮ");
		retMap.put("TXT-KKIFM317-INF1.EM_KEISHA_CD", 		"ＥＭ通信履歴確定情報（データ部）.ＥＭ契約者コード");
		retMap.put("TXT-KKIFM317-INF1.TSUSHIN_USE_DAY", 	"ＥＭ通信履歴確定情報（データ部）.通信利用日");
		retMap.put("TXT-KKIFM317-INF1.USE_BYTE_CNT", 		"ＥＭ通信履歴確定情報（データ部）.利用バイト数");
		retMap.put("TXT-KKIFM317-INF1.YOBI", 				"ＥＭ通信履歴確定情報（データ部）.予備");

		retMap.put("TXT-KKIFM318-.REC_TYPE", 				"ＥＭ通信履歴確定情報（トレーラ部）.レコードタイプ");
		retMap.put("TXT-KKIFM318-.DATA_REC_CNT", 			"ＥＭ通信履歴確定情報（トレーラ部）.データレコード件数");

		return retMap;
	}

	/**
	 * ファイル取得。<p>
	 * 
	 * 入力電文と同様、JBSbatServiceInterfaceMap を返す。<br>
	 * エンコードはShift-JIS、読み込み位置は1行目固定<br>
	 * ループ(主処理を含む)で使用しない。使用したファイルのクローズまで行う。
	 * 
	 * @param fileDir ディレクトリ
	 * @param fileName ファイル名
	 * @param fileDef ファイル定義
	 * @return ファイル定義型(JBSbatServiceInterfaceMap)で受け取ったファイルの一行
	 * @throws Exception スローされる例外
	 */
	private JBSbatServiceInterfaceMap getInMap(String fileDir, String fileName, String fileDef) throws Exception
	{
		inFileObj = new JBSbatInputFileUtil(fileDir + fileName);
		inFileObj.setEncode("Shift-JIS");
		inFileObj.createReader();
		JBSbatServiceInterfaceMap retInMap = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue("IND") + fileDef, inFileObj).lineToObject(
						inFileObj.readLine(), inFileObj, 1);
		// ファイルのクローズを行う
		if (this.inFileObj != null)
		{
			this.inFileObj.close();
			this.inFileObj = null;
		}

		return retInMap;
	}

	/**
	 * 請求年月取得。
	 * 
	 * @return 請求年月
	 * @throws Exception スローされる例外
	 */
	private String getSeikyYm() throws Exception
	{
		// 料金スケジュール定義
		executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_014(new Object[] {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)
		{
			throw new JBSbatBusinessException("EKKB0740CE", new String[]{"料金スケジュール定義", "請求年月"});
		}

		return record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM);
	}

	/**
	 * 業務パラメタ取得。
	 * 
	 * @param constParam 業務パラメタID
	 * @return 業務パラメタ設定値
	 * @throws Exception スローされる例外
	 */
	private String getZmMWorkParamKnri(String constParam,String strPrmNm) throws Exception
	{
		String strRtn = JKKBatCommon.getWorkParamSetteValue(super.commonItem, constParam);
		if (strRtn == null)
		{
			throw new JBSbatBusinessException("EKKB0740CE", new String[]{"業務パラメータ", strPrmNm});
		}

		return strRtn;
	}

	/**
	 * ＥＭ通信実績にデータを登録する。
	 * 
	 * @param inMap 入力電文
	 * @throws Exception スローされる例外
	 */
	private void insertEmTsushinJsk(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		Object[] setParam = new Object[17];
		// ＥＭ通信実績番号
		setParam[0] = JKKBatCommon.getFormatedNextSeq(super.commonItem, SEQ_NAME, SEQ_PREFIX, SEQ_LEN);
		// ＥＭ契約者コード
		setParam[1] = inMap.getString(JBSbatKKIFM317.EM_KEISHA_CD);
		// 利用年月日
		setParam[2] = inMap.getString(JBSbatKKIFM317.TSUSHIN_USE_DAY);
		// ＥＭ通信実績登録年月日
		setParam[3] = super.opeDate;
		// 登録年月日時分秒
		setParam[4] = JBSbatDateUtil.getSystemDateTime();
		// 登録オペレータアカウント
		setParam[5] = super.batchUserId;
		// 更新年月日時分秒
		setParam[6] = JBSbatDateUtil.getSystemDateTime();
		// 更新オペレータアカウント
		setParam[7] = super.batchUserId;
		// 削除年月日時分秒
		setParam[8] = "";
		// 削除オペレータアカウント
		setParam[9] = "";
		// 無効フラグ
		setParam[10] = "0";
		// 登録運用年月日
		setParam[11] = super.opeDate;
		// 登録処理ID
		setParam[12] = super.jobid;
		// 更新運用年月日
		setParam[13] = super.opeDate;
		// 更新処理ID
		setParam[14] = super.jobid;
		// 削除運用年月日
		setParam[15] = "";
		// 削除処理ID
		setParam[16] = "";
		executeKK_T_EM_TSUSHIN_JSK_PKINSERT(setParam);
		intInsertCnt++;
	}
}
