/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKSyuKeiJudgeTran
*	ソースファイル名	：JBSbatKKSyuKeiJudgeTran.java
*	作成者				：富士通　
*	作成日				：2012年06月22日
*＜機能概要＞
*　主契約判断処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/06/22   FJ)団		新規作成
*	v4.00.00	2012/09/20   FJ)桑島	【ANK-1162-00-00】修正対応
*	v4.00.01	2012/10/04   FJ)桑島	【ANK-1223-00-00】修正対応
*	v4.00.02	2012/11/21   FJ)中作	【IT2-2012-0002078】障害対応
*	v4.00.03	2012/12/29   FJ)岡田	【ST4-2012-0000301】共通部品パラメタ変更対応
*	v4.00.04	2013/01/10   FJ)古内	【ST4-2013-0000035】性能改善
*	v4.00.05	2013/03/04   FJ)岡田	【ST2-2013-0001208】障害対応
*	v4.00.06	2013/03/15   FJ)岡田	【ST2-2013-0001435,0001436】障害対応
*	v4.00.07	2013/03/18   FJ)石原	【IT1-2013-0000498】システムエラー対処の横展開
*	v4.00.08	2013/03/23   FJ)庭山	【ST4-2013-0000244】性能改善
*	v4.00.09	2013/03/31   FJ)柳		【OT-2013-0000311】横展開対応
*	v4.00.10	2013/04/02   FJ)柳		【ST2-2013-0001697】障害対応
*	v4.00.11	2013/04/17   FJ)柳		【IT1-2013-0000954】障害対応
*	v4.00.12	2013/04/22   FJ)柳		【IT1-2013-0000984】障害対応
*	v4.00.13	2013/04/26   FJ)団		【ST3-2013-0000976】障害対応
*	v4.00.14	2013/04/30   FJ)団		【ST3-2013-0000987】障害対応
*	v4.00.15	2013/05/04   FJ)小野	【IT1-2013-0001132】障害対応
*	v4.00.16	2013/05/14   FJ)団		【ST3-2013-0000995】障害対応
*	v4.00.17	2013/05/22   FJ)古内	【IT1-2013-0001215】障害対応
*	v4.00.18	2013/06/12   FJ)団		【IT2-2013-0000494】障害対応
*	v4.00.19	2013/06/12   FJ)柳		【IT2-2013-0000494】障害対応
*	v4.00.20	2013/06/13   FJ)柳		【IT2-2013-0000494】障害対応
*	v4.00.21	2013/06/26   FJ)団		【IT1-2013-0001289】障害対応
*	v4.00.22	2013/07/12   FJ)団		【IT1-2013-0001369】障害対応
*	v4.00.23	2013/07/22   FJ)柳		【IT1-2013-0001418】障害対応
*	v5.00.00	2013/09/13   FJ)団		【OM-2013-0001660】障害対応
*	v5.00.01	2013/10/30   FJ)団		【OM-2013-0003556】障害対応
*	v5.00.02	2013/11/21   FJ)団		【OM-2013-0004483】障害対応
*	v5.00.03	2013/12/12   FJ)団		【OM-2013-0004882】障害対応
*	v6.00.00	2014/01/16   FJ)団		【OM-2014-0000126】障害対応
*	v6.00.01	2014/01/28   FJ)団		【OM-2014-0000125】障害対応
*	v8.00.00	2014/04/04   FJ)桑島	【OM-2014-0001339】障害対応
*	v8.00.01	2014/04/16   FJ)桑島	【OM-2014-0001372】障害対応
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM495;
import eo.business.util.table.JBSbatKK_M_PCRS;
import eo.business.util.table.JBSbatKK_M_PPLAN_KTTANKA;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_SVKEI_EXC_CTRL;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatOracleSeqUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKSyuKeiJudgeTran extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブル(料金コース)*/
	private static final String D_TBL_NAME_KK_M_PCRS = "KK_M_PCRS";

	/** テーブル(料金プラン固定単価)*/
	private static final String D_TBL_NAME_KK_M_PPLAN_KTTANKA = "KK_M_PPLAN_KTTANKA";

	/** テーブル(サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI_UCWK = "KK_T_SVC_KEI_UCWK";

	/** テーブル(進捗)*/
	private static final String D_TBL_NAME_KK_T_PRG = "KK_T_PRG";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** SQL定義キー(KK_SELECT_002)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_002 = "KK_SELECT_002";

	/** SQL定義キー(KK_SELECT_007)*/
	private static final String KK_M_PCRS_KK_SELECT_007 = "KK_SELECT_007";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_PPLAN_KTTANKA_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_090)*/
	private static final String KK_T_SVC_KEI_UCWK_KK_SELECT_090 = "KK_SELECT_090";
	
	/** SQL定義キー(KK_SELECT_093)*/
	private static final String KK_T_SVC_KEI_UCWK_KK_SELECT_093 = "KK_SELECT_093";
	
	/** SQL定義キー(KK_SELECT_110)*/
	private static final String KK_T_SVC_KEI_UCWK_KK_SELECT_110 = "KK_SELECT_110";
	
	/** SQL定義キー(KK_SELECT_023)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_023 = "KK_SELECT_023";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(料金コース)*/
	private JBSbatSQLAccess db_KK_M_PCRS = null;

	/** テーブルアクセスクラス(料金プラン固定単価)*/
	private JBSbatSQLAccess db_KK_M_PPLAN_KTTANKA = null;

	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK = null;

	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK_2 = null;

	/** テーブルアクセスクラス(進捗)*/
	private JBSbatSQLAccess db_KK_T_PRG = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	
	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK_110 = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** テーブルアクセスクラス(共通部品)*/
	private JBSbatSQLAccess stmt = null;

	/** 修正前SQL */
	public static final String EDIT_BF_SQL = "PRC_GRP_CD IN \\(\\?\\) ";

	/** 修正後SQL */
	public static final String EDIT_AF_SQL = "PRC_GRP_CD IN ";

	/** テーブル(サービス契約排他制御)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_EXC_CTRL = "KK_T_SVKEI_EXC_CTRL";

	/** テーブルアクセスクラス(サービス契約排他制御)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_EXC_CTRL = null;

	/** 業務パラメータID（eo光テレビ主従料金設定対象のグループコード）*/
	private static final String KK_SETP_PRC_GRP_CD = "KK_SETP_PRC_GRP_CD";

	/** テーブル名（業務パラメータ管理）*/
	private static final String ZM_M_WORK_PARAM_KNRI = "業務パラメータ管理";

	/** テーブル名（料金プラン固定単価）*/
	private static final String KK_M_PPLAN_KTTANKA = "料金プラン固定単価";

	/** テーブル名（サービス契約内訳）*/
	private static final String KK_T_SVC_KEI_UCWK = "サービス契約内訳";

	/** テーブル名（サービス契約排他制御）*/
	private static final String KK_T_SVKEI_EXC_CTRL = "サービス契約排他制御";

	/** 情報名（eo光テレビ主従料金設定情報）*/
	private static final String STR_ZM_M_WORK_PARAM_KNRI_INFO = "業務パラメータＩＤ：";

	/** 情報名（料金プラン固定金額情報）*/
	private static final String STR_KK_M_PPLAN_KTTANKA_INFO = "料金プランコード：";

	/** 情報名（サービス契約内訳情報）*/
	private static final String STR_KK_SVC_KEI_UCWK_INFO = "サービス契約内訳番号：";

	/** 情報名（サービス契約排他制御情報）*/
	private static final String STR_KK_T_SVKEI_EXC_CTRL_INFO = "サービス契約番号：";

	/** 異動区分（TV契約主従料金設定）*/
	public static final String IDO_DIV_TV_SYUJU_PRC_SET = "00066";

	/** 進捗ステータス（TV契約主従料金設定完了）*/
	public static final String PRG_STAT_SYUJU_PRC_SET_FIN = "1430";

	/** シーケンス定義名(SEQ_PRG_NO)*/
	private static final String SEQ_PRG_NO = "SEQ_PRG_NO";
	
	/** 異動区分「00018（eoテレビ変更（STB追加））」 */
	private static final String IDO_DIV_EO_TV_CHG = "00018";
	
	/** 異動区分「00032（登録内容修正）」 */
	private static final String IDO_DIV_ADD_NYO_SHUSEI = "00032";
	
	/** 異動区分「00035（工事情報訂正）」 */
	private static final String IDO_DIV_KOJI_INFO_TEISE = "00035";
	
	/** 異動区分「00068（コース変更(STB)）」 */
	private static final String IDO_DIV_COURSE_CHG_STB = "00068";
	
	/** 業務パラメタ管理の検索結果を保持します。 */
	private String[] prg_grp_cd = null;
	
	/** STB追加レコードを保存します*/
	private JBSbatCommonDBInterface stbAddRecord = null;
	
	/** コース変更レコードを保存します*/
	private JBSbatCommonDBInterface courseChgRecord = null;
	
	/** 解約レコードを保存します*/
	private JBSbatCommonDBInterface dslRecord = null;
	
	/** 主従判断サービス契約内訳番号 */
	private HashMap<String, String> judgeMap = null;
	
	/** コース変更遅延確定対象リスト*/
	ArrayList<String> chTienList = null;
	
	/** 料金コースマップ */
	private HashMap<String, String> pcrsMap = null;
	
	/** 異動予約コース変更反映分 */
	private boolean isIdoRsvData = false;
	
	/** コース変更反映分 */
	private boolean isCourseChgData = false;
	
	/** サービス契約内訳ステータス「100（サービス提供中）」 */
	private static final String SVC_KEI_UCWK_STAT_100 = "100";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_KK_M_PCRS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PCRS);
		db_KK_M_PPLAN_KTTANKA = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PPLAN_KTTANKA);
		db_KK_T_SVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		db_KK_T_SVC_KEI_UCWK_2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		db_KK_T_SVC_KEI_UCWK_110 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		db_KK_T_PRG = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_PRG);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		db_KK_T_SVKEI_EXC_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_EXC_CTRL);
		
		// 共通部品用
		stmt = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_PRG);
		
		// eo光テレビ主従料金設定対象の料金グループコード取得を行います。
		searchPrcGrpCd();
		
		// サービス契約内訳のクエリを加工(KK_T_SVC_KEI_UCWK_KK_SELECT_093)
		db_KK_T_SVC_KEI_UCWK_2.setSqlMap(KK_T_SVC_KEI_UCWK_KK_SELECT_093, getEditSQL(db_KK_T_SVC_KEI_UCWK_2.getSql(KK_T_SVC_KEI_UCWK_KK_SELECT_093)));
		
		// 料金コースのクエリを加工(KK_M_PCRS_KK_SELECT_XXX)し実行後、key:料金コースコード、value：TVコースグループコードを保持します。
		db_KK_M_PCRS.setSqlMap(KK_M_PCRS_KK_SELECT_007, getEditSQL(db_KK_M_PCRS.getSql(KK_M_PCRS_KK_SELECT_007)));
		JBSbatCommonDBInterface pcrsCondMap = new JBSbatCommonDBInterface(); 
		for(int i = 0; i < prg_grp_cd.length; i++)
		{
			// 格納されている料金グループコードをセットします。
			pcrsCondMap.setValue(prg_grp_cd[i]);
		}
		pcrsCondMap.setValue(super.opeDate);
		db_KK_M_PCRS.selectBySqlDefine(pcrsCondMap, KK_M_PCRS_KK_SELECT_007);
		pcrsMap = new HashMap<String, String>();
		JBSbatCommonDBInterface pcrsCdMap = db_KK_M_PCRS.selectNext();
		while (null != pcrsCdMap)
		{
			if(!"".equals(JBSbatStringUtil.Rtrim(pcrsCdMap.getString(JBSbatKK_M_PCRS.PCRS_CD))))
			{
				pcrsMap.put(JBSbatStringUtil.Rtrim(pcrsCdMap.getString(JBSbatKK_M_PCRS.PCRS_CD)), JBSbatStringUtil.Rtrim(pcrsCdMap.getString(JBSbatKK_M_PCRS.TV_COURSE_GRP_CD)));
				pcrsCdMap = db_KK_M_PCRS.selectNext();
			}
		}
		//コース変更遅延確定対象ファイル読み込み
		String filePath = super.commonItem.getFreeItem();
		setChTienList(filePath);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		stbAddRecord = new JBSbatCommonDBInterface();
		courseChgRecord = new JBSbatCommonDBInterface();
		dslRecord = new JBSbatCommonDBInterface();
		isIdoRsvData = false;
		isCourseChgData = false;
		HashMap<String, String>svcKeiUcwkMap = new HashMap<String, String>();
		JBSbatCommonDBInterface db_map = null;
		JBSbatOutputItem out_item = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		
		String svcKeiNo = inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
		
		executeKK_T_SVC_KEI_KK_SELECT_023(new Object[]{svcKeiNo, JBSbatDateUtil.adjustDate(opeDate, 1)});
		
		JBSbatCommonDBInterface dbInfo = db_KK_T_SVC_KEI.selectNext();
		
		// サービス契約検索結果がない場合、エラーとし処理中断します。
		if (null == dbInfo)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, 
					new String[]{"サービス契約", "サービス契約番号：" + svcKeiNo});
		}
		
		// サービス契約のサービス契約ステータスと料金コースコードを取得
		String svcKeiStat = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT));
		String pcrsCd = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_SVC_KEI.PCRS_CD));
		
		// サービス契約に紐づく内訳を取得する。
		JBSbatCommonDBInterface inUckwSearchCondMap = new JBSbatCommonDBInterface(); 
		inUckwSearchCondMap.setValue(super.opeDate);
		inUckwSearchCondMap.setValue(svcKeiNo);
		for(int i = 0; i < prg_grp_cd.length; i++)
		{
			// 格納されている料金グループコードをセットします。
			inUckwSearchCondMap.setValue(prg_grp_cd[i]);
		}
		inUckwSearchCondMap.setValue(super.opeDate);
		inUckwSearchCondMap.setValue(super.opeDate);
		
		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK_2.selectBySqlDefine(inUckwSearchCondMap, KK_T_SVC_KEI_UCWK_KK_SELECT_093);
		
		List<JBSbatCommonDBInterface> svcUcwkList = new ArrayList<JBSbatCommonDBInterface>();
		List<JBSbatCommonDBInterface> svcUcwkJudgeList = new ArrayList<JBSbatCommonDBInterface>();
		judgeMap = new HashMap<String, String>();
		JBSbatCommonDBInterface svckeiUcwkMap = db_KK_T_SVC_KEI_UCWK_2.selectNext();
		while (null != svckeiUcwkMap)
		{
			String stat =JBSbatStringUtil.Rtrim(svckeiUcwkMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
			String uwkNo =JBSbatStringUtil.Rtrim(svckeiUcwkMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
			if(!"910".equals(stat))
			{
				svcUcwkJudgeList.add(svckeiUcwkMap);
				judgeMap.put(uwkNo, "");
			}
			svcUcwkList.add(svckeiUcwkMap);
			svckeiUcwkMap = db_KK_T_SVC_KEI_UCWK_2.selectNext();
		}
		
		// 主従設定の実行判定
		this.isSyujuPrcSetTrgt(svcUcwkList, svcKeiStat);
		int result = 0;
		if(!stbAddRecord.getMap().isEmpty())
		{
			result = 1;
		}
		else if(!courseChgRecord.getMap().isEmpty())
		{
			result = 2;
		}
		else if(!dslRecord.getMap().isEmpty())
		{
			result = 3;
		}
		else
		{
			super.logPrint.printDebugLog("★主従設定の実行不要★" );
		}
		
		// 上記主従設定の実行判定結果が「対象外」となった場合は次のサービス契約を処理する。
		if(0 == result)
		{
			super.logPrint.printDebugLog("主従設定の実行判定結果「対象外」です。サービス契約番号:" + svcKeiNo);
			return null;
		}
		
		// サービス契約内訳TBL変更前登録、異動区分「00018：eoテレビ変更（STB追加）」判定用
		boolean updFlg_1 = false;				// サービス契約排他制御selectforupdate用
		boolean updFlg_2 = false;				// サービス契約排他制御更新用
		int maxIndex = 0;
		BigDecimal tmpAmnt = new BigDecimal(0);
		
		// 処理対象となる内訳件数のカウント
		int uwkCount = 0;
		for(int i = 0;  i < svcUcwkJudgeList.size(); i++)
		{
			JBSbatCommonDBInterface rec = svcUcwkJudgeList.get(i);
			String pcrsCd_uwk = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD));
			if(pcrsMap.get(pcrsCd).equals(pcrsMap.get(pcrsCd_uwk)))
			{
				// TVコースグループコードが一致していれば処理対象
				uwkCount++;
			}

		}
		
		// サービス契約単位で処理対象がない場合は更新処理を行わない
		if(0 < uwkCount)
		{
			// 固定料金を取得し主を判定します。
			for(int i = 0; i < svcUcwkJudgeList.size(); i++)
			{
				super.logPrint.printDebugLog("★固定料金を取得し主を判定します。★");
				
				JBSbatCommonDBInterface rec = svcUcwkJudgeList.get(i);
				String svcKeiUcwkNo = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
				String pplanCd = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PPLAN_CD));
				String pcrsCd_uwk = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD));
				
				super.logPrint.printDebugLog("@svcKeiUcwkNo：" + svcKeiUcwkNo);
				super.logPrint.printDebugLog("@pplanCd     ：" + pplanCd);
				super.logPrint.printDebugLog("@pcrsCd     ：" + pcrsCd_uwk);
				
				// 処理対象外の料金コースコードの場合は対象外
				if(!pcrsMap.get(pcrsCd).equals(pcrsMap.get(pcrsCd_uwk)))
				{
					super.logPrint.printDebugLog("@主判定対象外");
					continue;
				}
				
				// 料金プランコードの存在確認
				if("".equals(pplanCd) || 6 != pplanCd.length())
				{
					throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0770CE, new String[]{"料金プランコード", "サービス契約番号", svcKeiNo});
				}
				
				StringBuffer pplanBf = new StringBuffer();
				// 料金プランコードの末尾が「2」のとき末尾を「1」に編集します。
				if("2".equals(pplanCd.substring(5,6)))
				{
					pplanBf.append(pplanCd.substring(0,5));
					pplanBf.append("1");
				}
				// 料金プランコードの末尾が「4」のとき末尾を「3」に編集します。
				else if("4".equals(pplanCd.substring(5,6)))
				{
					pplanBf.append(pplanCd.substring(0,5));
					pplanBf.append("3");
				}
				// 料金プランコードの末尾が「6」のとき末尾を「5」に編集します。
				else if("6".equals(pplanCd.substring(5,6)))
				{
					pplanBf.append(pplanCd.substring(0,5));
					pplanBf.append("5");
				}
				else
				{
					pplanBf.append(pplanCd);
				}
				super.logPrint.printDebugLog("@pplanBf：" + pplanBf.toString());
				
				String[] param_601 = new String[4];
				param_601[0] = rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD);
				param_601[1] = pplanBf.toString();
				param_601[2] = super.opeDate;
				param_601[3] = super.opeDate;
				executeKK_M_PPLAN_KTTANKA_KK_SELECT_001(param_601);
				db_map = db_KK_M_PPLAN_KTTANKA.selectNext();
				if(null == db_map || null == db_map.getBigDecimal(JBSbatKK_M_PPLAN_KTTANKA.PPLAN_KOTEI_AMNT))
				{
					throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{KK_M_PPLAN_KTTANKA, STR_KK_M_PPLAN_KTTANKA_INFO + pplanBf.toString()});
				}
				BigDecimal amnt = db_map.getBigDecimal(JBSbatKK_M_PPLAN_KTTANKA.PPLAN_KOTEI_AMNT);
				// 料金が同じ場合は最小の機器製造番号のものとします。（サービス契約内訳は機器製造番号順に取得している）
				if(0 > tmpAmnt.compareTo(amnt))
				{
					tmpAmnt = amnt;
					maxIndex = i;
				}
				
			}
			
			// 主となるサービス契約内訳番号
			// サービス契約内訳の検索がある場合に主となるサービス契約内訳番号を取得する。
			String svcKeiUcwkNo_main = "";
			if (maxIndex < svcUcwkJudgeList.size())
			{
				JBSbatCommonDBInterface rec_main = svcUcwkJudgeList.get(maxIndex);
				svcKeiUcwkNo_main = JBSbatStringUtil.Rtrim(rec_main.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
			}
			
			//主契約判断フラグ
			boolean mainHambetFlg = false;
			
			// サービス契約内訳・進捗に登録します。サービス契約内訳を更新した場合、サービス契約内訳＜eo光TV＞を更新します。
			for(int i = 0;  i < svcUcwkJudgeList.size(); i++)
			{
				
				JBSbatCommonDBInterface rec = svcUcwkJudgeList.get(i);
				String svcKeiUcwkNoLog = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
				String pplanCd = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PPLAN_CD));
				String pcrsCd_uwk = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD));
				
				// サービス契約.TVコースグループコードとサービス契約内訳.TVコースグループコードが一致していない場合、更新対象外
				if(!pcrsMap.get(pcrsCd).equals(pcrsMap.get(pcrsCd_uwk)))
				{
					super.logPrint.printDebugLog("サービス契約．TVコースグループコード⇒" + pcrsMap.get(pcrsCd));
					super.logPrint.printDebugLog("サービス契約内訳．TVコースグループコード⇒" + pcrsMap.get(pcrsCd_uwk));
					super.logPrint.printDebugLog("処理対象外（TVコースグループコード不一致）サービス契約内訳番号：" + svcKeiUcwkNoLog);
					continue;
				}
				super.logPrint.printDebugLog("AsvcKeiUcwkNo⇒" + svcKeiUcwkNoLog);
				super.logPrint.printDebugLog("ApplanCd     ⇒" + pplanCd);
				
				StringBuilder pplanBf = new StringBuilder();
				boolean addFlg = false;
				//主契約判断フラグ 初期化
				mainHambetFlg = false;
				
				// 主の料金設定
				if(judgeMap.containsKey(svcKeiUcwkNoLog) && svcKeiUcwkNo_main.equals(svcKeiUcwkNoLog) )
				{
					
					//【OM-2014-0001372】障害対応
					//主契約判断フラグ
					mainHambetFlg = true;
					
					// 料金プランコードの末尾が「2」のとき末尾を「1」に編集します。
					if("2".equals(pplanCd.substring(5,6)))
					{
						pplanBf.append(pplanCd.substring(0,5));
						pplanBf.append("1");
						addFlg = true;
						super.logPrint.printDebugLog("主の料金設定：：：：：：" + pplanCd + "⇒" + pplanBf.toString());
					}
					// 料金プランコードの末尾が「4」のとき末尾を「3」に編集します。
					else if("4".equals(pplanCd.substring(5,6)))
					{
						pplanBf.append(pplanCd.substring(0,5));
						pplanBf.append("3");
						addFlg = true;
						super.logPrint.printDebugLog("主の料金設定：：：：：：" + pplanCd + "⇒" + pplanBf.toString());
					}
					// 料金プランコードの末尾が「6」のとき末尾を「5」に編集します。
					else if("6".equals(pplanCd.substring(5,6)))
					{
						pplanBf.append(pplanCd.substring(0,5));
						pplanBf.append("5");
						addFlg = true;
						super.logPrint.printDebugLog("主の料金設定：：：：：：" + pplanCd + "⇒" + pplanBf.toString());
					}
					// 料金プランコードの末尾が「1」「3」「5」の場合は更新対象としません。
					else
					{
						addFlg = false;
						super.logPrint.printDebugLog("主の料金設定：：：：：：対象外:" + pplanCd);
					}
				}
				// 従の料金設定
				else if(judgeMap.containsKey(svcKeiUcwkNoLog))
				{
					// 料金プランコードの末尾が「1」のとき末尾を「2」に編集します。
					if("1".equals(pplanCd.substring(5,6)))
					{
						pplanBf.append(pplanCd.substring(0,5));
						pplanBf.append("2");
						addFlg = true;
						super.logPrint.printDebugLog("従の料金設定：：：：：：" + pplanCd + "⇒" + pplanBf.toString());
					}
					// 料金プランコードの末尾が「3」のとき末尾を「4」に編集します。
					else if("3".equals(pplanCd.substring(5,6)))
					{
						pplanBf.append(pplanCd.substring(0,5));
						pplanBf.append("4");
						addFlg = true;
						super.logPrint.printDebugLog("従の料金設定：：：：：：" + pplanCd + "⇒" + pplanBf.toString());
					}
					// 料金プランコードの末尾が「5」のとき末尾を「6」に編集します。
					else if("5".equals(pplanCd.substring(5,6)))
					{
						pplanBf.append(pplanCd.substring(0,5));
						pplanBf.append("6");
						addFlg = true;
						super.logPrint.printDebugLog("従の料金設定：：：：：：" + pplanCd + "⇒" + pplanBf.toString());
					}
					// 料金プランコードの末尾が「2」「4」「6」の場合は更新対象としません。
					else
					{
						addFlg = false;
						super.logPrint.printDebugLog("従の料金設定：：：：：：対象外:" + pplanCd);
					}
				}
				else
				{
					//解約
					addFlg = true;
					super.logPrint.printDebugLog("解約：：：：：：");
				}
				if(addFlg)
				{
					super.logPrint.printDebugLog("★サービス契約内訳・進捗　登録★");
					// サービス契約内訳情報の項目を取得
					String svcKeiUcwkNo = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
					String geneAddDtm   = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.GENE_ADD_DTM));
					String [] whereParam = {svcKeiUcwkNo, geneAddDtm};
					super.logPrint.printDebugLog("whereParam(SVC_KEI_UCWK_NO)：" +  whereParam[0]);
					super.logPrint.printDebugLog("whereParam(GENE_ADD_DTM )：：" +  whereParam[1]);
					// PK検索を行う
					JBSbatCommonDBInterface svcKeiUcwk = executeKK_T_SVC_KEI_UCWK_PKSELECT(whereParam);
					if(null == svcKeiUcwk){
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, 
								new String[]{KK_T_SVC_KEI_UCWK, STR_KK_SVC_KEI_UCWK_INFO + svcKeiUcwkNo});
					}
					// サービス契約排他制御に排他をかけます。
					if(!updFlg_1){
						forUpdeteSvkeiExcCtrl(svcKeiNo);
						updFlg_1 = true;
					}
					super.logPrint.printDebugLog("サービス契約内訳・進捗登録実行(ｻｰﾋﾞｽ契約内訳番号)："
							+  svcKeiUcwk.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
					
					// 変更前の料金プランの情報を登録
					String sysDate = addSvckeiUcwk(svcKeiUcwk, "", String.valueOf(result));
					
					//サービス契約内訳情報PK検索
					String svcKeiUcwkNoChgAf = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
					String geneAddDtmChgAf   = sysDate;
					
					String [] whereParamChgAf = {svcKeiUcwkNoChgAf, geneAddDtmChgAf};
					
					// PK検索を行う
					JBSbatCommonDBInterface svcKeiUcwkChgAf = executeKK_T_SVC_KEI_UCWK_PKSELECT(whereParamChgAf);
					if(null == svcKeiUcwkChgAf){
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, 
								new String[]{KK_T_SVC_KEI_UCWK, STR_KK_SVC_KEI_UCWK_INFO + svcKeiUcwkNoChgAf});
					}
					// 変更後の料金プランの情報を登録
					sysDate = addSvckeiUcwk(svcKeiUcwkChgAf, pplanBf.toString(), String.valueOf(result));
					
					//【OM-2014-0001372】障害対応
					if(mainHambetFlg)
					{
						// 最終登録レコード
						//svcKeiUcwkMap.put("svcKeiUcwkNo", svcKeiUcwkNoChgAf);
						//svcKeiUcwkMap.put("geneAddDtm", sysDate);
						
						// 出力情報に転記します
						out_map.setString(JBSbatKKIFM495.SVC_KEI_UCWK_NO, svcKeiUcwkNoChgAf);
						out_map.setString(JBSbatKKIFM495.GENE_ADD_DTM, sysDate);
						out_map.setOutFlg(true);
						out_item.addOutMapList(out_map);
						super.logPrint.printDebugLog("ファイル出力：：：：：：" +  svcKeiUcwkMap.get("svcKeiUcwkNo"));
					}
					
					// 進捗登録
					addPrg(svcKeiUcwk);
					
					updFlg_2 = true;
				}
			}
			
			if(updFlg_2)
			{
				// サービス契約排他制御の更新
				super.logPrint.printDebugLog("サービス契約排他制御更新実行(ｻｰﾋﾞｽ契約番号)：：：：：：" +  svcKeiNo);
				upDateSvkeiExcCtrl(svcKeiNo);
			
			}
		}
		else
		{
			super.logPrint.printDebugLog("処理対象外（TVコースグループコード不一致）対象サービス契約内訳：" + uwkCount +  "件");
		}
		super.logPrint.printDebugLog("execute_END");
		return out_item;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_KK_M_PCRS.close();
		db_KK_M_PPLAN_KTTANKA.close();
		db_KK_T_SVC_KEI_UCWK.close();
		db_KK_T_SVC_KEI_UCWK_2.close();
		db_KK_T_SVC_KEI_UCWK_110.close();
		db_KK_T_PRG.close();
		db_KK_T_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		db_KK_T_SVKEI_EXC_CTRL.close();
		JKKBatCommon.closeSubTypeConnection();
		// 共通部品用
		stmt.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_KK_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_KK_SELECT_002);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	料金コースコード
	 *		 	料金プランコード
	 *		 	料金プラン固定単価適用年月日
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_PPLAN_KTTANKA_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_M_PPLAN_KTTANKA.selectBySqlDefine(paramList, KK_M_PPLAN_KTTANKA_KK_SELECT_001);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_UCWK_NO
	 *		 	GENE_ADD_DTM
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_SVC_KEI_UCWK_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_UCWK_NO", whereParam[0]);
		whereMap.setValue("GENE_ADD_DTM", whereParam[1]);

		// DBアクセスを実行します
		return db_KK_T_SVC_KEI_UCWK.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	サービス契約内訳番号				SVC_KEI_UCWK_NO
	 *		 	世代登録年月日時分秒				GENE_ADD_DTM
	 *		 	サービス契約内訳ステータス				SVC_KEI_UCWK_STAT
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	申込明細番号				MSKM_DTL_NO
	 *		 	料金コースコード				PCRS_CD
	 *		 	料金プランコード				PPLAN_CD
	 *		 	提供方式契約番号				TK_HOSHIKI_KEI_NO
	 *		 	支払い方法継続フラグ				PAYWAY_KEIZOKU_FLG
	 *		 	ＷＥＢオプション追加不可フラグ				WEB_OP_ADD_FAIL_FLG
	 *		 	業務連絡備考				WORK_RRK_BIKO
	 *		 	サービス利用開始希望年月日				SVC_USE_STA_KIBO_YMD
	 *		 	サービス利用開始希望時間帯コード				SVC_UEST_KBTMZ_CD
	 *		 	サービス利用開始希望時間コード				SVC_UEST_KBTM_CD
	 *		 	予約適用開始希望年月日				RSV_TSTA_KIBO_YMD
	 *		 	審査結果送信コード				SKEKKA_SEND_CD
	 *		 	サービス契約内訳後続業務依頼年月日				SVC_KEI_UCWK_KZKWRK_REQYMD
	 *		 	照査年月日				SHOSA_YMD
	 *		 	照査取消年月日				SHOSA_CL_YMD
	 *		 	試用加入年月日				FTRIAL_KANYU_YMD
	 *		 	試用期間終了年月日				FTRIAL_PRD_ENDYMD
	 *		 	本加入年月日				HONKANYU_YMD
	 *		 	本加入移行期限年月日				HONKANYU_IKO_KIGEN_YMD
	 *		 	契約締結年月日				KEI_CNC_YMD
	 *		 	予約適用年月日				RSV_APLY_YMD
	 *		 	予約取消年月日				RSV_CL_YMD
	 *		 	予約適用コード				RSV_APLY_CD
	 *		 	プラン開始年月日				PLAN_STAYMD
	 *		 	プラン終了年月日				PLAN_ENDYMD
	 *		 	プラン課金開始年月日				PLAN_CHRG_STAYMD
	 *		 	プラン課金終了年月日				PLAN_CHRG_ENDYMD
	 *		 	プラン終了種別コード				PLAN_END_SBT_CD
	 *		 	サービスキャンセル年月日				SVC_CANCEL_YMD
	 *		 	サービスキャンセル理由コード				SVC_CANCEL_RSN_CD
	 *		 	サービス開始年月日				SVC_STA_YMD
	 *		 	サービス課金開始年月日				SVC_CHRG_STAYMD
	 *		 	サービス停止年月日				SVC_STP_YMD
	 *		 	サービス停止理由コード				SVC_STP_RSN_CD
	 *		 	サービス停止解除年月日				SVC_STP_RLS_YMD
	 *		 	サービス停止解除理由コード				SVC_STP_RLS_RSN_CD
	 *		 	休止中断コード				PAUSE_STP_CD
	 *		 	サービス休止年月日				SVC_PAUSE_YMD
	 *		 	サービス休止理由コード				SVC_PAUSE_RSN_CD
	 *		 	サービス休止理由メモ				SVC_PAUSE_RSN_MEMO
	 *		 	サービス休止解除年月日				SVC_PAUSE_RLS_YMD
	 *		 	サービス休止解除理由コード				SVC_PAUSE_RLS_RSN_CD
	 *		 	サービス休止解除理由メモ				SVC_PAUSE_RLS_RSN_MEMO
	 *		 	サービス終了年月日				SVC_ENDYMD
	 *		 	サービス課金終了年月日				SVC_CHRG_ENDYMD
	 *		 	サービス解約起算年月日				SVC_DSL_KISAN_YMD
	 *		 	サービス解約年月日				SVC_DSL_YMD
	 *		 	サービス解約理由コード				SVC_DLRE_CD
	 *		 	サービス解約理由メモ				SVC_DLRE_MEMO
	 *		 	サービス解約手続完了フラグ				SVC_DSL_TTDKI_FIN_FLG
	 *		 	回復年月日				KAIHK_YMD
	 *		 	サービスキャンセル取消年月日				SVC_CANCEL_CL_YMD
	 *		 	サービス解約取消年月日				SVC_DSL_CL_YMD
	 *		 	サービス契約内訳引継発生年月日				SVKEIUW_HKHASYMD
	 *		 	課金開始年月日補正有無				CHRG_STA_YMD_HOSEI_UM
	 *		 	サービス休止課金開始年月日				SVC_PAUSE_CHRG_STA_YMD
	 *		 	違約金発生コード				PNLTY_HASSEI_CD
	 *		 	異動区分				IDO_DIV
	 *		 	照査解約完了コード				SHOSA_DSL_FIN_CD
	 *		 	サービス提供物消去処理実施年月日時分秒				SVCTK_BUT_DEL_TRN_JSSI_DTM
	 *		 	継続元サービス契約内訳番号				KEIZK_MT_SVC_KEI_UCWK_NO
	 *		 	継続後契約変更手続中フラグ				KEIZK_AF_KEI_CHGECHU_FLG
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_UCWK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SVC_KEI_UCWK_NO", setParam[0]);
		setMap.setValue("GENE_ADD_DTM", setParam[1]);
		setMap.setValue("SVC_KEI_UCWK_STAT", setParam[2]);
		setMap.setValue("SVC_KEI_NO", setParam[3]);
		setMap.setValue("MSKM_DTL_NO", setParam[4]);
		setMap.setValue("PCRS_CD", setParam[5]);
		setMap.setValue("PPLAN_CD", setParam[6]);
		setMap.setValue("TK_HOSHIKI_KEI_NO", setParam[7]);
		setMap.setValue("PAYWAY_KEIZOKU_FLG", setParam[8]);
		setMap.setValue("WEB_OP_ADD_FAIL_FLG", setParam[9]);
		setMap.setValue("WORK_RRK_BIKO", setParam[10]);
		setMap.setValue("SVC_USE_STA_KIBO_YMD", setParam[11]);
		setMap.setValue("SVC_UEST_KBTMZ_CD", setParam[12]);
		setMap.setValue("SVC_UEST_KBTM_CD", setParam[13]);
		setMap.setValue("RSV_TSTA_KIBO_YMD", setParam[14]);
		setMap.setValue("SKEKKA_SEND_CD", setParam[15]);
		setMap.setValue("SVC_KEI_UCWK_KZKWRK_REQYMD", setParam[16]);
		setMap.setValue("SHOSA_YMD", setParam[17]);
		setMap.setValue("SHOSA_CL_YMD", setParam[18]);
		setMap.setValue("FTRIAL_KANYU_YMD", setParam[19]);
		setMap.setValue("FTRIAL_PRD_ENDYMD", setParam[20]);
		setMap.setValue("HONKANYU_YMD", setParam[21]);
		setMap.setValue("HONKANYU_IKO_KIGEN_YMD", setParam[22]);
		setMap.setValue("KEI_CNC_YMD", setParam[23]);
		setMap.setValue("RSV_APLY_YMD", setParam[24]);
		setMap.setValue("RSV_CL_YMD", setParam[25]);
		setMap.setValue("RSV_APLY_CD", setParam[26]);
		setMap.setValue("PLAN_STAYMD", setParam[27]);
		setMap.setValue("PLAN_ENDYMD", setParam[28]);
		setMap.setValue("PLAN_CHRG_STAYMD", setParam[29]);
		setMap.setValue("PLAN_CHRG_ENDYMD", setParam[30]);
		setMap.setValue("PLAN_END_SBT_CD", setParam[31]);
		setMap.setValue("SVC_CANCEL_YMD", setParam[32]);
		setMap.setValue("SVC_CANCEL_RSN_CD", setParam[33]);
		setMap.setValue("SVC_STA_YMD", setParam[34]);
		setMap.setValue("SVC_CHRG_STAYMD", setParam[35]);
		setMap.setValue("SVC_STP_YMD", setParam[36]);
		setMap.setValue("SVC_STP_RSN_CD", setParam[37]);
		setMap.setValue("SVC_STP_RLS_YMD", setParam[38]);
		setMap.setValue("SVC_STP_RLS_RSN_CD", setParam[39]);
		setMap.setValue("PAUSE_STP_CD", setParam[40]);
		setMap.setValue("SVC_PAUSE_YMD", setParam[41]);
		setMap.setValue("SVC_PAUSE_RSN_CD", setParam[42]);
		setMap.setValue("SVC_PAUSE_RSN_MEMO", setParam[43]);
		setMap.setValue("SVC_PAUSE_RLS_YMD", setParam[44]);
		setMap.setValue("SVC_PAUSE_RLS_RSN_CD", setParam[45]);
		setMap.setValue("SVC_PAUSE_RLS_RSN_MEMO", setParam[46]);
		setMap.setValue("SVC_ENDYMD", setParam[47]);
		setMap.setValue("SVC_CHRG_ENDYMD", setParam[48]);
		setMap.setValue("SVC_DSL_KISAN_YMD", setParam[49]);
		setMap.setValue("SVC_DSL_YMD", setParam[50]);
		setMap.setValue("SVC_DLRE_CD", setParam[51]);
		setMap.setValue("SVC_DLRE_MEMO", setParam[52]);
		setMap.setValue("SVC_DSL_TTDKI_FIN_FLG", setParam[53]);
		setMap.setValue("KAIHK_YMD", setParam[54]);
		setMap.setValue("SVC_CANCEL_CL_YMD", setParam[55]);
		setMap.setValue("SVC_DSL_CL_YMD", setParam[56]);
		setMap.setValue("SVKEIUW_HKHASYMD", setParam[57]);
		setMap.setValue("CHRG_STA_YMD_HOSEI_UM", setParam[58]);
		setMap.setValue("SVC_PAUSE_CHRG_STA_YMD", setParam[59]);
		setMap.setValue("PNLTY_HASSEI_CD", setParam[60]);
		setMap.setValue("IDO_DIV", setParam[61]);
		setMap.setValue("SHOSA_DSL_FIN_CD", setParam[62]);
		setMap.setValue("SVCTK_BUT_DEL_TRN_JSSI_DTM", setParam[63]);
		setMap.setValue("KEIZK_MT_SVC_KEI_UCWK_NO", setParam[64]);
		setMap.setValue("KEIZK_AF_KEI_CHGECHU_FLG", setParam[65]);
		setMap.setValue("ADD_DTM", setParam[66]);
		setMap.setValue("ADD_OPEACNT", setParam[67]);
		setMap.setValue("UPD_DTM", setParam[68]);
		setMap.setValue("UPD_OPEACNT", setParam[69]);
		setMap.setValue("DEL_DTM", setParam[70]);
		setMap.setValue("DEL_OPEACNT", setParam[71]);
		setMap.setValue("MK_FLG", setParam[72]);
		setMap.setValue("ADD_UNYO_YMD", setParam[73]);
		setMap.setValue("ADD_TRN_ID", setParam[74]);
		setMap.setValue("UPD_UNYO_YMD", setParam[75]);
		setMap.setValue("UPD_TRN_ID", setParam[76]);
		setMap.setValue("DEL_UNYO_YMD", setParam[77]);
		setMap.setValue("DEL_TRN_ID", setParam[78]);
	
		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK.insertByPrimaryKeys(setMap);
	}


	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	進捗番号				PRG_NO
	 *		 	申込明細番号				MSKM_DTL_NO
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	請求方法番号（口座）				SEIKY_WAY_NO_KOZA
	 *		 	請求方法番号（クレジットカード）				SEIKY_WAY_NO_CRECARD
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	サービス契約内訳番号				SVC_KEI_UCWK_NO
	 *		 	サービス契約回線内訳番号				SVC_KEI_KAISEN_UCWK_NO
	 *		 	機器提供サービス契約番号				KKTK_SVC_KEI_NO
	 *		 	オプションサービス契約番号				OP_SVC_KEI_NO
	 *		 	請求オプションサービス契約番号				SEIOPSVC_KEI_NO
	 *		 	サブオプションサービス契約番号				SBOP_SVC_KEI_NO
	 *		 	割引サービス契約番号				WRIB_SVC_KEI_NO
	 *		 	異動区分				IDO_DIV
	 *		 	異動年月日時分秒				IDO_DTM
	 *		 	進捗ステータス				PRG_STAT
	 *		 	進捗年月日時分秒				PRG_DTM
	 *		 	進捗メモ				PRG_MEMO
	 *		 	進捗特記事項１				PRG_TKJK_1
	 *		 	進捗特記事項２				PRG_TKJK_2
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_PRG_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("PRG_NO", setParam[0]);
		setMap.setValue("MSKM_DTL_NO", setParam[1]);
		setMap.setValue("SEIKY_KEI_NO", setParam[2]);
		setMap.setValue("SEIKY_WAY_NO_KOZA", setParam[3]);
		setMap.setValue("SEIKY_WAY_NO_CRECARD", setParam[4]);
		setMap.setValue("SVC_KEI_NO", setParam[5]);
		setMap.setValue("SVC_KEI_UCWK_NO", setParam[6]);
		setMap.setValue("SVC_KEI_KAISEN_UCWK_NO", setParam[7]);
		setMap.setValue("KKTK_SVC_KEI_NO", setParam[8]);
		setMap.setValue("OP_SVC_KEI_NO", setParam[9]);
		setMap.setValue("SEIOPSVC_KEI_NO", setParam[10]);
		setMap.setValue("SBOP_SVC_KEI_NO", setParam[11]);
		setMap.setValue("WRIB_SVC_KEI_NO", setParam[12]);
		setMap.setValue("IDO_DIV", setParam[13]);
		setMap.setValue("IDO_DTM", setParam[14]);
		setMap.setValue("PRG_STAT", setParam[15]);
		setMap.setValue("PRG_DTM", setParam[16]);
		setMap.setValue("PRG_MEMO", setParam[17]);
		setMap.setValue("PRG_TKJK_1", setParam[18]);
		setMap.setValue("PRG_TKJK_2", setParam[19]);
		setMap.setValue("ADD_DTM", setParam[20]);
		setMap.setValue("ADD_OPEACNT", setParam[21]);
		setMap.setValue("UPD_DTM", setParam[22]);
		setMap.setValue("UPD_OPEACNT", setParam[23]);
		setMap.setValue("DEL_DTM", setParam[24]);
		setMap.setValue("DEL_OPEACNT", setParam[25]);
		setMap.setValue("MK_FLG", setParam[26]);
		setMap.setValue("ADD_UNYO_YMD", setParam[27]);
		setMap.setValue("ADD_TRN_ID", setParam[28]);
		setMap.setValue("UPD_UNYO_YMD", setParam[29]);
		setMap.setValue("UPD_TRN_ID", setParam[30]);
		setMap.setValue("DEL_UNYO_YMD", setParam[31]);
		setMap.setValue("DEL_TRN_ID", setParam[32]);
	
		// DBアクセスを実行します
		db_KK_T_PRG.insertByPrimaryKeys(setMap);
	}
	
	/**
	 * SQLKEY(KK_SELECT_090)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約内訳番号
	 *		 	サービス契約内訳ステータス
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_UCWK_KK_SELECT_090(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KK_SELECT_090);
	}
	
	/**
	 * SQLKEY(KK_SELECT_023)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用年月
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_023(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_023);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 業務パラメータ管理へ検索を行います。
	 * <br>
	 * @return 料金グループコード(複数を編集)
	 * @throws Exception 
	 */
	private void searchPrcGrpCd() throws Exception
	{
		JBSbatCommonDBInterface db_map = null;
		// 条件項目を設定します
		String[] param = new String[3];
		param[0] = KK_SETP_PRC_GRP_CD;
		param[1] = super.opeDate;
		param[2] = super.opeDate;
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_002(param);
		db_map = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		if(null == db_map)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{ZM_M_WORK_PARAM_KNRI, STR_ZM_M_WORK_PARAM_KNRI_INFO + KK_SETP_PRC_GRP_CD});
		}
		String tmpPrcGrpCd = db_map.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		prg_grp_cd = tmpPrcGrpCd.split(",", -1);
	}
	
	/**
	 * SQLKEY(KK_SELECT_110)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	サービス契約内訳番号
	 *		 	世代登録年月日時分秒
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_UCWK_KK_SELECT_110(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK_110.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KK_SELECT_110);
	}


	/**
	 * SQL文の加工を実施します。
	 * IN句の料金グループをリストのサイズ分、カンマ区切りの()閉じに加工します。 <br>
	 * <p>
	 * @param  strSQL 元のSQL
	 * @param selectList サービス契約番号が格納されたリスト
	 * @return editSql 加工後のSQL
	 */
	private String getEditSQL(String strSQL)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(JBSbatKKConst.STR_STA_KAKKO);
		for(int i = 0; i < prg_grp_cd.length; i++)
		{
			if(0 != i)
			{
				sb.append(JBSbatKKConst.STR_COMMA);
			}
			sb.append(JBSbatKKConst.STR_BIND);
		}
		sb.append(JBSbatKKConst.STR_END_KAKKO);
		String editSql = strSQL.replaceAll(EDIT_BF_SQL, EDIT_AF_SQL + sb.toString());
		return editSql;
	}
	/**
	 * 
	 * 料金の主従設定の対象か判定を行います。
	 * <br>
	 * @param  trgtList 判断対象リスト
	 * @param  stat サービス契約ステータス
	 * @return 料金の主従設定の実行判定結果
	 *          0:対象外
	 *          1:新規契約、STB追加
	 *          2:コース変更、コース変更(STB)
	 *          3:STB削除
	 * @throws Exception 
	 */
	private void isSyujuPrcSetTrgt(List<JBSbatCommonDBInterface> trgtList, String stat) throws Exception
	{
		super.logPrint.printDebugLog("isSyujuPrcSetTrgt_START");
		
		// 運用日
		String unyoYmd = super.opeDate;
		
		// 運用日−１日
		String unyoYmdBf = JBSbatDateUtil.adjustDate(unyoYmd, -1);
			
		// 運用日＋１日
		String unyoYmdAf = JBSbatDateUtil.adjustDate(unyoYmd, 1);
		
		for(int i = 0; i < trgtList.size(); i++)
		{
			JBSbatCommonDBInterface rec = trgtList.get(i);
			// サービス契約番号
			String svcKeiNo = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO));
			
			// サービス契約内訳番号
			String svcKeiUcwkNo = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
			
			// サービス契約内訳ステータス
			String svcKeiUcwkStat = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
			
			// サービス開始年月日
			String svcStaYmd = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STA_YMD));
			
			// プラン開始年月日
			String planStaYmd = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD));
			
			// 異動区分
			String idoDiv = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.IDO_DIV));
			
			// 異動区分（異動予約）
			String idoDivRsv = JBSbatStringUtil.Rtrim(rec.getString("IDO_DIV_RSV"));
			
			// 登録運用日
			String addUnyoYmd = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.ADD_UNYO_YMD));
			
			//【OM-2014-0001372】障害対応
			// 世代登録年月日時分秒
			String geneAddDtm = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.GENE_ADD_DTM));
			// 料金コースコード
			String pcrsCd = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD));
			// 料金プランコード
			String pplanCd = JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI_UCWK.PPLAN_CD));
			
			super.logPrint.printDebugLog("svcKeiUcwkNo  ：" + svcKeiUcwkNo);
			super.logPrint.printDebugLog("■■svcKeiUcwkStat：" + svcKeiUcwkStat);
			super.logPrint.printDebugLog("addUnyoYmd    ：" + addUnyoYmd);
			super.logPrint.printDebugLog("svcStaYmd     ：" + svcStaYmd);
			super.logPrint.printDebugLog("planStaYmd    ：" + planStaYmd);
			super.logPrint.printDebugLog("idoDiv        ：" + idoDiv);
			
			super.logPrint.printDebugLog("■■geneAddDtm    OM-2014-0001372    ：" + geneAddDtm);
			super.logPrint.printDebugLog("■■pcrsCd    OM-2014-0001372    ：" + pcrsCd);
			super.logPrint.printDebugLog("■■pplanCd    OM-2014-0001372    ：" + pplanCd);
			
			// 新規契約、STB追加、コース変更、コース変更(STB)の設定を行います。
			// サービス契約内訳ステータス="100(サービス提供中)"、"210(休止中)"、"220(停止中)"の場合
			if (!JKKStrConst.CD00037_DSL_ZM.equals(svcKeiUcwkStat))
			{
//////////////////////// 20140116_OM-2014-0000126_修正開始 ////////////////////////////////////////
//				// 異動区分が"00001(新規契約)"、"00018(eoテレビ変更)"（STB追加）、登録内容修正、工事情報訂正、機器契約変更の場合
//				if (JKKStrConst.CD00576_00001.equals(idoDiv) || IDO_DIV_EO_TV_CHG.equals(idoDiv) ||
//						IDO_DIV_ADD_NYO_SHUSEI.equals(idoDiv) || IDO_DIV_KOJI_INFO_TEISE.equals(idoDiv) ||
//						JKKStrConst.CD00576_00026.equals(idoDiv) )
				// 異動区分が"00001(新規契約)"、"00002(サービス追加)"、"00018(eoテレビ変更)"（STB追加）、登録内容修正、工事情報訂正、機器契約変更の場合
				if (JKKStrConst.CD00576_00001.equals(idoDiv) || IDO_DIV_EO_TV_CHG.equals(idoDiv) || JKKStrConst.CD00576_00002.equals(idoDiv) ||
						IDO_DIV_ADD_NYO_SHUSEI.equals(idoDiv) || IDO_DIV_KOJI_INFO_TEISE.equals(idoDiv) ||
						JKKStrConst.CD00576_00026.equals(idoDiv) )
//////////////////////// 20140116_OM-2014-0000126_修正終了 ////////////////////////////////////////
				{
					//【OM-2014-0001372】障害対応
					//１世代前の料金コース、料金プランの変更が発生していない場合、処理対象外
					if(!"".equals(svcKeiNo) && !"".equals(svcKeiUcwkNo) && !"".equals(geneAddDtm))
					{
						
						executeKK_T_SVC_KEI_UCWK_KK_SELECT_110(new Object[]{svcKeiNo, svcKeiUcwkNo, geneAddDtm, super.opeDate});
						
						JBSbatCommonDBInterface dbInfo_110 = db_KK_T_SVC_KEI_UCWK_110.selectNext();
						
						// サービス契約検索結果がない場合、エラーとし処理中断します。
						if (null == dbInfo_110)
						{
							super.logPrint.printDebugLog("サービス契約内訳スキーマに１世代前のデータが存在しない");
							continue;
						}
						
						// １世代前のサービス契約内訳の料金コースコードと料金プランコードを取得
						String pcrsCd_110 = JBSbatStringUtil.Rtrim(dbInfo_110.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD));
						String pplanCd_110 = JBSbatStringUtil.Rtrim(dbInfo_110.getString(JBSbatKK_T_SVC_KEI_UCWK.PPLAN_CD));
						String svcKeiUcwkStat_110 = JBSbatStringUtil.Rtrim(dbInfo_110.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
						
						super.logPrint.printDebugLog("■■pcrsCd_110    OM-2014-0001372    ：" + pcrsCd_110);
						super.logPrint.printDebugLog("■■pplanCd_110    OM-2014-0001372    ：" + pplanCd_110);
						super.logPrint.printDebugLog("■■svcKeiUcwkStat_110    OM-2014-0001372    ：" + svcKeiUcwkStat_110);
						
						//世代前のサービス契約内訳の料金コースコードと料金プランコードに変更が無い場合　処理対象外
						if(pcrsCd.equals(pcrsCd_110) 
								&& pplanCd.equals(pplanCd_110) 
									&& SVC_KEI_UCWK_STAT_100.equals(svcKeiUcwkStat) 
										&& SVC_KEI_UCWK_STAT_100.equals(svcKeiUcwkStat_110))
						{
							super.logPrint.printDebugLog("１世代前のサービス契約内訳の料金コースコードと料金プランコードと変更なし");
							continue;
						}
						
					}

					
					if(addUnyoDateCheck(unyoYmdBf, addUnyoYmd, unyoYmd, svcKeiUcwkNo))
					{
						//STB追加のデータが存在する場合
						stbAddRecord = rec;
						
						super.logPrint.printDebugLog("新規登録,STB追加(ｻｰﾋﾞｽ契約番号)：：：：：："
								+  JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));
					}
				}
				// コース変更、コース変更(STB)
				// 異動区分が"00009(コース変更)"、異動区分が"00068(コース変更(STB))"の場合
				else if (JKKStrConst.CD00576_00009.equals(idoDiv) || IDO_DIV_COURSE_CHG_STB.equals(idoDiv))
				{
					if(svcStaDateCheck(svcStaYmd, unyoYmd, planStaYmd, unyoYmdAf, unyoYmdBf, addUnyoYmd))
					{
						//コース変更のデータが存在する場合
						courseChgRecord = rec;
						super.logPrint.printDebugLog("STB変更(ｻｰﾋﾞｽ契約番号)：：：：：：" 
								+  JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));
						isCourseChgData = true;
					}
				}
				// 異動区分が"00019(住所変更・登録)の場合
				else if (JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv))
				{
					if(svcStaDateCheck(svcStaYmd, unyoYmd, planStaYmd, unyoYmdAf, unyoYmdBf, addUnyoYmd))
					{
						//コース変更のデータが存在する場合
						courseChgRecord = rec;
						super.logPrint.printDebugLog("住所変更・STB変更(ｻｰﾋﾞｽ契約番号)：：：：：：" 
								+  JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));
						isCourseChgData = true;
					}
					else if(addUnyoDateCheck(unyoYmdBf, addUnyoYmd, unyoYmd, svcKeiUcwkNo))
					{
						//STB追加のデータが存在する場合
						stbAddRecord = rec;
						
						super.logPrint.printDebugLog("住所変更・新規登録,STB追加(ｻｰﾋﾞｽ契約番号)：：：：：："
								+  JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));
					}
				}
				
			}
			// STB削除
			// サービス契約内訳ステータス="910(解約済)"
			else
			{
				// 運用日の前日<=登録運用年月日<=運用日
				if (0 >= unyoYmdBf.compareTo(addUnyoYmd) && 0 <= unyoYmd.compareTo(addUnyoYmd))
				{
					// 最新以外取得
					JBSbatCommonDBInterface dbInfo = searchSvcKeiUcwk(svcKeiUcwkNo, JKKStrConst.CD00037_DSL_ZM);
					
					if(null != dbInfo)
					{
						// 締結済以外であれば処理対象
						if(!"030".equals(JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT))))
						{
							// 解約レコードが存在する場合
							dslRecord = rec;
							super.logPrint.printDebugLog("STB削除(ｻｰﾋﾞｽ契約番号)：：：：：："
									+  JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));
						}
					}
					
				}
			}
			
			// 遅延反映分、コース変更遅延確定対象ファイルに登録されている
			if (chTienList.contains(svcKeiNo))
			{
				// 異動区分が"00009(コース変更)"、異動区分が"00068(コース変更(STB))"の場合
				if (JKKStrConst.CD00576_00009.equals(idoDiv) || IDO_DIV_COURSE_CHG_STB.equals(idoDiv))
				{
					//コース変更のデータが存在する場合
					courseChgRecord = rec;
					
					super.logPrint.printDebugLog("遅延反映分(ｻｰﾋﾞｽ契約番号)：：：：：：" 
							+  JBSbatStringUtil.Rtrim(rec.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));
					
					isCourseChgData = true;
					
				}

			}
			
			// コース変更反映分（異動予約に対象レコードが存在し、サービス契約ステータスがサービス提供中）
			if(JKKStrConst.CD00576_00009.equals(idoDivRsv) && JKKStrConst.CD00037_SVCTK_CHU.equals(stat))
			{
				courseChgRecord = rec;
				isIdoRsvData = true;

			}
			
		}
	
		//OM-2014-0001339 障害対応
		if(isCourseChgData)
		{	
			isIdoRsvData = false;
		}
	
		
		super.logPrint.printDebugLog("isSyujuPrcSetTrgt_END");
	}
	
	/**
	 * サービス契約内訳より最新以外の情報を取得します。
	 * <br>
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param svcKeiUcwkStat サービス契約内訳ステータス
	 * @throws Exception 
	 */
	private JBSbatCommonDBInterface searchSvcKeiUcwk(String svcKeiUcwkNo, String svcKeiUcwkStat) throws Exception
	{
		executeKK_T_SVC_KEI_UCWK_KK_SELECT_090(new Object[]{svcKeiUcwkNo, svcKeiUcwkStat, opeDate});
		
		return db_KK_T_SVC_KEI_UCWK.selectNext();
	}

	
	/**
	 * サービス契約内訳を登録します。
	 * <br>
	 * @param outMap サービス契約内訳検索結果
	 * @param pplanCd 料金プランコード
	 * @param result サービス契約内訳状態
	 * @param sysDate システム日付
	 * @param outMapMain サービス契約内訳（主レコード）検索結果
	 * @param idoDiv00018Flg 異動区分「00018：eoテレビ変更（STB追加）」判定用
	 * @throws Exception 
	 */
	private String addSvckeiUcwk(JBSbatCommonDBInterface outMap, String pplanCd, String result) throws Exception
	{
		super.logPrint.printDebugLog("addSvckeiUcwk_START");
		
		// 世代登録年月日時分秒
		String geneAdd = "";
		
		// 料金プランコード
		String pplanCdAdd = "";
		
		// プラン開始年月日
		String planStaYmd = "";
		
		// プラン終了年月日
		String planEndYmd = "";
		
		// プラン課金開始年月日
		String planChrgStaYmd = "";
		
		// プラン課金終了年月日
		String planChrgEndYmd = "";
		
		// プラン終了種別コード
		String planEndSbtCd = "";
////////////////////////20140128_OM-2014-0000125_追加開始 ////////////////////////////////////////
		// 予約適用年月日
		String rsvAplyYmd = "";
////////////////////////20140128_OM-2014-0000125_追加終了 ////////////////////////////////////////
	
		// システム日付を取得
		String sysdate = JBSbatDateUtil.getSystemDateTimeStamp();
		
		// サービス契約内訳番号を取得
		String svckeiucwkno = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));
		
		// サービス契約番号を取得
		String svckeino = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO));
		
		// 変更前の料金プラン登録
		if("".equals(pplanCd))
		{
			super.logPrint.printDebugLog("★変更前の料金プラン登録開始★");
////////////////////////20140128_OM-2014-0000125_追加開始 ////////////////////////////////////////
			rsvAplyYmd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.RSV_APLY_YMD));
