/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK0091ShosaChk
*   ソースファイル名：JKKejbKK0091ShosaChk.java
*   作成者          ：富士通
*   日付            ：2011年07月15日
*＜機能概要＞
*   eo光ネット照査チェック部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/07/15  富士通      新規作成
*   v5.00.00    2011/01/15  FJ)坂本     ANK-1272-00-00
*	v5.00.01	2013/02/07	FJ)寺園		ANK-1421-00-00
*	v5.00.02	2013/02/08	FJ)藤本		IT1-2013-0000148
*   v5.00.03    2013/02/21  FJ)寺本     OT-2013-0000090
*   v5.00.04    2013/03/04  FJ)福井     ST3-2013-0000507]
*   v5.00.05    2013/04/30  FJ)寺本     OT-2013-0000675
*  v31.00.00    2017/11/16  FJ) クウン 【ANK-3136-00-00】OPMSハードウエア保守切れ対応(STEP2-2)
*  v31.00.00    2017/12/05  FJ)孫       ANK-3136-00-00
*   v36.00.00   2018/01/23  FJ)クウン  【ANK-3296-00-00】標準工事費分割請求
*   v61.00.00   2023/08/28  FJ) 吉田   【IT2-2023-0000010】サービス契約照査チェックに機器重複チェックを追加
*   v71.00.00	2024/01/23	FJ) 藤本涼 【ANK-4468-00-00】eo光ネット「シンプルプラン」追加対応
*   v71.00.11   2024/06/04  FJ)森下    【ANK-4468-11-00】eo光ネット「シンプルプラン」追加対応 仕変11
*   v71.00.28   2024/07/12  FJ)森下    【ANK-4468-28-00】eo光ネット「シンプルプラン」追加対応 仕変28
*   v72.00.00   2024/07/19  FJ)森下    【ANK-4577-00-00】eo光ネット「シンプルプラン」追加対応(Step2)
**********************************************************************/

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.util.JKKStringUtil;
import eo.common.constant.JKKStrConst;
import eo.ejb.cbm.entity.CK0011ETMsg;
import eo.ejb.cbm.entity.KK0021ETMsg;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0091C012CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0091C012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0091C013CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0091C013CBSMsg1List;
import eo.ejb.common.JKKModelConst;

