/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKGetNhkDntIktMskData
*	ソースファイル名	：JBSbatKKGetNhkDntIktMskData.java
*	作成者				：富士通　
*	作成日				：2025年05月02日
*＜機能概要＞
*　NHK団体一括契約マイページ申込データを抽出し、CSVファイルに出力する部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v75.0.0	2025/05/02   FJ)峰村	新規作成【案件番号：ANK-4686-00-00】eoマイページからのNHK団体一括申込対応
*	v75.0.1	2025/06/11   FJ)星野	【案件番号：ANK-4686-00-00】IT2障害No.18対応
*	v75.0.0	2025/07/04   FJ)峰村	#87574：NHK団体一括契約マイページ申込データ抽出ファイル作成（１日起動）
*********************************************************************/
package eo.business.service;

import java.util.HashMap;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.common.JKUBatCommon;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_T_SEIOPSVC_KEI;
import eo.business.util.file.JBSbatKKIFM982;

import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatStringUtil;
import eo.framework.db.JBSbatSQLAccess;

import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringConverter;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCUtilCommon;

public class JBSbatKKGetNhkDntIktMskData extends JBSbatBusinessService
{
	/** SQL定義キー(KK_SELECT_025)*/
	private static final String KK_T_SEIOPSVC_KEI_KK_SELECT_025 = "KK_SELECT_025";
	
	/** SQL定義キー(KK_SELECT_026)*/
	private static final String KK_T_SEIOPSVC_KEI_KK_SELECT_026 = "KK_SELECT_026";
	
	/** SQL定義キー(CK_SELECT_002)*/
	private static final String CK_T_CUST_CK_SELECT_002 = "CK_SELECT_002";
	
	/** テーブルアクセスクラス(請求オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_SEIOPSVC_KEI = null;
	
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
	
	/** テーブルアクセスクラス(番ポ可能エリア対象局番)*/
	private JBSbatSQLAccess db_ZM_M_KYOKU_NO = null;
	
	/** テーブル(請求オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_SEIOPSVC_KEI = "KK_T_SEIOPSVC_KEI";
	
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";
	
	/** テーブル(局番)*/
	private static final String D_TBL_NAME_ZM_M_KYOKU_NO = "ZM_M_KYOKU_NO";
	
	/** バッチ運用日付 */
	private String opeDate = null;
	
	/** フリー項目情報格納用配列 */
	private String[] fleeItemArray = null;
	
	/** シェル起動パラメータ */
	private String exePara = null;

	/** 月曜日起動時のパラメータ */
	private static final String exePara_Monday = "1";
	
	/** 1日起動時のパラメータ */
	private static final String exePara_Oneday = "0";
	
	/** 1日 */
	private static final String oneday = "01";
	
	/** NHK団体一括登録の処理ID */
	private static final String id_KKIFE517 = "KKIFE517";
	
	/** 取次フラグ「03」 */
	private static final String trgFlg_03 = "03";
	
	/** エラーコード */
	private static String errCode = null;
	
	/** エラーメッセージリスト */
	private static ArrayList<String[]> errMsgList = new ArrayList<String[]>();
	
	/** エラーメッセージ固定分 */
	private static final String errMoji = "加入者コード：";
	
	/** 最大桁数（byte）お客様氏名 */
	private static final int MAXLEN_CUST_NM = 30;
	
	/** 最大桁数（byte）お客様カナ氏名 */
	private static final int MAXLEN_CUST_KANA = 15;
	
	/** 最大桁数（byte）現住所 */
	private static final int MAXLEN_NOW_AD = 160;
	
	/** 最大桁数（byte）旧住所 */
	private static final int MAXLEN_OLD_AD = 160;
	
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 ADD START
	/** 文字コード */
	private static final String MS932  = "MS932";
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 ADD END
	
// #87574 ADD START
	/** 月曜日の返却値 */
	private static final String monday = "2";
// #87574 ADD END
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼ */
		
