/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKChkRcvHpePntkk
*	ソースファイル名	：JBSbatKKChkRcvHpePntkk.java
*	作成者				：富士通　
*	作成日				：2012年06月08日
*＜機能概要＞
*　 はぴｅポイント授受結果データチェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/06/08   富士通		新規作成
*	v4.00.01	2012/10/25   富士通		IT1-2012-0001594 外部IF変更対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatACIFI019;
import eo.business.util.file.JBSbatKKIFE150;
import eo.business.util.table.JBSbatKK_T_HAPIE_POINT_KEI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatCheckUtil;


/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKChkRcvHpePntkk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(はぴｅポイント契約)*/
	private static final String D_TBL_NAME_KK_T_HAPIE_POINT_KEI = "KK_T_HAPIE_POINT_KEI";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_T_HAPIE_POINT_KEI_KK_SELECT_003 = "KK_SELECT_003";

	/** テーブルアクセスクラス(はぴｅポイント契約)*/
	private JBSbatSQLAccess db_KK_T_HAPIE_POINT_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** はぴｅポイント授受結果データチェック部品：変数*/
	/** はぴｅポイント授受結果データ(ファイルパス)入力用*/
	private static String strFreeParam1 = null;
	/** フリー項目情報保持(ファイルパス)*/
	private static String[] lines = null;
	
	
	/** はぴｅポイント授受結果データチェック部品：定数*/
	
	/** はぴｅポイント読み込みレコード定数名*/
	/** 入力レコード*/
	/**  ヘッダレコード：データ作成年月日*/
	private static final String DATA_SKSI_YMD = "data_sksi_ymd";	
	/**  トレーラレコード：データ件数*/
	private static final String DATA_NUM = "data_num";
	/**  トレーラレコード：付与ポイント*/
	private static final String SUM_FUYO_POINT = "sum_fuyo_point";
	/**  データレコード以外共通：予備１*/
	public static final String Local_YOBI_1 = "local_yobi_1";
	/**  データレコード以外共通：予備2*/
	public static final String Local_YOBI_2 = "local_yobi_2";
	
	
	/** レコード区分"1" ヘッダレコード*/
	private static final String HEADER_RECODE = "1";
	/** レコード区分"2" データレコード*/
	private static final String DATA_RECODE = "2";
	/** レコード区分"8" トレーラレコード*/
	private static final String TRAILER_RECODE = "8";
	/** レコード区分"9" エンドレコード*/
	private static final String END_RECODE = "9";
	
	/** 会社コード："000200" 倍付ポイントデータ*/
	private static final String COMP_CD_TRUE1 = "000200";
	/** 会社コード："000200" 訂正ポイントデータ*/
	private static final String COMP_CD_TRUE2 = "000201";
	/** エラーコード："0000" 正常*/
	private static final String ERR_CD_SEIJO = "0000";
	/** エラーコード："0100" クリアパス*/
	private static final String ERR_CD_CPASS = "0100";
	/** エラーコード："0200" 削除*/
	private static final String ERR_CD_DEL = "0200";
	/** エラーコード："0300" データが存在しない場合*/
	private static final String ERR_CD_NODATA = "0300";
	/** エラーコード："0400" 退会済みの場合*/
	private static final String ERR_CD_TAIKAI = "0400";
	
	/** 業務区分："104" 付与ポイント（固定）*/
	private static final String GYOMU_KBN = "104";
	/** はぴｅポイント契約ステータス："910" 解約済み*/
	private static final String HAPIE_POINT_KEI_STAT_KAIYAKU = "910";
	
	/** 入力ファイルレコード長 */
	private static final int REC_LENGTH = 300;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_HAPIE_POINT_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_HAPIE_POINT_KEI);

		//ファイル入力情報取得
		// シェルからのFREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		
		// パラメータを区切り文字で分割して配列に格納する
		lines = strFreeParam.split(JKKBatConst.S_PARAM_DELIM);
		
		// パラメータ数チェック
		if(lines.length != 1)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"FREE"});
		}
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		//ファイル読み込み・作成
		strFreeParam1 = lines[0];	// はぴイｅポイント授受結果データファイル名取得
		
		//入力 ファイルオープン
		File file1 = new File(strFreeParam1);
		FileReader fr = new FileReader(file1);
		BufferedReader br = new BufferedReader(fr);
		
		String line_data_work = "";
		
		// レコードカウント用
		int recode_count = 0;	
		// データレコードカウント用
		int data_recode_count = 0;
		// はぴe付与ポイント計算用
		//合計値・計算領域
		int sum_fuyo_point = 0;
		int fuyo_point_tmp = 0;
		
		// レコード区分退避域
		String recode_kbn_tmp = "";
		//チェックエラーーフラグ
		//1件でもエラーがあった場合：trueとする
		boolean check_err = false;
		
		//はぴｅ番号加工用退避領域
		String hapie_no_tmp ="";
		
		try
		{
			// 読み込みデータの入力チェック
			while (br.ready())
			{
				//レコード数カウント
				recode_count++;
				
				// 1レコード分を読み込んでinMapに格納
				JBSbatServiceInterfaceMap inMap = readRecord(br, strFreeParam1,check_err);
				
				//レコード構成チェック
				if(!isRecodeConstCheckKK(inMap, recode_kbn_tmp, recode_count))
				{
					//エラーの場合、エラーフラグをTRUEにする。
					check_err = true;
				}
		
				//データレコードの場合単項目チェックを行う
				if(DATA_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
					//データコードのカウント
					data_recode_count++;
					//データレコード格納マップを作成
					 HashMap<String, String> inputrecodeMap = inputMapMake(inMap);
					//単項目チェックにおいてエラーがあった場合
					if(!isSingleCheckKKIFE150_INF1(inputrecodeMap, getItemValueMap()))
					{
						//エラーの場合、エラーフラグをTRUEにする。
						check_err = true;
					}
					// 単項目チェックが正常日に終了した場合
					else{
						//データ種別の判定を行う
						if(!isDataSbttCheckKK(inMap)){
							//エラーの場合、エラーフラグをTRUEにする。
							check_err = true;
						}
					}
					//レコード計算
					fuyo_point_tmp = Integer.valueOf(inMap.getString(JBSbatKKIFE150.FUYO_POINT));
					sum_fuyo_point = sum_fuyo_point + fuyo_point_tmp;
				}
				//設定値チェック
				if (!isDataSTTKK(inMap, data_recode_count, sum_fuyo_point))
				{
					//エラーの場合、エラーフラグをTRUEにする。
					check_err = true;
				}

		
				//はぴｅポイント授受結果チェック後ファイル作成：出力レコードの編集を行う
				//データレコードでかつ、エラーレコードが1件でも存在する場合はレコード作成しない
				if((!check_err) && DATA_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
					//過去領域初期化
					hapie_no_tmp = "";
					//ＤＢアクセスのための「はぴｅ番号」の文字列加工（左詰19桁）
					hapie_no_tmp = inMap.getString(JBSbatKKIFE150.HAPIE_NO).subSequence(9, 19)+"         ";
					//はぴｅ契約からはぴｅステータスを取得する。
					Object[] param = new Object[1];
					param[0] = hapie_no_tmp;
					executeKK_T_HAPIE_POINT_KEI_KK_SELECT_003(param);
					JBSbatCommonDBInterface hapi_e_kei_map =db_KK_T_HAPIE_POINT_KEI.selectNext();
			
					//エラーコード設定値変更
					//はぴｅ契約にレコードが存在しない場合、エラーコード"0300"を設定
					if(hapi_e_kei_map == null){
						inMap.setString(JBSbatKKIFE150.ERR_CD, ERR_CD_NODATA);
						//はぴｅ契約ステータスが"910"の場合、エラーコード"0400"を設定
					}else if(HAPIE_POINT_KEI_STAT_KAIYAKU.equals(
							hapi_e_kei_map.getString(JBSbatKK_T_HAPIE_POINT_KEI.HAPIE_POINT_KEI_STAT))){
						inMap.setString(JBSbatKKIFE150.ERR_CD, ERR_CD_TAIKAI);
					}
					else{
						;
					}
					// 出力情報Map
					JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
					outMap.set(JBSbatACIFI019.REC_DIV, inMap.getString(JBSbatKKIFE150.RECODE_KBN));		//レコード区分
					outMap.set(JBSbatACIFI019.YOBI1,inMap.getString(JBSbatKKIFE150.YOBI1));				//予備1
					outMap.set(JBSbatACIFI019.COMP_CD,inMap.getString(JBSbatKKIFE150.COMP_CD));			//会社コード
					outMap.set(JBSbatACIFI019.YOBI2,inMap.getString(JBSbatKKIFE150.YOBI2));				//予備２
					outMap.set(JBSbatACIFI019.KIKI_TRAN_DATE,inMap.getString(JBSbatKKIFE150.KIKAI_TRN_YMD));	//機械処理年月日
					outMap.set(JBSbatACIFI019.WORK_DIV, inMap.getString(JBSbatKKIFE150.GYOMU_KBN));		//業務区分
					outMap.set(JBSbatACIFI019.YOBI3, inMap.getString(JBSbatKKIFE150.YOBI3));			//予備３
					outMap.set(JBSbatACIFI019.HAPIE_NO,inMap.getString(JBSbatKKIFE150.HAPIE_NO));		//はぴｅ番号
					outMap.set(JBSbatACIFI019.YOBI4, inMap.getString(JBSbatKKIFE150.YOBI4));			//予備４
					outMap.set(JBSbatACIFI019.FUYO_POINT, inMap.getString(JBSbatKKIFE150.FUYO_POINT));	//付与ポイント
					outMap.set(JBSbatACIFI019. YOBI5, inMap.getString(JBSbatKKIFE150.YOBI5));			//予備５
					outMap.set(JBSbatACIFI019.ERR_CD,inMap.getString(JBSbatKKIFE150.ERR_CD));			//エラーコード
					outMap.set(JBSbatACIFI019.YOBI6,inMap.getString(JBSbatKKIFE150.YOBI6));				//予備６
					
					// 出力フラグをON
					outMap.setOutFlg(true);
					// 出力データを格納
					outputBean.addOutMapList(outMap);
				}
				else{
					;
				}
				//レコード種別格納
				recode_kbn_tmp = inMap.getString(JBSbatKKIFE150.RECODE_KBN);
					
			}
			//最終レコードの構成確認
			//前レコード種別が"9"以外をエラーとする。
			if(!END_RECODE.equals(recode_kbn_tmp)){
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0430CE");
				check_err = true;
			}
			//最終レコード取得後にエラーが1件でも存在した場合、異常終了とする。
			if(check_err){
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0100AE,new String[]{strFreeParam1});
			}
		}
		catch(IOException e)
		{
// IT1-2013-0000344 2013/02/27 MOD START
//			throw new JBSbatBusinessException("EKKB0020CE", new String[]{strFreeParam1});
			throw new JBSbatBusinessException("EKKB0740CE", new String[]{"ファイル内容", strFreeParam1});
// IT1-2013-0000344 2013/02/27 MOD END
		}
		finally
		{
			if (br != null)
			{
				br.close();
			}
		}

		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_HAPIE_POINT_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
		
		
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（はぴｅポイント授受結果）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFE150-INF1.recode_kbn			はぴｅポイント授受結果.レコード区分
	 *			 TXT-KKIFE150-INF1.recode_kbn			はぴｅポイント授受結果.レコード区分
	 *			 TXT-KKIFE150-INF1.recode_kbn			はぴｅポイント授受結果.レコード区分
	 *			 TXT-KKIFE150-INF1.yobi1			はぴｅポイント授受結果.予備１
	 *			 TXT-KKIFE150-INF1.yobi1			はぴｅポイント授受結果.予備１
	 *			 TXT-KKIFE150-INF1.yobi1			はぴｅポイント授受結果.予備１
	 *			 TXT-KKIFE150-INF1.comp_cd			はぴｅポイント授受結果.会社コード
	 *			 TXT-KKIFE150-INF1.comp_cd			はぴｅポイント授受結果.会社コード
	 *			 TXT-KKIFE150-INF1.comp_cd			はぴｅポイント授受結果.会社コード
	 *			 TXT-KKIFE150-INF1.yobi2			はぴｅポイント授受結果.予備２
	 *			 TXT-KKIFE150-INF1.yobi2			はぴｅポイント授受結果.予備２
	 *			 TXT-KKIFE150-INF1.yobi2			はぴｅポイント授受結果.予備２
	 *			 TXT-KKIFE150-INF1.kikai_trn_ymd			はぴｅポイント授受結果.機械処理年月日
	 *			 TXT-KKIFE150-INF1.kikai_trn_ymd			はぴｅポイント授受結果.機械処理年月日
	 *			 TXT-KKIFE150-INF1.kikai_trn_ymd			はぴｅポイント授受結果.機械処理年月日
	 *			 TXT-KKIFE150-INF1.gyomu_kbn			はぴｅポイント授受結果.業務区分
	 *			 TXT-KKIFE150-INF1.gyomu_kbn			はぴｅポイント授受結果.業務区分
	 *			 TXT-KKIFE150-INF1.gyomu_kbn			はぴｅポイント授受結果.業務区分
	 *			 TXT-KKIFE150-INF1.yobi3			はぴｅポイント授受結果.予備３
	 *			 TXT-KKIFE150-INF1.yobi3			はぴｅポイント授受結果.予備３
	 *			 TXT-KKIFE150-INF1.yobi3			はぴｅポイント授受結果.予備３
	 *			 TXT-KKIFE150-INF1.hapie_no			はぴｅポイント授受結果.はぴｅ番号
	 *			 TXT-KKIFE150-INF1.hapie_no			はぴｅポイント授受結果.はぴｅ番号
	 *			 TXT-KKIFE150-INF1.hapie_no			はぴｅポイント授受結果.はぴｅ番号
	 *			 TXT-KKIFE150-INF1.yobi4			はぴｅポイント授受結果.予備４
	 *			 TXT-KKIFE150-INF1.yobi4			はぴｅポイント授受結果.予備４
	 *			 TXT-KKIFE150-INF1.yobi4			はぴｅポイント授受結果.予備４
	 *			 TXT-KKIFE150-INF1.fuyo_point			はぴｅポイント授受結果.付与ポイント
	 *			 TXT-KKIFE150-INF1.fuyo_point			はぴｅポイント授受結果.付与ポイント
	 *			 TXT-KKIFE150-INF1.fuyo_point			はぴｅポイント授受結果.付与ポイント
	 *			 TXT-KKIFE150-INF1.yobi5			はぴｅポイント授受結果.予備５
	 *			 TXT-KKIFE150-INF1.yobi5			はぴｅポイント授受結果.予備５
	 *			 TXT-KKIFE150-INF1.yobi5			はぴｅポイント授受結果.予備５
	 *			 TXT-KKIFE150-INF1.err_cd			はぴｅポイント授受結果.エラーコード
	 *			 TXT-KKIFE150-INF1.err_cd			はぴｅポイント授受結果.エラーコード
	 *			 TXT-KKIFE150-INF1.err_cd			はぴｅポイント授受結果.エラーコード
	 *			 TXT-KKIFE150-INF1.yobi6			はぴｅポイント授受結果.予備６
	 *			 TXT-KKIFE150-INF1.yobi6			はぴｅポイント授受結果.予備６
	 *			 TXT-KKIFE150-INF1.yobi6			はぴｅポイント授受結果.予備６
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKKIFE150_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// チェック結果を初期化
		boolean isCheckOk = true;
		
		
		// 単項目チェックを行います
		String strValue = null;

		// レコード区分項目チェック
		strValue = (String)rsMap.get("recode_kbn");
		// 必須チェック
		if(strValue.trim() == null || "".equals(strValue.trim()))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.recode_kbn")});
			isCheckOk = false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.recode_kbn")});
			isCheckOk = false;
		}

		// 会社コード項目チェック
		strValue = (String)rsMap.get("comp_cd");
		// 必須チェック
		if(strValue.trim() == null || "".equals(strValue.trim()))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.comp_cd")});
			isCheckOk = false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.comp_cd")});
			isCheckOk = false;
		}

		// 機械処理年月日項目チェック
		strValue = (String)rsMap.get("kikai_trn_ymd");
		// 必須チェック
		if(strValue.trim() == null || "".equals(strValue.trim()))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.kikai_trn_ymd")});
			isCheckOk = false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"day_hour5"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.kikai_trn_ymd")});
			isCheckOk = false;
		}

		// 業務区分項目チェック
		strValue = (String)rsMap.get("gyomu_kbn");
		// 必須チェック
		if(strValue.trim() == null || "".equals(strValue.trim()))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.gyomu_kbn")});
			isCheckOk = false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.gyomu_kbn")});
			isCheckOk = false;
		}

		// はぴｅ番号項目チェック
		strValue = (String)rsMap.get("hapie_no");
		// 必須チェック
		if(strValue.trim() == null || "".equals(strValue.trim()))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.hapie_no")});
			isCheckOk = false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.hapie_no")});
			isCheckOk = false;
		}

		// 付与ポイント項目チェック
		strValue = (String)rsMap.get("fuyo_point");
		// 必須チェック
		if(strValue.trim() == null || "".equals(strValue.trim()))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.fuyo_point")});
			isCheckOk = false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.fuyo_point")});
			isCheckOk = false;
		}

		// エラーコード項目チェック
		strValue = (String)rsMap.get("err_cd");
		// 必須チェック
		if(strValue.trim() == null || "".equals(strValue.trim()))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0060TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.err_cd")});
			isCheckOk = false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0080TE", new String[]{
															(String)itemvalueMap.get("TXT-KKIFE150-INF1.err_cd")});
			isCheckOk = false;
		}

		return isCheckOk;
	}
	
	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	はぴe会員ID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_HAPIE_POINT_KEI_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_HAPIE_POINT_KEI.selectBySqlDefine(paramList, KK_T_HAPIE_POINT_KEI_KK_SELECT_003);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**▼▼▼▼▼▼▼▼▼▼▼追加メソッド開始▼▼▼▼▼▼▼▼▼▼▼*/

	/**
	 * ファイル構成を判定します。<br>
	 * <p>
	 * @param line_data レコード値(カンマ毎の配列文字列)
	 * @param recode_kbn_tmp 前レコードのレコード区分
	 * @param recode_countレコード総件数)
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */	
	private boolean isRecodeConstCheckKK(JBSbatServiceInterfaceMap inMap, String recode_kbn_tmp,int recode_count) throws Exception
	{
		//エラー判定フラグ
		boolean err_RecodeConstCheckKK_flg = false;
		//レコード区分
		String record_kbn_tmp = inMap.getString(JBSbatKKIFE150.RECODE_KBN);
		//レコード構成チェック：レコード1件目の場合
		if(1 == recode_count){
			//レコード種別"1"以外をエラーとする。
			if(!HEADER_RECODE.equals(record_kbn_tmp)){
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0400CE");
				err_RecodeConstCheckKK_flg =  true;
			}
		}
		//レコード構成チェック：レコード2件目の場合
		else if(2 == recode_count){
			//レコード種別"2","8"以外をエラーとする。
			if(!(DATA_RECODE.equals(record_kbn_tmp) || TRAILER_RECODE.equals(record_kbn_tmp))){
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0410CE");
				err_RecodeConstCheckKK_flg =  true;
			}
		}
		// レコード構成チェック：レコード3件目以降の場合
		else if(3 <= recode_count){
			//前レコードのレコードの種別が"2"の場合
			if(DATA_RECODE.equals(recode_kbn_tmp))
				//レコード種別"2","8"以外をエラーとする。
				if(!(DATA_RECODE.equals(record_kbn_tmp) || TRAILER_RECODE.equals(record_kbn_tmp))){
					commonItem.getLogPrint().printBusinessErrorLog("EKKB0410CE");
					err_RecodeConstCheckKK_flg =  true;
				}
			//前レコードのレコードの種別が"3"の場合
			if(TRAILER_RECODE.equals(recode_kbn_tmp)){
				//レコード種別"9"以外をエラーとする。
				if(!END_RECODE.equals(record_kbn_tmp)){
					commonItem.getLogPrint().printBusinessErrorLog("EKKB0420CE");
					err_RecodeConstCheckKK_flg =  true;
				}
			}
		}
		//戻り値設定：エラーの場合falseを返す。
		if(err_RecodeConstCheckKK_flg){
			return false;
		}
		else{
			return true;
		}
		
	}
	
	/**
	 * 単項目チェックのためのHashMap<String, String>を生成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェック用に、入力レコードの項目値を格納されたHashMapを生成する。<br>
	 * <p>
	 * @param line_data レコード値(カンマ毎の配列文字列))
	 * @return datarecMap データレコード1レコードの項目値を格納したHashMap
	 */
	private HashMap<String, String> inputMapMake(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// エラーメッセージに関する項目値が格納されたHashMapを設定
		HashMap<String, String> datarecMap = new HashMap<String, String>();
		datarecMap.put(JBSbatKKIFE150.RECODE_KBN,inMap.getString(JBSbatKKIFE150.RECODE_KBN));//レコード区分
		datarecMap.put(JBSbatKKIFE150.YOBI1,inMap.getString(JBSbatKKIFE150.YOBI1));//予備1
		datarecMap.put(JBSbatKKIFE150.COMP_CD,inMap.getString(JBSbatKKIFE150.COMP_CD));		//会社コード
		datarecMap.put(JBSbatKKIFE150.YOBI2,inMap.getString(JBSbatKKIFE150.YOBI2));			//予備２
		datarecMap.put(JBSbatKKIFE150.KIKAI_TRN_YMD,inMap.getString(JBSbatKKIFE150.KIKAI_TRN_YMD));	//機械処理年月日
		datarecMap.put(JBSbatKKIFE150.GYOMU_KBN,inMap.getString(JBSbatKKIFE150.GYOMU_KBN));		//業務区分
		datarecMap.put(JBSbatKKIFE150.YOBI3,inMap.getString(JBSbatKKIFE150.YOBI3));			//予備３
		datarecMap.put(JBSbatKKIFE150.HAPIE_NO,inMap.getString(JBSbatKKIFE150.HAPIE_NO));		//はぴｅ番号
		datarecMap.put(JBSbatKKIFE150.YOBI4,inMap.getString(JBSbatKKIFE150.YOBI4));			//予備４
		datarecMap.put(JBSbatKKIFE150.FUYO_POINT,inMap.getString(JBSbatKKIFE150.FUYO_POINT));	//付与ポイント
		datarecMap.put(JBSbatKKIFE150. YOBI5,inMap.getString(JBSbatKKIFE150.YOBI5));		//予備５
		datarecMap.put(JBSbatKKIFE150.ERR_CD,inMap.getString(JBSbatKKIFE150.ERR_CD));		//エラーコード
		datarecMap.put(JBSbatKKIFE150.YOBI6,inMap.getString(JBSbatKKIFE150.YOBI6));		//予備６
		return datarecMap;
	}
	
	/**
	 * データ種別を判定します。<br>
	 * <p>
	 * @param line_data レコード値(カンマ毎の配列文字列)
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。。
	 */	
	private boolean isDataSbttCheckKK(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		
		//データ種別判定を行う
		//会社コードが"000200"または"000201"の場合
		if(COMP_CD_TRUE1.equals(inMap.getString(JBSbatKKIFE150.COMP_CD)) || COMP_CD_TRUE2.equals(inMap.getString(JBSbatKKIFE150.COMP_CD))){
			//エラーコードが"0000","0200","0200"以外の場合
			if(!(ERR_CD_SEIJO.equals(inMap.getString(JBSbatKKIFE150.ERR_CD)) 
				|| ERR_CD_CPASS.equals(inMap.getString(JBSbatKKIFE150.ERR_CD)) 
				|| ERR_CD_DEL.equals(inMap.getString(JBSbatKKIFE150.ERR_CD)))){
				//エラーメッセージの出力
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0490CE", new String[]{inMap.getString(JBSbatKKIFE150.HAPIE_NO)});
				return false;
			}
		}

		return true;
	}
	
	/**
	 * 設定値を判定します。<br>
	 * <p>
	 * @param line_data レコード値(カンマ毎の配列文字列)
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。。
	 *
	 * @param line_data レコード値(カンマ毎の配列文字列)
	 * @param data_recode_count データレコード件数
	 * @param sum_fuyo_point 付与ポイントの総件数
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isDataSTTKK(JBSbatServiceInterfaceMap inMap,int data_recode_count,int sum_fuyo_point) throws Exception
	{
		//エラー判定フラグ
		boolean err_DataSTTK = false;
		
		//データ設定値の判別を行う
		//ヘッダレコードの場合
		if(HEADER_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
			//会社コードが"000200"以外の場合エラーメッセージを出力する。
			if(!COMP_CD_TRUE1.equals(inMap.getString(JBSbatKKIFE150.COMP_CD))){
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0440CE");
				err_DataSTTK = true;
			}
		}
		//データレコードの場合
		else if(DATA_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
			//会社コードが"000200","000201"以外の場合エラーメッセージを出力する。
			if(!(COMP_CD_TRUE1.equals(inMap.getString(JBSbatKKIFE150.COMP_CD)) 
				|| COMP_CD_TRUE2.equals(inMap.getString(JBSbatKKIFE150.COMP_CD)))){
					commonItem.getLogPrint().printBusinessErrorLog("EKKB0450CE", new String[]{inMap.getString(JBSbatKKIFE150.HAPIE_NO)});
					err_DataSTTK = true;
			}
			//業務区分が"104"以外の場合エラーメッセージを出力する。
			if(!(GYOMU_KBN.equals(inMap.getString(JBSbatKKIFE150.GYOMU_KBN)))){
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0460CE", new String[]{inMap.getString(JBSbatKKIFE150.HAPIE_NO)});
				err_DataSTTK = true;
			}
		}
		//トレーラレコードの場合
		else if(TRAILER_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
			//データ件数レコード及び、付与ポイント合計値を数値変換
			int data_recode_count_tmp = Integer.valueOf(inMap.getString(DATA_NUM));
			int sum_fuyo_point_tmp = Integer.valueOf(inMap.getString(SUM_FUYO_POINT));
			//データレコードの合計件数が一致してない場合エラーメッセージを出力する。
			if(!(data_recode_count == data_recode_count_tmp)){
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0470CE");
				err_DataSTTK = true;
			}
			//データレコードの付与ポイントが一致してない場合エラーメッセージを出力する。
			if(!(sum_fuyo_point == sum_fuyo_point_tmp)){
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0480CE");
				err_DataSTTK = true;
			}
		}

		//戻り値設定：エラーの場合falseを返す。
		if(err_DataSTTK){
			return false;
		}
		else{
			return true;
		}
	}
	
	/**
	 * エラーメッセージに関する項目値を格納されたHashMap<String, String>を生成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.エラーメッセージに関する項目値を格納されたHashMapを生成する。<br>
	 *
	 * 2.エラーメッセージに関する項目値を格納されたHashMapに値を設定する。<br>
	 * </pre>
	 * <p>
	 * @return itemvalueMap エラーメッセージに関する項目値を格納されたHashMap
	 */
	private HashMap<String, String> getItemValueMap()
	{
		// エラーメッセージに関する項目値が格納されたHashMapを設定
		HashMap<String, String> itemvalueMap = new HashMap<String, String>();
		itemvalueMap.put("TXT-KKIFE150-INF1.recode_kbn", "レコード区分");
		itemvalueMap.put("TXT-KKIFE150-INF1.yobi1", "予備１");
		itemvalueMap.put("TXT-KKIFE150-INF1.comp_cd", "会社コード");
		itemvalueMap.put("TXT-KKIFE150-INF1.yobi2", "予備２");
		itemvalueMap.put("TXT-KKIFE150-INF1.kikai_trn_ymd", "機械処理年月日");
		itemvalueMap.put("TXT-KKIFE150-INF1.gyomu_kbn", "業務区分");
		itemvalueMap.put("TXT-KKIFE150-INF1.yobi3", "予備３");
		itemvalueMap.put("TXT-KKIFE150-INF1.hapie_no", "はぴｅ番号");
		itemvalueMap.put("TXT-KKIFE150-INF1.yobi4", "予備４");
		itemvalueMap.put("TXT-KKIFE150-INF1.fuyo_point", "付与ポイント");
		itemvalueMap.put("TXT-KKIFE150-INF1.yobi5", "予備５");
		itemvalueMap.put("TXT-KKIFE150-INF1.err_cd", "エラーコード");
		itemvalueMap.put("TXT-KKIFE150-INF1.yobi6", "予備６");

		return itemvalueMap;
	}
	
	/**
	 * 入力ファイルを1レコード分読み込みます。
	 * ※当機能では、入力ファイルが改行無しのためにフレームワークによるファイル読込み機能が使用できない。
	 * 　そのため、自力でファイル読込みを行っています。
	 * 
	 * @param br 入力ファイル読込み用BufferedReader
	 * @param inf1Pass 入力ファイル名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap readRecord(BufferedReader br, String strFreeParam1,boolean check_err) throws Exception {
		// 1レコード分読込
		char[] cbuf = new char[REC_LENGTH];
		int readRslt = br.read(cbuf, 0, REC_LENGTH);
		// 読込文字数がレコード長と一致しない場合はシステムエラー
		if(readRslt!=REC_LENGTH){
			commonItem.getLogPrint().printBusinessErrorLog("入力ファイルレコード長が不正です。入力ファイルパス：" + strFreeParam1 + ", レコード長：" + readRslt);
			check_err = true;
		}
		String inRecord = new String(cbuf);
		
		// 入力マップを生成
		JBSbatServiceInterfaceMap inMap = new JBSbatServiceInterfaceMap();
		int offset = 0;

		/** 入力レコード格納*/
		// レコード区分
		offset = setInMapColumn(inMap, JBSbatKKIFE150.RECODE_KBN, inRecord, offset,1);
		
		/** 区分ごとにinMapに格納*/
		if(HEADER_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
			//予備１
			offset = setInMapColumn(inMap,Local_YOBI_1,inRecord, offset,44);
			//データ作成年月日
			offset = setInMapColumn(inMap,DATA_SKSI_YMD,inRecord, offset,6);
			//会社コード
			offset = setInMapColumn(inMap,JBSbatKKIFE150.COMP_CD,inRecord, offset,6);
			//予備２
			offset = setInMapColumn(inMap,Local_YOBI_2,inRecord, offset,243);
		}
		else if(DATA_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
			//予備１
			offset = setInMapColumn(inMap,JBSbatKKIFE150.YOBI1,inRecord, offset,14);
			//会社コード
			offset = setInMapColumn(inMap,JBSbatKKIFE150.COMP_CD,inRecord, offset,6);
			//予備２
			offset = setInMapColumn(inMap,JBSbatKKIFE150.YOBI2,inRecord, offset,19);
			//機械処理日時
			offset = setInMapColumn(inMap,JBSbatKKIFE150.KIKAI_TRN_YMD,inRecord, offset,12);
			//業務区分
			offset = setInMapColumn(inMap,JBSbatKKIFE150.GYOMU_KBN,inRecord, offset,3);
			//予備３
			offset = setInMapColumn(inMap,JBSbatKKIFE150.YOBI3,inRecord, offset,60);
			//はぴｅ番号
			offset = setInMapColumn(inMap,JBSbatKKIFE150.HAPIE_NO,inRecord, offset,19);
			//予備４
			offset = setInMapColumn(inMap,JBSbatKKIFE150.YOBI4,inRecord, offset,56);
			//付与ポイント
			offset = setInMapColumn(inMap,JBSbatKKIFE150.FUYO_POINT,inRecord, offset,8);
			//予備５
			offset = setInMapColumn(inMap,JBSbatKKIFE150.YOBI5,inRecord, offset,31);
			//エラーコード
			offset = setInMapColumn(inMap,JBSbatKKIFE150.ERR_CD,inRecord, offset,4);
			//予備６
			offset = setInMapColumn(inMap,JBSbatKKIFE150.YOBI6,inRecord, offset,67);
		}
		else if(TRAILER_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
			//予備１
			offset = setInMapColumn(inMap,Local_YOBI_1,inRecord, offset,44);
			//データ件数
			offset = setInMapColumn(inMap,DATA_NUM,inRecord, offset,8);
			//合計付与ポイント
			offset = setInMapColumn(inMap,SUM_FUYO_POINT,inRecord, offset,8);
			//予備２
			offset = setInMapColumn(inMap,Local_YOBI_2,inRecord, offset,239);
		}
		else if (END_RECODE.equals(inMap.getString(JBSbatKKIFE150.RECODE_KBN))){
			//予備１
			offset = setInMapColumn(inMap,Local_YOBI_1,inRecord, offset,299);
		}
		return inMap;
	}

	/**
	 * 入力ファイルレコードを項目長で区切って入力ファイルマップに設定します。
	 * 
	 * @param inMap 入力ファイルマップ
	 * @param columnName 項目名（マップ設定キー）
	 * @param offset 項目開始位置
	 * @param size 項目長（文字数）
	 * @return 項目終了位置
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int setInMapColumn(JBSbatServiceInterfaceMap inMap, String columnName, String inRecord, int offset, int size) throws Exception {
		inMap.setString(columnName, inRecord.substring(offset, offset+size));
		offset += size;
		return offset;
	}

	
	
	/**▲▲▲▲▲▲▲▲▲▲▲追加メソッド終了▲▲▲▲▲▲▲▲▲▲▲*/
}
