/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACJsKgtAdjInfSksi
*	ソースファイル名	：JBSbatACJsKgtAdjInfSksi.java
*	作成者				：富士通　
*	作成日				：2011年12月28日
*＜機能概要＞
*　ＫＣＡＴ事業者間精算古月調整情報作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/12/28   富士通		新規作成
*********************************************************************/
package eo.business.service;

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.JBSbatAC_M_PRC_SVC_KANRI;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_OPUT_NM;
import eo.business.util.table.JBSbatCH_T_SEIKY_UCWK;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACJsKgtAdjInfSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金サービス管理)*/
	private static final String D_TBL_NAME_AC_M_PRC_SVC_KANRI = "AC_M_PRC_SVC_KANRI";

	/** テーブル(ファイル出力制御)*/
	private static final String D_TBL_NAME_AC_M_FILE_OPUT_CTRL = "AC_M_FILE_OPUT_CTRL";

	/** テーブル(料金項目出力名称)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_OPUT_NM = "CH_M_PRC_KMK_OPUT_NM";

	/** テーブル(請求)*/
	private static final String D_TBL_NAME_CH_T_SEIKY = "CH_T_SEIKY";

	/** SQL定義キー(AC_SELECT_003)*/
	private static final String AC_M_PRC_SVC_KANRI_AC_SELECT_003 = "AC_SELECT_003";

	/** SQL定義キー(AC_SELECT_004)*/
	private static final String AC_M_FILE_OPUT_CTRL_AC_SELECT_004 = "AC_SELECT_004";

	/** SQL定義キー(AC_SELECT_007)*/
	private static final String CH_M_PRC_KMK_OPUT_NM_AC_SELECT_007 = "AC_SELECT_007";

	/** SQL定義キー(AC_SELECT_008)*/
	private static final String CH_T_SEIKY_AC_SELECT_008 = "AC_SELECT_008";

	/** テーブルアクセスクラス(料金サービス管理)*/
	private JBSbatSQLAccess db_AC_M_PRC_SVC_KANRI = null;

	/** テーブルアクセスクラス(ファイル出力制御)*/
	private JBSbatSQLAccess db_AC_M_FILE_OPUT_CTRL = null;

	/** テーブルアクセスクラス(料金項目出力名称)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_OPUT_NM = null;

	/** テーブルアクセスクラス(請求)*/
	private JBSbatSQLAccess db_CH_T_SEIKY = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** ログ出力設定値 */
	private static final String MSG1 = "サービス番号、請求年月、料金コースコード、料金サービスコード";
	
	/** 退避．古月調整変更前後料金取得*/
	private String tihKgtAdjzengoPrcStk = null;

	/** 退避．料金コース名マップ*/
	private HashMap<String, String> tihSvcKnrMap = null;
	
	/** 退避．料金サービス名マップ*/
	private HashMap<String, String> tihPrcKmkMap = null;
	
	/** 退避．ヘッダ情報リスト１*/
	private ArrayList<String> tihHdInfoList_1 = null;
	
	/** 退避．ヘッダ情報リスト２*/
	private ArrayList<String> tihHdInfoList_2 = null;
	
	/** 退避．ヘッダ情報リスト３*/
	private ArrayList<String> tihHdInfoList_3 = null;
	
	/** 退避．明細情報リスト１*/
	private ArrayList<String> tihDtlInfoList_1 = null;
	
	/** 退避．明細情報リスト２*/
	private ArrayList<String> tihDtlInfoList_2 = null;
	
	/** 退避．明細情報リスト３*/
	private ArrayList<String> tihDtlInfoList_3 = null;
	
	/** 請求年月 */
	private String sikyYm = JACStrConst.KARA_MOJI;
	
	/** ファイル名（フルパス） */
	private String fileNm = JACStrConst.KARA_MOJI;
	
	/** ファイルインスタンス */
	private JBSbatBusinessFileUtil outFileObj = null;
	
	/** 出力件数 */
	private int 	outputCnt 	= 0;
	
	/** 調整前金額 */
	private String befAdjPrc 	= "0";
	
	/** 調整後金額 */
	private String aftAdjPrc 	= "0";
	
	/** 調整金額 */
	private String adjPrc 		= "0";
	
	/** 料金項目コード(前) */
	private String befPrcKmkCd = null;
	
	/** 料金項目コード(後) */
	private String aftPrcKmkCd = null;
	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_M_PRC_SVC_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_PRC_SVC_KANRI);
		db_AC_M_FILE_OPUT_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_FILE_OPUT_CTRL);
		db_CH_M_PRC_KMK_OPUT_NM = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_OPUT_NM);
		db_CH_T_SEIKY = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SEIKY);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		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);
		
		// パラメータ取得部品(業務パラメータ)を使用し、以下を取得後、「古月調整変更前後料金取得」に保持する。
		tihKgtAdjzengoPrcStk = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_KGT_ZGSTK);
		// パラメータ取得部品(業務パラメータ)を使用し、以下を取得後、「KCAT事業者間精算古月調整情報_ファイルID」に保持する。
		String kcatKgtAdjFid = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_AC_KCAT_KGT_ADJ_FID);
		
		// パラメータ取得部品のクローズ処理を行う。（パラメータ取得部品．クローズ使用）
		paramUtil.close();
		
		// 料金コース名の抽出
		setSvcKnrMap();
		
		// 料金サービス名の抽出
		setPrcKmkMap();
		
		// 請求年月を取得します。
		getSikyYm();
		
		// 外部パラメータを分割します。
		String[] freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItems=" + freeItems[0] + ", " + freeItems[1] + "]");
		
		// ファイル生成します。
		// （引数：バッチ共通パラメータ, ファイルID, ファイル分割有無, ファイル連番, 請求年月, 自由設定, 文字コード, 変換前改行コード）
		ArrayList<Object> fileInf = JACBatCommon.geneFile(commonItem,
														kcatKgtAdjFid,
														freeItems[0],
														freeItems[1],
														this.sikyYm,
														JACStrConst.KARA_MOJI,
														JACStrConst.KARA_MOJI,
														JACStrConst.KARA_MOJI,
														JACStrConst.LINE_CRLF);
		
		this.fileNm 		= (String)fileInf.get(0);					// ファイル名（フルパス）
		this.outFileObj 	= (JBSbatBusinessFileUtil)fileInf.get(2);	// ファイルインスタンス
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][fileNm=" + this.fileNm + "]");
		
		
		// ヘッダ情報取得
		setFileOputCtrlHeaderList(kcatKgtAdjFid);
		
		// 明細情報取得
		setFileOputCtrlDetailList(kcatKgtAdjFid);
		
		// ファイル出力を行う
		outputRecord(this.tihHdInfoList_1);
		outputRecord(this.tihHdInfoList_2);
		outputRecord(this.tihHdInfoList_3);

		// ログ出力
		String[] outCntMsg = {JACStrConst.LOG_MSG_INITIAL, String.valueOf(this.outputCnt)};
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0560AI, outCntMsg);

		this.outputCnt = 0;
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * サービス管理マスタ検索処理 <br>
	 * 検索結果は、HashMap（tihSvcKnrMap）へ設定する。 <br>
	 * @throws Exception
	 */
	private void setSvcKnrMap() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setSvcKnrMap]");
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		dbList.setValue(super.systemCode);	// システムコード
		dbList.setValue(super.opeDate); 	// 料金サービス管理適用開始年月日
		dbList.setValue(super.opeDate); 	// 料金サービス管理適用終了年月日
		dbList.setValue(super.opeDate); 	// 予約適用年月日

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setSvcKnrMap][dbList=" + dbList.getList().toString() + "]") ;
		// SELECT文発行
		executeAC_M_PRC_SVC_KANRI_AC_SELECT_003(dbList.getList().toArray());

		JBSbatCommonDBInterface dbMap = db_AC_M_PRC_SVC_KANRI.selectNext();

		tihSvcKnrMap = new HashMap<String, String>();
		// 取得情報が存在する間繰り返す
		while (dbMap != null)
		{
			// 料金コースコード + 料金サービスコード
			String keyBuf = makeStr(dbMap.getString(JBSbatAC_M_PRC_SVC_KANRI.PCRS_CD),
									dbMap.getString(JBSbatAC_M_PRC_SVC_KANRI.PRC_SVC_CD));

			// キー :料金コースコード、料金サービスコード
			// 値　 :料金サービス略称
			tihSvcKnrMap.put(keyBuf, dbMap.getString(JBSbatAC_M_PRC_SVC_KANRI.PRC_SVC_ALI));

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
					"【サービス管理】AC_SELECT_003：" + "　結果：" + dbMap.getList().toString());
			// 次レコード取得
			dbMap = db_AC_M_PRC_SVC_KANRI.selectNext();
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setSvcKnrMap][tihSvcKnrMap=" + tihSvcKnrMap.toString() + "]") ;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setSvcKnrMap]");

	}
	
	/**
	 * 料金項目出力名称マスタ検索処理 <br>
	 * 検索結果は、HashMap（tihPrcKmkMap）へ設定する。 <br>
	 * @throws Exception
	 */
	private void setPrcKmkMap() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setPrcKmkMap]");
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		dbList.setValue(JACStrConst.PRC_KMK_NM_SBT_CD_JGSYA_KMK_NM);// 料金項目名称種別コード
		dbList.setValue(super.opeDate); 							// 料金項目出力名称適用開始年月日
		dbList.setValue(super.opeDate);								// 料金項目出力名称適用終了年月日
		dbList.setValue(super.opeDate); 							// 予約適用年月日

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPrcKmkMap][dbList=" + dbList.getList().toString() + "]") ;
		// SELECT文発行
		executeCH_M_PRC_KMK_OPUT_NM_AC_SELECT_007(dbList.getList().toArray());

		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_OPUT_NM.selectNext();

		tihPrcKmkMap = new HashMap<String, String>();
		// 取得情報が存在する間繰り返す
		while (dbMap != null)
		{
			// キー :料金項目コード
			tihPrcKmkMap.put(dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_CD), dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_NM));

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
					"【料金項目出力名称】AC_SELECT_007：" + "　結果：" + dbMap.getMap().toString());

			// 次レコード取得
			dbMap = db_CH_M_PRC_KMK_OPUT_NM.selectNext();
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setPrcKmkMap][tihPrcKmkMap=" + tihPrcKmkMap.toString() + "]") ;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setPrcKmkMap]");
	}
	
	/**
	 * ファイル出力制御マスタ検索処理（ヘッダ） <br>
	 * 検索結果は、ArrayList（tihHeaderInfoList）へ設定する。 <br>
	 * @param kcatKgtAdjFid ファイルID
	 * @throws Exception
	 */
	private void setFileOputCtrlHeaderList(String kcatKgtAdjFid) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setFileOputCtrlHeaderList]");
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		dbList.setValue(super.systemCode);							// システムコード
		dbList.setValue(kcatKgtAdjFid); 							// ファイルID
		dbList.setValue(JACStrConst.OUTDATASKBT_HEADER);			// 出力データ識別コード
		dbList.setValue(super.opeDate); 							// ファイル出力制御適用開始年月日
		dbList.setValue(super.opeDate); 							// ファイル出力制御適用終了年月日
		dbList.setValue(super.opeDate);								// 予約適用年月日

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setFileOputCtrlHeaderList][dbList=" + dbList.getList().toString() + "]") ;
		// SELECT文発行
		executeAC_M_FILE_OPUT_CTRL_AC_SELECT_004(dbList.getList().toArray());

		JBSbatCommonDBInterface dbMap = db_AC_M_FILE_OPUT_CTRL.selectNext();

		if(dbMap == null)
		{
			String[] msgParam = new String[]{JBSbatAC_M_FILE_OPUT_CTRL.TABLE_NAME, dbList.getList().toString()};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0250CE, msgParam);
		}
		
		// リストを初期化
		this.tihHdInfoList_1 = new ArrayList<String>();
		this.tihHdInfoList_2 = new ArrayList<String>();
		this.tihHdInfoList_3 = new ArrayList<String>();
		// 精算年月取得用
		int lengthCnt_1 = 1;
		int lengthCnt_2 = 1;
		int lengthCnt_3 = 1;
		while (dbMap != null)
		{
			// 取得情報の縦位置が２になるまで間繰り返す
			if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_1.equals(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION)))
			{
				if(lengthCnt_1 == 3)
				{
					// リストに設定
					this.tihHdInfoList_1.add(this.sikyYm);
				}
				else
				{
					// リストに設定
					this.tihHdInfoList_1.add(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));
				}
				lengthCnt_1++;
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"【ファイル出力制御マスタ】AC_SELECT_004：" + "　結果（ヘッダ１）：" + dbMap.getList().toString());
			}
			else if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_2.equals(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION)))
			{
				if(lengthCnt_2 == 3)
				{
					// リストに設定
					this.tihHdInfoList_2.add(this.sikyYm);
				}
				else
				{
					// リストに設定
					this.tihHdInfoList_2.add(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));
				}
				lengthCnt_2++;
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"【ファイル出力制御マスタ】AC_SELECT_004：" + "　結果（ヘッダ２）：" + dbMap.getList().toString());
			}
			else if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_3.equals(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION)))
			{
				if(lengthCnt_3 == 3)
				{
					// リストに設定
					this.tihHdInfoList_3.add(this.sikyYm);
				}
				else
				{
					// リストに設定
					this.tihHdInfoList_3.add(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));
				}
				lengthCnt_3++;
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"【ファイル出力制御マスタ】AC_SELECT_004：" + "　結果（ヘッダ３）：" + dbMap.getList().toString());
			}
			// 次レコード取得
			dbMap = db_AC_M_FILE_OPUT_CTRL.selectNext();
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint,
				"[E][setFileOputCtrlHeaderList][tihHdInfoList_1=" + this.tihHdInfoList_1.toString() + "]") ;
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint,
				"[E][setFileOputCtrlHeaderList][tihHdInfoList_2=" + this.tihHdInfoList_2.toString() + "]") ;
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint,
				"[E][setFileOputCtrlHeaderList][tihHdInfoList_3=" + this.tihHdInfoList_3.toString() + "]") ;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setFileOputCtrlHeaderList]");
	}
	
	/**
	 * ファイル出力制御マスタ検索処理（明細） <br>
	 * 検索結果は、ArrayList（tihDetailInfoList）へ設定する。 <br>
	 * @param kcatKgtAdjFid ファイルID
	 * @throws Exception
	 */
	private void setFileOputCtrlDetailList(String kcatKgtAdjFid) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setFileOputCtrlDetailList]");
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		dbList.setValue(super.systemCode);							// システムコード
		dbList.setValue(kcatKgtAdjFid); 							// ファイルID
		dbList.setValue(JACStrConst.OUTDATASKBT_DTL);				// 出力データ識別コード
		dbList.setValue(super.opeDate); 							// ファイル出力制御適用開始年月日
		dbList.setValue(super.opeDate); 							// ファイル出力制御適用終了年月日
		dbList.setValue(super.opeDate);								// 予約適用年月日

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setFileOputCtrlDetailList][dbList=" + dbList.getList().toString() + "]") ;
		// SELECT文発行
		executeAC_M_FILE_OPUT_CTRL_AC_SELECT_004(dbList.getList().toArray());

		JBSbatCommonDBInterface dbMap = db_AC_M_FILE_OPUT_CTRL.selectNext();

		if(dbMap == null)
		{
			String[] msgParam = new String[]{JBSbatAC_M_FILE_OPUT_CTRL.TABLE_NAME, dbList.getList().toString()};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0250CE, msgParam);
		}
		
		// リストを初期化
		this.tihDtlInfoList_1 = new ArrayList<String>();
		this.tihDtlInfoList_2 = new ArrayList<String>();
		this.tihDtlInfoList_3 = new ArrayList<String>();

		while (dbMap != null)
		{
			// 取得情報の縦位置が２になるまで間繰り返す
			if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_1.equals(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION)))
			{
				// リストに設定
				this.tihDtlInfoList_1.add(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"【ファイル出力制御マスタ】AC_SELECT_004：" + "　結果（明細１）：" + dbMap.getList().toString());
			}
			else if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_2.equals(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION)))
			{
				// リストに設定
				this.tihDtlInfoList_2.add(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"【ファイル出力制御マスタ】AC_SELECT_004：" + "　結果（明細２）：" + dbMap.getList().toString());
			}
			else if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_3.equals(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.LENGTH_POSITION)))
			{
				// リストに設定
				this.tihDtlInfoList_3.add(dbMap.getString(JBSbatAC_M_FILE_OPUT_CTRL.OUTPUT_KMK));
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"【ファイル出力制御マスタ】AC_SELECT_004：" + "　結果（明細３）：" + dbMap.getList().toString());
			}
			// 次レコード取得
			dbMap = db_AC_M_FILE_OPUT_CTRL.selectNext();
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint,
				"[E][setFileOputCtrlDetailList][tihDtlInfoList_1=" + this.tihDtlInfoList_1.toString() + "]") ;
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint,
				"[E][setFileOputCtrlDetailList][tihDtlInfoList_2=" + this.tihDtlInfoList_2.toString() + "]") ;
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint,
				"[E][setFileOputCtrlDetailList][tihDtlInfoList_3=" + this.tihDtlInfoList_3.toString() + "]") ;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setFileOputCtrlDetailList]");
	}
	
	/**
	 * 請求年月を取得します。
	 * @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  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;
		
		// ＫＣＡＴ事業者間精算古月調整情報作成（明細）
		// 調整前後料金を設定
		setSeikyInfo(inMap);
		
		// 料金コース名の取得
		String pcrsNm = null;
		// 入力．料金コースコード＋入力．料金サービスコードをキー
		String pcrsNmKey = makeStr(inMap.getString(JBSbatACIFM105.PCRS_CD), inMap.getString(JBSbatACIFM105.PRC_SVC_CD));
		if(this.tihSvcKnrMap.containsKey(pcrsNmKey))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]料金コース名・該当データありの場合]");
			pcrsNm = this.tihSvcKnrMap.get(pcrsNmKey).toString();
		}
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][料金コース名・該当データなしの場合]");
			pcrsNm = JACStrConst.SPACE_1;
		}
		
		// 料金サービス名の取得
		String prcSvcNm = null;
		// 料金項目コード(後)に該当するデータがある場合
		if(this.tihPrcKmkMap.containsKey(this.aftPrcKmkCd))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][料金サービス名・該当データありの場合]");
			prcSvcNm = this.tihPrcKmkMap.get(this.aftPrcKmkCd).toString();
		}
		// 料金項目コード(前)に該当するデータがある場合
		else if(this.tihPrcKmkMap.containsKey(this.befPrcKmkCd))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][料金サービス名・該当データありの場合]");
			prcSvcNm = this.tihPrcKmkMap.get(this.befPrcKmkCd).toString();
		}
		// 該当データがない場合
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][料金サービス名・該当データなしの場合]");
			prcSvcNm = JACStrConst.SPACE_1;
		}
		
		// ＫＣＡＴ事業者間精算古月調整情報（明細）を作成
		makeOutputDetail(inMap, this.tihDtlInfoList_1, pcrsNm, prcSvcNm);	// 明細情報リスト１
		makeOutputDetail(inMap, this.tihDtlInfoList_2, pcrsNm, prcSvcNm);	// 明細情報リスト２
		makeOutputDetail(inMap, this.tihDtlInfoList_3, pcrsNm, prcSvcNm);	// 明細情報リスト３
		
		// 調整前金額・調整後金額の値をクリア
		clearAdjPrc();
		
		// 入力情報 ＝ NULL（最終レコード）の場合
		if(super.commonItem.isEndRecordFlg())
		{
			String[] outCntMsg = {JACStrConst.LOG_MSG_EXECUTE, String.valueOf(this.outputCnt)};
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0560AI, outCntMsg);
		}
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 調整前金額・調整後金額の値をクリア
	 */
	private void clearAdjPrc() 
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][clearAdjPrc]");
		// 調整前金額の値をクリア
		this.befAdjPrc = "0";
		// 調整後金額の値をクリア
		this.aftAdjPrc = "0";
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][clearAdjPrc]");		
	}

	/**
	 * 明細情報を作成します
	 * @param  inMap        入力電文
	 * @param  list         明細情報リスト
	 * @param  pcrsNm       料金コース名
	 * @param  prcSvcNm     料金サービス名
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private void makeOutputDetail(JBSbatServiceInterfaceMap inMap, ArrayList<String> list, String pcrsNm, String prcSvcNm) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputDetail]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputDetail][inMap=" + inMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputDetail][list=" + list.toString() + "]");
		

		ArrayList<String> outPutList = new ArrayList<String>();
		// 帳票区分	
		outPutList.add(list.get(0));
		// レコード区分	
		outPutList.add(list.get(1));
		// 精算年月	
		outPutList.add(inMap.getString(JBSbatACIFM105.SEIKY_YM));
		// サービス契約番号	
		outPutList.add(inMap.getString(JBSbatACIFM105.SVC_NO));
		// 請求先番号	
		outPutList.add(inMap.getString(JBSbatACIFM105.SEIKY_KEI_NO));
		// 調整対象年月	
		outPutList.add(inMap.getString(JBSbatACIFM105.SEIKY_YM));
		// 調整日	
		outPutList.add(inMap.getString(JBSbatACIFM105.USE_STAYMD));
		// 料金コースコード	
		outPutList.add(inMap.getString(JBSbatACIFM105.PCRS_CD));
		// 料金コース名	
		outPutList.add(pcrsNm);
		// 料金サービスコード	
		outPutList.add(inMap.getString(JBSbatACIFM105.PRC_SVC_CD));
		// 料金サービス名	
		outPutList.add(prcSvcNm);
		// 縦位置	
		outPutList.add(list.get(11));
		// 横位置	
		outPutList.add(list.get(12));
		// 出力値
		if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_1.equals(list.get(12)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputDetail][明細情報リスト．横位置 = 13 の値が 1 の場合]");
			outPutList.add(this.befAdjPrc);
		}
		else if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_2.equals(list.get(12)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputDetail][明細情報リスト．横位置 = 13 の値が 2 の場合]");
			outPutList.add(this.aftAdjPrc);
		}
		else if(JACStrConst.OUTDATASKBT_LENGTH_POSITION_3.equals(list.get(12)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputDetail][明細情報リスト．横位置 = 13 の値が 3 の場合]");
			outPutList.add(this.adjPrc);
		}
		
		outputRecord(outPutList);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputDetail][outputItem = " + outPutList.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputDetail]");
	}
	
	/**
	 * 請求検索処理 <br>
	 * 検索結果を返却する。 <br>
	 * @param  inMap        入力電文
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private void setSeikyInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getSeikyInfo]");
		
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();

		dbList.setValue(super.systemCode);						// システムコード
		dbList.setValue(tihKgtAdjzengoPrcStk); 					// 業務機能識別コード
		dbList.setValue(JACStrConst.CHSHT_CHG_CD_2);			// 抽出変換コード
		dbList.setValue(super.opeDate); 						// 料金項目抽出変換適用開始年月日
		dbList.setValue(super.opeDate); 						// 料金項目抽出変換適用終了年月日
		dbList.setValue(super.opeDate);							// 予約適用年月日
		dbList.setValue(JACStrConst.SIKYSHBTS_TEIGK_SEIKY);		// 請求種別コード
		dbList.setValue(inMap.get(JBSbatACIFM105.SEIKY_YM)); 	// 請求年月
		dbList.setValue(inMap.get(JBSbatACIFM105.SVC_NO));		// サービス契約番号
		dbList.setValue(inMap.get(JBSbatACIFM105.PCRS_CD)); 	// 料金コースコード

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setSeikyInfo][dbList=" + dbList.getList().toString() + "]") ;
		// SELECT文発行
		executeCH_T_SEIKY_AC_SELECT_008(dbList.getList().toArray());

		JBSbatCommonDBInterface dbMap = db_CH_T_SEIKY.selectNext();

		if(dbMap == null)
		{
			String zenComma = "、"; // 全角カンマ
			StringBuffer msg2 = new StringBuffer();
			msg2.append(inMap.getString(JBSbatACIFM105.SVC_NO)); // サービス番号
			msg2.append(zenComma);
			msg2.append(inMap.getString(JBSbatACIFM105.SEIKY_YM)); // 請求年月
			msg2.append(zenComma);
			msg2.append(inMap.getString(JBSbatACIFM105.PCRS_CD)); // 料金コースコード
			msg2.append(zenComma);
			msg2.append(inMap.getString(JBSbatACIFM105.PRC_SVC_CD)); // 料金サービスコード
			
			// メッセージ出力を行う
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0810AW,
			new String[] {MSG1, msg2.toString()});
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setSeikyInfo][該当データなしの場合]");
		}
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setSeikyInfo][該当データありの場合]");
			// 取得件数分処理を継続
			while(dbMap != null)
			{
				// 調整前金額と調整後金額を設定
				setAdjPrc(dbMap);
				dbMap = db_CH_T_SEIKY.selectNext();
			}
			// 調整金額に入力.料金を設定
			this.adjPrc = inMap.getBigDecimal(JBSbatACIFM105.PRC).toString();
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setSeikyInfo]");
	}
	
	/**
	 * 調整金額設定
	 * @param  dbMap     DB取得結果マップ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setAdjPrc(JBSbatCommonDBInterface dbMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setAdjPrc]");
		// 料金項目コード下2桁
		String prcKmkCdLst2 = dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD).substring(9, 11);
		// 取得した料金項目コードの下2桁が"20" "30" "41"のいずれかの場合
		if(JACStrConst.PRC_KMK_CD_BEFADJ.equals(prcKmkCdLst2)
			|| JACStrConst.PRC_KMK_CD_BEFCHG.equals(prcKmkCdLst2)
			|| JACStrConst.PRC_KMK_CD_DELSAG.equals(prcKmkCdLst2))
		{
			// 調整前金額に取得結果.料金を設定
			this.befAdjPrc 		= dbMap.getString(JBSbatCH_T_SEIKY_UCWK.AMNT);
			// 料金項目コード(前)に料金項目コードを設定
			this.befPrcKmkCd 	= dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD);
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setAdjPrc][befPrc =" + this.befAdjPrc + "]");		
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setAdjPrc][befPrcKmkCd =" + this.befPrcKmkCd + "]");		
		}
		// 取得した料金項目コードの下2桁が"20" "30" "41"のいずれでもないの場合
		else
		{
			// 調整後金額に取得結果.料金を設定
			this.aftAdjPrc 		= dbMap.getString(JBSbatCH_T_SEIKY_UCWK.AMNT);
			// 料金項目コード(後)に料金項目コードを設定
			this.aftPrcKmkCd 	= dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD);
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setAdjPrc][aftPrc =" + this.aftAdjPrc + "]");		
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setAdjPrc][aftPrcKmkCd =" + this.aftPrcKmkCd + "]");		
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setAdjPrc]");
	}

	/**
	 * 文字を連結します
	 * @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, "[L][makeStr][outputItem = " + strBuf.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}
	
	/**
	 * ファイルを出力します。
	 * @param  dbList 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void outputRecord(ArrayList<String> dbList) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputRecord]");
		
		// ファイル出力を行う
		JCCBatCommon.printBusinessFileUtil(this.outFileObj, dbList);
		
		this.outputCnt++;		// 出力件数カウントアップ
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputRecord]");
	}
	
	
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_M_PRC_SVC_KANRI.close();
		db_AC_M_FILE_OPUT_CTRL.close();
		db_CH_M_PRC_KMK_OPUT_NM.close();
		db_CH_T_SEIKY.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		// ファイルインスタンスがNULLでない場合
		if(null != this.outFileObj)
		{
			// ファイルクローズ
			JCCBatCommon.closeBusinessFileUtil(this.outFileObj);
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(AC_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	料金サービス管理適用開始年月日
	 *		 	料金サービス管理適用終了年月日
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_M_PRC_SVC_KANRI_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_PRC_SVC_KANRI.selectBySqlDefine(paramList, AC_M_PRC_SVC_KANRI_AC_SELECT_003);
	}

	/**
	 * SQLKEY(AC_SELECT_004)で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_004(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_004);
	}

	/**
	 * SQLKEY(AC_SELECT_005)で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_PRC_KMK_OPUT_NM_AC_SELECT_007(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_PRC_KMK_OPUT_NM.selectBySqlDefine(paramList, CH_M_PRC_KMK_OPUT_NM_AC_SELECT_007);
	}

	/**
	 * SQLKEY(AC_SELECT_008)で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_T_SEIKY_AC_SELECT_008(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());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());

		// DBアクセスを実行します
		db_CH_T_SEIKY.selectBySqlDefine(paramList, CH_T_SEIKY_AC_SELECT_008);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
