/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK0141ShosaChk
*   ソースファイル名：JKKejbKK0141ShosaChk.java
*   作成者          ：富士通
*   日付            ：2011年12月14日
*＜機能概要＞
*   サービス契約<eoADSL>照査チェック部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   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
**********************************************************************/

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.EKK0141C012CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0141C012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0141C013CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0141C013CBSMsg1List;

/**
 * <p>
 * サービス契約<eoADSL>の照査チェック部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0141ShosaChk extends JKKejbShosaChkBase
{

	/** 料金グループコード(ｅｏＡＤＳＬ（ｅＡｃｃｅｓｓ）) */
	protected static final String PRC_GRP_CD_EOADSL_EACCESS = "05";

	/**
	 * <p>
	 * サービス契約<eoADSL>の照査を行う
	 * </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(EKK0141C012CBSMsg1List.class.getName());

		// バッチの場合
		if (KIDOMOTO_CODE_BATCH.equals(kidoCd))
		{
			// セット申込チェック
			retMsg = new JKKejbKK0141SetMskmChk().setMskmCheck(inCBSMsg, svcKeiNo, kidoCd);
			list.add(retMsg);
		}

		// セット申込単独チェックフラグがセット申込の場合、処理を終了する。
		if(SET_MSKM_SNGL_CHK_FLG_SET.equals(inCBSMsg.getString(EKK0141C012CBSMsg.SET_MSKM_SNGL_CHK_FLG)))
		{
			inCBSMsg.set(EKK0141C012CBSMsg.EKK0141C012CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

			return;
		}

		// サービス契約情報取得
		CAANMsg msg = getSvckei(inCBSMsg, svcKeiNo, kidoCd);
		// サービス契約情報が取得されなかった場合
		if (msg == null)
		{
			return;
		}

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// 申込年月日期間超過チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_001);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkChokMoshikomiYmdPrd(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);

			// 提供外機器存在チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_006);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiTkGaiKiki(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);

			// 機器提供サービス契約数下限チェック（ＰＬＣ以外）
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_007);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkLowlKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, KKTK_SVC_CD_KBN_1));
			list.add(retMsg);

			// 機器提供サービス契約数下限チェック（ＰＬＣ）
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_061);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkLowlKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, KKTK_SVC_CD_KBN_2));
			list.add(retMsg);

			// 機器提供サービス契約数上限チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_008);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkUpplKktkSvcKei(inCBSMsg, svcKeiNo, kidoCd, null));
			list.add(retMsg);

			// 提供外オプション存在チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_010);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiTkGaiOp(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);

			// オプションサービス契約数下限チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_011);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkLowlOpSvcKei(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);

			// オプションサービス契約数上限チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_012);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkUpplOpSvcKei(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);

			// 督促状態チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_017);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkStatTokusoku(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);

			// お客様退会チェック
//			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
//			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_018);
//			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkTaikaiCust(inCBSMsg, msg.getString(KK0081ETMsg.SYSID), kidoCd));
//			list.add(retMsg);

			// 申込書番号重複チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_028);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkDuplicateMskmshoNo(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO)));
			list.add(retMsg);

			// 未照査サービス契約存在チェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_029);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkSonzaiSvcMiSyosa(inCBSMsg, msg.getString(KK0081ETMsg.MSKM_DTL_NO), kidoCd));
			list.add(retMsg);

			// 審査OKチェック
			retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_063);
			retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkShinsaOK(inCBSMsg, svcKeiNo));
			list.add(retMsg);
		}

		// 審査結果補記チェック（照査OK）
		retMsg = new CAANMsg(EKK0141C012CBSMsg1List.class.getName());
		retMsg.set(EKK0141C012CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_040);
		retMsg.set(EKK0141C012CBSMsg1List.SHOSA_RLT_CD, chkSinsaHokiChkShosa(inCBSMsg, msg.getString(KK0081ETMsg.SKEKKA_HOKI_CD)));
		list.add(retMsg);

		inCBSMsg.set(EKK0141C012CBSMsg.EKK0141C012CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

		return;
	}

	/**
	 * <p>
	 * サービス契約<eoADSL>の照査(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(EKK0141C013CBSMsg1List.class.getName());

		// サービス契約情報取得
		CAANMsg msg = getSvckei(inCBSMsg, svcKeiNo, kidoCd);
		// サービス契約情報が取得されなかった場合
		if (msg == null)
		{
			return;
		}

		// オンラインの場合
		if (KIDOMOTO_CODE_ONLINE.equals(kidoCd))
		{
			// オプション引継チェック
			retMsg = new CAANMsg(EKK0141C013CBSMsg1List.class.getName());
			retMsg.set(EKK0141C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_019);
			retMsg.set(EKK0141C013CBSMsg1List.SHOSA_RLT_CD, chkOpHktgi(inCBSMsg, svcKeiNo, kidoCd));
			list.add(retMsg);

			//  審査結果補記チェック（照査NG）
			retMsg = new CAANMsg(EKK0141C013CBSMsg1List.class.getName());
			retMsg.set(EKK0141C013CBSMsg1List.SHOSA_TRG_CD, SHOSACHK_TRG_041);
			retMsg.set(EKK0141C013CBSMsg1List.SHOSA_RLT_CD, chkSinsaHokiChkShosaNg(inCBSMsg, msg.getString(KK0081ETMsg.SKEKKA_HOKI_CD)));
			list.add(retMsg);
		}

		inCBSMsg.set(EKK0141C013CBSMsg.EKK0141C013CBSMSG1LIST, (CAANMsg[])list.toArray(new CAANMsg[0]));

		return;
	}
}
