/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCNCreditDataMake
*	ソースファイル名	：JBSbatCNCreditDataMake.java
*	作成者				：富士通　
*	作成日				：2011年05月19日
*＜機能概要＞
*　クレジット有効性確認データ作成処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/05/19   富士通		新規作成
*	v3.00.00	2012/09/14	 FJ)小林	【ST3-2012-0000274】仕向先会社コードを取得しないよう修正
*	v4.00.10	2012/11/19   FJ)小林	【ST1-2012-0000954】警告終了後、処理続行するよう修正。(shellリターンコード:8へ修正)
*   v20.00.00   2015/11/04  FJ)李擇臣   【ANK-2565-00-00】クレジットカード番号預かりサービス導入（Step3：預かり番号化）
*   v20.00.01   2015/12/21  FJ)李擇臣   【IT1-2015-0000157】仕向け先会社コードの誤り
*	v58.00.00   2022/04/05  GDC)j.lawsin 【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*	v58.00.01   2022/09/12  FJ)星野		【IT1-2022-0000049】性能改善
*********************************************************************/
package eo.business.service;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;


import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.common.constant.JCNStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.application.JBSbatBusinessException;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCNCreditDataMake extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	//ANK-3846-00-00 DEL START
//	/** データ内容IDゼロ埋め用*/
//	private static final String S_ZERO_5 = "00000";
//	
//	/** レコードバイト数*/
//	private static final int I_REC_BYTE = 125;
	//ANK-3846-00-00 DEL END
	/** メッセージキー*/
	private static final String ECNB0160KE = JPCBatchMessageConstant.ECNB0160KE;
	//ANK-3846-00-00 DEL START
//	/** メッセージキー*/
//	private static final String ECNB0170AI = JPCBatchMessageConstant.ECNB0170AI;
//	
//	/** メッセージキー*/
//	private static final String ECNB0090AI = JPCBatchMessageConstant.ECNB0090AI;
	//ANK-3846-00-00 DEL END
	/** メッセージキー*/
	private static final String ECNB0410JW = JPCBatchMessageConstant.ECNB0410JW;
	
	/** 機能名(コンテンツ有効性チェック要求データ作成)*/
	private static final String S_JOB_NM = "コンテンツ有効性チェック要求データ作成";
	/** メッセージキー*/
	private static final String ECNB0230KE = JPCBatchMessageConstant.ECNB0230KE;
	
	//ANK-3846-00-00 ADD START
	/** レコードID */
	private static final String KKIFI008001_REC_ID = "3";
	/** サイトID:「4212：コンテンツ」 */
	private static final String KKIFI008001_SITE_ID_4212 = "4212";
	
	// ファイル出力用ライター
	BufferedWriter wr = null;

	//ANK-3846-00-00 ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// シェルからのFREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		// パラメータを区切り文字で分割して配列に格納する
		String[] lines = strFreeParam.split(JCNStrConst.S_PARAM_DELIM);
		//パラメータ数チェック
		if(lines.length != 3)
		{
			throw new JBSbatBusinessException(ECNB0230KE);
		}
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 運用日付取得
		//ANK-3846-00-00 DEL START
//		String strOpeDate = commonItem.getOpeDate();
		//ANK-3846-00-00 DEL END
//		String strOpeDateSub = strOpeDate.substring(2, 6);
//		String strOpeDateY = strOpeDate.substring(0, 4);
//		String strOpeDateM = strOpeDate.substring(4, 6);
		
		String strFreeParam = commonItem.getFreeItem();
		// パラメータを区切り文字で分割する
		String[] lines = strFreeParam.split(JCNStrConst.S_PARAM_DELIM);
		
		String strFreeParam1 = lines[0];	// クレジット情報データファイル
		String strFreeParam2 = lines[1];	// カード会社情報データファイル
		String strFreeParam3 = lines[2];	// コンテンツ有効性チェック要求ファイル
		
		// ファイル出力用StringBuffer生成
		StringBuffer strBuf = new StringBuffer();
		
