/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACEoElectPrcInfoTrkm
*	ソースファイル名	：JBSbatACEoElectPrcInfoTrkm.java
*	作成者				：富士通　
*	作成日				：2015年05月25日
*＜機能概要＞
*　ｅｏ電気料金情報取込部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v16.00.00	2015/07/15  FJ)西面		ANK-2480-00-00 新電力対応
*	v16.00.01	2015/07/24	FJ)清原		IT1-2015-0000067 請求時期指定問題対応
**	v16.00.01	2015/07/30  FJ)吉村	    ANK-2480-00-00 新電力対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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.JBSbatACIFM255;
import eo.business.util.file.JBSbatACIFM267;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.framework.application.JBSbatBusinessException;
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.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACEoElectPrcInfoTrkm extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	
	
	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";
	
	/** SQL定義キー(AC_SELECT_005)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_005 = "AC_SELECT_005";
	
//v16.00.01 2015/07/24 Add Start
	/** SQL定義キー(AC_SELECT_006)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_006 = "AC_SELECT_006";
//v16.00.01 2015/07/24 Add End
	
	/** 外部料金取込システム区分 */
	private String outPrcSysDiv = null;

	/** 取込元名称 */
	private String trkmMtName = null;

//v16.00.01 2015/07/24 Add Start
	/** 請求時期指定名 */
	private String seikyJikiSiteiName = null;
//v16.00.01 2015/07/24 Add End
	
	/** 利用終了日 */
	private String useEndDate = null;
	
	/** 出力ファイル定義 */
	private static final String PRM_OTD = "OTD";

	/** 情報付加 */
	private static final String EXT_SEIKY_KEI_NO = "SEIKY_KEI_NO";

//v16.00.01 2015/07/24 Add Start
	/** 請求時期指定 */
	private static final String SEIKY_JIKI_SHITEI = "1";
//v16.00.01 2015/07/24 Add End
	
	/** eo電気外部料金データ */
	private JBSbatBusinessFileUtil eoElectPrcFile = null;

	/** eo電気料金情報（エラーデータ） */
	private JBSbatBusinessFileUtil eoElectPrcErrFile = null;

	/** eo電気料金情報エラー情報（料金計算結果リスト） */
	private JBSbatBusinessFileUtil eoElectPrcErrListFile = null;

	/** 入力チェック済み項目 */
	/** eo電気料金情報（入力チェック済み）.処理識別コード */
	private String tranSkbtCd = null;

	/** eo電気料金情報（入力チェック済み）.サービス契約番号 */
	private String svcKeiNo = null;

	/** eo電気料金情報（入力チェック済み）.供給地点特定番号 */
	private String kyokyuTitenNo = null;
	
	/** eo電気料金情報（入力チェック済み）.料金グループコード */
	private String prcGrpCd = null;

	/** eo電気料金情報（入力チェック済み）.料金コースコード */
	private String pcrsCd = null;

	/** eo電気料金情報（入力チェック済み）.料金サービスコード */
	private String prcSvcCd = null;

	/** eo電気料金情報（入力チェック済み）.料金項目コード */
	private String prcKmkCd = null;

//v16.00.01 2015/07/24 Del Start	
	///** eo電気料金情報（入力チェック済み）.請求時期指定 */
	//private String seikyJikiShitei = null;
//v16.00.01 2015/07/24 Del End

	/** eo電気料金情報（入力チェック済み）.請求年月 */
	private String seikyYm = null;

	/** eo電気料金情報（入力チェック済み）.請求金額 */
	private String seikyAmnt = null;
	
	/** eo電気料金情報（入力チェック済み）.当月電気利用開始年月日 */
	private String useStaYmd = null;
	
	/** eo電気料金情報（入力チェック済み）.当月電気利用終了年月日 */
	private String useEndYmd = null;

	/** フリー項目 */
	private String[] freeItems = null;
	
	/** 課金先.請求契約番号 */
	private String seikyKeiNo = null;

	/** 料金計算当月 */
	private String rknCalTogetu = null;

	/** 未請求一時金エラーコード */
	private String ichjikinErrCd = null;
	
	/** 未請求一時金ありエラー */
	private String ichjikinErrMsg = null;
	
	/** 業務パラメータ保持マップ */
	private Map<String, String> extMap = null;
	
	/** 文字列:01 */
	private static final String STR_01 = "01";
	
	/** 単項目のエラーメッセージマップ（key:単一項目名 value:業務パラメータ管理ID */
	private static HashMap<String, String> messageKeyMap = new HashMap<String, String>();
	static 
	{
		messageKeyMap.put("REC_DIV", JACStrConst.WKPARA_AC_MSG_REC_DIV_ERR);
		messageKeyMap.put("TRAN_SKBT_CD", JACStrConst.WKPARA_AC_MSG_TRN_SKCD_ERR);
		messageKeyMap.put("SVC_KEI_NO", JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR);
		messageKeyMap.put("KYOKYUTITEN_NO", JACStrConst.WKPARA_AC_MSG_KYOKYUTITEN_NO_ERR);
		messageKeyMap.put("PRC_GRP_CD", JACStrConst.WKPARA_AC_MSG_PRGP_CD_ERR);
		messageKeyMap.put("PCRS_CD", JACStrConst.WKPARA_AC_MSG_PCRS_CD_ERR);
		messageKeyMap.put("PRC_SVC_CD", JACStrConst.WKPARA_AC_MSG_PRCSVC_CD_ERR);
		messageKeyMap.put("PRC_KMK_CD", JACStrConst.WKPARA_AC_MSG_PRCKMK_CD_ERR);
		messageKeyMap.put("SEIKY_YM", JACStrConst.WKPARA_AC_MSG_SEIKYYMERR);
		messageKeyMap.put("SEIKY_AMNT", JACStrConst.WKPARA_AC_MSG_SEIKYAMNT_ERR);
		messageKeyMap.put("USE_STAYMD", JACStrConst.WKPARA_AC_MSG_USE_STAYMD_ERR);
		messageKeyMap.put("USE_ENDYMD", JACStrConst.WKPARA_AC_MSG_USE_ENDYMD_ERR);
	}

	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		
		// DBアクセスクラスを生成します
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		
		//エラーハンドリング用に業務パラメータの取得を行う
		this.extMap = getExtMap();
		
		// 外部料金取込システム区分：eo電気料金情報
		outPrcSysDiv = this.extMap.get(JACStrConst.WKPARA_AC_OPS_ELEC_CHRG_INF);
		
		// コード名称管理.コード区分名称
		trkmMtName = getCdNmKanri(outPrcSysDiv, JZM0171Constant.CD00888);
		
