/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK0121ShosaChk
*   ソースファイル名：JKKejbKK0121ShosaChk.java
*   作成者          ：富士通
*   日付            ：2011年12月14日
*＜機能概要＞
*   サービス契約<eoモバイル>照査チェック部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/12/14  富士通      新規作成
*	v5.00.00	2013/02/07	FJ)寺園		ANK-1421-00-00
*	v5.00.01	2013/02/08	FJ)藤本		IT1-2013-0000148
*   v5.00.02    2013/02/21  FJ)寺本     OT-2013-0000090
*   v5.00.03    2013/03/04  FJ)福井     ST3-2013-0000507
*   v5.00.04    2013/04/09  FJ)沖田     IT1-2013-0000756
**********************************************************************/

package eo.ejb.common.db;

import java.util.ArrayList;

import com.fujitsu.futurity.model.base.CAANMsg;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0121C012CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0121C012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0121C013CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0121C013CBSMsg1List;

/**
 * <p>
 * サービス契約<eoモバイル>の照査チェック部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0121ShosaChk extends JKKejbShosaChkBase
{

	/**
	 * <p>
	 * サービス契約<eoモバイル>の照査を行う
	 * </p>
	 * @param inCBSMsg 処理対象メッセージキャリア
	 * @param svcKeiNo サービス契約番号
	 * @param kidoCd 起動元コード
	 * @return 照査結果が設定されたメッセージ
	 */
	public void chkShosa(CAANMsg inCBSMsg, String svcKeiNo, String kidoCd)
	{
		ArrayList<CAANMsg> list = new ArrayList<CAANMsg>();
		CAANMsg retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());

		// バッチの場合
		if (KIDOMOTO_CODE_BATCH.equals(kidoCd))
		{
			// セット申込チェック
			retMsg = new JKKejbKK0121SetMskmChk().setMskmCheck(inCBSMsg, svcKeiNo, kidoCd);
			list.add(retMsg);
		}

		// セット申込単独チェックフラグがセット申込の場合、処理を終了する。
		if(SET_MSKM_SNGL_CHK_FLG_SET.equals(inCBSMsg.getString(EKK0121C012CBSMsg.SET_MSKM_SNGL_CHK_FLG)))
		{
			inCBSMsg.set(EKK0121C012CBSMsg.EKK0121C012CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

			return;
		}

		// サービス契約情報取得
		CAANMsg msg = getSvckei(inCBSMsg, svcKeiNo, kidoCd);
		// サービス契約情報が取得されなかった場合
		if (msg == null)
		{
			return;
		}

		// 申込年月日期間超過チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_001);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkChokMoshikomiYmdPrd(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
		list.add(retMsg);

		// 提供外機器存在チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_006);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiTkGaiKiki(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		// 機器提供サービス契約数下限チェック（ＰＬＣ以外）
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_007);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkLowlKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, KKTK_SVC_CD_KBN_1));
		list.add(retMsg);

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// 機器提供サービス契約数下限チェック（ＰＬＣ）
			retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_061);
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkLowlKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, KKTK_SVC_CD_KBN_2));
			list.add(retMsg);
		}

		// 機器提供サービス契約数上限チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_008);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkUpplKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, null));
		list.add(retMsg);

		// 提供外オプション存在チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_010);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiTkGaiOp(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		// オプションサービス契約数下限チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_011);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkLowlOpSvcKei(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		// オプションサービス契約数上限チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_012);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkUpplOpSvcKei(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		// 督促状態チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_017);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkStatTokusoku(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		// お客様退会チェック
//		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
//		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_018);
//		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkTaikaiCust(inCBSMsg, msg.getString(KK0081ETMsg.SYSID), kidoCd));
//		list.add(retMsg);

		// 申込書番号重複チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_028);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkDuplicateMskmshoNo(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO)));
		list.add(retMsg);

		// 光ハイブリット回線契約数チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_038);
		String[] retArray = chkHikariHybridLineNum(inCBSMsg, msg, kidoCd);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, retArray[0]);
		retMsg.set(EKK0121C012CBSMsg1List.CKAN_CHR, retArray[1]);
		list.add(retMsg);

		// サービスコードがインターネットサービス、かつ料金グループコードがｅｏモバイル（ＥＭ）の場合
		if (SVC_CD_01.equals(msg.getString(KK0081ETMsg.SVC_CD)) && PRC_GRP_CD_08.equals(msg.getString(KK0081ETMsg.PRC_GRP_CD)))
		{
			// 機器提供必須チェック
			retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_005);
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkTeikyoKKHissu(inCBSMsg, msg, kidoCd));
			list.add(retMsg);
		}

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// 未照査サービス契約存在チェック
			retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_029);
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiSvcMiSyosa(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);
			
			// 審査OKチェック
			retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_063);
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkShinsaOK(inCBSMsg, svcKeiNo));
			list.add(retMsg);	
		}

		// バッチの場合
		if (KIDOMOTO_CODE_BATCH.equals(kidoCd))
		{
			// オプション引継希望チェック
			retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_020);
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkKiboOpHktgi(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);

			// 照査不可サービス契約存在チェック
			retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_036);
			retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkNotSvcKeiSyosa(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);
		}

		// モバイル機器整合性チェック
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_043);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkMobileKiki(inCBSMsg, svcKeiNo, kidoCd));
		list.add(retMsg);

		// 審査結果補記チェック（照査OK）
		retMsg = new CAANMsg(EKK0121C012CBSMsg1List.class.getName());
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_040);
		retMsg.set(EKK0121C012CBSMsg1List.SHOSA_RLT_CD, chkSinsaHokiChkShosa(inCBSMsg, msg.getString(KK0081ETMsg.SKEKKA_HOKI_CD)));
		list.add(retMsg);

		inCBSMsg.set(EKK0121C012CBSMsg.EKK0121C012CBSMSG1LIST, (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(EKK0121C013CBSMsg1List.class.getName());

		// サービス契約情報取得
		CAANMsg msg = getSvckei(inCBSMsg, svcKeiNo, kidoCd);
		// サービス契約情報が取得されなかった場合
		if (msg == null)
		{
			return;
		}

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// オプション引継チェック
			retMsg = new CAANMsg(EKK0121C013CBSMsg1List.class.getName());
			retMsg.set(EKK0121C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_019);
			retMsg.set(EKK0121C013CBSMsg1List.SHOSA_RLT_CD, chkOpHktgi(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);
			
			//  審査結果補記チェック（照査NG）
			retMsg = new CAANMsg(EKK0121C013CBSMsg1List.class.getName());
			retMsg.set(EKK0121C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_041);
			retMsg.set(EKK0121C013CBSMsg1List.SHOSA_RLT_CD, chkSinsaHokiChkShosaNg(inCBSMsg, msg.getString(KK0081ETMsg.SKEKKA_HOKI_CD)));
			list.add(retMsg);

		}

		inCBSMsg.set(EKK0121C013CBSMsg.EKK0121C013CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

		return;
	}
}