////////////////////////20140128_OM-2014-0000125_追加終了 ////////////////////////////////////////
			
			// 新規契約、eoテレビ変更（STB追加）、登録内容修正、工事情報訂正
			
			if("1".equals(result) && judgeMap.containsKey(svckeiucwkno))
			{
				super.logPrint.printDebugLog("新規契約、eoテレビ変更（STB追加）、登録内容修正、工事情報訂正");
				
				// 世代登録年月日時分秒
				geneAdd = sysdate;
				
				// 料金プランコード
				pplanCdAdd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PPLAN_CD));
				
				// プラン終了種別コード→"1:プラン変更による終了"
				planEndSbtCd = "1";
					
				// プラン開始年月日
				planStaYmd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD));
				
				// サービス課金開始年月日（TMP）→「追加」となるレコードのサービス課金開始年月日
				String svcChrgStaymd = JBSbatStringUtil.Rtrim(
						stbAddRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CHRG_STAYMD));
				
				// プラン終了年月日→設定後サービス課金開始年月日の前日
				planEndYmd = JBSbatDateUtil.adjustDate(svcChrgStaymd, -1);
				
				// プラン課金開始年月日
				planChrgStaYmd = JBSbatStringUtil.Rtrim(
						outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD));
				
				// プラン課金終了年月日→設定後プラン終了年月日
				planChrgEndYmd = planEndYmd;
				
				super.logPrint.printDebugLog(
						"プラン開始年月日→「追加」となるレコードのプラン開始年月日：：：：：：：" + planStaYmd);
				super.logPrint.printDebugLog(
						"プラン終了年月日→設定後サービス課金開始年月日の前日：：：：：：：：：" + planEndYmd);
				super.logPrint.printDebugLog(
						"プラン課金開始年月日：：：：：：：：：：：：：：：：" + planChrgStaYmd);
				super.logPrint.printDebugLog(
						"プラン課金終了年月日→設定後プラン終了年月日：：：：：：：：：：：：："  + planChrgEndYmd);
			}
			// コース変更、コース変更(STB)
			else if("2".equals(result) && judgeMap.containsKey(svckeiucwkno))
			{
				super.logPrint.printDebugLog("コース変更、コース変更(STB)");
				
				// 世代登録年月日時分秒
				geneAdd = sysdate;
				
				// 料金プランコード
				pplanCdAdd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PPLAN_CD));
				
				// プラン開始年月日
				planStaYmd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD));
				
				// 異動予約コース変更反映分の場合
				if(isIdoRsvData) 
				{
					// プラン終了年月日→運用日
					planEndYmd = opeDate;
					// プラン課金終了年月日→プラン終了年月日
					planChrgEndYmd = planEndYmd;
				} 
				else 
				{
					// プラン終了年月日→抽出対象となったプラン開始年月日の前日
					planEndYmd = JBSbatDateUtil.adjustDate(JBSbatStringUtil.Rtrim(courseChgRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD)), -1);
					// プラン課金終了年月日→抽出対象のプラン課金開始年月日の前日
					planChrgEndYmd = JBSbatDateUtil.adjustDate(JBSbatStringUtil.Rtrim(courseChgRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD)), -1);
				}
				
				// プラン課金開始年月日
				planChrgStaYmd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD));
				
				// プラン終了種別コード→"1:プラン変更による終了"
				planEndSbtCd = "1";
				
				super.logPrint.printDebugLog("プラン開始年月日：：：：：：：：：：：：：：：：：" + planStaYmd);
				super.logPrint.printDebugLog("プラン課金開始年月日：：：：：：：：：：：：：：：" + planChrgStaYmd);
				super.logPrint.printDebugLog("プラン課金終了年月日：：：：：：：：：：：：：：：" + planChrgEndYmd);
			}
			// STB削除
			else if("3".equals(result) || !judgeMap.containsKey(svckeiucwkno))
			{
				super.logPrint.printDebugLog("STB削除");
				
				// 世代登録年月日時分秒
				geneAdd = sysdate;
				
				// 料金プランコード
				pplanCdAdd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PPLAN_CD));
				
				// プラン開始年月日
				planStaYmd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD));
				
				// プラン終了年月日→抽出対象のサービス課金終了年月日の月末日
				String svc_chrrg_endymd = JBSbatStringUtil.Rtrim(dslRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CHRG_ENDYMD));
				if("".equals(svc_chrrg_endymd))
				{
					// サービス課金終了年月日が空の場合（ありえないパターン）
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0090TE, 
							new String[] {"抽出対象となったサービス契約内訳のサービス課金終了年月日が取得できません。サービス契約番号：" +
							svckeino + "、サービス契約内訳番号：" + JBSbatStringUtil.Rtrim(dslRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO))});
					throw new JBSbatBusinessError();
				}
				else
				{
					planEndYmd = svc_chrrg_endymd.substring(0, 6) + 
							JBSbatDateUtil.getEndOfMonth(svc_chrrg_endymd.substring(0, 6));
				}
				
				// プラン課金開始年月日
				planChrgStaYmd = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD));
				
				// プラン課金終了年月日→プラン終了年月日
				planChrgEndYmd = planEndYmd;
				
				// プラン終了種別コード→"1:プラン変更による終了"
				planEndSbtCd = "1";
			}
		}
		// 変更後の料金プラン登録
		else
		{
			super.logPrint.printDebugLog("★変更後の料金プラン登録開始★");
			super.logPrint.printDebugLog("pplanCd：" + pplanCd);
////////////////////////20140128_OM-2014-0000125_追加開始 ////////////////////////////////////////
			rsvAplyYmd = super.opeDate;
////////////////////////20140128_OM-2014-0000125_追加終了 ////////////////////////////////////////
			
			// 世代登録年月日時分秒
			geneAdd = sysdate;
			
			// 料金プランコード
			pplanCdAdd = pplanCd;
			
			// プラン終了年月日→"20991231"
			planEndYmd = "20991231";
			
			// プラン課金終了年月日→"20991231"
			planChrgEndYmd = "20991231";
			
			// プラン終了種別コード→""
			planEndSbtCd = "";
			
			// 新規契約、eoテレビ変更（STB追加）
			if("1".equals(result) && judgeMap.containsKey(svckeiucwkno))
			{
				super.logPrint.printDebugLog("新規契約、eoテレビ変更（STB追加）");
				
				// プラン開始年月日→抽出対象のサービス課金開始年月日
				planStaYmd = JBSbatStringUtil.Rtrim(stbAddRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CHRG_STAYMD));
				
				// プラン課金開始年月日→プラン開始年月日
				planChrgStaYmd = planStaYmd;
			}
			// コース変更、コース変更(STB)
			else if("2".equals(result) && judgeMap.containsKey(svckeiucwkno))
			{
				super.logPrint.printDebugLog("コース変更、コース変更(STB)");
				
				// 異動予約コース変更反映分の場合
				if(isIdoRsvData) 
				{	// プラン開始年月日→運用日+1
					planStaYmd = JBSbatDateUtil.adjustDate(opeDate, 1);
					// プラン課金開始年月日→プラン開始年月日
					planChrgStaYmd = planStaYmd;
				} 
				
				else 
				{
					// プラン開始年月日→抽出対象のプラン開始年月日
					planStaYmd = JBSbatStringUtil.Rtrim(courseChgRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD));
					// プラン課金開始年月日→抽出対象のプラン課金開始年月日
					planChrgStaYmd = JBSbatStringUtil.Rtrim(courseChgRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD));
					
				}
				super.logPrint.printDebugLog("プラン開始年月日→変更前プラン終了年月日の翌月月初日：" + planStaYmd);
				super.logPrint.printDebugLog("プラン課金開始年月日→プラン課金開始年月日：：：：：：" + planChrgStaYmd);
			}
			// STB削除
			else if("3".equals(result) || !judgeMap.containsKey(svckeiucwkno))
			{
				super.logPrint.printDebugLog("STB削除");
				
				// プラン開始年月日→抽出対象のサービス課金終了年月日の翌月１日
				String chrgEndYmd = JBSbatStringUtil.Rtrim(dslRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CHRG_ENDYMD));
				if(8 == chrgEndYmd.length())
				{
					planStaYmd = JBSbatDateUtil.adjustMonth(chrgEndYmd, 1).substring(0, 6) + "01";
				}
				else
				{
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0090TE, 
							new String[] {"抽出対象となったサービス契約内訳のサービス課金終了年月日が取得できません。サービス契約番号：" +
							svckeino + "、サービス契約内訳番号：" + JBSbatStringUtil.Rtrim(dslRecord.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO))});
					throw new JBSbatBusinessError();
				}
				
				// プラン課金開始年月日→プラン開始年月日
				planChrgStaYmd = planStaYmd;
			}
		}
		
		// 登録用データ格納
		Object[] param_add = new Object[79];
		
		// サービス契約内訳番号
		param_add[0] = svckeiucwkno;
		
		// 世代登録年月日時分秒 → システム日付を設定
		param_add[1] = geneAdd;
		
		// サービス契約内訳ステータス
		param_add[2] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT));
		
		// サービス契約番号
		param_add[3] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO));
		
		// 申込明細番号
		param_add[4] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.MSKM_DTL_NO));
		
		// 料金コースコード
		param_add[5] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD));
		
		// 料金プランコード
		param_add[6] = pplanCdAdd;
		
		// 提供方式契約番号
		param_add[7] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.TK_HOSHIKI_KEI_NO));
		
		// 支払い方法継続フラグ
		param_add[8] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PAYWAY_KEIZOKU_FLG));
		
		// WEBオプション追加不可フラグ
		param_add[9] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.WEB_OP_ADD_FAIL_FLG));
		
		// 業務連絡備考
		param_add[10] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.WORK_RRK_BIKO));
		
		// サービス利用開始希望年月日
		param_add[11] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_USE_STA_KIBO_YMD));
		
		// サービス利用開始希望時間帯コード
		param_add[12] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_UEST_KBTMZ_CD));
		
		// サービス利用開始希望時間コード
		param_add[13] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_UEST_KBTM_CD));
		
		// 予約適用開始希望年月日
		param_add[14] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.RSV_TSTA_KIBO_YMD));
		
		// 審査結果送信コード
		param_add[15] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SKEKKA_SEND_CD));
		
		// サービス契約内訳後続業務依頼年月日
		param_add[16] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_KZKWRK_REQYMD));
		
		// 照査年月日
		param_add[17] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SHOSA_YMD));
		
		// 照査取消年月日
		param_add[18] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SHOSA_CL_YMD));
		
		// 試用加入年月日
		param_add[19] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.FTRIAL_KANYU_YMD));
		
		// 試用期間終了年月日
		param_add[20] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.FTRIAL_PRD_ENDYMD));
		
		// 本加入年月日
		param_add[21] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.HONKANYU_YMD));
		
		// 本加入移行期限年月日
		param_add[22] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.HONKANYU_IKO_KIGEN_YMD));
		
		// 契約締結年月日
		param_add[23] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.KEI_CNC_YMD));
		
		// 予約適用年月日
