/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK2951C010TPMA
*	ソースファイル名：JEKK2951C010TPMA.java
*	作成者			：富士通
*	日付			：2014年10月22日
*＜機能概要＞
*	ＣＩＣ参照用請求契約更新の関連チェック処理を呼び出す部品。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.00.00	2014/10/22	FJ鈴木		【ANK-2273-00-00】新規作成
*	v10.00.01	2014/11/01	FJ鈴木		【ANK-2273-00-00】機能コード＝１（確定ボタン時）、前回のチェック内容と比較する。
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

import java.util.List;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbs.cbsmsg.EKK2951C010CBSMsg;
import eo.ejb.common.entity.JKKejbKK2951KRCK;

/**
 * <p>
 * ＣＩＣ参照用請求契約更新独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK2951C010TPMA implements TemplateMainHandler
{

	/**
	 * <p>
	 * ＣＩＣ参照用請求契約の関連制約部品の呼び出しを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 開始ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK2951C010TPMA#execKRCK");
	
		// 機能コード
		String funcCode = inCBSMsg.getString(EKK2951C010CBSMsg.FUNC_CODE);
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK2951C010TPMA#execKRCK. funcCode=" + funcCode);

		// 請求契約番号
		String inSeikyKeiNo = inCBSMsg.getString(EKK2951C010CBSMsg.SEIKY_KEI_NO);

// 2014/11/01 ANK-2273-00-00 del start
		// スキップフラグ
//		String skipFlg = inCBSMsg.getString(EKK2951C010CBSMsg.CHK_SKIP_FLG);
// 2014/11/01 ANK-2273-00-00 del end

// 2014/11/01 ANK-2273-00-00 add start
		// 異動先請求契約番号（前回チェック時）
		String ido_ski_seiky_kei_no_bef = inCBSMsg.getString(EKK2951C010CBSMsg.IDO_SKI_SEIKY_KEI_NO_BEF);

		// ＣＩＣ連携内容コード
		String cic_rnki_naiyo_cd = inCBSMsg.getString(EKK2951C010CBSMsg.CIC_RNKI_NAIYO_CD);
// 2014/11/01 ANK-2273-00-00 add end

// 2014/11/01 ANK-2273-00-00 mod start
//		if ("1".equals(skipFlg)) {
		// ＣＩＣ連携内容コードを 00:通常 に設定する場合は、チェック不要
		if ("00".equals(cic_rnki_naiyo_cd)) {
// 2014/11/01 ANK-2273-00-00 mod end
			// チェックをスキップする。
		} else {
			// ＣＩＣ参照用請求契約の関連制約部品の呼び出し
			List<String> seikyKeiList = new JKKejbKK2951KRCK().getNewKakins(inSeikyKeiNo, inCBSMsg, inContext);
				
			if (!seikyKeiList.isEmpty()) {
				
				// 複数の請求契約番号をカンマ区切りに編集
				StringBuffer sb = new StringBuffer();
				for (String seikyKeiNo : seikyKeiList) {
					if (!"".equals(sb.toString())) {
						sb.append(",");
					}
					sb.append(seikyKeiNo);
				}
// 2014/11/01 ANK-2273-00-00 add start
				String nowIdoSkiSeikyKeiNo = sb.toString();
// 2014/11/01 ANK-2273-00-00 add end
				JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK2951C010TPMA#execKRCK. sb=" + nowIdoSkiSeikyKeiNo);
				
				// 結果を返却する
				inCBSMsg.set(EKK2951C010CBSMsg.IDO_SKI_SEIKY_KEI_NO, nowIdoSkiSeikyKeiNo);
				
				int result = 0;
				if ("1".equals(funcCode)) {

// 2014/11/01 ANK-2273-00-00 add start
					// 機能コード＝１（確定ボタン）のとき、
					// 異動先請求契約番号（前回チェック時）と比較して、不一致なら契約状態に
					// 変化があったと判断して、エラーにする。
					
					if (! nowIdoSkiSeikyKeiNo.equals(ido_ski_seiky_kei_no_bef)) {
// 2014/11/01 ANK-2273-00-00 add end
						// 機能コード＝１のときはエラー扱いにしてロールバックさせる
						result = StatusCodes.RELATION_ERR;
						inCBSMsg.set(EKK2951C010CBSMsg.CHK_SKIP_FLG_ERR, "EA");
// 2014/11/01 ANK-2273-00-00 add start

					} else {
						// 一致していた場合は正常扱いにしたいので、異動先請求契約番号を初期化して返却する
						inCBSMsg.set(EKK2951C010CBSMsg.IDO_SKI_SEIKY_KEI_NO, "");
					}
// 2014/11/01 ANK-2273-00-00 add end
				} else {
					// 機能コード＝２のときはワーニング扱い
					result = StatusCodes.WARNING;
					inCBSMsg.set(EKK2951C010CBSMsg.CHK_SKIP_FLG_ERR, "WA");
				}
				JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK2951C010TPMA#execKRCK. result=" + result);
				
				// ステータスのセット
				if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
				{
					inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
					JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK2951C010TPMA#execKRCK. result is set. :" + result);
				}
				
			}
		}
		// 終了ログ出力
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JEKK2951C010TPMA#execKRCK");
	}

}

