/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：JDKCommon61CC.java
*   作成者          ：富士通
*   日付            ：2013年11月28日
*＜機能概要＞
*   サービス契約内訳(eo光電話)更新CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v5.00.00    2013/11/28   FJ          新規作成(OM-2013-0004724)
*   v28.00.00   2017/01/19   FJ)中山     【OM-2016-0002436】住所変更中の新品機器SOD登録対応
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.DKSV0045_DKSV0045OP_DKSV004502SC;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0045_DKSV0045OP_EKK0161A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0045_DKSV0045OP_EKK0191A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0045_DKSV0045OP_EKK0191C060BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0045_DKSV0045OP_EKK0341B031BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0045_DKSV0045OP_EKK0341E020BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0045_DKSV0045OP_EKK2101C010BSMapper;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.util.JDKCommonUtil;
import eo.ejb.cbs.cbsmsg.EKK0341B031CBSMsg1List;


/**
 * サービス契約内訳(eo光電話)更新CCクラスです。
 * @author 富士通
 */
public class JDKCommon61CC extends AbstractCommonComponent
{

	/** SC名 */
	private static final String DKSV004502SC = "DKSV004502SC";
	

	/**
	 * サービス契約内訳(eo光電話)更新処理を行います。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @param fixedText 定型文字
	 * @return パラメータ
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updateSvcKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		Map args = (HashMap) param.getData(DKSV004502SC);

		if (!"1".equals(args.get("func_code")))
		{
			return param;
		}

		// 住所変更中のデータが存在する場合
		if (!JDKCommonUtil.isNull(args.get(DKSV0045_DKSV0045OP_DKSV004502SC.ADCHG_NO)))
		{
			// 住所変更明細更新
			DKSV0045_DKSV0045OP_EKK2101C010BSMapper adchgDtlUpdMapper = new DKSV0045_DKSV0045OP_EKK2101C010BSMapper();
			HashMap<String, Object> inMap = adchgDtlUpdMapper.editInMsg(param);
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "住所変更明細更新処理の実行");
			Map<?, ?> result = new ServiceComponentRequestInvoker().run(inMap, handle);
			adchgDtlUpdMapper.editResultRP(result, param);

			if (JDKBPCommon.hasError(param))
			{
				throw new SCCallException("住所変更明細更新処理失敗", "0", 
						Integer.parseInt(param.getControlMapData("returnCode").toString()));
			}

//OM-2016-0002436 ADD START
			// 機器提供サービス契約履歴一覧照会（SYSID）
			callEKK0341B031(handle, param);

			if (0 < ((List)args.get(EKK0341B031CBSMsg1List.class.getName())).size())
			{
				// 機器提供サービス契約論理削除（住所変更）
				callEKK0341E020(handle, param);
			}
//OM-2016-0002436 ADD END
		}

		// サービス契約内訳番号（第１電話）もしくは、サービス契約内訳番号（第２電話）が設定されている場合
		if (!JDKCommonUtil.isNull(args.get("svc_kei_ucwk_no_tel1"))
				|| !JDKCommonUtil.isNull(args.get("svc_kei_ucwk_no_tel2")))
		{
			if (!JDKCommonUtil.isNull(args.get("svc_kei_ucwk_no_tel1")))
			{
				updateSvcKeiUcwkEohTel(handle, param, (String) args.get("svc_kei_ucwk_no_tel1"));
			}

			if (!JDKCommonUtil.isNull(args.get("svc_kei_ucwk_no_tel2")))
			{
				updateSvcKeiUcwkEohTel(handle, param, (String) args.get("svc_kei_ucwk_no_tel2"));
			}
		}
		
		return param;
	}

	
	/**
	 * 交換機器宅内連携処理を行います。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void updateSvcKeiUcwkEohTel(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiUcwkNo) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// サービス契約内訳一意照会
		// サービス契約内訳<eo光電話>情報変更処理に必要な項目を取得
		DKSV0045_DKSV0045OP_EKK0161A010BSMapper svcKeiUcwkRefMapper = new DKSV0045_DKSV0045OP_EKK0161A010BSMapper();
		Map<String, String> searchMap = new HashMap<String, String>();
		searchMap.put("svc_kei_ucwk_no", svcKeiUcwkNo);
		HashMap inMap = svcKeiUcwkRefMapper.editInMsg(param, searchMap);
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "サービス契約内訳一意照会処理の実行");
		Map result = scCall.run(inMap, handle);
		svcKeiUcwkRefMapper.editResultRP(result, param);

		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("サービス契約内訳<eo光電話>一意照会処理失敗", "0", 
					Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}

		// サービス契約内訳<eo光電話>一意照会
		// サービス契約内訳<eo光電話>情報変更処理に必要な項目を取得
		DKSV0045_DKSV0045OP_EKK0191A010BSMapper svcKeiUcwkEohTelRefMapper = new DKSV0045_DKSV0045OP_EKK0191A010BSMapper();
		searchMap = new HashMap<String, String>();
		searchMap.put("svc_kei_ucwk_no", svcKeiUcwkNo);
		inMap = svcKeiUcwkEohTelRefMapper.editInMsg(param, searchMap);
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "サービス契約内訳<eo光電話>一意照会処理の実行");
		result = scCall.run(inMap, handle);
		svcKeiUcwkEohTelRefMapper.editResultRP(result, param);

		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("サービス契約内訳<eo光電話>一意照会処理失敗", "0", 
					Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}

		Map args = (HashMap) param.getData(DKSV004502SC);
		searchMap.put("func_code", (String) args.get("func_code"));
		searchMap.put("taknkiki_model_cd", (String) args.get("taknkiki_model_cd"));
		
		// 「機器変更番号」はDKSV004502SC(EKK0341C190)でworkに設定されている値を使う
		Map workMap = (Map)param.getMappingWorkArea();
		searchMap.put("kiki_chg_no", (String) workMap.get("kiki_chg_no"));
		
		// サービス契約内訳<eo光電話>情報変更
		DKSV0045_DKSV0045OP_EKK0191C060BSMapper svcKeiUcwkUpdMapper = new DKSV0045_DKSV0045OP_EKK0191C060BSMapper();
		inMap = svcKeiUcwkUpdMapper.editInMsg(param, searchMap);
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "サービス契約内訳<eo光電話>情報変更処理の実行");
		result = scCall.run(inMap, handle);
		svcKeiUcwkUpdMapper.editResultRP(result, param);

		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("サービス契約内訳<eo光電話>情報変更処理失敗", "0", 
					Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}
	}

//OM-2016-0002436 ADD START

	/**
	 * 機器提供サービス契約履歴一覧照会（SYSID）S-IFを呼び出します。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @throws Exception
	 */
	private void callEKK0341B031(SessionHandle handle, IRequestParameterReadWrite param) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		DKSV0045_DKSV0045OP_EKK0341B031BSMapper kktkSvcKeiHisRefMapper = new DKSV0045_DKSV0045OP_EKK0341B031BSMapper();
		HashMap<String, Object> inMap = kktkSvcKeiHisRefMapper.editInMsg(param);
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "機器提供サービス契約履歴一覧照会（SYSID）処理の実行");
		Map<?, ?> result = scCall.run(inMap, handle);
		kktkSvcKeiHisRefMapper.editResultRP(result, param);

		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("機器提供サービス契約履歴一覧照会（SYSID）処理失敗", "0", 
					Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}
	}

	/**
	 * 機器提供サービス契約論理削除（住所変更）S-IFを呼び出します。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @throws Exception
	 */
	private void callEKK0341E020(SessionHandle handle, IRequestParameterReadWrite param) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		DKSV0045_DKSV0045OP_EKK0341E020BSMapper kktkSvcKeiDelMapper = new DKSV0045_DKSV0045OP_EKK0341E020BSMapper();
		HashMap<String, Object> inMap = kktkSvcKeiDelMapper.editInMsg(param);
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "機器提供サービス契約論理削除（住所変更）処理の実行");
		Map<?, ?> result = scCall.run(inMap, handle);
		kktkSvcKeiDelMapper.editResultRP(result, param);

		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("機器提供サービス契約論理削除（住所変更）処理失敗", "0", 
					Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}
	}
//OM-2016-0002436 ADD END
}
