/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCNCreditSeikyDataResultCheck
*	ソースファイル名	：JBSbatCNCreditSeikyDataResultCheck.java
*	作成者				：富士通　
*	作成日				：2022年05月10日
*＜機能概要＞
*　コンテンツクレジット請求データ結果チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v58.00.00	2022/05/10   FJ)吉田	【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*********************************************************************/
package eo.business.service;


import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCNIFI002;
import eo.business.util.table.JBSbatCN_T_CONTJIGYO_CRECA;
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;

/**
* コンテンツクレジット請求データ結果チェック <p>
*<BR>
* @author 富士通
*/
public class JBSbatCNCreditSeikyDataResultCheck extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コンテンツ事業クレジットカード)*/
	private static final String D_TBL_NAME_CN_T_CONTJIGYO_CRECA = "CN_T_CONTJIGYO_CRECA";
	
	/** テーブルアクセスクラス(コンテンツ事業クレジットカード)*/
	private JBSbatSQLAccess db_CN_T_CONTJIGYO_CRECA = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	// ====定数====
	/**
	 * 起動モード：1(オーソリあり)
	 */
	private static final String MODE_OSORI_ARI = "1";
	
	/**
	 * 起動モード：2(オーソリなし)
	 */
	private static final String MODE_OSORI_NASI = "2";
	
	/**
	 * 処理結果：0(正常)
	 */
	private static final String TRAN_RSLT_SUCSESS = "0";
	
	/**
	 * 処理結果：1(異常)
	 */
	private static final String TRAN_RSLT_ERROR = "1";
	
	// 退避
	/**
	 * 起動モード：1(オーソリあり)、2(オーソリなし)
	 */
	private String mode = "";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_CN_T_CONTJIGYO_CRECA = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CONTJIGYO_CRECA);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// フリー項目を分割する
		String[] freeItem = super.freeItem.split(JACStrConst.FREE_DIV, -1);
		this.mode = freeItem[0];
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][opeDate=" + super.opeDate + "]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		JBSbatOutputItem outputInItem = new JBSbatOutputItem();
		
		if (inMap == null)
		{
			return outputInItem;
		}
		
		// 処理結果
		String tranRslt = inMap.getString(JBSbatCNIFI002.TRAN_RSLT);
		
		// オーソリ無の場合
		if(MODE_OSORI_NASI.equals(mode))
		{
			// 処理結果が正常の場合
			if(TRAN_RSLT_SUCSESS.equals(tranRslt))
			{
				// コンテンツ事業クレジットカードスキーマを更新する。
				executeCN_T_CONTJIGYO_CRECA_PKUPDATE(inMap);
			}
			// 処理結果が正常以外の場合
			else
			{
				// マイナーアラームを呼動する。
				String[] errorString = new String[6];
				
				errorString[0] = "オーソリ無";
				errorString[1] = inMap.getString(JBSbatCNIFI002.MERCHANT_DEAL_ID);
				errorString[2] = inMap.getString(JBSbatCNIFI002.KSSAI_ID);
				errorString[3] = inMap.getString(JBSbatCNIFI002.CUST_ID);
				errorString[4] = inMap.getString(JBSbatCNIFI002.RESPONSE_CD);
				errorString[5] = inMap.getString(JBSbatCNIFI002.RESPONSE_DTL);
				
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECNB0470JW,errorString);
			}
		}
		// オーソリ有の場合
		else if(MODE_OSORI_ARI.equals(mode))
		{
			// 処理結果が正常以外の場合
			if(!TRAN_RSLT_SUCSESS.equals(tranRslt))
			{
				// マイナーアラームを呼動する。
				String[] errorString = new String[6];
				
				errorString[0] = "オーソリ有";
				errorString[1] = inMap.getString(JBSbatCNIFI002.MERCHANT_DEAL_ID);
				errorString[2] = inMap.getString(JBSbatCNIFI002.KSSAI_ID);
				errorString[3] = inMap.getString(JBSbatCNIFI002.CUST_ID);
				errorString[4] = inMap.getString(JBSbatCNIFI002.RESPONSE_CD);
				errorString[5] = inMap.getString(JBSbatCNIFI002.RESPONSE_DTL);
				
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECNB0470JW,errorString);
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		db_CN_T_CONTJIGYO_CRECA.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	利用通信量合計				USE_TSRYO_GK
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	クレジットカードＩＤ		CRECARD_ID
	 *			課金対象年月				CHRG_TRGT_YM
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCN_T_CONTJIGYO_CRECA_PKUPDATE(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		
		String marchantId = inMap.getString(JBSbatCNIFI002.MERCHANT_DEAL_ID);
		String userSeikyYmd = inMap.getString(JBSbatCNIFI002.USER_SEIKY_YMD);
		
		// マーチャント取引IDからクレジットカードIDを取得する。
		String crecardId = marchantId.substring(4,13);
		
		// 利用者請求年月日から請求年月を取得する。
		String seikyYm = userSeikyYmd.substring(0,6);
		
		// 条件値のマップを生成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatCN_T_CONTJIGYO_CRECA.CRECARD_ID,			crecardId);
		whereMap.setValue(JBSbatCN_T_CONTJIGYO_CRECA.CHRG_TRGT_YM,			seikyYm);
		
		// 設定値のマップを作成します
		JBSbatCommonDBInterface valueMap = new JBSbatCommonDBInterface();
		valueMap.setValue(JBSbatCN_T_CONTJIGYO_CRECA.KSSAI_ID,				inMap.getString(JBSbatCNIFI002.KSSAI_ID));
		
		// DBアクセスを実行します
		db_CN_T_CONTJIGYO_CRECA.updateByPrimaryKeys(whereMap, valueMap);
	}
}
