/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCNContUseAutoStaChk
*	ソースファイル名	：JBSbatCNContUseAutoStaChk.java
*	作成者				：富士通　
*	作成日				：2024年12月11日
*＜機能概要＞
*　コンテンツ利用自動開始チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v73.00.00	2024/12/11	FJ)謝		【ANK-4570-00-00】コンテンツ新規同時申込み時契約仕様見直し対応
*********************************************************************/
package eo.business.service;

import java.util.HashSet;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatCNIFM023001;
import eo.business.util.file.JBSbatCNIFM023002;
import eo.business.util.file.JBSbatCNIFM024;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatZM_M_SYS_PARAM_KNRI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JCNStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCNStringUtil;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCNContUseAutoStaChk 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_ZM_M_SYS_PARAM_KNRI = "ZM_M_SYS_PARAM_KNRI";

	/** テーブル(申込)*/
	private static final String D_TBL_NAME_KK_T_MSKM = "KK_T_MSKM";

	/** テーブル(ＮＴＴ卸契約)*/
	private static final String D_TBL_NAME_KK_T_NTTORS_KEI = "KK_T_NTTORS_KEI";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** SQL定義キー(CN_SELECT_002)*/
	private static final String ZM_M_WORK_PARAM_KNRI_CN_SELECT_002 = "CN_SELECT_002";

	/** SQL定義キー(CN_SELECT_002)*/
	private static final String ZM_M_SYS_PARAM_KNRI_CN_SELECT_002 = "CN_SELECT_002";

	/** SQL定義キー(CN_SELECT_001)*/
	private static final String KK_T_MSKM_CN_SELECT_001 = "CN_SELECT_001";

	/** SQL定義キー(CN_SELECT_001)*/
	private static final String KK_T_NTTORS_KEI_CN_SELECT_001 = "CN_SELECT_001";

	/** SQL定義キー(CN_SELECT_002)*/
	private static final String KK_T_MSKM_CN_SELECT_002 = "CN_SELECT_002";

	/** SQL定義キー(CN_SELECT_022)*/
	private static final String KK_T_SVC_KEI_CN_SELECT_022 = "CN_SELECT_022";

	/** SQL定義キー(CN_SELECT_020)*/
	private static final String KK_T_SVC_KEI_CN_SELECT_020 = "CN_SELECT_020";

	/** SQL定義キー(CN_SELECT_012)*/
	private static final String CK_T_CUST_CN_SELECT_012 = "CN_SELECT_012";

	/** SQL定義キー(CN_SELECT_007)*/
	private static final String CK_T_CUST_CN_SELECT_007 = "CN_SELECT_007";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(システムパラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_SYS_PARAM_KNRI = null;

	/** テーブルアクセスクラス(申込)*/
	private JBSbatSQLAccess db_KK_T_MSKM = null;

	/** テーブルアクセスクラス(ＮＴＴ卸契約)*/
	private JBSbatSQLAccess db_KK_T_NTTORS_KEI = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 業務パラメータID：ホームタイプ以外の料金コース（シンプルプラン） */
	private static final String WORK_PARAM_ID_KK_HTGAI_PCRS_SPP = "KK_HTGAI_PCRS_SPP_";
	
	/** 業務パラメータID：ホームタイプ以外の料金コース（typeN） */
	private static final String WORK_PARAM_ID_KK_HTGAI_PCRS_TPN = "KK_HTGAI_PCRS_TPN_";
	
	/** システムパラメータ分類コード：開通前コンテンツ開始制度切替日 */
	private static final String SYS_PARAM_BUNRUI_CD_OPBF_CONT_SWCH_DAY = "OPBF_CONT_SWCH_DAY";
	
	/** システムパラメータID：EO */
	private static final String SYS_PARAM_ID_EO = "EO";
	
	/** ホームタイプ以外の料金コースリスト */
	private HashSet<String> htgaiPcrsList = null;
	
	/** 開通前コンテンツ開始制度切替日 */
	private String opbfContSwchDay = "";
	
	/** 運用日付前日 */
	private String befOpeDate = "";
	
	/** 初回エラーログ出力フラグ true:初回、false:２回目以降*/
	private boolean firstErrLogOutputFlg = true;

	/**
	 * 初期処理
	 * @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_SYS_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_SYS_PARAM_KNRI);
		db_KK_T_MSKM = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM);
		db_KK_T_NTTORS_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_NTTORS_KEI);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 初期化
		htgaiPcrsList = new HashSet<String>();
		
		// ホームタイプ以外の料金コース（シンプルプラン）を取得する
		Object[] workParamKnriParam = { WORK_PARAM_ID_KK_HTGAI_PCRS_SPP, super.opeDate, super.opeDate };
		executeZM_M_WORK_PARAM_KNRI_CN_SELECT_002(workParamKnriParam);
		JBSbatCommonDBInterface workParamKnriMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		
		while (workParamKnriMap != null)
		{
			htgaiPcrsList.add(workParamKnriMap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
			workParamKnriMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		}
		
		// ホームタイプ以外の料金コース（typeN）を取得する
		Object[] workParamKnriParam2 = { WORK_PARAM_ID_KK_HTGAI_PCRS_TPN, super.opeDate, super.opeDate };
		executeZM_M_WORK_PARAM_KNRI_CN_SELECT_002(workParamKnriParam2);
		JBSbatCommonDBInterface workParamKnriMap2 = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		
		while (workParamKnriMap2 != null)
		{
			htgaiPcrsList.add(workParamKnriMap2.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
			workParamKnriMap2 = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		}
		
		// 開通前コンテンツ開始制度切替日を取得する
		Object[] sysParamKnriParam = { SYS_PARAM_BUNRUI_CD_OPBF_CONT_SWCH_DAY, SYS_PARAM_ID_EO, super.opeDate, super.opeDate };
		executeZM_M_SYS_PARAM_KNRI_CN_SELECT_002(sysParamKnriParam);
		JBSbatCommonDBInterface sysParamKnriMap = db_ZM_M_SYS_PARAM_KNRI.selectNext();
		
		if (sysParamKnriMap != null)
		{
			opbfContSwchDay = sysParamKnriMap.getString(JBSbatZM_M_SYS_PARAM_KNRI.SYS_PARAM_SETTE_VALUE_1);
		}
		
		// 運用日付の前日を取得する
		befOpeDate = JCCBatCommon.addDay(super.opeDate, -1);
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 出力共通電文を生成
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// コンテンツ申込番号
		String contMskmNo = inMap.getString(JBSbatCNIFM023001.CONT_MSKM_NO);
		
		// 旧制度対象フラグ true:旧制度、false:新制度
		boolean oldTgFlg = false;
		// 旧制度対象用 全件キャンセル解約フラグ true:全件キャンセル解約、false:全件キャンセル解約以外
		boolean oldTgAllCnclDslFlg = true;
		// 旧制度対象用 停止提供中有無フラグ true:有、false:無
		boolean oldTgStpTkchuUmFlg = false;
		// 新制度対象用 キャンセル解約有無フラグ true:有、false:無
		boolean newTgCnclDslUmFlg = false;
		// 新制度対象用 カレントSYSID
		String newTgCrntSysid = "";
		// 新制度対象用 最小世代SYSID
		String newTgMinSysid = "";
		// 新制度対象用 SYSID
		String newTgSysid = "";
		// 新制度対象用 サービス契約番号
		String newTgSvcKeiNo = "";
		// 新制度対象用 サービス開始年月日
		String newTgSvcStaYmd = "";
		// 新制度対象用 督促ステータス
		String newTgTokusokuStat = "";
		
		// ■■■新/旧制度対象の判定を行う■■■
		// 申込年月日が開通前コンテンツ開始制度切替日より過去の場合
		if (!JCNStringUtil.isNullBlank(inMap.getString(JBSbatCNIFM023001.MSKM_YMD))
				&& inMap.getString(JBSbatCNIFM023001.MSKM_YMD).compareTo(opbfContSwchDay) < 0)
		{
			// 旧制度
			oldTgFlg = true;
		}
		// 契約者タイプコードが個人、法人以外の場合
		else if (!(JCNStrConst.CD00036_KOJIN.equals(inMap.getString(JBSbatCNIFM023001.KEISHA_TYPE_CD))
				|| JCNStrConst.CD00036_HOJIN.equals(inMap.getString(JBSbatCNIFM023001.KEISHA_TYPE_CD))))
		{
			// 旧制度
			oldTgFlg = true;
		}
		// 卸先事業者コードが設定されている場合
		else if (!JCNStringUtil.isNullBlank(inMap.getString(JBSbatCNIFM023001.ORSJGS_CD)))
		{
			// 旧制度
			oldTgFlg = true;
		}
		
		// 申込番号に紐づくサービス契約情報を取得する
		Object[] mskmParam = { super.opeDate, super.opeDate, inMap.getString(JBSbatCNIFM023001.MSKM_NO) };
		executeKK_T_MSKM_CN_SELECT_001(mskmParam);
		JBSbatCommonDBInterface mskmMap = db_KK_T_MSKM.selectNext();
		
		// サービス契約情報ありの場合
		if (mskmMap != null)
		{
			while (mskmMap != null)
			{
				// ホームタイプ以外の料金コースの場合
				if (!oldTgFlg && htgaiPcrsList.contains(mskmMap.getString(JBSbatKK_T_SVC_KEI.PCRS_CD)))
				{
					// 旧制度
					oldTgFlg = true;
				}
				
				// メールアドレスの場合
				if (!oldTgFlg && JCNStrConst.PRGP_CD_SVC_CD_MLAD.equals(mskmMap.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD)))
				{
					// サービス契約番号に紐づくNTT卸契約を取得する
					Object[] nttorsKeiParam = { mskmMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO) };
					executeKK_T_NTTORS_KEI_CN_SELECT_001(nttorsKeiParam);
					JBSbatCommonDBInterface nttorsKeiMap = db_KK_T_NTTORS_KEI.selectNext();
					
					if (nttorsKeiMap != null)
					{
						// 旧制度
						oldTgFlg = true;
					}
				}
				
				// サービス契約ステータスがサービス提供中または休止・中断中、停止中の場合
				if (JCNStrConst.SVC_KEI_STAT_SVC_TK_CHU.equals(mskmMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))
						|| JCNStrConst.SVC_KEI_STAT_PAUSE_STP_CHU.equals(mskmMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))
						|| JCNStrConst.SVC_KEI_STAT_STOP.equals(mskmMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)))
				{
					// 停止提供中あり
					oldTgStpTkchuUmFlg = true;
				}
				
				// サービス契約ステータスが解約済、キャンセル済以外の場合
				if (!(JCNStrConst.SVC_KEI_STAT_DSL.equals(mskmMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))
						|| JCNStrConst.SVC_KEI_STAT_CANCEL.equals(mskmMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))))
				{
					// 全件キャンセル解約以外
					oldTgAllCnclDslFlg = false;
				}
				
				mskmMap = db_KK_T_MSKM.selectNext();
			}
		}
		// サービス契約情報なし場合
		else
		{
			// 出力電文を返却
			return outputBean;
		}
		
		// ■■■旧制度対象の場合■■■
		if (oldTgFlg)
		{
			// 停止提供中あり、または、全件キャンセル解約の場合
			if (oldTgStpTkchuUmFlg || oldTgAllCnclDslFlg)
			{
				// 入力レコードをコンテンツキャンセル対象ファイルに出力
				outputBean.addOutMapList_2(setContCancelDataFileMap(inMap));
				
				// 出力電文を返却
				return outputBean;
			}
			// 上記以外の場合
			else
			{
				// 出力電文を返却
				return outputBean;
			}
		}
		// ■■■新制度対象の場合■■■
		else
		{
			// 申込番号に紐づくネットサービス契約情報を取得する
			Object[] mskmParam2 = { super.opeDate, super.opeDate, inMap.getString(JBSbatCNIFM023001.MSKM_NO) };
			executeKK_T_MSKM_CN_SELECT_002(mskmParam2);
			JBSbatCommonDBInterface mskmMap2 = db_KK_T_MSKM.selectNext();
			
			// ネットサービス契約情報ありの場合
			if (mskmMap2 != null)
			{
				while (mskmMap2 != null)
				{
					// サービス契約ステータスが解約済またはキャンセル済の場合
					if (JCNStrConst.SVC_KEI_STAT_DSL.equals(mskmMap2.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))
							|| JCNStrConst.SVC_KEI_STAT_CANCEL.equals(mskmMap2.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)))
					{
						// キャンセル解約あり
						newTgCnclDslUmFlg = true;
						break;
					}
					// 上記以外の場合
					else
					{
						if (JCNStringUtil.isNullBlank(newTgSvcKeiNo))
						{
							// 前日にサービス提供中になったサービス契約情報を取得する
							Object[] svcKeiParam = { mskmMap2.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO), befOpeDate, super.opeDate };
							executeKK_T_SVC_KEI_CN_SELECT_022(svcKeiParam);
							JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
							
							if (svcKeiMap != null)
							{
								// 新制度対象用 SYSID
								newTgSysid = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SYSID);
								// 新制度対象用 サービス契約番号
								newTgSvcKeiNo = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
								// 新制度対象用 サービス開始年月日
								newTgSvcStaYmd = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD);
								
								// 新制度対象用 カレントSYSID
								newTgCrntSysid = mskmMap2.getString("SYSID_CUR");
								// 新制度対象用 最小世代SYSID
								newTgMinSysid = mskmMap2.getString("SYSID_MIN");
							}
						}
					}
					
					mskmMap2 = db_KK_T_MSKM.selectNext();
				}
			}
			// ネットサービス契約情報なし場合
			else
			{
				// 出力電文を返却
				return outputBean;
			}
			
			// キャンセル解約ありの場合
			if (newTgCnclDslUmFlg)
			{
				// 入力レコードをコンテンツキャンセル対象ファイルに出力
				outputBean.addOutMapList_2(setContCancelDataFileMap(inMap));
				
				// 出力電文を返却
				return outputBean;
			}
			
			// 前日にサービス提供中になったサービス契約情報が存在しない場合
			if (JCNStringUtil.isNullBlank(newTgSvcKeiNo))
			{
				// 出力電文を返却
				return outputBean;
			}
			
			// コンテンツ利用規約未同意チェックを行う
			Object[] svcKeiParam2 = { newTgSysid, super.opeDate };
			executeKK_T_SVC_KEI_CN_SELECT_020(svcKeiParam2);
			JBSbatCommonDBInterface svcKeiMap2 = db_KK_T_SVC_KEI.selectNext();
			
			// 存在しない場合はチェックエラー
			if (svcKeiMap2 == null)
			{
				// エラーログを出力
				String errNaiyo = "コンテンツ同意状況チェックエラー";
				errLogOutput(newTgSysid, contMskmNo, errNaiyo);
				
				// 出力電文を返却
				return outputBean;
			}
			
			// コンテンツ連絡先メールアドレスチェックを行う
			Object[] custParam = { super.opeDate, newTgSysid, super.opeDate };
			executeCK_T_CUST_CN_SELECT_012(custParam);
			JBSbatCommonDBInterface custMap = db_CK_T_CUST.selectNext();
			
			// 存在しない場合はチェックエラー
			if (custMap == null)
			{
				// エラーログを出力
				String errNaiyo = "コンテンツ連絡先メールアドレスチェックエラー";
				errLogOutput(newTgSysid, contMskmNo, errNaiyo);
				
				// 出力電文を返却
				return outputBean;
			}
			
			// 回線契約状態チェックを行う
			boolean kaisenCheckErrFlg = false;
			Object[] custParam2 = { super.opeDate, super.opeDate, newTgSysid, super.opeDate, super.opeDate, super.opeDate, super.opeDate };
			executeCK_T_CUST_CN_SELECT_007(custParam2);
			JBSbatCommonDBInterface custMap2 = db_CK_T_CUST.selectNext();
			
			while (custMap2 != null)
			{
				// 会員ISP決済状態コードが利用停止中の場合
				if (JCNStrConst.CD00870_ALLSTP.equals(custMap2.getString(JBSbatCK_T_CUST.MMB_ISP_KSSAI_STAT_CD)))
				{
					// 回線契約状態チェックエラー
					kaisenCheckErrFlg = true;
					break;
				}
				
				if (!JCNStringUtil.isNullBlank(custMap2.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT)))
				{
					// 督促ステータスが利用停止済以上かつ督促保留でない場合
					if (JCNStrConst.CD00184_USE_STP_ZM.compareTo(custMap2.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT)) <= 0
							&& !JCNStrConst.CD00184_TOKUSOKU_PDING.equals(custMap2.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT)))
					{
						// 回線契約状態チェックエラー
						kaisenCheckErrFlg = true;
						break;
					}
					
					// 処理対象の督促ステータスを取得する
					if (newTgSvcKeiNo.equals(custMap2.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)))
					{
						newTgTokusokuStat = custMap2.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT);
					}
				}
				
				custMap2 = db_CK_T_CUST.selectNext();
			}
			
			// 回線契約状態チェックエラーの場合
			if (kaisenCheckErrFlg)
			{
				// 入力レコードをコンテンツキャンセル対象ファイルに出力
				outputBean.addOutMapList_2(setContCancelDataFileMap(inMap));
				
				// エラーログを出力
				String errNaiyo = "回線契約状態チェックエラー";
				errLogOutput(newTgSysid, contMskmNo, errNaiyo);
				
				// 出力電文を返却
				return outputBean;
			}
			
			// お客様紐づきチェックを行う
			if (!JCNStringUtil.isNullBlank(newTgCrntSysid) && !newTgCrntSysid.equals(newTgMinSysid))
			{
				// 入力レコードをコンテンツキャンセル対象ファイルに出力
				outputBean.addOutMapList_2(setContCancelDataFileMap(inMap));
				
				// エラーログを出力
				String errNaiyo = "お客様紐づきチェックエラー";
				errLogOutput(newTgSysid, contMskmNo, errNaiyo);
				
				// 出力電文を返却
				return outputBean;
			}
			
			// 入力レコードをコンテンツ利用開始登録対象ファイルに出力
			outputBean.addOutMapList(setContUseStaAddDataFileMap(inMap, newTgSysid, newTgSvcKeiNo, newTgSvcStaYmd, newTgTokusokuStat));
			
			// 出力電文を返却
			return outputBean;
		}
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_ZM_M_SYS_PARAM_KNRI.close();
		db_KK_T_MSKM.close();
		db_KK_T_NTTORS_KEI.close();
		db_KK_T_SVC_KEI.close();
		db_CK_T_CUST.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CN_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_CN_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_CN_SELECT_002);
	}

	/**
	 * SQLKEY(CN_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_SYS_PARAM_KNRI_CN_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());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_ZM_M_SYS_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_SYS_PARAM_KNRI_CN_SELECT_002);
	}

	/**
	 * SQLKEY(CN_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	予約適用年月日
	 *		 	予約適用年月日
	 *		 	申込番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_MSKM_CN_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM.selectBySqlDefine(paramList, KK_T_MSKM_CN_SELECT_001);
	}

	/**
	 * SQLKEY(CN_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_NTTORS_KEI_CN_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_NTTORS_KEI.selectBySqlDefine(paramList, KK_T_NTTORS_KEI_CN_SELECT_001);
	}

	/**
	 * SQLKEY(CN_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 executeKK_T_MSKM_CN_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_KK_T_MSKM.selectBySqlDefine(paramList, KK_T_MSKM_CN_SELECT_002);
	}

	/**
	 * SQLKEY(CN_SELECT_022)で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_CN_SELECT_022(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_CN_SELECT_022);
	}

	/**
	 * SQLKEY(CN_SELECT_020)で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 executeKK_T_SVC_KEI_CN_SELECT_020(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_CN_SELECT_020);
	}

	/**
	 * SQLKEY(CN_SELECT_012)で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_CN_SELECT_012(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_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_CN_SELECT_012);
	}

	/**
	 * SQLKEY(CN_SELECT_007)で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_CN_SELECT_007(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_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_CN_SELECT_007);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * コンテンツキャンセル対象ファイルの出力項目を設定する
	 * @param inMap 入力電文
	 * @return JBSbatServiceInterfaceMap 出力電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setContCancelDataFileMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		// ファイル出力データを設定
		// コンテンツ申込番号
		outmap.setString(JBSbatCNIFM023002.CONT_MSKM_NO, inMap.getString(JBSbatCNIFM023001.CONT_MSKM_NO));
		// コンテンツ申込情報状態コード
		outmap.setString(JBSbatCNIFM023002.CONT_MKM_INF_STCD, inMap.getString(JBSbatCNIFM023001.CONT_MKM_INF_STCD));
		// コンテンツサービスコード
		outmap.setString(JBSbatCNIFM023002.CONT_SVC_CD, inMap.getString(JBSbatCNIFM023001.CONT_SVC_CD));
		// 申込番号
		outmap.setString(JBSbatCNIFM023002.MSKM_NO, inMap.getString(JBSbatCNIFM023001.MSKM_NO));
		// 申込年月日
		outmap.setString(JBSbatCNIFM023002.MSKM_YMD, inMap.getString(JBSbatCNIFM023001.MSKM_YMD));
		// 契約者タイプコード
		outmap.setString(JBSbatCNIFM023002.KEISHA_TYPE_CD, inMap.getString(JBSbatCNIFM023001.KEISHA_TYPE_CD));
		
		// 出力フラグを設定
		outmap.setOutFlg(true);
		
		return outmap;
	}
	
	
	/**
	 * コンテンツ利用開始登録対象ファイルの出力項目を設定する
	 * @param inMap 入力電文
	 * @param sysid SYSID
	 * @param svcKeiNo サービス契約番号
	 * @param svcStaYmd サービス開始年月日
	 * @param tokusokuStat 督促ステータス
	 * @return JBSbatServiceInterfaceMap 出力電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setContUseStaAddDataFileMap(JBSbatServiceInterfaceMap inMap,
																	String sysid,
																	String svcKeiNo,
																	String svcStaYmd,
																	String tokusokuStat) throws Exception
	{
		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		// ファイル出力データを設定
		// コンテンツ申込番号
		outmap.setString(JBSbatCNIFM024.CONT_MSKM_NO, inMap.getString(JBSbatCNIFM023001.CONT_MSKM_NO));
		// コンテンツ申込情報状態コード
		outmap.setString(JBSbatCNIFM024.CONT_MKM_INF_STCD, inMap.getString(JBSbatCNIFM023001.CONT_MKM_INF_STCD));
		// コンテンツサービスコード
		outmap.setString(JBSbatCNIFM024.CONT_SVC_CD, inMap.getString(JBSbatCNIFM023001.CONT_SVC_CD));
		// 申込番号
		outmap.setString(JBSbatCNIFM024.MSKM_NO, inMap.getString(JBSbatCNIFM023001.MSKM_NO));
		// 申込年月日
		outmap.setString(JBSbatCNIFM024.MSKM_YMD, inMap.getString(JBSbatCNIFM023001.MSKM_YMD));
		// SYSID
		outmap.setString(JBSbatCNIFM024.SYSID, sysid);
		// サービス契約番号
		outmap.setString(JBSbatCNIFM024.SVC_KEI_NO, svcKeiNo);
		// サービス開始年月日
		outmap.setString(JBSbatCNIFM024.SVC_STA_YMD, svcStaYmd);
		// 督促ステータス
		outmap.setString(JBSbatCNIFM024.TOKUSOKU_STAT, tokusokuStat);
		
		// 出力フラグを設定
		outmap.setOutFlg(true);
		
		return outmap;
	}
	
	/**
	 * エラーログ出力処理を行う
	 * @param sysid SYSID
	 * @param contMskmNo コンテンツ申込番号
	 * @param errNaiyo エラー内容
	 * @throws Exception
	 */
	private void errLogOutput(String sysid, String contMskmNo, String errNaiyo) throws Exception
	{
		// 初回エラーログ出力の場合
		if (firstErrLogOutputFlg)
		{
			// エラーログを出力する
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECNB0550KW, new String[] {});
			commonItem.addErrorCount(1);
			
			firstErrLogOutputFlg = false;
		}
		
		// インフォメーションログを出力する
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECNB0560AI, new String[] {sysid, contMskmNo, errNaiyo});
	}
}