//		// トータルヘッダレコード作成
//		strBuf.append(JCNStrConst.S_TTL_REC_ID_HEAD);							// トータルレコードID
//		strBuf.append(JCNStrConst.S_REQ_ID);									// 伝送相手ID
//		strBuf.append(JCNStrConst.S_SHUBETSU_CD);								// 種別コード
//		strBuf.append(strOpeDate);												// データ作成日
//		strBuf.append(JCNStrConst.CENTER_NM);									// センター名称
//		strBuf.append(JCNBatCommon.adjustCharSize("", 94, JCNStrConst.SJIS));	// 予備
//		
//		int iSubCnt = 0;	// サブレコードカウンタ
//		int iBrPoint = 0;	// ブレークポイントカウンタ
////		boolean bWrn = false;
		
		// カード会社情報データファイル読み込み
		ArrayList<String> cardMstList = new ArrayList<String>();
		cardMstList = readFile(strFreeParam2);
		
		// クレジット情報データファイル読み込み
		ArrayList<String> creList = new ArrayList<String>();
		creList = readFile(strFreeParam1);
		
		// クレジット交換コードのみ取得(マスタチェックにて使用)
		ArrayList<String> kokanCdList = new ArrayList<String>();
		for(int i = 0; i < cardMstList.size(); i++)
		{
			// 区切り文字で分割する
			String[] strCardCo = cardMstList.get(i).split(JCNStrConst.S_DELIM_TAB);
			kokanCdList.add(strCardCo[0]);
		}
		
		//ANK-3846-00-00 ADD START
		boolean validityResultFileFlag = false;
		
// IT1-2022-0000049対応 20220912 星野 MOD START
//		ArrayList<String> cardNoCache = new ArrayList<String>();
		Set<String> cardNoCache = new HashSet<String>();
// IT1-2022-0000049対応 20220912 星野 MOD END
		
		
		try{
			// クレジット審査結果ファイルの生成(SJIS)
			wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(strFreeParam3), JKKBatConst.SJIS));
			
			
			// 1).クレジット情報データファイルより有効性チェック要求データファイルを作成する。									
			// クレジット情報データファイルの先頭行から順にレコード行分処理すること。	
			for (String recordRow: creList)
			{
				String[] strCre = recordRow.split(JCNStrConst.S_DELIM_TAB);
				String strCreKokanCd = strCre[2];
				String strCardNo = strCre[3];// v20.0.0 ANK-2565-00-00:クレジットカード番号預りＩＤが設定されるように機能変更実施
				
				// 	※同じクレジットカード番号（※カード預りIDが設定されている）が存在する場合、重複して作成はしない。(１件目のみを出力する。)		
				if (!cardNoCache.contains(strCardNo))
				{
// v20.00.01 IT1-2015-0000157 ADD START
					// クレジット交換コードがマスタに存在しない場合はエラーとする。
					if(!creMstChk(kokanCdList, strCreKokanCd))
					{
						throw new JBSbatBusinessException(ECNB0160KE, new String[] {strCreKokanCd});
					}
// v20.00.01 IT1-2015-0000157 ADD END
					
					cardNoCache.add(strCardNo);
					
					// レコードID
					strBuf.append(KKIFI008001_REC_ID);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// サイトID
					strBuf.append(KKIFI008001_SITE_ID_4212);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// クレジットカード番号
					strBuf.append(strCardNo);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// 顧客カードID
					strBuf.append(JCNStrConst.S_BLANK);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// 有効性判定結果
					strBuf.append(JCNStrConst.S_BLANK);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// カード番号更新サイン
					strBuf.append(JCNStrConst.S_BLANK);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// 有効期限更新サイン
					strBuf.append(JCNStrConst.S_BLANK);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// マスクされたカード番号
					strBuf.append(JCNStrConst.S_BLANK);
					strBuf.append(JCNStrConst.S_DELIM_COMMA);
					// カード有効期限
					strBuf.append(JCNStrConst.S_BLANK);
					
					// ファイルに書き込み、StringBuilderのバッファを初期化する。
					wr.write(strBuf.toString());
					wr.write("\r\n");
					wr.flush();
					strBuf.setLength(0);
					
					validityResultFileFlag = true;
					
				}
				
			}
		
			// 1-2 作成した有効性チェック要求データファイルが0件の場合、以下の処理を行う。
			if (!validityResultFileFlag)
			{
				super.logPrint.printBusinessErrorLog(ECNB0410JW, new String[] {S_JOB_NM});
				super.commonItem.setErrorCount(1);
			}
		}
		catch(IOException e)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0250CE, new String[]{strFreeParam3, e.getMessage()});
		}
		finally
		{
			if (wr != null)
			{
				wr.close();
			}
		}
			
		//ANK-3846-00-00 ADD END
		//ANK-3846-00-00 DEL START
