/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKOpChanlDbleKeiChk
*	ソースファイル名	：JBSbatKKOpChanlDbleKeiChk.java
*	作成者				：富士通　
*	作成日				：2012年02月21日
*＜機能概要＞
*　オプションチャンネル重複契約チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/02/21	神吉		新規作成
*	v3.00.00	2012/05/28	FJ)神吉		【IT1-2012-0000551】対応
*	v3.01.00	2012/07/19	FJ)神吉		【IT1-2012-0000896】電子ファイル管理とダウンロードファイル管理登録対応
*   v3.02.00	2013/05/16  FJ)神田		【IT1-2013-0001200】障害対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatKKIFM017;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_M_OP_SVC;
import eo.business.util.table.JBSbatKK_T_MSKM;
import eo.business.util.table.JBSbatKK_T_MSKM_DTL;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCCFileUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.log.JBSbatLogUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKOpChanlDbleKeiChk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブル(オプションサービス)*/
	private static final String D_TBL_NAME_KK_M_OP_SVC = "KK_M_OP_SVC";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(申込明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(KK_SELECT_002)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_002 = "KK_SELECT_002";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_M_OP_SVC_KK_SELECT_003 = "KK_SELECT_003";

	/** SQL定義キー(KK_SELECT_129)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_129 = "KK_SELECT_129";

	/** SQL定義キー(KK_SELECT_012)*/
	private static final String KK_T_MSKM_DTL_KK_SELECT_012 = "KK_SELECT_012";

	/** SQL定義キー(KK_SELECT_014)*/
	private static final String CK_T_CUST_KK_SELECT_014 = "KK_SELECT_014";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(業務パラメータ管理２)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI2 = null;
	
	/** テーブルアクセスクラス(オプションサービス)*/
	private JBSbatSQLAccess db_KK_M_OP_SVC = null;
	
	/** テーブルアクセスクラス(オプションサービス２)*/
	private JBSbatSQLAccess db_KK_M_OP_SVC2 = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(申込明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;
	
	/** テーブルアクセスクラス(申込明細２)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL2 = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
	
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST2 = null;
	
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 
	 *  オプションチャンネル重複契約情報抽出カウント
	 */
	private int opChDataCount = 0;
	
	/** 
	 *   取得データ格納変数
	 */
	private ArrayList<HashMap<String, String>> opChParam = null;
	
	/**
	 *  出力ファイル格納先パス
	 */
	private String file_path = "";
	
	/**
	 * 出力ファイル格納先パス
	 */
	private String mid_dir_ck_path = "";
	
	/** 
	 *  オプションチャンネル重複契約情報出力カウント
	 */
	private int outCount = 0;
	
	/**
	 * 処理管理番号
	 */
	private String trnKanriNo = "000000000059";
	
	/**
	 * ファイル名
	 */
	private String fileName = "CATL0001_";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_ZM_M_WORK_PARAM_KNRI2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_KK_M_OP_SVC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_OP_SVC);
		db_KK_M_OP_SVC2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_OP_SVC);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
		db_KK_T_MSKM_DTL2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_CK_T_CUST2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// フリー項目から格納先を取得します
		file_path = commonItem.getFreeItem();

		// 取得出来なかった場合、エラーとします。
		if (file_path.length() == 0)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"フリー項目：送信ファイル格納パス名"});
		}
		
		mid_dir_ck_path = file_path + "KKIFM017.csv";
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// SQL実行結果取得用mapを生成（業務パラメータ管理）
		JBSbatCommonDBInterface workParamMap1 = new JBSbatCommonDBInterface();
		
		// SQL実行結果取得用mapを生成（業務パラメータ管理２）
		JBSbatCommonDBInterface workParamMap2 = new JBSbatCommonDBInterface();
		
		// SQL実行結果取得用mapを生成（オプションサービス）
		JBSbatCommonDBInterface opSvcMap = new JBSbatCommonDBInterface(); 
		
		// SQL実行結果取得用mapを生成（オプションサービス２）
		JBSbatCommonDBInterface opSvcMap2 = new JBSbatCommonDBInterface(); 
		
		// 業務パラメータ管理SD戻り値格納用List
		ArrayList<String> resultSdList = new ArrayList<String>();
		
		// 業務パラメータ管理HD戻り値格納用List
		ArrayList<String> resultHdList = new ArrayList<String>();
		
		// オプションサービスSD戻り値格納用List
		ArrayList<HashMap<String, String>> resultOpSd = new ArrayList<HashMap<String, String>>();
		
		// オプションサービスHD戻り値格納用List
		ArrayList<HashMap<String, String>> resultOpHd = new ArrayList<HashMap<String, String>>();
		
		// 運用日取得
		String opeDate = super.opeDate;
		
		// 釣りビジョンＳＤの業務パラメータＩＤ
		String sdWorkParamId = "KK_CHK_TG_OP_SVC1";
		
		// 釣りビジョンＳＤ情報抽出
		// 業務パラメータ管理検索条件設定
		String [] whereSdParam = {sdWorkParamId, opeDate, opeDate};
		
		// 業務パラメータ管理検索実行
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_002(whereSdParam);
		
		workParamMap1 = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		
		// 業務パラメータ管理１検索結果がある場合
		if (workParamMap1 != null)
		{
			// SDパラメータ文字列
			String sdParamStr = "";
			
			// 業務パラメータ管理１検索結果が「NULL」でない間の繰返し
			while(workParamMap1 != null)
			{
				sdParamStr = workParamMap1.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
				
				// ログレベルがデバッグモードの場合
				if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
				{
					super.logPrint.printDebugLog("業務パラメータ管理．業務パラメータID(SD)：" 
							+  workParamMap1.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_ID));
					
					super.logPrint.printDebugLog("業務パラメータ管理．業務パラメータ設定値(SD)：" 
							+  workParamMap1.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
				}
				
				workParamMap1 = db_ZM_M_WORK_PARAM_KNRI.selectNext();
			}
			
			// SDカンマ区切りデータを分割し、リストへ格納
			resultSdList = convEscapeStringToList(sdParamStr);
		}
		
		// 釣りビジョンＨＤの業務パラメータＩＤ
		String hdWorkParamId = "KK_CHK_TG_OP_SVC2";
		
		// 釣りビジョンＨＤ情報抽出
		// 業務パラメータ管理検索条件設定
		String [] whereHdParam = {hdWorkParamId, opeDate, opeDate};
		
		// 業務パラメータ管理検索実行
		executeZM_M_WORK_PARAM_KNRI2_KK_SELECT_002(whereHdParam);
		
		workParamMap2 = db_ZM_M_WORK_PARAM_KNRI2.selectNext();
		
		// 業務パラメータ管理２検索結果がある場合
		if (workParamMap2 != null)
		{
			// HDパラメータ文字列
			String hdParamStr = "";
			
			// 業務パラメータ管理２検索結果が「NULL」でない間の繰返し
			while(workParamMap2 != null)
			{
				hdParamStr = JBSbatStringUtil.Rtrim(workParamMap2.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
				
				// ログレベルがデバッグモードの場合
				if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
				{
					super.logPrint.printDebugLog("業務パラメータ管理．業務パラメータID(HD)：" 
							+  workParamMap2.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_ID));
					
					super.logPrint.printDebugLog("業務パラメータ管理．業務パラメータ設定値(HD)：" 
							+  workParamMap2.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
				}
				
				workParamMap2 = db_ZM_M_WORK_PARAM_KNRI2.selectNext();
			}
			
			// HDカンマ区切りデータを分割し、リストへ格納
			resultHdList = convEscapeStringToList(hdParamStr);
		}
			
		// 「ＳＤ業務パラメータリスト」または「ＨＤ業務パラメータリスト」のサイズが0件、またはサイズが違う場合の場合
		if((resultSdList.size() == 0 || resultHdList.size() == 0) || (resultSdList.size() != resultHdList.size()))
		{
			// 検索結果が無い場合は下記のログ出力する。
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
					new String[]{"オプションチャンネル重複契約チェック対象データ数が異常です。ＳＤ業務パラメータ情報件数："
						+ resultSdList.size() + "件　ＨＤ業務パラメータ情報件数：" + resultHdList.size() + "件"});
			return null;
		}
		
		// オプションサービス情報（ＳＤ）抽出
		// 「ＳＤ業務パラメータリスト」データ分の繰返し
		for(int i = 0; i < resultSdList.size(); i++)
		{
			HashMap<String, String> opSvcSdListMap = new HashMap<String, String>();
			
			// オプションサービス情報抽出
			// 業務パラメータ管理検索条件設定
			String [] whereOpSdParam = {(String)resultSdList.get(i), opeDate, opeDate};
			
			// オプションサービス検索実行
			executeKK_M_OP_SVC_KK_SELECT_003(whereOpSdParam);
			
			opSvcMap = db_KK_M_OP_SVC.selectNext();
			
			// オプションサービス検索結果がある場合
			if(opSvcMap != null)
			{
			
				opSvcSdListMap.put("OP_SVC_CD_SD", JBSbatStringUtil.Rtrim(opSvcMap.getString(JBSbatKK_M_OP_SVC.OP_SVC_CD)));
				opSvcSdListMap.put("OP_SVC_NM_SD", JBSbatStringUtil.Rtrim(opSvcMap.getString(JBSbatKK_M_OP_SVC.OP_SVC_NM)));
				
				// ログレベルがデバッグモードの場合
				if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
				{
					super.logPrint.printDebugLog("オプションサービス．オプションサービスコード(SD)：" 
							+  JBSbatStringUtil.Rtrim(opSvcMap.getString(JBSbatKK_M_OP_SVC.OP_SVC_CD)));
					
					super.logPrint.printDebugLog("オプションサービス．オプションサービス名(SD)：" 
							+  JBSbatStringUtil.Rtrim(opSvcMap.getString(JBSbatKK_M_OP_SVC.OP_SVC_NM)));
				}
				
				resultOpSd.add(opSvcSdListMap);
			}
		}
		
		// オプションサービス情報（ＨＤ）抽出
		// 「ＨＤ業務パラメータリスト」データ分の繰返し
		for(int i = 0; i < resultHdList.size(); i++)
		{
			HashMap<String, String> opSvcHdListMap = new HashMap<String, String>();
			
			// オプションサービス情報抽出
			// 業務パラメータ管理検索条件設定
			String [] whereOpHdParam = {(String)resultHdList.get(i), opeDate, opeDate};
			
			// オプションサービス検索実行
			executeKK_M_OP_SVC2_KK_SELECT_003(whereOpHdParam);
			
			opSvcMap2 = db_KK_M_OP_SVC2.selectNext();
			
			// オプションサービス検索結果がある場合
			if(opSvcMap2 != null)
			{
				opSvcHdListMap.put("OP_SVC_CD_HD", JBSbatStringUtil.Rtrim(opSvcMap2.getString(JBSbatKK_M_OP_SVC.OP_SVC_CD)));
				opSvcHdListMap.put("OP_SVC_NM_HD", JBSbatStringUtil.Rtrim(opSvcMap2.getString(JBSbatKK_M_OP_SVC.OP_SVC_NM)));
				
				// ログレベルがデバッグモードの場合
				if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
				{
					super.logPrint.printDebugLog("オプションサービス．オプションサービスコード(HD)：" 
							+  JBSbatStringUtil.Rtrim(opSvcMap2.getString(JBSbatKK_M_OP_SVC.OP_SVC_CD)));
					
					super.logPrint.printDebugLog("オプションサービス．オプションサービス名(HD)：" 
							+  JBSbatStringUtil.Rtrim(opSvcMap2.getString(JBSbatKK_M_OP_SVC.OP_SVC_NM)));
				}
				
				resultOpHd.add(opSvcHdListMap);
			}
		}
		
		// 「オプションサービス情報（ＳＤ）」または「オプションサービス情報（ＨＤ）」のサイズが0件、またはサイズが違う場合の場合
		if((resultOpSd.size() == 0 || resultOpHd.size() == 0) || (resultOpSd.size() != resultOpHd.size()))
		{
			// 検索結果が無い場合は「サービス契約」処理無しで、下記のログ出力する。
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
					new String[]{"オプションチャンネル重複契約チェック対象データ数が異常です。オプションサービス情報（ＳＤ）件数："
						+ resultOpSd.size() + "件　オプションサービス情報（ＨＤ）情報件数：" + resultOpHd.size() + "件"});
			return null;
		}

		// オプションチャンネル重複契約情報設定
		boolean flg = setOpChDataInfo(resultOpSd, resultOpHd);
		
		// 「オプションチャンネル重複契約情報設定」が正常(flg ==true)の場合
		if(flg)
		{
			for(int i = 0; i < opChParam.size(); i++)
			{
				HashMap<String, String> opDataListMap = (HashMap<String, String>)opChParam.get(i);
				
				// オプションチャンネル重複契約情報のデータがある場合
				if(opDataListMap != null)
				{
					// データ抽出チェック
					boolean opChFlg = dataCheck(opDataListMap);
				
					// オプションチャンネル重複契約チェック対象データがある場合
					if(opChFlg)
					{
						//入出力インターフェースオブジェクトを生成
						JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
						
						// オプションチャンネル重複契約チェックリスト．チェック種別をファイル出力
						outmap.set(JBSbatKKIFM017.CHK_SBT, "オプションサービス重複チェック");
						
						// オプションチャンネル重複契約チェックリスト．顧客コードをファイル出力
						outmap.set(JBSbatKKIFM017.CUSTOMER_CD, opDataListMap.get("SVC_KEI_NO_SD"));
						
						// オプションチャンネル重複契約チェックリスト．お客様IDをファイル出力
						outmap.set(JBSbatKKIFM017.CUST_ID, opDataListMap.get("SVC_KEI_NO_SD"));
						
						// オプションチャンネル重複契約チェックリスト．契約者氏名（漢字）をファイル出力
						outmap.set(JBSbatKKIFM017.KEISHA_NAME, opDataListMap.get("CUST_NM_SD"));
						
						// オプションチャンネル重複契約チェックリスト．STBIDをファイル出力
						outmap.set(JBSbatKKIFM017.STB_ID, opDataListMap.get("STB_ID_SD"));
						
						// オプションチャンネル重複契約チェックリスト．C-CASIDをファイル出力
						outmap.set(JBSbatKKIFM017.C_CASID, opDataListMap.get("KIKI_SEIZO_NO_SD"));
						
						// オプションチャンネル重複契約チェックリスト．B-CASIDをファイル出力
						outmap.set(JBSbatKKIFM017.B_CASID, opDataListMap.get(""));
						
						// オプションチャンネル重複契約チェックリスト．単価コード１をファイル出力
						outmap.set(JBSbatKKIFM017.TANI_CD_1, opDataListMap.get("OP_SVC_CD_SD"));
						
						// オプションチャンネル重複契約チェックリスト．単価名称１をファイル出力
						outmap.set(JBSbatKKIFM017.TANKA_NAME_1, opDataListMap.get("OP_SVC_NM_SD"));
						
						// オプションチャンネル重複契約チェックリスト．契約開始日１をファイル出力
						outmap.set(JBSbatKKIFM017.KEI_STAYMD_1, opDataListMap.get("SVC_STA_YMD_SD"));
						
						// オプションチャンネル重複契約チェックリスト．契約終了日１をファイル出力
						outmap.set(JBSbatKKIFM017.KEI_ENDYMD_1, opDataListMap.get("SVC_ENDYMD_SD"));
						
						// オプションチャンネル重複契約チェックリスト．単価コード２をファイル出力
						outmap.set(JBSbatKKIFM017.TANI_CD_2, opDataListMap.get("OP_SVC_CD_HD"));
						
						// オプションチャンネル重複契約チェックリスト．単価名称２をファイル出力
						outmap.set(JBSbatKKIFM017.TANKA_NAME_2, opDataListMap.get("OP_SVC_NM_HD"));
						
						// オプションチャンネル重複契約チェックリスト．契約開始日２をファイル出力
						outmap.set(JBSbatKKIFM017.KEI_STAYMD_2, opDataListMap.get("SVC_STA_YMD_HD"));
						
						// オプションチャンネル重複契約チェックリスト．契約終了日２をファイル出力
						outmap.set(JBSbatKKIFM017.KEI_ENDYMD_2, opDataListMap.get("SVC_ENDYMD_HD"));
						
						// エラー内容編集（単価名称１ + "と" + 単価名称２ + "の契約が重複しています。")
						String errNaiyo = opDataListMap.get("OP_SVC_NM_SD") + "と" 
										+ opDataListMap.get("OP_SVC_NM_HD") + "の契約が重複しています。";
						
						// オプションチャンネル重複契約チェックリスト．エラー内容詳細をファイル出力
						outmap.set(JBSbatKKIFM017.ERR_NAIYO_DTAIL, errNaiyo);
						
						// オプションチャンネル重複契約チェックリスト．備考をファイル出力
						outmap.set(JBSbatKKIFM017.BIKO, "");
						
						//出力フラグを設定
						outmap.setOutFlg(true);
						
						//出力共通電文に入出力インターフェースを設定する。
						outputBean.addOutMapList(outmap);
						
						outCount++;
					}
				}
			}
		}
		
		// ログレベルがデバッグモードの場合
		if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
		{
			super.logPrint.printDebugLog("オプションチャンネル重複契約情報抽出カウント：" + opChDataCount);
			super.logPrint.printDebugLog("出力カウント：" +  outCount);
		}
		
		super.logPrint.printDebugLog("execute_END");
		
		//出力共通電文を返却
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_ZM_M_WORK_PARAM_KNRI2.close();
		db_KK_M_OP_SVC.close();
		db_KK_M_OP_SVC2.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_MSKM_DTL.close();
		db_KK_T_MSKM_DTL2.close();
		db_CK_T_CUST.close();
		db_CK_T_CUST2.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		// 出力カウントが1件以上有る場合
		if (outCount > 0)
		{
			// 電子ファイル管理登録部品呼出
			String[] eFileInfo = JCCBatCommon.createDenshiFile(commonItem, "0000", mid_dir_ck_path, "20991231");
			
			// ダウンロードファイル管理登録
			insZmTDlFileKanri(eFileInfo);
		}
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(KK_SELECT_002)で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_WORK_PARAM_KNRI_KK_SELECT_002(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_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_KK_SELECT_002);
	}

	/**
	 * SQLKEY(KK_SELECT_002)で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_WORK_PARAM_KNRI2_KK_SELECT_002(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_WORK_PARAM_KNRI2.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_KK_SELECT_002);
	}

	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	オプションサービスコード
	 *		 	オプションサービス適用開始年月日
	 *		 	オプションサービス適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_OP_SVC_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_M_OP_SVC.selectBySqlDefine(paramList, KK_M_OP_SVC_KK_SELECT_003);
	}
	
	/**
	 * SQLKEY(KK_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	オプションサービスコード
	 *		 	オプションサービス適用開始年月日
	 *		 	オプションサービス適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_OP_SVC2_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_M_OP_SVC2.selectBySqlDefine(paramList, KK_M_OP_SVC_KK_SELECT_003);
	}

	/**
	 * SQLKEY(KK_SELECT_129)で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_129(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_129);
	}

	/**
	 * SQLKEY(KK_SELECT_012)で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_MSKM_DTL_KK_SELECT_012(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KK_SELECT_012);
	}
	
	/**
	 * SQLKEY(KK_SELECT_012)で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_MSKM_DTL2_KK_SELECT_012(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL2.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KK_SELECT_012);
	}

	/**
	 * SQLKEY(KK_SELECT_014)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KK_SELECT_014(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_014);
	}
	
	/**
	 * SQLKEY(KK_SELECT_014)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST2_KK_SELECT_014(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_CUST2.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_014);
	}
	
	/**
	 * 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
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </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]);
		setMap.setValue("ADD_UNYO_YMD", setParam[15]);
		setMap.setValue("ADD_TRN_ID", setParam[16]);
		setMap.setValue("UPD_UNYO_YMD", setParam[17]);
		setMap.setValue("UPD_TRN_ID", setParam[18]);
		setMap.setValue("DEL_UNYO_YMD", setParam[19]);
		setMap.setValue("DEL_TRN_ID", setParam[20]);
	
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.insertByPrimaryKeys(setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 
	 * サービス契約情報の取得を行います。
	 * 
	 * @param  HashMap<String, String> paramSDMap
	 * @param  HashMap<String, String> paramHdMap
	 * @param  String opeDate
	 * 
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void getSvcKeiInfo(HashMap<String, String> paramSDMap, HashMap<String, String> paramHdMap, String opeDate) throws Exception
	{
		String[] svcKei_param = new String[9];
		
		// サービス契約検索キー設定
		svcKei_param[0] = opeDate;														// 運用日
		svcKei_param[1] = opeDate.substring(0, 6) 
							+ JBSbatInterface.getEndOfMonth(opeDate.substring(0, 6));	// 運用月の末日
		svcKei_param[2] = opeDate.substring(0, 6) + "01";								// 運用月の1日
		svcKei_param[3] = opeDate;														// 運用日
		svcKei_param[4] = opeDate;															// 
		svcKei_param[5] = (String)paramSDMap.get("OP_SVC_CD_SD");						// オプションサービス.オプションサービスコード(SD)
		svcKei_param[6] = opeDate;															// 
		svcKei_param[7] = (String)paramHdMap.get("OP_SVC_CD_HD");						// オプションサービス.オプションサービスコード(HD)
		svcKei_param[8] = opeDate;														// 運用日
		
		// サービス契約の条件検索（KK_SELECT_129）を行います
		executeKK_T_SVC_KEI_KK_SELECT_129(svcKei_param);
	}
	
	/**
	 * 
	 * 申込明細情報の取得を行います。
	 * 
	 * @param  String mskmDtlNo
	 * 
	 * @return JBSbatCommonDBInterface mskmDtlMap
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface getMskmDtlInfo(String mskmDtlNo) throws Exception
	{
		// 申込明細検索結果格納マップ
		JBSbatCommonDBInterface mskmDtlMap = null;
		
		String[] mskmDtl_param = new String[1];
		
		// 申込明細検索キー設定
		mskmDtl_param[0] = mskmDtlNo;		// オプションサービス契約．申込明細番号
				
		
		// 申込明細の条件検索（KK_SELECT_012）を行います
		executeKK_T_MSKM_DTL_KK_SELECT_012(mskmDtl_param);
		
		mskmDtlMap = db_KK_T_MSKM_DTL.selectNext();

		return mskmDtlMap;
	}
	
	/**
	 * 
	 * 申込明細情報２の取得を行います。
	 * 
	 * @param  String mskmDtlNo
	 * 
	 * @return JBSbatCommonDBInterface mskmDtlMap
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface getMskmDtlInfo2(String mskmDtlNo) throws Exception
	{
		// 申込明細検索結果格納マップ
		JBSbatCommonDBInterface mskmDtlMap = null;
		
		String[] mskmDtl_param = new String[1];
		
		// 申込明細検索キー設定
		mskmDtl_param[0] = mskmDtlNo;		// オプションサービス契約．申込明細番号
				
		
		// 申込明細の条件検索（KK_SELECT_012）を行います
		executeKK_T_MSKM_DTL2_KK_SELECT_012(mskmDtl_param);
		
		mskmDtlMap = db_KK_T_MSKM_DTL2.selectNext();

		return mskmDtlMap;
	}
	
	/**
	 * 
	 * お客様情報の取得を行います。
	 * 
	 * @param  String sysId
	 * @param  String opeDate
	 * 
	 * @return JBSbatCommonDBInterface custMap
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface getCustInfo(String sysId, String opeDate) throws Exception
	{
		// お客様検索結果格納マップ
		JBSbatCommonDBInterface custMap = null;
		
		String[] cust_param = new String[2];
		
		// お客様検索キー設定
		cust_param[0] = sysId;		// サービス契約．sysId
		cust_param[1] = opeDate;	// 運用日
				
		
		// お客様の条件検索（KK_SELECT_014）を行います
		executeCK_T_CUST_KK_SELECT_014(cust_param);
		
		custMap = db_CK_T_CUST.selectNext();

		return custMap;
	}
	
	/**
	 * 
	 * お客様情報２の取得を行います。
	 * 
	 * @param  String sysId
	 * @param  String opeDate
	 * 
	 * @return JBSbatCommonDBInterface custMap
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface getCustInfo2(String sysId, String opeDate) throws Exception
	{
		// お客様検索結果格納マップ
		JBSbatCommonDBInterface custMap = null;
		
		String[] cust_param = new String[2];
		
		// お客様検索キー設定
		cust_param[0] = sysId;		// サービス契約．sysId
		cust_param[1] = opeDate;	// 運用日
				
		
		// お客様の条件検索（KK_SELECT_014）を行います
		executeCK_T_CUST2_KK_SELECT_014(cust_param);
		
		custMap = db_CK_T_CUST2.selectNext();

		return custMap;
	}
	
	
	/**
	 * 
	 * オプションチャンネル重複契約情報の設定を行います。
	 * 
	 * @param  ArrayList<HashMap> resultOpSd
	 * @param  ArrayList<HashMap> resultOpHd
	 * 
	 * @return boolean flg
	 * 
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean setOpChDataInfo(ArrayList<HashMap<String, String>> resultOpSd, ArrayList<HashMap<String, String>> resultOpHd) throws Exception
	{
		// 取得データ格納配列生成
		opChParam = new ArrayList<HashMap<String, String>>();
		
		// SQL実行結果取得用mapを生成（サービス契約）
		JBSbatCommonDBInterface svcKeiMap = new JBSbatCommonDBInterface(); 
		
		// SQL実行結果取得用mapを生成（申込明細）
		JBSbatCommonDBInterface mskmDtlMap = new JBSbatCommonDBInterface(); 
		
		// SQL実行結果取得用mapを生成（申込明細２）
		JBSbatCommonDBInterface mskmDtlMap2 = new JBSbatCommonDBInterface(); 
		
		// SQL実行結果取得用mapを生成（お客様）
		JBSbatCommonDBInterface custMap = new JBSbatCommonDBInterface(); 
		
		// SQL実行結果取得用mapを生成（お客様）
		JBSbatCommonDBInterface custMap2 = new JBSbatCommonDBInterface();
		
		// 取得したオプションサービス情報（ＳＤ）分の繰返し
		for(int i = 0; i < resultOpSd.size(); i++)
		{
			// サービス契約情報取得
			getSvcKeiInfo((HashMap<String, String>)resultOpSd.get(i), (HashMap<String, String>)resultOpHd.get(i),  opeDate);
			
			svcKeiMap = db_KK_T_SVC_KEI.selectNext();
			
			// サービス契約の条件検索結果なしの場合
			if (svcKeiMap == null)
			{
				// 検索結果が無い場合は、ファイル出力設定処理無しで、下記のログ出力する。
				super.logPrint.printDebugLog("サービス契約テーブルにデータが存在しません。("
						+ "業務パラメータ設定値(SD)：" + ((HashMap<String, String>)resultOpSd.get(i)).get("OP_SVC_CD_SD")
						+ "、業務パラメータ設定値(HD)：" + ((HashMap<String, String>)resultOpHd.get(i)).get("OP_SVC_CD_HD") + ")" );
				break;
			}
			// サービス契約の条件検索結果ありの場合
			else
			{
				while (svcKeiMap != null)
				{
					HashMap<String, String> opDataListMap = new HashMap<String, String>();
					
					// 顧客コードに「サービス契約．サービス契約番号」設定
					opDataListMap.put("SVC_KEI_NO_SD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SVC_KEI_NO")));
					// SYSIDに「サービス契約．SYSID」設定
					opDataListMap.put("SYSID_SD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SYSID")));
					// STBIDに「宅内機器ワーク．STBID」設定
					opDataListMap.put("STB_ID_SD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("STB_ID")));
					// C-CASIDに「機器提供サービス契約．機器製造番号」設定
					opDataListMap.put("KIKI_SEIZO_NO_SD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("KIKI_SEIZO_NO")));
					// 「オプションサービス．オプションサービスコード」設定
					opDataListMap.put("OP_SVC_CD_SD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("OP_SVC_CD_SD")));
					// 「オプションサービス．オプションサービス名」設定
					opDataListMap.put("OP_SVC_NM_SD", (String)resultOpSd.get(i).get("OP_SVC_NM_SD"));
					// 「サービス契約内訳．サービス開始年月日」設定
					opDataListMap.put("SVC_STA_YMD_SD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SVC_STA_YMD_SD")));
					// 「サービス契約内訳．サービス開始年月日」設定
					opDataListMap.put("SVC_ENDYMD_SD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SVC_ENDYMD_SD")));
					
					// オプションサービス契約．申込明細番号取得
					String mskmDtlNoSd = JBSbatStringUtil.Rtrim(svcKeiMap.getString("MSKM_DTL_NO_SD"));
					
					// 申込明細情報取得(SD)
					mskmDtlMap = getMskmDtlInfo(mskmDtlNoSd);
					
					// 申込明細の条件検索結果なしの場合
					if(mskmDtlMap == null)
					{
						// 検索結果が無い場合はファイル出力設定処理無しで、下記のログ出力する。
						super.logPrint.printDebugLog("申込明細テーブルに申込明細番号(SD)：" + mskmDtlNoSd + "が存在しません。"); 
						
						break;
					}
					else
					{
						// 申込明細番号に「オプションサービス契約．申込明細番号」設定
						opDataListMap.put("MSKM_DTL_NO_SD", mskmDtlNoSd);
						
						
						// 申込種別コードに「申込．申込種別コード」設定
						opDataListMap.put("MSKM_SBT_CD_SD", JBSbatStringUtil.Rtrim(mskmDtlMap.getString(JBSbatKK_T_MSKM.MSKM_SBT_CD)));
						
						// 申込形態コードに「申込明細．申込形態コード」設定
						opDataListMap.put("MSKM_FORM_CD_SD", JBSbatStringUtil.Rtrim(mskmDtlMap.getString(JBSbatKK_T_MSKM_DTL.MSKM_FORM_CD)));
					}
					
					// サービス契約．SYSID取得
					String sysIdSd = JBSbatStringUtil.Rtrim(svcKeiMap.getString("SYSID"));
					
					// お客様情報取得(SD)
					custMap = getCustInfo(sysIdSd, opeDate);
					
					
					// お客様(SD)の条件検索結果なしの場合
					if(custMap == null)
					{
						// お客様名に空文字設定
						opDataListMap.put("CUST_NM_SD", "");
					} 
					else
					{
						// お客様名に「お客様．お客様名」設定（半角、全角空白削除）
						opDataListMap.put("CUST_NM_SD", JBSbatStringUtil.trim(custMap.getString(JBSbatCK_T_CUST.CUST_NM)));
					}
					
					// ログレベルがデバッグモードの場合
					if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
					{
						super.logPrint.printDebugLog("サービス契約．サービス契約番号(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SVC_KEI_NO_SD")));
						super.logPrint.printDebugLog("宅内機器ワーク．STBID(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("STB_ID_SD")));
						super.logPrint.printDebugLog("機器提供サービス契約．機器製造番号(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("KIKI_SEIZO_NO_SD")));
						super.logPrint.printDebugLog("オプションサービス．オプションサービスコード(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("OP_SVC_CD_SD")));
						super.logPrint.printDebugLog("オプションサービス．オプションサービス名(SD)：" 
								+  (String)resultOpSd.get(i).get("OP_SVC_NM_SD"));
						super.logPrint.printDebugLog("オプションサービス契約．サービス開始年月日(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SVC_STA_YMD_SD")));
						super.logPrint.printDebugLog("オプションサービス契約．サービス終了年月日(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SVC_ENDYMD_SD")));
						super.logPrint.printDebugLog("オプションサービス契約．申込明細番号(SD)：" 
								+  mskmDtlNoSd);
						super.logPrint.printDebugLog("申込．申込種別コード(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("MSKM_SBT_CD_SD")));
						super.logPrint.printDebugLog("申込明細．申込形態コード(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("MSKM_FORM_CD_SD")));
						super.logPrint.printDebugLog("サービス契約．SYSID(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SYSID_SD")));
						super.logPrint.printDebugLog("お客様．お客様名(SD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("CUST_NM_SD")));
					}
					
					//「サービス契約．サービス契約番号」設定
					opDataListMap.put("SVC_KEI_NO_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SVC_KEI_NO")));
					// SYSIDに「サービス契約．SYSID」設定
					opDataListMap.put("SYSID_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SYSID")));
					// 「宅内機器ワーク．STBID」設定
					opDataListMap.put("STB_ID_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("STB_ID")));
					// 「機器提供サービス契約．機器製造番号」設定
					opDataListMap.put("KIKI_SEIZO_NO_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("KIKI_SEIZO_NO")));
					// 「オプションサービス．オプションサービスコード」設定
					opDataListMap.put("OP_SVC_CD_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("OP_SVC_CD_HD")));
					// 「オプションサービス．オプションサービス名」設定
					opDataListMap.put("OP_SVC_NM_HD", (String)resultOpHd.get(i).get("OP_SVC_NM_HD"));
					// 「サービス契約内訳．サービス開始年月日」設定
					opDataListMap.put("SVC_STA_YMD_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SVC_STA_YMD_HD")));
					// 「サービス契約内訳．サービス開始年月日」設定
					opDataListMap.put("SVC_ENDYMD_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("SVC_ENDYMD_HD")));
					// 「オプションサービス契約．予約適用コード」設定
					opDataListMap.put("RSV_APLY_CD_HD", JBSbatStringUtil.Rtrim(svcKeiMap.getString("RSV_APLY_CD_HD")));
					
					// オプションサービス契約．申込明細番号取得
					String mskmDtlNoHd = JBSbatStringUtil.Rtrim(svcKeiMap.getString("MSKM_DTL_NO_HD"));
					
					// 申込明細情報取得(HD)
					mskmDtlMap2 = getMskmDtlInfo2(mskmDtlNoHd);
					
					// 申込明細(HD)の条件検索結果なしの場合
					if(mskmDtlMap2 == null)
					{
						// 検索結果が無い場合はファイル出力設定処理無しで、下記のログ出力する。
						super.logPrint.printDebugLog("申込明細テーブルに申込明細番号(HD)：" + mskmDtlNoHd + "が存在しません。");
						
						break;
					}
					// 申込明細(HD)の条件検索結果ありの場合
					else
					{
					
						// 申込明細番号に「オプションサービス契約．申込明細番号」設定
						opDataListMap.put("MSKM_DTL_NO_HD", mskmDtlNoHd);
						
						// 申込種別コードに「申込．申込種別コード」設定
						opDataListMap.put("MSKM_SBT_CD_HD", JBSbatStringUtil.Rtrim(mskmDtlMap2.getString(JBSbatKK_T_MSKM.MSKM_SBT_CD)));
						
						// 申込形態コードに「申込明細．申込形態コード」設定
						opDataListMap.put("MSKM_FORM_CD_HD", JBSbatStringUtil.Rtrim(mskmDtlMap2.getString(JBSbatKK_T_MSKM_DTL.MSKM_FORM_CD)));
					}
					
					// サービス契約．SYSID取得
					String sysIdHd = JBSbatStringUtil.Rtrim(svcKeiMap.getString("SYSID"));
					
					// お客様情報取得(HD)
					custMap2 = getCustInfo2(sysIdHd, opeDate);
					
					// お客様(HD)の条件検索結果なしの場合
					if(custMap2 == null)
					{
						// お客様名(HD)に空文字設定
						opDataListMap.put("CUST_NM_HD", "");
					} 
					// お客様(HD)の条件検索結果ありの場合
					else
					{
						// お客様名に「お客様．お客様名」設定（半角、全角空白削除）
						opDataListMap.put("CUST_NM_HD", JBSbatStringUtil.trim(custMap2.getString(JBSbatCK_T_CUST.CUST_NM)));
					}
					
					// ログレベルがデバッグモードの場合
					if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
					{
						super.logPrint.printDebugLog("サービス契約．サービス契約番号(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SVC_KEI_NO_HD")));
						super.logPrint.printDebugLog("宅内機器ワーク．STBID(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("STB_ID_HD")));
						super.logPrint.printDebugLog("機器提供サービス契約．機器製造番号(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("KIKI_SEIZO_NO_HD")));
						super.logPrint.printDebugLog("オプションサービス．オプションサービスコード(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("OP_SVC_CD_HD")));
						super.logPrint.printDebugLog("オプションサービス．オプションサービス名(HD)：" 
								+ (String)resultOpHd.get(i).get("OP_SVC_NM_HD"));
						super.logPrint.printDebugLog("オプションサービス契約．サービス開始年月日(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SVC_STA_YMD_HD")));
						super.logPrint.printDebugLog("オプションサービス契約．サービス終了年月日(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SVC_ENDYMD_HD")));
						super.logPrint.printDebugLog("オプションサービス契約．申込明細番号(HD)：" 
								+  mskmDtlNoHd);
						super.logPrint.printDebugLog("申込．申込種別コード(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("MSKM_SBT_CD_HD")));
						super.logPrint.printDebugLog("申込明細．申込形態コード(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("MSKM_FORM_CD_HD")));
						super.logPrint.printDebugLog("サービス契約．SYSID(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("SYSID_HD")));
						super.logPrint.printDebugLog("お客様．お客様名(HD)：" 
								+  JBSbatStringUtil.Rtrim(opDataListMap.get("CUST_NM_HD")));
					}
					
					// 取得データ格納変数へ設定
					opChParam.add(opDataListMap);
					
					// オプションチャンネル重複契約情報抽出カウントアップ(SD)
					opChDataCount++;
					
					svcKeiMap = db_KK_T_SVC_KEI.selectNext();
				}
			}
		}
		
		// 「オプションチャンネル重複契約情報抽出カウント」が０の場合
		if(opChDataCount == 0)
		{
			// 検索結果が無い場合は、下記のログ出力する。
			super.logPrint.printDebugLog("オプションチャンネル重複契約チェック対象データ数が０件です。");
			
			return false;
		}
		else
		{
			return true;
		}
	}
	
	/**
	 * ダウンロードファイル管理スキーマに登録します。
	 * 
	 * @param eFileInfo 電子ファイル管理情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void insZmTDlFileKanri(String[] eFileInfo) throws Exception
	{

		JBSbatCommonDBInterface param = new JBSbatCommonDBInterface();
		
		String opeDtm =  JKKBatCommon.getOpeDateTimeStamp(commonItem).substring(0, 14);
		
		//  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(trnKanriNo);
		//  3.電子ファイル管理番号
		param.setValue(eFileInfo[0]);
		//  4.ファイル名
		param.setValue(fileName + opeDtm + ".csv");
		//  5.ファイルサイズ
		param.setValue(JCCFileUtil.getFileSize(mid_dir_ck_path));
		//  6.データ件数
		param.setValue(outCount);
		//  7.ファイル登録年月日時分秒
		param.setValue(eFileInfo[1]);
		//  8.ファイル削除年月日
		param.setValue("");
		//  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(null);
		//登録処理ID
		param.setValue(null);
		//更新運用年月日
		param.setValue(null);
		//更新処理ID
		param.setValue(null);
		//削除運用年月日
		param.setValue(null);
		//削除処理ID
		param.setValue(null);

		// SQL実行
		executeZM_T_DL_FILE_KANRI_PKINSERT(param.getList().toArray());
	}
	
	/**
	 * 引数で指定された業務パラメータ管理検索結果の一行データを個々のデータに分割し、
	 * @param  line 一行分の業務パラメータ管理検索結果のデータ
	 * @return ArrayList 個々のデータを格納したList
	 * @throws Exception 例外
	 */
	private ArrayList<String> convEscapeStringToList(String line) throws Exception
	{
		// 戻り値格納用List
		ArrayList<String> resultList = new ArrayList<String>();

		StringTokenizer st = new StringTokenizer(line, ",");

		while (st.hasMoreElements())
		{
			String s = st.nextToken();
			
			// 戻り値となるリストに1項目分のデータ格納
			resultList.add(s);
		}

		// 1行分のデータを格納したListを返却
		return resultList;
	}
	
	/**
	 * 引数で指定されたオプションチャンネル重複契約情報のチェックを行います
	 * 、
	 * @param  HashMap<String, String> opDataListMap（オプションチャンネル重複契約情報データ）
	 * 
	 * @return boolean flg (true:出力対象 false：除外対象)
	 * 
	 * @throws Exception 例外
	 */
	private boolean dataCheck(HashMap<String, String> opDataListMap) throws Exception
	{

		boolean flg = true;
		
		// 申込種別コード(SD)が「00005」かつ、申込形態コード(SD)が「01」の場合
		if("00005".equals(opDataListMap.get("MSKM_SBT_CD_SD")) && "01".equals(opDataListMap.get("MSKM_FORM_CD_SD")))
		{
			// 申込種別コード(HD)が「00026」かつ、申込形態コード(HD)が「01」の場合
			if("00026".equals(opDataListMap.get("MSKM_SBT_CD_HD")) && "01".equals(opDataListMap.get("MSKM_FORM_CD_HD")))
			{
				// 予約適用コード(HD)が「2」の場合
				if("2".equals(opDataListMap.get("RSV_APLY_CD_HD")))
				{
					flg = false;
				}
			}
		}

		// 判定結果を返す
		return flg;
	}
}
