/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbEKK1071C101Edit
*	ソースファイル名：JKKejbEKK1071C101Edit.java
*	作成者			：富士通
*	日付			：2011年07月14日
*＜機能概要＞
*	不良顧客審査チェック部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/14	富士通		新規作成
*
**********************************************************************/

package eo.ejb.common.edit;

import java.util.ArrayList;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.CK0061ETMsg;
import eo.ejb.cbm.entity.CK0061LE;
import eo.ejb.cbm.entity.KK1981ETMsg;
import eo.ejb.cbs.cbsmsg.EKK1071C101CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * エリア審査チェッククラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK1071C101Edit
{

	/** 審査チェック結果 OK */
	private static final String CHECK_OK = "00";

	/** 審査詳細種別コード 不良顧客チェック */
	private static final String JDG_KINO_SBT_HURYO = "016";

	/** 審査対象画面タブコード 契約者情報 */
	private static final String JDG_SCREEN_TAB_KSHA = "03";

	/** 審査対象画面項目コード ご契約者情報 */
	private static final String JDG_SCREEN_CST_KSHA = "001";

	/** 審査詳細メッセージID */
	private static final String JDG_MESSAGE_ID = "EKB8040--I";

	/** メッセージ埋込み文字 お客様 */
	private static final String MESSAGE_INPUT_CUST = "お客様";

	/** メッセージ埋込み文字 親権者 */
	private static final String MESSAGE_INPUT_SKS = "親権者";

	/** メッセージ埋込み文字 請求先 */
	private static final String MESSAGE_INPUT_SEI = "請求先";

	/** 無効フラグ 有効 */
	private static final String MK_FLG_VALID = "0";

	/**
	 * コンストラクタです。
	 */
	public JKKejbEKK1071C101Edit()
	{
	}

	/**
	 * <p>
	 * 不良顧客審査チェック処理を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 */
	public Object getHuryoCustOkChkRslt(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();

		// 審査詳細実施条件のエラー結果コードを取得する
		String errRsltCd = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C101CBSMsg.JDG_JSSI_KINO_SKBT_CD), JDG_KINO_SBT_HURYO);

		// エラー結果取得コードが取得できなかった場合は処理を行わない
		if (errRsltCd == null || "".equals(errRsltCd))
		{
			return CHECK_OK;
		}

		// メッセージ埋め込み文字リスト
		ArrayList<String> arrayInput = new ArrayList<String>();

		// 不良顧客チェック（お客様情報）がエラーの場合、メッセージ埋め込み文字を設定する
		if (isHuryoCustCheckCust(inMsg))
		{
			arrayInput.add(MESSAGE_INPUT_CUST);
		}

		// 不良顧客チェック（親権者情報）がエラーの場合、メッセージ埋め込み文字を設定する
		if (isHuryoCustCheckSks(inMsg))
		{
			arrayInput.add(MESSAGE_INPUT_SKS);
		}

		// 不良顧客チェック（請求契約情報）がエラーの場合、メッセージ埋め込み文字を設定する
		if (isHuryoCustCheckSei(inMsg))
		{
			arrayInput.add(MESSAGE_INPUT_SEI);
		}

		// メッセージ埋め込み文字が1件以上の場合、審査詳細に登録して審査結果NGを返却する
		if (arrayInput.size() > 0)
		{
			createHuryo(inMsg, inContext, errRsltCd, arrayInput);
			return errRsltCd;
		}

		return CHECK_OK;
	}

	/**
	 * <p>
	 * 不良顧客チェックを行います（お客様情報）。
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @return お客様情報が不良顧客に存在する場合true。存在しない場合false。
	 */
	public boolean isHuryoCustCheckCust(CAANMsg inMsg)
	{
		// チェック対象項目が全て未設定の場合は処理を行わない
		if (inMsg.isNull(EKK1071C101CBSMsg.CUST_NM)
				&& inMsg.isNull(EKK1071C101CBSMsg.CUST_KANA)
				&& inMsg.isNull(EKK1071C101CBSMsg.KEISHA_TELNO))
		{
			return false;
		}

		// 不良顧客存在チェック（お客様名）
		CAANMsg inETMsg1 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg1.set(CK0061ETMsg.HURYO_CUST_NM, inMsg.getString(EKK1071C101CBSMsg.CUST_NM));

		if (!isCK0061SearchCountCheck(inETMsg1))
		{
			return true;
		}

		// 不良顧客存在チェック（お客様名カナ）
		CAANMsg inETMsg2 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg2.set(CK0061ETMsg.HURYO_CUST_KANA, inMsg.getString(EKK1071C101CBSMsg.CUST_KANA));

		if (!isCK0061SearchCountCheck(inETMsg2))
		{
			return true;
		}

		// 不良顧客存在チェック（契約者電話番号）
		CAANMsg inETMsg3 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg3.set(CK0061ETMsg.HURYO_CUST_TELNO, inMsg.getString(EKK1071C101CBSMsg.KEISHA_TELNO));

		if (!isCK0061SearchCountCheck(inETMsg3))
		{
			return true;
		}

		return false;
	}

	/**
	 * <p>
	 * 不良顧客チェックを行います（親権者情報）。
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @return 親権者情報が不良顧客に存在する場合true。存在しない場合false。
	 */
	public boolean isHuryoCustCheckSks(CAANMsg inMsg)
	{
		// チェック対象項目が全て未設定の場合は処理を行わない
		if (inMsg.isNull(EKK1071C101CBSMsg.SKSHA_NM)
				&& inMsg.isNull(EKK1071C101CBSMsg.SKSHA_KANA)
				&& inMsg.isNull(EKK1071C101CBSMsg.SKSHA_TELNO))
		{
			return false;
		}

		// 不良顧客存在チェック（親権者名）
		CAANMsg inETMsg1 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg1.set(CK0061ETMsg.HURYO_CUST_NM, inMsg.getString(EKK1071C101CBSMsg.SKSHA_NM));

		if (!isCK0061SearchCountCheck(inETMsg1))
		{
			return true;
		}

		// 不良顧客存在チェック（親権者名カナ）
		CAANMsg inETMsg2 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg2.set(CK0061ETMsg.HURYO_CUST_KANA, inMsg.getString(EKK1071C101CBSMsg.SKSHA_KANA));

		if (!isCK0061SearchCountCheck(inETMsg2))
		{
			return true;
		}

		// 不良顧客存在チェック（親権者電話番号）
		CAANMsg inETMsg3 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg3.set(CK0061ETMsg.HURYO_CUST_TELNO, inMsg.getString(EKK1071C101CBSMsg.SKSHA_TELNO));

		if (!isCK0061SearchCountCheck(inETMsg3))
		{
			return true;
		}

		return false;
	}

	/**
	 * <p>
	 * 不良顧客チェックを行います（請求契約情報）。
	 * </p>
	 * @param inMsg 処理対象のメッセージ
	 * @return 請求契約情報が不良顧客に存在する場合true。存在しない場合false。
	 */
	public boolean isHuryoCustCheckSei(CAANMsg inMsg)
	{
		// チェック対象項目が全て未設定の場合は処理を行わない
		if (inMsg.isNull(EKK1071C101CBSMsg.SHS_KANA)
				&& inMsg.isNull(EKK1071C101CBSMsg.SOHUS_TELNO))
		{
			return false;
		}

		// 不良顧客存在チェック（送付先カナ名）
		CAANMsg inETMsg1 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg1.set(CK0061ETMsg.HURYO_CUST_KANA, inMsg.getString(EKK1071C101CBSMsg.SHS_KANA));

		if (!isCK0061SearchCountCheck(inETMsg1))
		{
			return true;
		}

		// 不良顧客存在チェック（送付先電話番号）
		CAANMsg inETMsg2 = new CAANMsg(CK0061ETMsg.class.getName());
		inETMsg2.set(CK0061ETMsg.HURYO_CUST_TELNO, inMsg.getString(EKK1071C101CBSMsg.SOHUS_TELNO));

		if (!isCK0061SearchCountCheck(inETMsg2))
		{
			return true;
		}

		return false;
	}

	/**
	 * <p>
	 * 不良顧客のレコードの件数をチェックします。
	 * </p
	 * @param inETMsg 検索条件を設定したETメッセージ
	 * @return 件数が取得できない場合true、それ以外はfalse
	 */
	private boolean isCK0061SearchCountCheck(CAANMsg inETMsg)
	{
		inETMsg.set(CK0061ETMsg.MK_FLG, MK_FLG_VALID);

		// 不良顧客の検索を行う
		CAANMsg[] otETMsg = null;

		try
		{
			otETMsg = new CK0061LE().findByCondition(inETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		// データが取得できた場合はfalseを返却する
		if (otETMsg.length > 0)
		{
			return false;
		}

		return true;
	}

	/**
	 * <p>
	 * 審査詳細の登録を行います（不良顧客チェック）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd エラー結果コード
	 * @param arrayInput メッセージ埋め込み文字リスト
	 */
	public void createHuryo(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd, ArrayList<String> arrayInput)
	{
		// 審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C101CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_KINO_SBT_HURYO);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, JDG_MESSAGE_ID);

		String errInput = null;

		// メッセージ埋め込みリストの件数分処理を行う
		for (int i = 0; i < arrayInput.size(); i++)
		{
			// メッセージ埋め込みリストに「お客様」が存在する場合のみ設定する
			if (MESSAGE_INPUT_CUST.equals(arrayInput.get(i)))
			{
				inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JDG_SCREEN_TAB_KSHA);
				inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JDG_SCREEN_CST_KSHA);
			}
			
			// メッセージ埋め込みリストを結合する
			if (i == 0)
			{
				errInput = arrayInput.get(i);
			}
			else
			{
				errInput = errInput + "、" + arrayInput.get(i);
			}
		}

		inETMsg.set(KK1981ETMsg.MSG_UMKM_MOJI, errInput);

		// 登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		// PKが重複していた場合は関連制約エラーとする
		if (!createFlg)
		{
			inMsg.set(EKK1071C101CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C101CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}

	}

}
