/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKU0051C010TPMA
*	ソースファイル名：JEKU0051C010TPMA.java
*	作成者			：FJ
*	日付			：2011年09月27日
*＜機能概要＞
*	eoオフィスの諸変更を行うサービスインターフェイス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ3.00.00	2012/03/18	FJ)日根		【ANK-0151-00-00】法人ＩＰ−ＶＰＮブロードバンドアクセス追加対応
*	ｖ30.00.00	2018/01/11	FJ)柳川		【ANK-2966-02-00】OPMSリプレース（Step２−１）ClarisＩＦ項目（工事案件備考）追加
*	ｖ38.00.00	2018/09/11	FJ)星野		【OM-2018-0000445】
********************************************************************************/

package eo.ejb.cbs.mainproc;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;
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.cbm.entity.KU0011ETMsg;
import eo.ejb.cbm.entity.KU0051ETMsg;
import eo.ejb.cbm.entity.KU0071ETMsg;
import eo.ejb.cbm.entity.KU0101ETMsg;
import eo.ejb.cbs.cbsmsg.EKU0051C010CBSMsg;
import eo.ejb.common.JKUModelCommon;
import eo.ejb.common.JPCModelCommon;
import eo.ejb.common.db.JKUejbKU0011SecProc;
import eo.ejb.common.db.JKUejbKU0051SecProc;
import eo.ejb.common.db.JKUejbKU0071SecProc;
import eo.ejb.common.db.JKUejbKU0101SecProc;
import eo.common.constant.JKUStrConst;
import eo.common.constant.JPCModelConstant;

import java.util.ArrayList;
import java.util.List;


/**
 * <p>
 * 工事案件＜ｅｏオフィス＞諸変更の独自処理を呼び出す部品です。
 * </p>
 * @author FJ
 */
public class JEKU0051C010TPMA implements TemplateMainHandler
{

	/**
	 * 工事案件＿更新処理実行判定項目
	 */
	private static final String[] UPD_REQCHK_KOJIAK =
	{
		KU0011ETMsg.TENTAKU_SAKI_AD_CD
		, KU0011ETMsg.TENTAKU_SAKI_PCD
		, KU0011ETMsg.TENTAKU_SAKI_STATE_NM
		, KU0011ETMsg.TENTAKU_SAKI_CITY_NM
		, KU0011ETMsg.TENTAKU_SAKI_OAZTSU_NM
		, KU0011ETMsg.TENTAKU_SAKI_AZCHO_NM
		, KU0011ETMsg.TENTAKU_SAKI_AD_BNCHIGO
		, KU0011ETMsg.TENTAKU_SAKI_ADRTTM
		, KU0011ETMsg.TENTAKU_SAKI_ADRRM
		, KU0011ETMsg.CUST_NM
		, KU0011ETMsg.CUST_KANA
		, KU0011ETMsg.CUST_HOME_TELNO
		, KU0011ETMsg.CUST_KTAI_TELNO
		, KU0011ETMsg.CUST_RRKS_TELNO
		, KU0011ETMsg.RRKS_OFFC_NM
		, KU0011ETMsg.KEPCO_CUSTINFO_JUJU_DOI_UM
		, KU0011ETMsg.AD_FORM_CD
		, KU0011ETMsg.SHUNKO_RSV_YMD
		, KU0011ETMsg.NYUKYO_RSV_YMD
		, KU0011ETMsg.HIKIWATASHI_RSV_YMD
		, KU0011ETMsg.EPOWER_SODEN_RSV_YMD
		, KU0011ETMsg.NYUKYO_FLR_CNT_CD
		, KU0011ETMsg.KCKU_FLR_CNT_CD
		, KU0011ETMsg.TEL_RRK_KIBO_TIME_CD
		, KU0011ETMsg.TAKCHO_KIBO_APO_KIGEN_YMD
		, KU0011ETMsg.TNKJ_KIBO_APO_KIGEN_YMD
		, KU0011ETMsg.KOJI_APO_RRKS_SHITEI_CD
		, KU0011ETMsg.RRK_WAY_CD
		, KU0011ETMsg.RRK_WAY_HOKI
		, KU0011ETMsg.OPSVKEI_HKTGI_FLG
		, KU0011ETMsg.KOJIAK_UK_USER_ID
// ANK-2966-02-00 ADD START
		, KU0011ETMsg.KOJIAK_RRK_JIKO
// ANK-2966-02-00 ADD END
	};
	
	// 20180911 OM-2018-0000445対応 星野 ADD START
	/**
	 * 工事案件<eo光オフィス>＿更新処理実行判定項目
	 */
	private static final String[] UPD_REQCHK_KOJIAK_OFFICE =
	{
		KU0051ETMsg.TKNO
	};
	// 20180911 OM-2018-0000445対応 星野 ADD END

