/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JKUejbAdChgFix
*	ソースファイル名	：JKUejbAdChgFix.java
*	作成者				：富士通　
*	作成日				：2011年12月10日
*＜機能概要＞
*	諸変更で実行される住所変更確定処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/12/10   富士通		新規作成
*********************************************************************/
package eo.ejb.common;

import java.util.ArrayList;
import java.util.List;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKUStrConst;
import eo.ejb.cbm.entity.KU0011ETMsg;
import eo.ejb.cbm.entity.KU0081ETMsg;
import eo.ejb.cbm.entity.KU0091ETMsg;
import eo.ejb.common.db.JKUejbKU0011SecProc;
import eo.ejb.common.db.JKUejbKU0081SecProc;
import eo.ejb.common.db.JKUejbKU0091SecProc;

/**
 *  <dd>クラス名：住所変更確定処理部品
 *  <dd>クラス説明：諸変更で実行される住所変更確定処理部品です。
 *  <dd>備考：
 * @version  1.00 2011/12/10
 * @author 富士通
 *
 */
public class JKUejbAdChgFix
{
	
	/**
	 * 住所変更確定処理対象工事案件情報取得処理
	 * @param kojiakNo	対象工事案件番号
	 * @return	処理対象工事案件情報
	 * @throws CAANException
	 */
	public static CAANMsg getAdChgFixTaishoKojiakInfo(String kojiakNo) throws CAANException
	{
		CAANMsg ku0011Msg = new CAANMsg(KU0011ETMsg.class.getName());
		
		// 工事案件番号
		ku0011Msg.set(KU0011ETMsg.KOJIAK_NO, kojiakNo);
		// データを取得する
		ku0011Msg = new JKUejbKU0011SecProc().findByPrimaryKey(ku0011Msg, true);
		// データが存在しないか、最新基本工事フラグが1である場合は、nullを返して終了する
		if (null == ku0011Msg || JKUStrConst.CD00882_RCNT_KIHON_KOJI.equals(ku0011Msg.getString(KU0011ETMsg.RCNT_KIHON_KOJI_FLG)))
		{
			return null;
		}
		return ku0011Msg;
	}
	
