/*********************************************************************
*  All Rights reserved,Copyright (c) Fujitsu ,2017					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHKakugetsuSeikyuTrgtRls
*	ソースファイル名	：JBSbatCHKakugetsuSeikyuTrgtRls.java
*	作成者				：富士通　
*	作成日				：2019年10月11日
*＜機能概要＞
*　 隔月請求対象解除部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2019/10/11   富士通		【ANK-3586-00-00】隔月合算請求 新規作成
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatCHIFM335;
import eo.business.util.table.JBSbatKK_T_SEIKY_YOKSI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
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.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHKakugetsuSeikyuTrgtRls extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(請求抑止)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_YOKSI = "KK_T_SEIKY_YOKSI";

	/** テーブル(料金対応記録)*/
	private static final String D_TBL_NAME_CH_T_PRC_TAIOKRK = "CH_T_PRC_TAIOKRK";

	/** SQL定義キー(CH_SELECT_010)*/
	private static final String KK_T_SEIKY_YOKSI_CH_SELECT_010 = "CH_SELECT_010";

	/** テーブルアクセスクラス(請求抑止)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_YOKSI = null;

	/** テーブルアクセスクラス(料金対応記録)*/
	private JBSbatSQLAccess db_CH_T_PRC_TAIOKRK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 請求抑止フラグ(有効)*/
	private static final String SEIKY_YOKSI_FLG_MK = "0";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SEIKY_YOKSI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_YOKSI);
		db_CH_T_PRC_TAIOKRK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_PRC_TAIOKRK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		String seikyKeiNo = inMap.getString(JBSbatCHIFM335.SEIKY_KEI_NO);
		String seikyYoksiCd = inMap.getString(JBSbatCHIFM335.SEIKY_YOKSI_CD);
		String tokusokuYoksiFlg = inMap.getString(JBSbatCHIFM335.TOKUSOKU_YOKSI_FLG);

		executeKK_T_SEIKY_YOKSI_CH_SELECT_010(new Object[]{seikyKeiNo, seikyYoksiCd});
		JBSbatCommonDBInterface retSeikyYoksi = db_KK_T_SEIKY_YOKSI.selectNext();

		// 存在しない場合、または督促抑止フラグが0の場合（★追加）は更新を行わない。
		if(null == retSeikyYoksi || "0".equals(tokusokuYoksiFlg)) {
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1670JI,
					new String[] {JBSbatKK_T_SEIKY_YOKSI.TABLE_NAME,
					JBSbatKK_T_SEIKY_YOKSI.SEIKY_KEI_NO + "," + JBSbatKK_T_SEIKY_YOKSI.SEIKY_YOKSI_CD + ":"
					+ seikyKeiNo + "," + seikyYoksiCd,
					"対象レコードが0件のため処理をスキップしました。"});
			return null;
		}

		// 請求抑止更新
		updateSeikyYoksi(seikyKeiNo, seikyYoksiCd);
		
		// 料金対応記録登録
		insertPrcTaioKrk(seikyKeiNo,JACStrConst.TKRK_SBTD_YKSCL_TOKUSOKU);

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SEIKY_YOKSI.close();
		db_CH_T_PRC_TAIOKRK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	private void updateSeikyYoksi(String seikyKeiNo, String seikyYoksiCd) throws Exception {
		// 設定値
		JBSbatCommonDBInterface setParam = new JBSbatCommonDBInterface();

		// 請求抑止フラグ
		setParam.setValue(SEIKY_YOKSI_FLG_MK);

		// 請求抑止解除年月日
		setParam.setValue(super.opeDate);
		
		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();

		// 請求契約番号
		whereParam.setValue(seikyKeiNo);

		// 請求抑止コード
		whereParam.setValue(seikyYoksiCd);

		// 更新実行（PK更新）
		executeKK_T_SEIKY_YOKSI_PKUPDATE(setParam.getList().toArray(), whereParam.getList().toArray());
	}

	/**
	 * 料金対応記録に登録します
	 * @param seikyKeiNo 請求契約番号
	 * @param tkrkSbtd 料金対応記録種別コード
	 * @return JBSbatServiceInterfaceMap
	 */
	private void insertPrcTaioKrk(String seikyKeiNo, String tkrkSbtd) throws Exception {
		// 設定値
		String[] setParam = new String[]{
				JKKBatCommon.getFormatedNextSeq(commonItem, "SEQ_PRC_TAIO_KIROK_NO", "", 12),	// 料金対応記録番号
				batchUserId,																	// 料金対応ユーザID
				seikyKeiNo,																		// 請求契約番号
				JBSbatDateUtil.getSystemDateTimeStamp(),										// 対応年月日時分秒
				JACStrConst.TKRK_SBT_KAKUGETSU_SEIKY_UPD_BATCH,									// 料金対応記録種別コード
				tkrkSbtd,																		// 料金対応記録種別詳細コード
				"",																				// タイトル
				"スキップ（隔月請求）",															// 記事
				"",																				// 変更前コード種別コード
				"",																				// 変更前コード区分
				"",																				// 変更後コード種別コード
				"",																				// 変更後コード区分
				"",																				// 変更前料金グループコード
				"",																				// 変更前料金コースコード
				"",																				// 変更前料金サービスコード
				"",																				// 変更前料金項目コード
				"",																				// 変更後料金グループコード
				"",																				// 変更後料金コースコード
				"",																				// 変更後料金サービスコード
				"",																				// 変更後料金項目コード
				"",																				// 変更前年月日
				"",																				// 変更後年月日
				"",																				// 変更前金額
				"",																				// 変更後金額
				"",																				// 記録対象年月
				JACStrConst.TAIORRKI_RENDO_TG_FLG_HIHYOJI,										// 対応履歴連動対象フラグ
				"",																				// 対応記録番号
				"",																				// サービス契約番号
				"",																				// 督促番号
				"",																				// 督促異動番号
				"",																				// 請求番号
				"",																				// 金庫番号
				"",																				// 債権番号
				"",																				// 入金番号
				""																				// 電子ファイル管理番号
		};
		executeCH_T_PRC_TAIOKRK_PKINSERT(setParam);
	}

		/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CH_SELECT_010)で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_SEIKY_YOKSI_CH_SELECT_010(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SEIKY_YOKSI.selectBySqlDefine(paramList, KK_T_SEIKY_YOKSI_CH_SELECT_010);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	請求抑止フラグ				SEIKY_YOKSI_FLG
	 *		 	請求抑止解除年月日				SEIKY_YOKSI_RLS_YMD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SEIKY_KEI_NO
	 *		 	SEIKY_YOKSI_CD
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SEIKY_YOKSI_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SEIKY_YOKSI_FLG", setParam[0]);
		setMap.setValue("SEIKY_YOKSI_RLS_YMD", setParam[1]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SEIKY_KEI_NO", whereParam[0]);
		whereMap.setValue("SEIKY_YOKSI_CD", whereParam[1]);

		// DBアクセスを実行します
		db_KK_T_SEIKY_YOKSI.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	料金対応記録番号				PRC_TAIO_KIROK_NO
	 *		 	料金対応ユーザＩＤ				PRC_TAIO_USER_ID
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	対応年月日時分秒				TAIO_DTM
	 *		 	料金対応記録種別コード				PRC_TAIO_KIROK_SBT_CD
	 *		 	料金対応記録種別詳細コード				PRC_TAIO_KIROK_SBT_DTL_CD
	 *		 	タイトル				TITLE
	 *		 	記事				KIJI
	 *		 	変更前コード種別コード				CHG_BF_CD_SBT_CD
	 *		 	変更前コード区分				CHG_BF_CD_DIV
	 *		 	変更後コード種別コード				CHG_AF_CD_SBT_CD
	 *		 	変更後コード区分				CHG_AF_CD_DIV
	 *		 	変更前料金グループコード				CHG_BF_PRC_GRP_CD
	 *		 	変更前料金コースコード				CHG_BF_PCRS_CD
	 *		 	変更前料金サービスコード				CHG_BF_PRC_SVC_CD
	 *		 	変更前料金項目コード				CHG_BF_PRC_KMK_CD
	 *		 	変更後料金グループコード				CHG_AF_PRC_GRP_CD
	 *		 	変更後料金コースコード				CHG_AF_PCRS_CD
	 *		 	変更後料金サービスコード				CHG_AF_PRC_SVC_CD
	 *		 	変更後料金項目コード				CHG_AF_PRC_KMK_CD
	 *		 	変更前年月日				CHG_BF_YMD
	 *		 	変更後年月日				CHG_AF_YMD
	 *		 	変更前金額				CHG_BF_AMNT
	 *		 	変更後金額				CHG_AF_AMNT
	 *		 	記録対象年月				KIROK_TG_YM
	 *		 	対応履歴連動対象フラグ				TAIORRKI_RENDO_TG_FLG
	 *		 	対応記録番号				TAIO_KIROK_NO
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	督促番号				TOKUSOKU_NO
	 *		 	督促異動番号				TOKUSOKU_IDO_NO
	 *		 	請求番号				SEIKY_NO
	 *		 	金庫番号				KNK_NO
	 *		 	債権番号				SAIKEN_NO
	 *		 	入金番号				NYUKIN_NO
	 *		 	電子ファイル管理番号				EFILE_KANRI_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_PRC_TAIOKRK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("PRC_TAIO_KIROK_NO", setParam[0]);
		setMap.setValue("PRC_TAIO_USER_ID", setParam[1]);
		setMap.setValue("SEIKY_KEI_NO", setParam[2]);
		setMap.setValue("TAIO_DTM", setParam[3]);
		setMap.setValue("PRC_TAIO_KIROK_SBT_CD", setParam[4]);
		setMap.setValue("PRC_TAIO_KIROK_SBT_DTL_CD", setParam[5]);
		setMap.setValue("TITLE", setParam[6]);
		setMap.setValue("KIJI", setParam[7]);
		setMap.setValue("CHG_BF_CD_SBT_CD", setParam[8]);
		setMap.setValue("CHG_BF_CD_DIV", setParam[9]);
		setMap.setValue("CHG_AF_CD_SBT_CD", setParam[10]);
		setMap.setValue("CHG_AF_CD_DIV", setParam[11]);
		setMap.setValue("CHG_BF_PRC_GRP_CD", setParam[12]);
		setMap.setValue("CHG_BF_PCRS_CD", setParam[13]);
		setMap.setValue("CHG_BF_PRC_SVC_CD", setParam[14]);
		setMap.setValue("CHG_BF_PRC_KMK_CD", setParam[15]);
		setMap.setValue("CHG_AF_PRC_GRP_CD", setParam[16]);
		setMap.setValue("CHG_AF_PCRS_CD", setParam[17]);
		setMap.setValue("CHG_AF_PRC_SVC_CD", setParam[18]);
		setMap.setValue("CHG_AF_PRC_KMK_CD", setParam[19]);
		setMap.setValue("CHG_BF_YMD", setParam[20]);
		setMap.setValue("CHG_AF_YMD", setParam[21]);
		setMap.setValue("CHG_BF_AMNT", setParam[22]);
		setMap.setValue("CHG_AF_AMNT", setParam[23]);
		setMap.setValue("KIROK_TG_YM", setParam[24]);
		setMap.setValue("TAIORRKI_RENDO_TG_FLG", setParam[25]);
		setMap.setValue("TAIO_KIROK_NO", setParam[26]);
		setMap.setValue("SVC_KEI_NO", setParam[27]);
		setMap.setValue("TOKUSOKU_NO", setParam[28]);
		setMap.setValue("TOKUSOKU_IDO_NO", setParam[29]);
		setMap.setValue("SEIKY_NO", setParam[30]);
		setMap.setValue("KNK_NO", setParam[31]);
		setMap.setValue("SAIKEN_NO", setParam[32]);
		setMap.setValue("NYUKIN_NO", setParam[33]);
		setMap.setValue("EFILE_KANRI_NO", setParam[34]);
	
		// DBアクセスを実行します
		db_CH_T_PRC_TAIOKRK.insertByPrimaryKeys(setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
