/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbMskmEquipRyuyoChk
*   ソースファイル名：JKKejbMskmEquipRyuyoChk.java
*   作成者          ：富士通
*   日付            ：2017年11月30日
*＜機能概要＞
*   申込設備流用チェック部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v31.00.00   2017/11/30  FJ)麻生     新規作成
*   v61.00.00	2022/11/10	 FJ)北川	 【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応(Step1対応)
*   v71.00.11	2024/04/24	 FJ)森下	 【ANK-4468-11-00】eo光ネット「シンプルプラン」追加対応 仕変11
**********************************************************************/

package eo.ejb.common.db;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;

/**
 * <p>
 * 申込の設備流用チェック部品クラスです。
 * </p>
 * @author 945604
 */
public class JKKejbMskmEquipRyuyoChk extends JKKejbShosaChkBase
{
	/** 設備流用有無 */
	public static final String EQUIP_RYUYO_UM = "equip_ryuyo_um";

	/** 設備流用元工事案件番号 */
	public static final String RYUYO_MOTO_KJAK_NO = "ryuyo_moto_kjak_no";

	/** サービスコード */
	public static final String SVC_CD = "svc_cd";

	/** 申込対象コード */
	public static final String MSKM_TRG_CD = "mskm_trg_cd";

	/** 申込対象コード：工事案件最新基本工事チェック */
	public static final String MSKMCHK_TRG_001 = "001";

	/** 申込対象コード：流用元機器返品チェック（予約手続中） */
	public static final String MSKMCHK_TRG_002 = "002";

	/** 申込対象コード：流用元機器返品チェック */
	public static final String MSKMCHK_TRG_003 = "003";
	
	//ANK -4315-00-00 ADD START
	/** 申込対象コード：流用元親機器種別コード判定チェック */
	public static final String MSKMCHK_TRG_004 = "004";
	//ANK -4315-00-00 ADD END

	/** 申込結果コード */
	public static final String MSKM_RLT_CD = "mskm_rlt_cd";

	/**  申込結果コード：OK **/
	public static final String MSKM_RLT_OK = "0";

	/**  申込結果コード：NG **/
	public static final String MSKM_RLT_NG = "1";

	/** チェック結果（OK）**/
	private static final String RETURN_OK = "0";

	/** チェック結果（NG）**/
	private static final String RETURN_NG = "1";

	/** チェック結果（NG：予約適用）**/
	private static final String RETURN_NG_YOYAKU = "1";

	/** チェック結果（NG：返品機器）**/
	private static final String RETURN_NG_HENPIN = "2";
	
	// ANK-4315-00-00 ADD START
	/** 流用NG：親機種別コード **/
	private static final String NG_OYAKI_CD = "04";
	// ANK-4315-00-00 ADD END

	// ANK-4468-11-00 ADD START
	/** 乗換シンプルフラグ */
	public static final String NRKE_SIMPLE_FLG = "nrke_simple_flg";
	// ANK-4468-11-00 ADD END

	/**
	 * <p>
	 * コンストラクタ
	 * </p>
	 */
	public JKKejbMskmEquipRyuyoChk()
	{
	}