	/**
	 * 最新基本工事案件情報取得処理
	 * @param svcKeiNo	サービス契約番号
	 * @return	更新対象工事案件情報
	 * @throws CAANException
	 */
	public static CAANMsg getAdChgRcntKihonKojiak(String svcKeiNo) throws CAANException
	{
		CAANMsg retMsg = null;
		CAANMsg ku0081Msg = new CAANMsg(KU0081ETMsg.class.getName());
		// サービス契約番号
		ku0081Msg.set(KU0081ETMsg.SVC_KEI_NO, svcKeiNo);
		// 無効フラグ
		ku0081Msg.set(KU0081ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
		CAANMsg[] ku0081MsgArray = new JKUejbKU0081SecProc().findByCondition(ku0081Msg);
		
		if (null == ku0081MsgArray || ku0081MsgArray.length == 0)
		{
			return retMsg;
		}
		List<String> kojiakNoList = new ArrayList<String>();
		for (int i = 0; i < ku0081MsgArray.length; ++i)
		{
			if (-1 == kojiakNoList.indexOf(ku0081MsgArray[i].getString(KU0081ETMsg.KOJIAK_NO)))
			{
				kojiakNoList.add(ku0081MsgArray[i].getString(KU0081ETMsg.KOJIAK_NO));
			}
		}
		
		CAANMsg ku0011Msg = null;
		JKUejbKU0011SecProc ku0011SecProc = new JKUejbKU0011SecProc();
		for (int i = 0; i < kojiakNoList.size(); ++i)
		{
			ku0011Msg = new CAANMsg(KU0011ETMsg.class.getName());
			// 工事案件番号
			ku0011Msg.set(KU0011ETMsg.KOJIAK_NO, kojiakNoList.get(i));
			// 最新基本工事フラグ
			ku0011Msg.set(KU0011ETMsg.RCNT_KIHON_KOJI_FLG, JKUStrConst.CD00882_RCNT_KIHON_KOJI);
			// 無効フラグ
			ku0011Msg.set(KU0011ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
			
			CAANMsg[] ku0011MsgArray = ku0011SecProc.findByCondition(ku0011Msg);
			if (null != ku0011MsgArray && ku0011MsgArray.length == 1)
			{
				retMsg = ku0011MsgArray[0];
				break;
			}
		}
		return retMsg;
	}
	
	/**
	 * 住所変更確定処理整合性チェック（マンションチェック）
	 * @param ku0011Msg	工事案件情報
	 * @return	マンションの工事案件情報である場合false
	 */
	public static boolean checkMansion(CAANMsg ku0011Msg)
	{
		// マンション物件コードに値が存在する場合は、住所変更確定処理を行えないため、falseを返す
		if (null != ku0011Msg.getString(KU0011ETMsg.MANSION_BUKKEN_CD))
		{
			return false;
		}
		return true;
	}
	
	/**
	 * 工事案件更新_住所変更確定処理
	 * @param taishoKojiakInfo		住所変更確定処理対象工事案件情報
	 * @param newestKojiakNo		最新基本工事案件番号
	 * @param adChgFixDtm			住所変更確定年月日時分秒
	 * @param kojiUkOptntyIdoDtm	工事受付契機異動年月日時分秒
	 * @param operateDateTime		運用日時
	 * @param operatorId			オペレータID
	 * @return	実行結果
	 * @throws CAANFinderException
	 */
	public static boolean updateAdChgFixKU0011(CAANMsg taishoKojiakInfo, String newestKojiakNo, String adChgFixDtm, String kojiUkOptntyIdoDtm,
			String operateDateTime, String operatorId) throws CAANFinderException
	{
		JKUejbKU0011SecProc ku0011SecProc = new JKUejbKU0011SecProc();
		CAANMsg ku0011Msg = new CAANMsg(KU0011ETMsg.class.getName());
		
		// ---住所変更確定処理対象工事案件の更新
		
		// 工事案件番号
		ku0011Msg.set(KU0011ETMsg.KOJIAK_NO, taishoKojiakInfo.getString(KU0011ETMsg.KOJIAK_NO));
		// 最新基本工事フラグ
		ku0011Msg.set(KU0011ETMsg.RCNT_KIHON_KOJI_FLG, JKUStrConst.CD00882_RCNT_KIHON_KOJI);
		// 住所変更確定年月日時分秒
		ku0011Msg.set(KU0011ETMsg.AD_CHG_FIX_DTM, adChgFixDtm);
		// OPMS変更連携要否（工事案件ステータスが受付済以外の場合のみ要を設定）
		if (false == JKUStrConst.CD00474_UK_ZM.equals(taishoKojiakInfo.getString(KU0011ETMsg.KOJIAK_STAT)))
		{
			ku0011Msg.set(KU0011ETMsg.OPMS_CHGE_RNKI_YH, JKUStrConst.KH_PSG);
		}
		// 更新年月日時分秒
		ku0011Msg.set(KU0011ETMsg.UPD_DTM, operateDateTime);
		// 更新オペレータアカウント
		ku0011Msg.set(KU0011ETMsg.UPD_OPEACNT, operatorId);

		// 更新実行
		ku0011SecProc.update(ku0011Msg);
		
		// ---更新対象工事案件の更新
		
		ku0011Msg = new CAANMsg(KU0011ETMsg.class.getName());
		
		// 工事案件番号
		ku0011Msg.set(KU0011ETMsg.KOJIAK_NO, newestKojiakNo);
		// 最新基本工事フラグ
		ku0011Msg.set(KU0011ETMsg.RCNT_KIHON_KOJI_FLG, JKUStrConst.CD00882_RCNT_KIHON_KOJI_NON);
		// 更新年月日時分秒
		ku0011Msg.set(KU0011ETMsg.UPD_DTM, operateDateTime);
		// 更新オペレータアカウント
		ku0011Msg.set(KU0011ETMsg.UPD_OPEACNT, operatorId);
		
		// 更新実行
		ku0011SecProc.update(ku0011Msg);
		
		return true;
	}
	
	/**
	 * 申込明細_工事案件登録_住所変更確定処理
	 * @param taishoKojiakNo	処理対象工事案件番号
	 * @param mskmDtlNo			申込明細番号
	 * @param operateDateTime	運用日時
	 * @param operatorId		オペレータID
	 * @param inCBSMsg			CBSメッセージ
	 * @return	実行結果
	 * @throws CAANException
	 */
	public static boolean insertAdChgFixKU0091(String taishoKojiakNo, String mskmDtlNo,
			String operateDateTime, String operatorId, CAANMsg inCBSMsg) throws CAANException
	{
		JKUejbKU0091SecProc ku0091SecProc = new JKUejbKU0091SecProc();
		CAANMsg ku0091Msg = new CAANMsg(KU0091ETMsg.class.getName());
		
		// ---登録対象チェック
		
		// 申込明細番号が存在しない場合は登録を行わない
		if (null == mskmDtlNo)
		{
			return true;
		}
		
		// すでに同一キーのデータが存在する場合は登録を行わない
		
		// 工事案件番号
		ku0091Msg.set(KU0091ETMsg.KOJIAK_NO, taishoKojiakNo);
		// 申込明細番号
		ku0091Msg.set(KU0091ETMsg.MSKM_DTL_NO, mskmDtlNo);
		if (true == ku0091SecProc.isExistsPrimaryKey(ku0091Msg, false))
		{
			return true;
		}
		
		// ---登録実行
		
		// 申込明細_工事案件適用開始年月日 （運用日付）
		ku0091Msg.set(KU0091ETMsg.MSKM_DTL_KOJIAK_TSTAYMD, JKUModelCommon.getOpeDate(inCBSMsg, null));
		// 申込明細_工事案件適用終了年月日
		ku0091Msg.set(KU0091ETMsg.MSKM_DTL_KOJIAK_TENDYMD, JKUStrConst.MAX_YMD);
		// 登録年月日時分秒
		ku0091Msg.set(KU0091ETMsg.ADD_DTM, operateDateTime);
		// 登録オペレータアカウント
		ku0091Msg.set(KU0091ETMsg.ADD_OPEACNT, operatorId);
		// 更新年月日時分秒
		ku0091Msg.set(KU0091ETMsg.UPD_DTM, operateDateTime);
		// 更新オペレータアカウント
		ku0091Msg.set(KU0091ETMsg.UPD_OPEACNT, operatorId);
		// 無効フラグ （'有効'）
		ku0091Msg.set(KU0091ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
		
		// 登録を実行する
		ku0091SecProc.create(ku0091Msg);
		
		return true;
	}
}