/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKOrsjgsManDslInfoAdd
*	ソースファイル名	：JBSbatKKOrsjgsManDslInfoAdd.java
*	作成者				：富士通
*	作成日				：2018年03月23日
*＜機能概要＞
*卸先事業者手動解約情報登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v37.00.00   2018/03/23  FJ)山地   【ANK-3366-00-00】eo光設備卸対応
*   v39.00.00   2018/12/18  FJ)中原   【IT1-2018-0000239】課金終了日の設定対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.table.JBSbatKK_T_ORSJGS_KEI_IDT;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKOrsjgsManDslInfoAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(卸先事業者契約異動通知) */
	private static final String D_TBL_NAME_KK_T_ORSJGS_KEI_IDT = "KK_T_ORSJGS_KEI_IDT";

	/** SQL定義キー(KK_SELECT_357) */
	private static final String KK_T_SVC_KEI_KK_SELECT_357 = "KK_SELECT_357";

	/** テーブルアクセスクラス(サービス契約) */
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(卸先事業者契約異動通知)*/
	private JBSbatSQLAccess db_KK_T_ORSJGS_KEI_IDT = null;

	/** 解約理由コード_01:通常解約 */
	private static final String SVC_DLRE_CD_TUJYO = "01";

	/** 解約理由コード_02:強制解約 */
	private static final String SVC_DLRE_CD_KYOSEI = "02";

	/** 卸先事業者解約種別コード_1:通常 */
	private static final String ORSJGS_DSL_SBT_CD_TUJYO = "1";

	/** 卸先事業者解約種別コード_2:強制解約 */
	private static final String ORSJGS_DSL_SBT_CD_KYOSEI = "2";

	/** 処理結果コード_00:正常 */
	private static final String RESULT_CD_OK  = "00";

	/** 処理結果コード_99:異常 */
	private static final String RESULT_CD_NG  = "99";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_ORSJGS_KEI_IDT = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_ORSJGS_KEI_IDT);

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		try
		{
			// エラーメッセージ文言
			String message = "";
			
			ArrayList<JBSbatCommonDBInterface> orsjgsKeiIdtInsertInfo = getExistOrsjgsKeiIdtInsert();
			
			if (orsjgsKeiIdtInsertInfo != null)
			{
				// 解約登録対象となったデータを登録する。
				for (int i = 0; i < orsjgsKeiIdtInsertInfo.size(); i++)
				{
					insertOrsjgsKeiIdt(
						(String)orsjgsKeiIdtInsertInfo.get(i).getString("NET_SVC_KEI_NO"),
						(String)orsjgsKeiIdtInsertInfo.get(i).getString(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_CD),
						(String)orsjgsKeiIdtInsertInfo.get(i).getString(JBSbatKK_T_ORSJGS_KEI_IDT.SVC_KEI_NO),
						(String)orsjgsKeiIdtInsertInfo.get(i).getString(JBSbatKK_T_ORSJGS_KEI_IDT.SVC_SBT),
						// IT1-2018-0000239 MOD START
						//(String)orsjgsKeiIdtInsertInfo.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_DLRE_CD));
						(String)orsjgsKeiIdtInsertInfo.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_DLRE_CD),
						(String)orsjgsKeiIdtInsertInfo.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD)
						);
						// IT1-2018-0000239 MOD END
				}
			}
		}
		catch(Exception e)
		{
			throw e;
		}

		return null;
	}
	
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		// ファイルを閉じる
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_KK_T_ORSJGS_KEI_IDT.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * SQLKEY(KK_SELECT_357)で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_357(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		
		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_357);
	}
	
	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	卸先事業者契約異動通知番号				ORSJGS_KEI_IDT_NO
	 *		 	卸先事業者連携対象サービス契約番号		ORSJGS_RNK_TG_SVC_KEI_NO
	 *		 	卸先事業者コード						ORSJGS_CD
	 *		 	卸先事業者連携識別コード				ORSJGS_RNKI_SKCD
	 *		 	サービス契約番号						SVC_KEI_NO
	 *		 	サービス種別							SVC_SBT
	 *		 	認証ID									NINSHO_ID
	 *		 	認証IDパスワード						NINSHO_ID_PWD
	 *		 	サービス開始年月日						SVC_STAYMD
	 *		 	課金開始年月日							CHRG_STAYMD
	 *		 	課金終了年月日							CHRG_ENDYMD
	 *		 	卸先事業者キャンセル理由コード			ORSJGS_CNCL_RSN_CD
	 *		 	卸先事業者キャンセル理由詳細コード		ORSJGS_CNCL_RSN_DTL_CD
	 *		 	卸先事業者キャンセル理由				ORSJGS_CNCL_RSN
	 *		 	工事案件番号							KOJIAK_NO
	 *		 	工事予定年月日							KOJI_RSV_YMD
	 *		 	卸先事業者連携工事予定区分				ORSJGS_RNKI_KOJI_RSV_DIV
	 *		 	卸先事業者解約種別コード				ORSJGS_DSL_SBT_CD
	 *		 	電話解約フラグ							TEL_DSL_FLG
	 *		 	撤去方法種別コード						TK_WAY_SBT_CD
	 *		 	解約問合せ客名							DSL_PROSCST_NM
	 *		 	撤去工事連絡先電話番号					TK_KOJI_RRKS_TLN
	 *		 	工事アポ対応者名						KOJI_APO_TAIOSHA_NM
	 *		 	工事立会者名							KOJI_TACHIAISHA_NM
	 *		 	工事会社連携情報メモ					KOCOMP_RNKI_INF_MEMO
	 *		 	送付先郵便番号							SOHUS_PCD
	 *		 	送付先住所情報							SOHUS_AD_INF
	 *		 	卸先事業者契約異動通知状態コード		ORSJGS_KEI_IDT_STAT_CD
	 *		 	卸先事業者契約異動発生年月日			ORSJGS_KEI_IDO_HASSEI_YMD
	 *		 	卸先事業者契約異動予約年月日			ORSJGS_KEI_IDO_RSV_YMD
	 *		 	卸先事業者契約異動処理年月日			ORSJGS_KEI_IDO_TRN_YMD
	 *		 	卸先事業者契約異動通知年月日時分秒		ORSJGS_KEI_IDT_DTM
	 *		 	卸先事業者契約異動通知結果コード		ORSJGS_KEI_IDT_RSLT_CD
	 *		 	卸先事業者契約異動通知NG理由			ORSJGS_KEI_IDT_NG_RSN
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_ORSJGS_KEI_IDT_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("ORSJGS_KEI_IDT_NO", setParam[0]);
		setMap.setValue("ORSJGS_RNK_TG_SVC_KEI_NO", setParam[1]);
		setMap.setValue("ORSJGS_CD", setParam[2]);
		setMap.setValue("ORSJGS_RNKI_SKCD", setParam[3]);
		setMap.setValue("SVC_KEI_NO", setParam[4]);
		setMap.setValue("SVC_SBT", setParam[5]);
		setMap.setValue("NINSHO_ID", setParam[6]);
		setMap.setValue("NINSHO_ID_PWD", setParam[7]);
		setMap.setValue("SVC_STAYMD", setParam[8]);
		setMap.setValue("CHRG_STAYMD", setParam[9]);
		setMap.setValue("CHRG_ENDYMD", setParam[10]);
		setMap.setValue("ORSJGS_CNCL_RSN_CD", setParam[11]);
		setMap.setValue("ORSJGS_CNCL_RSN_DTL_CD", setParam[12]);
		setMap.setValue("ORSJGS_CNCL_RSN", setParam[13]);
		setMap.setValue("KOJIAK_NO", setParam[14]);
		setMap.setValue("KOJI_RSV_YMD", setParam[15]);
		setMap.setValue("ORSJGS_RNKI_KOJI_RSV_DIV", setParam[16]);
		setMap.setValue("ORSJGS_DSL_SBT_CD", setParam[17]);
		setMap.setValue("TEL_DSL_FLG", setParam[18]);
		setMap.setValue("TK_WAY_SBT_CD", setParam[19]);
		setMap.setValue("DSL_PROSCST_NM", setParam[20]);
		setMap.setValue("TK_KOJI_RRKS_TLN", setParam[21]);
		setMap.setValue("KOJI_APO_TAIOSHA_NM", setParam[22]);
		setMap.setValue("KOJI_TACHIAISHA_NM", setParam[23]);
		setMap.setValue("KOCOMP_RNKI_INF_MEMO", setParam[24]);
		setMap.setValue("SOHUS_PCD", setParam[25]);
		setMap.setValue("SOHUS_AD_INF", setParam[26]);
		setMap.setValue("ORSJGS_KEI_IDT_STAT_CD", setParam[27]);
		setMap.setValue("ORSJGS_KEI_IDO_HASSEI_YMD", setParam[28]);
		setMap.setValue("ORSJGS_KEI_IDO_RSV_YMD", setParam[29]);
		setMap.setValue("ORSJGS_KEI_IDO_TRN_YMD", setParam[30]);
		setMap.setValue("ORSJGS_KEI_IDT_DTM", setParam[31]);
		setMap.setValue("ORSJGS_KEI_IDT_RSLT_CD", setParam[32]);
		setMap.setValue("ORSJGS_KEI_IDT_NG_RSN", setParam[33]);
		
		// DBアクセスを実行します
		db_KK_T_ORSJGS_KEI_IDT.insertByPrimaryKeys(setMap);
	}
	
	
	/**
	 * バッチ運用日をもとにサービス契約スキーマを検索する.
	 * 取得項目：
				サービス契約番号(卸ネットのサービス契約番号)
				サービス契約番号(キャンセル済みの電話もしくはテレビのサービス契約番号)
				卸事業者コード
				サービス種別
				サービス解約理由コード
	 * @return ArrayList
	 * @throws Exception
	 */
	private ArrayList<JBSbatCommonDBInterface> getExistOrsjgsKeiIdtInsert() throws Exception
	{
		Object[] param = {
				super.opeDate,					// 回線対象サービス契約．回線内訳使用開始年月日			<= バッチ運用日
				super.opeDate,					// 回線対象サービス契約．回線内訳使用開始年月日			<= バッチ運用日
				super.opeDate,					// サービス契約．予約適用年月日							<= バッチ運用日
				super.opeDate,					// サービス契約．サービスキャンセル年月日				 = バッチ運用日
				super.opeDate					// サービス契約．予約適用年月日							<= バッチ運用日
		};
		executeKK_T_SVC_KEI_KK_SELECT_357(param);
		JBSbatCommonDBInterface orsjgsInfo = new JBSbatCommonDBInterface();
		ArrayList<JBSbatCommonDBInterface> orsjgsList = new ArrayList<JBSbatCommonDBInterface>();

		while((orsjgsInfo = db_KK_T_SVC_KEI.selectNext()) != null)
		{
			orsjgsList.add(orsjgsInfo);
		}
		return (orsjgsList.size() > 0 ? orsjgsList : null);
	}
	
	/**
	 * 卸先事業者契約異動通知スキーマの登録を行う<br>
	 * @param  orsjgsRnkTgSvcKeiNo 卸先事業者連携対象サービス契約番号
	 * @param  orsjgsCd 卸先事業者コード
	 * @param  svcKeiNo サービス契約番号
	 * @param  svcSbt サービス種別
	 * @param  svcDlreCd 卸先事業者解約理由コード
	 * @param  svcChrgEndYmd 課金終了日
	 * @throws Exception 
	 * @exception JBSbatBusinessException 業務サービス内で発生した例外全般。
	 */
	private void insertOrsjgsKeiIdt(String orsjgsRnkTgSvcKeiNo,
										String orsjgsCd,
										String svcKeiNo,
										String svcSbt,
										// IT1-2018-0000239 MOD START
										//String svcDlreCd) throws Exception
										String svcDlreCd,
										String svcChrgEndYmd) throws Exception
										// IT1-2018-0000239 MOD END
	{
		// 卸先事業者契約異動通知番号の採番
		String orsjgsKeiIdtNo = JCCBatCommon.getFormatedNextSeq(super.commonItem, "SEQ_ORSJGS_KEI_IDT_NO", "", 15);
		String orsjgsDslSbtCd = null;
		if (SVC_DLRE_CD_TUJYO.equals(svcDlreCd))
		{
			orsjgsDslSbtCd = ORSJGS_DSL_SBT_CD_TUJYO;
		}
		else
		{
			orsjgsDslSbtCd = ORSJGS_DSL_SBT_CD_KYOSEI;
		}
		// 卸先事業者契約異動通知スキーマの設定値
		Object[] setParam = 
		{
			orsjgsKeiIdtNo,									// 卸先事業者契約異動通知番号
			orsjgsRnkTgSvcKeiNo,							// 卸先事業者連携対象サービス契約番号	サービス契約．サービス契約番号(卸ネットのサービス契約番号)
			orsjgsCd,										// 卸先事業者コード						卸先事業者コード
			"06",											// 卸先事業者連携識別コード				"06"(キャンセル依頼:固定)
			svcKeiNo,										// サービス契約番号
			svcSbt,											// サービス種別
			null,											// 認証ID
			null,											// 認証IDパスワード
			null,											// サービス開始年月日
			null,											// 課金開始年月日
			// IT1-2018-0000239 MOD START
			//null,											// 課金終了年月日
			svcChrgEndYmd,											// 課金終了年月日
			// IT1-2018-0000239 MOD END
			null,											// 卸先事業者キャンセル理由コード
			null,											// 卸先事業者キャンセル理由詳細コード
			null,											// 卸先事業者キャンセル理由
			null,											// 工事案件番号
			null,											// 工事予定年月日
			null,											// 卸先事業者連携工事予定区分
			orsjgsDslSbtCd,									// 卸先事業者解約種別コード
			null,											// 電話解約保留フラグ
			null,											// 撤去方法種別コード
			null,											// 解約問合せ客名
			null,											// 撤去工事連絡先電話番号
			null,											// 工事アポ対応者名
			null,											// 工事立会者名
			null,											// 工事会社連携情報メモ
			null,											// 送付先郵便番号
			null,											// 送付先住所情報
			"0",											// 卸先事業者契約異動通知状態コード
			super.opeDate,									// 卸先事業者契約異動発生年月日
			super.opeDate,									// 卸先事業者契約異動予定年月日
			super.opeDate,									// 卸先事業者契約異動処理年月日
			null,											// 卸先事業者契約異動通知年月日時分秒
			"1",											// 卸先事業者契約異動通知結果コード
			null											// 卸先事業者契約異動通知NG理由
		};
		
		// 卸先事業者契約異動通知スキーマ登録
		executeKK_T_ORSJGS_KEI_IDT_PKINSERT(setParam);
	}
}