/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACJgsFleOptPrcSksKcatDtl
*	ソースファイル名	：JBSbatACJgsFleOptPrcSksKcatDtl.java
*	作成者				：富士通　
*	作成日				：2012年01月10日
*＜機能概要＞
*　事業者間ファイル出力料金情報作成（ＫＣＡＴ明細）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/10   富士通		新規作成
*	v4.00.00	2013/03/26   FJ)小柴	【内部管理番号-0000613】ファイル出力オブジェクト生成時のエンコード設定ずれ防止対応
*	v4.00.01	2013/04/05   FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
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.business.util.file.JBSbatACIFM107;
import eo.business.util.file.JBSbatACIFM118;
import eo.business.util.table.JBSbatAC_M_FILE_OPUT_CTRL;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACJgsFleOptPrcSksKcatDtl extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ファイル出力制御)*/
	private static final String D_TBL_NAME_AC_M_FILE_OPUT_CTRL = "AC_M_FILE_OPUT_CTRL";

	/** SQL定義キー(AC_SELECT_006)*/
	private static final String AC_M_FILE_OPUT_CTRL_AC_SELECT_006 = "AC_SELECT_006";

	/** テーブルアクセスクラス(ファイル出力制御)*/
	private JBSbatSQLAccess db_AC_M_FILE_OPUT_CTRL = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** 0 */
	private static final String ZERO = "0";
	
	/** 退避．明細情報 */
	private HashMap<String, ArrayList<HashMap<String, Object>>> tmpDtlInfo = null;
	
	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_M_FILE_OPUT_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_FILE_OPUT_CTRL);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		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 + "]");
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// フリー項目分割
		String[]freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);		// 分割後フリー項目（[0]:業務パラメータID,[1]:defファイル名）
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItems=" + freeItems + "]");
		
		
		String fileId = JACStrConst.KARA_MOJI;
		try
		{
			// ファイルID取得
			fileId = paramUtil.getGyoumuParameter(freeItems[0]);
		}
		finally
		{
			paramUtil.close();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][fileId=" + fileId + "]");
		
		// ヘッダレコードを出力します。
		this.outputHedderInfo(fileId, freeItems[1]);
		// 明細情報を作成します。
		this.makeDtlInfo(fileId);
		
		// DBアクセスクラスをクローズします
		db_AC_M_FILE_OPUT_CTRL.close();
		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 inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		String wkPrcKmkCd = inMap.getString(JBSbatACIFM107.PRC_KMK_CD);		// 料金項目コード
		
		// 入力．料金項目コードが退避．明細情報のKEYに含まれる場合
		if(this.tmpDtlInfo.containsKey(wkPrcKmkCd))
		{
			ArrayList<Object> inList = this.getListMap(inMap);
			
			ArrayList<HashMap<String, Object>> setMapList = this.tmpDtlInfo.get(wkPrcKmkCd);		// 明細情報マップリスト
			
			int listCnt = setMapList.size();		// 明細情報リストサイズ
			
			// 明細情報リストサイズの分、明細情報レコードを作成します。
			for(int i = 0; i < listCnt; i++)
			{
				this.makeDtlRec(inMap, setMapList.get(i), inList, outputItem);
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_M_FILE_OPUT_CTRL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(AC_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	ファイルID
	 *		 	出力データ識別コード
	 *		 	ファイル出力制御適用開始年月日
	 *		 	ファイル出力制御適用終了年月日
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_M_FILE_OPUT_CTRL_AC_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());

		// DBアクセスを実行します
		db_AC_M_FILE_OPUT_CTRL.selectBySqlDefine(paramList, AC_M_FILE_OPUT_CTRL_AC_SELECT_006);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/
	
	/**
	 * ヘッダ情報を出力します。
	 * 
	 * @param fileId ファイルＩＤ
	 * @param fileDef defファイル名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void outputHedderInfo(String fileId, String fileDef) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeHedderInfo]");
		
		// ファイル出力制御スキーマを検索します。
		JBSbatCommonDBInterface dbMap = this.selectFileOutputCtrl(fileId, JACStrConst.OUTDATASKBT_HEADER);
		
		// ファイル出力部品を取得
		JBSbatOutputFileUtil fileUtil = super.commonItem.getOutPutFile();
		// 設定されているエンコード形式を退避
		String enc = fileUtil.getEncode();
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(enc.toUpperCase()))
		{
			enc = JACStrConst.ENCODE_MS932;
		}
		
		// 出力定義ファイル名を取得する。
		String outFileDefName = JBSbatAplConst.getAplConstValue("OTD") + fileDef;
		
		// 出力定義ファイルオブジェクトを生成する
		JBSbatDefFileUtil outFileDef = new JBSbatDefFileUtil(outFileDefName, fileUtil);
		// 退避したエンコード形式を戻す（出力定義ファイルオブジェクト生成時に上書きが発生しているため）
		fileUtil.setEncode(enc);
		
		// リスト内の情報をすべて出力
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		while(null != dbMap)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeHedderInfo][dbMap=" + dbMap.getMap().toString() + "]");
			
			// 出力情報を設定します。
			this.makeHedderRec(dbMap, outputItem);
			
			dbMap = db_AC_M_FILE_OPUT_CTRL.selectNext();
		}
		int listSize = outputItem.getOutMapList().size();
		
		int initialOutCnt = 0;		// 出力件数
		
		for (int i = 0; i < listSize; i++)
		{
			fileUtil.print((JBSbatServiceInterfaceMap)outputItem.getOutMapList().get(i), outFileDef);
			
			initialOutCnt++;
		}
		
		String[] outCntMsg = {"初期処理", String.valueOf(initialOutCnt)};
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0560AI, outCntMsg);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeHedderInfo]");
		return;
	}
	
	/**
	 * ファイル出力制御スキーマを検索します。
	 * 
	 * @param fileId ファイルＩＤ
	 * @param outDataSkbtCd 出力データ識別コード
	 * @return JBSbatCommonDBInterface 取得結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface selectFileOutputCtrl(String fileId, String outDataSkbtCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectFileOutputCtrl]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectFileOutputCtrl][outDataSkbtCd=" + outDataSkbtCd + "]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		whereParam.setValue(super.systemCode);		// システムコード
		whereParam.setValue(fileId);				// ファイルＩＤ
		whereParam.setValue(outDataSkbtCd);			// 出力データ識別コード
		whereParam.setValue(super.opeDate);			// バッチ運用日
		whereParam.setValue(super.opeDate);			// バッチ運用日
		whereParam.setValue(super.opeDate);			// バッチ運用日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectFileOutputCtrl][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実施
		this.executeAC_M_FILE_OPUT_CTRL_AC_SELECT_006(whereParam.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_AC_M_FILE_OPUT_CTRL.selectNext();
		
		// 取得できなかった場合
		if(null == dbMap)
		{
			// 該当データなし
			String[] msgParam = new String[]
			{ JBSbatAC_M_FILE_OPUT_CTRL.TABLE_NAME, whereParam.getList().toString() };
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0240CW, msgParam);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectFileOutputCtrl]");
		
		return dbMap;
	}
	
	/**
	 * ヘッダーレコードを作成します。
	 * 
	 * @param dbMap ファイル出力制御情報
	 * @param outputItem 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeHedderRec(JBSbatCommonDBInterface dbMap, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeHedderRec]");
		
		JBSbatServiceInterfaceMap outRec = new JBSbatServiceInterfaceMap();
		
		outRec.set(JBSbatACIFM118.SSN_KMK_CD,			dbMap.getValue(JBSbatAC_M_FILE_OPUT_CTRL.PRC_KMK_CD));			// 精算項目コード
		outRec.set(JBSbatACIFM118.LENGTH_POSITION,		dbMap.getValue(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION));		// 縦位置
		outRec.set(JBSbatACIFM118.SIDE_POSITION,		dbMap.getValue(JBSbatAC_M_FILE_OPUT_CTRL.SIDE_POSITION));		// 横位置
		outRec.set(JBSbatACIFM118.FILE_SKBT_FLG,		dbMap.getValue(JBSbatAC_M_FILE_OPUT_CTRL.OUT_DATA_SKBT_CD));	// ファイル識別フラグ
		outRec.set(JBSbatACIFM118.KMK_HENSHU_SKBT_CD,	dbMap.getValue(JBSbatAC_M_FILE_OPUT_CTRL.KMK_HENSHU_SKBT_CD));	// 項目編集識別コード
		outRec.set(JBSbatACIFM118.NM_SKBT_CD,			dbMap.getValue(JBSbatAC_M_FILE_OPUT_CTRL.NM_SKBT_CD));			// 名称識別コード
		
		// 出力元項目コード＝０の場合
		if(BigDecimal.ZERO.equals(dbMap.getBigDecimal(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_MT_KMK_CD)))
		{
			outRec.set(JBSbatACIFM118.OUTPUT_KMK,	dbMap.getValue(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));			// 出力値
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeHedderRec][outRec=" + outRec.getMap().toString() + "]");
		
		outputItem.addOutMapList(outRec);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeHedderRec]");
	}
	
	/**
	 * 明細情報を作成します。
	 * 
	 * @param fileId ファイルＩＤ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeDtlInfo(String fileId) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeDtlInfo]");
		
		// ファイル出力制御スキーマを検索します。
		JBSbatCommonDBInterface dbMap = this.selectFileOutputCtrl(fileId, JACStrConst.OUTDATASKBT_DTL);
		
		String wkPrcKmkCd = JACStrConst.KARA_MOJI;		// 料金項目コード
		String prvPrcKmkCd = JACStrConst.KARA_MOJI;		// 前回料金項目コード
		
		this.tmpDtlInfo = new HashMap<String, ArrayList<HashMap<String, Object>>>();
		
		ArrayList<HashMap<String, Object>> setMapList = new ArrayList<HashMap<String, Object>>();	// 明細情報マップリスト
		
		while(null != dbMap)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeHedderInfo][dbMap=" + dbMap.getMap().toString() + "]");
			
			wkPrcKmkCd = dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.PRC_KMK_CD);
			
			// 料金項目コード≠前回料金項目コードの場合
			if(!wkPrcKmkCd.equals(prvPrcKmkCd))
			{
				// 明細情報マップリストにデータが存在している場合
				if(!setMapList.isEmpty())
				{
					// 退避．明細情報情報に明細情報マップリストを格納
					this.tmpDtlInfo.put(prvPrcKmkCd,	setMapList);
				}
				
				setMapList = new ArrayList<HashMap<String, Object>>();
			}
			// 明細情報マップリストにデータを設定
			setMapList.add((HashMap<String, Object>)dbMap.getMap());
			
			// 前回料金情報　更新
			prvPrcKmkCd = wkPrcKmkCd;
			
			dbMap = db_AC_M_FILE_OPUT_CTRL.selectNext();
		}
		// 退避．明細情報情報に明細情報マップリストを格納
		this.tmpDtlInfo.put(prvPrcKmkCd,	setMapList);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeDtlInfo]");
	}
	
	/** 入力情報をリストに格納を行います。
	 * 
	 * @param inMap 入力情報
	 * @return ArrayList 入力情報(リスト)
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private ArrayList<Object> getListMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getListMap]");

		ArrayList<Object> list = new ArrayList<Object>(20);

		// 入力情報を配列に格納する
		list.add(inMap.get(JBSbatACIFM107.SEIKY_KEI_NO));		// 請求先番号
		list.add(inMap.get(JBSbatACIFM107.SEIKY_YM));			// 請求年月
		list.add(inMap.get(JBSbatACIFM107.SVC_NO));				// サービス番号
		list.add(inMap.get(JBSbatACIFM107.SVC_SKBT_CD));		// 料金サービス識別コード
		list.add(inMap.get(JBSbatACIFM107.PCRS_CD));			// 料金コースコード
		list.add(inMap.get(JBSbatACIFM107.PRC_SVC_CD));			// 料金サービスコード
		list.add(inMap.get(JBSbatACIFM107.PRC_KMK_CD));			// 料金項目コード
		list.add(inMap.get(JBSbatACIFM107.JIGYOSHA_CD));		// 事業者コード
		list.add(inMap.get(JBSbatACIFM107.JIGYOSHA_KEI_CD));	// 事業者契約コード
		list.add(inMap.get(JBSbatACIFM107.PRC));				// 料金
		list.add(inMap.get(JBSbatACIFM107.SSN_CNT));			// 精算項目件数
		list.add(inMap.get(JBSbatACIFM107.USE_STAYMD));			// 利用開始日
		list.add(inMap.get(JBSbatACIFM107.USE_ENDYMD));			// 利用終了日
		list.add(inMap.get(JBSbatACIFM107.AIT_DIV));			// 相対区分
		list.add(inMap.get(JBSbatACIFM107.SIME_DAY));			// 締め日
		
		assert list != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getListMap][list=" + list.toString() + "]") : true;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getListMap]");

		return list;
	}
	
	/**
	 * 明細情報レコードを作成します。
	 * 
	 * @param inMap 入力情報
	 * @param dbMap ファイル出力制御情報
	 * @param inList 入力情報（リスト）
	 * @param outputItem 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeDtlRec(JBSbatServiceInterfaceMap inMap, HashMap<String, Object> dbMap, ArrayList<Object> inList, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeDtlRec]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeDtlRec][dbMap=" + dbMap.toString() + "]");
		
		JBSbatServiceInterfaceMap outRec = new JBSbatServiceInterfaceMap();
		
		outRec.set(JBSbatACIFM118.SVKEI_NO,				inMap.get(JBSbatACIFM107.SVC_NO));							// サービス契約番号
		outRec.set(JBSbatACIFM118.SEIKY_KEI_NO,			inMap.get(JBSbatACIFM107.SEIKY_KEI_NO));					// 請求契約番号
		outRec.set(JBSbatACIFM118.SEIKY_YM,				inMap.get(JBSbatACIFM107.SEIKY_YM));						// 請求年月
		outRec.set(JBSbatACIFM118.PCRS_CD,				inMap.get(JBSbatACIFM107.PCRS_CD));							// 料金コースコード
		outRec.set(JBSbatACIFM118.PRC_SVC_CD,			inMap.get(JBSbatACIFM107.PRC_SVC_CD));						// 料金サービスコード
		outRec.set(JBSbatACIFM118.SSN_KMK_CD,			dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.PRC_KMK_CD));			// 精算項目コード
		outRec.set(JBSbatACIFM118.LENGTH_POSITION,		dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION));		// 縦位置
		outRec.set(JBSbatACIFM118.SIDE_POSITION,		dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.SIDE_POSITION));		// 横位置
		outRec.set(JBSbatACIFM118.FILE_SKBT_FLG,		dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.OUT_DATA_SKBT_CD));		// ファイル識別フラグ
		outRec.set(JBSbatACIFM118.KMK_HENSHU_SKBT_CD,	dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.KMK_HENSHU_SKBT_CD));	// 項目編集識別コード
		outRec.set(JBSbatACIFM118.NM_SKBT_CD,			dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.NM_SKBT_CD));			// 名称識別コード
		
		String outputMtKmkCd =  dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_MT_KMK_CD).toString();				// 出力元項目コード
		
		// 出力元項目コード＝０の場合
		if(ZERO.equals(outputMtKmkCd))
		{
			outRec.set(JBSbatACIFM118.OUTPUT_KMK,	dbMap.get(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));			// 出力値
		}
		// 出力元項目コード＜入力情報（リスト）のサイズ　かつ、出力元項目コード＞０の場合
		else if(Integer.parseInt(outputMtKmkCd) < inList.size() + 1 && ZERO.compareTo(outputMtKmkCd) < 0)
		{
			// 出力元項目コードをもとに入力情報（リスト）の項目を設定します。
			outRec.set(JBSbatACIFM118.OUTPUT_KMK,	inList.get(Integer.parseInt(outputMtKmkCd) - 1));			// 出力値
		}
		
		assert outRec != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][outRec=" + outRec.getMap().toString() + "]") : true;
		
		outRec.setOutFlg(true);
		
		outputItem.addOutMapList(outRec);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeDtlRec]");
	}
	
	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
}
