/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHEfileAndDlydTrnReqAdd
*	ソースファイル名	：JBSbatCHEfileAndDlydTrnReqAdd.java
*	作成者				：富士通　
*	作成日				：2020年04月22日
*＜機能概要＞
*　電子管理ファイル・ディレイド処理依頼登録依頼部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v49.00.00	2020/04/22	FJ)塩津		【ANK-3826-00-00】譲渡未収分の載せ替え処理の自動化
 *	v52.00.00	2021/02/15	FJ) 寺園	【OM-2020-0001466】譲渡未収分載替（対応履歴登録）不備
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatDenshiFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.common.constant.JKKStrConst;
import eo.common.util.JPCUtilCommon;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHEfileAndDlydTrnReqAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/

	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";
	
	/** テーブル(ディレイド処理依頼)*/
	private static final String D_TBL_NAME_CC_T_DLYD_TRN_REQ = "CC_T_DLYD_TRN_REQ";
	
	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;
	
	/** テーブルアクセスクラス(ディレイド処理依頼)*/
	private JBSbatSQLAccess db_CC_T_DLYD_TRN_REQ = null;
	
	private static final String DLYD_TRN_REQ_STAT = "001";
	
	private static final String DLYD_TRN_JSSI_UNYO_DTM = "00000000000000000";
	
	private static final String SYS_CD = "99";
	
	private static final String DLYD_TRN_REQ_SBT_CD = "ZM109";
	
	private static final String FILE_CD = "ZMDY";

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/** CSVファイルパス*/
	private String csvFilePath = null;
	/** 処理依頼ジョブＩＤ */
	private String reqJobId = null;
	/** フリー項目 */
	private String[] freeItems = null;

	//v52.00.00 ADD START
	/** バッチ用ユーザID **/
	private String wkBatUser = null;
	//v52.00.00 ADD END
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);
		db_CC_T_DLYD_TRN_REQ = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_DLYD_TRN_REQ);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/

		//v52.00.00 ADD START
		// 業務パラメータ取得
		// パラメータ取得部品の初期処理
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		// 業務機能識別コード＿料金項目コード（貸倒償却額）取得
		this.wkBatUser = paramUtil.getGyoumuParameter("CH_BAT_USER");
		// パラメータ取得部品のクローズ処理
		paramUtil.close();
		//v52.00.00 ADD END
		
		// FREEITEMの取得
		this.freeItems = super.freeItem.split(JKKStrConst.SEMI_COLON);
		
		// CSVファイルパスを設定
		this.csvFilePath = this.freeItems[0];
		// 処理依頼ジョブＩＤを設定
		this.reqJobId = this.freeItems[1];
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 電子ファイル管理・ディレイド処理依頼に登録
		createDenshiFileAndCcTDlydTrnReq();
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CC_T_EFILE_KANRI.close();
		db_CC_T_DLYD_TRN_REQ.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**	
	 * 電子ファイル管理・ディレイド処理依頼に登録します。
	 * 	
	 * @throws Exception 業務サービス内で発生した例外全般。	
	 */	
	private void createDenshiFileAndCcTDlydTrnReq()  throws Exception 
	{
		// ファイル保持期間を運用日から３ヶ月間に設定する
		String delYmd = null;

		delYmd = JPCUtilCommon.addMonth(super.opeDate, 3);
		
		String[] retDenshiFile = null;
		String fullFileName = this.csvFilePath;
		
		try
		{
			// 電子ファイル管理情報の登録
			retDenshiFile = JCCbatDenshiFileUtil.createDenshiFile(commonItem, FILE_CD, fullFileName, delYmd);
		}
		catch (Exception ex)
		{
			commonItem.getConnection().rollback();
			throw ex;
		}
		
		// ディレイド処理依頼番号を採番する。
		String seqDlydTrnReqNo = JCCBatCommon.getFormatedNextSeq(commonItem, "SEQ_DLYD_TRN_REQ_NO", "D", 14);
		
		try
		{
			// ディレイド処理依頼登録処理
			String[] paramValue = this.createCcTDlydTrnReq(seqDlydTrnReqNo, retDenshiFile);
			this.executeCC_T_DLYD_TRN_REQ_PKINSERT(paramValue);
		}
		catch (Exception ex)
		{
			commonItem.getConnection().rollback();
			throw ex;
		}
	}

	/**
	 * ディレイド処理依頼情報登録文字配列を作成します。<br>
	 * <br>
	 * @param seqDlydTrnReqNo ディレイド処理依頼番号
	 * @param retDenshiFile 電子ファイル管理情報
	 * @return 登録用文字配列
	 */
	private String[] createCcTDlydTrnReq(String seqDlydTrnReqNo, String[] retDenshiFile)
	{
		String[] strParam = new String[24];

		// ディレイド処理依頼番号
		strParam[0] = seqDlydTrnReqNo;

		// ディレイド処理依頼ステータス
		strParam[1] = DLYD_TRN_REQ_STAT;

		// ディレイド処理実施運用年月日時分秒
		strParam[2] = DLYD_TRN_JSSI_UNYO_DTM;

		// 入力電子ファイル世代登録年月日時分秒
		strParam[3] = retDenshiFile[1];

		// 入力電子ファイル管理番号
		strParam[4] = retDenshiFile[0];

		// 依頼ジョブID
		strParam[5] = this.reqJobId;

		// システムコード
		strParam[6] = SYS_CD;

		// ディレイド処理依頼種別コード
		strParam[7] = DLYD_TRN_REQ_SBT_CD;

		// ディレイド処理結果コード
		strParam[8] = null;

		// エラー電子ファイル管理番号
		strParam[9] = null;

		// エラー電子ファイル世代登録年月日時分秒
		strParam[10] = null;
		
		return strParam;
	}
	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ディレイド処理依頼番号				DLYD_TRN_REQ_NO
	 *		 	ディレイド処理依頼ステータス				DLYD_TRN_REQ_STAT
	 *		 	ディレイド処理実施運用年月日時分秒				DLYD_TRN_JSSI_UNYO_DTM
	 *		 	入力電子ファイル世代登録年月日時分秒				INPUT_EFILE_GENE_ADD_DTM
	 *		 	入力電子ファイル管理番号				INPUT_EFILE_KANRI_NO
	 *		 	依頼ジョブＩＤ				REQ_JOB_ID
	 *		 	システムコード				SYS_CD
	 *		 	ディレイド処理依頼種別コード				DLYD_TRN_REQ_SBT_CD
	 *		 	ディレイド処理結果コード				DLYD_TRN_RSLT_CD
	 *		 	エラー電子ファイル管理番号				ERR_EFILE_KANRI_NO
	 *		 	エラー電子ファイル世代登録年月日時分秒				ERR_EFILE_GENE_ADD_DTM
	 *		 	登録年月日時分秒				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 executeCC_T_DLYD_TRN_REQ_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("DLYD_TRN_REQ_NO", setParam[0]);
		setMap.setValue("DLYD_TRN_REQ_STAT", setParam[1]);
		setMap.setValue("DLYD_TRN_JSSI_UNYO_DTM", setParam[2]);
		setMap.setValue("INPUT_EFILE_GENE_ADD_DTM", setParam[3]);
		setMap.setValue("INPUT_EFILE_KANRI_NO", setParam[4]);
		setMap.setValue("REQ_JOB_ID", setParam[5]);
		setMap.setValue("SYS_CD", setParam[6]);
		setMap.setValue("DLYD_TRN_REQ_SBT_CD", setParam[7]);
		setMap.setValue("DLYD_TRN_RSLT_CD", setParam[8]);
		setMap.setValue("ERR_EFILE_KANRI_NO", setParam[9]);
		setMap.setValue("ERR_EFILE_GENE_ADD_DTM", setParam[10]);
		setMap.setValue("ADD_DTM", setParam[11]);
		//v52.00.00 MOD START
//		setMap.setValue("ADD_OPEACNT", setParam[12]);
		setMap.setValue("ADD_OPEACNT", this.wkBatUser);
		//v52.00.00 MOD END
		setMap.setValue("UPD_DTM", setParam[13]);
		setMap.setValue("UPD_OPEACNT", setParam[14]);
		setMap.setValue("DEL_DTM", setParam[15]);
		setMap.setValue("DEL_OPEACNT", setParam[16]);
		setMap.setValue("MK_FLG", setParam[17]);
		setMap.setValue("ADD_UNYO_YMD", setParam[18]);
		setMap.setValue("ADD_TRN_ID", setParam[19]);
		setMap.setValue("UPD_UNYO_YMD", setParam[20]);
		setMap.setValue("UPD_TRN_ID", setParam[21]);
		setMap.setValue("DEL_UNYO_YMD", setParam[22]);
		setMap.setValue("DEL_TRN_ID", setParam[23]);
	
		// DBアクセスを実行します
		db_CC_T_DLYD_TRN_REQ.insertByPrimaryKeys(setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
