/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKUKojiNgCst
*	ソースファイル名	：JBSbatKUKojiNgCst.java
*	作成者				：富士通　
*	作成日				：2011年10月20日
*＜機能概要＞
*　工事ＮＧ契約抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/20   富士通		新規作成
*	v10.00.00	2014/07/07  FJ)佐野		修正【ANK-1918-00-00】
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKUBatCommon;
import eo.business.util.file.JBSbatKKIFI023;
import eo.business.util.file.JBSbatKUIFE035;
import eo.business.util.file.JBSbatKUIFM003;
import eo.business.util.file.JBSbatKUIFM004;
import eo.business.util.table.JBSbatKU_T_HOJINSVKEI_KJAK;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_NET;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_NTMANS;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_TV;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_TVKSN;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.business.util.table.JBSbatKU_T_SVKEI_KOJIAK;
import eo.common.constant.JKUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKUKojiNgCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(工事案件ＰＫ検索)*/
	private static final String D_TBL_NAME_KU_T_KOJIAK = "KU_T_KOJIAK";

	/** テーブル(法人サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_HOJINSVKEI_KJAK = "KU_T_HOJINSVKEI_KJAK";

	/** テーブル(サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_SVKEI_KOJIAK = "KU_T_SVKEI_KOJIAK";

	/** テーブル(工事案件＜ｅｏ光ネット＞)*/
	private static final String D_TBL_NAME_KU_T_KJAK_EOH_NET = "KU_T_KJAK_EOH_NET";

	/** テーブル(工事案件＜ｅｏ光ネットマンション＞)*/
	private static final String D_TBL_NAME_KU_T_KJAK_EOH_NTMANS = "KU_T_KJAK_EOH_NTMANS";

	/** テーブル(工事案件＜ｅｏ光テレビ＞)*/
	private static final String D_TBL_NAME_KU_T_KJAK_EOH_TV = "KU_T_KJAK_EOH_TV";

	/** テーブル(工事案件＜ｅｏ光テレビ回線＞)*/
	private static final String D_TBL_NAME_KU_T_KJAK_EOH_TVKSN = "KU_T_KJAK_EOH_TVKSN";

	/** SQL定義キー(KU_SELECT_002)*/
	private static final String KU_T_HOJINSVKEI_KJAK_KU_SELECT_002 = "KU_SELECT_002";

	/** SQL定義キー(KU_SELECT_014)*/
	private static final String KU_T_SVKEI_KOJIAK_KU_SELECT_014 = "KU_SELECT_014";

	/** テーブルアクセスクラス(工事案件ＰＫ検索)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;

	/** テーブルアクセスクラス(法人サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_HOJINSVKEI_KJAK = null;

	/** テーブルアクセスクラス(サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_SVKEI_KOJIAK = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光ネット＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_NET = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光ネットマンション＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_NTMANS = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光テレビ＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_TV = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光テレビ回線＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_TVKSN = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/** ▼▼▼▼▼▼業務チームで作成した宣言です 開始▼▼▼▼▼▼ */
	
	/** 通番項目に設定される定数 */
	private static final String SEQ_ZERO = "000000000000";
	
	/** 金額項目に設定される定数 */
	private static final String PRICE_ZERO = "0";
	
	
	/** 工事ＮＧ情報抽出経過日数 */
	private String ku_KOJI_NG_CST_DAYS = null;
	/** 工事関連情報の項目名Map */
	private HashMap<Object, String> indexKjKrInfoMap = new HashMap<Object, String>();
	/** 工事関連情報の項目名Map(法人用) */
	private HashMap<Object, String> indexKjKrInfoMapHj = new HashMap<Object, String>();
	
	/** ブレークフラグ */
	private boolean isBreak = false;

	/** ▲▲▲▲▲▲業務チームで作成した宣言です 終了▲▲▲▲▲▲ */

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KU_T_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJIAK);
		db_KU_T_HOJINSVKEI_KJAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_HOJINSVKEI_KJAK);
		db_KU_T_SVKEI_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_SVKEI_KOJIAK);
		db_KU_T_KJAK_EOH_NET = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_NET);
		db_KU_T_KJAK_EOH_NTMANS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_NTMANS);
		db_KU_T_KJAK_EOH_TV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_TV);
		db_KU_T_KJAK_EOH_TVKSN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_TVKSN);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// 業務パラメータ　工事ＮＧ情報抽出経過日数　取得
		ku_KOJI_NG_CST_DAYS = new JKUBatCommon().getWorkParamKnri(commonItem, JKUStrConst.KU_KOJI_NG_CST_DAYS);

		if (null == ku_KOJI_NG_CST_DAYS)
		{
			// 取得できなかった場合は、ログ出力し、処理終了
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKUB0070KE, new String[] {
					JKUStrConst.SCHEMANM_ZM0321, "業務パラメータID",
					JKUStrConst.KU_KOJI_NG_CST_DAYS });
		}

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// カンマ編集された工事関連情報を格納する変数
		StringBuilder kjKrInfoString = null;
		
		// 工事案件番号
		String kojiakNo = inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
		
		// 工事案件ＰＫ検索
		JBSbatCommonDBInterface ku0011Map = this.findKU_T_KOJIAK(kojiakNo);
		
		// 工事案件を検索
		if(null == ku0011Map)
		{
			// ログ出力し、次レコードへ
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKUB0650KW, new String[]{
					JKUStrConst.SCHEMANM_KU0011,
					"工事案件番号",
					kojiakNo});
			
			throw new JBSbatBusinessError();
		}
		
		// 一定期間超過チェック
		if(!checkDateDiff(ku0011Map))
		{
			// 一定期間超過していないレコードは出力対象としない
			return null;
		}
		
		// 料金グループコード
		String prcGrpCd = ku0011Map.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD);
		
		// 工事案件ステータス
		String kojiakStat = ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT);
		
		// マンション工事案件状態コード
		String mansKojiakStatCd = ku0011Map.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD);

		// サービス契約_工事案件検索
		JBSbatCommonDBInterface ku0081Map = null;
		// 法人サービス契約_工事案件検索
		JBSbatCommonDBInterface ku0071Map = null;
		
		if (JKUBatCommon.isNotNull(prcGrpCd))
		{
			// サービス契約＿工事案件
			ku0081Map = this.findKU_T_SVKEI_KOJIAK(kojiakNo);

			// サービス契約＿工事案件が存在しない場合
			if ((null == ku0081Map))
			{
				// 次レコードへ
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKUB0650KW, new String[]{
						JKUStrConst.SCHEMANM_KU0081,
						"工事案件番号",
						kojiakNo});
				
				throw new JBSbatBusinessError();
			}
		}
		else
		{
			// 法人サービス契約＿工事案件
			ku0071Map = this.findKU_T_HOJINSVKEI_KJAK(kojiakNo);
			
			// 法人サービス契約＿工事案件が存在しない場合
			if (null == ku0071Map)
			{
				// 次レコードへ
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKUB0650KW, new String[]{
						JKUStrConst.SCHEMANM_KU0071,
						"工事案件番号",
						kojiakNo});
				
				throw new JBSbatBusinessError();
			}
		}

		// 出力ファイルを編集
		while (ku0081Map != null) 
		{
			isBreak = false;
			
			// 入出力インターフェースオブジェクトを初期化
			JBSbatServiceInterfaceMap outMap1 = new JBSbatServiceInterfaceMap();

			// 変数の初期化
			kjKrInfoString = new StringBuilder();

			// 出力電文設定
			outMap1 = this.setOutMap(ku0011Map, ku0081Map);

			if(null != outMap1)
			{
				// 工事関連情報の項目名Mapを取得
				indexKjKrInfoMap = setIndexKjKrInfoMap();
	
				// 括り文字付与
				outMap1.setMap(JKUBatCommon.addDblQuote(outMap1.getMap()));
	
				// KjKrInfoMapに格納された各項目のカンマ編集を行う
				kjKrInfoString = JKUBatCommon.editComma(outMap1, indexKjKrInfoMap);
	
				// 入出力インターフェースに工事関連情報を設定する
				outMap1.setString(JBSbatKKIFI023.KOJI_KNRN_INFO, kjKrInfoString);
	
				// 出力フラグを設定
				outMap1.setOutFlg(true);
	
				// 出力共通電文に入出力インターフェースを設定する。
				outputBean.addOutMapList(outMap1);
			}

			if (isBreak) 
			{
				// while文を抜ける
				break;
			}

			// 検索結果を１件取得する
			ku0081Map = db_KU_T_SVKEI_KOJIAK.selectNext();
		}

		// 法人サービス契約＿工事案件が存在する場合
		if (null != ku0071Map) 
		{
			// 入出力インターフェースオブジェクトを初期化
			JBSbatServiceInterfaceMap outMap2 = new JBSbatServiceInterfaceMap();

			// 変数の初期化
			kjKrInfoString = new StringBuilder();

			// 出力電文設定
			outMap2 = this.setOutMapHojin(ku0011Map, ku0071Map);

			// 工事関連情報の項目名Mapを取得
			indexKjKrInfoMapHj = setindexKjKrInfoMapHj();

			// 括り文字付与
			outMap2.setMap(JKUBatCommon.addDblQuote(outMap2.getMap()));

			// KjKrInfoMapに格納された各項目のカンマ編集を行う
			kjKrInfoString = JKUBatCommon.editComma(outMap2, indexKjKrInfoMapHj);

			// 入出力インターフェースに工事関連情報を設定する
			outMap2.setString(JBSbatKUIFE035.HOJIN_KOJI_KNRN_INFO, kjKrInfoString);

			// 出力フラグを設定
			outMap2.setOutFlg(true);

			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList_2(outMap2);
		}
		
		// 工事案件を更新
		updateKojiak(kojiakNo,kojiakStat,mansKojiakStatCd);

		// 出力共通電文を返却する
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KU_T_KOJIAK.close();
		db_KU_T_HOJINSVKEI_KJAK.close();
		db_KU_T_SVKEI_KOJIAK.close();
		db_KU_T_KJAK_EOH_NET.close();
		db_KU_T_KJAK_EOH_NTMANS.close();
		db_KU_T_KJAK_EOH_TV.close();
		db_KU_T_KJAK_EOH_TVKSN.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KOJIAK_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KOJIAK.selectByPrimaryKeys(whereMap);
	}

	/**
	 * SQLKEY(KU_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	工事案件番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_HOJINSVKEI_KJAK_KU_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_HOJINSVKEI_KJAK.selectBySqlDefine(paramList, KU_T_HOJINSVKEI_KJAK_KU_SELECT_002);
	}

	/**
	 * SQLKEY(KU_SELECT_014)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	工事案件番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_SVKEI_KOJIAK_KU_SELECT_014(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_SVKEI_KOJIAK.selectBySqlDefine(paramList, KU_T_SVKEI_KOJIAK_KU_SELECT_014);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KJAK_EOH_NET_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KJAK_EOH_NET.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KJAK_EOH_NTMANS_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KJAK_EOH_NTMANS.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KJAK_EOH_TV_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KJAK_EOH_TV.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KJAK_EOH_TVKSN_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KJAK_EOH_TVKSN.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	工事案件ステータス				KOJIAK_STAT
	 *		 	マンション工事案件状態コード	MANS_KOJIAK_STAT_CD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_KOJIAK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("KOJIAK_STAT", setParam[0]);
		setMap.setValue("MANS_KOJIAK_STAT_CD", setParam[1]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KU_T_KOJIAK.updateByPrimaryKeys(whereMap, setMap);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/** ▼▼▼▼▼▼業務チームで作成したメソッドです 開始▼▼▼▼▼▼ */

	/**
	 * 出力共通電文を設定します。
	 * @param ku0011Map 工事案件抽出データ
	 * @param ku0081Map	 サービス契約＿工事案件抽出データ
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMap(
			JBSbatCommonDBInterface ku0011Map, JBSbatCommonDBInterface ku0081Map) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();

		// 最終応答結果ＯＰＭＳ連携コード(3桁目)
		String kojiStep = ku0011Map.getString(JBSbatKU_T_KOJIAK.LAST_RSP_RSLT_OPMS_RNKI_CD).substring(2, 3);
		// 最終応答結果ＯＰＭＳ連携コード(4桁目)
		String newChgKbn = ku0011Map.getString(JBSbatKU_T_KOJIAK.LAST_RSP_RSLT_OPMS_RNKI_CD).substring(3, 4);
		
		// サービス契約番号
		outMap.set(JBSbatKUIFM003.SVC_KEI_NO, ku0081Map.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO));
		// サービス契約回線内訳番号
		outMap.set(JBSbatKUIFM003.SVC_KEI_KAISEN_UCWK_NO, ku0081Map.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO));
		// 連携年月日
		outMap.set(JBSbatKUIFM003.RENKEI_YMD, super.opeDate);
		// 通番
		outMap.set(JBSbatKUIFM003.SEQ, SEQ_ZERO);
		// 新規変更区分
		if (JKUStrConst.OPMS_NEWCHG_DIV_NEW.equals(newChgKbn))
		{
			outMap.set(JBSbatKUIFM003.NEW_CHG_DIV, JKUStrConst.KKIFI023_NEWCHG_DIV_NEW);
		}
		else if (JKUStrConst.OPMS_NEWCHG_DIV_CHG.equals(newChgKbn))
		{
			outMap.set(JBSbatKUIFM003.NEW_CHG_DIV, JKUStrConst.KKIFI023_NEWCHG_DIV_CHG);
		}
		// 工事案件種別コード
		outMap.set(JBSbatKUIFM003.KOJIAK_SBT_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD));
		// 工事案件番号
		outMap.set(JBSbatKUIFM003.KOJIAK_NO, ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		
		// ＯＰＭＳ連携コードが、"宅内調査結果","宅内調査結果変更"の場合
		if (JKUStrConst.KJSTEP_TAKNI_CHOSA_INFO.equals(kojiStep))
		{
			// レコード区分
			outMap.set(JBSbatKUIFM003.REC_KBN, JKUStrConst.KKIFI023_TAKNI_RSLT_CHOSA);
			// 宅内調査判定コード
			outMap.set(JBSbatKUIFM003.KMK_1, ku0011Map.getString(JBSbatKU_T_KOJIAK.TAKCHO_JUDGE_CD));
			// 宅内調査実施年月日
			outMap.set(JBSbatKUIFM003.KMK_2, ku0011Map.getString(JBSbatKU_T_KOJIAK.TAKCHO_JSSI_YMD));
			// 宅内調査受諾書回収コード
			outMap.set(JBSbatKUIFM003.KMK_3, ku0011Map.getString(JBSbatKU_T_KOJIAK.TAKCHO_SHODAKS_KAISHU_CD));
			// 宅内調査承諾書受領年月日
			outMap.set(JBSbatKUIFM003.KMK_4, ku0011Map.getString(JBSbatKU_T_KOJIAK.TAKCHO_SHODAKS_RCP_YMD));
		}
		// ＯＰＭＳ連携コードが、"設計結果","設計結果変更"の場合
		else if (JKUStrConst.KJSTEP_DSGN_RSLT_INFO.equals(kojiStep))
		{
			// レコード区分
			outMap.set(JBSbatKUIFM003.REC_KBN, JKUStrConst.KKIFI023_DSGN_RSLT);
			// 設計結果コード
			outMap.set(JBSbatKUIFM003.KMK_1, ku0011Map.getString(JBSbatKU_T_KOJIAK.SKKK_CD));
			// 設計結果見積設計報告日
			outMap.set(JBSbatKUIFM003.KMK_2, ku0011Map.getString(JBSbatKU_T_KOJIAK.SKKK_ETM_DSGN_RPT_YMD));
			// 設計結果工事内容確認書受領日
			outMap.set(JBSbatKUIFM003.KMK_3, ku0011Map.getString(JBSbatKU_T_KOJIAK.SKKK_KOJI_NYO_CFMS_RCP_YMD));

			isBreak = true;
		}
		// ＯＰＭＳ連携コードが、"工事完了情報","工事完了情報変更"の場合
		else if (JKUStrConst.KJSTEP_KOJI_FIN_INFO.equals(kojiStep))
		{
			// レコード区分
			outMap.set(JBSbatKUIFM003.REC_KBN, JKUStrConst.KKIFI023_KOJI_FIN);
			// 工事案件結果コード
			outMap.set(JBSbatKUIFM003.KMK_1, ku0011Map.getString(JBSbatKU_T_KOJIAK.OPMS_KOJIAK_RSLT_CD));
			// 工事案件実施年月日
			outMap.set(JBSbatKUIFM003.KMK_2, ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_JSSI_YMD));
			// PON識別コード
			outMap.set(JBSbatKUIFM003.KMK_3, ku0011Map.getString(JBSbatKU_T_KOJIAK.PON_SBT_CD));
			// 工事金額(標準)
			outMap.set(JBSbatKUIFM003.KMK_4, PRICE_ZERO);
			// 工事金額(標準外)
			outMap.set(JBSbatKUIFM003.KMK_5, PRICE_ZERO);
			// 工事金額(標準)電話宅内工事費用
			outMap.set(JBSbatKUIFM003.KMK_6, PRICE_ZERO);
			// 工事金額(標準外)電話宅内工事費用
			outMap.set(JBSbatKUIFM003.KMK_7, PRICE_ZERO);
			// 工事金額(標準)宅内工事(LAN)費用
			outMap.set(JBSbatKUIFM003.KMK_8, PRICE_ZERO);
			// 工事金額(標準外)宅内工事(LAN)費用
			outMap.set(JBSbatKUIFM003.KMK_9, PRICE_ZERO);
			// 工事範囲コード
			outMap.set(JBSbatKUIFM003.KMK_10, getKojiScopeCd(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO)));
		} 
		else 
		{
			isBreak = true;
			return null;
		}

		return outMap;
	}

	/**
	 * 出力共通電文を設定します。
	 * @param ku0011Map 工事案件抽出データ
	 * @param ku0071Map 法人サービス契約＿工事案件抽出データ
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMapHojin(JBSbatCommonDBInterface ku0011Map, JBSbatCommonDBInterface ku0071Map) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// 処理年月日時分秒
		outMap.set(JBSbatKUIFM004.TRN_DTM, JCCBatCommon.getSysDateTime());
		// レコード種別
		outMap.set(JBSbatKUIFM004.REC_SBT, JKUStrConst.KUIFE035_REC_SBT);
		// 法人用工事受付種別コード
		outMap.set(JBSbatKUIFM004.HOJIN_YO_KOJI_UK_SBT_CD, JKUStrConst.KUIFE035_KOJI_NG_INFO);
		// 申込書番号
		outMap.set(JBSbatKUIFM004.MSKMSHO_NO, ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		// 法人サービス契約番号
		outMap.set(JBSbatKUIFM004.HOJIN_SVC_KEI_NO, ku0071Map.getString(JBSbatKU_T_HOJINSVKEI_KJAK.HJIN_EO_YKAE_SVKEI_NO));
		// キャンセル登録年月日
		outMap.set(JBSbatKUIFM004.KMK_1, super.opeDate);
		
		return outMap;
	}

	/**
	 * 工事案件を検索します。
	 * @param kojiakNo 工事案件番号
	 * @return 工事案件テーブル１レコード（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface findKU_T_KOJIAK(String kojiakNo) throws Exception
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];
		
		whereParam[0] = kojiakNo;
		
		// 検索処理実行
		return this.executeKU_T_KOJIAK_PKSELECT(whereParam);

	}

	/**
	 * サービス契約＿工事案件を検索します。
	 * @param kojiakNo 工事案件番号
	 * @return サービス契約＿工事案件テーブル１レコード（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface findKU_T_SVKEI_KOJIAK(String kojiakNo) throws Exception 
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];

		whereParam[0] = kojiakNo;

		// 検索処理実行
		this.executeKU_T_SVKEI_KOJIAK_KU_SELECT_014(whereParam);

		return db_KU_T_SVKEI_KOJIAK.selectNext();
	}

	/**
	 * 法人サービス契約＿工事案件を検索します。
	 * @param kojiakNo 工事案件番号
	 * @return 法人サービス契約＿工事案件テーブル１レコード（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface findKU_T_HOJINSVKEI_KJAK(String kojiakNo) throws Exception 
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];

		whereParam[0] = kojiakNo;

		// 検索処理実行
		this.executeKU_T_HOJINSVKEI_KJAK_KU_SELECT_002(whereParam);

		return db_KU_T_HOJINSVKEI_KJAK.selectNext();
	}

	/**
	 * 経過日数チェックを行います。
	 * @param ku0011Map 工事案件情報
	 * @return true:一定期間経過している場合。false:一定期間経過していない場合。
	 * @throws Exception
	 */
	private boolean checkDateDiff(JBSbatCommonDBInterface ku0011Map) throws Exception
	{
		// 最終応答結果コード変更年月日
		String taishoYmd = ku0011Map.getString(JBSbatKU_T_KOJIAK.LAST_RSP_RSLT_CD_CHG_YMD);

		// 工事ＮＧ情報抽出経過日数チェック
		if(Integer.valueOf(ku_KOJI_NG_CST_DAYS) > JKUBatCommon.subtractDay(super.opeDate, taishoYmd))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * 工事案件サブスキーマから工事範囲コードを取得します
	 * @param kojiakNo 工事案件番号
	 * @return	工事範囲コード
	 * @throws Exception
	 */
	private String getKojiScopeCd(String kojiakNo) throws Exception
	{
		// ---工事案件サブスキーマの検索を実行する
		
		String[] whereParam = {kojiakNo};
		
		// 工事案件＜eo光ネット＞
		JBSbatCommonDBInterface ku0021DBI = executeKU_T_KJAK_EOH_NET_PKSELECT(whereParam);
		// 工事案件＜eo光テレビ＞
		JBSbatCommonDBInterface ku0031DBI = executeKU_T_KJAK_EOH_TV_PKSELECT(whereParam);
		// 工事案件＜eo光テレビ回線＞
		JBSbatCommonDBInterface ku0041DBI = executeKU_T_KJAK_EOH_TVKSN_PKSELECT(whereParam);
		// 工事案件＜eo光ネットマンション＞
		JBSbatCommonDBInterface ku0061DBI = executeKU_T_KJAK_EOH_NTMANS_PKSELECT(whereParam);
		
		// ---工事範囲コードを取得する
		
		String kojiScopeCd = null;
		int resultCount = 0;
		
		if (null != ku0021DBI)
		{
			++resultCount;
			kojiScopeCd = ku0021DBI.getString(JBSbatKU_T_KJAK_EOH_NET.KOJI_SCOPE_CD);
		}
		
		if (null != ku0031DBI)
		{
			++resultCount;
			kojiScopeCd = ku0031DBI.getString(JBSbatKU_T_KJAK_EOH_TV.KOJI_SCOPE_CD);
		}
		
		if (null != ku0041DBI)
		{
			++resultCount;
			kojiScopeCd = ku0041DBI.getString(JBSbatKU_T_KJAK_EOH_TVKSN.KOJI_SCOPE_CD);
		}
		
		if (null != ku0061DBI)
		{
			++resultCount;
			kojiScopeCd = ku0061DBI.getString(JBSbatKU_T_KJAK_EOH_NTMANS.KOJI_SCOPE_CD);
		}
		
		// ---サブスキーマに不整合がある場合のエラー処理
		
		// 存在しない場合
		if (0 == resultCount)
		{
			// ログ出力し、次レコードへ
			// %1%に該当の%2%が存在しません。（%3%）
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0650KW, new String[]{
															"工事案件サブスキーマ",
															"工事案件番号",
															kojiakNo});
			throw new JBSbatBusinessError();
		}
		
		// 複数存在する場合
		if (1 < resultCount)
		{
			// ログ出力し、次レコードへ
			// 一意のはずの%1%が%2%に複数あります。(%3%)
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0440KE, new String[]{
															"工事案件番号",
															"工事案件サブスキーマ",
															kojiakNo});
			throw new JBSbatBusinessError();
		}

		return kojiScopeCd;
	}
	
	/**
	 * 工事案件を更新
	 * @param kojiakNo
	 * @param kojiakStat
	 * @param mansKojiakStatCd
	 * @throws Exception
	 */
	private void updateKojiak(String kojiakNo,String kojiakStat,String mansKojiakStatCd) throws Exception
	{
		Object[] setParam = new Object[2];
		Object[] whereParam = new Object[1];
		
		// 工事案件番号
		whereParam[0] = kojiakNo;
		
		if (!JKUStrConst.CD00474_TOROKU_ZM.equals(kojiakStat))
		{
			// 工事案件ステータスが「登録済」でない場合
			// 工事案件ステータスを「中止」に設定する
			setParam[0] = JKUStrConst.CD00474_CHUSHI;
		}
		else
		{
			setParam[0] = kojiakStat;
		}
		
		if (JKUBatCommon.isNotNull(mansKojiakStatCd) &&
				!JKUStrConst.MANS_KOJIAK_STAT_CD_TOROKU_ZM.equals(mansKojiakStatCd))
		{
			// マンション工事案件状態コードが設定済みの場合 かつ
			// マンション工事案件状態コードが「登録済」でない場合
			// マンション工事案件状態コードを「中止」に設定する
			setParam[1] = JKUStrConst.MANS_KOJIAK_STAT_CD_CHUSHI;
		}
		else
		{
			setParam[1] = mansKojiakStatCd;
		}
		
		executeKU_T_KOJIAK_PKUPDATE(setParam, whereParam);
	}
	
	/**
	 * 工事関連情報の項目名Mapを設定します。
	 * @return 工事関連情報の項目名Map
	 */
	private HashMap<Object, String> setIndexKjKrInfoMap() 
	{
		this.indexKjKrInfoMap.put(0, JBSbatKUIFM003.REC_KBN);
		this.indexKjKrInfoMap.put(1, JBSbatKUIFM003.SVC_KEI_NO);
		this.indexKjKrInfoMap.put(2, JBSbatKUIFM003.SVC_KEI_KAISEN_UCWK_NO);
		this.indexKjKrInfoMap.put(3, JBSbatKUIFM003.RENKEI_YMD);
		this.indexKjKrInfoMap.put(4, JBSbatKUIFM003.SEQ);
		this.indexKjKrInfoMap.put(5, JBSbatKUIFM003.NEW_CHG_DIV);
		this.indexKjKrInfoMap.put(6, JBSbatKUIFM003.KOJIAK_SBT_CD);
		this.indexKjKrInfoMap.put(7, JBSbatKUIFM003.KOJIAK_NO);
		this.indexKjKrInfoMap.put(8, JBSbatKUIFM003.KMK_1);
		this.indexKjKrInfoMap.put(9, JBSbatKUIFM003.KMK_2);
		this.indexKjKrInfoMap.put(10, JBSbatKUIFM003.KMK_3);
		this.indexKjKrInfoMap.put(11, JBSbatKUIFM003.KMK_4);
		this.indexKjKrInfoMap.put(12, JBSbatKUIFM003.KMK_5);
		this.indexKjKrInfoMap.put(13, JBSbatKUIFM003.KMK_6);
		this.indexKjKrInfoMap.put(14, JBSbatKUIFM003.KMK_7);
		this.indexKjKrInfoMap.put(15, JBSbatKUIFM003.KMK_8);
		this.indexKjKrInfoMap.put(16, JBSbatKUIFM003.KMK_9);
		this.indexKjKrInfoMap.put(17, JBSbatKUIFM003.KMK_10);
		
		return indexKjKrInfoMap;
	}

	/**
	 * 工事関連情報（法人）の項目名Mapを設定します。
	 * @return 工事関連情報（法人）の項目名Map
	 */
	private HashMap<Object, String> setindexKjKrInfoMapHj() 
	{
		this.indexKjKrInfoMapHj.put(0, JBSbatKUIFM004.TRN_DTM);
		this.indexKjKrInfoMapHj.put(1, JBSbatKUIFM004.REC_SBT);
		this.indexKjKrInfoMapHj.put(2, JBSbatKUIFM004.HOJIN_YO_KOJI_UK_SBT_CD);
		this.indexKjKrInfoMapHj.put(3, JBSbatKUIFM004.MSKMSHO_NO);
		this.indexKjKrInfoMapHj.put(4, JBSbatKUIFM004.HOJIN_SVC_KEI_NO);
		this.indexKjKrInfoMapHj.put(5, JBSbatKUIFM004.KMK_1);
		
		return indexKjKrInfoMapHj;
	}

	/** ▲▲▲▲▲▲業務チームで作成したメソッドです 終了▲▲▲▲▲▲ */
}