	/**
	 * <p>
	 * 申込の設備流用チェックを行う
	 * </p>
	 * @param inCBSMsg 処理対象メッセージキャリア
	 */
	public void chkMskm(CAANMsg inCBSMsg)
	{
		ArrayList<CAANMsg> list = new ArrayList<CAANMsg>();

		// メッセージキャリアから設備流用有無を取得
		String equipRyuyoUm = inCBSMsg.getString(EQUIP_RYUYO_UM);

		// 設備流用が有る場合はチェックを実施
		// ANK-4468-11-00 MOD START
		//if (JKKStrConst.CD00002_UMU_1.equals(equipRyuyoUm))
		if (Arrays.asList(JKKStrConst.EQUIP_RYUYO_UM_ARI_LIST).contains(equipRyuyoUm))
		// ANK-4468-11-00 MOD END
		{
			// 工事案件最新基本工事チェック
			String retCd = chkExistsKojiakRcntKihonKoji(inCBSMsg, inCBSMsg.getString(RYUYO_MOTO_KJAK_NO), KIDOMOTO_CODE_ONLINE);
			CAANMsg retMsg = new CAANMsg();
			retMsg.setPrivate(MSKM_TRG_CD, MSKMCHK_TRG_001);
			retMsg.setPrivate(MSKM_RLT_CD, retCd);
			list.add(retMsg);
			if (RETURN_NG.equals(retCd))
			{
				// チェック結果が異常の場合は処理終了
				inCBSMsg.setPrivate(this.getClass().getName(), list.toArray(new CAANMsg[0]));
				return;
			}
			// ANK-4468-11-00 ADD START
			// 乗換の場合は以降のチェックを実施しない
			String nrkeSimpleFlg = inCBSMsg.getString(NRKE_SIMPLE_FLG);
			if ("1".equals(nrkeSimpleFlg))
			{
				inCBSMsg.setPrivate(this.getClass().getName(), list.toArray(new CAANMsg[0]));
				return;
			}
			// ANK-4468-11-00 ADD END

			// 流用元機器返品チェック
			HashMap<String, String> retMap = chkExistsRyuyoMotoKikiHenpin(inCBSMsg, inCBSMsg.getString(SVC_CD), inCBSMsg
					.getString(RYUYO_MOTO_KJAK_NO), KIDOMOTO_CODE_ONLINE);
			retCd = retMap.get(RETURN_CD);
			// 戻り値が正常:0
			if (RETURN_OK.equals(retCd))
			{
				// 流用元機器返品チェック（予約手続中）：OK
				retMsg = new CAANMsg();
				retMsg.setPrivate(MSKM_TRG_CD, MSKMCHK_TRG_002);
				retMsg.setPrivate(MSKM_RLT_CD, RETURN_OK);
				list.add(retMsg);
				// 流用元機器返品チェック：OK
				retMsg = new CAANMsg();
				retMsg.setPrivate(MSKM_TRG_CD, MSKMCHK_TRG_003);
				retMsg.setPrivate(MSKM_RLT_CD, RETURN_OK);
				list.add(retMsg);
			}
			// 戻り値が異常(予約適用)
			else if (RETURN_NG_YOYAKU.equals(retCd))
			{
				// 流用元機器返品チェック（予約手続中）：NG
				retMsg = new CAANMsg();
				retMsg.setPrivate(MSKM_TRG_CD, MSKMCHK_TRG_002);
				retMsg.setPrivate(MSKM_RLT_CD, RETURN_NG);
				list.add(retMsg);
				// 流用元機器返品チェック：なし
			}
			// 戻り値が異常(返品機器)
			else if (RETURN_NG_HENPIN.equals(retCd))
			{
				// 流用元機器返品チェック（予約手続中）：OK
				retMsg = new CAANMsg();
				retMsg.setPrivate(MSKM_TRG_CD, MSKMCHK_TRG_002);
				retMsg.setPrivate(MSKM_RLT_CD, RETURN_OK);
				list.add(retMsg);
				// 流用元機器返品チェック：NG
				retMsg = new CAANMsg();
				retMsg.setPrivate(MSKM_TRG_CD, MSKMCHK_TRG_003);
				retMsg.setPrivate(MSKM_RLT_CD, RETURN_NG);
				list.add(retMsg);
			}
			//ANK-4315-00-00 ADD START
			// 流用元親機種別コードチェック
			String Oyaki_CD = chkExistRyuyoMotoOyakiki(inCBSMsg, inCBSMsg.getString(RYUYO_MOTO_KJAK_NO), KIDOMOTO_CODE_ONLINE);
			//返却された親機種別コードが"04"の場合はエラー
			if (NG_OYAKI_CD.equals(Oyaki_CD) && !(RETURN_NG_YOYAKU.equals(retCd) && RETURN_NG_HENPIN.equals(retCd)))
			{
				// チェック結果が異常の場合は処理終了
				CAANMsg OyakiMsg = new CAANMsg();
				OyakiMsg.setPrivate(MSKM_TRG_CD, MSKMCHK_TRG_004);
				OyakiMsg.setPrivate(MSKM_RLT_CD, RETURN_NG);
				list.add(OyakiMsg);
			}
			//ANK-4315-00-00 ADD END
			
			
			inCBSMsg.setPrivate(this.getClass().getName(), list.toArray(new CAANMsg[0]));
		}
	}
}