////////////////////////20140128_OM-2014-0000125_修正開始 ////////////////////////////////////////
		//param_add[24] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.RSV_APLY_YMD));
		param_add[24] = rsvAplyYmd;
////////////////////////20140128_OM-2014-0000125_修正終了 ////////////////////////////////////////
		
		// 予約取消年月日
		param_add[25] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.RSV_CL_YMD));
		
		// 予約適用コード
		param_add[26] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.RSV_APLY_CD));
		
		// プラン開始年月日
		param_add[27] = planStaYmd;
		
		// プラン終了年月日
		param_add[28] = planEndYmd;
		
		// プラン課金開始年月日
		param_add[29] = planChrgStaYmd;
		
		// プラン課金終了年月日
		param_add[30] = planChrgEndYmd;
		
		// プラン終了種別コード
		param_add[31] = planEndSbtCd;
		
		// サービスキャンセル年月日
		param_add[32] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CANCEL_YMD));
		
		// サービスキャンセル理由コード
		param_add[33] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CANCEL_RSN_CD));
		
		// サービス開始年月日
		param_add[34] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STA_YMD));
		
		// サービス課金開始年月日
		param_add[35] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CHRG_STAYMD));
		
		// サービス停止年月日
		param_add[36] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STP_YMD));
		
		// サービス停止理由コード
		param_add[37] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STP_RSN_CD));
		
		// サービス停止解除年月日
		param_add[38] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STP_RLS_YMD));
		
		// サービス停止解除理由コード
		param_add[39] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STP_RLS_RSN_CD));
		
		// 休止中断コード
		param_add[40] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PAUSE_STP_CD));
		
		// サービス休止年月日
		param_add[41] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_PAUSE_YMD));
		
		// サービス休止理由コード
		param_add[42] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_PAUSE_RSN_CD));
		
		// サービス休止理由メモ
		param_add[43] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_PAUSE_RSN_MEMO));
		
		// サービス休止解除年月日
		param_add[44] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_PAUSE_RLS_YMD));
		
		// サービス休止解除理由コード
		param_add[45] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_PAUSE_RLS_RSN_CD));
		
		// サービス休止解除理由メモ
		param_add[46] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_PAUSE_RLS_RSN_MEMO));
		
		// サービス終了年月日
		param_add[47] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_ENDYMD));
		
		// サービス課金終了年月日
		param_add[48] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CHRG_ENDYMD));
		
		// サービス解約起算年月日
		param_add[49] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DSL_KISAN_YMD));
		
		// サービス解約年月日
		param_add[50] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DSL_YMD));
		
		// サービス解約理由コード
		param_add[51] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DLRE_CD));
		
		// サービス解約理由メモ
		param_add[52] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DLRE_MEMO));
		
		// サービス解約手続完了フラグ
		param_add[53] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DSL_TTDKI_FIN_FLG));
		
		// 回復年月日
		param_add[54] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.KAIHK_YMD));
		
		// サービスキャンセル取消年月日
		param_add[55] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_CANCEL_CL_YMD));
		
		// サービス解約取消年月日
		param_add[56] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DSL_CL_YMD));
		
		// サービス契約内訳引継発生年月日
		param_add[57] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVKEIUW_HKHASYMD));
		
		// 課金開始年月日補正有無
		param_add[58] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.CHRG_STA_YMD_HOSEI_UM));
		
		// サービス休止課金開始年月日
		param_add[59] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_PAUSE_CHRG_STA_YMD));
		
		// 違約金発生コード
		param_add[60] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.PNLTY_HASSEI_CD));
		
		// 異動区分→"00066:TV契約主従料金設定"
		param_add[61] = IDO_DIV_TV_SYUJU_PRC_SET;
		
		// 照査解約完了コード
		param_add[62] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SHOSA_DSL_FIN_CD));
		
		// サービス提供物消去処理実施年月日時分秒
		param_add[63] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVCTK_BUT_DEL_TRN_JSSI_DTM));
		
		// 継続元サービス契約内訳番号
		param_add[64] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.KEIZK_MT_SVC_KEI_UCWK_NO));
		// 継続後契約変更手続中フラグ
		param_add[65] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.KEIZK_AF_KEI_CHGECHU_FLG));
		
		// 登録年月日時分秒
		param_add[66] = sysdate;
		
		// 登録オペレータアカウント
		param_add[67] = batchUserId;
		
		// 更新年月日時分秒
		param_add[68] = sysdate;
		
		// 更新オペレータアカウント
		param_add[69] = batchUserId;
		
		// 削除年月日時分秒
		param_add[70] = "";
		
		// 削除オペレータアカウント
		param_add[71] = "";
		
		// 無効フラグ → 0：有効を設定
		param_add[72] = "0";
		
		// 登録運用年月日
		param_add[73] = "";
		
		// 登録処理ID
		param_add[74] = "";
		
		// 更新運用年月日
		param_add[75] = "";
		
		// 更新処理ID
		param_add[76] = "";
		
		// 削除運用年月日
		param_add[77] = "";
		
		// 削除処理ID
		param_add[78] = "";
		
		// サービス契約内訳の登録を行います。
		this.executeKK_T_SVC_KEI_UCWK_PKINSERT(param_add);
		
		// サービス契約内訳番号に紐づくサブクラスの登録を行います。
		JKKBatCommon.createSubTypeKK0161(commonItem, svckeiucwkno, 
			JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.GENE_ADD_DTM)), sysdate);
		
		super.logPrint.printDebugLog("addSvckeiUcwk_END");
		
		return sysdate;
	}
	
	/**
	 * 
	 * 進捗情報の登録処理を行います。
	 * 
	 * @param outMap サービス契約内訳検索結果
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void addPrg(JBSbatCommonDBInterface outMap) throws Exception
	{
		// システム日付を取得
		String sysdate = JBSbatDateUtil.getSystemDateTimeStamp();
		
		//共通部品（進捗.異動年月日取得部品）より異動年月日時分秒（またはシステム日付）を取得
		String idoDtm = JKKBatCommon.getIdoDtmMax(commonItem, outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO), IDO_DIV_TV_SYUJU_PRC_SET, stmt);
		
		// 登録する進捗のパラメータを設定します
		String [] setParam = {
				JBSbatStringUtil.padNumFormString(
				JBSbatOracleSeqUtil.getNextSeq(commonItem.getConnection(), SEQ_PRG_NO), 12),		// 進捗番号 → 自動採番
				"",																					// 申込明細番号 → NULL（未設定）
				"",																					// 請求契約番号 → NULL（未設定）
				"",																					// 請求方法番号（口座） → NULL（未設定）
				"",																					// 請求方法番号（クレジットカード） → NULL（未設定）
				JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_NO)),		// サービス契約番号 → サービス契約内訳.サービス契約番号
				JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO)),	// サービス契約内訳番号 → 〃.サービス契約内訳番号
				"",																					// サービス契約回線内訳番号 → NULL（未設定）
				"",																					// 機器提供サービス契約番号 → NULL（未設定）
				"",																					// オプションサービス契約番号 → NULL（未設定）
				"",																					// 請求オプションサービス契約番号 → NULL（未設定）
				"",																					// サブオプションサービス契約番号 → NULL（未設定）
				"",																					// 割引サービス契約番号 → NULL（未設定）
				IDO_DIV_TV_SYUJU_PRC_SET,															// 異動区分 → "00066"（TV契約主従料金設定）
				idoDtm,																				// 異動年月日時分秒 → 共通部品（進捗.異動年月日取得部品）からの戻り値を設定。
				PRG_STAT_SYUJU_PRC_SET_FIN,															// 進捗ステータス → "1430"（TV契約主従料金設定完了）
				super.opeDate + sysdate.substring(8),												// 進捗年月日時分秒 → バッチ運用日+実施日のhhmmssSSSを設定。
				"",																					// 進捗メモ → NULL（未設定）
				"",																					// 進捗特記事項１ → NULL（未設定）
				"",																					// 進捗特記事項２ → NULL（未設定）
				sysdate,																			// 登録年月日時分秒 →  システム日時
				batchUserId,		 																// 登録オペレータアカウント → バッチ更新者ＩＤ
				sysdate,																			// 更新年月日時分秒 →  システム日時
				batchUserId,																		// 更新オペレータアカウント → バッチ更新者ＩＤ
				"",																					// 削除年月日時分秒 → NULL（未設定）
				"",																					// 削除オペレータアカウント → NULL（未設定）
				"0",																				// 無効フラグ → "0"(有効)
				"",																					// 登録運用年月日 → NULL（未設定）
				"",																					// 登録処理ID → NULL（未設定）
				"",																					// 更新運用年月日 → NULL（未設定）
				"",																					// 更新処理ID → NULL（未設定）
				"",																					// 削除運用年月日 → NULL（未設定）
				""};																				// 削除処理ID → NULL（未設定）
		executeKK_T_PRG_PKINSERT(setParam);
	}

	/**
	 * サービス契約排他制御テーブルの排他処理を行います。
	 * <br>
	 * @param svc_kei_no サービス契約番号
	 * @throws Exception 
	 */
	private void forUpdeteSvkeiExcCtrl(String svc_kei_no) throws Exception
	{
		// SQL実行結果取得用mapを生成（サービス契約TBL）
		JBSbatCommonDBInterface svkeiExcCtrlMap = new JBSbatCommonDBInterface();
		
		// サービス契約排他制御テーブルに排他制御処理を実行します
		svkeiExcCtrlMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO, svc_kei_no);
		JBSbatCommonDBInterface dbmap =db_KK_T_SVKEI_EXC_CTRL.selectByPrimaryKeysForUpdateWait(svkeiExcCtrlMap);
		
		if(null == dbmap)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{KK_T_SVKEI_EXC_CTRL, STR_KK_T_SVKEI_EXC_CTRL_INFO + svc_kei_no});
		}
	
	}

	/**
	 * サービス契約排他制御への更新処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.更新処理を実行します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param  svcKeiNo  サービス契約番号。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void upDateSvkeiExcCtrl(String svcKeiNo) throws Exception
	{
		// サービス契約排他制御の最終更新年月日時分秒の更新を行う。
		JBSbatCommonDBInterface paramMap = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		// サービス契約番号を設定
		whereMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO, svcKeiNo);
		// 最終更新年月日時分秒を更新。
		paramMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM, JBSbatDateUtil.getSystemDateTimeStamp());
		db_KK_T_SVKEI_EXC_CTRL.updateByPrimaryKeys(whereMap, paramMap);
	}
	
	/**
	 * 引数で指定されたCSVファイル名からファイルの内容を一行ずつ読取り、カンマ区切りの文字を
	 * List格納する。格納した行データのArrayListをArrayList配列に順番に格納し返却する。
	 * 引数で指定されたファイルパスを取得し、返却する。
	 * @param filePath ファイル名(パスを含む)
	 * @throws Exception 例外
	 */
	private void setChTienList(String filePath) throws Exception
	{
		//コース変更遅延確定サービス契約リスト
		chTienList = new ArrayList<String>();
		
		// 取得出来なかった場合、エラーとします。
		if (0 == filePath.length())
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"フリー項目：ファイル名"});
		}
		
		//KKIFM462ファイルを読み込みしてサービス契約番号を保持
		JBSbatInputFileUtil tmpReader = null;
		try
		{
			tmpReader = new JBSbatInputFileUtil(filePath);
			tmpReader.setEncode(JKKBatConst.SJIS);			// 文字コード
			tmpReader.setLine(JKKStrConst.LINE_LF);			// 改行コード
			tmpReader.createReader();

			String line = null;
			String  svcKeiNo = null;
			while(null != (line = tmpReader.readLine()))
			{
				line = line.replaceAll("\"", "");
				String[] dataList = line.split(JKKBatConst.S_SEP_CAM);
				svcKeiNo = dataList[0];
				if(null != svcKeiNo)
				{
					chTienList.add(svcKeiNo);
				}
			}
		}
		catch (IOException e)
		{
			throw new JBSbatBusinessException("EKKB0020CE", new String[]{filePath});
		}
		finally
		{
			if (null != tmpReader) 
			{
				tmpReader.close();
			}
		}

	}

	/**
	 * 登録運用年月日の期間チェック処理を行います。<br>
	 * 
	 * @param unyoYmdBf 運用日の前日
	 * @param addUnyoYmd 登録運用年月日
	 * @param unyoYmd 運用日
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @return boolean addUnyoDateCheck()の結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean addUnyoDateCheck(String unyoYmdBf, String addUnyoYmd, String unyoYmd, String svcKeiUcwkNo) throws Exception
	{
		super.logPrint.printDebugLog("運用日の前日：：：：：：" +  unyoYmdBf);
		super.logPrint.printDebugLog("登録運用年月日：：：：：：：：" +  addUnyoYmd);
		super.logPrint.printDebugLog("運用日：：：：：：：：：" +  unyoYmd);
		super.logPrint.printDebugLog("運用日前日compareTo(登録運用年月日)：：：：：：" +  unyoYmdBf.compareTo(addUnyoYmd));
		super.logPrint.printDebugLog("運用日compareTo(登録運用年月日)：：：：：：" +  unyoYmd.compareTo(addUnyoYmd));
		
		// 運用日の前日<=登録運用年月日<=運用日
		if (0 >= unyoYmdBf.compareTo(addUnyoYmd) && 0 <= unyoYmd.compareTo(addUnyoYmd))
		{
			// 最新以外取得
			JBSbatCommonDBInterface dbInfo = searchSvcKeiUcwk(svcKeiUcwkNo, JKKStrConst.CD00037_DSL_ZM);
			
			if (null != dbInfo)
			{
				//STB追加のデータが存在する場合
				return true;
			}
		}
		return false;
	}

	/**
	 * サービス開始日の期間チェック処理を行います。<br>
	 * 
	 * @param svcStaYmd 運用日の前日
	 * @param unyoYmd 登録運用年月日
	 * @param planStaYmd 運用日
	 * @param unyoYmdAf 運用日＋１日
	 * @param unyoYmdBf 運用日−１日
	 * @param addUnyoYmd 登録運用年月日
	 * @return boolean addUnyoDateCheck()の結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean svcStaDateCheck(String svcStaYmd, String unyoYmd, String planStaYmd, String unyoYmdAf, String unyoYmdBf, String addUnyoYmd) throws Exception
	{
		super.logPrint.printDebugLog("サービス開始年月日：：：：：：" +  svcStaYmd);
		super.logPrint.printDebugLog("処理日：：：：：：：：：：：：" +  unyoYmd);
		super.logPrint.printDebugLog("：：：：：：：：：：：：：：：>" +  svcStaYmd.compareTo(unyoYmd));
		
		// サービス開始年月日＜処理日
		if (0 > svcStaYmd.compareTo(unyoYmd))
		{
			super.logPrint.printDebugLog("プラン開始年月日：：：：：：" + planStaYmd);
			super.logPrint.printDebugLog("処理日：：：：：：：：：：：" + unyoYmd);
			
			// プラン開始年月日=運用日+１または、プラン開始年月日=運用日
			if (planStaYmd.equals(unyoYmd) || planStaYmd.equals(unyoYmdAf))
			{
				//コース変更のデータが存在する場合
				return true;
				
			}
			
			//プラン開始年月日<処理日(工事有りの場合)
			if(0 > planStaYmd.compareTo(unyoYmd)){
				// 運用日の前日<=登録運用年月日<=運用日
				if (0 >= unyoYmdBf.compareTo(addUnyoYmd) && 0 <= unyoYmd.compareTo(addUnyoYmd)){
					//コース変更のデータが存在する場合
					return true;
				}
			}
		}
		return false;
	}

}
