/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKEoeleFushinListSksi
*	ソースファイル名	：JBSbatKKEoeleFushinListSksi.java
*	作成者				：富士通　
*	作成日				：2017年09月13日
*＜機能概要＞
*　ｅｏ電気紐付け不審リスト作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v34.00.00	2017/09/13  FJ)中田		【ANK-3210-00-00】【eo電気】電気単独対応（STEP3） 新規作成
*	v34.00.01	2017/10/30  FJ)謝		【IT1-2017-0000133】障害対応
*	v34.00.02	2018/04/11  FJ)謝		【OM-2018-0000371】障害対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.table.JBSbatKK_M_PRC_GRP;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKEoeleFushinListSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金グループ)*/
	private static final String D_TBL_NAME_KK_M_PRC_GRP = "KK_M_PRC_GRP";
	
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";
	
	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";
	
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	
	/** SQL定義キー(KK_SELECT_014)*/
	private static final String KK_M_PRC_GRP_KK_SELECT_014 = "KK_SELECT_014";
	
	/** SQL定義キー(KK_SELECT_009)*/
	private static final String ZM_M_CD_NM_KANRI_KK_SELECT_009 = "KK_SELECT_009";
	
	/** テーブルアクセスクラス(料金グループ)*/
	private JBSbatSQLAccess db_KK_M_PRC_GRP = null;
	
	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	
	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;
	
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** リスト種別：紐付け忘れ */
	private static final String LIST_SBT_FORGET = "1";
	
	/** リスト種別：紐付け不可 */
	private static final String LIST_SBT_CANNOT = "2";
	
	/** ｅｏ電気契約タイプ区分名：セットタイプ */
	private static final String TYPE_DIV_SET = "1";
	
	/** ｅｏ電気契約タイプ区分名：単独タイプ */
	private static final String TYPE_DIV_SOLO = "2";
	
	/** コード名称管理.コード種別コード（サービス契約ステータス） */
	private static final String CD_SBT_CD_SVC_KEI_STAT = "CD00037";
	
	/** SQL定義キー(KK_INSERT_001)*/
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_001 = "KK_INSERT_001";
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/** 処理管理番号 */
	private static final String TRN_KANRI_NO = "000000000165";
	
	/** ファイル名編集用 */
	private static final String FILE_NM = "ｅｏ電気紐付け不審リスト_";
	
	/** ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）ファイルパス */
	private String kkifm750FilePath = null;
	
	/** ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイルパス */
	private String kkifm751ForgetFilePath = null;
	
	/** ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイルパス */
	private String kkifm751CannotFilePath = null;
	
	/** ｅｏ電気紐付け不審リストファイルパス */
	private String kkifm751FilePath = null;
	
	/** ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイルオブジェクト */
	private JBSbatBusinessFileUtil kkifm751forgetFileObj = null;
	
	/** ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイルオブジェクト */
	private JBSbatBusinessFileUtil kkifm751cannotFileObj = null;
	
	/** ｅｏ電気紐付け不審リストファイルオブジェクト */
	private JBSbatBusinessFileUtil kkifm751FileObj = null;
	
	/** 料金グループコード格納マップ */
	private HashMap<String, String> cdPrcGrpMap = null;
	
	/** コード名称管理（サービス契約ステータスコード）格納マップ */
	private HashMap<String, String> cdNmKanriMap = null;
	
	/** ファイル出力件数 */
	private int outCount = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_M_PRC_GRP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PRC_GRP);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		String[] freeItems = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		
		// ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）ファイルファイルパス
		kkifm750FilePath = freeItems[0];
		
		// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイルパス
		kkifm751ForgetFilePath = freeItems[1];
		
		// ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイルパス
		kkifm751CannotFilePath = freeItems[2];
		
		// ｅｏ電気紐付け不審リストファイルパス
		kkifm751FilePath = freeItems[3];
		
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）ファイル
		BufferedReader brKkifm750 = null;
		// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイル
		BufferedReader brKkifm751Forget = null;
		// ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイル
		BufferedReader brKkifm751Cannot = null;
		
		// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイルオブジェクト
		kkifm751forgetFileObj = JKKBatCommon.createBusinessFileUtil(kkifm751ForgetFilePath,
				JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
		
		// ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイルオブジェクト
		kkifm751cannotFileObj = JKKBatCommon.createBusinessFileUtil(kkifm751CannotFilePath,
				JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
		
		try
		{
			// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）
			// ヘッダ１出力
			writeHeader1(LIST_SBT_FORGET);
			
			// ヘッダ２出力
			writeHeader2(LIST_SBT_FORGET);
			
			// ｅｏ電気紐付け不審リスト（紐付け不可確認）
			// ヘッダ１出力
			writeHeader1(LIST_SBT_CANNOT);
			
			// ヘッダ２出力
			writeHeader2(LIST_SBT_CANNOT);
			
			// 料金グループマスタ取得
			cdPrcGrpMap = getPrcGrp();
			
			// コード名称管理マスタ取得
			cdNmKanriMap = getCdNmKanri(CD_SBT_CD_SVC_KEI_STAT);
			
			// 入力ファイル（ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）ファイル）
			InputStreamReader isKkifm750 = new InputStreamReader(new FileInputStream(kkifm750FilePath), JKKStrConst.ENCODE_SJIS);
			brKkifm750 = new BufferedReader(isKkifm750);
			
			// 退避.サービス契約番号（ｅｏ電気サービス）初期化
			String bkSvcKeiNoEoelec = null;
			
			// リスト出力抑止フラグ
			boolean outStopFlg = false;
			
			// ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）ファイルの件数分を繰返す
			while (brKkifm750.ready())
			{
				// 1行読込み
				String data = brKkifm750.readLine();
				
				// ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）配列（カンマ区切り） */
				String[] fushinListTaishouSplit = null;
				
				// 入力データをカンマで区切り、配列に設定
				fushinListTaishouSplit = data.split(JKKStrConst.KDDI_CONMA, -1);
				
				// 入力データが０件の場合、以下の処理を実行しない
				if (JKKStringUtil.isNullEmpty(fushinListTaishouSplit))
				{
					continue;
				}
				
				// ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）配列 */
				ArrayList<String> inputFushinListTaishou = new ArrayList<String>();
				
				// カンマで区切ったデータのダブルクォーテーションを削除
				for (int i = 0; i < fushinListTaishouSplit.length; i++)
				{
					inputFushinListTaishou.add(fushinListTaishouSplit[i].substring(1, fushinListTaishouSplit[i].length() - 1));
				}
				
				// ｅｏ電気サービス契約番号
				String svcKeiNoEoelec = inputFushinListTaishou.get(0);
				
				// キーブレイクした場合
				if (!svcKeiNoEoelec.equals(bkSvcKeiNoEoelec))
				{
					// リスト出力抑止フラグ初期化
					outStopFlg = false;
					
					// ｅｏ電気サービス契約番号を退避
					bkSvcKeiNoEoelec = svcKeiNoEoelec;
				}
				
				// リスト出力抑止フラグチェック
				if (outStopFlg)
				{
					continue;
				} 
				
				// ｅｏ光回線サービス契約番号（サービス契約番号結合）
				String svcKeiNoEoh = inputFushinListTaishou.get(12);
				
				// ｅｏ光回線サービス契約番号（サービス契約番号結合）＝空白の場合
				if (JKKStringUtil.isNullBlank(svcKeiNoEoh))
				{
					// ｅｏ電気サービス契約の利用場所郵便番号
					String eoelecUsePlcPcd  = inputFushinListTaishou.get(4);
					
					// ｅｏ光回線サービス契約の利用場所郵便番号（ＳＹＳＩＤ結合）
					String usePlcPcdSysid  =  inputFushinListTaishou.get(32);
					
					// ｅｏ光回線サービス契約の転居先利用場所郵便番号（ＳＹＳＩＤ結合）
					String moveUsePlcPcdSysid  = inputFushinListTaishou.get(38);
					
// OM-2018-0000371 ADD START
					// サービス契約番号（eo電気サービス契約）（利用場所）（ＳＹＳＩＤ結合）
					String useEoelecSvcKeiNoSysid = inputFushinListTaishou.get(46);
					
					// サービス契約番号（eo電気サービス契約）（転居先利用場所）（ＳＹＳＩＤ結合）
					String moveEoelecSvcKeiNoSysid = inputFushinListTaishou.get(47);
					
					// サービス契約ステータス（eo電気サービス契約）（利用場所）（ＳＹＳＩＤ結合）
					String useEoelecSvcKeiStatSysid = inputFushinListTaishou.get(48);
					
					// サービス契約ステータス（eo電気サービス契約）（転居先利用場所）（ＳＹＳＩＤ結合）
					String moveEoelecSvcKeiStatSysid = inputFushinListTaishou.get(49);
// OM-2018-0000371 ADD END
					
					// ｅｏ電気紐付け不審リスト抽出（紐付け忘れ確認）対象として、
					// 利用場所郵便番号相違チェックと転居先利用場所郵便番号相違チェックを行う。
// OM-2018-0000371 MOD START
//					if (usePlcPcdSysid.equals(eoelecUsePlcPcd) || moveUsePlcPcdSysid.equals(eoelecUsePlcPcd))
					if (((JKKStringUtil.isNullBlank(useEoelecSvcKeiNoSysid)
							|| JBSbatKKConst.SVC_KEI_STAT_DLS_ZM.equals(useEoelecSvcKeiStatSysid)
							|| JBSbatKKConst.SVC_KEI_STAT_CNCL_ZM.equals(useEoelecSvcKeiStatSysid))
							&& usePlcPcdSysid.equals(eoelecUsePlcPcd))
							|| ((JKKStringUtil.isNullBlank(moveEoelecSvcKeiNoSysid)
									|| JBSbatKKConst.SVC_KEI_STAT_DLS_ZM.equals(moveEoelecSvcKeiStatSysid)
									|| JBSbatKKConst.SVC_KEI_STAT_CNCL_ZM.equals(moveEoelecSvcKeiStatSysid))
									&& moveUsePlcPcdSysid.equals(eoelecUsePlcPcd)))
// OM-2018-0000371 MOD END
					{
						// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）へ出力
						createKkifm751ForgetCannot(inputFushinListTaishou, LIST_SBT_FORGET, cdPrcGrpMap, cdNmKanriMap);
						
						// リスト出力抑止フラグ設定
						outStopFlg = true;
						
						continue;
					}
				}
				// ｅｏ光回線サービス契約番号（サービス契約番号結合）≠空白の場合
				else if (!JKKStringUtil.isNullBlank(svcKeiNoEoh))
				{
					// ｅｏ電気サービス契約のSYSID
					String eoelecSysid = inputFushinListTaishou.get(2);
					
					// ｅｏ光回線ＳＹＳＩＤ（サービス契約番号結合）
					String eohkisnSysidSvc = inputFushinListTaishou.get(13);
					
					// ｅｏ電気サービス契約の利用場所郵便番号
					String eoelecUsePlcPcd  = inputFushinListTaishou.get(4);
					
					// ｅｏ光回線サービス契約の利用場所郵便番号（サービス契約番号結合）
					String usePlcPcdSvc  = inputFushinListTaishou.get(16);
					
					// ｅｏ光回線サービス契約の転居先利用場所郵便番号（サービス契約番号結合）
					String moveUsePlcPcdSvc  = inputFushinListTaishou.get(22);
					
// IT1-2017-0000133 ADD START
					// サービス契約番号（eo電気サービス契約）（利用場所）（サービス契約番号結合）
					String useEoelecSvcKeiNoSvc = inputFushinListTaishou.get(44);
					
					// サービス契約番号（eo電気サービス契約）（転居先利用場所）（サービス契約番号結合）
					String moveEoelecSvcKeiNoSvc = inputFushinListTaishou.get(45);
// IT1-2017-0000133 ADD END
					
					// ｅｏ電気紐付け不審リスト抽出（紐付け不可確認）対象として、
					// SYSID相違チェック、利用場所郵便番号相違チェック、転居先利用場所郵便番号相違チェックを行う。
					if ( !eohkisnSysidSvc.equals(eoelecSysid) ||
// IT1-2017-0000133 MOD START
//						(!JKKStringUtil.isNullEmpty(usePlcPcdSvc) && !usePlcPcdSvc.equals(eoelecUsePlcPcd)) ||
//						(!JKKStringUtil.isNullEmpty(moveUsePlcPcdSvc) && !moveUsePlcPcdSvc.equals(eoelecUsePlcPcd)))
						(svcKeiNoEoelec.equals(useEoelecSvcKeiNoSvc) &&
								!JKKStringUtil.isNullEmpty(usePlcPcdSvc) && !usePlcPcdSvc.equals(eoelecUsePlcPcd)) ||
						(svcKeiNoEoelec.equals(moveEoelecSvcKeiNoSvc) &&
								!JKKStringUtil.isNullEmpty(moveUsePlcPcdSvc) && !moveUsePlcPcdSvc.equals(eoelecUsePlcPcd)))
// IT1-2017-0000133 MOD END
					{
						// ｅｏ電気紐付け不審リスト（紐付け不可確認）へ出力
						createKkifm751ForgetCannot(inputFushinListTaishou, LIST_SBT_CANNOT, cdPrcGrpMap, cdNmKanriMap);
					}
					// リスト出力抑止フラグ設定
					outStopFlg = true;
				}
			}
		}
		catch (IOException e)
		{
			// ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）ファイルがない場合
			super.logPrint.printDebugLog("ｅｏ電気紐付け不審リスト対象（ＳＹＳＩＤ結合）ファイルなし");
		}
		finally
		{
			// 入力ファイルを閉じる
			if (null != brKkifm750)
			{
				brKkifm750.close();
			}
			
			// 出力ファイルを閉じる
			JCCBatCommon.closeBusinessFileUtil(kkifm751forgetFileObj);
			JCCBatCommon.closeBusinessFileUtil(kkifm751cannotFileObj);
		}
		
		// ｅｏ電気紐付け不審リストファイルオブジェクト
		kkifm751FileObj = JKKBatCommon.createBusinessFileUtil(kkifm751FilePath,
				JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
		
		try
		{
			// 入力ファイル（ｅｏ電気紐付け不審リスト抽出（紐付け忘れ確認））
			InputStreamReader isKkifm751Forget = new InputStreamReader(new FileInputStream(kkifm751ForgetFilePath), JKKStrConst.ENCODE_SJIS);
			brKkifm751Forget = new BufferedReader(isKkifm751Forget);
			
			// 入力ファイル（ｅｏ電気紐付け不審リスト抽出（紐付け不可確認））
			InputStreamReader isKkifm751Cannot = new InputStreamReader(new FileInputStream(kkifm751CannotFilePath), JKKStrConst.ENCODE_SJIS);
			brKkifm751Cannot = new BufferedReader(isKkifm751Cannot);
			
			// ｅｏ電気紐付け不審リスト抽出（紐付け忘れ確認）の件数分を繰返す
			while (brKkifm751Forget.ready())
			{
				// 1行読込み
				String data = brKkifm751Forget.readLine();
				
				// ｅｏ電気紐付け不審リストへ出力
				createKkifm751(data);
			}
			
			// 空行を出力
			writeBlank();
			
			// ｅｏ電気紐付け不審リスト抽出（紐付け不可確認）の件数分を繰返す
			while (brKkifm751Cannot.ready())
			{
				// 1行読込み
				String data = brKkifm751Cannot.readLine();
				
				// ｅｏ電気紐付け不審リストへ出力
				createKkifm751(data);
			}
		}
		catch (IOException e)
		{
			// ｅｏ電気紐付け不審リスト抽出（紐付け忘れ確認）or（紐付け不可確認）がない場合
			super.logPrint.printDebugLog("ｅｏ電気紐付け不審リスト抽出（紐付け忘れ確認）or（紐付け不可確認）なし");
		}
		finally
		{
			// 入力ファイルを閉じる
			if (null != brKkifm751Forget)
			{
				brKkifm751Forget.close();
			}
			
			if (null != brKkifm751Cannot)
			{
				brKkifm751Cannot.close();
			}
			
			// 出力ファイルを閉じる
			JCCBatCommon.closeBusinessFileUtil(kkifm751FileObj);
		}
		
		// 電子ファイル管理登録処理
		JBSbatCommonItem arg0 = super.commonItem;						// 業務共通電文
		String arg1 = FILE_CD;											// ファイルコード
		String arg2 = kkifm751FilePath;									// ファイルパス
		String arg3 = JBSbatDateUtil.adjustMonth(super.opeDate, 3);		// ファイル削除年月日（運用日付 + 3ヶ月）
		String[] rc = JCCBatCommon.createDenshiFile(arg0, arg1, arg2, arg3);
		
		// ログ出力
		super.logPrint.printDebugLog("電子ファイル管理番号(" + rc[0] +  ")、世代登録年月日時分秒(" + rc[1] + ")");
		
		// ダウンロードファイル管理登録処理
		executeZM_T_DL_FILE_KANRI_KK_INSERT_001(getDlFileInsertParam(rc, arg3));
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_M_PRC_GRP.close();
		db_ZM_M_CD_NM_KANRI.close();
		db_CC_T_EFILE_KANRI.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_014)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_PRC_GRP_KK_SELECT_014() throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_KK_M_PRC_GRP.selectBySqlDefine(paramList, KK_M_PRC_GRP_KK_SELECT_014);
	}

	/**
	 * SQLKEY(KK_SELECT_009)で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_009(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_009);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 料金グループの全レコードを取得します。
	 * <br>
	 * @return HashMap：コード内容
	 * @throws Exception 
	 */
	private HashMap<String, String> getPrcGrp() throws Exception {
		
		HashMap<String, String> hmCdPrcGrp = new HashMap<String, String>();

		executeKK_M_PRC_GRP_KK_SELECT_014();
		
		// 取得した料金グループの内容をハッシュテーブルに格納する
		JBSbatCommonDBInterface prcGrpMap = new JBSbatCommonDBInterface();
		while ( (prcGrpMap = db_KK_M_PRC_GRP.selectNext() ) != null )
		{
			hmCdPrcGrp.put(prcGrpMap.getString(JBSbatKK_M_PRC_GRP.PRC_GRP_CD), 
				JBSbatStringUtil.Rtrim(prcGrpMap.getString(JBSbatKK_M_PRC_GRP.PRC_GRP_NM)));
		}
		
		return hmCdPrcGrp;
	}
	
	/**
	 * 料金グループハッシュテーブルより名称を取得します。
	 * <br>
	 * @param hmCdPrcGrp コード内容
	 * @param prcGrpCd 料金グループコード
	 * @return prcGrpNm 料金グループ名
	 * @throws Exception 
	 */
	private String getPrcGrpNm(HashMap<String, String> hmCdPrcGrp, String prcGrpCd) throws Exception {
		// 料金グループ名
		String prcGrpNm = hmCdPrcGrp.get(prcGrpCd);
		
		if (prcGrpNm == null){
			prcGrpNm = "";
		}
		
		return prcGrpNm;
	}
	
	/**
	 * コード名称管理より該当のコード種別のコードを取得します。
	 * <br>
	 * @param cdSbtCd コード種別コード
	 * @return HashMap：コード内容
	 * @throws Exception 
	 */
	private HashMap<String, String> getCdNmKanri(String cdSbtCd) throws Exception {
		
		HashMap<String, String> hmCdNmKanri = new HashMap<String, String>();

		Object[] prm = new Object[]{cdSbtCd, super.opeDate, super.opeDate};
		executeZM_M_CD_NM_KANRI_KK_SELECT_009(prm);
		
		// 取得したコード名称管理の内容をハッシュテーブルに格納する
		JBSbatCommonDBInterface adchgMap = new JBSbatCommonDBInterface();
		while ( (adchgMap = db_ZM_M_CD_NM_KANRI.selectNext() ) != null )
		{
			hmCdNmKanri.put(adchgMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV), 
				JBSbatStringUtil.Rtrim(adchgMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM)));
		}
		
		return hmCdNmKanri;
	}
	
	/**
	 * コード種別ハッシュテーブルより名称を取得します。
	 * <br>
	 * @param hmCdNmKanri コード内容
	 * @param cdDiv コード区分
	 * @return cdDivNm コード区分名
	 * @throws Exception 
	 */
	private String getCdDivNm(HashMap<String, String> hmCdNmKanri, String cdDiv) throws Exception {
		// コード区分名
		String cdDivNm = hmCdNmKanri.get(cdDiv);
		
		if (cdDivNm == null){
			cdDivNm = "";
		}
		
		return cdDivNm;
	}
	
	/**
	 * ｅｏ電気紐付け不審リストのヘッダ１を出力する。
	 * @param listSbt リスト種別
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void writeHeader1(String listSbt) throws Exception
	{
		ArrayList<String> outputList = new ArrayList<String>();
		
		String header1 = null;
		JBSbatBusinessFileUtil obj = null;
		
		if (LIST_SBT_FORGET.equals(listSbt))
		{
			// ヘッダ１
			header1 = "紐付け忘れ確認";
			
			// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイルオブジェクト
			obj = kkifm751forgetFileObj;
		}
		else if (LIST_SBT_CANNOT.equals(listSbt))
		{
			// ヘッダ１
			header1 = "紐付け不可確認";
			
			// ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイルオブジェクト
			obj = kkifm751cannotFileObj;
		}
		
		outputList.add(header1);
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(obj, outputList);
	}
	
	/**
	 * ｅｏ電気紐付け不審リストのヘッダ２を出力する。
	 * @param listSbt リスト種別
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void writeHeader2(String listSbt) throws Exception
	{
		ArrayList<String> outputList = new ArrayList<String>();
		
		JBSbatBusinessFileUtil obj = null;
		
		outputList.add("eo電気お客さまID");
		outputList.add("eo電気契約ステータス");
		outputList.add("eo電気契約タイプ区分名");
		outputList.add("eo光回線サービス料金グループ名");
		outputList.add("eo光回線サービスお客さまID");
		outputList.add("eo光回線サービス契約ステータス");
		outputList.add("eo電気利用場所郵便番号");
		outputList.add("eo電気利用場所住所");
		outputList.add("eo光回線サービス利用場所郵便番号");
		outputList.add("eo光回線サービス利用場所住所");
		outputList.add("eo光回線サービス転居先利用場所郵便番号");
		outputList.add("eo光回線サービス転居先利用場所住所");
		outputList.add("eo電気SYSID");
		outputList.add("eo光回線サービスSYSID");
		
		if (LIST_SBT_FORGET.equals(listSbt))
		{
			// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイルオブジェクト
			obj = kkifm751forgetFileObj;
		}
		else if (LIST_SBT_CANNOT.equals(listSbt))
		{
			// ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイルオブジェクト
			obj = kkifm751cannotFileObj;
		}
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(obj, outputList);
	}
	
	/**
	 * ｅｏ電気紐付け不審リスト（紐付け忘れ確認）or（紐付け不可確認）のデータ部を出力する。
	 * @param strList 出力対象データ
	 * @param listSbt リスト種別
	 * @param CdPrcGrpMap  料金グループ名マップ
	 * @param cdNmKanriMap サービス契約ステータス名マップ
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKkifm751ForgetCannot(ArrayList<String> dataList, String listSbt, HashMap<String, String> CdPrcGrpMap, HashMap<String, String> cdNmKanriMap) throws Exception
	{
		ArrayList<String> outputList = new ArrayList<String>();
		
		JBSbatBusinessFileUtil obj = null;
		
		// 紐付け忘れ確認・紐付け不審確認共通項目設定
		// ｅｏ電気お客さまＩＤ
		String eoelecCustId = dataList.get(0);
		// ｅｏ電気契約ステータス
		String eoelecKeiStat = dataList.get(3);
		// ｅｏ電気契約タイプ区分名
		String eoelecTypeDivNm = null;
		if (TYPE_DIV_SET.equals(dataList.get(1)))
		{
			eoelecTypeDivNm = "セットタイプ";
		}
		else if(TYPE_DIV_SOLO.equals(dataList.get(1)))
		{
			eoelecTypeDivNm = "単独タイプ";
		}
		// ｅｏ電気利用場所郵便番号
		String eoelecUsePlcPcd = dataList.get(4);
		// ｅｏ電気利用場所住所
		String eoelecUsePlcAd = dataList.get(5) + dataList.get(6) + dataList.get(7) + dataList.get(8) + dataList.get(9) + dataList.get(10) + dataList.get(11);
		// ｅｏ電気ＳＹＳＩＤ
		String eoelecSysid = dataList.get(2);
		
		
		// 紐付け忘れ確認・紐付け不審確認別項目設定
		String eohKisnPrcGrpNm = null;
		String eohKisnCustId = null;
		String eohKisnKeiStat = null;
		String eohKisnUsePlcPcd = null;
		String eohKisnUsePlcAd = null;
		String eohKisnMoveUsePlcPcd = null;
		String eohKisnMoveUsePlcAd = null;
		String eohKisnSysid = null;
		
		// 紐付け忘れ確認の場合
		if (LIST_SBT_FORGET.equals(listSbt))
		{
			// ｅｏ光回線サービス料金グループ名
			eohKisnPrcGrpNm = getPrcGrpNm(CdPrcGrpMap, dataList.get(31));
			
			// ｅｏ光回線サービスお客さまＩＤ
			eohKisnCustId = dataList.get(28);
			
			// ｅｏ光回線サービス契約ステータス
			eohKisnKeiStat = getCdDivNm(cdNmKanriMap, dataList.get(30));
			
			// ｅｏ光回線サービス利用場所郵便番号
			eohKisnUsePlcPcd = dataList.get(32);
			
			// ｅｏ光回線サービス利用場所住所
			eohKisnUsePlcAd = dataList.get(33) + dataList.get(34) + dataList.get(35) + dataList.get(36) + dataList.get(37);
			
			// ｅｏ光回線サービス転居先利用場所郵便番号
			eohKisnMoveUsePlcPcd = dataList.get(38);
			
			// ｅｏ光回線サービス転居先利用場所住所
			eohKisnMoveUsePlcAd = dataList.get(39) + dataList.get(40) + dataList.get(41) + dataList.get(42) + dataList.get(43);
			
			// ｅｏ光回線サービスＳＹＳＩＤ
			eohKisnSysid = dataList.get(29);
			
			// ｅｏ電気紐付け不審リスト（紐付け忘れ確認）ファイルオブジェクト
			obj = kkifm751forgetFileObj;
		}
		// 紐付け不可確認の場合
		else if(LIST_SBT_CANNOT.equals(listSbt))
		{
			// ｅｏ光回線サービス料金グループ名
			eohKisnPrcGrpNm = getPrcGrpNm(CdPrcGrpMap, dataList.get(15));
			
			// ｅｏ光回線サービスお客さまＩＤ
			eohKisnCustId = dataList.get(12);
			
			// ｅｏ光回線サービス契約ステータス
			eohKisnKeiStat = getCdDivNm(cdNmKanriMap, dataList.get(14));
			
			// ｅｏ光回線サービス利用場所郵便番号
			eohKisnUsePlcPcd = dataList.get(16);
			
			// ｅｏ光回線サービス利用場所住所
			eohKisnUsePlcAd = dataList.get(17) + dataList.get(18) + dataList.get(19) + dataList.get(20) + dataList.get(21);
			
			// ｅｏ光回線サービス転居先利用場所郵便番号
			eohKisnMoveUsePlcPcd = dataList.get(22);
			
			// ｅｏ光回線サービス転居先利用場所住所
			eohKisnMoveUsePlcAd = dataList.get(23) + dataList.get(24) + dataList.get(25) + dataList.get(26) + dataList.get(27);
			
			// ｅｏ光回線サービスＳＹＳＩＤ
			eohKisnSysid = dataList.get(13);
			
			// ｅｏ電気紐付け不審リスト（紐付け不可確認）ファイルオブジェクト
			obj = kkifm751cannotFileObj;
		}
		
		outputList.add(eoelecCustId);			// ｅｏ電気お客さまＩＤ
		outputList.add(eoelecKeiStat);			// ｅｏ電気契約ステータス
		outputList.add(eoelecTypeDivNm);		// ｅｏ電気契約タイプ区分名
		outputList.add(eohKisnPrcGrpNm);		// ｅｏ光回線サービス料金グループ名
		outputList.add(eohKisnCustId);			// ｅｏ光回線サービスお客さまＩＤ
		outputList.add(eohKisnKeiStat);			// ｅｏ光回線サービス契約ステータス
		outputList.add(eoelecUsePlcPcd);		// ｅｏ電気利用場所郵便番号
		outputList.add(eoelecUsePlcAd);			// ｅｏ電気利用場所住所
		outputList.add(eohKisnUsePlcPcd);		// ｅｏ光回線サービス利用場所郵便番号
		outputList.add(eohKisnUsePlcAd);		// ｅｏ光回線サービス利用場所住所
		outputList.add(eohKisnMoveUsePlcPcd);	// ｅｏ光回線サービス転居先利用場所郵便番号
		outputList.add(eohKisnMoveUsePlcAd);	// ｅｏ光回線サービス転居先利用場所住所
		outputList.add(eoelecSysid);			// ｅｏ電気ＳＹＳＩＤ
		outputList.add(eohKisnSysid);			// ｅｏ光回線サービスＳＹＳＩＤ
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(obj, outputList);
		
		// ファイル出力件数にインクリメントする
		outCount++;
	}
	
	/**
	 * ｅｏ電気紐付け不審リストのデータ部を出力する。
	 * @param data 出力対象データ
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKkifm751(String data) throws Exception
	{
		ArrayList<String> outputList = new ArrayList<String>();
		
		// １行出力
		outputList.add(data);
		
		JKKBatCommon.printBusinessFileUtil(kkifm751FileObj, outputList);
	}
	
	/**
	 * ｅｏ電気紐付け不審リストの空行を出力する。
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void writeBlank() throws Exception
	{
		ArrayList<String> outputList = new ArrayList<String>();
		
		// 項目設定
		outputList.add("");
		
		JKKBatCommon.printBusinessFileUtil(kkifm751FileObj, outputList);
	}
	
	/**
	 * SQLKEY(KK_INSERT_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 executeZM_T_DL_FILE_KANRI_KK_INSERT_001(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());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_001);
	}
	
	/**
	 * ZM_T_DL_FILE_KANRI-KK_INSERT_001を実行する際に必要なパラメータを返す。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * 
	 * @param rc
	 *            共通部品の電子ファイル管理登録から返却された文字列
	 * @param arg3
	 *            共通部品の電子ファイル管理登録に渡したファイル削除年月日
	 * @return setParam ZM_T_DL_FILE_KANRI-KK_INSERT_001を実行する際に必要なパラメータ
	 * @throws Exception
	 */
	private Object[] getDlFileInsertParam(String[] rc, String arg3) throws Exception
	{
		// システム日時
		String fileTimeStamp = JCCBatCommon.getSysDateTime();
		
		// ファイル名
		String fileName = FILE_NM + JKKStrConst.FILE_NM_TIMESTAMP.replaceAll(
				JKKStrConst.FILE_TIMESTAMP_FORMAT, fileTimeStamp);
		
		Object[] setParam = {
				TRN_KANRI_NO,						// 処理管理番号
				fileName,							// ファイル名
				outCount,							// データ件数
				rc[1],								// ファイル登録年月日時分秒
				arg3,								// ファイル削除年月日
				rc[0],								// 電子ファイル管理番号
				rc[1],								// 世代登録年月日時分秒
		};
		return setParam;
	}
}
