/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCNkotekmbnsInfoAdd
*	ソースファイル名	：JBSbatCNkotekmbnsInfoAdd.java
*	作成者				：富士通　
*	作成日				：2024年02月15日
*＜機能概要＞
*　公的身分証情報登録処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v70.00.00	2024/02/15   FJ)藤本涼	【ANK-4538-00-00】LaLaCall契約時の本人確認必須化
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCNkotekmbnsInfoAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コンテンツ公的身分証管理)*/
	private static final String D_TBL_NAME_CN_T_CNKOTKMBNS_KNRI = "CN_T_CNKOTKMBNS_KNRI";
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブルアクセスクラス(コンテンツ公的身分証管理)*/
	private JBSbatSQLAccess db_CN_T_CNKOTKMBNS_KNRI = null;
	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** SQL定義キー(CN_SELECT_001)*/
	private static final String ZM_M_WORK_PARAM_KNRI_CN_SELECT_001 = "CN_SELECT_001";

	/**	ECNB0510KW	*/
	public static final String ECNB0510KW = "ECNB0510KW";

	/** コンテンツ契約番号*/
	private static final String CONT_KEI_NO = "CONT_KEI_NO";
	/** SYSID*/
	private static final String SYSID = "SYSID";
	/** 身元確認ID*/
	private static final String MIMOTCFM_ID = "MIMOTCFM_ID";
	/** 身元確認ID登録年月日*/
	private static final String MIMOTCFM_ID_ADD_YMD = "MIMOTCFM_ID_ADD_YMD";
	/** 更新年月日時分秒*/
	private static final String UPD_DTM = "UPD_DTM";
	
	/** USECASE */
	private static final String USECASE_ID = "CNSV0064";
	/** OPERATION */
	private static final String OPERATION_ID = "CNSV0064OP";
	/** CCキー */
	private static final String CNSV006401CC = "CNSV006401CC";
	
	/** CCパラメータ(コンテンツ契約番号)*/
	private static final String PARAM_CONT_KEI_NO = "cont_kei_no";
	/** CCパラメータ(身元確認ID)*/
	private static final String PARAM_MIMOTCFM_ID = "mimotcfm_id";
	/** CCパラメータ(身元確認ID登録年月日)*/
	private static final String PARAM_MIMOTCFM_ID_ADD_YMD = "mimotcfm_id_add_ymd";
	/** CCパラメータ(更新年月日時分秒)*/
	private static final String PARAM_UPD_DTM = "upd_dtm";
	/** CCパラメータ(OPTAGE代表者名)*/
	private static final String PARAM_OPT_DIHYSHA_NM = "opt_dihysha_nm";
	
	/** APIID*/
	private static final String APINM = "apinm";
	/** エラーコード*/
	private static final String ERRCODE = "errcode";
	
	/** [業務パラメータ]OPTAGE代表者名 */
	private String optDhsNm = "";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CN_T_CNKOTKMBNS_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CN_T_CNKOTKMBNS_KNRI);
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		
		// 業務パラメータ管理からOPTAGE代表者名を取得
		executeZM_M_WORK_PARAM_KNRI_CN_SELECT_001(new Object[] {"CN_OPT_DIHYSHA_NM", super.opeDate, super.opeDate});
		JBSbatCommonDBInterface workRecord = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		
		optDhsNm = workRecord.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		//CCマップ
		HashMap<String, Object> ccMap = null;
		//サービス呼び出し結果格納マップ
		HashMap<String,Object> outputMap = null;
		
		// コンテンツ契約番号
		String contKeiNo = inMap.getString(CONT_KEI_NO);
		// SYSID
		String sysid = inMap.getString(SYSID);
		// 身元確認ID
		String mimotcfmId = inMap.getString(MIMOTCFM_ID);
		// 身元確認ID登録年月日
		String mimotcfmIdAddYmd = inMap.getString(MIMOTCFM_ID_ADD_YMD);
		// 更新年月日時分秒（更新前）
		String updDtmBf = inMap.getString(UPD_DTM);
		
		ccMap = createCCMap(contKeiNo, mimotcfmId, mimotcfmIdAddYmd, updDtmBf, optDhsNm);
		
		outputMap = invokeServiceCNSV0064(ccMap);
		
		//サービス実行結果からレスポンスを取得
		HashMap<?, ?> paramMap = (HashMap<?, ?>)outputMap.get(CNSV006401CC);
		
		//エラーコードを取得
		String errCode = (String) paramMap.get(ERRCODE);
		
		//APINMを取得
		String apiNm = (String) paramMap.get(APINM);
		
		if (!"00".equals(errCode))
		{
			// マイナーエラー処理
			commonItem.addErrorCount(1);
			
			// 警告終了 「%1%が異常終了しました。身元確認ID：%2%、SYSID：%3%、コンテンツ契約番号：%4%
			super.logPrint.printBusinessErrorLog(ECNB0510KW, new String[] { apiNm, mimotcfmId, sysid, contKeiNo });
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CN_T_CNKOTKMBNS_KNRI.close();
		db_ZM_M_WORK_PARAM_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ＣＣ向けのマップを作成する。
	 * @param contKeiNo コンテンツ契約番号
	 * @param mimotcfmId 身元確認ID
	 * @param mimotcfmIdAddYmd 身元確認ID登録年月日
	 * @return ccMap 
	 * @throws Exception
	 */
	private HashMap<String, Object> createCCMap(String contKeiNo, String mimotcfmId, String mimotcfmIdAddYmd, String updDtmBf, String optDhsNm) throws Exception
	{
		HashMap<String, Object> ccMap = new HashMap<String, Object>();

		ccMap.put(PARAM_CONT_KEI_NO, contKeiNo);
		ccMap.put(PARAM_MIMOTCFM_ID, mimotcfmId);
		ccMap.put(PARAM_MIMOTCFM_ID_ADD_YMD, mimotcfmIdAddYmd);
		ccMap.put(PARAM_UPD_DTM, updDtmBf);
		ccMap.put(PARAM_OPT_DIHYSHA_NM, optDhsNm);
		
		return ccMap;
	}

	/**
	 * サービス(CNSV0064)を呼び出す
	 * <br>
	 * @param ccMap 
	 * @return outputMap サービス実行結果
	 * @throws Exception 
	 */
	private HashMap<String, Object> invokeServiceCNSV0064(HashMap<String, Object> ccMap) 
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// MANMOSコンセント設置内容更新依頼CC呼び出し
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID);

		// サービスに渡す業務データを格納するMAPです。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		
		// inputMapにCCに必要な情報をセットする
		inputMap.put(CNSV006401CC, ccMap);
		
		// サービスの処理結果が格納されるMAPを生成
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービスを呼び出す
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);

		// 処理結果を返却する
		return outputMap;
	}
	
	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_CN_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_CN_SELECT_001);
	}
}