/**
 * <p>
 * サービス契約<eo光ネット>の照査チェック部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0091ShosaChk extends JKKejbShosaChkBase
{
	/** 料金グループコード（eo光ネットホームタイプ）**/
	private static final String RYOKINGRP_EO_HIKARI_HOME = "02";

	/** 料金グループコード（eo光ネットメゾンタイプ）**/
	private static final String RYOKINGRP_EO_HIKARI_MEZON = "03";

	/** 料金グループコード（eo光ネットマンションタイプ）**/
	private static final String RYOKINGRP_EO_HIKARI_MANSHON = "04";

	/**
	 * <p>
	 * コンストラクタ
	 * </p>
	 */
	public JKKejbKK0091ShosaChk()
	{
	}

	/**
	 * <p>
	 * サービス契約<eo光ネット>の照査を行う
	 * </p>
	 * @param inCBSMsg 処理対象メッセージキャリア
	 * @param svcKeiNo サービス契約番号
	 * @param kidoCd 起動元コード
	 */
	public void chkShosa(CAANMsg inCBSMsg, String svcKeiNo, String kidoCd)
	{
		ArrayList<CAANMsg> list = new ArrayList<CAANMsg>();
		CAANMsg retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());

		// バッチの場合
		if (KIDOMOTO_CODE_BATCH.equals(kidoCd))
		{
			// セット申込チェック
			retMsg = new JKKejbKK0091SetMskmChk().setMskmCheck(inCBSMsg, svcKeiNo, kidoCd);
			list.add(retMsg);
		}

		// セット申込単独チェックフラグがセット申込の場合、処理を終了する。
		if (SET_MSKM_SNGL_CHK_FLG_SET.equals(inCBSMsg.getString(EKK0091C012CBSMsg.SET_MSKM_SNGL_CHK_FLG)))
		{
			inCBSMsg.set(EKK0091C012CBSMsg.EKK0091C012CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

			return;
		}

		// サービス契約情報取得
		CAANMsg msg = getSvckei(inCBSMsg, svcKeiNo, kidoCd);
		// サービス契約情報が取得されなかった場合
		if (msg == null)
		{
			return;
		}

		//住居形態種別を取得（ホーム、メゾン、マンション）
		String type = getJyuKyoKeiType(msg);
		// 住居形態種別が取得されなかった場合
		if (type == null)
		{
			return;
		}

		// 申込年月日期間超過チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_001);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkChokMoshikomiYmdPrd(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
		list.add(retMsg);

		// ホームの場合
		if (JYUKOKEITAI_HOME.equals(type))
		{
			// 同一利用場所使用サービス整合性チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_027);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkUseSvcSeiDouitsu(inCBSMsg, svcKeiNo, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);
		}

		// マンションまたはメゾンの場合
		if (JYUKOKEITAI_MEZON.equals(type) || JYUKOKEITAI_MANSHON.equals(type))
		{
			// サービス開始希望年月日未来日チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_003);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkFutureSvcStaKiboYmd(inCBSMsg, msg.getString(KK0081ETMsg.SVC_USE_STA_KIBO_YMD), kidoCd));
			list.add(retMsg);
			// 部屋番号重複チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_021);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkDbleAdrrm(inCBSMsg, svcKeiNo, msg.getString(KK0081ETMsg.SYSID), kidoCd));
			list.add(retMsg);
			// サービス契約総戸数チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_039);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkSvcKeiAllHouseNum(inCBSMsg, msg, kidoCd));
			list.add(retMsg);
			// マンション照査状態チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_056);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkMansionShosa(inCBSMsg, msg.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO)));
			list.add(retMsg);
		}

		// ホームまたはメゾンの場合
		if (JYUKOKEITAI_HOME.equals(type) || JYUKOKEITAI_MEZON.equals(type))
		{
			// エリアチェック審査結果チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_042);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkAreaChkSinsaKekka(inCBSMsg, svcKeiNo));
			list.add(retMsg);
		}

		// マンションの場合
		if (JYUKOKEITAI_MANSHON.equals(type))
		{
			// サービス開始希望年月日設定チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_002);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkSetSvcStaKiboYmd(inCBSMsg, msg.getString(KK0081ETMsg.SVC_USE_STA_KIBO_YMD)));
			list.add(retMsg);
			// マンション(光配線)従量制受付可否チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_058);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkMansJuryoUkKh(inCBSMsg, msg.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO), msg
					.getString(KK0081ETMsg.PPLAN_CD)));
			list.add(retMsg);
		}

		// オンラインかつホームの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd) && JYUKOKEITAI_HOME.equals(type))
		{
			// 入居予定年月日未来日チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_024);
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkFutureNyukyoRsvYmd(inCBSMsg, svcKeiNo, msg.getString(KK0081ETMsg.MENKAIHAT_ANKEN_NO), kidoCd));
			list.add(retMsg);
		}

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// 未照査サービス契約存在チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_029);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiSvcMiSyosa(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);
			// フェムトセルオプション存在チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_045);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiFemtOp(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);
			// コース変更チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_046);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkCrsChg(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);
		}

		// バッチの場合
		if (KIDOMOTO_CODE_BATCH.equals(kidoCd))
		{
			// ホームの場合のみチェックする
			if (JYUKOKEITAI_HOME.equals(type))
			{
				// 面開発案件チェック
				retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_004);
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkMenkaihatsu(inCBSMsg, msg.getString(KK0081ETMsg.MENKAIHAT_ANKEN_NO)));
				list.add(retMsg);
			}

			// オプション引継希望チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_020);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkKiboOpHktgi(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);
			// 照査不可サービス契約存在チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_036);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkNotSvcKeiSyosa(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);
		}

		// 提供外機器存在チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_006);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiTkGaiKiki(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// 機器提供サービス契約数下限チェック（ＰＬＣ以外）
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_007);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkLowlKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, KKTK_SVC_CD_KBN_1));
		list.add(retMsg);

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// 機器提供サービス契約数下限チェック（ＰＬＣ）
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_061);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkLowlKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, KKTK_SVC_CD_KBN_2));
			list.add(retMsg);
			
			// 審査OKチェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_063);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkShinsaOK(inCBSMsg, svcKeiNo));
			list.add(retMsg);
		}

		// 機器提供サービス契約数上限チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_008);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkUpplKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, null));
		list.add(retMsg);
		// IT2-2023-0000010 2023/08/29 ADD START
		// ONU/HGW重複チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_081);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkDbleOnu(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// 多機能ルーター/HGW重複チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_082);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkDbleTknrt(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// IT2-2023-0000010 2023/08/29 ADD END
		// 提供外オプション存在チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_010);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiTkGaiOp(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// オプションサービス契約数下限チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_011);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkLowlOpSvcKei(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// オプションサービス契約数上限チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_012);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkUpplOpSvcKei(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// 督促状態チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_017);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkStatTokusoku(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// お客様退会チェック