	/**
	 * 変更連携要否判定項目
	 */
	/** FCDS変更連携要否判定項目 */
	private static final String[] FCDS_CHGE_RNKI_ARRAY =
	{
		KU0011ETMsg.TENTAKU_SAKI_AD_CD
		, KU0011ETMsg.TENTAKU_SAKI_ADRTTM
		, KU0011ETMsg.CUST_NM
	};
	// 20180911 OM-2018-0000445対応 星野 ADD START
	/** FCDS変更連携要否判定項目（光オフィス） */
	private static final String[] FCDS_CHGE_RNKI_ARRAY_OFFICE =
	{
		KU0051ETMsg.TKNO
	};
	// 20180911 OM-2018-0000445対応 星野 ADD END
	
	/** OPMS変更連携要否判定項目 */
	private static final String[] OPMS_CHGE_RNKI_ARRAY =
	{
		KU0011ETMsg.TENTAKU_SAKI_AD_CD
		, KU0011ETMsg.TENTAKU_SAKI_PCD
		, KU0011ETMsg.CUST_NM
		, KU0011ETMsg.CUST_KANA
		, KU0011ETMsg.CUST_HOME_TELNO
		, KU0011ETMsg.CUST_KTAI_TELNO
		, KU0011ETMsg.CUST_RRKS_TELNO
		, KU0011ETMsg.RRKS_OFFC_NM
		, KU0011ETMsg.KEPCO_CUSTINFO_JUJU_DOI_UM
		, KU0011ETMsg.AD_FORM_CD
		, KU0011ETMsg.SHUNKO_RSV_YMD
		, KU0011ETMsg.NYUKYO_RSV_YMD
		, KU0011ETMsg.HIKIWATASHI_RSV_YMD
		, KU0011ETMsg.EPOWER_SODEN_RSV_YMD
		, KU0011ETMsg.NYUKYO_FLR_CNT_CD
		, KU0011ETMsg.KCKU_FLR_CNT_CD
		, KU0011ETMsg.TEL_RRK_KIBO_TIME_CD
		, KU0011ETMsg.TNKJ_KIBO_APO_KIGEN_YMD
		, KU0011ETMsg.KOJI_APO_RRKS_SHITEI_CD
		, KU0011ETMsg.RRK_WAY_CD
		, KU0011ETMsg.RRK_WAY_HOKI
		, KU0011ETMsg.OPSVKEI_HKTGI_FLG
		, KU0011ETMsg.KOJIAK_UK_USER_ID
// ANK-2966-02-00 ADD START
		, KU0011ETMsg.KOJIAK_RRK_JIKO
// ANK-2966-02-00 ADD END
	};
	// 20180911 OM-2018-0000445対応 星野 ADD START
	/** OPMS変更連携要否判定項目（光オフィス） */
	private static final String[] OPMS_CHGE_RNKI_ARRAY_OFFICE =
	{
		KU0051ETMsg.TKNO
	};
	// 20180911 OM-2018-0000445対応 星野 ADD END

	
	/**
	 * 先行設計＿更新処理実行判定項目
	 */
	private static final String[] UPD_REQCHK_SENKODSGN =
	{
		KU0101ETMsg.SETPLACE_AD_CD
		, KU0101ETMsg.SETPLACE_PCD
		, KU0101ETMsg.SETPLACE_STATE_NM
		, KU0101ETMsg.SETPLACE_CITY_NM
		, KU0101ETMsg.SETPLACE_OAZTSU_NM
		, KU0101ETMsg.SETPLACE_AZCHO_NM
		, KU0101ETMsg.SETPLACE_AD_BNCHIGO
		, KU0101ETMsg.SETPLACE_ADRTTM
		, KU0101ETMsg.SETPLACE_ADRRM
		, KU0101ETMsg.CUST_NM
		, KU0101ETMsg.CUST_KANA
		, KU0101ETMsg.CUST_RRKS_TELNO
		, KU0101ETMsg.CUST_RRKS_KTAI_TELNO
		, KU0101ETMsg.KCKU_FLR_CNT_CD
		, KU0101ETMsg.TKNO
	};
	
	/**
	 * 連携要工事案件ステータス（依頼済〜工事完了済）
	 */
	private static final String[] RNKI_PSG_KOJIAK_STAT = 
	{
		JKUStrConst.CD00474_IRI_ZM
		, JKUStrConst.CD00474_TAKNI_CHOSA_FIN_ZM
		, JKUStrConst.CD00474_KOCOMP_KETTEI_ZM
		, JKUStrConst.CD00474_TAKNI_CHOSA_RSV_ZM
		, JKUStrConst.CD00474_KR_KAGI_KAIHAT_IRI_ZM
		, JKUStrConst.CD00474_GEMBA_SAGYO_FIN_ZM
		, JKUStrConst.CD00474_KOJI_FIN_ZM
	};
	
