/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSBatDKHjHaisoInfoAdd
*	ソースファイル名	：JBSBatDKHjHaisoInfoAdd.java
*	作成者				：富士通　
*	作成日				：2012年05月09日
*＜機能概要＞
*　法人配送情報取込部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/05/09   FJ)田中	新規作成
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JDKBatOutputFileUtil;
import eo.business.util.file.JBSbatDKIFM036;
import eo.business.util.file.JBSbatDKIFM085;
import eo.business.util.file.JBSbatDKIFM091;
import eo.business.util.table.JBSbatZM_M_TAKNKIKI_MODEL;
import eo.common.constant.JDKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JDKCommonUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSBatDKHjHaisoInfoAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(宅内機器型式)*/
	private static final String D_TBL_NAME_ZM_M_TAKNKIKI_MODEL = "ZM_M_TAKNKIKI_MODEL";

	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** テーブル(倉庫棚)*/
	private static final String D_TBL_NAME_DK_M_SOKODNA = "DK_M_SOKODNA";

	/** テーブル(配送)*/
	private static final String D_TBL_NAME_DK_T_HAISO = "DK_T_HAISO";

	/** テーブル(配送対象物品)*/
	private static final String D_TBL_NAME_DK_T_HAISO_TG_BPIN = "DK_T_HAISO_TG_BPIN";

	/** テーブル(バッチ用宅内機器物流在庫ワーク)*/
	private static final String D_TBL_NAME_DK_T_BAT_TKKBRZK_WK = "DK_T_BAT_TKKBRZK_WK";

	/** テーブル(料金プラン)*/
	private static final String D_TBL_NAME_KK_M_PPLAN = "KK_M_PPLAN";
	
	/** SQL定義キー(DK_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_DK_SELECT_001 = "DK_SELECT_001";

	/** SQL定義キー(DK_SELECT_001)*/
	private static final String DK_M_SOKODNA_DK_SELECT_001 = "DK_SELECT_001";

	/** SQL定義キー(DK_SELECT_001)*/
	private static final String DK_T_BAT_TKKBRZK_WK_DK_SELECT_001 = "DK_SELECT_001";

	/** テーブルアクセスクラス(宅内機器型式)*/
	private JBSbatSQLAccess db_ZM_M_TAKNKIKI_MODEL = null;

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/** テーブルアクセスクラス(倉庫棚)*/
	private JBSbatSQLAccess db_DK_M_SOKODNA = null;

	/** テーブルアクセスクラス(配送)*/
	private JBSbatSQLAccess db_DK_T_HAISO = null;

	/** テーブルアクセスクラス(配送対象物品)*/
	private JBSbatSQLAccess db_DK_T_HAISO_TG_BPIN = null;

	/** テーブルアクセスクラス(バッチ用宅内機器物流在庫ワーク)*/
	private JBSbatSQLAccess db_DK_T_BAT_TKKBRZK_WK = null;

	/** テーブルアクセスクラス(料金プラン)*/
	private JBSbatSQLAccess db_KK_M_PPLAN = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 法人配送情報ファイル：項目数（ヘッダ部）*/
	private static final int REC_COL_CNT_HEADER = 2;

	/** 法人配送情報ファイル：項目数（データ部）*/
	private static final int REC_COL_CNT_DATA = 31;

	/** 法人配送情報ファイル：項目数（トレーラー部）*/
	private static final int REC_COL_CNT_TL = 2;

	/** 法人配送情報ファイル読み込み時/CSV出力用デリミタ */
	private static final String CSV_DELIMITER = JDKStrConst.COMMA;

	/** 項目エラー出力メッセージ用(フォーマットエラー) */
	private static final String COL_ERR_FORMAT = "フォーマット";

	/** 項目エラー出力メッセージ用(トレーラ部件数異常) */
	private static final String COL_ERR_DATA_FILE_CNT = "ファイルのデータ部の件数";

	/** 項目エラー出力メッセージ用(トレーラ部件数異常) */
	private static final String COL_ERR_TL_FILE_CNT = "トレーラ部に設定されている件数";

	/** マイナーエラー発生フラグ マイナーエラーが発生した場合はTrueにする */
	private boolean minorErrFlg = false;
	
	/** 法人配送情報受信：登録契機契約異動区分 */
	private static final String ADD_OPTNTY_KEI_IDO_DIV_COLNM = "登録契機契約異動区分";

	/** 法人配送情報受信：登録契機契約異動年月日時分秒 */
	private static final String ADD_OPTNTY_KEI_IDO_DTM_COLNM = "登録契機契約異動年月日時分秒";

	/** 法人配送情報受信：配送区分 */
	private static final String HAISO_DIV_COLNM = "配送区分";

	/** 法人配送情報受信：配送先名 */
	private static final String HISOS_NM_COLNM = "配送先名";

	/** 法人配送情報受信：配送先住所コード */
	private static final String HISOS_AD_CD_COLNM = "配送先住所コード";

	/** 法人配送情報受信：配送先郵便番号 */
	private static final String HISOS_PCD_COLNM = "配送先郵便番号";

	/** 法人配送情報受信：配送先都道府県名 */
	private static final String HISOS_STATE_NM_COLNM = "配送先都道府県名";

	/** 法人配送情報受信：配送先市区町村名 */
	private static final String HISOS_CITY_NM_COLNM = "配送先市区町村名";

	/** 法人配送情報受信：配送先大字通称名 */
	private static final String HISOS_OAZTSU_NM_COLNM = "配送先大字通称名";

	/** 法人配送情報受信：配送先字丁目名 */
	private static final String HISOS_AZCHO_NM_COLNM = "配送先字丁目名";

	/** 法人配送情報受信：配送先番地号 */
	private static final String HISOS_BNCHIGO_COLNM = "配送先番地号";

	/** 法人配送情報受信：配送先住所補記・建物名 */
	private static final String HISOS_ADRTTM_COLNM = "配送先住所補記・建物名";

	/** 法人配送情報受信：配送先住所補記・部屋番号 */
	private static final String HISOS_ADRRM_COLNM = "配送先住所補記・部屋番号";

	/** 法人配送情報受信：配送先電話番号 */
	private static final String HISOS_TELNO_COLNM = "配送先電話番号";

	/** 法人配送情報受信：倉庫コード */
	private static final String SOKO_CD_COLNM = "倉庫コード";
	
	/** 法人配送情報受信：棚コード */
	private static final String SHELF_CD_COLNM = "棚コード";

	/** 法人配送情報受信：法人サービス契約受付番号 */
	private static final String HOJIN_SVC_KEI_UK_NO_COLNM = "法人サービス契約受付番号";

	/** 法人配送情報受信：法人サービス契約受付番号子 */
	private static final String HOJIN_SVC_KEI_UK_NOPARTS_COLNM = "法人サービス契約受付番号子";

	/** 法人配送情報受信：配送予定年月日 */
	private static final String HAISO_RSV_YMD_COLNM = "配送予定年月日";

	/** 法人配送情報受信：サービス契約番号 */
	private static final String SVC_KEI_NO_COLNM = "サービス契約番号";

	/** 法人配送情報受信：宅内機器型式コード */
	private static final String TAKNKIKI_MODEL_CD_COLNM = "宅内機器型式コード";

	/** 法人配送情報受信：付属品型式コード */
	private static final String HUZOKUHIN_MODEL_CD_COLNM = "付属品型式コード";

	/** 法人配送情報受信：宅内機器セット品型コード */
	private static final String TAKNKIKI_SETHIN_MODEL_CD_COLNM = "宅内機器セット品型コード";

	/** 法人配送情報受信：数量 */
	private static final String CNT_COLNM = "数量";

	/** 法人配送情報受信：料金グループコード */
	private static final String PRC_GRP_CD_COLNM = "料金グループコード";

	/** 法人配送情報受信：料金コースコード */
	private static final String PCRS_CD_COLNM = "料金コースコード";

	/** 法人配送情報受信：料金プランコード */
	private static final String PPLAN_CD_COLNM = "料金プランコード";

	/** 法人配送情報受信：機器付加情報コード */
	private static final String KIKI_HUKA_INFO_CD_COLNM = "機器付加情報コード";

	/** 法人配送情報受信：法人販売種別コード */
	private static final String HOJIN_HAMBAI_SBT_CD_COLNM = "法人販売種別コード";

	/** 法人配送情報受信：法人提供種別コード */
	private static final String HOJIN_TK_SBT_CD_COLNM = "法人提供種別コード";
	
	/** 配送番号 */
	private static final String HAISO_NO_COLNM = "配送番号";
	
	/** 法人配送情報受信【データ部】項目インデックス */
	private static HashMap<String, Integer> hjHaisoIfDataIndex = null;

	/** 配送番号シーケンス名 */
	private static final String SEQ_HAISO_NO = "SEQ_HAISO_NO";

	/** 配送対象物品番号シーケンス名 */
	private static final String SEQ_HAISO_TAIBPIN_NO = "SEQ_HAISO_TAIBPIN_NO";
	
	/**
	 * 出荷指図情報登録ジョブＩＤ．夜間（通常）
	 */
	private static final String JOB_ID_YAK = "EO5050110J2";

	/**
	 * 法人配送情報取込ジョブＩＤ
	 */
	private static final String JOB_ID = "EO50J0110J0";

	/**
	 * 管理場所識別コード．倉庫
	 */
	private static final String KANRI_PLACE_SKCD_SOKO = "1";

	/**
	 * 外部ＩＦＩＤ．宅内機器物流在庫情報更新バッチ送信ファイル
	 */
	private static final String GAI_IF_ID_TK_BRZK_UPD_FILE = "DKIFE037";

	/**
	 * 宅内機器物流在庫情報更新バッチ送信ファイル定義
	 */
	private static final String DEF_TK_BRZK_UPD = "DKIFM036.def";

	/**
	 * 宅内機器物流在庫情報更新バッチ送信中間（法人配送）ファイル定義
	 */
	private static final String DEF_TK_BRZK_UPD_MID = "DKIFM091.def";

	/** 行数 */
	private static final String LINE_NO = "lineNo";

	/** レコード格納マップ */
	private Map<String, List<String>> sortMap = new TreeMap<String, List<String>>();

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_TAKNKIKI_MODEL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_TAKNKIKI_MODEL);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_DK_M_SOKODNA = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_M_SOKODNA);
		db_DK_T_HAISO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HAISO);
		db_DK_T_HAISO_TG_BPIN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HAISO_TG_BPIN);
		db_DK_T_BAT_TKKBRZK_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_BAT_TKKBRZK_WK);
		db_KK_M_PPLAN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PPLAN);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 法人配送情報データ部項目インデックス作成
		hjHaisoIfDataIndex = getDataIndex();
		
		// パラメータの取得（Freeパラメータ）
		// 法人配送情報ファイルが格納されているフォルダの環境変数名を取得する
		String[] freeParam = commonItem.getFreeItem().split(JDKStrConst.FREE_DLMT);
		
		// 環境変数から実際ファイル格納フォルダの値を取得します
		String recvDir = JBSbatAplConst.getAplConstValue(freeParam[0]);
		if (recvDir == null)
		{
			// 環境変数未設定エラー
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EDKB0020KE, new String[] {"環境変数",
			"環境変数名＝" + freeParam[0]});
		}
		recvDir = recvDir + "/DKIFE016";
		// ファイル名を格納する変数
		String fileName = "/DKIFE016.csv";
		
		// 受信フラグファイルの存在チェック
		if (!existsFlgFile(rnktPath(recvDir,fileName)))
		{
			return null;
		}
		
		// ファイルを取得する
		JBSbatInputFileUtil inputFile = new JBSbatInputFileUtil(recvDir + fileName);

		String[] rec = null;			// レコード
		String recLine = null;			// 行レコード
		int recCnt = 0;					// レコード件数
		int dataCnt = 0;				// データ部件数
		int kmkCnt = 0;					// 項目数
		boolean existHeader = false;	// 存在フラグ(ヘッダ部)
		boolean existData = false;		// 存在フラグ(データ部)
		boolean existTl = false;		// 存在フラグ(トレーラー部)
		boolean frmErr = false;		// フォーマットエラー有
		
		// フォーマット正常データ格納リスト
		List<String> recData = new ArrayList<String>();
		try
		{
			// テキストファイルの読み込み
			inputFile.setEncode(JDKStrConst.ENCODE_SJIS2);
			inputFile.createReader();
			while (inputFile.ready())
			{
				recLine = inputFile.readLine();
				recCnt++;
				
				// 項目数取得
				kmkCnt = getCnt(recLine, CSV_DELIMITER) + 1;
				// カンマで分割
				rec = getCsvStrArray(recLine, CSV_DELIMITER, JDKStrConst.DOUBLE_QUAT);

				// レコード種別がヘッダ部
				if (JDKStrConst.RECORD_SBT_DKIFM084_HEADER.equals(rec[0]))
				{
					existHeader = true;
					// 2項目以外の場合はエラーとする
					if (REC_COL_CNT_HEADER != kmkCnt)
					{
						commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0080KW, 
								new String[]{COL_ERR_FORMAT, getColErrMsg(recvDir + fileName, String.valueOf(recCnt), recLine)});
						frmErr = true;
						break;
					}
				}
				// レコード種別がデータ部
				else if(JDKStrConst.RECORD_SBT_DKIFM085_DATA.equals(rec[0]))
				{
					dataCnt++;
					existData = true;
					// 31項目以外の場合はエラーとする
					if (REC_COL_CNT_DATA != kmkCnt)
					{
						commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0080KW, 
								new String[]{COL_ERR_FORMAT, getColErrMsg(recvDir + fileName, String.valueOf(recCnt), recLine)});
						frmErr = true;
						break;
					}
					else
					{
						// 正常レコードをソートマップに追加
						StringBuffer line = new StringBuffer();
						line.append(recLine)
						    .append(CSV_DELIMITER)
						    .append(JDKStrConst.DOUBLE_QUAT)
						    .append(dataCnt)
						    .append(JDKStrConst.DOUBLE_QUAT);
						sortMap = this.putMap(line.toString(), sortMap);
					}
				}
				// レコード種別がトレーラ部
				else if(JDKStrConst.RECORD_SBT_DKIFM086_TRAILER.equals(rec[0]))
				{
					existTl = true;
					// 2項目以外の場合はエラーとする
					if (REC_COL_CNT_TL != kmkCnt)
					{
						commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0080KW, 
								new String[]{COL_ERR_FORMAT, getColErrMsg(recvDir + fileName, String.valueOf(recCnt), recLine)});
						frmErr = true;
						break;
					}
					else
					{
						// レコード件数がデータ部件数と一致しない場合はエラー
						if (!rec[1].equals(String.valueOf(dataCnt)))
						{
							commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0100KW, 
									new String[]{COL_ERR_DATA_FILE_CNT, COL_ERR_TL_FILE_CNT, 
									getColErrMsg(recvDir + fileName, String.valueOf(recCnt), recLine)});
							frmErr = true;
							break;
						}
					}
				}
				// レコード種別が上記以外の場合
				else
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0080KW, 
							new String[]{COL_ERR_FORMAT, getColErrMsg(recvDir + fileName, String.valueOf(recCnt), recLine)});
					frmErr = true;
					break;
				}
			}

			// データ部が存在しない場合は処理を終了する。
			if (!frmErr && !existData)
			{
				return null;
			}
			// ヘッダ部・トレーラ部のいずれかが存在しない場合はエラーとする
			if (!frmErr && !(existHeader && existTl))
			{
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0080KW, 
						new String[]{COL_ERR_FORMAT, getColErrMsg(recvDir + fileName, String.valueOf(recCnt), recLine)});
				frmErr = true;
			}
		}
		catch (IOException ex)
		{
			super.logPrint.printDebugLog("法人配送情報受信ファイル読み込み失敗:" + recvDir + fileName);
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0660CE,
					new String[] {recvDir + fileName});
			throw ex;
		}
		finally
		{
			// 読み込んだファイルを閉じる
			try
			{
				inputFile.close();
			}
			catch (NullPointerException ex)
			{
				super.logPrint.printDebugLog("ファイルクローズはインスタンスがNull:" + recvDir + fileName);
			}
		}

		if (frmErr)
		{
			// マイナーエラーがあったということでマイナーエラーフラグをONにする
			minorErrFlg = true;
		}
		else
		{
			// キーごとに格納したマップのコピーを作成し、項目エラーがあった場合はキーごと出力対象外とする
			Map<String, List<String>> sortMapBk = copyTreeMapList(sortMap);
			for (String key : sortMapBk.keySet())
			{
				recData = sortMapBk.get(key);

				for (String line : recData)
				{
					if (!isCheckParam(line, recvDir + fileName))
					{
						sortMap.remove(key);
						// チェックエラー有り
						minorErrFlg = true;
						break;
					}
				}
			}			
			
			Map<String, Integer> zaikoMap = new HashMap<String, Integer>();
			Map<String, Integer> zaikoMapBk = (Map<String, Integer>)((HashMap)zaikoMap).clone();
			Map<String, Map<String, String>> zaikoUpdListMap = new TreeMap<String, Map<String, String>>();
			Map<String, Map<String, String>> zaikoUpdListMapBk = copyTreeMapMap(zaikoUpdListMap);
			for (String key : sortMap.keySet())
			{
				recData = sortMap.get(key);

				String haisoNo = null;
				String shukkaTaikiFlg = "0";
				// フォーマットチェックが正常な場合、データ部チェック処理
				for (int i = 0; i < recData.size(); i++)
				{
					recLine = recData.get(i);
					// 1件目の場合は配送番号を採番する
					if (i == 0)
					{
						// 配送番号を採番する
						haisoNo = getHaisoNo();
					}
					if ("0".equals(shukkaTaikiFlg))
					{
						// 在庫数チェック
						if (checkZaiko(recLine, haisoNo, zaikoMap))
						{
							// 宅内機器物流在庫情報更新バッチ送信ファイルの元ねた作成
							zaikoUpdListMap = putZaikoUpdListMap(recLine, zaikoUpdListMap);
						}
						else
						{
							zaikoUpdListMap = copyTreeMapMap(zaikoUpdListMapBk);
							zaikoMap = (Map<String, Integer>)((HashMap)zaikoMapBk).clone();
							shukkaTaikiFlg = "1";
							// チェックエラー有り
							minorErrFlg = true;
						}
					}

					// 配送対象物品登録処理
					insertHaioTgBpin(recLine, haisoNo, recvDir + fileName, String.valueOf(i + 1));

				}
				zaikoUpdListMapBk = copyTreeMapMap(zaikoUpdListMap);
				zaikoMapBk = (Map<String, Integer>)((HashMap)zaikoMap).clone();
				// 配送登録処理
				insertHaiso(recData.get(0), haisoNo, shukkaTaikiFlg, recvDir + fileName, String.valueOf(1));
			}
			// 宅内機器物流在庫情報更新バッチ送信ファイル出力
			putZaikoFile(zaikoUpdListMap);
		}

		
		
		// マイナーエラーが存在している場合は共通メッセージのエラーコードに設定を行う
		if (minorErrFlg)
		{
			commonItem.addErrorCount(1);
		}

		// 実行結果反映
		super.commit();

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_TAKNKIKI_MODEL.close();
		db_ZM_M_CD_NM_KANRI.close();
		db_DK_M_SOKODNA.close();
		db_DK_T_HAISO.close();
		db_DK_T_HAISO_TG_BPIN.close();
		db_DK_T_BAT_TKKBRZK_WK.close();
		db_KK_M_PPLAN.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 配送テーブルに登録します。
	 * @param recLine　ファイルレコード
	 * @param haisoNo　配送番号
	 * @param shukkaTaikiFlg 出荷待機フラグ
	 * @param filePath　ファイルパス
	 * @param rowNo　行番号
	 * @throws Exception
	 */
	private void insertHaiso(String recLine, String haisoNo, String shukkaTaikiFlg,
			String filePath, String rowNo) throws Exception
	{
		// レコードを配列にする。
		String[] rec = getCsvStrArray(recLine, CSV_DELIMITER, JDKStrConst.DOUBLE_QUAT);

		try
		{
			// 設定値のマップを作成します
			JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
			// 配送番号
			setMap.setValue("HAISO_NO",  haisoNo);
			// 配送ステータス
			setMap.setValue("HAISO_STAT", "001");	// 受付済
			// 配送受付年月日
			setMap.setValue("HAISO_UK_YMD", super.opeDate);
			// 配送先工事会社コード
			setMap.setValue("HISOS_KOCOMP_CD", null);
			// 配送区分
			setMap.setValue("HAISO_DIV", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HAISO_DIV)]);
			// 配送メモ
			setMap.setValue("HAISO_MEMO", null);
			// 配送先個別指定フラグ
			setMap.setValue("HISOS_KSITEI_FLG", "1");	// 個別指定あり
			// 配送先名
			setMap.setValue("HISOS_NM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_NM)]);
			// 配送先住所コード
			setMap.setValue("HISOS_AD_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_AD_CD)]);
			// 配送先郵便番号
			setMap.setValue("HISOS_PCD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_PCD)]);
			// 配送先都道府県名
			setMap.setValue("HISOS_STATE_NM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_STATE_NM)]);
			// 配送先市区町村名
			setMap.setValue("HISOS_CITY_NM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_CITY_NM)]);
			// 配送先大字通称名
			setMap.setValue("HISOS_OAZTSU_NM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_OAZTSU_NM)]);
			// 配送先字丁目名
			setMap.setValue("HISOS_AZCHO_NM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_AZCHO_NM)]);
			// 配送先番地号
			setMap.setValue("HISOS_BNCHIGO", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_BNCHIGO)]);
			// 配送先住所補記・建物名
			setMap.setValue("HISOS_ADRTTM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_ADRTTM)]);
			// 配送先住所補記・部屋番号
			setMap.setValue("HISOS_ADRRM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_ADRRM)]);
			// 配送先電話番号
			setMap.setValue("HISOS_TELNO", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_TELNO)]);
			// 配送元倉庫コード
			setMap.setValue("HAISO_MOTO_SOKO_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SOKO_CD)]);
			// 移動元管理場所識別コード
			setMap.setValue("IDOMOTO_KRIPLACE_SKCD", JDKStrConst.KANRI_PLACE_SKB_SOKO);
			// 移動元工事会社コード
			setMap.setValue("IDOMOTO_KOCOMP_CD", null);
			// 移動元預託先オフィスコード
			setMap.setValue("IDOMOTO_YTKSKOF_CD", null);
			// 法人サービス契約受付番号
			setMap.setValue("HOJIN_SVC_KEI_UK_NO", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_SVC_KEI_UK_NO)]);
			// 法人契約者名
			setMap.setValue("HOJIN_KEISHA_NM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_NM)]);
			// 法人連絡先携帯電話番号
			setMap.setValue("HOJIN_RRKS_KTAI_TELNO", null);
			// 他システム連携フラグ
			setMap.setValue("TA_SYS_RNKI_FLG", "0");	// 未連携
			// 他システム連携年月日
			setMap.setValue("TA_SYS_RNKI_YMD", null);
			// 他システム連携先コード
			setMap.setValue("TA_SYS_RNKS_CD", "1");		// Claris
			// 法人料金グループコード
			setMap.setValue("HOJIN_PRC_GRP_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PRC_GRP_CD)]);
			// 法人料金コースコード
			setMap.setValue("HOJIN_PCRS_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PCRS_CD)]);
			// 法人料金プランコード
			setMap.setValue("HOJIN_PPLAN_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PPLAN_CD)]);
			// 配送予定年月日
			setMap.setValue("HAISO_RSV_YMD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HAISO_RSV_YMD)]);
			// 配達完了予定年月日時分秒
			setMap.setValue("HAITATSU_FIN_RSV_DTM", null);
			// 住所未確定フラグ
			setMap.setValue("AD_MI_FIX_FLG", "1");		// 住所確定
			// 配送指示年月日
			setMap.setValue("HAISO_SJI_YMD", null);
			// 出荷待機フラグ
			setMap.setValue("SHUKKA_TAIKI_FLG", shukkaTaikiFlg);
			// 型式変更コード
			setMap.setValue("MODEL_CHGE_CD", null);
			// 出荷年月日
			setMap.setValue("SHUKKA_YMD", null);
			// 出荷ロット番号
			setMap.setValue("SHUKKA_LOT_NO", null);
			// 配送完了年月日
			setMap.setValue("HAISO_FIN_YMD", null);
			// 配送中止ユーザーＩＤ
			setMap.setValue("HAISO_STP_ID", null);
			// 配送中止コード
			setMap.setValue("HAISO_STP_CD", null);
			// 配送中止年月日
			setMap.setValue("HAISO_STP_YMD", null);
			// 物流保全番号
			setMap.setValue("BTRYHOZN_NO", null);
			// 配送期限年月日
			setMap.setValue("HAISO_KIGEN_YMD", null);
			// 配送到着指定年月日
			setMap.setValue("HAISO_ARIV_SHITEI_YMD", null);
			// 申込番号
			setMap.setValue("MSKM_NO", null);
			// 配送到着指定時間帯コード
			setMap.setValue("HAISO_ARIV_SHITEI_TIME_CD", null);
			// 通知書添付コード
			setMap.setValue("TCHISHO_TEMP_CD", "0");	// なし
			// 登録年月日時分秒
			setMap.setValue("ADD_DTM", null);
			// 登録オペレータアカウント
			setMap.setValue("ADD_OPEACNT", null);
			// 更新年月日時分秒
			setMap.setValue("UPD_DTM", null);
			// 更新オペレータアカウント
			setMap.setValue("UPD_OPEACNT", null);
			// 削除年月日時分秒
			setMap.setValue("DEL_DTM", null);
			// 削除オペレータアカウント
			setMap.setValue("DEL_OPEACNT", null);
			// 無効フラグ
			setMap.setValue("MK_FLG", null);
			
			// DBアクセスを実行します
			db_DK_T_HAISO.insertByPrimaryKeys(setMap);
		}
		catch (Exception ex)
		{
			// 配送テーブル登録失敗
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0070CE,
					new String[] {"配送", getColErrMsg(filePath, rowNo, recLine)});
			throw ex;
		}
	}

	/**
	 * 配送対象物品テーブルに登録します。
	 * @param recLine　ファイルレコード
	 * @param haisoNo　配送番号
	 * @param filePath　ファイルパス
	 * @param rowNo　行番号
	 * @return 登録用配列
	 * @throws Exception
	 */
	private void insertHaioTgBpin(String recLine, String haisoNo, String filePath, String rowNo) throws Exception
	{
		// レコードを配列にする。
		String[] rec = getCsvStrArray(recLine, CSV_DELIMITER, JDKStrConst.DOUBLE_QUAT);
		
		// 配送対象物品番号を採番する
		String haisoTgBpinNo = getHaisoTgBpinNo();

		// 宅内機器種別コード
		String taknkikiSbtCd = null;

		// 宅内機器型式情報を取得する
		String modelCd = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)];
		try
		{

			JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
			whereMap.setValue("TAKNKIKI_MODEL_CD", modelCd);

			JBSbatCommonDBInterface tkkkModelMap = new JBSbatCommonDBInterface();

			// DBアクセスを実行します
			tkkkModelMap = db_ZM_M_TAKNKIKI_MODEL.selectByPrimaryKeys(whereMap);
			if (null != tkkkModelMap)
			{
				taknkikiSbtCd = (String)tkkkModelMap.getString(JBSbatZM_M_TAKNKIKI_MODEL.TAKNKIKI_SBT_CD);
			}
		}
		catch (Exception ex)
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0020KE,
					new String[] {"配送", TAKNKIKI_MODEL_CD_COLNM + "＝" +  modelCd});
			throw ex;
		}

		try
		{
			// 設定値のマップを作成します
			JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
			
			// 配送対象物品番号
			setMap.setValue("HAISO_TAIBPIN_NO", haisoTgBpinNo);
			// 配送番号
			setMap.setValue("HAISO_NO", haisoNo);
			// 出荷ロット番号
			setMap.setValue("SHUKKA_LOT_NO", null);
			// 出荷ロット番号機器通番
			setMap.setValue("SHUKKA_LOT_KIKI_SEQ", null);
			// 配送元倉庫棚コード
			setMap.setValue("HAISO_MOTO_SKDN_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SHELF_CD)]);
			// 移動元工事会社棚コード
			setMap.setValue("IDOMOTO_KOCOMP_SLF_CD", null);
			// 移動元預託先オフィス棚コード
			setMap.setValue("IDOMOTO_YTKSKOF_SLF_CD", null);
			// 機器提供サービス契約番号
			setMap.setValue("KKTK_SVC_KEI_NO", null);
			// 登録契機契約異動区分
			setMap.setValue("ADD_OPTNTY_KEI_IDO_DIV", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.ADD_OPTNTY_KEI_IDO_DIV)]);
			// 登録契機契約異動年月日時分秒
			setMap.setValue("ADD_OPTNTY_KEI_IDO_DTM", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.ADD_OPTNTY_KEI_IDO_DTM)]);
			// 法人サービス契約受付番号子
			setMap.setValue("HOJIN_SVC_KEI_UK_NOPARTS", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_SVC_KEI_UK_NOPARTS)]);
			// 法人ｅｏ読替サービス契約番号
			setMap.setValue("HJIN_EO_YKAE_SVKEI_NO", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SVC_KEI_NO)]);
			// 宅内機器種別コード
			setMap.setValue("TAKNKIKI_SBT_CD", taknkikiSbtCd);
			// 付属品種別コード
			setMap.setValue("HUZOKUHIN_SBT_CD", null);
			// 宅内機器型式コード
			setMap.setValue("TAKNKIKI_MODEL_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)]);
			// 付属品型式コード
			setMap.setValue("HUZOKUHIN_MODEL_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HUZOKUHIN_MODEL_CD)]);
			// 宅内機器セット品型コード
			setMap.setValue("TAKNKIKI_SETHIN_MODEL_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_SETHIN_MODEL_CD)]);
			// 機器製造番号
			setMap.setValue("KIKI_SEIZO_NO", null);
			// 宅内機器セット品番号
			setMap.setValue("TAKNKIKI_SETHIN_NO", null);
			// 配送機器変更コード
			setMap.setValue("HAISO_KIKI_CHGE_CD", null);
			// トムソンケース番号
			setMap.setValue("TCASE_NO", null);
			// 伝票番号
			setMap.setValue("DENPYO_NO", null);
			// 申込明細番号
			setMap.setValue("MSKM_DTL_NO", null);
			// 工事案件番号
			setMap.setValue("KOJIAK_NO", null);
			// 申込書番号
			setMap.setValue("MSKMSHO_NO", null);
			// 機器設置先場所番号
			setMap.setValue("KIKI_STC_SAKI_PLACE_NO", null);
			// 機器付加情報コード
			setMap.setValue("KIKI_HUKA_INFO_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.KIKI_HUKA_INFO_CD)]);
			// 料金コースコード
			setMap.setValue("PCRS_CD", null);
			// 法人販売種別コード
			setMap.setValue("HOJIN_HAMBAI_SBT_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_HAMBAI_SBT_CD)]);
			// 法人提供種別コード
			setMap.setValue("HOJIN_TK_SBT_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_TK_SBT_CD)]);
			// 登録年月日時分秒
			setMap.setValue("ADD_DTM", null);
			// 登録オペレータアカウント
			setMap.setValue("ADD_OPEACNT", null);
			// 更新年月日時分秒
			setMap.setValue("UPD_DTM", null);
			// 更新オペレータアカウント
			setMap.setValue("UPD_OPEACNT", null);
			// 削除年月日時分秒
			setMap.setValue("DEL_DTM", null);
			// 削除オペレータアカウント
			setMap.setValue("DEL_OPEACNT", null);
			// 無効フラグ
			setMap.setValue("MK_FLG", null);
		
			// DBアクセスを実行します
			db_DK_T_HAISO_TG_BPIN.insertByPrimaryKeys(setMap);
		}
		catch (Exception ex)
		{
			// 配送対象物品テーブル登録失敗
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0070CE,
					new String[] {"配送対象物品", getColErrMsg(filePath, rowNo, recLine)});
			throw ex;
		}

	}

	/**
	 * 配送番号を採番して返却します。<br>
	 * <br>
	 * @return String 採番された配送番号
	 * @throws Exception
	 */
	private String getHaisoNo() throws Exception
	{
		// 配送番号のプレフィックスをコード名称管理より取得します。
		StringBuffer prefix = new StringBuffer();
		prefix.append(getPrefix("01"));
		prefix.append(commonItem.getOpeDate().substring(2, 4));

		try
		{
			return JCCBatCommon.getFormatedNextSeq(commonItem, SEQ_HAISO_NO, prefix.toString(), 7);
		}
		catch (Exception ex)
		{
			// 配送番号シーケンス採番失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0020KE,
					new String[] {"配送番号シーケンス",
					"シーケンス＝" + SEQ_HAISO_NO
					+ "；接頭語＝" + prefix.toString()
					+ "；桁数＝7"});
			throw ex;
		}
	}

	/**
	 * 配送対象物品番号を採番して返却します。<br>
	 * <br>
	 * @return String 採番された配送対象物品番号
	 * @throws Exception
	 */
	private String getHaisoTgBpinNo() throws Exception
	{
		// 配送対象物品番号のプレフィックスをコード名称管理より取得します。
		StringBuffer prefix = new StringBuffer();
		prefix.append(getPrefix("02"));

		try
		{
			return JCCBatCommon.getFormatedNextSeq(commonItem, SEQ_HAISO_TAIBPIN_NO, prefix.toString(), 8);
		}
		catch (Exception ex)
		{
			// 配送対象物品番号シーケンス採番失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0020KE,
					new String[] {"配送番号シーケンス",
					"シーケンス＝" + SEQ_HAISO_TAIBPIN_NO
					+ "；接頭語＝" + prefix.toString()
					+ "；桁数＝8"});
			throw ex;
		}
	}

	/**
	 * コード管理名称より 採番用のプレフィックスを取得します。<br>
	 * <br>
	 * @param cdKb　コード区分
	 * @return Stringのプレフィックスを返却します。
	 * @throws Exception
	 */
	private String getPrefix(String cdKb) throws Exception
	{
		String result = "";
		try
		{
			// バイント変数のリストを生成します
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// コード種別
			paramList.setValue(JZM0171Constant.CD00692);
			// コード区分
			paramList.setValue(cdKb);

			// DBアクセスを実行します
			db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_DK_SELECT_001);

			JBSbatCommonDBInterface  resultMap = db_ZM_M_CD_NM_KANRI.selectNext();
			result = (String)resultMap.getString("CD_DIV_NM");
		}
		catch (Exception ex)
		{
			// コード管理名称テーブル読み込み失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0020KE,
					new String[] {"コード管理名称",
					"コード種別コード＝" + JZM0171Constant.CD00692
					+ "；コード区分＝" + cdKb});
			throw ex;
		}

		return result;
	}

	/**
	 * CSV分割用メソッド。指定された区切り文字で文字列配列に分割した値を返却します。<br>
	 * <br>
	 * @param argRec 対象文字列
	 * @param argDelimiter デリミタ文字
	 * @param argDel 消去文字列
	 * @return  String[] 対象文字列を分割して文字列配列にて返却。
	 */
	private String[] getCsvStrArray(String argRec, String argDelimiter, String argDel)
	{
		// 対象の文字列が有効文字列かどうかのチェック
		if (JDKCommonUtil.isNull(argRec))
		{
			return null;
		}
		
		String[] result = null;
		String[] buff = argRec.replace(argDel, "").split(argDelimiter);
		
		// splitで区切った文字列数を判定
		if (getCnt(argRec, argDelimiter) + 1 != buff.length)
		{
			
			// 本来あるべき配列数
			result = new String[getCnt(argRec, argDelimiter) + 1];
			
			System.arraycopy(buff, 0, result, 0, buff.length);
		}
		else
		{
			result = buff;
		}
		
		// null値を空文字に変換
		for (int j = 0; j < result.length; j++)
		{
			if (result[j] == null)
			{
				result[j] = "";
			}
		}

		// 結果の返却
		return result;
	}

	/**
	 * 指定文字列内に検索文字列がいくつ含まれるかを返却します。<br>
	 * <br>
	 * @param argStr 対象文字列
	 * @param argSearchStr 検索文字列
	 * @return  int 対象文字列内に検索文字列が存在する個数を返却。
	 */
	private int getCnt(String argStr, String argSearchStr)
	{
		int result = 0;
		
		if (JDKCommonUtil.isNull(argStr) || JDKCommonUtil.isNull(argSearchStr) || argStr.indexOf(argSearchStr) < 0)
		{
			return result;
		}
		
		result++;
		int i = argStr.indexOf(argSearchStr) + 1;
		while(i < argStr.length())
		{
			if (argStr.indexOf(argSearchStr, i) > i - 1)
			{
				i = argStr.indexOf(argSearchStr, i);
				result++;
			}
			i++;
		}
		
		return result;
	}

	/**
	 * メッセージコードに付加する関連情報の文字列を作成し返却します。<br>
	 * <br>
	 * @param argFileNm:エラーが存在したレコードのファイル名
	 * @param argRowNo:行番号
	 * @param argRec:エラーレコード
	 * @return String メッセージ内容
	 */
	private String getColErrMsg(String argFileNm, String argRowNo, String argRec)
	{
		StringBuffer result = new StringBuffer();

		result.append("法人配送情報受信ファイル名＝");
		result.append(argFileNm);
		result.append("；行番号＝");
		result.append(argRowNo);
		result.append("；レコード内容＝");
		result.append(argRec);
		
		return result.toString();
	}

	/**
	 * データ部項目チェック
	 * @param recLine　ファイルレコード
	 * @param filePath　ファイルパス
	 * @return boolean　true:エラーなし false:エラーあり
	 * @throws Exception
	 */
	private boolean isCheckParam(String recLine, String filePath) throws Exception
	{
		// 結果格納フラグ(false:エラー)
		boolean resultFlg = false;
		// レコードを配列にする。
		String[] rec = getCsvStrArray(recLine, CSV_DELIMITER, JDKStrConst.DOUBLE_QUAT);

		// 行番号
		String rowNo = rec[hjHaisoIfDataIndex.get(LINE_NO)];

		StringBuffer buff = new StringBuffer();
		buff.append(CSV_DELIMITER)
		    .append(JDKStrConst.DOUBLE_QUAT)
		    .append(rowNo)
		    .append(JDKStrConst.DOUBLE_QUAT);
		String line = recLine.substring(1, recLine.length() - buff.length());
		
		// チェック対象変数
		String param = null;
		// 登録契機契約異動区分
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.ADD_OPTNTY_KEI_IDO_DIV)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "5", "5"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{ADD_OPTNTY_KEI_IDO_DIV_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 登録契機契約異動年月日時分秒
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.ADD_OPTNTY_KEI_IDO_DTM)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"day_hour1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{ADD_OPTNTY_KEI_IDO_DTM_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 配送区分
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HAISO_DIV)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "2", "2"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HAISO_DIV_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 配送先名
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_NM)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "121"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HISOS_NM_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 配送先住所コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_AD_CD)];
		if (!JDKCommonUtil.isNull(param))
		{
			if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "11"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
			{
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
						new String[]{HISOS_AD_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
				return resultFlg;
			}
		}
		// 配送先郵便番号
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_PCD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "7", "7"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HISOS_PCD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 配送先都道府県名
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_STATE_NM)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "4"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HISOS_STATE_NM_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 配送先市区町村名
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_CITY_NM)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "12"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HISOS_CITY_NM_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 配送先大字通称名
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_OAZTSU_NM)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "18"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{HISOS_OAZTSU_NM_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 配送先字丁目名
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_AZCHO_NM)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "12"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{HISOS_AZCHO_NM_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 配送先番地号
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_BNCHIGO)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "61"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{HISOS_BNCHIGO_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 配送先住所補記・建物名
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_ADRTTM)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "45"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{HISOS_ADRTTM_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 配送先住所補記・部屋番号
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_ADRRM)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "15"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"name_address"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{HISOS_ADRRM_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 配送先電話番号
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_TELNO)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "9", "11"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"tel1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HISOS_TELNO_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 倉庫コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SOKO_CD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "6", "6"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{SOKO_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 棚コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SHELF_CD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "3", "3"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{SHELF_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 法人サービス契約受付番号
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_SVC_KEI_UK_NO)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "10", "10"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HOJIN_SVC_KEI_UK_NO_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 法人サービス契約受付番号子
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_SVC_KEI_UK_NOPARTS)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "10"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HOJIN_SVC_KEI_UK_NOPARTS_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 配送予定年月日
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HAISO_RSV_YMD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HAISO_RSV_YMD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// サービス契約番号
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SVC_KEI_NO)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "10", "10"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{SVC_KEI_NO_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 宅内機器型式コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "20"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji2"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{TAKNKIKI_MODEL_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 付属品型式コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HUZOKUHIN_MODEL_CD)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "20"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji2"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{HUZOKUHIN_MODEL_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 宅内機器セット品型コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_SETHIN_MODEL_CD)];
		if (!JDKCommonUtil.isNull(param))
		{
				if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "1", "20"})
						|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji2"}))
				{
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
							new String[]{TAKNKIKI_SETHIN_MODEL_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
					return resultFlg;
				}
		}
		// 数量
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.CNT)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"long_chk", "6"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{CNT_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 料金グループコード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PRC_GRP_CD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "2", "2"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{PRC_GRP_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 料金コースコード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PCRS_CD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "3", "3"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{PCRS_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 料金プランコード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PPLAN_CD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "6", "6"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{PPLAN_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 機器付加情報コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.KIKI_HUKA_INFO_CD)];
		if (!JDKCommonUtil.isNull(param))
		{
			if(!JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "3", "3"})
					|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
			{
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
						new String[]{KIKI_HUKA_INFO_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
				return resultFlg;
			}
		}
		// 法人販売種別コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_HAMBAI_SBT_CD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "2", "2"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HOJIN_HAMBAI_SBT_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		// 法人提供種別コード
		param = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_TK_SBT_CD)];
		if (JDKCommonUtil.isNull(param)
				|| !JBSbatCheckUtil.invoke(param, new String[]{"ketasuu2", "2", "2"})
				|| !JBSbatCheckUtil.invoke(param, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0090TW, 
					new String[]{HOJIN_TK_SBT_CD_COLNM, getColErrMsg(filePath, rowNo, line)});
			return resultFlg;
		}
		
		/** マスタ存在チェック */
		// 倉庫コード・棚コード
		if (!isSonzaiSokoDna(rec))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0570KW, 
					new String[]{SOKO_CD_COLNM + "、" + SHELF_CD_COLNM});
			return resultFlg;
		}
		// 料金コース・料金プラン
		if (!isPplan(rec))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0570KW, 
					new String[]{PCRS_CD_COLNM + "、" + PPLAN_CD_COLNM});
			return resultFlg;
		}
		// 宅内機器型式コード
		if (!isTakunaikikiModel(rec))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0570KW, 
					new String[]{TAKNKIKI_MODEL_CD_COLNM });
			return resultFlg;
		}
		
		return true;
	}

	/**
	 * 倉庫棚存在チェック
	 * @param rec　ファイルレコード
	 * @return boolean　true：存在する　false：存在しない
	 * @throws Exception
	 */
	private boolean isSonzaiSokoDna(String[] rec) throws Exception 
	{
		try
		{
			// バイント変数のリストを生成します
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// 倉庫コード
			paramList.setValue(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SOKO_CD)]);
			// 棚コード
			paramList.setValue(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SHELF_CD)]);
			// 基準日
			paramList.setValue(super.opeDate);

			// DBアクセスを実行します
			db_DK_M_SOKODNA.selectBySqlDefine(paramList, DK_M_SOKODNA_DK_SELECT_001);
			JBSbatCommonDBInterface  resultMap = db_DK_M_SOKODNA.selectNext();
			if (resultMap == null || "0".equals(resultMap.getString("COUNT")))
			{
				return false;
			}
		}
		catch (Exception ex)
		{
			// 倉庫棚テーブル読み込み失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0020KE,
					new String[] {"倉庫棚",
					"倉庫コード＝" + rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SOKO_CD)]
					+ "；棚コード＝" + rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SHELF_CD)]});
			throw ex;
		}
		return true;
	}
	
	/**
	 * 料金コース／料金プラン存在チェック
	 * @param rec　ファイルレコード
	 * @return boolean　true：存在する　false：存在しない
	 * @throws Exception
	 */
	private boolean isPplan(String[] rec) throws Exception 
	{
		try
		{
			// バイント変数のリストを生成します
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

			// 料金コースコード
			paramList.setValue("PCRS_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PCRS_CD)]);
			// 料金プランコード
			paramList.setValue("PPLAN_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PPLAN_CD)]);

			// DBアクセスを実行します
			JBSbatCommonDBInterface resultMap = db_KK_M_PPLAN.selectByPrimaryKeys(paramList);
			if (resultMap == null )
			{
				return false;
			}
		}
		catch (Exception ex)
		{
			// 料金プランテーブル読み込み失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0020KE,
					new String[] {"料金プラン",
					"料金コースコード＝" + rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PCRS_CD)]
					+ "；料金プランコード＝" + rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PPLAN_CD)]});
			throw ex;
		}
		return true;
	}

	/**
	 * 宅内機器型式コード存在チェック
	 * @param rec　ファイルレコード
	 * @return boolean　true：存在する　false：存在しない
	 * @throws Exception
	 */
	private boolean isTakunaikikiModel(String[] rec) throws Exception 
	{
		try
		{
			// バイント変数のリストを生成します
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// 宅内機器型式コード
			paramList.setValue("TAKNKIKI_MODEL_CD", rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)]);

			// DBアクセスを実行します
			JBSbatCommonDBInterface resultMap = db_ZM_M_TAKNKIKI_MODEL.selectByPrimaryKeys(paramList);
			if (resultMap == null )
			{
				return false;
			}
		}
		catch (Exception ex)
		{
			// 宅内機器型式テーブル読み込み失敗
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0020KE,
					new String[] {"宅内機器型式",
					"宅内機器型式コード＝" + rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)]});
			throw ex;
		}
		return true;
	}

	
	/**
	 * 法人配送情報ファイルの項目インデックスを作成する
	 * @return 法人配送情報受信インデックスMap
	 */
	private HashMap<String, Integer> getDataIndex()
	{
		hjHaisoIfDataIndex = new HashMap<String, Integer>();
		// レコード種別
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.REC_SBT, 0);
		// 登録契機契約異動区分
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.ADD_OPTNTY_KEI_IDO_DIV, 1);
		// 登録契機契約異動年月日時分秒
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.ADD_OPTNTY_KEI_IDO_DTM, 2);
		// 配送区分
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HAISO_DIV, 3);
		// 配送先名
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_NM, 4);
		// 配送先住所コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_AD_CD, 5);
		// 配送先郵便番号
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_PCD, 6);
		// 配送先都道府県名
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_STATE_NM, 7);
		// 配送先市区町村名
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_CITY_NM, 8);
		// 配送先大字通称名
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_OAZTSU_NM, 9);
		// 配送先字丁目名
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_AZCHO_NM, 10);
		// 配送先番地号
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_BNCHIGO, 11);
		// 配送先住所補記・建物名
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_ADRTTM, 12);
		// 配送先住所補記・部屋番号
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_ADRRM, 13);
		// 配送先電話番号
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HISOS_TELNO, 14);
		// 倉庫コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.SOKO_CD, 15);
		// 棚コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.SHELF_CD, 16);
		// 法人サービス契約受付番号
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HOJIN_SVC_KEI_UK_NO, 17);
		// 法人サービス契約受付番号子
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HOJIN_SVC_KEI_UK_NOPARTS, 18);
		// 配送予定年月日
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HAISO_RSV_YMD, 19);
		// サービス契約番号
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.SVC_KEI_NO, 20);
		// 宅内機器型式コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.TAKNKIKI_MODEL_CD, 21);
		// 付属品型式コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HUZOKUHIN_MODEL_CD, 22);
		// 宅内機器セット品型コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.TAKNKIKI_SETHIN_MODEL_CD, 23);
		// 数量
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.CNT, 24);
		// 料金グループコード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.PRC_GRP_CD, 25);
		// 料金コースコード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.PCRS_CD, 26);
		// 料金プランコード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.PPLAN_CD, 27);
		// 機器付加情報コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.KIKI_HUKA_INFO_CD, 28);
		// 法人販売種別コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HOJIN_HAMBAI_SBT_CD, 29);
		// 法人提供種別コード
		hjHaisoIfDataIndex.put(JBSbatDKIFM085.HOJIN_TK_SBT_CD, 30);
		// 行番号
		hjHaisoIfDataIndex.put(LINE_NO, 31);
		
		return hjHaisoIfDataIndex;
	}

	/**
	 * 在庫数チェック
	 * @param recLine　ファイルレコード
	 * @param haisoNo 配送番号
	 * @param zaikoMap 在庫マップ
	 * @return
	 * @throws Exception
	 */
	private boolean checkZaiko(String recLine, String haisoNo, Map<String, Integer> zaikoMap) throws Exception
	{
		// レコードを配列にする。
		String[] rec = getCsvStrArray(recLine, CSV_DELIMITER, JDKStrConst.DOUBLE_QUAT);

		int zaiko = getZaiko(rec, zaikoMap);
		if (zaiko < 0)
		{
			StringBuffer msg = new StringBuffer();
			msg.append(TAKNKIKI_MODEL_CD_COLNM).append("=").append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)]);
			msg.append(";");
			msg.append(HAISO_NO_COLNM).append("=").append(haisoNo);

			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0750KW, 
					new String[]{msg.toString()});
			return false;
		}

		int count = Integer.parseInt(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.CNT)]);
		if ( (zaiko - count) < 0)
		{
			StringBuffer msg = new StringBuffer();
			msg.append(TAKNKIKI_MODEL_CD_COLNM).append("=").append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)]);
			msg.append(";");
			msg.append(HAISO_NO_COLNM).append("=").append(haisoNo);

			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0750KW, 
					new String[]{msg.toString()});
			return false;
		}
		
		zaikoMap.put(getZaikoMapKey(rec), zaiko - count);
		return true;
	}
	
	
	/**
	 * バッチ用宅内機器物流在庫ワークを検索し在庫数を取得する
	 * @param rec　ファイルレコード
	 * @param zaikoMap　在庫マップ
	 * @return 在庫数
	 * @throws Exception 例外
	 */
	private Integer getZaiko(String[] rec, Map<String, Integer> zaikoMap) throws Exception
	{
		String keys = getZaikoMapKey(rec);
		if (zaikoMap.containsKey(keys))
		{
			return zaikoMap.get(keys);
		}
		
		// DBアクセスを実行します
		db_DK_T_BAT_TKKBRZK_WK.selectBySqlDefine(getZaikoKeyList(rec), DK_T_BAT_TKKBRZK_WK_DK_SELECT_001);
		JBSbatCommonDBInterface map = db_DK_T_BAT_TKKBRZK_WK.selectNext();
		if (JDKCommonUtil.isNull(map))
		{
			return -1;
		}

		// 在庫数を計算する
		int jzaikoCnt = Integer.parseInt(map.getString("JZAIKO_CNT"));						// 実在庫数
		int haisoUkJuchuCnt = Integer.parseInt(map.getString("HAISO_UK_JUCHU_CNT"));		// 配送受付受注数
		int haisoShukkaSjiCnt = Integer.parseInt(map.getString("HAISO_SHUKKA_SJI_CNT"));	// 配送出荷指示数
		int shelfMoveSjiCnt = Integer.parseInt(map.getString("SHELF_MOVE_SJI_CNT"));		// 棚移動指示数
		int ybkkhaiSjiCnt = Integer.parseInt(map.getString("YBKKHAI_SJI_CNT"));				// 予備機器配送指示数
		int ybkkhaiChuCnt = Integer.parseInt(map.getString("YBKKHAI_CHU_CNT"));				// 予備機器配送中
		int yobiKkshkaFinCnt = Integer.parseInt(map.getString("YOBI_KKSHKA_FIN_CNT"));		// 予備機器出荷完了数

		int zaiko = jzaikoCnt - (haisoUkJuchuCnt + haisoShukkaSjiCnt + shelfMoveSjiCnt + ybkkhaiSjiCnt + ybkkhaiChuCnt + yobiKkshkaFinCnt);
		zaikoMap.put(keys, zaiko);

		return zaiko;
	}

	/**
	 * 在庫数を求めるキーのリストを取得します
	 * @param rec　ファイルレコード
	 * @return キーのリスト
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface getZaikoKeyList(String[] rec) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(JOB_ID_YAK);
		paramList.setValue(KANRI_PLACE_SKCD_SOKO);
		paramList.setValue(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SOKO_CD)]);
		paramList.setValue(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SHELF_CD)]);
		paramList.setValue(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)]);

		return paramList;
	}
	
	/**
	 * 在庫数マップのキーを取得します
	 * @param rec　ファイルレコード
	 * @return キー
	 * @throws Exception
	 */
	private String getZaikoMapKey(String[] rec) throws Exception
	{
		JBSbatCommonDBInterface paramList = getZaikoKeyList(rec);
		StringBuffer keys = new StringBuffer();
		for (Object key : paramList.getList())
		{
			keys.append((String)key);
		}
		
		return keys.toString();
	}


	/**
	 * 宅内機器物流在庫情報更新バッチ送信ファイルの元ねたに値を設定する
	 * @param recLine ファイルレコード
	 * @param zaikoUpdListMap 宅内機器物流在庫情報更新バッチ送信ファイルの元ねた
	 * @return 宅内機器物流在庫情報更新バッチ送信ファイルの元ねた
	 * @throws Exception
	 */
	private Map<String, Map<String, String>> putZaikoUpdListMap(String recLine, Map<String, Map<String, String>> zaikoUpdListMap) throws Exception
	{
		// レコードを配列にする。
		String[] rec = getCsvStrArray(recLine, CSV_DELIMITER, JDKStrConst.DOUBLE_QUAT);
		
		String key = getZaikoMapKey(rec);
		Map<String, String> map = zaikoUpdListMap.get(key);
		if (map == null)
		{
			map = new HashMap<String, String>();
			zaikoUpdListMap.put(key, map);

			map.put(JBSbatDKIFM036.KANRI_PLACE_SKCD, KANRI_PLACE_SKCD_SOKO);
			map.put(JBSbatDKIFM036.KANRI_PLACE_CD, rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SOKO_CD)]);
			map.put(JBSbatDKIFM036.KANRI_PLACE_SHELF_CD, rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SHELF_CD)]);
			map.put(JBSbatDKIFM036.TAKNKIKI_MODEL_CD, rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.TAKNKIKI_MODEL_CD)]);
		}

		String totalCount = map.get(JBSbatDKIFM036.HAISO_UK_JUCHU_CNT);
		if (JDKCommonUtil.isNull(totalCount))
		{
			totalCount = "0";
		}

		String count = rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.CNT)];
		if (JDKCommonUtil.isNull(totalCount))
		{
			count = "0";
		}

		int buff = Integer.parseInt(totalCount) + Integer.parseInt(count);
		map.put(JBSbatDKIFM036.HAISO_UK_JUCHU_CNT, String.valueOf(buff));

		return zaikoUpdListMap;
	}

	/**
	 * 宅内機器物流在庫情報更新バッチ送信ファイル出力します。
	 * 
	 * @param zaikoUpdListMap 宅内機器物流在庫情報更新バッチ送信ファイルの元ねた
	 * @throws Exception
	 */
	private void putZaikoFile(Map<String, Map<String, String>> zaikoUpdListMap) throws Exception
	{
		// 在庫更新データが存在しない場合は処理を終了する
		if (zaikoUpdListMap == null || zaikoUpdListMap.size() == 0)
		{
			return;
		}

		// 宅内機器物流在庫情報更新バッチ送信ファイルを作成
		// ファイル名の作成
		String fileNm = GAI_IF_ID_TK_BRZK_UPD_FILE + "_" + JCCBatCommon.getSysDateTime() + ".csv";
		// ファイルパス（パス + ファイル名）の取得
		String midFilePath = 
			this.rnktPath(this.rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.ENV_GAIBU_SEND_DIR), GAI_IF_ID_TK_BRZK_UPD_FILE), fileNm);

		// ファイル形式の設定
		JBSbatOutputFileUtil outFile = new JBSbatOutputFileUtil(midFilePath);
		outFile.setEncode(JDKStrConst.ENCODE_SJIS);		// 文字コード
		outFile.setLine(JDKStrConst.LINE_LF);			// 改行コード

		try
		{
			// 宅内機器物流在庫情報更新バッチ送信ファイルを作成する
			outFile.createWriter();
		}
		catch (Exception ex)
		{
			// 宅内機器物流在庫情報更新バッチ送信ファイル作成失敗
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0030CE,
					new String[] {midFilePath});
			throw ex;
		}

		try
		{
			String defFile = JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND) + DEF_TK_BRZK_UPD;
			JBSbatDefFileUtil defDataUtil = new JBSbatDefFileUtil(defFile, outFile);

			// データ部生成
			JBSbatServiceInterfaceMap outDataMap = null;
			Map<String, String> zaikoUpdMap = new HashMap<String, String>();
			for (String key : zaikoUpdListMap.keySet())
			{
				zaikoUpdMap = zaikoUpdListMap.get(key);

				// データ部生成
				outDataMap = new JBSbatServiceInterfaceMap();

				// 管理場所識別コード
				outDataMap.set(JBSbatDKIFM036.KANRI_PLACE_SKCD
			        , JDKBatOutputFileUtil.encloseDQuot(zaikoUpdMap.get(JBSbatDKIFM036.KANRI_PLACE_SKCD).toString()));

				// 管理場所コード
				outDataMap.set(JBSbatDKIFM036.KANRI_PLACE_CD
			        , JDKBatOutputFileUtil.encloseDQuot(zaikoUpdMap.get(JBSbatDKIFM036.KANRI_PLACE_CD).toString()));

				// 管理場所棚コード
				outDataMap.set(JBSbatDKIFM036.KANRI_PLACE_SHELF_CD
			        , JDKBatOutputFileUtil.encloseDQuot(zaikoUpdMap.get(JBSbatDKIFM036.KANRI_PLACE_SHELF_CD).toString()));

				// 宅内機器型式コード
				outDataMap.set(JBSbatDKIFM036.TAKNKIKI_MODEL_CD
			        , JDKBatOutputFileUtil.encloseDQuot(zaikoUpdMap.get(JBSbatDKIFM036.TAKNKIKI_MODEL_CD).toString()));

				// 商品状態コード
				outDataMap.set(JBSbatDKIFM036.GDS_STAT_CD
					, JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.GDS_STAT_HMPINDNA_OTHER));

				// 実在庫数
				outDataMap.set(JBSbatDKIFM036.JZAIKO_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 配送受付受注数
				outDataMap.set(JBSbatDKIFM036.HAISO_UK_JUCHU_CNT
				        , JDKBatOutputFileUtil.encloseDQuot(zaikoUpdMap.get(JBSbatDKIFM036.HAISO_UK_JUCHU_CNT).toString()));

				// 配送出荷指示数
				outDataMap.set(JBSbatDKIFM036.HAISO_SHUKKA_SJI_CNT
				        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 予備機器配送指示数
				outDataMap.set(JBSbatDKIFM036.YBKKHAI_SJI_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 棚移動指示数
				outDataMap.set(JBSbatDKIFM036.SHELF_MOVE_SJI_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 予備機器配送中数
				outDataMap.set(JBSbatDKIFM036.YBKKHAI_CHU_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 当日入荷数
				outDataMap.set(JBSbatDKIFM036.TJITU_NYUKA_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 当日配送出荷数
				outDataMap.set(JBSbatDKIFM036.TJITU_HAISO_SHUKKA_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 当日解約撤去返品数
				outDataMap.set(JBSbatDKIFM036.TJITU_DSL_TEKKYO_HMPIN_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 当日故障交換返品数
				outDataMap.set(JBSbatDKIFM036.TJITU_TRB_KKN_HMPIN_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 棚移動入荷完了数
				outDataMap.set(JBSbatDKIFM036.SHELF_MOVE_NYUKA_FIN_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 棚移動出荷完了数
				outDataMap.set(JBSbatDKIFM036.SHELF_MOVE_SHUKKA_FIN_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));

				// 予備機器出荷完了数
				outDataMap.set(JBSbatDKIFM036.YOBI_KKSHKA_FIN_CNT
			        , JDKBatOutputFileUtil.encloseDQuot(JDKStrConst.ZAIKO_NONSET_VALUE));				
			
				// データの出力
				outFile.print(outDataMap, defDataUtil);
			}
		}
		catch (Exception ex)
		{
			// 宅内機器物流在庫情報更新バッチ送信ファイル書き込み失敗
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0050CE,
					new String[] {midFilePath});
			throw ex;
		}
		finally
		{
			// ファイルのクローズ
			try
			{
				outFile.close();
			}
			catch (Exception ex2)
			{
				super.logPrint.printDebugLog("ファイル書込みオブジェクトのクローズ失敗:" + midFilePath);
			}
		}
		
		// 宅内機器物流在庫情報更新バッチ送信中間（出荷指図情報登録）ファイルを出力
		this.putZaikoTensoRnkiFile(midFilePath);
	}

	/**
	 * 宅内機器物流在庫情報更新バッチ送信中間（法人配送）ファイルを出力します。
	 * 
	 * @param rnkiFilePath　連携ファイルパス
	 * @throws Exception
	 */
	private void putZaikoTensoRnkiFile(String rnkiFilePath) throws Exception
	{
		// 宅内機器物流在庫情報更新バッチ送信中間（法人配送）ファイルを作成
		// ファイル名の作成
		String fileNm = JOB_ID + "_" + GAI_IF_ID_TK_BRZK_UPD_FILE + ".csv";
		
		// ファイルパス（パス + ファイル名）の取得
		String midFilePath = 
			this.rnktPath(JBSbatAplConst.getAplConstValue(JDKStrConst.ENV_MID_DIR), fileNm);

		// ファイル形式の設定
		JBSbatOutputFileUtil outFile = new JBSbatOutputFileUtil(midFilePath);
		outFile.setEncode(JDKStrConst.ENCODE_SJIS);		// 文字コード
		outFile.setLine(JDKStrConst.LINE_LF);			// 改行コード

		try
		{
			// 宅内機器物流在庫情報更新バッチ送信中間（出荷指図情報登録）ファイルを作成する
			outFile.createWriter();
		}
		catch (Exception ex)
		{
			// 宅内機器物流在庫情報更新バッチ送信中間（法人配送）ファイル作成失敗
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0030CE, new String[] {midFilePath});
			throw ex;
		}

		try
		{
			// ファイル定義の取得
			String defFile = JBSbatAplConst.getAplConstValue(JDKStrConst.DK_DIR_IND) + DEF_TK_BRZK_UPD_MID;
			JBSbatDefFileUtil defDataUtil = new JBSbatDefFileUtil(defFile, outFile);

			// データ部生成
			JBSbatServiceInterfaceMap outDataMap = null;

			// データ部生成
			outDataMap = new JBSbatServiceInterfaceMap();

			// ファイル名
			outDataMap.set(JBSbatDKIFM091.FILE_NM, rnkiFilePath);

			// データの出力
			outFile.print(outDataMap, defDataUtil);
		}
		catch (Exception ex)
		{
			// 宅内機器物流在庫情報更新バッチ送信中間（法人配送）ファイル書き込み失敗
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EDKB0050CE, new String[] {midFilePath});
			throw ex;
		}
		finally
		{
			// ファイルのクローズ
			try
			{
				outFile.close();
			}
			catch (Exception ex2)
			{
				super.logPrint.printDebugLog("ファイル書込みオブジェクトのクローズ失敗:" + midFilePath);
			}
		}
	}

	/**
	 * レコードをキー単位でリストに詰める。
	 * @param recLine　対象レコード
	 * @param sortMap　レコードを格納するマップ
	 * @return レコードを格納したマップ
	 */
	private Map<String, List<String>> putMap(String recLine, Map<String, List<String>> sortMap)
	{
		// レコードを配列にする
		String[] rec = getCsvStrArray(recLine, CSV_DELIMITER, JDKStrConst.DOUBLE_QUAT);
		StringBuffer sbKey = new StringBuffer();

		// マップのキーを設定する
		sbKey.append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.REC_SBT)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HOJIN_SVC_KEI_UK_NO)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HAISO_RSV_YMD)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_STATE_NM)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_CITY_NM)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_OAZTSU_NM)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_AZCHO_NM)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_BNCHIGO)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_ADRTTM)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_ADRRM)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HAISO_DIV)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_NM)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_AD_CD)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_PCD)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.HISOS_TELNO)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.SOKO_CD)])
			 .append(rec[hjHaisoIfDataIndex.get(JBSbatDKIFM085.PRC_GRP_CD)]);
		
		List<String> recList = sortMap.get(sbKey.toString());
		if (JDKCommonUtil.isNull(recList))
		{
			recList = new ArrayList<String>();
			sortMap.put(sbKey.toString(), recList);
		}
		
		recList.add(recLine);
		
		return sortMap;
	}

	/**
	 * マップがセットされているツリーマップをコピーする
	 * @param map　コピー元のマップ
	 * @return Map　コピーしたマップ
	 */
	private Map<String, Map<String, String>> copyTreeMapMap(Map<String, Map<String, String>> map)
	{
		Map<String, Map<String, String>> newMap = new TreeMap<String, Map<String, String>>();
		
		for (String key : map.keySet())
		{
			 Map<String, String> childMap = new HashMap<String, String>();
			 newMap.put(key, childMap);
			 
			 for (String childKey : map.get(key).keySet())
			 {
				 childMap.put(childKey, map.get(key).get(childKey));
			 }
		}
		
		return newMap;
	}

	/**
	 * リストがセットされているツリーマップをコピーする
	 * @param map　コピー元のマップ
	 * @return Map　コピーしたマップ
	 */
	private Map<String, List<String>> copyTreeMapList(Map<String, List<String>> map)
	{
		Map<String, List<String>> newMap = new TreeMap<String, List<String>>();
		
		for (String key : map.keySet())
		{
			 List list = new ArrayList<String>();
			 newMap.put(key, list);
			 list.addAll(map.get(key));
		}
		
		return newMap;
	}

	/**
	 * パス文字列の連結
	 * 連結するパス文字列にパス区切り文字の設定を制御する。
	 * @param path1 パス文字列
	 * @param path2 パス文字列
	 * @return 連結したパス文字列
	 */
	private String rnktPath(String path1, String path2)
	{
		String pathDlmt = "/";
		if (path1.indexOf("\\") > -1 || path2.indexOf("\\") > -1)
		{
			pathDlmt = "\\";
		}
		if (!path1.endsWith(pathDlmt))
		{
			return path1 + pathDlmt + path2;
		}
		return path1 + path2;
	}

	/**
	 * 受信フラグファイルの存在確認
	 * @param fileName 受信ファイル
	 * @return true:存在する / false:存在しない
	 */
	private boolean existsFlgFile(String fileName)
	{
		return  (new File(fileName.replaceAll(".csv", ".flg")).exists());
	}
	
}
