/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：JDKCommon17CC.java
*   作成者          ：富士通
*   日付            ：2011年07月27日
*＜機能概要＞
*   棚移動承認CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/07/27   FJ          新規作成
*
**********************************************************************/
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.mapping.DKSV0040_DKSV0040OP_EDK0111C020BSMapper;
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;


/**
 * 棚移動承認CCクラスです。
 * @author 富士通
 */
public class JDKCommon17CC extends AbstractCommonComponent
{
	/** マッパー */
	private static final DKSV0040_DKSV0040OP_EDK0111C020BSMapper SOKO_MAPPER = new DKSV0040_DKSV0040OP_EDK0111C020BSMapper();

	/**
	 * 承認処理を行います。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @param fixedText 定型文字
	 * @return パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite approve(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		HashMap<String, Object> contractsParamMap = new HashMap<String, Object>();
		contractsParamMap = SOKO_MAPPER.editInMsg(param);
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "倉庫棚移動指示処理の実行");
		Map contractResult = scCall.run(contractsParamMap, handle);
		SOKO_MAPPER.editResultRP(contractResult, param);
		
		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("倉庫棚移動指示処理失敗", "0", 
					Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}
		
		// エラー判定
		Map sokoData = (Map)param.getData("DKSV004001CC");
		List<Map> sokoList = (ArrayList<Map>)sokoData.get("sokodna_move_list");
		for (Map data : sokoList)
		{
			// ＫＥＹ＿倉庫棚移動番号
			if (data.containsKey("key_sokodna_move_no_err"))
			{
				String errCd = data.get("key_sokodna_move_no_err").toString();

				String statCd = "";
				if (data.containsKey("returnCode"))
				{
					statCd = data.get("returnCode").toString();
				}

				if ("1100".equals(statCd) && "EA".equals(errCd))
				{
					// 存在チェックエラー
					JDKBPCommon.addError(param, 
										"key_sokodna_move_no_err", 
										"EA", "EDK0111C020", 1100, 0);
					throw new SCCallException("承認処理失敗（倉庫棚移動）", "0", 1100);
				}
				else if ("1150".equals(statCd) && "EA".equals(errCd))
				{
					// 遷移チェックエラー
					JDKBPCommon.addError(param, 
										"key_sokodna_move_no_err", 
										"EA", "EDK0111C020", 1150, 0);
					throw new SCCallException("承認処理失敗（倉庫棚移動）", "0", 1150);
				}
			}
			// 更新年月日時分秒（更新前）
			if (data.containsKey("upd_dtm_bf_err"))
			{
				String errCd = data.get("upd_dtm_bf_err").toString();

				if ("EB".equals(errCd))
				{
					// 排他チェックエラー
					JDKBPCommon.addError(param, 
										"upd_dtm_bf_err", 
										"EB", "EDK0111C020", 1100, 0);
					throw new SCCallException("承認処理失敗（倉庫棚移動）", "0", 1100);
				}
			}
		}

		return param;
	}
}
