/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名        ：eo顧客基幹システム
*   モジュール名       ：KKIFE475
*   ソースファイル名     ：KKIFE475.java
*   作成者          ：富士通
*   日付            ：2022年01月18日
*＜機能概要＞
*   外部I/F：「解約時契約状態照会（営業支援）(KKIFE475)」受付処理クラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v57.00.00   2022/01/18   GDC） Melvin Gungog    【ANK-4173-00-00】【eo顧客】解約後の契約情報表示、再申込対応
**********************************************************************/
package local.gyomu.api;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;

import local.gyomu.ApiServerLocalBase;

import com.k_opti.api_parts.server.bean.ApiServerPartsBean;

/**
 * 外部I/F：「解約時契約状態照会（営業支援）(KKIFE475)」受付処理クラスです。<br>
 */
@Path("KKIFE475")
public class KKIFE475 extends ApiServerLocalBase {

	/**
	 * APIID
	 */
    private static final String APIID = "KKIFE475";
    
    /**
     * 呼び出す業務サービスID
     */
    private static final String SERVICE_ID = "KKSV0991";
    
    /**
     * 相手先システムID
     */
    private static final String SYSTEM_ID = "ESS1";
    
    /**
     * JOBID
     */
    private static final String JOB_ID = "KKIFE475";
    
    /**
     * 公開メソッド
     *
     * @param pRequest リクエスト
     * @param pContext コンテキスト
     * @return Response レスポンス
     * @throws Exception
     */
    @POST
	public Response execute(@Context final HttpServletRequest pRequest,
    		@Context final ServletContext pContext) throws Exception {
		
    	/************************************************************
         * ■■■基盤ロジック呼出■■■■■■■■■■■■■■■■■
         ***********************************************************/
        // API共通部品呼出
		Response response = super.exec(APIID, pRequest, pContext);
		
		return response;
	}
    
    /**
     * 業務ロジック処理
     *
     * @param reqPartsBean サーバ業務AP連携データ(リクエスト)
     * @return ApiServerPartsBean サーバ業務AP連携データ(レスポンス)
     * @throws Exception
     */
	@Override
	protected ApiServerPartsBean run(ApiServerPartsBean reqPartsBean) throws Exception {
		
		// レスポンスデータ生成
        ApiServerPartsBean resPartsBean
           = this.logicExecute(reqPartsBean);
        
		/************************************************************
         * ■■■基盤ロジック呼出■■■■■■■■■■■■■■■■■
         ***********************************************************/
        return resPartsBean;
	}

	/**
     * 業務ロジックメイン処理
     * 指定されたサービスを呼び出し、結果をレスポンス情報に設定します。
     *
     * @param reqPartsBean サーバ業務AP連携データ(リクエスト)
     * @return ApiServerPartsBean サーバ業務AP連携データ(レスポンス)
     * @throws Exception
     */
	@SuppressWarnings("unchecked")
	private ApiServerPartsBean logicExecute(ApiServerPartsBean reqPartsBean) throws Exception {
		
		// サービス呼び出し
        String serviceId = SERVICE_ID;
        Map<String, Object> outMap = callBpService(serviceId, reqPartsBean, JOB_ID, SYSTEM_ID);
        
        // サービス処理の結果
        Map<String, Object> resultMap = (Map<String, Object>)outMap.get(serviceId + _01CC);
        
        ////////////////////////////////////////
        // 当API固有処理
        /////////////////////////////////////////
        // 数値で始まる項目名はSOAP命名規約にてエラーとなるため、bp側では先頭にアンダースコアを付加している。
        // インターフェース仕様に合わせるため、ここでアンダースコアを削除する。
        if(resultMap != null)
        {
	        Object eohtlInfo = resultMap.get("eohtlInfo");
	        if( eohtlInfo != null && eohtlInfo instanceof Map)
	        {
	        	Map eohtlInfoMap = (Map)eohtlInfo;
	        	Object eohtlNoList = eohtlInfoMap.get("eohtlNoList");
	        	if( eohtlNoList != null && eohtlNoList instanceof List )
	        	{
	        		List eohtlNoListList = (List)eohtlNoList;
	        		for(Object o : eohtlNoListList)
	        		{
	        			if( o != null && o instanceof Map )
	        			{
	        				Map oMap = (Map)o;
	        		        Object _050NoPlusUm = oMap.remove("_050NoPlusUm");
	        		        oMap.put("050NoPlusUm", _050NoPlusUm);
	        			}
	        		}
	        	}
	        }
        }
        ////////////////////////////////////////
        // 当API固有処理ここまで
        /////////////////////////////////////////
        
        
		// レスポンス情報をセット
        ApiServerPartsBean resPartsBean = new ApiServerPartsBean();
        resPartsBean.setBody(resultMap);
        
        return resPartsBean;
	}
}