//		// データレコード部総出力件数格納用
//		int datCntAll = 0; 
//		
//		// データファイル作成処理
//		for(int i = 0; i < cardMstList.size(); i++)
//		{
//			
//			// 区切り文字で分割する
//			String[] strCardCo = cardMstList.get(i).split(JCNStrConst.S_DELIM_TAB);
//			String strKokanCd = strCardCo[0];
//			String strMemNm = strCardCo[1];
//			String strMemNo = strCardCo[2];
//
//			
//			// サブヘッダレコード作成
//			strBuf.append(JCNStrConst.S_TTL_REC_ID_SUBHEAD);								// トータルレコードID
//			strBuf.append(strKokanCd + S_ZERO_5);											// データ内容ID
//			strBuf.append(JCNBatCommon.adjustCharSize("", 110, JCNStrConst.SJIS));			// 予備
//			
//			// ヘッダレコード作成
//			strBuf.append(JCNStrConst.S_TTL_REC_ID_CARDCO);									// トータルレコードID
//			strBuf.append(JCNStrConst.S_DATA_KBN_HEAD);										// データ区分
//			strBuf.append(JCNBatCommon.adjustCharSize(strMemNm, 15, JCNStrConst.SJIS));		// 加盟店名称
//			strBuf.append(strMemNo);														// 加盟店番号
//			strBuf.append(strKokanCd);														// クレジット交換コード
//			strBuf.append(JCNStrConst.S_DATA_NM_HEAD);										// データ名称
//			strBuf.append(strOpeDate);														// MT作成年月日
//			strBuf.append(JCNBatCommon.strZeroPad("", 8));									// MT処理年月日
//			strBuf.append(JCNBatCommon.adjustCharSize("", 1, JCNStrConst.SJIS));			// 出力オプション
//			strBuf.append(JCNBatCommon.adjustCharSize("", 47, JCNStrConst.SJIS));			// 予備１
//			
//			// データレコード作成処理
//			int iDataCnt = 0;	// データレコードカウンタ
//			
//			// レコード集約条件比較変数
//			String strOldCreKokanCd = "";
//			String strOldCardNo = ""; // v20.0.0 ANK-2565-00-00:クレジットカード番号預りＩＤが設定されるように機能変更実施
//			String strOldYkKigen = "";
//			
//			for(int j = iBrPoint; j < creList.size(); j++)
//			{
//				// 区切り文字で分割する
//				String[] strCre = creList.get(j).split(JCNStrConst.S_DELIM_TAB);
//				String strSysid = strCre[0];
//				String strCreId = strCre[1];
//				String strCreKokanCd = strCre[2];
//				String strCreKokanCdFut = strCre[2];
//				String strCardNo = strCre[3];// v20.0.0 ANK-2565-00-00:クレジットカード番号預りＩＤが設定されるように機能変更実施
//				String strCardNm = strCre[4];
//				String strYkKigen = strCre[5];
//				// 仕向先会社コードはNULL許可かつ未使用項目のため取得しない。(ST3-2012-0000274)
////				String strSimkeCd = strCre[6];
//
//// v20.00.01 IT1-2015-0000157 DEL START
////				// v20.0.0 ANK-2565-00-00 ADD START
////				String strSimkeCd = strCre[6];
////				String strSimkeCdFut = strCre[6]; // 仕向け先会社コードが設定される
////				// v20.0.0 ANK-2565-00-00 ADD END
//// v20.00.01 IT1-2015-0000157 DEL END
//
//				// v20.0.0 ANK-2565-00-00 DEL START
////				// クレジット交換コードがマスタに存在しない場合はエラーとする。
////				if(!creMstChk(kokanCdList, strCreKokanCd))
////				{
////					throw new JBSbatBusinessException(ECNB0160KE, new String[] {strCreKokanCd});
////				}
//				// v20.0.0 ANK-2565-00-00 DEL END
//
//// v20.00.01 IT1-2015-0000157 ADD START
//				// クレジット交換コードがマスタに存在しない場合はエラーとする。
//				if(!creMstChk(kokanCdList, strCreKokanCd))
//				{
//					throw new JBSbatBusinessException(ECNB0160KE, new String[] {strCreKokanCd});
//				}
//// v20.00.01 IT1-2015-0000157 ADD END
//				
//				/** 
//				 * クレジット交換コードが現在の処理対象かチェックする。
//				 * 作成済みヘッダレコードと一致していない場合
//				 * ループ処理から抜ける。
//				 */
//// v20.00.01 IT1-2015-0000157 MOD START
////				// v20.0.0 ANK-2565-00-00 MOD START
////				//if(!strCreKokanCd.equals(strKokanCd))
////				if(!strSimkeCd.equals(strKokanCd))
////				// v20.0.0 ANK-2565-00-00 MOD END
//				if(!strCreKokanCd.equals(strKokanCd))
//// v20.00.01 IT1-2015-0000157 MOD END
//				{
//					break;
//				}
//				
//				// 次レコードのSYSID,クレジットカード番号預りＩＤを退避
//				if(j < creList.size() - 1)
//				{
//					// 区切り文字で分割する
//					String[] strNextCre = creList.get(j + 1).split(JCNStrConst.S_DELIM_TAB);
//// v20.00.01 IT1-2015-0000157 MOD START
////					// v20.0.0 ANK-2565-00-00 MOD START
//////					strCreKokanCdFut = strNextCre[2];
////					strSimkeCdFut = strNextCre[6];
////					// v20.0.0 ANK-2565-00-00 MOD END
//					strCreKokanCdFut = strNextCre[2];
//// v20.00.01 IT1-2015-0000157 MOD END
//				}
//
//// v20.00.01 IT1-2015-0000157 MOD START
////				// v20.0.0 ANK-2565-00-00 MOD START
//////				if(!strOldCreKokanCd.equals(strCreKokanCd) || !strOldCardNo.equals(strCardNo) || !strOldYkKigen.equals(strYkKigen))
////				if(!strOldCreKokanCd.equals(strSimkeCd) || !strOldCardNo.equals(strCardNo) || !strOldYkKigen.equals(strYkKigen))
////				// v20.0.0 ANK-2565-00-00 MOD END
//				if(!strOldCreKokanCd.equals(strCreKokanCd) || !strOldCardNo.equals(strCardNo) || !strOldYkKigen.equals(strYkKigen))
//// v20.00.01 IT1-2015-0000157 MOD END
//				{
//					// データレコード作成
//					strBuf.append(JCNStrConst.S_TTL_REC_ID_CARDCO);							// トータルレコードID
//					strBuf.append(JCNStrConst.S_DATA_KBN_DATA);								// データ区分
//					strBuf.append(JCNBatCommon.strZeroPad("", 3));							// 予備２
//					strBuf.append(JCNBatCommon.strZeroPad(strCardNo, 16));					// 入力会員番号
//					strBuf.append(strYkKigen.substring(2, 6));								// 入力有効期限
//					strBuf.append(JCNStrConst.S_SEND_NO_DATA);								// 請求先番号
//					strBuf.append(JCNBatCommon.adjustCharSize("", 8, JCNStrConst.SJIS));
//					strBuf.append(JCNBatCommon.adjustCharSize("", 10, JCNStrConst.SJIS));	// 予備３
//					strBuf.append(JCNBatCommon.adjustCharSize("", 15, JCNStrConst.SJIS));	// 請求先名カナ
//					strBuf.append(JCNBatCommon.adjustCharSize("", 1, JCNStrConst.SJIS));	// 会員番号更新サイン
//					strBuf.append(JCNBatCommon.adjustCharSize("", 1, JCNStrConst.SJIS));	// 有効期限更新サイン
//					strBuf.append(JCNBatCommon.strZeroPad("", 3));							// 予備４
//					strBuf.append(JCNBatCommon.strZeroPad("", 16));							// 新会員番号
//					strBuf.append(JCNBatCommon.strZeroPad("", 4));							// 新有効期限
//					strBuf.append(JCNBatCommon.adjustCharSize("", 1, JCNStrConst.SJIS));	// 有効性判定結果
//					strBuf.append(JCNBatCommon.adjustCharSize("", 35, JCNStrConst.SJIS));	// 予備５
//				
//					iDataCnt++;
//				}
//				iBrPoint++;
//				
//				// 次レコードのクレジット交換コードが異なる場合はデータレコード作成処理を抜ける。
//// v20.00.01 IT1-2015-0000157 MOD START
////				// v20.0.0 ANK-2565-00-00 MOD START
//////				if(!strCreKokanCdFut.equals(strCreKokanCd))
////				if(!strSimkeCdFut.equals(strSimkeCd))
////				// v20.0.0 ANK-2565-00-00 MOD END
//				if(!strCreKokanCdFut.equals(strCreKokanCd))
//// v20.00.01 IT1-2015-0000157 MOD END
//				{
//					break;
//				}
//
//// v20.00.01 IT1-2015-0000157 MOD START
////				// v20.0.0 ANK-2565-00-00 MOD START
//////				strOldCreKokanCd = strCreKokanCd;
////				strOldCreKokanCd = strSimkeCd;
////				// v20.0.0 ANK-2565-00-00 MOD END
//				strOldCreKokanCd = strCreKokanCd;
//// v20.00.01 IT1-2015-0000157 MOD END
//				strOldCardNo = strCardNo;
//				strOldYkKigen = strYkKigen;
//				
//			}
//			
//			// データレコード件数を加算する。
//			datCntAll = datCntAll + iDataCnt;
//			
//			// トレーラレコード作成
//			strBuf.append(JCNStrConst.S_TTL_REC_ID_CARDCO);								// トータルレコードID
//			strBuf.append(JCNStrConst.S_DATA_KBN_TRAL);									// データ区分
//			strBuf.append(JCNBatCommon.strZeroPad(String.valueOf(iDataCnt), 7));		// 入力件数
//			strBuf.append(JCNBatCommon.strZeroPad("", 7));								// OK件数
//			strBuf.append(JCNBatCommon.strZeroPad("", 7));								// NG件数
//			strBuf.append(JCNBatCommon.strZeroPad("", 7));								// エラー件数
//			strBuf.append(JCNBatCommon.strZeroPad("", 7));								// 会員番号更新件数
//			strBuf.append(JCNBatCommon.strZeroPad("", 7));								// 有効期限更新件数
//			strBuf.append(JCNBatCommon.adjustCharSize("", 15, JCNStrConst.SJIS));		// 余白
//			strBuf.append(JCNBatCommon.adjustCharSize("", 62, JCNStrConst.SJIS));		// カード会社任意使用欄
//			
//			// エンドレコード作成
//			strBuf.append(JCNStrConst.S_TTL_REC_ID_CARDCO);								// トータルレコードID
//			strBuf.append(JCNStrConst.S_DATA_KBN_END);									// データ区分
//			strBuf.append(JCNBatCommon.adjustCharSize("", 119, JCNStrConst.SJIS));		// 予備
//			
//			// サブトレーラレコード作成
//			strBuf.append(JCNStrConst.S_TTL_REC_ID_SUBTRAL);							// トータルレコードID
//			strBuf.append(JCNBatCommon.strZeroPad(String.valueOf(iDataCnt + 3), 8));	// データ件数
//			strBuf.append(JCNBatCommon.adjustCharSize("", 112, JCNStrConst.SJIS));		// 予備
//		
//			// サブレコード数カウント
//			iSubCnt++;
//		
//		}
//		
//		// トータルトレーラレコード作成
//		String strDataCnt = String.valueOf(strBuf.toString().length() / I_REC_BYTE - 1);
//		strBuf.append(JCNStrConst.S_TTL_REC_ID_TTLTRAL);										// トータルレコードID
//		strBuf.append(JCNBatCommon.strZeroPad(strDataCnt, 8));						// データ件数
//		strBuf.append(JCNBatCommon.strZeroPad(String.valueOf(iSubCnt), 6));			// 伝送ファイル数
//		strBuf.append(JCNBatCommon.adjustCharSize("", 106, JCNStrConst.SJIS));		// 予備
//		
//		// トータルエンドレコード作成
//		strBuf.append(JCNStrConst.S_TTL_REC_ID_TTLEND);											// トータルレコードID
//		strBuf.append(JCNBatCommon.adjustCharSize("", 120, JCNStrConst.SJIS));		// 予備
//		
//		// ファイルへ出力		
//		JBSbatBusinessFileUtil obj = JCNBatCommon.createBusinessFileUtil(strFreeParam3, JCNStrConst.SJIS, JCNStrConst.S_LINE_SEPARAOR_LF, "");
//		JCNBatCommon.printBusinessFileUtil(obj, strBuf.toString());
//		JCNBatCommon.closeBusinessFileUtil(obj);
//		
//		// 処理結果ログ出力。
//		super.logPrint.printBusinessErrorLog(ECNB0170AI, new String[] {strFreeParam1, String.valueOf(creList.size())});
//		super.logPrint.printBusinessErrorLog(ECNB0170AI, new String[] {strFreeParam2, String.valueOf(cardMstList.size())});
//		super.logPrint.printBusinessErrorLog(ECNB0090AI, new String[] {strFreeParam3, String.valueOf(String.valueOf(strBuf.toString().length() / I_REC_BYTE))});
//
//		// データレコード件数が0件の場合は警告を行う。
//		if(datCntAll == 0)
//		{
//			super.logPrint.printBusinessErrorLog(ECNB0410JW, new String[] {S_JOB_NM});
//			super.commonItem.setErrorCount(1);
//		}
		//ANK-3846-00-00 DEL END
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * ファイル読み込み処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で読込ファイルディレクトリ(フルパス)を設定します。<br>
	 *
	 * 2.引数を元にファイル読込を行い、行をListへ格納します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param strFileDir    出力ディレクトリ(フルパス)。
	 * @return resultList   返却用List
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> readFile(String strFileDir) throws Exception
	{
		ArrayList<String> resultList = new  ArrayList<String>();
		
		// 外部出力ファイルパス
		JBSbatInputFileUtil inFile = new JBSbatInputFileUtil(strFileDir);
		inFile.setEncode(JCNStrConst.SJIS);						// 文字コード
		inFile.setLine(JCNStrConst.S_LINE_SEPARAOR_LF);			// 改行コード
		inFile.createReader();
		
		try
		{
			while(true)
			{
				String line = inFile.readLine();
				if(line == null)
				{
					inFile.close();
					break;
				}
				resultList.add(line);
			}
			
			return resultList;
		}
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
			inFile.close();
		}
	}
	/**
	 * クレジット交換コードの存在チェックをします。<br>
	 * @param arg0    クレジット交換コードリスト
	 * @param arg1    チェック対象クレジット交換コード
	 * @return true:チェックOK ,false:チェックNG
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static boolean creMstChk(ArrayList<String> arg0, String arg1) throws Exception
	{
		
		for(int i = 0; i < arg0.size(); i++)
		{
			if(arg1.equals(arg0.get(i)))
			{
				return true;
			}
		}
		
		return false;
	}

}