		// 共通パラメータを設定します。
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_KK_T_SEIOPSVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIOPSVC_KEI);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_ZM_M_KYOKU_NO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_KYOKU_NO);
		
		// バッチ運用日付を取得
		opeDate = super.opeDate;
		
		// フリー項目情報を取得
		fleeItemArray = super.freeItem.split(JACStrConst.FREE_DIV);
		
		// シェル起動パラメータを取得
		exePara = fleeItemArray[0];
		
		/** ▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲ */
	}
	
	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 抽出開始日の取得
		String searchSday = null;
		
		// #87574 MOD START
		//String lastMonday = JPCUtilCommon.addDay(opeDate, -7); //先週の月曜日
		// 運用日の1日前から曜日を判定し、前の月曜日を取得する
		int cnt = 1;
		String lastMonday = JPCUtilCommon.addDay(opeDate, -cnt);
		while(!monday.equals(JPCUtilCommon.getDayOfWeek(lastMonday)))
		{
			cnt ++;
			lastMonday = JPCUtilCommon.addDay(opeDate, -cnt);
		}
		// #87574 MOD END
		
		// 起動パラメータが"1"（月曜日起動）の場合
		if(exePara_Monday.equals(exePara))
		{
			// 運用日の日にちが1日の場合
			if(oneday.equals(JPCUtilCommon.toDayFromYmd(opeDate)))
			{
				searchSday = lastMonday;
			}
			// 運用日の日にちが1日以外の場合
			else
			{
				String lastOneday = opeDate.substring(0, 6) + "01"; //直前の1日
				
				// 直前の1日と先週の月曜日の月曜日を比較しより最近日付を使用する
				// 日差算出（直前の1日-先週の月曜日）でより最近の日付を特定
				if(0 < JPCUtilCommon.subtractDay(lastOneday,lastMonday))
				{
					searchSday = lastOneday;
				}
				else
				{
					searchSday = lastMonday;
				}
			}
		}
		// 起動パラメータが"0"（1日起動）の場合
		else if(exePara_Oneday.equals(exePara))
		{
			searchSday = lastMonday;
		}
		
		// 抽出開始日時設定
		String searchSdate = searchSday + "000000";
		
		// 抽出終了日時設定
		String searchEdate = JPCUtilCommon.addDay(opeDate, -1) + "235959";
		
		// データ抽出
		
		// 検索結果取得List
		ArrayList<HashMap<String,String>> seiopsvcOldList = new ArrayList<HashMap<String,String>>();
		ArrayList<HashMap<String,String>> seiopsvcNewList = new ArrayList<HashMap<String,String>>();
		
		// 請求オプションサービス契約でeoマイページから申し込まれたデータの最古世代を検索
		seiopsvcOldList = getSeiopsvcOld(searchSdate,searchEdate);
		if(null != seiopsvcOldList && seiopsvcOldList.size() > 0 )
		{
			// 取得した請求オプションサービス契約番号を基に最新世代のデータを検索
			for( int i = 0; i < seiopsvcOldList.size(); i++)
			{
				seiopsvcNewList.add(getSeiopsvcNew(seiopsvcOldList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_NO)));
			}
		}
		
		// 必須項目チェックとお客様、連絡先情報取得
		boolean errFlg = false;
		if(null != seiopsvcNewList && seiopsvcNewList.size() > 0 )
		{
			for( int i = 0; i < seiopsvcNewList.size(); i++)
			{
				// 必須チェック（請求オプションサービス契約）
				// NHK外部連携契約コード
				String nhkOutRnkiKkeiCd = seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_OUT_RNKI_KEI_CD);
				if (JKKStringUtil.isNullBlank(nhkOutRnkiKkeiCd))
				{
					errFlg=true;
					errMsgList.add( new String[] {"NHK外部連携契約コード",errMoji + ""});
				}
				
				// NHK団体一括契約現在郵便番号
				if (JKKStringUtil.isNullBlank(seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_PCD)))
				{
					errFlg=true;
					errMsgList.add( new String[] {"NHK団体一括契約現郵便局番号",errMoji + nhkOutRnkiKkeiCd});
				}
				// NHK団体一括契約現在住所
				if (JKKStringUtil.isNullBlank(seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_AD)))
				{
					errFlg=true;
					errMsgList.add( new String[] {"NHK団体一括契約現住所",errMoji + nhkOutRnkiKkeiCd});
				}
				// NHK団体一括支払サイクルコード
				if (JKKStringUtil.isNullBlank(seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_GRP_IKT_PAY_CYCLE_CD)))
				{
					errFlg=true;
					errMsgList.add( new String[] {"NHK団体一括支払サイクルコード",errMoji + nhkOutRnkiKkeiCd});
				}
				// NHK団体一括契約日時
				if (JKKStringUtil.isNullBlank(seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_DATE)))
				{
					errFlg=true;
					errMsgList.add( new String[] {"NHK団体一括契約契約日時",errMoji + nhkOutRnkiKkeiCd});
				}
				// NHK団体一括契約メールアドレス
				if (JKKStringUtil.isNullBlank(seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_MLAD)))
				{
					errFlg=true;
					errMsgList.add( new String[] {"NHK団体一括契約メールアドレス",errMoji + nhkOutRnkiKkeiCd});
				}
				
				String sysId = seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.SYSID);
				
				// お客様情報を取得
				JBSbatCommonDBInterface custMap = null;
				custMap = getCustInfo(sysId);
				// 必須チェック（お客様）
				if (null == custMap)
				{
					errFlg=true;
					errMsgList.add( new String[] {"お客様名、お客様カナ氏名、電話番号",errMoji + nhkOutRnkiKkeiCd});
				}
				else
				{
					seiopsvcNewList.get(i).put(JBSbatCK_T_CUST.CUST_NM,custMap.getString(JBSbatCK_T_CUST.CUST_NM));
					seiopsvcNewList.get(i).put(JBSbatCK_T_CUST.CUST_KANA,custMap.getString(JBSbatCK_T_CUST.CUST_KANA));
					seiopsvcNewList.get(i).put(JBSbatCK_T_CUST.KEISHA_TELNO,custMap.getString(JBSbatCK_T_CUST.KEISHA_TELNO));
				}
			}
			
			// エラーがある場合、ファイル出力せずに終了
			if(errFlg)
			{				
				return null; // マイナーエラーで終了
			}
			
			// 抽出データがある場合、データ編集&ファイル出力
			if(null != seiopsvcNewList && seiopsvcNewList.size() > 0)
			{
				for( int i = 0; i < seiopsvcNewList.size(); i++)
				{
					// ファイル出力用マップにセット
					// 出力情報マップを作成
					JBSbatServiceInterfaceMap infoMap = new JBSbatServiceInterfaceMap();
					
					// バッチ共通アクセッサー
					JKUBatCommon jKUBatCommon = new JKUBatCommon();
					
					// 加入者コード
					infoMap.set(JBSbatKKIFM982.KNS_CODE, seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_OUT_RNKI_KEI_CD));
					
					// お客様氏名
					String cust_nm = seiopsvcNewList.get(i).get(JBSbatCK_T_CUST.CUST_NM);
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD START
//					if( MAXLEN_CUST_NM < cust_nm.getBytes(JKKBatConst.SJIS).length)
//					{
//						cust_nm = JBSbatStringUtil.adjustCharSize(cust_nm,MAXLEN_CUST_NM,JKKBatConst.SJIS);
//					}
					if( MAXLEN_CUST_NM < cust_nm.getBytes(MS932).length)
					{
						cust_nm = JBSbatStringUtil.adjustCharSize(cust_nm,MAXLEN_CUST_NM,MS932);
					}
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD END
					infoMap.set(JBSbatKKIFM982.CUST_NM, cust_nm);

					// お客様カナ氏名
					String cust_kana_hankaku = JKKStringConverter.convertHalf(seiopsvcNewList.get(i).get(JBSbatCK_T_CUST.CUST_KANA));
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD START
//					if( MAXLEN_CUST_KANA < cust_kana_hankaku.getBytes(JKKBatConst.SJIS).length)
//					{
//						cust_kana_hankaku = JBSbatStringUtil.adjustCharSize(cust_kana_hankaku,MAXLEN_CUST_KANA,JKKBatConst.SJIS);
//					}
					if( MAXLEN_CUST_KANA < cust_kana_hankaku.getBytes(MS932).length)
					{
						cust_kana_hankaku = JBSbatStringUtil.adjustCharSize(cust_kana_hankaku,MAXLEN_CUST_KANA,MS932);
					}
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD END
					infoMap.set(JBSbatKKIFM982.CUST_KANA, cust_kana_hankaku);
					
					// NHKお客様番号
					infoMap.set(JBSbatKKIFM982.NHK_CUST_NO, "");
					
					// 郵便局番号
					infoMap.set(JBSbatKKIFM982.PCD, JPCUtilCommon.toTopThreeDigitFromPcd(seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_PCD)));
					
					// 町域番号
					infoMap.set(JBSbatKKIFM982.CIKCD, JPCUtilCommon.toUnderFourDigitFromPcd(seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_PCD)));
					
					// 住所
					String now_add = seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_AD);
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD START
//					if( MAXLEN_NOW_AD < now_add.getBytes(JKKBatConst.SJIS).length)
//					{
//						now_add = JBSbatStringUtil.adjustCharSize(now_add,MAXLEN_NOW_AD,JKKBatConst.SJIS);
//					}
					if( MAXLEN_NOW_AD < now_add.getBytes(MS932).length)
					{
						now_add = JBSbatStringUtil.adjustCharSize(now_add,MAXLEN_NOW_AD,MS932);
					}
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD END
					infoMap.set(JBSbatKKIFM982.AD, now_add);
					
					// 電話番号分割
					String[] splitTln = new String[3];
					splitTln = jKUBatCommon.splitTln(commonItem,seiopsvcNewList.get(i).get(JBSbatCK_T_CUST.KEISHA_TELNO),db_ZM_M_KYOKU_NO);
					// 電話番号　市外局番
					infoMap.set(JBSbatKKIFM982.TEL_SGI, splitTln[0]);
					
					// 電話番号　市内局番
					infoMap.set(JBSbatKKIFM982.TEL_SNI, splitTln[1]);
					
					// 電話番号　加入番号
					infoMap.set(JBSbatKKIFM982.TEL_KNU, splitTln[2]);
					
					// 旧郵便番号がNullで無い場合、郵便番号の上3桁と下4桁を取得
					String old_pcd_top3 = "";
					String old_pcd_under4 = "";
					String old_pcd =seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_OLD_PCD);
					if(!JKKStringUtil.isNullBlank(old_pcd))
					{
						old_pcd_top3 = JPCUtilCommon.toTopThreeDigitFromPcd(old_pcd);
						old_pcd_under4 = JPCUtilCommon.toUnderFourDigitFromPcd(old_pcd);
					}
					
					// 旧郵便局番号
					infoMap.set(JBSbatKKIFM982.OLD_PCD, old_pcd_top3);
					
					// 旧町域番号
					infoMap.set(JBSbatKKIFM982.OLD_CIKCD, old_pcd_under4);
					
					// 旧住所
					String old_add = seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_OLD_AD);
					if(!JKKStringUtil.isNullBlank(old_add))
					{
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD START
//						if( MAXLEN_OLD_AD < old_add.getBytes(JKKBatConst.SJIS).length)
//						{
//							old_add = JBSbatStringUtil.adjustCharSize(old_add,MAXLEN_OLD_AD,JKKBatConst.SJIS);
//						}
						if( MAXLEN_OLD_AD < old_add.getBytes(MS932).length)
						{
							old_add = JBSbatStringUtil.adjustCharSize(old_add,MAXLEN_OLD_AD,MS932);
						}
// ANK-4686-00-00 IT2障害No.18対応 20250611 星野 MOD END
					}
					else
					{
						old_add = "";
					}
					infoMap.set(JBSbatKKIFM982.OLD_AD, old_add);
					
					// 支払コース
					infoMap.set(JBSbatKKIFM982.SHC, seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_GRP_IKT_PAY_CYCLE_CD));
					
					// NHK団体一括契約日時の年月日取得
					String nhk_keidate_ymd = seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_DATE).substring(0,8);
					
					// 届出日
					infoMap.set(JBSbatKKIFM982.TDK_DAY, nhk_keidate_ymd);
					
					// NHK送信データ作成日
					infoMap.set(JBSbatKKIFM982.NHK_SENDDATA_ADDDATE, opeDate);
					
					// 設置日
					String stc_date = seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_STLT_RCVR_STC_NITI);
					if(!JKKStringUtil.isNullBlank(stc_date))
					{
						infoMap.set(JBSbatKKIFM982.STC_DAY, stc_date);
					}
					else
					{
						infoMap.set(JBSbatKKIFM982.STC_DAY, "");
					}
					
					// 工事完了日
					infoMap.set(JBSbatKKIFM982.KJ_FIN_DAY, nhk_keidate_ymd);
					
					// 取次フラグ
					infoMap.set(JBSbatKKIFM982.TRG_FLG, trgFlg_03);
					
					// NHK契約日時情報
					infoMap.set(JBSbatKKIFM982.NHK_KEI_DATE_INFO, seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_DATE));
					
					// メールアドレス
					infoMap.set(JBSbatKKIFM982.MLAD, seiopsvcNewList.get(i).get(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_MLAD));

					// ファイル出力
										
					// 入出力インターフェースを設定
					
					// 出力情報 入出力インターフェースオブジェクトを生成
					JBSbatServiceInterfaceMap outmapInfo = new JBSbatServiceInterfaceMap();
					
					// 加入者コード
					outmapInfo.setString(JBSbatKKIFM982.KNS_CODE, infoMap.get(JBSbatKKIFM982.KNS_CODE));
					// お客様氏名
					outmapInfo.setString(JBSbatKKIFM982.CUST_NM, infoMap.get(JBSbatKKIFM982.CUST_NM));
					// お客様カナ氏名
					outmapInfo.setString(JBSbatKKIFM982.CUST_KANA, infoMap.get(JBSbatKKIFM982.CUST_KANA));
					// NHKお客様番号
					outmapInfo.setString(JBSbatKKIFM982.NHK_CUST_NO, infoMap.get(JBSbatKKIFM982.NHK_CUST_NO));
					// 郵便局番号
					outmapInfo.setString(JBSbatKKIFM982.PCD, infoMap.get(JBSbatKKIFM982.PCD));
					// 町域番号
					outmapInfo.setString(JBSbatKKIFM982.CIKCD, infoMap.get(JBSbatKKIFM982.CIKCD));
					// 住所
					outmapInfo.setString(JBSbatKKIFM982.AD, infoMap.get(JBSbatKKIFM982.AD));
					// 電話番号　市外局番
					outmapInfo.setString(JBSbatKKIFM982.TEL_SGI, infoMap.get(JBSbatKKIFM982.TEL_SGI));
					// 電話番号　市内局番
					outmapInfo.setString(JBSbatKKIFM982.TEL_SNI, infoMap.get(JBSbatKKIFM982.TEL_SNI));
					// 電話番号　加入番号
					outmapInfo.setString(JBSbatKKIFM982.TEL_KNU, infoMap.get(JBSbatKKIFM982.TEL_KNU));
					// 旧郵便局番号
					outmapInfo.setString(JBSbatKKIFM982.OLD_PCD, infoMap.get(JBSbatKKIFM982.OLD_PCD));
					// 旧町域番号
					outmapInfo.setString(JBSbatKKIFM982.OLD_CIKCD, infoMap.get(JBSbatKKIFM982.OLD_CIKCD));
					// 旧住所
					outmapInfo.setString(JBSbatKKIFM982.OLD_AD, infoMap.get(JBSbatKKIFM982.OLD_AD));
					// 支払コース
					outmapInfo.setString(JBSbatKKIFM982.SHC, infoMap.get(JBSbatKKIFM982.SHC));
					// 届出日
					outmapInfo.setString(JBSbatKKIFM982.TDK_DAY, infoMap.get(JBSbatKKIFM982.TDK_DAY));
					//NHK送信データ作成日
					outmapInfo.setString(JBSbatKKIFM982.NHK_SENDDATA_ADDDATE, infoMap.get(JBSbatKKIFM982.NHK_SENDDATA_ADDDATE));
					// 設置日
					outmapInfo.setString(JBSbatKKIFM982.STC_DAY, infoMap.get(JBSbatKKIFM982.STC_DAY));
					// 工事完了日
					outmapInfo.setString(JBSbatKKIFM982.KJ_FIN_DAY, infoMap.get(JBSbatKKIFM982.KJ_FIN_DAY));
					// 取次フラグ
					outmapInfo.setString(JBSbatKKIFM982.TRG_FLG, infoMap.get(JBSbatKKIFM982.TRG_FLG));
					// NHK契約日時情報
					outmapInfo.setString(JBSbatKKIFM982.NHK_KEI_DATE_INFO, infoMap.get(JBSbatKKIFM982.NHK_KEI_DATE_INFO));
					// メールアドレス
					outmapInfo.setString(JBSbatKKIFM982.MLAD, infoMap.get(JBSbatKKIFM982.MLAD));
					
					// 出力フラグを設定
					outmapInfo.setOutFlg(true);
					
					// 出力共通電文に入出力インターフェースを設定する。
					outputBean.addOutMapList(outmapInfo);
				}
			}
		}
		
		return outputBean;
		
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * 
	 * @throws Exception
	 */
	public void terminal() throws Exception 
	{
		/** ▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼ */
		
		// DBアクセスクラスをクローズします
		db_KK_T_SEIOPSVC_KEI.close();
		db_CK_T_CUST.close();
		db_ZM_M_KYOKU_NO.close();
		
		// エラーがある場合、エラーメッセージを出力します
		if(null != errMsgList && errMsgList.size() > 0 )
		{
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB2450KW);
			errCode = JPCBatchMessageConstant.EKKB2200TI;
			for( int i = 0; i < errMsgList.size(); i++)
			{
				super.logPrint.printBusinessErrorLog(errCode, errMsgList.get(i));
			}
			super.commonItem.addErrorCount(1);
		}
		
		/** ▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲ */
	}
	
	/**
	 * 請求オプションサービス契約を検索します（eoマイページから申し込まれた最古世代）
	 * @param sSdate 抽出開始日時
	 * @param sEdate 抽出終了日時
	 * @return 検索結果
	 * @throws Exception エラー
	 */
	private ArrayList<HashMap<String,String>> getSeiopsvcOld(String sSdate,String sEdate) throws Exception
	{
		// 検索処理実行
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(sSdate);
		paramList.setValue(sEdate);
		paramList.setValue(id_KKIFE517);
		paramList.setValue(opeDate);
		
		// DBアクセスを実行します
		db_KK_T_SEIOPSVC_KEI.selectBySqlDefine(paramList, KK_T_SEIOPSVC_KEI_KK_SELECT_025);
		
		// 結果データ
		ArrayList<HashMap<String,String>> result = new ArrayList<HashMap<String,String>>();
		
		if(db_KK_T_SEIOPSVC_KEI != null)
		{
			for(JBSbatCommonDBInterface seiopsvckeiMap = db_KK_T_SEIOPSVC_KEI.selectNext(); null != seiopsvckeiMap ; seiopsvckeiMap = db_KK_T_SEIOPSVC_KEI.selectNext())
			{
				HashMap<String,String> map = new HashMap<String,String>();
				map.put(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_NO, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_NO));
				result.add(map);
			}
		}
		
		return result;
	}
	
	/**
	 * 請求オプションサービス契約を検索します（請求オプションサービス契約番号に紐づく最新世代）
	 * @param seiopsvckeiNo 請求オプションサービス契約番号
	 * @return 検索結果
	 * @throws Exception エラー
	 */
	private HashMap<String,String> getSeiopsvcNew(String seiopsvckeiNo) throws Exception
	{
		/** DBアクセス結果を取得するためのMap */
		JBSbatCommonDBInterface seiopsvckeiMap = new JBSbatCommonDBInterface();
		
		// 検索処理実行
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(seiopsvckeiNo);
		paramList.setValue(opeDate);
		
		// DBアクセスを実行します
		db_KK_T_SEIOPSVC_KEI.selectBySqlDefine(paramList, KK_T_SEIOPSVC_KEI_KK_SELECT_026);
		
		// 結果データ
		seiopsvckeiMap = db_KK_T_SEIOPSVC_KEI.selectNext();
		HashMap<String,String> map = new HashMap<String,String>();
		map.put(JBSbatKK_T_SEIOPSVC_KEI.SYSID, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.SYSID));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_OUT_RNKI_KEI_CD, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_OUT_RNKI_KEI_CD));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_PCD, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_PCD));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_AD, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_NOW_AD));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_OLD_PCD, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_OLD_PCD));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_OLD_AD, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_OLD_AD));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_GRP_IKT_PAY_CYCLE_CD, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_GRP_IKT_PAY_CYCLE_CD));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_DATE, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_DATE));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_STLT_RCVR_STC_NITI, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_STLT_RCVR_STC_NITI));
		map.put(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_MLAD, seiopsvckeiMap.getString(JBSbatKK_T_SEIOPSVC_KEI.NHK_DNTIKTKEI_MLAD));
		
		return map;
		
	}
	
	/**
	 * お客様情報を検索します
	 * @param sysId SYSID
	 * @return 検索結果
	 * @throws Exception エラー
	 */
	private JBSbatCommonDBInterface getCustInfo(String sysId) throws Exception
	{
		/** DBアクセス結果を取得するためのMap */
		JBSbatCommonDBInterface custMap = new JBSbatCommonDBInterface();
		
		// 検索処理実行
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(sysId);
		paramList.setValue(opeDate);
		
		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_CK_SELECT_002);
		custMap = db_CK_T_CUST.selectNext();
		
		return custMap;
	}
}