	/**
	 * 仕掛り工事案件ステータス（受付済〜現場作業完了済）
	 */
	private static final String[] SKKR_KOJIAK_STAT = 
	{
		JKUStrConst.CD00474_UK_ZM
		, JKUStrConst.CD00474_IRI_ZM
		, JKUStrConst.CD00474_TAKNI_CHOSA_FIN_ZM
		, JKUStrConst.CD00474_KOCOMP_KETTEI_ZM
		, JKUStrConst.CD00474_TAKNI_CHOSA_RSV_ZM
		, JKUStrConst.CD00474_KR_KAGI_KAIHAT_IRI_ZM
		, JKUStrConst.CD00474_GEMBA_SAGYO_FIN_ZM
	};

	/**
	 * コンストラクタです。
	 */
	public JEKU0051C010TPMA()
	{
		super();
	}
	
	/**
	 * 主処理
	 * @param inCBSMsg
	 * @param inContext
	 * @throws CAANException
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext) throws CAANException
	{
		//工事案件情報のリスト取得
		List<CAANMsg> kojiakMsgList = getKojiakList(inCBSMsg);
		
		if(null == kojiakMsgList || 0 == kojiakMsgList.size())
		{
			inCBSMsg.set(EKU0051C010CBSMsg.HJIN_SVC_KEI_NO_ERR, "EA");
			inCBSMsg.set(EKU0051C010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
			return;
		}
		
		// 最新基本工事フラグが1(最新)または工事案件ステータスが仕掛中の工事案件以外を除外する
		List<CAANMsg> dummyList = new ArrayList<CAANMsg>();
		String tmp_stat = "";
		
//ANK-2966-02-00 MOD START
//		for(int j = 0; j < kojiakMsgList.size(); j++)
//		{
//			tmp_stat = kojiakMsgList.get(j).getString(KU0011ETMsg.KOJIAK_STAT);
//			if(!(JKUStrConst.CD00474_NASHI.equals(tmp_stat) || JKUStrConst.CD00474_CHUSHI.equals(tmp_stat)))
//			{
//				dummyList.add(kojiakMsgList.get(j));
//			}
//		}
		String rcntKihonKojiFlg = "";
		for(int j = 0; j < kojiakMsgList.size(); j++)
		{
			tmp_stat = kojiakMsgList.get(j).getString(KU0011ETMsg.KOJIAK_STAT);
			rcntKihonKojiFlg = kojiakMsgList.get(j).getString(KU0011ETMsg.RCNT_KIHON_KOJI_FLG);
			if(JKUStrConst.CD00882_RCNT_KIHON_KOJI.equals(rcntKihonKojiFlg) || chkMatrix(SKKR_KOJIAK_STAT, tmp_stat))
			{
				dummyList.add(kojiakMsgList.get(j));
			}
		}
//ANK-2966-02-00 MOD END
		
		//除外後、リストが0件の場合、処理を終了する。
		if(0 == dummyList.size())
		{
			return;
		}
		else
		{
			kojiakMsgList = dummyList;
		}

		int len = kojiakMsgList.size();
		
		// 工事案件情報のデータ件数分処理を行う。
		for(int i = 0; i < len; i++)
		{
			// 排他モードタイムスタンプチェック
			if(!JPCModelCommon.succeededExclusiveLock(kojiakMsgList.get(i), inContext, JKUStrConst.SCHEMA_KU0011))
			{
				inCBSMsg.set(EKU0051C010CBSMsg.HJIN_SVC_KEI_NO_ERR, "EB");
				inCBSMsg.set(EKU0051C010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
				return;
			}
		}
		
		//機能コードの確認（機能コードが「1」以外の場合、処理を終了する。）
		if(!JPCModelConstant.FUNC_CD_1.equals(inCBSMsg.getString(EKU0051C010CBSMsg.FUNC_CODE)))
		{
			return;
		}

		//先行設計情報のリスト取得
		List<CAANMsg> senkoDsgnMsgList = new ArrayList<CAANMsg>();
		CAANMsg[] wk_msgList = null;
		for(int i = 0; i < len; i++)
		{
			// 先行設計情報(受付済)のリスト作成
			wk_msgList = getSenkoDsgnUkList(kojiakMsgList.get(i).getString(KU0011ETMsg.KOJIAK_NO));
			
			if(null != wk_msgList && 0 < wk_msgList.length)
			{
				for(CAANMsg msg : wk_msgList)
				{
					senkoDsgnMsgList.add(msg);
				}
				
			}
		}

		
		// 工事案件更新処理
		if(!updateKojiak(inCBSMsg, kojiakMsgList, inContext))
		{
			//エラーなど発生した場合、処理を終了する。
			return;
		}
		
		if(null != senkoDsgnMsgList && 0 < senkoDsgnMsgList.size())
		{
			// 先行設計更新処理
			if(!updateSenko(inCBSMsg, senkoDsgnMsgList, inContext))
			{
				//エラーなど発生した場合、処理を終了する。
				return;
			}
		}
		
		// アウトプット項目を設定する
		// 更新年月日時分秒(システム日付)
		inCBSMsg.set(EKU0051C010CBSMsg.UPD_DTM, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATEDATETIME));
		// 更新オペレータアカウント(共通部：オペレータＩＤ)
		inCBSMsg.set(EKU0051C010CBSMsg.UPD_OPEACNT, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATORID));
		// 無効フラグ
		inCBSMsg.set(EKU0051C010CBSMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);

	}
	
	/**
	 * 工事案件情報取得
	 * @param inCBSMsg
	 * @return CAANMsg[]
	 * @throws CAANException
	 */
	private List<CAANMsg> getKojiakList(CAANMsg inCBSMsg) throws CAANException
	{
		// 返却リスト
		List<CAANMsg> rsltMsgList = new ArrayList<CAANMsg>();
		
		// 法人サービス契約＿工事案件情報の取得
		JKUejbKU0071SecProc secProc0071 = new JKUejbKU0071SecProc();
		CAANMsg msgKU0071 = new CAANMsg(KU0071ETMsg.class.getName());
		CAANMsg[] hjinSvcKeikojiak = null;
		
		msgKU0071.set(KU0071ETMsg.HJIN_EO_YKAE_SVKEI_NO, inCBSMsg.getString(EKU0051C010CBSMsg.HJIN_SVC_KEI_NO));
		msgKU0071.set(KU0071ETMsg.HOJINSVKEI_KJAK_TENDYMD, JKUStrConst.MAX_YMD);
		msgKU0071.set(KU0071ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
		
		hjinSvcKeikojiak = secProc0071.findByCondition(msgKU0071);
		
		if(null == hjinSvcKeikojiak || hjinSvcKeikojiak.length == 0)
		{
			return null;
		}
		// 取得した一覧から工事案件番号の重複を取り除く
		List<String> kojiakNoList = new ArrayList<String>();
		for(CAANMsg ku0071Msg: hjinSvcKeikojiak)
		{
			if (!kojiakNoList.contains(ku0071Msg.getString(KU0071ETMsg.KOJIAK_NO)))
			{
				kojiakNoList.add(ku0071Msg.getString(KU0071ETMsg.KOJIAK_NO));
			}
		}
		
		// 工事案件番号から工事案件レコードを取得する
		JKUejbKU0011SecProc secProc0011 = new JKUejbKU0011SecProc();
		CAANMsg kojiakInfo = null;
		CAANMsg inKU0011ETMsg = new CAANMsg(KU0011ETMsg.class.getName());
		for(String kojiakNo: kojiakNoList)
		{
			inKU0011ETMsg.set(KU0011ETMsg.KOJIAK_NO, kojiakNo);
			kojiakInfo = secProc0011.findByPrimaryKey(inKU0011ETMsg, true);

			if(null != kojiakInfo)
			{
				rsltMsgList.add(kojiakInfo);
			}
		}
		
		// リストを返却する
		return rsltMsgList;
	}
	
	/**
	 * 受付済である先行設計情報取得
	 * @param kojiakNo
	 * @return CAANMsg[]
	 * @throws CAANException
	 */
	private CAANMsg[] getSenkoDsgnUkList(String kojiakNo) throws CAANException
	{
		
		// 先行設計情報の取得
		JKUejbKU0101SecProc secProc0101 = new JKUejbKU0101SecProc();
		CAANMsg msgKU0101 = new CAANMsg(KU0101ETMsg.class.getName());
		CAANMsg[] senkoDsgnMsg = null;
		
		msgKU0101.set(KU0101ETMsg.KOJIAK_NO , kojiakNo);
		msgKU0101.set(KU0101ETMsg.SNKSKI_STAT , JKUStrConst.SNKSKI_STAT_UK_ZM);
		msgKU0101.set(KU0101ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
		
		senkoDsgnMsg = secProc0101.findByCondition(msgKU0101);
		
		if(null == senkoDsgnMsg || senkoDsgnMsg.length == 0)
		{
			return null;
		}
		
		return senkoDsgnMsg;

	}

	
	/**
	 * 工事案件更新処理：工事案件
	 * @param inCBSMsg サービスインターフェイス入力電文
	 * @param updinf
	 * @param inContext
	 * @return boolean
	 * @throws CAANException
	 */
	private boolean updateKojiak(CAANMsg inCBSMsg, List<CAANMsg> updinf, AgentDispatchContext inContext) throws CAANException
	{
		JKUejbKU0011SecProc secProc0011 = new JKUejbKU0011SecProc();
		CAANMsg msgKU0011 = null;
		boolean updFlg = false;
		
		msgKU0011 = new CAANMsg(KU0011ETMsg.class.getName());
		
		// 更新用メッセージの作成
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_AD_CD, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_AD_CD));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_PCD, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_PCD));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_STATE_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_STATE_NM));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_CITY_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_CITY_NM));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_OAZTSU_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_OAZTSU_NM));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_AZCHO_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_AZCHO_NM));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_AD_BNCHIGO, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_AD_BNCHIGO));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_ADRTTM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_ADRTTM));
		msgKU0011.set(KU0011ETMsg.TENTAKU_SAKI_ADRRM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_ADRRM));
		msgKU0011.set(KU0011ETMsg.CUST_NM, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_NM));
		msgKU0011.set(KU0011ETMsg.CUST_KANA, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_KANA));
		msgKU0011.set(KU0011ETMsg.CUST_HOME_TELNO, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_HOME_TELNO));
		msgKU0011.set(KU0011ETMsg.CUST_KTAI_TELNO, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_KTAI_TELNO));
		msgKU0011.set(KU0011ETMsg.CUST_RRKS_TELNO, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_RRKS_TELNO));
		msgKU0011.set(KU0011ETMsg.RRKS_OFFC_NM, inCBSMsg.getString(EKU0051C010CBSMsg.RRKS_OFFC_NM));
		msgKU0011.set(KU0011ETMsg.KEPCO_CUSTINFO_JUJU_DOI_UM, inCBSMsg.getString(EKU0051C010CBSMsg.KEPCO_CUSTINFO_JUJU_DOI_UM));
		msgKU0011.set(KU0011ETMsg.AD_FORM_CD, inCBSMsg.getString(EKU0051C010CBSMsg.AD_FORM_CD));
		msgKU0011.set(KU0011ETMsg.NYUKYO_FLR_CNT_CD, inCBSMsg.getString(EKU0051C010CBSMsg.NYUKYO_FLR_CNT_CD));
		msgKU0011.set(KU0011ETMsg.KCKU_FLR_CNT_CD, inCBSMsg.getString(EKU0051C010CBSMsg.KCKU_FLR_CNT_CD));
		msgKU0011.set(KU0011ETMsg.OPSVKEI_HKTGI_FLG, inCBSMsg.getString(EKU0051C010CBSMsg.OPSVKEI_HKTGI_FLG));
		msgKU0011.set(KU0011ETMsg.KOJIAK_UK_USER_ID, inCBSMsg.getString(EKU0051C010CBSMsg.KOJIAK_UK_USER_ID));
		msgKU0011.set(KU0011ETMsg.UPD_DTM, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATEDATETIME)); 
		msgKU0011.set(KU0011ETMsg.UPD_OPEACNT, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATORID));

		
		// 20180911 OM-2018-0000445対応 星野 ADD START
		JKUejbKU0051SecProc secProc0051 = new JKUejbKU0051SecProc();
		CAANMsg msgKU0051 = new CAANMsg(KU0051ETMsg.class.getName());
		// 更新用メッセージの作成（eo光オフィス）
		if(!inCBSMsg.isNull(EKU0051C010CBSMsg.TK_NO)){
			msgKU0051.set(KU0051ETMsg.TKNO, inCBSMsg.getString(EKU0051C010CBSMsg.TK_NO));
		}
		msgKU0051.set(KU0051ETMsg.UPD_DTM, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATEDATETIME)); 
		msgKU0051.set(KU0051ETMsg.UPD_OPEACNT, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATORID));
		// 20180911 OM-2018-0000445対応 星野 ADD END

		String kojiakStat = null;
		
