/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：JDKCommon31CC.java
*   作成者          ：富士通
*   日付            ：2011年10月06日
*＜機能概要＞
*   棚移動入荷完了CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/10/06   FJ          新規作成
*   v37.00.00   2018/03/12   FJ)高野     【ANK-2763-00-00】工事会社間棚異動における予備品フラグ引継ぎ対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.mapping.DKSV0106_DKSV0106OP_EDK0061C040BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0106_DKSV0106OP_EDK0071C020BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0106_DKSV0106OP_EDK0111B030BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0106_DKSV0106OP_EDKA0010004BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.DKSV0106_DKSV0106OP_EDKA0010008BSMapper;
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.common.JCMConstants;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;

import eo.common.constant.JDKStrConst;


/**
 * 棚移動入荷完了CCクラスです。
 * @author 富士通
 */
public class JDKCommon31CC extends AbstractCommonComponent
{
	/** 予備機器配送配達完了CC名 */
	private static final String DKSV010601CC = "DKSV010601CC";
	/** 予備機器配送完了CC名 */
	private static final String DKSV010602CC = "DKSV010602CC";
	/** 予備機器配送配達完了マッパー */
	private static final DKSV0106_DKSV0106OP_EDK0071C020BSMapper UCWK_MAPPER = new DKSV0106_DKSV0106OP_EDK0071C020BSMapper();
	/** 予備機器配送完了マッパー */
	private static final DKSV0106_DKSV0106OP_EDK0061C040BSMapper YBK_MAPPER = new DKSV0106_DKSV0106OP_EDK0061C040BSMapper();
	/** 棚移動機器取得マッパー */
	private static final DKSV0106_DKSV0106OP_EDK0111B030BSMapper TANAKIKI_MAPPER = new DKSV0106_DKSV0106OP_EDK0111B030BSMapper();
	/** 宅内機器情報取得マッパー */
	private static final DKSV0106_DKSV0106OP_EDKA0010008BSMapper KIKI_MAPPER = new DKSV0106_DKSV0106OP_EDKA0010008BSMapper();
	/** 宅内情報更新マッパー */
	private static final DKSV0106_DKSV0106OP_EDKA0010004BSMapper TKNI_MAPPER = new DKSV0106_DKSV0106OP_EDKA0010004BSMapper();