//		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
//		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_018);
//		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkTaikaiCust(inCBSMsg, msg.getString(KK0081ETMsg.SYSID), kidoCd));
//		list.add(retMsg);
		// 利用場所番地未確定チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_025);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkMiFixUsePlaceBachi(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		// 利用場所警告エリアチェック
		String[] useAreaChk = chkWarUsePlaceArea(inCBSMsg, svcKeiNo, msg.getString(KK0081ETMsg.SVC_CD), 
				msg.getString(KK0081ETMsg.PRC_GRP_CD), msg.getString(KK0081ETMsg.PCRS_CD), msg.getString(KK0081ETMsg.PPLAN_CD), 
				msg.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO), msg.getString(KK0081ETMsg.MENKAIHAT_ANKEN_NO), kidoCd, type);

		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_026);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, useAreaChk[0]);
		retMsg.set(EKK0091C012CBSMsg1List.CHK_SBT_CD, useAreaChk[1]);
		list.add(retMsg);
		// 申込書番号重複チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_028);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkDuplicateMskmshoNo(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO)));
		list.add(retMsg);
		// 申込書明細番号不整合チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_044);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkMskmshoDtlNo(inCBSMsg, msg.getString(KK0081ETMsg.SYSID), msg
				.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
		list.add(retMsg);
		// 審査結果補記チェック（照査OK）
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_040);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkSinsaHokiChkShosa(inCBSMsg, msg.getString(KK0081ETMsg.SKEKKA_HOKI_CD)));
		list.add(retMsg);
		// ファミリーパック割引数チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_047);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkFamPackWrNum(inCBSMsg, msg.getString(KK0081ETMsg.SYSID), kidoCd));
		list.add(retMsg);

		// タブレット端末台数チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_053);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkTabletTnmtNum(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		// 宅内プラットホーム整合性チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_054);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkTakniPlathome(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);
		
		// サービス追加時の配送作成可否チェック
		retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_057);
		retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkHaisoCreKh(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		//---------v31.00.00 ANK-3136-00-00_ADD START---------//
		// サービス契約.申込明細番号取得
		String mskmDtlNo = msg.getString(KK0081ETMsg.MSKM_DTL_NO);
		// 申込明細カレント情報取得
		CAANMsg mskmDtlList = getMskmDtl(inCBSMsg, mskmDtlNo, kidoCd);
		//---------v31.00.00 ANK-3136-00-00_ADD END-----------//
	
		//---------v36.00.00 ANK-3296-00-00_ADD START---------//
		// サービス契約ステータス
		if (msg.getString(KK0081ETMsg.SVC_KEI_STAT).equals(JKKModelConst.SVC_KEI_STAT_UK_ZM))
		{
			// 申込明細カレント情報取得
			//---------v31.00.00 ANK-3136-00-00_DEL START---------//
			//CAANMsg mskmDtlList = getMskmDtl(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd);
			//---------v31.00.00 ANK-3136-00-00_DEL START---------//

			String mskYmd = mskmDtlList.getString(KK0021ETMsg.MSKM_YMD);

			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_075);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkExistsStdardKojihi(inCBSMsg, svcKeiNo, msg.getString(KK0081ETMsg.SVC_CD), mskYmd, kidoCd));
			list.add(retMsg);
		}
		//---------v36.00.00 ANK-3296-00-00_ADD END-----------//
		//---------v31.00.00 ANK-3136-00-00_ADD START---------//
		//設備流用有無取得
		String equipRyuyouUm = mskmDtlList.getString(KK0021ETMsg.EQUIP_RYUYO_UM);
		//設備流用元工事案件番号
		String ryuyoMtKjakNo = mskmDtlList.getString(KK0021ETMsg.RYUYO_MOTO_KJAK_NO);
		//サービス契約.サービスコード
		String svcCd = msg.getString(KK0081ETMsg.SVC_CD);
		//サービス契約.料金コースコード
		String pcrsCd = msg.getString(KK0081ETMsg.PCRS_CD);
		// ANK-4468-11-00 ADD START
		//プラン乗換フラグ取得
		String plnNrkeFlg = inCBSMsg.getString(EKK0091C012CBSMsg.PLN_NRKE_FLG);
		// ANK-4468-11-00 ADD END
		// ANK-4468-11-00 MOD START
		//if (EQUIP_RYUYO_UMU_ARI.equals(equipRyuyouUm))
		if (Arrays.asList(EQUIP_RYUYO_UMU_ARI_LIST).contains(equipRyuyouUm))
		// ANK-4468-11-00 MOD END
		{
			//サービス契約照査チェック部品スーパークラス.同一回線内工事案件存在チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_068);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkExistsDitKaisenKojiak(inCBSMsg, svcCd , svcKeiNo, kidoCd));
			list.add(retMsg);
			
			//サービス契約照査チェック部品スーパークラス.ONU-VONU機器存在チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_069);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkExistsOnuVonuKk(inCBSMsg, svcCd , svcKeiNo, kidoCd));
			list.add(retMsg);
			
			//サービス契約照査チェック部品スーパークラス.マンション物件チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_074);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkMansBuken(inCBSMsg, ryuyoMtKjakNo, kidoCd));
			list.add(retMsg);
			
			//サービス契約照査チェック部品スーパークラス.工事案件最新基本工事チェック
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_070);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkExistsKojiakRcntKihonKoji(inCBSMsg, ryuyoMtKjakNo, kidoCd));
			list.add(retMsg);
			
			// ANK-4577-00-00 DEL START
