/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：JDKCommon47CC.java
*   作成者          ：富士通
*   日付            ：2012年04月19日
*＜機能概要＞
*   配送完了実績登録CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00.00    2013/04/17   下原        ANK-0316-00-00
*   v13.00.00   2015/04/15   FJ）黒田    ANK-2492-00-00(出荷指図情報作成画面での修理交換機器対応)
*
**********************************************************************/
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.mapping.DKSV0052_DKSV0052OP_EDK0011B020BSMapper;
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.constant.JDKStrConst;


/**
 * 出荷指図一覧照会CCクラスです。
 * @author 富士通
 */
public class JDKCommon47CC extends AbstractCommonComponent
{
	/** CC名 */
	private static final String DKSV005201SC = "DKSV005201SC";
	
	/** 配送完了実績登録マッパー */
	private static final DKSV0052_DKSV0052OP_EDK0011B020BSMapper MAPPER = new DKSV0052_DKSV0052OP_EDK0011B020BSMapper();

	/**
	 * 出荷指図一覧照会処理を行います。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @param fixedText 定型文字
	 * @return パラメータ
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite getList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ◇ 上りマッピング処理
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = MAPPER.editInMsg(param);

		// ◇ SC呼出実行
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "配送情報一覧照会処理の実行");
		Map<?, ?> scResult = scCall.run(paramMap, handle);

		// ◇ 下りマッピング処理
		IRequestParameterReadWrite result = MAPPER.editResultRP(scResult, param);
		
		if (JDKBPCommon.hasError(param))
		{
			throw new SCCallException("配送情報一覧照会処理失敗", "0", 
					Integer.parseInt(param.getControlMapData("returnCode").toString()));
		}
		
		JDKStockMap stocks = new JDKStockMap();

		Map dataMap = (Map)param.getData(DKSV005201SC);
		List<Map> dataList = (List)dataMap.get("EDK0011B020CBSMsg1List");
		for (Map data : dataList) {
			String warehouse = (String)data.get("soko_cd");
			String shelf = (String)data.get("shelf_cd");
			String modelNo = (String)data.get("taknkiki_model_cd");
// ANK-2492-00-00 ADD START
			if (modelNo != null && !"".equals(modelNo)) {
// ANK-2492-00-00 ADD END
				// 移動元管理場所識別コードは"1"（倉庫）固定
				String [] keies = {warehouse, shelf, modelNo, JDKStrConst.KANRI_PLACE_SKB_SOKO};
	
				Integer moves = Integer.parseInt(data.get("cnt").toString());
	
				if (!stocks.hasKey(keies)) {
					// 宅内機器物流在庫一意照会(EKKA0020005)を実行し、在庫情報を得る
					// 移動元管理場所識別コードは"1"（倉庫）固定
					stocks.setValue(JDKBPCommon.getStockAmount(warehouse, shelf, modelNo, JDKStrConst.KANRI_PLACE_SKB_SOKO, handle, param), keies);
				}
				stocks.decrease(moves, keies);
				
				data.put("output_kyoka", stocks.isNegative(keies) ? "0" : "1");
// ANK-2492-00-00 ADD START
			}
			else
			{
				// 宅内機器型式コードが設定されていない場合、出力許可は"1"(可)固定
				data.put("output_kyoka", "1");
			}
// ANK-2492-00-00 ADD END
		}
		
		return result;
	}
}
