/*********************************************************************
*  All Rights reserved,Copyright (c) Fujitsu ,2016					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSBatKKNTTSijiKnmKaishuKjSksi
*	ソースファイル名	：JBSBatKKNTTSijiKnmKaishuKjSksi.java
*	作成者				：富士通　
*	作成日				：2016年05月24日
*＜機能概要＞
*　ＮＴＴ支持金物改修情報作成処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v25.00.00   2016/06/01   FJ) 栗秋    【ANK-2779-00-00】eo顧客管理システムへの申込一括登録対応（ＮＴＴ指示金物改修）
*   v25.00.00   2016/06/16   FJ) 栗秋    【IT2-2016-0000036】ＮＴＴ支持金物ＤＭ発送ＣＳＶファイルの住所２にNULLが含まれて出力された。
*   v31.00.00   2017/11/24   FJ) 岡      【ANK-3136-00-00】OPMSハードウエア保守切れ対応(STEP2-2)
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.common.JKKBatNTTSijiKnmCaseFileSksi;
import eo.business.common.JKKBatOutputUtil;
import eo.business.util.file.JBSbatKKIFM587;
import eo.business.util.file.JBSbatKKIFM710;
import eo.business.util.file.JBSbatKKIFM711;
import eo.business.util.file.JBSbatKKIFM712;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatCC_T_EFILE_KANRI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCCFileUtil;
import eo.common.util.JKKStringUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.application.JCCbatFrameworkException;
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;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSBatKKNTTSijiKnmKaishuKjSksi extends JBSbatBusinessService
{
	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
	/** テーブル(サービス契約回線内訳)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_KAISEN_UW = "KK_T_SVKEI_KAISEN_UW";
	/** テーブル(サービス契約工事案件)*/
	private static final String D_TBL_NAME_KU_T_SVKEI_KOJIAK = "KU_T_SVKEI_KOJIAK";
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";
	/** テーブル(督促)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU = "CH_T_TOKUSOKU";
	/** テーブル(データ一括登録管理)*/
	private static final String D_TBL_NAME_ZM_T_DATAIKTTRK_KNRI = "ZM_T_DATAIKTTRK_KNRI";
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String CC_T_EFILE_KANRI_KK_SELECT_001 = "KK_SELECT_001";
	/** SQL定義キー(KK_SELECT_004)*/
	private static final String CH_T_TOKUSOKU_KK_SELECT_004 = "KK_SELECT_004";
	/** SQL定義キー(KK_SELECT_007)*/
	private static final String ZM_M_CD_NM_KANRI_KK_SELECT_004 = "KK_SELECT_004";
	/** SQL定義キー(KK_SELECT_291)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_291 = "KK_SELECT_291";
	/** SQL定義キー(KK_SELECT_292)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_292 = "KK_SELECT_292";
	/** SQL定義キー(KK_SELECT_048)*/
	private static final String KK_T_SVKEI_KAISEN_UW_KK_SELECT_048 = "KK_SELECT_048";
	/** SQL定義キー(KK_SELECT_019)*/
	private static final String KU_T_SVKEI_KOJIAK_KK_SELECT_019 = "KK_SELECT_019";
	/** SQL定義キー(KK_SELECT_002)*/
	private static final String ZM_T_DATAIKTTRK_KNRI_KK_SELECT_002= "KK_SELECT_002";
	/** SQL定義キー(KK_SELECT_062)*/
	private static final String CK_T_CUST_KK_SELECT_062 = "KK_SELECT_062";
	/** SQL定義キー(KK_SELECT_052)*/
	private static final String KK_T_SVKEI_KAISEN_UW_KK_SELECT_052 = "KK_SELECT_052";

	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;
	/** テーブルアクセスクラス(督促)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU = null;
	/** テーブルアクセスクラス(サービス契約工事案件)*/
	private JBSbatSQLAccess db_KU_T_SVKEI_KOJIAK = null;
	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	/** テーブルアクセスクラス(サービス契約回線内訳)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_KAISEN_UW = null;
	/** テーブルアクセスクラス(ディレイド処理依頼)*/
	private JBSbatSQLAccess db_ZM_T_DATAIKTTRK_KNRI = null;
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** コード種別コード（ＮＴＴ支持金物改修工事登録結果コード） */
	private static final String CD_SBT_CD_ADD_RSLT_CD = "CD01693";
	/** コード種別コード（ＮＴＴ支持金物改修工事登録エラーコード） */
	private static final String CD_SBT_CD_ADD_ERR_CD  = "CD01692";
	/** コード種別コード（電話連絡希望時間帯コード） */
	private static final String CD_SBT_CD_TEL_RRK_KIBO_TIME_CD  = "CD00560";	
	/** コード種別コード（連絡先種別コード） */
	private static final String CD_SBT_CD_RRKS_SHITEI_CD = "CD00254";
	// ANK-3136-00-00 ADD START
	private static final String CD_SBT_CD_YH = "CD00001";
	// ANK-3136-00-00 ADD END
	/** 異動区分 移設*/
	private static final String IDO_DIV = "00021";

	/** ＮＴＴ支持金物改修工事登録エラーコード ファイルフォーマット */
	private static final String ERR_CD_E010 = "E010";
	/** ＮＴＴ支持金物改修工事登録エラーコード サービス契約番号 */
	private static final String ERR_CD_E020 = "E020";
	/** ＮＴＴ支持金物改修工事登録エラーコード 工事案件連絡事項 */
	private static final String ERR_CD_E021 = "E021";
	/** ＮＴＴ支持金物改修工事登録エラーコード 工事案件備考１ */
	private static final String ERR_CD_E022 = "E022";
	/** ＮＴＴ支持金物改修工事登録エラーコード 工事案件備考２ */
	private static final String ERR_CD_E023 = "E023";
	/** ＮＴＴ支持金物改修工事登録エラーコード 申込者名 */
	private static final String ERR_CD_E024 = "E024";
	/** ＮＴＴ支持金物改修工事登録エラーコード 宅内調査希望アポ期限年月日 */
	private static final String ERR_CD_E025 = "E025";
	/** ＮＴＴ支持金物改修工事登録エラーコード 電話連絡希望時間帯コード */
	private static final String ERR_CD_E026 = "E026";
	/** ＮＴＴ支持金物改修工事登録エラーコード 工事アポ連絡先指定コード */
	private static final String ERR_CD_E027 = "E027";
	/** ＮＴＴ支持金物改修工事登録エラーコード 工事アポ連絡先電話番号 */
	private static final String ERR_CD_E028 = "E028";
	// ANK-3136-00-00 ADD START
	/** ＮＴＴ支持金物改修工事登録エラーコード 宅内調査要否 */
	private static final String ERR_CD_E029 = "E029";
	/** ＮＴＴ支持金物改修工事登録エラーコード 設計要否 */
	private static final String ERR_CD_E030 = "E030";
	// ANK-3136-00-00 ADD END
	/** ＮＴＴ支持金物改修工事登録エラーコード E100 */
	private static final String ERR_CD_E100 = "E100";
	/** ＮＴＴ支持金物改修工事登録エラーコード E110 */
	private static final String ERR_CD_E110 = "E110";
	/** ＮＴＴ支持金物改修工事登録エラーコード E120 */
	private static final String ERR_CD_E120 = "E120";
	/** ＮＴＴ支持金物改修工事登録エラーコード E130 */
	private static final String ERR_CD_E130 = "E130";
	/** ＮＴＴ支持金物改修工事登録エラーコード E160 */
	private static final String ERR_CD_E160 = "E160";
	/** ＮＴＴ支持金物改修工事登録エラーコード E170 */
	private static final String ERR_CD_E170 = "E170";
	/** ＮＴＴ支持金物改修工事登録エラーコード E900 */
	private static final String ERR_CD_E900 = "E900";
	
	/** ＮＴＴ支持金物改修工事登録結果コード（正常） */
	private static final String ADD_RSLT_OK = "0";
	/** ＮＴＴ支持金物改修工事登録結果コード（チェックエラー） */
	private static final String ADD_RSLT_NG = "1";

	/** ＮＴＴ支持金物改修工事登録エラーコード格納マップ */
	private HashMap<String, String> addErrCdMap  = null;
	/** ＮＴＴ支持金物改修工事登録結果コード格納マップ */
	private HashMap<String, String> addRsltCdMap = null;
	/** 電話連絡希望時間帯コード格納マップ */
	private HashMap<String, String> telRrkKiboTimeCdMap  = null;
	/** 連絡先種別コード格納マップ */
	private HashMap<String, String> rrksShiteiCdMap = null;
	// ANK-3136-00-00 ADD START
	/** 要否格納マップ */
	private HashMap<String, String> yhMap = null;
	// ANK-3136-00-00 ADD END

	// ＮＴＴ支持金物ＤＭ発送ＣＳＶファイル関連 ------------------------------------------------------------------------
	/** ファイル出力文字列(様) */
	private static final String FILE_SAMA = "様";
	/** ＮＴＴ支持金物ＤＭ発送ＣＳＶファイル名 **/
	private static final	String	DMSENDFILENAME = "ＮＴＴ支持金物ＤＭ発送ＣＳＶファイル";
	/** ファイル名で使用するシステム日付 **/
	private String sysDate = null;
	/** CASEファイル出力件数 */
	private int outmapCnt = 0;
	/** ＮＴＴ支持金物ＤＭ発送ＣＳＶファイル削除日数 **/
	private String efileDelYmd = "20991231";
	/** ファイルコード **/
	private String FILE_CD = "0000";
	/** ファイルパス **/
	private  String fPath = "";
	/** 出力ファイルリストにデータを出力する */
	private List<Map<String, Object>> outMapList = new ArrayList<Map<String, Object>>();
	/** ＮＴＴ支持金物ＤＭ発送ＣＳＶファイル処理管理番号 **/
	private static final String TRAN_KANRI_NO_DMSEND = "000000000152";

	//  ------------------------------------------------------------------------

	/** 料金プラン　ホームタイプ */
	private static List<String> HOME_PLAN_LIST = new ArrayList<String>();
	static{
		HOME_PLAN_LIST.add("PA3101"); //１番号コース　（ホームタイプ）
		HOME_PLAN_LIST.add("PA3201"); //２番号コース　（ホームタイプ）
	}

	/**
	 * SQLKEY(KK_SELECT_007)で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_KK_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_KK_SELECT_004);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
	}

	/**
	 * SQLKEY(KK_SELECT_291)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	予約適用年月日
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_291(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_291);
	}
	/**
	 * SQLKEY(KK_SELECT_292)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約回線内訳番号
	 *		 	サービス契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_292(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_292);
	}


	/**
	 * SQLKEY(KK_SELECT_048)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	回線内訳使用開始年月日
	 *		 	回線内訳使用開始年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_048(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVKEI_KAISEN_UW.selectBySqlDefine(paramList, KK_T_SVKEI_KAISEN_UW_KK_SELECT_048);
	}

	/**
	 * SQLKEY(KK_SELECT_016)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_SVKEI_KOJIAK_KK_SELECT_019(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_SVKEI_KOJIAK.selectBySqlDefine(paramList, KU_T_SVKEI_KOJIAK_KK_SELECT_019);
	}
	
	/**
	 * SQLKEY(KK_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	課金先適用開始年月日
	 *		 	課金先適用終了年月日
	 *		 	督促管理開始年月日
	 *		 	督促管理終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_TOKUSOKU_KK_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_CH_T_TOKUSOKU.selectBySqlDefine(paramList, CH_T_TOKUSOKU_KK_SELECT_004);
	}
	/**
	 * ディレイド処理依頼で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_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_T_DATAIKTTRK_KNRI.selectBySqlDefine(paramList, ZM_T_DATAIKTTRK_KNRI_KK_SELECT_002);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ファイル番号				FILE_NO
	 *		 	処理管理番号				TRN_KANRI_NO
	 *		 	電子ファイル管理番号				EFILE_KANRI_NO
	 *		 	ファイル名				FILE_NM
	 *		 	ファイルサイズ				FILE_SIZE
	 *		 	データ件数				DATA_CNT
	 *		 	ファイル登録年月日時分秒				FILE_ADD_DTM
	 *		 	ファイル削除年月日				FILE_DEL_YMD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("FILE_NO", setParam[0]);
		setMap.setValue("TRN_KANRI_NO", setParam[1]);
		setMap.setValue("EFILE_KANRI_NO", setParam[2]);
		setMap.setValue("FILE_NM", setParam[3]);
		setMap.setValue("FILE_SIZE", setParam[4]);
		setMap.setValue("DATA_CNT", setParam[5]);
		setMap.setValue("FILE_ADD_DTM", setParam[6]);
		setMap.setValue("FILE_DEL_YMD", setParam[7]);
		setMap.setValue("ADD_DTM", setParam[8]);
		setMap.setValue("ADD_OPEACNT", setParam[9]);
		setMap.setValue("UPD_DTM", setParam[10]);
		setMap.setValue("UPD_OPEACNT", setParam[11]);
		setMap.setValue("DEL_DTM", setParam[12]);
		setMap.setValue("DEL_OPEACNT", setParam[13]);
		setMap.setValue("MK_FLG", setParam[14]);
	
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.insertByPrimaryKeys(setMap);
	}
	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	電子ファイル管理番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCC_T_EFILE_KANRI_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CC_T_EFILE_KANRI.selectBySqlDefine(paramList, CC_T_EFILE_KANRI_KK_SELECT_001);
	}
	/**
	 * SQLKEY(KK_SELECT_062)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	バッチ運用日付
	 *		 	サービス契約番号
	 *		 	サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KK_SELECT_062(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_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_062);
	}

	/**
	 * SQLKEY(KK_SELECT_052)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	回線内訳使用開始年月日
	 *		 	回線内訳使用終了年月日
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_052(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVKEI_KAISEN_UW.selectBySqlDefine(paramList, KK_T_SVKEI_KAISEN_UW_KK_SELECT_052);
	}

	/**
	 * ダウンロードファイル管理テーブルの登録を行います。
	 * <br>
	 * @param eFileKanriNo 電子ファイル管理番号
	 * @param fileName   ファイル名
	 * @param filePath   ファイルパス
	 * @param rowCnt     データ件数
	 * @throws Exception 
	 */