// ANK-2966-02-00 ADD START
		String kojiakSbtCd = null;
// ANK-2966-02-00 ADD END
		
		for(CAANMsg kojiakMsg : updinf)
		{
			updFlg = false;
			kojiakStat = kojiakMsg.getString(KU0011ETMsg.KOJIAK_STAT);

			// 20180911 OM-2018-0000445対応 星野 ADD START
			boolean updFlgOffice = false;

			CAANMsg whereKU0051 = new CAANMsg(KU0051ETMsg.class.getName());
			whereKU0051.set(KU0051ETMsg.KOJIAK_NO, kojiakMsg.getString(KU0011ETMsg.KOJIAK_NO));
			CAANMsg kojiakEoOfficeMsg = secProc0051.findByPrimaryKey(whereKU0051, true);
			// 20180911 OM-2018-0000445対応 星野 ADD END
			
			// 仕掛り中、更新項目
			if(chkMatrix(SKKR_KOJIAK_STAT, kojiakStat))
			{
				msgKU0011.set(KU0011ETMsg.SHUNKO_RSV_YMD, inCBSMsg.getString(EKU0051C010CBSMsg.SHUNKO_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.NYUKYO_RSV_YMD, inCBSMsg.getString(EKU0051C010CBSMsg.NYUKYO_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.HIKIWATASHI_RSV_YMD, inCBSMsg.getString(EKU0051C010CBSMsg.HIKIWATASHI_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.EPOWER_SODEN_RSV_YMD, inCBSMsg.getString(EKU0051C010CBSMsg.EPOWER_SODEN_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.TEL_RRK_KIBO_TIME_CD, inCBSMsg.getString(EKU0051C010CBSMsg.TEL_RRK_KIBO_TIME_CD));
				msgKU0011.set(KU0011ETMsg.TAKCHO_KIBO_APO_KIGEN_YMD, inCBSMsg.getString(EKU0051C010CBSMsg.TAKCHO_KIBO_APO_KIGEN_YMD));
				msgKU0011.set(KU0011ETMsg.TNKJ_KIBO_APO_KIGEN_YMD, inCBSMsg.getString(EKU0051C010CBSMsg.TNKJ_KIBO_APO_KIGEN_YMD));
				msgKU0011.set(KU0011ETMsg.KOJI_APO_RRKS_SHITEI_CD, inCBSMsg.getString(EKU0051C010CBSMsg.KOJI_APO_RRKS_SHITEI_CD));
				msgKU0011.set(KU0011ETMsg.RRK_WAY_CD, inCBSMsg.getString(EKU0051C010CBSMsg.RRK_WAY_CD));
				msgKU0011.set(KU0011ETMsg.RRK_WAY_HOKI, inCBSMsg.getString(EKU0051C010CBSMsg.RRK_WAY_HOKI));
				
// ANK-2966-02-00 ADD START
				// 工事案件備考は、工事案件種別が「撤去（解約）」または「移設」の場合のみ反映する
				kojiakSbtCd =  kojiakMsg.getString(KU0011ETMsg.KOJIAK_SBT_CD);
				if(JKUStrConst.CD00577_TEKKYO_DSL.equals(kojiakSbtCd) || JKUStrConst.CD00577_ISETSU.equals(kojiakSbtCd))
				{
					msgKU0011.set(KU0011ETMsg.KOJIAK_RRK_JIKO, inCBSMsg.getString(EKU0051C010CBSMsg.KOJIAK_BIKO));
				}
				else
				{
					msgKU0011.set(KU0011ETMsg.KOJIAK_RRK_JIKO, kojiakMsg.getString(KU0011ETMsg.KOJIAK_RRK_JIKO));
				}
// ANK-2966-02-00 ADD END
			}
			else
			{
				// 仕掛りでないデータの場合は更新対象の値を引き継ぐ
				msgKU0011.set(KU0011ETMsg.SHUNKO_RSV_YMD, kojiakMsg.getString(KU0011ETMsg.SHUNKO_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.NYUKYO_RSV_YMD, kojiakMsg.getString(KU0011ETMsg.NYUKYO_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.HIKIWATASHI_RSV_YMD, kojiakMsg.getString(KU0011ETMsg.HIKIWATASHI_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.EPOWER_SODEN_RSV_YMD, kojiakMsg.getString(KU0011ETMsg.EPOWER_SODEN_RSV_YMD));
				msgKU0011.set(KU0011ETMsg.TEL_RRK_KIBO_TIME_CD, kojiakMsg.getString(KU0011ETMsg.TEL_RRK_KIBO_TIME_CD));
				msgKU0011.set(KU0011ETMsg.TAKCHO_KIBO_APO_KIGEN_YMD, kojiakMsg.getString(KU0011ETMsg.TAKCHO_KIBO_APO_KIGEN_YMD));
				msgKU0011.set(KU0011ETMsg.TNKJ_KIBO_APO_KIGEN_YMD, kojiakMsg.getString(KU0011ETMsg.TNKJ_KIBO_APO_KIGEN_YMD));
				msgKU0011.set(KU0011ETMsg.KOJI_APO_RRKS_SHITEI_CD, kojiakMsg.getString(KU0011ETMsg.KOJI_APO_RRKS_SHITEI_CD));
				msgKU0011.set(KU0011ETMsg.RRK_WAY_CD, kojiakMsg.getString(KU0011ETMsg.RRK_WAY_CD));
				msgKU0011.set(KU0011ETMsg.RRK_WAY_HOKI, kojiakMsg.getString(KU0011ETMsg.RRK_WAY_HOKI));
				
// ANK-2966-02-00 ADD START
				msgKU0011.set(KU0011ETMsg.KOJIAK_RRK_JIKO, kojiakMsg.getString(KU0011ETMsg.KOJIAK_RRK_JIKO));
// ANK-2966-02-00 ADD END
			}
			
			// 更新処理実行判定
			for(String chkKomoku : UPD_REQCHK_KOJIAK)
			{
				if(chkChange(kojiakMsg.getString(chkKomoku), msgKU0011.getString(chkKomoku)))
				{
					updFlg = true;
					break;
				}
			}
			
			// 20180911 OM-2018-0000445対応 星野 ADD START
			if(kojiakEoOfficeMsg != null){
				// 更新処理実行判定(eo光オフィス)
				for(String chkKomoku : UPD_REQCHK_KOJIAK_OFFICE)
				{
					if(chkChange(kojiakEoOfficeMsg.getString(chkKomoku), msgKU0051.getString(chkKomoku)))
					{
						updFlgOffice = true;
						break;
					}
				}
			}
			// 20180911 OM-2018-0000445対応 星野 ADD END

			
			// FCDS変更連携要否変更判定
			boolean fcdsFlg = false;
			for (String chkKomoku : FCDS_CHGE_RNKI_ARRAY)
			{
				if(chkChange(kojiakMsg.getString(chkKomoku), msgKU0011.getString(chkKomoku)))
				{
					fcdsFlg = true;
					break;
				}
			}
			
			// 20180911 OM-2018-0000445対応 星野 ADD START
			if(kojiakEoOfficeMsg != null){
				// FCDS変更連携要否変更判定(eo光オフィス)
				for (String chkKomoku : FCDS_CHGE_RNKI_ARRAY_OFFICE)
				{
					if(chkChange(kojiakEoOfficeMsg.getString(chkKomoku), msgKU0051.getString(chkKomoku)))
					{
						fcdsFlg = true;
						break;
					}
				}
			}
			// 20180911 OM-2018-0000445対応 星野 ADD END
			
			// OPMS変更連携要否変更判定
			boolean opmsFlg = false;
			for (String chkKomoku : OPMS_CHGE_RNKI_ARRAY)
			{
				if(chkChange(kojiakMsg.getString(chkKomoku), msgKU0011.getString(chkKomoku)))
				{
					opmsFlg = true;
					break;
				}
			}
			
			// 20180911 OM-2018-0000445対応 星野 ADD START
			if(kojiakEoOfficeMsg != null){
				// OPMS変更連携要否変更判定(eo光オフィス)
				for (String chkKomoku : OPMS_CHGE_RNKI_ARRAY_OFFICE)
				{
					if(chkChange(kojiakEoOfficeMsg.getString(chkKomoku), msgKU0051.getString(chkKomoku)))
					{
						opmsFlg = true;
						break;
					}
				}
			}
			// 20180911 OM-2018-0000445対応 星野 ADD END
			
			if(updFlg)
			{
				// キー設定
				msgKU0011.set(KU0011ETMsg.KOJIAK_NO, kojiakMsg.getString(KU0011ETMsg.KOJIAK_NO));
				
				// 連携対象、更新項目
				if(chkMatrix(RNKI_PSG_KOJIAK_STAT, kojiakStat))
				{
					if (true == opmsFlg)
					{
						msgKU0011.set(KU0011ETMsg.OPMS_CHGE_RNKI_YH, JKUStrConst.KH_PSG);
					}
					if (true == fcdsFlg)
					{
						msgKU0011.set(KU0011ETMsg.FCDS_CHGE_RNKI_YH, JKUModelCommon.getChgRnkiYh(kojiakMsg, JKUStrConst.RNKI_SYSTEM_FCDS));
					}
					msgKU0011.set(KU0011ETMsg.GENESIS_CHGE_RNKI_YH, JKUModelCommon.getChgRnkiYh(kojiakMsg, JKUStrConst.RNKI_SYSTEM_GENESIS));

				}
				else
				{
					// 連携対象でないデータの場合は更新対象の値を引き継ぐ
					msgKU0011.set(KU0011ETMsg.OPMS_CHGE_RNKI_YH, kojiakMsg.getString(KU0011ETMsg.OPMS_CHGE_RNKI_YH));
					msgKU0011.set(KU0011ETMsg.FCDS_CHGE_RNKI_YH, kojiakMsg.getString(KU0011ETMsg.FCDS_CHGE_RNKI_YH));
					msgKU0011.set(KU0011ETMsg.GENESIS_CHGE_RNKI_YH, kojiakMsg.getString(KU0011ETMsg.GENESIS_CHGE_RNKI_YH));
				}
				secProc0011.update(msgKU0011);
			}
			
			// 20180911 OM-2018-0000445対応 星野 ADD START
			if(updFlgOffice){
				// キー設定
				msgKU0051.set(KU0051ETMsg.KOJIAK_NO, kojiakMsg.getString(KU0011ETMsg.KOJIAK_NO));
				// 工事案件<eo光オフィス>更新
				secProc0051.update(msgKU0051);
				
				// 連携対象、更新項目
				if(chkMatrix(RNKI_PSG_KOJIAK_STAT, kojiakStat))
				{
					CAANMsg msgKU0011ForFlgUpd = new CAANMsg(KU0011ETMsg.class.getName());
					// キー設定
					msgKU0011ForFlgUpd.set(KU0011ETMsg.KOJIAK_NO, kojiakMsg.getString(KU0011ETMsg.KOJIAK_NO));
					msgKU0011ForFlgUpd.set(KU0011ETMsg.UPD_DTM, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATEDATETIME)); 
					msgKU0011ForFlgUpd.set(KU0011ETMsg.UPD_OPEACNT, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATORID));
					if (true == opmsFlg)
					{
						msgKU0011ForFlgUpd.set(KU0011ETMsg.OPMS_CHGE_RNKI_YH, JKUStrConst.KH_PSG);
					}
					if (true == fcdsFlg)
					{
						msgKU0011ForFlgUpd.set(KU0011ETMsg.FCDS_CHGE_RNKI_YH, JKUModelCommon.getChgRnkiYh(kojiakMsg, JKUStrConst.RNKI_SYSTEM_FCDS));
					}
					secProc0011.update(msgKU0011ForFlgUpd);
				}
			}
			// 20180911 OM-2018-0000445対応 星野 ADD END

		}
		
		// 正常終了
		return true;
	}
	
	/**
	 * 工事案件更新処理：先行設計
	 * @param inCBSMsg サービスインターフェイス入力電文
	 * @param updinf
	 * @param inContext
	 * @return boolean
	 * @throws CAANException
	 */
	private boolean updateSenko(CAANMsg inCBSMsg, List<CAANMsg> updinf, AgentDispatchContext inContext) throws CAANException
	{
		JKUejbKU0101SecProc secProc0101 = new JKUejbKU0101SecProc();
		CAANMsg msgKU0101 = new CAANMsg(KU0101ETMsg.class.getName());
		boolean updFlg = false;
		
		// 更新用メッセージの作成
		msgKU0101.set(KU0101ETMsg.SETPLACE_AD_CD, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_AD_CD));
		msgKU0101.set(KU0101ETMsg.SETPLACE_PCD, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_PCD));
		msgKU0101.set(KU0101ETMsg.SETPLACE_STATE_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_STATE_NM));
		msgKU0101.set(KU0101ETMsg.SETPLACE_CITY_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_CITY_NM));
		msgKU0101.set(KU0101ETMsg.SETPLACE_OAZTSU_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_OAZTSU_NM));
		msgKU0101.set(KU0101ETMsg.SETPLACE_AZCHO_NM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_AZCHO_NM));
		msgKU0101.set(KU0101ETMsg.SETPLACE_AD_BNCHIGO, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_AD_BNCHIGO));
		msgKU0101.set(KU0101ETMsg.SETPLACE_ADRTTM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_ADRTTM));
		msgKU0101.set(KU0101ETMsg.SETPLACE_ADRRM, inCBSMsg.getString(EKU0051C010CBSMsg.TENTAKU_SAKI_ADRRM));
		msgKU0101.set(KU0101ETMsg.CUST_NM, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_NM));
		msgKU0101.set(KU0101ETMsg.CUST_KANA, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_KANA));
		msgKU0101.set(KU0101ETMsg.CUST_RRKS_TELNO, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_RRKS_TELNO));
		msgKU0101.set(KU0101ETMsg.CUST_RRKS_KTAI_TELNO, inCBSMsg.getString(EKU0051C010CBSMsg.CUST_KTAI_TELNO));
		msgKU0101.set(KU0101ETMsg.KCKU_FLR_CNT_CD, inCBSMsg.getString(EKU0051C010CBSMsg.KCKU_FLR_CNT_CD));
		msgKU0101.set(KU0011ETMsg.UPD_DTM, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATEDATETIME)); 
		msgKU0101.set(KU0011ETMsg.UPD_OPEACNT, inCBSMsg.getString(EKU0051C010CBSMsg.OPERATORID));
		msgKU0101.set(KU0101ETMsg.TKNO, inCBSMsg.getString(EKU0051C010CBSMsg.TK_NO));
		
		try
		{
			for(CAANMsg senkoInfo : updinf)
			{
				updFlg = false;

				// 更新処理実行判定
				for(String chkKomoku : UPD_REQCHK_SENKODSGN)
				{
					if(chkChange(senkoInfo.getString(chkKomoku), msgKU0101.getString(chkKomoku)))
					{
						updFlg = true;
						break;
					}
				}
				
				if(updFlg)
				{
					// キー設定
					msgKU0101.set(KU0101ETMsg.SNKSKI_NO, senkoInfo.getString(KU0101ETMsg.SNKSKI_NO));
					
					secProc0101.update(msgKU0101);
				}
				
			}
		}
		catch (CAANFinderException cfe)
		{
			inCBSMsg.set(EKU0051C010CBSMsg.STATUS, StatusCodes.UPDATE_DB_ERR);
			throw cfe;
		}
		
		// 正常終了
		return true;
	}
	
	/**
	 * String[]への存在チェック
	 * @param matrix
	 * @param str
	 * @return boolean
	 */
	private static boolean chkMatrix(String[] matrix, String str)
	{
		for(int i = 0; i < matrix.length; i++)
		{
			if(matrix[i].equals(str))
			{
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 内容変更チェック
	 * @param str1
	 * @param str2
	 * @return boolean True(変更あり)/False(変更なし)
	 */
	private static boolean chkChange(String str1, String str2)
	{
		if(str1 == null)
		{
			return str2 != null;
		}
		return !str1.equals(str2);
	}
}
