/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：ACIFE070
*   ソースファイル名：ACIFE070.java
*   作成者          ：富士通
*   日付            ：2019年1月24日
*＜機能概要＞
*   外部I/F：「ACIFE070_従量情報照会(LINE)」受付処理クラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v41.00.00    2019/1/24   FJ)中原     新規作成
*   v41.01.00    2019/2/13   FJ)中原     【ANK-3355-08-00】LINE情報連携
*
**********************************************************************/
package local.gyomu.api;
import java.util.HashMap;
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：「ACIFE070_従量情報照会(LINE)」受付処理クラスです。<br>
 */
@Path("ACIFE070")
public class ACIFE070 extends ApiServerLocalBase {

	/**
	 * APIID
	 */
    private static final String APIID = "ACIFE070";

    /**
     * 呼び出す業務サービスID
     */
    private static final String SERVICE_ID = "ACSV0037";
    
   
    /**
     * 相手先システムID
     */
    private static final String SYSTEM_ID = "API1";
    
    /**
     * JOBID
     */
    private static final String JOB_ID = "ACIFE070";
    
    //SYSID
    private static final String SYSID = "sysid";
    //抽出対象請求年月
    private static final String CHSHT_TG_SEIKY_YM = "chsht_tg_seiky_ym";

    // ANK-3355-08-00 ADD START
    //HTTPHeader Sysid (マルチスレッドでＡＰＩが呼び出されるため、グローバル変数で定義。全社共通部品作成元に確認済。)
    private String HTTP_HEADER_SYSID = "";
    // ANK-3355-08-00 ADD END
    
    /**
     * 公開メソッド
     *
     * @pram pRequest リクエスト
     * @pram pContext コンテキスト
     * @return Response レスポンス
     * @throws Exception
     */
    @POST
    public Response execute(@Context final HttpServletRequest pRequest,
    		@Context final ServletContext pContext) throws Exception {

        /************************************************************
         * ■■■基盤ロジック呼出■■■■■■■■■■■■■■■■■
         ***********************************************************/
        // API共通部品呼出
        // ANK-3355-08-00 ADD START
        this.HTTP_HEADER_SYSID = pRequest.getHeader("Sysid");
        // ANK-3355-08-00 ADD END
        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
     */
    private ApiServerPartsBean logicExecute(ApiServerPartsBean reqPartsBean) throws Exception {

        Map<String, Object> reSetBodyMap = new HashMap<String, Object>();           // ボディ情報再設定マップ

        // サービス呼び出し
        String serviceId = SERVICE_ID;
        // ANK-3355-08-00 MOD START
        //String sysId = (String) reqPartsBean.getHeader().get(SYSID);
        String sysId = this.HTTP_HEADER_SYSID;
        // ANK-3355-08-00 MOD END
        String seikyYmd = (String) reqPartsBean.getBody().get(CHSHT_TG_SEIKY_YM);
        reSetBodyMap.put(SYSID, sysId);
        reSetBodyMap.put(CHSHT_TG_SEIKY_YM, seikyYmd);
        reqPartsBean.setBody(reSetBodyMap);
        
        Map<String, Object> outMap = callBpServiceForLine(serviceId, reqPartsBean, JOB_ID, SYSTEM_ID);
        
        // サービス処理の結果
		Map<String, Object> resultMap = (Map<String, Object>)outMap.get(serviceId + _01CC);
		Map<String, Object> bodyMap = (Map<String, Object>)resultMap.get("BODY_INFO");
        
        // レスポンス情報をセット
        ApiServerPartsBean resPartsBean = new ApiServerPartsBean();
        resPartsBean.setBody(bodyMap);
        
        return resPartsBean;
    }


}
