/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：JDKCommon52CC.java
*   作成者          ：富士通
*   日付            ：2011年07月20日
*＜機能概要＞
*   依頼者引き渡し宅内連携CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v2.00.00    2012/05/27   FJ          新規作成
*   v10.00.00   2014/10/02   FJ）中野    OM-2014-0002799
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.DKSV0068_DKSV0068OP_DKSV006807CC;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0068_DKSV0068OP_EDKA0010006BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0068_DKSV0068OP_EKK0341A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0068_DKSV0068OP_EKK0341C230BSMapper;
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 com.fujitsu.futurity.model.ejb.common.StatusCodes;

import eo.common.constant.JDKStrConst;
import eo.common.util.JDKCommonUtil;
import eo.ejb.cbs.cbsmsg.EDKA0010006CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDKA0010008CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;


/**
 * 依頼者引き渡し登録宅内連携CCクラスです。
 * @author 富士通
 */
public class JDKCommon52CC extends AbstractCommonComponent
{
	/** CC名 */
	private static final String DKSV006805SC = "DKSV006805SC";
	private static final String DKSV006807CC = "DKSV006807CC";
	
	private static final DKSV0068_DKSV0068OP_EDKA0010006BSMapper MAPPER = new DKSV0068_DKSV0068OP_EDKA0010006BSMapper();

	
	/**
	 * 依頼者引き渡し宅内連携処理を行います。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @param fixedText 定型文字
	 * @return パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updateStock(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 製造番号ありの場合は宅内基本情報を更新する必要があるため最終更新日付を取得する
		Map dksv006805sc = (HashMap)param.getData(DKSV006805SC);
		Map dksv006807cc = (HashMap)param.getData(DKSV006807CC);

		// 機器提供サービス契約一意照会
		// 機器提供サービス契約情報変更処理に必要な項目を取得
		if (JDKStrConst.DAITAIKI_HITUYO.equals(dksv006807cc.get(DKSV0068_DKSV0068OP_DKSV006807CC.DAITAI_KIKI_CD))) {
			DKSV0068_DKSV0068OP_EKK0341A010BSMapper kktkSvcKeiRefMapper = new DKSV0068_DKSV0068OP_EKK0341A010BSMapper();
			HashMap inMap = kktkSvcKeiRefMapper.editInMsg(param);
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "機器提供サービス契約一意照会処理の実行");
			Map result = scCall.run(inMap, handle);
			kktkSvcKeiRefMapper.editResultRP(result, param);

			if (JDKBPCommon.hasError(param))
			{
				throw new SCCallException("機器提供サービス契約一意照会処理失敗", "0", 
						Integer.parseInt(param.getControlMapData("returnCode").toString()));
			}

			if (0 < ((List) dksv006807cc.get(EKK0341A010CBSMsg1List.class.getName())).size()) {
				// 機器提供サービス契約情報変更
				DKSV0068_DKSV0068OP_EKK0341C230BSMapper kktkSvcKeiUpdMapper = new DKSV0068_DKSV0068OP_EKK0341C230BSMapper();
				inMap = kktkSvcKeiUpdMapper.editInMsg(param);
				JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "機器提供サービス契約情報変更処理の実行");
				result = scCall.run(inMap, handle);
				kktkSvcKeiUpdMapper.editResultRP(result, param);

				if (JDKBPCommon.hasError(param))
				{
					throw new SCCallException("機器提供サービス契約情報変更処理失敗", "0", 
							Integer.parseInt(param.getControlMapData("returnCode").toString()));
				}
			}
		}

		if (!JDKCommonUtil.isNull(dksv006807cc.get(DKSV0068_DKSV0068OP_DKSV006807CC.KIKI_SEIZO_NO)))
		{
			List<Map> list = new ArrayList<Map>();
			list.add(dksv006805sc);
			// 宅内機器一覧照会(5)(EDKA0010008)を実行し、情報を得る
			List<Map> takunaiBasements = JDKBPCommon.getLastUpdateDtm((List)dksv006805sc.get("EDK0011D010CBSMsg1List"), "taknkiki_model_cd", "kiki_seizo_no", handle, param);
			dksv006807cc.put(EDKA0010006CBSMsg1List.KEY_KIHON_UPD_DTTM, takunaiBasements.get(0).get(EDKA0010008CBSMsg1List.KHN_MOD_DTTM));
			// OM-2014-0002799 ADD START
			HashMap errorReturnMap = new HashMap();
			// 入力画面の倉庫コード（建物）と宅内機器管理システムで登録されている管理場所を比較する（管理場所棚コードは"008"固定）
			if (!(dksv006807cc.get("soko_cd").equals(takunaiBasements.get(0).get(EDKA0010008CBSMsg1List.KNRI_PLC_CD)))
				|| !(JDKStrConst.SHURI_TANA).equals(takunaiBasements.get(0).get(EDKA0010008CBSMsg1List.KNRI_PLC_SLF_CD)))
			{
				errorReturnMap.put("errCode", "EP");
				errorReturnMap.put("returnCode", "1100");
				dksv006807cc.put("EDKA0010008", errorReturnMap);
				JDKBPCommon.addError(param, EDKA0010008CBSMsg1List.KNRI_PLC_CD, "EP", "EDKA0010008", StatusCodes.RELATION_ERR, 1100);
				return param;
			}
			// OM-2014-0002799 ADD END
		}

		HashMap inMap = MAPPER.editInMsg(param);
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "宅内機器修理交換情報更新処理の実行");
		Map result = scCall.run(inMap, handle);
		MAPPER.editResultRP(result, param);

		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("宅内機器修理交換情報更新処理失敗", "0", 
										Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}
		
		JDKBPCommon.throwScExceptionIfHasError("宅内機器修理交換情報更新処理リターンコード不正", param);

		return param;
	}

}
