/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACKcnJsMhSksi
*	ソースファイル名	：JBSbatACKcnJsMhSksi.java
*	作成者				：富士通　
*	作成日				：2012年01月11日
*＜機能概要＞
*　ＫＣＮ事業者間精算明細表作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/11   富士通		新規作成
*	v3.00		2012/08/03   FJ）冨井	【TGI-2012-0000054】ダミーレコード設定位置修正
*	v4.00		2013/03/09   FJ) 小柴	【ANK-1380-00-00】
*	v5.00.00	2013/07/09   FJ)岡田	【LT-2013-0000352】対応
*	v5.00		2013/07/09   FJ）起塚	【TG1-2013-0000662】マスタ参照基準日変更対応
*	v5.01		2013/07/31   FJ) 早崎	【IT1-2013-0001521】対応
*	v5.02		2013/09/02   FJ) 狭間	【OM-2013-0001349】料金の小数点以下を切捨てるよう修正
*	v5.03		2013/10/21   FJ) 伊藤	【OM-2013-0002477】仕様変更に伴い、KCN番号と契約区分を出力に追加。
*	v5.04		2013/11/19   FJ) 柴田	【IT2-2013-0000788】出力ファイルの文字コードをSJISに設定。ヘッダの名称を修正。
*	v5.05		2013/11/23   FJ) 早崎	【OM-2013-0002477】出力ファイルレイアウト修正
*	v6.00		2013/11/26   FJ) 早崎	【OM-2013-0002477】ヘッダ項目修正
*   v41.00.00	2019/03/08   FJ)澤田    【ANK-3534-00-00】社名変更対応の資料連携について
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFM105;
import eo.business.util.table.JBSbatAC_M_FILE_OPUT_CTRL;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatKK_T_KCN_RNK_KEI_INF;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCFomatString;
import eo.common.util.JPCUtilCommon;
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.JBSbatBusinessFileUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACKcnJsMhSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金項目抽出変換)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE = "CH_M_PRC_KMK_CS_CHGE";

	/** SQL定義キー(AJ_SELECT_003)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_AJ_SELECT_003 = "AJ_SELECT_003";
	
	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;
	
	/** テーブル(ファイル出力制御)*/
	private static final String D_TBL_NAME_AC_M_FILE_OPUT_CTRL = "AC_M_FILE_OPUT_CTRL";
	
	/** SQL定義キー(AC_SELECT_003)*/
	private static final String AC_M_FILE_OPUT_CTRL_AC_SELECT_003 = "AC_SELECT_003";
	
	/** テーブルアクセスクラス(ファイル出力制御)*/
	private JBSbatSQLAccess db_AC_M_FILE_OPUT_CTRL = null;
	
	/** テーブル(KCN連携契約情報)*/
	private static final String D_TBL_NAME_KK_T_KCN_RNK_KEI_INF = "KK_T_KCN_RNK_KEI_INF";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String KK_T_KCN_RNK_KEI_INF_AC_SELECT_001 = "AC_SELECT_001";

	/** テーブルアクセスクラス(KCN連携契約情報)*/
	private JBSbatSQLAccess db_KK_T_KCN_RNK_KEI_INF = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** 抽出対象キーリスト */
	private ArrayList<String>spoilTargetList = null;

	/** 一時保存リスト */
	ArrayList<String> tmpList = null;

	/** KCN事業者間精算明細表出力料金項目コードマップ */
	HashMap<String, String> kcnOputPrcKmkCdMap = null;

	/** 処理キーを保持 */
	private String tmpKey = null;

	/** 請求年月 */
	private String sikyYm = JACStrConst.KARA_MOJI;

	/** ファイルインスタンス */
	private JBSbatBusinessFileUtil outFileObj = null;

	/** ファイル出力制御_横位置 : 1 */
	private static final String SIDE_POSITION_1 = "1";

	/** ファイル出力制御_横位置 : 3 */
	private static final String SIDE_POSITION_3 = "3";

	/** サービス終了日付最大値 */
	private static final String SVC_END_MAX_DATE = "99991231";

	/** 課金対象 */
	private static final String CHRG_TRG = "1";
	
	/** 未設定料金 */
	private static final String SET_MI_PRC = "0";

	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/
	
	/**
	 * 初期処理
	 * @param commonItem バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		db_AC_M_FILE_OPUT_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_FILE_OPUT_CTRL);
		db_KK_T_KCN_RNK_KEI_INF = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KCN_RNK_KEI_INF);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		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 + "]");
		
		// 請求年月を取得します。
		this.getSikyYm();
		
		// 外部パラメータを分割します。
		String[] freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItems=" + freeItems[0] + ", " + freeItems[1] + "]");
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// ファイルIDを取得します。
		String fileId = JACStrConst.KARA_MOJI;
		try
		{
			// ファイルID取得
			fileId = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_ID_AC_KCN_DTLHYO_FID);
		}
		finally
		{
			paramUtil.close();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][fileId=" + fileId + "]");
		
		// ファイル生成します。
		// （引数：バッチ共通パラメータ, ファイルID, ファイル分割有無, ファイル連番, 請求年月, 自由設定, 文字コード, 変換前改行コード）
		ArrayList<Object> fileInf = JACBatCommon.geneFile(commonItem, fileId, freeItems[0], freeItems[1], this.sikyYm, JACStrConst.KARA_MOJI, JACStrConst.KARA_MOJI, JACStrConst.ENCODE_SJIS, JACStrConst.LINE_CRLF);
		
		this.outFileObj = (JBSbatBusinessFileUtil)fileInf.get(2);		// ファイルインスタンス
		
		// 帳票出力対象のキーリストを作成します。
		spoilTargetList = new ArrayList<String>();
		String[] param = {
				JACStrConst.SYS_CD_AJ,
				JACStrConst.CHSHT_CHG_CD_CST,
				super.opeDate,
				super.opeDate,
				JACStrConst.WKPRA_AC_KCN_DTL_TGT,
				super.opeDate,
				super.opeDate
		};
		executeCH_M_PRC_KMK_CS_CHGE_AJ_SELECT_003(param);
		
		JBSbatCommonDBInterface ret = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		while (ret != null)
		{
			spoilTargetList.add(ret.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD));
			ret = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		}
		
		// KCN事業者間精算明細表出力料金項目コードマップを作成します。
		setKcnOputPrcKmkCdMap(fileId);
		
		tmpList = new ArrayList<String>();
		
		// ヘッダレコード1を出力
		outputHeader1();
		
		// ヘッダレコード2を出力
		outputHeader2();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		// ファイルより料金項目コードを取得し、抽出対象のキーと比較する
		String prcKmkCd = inMap.getString(JBSbatACIFM105.PRC_KMK_CD);
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]prcKmkCd=" + prcKmkCd);

		// 料金項目コードが抽出対象キーリストに含まれる場合
		if(spoilTargetList.contains(prcKmkCd))
		{
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]集計対象キー");

			// サービス番号
			String workKey = inMap.getString(JBSbatACIFM105.SVC_NO);

			// 一時キーがnullの場合(1レコード目の場合)、新しいキーを取得する
			if (tmpKey == null)
			{
				// キー退避
				tmpKey = workKey;
				
				// 登録データを一時保存
				inputData(inMap);
			}
			// 前回キーと同じ場合はリストの値に加算更新する
			else if (tmpKey.equals(workKey))
			{
				// 登録データを一時保存
				inputData(inMap);
			}
			// 前回キーと異なる場合は、新しいキーを取得し、行出力を行う
			else
			{
				tmpList.set(7, JPCFomatString.formatNumber(tmpList.get(7)));
				tmpList.set(8, JPCFomatString.formatNumber(tmpList.get(8)));
				
				// ファイルを出力する
				outputData(tmpList);
			
				tmpKey = workKey;
				tmpList.clear();
			
				// 登録データを一時保存
				inputData(inMap);
			}
		}
			
		// 最終行の場合
		if (commonItem.isEndRecordFlg())
		{
			// 出力されていないデータがある場合、出力する
			if (!tmpList.isEmpty())
			{
				tmpList.set(7, JPCFomatString.formatNumber(tmpList.get(7)));
				tmpList.set(8, JPCFomatString.formatNumber(tmpList.get(8)));

				// ファイルを出力する
				outputData(tmpList);
			}
		}
			
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_M_PRC_KMK_CS_CHGE.close();
		db_AC_M_FILE_OPUT_CTRL.close();
		db_KK_T_KCN_RNK_KEI_INF.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		// ファイルインスタンスがNULLでない場合
		if(null != this.outFileObj)
		{
			// ファイルクローズ
			JCCBatCommon.closeBusinessFileUtil(this.outFileObj);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(AJ_SELECT_003)で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 executeCH_M_PRC_KMK_CS_CHGE_AJ_SELECT_003(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());
		paramList.setValue(param[6].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_AJ_SELECT_003);
	}
	
	/**
	 * SQLKEY(AC_SELECT_003)で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_003(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_AC_M_FILE_OPUT_CTRL.selectBySqlDefine(paramList, AC_M_FILE_OPUT_CTRL_AC_SELECT_003);
	}
	
	/**
	 * 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 executeKK_T_KCN_RNK_KEI_INF_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_KCN_RNK_KEI_INF.selectBySqlDefine(paramList, KK_T_KCN_RNK_KEI_INF_AC_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/
	
	
	
	/**
	 * ヘッダー1の情報出力を行います。
	 * 
	 * @throws Exception
	 */
	private void outputHeader1() throws Exception
	{
		// ヘッダレコードを出力する
		ArrayList<String> header = new ArrayList<String>();
		
		header.add("お客さま情報");
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);
		header.add("ＯＰＴＡＧＥからの請求分");
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);
		header.add(JACStrConst.KARA_MOJI);

		// ファイル出力処理を行います
		outputData(header);
	}
	
	/**
	 * ヘッダー2の情報出力を行います。
	 * 
	 * @throws Exception
	 */
	private void outputHeader2() throws Exception
	{
		// ヘッダレコードを出力する
		ArrayList<String> header = new ArrayList<String>();
		
		header.add("お客さまＩＤ");
		header.add("ＫＣＮ番号");
		header.add("ｻｰﾋﾞｽ開始日");
		header.add("課金開始日");
		header.add("ｻｰﾋﾞｽ終了日");
		header.add("課金対象");
		header.add("契約区分");
		header.add("役務工事費");
		header.add("端末利用料");
		header.add("光工事費");
		header.add("古月調整");
		header.add("備考");
		
		// // ファイル出力処理を行います
		outputData(header);
	}
	
	/**
	 * 出力用データを一時リストに登録します
	 * @param inMap 入力データ
	 * @throws Exception
	 */
	private void inputData(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 料金
		BigDecimal prc = inMap.getBigDecimal(JBSbatACIFM105.PRC);
	
		// 料金が未設定の場合
		if(prc == null)
		{
			// 0円を設定する
			prc = BigDecimal.ZERO;
		}
		
		// 料金項目コード
		String prcKmkCd = inMap.getString(JBSbatACIFM105.PRC_KMK_CD);
		
		// KCN事業者間精算明細表出力料金項目コードマップより設定先を取得
		String sidePOsition = this.kcnOputPrcKmkCdMap.get(prcKmkCd);
		
		// データを一時リストに保存する
		// 一時リストが空（同キーの1件目）の場合は全件追加する
		if (tmpList.isEmpty())
		{
			// お客様ID
			tmpList.add(inMap.getString(JBSbatACIFM105.SVC_NO));
			
			// KCN連携契約情報検索
			String[] param = { inMap.getString(JBSbatACIFM105.SVC_NO) };
			executeKK_T_KCN_RNK_KEI_INF_AC_SELECT_001(param);
			JBSbatCommonDBInterface retMap = db_KK_T_KCN_RNK_KEI_INF.selectNext();
			
			// KCN番号
			String kcnNo = JACStrConst.KARA_MOJI;
			
			// KCN契約コード
			String kcnKeiNo = JACStrConst.KARA_MOJI;

			if(retMap != null)
			{
				kcnNo = retMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.KCN_NO);
				kcnKeiNo = retMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.KCN_KEI_CD);
			}
			
			if(JACStrConst.KARA_MOJI.equals(kcnNo) || kcnNo == null)
			{
				// 空文字を設定する
				kcnNo = JACStrConst.KARA_MOJI;
			}
			
			
			if(JACStrConst.KARA_MOJI.equals(kcnKeiNo) || kcnKeiNo == null)
			{
				// 空文字を設定する
				kcnKeiNo = JACStrConst.KARA_MOJI;
			}
			
			// KCN番号
			tmpList.add(kcnNo);
			
			// サービス開始日
			tmpList.add(JPCUtilCommon.formatDate(inMap.getString(JBSbatACIFM105.SVC_STAYMD)));
			
			// 課金開始日
			tmpList.add(JPCUtilCommon.formatDate(inMap.getString(JBSbatACIFM105.FIRST_CHRG_STAYMD)));
			
			// サービス解約日
			String svcDslYmd = JPCUtilCommon.formatDate(inMap.getString(JBSbatACIFM105.SVC_DSL_YMD));
			
			// サービス解約日が未設定の場合
			if(JACStrConst.KARA_MOJI.equals(svcDslYmd) || svcDslYmd == null)
			{
				// サービス終了日付最大値を設定
				svcDslYmd = SVC_END_MAX_DATE;
			}
			
			// サービス終了日
			tmpList.add(JPCUtilCommon.formatDate(svcDslYmd));
			
			// 課金対象
			tmpList.add(CHRG_TRG);
			
			// 契約区分
			tmpList.add(kcnKeiNo);
			
			// 役務工事費
			if (SIDE_POSITION_1.equals(sidePOsition))
			{
				tmpList.add(prc.toString());
				tmpList.add(SET_MI_PRC);
			}
			// 端末利用料
			else if (SIDE_POSITION_3.equals(sidePOsition))
			{
				tmpList.add(SET_MI_PRC);
				tmpList.add(prc.toString());
			}
			// 上記以外の場合
			else
			{
				tmpList.add(SET_MI_PRC);
				tmpList.add(SET_MI_PRC);
			}
			
			// 光工事費
			tmpList.add(SET_MI_PRC);
			
			// 古月調整
			tmpList.add(SET_MI_PRC);
			
			// 備考
			tmpList.add(JACStrConst.KARA_MOJI);
		}
		// 2件目以降の場合は料金項目のみ設定する
		else
		{
			// 合計金額
			BigDecimal work = BigDecimal.ZERO;

			// 役務工事費
			if (SIDE_POSITION_1.equals(sidePOsition))
			{
				work = new BigDecimal(tmpList.get(7));
				work = work.add(prc);
				
				tmpList.set(7, work.toString());
			}
			// 端末利用料
			else if (SIDE_POSITION_3.equals(sidePOsition))
			{
				work = new BigDecimal(tmpList.get(8));
				work = work.add(prc);
				
				tmpList.set(8, work.toString());
			}
		}
	}
	
	/**
	 * 請求年月を取得します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void getSikyYm() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getSikyYm]");
		
		JACbatSchdlUtil su = new JACbatSchdlUtil(commonItem);
		try
		{
			// 請求年月取得
			this.sikyYm = su.getBillDate(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getSikyYm][sikyYm=" + this.sikyYm + "]");
			
		}
		finally
		{
			su.close();
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getSikyYm]");
		return;
	}
	
	/**
	 * ファイル出力を実行します。
	 * @param output 出力データ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void outputData(ArrayList output) throws Exception
	{
		// 出力する項目をダブルクォートで囲む
		output = this.quoteList(output, JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE);
		
		// ファイル出力を行う
		JCCBatCommon.printBusinessFileUtil(this.outFileObj, output);
	}
	
	
	/**
	 * KCN事業者間精算明細表出力料金項目コードマップ設定処理
	 * @param  fileId   ファイルID
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setKcnOputPrcKmkCdMap(String fileId) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setKcnOputPrcKmkCdMap]");
		
		kcnOputPrcKmkCdMap = new HashMap<String, String>();
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(JACStrConst.SYS_CD_AJ);			// システムコード
		paramList.setValue(fileId);							// ファイルID
		paramList.setValue(JACStrConst.OUTDATASKBT_DTL);	// 出力データ識別コード
		paramList.setValue(super.opeDate);					// バッチ運用日
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setKcnOputPrcKmkCdMap][paramList=" + paramList.getList().toString() + "]");

		// SQLを実行
		executeAC_M_FILE_OPUT_CTRL_AC_SELECT_003(paramList.getList().toArray());
		
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_AC_M_FILE_OPUT_CTRL.selectNext();
		
		while(dbMap != null)
		{
			// 料金項目コード
			String prcKmkCd = dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.PRC_KMK_CD);
			
			// 横位置
			String sidePosition = dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.SIDE_POSITION);
			
			// KCN事業者間精算明細表出力料金項目コードマップに設定
			kcnOputPrcKmkCdMap.put(prcKmkCd, sidePosition);
			
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setKcnOputPrcKmkCdMap][kcnOputPrcKmkCdMap:Key  =" + prcKmkCd + "]");
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setKcnOputPrcKmkCdMap][kcnOputPrcKmkCdMap:Value=" + sidePosition + "]");

			// 次レコードを取得
			dbMap =  db_AC_M_FILE_OPUT_CTRL.selectNext();
		}

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setKcnOputPrcKmkCdMap]");
	}
	
	/**
	 * 引数で渡されたリストを引数で渡された文字で囲み、
	 * その結果を返却します。
	 * 
	 * @param trgList 対象リスト
	 * @param leftMoji 左囲み文字
	 * @param rightMoji 右囲み文字
	 * @return rtnList 調整後文字列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private ArrayList<String> quoteList(ArrayList<String> trgList, String leftMoji, String rightMoji) throws Exception
	{
		ArrayList<String> rtnList = trgList;

		if (!trgList.isEmpty() && !leftMoji.isEmpty() && !rightMoji.isEmpty())
		{
			int size = trgList.size();

			StringBuffer buf = null;

			for (int i = 0; size > i; i++)
			{
				buf = new StringBuffer();

				buf.append(leftMoji);
				buf.append(trgList.get(i));
				buf.append(rightMoji);

				rtnList.set(i, buf.toString());
			}
		}
		return rtnList;
	}
	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
}
