/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACSeikySkInfFileChk
*	ソースファイル名	：JBSbatACSeikySkInfFileChk.java
*	作成者				：富士通　
*	作成日				：2012年03月22日
*＜機能概要＞
*　社用請求先情報ファイルチェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/22   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatCheckUtil;
import eo.business.util.file.JBSbatACIFM098;
import eo.business.util.file.JBSbatACIFM099;
import eo.business.util.file.JBSbatACIFM136;
import eo.business.util.file.JBSbatACIFM137;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACSeikySkInfFileChk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

	/** テーブル(会計内訳)*/
	private static final String D_TBL_NAME_CH_M_KAIK_UCWK = "CH_M_KAIK_UCWK";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String KK_T_SEIKY_KEI_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String CH_M_KAIK_UCWK_AC_SELECT_001 = "AC_SELECT_001";

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;

	/** テーブルアクセスクラス(会計内訳)*/
	private JBSbatSQLAccess db_CH_M_KAIK_UCWK = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** エラーマップ */
	private HashMap<String, String> tmpErrMap = null;
	
	/** ディレイド処理依頼情報ファイル定義 */
	private String tmpFileDef = null;
	
	/** ディレイド処理依頼番号 */
	private String tmpDlydTrnReqNo = null;
	
	/** ファイル出力クラス */
	private JBSbatOutputFileUtil tmpOutFileObj = null;
	
	/** 出力ファイル定義 */
	private JBSbatDefFileUtil outFileDef = null;
	
	/** 退避．出力件数 */
	private int tmpOutputCnt = 0;
	
	/** 退避．エラー件数 */
	private int tmpErrOutputCnt = 0;
	
	/** 退避．組織責任単位 */
	private String tmpOrgSknintani = null;
	
	/** 退避．証憑集計分類 */
	private String tmpSyohyoShukBunrui = null;
	
	/** 退避．請求契約番号 */
	private String tmpSeikyKeiNo = null;
	
	/** 退避．エラーコード */
	private String tmpErrCd = null;
	
	/** 退避．出力情報リスト */
	private ArrayList<String> tmpOutputList = null;
	
	/** 出力メッセージ */
	private static final String MSG = "ディレイド処理依頼情報ファイル出力";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
		db_CH_M_KAIK_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_KAIK_UCWK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");
		
		// 業務パラメータ取得
		getWorkSysPara();
		
		// パラメータ変数.フリー項目の取得
		String[] freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);
		
		// ディレイド処理依頼情報ファイルの生成
		makeFileInfo(freeItems);
		
		// ログ出力用の変数を初期化
		this.tmpOutputCnt 		= 0;
		this.tmpErrOutputCnt 	= 0;
		
		// 退避．リスト初期化
		this.tmpOutputList	= new ArrayList<String>();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]");
	
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		// レコード分割
		String[] fileInfo 			= inMap.getString(JBSbatACIFM098.ITEM).split(JACStrConst.COMMA);
		
		// ファイル形式チェック
		// CSV形式以外の場合エラー（配列に格納した件数≦1件以下の場合）
		if(fileInfo.length <= 1)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][配列に格納した件数≦1件以下の場合]");
			// エラーコード設定
			this.tmpErrCd = JACStrConst.SY_SIKY_H001;
			// エラーファイル作成
			this.makeErrFile(outputItem);
		}
		// カラム数が既定数と異なる場合エラー（配列に格納した件数≠定数．項目数の場合）
		else if(fileInfo.length != Integer.parseInt(JACStrConst.SY_SIKY_KMK_CNT))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][配列に格納した件数≠初期処理．項目数の場合]");
			// エラーコード設定
			this.tmpErrCd = JACStrConst.SY_SIKY_H002;
			// エラーファイル作成
			this.makeErrFile(outputItem);
		}
		else
		{
			// レコード分割後、変数に格納
			this.recBnkt(fileInfo);
			// 単項目チェック
			if(isSingleCheckACIFM136_INF1())
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][正常]");
				// 社用請求先情報エラーファイルの出力
				this.makeOutputInfo2(outputItem);
				
				// 社用請求先情報チェック済ファイルの出力
				this.makeOutputInfo(outputItem);
			}
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][単項目チェックエラー]");
				// エラーファイル作成
				this.makeErrFileSingle(outputItem);
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SEIKY_KEI.close();
		db_CH_M_KAIK_UCWK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		// ディレイド処理依頼情報ファイルの出力
		// ファイル書き込み
		makeDlydInfo();
		// ファイルのクローズ
		this.tmpOutFileObj.close();
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * 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_SEIKY_KEI_AC_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_AC_SELECT_002);
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	借方責任単位コード
	 *		 	予約適用年月日
	 *		 	会計内訳適用開始年月日
	 *		 	会計内訳適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_KAIK_UCWK_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_CH_M_KAIK_UCWK.selectBySqlDefine(paramList, CH_M_KAIK_UCWK_AC_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * ディレイド処理依頼情報ファイルの生成を行います。
	 * 
	 * @param  freeItems 分割を行ったフリーアイテム
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeFileInfo(String[] freeItems) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeFileInfo]");
		
		// ファイル入出力部品にファイルパスを設定する（初期処理4.4-1.(a)@要素番号[0] ＋ '/' ＋ 初期処理4.4-1.(a)@要素番号[1]）
		String filePath = makeStr(freeItems[0], JACStrConst.SLASH, freeItems[1]);
		
		// 文字列区切り部品にファイル定義を設定する（初期処理4.4-1.(a)@要素番号[2]）
		this.tmpFileDef = JBSbatAplConst.getAplConstValue("OTD") + freeItems[2];
		// ファイル入出力部品（初期処理5.5-1.(a)ファイル入出力部品）
		// ファイル入出力部品でファイルを生成する
		this.tmpOutFileObj = new JBSbatOutputFileUtil(filePath);
		
		// 出力定義ファイルオブジェクトを生成する
		this.outFileDef = new JBSbatDefFileUtil(this.tmpFileDef, this.tmpOutFileObj);
		
		// Writerオブジェクトを生成する。
		this.tmpOutFileObj.createWriter();
		
		// ディレイド処理依頼番号
		this.tmpDlydTrnReqNo = freeItems[3];
	
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeFileInfo]");
		return ;
	}
	
	/**
	 * 文字を連結します
	 * @param  string 文字
	 * @return strBuf 連結した文字列
	 */
	private String makeStr(String ...string)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeStr]");
		
		StringBuffer strBuf = new StringBuffer();
		for(String str:string)
		{
			strBuf.append(str);
		
		}
		
		assert strBuf != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][strBuf][strBuf = " + strBuf.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}
	
	/**
	 * 業務パラメータ管理及び、システムパラメータ管理から値を取得します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void getWorkSysPara() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getWorkPara]");
		
		this.tmpErrMap = new HashMap<String, String>();
		// 業務パラメータ取得
		JACbatParamUtil pu = new JACbatParamUtil(commonItem);
		try
		{
			// エラーマップに値を設定（キー：エラーコード、値：エラー内容）
			this.tmpErrMap.put(JACStrConst.SY_SIKY_H001,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_H001));
			this.tmpErrMap.put(JACStrConst.SY_SIKY_H002,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_H002));
			this.tmpErrMap.put(JACStrConst.SY_SIKY_E001,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_E001));
			this.tmpErrMap.put(JACStrConst.SY_SIKY_E002,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_E002));
			this.tmpErrMap.put(JACStrConst.SY_SIKY_E003,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_E003));
			this.tmpErrMap.put(JACStrConst.SY_SIKY_E004,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_E004));
			this.tmpErrMap.put(JACStrConst.SY_SIKY_E005,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_E005));
			this.tmpErrMap.put(JACStrConst.SY_SIKY_E006,	pu.getGyoumuParameter(JACStrConst.WKPRA_AC_SY_SIKY_MSG_E006));
			
		}
		finally
		{
			pu.close();
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][tmpErrMap = " + tmpErrMap.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara]");
		return;
	}
	
	/**
	 * 社用請求先情報ファイルの出力
	 * @param outputInItem　出力情報
	 * @param mastMap　入力電文（マスタ）
	 * @throws Exception
	 */
	private void makeOutputInfo(JBSbatOutputItem outputInItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo]");
		
		// 組織責任単位、証憑集計分類、請求契約番号を連結（チェック用、マップ作成用）
		String key = makeStr(this.tmpOrgSknintani, this.tmpSyohyoShukBunrui, this.tmpSeikyKeiNo);
		
		// 退避マップ上に存在する場合
		if(this.tmpOutputList.contains(key))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputInfo][退避マップ上に存在する場合]");
			// 主処理を抜ける。
			return;
			
		}
		// 社用請求先情報ファイル作成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		outMap.set(JBSbatACIFM136.ORG_SKNINTANI,		this.tmpOrgSknintani);				// 組織責任単位
		outMap.set(JBSbatACIFM136.SYOHYO_SHUK_BUNRUI,	this.tmpSyohyoShukBunrui);			// 証憑集計分類
		outMap.set(JBSbatACIFM136.SEIKY_KEI_NO,			this.tmpSeikyKeiNo);				// 請求契約番号

		
		// 出力フラグ設定
		outMap.setOutFlg(true);
		
		// 出力処理
		outputInItem.addOutMapList(outMap);
		
		// 退避マップ上に保存
		this.tmpOutputList.add(key);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputInfo][outputItem = " + outMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputInfo]");
	}
	
	/**
	 * 社用請求先情報エラーファイルの出力
	 * @param outputInItem　出力情報
	 * @param mastMap　入力電文（マスタ）
	 * @throws Exception
	 */
	private void makeOutputInfo2(JBSbatOutputItem outputInItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo2]");
		
		// 社用請求先情報エラーファイル作成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		outMap.set(JBSbatACIFM137.ORG_SKNINTANI,		this.tmpOrgSknintani);				// 組織責任単位
		outMap.set(JBSbatACIFM137.SYOHYO_SHUK_BUNRUI,	this.tmpSyohyoShukBunrui);			// 証憑集計分類
		outMap.set(JBSbatACIFM137.SEIKY_KEI_NO,			this.tmpSeikyKeiNo);				// 請求契約番号
		outMap.set(JBSbatACIFM137.ERR_NAIYO,			JACStrConst.KARA_MOJI);				// エラー内容
		
		// 出力フラグ設定
		outMap.setOutFlg(true);
		
		// 出力処理
		outputInItem.addOutMapList_2(outMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputInfo2][outputItem = " + outMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputInfo2]");
	}
	
	/**
	 *入力情報（ＣＳＶ強制読込ファイル）の単項目チェックを行います。<br>
	 *
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isSingleCheckACIFM136_INF1() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][isSingleCheckACIFM136_INF1]");

		// 組織責任単位
		// 組織責任単位　≠　8桁
		if(this.tmpOrgSknintani.length() != 8)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM136_INF1][組織責任単位　≠　8桁]");
			
			this.tmpErrCd = JACStrConst.SY_SIKY_E001;
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSingleCheckACIFM136_INF1]");
			return false;
		}
		
		// 組織責任単位　≠　半角数字
		if(!JBSbatCheckUtil.invoke(this.tmpOrgSknintani, new String[]{"hannkakusuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM136_INF1][組織責任単位　≠　半角数字]");
			
			this.tmpErrCd = JACStrConst.SY_SIKY_E002;
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSingleCheckACIFM136_INF1]");
			return false;
		}
		
		// 組織責任単位が会計内訳スキーマの借方組織責任単位コードに存在しない場合エラー
		if(!this.isKaikUcwkInfo())
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM136_INF1][組織責任単位が会計内訳スキーマの借方組織責任単位コードに存在しない場合]");
			
			this.tmpErrCd = JACStrConst.SY_SIKY_E003;
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSingleCheckACIFM136_INF1]");
			return false;
		}
		
		// 請求契約番号
		// 請求契約番号　≠　10桁
		if(this.tmpSeikyKeiNo.length() != 10)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM136_INF1][組織責任単位　≠　10桁]");
			
			this.tmpErrCd = JACStrConst.SY_SIKY_E004;
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSingleCheckACIFM136_INF1]");
			return false;
		}
		
		// 請求契約番号　≠　半角数字
		if(!JBSbatCheckUtil.invoke(this.tmpSeikyKeiNo, new String[]{"hannkakusuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM136_INF1][請求契約番号　≠　半角数字]");
			
			this.tmpErrCd = JACStrConst.SY_SIKY_E005;
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSingleCheckACIFM136_INF1]");
			return false;
		}
		
		// 請求契約番号が請求契約スキーマに存在しない場合エラー
		if(!this.isSeikyKeiInfo())
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM136_INF1][請求契約番号が請求契約スキーマに存在しない場合]");
			
			this.tmpErrCd = JACStrConst.SY_SIKY_E006;
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSingleCheckACIFM136_INF1]");
			return false;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSingleCheckACIFM136_INF1]");
		return true;
	}
	
	/**
	 * 会計内訳スキーマ検索し、存在チェックを行います。
	 * 
	 * @return boolean true:存在　false:未存在
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isKaikUcwkInfo() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][isKaikUcwkInfo]");
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		
		whereMap.setValue(this.tmpOrgSknintani);	// 借方責任単位コード 
		whereMap.setValue(super.opeDate);			// 予約適用年月日
		whereMap.setValue(super.opeDate);			// 会計内訳適用開始年月日
		whereMap.setValue(super.opeDate);			// 会計内訳適用終了年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isKaikUcwkInfo][whereMap=" + whereMap.getList().toString() + "]");
		
		// SQL実行
		executeCH_M_KAIK_UCWK_AC_SELECT_001(whereMap.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_CH_M_KAIK_UCWK.selectNext();
		// 取得なしの場合
		if(dbMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isKaikUcwkInfo][取得なし]");
			// 結果を返却
			return false;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isKaikUcwkInfo][取得あり]");
		// 結果を返却
		return true;
	}
	
	/**
	 * 請求契約スキーマ検索し、存在チェックを行います。
	 * 
	 * @return boolean true:存在　false:未存在
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isSeikyKeiInfo() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][isSeikyKeiInfo]");
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		
		whereMap.setValue(this.tmpSeikyKeiNo);	// 請求契約番号
		whereMap.setValue(super.opeDate);		// バッチ運用日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSeikyKeiInfo][whereMap=" + whereMap.getList().toString() + "]");
		
		// SQL実行
		executeKK_T_SEIKY_KEI_AC_SELECT_002(whereMap.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_KK_T_SEIKY_KEI.selectNext();
		// 取得なしの場合
		if(dbMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSeikyKeiInfo][取得なし]");
			// 結果を返却
			return false;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isSeikyKeiInfo][取得あり]");
		// 結果を返却
		return true;
	}
	
	/**
	 * エラーレコードを作成します。（ファイル形式）
	 * 
	 * @param outputInItem　出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeErrFile(JBSbatOutputItem outputInItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeErrFile]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeErrFile][tmpErrCd=" + this.tmpErrCd + "]");
		
		// 社用請求先情報エラーファイル作成
		JBSbatServiceInterfaceMap errInf = new JBSbatServiceInterfaceMap();
		
		errInf.set(JBSbatACIFM137.ORG_SKNINTANI,		JACStrConst.KARA_MOJI);				// 組織責任単位
		errInf.set(JBSbatACIFM137.SYOHYO_SHUK_BUNRUI,	JACStrConst.KARA_MOJI);				// 証憑集計分類
		errInf.set(JBSbatACIFM137.SEIKY_KEI_NO,			JACStrConst.KARA_MOJI);				// 請求契約番号
		errInf.set(JBSbatACIFM137.ERR_NAIYO,			this.tmpErrMap.get(this.tmpErrCd));// エラー内容

		errInf.setOutFlg(true);
		
		// 出力処理
		outputInItem.addOutMapList_2(errInf);
		
		// 退避．エラー件数を更新
		this.tmpErrOutputCnt++;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeErrFile]");
		return ;
	}
	
	/**
	 * エラーレコードを作成します。（単項目チェック）
	 * 
	 * @param outputInItem　出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeErrFileSingle(JBSbatOutputItem outputInItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeErrFileSingle]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeErrFileSingle][tmpErrCd=" + this.tmpErrCd + "]");
		
		// 社用請求先情報エラーファイル作成
		JBSbatServiceInterfaceMap errInf = new JBSbatServiceInterfaceMap();
		
		errInf.set(JBSbatACIFM137.ORG_SKNINTANI,		this.tmpOrgSknintani);				// 組織責任単位
		errInf.set(JBSbatACIFM137.SYOHYO_SHUK_BUNRUI,	this.tmpSyohyoShukBunrui);			// 証憑集計分類
		errInf.set(JBSbatACIFM137.SEIKY_KEI_NO,			this.tmpSeikyKeiNo);				// 請求契約番号
		errInf.set(JBSbatACIFM137.ERR_NAIYO,			this.tmpErrMap.get(this.tmpErrCd));// エラー内容

		errInf.setOutFlg(true);
		
		// 出力処理
		outputInItem.addOutMapList_2(errInf);
		
		// 退避．エラー件数を更新
		this.tmpErrOutputCnt++;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeErrFileSingle]");
		return ;
	}
	
	/**
	 * レコード分割を行います。
	 * 
	 * @param fileInfo　分割を行った配列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void recBnkt(String[] fileInfo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][recBnkt]");

		this.tmpOrgSknintani 		= fileInfo[0];	// 組織責任単位
		this.tmpSyohyoShukBunrui 	= fileInfo[1];	// 証憑集計分類
		this.tmpSeikyKeiNo 			= fileInfo[2];	// 請求契約番号
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][recBnkt][組織責任単位 = " + this.tmpOrgSknintani + "]") ;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][recBnkt][証憑集計分類 = " + this.tmpSyohyoShukBunrui + "]") ;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][recBnkt][請求契約番号 = " + this.tmpSeikyKeiNo + "]") ;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][recBnkt]");
		return ;
	}
	
	/**
	 * ディレイド処理依頼情報作成
	 * 
	 * @throws Exception   業務サービス内で発生した例外全般。
	 */
	private void makeDlydInfo() throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeDlydInfo]");
		
		//ディレイド処理依頼情報の生成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// ディレイド処理依頼番号
		outMap.set(JBSbatACIFM099.DLYD_TRN_REQ_NO, this.tmpDlydTrnReqNo); 							// ディレイド処理依頼番号
		
		// 退避．エラー件数 ＝ 0 （エラーなし）の場合、"1"（正常）
		if(this.tmpErrOutputCnt == 0)
		{
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeDlydInfo][エラーなし]");
			outMap.set(JBSbatACIFM099.DLYD_TRN_RSLT_CD, JACStrConst.DLYD_TRN_RSLT_CD_FIN); 			// 処理結果コード
		}
		// 退避．エラー件数 ＞ 0 （エラーあり）の場合、"2"（業務エラー）
		else if(this.tmpErrOutputCnt > 0)
		{
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeDlydInfo][業務エラー]");
			outMap.set(JBSbatACIFM099.DLYD_TRN_RSLT_CD, JACStrConst.DLYD_TRN_RSLT_CD_WORK_ERR); 	// 処理結果コード
		}
		
		outMap.setOutFlg(true);
		
		// ファイル出力を行います。
		this.tmpOutFileObj.print(outMap, this.outFileDef);
		
		// 出力件数を更新する
		this.tmpOutputCnt++;
		
		String[] outCntMsg = {MSG, String.valueOf(this.tmpOutputCnt)};
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0560AI, outCntMsg);
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeDlydInfo]");

		return;
	}
}
