/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKDDIAnkenUpdIktTrkm
*	ソースファイル名	：JBSbatKKKDDIAnkenUpdIktTrkm.java
*	作成者				：富士通　
*	作成日				：2018年11月05日
*＜機能概要＞
*　回線使用提供エリア更新部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v39.00.00   2018/11/3  FJ)植木	 	【ANK-3412-00-00】５ギガ・１０ギガコース導入対応	新規作成
*	v41.00.00   2019/3/18  FJ)前田	 	【OM-2019-0000224】バッチの空振りで更新結果リストが出力される
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatKKIFE868;
import eo.business.util.table.JBSbatZM_T_DL_FILE_KANRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.util.JPCUtilCommon;
import eo.framework.application.JBSbatBusinessBase;
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;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKisnusekeiTkAreaUpdTrkm extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(回線使用契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_USE_KEI = "KK_T_KAISEN_USE_KEI";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	
	/** テーブル(データ一括登録管理)*/
	private static final String D_TBL_NAME_ZM_T_DATAIKTTRK_KNRI = "ZM_T_DATAIKTTRK_KNRI";
	
	/** テーブルアクセスクラス(回線使用契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_USE_KEI = null;

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/** テーブルアクセスクラス(データ一括登録管理)*/
	private JBSbatSQLAccess db_ZM_T_DATAIKTTRK_KNRI = null;
	
	/** SQL定義キー(KK_SELECT_003)*/
	private static final String ZM_T_DATAIKTTRK_KNRI_KK_SELECT_003 = "KK_SELECT_003";

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** データ部リスト*/
	private ArrayList<HashMap<String, String>> dataMapList = null;
	
	/** 回線使用契約提供エリア更新結果リストファイルオブジェクト*/
	private JBSbatBusinessFileUtil rsltFileObj = null;
	
	/** テンプレート回線使用契約提供エリア更新結果リストファイル名*/
	private String TEMPLATE_RSLT_FILE_NAME = "回線使用契約提供エリア更新結果_yyyyMMddHHmmssSSS.csv";

	/** システム日付（yyyyMMddHHmmssSSS）フォーマット */
	private String SYS_DATE_TIME_STAMP_FORMAT = "yyyyMMddHHmmssSSS";

	/** 回線使用契約提供エリア更新結果リストファイル名*/
	private String rsltFileName = null;
	
	/** ディレイド処理依頼番号 **/
	private String dlydTrnReqNo = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KAISEN_USE_KEI  = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_USE_KEI);
		db_ZM_T_DL_FILE_KANRI   = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		db_ZM_T_DATAIKTTRK_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DATAIKTTRK_KNRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		dataMapList = new ArrayList<HashMap<String, String>>();

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		try {

			// OM-2019-0000224 DEL START
			/* 回線使用契約提供エリア更新結果リスト作成 */
//			if(!createKisnUseKeiTkAreaUpdRslt())
//			{
//				return null;
//			}
			// OM-2019-0000224 DEL END
			
			/* 回線使用契約リスト取得 */
			String[] kisnUseKeiList = this.getDlydShoriIrai();
			if (kisnUseKeiList == null)
			{
				// OM-2019-0000224 DEL START
				// getDlydShoriIraiメソッド内で回線使用契約提供エリア更新結果が設定されていない場合でもnullが返却される場合がある為、
				// 設定されている場合のみ、回線使用契約提供エリア結果リストを登録する
//				if (dataMapList != null)
//				{
				// OM-2019-0000224 DEL END

				// OM-2019-0000224 ADD START
				if (dataMapList.size() != 0)
				{
					/* 回線使用契約提供エリア更新結果リスト作成 */
					if(!createKisnUseKeiTkAreaUpdRslt())
					{
						return null;
					}
					// OM-2019-0000224 ADD END

					insertKisnUseKeiTkAreaRsltList();
				}
				// 戻り値がnullの場合は処理終了
				return null;
			}

			// OM-2019-0000224 ADD START
			/* 回線使用契約提供エリア更新結果リスト作成 */
			if(!createKisnUseKeiTkAreaUpdRslt())
			{
				return null;
			}
			// OM-2019-0000224 ADD END

			/* 回線使用契約リストの行数分実行 */
			String rsltCd = JKKStrConst.DLYD_TRN_RSLT_CD_COMPLETE;
			for (int i = 0; i < kisnUseKeiList.length; ++i)
			{
				// 1行と行数取得
				String lineCnt = String.valueOf(i + 1);
				String line    = kisnUseKeiList[i];
				
				/* 項目数・単項目チェック */
				// 項目数チェック（要素数が２でない場合）
				String[] param = line.split(JKKStrConst.COMMA);
				if(param.length != 2)
				{
					rsltCd = JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR;
					setKisnUseKeiTkAreaUpdRsltRecord(lineCnt, "未登録", null, null, "03");
					continue;
				}
				
				// 不要な""(ダブルクォート)を外す
				param[0] = param[0].replaceAll("\"", "");
				param[1] = param[1].replaceAll("\"", "");
				
				// 単項目チェック
				if (!isSingleCheckKKIFM867(lineCnt, param, getItemValueMap()))
				{
					rsltCd = JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR;
					continue;
				}
				
				/* 回線使用契約DB更新 */
				// 存在チェック
				JBSbatCommonDBInterface kaisenUseKeiRecord = executeKK_T_KAISEN_USE_KEI_PKSELECT(new String[]{param[0]});
				if (kaisenUseKeiRecord == null)
				{
					rsltCd = JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR;
					setKisnUseKeiTkAreaUpdRsltRecord(lineCnt, "未登録", null, null, "07");
					continue;
				}
				// 更新
				updateKaisenUseKei(param);
			}
			
			/* 回線使用契約提供エリア結果リストを登録（電子管理ファイルとダウンロードファイル管理テーブル） */
			insertKisnUseKeiTkAreaRsltList();
			
			/* ディレイド処理依頼結果更新処理 */
			updateShoriIrai(rsltCd);
		} catch (Exception e) {
			/* ディレイド処理依頼結果更新処理（システムエラー） */
			updateShoriIrai(JKKStrConst.DLYD_TRN_RSLT_CD_SYS_ERR);
		}
		
		return null;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KAISEN_USE_KEI.close();
		db_ZM_T_DL_FILE_KANRI.close();
		db_ZM_T_DATAIKTTRK_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（回線使用契約更新ファイル）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-KKIFE867-.KAISEN_USE_KEI_NO			回線使用契約更新ファイル.回線使用契約番号
	 *			 TXT-KKIFE867-.KNYKEI_10G_MSKM_TSTAYMD		回線使用契約更新ファイル.加入契約１０Ｇ申込適用開始日
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 * @throws Exception 
	 */
	private boolean isSingleCheckKKIFM867(String rowNo, String[] rsMap, HashMap itemvalueMap) throws Exception
	{
		// 単項目チェックを行います
		String strValue = null;

		// 回線使用契約番号項目チェック
		strValue = rsMap[0];
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0230TW", new String[]{
															rowNo + "行目 " + (String)itemvalueMap.get("TXT-KKIFE867-.KAISEN_USE_KEI_NO")});
			// エラーリスト設定
			setKisnUseKeiTkAreaUpdRsltRecord(rowNo, "未登録", "回線使用契約番号", strValue, "04");
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "12"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0980CW", new String[]{
															rowNo + "行目 " + (String)itemvalueMap.get("TXT-KKIFE867-.KAISEN_USE_KEI_NO")});
			// エラーリスト設定
			setKisnUseKeiTkAreaUpdRsltRecord(rowNo, "未登録", "回線使用契約番号", strValue, "05");
			return false;
		}

		// 加入契約１０Ｇ申込適用開始日項目チェック
		strValue = rsMap[1];
		// 桁数チェック
		if(strValue != null && !"".equals(strValue))
		{
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1", "8"}))
			{
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0980CW", new String[]{
																rowNo + "行目 " + (String)itemvalueMap.get("TXT-KKIFE867-.KNYKEI_10G_MSKM_TSTAYMD")});
				// エラーリスト設定
				setKisnUseKeiTkAreaUpdRsltRecord(rowNo, "未登録", "加入契約10G申込適用開始日", strValue, "05");
				return false;
			}
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0240TW", new String[]{
															rowNo + "行目 " + (String)itemvalueMap.get("TXT-KKIFE867-.KNYKEI_10G_MSKM_TSTAYMD")});
			// エラーリスト設定
			setKisnUseKeiTkAreaUpdRsltRecord(rowNo, "未登録", "加入契約10G申込適用開始日", strValue, "06");
			return false;
		}

		return true;
	}
	
	/**
	 * SQLKEY(KK_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 executeZM_T_DATAIKTTRK_KNRI_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_ZM_T_DATAIKTTRK_KNRI.selectBySqlDefine(paramList, ZM_T_DATAIKTTRK_KNRI_KK_SELECT_003);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KAISEN_USE_KEI_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_KAISEN_USE_KEI_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KAISEN_USE_KEI_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KK_T_KAISEN_USE_KEI.selectByPrimaryKeys(whereMap);
	}
	
	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	加入契約ネット10G申込可否		KNYKEI_NET_10G_MSKM_KH
	 *		 	加入契約10G申込適用開始日		KNYKEI_10G_MSKM_TSTAYMD
	 *		 	加入契約10G申込適用終了日		KNYKEI_10G_MSKM_TENDYMD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KAISEN_USE_KEI_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KAISEN_USE_KEI_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("KNYKEI_NET_10G_MSKM_KH",  setParam[0]);
		setMap.setValue("KNYKEI_10G_MSKM_TSTAYMD", setParam[1]);
		setMap.setValue("KNYKEI_10G_MSKM_TENDYMD", setParam[2]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KAISEN_USE_KEI_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KK_T_KAISEN_USE_KEI.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * 単項目チェック用項目名Map。
	 * 
	 * @return 単項目チェックで使用する項目名Map
	 */
	private HashMap<String, String> getItemValueMap()
	{
		HashMap<String, String> retMap = new HashMap<String, String>();

		retMap.put("TXT-KKIFE867-.KAISEN_USE_KEI_NO", 		"回線使用契約更新ファイル.回線使用契約番号");
		retMap.put("TXT-KKIFE867-.KNYKEI_10G_MSKM_TSTAYMD", "回線使用契約更新ファイル.加入契約１０Ｇ申込適用開始日");

		return retMap;
	}
	
	/**
	 * ディレイド処理依頼を取得
	 * @return strDlydList ディレイド処理依頼
	 * @throws Exception
	 */
	private String[] getDlydShoriIrai() throws Exception 
	{
		// ディレイド処理依頼取得
		ArrayList<HashMap<String, Object>> dlydShoriIraiList
					= JCCBatCommon.getShoriIraiInfo(commonItem, commonItem.getJobid());

		// ディレイド処理依頼が存在しなかった場合
		if (dlydShoriIraiList == null)
		{
			return null;
		}

		// ディレイド処理依頼情報から最後のHashMapを取得する。
		HashMap<String, Object> dlydMap = dlydShoriIraiList.get(dlydShoriIraiList.size() - 1);
		
		// ディレイド処理依頼番号取得（チェック時に検知された場合にロールバックする為に必要）
		dlydTrnReqNo = dlydMap.get("DLYD_TRN_REQ_NO").toString();

		// 実ファイル存在チェック
		if (null == ((byte[])dlydMap.get("INPUT_EFILE")))
		{
			// エラーリスト設定
			setKisnUseKeiTkAreaUpdRsltRecord(null, "未登録", null, null, "02");
			// ディレイド処理依頼結果更新(業務エラー)
			updateShoriIrai(JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR);
			return null;
		}
		
		// 拡張子チェック
		// ディレイド処理依頼番号
		// 電子ファイル管理番号
		if (!isCsvExtention(
				new Object[]{dlydMap.get("DLYD_TRN_REQ_NO").toString(), dlydMap.get("INPUT_EFILE_KANRI_NO").toString()})) 
		{
			// エラーリスト設定
			setKisnUseKeiTkAreaUpdRsltRecord(null, "未登録", null, null, "01");
			// ディレイド処理依頼結果更新(業務エラー)
			updateShoriIrai(JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR);
			return null;
		}
		
		
		// 0件ファイルチェック
		// ファイルの中身を取得する
		String dlydString = new String((byte[])dlydMap.get("INPUT_EFILE"), JKKStrConst.CHAR_SET_WIN31J);
		String[] strDlydList = dlydString.split(JACBatCommon.chgKaigyo(JACStrConst.LINE_CRLF));
		if (strDlydList.length == 0 || strDlydList[0] == null)
		{
			// エラーリスト設定
			setKisnUseKeiTkAreaUpdRsltRecord(null, "未登録", null, null, "02");
			// ディレイド処理依頼結果更新(業務エラー)
			updateShoriIrai(JKKStrConst.DLYD_TRN_RSLT_CD_APP_ERR);
			return null;
		}
		
		return strDlydList;
		
	}
	
	/**
	 * CSV拡張子チェック<br>
	 * 
	 * @param  fileNm ファイル名
	 * @return boolean trueの場合、拡張子はcsvで正常。falseの場合、拡張子はcsvではないのでエラー
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isCsvExtention(Object[] param) throws Exception
	{
		boolean isCheckFlg = false;

		// 一括管理テーブルからファイル名取得
		executeZM_T_DATAIKTTRK_KNRI_KK_SELECT_003(param);
		JBSbatCommonDBInterface record = db_ZM_T_DATAIKTTRK_KNRI.selectNext();
		
		if (record != null) 
		{
			String fileNm = record.getString(JBSbatZM_T_DL_FILE_KANRI.FILE_NM);
			
			// 拡張子チェック
			int point = fileNm.lastIndexOf(".");
			if (point != -1) {
				String extension = fileNm.substring(point);
				if (JKKStrConst.EXT_CSV.equals(extension.toLowerCase())) {
					// 拡張子がcsv
					isCheckFlg = true;
				}
			}
		}
		return isCheckFlg;
	}
	
	/**
	 * 回線使用契約提供エリア更新結果設定<br>
	 * 
	 * @param rowNo    行番号
	 * @param procDate 処理日
	 * @param stat     ステータス
	 * @param errNm    エラー項目（名称）
	 * @param errValue エラー項目（値）
	 * @param errId    エラーＩＤ
	 * 
	 * @return  HashMap<String, String> 回線使用契約提供エリア更新結果リスト設定値
	 */
	private void setKisnUseKeiTkAreaUpdRsltRecord(String rowNo, 
			String stat, String errNm, String errValue, String errId) throws Exception
	{
		HashMap<String, String> dataMap = new HashMap<String, String>();
		
		// 行番号
		if(rowNo == null)
		{
			dataMap.put(JBSbatKKIFE868.ROW_NO, null);
		}
		else
		{
			dataMap.put(JBSbatKKIFE868.ROW_NO, rowNo + JKKStrConst.KDDI_TRKM_UPD_RSLT_VAL_ROW);
		}
		// 処理日
		dataMap.put(JBSbatKKIFE868.TRAN_DATE, JKKBatCommon.formatDatetimeSS(JKKBatCommon.getSysDateTime()));
		// ステータス
		dataMap.put(JBSbatKKIFE868.STAT, stat);
		// エラー項目（名称）
		dataMap.put(JBSbatKKIFE868.ERR_KMK_NM, errNm);
		// エラー項目（値）
		dataMap.put(JBSbatKKIFE868.ERR_KMK_VALUE, errValue);
		// エラーＩＤ
		dataMap.put(JBSbatKKIFE868.ERR_ID, errId);
		
		dataMapList.add(dataMap);
	}
	
	/**
	 * 回線使用契約提供エリア更新結果リスト作成
	 * 
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 * @throws Exception
	 */
	private boolean createKisnUseKeiTkAreaUpdRslt() throws Exception
	{
		if(rsltFileObj == null)
		{
			// 回線使用契約提供エリア更新結果リストファイル作成
			// 取得したKDDI取次案件取込更新結果リストファイル名雛形からファイル名を作成をする
			rsltFileName = TEMPLATE_RSLT_FILE_NAME.replace(SYS_DATE_TIME_STAMP_FORMAT, JKKBatCommon.getSysDateTimeStamp());
			
			// 回線使用契約提供エリア更新結果リストファイルオブジェクトを生成する
			rsltFileObj = JKKBatCommon.createBusinessFileUtil(commonItem.getFreeItem() + "/" + rsltFileName, 
																		JKKStrConst.CHAR_SET_WIN31J, 
																		JKKStrConst.LINE_SEPARATOR, 
																		JKKStrConst.COMMA);
		}
		
		return true;
	}
	
	/**
	 * 回線使用契約提供エリア結果リストを登録<br>
	 * 
	 * @throws Exception
	 */
	private void insertKisnUseKeiTkAreaRsltList() throws Exception
	{
		// 回線使用契約提供エリア結果リスト
		for (int i = 0; i < dataMapList.size(); i++) 
		{
			JBSbatServiceInterfaceMap dataMap = new JBSbatServiceInterfaceMap();
			dataMap.setMap(dataMapList.get(i));

			ArrayList<String> dataList = new ArrayList<String>();
			dataList.add(dataMap.getString(JBSbatKKIFE868.ROW_NO));
			dataList.add(dataMap.getString(JBSbatKKIFE868.TRAN_DATE));
			dataList.add(dataMap.getString(JBSbatKKIFE868.STAT));
			dataList.add(dataMap.getString(JBSbatKKIFE868.ERR_KMK_NM));
			dataList.add(dataMap.getString(JBSbatKKIFE868.ERR_KMK_VALUE));
			dataList.add(dataMap.getString(JBSbatKKIFE868.ERR_ID));

			JKKBatCommon.printBusinessFileUtil(rsltFileObj, dataList);
		}
		
		// ファイルクローズ
		if(rsltFileObj != null)
		{
			rsltFileObj.close();
		}
		
		// 回線使用契約提供エリア結果リストファイル登録処理
		// このメソッドで電子管理ファイルにファイルを登録したと同時にダウンロードファイル管理にファイル情報が登録される
		JKKBatCommon.createFile(commonItem,
								JKKStrConst.KISN_USE_KEI_TK_AREA_UPD_RSLT,
								new Long(dataMapList.size()),
								null,
								commonItem.getFreeItem(),
								rsltFileName,
								JPCUtilCommon.addMonth(super.opeDate, 1), // 保持期間を運用日から一ヶ月間
								db_ZM_T_DL_FILE_KANRI,
								false);
	}
	
	/**
	 * 回線使用契約スキーマを更新する<br>
	 * 
	 * @param param  回線使用契約更新ファイルの1行
	 * @throws Exception
	 */
	private void updateKaisenUseKei(String[] param) throws Exception {

		/* 更新値 */
		Object[] setParam = new Object[3];
		// 加入契約ネット10G申込可否
		setParam[0] = (JKKBatCommon.isNotNull(param[1])) ? JKKStrConst.CD_DIV_KH_KA : JKKStrConst.CD_DIV_KH_HI; 
		// 加入契約10G申込適用開始日
		setParam[1] = (JKKBatCommon.isNotNull(param[1])) ? param[1] : JKKStrConst.END_YMD_DEFAULT; 
		// 加入契約10G申込適用終了日
		setParam[2] = JKKStrConst.END_YMD_DEFAULT; 
		
		/* 条件値 */
		Object[] whereParam = new Object[1];
		// 回線使用契約番号
		whereParam[0] = param[0];
		
		/* 更新 */
		executeKK_T_KAISEN_USE_KEI_PKUPDATE(setParam, whereParam);
	}
	
	/**
	 *ディレイド処理依頼結果更新処理<br>
	 * @param fileCnt ファイル件数
	 * @param isSysErrFlg エラーフラグ
	 * @throws Exception
	 */
	private void updateShoriIrai(String rsltCd) throws Exception
	{
		if (JKKStrConst.DLYD_TRN_RSLT_CD_SYS_ERR.equals(rsltCd))
		{
			// システムエラーの場合、ロールバック
			JBSbatBusinessBase.dbcon.rollback();
		}
		
		// ディレイド処理依頼結果更新部品呼び出し
		JKKBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, rsltCd, null);
		
		// DBコミット処理
		JBSbatBusinessBase.dbcon.commit();
	}
	
}