	/**
	 * 完了処理を行います。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @param fixedText 定型文字
	 * @return パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite fin(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		HashMap dataMap = (HashMap)param.getData(DKSV010601CC);
		List<Map> list = (List)dataMap.get("ucwk_list");
		String ybkHaisoNo = "";

		// 予備機器配送内訳データ件数分ループ
		for (int i = 0; i < list.size(); i++)
		{
			Map ucwkMap = (Map)list.get(i);
			ybkHaisoNo = (String)ucwkMap.get("key_ybkiki_haiso_no");

			// 最終行データの場合
			if ((i + 1) == list.size())
			{
				// 予備機器配送内訳スキーマを更新
				// 内訳データに紐付く予備機器配送番号を設定
				param.setData("ybkHaisoNo", ybkHaisoNo);
				// 開始インデックスを設定
				int startIdx = getStartIndex(param, ybkHaisoNo);
				param.setData("startIdx", startIdx);
				// 終了インデックスを設定
				param.setData("endIdx", getEndIndex(param, ybkHaisoNo));

				HashMap<String, Object> ucwkContractsParamMap = new HashMap<String, Object>();
				ucwkContractsParamMap = UCWK_MAPPER.editInMsg(param);
				JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "予備機器配送配達完了処理の実行");
				Map ucwkContractResult = scCall.run(ucwkContractsParamMap, handle);
				UCWK_MAPPER.editResultRP(ucwkContractResult, param);
				
				if (JDKBPCommon.hasError(param))
				{
					throw new SCCallException("予備機器配送配達完了処理失敗", "0", 
												Integer.parseInt(param.getControlMapData("returnCode").toString()));
				}
				
				// エラーチェック
				Map ucwkData = (Map)param.getData(DKSV010601CC);
				List<Map> ucwkList = (ArrayList<Map>)ucwkData.get("ucwk_list");
				for (Map data : ucwkList)
				{
					// ＫＥＹ＿予備機器配送番号
					if (data.containsKey("key_ybkiki_haiso_no_err"))
					{
						String errCd = data.get("key_ybkiki_haiso_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_ybkiki_haiso_no_err", 
												"EA", "EDK0071C020", 1100, 0);
							throw new SCCallException("完了処理失敗（予備機器配送内訳）", "0", 1100);
						}
					}

					// 更新年月日時分秒（更新前）
					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", "EDK0071C020", 1100, 0);
							throw new SCCallException("完了処理失敗（予備機器配送内訳）", "0", 1100);
						}
					}
				}

				// 予備機器配送スキーマを更新
				HashMap<String, Object> ybkContractsParamMap = new HashMap<String, Object>();
				ybkContractsParamMap = YBK_MAPPER.editInMsg(param);
				JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "予備機器配送完了処理の実行");
				Map ybkContractResult = scCall.run(ybkContractsParamMap, handle);
				YBK_MAPPER.editResultRP(ybkContractResult, param);
				
				if (JDKBPCommon.hasError(param))
				{
					throw new SCCallException("予備機器配送完了処理失敗", "0", 
												Integer.parseInt(param.getControlMapData("returnCode").toString()));
				}
				
				// エラーチェック
				Map ybkData = (Map)param.getData(DKSV010602CC);
				List<Map> ybkList = (ArrayList<Map>)ybkData.get("ybk_list");
				for (Map data : ybkList)
				{
					// ＫＥＹ＿予備機器配送番号
					if (data.containsKey("key_ybkiki_haiso_no_err"))
					{
						String errCd = data.get("key_ybkiki_haiso_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_ybkiki_haiso_no_err", 
												"EA", "EDK0061C040", 1100, 0);
							throw new SCCallException("完了処理失敗（予備機器配送）", "0", 1100);
						}
						else if ("1150".equals(statCd) && "EA".equals(errCd))
						{
							// 遷移チェックエラー
							JDKBPCommon.addError(param, 
												"key_ybkiki_haiso_no_err", 
												"EA", "EDK0061C040", 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", "EDK0061C040", 1100, 0);
							throw new SCCallException("完了処理失敗（予備機器配送）", "0", 1100);
						}
					}
				}

				break;
			}

			// 予備機器配送番号比較
			for (int j = i + 1; j < list.size(); j++)
			{
				Map ybkMap = (Map)list.get(j);

				// 後続データと予備機器配送番号が異なる場合
				if (!(ybkHaisoNo).equals((String)ybkMap.get("key_ybkiki_haiso_no")))
				{
					// 予備機器配送内訳スキーマを更新
					// 内訳データに紐付く予備機器配送番号を設定
					param.setData("ybkHaisoNo", ybkHaisoNo);
					// 開始インデックスを設定
					param.setData("startIdx", getStartIndex(param, ybkHaisoNo));
					// 終了インデックスを設定
					int endIdx = getEndIndex(param, ybkHaisoNo);
					param.setData("endIdx", endIdx);

					HashMap<String, Object> ucwkContractsParamMap = new HashMap<String, Object>();
					ucwkContractsParamMap = UCWK_MAPPER.editInMsg(param);
					JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "予備機器配送配達完了処理の実行");
					Map ucwkContractResult = scCall.run(ucwkContractsParamMap, handle);
					UCWK_MAPPER.editResultRP(ucwkContractResult, param);
					
					if (JDKBPCommon.hasError(param))
					{
						throw new SCCallException("予備機器配送配達完了処理失敗", "0", 
													Integer.parseInt(param.getControlMapData("returnCode").toString()));
					}
					
					// エラーチェック
					Map ucwkData = (Map)param.getData(DKSV010601CC);
					List<Map> ucwkList = (ArrayList<Map>)ucwkData.get("ucwk_list");
					for (Map data : ucwkList)
					{
						// ＫＥＹ＿予備機器配送番号
						if (data.containsKey("key_ybkiki_haiso_no_err"))
						{
							String errCd = data.get("key_ybkiki_haiso_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_ybkiki_haiso_no_err", 
													"EA", "EDK0071C020", 1100, 0);
								throw new SCCallException("完了処理失敗（予備機器配送内訳）", "0", 1100);
							}
						}

						// 更新年月日時分秒（更新前）
						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", "EDK0071C020", 1100, 0);
								throw new SCCallException("完了処理失敗（予備機器配送内訳）", "0", 1100);
							}
						}
					}

					// 予備機器配送スキーマを更新
					HashMap<String, Object> ybkContractsParamMap = new HashMap<String, Object>();
					ybkContractsParamMap = YBK_MAPPER.editInMsg(param);
					JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "予備機器配送完了処理の実行");
					Map ybkContractResult = scCall.run(ybkContractsParamMap, handle);
					YBK_MAPPER.editResultRP(ybkContractResult, param);
					
					if (JDKBPCommon.hasError(param))
					{
						throw new SCCallException("予備機器配送完了処理失敗", "0", 
													Integer.parseInt(param.getControlMapData("returnCode").toString()));
					}
					
					// エラー判定
					Map ybkData = (Map)param.getData(DKSV010602CC);
					List<Map> ybkList = (ArrayList<Map>)ybkData.get("ybk_list");
					for (Map data : ybkList)
					{
						// ＫＥＹ＿予備機器配送番号
						if (data.containsKey("key_ybkiki_haiso_no_err"))
						{
							String errCd = data.get("key_ybkiki_haiso_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_ybkiki_haiso_no_err", 
													"EA", "EDK0061C040", 1100, 0);
								throw new SCCallException("完了処理失敗（予備機器配送）", "0", 1100);
							}
							else if ("1150".equals(statCd) && "EA".equals(errCd))
							{
								// 遷移チェックエラー
								JDKBPCommon.addError(param, 
													"key_ybkiki_haiso_no_err", 
													"EA", "EDK0061C040", 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", "EDK0061C040", 1100, 0);
								throw new SCCallException("完了処理失敗（予備機器配送）", "0", 1100);
							}
						}
					}

					// 該当データの一つ前データにリバース
					i = (endIdx - 1);
					break;
				}
			}
		}
		
		String funcCd = (String)dataMap.get(JCMConstants.FUNC_CODE_KEY);
		
		// 機能コードが「１」の場合のみ宅内情報更新実行
		if(funcCd.equals("1")){

			// 棚移動する機器の情報を取得
			HashMap<String, Object> tanakikiParamMap = new HashMap<String, Object>();
			tanakikiParamMap = TANAKIKI_MAPPER.editInMsg(param);
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "棚移動結果情報一覧照会処理の実行");
			scCall.run(tanakikiParamMap, handle);
			TANAKIKI_MAPPER.editResultRP(tanakikiParamMap, param);
			
			if (JDKBPCommon.hasError(param))
			{
				throw new SCCallException("棚移動結果情報一覧照会処理失敗", "0", 
											Integer.parseInt(param.getControlMapData("returnCode").toString()));
			}
			
			ArrayList dataList = (ArrayList)dataMap.get("EDK0111B030CBSMsg1List");
			HashMap<String, String> modelNoMap = new HashMap<String, String>();
			HashMap<String, String> moveNoMap = new HashMap<String, String>();
			String mt_soko_cd = (String)((HashMap)dataList.get(0)).get("mv_mt_soko_cd");		// 移動元倉庫コード
			String mt_koji_cd = (String)((HashMap)dataList.get(0)).get("mv_mt_koji_cd");		// 移動元工事会社コード
			String mt_yotaku_cd = (String)((HashMap)dataList.get(0)).get("mv_mt_office_cd");	// 移動元預託先コード
			String sk_soko_cd = (String)((HashMap)dataList.get(0)).get("mv_sk_soko_cd");		// 移動先倉庫コード
			String sk_koji_cd = (String)((HashMap)dataList.get(0)).get("mv_sk_koji_cd");		// 移動先工事会社コード
			String sk_yotaku_cd = (String)((HashMap)dataList.get(0)).get("mv_sk_office_cd");	// 移動先預託先コード
			// 管理場所識別コードと管理場所コードの設定
			// 移動元建物
			String mt_knri_plc_skbt_cd = "";
			String mt_knri_plc_cd = "";
			if(mt_soko_cd != null && !mt_soko_cd.equals("")){
				mt_knri_plc_skbt_cd = "1";
				mt_knri_plc_cd = mt_soko_cd;
			}else if(mt_koji_cd != null && !mt_koji_cd.equals("")){
				mt_knri_plc_skbt_cd = "2";
				mt_knri_plc_cd = mt_koji_cd;
			}else if(mt_yotaku_cd != null && !mt_yotaku_cd.equals("")){
				mt_knri_plc_skbt_cd = "3";
				mt_knri_plc_cd = mt_yotaku_cd;
			}
			// 移動先建物
			String sk_knri_plc_skbt_cd = "";
			String sk_knri_plc_cd = "";
			if(sk_soko_cd != null && !sk_soko_cd.equals("")){
				sk_knri_plc_skbt_cd = "1";
				sk_knri_plc_cd = sk_soko_cd;
			}else if(sk_koji_cd != null && !sk_koji_cd.equals("")){
				sk_knri_plc_skbt_cd = "2";
				sk_knri_plc_cd = sk_koji_cd;
			}else if(sk_yotaku_cd != null && !sk_yotaku_cd.equals("")){
				sk_knri_plc_skbt_cd = "3";
				sk_knri_plc_cd = sk_yotaku_cd;
			}
			// 予備品フラグ
			String yobih_flg = "0";
// ANK-2763-00-00 MOD START
//			// 倉庫から倉庫以外への移動の場合、予備品フラグを「１」に設定
//			if(mt_knri_plc_skbt_cd.equals("1") && (sk_knri_plc_skbt_cd.equals("2") || sk_knri_plc_skbt_cd.equals("3")))
//			{
//				yobih_flg = "1";
//			}
			
			// 移動先工事会社コードが設定されている または
			// 移動先預託先オフィスコードが設定されている場合は「１」を設定
			if ((sk_koji_cd != null && !sk_koji_cd.equals("")) ||
				(sk_yotaku_cd != null && !sk_yotaku_cd.equals("")))
			{
				yobih_flg = "1";
			}
// ANK-2763-00-00 MOD END
			// 移動元棚コード
			String mt_knri_plc_slf_cd = (String)((HashMap)dataList.get(0)).get("mv_mt_shelf_cd");
			// 移動先棚コード
			String sk_knri_plc_slf_cd = (String)((HashMap)dataList.get(0)).get("mv_sk_shelf_cd");
			// 商品状態コード（移動元）
			String key_gds_stat_cd = (String)((HashMap)dataList.get(0)).get("gds_stat_cd");
			// 商品状態コードが設定されていない場合、「-」返品棚以外を設定
			if(key_gds_stat_cd == null || key_gds_stat_cd.equals(""))
			{
				key_gds_stat_cd = JDKStrConst.GDS_STAT_HMPINDNA_OTHER;
			}

			// 在庫情報更新のための型番号ごとの指示数量を算出（同じ棚移動番号のものは加算しない）
			for (int i = 0; i < dataList.size(); i++) {
				HashMap childMap = (HashMap)dataList.get(i);
				String move_no = (String)childMap.get("move_no");
				String tkkiki_mdl_cd = (String)childMap.get("tkkiki_mdl_cd");
				String cnt = (String)childMap.get("sji_cnt");
				String ttlCnt = modelNoMap.get(tkkiki_mdl_cd);
				if(moveNoMap.get(move_no) == null){
					if(ttlCnt == null)
					{
						modelNoMap.put(tkkiki_mdl_cd, cnt);
					}
					else
					{
						int total = Integer.parseInt(ttlCnt) + Integer.parseInt(cnt);
						modelNoMap.put(tkkiki_mdl_cd, Integer.toString(total));
					}
					moveNoMap.put(move_no, tkkiki_mdl_cd);
				}
			}
			
			ArrayList edka0010004CbsMsg2List = new ArrayList();
			// 在庫情報の設定
			// 移動元在庫更新
			for(Iterator ite = modelNoMap.keySet().iterator(); ite.hasNext();){
				Object key = ite.next();
				Object cnt = modelNoMap.get(key);
				String mdl_no = key.toString();
	
				HashMap childMap = new HashMap();
	
				// ＫＥＹ＿レコード区分
				childMap.put("key_record_div", "2");
				// ＫＥＹ＿管理場所識別コード
				childMap.put("key_knri_plc_skbt_cd", mt_knri_plc_skbt_cd);
				// ＫＥＹ＿管理場所コード
				childMap.put("key_knri_plc_cd", mt_knri_plc_cd);
				// ＫＥＹ＿管理場所棚コード
				childMap.put("key_knri_plc_slf_cd", mt_knri_plc_slf_cd);
				// ＫＥＹ＿宅内機器型式コード
				childMap.put("key_taknkiki_model_cd", mdl_no);
				// ＫＥＹ＿商品状態コード				
				childMap.put("key_gds_stat_cd", key_gds_stat_cd);
				// 実在庫数
				childMap.put("jzaiko_num", "-" + cnt);
				// 予備機器配送指示数
				childMap.put("ybkiki_haiso_sji_num", "0");
				// 棚移動指示数
				childMap.put("shelf_mv_sji_num", "0");
				// 予備機器配送中数
				childMap.put("ybkiki_haiso_chu_num", "0");
				// 棚移動入荷完了数
				childMap.put("shelf_mv_nyka_fin_num", "0");
				// 棚移動出荷完了数
				childMap.put("shelf_mv_shka_fin_num", "0");
				// 予備機器出荷完了数
				childMap.put("ybkiki_shka_fin_num", "-" + cnt);
				
				edka0010004CbsMsg2List.add(childMap);
	
			}
			// 移動先在庫更新
			for(Iterator ite = modelNoMap.keySet().iterator(); ite.hasNext();){
				Object key = ite.next();
				Object cnt = modelNoMap.get(key);
				String mdl_no = key.toString();
	
				HashMap childMap = new HashMap();
	
				// ＫＥＹ＿レコード区分
				childMap.put("key_record_div", "2");
				// ＫＥＹ＿管理場所識別コード
				childMap.put("key_knri_plc_skbt_cd", sk_knri_plc_skbt_cd);
				// ＫＥＹ＿管理場所コード
				childMap.put("key_knri_plc_cd", sk_knri_plc_cd);
				// ＫＥＹ＿管理場所棚コード
				childMap.put("key_knri_plc_slf_cd", sk_knri_plc_slf_cd);
				// ＫＥＹ＿宅内機器型式コード
				childMap.put("key_taknkiki_model_cd", mdl_no);
				// ＫＥＹ＿商品状態コード
				if (JDKStrConst.HENPIN_TANA.equals(mt_knri_plc_slf_cd)
						&& !JDKStrConst.HENPIN_TANA.equals(sk_knri_plc_slf_cd))
				{
					// 移動元が返品棚で移動先が返品棚以外の場合
					childMap.put("key_gds_stat_cd", JDKStrConst.GDS_STAT_HMPINDNA_OTHER);
				}
				else if (!JDKStrConst.HENPIN_TANA.equals(mt_knri_plc_slf_cd)
						&& JDKStrConst.HENPIN_TANA.equals(sk_knri_plc_slf_cd))
				{
					// 移動元が返品棚以外で移動先が返品棚の場合
					childMap.put("key_gds_stat_cd", JDKStrConst.GDS_STAT_UNKNOWN);
				}
				else
				{
					childMap.put("key_gds_stat_cd", key_gds_stat_cd);
				}
				// 実在庫数
				childMap.put("jzaiko_num", cnt);
				// 予備機器配送指示数
				childMap.put("ybkiki_haiso_sji_num", "0");
				// 棚移動指示数
				childMap.put("shelf_mv_sji_num", "0");
				// 予備機器配送中数
				childMap.put("ybkiki_haiso_chu_num", "0");
				// 棚移動入荷完了数
				childMap.put("shelf_mv_nyka_fin_num", cnt);
				// 棚移動出荷完了数
				childMap.put("shelf_mv_shka_fin_num", "0");
				// 予備機器出荷完了数
				childMap.put("ybkiki_shka_fin_num", "0");
				
				edka0010004CbsMsg2List.add(childMap);
	
			}
			// 在庫更新情報を設定
			dataMap.put("EDKA0010004CBSMsg2List", edka0010004CbsMsg2List);
			
			ArrayList kiki_list = new ArrayList();
			for (int i = 0; i < dataList.size(); i++) {
				HashMap childMap = (HashMap)dataList.get(i);
				
				String tkkiki_mdl_cd = (String)childMap.get("tkkiki_mdl_cd");
				String kiki_seizo_no = (String)childMap.get("kiki_seizo_no");
				if(kiki_seizo_no != null && !kiki_seizo_no.equals("")){
					HashMap kkMap = new HashMap();
					kkMap.put("tkkiki_mdl_cd", tkkiki_mdl_cd);
					kkMap.put("kiki_seizo_no", kiki_seizo_no);
					kiki_list.add(kkMap);
				}
			}
			
			if(kiki_list.size() > 0)
			{
				dataMap.put("kiki_list", kiki_list);
					
				// 宅内管理システムより機器の情報を取得
				HashMap<String, Object> kikiParamMap = new HashMap<String, Object>();
				kikiParamMap = KIKI_MAPPER.editInMsg(param);
				JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "宅内機器一覧照会(5)処理の実行");
				scCall.run(kikiParamMap, handle);
				KIKI_MAPPER.editResultRP(kikiParamMap, param);
				
				if (JDKBPCommon.hasError(param))
				{
					throw new SCCallException("宅内機器一覧照会(5)処理失敗", "0", 
												Integer.parseInt(param.getControlMapData("returnCode").toString()));
				}
				
				JDKBPCommon.throwScExceptionIfHasError("宅内機器一覧照会(5)処理リターンコード不正", param);
				
				ArrayList edka0010004CbsMsg1List = new ArrayList();
				
				ArrayList tkniKikiList = (ArrayList)dataMap.get("tkniKikiList");
				
				// 問い合わせ結果の件数
				int resultCnt = 0;
				
				for (int i = 0; i < tkniKikiList.size(); i++)
				{
					// 宅内から結果が返って来た場合は型番が設定されている
				    HashMap paramInMap = (HashMap) tkniKikiList.get(i);
				    String modelCd = (String) paramInMap.get("tk_mdl_cd");
				    if (!"".equals(modelCd))
				    {
				    	resultCnt = resultCnt + 1;
				    }
				}
				
				// 問い合わせ件数と問い合わせ結果件数が異なる場合
				if(kiki_list.size() != resultCnt)
				{
					// 「宅内機器に該当の製造番号が存在しません。」のメッセージを設定
					JDKBPCommon.addError(param, 
							"kiki_seizo_no_err", 
							"EA", "EDKA0010008", 1100, 0);
					throw new SCCallException("宅内機器一覧照会(5)処理（データ存在チェックエラー）", "0", StatusCodes.RELATION_ERR);
				}
				
				// 宅内機器情報を設定
				for(int i=0;i<tkniKikiList.size();i++){
					
					HashMap tkniMap = (HashMap)tkniKikiList.get(i);
					String kk_seizo_no = (String)tkniMap.get("kk_seizo_no");
					
					if(kk_seizo_no != null && !kk_seizo_no.equals(""))
					{
						
						HashMap childMap = new HashMap();
						// ＫＥＹ＿レコード区分
						childMap.put("key_record_div", "1");
						// ＫＥＹ＿処理区分
						childMap.put("key_trn_div", "1");
						// ＫＥＹ＿処理パターン
						childMap.put("key_trn_ptn", "5");
						// ＫＥＹ＿移動区分
						childMap.put("key_ido_kbn", "2");
						// ＫＥＹ＿取消区分
						childMap.put("key_trks_kbn", "0");
						// ＫＥＹ＿宅内機器型式コード
						childMap.put("key_tk_mdl_cd", (String)tkniMap.get("tk_mdl_cd"));
						// ＫＥＹ＿機器製造番号
						childMap.put("key_kk_seizo_no", (String)tkniMap.get("kk_seizo_no"));
						// ＫＥＹ＿管理場所識別コード
						childMap.put("key_knri_plc_skbt_cd", "");
						// ＫＥＹ＿管理場所コード
						childMap.put("key_knri_plc_cd", "");
						// ＫＥＹ＿管理場所棚コード
						childMap.put("key_knri_plc_slf_cd","");
						// ＫＥＹ＿商品状態コード
						childMap.put("key_gds_stat_cd", "");
						// ＫＥＹ＿数量
						childMap.put("key_num", "");
						// ＫＥＹ＿棚移動ロット番号
						childMap.put("key_slf_mv_lot_no", "");
						// ＫＥＹ＿宅内機器基本Ｔ更新日付
						childMap.put("key_kihon_upd_dttm", (String)tkniMap.get("khn_mod_dttm"));
						// 棚移動予約フラグ
						childMap.put("slf_mv_rsv_flg", "0");
						// 棚移動ロット番号
						childMap.put("slf_mv_lot_no", "");
						// 管理場所識別コード
						childMap.put("knri_plc_skbt_cd", sk_knri_plc_skbt_cd);
						// 管理場所コード
						childMap.put("knri_plc_cd", sk_knri_plc_cd);
						// 管理場所棚コード
						childMap.put("knri_plc_slf_cd", sk_knri_plc_slf_cd);
						// 予備品フラグ
						childMap.put("yobih_flg", yobih_flg);
						// 倉庫出荷日
						childMap.put("soko_syukka_ymd", (String)tkniMap.get("soko_shka_ymd"));
						// 商品状態コード
						if (JDKStrConst.HENPIN_TANA.equals(mt_knri_plc_slf_cd)
								&& !JDKStrConst.HENPIN_TANA.equals(sk_knri_plc_slf_cd))
						{
							// 移動元が返品棚で移動先が返品棚以外の場合
							childMap.put("gds_stat_cd", JDKStrConst.GDS_STAT_HMPINDNA_OTHER);
						}
						else if (!JDKStrConst.HENPIN_TANA.equals(mt_knri_plc_slf_cd)
								&& JDKStrConst.HENPIN_TANA.equals(sk_knri_plc_slf_cd))
						{
							// 移動元が返品棚以外で移動先が返品棚の場合
							childMap.put("gds_stat_cd", JDKStrConst.GDS_STAT_UNKNOWN);
						}
						else
						{
							childMap.put("gds_stat_cd", key_gds_stat_cd);
						}

						edka0010004CbsMsg1List.add(childMap);
					}
				}
				// 宅内機器更新情報を設定
				dataMap.put("EDKA0010004CBSMsg1List", edka0010004CbsMsg1List);
			}
			
			// 宅内情報更新
			HashMap<String, Object> tkniMap = new HashMap<String, Object>();
			tkniMap = TKNI_MAPPER.editInMsg(param);
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "宅内機器棚移動情報更新処理の実行");
			scCall.run(tkniMap, handle);
			param = TKNI_MAPPER.editResultRP(tkniMap, param);
			
			if (JDKBPCommon.hasError(param)) {
				throw new SCCallException("宅内機器棚移動情報更新処理失敗", "0", 
						Integer.parseInt(param.getControlMapData("returnCode").toString()));
			}
			
			JDKBPCommon.throwScExceptionIfHasError("宅内機器棚移動情報更新処理リターンコード不正", param);
		}

		return param;
	}

	/**
	 * 開始インデックスの返却を行います。
	 * @param param パラメータ
	 * @param haisoNo 予備機器配送番号
	 * @return 終了インデックス
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private int getStartIndex(IRequestParameterReadWrite param, String haisoNo) throws Exception
	{
		HashMap dataMap = (HashMap)param.getData(DKSV010601CC);
		List<Map> list = (List)dataMap.get("ucwk_list");

		// 予備機器配送内訳データ件数分ループ
		for (int i = 0; i < list.size(); i++)
		{
			Map ucwkMap = (Map)list.get(i);

			if (haisoNo.equals((String)ucwkMap.get("key_ybkiki_haiso_no")))
			{
				return i;
			}
		}
		return 0;
	}

	/**
	 * 終了インデックスの返却を行います。
	 * @param param パラメータ
	 * @param haisoNo 予備機器配送番号
	 * @return 終了インデックス
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private int getEndIndex(IRequestParameterReadWrite param, String haisoNo) throws Exception
	{
		int retInt = 0;
		HashMap dataMap = (HashMap)param.getData(DKSV010601CC);
		List<Map> list = (List)dataMap.get("ucwk_list");

		// 予備機器配送内訳データ件数分ループ
		for (int i = 0; i < list.size(); i++)
		{
			Map ucwkMap = (Map)list.get(i);

			if (haisoNo.equals((String)ucwkMap.get("key_ybkiki_haiso_no")))
			{
				retInt = (i + 1);
			}
		}

		return retInt;
	}
}
