/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKA191SFLogic
*   ソースファイル名：KKA191SFLogic.java
*   作成者          ：富士通
*   日付            ：2021年07月29日
*＜機能概要＞
*   SMS配信結果通知(API)のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v54.00.00   2021/07/29   FJ)西窪     新規作成 【ANK-4092-00-00】 CX戦略WG方針対応STEP2
*	v54.01.00   2021/08/18   FJ)西窪     ANK-4092-08-00 CX戦略WG方針対応STEP2 (対応記録画面からのＳＭＳ送信挙動の変更)
*
**********************************************************************/
package eo.web.webview.KKA191SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.common.JKKApiCommon;
import eo.web.webview.common.JKKApiCommonUtil;

/**
 * KKA191のビューロジックです。<p>
 * <BR>
 * @author 富士通
 */
public class KKA191SFLogic extends JCCWebBusinessLogic
{
	
	// 配信結果通知
	private static final String DELIVERY_RECEIPT_NOTIFICATION = "deliveryReceiptNotification";
	// メッセージID
	private static final String MESSAGE_ID = "messageId";
	// 電話番号
	private static final String ADDRESS = "address";
	// 配信結果
	private static final String DELIVERY_STATUS = "deliveryStatus";
	// 配信結果通知時刻
	private static final String NOFITY_TIME = "notifyTime";
	// 配信失敗理由
	private static final String DESCRIPTION = "description";
	// SMS分割数
	private static final String NUM_OF_SEP = "numOfSep";
	
	/** APIメッセージID **/
	private static final String MSG_99999 = "【KKIFE467】SMS配信結果照会エラー:";
	/** APIメッセージID **/
	private static final String MSG_99998 = "【KKIFE467】SMS配信結果スキーマ更新エラー:";
	// ANK-4092-08-00 ADD START
	/** APIメッセージID **/
	private static final String MSG_99997 = "【KKIFE467】ディレイド処理依頼登録エラー:";
	// ANK-4092-08-00 ADD END

	
	/**
	 * JSON連携サンプルコード。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		// サービス結果格納用サービスフォームBean
		X31SDataBeanAccess bean = null;
		
		// リクエストデータ
		Map requestMap = new HashMap();
		
		try
		{

			// サービス結果格納用サービスフォームBean取得
			bean = getServiceFormBean();

			// BodyのJSONデータをレスポンスから取得
			String requestData = JKKApiCommon.getJsonDataInBody(getSessionId());
			
			if (requestData != null)
			{
				// JSONデータをマップに変換する
				requestMap = JKKApiCommon.jsonToMap(requestData);
			}

			
			// 電文チェック
			if (!checkParameter(requestMap))
			{
				JSYwebLog.println(JSYLogBase.EXECUTION, JKKApiCommonUtil.class, null, "BPCON0I002", new String[]{"【KKIFE467】電文エラー:" + requestMap.toString()}, null);
				return true;
			}
			
			// ■ サービス呼び出し準備
			HashMap<String, Object> paramMap = new HashMap<String, Object>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0987");
			
			Map childMap = (Map)requestMap.get(DELIVERY_RECEIPT_NOTIFICATION);
			
			Map<String, Object> inputMap = new HashMap<String, Object>();
			Map<String, Map<String, Object>> outputMap = new HashMap<String, Map<String, Object>>();
			Map<String, Object> parentMap = new HashMap<String, Object>();
			
			// 機能コード
			parentMap.put("func_code", JPCModelConstant.FUNC_CD_1);
			// メッセージＩＤ ← リクエスト.メッセージＩＤ
			parentMap.put(MESSAGE_ID, childMap.get(MESSAGE_ID));
			// 配信結果 ← リクエスト.配信結果
			parentMap.put(DELIVERY_STATUS, childMap.get(DELIVERY_STATUS));
			// 配信失敗理由 ← リクエスト.配信失敗理由
			parentMap.put(DESCRIPTION, childMap.get(DESCRIPTION));
			// SMS分割数 ← リクエスト.SMS分割数
			parentMap.put(NUM_OF_SEP, childMap.get(NUM_OF_SEP));
			// 配信結果通知時刻 ← リクエスト.配信結果通知時刻
			parentMap.put(NOFITY_TIME, childMap.get(NOFITY_TIME));
			
			inputMap.put("KKSV098701CC", parentMap);
			
			// ■ サービス呼出
			invokeService(paramMap, inputMap, outputMap);
			
			// サービスからエラーコードが返却されてきた場合、業務ログに出力を行う。
			Map outMapKKSV098701CC = outputMap.get("KKSV098701CC");
			if(null != outMapKKSV098701CC){
				String errorCode = (String) outMapKKSV098701CC.get("errorCode");
				if(null != errorCode)
				{
					String msg = "";
	
					if("99999".equals(errorCode)){
						msg = MSG_99999;
					}
					else if("99998".equals(errorCode)){
						msg = MSG_99998;
					}
					// ANK-4092-08-00 ADD START
					else if("99997".equals(errorCode)){
						msg = MSG_99997;
					}
					// ANK-4092-08-00 ADD END
					
					JSYwebLog.println(JSYLogBase.EXECUTION, JKKApiCommonUtil.class, null, "BPCON0I002", new String[]{msg + requestMap.toString()}, null);
				}
			}
			
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("■致命的なエラー発生");
			JSYwebLog.println(JSYLogBase.EXECUTION, JKKApiCommonUtil.class, null, "BPCON0I002", new String[]{"【KKIFE467】例外発生:" + requestMap.toString()}, null);
			
			// ■例外トレースのログ出力
			JKKApiCommon.printDebugLog(e);
			
		}
		
		// 返却値の設定（値なし）
		bean.sendMessageString(KKA191SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, "");
		return true;
		
	}
	
	
	/**
	 * 電文チェック。
	 * <br>
	 * @param requestMap
	 * @return 処理の成否
	 */
	@SuppressWarnings("unchecked")
	private boolean checkParameter(Map requestMap)
	{
		if (requestMap.containsKey(DELIVERY_RECEIPT_NOTIFICATION))
		{
			Map child = (Map)requestMap.get(DELIVERY_RECEIPT_NOTIFICATION);
			// 必須チェック
			if (child.containsKey(MESSAGE_ID) && 
					child.containsKey(ADDRESS) &&
					child.containsKey(DELIVERY_STATUS) &&
					child.containsKey(NOFITY_TIME)) 
			{
				// 電文
				return true;
			}
		}
		
		// 電文不正
		return false;
	}
	
}