//			// ANK-4468-11-00 ADD START
//			// 乗換の場合はチェックを実施しない
//			//サービス契約照査チェック部品スーパークラス.流用元機器返品チェック
//			if ("1".equals(equipRyuyouUm) && !(Arrays.asList(JKKStrConst.PLN_NRKE_FLG_LIST).contains(plnNrkeFlg)))
//			{
//			// ANK-4468-11-00 ADD END
			// ANK-4577-00-00 DEL END
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			HashMap<String, String> rstRyuyoMtKikiHenbinCk = chkExistsRyuyoMotoKikiHenpin(inCBSMsg, svcCd , ryuyoMtKjakNo, kidoCd);
			// リターンコード取得
			String returnCd = rstRyuyoMtKikiHenbinCk.get(RETURN_CD);
			// リターンコードが1_異常（予約適用中）
			if(RETURN_NG_1.equals(returnCd))
			{
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_071);
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, returnCd);
			}
			// リターンコードが2_異常（返品機器）
			else if (RETURN_NG_2.equals(returnCd))
			{
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_072);
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, RETURN_NG_1);
			}
			// リターンコードが0_正常
			else if (RETURN_NG_0_RSL_SEIJO.equals(returnCd))
			{
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_072);
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, returnCd);
			}
			list.add(retMsg);
			
			// ANK-4577-00-00 ADD START
			if ("1".equals(equipRyuyouUm)){
			// ANK-4577-00-00 ADD END
				//サービス契約照査チェック部品スーパークラス.PON種別チェック
				if (rstRyuyoMtKikiHenbinCk.containsKey(KK0341_KKTK_SVC_KEI_NO) 
						&& rstRyuyoMtKikiHenbinCk.containsKey(KK0341_KIKI_CHG_NO) 
						&& RETURN_NG_0_RSL_SEIJO.equals(returnCd))
				{
					// 機器提供サービス番号
					String kkTkyoSvcNo = rstRyuyoMtKikiHenbinCk.get(KK0341_KKTK_SVC_KEI_NO);
					// 機器変更番号
					String kkChngNo = rstRyuyoMtKikiHenbinCk.get(KK0341_KIKI_CHG_NO);
					
					retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
					retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_073);
					retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkExistsPonSbt(inCBSMsg, kkTkyoSvcNo, kkChngNo, pcrsCd, kidoCd));
					list.add(retMsg);
				}
			// ANK-4468-11-00 ADD START
			}
			// ANK-4468-11-00 ADD END
		}

		// ANK-4468-28-00 ADD START
		// サービス契約照査チェック部品スーパークラス.乗換元サービス契約番号重複チェック
		// 乗換の場合のみチェックを実施する
		if (Arrays.asList(JKKStrConst.PLN_NRKE_FLG_LIST).contains(plnNrkeFlg)){
			retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_085);
			retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkDuplicateNrkemtSvkeiNo(inCBSMsg, svcKeiNo, inCBSMsg.getString(EKK0091C012CBSMsg.NRKEMT_SVKEI_NO), kidoCd));
			list.add(retMsg);
		}
		// ANK-4468-28-00 ADD END
		//---------v31.00.00 ANK-3136-00-00_ADD END-----------//

		// ANK-4468-00-00 ADD START
		// お客様情報取得
		CAANMsg msgCust = getCust(inCBSMsg, msg.getString(KK0081ETMsg.SYSID), kidoCd);
		
		// お客様情報が取得できた場合
		if (!(msgCust == null))
		{
			// お客様.お客様生年月日が取得できる かつ、
			// サービス契約.料金コースコードが「A97：eo光シンプルプラン　１０ギガコース」「A99：eo光シンプルプラン　１０ギガコース　Netflixパック」の場合
			if (!(JKKStringUtil.isNullBlank(msgCust.getString(CK0011ETMsg.CUST_BIRTHD)))
					&& (PRC_PCRS_CD_SIMPLEPLAN_10G.equals(msg.getString(KK0081ETMsg.PCRS_CD)) || PRC_PCRS_CD_SIMPLEPLAN_10G_NETFLIX.equals(KK0081ETMsg.PCRS_CD)))
			{
				// サービス契約照査チェック部品スーパークラス.契約者年齢整合性チェック
				retMsg = new CAANMsg(EKK0091C012CBSMsg1List.class.getName());
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_084);
				retMsg.set(EKK0091C012CBSMsg1List.SHOSA_RLT_CD, chkKeishaOldSeigosei(inCBSMsg, msgCust.getString(CK0011ETMsg.CUST_BIRTHD), kidoCd));
				list.add(retMsg);
			}
		}
		// ANK-4468-00-00 ADD END
		
		inCBSMsg.set(EKK0091C012CBSMsg.EKK0091C012CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

		return;
	}

	/**
	 * <p>
	 * サービス契約<eo光ネット>の照査(NG登録)を行う
	 * </p>
	 * @param inCBSMsg 処理対象メッセージキャリア
	 * @param svcKeiNo サービス契約番号
	 * @param kidoCd 起動元コード
	 */
	public void chkShosaNg(CAANMsg inCBSMsg, String svcKeiNo, String kidoCd)
	{
		ArrayList<CAANMsg> list = new ArrayList<CAANMsg>();
		CAANMsg retMsg = new CAANMsg(EKK0091C013CBSMsg1List.class.getName());

		// サービス契約情報取得
		CAANMsg msg = getSvckei(inCBSMsg, svcKeiNo, kidoCd);
		// サービス契約情報が取得されなかった場合
		if (msg == null)
		{
			return;
		}

		//住居形態種別を取得（ホーム、メゾン、マンション）
		String type = getJyuKyoKeiType(msg);
		// 住居形態種別が取得されなかった場合
		if (type == null)
		{
			return;
		}

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// オプション引継チェック
			retMsg = new CAANMsg(EKK0091C013CBSMsg1List.class.getName());
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_019);
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_RLT_CD, chkOpHktgi(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);
			// 審査結果補記チェック（照査NG）
			retMsg = new CAANMsg(EKK0091C013CBSMsg1List.class.getName());
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_041);
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_RLT_CD, chkSinsaHokiChkShosaNg(inCBSMsg, msg.getString(KK0081ETMsg.SKEKKA_HOKI_CD)));
			list.add(retMsg);
			// 仮登録スマートバリュー存在チェック
			retMsg = new CAANMsg(EKK0091C013CBSMsg1List.class.getName());
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_060);
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_RLT_CD, chkExistsPrEntrySmtVal(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);
			// ANK-3136-00-00 2017/12/05 ADD START
			// 設備流用存在チェック
			retMsg = new CAANMsg(EKK0091C013CBSMsg1List.class.getName());
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_076);
			retMsg.set(EKK0091C013CBSMsg1List.SHOSA_RLT_CD, chkSonzaiExistsEquipRyuyo(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);
			// ANK-3136-00-00 2017/12/05 ADD END
		}

		inCBSMsg.set(EKK0091C013CBSMsg.EKK0091C013CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

		return;
	}

	/**
	 * <p>
	 * 住居契約タイプを取得する。
	 * </p>
	 * @param inMsg 処理対象メッセージキャリア
	 * @return 住居契約タイプ
	 */
	private String getJyuKyoKeiType(CAANMsg inMsg)
	{
		// 料金グループコードより判断
		if (RYOKINGRP_EO_HIKARI_HOME.equals(inMsg.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			return JYUKOKEITAI_HOME;
		}
		else if (RYOKINGRP_EO_HIKARI_MEZON.equals(inMsg.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			return JYUKOKEITAI_MEZON;
		}
		else if (RYOKINGRP_EO_HIKARI_MANSHON.equals(inMsg.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			return JYUKOKEITAI_MANSHON;
		}

		return null;
	}
}