// 
	private void insertZM_T_DL_FILE_KANRI(String eFileKanriNo, String fileName, String filePath, int rowCnt, String trn_kanri_no) throws Exception
// 
	{
		JBSbatCommonDBInterface eFileInfo = getEfileKanriInfo(eFileKanriNo);
		
		// パラメータ設定
		Object[] prm = new Object[15];
		prm[0] = JKKBatCommon.getFormatedNextSeq(commonItem, "SEQ_FILE_NO", "", 12);
		prm[1] = trn_kanri_no;
		prm[2] = eFileKanriNo;
		prm[3] = fileName;
		prm[4] = JCCFileUtil.getFileSize(filePath);
		prm[5] = String.valueOf(rowCnt);
		prm[6] = eFileInfo.getString(JBSbatCC_T_EFILE_KANRI.ADD_DTM);
		prm[7] = eFileInfo.getString(JBSbatCC_T_EFILE_KANRI.FILE_DEL_YMD);
		prm[8] = JBSbatDateUtil.getSystemDateTimeStamp();
		prm[9] = "SYSTEM";
		prm[10] = JBSbatDateUtil.getSystemDateTimeStamp();
		prm[11] = "SYSTEM";
		prm[12] = null;
		prm[13] = null;
		prm[14] = "0";

		executeZM_T_DL_FILE_KANRI_PKINSERT(prm);
	}
	
	/**
	 * CASEファイルに出力するデータを設定する。<br>
	 * @param  inMap 入力ファイルの１レコード分を格納したHashMap
	 * @return JBSbatServiceInterfaceMap CASEファイル記載内容１件分
	 * @throws Exception
	 */
	private HashMap<String, Object> setCaseFileData(HashMap<String, Object> inMap ,String kojiak_no) throws Exception
	{
		HashMap<String, Object> result = new HashMap<String, Object>();
		
		// サービス契約番号
		result.put(JKKBatNTTSijiKnmCaseFileSksi.SVC_KEI_NO, inMap.get(JBSbatKKIFM710.SVC_KEI_NO));
		result.put("KOJIAK_NO", kojiak_no);
		
		return result;
	}

	/**
	 * 電子ファイル管理スキーマより、電子ファイル管理の情報を取得します。
	 * 
	 * @param eFileNO 		電子ファイル管理番号
	 * @return dbMap		電子ファイル管理の情報
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private JBSbatCommonDBInterface getEfileKanriInfo(String eFileKanriNo) throws Exception
	{
		Object[] param = new Object[1];
		param[0] = eFileKanriNo;
		
		// SQL実行
		executeCC_T_EFILE_KANRI_KK_SELECT_001(param);
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CC_T_EFILE_KANRI.selectNext();
		
		if (dbMap == null)
		{
			// DB未存在エラー
			String[] msgParam = new String[]
			{ JBSbatCC_T_EFILE_KANRI.TABLE_NAME };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0720KW, msgParam);
		}
		return dbMap;
	}

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);
		db_CH_T_TOKUSOKU = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_SVKEI_KAISEN_UW = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_KAISEN_UW);
		db_KU_T_SVKEI_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_SVKEI_KOJIAK);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_ZM_T_DATAIKTTRK_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DATAIKTTRK_KNRI);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);

		// 初期化
		addErrCdMap  = new HashMap<String, String>();
		addRsltCdMap = null;
		telRrkKiboTimeCdMap = null;
		rrksShiteiCdMap = null;
		// ANK-3136-00-00 ADD START
		yhMap = null;
		// ANK-3136-00-00 ADD END
		
		//システム日付を取得する。
		sysDate = JCCBatCommon.getSysDateTime();

		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		List<HashMap<String, Object>> shoriIraiList = new ArrayList<HashMap<String, Object>>();
		shoriIraiList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, this.jobid);
		if (shoriIraiList == null)
		{
			// 対象データが存在しないため処理終了
			return null;
		}
		// ＮＴＴ支持金物改修工事登録エラーコード取得
		addErrCdMap = getCdNmKanri(CD_SBT_CD_ADD_ERR_CD);

		// ＮＴＴ支持金物改修工事登録結果コード取得
		addRsltCdMap = getCdNmKanri(CD_SBT_CD_ADD_RSLT_CD);

		// 電話連絡希望時間帯コード取得
		telRrkKiboTimeCdMap = getCdNmKanri(CD_SBT_CD_TEL_RRK_KIBO_TIME_CD);
		
		// 連絡先種別コード取得
		rrksShiteiCdMap = getCdNmKanri(CD_SBT_CD_RRKS_SHITEI_CD);
		// ANK-3136-00-00 ADD START
		// 要否取得
		yhMap = getCdNmKanri(CD_SBT_CD_YH);
		// ANK-3136-00-00 ADD END

		int infoCount = 0;
		int errorCount = 0;

		for(HashMap<String, Object> shoriIrai:shoriIraiList)
		{
			// ＮＴＴ支持金物改修工事依頼結果リスト
			ArrayList<JBSbatServiceInterfaceMap> nttSijKjReqRsltList = new ArrayList<JBSbatServiceInterfaceMap>();

			// CASEファイル出力用データリスト
			ArrayList<HashMap<String, Object>> caseFileDataList = new ArrayList<HashMap<String, Object>>();

			// チェックエラー存在フラグ（ＮＴＴ支持金物結果ＣＳＶファイル出力時の判定処理に使用）
			boolean checkErr = false;

			// 入力ファイルの定義取得
			String inDefFileName = JBSbatAplConst.getAplConstValue("IND") + "KKIFM710.def";
			// ディレイド処理依頼番号
			String shoriIraiNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);
			// 入力電子ファイル管理番号
			String fileKanriNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO);
			
			// 電子ファイル管理よりＮＴＴ支持金物ＣＳＶファイルの復元
			String inFilePath = JCCBatCommon.searchDenshiFile(commonItem, fileKanriNo);
			// ReadFileOpen
			JBSbatInputFileUtil inFileUtil = new JBSbatInputFileUtil(inFilePath);
			JBSbatDefFileUtil inFileDef = new JBSbatDefFileUtil(inDefFileName, inFileUtil);
			
			super.logPrint.printDebugLog("処理日  ＝" + super.opeDate);
			super.logPrint.printDebugLog("ディレイド処理依頼番号  ＝" + shoriIraiNo);
			super.logPrint.printDebugLog("入力電子ファイル管理番号＝" + fileKanriNo);
			super.logPrint.printDebugLog("ＮＴＴ支持金物ＣＳＶファイルのファイルパス＝" + inFilePath);
			
			// Readerオブジェクトを生成する。
			inFileUtil.createReader();
			
			// 入力ファイルのレコード件数
			int inFileRecordCnt = 0;

			while (inFileUtil.ready()) 
			{
				// ファイルから１レコード取得
				String line = inFileUtil.readLine();
				
				// レコード件数カウント
				inFileRecordCnt++;
				
				// １レコードの情報をマップに格納
				JBSbatServiceInterfaceMap recordMap = inFileDef.lineToObject(line, inFileUtil, inFileRecordCnt);
				
				// サービス契約情報
				HashMap<String, Object> svcKeiMap = new HashMap<String, Object>();
				// サービス契約回線内訳情報
				HashMap<String, Object> svkeiKaisenUwMap = new HashMap<String, Object>();
				// 登録チェック処理
				String errCd = checkMain(recordMap, svcKeiMap, svkeiKaisenUwMap);
				
				// チェックエラーの場合
				if (!errCd.isEmpty())
				{
					super.logPrint.printDebugLog("エラー発生：" + infoCount);
					nttSijKjReqRsltList.add(setNTTSijKjReqRslt(recordMap.getMap(), errCd));
					checkErr = true;
					infoCount++;
					// 次レコードを処理
					continue;
				}

				// 工事案件登録のためサービスを呼び出す
				try
				{
					HashMap<String, Object> outputMap = invokeService(recordMap.getMap(), svcKeiMap, svkeiKaisenUwMap);
					String returnCode = outputMap.get(JCCBatchEsbInterface.RETURN_CODE).toString();
					if(!JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode))
					{
						// エラーコード設定
						nttSijKjReqRsltList.add(setNTTSijKjReqRslt(recordMap.getMap(), ERR_CD_E900));
						checkErr = true;
						// エラーログ出力
						commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1220CI,
								new String[]{"サービス契約番号：" + (String)recordMap.getMap().get(JBSbatKKIFM710.SVC_KEI_NO)});
						infoCount++;
						// 次レコードを処理
						continue;
					}
					// 新設工事案件番号を取得する
					HashMap<String, Object> map = (HashMap<String, Object>)outputMap.get("KKSV083601CC");
					String new_kojiak_no = (String)map.get("new_kojiak_no");
					caseFileDataList.add(setCaseFileData(recordMap.getMap(),new_kojiak_no));
				}
				catch (Throwable e)
				{
					// エラーコード設定
					nttSijKjReqRsltList.add(setNTTSijKjReqRslt(recordMap.getMap(), ERR_CD_E900));
					checkErr = true;
					//フレームワークがエラーログにスタックトレースを出さないので、独自にエラーログ出力する
					super.logPrint.printErrMsg(JPCBatchMessageConstant.ECCB0110CE, e, new String[]{});
					errorCount++;
					// 次レコードを処理
					continue;
				}

				// 正常に登録したため、正常としてファイル出力を行う
				nttSijKjReqRsltList.add(setNTTSijKjReqRslt(recordMap.getMap(), null));	

			}
			
			// ＮＴＴ支持金物結果ＣＳＶファイル出力
			if(!JKKStringUtil.isNullEmpty(nttSijKjReqRsltList))
			{
				// ファイル名などの出力ファイル情報をフリー項目から取得
				String[] outMidFile = freeItem.split(JKKBatConst.S_PARAM_DELIM);
				
				JBSbatOutputItem outputBean = new JBSbatOutputItem();
				for (JBSbatServiceInterfaceMap outMap : nttSijKjReqRsltList) {
					outMap.setOutFlg(true);
					outputBean.addOutMapList(outMap);
				}
				
				
				// ＮＴＴ支持金物結果ＣＳＶファイルの出力先パスを取得（スラッシュ付）
				String outFilePath = outMidFile[0];
				
				// ＮＴＴ支持金物結果ＣＳＶファイルのファイル名を編集
				String sysDateTimeStamp = JCCBatCommon.getSysDateTimeStamp();
				String timeStamp = sysDateTimeStamp.substring(8);
				String opeDateTime = super.onlineOpeDate + timeStamp;
				String outFileName =  "KKIFM711001_" + opeDateTime + ".csv";

				// ＮＴＴ支持金物結果ＣＳＶファイルをファイル出力する
				JKKBatOutputUtil.editOutFile(super.commonItem, outputBean, "KKIFM711", outFilePath, outFileName);

				// CASEファイル出力
				if(!JKKStringUtil.isNullEmpty(caseFileDataList))
				{
					JKKBatNTTSijiKnmCaseFileSksi.sksiCaseFile(commonItem, caseFileDataList);
				}
				// ＤＭ発送ファイル出力
				if(!JKKStringUtil.isNullEmpty(caseFileDataList))
				{
					// ＮＴＴ支持金物ＤＭ発送ＣＳＶファイルにヘッダを出力する
					outMapList.add(setDmFileHeader());

					ArrayList<HashMap<String, Object>> arrayList = caseFileDataList;

					for (int i = 0; i < arrayList.size(); i++){
						HashMap<String, Object> outMap = arrayList.get(i);

						// ＮＴＴ支持金物ＤＭ発送ＣＳＶファイルにデータを出力
						outMapList.add(setDmFileData(outMap));
						outmapCnt++;
					}

					// ファイル出力用リストを返却用パラメータにセットする
					fPath = putKKFile(outMapList, false);

					//電子ファイル管理テーブル、ダウンロード管理テーブルに登録する。
					addEfileKanri();
				}

				String outFileFullPath = outFilePath + outFileName;
				
				// 処理管理番号の取得を行う
				String trn_kanri_no = "000000000151";
				super.logPrint.printDebugLog("処理依頼番号：" + shoriIraiNo);
				executeZM_T_DATAIKTTRK_KNRI_KK_SELECT_002(new String[]{shoriIraiNo});
				JBSbatCommonDBInterface dateIkKriInfo = db_ZM_T_DATAIKTTRK_KNRI.selectNext();
				if (null == dateIkKriInfo)
				{
					// 何もしない
				}
				else
				{
					trn_kanri_no = dateIkKriInfo.getString("TRN_KANRI_NO");
				}
				// 電子ファイル管理に登録する日本語のファイル名
				String outFileNhngName = "ＮＴＴ支持金物結果ＣＳＶファイル_" + opeDateTime + ".csv";
				if (checkErr)
				{
					// チェックエラーありのため、ディレイド処理依頼結果コードを"業務エラー"で更新
					HashMap<String, String> retMap = JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, "2", outFileFullPath);
					// エラーファイルの電子ファイル管理番号取得して、ダウンロードファイル管理に登録
					String eFileKanriNo = retMap.get("EFILE_KAMRI_NO");
					if(!JKKStringUtil.isNullBlank(eFileKanriNo))
					{
						insertZM_T_DL_FILE_KANRI(eFileKanriNo, outFileNhngName, outFileFullPath, inFileRecordCnt, trn_kanri_no);
					}
				}
				else
				{
					// チェックエラーなしのため、ディレイド処理依頼結果コードを"完了"で更新
					JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, "1", null);

					super.logPrint.printDebugLog("ファイルのフルパス：" + outFileFullPath);

					// ＮＴＴ支持金物結果ＣＳＶファイルを電子ファイル管理スキーマに設定
					String[] denshiRet = JCCBatCommon.createDenshiFile(super.commonItem, "0000", outFileFullPath, null);
					
					// ダウンロードファイル管理に登録
					insertZM_T_DL_FILE_KANRI(denshiRet[0], outFileNhngName, outFileFullPath, inFileRecordCnt, trn_kanri_no);
				}
			}
		}

		// 登録チェックエラーが存在する場合
		if (0 < infoCount)
		{
			// 「%1% ファイル出力件数 = %2%」
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0760AI,
					new String[] { "ＮＴＴ支持金物ＣＳＶファイル", Integer.toString(infoCount) + "(INFO)" });
		}
		
		// エラー（業務エラー、システムエラー）が存在する場合
		if (0 < errorCount)
		{
			// 単一サービス呼び出しパターンの場合は、エラー件数を設定することで警告終了する
			commonItem.setErrorCount(errorCount);
		}

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * コード名称管理より該当のコード種別のコードを取得します。
	 * <br>
	 * @param cdSbtCd  コード種別コード
	 * @return 
	 * @throws Exception 
	 */
	private HashMap<String, String> getCdNmKanri(String cdSbtCd) throws Exception
	{
		HashMap<String, String> resultMap  = new HashMap<String, String>();
		
		Object[] prm = new Object[]{cdSbtCd, super.opeDate, super.opeDate};
		executeZM_M_CD_NM_KANRI_KK_SELECT_004(prm);
		
		// 取得したコード名称管理の内容をハッシュテーブルに格納する
		JBSbatCommonDBInterface dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
		while(dbMap != null)
		{
			// 「コード区分」をキーに「コード区分名」を設定する
			resultMap.put(
					dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV), dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
			dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
		}
		
		return resultMap;
	}
	/**
	 * 登録チェックを行います。
	 * <br>
	 * @param recordMap NTT支持金物改修工事依頼リストの１レコードの情報
	 * @param svcKeiMap サービス契約情報（返却用）
	 * @param svkeiKaisenUwMap サービス契約回線内訳情報（返却用）
	 * @return NTT支持金物改修工事登録エラーコード
	 */
	private String checkMain(JBSbatServiceInterfaceMap recordMap,
			HashMap<String, Object> svcKeiMap,
			HashMap<String, Object> svkeiKaisenUwMap)
	throws Exception
	{
		// (a)ファイルチェック

		// フォーマットチェック
		if (recordMap.isInputErrorFlg())
		{
			// １レコードの項目数が異なる
			super.logPrint.printDebugLog("１レコードの項目数が異なる");
			return ERR_CD_E010;
		}
		
		// 必須・属性・桁数チェック
		String result = singleCheck(recordMap.getMap());
		
		if (!JKKStringUtil.isNullBlank(result))
		{
			super.logPrint.printDebugLog("必須・属性・桁数チェックエラー");
			return result;
		}

		// (b) サービス契約チェック

		// サービス契約情報を取得
		String svcKeiNo = recordMap.getString(JBSbatKKIFM710.SVC_KEI_NO);
		executeKK_T_SVC_KEI_KK_SELECT_291(new String[]{super.opeDate, svcKeiNo});
		JBSbatCommonDBInterface svcKeiInfo = db_KK_T_SVC_KEI.selectNext();

		// サービス契約に存在しないお客様IDの場合、チェックエラーとする
		if (null == svcKeiInfo)
		{
			super.logPrint.printDebugLog("サービス契約に存在しないお客様ID");
			return ERR_CD_E100;
		}

		// サービス契約情報を戻す
		svcKeiMap.putAll(svcKeiInfo.getMap());

		// サービス契約回線内訳情報を取得
		executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_048(new String[]{svcKeiNo, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface svkeiKaisenUwInfo = db_KK_T_SVKEI_KAISEN_UW.selectNext();
		
		if (null == svkeiKaisenUwInfo)
		{
			// 利用中のサービス契約回線内訳が取得できない場合は、サービス契約が存在しないエラーとする
			super.logPrint.printDebugLog("利用中のサービス契約回線内訳が取得できない");
			return ERR_CD_E100;
		}
		
		// サービス契約回線内訳情報を戻す
		svkeiKaisenUwMap.putAll(svkeiKaisenUwInfo.getMap());

		// サービス契約の契約内容が移設工事対象外である場合、チェックエラーとする
		String prcGrpCd = svcKeiInfo.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD);
		String pplanCd = svcKeiInfo.getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
		String mansionBukkenNo = svkeiKaisenUwInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.MANSION_BUKKEN_NO);

		// 料金グループコードが「eo光ネットホームタイプ」
		// 料金グループコードが「eo光電話」で料金プランコードが「ホームタイプの料金プラン」
		// 料金グループコードが「eo光テレビ(K-CAT) 」、「eo光テレビ(KCN) 」、「eo光テレビ(再送信) 」でマンション物件番号が空白
		// 上記のいずれでもない場合、チェックエラーとする
		if (!((JKKStrConst.CD00133_02.equals(prcGrpCd))
				|| (JKKStrConst.CD00133_10.equals(prcGrpCd) && HOME_PLAN_LIST.contains(pplanCd))
				|| ((JKKStrConst.CD00133_11.equals(prcGrpCd)||JKKStrConst.CD00133_12.equals(prcGrpCd)||JKKStrConst.CD00133_13.equals(prcGrpCd)) && (null == mansionBukkenNo || ("".equals(mansionBukkenNo))))
				))
		{
			super.logPrint.printDebugLog("契約内容が対象外");
			return ERR_CD_E110;
		}
		
		// サービス契約の契約状態が「サービス提供中」以外の場合、チェックエラーとする
		String svcKeiStat = svcKeiInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT);
		if (!JKKStrConst.CD00037_SVCTK_CHU.equals(svcKeiStat))
		{
			super.logPrint.printDebugLog("サービス契約の契約状態が「サービス提供中」以外");
			return ERR_CD_E120;
		}

		// 電話契約の場合、同一回線のネット契約（「解約済、キャンセル済」以外）が存在する場合、チェックエラーとする
		String svcKeiKaisenUcwkNo = svkeiKaisenUwInfo.getString(JBSbatKK_T_SVKEI_KAISEN_UW.SVC_KEI_KAISEN_UCWK_NO);
		String svcCd = svcKeiInfo.getString(JBSbatKK_T_SVC_KEI.SVC_CD);
		// サービスコードが「電話サービス」の場合
		if (JKKStrConst.CD00130_02.equals(svcCd))
		{
			executeKK_T_SVC_KEI_KK_SELECT_292(new String[]{svcKeiKaisenUcwkNo, svcKeiNo, super.opeDate});
			JBSbatCommonDBInterface netSvcKeiInfo = db_KK_T_SVC_KEI.selectNext();
			if (0 < Integer.parseInt(netSvcKeiInfo.getString("CNT")))
			{
				super.logPrint.printDebugLog("電話契約で同一回線のネット契約（「解約済、キャンセル済」以外）が存在する");
				return ERR_CD_E130;
			}
		}

		// (c) 工事案件チェック

		// 仕掛中工事(移設)が存在する場合、チェックエラーとする
		executeKU_T_SVKEI_KOJIAK_KK_SELECT_019(new String[]{svcKeiNo, super.opeDate});
		JBSbatCommonDBInterface svkeiKojiakInfo = db_KU_T_SVKEI_KOJIAK.selectNext();
		if (0 < Integer.parseInt(svkeiKojiakInfo.getString("CNT")))
		{
			super.logPrint.printDebugLog("仕掛中工事が存在する");
			return ERR_CD_E160;
		}

		// (d) 督促チェック

		// 督促ステータスが「強制解約予告済」以上の場合、チェックエラーとする
		executeCH_T_TOKUSOKU_KK_SELECT_004(new String[]{svcKeiNo, super.opeDate, super.opeDate, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface tokusokuInfo = db_CH_T_TOKUSOKU.selectNext();
		if (0 < Integer.parseInt(tokusokuInfo.getString("CNT")))
		{
			super.logPrint.printDebugLog("督促ステータスが「強制解約予告済」以上");
			return ERR_CD_E170;
		}

		// チェックOK
		return "";
	}
	/**
	 * 入力情報（ＮＴＴ支持金物改修工事依頼）の単項目チェックを行います。<br>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @return エラー内容に該当するNTT支持金物改修工事登録エラーコード。エラーなしの場合には空文字を返却。
	 */
	private String singleCheck(HashMap rsMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// サービス契約番号項目チェック
		strValue = (String)rsMap.get(JBSbatKKIFM710.SVC_KEI_NO);
		
		// 必須チェック
		if(JKKStringUtil.isNullBlank(strValue))
		{
			return ERR_CD_E020;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1","10"}))
		{
			return ERR_CD_E020;
		}
		
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			return ERR_CD_E020;
		}

		// 工事案件連絡事項項目チェック
		strValue = (String)rsMap.get(JBSbatKKIFM710.KOJIAK_RRK_JIKO);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 桁数チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "100"}))
			{
				return ERR_CD_E021;
			}
			// 属性チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"zenkaku"}))
			{
				return ERR_CD_E021;
			}
		}
		
		// 工事案件備考１項目チェック
		strValue = (String)rsMap.get(JBSbatKKIFM710.KOJIAK_BIKO_1);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 桁数チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "100"}))
			{
				return ERR_CD_E022;
			}
			// 属性チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"zenkaku"}))
			{
				return ERR_CD_E022;
			}
		}
		
		// 工事案件備考２項目チェック
		strValue = (String)rsMap.get(JBSbatKKIFM710.KOJIAK_BIKO_2);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 桁数チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "100"}))
			{
				return ERR_CD_E023;
			}
			// 属性チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"zenkaku"}))
			{
				return ERR_CD_E023;
			}
		}
		
		// 申込者名項目チェック
		strValue = (String)rsMap.get(JBSbatKKIFM710.MSKMSHA_NM);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 桁数チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
			{
				return ERR_CD_E024;
			}
			// 属性チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"zenkaku"}))
			{
				return ERR_CD_E024;
			}
		}

		// 宅内調査希望アポ期限年月日項目チェック
		strValue = (String)rsMap.get(JBSbatKKIFM710.TAKCHO_KIBO_APO_KIGEN_YMD);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 桁数チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1","8"}))
			{
				return ERR_CD_E025;
			}
			// 属性チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
			{
				return ERR_CD_E025;
			}
		}
		
		// 電話連絡希望時間帯コード項目チェック
		strValue = (String)rsMap.get(JBSbatKKIFM710.TEL_RRK_KIBO_TIME_CD);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 属性チェック
			if(!telRrkKiboTimeCdMap.containsKey(strValue))
			{
				return ERR_CD_E026;
			}
		}
		
		// 工事アポ連絡先指定コード
		strValue = (String)rsMap.get(JBSbatKKIFM710.KOJI_APO_RRKS_SHITEI_CD);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 属性チェック
			if(!rrksShiteiCdMap.containsKey(strValue))
			{
				return ERR_CD_E027;
			}
		}
		
		// 工事アポ連絡先電話番号
		strValue = (String)rsMap.get(JBSbatKKIFM710.KOJI_APO_RRKS_TELNO);
		
		if(!JKKStringUtil.isNullBlank(strValue))
		{
			// 桁数チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "10", "11"}))
			{
				return ERR_CD_E028;
			}
			// 属性チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"tel2"}))
			{
				return ERR_CD_E028;
			}
		}
		
		// ANK-3136-00-00 ADD START
		// 宅内調査要否
		strValue = (String)rsMap.get(JBSbatKKIFM710.TAKCHO_YH);
		
		// 必須チェック
		if(JKKStringUtil.isNullBlank(strValue))
		{
			return ERR_CD_E029;
		}
		// 属性チェック
			if(!yhMap.containsKey(strValue))
		{
			return ERR_CD_E029;
		}
		
		// 設計要否
		strValue = (String)rsMap.get(JBSbatKKIFM710.DSGN_YH);
		
		// 必須チェック
		if(JKKStringUtil.isNullBlank(strValue))
		{
			return ERR_CD_E030;
		}
		// 属性チェック
		if(!yhMap.containsKey(strValue))
		{
			return ERR_CD_E030;
		}
		// ANK-3136-00-00 ADD END
		
		return null;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ＮＴＴ支持金物結果ＣＳＶファイル内容をマップオブジェクトへ設定する。<br>
	 * @param  inMap 入力ファイルの１レコード分を格納したHashMap
	 * @param  errCd チェックエラーコード（正常の場合はNULLもしくは空文字を設定）
	 * @return JBSbatServiceInterfaceMap 出力ファイル記載内容１件分
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setNTTSijKjReqRslt(HashMap<String, Object> inMap, String errCd) throws Exception
	{
		JBSbatServiceInterfaceMap result = new JBSbatServiceInterfaceMap();
		
		String addRslt   = addRsltCdMap.get(ADD_RSLT_OK);
		String addYmd    = super.opeDate;
		String addErrRsn = "";
		
		if(!JKKStringUtil.isNullBlank(errCd))
		{
			// チェックエラーのため、エラー用の出力内容を設定
			addRslt   = addRsltCdMap.get(ADD_RSLT_NG);
			addYmd    = "";
			addErrRsn = addErrCdMap.get(errCd);
		}
		
		// サービス契約番号（お客様ＩＤ）
		result.set(JBSbatKKIFM711.SVC_KEI_NO, inMap.get(JBSbatKKIFM710.SVC_KEI_NO));
		// 工事案件連絡事項（連絡事項）
		result.set(JBSbatKKIFM711.KOJIAK_RRK_JIKO, inMap.get(JBSbatKKIFM710.KOJIAK_RRK_JIKO));
		// 工事案件備考１
		result.set(JBSbatKKIFM711.KOJIAK_BIKO_1, inMap.get(JBSbatKKIFM710.KOJIAK_BIKO_1));
		// 工事案件備考２
		result.set(JBSbatKKIFM711.KOJIAK_BIKO_2, inMap.get(JBSbatKKIFM710.KOJIAK_BIKO_2));
		// 申込者名（申込者）
		result.set(JBSbatKKIFM711.MSKMSHA_NM, inMap.get(JBSbatKKIFM710.MSKMSHA_NM));
		// 宅内調査希望アポ期限年月日（工事アポ予定完了期日）
		result.set(JBSbatKKIFM711.TAKCHO_KIBO_APO_KIGEN_YMD, inMap.get(JBSbatKKIFM710.TAKCHO_KIBO_APO_KIGEN_YMD));
		// 電話連絡希望時間帯コード（工事アポ希望時間）
		result.set(JBSbatKKIFM711.TEL_RRK_KIBO_TIME_CD, inMap.get(JBSbatKKIFM710.TEL_RRK_KIBO_TIME_CD));
		// 工事アポ連絡先指定コード（アポ希望連絡先）
		result.set(JBSbatKKIFM711.KOJI_APO_RRKS_SHITEI_CD, inMap.get(JBSbatKKIFM710.KOJI_APO_RRKS_SHITEI_CD));
		// 工事アポ連絡先電話番号（アポ希望連絡先番号）
		result.set(JBSbatKKIFM711.KOJI_APO_RRKS_TELNO, inMap.get(JBSbatKKIFM710.KOJI_APO_RRKS_TELNO));
		// 登録結果
		result.set(JBSbatKKIFM711.ADD_RSLT,    addRslt);
		// 登録日
		result.set(JBSbatKKIFM711.ADD_YMD,     addYmd);
		// 登録エラーコード
		result.set(JBSbatKKIFM711.ADD_ERR_CD,  errCd);
		// 登録エラー理由
		result.set(JBSbatKKIFM711.ADD_ERR_RSN, addErrRsn);
		result.setOutFlg(true);
		
		return result;
	}
	/**
	 * NTT支持金物ＤＭ送付対象ファイルのヘッダを設定する
	 * @return convertMap
	 * @throws Exception
	 */
	private Map<String, Object> setDmFileHeader() throws Exception
	{
		Map<String, Object> convertMap = new HashMap<String, Object>();
		
		// お客様名
		convertMap.put(JBSbatKKIFM712.CUST_NM, "契約者名");
		// 敬称
		convertMap.put(JBSbatKKIFM712.KEISHO, "敬称（様)");
		// 郵便番号
		convertMap.put(JBSbatKKIFM712.PCD, "郵便番号");
		// 住所１
		convertMap.put(JBSbatKKIFM712.STATE_CITY_NM, "現住所");
		// 住所２
		convertMap.put(JBSbatKKIFM712.OAZTSU_BNCHIGO, "現住所　住所２");
		// 住所３
		convertMap.put(JBSbatKKIFM712.ADRTTM_ADRRM, "現住所　住所３");
		// お客様ＩＤ
		convertMap.put(JBSbatKKIFM712.CUST_ID, "お客様ID");
		// 工事案件番号
		convertMap.put(JBSbatKKIFM712.KOJIAK_NO, "工事案件番号");
		
		return convertMap;
	}

	/**
	 * ファイル出力型式に変換する。
	 * @param dateMap
	 * @return convertMap
	 * @throws Exception
	 */
	private Map<String, Object> setDmFileData(HashMap<String, Object> arrayList) throws Exception
	{
		// サービス契約番号
		String svcKeiNo = (String) arrayList.get(JBSbatKKIFM710.SVC_KEI_NO);
		// サービス契約回線内訳の回線場所情報を取得
		String[] svkeiKaisenKey = {super.opeDate,
									super.opeDate,
									svcKeiNo
							};
		this.executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_052(svkeiKaisenKey);
		JBSbatCommonDBInterface svkeiKaisenMap = db_KK_T_SVKEI_KAISEN_UW.selectNext();
		
		Map<String, Object> convertMap = new HashMap<String, Object>();
		StringBuffer sb = new StringBuffer();
		
		// お客様名
		convertMap.put(JBSbatKKIFM712.CUST_NM, getCustNm(svcKeiNo));
		// 敬称
		convertMap.put(JBSbatKKIFM712.KEISHO,  FILE_SAMA);
		// 郵便番号
		sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_PCD").substring(0, 3));
		sb.append("-");
		sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_PCD").substring(3, 7));
		convertMap.put(JBSbatKKIFM712.PCD, sb.toString());
		sb.delete(0, 9999);
		// 住所１
		// IT2-2016-0000036 MDD START
		//sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_STATE_NM"));
		//sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_CITY_NM"));
		if(null != svkeiKaisenMap.getString("KAISEN_PLACE_STATE_NM")){
			sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_STATE_NM"));
		}
		if(null != svkeiKaisenMap.getString("KAISEN_PLACE_CITY_NM")){
			sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_CITY_NM"));
		}
		// IT2-2016-0000036 MDD END
		convertMap.put(JBSbatKKIFM712.STATE_CITY_NM, sb.toString());
		sb.delete(0, 9999);
		// 住所２
		// IT2-2016-0000036 MDD START
		//sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_OAZTSU_NM"));
		//sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_AZCHO_NM"));
		//sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_BNCHIGO"));
		if(null != svkeiKaisenMap.getString("KAISEN_PLACE_OAZTSU_NM")){
			sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_OAZTSU_NM"));
		}
		if(null != svkeiKaisenMap.getString("KAISEN_PLACE_AZCHO_NM")){
			sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_AZCHO_NM"));
		}
		if(null != svkeiKaisenMap.getString("KAISEN_PLACE_BNCHIGO")){
			sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_BNCHIGO"));
		}
		// IT2-2016-0000036 MDD END
		convertMap.put(JBSbatKKIFM712.OAZTSU_BNCHIGO, sb.toString());
		sb.delete(0, 9999);
		// 住所３
		if(null != svkeiKaisenMap.getString("KAISEN_PLACE_ADRTTM")){
			sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_ADRTTM"));
		}
		if(null != svkeiKaisenMap.getString("KAISEN_PLACE_ADRRM")){
			sb.append(svkeiKaisenMap.getString("KAISEN_PLACE_ADRRM"));
		}
		convertMap.put(JBSbatKKIFM712.ADRTTM_ADRRM, sb.toString());
		sb.delete(0, 9999);
		// お客様ＩＤ
		convertMap.put(JBSbatKKIFM712.CUST_ID, svcKeiNo);
		// 工事案件番号
		convertMap.put(JBSbatKKIFM712.KOJIAK_NO, arrayList.get(JBSbatKKIFM712.KOJIAK_NO));
		
		return convertMap;
	}

	/**
	 * 電子ファイルスキーマ登録
	 * @throws Exception
	 */
	private void addEfileKanri() throws Exception
	{
		// 電子ファイル管理スキーマ登録
		String[] eFileInfo = new String[]{};
		try
		{
			eFileInfo = JCCBatCommon.createDenshiFile(commonItem, FILE_CD, fPath, efileDelYmd);
		}
		catch(JCCbatFrameworkException jccBatFraExc)
		{
			
			// ファイル作成に失敗した場合(FWに渡す)
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0510CE, new String[] {"電子ファイル管理",
					"(FILE_CD=".concat(FILE_CD).concat(",filePath=").concat(fPath)});
			throw jccBatFraExc;  
			
		}
		
		// ダウンロードファイル管理スキーマ登録
		insZmTDlFileKanri(eFileInfo);
	}
	
	/**
	 * ダウンロードファイル管理スキーマに登録します。
	 * 
	 * @param eFileInfo 電子ファイル管理情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void insZmTDlFileKanri(String[] eFileInfo) throws Exception
	{

		JBSbatCommonDBInterface param = new JBSbatCommonDBInterface();
		//  1.ファイル番号
		param.setValue(JCCBatCommon.getFormatedNextSeq(commonItem,
				JKKStrConst.SEQ_FILE_NO, JKKStrConst.SEQ_PREFIX_SEQ_FILE_NOO, JKKStrConst.SEQ_LEN_SEQ_FILE_NO));
		//  2.処理管理番号
		param.setValue(TRAN_KANRI_NO_DMSEND);
		//  3.電子ファイル管理番号
		param.setValue(eFileInfo[0]);
		//  4.ファイル名
		String[] fileName = fPath.split("/", -1);
		param.setValue(fileName[fileName.length - 1]);
		//  5.ファイルサイズ
		param.setValue(JCCFileUtil.getFileSize(fPath));
		//  6.データ件数
		param.setValue(outmapCnt);
		//  7.ファイル登録年月日時分秒
		param.setValue(eFileInfo[1]);
		//  8.ファイル削除年月日
		param.setValue(null);
		//  9.登録年月日時分秒
		param.setValue(null);
		// 10.登録オペレータアカウント
		param.setValue(null);
		// 11.更新年月日時分秒
		param.setValue(null);
		// 12.更新オペレータアカウント
		param.setValue(null);
		// 13.削除年月日時分秒
		param.setValue(null);
		// 14.削除オペレータアカウント
		param.setValue(null);
		// 15.無効フラグ
		param.setValue(null);
		//登録運用年月日
		param.setValue("ADD_UNYO_YMD");
		//登録処理ID
		param.setValue("ADD_TRN_ID");
		//更新運用年月日
		param.setValue("UPD_UNYO_YMD");
		//更新処理ID
		param.setValue("UPD_TRN_ID");
		//削除運用年月日
		param.setValue(null);
		//削除処理ID
		param.setValue(null);
		
		// SQL実行
		executeZM_T_DL_FILE_KANRI_PKINSERT(param.getList().toArray());
	}

	/**
	 * ファイルの出力処理
	 * @param fileType 出力ファイルタイプ
	 * @param dataList 出力データ
	 * @param doubleFlg
	 * @return 出力ファイル名
	 * @throws Exception 例外
	 */
	private String putKKFile(List<Map<String, Object>> dataList, boolean doubleFlg) throws Exception
	{
		String filePath = rnktPath(JBSbatAplConst.getAplConstValue(JKKStrConst.MID_ENV_DIR), "ＮＴＴ支持金物ＤＭ発送ＣＳＶファイル_yyyyMMddhhmmss.csv");
		filePath = filePath.replaceAll(JKKStrConst.FILE_TIMESTAMP_FORMAT, getOpeDateTime());
		super.logPrint.printDebugLog(filePath);

		// 出力ファイル形式設定
		JBSbatOutputFileUtil outFile = new JBSbatOutputFileUtil(filePath);
		outFile.setEncode(JKKStrConst.ENCODE_SJIS);		// 文字コード
		outFile.setLine(JKKStrConst.LINE_LF);			// 改行コード

		try
		{
			outFile.createWriter();
		}
		catch (IOException ex)
		{
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(DMSENDFILENAME + "作成失敗");
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0500CE, 
					new String[] {"(ファイルパス:" + filePath +  ")"});
		}

		try
		{
			String defFile = this.rnktPath(JBSbatAplConst.getAplConstValue(JKKStrConst.KK_DIR_IND), "KKIFM712.def");
			JBSbatDefFileUtil defDataUtil = new JBSbatDefFileUtil(defFile, outFile);

			JBSbatServiceInterfaceMap outDataMap = null;
			String data = "";
			
			for (Map<String, Object> dataMap : dataList)
			{
				outDataMap = new JBSbatServiceInterfaceMap();

				for (String key : dataMap.keySet())
				{
					data = (String)dataMap.get(key);
					if (doubleFlg)
					{
						data = encloseDQuot(data);
					}
					
					outDataMap.set(key, data);
				}

				outFile.print(outDataMap, defDataUtil);
			}

		}
		catch (IOException ex)
		{
			commonItem.getConnection().rollback();
			commonItem.getLogPrint().printBusinessErrorLog(DMSENDFILENAME + "書き込み失敗");
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0970CE, new String[] {""});
		}
		finally
		{
			// ファイルのクローズ
			try
			{
				outFile.close();
			}
			catch (IOException ex2)
			{
				commonItem.getConnection().rollback();
				super.logPrint.printDebugLog("ファイル書込みオブジェクトのクローズ失敗:" + filePath);
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0970CE, new String[] {""});
			}
		}
		
		return filePath;
	}

	/**
	 * パス文字列の連結
	 * 連結するパス文字列にパス区切り文字の設定を制御する。
	 * @param path1 パス文字列
	 * @param path2 パス文字列
	 * @return 連結したパス文字列
	 */
	private String rnktPath(String path1, String path2)
	{
		String pathDlmt = JKKStrConst.PATH_DLMT_UNIX;
		if (path1.indexOf(JKKStrConst.PATH_DLMT_WIN) > -1 || path2.indexOf(JKKStrConst.PATH_DLMT_WIN) > -1)
		{
			pathDlmt = JKKStrConst.PATH_DLMT_WIN;
		}
		if (!path1.endsWith(pathDlmt))
		{
			return path1 + pathDlmt + path2;
		}
		return path1 + path2;
	}
	
	/**
	 * 運用日付時分秒の取得を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.運用日付(yyyyMMdd) + システム日時(hhmmss)を返却します。<br>
	 * </pre>
	 * <p>
	 * @return String 運用日付時分秒。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getOpeDateTime() throws Exception 
	{
		StringBuffer dateTime = new StringBuffer();
		
		dateTime.append(sysDate);

		return dateTime.toString();
	}
	
	/**
	 * ダブルクォーテーション囲みを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で囲み対象文字を設定します。<br>
	 * </pre>
	 * <p>
	 * @param strTarget     囲み対象文字
	 * @return strRec       文字列連結結果を返却します。
	 */
	private String encloseDQuot(String strTarget)
	{
		if (null == strTarget)
		{
			return "\"\"";
		}
		return "\"" + strTarget + "\"";
	}
	/**
	 * お客様テーブルからお客様名を取得します。
	 * <br>
	 * @param svcKeiNo サービス契約番号
	 * @return お客様名
	 * @throws Exception
	 */
	private String getCustNm(String svcKeiNo) throws Exception
	{
		String custNm = "";

		String[] whereParam =
		{
			super.opeDate,
			svcKeiNo,
			svcKeiNo,
			super.opeDate
		};
		executeCK_T_CUST_KK_SELECT_062(whereParam);

		JBSbatCommonDBInterface resultMap = db_CK_T_CUST.selectNext();

		if (!isExistCheckCK_T_CUST_KK_SELECT_062(resultMap))
		{
			super.logPrint.printDebugLog("お客様検索　検索条件：サービス契約番号="
					+ svcKeiNo + ",予約適用年月日=" + super.opeDate);
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
			throw new JBSbatBusinessException(
					JPCBatchMessageConstant.EKKB0150JE, new String[]{"お客様"});
		}
		else
		{
			custNm = resultMap.getString("CUST_NM");
		}

		return custNm;
	}
	/**
	 *入力情報（お客様）の存在チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.存在チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		nRsCnt:レコード数
	 * </pre>
	 * <p>
	 * @param rsDB レコードデータオブジェクト。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isExistCheckCK_T_CUST_KK_SELECT_062(JBSbatCommonDBInterface rsDB)
	{
		int nRsCnt = 0;
		if(rsDB != null)
		{
			nRsCnt = 1;
		}
		// 存在チェックを行います(SQLKEY=KK_SELECT_062)
		if(nRsCnt != 1)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0150JE", new String[]{"お客様"});
			return false;
		}
		return true;
	}

	/**
	 * サービス呼出処理
	 * @param recordMap サービスの入力情報
	 * @param svcKeiMap サービス契約情報
	 * @param svkeiKaisenUwMap サービス契約回線内訳情報
	 * @param kktkSvcKeiMap 機器提供サービス契約情報
	 * @return サービスの処理結果
	 * @throws Exception
	 */
	private HashMap<String, Object> invokeService(HashMap<String, Object> recordMap,
					HashMap<String, Object> svcKeiMap,
					HashMap<String, Object> svkeiKaisenUwMap)
			throws Exception
			{
				// サービス呼び出し時の引数を生成
				HashMap<String, Object> paramMap = new HashMap<String, Object>();
				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, "KKSV0836");
				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, "KKSV0836OP");
				
				HashMap<String, Object> inputMap = new HashMap<String, Object>();
				
				// オンラインの部品呼出時にfixedtextで指定する情報
				inputMap.put("KKSV083601CC", getSvcInfo(recordMap, svcKeiMap, svkeiKaisenUwMap));
				
				// 工事情報（工事案件受付CC用のインプット）
				inputMap.put("kojiakInfoMap", getKojiInfo(recordMap, svcKeiMap, svkeiKaisenUwMap));
				
				HashMap<String, Object> outputMap = new HashMap<String, Object>();
				
				// サービス呼び出し
				JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);

				return outputMap;
				
			}
	/**
	 * サービス情報
	 * @param recordMap NTT支持金物改修工事依頼リストの１レコードの情報
	 * @param svcKeiMap サービス契約情報
	 * @param svkeiKaisenUwMap サービス契約回線内訳情報
	 * @throws Exception
	 */
	private HashMap<String, Object> getSvcInfo(
			HashMap<String, Object> recordMap,
			HashMap<String, Object> svcKeiMap,
			HashMap<String, Object> svkeiKaisenUwMap
	) throws Exception
	{
		HashMap<String, Object> result = new HashMap<String, Object>();
		
		// サービス契約番号
		result.put("svc_kei_no", recordMap.get(JBSbatKKIFM587.SVC_KEI_NO));
		
		// 工事案件連絡事項
		result.put("kojiak_rrk_jiko", recordMap.get(JBSbatKKIFM587.KOJIAK_RRK_JIKO));
		
		// 工事案件備考1
		result.put("kojiak_biko_1", recordMap.get(JBSbatKKIFM587.KOJIAK_BIKO_1));
		
		// 工事案件備考2
		result.put("kojiak_biko_2", recordMap.get(JBSbatKKIFM587.KOJIAK_BIKO_2));
		
		// 申込者名
		result.put("mskmsha_nm", recordMap.get(JBSbatKKIFM587.MSKMSHA_NM));
		
		// 宅内調査希望アポ期限年月日
		result.put("takcho_kibo_apo_kigen_ymd", recordMap.get(JBSbatKKIFM587.TAKCHO_KIBO_APO_KIGEN_YMD));
		
		// 電話連絡希望時間帯コード
		result.put("tel_rrk_kibo_time_cd", recordMap.get(JBSbatKKIFM587.TEL_RRK_KIBO_TIME_CD));
		
		// 工事アポ連絡先指定コード
		result.put("koji_apo_rrks_shitei_cd", recordMap.get(JBSbatKKIFM587.KOJI_APO_RRKS_SHITEI_CD));
		
		// 工事アポ連絡先電話番号
		result.put("koji_apo_rrks_telno", recordMap.get(JBSbatKKIFM587.KOJI_APO_RRKS_TELNO));
		
		// 異動区分
		result.put("ido_div", IDO_DIV);
		
		// SYSID
		result.put("sysid", svcKeiMap.get(JBSbatKK_T_SVC_KEI.SYSID));
		
		// サービス契約回線内訳番号
		result.put("svc_kei_kaisen_ucwk_no", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.SVC_KEI_KAISEN_UCWK_NO));
		
		// 工事情報マップキー
		result.put("koji_info_key", "kojiakInfoMap");

		// 工事受付コード(007:回線変える)
		result.put("koji_uk_cd", "007");

		// 工事受付詳細コード（線移動）
		result.put("koji_uk_dtl_cd", "90");

		//料金コースコード
		result.put("pcrs_cd", svcKeiMap.get(JBSbatKK_T_SVC_KEI.PCRS_CD));

		//座標補正有無
		result.put("zahyo_hosei_um", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.ZAHYO_HOSEI_UM));
		//緯度
		result.put("lttd", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.LTTD));
		//経度
		result.put("lgtd", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.LGTD));
		//工事先住所未確定フラグ
		result.put("koji_saki_ad_mi_fix_flg", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KISN_PLC_AD_MI_FIX_FLG));
		//場所番号
		result.put("place_no", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_NO));
		//工事希望年月日
		result.put("koji_kibo_ymd",  "20991231");
		//移設コード
		result.put("isetsu_cd", "030");
		//工事範囲コード
		result.put("koji_scope_cd", "120");
		// 住所形態コード
		result.put("ad_form_cd", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.AD_FORM_CD));

		// 設置場所郵便番号
		result.put("setplace_pcd", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD));

		// 設置場所住所コード
		result.put("setplace_ad_cd", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AD_CD));

		// 回線場所電話番号
		result.put("kaisen_place_telno", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_TELNO));

		// 転宅先都道府県名
		result.put("setplace_state_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM));

		// 転宅先市区町村名
		result.put("setplace_city_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM));

		// 転宅先大字通称名
		result.put("setplace_oaztsu_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM));

		// 転宅先字丁目名
		result.put("setplace_azcho_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM));

		// 転宅先住所番地号
		result.put("setplace_ad_bnchigo", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO));

		// 転宅先住所補記・建物名
		result.put("setplace_adrttm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM));
		
		// 転宅先住所補記・部屋番号
		result.put("setplace_adrrm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM));
		
		// ANK-3136-00-00 ADD START
		// 宅内調査要否
		result.put("takcho_yh", recordMap.get(JBSbatKKIFM710.TAKCHO_YH));
		
		// 設計要否
		result.put("dsgn_yh", recordMap.get(JBSbatKKIFM710.DSGN_YH));
		// ANK-3136-00-00 ADD END
		
		return result;
	}


	/**
	 * 工事情報
	 * 工事案件受付CCのインプット情報
	 * @param recordMap NTT支持金物改修工事依頼リストの１レコードの情報
	 * @param svcKeiMap サービス契約情報
	 * @param svkeiKaisenUwMap サービス契約回線内訳情報
	 * @throws Exception
	 */
	private HashMap<String, Object> getKojiInfo(
			HashMap<String, Object> recordMap,
			HashMap<String, Object> svcKeiMap,
			HashMap<String, Object> svkeiKaisenUwMap
	) throws Exception
	{
		HashMap<String, Object> result = new HashMap<String, Object>();
		
		// 機能コード
		result.put("func_code", "1");

		// EPON_GEPON
		result.put("epon_gepon", "0");
		
		// 復活案件フラグ
		result.put("hukkat_anken_flg", "0");
		 
		// サービス契約ステータス
		result.put("svc_kei_stat", svcKeiMap.get(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT));
		
		// サービス契約回線内訳番号
		result.put("svc_kei_kaisen_ucwk_no", "");
		
		// 申込者名
		result.put("mskmsha_nm", recordMap.get(JBSbatKKIFM710.MSKMSHA_NM));
		
		// 工事完了１
		result.put("koji_kanryo1", false);
		
		// 工事完了２
		result.put("koji_kanryo2", false);
		
		// 宅内調査希望アポ期限年月日
		result.put("tnkj_kibo_apo_kigen_ymd", recordMap.get(JBSbatKKIFM710.TAKCHO_KIBO_APO_KIGEN_YMD));
		
		// 新築物件コード
		result.put("newconst_bukken_cd", "0");
		
		// 工事案件番号（新設）
		result.put("kojiak_no_shinsetsu", "");
		
		// 申込書番号
		result.put("same_equip_re_mskm_cd", "");
		
		// 工事受付コード
		result.put("koji_uk_dtail_cd", "");
		
		// 工事案件備考
		result.put("kojiak_biko", recordMap.get(JBSbatKKIFM710.KOJIAK_RRK_JIKO));

		// 工事案件番号（撤去）
		result.put("kojiak_no_tekkyo", "");
		
		// 回線場所電話番号
		result.put("kaisen_place_telno", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_TELNO));
		
		// 工事案件番号
		result.put("kojiak_no", "");
		
		// 工事アポ連絡先指定コード
		result.put("koji_apo_rrks_shitei_cd", recordMap.get(JBSbatKKIFM710.KOJI_APO_RRKS_SHITEI_CD));

		// 設置場所住所コード
		result.put("setplace_ad_cd", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AD_CD));
		 
		// 設置場所郵便番号
		result.put("setplace_pcd", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD));

		// 設置場所都道府県名
		result.put("setplace_state_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM));
		 
		// 設置場所市区町村名
		result.put("setplace_city_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM));
		
		// 設置場所大字通称名
		result.put("setplace_oaztsu_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM));

		// 設置場所字丁目名
		result.put("setplace_azcho_nm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM));

		// 設置場所住所番地号
		result.put("setplace_ad_bnchigo", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO));
		 
		// 設置場所住所補記・建物名 
		result.put("setplace_adrttm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM));
		
		// 設置場所住所補記・部屋番号
		result.put("setplace_adrrm", svkeiKaisenUwMap.get(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM));

		// STB撤去
		result.put("stb_tekkyo", "0");
		
		// 工事案件備考１ 
		result.put("kojiak_biko1", recordMap.get(JBSbatKKIFM710.KOJIAK_BIKO_1));
		
		// 工事案件備考２
		result.put("kojiak_biko2", recordMap.get(JBSbatKKIFM710.KOJIAK_BIKO_2));
		
		// サービス契約番号
		result.put("svc_kei_no", svcKeiMap.get(JBSbatKKIFM710.SVC_KEI_NO));
		
		// 工事アポ連絡先電話番号
		result.put("koji_apo_rrks_telno", recordMap.get(JBSbatKKIFM710.KOJI_APO_RRKS_TELNO));
		 
		// 工事案件種別コード
		result.put("kojiak_sbt_cd", "");
		
		// 解約希望年月日
		result.put("dsl_kibo_ymd", "20991231");	// 20991231固定

		// 移設コード
		result.put("isetsu_cd", "");
		
		// 引越対象サービス契約番号
		result.put("hikkoshi_trgt_svc_kei_no", recordMap.get(JBSbatKKIFM710.SVC_KEI_NO));
		
		// 電話連絡希望時間帯コード
		result.put("tel_rrk_kibo_time_cd", recordMap.get(JBSbatKKIFM710.TEL_RRK_KIBO_TIME_CD));
		
		// 工事範囲コード
		result.put("koji_scope_cd", "005");	//工事不要固定
		
		// 工事受付コード
		result.put("koji_uk_cd", "");
		
		// 関西電力お客様情報授受同意有無
		result.put("kepco_ctinfo_juju_doi_um", "");
		
		// 工事案件住変
		result.put("kojak_juhen", false);
		
		// 異動区分
		result.put("ido_div", IDO_DIV);
		
		// サービス契約回線内訳番号（新設）
		result.put("svc_kei_kaisen_ucwk_no_shinsetsu", "");
		
		// サービス契約回線内訳番号（撤去）
		result.put("svc_kei_kaisen_ucwk_no_tekkyo", "");
		
		// 工事希望年月日
		result.put("koji_kibo_ymd", "20991231");	// 20992131固定
		
		// マンションID
		result.put("mansion_id", "");
		
		return result;
	}
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