//v16.00.01 2015/07/24 Add Start
		// コード名称管理.請求時期指定名
		seikyJikiSiteiName = getSeikyJikiSiteiName(SEIKY_JIKI_SHITEI);
//v16.00.01 2015/07/24 Add End	
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		//未請求一時金ありエラーコード・メッセージ取得
		String[] ichjikinErrCdList = (paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_RSLT_ICJKIN_ERR).split(JACStrConst.COMMA));
		
		// 未請求一時金エラーコード 
		ichjikinErrCd = ichjikinErrCdList[0];
		
		// 未請求一時金ありエラー 
		ichjikinErrMsg = getCdNmKanri(ichjikinErrCd, JZM0171Constant.CD01172);
		paramUtil.close();
		
		// 料金計算日から利用終了日を求める（バッチ運用日、イベントコード"002"）
		JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);
		
		// 請求年月を取得
		String seiYm = schdlUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_PRC_CALC_DAY);
		
		// 請求年月から、利用開始日/利用終了日取得
		String[] startEndYmd = schdlUtil.getUseStrEnd(seiYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
		useEndDate = startEndYmd[1];
		schdlUtil.close();

		// 料金計算当月取得
		rknCalTogetu = seiYm;

		// FREEITEMの取得
		this.freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);
		
		// eo電気外部料金データ
		this.eoElectPrcFile = createFile(freeItems[1], freeItems[0]);
		// eo電気料金情報（エラーデータ）
		this.eoElectPrcErrFile = createFile(freeItems[3], freeItems[2]);
		// eo電気情報エラー情報エラー情報（料金計算結果リスト）
		this.eoElectPrcErrListFile = createFile(freeItems[5], freeItems[4]);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial] 請求年月=" + seiYm);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial] 利用終了日=" + this.useEndDate);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial] 料金計算当月=" + this.rknCalTogetu);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		try
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");

			setCheckedItem(inMap);
			
			// A形式チェック（レコード毎）
			String retStr = isSingleCheckACIFM267_INF1(inMap.getMap());
			if(retStr != null)
			{
				// 単項目チェックエラーは項目名から業パラIDに変換する
				String errMessage = null;
				String errMessageKey = messageKeyMap.get(retStr);
				if (errMessageKey != null)
				{
					errMessage = this.extMap.get(errMessageKey);
				}
				outputeoElectPrcErrFile(errMessage != null ? errMessage : JACStrConst.KARA_MOJI);
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]単項目チェックエラー " + retStr);
				return null;
			}

			// 処理識別コードが0(登録) であることをチェック
			if(!extMap.get(JACStrConst.WKPARA_AC_OPT_ADD).equals(inMap.getString(JBSbatACIFM255.TRAN_SKBT_CD)))
			{
				// 処理識別コードが1(更新) であることをチェック
				if(!extMap.get(JACStrConst.WKPARA_AC_OPT_UPD).equals(inMap.getString(JBSbatACIFM255.TRAN_SKBT_CD))){
					// 処理識別コードエラー
					outputeoElectPrcErrFile(extMap.get(JACStrConst.WKPARA_AC_MSG_TRN_SKCD_ERR));
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]処理識別コードエラー " + inMap.getString(JBSbatACIFM255.TRAN_SKBT_CD));
					return null;
				}
			}

			// サービス契約チェック
			if(checkSvcKei(inMap) == false)
			{
				// 内部でエラーファイルに出力済み
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]サービス契約チェックエラー");
				return null;
			}
			
			// 請求年月チェック
			int diff = JCCBatCommon.subtractMonth(inMap.getString(JBSbatACIFM267.SEIKY_YM) + STR_01, rknCalTogetu + STR_01);
			
			// 料金計算当月を起点とした12ヶ月の範囲であるかチェック
			if (!(0 <= diff && diff <= 11))
			{
				// 請求年月エラー
				outputeoElectPrcErrFile(extMap.get(JACStrConst.WKPARA_AC_MSG_SEIKYYMERR));
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]請求年月エラー " + inMap.getString(JBSbatACIFM255.SEIKY_YM));
				return null;
			}
		
			// D情報付加（レコード毎）
			getAdditionalInfo(inMap);
			
			
			// C課金開始済みチェック（レコード毎）
			if(checkIfChargeStart(inMap))
			{
				outputeoElectPrcErrListFile();
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]課金開始済みチェックエラー");
				return null;
			}
			
			// Eeo電気外部料金データの作成（レコード毎）
			outputeoElectPrcFile();
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
			return null;
		} 
		catch (Exception e)
		{
			// eo電気外部料金データ
			JCCBatCommon.closeBusinessFileUtil(this.eoElectPrcFile);
			// eo電気料金情報（エラーデータ）
			JCCBatCommon.closeBusinessFileUtil(this.eoElectPrcFile);
			// eo電気情報エラー情報エラー情報（料金計算結果リスト）
			JCCBatCommon.closeBusinessFileUtil(this.eoElectPrcFile);

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]例外発生" + e.toString());
			throw e;
		}
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（ｅｏ電気料金情報（ボディ））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-ACIFM267-INF1.REC_DIV			ｅｏ電気料金情報（チェック済）.レコード区分
	 *			 TXT-ACIFM267-INF1.TRAN_SKBT_CD			ｅｏ電気料金情報（チェック済）.処理識別コード
	 *			 TXT-ACIFM267-INF1.SVC_KEI_NO			ｅｏ電気料金情報（チェック済）.サービス契約番号
	 *			 TXT-ACIFM267-INF1.CELLPHONE_NO			ｅｏ電気料金情報（チェック済）.供給地点特定番号
	 *			 TXT-ACIFM267-INF1.CELLPHONE_NO			ｅｏ電気料金情報（チェック済）.供給地点特定番号
	 *			 TXT-ACIFM267-INF1.PRC_GRP_CD			ｅｏ電気料金情報（チェック済）.料金グループコード
	 *			 TXT-ACIFM267-INF1.PCRS_CD			ｅｏ電気料金情報（チェック済）.料金コースコード
	 *			 TXT-ACIFM267-INF1.PRC_SVC_CD			ｅｏ電気料金情報（チェック済）.料金サービスコード
	 *			 TXT-ACIFM267-INF1.PRC_KMK_CD			ｅｏ電気料金情報（チェック済）.料金項目コード
	 *			 TXT-ACIFM267-INF1.PRC_KMK_CD			ｅｏ電気料金情報（チェック済）.料金項目コード
	 *			 TXT-ACIFM267-INF1.PRC_KMK_CD			ｅｏ電気料金情報（チェック済）.料金項目コード
	 *			 TXT-ACIFM267-INF1.SEIKY_JIKI_SHITEI			ｅｏ電気料金情報（チェック済）.請求時期指定
	 *			 TXT-ACIFM267-INF1.SEIKY_YM			ｅｏ電気料金情報（チェック済）.請求年月
	 *			 TXT-ACIFM267-INF1.SEIKY_YM			ｅｏ電気料金情報（チェック済）.請求年月
	 *			 TXT-ACIFM267-INF1.SEIKY_AMNT			ｅｏ電気料金情報（チェック済）.請求金額
	 *			 TXT-ACIFM267-INF1.SEIKY_AMNT			ｅｏ電気料金情報（チェック済）.請求金額
	 *			 TXT-ACIFM267-INF1.SEIKY_AMNT			ｅｏ電気料金情報（チェック済）.請求金額
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private String isSingleCheckACIFM267_INF1(HashMap rsMap)
	{
		
		// 単項目チェックを行います
		String strValue = null;
		
		/** レコード区分項目チェック*/
		strValue = (String)rsMap.get("REC_DIV");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][レコード区分:必須チェックエラー = " + strValue + "]" );
			return new String("REC_DIV");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][レコード区分:桁数チェックエラー = " + strValue + "]" );
			return new String("REC_DIV");
		}
		//属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][レコード区分:属性チェックエラー = " + strValue + "]" );
			return new String("REC_DIV");
		}
		
		/** 処理識別コード項目チェック*/
		strValue = (String)rsMap.get("TRAN_SKBT_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][処理識別コード:必須チェックエラー = " + strValue + "]");
			return new String("TRAN_SKBT_CD");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][処理識別コード:桁数チェックエラー = " + strValue + "]");
			return new String("TRAN_SKBT_CD");
		}
		//属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][処理識別コード:属性チェックエラー = " + strValue + "]" );
			return new String("TRAN_SKBT_CD");
		}
		
		/** サービス契約番号項目チェック*/
		strValue = (String)rsMap.get("SVC_KEI_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][サービス契約番号:必須チェックエラー = " + strValue + "]");
			return new String("SVC_KEI_NO");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "10"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][サービス契約番号:桁数チェックエラー = " + strValue + "]");
			return new String("SVC_KEI_NO");
		}
		//属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][サービス契約番号:属性チェックエラー = " + strValue + "]" );
			return new String("SVC_KEI_NO");
		}

		/** 供給地点特定番号項目チェック*/
		strValue = (String)rsMap.get("KYOKYUTITEN_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][供給地点特定番号:必須チェックエラー = " + strValue + "]" );
			return new String("KYOKYUTITEN_NO");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "22"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][供給地点特定番号:桁数チェックエラー = " + strValue + "]" );
			return new String("KYOKYUTITEN_NO");
		}
		//属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][供給地点特定番号:属性チェックエラー = " + strValue + "]" );
			return new String("KYOKYUTITEN_NO");
		}
		
		/** 料金グループコード項目チェック*/
		strValue = (String)rsMap.get("PRC_GRP_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金グループコード:必須チェックエラー = " + strValue + "]" );
			return new String("PRC_GRP_CD");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "2"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金グループコード:桁数チェックエラー = " + strValue + "]" );
			return new String("PRC_GRP_CD");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金グループコード:属性チェックエラー = " + strValue + "]" );
			return new String("PRC_GRP_CD");
		}
		
		/** 料金コースコード項目チェック*/
		strValue = (String)rsMap.get("PCRS_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金コースコード:必須チェックエラー = " + strValue + "]" );
			return new String("PCRS_CD");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "3"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金コースコード:桁数チェックエラー = " + strValue + "]" );
			return new String("PCRS_CD");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金コースコード:属性チェックエラー = " + strValue + "]" );
			return new String("PCRS_CD");
		}
		
		/** 料金サービスコード項目チェック*/
		strValue = (String)rsMap.get("PRC_SVC_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金サービスコード:必須チェックエラー = " + strValue + "]" );
			return new String("PRC_SVC_CD");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0","12"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金サービスコード:桁数チェックエラー = " + strValue + "]" );
			return new String("PRC_SVC_CD");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金サービスコード:属性チェックエラー = " + strValue + "]" );
			return new String("PRC_SVC_CD");
		}

		/** 料金項目コード項目チェック*/
		strValue = (String)rsMap.get("PRC_KMK_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金項目コード:必須チェックエラー = " + strValue + "]" );
			return new String("PRC_KMK_CD");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "11"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金項目コード:桁数チェックエラー = " + strValue + "]" );
			return new String("PRC_KMK_CD");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][料金項目コード:属性チェックエラー = " + strValue + "]" );
			return new String("PRC_KMK_CD");
		}
		
		/** 請求年月項目チェック*/
		strValue = (String)rsMap.get("SEIKY_YM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][請求年月:必須チェックエラー = " + strValue + "]" );
			return new String("SEIKY_YM");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][請求年月:属性チェックエラー = " + strValue + "]" );
			return new String("SEIKY_YM");
		}
		
		/** 請求金額項目チェック*/
		strValue = (String)rsMap.get("SEIKY_AMNT");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][請求金額:必須チェックエラー = " + strValue + "]" );
			return new String("SEIKY_AMNT");
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "12"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][請求金額:桁数チェックエラー = " + strValue + "]" );
			return new String("SEIKY_AMNT");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"long2"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][請求金額:属性チェックエラー = " + strValue + "]" );
			return new String("SEIKY_AMNT");
		}
		
		/** 当月電気利用開始年月日項目チェック*/
		strValue = (String)rsMap.get("USE_STAYMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][当月電気利用開始年月日:必須チェックエラー = " + strValue + "]" );
			return new String("USE_STAYMD");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][当月電気利用開始年月日:属性チェックエラー = " + strValue + "]" );
			return new String("USE_STAYMD");
		}
		
		/** 当月電気利用終了年月日項目チェック*/
		strValue = (String)rsMap.get("USE_ENDYMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][当月電気利用終了年月日:必須チェックエラー = " + strValue + "]" );
			return new String("USE_ENDYMD");
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckACIFM267_INF1][当月電気利用終了年月日:必須チェックエラー = " + strValue + "]" );
			return new String("USE_ENDYMD");
		}
		
		return null;
	}
	
	/**
	 * 業務パラメータ退避
	 * 
	 * @throws Exception
	 */
	private HashMap<String, String> getExtMap() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getExtMap]");

		//業務パラメータを取得するため、パラメータ取得部品のインスタンスを生成する
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);

		//業務パラメータ管理より取得した、値を設定するためのマップを作成
		HashMap<String, String> extMap = new HashMap<String, String>();
		
		/**単項目チェックに利用するための値を業務パラメータ管理より取得する*/
		//業務パラメータ定義より（処理識別コード：登録）を取得
		String trnSkbtCdAdd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPT_ADD);
		extMap.put(JACStrConst.WKPARA_AC_OPT_ADD, trnSkbtCdAdd);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（処理識別コード：登録）=" + trnSkbtCdAdd + "]");		
		
		//業務パラメータ定義より（処理識別コード：更新）を取得
		String trnSkbtCdUpd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPT_UPD);
		extMap.put(JACStrConst.WKPARA_AC_OPT_UPD, trnSkbtCdUpd);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（処理識別コード：更新）=" + trnSkbtCdUpd + "]");		

		//業務パラメータ定義より（外部料金取込システム区分：eo電気料金情報）を取得
		String outPrcTrkmSysDiveoElec = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPS_ELEC_CHRG_INF);
		extMap.put(JACStrConst.WKPARA_AC_OPS_ELEC_CHRG_INF, outPrcTrkmSysDiveoElec);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（外部料金取込システム区分：eo電気）=" + outPrcTrkmSysDiveoElec + "]");		

		/**単項目チェックエラー 出力用メッセージを業務パラメータ管理より取得*/
		// レコード区分コードエラー
		String acMsgRecDivErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_REC_DIV_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_REC_DIV_ERR, acMsgRecDivErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（レコード区分コードエラー）=" + acMsgRecDivErr + "]");		

		// 処理識別コードエラー
		String acMsgTrnSkbtcdErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_TRN_SKCD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_TRN_SKCD_ERR, acMsgTrnSkbtcdErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（処理識別コードエラー）=" + acMsgTrnSkbtcdErr + "]");		

		// 供給地点特定番号エラー
		String acMsgKyokyuTitenErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_KYOKYUTITEN_NO_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_KYOKYUTITEN_NO_ERR, acMsgKyokyuTitenErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（供給地点特定番号エラー）=" + acMsgKyokyuTitenErr + "]");		

		// 料金グループコードエラー
		String acMsgPrcGrpCdErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_PRGP_CD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_PRGP_CD_ERR, acMsgPrcGrpCdErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（料金グループコードエラー）=" + acMsgPrcGrpCdErr + "]");		
		
		// 料金コースコードエラー
		String acMsgPcrsCdErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_PCRS_CD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_PCRS_CD_ERR, acMsgPcrsCdErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（料金コースコードエラー）=" + acMsgPcrsCdErr + "]");		

		// 料金サービスコードエラー
		String acMsgPrcsvcCeErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_PRCSVC_CD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_PRCSVC_CD_ERR, acMsgPrcsvcCeErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（料金サービスエラー）=" + acMsgPrcsvcCeErr + "]");		
		
		// 料金項目コードエラー
		String acMsgPrcKmkCdErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_PRCKMK_CD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_PRCKMK_CD_ERR, acMsgPrcKmkCdErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（料金項目エラー）=" + acMsgPrcKmkCdErr + "]");		
	
		// 請求年月エラー
		String acMsgSeikyYmErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_SEIKYYMERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_SEIKYYMERR, acMsgSeikyYmErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（請求年月エラー）=" + acMsgSeikyYmErr + "]");		
		
		// 請求金額エラー
		String acMsgSeikyAmntErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_SEIKYAMNT_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_SEIKYAMNT_ERR, acMsgSeikyAmntErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（請求金額エラー）=" + acMsgSeikyAmntErr + "]");		

		// 当月電気利用開始年月日エラー（単項目チェックエラー用）
		String acMsgUseStaErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_USE_STAYMD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_USE_STAYMD_ERR, acMsgUseStaErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][当月電気利用開始年月日（当月電気利用開始年月日エラー）=" + acMsgUseStaErr + "]");		
		
		// 当月電気利用終了年月日エラー（単項目チェックエラー用）
		String acMsgUseEndErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_USE_ENDYMD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_USE_ENDYMD_ERR, acMsgUseEndErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][当月電気利用終了年月日（当月電気利用終了年月日エラー）=" + acMsgUseEndErr + "]");		

		/**関連チェックエラー 出力用メッセージを業務パラメータ管理より取得する*/
		// サービス契約番号未存在エラー
		String acMsgNoSvcNoErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR, acMsgNoSvcNoErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（サービス契約番号未存在エラー）=" + acMsgNoSvcNoErr + "]");		

		// サービス契約契約期間エラー
		String acMsgKeiPrdErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_KEI_PRD_ERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_KEI_PRD_ERR, acMsgKeiPrdErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（契約期間エラー）=" + acMsgKeiPrdErr + "]");		

		
		// 請求契約番号未存在エラー
		String acMsgNoSeikyNoErr = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_MSG_NO_SEIKYNOERR);
		extMap.put(JACStrConst.WKPARA_AC_MSG_NO_SEIKYNOERR, acMsgNoSeikyNoErr);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getExtMap][業務パラメータ定義（請求契約番号未存在エラー）=" + acMsgNoSeikyNoErr + "]");		


		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getExtMap]");
		return extMap;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * コード名称管理テーブルからコード区分名、コード区分略称を取得する
	 * @param cdSbtCd	コード種別コード
	 * @param cdDiv	コード区分
	 * @return	String	コード区分名
	 * @throws Exception
	 */
	private String getCdNmKanri(String cdSbtCd, String cdDiv) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getCdNmKanri]");
		
		executeZM_M_CD_NM_KANRI_AC_SELECT_005(new Object[] {cdDiv, cdSbtCd, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface record = db_ZM_M_CD_NM_KANRI.selectNext();
		if (record != null)	
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getCdNmKanri]");
			return record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
		}
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getCdNmKanri]コード名称管理テーブルに未存在 " + "コード種別コード=" + cdSbtCd + "コード区分=" + cdDiv);
			// コード名称管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatZM_M_CD_NM_KANRI.TABLE_NAME });
		}

	}
	
	/**
	 * 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 executeZM_M_CD_NM_KANRI_AC_SELECT_005(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_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_AC_SELECT_005);
	}

	//v16.00.01 2015/07/24 Add Start
	/**
	 * コード名称管理テーブルからコード区分名を取得する
	 * @param cdSbtCd	コード種別コード
	 * @return	String	コード区分名
	 * @throws Exception
	 */
	private String getSeikyJikiSiteiName(String cdSbtCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getSeikyJikiSiteiName]");
		
		executeZM_M_CD_NM_KANRI_AC_SELECT_006(new Object[] {JZM0171Constant.CD00972, cdSbtCd, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface record = db_ZM_M_CD_NM_KANRI.selectNext();
		if (record != null)	
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getSeikyJikiSiteiName]");
			return record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
		}
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getSeikyJikiSiteiName]コード名称管理テーブルに未存在 " + "コード種別コード=" + cdSbtCd + "コード区分=" + JZM0171Constant.CD00972);
			// コード名称管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatZM_M_CD_NM_KANRI.TABLE_NAME });
		}

	}
	
	/**
	 * SQLKEY(AC_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 *		 	コード区分
	 *		 	コード適用開始年月日
	 *		 	コード適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_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());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_AC_SELECT_006);
	}
//v16.00.01 2015/07/24 Add End
	
	
	/**
	 * ファイル出力
	 * 
	 * @param  filePath  ファイルパス
	 * @param  fileDef   ファイル定義
	 * @return fileUtil  ファイルインスタンス
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatBusinessFileUtil createFile(String filePath, String fileDef) throws Exception 
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createFile]");

		JBSbatOutputFileUtil trailerFile 	= new JBSbatOutputFileUtil(filePath);
		String tempFileDefName 				= JBSbatAplConst.getAplConstValue(PRM_OTD) + fileDef;
		JBSbatDefFileUtil trailerFileDef 	= new JBSbatDefFileUtil(tempFileDefName, trailerFile);
		
//v16.00.01 2015/07/30 Mod Start
//		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(filePath
//																			, JACStrConst.ENCODE_MS932
//																			, JACBatCommon.chgKaigyo(JACStrConst.LINE_LF)
//																			, trailerFileDef.getDelimiter());
		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(filePath
																			, JACStrConst.ENCODE_MS932
																			, JACBatCommon.chgKaigyo(JACStrConst.LINE_CRLF)
																			, trailerFileDef.getDelimiter());
//v16.00.01 2015/07/30 Mod End
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createFile]");
		return fileUtil;
	}
	
	/**
	 * 入力チェック済み項目取込
	 * 
	 * @param inMap
	 * @throws Exception
	 */
	private void setCheckedItem(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setCheckedItem]");
		
		// 処理識別コード
		this.tranSkbtCd = inMap.getString(JBSbatACIFM267.TRAN_SKBT_CD);
		// サービス契約番号
		this.svcKeiNo = inMap.getString(JBSbatACIFM267.SVC_KEI_NO);
		// 供給地点特定番号
		this.kyokyuTitenNo = inMap.getString(JBSbatACIFM267.KYOKYUTITEN_NO);
		// 料金グループコード
		this.prcGrpCd = inMap.getString(JBSbatACIFM267.PRC_GRP_CD);
		// 料金コースコード
		this.pcrsCd = inMap.getString(JBSbatACIFM267.PCRS_CD);
		// 料金サービスコード
		this.prcSvcCd = inMap.getString(JBSbatACIFM267.PRC_SVC_CD);
		// 料金項目コード
		this.prcKmkCd = inMap.getString(JBSbatACIFM267.PRC_KMK_CD);
		// 請求年月
		this.seikyYm = inMap.getString(JBSbatACIFM267.SEIKY_YM);
		// 請求金額
		this.seikyAmnt = inMap.getString(JBSbatACIFM267.SEIKY_AMNT);
		// 当月電気利用開始年月日
		this.useStaYmd = inMap.getString(JBSbatACIFM267.USE_STAYMD);
		// 当月電気利用終了年月日
		this.useEndYmd = inMap.getString(JBSbatACIFM267.USE_ENDYMD);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setCheckedItem]");
	}
	
	/**
	 * eo電気料金情報（エラーデータ）の出力を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputeoElectPrcErrFile(String errMessage) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputeoElectPrcErrFile]");
		
		
		ArrayList<Object> list = new ArrayList<Object>();
		
		list.add(this.trkmMtName);											// コード名称管理.コード区分名称
		list.add(JACStrConst.KARA_MOJI);									// 空文字
		list.add(this.svcKeiNo);											// eo電気料金情報（入力チェック済み）.サービス契約番号
		list.add(this.kyokyuTitenNo);										// eo電気料金情報（入力チェック済み）.供給地点特定番号
		list.add(errMessage != null ? errMessage : JACStrConst.KARA_MOJI);	// エラー内容
		list.add(JACStrConst.KARA_MOJI);									// 空文字
		list.add(JACStrConst.KARA_MOJI);									// 空文字
		list.add(JACStrConst.KARA_MOJI);									// 空文字
		list.add(this.prcKmkCd);											// eo電気料金情報（入力チェック済み）.料金項目コード
		list.add(JACStrConst.KARA_MOJI);									// 空文字
//v16.00.01 2015/07/24 Mod Start
		//list.add(JACStrConst.KARA_MOJI);									// 空文字
		//list.add(JACStrConst.KARA_MOJI);									// コード名称管理.コード区分名称
		list.add(SEIKY_JIKI_SHITEI);										// "1"（請求月指定）固定
		list.add(seikyJikiSiteiName);											// コード名称管理.請求時期指定名
//v16.00.01 2015/07/24 Mod End
		list.add(this.seikyYm);												// eo電気料金情報（入力チェック済み）.請求年月
		list.add(this.seikyAmnt);											// eo電気料金情報（入力チェック済み）.請求金額
		
		JCCBatCommon.printBusinessFileUtil(this.eoElectPrcErrFile, list);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputeoElectPrcErrFile]");
	}
	
	/**
	 * サービス契約チェック
	 * 
	 * @param inMap
	 * @throws Exception
	 */
	private boolean checkSvcKei(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkSvcKei]");
		
		
		//カレントのサービス契約情報を格納する
		String currentSvcKeiNo = inMap.getString(JBSbatACIFM267.CURRENT_SVC_KEI_NO);
		String currentSvcKeiStat = inMap.getString(JBSbatACIFM267.CURRENT_SVC_KEI_STAT);
		String currentPrcGrpCd = inMap.getString(JBSbatACIFM267.CURRENT_PRC_GRP_CD);
		String currentPcrsCd = inMap.getString(JBSbatACIFM267.CURRENT_PCRS_CD);
		String currentPplanCd = inMap.getString(JBSbatACIFM267.CURRENT_PPLAN_CD);
		
		
		if (isNullBlank(currentSvcKeiNo))
		{
			//サービス契約番号未存在エラー
			outputeoElectPrcErrFile(this.extMap.get(JACStrConst.WKPARA_AC_MSG_NO_SVCNOERR));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSvcKei]サービス契約番号未存在エラー");
			return false;
		}
		
		if (JACStrConst.SVC_KEI_STAT_CNCL_ZUMI.equals(currentSvcKeiStat))
		{
			// 契約期間外エラー
			outputeoElectPrcErrFile(this.extMap.get(JACStrConst.WKPARA_AC_MSG_KEI_PRD_ERR));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSvcKei]契約期間外エラー");
			return false;
		}
		
		//料金グループコードチェック
		if (!this.prcGrpCd.equals(currentPrcGrpCd))
		{
			// 料金グループコードエラー
			outputeoElectPrcErrFile(this.extMap.get(JACStrConst.WKPARA_AC_MSG_PRGP_CD_ERR));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSvcKei]料金グループコードエラー");
			return false;
		}
		
		if (!this.pcrsCd.equals(currentPcrsCd))
		{
			// 料金コースコースエラー
			outputeoElectPrcErrFile(this.extMap.get(JACStrConst.WKPARA_AC_MSG_PCRS_CD_ERR));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSvcKei]料金コースコースエラー");
			return false;
		}
		
		if (!this.prcSvcCd.equals(currentPplanCd))
		{
			// 料金サービスコードエラー
			outputeoElectPrcErrFile(this.extMap.get(JACStrConst.WKPARA_AC_MSG_PRCSVC_CD_ERR));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSvcKei]料金サービスコードエラー");
			return false;
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSvcKei]");
		return true;
	}
	
	 /* 請求契約番号情報設定
	 * 
	 * @param inMap
	 * @throws Exception
	 */
	private void getAdditionalInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getAdditionalInfo]");
		
		//出力項目に含めるため、請求契約番号を取得
		String seikyKeiNo = inMap.getString(JBSbatACIFM267.CURRENT_SEIKY_KEI_NO);
		
		//請求契約番号がnullの時を考慮
		if(isNullBlank(seikyKeiNo))
		{
			//空文字を設定する
			seikyKeiNo = JACStrConst.KARA_MOJI;
		}
		
		// 作業マップに一時退避
		this.extMap.put(EXT_SEIKY_KEI_NO, seikyKeiNo);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getAdditionalInfo]");
	}
	 
	/**
	 * 課金開始済みチェック
	 * 
	 * @param inMap
	 * @throws Exception
	 */
	private boolean checkIfChargeStart(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkIfChargeStart]");
		
		//課金開始済みチェックを行うため、入力ファイルよりサービス契約番号（課金開始）を取得する
		String chrgStaSvcKeiNo = inMap.getString(JBSbatACIFM267.CHRGSTA_SVC_KEI_NO);
		
		//サービス契約番号（課金開始）がnull or 空白の場合、true(課金済対象外)を返却する
		boolean chrgStaFlg = isNullBlank(chrgStaSvcKeiNo);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkIfChargeStart]");
		
		return chrgStaFlg;
	}

	/**
	 * eo電気料金情報エラー情報（料金計算結果リスト）の出力を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputeoElectPrcErrListFile() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputeoElectPrcErrListFile]");
		
		seikyKeiNo = extMap.get(EXT_SEIKY_KEI_NO) != null ? extMap.get(EXT_SEIKY_KEI_NO) : JACStrConst.KARA_MOJI;
		
		ArrayList<Object> list = new ArrayList<Object>();
		
		list.add(this.ichjikinErrCd);		// エラーコード
		list.add(ichjikinErrMsg);			// 未請求一時金ありエラー
		list.add(super.opeDate);			// バッチ運用日
		list.add(seikyKeiNo);				// 課金先.請求契約番号
		list.add(JACStrConst.KARA_MOJI);	// 空文字
		list.add(this.svcKeiNo);			// eo電気料金情報（入力チェック済み）.サービス契約番号
		list.add(this.kyokyuTitenNo);		// eo電気料金情報（入力チェック済み）.供給地点特定番号
		list.add(this.seikyYm);				// eo電気料金情報（入力チェック済み）.請求年月
		list.add(JACStrConst.KARA_MOJI);	// 空文字
		list.add(JACStrConst.KARA_MOJI);	// 空文字
		list.add(this.prcKmkCd);			// eo電気料金情報（入力チェック済み）.料金項目コード
//v16.00.01 2015/07/24 Mod Start
		//list.add(JACStrConst.KARA_MOJI);	// 空文字
		list.add(seikyJikiSiteiName);		// 請求時期指定名
//v16.00.01 2015/07/24 Mod End	
		list.add(this.seikyAmnt);			// eo電気料金情報（入力チェック済み）.請求金額
		list.add(JACStrConst.KARA_MOJI);	// 空文字
		list.add(JACStrConst.KARA_MOJI);	// 空文字

		JCCBatCommon.printBusinessFileUtil(this.eoElectPrcErrListFile, list);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputeoElectPrcErrListFile]");
	}

	/**
	 * eo電気外部料金データファイルの出力を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputeoElectPrcFile() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputeoElectPrcFile]");
		
		ArrayList<Object> list = new ArrayList<Object>();

		seikyKeiNo = extMap.get(EXT_SEIKY_KEI_NO) != null ? extMap.get(EXT_SEIKY_KEI_NO) : JACStrConst.KARA_MOJI;
		
		list.add(this.tranSkbtCd);			// eo電気料金情報（入力チェック済み）.処理識別コード
		list.add(this.seikyKeiNo);			// 課金先.請求契約番号
		list.add(this.svcKeiNo);			// eo電気料金情報（入力チェック済み）.サービス契約番号
		list.add(this.prcGrpCd);			// eo電気料金情報（入力チェック済み）.料金グループコード
		list.add(this.pcrsCd);				// eo電気料金情報（入力チェック済み）.料金コースコード
		list.add(this.prcSvcCd);			// eo電気料金情報（入力チェック済み）.料金サービスコード
		list.add(this.prcKmkCd);			// eo電気料金情報（入力チェック済み）.料金項目コード
//v16.00.01 2015/07/24 Mod Start
		//list.add(JACStrConst.KARA_MOJI);		// eo電気料金情報（入力チェック済み）.請求時期指定
		list.add(SEIKY_JIKI_SHITEI);		// "1"（請求月指定）固定
//v16.00.01 2015/07/24 Mod End
		list.add(this.seikyYm);				// eo電気料金情報（入力チェック済み）.請求年月
		list.add(this.seikyAmnt);			// eo電気料金情報（入力チェック済み）.請求金額
		list.add(this.outPrcSysDiv);		// eo電気料金情報（入力チェック済み）.業務パラメータ管理.外部料金取込システム区分の設定値
		list.add(JACStrConst.KARA_MOJI);	// eo電気料金情報（入力チェック済み）.
		list.add(JACStrConst.KARA_MOJI);	// （マンションＩＤ）←空文字
		list.add(JACStrConst.KARA_MOJI);	// （提供方式契約番号）←空文字
		list.add(JACStrConst.KARA_MOJI);	// （加入契約支払方式コード）←空文字
		list.add(this.kyokyuTitenNo);		// eo電気料金情報（入力チェック済み）.供給地点特定番号
		list.add(this.useStaYmd);			// eo電気料金情報（入力チェック済み）.当月電気利用開始年月日
		list.add(this.useEndYmd);			// eo電気料金情報（入力チェック済み）.当月電気利用終了年月日
		
		JCCBatCommon.printBusinessFileUtil(this.eoElectPrcFile, list);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputeoElectPrcFile]");
	}
	
	/**
	 * null又は空文字の場合、trueを返却する
	 * 
	 * @param str 検査対象文字列
	 * @return true:null、又は空文字／false:左記以外
	 */
	public static boolean isNullBlank(String str)
	{
		if (str == null || "".equals(str))
		{
			return true;
		}
		return false;
	}

}
