/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatAKHoseiTgWribInfUpd
*	ソースファイル名	：JBSbatAKHoseiTgWribInfUpd.java
*	作成者				：富士通　
*	作成日				：2024年04月26日
*＜機能概要＞
*　補正対象割引情報更新部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v71.00.00	2024/04/26	FJ)北谷		新規作成 ANK-4491-00-00_セット割補正機能の自動化対応
*********************************************************************/
package eo.business.service;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.common.constant.JACStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatAKHoseiTgWribInfUpd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/

	/** テーブル(割引サービス契約)*/
	private static final String D_TBL_NAME_KK_T_WRIB_SVC_KEI = "KK_T_WRIB_SVC_KEI";
	/** テーブル(割引サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_WRISVC_KEI_UCWK = "KK_T_WRISVC_KEI_UCWK";

	/** テーブルアクセスクラス(割引サービス契約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI = null;
	/** テーブルアクセスクラス(割引サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_WRISVC_KEI_UCWK = null;


	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	//件数が少ない前提で全部読み込んで処理する
	/** 割引補正情報（割引サービス契約）(補正前)リスト*/
	private List<String[]> akifm143MaeList = new ArrayList<String[]>();
	/** 割引補正情報（割引サービス契約）(補正後)リスト*/
	private List<String[]> akifm143AtoList = new ArrayList<String[]>();
	/** 割引補正情報（割引サービス契約内訳）(補正前)リスト*/
	private List<String[]> akifm144MaeList = new ArrayList<String[]>();
	/** 割引補正情報（割引サービス契約内訳）(補正後)リスト*/
	private List<String[]> akifm144AtoList = new ArrayList<String[]>();
	
	/** 処理対象割引サービス契約番号リスト */
	private List<String> wribSvcKeiNoList = new ArrayList<String>();
	
	/** 割引補正情報（割引サービス契約）(結果) */
	private JBSbatBusinessFileUtil akifm14301 = null;
	/** 割引補正情報（割引サービス契約内訳）(結果) */
	private JBSbatBusinessFileUtil akifm14401 = null;
	
	/** タブ */
	private static final String TAB = "\t";
	
	/** 出力ファイル定義 */
	private static final String PRM_OTD = "OTD";
	

	/** 補正前後区分　1：補正前 */
	private static final String HOSEI_BA_DIV_BF = "1";
	/** 補正前後区分　2：補正後 */
	private static final String HOSEI_BA_DIV_AF = "2";
	
	/** 補正パターン　U：更新 */
	private static final String HOSEI_PTN_UPDATE = "U";
	/** 補正パターン　I：挿入 */
	private static final String HOSEI_PTN_INSERT = "I";
	
	/** 無効フラグ　1：無効 */
	private static final String MK_FLG_1 = "1";
	
	/** AKIFM143,144項目の位置 */
	private static final int POS_HOSEI_RSLT = 0;              //補正結果
	private static final int POS_HOSEI_BFAF = 1;              //補正前補正後
	private static final int POS_REC_NO = 2;                  //行番号
	private static final int POS_UPDINS = 4;                  //Update or Insert
	private static final int POS_WRIB_SVC_KEI_NO = 5;         //割引サービス契約番号
	private static final int POS143_GENE_ADD_DTM = 6;         //世代登録年月日時分秒
	private static final int POS143_RSV_APLY_YMD = 17;        //予約適用年月日
	private static final int POS143_PLAN_STAYMD = 21;         //プラン開始年月日
	private static final int POS143_PLAN_ENDYMD = 22;         //プラン終了年月日
	private static final int POS143_PLAN_CHRG_STAYMD = 23;    //プラン課金開始年月日
	private static final int POS143_PLAN_CHRG_ENDYMD = 24;    //プラン課金終了年月日
	private static final int POS143_SVC_STA_YMD = 28;         //サービス開始年月日
	private static final int POS143_SVC_CHRG_STAYMD = 29;     //サービス課金開始年月日
	private static final int POS143_SVC_ENDYMD = 30;          //サービス終了年月日
	private static final int POS143_SVC_CHRG_ENDYMD = 31;     //サービス課金終了年月日
	private static final int POS143_SVC_DSL_YMD = 32;         //サービス解約年月日
	private static final int POS143_WRTGKEI_SVC_PAUSE_YMD = 54; //割引対象契約サービス休止年月日
	private static final int POS143_MK_FLG = 62;              //無効フラグ
	
	private static final int POS144_WRIB_SVC_KEI_UCWK_NO = 6; //割引サービス契約内訳番号
	private static final int POS144_GENE_ADD_DTM = 7;         //世代登録年月日時分秒
	private static final int POS144_SVC_CHRG_STAYMD = 11;     //サービス課金開始年月日
	private static final int POS144_SVC_CHRG_ENDYMD = 12;     //サービス課金終了年月日
	private static final int POS144_MK_FLG = 21;              //無効フラグ
	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_WRIB_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);
		db_KK_T_WRISVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRISVC_KEI_UCWK);

		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");
		// freeItemを取得
		String freeItem = super.commonItem.getFreeItem();
		
		// freeItemが設定されている場合
		if(freeItem != null && freeItem.length() != 0)
		{
			// フリー項目区切文字で分割する。
			String[] freeItems = freeItem.split(JACStrConst.FREE_DIV);
			
			// 入力ファイル読み込み
			readAKIFM143_144(freeItems[0],"143");
			readAKIFM143_144(freeItems[1],"144");
			
			// 出力ファイルの生成
			this.akifm14301 = createFile(freeItems[2], freeItems[3]);
			this.akifm14401 = createFile(freeItems[4], freeItems[5]);

		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// 処理対象の割引サービス契約番号が0件なら終了
		if(wribSvcKeiNoList == null || wribSvcKeiNoList.size() <= 0){
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute] 0件");
			return null;
		}
		
		boolean commitFlg = true;
		
		// 処理対象の割引サービス契約番号でループ
		for(int i=0; i<wribSvcKeiNoList.size(); i++){
			
			//今見ている割引サービス契約番号
			String syoriTrgtWribSvcKeiNo = wribSvcKeiNoList.get(i);
			
			try{
				//割引サービス契約（akifm143AtoList）、割引サービス契約内訳（akifm144AtoList）を処理
				boolean result = hoseiWaribiki(syoriTrgtWribSvcKeiNo);
				
				if(!result){
					//更新登録失敗
					commitFlg = false;
				}
			}catch(Exception e){
				//エラー発生
				commitFlg = false;
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]例外発生" + e.toString());
			}
	
			//commitFlgがtrueならコミット　falseならロールバック
			if(commitFlg){
				//コミット
				commonItem.getConnection().commit();
				
				//143,144の前後のListにOKを設定
				setOKNG(syoriTrgtWribSvcKeiNo, "OK");
				
			}else{
				//ロールバック
				commonItem.getConnection().rollback();
				
				//143,144の前後のListにNGを設定
				setOKNG(syoriTrgtWribSvcKeiNo, "NG");
				
				//commitFlgはtrueに戻す
				commitFlg = true;
			}
			
		}
		
		
		//ファイル出力
		outputAKIFM14301();
		outputAKIFM14401();
		
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.akifm14301);
		JCCBatCommon.closeBusinessFileUtil(this.akifm14401);
		// DBアクセスクラスをクローズします

		db_KK_T_WRIB_SVC_KEI.close();
		db_KK_T_WRISVC_KEI_UCWK.close();

		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
		/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	

	/**
	 * ファイル読み込み
	 * 
	 * @param  filePath  ファイルパス＋ファイル名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void readAKIFM143_144(String filePath, String hozonsaki) throws IOException
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][readAKIFM143_144]");
		
		List<String[]> hozonsakiMaeList = null;
		List<String[]> hozonsakiAtoList = null;
		if(hozonsaki.equals("143")){
			hozonsakiMaeList = akifm143MaeList;
			hozonsakiAtoList = akifm143AtoList;
		}else if(hozonsaki.equals("144")){
			hozonsakiMaeList = akifm144MaeList;
			hozonsakiAtoList = akifm144AtoList;
		}
		
		// ファイル読み込み準備
		JBSbatInputFileUtil inFileUtil = new JBSbatInputFileUtil(filePath);
		inFileUtil.setEncode(JACStrConst.ENCODE_SJIS);
		inFileUtil.createReader();
		
		String sLine = null;
		
		// 入力ファイルのレコード件数分繰り返す
		while(true)
		{
			// 行文字列を取得
			sLine = inFileUtil.readLine();
			
			// レコード存在判定
			if (sLine == null)
			{
				// ループを抜ける
				break;
			}
			
			//補正結果格納項目を追加
			sLine = "\t"+ sLine;
			
			// 請求契約情報ファイルの要素分割
			String[] sLineArray = sLine.split(TAB,-1);
			if(HOSEI_BA_DIV_BF.equals(sLineArray[POS_HOSEI_BFAF])){
				hozonsakiMaeList.add(sLineArray);
			}else{
				hozonsakiAtoList.add(sLineArray);
				
				//処理対象の割引サービス契約番号をリスト化する。 補正前レコードには割引サービス契約番号が入っていない場合があるので補正後レコードで見る
				if(hozonsaki.equals("143") && !wribSvcKeiNoList.contains(sLineArray[POS_WRIB_SVC_KEI_NO])){
					wribSvcKeiNoList.add(sLineArray[POS_WRIB_SVC_KEI_NO]);
				}
			}
		}
		// ファイルを閉じる
		if (inFileUtil != null)
		{
			inFileUtil.close();
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][readAKIFM143_144]");
		return;
	}
	
	
	/**
	 * ファイル生成
	 * 
	 * @param  filePath  ファイルパス＋ファイル名
	 * @param  fileDef   ファイル定義
	 * @return fileUtil  ファイルインスタンス
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatBusinessFileUtil createFile(String filePath, String fileDef) throws Exception 
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createFile]");

		JBSbatOutputFileUtil dataFile 		= new JBSbatOutputFileUtil(filePath);
		String tempFileDefPath 				= JBSbatAplConst.getAplConstValue(PRM_OTD) + fileDef;
		JBSbatDefFileUtil trailerFileDef 	= new JBSbatDefFileUtil(tempFileDefPath, dataFile);
		
		// ファイルの生成
		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(filePath
																			, dataFile.getEncode()
																			, JACBatCommon.chgKaigyo(dataFile.getLine())
																			, trailerFileDef.getDelimiter());	
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createFile]");
		return fileUtil;
	}
	
	
	/**
	 * 割引サービス契約、割引サービス契約内訳を補正
	 * 
	 * @param inMap
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private boolean hoseiWaribiki(String syoriTrgtWribSvcKeiNo) throws Exception
	{
		
		// 割引サービス契約
		for(String[] akifm143 :akifm143AtoList){
			if(syoriTrgtWribSvcKeiNo.equals(akifm143[POS_WRIB_SVC_KEI_NO])){
				//処理件数
				int count=0;
				
				//updateまたはinsert
				if(HOSEI_PTN_INSERT.equals(akifm143[POS_UPDINS])){
					count = executeKK_T_WRIB_SVC_KEI_PKINSERT(akifm143);
					
				}else{ //UPDATE
					if(MK_FLG_1.equals(akifm143[POS143_MK_FLG])){
						//無効化のUPDATE
						count = executeKK_T_WRIB_SVC_KEI_PKMKUPDATE(akifm143);
					}else{
						//普通のUPDATE
						count = executeKK_T_WRIB_SVC_KEI_PKUPDATE(akifm143);
					}
				}
				if(count <= 0){
					//登録更新できなかった
					return false;
				}
			}
		}
		
		// 割引サービス契約内訳
		for(String[] akifm144 :akifm144AtoList){
			if(syoriTrgtWribSvcKeiNo.equals(akifm144[POS_WRIB_SVC_KEI_NO])){
				//処理件数
				int count=0;
				
				//updateまたはinsert
				if(HOSEI_PTN_INSERT.equals(akifm144[POS_UPDINS])){
					count = executeKK_T_WRISVC_KEI_UCWK_PKINSERT(akifm144);
					
				}else{ //UPDATE
					if(MK_FLG_1.equals(akifm144[POS144_MK_FLG])){
						//無効化のUPDATE
						count = executeKK_T_WRISVC_KEI_UCWK_PKMKUPDATE(akifm144);
					}else{
						//普通のUPDATE
						count = executeKK_T_WRISVC_KEI_UCWK_PKUPDATE(akifm144);
					}
				}
				if(count <= 0){
					//登録更新できなかった
					return false;
				}
			}
		}
		
		//正常終了
		return true;
	}
	
	/**
	 * 補正結果にOK/NGを設定
	 * 
	 * @param inMap
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setOKNG(String syoriTrgtWribSvcKeiNo, String okng) throws Exception
	{
		// 割引サービス契約番号から行番号を確認
		List<String> recNoList143 = new ArrayList<String>();
		List<String> recNoList144 = new ArrayList<String>();
		
		for(String[] akifm143 :akifm143AtoList){ //補正前レコードには割引サービス契約番号が入っていない場合があるので補正後レコードで見る
			if(syoriTrgtWribSvcKeiNo.equals(akifm143[POS_WRIB_SVC_KEI_NO])){
				recNoList143.add(akifm143[POS_REC_NO]);
			}
		}
		for(String[] akifm144 :akifm144AtoList){
			if(syoriTrgtWribSvcKeiNo.equals(akifm144[POS_WRIB_SVC_KEI_NO])){
				recNoList144.add(akifm144[POS_REC_NO]);
			}
		}
		
		// 行番号についてOKNGを設定
		for(String[] akifm143 :akifm143MaeList){
			if(recNoList143.contains(akifm143[POS_REC_NO])){
				akifm143[POS_HOSEI_RSLT] = okng;
			}
		}
		for(String[] akifm143 :akifm143AtoList){
			if(recNoList143.contains(akifm143[POS_REC_NO])){
				akifm143[POS_HOSEI_RSLT] = okng;
			}
		}
		for(String[] akifm144 :akifm144MaeList){
			if(recNoList144.contains(akifm144[POS_REC_NO])){
				akifm144[POS_HOSEI_RSLT] = okng;
			}
		}
		for(String[] akifm144 :akifm144AtoList){
			if(recNoList144.contains(akifm144[POS_REC_NO])){
				akifm144[POS_HOSEI_RSLT] = okng;
			}
		}
	}
	


	/**
	 * AKIFM14301ファイル出力
	 * 
	 * @param inMap
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputAKIFM14301() throws Exception
	{
		//補正前イメージ
		for(String[] akifm143 :akifm143MaeList){
			makeDataAKIFM143(akifm143);
		}
		
		//補正後イメージ
		for(String[] akifm143 :akifm143AtoList){
			makeDataAKIFM143(akifm143);
		}
	}
	
	/**
	 * AKIFM14401ファイル出力
	 * 
	 * @param inMap
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputAKIFM14401() throws Exception
	{
		//補正前イメージ
		for(String[] akifm144 :akifm144MaeList){
			makeDataAKIFM144(akifm144);
		}
		
		//補正後イメージ
		for(String[] akifm144 :akifm144AtoList){
			makeDataAKIFM144(akifm144);
		}
	}
	
	
	/**
	 * 割引補正情報（割引サービス契約）(結果)の出力を行います。
	 * 
	 * @param inMap
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void makeDataAKIFM143(String[] akifm143Data) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeDataAKIFM143]");
		
		ArrayList<Object> dataList = new ArrayList<Object>();
		
		// ファイル出力
		for(int i=0; i<=69; i++){
			dataList.add(akifm143Data[i]);			//補正結果〜請求契約番号
		}
		
		JCCBatCommon.printBusinessFileUtil(this.akifm14301, dataList);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeDataAKIFM143]");
		
	}

	/**
	 * 割引補正情報（割引サービス契約内訳）(結果)の出力を行います。
	 * 
	 * @param inMap
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void makeDataAKIFM144(String[] akifm144Data) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeDataAKIFM144]");
		
		ArrayList<Object> dataList = new ArrayList<Object>();
		
		// ファイル出力
		for(int i=0; i<=27; i++){
			dataList.add(akifm144Data[i]);			//補正結果〜削除処理ＩＤ
		}
		
		JCCBatCommon.printBusinessFileUtil(this.akifm14401, dataList);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeDataAKIFM144]");
		
	}
	
	
	/**
	 * 割引サービス契約の更新をします。<br>
	 */
	private int executeKK_T_WRIB_SVC_KEI_PKUPDATE(String[] param) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("WRIB_SVC_KEI_NO", param[POS_WRIB_SVC_KEI_NO]);
		whereMap.setValue("GENE_ADD_DTM", param[POS143_GENE_ADD_DTM]);
		
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("PLAN_STAYMD", param[POS143_PLAN_STAYMD]);                      //プラン開始年月日
		setMap.setValue("PLAN_ENDYMD", param[POS143_PLAN_ENDYMD]);                      //プラン終了年月日
		setMap.setValue("PLAN_CHRG_STAYMD", param[POS143_PLAN_CHRG_STAYMD]);            //プラン課金開始年月日
		setMap.setValue("PLAN_CHRG_ENDYMD", param[POS143_PLAN_CHRG_ENDYMD]);            //プラン課金終了年月日
		setMap.setValue("SVC_STA_YMD", param[POS143_SVC_STA_YMD]);                      //サービス開始年月日
		setMap.setValue("SVC_CHRG_STAYMD", param[POS143_SVC_CHRG_STAYMD]);              //サービス課金開始年月日
		setMap.setValue("SVC_ENDYMD", param[POS143_SVC_ENDYMD]);                        //サービス終了年月日
		setMap.setValue("SVC_CHRG_ENDYMD", param[POS143_SVC_CHRG_ENDYMD]);              //サービス課金終了年月日
		setMap.setValue("SVC_DSL_YMD", param[POS143_SVC_DSL_YMD]);                      //サービス解約年月日
		setMap.setValue("WRTGKEI_SVC_PAUSE_YMD", param[POS143_WRTGKEI_SVC_PAUSE_YMD]);  //割引対象契約サービス休止年月日
		
		// DBアクセスを実行します
		int count = db_KK_T_WRIB_SVC_KEI.updateByPrimaryKeys(whereMap, setMap);
		return count;
	}
	
	/**
	 * 割引サービス契約の論理削除をします。<br>
	 */
	private int executeKK_T_WRIB_SVC_KEI_PKMKUPDATE(String[] param) throws Exception
	{
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();

		// 主キー指定
		whereMap.setValue("WRIB_SVC_KEI_NO", param[POS_WRIB_SVC_KEI_NO]);
		whereMap.setValue("GENE_ADD_DTM", param[POS143_GENE_ADD_DTM]);
		
		// 設定値のマップ
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("RSV_APLY_YMD", param[POS143_RSV_APLY_YMD]);   //予約適用年月日
		
		// 論理削除
		int count = db_KK_T_WRIB_SVC_KEI.logicalDeleteUpdateByPrimaryKeys(whereMap, setMap);
		return count;
	}
	
	/**
	 * 割引サービス契約の登録をします。<br>
	 */
	private int executeKK_T_WRIB_SVC_KEI_PKINSERT(String[] param) throws Exception
	{
		//GENE_ADD_DTM用のタイムスタンプ
		String geneAddDtm = JBSbatDateUtil.getSystemDateTimeStamp();
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("WRIB_SVC_KEI_NO", param[POS_WRIB_SVC_KEI_NO]);
		setMap.setValue("GENE_ADD_DTM", geneAddDtm);
		setMap.setValue("WRIB_SVC_KEI_STAT", param[POS_WRIB_SVC_KEI_NO+2]);
		setMap.setValue("SYSID", param[POS_WRIB_SVC_KEI_NO+3]);
		setMap.setValue("WRIB_SVC_CD", param[POS_WRIB_SVC_KEI_NO+4]);
		setMap.setValue("PCRS_CD", param[POS_WRIB_SVC_KEI_NO+5]);
		setMap.setValue("PPLAN_CD", param[POS_WRIB_SVC_KEI_NO+6]);
		setMap.setValue("SVC_USE_STA_KIBO_YMD", param[POS_WRIB_SVC_KEI_NO+7]);
		setMap.setValue("RSV_TSTA_KIBO_YMD", param[POS_WRIB_SVC_KEI_NO+8]);
		setMap.setValue("MSKM_DTL_NO", param[POS_WRIB_SVC_KEI_NO+9]);
		setMap.setValue("SHOSA_YMD", param[POS_WRIB_SVC_KEI_NO+10]);
		setMap.setValue("SHOSA_CL_YMD", param[POS_WRIB_SVC_KEI_NO+11]);
		setMap.setValue("RSV_APLY_YMD", param[POS_WRIB_SVC_KEI_NO+12]);
		setMap.setValue("RSV_CL_YMD", param[POS_WRIB_SVC_KEI_NO+13]);
		setMap.setValue("RSV_APLY_CD", param[POS_WRIB_SVC_KEI_NO+14]);
		setMap.setValue("APLY_JUN", param[POS_WRIB_SVC_KEI_NO+15]);
		setMap.setValue("PLAN_STAYMD", param[POS_WRIB_SVC_KEI_NO+16]);
		setMap.setValue("PLAN_ENDYMD", param[POS_WRIB_SVC_KEI_NO+17]);
		setMap.setValue("PLAN_CHRG_STAYMD", param[POS_WRIB_SVC_KEI_NO+18]);
		setMap.setValue("PLAN_CHRG_ENDYMD", param[POS_WRIB_SVC_KEI_NO+19]);
		setMap.setValue("PLAN_END_SBT_CD", param[POS_WRIB_SVC_KEI_NO+20]);
		setMap.setValue("SVC_CANCEL_YMD", param[POS_WRIB_SVC_KEI_NO+21]);
		setMap.setValue("SVC_CANCEL_RSN_CD", param[POS_WRIB_SVC_KEI_NO+22]);
		setMap.setValue("SVC_STA_YMD", param[POS_WRIB_SVC_KEI_NO+23]);
		setMap.setValue("SVC_CHRG_STAYMD", param[POS_WRIB_SVC_KEI_NO+24]);
		setMap.setValue("SVC_ENDYMD", param[POS_WRIB_SVC_KEI_NO+25]);
		setMap.setValue("SVC_CHRG_ENDYMD", param[POS_WRIB_SVC_KEI_NO+26]);
		setMap.setValue("SVC_DSL_YMD", param[POS_WRIB_SVC_KEI_NO+27]);
		setMap.setValue("SVC_DLRE_CD", param[POS_WRIB_SVC_KEI_NO+28]);
		setMap.setValue("SVC_DLRE_MEMO", param[POS_WRIB_SVC_KEI_NO+29]);
		setMap.setValue("SVC_DSL_TTDKI_FIN_FLG", param[POS_WRIB_SVC_KEI_NO+30]);
		setMap.setValue("KAIHK_YMD", param[POS_WRIB_SVC_KEI_NO+31]);
		setMap.setValue("SVC_CANCEL_CL_YMD", param[POS_WRIB_SVC_KEI_NO+32]);
		setMap.setValue("SVC_DSL_CL_YMD", param[POS_WRIB_SVC_KEI_NO+33]);
		setMap.setValue("CHRG_STA_YMD_HOSEI_UM", param[POS_WRIB_SVC_KEI_NO+34]);
		setMap.setValue("SKEKKA_SEND_CD", param[POS_WRIB_SVC_KEI_NO+35]);
		setMap.setValue("PNLTY_HASSEI_CD", param[POS_WRIB_SVC_KEI_NO+36]);
		setMap.setValue("IDO_DIV", param[POS_WRIB_SVC_KEI_NO+37]);
		setMap.setValue("SHOSA_DSL_FIN_CD", param[POS_WRIB_SVC_KEI_NO+38]);
		setMap.setValue("KEI_CNC_YMD", param[POS_WRIB_SVC_KEI_NO+39]);
		setMap.setValue("GRP_CD", param[POS_WRIB_SVC_KEI_NO+40]);
		setMap.setValue("INTR_CD", param[POS_WRIB_SVC_KEI_NO+41]);
		setMap.setValue("MSKM_KISAN_YMD", param[POS_WRIB_SVC_KEI_NO+42]);
		setMap.setValue("WRIB_ADD_OPTY_CD", param[POS_WRIB_SVC_KEI_NO+43]);
		setMap.setValue("WRIB_DSL_CNCL_OPTY_CD", param[POS_WRIB_SVC_KEI_NO+44]);
		setMap.setValue("WRIB_SVC_KEI_AT_KEIZK_SKCD", param[POS_WRIB_SVC_KEI_NO+45]);
		setMap.setValue("WRIB_AMNT_SNST_STDARDYMD", param[POS_WRIB_SVC_KEI_NO+46]);
		setMap.setValue("WRIB_CHRG_STA_MON_STI_CD", param[POS_WRIB_SVC_KEI_NO+47]);
		setMap.setValue("WRIB_ADD_YMD", param[POS_WRIB_SVC_KEI_NO+48]);
		setMap.setValue("WRTGKEI_SVC_PAUSE_YMD", param[POS_WRIB_SVC_KEI_NO+49]);
		setMap.setValue("WRTGKEI_SVC_PAUSE_RLS_YMD", param[POS_WRIB_SVC_KEI_NO+50]);
	
		// DBアクセスを実行します
		int count = db_KK_T_WRIB_SVC_KEI.insertByPrimaryKeys(setMap);
		return count;
	}
	
	/**
	 * 割引サービス契約内訳の更新をします。<br>
	 */
	private int executeKK_T_WRISVC_KEI_UCWK_PKUPDATE(String[] param) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("WRIB_SVC_KEI_NO", param[POS_WRIB_SVC_KEI_NO]);
		whereMap.setValue("WRIB_SVC_KEI_UCWK_NO", param[POS144_WRIB_SVC_KEI_UCWK_NO]);
		whereMap.setValue("GENE_ADD_DTM", param[POS144_GENE_ADD_DTM]);
		
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SVC_CHRG_STAYMD", param[POS144_SVC_CHRG_STAYMD]);     //サービス課金開始年月日
		setMap.setValue("SVC_CHRG_ENDYMD", param[POS144_SVC_CHRG_ENDYMD]);     //サービス課金終了年月日
		
		// DBアクセスを実行します
		int count = db_KK_T_WRISVC_KEI_UCWK.updateByPrimaryKeys(whereMap, setMap);
		return count;
	}
	
	/**
	 * 割引サービス契約の論理削除をします。<br>
	 */
	private int executeKK_T_WRISVC_KEI_UCWK_PKMKUPDATE(String[] param) throws Exception
	{
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();

		// 主キー指定
		whereMap.setValue("WRIB_SVC_KEI_NO", param[POS_WRIB_SVC_KEI_NO]);
		whereMap.setValue("WRIB_SVC_KEI_UCWK_NO", param[POS144_WRIB_SVC_KEI_UCWK_NO]);
		whereMap.setValue("GENE_ADD_DTM", param[POS144_GENE_ADD_DTM]);
		
		// 論理削除
		int count = db_KK_T_WRISVC_KEI_UCWK.logicalDeleteByPrimaryKeys(whereMap);
		return count;
	}
	
	/**
	 * 割引サービス契約内訳の登録をします。<br>
	 */
	private int executeKK_T_WRISVC_KEI_UCWK_PKINSERT(String[] param) throws Exception
	{
		//GENE_ADD_DTM用のタイムスタンプ
		String geneAddDtm = JBSbatDateUtil.getSystemDateTimeStamp();
		
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("WRIB_SVC_KEI_NO", param[POS_WRIB_SVC_KEI_NO]);
		setMap.setValue("WRIB_SVC_KEI_UCWK_NO", param[POS_WRIB_SVC_KEI_NO+1]);
		setMap.setValue("GENE_ADD_DTM", geneAddDtm);
		setMap.setValue("WRIB_SVC_KEI_UCWK_STAT", param[POS_WRIB_SVC_KEI_NO+3]);
		setMap.setValue("WRIB_SVC_DTL_CD", param[POS_WRIB_SVC_KEI_NO+4]);
		setMap.setValue("WRIB_APLY_CNT", param[POS_WRIB_SVC_KEI_NO+5]);
		setMap.setValue("SVC_CHRG_STAYMD", param[POS_WRIB_SVC_KEI_NO+6]);
		setMap.setValue("SVC_CHRG_ENDYMD", param[POS_WRIB_SVC_KEI_NO+7]);
		setMap.setValue("CHRG_STA_YMD_HOSEI_UM", param[POS_WRIB_SVC_KEI_NO+8]);
		setMap.setValue("FIRST_WRIB_APLY_YMD", param[POS_WRIB_SVC_KEI_NO+9]);
	
		// DBアクセスを実行します
		int count = db_KK_T_WRISVC_KEI_UCWK.insertByPrimaryKeys(setMap);
		return count;
	}

}
