/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKojihhiKapKeiCancel
*	ソースファイル名	：JBSbatKKKojihhiKapKeiCancel.java
*	作成者				：富士通　
*	作成日				：2018年04月10日
*＜機能概要＞
*　工事費割賦契約キャンセル部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v37.00.00	2018/04/10   FJ)王		【ANK-3383-00-00】標準工事費分割請求（STEP2） 新規作成
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JCCBatCommon;
import eo.business.util.table.JBSbatKK_T_KOJIHI_KAP_KEI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKojihiKapKeiCancel extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(工事費割賦契約)*/
	private static final String D_TBL_NAME_KK_T_KOJIHI_KAP_KEI = "KK_T_KOJIHI_KAP_KEI";

	/** テーブルアクセスクラス(工事費割賦契約)*/
	private JBSbatSQLAccess db_KK_T_KOJIHI_KAP_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 工事費割賦契約項目数 */
	private static final int KK_T_KOJIHI_KAP_KEI_CNT = 32;

	/** 工事費割賦契約キャンセル対象ファイルパス */
	private String kojihiKapKeiCancelFilePath = null;
	
	/** 工事費割賦契約キャンセル対象ファイルオブジェクト */
	private JBSbatInputFileUtil kojihiKapKeiCancelFileObj = null;
	
	/** 工事費割賦契約キャンセル対象ファイルオブジェクト */
	private JBSbatDefFileUtil kojihiKapKeiCancelFileDefObj = null;
	
	/** データ(1件) */
	private String dataLine = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KOJIHI_KAP_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KOJIHI_KAP_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// FreeItem取得（FREE項目には「入力ファイル定義名1;入力ファイルパス1;」が設定されている）
		String[] freeItems = commonItem.getFreeItem().split(";");
		
		if (freeItems != null && freeItems.length == 2)
		{
			// 工事費割賦契約キャンセル対象ファイルパス
			kojihiKapKeiCancelFilePath = freeItems[1];
			// 工事費割賦契約キャンセル対象ファイルオブジェクトを生成する
			kojihiKapKeiCancelFileObj = new JBSbatInputFileUtil(kojihiKapKeiCancelFilePath);
			// 工事費割賦契約キャンセル対象定義ファイル名を取得する
			String kojihiKapKeiCancelFileDefName = JBSbatAplConst.getAplConstValue("IND") + freeItems[0] + ".def";
			// 工事費割賦契約キャンセル対象定義ファイルオブジェクトを生成する
			kojihiKapKeiCancelFileDefObj  = new JBSbatDefFileUtil(kojihiKapKeiCancelFileDefName, kojihiKapKeiCancelFileObj);
			// Readerオブジェクトを生成する。
			kojihiKapKeiCancelFileObj.createReader();
		}
		else 
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"FREE"});
		}
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		
		// サービス契約回線内訳番号取得（退避用）
		String svcKeiKaiUcwkNoOld = "";
		
		// 工事費割賦契約番号取得（退避用）
		String kojihiKapKeiNoOld = "";

		// 工事費割賦契約キャンセル対象ファイル
		while (kojihiKapKeiCancelFileObj.ready())
		{
			// ファイルレコード取得
			dataLine = kojihiKapKeiCancelFileObj.readLine();
			
			// 定義ファイルに設定された区切り文字で分割
			String[] cols = dataLine.split(kojihiKapKeiCancelFileDefObj.getDelimiter(), -1);
			
			// 同じサービス契約回線内訳番号の場合
			if (svcKeiKaiUcwkNoOld.equals(cols[0]))
			{
				// 工事費割賦契約番号が違う場合
				if (!kojihiKapKeiNoOld.equals(cols[1]))
				{
					// 工事費割賦契約キャンセル対象更新処理
					kojihiKapKeiCancelUpdate(cols);
				}
			}
			else
			{
				// 工事費割賦契約番号が違う場合
				if (!kojihiKapKeiNoOld.equals(cols[1]))
				{
					// サービス契約番号が設定されていない場合
					if (cols[3] == null || "".equals(cols[3]))
					{
						// 工事費割賦契約キャンセル対象更新処理
						kojihiKapKeiCancelUpdate(cols);
					}
				}
			}
			
			// サービス契約回線内訳番号を退避する
			svcKeiKaiUcwkNoOld = cols[0];
			
			// 工事費割賦契約番号取得を退避する
			kojihiKapKeiNoOld = cols[1];
		}
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/** 
	 * 工事費割賦契約キャンセル対象更新処理<br>
	 * @param kojihiKapKeiCancelData 工事費割賦契約キャンセル対象データ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void kojihiKapKeiCancelUpdate(String[] kojihiKapKeiCancelData) throws Exception
	{
		
		// 工事費割賦契約のデータの件数分、更新処理を行う
		if (kojihiKapKeiCancelData != null && !kojihiKapKeiCancelData[0].isEmpty())
		{
			// レコード登録のため、工事費割賦契約に排他検索をかける
			JBSbatCommonDBInterface excSearchList = excSearchKojihiKapKei(kojihiKapKeiCancelData);
			
			// 登録処理
			addKojihiKapKei(excSearchList);
		}
	}
	/**
	 * 工事費割賦契約に排他検索をかける<br>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface excSearchKojihiKapKei(Object[] paramList) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		
		// 工事費割賦契約番号
		whereMap.setValue(JBSbatKK_T_KOJIHI_KAP_KEI.KOJIHI_KAP_KEI_NO, paramList[1]);
		
		// 世代登録年月日時分秒
		whereMap.setValue(JBSbatKK_T_KOJIHI_KAP_KEI.GENE_ADD_DTM, paramList[2]);
		
		// 排他検索の実施
		JBSbatCommonDBInterface outMap = db_KK_T_KOJIHI_KAP_KEI.selectByPrimaryKeysForUpdateWait(whereMap);
		
		return outMap;
	}

	/**
	 * 工事費割賦契約を登録します。<br>
	 * @param excSearchList 排他検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void addKojihiKapKei(JBSbatCommonDBInterface excSearchList) throws Exception
	{
		
		// レコードが存在するとき、データを登録する。
		if (null != excSearchList)
		{
			// 登録用SQLの設定値のマップを作成します
			Object[] setParam = new Object[KK_T_KOJIHI_KAP_KEI_CNT];
			
			// 工事費割賦契約番号
			setParam[0] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KOJIHI_KAP_KEI_NO);
			// 世代登録年月日時分秒
			setParam[1] = JCCBatCommon.getSysDateTimeStamp();
			// 割賦契約ステータス
			setParam[2] = JKKStrConst.CD01471_CANCEL_ZM;
			// 割賦プランコード
			setParam[3] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_PLAN_CD);
			// サービス契約回線内訳番号
			setParam[4] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.SVC_KEI_KAISEN_UCWK_NO);
			// 初回請求サービス契約番号
			setParam[5] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.FIRST_SEIKY_SVC_KEI_NO);
			// 申込明細番号
			setParam[6] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.MSKM_DTL_NO);
			// 異動区分
			setParam[7] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.IDO_DIV);
			// 割賦一括請求切替年月
			setParam[8] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_IKT_SIKY_SWCH_YM);
			// 割賦契約締結年月日
			setParam[9] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_KEI_CNC_YMD);
			// 割賦契約終了年月日
			setParam[10] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_KEI_ENDYMD);
			// 割賦契約キャンセル年月日
			setParam[11] = super.commonItem.getOpeDate();
			// 割賦契約サービス開始年月日
			setParam[12] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_KEI_SVC_STAYMD);
			// 割賦契約課金開始年月日
			setParam[13] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_KEI_CHRG_STAYMD);
			// 割賦請求開始年月
			setParam[14] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_SEIKY_STA_YM);
			// 割賦支払い残回数
			setParam[15] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_PAY_ZAN_CNT);
			// 割賦請求済回数
			setParam[16] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_SEIKY_ZUMI_CNT);
			// 割賦請求済金額
			setParam[17] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.KAP_SEIKY_ZUMI_AMNT);
			// 登録年月日時分秒
			setParam[18] = JBSbatDateUtil.getSystemDateTimeStamp();
			// 登録オペレータアカウント
			setParam[19] = super.batchUserId;
			// 更新年月日時分秒
			setParam[20] = JBSbatDateUtil.getSystemDateTimeStamp();
			// 更新オペレータアカウント
			setParam[21] = super.batchUserId;
			// 削除年月日時分秒
			setParam[22] = "";
			// 削除オペレータアカウント
			setParam[23] = "";
			// 無効フラグ(0：有効)
			setParam[24] = JBSbatKKConst.MK_FLG_YK;
			// 登録運用年月日
			setParam[25] = "";
			// 登録処理ID
			setParam[26] = "";
			// 更新運用年月日
			setParam[27] = "";
			// 更新処理ID
			setParam[28] = "";
			// 削除運用年月日
			setParam[29] = "";
			// 削除処理ID
			setParam[30] = "";
			// 分割支払会計計上年月
			setParam[31] = excSearchList.getString(JBSbatKK_T_KOJIHI_KAP_KEI.BUNKATSU_PAY_KAIK_SUMUP_YM);
			
			// DBアクセスを実行します
			executeKK_T_KOJIHI_KAP_KEI_PKINSERT(setParam);
		}
	}
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KOJIHI_KAP_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	工事費割賦契約番号				KOJIHI_KAP_KEI_NO
	 *		 	世代登録年月日時分				GENE_ADD_DTM
	 *		 	割賦契約ステータス				KAP_KEI_STAT
	 *		 	割賦プランコード				KAP_PLAN_CD
	 *		 	サービス契約回線内訳番号				SVC_KEI_KAISEN_UCWK_NO
	 *		 	初回請求サービス契約番号				FIRST_SEIKY_SVC_KEI_NO
	 *		 	申込明細番号				MSKM_DTL_NO
	 *		 	異動区分				IDO_DIV
	 *		 	割賦一括請求切替年月				KAP_IKT_SIKY_SWCH_YM
	 *		 	割賦契約締結年月日				KAP_KEI_CNC_YMD
	 *		 	割賦契約終了年月日				KAP_KEI_ENDYMD
	 *		 	割賦契約キャンセル年月日				KAP_KEI_CANCEL_YMD
	 *		 	割賦契約サービス開始年月日				KAP_KEI_SVC_STAYMD
	 *		 	割賦契約課金開始年月日				KAP_KEI_CHRG_STAYMD
	 *		 	割賦請求開始年月				KAP_SEIKY_STA_YM
	 *		 	割賦支払い残回数				KAP_PAY_ZAN_CNT
	 *		 	割賦請求済回数				KAP_SEIKY_ZUMI_CNT
	 *		 	割賦請求済金額				KAP_SEIKY_ZUMI_AMNT
	 *		 	登録年月日時分秒				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
	 *		 	分割支払会計計上年月				BUNKATSU_PAY_KAIK_SUMUP_YM
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KOJIHI_KAP_KEI_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("KOJIHI_KAP_KEI_NO", setParam[0]);
		setMap.setValue("GENE_ADD_DTM", setParam[1]);
		setMap.setValue("KAP_KEI_STAT", setParam[2]);
		setMap.setValue("KAP_PLAN_CD", setParam[3]);
		setMap.setValue("SVC_KEI_KAISEN_UCWK_NO", setParam[4]);
		setMap.setValue("FIRST_SEIKY_SVC_KEI_NO", setParam[5]);
		setMap.setValue("MSKM_DTL_NO", setParam[6]);
		setMap.setValue("IDO_DIV", setParam[7]);
		setMap.setValue("KAP_IKT_SIKY_SWCH_YM", setParam[8]);
		setMap.setValue("KAP_KEI_CNC_YMD", setParam[9]);
		setMap.setValue("KAP_KEI_ENDYMD", setParam[10]);
		setMap.setValue("KAP_KEI_CANCEL_YMD", setParam[11]);
		setMap.setValue("KAP_KEI_SVC_STAYMD", setParam[12]);
		setMap.setValue("KAP_KEI_CHRG_STAYMD", setParam[13]);
		setMap.setValue("KAP_SEIKY_STA_YM", setParam[14]);
		setMap.setValue("KAP_PAY_ZAN_CNT", setParam[15]);
		setMap.setValue("KAP_SEIKY_ZUMI_CNT", setParam[16]);
		setMap.setValue("KAP_SEIKY_ZUMI_AMNT", setParam[17]);
		setMap.setValue("ADD_DTM", setParam[18]);
		setMap.setValue("ADD_OPEACNT", setParam[19]);
		setMap.setValue("UPD_DTM", setParam[20]);
		setMap.setValue("UPD_OPEACNT", setParam[21]);
		setMap.setValue("DEL_DTM", setParam[22]);
		setMap.setValue("DEL_OPEACNT", setParam[23]);
		setMap.setValue("MK_FLG", setParam[24]);
		setMap.setValue("ADD_UNYO_YMD", setParam[25]);
		setMap.setValue("ADD_TRN_ID", setParam[26]);
		setMap.setValue("UPD_UNYO_YMD", setParam[27]);
		setMap.setValue("UPD_TRN_ID", setParam[28]);
		setMap.setValue("DEL_UNYO_YMD", setParam[29]);
		setMap.setValue("DEL_TRN_ID", setParam[30]);
		setMap.setValue("BUNKATSU_PAY_KAIK_SUMUP_YM", setParam[31]);
	
		// DBアクセスを実行します
		db_KK_T_KOJIHI_KAP_KEI.insertByPrimaryKeys(setMap);
	}
}
