/*********************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JBSbatKKCashPostRnkApi
*   ソースファイル名：JBSbatKKCashPostRnkApi.java
*   作成者          ：富士通
*   日付            ：2019年10月09日
*＜機能概要＞
*   主処理(共通)<BR>
*   CASHPOST送金対象連携API部品です。
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v46.00.00   2019/10/09  富士通      新規作成
*   v71.00.00	2024/06/19  FJ)久山    【ANK-4468-07-00】シンプルプラン CASHPOST対応
*
**********************************************************************/

package eo.business.common;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Hashtable;

import eo.business.util.file.JBSbatKKIFE427;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.util.JBSbatAplConst;

/**
 * <p>
 * CASHPOST送金対象連携API独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JBSbatKKCashPostRnkApi extends JKKBatKKCashPostBase
{
	/** 部品ID*/
	private static final String PGID = "JBSbatKKCashPostRnkApi";
	/** HTTP リターンコード */
	private static final String HTTP_OK = "200";

	/** API送信 項目名(受取認証キー１以降) */
	private static final ArrayList<String> KKIFM894_REQ_INFO =
			new ArrayList<String>(Arrays.asList(JBSbatKKIFE427.IN_RECEIVEKEY1, JBSbatKKIFE427.IN_RECEIVEKEY2, JBSbatKKIFE427.IN_RECEIVEKEY3,
					JBSbatKKIFE427.IN_MAILADD, JBSbatKKIFE427.IN_POSTNO, JBSbatKKIFE427.IN_ADRESS1, JBSbatKKIFE427.IN_ADRESS2,
					JBSbatKKIFE427.IN_ADRESS3, JBSbatKKIFE427.IN_NAME1, JBSbatKKIFE427.IN_KEISYO1, JBSbatKKIFE427.IN_NAME2,
					JBSbatKKIFE427.IN_KEISYO2, JBSbatKKIFE427.IN_TELNO, JBSbatKKIFE427.IN_FREEITEM));

	/** API応答結果 項目名 */
	private static final ArrayList<String> KKIFM894_RETURN_INFO =
			new ArrayList<String>(Arrays.asList(JBSbatKKIFE427.OUT_SHOPID, JBSbatKKIFE427.OUT_PROCTYPE, JBSbatKKIFE427.OUT_ORDERNO,
					JBSbatKKIFE427.OUT_RECEIVENO, JBSbatKKIFE427.OUT_STATUS, JBSbatKKIFE427.OUT_RESULT, JBSbatKKIFE427.OUT_RESULTDET,
					JBSbatKKIFE427.OUT_RESULTCONTENT, JBSbatKKIFE427.OUT_ENDTIME));

	/** 文字コード */
	private static final String CHAR_MS932 = "MS932";

	/**
	 * HTTPSリクエスト独自処理部品です。
	 * @param commonItem 共通電文
	 * @param inMap CAANメッセージ
	 * @throws Exception エラー
	 */
	@SuppressWarnings("unchecked")
	public void execute(JBSbatCommonItem commonItem, HashMap inMap) throws Exception
	{
		// パラメータチェック
		if (!chkParam(inMap))
		{
			return;
		}

		// ロガー設定
		setlogger(commonItem);

		try
		{
			/*
			 * 接続実行
			 */
			super.execute(inMap);
		}

		finally
		{
			/*
			 * HTTP 応答メッセージが200なら処理結果コードを設定
			 * それ以外はシステムエラーコード設定
			 * HTTP/1.0 200 OK
			 * HTTP/1.0 401 Unauthorized
			 */
			if (HTTP_OK.equals(inMap.get(EXE_STATUS)))
			{
				// ステータス=200：CASHPOST連携正常とする。
				inMap.put(CMD_RESULT_CD, CMD_RESULT_CD_NORMAL);
			}

			// 処理結果ログ出力
			printInfoLog(PGID + "#【CASHPOST連携API処理結果】");
			printInfoLog(PGID + "#" + CMD_RESULT_CD + "=" + inMap.get(CMD_RESULT_CD)); // コマンド実行結果（通信の処理結果）
			printInfoLog(PGID + "#" + EXE_STATUS + "=" + inMap.get(EXE_STATUS)); // コネクションのレスポンスコード
			printInfoLog(PGID + "#" + CMD_ERROR_MESSAGE + "=" + inMap.get(CMD_ERROR_MESSAGE)); // SOAPエラーの詳細（現状、判定不要）

			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_RESULT + "=" + inMap.get(JBSbatKKIFE427.OUT_RESULT)); // 結果コード
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_RESULTDET + "=" + inMap.get(JBSbatKKIFE427.OUT_RESULTDET)); // 結果コード詳細
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_RESULTCONTENT + "=" + inMap.get(JBSbatKKIFE427.OUT_RESULTCONTENT)); // 結果内容
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_ORDERNO + "=" + inMap.get(JBSbatKKIFE427.OUT_ORDERNO)); // サイトコード
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_PROCTYPE + "=" + inMap.get(JBSbatKKIFE427.OUT_PROCTYPE)); // 処理区分
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_SHOPID + "=" + inMap.get(JBSbatKKIFE427.OUT_SHOPID)); // サイト管理番号
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_RECEIVENO + "=" + inMap.get(JBSbatKKIFE427.OUT_RECEIVENO)); // 受付番号
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_STATUS + "=" + inMap.get(JBSbatKKIFE427.OUT_STATUS)); // ステータス
			printInfoLog(PGID + "#" + JBSbatKKIFE427.OUT_ENDTIME + "=" + inMap.get(JBSbatKKIFE427.OUT_ENDTIME)); // 応答日時

		}
	}

	/**
	 * パラメータチェック
	 * 
	 * @param inMap
	 * @return boolean
	 */
	@SuppressWarnings("unchecked")
	private boolean chkParam(HashMap inMap)
	{
		return true;
	}

	/**
	 * 送信するリクエストパラメータを作成する。
	 * @param inMap メッセージキャリア
	 * @return リクエストパラメータ
	 * @throws UnsupportedEncodingException 
	 */
	@SuppressWarnings("unchecked")
	protected String requestParamMake(HashMap inMap) throws UnsupportedEncodingException
	{
		// リクエストパラメータ作成
		StringBuffer strBuf = new StringBuffer();

		// サイトコード(APLConst)
		strBuf.append(JBSbatKKIFE427.IN_SHOPID);
		strBuf.append(S_SEP_EQ);
		strBuf.append(JBSbatAplConst.getAplConstValue("KK_CASHPOST_SHOP_ID"));
		// チェックコード(APLConst)
		strBuf.append(S_SEP_AN);
		strBuf.append(JBSbatKKIFE427.IN_CHKCODE);
		strBuf.append(S_SEP_EQ);
		strBuf.append(JBSbatAplConst.getAplConstValue("KK_CASHPOST_CHKCODE"));
		// 処理区分(APLConst)
		strBuf.append(S_SEP_AN);
		strBuf.append(JBSbatKKIFE427.IN_PROCTYPE);
		strBuf.append(S_SEP_EQ);
		strBuf.append(JBSbatAplConst.getAplConstValue("KK_CASHPOST_PROCTYPE"));

		// サイト管理番号
		strBuf.append(S_SEP_AN);
		strBuf.append(JBSbatKKIFE427.IN_ORDERNO);
		strBuf.append(S_SEP_EQ);
		strBuf.append((String)inMap.get(JBSbatKKIFE427.IN_ORDERNO));
		// 送金額
		strBuf.append(S_SEP_AN);
		strBuf.append(JBSbatKKIFE427.IN_AMOUNT);
		strBuf.append(S_SEP_EQ);
		strBuf.append((String)inMap.get(JBSbatKKIFE427.IN_AMOUNT));
		// 送金パターンコード(APLConst)
		strBuf.append(S_SEP_AN);
		strBuf.append(JBSbatKKIFE427.IN_SENDPTNCD);
		strBuf.append(S_SEP_EQ);
		strBuf.append(JBSbatAplConst.getAplConstValue("KK_CASHPOST_SENDPTNCD"));
		// 案内方法
		strBuf.append(S_SEP_AN);
		strBuf.append(JBSbatKKIFE427.IN_GUIDEPTN);
		strBuf.append(S_SEP_EQ);
		strBuf.append((String)inMap.get(JBSbatKKIFE427.IN_GUIDEPTN));
		// テンプレートコード(APLConst)
		strBuf.append(S_SEP_AN);
		strBuf.append(JBSbatKKIFE427.IN_GUIDETMPCD);
		strBuf.append(S_SEP_EQ);
		// ANK-4468-07-00 MOD START
//		strBuf.append(JBSbatAplConst.getAplConstValue("KK_CASHPOST_GUIDETEMPCD"));
		strBuf.append((String)inMap.get(JBSbatKKIFE427.IN_GUIDETMPCD));
		// ANK-4468-07-00 MOD END

		for (String itemName : KKIFM894_REQ_INFO)
		{
			String item = (String)inMap.get(itemName);
			strBuf.append(S_SEP_AN);
			strBuf.append(itemName);
			strBuf.append(S_SEP_EQ);
//			strBuf.append(JKKStringUtil.nullToBlank(item));
//			strBuf.append(URLEncoder.encode(JKKStringUtil.nullToBlank(item),"Shift_JIS"));
			strBuf.append(URLEncoder.encode(JKKStringUtil.nullToBlank(item),CHAR_MS932));
		}

		//------------------------------------------//
		// ログ出力
		//------------------------------------------//
		printInfoLog(PGID + "#【CASHPOST呼出】：" + strBuf.toString());

		return strBuf.toString();
	}

	/**
	 * クリアパスAPI処理結果を格納する。
	 * @param inMap メッセージキャリア
	 * @param key レスポンスキー
	 * @param value レスポンスバリュー
	 */
	protected void resultPut(HashMap<String, Object> inMap, Hashtable<String, Object> resultMap)
	{

		// 応答結果の項目を返却
		for (String itemName : KKIFM894_RETURN_INFO)
		{
			String item = (String)resultMap.get(itemName);
			inMap.put(itemName, JKKStringUtil.nullToBlank(item));
		}

	}

	/**
	 * 情報メッセージ出力
	 * 
	 * <br>
	 * @param msg メッセージ
	 */
	private void printInfoLog(String msg)
	{
		log.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1200AI, new String[] { msg });
	}

}
